Import GCC 9.1, binutils users/hjl/linux/master@9b4157baae

Signed-off-by: Park Ju Hyung <qkrwngud825@gmail.com>
diff --git a/aarch64-elf/bin/ar b/aarch64-elf/bin/ar
new file mode 100755
index 0000000..56c476b
--- /dev/null
+++ b/aarch64-elf/bin/ar
Binary files differ
diff --git a/aarch64-elf/bin/as b/aarch64-elf/bin/as
new file mode 100755
index 0000000..28a707c
--- /dev/null
+++ b/aarch64-elf/bin/as
Binary files differ
diff --git a/aarch64-elf/bin/ld b/aarch64-elf/bin/ld
new file mode 100755
index 0000000..9d4f5d2
--- /dev/null
+++ b/aarch64-elf/bin/ld
Binary files differ
diff --git a/aarch64-elf/bin/ld.bfd b/aarch64-elf/bin/ld.bfd
new file mode 100755
index 0000000..9d4f5d2
--- /dev/null
+++ b/aarch64-elf/bin/ld.bfd
Binary files differ
diff --git a/aarch64-elf/bin/ld.gold b/aarch64-elf/bin/ld.gold
new file mode 100755
index 0000000..168afe9
--- /dev/null
+++ b/aarch64-elf/bin/ld.gold
Binary files differ
diff --git a/aarch64-elf/bin/nm b/aarch64-elf/bin/nm
new file mode 100755
index 0000000..ff351a7
--- /dev/null
+++ b/aarch64-elf/bin/nm
Binary files differ
diff --git a/aarch64-elf/bin/objcopy b/aarch64-elf/bin/objcopy
new file mode 100755
index 0000000..cb408e1
--- /dev/null
+++ b/aarch64-elf/bin/objcopy
Binary files differ
diff --git a/aarch64-elf/bin/objdump b/aarch64-elf/bin/objdump
new file mode 100755
index 0000000..f2f869f
--- /dev/null
+++ b/aarch64-elf/bin/objdump
Binary files differ
diff --git a/aarch64-elf/bin/ranlib b/aarch64-elf/bin/ranlib
new file mode 100755
index 0000000..31b05cb
--- /dev/null
+++ b/aarch64-elf/bin/ranlib
Binary files differ
diff --git a/aarch64-elf/bin/readelf b/aarch64-elf/bin/readelf
new file mode 100755
index 0000000..cc64e78
--- /dev/null
+++ b/aarch64-elf/bin/readelf
Binary files differ
diff --git a/aarch64-elf/bin/strip b/aarch64-elf/bin/strip
new file mode 100755
index 0000000..53110c1
--- /dev/null
+++ b/aarch64-elf/bin/strip
Binary files differ
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.x b/aarch64-elf/lib/ldscripts/aarch64elf.x
new file mode 100644
index 0000000..9bfe7d8
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.x
@@ -0,0 +1,220 @@
+/* Default linker script, for normal executables */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xbn b/aarch64-elf/lib/ldscripts/aarch64elf.xbn
new file mode 100644
index 0000000..54a8cfc
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xbn
@@ -0,0 +1,220 @@
+/* Script for -N: mix text and data on same page; don't align data */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = .;
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xc b/aarch64-elf/lib/ldscripts/aarch64elf.xc
new file mode 100644
index 0000000..0325757
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xc
@@ -0,0 +1,222 @@
+/* Script for -z combreloc: combine and sort reloc sections */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xce b/aarch64-elf/lib/ldscripts/aarch64elf.xce
new file mode 100644
index 0000000..7780cbb
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xce
@@ -0,0 +1,226 @@
+/* Script for -z combreloc -z separate-code: combine and sort reloc sections with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xd b/aarch64-elf/lib/ldscripts/aarch64elf.xd
new file mode 100644
index 0000000..c4d082b
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xd
@@ -0,0 +1,220 @@
+/* Script for ld -pie: link position independent executable */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xdc b/aarch64-elf/lib/ldscripts/aarch64elf.xdc
new file mode 100644
index 0000000..d4865b8
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xdc
@@ -0,0 +1,222 @@
+/* Script for -pie -z combreloc: position independent executable, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xdce b/aarch64-elf/lib/ldscripts/aarch64elf.xdce
new file mode 100644
index 0000000..f81aac1
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xdce
@@ -0,0 +1,226 @@
+/* Script for -pie -z combreloc -z separate-code: position independent executable, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xde b/aarch64-elf/lib/ldscripts/aarch64elf.xde
new file mode 100644
index 0000000..00ffefc
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xde
@@ -0,0 +1,224 @@
+/* Script for ld -pie -z separate-code: link position independent executable with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xdw b/aarch64-elf/lib/ldscripts/aarch64elf.xdw
new file mode 100644
index 0000000..5b024e7
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xdw
@@ -0,0 +1,221 @@
+/* Script for -pie -z combreloc -z now -z relro: position independent executable, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xdwe b/aarch64-elf/lib/ldscripts/aarch64elf.xdwe
new file mode 100644
index 0000000..35a07bf
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xdwe
@@ -0,0 +1,225 @@
+/* Script for -pie -z combreloc -z now -z relro -z separate-code: position independent executable, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xe b/aarch64-elf/lib/ldscripts/aarch64elf.xe
new file mode 100644
index 0000000..1d41cf6
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xe
@@ -0,0 +1,224 @@
+/* Script for -z separate-code: generate normal executables with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xn b/aarch64-elf/lib/ldscripts/aarch64elf.xn
new file mode 100644
index 0000000..3eea629
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xn
@@ -0,0 +1,220 @@
+/* Script for -n: mix text and data on same page */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xr b/aarch64-elf/lib/ldscripts/aarch64elf.xr
new file mode 100644
index 0000000..59be593
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xr
@@ -0,0 +1,134 @@
+/* Script for ld -r: link without relocation */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ /* For some reason, the Solaris linker makes bad executables
+  if gld -r is used and the intermediate file has sections starting
+  at non-zero addresses.  Could be a Solaris ld bug, could be a GNU ld
+  bug.  But for now assigning the zero vmas works.  */
+SECTIONS
+{
+  .interp       0 : { *(.interp) }
+  .note.gnu.build-id 0: { *(.note.gnu.build-id) }
+  .hash         0 : { *(.hash) }
+  .gnu.hash     0 : { *(.gnu.hash) }
+  .dynsym       0 : { *(.dynsym) }
+  .dynstr       0 : { *(.dynstr) }
+  .gnu.version  0 : { *(.gnu.version) }
+  .gnu.version_d 0: { *(.gnu.version_d) }
+  .gnu.version_r 0: { *(.gnu.version_r) }
+  .rela.init    0 : { *(.rela.init) }
+  .rela.text    0 : { *(.rela.text) }
+  .rela.fini    0 : { *(.rela.fini) }
+  .rela.rodata  0 : { *(.rela.rodata) }
+  .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) }
+  .rela.data    0 : { *(.rela.data) }
+  .rela.tdata	0 : { *(.rela.tdata) }
+  .rela.tbss	0 : { *(.rela.tbss) }
+  .rela.ctors   0 : { *(.rela.ctors) }
+  .rela.dtors   0 : { *(.rela.dtors) }
+  .rela.got     0 : { *(.rela.got) }
+  .rela.bss     0 : { *(.rela.bss) }
+  .rela.ifunc   0 : { *(.rela.ifunc) }
+  .rela.plt     0 :
+    {
+      *(.rela.plt)
+    }
+  .init         0 :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt          0 : { *(.plt) }
+  .text         0 :
+  {
+    *(.text .stub)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini         0 :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  .rodata       0 : { *(.rodata) }
+  .rodata1      0 : { *(.rodata1) }
+  .eh_frame_hdr 0 : { *(.eh_frame_hdr) }
+  .eh_frame     0 : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+  .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) }
+  .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) }
+  /* Exception handling  */
+  .eh_frame     0 : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+  .gnu_extab    0 : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) }
+  .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) }
+  /* Thread Local Storage sections  */
+  .tdata	0 :
+   {
+     *(.tdata)
+   }
+  .tbss		0 : { *(.tbss) }
+  .jcr          0 : { KEEP (*(.jcr)) }
+  .dynamic      0 : { *(.dynamic) }
+  .got          0 : { *(.got) }
+  .got.plt      0 : { *(.got.plt) }
+  .data         0 :
+  {
+    *(.data)
+  }
+  .data1        0 : { *(.data1) }
+  .bss          0 :
+  {
+   *(.bss)
+  }
+  .stack        0 :
+  {
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xs b/aarch64-elf/lib/ldscripts/aarch64elf.xs
new file mode 100644
index 0000000..b3d991f
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xs
@@ -0,0 +1,210 @@
+/* Script for ld --shared: link shared library */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xsc b/aarch64-elf/lib/ldscripts/aarch64elf.xsc
new file mode 100644
index 0000000..fb4a34e
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xsc
@@ -0,0 +1,212 @@
+/* Script for --shared -z combreloc: shared library, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xsce b/aarch64-elf/lib/ldscripts/aarch64elf.xsce
new file mode 100644
index 0000000..b8b01bb
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xsce
@@ -0,0 +1,216 @@
+/* Script for --shared -z combreloc -z separate-code: shared library, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xse b/aarch64-elf/lib/ldscripts/aarch64elf.xse
new file mode 100644
index 0000000..cb03ac8
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xse
@@ -0,0 +1,214 @@
+/* Script for ld --shared -z separate-code: link shared library with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xsw b/aarch64-elf/lib/ldscripts/aarch64elf.xsw
new file mode 100644
index 0000000..a36c9e9
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xsw
@@ -0,0 +1,211 @@
+/* Script for --shared -z combreloc -z now -z relro: shared library, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xswe b/aarch64-elf/lib/ldscripts/aarch64elf.xswe
new file mode 100644
index 0000000..0b6b296
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xswe
@@ -0,0 +1,215 @@
+/* Script for --shared -z combreloc -z now -z relro -z separate-code: shared library, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xu b/aarch64-elf/lib/ldscripts/aarch64elf.xu
new file mode 100644
index 0000000..32cc384
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xu
@@ -0,0 +1,135 @@
+/* Script for ld -Ur: link w/out relocation, do create constructors */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ /* For some reason, the Solaris linker makes bad executables
+  if gld -r is used and the intermediate file has sections starting
+  at non-zero addresses.  Could be a Solaris ld bug, could be a GNU ld
+  bug.  But for now assigning the zero vmas works.  */
+SECTIONS
+{
+  .interp       0 : { *(.interp) }
+  .note.gnu.build-id 0: { *(.note.gnu.build-id) }
+  .hash         0 : { *(.hash) }
+  .gnu.hash     0 : { *(.gnu.hash) }
+  .dynsym       0 : { *(.dynsym) }
+  .dynstr       0 : { *(.dynstr) }
+  .gnu.version  0 : { *(.gnu.version) }
+  .gnu.version_d 0: { *(.gnu.version_d) }
+  .gnu.version_r 0: { *(.gnu.version_r) }
+  .rela.init    0 : { *(.rela.init) }
+  .rela.text    0 : { *(.rela.text) }
+  .rela.fini    0 : { *(.rela.fini) }
+  .rela.rodata  0 : { *(.rela.rodata) }
+  .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) }
+  .rela.data    0 : { *(.rela.data) }
+  .rela.tdata	0 : { *(.rela.tdata) }
+  .rela.tbss	0 : { *(.rela.tbss) }
+  .rela.ctors   0 : { *(.rela.ctors) }
+  .rela.dtors   0 : { *(.rela.dtors) }
+  .rela.got     0 : { *(.rela.got) }
+  .rela.bss     0 : { *(.rela.bss) }
+  .rela.ifunc   0 : { *(.rela.ifunc) }
+  .rela.plt     0 :
+    {
+      *(.rela.plt)
+    }
+  .init         0 :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt          0 : { *(.plt) }
+  .text         0 :
+  {
+    *(.text .stub)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini         0 :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  .rodata       0 : { *(.rodata) }
+  .rodata1      0 : { *(.rodata1) }
+  .eh_frame_hdr 0 : { *(.eh_frame_hdr) }
+  .eh_frame     0 : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+  .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) }
+  .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) }
+  /* Exception handling  */
+  .eh_frame     0 : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+  .gnu_extab    0 : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) }
+  .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) }
+  /* Thread Local Storage sections  */
+  .tdata	0 :
+   {
+     *(.tdata)
+   }
+  .tbss		0 : { *(.tbss) }
+  .jcr          0 : { KEEP (*(.jcr)) }
+  .dynamic      0 : { *(.dynamic) }
+  .got          0 : { *(.got) }
+  .got.plt      0 : { *(.got.plt) }
+  .data         0 :
+  {
+    *(.data)
+    SORT(CONSTRUCTORS)
+  }
+  .data1        0 : { *(.data1) }
+  .bss          0 :
+  {
+   *(.bss)
+  }
+  .stack        0 :
+  {
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xw b/aarch64-elf/lib/ldscripts/aarch64elf.xw
new file mode 100644
index 0000000..a74e3ad
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xw
@@ -0,0 +1,221 @@
+/* Script for -z combreloc -z now -z relro: combine and sort reloc sections */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf.xwe b/aarch64-elf/lib/ldscripts/aarch64elf.xwe
new file mode 100644
index 0000000..5ed0983
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf.xwe
@@ -0,0 +1,225 @@
+/* Script for -z combreloc -z now -z relro -z separate-code: combine and sort reloc sections with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.x b/aarch64-elf/lib/ldscripts/aarch64elf32.x
new file mode 100644
index 0000000..d99f719
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.x
@@ -0,0 +1,220 @@
+/* Default linker script, for normal executables */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xbn b/aarch64-elf/lib/ldscripts/aarch64elf32.xbn
new file mode 100644
index 0000000..718c0ce
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xbn
@@ -0,0 +1,220 @@
+/* Script for -N: mix text and data on same page; don't align data */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = .;
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xc b/aarch64-elf/lib/ldscripts/aarch64elf32.xc
new file mode 100644
index 0000000..f1ed4db
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xc
@@ -0,0 +1,222 @@
+/* Script for -z combreloc: combine and sort reloc sections */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xce b/aarch64-elf/lib/ldscripts/aarch64elf32.xce
new file mode 100644
index 0000000..05b5c10
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xce
@@ -0,0 +1,226 @@
+/* Script for -z combreloc -z separate-code: combine and sort reloc sections with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xd b/aarch64-elf/lib/ldscripts/aarch64elf32.xd
new file mode 100644
index 0000000..0ebb171
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xd
@@ -0,0 +1,220 @@
+/* Script for ld -pie: link position independent executable */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xdc b/aarch64-elf/lib/ldscripts/aarch64elf32.xdc
new file mode 100644
index 0000000..97c9645
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xdc
@@ -0,0 +1,222 @@
+/* Script for -pie -z combreloc: position independent executable, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xdce b/aarch64-elf/lib/ldscripts/aarch64elf32.xdce
new file mode 100644
index 0000000..1a7931b
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xdce
@@ -0,0 +1,226 @@
+/* Script for -pie -z combreloc -z separate-code: position independent executable, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xde b/aarch64-elf/lib/ldscripts/aarch64elf32.xde
new file mode 100644
index 0000000..287a1c9
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xde
@@ -0,0 +1,224 @@
+/* Script for ld -pie -z separate-code: link position independent executable with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xdw b/aarch64-elf/lib/ldscripts/aarch64elf32.xdw
new file mode 100644
index 0000000..d81669a
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xdw
@@ -0,0 +1,221 @@
+/* Script for -pie -z combreloc -z now -z relro: position independent executable, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xdwe b/aarch64-elf/lib/ldscripts/aarch64elf32.xdwe
new file mode 100644
index 0000000..4729b27
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xdwe
@@ -0,0 +1,225 @@
+/* Script for -pie -z combreloc -z now -z relro -z separate-code: position independent executable, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xe b/aarch64-elf/lib/ldscripts/aarch64elf32.xe
new file mode 100644
index 0000000..82f6e76
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xe
@@ -0,0 +1,224 @@
+/* Script for -z separate-code: generate normal executables with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xn b/aarch64-elf/lib/ldscripts/aarch64elf32.xn
new file mode 100644
index 0000000..e3a49f7
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xn
@@ -0,0 +1,220 @@
+/* Script for -n: mix text and data on same page */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xr b/aarch64-elf/lib/ldscripts/aarch64elf32.xr
new file mode 100644
index 0000000..bdef554
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xr
@@ -0,0 +1,134 @@
+/* Script for ld -r: link without relocation */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ /* For some reason, the Solaris linker makes bad executables
+  if gld -r is used and the intermediate file has sections starting
+  at non-zero addresses.  Could be a Solaris ld bug, could be a GNU ld
+  bug.  But for now assigning the zero vmas works.  */
+SECTIONS
+{
+  .interp       0 : { *(.interp) }
+  .note.gnu.build-id 0: { *(.note.gnu.build-id) }
+  .hash         0 : { *(.hash) }
+  .gnu.hash     0 : { *(.gnu.hash) }
+  .dynsym       0 : { *(.dynsym) }
+  .dynstr       0 : { *(.dynstr) }
+  .gnu.version  0 : { *(.gnu.version) }
+  .gnu.version_d 0: { *(.gnu.version_d) }
+  .gnu.version_r 0: { *(.gnu.version_r) }
+  .rela.init    0 : { *(.rela.init) }
+  .rela.text    0 : { *(.rela.text) }
+  .rela.fini    0 : { *(.rela.fini) }
+  .rela.rodata  0 : { *(.rela.rodata) }
+  .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) }
+  .rela.data    0 : { *(.rela.data) }
+  .rela.tdata	0 : { *(.rela.tdata) }
+  .rela.tbss	0 : { *(.rela.tbss) }
+  .rela.ctors   0 : { *(.rela.ctors) }
+  .rela.dtors   0 : { *(.rela.dtors) }
+  .rela.got     0 : { *(.rela.got) }
+  .rela.bss     0 : { *(.rela.bss) }
+  .rela.ifunc   0 : { *(.rela.ifunc) }
+  .rela.plt     0 :
+    {
+      *(.rela.plt)
+    }
+  .init         0 :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt          0 : { *(.plt) }
+  .text         0 :
+  {
+    *(.text .stub)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini         0 :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  .rodata       0 : { *(.rodata) }
+  .rodata1      0 : { *(.rodata1) }
+  .eh_frame_hdr 0 : { *(.eh_frame_hdr) }
+  .eh_frame     0 : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+  .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) }
+  .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) }
+  /* Exception handling  */
+  .eh_frame     0 : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+  .gnu_extab    0 : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) }
+  .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) }
+  /* Thread Local Storage sections  */
+  .tdata	0 :
+   {
+     *(.tdata)
+   }
+  .tbss		0 : { *(.tbss) }
+  .jcr          0 : { KEEP (*(.jcr)) }
+  .dynamic      0 : { *(.dynamic) }
+  .got          0 : { *(.got) }
+  .got.plt      0 : { *(.got.plt) }
+  .data         0 :
+  {
+    *(.data)
+  }
+  .data1        0 : { *(.data1) }
+  .bss          0 :
+  {
+   *(.bss)
+  }
+  .stack        0 :
+  {
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xs b/aarch64-elf/lib/ldscripts/aarch64elf32.xs
new file mode 100644
index 0000000..9c58158
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xs
@@ -0,0 +1,210 @@
+/* Script for ld --shared: link shared library */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xsc b/aarch64-elf/lib/ldscripts/aarch64elf32.xsc
new file mode 100644
index 0000000..27e36c4
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xsc
@@ -0,0 +1,212 @@
+/* Script for --shared -z combreloc: shared library, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xsce b/aarch64-elf/lib/ldscripts/aarch64elf32.xsce
new file mode 100644
index 0000000..8b88956
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xsce
@@ -0,0 +1,216 @@
+/* Script for --shared -z combreloc -z separate-code: shared library, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xse b/aarch64-elf/lib/ldscripts/aarch64elf32.xse
new file mode 100644
index 0000000..5d99aa2
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xse
@@ -0,0 +1,214 @@
+/* Script for ld --shared -z separate-code: link shared library with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xsw b/aarch64-elf/lib/ldscripts/aarch64elf32.xsw
new file mode 100644
index 0000000..3719f74
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xsw
@@ -0,0 +1,211 @@
+/* Script for --shared -z combreloc -z now -z relro: shared library, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xswe b/aarch64-elf/lib/ldscripts/aarch64elf32.xswe
new file mode 100644
index 0000000..bbfb792
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xswe
@@ -0,0 +1,215 @@
+/* Script for --shared -z combreloc -z now -z relro -z separate-code: shared library, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xu b/aarch64-elf/lib/ldscripts/aarch64elf32.xu
new file mode 100644
index 0000000..cc99f04
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xu
@@ -0,0 +1,135 @@
+/* Script for ld -Ur: link w/out relocation, do create constructors */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ /* For some reason, the Solaris linker makes bad executables
+  if gld -r is used and the intermediate file has sections starting
+  at non-zero addresses.  Could be a Solaris ld bug, could be a GNU ld
+  bug.  But for now assigning the zero vmas works.  */
+SECTIONS
+{
+  .interp       0 : { *(.interp) }
+  .note.gnu.build-id 0: { *(.note.gnu.build-id) }
+  .hash         0 : { *(.hash) }
+  .gnu.hash     0 : { *(.gnu.hash) }
+  .dynsym       0 : { *(.dynsym) }
+  .dynstr       0 : { *(.dynstr) }
+  .gnu.version  0 : { *(.gnu.version) }
+  .gnu.version_d 0: { *(.gnu.version_d) }
+  .gnu.version_r 0: { *(.gnu.version_r) }
+  .rela.init    0 : { *(.rela.init) }
+  .rela.text    0 : { *(.rela.text) }
+  .rela.fini    0 : { *(.rela.fini) }
+  .rela.rodata  0 : { *(.rela.rodata) }
+  .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) }
+  .rela.data    0 : { *(.rela.data) }
+  .rela.tdata	0 : { *(.rela.tdata) }
+  .rela.tbss	0 : { *(.rela.tbss) }
+  .rela.ctors   0 : { *(.rela.ctors) }
+  .rela.dtors   0 : { *(.rela.dtors) }
+  .rela.got     0 : { *(.rela.got) }
+  .rela.bss     0 : { *(.rela.bss) }
+  .rela.ifunc   0 : { *(.rela.ifunc) }
+  .rela.plt     0 :
+    {
+      *(.rela.plt)
+    }
+  .init         0 :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt          0 : { *(.plt) }
+  .text         0 :
+  {
+    *(.text .stub)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini         0 :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  .rodata       0 : { *(.rodata) }
+  .rodata1      0 : { *(.rodata1) }
+  .eh_frame_hdr 0 : { *(.eh_frame_hdr) }
+  .eh_frame     0 : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+  .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) }
+  .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) }
+  /* Exception handling  */
+  .eh_frame     0 : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+  .gnu_extab    0 : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) }
+  .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) }
+  /* Thread Local Storage sections  */
+  .tdata	0 :
+   {
+     *(.tdata)
+   }
+  .tbss		0 : { *(.tbss) }
+  .jcr          0 : { KEEP (*(.jcr)) }
+  .dynamic      0 : { *(.dynamic) }
+  .got          0 : { *(.got) }
+  .got.plt      0 : { *(.got.plt) }
+  .data         0 :
+  {
+    *(.data)
+    SORT(CONSTRUCTORS)
+  }
+  .data1        0 : { *(.data1) }
+  .bss          0 :
+  {
+   *(.bss)
+  }
+  .stack        0 :
+  {
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xw b/aarch64-elf/lib/ldscripts/aarch64elf32.xw
new file mode 100644
index 0000000..1774be6
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xw
@@ -0,0 +1,221 @@
+/* Script for -z combreloc -z now -z relro: combine and sort reloc sections */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32.xwe b/aarch64-elf/lib/ldscripts/aarch64elf32.xwe
new file mode 100644
index 0000000..00a8b17
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32.xwe
@@ -0,0 +1,225 @@
+/* Script for -z combreloc -z now -z relro -z separate-code: combine and sort reloc sections with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littleaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.x b/aarch64-elf/lib/ldscripts/aarch64elf32b.x
new file mode 100644
index 0000000..7aedbc2
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.x
@@ -0,0 +1,220 @@
+/* Default linker script, for normal executables */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xbn b/aarch64-elf/lib/ldscripts/aarch64elf32b.xbn
new file mode 100644
index 0000000..d86662a
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xbn
@@ -0,0 +1,220 @@
+/* Script for -N: mix text and data on same page; don't align data */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = .;
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xc b/aarch64-elf/lib/ldscripts/aarch64elf32b.xc
new file mode 100644
index 0000000..2f992e8
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xc
@@ -0,0 +1,222 @@
+/* Script for -z combreloc: combine and sort reloc sections */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xce b/aarch64-elf/lib/ldscripts/aarch64elf32b.xce
new file mode 100644
index 0000000..87d31ca
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xce
@@ -0,0 +1,226 @@
+/* Script for -z combreloc -z separate-code: combine and sort reloc sections with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xd b/aarch64-elf/lib/ldscripts/aarch64elf32b.xd
new file mode 100644
index 0000000..4b60db7
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xd
@@ -0,0 +1,220 @@
+/* Script for ld -pie: link position independent executable */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xdc b/aarch64-elf/lib/ldscripts/aarch64elf32b.xdc
new file mode 100644
index 0000000..3b7c21e
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xdc
@@ -0,0 +1,222 @@
+/* Script for -pie -z combreloc: position independent executable, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xdce b/aarch64-elf/lib/ldscripts/aarch64elf32b.xdce
new file mode 100644
index 0000000..9cdee2f
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xdce
@@ -0,0 +1,226 @@
+/* Script for -pie -z combreloc -z separate-code: position independent executable, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xde b/aarch64-elf/lib/ldscripts/aarch64elf32b.xde
new file mode 100644
index 0000000..3f054d7
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xde
@@ -0,0 +1,224 @@
+/* Script for ld -pie -z separate-code: link position independent executable with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xdw b/aarch64-elf/lib/ldscripts/aarch64elf32b.xdw
new file mode 100644
index 0000000..099e616
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xdw
@@ -0,0 +1,221 @@
+/* Script for -pie -z combreloc -z now -z relro: position independent executable, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xdwe b/aarch64-elf/lib/ldscripts/aarch64elf32b.xdwe
new file mode 100644
index 0000000..2ce3b77
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xdwe
@@ -0,0 +1,225 @@
+/* Script for -pie -z combreloc -z now -z relro -z separate-code: position independent executable, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xe b/aarch64-elf/lib/ldscripts/aarch64elf32b.xe
new file mode 100644
index 0000000..4f0fabd
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xe
@@ -0,0 +1,224 @@
+/* Script for -z separate-code: generate normal executables with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xn b/aarch64-elf/lib/ldscripts/aarch64elf32b.xn
new file mode 100644
index 0000000..3357f97
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xn
@@ -0,0 +1,220 @@
+/* Script for -n: mix text and data on same page */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xr b/aarch64-elf/lib/ldscripts/aarch64elf32b.xr
new file mode 100644
index 0000000..e866472
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xr
@@ -0,0 +1,134 @@
+/* Script for ld -r: link without relocation */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ /* For some reason, the Solaris linker makes bad executables
+  if gld -r is used and the intermediate file has sections starting
+  at non-zero addresses.  Could be a Solaris ld bug, could be a GNU ld
+  bug.  But for now assigning the zero vmas works.  */
+SECTIONS
+{
+  .interp       0 : { *(.interp) }
+  .note.gnu.build-id 0: { *(.note.gnu.build-id) }
+  .hash         0 : { *(.hash) }
+  .gnu.hash     0 : { *(.gnu.hash) }
+  .dynsym       0 : { *(.dynsym) }
+  .dynstr       0 : { *(.dynstr) }
+  .gnu.version  0 : { *(.gnu.version) }
+  .gnu.version_d 0: { *(.gnu.version_d) }
+  .gnu.version_r 0: { *(.gnu.version_r) }
+  .rela.init    0 : { *(.rela.init) }
+  .rela.text    0 : { *(.rela.text) }
+  .rela.fini    0 : { *(.rela.fini) }
+  .rela.rodata  0 : { *(.rela.rodata) }
+  .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) }
+  .rela.data    0 : { *(.rela.data) }
+  .rela.tdata	0 : { *(.rela.tdata) }
+  .rela.tbss	0 : { *(.rela.tbss) }
+  .rela.ctors   0 : { *(.rela.ctors) }
+  .rela.dtors   0 : { *(.rela.dtors) }
+  .rela.got     0 : { *(.rela.got) }
+  .rela.bss     0 : { *(.rela.bss) }
+  .rela.ifunc   0 : { *(.rela.ifunc) }
+  .rela.plt     0 :
+    {
+      *(.rela.plt)
+    }
+  .init         0 :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt          0 : { *(.plt) }
+  .text         0 :
+  {
+    *(.text .stub)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini         0 :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  .rodata       0 : { *(.rodata) }
+  .rodata1      0 : { *(.rodata1) }
+  .eh_frame_hdr 0 : { *(.eh_frame_hdr) }
+  .eh_frame     0 : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+  .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) }
+  .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) }
+  /* Exception handling  */
+  .eh_frame     0 : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+  .gnu_extab    0 : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) }
+  .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) }
+  /* Thread Local Storage sections  */
+  .tdata	0 :
+   {
+     *(.tdata)
+   }
+  .tbss		0 : { *(.tbss) }
+  .jcr          0 : { KEEP (*(.jcr)) }
+  .dynamic      0 : { *(.dynamic) }
+  .got          0 : { *(.got) }
+  .got.plt      0 : { *(.got.plt) }
+  .data         0 :
+  {
+    *(.data)
+  }
+  .data1        0 : { *(.data1) }
+  .bss          0 :
+  {
+   *(.bss)
+  }
+  .stack        0 :
+  {
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xs b/aarch64-elf/lib/ldscripts/aarch64elf32b.xs
new file mode 100644
index 0000000..2492716
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xs
@@ -0,0 +1,210 @@
+/* Script for ld --shared: link shared library */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xsc b/aarch64-elf/lib/ldscripts/aarch64elf32b.xsc
new file mode 100644
index 0000000..88f90f5
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xsc
@@ -0,0 +1,212 @@
+/* Script for --shared -z combreloc: shared library, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xsce b/aarch64-elf/lib/ldscripts/aarch64elf32b.xsce
new file mode 100644
index 0000000..a0cf440
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xsce
@@ -0,0 +1,216 @@
+/* Script for --shared -z combreloc -z separate-code: shared library, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xse b/aarch64-elf/lib/ldscripts/aarch64elf32b.xse
new file mode 100644
index 0000000..73ff72f
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xse
@@ -0,0 +1,214 @@
+/* Script for ld --shared -z separate-code: link shared library with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xsw b/aarch64-elf/lib/ldscripts/aarch64elf32b.xsw
new file mode 100644
index 0000000..f20befe
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xsw
@@ -0,0 +1,211 @@
+/* Script for --shared -z combreloc -z now -z relro: shared library, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xswe b/aarch64-elf/lib/ldscripts/aarch64elf32b.xswe
new file mode 100644
index 0000000..3cddff8
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xswe
@@ -0,0 +1,215 @@
+/* Script for --shared -z combreloc -z now -z relro -z separate-code: shared library, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xu b/aarch64-elf/lib/ldscripts/aarch64elf32b.xu
new file mode 100644
index 0000000..9b2ce3a
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xu
@@ -0,0 +1,135 @@
+/* Script for ld -Ur: link w/out relocation, do create constructors */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ /* For some reason, the Solaris linker makes bad executables
+  if gld -r is used and the intermediate file has sections starting
+  at non-zero addresses.  Could be a Solaris ld bug, could be a GNU ld
+  bug.  But for now assigning the zero vmas works.  */
+SECTIONS
+{
+  .interp       0 : { *(.interp) }
+  .note.gnu.build-id 0: { *(.note.gnu.build-id) }
+  .hash         0 : { *(.hash) }
+  .gnu.hash     0 : { *(.gnu.hash) }
+  .dynsym       0 : { *(.dynsym) }
+  .dynstr       0 : { *(.dynstr) }
+  .gnu.version  0 : { *(.gnu.version) }
+  .gnu.version_d 0: { *(.gnu.version_d) }
+  .gnu.version_r 0: { *(.gnu.version_r) }
+  .rela.init    0 : { *(.rela.init) }
+  .rela.text    0 : { *(.rela.text) }
+  .rela.fini    0 : { *(.rela.fini) }
+  .rela.rodata  0 : { *(.rela.rodata) }
+  .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) }
+  .rela.data    0 : { *(.rela.data) }
+  .rela.tdata	0 : { *(.rela.tdata) }
+  .rela.tbss	0 : { *(.rela.tbss) }
+  .rela.ctors   0 : { *(.rela.ctors) }
+  .rela.dtors   0 : { *(.rela.dtors) }
+  .rela.got     0 : { *(.rela.got) }
+  .rela.bss     0 : { *(.rela.bss) }
+  .rela.ifunc   0 : { *(.rela.ifunc) }
+  .rela.plt     0 :
+    {
+      *(.rela.plt)
+    }
+  .init         0 :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt          0 : { *(.plt) }
+  .text         0 :
+  {
+    *(.text .stub)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini         0 :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  .rodata       0 : { *(.rodata) }
+  .rodata1      0 : { *(.rodata1) }
+  .eh_frame_hdr 0 : { *(.eh_frame_hdr) }
+  .eh_frame     0 : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+  .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) }
+  .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) }
+  /* Exception handling  */
+  .eh_frame     0 : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+  .gnu_extab    0 : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) }
+  .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) }
+  /* Thread Local Storage sections  */
+  .tdata	0 :
+   {
+     *(.tdata)
+   }
+  .tbss		0 : { *(.tbss) }
+  .jcr          0 : { KEEP (*(.jcr)) }
+  .dynamic      0 : { *(.dynamic) }
+  .got          0 : { *(.got) }
+  .got.plt      0 : { *(.got.plt) }
+  .data         0 :
+  {
+    *(.data)
+    SORT(CONSTRUCTORS)
+  }
+  .data1        0 : { *(.data1) }
+  .bss          0 :
+  {
+   *(.bss)
+  }
+  .stack        0 :
+  {
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xw b/aarch64-elf/lib/ldscripts/aarch64elf32b.xw
new file mode 100644
index 0000000..cfa892c
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xw
@@ -0,0 +1,221 @@
+/* Script for -z combreloc -z now -z relro: combine and sort reloc sections */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elf32b.xwe b/aarch64-elf/lib/ldscripts/aarch64elf32b.xwe
new file mode 100644
index 0000000..fcc4087
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elf32b.xwe
@@ -0,0 +1,225 @@
+/* Script for -z combreloc -z now -z relro -z separate-code: combine and sort reloc sections with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigaarch64", "elf32-bigaarch64",
+	      "elf32-littleaarch64")
+OUTPUT_ARCH(aarch64:ilp32)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.x b/aarch64-elf/lib/ldscripts/aarch64elfb.x
new file mode 100644
index 0000000..311408b
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.x
@@ -0,0 +1,220 @@
+/* Default linker script, for normal executables */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xbn b/aarch64-elf/lib/ldscripts/aarch64elfb.xbn
new file mode 100644
index 0000000..4c31f68
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xbn
@@ -0,0 +1,220 @@
+/* Script for -N: mix text and data on same page; don't align data */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = .;
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xc b/aarch64-elf/lib/ldscripts/aarch64elfb.xc
new file mode 100644
index 0000000..b9ad826
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xc
@@ -0,0 +1,222 @@
+/* Script for -z combreloc: combine and sort reloc sections */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xce b/aarch64-elf/lib/ldscripts/aarch64elfb.xce
new file mode 100644
index 0000000..1e6bc5e
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xce
@@ -0,0 +1,226 @@
+/* Script for -z combreloc -z separate-code: combine and sort reloc sections with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xd b/aarch64-elf/lib/ldscripts/aarch64elfb.xd
new file mode 100644
index 0000000..ab0b3be
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xd
@@ -0,0 +1,220 @@
+/* Script for ld -pie: link position independent executable */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xdc b/aarch64-elf/lib/ldscripts/aarch64elfb.xdc
new file mode 100644
index 0000000..b3debcd
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xdc
@@ -0,0 +1,222 @@
+/* Script for -pie -z combreloc: position independent executable, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xdce b/aarch64-elf/lib/ldscripts/aarch64elfb.xdce
new file mode 100644
index 0000000..828de73
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xdce
@@ -0,0 +1,226 @@
+/* Script for -pie -z combreloc -z separate-code: position independent executable, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xde b/aarch64-elf/lib/ldscripts/aarch64elfb.xde
new file mode 100644
index 0000000..001d2ae
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xde
@@ -0,0 +1,224 @@
+/* Script for ld -pie -z separate-code: link position independent executable with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xdw b/aarch64-elf/lib/ldscripts/aarch64elfb.xdw
new file mode 100644
index 0000000..0675d63
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xdw
@@ -0,0 +1,221 @@
+/* Script for -pie -z combreloc -z now -z relro: position independent executable, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xdwe b/aarch64-elf/lib/ldscripts/aarch64elfb.xdwe
new file mode 100644
index 0000000..d00b859
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xdwe
@@ -0,0 +1,225 @@
+/* Script for -pie -z combreloc -z now -z relro -z separate-code: position independent executable, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xe b/aarch64-elf/lib/ldscripts/aarch64elfb.xe
new file mode 100644
index 0000000..b7a01e4
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xe
@@ -0,0 +1,224 @@
+/* Script for -z separate-code: generate normal executables with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xn b/aarch64-elf/lib/ldscripts/aarch64elfb.xn
new file mode 100644
index 0000000..c622584
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xn
@@ -0,0 +1,220 @@
+/* Script for -n: mix text and data on same page */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xr b/aarch64-elf/lib/ldscripts/aarch64elfb.xr
new file mode 100644
index 0000000..275fc2e
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xr
@@ -0,0 +1,134 @@
+/* Script for ld -r: link without relocation */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ /* For some reason, the Solaris linker makes bad executables
+  if gld -r is used and the intermediate file has sections starting
+  at non-zero addresses.  Could be a Solaris ld bug, could be a GNU ld
+  bug.  But for now assigning the zero vmas works.  */
+SECTIONS
+{
+  .interp       0 : { *(.interp) }
+  .note.gnu.build-id 0: { *(.note.gnu.build-id) }
+  .hash         0 : { *(.hash) }
+  .gnu.hash     0 : { *(.gnu.hash) }
+  .dynsym       0 : { *(.dynsym) }
+  .dynstr       0 : { *(.dynstr) }
+  .gnu.version  0 : { *(.gnu.version) }
+  .gnu.version_d 0: { *(.gnu.version_d) }
+  .gnu.version_r 0: { *(.gnu.version_r) }
+  .rela.init    0 : { *(.rela.init) }
+  .rela.text    0 : { *(.rela.text) }
+  .rela.fini    0 : { *(.rela.fini) }
+  .rela.rodata  0 : { *(.rela.rodata) }
+  .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) }
+  .rela.data    0 : { *(.rela.data) }
+  .rela.tdata	0 : { *(.rela.tdata) }
+  .rela.tbss	0 : { *(.rela.tbss) }
+  .rela.ctors   0 : { *(.rela.ctors) }
+  .rela.dtors   0 : { *(.rela.dtors) }
+  .rela.got     0 : { *(.rela.got) }
+  .rela.bss     0 : { *(.rela.bss) }
+  .rela.ifunc   0 : { *(.rela.ifunc) }
+  .rela.plt     0 :
+    {
+      *(.rela.plt)
+    }
+  .init         0 :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt          0 : { *(.plt) }
+  .text         0 :
+  {
+    *(.text .stub)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini         0 :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  .rodata       0 : { *(.rodata) }
+  .rodata1      0 : { *(.rodata1) }
+  .eh_frame_hdr 0 : { *(.eh_frame_hdr) }
+  .eh_frame     0 : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+  .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) }
+  .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) }
+  /* Exception handling  */
+  .eh_frame     0 : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+  .gnu_extab    0 : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) }
+  .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) }
+  /* Thread Local Storage sections  */
+  .tdata	0 :
+   {
+     *(.tdata)
+   }
+  .tbss		0 : { *(.tbss) }
+  .jcr          0 : { KEEP (*(.jcr)) }
+  .dynamic      0 : { *(.dynamic) }
+  .got          0 : { *(.got) }
+  .got.plt      0 : { *(.got.plt) }
+  .data         0 :
+  {
+    *(.data)
+  }
+  .data1        0 : { *(.data1) }
+  .bss          0 :
+  {
+   *(.bss)
+  }
+  .stack        0 :
+  {
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xs b/aarch64-elf/lib/ldscripts/aarch64elfb.xs
new file mode 100644
index 0000000..3eb1196
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xs
@@ -0,0 +1,210 @@
+/* Script for ld --shared: link shared library */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xsc b/aarch64-elf/lib/ldscripts/aarch64elfb.xsc
new file mode 100644
index 0000000..7c9b2a3
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xsc
@@ -0,0 +1,212 @@
+/* Script for --shared -z combreloc: shared library, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xsce b/aarch64-elf/lib/ldscripts/aarch64elfb.xsce
new file mode 100644
index 0000000..4dbba21
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xsce
@@ -0,0 +1,216 @@
+/* Script for --shared -z combreloc -z separate-code: shared library, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xse b/aarch64-elf/lib/ldscripts/aarch64elfb.xse
new file mode 100644
index 0000000..169d27c
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xse
@@ -0,0 +1,214 @@
+/* Script for ld --shared -z separate-code: link shared library with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.init      : { *(.rela.init) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rela.fini      : { *(.rela.fini) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rela.got       : { *(.rela.got) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rela.ifunc     : { *(.rela.ifunc) }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got) *(.igot) }
+  .got.plt        : { *(.got.plt) *(.igot.plt) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xsw b/aarch64-elf/lib/ldscripts/aarch64elfb.xsw
new file mode 100644
index 0000000..3ab61f3
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xsw
@@ -0,0 +1,211 @@
+/* Script for --shared -z combreloc -z now -z relro: shared library, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xswe b/aarch64-elf/lib/ldscripts/aarch64elfb.xswe
new file mode 100644
index 0000000..0d924b6
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xswe
@@ -0,0 +1,215 @@
+/* Script for --shared -z combreloc -z now -z relro -z separate-code: shared library, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      *(.rela.iplt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xu b/aarch64-elf/lib/ldscripts/aarch64elfb.xu
new file mode 100644
index 0000000..2fcbc8f
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xu
@@ -0,0 +1,135 @@
+/* Script for ld -Ur: link w/out relocation, do create constructors */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ /* For some reason, the Solaris linker makes bad executables
+  if gld -r is used and the intermediate file has sections starting
+  at non-zero addresses.  Could be a Solaris ld bug, could be a GNU ld
+  bug.  But for now assigning the zero vmas works.  */
+SECTIONS
+{
+  .interp       0 : { *(.interp) }
+  .note.gnu.build-id 0: { *(.note.gnu.build-id) }
+  .hash         0 : { *(.hash) }
+  .gnu.hash     0 : { *(.gnu.hash) }
+  .dynsym       0 : { *(.dynsym) }
+  .dynstr       0 : { *(.dynstr) }
+  .gnu.version  0 : { *(.gnu.version) }
+  .gnu.version_d 0: { *(.gnu.version_d) }
+  .gnu.version_r 0: { *(.gnu.version_r) }
+  .rela.init    0 : { *(.rela.init) }
+  .rela.text    0 : { *(.rela.text) }
+  .rela.fini    0 : { *(.rela.fini) }
+  .rela.rodata  0 : { *(.rela.rodata) }
+  .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) }
+  .rela.data    0 : { *(.rela.data) }
+  .rela.tdata	0 : { *(.rela.tdata) }
+  .rela.tbss	0 : { *(.rela.tbss) }
+  .rela.ctors   0 : { *(.rela.ctors) }
+  .rela.dtors   0 : { *(.rela.dtors) }
+  .rela.got     0 : { *(.rela.got) }
+  .rela.bss     0 : { *(.rela.bss) }
+  .rela.ifunc   0 : { *(.rela.ifunc) }
+  .rela.plt     0 :
+    {
+      *(.rela.plt)
+    }
+  .init         0 :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt          0 : { *(.plt) }
+  .text         0 :
+  {
+    *(.text .stub)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini         0 :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  .rodata       0 : { *(.rodata) }
+  .rodata1      0 : { *(.rodata1) }
+  .eh_frame_hdr 0 : { *(.eh_frame_hdr) }
+  .eh_frame     0 : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+  .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) }
+  .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) }
+  /* Exception handling  */
+  .eh_frame     0 : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+  .gnu_extab    0 : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) }
+  .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) }
+  /* Thread Local Storage sections  */
+  .tdata	0 :
+   {
+     *(.tdata)
+   }
+  .tbss		0 : { *(.tbss) }
+  .jcr          0 : { KEEP (*(.jcr)) }
+  .dynamic      0 : { *(.dynamic) }
+  .got          0 : { *(.got) }
+  .got.plt      0 : { *(.got.plt) }
+  .data         0 :
+  {
+    *(.data)
+    SORT(CONSTRUCTORS)
+  }
+  .data1        0 : { *(.data1) }
+  .bss          0 :
+  {
+   *(.bss)
+  }
+  .stack        0 :
+  {
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xw b/aarch64-elf/lib/ldscripts/aarch64elfb.xw
new file mode 100644
index 0000000..4411566
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xw
@@ -0,0 +1,221 @@
+/* Script for -z combreloc -z now -z relro: combine and sort reloc sections */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/aarch64elfb.xwe b/aarch64-elf/lib/ldscripts/aarch64elfb.xwe
new file mode 100644
index 0000000..f07c34f
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/aarch64elfb.xwe
@@ -0,0 +1,225 @@
+/* Script for -z combreloc -z now -z relro -z separate-code: combine and sort reloc sections with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf64-bigaarch64", "elf64-bigaarch64",
+	      "elf64-littleaarch64")
+OUTPUT_ARCH(aarch64)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00400000)); . = SEGMENT_START("text-segment", 0x00400000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.ifunc)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  } =0x1f2003d5
+  .plt            : { *(.plt) *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  } =0x1f2003d5
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  } =0x1f2003d5
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 64 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(64 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(64 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.x b/aarch64-elf/lib/ldscripts/armelf.x
new file mode 100644
index 0000000..20eea0b
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.x
@@ -0,0 +1,249 @@
+/* Default linker script, for normal executables */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rel.iplt       :
+    {
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.iplt      :
+    {
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xbn b/aarch64-elf/lib/ldscripts/armelf.xbn
new file mode 100644
index 0000000..cb61d8d
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xbn
@@ -0,0 +1,249 @@
+/* Script for -N: mix text and data on same page; don't align data */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rel.iplt       :
+    {
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.iplt      :
+    {
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = .;
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xc b/aarch64-elf/lib/ldscripts/armelf.xc
new file mode 100644
index 0000000..a25ac58
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xc
@@ -0,0 +1,248 @@
+/* Script for -z combreloc: combine and sort reloc sections */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xce b/aarch64-elf/lib/ldscripts/armelf.xce
new file mode 100644
index 0000000..b707496
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xce
@@ -0,0 +1,252 @@
+/* Script for -z combreloc -z separate-code: combine and sort reloc sections with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xd b/aarch64-elf/lib/ldscripts/armelf.xd
new file mode 100644
index 0000000..02e4968
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xd
@@ -0,0 +1,249 @@
+/* Script for ld -pie: link position independent executable */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rel.iplt       :
+    {
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.iplt      :
+    {
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xdc b/aarch64-elf/lib/ldscripts/armelf.xdc
new file mode 100644
index 0000000..4b49684
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xdc
@@ -0,0 +1,248 @@
+/* Script for -pie -z combreloc: position independent executable, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xdce b/aarch64-elf/lib/ldscripts/armelf.xdce
new file mode 100644
index 0000000..905fb68
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xdce
@@ -0,0 +1,252 @@
+/* Script for -pie -z combreloc -z separate-code: position independent executable, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xde b/aarch64-elf/lib/ldscripts/armelf.xde
new file mode 100644
index 0000000..ff05418
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xde
@@ -0,0 +1,253 @@
+/* Script for ld -pie -z separate-code: link position independent executable with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rel.iplt       :
+    {
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.iplt      :
+    {
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xdw b/aarch64-elf/lib/ldscripts/armelf.xdw
new file mode 100644
index 0000000..9f7ac39
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xdw
@@ -0,0 +1,248 @@
+/* Script for -pie -z combreloc -z now -z relro: position independent executable, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xdwe b/aarch64-elf/lib/ldscripts/armelf.xdwe
new file mode 100644
index 0000000..bbb442f
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xdwe
@@ -0,0 +1,252 @@
+/* Script for -pie -z combreloc -z now -z relro -z separate-code: position independent executable, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xe b/aarch64-elf/lib/ldscripts/armelf.xe
new file mode 100644
index 0000000..3c07b80
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xe
@@ -0,0 +1,253 @@
+/* Script for -z separate-code: generate normal executables with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rel.iplt       :
+    {
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.iplt      :
+    {
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xn b/aarch64-elf/lib/ldscripts/armelf.xn
new file mode 100644
index 0000000..73adc0d
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xn
@@ -0,0 +1,249 @@
+/* Script for -n: mix text and data on same page */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rel.iplt       :
+    {
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.iplt      :
+    {
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xr b/aarch64-elf/lib/ldscripts/armelf.xr
new file mode 100644
index 0000000..2d49f3b
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xr
@@ -0,0 +1,159 @@
+/* Script for ld -r: link without relocation */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ /* For some reason, the Solaris linker makes bad executables
+  if gld -r is used and the intermediate file has sections starting
+  at non-zero addresses.  Could be a Solaris ld bug, could be a GNU ld
+  bug.  But for now assigning the zero vmas works.  */
+SECTIONS
+{
+  .interp       0 : { *(.interp) }
+  .note.gnu.build-id 0: { *(.note.gnu.build-id) }
+  .hash         0 : { *(.hash) }
+  .gnu.hash     0 : { *(.gnu.hash) }
+  .dynsym       0 : { *(.dynsym) }
+  .dynstr       0 : { *(.dynstr) }
+  .gnu.version  0 : { *(.gnu.version) }
+  .gnu.version_d 0: { *(.gnu.version_d) }
+  .gnu.version_r 0: { *(.gnu.version_r) }
+  .rel.init     0 : { *(.rel.init) }
+  .rela.init    0 : { *(.rela.init) }
+  .rel.text     0 : { *(.rel.text) }
+  .rela.text    0 : { *(.rela.text) }
+  .rel.fini     0 : { *(.rel.fini) }
+  .rela.fini    0 : { *(.rela.fini) }
+  .rel.rodata   0 : { *(.rel.rodata) }
+  .rela.rodata  0 : { *(.rela.rodata) }
+  .rel.data.rel.ro 0 : { *(.rel.data.rel.ro) }
+  .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) }
+  .rel.data     0 : { *(.rel.data) }
+  .rela.data    0 : { *(.rela.data) }
+  .rel.tdata	0 : { *(.rel.tdata) }
+  .rela.tdata	0 : { *(.rela.tdata) }
+  .rel.tbss	0 : { *(.rel.tbss) }
+  .rela.tbss	0 : { *(.rela.tbss) }
+  .rel.ctors    0 : { *(.rel.ctors) }
+  .rela.ctors   0 : { *(.rela.ctors) }
+  .rel.dtors    0 : { *(.rel.dtors) }
+  .rela.dtors   0 : { *(.rela.dtors) }
+  .rel.got      0 : { *(.rel.got) }
+  .rela.got     0 : { *(.rela.got) }
+  .rel.bss      0 : { *(.rel.bss) }
+  .rela.bss     0 : { *(.rela.bss) }
+  .rel.iplt     0 :
+    {
+      *(.rel.iplt)
+    }
+  .rela.iplt    0 :
+    {
+      *(.rela.iplt)
+    }
+  .rel.plt      0 :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt     0 :
+    {
+      *(.rela.plt)
+    }
+  .init         0 :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt          0 : { *(.plt) }
+  .iplt         0 : { *(.iplt) }
+  .text         0 :
+  {
+    *(.text .stub)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  }
+  .fini         0 :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  .rodata       0 : { *(.rodata) }
+  .rodata1      0 : { *(.rodata1) }
+  .ARM.extab 0 : { *(.ARM.extab) }
+  .ARM.exidx 0 : { *(.ARM.exidx) }
+  .eh_frame_hdr 0 : { *(.eh_frame_hdr) }
+  .eh_frame     0 : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+  .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) }
+  .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) }
+  /* Exception handling  */
+  .eh_frame     0 : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+  .gnu_extab    0 : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) }
+  .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) }
+  /* Thread Local Storage sections  */
+  .tdata	0 :
+   {
+     *(.tdata)
+   }
+  .tbss		0 : { *(.tbss) }
+  .jcr          0 : { KEEP (*(.jcr)) }
+  .dynamic      0 : { *(.dynamic) }
+  .got          0 : { *(.got) }
+  .data         0 :
+  {
+    *(.data)
+  }
+  .data1        0 : { *(.data1) }
+  .bss          0 :
+  {
+   *(.bss)
+  }
+  .stack        0 :
+  {
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xs b/aarch64-elf/lib/ldscripts/armelf.xs
new file mode 100644
index 0000000..7ed22fe
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xs
@@ -0,0 +1,237 @@
+/* Script for ld --shared: link shared library */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rel.iplt       :
+    {
+      *(.rel.iplt)
+    }
+  .rela.iplt      :
+    {
+      *(.rela.iplt)
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xsc b/aarch64-elf/lib/ldscripts/armelf.xsc
new file mode 100644
index 0000000..01918ac
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xsc
@@ -0,0 +1,236 @@
+/* Script for --shared -z combreloc: shared library, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      *(.rel.iplt)
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.iplt)
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xsce b/aarch64-elf/lib/ldscripts/armelf.xsce
new file mode 100644
index 0000000..94c6ecc
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xsce
@@ -0,0 +1,240 @@
+/* Script for --shared -z combreloc -z separate-code: shared library, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      *(.rel.iplt)
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.iplt)
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xse b/aarch64-elf/lib/ldscripts/armelf.xse
new file mode 100644
index 0000000..32f0b76
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xse
@@ -0,0 +1,241 @@
+/* Script for ld --shared -z separate-code: link shared library with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rel.iplt       :
+    {
+      *(.rel.iplt)
+    }
+  .rela.iplt      :
+    {
+      *(.rela.iplt)
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xsw b/aarch64-elf/lib/ldscripts/armelf.xsw
new file mode 100644
index 0000000..d2a6f12
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xsw
@@ -0,0 +1,236 @@
+/* Script for --shared -z combreloc -z now -z relro: shared library, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      *(.rel.iplt)
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.iplt)
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xswe b/aarch64-elf/lib/ldscripts/armelf.xswe
new file mode 100644
index 0000000..1839636
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xswe
@@ -0,0 +1,240 @@
+/* Script for --shared -z combreloc -z now -z relro -z separate-code: shared library, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      *(.rel.iplt)
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.iplt)
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xu b/aarch64-elf/lib/ldscripts/armelf.xu
new file mode 100644
index 0000000..adbe09c
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xu
@@ -0,0 +1,160 @@
+/* Script for ld -Ur: link w/out relocation, do create constructors */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ /* For some reason, the Solaris linker makes bad executables
+  if gld -r is used and the intermediate file has sections starting
+  at non-zero addresses.  Could be a Solaris ld bug, could be a GNU ld
+  bug.  But for now assigning the zero vmas works.  */
+SECTIONS
+{
+  .interp       0 : { *(.interp) }
+  .note.gnu.build-id 0: { *(.note.gnu.build-id) }
+  .hash         0 : { *(.hash) }
+  .gnu.hash     0 : { *(.gnu.hash) }
+  .dynsym       0 : { *(.dynsym) }
+  .dynstr       0 : { *(.dynstr) }
+  .gnu.version  0 : { *(.gnu.version) }
+  .gnu.version_d 0: { *(.gnu.version_d) }
+  .gnu.version_r 0: { *(.gnu.version_r) }
+  .rel.init     0 : { *(.rel.init) }
+  .rela.init    0 : { *(.rela.init) }
+  .rel.text     0 : { *(.rel.text) }
+  .rela.text    0 : { *(.rela.text) }
+  .rel.fini     0 : { *(.rel.fini) }
+  .rela.fini    0 : { *(.rela.fini) }
+  .rel.rodata   0 : { *(.rel.rodata) }
+  .rela.rodata  0 : { *(.rela.rodata) }
+  .rel.data.rel.ro 0 : { *(.rel.data.rel.ro) }
+  .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) }
+  .rel.data     0 : { *(.rel.data) }
+  .rela.data    0 : { *(.rela.data) }
+  .rel.tdata	0 : { *(.rel.tdata) }
+  .rela.tdata	0 : { *(.rela.tdata) }
+  .rel.tbss	0 : { *(.rel.tbss) }
+  .rela.tbss	0 : { *(.rela.tbss) }
+  .rel.ctors    0 : { *(.rel.ctors) }
+  .rela.ctors   0 : { *(.rela.ctors) }
+  .rel.dtors    0 : { *(.rel.dtors) }
+  .rela.dtors   0 : { *(.rela.dtors) }
+  .rel.got      0 : { *(.rel.got) }
+  .rela.got     0 : { *(.rela.got) }
+  .rel.bss      0 : { *(.rel.bss) }
+  .rela.bss     0 : { *(.rela.bss) }
+  .rel.iplt     0 :
+    {
+      *(.rel.iplt)
+    }
+  .rela.iplt    0 :
+    {
+      *(.rela.iplt)
+    }
+  .rel.plt      0 :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt     0 :
+    {
+      *(.rela.plt)
+    }
+  .init         0 :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt          0 : { *(.plt) }
+  .iplt         0 : { *(.iplt) }
+  .text         0 :
+  {
+    *(.text .stub)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  }
+  .fini         0 :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  .rodata       0 : { *(.rodata) }
+  .rodata1      0 : { *(.rodata1) }
+  .ARM.extab 0 : { *(.ARM.extab) }
+  .ARM.exidx 0 : { *(.ARM.exidx) }
+  .eh_frame_hdr 0 : { *(.eh_frame_hdr) }
+  .eh_frame     0 : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+  .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) }
+  .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) }
+  /* Exception handling  */
+  .eh_frame     0 : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+  .gnu_extab    0 : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) }
+  .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) }
+  /* Thread Local Storage sections  */
+  .tdata	0 :
+   {
+     *(.tdata)
+   }
+  .tbss		0 : { *(.tbss) }
+  .jcr          0 : { KEEP (*(.jcr)) }
+  .dynamic      0 : { *(.dynamic) }
+  .got          0 : { *(.got) }
+  .data         0 :
+  {
+    *(.data)
+    SORT(CONSTRUCTORS)
+  }
+  .data1        0 : { *(.data1) }
+  .bss          0 :
+  {
+   *(.bss)
+  }
+  .stack        0 :
+  {
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xw b/aarch64-elf/lib/ldscripts/armelf.xw
new file mode 100644
index 0000000..8ff3c9c
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xw
@@ -0,0 +1,248 @@
+/* Script for -z combreloc -z now -z relro: combine and sort reloc sections */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelf.xwe b/aarch64-elf/lib/ldscripts/armelf.xwe
new file mode 100644
index 0000000..5130e37
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelf.xwe
@@ -0,0 +1,252 @@
+/* Script for -z combreloc -z now -z relro -z separate-code: combine and sort reloc sections with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.x b/aarch64-elf/lib/ldscripts/armelfb.x
new file mode 100644
index 0000000..9a65ddf
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.x
@@ -0,0 +1,249 @@
+/* Default linker script, for normal executables */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rel.iplt       :
+    {
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.iplt      :
+    {
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xbn b/aarch64-elf/lib/ldscripts/armelfb.xbn
new file mode 100644
index 0000000..e8c81b5
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xbn
@@ -0,0 +1,249 @@
+/* Script for -N: mix text and data on same page; don't align data */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rel.iplt       :
+    {
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.iplt      :
+    {
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = .;
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xc b/aarch64-elf/lib/ldscripts/armelfb.xc
new file mode 100644
index 0000000..ab21798
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xc
@@ -0,0 +1,248 @@
+/* Script for -z combreloc: combine and sort reloc sections */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xce b/aarch64-elf/lib/ldscripts/armelfb.xce
new file mode 100644
index 0000000..c6022d9
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xce
@@ -0,0 +1,252 @@
+/* Script for -z combreloc -z separate-code: combine and sort reloc sections with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xd b/aarch64-elf/lib/ldscripts/armelfb.xd
new file mode 100644
index 0000000..bbf24dc
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xd
@@ -0,0 +1,249 @@
+/* Script for ld -pie: link position independent executable */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rel.iplt       :
+    {
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.iplt      :
+    {
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xdc b/aarch64-elf/lib/ldscripts/armelfb.xdc
new file mode 100644
index 0000000..f3a89b2
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xdc
@@ -0,0 +1,248 @@
+/* Script for -pie -z combreloc: position independent executable, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xdce b/aarch64-elf/lib/ldscripts/armelfb.xdce
new file mode 100644
index 0000000..67a72ba
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xdce
@@ -0,0 +1,252 @@
+/* Script for -pie -z combreloc -z separate-code: position independent executable, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xde b/aarch64-elf/lib/ldscripts/armelfb.xde
new file mode 100644
index 0000000..28fd044
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xde
@@ -0,0 +1,253 @@
+/* Script for ld -pie -z separate-code: link position independent executable with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rel.iplt       :
+    {
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.iplt      :
+    {
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xdw b/aarch64-elf/lib/ldscripts/armelfb.xdw
new file mode 100644
index 0000000..d23a06e
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xdw
@@ -0,0 +1,248 @@
+/* Script for -pie -z combreloc -z now -z relro: position independent executable, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xdwe b/aarch64-elf/lib/ldscripts/armelfb.xdwe
new file mode 100644
index 0000000..2412098
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xdwe
@@ -0,0 +1,252 @@
+/* Script for -pie -z combreloc -z now -z relro -z separate-code: position independent executable, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0)); . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xe b/aarch64-elf/lib/ldscripts/armelfb.xe
new file mode 100644
index 0000000..d56e6a8
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xe
@@ -0,0 +1,253 @@
+/* Script for -z separate-code: generate normal executables with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rel.iplt       :
+    {
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.iplt      :
+    {
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xn b/aarch64-elf/lib/ldscripts/armelfb.xn
new file mode 100644
index 0000000..ac58ebd
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xn
@@ -0,0 +1,249 @@
+/* Script for -n: mix text and data on same page */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rel.iplt       :
+    {
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.iplt      :
+    {
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xr b/aarch64-elf/lib/ldscripts/armelfb.xr
new file mode 100644
index 0000000..e612790
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xr
@@ -0,0 +1,159 @@
+/* Script for ld -r: link without relocation */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ /* For some reason, the Solaris linker makes bad executables
+  if gld -r is used and the intermediate file has sections starting
+  at non-zero addresses.  Could be a Solaris ld bug, could be a GNU ld
+  bug.  But for now assigning the zero vmas works.  */
+SECTIONS
+{
+  .interp       0 : { *(.interp) }
+  .note.gnu.build-id 0: { *(.note.gnu.build-id) }
+  .hash         0 : { *(.hash) }
+  .gnu.hash     0 : { *(.gnu.hash) }
+  .dynsym       0 : { *(.dynsym) }
+  .dynstr       0 : { *(.dynstr) }
+  .gnu.version  0 : { *(.gnu.version) }
+  .gnu.version_d 0: { *(.gnu.version_d) }
+  .gnu.version_r 0: { *(.gnu.version_r) }
+  .rel.init     0 : { *(.rel.init) }
+  .rela.init    0 : { *(.rela.init) }
+  .rel.text     0 : { *(.rel.text) }
+  .rela.text    0 : { *(.rela.text) }
+  .rel.fini     0 : { *(.rel.fini) }
+  .rela.fini    0 : { *(.rela.fini) }
+  .rel.rodata   0 : { *(.rel.rodata) }
+  .rela.rodata  0 : { *(.rela.rodata) }
+  .rel.data.rel.ro 0 : { *(.rel.data.rel.ro) }
+  .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) }
+  .rel.data     0 : { *(.rel.data) }
+  .rela.data    0 : { *(.rela.data) }
+  .rel.tdata	0 : { *(.rel.tdata) }
+  .rela.tdata	0 : { *(.rela.tdata) }
+  .rel.tbss	0 : { *(.rel.tbss) }
+  .rela.tbss	0 : { *(.rela.tbss) }
+  .rel.ctors    0 : { *(.rel.ctors) }
+  .rela.ctors   0 : { *(.rela.ctors) }
+  .rel.dtors    0 : { *(.rel.dtors) }
+  .rela.dtors   0 : { *(.rela.dtors) }
+  .rel.got      0 : { *(.rel.got) }
+  .rela.got     0 : { *(.rela.got) }
+  .rel.bss      0 : { *(.rel.bss) }
+  .rela.bss     0 : { *(.rela.bss) }
+  .rel.iplt     0 :
+    {
+      *(.rel.iplt)
+    }
+  .rela.iplt    0 :
+    {
+      *(.rela.iplt)
+    }
+  .rel.plt      0 :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt     0 :
+    {
+      *(.rela.plt)
+    }
+  .init         0 :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt          0 : { *(.plt) }
+  .iplt         0 : { *(.iplt) }
+  .text         0 :
+  {
+    *(.text .stub)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  }
+  .fini         0 :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  .rodata       0 : { *(.rodata) }
+  .rodata1      0 : { *(.rodata1) }
+  .ARM.extab 0 : { *(.ARM.extab) }
+  .ARM.exidx 0 : { *(.ARM.exidx) }
+  .eh_frame_hdr 0 : { *(.eh_frame_hdr) }
+  .eh_frame     0 : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+  .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) }
+  .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) }
+  /* Exception handling  */
+  .eh_frame     0 : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+  .gnu_extab    0 : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) }
+  .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) }
+  /* Thread Local Storage sections  */
+  .tdata	0 :
+   {
+     *(.tdata)
+   }
+  .tbss		0 : { *(.tbss) }
+  .jcr          0 : { KEEP (*(.jcr)) }
+  .dynamic      0 : { *(.dynamic) }
+  .got          0 : { *(.got) }
+  .data         0 :
+  {
+    *(.data)
+  }
+  .data1        0 : { *(.data1) }
+  .bss          0 :
+  {
+   *(.bss)
+  }
+  .stack        0 :
+  {
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xs b/aarch64-elf/lib/ldscripts/armelfb.xs
new file mode 100644
index 0000000..c776603
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xs
@@ -0,0 +1,237 @@
+/* Script for ld --shared: link shared library */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rel.iplt       :
+    {
+      *(.rel.iplt)
+    }
+  .rela.iplt      :
+    {
+      *(.rela.iplt)
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xsc b/aarch64-elf/lib/ldscripts/armelfb.xsc
new file mode 100644
index 0000000..30e73dd
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xsc
@@ -0,0 +1,236 @@
+/* Script for --shared -z combreloc: shared library, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      *(.rel.iplt)
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.iplt)
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xsce b/aarch64-elf/lib/ldscripts/armelfb.xsce
new file mode 100644
index 0000000..9e31adc
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xsce
@@ -0,0 +1,240 @@
+/* Script for --shared -z combreloc -z separate-code: shared library, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      *(.rel.iplt)
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.iplt)
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xse b/aarch64-elf/lib/ldscripts/armelfb.xse
new file mode 100644
index 0000000..20d8d24
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xse
@@ -0,0 +1,241 @@
+/* Script for ld --shared -z separate-code: link shared library with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.init       : { *(.rel.init) }
+  .rela.init      : { *(.rela.init) }
+  .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
+  .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
+  .rel.fini       : { *(.rel.fini) }
+  .rela.fini      : { *(.rela.fini) }
+  .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
+  .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
+  .rel.data.rel.ro   : { *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) }
+  .rela.data.rel.ro   : { *(.rela.data.rel.ro .rela.data.rel.ro.* .rela.gnu.linkonce.d.rel.ro.*) }
+  .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
+  .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
+  .rel.tdata	  : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
+  .rela.tdata	  : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
+  .rel.tbss	  : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
+  .rela.tbss	  : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+  .rel.ctors      : { *(.rel.ctors) }
+  .rela.ctors     : { *(.rela.ctors) }
+  .rel.dtors      : { *(.rel.dtors) }
+  .rela.dtors     : { *(.rela.dtors) }
+  .rel.got        : { *(.rel.got) }
+  .rela.got       : { *(.rela.got) }
+  .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
+  .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
+  .rel.iplt       :
+    {
+      *(.rel.iplt)
+    }
+  .rela.iplt      :
+    {
+      *(.rela.iplt)
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xsw b/aarch64-elf/lib/ldscripts/armelfb.xsw
new file mode 100644
index 0000000..c79eab3
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xsw
@@ -0,0 +1,236 @@
+/* Script for --shared -z combreloc -z now -z relro: shared library, combine & sort relocs */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      *(.rel.iplt)
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.iplt)
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xswe b/aarch64-elf/lib/ldscripts/armelfb.xswe
new file mode 100644
index 0000000..48f05da
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xswe
@@ -0,0 +1,240 @@
+/* Script for --shared -z combreloc -z now -z relro -z separate-code: shared library, combine & sort relocs with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  . = SEGMENT_START("text-segment", 0) + SIZEOF_HEADERS;
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      *(.rel.iplt)
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      *(.rela.iplt)
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    KEEP (*(.preinit_array))
+  }
+  .init_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+  }
+  .fini_array    :
+  {
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    PROVIDE (__data_start = .);
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  PROVIDE (_edata = .); PROVIDE (edata = .);
+  . = .;
+  PROVIDE (__bss_start = .);
+  PROVIDE (__bss_start__ = .);
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  PROVIDE (_bss_end__ = .); PROVIDE (__bss_end__ = .);
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  PROVIDE (__end__ = .);
+  PROVIDE (_end = .); PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xu b/aarch64-elf/lib/ldscripts/armelfb.xu
new file mode 100644
index 0000000..e0614e6
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xu
@@ -0,0 +1,160 @@
+/* Script for ld -Ur: link w/out relocation, do create constructors */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ /* For some reason, the Solaris linker makes bad executables
+  if gld -r is used and the intermediate file has sections starting
+  at non-zero addresses.  Could be a Solaris ld bug, could be a GNU ld
+  bug.  But for now assigning the zero vmas works.  */
+SECTIONS
+{
+  .interp       0 : { *(.interp) }
+  .note.gnu.build-id 0: { *(.note.gnu.build-id) }
+  .hash         0 : { *(.hash) }
+  .gnu.hash     0 : { *(.gnu.hash) }
+  .dynsym       0 : { *(.dynsym) }
+  .dynstr       0 : { *(.dynstr) }
+  .gnu.version  0 : { *(.gnu.version) }
+  .gnu.version_d 0: { *(.gnu.version_d) }
+  .gnu.version_r 0: { *(.gnu.version_r) }
+  .rel.init     0 : { *(.rel.init) }
+  .rela.init    0 : { *(.rela.init) }
+  .rel.text     0 : { *(.rel.text) }
+  .rela.text    0 : { *(.rela.text) }
+  .rel.fini     0 : { *(.rel.fini) }
+  .rela.fini    0 : { *(.rela.fini) }
+  .rel.rodata   0 : { *(.rel.rodata) }
+  .rela.rodata  0 : { *(.rela.rodata) }
+  .rel.data.rel.ro 0 : { *(.rel.data.rel.ro) }
+  .rela.data.rel.ro 0 : { *(.rela.data.rel.ro) }
+  .rel.data     0 : { *(.rel.data) }
+  .rela.data    0 : { *(.rela.data) }
+  .rel.tdata	0 : { *(.rel.tdata) }
+  .rela.tdata	0 : { *(.rela.tdata) }
+  .rel.tbss	0 : { *(.rel.tbss) }
+  .rela.tbss	0 : { *(.rela.tbss) }
+  .rel.ctors    0 : { *(.rel.ctors) }
+  .rela.ctors   0 : { *(.rela.ctors) }
+  .rel.dtors    0 : { *(.rel.dtors) }
+  .rela.dtors   0 : { *(.rela.dtors) }
+  .rel.got      0 : { *(.rel.got) }
+  .rela.got     0 : { *(.rela.got) }
+  .rel.bss      0 : { *(.rel.bss) }
+  .rela.bss     0 : { *(.rela.bss) }
+  .rel.iplt     0 :
+    {
+      *(.rel.iplt)
+    }
+  .rela.iplt    0 :
+    {
+      *(.rela.iplt)
+    }
+  .rel.plt      0 :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt     0 :
+    {
+      *(.rela.plt)
+    }
+  .init         0 :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt          0 : { *(.plt) }
+  .iplt         0 : { *(.iplt) }
+  .text         0 :
+  {
+    *(.text .stub)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+  }
+  .fini         0 :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  .rodata       0 : { *(.rodata) }
+  .rodata1      0 : { *(.rodata1) }
+  .ARM.extab 0 : { *(.ARM.extab) }
+  .ARM.exidx 0 : { *(.ARM.exidx) }
+  .eh_frame_hdr 0 : { *(.eh_frame_hdr) }
+  .eh_frame     0 : ONLY_IF_RO { KEEP (*(.eh_frame)) }
+  .gcc_except_table 0 : ONLY_IF_RO { *(.gcc_except_table) }
+  .gnu_extab 0 : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges 0 : ONLY_IF_RO { *(.exception_ranges) }
+  /* Exception handling  */
+  .eh_frame     0 : ONLY_IF_RW { KEEP (*(.eh_frame)) }
+  .gnu_extab    0 : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table 0 : ONLY_IF_RW { *(.gcc_except_table) }
+  .exception_ranges 0 : ONLY_IF_RW { *(.exception_ranges) }
+  /* Thread Local Storage sections  */
+  .tdata	0 :
+   {
+     *(.tdata)
+   }
+  .tbss		0 : { *(.tbss) }
+  .jcr          0 : { KEEP (*(.jcr)) }
+  .dynamic      0 : { *(.dynamic) }
+  .got          0 : { *(.got) }
+  .data         0 :
+  {
+    *(.data)
+    SORT(CONSTRUCTORS)
+  }
+  .data1        0 : { *(.data1) }
+  .bss          0 :
+  {
+   *(.bss)
+  }
+  .stack        0 :
+  {
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xw b/aarch64-elf/lib/ldscripts/armelfb.xw
new file mode 100644
index 0000000..8600701
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xw
@@ -0,0 +1,248 @@
+/* Script for -z combreloc -z now -z relro: combine and sort reloc sections */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/aarch64-elf/lib/ldscripts/armelfb.xwe b/aarch64-elf/lib/ldscripts/armelfb.xwe
new file mode 100644
index 0000000..0ea61a1
--- /dev/null
+++ b/aarch64-elf/lib/ldscripts/armelfb.xwe
@@ -0,0 +1,252 @@
+/* Script for -z combreloc -z now -z relro -z separate-code: combine and sort reloc sections with separate code segment */
+/* Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Copying and distribution of this script, with or without modification,
+   are permitted in any medium without royalty provided the copyright
+   notice and this notice are preserved.  */
+OUTPUT_FORMAT("elf32-bigarm", "elf32-bigarm",
+	      "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SEARCH_DIR("=/home/arter97/arm64-gcc/aarch64-elf/lib");
+SECTIONS
+{
+  PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
+  .interp         : { *(.interp) }
+  .note.gnu.build-id  : { *(.note.gnu.build-id) }
+  .hash           : { *(.hash) }
+  .gnu.hash       : { *(.gnu.hash) }
+  .dynsym         : { *(.dynsym) }
+  .dynstr         : { *(.dynstr) }
+  .gnu.version    : { *(.gnu.version) }
+  .gnu.version_d  : { *(.gnu.version_d) }
+  .gnu.version_r  : { *(.gnu.version_r) }
+  .rel.dyn        :
+    {
+      *(.rel.init)
+      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+      *(.rel.fini)
+      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+      *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
+      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+      *(.rel.ctors)
+      *(.rel.dtors)
+      *(.rel.got)
+      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rel_iplt_start = .);
+      *(.rel.iplt)
+      PROVIDE_HIDDEN (__rel_iplt_end = .);
+    }
+  .rela.dyn       :
+    {
+      *(.rela.init)
+      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+      *(.rela.fini)
+      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+      *(.rela.ctors)
+      *(.rela.dtors)
+      *(.rela.got)
+      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+      PROVIDE_HIDDEN (__rela_iplt_start = .);
+      *(.rela.iplt)
+      PROVIDE_HIDDEN (__rela_iplt_end = .);
+    }
+  .rel.plt        :
+    {
+      *(.rel.plt)
+    }
+  .rela.plt       :
+    {
+      *(.rela.plt)
+    }
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  .init           :
+  {
+    KEEP (*(SORT_NONE(.init)))
+  }
+  .plt            : { *(.plt) }
+  .iplt           : { *(.iplt) }
+  .text           :
+  {
+    *(.text.unlikely .text.*_unlikely .text.unlikely.*)
+    *(.text.exit .text.exit.*)
+    *(.text.startup .text.startup.*)
+    *(.text.hot .text.hot.*)
+    *(.text .stub .text.* .gnu.linkonce.t.*)
+    /* .gnu.warning sections are handled specially by elf32.em.  */
+    *(.gnu.warning)
+    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
+  }
+  .fini           :
+  {
+    KEEP (*(SORT_NONE(.fini)))
+  }
+  PROVIDE (__etext = .);
+  PROVIDE (_etext = .);
+  PROVIDE (etext = .);
+  . = ALIGN(CONSTANT (MAXPAGESIZE));
+  /* Adjust the address for the rodata segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = SEGMENT_START("rodata-segment", ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)));
+  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
+  .rodata1        : { *(.rodata1) }
+  .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
+   PROVIDE_HIDDEN (__exidx_start = .);
+  .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+   PROVIDE_HIDDEN (__exidx_end = .);
+  .eh_frame_hdr   : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) }
+  .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
+  .gnu_extab   : ONLY_IF_RO { *(.gnu_extab*) }
+  /* These sections are generated by the Sun/Oracle C++ compiler.  */
+  .exception_ranges   : ONLY_IF_RO { *(.exception_ranges*) }
+  /* Adjust the address for the data segment.  We want to adjust up to
+     the same address within the page on the next page up.  */
+  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));
+  /* Exception handling  */
+  .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) }
+  .gnu_extab      : ONLY_IF_RW { *(.gnu_extab) }
+  .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
+  .exception_ranges   : ONLY_IF_RW { *(.exception_ranges*) }
+  /* Thread Local Storage sections  */
+  .tdata	  :
+   {
+     PROVIDE_HIDDEN (__tdata_start = .);
+     *(.tdata .tdata.* .gnu.linkonce.td.*)
+   }
+  .tbss		  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+  .preinit_array    :
+  {
+    PROVIDE_HIDDEN (__preinit_array_start = .);
+    KEEP (*(.preinit_array))
+    PROVIDE_HIDDEN (__preinit_array_end = .);
+  }
+  .init_array    :
+  {
+    PROVIDE_HIDDEN (__init_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
+    KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors))
+    PROVIDE_HIDDEN (__init_array_end = .);
+  }
+  .fini_array    :
+  {
+    PROVIDE_HIDDEN (__fini_array_start = .);
+    KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
+    KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors))
+    PROVIDE_HIDDEN (__fini_array_end = .);
+  }
+  .ctors          :
+  {
+    /* gcc uses crtbegin.o to find the start of
+       the constructors, so we make sure it is
+       first.  Because this is a wildcard, it
+       doesn't matter if the user does not
+       actually link against crtbegin.o; the
+       linker won't look for a file to match a
+       wildcard.  The wildcard also means that it
+       doesn't matter which directory crtbegin.o
+       is in.  */
+    KEEP (*crtbegin.o(.ctors))
+    KEEP (*crtbegin?.o(.ctors))
+    /* We don't want to include the .ctor section from
+       the crtend.o file until after the sorted ctors.
+       The .ctor section from the crtend file contains the
+       end of ctors marker and it must be last */
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
+    KEEP (*(SORT(.ctors.*)))
+    KEEP (*(.ctors))
+  }
+  .dtors          :
+  {
+    KEEP (*crtbegin.o(.dtors))
+    KEEP (*crtbegin?.o(.dtors))
+    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
+    KEEP (*(SORT(.dtors.*)))
+    KEEP (*(.dtors))
+  }
+  .jcr            : { KEEP (*(.jcr)) }
+  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
+  .dynamic        : { *(.dynamic) }
+  .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
+  .data           :
+  {
+    __data_start = .;
+    *(.data .data.* .gnu.linkonce.d.*)
+    SORT(CONSTRUCTORS)
+  }
+  .data1          : { *(.data1) }
+  _edata = .; PROVIDE (edata = .);
+  . = .;
+  __bss_start = .;
+  __bss_start__ = .;
+  .bss            :
+  {
+   *(.dynbss)
+   *(.bss .bss.* .gnu.linkonce.b.*)
+   *(COMMON)
+   /* Align here to ensure that the .bss section occupies space up to
+      _end.  Align after .bss to ensure correct alignment even if the
+      .bss section disappears because there are no input sections.
+      FIXME: Why do we need it? When there is no .bss section, we do not
+      pad the .data section.  */
+   . = ALIGN(. != 0 ? 32 / 8 : 1);
+  }
+  _bss_end__ = .; __bss_end__ = .;
+  . = ALIGN(32 / 8);
+  . = SEGMENT_START("ldata-segment", .);
+  . = ALIGN(32 / 8);
+  __end__ = .;
+  _end = .; PROVIDE (end = .);
+  .stack         0x80000 :
+  {
+    _stack = .;
+    *(.stack)
+  }
+  /* Stabs debugging sections.  */
+  .stab          0 : { *(.stab) }
+  .stabstr       0 : { *(.stabstr) }
+  .stab.excl     0 : { *(.stab.excl) }
+  .stab.exclstr  0 : { *(.stab.exclstr) }
+  .stab.index    0 : { *(.stab.index) }
+  .stab.indexstr 0 : { *(.stab.indexstr) }
+  .comment       0 : { *(.comment) }
+  .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line .debug_line.* .debug_line_end) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
+  /* DWARF 3 */
+  .debug_pubtypes 0 : { *(.debug_pubtypes) }
+  .debug_ranges   0 : { *(.debug_ranges) }
+  /* DWARF Extension.  */
+  .debug_macro    0 : { *(.debug_macro) }
+  .debug_addr     0 : { *(.debug_addr) }
+  .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
+  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
+  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
+}
diff --git a/bin/aarch64-elf-addr2line b/bin/aarch64-elf-addr2line
new file mode 100755
index 0000000..f96d869
--- /dev/null
+++ b/bin/aarch64-elf-addr2line
Binary files differ
diff --git a/bin/aarch64-elf-ar b/bin/aarch64-elf-ar
new file mode 100755
index 0000000..56c476b
--- /dev/null
+++ b/bin/aarch64-elf-ar
Binary files differ
diff --git a/bin/aarch64-elf-as b/bin/aarch64-elf-as
new file mode 100755
index 0000000..28a707c
--- /dev/null
+++ b/bin/aarch64-elf-as
Binary files differ
diff --git a/bin/aarch64-elf-c++filt b/bin/aarch64-elf-c++filt
new file mode 100755
index 0000000..d639802
--- /dev/null
+++ b/bin/aarch64-elf-c++filt
Binary files differ
diff --git a/bin/aarch64-elf-cpp b/bin/aarch64-elf-cpp
new file mode 100755
index 0000000..cf08c6c
--- /dev/null
+++ b/bin/aarch64-elf-cpp
Binary files differ
diff --git a/bin/aarch64-elf-dwp b/bin/aarch64-elf-dwp
new file mode 100755
index 0000000..a873593
--- /dev/null
+++ b/bin/aarch64-elf-dwp
Binary files differ
diff --git a/bin/aarch64-elf-elfedit b/bin/aarch64-elf-elfedit
new file mode 100755
index 0000000..a440ffe
--- /dev/null
+++ b/bin/aarch64-elf-elfedit
Binary files differ
diff --git a/bin/aarch64-elf-gcc b/bin/aarch64-elf-gcc
new file mode 100755
index 0000000..968d9d1
--- /dev/null
+++ b/bin/aarch64-elf-gcc
Binary files differ
diff --git a/bin/aarch64-elf-gcc-9.1.1 b/bin/aarch64-elf-gcc-9.1.1
new file mode 100755
index 0000000..968d9d1
--- /dev/null
+++ b/bin/aarch64-elf-gcc-9.1.1
Binary files differ
diff --git a/bin/aarch64-elf-gcc-ar b/bin/aarch64-elf-gcc-ar
new file mode 100755
index 0000000..5d29dc4
--- /dev/null
+++ b/bin/aarch64-elf-gcc-ar
Binary files differ
diff --git a/bin/aarch64-elf-gcc-nm b/bin/aarch64-elf-gcc-nm
new file mode 100755
index 0000000..81e9ac2
--- /dev/null
+++ b/bin/aarch64-elf-gcc-nm
Binary files differ
diff --git a/bin/aarch64-elf-gcc-ranlib b/bin/aarch64-elf-gcc-ranlib
new file mode 100755
index 0000000..0a4a7b0
--- /dev/null
+++ b/bin/aarch64-elf-gcc-ranlib
Binary files differ
diff --git a/bin/aarch64-elf-gcov b/bin/aarch64-elf-gcov
new file mode 100755
index 0000000..d0ff9f8
--- /dev/null
+++ b/bin/aarch64-elf-gcov
Binary files differ
diff --git a/bin/aarch64-elf-gcov-dump b/bin/aarch64-elf-gcov-dump
new file mode 100755
index 0000000..045d65b
--- /dev/null
+++ b/bin/aarch64-elf-gcov-dump
Binary files differ
diff --git a/bin/aarch64-elf-gcov-tool b/bin/aarch64-elf-gcov-tool
new file mode 100755
index 0000000..0cf1dc1
--- /dev/null
+++ b/bin/aarch64-elf-gcov-tool
Binary files differ
diff --git a/bin/aarch64-elf-gdb b/bin/aarch64-elf-gdb
new file mode 100755
index 0000000..10de0b4
--- /dev/null
+++ b/bin/aarch64-elf-gdb
Binary files differ
diff --git a/bin/aarch64-elf-gdb-add-index b/bin/aarch64-elf-gdb-add-index
new file mode 100755
index 0000000..efaad1d
--- /dev/null
+++ b/bin/aarch64-elf-gdb-add-index
@@ -0,0 +1,116 @@
+#! /bin/sh
+
+# Add a .gdb_index section to a file.
+
+# Copyright (C) 2010-2019 Free Software Foundation, Inc.
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# This program assumes gdb and objcopy are in $PATH.
+# If not, or you want others, pass the following in the environment
+GDB=${GDB:=gdb}
+OBJCOPY=${OBJCOPY:=objcopy}
+
+myname="${0##*/}"
+
+dwarf5=""
+if [ "$1" = "-dwarf-5" ]; then
+    dwarf5="$1"
+    shift
+fi
+
+if test $# != 1; then
+    echo "usage: $myname [-dwarf-5] FILE" 1>&2
+    exit 1
+fi
+
+file="$1"
+
+if test ! -r "$file"; then
+    echo "$myname: unable to access: $file" 1>&2
+    exit 1
+fi
+
+dir="${file%/*}"
+test "$dir" = "$file" && dir="."
+index4="${file}.gdb-index"
+index5="${file}.debug_names"
+debugstr="${file}.debug_str"
+debugstrmerge="${file}.debug_str.merge"
+debugstrerr="${file}.debug_str.err"
+
+rm -f $index4 $index5 $debugstr $debugstrmerge $debugstrerr
+# Ensure intermediate index file is removed when we exit.
+trap "rm -f $index4 $index5 $debugstr $debugstrmerge $debugstrerr" 0
+
+$GDB --batch -nx -iex 'set auto-load no' \
+    -ex "file $file" -ex "save gdb-index $dwarf5 $dir" || {
+    # Just in case.
+    status=$?
+    echo "$myname: gdb error generating index for $file" 1>&2
+    exit $status
+}
+
+# In some situations gdb can exit without creating an index.  This is
+# not an error.
+# E.g., if $file is stripped.  This behaviour is akin to stripping an
+# already stripped binary, it's a no-op.
+status=0
+
+if test -f "$index4" -a -f "$index5"; then
+    echo "$myname: Both index types were created for $file" 1>&2
+    status=1
+elif test -f "$index4" -o -f "$index5"; then
+    if test -f "$index4"; then
+	index="$index4"
+	section=".gdb_index"
+    else
+	index="$index5"
+	section=".debug_names"
+    fi
+    debugstradd=false
+    debugstrupdate=false
+    if test -s "$debugstr"; then
+	if ! $OBJCOPY --dump-section .debug_str="$debugstrmerge" "$file" /dev/null \
+		 2>$debugstrerr; then
+	    cat >&2 $debugstrerr
+	    exit 1
+	fi
+	if grep -q "can't dump section '.debug_str' - it does not exist" \
+		  $debugstrerr; then
+	    debugstradd=true
+	else
+	    debugstrupdate=true
+	    cat >&2 $debugstrerr
+	fi
+	cat "$debugstr" >>"$debugstrmerge"
+    fi
+
+    $OBJCOPY --add-section $section="$index" \
+	--set-section-flags $section=readonly \
+	$(if $debugstradd; then \
+	      echo --add-section .debug_str="$debugstrmerge"; \
+	      echo --set-section-flags .debug_str=readonly; \
+	  fi; \
+	  if $debugstrupdate; then \
+	      echo --update-section .debug_str="$debugstrmerge"; \
+	  fi) \
+	"$file" "$file"
+
+    status=$?
+else
+    echo "$myname: No index was created for $file" 1>&2
+    echo "$myname: [Was there no debuginfo? Was there already an index?]" 1>&2
+fi
+
+exit $status
diff --git a/bin/aarch64-elf-gprof b/bin/aarch64-elf-gprof
new file mode 100755
index 0000000..f935e83
--- /dev/null
+++ b/bin/aarch64-elf-gprof
Binary files differ
diff --git a/bin/aarch64-elf-ld b/bin/aarch64-elf-ld
new file mode 100755
index 0000000..9d4f5d2
--- /dev/null
+++ b/bin/aarch64-elf-ld
Binary files differ
diff --git a/bin/aarch64-elf-ld.bfd b/bin/aarch64-elf-ld.bfd
new file mode 100755
index 0000000..9d4f5d2
--- /dev/null
+++ b/bin/aarch64-elf-ld.bfd
Binary files differ
diff --git a/bin/aarch64-elf-ld.gold b/bin/aarch64-elf-ld.gold
new file mode 100755
index 0000000..168afe9
--- /dev/null
+++ b/bin/aarch64-elf-ld.gold
Binary files differ
diff --git a/bin/aarch64-elf-nm b/bin/aarch64-elf-nm
new file mode 100755
index 0000000..ff351a7
--- /dev/null
+++ b/bin/aarch64-elf-nm
Binary files differ
diff --git a/bin/aarch64-elf-objcopy b/bin/aarch64-elf-objcopy
new file mode 100755
index 0000000..cb408e1
--- /dev/null
+++ b/bin/aarch64-elf-objcopy
Binary files differ
diff --git a/bin/aarch64-elf-objdump b/bin/aarch64-elf-objdump
new file mode 100755
index 0000000..f2f869f
--- /dev/null
+++ b/bin/aarch64-elf-objdump
Binary files differ
diff --git a/bin/aarch64-elf-ranlib b/bin/aarch64-elf-ranlib
new file mode 100755
index 0000000..31b05cb
--- /dev/null
+++ b/bin/aarch64-elf-ranlib
Binary files differ
diff --git a/bin/aarch64-elf-readelf b/bin/aarch64-elf-readelf
new file mode 100755
index 0000000..cc64e78
--- /dev/null
+++ b/bin/aarch64-elf-readelf
Binary files differ
diff --git a/bin/aarch64-elf-run b/bin/aarch64-elf-run
new file mode 100755
index 0000000..a5c5e69
--- /dev/null
+++ b/bin/aarch64-elf-run
Binary files differ
diff --git a/bin/aarch64-elf-size b/bin/aarch64-elf-size
new file mode 100755
index 0000000..be8727b
--- /dev/null
+++ b/bin/aarch64-elf-size
Binary files differ
diff --git a/bin/aarch64-elf-strings b/bin/aarch64-elf-strings
new file mode 100755
index 0000000..537798b
--- /dev/null
+++ b/bin/aarch64-elf-strings
Binary files differ
diff --git a/bin/aarch64-elf-strip b/bin/aarch64-elf-strip
new file mode 100755
index 0000000..53110c1
--- /dev/null
+++ b/bin/aarch64-elf-strip
Binary files differ
diff --git a/include/gdb/jit-reader.h b/include/gdb/jit-reader.h
new file mode 100644
index 0000000..426e7bd
--- /dev/null
+++ b/include/gdb/jit-reader.h
@@ -0,0 +1,346 @@
+/* JIT declarations for GDB, the GNU Debugger.
+
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef GDB_JIT_READER_H
+#define GDB_JIT_READER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Versioning information.  See gdb_reader_funcs.  */
+
+#define GDB_READER_INTERFACE_VERSION 1
+
+/* Readers must be released under a GPL compatible license.  To
+   declare that the reader is indeed released under a GPL compatible
+   license, invoke the macro GDB_DECLARE_GPL_COMPATIBLE in a source
+   file.  */
+
+#ifdef __cplusplus
+#define GDB_DECLARE_GPL_COMPATIBLE_READER       \
+  extern "C" {                                  \
+  extern int plugin_is_GPL_compatible (void);   \
+  extern int plugin_is_GPL_compatible (void)    \
+  {                                             \
+    return 0;                                   \
+  }                                             \
+  }
+
+#else
+
+#define GDB_DECLARE_GPL_COMPATIBLE_READER       \
+  extern int plugin_is_GPL_compatible (void);   \
+  extern int plugin_is_GPL_compatible (void)    \
+  {                                             \
+    return 0;                                   \
+  }
+
+#endif
+
+/* Represents an address on the target system.  */
+
+typedef unsigned long GDB_CORE_ADDR;
+
+/* Return status codes.  */
+
+enum gdb_status {
+  GDB_FAIL = 0,
+  GDB_SUCCESS = 1
+};
+
+struct gdb_object;
+struct gdb_symtab;
+struct gdb_block;
+struct gdb_symbol_callbacks;
+
+/* An array of these are used to represent a map from code addresses to line
+   numbers in the source file.  */
+
+struct gdb_line_mapping
+{
+  int line;
+  GDB_CORE_ADDR pc;
+};
+
+/* Create a new GDB code object.  Each code object can have one or
+   more symbol tables, each representing a compiled source file.  */
+
+typedef struct gdb_object *(gdb_object_open) (struct gdb_symbol_callbacks *cb);
+
+/* The callback used to create new symbol table.  CB is the
+   gdb_symbol_callbacks which the structure is part of.  FILE_NAME is
+   an (optionally NULL) file name to associate with this new symbol
+   table.
+
+   Returns a new instance to gdb_symtab that can later be passed to
+   gdb_block_new, gdb_symtab_add_line_mapping and gdb_symtab_close.  */
+
+typedef struct gdb_symtab *(gdb_symtab_open) (struct gdb_symbol_callbacks *cb,
+                                              struct gdb_object *obj,
+                                              const char *file_name);
+
+/* Creates a new block in a given symbol table.  A symbol table is a
+   forest of blocks, each block representing an code address range and
+   a corresponding (optionally NULL) NAME.  In case the block
+   corresponds to a function, the NAME passed should be the name of
+   the function.
+
+   If the new block to be created is a child of (i.e. is nested in)
+   another block, the parent block can be passed in PARENT.  SYMTAB is
+   the symbol table the new block is to belong in.  BEGIN, END is the
+   code address range the block corresponds to.
+
+   Returns a new instance of gdb_block, which, as of now, has no use.
+   Note that the gdb_block returned must not be freed by the
+   caller.  */
+
+typedef struct gdb_block *(gdb_block_open) (struct gdb_symbol_callbacks *cb,
+                                            struct gdb_symtab *symtab,
+                                            struct gdb_block *parent,
+                                            GDB_CORE_ADDR begin,
+                                            GDB_CORE_ADDR end,
+                                            const char *name);
+
+/* Adds a PC to line number mapping for the symbol table SYMTAB.
+   NLINES is the number of elements in LINES, each element
+   corresponding to one (PC, line) pair.  */
+
+typedef void (gdb_symtab_add_line_mapping) (struct gdb_symbol_callbacks *cb,
+                                            struct gdb_symtab *symtab,
+                                            int nlines,
+                                            struct gdb_line_mapping *lines);
+
+/* Close the symtab SYMTAB.  This signals to GDB that no more blocks
+   will be opened on this symtab.  */
+
+typedef void (gdb_symtab_close) (struct gdb_symbol_callbacks *cb,
+                                 struct gdb_symtab *symtab);
+
+
+/* Closes the gdb_object OBJ and adds the emitted information into
+   GDB's internal structures.  Once this is done, the debug
+   information will be picked up and used; this will usually be the
+   last operation in gdb_read_debug_info.  */
+
+typedef void (gdb_object_close) (struct gdb_symbol_callbacks *cb,
+                                 struct gdb_object *obj);
+
+/* Reads LEN bytes from TARGET_MEM in the target's virtual address
+   space into GDB_BUF.
+
+   Returns GDB_FAIL on failure, and GDB_SUCCESS on success.  */
+
+typedef enum gdb_status (gdb_target_read) (GDB_CORE_ADDR target_mem,
+                                           void *gdb_buf, int len);
+
+/* The list of callbacks that are passed to read.  These callbacks are
+   to be used to construct the symbol table.  The functions have been
+   described above.  */
+
+struct gdb_symbol_callbacks
+{
+  gdb_object_open *object_open;
+  gdb_symtab_open *symtab_open;
+  gdb_block_open *block_open;
+  gdb_symtab_close *symtab_close;
+  gdb_object_close *object_close;
+
+  gdb_symtab_add_line_mapping *line_mapping_add;
+  gdb_target_read *target_read;
+
+  /* For internal use by GDB.  */
+  void *priv_data;
+};
+
+/* Forward declaration.  */
+
+struct gdb_reg_value;
+
+/* A function of this type is used to free a gdb_reg_value.  See the
+   comment on `free' in struct gdb_reg_value.  */
+
+typedef void (gdb_reg_value_free) (struct gdb_reg_value *);
+
+/* Denotes the value of a register.  */
+
+struct gdb_reg_value
+{
+  /* The size of the register in bytes.  The reader need not set this
+     field.  This will be set for (defined) register values being read
+     from GDB using reg_get.  */
+  int size;
+
+  /* Set to non-zero if the value for the register is known.  The
+     registers for which the reader does not call reg_set are also
+     assumed to be undefined */
+  int defined;
+
+  /* Since gdb_reg_value is a variable sized structure, it will
+     usually be allocated on the heap.  This function is expected to
+     contain the corresponding "free" function.
+
+     When a pointer to gdb_reg_value is being sent from GDB to the
+     reader (via gdb_unwind_reg_get), the reader is expected to call
+     this function (with the same gdb_reg_value as argument) once it
+     is done with the value.
+
+     When the function sends the a gdb_reg_value to GDB (via
+     gdb_unwind_reg_set), it is expected to set this field to point to
+     an appropriate cleanup routine (or to NULL if no cleanup is
+     required).  */
+  gdb_reg_value_free *free;
+
+  /* The value of the register.  */
+  unsigned char value[1];
+};
+
+/* get_frame_id in gdb_reader_funcs is to return a gdb_frame_id
+   corresponding to the current frame.  The registers corresponding to
+   the current frame can be read using reg_get.  Calling get_frame_id
+   on a particular frame should return the same gdb_frame_id
+   throughout its lifetime (i.e. till before it gets unwound).  One
+   way to do this is by having the CODE_ADDRESS point to the
+   function's first instruction and STACK_ADDRESS point to the value
+   of the stack pointer when entering the function.  */
+
+struct gdb_frame_id
+{
+  GDB_CORE_ADDR code_address;
+  GDB_CORE_ADDR stack_address;
+};
+
+/* Forward declaration.  */
+
+struct gdb_unwind_callbacks;
+
+/* Returns the value of a particular register in the current frame.
+   The current frame is the frame that needs to be unwound into the
+   outer (earlier) frame.
+
+   CB is the struct gdb_unwind_callbacks * the callback belongs to.
+   REGNUM is the DWARF register number of the register that needs to
+   be unwound.
+
+   Returns the gdb_reg_value corresponding to the register requested.
+   In case the value of the register has been optimized away or
+   otherwise unavailable, the defined flag in the returned
+   gdb_reg_value will be zero.  */
+
+typedef struct gdb_reg_value *(gdb_unwind_reg_get)
+                              (struct gdb_unwind_callbacks *cb, int regnum);
+
+/* Sets the previous value of a particular register.  REGNUM is the
+   (DWARF) register number whose value is to be set.  VAL is the value
+   the register is to be set to.
+
+   VAL is *not* copied, so the memory allocated to it cannot be
+   reused.  Once GDB no longer needs the value, it is deallocated
+   using the FREE function (see gdb_reg_value).
+
+   A register can also be "set" to an undefined value by setting the
+   defined in VAL to zero.  */
+
+typedef void (gdb_unwind_reg_set) (struct gdb_unwind_callbacks *cb, int regnum,
+                                   struct gdb_reg_value *val);
+
+/* This struct is passed to unwind in gdb_reader_funcs, and is to be
+   used to unwind the current frame (current being the frame whose
+   registers can be read using reg_get) into the earlier frame.  The
+   functions have been described above.  */
+
+struct gdb_unwind_callbacks
+{
+  gdb_unwind_reg_get *reg_get;
+  gdb_unwind_reg_set *reg_set;
+  gdb_target_read *target_read;
+
+  /* For internal use by GDB.  */
+  void *priv_data;
+};
+
+/* Forward declaration.  */
+
+struct gdb_reader_funcs;
+
+/* Parse the debug info off a block of memory, pointed to by MEMORY
+   (already copied to GDB's address space) and MEMORY_SZ bytes long.
+   The implementation has to use the functions in CB to actually emit
+   the parsed data into GDB.  SELF is the same structure returned by
+   gdb_init_reader.
+
+   Return GDB_FAIL on failure and GDB_SUCCESS on success.  */
+
+typedef enum gdb_status (gdb_read_debug_info) (struct gdb_reader_funcs *self,
+                                               struct gdb_symbol_callbacks *cb,
+                                               void *memory, long memory_sz);
+
+/* Unwind the current frame, CB is the set of unwind callbacks that
+   are to be used to do this.
+
+   Return GDB_FAIL on failure and GDB_SUCCESS on success.  */
+
+typedef enum gdb_status (gdb_unwind_frame) (struct gdb_reader_funcs *self,
+                                            struct gdb_unwind_callbacks *cb);
+
+/* Return the frame ID corresponding to the current frame, using C to
+   read the current register values.  See the comment on struct
+   gdb_frame_id.  */
+
+typedef struct gdb_frame_id (gdb_get_frame_id) (struct gdb_reader_funcs *self,
+                                                struct gdb_unwind_callbacks *c);
+
+/* Called when a reader is being unloaded.  This function should also
+   free SELF, if required.  */
+
+typedef void (gdb_destroy_reader) (struct gdb_reader_funcs *self);
+
+/* Called when the reader is loaded.  Must either return a properly
+   populated gdb_reader_funcs or NULL.  The memory allocated for the
+   gdb_reader_funcs is to be managed by the reader itself (i.e. if it
+   is allocated from the heap, it must also be freed in
+   gdb_destroy_reader).  */
+
+extern struct gdb_reader_funcs *gdb_init_reader (void);
+
+/* Pointer to the functions which implement the reader's
+   functionality.  The individual functions have been documented
+   above.
+
+   None of the fields are optional.  */
+
+struct gdb_reader_funcs
+{
+  /* Must be set to GDB_READER_INTERFACE_VERSION.  */
+  int reader_version;
+
+  /* For use by the reader.  */
+  void *priv_data;
+
+  gdb_read_debug_info *read;
+  gdb_unwind_frame *unwind;
+  gdb_get_frame_id *get_frame_id;
+  gdb_destroy_reader *destroy;
+};
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/crtbegin.o b/lib/gcc/aarch64-elf/9.1.1/crtbegin.o
new file mode 100644
index 0000000..c1c5b5e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/crtbegin.o
Binary files differ
diff --git a/lib/gcc/aarch64-elf/9.1.1/crtend.o b/lib/gcc/aarch64-elf/9.1.1/crtend.o
new file mode 100644
index 0000000..3b3f401
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/crtend.o
Binary files differ
diff --git a/lib/gcc/aarch64-elf/9.1.1/crtfastmath.o b/lib/gcc/aarch64-elf/9.1.1/crtfastmath.o
new file mode 100644
index 0000000..11c5f96
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/crtfastmath.o
Binary files differ
diff --git a/lib/gcc/aarch64-elf/9.1.1/crti.o b/lib/gcc/aarch64-elf/9.1.1/crti.o
new file mode 100644
index 0000000..260338c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/crti.o
Binary files differ
diff --git a/lib/gcc/aarch64-elf/9.1.1/crtn.o b/lib/gcc/aarch64-elf/9.1.1/crtn.o
new file mode 100644
index 0000000..81be39c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/crtn.o
Binary files differ
diff --git a/lib/gcc/aarch64-elf/9.1.1/include-fixed/README b/lib/gcc/aarch64-elf/9.1.1/include-fixed/README
new file mode 100644
index 0000000..7086a77
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include-fixed/README
@@ -0,0 +1,14 @@
+This README file is copied into the directory for GCC-only header files
+when fixincludes is run by the makefile for GCC.
+
+Many of the files in this directory were automatically edited from the
+standard system header files by the fixincludes process.  They are
+system-specific, and will not work on any other kind of system.  They
+are also not part of GCC.  The reason we have to do this is because
+GCC requires ANSI C headers and many vendors supply ANSI-incompatible
+headers.
+
+Because this is an automated process, sometimes headers get "fixed"
+that do not, strictly speaking, need a fix.  As long as nothing is broken
+by the process, it is just an unfortunate collateral inconvenience.
+We would like to rectify it, if it is not "too inconvenient".
diff --git a/lib/gcc/aarch64-elf/9.1.1/include-fixed/limits.h b/lib/gcc/aarch64-elf/9.1.1/include-fixed/limits.h
new file mode 100644
index 0000000..0cddf0f
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include-fixed/limits.h
@@ -0,0 +1,152 @@
+/* Copyright (C) 1991-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef _LIMITS_H___
+#define _LIMITS_H___
+
+/* Number of bits in a `char'.  */
+#undef CHAR_BIT
+#define CHAR_BIT __CHAR_BIT__
+
+/* Maximum length of a multibyte character.  */
+#ifndef MB_LEN_MAX
+#define MB_LEN_MAX 1
+#endif
+
+/* Minimum and maximum values a `signed char' can hold.  */
+#undef SCHAR_MIN
+#define SCHAR_MIN (-SCHAR_MAX - 1)
+#undef SCHAR_MAX
+#define SCHAR_MAX __SCHAR_MAX__
+
+/* Maximum value an `unsigned char' can hold.  (Minimum is 0).  */
+#undef UCHAR_MAX
+#if __SCHAR_MAX__ == __INT_MAX__
+# define UCHAR_MAX (SCHAR_MAX * 2U + 1U)
+#else
+# define UCHAR_MAX (SCHAR_MAX * 2 + 1)
+#endif
+
+/* Minimum and maximum values a `char' can hold.  */
+#ifdef __CHAR_UNSIGNED__
+# undef CHAR_MIN
+# if __SCHAR_MAX__ == __INT_MAX__
+#  define CHAR_MIN 0U
+# else
+#  define CHAR_MIN 0
+# endif
+# undef CHAR_MAX
+# define CHAR_MAX UCHAR_MAX
+#else
+# undef CHAR_MIN
+# define CHAR_MIN SCHAR_MIN
+# undef CHAR_MAX
+# define CHAR_MAX SCHAR_MAX
+#endif
+
+/* Minimum and maximum values a `signed short int' can hold.  */
+#undef SHRT_MIN
+#define SHRT_MIN (-SHRT_MAX - 1)
+#undef SHRT_MAX
+#define SHRT_MAX __SHRT_MAX__
+
+/* Maximum value an `unsigned short int' can hold.  (Minimum is 0).  */
+#undef USHRT_MAX
+#if __SHRT_MAX__ == __INT_MAX__
+# define USHRT_MAX (SHRT_MAX * 2U + 1U)
+#else
+# define USHRT_MAX (SHRT_MAX * 2 + 1)
+#endif
+
+/* Minimum and maximum values a `signed int' can hold.  */
+#undef INT_MIN
+#define INT_MIN (-INT_MAX - 1)
+#undef INT_MAX
+#define INT_MAX __INT_MAX__
+
+/* Maximum value an `unsigned int' can hold.  (Minimum is 0).  */
+#undef UINT_MAX
+#define UINT_MAX (INT_MAX * 2U + 1U)
+
+/* Minimum and maximum values a `signed long int' can hold.
+   (Same as `int').  */
+#undef LONG_MIN
+#define LONG_MIN (-LONG_MAX - 1L)
+#undef LONG_MAX
+#define LONG_MAX __LONG_MAX__
+
+/* Maximum value an `unsigned long int' can hold.  (Minimum is 0).  */
+#undef ULONG_MAX
+#define ULONG_MAX (LONG_MAX * 2UL + 1UL)
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+/* Minimum and maximum values a `signed long long int' can hold.  */
+# undef LLONG_MIN
+# define LLONG_MIN (-LLONG_MAX - 1LL)
+# undef LLONG_MAX
+# define LLONG_MAX __LONG_LONG_MAX__
+
+/* Maximum value an `unsigned long long int' can hold.  (Minimum is 0).  */
+# undef ULLONG_MAX
+# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
+#endif
+
+#if defined (__GNU_LIBRARY__) ? defined (__USE_GNU) : !defined (__STRICT_ANSI__)
+/* Minimum and maximum values a `signed long long int' can hold.  */
+# undef LONG_LONG_MIN
+# define LONG_LONG_MIN (-LONG_LONG_MAX - 1LL)
+# undef LONG_LONG_MAX
+# define LONG_LONG_MAX __LONG_LONG_MAX__
+
+/* Maximum value an `unsigned long long int' can hold.  (Minimum is 0).  */
+# undef ULONG_LONG_MAX
+# define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1ULL)
+#endif
+
+#ifdef __STDC_WANT_IEC_60559_BFP_EXT__
+/* TS 18661-1 widths of integer types.  */
+# undef CHAR_WIDTH
+# define CHAR_WIDTH __SCHAR_WIDTH__
+# undef SCHAR_WIDTH
+# define SCHAR_WIDTH __SCHAR_WIDTH__
+# undef UCHAR_WIDTH
+# define UCHAR_WIDTH __SCHAR_WIDTH__
+# undef SHRT_WIDTH
+# define SHRT_WIDTH __SHRT_WIDTH__
+# undef USHRT_WIDTH
+# define USHRT_WIDTH __SHRT_WIDTH__
+# undef INT_WIDTH
+# define INT_WIDTH __INT_WIDTH__
+# undef UINT_WIDTH
+# define UINT_WIDTH __INT_WIDTH__
+# undef LONG_WIDTH
+# define LONG_WIDTH __LONG_WIDTH__
+# undef ULONG_WIDTH
+# define ULONG_WIDTH __LONG_WIDTH__
+# undef LLONG_WIDTH
+# define LLONG_WIDTH __LONG_LONG_WIDTH__
+# undef ULLONG_WIDTH
+# define ULLONG_WIDTH __LONG_LONG_WIDTH__
+#endif
+
+#endif /* _LIMITS_H___ */
diff --git a/lib/gcc/aarch64-elf/9.1.1/include-fixed/syslimits.h b/lib/gcc/aarch64-elf/9.1.1/include-fixed/syslimits.h
new file mode 100644
index 0000000..a362802
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include-fixed/syslimits.h
@@ -0,0 +1,8 @@
+/* syslimits.h stands for the system's own limits.h file.
+   If we can use it ok unmodified, then we install this text.
+   If fixincludes fixes it, then the fixed version is installed
+   instead of this text.  */
+
+#define _GCC_NEXT_LIMITS_H		/* tell gcc's limits.h to recurse */
+#include_next <limits.h>
+#undef _GCC_NEXT_LIMITS_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/arm_acle.h b/lib/gcc/aarch64-elf/9.1.1/include/arm_acle.h
new file mode 100644
index 0000000..534a989
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/arm_acle.h
@@ -0,0 +1,94 @@
+/* AArch64 Non-NEON ACLE intrinsics include file.
+
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Contributed by ARM Ltd.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _GCC_ARM_ACLE_H
+#define _GCC_ARM_ACLE_H
+
+#include <stdint.h>
+
+#pragma GCC push_options
+
+#pragma GCC target ("+nothing+crc")
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+__crc32b (uint32_t __a, uint8_t __b)
+{
+  return __builtin_aarch64_crc32b (__a, __b);
+}
+
+__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+__crc32cb (uint32_t __a, uint8_t __b)
+{
+  return __builtin_aarch64_crc32cb (__a, __b);
+}
+
+__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+__crc32ch (uint32_t __a, uint16_t __b)
+{
+  return __builtin_aarch64_crc32ch (__a, __b);
+}
+
+__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+__crc32cw (uint32_t __a, uint32_t __b)
+{
+  return __builtin_aarch64_crc32cw (__a, __b);
+}
+
+__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+__crc32cd (uint32_t __a, uint64_t __b)
+{
+  return __builtin_aarch64_crc32cx (__a, __b);
+}
+
+__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+__crc32h (uint32_t __a, uint16_t __b)
+{
+  return __builtin_aarch64_crc32h (__a, __b);
+}
+
+__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+__crc32w (uint32_t __a, uint32_t __b)
+{
+  return __builtin_aarch64_crc32w (__a, __b);
+}
+
+__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+__crc32d (uint32_t __a, uint64_t __b)
+{
+  return __builtin_aarch64_crc32x (__a, __b);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#pragma GCC pop_options
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/arm_fp16.h b/lib/gcc/aarch64-elf/9.1.1/include/arm_fp16.h
new file mode 100644
index 0000000..34eb8b2
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/arm_fp16.h
@@ -0,0 +1,579 @@
+/* ARM FP16 scalar intrinsics include file.
+
+   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+   Contributed by ARM Ltd.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _AARCH64_FP16_H_
+#define _AARCH64_FP16_H_
+
+#include <stdint.h>
+
+#pragma GCC push_options
+#pragma GCC target ("arch=armv8.2-a+fp16")
+
+typedef __fp16 float16_t;
+
+/* ARMv8.2-A FP16 one operand scalar intrinsics.  */
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vabsh_f16 (float16_t __a)
+{
+  return __builtin_aarch64_abshf (__a);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vceqzh_f16 (float16_t __a)
+{
+  return __builtin_aarch64_cmeqhf_uss (__a, 0.0f);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vcgezh_f16 (float16_t __a)
+{
+  return __builtin_aarch64_cmgehf_uss (__a, 0.0f);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vcgtzh_f16 (float16_t __a)
+{
+  return __builtin_aarch64_cmgthf_uss (__a, 0.0f);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vclezh_f16 (float16_t __a)
+{
+  return __builtin_aarch64_cmlehf_uss (__a, 0.0f);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vcltzh_f16 (float16_t __a)
+{
+  return __builtin_aarch64_cmlthf_uss (__a, 0.0f);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vcvth_f16_s16 (int16_t __a)
+{
+  return __builtin_aarch64_floathihf (__a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vcvth_f16_s32 (int32_t __a)
+{
+  return __builtin_aarch64_floatsihf (__a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vcvth_f16_s64 (int64_t __a)
+{
+  return __builtin_aarch64_floatdihf (__a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vcvth_f16_u16 (uint16_t __a)
+{
+  return __builtin_aarch64_floatunshihf_us (__a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vcvth_f16_u32 (uint32_t __a)
+{
+  return __builtin_aarch64_floatunssihf_us (__a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vcvth_f16_u64 (uint64_t __a)
+{
+  return __builtin_aarch64_floatunsdihf_us (__a);
+}
+
+__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+vcvth_s16_f16 (float16_t __a)
+{
+  return __builtin_aarch64_fix_trunchfhi (__a);
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+vcvth_s32_f16 (float16_t __a)
+{
+  return __builtin_aarch64_fix_trunchfsi (__a);
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+vcvth_s64_f16 (float16_t __a)
+{
+  return __builtin_aarch64_fix_trunchfdi (__a);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vcvth_u16_f16 (float16_t __a)
+{
+  return __builtin_aarch64_fixuns_trunchfhi_us (__a);
+}
+
+__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+vcvth_u32_f16 (float16_t __a)
+{
+  return __builtin_aarch64_fixuns_trunchfsi_us (__a);
+}
+
+__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+vcvth_u64_f16 (float16_t __a)
+{
+  return __builtin_aarch64_fixuns_trunchfdi_us (__a);
+}
+
+__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+vcvtah_s16_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lroundhfhi (__a);
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+vcvtah_s32_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lroundhfsi (__a);
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+vcvtah_s64_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lroundhfdi (__a);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vcvtah_u16_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lrounduhfhi_us (__a);
+}
+
+__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+vcvtah_u32_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lrounduhfsi_us (__a);
+}
+
+__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+vcvtah_u64_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lrounduhfdi_us (__a);
+}
+
+__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+vcvtmh_s16_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lfloorhfhi (__a);
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+vcvtmh_s32_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lfloorhfsi (__a);
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+vcvtmh_s64_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lfloorhfdi (__a);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vcvtmh_u16_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lflooruhfhi_us (__a);
+}
+
+__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+vcvtmh_u32_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lflooruhfsi_us (__a);
+}
+
+__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+vcvtmh_u64_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lflooruhfdi_us (__a);
+}
+
+__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+vcvtnh_s16_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lfrintnhfhi (__a);
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+vcvtnh_s32_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lfrintnhfsi (__a);
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+vcvtnh_s64_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lfrintnhfdi (__a);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vcvtnh_u16_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lfrintnuhfhi_us (__a);
+}
+
+__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+vcvtnh_u32_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lfrintnuhfsi_us (__a);
+}
+
+__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+vcvtnh_u64_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lfrintnuhfdi_us (__a);
+}
+
+__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+vcvtph_s16_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lceilhfhi (__a);
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+vcvtph_s32_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lceilhfsi (__a);
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+vcvtph_s64_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lceilhfdi (__a);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vcvtph_u16_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lceiluhfhi_us (__a);
+}
+
+__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+vcvtph_u32_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lceiluhfsi_us (__a);
+}
+
+__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+vcvtph_u64_f16 (float16_t __a)
+{
+  return __builtin_aarch64_lceiluhfdi_us (__a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vnegh_f16 (float16_t __a)
+{
+  return __builtin_aarch64_neghf (__a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vrecpeh_f16 (float16_t __a)
+{
+  return __builtin_aarch64_frecpehf (__a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vrecpxh_f16 (float16_t __a)
+{
+  return __builtin_aarch64_frecpxhf (__a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vrndh_f16 (float16_t __a)
+{
+  return __builtin_aarch64_btrunchf (__a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vrndah_f16 (float16_t __a)
+{
+  return __builtin_aarch64_roundhf (__a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vrndih_f16 (float16_t __a)
+{
+  return __builtin_aarch64_nearbyinthf (__a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vrndmh_f16 (float16_t __a)
+{
+  return __builtin_aarch64_floorhf (__a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vrndnh_f16 (float16_t __a)
+{
+  return __builtin_aarch64_frintnhf (__a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vrndph_f16 (float16_t __a)
+{
+  return __builtin_aarch64_ceilhf (__a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vrndxh_f16 (float16_t __a)
+{
+  return __builtin_aarch64_rinthf (__a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vrsqrteh_f16 (float16_t __a)
+{
+  return __builtin_aarch64_rsqrtehf (__a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vsqrth_f16 (float16_t __a)
+{
+  return __builtin_aarch64_sqrthf (__a);
+}
+
+/* ARMv8.2-A FP16 two operands scalar intrinsics.  */
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vaddh_f16 (float16_t __a, float16_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vabdh_f16 (float16_t __a, float16_t __b)
+{
+  return __builtin_aarch64_fabdhf (__a, __b);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vcageh_f16 (float16_t __a, float16_t __b)
+{
+  return __builtin_aarch64_facgehf_uss (__a, __b);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vcagth_f16 (float16_t __a, float16_t __b)
+{
+  return __builtin_aarch64_facgthf_uss (__a, __b);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vcaleh_f16 (float16_t __a, float16_t __b)
+{
+  return __builtin_aarch64_faclehf_uss (__a, __b);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vcalth_f16 (float16_t __a, float16_t __b)
+{
+  return __builtin_aarch64_faclthf_uss (__a, __b);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vceqh_f16 (float16_t __a, float16_t __b)
+{
+  return __builtin_aarch64_cmeqhf_uss (__a, __b);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vcgeh_f16 (float16_t __a, float16_t __b)
+{
+  return __builtin_aarch64_cmgehf_uss (__a, __b);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vcgth_f16 (float16_t __a, float16_t __b)
+{
+  return __builtin_aarch64_cmgthf_uss (__a, __b);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vcleh_f16 (float16_t __a, float16_t __b)
+{
+  return __builtin_aarch64_cmlehf_uss (__a, __b);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vclth_f16 (float16_t __a, float16_t __b)
+{
+  return __builtin_aarch64_cmlthf_uss (__a, __b);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vcvth_n_f16_s16 (int16_t __a, const int __b)
+{
+  return __builtin_aarch64_scvtfhi (__a, __b);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vcvth_n_f16_s32 (int32_t __a, const int __b)
+{
+  return __builtin_aarch64_scvtfsihf (__a, __b);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vcvth_n_f16_s64 (int64_t __a, const int __b)
+{
+  return __builtin_aarch64_scvtfdihf (__a, __b);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vcvth_n_f16_u16 (uint16_t __a, const int __b)
+{
+  return __builtin_aarch64_ucvtfhi_sus (__a, __b);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vcvth_n_f16_u32 (uint32_t __a, const int __b)
+{
+  return __builtin_aarch64_ucvtfsihf_sus (__a, __b);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vcvth_n_f16_u64 (uint64_t __a, const int __b)
+{
+  return __builtin_aarch64_ucvtfdihf_sus (__a, __b);
+}
+
+__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+vcvth_n_s16_f16 (float16_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzshf (__a, __b);
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+vcvth_n_s32_f16 (float16_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzshfsi (__a, __b);
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+vcvth_n_s64_f16 (float16_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzshfdi (__a, __b);
+}
+
+__extension__ static __inline uint16_t __attribute__ ((__always_inline__))
+vcvth_n_u16_f16 (float16_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzuhf_uss (__a, __b);
+}
+
+__extension__ static __inline uint32_t __attribute__ ((__always_inline__))
+vcvth_n_u32_f16 (float16_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzuhfsi_uss (__a, __b);
+}
+
+__extension__ static __inline uint64_t __attribute__ ((__always_inline__))
+vcvth_n_u64_f16 (float16_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzuhfdi_uss (__a, __b);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vdivh_f16 (float16_t __a, float16_t __b)
+{
+  return __a / __b;
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vmaxh_f16 (float16_t __a, float16_t __b)
+{
+  return __builtin_aarch64_fmaxhf (__a, __b);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vmaxnmh_f16 (float16_t __a, float16_t __b)
+{
+  return __builtin_aarch64_fmaxhf (__a, __b);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vminh_f16 (float16_t __a, float16_t __b)
+{
+  return __builtin_aarch64_fminhf (__a, __b);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vminnmh_f16 (float16_t __a, float16_t __b)
+{
+  return __builtin_aarch64_fminhf (__a, __b);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vmulh_f16 (float16_t __a, float16_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vmulxh_f16 (float16_t __a, float16_t __b)
+{
+  return __builtin_aarch64_fmulxhf (__a, __b);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vrecpsh_f16 (float16_t __a, float16_t __b)
+{
+  return __builtin_aarch64_frecpshf (__a, __b);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vrsqrtsh_f16 (float16_t __a, float16_t __b)
+{
+  return __builtin_aarch64_rsqrtshf (__a, __b);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vsubh_f16 (float16_t __a, float16_t __b)
+{
+  return __a - __b;
+}
+
+/* ARMv8.2-A FP16 three operands scalar intrinsics.  */
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vfmah_f16 (float16_t __a, float16_t __b, float16_t __c)
+{
+  return __builtin_aarch64_fmahf (__b, __c, __a);
+}
+
+__extension__ static __inline float16_t __attribute__ ((__always_inline__))
+vfmsh_f16 (float16_t __a, float16_t __b, float16_t __c)
+{
+  return __builtin_aarch64_fnmahf (__b, __c, __a);
+}
+
+#pragma GCC pop_options
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/arm_neon.h b/lib/gcc/aarch64-elf/9.1.1/include/arm_neon.h
new file mode 100644
index 0000000..314ef30
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/arm_neon.h
@@ -0,0 +1,34020 @@
+/* ARM NEON intrinsics include file.
+
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Contributed by ARM Ltd.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _AARCH64_NEON_H_
+#define _AARCH64_NEON_H_
+
+#pragma GCC push_options
+#pragma GCC target ("+nothing+simd")
+
+#include <stdint.h>
+
+#define __AARCH64_UINT64_C(__C) ((uint64_t) __C)
+#define __AARCH64_INT64_C(__C) ((int64_t) __C)
+
+typedef __Int8x8_t int8x8_t;
+typedef __Int16x4_t int16x4_t;
+typedef __Int32x2_t int32x2_t;
+typedef __Int64x1_t int64x1_t;
+typedef __Float16x4_t float16x4_t;
+typedef __Float32x2_t float32x2_t;
+typedef __Poly8x8_t poly8x8_t;
+typedef __Poly16x4_t poly16x4_t;
+typedef __Uint8x8_t uint8x8_t;
+typedef __Uint16x4_t uint16x4_t;
+typedef __Uint32x2_t uint32x2_t;
+typedef __Float64x1_t float64x1_t;
+typedef __Uint64x1_t uint64x1_t;
+typedef __Int8x16_t int8x16_t;
+typedef __Int16x8_t int16x8_t;
+typedef __Int32x4_t int32x4_t;
+typedef __Int64x2_t int64x2_t;
+typedef __Float16x8_t float16x8_t;
+typedef __Float32x4_t float32x4_t;
+typedef __Float64x2_t float64x2_t;
+typedef __Poly8x16_t poly8x16_t;
+typedef __Poly16x8_t poly16x8_t;
+typedef __Poly64x2_t poly64x2_t;
+typedef __Poly64x1_t poly64x1_t;
+typedef __Uint8x16_t uint8x16_t;
+typedef __Uint16x8_t uint16x8_t;
+typedef __Uint32x4_t uint32x4_t;
+typedef __Uint64x2_t uint64x2_t;
+
+typedef __Poly8_t poly8_t;
+typedef __Poly16_t poly16_t;
+typedef __Poly64_t poly64_t;
+typedef __Poly128_t poly128_t;
+
+typedef __fp16 float16_t;
+typedef float float32_t;
+typedef double float64_t;
+
+typedef struct int8x8x2_t
+{
+  int8x8_t val[2];
+} int8x8x2_t;
+
+typedef struct int8x16x2_t
+{
+  int8x16_t val[2];
+} int8x16x2_t;
+
+typedef struct int16x4x2_t
+{
+  int16x4_t val[2];
+} int16x4x2_t;
+
+typedef struct int16x8x2_t
+{
+  int16x8_t val[2];
+} int16x8x2_t;
+
+typedef struct int32x2x2_t
+{
+  int32x2_t val[2];
+} int32x2x2_t;
+
+typedef struct int32x4x2_t
+{
+  int32x4_t val[2];
+} int32x4x2_t;
+
+typedef struct int64x1x2_t
+{
+  int64x1_t val[2];
+} int64x1x2_t;
+
+typedef struct int64x2x2_t
+{
+  int64x2_t val[2];
+} int64x2x2_t;
+
+typedef struct uint8x8x2_t
+{
+  uint8x8_t val[2];
+} uint8x8x2_t;
+
+typedef struct uint8x16x2_t
+{
+  uint8x16_t val[2];
+} uint8x16x2_t;
+
+typedef struct uint16x4x2_t
+{
+  uint16x4_t val[2];
+} uint16x4x2_t;
+
+typedef struct uint16x8x2_t
+{
+  uint16x8_t val[2];
+} uint16x8x2_t;
+
+typedef struct uint32x2x2_t
+{
+  uint32x2_t val[2];
+} uint32x2x2_t;
+
+typedef struct uint32x4x2_t
+{
+  uint32x4_t val[2];
+} uint32x4x2_t;
+
+typedef struct uint64x1x2_t
+{
+  uint64x1_t val[2];
+} uint64x1x2_t;
+
+typedef struct uint64x2x2_t
+{
+  uint64x2_t val[2];
+} uint64x2x2_t;
+
+typedef struct float16x4x2_t
+{
+  float16x4_t val[2];
+} float16x4x2_t;
+
+typedef struct float16x8x2_t
+{
+  float16x8_t val[2];
+} float16x8x2_t;
+
+typedef struct float32x2x2_t
+{
+  float32x2_t val[2];
+} float32x2x2_t;
+
+typedef struct float32x4x2_t
+{
+  float32x4_t val[2];
+} float32x4x2_t;
+
+typedef struct float64x2x2_t
+{
+  float64x2_t val[2];
+} float64x2x2_t;
+
+typedef struct float64x1x2_t
+{
+  float64x1_t val[2];
+} float64x1x2_t;
+
+typedef struct poly8x8x2_t
+{
+  poly8x8_t val[2];
+} poly8x8x2_t;
+
+typedef struct poly8x16x2_t
+{
+  poly8x16_t val[2];
+} poly8x16x2_t;
+
+typedef struct poly16x4x2_t
+{
+  poly16x4_t val[2];
+} poly16x4x2_t;
+
+typedef struct poly16x8x2_t
+{
+  poly16x8_t val[2];
+} poly16x8x2_t;
+
+typedef struct poly64x1x2_t
+{
+  poly64x1_t val[2];
+} poly64x1x2_t;
+
+typedef struct poly64x1x3_t
+{
+  poly64x1_t val[3];
+} poly64x1x3_t;
+
+typedef struct poly64x1x4_t
+{
+  poly64x1_t val[4];
+} poly64x1x4_t;
+
+typedef struct poly64x2x2_t
+{
+  poly64x2_t val[2];
+} poly64x2x2_t;
+
+typedef struct poly64x2x3_t
+{
+  poly64x2_t val[3];
+} poly64x2x3_t;
+
+typedef struct poly64x2x4_t
+{
+  poly64x2_t val[4];
+} poly64x2x4_t;
+
+typedef struct int8x8x3_t
+{
+  int8x8_t val[3];
+} int8x8x3_t;
+
+typedef struct int8x16x3_t
+{
+  int8x16_t val[3];
+} int8x16x3_t;
+
+typedef struct int16x4x3_t
+{
+  int16x4_t val[3];
+} int16x4x3_t;
+
+typedef struct int16x8x3_t
+{
+  int16x8_t val[3];
+} int16x8x3_t;
+
+typedef struct int32x2x3_t
+{
+  int32x2_t val[3];
+} int32x2x3_t;
+
+typedef struct int32x4x3_t
+{
+  int32x4_t val[3];
+} int32x4x3_t;
+
+typedef struct int64x1x3_t
+{
+  int64x1_t val[3];
+} int64x1x3_t;
+
+typedef struct int64x2x3_t
+{
+  int64x2_t val[3];
+} int64x2x3_t;
+
+typedef struct uint8x8x3_t
+{
+  uint8x8_t val[3];
+} uint8x8x3_t;
+
+typedef struct uint8x16x3_t
+{
+  uint8x16_t val[3];
+} uint8x16x3_t;
+
+typedef struct uint16x4x3_t
+{
+  uint16x4_t val[3];
+} uint16x4x3_t;
+
+typedef struct uint16x8x3_t
+{
+  uint16x8_t val[3];
+} uint16x8x3_t;
+
+typedef struct uint32x2x3_t
+{
+  uint32x2_t val[3];
+} uint32x2x3_t;
+
+typedef struct uint32x4x3_t
+{
+  uint32x4_t val[3];
+} uint32x4x3_t;
+
+typedef struct uint64x1x3_t
+{
+  uint64x1_t val[3];
+} uint64x1x3_t;
+
+typedef struct uint64x2x3_t
+{
+  uint64x2_t val[3];
+} uint64x2x3_t;
+
+typedef struct float16x4x3_t
+{
+  float16x4_t val[3];
+} float16x4x3_t;
+
+typedef struct float16x8x3_t
+{
+  float16x8_t val[3];
+} float16x8x3_t;
+
+typedef struct float32x2x3_t
+{
+  float32x2_t val[3];
+} float32x2x3_t;
+
+typedef struct float32x4x3_t
+{
+  float32x4_t val[3];
+} float32x4x3_t;
+
+typedef struct float64x2x3_t
+{
+  float64x2_t val[3];
+} float64x2x3_t;
+
+typedef struct float64x1x3_t
+{
+  float64x1_t val[3];
+} float64x1x3_t;
+
+typedef struct poly8x8x3_t
+{
+  poly8x8_t val[3];
+} poly8x8x3_t;
+
+typedef struct poly8x16x3_t
+{
+  poly8x16_t val[3];
+} poly8x16x3_t;
+
+typedef struct poly16x4x3_t
+{
+  poly16x4_t val[3];
+} poly16x4x3_t;
+
+typedef struct poly16x8x3_t
+{
+  poly16x8_t val[3];
+} poly16x8x3_t;
+
+typedef struct int8x8x4_t
+{
+  int8x8_t val[4];
+} int8x8x4_t;
+
+typedef struct int8x16x4_t
+{
+  int8x16_t val[4];
+} int8x16x4_t;
+
+typedef struct int16x4x4_t
+{
+  int16x4_t val[4];
+} int16x4x4_t;
+
+typedef struct int16x8x4_t
+{
+  int16x8_t val[4];
+} int16x8x4_t;
+
+typedef struct int32x2x4_t
+{
+  int32x2_t val[4];
+} int32x2x4_t;
+
+typedef struct int32x4x4_t
+{
+  int32x4_t val[4];
+} int32x4x4_t;
+
+typedef struct int64x1x4_t
+{
+  int64x1_t val[4];
+} int64x1x4_t;
+
+typedef struct int64x2x4_t
+{
+  int64x2_t val[4];
+} int64x2x4_t;
+
+typedef struct uint8x8x4_t
+{
+  uint8x8_t val[4];
+} uint8x8x4_t;
+
+typedef struct uint8x16x4_t
+{
+  uint8x16_t val[4];
+} uint8x16x4_t;
+
+typedef struct uint16x4x4_t
+{
+  uint16x4_t val[4];
+} uint16x4x4_t;
+
+typedef struct uint16x8x4_t
+{
+  uint16x8_t val[4];
+} uint16x8x4_t;
+
+typedef struct uint32x2x4_t
+{
+  uint32x2_t val[4];
+} uint32x2x4_t;
+
+typedef struct uint32x4x4_t
+{
+  uint32x4_t val[4];
+} uint32x4x4_t;
+
+typedef struct uint64x1x4_t
+{
+  uint64x1_t val[4];
+} uint64x1x4_t;
+
+typedef struct uint64x2x4_t
+{
+  uint64x2_t val[4];
+} uint64x2x4_t;
+
+typedef struct float16x4x4_t
+{
+  float16x4_t val[4];
+} float16x4x4_t;
+
+typedef struct float16x8x4_t
+{
+  float16x8_t val[4];
+} float16x8x4_t;
+
+typedef struct float32x2x4_t
+{
+  float32x2_t val[4];
+} float32x2x4_t;
+
+typedef struct float32x4x4_t
+{
+  float32x4_t val[4];
+} float32x4x4_t;
+
+typedef struct float64x2x4_t
+{
+  float64x2_t val[4];
+} float64x2x4_t;
+
+typedef struct float64x1x4_t
+{
+  float64x1_t val[4];
+} float64x1x4_t;
+
+typedef struct poly8x8x4_t
+{
+  poly8x8_t val[4];
+} poly8x8x4_t;
+
+typedef struct poly8x16x4_t
+{
+  poly8x16_t val[4];
+} poly8x16x4_t;
+
+typedef struct poly16x4x4_t
+{
+  poly16x4_t val[4];
+} poly16x4x4_t;
+
+typedef struct poly16x8x4_t
+{
+  poly16x8_t val[4];
+} poly16x8x4_t;
+
+/* __aarch64_vdup_lane internal macros.  */
+#define __aarch64_vdup_lane_any(__size, __q, __a, __b) \
+  vdup##__q##_n_##__size (__aarch64_vget_lane_any (__a, __b))
+
+#define __aarch64_vdup_lane_f16(__a, __b) \
+   __aarch64_vdup_lane_any (f16, , __a, __b)
+#define __aarch64_vdup_lane_f32(__a, __b) \
+   __aarch64_vdup_lane_any (f32, , __a, __b)
+#define __aarch64_vdup_lane_f64(__a, __b) \
+   __aarch64_vdup_lane_any (f64, , __a, __b)
+#define __aarch64_vdup_lane_p8(__a, __b) \
+   __aarch64_vdup_lane_any (p8, , __a, __b)
+#define __aarch64_vdup_lane_p16(__a, __b) \
+   __aarch64_vdup_lane_any (p16, , __a, __b)
+#define __aarch64_vdup_lane_p64(__a, __b) \
+   __aarch64_vdup_lane_any (p64, , __a, __b)
+#define __aarch64_vdup_lane_s8(__a, __b) \
+   __aarch64_vdup_lane_any (s8, , __a, __b)
+#define __aarch64_vdup_lane_s16(__a, __b) \
+   __aarch64_vdup_lane_any (s16, , __a, __b)
+#define __aarch64_vdup_lane_s32(__a, __b) \
+   __aarch64_vdup_lane_any (s32, , __a, __b)
+#define __aarch64_vdup_lane_s64(__a, __b) \
+  __aarch64_vdup_lane_any (s64, , __a, __b)
+#define __aarch64_vdup_lane_u8(__a, __b) \
+   __aarch64_vdup_lane_any (u8, , __a, __b)
+#define __aarch64_vdup_lane_u16(__a, __b) \
+   __aarch64_vdup_lane_any (u16, , __a, __b)
+#define __aarch64_vdup_lane_u32(__a, __b) \
+   __aarch64_vdup_lane_any (u32, , __a, __b)
+#define __aarch64_vdup_lane_u64(__a, __b) \
+   __aarch64_vdup_lane_any (u64, , __a, __b)
+
+/* __aarch64_vdup_laneq internal macros.  */
+#define __aarch64_vdup_laneq_f16(__a, __b) \
+   __aarch64_vdup_lane_any (f16, , __a, __b)
+#define __aarch64_vdup_laneq_f32(__a, __b) \
+   __aarch64_vdup_lane_any (f32, , __a, __b)
+#define __aarch64_vdup_laneq_f64(__a, __b) \
+   __aarch64_vdup_lane_any (f64, , __a, __b)
+#define __aarch64_vdup_laneq_p8(__a, __b) \
+   __aarch64_vdup_lane_any (p8, , __a, __b)
+#define __aarch64_vdup_laneq_p16(__a, __b) \
+   __aarch64_vdup_lane_any (p16, , __a, __b)
+#define __aarch64_vdup_laneq_p64(__a, __b) \
+   __aarch64_vdup_lane_any (p64, , __a, __b)
+#define __aarch64_vdup_laneq_s8(__a, __b) \
+   __aarch64_vdup_lane_any (s8, , __a, __b)
+#define __aarch64_vdup_laneq_s16(__a, __b) \
+   __aarch64_vdup_lane_any (s16, , __a, __b)
+#define __aarch64_vdup_laneq_s32(__a, __b) \
+   __aarch64_vdup_lane_any (s32, , __a, __b)
+#define __aarch64_vdup_laneq_s64(__a, __b) \
+   __aarch64_vdup_lane_any (s64, , __a, __b)
+#define __aarch64_vdup_laneq_u8(__a, __b) \
+   __aarch64_vdup_lane_any (u8, , __a, __b)
+#define __aarch64_vdup_laneq_u16(__a, __b) \
+   __aarch64_vdup_lane_any (u16, , __a, __b)
+#define __aarch64_vdup_laneq_u32(__a, __b) \
+   __aarch64_vdup_lane_any (u32, , __a, __b)
+#define __aarch64_vdup_laneq_u64(__a, __b) \
+   __aarch64_vdup_lane_any (u64, , __a, __b)
+
+/* __aarch64_vdupq_lane internal macros.  */
+#define __aarch64_vdupq_lane_f16(__a, __b) \
+   __aarch64_vdup_lane_any (f16, q, __a, __b)
+#define __aarch64_vdupq_lane_f32(__a, __b) \
+   __aarch64_vdup_lane_any (f32, q, __a, __b)
+#define __aarch64_vdupq_lane_f64(__a, __b) \
+   __aarch64_vdup_lane_any (f64, q, __a, __b)
+#define __aarch64_vdupq_lane_p8(__a, __b) \
+   __aarch64_vdup_lane_any (p8, q, __a, __b)
+#define __aarch64_vdupq_lane_p16(__a, __b) \
+   __aarch64_vdup_lane_any (p16, q, __a, __b)
+#define __aarch64_vdupq_lane_p64(__a, __b) \
+   __aarch64_vdup_lane_any (p64, q, __a, __b)
+#define __aarch64_vdupq_lane_s8(__a, __b) \
+   __aarch64_vdup_lane_any (s8, q, __a, __b)
+#define __aarch64_vdupq_lane_s16(__a, __b) \
+   __aarch64_vdup_lane_any (s16, q, __a, __b)
+#define __aarch64_vdupq_lane_s32(__a, __b) \
+   __aarch64_vdup_lane_any (s32, q, __a, __b)
+#define __aarch64_vdupq_lane_s64(__a, __b) \
+   __aarch64_vdup_lane_any (s64, q, __a, __b)
+#define __aarch64_vdupq_lane_u8(__a, __b) \
+   __aarch64_vdup_lane_any (u8, q, __a, __b)
+#define __aarch64_vdupq_lane_u16(__a, __b) \
+   __aarch64_vdup_lane_any (u16, q, __a, __b)
+#define __aarch64_vdupq_lane_u32(__a, __b) \
+   __aarch64_vdup_lane_any (u32, q, __a, __b)
+#define __aarch64_vdupq_lane_u64(__a, __b) \
+   __aarch64_vdup_lane_any (u64, q, __a, __b)
+
+/* __aarch64_vdupq_laneq internal macros.  */
+#define __aarch64_vdupq_laneq_f16(__a, __b) \
+   __aarch64_vdup_lane_any (f16, q, __a, __b)
+#define __aarch64_vdupq_laneq_f32(__a, __b) \
+   __aarch64_vdup_lane_any (f32, q, __a, __b)
+#define __aarch64_vdupq_laneq_f64(__a, __b) \
+   __aarch64_vdup_lane_any (f64, q, __a, __b)
+#define __aarch64_vdupq_laneq_p8(__a, __b) \
+   __aarch64_vdup_lane_any (p8, q, __a, __b)
+#define __aarch64_vdupq_laneq_p16(__a, __b) \
+   __aarch64_vdup_lane_any (p16, q, __a, __b)
+#define __aarch64_vdupq_laneq_p64(__a, __b) \
+   __aarch64_vdup_lane_any (p64, q, __a, __b)
+#define __aarch64_vdupq_laneq_s8(__a, __b) \
+   __aarch64_vdup_lane_any (s8, q, __a, __b)
+#define __aarch64_vdupq_laneq_s16(__a, __b) \
+   __aarch64_vdup_lane_any (s16, q, __a, __b)
+#define __aarch64_vdupq_laneq_s32(__a, __b) \
+   __aarch64_vdup_lane_any (s32, q, __a, __b)
+#define __aarch64_vdupq_laneq_s64(__a, __b) \
+   __aarch64_vdup_lane_any (s64, q, __a, __b)
+#define __aarch64_vdupq_laneq_u8(__a, __b) \
+   __aarch64_vdup_lane_any (u8, q, __a, __b)
+#define __aarch64_vdupq_laneq_u16(__a, __b) \
+   __aarch64_vdup_lane_any (u16, q, __a, __b)
+#define __aarch64_vdupq_laneq_u32(__a, __b) \
+   __aarch64_vdup_lane_any (u32, q, __a, __b)
+#define __aarch64_vdupq_laneq_u64(__a, __b) \
+   __aarch64_vdup_lane_any (u64, q, __a, __b)
+
+/* Internal macro for lane indices.  */
+
+#define __AARCH64_NUM_LANES(__v) (sizeof (__v) / sizeof (__v[0]))
+#define __AARCH64_LANE_CHECK(__vec, __idx)	\
+	__builtin_aarch64_im_lane_boundsi (sizeof(__vec), sizeof(__vec[0]), __idx)
+
+/* For big-endian, GCC's vector indices are the opposite way around
+   to the architectural lane indices used by Neon intrinsics.  */
+#ifdef __AARCH64EB__
+#define __aarch64_lane(__vec, __idx) (__AARCH64_NUM_LANES (__vec) - 1 - __idx)
+#else
+#define __aarch64_lane(__vec, __idx) __idx
+#endif
+
+/* vget_lane internal macro.  */
+#define __aarch64_vget_lane_any(__vec, __index)				\
+  __extension__								\
+  ({									\
+    __AARCH64_LANE_CHECK (__vec, __index);				\
+    __vec[__aarch64_lane (__vec, __index)];				\
+  })
+
+/* vset_lane and vld1_lane internal macro.  */
+#define __aarch64_vset_lane_any(__elem, __vec, __index)			\
+  __extension__								\
+  ({									\
+    __AARCH64_LANE_CHECK (__vec, __index);				\
+    __vec[__aarch64_lane (__vec, __index)] = __elem;			\
+    __vec;								\
+  })
+
+/* vadd  */
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vadd_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vadd_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vadd_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vadd_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vadd_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vadd_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vadd_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vadd_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vadd_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vadd_u64 (uint64x1_t __a, uint64x1_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddq_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddl_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return (int16x8_t) __builtin_aarch64_saddlv8qi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddl_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return (int32x4_t) __builtin_aarch64_saddlv4hi (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddl_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return (int64x2_t) __builtin_aarch64_saddlv2si (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddl_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return (uint16x8_t) __builtin_aarch64_uaddlv8qi ((int8x8_t) __a,
+						   (int8x8_t) __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddl_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return (uint32x4_t) __builtin_aarch64_uaddlv4hi ((int16x4_t) __a,
+						   (int16x4_t) __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddl_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return (uint64x2_t) __builtin_aarch64_uaddlv2si ((int32x2_t) __a,
+						   (int32x2_t) __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddl_high_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return (int16x8_t) __builtin_aarch64_saddl2v16qi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddl_high_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (int32x4_t) __builtin_aarch64_saddl2v8hi (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddl_high_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (int64x2_t) __builtin_aarch64_saddl2v4si (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddl_high_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return (uint16x8_t) __builtin_aarch64_uaddl2v16qi ((int8x16_t) __a,
+						     (int8x16_t) __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddl_high_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return (uint32x4_t) __builtin_aarch64_uaddl2v8hi ((int16x8_t) __a,
+						    (int16x8_t) __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddl_high_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return (uint64x2_t) __builtin_aarch64_uaddl2v4si ((int32x4_t) __a,
+						    (int32x4_t) __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddw_s8 (int16x8_t __a, int8x8_t __b)
+{
+  return (int16x8_t) __builtin_aarch64_saddwv8qi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddw_s16 (int32x4_t __a, int16x4_t __b)
+{
+  return (int32x4_t) __builtin_aarch64_saddwv4hi (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddw_s32 (int64x2_t __a, int32x2_t __b)
+{
+  return (int64x2_t) __builtin_aarch64_saddwv2si (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddw_u8 (uint16x8_t __a, uint8x8_t __b)
+{
+  return (uint16x8_t) __builtin_aarch64_uaddwv8qi ((int16x8_t) __a,
+						   (int8x8_t) __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddw_u16 (uint32x4_t __a, uint16x4_t __b)
+{
+  return (uint32x4_t) __builtin_aarch64_uaddwv4hi ((int32x4_t) __a,
+						   (int16x4_t) __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddw_u32 (uint64x2_t __a, uint32x2_t __b)
+{
+  return (uint64x2_t) __builtin_aarch64_uaddwv2si ((int64x2_t) __a,
+						   (int32x2_t) __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddw_high_s8 (int16x8_t __a, int8x16_t __b)
+{
+  return (int16x8_t) __builtin_aarch64_saddw2v16qi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddw_high_s16 (int32x4_t __a, int16x8_t __b)
+{
+  return (int32x4_t) __builtin_aarch64_saddw2v8hi (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddw_high_s32 (int64x2_t __a, int32x4_t __b)
+{
+  return (int64x2_t) __builtin_aarch64_saddw2v4si (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddw_high_u8 (uint16x8_t __a, uint8x16_t __b)
+{
+  return (uint16x8_t) __builtin_aarch64_uaddw2v16qi ((int16x8_t) __a,
+						     (int8x16_t) __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddw_high_u16 (uint32x4_t __a, uint16x8_t __b)
+{
+  return (uint32x4_t) __builtin_aarch64_uaddw2v8hi ((int32x4_t) __a,
+						    (int16x8_t) __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddw_high_u32 (uint64x2_t __a, uint32x4_t __b)
+{
+  return (uint64x2_t) __builtin_aarch64_uaddw2v4si ((int64x2_t) __a,
+						    (int32x4_t) __b);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhadd_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return (int8x8_t) __builtin_aarch64_shaddv8qi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhadd_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return (int16x4_t) __builtin_aarch64_shaddv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhadd_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return (int32x2_t) __builtin_aarch64_shaddv2si (__a, __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhadd_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return (uint8x8_t) __builtin_aarch64_uhaddv8qi ((int8x8_t) __a,
+						  (int8x8_t) __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhadd_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return (uint16x4_t) __builtin_aarch64_uhaddv4hi ((int16x4_t) __a,
+						   (int16x4_t) __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhadd_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return (uint32x2_t) __builtin_aarch64_uhaddv2si ((int32x2_t) __a,
+						   (int32x2_t) __b);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhaddq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return (int8x16_t) __builtin_aarch64_shaddv16qi (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhaddq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (int16x8_t) __builtin_aarch64_shaddv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhaddq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (int32x4_t) __builtin_aarch64_shaddv4si (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhaddq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return (uint8x16_t) __builtin_aarch64_uhaddv16qi ((int8x16_t) __a,
+						    (int8x16_t) __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhaddq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return (uint16x8_t) __builtin_aarch64_uhaddv8hi ((int16x8_t) __a,
+						   (int16x8_t) __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhaddq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return (uint32x4_t) __builtin_aarch64_uhaddv4si ((int32x4_t) __a,
+						   (int32x4_t) __b);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrhadd_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return (int8x8_t) __builtin_aarch64_srhaddv8qi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrhadd_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return (int16x4_t) __builtin_aarch64_srhaddv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrhadd_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return (int32x2_t) __builtin_aarch64_srhaddv2si (__a, __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrhadd_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return (uint8x8_t) __builtin_aarch64_urhaddv8qi ((int8x8_t) __a,
+						   (int8x8_t) __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrhadd_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return (uint16x4_t) __builtin_aarch64_urhaddv4hi ((int16x4_t) __a,
+						    (int16x4_t) __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrhadd_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return (uint32x2_t) __builtin_aarch64_urhaddv2si ((int32x2_t) __a,
+						    (int32x2_t) __b);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrhaddq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return (int8x16_t) __builtin_aarch64_srhaddv16qi (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrhaddq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (int16x8_t) __builtin_aarch64_srhaddv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrhaddq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (int32x4_t) __builtin_aarch64_srhaddv4si (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrhaddq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return (uint8x16_t) __builtin_aarch64_urhaddv16qi ((int8x16_t) __a,
+						     (int8x16_t) __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrhaddq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return (uint16x8_t) __builtin_aarch64_urhaddv8hi ((int16x8_t) __a,
+						    (int16x8_t) __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrhaddq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return (uint32x4_t) __builtin_aarch64_urhaddv4si ((int32x4_t) __a,
+						    (int32x4_t) __b);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddhn_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (int8x8_t) __builtin_aarch64_addhnv8hi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddhn_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (int16x4_t) __builtin_aarch64_addhnv4si (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddhn_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return (int32x2_t) __builtin_aarch64_addhnv2di (__a, __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddhn_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return (uint8x8_t) __builtin_aarch64_addhnv8hi ((int16x8_t) __a,
+						  (int16x8_t) __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddhn_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return (uint16x4_t) __builtin_aarch64_addhnv4si ((int32x4_t) __a,
+						   (int32x4_t) __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddhn_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return (uint32x2_t) __builtin_aarch64_addhnv2di ((int64x2_t) __a,
+						   (int64x2_t) __b);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vraddhn_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (int8x8_t) __builtin_aarch64_raddhnv8hi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vraddhn_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (int16x4_t) __builtin_aarch64_raddhnv4si (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vraddhn_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return (int32x2_t) __builtin_aarch64_raddhnv2di (__a, __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vraddhn_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return (uint8x8_t) __builtin_aarch64_raddhnv8hi ((int16x8_t) __a,
+						   (int16x8_t) __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vraddhn_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return (uint16x4_t) __builtin_aarch64_raddhnv4si ((int32x4_t) __a,
+						    (int32x4_t) __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vraddhn_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return (uint32x2_t) __builtin_aarch64_raddhnv2di ((int64x2_t) __a,
+						    (int64x2_t) __b);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddhn_high_s16 (int8x8_t __a, int16x8_t __b, int16x8_t __c)
+{
+  return (int8x16_t) __builtin_aarch64_addhn2v8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddhn_high_s32 (int16x4_t __a, int32x4_t __b, int32x4_t __c)
+{
+  return (int16x8_t) __builtin_aarch64_addhn2v4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddhn_high_s64 (int32x2_t __a, int64x2_t __b, int64x2_t __c)
+{
+  return (int32x4_t) __builtin_aarch64_addhn2v2di (__a, __b, __c);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddhn_high_u16 (uint8x8_t __a, uint16x8_t __b, uint16x8_t __c)
+{
+  return (uint8x16_t) __builtin_aarch64_addhn2v8hi ((int8x8_t) __a,
+						    (int16x8_t) __b,
+						    (int16x8_t) __c);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddhn_high_u32 (uint16x4_t __a, uint32x4_t __b, uint32x4_t __c)
+{
+  return (uint16x8_t) __builtin_aarch64_addhn2v4si ((int16x4_t) __a,
+						    (int32x4_t) __b,
+						    (int32x4_t) __c);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddhn_high_u64 (uint32x2_t __a, uint64x2_t __b, uint64x2_t __c)
+{
+  return (uint32x4_t) __builtin_aarch64_addhn2v2di ((int32x2_t) __a,
+						    (int64x2_t) __b,
+						    (int64x2_t) __c);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vraddhn_high_s16 (int8x8_t __a, int16x8_t __b, int16x8_t __c)
+{
+  return (int8x16_t) __builtin_aarch64_raddhn2v8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vraddhn_high_s32 (int16x4_t __a, int32x4_t __b, int32x4_t __c)
+{
+  return (int16x8_t) __builtin_aarch64_raddhn2v4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vraddhn_high_s64 (int32x2_t __a, int64x2_t __b, int64x2_t __c)
+{
+  return (int32x4_t) __builtin_aarch64_raddhn2v2di (__a, __b, __c);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vraddhn_high_u16 (uint8x8_t __a, uint16x8_t __b, uint16x8_t __c)
+{
+  return (uint8x16_t) __builtin_aarch64_raddhn2v8hi ((int8x8_t) __a,
+						     (int16x8_t) __b,
+						     (int16x8_t) __c);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vraddhn_high_u32 (uint16x4_t __a, uint32x4_t __b, uint32x4_t __c)
+{
+  return (uint16x8_t) __builtin_aarch64_raddhn2v4si ((int16x4_t) __a,
+						     (int32x4_t) __b,
+						     (int32x4_t) __c);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vraddhn_high_u64 (uint32x2_t __a, uint64x2_t __b, uint64x2_t __c)
+{
+  return (uint32x4_t) __builtin_aarch64_raddhn2v2di ((int32x2_t) __a,
+						     (int64x2_t) __b,
+						     (int64x2_t) __c);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdiv_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return __a / __b;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdiv_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return __a / __b;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdivq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return __a / __b;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdivq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return __a / __b;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_p8 (poly8x8_t __a, poly8x8_t __b)
+{
+  return (poly8x8_t) __builtin_aarch64_pmulv8qi ((int8x8_t) __a,
+						 (int8x8_t) __b);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_p8 (poly8x16_t __a, poly8x16_t __b)
+{
+  return (poly8x16_t) __builtin_aarch64_pmulv16qi ((int8x16_t) __a,
+						   (int8x16_t) __b);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vand_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return __a & __b;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vand_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return __a & __b;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vand_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return __a & __b;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vand_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return __a & __b;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vand_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return __a & __b;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vand_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return __a & __b;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vand_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return __a & __b;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vand_u64 (uint64x1_t __a, uint64x1_t __b)
+{
+  return __a & __b;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vandq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return __a & __b;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vandq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return __a & __b;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vandq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return __a & __b;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vandq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return __a & __b;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vandq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return __a & __b;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vandq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return __a & __b;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vandq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return __a & __b;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vandq_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return __a & __b;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorr_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return __a | __b;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorr_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return __a | __b;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorr_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return __a | __b;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorr_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return __a | __b;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorr_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return __a | __b;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorr_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return __a | __b;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorr_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return __a | __b;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorr_u64 (uint64x1_t __a, uint64x1_t __b)
+{
+  return __a | __b;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorrq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return __a | __b;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorrq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return __a | __b;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorrq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return __a | __b;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorrq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return __a | __b;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorrq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return __a | __b;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorrq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return __a | __b;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorrq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return __a | __b;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorrq_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return __a | __b;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veor_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return __a ^ __b;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veor_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return __a ^ __b;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veor_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return __a ^ __b;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veor_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return __a ^ __b;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veor_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return __a ^ __b;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veor_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return __a ^ __b;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veor_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return __a ^ __b;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veor_u64 (uint64x1_t __a, uint64x1_t __b)
+{
+  return __a ^ __b;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veorq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return __a ^ __b;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veorq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return __a ^ __b;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veorq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return __a ^ __b;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veorq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return __a ^ __b;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veorq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return __a ^ __b;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veorq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return __a ^ __b;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veorq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return __a ^ __b;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veorq_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return __a ^ __b;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbic_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return __a & ~__b;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbic_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return __a & ~__b;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbic_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return __a & ~__b;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbic_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return __a & ~__b;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbic_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return __a & ~__b;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbic_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return __a & ~__b;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbic_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return __a & ~__b;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbic_u64 (uint64x1_t __a, uint64x1_t __b)
+{
+  return __a & ~__b;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbicq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return __a & ~__b;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbicq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return __a & ~__b;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbicq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return __a & ~__b;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbicq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return __a & ~__b;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbicq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return __a & ~__b;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbicq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return __a & ~__b;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbicq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return __a & ~__b;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbicq_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return __a & ~__b;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorn_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return __a | ~__b;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorn_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return __a | ~__b;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorn_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return __a | ~__b;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorn_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return __a | ~__b;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorn_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return __a | ~__b;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorn_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return __a | ~__b;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorn_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return __a | ~__b;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vorn_u64 (uint64x1_t __a, uint64x1_t __b)
+{
+  return __a | ~__b;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vornq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return __a | ~__b;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vornq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return __a | ~__b;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vornq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return __a | ~__b;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vornq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return __a | ~__b;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vornq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return __a | ~__b;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vornq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return __a | ~__b;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vornq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return __a | ~__b;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vornq_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return __a | ~__b;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsub_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsub_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsub_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsub_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsub_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsub_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsub_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsub_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsub_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsub_u64 (uint64x1_t __a, uint64x1_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubq_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubl_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return (int16x8_t) __builtin_aarch64_ssublv8qi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubl_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return (int32x4_t) __builtin_aarch64_ssublv4hi (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubl_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return (int64x2_t) __builtin_aarch64_ssublv2si (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubl_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return (uint16x8_t) __builtin_aarch64_usublv8qi ((int8x8_t) __a,
+						   (int8x8_t) __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubl_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return (uint32x4_t) __builtin_aarch64_usublv4hi ((int16x4_t) __a,
+						   (int16x4_t) __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubl_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return (uint64x2_t) __builtin_aarch64_usublv2si ((int32x2_t) __a,
+						   (int32x2_t) __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubl_high_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return (int16x8_t) __builtin_aarch64_ssubl2v16qi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubl_high_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (int32x4_t) __builtin_aarch64_ssubl2v8hi (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubl_high_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (int64x2_t) __builtin_aarch64_ssubl2v4si (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubl_high_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return (uint16x8_t) __builtin_aarch64_usubl2v16qi ((int8x16_t) __a,
+						     (int8x16_t) __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubl_high_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return (uint32x4_t) __builtin_aarch64_usubl2v8hi ((int16x8_t) __a,
+						    (int16x8_t) __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubl_high_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return (uint64x2_t) __builtin_aarch64_usubl2v4si ((int32x4_t) __a,
+						    (int32x4_t) __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubw_s8 (int16x8_t __a, int8x8_t __b)
+{
+  return (int16x8_t) __builtin_aarch64_ssubwv8qi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubw_s16 (int32x4_t __a, int16x4_t __b)
+{
+  return (int32x4_t) __builtin_aarch64_ssubwv4hi (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubw_s32 (int64x2_t __a, int32x2_t __b)
+{
+  return (int64x2_t) __builtin_aarch64_ssubwv2si (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubw_u8 (uint16x8_t __a, uint8x8_t __b)
+{
+  return (uint16x8_t) __builtin_aarch64_usubwv8qi ((int16x8_t) __a,
+						   (int8x8_t) __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubw_u16 (uint32x4_t __a, uint16x4_t __b)
+{
+  return (uint32x4_t) __builtin_aarch64_usubwv4hi ((int32x4_t) __a,
+						   (int16x4_t) __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubw_u32 (uint64x2_t __a, uint32x2_t __b)
+{
+  return (uint64x2_t) __builtin_aarch64_usubwv2si ((int64x2_t) __a,
+						   (int32x2_t) __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubw_high_s8 (int16x8_t __a, int8x16_t __b)
+{
+  return (int16x8_t) __builtin_aarch64_ssubw2v16qi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubw_high_s16 (int32x4_t __a, int16x8_t __b)
+{
+  return (int32x4_t) __builtin_aarch64_ssubw2v8hi (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubw_high_s32 (int64x2_t __a, int32x4_t __b)
+{
+  return (int64x2_t) __builtin_aarch64_ssubw2v4si (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubw_high_u8 (uint16x8_t __a, uint8x16_t __b)
+{
+  return (uint16x8_t) __builtin_aarch64_usubw2v16qi ((int16x8_t) __a,
+						     (int8x16_t) __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubw_high_u16 (uint32x4_t __a, uint16x8_t __b)
+{
+  return (uint32x4_t) __builtin_aarch64_usubw2v8hi ((int32x4_t) __a,
+						    (int16x8_t) __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubw_high_u32 (uint64x2_t __a, uint32x4_t __b)
+{
+  return (uint64x2_t) __builtin_aarch64_usubw2v4si ((int64x2_t) __a,
+						    (int32x4_t) __b);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqadd_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return (int8x8_t) __builtin_aarch64_sqaddv8qi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqadd_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return (int16x4_t) __builtin_aarch64_sqaddv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqadd_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return (int32x2_t) __builtin_aarch64_sqaddv2si (__a, __b);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqadd_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return (int64x1_t) {__builtin_aarch64_sqadddi (__a[0], __b[0])};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqadd_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return __builtin_aarch64_uqaddv8qi_uuu (__a, __b);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhsub_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return (int8x8_t)__builtin_aarch64_shsubv8qi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhsub_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return (int16x4_t) __builtin_aarch64_shsubv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhsub_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return (int32x2_t) __builtin_aarch64_shsubv2si (__a, __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhsub_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return (uint8x8_t) __builtin_aarch64_uhsubv8qi ((int8x8_t) __a,
+						  (int8x8_t) __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhsub_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return (uint16x4_t) __builtin_aarch64_uhsubv4hi ((int16x4_t) __a,
+						   (int16x4_t) __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhsub_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return (uint32x2_t) __builtin_aarch64_uhsubv2si ((int32x2_t) __a,
+						   (int32x2_t) __b);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhsubq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return (int8x16_t) __builtin_aarch64_shsubv16qi (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhsubq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (int16x8_t) __builtin_aarch64_shsubv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhsubq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (int32x4_t) __builtin_aarch64_shsubv4si (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhsubq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return (uint8x16_t) __builtin_aarch64_uhsubv16qi ((int8x16_t) __a,
+						    (int8x16_t) __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhsubq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return (uint16x8_t) __builtin_aarch64_uhsubv8hi ((int16x8_t) __a,
+						   (int16x8_t) __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vhsubq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return (uint32x4_t) __builtin_aarch64_uhsubv4si ((int32x4_t) __a,
+						   (int32x4_t) __b);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubhn_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (int8x8_t) __builtin_aarch64_subhnv8hi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubhn_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (int16x4_t) __builtin_aarch64_subhnv4si (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubhn_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return (int32x2_t) __builtin_aarch64_subhnv2di (__a, __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubhn_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return (uint8x8_t) __builtin_aarch64_subhnv8hi ((int16x8_t) __a,
+						  (int16x8_t) __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubhn_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return (uint16x4_t) __builtin_aarch64_subhnv4si ((int32x4_t) __a,
+						   (int32x4_t) __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubhn_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return (uint32x2_t) __builtin_aarch64_subhnv2di ((int64x2_t) __a,
+						   (int64x2_t) __b);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsubhn_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (int8x8_t) __builtin_aarch64_rsubhnv8hi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsubhn_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (int16x4_t) __builtin_aarch64_rsubhnv4si (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsubhn_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return (int32x2_t) __builtin_aarch64_rsubhnv2di (__a, __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsubhn_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return (uint8x8_t) __builtin_aarch64_rsubhnv8hi ((int16x8_t) __a,
+						   (int16x8_t) __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsubhn_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return (uint16x4_t) __builtin_aarch64_rsubhnv4si ((int32x4_t) __a,
+						    (int32x4_t) __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsubhn_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return (uint32x2_t) __builtin_aarch64_rsubhnv2di ((int64x2_t) __a,
+						    (int64x2_t) __b);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsubhn_high_s16 (int8x8_t __a, int16x8_t __b, int16x8_t __c)
+{
+  return (int8x16_t) __builtin_aarch64_rsubhn2v8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsubhn_high_s32 (int16x4_t __a, int32x4_t __b, int32x4_t __c)
+{
+  return (int16x8_t) __builtin_aarch64_rsubhn2v4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsubhn_high_s64 (int32x2_t __a, int64x2_t __b, int64x2_t __c)
+{
+  return (int32x4_t) __builtin_aarch64_rsubhn2v2di (__a, __b, __c);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsubhn_high_u16 (uint8x8_t __a, uint16x8_t __b, uint16x8_t __c)
+{
+  return (uint8x16_t) __builtin_aarch64_rsubhn2v8hi ((int8x8_t) __a,
+						     (int16x8_t) __b,
+						     (int16x8_t) __c);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsubhn_high_u32 (uint16x4_t __a, uint32x4_t __b, uint32x4_t __c)
+{
+  return (uint16x8_t) __builtin_aarch64_rsubhn2v4si ((int16x4_t) __a,
+						     (int32x4_t) __b,
+						     (int32x4_t) __c);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsubhn_high_u64 (uint32x2_t __a, uint64x2_t __b, uint64x2_t __c)
+{
+  return (uint32x4_t) __builtin_aarch64_rsubhn2v2di ((int32x2_t) __a,
+						     (int64x2_t) __b,
+						     (int64x2_t) __c);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubhn_high_s16 (int8x8_t __a, int16x8_t __b, int16x8_t __c)
+{
+  return (int8x16_t) __builtin_aarch64_subhn2v8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubhn_high_s32 (int16x4_t __a, int32x4_t __b, int32x4_t __c)
+{
+  return (int16x8_t) __builtin_aarch64_subhn2v4si (__a, __b, __c);;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubhn_high_s64 (int32x2_t __a, int64x2_t __b, int64x2_t __c)
+{
+  return (int32x4_t) __builtin_aarch64_subhn2v2di (__a, __b, __c);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubhn_high_u16 (uint8x8_t __a, uint16x8_t __b, uint16x8_t __c)
+{
+  return (uint8x16_t) __builtin_aarch64_subhn2v8hi ((int8x8_t) __a,
+						    (int16x8_t) __b,
+						    (int16x8_t) __c);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubhn_high_u32 (uint16x4_t __a, uint32x4_t __b, uint32x4_t __c)
+{
+  return (uint16x8_t) __builtin_aarch64_subhn2v4si ((int16x4_t) __a,
+						    (int32x4_t) __b,
+						    (int32x4_t) __c);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubhn_high_u64 (uint32x2_t __a, uint64x2_t __b, uint64x2_t __c)
+{
+  return (uint32x4_t) __builtin_aarch64_subhn2v2di ((int32x2_t) __a,
+						    (int64x2_t) __b,
+						    (int64x2_t) __c);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqadd_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return __builtin_aarch64_uqaddv4hi_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqadd_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return __builtin_aarch64_uqaddv2si_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqadd_u64 (uint64x1_t __a, uint64x1_t __b)
+{
+  return (uint64x1_t) {__builtin_aarch64_uqadddi_uuu (__a[0], __b[0])};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqaddq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return (int8x16_t) __builtin_aarch64_sqaddv16qi (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqaddq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (int16x8_t) __builtin_aarch64_sqaddv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqaddq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (int32x4_t) __builtin_aarch64_sqaddv4si (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqaddq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return (int64x2_t) __builtin_aarch64_sqaddv2di (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqaddq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return __builtin_aarch64_uqaddv16qi_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqaddq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return __builtin_aarch64_uqaddv8hi_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqaddq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return __builtin_aarch64_uqaddv4si_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqaddq_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return __builtin_aarch64_uqaddv2di_uuu (__a, __b);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsub_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return (int8x8_t) __builtin_aarch64_sqsubv8qi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsub_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return (int16x4_t) __builtin_aarch64_sqsubv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsub_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return (int32x2_t) __builtin_aarch64_sqsubv2si (__a, __b);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsub_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return (int64x1_t) {__builtin_aarch64_sqsubdi (__a[0], __b[0])};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsub_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return __builtin_aarch64_uqsubv8qi_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsub_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return __builtin_aarch64_uqsubv4hi_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsub_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return __builtin_aarch64_uqsubv2si_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsub_u64 (uint64x1_t __a, uint64x1_t __b)
+{
+  return (uint64x1_t) {__builtin_aarch64_uqsubdi_uuu (__a[0], __b[0])};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsubq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return (int8x16_t) __builtin_aarch64_sqsubv16qi (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsubq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (int16x8_t) __builtin_aarch64_sqsubv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsubq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (int32x4_t) __builtin_aarch64_sqsubv4si (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsubq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return (int64x2_t) __builtin_aarch64_sqsubv2di (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsubq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return __builtin_aarch64_uqsubv16qi_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsubq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return __builtin_aarch64_uqsubv8hi_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsubq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return __builtin_aarch64_uqsubv4si_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsubq_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return __builtin_aarch64_uqsubv2di_uuu (__a, __b);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqneg_s8 (int8x8_t __a)
+{
+  return (int8x8_t) __builtin_aarch64_sqnegv8qi (__a);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqneg_s16 (int16x4_t __a)
+{
+  return (int16x4_t) __builtin_aarch64_sqnegv4hi (__a);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqneg_s32 (int32x2_t __a)
+{
+  return (int32x2_t) __builtin_aarch64_sqnegv2si (__a);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqneg_s64 (int64x1_t __a)
+{
+  return (int64x1_t) {__builtin_aarch64_sqnegdi (__a[0])};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqnegq_s8 (int8x16_t __a)
+{
+  return (int8x16_t) __builtin_aarch64_sqnegv16qi (__a);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqnegq_s16 (int16x8_t __a)
+{
+  return (int16x8_t) __builtin_aarch64_sqnegv8hi (__a);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqnegq_s32 (int32x4_t __a)
+{
+  return (int32x4_t) __builtin_aarch64_sqnegv4si (__a);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqabs_s8 (int8x8_t __a)
+{
+  return (int8x8_t) __builtin_aarch64_sqabsv8qi (__a);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqabs_s16 (int16x4_t __a)
+{
+  return (int16x4_t) __builtin_aarch64_sqabsv4hi (__a);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqabs_s32 (int32x2_t __a)
+{
+  return (int32x2_t) __builtin_aarch64_sqabsv2si (__a);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqabs_s64 (int64x1_t __a)
+{
+  return (int64x1_t) {__builtin_aarch64_sqabsdi (__a[0])};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqabsq_s8 (int8x16_t __a)
+{
+  return (int8x16_t) __builtin_aarch64_sqabsv16qi (__a);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqabsq_s16 (int16x8_t __a)
+{
+  return (int16x8_t) __builtin_aarch64_sqabsv8hi (__a);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqabsq_s32 (int32x4_t __a)
+{
+  return (int32x4_t) __builtin_aarch64_sqabsv4si (__a);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulh_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return (int16x4_t) __builtin_aarch64_sqdmulhv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulh_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return (int32x2_t) __builtin_aarch64_sqdmulhv2si (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulhq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (int16x8_t) __builtin_aarch64_sqdmulhv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulhq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (int32x4_t) __builtin_aarch64_sqdmulhv4si (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulh_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return (int16x4_t) __builtin_aarch64_sqrdmulhv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulh_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return (int32x2_t) __builtin_aarch64_sqrdmulhv2si (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulhq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (int16x8_t) __builtin_aarch64_sqrdmulhv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulhq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (int32x4_t) __builtin_aarch64_sqrdmulhv4si (__a, __b);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcreate_s8 (uint64_t __a)
+{
+  return (int8x8_t) __a;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcreate_s16 (uint64_t __a)
+{
+  return (int16x4_t) __a;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcreate_s32 (uint64_t __a)
+{
+  return (int32x2_t) __a;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcreate_s64 (uint64_t __a)
+{
+  return (int64x1_t) {__a};
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcreate_f16 (uint64_t __a)
+{
+  return (float16x4_t) __a;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcreate_f32 (uint64_t __a)
+{
+  return (float32x2_t) __a;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcreate_u8 (uint64_t __a)
+{
+  return (uint8x8_t) __a;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcreate_u16 (uint64_t __a)
+{
+  return (uint16x4_t) __a;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcreate_u32 (uint64_t __a)
+{
+  return (uint32x2_t) __a;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcreate_u64 (uint64_t __a)
+{
+  return (uint64x1_t) {__a};
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcreate_f64 (uint64_t __a)
+{
+  return (float64x1_t) __a;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcreate_p8 (uint64_t __a)
+{
+  return (poly8x8_t) __a;
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcreate_p16 (uint64_t __a)
+{
+  return (poly16x4_t) __a;
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcreate_p64 (uint64_t __a)
+{
+  return (poly64x1_t) __a;
+}
+
+/* vget_lane  */
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_lane_f16 (float16x4_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_lane_f32 (float32x2_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_lane_f64 (float64x1_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline poly8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_lane_p8 (poly8x8_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline poly16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_lane_p16 (poly16x4_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline poly64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_lane_p64 (poly64x1_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_lane_s8 (int8x8_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_lane_s16 (int16x4_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_lane_s32 (int32x2_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_lane_s64 (int64x1_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_lane_u8 (uint8x8_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_lane_u16 (uint16x4_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_lane_u32 (uint32x2_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_lane_u64 (uint64x1_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+/* vgetq_lane  */
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vgetq_lane_f16 (float16x8_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vgetq_lane_f32 (float32x4_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vgetq_lane_f64 (float64x2_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline poly8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vgetq_lane_p8 (poly8x16_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline poly16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vgetq_lane_p16 (poly16x8_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline poly64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vgetq_lane_p64 (poly64x2_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vgetq_lane_s8 (int8x16_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vgetq_lane_s16 (int16x8_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vgetq_lane_s32 (int32x4_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vgetq_lane_s64 (int64x2_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vgetq_lane_u8 (uint8x16_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vgetq_lane_u16 (uint16x8_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vgetq_lane_u32 (uint32x4_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vgetq_lane_u64 (uint64x2_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+/* vreinterpret  */
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p8_f16 (float16x4_t __a)
+{
+  return (poly8x8_t) __a;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p8_f64 (float64x1_t __a)
+{
+  return (poly8x8_t) __a;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p8_s8 (int8x8_t __a)
+{
+  return (poly8x8_t) __a;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p8_s16 (int16x4_t __a)
+{
+  return (poly8x8_t) __a;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p8_s32 (int32x2_t __a)
+{
+  return (poly8x8_t) __a;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p8_s64 (int64x1_t __a)
+{
+  return (poly8x8_t) __a;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p8_f32 (float32x2_t __a)
+{
+  return (poly8x8_t) __a;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p8_u8 (uint8x8_t __a)
+{
+  return (poly8x8_t) __a;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p8_u16 (uint16x4_t __a)
+{
+  return (poly8x8_t) __a;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p8_u32 (uint32x2_t __a)
+{
+  return (poly8x8_t) __a;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p8_u64 (uint64x1_t __a)
+{
+  return (poly8x8_t) __a;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p8_p16 (poly16x4_t __a)
+{
+  return (poly8x8_t) __a;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p8_p64 (poly64x1_t __a)
+{
+  return (poly8x8_t) __a;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p8_f64 (float64x2_t __a)
+{
+  return (poly8x16_t) __a;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p8_s8 (int8x16_t __a)
+{
+  return (poly8x16_t) __a;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p8_s16 (int16x8_t __a)
+{
+  return (poly8x16_t) __a;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p8_s32 (int32x4_t __a)
+{
+  return (poly8x16_t) __a;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p8_s64 (int64x2_t __a)
+{
+  return (poly8x16_t) __a;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p8_f16 (float16x8_t __a)
+{
+  return (poly8x16_t) __a;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p8_f32 (float32x4_t __a)
+{
+  return (poly8x16_t) __a;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p8_u8 (uint8x16_t __a)
+{
+  return (poly8x16_t) __a;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p8_u16 (uint16x8_t __a)
+{
+  return (poly8x16_t) __a;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p8_u32 (uint32x4_t __a)
+{
+  return (poly8x16_t) __a;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p8_u64 (uint64x2_t __a)
+{
+  return (poly8x16_t) __a;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p8_p16 (poly16x8_t __a)
+{
+  return (poly8x16_t) __a;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p8_p64 (poly64x2_t __a)
+{
+  return (poly8x16_t) __a;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p8_p128 (poly128_t __a)
+{
+  return (poly8x16_t)__a;
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p16_f16 (float16x4_t __a)
+{
+  return (poly16x4_t) __a;
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p16_f64 (float64x1_t __a)
+{
+  return (poly16x4_t) __a;
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p16_s8 (int8x8_t __a)
+{
+  return (poly16x4_t) __a;
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p16_s16 (int16x4_t __a)
+{
+  return (poly16x4_t) __a;
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p16_s32 (int32x2_t __a)
+{
+  return (poly16x4_t) __a;
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p16_s64 (int64x1_t __a)
+{
+  return (poly16x4_t) __a;
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p16_f32 (float32x2_t __a)
+{
+  return (poly16x4_t) __a;
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p16_u8 (uint8x8_t __a)
+{
+  return (poly16x4_t) __a;
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p16_u16 (uint16x4_t __a)
+{
+  return (poly16x4_t) __a;
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p16_u32 (uint32x2_t __a)
+{
+  return (poly16x4_t) __a;
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p16_u64 (uint64x1_t __a)
+{
+  return (poly16x4_t) __a;
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p16_p8 (poly8x8_t __a)
+{
+  return (poly16x4_t) __a;
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p16_p64 (poly64x1_t __a)
+{
+  return (poly16x4_t) __a;
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p16_f64 (float64x2_t __a)
+{
+  return (poly16x8_t) __a;
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p16_s8 (int8x16_t __a)
+{
+  return (poly16x8_t) __a;
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p16_s16 (int16x8_t __a)
+{
+  return (poly16x8_t) __a;
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p16_s32 (int32x4_t __a)
+{
+  return (poly16x8_t) __a;
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p16_s64 (int64x2_t __a)
+{
+  return (poly16x8_t) __a;
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p16_f16 (float16x8_t __a)
+{
+  return (poly16x8_t) __a;
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p16_f32 (float32x4_t __a)
+{
+  return (poly16x8_t) __a;
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p16_u8 (uint8x16_t __a)
+{
+  return (poly16x8_t) __a;
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p16_u16 (uint16x8_t __a)
+{
+  return (poly16x8_t) __a;
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p16_u32 (uint32x4_t __a)
+{
+  return (poly16x8_t) __a;
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p16_u64 (uint64x2_t __a)
+{
+  return (poly16x8_t) __a;
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p16_p8 (poly8x16_t __a)
+{
+  return (poly16x8_t) __a;
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p16_p64 (poly64x2_t __a)
+{
+  return (poly16x8_t) __a;
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p16_p128 (poly128_t __a)
+{
+  return (poly16x8_t)__a;
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p64_f16 (float16x4_t __a)
+{
+  return (poly64x1_t) __a;
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p64_f64 (float64x1_t __a)
+{
+  return (poly64x1_t) __a;
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p64_s8 (int8x8_t __a)
+{
+  return (poly64x1_t) __a;
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p64_s16 (int16x4_t __a)
+{
+  return (poly64x1_t) __a;
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p64_s32 (int32x2_t __a)
+{
+  return (poly64x1_t) __a;
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p64_s64 (int64x1_t __a)
+{
+  return (poly64x1_t) __a;
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p64_f32 (float32x2_t __a)
+{
+  return (poly64x1_t) __a;
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p64_u8 (uint8x8_t __a)
+{
+  return (poly64x1_t) __a;
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p64_u16 (uint16x4_t __a)
+{
+  return (poly64x1_t) __a;
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p64_u32 (uint32x2_t __a)
+{
+  return (poly64x1_t) __a;
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p64_u64 (uint64x1_t __a)
+{
+  return (poly64x1_t) __a;
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p64_p8 (poly8x8_t __a)
+{
+  return (poly64x1_t) __a;
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_p64_p16 (poly16x4_t __a)
+{
+  return (poly64x1_t)__a;
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p64_f64 (float64x2_t __a)
+{
+  return (poly64x2_t) __a;
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p64_s8 (int8x16_t __a)
+{
+  return (poly64x2_t) __a;
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p64_s16 (int16x8_t __a)
+{
+  return (poly64x2_t) __a;
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p64_s32 (int32x4_t __a)
+{
+  return (poly64x2_t) __a;
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p64_s64 (int64x2_t __a)
+{
+  return (poly64x2_t) __a;
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p64_f16 (float16x8_t __a)
+{
+  return (poly64x2_t) __a;
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p64_f32 (float32x4_t __a)
+{
+  return (poly64x2_t) __a;
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p64_p128 (poly128_t __a)
+{
+  return (poly64x2_t)__a;
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p64_u8 (uint8x16_t __a)
+{
+  return (poly64x2_t) __a;
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p64_u16 (uint16x8_t __a)
+{
+  return (poly64x2_t) __a;
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p64_p16 (poly16x8_t __a)
+{
+  return (poly64x2_t)__a;
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p64_u32 (uint32x4_t __a)
+{
+  return (poly64x2_t) __a;
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p64_u64 (uint64x2_t __a)
+{
+  return (poly64x2_t) __a;
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p64_p8 (poly8x16_t __a)
+{
+  return (poly64x2_t) __a;
+}
+
+__extension__ extern __inline poly128_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p128_p8 (poly8x16_t __a)
+{
+  return (poly128_t)__a;
+}
+
+__extension__ extern __inline poly128_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p128_p16 (poly16x8_t __a)
+{
+  return (poly128_t)__a;
+}
+
+__extension__ extern __inline poly128_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p128_f16 (float16x8_t __a)
+{
+  return (poly128_t) __a;
+}
+
+__extension__ extern __inline poly128_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p128_f32 (float32x4_t __a)
+{
+  return (poly128_t)__a;
+}
+
+__extension__ extern __inline poly128_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p128_p64 (poly64x2_t __a)
+{
+  return (poly128_t)__a;
+}
+
+__extension__ extern __inline poly128_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p128_s64 (int64x2_t __a)
+{
+  return (poly128_t)__a;
+}
+
+__extension__ extern __inline poly128_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p128_u64 (uint64x2_t __a)
+{
+  return (poly128_t)__a;
+}
+
+__extension__ extern __inline poly128_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p128_s8 (int8x16_t __a)
+{
+  return (poly128_t)__a;
+}
+
+__extension__ extern __inline poly128_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p128_s16 (int16x8_t __a)
+{
+  return (poly128_t)__a;
+}
+
+__extension__ extern __inline poly128_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p128_s32 (int32x4_t __a)
+{
+  return (poly128_t)__a;
+}
+
+__extension__ extern __inline poly128_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p128_u8 (uint8x16_t __a)
+{
+  return (poly128_t)__a;
+}
+
+__extension__ extern __inline poly128_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p128_u16 (uint16x8_t __a)
+{
+  return (poly128_t)__a;
+}
+
+__extension__ extern __inline poly128_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_p128_u32 (uint32x4_t __a)
+{
+  return (poly128_t)__a;
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f16_f64 (float64x1_t __a)
+{
+  return (float16x4_t) __a;
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f16_s8 (int8x8_t __a)
+{
+  return (float16x4_t) __a;
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f16_s16 (int16x4_t __a)
+{
+  return (float16x4_t) __a;
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f16_s32 (int32x2_t __a)
+{
+  return (float16x4_t) __a;
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f16_s64 (int64x1_t __a)
+{
+  return (float16x4_t) __a;
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f16_f32 (float32x2_t __a)
+{
+  return (float16x4_t) __a;
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f16_u8 (uint8x8_t __a)
+{
+  return (float16x4_t) __a;
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f16_u16 (uint16x4_t __a)
+{
+  return (float16x4_t) __a;
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f16_u32 (uint32x2_t __a)
+{
+  return (float16x4_t) __a;
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f16_u64 (uint64x1_t __a)
+{
+  return (float16x4_t) __a;
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f16_p8 (poly8x8_t __a)
+{
+  return (float16x4_t) __a;
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f16_p16 (poly16x4_t __a)
+{
+  return (float16x4_t) __a;
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f16_p64 (poly64x1_t __a)
+{
+  return (float16x4_t) __a;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f16_f64 (float64x2_t __a)
+{
+  return (float16x8_t) __a;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f16_s8 (int8x16_t __a)
+{
+  return (float16x8_t) __a;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f16_s16 (int16x8_t __a)
+{
+  return (float16x8_t) __a;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f16_s32 (int32x4_t __a)
+{
+  return (float16x8_t) __a;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f16_s64 (int64x2_t __a)
+{
+  return (float16x8_t) __a;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f16_f32 (float32x4_t __a)
+{
+  return (float16x8_t) __a;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f16_u8 (uint8x16_t __a)
+{
+  return (float16x8_t) __a;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f16_u16 (uint16x8_t __a)
+{
+  return (float16x8_t) __a;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f16_u32 (uint32x4_t __a)
+{
+  return (float16x8_t) __a;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f16_u64 (uint64x2_t __a)
+{
+  return (float16x8_t) __a;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f16_p8 (poly8x16_t __a)
+{
+  return (float16x8_t) __a;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f16_p128 (poly128_t __a)
+{
+  return (float16x8_t) __a;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f16_p16 (poly16x8_t __a)
+{
+  return (float16x8_t) __a;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f16_p64 (poly64x2_t __a)
+{
+  return (float16x8_t) __a;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f32_f16 (float16x4_t __a)
+{
+  return (float32x2_t) __a;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f32_f64 (float64x1_t __a)
+{
+  return (float32x2_t) __a;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f32_s8 (int8x8_t __a)
+{
+  return (float32x2_t) __a;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f32_s16 (int16x4_t __a)
+{
+  return (float32x2_t) __a;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f32_s32 (int32x2_t __a)
+{
+  return (float32x2_t) __a;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f32_s64 (int64x1_t __a)
+{
+  return (float32x2_t) __a;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f32_u8 (uint8x8_t __a)
+{
+  return (float32x2_t) __a;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f32_u16 (uint16x4_t __a)
+{
+  return (float32x2_t) __a;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f32_u32 (uint32x2_t __a)
+{
+  return (float32x2_t) __a;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f32_u64 (uint64x1_t __a)
+{
+  return (float32x2_t) __a;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f32_p8 (poly8x8_t __a)
+{
+  return (float32x2_t) __a;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f32_p16 (poly16x4_t __a)
+{
+  return (float32x2_t) __a;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f32_p64 (poly64x1_t __a)
+{
+  return (float32x2_t) __a;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f32_f16 (float16x8_t __a)
+{
+  return (float32x4_t) __a;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f32_f64 (float64x2_t __a)
+{
+  return (float32x4_t) __a;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f32_s8 (int8x16_t __a)
+{
+  return (float32x4_t) __a;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f32_s16 (int16x8_t __a)
+{
+  return (float32x4_t) __a;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f32_s32 (int32x4_t __a)
+{
+  return (float32x4_t) __a;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f32_s64 (int64x2_t __a)
+{
+  return (float32x4_t) __a;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f32_u8 (uint8x16_t __a)
+{
+  return (float32x4_t) __a;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f32_u16 (uint16x8_t __a)
+{
+  return (float32x4_t) __a;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f32_u32 (uint32x4_t __a)
+{
+  return (float32x4_t) __a;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f32_u64 (uint64x2_t __a)
+{
+  return (float32x4_t) __a;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f32_p8 (poly8x16_t __a)
+{
+  return (float32x4_t) __a;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f32_p16 (poly16x8_t __a)
+{
+  return (float32x4_t) __a;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f32_p64 (poly64x2_t __a)
+{
+  return (float32x4_t) __a;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f32_p128 (poly128_t __a)
+{
+  return (float32x4_t)__a;
+}
+
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f64_f16 (float16x4_t __a)
+{
+  return (float64x1_t) __a;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f64_f32 (float32x2_t __a)
+{
+  return (float64x1_t) __a;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f64_p8 (poly8x8_t __a)
+{
+  return (float64x1_t) __a;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f64_p16 (poly16x4_t __a)
+{
+  return (float64x1_t) __a;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f64_p64 (poly64x1_t __a)
+{
+  return (float64x1_t) __a;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f64_s8 (int8x8_t __a)
+{
+  return (float64x1_t) __a;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f64_s16 (int16x4_t __a)
+{
+  return (float64x1_t) __a;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f64_s32 (int32x2_t __a)
+{
+  return (float64x1_t) __a;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f64_s64 (int64x1_t __a)
+{
+  return (float64x1_t) __a;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f64_u8 (uint8x8_t __a)
+{
+  return (float64x1_t) __a;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f64_u16 (uint16x4_t __a)
+{
+  return (float64x1_t) __a;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f64_u32 (uint32x2_t __a)
+{
+  return (float64x1_t) __a;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_f64_u64 (uint64x1_t __a)
+{
+  return (float64x1_t) __a;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f64_f16 (float16x8_t __a)
+{
+  return (float64x2_t) __a;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f64_f32 (float32x4_t __a)
+{
+  return (float64x2_t) __a;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f64_p8 (poly8x16_t __a)
+{
+  return (float64x2_t) __a;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f64_p16 (poly16x8_t __a)
+{
+  return (float64x2_t) __a;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f64_p64 (poly64x2_t __a)
+{
+  return (float64x2_t) __a;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f64_s8 (int8x16_t __a)
+{
+  return (float64x2_t) __a;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f64_s16 (int16x8_t __a)
+{
+  return (float64x2_t) __a;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f64_s32 (int32x4_t __a)
+{
+  return (float64x2_t) __a;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f64_s64 (int64x2_t __a)
+{
+  return (float64x2_t) __a;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f64_u8 (uint8x16_t __a)
+{
+  return (float64x2_t) __a;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f64_u16 (uint16x8_t __a)
+{
+  return (float64x2_t) __a;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f64_u32 (uint32x4_t __a)
+{
+  return (float64x2_t) __a;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_f64_u64 (uint64x2_t __a)
+{
+  return (float64x2_t) __a;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s64_f16 (float16x4_t __a)
+{
+  return (int64x1_t) __a;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s64_f64 (float64x1_t __a)
+{
+  return (int64x1_t) __a;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s64_s8 (int8x8_t __a)
+{
+  return (int64x1_t) __a;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s64_s16 (int16x4_t __a)
+{
+  return (int64x1_t) __a;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s64_s32 (int32x2_t __a)
+{
+  return (int64x1_t) __a;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s64_f32 (float32x2_t __a)
+{
+  return (int64x1_t) __a;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s64_u8 (uint8x8_t __a)
+{
+  return (int64x1_t) __a;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s64_u16 (uint16x4_t __a)
+{
+  return (int64x1_t) __a;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s64_u32 (uint32x2_t __a)
+{
+  return (int64x1_t) __a;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s64_u64 (uint64x1_t __a)
+{
+  return (int64x1_t) __a;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s64_p8 (poly8x8_t __a)
+{
+  return (int64x1_t) __a;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s64_p16 (poly16x4_t __a)
+{
+  return (int64x1_t) __a;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s64_p64 (poly64x1_t __a)
+{
+  return (int64x1_t) __a;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s64_f64 (float64x2_t __a)
+{
+  return (int64x2_t) __a;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s64_s8 (int8x16_t __a)
+{
+  return (int64x2_t) __a;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s64_s16 (int16x8_t __a)
+{
+  return (int64x2_t) __a;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s64_s32 (int32x4_t __a)
+{
+  return (int64x2_t) __a;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s64_f16 (float16x8_t __a)
+{
+  return (int64x2_t) __a;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s64_f32 (float32x4_t __a)
+{
+  return (int64x2_t) __a;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s64_u8 (uint8x16_t __a)
+{
+  return (int64x2_t) __a;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s64_u16 (uint16x8_t __a)
+{
+  return (int64x2_t) __a;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s64_u32 (uint32x4_t __a)
+{
+  return (int64x2_t) __a;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s64_u64 (uint64x2_t __a)
+{
+  return (int64x2_t) __a;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s64_p8 (poly8x16_t __a)
+{
+  return (int64x2_t) __a;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s64_p16 (poly16x8_t __a)
+{
+  return (int64x2_t) __a;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s64_p64 (poly64x2_t __a)
+{
+  return (int64x2_t) __a;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s64_p128 (poly128_t __a)
+{
+  return (int64x2_t)__a;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u64_f16 (float16x4_t __a)
+{
+  return (uint64x1_t) __a;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u64_f64 (float64x1_t __a)
+{
+  return (uint64x1_t) __a;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u64_s8 (int8x8_t __a)
+{
+  return (uint64x1_t) __a;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u64_s16 (int16x4_t __a)
+{
+  return (uint64x1_t) __a;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u64_s32 (int32x2_t __a)
+{
+  return (uint64x1_t) __a;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u64_s64 (int64x1_t __a)
+{
+  return (uint64x1_t) __a;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u64_f32 (float32x2_t __a)
+{
+  return (uint64x1_t) __a;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u64_u8 (uint8x8_t __a)
+{
+  return (uint64x1_t) __a;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u64_u16 (uint16x4_t __a)
+{
+  return (uint64x1_t) __a;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u64_u32 (uint32x2_t __a)
+{
+  return (uint64x1_t) __a;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u64_p8 (poly8x8_t __a)
+{
+  return (uint64x1_t) __a;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u64_p16 (poly16x4_t __a)
+{
+  return (uint64x1_t) __a;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u64_p64 (poly64x1_t __a)
+{
+  return (uint64x1_t) __a;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u64_f64 (float64x2_t __a)
+{
+  return (uint64x2_t) __a;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u64_s8 (int8x16_t __a)
+{
+  return (uint64x2_t) __a;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u64_s16 (int16x8_t __a)
+{
+  return (uint64x2_t) __a;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u64_s32 (int32x4_t __a)
+{
+  return (uint64x2_t) __a;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u64_s64 (int64x2_t __a)
+{
+  return (uint64x2_t) __a;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u64_f16 (float16x8_t __a)
+{
+  return (uint64x2_t) __a;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u64_f32 (float32x4_t __a)
+{
+  return (uint64x2_t) __a;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u64_u8 (uint8x16_t __a)
+{
+  return (uint64x2_t) __a;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u64_u16 (uint16x8_t __a)
+{
+  return (uint64x2_t) __a;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u64_u32 (uint32x4_t __a)
+{
+  return (uint64x2_t) __a;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u64_p8 (poly8x16_t __a)
+{
+  return (uint64x2_t) __a;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u64_p16 (poly16x8_t __a)
+{
+  return (uint64x2_t) __a;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u64_p64 (poly64x2_t __a)
+{
+  return (uint64x2_t) __a;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u64_p128 (poly128_t __a)
+{
+  return (uint64x2_t)__a;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s8_f16 (float16x4_t __a)
+{
+  return (int8x8_t) __a;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s8_f64 (float64x1_t __a)
+{
+  return (int8x8_t) __a;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s8_s16 (int16x4_t __a)
+{
+  return (int8x8_t) __a;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s8_s32 (int32x2_t __a)
+{
+  return (int8x8_t) __a;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s8_s64 (int64x1_t __a)
+{
+  return (int8x8_t) __a;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s8_f32 (float32x2_t __a)
+{
+  return (int8x8_t) __a;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s8_u8 (uint8x8_t __a)
+{
+  return (int8x8_t) __a;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s8_u16 (uint16x4_t __a)
+{
+  return (int8x8_t) __a;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s8_u32 (uint32x2_t __a)
+{
+  return (int8x8_t) __a;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s8_u64 (uint64x1_t __a)
+{
+  return (int8x8_t) __a;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s8_p8 (poly8x8_t __a)
+{
+  return (int8x8_t) __a;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s8_p16 (poly16x4_t __a)
+{
+  return (int8x8_t) __a;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s8_p64 (poly64x1_t __a)
+{
+  return (int8x8_t) __a;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s8_f64 (float64x2_t __a)
+{
+  return (int8x16_t) __a;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s8_s16 (int16x8_t __a)
+{
+  return (int8x16_t) __a;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s8_s32 (int32x4_t __a)
+{
+  return (int8x16_t) __a;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s8_s64 (int64x2_t __a)
+{
+  return (int8x16_t) __a;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s8_f16 (float16x8_t __a)
+{
+  return (int8x16_t) __a;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s8_f32 (float32x4_t __a)
+{
+  return (int8x16_t) __a;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s8_u8 (uint8x16_t __a)
+{
+  return (int8x16_t) __a;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s8_u16 (uint16x8_t __a)
+{
+  return (int8x16_t) __a;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s8_u32 (uint32x4_t __a)
+{
+  return (int8x16_t) __a;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s8_u64 (uint64x2_t __a)
+{
+  return (int8x16_t) __a;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s8_p8 (poly8x16_t __a)
+{
+  return (int8x16_t) __a;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s8_p16 (poly16x8_t __a)
+{
+  return (int8x16_t) __a;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s8_p64 (poly64x2_t __a)
+{
+  return (int8x16_t) __a;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s8_p128 (poly128_t __a)
+{
+  return (int8x16_t)__a;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s16_f16 (float16x4_t __a)
+{
+  return (int16x4_t) __a;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s16_f64 (float64x1_t __a)
+{
+  return (int16x4_t) __a;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s16_s8 (int8x8_t __a)
+{
+  return (int16x4_t) __a;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s16_s32 (int32x2_t __a)
+{
+  return (int16x4_t) __a;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s16_s64 (int64x1_t __a)
+{
+  return (int16x4_t) __a;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s16_f32 (float32x2_t __a)
+{
+  return (int16x4_t) __a;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s16_u8 (uint8x8_t __a)
+{
+  return (int16x4_t) __a;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s16_u16 (uint16x4_t __a)
+{
+  return (int16x4_t) __a;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s16_u32 (uint32x2_t __a)
+{
+  return (int16x4_t) __a;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s16_u64 (uint64x1_t __a)
+{
+  return (int16x4_t) __a;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s16_p8 (poly8x8_t __a)
+{
+  return (int16x4_t) __a;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s16_p16 (poly16x4_t __a)
+{
+  return (int16x4_t) __a;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s16_p64 (poly64x1_t __a)
+{
+  return (int16x4_t) __a;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s16_f64 (float64x2_t __a)
+{
+  return (int16x8_t) __a;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s16_s8 (int8x16_t __a)
+{
+  return (int16x8_t) __a;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s16_s32 (int32x4_t __a)
+{
+  return (int16x8_t) __a;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s16_s64 (int64x2_t __a)
+{
+  return (int16x8_t) __a;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s16_f16 (float16x8_t __a)
+{
+  return (int16x8_t) __a;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s16_f32 (float32x4_t __a)
+{
+  return (int16x8_t) __a;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s16_u8 (uint8x16_t __a)
+{
+  return (int16x8_t) __a;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s16_u16 (uint16x8_t __a)
+{
+  return (int16x8_t) __a;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s16_u32 (uint32x4_t __a)
+{
+  return (int16x8_t) __a;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s16_u64 (uint64x2_t __a)
+{
+  return (int16x8_t) __a;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s16_p8 (poly8x16_t __a)
+{
+  return (int16x8_t) __a;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s16_p16 (poly16x8_t __a)
+{
+  return (int16x8_t) __a;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s16_p64 (poly64x2_t __a)
+{
+  return (int16x8_t) __a;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s16_p128 (poly128_t __a)
+{
+  return (int16x8_t)__a;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s32_f16 (float16x4_t __a)
+{
+  return (int32x2_t) __a;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s32_f64 (float64x1_t __a)
+{
+  return (int32x2_t) __a;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s32_s8 (int8x8_t __a)
+{
+  return (int32x2_t) __a;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s32_s16 (int16x4_t __a)
+{
+  return (int32x2_t) __a;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s32_s64 (int64x1_t __a)
+{
+  return (int32x2_t) __a;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s32_f32 (float32x2_t __a)
+{
+  return (int32x2_t) __a;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s32_u8 (uint8x8_t __a)
+{
+  return (int32x2_t) __a;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s32_u16 (uint16x4_t __a)
+{
+  return (int32x2_t) __a;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s32_u32 (uint32x2_t __a)
+{
+  return (int32x2_t) __a;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s32_u64 (uint64x1_t __a)
+{
+  return (int32x2_t) __a;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s32_p8 (poly8x8_t __a)
+{
+  return (int32x2_t) __a;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s32_p16 (poly16x4_t __a)
+{
+  return (int32x2_t) __a;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_s32_p64 (poly64x1_t __a)
+{
+  return (int32x2_t) __a;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s32_f64 (float64x2_t __a)
+{
+  return (int32x4_t) __a;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s32_s8 (int8x16_t __a)
+{
+  return (int32x4_t) __a;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s32_s16 (int16x8_t __a)
+{
+  return (int32x4_t) __a;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s32_s64 (int64x2_t __a)
+{
+  return (int32x4_t) __a;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s32_f16 (float16x8_t __a)
+{
+  return (int32x4_t) __a;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s32_f32 (float32x4_t __a)
+{
+  return (int32x4_t) __a;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s32_u8 (uint8x16_t __a)
+{
+  return (int32x4_t) __a;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s32_u16 (uint16x8_t __a)
+{
+  return (int32x4_t) __a;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s32_u32 (uint32x4_t __a)
+{
+  return (int32x4_t) __a;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s32_u64 (uint64x2_t __a)
+{
+  return (int32x4_t) __a;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s32_p8 (poly8x16_t __a)
+{
+  return (int32x4_t) __a;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s32_p16 (poly16x8_t __a)
+{
+  return (int32x4_t) __a;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s32_p64 (poly64x2_t __a)
+{
+  return (int32x4_t) __a;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_s32_p128 (poly128_t __a)
+{
+  return (int32x4_t)__a;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u8_f16 (float16x4_t __a)
+{
+  return (uint8x8_t) __a;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u8_f64 (float64x1_t __a)
+{
+  return (uint8x8_t) __a;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u8_s8 (int8x8_t __a)
+{
+  return (uint8x8_t) __a;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u8_s16 (int16x4_t __a)
+{
+  return (uint8x8_t) __a;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u8_s32 (int32x2_t __a)
+{
+  return (uint8x8_t) __a;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u8_s64 (int64x1_t __a)
+{
+  return (uint8x8_t) __a;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u8_f32 (float32x2_t __a)
+{
+  return (uint8x8_t) __a;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u8_u16 (uint16x4_t __a)
+{
+  return (uint8x8_t) __a;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u8_u32 (uint32x2_t __a)
+{
+  return (uint8x8_t) __a;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u8_u64 (uint64x1_t __a)
+{
+  return (uint8x8_t) __a;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u8_p8 (poly8x8_t __a)
+{
+  return (uint8x8_t) __a;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u8_p16 (poly16x4_t __a)
+{
+  return (uint8x8_t) __a;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u8_p64 (poly64x1_t __a)
+{
+  return (uint8x8_t) __a;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u8_f64 (float64x2_t __a)
+{
+  return (uint8x16_t) __a;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u8_s8 (int8x16_t __a)
+{
+  return (uint8x16_t) __a;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u8_s16 (int16x8_t __a)
+{
+  return (uint8x16_t) __a;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u8_s32 (int32x4_t __a)
+{
+  return (uint8x16_t) __a;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u8_s64 (int64x2_t __a)
+{
+  return (uint8x16_t) __a;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u8_f16 (float16x8_t __a)
+{
+  return (uint8x16_t) __a;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u8_f32 (float32x4_t __a)
+{
+  return (uint8x16_t) __a;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u8_u16 (uint16x8_t __a)
+{
+  return (uint8x16_t) __a;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u8_u32 (uint32x4_t __a)
+{
+  return (uint8x16_t) __a;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u8_u64 (uint64x2_t __a)
+{
+  return (uint8x16_t) __a;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u8_p8 (poly8x16_t __a)
+{
+  return (uint8x16_t) __a;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u8_p16 (poly16x8_t __a)
+{
+  return (uint8x16_t) __a;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u8_p64 (poly64x2_t __a)
+{
+  return (uint8x16_t) __a;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u8_p128 (poly128_t __a)
+{
+  return (uint8x16_t)__a;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u16_f16 (float16x4_t __a)
+{
+  return (uint16x4_t) __a;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u16_f64 (float64x1_t __a)
+{
+  return (uint16x4_t) __a;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u16_s8 (int8x8_t __a)
+{
+  return (uint16x4_t) __a;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u16_s16 (int16x4_t __a)
+{
+  return (uint16x4_t) __a;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u16_s32 (int32x2_t __a)
+{
+  return (uint16x4_t) __a;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u16_s64 (int64x1_t __a)
+{
+  return (uint16x4_t) __a;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u16_f32 (float32x2_t __a)
+{
+  return (uint16x4_t) __a;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u16_u8 (uint8x8_t __a)
+{
+  return (uint16x4_t) __a;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u16_u32 (uint32x2_t __a)
+{
+  return (uint16x4_t) __a;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u16_u64 (uint64x1_t __a)
+{
+  return (uint16x4_t) __a;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u16_p8 (poly8x8_t __a)
+{
+  return (uint16x4_t) __a;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u16_p16 (poly16x4_t __a)
+{
+  return (uint16x4_t) __a;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u16_p64 (poly64x1_t __a)
+{
+  return (uint16x4_t) __a;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u16_f64 (float64x2_t __a)
+{
+  return (uint16x8_t) __a;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u16_s8 (int8x16_t __a)
+{
+  return (uint16x8_t) __a;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u16_s16 (int16x8_t __a)
+{
+  return (uint16x8_t) __a;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u16_s32 (int32x4_t __a)
+{
+  return (uint16x8_t) __a;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u16_s64 (int64x2_t __a)
+{
+  return (uint16x8_t) __a;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u16_f16 (float16x8_t __a)
+{
+  return (uint16x8_t) __a;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u16_f32 (float32x4_t __a)
+{
+  return (uint16x8_t) __a;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u16_u8 (uint8x16_t __a)
+{
+  return (uint16x8_t) __a;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u16_u32 (uint32x4_t __a)
+{
+  return (uint16x8_t) __a;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u16_u64 (uint64x2_t __a)
+{
+  return (uint16x8_t) __a;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u16_p8 (poly8x16_t __a)
+{
+  return (uint16x8_t) __a;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u16_p16 (poly16x8_t __a)
+{
+  return (uint16x8_t) __a;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u16_p64 (poly64x2_t __a)
+{
+  return (uint16x8_t) __a;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u16_p128 (poly128_t __a)
+{
+  return (uint16x8_t)__a;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u32_f16 (float16x4_t __a)
+{
+  return (uint32x2_t) __a;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u32_f64 (float64x1_t __a)
+{
+  return (uint32x2_t) __a;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u32_s8 (int8x8_t __a)
+{
+  return (uint32x2_t) __a;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u32_s16 (int16x4_t __a)
+{
+  return (uint32x2_t) __a;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u32_s32 (int32x2_t __a)
+{
+  return (uint32x2_t) __a;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u32_s64 (int64x1_t __a)
+{
+  return (uint32x2_t) __a;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u32_f32 (float32x2_t __a)
+{
+  return (uint32x2_t) __a;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u32_u8 (uint8x8_t __a)
+{
+  return (uint32x2_t) __a;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u32_u16 (uint16x4_t __a)
+{
+  return (uint32x2_t) __a;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u32_u64 (uint64x1_t __a)
+{
+  return (uint32x2_t) __a;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u32_p8 (poly8x8_t __a)
+{
+  return (uint32x2_t) __a;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u32_p16 (poly16x4_t __a)
+{
+  return (uint32x2_t) __a;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpret_u32_p64 (poly64x1_t __a)
+{
+  return (uint32x2_t) __a;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u32_f64 (float64x2_t __a)
+{
+  return (uint32x4_t) __a;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u32_s8 (int8x16_t __a)
+{
+  return (uint32x4_t) __a;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u32_s16 (int16x8_t __a)
+{
+  return (uint32x4_t) __a;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u32_s32 (int32x4_t __a)
+{
+  return (uint32x4_t) __a;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u32_s64 (int64x2_t __a)
+{
+  return (uint32x4_t) __a;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u32_f16 (float16x8_t __a)
+{
+  return (uint32x4_t) __a;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u32_f32 (float32x4_t __a)
+{
+  return (uint32x4_t) __a;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u32_u8 (uint8x16_t __a)
+{
+  return (uint32x4_t) __a;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u32_u16 (uint16x8_t __a)
+{
+  return (uint32x4_t) __a;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u32_u64 (uint64x2_t __a)
+{
+  return (uint32x4_t) __a;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u32_p8 (poly8x16_t __a)
+{
+  return (uint32x4_t) __a;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u32_p16 (poly16x8_t __a)
+{
+  return (uint32x4_t) __a;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u32_p64 (poly64x2_t __a)
+{
+  return (uint32x4_t) __a;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
+vreinterpretq_u32_p128 (poly128_t __a)
+{
+  return (uint32x4_t)__a;
+}
+
+/* vset_lane  */
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vset_lane_f16 (float16_t __elem, float16x4_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vset_lane_f32 (float32_t __elem, float32x2_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vset_lane_f64 (float64_t __elem, float64x1_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vset_lane_p8 (poly8_t __elem, poly8x8_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vset_lane_p16 (poly16_t __elem, poly16x4_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vset_lane_p64 (poly64_t __elem, poly64x1_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vset_lane_s8 (int8_t __elem, int8x8_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vset_lane_s16 (int16_t __elem, int16x4_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vset_lane_s32 (int32_t __elem, int32x2_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vset_lane_s64 (int64_t __elem, int64x1_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vset_lane_u8 (uint8_t __elem, uint8x8_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vset_lane_u16 (uint16_t __elem, uint16x4_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vset_lane_u32 (uint32_t __elem, uint32x2_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vset_lane_u64 (uint64_t __elem, uint64x1_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+/* vsetq_lane  */
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsetq_lane_f16 (float16_t __elem, float16x8_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsetq_lane_f32 (float32_t __elem, float32x4_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsetq_lane_f64 (float64_t __elem, float64x2_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsetq_lane_p8 (poly8_t __elem, poly8x16_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsetq_lane_p16 (poly16_t __elem, poly16x8_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsetq_lane_p64 (poly64_t __elem, poly64x2_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsetq_lane_s8 (int8_t __elem, int8x16_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsetq_lane_s16 (int16_t __elem, int16x8_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsetq_lane_s32 (int32_t __elem, int32x4_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsetq_lane_s64 (int64_t __elem, int64x2_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsetq_lane_u8 (uint8_t __elem, uint8x16_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsetq_lane_u16 (uint16_t __elem, uint16x8_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsetq_lane_u32 (uint32_t __elem, uint32x4_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsetq_lane_u64 (uint64_t __elem, uint64x2_t __vec, const int __index)
+{
+  return __aarch64_vset_lane_any (__elem, __vec, __index);
+}
+
+#define __GET_LOW(__TYPE) \
+  uint64x2_t tmp = vreinterpretq_u64_##__TYPE (__a);  \
+  uint64x1_t lo = vcreate_u64 (vgetq_lane_u64 (tmp, 0));  \
+  return vreinterpret_##__TYPE##_u64 (lo);
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_low_f16 (float16x8_t __a)
+{
+  __GET_LOW (f16);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_low_f32 (float32x4_t __a)
+{
+  __GET_LOW (f32);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_low_f64 (float64x2_t __a)
+{
+  return (float64x1_t) {vgetq_lane_f64 (__a, 0)};
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_low_p8 (poly8x16_t __a)
+{
+  __GET_LOW (p8);
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_low_p16 (poly16x8_t __a)
+{
+  __GET_LOW (p16);
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_low_p64 (poly64x2_t __a)
+{
+  __GET_LOW (p64);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_low_s8 (int8x16_t __a)
+{
+  __GET_LOW (s8);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_low_s16 (int16x8_t __a)
+{
+  __GET_LOW (s16);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_low_s32 (int32x4_t __a)
+{
+  __GET_LOW (s32);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_low_s64 (int64x2_t __a)
+{
+  __GET_LOW (s64);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_low_u8 (uint8x16_t __a)
+{
+  __GET_LOW (u8);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_low_u16 (uint16x8_t __a)
+{
+  __GET_LOW (u16);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_low_u32 (uint32x4_t __a)
+{
+  __GET_LOW (u32);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_low_u64 (uint64x2_t __a)
+{
+  return vcreate_u64 (vgetq_lane_u64 (__a, 0));
+}
+
+#undef __GET_LOW
+
+#define __GET_HIGH(__TYPE)					\
+  uint64x2_t tmp = vreinterpretq_u64_##__TYPE (__a);		\
+  uint64x1_t hi = vcreate_u64 (vgetq_lane_u64 (tmp, 1));	\
+  return vreinterpret_##__TYPE##_u64 (hi);
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_high_f16 (float16x8_t __a)
+{
+  __GET_HIGH (f16);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_high_f32 (float32x4_t __a)
+{
+  __GET_HIGH (f32);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_high_f64 (float64x2_t __a)
+{
+  __GET_HIGH (f64);
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_high_p8 (poly8x16_t __a)
+{
+  __GET_HIGH (p8);
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_high_p16 (poly16x8_t __a)
+{
+  __GET_HIGH (p16);
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_high_p64 (poly64x2_t __a)
+{
+  __GET_HIGH (p64);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_high_s8 (int8x16_t __a)
+{
+  __GET_HIGH (s8);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_high_s16 (int16x8_t __a)
+{
+  __GET_HIGH (s16);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_high_s32 (int32x4_t __a)
+{
+  __GET_HIGH (s32);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_high_s64 (int64x2_t __a)
+{
+  __GET_HIGH (s64);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_high_u8 (uint8x16_t __a)
+{
+  __GET_HIGH (u8);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_high_u16 (uint16x8_t __a)
+{
+  __GET_HIGH (u16);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_high_u32 (uint32x4_t __a)
+{
+  __GET_HIGH (u32);
+}
+
+#undef __GET_HIGH
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vget_high_u64 (uint64x2_t __a)
+{
+  return vcreate_u64 (vgetq_lane_u64 (__a, 1));
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcombine_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return (int8x16_t) __builtin_aarch64_combinev8qi (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcombine_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return (int16x8_t) __builtin_aarch64_combinev4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcombine_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return (int32x4_t) __builtin_aarch64_combinev2si (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcombine_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return __builtin_aarch64_combinedi (__a[0], __b[0]);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcombine_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_combinev4hf (__a, __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcombine_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return (float32x4_t) __builtin_aarch64_combinev2sf (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcombine_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return (uint8x16_t) __builtin_aarch64_combinev8qi ((int8x8_t) __a,
+						     (int8x8_t) __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcombine_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return (uint16x8_t) __builtin_aarch64_combinev4hi ((int16x4_t) __a,
+						     (int16x4_t) __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcombine_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return (uint32x4_t) __builtin_aarch64_combinev2si ((int32x2_t) __a,
+						     (int32x2_t) __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcombine_u64 (uint64x1_t __a, uint64x1_t __b)
+{
+  return (uint64x2_t) __builtin_aarch64_combinedi (__a[0], __b[0]);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcombine_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return __builtin_aarch64_combinedf (__a[0], __b[0]);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcombine_p8 (poly8x8_t __a, poly8x8_t __b)
+{
+  return (poly8x16_t) __builtin_aarch64_combinev8qi ((int8x8_t) __a,
+						     (int8x8_t) __b);
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcombine_p16 (poly16x4_t __a, poly16x4_t __b)
+{
+  return (poly16x8_t) __builtin_aarch64_combinev4hi ((int16x4_t) __a,
+						     (int16x4_t) __b);
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcombine_p64 (poly64x1_t __a, poly64x1_t __b)
+{
+  return (poly64x2_t) __builtin_aarch64_combinedi_ppp (__a[0], __b[0]);
+}
+
+/* Start of temporary inline asm implementations.  */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaba_s8 (int8x8_t a, int8x8_t b, int8x8_t c)
+{
+  int8x8_t result;
+  __asm__ ("saba %0.8b,%2.8b,%3.8b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaba_s16 (int16x4_t a, int16x4_t b, int16x4_t c)
+{
+  int16x4_t result;
+  __asm__ ("saba %0.4h,%2.4h,%3.4h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaba_s32 (int32x2_t a, int32x2_t b, int32x2_t c)
+{
+  int32x2_t result;
+  __asm__ ("saba %0.2s,%2.2s,%3.2s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaba_u8 (uint8x8_t a, uint8x8_t b, uint8x8_t c)
+{
+  uint8x8_t result;
+  __asm__ ("uaba %0.8b,%2.8b,%3.8b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaba_u16 (uint16x4_t a, uint16x4_t b, uint16x4_t c)
+{
+  uint16x4_t result;
+  __asm__ ("uaba %0.4h,%2.4h,%3.4h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaba_u32 (uint32x2_t a, uint32x2_t b, uint32x2_t c)
+{
+  uint32x2_t result;
+  __asm__ ("uaba %0.2s,%2.2s,%3.2s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabal_high_s8 (int16x8_t a, int8x16_t b, int8x16_t c)
+{
+  int16x8_t result;
+  __asm__ ("sabal2 %0.8h,%2.16b,%3.16b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabal_high_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
+{
+  int32x4_t result;
+  __asm__ ("sabal2 %0.4s,%2.8h,%3.8h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabal_high_s32 (int64x2_t a, int32x4_t b, int32x4_t c)
+{
+  int64x2_t result;
+  __asm__ ("sabal2 %0.2d,%2.4s,%3.4s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabal_high_u8 (uint16x8_t a, uint8x16_t b, uint8x16_t c)
+{
+  uint16x8_t result;
+  __asm__ ("uabal2 %0.8h,%2.16b,%3.16b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabal_high_u16 (uint32x4_t a, uint16x8_t b, uint16x8_t c)
+{
+  uint32x4_t result;
+  __asm__ ("uabal2 %0.4s,%2.8h,%3.8h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabal_high_u32 (uint64x2_t a, uint32x4_t b, uint32x4_t c)
+{
+  uint64x2_t result;
+  __asm__ ("uabal2 %0.2d,%2.4s,%3.4s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabal_s8 (int16x8_t a, int8x8_t b, int8x8_t c)
+{
+  int16x8_t result;
+  __asm__ ("sabal %0.8h,%2.8b,%3.8b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabal_s16 (int32x4_t a, int16x4_t b, int16x4_t c)
+{
+  int32x4_t result;
+  __asm__ ("sabal %0.4s,%2.4h,%3.4h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabal_s32 (int64x2_t a, int32x2_t b, int32x2_t c)
+{
+  int64x2_t result;
+  __asm__ ("sabal %0.2d,%2.2s,%3.2s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabal_u8 (uint16x8_t a, uint8x8_t b, uint8x8_t c)
+{
+  uint16x8_t result;
+  __asm__ ("uabal %0.8h,%2.8b,%3.8b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabal_u16 (uint32x4_t a, uint16x4_t b, uint16x4_t c)
+{
+  uint32x4_t result;
+  __asm__ ("uabal %0.4s,%2.4h,%3.4h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabal_u32 (uint64x2_t a, uint32x2_t b, uint32x2_t c)
+{
+  uint64x2_t result;
+  __asm__ ("uabal %0.2d,%2.2s,%3.2s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabaq_s8 (int8x16_t a, int8x16_t b, int8x16_t c)
+{
+  int8x16_t result;
+  __asm__ ("saba %0.16b,%2.16b,%3.16b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabaq_s16 (int16x8_t a, int16x8_t b, int16x8_t c)
+{
+  int16x8_t result;
+  __asm__ ("saba %0.8h,%2.8h,%3.8h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabaq_s32 (int32x4_t a, int32x4_t b, int32x4_t c)
+{
+  int32x4_t result;
+  __asm__ ("saba %0.4s,%2.4s,%3.4s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabaq_u8 (uint8x16_t a, uint8x16_t b, uint8x16_t c)
+{
+  uint8x16_t result;
+  __asm__ ("uaba %0.16b,%2.16b,%3.16b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabaq_u16 (uint16x8_t a, uint16x8_t b, uint16x8_t c)
+{
+  uint16x8_t result;
+  __asm__ ("uaba %0.8h,%2.8h,%3.8h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabaq_u32 (uint32x4_t a, uint32x4_t b, uint32x4_t c)
+{
+  uint32x4_t result;
+  __asm__ ("uaba %0.4s,%2.4s,%3.4s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabd_s8 (int8x8_t a, int8x8_t b)
+{
+  int8x8_t result;
+  __asm__ ("sabd %0.8b, %1.8b, %2.8b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabd_s16 (int16x4_t a, int16x4_t b)
+{
+  int16x4_t result;
+  __asm__ ("sabd %0.4h, %1.4h, %2.4h"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabd_s32 (int32x2_t a, int32x2_t b)
+{
+  int32x2_t result;
+  __asm__ ("sabd %0.2s, %1.2s, %2.2s"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabd_u8 (uint8x8_t a, uint8x8_t b)
+{
+  uint8x8_t result;
+  __asm__ ("uabd %0.8b, %1.8b, %2.8b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabd_u16 (uint16x4_t a, uint16x4_t b)
+{
+  uint16x4_t result;
+  __asm__ ("uabd %0.4h, %1.4h, %2.4h"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabd_u32 (uint32x2_t a, uint32x2_t b)
+{
+  uint32x2_t result;
+  __asm__ ("uabd %0.2s, %1.2s, %2.2s"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdl_high_s8 (int8x16_t a, int8x16_t b)
+{
+  int16x8_t result;
+  __asm__ ("sabdl2 %0.8h,%1.16b,%2.16b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdl_high_s16 (int16x8_t a, int16x8_t b)
+{
+  int32x4_t result;
+  __asm__ ("sabdl2 %0.4s,%1.8h,%2.8h"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdl_high_s32 (int32x4_t a, int32x4_t b)
+{
+  int64x2_t result;
+  __asm__ ("sabdl2 %0.2d,%1.4s,%2.4s"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdl_high_u8 (uint8x16_t a, uint8x16_t b)
+{
+  uint16x8_t result;
+  __asm__ ("uabdl2 %0.8h,%1.16b,%2.16b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdl_high_u16 (uint16x8_t a, uint16x8_t b)
+{
+  uint32x4_t result;
+  __asm__ ("uabdl2 %0.4s,%1.8h,%2.8h"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdl_high_u32 (uint32x4_t a, uint32x4_t b)
+{
+  uint64x2_t result;
+  __asm__ ("uabdl2 %0.2d,%1.4s,%2.4s"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdl_s8 (int8x8_t a, int8x8_t b)
+{
+  int16x8_t result;
+  __asm__ ("sabdl %0.8h, %1.8b, %2.8b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdl_s16 (int16x4_t a, int16x4_t b)
+{
+  int32x4_t result;
+  __asm__ ("sabdl %0.4s, %1.4h, %2.4h"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdl_s32 (int32x2_t a, int32x2_t b)
+{
+  int64x2_t result;
+  __asm__ ("sabdl %0.2d, %1.2s, %2.2s"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdl_u8 (uint8x8_t a, uint8x8_t b)
+{
+  uint16x8_t result;
+  __asm__ ("uabdl %0.8h, %1.8b, %2.8b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdl_u16 (uint16x4_t a, uint16x4_t b)
+{
+  uint32x4_t result;
+  __asm__ ("uabdl %0.4s, %1.4h, %2.4h"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdl_u32 (uint32x2_t a, uint32x2_t b)
+{
+  uint64x2_t result;
+  __asm__ ("uabdl %0.2d, %1.2s, %2.2s"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdq_s8 (int8x16_t a, int8x16_t b)
+{
+  int8x16_t result;
+  __asm__ ("sabd %0.16b, %1.16b, %2.16b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdq_s16 (int16x8_t a, int16x8_t b)
+{
+  int16x8_t result;
+  __asm__ ("sabd %0.8h, %1.8h, %2.8h"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdq_s32 (int32x4_t a, int32x4_t b)
+{
+  int32x4_t result;
+  __asm__ ("sabd %0.4s, %1.4s, %2.4s"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdq_u8 (uint8x16_t a, uint8x16_t b)
+{
+  uint8x16_t result;
+  __asm__ ("uabd %0.16b, %1.16b, %2.16b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdq_u16 (uint16x8_t a, uint16x8_t b)
+{
+  uint16x8_t result;
+  __asm__ ("uabd %0.8h, %1.8h, %2.8h"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdq_u32 (uint32x4_t a, uint32x4_t b)
+{
+  uint32x4_t result;
+  __asm__ ("uabd %0.4s, %1.4s, %2.4s"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddlv_s8 (int8x8_t a)
+{
+  int16_t result;
+  __asm__ ("saddlv %h0,%1.8b"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddlv_s16 (int16x4_t a)
+{
+  int32_t result;
+  __asm__ ("saddlv %s0,%1.4h"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddlv_u8 (uint8x8_t a)
+{
+  uint16_t result;
+  __asm__ ("uaddlv %h0,%1.8b"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddlv_u16 (uint16x4_t a)
+{
+  uint32_t result;
+  __asm__ ("uaddlv %s0,%1.4h"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddlvq_s8 (int8x16_t a)
+{
+  int16_t result;
+  __asm__ ("saddlv %h0,%1.16b"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddlvq_s16 (int16x8_t a)
+{
+  int32_t result;
+  __asm__ ("saddlv %s0,%1.8h"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddlvq_s32 (int32x4_t a)
+{
+  int64_t result;
+  __asm__ ("saddlv %d0,%1.4s"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddlvq_u8 (uint8x16_t a)
+{
+  uint16_t result;
+  __asm__ ("uaddlv %h0,%1.16b"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddlvq_u16 (uint16x8_t a)
+{
+  uint32_t result;
+  __asm__ ("uaddlv %s0,%1.8h"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddlvq_u32 (uint32x4_t a)
+{
+  uint64_t result;
+  __asm__ ("uaddlv %d0,%1.4s"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtx_f32_f64 (float64x2_t a)
+{
+  float32x2_t result;
+  __asm__ ("fcvtxn %0.2s,%1.2d"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtx_high_f32_f64 (float32x2_t a, float64x2_t b)
+{
+  float32x4_t result;
+  __asm__ ("fcvtxn2 %0.4s,%1.2d"
+           : "=w"(result)
+           : "w" (b), "0"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtxd_f32_f64 (float64_t a)
+{
+  float32_t result;
+  __asm__ ("fcvtxn %s0,%d1"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_n_f32 (float32x2_t a, float32x2_t b, float32_t c)
+{
+  float32x2_t result;
+  float32x2_t t1;
+  __asm__ ("fmul %1.2s, %3.2s, %4.s[0]; fadd %0.2s, %0.2s, %1.2s"
+           : "=w"(result), "=w"(t1)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_n_s16 (int16x4_t a, int16x4_t b, int16_t c)
+{
+  int16x4_t result;
+  __asm__ ("mla %0.4h,%2.4h,%3.h[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "x"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_n_s32 (int32x2_t a, int32x2_t b, int32_t c)
+{
+  int32x2_t result;
+  __asm__ ("mla %0.2s,%2.2s,%3.s[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_n_u16 (uint16x4_t a, uint16x4_t b, uint16_t c)
+{
+  uint16x4_t result;
+  __asm__ ("mla %0.4h,%2.4h,%3.h[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "x"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_n_u32 (uint32x2_t a, uint32x2_t b, uint32_t c)
+{
+  uint32x2_t result;
+  __asm__ ("mla %0.2s,%2.2s,%3.s[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_s8 (int8x8_t a, int8x8_t b, int8x8_t c)
+{
+  int8x8_t result;
+  __asm__ ("mla %0.8b, %2.8b, %3.8b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_s16 (int16x4_t a, int16x4_t b, int16x4_t c)
+{
+  int16x4_t result;
+  __asm__ ("mla %0.4h, %2.4h, %3.4h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_s32 (int32x2_t a, int32x2_t b, int32x2_t c)
+{
+  int32x2_t result;
+  __asm__ ("mla %0.2s, %2.2s, %3.2s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_u8 (uint8x8_t a, uint8x8_t b, uint8x8_t c)
+{
+  uint8x8_t result;
+  __asm__ ("mla %0.8b, %2.8b, %3.8b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_u16 (uint16x4_t a, uint16x4_t b, uint16x4_t c)
+{
+  uint16x4_t result;
+  __asm__ ("mla %0.4h, %2.4h, %3.4h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_u32 (uint32x2_t a, uint32x2_t b, uint32x2_t c)
+{
+  uint32x2_t result;
+  __asm__ ("mla %0.2s, %2.2s, %3.2s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+#define vmlal_high_lane_s16(a, b, c, d)                                 \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x4_t c_ = (c);                                              \
+       int16x8_t b_ = (b);                                              \
+       int32x4_t a_ = (a);                                              \
+       int32x4_t result;                                                \
+       __asm__ ("smlal2 %0.4s, %2.8h, %3.h[%4]"                         \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "x"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlal_high_lane_s32(a, b, c, d)                                 \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x2_t c_ = (c);                                              \
+       int32x4_t b_ = (b);                                              \
+       int64x2_t a_ = (a);                                              \
+       int64x2_t result;                                                \
+       __asm__ ("smlal2 %0.2d, %2.4s, %3.s[%4]"                         \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "w"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlal_high_lane_u16(a, b, c, d)                                 \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x4_t c_ = (c);                                             \
+       uint16x8_t b_ = (b);                                             \
+       uint32x4_t a_ = (a);                                             \
+       uint32x4_t result;                                               \
+       __asm__ ("umlal2 %0.4s, %2.8h, %3.h[%4]"                         \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "x"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlal_high_lane_u32(a, b, c, d)                                 \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x2_t c_ = (c);                                             \
+       uint32x4_t b_ = (b);                                             \
+       uint64x2_t a_ = (a);                                             \
+       uint64x2_t result;                                               \
+       __asm__ ("umlal2 %0.2d, %2.4s, %3.s[%4]"                         \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "w"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlal_high_laneq_s16(a, b, c, d)                                \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x8_t c_ = (c);                                              \
+       int16x8_t b_ = (b);                                              \
+       int32x4_t a_ = (a);                                              \
+       int32x4_t result;                                                \
+       __asm__ ("smlal2 %0.4s, %2.8h, %3.h[%4]"                         \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "x"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlal_high_laneq_s32(a, b, c, d)                                \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x4_t c_ = (c);                                              \
+       int32x4_t b_ = (b);                                              \
+       int64x2_t a_ = (a);                                              \
+       int64x2_t result;                                                \
+       __asm__ ("smlal2 %0.2d, %2.4s, %3.s[%4]"                         \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "w"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlal_high_laneq_u16(a, b, c, d)                                \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x8_t c_ = (c);                                             \
+       uint16x8_t b_ = (b);                                             \
+       uint32x4_t a_ = (a);                                             \
+       uint32x4_t result;                                               \
+       __asm__ ("umlal2 %0.4s, %2.8h, %3.h[%4]"                         \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "x"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlal_high_laneq_u32(a, b, c, d)                                \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x4_t c_ = (c);                                             \
+       uint32x4_t b_ = (b);                                             \
+       uint64x2_t a_ = (a);                                             \
+       uint64x2_t result;                                               \
+       __asm__ ("umlal2 %0.2d, %2.4s, %3.s[%4]"                         \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "w"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_high_n_s16 (int32x4_t a, int16x8_t b, int16_t c)
+{
+  int32x4_t result;
+  __asm__ ("smlal2 %0.4s,%2.8h,%3.h[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "x"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_high_n_s32 (int64x2_t a, int32x4_t b, int32_t c)
+{
+  int64x2_t result;
+  __asm__ ("smlal2 %0.2d,%2.4s,%3.s[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_high_n_u16 (uint32x4_t a, uint16x8_t b, uint16_t c)
+{
+  uint32x4_t result;
+  __asm__ ("umlal2 %0.4s,%2.8h,%3.h[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "x"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_high_n_u32 (uint64x2_t a, uint32x4_t b, uint32_t c)
+{
+  uint64x2_t result;
+  __asm__ ("umlal2 %0.2d,%2.4s,%3.s[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_high_s8 (int16x8_t a, int8x16_t b, int8x16_t c)
+{
+  int16x8_t result;
+  __asm__ ("smlal2 %0.8h,%2.16b,%3.16b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_high_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
+{
+  int32x4_t result;
+  __asm__ ("smlal2 %0.4s,%2.8h,%3.8h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_high_s32 (int64x2_t a, int32x4_t b, int32x4_t c)
+{
+  int64x2_t result;
+  __asm__ ("smlal2 %0.2d,%2.4s,%3.4s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_high_u8 (uint16x8_t a, uint8x16_t b, uint8x16_t c)
+{
+  uint16x8_t result;
+  __asm__ ("umlal2 %0.8h,%2.16b,%3.16b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_high_u16 (uint32x4_t a, uint16x8_t b, uint16x8_t c)
+{
+  uint32x4_t result;
+  __asm__ ("umlal2 %0.4s,%2.8h,%3.8h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_high_u32 (uint64x2_t a, uint32x4_t b, uint32x4_t c)
+{
+  uint64x2_t result;
+  __asm__ ("umlal2 %0.2d,%2.4s,%3.4s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+#define vmlal_lane_s16(a, b, c, d)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x4_t c_ = (c);                                              \
+       int16x4_t b_ = (b);                                              \
+       int32x4_t a_ = (a);                                              \
+       int32x4_t result;                                                \
+       __asm__ ("smlal %0.4s,%2.4h,%3.h[%4]"                            \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "x"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlal_lane_s32(a, b, c, d)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x2_t c_ = (c);                                              \
+       int32x2_t b_ = (b);                                              \
+       int64x2_t a_ = (a);                                              \
+       int64x2_t result;                                                \
+       __asm__ ("smlal %0.2d,%2.2s,%3.s[%4]"                            \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "w"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlal_lane_u16(a, b, c, d)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x4_t c_ = (c);                                             \
+       uint16x4_t b_ = (b);                                             \
+       uint32x4_t a_ = (a);                                             \
+       uint32x4_t result;                                               \
+       __asm__ ("umlal %0.4s,%2.4h,%3.h[%4]"                            \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "x"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlal_lane_u32(a, b, c, d)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x2_t c_ = (c);                                             \
+       uint32x2_t b_ = (b);                                             \
+       uint64x2_t a_ = (a);                                             \
+       uint64x2_t result;                                               \
+       __asm__ ("umlal %0.2d, %2.2s, %3.s[%4]"                          \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "w"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlal_laneq_s16(a, b, c, d)                                     \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x8_t c_ = (c);                                              \
+       int16x4_t b_ = (b);                                              \
+       int32x4_t a_ = (a);                                              \
+       int32x4_t result;                                                \
+       __asm__ ("smlal %0.4s, %2.4h, %3.h[%4]"                          \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "x"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlal_laneq_s32(a, b, c, d)                                     \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x4_t c_ = (c);                                              \
+       int32x2_t b_ = (b);                                              \
+       int64x2_t a_ = (a);                                              \
+       int64x2_t result;                                                \
+       __asm__ ("smlal %0.2d, %2.2s, %3.s[%4]"                          \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "w"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlal_laneq_u16(a, b, c, d)                                     \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x8_t c_ = (c);                                             \
+       uint16x4_t b_ = (b);                                             \
+       uint32x4_t a_ = (a);                                             \
+       uint32x4_t result;                                               \
+       __asm__ ("umlal %0.4s, %2.4h, %3.h[%4]"                          \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "x"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlal_laneq_u32(a, b, c, d)                                     \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x4_t c_ = (c);                                             \
+       uint32x2_t b_ = (b);                                             \
+       uint64x2_t a_ = (a);                                             \
+       uint64x2_t result;                                               \
+       __asm__ ("umlal %0.2d, %2.2s, %3.s[%4]"                          \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "w"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_n_s16 (int32x4_t a, int16x4_t b, int16_t c)
+{
+  int32x4_t result;
+  __asm__ ("smlal %0.4s,%2.4h,%3.h[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "x"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_n_s32 (int64x2_t a, int32x2_t b, int32_t c)
+{
+  int64x2_t result;
+  __asm__ ("smlal %0.2d,%2.2s,%3.s[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_n_u16 (uint32x4_t a, uint16x4_t b, uint16_t c)
+{
+  uint32x4_t result;
+  __asm__ ("umlal %0.4s,%2.4h,%3.h[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "x"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_n_u32 (uint64x2_t a, uint32x2_t b, uint32_t c)
+{
+  uint64x2_t result;
+  __asm__ ("umlal %0.2d,%2.2s,%3.s[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_s8 (int16x8_t a, int8x8_t b, int8x8_t c)
+{
+  int16x8_t result;
+  __asm__ ("smlal %0.8h,%2.8b,%3.8b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_s16 (int32x4_t a, int16x4_t b, int16x4_t c)
+{
+  int32x4_t result;
+  __asm__ ("smlal %0.4s,%2.4h,%3.4h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_s32 (int64x2_t a, int32x2_t b, int32x2_t c)
+{
+  int64x2_t result;
+  __asm__ ("smlal %0.2d,%2.2s,%3.2s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_u8 (uint16x8_t a, uint8x8_t b, uint8x8_t c)
+{
+  uint16x8_t result;
+  __asm__ ("umlal %0.8h,%2.8b,%3.8b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_u16 (uint32x4_t a, uint16x4_t b, uint16x4_t c)
+{
+  uint32x4_t result;
+  __asm__ ("umlal %0.4s,%2.4h,%3.4h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlal_u32 (uint64x2_t a, uint32x2_t b, uint32x2_t c)
+{
+  uint64x2_t result;
+  __asm__ ("umlal %0.2d,%2.2s,%3.2s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_n_f32 (float32x4_t a, float32x4_t b, float32_t c)
+{
+  float32x4_t result;
+  float32x4_t t1;
+  __asm__ ("fmul %1.4s, %3.4s, %4.s[0]; fadd %0.4s, %0.4s, %1.4s"
+           : "=w"(result), "=w"(t1)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_n_s16 (int16x8_t a, int16x8_t b, int16_t c)
+{
+  int16x8_t result;
+  __asm__ ("mla %0.8h,%2.8h,%3.h[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "x"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_n_s32 (int32x4_t a, int32x4_t b, int32_t c)
+{
+  int32x4_t result;
+  __asm__ ("mla %0.4s,%2.4s,%3.s[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_n_u16 (uint16x8_t a, uint16x8_t b, uint16_t c)
+{
+  uint16x8_t result;
+  __asm__ ("mla %0.8h,%2.8h,%3.h[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "x"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_n_u32 (uint32x4_t a, uint32x4_t b, uint32_t c)
+{
+  uint32x4_t result;
+  __asm__ ("mla %0.4s,%2.4s,%3.s[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_s8 (int8x16_t a, int8x16_t b, int8x16_t c)
+{
+  int8x16_t result;
+  __asm__ ("mla %0.16b, %2.16b, %3.16b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_s16 (int16x8_t a, int16x8_t b, int16x8_t c)
+{
+  int16x8_t result;
+  __asm__ ("mla %0.8h, %2.8h, %3.8h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_s32 (int32x4_t a, int32x4_t b, int32x4_t c)
+{
+  int32x4_t result;
+  __asm__ ("mla %0.4s, %2.4s, %3.4s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_u8 (uint8x16_t a, uint8x16_t b, uint8x16_t c)
+{
+  uint8x16_t result;
+  __asm__ ("mla %0.16b, %2.16b, %3.16b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_u16 (uint16x8_t a, uint16x8_t b, uint16x8_t c)
+{
+  uint16x8_t result;
+  __asm__ ("mla %0.8h, %2.8h, %3.8h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_u32 (uint32x4_t a, uint32x4_t b, uint32x4_t c)
+{
+  uint32x4_t result;
+  __asm__ ("mla %0.4s, %2.4s, %3.4s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_n_f32 (float32x2_t a, float32x2_t b, float32_t c)
+{
+  float32x2_t result;
+  float32x2_t t1;
+  __asm__ ("fmul %1.2s, %3.2s, %4.s[0]; fsub %0.2s, %0.2s, %1.2s"
+           : "=w"(result), "=w"(t1)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_n_s16 (int16x4_t a, int16x4_t b, int16_t c)
+{
+  int16x4_t result;
+  __asm__ ("mls %0.4h, %2.4h, %3.h[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "x"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_n_s32 (int32x2_t a, int32x2_t b, int32_t c)
+{
+  int32x2_t result;
+  __asm__ ("mls %0.2s, %2.2s, %3.s[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_n_u16 (uint16x4_t a, uint16x4_t b, uint16_t c)
+{
+  uint16x4_t result;
+  __asm__ ("mls %0.4h, %2.4h, %3.h[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "x"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_n_u32 (uint32x2_t a, uint32x2_t b, uint32_t c)
+{
+  uint32x2_t result;
+  __asm__ ("mls %0.2s, %2.2s, %3.s[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_s8 (int8x8_t a, int8x8_t b, int8x8_t c)
+{
+  int8x8_t result;
+  __asm__ ("mls %0.8b,%2.8b,%3.8b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_s16 (int16x4_t a, int16x4_t b, int16x4_t c)
+{
+  int16x4_t result;
+  __asm__ ("mls %0.4h,%2.4h,%3.4h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_s32 (int32x2_t a, int32x2_t b, int32x2_t c)
+{
+  int32x2_t result;
+  __asm__ ("mls %0.2s,%2.2s,%3.2s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_u8 (uint8x8_t a, uint8x8_t b, uint8x8_t c)
+{
+  uint8x8_t result;
+  __asm__ ("mls %0.8b,%2.8b,%3.8b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_u16 (uint16x4_t a, uint16x4_t b, uint16x4_t c)
+{
+  uint16x4_t result;
+  __asm__ ("mls %0.4h,%2.4h,%3.4h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_u32 (uint32x2_t a, uint32x2_t b, uint32x2_t c)
+{
+  uint32x2_t result;
+  __asm__ ("mls %0.2s,%2.2s,%3.2s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+#define vmlsl_high_lane_s16(a, b, c, d)                                 \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x4_t c_ = (c);                                              \
+       int16x8_t b_ = (b);                                              \
+       int32x4_t a_ = (a);                                              \
+       int32x4_t result;                                                \
+       __asm__ ("smlsl2 %0.4s, %2.8h, %3.h[%4]"                         \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "x"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlsl_high_lane_s32(a, b, c, d)                                 \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x2_t c_ = (c);                                              \
+       int32x4_t b_ = (b);                                              \
+       int64x2_t a_ = (a);                                              \
+       int64x2_t result;                                                \
+       __asm__ ("smlsl2 %0.2d, %2.4s, %3.s[%4]"                         \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "w"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlsl_high_lane_u16(a, b, c, d)                                 \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x4_t c_ = (c);                                             \
+       uint16x8_t b_ = (b);                                             \
+       uint32x4_t a_ = (a);                                             \
+       uint32x4_t result;                                               \
+       __asm__ ("umlsl2 %0.4s, %2.8h, %3.h[%4]"                         \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "x"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlsl_high_lane_u32(a, b, c, d)                                 \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x2_t c_ = (c);                                             \
+       uint32x4_t b_ = (b);                                             \
+       uint64x2_t a_ = (a);                                             \
+       uint64x2_t result;                                               \
+       __asm__ ("umlsl2 %0.2d, %2.4s, %3.s[%4]"                         \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "w"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlsl_high_laneq_s16(a, b, c, d)                                \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x8_t c_ = (c);                                              \
+       int16x8_t b_ = (b);                                              \
+       int32x4_t a_ = (a);                                              \
+       int32x4_t result;                                                \
+       __asm__ ("smlsl2 %0.4s, %2.8h, %3.h[%4]"                         \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "x"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlsl_high_laneq_s32(a, b, c, d)                                \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x4_t c_ = (c);                                              \
+       int32x4_t b_ = (b);                                              \
+       int64x2_t a_ = (a);                                              \
+       int64x2_t result;                                                \
+       __asm__ ("smlsl2 %0.2d, %2.4s, %3.s[%4]"                         \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "w"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlsl_high_laneq_u16(a, b, c, d)                                \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x8_t c_ = (c);                                             \
+       uint16x8_t b_ = (b);                                             \
+       uint32x4_t a_ = (a);                                             \
+       uint32x4_t result;                                               \
+       __asm__ ("umlsl2 %0.4s, %2.8h, %3.h[%4]"                         \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "x"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlsl_high_laneq_u32(a, b, c, d)                                \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x4_t c_ = (c);                                             \
+       uint32x4_t b_ = (b);                                             \
+       uint64x2_t a_ = (a);                                             \
+       uint64x2_t result;                                               \
+       __asm__ ("umlsl2 %0.2d, %2.4s, %3.s[%4]"                         \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "w"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_high_n_s16 (int32x4_t a, int16x8_t b, int16_t c)
+{
+  int32x4_t result;
+  __asm__ ("smlsl2 %0.4s, %2.8h, %3.h[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "x"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_high_n_s32 (int64x2_t a, int32x4_t b, int32_t c)
+{
+  int64x2_t result;
+  __asm__ ("smlsl2 %0.2d, %2.4s, %3.s[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_high_n_u16 (uint32x4_t a, uint16x8_t b, uint16_t c)
+{
+  uint32x4_t result;
+  __asm__ ("umlsl2 %0.4s, %2.8h, %3.h[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "x"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_high_n_u32 (uint64x2_t a, uint32x4_t b, uint32_t c)
+{
+  uint64x2_t result;
+  __asm__ ("umlsl2 %0.2d, %2.4s, %3.s[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_high_s8 (int16x8_t a, int8x16_t b, int8x16_t c)
+{
+  int16x8_t result;
+  __asm__ ("smlsl2 %0.8h,%2.16b,%3.16b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_high_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
+{
+  int32x4_t result;
+  __asm__ ("smlsl2 %0.4s,%2.8h,%3.8h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_high_s32 (int64x2_t a, int32x4_t b, int32x4_t c)
+{
+  int64x2_t result;
+  __asm__ ("smlsl2 %0.2d,%2.4s,%3.4s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_high_u8 (uint16x8_t a, uint8x16_t b, uint8x16_t c)
+{
+  uint16x8_t result;
+  __asm__ ("umlsl2 %0.8h,%2.16b,%3.16b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_high_u16 (uint32x4_t a, uint16x8_t b, uint16x8_t c)
+{
+  uint32x4_t result;
+  __asm__ ("umlsl2 %0.4s,%2.8h,%3.8h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_high_u32 (uint64x2_t a, uint32x4_t b, uint32x4_t c)
+{
+  uint64x2_t result;
+  __asm__ ("umlsl2 %0.2d,%2.4s,%3.4s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+#define vmlsl_lane_s16(a, b, c, d)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x4_t c_ = (c);                                              \
+       int16x4_t b_ = (b);                                              \
+       int32x4_t a_ = (a);                                              \
+       int32x4_t result;                                                \
+       __asm__ ("smlsl %0.4s, %2.4h, %3.h[%4]"                          \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "x"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlsl_lane_s32(a, b, c, d)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x2_t c_ = (c);                                              \
+       int32x2_t b_ = (b);                                              \
+       int64x2_t a_ = (a);                                              \
+       int64x2_t result;                                                \
+       __asm__ ("smlsl %0.2d, %2.2s, %3.s[%4]"                          \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "w"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlsl_lane_u16(a, b, c, d)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x4_t c_ = (c);                                             \
+       uint16x4_t b_ = (b);                                             \
+       uint32x4_t a_ = (a);                                             \
+       uint32x4_t result;                                               \
+       __asm__ ("umlsl %0.4s, %2.4h, %3.h[%4]"                          \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "x"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlsl_lane_u32(a, b, c, d)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x2_t c_ = (c);                                             \
+       uint32x2_t b_ = (b);                                             \
+       uint64x2_t a_ = (a);                                             \
+       uint64x2_t result;                                               \
+       __asm__ ("umlsl %0.2d, %2.2s, %3.s[%4]"                          \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "w"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlsl_laneq_s16(a, b, c, d)                                     \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x8_t c_ = (c);                                              \
+       int16x4_t b_ = (b);                                              \
+       int32x4_t a_ = (a);                                              \
+       int32x4_t result;                                                \
+       __asm__ ("smlsl %0.4s, %2.4h, %3.h[%4]"                          \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "x"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlsl_laneq_s32(a, b, c, d)                                     \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x4_t c_ = (c);                                              \
+       int32x2_t b_ = (b);                                              \
+       int64x2_t a_ = (a);                                              \
+       int64x2_t result;                                                \
+       __asm__ ("smlsl %0.2d, %2.2s, %3.s[%4]"                          \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "w"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlsl_laneq_u16(a, b, c, d)                                     \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x8_t c_ = (c);                                             \
+       uint16x4_t b_ = (b);                                             \
+       uint32x4_t a_ = (a);                                             \
+       uint32x4_t result;                                               \
+       __asm__ ("umlsl %0.4s, %2.4h, %3.h[%4]"                          \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "x"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmlsl_laneq_u32(a, b, c, d)                                     \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x4_t c_ = (c);                                             \
+       uint32x2_t b_ = (b);                                             \
+       uint64x2_t a_ = (a);                                             \
+       uint64x2_t result;                                               \
+       __asm__ ("umlsl %0.2d, %2.2s, %3.s[%4]"                          \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "w"(c_), "i"(d)                     \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_n_s16 (int32x4_t a, int16x4_t b, int16_t c)
+{
+  int32x4_t result;
+  __asm__ ("smlsl %0.4s, %2.4h, %3.h[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "x"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_n_s32 (int64x2_t a, int32x2_t b, int32_t c)
+{
+  int64x2_t result;
+  __asm__ ("smlsl %0.2d, %2.2s, %3.s[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_n_u16 (uint32x4_t a, uint16x4_t b, uint16_t c)
+{
+  uint32x4_t result;
+  __asm__ ("umlsl %0.4s, %2.4h, %3.h[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "x"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_n_u32 (uint64x2_t a, uint32x2_t b, uint32_t c)
+{
+  uint64x2_t result;
+  __asm__ ("umlsl %0.2d, %2.2s, %3.s[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_s8 (int16x8_t a, int8x8_t b, int8x8_t c)
+{
+  int16x8_t result;
+  __asm__ ("smlsl %0.8h, %2.8b, %3.8b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_s16 (int32x4_t a, int16x4_t b, int16x4_t c)
+{
+  int32x4_t result;
+  __asm__ ("smlsl %0.4s, %2.4h, %3.4h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_s32 (int64x2_t a, int32x2_t b, int32x2_t c)
+{
+  int64x2_t result;
+  __asm__ ("smlsl %0.2d, %2.2s, %3.2s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_u8 (uint16x8_t a, uint8x8_t b, uint8x8_t c)
+{
+  uint16x8_t result;
+  __asm__ ("umlsl %0.8h, %2.8b, %3.8b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_u16 (uint32x4_t a, uint16x4_t b, uint16x4_t c)
+{
+  uint32x4_t result;
+  __asm__ ("umlsl %0.4s, %2.4h, %3.4h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsl_u32 (uint64x2_t a, uint32x2_t b, uint32x2_t c)
+{
+  uint64x2_t result;
+  __asm__ ("umlsl %0.2d, %2.2s, %3.2s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_n_f32 (float32x4_t a, float32x4_t b, float32_t c)
+{
+  float32x4_t result;
+  float32x4_t t1;
+  __asm__ ("fmul %1.4s, %3.4s, %4.s[0]; fsub %0.4s, %0.4s, %1.4s"
+           : "=w"(result), "=w"(t1)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_n_s16 (int16x8_t a, int16x8_t b, int16_t c)
+{
+  int16x8_t result;
+  __asm__ ("mls %0.8h, %2.8h, %3.h[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "x"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_n_s32 (int32x4_t a, int32x4_t b, int32_t c)
+{
+  int32x4_t result;
+  __asm__ ("mls %0.4s, %2.4s, %3.s[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_n_u16 (uint16x8_t a, uint16x8_t b, uint16_t c)
+{
+  uint16x8_t result;
+  __asm__ ("mls %0.8h, %2.8h, %3.h[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "x"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_n_u32 (uint32x4_t a, uint32x4_t b, uint32_t c)
+{
+  uint32x4_t result;
+  __asm__ ("mls %0.4s, %2.4s, %3.s[0]"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_s8 (int8x16_t a, int8x16_t b, int8x16_t c)
+{
+  int8x16_t result;
+  __asm__ ("mls %0.16b,%2.16b,%3.16b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_s16 (int16x8_t a, int16x8_t b, int16x8_t c)
+{
+  int16x8_t result;
+  __asm__ ("mls %0.8h,%2.8h,%3.8h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_s32 (int32x4_t a, int32x4_t b, int32x4_t c)
+{
+  int32x4_t result;
+  __asm__ ("mls %0.4s,%2.4s,%3.4s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_u8 (uint8x16_t a, uint8x16_t b, uint8x16_t c)
+{
+  uint8x16_t result;
+  __asm__ ("mls %0.16b,%2.16b,%3.16b"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_u16 (uint16x8_t a, uint16x8_t b, uint16x8_t c)
+{
+  uint16x8_t result;
+  __asm__ ("mls %0.8h,%2.8h,%3.8h"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_u32 (uint32x4_t a, uint32x4_t b, uint32x4_t c)
+{
+  uint32x4_t result;
+  __asm__ ("mls %0.4s,%2.4s,%3.4s"
+           : "=w"(result)
+           : "0"(a), "w"(b), "w"(c)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovl_high_s8 (int8x16_t a)
+{
+  int16x8_t result;
+  __asm__ ("sshll2 %0.8h,%1.16b,#0"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovl_high_s16 (int16x8_t a)
+{
+  int32x4_t result;
+  __asm__ ("sshll2 %0.4s,%1.8h,#0"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovl_high_s32 (int32x4_t a)
+{
+  int64x2_t result;
+  __asm__ ("sshll2 %0.2d,%1.4s,#0"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovl_high_u8 (uint8x16_t a)
+{
+  uint16x8_t result;
+  __asm__ ("ushll2 %0.8h,%1.16b,#0"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovl_high_u16 (uint16x8_t a)
+{
+  uint32x4_t result;
+  __asm__ ("ushll2 %0.4s,%1.8h,#0"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovl_high_u32 (uint32x4_t a)
+{
+  uint64x2_t result;
+  __asm__ ("ushll2 %0.2d,%1.4s,#0"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovl_s8 (int8x8_t a)
+{
+  int16x8_t result;
+  __asm__ ("sshll %0.8h,%1.8b,#0"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovl_s16 (int16x4_t a)
+{
+  int32x4_t result;
+  __asm__ ("sshll %0.4s,%1.4h,#0"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovl_s32 (int32x2_t a)
+{
+  int64x2_t result;
+  __asm__ ("sshll %0.2d,%1.2s,#0"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovl_u8 (uint8x8_t a)
+{
+  uint16x8_t result;
+  __asm__ ("ushll %0.8h,%1.8b,#0"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovl_u16 (uint16x4_t a)
+{
+  uint32x4_t result;
+  __asm__ ("ushll %0.4s,%1.4h,#0"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovl_u32 (uint32x2_t a)
+{
+  uint64x2_t result;
+  __asm__ ("ushll %0.2d,%1.2s,#0"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovn_high_s16 (int8x8_t a, int16x8_t b)
+{
+  int8x16_t result = vcombine_s8 (a, vcreate_s8 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("xtn2 %0.16b,%1.8h"
+           : "+w"(result)
+           : "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovn_high_s32 (int16x4_t a, int32x4_t b)
+{
+  int16x8_t result = vcombine_s16 (a, vcreate_s16 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("xtn2 %0.8h,%1.4s"
+           : "+w"(result)
+           : "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovn_high_s64 (int32x2_t a, int64x2_t b)
+{
+  int32x4_t result = vcombine_s32 (a, vcreate_s32 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("xtn2 %0.4s,%1.2d"
+           : "+w"(result)
+           : "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovn_high_u16 (uint8x8_t a, uint16x8_t b)
+{
+  uint8x16_t result = vcombine_u8 (a, vcreate_u8 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("xtn2 %0.16b,%1.8h"
+           : "+w"(result)
+           : "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovn_high_u32 (uint16x4_t a, uint32x4_t b)
+{
+  uint16x8_t result = vcombine_u16 (a, vcreate_u16 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("xtn2 %0.8h,%1.4s"
+           : "+w"(result)
+           : "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovn_high_u64 (uint32x2_t a, uint64x2_t b)
+{
+  uint32x4_t result = vcombine_u32 (a, vcreate_u32 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("xtn2 %0.4s,%1.2d"
+           : "+w"(result)
+           : "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovn_s16 (int16x8_t a)
+{
+  int8x8_t result;
+  __asm__ ("xtn %0.8b,%1.8h"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovn_s32 (int32x4_t a)
+{
+  int16x4_t result;
+  __asm__ ("xtn %0.4h,%1.4s"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovn_s64 (int64x2_t a)
+{
+  int32x2_t result;
+  __asm__ ("xtn %0.2s,%1.2d"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovn_u16 (uint16x8_t a)
+{
+  uint8x8_t result;
+  __asm__ ("xtn %0.8b,%1.8h"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovn_u32 (uint32x4_t a)
+{
+  uint16x4_t result;
+  __asm__ ("xtn %0.4h,%1.4s"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovn_u64 (uint64x2_t a)
+{
+  uint32x2_t result;
+  __asm__ ("xtn %0.2s,%1.2d"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+#define vmull_high_lane_s16(a, b, c)                                    \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x4_t b_ = (b);                                              \
+       int16x8_t a_ = (a);                                              \
+       int32x4_t result;                                                \
+       __asm__ ("smull2 %0.4s, %1.8h, %2.h[%3]"                         \
+                : "=w"(result)                                          \
+                : "w"(a_), "x"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmull_high_lane_s32(a, b, c)                                    \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x2_t b_ = (b);                                              \
+       int32x4_t a_ = (a);                                              \
+       int64x2_t result;                                                \
+       __asm__ ("smull2 %0.2d, %1.4s, %2.s[%3]"                         \
+                : "=w"(result)                                          \
+                : "w"(a_), "w"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmull_high_lane_u16(a, b, c)                                    \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x4_t b_ = (b);                                             \
+       uint16x8_t a_ = (a);                                             \
+       uint32x4_t result;                                               \
+       __asm__ ("umull2 %0.4s, %1.8h, %2.h[%3]"                         \
+                : "=w"(result)                                          \
+                : "w"(a_), "x"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmull_high_lane_u32(a, b, c)                                    \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x2_t b_ = (b);                                             \
+       uint32x4_t a_ = (a);                                             \
+       uint64x2_t result;                                               \
+       __asm__ ("umull2 %0.2d, %1.4s, %2.s[%3]"                         \
+                : "=w"(result)                                          \
+                : "w"(a_), "w"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmull_high_laneq_s16(a, b, c)                                   \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x8_t b_ = (b);                                              \
+       int16x8_t a_ = (a);                                              \
+       int32x4_t result;                                                \
+       __asm__ ("smull2 %0.4s, %1.8h, %2.h[%3]"                         \
+                : "=w"(result)                                          \
+                : "w"(a_), "x"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmull_high_laneq_s32(a, b, c)                                   \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x4_t b_ = (b);                                              \
+       int32x4_t a_ = (a);                                              \
+       int64x2_t result;                                                \
+       __asm__ ("smull2 %0.2d, %1.4s, %2.s[%3]"                         \
+                : "=w"(result)                                          \
+                : "w"(a_), "w"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmull_high_laneq_u16(a, b, c)                                   \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x8_t b_ = (b);                                             \
+       uint16x8_t a_ = (a);                                             \
+       uint32x4_t result;                                               \
+       __asm__ ("umull2 %0.4s, %1.8h, %2.h[%3]"                         \
+                : "=w"(result)                                          \
+                : "w"(a_), "x"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmull_high_laneq_u32(a, b, c)                                   \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x4_t b_ = (b);                                             \
+       uint32x4_t a_ = (a);                                             \
+       uint64x2_t result;                                               \
+       __asm__ ("umull2 %0.2d, %1.4s, %2.s[%3]"                         \
+                : "=w"(result)                                          \
+                : "w"(a_), "w"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_high_n_s16 (int16x8_t a, int16_t b)
+{
+  int32x4_t result;
+  __asm__ ("smull2 %0.4s,%1.8h,%2.h[0]"
+           : "=w"(result)
+           : "w"(a), "x"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_high_n_s32 (int32x4_t a, int32_t b)
+{
+  int64x2_t result;
+  __asm__ ("smull2 %0.2d,%1.4s,%2.s[0]"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_high_n_u16 (uint16x8_t a, uint16_t b)
+{
+  uint32x4_t result;
+  __asm__ ("umull2 %0.4s,%1.8h,%2.h[0]"
+           : "=w"(result)
+           : "w"(a), "x"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_high_n_u32 (uint32x4_t a, uint32_t b)
+{
+  uint64x2_t result;
+  __asm__ ("umull2 %0.2d,%1.4s,%2.s[0]"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_high_p8 (poly8x16_t a, poly8x16_t b)
+{
+  poly16x8_t result;
+  __asm__ ("pmull2 %0.8h,%1.16b,%2.16b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_high_s8 (int8x16_t a, int8x16_t b)
+{
+  int16x8_t result;
+  __asm__ ("smull2 %0.8h,%1.16b,%2.16b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_high_s16 (int16x8_t a, int16x8_t b)
+{
+  int32x4_t result;
+  __asm__ ("smull2 %0.4s,%1.8h,%2.8h"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_high_s32 (int32x4_t a, int32x4_t b)
+{
+  int64x2_t result;
+  __asm__ ("smull2 %0.2d,%1.4s,%2.4s"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_high_u8 (uint8x16_t a, uint8x16_t b)
+{
+  uint16x8_t result;
+  __asm__ ("umull2 %0.8h,%1.16b,%2.16b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_high_u16 (uint16x8_t a, uint16x8_t b)
+{
+  uint32x4_t result;
+  __asm__ ("umull2 %0.4s,%1.8h,%2.8h"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_high_u32 (uint32x4_t a, uint32x4_t b)
+{
+  uint64x2_t result;
+  __asm__ ("umull2 %0.2d,%1.4s,%2.4s"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+#define vmull_lane_s16(a, b, c)                                         \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x4_t b_ = (b);                                              \
+       int16x4_t a_ = (a);                                              \
+       int32x4_t result;                                                \
+       __asm__ ("smull %0.4s,%1.4h,%2.h[%3]"                            \
+                : "=w"(result)                                          \
+                : "w"(a_), "x"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmull_lane_s32(a, b, c)                                         \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x2_t b_ = (b);                                              \
+       int32x2_t a_ = (a);                                              \
+       int64x2_t result;                                                \
+       __asm__ ("smull %0.2d,%1.2s,%2.s[%3]"                            \
+                : "=w"(result)                                          \
+                : "w"(a_), "w"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmull_lane_u16(a, b, c)                                         \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x4_t b_ = (b);                                             \
+       uint16x4_t a_ = (a);                                             \
+       uint32x4_t result;                                               \
+       __asm__ ("umull %0.4s,%1.4h,%2.h[%3]"                            \
+                : "=w"(result)                                          \
+                : "w"(a_), "x"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmull_lane_u32(a, b, c)                                         \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x2_t b_ = (b);                                             \
+       uint32x2_t a_ = (a);                                             \
+       uint64x2_t result;                                               \
+       __asm__ ("umull %0.2d, %1.2s, %2.s[%3]"                          \
+                : "=w"(result)                                          \
+                : "w"(a_), "w"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmull_laneq_s16(a, b, c)                                        \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x8_t b_ = (b);                                              \
+       int16x4_t a_ = (a);                                              \
+       int32x4_t result;                                                \
+       __asm__ ("smull %0.4s, %1.4h, %2.h[%3]"                          \
+                : "=w"(result)                                          \
+                : "w"(a_), "x"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmull_laneq_s32(a, b, c)                                        \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x4_t b_ = (b);                                              \
+       int32x2_t a_ = (a);                                              \
+       int64x2_t result;                                                \
+       __asm__ ("smull %0.2d, %1.2s, %2.s[%3]"                          \
+                : "=w"(result)                                          \
+                : "w"(a_), "w"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmull_laneq_u16(a, b, c)                                        \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x8_t b_ = (b);                                             \
+       uint16x4_t a_ = (a);                                             \
+       uint32x4_t result;                                               \
+       __asm__ ("umull %0.4s, %1.4h, %2.h[%3]"                          \
+                : "=w"(result)                                          \
+                : "w"(a_), "x"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vmull_laneq_u32(a, b, c)                                        \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x4_t b_ = (b);                                             \
+       uint32x2_t a_ = (a);                                             \
+       uint64x2_t result;                                               \
+       __asm__ ("umull %0.2d, %1.2s, %2.s[%3]"                          \
+                : "=w"(result)                                          \
+                : "w"(a_), "w"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_n_s16 (int16x4_t a, int16_t b)
+{
+  int32x4_t result;
+  __asm__ ("smull %0.4s,%1.4h,%2.h[0]"
+           : "=w"(result)
+           : "w"(a), "x"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_n_s32 (int32x2_t a, int32_t b)
+{
+  int64x2_t result;
+  __asm__ ("smull %0.2d,%1.2s,%2.s[0]"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_n_u16 (uint16x4_t a, uint16_t b)
+{
+  uint32x4_t result;
+  __asm__ ("umull %0.4s,%1.4h,%2.h[0]"
+           : "=w"(result)
+           : "w"(a), "x"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_n_u32 (uint32x2_t a, uint32_t b)
+{
+  uint64x2_t result;
+  __asm__ ("umull %0.2d,%1.2s,%2.s[0]"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_p8 (poly8x8_t a, poly8x8_t b)
+{
+  poly16x8_t result;
+  __asm__ ("pmull %0.8h, %1.8b, %2.8b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_s8 (int8x8_t a, int8x8_t b)
+{
+  int16x8_t result;
+  __asm__ ("smull %0.8h, %1.8b, %2.8b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_s16 (int16x4_t a, int16x4_t b)
+{
+  int32x4_t result;
+  __asm__ ("smull %0.4s, %1.4h, %2.4h"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_s32 (int32x2_t a, int32x2_t b)
+{
+  int64x2_t result;
+  __asm__ ("smull %0.2d, %1.2s, %2.2s"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_u8 (uint8x8_t a, uint8x8_t b)
+{
+  uint16x8_t result;
+  __asm__ ("umull %0.8h, %1.8b, %2.8b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_u16 (uint16x4_t a, uint16x4_t b)
+{
+  uint32x4_t result;
+  __asm__ ("umull %0.4s, %1.4h, %2.4h"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_u32 (uint32x2_t a, uint32x2_t b)
+{
+  uint64x2_t result;
+  __asm__ ("umull %0.2d, %1.2s, %2.2s"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadal_s8 (int16x4_t a, int8x8_t b)
+{
+  int16x4_t result;
+  __asm__ ("sadalp %0.4h,%2.8b"
+           : "=w"(result)
+           : "0"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadal_s16 (int32x2_t a, int16x4_t b)
+{
+  int32x2_t result;
+  __asm__ ("sadalp %0.2s,%2.4h"
+           : "=w"(result)
+           : "0"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadal_s32 (int64x1_t a, int32x2_t b)
+{
+  int64x1_t result;
+  __asm__ ("sadalp %0.1d,%2.2s"
+           : "=w"(result)
+           : "0"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadal_u8 (uint16x4_t a, uint8x8_t b)
+{
+  uint16x4_t result;
+  __asm__ ("uadalp %0.4h,%2.8b"
+           : "=w"(result)
+           : "0"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadal_u16 (uint32x2_t a, uint16x4_t b)
+{
+  uint32x2_t result;
+  __asm__ ("uadalp %0.2s,%2.4h"
+           : "=w"(result)
+           : "0"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadal_u32 (uint64x1_t a, uint32x2_t b)
+{
+  uint64x1_t result;
+  __asm__ ("uadalp %0.1d,%2.2s"
+           : "=w"(result)
+           : "0"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadalq_s8 (int16x8_t a, int8x16_t b)
+{
+  int16x8_t result;
+  __asm__ ("sadalp %0.8h,%2.16b"
+           : "=w"(result)
+           : "0"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadalq_s16 (int32x4_t a, int16x8_t b)
+{
+  int32x4_t result;
+  __asm__ ("sadalp %0.4s,%2.8h"
+           : "=w"(result)
+           : "0"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadalq_s32 (int64x2_t a, int32x4_t b)
+{
+  int64x2_t result;
+  __asm__ ("sadalp %0.2d,%2.4s"
+           : "=w"(result)
+           : "0"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadalq_u8 (uint16x8_t a, uint8x16_t b)
+{
+  uint16x8_t result;
+  __asm__ ("uadalp %0.8h,%2.16b"
+           : "=w"(result)
+           : "0"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadalq_u16 (uint32x4_t a, uint16x8_t b)
+{
+  uint32x4_t result;
+  __asm__ ("uadalp %0.4s,%2.8h"
+           : "=w"(result)
+           : "0"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadalq_u32 (uint64x2_t a, uint32x4_t b)
+{
+  uint64x2_t result;
+  __asm__ ("uadalp %0.2d,%2.4s"
+           : "=w"(result)
+           : "0"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddl_s8 (int8x8_t a)
+{
+  int16x4_t result;
+  __asm__ ("saddlp %0.4h,%1.8b"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddl_s16 (int16x4_t a)
+{
+  int32x2_t result;
+  __asm__ ("saddlp %0.2s,%1.4h"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddl_s32 (int32x2_t a)
+{
+  int64x1_t result;
+  __asm__ ("saddlp %0.1d,%1.2s"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddl_u8 (uint8x8_t a)
+{
+  uint16x4_t result;
+  __asm__ ("uaddlp %0.4h,%1.8b"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddl_u16 (uint16x4_t a)
+{
+  uint32x2_t result;
+  __asm__ ("uaddlp %0.2s,%1.4h"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddl_u32 (uint32x2_t a)
+{
+  uint64x1_t result;
+  __asm__ ("uaddlp %0.1d,%1.2s"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddlq_s8 (int8x16_t a)
+{
+  int16x8_t result;
+  __asm__ ("saddlp %0.8h,%1.16b"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddlq_s16 (int16x8_t a)
+{
+  int32x4_t result;
+  __asm__ ("saddlp %0.4s,%1.8h"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddlq_s32 (int32x4_t a)
+{
+  int64x2_t result;
+  __asm__ ("saddlp %0.2d,%1.4s"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddlq_u8 (uint8x16_t a)
+{
+  uint16x8_t result;
+  __asm__ ("uaddlp %0.8h,%1.16b"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddlq_u16 (uint16x8_t a)
+{
+  uint32x4_t result;
+  __asm__ ("uaddlp %0.4s,%1.8h"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddlq_u32 (uint32x4_t a)
+{
+  uint64x2_t result;
+  __asm__ ("uaddlp %0.2d,%1.4s"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddq_s8 (int8x16_t a, int8x16_t b)
+{
+  int8x16_t result;
+  __asm__ ("addp %0.16b,%1.16b,%2.16b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddq_s16 (int16x8_t a, int16x8_t b)
+{
+  int16x8_t result;
+  __asm__ ("addp %0.8h,%1.8h,%2.8h"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddq_s32 (int32x4_t a, int32x4_t b)
+{
+  int32x4_t result;
+  __asm__ ("addp %0.4s,%1.4s,%2.4s"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddq_s64 (int64x2_t a, int64x2_t b)
+{
+  int64x2_t result;
+  __asm__ ("addp %0.2d,%1.2d,%2.2d"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddq_u8 (uint8x16_t a, uint8x16_t b)
+{
+  uint8x16_t result;
+  __asm__ ("addp %0.16b,%1.16b,%2.16b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddq_u16 (uint16x8_t a, uint16x8_t b)
+{
+  uint16x8_t result;
+  __asm__ ("addp %0.8h,%1.8h,%2.8h"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddq_u32 (uint32x4_t a, uint32x4_t b)
+{
+  uint32x4_t result;
+  __asm__ ("addp %0.4s,%1.4s,%2.4s"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddq_u64 (uint64x2_t a, uint64x2_t b)
+{
+  uint64x2_t result;
+  __asm__ ("addp %0.2d,%1.2d,%2.2d"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulh_n_s16 (int16x4_t a, int16_t b)
+{
+  int16x4_t result;
+  __asm__ ("sqdmulh %0.4h,%1.4h,%2.h[0]"
+           : "=w"(result)
+           : "w"(a), "x"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulh_n_s32 (int32x2_t a, int32_t b)
+{
+  int32x2_t result;
+  __asm__ ("sqdmulh %0.2s,%1.2s,%2.s[0]"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulhq_n_s16 (int16x8_t a, int16_t b)
+{
+  int16x8_t result;
+  __asm__ ("sqdmulh %0.8h,%1.8h,%2.h[0]"
+           : "=w"(result)
+           : "w"(a), "x"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulhq_n_s32 (int32x4_t a, int32_t b)
+{
+  int32x4_t result;
+  __asm__ ("sqdmulh %0.4s,%1.4s,%2.s[0]"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovn_high_s16 (int8x8_t a, int16x8_t b)
+{
+  int8x16_t result = vcombine_s8 (a, vcreate_s8 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("sqxtn2 %0.16b, %1.8h"
+           : "+w"(result)
+           : "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovn_high_s32 (int16x4_t a, int32x4_t b)
+{
+  int16x8_t result = vcombine_s16 (a, vcreate_s16 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("sqxtn2 %0.8h, %1.4s"
+           : "+w"(result)
+           : "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovn_high_s64 (int32x2_t a, int64x2_t b)
+{
+  int32x4_t result = vcombine_s32 (a, vcreate_s32 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("sqxtn2 %0.4s, %1.2d"
+           : "+w"(result)
+           : "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovn_high_u16 (uint8x8_t a, uint16x8_t b)
+{
+  uint8x16_t result = vcombine_u8 (a, vcreate_u8 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("uqxtn2 %0.16b, %1.8h"
+           : "+w"(result)
+           : "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovn_high_u32 (uint16x4_t a, uint32x4_t b)
+{
+  uint16x8_t result = vcombine_u16 (a, vcreate_u16 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("uqxtn2 %0.8h, %1.4s"
+           : "+w"(result)
+           : "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovn_high_u64 (uint32x2_t a, uint64x2_t b)
+{
+  uint32x4_t result = vcombine_u32 (a, vcreate_u32 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("uqxtn2 %0.4s, %1.2d"
+           : "+w"(result)
+           : "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovun_high_s16 (uint8x8_t a, int16x8_t b)
+{
+  uint8x16_t result = vcombine_u8 (a, vcreate_u8 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("sqxtun2 %0.16b, %1.8h"
+           : "+w"(result)
+           : "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovun_high_s32 (uint16x4_t a, int32x4_t b)
+{
+  uint16x8_t result = vcombine_u16 (a, vcreate_u16 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("sqxtun2 %0.8h, %1.4s"
+           : "+w"(result)
+           : "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovun_high_s64 (uint32x2_t a, int64x2_t b)
+{
+  uint32x4_t result = vcombine_u32 (a, vcreate_u32 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("sqxtun2 %0.4s, %1.2d"
+           : "+w"(result)
+           : "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulh_n_s16 (int16x4_t a, int16_t b)
+{
+  int16x4_t result;
+  __asm__ ("sqrdmulh %0.4h,%1.4h,%2.h[0]"
+           : "=w"(result)
+           : "w"(a), "x"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulh_n_s32 (int32x2_t a, int32_t b)
+{
+  int32x2_t result;
+  __asm__ ("sqrdmulh %0.2s,%1.2s,%2.s[0]"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulhq_n_s16 (int16x8_t a, int16_t b)
+{
+  int16x8_t result;
+  __asm__ ("sqrdmulh %0.8h,%1.8h,%2.h[0]"
+           : "=w"(result)
+           : "w"(a), "x"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulhq_n_s32 (int32x4_t a, int32_t b)
+{
+  int32x4_t result;
+  __asm__ ("sqrdmulh %0.4s,%1.4s,%2.s[0]"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+#define vqrshrn_high_n_s16(a, b, c)                                     \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x8_t b_ = (b);                                              \
+       int8x8_t a_ = (a);                                               \
+       int8x16_t result = vcombine_s8                                   \
+                            (a_, vcreate_s8                             \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("sqrshrn2 %0.16b, %1.8h, #%2"                           \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vqrshrn_high_n_s32(a, b, c)                                     \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x4_t b_ = (b);                                              \
+       int16x4_t a_ = (a);                                              \
+       int16x8_t result = vcombine_s16                                  \
+                            (a_, vcreate_s16                            \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("sqrshrn2 %0.8h, %1.4s, #%2"                            \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vqrshrn_high_n_s64(a, b, c)                                     \
+  __extension__                                                         \
+    ({                                                                  \
+       int64x2_t b_ = (b);                                              \
+       int32x2_t a_ = (a);                                              \
+       int32x4_t result = vcombine_s32                                  \
+                            (a_, vcreate_s32                            \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("sqrshrn2 %0.4s, %1.2d, #%2"                            \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vqrshrn_high_n_u16(a, b, c)                                     \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x8_t b_ = (b);                                             \
+       uint8x8_t a_ = (a);                                              \
+       uint8x16_t result = vcombine_u8                                  \
+                             (a_, vcreate_u8                            \
+                                    (__AARCH64_UINT64_C (0x0)));        \
+       __asm__ ("uqrshrn2 %0.16b, %1.8h, #%2"                           \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vqrshrn_high_n_u32(a, b, c)                                     \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x4_t b_ = (b);                                             \
+       uint16x4_t a_ = (a);                                             \
+       uint16x8_t result = vcombine_u16                                 \
+                             (a_, vcreate_u16                           \
+                                    (__AARCH64_UINT64_C (0x0)));        \
+       __asm__ ("uqrshrn2 %0.8h, %1.4s, #%2"                            \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vqrshrn_high_n_u64(a, b, c)                                     \
+  __extension__                                                         \
+    ({                                                                  \
+       uint64x2_t b_ = (b);                                             \
+       uint32x2_t a_ = (a);                                             \
+       uint32x4_t result = vcombine_u32                                 \
+                             (a_, vcreate_u32                           \
+                                    (__AARCH64_UINT64_C (0x0)));        \
+       __asm__ ("uqrshrn2 %0.4s, %1.2d, #%2"                            \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vqrshrun_high_n_s16(a, b, c)                                    \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x8_t b_ = (b);                                              \
+       uint8x8_t a_ = (a);                                              \
+       uint8x16_t result = vcombine_u8                                  \
+                             (a_, vcreate_u8                            \
+                                    (__AARCH64_UINT64_C (0x0)));        \
+       __asm__ ("sqrshrun2 %0.16b, %1.8h, #%2"                          \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vqrshrun_high_n_s32(a, b, c)                                    \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x4_t b_ = (b);                                              \
+       uint16x4_t a_ = (a);                                             \
+       uint16x8_t result = vcombine_u16                                 \
+                             (a_, vcreate_u16                           \
+                                    (__AARCH64_UINT64_C (0x0)));        \
+       __asm__ ("sqrshrun2 %0.8h, %1.4s, #%2"                           \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vqrshrun_high_n_s64(a, b, c)                                    \
+  __extension__                                                         \
+    ({                                                                  \
+       int64x2_t b_ = (b);                                              \
+       uint32x2_t a_ = (a);                                             \
+       uint32x4_t result = vcombine_u32                                 \
+                             (a_, vcreate_u32                           \
+                                    (__AARCH64_UINT64_C (0x0)));        \
+       __asm__ ("sqrshrun2 %0.4s, %1.2d, #%2"                           \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vqshrn_high_n_s16(a, b, c)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x8_t b_ = (b);                                              \
+       int8x8_t a_ = (a);                                               \
+       int8x16_t result = vcombine_s8                                   \
+                            (a_, vcreate_s8                             \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("sqshrn2 %0.16b, %1.8h, #%2"                            \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vqshrn_high_n_s32(a, b, c)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x4_t b_ = (b);                                              \
+       int16x4_t a_ = (a);                                              \
+       int16x8_t result = vcombine_s16                                  \
+                            (a_, vcreate_s16                            \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("sqshrn2 %0.8h, %1.4s, #%2"                             \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vqshrn_high_n_s64(a, b, c)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       int64x2_t b_ = (b);                                              \
+       int32x2_t a_ = (a);                                              \
+       int32x4_t result = vcombine_s32                                  \
+                            (a_, vcreate_s32                            \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("sqshrn2 %0.4s, %1.2d, #%2"                             \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vqshrn_high_n_u16(a, b, c)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x8_t b_ = (b);                                             \
+       uint8x8_t a_ = (a);                                              \
+       uint8x16_t result = vcombine_u8                                  \
+                             (a_, vcreate_u8                            \
+                                    (__AARCH64_UINT64_C (0x0)));        \
+       __asm__ ("uqshrn2 %0.16b, %1.8h, #%2"                            \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vqshrn_high_n_u32(a, b, c)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x4_t b_ = (b);                                             \
+       uint16x4_t a_ = (a);                                             \
+       uint16x8_t result = vcombine_u16                                 \
+                             (a_, vcreate_u16                           \
+                                    (__AARCH64_UINT64_C (0x0)));        \
+       __asm__ ("uqshrn2 %0.8h, %1.4s, #%2"                             \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vqshrn_high_n_u64(a, b, c)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       uint64x2_t b_ = (b);                                             \
+       uint32x2_t a_ = (a);                                             \
+       uint32x4_t result = vcombine_u32                                 \
+                             (a_, vcreate_u32                           \
+                                    (__AARCH64_UINT64_C (0x0)));        \
+       __asm__ ("uqshrn2 %0.4s, %1.2d, #%2"                             \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vqshrun_high_n_s16(a, b, c)                                     \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x8_t b_ = (b);                                              \
+       uint8x8_t a_ = (a);                                              \
+       uint8x16_t result = vcombine_u8                                  \
+                             (a_, vcreate_u8                            \
+                                    (__AARCH64_UINT64_C (0x0)));        \
+       __asm__ ("sqshrun2 %0.16b, %1.8h, #%2"                           \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vqshrun_high_n_s32(a, b, c)                                     \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x4_t b_ = (b);                                              \
+       uint16x4_t a_ = (a);                                             \
+       uint16x8_t result = vcombine_u16                                 \
+                             (a_, vcreate_u16                           \
+                                    (__AARCH64_UINT64_C (0x0)));        \
+       __asm__ ("sqshrun2 %0.8h, %1.4s, #%2"                            \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vqshrun_high_n_s64(a, b, c)                                     \
+  __extension__                                                         \
+    ({                                                                  \
+       int64x2_t b_ = (b);                                              \
+       uint32x2_t a_ = (a);                                             \
+       uint32x4_t result = vcombine_u32                                 \
+                             (a_, vcreate_u32                           \
+                                    (__AARCH64_UINT64_C (0x0)));        \
+       __asm__ ("sqshrun2 %0.4s, %1.2d, #%2"                            \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vrshrn_high_n_s16(a, b, c)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x8_t b_ = (b);                                              \
+       int8x8_t a_ = (a);                                               \
+       int8x16_t result = vcombine_s8                                   \
+                            (a_, vcreate_s8                             \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("rshrn2 %0.16b,%1.8h,#%2"                               \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vrshrn_high_n_s32(a, b, c)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x4_t b_ = (b);                                              \
+       int16x4_t a_ = (a);                                              \
+       int16x8_t result = vcombine_s16                                  \
+                            (a_, vcreate_s16                            \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("rshrn2 %0.8h,%1.4s,#%2"                                \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vrshrn_high_n_s64(a, b, c)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       int64x2_t b_ = (b);                                              \
+       int32x2_t a_ = (a);                                              \
+       int32x4_t result = vcombine_s32                                  \
+                            (a_, vcreate_s32                            \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("rshrn2 %0.4s,%1.2d,#%2"                                \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vrshrn_high_n_u16(a, b, c)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x8_t b_ = (b);                                             \
+       uint8x8_t a_ = (a);                                              \
+       uint8x16_t result = vcombine_u8                                  \
+                            (a_, vcreate_u8                             \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("rshrn2 %0.16b,%1.8h,#%2"                               \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vrshrn_high_n_u32(a, b, c)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x4_t b_ = (b);                                             \
+       uint16x4_t a_ = (a);                                             \
+       uint16x8_t result = vcombine_u16                                 \
+                            (a_, vcreate_u16                            \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("rshrn2 %0.8h,%1.4s,#%2"                                \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vrshrn_high_n_u64(a, b, c)                                      \
+  __extension__                                                         \
+    ({                                                                  \
+       uint64x2_t b_ = (b);                                             \
+       uint32x2_t a_ = (a);                                             \
+       uint32x4_t result = vcombine_u32                                 \
+                            (a_, vcreate_u32                            \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("rshrn2 %0.4s,%1.2d,#%2"                                \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vrshrn_n_s16(a, b)                                              \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x8_t a_ = (a);                                              \
+       int8x8_t result;                                                 \
+       __asm__ ("rshrn %0.8b,%1.8h,%2"                                  \
+                : "=w"(result)                                          \
+                : "w"(a_), "i"(b)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vrshrn_n_s32(a, b)                                              \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x4_t a_ = (a);                                              \
+       int16x4_t result;                                                \
+       __asm__ ("rshrn %0.4h,%1.4s,%2"                                  \
+                : "=w"(result)                                          \
+                : "w"(a_), "i"(b)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vrshrn_n_s64(a, b)                                              \
+  __extension__                                                         \
+    ({                                                                  \
+       int64x2_t a_ = (a);                                              \
+       int32x2_t result;                                                \
+       __asm__ ("rshrn %0.2s,%1.2d,%2"                                  \
+                : "=w"(result)                                          \
+                : "w"(a_), "i"(b)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vrshrn_n_u16(a, b)                                              \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x8_t a_ = (a);                                             \
+       uint8x8_t result;                                                \
+       __asm__ ("rshrn %0.8b,%1.8h,%2"                                  \
+                : "=w"(result)                                          \
+                : "w"(a_), "i"(b)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vrshrn_n_u32(a, b)                                              \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x4_t a_ = (a);                                             \
+       uint16x4_t result;                                               \
+       __asm__ ("rshrn %0.4h,%1.4s,%2"                                  \
+                : "=w"(result)                                          \
+                : "w"(a_), "i"(b)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vrshrn_n_u64(a, b)                                              \
+  __extension__                                                         \
+    ({                                                                  \
+       uint64x2_t a_ = (a);                                             \
+       uint32x2_t result;                                               \
+       __asm__ ("rshrn %0.2s,%1.2d,%2"                                  \
+                : "=w"(result)                                          \
+                : "w"(a_), "i"(b)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrte_u32 (uint32x2_t a)
+{
+  uint32x2_t result;
+  __asm__ ("ursqrte %0.2s,%1.2s"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrteq_u32 (uint32x4_t a)
+{
+  uint32x4_t result;
+  __asm__ ("ursqrte %0.4s,%1.4s"
+           : "=w"(result)
+           : "w"(a)
+           : /* No clobbers */);
+  return result;
+}
+
+#define vshrn_high_n_s16(a, b, c)                                       \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x8_t b_ = (b);                                              \
+       int8x8_t a_ = (a);                                               \
+       int8x16_t result = vcombine_s8                                   \
+                            (a_, vcreate_s8                             \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("shrn2 %0.16b,%1.8h,#%2"                                \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vshrn_high_n_s32(a, b, c)                                       \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x4_t b_ = (b);                                              \
+       int16x4_t a_ = (a);                                              \
+       int16x8_t result = vcombine_s16                                  \
+                            (a_, vcreate_s16                            \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("shrn2 %0.8h,%1.4s,#%2"                                 \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vshrn_high_n_s64(a, b, c)                                       \
+  __extension__                                                         \
+    ({                                                                  \
+       int64x2_t b_ = (b);                                              \
+       int32x2_t a_ = (a);                                              \
+       int32x4_t result = vcombine_s32                                  \
+                            (a_, vcreate_s32                            \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("shrn2 %0.4s,%1.2d,#%2"                                 \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vshrn_high_n_u16(a, b, c)                                       \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x8_t b_ = (b);                                             \
+       uint8x8_t a_ = (a);                                              \
+       uint8x16_t result = vcombine_u8                                  \
+                            (a_, vcreate_u8                             \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("shrn2 %0.16b,%1.8h,#%2"                                \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vshrn_high_n_u32(a, b, c)                                       \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x4_t b_ = (b);                                             \
+       uint16x4_t a_ = (a);                                             \
+       uint16x8_t result = vcombine_u16                                 \
+                            (a_, vcreate_u16                            \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("shrn2 %0.8h,%1.4s,#%2"                                 \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vshrn_high_n_u64(a, b, c)                                       \
+  __extension__                                                         \
+    ({                                                                  \
+       uint64x2_t b_ = (b);                                             \
+       uint32x2_t a_ = (a);                                             \
+       uint32x4_t result = vcombine_u32                                 \
+                            (a_, vcreate_u32                            \
+                                   (__AARCH64_UINT64_C (0x0)));         \
+       __asm__ ("shrn2 %0.4s,%1.2d,#%2"                                 \
+                : "+w"(result)                                          \
+                : "w"(b_), "i"(c)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vshrn_n_s16(a, b)                                               \
+  __extension__                                                         \
+    ({                                                                  \
+       int16x8_t a_ = (a);                                              \
+       int8x8_t result;                                                 \
+       __asm__ ("shrn %0.8b,%1.8h,%2"                                   \
+                : "=w"(result)                                          \
+                : "w"(a_), "i"(b)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vshrn_n_s32(a, b)                                               \
+  __extension__                                                         \
+    ({                                                                  \
+       int32x4_t a_ = (a);                                              \
+       int16x4_t result;                                                \
+       __asm__ ("shrn %0.4h,%1.4s,%2"                                   \
+                : "=w"(result)                                          \
+                : "w"(a_), "i"(b)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vshrn_n_s64(a, b)                                               \
+  __extension__                                                         \
+    ({                                                                  \
+       int64x2_t a_ = (a);                                              \
+       int32x2_t result;                                                \
+       __asm__ ("shrn %0.2s,%1.2d,%2"                                   \
+                : "=w"(result)                                          \
+                : "w"(a_), "i"(b)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vshrn_n_u16(a, b)                                               \
+  __extension__                                                         \
+    ({                                                                  \
+       uint16x8_t a_ = (a);                                             \
+       uint8x8_t result;                                                \
+       __asm__ ("shrn %0.8b,%1.8h,%2"                                   \
+                : "=w"(result)                                          \
+                : "w"(a_), "i"(b)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vshrn_n_u32(a, b)                                               \
+  __extension__                                                         \
+    ({                                                                  \
+       uint32x4_t a_ = (a);                                             \
+       uint16x4_t result;                                               \
+       __asm__ ("shrn %0.4h,%1.4s,%2"                                   \
+                : "=w"(result)                                          \
+                : "w"(a_), "i"(b)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vshrn_n_u64(a, b)                                               \
+  __extension__                                                         \
+    ({                                                                  \
+       uint64x2_t a_ = (a);                                             \
+       uint32x2_t result;                                               \
+       __asm__ ("shrn %0.2s,%1.2d,%2"                                   \
+                : "=w"(result)                                          \
+                : "w"(a_), "i"(b)                                       \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vsli_n_p8(a, b, c)                                              \
+  __extension__                                                         \
+    ({                                                                  \
+       poly8x8_t b_ = (b);                                              \
+       poly8x8_t a_ = (a);                                              \
+       poly8x8_t result;                                                \
+       __asm__ ("sli %0.8b,%2.8b,%3"                                    \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vsli_n_p16(a, b, c)                                             \
+  __extension__                                                         \
+    ({                                                                  \
+       poly16x4_t b_ = (b);                                             \
+       poly16x4_t a_ = (a);                                             \
+       poly16x4_t result;                                               \
+       __asm__ ("sli %0.4h,%2.4h,%3"                                    \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vsliq_n_p8(a, b, c)                                             \
+  __extension__                                                         \
+    ({                                                                  \
+       poly8x16_t b_ = (b);                                             \
+       poly8x16_t a_ = (a);                                             \
+       poly8x16_t result;                                               \
+       __asm__ ("sli %0.16b,%2.16b,%3"                                  \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vsliq_n_p16(a, b, c)                                            \
+  __extension__                                                         \
+    ({                                                                  \
+       poly16x8_t b_ = (b);                                             \
+       poly16x8_t a_ = (a);                                             \
+       poly16x8_t result;                                               \
+       __asm__ ("sli %0.8h,%2.8h,%3"                                    \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vsri_n_p8(a, b, c)                                              \
+  __extension__                                                         \
+    ({                                                                  \
+       poly8x8_t b_ = (b);                                              \
+       poly8x8_t a_ = (a);                                              \
+       poly8x8_t result;                                                \
+       __asm__ ("sri %0.8b,%2.8b,%3"                                    \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vsri_n_p16(a, b, c)                                             \
+  __extension__                                                         \
+    ({                                                                  \
+       poly16x4_t b_ = (b);                                             \
+       poly16x4_t a_ = (a);                                             \
+       poly16x4_t result;                                               \
+       __asm__ ("sri %0.4h,%2.4h,%3"                                    \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vsri_n_p64(a, b, c)						\
+  __extension__								\
+    ({									\
+       poly64x1_t b_ = (b);						\
+       poly64x1_t a_ = (a);						\
+       poly64x1_t result;						\
+       __asm__ ("sri %d0,%d2,%3"					\
+		: "=w"(result)						\
+		: "0"(a_), "w"(b_), "i"(c)				\
+		: /* No clobbers.  */);					\
+       result;								\
+     })
+
+#define vsriq_n_p8(a, b, c)                                             \
+  __extension__                                                         \
+    ({                                                                  \
+       poly8x16_t b_ = (b);                                             \
+       poly8x16_t a_ = (a);                                             \
+       poly8x16_t result;                                               \
+       __asm__ ("sri %0.16b,%2.16b,%3"                                  \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vsriq_n_p16(a, b, c)                                            \
+  __extension__                                                         \
+    ({                                                                  \
+       poly16x8_t b_ = (b);                                             \
+       poly16x8_t a_ = (a);                                             \
+       poly16x8_t result;                                               \
+       __asm__ ("sri %0.8h,%2.8h,%3"                                    \
+                : "=w"(result)                                          \
+                : "0"(a_), "w"(b_), "i"(c)                              \
+                : /* No clobbers */);                                   \
+       result;                                                          \
+     })
+
+#define vsriq_n_p64(a, b, c)						\
+  __extension__								\
+    ({									\
+       poly64x2_t b_ = (b);						\
+       poly64x2_t a_ = (a);						\
+       poly64x2_t result;						\
+       __asm__ ("sri %0.2d,%2.2d,%3"					\
+		: "=w"(result)						\
+		: "0"(a_), "w"(b_), "i"(c)				\
+		: /* No clobbers.  */);					\
+       result;								\
+     })
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtst_p8 (poly8x8_t a, poly8x8_t b)
+{
+  return (uint8x8_t) ((((uint8x8_t) a) & ((uint8x8_t) b))
+		       != 0);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtst_p16 (poly16x4_t a, poly16x4_t b)
+{
+  return (uint16x4_t) ((((uint16x4_t) a) & ((uint16x4_t) b))
+		       != 0);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtst_p64 (poly64x1_t a, poly64x1_t b)
+{
+  return (uint64x1_t) ((a & b) != __AARCH64_INT64_C (0));
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtstq_p8 (poly8x16_t a, poly8x16_t b)
+{
+  return (uint8x16_t) ((((uint8x16_t) a) & ((uint8x16_t) b))
+		       != 0);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtstq_p16 (poly16x8_t a, poly16x8_t b)
+{
+  return (uint16x8_t) ((((uint16x8_t) a) & ((uint16x8_t) b))
+		       != 0);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtstq_p64 (poly64x2_t a, poly64x2_t b)
+{
+  return (uint64x2_t) ((((uint64x2_t) a) & ((uint64x2_t) b))
+		       != __AARCH64_INT64_C (0));
+}
+
+/* End of temporary inline asm implementations.  */
+
+/* Start of temporary inline asm for vldn, vstn and friends.  */
+
+/* Create struct element types for duplicating loads.
+
+   Create 2 element structures of:
+
+   +------+----+----+----+----+
+   |      | 8  | 16 | 32 | 64 |
+   +------+----+----+----+----+
+   |int   | Y  | Y  | N  | N  |
+   +------+----+----+----+----+
+   |uint  | Y  | Y  | N  | N  |
+   +------+----+----+----+----+
+   |float | -  | Y  | N  | N  |
+   +------+----+----+----+----+
+   |poly  | Y  | Y  | -  | -  |
+   +------+----+----+----+----+
+
+   Create 3 element structures of:
+
+   +------+----+----+----+----+
+   |      | 8  | 16 | 32 | 64 |
+   +------+----+----+----+----+
+   |int   | Y  | Y  | Y  | Y  |
+   +------+----+----+----+----+
+   |uint  | Y  | Y  | Y  | Y  |
+   +------+----+----+----+----+
+   |float | -  | Y  | Y  | Y  |
+   +------+----+----+----+----+
+   |poly  | Y  | Y  | -  | -  |
+   +------+----+----+----+----+
+
+   Create 4 element structures of:
+
+   +------+----+----+----+----+
+   |      | 8  | 16 | 32 | 64 |
+   +------+----+----+----+----+
+   |int   | Y  | N  | N  | Y  |
+   +------+----+----+----+----+
+   |uint  | Y  | N  | N  | Y  |
+   +------+----+----+----+----+
+   |float | -  | N  | N  | Y  |
+   +------+----+----+----+----+
+   |poly  | Y  | N  | -  | -  |
+   +------+----+----+----+----+
+
+  This is required for casting memory reference.  */
+#define __STRUCTN(t, sz, nelem)			\
+  typedef struct t ## sz ## x ## nelem ## _t {	\
+    t ## sz ## _t val[nelem];			\
+  }  t ## sz ## x ## nelem ## _t;
+
+/* 2-element structs.  */
+__STRUCTN (int, 8, 2)
+__STRUCTN (int, 16, 2)
+__STRUCTN (uint, 8, 2)
+__STRUCTN (uint, 16, 2)
+__STRUCTN (float, 16, 2)
+__STRUCTN (poly, 8, 2)
+__STRUCTN (poly, 16, 2)
+/* 3-element structs.  */
+__STRUCTN (int, 8, 3)
+__STRUCTN (int, 16, 3)
+__STRUCTN (int, 32, 3)
+__STRUCTN (int, 64, 3)
+__STRUCTN (uint, 8, 3)
+__STRUCTN (uint, 16, 3)
+__STRUCTN (uint, 32, 3)
+__STRUCTN (uint, 64, 3)
+__STRUCTN (float, 16, 3)
+__STRUCTN (float, 32, 3)
+__STRUCTN (float, 64, 3)
+__STRUCTN (poly, 8, 3)
+__STRUCTN (poly, 16, 3)
+/* 4-element structs.  */
+__STRUCTN (int, 8, 4)
+__STRUCTN (int, 64, 4)
+__STRUCTN (uint, 8, 4)
+__STRUCTN (uint, 64, 4)
+__STRUCTN (poly, 8, 4)
+__STRUCTN (float, 64, 4)
+#undef __STRUCTN
+
+
+#define __ST2_LANE_FUNC(intype, largetype, ptrtype, mode,		     \
+			qmode, ptr_mode, funcsuffix, signedtype)	     \
+__extension__ extern __inline void					     \
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) \
+vst2_lane_ ## funcsuffix (ptrtype *__ptr,				     \
+			  intype __b, const int __c)			     \
+{									     \
+  __builtin_aarch64_simd_oi __o;					     \
+  largetype __temp;							     \
+  __temp.val[0]								     \
+    = vcombine_##funcsuffix (__b.val[0],				     \
+			     vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+  __temp.val[1]								     \
+    = vcombine_##funcsuffix (__b.val[1],				     \
+			     vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+  __o = __builtin_aarch64_set_qregoi##qmode (__o,			     \
+					     (signedtype) __temp.val[0], 0); \
+  __o = __builtin_aarch64_set_qregoi##qmode (__o,			     \
+					     (signedtype) __temp.val[1], 1); \
+  __builtin_aarch64_st2_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *)  \
+				     __ptr, __o, __c);			     \
+}
+
+__ST2_LANE_FUNC (float16x4x2_t, float16x8x2_t, float16_t, v4hf, v8hf, hf, f16,
+		 float16x8_t)
+__ST2_LANE_FUNC (float32x2x2_t, float32x4x2_t, float32_t, v2sf, v4sf, sf, f32,
+		 float32x4_t)
+__ST2_LANE_FUNC (float64x1x2_t, float64x2x2_t, float64_t, df, v2df, df, f64,
+		 float64x2_t)
+__ST2_LANE_FUNC (poly8x8x2_t, poly8x16x2_t, poly8_t, v8qi, v16qi, qi, p8,
+		 int8x16_t)
+__ST2_LANE_FUNC (poly16x4x2_t, poly16x8x2_t, poly16_t, v4hi, v8hi, hi, p16,
+		 int16x8_t)
+__ST2_LANE_FUNC (poly64x1x2_t, poly64x2x2_t, poly64_t, di, v2di_ssps, di, p64,
+		 poly64x2_t)
+__ST2_LANE_FUNC (int8x8x2_t, int8x16x2_t, int8_t, v8qi, v16qi, qi, s8,
+		 int8x16_t)
+__ST2_LANE_FUNC (int16x4x2_t, int16x8x2_t, int16_t, v4hi, v8hi, hi, s16,
+		 int16x8_t)
+__ST2_LANE_FUNC (int32x2x2_t, int32x4x2_t, int32_t, v2si, v4si, si, s32,
+		 int32x4_t)
+__ST2_LANE_FUNC (int64x1x2_t, int64x2x2_t, int64_t, di, v2di, di, s64,
+		 int64x2_t)
+__ST2_LANE_FUNC (uint8x8x2_t, uint8x16x2_t, uint8_t, v8qi, v16qi, qi, u8,
+		 int8x16_t)
+__ST2_LANE_FUNC (uint16x4x2_t, uint16x8x2_t, uint16_t, v4hi, v8hi, hi, u16,
+		 int16x8_t)
+__ST2_LANE_FUNC (uint32x2x2_t, uint32x4x2_t, uint32_t, v2si, v4si, si, u32,
+		 int32x4_t)
+__ST2_LANE_FUNC (uint64x1x2_t, uint64x2x2_t, uint64_t, di, v2di, di, u64,
+		 int64x2_t)
+
+#undef __ST2_LANE_FUNC
+#define __ST2_LANE_FUNC(intype, ptrtype, mode, ptr_mode, funcsuffix)	    \
+__extension__ extern __inline void					    \
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) \
+vst2q_lane_ ## funcsuffix (ptrtype *__ptr,				    \
+			   intype __b, const int __c)			    \
+{									    \
+  union { intype __i;							    \
+	  __builtin_aarch64_simd_oi __o; } __temp = { __b };		    \
+  __builtin_aarch64_st2_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
+				    __ptr, __temp.__o, __c);		    \
+}
+
+__ST2_LANE_FUNC (float16x8x2_t, float16_t, v8hf, hf, f16)
+__ST2_LANE_FUNC (float32x4x2_t, float32_t, v4sf, sf, f32)
+__ST2_LANE_FUNC (float64x2x2_t, float64_t, v2df, df, f64)
+__ST2_LANE_FUNC (poly8x16x2_t, poly8_t, v16qi, qi, p8)
+__ST2_LANE_FUNC (poly16x8x2_t, poly16_t, v8hi, hi, p16)
+__ST2_LANE_FUNC (poly64x2x2_t, poly64_t, v2di, di, p64)
+__ST2_LANE_FUNC (int8x16x2_t, int8_t, v16qi, qi, s8)
+__ST2_LANE_FUNC (int16x8x2_t, int16_t, v8hi, hi, s16)
+__ST2_LANE_FUNC (int32x4x2_t, int32_t, v4si, si, s32)
+__ST2_LANE_FUNC (int64x2x2_t, int64_t, v2di, di, s64)
+__ST2_LANE_FUNC (uint8x16x2_t, uint8_t, v16qi, qi, u8)
+__ST2_LANE_FUNC (uint16x8x2_t, uint16_t, v8hi, hi, u16)
+__ST2_LANE_FUNC (uint32x4x2_t, uint32_t, v4si, si, u32)
+__ST2_LANE_FUNC (uint64x2x2_t, uint64_t, v2di, di, u64)
+
+#define __ST3_LANE_FUNC(intype, largetype, ptrtype, mode,		     \
+			qmode, ptr_mode, funcsuffix, signedtype)	     \
+__extension__ extern __inline void					     \
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) \
+vst3_lane_ ## funcsuffix (ptrtype *__ptr,				     \
+			  intype __b, const int __c)			     \
+{									     \
+  __builtin_aarch64_simd_ci __o;					     \
+  largetype __temp;							     \
+  __temp.val[0]								     \
+    = vcombine_##funcsuffix (__b.val[0],				     \
+			     vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+  __temp.val[1]								     \
+    = vcombine_##funcsuffix (__b.val[1],				     \
+			     vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+  __temp.val[2]								     \
+    = vcombine_##funcsuffix (__b.val[2],				     \
+			     vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+  __o = __builtin_aarch64_set_qregci##qmode (__o,			     \
+					     (signedtype) __temp.val[0], 0); \
+  __o = __builtin_aarch64_set_qregci##qmode (__o,			     \
+					     (signedtype) __temp.val[1], 1); \
+  __o = __builtin_aarch64_set_qregci##qmode (__o,			     \
+					     (signedtype) __temp.val[2], 2); \
+  __builtin_aarch64_st3_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *)  \
+				     __ptr, __o, __c);			     \
+}
+
+__ST3_LANE_FUNC (float16x4x3_t, float16x8x3_t, float16_t, v4hf, v8hf, hf, f16,
+		 float16x8_t)
+__ST3_LANE_FUNC (float32x2x3_t, float32x4x3_t, float32_t, v2sf, v4sf, sf, f32,
+		 float32x4_t)
+__ST3_LANE_FUNC (float64x1x3_t, float64x2x3_t, float64_t, df, v2df, df, f64,
+		 float64x2_t)
+__ST3_LANE_FUNC (poly8x8x3_t, poly8x16x3_t, poly8_t, v8qi, v16qi, qi, p8,
+		 int8x16_t)
+__ST3_LANE_FUNC (poly16x4x3_t, poly16x8x3_t, poly16_t, v4hi, v8hi, hi, p16,
+		 int16x8_t)
+__ST3_LANE_FUNC (poly64x1x3_t, poly64x2x3_t, poly64_t, di, v2di_ssps, di, p64,
+		 poly64x2_t)
+__ST3_LANE_FUNC (int8x8x3_t, int8x16x3_t, int8_t, v8qi, v16qi, qi, s8,
+		 int8x16_t)
+__ST3_LANE_FUNC (int16x4x3_t, int16x8x3_t, int16_t, v4hi, v8hi, hi, s16,
+		 int16x8_t)
+__ST3_LANE_FUNC (int32x2x3_t, int32x4x3_t, int32_t, v2si, v4si, si, s32,
+		 int32x4_t)
+__ST3_LANE_FUNC (int64x1x3_t, int64x2x3_t, int64_t, di, v2di, di, s64,
+		 int64x2_t)
+__ST3_LANE_FUNC (uint8x8x3_t, uint8x16x3_t, uint8_t, v8qi, v16qi, qi, u8,
+		 int8x16_t)
+__ST3_LANE_FUNC (uint16x4x3_t, uint16x8x3_t, uint16_t, v4hi, v8hi, hi, u16,
+		 int16x8_t)
+__ST3_LANE_FUNC (uint32x2x3_t, uint32x4x3_t, uint32_t, v2si, v4si, si, u32,
+		 int32x4_t)
+__ST3_LANE_FUNC (uint64x1x3_t, uint64x2x3_t, uint64_t, di, v2di, di, u64,
+		 int64x2_t)
+
+#undef __ST3_LANE_FUNC
+#define __ST3_LANE_FUNC(intype, ptrtype, mode, ptr_mode, funcsuffix)	    \
+__extension__ extern __inline void					    \
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) \
+vst3q_lane_ ## funcsuffix (ptrtype *__ptr,				    \
+			   intype __b, const int __c)			    \
+{									    \
+  union { intype __i;							    \
+	  __builtin_aarch64_simd_ci __o; } __temp = { __b };		    \
+  __builtin_aarch64_st3_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
+				    __ptr, __temp.__o, __c);		    \
+}
+
+__ST3_LANE_FUNC (float16x8x3_t, float16_t, v8hf, hf, f16)
+__ST3_LANE_FUNC (float32x4x3_t, float32_t, v4sf, sf, f32)
+__ST3_LANE_FUNC (float64x2x3_t, float64_t, v2df, df, f64)
+__ST3_LANE_FUNC (poly8x16x3_t, poly8_t, v16qi, qi, p8)
+__ST3_LANE_FUNC (poly16x8x3_t, poly16_t, v8hi, hi, p16)
+__ST3_LANE_FUNC (poly64x2x3_t, poly64_t, v2di, di, p64)
+__ST3_LANE_FUNC (int8x16x3_t, int8_t, v16qi, qi, s8)
+__ST3_LANE_FUNC (int16x8x3_t, int16_t, v8hi, hi, s16)
+__ST3_LANE_FUNC (int32x4x3_t, int32_t, v4si, si, s32)
+__ST3_LANE_FUNC (int64x2x3_t, int64_t, v2di, di, s64)
+__ST3_LANE_FUNC (uint8x16x3_t, uint8_t, v16qi, qi, u8)
+__ST3_LANE_FUNC (uint16x8x3_t, uint16_t, v8hi, hi, u16)
+__ST3_LANE_FUNC (uint32x4x3_t, uint32_t, v4si, si, u32)
+__ST3_LANE_FUNC (uint64x2x3_t, uint64_t, v2di, di, u64)
+
+#define __ST4_LANE_FUNC(intype, largetype, ptrtype, mode,		     \
+			qmode, ptr_mode, funcsuffix, signedtype)	     \
+__extension__ extern __inline void					     \
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) \
+vst4_lane_ ## funcsuffix (ptrtype *__ptr,				     \
+			  intype __b, const int __c)			     \
+{									     \
+  __builtin_aarch64_simd_xi __o;					     \
+  largetype __temp;							     \
+  __temp.val[0]								     \
+    = vcombine_##funcsuffix (__b.val[0],				     \
+			     vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+  __temp.val[1]								     \
+    = vcombine_##funcsuffix (__b.val[1],				     \
+			     vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+  __temp.val[2]								     \
+    = vcombine_##funcsuffix (__b.val[2],				     \
+			     vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+  __temp.val[3]								     \
+    = vcombine_##funcsuffix (__b.val[3],				     \
+			     vcreate_##funcsuffix (__AARCH64_UINT64_C (0))); \
+  __o = __builtin_aarch64_set_qregxi##qmode (__o,			     \
+					     (signedtype) __temp.val[0], 0); \
+  __o = __builtin_aarch64_set_qregxi##qmode (__o,			     \
+					     (signedtype) __temp.val[1], 1); \
+  __o = __builtin_aarch64_set_qregxi##qmode (__o,			     \
+					     (signedtype) __temp.val[2], 2); \
+  __o = __builtin_aarch64_set_qregxi##qmode (__o,			     \
+					     (signedtype) __temp.val[3], 3); \
+  __builtin_aarch64_st4_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *)  \
+				     __ptr, __o, __c);			     \
+}
+
+__ST4_LANE_FUNC (float16x4x4_t, float16x8x4_t, float16_t, v4hf, v8hf, hf, f16,
+		 float16x8_t)
+__ST4_LANE_FUNC (float32x2x4_t, float32x4x4_t, float32_t, v2sf, v4sf, sf, f32,
+		 float32x4_t)
+__ST4_LANE_FUNC (float64x1x4_t, float64x2x4_t, float64_t, df, v2df, df, f64,
+		 float64x2_t)
+__ST4_LANE_FUNC (poly8x8x4_t, poly8x16x4_t, poly8_t, v8qi, v16qi, qi, p8,
+		 int8x16_t)
+__ST4_LANE_FUNC (poly16x4x4_t, poly16x8x4_t, poly16_t, v4hi, v8hi, hi, p16,
+		 int16x8_t)
+__ST4_LANE_FUNC (poly64x1x4_t, poly64x2x4_t, poly64_t, di, v2di_ssps, di, p64,
+		 poly64x2_t)
+__ST4_LANE_FUNC (int8x8x4_t, int8x16x4_t, int8_t, v8qi, v16qi, qi, s8,
+		 int8x16_t)
+__ST4_LANE_FUNC (int16x4x4_t, int16x8x4_t, int16_t, v4hi, v8hi, hi, s16,
+		 int16x8_t)
+__ST4_LANE_FUNC (int32x2x4_t, int32x4x4_t, int32_t, v2si, v4si, si, s32,
+		 int32x4_t)
+__ST4_LANE_FUNC (int64x1x4_t, int64x2x4_t, int64_t, di, v2di, di, s64,
+		 int64x2_t)
+__ST4_LANE_FUNC (uint8x8x4_t, uint8x16x4_t, uint8_t, v8qi, v16qi, qi, u8,
+		 int8x16_t)
+__ST4_LANE_FUNC (uint16x4x4_t, uint16x8x4_t, uint16_t, v4hi, v8hi, hi, u16,
+		 int16x8_t)
+__ST4_LANE_FUNC (uint32x2x4_t, uint32x4x4_t, uint32_t, v2si, v4si, si, u32,
+		 int32x4_t)
+__ST4_LANE_FUNC (uint64x1x4_t, uint64x2x4_t, uint64_t, di, v2di, di, u64,
+		 int64x2_t)
+
+#undef __ST4_LANE_FUNC
+#define __ST4_LANE_FUNC(intype, ptrtype, mode, ptr_mode, funcsuffix)	    \
+__extension__ extern __inline void					    \
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) \
+vst4q_lane_ ## funcsuffix (ptrtype *__ptr,				    \
+			   intype __b, const int __c)			    \
+{									    \
+  union { intype __i;							    \
+	  __builtin_aarch64_simd_xi __o; } __temp = { __b };		    \
+  __builtin_aarch64_st4_lane##mode ((__builtin_aarch64_simd_ ## ptr_mode *) \
+				    __ptr, __temp.__o, __c);		    \
+}
+
+__ST4_LANE_FUNC (float16x8x4_t, float16_t, v8hf, hf, f16)
+__ST4_LANE_FUNC (float32x4x4_t, float32_t, v4sf, sf, f32)
+__ST4_LANE_FUNC (float64x2x4_t, float64_t, v2df, df, f64)
+__ST4_LANE_FUNC (poly8x16x4_t, poly8_t, v16qi, qi, p8)
+__ST4_LANE_FUNC (poly16x8x4_t, poly16_t, v8hi, hi, p16)
+__ST4_LANE_FUNC (poly64x2x4_t, poly64_t, v2di, di, p64)
+__ST4_LANE_FUNC (int8x16x4_t, int8_t, v16qi, qi, s8)
+__ST4_LANE_FUNC (int16x8x4_t, int16_t, v8hi, hi, s16)
+__ST4_LANE_FUNC (int32x4x4_t, int32_t, v4si, si, s32)
+__ST4_LANE_FUNC (int64x2x4_t, int64_t, v2di, di, s64)
+__ST4_LANE_FUNC (uint8x16x4_t, uint8_t, v16qi, qi, u8)
+__ST4_LANE_FUNC (uint16x8x4_t, uint16_t, v8hi, hi, u16)
+__ST4_LANE_FUNC (uint32x4x4_t, uint32_t, v4si, si, u32)
+__ST4_LANE_FUNC (uint64x2x4_t, uint64_t, v2di, di, u64)
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddlv_s32 (int32x2_t a)
+{
+  int64_t result;
+  __asm__ ("saddlp %0.1d, %1.2s" : "=w"(result) : "w"(a) : );
+  return result;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddlv_u32 (uint32x2_t a)
+{
+  uint64_t result;
+  __asm__ ("uaddlp %0.1d, %1.2s" : "=w"(result) : "w"(a) : );
+  return result;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulh_laneq_s16 (int16x4_t __a, int16x8_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmulh_laneqv4hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulh_laneq_s32 (int32x2_t __a, int32x4_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmulh_laneqv2si (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulhq_laneq_s16 (int16x8_t __a, int16x8_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmulh_laneqv8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulhq_laneq_s32 (int32x4_t __a, int32x4_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmulh_laneqv4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulh_laneq_s16 (int16x4_t __a, int16x8_t __b, const int __c)
+{
+  return  __builtin_aarch64_sqrdmulh_laneqv4hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulh_laneq_s32 (int32x2_t __a, int32x4_t __b, const int __c)
+{
+  return __builtin_aarch64_sqrdmulh_laneqv2si (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulhq_laneq_s16 (int16x8_t __a, int16x8_t __b, const int __c)
+{
+  return __builtin_aarch64_sqrdmulh_laneqv8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulhq_laneq_s32 (int32x4_t __a, int32x4_t __b, const int __c)
+{
+  return __builtin_aarch64_sqrdmulh_laneqv4si (__a, __b, __c);
+}
+
+/* Table intrinsics.  */
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl1_p8 (poly8x16_t a, uint8x8_t b)
+{
+  poly8x8_t result;
+  __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl1_s8 (int8x16_t a, uint8x8_t b)
+{
+  int8x8_t result;
+  __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl1_u8 (uint8x16_t a, uint8x8_t b)
+{
+  uint8x8_t result;
+  __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl1q_p8 (poly8x16_t a, uint8x16_t b)
+{
+  poly8x16_t result;
+  __asm__ ("tbl %0.16b, {%1.16b}, %2.16b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl1q_s8 (int8x16_t a, uint8x16_t b)
+{
+  int8x16_t result;
+  __asm__ ("tbl %0.16b, {%1.16b}, %2.16b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl1q_u8 (uint8x16_t a, uint8x16_t b)
+{
+  uint8x16_t result;
+  __asm__ ("tbl %0.16b, {%1.16b}, %2.16b"
+           : "=w"(result)
+           : "w"(a), "w"(b)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx1_s8 (int8x8_t r, int8x16_t tab, uint8x8_t idx)
+{
+  int8x8_t result = r;
+  __asm__ ("tbx %0.8b,{%1.16b},%2.8b"
+           : "+w"(result)
+           : "w"(tab), "w"(idx)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx1_u8 (uint8x8_t r, uint8x16_t tab, uint8x8_t idx)
+{
+  uint8x8_t result = r;
+  __asm__ ("tbx %0.8b,{%1.16b},%2.8b"
+           : "+w"(result)
+           : "w"(tab), "w"(idx)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx1_p8 (poly8x8_t r, poly8x16_t tab, uint8x8_t idx)
+{
+  poly8x8_t result = r;
+  __asm__ ("tbx %0.8b,{%1.16b},%2.8b"
+           : "+w"(result)
+           : "w"(tab), "w"(idx)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx1q_s8 (int8x16_t r, int8x16_t tab, uint8x16_t idx)
+{
+  int8x16_t result = r;
+  __asm__ ("tbx %0.16b,{%1.16b},%2.16b"
+           : "+w"(result)
+           : "w"(tab), "w"(idx)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx1q_u8 (uint8x16_t r, uint8x16_t tab, uint8x16_t idx)
+{
+  uint8x16_t result = r;
+  __asm__ ("tbx %0.16b,{%1.16b},%2.16b"
+           : "+w"(result)
+           : "w"(tab), "w"(idx)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx1q_p8 (poly8x16_t r, poly8x16_t tab, uint8x16_t idx)
+{
+  poly8x16_t result = r;
+  __asm__ ("tbx %0.16b,{%1.16b},%2.16b"
+           : "+w"(result)
+           : "w"(tab), "w"(idx)
+           : /* No clobbers */);
+  return result;
+}
+
+/* V7 legacy table intrinsics.  */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbl1_s8 (int8x8_t tab, int8x8_t idx)
+{
+  int8x8_t result;
+  int8x16_t temp = vcombine_s8 (tab, vcreate_s8 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+           : "=w"(result)
+           : "w"(temp), "w"(idx)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbl1_u8 (uint8x8_t tab, uint8x8_t idx)
+{
+  uint8x8_t result;
+  uint8x16_t temp = vcombine_u8 (tab, vcreate_u8 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+           : "=w"(result)
+           : "w"(temp), "w"(idx)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbl1_p8 (poly8x8_t tab, uint8x8_t idx)
+{
+  poly8x8_t result;
+  poly8x16_t temp = vcombine_p8 (tab, vcreate_p8 (__AARCH64_UINT64_C (0x0)));
+  __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+           : "=w"(result)
+           : "w"(temp), "w"(idx)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbl2_s8 (int8x8x2_t tab, int8x8_t idx)
+{
+  int8x8_t result;
+  int8x16_t temp = vcombine_s8 (tab.val[0], tab.val[1]);
+  __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+           : "=w"(result)
+           : "w"(temp), "w"(idx)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbl2_u8 (uint8x8x2_t tab, uint8x8_t idx)
+{
+  uint8x8_t result;
+  uint8x16_t temp = vcombine_u8 (tab.val[0], tab.val[1]);
+  __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+           : "=w"(result)
+           : "w"(temp), "w"(idx)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbl2_p8 (poly8x8x2_t tab, uint8x8_t idx)
+{
+  poly8x8_t result;
+  poly8x16_t temp = vcombine_p8 (tab.val[0], tab.val[1]);
+  __asm__ ("tbl %0.8b, {%1.16b}, %2.8b"
+           : "=w"(result)
+           : "w"(temp), "w"(idx)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbl3_s8 (int8x8x3_t tab, int8x8_t idx)
+{
+  int8x8_t result;
+  int8x16x2_t temp;
+  __builtin_aarch64_simd_oi __o;
+  temp.val[0] = vcombine_s8 (tab.val[0], tab.val[1]);
+  temp.val[1] = vcombine_s8 (tab.val[2], vcreate_s8 (__AARCH64_UINT64_C (0x0)));
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[1], 1);
+  result = __builtin_aarch64_tbl3v8qi (__o, idx);
+  return result;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbl3_u8 (uint8x8x3_t tab, uint8x8_t idx)
+{
+  uint8x8_t result;
+  uint8x16x2_t temp;
+  __builtin_aarch64_simd_oi __o;
+  temp.val[0] = vcombine_u8 (tab.val[0], tab.val[1]);
+  temp.val[1] = vcombine_u8 (tab.val[2], vcreate_u8 (__AARCH64_UINT64_C (0x0)));
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[1], 1);
+  result = (uint8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
+  return result;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbl3_p8 (poly8x8x3_t tab, uint8x8_t idx)
+{
+  poly8x8_t result;
+  poly8x16x2_t temp;
+  __builtin_aarch64_simd_oi __o;
+  temp.val[0] = vcombine_p8 (tab.val[0], tab.val[1]);
+  temp.val[1] = vcombine_p8 (tab.val[2], vcreate_p8 (__AARCH64_UINT64_C (0x0)));
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[1], 1);
+  result = (poly8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
+  return result;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbl4_s8 (int8x8x4_t tab, int8x8_t idx)
+{
+  int8x8_t result;
+  int8x16x2_t temp;
+  __builtin_aarch64_simd_oi __o;
+  temp.val[0] = vcombine_s8 (tab.val[0], tab.val[1]);
+  temp.val[1] = vcombine_s8 (tab.val[2], tab.val[3]);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[1], 1);
+  result = __builtin_aarch64_tbl3v8qi (__o, idx);
+  return result;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbl4_u8 (uint8x8x4_t tab, uint8x8_t idx)
+{
+  uint8x8_t result;
+  uint8x16x2_t temp;
+  __builtin_aarch64_simd_oi __o;
+  temp.val[0] = vcombine_u8 (tab.val[0], tab.val[1]);
+  temp.val[1] = vcombine_u8 (tab.val[2], tab.val[3]);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[1], 1);
+  result = (uint8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
+  return result;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbl4_p8 (poly8x8x4_t tab, uint8x8_t idx)
+{
+  poly8x8_t result;
+  poly8x16x2_t temp;
+  __builtin_aarch64_simd_oi __o;
+  temp.val[0] = vcombine_p8 (tab.val[0], tab.val[1]);
+  temp.val[1] = vcombine_p8 (tab.val[2], tab.val[3]);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[1], 1);
+  result = (poly8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
+  return result;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbx2_s8 (int8x8_t r, int8x8x2_t tab, int8x8_t idx)
+{
+  int8x8_t result = r;
+  int8x16_t temp = vcombine_s8 (tab.val[0], tab.val[1]);
+  __asm__ ("tbx %0.8b, {%1.16b}, %2.8b"
+           : "+w"(result)
+           : "w"(temp), "w"(idx)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbx2_u8 (uint8x8_t r, uint8x8x2_t tab, uint8x8_t idx)
+{
+  uint8x8_t result = r;
+  uint8x16_t temp = vcombine_u8 (tab.val[0], tab.val[1]);
+  __asm__ ("tbx %0.8b, {%1.16b}, %2.8b"
+           : "+w"(result)
+           : "w"(temp), "w"(idx)
+           : /* No clobbers */);
+  return result;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbx2_p8 (poly8x8_t r, poly8x8x2_t tab, uint8x8_t idx)
+{
+  poly8x8_t result = r;
+  poly8x16_t temp = vcombine_p8 (tab.val[0], tab.val[1]);
+  __asm__ ("tbx %0.8b, {%1.16b}, %2.8b"
+           : "+w"(result)
+           : "w"(temp), "w"(idx)
+           : /* No clobbers */);
+  return result;
+}
+
+/* End of temporary inline asm.  */
+
+/* Start of optimal implementations in approved order.  */
+
+/* vabd.  */
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabds_f32 (float32_t __a, float32_t __b)
+{
+  return __builtin_aarch64_fabdsf (__a, __b);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdd_f64 (float64_t __a, float64_t __b)
+{
+  return __builtin_aarch64_fabddf (__a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabd_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return __builtin_aarch64_fabdv2sf (__a, __b);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabd_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return (float64x1_t) {vabdd_f64 (vget_lane_f64 (__a, 0),
+				   vget_lane_f64 (__b, 0))};
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return __builtin_aarch64_fabdv4sf (__a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return __builtin_aarch64_fabdv2df (__a, __b);
+}
+
+/* vabs  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabs_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_absv2sf (__a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabs_f64 (float64x1_t __a)
+{
+  return (float64x1_t) {__builtin_fabs (__a[0])};
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabs_s8 (int8x8_t __a)
+{
+  return __builtin_aarch64_absv8qi (__a);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabs_s16 (int16x4_t __a)
+{
+  return __builtin_aarch64_absv4hi (__a);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabs_s32 (int32x2_t __a)
+{
+  return __builtin_aarch64_absv2si (__a);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabs_s64 (int64x1_t __a)
+{
+  return (int64x1_t) {__builtin_aarch64_absdi (__a[0])};
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabsq_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_absv4sf (__a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabsq_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_absv2df (__a);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabsq_s8 (int8x16_t __a)
+{
+  return __builtin_aarch64_absv16qi (__a);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabsq_s16 (int16x8_t __a)
+{
+  return __builtin_aarch64_absv8hi (__a);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabsq_s32 (int32x4_t __a)
+{
+  return __builtin_aarch64_absv4si (__a);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabsq_s64 (int64x2_t __a)
+{
+  return __builtin_aarch64_absv2di (__a);
+}
+
+/* Try to avoid moving between integer and vector registers.
+   For why the cast to unsigned is needed check the vnegd_s64 intrinsic.
+   There is a testcase related to this issue:
+   gcc.target/aarch64/vabsd_s64.c.  */
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabsd_s64 (int64_t __a)
+{
+  return __a < 0 ? - (uint64_t) __a : __a;
+}
+
+/* vadd */
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddd_s64 (int64_t __a, int64_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddd_u64 (uint64_t __a, uint64_t __b)
+{
+  return __a + __b;
+}
+
+/* vaddv */
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddv_s8 (int8x8_t __a)
+{
+  return __builtin_aarch64_reduc_plus_scal_v8qi (__a);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddv_s16 (int16x4_t __a)
+{
+  return __builtin_aarch64_reduc_plus_scal_v4hi (__a);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddv_s32 (int32x2_t __a)
+{
+  return __builtin_aarch64_reduc_plus_scal_v2si (__a);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddv_u8 (uint8x8_t __a)
+{
+  return (uint8_t) __builtin_aarch64_reduc_plus_scal_v8qi ((int8x8_t) __a);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddv_u16 (uint16x4_t __a)
+{
+  return (uint16_t) __builtin_aarch64_reduc_plus_scal_v4hi ((int16x4_t) __a);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddv_u32 (uint32x2_t __a)
+{
+  return (int32_t) __builtin_aarch64_reduc_plus_scal_v2si ((int32x2_t) __a);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddvq_s8 (int8x16_t __a)
+{
+  return __builtin_aarch64_reduc_plus_scal_v16qi (__a);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddvq_s16 (int16x8_t __a)
+{
+  return __builtin_aarch64_reduc_plus_scal_v8hi (__a);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddvq_s32 (int32x4_t __a)
+{
+  return __builtin_aarch64_reduc_plus_scal_v4si (__a);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddvq_s64 (int64x2_t __a)
+{
+  return __builtin_aarch64_reduc_plus_scal_v2di (__a);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddvq_u8 (uint8x16_t __a)
+{
+  return (uint8_t) __builtin_aarch64_reduc_plus_scal_v16qi ((int8x16_t) __a);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddvq_u16 (uint16x8_t __a)
+{
+  return (uint16_t) __builtin_aarch64_reduc_plus_scal_v8hi ((int16x8_t) __a);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddvq_u32 (uint32x4_t __a)
+{
+  return (uint32_t) __builtin_aarch64_reduc_plus_scal_v4si ((int32x4_t) __a);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddvq_u64 (uint64x2_t __a)
+{
+  return (uint64_t) __builtin_aarch64_reduc_plus_scal_v2di ((int64x2_t) __a);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddv_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_reduc_plus_scal_v2sf (__a);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddvq_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_reduc_plus_scal_v4sf (__a);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddvq_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_reduc_plus_scal_v2df (__a);
+}
+
+/* vbsl  */
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbsl_f16 (uint16x4_t __a, float16x4_t __b, float16x4_t __c)
+{
+  return __builtin_aarch64_simd_bslv4hf_suss (__a, __b, __c);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbsl_f32 (uint32x2_t __a, float32x2_t __b, float32x2_t __c)
+{
+  return __builtin_aarch64_simd_bslv2sf_suss (__a, __b, __c);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbsl_f64 (uint64x1_t __a, float64x1_t __b, float64x1_t __c)
+{
+  return (float64x1_t)
+    { __builtin_aarch64_simd_bsldf_suss (__a[0], __b[0], __c[0]) };
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbsl_p8 (uint8x8_t __a, poly8x8_t __b, poly8x8_t __c)
+{
+  return __builtin_aarch64_simd_bslv8qi_pupp (__a, __b, __c);
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbsl_p16 (uint16x4_t __a, poly16x4_t __b, poly16x4_t __c)
+{
+  return __builtin_aarch64_simd_bslv4hi_pupp (__a, __b, __c);
+}
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbsl_p64 (uint64x1_t __a, poly64x1_t __b, poly64x1_t __c)
+{
+  return (poly64x1_t)
+      {__builtin_aarch64_simd_bsldi_pupp (__a[0], __b[0], __c[0])};
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbsl_s8 (uint8x8_t __a, int8x8_t __b, int8x8_t __c)
+{
+  return __builtin_aarch64_simd_bslv8qi_suss (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbsl_s16 (uint16x4_t __a, int16x4_t __b, int16x4_t __c)
+{
+  return __builtin_aarch64_simd_bslv4hi_suss (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbsl_s32 (uint32x2_t __a, int32x2_t __b, int32x2_t __c)
+{
+  return __builtin_aarch64_simd_bslv2si_suss (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbsl_s64 (uint64x1_t __a, int64x1_t __b, int64x1_t __c)
+{
+  return (int64x1_t)
+      {__builtin_aarch64_simd_bsldi_suss (__a[0], __b[0], __c[0])};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbsl_u8 (uint8x8_t __a, uint8x8_t __b, uint8x8_t __c)
+{
+  return __builtin_aarch64_simd_bslv8qi_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbsl_u16 (uint16x4_t __a, uint16x4_t __b, uint16x4_t __c)
+{
+  return __builtin_aarch64_simd_bslv4hi_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbsl_u32 (uint32x2_t __a, uint32x2_t __b, uint32x2_t __c)
+{
+  return __builtin_aarch64_simd_bslv2si_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbsl_u64 (uint64x1_t __a, uint64x1_t __b, uint64x1_t __c)
+{
+  return (uint64x1_t)
+      {__builtin_aarch64_simd_bsldi_uuuu (__a[0], __b[0], __c[0])};
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbslq_f16 (uint16x8_t __a, float16x8_t __b, float16x8_t __c)
+{
+  return __builtin_aarch64_simd_bslv8hf_suss (__a, __b, __c);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbslq_f32 (uint32x4_t __a, float32x4_t __b, float32x4_t __c)
+{
+  return __builtin_aarch64_simd_bslv4sf_suss (__a, __b, __c);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbslq_f64 (uint64x2_t __a, float64x2_t __b, float64x2_t __c)
+{
+  return __builtin_aarch64_simd_bslv2df_suss (__a, __b, __c);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbslq_p8 (uint8x16_t __a, poly8x16_t __b, poly8x16_t __c)
+{
+  return __builtin_aarch64_simd_bslv16qi_pupp (__a, __b, __c);
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbslq_p16 (uint16x8_t __a, poly16x8_t __b, poly16x8_t __c)
+{
+  return __builtin_aarch64_simd_bslv8hi_pupp (__a, __b, __c);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbslq_s8 (uint8x16_t __a, int8x16_t __b, int8x16_t __c)
+{
+  return __builtin_aarch64_simd_bslv16qi_suss (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbslq_s16 (uint16x8_t __a, int16x8_t __b, int16x8_t __c)
+{
+  return __builtin_aarch64_simd_bslv8hi_suss (__a, __b, __c);
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbslq_p64 (uint64x2_t __a, poly64x2_t __b, poly64x2_t __c)
+{
+  return __builtin_aarch64_simd_bslv2di_pupp (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbslq_s32 (uint32x4_t __a, int32x4_t __b, int32x4_t __c)
+{
+  return __builtin_aarch64_simd_bslv4si_suss (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbslq_s64 (uint64x2_t __a, int64x2_t __b, int64x2_t __c)
+{
+  return __builtin_aarch64_simd_bslv2di_suss (__a, __b, __c);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbslq_u8 (uint8x16_t __a, uint8x16_t __b, uint8x16_t __c)
+{
+  return __builtin_aarch64_simd_bslv16qi_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbslq_u16 (uint16x8_t __a, uint16x8_t __b, uint16x8_t __c)
+{
+  return __builtin_aarch64_simd_bslv8hi_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbslq_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c)
+{
+  return __builtin_aarch64_simd_bslv4si_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbslq_u64 (uint64x2_t __a, uint64x2_t __b, uint64x2_t __c)
+{
+  return __builtin_aarch64_simd_bslv2di_uuuu (__a, __b, __c);
+}
+
+/* ARMv8.1-A instrinsics.  */
+#pragma GCC push_options
+#pragma GCC target ("+nothing+rdma")
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlah_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c)
+{
+  return __builtin_aarch64_sqrdmlahv4hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlah_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c)
+{
+  return __builtin_aarch64_sqrdmlahv2si (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlahq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c)
+{
+  return __builtin_aarch64_sqrdmlahv8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlahq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c)
+{
+  return __builtin_aarch64_sqrdmlahv4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlsh_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c)
+{
+  return __builtin_aarch64_sqrdmlshv4hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlsh_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c)
+{
+  return __builtin_aarch64_sqrdmlshv2si (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlshq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c)
+{
+  return __builtin_aarch64_sqrdmlshv8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlshq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c)
+{
+  return __builtin_aarch64_sqrdmlshv4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlah_laneq_s16 (int16x4_t __a, int16x4_t __b, int16x8_t __c, const int __d)
+{
+  return  __builtin_aarch64_sqrdmlah_laneqv4hi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlah_laneq_s32 (int32x2_t __a, int32x2_t __b, int32x4_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlah_laneqv2si (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlahq_laneq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlah_laneqv8hi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlahq_laneq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlah_laneqv4si (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlsh_laneq_s16 (int16x4_t __a, int16x4_t __b, int16x8_t __c, const int __d)
+{
+  return  __builtin_aarch64_sqrdmlsh_laneqv4hi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlsh_laneq_s32 (int32x2_t __a, int32x2_t __b, int32x4_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlsh_laneqv2si (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlshq_laneq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlsh_laneqv8hi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlshq_laneq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlsh_laneqv4si (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlah_lane_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c, const int __d)
+{
+  return  __builtin_aarch64_sqrdmlah_lanev4hi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlah_lane_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlah_lanev2si (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlahq_lane_s16 (int16x8_t __a, int16x8_t __b, int16x4_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlah_lanev8hi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlahq_lane_s32 (int32x4_t __a, int32x4_t __b, int32x2_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlah_lanev4si (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlahh_s16 (int16_t __a, int16_t __b, int16_t __c)
+{
+  return (int16_t) __builtin_aarch64_sqrdmlahhi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlahh_lane_s16 (int16_t __a, int16_t __b, int16x4_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlah_lanehi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlahh_laneq_s16 (int16_t __a, int16_t __b, int16x8_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlah_laneqhi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlahs_s32 (int32_t __a, int32_t __b, int32_t __c)
+{
+  return (int32_t) __builtin_aarch64_sqrdmlahsi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlahs_lane_s32 (int32_t __a, int32_t __b, int32x2_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlah_lanesi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlahs_laneq_s32 (int32_t __a, int32_t __b, int32x4_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlah_laneqsi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlsh_lane_s16 (int16x4_t __a, int16x4_t __b, int16x4_t __c, const int __d)
+{
+  return  __builtin_aarch64_sqrdmlsh_lanev4hi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlsh_lane_s32 (int32x2_t __a, int32x2_t __b, int32x2_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlsh_lanev2si (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlshq_lane_s16 (int16x8_t __a, int16x8_t __b, int16x4_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlsh_lanev8hi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlshq_lane_s32 (int32x4_t __a, int32x4_t __b, int32x2_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlsh_lanev4si (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlshh_s16 (int16_t __a, int16_t __b, int16_t __c)
+{
+  return (int16_t) __builtin_aarch64_sqrdmlshhi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlshh_lane_s16 (int16_t __a, int16_t __b, int16x4_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlsh_lanehi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlshh_laneq_s16 (int16_t __a, int16_t __b, int16x8_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlsh_laneqhi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlshs_s32 (int32_t __a, int32_t __b, int32_t __c)
+{
+  return (int32_t) __builtin_aarch64_sqrdmlshsi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlshs_lane_s32 (int32_t __a, int32_t __b, int32x2_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlsh_lanesi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmlshs_laneq_s32 (int32_t __a, int32_t __b, int32x4_t __c, const int __d)
+{
+  return __builtin_aarch64_sqrdmlsh_laneqsi (__a, __b, __c, __d);
+}
+#pragma GCC pop_options
+
+#pragma GCC push_options
+#pragma GCC target ("+nothing+crypto")
+/* vaes  */
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaeseq_u8 (uint8x16_t data, uint8x16_t key)
+{
+  return __builtin_aarch64_crypto_aesev16qi_uuu (data, key);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaesdq_u8 (uint8x16_t data, uint8x16_t key)
+{
+  return __builtin_aarch64_crypto_aesdv16qi_uuu (data, key);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaesmcq_u8 (uint8x16_t data)
+{
+  return __builtin_aarch64_crypto_aesmcv16qi_uu (data);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaesimcq_u8 (uint8x16_t data)
+{
+  return __builtin_aarch64_crypto_aesimcv16qi_uu (data);
+}
+#pragma GCC pop_options
+
+/* vcage  */
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcage_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return vabs_f64 (__a) >= vabs_f64 (__b);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcages_f32 (float32_t __a, float32_t __b)
+{
+  return __builtin_fabsf (__a) >= __builtin_fabsf (__b) ? -1 : 0;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcage_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return vabs_f32 (__a) >= vabs_f32 (__b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcageq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return vabsq_f32 (__a) >= vabsq_f32 (__b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcaged_f64 (float64_t __a, float64_t __b)
+{
+  return __builtin_fabs (__a) >= __builtin_fabs (__b) ? -1 : 0;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcageq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return vabsq_f64 (__a) >= vabsq_f64 (__b);
+}
+
+/* vcagt  */
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcagts_f32 (float32_t __a, float32_t __b)
+{
+  return __builtin_fabsf (__a) > __builtin_fabsf (__b) ? -1 : 0;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcagt_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return vabs_f32 (__a) > vabs_f32 (__b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcagt_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return vabs_f64 (__a) > vabs_f64 (__b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcagtq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return vabsq_f32 (__a) > vabsq_f32 (__b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcagtd_f64 (float64_t __a, float64_t __b)
+{
+  return __builtin_fabs (__a) > __builtin_fabs (__b) ? -1 : 0;
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcagtq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return vabsq_f64 (__a) > vabsq_f64 (__b);
+}
+
+/* vcale  */
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcale_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return vabs_f32 (__a) <= vabs_f32 (__b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcale_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return vabs_f64 (__a) <= vabs_f64 (__b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcaled_f64 (float64_t __a, float64_t __b)
+{
+  return __builtin_fabs (__a) <= __builtin_fabs (__b) ? -1 : 0;
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcales_f32 (float32_t __a, float32_t __b)
+{
+  return __builtin_fabsf (__a) <= __builtin_fabsf (__b) ? -1 : 0;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcaleq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return vabsq_f32 (__a) <= vabsq_f32 (__b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcaleq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return vabsq_f64 (__a) <= vabsq_f64 (__b);
+}
+
+/* vcalt  */
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcalt_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return vabs_f32 (__a) < vabs_f32 (__b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcalt_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return vabs_f64 (__a) < vabs_f64 (__b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcaltd_f64 (float64_t __a, float64_t __b)
+{
+  return __builtin_fabs (__a) < __builtin_fabs (__b) ? -1 : 0;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcaltq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return vabsq_f32 (__a) < vabsq_f32 (__b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcaltq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return vabsq_f64 (__a) < vabsq_f64 (__b);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcalts_f32 (float32_t __a, float32_t __b)
+{
+  return __builtin_fabsf (__a) < __builtin_fabsf (__b) ? -1 : 0;
+}
+
+/* vceq - vector.  */
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceq_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return (uint32x2_t) (__a == __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceq_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return (uint64x1_t) (__a == __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceq_p8 (poly8x8_t __a, poly8x8_t __b)
+{
+  return (uint8x8_t) (__a == __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceq_p64 (poly64x1_t __a, poly64x1_t __b)
+{
+  return (uint64x1_t) (__a == __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceq_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return (uint8x8_t) (__a == __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceq_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return (uint16x4_t) (__a == __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceq_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return (uint32x2_t) (__a == __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceq_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return (uint64x1_t) (__a == __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceq_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return (__a == __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceq_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return (__a == __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceq_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return (__a == __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceq_u64 (uint64x1_t __a, uint64x1_t __b)
+{
+  return (__a == __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return (uint32x4_t) (__a == __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return (uint64x2_t) (__a == __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqq_p8 (poly8x16_t __a, poly8x16_t __b)
+{
+  return (uint8x16_t) (__a == __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return (uint8x16_t) (__a == __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (uint16x8_t) (__a == __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (uint32x4_t) (__a == __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return (uint64x2_t) (__a == __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return (__a == __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return (__a == __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return (__a == __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqq_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return (__a == __b);
+}
+
+/* vceq - scalar.  */
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqs_f32 (float32_t __a, float32_t __b)
+{
+  return __a == __b ? -1 : 0;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqd_s64 (int64_t __a, int64_t __b)
+{
+  return __a == __b ? -1ll : 0ll;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqd_u64 (uint64_t __a, uint64_t __b)
+{
+  return __a == __b ? -1ll : 0ll;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqd_f64 (float64_t __a, float64_t __b)
+{
+  return __a == __b ? -1ll : 0ll;
+}
+
+/* vceqz - vector.  */
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqz_f32 (float32x2_t __a)
+{
+  return (uint32x2_t) (__a == 0.0f);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqz_f64 (float64x1_t __a)
+{
+  return (uint64x1_t) (__a == (float64x1_t) {0.0});
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqz_p8 (poly8x8_t __a)
+{
+  return (uint8x8_t) (__a == 0);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqz_s8 (int8x8_t __a)
+{
+  return (uint8x8_t) (__a == 0);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqz_s16 (int16x4_t __a)
+{
+  return (uint16x4_t) (__a == 0);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqz_s32 (int32x2_t __a)
+{
+  return (uint32x2_t) (__a == 0);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqz_s64 (int64x1_t __a)
+{
+  return (uint64x1_t) (__a == __AARCH64_INT64_C (0));
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqz_u8 (uint8x8_t __a)
+{
+  return (__a == 0);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqz_u16 (uint16x4_t __a)
+{
+  return (__a == 0);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqz_u32 (uint32x2_t __a)
+{
+  return (__a == 0);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqz_u64 (uint64x1_t __a)
+{
+  return (__a == __AARCH64_UINT64_C (0));
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqzq_f32 (float32x4_t __a)
+{
+  return (uint32x4_t) (__a == 0.0f);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqzq_f64 (float64x2_t __a)
+{
+  return (uint64x2_t) (__a == 0.0f);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqzq_p8 (poly8x16_t __a)
+{
+  return (uint8x16_t) (__a == 0);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqzq_s8 (int8x16_t __a)
+{
+  return (uint8x16_t) (__a == 0);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqzq_s16 (int16x8_t __a)
+{
+  return (uint16x8_t) (__a == 0);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqzq_s32 (int32x4_t __a)
+{
+  return (uint32x4_t) (__a == 0);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqzq_s64 (int64x2_t __a)
+{
+  return (uint64x2_t) (__a == __AARCH64_INT64_C (0));
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqzq_u8 (uint8x16_t __a)
+{
+  return (__a == 0);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqzq_u16 (uint16x8_t __a)
+{
+  return (__a == 0);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqzq_u32 (uint32x4_t __a)
+{
+  return (__a == 0);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqzq_u64 (uint64x2_t __a)
+{
+  return (__a == __AARCH64_UINT64_C (0));
+}
+
+/* vceqz - scalar.  */
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqzs_f32 (float32_t __a)
+{
+  return __a == 0.0f ? -1 : 0;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqzd_s64 (int64_t __a)
+{
+  return __a == 0 ? -1ll : 0ll;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqzd_u64 (uint64_t __a)
+{
+  return __a == 0 ? -1ll : 0ll;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqzd_f64 (float64_t __a)
+{
+  return __a == 0.0 ? -1ll : 0ll;
+}
+
+/* vcge - vector.  */
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcge_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return (uint32x2_t) (__a >= __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcge_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return (uint64x1_t) (__a >= __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcge_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return (uint8x8_t) (__a >= __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcge_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return (uint16x4_t) (__a >= __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcge_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return (uint32x2_t) (__a >= __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcge_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return (uint64x1_t) (__a >= __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcge_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return (__a >= __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcge_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return (__a >= __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcge_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return (__a >= __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcge_u64 (uint64x1_t __a, uint64x1_t __b)
+{
+  return (__a >= __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgeq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return (uint32x4_t) (__a >= __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgeq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return (uint64x2_t) (__a >= __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgeq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return (uint8x16_t) (__a >= __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgeq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (uint16x8_t) (__a >= __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgeq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (uint32x4_t) (__a >= __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgeq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return (uint64x2_t) (__a >= __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgeq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return (__a >= __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgeq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return (__a >= __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgeq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return (__a >= __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgeq_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return (__a >= __b);
+}
+
+/* vcge - scalar.  */
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcges_f32 (float32_t __a, float32_t __b)
+{
+  return __a >= __b ? -1 : 0;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcged_s64 (int64_t __a, int64_t __b)
+{
+  return __a >= __b ? -1ll : 0ll;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcged_u64 (uint64_t __a, uint64_t __b)
+{
+  return __a >= __b ? -1ll : 0ll;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcged_f64 (float64_t __a, float64_t __b)
+{
+  return __a >= __b ? -1ll : 0ll;
+}
+
+/* vcgez - vector.  */
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgez_f32 (float32x2_t __a)
+{
+  return (uint32x2_t) (__a >= 0.0f);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgez_f64 (float64x1_t __a)
+{
+  return (uint64x1_t) (__a[0] >= (float64x1_t) {0.0});
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgez_s8 (int8x8_t __a)
+{
+  return (uint8x8_t) (__a >= 0);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgez_s16 (int16x4_t __a)
+{
+  return (uint16x4_t) (__a >= 0);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgez_s32 (int32x2_t __a)
+{
+  return (uint32x2_t) (__a >= 0);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgez_s64 (int64x1_t __a)
+{
+  return (uint64x1_t) (__a >= __AARCH64_INT64_C (0));
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgezq_f32 (float32x4_t __a)
+{
+  return (uint32x4_t) (__a >= 0.0f);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgezq_f64 (float64x2_t __a)
+{
+  return (uint64x2_t) (__a >= 0.0);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgezq_s8 (int8x16_t __a)
+{
+  return (uint8x16_t) (__a >= 0);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgezq_s16 (int16x8_t __a)
+{
+  return (uint16x8_t) (__a >= 0);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgezq_s32 (int32x4_t __a)
+{
+  return (uint32x4_t) (__a >= 0);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgezq_s64 (int64x2_t __a)
+{
+  return (uint64x2_t) (__a >= __AARCH64_INT64_C (0));
+}
+
+/* vcgez - scalar.  */
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgezs_f32 (float32_t __a)
+{
+  return __a >= 0.0f ? -1 : 0;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgezd_s64 (int64_t __a)
+{
+  return __a >= 0 ? -1ll : 0ll;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgezd_f64 (float64_t __a)
+{
+  return __a >= 0.0 ? -1ll : 0ll;
+}
+
+/* vcgt - vector.  */
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgt_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return (uint32x2_t) (__a > __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgt_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return (uint64x1_t) (__a > __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgt_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return (uint8x8_t) (__a > __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgt_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return (uint16x4_t) (__a > __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgt_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return (uint32x2_t) (__a > __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgt_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return (uint64x1_t) (__a > __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgt_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return (__a > __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgt_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return (__a > __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgt_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return (__a > __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgt_u64 (uint64x1_t __a, uint64x1_t __b)
+{
+  return (__a > __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return (uint32x4_t) (__a > __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return (uint64x2_t) (__a > __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return (uint8x16_t) (__a > __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (uint16x8_t) (__a > __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (uint32x4_t) (__a > __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return (uint64x2_t) (__a > __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return (__a > __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return (__a > __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return (__a > __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtq_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return (__a > __b);
+}
+
+/* vcgt - scalar.  */
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgts_f32 (float32_t __a, float32_t __b)
+{
+  return __a > __b ? -1 : 0;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtd_s64 (int64_t __a, int64_t __b)
+{
+  return __a > __b ? -1ll : 0ll;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtd_u64 (uint64_t __a, uint64_t __b)
+{
+  return __a > __b ? -1ll : 0ll;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtd_f64 (float64_t __a, float64_t __b)
+{
+  return __a > __b ? -1ll : 0ll;
+}
+
+/* vcgtz - vector.  */
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtz_f32 (float32x2_t __a)
+{
+  return (uint32x2_t) (__a > 0.0f);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtz_f64 (float64x1_t __a)
+{
+  return (uint64x1_t) (__a > (float64x1_t) {0.0});
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtz_s8 (int8x8_t __a)
+{
+  return (uint8x8_t) (__a > 0);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtz_s16 (int16x4_t __a)
+{
+  return (uint16x4_t) (__a > 0);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtz_s32 (int32x2_t __a)
+{
+  return (uint32x2_t) (__a > 0);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtz_s64 (int64x1_t __a)
+{
+  return (uint64x1_t) (__a > __AARCH64_INT64_C (0));
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtzq_f32 (float32x4_t __a)
+{
+  return (uint32x4_t) (__a > 0.0f);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtzq_f64 (float64x2_t __a)
+{
+    return (uint64x2_t) (__a > 0.0);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtzq_s8 (int8x16_t __a)
+{
+  return (uint8x16_t) (__a > 0);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtzq_s16 (int16x8_t __a)
+{
+  return (uint16x8_t) (__a > 0);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtzq_s32 (int32x4_t __a)
+{
+  return (uint32x4_t) (__a > 0);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtzq_s64 (int64x2_t __a)
+{
+  return (uint64x2_t) (__a > __AARCH64_INT64_C (0));
+}
+
+/* vcgtz - scalar.  */
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtzs_f32 (float32_t __a)
+{
+  return __a > 0.0f ? -1 : 0;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtzd_s64 (int64_t __a)
+{
+  return __a > 0 ? -1ll : 0ll;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtzd_f64 (float64_t __a)
+{
+  return __a > 0.0 ? -1ll : 0ll;
+}
+
+/* vcle - vector.  */
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcle_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return (uint32x2_t) (__a <= __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcle_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return (uint64x1_t) (__a <= __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcle_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return (uint8x8_t) (__a <= __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcle_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return (uint16x4_t) (__a <= __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcle_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return (uint32x2_t) (__a <= __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcle_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return (uint64x1_t) (__a <= __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcle_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return (__a <= __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcle_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return (__a <= __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcle_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return (__a <= __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcle_u64 (uint64x1_t __a, uint64x1_t __b)
+{
+  return (__a <= __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcleq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return (uint32x4_t) (__a <= __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcleq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return (uint64x2_t) (__a <= __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcleq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return (uint8x16_t) (__a <= __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcleq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (uint16x8_t) (__a <= __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcleq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (uint32x4_t) (__a <= __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcleq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return (uint64x2_t) (__a <= __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcleq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return (__a <= __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcleq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return (__a <= __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcleq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return (__a <= __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcleq_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return (__a <= __b);
+}
+
+/* vcle - scalar.  */
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcles_f32 (float32_t __a, float32_t __b)
+{
+  return __a <= __b ? -1 : 0;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcled_s64 (int64_t __a, int64_t __b)
+{
+  return __a <= __b ? -1ll : 0ll;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcled_u64 (uint64_t __a, uint64_t __b)
+{
+  return __a <= __b ? -1ll : 0ll;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcled_f64 (float64_t __a, float64_t __b)
+{
+  return __a <= __b ? -1ll : 0ll;
+}
+
+/* vclez - vector.  */
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclez_f32 (float32x2_t __a)
+{
+  return (uint32x2_t) (__a <= 0.0f);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclez_f64 (float64x1_t __a)
+{
+  return (uint64x1_t) (__a <= (float64x1_t) {0.0});
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclez_s8 (int8x8_t __a)
+{
+  return (uint8x8_t) (__a <= 0);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclez_s16 (int16x4_t __a)
+{
+  return (uint16x4_t) (__a <= 0);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclez_s32 (int32x2_t __a)
+{
+  return (uint32x2_t) (__a <= 0);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclez_s64 (int64x1_t __a)
+{
+  return (uint64x1_t) (__a <= __AARCH64_INT64_C (0));
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclezq_f32 (float32x4_t __a)
+{
+  return (uint32x4_t) (__a <= 0.0f);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclezq_f64 (float64x2_t __a)
+{
+  return (uint64x2_t) (__a <= 0.0);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclezq_s8 (int8x16_t __a)
+{
+  return (uint8x16_t) (__a <= 0);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclezq_s16 (int16x8_t __a)
+{
+  return (uint16x8_t) (__a <= 0);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclezq_s32 (int32x4_t __a)
+{
+  return (uint32x4_t) (__a <= 0);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclezq_s64 (int64x2_t __a)
+{
+  return (uint64x2_t) (__a <= __AARCH64_INT64_C (0));
+}
+
+/* vclez - scalar.  */
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclezs_f32 (float32_t __a)
+{
+  return __a <= 0.0f ? -1 : 0;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclezd_s64 (int64_t __a)
+{
+  return __a <= 0 ? -1ll : 0ll;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclezd_f64 (float64_t __a)
+{
+  return __a <= 0.0 ? -1ll : 0ll;
+}
+
+/* vclt - vector.  */
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclt_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return (uint32x2_t) (__a < __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclt_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return (uint64x1_t) (__a < __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclt_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return (uint8x8_t) (__a < __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclt_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return (uint16x4_t) (__a < __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclt_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return (uint32x2_t) (__a < __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclt_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return (uint64x1_t) (__a < __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclt_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return (__a < __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclt_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return (__a < __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclt_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return (__a < __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclt_u64 (uint64x1_t __a, uint64x1_t __b)
+{
+  return (__a < __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return (uint32x4_t) (__a < __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return (uint64x2_t) (__a < __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return (uint8x16_t) (__a < __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (uint16x8_t) (__a < __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (uint32x4_t) (__a < __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return (uint64x2_t) (__a < __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return (__a < __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return (__a < __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return (__a < __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltq_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return (__a < __b);
+}
+
+/* vclt - scalar.  */
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclts_f32 (float32_t __a, float32_t __b)
+{
+  return __a < __b ? -1 : 0;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltd_s64 (int64_t __a, int64_t __b)
+{
+  return __a < __b ? -1ll : 0ll;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltd_u64 (uint64_t __a, uint64_t __b)
+{
+  return __a < __b ? -1ll : 0ll;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltd_f64 (float64_t __a, float64_t __b)
+{
+  return __a < __b ? -1ll : 0ll;
+}
+
+/* vcltz - vector.  */
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltz_f32 (float32x2_t __a)
+{
+  return (uint32x2_t) (__a < 0.0f);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltz_f64 (float64x1_t __a)
+{
+  return (uint64x1_t) (__a < (float64x1_t) {0.0});
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltz_s8 (int8x8_t __a)
+{
+  return (uint8x8_t) (__a < 0);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltz_s16 (int16x4_t __a)
+{
+  return (uint16x4_t) (__a < 0);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltz_s32 (int32x2_t __a)
+{
+  return (uint32x2_t) (__a < 0);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltz_s64 (int64x1_t __a)
+{
+  return (uint64x1_t) (__a < __AARCH64_INT64_C (0));
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltzq_f32 (float32x4_t __a)
+{
+  return (uint32x4_t) (__a < 0.0f);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltzq_f64 (float64x2_t __a)
+{
+  return (uint64x2_t) (__a < 0.0);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltzq_s8 (int8x16_t __a)
+{
+  return (uint8x16_t) (__a < 0);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltzq_s16 (int16x8_t __a)
+{
+  return (uint16x8_t) (__a < 0);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltzq_s32 (int32x4_t __a)
+{
+  return (uint32x4_t) (__a < 0);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltzq_s64 (int64x2_t __a)
+{
+  return (uint64x2_t) (__a < __AARCH64_INT64_C (0));
+}
+
+/* vcltz - scalar.  */
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltzs_f32 (float32_t __a)
+{
+  return __a < 0.0f ? -1 : 0;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltzd_s64 (int64_t __a)
+{
+  return __a < 0 ? -1ll : 0ll;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltzd_f64 (float64_t __a)
+{
+  return __a < 0.0 ? -1ll : 0ll;
+}
+
+/* vcls.  */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcls_s8 (int8x8_t __a)
+{
+  return __builtin_aarch64_clrsbv8qi (__a);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcls_s16 (int16x4_t __a)
+{
+  return __builtin_aarch64_clrsbv4hi (__a);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcls_s32 (int32x2_t __a)
+{
+  return __builtin_aarch64_clrsbv2si (__a);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclsq_s8 (int8x16_t __a)
+{
+  return __builtin_aarch64_clrsbv16qi (__a);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclsq_s16 (int16x8_t __a)
+{
+  return __builtin_aarch64_clrsbv8hi (__a);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclsq_s32 (int32x4_t __a)
+{
+  return __builtin_aarch64_clrsbv4si (__a);
+}
+
+/* vclz.  */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclz_s8 (int8x8_t __a)
+{
+  return __builtin_aarch64_clzv8qi (__a);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclz_s16 (int16x4_t __a)
+{
+  return __builtin_aarch64_clzv4hi (__a);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclz_s32 (int32x2_t __a)
+{
+  return __builtin_aarch64_clzv2si (__a);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclz_u8 (uint8x8_t __a)
+{
+  return (uint8x8_t)__builtin_aarch64_clzv8qi ((int8x8_t)__a);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclz_u16 (uint16x4_t __a)
+{
+  return (uint16x4_t)__builtin_aarch64_clzv4hi ((int16x4_t)__a);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclz_u32 (uint32x2_t __a)
+{
+  return (uint32x2_t)__builtin_aarch64_clzv2si ((int32x2_t)__a);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclzq_s8 (int8x16_t __a)
+{
+  return __builtin_aarch64_clzv16qi (__a);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclzq_s16 (int16x8_t __a)
+{
+  return __builtin_aarch64_clzv8hi (__a);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclzq_s32 (int32x4_t __a)
+{
+  return __builtin_aarch64_clzv4si (__a);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclzq_u8 (uint8x16_t __a)
+{
+  return (uint8x16_t)__builtin_aarch64_clzv16qi ((int8x16_t)__a);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclzq_u16 (uint16x8_t __a)
+{
+  return (uint16x8_t)__builtin_aarch64_clzv8hi ((int16x8_t)__a);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclzq_u32 (uint32x4_t __a)
+{
+  return (uint32x4_t)__builtin_aarch64_clzv4si ((int32x4_t)__a);
+}
+
+/* vcnt.  */
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcnt_p8 (poly8x8_t __a)
+{
+  return (poly8x8_t) __builtin_aarch64_popcountv8qi ((int8x8_t) __a);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcnt_s8 (int8x8_t __a)
+{
+  return __builtin_aarch64_popcountv8qi (__a);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcnt_u8 (uint8x8_t __a)
+{
+  return (uint8x8_t) __builtin_aarch64_popcountv8qi ((int8x8_t) __a);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcntq_p8 (poly8x16_t __a)
+{
+  return (poly8x16_t) __builtin_aarch64_popcountv16qi ((int8x16_t) __a);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcntq_s8 (int8x16_t __a)
+{
+  return __builtin_aarch64_popcountv16qi (__a);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcntq_u8 (uint8x16_t __a)
+{
+  return (uint8x16_t) __builtin_aarch64_popcountv16qi ((int8x16_t) __a);
+}
+
+/* vcopy_lane.  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_lane_f32 (float32x2_t __a, const int __lane1,
+		float32x2_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_lane_f64 (float64x1_t __a, const int __lane1,
+		float64x1_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_lane_p8 (poly8x8_t __a, const int __lane1,
+	       poly8x8_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				 __a, __lane1);
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_lane_p16 (poly16x4_t __a, const int __lane1,
+		poly16x4_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_lane_p64 (poly64x1_t __a, const int __lane1,
+		poly64x1_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_lane_s8 (int8x8_t __a, const int __lane1,
+	       int8x8_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				 __a, __lane1);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_lane_s16 (int16x4_t __a, const int __lane1,
+		int16x4_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_lane_s32 (int32x2_t __a, const int __lane1,
+		int32x2_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_lane_s64 (int64x1_t __a, const int __lane1,
+		int64x1_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_lane_u8 (uint8x8_t __a, const int __lane1,
+	       uint8x8_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				 __a, __lane1);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_lane_u16 (uint16x4_t __a, const int __lane1,
+		uint16x4_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_lane_u32 (uint32x2_t __a, const int __lane1,
+		uint32x2_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_lane_u64 (uint64x1_t __a, const int __lane1,
+		uint64x1_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+/* vcopy_laneq.  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_laneq_f32 (float32x2_t __a, const int __lane1,
+		 float32x4_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_laneq_f64 (float64x1_t __a, const int __lane1,
+		 float64x2_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_laneq_p8 (poly8x8_t __a, const int __lane1,
+		poly8x16_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				 __a, __lane1);
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_laneq_p16 (poly16x4_t __a, const int __lane1,
+		 poly16x8_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_laneq_p64 (poly64x1_t __a, const int __lane1,
+		 poly64x2_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_laneq_s8 (int8x8_t __a, const int __lane1,
+		int8x16_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				 __a, __lane1);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_laneq_s16 (int16x4_t __a, const int __lane1,
+		 int16x8_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_laneq_s32 (int32x2_t __a, const int __lane1,
+		 int32x4_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_laneq_s64 (int64x1_t __a, const int __lane1,
+		 int64x2_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_laneq_u8 (uint8x8_t __a, const int __lane1,
+		uint8x16_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				 __a, __lane1);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_laneq_u16 (uint16x4_t __a, const int __lane1,
+		 uint16x8_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_laneq_u32 (uint32x2_t __a, const int __lane1,
+		 uint32x4_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopy_laneq_u64 (uint64x1_t __a, const int __lane1,
+		 uint64x2_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+/* vcopyq_lane.  */
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_lane_f32 (float32x4_t __a, const int __lane1,
+		 float32x2_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_lane_f64 (float64x2_t __a, const int __lane1,
+		 float64x1_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_lane_p8 (poly8x16_t __a, const int __lane1,
+		poly8x8_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_lane_p16 (poly16x8_t __a, const int __lane1,
+		 poly16x4_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_lane_p64 (poly64x2_t __a, const int __lane1,
+		 poly64x1_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_lane_s8 (int8x16_t __a, const int __lane1,
+		int8x8_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_lane_s16 (int16x8_t __a, const int __lane1,
+		 int16x4_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_lane_s32 (int32x4_t __a, const int __lane1,
+		 int32x2_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_lane_s64 (int64x2_t __a, const int __lane1,
+		 int64x1_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_lane_u8 (uint8x16_t __a, const int __lane1,
+		uint8x8_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_lane_u16 (uint16x8_t __a, const int __lane1,
+		 uint16x4_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_lane_u32 (uint32x4_t __a, const int __lane1,
+		 uint32x2_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_lane_u64 (uint64x2_t __a, const int __lane1,
+		 uint64x1_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+/* vcopyq_laneq.  */
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_laneq_f32 (float32x4_t __a, const int __lane1,
+		  float32x4_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_laneq_f64 (float64x2_t __a, const int __lane1,
+		  float64x2_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_laneq_p8 (poly8x16_t __a, const int __lane1,
+		 poly8x16_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_laneq_p16 (poly16x8_t __a, const int __lane1,
+		  poly16x8_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_laneq_p64 (poly64x2_t __a, const int __lane1,
+		  poly64x2_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_laneq_s8 (int8x16_t __a, const int __lane1,
+		 int8x16_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_laneq_s16 (int16x8_t __a, const int __lane1,
+		  int16x8_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_laneq_s32 (int32x4_t __a, const int __lane1,
+		  int32x4_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_laneq_s64 (int64x2_t __a, const int __lane1,
+		  int64x2_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_laneq_u8 (uint8x16_t __a, const int __lane1,
+		 uint8x16_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				  __a, __lane1);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_laneq_u16 (uint16x8_t __a, const int __lane1,
+		  uint16x8_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_laneq_u32 (uint32x4_t __a, const int __lane1,
+		  uint32x4_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcopyq_laneq_u64 (uint64x2_t __a, const int __lane1,
+		  uint64x2_t __b, const int __lane2)
+{
+  return __aarch64_vset_lane_any (__aarch64_vget_lane_any (__b, __lane2),
+				   __a, __lane1);
+}
+
+/* vcvt (double -> float).  */
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_f16_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_float_truncate_lo_v4hf (__a);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_high_f16_f32 (float16x4_t __a, float32x4_t __b)
+{
+  return __builtin_aarch64_float_truncate_hi_v8hf (__a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_f32_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_float_truncate_lo_v2sf (__a);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_high_f32_f64 (float32x2_t __a, float64x2_t __b)
+{
+  return __builtin_aarch64_float_truncate_hi_v4sf (__a, __b);
+}
+
+/* vcvt (float -> double).  */
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_f32_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_float_extend_lo_v4sf (__a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_f64_f32 (float32x2_t __a)
+{
+
+  return __builtin_aarch64_float_extend_lo_v2df (__a);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_high_f32_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_vec_unpacks_hi_v8hf (__a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_high_f64_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_vec_unpacks_hi_v4sf (__a);
+}
+
+/* vcvt (<u>fixed-point -> float).  */
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtd_n_f64_s64 (int64_t __a, const int __b)
+{
+  return __builtin_aarch64_scvtfdi (__a, __b);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtd_n_f64_u64 (uint64_t __a, const int __b)
+{
+  return __builtin_aarch64_ucvtfdi_sus (__a, __b);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvts_n_f32_s32 (int32_t __a, const int __b)
+{
+  return __builtin_aarch64_scvtfsi (__a, __b);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvts_n_f32_u32 (uint32_t __a, const int __b)
+{
+  return __builtin_aarch64_ucvtfsi_sus (__a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_n_f32_s32 (int32x2_t __a, const int __b)
+{
+  return __builtin_aarch64_scvtfv2si (__a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_n_f32_u32 (uint32x2_t __a, const int __b)
+{
+  return __builtin_aarch64_ucvtfv2si_sus (__a, __b);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_n_f64_s64 (int64x1_t __a, const int __b)
+{
+  return (float64x1_t)
+    { __builtin_aarch64_scvtfdi (vget_lane_s64 (__a, 0), __b) };
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_n_f64_u64 (uint64x1_t __a, const int __b)
+{
+  return (float64x1_t)
+    { __builtin_aarch64_ucvtfdi_sus (vget_lane_u64 (__a, 0), __b) };
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_n_f32_s32 (int32x4_t __a, const int __b)
+{
+  return __builtin_aarch64_scvtfv4si (__a, __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_n_f32_u32 (uint32x4_t __a, const int __b)
+{
+  return __builtin_aarch64_ucvtfv4si_sus (__a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_n_f64_s64 (int64x2_t __a, const int __b)
+{
+  return __builtin_aarch64_scvtfv2di (__a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_n_f64_u64 (uint64x2_t __a, const int __b)
+{
+  return __builtin_aarch64_ucvtfv2di_sus (__a, __b);
+}
+
+/* vcvt (float -> <u>fixed-point).  */
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtd_n_s64_f64 (float64_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzsdf (__a, __b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtd_n_u64_f64 (float64_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzudf_uss (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvts_n_s32_f32 (float32_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzssf (__a, __b);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvts_n_u32_f32 (float32_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzusf_uss (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_n_s32_f32 (float32x2_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzsv2sf (__a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_n_u32_f32 (float32x2_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzuv2sf_uss (__a, __b);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_n_s64_f64 (float64x1_t __a, const int __b)
+{
+  return (int64x1_t)
+    { __builtin_aarch64_fcvtzsdf (vget_lane_f64 (__a, 0), __b) };
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_n_u64_f64 (float64x1_t __a, const int __b)
+{
+  return (uint64x1_t)
+    { __builtin_aarch64_fcvtzudf_uss (vget_lane_f64 (__a, 0), __b) };
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_n_s32_f32 (float32x4_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzsv4sf (__a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_n_u32_f32 (float32x4_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzuv4sf_uss (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_n_s64_f64 (float64x2_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzsv2df (__a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_n_u64_f64 (float64x2_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzuv2df_uss (__a, __b);
+}
+
+/* vcvt  (<u>int -> float)  */
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtd_f64_s64 (int64_t __a)
+{
+  return (float64_t) __a;
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtd_f64_u64 (uint64_t __a)
+{
+  return (float64_t) __a;
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvts_f32_s32 (int32_t __a)
+{
+  return (float32_t) __a;
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvts_f32_u32 (uint32_t __a)
+{
+  return (float32_t) __a;
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_f32_s32 (int32x2_t __a)
+{
+  return __builtin_aarch64_floatv2siv2sf (__a);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_f32_u32 (uint32x2_t __a)
+{
+  return __builtin_aarch64_floatunsv2siv2sf ((int32x2_t) __a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_f64_s64 (int64x1_t __a)
+{
+  return (float64x1_t) { vget_lane_s64 (__a, 0) };
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_f64_u64 (uint64x1_t __a)
+{
+  return (float64x1_t) { vget_lane_u64 (__a, 0) };
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_f32_s32 (int32x4_t __a)
+{
+  return __builtin_aarch64_floatv4siv4sf (__a);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_f32_u32 (uint32x4_t __a)
+{
+  return __builtin_aarch64_floatunsv4siv4sf ((int32x4_t) __a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_f64_s64 (int64x2_t __a)
+{
+  return __builtin_aarch64_floatv2div2df (__a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_f64_u64 (uint64x2_t __a)
+{
+  return __builtin_aarch64_floatunsv2div2df ((int64x2_t) __a);
+}
+
+/* vcvt (float -> <u>int)  */
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtd_s64_f64 (float64_t __a)
+{
+  return (int64_t) __a;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtd_u64_f64 (float64_t __a)
+{
+  return (uint64_t) __a;
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvts_s32_f32 (float32_t __a)
+{
+  return (int32_t) __a;
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvts_u32_f32 (float32_t __a)
+{
+  return (uint32_t) __a;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_s32_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_lbtruncv2sfv2si (__a);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_u32_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_lbtruncuv2sfv2si_us (__a);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_s32_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_lbtruncv4sfv4si (__a);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_u32_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_lbtruncuv4sfv4si_us (__a);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_s64_f64 (float64x1_t __a)
+{
+  return (int64x1_t) {vcvtd_s64_f64 (__a[0])};
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_u64_f64 (float64x1_t __a)
+{
+  return (uint64x1_t) {vcvtd_u64_f64 (__a[0])};
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_s64_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_lbtruncv2dfv2di (__a);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_u64_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_lbtruncuv2dfv2di_us (__a);
+}
+
+/* vcvta  */
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtad_s64_f64 (float64_t __a)
+{
+  return __builtin_aarch64_lrounddfdi (__a);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtad_u64_f64 (float64_t __a)
+{
+  return __builtin_aarch64_lroundudfdi_us (__a);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtas_s32_f32 (float32_t __a)
+{
+  return __builtin_aarch64_lroundsfsi (__a);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtas_u32_f32 (float32_t __a)
+{
+  return __builtin_aarch64_lroundusfsi_us (__a);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvta_s32_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_lroundv2sfv2si (__a);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvta_u32_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_lrounduv2sfv2si_us (__a);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtaq_s32_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_lroundv4sfv4si (__a);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtaq_u32_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_lrounduv4sfv4si_us (__a);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvta_s64_f64 (float64x1_t __a)
+{
+  return (int64x1_t) {vcvtad_s64_f64 (__a[0])};
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvta_u64_f64 (float64x1_t __a)
+{
+  return (uint64x1_t) {vcvtad_u64_f64 (__a[0])};
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtaq_s64_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_lroundv2dfv2di (__a);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtaq_u64_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_lrounduv2dfv2di_us (__a);
+}
+
+/* vcvtm  */
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtmd_s64_f64 (float64_t __a)
+{
+  return __builtin_llfloor (__a);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtmd_u64_f64 (float64_t __a)
+{
+  return __builtin_aarch64_lfloorudfdi_us (__a);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtms_s32_f32 (float32_t __a)
+{
+  return __builtin_ifloorf (__a);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtms_u32_f32 (float32_t __a)
+{
+  return __builtin_aarch64_lfloorusfsi_us (__a);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtm_s32_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_lfloorv2sfv2si (__a);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtm_u32_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_lflooruv2sfv2si_us (__a);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtmq_s32_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_lfloorv4sfv4si (__a);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtmq_u32_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_lflooruv4sfv4si_us (__a);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtm_s64_f64 (float64x1_t __a)
+{
+  return (int64x1_t) {vcvtmd_s64_f64 (__a[0])};
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtm_u64_f64 (float64x1_t __a)
+{
+  return (uint64x1_t) {vcvtmd_u64_f64 (__a[0])};
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtmq_s64_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_lfloorv2dfv2di (__a);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtmq_u64_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_lflooruv2dfv2di_us (__a);
+}
+
+/* vcvtn  */
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtnd_s64_f64 (float64_t __a)
+{
+  return __builtin_aarch64_lfrintndfdi (__a);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtnd_u64_f64 (float64_t __a)
+{
+  return __builtin_aarch64_lfrintnudfdi_us (__a);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtns_s32_f32 (float32_t __a)
+{
+  return __builtin_aarch64_lfrintnsfsi (__a);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtns_u32_f32 (float32_t __a)
+{
+  return __builtin_aarch64_lfrintnusfsi_us (__a);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtn_s32_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_lfrintnv2sfv2si (__a);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtn_u32_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_lfrintnuv2sfv2si_us (__a);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtnq_s32_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_lfrintnv4sfv4si (__a);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtnq_u32_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_lfrintnuv4sfv4si_us (__a);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtn_s64_f64 (float64x1_t __a)
+{
+  return (int64x1_t) {vcvtnd_s64_f64 (__a[0])};
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtn_u64_f64 (float64x1_t __a)
+{
+  return (uint64x1_t) {vcvtnd_u64_f64 (__a[0])};
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtnq_s64_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_lfrintnv2dfv2di (__a);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtnq_u64_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_lfrintnuv2dfv2di_us (__a);
+}
+
+/* vcvtp  */
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtpd_s64_f64 (float64_t __a)
+{
+  return __builtin_llceil (__a);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtpd_u64_f64 (float64_t __a)
+{
+  return __builtin_aarch64_lceiludfdi_us (__a);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtps_s32_f32 (float32_t __a)
+{
+  return __builtin_iceilf (__a);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtps_u32_f32 (float32_t __a)
+{
+  return __builtin_aarch64_lceilusfsi_us (__a);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtp_s32_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_lceilv2sfv2si (__a);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtp_u32_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_lceiluv2sfv2si_us (__a);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtpq_s32_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_lceilv4sfv4si (__a);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtpq_u32_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_lceiluv4sfv4si_us (__a);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtp_s64_f64 (float64x1_t __a)
+{
+  return (int64x1_t) {vcvtpd_s64_f64 (__a[0])};
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtp_u64_f64 (float64x1_t __a)
+{
+  return (uint64x1_t) {vcvtpd_u64_f64 (__a[0])};
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtpq_s64_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_lceilv2dfv2di (__a);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtpq_u64_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_lceiluv2dfv2di_us (__a);
+}
+
+/* vdup_n  */
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_n_f16 (float16_t __a)
+{
+  return (float16x4_t) {__a, __a, __a, __a};
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_n_f32 (float32_t __a)
+{
+  return (float32x2_t) {__a, __a};
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_n_f64 (float64_t __a)
+{
+  return (float64x1_t) {__a};
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_n_p8 (poly8_t __a)
+{
+  return (poly8x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_n_p16 (poly16_t __a)
+{
+  return (poly16x4_t) {__a, __a, __a, __a};
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_n_p64 (poly64_t __a)
+{
+  return (poly64x1_t) {__a};
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_n_s8 (int8_t __a)
+{
+  return (int8x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_n_s16 (int16_t __a)
+{
+  return (int16x4_t) {__a, __a, __a, __a};
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_n_s32 (int32_t __a)
+{
+  return (int32x2_t) {__a, __a};
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_n_s64 (int64_t __a)
+{
+  return (int64x1_t) {__a};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_n_u8 (uint8_t __a)
+{
+  return (uint8x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_n_u16 (uint16_t __a)
+{
+  return (uint16x4_t) {__a, __a, __a, __a};
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_n_u32 (uint32_t __a)
+{
+  return (uint32x2_t) {__a, __a};
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_n_u64 (uint64_t __a)
+{
+  return (uint64x1_t) {__a};
+}
+
+/* vdupq_n  */
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_n_f16 (float16_t __a)
+{
+  return (float16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_n_f32 (float32_t __a)
+{
+  return (float32x4_t) {__a, __a, __a, __a};
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_n_f64 (float64_t __a)
+{
+  return (float64x2_t) {__a, __a};
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_n_p8 (uint32_t __a)
+{
+  return (poly8x16_t) {__a, __a, __a, __a, __a, __a, __a, __a,
+		       __a, __a, __a, __a, __a, __a, __a, __a};
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_n_p16 (uint32_t __a)
+{
+  return (poly16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_n_p64 (uint64_t __a)
+{
+  return (poly64x2_t) {__a, __a};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_n_s8 (int32_t __a)
+{
+  return (int8x16_t) {__a, __a, __a, __a, __a, __a, __a, __a,
+		      __a, __a, __a, __a, __a, __a, __a, __a};
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_n_s16 (int32_t __a)
+{
+  return (int16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_n_s32 (int32_t __a)
+{
+  return (int32x4_t) {__a, __a, __a, __a};
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_n_s64 (int64_t __a)
+{
+  return (int64x2_t) {__a, __a};
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_n_u8 (uint32_t __a)
+{
+  return (uint8x16_t) {__a, __a, __a, __a, __a, __a, __a, __a,
+		       __a, __a, __a, __a, __a, __a, __a, __a};
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_n_u16 (uint32_t __a)
+{
+  return (uint16x8_t) {__a, __a, __a, __a, __a, __a, __a, __a};
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_n_u32 (uint32_t __a)
+{
+  return (uint32x4_t) {__a, __a, __a, __a};
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_n_u64 (uint64_t __a)
+{
+  return (uint64x2_t) {__a, __a};
+}
+
+/* vdup_lane  */
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_lane_f16 (float16x4_t __a, const int __b)
+{
+  return __aarch64_vdup_lane_f16 (__a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_lane_f32 (float32x2_t __a, const int __b)
+{
+  return __aarch64_vdup_lane_f32 (__a, __b);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_lane_f64 (float64x1_t __a, const int __b)
+{
+  return __aarch64_vdup_lane_f64 (__a, __b);
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_lane_p8 (poly8x8_t __a, const int __b)
+{
+  return __aarch64_vdup_lane_p8 (__a, __b);
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_lane_p16 (poly16x4_t __a, const int __b)
+{
+  return __aarch64_vdup_lane_p16 (__a, __b);
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_lane_p64 (poly64x1_t __a, const int __b)
+{
+  return __aarch64_vdup_lane_p64 (__a, __b);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_lane_s8 (int8x8_t __a, const int __b)
+{
+  return __aarch64_vdup_lane_s8 (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_lane_s16 (int16x4_t __a, const int __b)
+{
+  return __aarch64_vdup_lane_s16 (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_lane_s32 (int32x2_t __a, const int __b)
+{
+  return __aarch64_vdup_lane_s32 (__a, __b);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_lane_s64 (int64x1_t __a, const int __b)
+{
+  return __aarch64_vdup_lane_s64 (__a, __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_lane_u8 (uint8x8_t __a, const int __b)
+{
+  return __aarch64_vdup_lane_u8 (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_lane_u16 (uint16x4_t __a, const int __b)
+{
+  return __aarch64_vdup_lane_u16 (__a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_lane_u32 (uint32x2_t __a, const int __b)
+{
+  return __aarch64_vdup_lane_u32 (__a, __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_lane_u64 (uint64x1_t __a, const int __b)
+{
+  return __aarch64_vdup_lane_u64 (__a, __b);
+}
+
+/* vdup_laneq  */
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_laneq_f16 (float16x8_t __a, const int __b)
+{
+  return __aarch64_vdup_laneq_f16 (__a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_laneq_f32 (float32x4_t __a, const int __b)
+{
+  return __aarch64_vdup_laneq_f32 (__a, __b);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_laneq_f64 (float64x2_t __a, const int __b)
+{
+  return __aarch64_vdup_laneq_f64 (__a, __b);
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_laneq_p8 (poly8x16_t __a, const int __b)
+{
+  return __aarch64_vdup_laneq_p8 (__a, __b);
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_laneq_p16 (poly16x8_t __a, const int __b)
+{
+  return __aarch64_vdup_laneq_p16 (__a, __b);
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_laneq_p64 (poly64x2_t __a, const int __b)
+{
+  return __aarch64_vdup_laneq_p64 (__a, __b);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_laneq_s8 (int8x16_t __a, const int __b)
+{
+  return __aarch64_vdup_laneq_s8 (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_laneq_s16 (int16x8_t __a, const int __b)
+{
+  return __aarch64_vdup_laneq_s16 (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_laneq_s32 (int32x4_t __a, const int __b)
+{
+  return __aarch64_vdup_laneq_s32 (__a, __b);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_laneq_s64 (int64x2_t __a, const int __b)
+{
+  return __aarch64_vdup_laneq_s64 (__a, __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_laneq_u8 (uint8x16_t __a, const int __b)
+{
+  return __aarch64_vdup_laneq_u8 (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_laneq_u16 (uint16x8_t __a, const int __b)
+{
+  return __aarch64_vdup_laneq_u16 (__a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_laneq_u32 (uint32x4_t __a, const int __b)
+{
+  return __aarch64_vdup_laneq_u32 (__a, __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdup_laneq_u64 (uint64x2_t __a, const int __b)
+{
+  return __aarch64_vdup_laneq_u64 (__a, __b);
+}
+
+/* vdupq_lane  */
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_lane_f16 (float16x4_t __a, const int __b)
+{
+  return __aarch64_vdupq_lane_f16 (__a, __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_lane_f32 (float32x2_t __a, const int __b)
+{
+  return __aarch64_vdupq_lane_f32 (__a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_lane_f64 (float64x1_t __a, const int __b)
+{
+  return __aarch64_vdupq_lane_f64 (__a, __b);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_lane_p8 (poly8x8_t __a, const int __b)
+{
+  return __aarch64_vdupq_lane_p8 (__a, __b);
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_lane_p16 (poly16x4_t __a, const int __b)
+{
+  return __aarch64_vdupq_lane_p16 (__a, __b);
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_lane_p64 (poly64x1_t __a, const int __b)
+{
+  return __aarch64_vdupq_lane_p64 (__a, __b);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_lane_s8 (int8x8_t __a, const int __b)
+{
+  return __aarch64_vdupq_lane_s8 (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_lane_s16 (int16x4_t __a, const int __b)
+{
+  return __aarch64_vdupq_lane_s16 (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_lane_s32 (int32x2_t __a, const int __b)
+{
+  return __aarch64_vdupq_lane_s32 (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_lane_s64 (int64x1_t __a, const int __b)
+{
+  return __aarch64_vdupq_lane_s64 (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_lane_u8 (uint8x8_t __a, const int __b)
+{
+  return __aarch64_vdupq_lane_u8 (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_lane_u16 (uint16x4_t __a, const int __b)
+{
+  return __aarch64_vdupq_lane_u16 (__a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_lane_u32 (uint32x2_t __a, const int __b)
+{
+  return __aarch64_vdupq_lane_u32 (__a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_lane_u64 (uint64x1_t __a, const int __b)
+{
+  return __aarch64_vdupq_lane_u64 (__a, __b);
+}
+
+/* vdupq_laneq  */
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_laneq_f16 (float16x8_t __a, const int __b)
+{
+  return __aarch64_vdupq_laneq_f16 (__a, __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_laneq_f32 (float32x4_t __a, const int __b)
+{
+  return __aarch64_vdupq_laneq_f32 (__a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_laneq_f64 (float64x2_t __a, const int __b)
+{
+  return __aarch64_vdupq_laneq_f64 (__a, __b);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_laneq_p8 (poly8x16_t __a, const int __b)
+{
+  return __aarch64_vdupq_laneq_p8 (__a, __b);
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_laneq_p16 (poly16x8_t __a, const int __b)
+{
+  return __aarch64_vdupq_laneq_p16 (__a, __b);
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_laneq_p64 (poly64x2_t __a, const int __b)
+{
+  return __aarch64_vdupq_laneq_p64 (__a, __b);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_laneq_s8 (int8x16_t __a, const int __b)
+{
+  return __aarch64_vdupq_laneq_s8 (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_laneq_s16 (int16x8_t __a, const int __b)
+{
+  return __aarch64_vdupq_laneq_s16 (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_laneq_s32 (int32x4_t __a, const int __b)
+{
+  return __aarch64_vdupq_laneq_s32 (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_laneq_s64 (int64x2_t __a, const int __b)
+{
+  return __aarch64_vdupq_laneq_s64 (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_laneq_u8 (uint8x16_t __a, const int __b)
+{
+  return __aarch64_vdupq_laneq_u8 (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_laneq_u16 (uint16x8_t __a, const int __b)
+{
+  return __aarch64_vdupq_laneq_u16 (__a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_laneq_u32 (uint32x4_t __a, const int __b)
+{
+  return __aarch64_vdupq_laneq_u32 (__a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupq_laneq_u64 (uint64x2_t __a, const int __b)
+{
+  return __aarch64_vdupq_laneq_u64 (__a, __b);
+}
+
+/* vdupb_lane  */
+__extension__ extern __inline poly8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupb_lane_p8 (poly8x8_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupb_lane_s8 (int8x8_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupb_lane_u8 (uint8x8_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+/* vduph_lane  */
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vduph_lane_f16 (float16x4_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline poly16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vduph_lane_p16 (poly16x4_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vduph_lane_s16 (int16x4_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vduph_lane_u16 (uint16x4_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+/* vdups_lane  */
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdups_lane_f32 (float32x2_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdups_lane_s32 (int32x2_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdups_lane_u32 (uint32x2_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+/* vdupd_lane  */
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupd_lane_f64 (float64x1_t __a, const int __b)
+{
+  __AARCH64_LANE_CHECK (__a, __b);
+  return __a[0];
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupd_lane_s64 (int64x1_t __a, const int __b)
+{
+  __AARCH64_LANE_CHECK (__a, __b);
+  return __a[0];
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupd_lane_u64 (uint64x1_t __a, const int __b)
+{
+  __AARCH64_LANE_CHECK (__a, __b);
+  return __a[0];
+}
+
+/* vdupb_laneq  */
+__extension__ extern __inline poly8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupb_laneq_p8 (poly8x16_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupb_laneq_s8 (int8x16_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupb_laneq_u8 (uint8x16_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+/* vduph_laneq  */
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vduph_laneq_f16 (float16x8_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline poly16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vduph_laneq_p16 (poly16x8_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vduph_laneq_s16 (int16x8_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vduph_laneq_u16 (uint16x8_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+/* vdups_laneq  */
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdups_laneq_f32 (float32x4_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdups_laneq_s32 (int32x4_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdups_laneq_u32 (uint32x4_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+/* vdupd_laneq  */
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupd_laneq_f64 (float64x2_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupd_laneq_s64 (int64x2_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdupd_laneq_u64 (uint64x2_t __a, const int __b)
+{
+  return __aarch64_vget_lane_any (__a, __b);
+}
+
+/* vext  */
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vext_f16 (float16x4_t __a, float16x4_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a,
+			    (uint16x4_t) {4 - __c, 5 - __c, 6 - __c, 7 - __c});
+#else
+  return __builtin_shuffle (__a, __b,
+			    (uint16x4_t) {__c, __c + 1, __c + 2, __c + 3});
+#endif
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vext_f32 (float32x2_t __a, float32x2_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a, (uint32x2_t) {2-__c, 3-__c});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {__c, __c+1});
+#endif
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vext_f64 (float64x1_t __a, float64x1_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+  /* The only possible index to the assembler instruction returns element 0.  */
+  return __a;
+}
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vext_p8 (poly8x8_t __a, poly8x8_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a, (uint8x8_t)
+      {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
+#else
+  return __builtin_shuffle (__a, __b,
+      (uint8x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
+#endif
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vext_p16 (poly16x4_t __a, poly16x4_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a,
+      (uint16x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {__c, __c+1, __c+2, __c+3});
+#endif
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vext_p64 (poly64x1_t __a, poly64x1_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+  /* The only possible index to the assembler instruction returns element 0.  */
+  return __a;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vext_s8 (int8x8_t __a, int8x8_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a, (uint8x8_t)
+      {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
+#else
+  return __builtin_shuffle (__a, __b,
+      (uint8x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
+#endif
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vext_s16 (int16x4_t __a, int16x4_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a,
+      (uint16x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {__c, __c+1, __c+2, __c+3});
+#endif
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vext_s32 (int32x2_t __a, int32x2_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a, (uint32x2_t) {2-__c, 3-__c});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {__c, __c+1});
+#endif
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vext_s64 (int64x1_t __a, int64x1_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+  /* The only possible index to the assembler instruction returns element 0.  */
+  return __a;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vext_u8 (uint8x8_t __a, uint8x8_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a, (uint8x8_t)
+      {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
+#else
+  return __builtin_shuffle (__a, __b,
+      (uint8x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
+#endif
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vext_u16 (uint16x4_t __a, uint16x4_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a,
+      (uint16x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {__c, __c+1, __c+2, __c+3});
+#endif
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vext_u32 (uint32x2_t __a, uint32x2_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a, (uint32x2_t) {2-__c, 3-__c});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {__c, __c+1});
+#endif
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vext_u64 (uint64x1_t __a, uint64x1_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+  /* The only possible index to the assembler instruction returns element 0.  */
+  return __a;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vextq_f16 (float16x8_t __a, float16x8_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a,
+			    (uint16x8_t) {8 - __c, 9 - __c, 10 - __c, 11 - __c,
+					  12 - __c, 13 - __c, 14 - __c,
+					  15 - __c});
+#else
+  return __builtin_shuffle (__a, __b,
+			    (uint16x8_t) {__c, __c + 1, __c + 2, __c + 3,
+					  __c + 4, __c + 5, __c + 6, __c + 7});
+#endif
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vextq_f32 (float32x4_t __a, float32x4_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a,
+      (uint32x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {__c, __c+1, __c+2, __c+3});
+#endif
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vextq_f64 (float64x2_t __a, float64x2_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
+#endif
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vextq_p8 (poly8x16_t __a, poly8x16_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a, (uint8x16_t)
+      {16-__c, 17-__c, 18-__c, 19-__c, 20-__c, 21-__c, 22-__c, 23-__c,
+       24-__c, 25-__c, 26-__c, 27-__c, 28-__c, 29-__c, 30-__c, 31-__c});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
+       __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15});
+#endif
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vextq_p16 (poly16x8_t __a, poly16x8_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a, (uint16x8_t)
+      {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
+#else
+  return __builtin_shuffle (__a, __b,
+      (uint16x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
+#endif
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vextq_p64 (poly64x2_t __a, poly64x2_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
+#endif
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vextq_s8 (int8x16_t __a, int8x16_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a, (uint8x16_t)
+      {16-__c, 17-__c, 18-__c, 19-__c, 20-__c, 21-__c, 22-__c, 23-__c,
+       24-__c, 25-__c, 26-__c, 27-__c, 28-__c, 29-__c, 30-__c, 31-__c});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
+       __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15});
+#endif
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vextq_s16 (int16x8_t __a, int16x8_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a, (uint16x8_t)
+      {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
+#else
+  return __builtin_shuffle (__a, __b,
+      (uint16x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
+#endif
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vextq_s32 (int32x4_t __a, int32x4_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a,
+      (uint32x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {__c, __c+1, __c+2, __c+3});
+#endif
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vextq_s64 (int64x2_t __a, int64x2_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
+#endif
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vextq_u8 (uint8x16_t __a, uint8x16_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a, (uint8x16_t)
+      {16-__c, 17-__c, 18-__c, 19-__c, 20-__c, 21-__c, 22-__c, 23-__c,
+       24-__c, 25-__c, 26-__c, 27-__c, 28-__c, 29-__c, 30-__c, 31-__c});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7,
+       __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15});
+#endif
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vextq_u16 (uint16x8_t __a, uint16x8_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a, (uint16x8_t)
+      {8-__c, 9-__c, 10-__c, 11-__c, 12-__c, 13-__c, 14-__c, 15-__c});
+#else
+  return __builtin_shuffle (__a, __b,
+      (uint16x8_t) {__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7});
+#endif
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vextq_u32 (uint32x4_t __a, uint32x4_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a,
+      (uint32x4_t) {4-__c, 5-__c, 6-__c, 7-__c});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {__c, __c+1, __c+2, __c+3});
+#endif
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vextq_u64 (uint64x2_t __a, uint64x2_t __b, __const int __c)
+{
+  __AARCH64_LANE_CHECK (__a, __c);
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__b, __a, (uint64x2_t) {2-__c, 3-__c});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {__c, __c+1});
+#endif
+}
+
+/* vfma  */
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfma_f64 (float64x1_t __a, float64x1_t __b, float64x1_t __c)
+{
+  return (float64x1_t) {__builtin_fma (__b[0], __c[0], __a[0])};
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfma_f32 (float32x2_t __a, float32x2_t __b, float32x2_t __c)
+{
+  return __builtin_aarch64_fmav2sf (__b, __c, __a);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmaq_f32 (float32x4_t __a, float32x4_t __b, float32x4_t __c)
+{
+  return __builtin_aarch64_fmav4sf (__b, __c, __a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmaq_f64 (float64x2_t __a, float64x2_t __b, float64x2_t __c)
+{
+  return __builtin_aarch64_fmav2df (__b, __c, __a);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfma_n_f32 (float32x2_t __a, float32x2_t __b, float32_t __c)
+{
+  return __builtin_aarch64_fmav2sf (__b, vdup_n_f32 (__c), __a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfma_n_f64 (float64x1_t __a, float64x1_t __b, float64_t __c)
+{
+  return (float64x1_t) {__b[0] * __c + __a[0]};
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmaq_n_f32 (float32x4_t __a, float32x4_t __b, float32_t __c)
+{
+  return __builtin_aarch64_fmav4sf (__b, vdupq_n_f32 (__c), __a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmaq_n_f64 (float64x2_t __a, float64x2_t __b, float64_t __c)
+{
+  return __builtin_aarch64_fmav2df (__b, vdupq_n_f64 (__c), __a);
+}
+
+/* vfma_lane  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfma_lane_f32 (float32x2_t __a, float32x2_t __b,
+	       float32x2_t __c, const int __lane)
+{
+  return __builtin_aarch64_fmav2sf (__b,
+				    __aarch64_vdup_lane_f32 (__c, __lane),
+				    __a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfma_lane_f64 (float64x1_t __a, float64x1_t __b,
+	       float64x1_t __c, const int __lane)
+{
+  return (float64x1_t) {__builtin_fma (__b[0], __c[0], __a[0])};
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmad_lane_f64 (float64_t __a, float64_t __b,
+	        float64x1_t __c, const int __lane)
+{
+  return __builtin_fma (__b, __c[0], __a);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmas_lane_f32 (float32_t __a, float32_t __b,
+	        float32x2_t __c, const int __lane)
+{
+  return __builtin_fmaf (__b, __aarch64_vget_lane_any (__c, __lane), __a);
+}
+
+/* vfma_laneq  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfma_laneq_f32 (float32x2_t __a, float32x2_t __b,
+	        float32x4_t __c, const int __lane)
+{
+  return __builtin_aarch64_fmav2sf (__b,
+				    __aarch64_vdup_laneq_f32 (__c, __lane),
+				    __a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfma_laneq_f64 (float64x1_t __a, float64x1_t __b,
+	        float64x2_t __c, const int __lane)
+{
+  float64_t __c0 = __aarch64_vget_lane_any (__c, __lane);
+  return (float64x1_t) {__builtin_fma (__b[0], __c0, __a[0])};
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmad_laneq_f64 (float64_t __a, float64_t __b,
+	         float64x2_t __c, const int __lane)
+{
+  return __builtin_fma (__b, __aarch64_vget_lane_any (__c, __lane), __a);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmas_laneq_f32 (float32_t __a, float32_t __b,
+		 float32x4_t __c, const int __lane)
+{
+  return __builtin_fmaf (__b, __aarch64_vget_lane_any (__c, __lane), __a);
+}
+
+/* vfmaq_lane  */
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmaq_lane_f32 (float32x4_t __a, float32x4_t __b,
+	        float32x2_t __c, const int __lane)
+{
+  return __builtin_aarch64_fmav4sf (__b,
+				    __aarch64_vdupq_lane_f32 (__c, __lane),
+				    __a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmaq_lane_f64 (float64x2_t __a, float64x2_t __b,
+	        float64x1_t __c, const int __lane)
+{
+  return __builtin_aarch64_fmav2df (__b, vdupq_n_f64 (__c[0]), __a);
+}
+
+/* vfmaq_laneq  */
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmaq_laneq_f32 (float32x4_t __a, float32x4_t __b,
+	         float32x4_t __c, const int __lane)
+{
+  return __builtin_aarch64_fmav4sf (__b,
+				    __aarch64_vdupq_laneq_f32 (__c, __lane),
+				    __a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmaq_laneq_f64 (float64x2_t __a, float64x2_t __b,
+	         float64x2_t __c, const int __lane)
+{
+  return __builtin_aarch64_fmav2df (__b,
+				    __aarch64_vdupq_laneq_f64 (__c, __lane),
+				    __a);
+}
+
+/* vfms  */
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfms_f64 (float64x1_t __a, float64x1_t __b, float64x1_t __c)
+{
+  return (float64x1_t) {__builtin_fma (-__b[0], __c[0], __a[0])};
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfms_f32 (float32x2_t __a, float32x2_t __b, float32x2_t __c)
+{
+  return __builtin_aarch64_fmav2sf (-__b, __c, __a);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmsq_f32 (float32x4_t __a, float32x4_t __b, float32x4_t __c)
+{
+  return __builtin_aarch64_fmav4sf (-__b, __c, __a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmsq_f64 (float64x2_t __a, float64x2_t __b, float64x2_t __c)
+{
+  return __builtin_aarch64_fmav2df (-__b, __c, __a);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfms_n_f32 (float32x2_t __a, float32x2_t __b, float32_t __c)
+{
+  return __builtin_aarch64_fmav2sf (-__b, vdup_n_f32 (__c), __a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfms_n_f64 (float64x1_t __a, float64x1_t __b, float64_t __c)
+{
+  return (float64x1_t) {-__b[0] * __c + __a[0]};
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmsq_n_f32 (float32x4_t __a, float32x4_t __b, float32_t __c)
+{
+  return __builtin_aarch64_fmav4sf (-__b, vdupq_n_f32 (__c), __a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmsq_n_f64 (float64x2_t __a, float64x2_t __b, float64_t __c)
+{
+  return __builtin_aarch64_fmav2df (-__b, vdupq_n_f64 (__c), __a);
+}
+
+/* vfms_lane  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfms_lane_f32 (float32x2_t __a, float32x2_t __b,
+	       float32x2_t __c, const int __lane)
+{
+  return __builtin_aarch64_fmav2sf (-__b,
+				    __aarch64_vdup_lane_f32 (__c, __lane),
+				    __a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfms_lane_f64 (float64x1_t __a, float64x1_t __b,
+	       float64x1_t __c, const int __lane)
+{
+  return (float64x1_t) {__builtin_fma (-__b[0], __c[0], __a[0])};
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmsd_lane_f64 (float64_t __a, float64_t __b,
+	        float64x1_t __c, const int __lane)
+{
+  return __builtin_fma (-__b, __c[0], __a);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmss_lane_f32 (float32_t __a, float32_t __b,
+	        float32x2_t __c, const int __lane)
+{
+  return __builtin_fmaf (-__b, __aarch64_vget_lane_any (__c, __lane), __a);
+}
+
+/* vfms_laneq  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfms_laneq_f32 (float32x2_t __a, float32x2_t __b,
+	        float32x4_t __c, const int __lane)
+{
+  return __builtin_aarch64_fmav2sf (-__b,
+				    __aarch64_vdup_laneq_f32 (__c, __lane),
+				    __a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfms_laneq_f64 (float64x1_t __a, float64x1_t __b,
+	        float64x2_t __c, const int __lane)
+{
+  float64_t __c0 = __aarch64_vget_lane_any (__c, __lane);
+  return (float64x1_t) {__builtin_fma (-__b[0], __c0, __a[0])};
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmsd_laneq_f64 (float64_t __a, float64_t __b,
+	         float64x2_t __c, const int __lane)
+{
+  return __builtin_fma (-__b, __aarch64_vget_lane_any (__c, __lane), __a);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmss_laneq_f32 (float32_t __a, float32_t __b,
+		 float32x4_t __c, const int __lane)
+{
+  return __builtin_fmaf (-__b, __aarch64_vget_lane_any (__c, __lane), __a);
+}
+
+/* vfmsq_lane  */
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmsq_lane_f32 (float32x4_t __a, float32x4_t __b,
+	        float32x2_t __c, const int __lane)
+{
+  return __builtin_aarch64_fmav4sf (-__b,
+				    __aarch64_vdupq_lane_f32 (__c, __lane),
+				    __a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmsq_lane_f64 (float64x2_t __a, float64x2_t __b,
+	        float64x1_t __c, const int __lane)
+{
+  return __builtin_aarch64_fmav2df (-__b, vdupq_n_f64 (__c[0]), __a);
+}
+
+/* vfmsq_laneq  */
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmsq_laneq_f32 (float32x4_t __a, float32x4_t __b,
+	         float32x4_t __c, const int __lane)
+{
+  return __builtin_aarch64_fmav4sf (-__b,
+				    __aarch64_vdupq_laneq_f32 (__c, __lane),
+				    __a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmsq_laneq_f64 (float64x2_t __a, float64x2_t __b,
+	         float64x2_t __c, const int __lane)
+{
+  return __builtin_aarch64_fmav2df (-__b,
+				    __aarch64_vdupq_laneq_f64 (__c, __lane),
+				    __a);
+}
+
+/* vld1 */
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_f16 (const float16_t *__a)
+{
+  return __builtin_aarch64_ld1v4hf (__a);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_f32 (const float32_t *a)
+{
+  return __builtin_aarch64_ld1v2sf ((const __builtin_aarch64_simd_sf *) a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_f64 (const float64_t *a)
+{
+  return (float64x1_t) {*a};
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_p8 (const poly8_t *a)
+{
+  return (poly8x8_t)
+    __builtin_aarch64_ld1v8qi ((const __builtin_aarch64_simd_qi *) a);
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_p16 (const poly16_t *a)
+{
+  return (poly16x4_t)
+    __builtin_aarch64_ld1v4hi ((const __builtin_aarch64_simd_hi *) a);
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_p64 (const poly64_t *a)
+{
+  return (poly64x1_t) {*a};
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_s8 (const int8_t *a)
+{
+  return __builtin_aarch64_ld1v8qi ((const __builtin_aarch64_simd_qi *) a);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_s16 (const int16_t *a)
+{
+  return __builtin_aarch64_ld1v4hi ((const __builtin_aarch64_simd_hi *) a);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_s32 (const int32_t *a)
+{
+  return __builtin_aarch64_ld1v2si ((const __builtin_aarch64_simd_si *) a);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_s64 (const int64_t *a)
+{
+  return (int64x1_t) {*a};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_u8 (const uint8_t *a)
+{
+  return (uint8x8_t)
+    __builtin_aarch64_ld1v8qi ((const __builtin_aarch64_simd_qi *) a);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_u16 (const uint16_t *a)
+{
+  return (uint16x4_t)
+    __builtin_aarch64_ld1v4hi ((const __builtin_aarch64_simd_hi *) a);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_u32 (const uint32_t *a)
+{
+  return (uint32x2_t)
+    __builtin_aarch64_ld1v2si ((const __builtin_aarch64_simd_si *) a);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_u64 (const uint64_t *a)
+{
+  return (uint64x1_t) {*a};
+}
+
+/* vld1x3  */
+
+__extension__ extern __inline uint8x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_u8_x3 (const uint8_t *__a)
+{
+  uint8x8x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = (__builtin_aarch64_simd_ci)__builtin_aarch64_ld1x3v8qi ((const __builtin_aarch64_simd_qi *) __a);
+  __i.val[0] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi  (__o, 0);
+  __i.val[1] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi  (__o, 1);
+  __i.val[2] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline int8x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_s8_x3 (const uint8_t *__a)
+{
+  int8x8x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v8qi ((const __builtin_aarch64_simd_qi *) __a);
+  __i.val[0] = (int8x8_t) __builtin_aarch64_get_dregciv8qi  (__o, 0);
+  __i.val[1] = (int8x8_t) __builtin_aarch64_get_dregciv8qi  (__o, 1);
+  __i.val[2] = (int8x8_t) __builtin_aarch64_get_dregciv8qi  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline uint16x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_u16_x3 (const uint16_t *__a)
+{
+  uint16x4x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v4hi ((const __builtin_aarch64_simd_hi *) __a);
+  __i.val[0] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi  (__o, 0);
+  __i.val[1] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi  (__o, 1);
+  __i.val[2] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline int16x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_s16_x3 (const int16_t *__a)
+{
+  int16x4x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v4hi ((const __builtin_aarch64_simd_hi *) __a);
+  __i.val[0] = (int16x4_t) __builtin_aarch64_get_dregciv4hi  (__o, 0);
+  __i.val[1] = (int16x4_t) __builtin_aarch64_get_dregciv4hi  (__o, 1);
+  __i.val[2] = (int16x4_t) __builtin_aarch64_get_dregciv4hi  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline uint32x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_u32_x3 (const uint32_t *__a)
+{
+  uint32x2x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v2si ((const __builtin_aarch64_simd_si *) __a);
+  __i.val[0] = (uint32x2_t) __builtin_aarch64_get_dregciv2si  (__o, 0);
+  __i.val[1] = (uint32x2_t) __builtin_aarch64_get_dregciv2si  (__o, 1);
+  __i.val[2] = (uint32x2_t) __builtin_aarch64_get_dregciv2si  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline int32x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_s32_x3 (const uint32_t *__a)
+{
+  int32x2x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v2si ((const __builtin_aarch64_simd_si *) __a);
+  __i.val[0] = (int32x2_t) __builtin_aarch64_get_dregciv2si  (__o, 0);
+  __i.val[1] = (int32x2_t) __builtin_aarch64_get_dregciv2si  (__o, 1);
+  __i.val[2] = (int32x2_t) __builtin_aarch64_get_dregciv2si  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline uint64x1x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_u64_x3 (const uint64_t *__a)
+{
+  uint64x1x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3di ((const __builtin_aarch64_simd_di *) __a);
+  __i.val[0] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
+  __i.val[1] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
+  __i.val[2] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline int64x1x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_s64_x3 (const int64_t *__a)
+{
+  int64x1x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3di ((const __builtin_aarch64_simd_di *) __a);
+  __i.val[0] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
+  __i.val[1] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
+  __i.val[2] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
+
+  return __i;
+}
+
+__extension__ extern __inline float16x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_f16_x3 (const float16_t *__a)
+{
+  float16x4x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v4hf ((const __builtin_aarch64_simd_hf *) __a);
+  __i.val[0] = (float16x4_t) __builtin_aarch64_get_dregciv4hf  (__o, 0);
+  __i.val[1] = (float16x4_t) __builtin_aarch64_get_dregciv4hf  (__o, 1);
+  __i.val[2] = (float16x4_t) __builtin_aarch64_get_dregciv4hf  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline float32x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_f32_x3 (const float32_t *__a)
+{
+  float32x2x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v2sf ((const __builtin_aarch64_simd_sf *) __a);
+  __i.val[0] = (float32x2_t) __builtin_aarch64_get_dregciv2sf  (__o, 0);
+  __i.val[1] = (float32x2_t) __builtin_aarch64_get_dregciv2sf  (__o, 1);
+  __i.val[2] = (float32x2_t) __builtin_aarch64_get_dregciv2sf  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline float64x1x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_f64_x3 (const float64_t *__a)
+{
+  float64x1x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3df ((const __builtin_aarch64_simd_df *) __a);
+  __i.val[0] = (float64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
+  __i.val[1] = (float64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
+  __i.val[2] = (float64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline poly8x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_p8_x3 (const poly8_t *__a)
+{
+  poly8x8x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v8qi ((const __builtin_aarch64_simd_qi *) __a);
+  __i.val[0] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi  (__o, 0);
+  __i.val[1] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi  (__o, 1);
+  __i.val[2] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline poly16x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_p16_x3 (const poly16_t *__a)
+{
+  poly16x4x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v4hi ((const __builtin_aarch64_simd_hi *) __a);
+  __i.val[0] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi  (__o, 0);
+  __i.val[1] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi  (__o, 1);
+  __i.val[2] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline poly64x1x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_p64_x3 (const poly64_t *__a)
+{
+  poly64x1x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3di ((const __builtin_aarch64_simd_di *) __a);
+  __i.val[0] = (poly64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
+  __i.val[1] = (poly64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
+  __i.val[2] = (poly64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
+
+return __i;
+}
+
+__extension__ extern __inline uint8x16x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_u8_x3 (const uint8_t *__a)
+{
+  uint8x16x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v16qi ((const __builtin_aarch64_simd_qi *) __a);
+  __i.val[0] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi  (__o, 0);
+  __i.val[1] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi  (__o, 1);
+  __i.val[2] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline int8x16x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_s8_x3 (const int8_t *__a)
+{
+  int8x16x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v16qi ((const __builtin_aarch64_simd_qi *) __a);
+  __i.val[0] = (int8x16_t) __builtin_aarch64_get_qregciv16qi  (__o, 0);
+  __i.val[1] = (int8x16_t) __builtin_aarch64_get_qregciv16qi  (__o, 1);
+  __i.val[2] = (int8x16_t) __builtin_aarch64_get_qregciv16qi  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline uint16x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_u16_x3 (const uint16_t *__a)
+{
+  uint16x8x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v8hi ((const __builtin_aarch64_simd_hi *) __a);
+  __i.val[0] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi  (__o, 0);
+  __i.val[1] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi  (__o, 1);
+  __i.val[2] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline int16x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_s16_x3 (const int16_t *__a)
+{
+  int16x8x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v8hi ((const __builtin_aarch64_simd_hi *) __a);
+  __i.val[0] = (int16x8_t) __builtin_aarch64_get_qregciv8hi  (__o, 0);
+  __i.val[1] = (int16x8_t) __builtin_aarch64_get_qregciv8hi  (__o, 1);
+  __i.val[2] = (int16x8_t) __builtin_aarch64_get_qregciv8hi  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline uint32x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_u32_x3 (const uint32_t *__a)
+{
+  uint32x4x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v4si ((const __builtin_aarch64_simd_si *) __a);
+  __i.val[0] = (uint32x4_t) __builtin_aarch64_get_qregciv4si  (__o, 0);
+  __i.val[1] = (uint32x4_t) __builtin_aarch64_get_qregciv4si  (__o, 1);
+  __i.val[2] = (uint32x4_t) __builtin_aarch64_get_qregciv4si  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline int32x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_s32_x3 (const int32_t *__a)
+{
+  int32x4x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v4si ((const __builtin_aarch64_simd_si *) __a);
+  __i.val[0] = (int32x4_t) __builtin_aarch64_get_qregciv4si  (__o, 0);
+  __i.val[1] = (int32x4_t) __builtin_aarch64_get_qregciv4si  (__o, 1);
+  __i.val[2] = (int32x4_t) __builtin_aarch64_get_qregciv4si  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline uint64x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_u64_x3 (const uint64_t *__a)
+{
+  uint64x2x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v2di ((const __builtin_aarch64_simd_di *) __a);
+  __i.val[0] = (uint64x2_t) __builtin_aarch64_get_qregciv2di  (__o, 0);
+  __i.val[1] = (uint64x2_t) __builtin_aarch64_get_qregciv2di  (__o, 1);
+  __i.val[2] = (uint64x2_t) __builtin_aarch64_get_qregciv2di  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline int64x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_s64_x3 (const int64_t *__a)
+{
+  int64x2x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v2di ((const __builtin_aarch64_simd_di *) __a);
+  __i.val[0] = (int64x2_t) __builtin_aarch64_get_qregciv2di  (__o, 0);
+  __i.val[1] = (int64x2_t) __builtin_aarch64_get_qregciv2di  (__o, 1);
+  __i.val[2] = (int64x2_t) __builtin_aarch64_get_qregciv2di  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline float16x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_f16_x3 (const float16_t *__a)
+{
+  float16x8x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v8hf ((const __builtin_aarch64_simd_hf *) __a);
+  __i.val[0] = (float16x8_t) __builtin_aarch64_get_qregciv8hf  (__o, 0);
+  __i.val[1] = (float16x8_t) __builtin_aarch64_get_qregciv8hf  (__o, 1);
+  __i.val[2] = (float16x8_t) __builtin_aarch64_get_qregciv8hf  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline float32x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_f32_x3 (const float32_t *__a)
+{
+  float32x4x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v4sf ((const __builtin_aarch64_simd_sf *) __a);
+  __i.val[0] = (float32x4_t) __builtin_aarch64_get_qregciv4sf  (__o, 0);
+  __i.val[1] = (float32x4_t) __builtin_aarch64_get_qregciv4sf  (__o, 1);
+  __i.val[2] = (float32x4_t) __builtin_aarch64_get_qregciv4sf  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline float64x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_f64_x3 (const float64_t *__a)
+{
+  float64x2x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v2df ((const __builtin_aarch64_simd_df *) __a);
+  __i.val[0] = (float64x2_t) __builtin_aarch64_get_qregciv2df  (__o, 0);
+  __i.val[1] = (float64x2_t) __builtin_aarch64_get_qregciv2df  (__o, 1);
+  __i.val[2] = (float64x2_t) __builtin_aarch64_get_qregciv2df  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline poly8x16x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_p8_x3 (const poly8_t *__a)
+{
+  poly8x16x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v16qi ((const __builtin_aarch64_simd_qi *) __a);
+  __i.val[0] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi  (__o, 0);
+  __i.val[1] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi  (__o, 1);
+  __i.val[2] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline poly16x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_p16_x3 (const poly16_t *__a)
+{
+  poly16x8x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v8hi ((const __builtin_aarch64_simd_hi *) __a);
+  __i.val[0] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi  (__o, 0);
+  __i.val[1] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi  (__o, 1);
+  __i.val[2] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi  (__o, 2);
+  return __i;
+}
+
+__extension__ extern __inline poly64x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_p64_x3 (const poly64_t *__a)
+{
+  poly64x2x3_t __i;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld1x3v2di ((const __builtin_aarch64_simd_di *) __a);
+  __i.val[0] = (poly64x2_t) __builtin_aarch64_get_qregciv2di  (__o, 0);
+  __i.val[1] = (poly64x2_t) __builtin_aarch64_get_qregciv2di  (__o, 1);
+  __i.val[2] = (poly64x2_t) __builtin_aarch64_get_qregciv2di  (__o, 2);
+  return __i;
+}
+
+/* vld1q */
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_f16 (const float16_t *__a)
+{
+  return __builtin_aarch64_ld1v8hf (__a);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_f32 (const float32_t *a)
+{
+  return __builtin_aarch64_ld1v4sf ((const __builtin_aarch64_simd_sf *) a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_f64 (const float64_t *a)
+{
+  return __builtin_aarch64_ld1v2df ((const __builtin_aarch64_simd_df *) a);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_p8 (const poly8_t *a)
+{
+  return (poly8x16_t)
+    __builtin_aarch64_ld1v16qi ((const __builtin_aarch64_simd_qi *) a);
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_p16 (const poly16_t *a)
+{
+  return (poly16x8_t)
+    __builtin_aarch64_ld1v8hi ((const __builtin_aarch64_simd_hi *) a);
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_p64 (const poly64_t *a)
+{
+  return (poly64x2_t)
+    __builtin_aarch64_ld1v2di ((const __builtin_aarch64_simd_di *) a);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_s8 (const int8_t *a)
+{
+  return __builtin_aarch64_ld1v16qi ((const __builtin_aarch64_simd_qi *) a);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_s16 (const int16_t *a)
+{
+  return __builtin_aarch64_ld1v8hi ((const __builtin_aarch64_simd_hi *) a);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_s32 (const int32_t *a)
+{
+  return __builtin_aarch64_ld1v4si ((const __builtin_aarch64_simd_si *) a);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_s64 (const int64_t *a)
+{
+  return __builtin_aarch64_ld1v2di ((const __builtin_aarch64_simd_di *) a);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_u8 (const uint8_t *a)
+{
+  return (uint8x16_t)
+    __builtin_aarch64_ld1v16qi ((const __builtin_aarch64_simd_qi *) a);
+}
+
+__extension__ extern __inline uint8x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_u8_x2 (const uint8_t *__a)
+{
+  uint8x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
+  ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int8x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_s8_x2 (const int8_t *__a)
+{
+  int8x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
+  ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint16x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_u16_x2 (const uint16_t *__a)
+{
+  uint16x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
+  ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int16x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_s16_x2 (const int16_t *__a)
+{
+  int16x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
+  ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint32x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_u32_x2 (const uint32_t *__a)
+{
+  uint32x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v2si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
+  ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int32x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_s32_x2 (const int32_t *__a)
+{
+  int32x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v2si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
+  ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint64x1x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_u64_x2 (const uint64_t *__a)
+{
+  uint64x1x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
+  ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int64x1x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_s64_x2 (const int64_t *__a)
+{
+  int64x1x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
+  ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float16x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_f16_x2 (const float16_t *__a)
+{
+  float16x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v4hf ((const __builtin_aarch64_simd_hf *) __a);
+  ret.val[0] = (float16x4_t) __builtin_aarch64_get_dregoiv4hf (__o, 0);
+  ret.val[1] = (float16x4_t) __builtin_aarch64_get_dregoiv4hf (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float32x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_f32_x2 (const float32_t *__a)
+{
+  float32x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v2sf ((const __builtin_aarch64_simd_sf *) __a);
+  ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 0);
+  ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float64x1x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_f64_x2 (const float64_t *__a)
+{
+  float64x1x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2df ((const __builtin_aarch64_simd_df *) __a);
+  ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 0)};
+  ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 1)};
+  return ret;
+}
+
+__extension__ extern __inline poly8x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_p8_x2 (const poly8_t *__a)
+{
+  poly8x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
+  ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline poly16x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_p16_x2 (const poly16_t *__a)
+{
+  poly16x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
+  ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline poly64x1x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_p64_x2 (const poly64_t *__a)
+{
+  poly64x1x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (poly64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
+  ret.val[1] = (poly64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint8x16x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_u8_x2 (const uint8_t *__a)
+{
+  uint8x16x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
+  ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int8x16x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_s8_x2 (const int8_t *__a)
+{
+  int8x16x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
+  ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint16x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_u16_x2 (const uint16_t *__a)
+{
+  uint16x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
+  ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int16x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_s16_x2 (const int16_t *__a)
+{
+  int16x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
+  ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint32x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_u32_x2 (const uint32_t *__a)
+{
+  uint32x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v4si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
+  ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int32x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_s32_x2 (const int32_t *__a)
+{
+  int32x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v4si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
+  ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint64x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_u64_x2 (const uint64_t *__a)
+{
+  uint64x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
+  ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int64x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_s64_x2 (const int64_t *__a)
+{
+  int64x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
+  ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float16x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_f16_x2 (const float16_t *__a)
+{
+  float16x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v8hf ((const __builtin_aarch64_simd_hf *) __a);
+  ret.val[0] = (float16x8_t) __builtin_aarch64_get_qregoiv8hf (__o, 0);
+  ret.val[1] = (float16x8_t) __builtin_aarch64_get_qregoiv8hf (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float32x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_f32_x2 (const float32_t *__a)
+{
+  float32x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v4sf ((const __builtin_aarch64_simd_sf *) __a);
+  ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 0);
+  ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float64x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_f64_x2 (const float64_t *__a)
+{
+  float64x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v2df ((const __builtin_aarch64_simd_df *) __a);
+  ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 0);
+  ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline poly8x16x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_p8_x2 (const poly8_t *__a)
+{
+  poly8x16x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
+  ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline poly16x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_p16_x2 (const poly16_t *__a)
+{
+  poly16x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
+  ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline poly64x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_p64_x2 (const poly64_t *__a)
+{
+  poly64x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld1x2v2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (poly64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
+  ret.val[1] = (poly64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_u16 (const uint16_t *a)
+{
+  return (uint16x8_t)
+    __builtin_aarch64_ld1v8hi ((const __builtin_aarch64_simd_hi *) a);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_u32 (const uint32_t *a)
+{
+  return (uint32x4_t)
+    __builtin_aarch64_ld1v4si ((const __builtin_aarch64_simd_si *) a);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_u64 (const uint64_t *a)
+{
+  return (uint64x2_t)
+    __builtin_aarch64_ld1v2di ((const __builtin_aarch64_simd_di *) a);
+}
+
+/* vld1_dup  */
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_dup_f16 (const float16_t* __a)
+{
+  return vdup_n_f16 (*__a);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_dup_f32 (const float32_t* __a)
+{
+  return vdup_n_f32 (*__a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_dup_f64 (const float64_t* __a)
+{
+  return vdup_n_f64 (*__a);
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_dup_p8 (const poly8_t* __a)
+{
+  return vdup_n_p8 (*__a);
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_dup_p16 (const poly16_t* __a)
+{
+  return vdup_n_p16 (*__a);
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_dup_p64 (const poly64_t* __a)
+{
+  return vdup_n_p64 (*__a);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_dup_s8 (const int8_t* __a)
+{
+  return vdup_n_s8 (*__a);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_dup_s16 (const int16_t* __a)
+{
+  return vdup_n_s16 (*__a);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_dup_s32 (const int32_t* __a)
+{
+  return vdup_n_s32 (*__a);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_dup_s64 (const int64_t* __a)
+{
+  return vdup_n_s64 (*__a);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_dup_u8 (const uint8_t* __a)
+{
+  return vdup_n_u8 (*__a);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_dup_u16 (const uint16_t* __a)
+{
+  return vdup_n_u16 (*__a);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_dup_u32 (const uint32_t* __a)
+{
+  return vdup_n_u32 (*__a);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_dup_u64 (const uint64_t* __a)
+{
+  return vdup_n_u64 (*__a);
+}
+
+/* vld1q_dup  */
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_dup_f16 (const float16_t* __a)
+{
+  return vdupq_n_f16 (*__a);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_dup_f32 (const float32_t* __a)
+{
+  return vdupq_n_f32 (*__a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_dup_f64 (const float64_t* __a)
+{
+  return vdupq_n_f64 (*__a);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_dup_p8 (const poly8_t* __a)
+{
+  return vdupq_n_p8 (*__a);
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_dup_p16 (const poly16_t* __a)
+{
+  return vdupq_n_p16 (*__a);
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_dup_p64 (const poly64_t* __a)
+{
+  return vdupq_n_p64 (*__a);
+}
+
+ __extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_dup_s8 (const int8_t* __a)
+{
+  return vdupq_n_s8 (*__a);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_dup_s16 (const int16_t* __a)
+{
+  return vdupq_n_s16 (*__a);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_dup_s32 (const int32_t* __a)
+{
+  return vdupq_n_s32 (*__a);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_dup_s64 (const int64_t* __a)
+{
+  return vdupq_n_s64 (*__a);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_dup_u8 (const uint8_t* __a)
+{
+  return vdupq_n_u8 (*__a);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_dup_u16 (const uint16_t* __a)
+{
+  return vdupq_n_u16 (*__a);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_dup_u32 (const uint32_t* __a)
+{
+  return vdupq_n_u32 (*__a);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_dup_u64 (const uint64_t* __a)
+{
+  return vdupq_n_u64 (*__a);
+}
+
+/* vld1_lane  */
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_lane_f16 (const float16_t *__src, float16x4_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_lane_f32 (const float32_t *__src, float32x2_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_lane_f64 (const float64_t *__src, float64x1_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_lane_p8 (const poly8_t *__src, poly8x8_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_lane_p16 (const poly16_t *__src, poly16x4_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_lane_p64 (const poly64_t *__src, poly64x1_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_lane_s8 (const int8_t *__src, int8x8_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_lane_s16 (const int16_t *__src, int16x4_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_lane_s32 (const int32_t *__src, int32x2_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_lane_s64 (const int64_t *__src, int64x1_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_lane_u8 (const uint8_t *__src, uint8x8_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_lane_u16 (const uint16_t *__src, uint16x4_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_lane_u32 (const uint32_t *__src, uint32x2_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1_lane_u64 (const uint64_t *__src, uint64x1_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+/* vld1q_lane  */
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_lane_f16 (const float16_t *__src, float16x8_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_lane_f32 (const float32_t *__src, float32x4_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_lane_f64 (const float64_t *__src, float64x2_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_lane_p8 (const poly8_t *__src, poly8x16_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_lane_p16 (const poly16_t *__src, poly16x8_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_lane_p64 (const poly64_t *__src, poly64x2_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_lane_s8 (const int8_t *__src, int8x16_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_lane_s16 (const int16_t *__src, int16x8_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_lane_s32 (const int32_t *__src, int32x4_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_lane_s64 (const int64_t *__src, int64x2_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_lane_u8 (const uint8_t *__src, uint8x16_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_lane_u16 (const uint16_t *__src, uint16x8_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_lane_u32 (const uint32_t *__src, uint32x4_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld1q_lane_u64 (const uint64_t *__src, uint64x2_t __vec, const int __lane)
+{
+  return __aarch64_vset_lane_any (*__src, __vec, __lane);
+}
+
+/* vldn */
+
+__extension__ extern __inline int64x1x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_s64 (const int64_t * __a)
+{
+  int64x1x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
+  ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint64x1x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_u64 (const uint64_t * __a)
+{
+  uint64x1x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
+  ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float64x1x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_f64 (const float64_t * __a)
+{
+  float64x1x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2df ((const __builtin_aarch64_simd_df *) __a);
+  ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 0)};
+  ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 1)};
+  return ret;
+}
+
+__extension__ extern __inline int8x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_s8 (const int8_t * __a)
+{
+  int8x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
+  ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline poly8x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_p8 (const poly8_t * __a)
+{
+  poly8x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
+  ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline poly64x1x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_p64 (const poly64_t * __a)
+{
+  poly64x1x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (poly64x1_t) __builtin_aarch64_get_dregoidi_pss (__o, 0);
+  ret.val[1] = (poly64x1_t) __builtin_aarch64_get_dregoidi_pss (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int16x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_s16 (const int16_t * __a)
+{
+  int16x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
+  ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline poly16x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_p16 (const poly16_t * __a)
+{
+  poly16x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
+  ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int32x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_s32 (const int32_t * __a)
+{
+  int32x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v2si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
+  ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint8x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_u8 (const uint8_t * __a)
+{
+  uint8x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
+  ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint16x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_u16 (const uint16_t * __a)
+{
+  uint16x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
+  ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint32x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_u32 (const uint32_t * __a)
+{
+  uint32x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v2si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
+  ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float16x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_f16 (const float16_t * __a)
+{
+  float16x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v4hf (__a);
+  ret.val[0] = __builtin_aarch64_get_dregoiv4hf (__o, 0);
+  ret.val[1] = __builtin_aarch64_get_dregoiv4hf (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float32x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_f32 (const float32_t * __a)
+{
+  float32x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v2sf ((const __builtin_aarch64_simd_sf *) __a);
+  ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 0);
+  ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int8x16x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_s8 (const int8_t * __a)
+{
+  int8x16x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
+  ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline poly8x16x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_p8 (const poly8_t * __a)
+{
+  poly8x16x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
+  ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int16x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_s16 (const int16_t * __a)
+{
+  int16x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
+  ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline poly16x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_p16 (const poly16_t * __a)
+{
+  poly16x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
+  ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline poly64x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_p64 (const poly64_t * __a)
+{
+  poly64x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (poly64x2_t) __builtin_aarch64_get_qregoiv2di_pss (__o, 0);
+  ret.val[1] = (poly64x2_t) __builtin_aarch64_get_qregoiv2di_pss (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int32x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_s32 (const int32_t * __a)
+{
+  int32x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v4si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
+  ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int64x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_s64 (const int64_t * __a)
+{
+  int64x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
+  ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint8x16x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_u8 (const uint8_t * __a)
+{
+  uint8x16x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
+  ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint16x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_u16 (const uint16_t * __a)
+{
+  uint16x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
+  ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint32x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_u32 (const uint32_t * __a)
+{
+  uint32x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v4si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
+  ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint64x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_u64 (const uint64_t * __a)
+{
+  uint64x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
+  ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float16x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_f16 (const float16_t * __a)
+{
+  float16x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v8hf (__a);
+  ret.val[0] = __builtin_aarch64_get_qregoiv8hf (__o, 0);
+  ret.val[1] = __builtin_aarch64_get_qregoiv8hf (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float32x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_f32 (const float32_t * __a)
+{
+  float32x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v4sf ((const __builtin_aarch64_simd_sf *) __a);
+  ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 0);
+  ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float64x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_f64 (const float64_t * __a)
+{
+  float64x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2v2df ((const __builtin_aarch64_simd_df *) __a);
+  ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 0);
+  ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int64x1x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_s64 (const int64_t * __a)
+{
+  int64x1x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
+  ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
+  ret.val[2] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline uint64x1x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_u64 (const uint64_t * __a)
+{
+  uint64x1x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
+  ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
+  ret.val[2] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline float64x1x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_f64 (const float64_t * __a)
+{
+  float64x1x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3df ((const __builtin_aarch64_simd_df *) __a);
+  ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 0)};
+  ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 1)};
+  ret.val[2] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 2)};
+  return ret;
+}
+
+__extension__ extern __inline int8x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_s8 (const int8_t * __a)
+{
+  int8x8x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
+  ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
+  ret.val[2] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline poly8x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_p8 (const poly8_t * __a)
+{
+  poly8x8x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
+  ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
+  ret.val[2] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline int16x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_s16 (const int16_t * __a)
+{
+  int16x4x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
+  ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
+  ret.val[2] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline poly16x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_p16 (const poly16_t * __a)
+{
+  poly16x4x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
+  ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
+  ret.val[2] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline int32x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_s32 (const int32_t * __a)
+{
+  int32x2x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v2si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 0);
+  ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 1);
+  ret.val[2] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline uint8x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_u8 (const uint8_t * __a)
+{
+  uint8x8x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
+  ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
+  ret.val[2] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline uint16x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_u16 (const uint16_t * __a)
+{
+  uint16x4x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
+  ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
+  ret.val[2] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline uint32x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_u32 (const uint32_t * __a)
+{
+  uint32x2x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v2si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 0);
+  ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 1);
+  ret.val[2] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline float16x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_f16 (const float16_t * __a)
+{
+  float16x4x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v4hf (__a);
+  ret.val[0] = __builtin_aarch64_get_dregciv4hf (__o, 0);
+  ret.val[1] = __builtin_aarch64_get_dregciv4hf (__o, 1);
+  ret.val[2] = __builtin_aarch64_get_dregciv4hf (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline float32x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_f32 (const float32_t * __a)
+{
+  float32x2x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v2sf ((const __builtin_aarch64_simd_sf *) __a);
+  ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 0);
+  ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 1);
+  ret.val[2] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline poly64x1x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_p64 (const poly64_t * __a)
+{
+  poly64x1x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (poly64x1_t) __builtin_aarch64_get_dregcidi_pss (__o, 0);
+  ret.val[1] = (poly64x1_t) __builtin_aarch64_get_dregcidi_pss (__o, 1);
+  ret.val[2] = (poly64x1_t) __builtin_aarch64_get_dregcidi_pss (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline int8x16x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_s8 (const int8_t * __a)
+{
+  int8x16x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
+  ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
+  ret.val[2] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline poly8x16x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_p8 (const poly8_t * __a)
+{
+  poly8x16x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
+  ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
+  ret.val[2] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline int16x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_s16 (const int16_t * __a)
+{
+  int16x8x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
+  ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
+  ret.val[2] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline poly16x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_p16 (const poly16_t * __a)
+{
+  poly16x8x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
+  ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
+  ret.val[2] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline int32x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_s32 (const int32_t * __a)
+{
+  int32x4x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v4si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 0);
+  ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 1);
+  ret.val[2] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline int64x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_s64 (const int64_t * __a)
+{
+  int64x2x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 0);
+  ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 1);
+  ret.val[2] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline uint8x16x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_u8 (const uint8_t * __a)
+{
+  uint8x16x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
+  ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
+  ret.val[2] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline uint16x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_u16 (const uint16_t * __a)
+{
+  uint16x8x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
+  ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
+  ret.val[2] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline uint32x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_u32 (const uint32_t * __a)
+{
+  uint32x4x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v4si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 0);
+  ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 1);
+  ret.val[2] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline uint64x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_u64 (const uint64_t * __a)
+{
+  uint64x2x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 0);
+  ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 1);
+  ret.val[2] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline float16x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_f16 (const float16_t * __a)
+{
+  float16x8x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v8hf (__a);
+  ret.val[0] = __builtin_aarch64_get_qregciv8hf (__o, 0);
+  ret.val[1] = __builtin_aarch64_get_qregciv8hf (__o, 1);
+  ret.val[2] = __builtin_aarch64_get_qregciv8hf (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline float32x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_f32 (const float32_t * __a)
+{
+  float32x4x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v4sf ((const __builtin_aarch64_simd_sf *) __a);
+  ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 0);
+  ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 1);
+  ret.val[2] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline float64x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_f64 (const float64_t * __a)
+{
+  float64x2x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v2df ((const __builtin_aarch64_simd_df *) __a);
+  ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 0);
+  ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 1);
+  ret.val[2] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline poly64x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_p64 (const poly64_t * __a)
+{
+  poly64x2x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3v2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (poly64x2_t) __builtin_aarch64_get_qregciv2di_pss (__o, 0);
+  ret.val[1] = (poly64x2_t) __builtin_aarch64_get_qregciv2di_pss (__o, 1);
+  ret.val[2] = (poly64x2_t) __builtin_aarch64_get_qregciv2di_pss (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline int64x1x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_s64 (const int64_t * __a)
+{
+  int64x1x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 0);
+  ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 1);
+  ret.val[2] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 2);
+  ret.val[3] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline uint64x1x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_u64 (const uint64_t * __a)
+{
+  uint64x1x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 0);
+  ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 1);
+  ret.val[2] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 2);
+  ret.val[3] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline float64x1x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_f64 (const float64_t * __a)
+{
+  float64x1x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4df ((const __builtin_aarch64_simd_df *) __a);
+  ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 0)};
+  ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 1)};
+  ret.val[2] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 2)};
+  ret.val[3] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 3)};
+  return ret;
+}
+
+__extension__ extern __inline int8x8x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_s8 (const int8_t * __a)
+{
+  int8x8x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
+  ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
+  ret.val[2] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
+  ret.val[3] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline poly8x8x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_p8 (const poly8_t * __a)
+{
+  poly8x8x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
+  ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
+  ret.val[2] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
+  ret.val[3] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline int16x4x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_s16 (const int16_t * __a)
+{
+  int16x4x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
+  ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
+  ret.val[2] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
+  ret.val[3] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline poly16x4x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_p16 (const poly16_t * __a)
+{
+  poly16x4x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
+  ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
+  ret.val[2] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
+  ret.val[3] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline int32x2x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_s32 (const int32_t * __a)
+{
+  int32x2x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v2si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 0);
+  ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 1);
+  ret.val[2] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 2);
+  ret.val[3] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline uint8x8x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_u8 (const uint8_t * __a)
+{
+  uint8x8x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
+  ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
+  ret.val[2] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
+  ret.val[3] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline uint16x4x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_u16 (const uint16_t * __a)
+{
+  uint16x4x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
+  ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
+  ret.val[2] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
+  ret.val[3] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline uint32x2x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_u32 (const uint32_t * __a)
+{
+  uint32x2x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v2si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 0);
+  ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 1);
+  ret.val[2] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 2);
+  ret.val[3] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline float16x4x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_f16 (const float16_t * __a)
+{
+  float16x4x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v4hf (__a);
+  ret.val[0] = __builtin_aarch64_get_dregxiv4hf (__o, 0);
+  ret.val[1] = __builtin_aarch64_get_dregxiv4hf (__o, 1);
+  ret.val[2] = __builtin_aarch64_get_dregxiv4hf (__o, 2);
+  ret.val[3] = __builtin_aarch64_get_dregxiv4hf (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline float32x2x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_f32 (const float32_t * __a)
+{
+  float32x2x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v2sf ((const __builtin_aarch64_simd_sf *) __a);
+  ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 0);
+  ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 1);
+  ret.val[2] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 2);
+  ret.val[3] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline poly64x1x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_p64 (const poly64_t * __a)
+{
+  poly64x1x4_t  ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (poly64x1_t) __builtin_aarch64_get_dregxidi_pss (__o, 0);
+  ret.val[1] = (poly64x1_t) __builtin_aarch64_get_dregxidi_pss (__o, 1);
+  ret.val[2] = (poly64x1_t) __builtin_aarch64_get_dregxidi_pss (__o, 2);
+  ret.val[3] = (poly64x1_t) __builtin_aarch64_get_dregxidi_pss (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline int8x16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_s8 (const int8_t * __a)
+{
+  int8x16x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
+  ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
+  ret.val[2] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
+  ret.val[3] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline poly8x16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_p8 (const poly8_t * __a)
+{
+  poly8x16x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
+  ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
+  ret.val[2] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
+  ret.val[3] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline int16x8x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_s16 (const int16_t * __a)
+{
+  int16x8x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
+  ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
+  ret.val[2] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
+  ret.val[3] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline poly16x8x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_p16 (const poly16_t * __a)
+{
+  poly16x8x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
+  ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
+  ret.val[2] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
+  ret.val[3] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline int32x4x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_s32 (const int32_t * __a)
+{
+  int32x4x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v4si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 0);
+  ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 1);
+  ret.val[2] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 2);
+  ret.val[3] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline int64x2x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_s64 (const int64_t * __a)
+{
+  int64x2x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 0);
+  ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 1);
+  ret.val[2] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 2);
+  ret.val[3] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline uint8x16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_u8 (const uint8_t * __a)
+{
+  uint8x16x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
+  ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
+  ret.val[2] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
+  ret.val[3] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline uint16x8x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_u16 (const uint16_t * __a)
+{
+  uint16x8x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
+  ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
+  ret.val[2] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
+  ret.val[3] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline uint32x4x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_u32 (const uint32_t * __a)
+{
+  uint32x4x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v4si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 0);
+  ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 1);
+  ret.val[2] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 2);
+  ret.val[3] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline uint64x2x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_u64 (const uint64_t * __a)
+{
+  uint64x2x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 0);
+  ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 1);
+  ret.val[2] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 2);
+  ret.val[3] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline float16x8x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_f16 (const float16_t * __a)
+{
+  float16x8x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v8hf (__a);
+  ret.val[0] = __builtin_aarch64_get_qregxiv8hf (__o, 0);
+  ret.val[1] = __builtin_aarch64_get_qregxiv8hf (__o, 1);
+  ret.val[2] = __builtin_aarch64_get_qregxiv8hf (__o, 2);
+  ret.val[3] = __builtin_aarch64_get_qregxiv8hf (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline float32x4x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_f32 (const float32_t * __a)
+{
+  float32x4x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v4sf ((const __builtin_aarch64_simd_sf *) __a);
+  ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 0);
+  ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 1);
+  ret.val[2] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 2);
+  ret.val[3] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline float64x2x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_f64 (const float64_t * __a)
+{
+  float64x2x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v2df ((const __builtin_aarch64_simd_df *) __a);
+  ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 0);
+  ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 1);
+  ret.val[2] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 2);
+  ret.val[3] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline poly64x2x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_p64 (const poly64_t * __a)
+{
+  poly64x2x4_t  ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4v2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (poly64x2_t) __builtin_aarch64_get_qregxiv2di_pss (__o, 0);
+  ret.val[1] = (poly64x2_t) __builtin_aarch64_get_qregxiv2di_pss (__o, 1);
+  ret.val[2] = (poly64x2_t) __builtin_aarch64_get_qregxiv2di_pss (__o, 2);
+  ret.val[3] = (poly64x2_t) __builtin_aarch64_get_qregxiv2di_pss (__o, 3);
+  return ret;
+}
+
+/* vldn_dup */
+
+__extension__ extern __inline int8x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_dup_s8 (const int8_t * __a)
+{
+  int8x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
+  ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int16x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_dup_s16 (const int16_t * __a)
+{
+  int16x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
+  ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int32x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_dup_s32 (const int32_t * __a)
+{
+  int32x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv2si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
+  ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float16x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_dup_f16 (const float16_t * __a)
+{
+  float16x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv4hf ((const __builtin_aarch64_simd_hf *) __a);
+  ret.val[0] = __builtin_aarch64_get_dregoiv4hf (__o, 0);
+  ret.val[1] = (float16x4_t) __builtin_aarch64_get_dregoiv4hf (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float32x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_dup_f32 (const float32_t * __a)
+{
+  float32x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv2sf ((const __builtin_aarch64_simd_sf *) __a);
+  ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 0);
+  ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregoiv2sf (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float64x1x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_dup_f64 (const float64_t * __a)
+{
+  float64x1x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rdf ((const __builtin_aarch64_simd_df *) __a);
+  ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 0)};
+  ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregoidf (__o, 1)};
+  return ret;
+}
+
+__extension__ extern __inline uint8x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_dup_u8 (const uint8_t * __a)
+{
+  uint8x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
+  ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint16x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_dup_u16 (const uint16_t * __a)
+{
+  uint16x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
+  ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint32x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_dup_u32 (const uint32_t * __a)
+{
+  uint32x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv2si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 0);
+  ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregoiv2si (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline poly8x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_dup_p8 (const poly8_t * __a)
+{
+  poly8x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 0);
+  ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregoiv8qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline poly16x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_dup_p16 (const poly16_t * __a)
+{
+  poly16x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 0);
+  ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregoiv4hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline poly64x1x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_dup_p64 (const poly64_t * __a)
+{
+  poly64x1x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (poly64x1_t) __builtin_aarch64_get_dregoidi_pss (__o, 0);
+  ret.val[1] = (poly64x1_t) __builtin_aarch64_get_dregoidi_pss (__o, 1);
+  return ret;
+}
+
+
+__extension__ extern __inline int64x1x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_dup_s64 (const int64_t * __a)
+{
+  int64x1x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rdi ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
+  ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint64x1x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2_dup_u64 (const uint64_t * __a)
+{
+  uint64x1x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rdi ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 0);
+  ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregoidi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int8x16x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_dup_s8 (const int8_t * __a)
+{
+  int8x16x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
+  ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline poly8x16x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_dup_p8 (const poly8_t * __a)
+{
+  poly8x16x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
+  ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int16x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_dup_s16 (const int16_t * __a)
+{
+  int16x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
+  ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline poly16x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_dup_p16 (const poly16_t * __a)
+{
+  poly16x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
+  ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int32x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_dup_s32 (const int32_t * __a)
+{
+  int32x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv4si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
+  ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int64x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_dup_s64 (const int64_t * __a)
+{
+  int64x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
+  ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint8x16x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_dup_u8 (const uint8_t * __a)
+{
+  uint8x16x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 0);
+  ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregoiv16qi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint16x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_dup_u16 (const uint16_t * __a)
+{
+  uint16x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 0);
+  ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregoiv8hi (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint32x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_dup_u32 (const uint32_t * __a)
+{
+  uint32x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv4si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 0);
+  ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregoiv4si (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline uint64x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_dup_u64 (const uint64_t * __a)
+{
+  uint64x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 0);
+  ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregoiv2di (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float16x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_dup_f16 (const float16_t * __a)
+{
+  float16x8x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv8hf ((const __builtin_aarch64_simd_hf *) __a);
+  ret.val[0] = (float16x8_t) __builtin_aarch64_get_qregoiv8hf (__o, 0);
+  ret.val[1] = __builtin_aarch64_get_qregoiv8hf (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float32x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_dup_f32 (const float32_t * __a)
+{
+  float32x4x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv4sf ((const __builtin_aarch64_simd_sf *) __a);
+  ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 0);
+  ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregoiv4sf (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline float64x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_dup_f64 (const float64_t * __a)
+{
+  float64x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv2df ((const __builtin_aarch64_simd_df *) __a);
+  ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 0);
+  ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregoiv2df (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline poly64x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld2q_dup_p64 (const poly64_t * __a)
+{
+  poly64x2x2_t ret;
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_ld2rv2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (poly64x2_t) __builtin_aarch64_get_qregoiv2di_pss (__o, 0);
+  ret.val[1] = (poly64x2_t) __builtin_aarch64_get_qregoiv2di_pss (__o, 1);
+  return ret;
+}
+
+__extension__ extern __inline int64x1x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_dup_s64 (const int64_t * __a)
+{
+  int64x1x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rdi ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
+  ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
+  ret.val[2] = (int64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline uint64x1x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_dup_u64 (const uint64_t * __a)
+{
+  uint64x1x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rdi ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 0);
+  ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 1);
+  ret.val[2] = (uint64x1_t) __builtin_aarch64_get_dregcidi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline float64x1x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_dup_f64 (const float64_t * __a)
+{
+  float64x1x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rdf ((const __builtin_aarch64_simd_df *) __a);
+  ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 0)};
+  ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 1)};
+  ret.val[2] = (float64x1_t) {__builtin_aarch64_get_dregcidf (__o, 2)};
+  return ret;
+}
+
+__extension__ extern __inline int8x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_dup_s8 (const int8_t * __a)
+{
+  int8x8x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
+  ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
+  ret.val[2] = (int8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline poly8x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_dup_p8 (const poly8_t * __a)
+{
+  poly8x8x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
+  ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
+  ret.val[2] = (poly8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline int16x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_dup_s16 (const int16_t * __a)
+{
+  int16x4x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
+  ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
+  ret.val[2] = (int16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline poly16x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_dup_p16 (const poly16_t * __a)
+{
+  poly16x4x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
+  ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
+  ret.val[2] = (poly16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline int32x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_dup_s32 (const int32_t * __a)
+{
+  int32x2x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv2si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 0);
+  ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 1);
+  ret.val[2] = (int32x2_t) __builtin_aarch64_get_dregciv2si (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline uint8x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_dup_u8 (const uint8_t * __a)
+{
+  uint8x8x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 0);
+  ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 1);
+  ret.val[2] = (uint8x8_t) __builtin_aarch64_get_dregciv8qi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline uint16x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_dup_u16 (const uint16_t * __a)
+{
+  uint16x4x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 0);
+  ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 1);
+  ret.val[2] = (uint16x4_t) __builtin_aarch64_get_dregciv4hi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline uint32x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_dup_u32 (const uint32_t * __a)
+{
+  uint32x2x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv2si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 0);
+  ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 1);
+  ret.val[2] = (uint32x2_t) __builtin_aarch64_get_dregciv2si (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline float16x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_dup_f16 (const float16_t * __a)
+{
+  float16x4x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv4hf ((const __builtin_aarch64_simd_hf *) __a);
+  ret.val[0] = (float16x4_t) __builtin_aarch64_get_dregciv4hf (__o, 0);
+  ret.val[1] = (float16x4_t) __builtin_aarch64_get_dregciv4hf (__o, 1);
+  ret.val[2] = (float16x4_t) __builtin_aarch64_get_dregciv4hf (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline float32x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_dup_f32 (const float32_t * __a)
+{
+  float32x2x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv2sf ((const __builtin_aarch64_simd_sf *) __a);
+  ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 0);
+  ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 1);
+  ret.val[2] = (float32x2_t) __builtin_aarch64_get_dregciv2sf (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline poly64x1x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3_dup_p64 (const poly64_t * __a)
+{
+  poly64x1x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (poly64x1_t) __builtin_aarch64_get_dregcidi_pss (__o, 0);
+  ret.val[1] = (poly64x1_t) __builtin_aarch64_get_dregcidi_pss (__o, 1);
+  ret.val[2] = (poly64x1_t) __builtin_aarch64_get_dregcidi_pss (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline int8x16x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_dup_s8 (const int8_t * __a)
+{
+  int8x16x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
+  ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
+  ret.val[2] = (int8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline poly8x16x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_dup_p8 (const poly8_t * __a)
+{
+  poly8x16x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
+  ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
+  ret.val[2] = (poly8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline int16x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_dup_s16 (const int16_t * __a)
+{
+  int16x8x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
+  ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
+  ret.val[2] = (int16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline poly16x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_dup_p16 (const poly16_t * __a)
+{
+  poly16x8x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
+  ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
+  ret.val[2] = (poly16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline int32x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_dup_s32 (const int32_t * __a)
+{
+  int32x4x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv4si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 0);
+  ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 1);
+  ret.val[2] = (int32x4_t) __builtin_aarch64_get_qregciv4si (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline int64x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_dup_s64 (const int64_t * __a)
+{
+  int64x2x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 0);
+  ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 1);
+  ret.val[2] = (int64x2_t) __builtin_aarch64_get_qregciv2di (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline uint8x16x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_dup_u8 (const uint8_t * __a)
+{
+  uint8x16x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 0);
+  ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 1);
+  ret.val[2] = (uint8x16_t) __builtin_aarch64_get_qregciv16qi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline uint16x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_dup_u16 (const uint16_t * __a)
+{
+  uint16x8x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 0);
+  ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 1);
+  ret.val[2] = (uint16x8_t) __builtin_aarch64_get_qregciv8hi (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline uint32x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_dup_u32 (const uint32_t * __a)
+{
+  uint32x4x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv4si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 0);
+  ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 1);
+  ret.val[2] = (uint32x4_t) __builtin_aarch64_get_qregciv4si (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline uint64x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_dup_u64 (const uint64_t * __a)
+{
+  uint64x2x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 0);
+  ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 1);
+  ret.val[2] = (uint64x2_t) __builtin_aarch64_get_qregciv2di (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline float16x8x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_dup_f16 (const float16_t * __a)
+{
+  float16x8x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv8hf ((const __builtin_aarch64_simd_hf *) __a);
+  ret.val[0] = (float16x8_t) __builtin_aarch64_get_qregciv8hf (__o, 0);
+  ret.val[1] = (float16x8_t) __builtin_aarch64_get_qregciv8hf (__o, 1);
+  ret.val[2] = (float16x8_t) __builtin_aarch64_get_qregciv8hf (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline float32x4x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_dup_f32 (const float32_t * __a)
+{
+  float32x4x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv4sf ((const __builtin_aarch64_simd_sf *) __a);
+  ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 0);
+  ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 1);
+  ret.val[2] = (float32x4_t) __builtin_aarch64_get_qregciv4sf (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline float64x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_dup_f64 (const float64_t * __a)
+{
+  float64x2x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv2df ((const __builtin_aarch64_simd_df *) __a);
+  ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 0);
+  ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 1);
+  ret.val[2] = (float64x2_t) __builtin_aarch64_get_qregciv2df (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline poly64x2x3_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld3q_dup_p64 (const poly64_t * __a)
+{
+  poly64x2x3_t ret;
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_ld3rv2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (poly64x2_t) __builtin_aarch64_get_qregciv2di_pss (__o, 0);
+  ret.val[1] = (poly64x2_t) __builtin_aarch64_get_qregciv2di_pss (__o, 1);
+  ret.val[2] = (poly64x2_t) __builtin_aarch64_get_qregciv2di_pss (__o, 2);
+  return ret;
+}
+
+__extension__ extern __inline int64x1x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_dup_s64 (const int64_t * __a)
+{
+  int64x1x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rdi ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 0);
+  ret.val[1] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 1);
+  ret.val[2] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 2);
+  ret.val[3] = (int64x1_t) __builtin_aarch64_get_dregxidi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline uint64x1x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_dup_u64 (const uint64_t * __a)
+{
+  uint64x1x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rdi ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 0);
+  ret.val[1] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 1);
+  ret.val[2] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 2);
+  ret.val[3] = (uint64x1_t) __builtin_aarch64_get_dregxidi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline float64x1x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_dup_f64 (const float64_t * __a)
+{
+  float64x1x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rdf ((const __builtin_aarch64_simd_df *) __a);
+  ret.val[0] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 0)};
+  ret.val[1] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 1)};
+  ret.val[2] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 2)};
+  ret.val[3] = (float64x1_t) {__builtin_aarch64_get_dregxidf (__o, 3)};
+  return ret;
+}
+
+__extension__ extern __inline int8x8x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_dup_s8 (const int8_t * __a)
+{
+  int8x8x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
+  ret.val[1] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
+  ret.val[2] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
+  ret.val[3] = (int8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline poly8x8x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_dup_p8 (const poly8_t * __a)
+{
+  poly8x8x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
+  ret.val[1] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
+  ret.val[2] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
+  ret.val[3] = (poly8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline int16x4x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_dup_s16 (const int16_t * __a)
+{
+  int16x4x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
+  ret.val[1] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
+  ret.val[2] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
+  ret.val[3] = (int16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline poly16x4x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_dup_p16 (const poly16_t * __a)
+{
+  poly16x4x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
+  ret.val[1] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
+  ret.val[2] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
+  ret.val[3] = (poly16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline int32x2x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_dup_s32 (const int32_t * __a)
+{
+  int32x2x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv2si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 0);
+  ret.val[1] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 1);
+  ret.val[2] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 2);
+  ret.val[3] = (int32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline uint8x8x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_dup_u8 (const uint8_t * __a)
+{
+  uint8x8x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv8qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 0);
+  ret.val[1] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 1);
+  ret.val[2] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 2);
+  ret.val[3] = (uint8x8_t) __builtin_aarch64_get_dregxiv8qi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline uint16x4x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_dup_u16 (const uint16_t * __a)
+{
+  uint16x4x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv4hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 0);
+  ret.val[1] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 1);
+  ret.val[2] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 2);
+  ret.val[3] = (uint16x4_t) __builtin_aarch64_get_dregxiv4hi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline uint32x2x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_dup_u32 (const uint32_t * __a)
+{
+  uint32x2x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv2si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 0);
+  ret.val[1] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 1);
+  ret.val[2] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 2);
+  ret.val[3] = (uint32x2_t) __builtin_aarch64_get_dregxiv2si (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline float16x4x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_dup_f16 (const float16_t * __a)
+{
+  float16x4x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv4hf ((const __builtin_aarch64_simd_hf *) __a);
+  ret.val[0] = (float16x4_t) __builtin_aarch64_get_dregxiv4hf (__o, 0);
+  ret.val[1] = (float16x4_t) __builtin_aarch64_get_dregxiv4hf (__o, 1);
+  ret.val[2] = (float16x4_t) __builtin_aarch64_get_dregxiv4hf (__o, 2);
+  ret.val[3] = (float16x4_t) __builtin_aarch64_get_dregxiv4hf (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline float32x2x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_dup_f32 (const float32_t * __a)
+{
+  float32x2x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv2sf ((const __builtin_aarch64_simd_sf *) __a);
+  ret.val[0] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 0);
+  ret.val[1] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 1);
+  ret.val[2] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 2);
+  ret.val[3] = (float32x2_t) __builtin_aarch64_get_dregxiv2sf (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline poly64x1x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4_dup_p64 (const poly64_t * __a)
+{
+  poly64x1x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (poly64x1_t) __builtin_aarch64_get_dregxidi_pss (__o, 0);
+  ret.val[1] = (poly64x1_t) __builtin_aarch64_get_dregxidi_pss (__o, 1);
+  ret.val[2] = (poly64x1_t) __builtin_aarch64_get_dregxidi_pss (__o, 2);
+  ret.val[3] = (poly64x1_t) __builtin_aarch64_get_dregxidi_pss (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline int8x16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_dup_s8 (const int8_t * __a)
+{
+  int8x16x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
+  ret.val[1] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
+  ret.val[2] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
+  ret.val[3] = (int8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline poly8x16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_dup_p8 (const poly8_t * __a)
+{
+  poly8x16x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
+  ret.val[1] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
+  ret.val[2] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
+  ret.val[3] = (poly8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline int16x8x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_dup_s16 (const int16_t * __a)
+{
+  int16x8x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
+  ret.val[1] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
+  ret.val[2] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
+  ret.val[3] = (int16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline poly16x8x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_dup_p16 (const poly16_t * __a)
+{
+  poly16x8x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
+  ret.val[1] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
+  ret.val[2] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
+  ret.val[3] = (poly16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline int32x4x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_dup_s32 (const int32_t * __a)
+{
+  int32x4x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv4si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 0);
+  ret.val[1] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 1);
+  ret.val[2] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 2);
+  ret.val[3] = (int32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline int64x2x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_dup_s64 (const int64_t * __a)
+{
+  int64x2x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 0);
+  ret.val[1] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 1);
+  ret.val[2] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 2);
+  ret.val[3] = (int64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline uint8x16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_dup_u8 (const uint8_t * __a)
+{
+  uint8x16x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv16qi ((const __builtin_aarch64_simd_qi *) __a);
+  ret.val[0] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 0);
+  ret.val[1] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 1);
+  ret.val[2] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 2);
+  ret.val[3] = (uint8x16_t) __builtin_aarch64_get_qregxiv16qi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline uint16x8x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_dup_u16 (const uint16_t * __a)
+{
+  uint16x8x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv8hi ((const __builtin_aarch64_simd_hi *) __a);
+  ret.val[0] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 0);
+  ret.val[1] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 1);
+  ret.val[2] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 2);
+  ret.val[3] = (uint16x8_t) __builtin_aarch64_get_qregxiv8hi (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline uint32x4x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_dup_u32 (const uint32_t * __a)
+{
+  uint32x4x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv4si ((const __builtin_aarch64_simd_si *) __a);
+  ret.val[0] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 0);
+  ret.val[1] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 1);
+  ret.val[2] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 2);
+  ret.val[3] = (uint32x4_t) __builtin_aarch64_get_qregxiv4si (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline uint64x2x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_dup_u64 (const uint64_t * __a)
+{
+  uint64x2x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 0);
+  ret.val[1] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 1);
+  ret.val[2] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 2);
+  ret.val[3] = (uint64x2_t) __builtin_aarch64_get_qregxiv2di (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline float16x8x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_dup_f16 (const float16_t * __a)
+{
+  float16x8x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv8hf ((const __builtin_aarch64_simd_hf *) __a);
+  ret.val[0] = (float16x8_t) __builtin_aarch64_get_qregxiv8hf (__o, 0);
+  ret.val[1] = (float16x8_t) __builtin_aarch64_get_qregxiv8hf (__o, 1);
+  ret.val[2] = (float16x8_t) __builtin_aarch64_get_qregxiv8hf (__o, 2);
+  ret.val[3] = (float16x8_t) __builtin_aarch64_get_qregxiv8hf (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline float32x4x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_dup_f32 (const float32_t * __a)
+{
+  float32x4x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv4sf ((const __builtin_aarch64_simd_sf *) __a);
+  ret.val[0] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 0);
+  ret.val[1] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 1);
+  ret.val[2] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 2);
+  ret.val[3] = (float32x4_t) __builtin_aarch64_get_qregxiv4sf (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline float64x2x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_dup_f64 (const float64_t * __a)
+{
+  float64x2x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv2df ((const __builtin_aarch64_simd_df *) __a);
+  ret.val[0] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 0);
+  ret.val[1] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 1);
+  ret.val[2] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 2);
+  ret.val[3] = (float64x2_t) __builtin_aarch64_get_qregxiv2df (__o, 3);
+  return ret;
+}
+
+__extension__ extern __inline poly64x2x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vld4q_dup_p64 (const poly64_t * __a)
+{
+  poly64x2x4_t ret;
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_ld4rv2di ((const __builtin_aarch64_simd_di *) __a);
+  ret.val[0] = (poly64x2_t) __builtin_aarch64_get_qregxiv2di_pss (__o, 0);
+  ret.val[1] = (poly64x2_t) __builtin_aarch64_get_qregxiv2di_pss (__o, 1);
+  ret.val[2] = (poly64x2_t) __builtin_aarch64_get_qregxiv2di_pss (__o, 2);
+  ret.val[3] = (poly64x2_t) __builtin_aarch64_get_qregxiv2di_pss (__o, 3);
+  return ret;
+}
+
+/* vld2_lane */
+
+#define __LD2_LANE_FUNC(intype, vectype, largetype, ptrtype, mode,	   \
+			 qmode, ptrmode, funcsuffix, signedtype)	   \
+__extension__ extern __inline intype \
+__attribute__ ((__always_inline__, __gnu_inline__,__artificial__)) \
+vld2_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c)  \
+{									   \
+  __builtin_aarch64_simd_oi __o;					   \
+  largetype __temp;							   \
+  __temp.val[0] =							   \
+    vcombine_##funcsuffix (__b.val[0], vcreate_##funcsuffix (0));	   \
+  __temp.val[1] =							   \
+    vcombine_##funcsuffix (__b.val[1], vcreate_##funcsuffix (0));	   \
+  __o = __builtin_aarch64_set_qregoi##qmode (__o,			   \
+					    (signedtype) __temp.val[0],	   \
+					    0);				   \
+  __o = __builtin_aarch64_set_qregoi##qmode (__o,			   \
+					    (signedtype) __temp.val[1],	   \
+					    1);				   \
+  __o =	__builtin_aarch64_ld2_lane##mode (				   \
+	  (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c);	   \
+  __b.val[0] = (vectype) __builtin_aarch64_get_dregoidi (__o, 0);	   \
+  __b.val[1] = (vectype) __builtin_aarch64_get_dregoidi (__o, 1);	   \
+  return __b;								   \
+}
+
+__LD2_LANE_FUNC (float16x4x2_t, float16x4_t, float16x8x2_t, float16_t, v4hf,
+		 v8hf, hf, f16, float16x8_t)
+__LD2_LANE_FUNC (float32x2x2_t, float32x2_t, float32x4x2_t, float32_t, v2sf, v4sf,
+		 sf, f32, float32x4_t)
+__LD2_LANE_FUNC (float64x1x2_t, float64x1_t, float64x2x2_t, float64_t, df, v2df,
+		 df, f64, float64x2_t)
+__LD2_LANE_FUNC (poly8x8x2_t, poly8x8_t, poly8x16x2_t, poly8_t, v8qi, v16qi, qi, p8,
+		 int8x16_t)
+__LD2_LANE_FUNC (poly16x4x2_t, poly16x4_t, poly16x8x2_t, poly16_t, v4hi, v8hi, hi,
+		 p16, int16x8_t)
+__LD2_LANE_FUNC (poly64x1x2_t, poly64x1_t, poly64x2x2_t, poly64_t, di,
+		 v2di_ssps, di, p64, poly64x2_t)
+__LD2_LANE_FUNC (int8x8x2_t, int8x8_t, int8x16x2_t, int8_t, v8qi, v16qi, qi, s8,
+		 int8x16_t)
+__LD2_LANE_FUNC (int16x4x2_t, int16x4_t, int16x8x2_t, int16_t, v4hi, v8hi, hi, s16,
+		 int16x8_t)
+__LD2_LANE_FUNC (int32x2x2_t, int32x2_t, int32x4x2_t, int32_t, v2si, v4si, si, s32,
+		 int32x4_t)
+__LD2_LANE_FUNC (int64x1x2_t, int64x1_t, int64x2x2_t, int64_t, di, v2di, di, s64,
+		 int64x2_t)
+__LD2_LANE_FUNC (uint8x8x2_t, uint8x8_t, uint8x16x2_t, uint8_t, v8qi, v16qi, qi, u8,
+		 int8x16_t)
+__LD2_LANE_FUNC (uint16x4x2_t, uint16x4_t, uint16x8x2_t, uint16_t, v4hi, v8hi, hi,
+		 u16, int16x8_t)
+__LD2_LANE_FUNC (uint32x2x2_t, uint32x2_t, uint32x4x2_t, uint32_t, v2si, v4si, si,
+		 u32, int32x4_t)
+__LD2_LANE_FUNC (uint64x1x2_t, uint64x1_t, uint64x2x2_t, uint64_t, di, v2di, di,
+		 u64, int64x2_t)
+
+#undef __LD2_LANE_FUNC
+
+/* vld2q_lane */
+
+#define __LD2_LANE_FUNC(intype, vtype, ptrtype, mode, ptrmode, funcsuffix) \
+__extension__ extern __inline intype \
+__attribute__ ((__always_inline__, __gnu_inline__,__artificial__)) \
+vld2q_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
+{									   \
+  __builtin_aarch64_simd_oi __o;					   \
+  intype ret;								   \
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) __b.val[0], 0); \
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) __b.val[1], 1); \
+  __o = __builtin_aarch64_ld2_lane##mode (				   \
+	(__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c);		   \
+  ret.val[0] = (vtype) __builtin_aarch64_get_qregoiv4si (__o, 0);	   \
+  ret.val[1] = (vtype) __builtin_aarch64_get_qregoiv4si (__o, 1);	   \
+  return ret;								   \
+}
+
+__LD2_LANE_FUNC (float16x8x2_t, float16x8_t, float16_t, v8hf, hf, f16)
+__LD2_LANE_FUNC (float32x4x2_t, float32x4_t, float32_t, v4sf, sf, f32)
+__LD2_LANE_FUNC (float64x2x2_t, float64x2_t, float64_t, v2df, df, f64)
+__LD2_LANE_FUNC (poly8x16x2_t, poly8x16_t, poly8_t, v16qi, qi, p8)
+__LD2_LANE_FUNC (poly16x8x2_t, poly16x8_t, poly16_t, v8hi, hi, p16)
+__LD2_LANE_FUNC (poly64x2x2_t, poly64x2_t, poly64_t, v2di, di, p64)
+__LD2_LANE_FUNC (int8x16x2_t, int8x16_t, int8_t, v16qi, qi, s8)
+__LD2_LANE_FUNC (int16x8x2_t, int16x8_t, int16_t, v8hi, hi, s16)
+__LD2_LANE_FUNC (int32x4x2_t, int32x4_t, int32_t, v4si, si, s32)
+__LD2_LANE_FUNC (int64x2x2_t, int64x2_t, int64_t, v2di, di, s64)
+__LD2_LANE_FUNC (uint8x16x2_t, uint8x16_t, uint8_t, v16qi, qi, u8)
+__LD2_LANE_FUNC (uint16x8x2_t, uint16x8_t, uint16_t, v8hi, hi, u16)
+__LD2_LANE_FUNC (uint32x4x2_t, uint32x4_t, uint32_t, v4si, si, u32)
+__LD2_LANE_FUNC (uint64x2x2_t, uint64x2_t, uint64_t, v2di, di, u64)
+
+#undef __LD2_LANE_FUNC
+
+/* vld3_lane */
+
+#define __LD3_LANE_FUNC(intype, vectype, largetype, ptrtype, mode,	   \
+			 qmode, ptrmode, funcsuffix, signedtype)	   \
+__extension__ extern __inline intype \
+__attribute__ ((__always_inline__, __gnu_inline__,__artificial__)) \
+vld3_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c)  \
+{									   \
+  __builtin_aarch64_simd_ci __o;					   \
+  largetype __temp;							   \
+  __temp.val[0] =							   \
+    vcombine_##funcsuffix (__b.val[0], vcreate_##funcsuffix (0));	   \
+  __temp.val[1] =							   \
+    vcombine_##funcsuffix (__b.val[1], vcreate_##funcsuffix (0));	   \
+  __temp.val[2] =							   \
+    vcombine_##funcsuffix (__b.val[2], vcreate_##funcsuffix (0));	   \
+  __o = __builtin_aarch64_set_qregci##qmode (__o,			   \
+					    (signedtype) __temp.val[0],	   \
+					    0);				   \
+  __o = __builtin_aarch64_set_qregci##qmode (__o,			   \
+					    (signedtype) __temp.val[1],	   \
+					    1);				   \
+  __o = __builtin_aarch64_set_qregci##qmode (__o,			   \
+					    (signedtype) __temp.val[2],	   \
+					    2);				   \
+  __o =	__builtin_aarch64_ld3_lane##mode (				   \
+	  (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c);	   \
+  __b.val[0] = (vectype) __builtin_aarch64_get_dregcidi (__o, 0);	   \
+  __b.val[1] = (vectype) __builtin_aarch64_get_dregcidi (__o, 1);	   \
+  __b.val[2] = (vectype) __builtin_aarch64_get_dregcidi (__o, 2);	   \
+  return __b;								   \
+}
+
+__LD3_LANE_FUNC (float16x4x3_t, float16x4_t, float16x8x3_t, float16_t, v4hf,
+		 v8hf, hf, f16, float16x8_t)
+__LD3_LANE_FUNC (float32x2x3_t, float32x2_t, float32x4x3_t, float32_t, v2sf, v4sf,
+		 sf, f32, float32x4_t)
+__LD3_LANE_FUNC (float64x1x3_t, float64x1_t, float64x2x3_t, float64_t, df, v2df,
+		 df, f64, float64x2_t)
+__LD3_LANE_FUNC (poly8x8x3_t, poly8x8_t, poly8x16x3_t, poly8_t, v8qi, v16qi, qi, p8,
+		 int8x16_t)
+__LD3_LANE_FUNC (poly16x4x3_t, poly16x4_t, poly16x8x3_t, poly16_t, v4hi, v8hi, hi,
+		 p16, int16x8_t)
+__LD3_LANE_FUNC (poly64x1x3_t, poly64x1_t, poly64x2x3_t, poly64_t, di,
+		 v2di_ssps, di, p64, poly64x2_t)
+__LD3_LANE_FUNC (int8x8x3_t, int8x8_t, int8x16x3_t, int8_t, v8qi, v16qi, qi, s8,
+		 int8x16_t)
+__LD3_LANE_FUNC (int16x4x3_t, int16x4_t, int16x8x3_t, int16_t, v4hi, v8hi, hi, s16,
+		 int16x8_t)
+__LD3_LANE_FUNC (int32x2x3_t, int32x2_t, int32x4x3_t, int32_t, v2si, v4si, si, s32,
+		 int32x4_t)
+__LD3_LANE_FUNC (int64x1x3_t, int64x1_t, int64x2x3_t, int64_t, di, v2di, di, s64,
+		 int64x2_t)
+__LD3_LANE_FUNC (uint8x8x3_t, uint8x8_t, uint8x16x3_t, uint8_t, v8qi, v16qi, qi, u8,
+		 int8x16_t)
+__LD3_LANE_FUNC (uint16x4x3_t, uint16x4_t, uint16x8x3_t, uint16_t, v4hi, v8hi, hi,
+		 u16, int16x8_t)
+__LD3_LANE_FUNC (uint32x2x3_t, uint32x2_t, uint32x4x3_t, uint32_t, v2si, v4si, si,
+		 u32, int32x4_t)
+__LD3_LANE_FUNC (uint64x1x3_t, uint64x1_t, uint64x2x3_t, uint64_t, di, v2di, di,
+		 u64, int64x2_t)
+
+#undef __LD3_LANE_FUNC
+
+/* vld3q_lane */
+
+#define __LD3_LANE_FUNC(intype, vtype, ptrtype, mode, ptrmode, funcsuffix) \
+__extension__ extern __inline intype \
+__attribute__ ((__always_inline__, __gnu_inline__,__artificial__)) \
+vld3q_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
+{									   \
+  __builtin_aarch64_simd_ci __o;					   \
+  intype ret;								   \
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) __b.val[0], 0); \
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) __b.val[1], 1); \
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) __b.val[2], 2); \
+  __o = __builtin_aarch64_ld3_lane##mode (				   \
+	(__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c);		   \
+  ret.val[0] = (vtype) __builtin_aarch64_get_qregciv4si (__o, 0);	   \
+  ret.val[1] = (vtype) __builtin_aarch64_get_qregciv4si (__o, 1);	   \
+  ret.val[2] = (vtype) __builtin_aarch64_get_qregciv4si (__o, 2);	   \
+  return ret;								   \
+}
+
+__LD3_LANE_FUNC (float16x8x3_t, float16x8_t, float16_t, v8hf, hf, f16)
+__LD3_LANE_FUNC (float32x4x3_t, float32x4_t, float32_t, v4sf, sf, f32)
+__LD3_LANE_FUNC (float64x2x3_t, float64x2_t, float64_t, v2df, df, f64)
+__LD3_LANE_FUNC (poly8x16x3_t, poly8x16_t, poly8_t, v16qi, qi, p8)
+__LD3_LANE_FUNC (poly16x8x3_t, poly16x8_t, poly16_t, v8hi, hi, p16)
+__LD3_LANE_FUNC (poly64x2x3_t, poly64x2_t, poly64_t, v2di, di, p64)
+__LD3_LANE_FUNC (int8x16x3_t, int8x16_t, int8_t, v16qi, qi, s8)
+__LD3_LANE_FUNC (int16x8x3_t, int16x8_t, int16_t, v8hi, hi, s16)
+__LD3_LANE_FUNC (int32x4x3_t, int32x4_t, int32_t, v4si, si, s32)
+__LD3_LANE_FUNC (int64x2x3_t, int64x2_t, int64_t, v2di, di, s64)
+__LD3_LANE_FUNC (uint8x16x3_t, uint8x16_t, uint8_t, v16qi, qi, u8)
+__LD3_LANE_FUNC (uint16x8x3_t, uint16x8_t, uint16_t, v8hi, hi, u16)
+__LD3_LANE_FUNC (uint32x4x3_t, uint32x4_t, uint32_t, v4si, si, u32)
+__LD3_LANE_FUNC (uint64x2x3_t, uint64x2_t, uint64_t, v2di, di, u64)
+
+#undef __LD3_LANE_FUNC
+
+/* vld4_lane */
+
+#define __LD4_LANE_FUNC(intype, vectype, largetype, ptrtype, mode,	   \
+			 qmode, ptrmode, funcsuffix, signedtype)	   \
+__extension__ extern __inline intype \
+__attribute__ ((__always_inline__, __gnu_inline__,__artificial__)) \
+vld4_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c)  \
+{									   \
+  __builtin_aarch64_simd_xi __o;					   \
+  largetype __temp;							   \
+  __temp.val[0] =							   \
+    vcombine_##funcsuffix (__b.val[0], vcreate_##funcsuffix (0));	   \
+  __temp.val[1] =							   \
+    vcombine_##funcsuffix (__b.val[1], vcreate_##funcsuffix (0));	   \
+  __temp.val[2] =							   \
+    vcombine_##funcsuffix (__b.val[2], vcreate_##funcsuffix (0));	   \
+  __temp.val[3] =							   \
+    vcombine_##funcsuffix (__b.val[3], vcreate_##funcsuffix (0));	   \
+  __o = __builtin_aarch64_set_qregxi##qmode (__o,			   \
+					    (signedtype) __temp.val[0],	   \
+					    0);				   \
+  __o = __builtin_aarch64_set_qregxi##qmode (__o,			   \
+					    (signedtype) __temp.val[1],	   \
+					    1);				   \
+  __o = __builtin_aarch64_set_qregxi##qmode (__o,			   \
+					    (signedtype) __temp.val[2],	   \
+					    2);				   \
+  __o = __builtin_aarch64_set_qregxi##qmode (__o,			   \
+					    (signedtype) __temp.val[3],	   \
+					    3);				   \
+  __o =	__builtin_aarch64_ld4_lane##mode (				   \
+	  (__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c);	   \
+  __b.val[0] = (vectype) __builtin_aarch64_get_dregxidi (__o, 0);	   \
+  __b.val[1] = (vectype) __builtin_aarch64_get_dregxidi (__o, 1);	   \
+  __b.val[2] = (vectype) __builtin_aarch64_get_dregxidi (__o, 2);	   \
+  __b.val[3] = (vectype) __builtin_aarch64_get_dregxidi (__o, 3);	   \
+  return __b;								   \
+}
+
+/* vld4q_lane */
+
+__LD4_LANE_FUNC (float16x4x4_t, float16x4_t, float16x8x4_t, float16_t, v4hf,
+		 v8hf, hf, f16, float16x8_t)
+__LD4_LANE_FUNC (float32x2x4_t, float32x2_t, float32x4x4_t, float32_t, v2sf, v4sf,
+		 sf, f32, float32x4_t)
+__LD4_LANE_FUNC (float64x1x4_t, float64x1_t, float64x2x4_t, float64_t, df, v2df,
+		 df, f64, float64x2_t)
+__LD4_LANE_FUNC (poly8x8x4_t, poly8x8_t, poly8x16x4_t, poly8_t, v8qi, v16qi, qi, p8,
+		 int8x16_t)
+__LD4_LANE_FUNC (poly16x4x4_t, poly16x4_t, poly16x8x4_t, poly16_t, v4hi, v8hi, hi,
+		 p16, int16x8_t)
+__LD4_LANE_FUNC (poly64x1x4_t, poly64x1_t, poly64x2x4_t, poly64_t, di,
+		 v2di_ssps, di, p64, poly64x2_t)
+__LD4_LANE_FUNC (int8x8x4_t, int8x8_t, int8x16x4_t, int8_t, v8qi, v16qi, qi, s8,
+		 int8x16_t)
+__LD4_LANE_FUNC (int16x4x4_t, int16x4_t, int16x8x4_t, int16_t, v4hi, v8hi, hi, s16,
+		 int16x8_t)
+__LD4_LANE_FUNC (int32x2x4_t, int32x2_t, int32x4x4_t, int32_t, v2si, v4si, si, s32,
+		 int32x4_t)
+__LD4_LANE_FUNC (int64x1x4_t, int64x1_t, int64x2x4_t, int64_t, di, v2di, di, s64,
+		 int64x2_t)
+__LD4_LANE_FUNC (uint8x8x4_t, uint8x8_t, uint8x16x4_t, uint8_t, v8qi, v16qi, qi, u8,
+		 int8x16_t)
+__LD4_LANE_FUNC (uint16x4x4_t, uint16x4_t, uint16x8x4_t, uint16_t, v4hi, v8hi, hi,
+		 u16, int16x8_t)
+__LD4_LANE_FUNC (uint32x2x4_t, uint32x2_t, uint32x4x4_t, uint32_t, v2si, v4si, si,
+		 u32, int32x4_t)
+__LD4_LANE_FUNC (uint64x1x4_t, uint64x1_t, uint64x2x4_t, uint64_t, di, v2di, di,
+		 u64, int64x2_t)
+
+#undef __LD4_LANE_FUNC
+
+/* vld4q_lane */
+
+#define __LD4_LANE_FUNC(intype, vtype, ptrtype, mode, ptrmode, funcsuffix) \
+__extension__ extern __inline intype \
+__attribute__ ((__always_inline__, __gnu_inline__,__artificial__)) \
+vld4q_lane_##funcsuffix (const ptrtype * __ptr, intype __b, const int __c) \
+{									   \
+  __builtin_aarch64_simd_xi __o;					   \
+  intype ret;								   \
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) __b.val[0], 0); \
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) __b.val[1], 1); \
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) __b.val[2], 2); \
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) __b.val[3], 3); \
+  __o = __builtin_aarch64_ld4_lane##mode (				   \
+	(__builtin_aarch64_simd_##ptrmode *) __ptr, __o, __c);		   \
+  ret.val[0] = (vtype) __builtin_aarch64_get_qregxiv4si (__o, 0);	   \
+  ret.val[1] = (vtype) __builtin_aarch64_get_qregxiv4si (__o, 1);	   \
+  ret.val[2] = (vtype) __builtin_aarch64_get_qregxiv4si (__o, 2);	   \
+  ret.val[3] = (vtype) __builtin_aarch64_get_qregxiv4si (__o, 3);	   \
+  return ret;								   \
+}
+
+__LD4_LANE_FUNC (float16x8x4_t, float16x8_t, float16_t, v8hf, hf, f16)
+__LD4_LANE_FUNC (float32x4x4_t, float32x4_t, float32_t, v4sf, sf, f32)
+__LD4_LANE_FUNC (float64x2x4_t, float64x2_t, float64_t, v2df, df, f64)
+__LD4_LANE_FUNC (poly8x16x4_t, poly8x16_t, poly8_t, v16qi, qi, p8)
+__LD4_LANE_FUNC (poly16x8x4_t, poly16x8_t, poly16_t, v8hi, hi, p16)
+__LD4_LANE_FUNC (poly64x2x4_t, poly64x2_t, poly64_t, v2di, di, p64)
+__LD4_LANE_FUNC (int8x16x4_t, int8x16_t, int8_t, v16qi, qi, s8)
+__LD4_LANE_FUNC (int16x8x4_t, int16x8_t, int16_t, v8hi, hi, s16)
+__LD4_LANE_FUNC (int32x4x4_t, int32x4_t, int32_t, v4si, si, s32)
+__LD4_LANE_FUNC (int64x2x4_t, int64x2_t, int64_t, v2di, di, s64)
+__LD4_LANE_FUNC (uint8x16x4_t, uint8x16_t, uint8_t, v16qi, qi, u8)
+__LD4_LANE_FUNC (uint16x8x4_t, uint16x8_t, uint16_t, v8hi, hi, u16)
+__LD4_LANE_FUNC (uint32x4x4_t, uint32x4_t, uint32_t, v4si, si, u32)
+__LD4_LANE_FUNC (uint64x2x4_t, uint64x2_t, uint64_t, v2di, di, u64)
+
+#undef __LD4_LANE_FUNC
+
+/* vmax */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmax_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return __builtin_aarch64_smax_nanv2sf (__a, __b);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmax_f64 (float64x1_t __a, float64x1_t __b)
+{
+    return (float64x1_t)
+      { __builtin_aarch64_smax_nandf (vget_lane_f64 (__a, 0),
+				      vget_lane_f64 (__b, 0)) };
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmax_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return __builtin_aarch64_smaxv8qi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmax_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return __builtin_aarch64_smaxv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmax_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return __builtin_aarch64_smaxv2si (__a, __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmax_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return (uint8x8_t) __builtin_aarch64_umaxv8qi ((int8x8_t) __a,
+						 (int8x8_t) __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmax_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return (uint16x4_t) __builtin_aarch64_umaxv4hi ((int16x4_t) __a,
+						  (int16x4_t) __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmax_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return (uint32x2_t) __builtin_aarch64_umaxv2si ((int32x2_t) __a,
+						  (int32x2_t) __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return __builtin_aarch64_smax_nanv4sf (__a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return __builtin_aarch64_smax_nanv2df (__a, __b);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return __builtin_aarch64_smaxv16qi (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return __builtin_aarch64_smaxv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return __builtin_aarch64_smaxv4si (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return (uint8x16_t) __builtin_aarch64_umaxv16qi ((int8x16_t) __a,
+						   (int8x16_t) __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return (uint16x8_t) __builtin_aarch64_umaxv8hi ((int16x8_t) __a,
+						  (int16x8_t) __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return (uint32x4_t) __builtin_aarch64_umaxv4si ((int32x4_t) __a,
+						  (int32x4_t) __b);
+}
+/* vmulx */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulx_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return __builtin_aarch64_fmulxv2sf (__a, __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return __builtin_aarch64_fmulxv4sf (__a, __b);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulx_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return (float64x1_t) {__builtin_aarch64_fmulxdf (__a[0], __b[0])};
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return __builtin_aarch64_fmulxv2df (__a, __b);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxs_f32 (float32_t __a, float32_t __b)
+{
+  return __builtin_aarch64_fmulxsf (__a, __b);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxd_f64 (float64_t __a, float64_t __b)
+{
+  return __builtin_aarch64_fmulxdf (__a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulx_lane_f32 (float32x2_t __a, float32x2_t __v, const int __lane)
+{
+  return vmulx_f32 (__a, __aarch64_vdup_lane_f32 (__v, __lane));
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulx_lane_f64 (float64x1_t __a, float64x1_t __v, const int __lane)
+{
+  return vmulx_f64 (__a, __aarch64_vdup_lane_f64 (__v, __lane));
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxq_lane_f32 (float32x4_t __a, float32x2_t __v, const int __lane)
+{
+  return vmulxq_f32 (__a, __aarch64_vdupq_lane_f32 (__v, __lane));
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxq_lane_f64 (float64x2_t __a, float64x1_t __v, const int __lane)
+{
+  return vmulxq_f64 (__a, __aarch64_vdupq_lane_f64 (__v, __lane));
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulx_laneq_f32 (float32x2_t __a, float32x4_t __v, const int __lane)
+{
+  return vmulx_f32 (__a, __aarch64_vdup_laneq_f32 (__v, __lane));
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulx_laneq_f64 (float64x1_t __a, float64x2_t __v, const int __lane)
+{
+  return vmulx_f64 (__a, __aarch64_vdup_laneq_f64 (__v, __lane));
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxq_laneq_f32 (float32x4_t __a, float32x4_t __v, const int __lane)
+{
+  return vmulxq_f32 (__a, __aarch64_vdupq_laneq_f32 (__v, __lane));
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxq_laneq_f64 (float64x2_t __a, float64x2_t __v, const int __lane)
+{
+  return vmulxq_f64 (__a, __aarch64_vdupq_laneq_f64 (__v, __lane));
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxs_lane_f32 (float32_t __a, float32x2_t __v, const int __lane)
+{
+  return vmulxs_f32 (__a, __aarch64_vget_lane_any (__v, __lane));
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxs_laneq_f32 (float32_t __a, float32x4_t __v, const int __lane)
+{
+  return vmulxs_f32 (__a, __aarch64_vget_lane_any (__v, __lane));
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxd_lane_f64 (float64_t __a, float64x1_t __v, const int __lane)
+{
+  return vmulxd_f64 (__a, __aarch64_vget_lane_any (__v, __lane));
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxd_laneq_f64 (float64_t __a, float64x2_t __v, const int __lane)
+{
+  return vmulxd_f64 (__a, __aarch64_vget_lane_any (__v, __lane));
+}
+
+/* vpmax  */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmax_s8 (int8x8_t a, int8x8_t b)
+{
+  return __builtin_aarch64_smaxpv8qi (a, b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmax_s16 (int16x4_t a, int16x4_t b)
+{
+  return __builtin_aarch64_smaxpv4hi (a, b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmax_s32 (int32x2_t a, int32x2_t b)
+{
+  return __builtin_aarch64_smaxpv2si (a, b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmax_u8 (uint8x8_t a, uint8x8_t b)
+{
+  return (uint8x8_t) __builtin_aarch64_umaxpv8qi ((int8x8_t) a,
+						  (int8x8_t) b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmax_u16 (uint16x4_t a, uint16x4_t b)
+{
+  return (uint16x4_t) __builtin_aarch64_umaxpv4hi ((int16x4_t) a,
+						   (int16x4_t) b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmax_u32 (uint32x2_t a, uint32x2_t b)
+{
+  return (uint32x2_t) __builtin_aarch64_umaxpv2si ((int32x2_t) a,
+						   (int32x2_t) b);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxq_s8 (int8x16_t a, int8x16_t b)
+{
+  return __builtin_aarch64_smaxpv16qi (a, b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxq_s16 (int16x8_t a, int16x8_t b)
+{
+  return __builtin_aarch64_smaxpv8hi (a, b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxq_s32 (int32x4_t a, int32x4_t b)
+{
+  return __builtin_aarch64_smaxpv4si (a, b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxq_u8 (uint8x16_t a, uint8x16_t b)
+{
+  return (uint8x16_t) __builtin_aarch64_umaxpv16qi ((int8x16_t) a,
+						    (int8x16_t) b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxq_u16 (uint16x8_t a, uint16x8_t b)
+{
+  return (uint16x8_t) __builtin_aarch64_umaxpv8hi ((int16x8_t) a,
+						   (int16x8_t) b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxq_u32 (uint32x4_t a, uint32x4_t b)
+{
+  return (uint32x4_t) __builtin_aarch64_umaxpv4si ((int32x4_t) a,
+						   (int32x4_t) b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmax_f32 (float32x2_t a, float32x2_t b)
+{
+  return __builtin_aarch64_smax_nanpv2sf (a, b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxq_f32 (float32x4_t a, float32x4_t b)
+{
+  return __builtin_aarch64_smax_nanpv4sf (a, b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxq_f64 (float64x2_t a, float64x2_t b)
+{
+  return __builtin_aarch64_smax_nanpv2df (a, b);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxqd_f64 (float64x2_t a)
+{
+  return __builtin_aarch64_reduc_smax_nan_scal_v2df (a);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxs_f32 (float32x2_t a)
+{
+  return __builtin_aarch64_reduc_smax_nan_scal_v2sf (a);
+}
+
+/* vpmaxnm  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxnm_f32 (float32x2_t a, float32x2_t b)
+{
+  return __builtin_aarch64_smaxpv2sf (a, b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxnmq_f32 (float32x4_t a, float32x4_t b)
+{
+  return __builtin_aarch64_smaxpv4sf (a, b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxnmq_f64 (float64x2_t a, float64x2_t b)
+{
+  return __builtin_aarch64_smaxpv2df (a, b);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxnmqd_f64 (float64x2_t a)
+{
+  return __builtin_aarch64_reduc_smax_scal_v2df (a);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxnms_f32 (float32x2_t a)
+{
+  return __builtin_aarch64_reduc_smax_scal_v2sf (a);
+}
+
+/* vpmin  */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmin_s8 (int8x8_t a, int8x8_t b)
+{
+  return __builtin_aarch64_sminpv8qi (a, b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmin_s16 (int16x4_t a, int16x4_t b)
+{
+  return __builtin_aarch64_sminpv4hi (a, b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmin_s32 (int32x2_t a, int32x2_t b)
+{
+  return __builtin_aarch64_sminpv2si (a, b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmin_u8 (uint8x8_t a, uint8x8_t b)
+{
+  return (uint8x8_t) __builtin_aarch64_uminpv8qi ((int8x8_t) a,
+						  (int8x8_t) b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmin_u16 (uint16x4_t a, uint16x4_t b)
+{
+  return (uint16x4_t) __builtin_aarch64_uminpv4hi ((int16x4_t) a,
+						   (int16x4_t) b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmin_u32 (uint32x2_t a, uint32x2_t b)
+{
+  return (uint32x2_t) __builtin_aarch64_uminpv2si ((int32x2_t) a,
+						   (int32x2_t) b);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpminq_s8 (int8x16_t a, int8x16_t b)
+{
+  return __builtin_aarch64_sminpv16qi (a, b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpminq_s16 (int16x8_t a, int16x8_t b)
+{
+  return __builtin_aarch64_sminpv8hi (a, b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpminq_s32 (int32x4_t a, int32x4_t b)
+{
+  return __builtin_aarch64_sminpv4si (a, b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpminq_u8 (uint8x16_t a, uint8x16_t b)
+{
+  return (uint8x16_t) __builtin_aarch64_uminpv16qi ((int8x16_t) a,
+						    (int8x16_t) b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpminq_u16 (uint16x8_t a, uint16x8_t b)
+{
+  return (uint16x8_t) __builtin_aarch64_uminpv8hi ((int16x8_t) a,
+						   (int16x8_t) b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpminq_u32 (uint32x4_t a, uint32x4_t b)
+{
+  return (uint32x4_t) __builtin_aarch64_uminpv4si ((int32x4_t) a,
+						   (int32x4_t) b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmin_f32 (float32x2_t a, float32x2_t b)
+{
+  return __builtin_aarch64_smin_nanpv2sf (a, b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpminq_f32 (float32x4_t a, float32x4_t b)
+{
+  return __builtin_aarch64_smin_nanpv4sf (a, b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpminq_f64 (float64x2_t a, float64x2_t b)
+{
+  return __builtin_aarch64_smin_nanpv2df (a, b);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpminqd_f64 (float64x2_t a)
+{
+  return __builtin_aarch64_reduc_smin_nan_scal_v2df (a);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmins_f32 (float32x2_t a)
+{
+  return __builtin_aarch64_reduc_smin_nan_scal_v2sf (a);
+}
+
+/* vpminnm  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpminnm_f32 (float32x2_t a, float32x2_t b)
+{
+  return __builtin_aarch64_sminpv2sf (a, b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpminnmq_f32 (float32x4_t a, float32x4_t b)
+{
+  return __builtin_aarch64_sminpv4sf (a, b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpminnmq_f64 (float64x2_t a, float64x2_t b)
+{
+  return __builtin_aarch64_sminpv2df (a, b);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpminnmqd_f64 (float64x2_t a)
+{
+  return __builtin_aarch64_reduc_smin_scal_v2df (a);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpminnms_f32 (float32x2_t a)
+{
+  return __builtin_aarch64_reduc_smin_scal_v2sf (a);
+}
+
+/* vmaxnm  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxnm_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return __builtin_aarch64_fmaxv2sf (__a, __b);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxnm_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return (float64x1_t)
+    { __builtin_aarch64_fmaxdf (vget_lane_f64 (__a, 0),
+				vget_lane_f64 (__b, 0)) };
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxnmq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return __builtin_aarch64_fmaxv4sf (__a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxnmq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return __builtin_aarch64_fmaxv2df (__a, __b);
+}
+
+/* vmaxv  */
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxv_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_reduc_smax_nan_scal_v2sf (__a);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxv_s8 (int8x8_t __a)
+{
+  return __builtin_aarch64_reduc_smax_scal_v8qi (__a);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxv_s16 (int16x4_t __a)
+{
+  return __builtin_aarch64_reduc_smax_scal_v4hi (__a);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxv_s32 (int32x2_t __a)
+{
+  return __builtin_aarch64_reduc_smax_scal_v2si (__a);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxv_u8 (uint8x8_t __a)
+{
+  return __builtin_aarch64_reduc_umax_scal_v8qi_uu (__a);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxv_u16 (uint16x4_t __a)
+{
+  return __builtin_aarch64_reduc_umax_scal_v4hi_uu (__a);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxv_u32 (uint32x2_t __a)
+{
+  return __builtin_aarch64_reduc_umax_scal_v2si_uu (__a);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxvq_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_reduc_smax_nan_scal_v4sf (__a);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxvq_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_reduc_smax_nan_scal_v2df (__a);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxvq_s8 (int8x16_t __a)
+{
+  return __builtin_aarch64_reduc_smax_scal_v16qi (__a);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxvq_s16 (int16x8_t __a)
+{
+  return __builtin_aarch64_reduc_smax_scal_v8hi (__a);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxvq_s32 (int32x4_t __a)
+{
+  return __builtin_aarch64_reduc_smax_scal_v4si (__a);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxvq_u8 (uint8x16_t __a)
+{
+  return __builtin_aarch64_reduc_umax_scal_v16qi_uu (__a);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxvq_u16 (uint16x8_t __a)
+{
+  return __builtin_aarch64_reduc_umax_scal_v8hi_uu (__a);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxvq_u32 (uint32x4_t __a)
+{
+  return __builtin_aarch64_reduc_umax_scal_v4si_uu (__a);
+}
+
+/* vmaxnmv  */
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxnmv_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_reduc_smax_scal_v2sf (__a);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxnmvq_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_reduc_smax_scal_v4sf (__a);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxnmvq_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_reduc_smax_scal_v2df (__a);
+}
+
+/* vmin  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmin_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return __builtin_aarch64_smin_nanv2sf (__a, __b);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmin_f64 (float64x1_t __a, float64x1_t __b)
+{
+    return (float64x1_t)
+	  { __builtin_aarch64_smin_nandf (vget_lane_f64 (__a, 0),
+					  vget_lane_f64 (__b, 0)) };
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmin_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return __builtin_aarch64_sminv8qi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmin_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return __builtin_aarch64_sminv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmin_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return __builtin_aarch64_sminv2si (__a, __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmin_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return (uint8x8_t) __builtin_aarch64_uminv8qi ((int8x8_t) __a,
+						 (int8x8_t) __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmin_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return (uint16x4_t) __builtin_aarch64_uminv4hi ((int16x4_t) __a,
+						  (int16x4_t) __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmin_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return (uint32x2_t) __builtin_aarch64_uminv2si ((int32x2_t) __a,
+						  (int32x2_t) __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return __builtin_aarch64_smin_nanv4sf (__a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return __builtin_aarch64_smin_nanv2df (__a, __b);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return __builtin_aarch64_sminv16qi (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return __builtin_aarch64_sminv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return __builtin_aarch64_sminv4si (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return (uint8x16_t) __builtin_aarch64_uminv16qi ((int8x16_t) __a,
+						   (int8x16_t) __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return (uint16x8_t) __builtin_aarch64_uminv8hi ((int16x8_t) __a,
+						  (int16x8_t) __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return (uint32x4_t) __builtin_aarch64_uminv4si ((int32x4_t) __a,
+						  (int32x4_t) __b);
+}
+
+/* vminnm  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminnm_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return __builtin_aarch64_fminv2sf (__a, __b);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminnm_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return (float64x1_t)
+    { __builtin_aarch64_fmindf (vget_lane_f64 (__a, 0),
+				vget_lane_f64 (__b, 0)) };
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminnmq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return __builtin_aarch64_fminv4sf (__a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminnmq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return __builtin_aarch64_fminv2df (__a, __b);
+}
+
+/* vminv  */
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminv_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_reduc_smin_nan_scal_v2sf (__a);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminv_s8 (int8x8_t __a)
+{
+  return __builtin_aarch64_reduc_smin_scal_v8qi (__a);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminv_s16 (int16x4_t __a)
+{
+  return __builtin_aarch64_reduc_smin_scal_v4hi (__a);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminv_s32 (int32x2_t __a)
+{
+  return __builtin_aarch64_reduc_smin_scal_v2si (__a);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminv_u8 (uint8x8_t __a)
+{
+  return __builtin_aarch64_reduc_umin_scal_v8qi_uu (__a);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminv_u16 (uint16x4_t __a)
+{
+  return __builtin_aarch64_reduc_umin_scal_v4hi_uu (__a);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminv_u32 (uint32x2_t __a)
+{
+  return __builtin_aarch64_reduc_umin_scal_v2si_uu (__a);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminvq_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_reduc_smin_nan_scal_v4sf (__a);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminvq_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_reduc_smin_nan_scal_v2df (__a);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminvq_s8 (int8x16_t __a)
+{
+  return __builtin_aarch64_reduc_smin_scal_v16qi (__a);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminvq_s16 (int16x8_t __a)
+{
+  return __builtin_aarch64_reduc_smin_scal_v8hi (__a);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminvq_s32 (int32x4_t __a)
+{
+  return __builtin_aarch64_reduc_smin_scal_v4si (__a);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminvq_u8 (uint8x16_t __a)
+{
+  return __builtin_aarch64_reduc_umin_scal_v16qi_uu (__a);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminvq_u16 (uint16x8_t __a)
+{
+  return __builtin_aarch64_reduc_umin_scal_v8hi_uu (__a);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminvq_u32 (uint32x4_t __a)
+{
+  return __builtin_aarch64_reduc_umin_scal_v4si_uu (__a);
+}
+
+/* vminnmv  */
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminnmv_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_reduc_smin_scal_v2sf (__a);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminnmvq_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_reduc_smin_scal_v4sf (__a);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminnmvq_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_reduc_smin_scal_v2df (__a);
+}
+
+/* vmla */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_f32 (float32x2_t a, float32x2_t b, float32x2_t c)
+{
+  return a + b * c;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_f64 (float64x1_t __a, float64x1_t __b, float64x1_t __c)
+{
+  return __a + __b * __c;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_f32 (float32x4_t a, float32x4_t b, float32x4_t c)
+{
+  return a + b * c;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_f64 (float64x2_t a, float64x2_t b, float64x2_t c)
+{
+  return a + b * c;
+}
+
+/* vmla_lane  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_lane_f32 (float32x2_t __a, float32x2_t __b,
+	       float32x2_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_lane_s16 (int16x4_t __a, int16x4_t __b,
+		int16x4_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_lane_s32 (int32x2_t __a, int32x2_t __b,
+		int32x2_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_lane_u16 (uint16x4_t __a, uint16x4_t __b,
+		uint16x4_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_lane_u32 (uint32x2_t __a, uint32x2_t __b,
+	       uint32x2_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+/* vmla_laneq  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_laneq_f32 (float32x2_t __a, float32x2_t __b,
+	        float32x4_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_laneq_s16 (int16x4_t __a, int16x4_t __b,
+		int16x8_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_laneq_s32 (int32x2_t __a, int32x2_t __b,
+		int32x4_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_laneq_u16 (uint16x4_t __a, uint16x4_t __b,
+		uint16x8_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmla_laneq_u32 (uint32x2_t __a, uint32x2_t __b,
+		uint32x4_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+/* vmlaq_lane  */
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_lane_f32 (float32x4_t __a, float32x4_t __b,
+		float32x2_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_lane_s16 (int16x8_t __a, int16x8_t __b,
+		int16x4_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_lane_s32 (int32x4_t __a, int32x4_t __b,
+		int32x2_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_lane_u16 (uint16x8_t __a, uint16x8_t __b,
+		uint16x4_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_lane_u32 (uint32x4_t __a, uint32x4_t __b,
+		uint32x2_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+  /* vmlaq_laneq  */
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_laneq_f32 (float32x4_t __a, float32x4_t __b,
+		 float32x4_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_laneq_s16 (int16x8_t __a, int16x8_t __b,
+		int16x8_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_laneq_s32 (int32x4_t __a, int32x4_t __b,
+		int32x4_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_laneq_u16 (uint16x8_t __a, uint16x8_t __b,
+		uint16x8_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlaq_laneq_u32 (uint32x4_t __a, uint32x4_t __b,
+		uint32x4_t __c, const int __lane)
+{
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+/* vmls  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_f32 (float32x2_t a, float32x2_t b, float32x2_t c)
+{
+  return a - b * c;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_f64 (float64x1_t __a, float64x1_t __b, float64x1_t __c)
+{
+  return __a - __b * __c;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_f32 (float32x4_t a, float32x4_t b, float32x4_t c)
+{
+  return a - b * c;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_f64 (float64x2_t a, float64x2_t b, float64x2_t c)
+{
+  return a - b * c;
+}
+
+/* vmls_lane  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_lane_f32 (float32x2_t __a, float32x2_t __b,
+	       float32x2_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_lane_s16 (int16x4_t __a, int16x4_t __b,
+		int16x4_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_lane_s32 (int32x2_t __a, int32x2_t __b,
+		int32x2_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_lane_u16 (uint16x4_t __a, uint16x4_t __b,
+		uint16x4_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_lane_u32 (uint32x2_t __a, uint32x2_t __b,
+	       uint32x2_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+/* vmls_laneq  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_laneq_f32 (float32x2_t __a, float32x2_t __b,
+	       float32x4_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_laneq_s16 (int16x4_t __a, int16x4_t __b,
+		int16x8_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_laneq_s32 (int32x2_t __a, int32x2_t __b,
+		int32x4_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_laneq_u16 (uint16x4_t __a, uint16x4_t __b,
+		uint16x8_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmls_laneq_u32 (uint32x2_t __a, uint32x2_t __b,
+		uint32x4_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+/* vmlsq_lane  */
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_lane_f32 (float32x4_t __a, float32x4_t __b,
+		float32x2_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_lane_s16 (int16x8_t __a, int16x8_t __b,
+		int16x4_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_lane_s32 (int32x4_t __a, int32x4_t __b,
+		int32x2_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_lane_u16 (uint16x8_t __a, uint16x8_t __b,
+		uint16x4_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_lane_u32 (uint32x4_t __a, uint32x4_t __b,
+		uint32x2_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+  /* vmlsq_laneq  */
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_laneq_f32 (float32x4_t __a, float32x4_t __b,
+		float32x4_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_laneq_s16 (int16x8_t __a, int16x8_t __b,
+		int16x8_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_laneq_s32 (int32x4_t __a, int32x4_t __b,
+		int32x4_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_laneq_u16 (uint16x8_t __a, uint16x8_t __b,
+		uint16x8_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmlsq_laneq_u32 (uint32x4_t __a, uint32x4_t __b,
+		uint32x4_t __c, const int __lane)
+{
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
+}
+
+/* vmov_n_  */
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmov_n_f16 (float16_t __a)
+{
+  return vdup_n_f16 (__a);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmov_n_f32 (float32_t __a)
+{
+  return vdup_n_f32 (__a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmov_n_f64 (float64_t __a)
+{
+  return (float64x1_t) {__a};
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmov_n_p8 (poly8_t __a)
+{
+  return vdup_n_p8 (__a);
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmov_n_p16 (poly16_t __a)
+{
+  return vdup_n_p16 (__a);
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmov_n_p64 (poly64_t __a)
+{
+  return vdup_n_p64 (__a);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmov_n_s8 (int8_t __a)
+{
+  return vdup_n_s8 (__a);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmov_n_s16 (int16_t __a)
+{
+  return vdup_n_s16 (__a);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmov_n_s32 (int32_t __a)
+{
+  return vdup_n_s32 (__a);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmov_n_s64 (int64_t __a)
+{
+  return (int64x1_t) {__a};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmov_n_u8 (uint8_t __a)
+{
+  return vdup_n_u8 (__a);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmov_n_u16 (uint16_t __a)
+{
+    return vdup_n_u16 (__a);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmov_n_u32 (uint32_t __a)
+{
+   return vdup_n_u32 (__a);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmov_n_u64 (uint64_t __a)
+{
+  return (uint64x1_t) {__a};
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovq_n_f16 (float16_t __a)
+{
+  return vdupq_n_f16 (__a);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovq_n_f32 (float32_t __a)
+{
+  return vdupq_n_f32 (__a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovq_n_f64 (float64_t __a)
+{
+  return vdupq_n_f64 (__a);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovq_n_p8 (poly8_t __a)
+{
+  return vdupq_n_p8 (__a);
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovq_n_p16 (poly16_t __a)
+{
+  return vdupq_n_p16 (__a);
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovq_n_p64 (poly64_t __a)
+{
+  return vdupq_n_p64 (__a);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovq_n_s8 (int8_t __a)
+{
+  return vdupq_n_s8 (__a);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovq_n_s16 (int16_t __a)
+{
+  return vdupq_n_s16 (__a);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovq_n_s32 (int32_t __a)
+{
+  return vdupq_n_s32 (__a);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovq_n_s64 (int64_t __a)
+{
+  return vdupq_n_s64 (__a);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovq_n_u8 (uint8_t __a)
+{
+  return vdupq_n_u8 (__a);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovq_n_u16 (uint16_t __a)
+{
+  return vdupq_n_u16 (__a);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovq_n_u32 (uint32_t __a)
+{
+  return vdupq_n_u32 (__a);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmovq_n_u64 (uint64_t __a)
+{
+  return vdupq_n_u64 (__a);
+}
+
+/* vmul_lane  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_lane_f32 (float32x2_t __a, float32x2_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_lane_f64 (float64x1_t __a, float64x1_t __b, const int __lane)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_lane_s16 (int16x4_t __a, int16x4_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_lane_s32 (int32x2_t __a, int32x2_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_lane_u16 (uint16x4_t __a, uint16x4_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_lane_u32 (uint32x2_t __a, uint32x2_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+/* vmuld_lane  */
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmuld_lane_f64 (float64_t __a, float64x1_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmuld_laneq_f64 (float64_t __a, float64x2_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+/* vmuls_lane  */
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmuls_lane_f32 (float32_t __a, float32x2_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmuls_laneq_f32 (float32_t __a, float32x4_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+/* vmul_laneq  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_laneq_f32 (float32x2_t __a, float32x4_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_laneq_f64 (float64x1_t __a, float64x2_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_laneq_s16 (int16x4_t __a, int16x8_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_laneq_s32 (int32x2_t __a, int32x4_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_laneq_u16 (uint16x4_t __a, uint16x8_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_laneq_u32 (uint32x2_t __a, uint32x4_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+/* vmul_n  */
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_n_f64  (float64x1_t __a, float64_t __b)
+{
+  return (float64x1_t) { vget_lane_f64 (__a, 0) * __b };
+}
+
+/* vmulq_lane  */
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_lane_f32 (float32x4_t __a, float32x2_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_lane_f64 (float64x2_t __a, float64x1_t __b, const int __lane)
+{
+  __AARCH64_LANE_CHECK (__a, __lane);
+  return __a * __b[0];
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_lane_s16 (int16x8_t __a, int16x4_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_lane_s32 (int32x4_t __a, int32x2_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_lane_u16 (uint16x8_t __a, uint16x4_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_lane_u32 (uint32x4_t __a, uint32x2_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+/* vmulq_laneq  */
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_laneq_f32 (float32x4_t __a, float32x4_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_laneq_f64 (float64x2_t __a, float64x2_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_laneq_s16 (int16x8_t __a, int16x8_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_laneq_s32 (int32x4_t __a, int32x4_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_laneq_u16 (uint16x8_t __a, uint16x8_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_laneq_u32 (uint32x4_t __a, uint32x4_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+/* vmul_n.  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_n_f32 (float32x2_t __a, float32_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_n_f32 (float32x4_t __a, float32_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_n_f64 (float64x2_t __a, float64_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_n_s16 (int16x4_t __a, int16_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_n_s16 (int16x8_t __a, int16_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_n_s32 (int32x2_t __a, int32_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_n_s32 (int32x4_t __a, int32_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_n_u16 (uint16x4_t __a, uint16_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_n_u16 (uint16x8_t __a, uint16_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_n_u32 (uint32x2_t __a, uint32_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_n_u32 (uint32x4_t __a, uint32_t __b)
+{
+  return __a * __b;
+}
+
+/* vmvn  */
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmvn_p8 (poly8x8_t __a)
+{
+  return (poly8x8_t) ~((int8x8_t) __a);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmvn_s8 (int8x8_t __a)
+{
+  return ~__a;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmvn_s16 (int16x4_t __a)
+{
+  return ~__a;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmvn_s32 (int32x2_t __a)
+{
+  return ~__a;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmvn_u8 (uint8x8_t __a)
+{
+  return ~__a;
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmvn_u16 (uint16x4_t __a)
+{
+  return ~__a;
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmvn_u32 (uint32x2_t __a)
+{
+  return ~__a;
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmvnq_p8 (poly8x16_t __a)
+{
+  return (poly8x16_t) ~((int8x16_t) __a);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmvnq_s8 (int8x16_t __a)
+{
+  return ~__a;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmvnq_s16 (int16x8_t __a)
+{
+  return ~__a;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmvnq_s32 (int32x4_t __a)
+{
+  return ~__a;
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmvnq_u8 (uint8x16_t __a)
+{
+  return ~__a;
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmvnq_u16 (uint16x8_t __a)
+{
+  return ~__a;
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmvnq_u32 (uint32x4_t __a)
+{
+  return ~__a;
+}
+
+/* vneg  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vneg_f32 (float32x2_t __a)
+{
+  return -__a;
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vneg_f64 (float64x1_t __a)
+{
+  return -__a;
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vneg_s8 (int8x8_t __a)
+{
+  return -__a;
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vneg_s16 (int16x4_t __a)
+{
+  return -__a;
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vneg_s32 (int32x2_t __a)
+{
+  return -__a;
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vneg_s64 (int64x1_t __a)
+{
+  return -__a;
+}
+
+/* According to the ACLE, the negative of the minimum (signed)
+   value is itself.  This leads to a semantics mismatch, as this is
+   undefined behaviour in C.  The value range predictor is not
+   aware that the negation of a negative number can still be negative
+   and it may try to fold the expression.  See the test in
+   gcc.target/aarch64/vnegd_s64.c for an example.
+
+   The cast below tricks the value range predictor to include
+   INT64_MIN in the range it computes.  So for x in the range
+   [INT64_MIN, y] the range prediction after vnegd_s64 (x) will
+   be ~[INT64_MIN + 1, y].  */
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vnegd_s64 (int64_t __a)
+{
+  return - (uint64_t) __a;
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vnegq_f32 (float32x4_t __a)
+{
+  return -__a;
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vnegq_f64 (float64x2_t __a)
+{
+  return -__a;
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vnegq_s8 (int8x16_t __a)
+{
+  return -__a;
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vnegq_s16 (int16x8_t __a)
+{
+  return -__a;
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vnegq_s32 (int32x4_t __a)
+{
+  return -__a;
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vnegq_s64 (int64x2_t __a)
+{
+  return -__a;
+}
+
+/* vpadd  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadd_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return __builtin_aarch64_faddpv2sf (__a, __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return __builtin_aarch64_faddpv4sf (__a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return __builtin_aarch64_faddpv2df (__a, __b);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadd_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return __builtin_aarch64_addpv8qi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadd_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return __builtin_aarch64_addpv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadd_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return __builtin_aarch64_addpv2si (__a, __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadd_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return (uint8x8_t) __builtin_aarch64_addpv8qi ((int8x8_t) __a,
+						 (int8x8_t) __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadd_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return (uint16x4_t) __builtin_aarch64_addpv4hi ((int16x4_t) __a,
+						  (int16x4_t) __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadd_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return (uint32x2_t) __builtin_aarch64_addpv2si ((int32x2_t) __a,
+						  (int32x2_t) __b);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadds_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_reduc_plus_scal_v2sf (__a);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddd_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_reduc_plus_scal_v2df (__a);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddd_s64 (int64x2_t __a)
+{
+  return __builtin_aarch64_addpdi (__a);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddd_u64 (uint64x2_t __a)
+{
+  return __builtin_aarch64_addpdi ((int64x2_t) __a);
+}
+
+/* vqabs */
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqabsq_s64 (int64x2_t __a)
+{
+  return (int64x2_t) __builtin_aarch64_sqabsv2di (__a);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqabsb_s8 (int8_t __a)
+{
+  return (int8_t) __builtin_aarch64_sqabsqi (__a);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqabsh_s16 (int16_t __a)
+{
+  return (int16_t) __builtin_aarch64_sqabshi (__a);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqabss_s32 (int32_t __a)
+{
+  return (int32_t) __builtin_aarch64_sqabssi (__a);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqabsd_s64 (int64_t __a)
+{
+  return __builtin_aarch64_sqabsdi (__a);
+}
+
+/* vqadd */
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqaddb_s8 (int8_t __a, int8_t __b)
+{
+  return (int8_t) __builtin_aarch64_sqaddqi (__a, __b);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqaddh_s16 (int16_t __a, int16_t __b)
+{
+  return (int16_t) __builtin_aarch64_sqaddhi (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqadds_s32 (int32_t __a, int32_t __b)
+{
+  return (int32_t) __builtin_aarch64_sqaddsi (__a, __b);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqaddd_s64 (int64_t __a, int64_t __b)
+{
+  return __builtin_aarch64_sqadddi (__a, __b);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqaddb_u8 (uint8_t __a, uint8_t __b)
+{
+  return (uint8_t) __builtin_aarch64_uqaddqi_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqaddh_u16 (uint16_t __a, uint16_t __b)
+{
+  return (uint16_t) __builtin_aarch64_uqaddhi_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqadds_u32 (uint32_t __a, uint32_t __b)
+{
+  return (uint32_t) __builtin_aarch64_uqaddsi_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqaddd_u64 (uint64_t __a, uint64_t __b)
+{
+  return __builtin_aarch64_uqadddi_uuu (__a, __b);
+}
+
+/* vqdmlal */
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlal_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c)
+{
+  return __builtin_aarch64_sqdmlalv4hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlal_high_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c)
+{
+  return __builtin_aarch64_sqdmlal2v8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlal_high_lane_s16 (int32x4_t __a, int16x8_t __b, int16x4_t __c,
+		       int const __d)
+{
+  return __builtin_aarch64_sqdmlal2_lanev8hi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlal_high_laneq_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c,
+			int const __d)
+{
+  return __builtin_aarch64_sqdmlal2_laneqv8hi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlal_high_n_s16 (int32x4_t __a, int16x8_t __b, int16_t __c)
+{
+  return __builtin_aarch64_sqdmlal2_nv8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlal_lane_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c, int const __d)
+{
+  return __builtin_aarch64_sqdmlal_lanev4hi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlal_laneq_s16 (int32x4_t __a, int16x4_t __b, int16x8_t __c, int const __d)
+{
+  return __builtin_aarch64_sqdmlal_laneqv4hi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlal_n_s16 (int32x4_t __a, int16x4_t __b, int16_t __c)
+{
+  return __builtin_aarch64_sqdmlal_nv4hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlal_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c)
+{
+  return __builtin_aarch64_sqdmlalv2si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlal_high_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c)
+{
+  return __builtin_aarch64_sqdmlal2v4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlal_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x2_t __c,
+		       int const __d)
+{
+  return __builtin_aarch64_sqdmlal2_lanev4si (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlal_high_laneq_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c,
+			int const __d)
+{
+  return __builtin_aarch64_sqdmlal2_laneqv4si (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlal_high_n_s32 (int64x2_t __a, int32x4_t __b, int32_t __c)
+{
+  return __builtin_aarch64_sqdmlal2_nv4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlal_lane_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c, int const __d)
+{
+  return __builtin_aarch64_sqdmlal_lanev2si (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlal_laneq_s32 (int64x2_t __a, int32x2_t __b, int32x4_t __c, int const __d)
+{
+  return __builtin_aarch64_sqdmlal_laneqv2si (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlal_n_s32 (int64x2_t __a, int32x2_t __b, int32_t __c)
+{
+  return __builtin_aarch64_sqdmlal_nv2si (__a, __b, __c);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlalh_s16 (int32_t __a, int16_t __b, int16_t __c)
+{
+  return __builtin_aarch64_sqdmlalhi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlalh_lane_s16 (int32_t __a, int16_t __b, int16x4_t __c, const int __d)
+{
+  return __builtin_aarch64_sqdmlal_lanehi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlalh_laneq_s16 (int32_t __a, int16_t __b, int16x8_t __c, const int __d)
+{
+  return __builtin_aarch64_sqdmlal_laneqhi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlals_s32 (int64_t __a, int32_t __b, int32_t __c)
+{
+  return __builtin_aarch64_sqdmlalsi (__a, __b, __c);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlals_lane_s32 (int64_t __a, int32_t __b, int32x2_t __c, const int __d)
+{
+  return __builtin_aarch64_sqdmlal_lanesi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlals_laneq_s32 (int64_t __a, int32_t __b, int32x4_t __c, const int __d)
+{
+  return __builtin_aarch64_sqdmlal_laneqsi (__a, __b, __c, __d);
+}
+
+/* vqdmlsl */
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsl_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c)
+{
+  return __builtin_aarch64_sqdmlslv4hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsl_high_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c)
+{
+  return __builtin_aarch64_sqdmlsl2v8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsl_high_lane_s16 (int32x4_t __a, int16x8_t __b, int16x4_t __c,
+		       int const __d)
+{
+  return __builtin_aarch64_sqdmlsl2_lanev8hi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsl_high_laneq_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c,
+			int const __d)
+{
+  return __builtin_aarch64_sqdmlsl2_laneqv8hi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsl_high_n_s16 (int32x4_t __a, int16x8_t __b, int16_t __c)
+{
+  return __builtin_aarch64_sqdmlsl2_nv8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsl_lane_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c, int const __d)
+{
+  return __builtin_aarch64_sqdmlsl_lanev4hi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsl_laneq_s16 (int32x4_t __a, int16x4_t __b, int16x8_t __c, int const __d)
+{
+  return __builtin_aarch64_sqdmlsl_laneqv4hi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsl_n_s16 (int32x4_t __a, int16x4_t __b, int16_t __c)
+{
+  return __builtin_aarch64_sqdmlsl_nv4hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsl_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c)
+{
+  return __builtin_aarch64_sqdmlslv2si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsl_high_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c)
+{
+  return __builtin_aarch64_sqdmlsl2v4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsl_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x2_t __c,
+		       int const __d)
+{
+  return __builtin_aarch64_sqdmlsl2_lanev4si (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsl_high_laneq_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c,
+			int const __d)
+{
+  return __builtin_aarch64_sqdmlsl2_laneqv4si (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsl_high_n_s32 (int64x2_t __a, int32x4_t __b, int32_t __c)
+{
+  return __builtin_aarch64_sqdmlsl2_nv4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsl_lane_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c, int const __d)
+{
+  return __builtin_aarch64_sqdmlsl_lanev2si (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsl_laneq_s32 (int64x2_t __a, int32x2_t __b, int32x4_t __c, int const __d)
+{
+  return __builtin_aarch64_sqdmlsl_laneqv2si (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsl_n_s32 (int64x2_t __a, int32x2_t __b, int32_t __c)
+{
+  return __builtin_aarch64_sqdmlsl_nv2si (__a, __b, __c);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlslh_s16 (int32_t __a, int16_t __b, int16_t __c)
+{
+  return __builtin_aarch64_sqdmlslhi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlslh_lane_s16 (int32_t __a, int16_t __b, int16x4_t __c, const int __d)
+{
+  return __builtin_aarch64_sqdmlsl_lanehi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlslh_laneq_s16 (int32_t __a, int16_t __b, int16x8_t __c, const int __d)
+{
+  return __builtin_aarch64_sqdmlsl_laneqhi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsls_s32 (int64_t __a, int32_t __b, int32_t __c)
+{
+  return __builtin_aarch64_sqdmlslsi (__a, __b, __c);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsls_lane_s32 (int64_t __a, int32_t __b, int32x2_t __c, const int __d)
+{
+  return __builtin_aarch64_sqdmlsl_lanesi (__a, __b, __c, __d);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmlsls_laneq_s32 (int64_t __a, int32_t __b, int32x4_t __c, const int __d)
+{
+  return __builtin_aarch64_sqdmlsl_laneqsi (__a, __b, __c, __d);
+}
+
+/* vqdmulh */
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulh_lane_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmulh_lanev4hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulh_lane_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmulh_lanev2si (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulhq_lane_s16 (int16x8_t __a, int16x4_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmulh_lanev8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulhq_lane_s32 (int32x4_t __a, int32x2_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmulh_lanev4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulhh_s16 (int16_t __a, int16_t __b)
+{
+  return (int16_t) __builtin_aarch64_sqdmulhhi (__a, __b);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulhh_lane_s16 (int16_t __a, int16x4_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmulh_lanehi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulhh_laneq_s16 (int16_t __a, int16x8_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmulh_laneqhi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulhs_s32 (int32_t __a, int32_t __b)
+{
+  return (int32_t) __builtin_aarch64_sqdmulhsi (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulhs_lane_s32 (int32_t __a, int32x2_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmulh_lanesi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulhs_laneq_s32 (int32_t __a, int32x4_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmulh_laneqsi (__a, __b, __c);
+}
+
+/* vqdmull */
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmull_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return __builtin_aarch64_sqdmullv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmull_high_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return __builtin_aarch64_sqdmull2v8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmull_high_lane_s16 (int16x8_t __a, int16x4_t __b, int const __c)
+{
+  return __builtin_aarch64_sqdmull2_lanev8hi (__a, __b,__c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmull_high_laneq_s16 (int16x8_t __a, int16x8_t __b, int const __c)
+{
+  return __builtin_aarch64_sqdmull2_laneqv8hi (__a, __b,__c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmull_high_n_s16 (int16x8_t __a, int16_t __b)
+{
+  return __builtin_aarch64_sqdmull2_nv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmull_lane_s16 (int16x4_t __a, int16x4_t __b, int const __c)
+{
+  return __builtin_aarch64_sqdmull_lanev4hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmull_laneq_s16 (int16x4_t __a, int16x8_t __b, int const __c)
+{
+  return __builtin_aarch64_sqdmull_laneqv4hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmull_n_s16 (int16x4_t __a, int16_t __b)
+{
+  return __builtin_aarch64_sqdmull_nv4hi (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmull_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return __builtin_aarch64_sqdmullv2si (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmull_high_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return __builtin_aarch64_sqdmull2v4si (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmull_high_lane_s32 (int32x4_t __a, int32x2_t __b, int const __c)
+{
+  return __builtin_aarch64_sqdmull2_lanev4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmull_high_laneq_s32 (int32x4_t __a, int32x4_t __b, int const __c)
+{
+  return __builtin_aarch64_sqdmull2_laneqv4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmull_high_n_s32 (int32x4_t __a, int32_t __b)
+{
+  return __builtin_aarch64_sqdmull2_nv4si (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmull_lane_s32 (int32x2_t __a, int32x2_t __b, int const __c)
+{
+  return __builtin_aarch64_sqdmull_lanev2si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmull_laneq_s32 (int32x2_t __a, int32x4_t __b, int const __c)
+{
+  return __builtin_aarch64_sqdmull_laneqv2si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmull_n_s32 (int32x2_t __a, int32_t __b)
+{
+  return __builtin_aarch64_sqdmull_nv2si (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmullh_s16 (int16_t __a, int16_t __b)
+{
+  return (int32_t) __builtin_aarch64_sqdmullhi (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmullh_lane_s16 (int16_t __a, int16x4_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmull_lanehi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmullh_laneq_s16 (int16_t __a, int16x8_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmull_laneqhi (__a, __b, __c);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulls_s32 (int32_t __a, int32_t __b)
+{
+  return __builtin_aarch64_sqdmullsi (__a, __b);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulls_lane_s32 (int32_t __a, int32x2_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmull_lanesi (__a, __b, __c);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqdmulls_laneq_s32 (int32_t __a, int32x4_t __b, const int __c)
+{
+  return __builtin_aarch64_sqdmull_laneqsi (__a, __b, __c);
+}
+
+/* vqmovn */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovn_s16 (int16x8_t __a)
+{
+  return (int8x8_t) __builtin_aarch64_sqmovnv8hi (__a);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovn_s32 (int32x4_t __a)
+{
+  return (int16x4_t) __builtin_aarch64_sqmovnv4si (__a);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovn_s64 (int64x2_t __a)
+{
+  return (int32x2_t) __builtin_aarch64_sqmovnv2di (__a);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovn_u16 (uint16x8_t __a)
+{
+  return (uint8x8_t) __builtin_aarch64_uqmovnv8hi ((int16x8_t) __a);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovn_u32 (uint32x4_t __a)
+{
+  return (uint16x4_t) __builtin_aarch64_uqmovnv4si ((int32x4_t) __a);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovn_u64 (uint64x2_t __a)
+{
+  return (uint32x2_t) __builtin_aarch64_uqmovnv2di ((int64x2_t) __a);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovnh_s16 (int16_t __a)
+{
+  return (int8_t) __builtin_aarch64_sqmovnhi (__a);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovns_s32 (int32_t __a)
+{
+  return (int16_t) __builtin_aarch64_sqmovnsi (__a);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovnd_s64 (int64_t __a)
+{
+  return (int32_t) __builtin_aarch64_sqmovndi (__a);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovnh_u16 (uint16_t __a)
+{
+  return (uint8_t) __builtin_aarch64_uqmovnhi (__a);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovns_u32 (uint32_t __a)
+{
+  return (uint16_t) __builtin_aarch64_uqmovnsi (__a);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovnd_u64 (uint64_t __a)
+{
+  return (uint32_t) __builtin_aarch64_uqmovndi (__a);
+}
+
+/* vqmovun */
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovun_s16 (int16x8_t __a)
+{
+  return (uint8x8_t) __builtin_aarch64_sqmovunv8hi (__a);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovun_s32 (int32x4_t __a)
+{
+  return (uint16x4_t) __builtin_aarch64_sqmovunv4si (__a);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovun_s64 (int64x2_t __a)
+{
+  return (uint32x2_t) __builtin_aarch64_sqmovunv2di (__a);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovunh_s16 (int16_t __a)
+{
+  return (int8_t) __builtin_aarch64_sqmovunhi (__a);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovuns_s32 (int32_t __a)
+{
+  return (int16_t) __builtin_aarch64_sqmovunsi (__a);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqmovund_s64 (int64_t __a)
+{
+  return (int32_t) __builtin_aarch64_sqmovundi (__a);
+}
+
+/* vqneg */
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqnegq_s64 (int64x2_t __a)
+{
+  return (int64x2_t) __builtin_aarch64_sqnegv2di (__a);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqnegb_s8 (int8_t __a)
+{
+  return (int8_t) __builtin_aarch64_sqnegqi (__a);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqnegh_s16 (int16_t __a)
+{
+  return (int16_t) __builtin_aarch64_sqneghi (__a);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqnegs_s32 (int32_t __a)
+{
+  return (int32_t) __builtin_aarch64_sqnegsi (__a);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqnegd_s64 (int64_t __a)
+{
+  return __builtin_aarch64_sqnegdi (__a);
+}
+
+/* vqrdmulh */
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulh_lane_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+{
+  return  __builtin_aarch64_sqrdmulh_lanev4hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulh_lane_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+{
+  return __builtin_aarch64_sqrdmulh_lanev2si (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulhq_lane_s16 (int16x8_t __a, int16x4_t __b, const int __c)
+{
+  return __builtin_aarch64_sqrdmulh_lanev8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulhq_lane_s32 (int32x4_t __a, int32x2_t __b, const int __c)
+{
+  return __builtin_aarch64_sqrdmulh_lanev4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulhh_s16 (int16_t __a, int16_t __b)
+{
+  return (int16_t) __builtin_aarch64_sqrdmulhhi (__a, __b);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulhh_lane_s16 (int16_t __a, int16x4_t __b, const int __c)
+{
+  return __builtin_aarch64_sqrdmulh_lanehi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulhh_laneq_s16 (int16_t __a, int16x8_t __b, const int __c)
+{
+  return __builtin_aarch64_sqrdmulh_laneqhi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulhs_s32 (int32_t __a, int32_t __b)
+{
+  return (int32_t) __builtin_aarch64_sqrdmulhsi (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulhs_lane_s32 (int32_t __a, int32x2_t __b, const int __c)
+{
+  return __builtin_aarch64_sqrdmulh_lanesi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrdmulhs_laneq_s32 (int32_t __a, int32x4_t __b, const int __c)
+{
+  return __builtin_aarch64_sqrdmulh_laneqsi (__a, __b, __c);
+}
+
+/* vqrshl */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshl_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return __builtin_aarch64_sqrshlv8qi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshl_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return __builtin_aarch64_sqrshlv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshl_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return __builtin_aarch64_sqrshlv2si (__a, __b);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshl_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return (int64x1_t) {__builtin_aarch64_sqrshldi (__a[0], __b[0])};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshl_u8 (uint8x8_t __a, int8x8_t __b)
+{
+  return __builtin_aarch64_uqrshlv8qi_uus ( __a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshl_u16 (uint16x4_t __a, int16x4_t __b)
+{
+  return __builtin_aarch64_uqrshlv4hi_uus ( __a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshl_u32 (uint32x2_t __a, int32x2_t __b)
+{
+  return __builtin_aarch64_uqrshlv2si_uus ( __a, __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshl_u64 (uint64x1_t __a, int64x1_t __b)
+{
+  return (uint64x1_t) {__builtin_aarch64_uqrshldi_uus (__a[0], __b[0])};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshlq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return __builtin_aarch64_sqrshlv16qi (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshlq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return __builtin_aarch64_sqrshlv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshlq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return __builtin_aarch64_sqrshlv4si (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshlq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return __builtin_aarch64_sqrshlv2di (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshlq_u8 (uint8x16_t __a, int8x16_t __b)
+{
+  return __builtin_aarch64_uqrshlv16qi_uus ( __a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshlq_u16 (uint16x8_t __a, int16x8_t __b)
+{
+  return __builtin_aarch64_uqrshlv8hi_uus ( __a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshlq_u32 (uint32x4_t __a, int32x4_t __b)
+{
+  return __builtin_aarch64_uqrshlv4si_uus ( __a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshlq_u64 (uint64x2_t __a, int64x2_t __b)
+{
+  return __builtin_aarch64_uqrshlv2di_uus ( __a, __b);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshlb_s8 (int8_t __a, int8_t __b)
+{
+  return __builtin_aarch64_sqrshlqi (__a, __b);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshlh_s16 (int16_t __a, int16_t __b)
+{
+  return __builtin_aarch64_sqrshlhi (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshls_s32 (int32_t __a, int32_t __b)
+{
+  return __builtin_aarch64_sqrshlsi (__a, __b);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshld_s64 (int64_t __a, int64_t __b)
+{
+  return __builtin_aarch64_sqrshldi (__a, __b);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshlb_u8 (uint8_t __a, uint8_t __b)
+{
+  return __builtin_aarch64_uqrshlqi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshlh_u16 (uint16_t __a, uint16_t __b)
+{
+  return __builtin_aarch64_uqrshlhi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshls_u32 (uint32_t __a, uint32_t __b)
+{
+  return __builtin_aarch64_uqrshlsi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshld_u64 (uint64_t __a, uint64_t __b)
+{
+  return __builtin_aarch64_uqrshldi_uus (__a, __b);
+}
+
+/* vqrshrn */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshrn_n_s16 (int16x8_t __a, const int __b)
+{
+  return (int8x8_t) __builtin_aarch64_sqrshrn_nv8hi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshrn_n_s32 (int32x4_t __a, const int __b)
+{
+  return (int16x4_t) __builtin_aarch64_sqrshrn_nv4si (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshrn_n_s64 (int64x2_t __a, const int __b)
+{
+  return (int32x2_t) __builtin_aarch64_sqrshrn_nv2di (__a, __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshrn_n_u16 (uint16x8_t __a, const int __b)
+{
+  return __builtin_aarch64_uqrshrn_nv8hi_uus ( __a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshrn_n_u32 (uint32x4_t __a, const int __b)
+{
+  return __builtin_aarch64_uqrshrn_nv4si_uus ( __a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshrn_n_u64 (uint64x2_t __a, const int __b)
+{
+  return __builtin_aarch64_uqrshrn_nv2di_uus ( __a, __b);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshrnh_n_s16 (int16_t __a, const int __b)
+{
+  return (int8_t) __builtin_aarch64_sqrshrn_nhi (__a, __b);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshrns_n_s32 (int32_t __a, const int __b)
+{
+  return (int16_t) __builtin_aarch64_sqrshrn_nsi (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshrnd_n_s64 (int64_t __a, const int __b)
+{
+  return (int32_t) __builtin_aarch64_sqrshrn_ndi (__a, __b);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshrnh_n_u16 (uint16_t __a, const int __b)
+{
+  return __builtin_aarch64_uqrshrn_nhi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshrns_n_u32 (uint32_t __a, const int __b)
+{
+  return __builtin_aarch64_uqrshrn_nsi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshrnd_n_u64 (uint64_t __a, const int __b)
+{
+  return __builtin_aarch64_uqrshrn_ndi_uus (__a, __b);
+}
+
+/* vqrshrun */
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshrun_n_s16 (int16x8_t __a, const int __b)
+{
+  return (uint8x8_t) __builtin_aarch64_sqrshrun_nv8hi (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshrun_n_s32 (int32x4_t __a, const int __b)
+{
+  return (uint16x4_t) __builtin_aarch64_sqrshrun_nv4si (__a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshrun_n_s64 (int64x2_t __a, const int __b)
+{
+  return (uint32x2_t) __builtin_aarch64_sqrshrun_nv2di (__a, __b);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshrunh_n_s16 (int16_t __a, const int __b)
+{
+  return (int8_t) __builtin_aarch64_sqrshrun_nhi (__a, __b);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshruns_n_s32 (int32_t __a, const int __b)
+{
+  return (int16_t) __builtin_aarch64_sqrshrun_nsi (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqrshrund_n_s64 (int64_t __a, const int __b)
+{
+  return (int32_t) __builtin_aarch64_sqrshrun_ndi (__a, __b);
+}
+
+/* vqshl */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshl_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return __builtin_aarch64_sqshlv8qi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshl_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return __builtin_aarch64_sqshlv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshl_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return __builtin_aarch64_sqshlv2si (__a, __b);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshl_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return (int64x1_t) {__builtin_aarch64_sqshldi (__a[0], __b[0])};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshl_u8 (uint8x8_t __a, int8x8_t __b)
+{
+  return __builtin_aarch64_uqshlv8qi_uus ( __a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshl_u16 (uint16x4_t __a, int16x4_t __b)
+{
+  return __builtin_aarch64_uqshlv4hi_uus ( __a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshl_u32 (uint32x2_t __a, int32x2_t __b)
+{
+  return __builtin_aarch64_uqshlv2si_uus ( __a, __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshl_u64 (uint64x1_t __a, int64x1_t __b)
+{
+  return (uint64x1_t) {__builtin_aarch64_uqshldi_uus (__a[0], __b[0])};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return __builtin_aarch64_sqshlv16qi (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return __builtin_aarch64_sqshlv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return __builtin_aarch64_sqshlv4si (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return __builtin_aarch64_sqshlv2di (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlq_u8 (uint8x16_t __a, int8x16_t __b)
+{
+  return __builtin_aarch64_uqshlv16qi_uus ( __a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlq_u16 (uint16x8_t __a, int16x8_t __b)
+{
+  return __builtin_aarch64_uqshlv8hi_uus ( __a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlq_u32 (uint32x4_t __a, int32x4_t __b)
+{
+  return __builtin_aarch64_uqshlv4si_uus ( __a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlq_u64 (uint64x2_t __a, int64x2_t __b)
+{
+  return __builtin_aarch64_uqshlv2di_uus ( __a, __b);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlb_s8 (int8_t __a, int8_t __b)
+{
+  return __builtin_aarch64_sqshlqi (__a, __b);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlh_s16 (int16_t __a, int16_t __b)
+{
+  return __builtin_aarch64_sqshlhi (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshls_s32 (int32_t __a, int32_t __b)
+{
+  return __builtin_aarch64_sqshlsi (__a, __b);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshld_s64 (int64_t __a, int64_t __b)
+{
+  return __builtin_aarch64_sqshldi (__a, __b);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlb_u8 (uint8_t __a, uint8_t __b)
+{
+  return __builtin_aarch64_uqshlqi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlh_u16 (uint16_t __a, uint16_t __b)
+{
+  return __builtin_aarch64_uqshlhi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshls_u32 (uint32_t __a, uint32_t __b)
+{
+  return __builtin_aarch64_uqshlsi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshld_u64 (uint64_t __a, uint64_t __b)
+{
+  return __builtin_aarch64_uqshldi_uus (__a, __b);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshl_n_s8 (int8x8_t __a, const int __b)
+{
+  return (int8x8_t) __builtin_aarch64_sqshl_nv8qi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshl_n_s16 (int16x4_t __a, const int __b)
+{
+  return (int16x4_t) __builtin_aarch64_sqshl_nv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshl_n_s32 (int32x2_t __a, const int __b)
+{
+  return (int32x2_t) __builtin_aarch64_sqshl_nv2si (__a, __b);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshl_n_s64 (int64x1_t __a, const int __b)
+{
+  return (int64x1_t) {__builtin_aarch64_sqshl_ndi (__a[0], __b)};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshl_n_u8 (uint8x8_t __a, const int __b)
+{
+  return __builtin_aarch64_uqshl_nv8qi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshl_n_u16 (uint16x4_t __a, const int __b)
+{
+  return __builtin_aarch64_uqshl_nv4hi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshl_n_u32 (uint32x2_t __a, const int __b)
+{
+  return __builtin_aarch64_uqshl_nv2si_uus (__a, __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshl_n_u64 (uint64x1_t __a, const int __b)
+{
+  return (uint64x1_t) {__builtin_aarch64_uqshl_ndi_uus (__a[0], __b)};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlq_n_s8 (int8x16_t __a, const int __b)
+{
+  return (int8x16_t) __builtin_aarch64_sqshl_nv16qi (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlq_n_s16 (int16x8_t __a, const int __b)
+{
+  return (int16x8_t) __builtin_aarch64_sqshl_nv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlq_n_s32 (int32x4_t __a, const int __b)
+{
+  return (int32x4_t) __builtin_aarch64_sqshl_nv4si (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlq_n_s64 (int64x2_t __a, const int __b)
+{
+  return (int64x2_t) __builtin_aarch64_sqshl_nv2di (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlq_n_u8 (uint8x16_t __a, const int __b)
+{
+  return __builtin_aarch64_uqshl_nv16qi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlq_n_u16 (uint16x8_t __a, const int __b)
+{
+  return __builtin_aarch64_uqshl_nv8hi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlq_n_u32 (uint32x4_t __a, const int __b)
+{
+  return __builtin_aarch64_uqshl_nv4si_uus (__a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlq_n_u64 (uint64x2_t __a, const int __b)
+{
+  return __builtin_aarch64_uqshl_nv2di_uus (__a, __b);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlb_n_s8 (int8_t __a, const int __b)
+{
+  return (int8_t) __builtin_aarch64_sqshl_nqi (__a, __b);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlh_n_s16 (int16_t __a, const int __b)
+{
+  return (int16_t) __builtin_aarch64_sqshl_nhi (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshls_n_s32 (int32_t __a, const int __b)
+{
+  return (int32_t) __builtin_aarch64_sqshl_nsi (__a, __b);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshld_n_s64 (int64_t __a, const int __b)
+{
+  return __builtin_aarch64_sqshl_ndi (__a, __b);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlb_n_u8 (uint8_t __a, const int __b)
+{
+  return __builtin_aarch64_uqshl_nqi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlh_n_u16 (uint16_t __a, const int __b)
+{
+  return __builtin_aarch64_uqshl_nhi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshls_n_u32 (uint32_t __a, const int __b)
+{
+  return __builtin_aarch64_uqshl_nsi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshld_n_u64 (uint64_t __a, const int __b)
+{
+  return __builtin_aarch64_uqshl_ndi_uus (__a, __b);
+}
+
+/* vqshlu */
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlu_n_s8 (int8x8_t __a, const int __b)
+{
+  return __builtin_aarch64_sqshlu_nv8qi_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlu_n_s16 (int16x4_t __a, const int __b)
+{
+  return __builtin_aarch64_sqshlu_nv4hi_uss (__a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlu_n_s32 (int32x2_t __a, const int __b)
+{
+  return __builtin_aarch64_sqshlu_nv2si_uss (__a, __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlu_n_s64 (int64x1_t __a, const int __b)
+{
+  return (uint64x1_t) {__builtin_aarch64_sqshlu_ndi_uss (__a[0], __b)};
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshluq_n_s8 (int8x16_t __a, const int __b)
+{
+  return __builtin_aarch64_sqshlu_nv16qi_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshluq_n_s16 (int16x8_t __a, const int __b)
+{
+  return __builtin_aarch64_sqshlu_nv8hi_uss (__a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshluq_n_s32 (int32x4_t __a, const int __b)
+{
+  return __builtin_aarch64_sqshlu_nv4si_uss (__a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshluq_n_s64 (int64x2_t __a, const int __b)
+{
+  return __builtin_aarch64_sqshlu_nv2di_uss (__a, __b);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlub_n_s8 (int8_t __a, const int __b)
+{
+  return (int8_t) __builtin_aarch64_sqshlu_nqi_uss (__a, __b);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshluh_n_s16 (int16_t __a, const int __b)
+{
+  return (int16_t) __builtin_aarch64_sqshlu_nhi_uss (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlus_n_s32 (int32_t __a, const int __b)
+{
+  return (int32_t) __builtin_aarch64_sqshlu_nsi_uss (__a, __b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshlud_n_s64 (int64_t __a, const int __b)
+{
+  return __builtin_aarch64_sqshlu_ndi_uss (__a, __b);
+}
+
+/* vqshrn */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshrn_n_s16 (int16x8_t __a, const int __b)
+{
+  return (int8x8_t) __builtin_aarch64_sqshrn_nv8hi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshrn_n_s32 (int32x4_t __a, const int __b)
+{
+  return (int16x4_t) __builtin_aarch64_sqshrn_nv4si (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshrn_n_s64 (int64x2_t __a, const int __b)
+{
+  return (int32x2_t) __builtin_aarch64_sqshrn_nv2di (__a, __b);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshrn_n_u16 (uint16x8_t __a, const int __b)
+{
+  return __builtin_aarch64_uqshrn_nv8hi_uus ( __a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshrn_n_u32 (uint32x4_t __a, const int __b)
+{
+  return __builtin_aarch64_uqshrn_nv4si_uus ( __a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshrn_n_u64 (uint64x2_t __a, const int __b)
+{
+  return __builtin_aarch64_uqshrn_nv2di_uus ( __a, __b);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshrnh_n_s16 (int16_t __a, const int __b)
+{
+  return (int8_t) __builtin_aarch64_sqshrn_nhi (__a, __b);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshrns_n_s32 (int32_t __a, const int __b)
+{
+  return (int16_t) __builtin_aarch64_sqshrn_nsi (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshrnd_n_s64 (int64_t __a, const int __b)
+{
+  return (int32_t) __builtin_aarch64_sqshrn_ndi (__a, __b);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshrnh_n_u16 (uint16_t __a, const int __b)
+{
+  return __builtin_aarch64_uqshrn_nhi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshrns_n_u32 (uint32_t __a, const int __b)
+{
+  return __builtin_aarch64_uqshrn_nsi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshrnd_n_u64 (uint64_t __a, const int __b)
+{
+  return __builtin_aarch64_uqshrn_ndi_uus (__a, __b);
+}
+
+/* vqshrun */
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshrun_n_s16 (int16x8_t __a, const int __b)
+{
+  return (uint8x8_t) __builtin_aarch64_sqshrun_nv8hi (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshrun_n_s32 (int32x4_t __a, const int __b)
+{
+  return (uint16x4_t) __builtin_aarch64_sqshrun_nv4si (__a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshrun_n_s64 (int64x2_t __a, const int __b)
+{
+  return (uint32x2_t) __builtin_aarch64_sqshrun_nv2di (__a, __b);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshrunh_n_s16 (int16_t __a, const int __b)
+{
+  return (int8_t) __builtin_aarch64_sqshrun_nhi (__a, __b);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshruns_n_s32 (int32_t __a, const int __b)
+{
+  return (int16_t) __builtin_aarch64_sqshrun_nsi (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqshrund_n_s64 (int64_t __a, const int __b)
+{
+  return (int32_t) __builtin_aarch64_sqshrun_ndi (__a, __b);
+}
+
+/* vqsub */
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsubb_s8 (int8_t __a, int8_t __b)
+{
+  return (int8_t) __builtin_aarch64_sqsubqi (__a, __b);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsubh_s16 (int16_t __a, int16_t __b)
+{
+  return (int16_t) __builtin_aarch64_sqsubhi (__a, __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsubs_s32 (int32_t __a, int32_t __b)
+{
+  return (int32_t) __builtin_aarch64_sqsubsi (__a, __b);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsubd_s64 (int64_t __a, int64_t __b)
+{
+  return __builtin_aarch64_sqsubdi (__a, __b);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsubb_u8 (uint8_t __a, uint8_t __b)
+{
+  return (uint8_t) __builtin_aarch64_uqsubqi_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsubh_u16 (uint16_t __a, uint16_t __b)
+{
+  return (uint16_t) __builtin_aarch64_uqsubhi_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsubs_u32 (uint32_t __a, uint32_t __b)
+{
+  return (uint32_t) __builtin_aarch64_uqsubsi_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqsubd_u64 (uint64_t __a, uint64_t __b)
+{
+  return __builtin_aarch64_uqsubdi_uuu (__a, __b);
+}
+
+/* vqtbl2 */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl2_s8 (int8x16x2_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[1], 1);
+  return __builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl2_u8 (uint8x16x2_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  return (uint8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl2_p8 (poly8x16x2_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  return (poly8x8_t)__builtin_aarch64_tbl3v8qi (__o, (int8x8_t)idx);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl2q_s8 (int8x16x2_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  return __builtin_aarch64_tbl3v16qi (__o, (int8x16_t)idx);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl2q_u8 (uint8x16x2_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  return (uint8x16_t)__builtin_aarch64_tbl3v16qi (__o, (int8x16_t)idx);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl2q_p8 (poly8x16x2_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  return (poly8x16_t)__builtin_aarch64_tbl3v16qi (__o, (int8x16_t)idx);
+}
+
+/* vqtbl3 */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl3_s8 (int8x16x3_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+  return __builtin_aarch64_qtbl3v8qi (__o, (int8x8_t)idx);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl3_u8 (uint8x16x3_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+  return (uint8x8_t)__builtin_aarch64_qtbl3v8qi (__o, (int8x8_t)idx);
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl3_p8 (poly8x16x3_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+  return (poly8x8_t)__builtin_aarch64_qtbl3v8qi (__o, (int8x8_t)idx);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl3q_s8 (int8x16x3_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+  return __builtin_aarch64_qtbl3v16qi (__o, (int8x16_t)idx);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl3q_u8 (uint8x16x3_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+  return (uint8x16_t)__builtin_aarch64_qtbl3v16qi (__o, (int8x16_t)idx);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl3q_p8 (poly8x16x3_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+  return (poly8x16_t)__builtin_aarch64_qtbl3v16qi (__o, (int8x16_t)idx);
+}
+
+/* vqtbl4 */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl4_s8 (int8x16x4_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+  return __builtin_aarch64_qtbl4v8qi (__o, (int8x8_t)idx);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl4_u8 (uint8x16x4_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+  return (uint8x8_t)__builtin_aarch64_qtbl4v8qi (__o, (int8x8_t)idx);
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl4_p8 (poly8x16x4_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+  return (poly8x8_t)__builtin_aarch64_qtbl4v8qi (__o, (int8x8_t)idx);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl4q_s8 (int8x16x4_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+  return __builtin_aarch64_qtbl4v16qi (__o, (int8x16_t)idx);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl4q_u8 (uint8x16x4_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+  return (uint8x16_t)__builtin_aarch64_qtbl4v16qi (__o, (int8x16_t)idx);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbl4q_p8 (poly8x16x4_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+  return (poly8x16_t)__builtin_aarch64_qtbl4v16qi (__o, (int8x16_t)idx);
+}
+
+
+/* vqtbx2 */
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx2_s8 (int8x8_t r, int8x16x2_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[1], 1);
+  return __builtin_aarch64_tbx4v8qi (r, __o, (int8x8_t)idx);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx2_u8 (uint8x8_t r, uint8x16x2_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  return (uint8x8_t)__builtin_aarch64_tbx4v8qi ((int8x8_t)r, __o,
+						(int8x8_t)idx);
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx2_p8 (poly8x8_t r, poly8x16x2_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  return (poly8x8_t)__builtin_aarch64_tbx4v8qi ((int8x8_t)r, __o,
+						(int8x8_t)idx);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx2q_s8 (int8x16_t r, int8x16x2_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, tab.val[1], 1);
+  return __builtin_aarch64_tbx4v16qi (r, __o, (int8x16_t)idx);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx2q_u8 (uint8x16_t r, uint8x16x2_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  return (uint8x16_t)__builtin_aarch64_tbx4v16qi ((int8x16_t)r, __o,
+						  (int8x16_t)idx);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx2q_p8 (poly8x16_t r, poly8x16x2_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  return (poly8x16_t)__builtin_aarch64_tbx4v16qi ((int8x16_t)r, __o,
+						  (int8x16_t)idx);
+}
+
+/* vqtbx3 */
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx3_s8 (int8x8_t r, int8x16x3_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[2], 2);
+  return __builtin_aarch64_qtbx3v8qi (r, __o, (int8x8_t)idx);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx3_u8 (uint8x8_t r, uint8x16x3_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+  return (uint8x8_t)__builtin_aarch64_qtbx3v8qi ((int8x8_t)r, __o,
+						 (int8x8_t)idx);
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx3_p8 (poly8x8_t r, poly8x16x3_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+  return (poly8x8_t)__builtin_aarch64_qtbx3v8qi ((int8x8_t)r, __o,
+						 (int8x8_t)idx);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx3q_s8 (int8x16_t r, int8x16x3_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, tab.val[2], 2);
+  return __builtin_aarch64_qtbx3v16qi (r, __o, (int8x16_t)idx);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx3q_u8 (uint8x16_t r, uint8x16x3_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+  return (uint8x16_t)__builtin_aarch64_qtbx3v16qi ((int8x16_t)r, __o,
+						   (int8x16_t)idx);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx3q_p8 (poly8x16_t r, poly8x16x3_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t)tab.val[2], 2);
+  return (poly8x16_t)__builtin_aarch64_qtbx3v16qi ((int8x16_t)r, __o,
+						   (int8x16_t)idx);
+}
+
+/* vqtbx4 */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx4_s8 (int8x8_t r, int8x16x4_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[3], 3);
+  return __builtin_aarch64_qtbx4v8qi (r, __o, (int8x8_t)idx);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx4_u8 (uint8x8_t r, uint8x16x4_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+  return (uint8x8_t)__builtin_aarch64_qtbx4v8qi ((int8x8_t)r, __o,
+						 (int8x8_t)idx);
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx4_p8 (poly8x8_t r, poly8x16x4_t tab, uint8x8_t idx)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+  return (poly8x8_t)__builtin_aarch64_qtbx4v8qi ((int8x8_t)r, __o,
+						 (int8x8_t)idx);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx4q_s8 (int8x16_t r, int8x16x4_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, tab.val[3], 3);
+  return __builtin_aarch64_qtbx4v16qi (r, __o, (int8x16_t)idx);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx4q_u8 (uint8x16_t r, uint8x16x4_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+  return (uint8x16_t)__builtin_aarch64_qtbx4v16qi ((int8x16_t)r, __o,
+						   (int8x16_t)idx);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vqtbx4q_p8 (poly8x16_t r, poly8x16x4_t tab, uint8x16_t idx)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t)tab.val[3], 3);
+  return (poly8x16_t)__builtin_aarch64_qtbx4v16qi ((int8x16_t)r, __o,
+						   (int8x16_t)idx);
+}
+
+/* vrbit  */
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrbit_p8 (poly8x8_t __a)
+{
+  return (poly8x8_t) __builtin_aarch64_rbitv8qi ((int8x8_t) __a);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrbit_s8 (int8x8_t __a)
+{
+  return __builtin_aarch64_rbitv8qi (__a);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrbit_u8 (uint8x8_t __a)
+{
+  return (uint8x8_t) __builtin_aarch64_rbitv8qi ((int8x8_t) __a);
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrbitq_p8 (poly8x16_t __a)
+{
+  return (poly8x16_t) __builtin_aarch64_rbitv16qi ((int8x16_t)__a);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrbitq_s8 (int8x16_t __a)
+{
+  return __builtin_aarch64_rbitv16qi (__a);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrbitq_u8 (uint8x16_t __a)
+{
+  return (uint8x16_t) __builtin_aarch64_rbitv16qi ((int8x16_t) __a);
+}
+
+/* vrecpe  */
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecpe_u32 (uint32x2_t __a)
+{
+  return (uint32x2_t) __builtin_aarch64_urecpev2si ((int32x2_t) __a);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecpeq_u32 (uint32x4_t __a)
+{
+  return (uint32x4_t) __builtin_aarch64_urecpev4si ((int32x4_t) __a);
+}
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecpes_f32 (float32_t __a)
+{
+  return __builtin_aarch64_frecpesf (__a);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecped_f64 (float64_t __a)
+{
+  return __builtin_aarch64_frecpedf (__a);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecpe_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_frecpev2sf (__a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecpe_f64 (float64x1_t __a)
+{
+  return (float64x1_t) { vrecped_f64 (vget_lane_f64 (__a, 0)) };
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecpeq_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_frecpev4sf (__a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecpeq_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_frecpev2df (__a);
+}
+
+/* vrecps  */
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecpss_f32 (float32_t __a, float32_t __b)
+{
+  return __builtin_aarch64_frecpssf (__a, __b);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecpsd_f64 (float64_t __a, float64_t __b)
+{
+  return __builtin_aarch64_frecpsdf (__a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecps_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return __builtin_aarch64_frecpsv2sf (__a, __b);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecps_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return (float64x1_t) { vrecpsd_f64 (vget_lane_f64 (__a, 0),
+				      vget_lane_f64 (__b, 0)) };
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecpsq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return __builtin_aarch64_frecpsv4sf (__a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecpsq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return __builtin_aarch64_frecpsv2df (__a, __b);
+}
+
+/* vrecpx  */
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecpxs_f32 (float32_t __a)
+{
+  return __builtin_aarch64_frecpxsf (__a);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecpxd_f64 (float64_t __a)
+{
+  return __builtin_aarch64_frecpxdf (__a);
+}
+
+
+/* vrev  */
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev16_p8 (poly8x8_t a)
+{
+  return __builtin_shuffle (a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev16_s8 (int8x8_t a)
+{
+  return __builtin_shuffle (a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev16_u8 (uint8x8_t a)
+{
+  return __builtin_shuffle (a, (uint8x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev16q_p8 (poly8x16_t a)
+{
+  return __builtin_shuffle (a,
+      (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev16q_s8 (int8x16_t a)
+{
+  return __builtin_shuffle (a,
+      (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev16q_u8 (uint8x16_t a)
+{
+  return __builtin_shuffle (a,
+      (uint8x16_t) { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 });
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev32_p8 (poly8x8_t a)
+{
+  return __builtin_shuffle (a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev32_p16 (poly16x4_t a)
+{
+  return __builtin_shuffle (a, (uint16x4_t) { 1, 0, 3, 2 });
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev32_s8 (int8x8_t a)
+{
+  return __builtin_shuffle (a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev32_s16 (int16x4_t a)
+{
+  return __builtin_shuffle (a, (uint16x4_t) { 1, 0, 3, 2 });
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev32_u8 (uint8x8_t a)
+{
+  return __builtin_shuffle (a, (uint8x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev32_u16 (uint16x4_t a)
+{
+  return __builtin_shuffle (a, (uint16x4_t) { 1, 0, 3, 2 });
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev32q_p8 (poly8x16_t a)
+{
+  return __builtin_shuffle (a,
+      (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev32q_p16 (poly16x8_t a)
+{
+  return __builtin_shuffle (a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev32q_s8 (int8x16_t a)
+{
+  return __builtin_shuffle (a,
+      (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev32q_s16 (int16x8_t a)
+{
+  return __builtin_shuffle (a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev32q_u8 (uint8x16_t a)
+{
+  return __builtin_shuffle (a,
+      (uint8x16_t) { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 });
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev32q_u16 (uint16x8_t a)
+{
+  return __builtin_shuffle (a, (uint16x8_t) { 1, 0, 3, 2, 5, 4, 7, 6 });
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64_f16 (float16x4_t __a)
+{
+  return __builtin_shuffle (__a, (uint16x4_t) { 3, 2, 1, 0 });
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64_f32 (float32x2_t a)
+{
+  return __builtin_shuffle (a, (uint32x2_t) { 1, 0 });
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64_p8 (poly8x8_t a)
+{
+  return __builtin_shuffle (a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64_p16 (poly16x4_t a)
+{
+  return __builtin_shuffle (a, (uint16x4_t) { 3, 2, 1, 0 });
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64_s8 (int8x8_t a)
+{
+  return __builtin_shuffle (a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64_s16 (int16x4_t a)
+{
+  return __builtin_shuffle (a, (uint16x4_t) { 3, 2, 1, 0 });
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64_s32 (int32x2_t a)
+{
+  return __builtin_shuffle (a, (uint32x2_t) { 1, 0 });
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64_u8 (uint8x8_t a)
+{
+  return __builtin_shuffle (a, (uint8x8_t) { 7, 6, 5, 4, 3, 2, 1, 0 });
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64_u16 (uint16x4_t a)
+{
+  return __builtin_shuffle (a, (uint16x4_t) { 3, 2, 1, 0 });
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64_u32 (uint32x2_t a)
+{
+  return __builtin_shuffle (a, (uint32x2_t) { 1, 0 });
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64q_f16 (float16x8_t __a)
+{
+  return __builtin_shuffle (__a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64q_f32 (float32x4_t a)
+{
+  return __builtin_shuffle (a, (uint32x4_t) { 1, 0, 3, 2 });
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64q_p8 (poly8x16_t a)
+{
+  return __builtin_shuffle (a,
+      (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64q_p16 (poly16x8_t a)
+{
+  return __builtin_shuffle (a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64q_s8 (int8x16_t a)
+{
+  return __builtin_shuffle (a,
+      (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64q_s16 (int16x8_t a)
+{
+  return __builtin_shuffle (a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64q_s32 (int32x4_t a)
+{
+  return __builtin_shuffle (a, (uint32x4_t) { 1, 0, 3, 2 });
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64q_u8 (uint8x16_t a)
+{
+  return __builtin_shuffle (a,
+      (uint8x16_t) { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 });
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64q_u16 (uint16x8_t a)
+{
+  return __builtin_shuffle (a, (uint16x8_t) { 3, 2, 1, 0, 7, 6, 5, 4 });
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrev64q_u32 (uint32x4_t a)
+{
+  return __builtin_shuffle (a, (uint32x4_t) { 1, 0, 3, 2 });
+}
+
+/* vrnd  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrnd_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_btruncv2sf (__a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrnd_f64 (float64x1_t __a)
+{
+  return vset_lane_f64 (__builtin_trunc (vget_lane_f64 (__a, 0)), __a, 0);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndq_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_btruncv4sf (__a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndq_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_btruncv2df (__a);
+}
+
+/* vrnda  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrnda_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_roundv2sf (__a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrnda_f64 (float64x1_t __a)
+{
+  return vset_lane_f64 (__builtin_round (vget_lane_f64 (__a, 0)), __a, 0);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndaq_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_roundv4sf (__a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndaq_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_roundv2df (__a);
+}
+
+/* vrndi  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndi_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_nearbyintv2sf (__a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndi_f64 (float64x1_t __a)
+{
+  return vset_lane_f64 (__builtin_nearbyint (vget_lane_f64 (__a, 0)), __a, 0);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndiq_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_nearbyintv4sf (__a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndiq_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_nearbyintv2df (__a);
+}
+
+/* vrndm  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndm_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_floorv2sf (__a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndm_f64 (float64x1_t __a)
+{
+  return vset_lane_f64 (__builtin_floor (vget_lane_f64 (__a, 0)), __a, 0);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndmq_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_floorv4sf (__a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndmq_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_floorv2df (__a);
+}
+
+/* vrndn  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndn_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_frintnv2sf (__a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndn_f64 (float64x1_t __a)
+{
+  return (float64x1_t) {__builtin_aarch64_frintndf (__a[0])};
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndnq_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_frintnv4sf (__a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndnq_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_frintnv2df (__a);
+}
+
+/* vrndp  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndp_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_ceilv2sf (__a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndp_f64 (float64x1_t __a)
+{
+  return vset_lane_f64 (__builtin_ceil (vget_lane_f64 (__a, 0)), __a, 0);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndpq_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_ceilv4sf (__a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndpq_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_ceilv2df (__a);
+}
+
+/* vrndx  */
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndx_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_rintv2sf (__a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndx_f64 (float64x1_t __a)
+{
+  return vset_lane_f64 (__builtin_rint (vget_lane_f64 (__a, 0)), __a, 0);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndxq_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_rintv4sf (__a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndxq_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_rintv2df (__a);
+}
+
+/* vrshl */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshl_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return (int8x8_t) __builtin_aarch64_srshlv8qi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshl_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return (int16x4_t) __builtin_aarch64_srshlv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshl_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return (int32x2_t) __builtin_aarch64_srshlv2si (__a, __b);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshl_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return (int64x1_t) {__builtin_aarch64_srshldi (__a[0], __b[0])};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshl_u8 (uint8x8_t __a, int8x8_t __b)
+{
+  return __builtin_aarch64_urshlv8qi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshl_u16 (uint16x4_t __a, int16x4_t __b)
+{
+  return __builtin_aarch64_urshlv4hi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshl_u32 (uint32x2_t __a, int32x2_t __b)
+{
+  return __builtin_aarch64_urshlv2si_uus (__a, __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshl_u64 (uint64x1_t __a, int64x1_t __b)
+{
+  return (uint64x1_t) {__builtin_aarch64_urshldi_uus (__a[0], __b[0])};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshlq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return (int8x16_t) __builtin_aarch64_srshlv16qi (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshlq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (int16x8_t) __builtin_aarch64_srshlv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshlq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (int32x4_t) __builtin_aarch64_srshlv4si (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshlq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return (int64x2_t) __builtin_aarch64_srshlv2di (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshlq_u8 (uint8x16_t __a, int8x16_t __b)
+{
+  return __builtin_aarch64_urshlv16qi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshlq_u16 (uint16x8_t __a, int16x8_t __b)
+{
+  return __builtin_aarch64_urshlv8hi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshlq_u32 (uint32x4_t __a, int32x4_t __b)
+{
+  return __builtin_aarch64_urshlv4si_uus (__a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshlq_u64 (uint64x2_t __a, int64x2_t __b)
+{
+  return __builtin_aarch64_urshlv2di_uus (__a, __b);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshld_s64 (int64_t __a, int64_t __b)
+{
+  return __builtin_aarch64_srshldi (__a, __b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshld_u64 (uint64_t __a, int64_t __b)
+{
+  return __builtin_aarch64_urshldi_uus (__a, __b);
+}
+
+/* vrshr */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshr_n_s8 (int8x8_t __a, const int __b)
+{
+  return (int8x8_t) __builtin_aarch64_srshr_nv8qi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshr_n_s16 (int16x4_t __a, const int __b)
+{
+  return (int16x4_t) __builtin_aarch64_srshr_nv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshr_n_s32 (int32x2_t __a, const int __b)
+{
+  return (int32x2_t) __builtin_aarch64_srshr_nv2si (__a, __b);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshr_n_s64 (int64x1_t __a, const int __b)
+{
+  return (int64x1_t) {__builtin_aarch64_srshr_ndi (__a[0], __b)};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshr_n_u8 (uint8x8_t __a, const int __b)
+{
+  return __builtin_aarch64_urshr_nv8qi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshr_n_u16 (uint16x4_t __a, const int __b)
+{
+  return __builtin_aarch64_urshr_nv4hi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshr_n_u32 (uint32x2_t __a, const int __b)
+{
+  return __builtin_aarch64_urshr_nv2si_uus (__a, __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshr_n_u64 (uint64x1_t __a, const int __b)
+{
+  return (uint64x1_t) {__builtin_aarch64_urshr_ndi_uus (__a[0], __b)};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshrq_n_s8 (int8x16_t __a, const int __b)
+{
+  return (int8x16_t) __builtin_aarch64_srshr_nv16qi (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshrq_n_s16 (int16x8_t __a, const int __b)
+{
+  return (int16x8_t) __builtin_aarch64_srshr_nv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshrq_n_s32 (int32x4_t __a, const int __b)
+{
+  return (int32x4_t) __builtin_aarch64_srshr_nv4si (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshrq_n_s64 (int64x2_t __a, const int __b)
+{
+  return (int64x2_t) __builtin_aarch64_srshr_nv2di (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshrq_n_u8 (uint8x16_t __a, const int __b)
+{
+  return __builtin_aarch64_urshr_nv16qi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshrq_n_u16 (uint16x8_t __a, const int __b)
+{
+  return __builtin_aarch64_urshr_nv8hi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshrq_n_u32 (uint32x4_t __a, const int __b)
+{
+  return __builtin_aarch64_urshr_nv4si_uus (__a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshrq_n_u64 (uint64x2_t __a, const int __b)
+{
+  return __builtin_aarch64_urshr_nv2di_uus (__a, __b);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshrd_n_s64 (int64_t __a, const int __b)
+{
+  return __builtin_aarch64_srshr_ndi (__a, __b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrshrd_n_u64 (uint64_t __a, const int __b)
+{
+  return __builtin_aarch64_urshr_ndi_uus (__a, __b);
+}
+
+/* vrsqrte.  */
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrtes_f32 (float32_t __a)
+{
+  return __builtin_aarch64_rsqrtesf (__a);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrted_f64 (float64_t __a)
+{
+  return __builtin_aarch64_rsqrtedf (__a);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrte_f32 (float32x2_t __a)
+{
+  return __builtin_aarch64_rsqrtev2sf (__a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrte_f64 (float64x1_t __a)
+{
+  return (float64x1_t) {vrsqrted_f64 (vget_lane_f64 (__a, 0))};
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrteq_f32 (float32x4_t __a)
+{
+  return __builtin_aarch64_rsqrtev4sf (__a);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrteq_f64 (float64x2_t __a)
+{
+  return __builtin_aarch64_rsqrtev2df (__a);
+}
+
+/* vrsqrts.  */
+
+__extension__ extern __inline float32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrtss_f32 (float32_t __a, float32_t __b)
+{
+  return __builtin_aarch64_rsqrtssf (__a, __b);
+}
+
+__extension__ extern __inline float64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrtsd_f64 (float64_t __a, float64_t __b)
+{
+  return __builtin_aarch64_rsqrtsdf (__a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrts_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return __builtin_aarch64_rsqrtsv2sf (__a, __b);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrts_f64 (float64x1_t __a, float64x1_t __b)
+{
+  return (float64x1_t) {vrsqrtsd_f64 (vget_lane_f64 (__a, 0),
+				      vget_lane_f64 (__b, 0))};
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrtsq_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return __builtin_aarch64_rsqrtsv4sf (__a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrtsq_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return __builtin_aarch64_rsqrtsv2df (__a, __b);
+}
+
+/* vrsra */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsra_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
+{
+  return (int8x8_t) __builtin_aarch64_srsra_nv8qi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsra_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+{
+  return (int16x4_t) __builtin_aarch64_srsra_nv4hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsra_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+{
+  return (int32x2_t) __builtin_aarch64_srsra_nv2si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsra_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
+{
+  return (int64x1_t) {__builtin_aarch64_srsra_ndi (__a[0], __b[0], __c)};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsra_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
+{
+  return __builtin_aarch64_ursra_nv8qi_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsra_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
+{
+  return __builtin_aarch64_ursra_nv4hi_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsra_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
+{
+  return __builtin_aarch64_ursra_nv2si_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsra_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
+{
+  return (uint64x1_t) {__builtin_aarch64_ursra_ndi_uuus (__a[0], __b[0], __c)};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsraq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
+{
+  return (int8x16_t) __builtin_aarch64_srsra_nv16qi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsraq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
+{
+  return (int16x8_t) __builtin_aarch64_srsra_nv8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsraq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
+{
+  return (int32x4_t) __builtin_aarch64_srsra_nv4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsraq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
+{
+  return (int64x2_t) __builtin_aarch64_srsra_nv2di (__a, __b, __c);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsraq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
+{
+  return __builtin_aarch64_ursra_nv16qi_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsraq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
+{
+  return __builtin_aarch64_ursra_nv8hi_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsraq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
+{
+  return __builtin_aarch64_ursra_nv4si_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsraq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
+{
+  return __builtin_aarch64_ursra_nv2di_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsrad_n_s64 (int64_t __a, int64_t __b, const int __c)
+{
+  return __builtin_aarch64_srsra_ndi (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsrad_n_u64 (uint64_t __a, uint64_t __b, const int __c)
+{
+  return __builtin_aarch64_ursra_ndi_uuus (__a, __b, __c);
+}
+
+#pragma GCC push_options
+#pragma GCC target ("+nothing+crypto")
+
+/* vsha1  */
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsha1cq_u32 (uint32x4_t hash_abcd, uint32_t hash_e, uint32x4_t wk)
+{
+  return __builtin_aarch64_crypto_sha1cv4si_uuuu (hash_abcd, hash_e, wk);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsha1mq_u32 (uint32x4_t hash_abcd, uint32_t hash_e, uint32x4_t wk)
+{
+  return __builtin_aarch64_crypto_sha1mv4si_uuuu (hash_abcd, hash_e, wk);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsha1pq_u32 (uint32x4_t hash_abcd, uint32_t hash_e, uint32x4_t wk)
+{
+  return __builtin_aarch64_crypto_sha1pv4si_uuuu (hash_abcd, hash_e, wk);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsha1h_u32 (uint32_t hash_e)
+{
+  return __builtin_aarch64_crypto_sha1hsi_uu (hash_e);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsha1su0q_u32 (uint32x4_t w0_3, uint32x4_t w4_7, uint32x4_t w8_11)
+{
+  return __builtin_aarch64_crypto_sha1su0v4si_uuuu (w0_3, w4_7, w8_11);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsha1su1q_u32 (uint32x4_t tw0_3, uint32x4_t w12_15)
+{
+  return __builtin_aarch64_crypto_sha1su1v4si_uuu (tw0_3, w12_15);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsha256hq_u32 (uint32x4_t hash_abcd, uint32x4_t hash_efgh, uint32x4_t wk)
+{
+  return __builtin_aarch64_crypto_sha256hv4si_uuuu (hash_abcd, hash_efgh, wk);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsha256h2q_u32 (uint32x4_t hash_efgh, uint32x4_t hash_abcd, uint32x4_t wk)
+{
+  return __builtin_aarch64_crypto_sha256h2v4si_uuuu (hash_efgh, hash_abcd, wk);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsha256su0q_u32 (uint32x4_t w0_3, uint32x4_t w4_7)
+{
+  return __builtin_aarch64_crypto_sha256su0v4si_uuu (w0_3, w4_7);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsha256su1q_u32 (uint32x4_t tw0_3, uint32x4_t w8_11, uint32x4_t w12_15)
+{
+  return __builtin_aarch64_crypto_sha256su1v4si_uuuu (tw0_3, w8_11, w12_15);
+}
+
+__extension__ extern __inline poly128_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_p64 (poly64_t a, poly64_t b)
+{
+  return
+    __builtin_aarch64_crypto_pmulldi_ppp (a, b);
+}
+
+__extension__ extern __inline poly128_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmull_high_p64 (poly64x2_t a, poly64x2_t b)
+{
+  return __builtin_aarch64_crypto_pmullv2di_ppp (a, b);
+}
+
+#pragma GCC pop_options
+
+/* vshl */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshl_n_s8 (int8x8_t __a, const int __b)
+{
+  return (int8x8_t) __builtin_aarch64_ashlv8qi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshl_n_s16 (int16x4_t __a, const int __b)
+{
+  return (int16x4_t) __builtin_aarch64_ashlv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshl_n_s32 (int32x2_t __a, const int __b)
+{
+  return (int32x2_t) __builtin_aarch64_ashlv2si (__a, __b);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshl_n_s64 (int64x1_t __a, const int __b)
+{
+  return (int64x1_t) {__builtin_aarch64_ashldi (__a[0], __b)};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshl_n_u8 (uint8x8_t __a, const int __b)
+{
+  return (uint8x8_t) __builtin_aarch64_ashlv8qi ((int8x8_t) __a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshl_n_u16 (uint16x4_t __a, const int __b)
+{
+  return (uint16x4_t) __builtin_aarch64_ashlv4hi ((int16x4_t) __a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshl_n_u32 (uint32x2_t __a, const int __b)
+{
+  return (uint32x2_t) __builtin_aarch64_ashlv2si ((int32x2_t) __a, __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshl_n_u64 (uint64x1_t __a, const int __b)
+{
+  return (uint64x1_t) {__builtin_aarch64_ashldi ((int64_t) __a[0], __b)};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshlq_n_s8 (int8x16_t __a, const int __b)
+{
+  return (int8x16_t) __builtin_aarch64_ashlv16qi (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshlq_n_s16 (int16x8_t __a, const int __b)
+{
+  return (int16x8_t) __builtin_aarch64_ashlv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshlq_n_s32 (int32x4_t __a, const int __b)
+{
+  return (int32x4_t) __builtin_aarch64_ashlv4si (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshlq_n_s64 (int64x2_t __a, const int __b)
+{
+  return (int64x2_t) __builtin_aarch64_ashlv2di (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshlq_n_u8 (uint8x16_t __a, const int __b)
+{
+  return (uint8x16_t) __builtin_aarch64_ashlv16qi ((int8x16_t) __a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshlq_n_u16 (uint16x8_t __a, const int __b)
+{
+  return (uint16x8_t) __builtin_aarch64_ashlv8hi ((int16x8_t) __a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshlq_n_u32 (uint32x4_t __a, const int __b)
+{
+  return (uint32x4_t) __builtin_aarch64_ashlv4si ((int32x4_t) __a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshlq_n_u64 (uint64x2_t __a, const int __b)
+{
+  return (uint64x2_t) __builtin_aarch64_ashlv2di ((int64x2_t) __a, __b);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshld_n_s64 (int64_t __a, const int __b)
+{
+  return __builtin_aarch64_ashldi (__a, __b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshld_n_u64 (uint64_t __a, const int __b)
+{
+  return (uint64_t) __builtin_aarch64_ashldi (__a, __b);
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshl_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return __builtin_aarch64_sshlv8qi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshl_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return __builtin_aarch64_sshlv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshl_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return __builtin_aarch64_sshlv2si (__a, __b);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshl_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return (int64x1_t) {__builtin_aarch64_sshldi (__a[0], __b[0])};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshl_u8 (uint8x8_t __a, int8x8_t __b)
+{
+  return __builtin_aarch64_ushlv8qi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshl_u16 (uint16x4_t __a, int16x4_t __b)
+{
+  return __builtin_aarch64_ushlv4hi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshl_u32 (uint32x2_t __a, int32x2_t __b)
+{
+  return __builtin_aarch64_ushlv2si_uus (__a, __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshl_u64 (uint64x1_t __a, int64x1_t __b)
+{
+  return (uint64x1_t) {__builtin_aarch64_ushldi_uus (__a[0], __b[0])};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshlq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return __builtin_aarch64_sshlv16qi (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshlq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return __builtin_aarch64_sshlv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshlq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return __builtin_aarch64_sshlv4si (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshlq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return __builtin_aarch64_sshlv2di (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshlq_u8 (uint8x16_t __a, int8x16_t __b)
+{
+  return __builtin_aarch64_ushlv16qi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshlq_u16 (uint16x8_t __a, int16x8_t __b)
+{
+  return __builtin_aarch64_ushlv8hi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshlq_u32 (uint32x4_t __a, int32x4_t __b)
+{
+  return __builtin_aarch64_ushlv4si_uus (__a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshlq_u64 (uint64x2_t __a, int64x2_t __b)
+{
+  return __builtin_aarch64_ushlv2di_uus (__a, __b);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshld_s64 (int64_t __a, int64_t __b)
+{
+  return __builtin_aarch64_sshldi (__a, __b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshld_u64 (uint64_t __a, uint64_t __b)
+{
+  return __builtin_aarch64_ushldi_uus (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshll_high_n_s8 (int8x16_t __a, const int __b)
+{
+  return __builtin_aarch64_sshll2_nv16qi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshll_high_n_s16 (int16x8_t __a, const int __b)
+{
+  return __builtin_aarch64_sshll2_nv8hi (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshll_high_n_s32 (int32x4_t __a, const int __b)
+{
+  return __builtin_aarch64_sshll2_nv4si (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshll_high_n_u8 (uint8x16_t __a, const int __b)
+{
+  return (uint16x8_t) __builtin_aarch64_ushll2_nv16qi ((int8x16_t) __a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshll_high_n_u16 (uint16x8_t __a, const int __b)
+{
+  return (uint32x4_t) __builtin_aarch64_ushll2_nv8hi ((int16x8_t) __a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshll_high_n_u32 (uint32x4_t __a, const int __b)
+{
+  return (uint64x2_t) __builtin_aarch64_ushll2_nv4si ((int32x4_t) __a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshll_n_s8 (int8x8_t __a, const int __b)
+{
+  return __builtin_aarch64_sshll_nv8qi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshll_n_s16 (int16x4_t __a, const int __b)
+{
+  return __builtin_aarch64_sshll_nv4hi (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshll_n_s32 (int32x2_t __a, const int __b)
+{
+  return __builtin_aarch64_sshll_nv2si (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshll_n_u8 (uint8x8_t __a, const int __b)
+{
+  return __builtin_aarch64_ushll_nv8qi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshll_n_u16 (uint16x4_t __a, const int __b)
+{
+  return __builtin_aarch64_ushll_nv4hi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshll_n_u32 (uint32x2_t __a, const int __b)
+{
+  return __builtin_aarch64_ushll_nv2si_uus (__a, __b);
+}
+
+/* vshr */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshr_n_s8 (int8x8_t __a, const int __b)
+{
+  return (int8x8_t) __builtin_aarch64_ashrv8qi (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshr_n_s16 (int16x4_t __a, const int __b)
+{
+  return (int16x4_t) __builtin_aarch64_ashrv4hi (__a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshr_n_s32 (int32x2_t __a, const int __b)
+{
+  return (int32x2_t) __builtin_aarch64_ashrv2si (__a, __b);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshr_n_s64 (int64x1_t __a, const int __b)
+{
+  return (int64x1_t) {__builtin_aarch64_ashr_simddi (__a[0], __b)};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshr_n_u8 (uint8x8_t __a, const int __b)
+{
+  return (uint8x8_t) __builtin_aarch64_lshrv8qi ((int8x8_t) __a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshr_n_u16 (uint16x4_t __a, const int __b)
+{
+  return (uint16x4_t) __builtin_aarch64_lshrv4hi ((int16x4_t) __a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshr_n_u32 (uint32x2_t __a, const int __b)
+{
+  return (uint32x2_t) __builtin_aarch64_lshrv2si ((int32x2_t) __a, __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshr_n_u64 (uint64x1_t __a, const int __b)
+{
+  return (uint64x1_t) {__builtin_aarch64_lshr_simddi_uus ( __a[0], __b)};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshrq_n_s8 (int8x16_t __a, const int __b)
+{
+  return (int8x16_t) __builtin_aarch64_ashrv16qi (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshrq_n_s16 (int16x8_t __a, const int __b)
+{
+  return (int16x8_t) __builtin_aarch64_ashrv8hi (__a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshrq_n_s32 (int32x4_t __a, const int __b)
+{
+  return (int32x4_t) __builtin_aarch64_ashrv4si (__a, __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshrq_n_s64 (int64x2_t __a, const int __b)
+{
+  return (int64x2_t) __builtin_aarch64_ashrv2di (__a, __b);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshrq_n_u8 (uint8x16_t __a, const int __b)
+{
+  return (uint8x16_t) __builtin_aarch64_lshrv16qi ((int8x16_t) __a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshrq_n_u16 (uint16x8_t __a, const int __b)
+{
+  return (uint16x8_t) __builtin_aarch64_lshrv8hi ((int16x8_t) __a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshrq_n_u32 (uint32x4_t __a, const int __b)
+{
+  return (uint32x4_t) __builtin_aarch64_lshrv4si ((int32x4_t) __a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshrq_n_u64 (uint64x2_t __a, const int __b)
+{
+  return (uint64x2_t) __builtin_aarch64_lshrv2di ((int64x2_t) __a, __b);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshrd_n_s64 (int64_t __a, const int __b)
+{
+  return __builtin_aarch64_ashr_simddi (__a, __b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vshrd_n_u64 (uint64_t __a, const int __b)
+{
+  return __builtin_aarch64_lshr_simddi_uus (__a, __b);
+}
+
+/* vsli */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsli_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
+{
+  return (int8x8_t) __builtin_aarch64_ssli_nv8qi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsli_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+{
+  return (int16x4_t) __builtin_aarch64_ssli_nv4hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsli_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+{
+  return (int32x2_t) __builtin_aarch64_ssli_nv2si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsli_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
+{
+  return (int64x1_t) {__builtin_aarch64_ssli_ndi (__a[0], __b[0], __c)};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsli_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
+{
+  return __builtin_aarch64_usli_nv8qi_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsli_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
+{
+  return __builtin_aarch64_usli_nv4hi_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsli_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
+{
+  return __builtin_aarch64_usli_nv2si_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsli_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
+{
+  return (uint64x1_t) {__builtin_aarch64_usli_ndi_uuus (__a[0], __b[0], __c)};
+}
+
+__extension__ extern __inline poly64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsli_n_p64 (poly64x1_t __a, poly64x1_t __b, const int __c)
+{
+  return (poly64x1_t) {__builtin_aarch64_ssli_ndi_ppps (__a[0], __b[0], __c)};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsliq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
+{
+  return (int8x16_t) __builtin_aarch64_ssli_nv16qi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsliq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
+{
+  return (int16x8_t) __builtin_aarch64_ssli_nv8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsliq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
+{
+  return (int32x4_t) __builtin_aarch64_ssli_nv4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsliq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
+{
+  return (int64x2_t) __builtin_aarch64_ssli_nv2di (__a, __b, __c);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsliq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
+{
+  return __builtin_aarch64_usli_nv16qi_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsliq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
+{
+  return __builtin_aarch64_usli_nv8hi_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsliq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
+{
+  return __builtin_aarch64_usli_nv4si_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsliq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
+{
+  return __builtin_aarch64_usli_nv2di_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline poly64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsliq_n_p64 (poly64x2_t __a, poly64x2_t __b, const int __c)
+{
+  return __builtin_aarch64_ssli_nv2di_ppps (__a, __b, __c);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vslid_n_s64 (int64_t __a, int64_t __b, const int __c)
+{
+  return __builtin_aarch64_ssli_ndi (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vslid_n_u64 (uint64_t __a, uint64_t __b, const int __c)
+{
+  return __builtin_aarch64_usli_ndi_uuus (__a, __b, __c);
+}
+
+/* vsqadd */
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqadd_u8 (uint8x8_t __a, int8x8_t __b)
+{
+  return __builtin_aarch64_usqaddv8qi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqadd_u16 (uint16x4_t __a, int16x4_t __b)
+{
+  return __builtin_aarch64_usqaddv4hi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqadd_u32 (uint32x2_t __a, int32x2_t __b)
+{
+  return __builtin_aarch64_usqaddv2si_uus (__a, __b);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqadd_u64 (uint64x1_t __a, int64x1_t __b)
+{
+  return (uint64x1_t) {__builtin_aarch64_usqadddi_uus (__a[0], __b[0])};
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqaddq_u8 (uint8x16_t __a, int8x16_t __b)
+{
+  return __builtin_aarch64_usqaddv16qi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqaddq_u16 (uint16x8_t __a, int16x8_t __b)
+{
+  return __builtin_aarch64_usqaddv8hi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqaddq_u32 (uint32x4_t __a, int32x4_t __b)
+{
+  return __builtin_aarch64_usqaddv4si_uus (__a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqaddq_u64 (uint64x2_t __a, int64x2_t __b)
+{
+  return __builtin_aarch64_usqaddv2di_uus (__a, __b);
+}
+
+__extension__ extern __inline uint8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqaddb_u8 (uint8_t __a, int8_t __b)
+{
+  return __builtin_aarch64_usqaddqi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqaddh_u16 (uint16_t __a, int16_t __b)
+{
+  return __builtin_aarch64_usqaddhi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqadds_u32 (uint32_t __a, int32_t __b)
+{
+  return __builtin_aarch64_usqaddsi_uus (__a, __b);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqaddd_u64 (uint64_t __a, int64_t __b)
+{
+  return __builtin_aarch64_usqadddi_uus (__a, __b);
+}
+
+/* vsqrt */
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqrt_f32 (float32x2_t a)
+{
+  return __builtin_aarch64_sqrtv2sf (a);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqrtq_f32 (float32x4_t a)
+{
+  return __builtin_aarch64_sqrtv4sf (a);
+}
+
+__extension__ extern __inline float64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqrt_f64 (float64x1_t a)
+{
+  return (float64x1_t) { __builtin_aarch64_sqrtdf (a[0]) };
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqrtq_f64 (float64x2_t a)
+{
+  return __builtin_aarch64_sqrtv2df (a);
+}
+
+/* vsra */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsra_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
+{
+  return (int8x8_t) __builtin_aarch64_ssra_nv8qi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsra_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+{
+  return (int16x4_t) __builtin_aarch64_ssra_nv4hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsra_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+{
+  return (int32x2_t) __builtin_aarch64_ssra_nv2si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsra_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
+{
+  return (int64x1_t) {__builtin_aarch64_ssra_ndi (__a[0], __b[0], __c)};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsra_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
+{
+  return __builtin_aarch64_usra_nv8qi_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsra_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
+{
+  return __builtin_aarch64_usra_nv4hi_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsra_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
+{
+  return __builtin_aarch64_usra_nv2si_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsra_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
+{
+  return (uint64x1_t) {__builtin_aarch64_usra_ndi_uuus (__a[0], __b[0], __c)};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsraq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
+{
+  return (int8x16_t) __builtin_aarch64_ssra_nv16qi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsraq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
+{
+  return (int16x8_t) __builtin_aarch64_ssra_nv8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsraq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
+{
+  return (int32x4_t) __builtin_aarch64_ssra_nv4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsraq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
+{
+  return (int64x2_t) __builtin_aarch64_ssra_nv2di (__a, __b, __c);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsraq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
+{
+  return __builtin_aarch64_usra_nv16qi_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsraq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
+{
+  return __builtin_aarch64_usra_nv8hi_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsraq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
+{
+  return __builtin_aarch64_usra_nv4si_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsraq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
+{
+  return __builtin_aarch64_usra_nv2di_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsrad_n_s64 (int64_t __a, int64_t __b, const int __c)
+{
+  return __builtin_aarch64_ssra_ndi (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsrad_n_u64 (uint64_t __a, uint64_t __b, const int __c)
+{
+  return __builtin_aarch64_usra_ndi_uuus (__a, __b, __c);
+}
+
+/* vsri */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsri_n_s8 (int8x8_t __a, int8x8_t __b, const int __c)
+{
+  return (int8x8_t) __builtin_aarch64_ssri_nv8qi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsri_n_s16 (int16x4_t __a, int16x4_t __b, const int __c)
+{
+  return (int16x4_t) __builtin_aarch64_ssri_nv4hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsri_n_s32 (int32x2_t __a, int32x2_t __b, const int __c)
+{
+  return (int32x2_t) __builtin_aarch64_ssri_nv2si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsri_n_s64 (int64x1_t __a, int64x1_t __b, const int __c)
+{
+  return (int64x1_t) {__builtin_aarch64_ssri_ndi (__a[0], __b[0], __c)};
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsri_n_u8 (uint8x8_t __a, uint8x8_t __b, const int __c)
+{
+  return __builtin_aarch64_usri_nv8qi_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsri_n_u16 (uint16x4_t __a, uint16x4_t __b, const int __c)
+{
+  return __builtin_aarch64_usri_nv4hi_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsri_n_u32 (uint32x2_t __a, uint32x2_t __b, const int __c)
+{
+  return __builtin_aarch64_usri_nv2si_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsri_n_u64 (uint64x1_t __a, uint64x1_t __b, const int __c)
+{
+  return (uint64x1_t) {__builtin_aarch64_usri_ndi_uuus (__a[0], __b[0], __c)};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsriq_n_s8 (int8x16_t __a, int8x16_t __b, const int __c)
+{
+  return (int8x16_t) __builtin_aarch64_ssri_nv16qi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsriq_n_s16 (int16x8_t __a, int16x8_t __b, const int __c)
+{
+  return (int16x8_t) __builtin_aarch64_ssri_nv8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsriq_n_s32 (int32x4_t __a, int32x4_t __b, const int __c)
+{
+  return (int32x4_t) __builtin_aarch64_ssri_nv4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsriq_n_s64 (int64x2_t __a, int64x2_t __b, const int __c)
+{
+  return (int64x2_t) __builtin_aarch64_ssri_nv2di (__a, __b, __c);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsriq_n_u8 (uint8x16_t __a, uint8x16_t __b, const int __c)
+{
+  return __builtin_aarch64_usri_nv16qi_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsriq_n_u16 (uint16x8_t __a, uint16x8_t __b, const int __c)
+{
+  return __builtin_aarch64_usri_nv8hi_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsriq_n_u32 (uint32x4_t __a, uint32x4_t __b, const int __c)
+{
+  return __builtin_aarch64_usri_nv4si_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsriq_n_u64 (uint64x2_t __a, uint64x2_t __b, const int __c)
+{
+  return __builtin_aarch64_usri_nv2di_uuus (__a, __b, __c);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsrid_n_s64 (int64_t __a, int64_t __b, const int __c)
+{
+  return __builtin_aarch64_ssri_ndi (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsrid_n_u64 (uint64_t __a, uint64_t __b, const int __c)
+{
+  return __builtin_aarch64_usri_ndi_uuus (__a, __b, __c);
+}
+
+/* vst1 */
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_f16 (float16_t *__a, float16x4_t __b)
+{
+  __builtin_aarch64_st1v4hf (__a, __b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_f32 (float32_t *a, float32x2_t b)
+{
+  __builtin_aarch64_st1v2sf ((__builtin_aarch64_simd_sf *) a, b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_f64 (float64_t *a, float64x1_t b)
+{
+  *a = b[0];
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_p8 (poly8_t *a, poly8x8_t b)
+{
+  __builtin_aarch64_st1v8qi ((__builtin_aarch64_simd_qi *) a,
+			     (int8x8_t) b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_p16 (poly16_t *a, poly16x4_t b)
+{
+  __builtin_aarch64_st1v4hi ((__builtin_aarch64_simd_hi *) a,
+			     (int16x4_t) b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_p64 (poly64_t *a, poly64x1_t b)
+{
+  *a = b[0];
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_s8 (int8_t *a, int8x8_t b)
+{
+  __builtin_aarch64_st1v8qi ((__builtin_aarch64_simd_qi *) a, b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_s16 (int16_t *a, int16x4_t b)
+{
+  __builtin_aarch64_st1v4hi ((__builtin_aarch64_simd_hi *) a, b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_s32 (int32_t *a, int32x2_t b)
+{
+  __builtin_aarch64_st1v2si ((__builtin_aarch64_simd_si *) a, b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_s64 (int64_t *a, int64x1_t b)
+{
+  *a = b[0];
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_u8 (uint8_t *a, uint8x8_t b)
+{
+  __builtin_aarch64_st1v8qi ((__builtin_aarch64_simd_qi *) a,
+			     (int8x8_t) b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_u16 (uint16_t *a, uint16x4_t b)
+{
+  __builtin_aarch64_st1v4hi ((__builtin_aarch64_simd_hi *) a,
+			     (int16x4_t) b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_u32 (uint32_t *a, uint32x2_t b)
+{
+  __builtin_aarch64_st1v2si ((__builtin_aarch64_simd_si *) a,
+			     (int32x2_t) b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_u64 (uint64_t *a, uint64x1_t b)
+{
+  *a = b[0];
+}
+
+/* vst1q */
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_f16 (float16_t *__a, float16x8_t __b)
+{
+  __builtin_aarch64_st1v8hf (__a, __b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_f32 (float32_t *a, float32x4_t b)
+{
+  __builtin_aarch64_st1v4sf ((__builtin_aarch64_simd_sf *) a, b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_f64 (float64_t *a, float64x2_t b)
+{
+  __builtin_aarch64_st1v2df ((__builtin_aarch64_simd_df *) a, b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_p8 (poly8_t *a, poly8x16_t b)
+{
+  __builtin_aarch64_st1v16qi ((__builtin_aarch64_simd_qi *) a,
+			      (int8x16_t) b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_p16 (poly16_t *a, poly16x8_t b)
+{
+  __builtin_aarch64_st1v8hi ((__builtin_aarch64_simd_hi *) a,
+			     (int16x8_t) b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_p64 (poly64_t *a, poly64x2_t b)
+{
+  __builtin_aarch64_st1v2di_sp ((__builtin_aarch64_simd_di *) a,
+				(poly64x2_t) b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_s8 (int8_t *a, int8x16_t b)
+{
+  __builtin_aarch64_st1v16qi ((__builtin_aarch64_simd_qi *) a, b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_s16 (int16_t *a, int16x8_t b)
+{
+  __builtin_aarch64_st1v8hi ((__builtin_aarch64_simd_hi *) a, b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_s32 (int32_t *a, int32x4_t b)
+{
+  __builtin_aarch64_st1v4si ((__builtin_aarch64_simd_si *) a, b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_s64 (int64_t *a, int64x2_t b)
+{
+  __builtin_aarch64_st1v2di ((__builtin_aarch64_simd_di *) a, b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_u8 (uint8_t *a, uint8x16_t b)
+{
+  __builtin_aarch64_st1v16qi ((__builtin_aarch64_simd_qi *) a,
+			      (int8x16_t) b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_u16 (uint16_t *a, uint16x8_t b)
+{
+  __builtin_aarch64_st1v8hi ((__builtin_aarch64_simd_hi *) a,
+			     (int16x8_t) b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_u32 (uint32_t *a, uint32x4_t b)
+{
+  __builtin_aarch64_st1v4si ((__builtin_aarch64_simd_si *) a,
+			     (int32x4_t) b);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_u64 (uint64_t *a, uint64x2_t b)
+{
+  __builtin_aarch64_st1v2di ((__builtin_aarch64_simd_di *) a,
+			     (int64x2_t) b);
+}
+
+/* vst1_lane */
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_lane_f16 (float16_t *__a, float16x4_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_lane_f32 (float32_t *__a, float32x2_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_lane_f64 (float64_t *__a, float64x1_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_lane_p8 (poly8_t *__a, poly8x8_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_lane_p16 (poly16_t *__a, poly16x4_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_lane_p64 (poly64_t *__a, poly64x1_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_lane_s8 (int8_t *__a, int8x8_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_lane_s16 (int16_t *__a, int16x4_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_lane_s32 (int32_t *__a, int32x2_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_lane_s64 (int64_t *__a, int64x1_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_lane_u8 (uint8_t *__a, uint8x8_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_lane_u16 (uint16_t *__a, uint16x4_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_lane_u32 (uint32_t *__a, uint32x2_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_lane_u64 (uint64_t *__a, uint64x1_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+/* vst1q_lane */
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_lane_f16 (float16_t *__a, float16x8_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_lane_f32 (float32_t *__a, float32x4_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_lane_f64 (float64_t *__a, float64x2_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_lane_p8 (poly8_t *__a, poly8x16_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_lane_p16 (poly16_t *__a, poly16x8_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_lane_p64 (poly64_t *__a, poly64x2_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_lane_s8 (int8_t *__a, int8x16_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_lane_s16 (int16_t *__a, int16x8_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_lane_s32 (int32_t *__a, int32x4_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_lane_s64 (int64_t *__a, int64x2_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_lane_u8 (uint8_t *__a, uint8x16_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_lane_u16 (uint16_t *__a, uint16x8_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_lane_u32 (uint32_t *__a, uint32x4_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_lane_u64 (uint64_t *__a, uint64x2_t __b, const int __lane)
+{
+  *__a = __aarch64_vget_lane_any (__b, __lane);
+}
+
+/* vst1x2 */
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_s64_x2 (int64_t * __a, int64x1x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  int64x2x2_t temp;
+  temp.val[0] = vcombine_s64 (val.val[0], vcreate_s64 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s64 (val.val[1], vcreate_s64 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[1], 1);
+  __builtin_aarch64_st1x2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_u64_x2 (uint64_t * __a, uint64x1x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  uint64x2x2_t temp;
+  temp.val[0] = vcombine_u64 (val.val[0], vcreate_u64 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u64 (val.val[1], vcreate_u64 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[1], 1);
+  __builtin_aarch64_st1x2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_f64_x2 (float64_t * __a, float64x1x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  float64x2x2_t temp;
+  temp.val[0] = vcombine_f64 (val.val[0], vcreate_f64 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_f64 (val.val[1], vcreate_f64 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) temp.val[1], 1);
+  __builtin_aarch64_st1x2df ((__builtin_aarch64_simd_df *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_s8_x2 (int8_t * __a, int8x8x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  int8x16x2_t temp;
+  temp.val[0] = vcombine_s8 (val.val[0], vcreate_s8 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s8 (val.val[1], vcreate_s8 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[1], 1);
+  __builtin_aarch64_st1x2v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_p8_x2 (poly8_t * __a, poly8x8x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  poly8x16x2_t temp;
+  temp.val[0] = vcombine_p8 (val.val[0], vcreate_p8 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_p8 (val.val[1], vcreate_p8 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[1], 1);
+  __builtin_aarch64_st1x2v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_s16_x2 (int16_t * __a, int16x4x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  int16x8x2_t temp;
+  temp.val[0] = vcombine_s16 (val.val[0], vcreate_s16 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s16 (val.val[1], vcreate_s16 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[1], 1);
+  __builtin_aarch64_st1x2v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_p16_x2 (poly16_t * __a, poly16x4x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  poly16x8x2_t temp;
+  temp.val[0] = vcombine_p16 (val.val[0], vcreate_p16 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_p16 (val.val[1], vcreate_p16 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[1], 1);
+  __builtin_aarch64_st1x2v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_s32_x2 (int32_t * __a, int32x2x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  int32x4x2_t temp;
+  temp.val[0] = vcombine_s32 (val.val[0], vcreate_s32 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s32 (val.val[1], vcreate_s32 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[1], 1);
+  __builtin_aarch64_st1x2v2si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_u8_x2 (uint8_t * __a, uint8x8x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  uint8x16x2_t temp;
+  temp.val[0] = vcombine_u8 (val.val[0], vcreate_u8 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u8 (val.val[1], vcreate_u8 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[1], 1);
+  __builtin_aarch64_st1x2v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_u16_x2 (uint16_t * __a, uint16x4x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  uint16x8x2_t temp;
+  temp.val[0] = vcombine_u16 (val.val[0], vcreate_u16 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u16 (val.val[1], vcreate_u16 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[1], 1);
+  __builtin_aarch64_st1x2v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_u32_x2 (uint32_t * __a, uint32x2x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  uint32x4x2_t temp;
+  temp.val[0] = vcombine_u32 (val.val[0], vcreate_u32 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u32 (val.val[1], vcreate_u32 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[1], 1);
+  __builtin_aarch64_st1x2v2si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_f16_x2 (float16_t * __a, float16x4x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  float16x8x2_t temp;
+  temp.val[0] = vcombine_f16 (val.val[0], vcreate_f16 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_f16 (val.val[1], vcreate_f16 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv8hf (__o, temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv8hf (__o, temp.val[1], 1);
+  __builtin_aarch64_st1x2v4hf (__a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_f32_x2 (float32_t * __a, float32x2x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  float32x4x2_t temp;
+  temp.val[0] = vcombine_f32 (val.val[0], vcreate_f32 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_f32 (val.val[1], vcreate_f32 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) temp.val[1], 1);
+  __builtin_aarch64_st1x2v2sf ((__builtin_aarch64_simd_sf *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_p64_x2 (poly64_t * __a, poly64x1x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  poly64x2x2_t temp;
+  temp.val[0] = vcombine_p64 (val.val[0], vcreate_p64 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_p64 (val.val[1], vcreate_p64 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv2di_ssps (__o,
+					       (poly64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv2di_ssps (__o,
+					       (poly64x2_t) temp.val[1], 1);
+  __builtin_aarch64_st1x2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_s8_x2 (int8_t * __a, int8x16x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[1], 1);
+  __builtin_aarch64_st1x2v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_p8_x2 (poly8_t * __a, poly8x16x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[1], 1);
+  __builtin_aarch64_st1x2v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_s16_x2 (int16_t * __a, int16x8x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[1], 1);
+  __builtin_aarch64_st1x2v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_p16_x2 (poly16_t * __a, poly16x8x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[1], 1);
+  __builtin_aarch64_st1x2v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_s32_x2 (int32_t * __a, int32x4x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[1], 1);
+  __builtin_aarch64_st1x2v4si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_s64_x2 (int64_t * __a, int64x2x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[1], 1);
+  __builtin_aarch64_st1x2v2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_u8_x2 (uint8_t * __a, uint8x16x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[1], 1);
+  __builtin_aarch64_st1x2v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_u16_x2 (uint16_t * __a, uint16x8x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[1], 1);
+  __builtin_aarch64_st1x2v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_u32_x2 (uint32_t * __a, uint32x4x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[1], 1);
+  __builtin_aarch64_st1x2v4si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_u64_x2 (uint64_t * __a, uint64x2x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[1], 1);
+  __builtin_aarch64_st1x2v2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_f16_x2 (float16_t * __a, float16x8x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv8hf (__o, val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv8hf (__o, val.val[1], 1);
+  __builtin_aarch64_st1x2v8hf (__a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_f32_x2 (float32_t * __a, float32x4x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) val.val[1], 1);
+  __builtin_aarch64_st1x2v4sf ((__builtin_aarch64_simd_sf *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_f64_x2 (float64_t * __a, float64x2x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) val.val[1], 1);
+  __builtin_aarch64_st1x2v2df ((__builtin_aarch64_simd_df *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_p64_x2 (poly64_t * __a, poly64x2x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv2di_ssps (__o,
+					       (poly64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv2di_ssps (__o,
+					       (poly64x2_t) val.val[1], 1);
+  __builtin_aarch64_st1x2v2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+/* vst1x3 */
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_s64_x3 (int64_t * __a, int64x1x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  int64x2x3_t temp;
+  temp.val[0] = vcombine_s64 (val.val[0], vcreate_s64 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s64 (val.val[1], vcreate_s64 (__AARCH64_INT64_C (0)));
+  temp.val[2] = vcombine_s64 (val.val[2], vcreate_s64 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[2], 2);
+  __builtin_aarch64_st1x3di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_u64_x3 (uint64_t * __a, uint64x1x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  uint64x2x3_t temp;
+  temp.val[0] = vcombine_u64 (val.val[0], vcreate_u64 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u64 (val.val[1], vcreate_u64 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_u64 (val.val[2], vcreate_u64 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[2], 2);
+  __builtin_aarch64_st1x3di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_f64_x3 (float64_t * __a, float64x1x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  float64x2x3_t temp;
+  temp.val[0] = vcombine_f64 (val.val[0], vcreate_f64 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_f64 (val.val[1], vcreate_f64 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_f64 (val.val[2], vcreate_f64 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) temp.val[2], 2);
+  __builtin_aarch64_st1x3df ((__builtin_aarch64_simd_df *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_s8_x3 (int8_t * __a, int8x8x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  int8x16x3_t temp;
+  temp.val[0] = vcombine_s8 (val.val[0], vcreate_s8 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s8 (val.val[1], vcreate_s8 (__AARCH64_INT64_C (0)));
+  temp.val[2] = vcombine_s8 (val.val[2], vcreate_s8 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[2], 2);
+  __builtin_aarch64_st1x3v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_p8_x3 (poly8_t * __a, poly8x8x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  poly8x16x3_t temp;
+  temp.val[0] = vcombine_p8 (val.val[0], vcreate_p8 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_p8 (val.val[1], vcreate_p8 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_p8 (val.val[2], vcreate_p8 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[2], 2);
+  __builtin_aarch64_st1x3v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_s16_x3 (int16_t * __a, int16x4x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  int16x8x3_t temp;
+  temp.val[0] = vcombine_s16 (val.val[0], vcreate_s16 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s16 (val.val[1], vcreate_s16 (__AARCH64_INT64_C (0)));
+  temp.val[2] = vcombine_s16 (val.val[2], vcreate_s16 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[2], 2);
+  __builtin_aarch64_st1x3v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_p16_x3 (poly16_t * __a, poly16x4x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  poly16x8x3_t temp;
+  temp.val[0] = vcombine_p16 (val.val[0], vcreate_p16 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_p16 (val.val[1], vcreate_p16 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_p16 (val.val[2], vcreate_p16 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[2], 2);
+  __builtin_aarch64_st1x3v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_s32_x3 (int32_t * __a, int32x2x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  int32x4x3_t temp;
+  temp.val[0] = vcombine_s32 (val.val[0], vcreate_s32 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s32 (val.val[1], vcreate_s32 (__AARCH64_INT64_C (0)));
+  temp.val[2] = vcombine_s32 (val.val[2], vcreate_s32 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[2], 2);
+  __builtin_aarch64_st1x3v2si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_u8_x3 (uint8_t * __a, uint8x8x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  uint8x16x3_t temp;
+  temp.val[0] = vcombine_u8 (val.val[0], vcreate_u8 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u8 (val.val[1], vcreate_u8 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_u8 (val.val[2], vcreate_u8 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[2], 2);
+  __builtin_aarch64_st1x3v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_u16_x3 (uint16_t * __a, uint16x4x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  uint16x8x3_t temp;
+  temp.val[0] = vcombine_u16 (val.val[0], vcreate_u16 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u16 (val.val[1], vcreate_u16 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_u16 (val.val[2], vcreate_u16 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[2], 2);
+  __builtin_aarch64_st1x3v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_u32_x3 (uint32_t * __a, uint32x2x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  uint32x4x3_t temp;
+  temp.val[0] = vcombine_u32 (val.val[0], vcreate_u32 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u32 (val.val[1], vcreate_u32 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_u32 (val.val[2], vcreate_u32 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[2], 2);
+  __builtin_aarch64_st1x3v2si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_f16_x3 (float16_t * __a, float16x4x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  float16x8x3_t temp;
+  temp.val[0] = vcombine_f16 (val.val[0], vcreate_f16 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_f16 (val.val[1], vcreate_f16 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_f16 (val.val[2], vcreate_f16 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) temp.val[2], 2);
+  __builtin_aarch64_st1x3v4hf ((__builtin_aarch64_simd_hf *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_f32_x3 (float32_t * __a, float32x2x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  float32x4x3_t temp;
+  temp.val[0] = vcombine_f32 (val.val[0], vcreate_f32 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_f32 (val.val[1], vcreate_f32 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_f32 (val.val[2], vcreate_f32 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) temp.val[2], 2);
+  __builtin_aarch64_st1x3v2sf ((__builtin_aarch64_simd_sf *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1_p64_x3 (poly64_t * __a, poly64x1x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  poly64x2x3_t temp;
+  temp.val[0] = vcombine_p64 (val.val[0], vcreate_p64 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_p64 (val.val[1], vcreate_p64 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_p64 (val.val[2], vcreate_p64 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
+					       (poly64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
+					       (poly64x2_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
+					       (poly64x2_t) temp.val[2], 2);
+  __builtin_aarch64_st1x3di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_s8_x3 (int8_t * __a, int8x16x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[2], 2);
+  __builtin_aarch64_st1x3v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_p8_x3 (poly8_t * __a, poly8x16x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[2], 2);
+  __builtin_aarch64_st1x3v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_s16_x3 (int16_t * __a, int16x8x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[2], 2);
+  __builtin_aarch64_st1x3v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_p16_x3 (poly16_t * __a, poly16x8x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[2], 2);
+  __builtin_aarch64_st1x3v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_s32_x3 (int32_t * __a, int32x4x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[2], 2);
+  __builtin_aarch64_st1x3v4si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_s64_x3 (int64_t * __a, int64x2x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[2], 2);
+  __builtin_aarch64_st1x3v2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_u8_x3 (uint8_t * __a, uint8x16x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[2], 2);
+  __builtin_aarch64_st1x3v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_u16_x3 (uint16_t * __a, uint16x8x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[2], 2);
+  __builtin_aarch64_st1x3v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_u32_x3 (uint32_t * __a, uint32x4x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[2], 2);
+  __builtin_aarch64_st1x3v4si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_u64_x3 (uint64_t * __a, uint64x2x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[2], 2);
+  __builtin_aarch64_st1x3v2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_f16_x3 (float16_t * __a, float16x8x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) val.val[2], 2);
+  __builtin_aarch64_st1x3v8hf ((__builtin_aarch64_simd_hf *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_f32_x3 (float32_t * __a, float32x4x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) val.val[2], 2);
+  __builtin_aarch64_st1x3v4sf ((__builtin_aarch64_simd_sf *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_f64_x3 (float64_t * __a, float64x2x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) val.val[2], 2);
+  __builtin_aarch64_st1x3v2df ((__builtin_aarch64_simd_df *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst1q_p64_x3 (poly64_t * __a, poly64x2x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
+					       (poly64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
+					       (poly64x2_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
+					       (poly64x2_t) val.val[2], 2);
+  __builtin_aarch64_st1x3v2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+/* vstn */
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2_s64 (int64_t * __a, int64x1x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  int64x2x2_t temp;
+  temp.val[0] = vcombine_s64 (val.val[0], vcreate_s64 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s64 (val.val[1], vcreate_s64 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[1], 1);
+  __builtin_aarch64_st2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2_u64 (uint64_t * __a, uint64x1x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  uint64x2x2_t temp;
+  temp.val[0] = vcombine_u64 (val.val[0], vcreate_u64 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u64 (val.val[1], vcreate_u64 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) temp.val[1], 1);
+  __builtin_aarch64_st2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2_f64 (float64_t * __a, float64x1x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  float64x2x2_t temp;
+  temp.val[0] = vcombine_f64 (val.val[0], vcreate_f64 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_f64 (val.val[1], vcreate_f64 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) temp.val[1], 1);
+  __builtin_aarch64_st2df ((__builtin_aarch64_simd_df *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2_s8 (int8_t * __a, int8x8x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  int8x16x2_t temp;
+  temp.val[0] = vcombine_s8 (val.val[0], vcreate_s8 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s8 (val.val[1], vcreate_s8 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[1], 1);
+  __builtin_aarch64_st2v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2_p8 (poly8_t * __a, poly8x8x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  poly8x16x2_t temp;
+  temp.val[0] = vcombine_p8 (val.val[0], vcreate_p8 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_p8 (val.val[1], vcreate_p8 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[1], 1);
+  __builtin_aarch64_st2v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2_s16 (int16_t * __a, int16x4x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  int16x8x2_t temp;
+  temp.val[0] = vcombine_s16 (val.val[0], vcreate_s16 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s16 (val.val[1], vcreate_s16 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[1], 1);
+  __builtin_aarch64_st2v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2_p16 (poly16_t * __a, poly16x4x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  poly16x8x2_t temp;
+  temp.val[0] = vcombine_p16 (val.val[0], vcreate_p16 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_p16 (val.val[1], vcreate_p16 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[1], 1);
+  __builtin_aarch64_st2v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2_s32 (int32_t * __a, int32x2x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  int32x4x2_t temp;
+  temp.val[0] = vcombine_s32 (val.val[0], vcreate_s32 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s32 (val.val[1], vcreate_s32 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[1], 1);
+  __builtin_aarch64_st2v2si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2_u8 (uint8_t * __a, uint8x8x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  uint8x16x2_t temp;
+  temp.val[0] = vcombine_u8 (val.val[0], vcreate_u8 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u8 (val.val[1], vcreate_u8 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) temp.val[1], 1);
+  __builtin_aarch64_st2v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2_u16 (uint16_t * __a, uint16x4x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  uint16x8x2_t temp;
+  temp.val[0] = vcombine_u16 (val.val[0], vcreate_u16 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u16 (val.val[1], vcreate_u16 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) temp.val[1], 1);
+  __builtin_aarch64_st2v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2_u32 (uint32_t * __a, uint32x2x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  uint32x4x2_t temp;
+  temp.val[0] = vcombine_u32 (val.val[0], vcreate_u32 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u32 (val.val[1], vcreate_u32 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) temp.val[1], 1);
+  __builtin_aarch64_st2v2si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2_f16 (float16_t * __a, float16x4x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  float16x8x2_t temp;
+  temp.val[0] = vcombine_f16 (val.val[0], vcreate_f16 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_f16 (val.val[1], vcreate_f16 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv8hf (__o, temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv8hf (__o, temp.val[1], 1);
+  __builtin_aarch64_st2v4hf (__a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2_f32 (float32_t * __a, float32x2x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  float32x4x2_t temp;
+  temp.val[0] = vcombine_f32 (val.val[0], vcreate_f32 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_f32 (val.val[1], vcreate_f32 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) temp.val[1], 1);
+  __builtin_aarch64_st2v2sf ((__builtin_aarch64_simd_sf *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2_p64 (poly64_t * __a, poly64x1x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  poly64x2x2_t temp;
+  temp.val[0] = vcombine_p64 (val.val[0], vcreate_p64 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_p64 (val.val[1], vcreate_p64 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregoiv2di_ssps (__o,
+					       (poly64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv2di_ssps (__o,
+					       (poly64x2_t) temp.val[1], 1);
+  __builtin_aarch64_st2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2q_s8 (int8_t * __a, int8x16x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[1], 1);
+  __builtin_aarch64_st2v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2q_p8 (poly8_t * __a, poly8x16x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[1], 1);
+  __builtin_aarch64_st2v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2q_s16 (int16_t * __a, int16x8x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[1], 1);
+  __builtin_aarch64_st2v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2q_p16 (poly16_t * __a, poly16x8x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[1], 1);
+  __builtin_aarch64_st2v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2q_s32 (int32_t * __a, int32x4x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[1], 1);
+  __builtin_aarch64_st2v4si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2q_s64 (int64_t * __a, int64x2x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[1], 1);
+  __builtin_aarch64_st2v2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2q_u8 (uint8_t * __a, uint8x16x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o, (int8x16_t) val.val[1], 1);
+  __builtin_aarch64_st2v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2q_u16 (uint16_t * __a, uint16x8x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv8hi (__o, (int16x8_t) val.val[1], 1);
+  __builtin_aarch64_st2v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2q_u32 (uint32_t * __a, uint32x4x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv4si (__o, (int32x4_t) val.val[1], 1);
+  __builtin_aarch64_st2v4si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2q_u64 (uint64_t * __a, uint64x2x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv2di (__o, (int64x2_t) val.val[1], 1);
+  __builtin_aarch64_st2v2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2q_f16 (float16_t * __a, float16x8x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv8hf (__o, val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv8hf (__o, val.val[1], 1);
+  __builtin_aarch64_st2v8hf (__a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2q_f32 (float32_t * __a, float32x4x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv4sf (__o, (float32x4_t) val.val[1], 1);
+  __builtin_aarch64_st2v4sf ((__builtin_aarch64_simd_sf *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2q_f64 (float64_t * __a, float64x2x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv2df (__o, (float64x2_t) val.val[1], 1);
+  __builtin_aarch64_st2v2df ((__builtin_aarch64_simd_df *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst2q_p64 (poly64_t * __a, poly64x2x2_t val)
+{
+  __builtin_aarch64_simd_oi __o;
+  __o = __builtin_aarch64_set_qregoiv2di_ssps (__o,
+					       (poly64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv2di_ssps (__o,
+					       (poly64x2_t) val.val[1], 1);
+  __builtin_aarch64_st2v2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3_s64 (int64_t * __a, int64x1x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  int64x2x3_t temp;
+  temp.val[0] = vcombine_s64 (val.val[0], vcreate_s64 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s64 (val.val[1], vcreate_s64 (__AARCH64_INT64_C (0)));
+  temp.val[2] = vcombine_s64 (val.val[2], vcreate_s64 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[2], 2);
+  __builtin_aarch64_st3di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3_u64 (uint64_t * __a, uint64x1x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  uint64x2x3_t temp;
+  temp.val[0] = vcombine_u64 (val.val[0], vcreate_u64 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u64 (val.val[1], vcreate_u64 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_u64 (val.val[2], vcreate_u64 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) temp.val[2], 2);
+  __builtin_aarch64_st3di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3_f64 (float64_t * __a, float64x1x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  float64x2x3_t temp;
+  temp.val[0] = vcombine_f64 (val.val[0], vcreate_f64 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_f64 (val.val[1], vcreate_f64 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_f64 (val.val[2], vcreate_f64 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) temp.val[2], 2);
+  __builtin_aarch64_st3df ((__builtin_aarch64_simd_df *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3_s8 (int8_t * __a, int8x8x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  int8x16x3_t temp;
+  temp.val[0] = vcombine_s8 (val.val[0], vcreate_s8 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s8 (val.val[1], vcreate_s8 (__AARCH64_INT64_C (0)));
+  temp.val[2] = vcombine_s8 (val.val[2], vcreate_s8 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[2], 2);
+  __builtin_aarch64_st3v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3_p8 (poly8_t * __a, poly8x8x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  poly8x16x3_t temp;
+  temp.val[0] = vcombine_p8 (val.val[0], vcreate_p8 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_p8 (val.val[1], vcreate_p8 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_p8 (val.val[2], vcreate_p8 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[2], 2);
+  __builtin_aarch64_st3v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3_s16 (int16_t * __a, int16x4x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  int16x8x3_t temp;
+  temp.val[0] = vcombine_s16 (val.val[0], vcreate_s16 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s16 (val.val[1], vcreate_s16 (__AARCH64_INT64_C (0)));
+  temp.val[2] = vcombine_s16 (val.val[2], vcreate_s16 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[2], 2);
+  __builtin_aarch64_st3v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3_p16 (poly16_t * __a, poly16x4x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  poly16x8x3_t temp;
+  temp.val[0] = vcombine_p16 (val.val[0], vcreate_p16 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_p16 (val.val[1], vcreate_p16 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_p16 (val.val[2], vcreate_p16 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[2], 2);
+  __builtin_aarch64_st3v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3_s32 (int32_t * __a, int32x2x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  int32x4x3_t temp;
+  temp.val[0] = vcombine_s32 (val.val[0], vcreate_s32 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s32 (val.val[1], vcreate_s32 (__AARCH64_INT64_C (0)));
+  temp.val[2] = vcombine_s32 (val.val[2], vcreate_s32 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[2], 2);
+  __builtin_aarch64_st3v2si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3_u8 (uint8_t * __a, uint8x8x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  uint8x16x3_t temp;
+  temp.val[0] = vcombine_u8 (val.val[0], vcreate_u8 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u8 (val.val[1], vcreate_u8 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_u8 (val.val[2], vcreate_u8 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) temp.val[2], 2);
+  __builtin_aarch64_st3v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3_u16 (uint16_t * __a, uint16x4x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  uint16x8x3_t temp;
+  temp.val[0] = vcombine_u16 (val.val[0], vcreate_u16 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u16 (val.val[1], vcreate_u16 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_u16 (val.val[2], vcreate_u16 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) temp.val[2], 2);
+  __builtin_aarch64_st3v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3_u32 (uint32_t * __a, uint32x2x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  uint32x4x3_t temp;
+  temp.val[0] = vcombine_u32 (val.val[0], vcreate_u32 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u32 (val.val[1], vcreate_u32 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_u32 (val.val[2], vcreate_u32 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) temp.val[2], 2);
+  __builtin_aarch64_st3v2si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3_f16 (float16_t * __a, float16x4x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  float16x8x3_t temp;
+  temp.val[0] = vcombine_f16 (val.val[0], vcreate_f16 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_f16 (val.val[1], vcreate_f16 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_f16 (val.val[2], vcreate_f16 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) temp.val[2], 2);
+  __builtin_aarch64_st3v4hf ((__builtin_aarch64_simd_hf *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3_f32 (float32_t * __a, float32x2x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  float32x4x3_t temp;
+  temp.val[0] = vcombine_f32 (val.val[0], vcreate_f32 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_f32 (val.val[1], vcreate_f32 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_f32 (val.val[2], vcreate_f32 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) temp.val[2], 2);
+  __builtin_aarch64_st3v2sf ((__builtin_aarch64_simd_sf *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3_p64 (poly64_t * __a, poly64x1x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  poly64x2x3_t temp;
+  temp.val[0] = vcombine_p64 (val.val[0], vcreate_p64 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_p64 (val.val[1], vcreate_p64 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_p64 (val.val[2], vcreate_p64 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
+					       (poly64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
+					       (poly64x2_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
+					       (poly64x2_t) temp.val[2], 2);
+  __builtin_aarch64_st3di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3q_s8 (int8_t * __a, int8x16x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[2], 2);
+  __builtin_aarch64_st3v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3q_p8 (poly8_t * __a, poly8x16x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[2], 2);
+  __builtin_aarch64_st3v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3q_s16 (int16_t * __a, int16x8x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[2], 2);
+  __builtin_aarch64_st3v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3q_p16 (poly16_t * __a, poly16x8x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[2], 2);
+  __builtin_aarch64_st3v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3q_s32 (int32_t * __a, int32x4x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[2], 2);
+  __builtin_aarch64_st3v4si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3q_s64 (int64_t * __a, int64x2x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[2], 2);
+  __builtin_aarch64_st3v2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3q_u8 (uint8_t * __a, uint8x16x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv16qi (__o, (int8x16_t) val.val[2], 2);
+  __builtin_aarch64_st3v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3q_u16 (uint16_t * __a, uint16x8x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv8hi (__o, (int16x8_t) val.val[2], 2);
+  __builtin_aarch64_st3v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3q_u32 (uint32_t * __a, uint32x4x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv4si (__o, (int32x4_t) val.val[2], 2);
+  __builtin_aarch64_st3v4si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3q_u64 (uint64_t * __a, uint64x2x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv2di (__o, (int64x2_t) val.val[2], 2);
+  __builtin_aarch64_st3v2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3q_f16 (float16_t * __a, float16x8x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv8hf (__o, (float16x8_t) val.val[2], 2);
+  __builtin_aarch64_st3v8hf ((__builtin_aarch64_simd_hf *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3q_f32 (float32_t * __a, float32x4x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv4sf (__o, (float32x4_t) val.val[2], 2);
+  __builtin_aarch64_st3v4sf ((__builtin_aarch64_simd_sf *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3q_f64 (float64_t * __a, float64x2x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv2df (__o, (float64x2_t) val.val[2], 2);
+  __builtin_aarch64_st3v2df ((__builtin_aarch64_simd_df *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst3q_p64 (poly64_t * __a, poly64x2x3_t val)
+{
+  __builtin_aarch64_simd_ci __o;
+  __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
+					       (poly64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
+					       (poly64x2_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregciv2di_ssps (__o,
+					       (poly64x2_t) val.val[2], 2);
+  __builtin_aarch64_st3v2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4_s64 (int64_t * __a, int64x1x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  int64x2x4_t temp;
+  temp.val[0] = vcombine_s64 (val.val[0], vcreate_s64 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s64 (val.val[1], vcreate_s64 (__AARCH64_INT64_C (0)));
+  temp.val[2] = vcombine_s64 (val.val[2], vcreate_s64 (__AARCH64_INT64_C (0)));
+  temp.val[3] = vcombine_s64 (val.val[3], vcreate_s64 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[3], 3);
+  __builtin_aarch64_st4di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4_u64 (uint64_t * __a, uint64x1x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  uint64x2x4_t temp;
+  temp.val[0] = vcombine_u64 (val.val[0], vcreate_u64 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u64 (val.val[1], vcreate_u64 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_u64 (val.val[2], vcreate_u64 (__AARCH64_UINT64_C (0)));
+  temp.val[3] = vcombine_u64 (val.val[3], vcreate_u64 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) temp.val[3], 3);
+  __builtin_aarch64_st4di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4_f64 (float64_t * __a, float64x1x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  float64x2x4_t temp;
+  temp.val[0] = vcombine_f64 (val.val[0], vcreate_f64 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_f64 (val.val[1], vcreate_f64 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_f64 (val.val[2], vcreate_f64 (__AARCH64_UINT64_C (0)));
+  temp.val[3] = vcombine_f64 (val.val[3], vcreate_f64 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) temp.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) temp.val[3], 3);
+  __builtin_aarch64_st4df ((__builtin_aarch64_simd_df *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4_s8 (int8_t * __a, int8x8x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  int8x16x4_t temp;
+  temp.val[0] = vcombine_s8 (val.val[0], vcreate_s8 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s8 (val.val[1], vcreate_s8 (__AARCH64_INT64_C (0)));
+  temp.val[2] = vcombine_s8 (val.val[2], vcreate_s8 (__AARCH64_INT64_C (0)));
+  temp.val[3] = vcombine_s8 (val.val[3], vcreate_s8 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[3], 3);
+  __builtin_aarch64_st4v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4_p8 (poly8_t * __a, poly8x8x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  poly8x16x4_t temp;
+  temp.val[0] = vcombine_p8 (val.val[0], vcreate_p8 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_p8 (val.val[1], vcreate_p8 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_p8 (val.val[2], vcreate_p8 (__AARCH64_UINT64_C (0)));
+  temp.val[3] = vcombine_p8 (val.val[3], vcreate_p8 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[3], 3);
+  __builtin_aarch64_st4v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4_s16 (int16_t * __a, int16x4x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  int16x8x4_t temp;
+  temp.val[0] = vcombine_s16 (val.val[0], vcreate_s16 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s16 (val.val[1], vcreate_s16 (__AARCH64_INT64_C (0)));
+  temp.val[2] = vcombine_s16 (val.val[2], vcreate_s16 (__AARCH64_INT64_C (0)));
+  temp.val[3] = vcombine_s16 (val.val[3], vcreate_s16 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[3], 3);
+  __builtin_aarch64_st4v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4_p16 (poly16_t * __a, poly16x4x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  poly16x8x4_t temp;
+  temp.val[0] = vcombine_p16 (val.val[0], vcreate_p16 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_p16 (val.val[1], vcreate_p16 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_p16 (val.val[2], vcreate_p16 (__AARCH64_UINT64_C (0)));
+  temp.val[3] = vcombine_p16 (val.val[3], vcreate_p16 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[3], 3);
+  __builtin_aarch64_st4v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4_s32 (int32_t * __a, int32x2x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  int32x4x4_t temp;
+  temp.val[0] = vcombine_s32 (val.val[0], vcreate_s32 (__AARCH64_INT64_C (0)));
+  temp.val[1] = vcombine_s32 (val.val[1], vcreate_s32 (__AARCH64_INT64_C (0)));
+  temp.val[2] = vcombine_s32 (val.val[2], vcreate_s32 (__AARCH64_INT64_C (0)));
+  temp.val[3] = vcombine_s32 (val.val[3], vcreate_s32 (__AARCH64_INT64_C (0)));
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[3], 3);
+  __builtin_aarch64_st4v2si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4_u8 (uint8_t * __a, uint8x8x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  uint8x16x4_t temp;
+  temp.val[0] = vcombine_u8 (val.val[0], vcreate_u8 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u8 (val.val[1], vcreate_u8 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_u8 (val.val[2], vcreate_u8 (__AARCH64_UINT64_C (0)));
+  temp.val[3] = vcombine_u8 (val.val[3], vcreate_u8 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) temp.val[3], 3);
+  __builtin_aarch64_st4v8qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4_u16 (uint16_t * __a, uint16x4x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  uint16x8x4_t temp;
+  temp.val[0] = vcombine_u16 (val.val[0], vcreate_u16 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u16 (val.val[1], vcreate_u16 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_u16 (val.val[2], vcreate_u16 (__AARCH64_UINT64_C (0)));
+  temp.val[3] = vcombine_u16 (val.val[3], vcreate_u16 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) temp.val[3], 3);
+  __builtin_aarch64_st4v4hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4_u32 (uint32_t * __a, uint32x2x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  uint32x4x4_t temp;
+  temp.val[0] = vcombine_u32 (val.val[0], vcreate_u32 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_u32 (val.val[1], vcreate_u32 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_u32 (val.val[2], vcreate_u32 (__AARCH64_UINT64_C (0)));
+  temp.val[3] = vcombine_u32 (val.val[3], vcreate_u32 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) temp.val[3], 3);
+  __builtin_aarch64_st4v2si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4_f16 (float16_t * __a, float16x4x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  float16x8x4_t temp;
+  temp.val[0] = vcombine_f16 (val.val[0], vcreate_f16 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_f16 (val.val[1], vcreate_f16 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_f16 (val.val[2], vcreate_f16 (__AARCH64_UINT64_C (0)));
+  temp.val[3] = vcombine_f16 (val.val[3], vcreate_f16 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) temp.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) temp.val[3], 3);
+  __builtin_aarch64_st4v4hf ((__builtin_aarch64_simd_hf *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4_f32 (float32_t * __a, float32x2x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  float32x4x4_t temp;
+  temp.val[0] = vcombine_f32 (val.val[0], vcreate_f32 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_f32 (val.val[1], vcreate_f32 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_f32 (val.val[2], vcreate_f32 (__AARCH64_UINT64_C (0)));
+  temp.val[3] = vcombine_f32 (val.val[3], vcreate_f32 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) temp.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) temp.val[3], 3);
+  __builtin_aarch64_st4v2sf ((__builtin_aarch64_simd_sf *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4_p64 (poly64_t * __a, poly64x1x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  poly64x2x4_t temp;
+  temp.val[0] = vcombine_p64 (val.val[0], vcreate_p64 (__AARCH64_UINT64_C (0)));
+  temp.val[1] = vcombine_p64 (val.val[1], vcreate_p64 (__AARCH64_UINT64_C (0)));
+  temp.val[2] = vcombine_p64 (val.val[2], vcreate_p64 (__AARCH64_UINT64_C (0)));
+  temp.val[3] = vcombine_p64 (val.val[3], vcreate_p64 (__AARCH64_UINT64_C (0)));
+  __o = __builtin_aarch64_set_qregxiv2di_ssps (__o,
+					       (poly64x2_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv2di_ssps (__o,
+					       (poly64x2_t) temp.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv2di_ssps (__o,
+					       (poly64x2_t) temp.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv2di_ssps (__o,
+					       (poly64x2_t) temp.val[3], 3);
+  __builtin_aarch64_st4di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4q_s8 (int8_t * __a, int8x16x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[3], 3);
+  __builtin_aarch64_st4v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4q_p8 (poly8_t * __a, poly8x16x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[3], 3);
+  __builtin_aarch64_st4v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4q_s16 (int16_t * __a, int16x8x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[3], 3);
+  __builtin_aarch64_st4v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4q_p16 (poly16_t * __a, poly16x8x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[3], 3);
+  __builtin_aarch64_st4v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4q_s32 (int32_t * __a, int32x4x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[3], 3);
+  __builtin_aarch64_st4v4si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4q_s64 (int64_t * __a, int64x2x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[3], 3);
+  __builtin_aarch64_st4v2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4q_u8 (uint8_t * __a, uint8x16x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv16qi (__o, (int8x16_t) val.val[3], 3);
+  __builtin_aarch64_st4v16qi ((__builtin_aarch64_simd_qi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4q_u16 (uint16_t * __a, uint16x8x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv8hi (__o, (int16x8_t) val.val[3], 3);
+  __builtin_aarch64_st4v8hi ((__builtin_aarch64_simd_hi *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4q_u32 (uint32_t * __a, uint32x4x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv4si (__o, (int32x4_t) val.val[3], 3);
+  __builtin_aarch64_st4v4si ((__builtin_aarch64_simd_si *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4q_u64 (uint64_t * __a, uint64x2x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv2di (__o, (int64x2_t) val.val[3], 3);
+  __builtin_aarch64_st4v2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4q_f16 (float16_t * __a, float16x8x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) val.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv8hf (__o, (float16x8_t) val.val[3], 3);
+  __builtin_aarch64_st4v8hf ((__builtin_aarch64_simd_hf *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4q_f32 (float32_t * __a, float32x4x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) val.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv4sf (__o, (float32x4_t) val.val[3], 3);
+  __builtin_aarch64_st4v4sf ((__builtin_aarch64_simd_sf *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4q_f64 (float64_t * __a, float64x2x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) val.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv2df (__o, (float64x2_t) val.val[3], 3);
+  __builtin_aarch64_st4v2df ((__builtin_aarch64_simd_df *) __a, __o);
+}
+
+__extension__ extern __inline void
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vst4q_p64 (poly64_t * __a, poly64x2x4_t val)
+{
+  __builtin_aarch64_simd_xi __o;
+  __o = __builtin_aarch64_set_qregxiv2di_ssps (__o,
+					       (poly64x2_t) val.val[0], 0);
+  __o = __builtin_aarch64_set_qregxiv2di_ssps (__o,
+					       (poly64x2_t) val.val[1], 1);
+  __o = __builtin_aarch64_set_qregxiv2di_ssps (__o,
+					       (poly64x2_t) val.val[2], 2);
+  __o = __builtin_aarch64_set_qregxiv2di_ssps (__o,
+					       (poly64x2_t) val.val[3], 3);
+  __builtin_aarch64_st4v2di ((__builtin_aarch64_simd_di *) __a, __o);
+}
+
+/* vsub */
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubd_s64 (int64_t __a, int64_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubd_u64 (uint64_t __a, uint64_t __b)
+{
+  return __a - __b;
+}
+
+/* vtbx1  */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbx1_s8 (int8x8_t __r, int8x8_t __tab, int8x8_t __idx)
+{
+  uint8x8_t __mask = vclt_u8 (vreinterpret_u8_s8 (__idx),
+			      vmov_n_u8 (8));
+  int8x8_t __tbl = vtbl1_s8 (__tab, __idx);
+
+  return vbsl_s8 (__mask, __tbl, __r);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbx1_u8 (uint8x8_t __r, uint8x8_t __tab, uint8x8_t __idx)
+{
+  uint8x8_t __mask = vclt_u8 (__idx, vmov_n_u8 (8));
+  uint8x8_t __tbl = vtbl1_u8 (__tab, __idx);
+
+  return vbsl_u8 (__mask, __tbl, __r);
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbx1_p8 (poly8x8_t __r, poly8x8_t __tab, uint8x8_t __idx)
+{
+  uint8x8_t __mask = vclt_u8 (__idx, vmov_n_u8 (8));
+  poly8x8_t __tbl = vtbl1_p8 (__tab, __idx);
+
+  return vbsl_p8 (__mask, __tbl, __r);
+}
+
+/* vtbx3  */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbx3_s8 (int8x8_t __r, int8x8x3_t __tab, int8x8_t __idx)
+{
+  uint8x8_t __mask = vclt_u8 (vreinterpret_u8_s8 (__idx),
+			      vmov_n_u8 (24));
+  int8x8_t __tbl = vtbl3_s8 (__tab, __idx);
+
+  return vbsl_s8 (__mask, __tbl, __r);
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbx3_u8 (uint8x8_t __r, uint8x8x3_t __tab, uint8x8_t __idx)
+{
+  uint8x8_t __mask = vclt_u8 (__idx, vmov_n_u8 (24));
+  uint8x8_t __tbl = vtbl3_u8 (__tab, __idx);
+
+  return vbsl_u8 (__mask, __tbl, __r);
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbx3_p8 (poly8x8_t __r, poly8x8x3_t __tab, uint8x8_t __idx)
+{
+  uint8x8_t __mask = vclt_u8 (__idx, vmov_n_u8 (24));
+  poly8x8_t __tbl = vtbl3_p8 (__tab, __idx);
+
+  return vbsl_p8 (__mask, __tbl, __r);
+}
+
+/* vtbx4  */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbx4_s8 (int8x8_t __r, int8x8x4_t __tab, int8x8_t __idx)
+{
+  int8x8_t result;
+  int8x16x2_t temp;
+  __builtin_aarch64_simd_oi __o;
+  temp.val[0] = vcombine_s8 (__tab.val[0], __tab.val[1]);
+  temp.val[1] = vcombine_s8 (__tab.val[2], __tab.val[3]);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[1], 1);
+  result = __builtin_aarch64_tbx4v8qi (__r, __o, __idx);
+  return result;
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbx4_u8 (uint8x8_t __r, uint8x8x4_t __tab, uint8x8_t __idx)
+{
+  uint8x8_t result;
+  uint8x16x2_t temp;
+  __builtin_aarch64_simd_oi __o;
+  temp.val[0] = vcombine_u8 (__tab.val[0], __tab.val[1]);
+  temp.val[1] = vcombine_u8 (__tab.val[2], __tab.val[3]);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[1], 1);
+  result = (uint8x8_t)__builtin_aarch64_tbx4v8qi ((int8x8_t)__r, __o,
+						  (int8x8_t)__idx);
+  return result;
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtbx4_p8 (poly8x8_t __r, poly8x8x4_t __tab, uint8x8_t __idx)
+{
+  poly8x8_t result;
+  poly8x16x2_t temp;
+  __builtin_aarch64_simd_oi __o;
+  temp.val[0] = vcombine_p8 (__tab.val[0], __tab.val[1]);
+  temp.val[1] = vcombine_p8 (__tab.val[2], __tab.val[3]);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[0], 0);
+  __o = __builtin_aarch64_set_qregoiv16qi (__o,
+					   (int8x16_t) temp.val[1], 1);
+  result = (poly8x8_t)__builtin_aarch64_tbx4v8qi ((int8x8_t)__r, __o,
+						  (int8x8_t)__idx);
+  return result;
+}
+
+/* vtrn */
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1_f16 (float16x4_t __a, float16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
+#endif
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1_f32 (float32x2_t __a, float32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1_p8 (poly8x8_t __a, poly8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
+#endif
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1_p16 (poly16x4_t __a, poly16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
+#endif
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1_s8 (int8x8_t __a, int8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
+#endif
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1_s16 (int16x4_t __a, int16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
+#endif
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1_s32 (int32x2_t __a, int32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
+#endif
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 1, 7, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 2, 6});
+#endif
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1q_f16 (float16x8_t __a, float16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
+#endif
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1q_f32 (float32x4_t __a, float32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 1, 7, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 2, 6});
+#endif
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1q_f64 (float64x2_t __a, float64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1q_p8 (poly8x16_t __a, poly8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15});
+#else
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30});
+#endif
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1q_p16 (poly16x8_t __a, poly16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
+#endif
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1q_s8 (int8x16_t __a, int8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15});
+#else
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30});
+#endif
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1q_s16 (int16x8_t __a, int16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
+#endif
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1q_s32 (int32x4_t __a, int32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 1, 7, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 2, 6});
+#endif
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1q_s64 (int64x2_t __a, int64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1q_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15});
+#else
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30});
+#endif
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1q_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 1, 11, 3, 13, 5, 15, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 2, 10, 4, 12, 6, 14});
+#endif
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1q_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 1, 7, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 2, 6});
+#endif
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn1q_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2_f16 (float16x4_t __a, float16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
+#endif
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2_f32 (float32x2_t __a, float32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+#endif
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2_p8 (poly8x8_t __a, poly8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
+#endif
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2_p16 (poly16x4_t __a, poly16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
+#endif
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2_s8 (int8x8_t __a, int8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
+#endif
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2_s16 (int16x4_t __a, int16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
+#endif
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2_s32 (int32x2_t __a, int32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+#endif
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
+#endif
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 6, 2});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 5, 3, 7});
+#endif
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+#endif
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2q_f16 (float16x8_t __a, float16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
+#endif
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2q_f32 (float32x4_t __a, float32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 6, 2});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 5, 3, 7});
+#endif
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2q_f64 (float64x2_t __a, float64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+#endif
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2q_p8 (poly8x16_t __a, poly8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14});
+#else
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31});
+#endif
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2q_p16 (poly16x8_t __a, poly16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
+#endif
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2q_s8 (int8x16_t __a, int8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14});
+#else
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31});
+#endif
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2q_s16 (int16x8_t __a, int16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
+#endif
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2q_s32 (int32x4_t __a, int32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 6, 2});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 5, 3, 7});
+#endif
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2q_s64 (int64x2_t __a, int64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+#endif
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2q_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14});
+#else
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31});
+#endif
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2q_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 10, 2, 12, 4, 14, 6});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 9, 3, 11, 5, 13, 7, 15});
+#endif
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2q_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 6, 2});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 5, 3, 7});
+#endif
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn2q_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+#endif
+}
+
+__extension__ extern __inline float16x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return (float16x4x2_t) {vtrn1_f16 (__a, __b), vtrn2_f16 (__a, __b)};
+}
+
+__extension__ extern __inline float32x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn_f32 (float32x2_t a, float32x2_t b)
+{
+  return (float32x2x2_t) {vtrn1_f32 (a, b), vtrn2_f32 (a, b)};
+}
+
+__extension__ extern __inline poly8x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn_p8 (poly8x8_t a, poly8x8_t b)
+{
+  return (poly8x8x2_t) {vtrn1_p8 (a, b), vtrn2_p8 (a, b)};
+}
+
+__extension__ extern __inline poly16x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn_p16 (poly16x4_t a, poly16x4_t b)
+{
+  return (poly16x4x2_t) {vtrn1_p16 (a, b), vtrn2_p16 (a, b)};
+}
+
+__extension__ extern __inline int8x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn_s8 (int8x8_t a, int8x8_t b)
+{
+  return (int8x8x2_t) {vtrn1_s8 (a, b), vtrn2_s8 (a, b)};
+}
+
+__extension__ extern __inline int16x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn_s16 (int16x4_t a, int16x4_t b)
+{
+  return (int16x4x2_t) {vtrn1_s16 (a, b), vtrn2_s16 (a, b)};
+}
+
+__extension__ extern __inline int32x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn_s32 (int32x2_t a, int32x2_t b)
+{
+  return (int32x2x2_t) {vtrn1_s32 (a, b), vtrn2_s32 (a, b)};
+}
+
+__extension__ extern __inline uint8x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn_u8 (uint8x8_t a, uint8x8_t b)
+{
+  return (uint8x8x2_t) {vtrn1_u8 (a, b), vtrn2_u8 (a, b)};
+}
+
+__extension__ extern __inline uint16x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn_u16 (uint16x4_t a, uint16x4_t b)
+{
+  return (uint16x4x2_t) {vtrn1_u16 (a, b), vtrn2_u16 (a, b)};
+}
+
+__extension__ extern __inline uint32x2x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrn_u32 (uint32x2_t a, uint32x2_t b)
+{
+  return (uint32x2x2_t) {vtrn1_u32 (a, b), vtrn2_u32 (a, b)};
+}
+
+__extension__ extern __inline float16x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrnq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return (float16x8x2_t) {vtrn1q_f16 (__a, __b), vtrn2q_f16 (__a, __b)};
+}
+
+__extension__ extern __inline float32x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrnq_f32 (float32x4_t a, float32x4_t b)
+{
+  return (float32x4x2_t) {vtrn1q_f32 (a, b), vtrn2q_f32 (a, b)};
+}
+
+__extension__ extern __inline poly8x16x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrnq_p8 (poly8x16_t a, poly8x16_t b)
+{
+  return (poly8x16x2_t) {vtrn1q_p8 (a, b), vtrn2q_p8 (a, b)};
+}
+
+__extension__ extern __inline poly16x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrnq_p16 (poly16x8_t a, poly16x8_t b)
+{
+  return (poly16x8x2_t) {vtrn1q_p16 (a, b), vtrn2q_p16 (a, b)};
+}
+
+__extension__ extern __inline int8x16x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrnq_s8 (int8x16_t a, int8x16_t b)
+{
+  return (int8x16x2_t) {vtrn1q_s8 (a, b), vtrn2q_s8 (a, b)};
+}
+
+__extension__ extern __inline int16x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrnq_s16 (int16x8_t a, int16x8_t b)
+{
+  return (int16x8x2_t) {vtrn1q_s16 (a, b), vtrn2q_s16 (a, b)};
+}
+
+__extension__ extern __inline int32x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrnq_s32 (int32x4_t a, int32x4_t b)
+{
+  return (int32x4x2_t) {vtrn1q_s32 (a, b), vtrn2q_s32 (a, b)};
+}
+
+__extension__ extern __inline uint8x16x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrnq_u8 (uint8x16_t a, uint8x16_t b)
+{
+  return (uint8x16x2_t) {vtrn1q_u8 (a, b), vtrn2q_u8 (a, b)};
+}
+
+__extension__ extern __inline uint16x8x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrnq_u16 (uint16x8_t a, uint16x8_t b)
+{
+  return (uint16x8x2_t) {vtrn1q_u16 (a, b), vtrn2q_u16 (a, b)};
+}
+
+__extension__ extern __inline uint32x4x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtrnq_u32 (uint32x4_t a, uint32x4_t b)
+{
+  return (uint32x4x2_t) {vtrn1q_u32 (a, b), vtrn2q_u32 (a, b)};
+}
+
+/* vtst */
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtst_s8 (int8x8_t __a, int8x8_t __b)
+{
+  return (uint8x8_t) ((__a & __b) != 0);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtst_s16 (int16x4_t __a, int16x4_t __b)
+{
+  return (uint16x4_t) ((__a & __b) != 0);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtst_s32 (int32x2_t __a, int32x2_t __b)
+{
+  return (uint32x2_t) ((__a & __b) != 0);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtst_s64 (int64x1_t __a, int64x1_t __b)
+{
+  return (uint64x1_t) ((__a & __b) != __AARCH64_INT64_C (0));
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtst_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+  return ((__a & __b) != 0);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtst_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+  return ((__a & __b) != 0);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtst_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+  return ((__a & __b) != 0);
+}
+
+__extension__ extern __inline uint64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtst_u64 (uint64x1_t __a, uint64x1_t __b)
+{
+  return ((__a & __b) != __AARCH64_UINT64_C (0));
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtstq_s8 (int8x16_t __a, int8x16_t __b)
+{
+  return (uint8x16_t) ((__a & __b) != 0);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtstq_s16 (int16x8_t __a, int16x8_t __b)
+{
+  return (uint16x8_t) ((__a & __b) != 0);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtstq_s32 (int32x4_t __a, int32x4_t __b)
+{
+  return (uint32x4_t) ((__a & __b) != 0);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtstq_s64 (int64x2_t __a, int64x2_t __b)
+{
+  return (uint64x2_t) ((__a & __b) != __AARCH64_INT64_C (0));
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtstq_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+  return ((__a & __b) != 0);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtstq_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+  return ((__a & __b) != 0);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtstq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return ((__a & __b) != 0);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtstq_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return ((__a & __b) != __AARCH64_UINT64_C (0));
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtstd_s64 (int64_t __a, int64_t __b)
+{
+  return (__a & __b) ? -1ll : 0ll;
+}
+
+__extension__ extern __inline uint64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vtstd_u64 (uint64_t __a, uint64_t __b)
+{
+  return (__a & __b) ? -1ll : 0ll;
+}
+
+/* vuqadd */
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuqadd_s8 (int8x8_t __a, uint8x8_t __b)
+{
+  return __builtin_aarch64_suqaddv8qi_ssu (__a,  __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuqadd_s16 (int16x4_t __a, uint16x4_t __b)
+{
+  return __builtin_aarch64_suqaddv4hi_ssu (__a,  __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuqadd_s32 (int32x2_t __a, uint32x2_t __b)
+{
+  return __builtin_aarch64_suqaddv2si_ssu (__a,  __b);
+}
+
+__extension__ extern __inline int64x1_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuqadd_s64 (int64x1_t __a, uint64x1_t __b)
+{
+  return (int64x1_t) {__builtin_aarch64_suqadddi_ssu (__a[0], __b[0])};
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuqaddq_s8 (int8x16_t __a, uint8x16_t __b)
+{
+  return __builtin_aarch64_suqaddv16qi_ssu (__a,  __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuqaddq_s16 (int16x8_t __a, uint16x8_t __b)
+{
+  return __builtin_aarch64_suqaddv8hi_ssu (__a,  __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuqaddq_s32 (int32x4_t __a, uint32x4_t __b)
+{
+  return __builtin_aarch64_suqaddv4si_ssu (__a,  __b);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuqaddq_s64 (int64x2_t __a, uint64x2_t __b)
+{
+  return __builtin_aarch64_suqaddv2di_ssu (__a,  __b);
+}
+
+__extension__ extern __inline int8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuqaddb_s8 (int8_t __a, uint8_t __b)
+{
+  return __builtin_aarch64_suqaddqi_ssu (__a,  __b);
+}
+
+__extension__ extern __inline int16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuqaddh_s16 (int16_t __a, uint16_t __b)
+{
+  return __builtin_aarch64_suqaddhi_ssu (__a,  __b);
+}
+
+__extension__ extern __inline int32_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuqadds_s32 (int32_t __a, uint32_t __b)
+{
+  return __builtin_aarch64_suqaddsi_ssu (__a,  __b);
+}
+
+__extension__ extern __inline int64_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuqaddd_s64 (int64_t __a, uint64_t __b)
+{
+  return __builtin_aarch64_suqadddi_ssu (__a,  __b);
+}
+
+#define __DEFINTERLEAVE(op, rettype, intype, funcsuffix, Q) 		\
+  __extension__ extern __inline rettype					\
+  __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) \
+  v ## op ## Q ## _ ## funcsuffix (intype a, intype b)			\
+  {									\
+    return (rettype) {v ## op ## 1 ## Q ## _ ## funcsuffix (a, b),	\
+		      v ## op ## 2 ## Q ## _ ## funcsuffix (a, b)};	\
+  }
+
+#define __INTERLEAVE_LIST(op)					\
+  __DEFINTERLEAVE (op, float16x4x2_t, float16x4_t, f16,)	\
+  __DEFINTERLEAVE (op, float32x2x2_t, float32x2_t, f32,)	\
+  __DEFINTERLEAVE (op, poly8x8x2_t, poly8x8_t, p8,)		\
+  __DEFINTERLEAVE (op, poly16x4x2_t, poly16x4_t, p16,)		\
+  __DEFINTERLEAVE (op, int8x8x2_t, int8x8_t, s8,)		\
+  __DEFINTERLEAVE (op, int16x4x2_t, int16x4_t, s16,)		\
+  __DEFINTERLEAVE (op, int32x2x2_t, int32x2_t, s32,)		\
+  __DEFINTERLEAVE (op, uint8x8x2_t, uint8x8_t, u8,)		\
+  __DEFINTERLEAVE (op, uint16x4x2_t, uint16x4_t, u16,)		\
+  __DEFINTERLEAVE (op, uint32x2x2_t, uint32x2_t, u32,)		\
+  __DEFINTERLEAVE (op, float16x8x2_t, float16x8_t, f16, q)	\
+  __DEFINTERLEAVE (op, float32x4x2_t, float32x4_t, f32, q)	\
+  __DEFINTERLEAVE (op, poly8x16x2_t, poly8x16_t, p8, q)		\
+  __DEFINTERLEAVE (op, poly16x8x2_t, poly16x8_t, p16, q)	\
+  __DEFINTERLEAVE (op, int8x16x2_t, int8x16_t, s8, q)		\
+  __DEFINTERLEAVE (op, int16x8x2_t, int16x8_t, s16, q)		\
+  __DEFINTERLEAVE (op, int32x4x2_t, int32x4_t, s32, q)		\
+  __DEFINTERLEAVE (op, uint8x16x2_t, uint8x16_t, u8, q)		\
+  __DEFINTERLEAVE (op, uint16x8x2_t, uint16x8_t, u16, q)	\
+  __DEFINTERLEAVE (op, uint32x4x2_t, uint32x4_t, u32, q)
+
+/* vuzp */
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1_f16 (float16x4_t __a, float16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
+#endif
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1_f32 (float32x2_t __a, float32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1_p8 (poly8x8_t __a, poly8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
+#endif
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1_p16 (poly16x4_t __a, poly16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
+#endif
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1_s8 (int8x8_t __a, int8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
+#endif
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1_s16 (int16x4_t __a, int16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
+#endif
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1_s32 (int32x2_t __a, int32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
+#endif
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {5, 7, 1, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 2, 4, 6});
+#endif
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1q_f16 (float16x8_t __a, float16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
+#endif
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1q_f32 (float32x4_t __a, float32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 7, 1, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 2, 4, 6});
+#endif
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1q_f64 (float64x2_t __a, float64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1q_p8 (poly8x16_t __a, poly8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30});
+#endif
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1q_p16 (poly16x8_t __a, poly16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
+#endif
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1q_s8 (int8x16_t __a, int8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15});
+#else
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30});
+#endif
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1q_s16 (int16x8_t __a, int16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
+#endif
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1q_s32 (int32x4_t __a, int32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 7, 1, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 2, 4, 6});
+#endif
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1q_s64 (int64x2_t __a, int64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1q_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15});
+#else
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30});
+#endif
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1q_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {9, 11, 13, 15, 1, 3, 5, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 2, 4, 6, 8, 10, 12, 14});
+#endif
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1q_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {5, 7, 1, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 2, 4, 6});
+#endif
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp1q_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2_f16 (float16x4_t __a, float16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
+#endif
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2_f32 (float32x2_t __a, float32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+#endif
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2_p8 (poly8x8_t __a, poly8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
+#endif
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2_p16 (poly16x4_t __a, poly16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
+#endif
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2_s8 (int8x8_t __a, int8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
+#endif
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2_s16 (int16x4_t __a, int16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
+#endif
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2_s32 (int32x2_t __a, int32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+#endif
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
+#endif
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 6, 0, 2});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {1, 3, 5, 7});
+#endif
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+#endif
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2q_f16 (float16x8_t __a, float16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
+#endif
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2q_f32 (float32x4_t __a, float32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 6, 0, 2});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 3, 5, 7});
+#endif
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2q_f64 (float64x2_t __a, float64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+#endif
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2q_p8 (poly8x16_t __a, poly8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14});
+#else
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31});
+#endif
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2q_p16 (poly16x8_t __a, poly16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
+#endif
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2q_s8 (int8x16_t __a, int8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14});
+#else
+  return __builtin_shuffle (__a, __b,
+      (uint8x16_t) {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31});
+#endif
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2q_s16 (int16x8_t __a, int16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
+#endif
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2q_s32 (int32x4_t __a, int32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 6, 0, 2});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 3, 5, 7});
+#endif
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2q_s64 (int64x2_t __a, int64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+#endif
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2q_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31});
+#endif
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2q_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 10, 12, 14, 0, 2, 4, 6});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {1, 3, 5, 7, 9, 11, 13, 15});
+#endif
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2q_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 6, 0, 2});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {1, 3, 5, 7});
+#endif
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vuzp2q_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+#endif
+}
+
+__INTERLEAVE_LIST (uzp)
+
+/* vzip */
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1_f16 (float16x4_t __a, float16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
+#endif
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1_f32 (float32x2_t __a, float32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1_p8 (poly8x8_t __a, poly8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
+#endif
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1_p16 (poly16x4_t __a, poly16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
+#endif
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1_s8 (int8x8_t __a, int8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
+#endif
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1_s16 (int16x4_t __a, int16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
+#endif
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1_s32 (int32x2_t __a, int32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
+#endif
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {6, 2, 7, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {0, 4, 1, 5});
+#endif
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1q_f16 (float16x8_t __a, float16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b,
+			    (uint16x8_t) {12, 4, 13, 5, 14, 6, 15, 7});
+#else
+  return __builtin_shuffle (__a, __b,
+			    (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
+#endif
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1q_f32 (float32x4_t __a, float32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {6, 2, 7, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 1, 5});
+#endif
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1q_f64 (float64x2_t __a, float64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1q_p8 (poly8x16_t __a, poly8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23});
+#endif
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1q_p16 (poly16x8_t __a, poly16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t)
+      {12, 4, 13, 5, 14, 6, 15, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
+#endif
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1q_s8 (int8x16_t __a, int8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23});
+#endif
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1q_s16 (int16x8_t __a, int16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t)
+      {12, 4, 13, 5, 14, 6, 15, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
+#endif
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1q_s32 (int32x4_t __a, int32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {6, 2, 7, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 1, 5});
+#endif
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1q_s64 (int64x2_t __a, int64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1q_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23});
+#endif
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1q_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t)
+      {12, 4, 13, 5, 14, 6, 15, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {0, 8, 1, 9, 2, 10, 3, 11});
+#endif
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1q_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {6, 2, 7, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {0, 4, 1, 5});
+#endif
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip1q_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {3, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {0, 2});
+#endif
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2_f16 (float16x4_t __a, float16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
+#endif
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2_f32 (float32x2_t __a, float32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+#endif
+}
+
+__extension__ extern __inline poly8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2_p8 (poly8x8_t __a, poly8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
+#endif
+}
+
+__extension__ extern __inline poly16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2_p16 (poly16x4_t __a, poly16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
+#endif
+}
+
+__extension__ extern __inline int8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2_s8 (int8x8_t __a, int8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
+#endif
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2_s16 (int16x4_t __a, int16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
+#endif
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2_s32 (int32x2_t __a, int32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+#endif
+}
+
+__extension__ extern __inline uint8x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2_u8 (uint8x8_t __a, uint8x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
+#endif
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2_u16 (uint16x4_t __a, uint16x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {4, 0, 5, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x4_t) {2, 6, 3, 7});
+#endif
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2_u32 (uint32x2_t __a, uint32x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x2_t) {1, 3});
+#endif
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2q_f16 (float16x8_t __a, float16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b,
+			    (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+#else
+  return __builtin_shuffle (__a, __b,
+			    (uint16x8_t) {4, 12, 5, 13, 6, 14, 7, 15});
+#endif
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2q_f32 (float32x4_t __a, float32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 5, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {2, 6, 3, 7});
+#endif
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2q_f64 (float64x2_t __a, float64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+#endif
+}
+
+__extension__ extern __inline poly8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2q_p8 (poly8x16_t __a, poly8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31});
+#endif
+}
+
+__extension__ extern __inline poly16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2q_p16 (poly16x8_t __a, poly16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t)
+      {4, 12, 5, 13, 6, 14, 7, 15});
+#endif
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2q_s8 (int8x16_t __a, int8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31});
+#endif
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2q_s16 (int16x8_t __a, int16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t)
+      {4, 12, 5, 13, 6, 14, 7, 15});
+#endif
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2q_s32 (int32x4_t __a, int32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 5, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {2, 6, 3, 7});
+#endif
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2q_s64 (int64x2_t __a, int64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+#endif
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2q_u8 (uint8x16_t __a, uint8x16_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7});
+#else
+  return __builtin_shuffle (__a, __b, (uint8x16_t)
+      {8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31});
+#endif
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2q_u16 (uint16x8_t __a, uint16x8_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint16x8_t) {8, 0, 9, 1, 10, 2, 11, 3});
+#else
+  return __builtin_shuffle (__a, __b, (uint16x8_t)
+      {4, 12, 5, 13, 6, 14, 7, 15});
+#endif
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2q_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {4, 0, 5, 1});
+#else
+  return __builtin_shuffle (__a, __b, (uint32x4_t) {2, 6, 3, 7});
+#endif
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vzip2q_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+#ifdef __AARCH64EB__
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {2, 0});
+#else
+  return __builtin_shuffle (__a, __b, (uint64x2_t) {1, 3});
+#endif
+}
+
+__INTERLEAVE_LIST (zip)
+
+#undef __INTERLEAVE_LIST
+#undef __DEFINTERLEAVE
+
+/* End of optimal implementations in approved order.  */
+
+#pragma GCC pop_options
+
+/* ARMv8.2-A FP16 intrinsics.  */
+
+#include "arm_fp16.h"
+
+#pragma GCC push_options
+#pragma GCC target ("arch=armv8.2-a+fp16")
+
+/* ARMv8.2-A FP16 one operand vector intrinsics.  */
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabs_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_absv4hf (__a);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabsq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_absv8hf (__a);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqz_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_cmeqv4hf_uss (__a, vdup_n_f16 (0.0f));
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqzq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_cmeqv8hf_uss (__a, vdupq_n_f16 (0.0f));
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgez_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_cmgev4hf_uss (__a, vdup_n_f16 (0.0f));
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgezq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_cmgev8hf_uss (__a, vdupq_n_f16 (0.0f));
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtz_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_cmgtv4hf_uss (__a, vdup_n_f16 (0.0f));
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtzq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_cmgtv8hf_uss (__a, vdupq_n_f16 (0.0f));
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclez_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_cmlev4hf_uss (__a, vdup_n_f16 (0.0f));
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclezq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_cmlev8hf_uss (__a, vdupq_n_f16 (0.0f));
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltz_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_cmltv4hf_uss (__a, vdup_n_f16 (0.0f));
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltzq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_cmltv8hf_uss (__a, vdupq_n_f16 (0.0f));
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_f16_s16 (int16x4_t __a)
+{
+  return __builtin_aarch64_floatv4hiv4hf (__a);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_f16_s16 (int16x8_t __a)
+{
+  return __builtin_aarch64_floatv8hiv8hf (__a);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_f16_u16 (uint16x4_t __a)
+{
+  return __builtin_aarch64_floatunsv4hiv4hf ((int16x4_t) __a);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_f16_u16 (uint16x8_t __a)
+{
+  return __builtin_aarch64_floatunsv8hiv8hf ((int16x8_t) __a);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_s16_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_lbtruncv4hfv4hi (__a);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_s16_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_lbtruncv8hfv8hi (__a);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_u16_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_lbtruncuv4hfv4hi_us (__a);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_u16_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_lbtruncuv8hfv8hi_us (__a);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvta_s16_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_lroundv4hfv4hi (__a);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtaq_s16_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_lroundv8hfv8hi (__a);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvta_u16_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_lrounduv4hfv4hi_us (__a);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtaq_u16_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_lrounduv8hfv8hi_us (__a);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtm_s16_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_lfloorv4hfv4hi (__a);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtmq_s16_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_lfloorv8hfv8hi (__a);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtm_u16_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_lflooruv4hfv4hi_us (__a);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtmq_u16_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_lflooruv8hfv8hi_us (__a);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtn_s16_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_lfrintnv4hfv4hi (__a);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtnq_s16_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_lfrintnv8hfv8hi (__a);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtn_u16_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_lfrintnuv4hfv4hi_us (__a);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtnq_u16_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_lfrintnuv8hfv8hi_us (__a);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtp_s16_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_lceilv4hfv4hi (__a);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtpq_s16_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_lceilv8hfv8hi (__a);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtp_u16_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_lceiluv4hfv4hi_us (__a);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtpq_u16_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_lceiluv8hfv8hi_us (__a);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vneg_f16 (float16x4_t __a)
+{
+  return -__a;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vnegq_f16 (float16x8_t __a)
+{
+  return -__a;
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecpe_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_frecpev4hf (__a);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecpeq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_frecpev8hf (__a);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrnd_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_btruncv4hf (__a);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_btruncv8hf (__a);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrnda_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_roundv4hf (__a);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndaq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_roundv8hf (__a);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndi_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_nearbyintv4hf (__a);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndiq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_nearbyintv8hf (__a);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndm_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_floorv4hf (__a);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndmq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_floorv8hf (__a);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndn_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_frintnv4hf (__a);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndnq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_frintnv8hf (__a);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndp_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_ceilv4hf (__a);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndpq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_ceilv8hf (__a);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndx_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_rintv4hf (__a);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrndxq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_rintv8hf (__a);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrte_f16 (float16x4_t a)
+{
+  return __builtin_aarch64_rsqrtev4hf (a);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrteq_f16 (float16x8_t a)
+{
+  return __builtin_aarch64_rsqrtev8hf (a);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqrt_f16 (float16x4_t a)
+{
+  return __builtin_aarch64_sqrtv4hf (a);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsqrtq_f16 (float16x8_t a)
+{
+  return __builtin_aarch64_sqrtv8hf (a);
+}
+
+/* ARMv8.2-A FP16 two operands vector intrinsics.  */
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vadd_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vaddq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __a + __b;
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabd_f16 (float16x4_t a, float16x4_t b)
+{
+  return __builtin_aarch64_fabdv4hf (a, b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vabdq_f16 (float16x8_t a, float16x8_t b)
+{
+  return __builtin_aarch64_fabdv8hf (a, b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcage_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_facgev4hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcageq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_facgev8hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcagt_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_facgtv4hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcagtq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_facgtv8hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcale_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_faclev4hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcaleq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_faclev8hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcalt_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_facltv4hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcaltq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_facltv8hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceq_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_cmeqv4hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vceqq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_cmeqv8hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcge_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_cmgev4hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgeq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_cmgev8hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgt_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_cmgtv4hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcgtq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_cmgtv8hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcle_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_cmlev4hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcleq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_cmlev8hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vclt_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_cmltv4hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcltq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_cmltv8hf_uss (__a, __b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_n_f16_s16 (int16x4_t __a, const int __b)
+{
+  return __builtin_aarch64_scvtfv4hi (__a, __b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_n_f16_s16 (int16x8_t __a, const int __b)
+{
+  return __builtin_aarch64_scvtfv8hi (__a, __b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_n_f16_u16 (uint16x4_t __a, const int __b)
+{
+  return __builtin_aarch64_ucvtfv4hi_sus (__a, __b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_n_f16_u16 (uint16x8_t __a, const int __b)
+{
+  return __builtin_aarch64_ucvtfv8hi_sus (__a, __b);
+}
+
+__extension__ extern __inline int16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_n_s16_f16 (float16x4_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzsv4hf (__a, __b);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_n_s16_f16 (float16x8_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzsv8hf (__a, __b);
+}
+
+__extension__ extern __inline uint16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvt_n_u16_f16 (float16x4_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzuv4hf_uss (__a, __b);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcvtq_n_u16_f16 (float16x8_t __a, const int __b)
+{
+  return __builtin_aarch64_fcvtzuv8hf_uss (__a, __b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdiv_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __a / __b;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdivq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __a / __b;
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmax_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_smax_nanv4hf (__a, __b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_smax_nanv8hf (__a, __b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxnm_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_fmaxv4hf (__a, __b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxnmq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_fmaxv8hf (__a, __b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmin_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_smin_nanv4hf (__a, __b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_smin_nanv8hf (__a, __b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminnm_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_fminv4hf (__a, __b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminnmq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_fminv8hf (__a, __b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __a * __b;
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulx_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_fmulxv4hf (__a, __b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_fmulxv8hf (__a, __b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpadd_f16 (float16x4_t a, float16x4_t b)
+{
+  return __builtin_aarch64_faddpv4hf (a, b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpaddq_f16 (float16x8_t a, float16x8_t b)
+{
+  return __builtin_aarch64_faddpv8hf (a, b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmax_f16 (float16x4_t a, float16x4_t b)
+{
+  return __builtin_aarch64_smax_nanpv4hf (a, b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxq_f16 (float16x8_t a, float16x8_t b)
+{
+  return __builtin_aarch64_smax_nanpv8hf (a, b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxnm_f16 (float16x4_t a, float16x4_t b)
+{
+  return __builtin_aarch64_smaxpv4hf (a, b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmaxnmq_f16 (float16x8_t a, float16x8_t b)
+{
+  return __builtin_aarch64_smaxpv8hf (a, b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpmin_f16 (float16x4_t a, float16x4_t b)
+{
+  return __builtin_aarch64_smin_nanpv4hf (a, b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpminq_f16 (float16x8_t a, float16x8_t b)
+{
+  return __builtin_aarch64_smin_nanpv8hf (a, b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpminnm_f16 (float16x4_t a, float16x4_t b)
+{
+  return __builtin_aarch64_sminpv4hf (a, b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vpminnmq_f16 (float16x8_t a, float16x8_t b)
+{
+  return __builtin_aarch64_sminpv8hf (a, b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecps_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_frecpsv4hf (__a, __b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrecpsq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_frecpsv8hf (__a, __b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrts_f16 (float16x4_t a, float16x4_t b)
+{
+  return __builtin_aarch64_rsqrtsv4hf (a, b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrsqrtsq_f16 (float16x8_t a, float16x8_t b)
+{
+  return __builtin_aarch64_rsqrtsv8hf (a, b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsub_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __a - __b;
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsubq_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __a - __b;
+}
+
+/* ARMv8.2-A FP16 three operands vector intrinsics.  */
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfma_f16 (float16x4_t __a, float16x4_t __b, float16x4_t __c)
+{
+  return __builtin_aarch64_fmav4hf (__b, __c, __a);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmaq_f16 (float16x8_t __a, float16x8_t __b, float16x8_t __c)
+{
+  return __builtin_aarch64_fmav8hf (__b, __c, __a);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfms_f16 (float16x4_t __a, float16x4_t __b, float16x4_t __c)
+{
+  return __builtin_aarch64_fnmav4hf (__b, __c, __a);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmsq_f16 (float16x8_t __a, float16x8_t __b, float16x8_t __c)
+{
+  return __builtin_aarch64_fnmav8hf (__b, __c, __a);
+}
+
+/* ARMv8.2-A FP16 lane vector intrinsics.  */
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmah_lane_f16 (float16_t __a, float16_t __b,
+		float16x4_t __c, const int __lane)
+{
+  return vfmah_f16 (__a, __b, __aarch64_vget_lane_any (__c, __lane));
+}
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmah_laneq_f16 (float16_t __a, float16_t __b,
+		 float16x8_t __c, const int __lane)
+{
+  return vfmah_f16 (__a, __b, __aarch64_vget_lane_any (__c, __lane));
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfma_lane_f16 (float16x4_t __a, float16x4_t __b,
+	       float16x4_t __c, const int __lane)
+{
+  return vfma_f16 (__a, __b, __aarch64_vdup_lane_f16 (__c, __lane));
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmaq_lane_f16 (float16x8_t __a, float16x8_t __b,
+		float16x4_t __c, const int __lane)
+{
+  return vfmaq_f16 (__a, __b, __aarch64_vdupq_lane_f16 (__c, __lane));
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfma_laneq_f16 (float16x4_t __a, float16x4_t __b,
+		float16x8_t __c, const int __lane)
+{
+  return vfma_f16 (__a, __b, __aarch64_vdup_laneq_f16 (__c, __lane));
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmaq_laneq_f16 (float16x8_t __a, float16x8_t __b,
+		 float16x8_t __c, const int __lane)
+{
+  return vfmaq_f16 (__a, __b, __aarch64_vdupq_laneq_f16 (__c, __lane));
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfma_n_f16 (float16x4_t __a, float16x4_t __b, float16_t __c)
+{
+  return vfma_f16 (__a, __b, vdup_n_f16 (__c));
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmaq_n_f16 (float16x8_t __a, float16x8_t __b, float16_t __c)
+{
+  return vfmaq_f16 (__a, __b, vdupq_n_f16 (__c));
+}
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmsh_lane_f16 (float16_t __a, float16_t __b,
+		float16x4_t __c, const int __lane)
+{
+  return vfmsh_f16 (__a, __b, __aarch64_vget_lane_any (__c, __lane));
+}
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmsh_laneq_f16 (float16_t __a, float16_t __b,
+		 float16x8_t __c, const int __lane)
+{
+  return vfmsh_f16 (__a, __b, __aarch64_vget_lane_any (__c, __lane));
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfms_lane_f16 (float16x4_t __a, float16x4_t __b,
+	       float16x4_t __c, const int __lane)
+{
+  return vfms_f16 (__a, __b, __aarch64_vdup_lane_f16 (__c, __lane));
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmsq_lane_f16 (float16x8_t __a, float16x8_t __b,
+		float16x4_t __c, const int __lane)
+{
+  return vfmsq_f16 (__a, __b, __aarch64_vdupq_lane_f16 (__c, __lane));
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfms_laneq_f16 (float16x4_t __a, float16x4_t __b,
+		float16x8_t __c, const int __lane)
+{
+  return vfms_f16 (__a, __b, __aarch64_vdup_laneq_f16 (__c, __lane));
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmsq_laneq_f16 (float16x8_t __a, float16x8_t __b,
+		 float16x8_t __c, const int __lane)
+{
+  return vfmsq_f16 (__a, __b, __aarch64_vdupq_laneq_f16 (__c, __lane));
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfms_n_f16 (float16x4_t __a, float16x4_t __b, float16_t __c)
+{
+  return vfms_f16 (__a, __b, vdup_n_f16 (__c));
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmsq_n_f16 (float16x8_t __a, float16x8_t __b, float16_t __c)
+{
+  return vfmsq_f16 (__a, __b, vdupq_n_f16 (__c));
+}
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulh_lane_f16 (float16_t __a, float16x4_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_lane_f16 (float16x4_t __a, float16x4_t __b, const int __lane)
+{
+  return vmul_f16 (__a, vdup_n_f16 (__aarch64_vget_lane_any (__b, __lane)));
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_lane_f16 (float16x8_t __a, float16x4_t __b, const int __lane)
+{
+  return vmulq_f16 (__a, vdupq_n_f16 (__aarch64_vget_lane_any (__b, __lane)));
+}
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulh_laneq_f16 (float16_t __a, float16x8_t __b, const int __lane)
+{
+  return __a * __aarch64_vget_lane_any (__b, __lane);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_laneq_f16 (float16x4_t __a, float16x8_t __b, const int __lane)
+{
+  return vmul_f16 (__a, vdup_n_f16 (__aarch64_vget_lane_any (__b, __lane)));
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_laneq_f16 (float16x8_t __a, float16x8_t __b, const int __lane)
+{
+  return vmulq_f16 (__a, vdupq_n_f16 (__aarch64_vget_lane_any (__b, __lane)));
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmul_n_f16 (float16x4_t __a, float16_t __b)
+{
+  return vmul_lane_f16 (__a, vdup_n_f16 (__b), 0);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulq_n_f16 (float16x8_t __a, float16_t __b)
+{
+  return vmulq_laneq_f16 (__a, vdupq_n_f16 (__b), 0);
+}
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxh_lane_f16 (float16_t __a, float16x4_t __b, const int __lane)
+{
+  return vmulxh_f16 (__a, __aarch64_vget_lane_any (__b, __lane));
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulx_lane_f16 (float16x4_t __a, float16x4_t __b, const int __lane)
+{
+  return vmulx_f16 (__a, __aarch64_vdup_lane_f16 (__b, __lane));
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxq_lane_f16 (float16x8_t __a, float16x4_t __b, const int __lane)
+{
+  return vmulxq_f16 (__a, __aarch64_vdupq_lane_f16 (__b, __lane));
+}
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxh_laneq_f16 (float16_t __a, float16x8_t __b, const int __lane)
+{
+  return vmulxh_f16 (__a, __aarch64_vget_lane_any (__b, __lane));
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulx_laneq_f16 (float16x4_t __a, float16x8_t __b, const int __lane)
+{
+  return vmulx_f16 (__a, __aarch64_vdup_laneq_f16 (__b, __lane));
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxq_laneq_f16 (float16x8_t __a, float16x8_t __b, const int __lane)
+{
+  return vmulxq_f16 (__a, __aarch64_vdupq_laneq_f16 (__b, __lane));
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulx_n_f16 (float16x4_t __a, float16_t __b)
+{
+  return vmulx_f16 (__a, vdup_n_f16 (__b));
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmulxq_n_f16 (float16x8_t __a, float16_t __b)
+{
+  return vmulxq_f16 (__a, vdupq_n_f16 (__b));
+}
+
+/* ARMv8.2-A FP16 reduction vector intrinsics.  */
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxv_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_reduc_smax_nan_scal_v4hf (__a);
+}
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxvq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_reduc_smax_nan_scal_v8hf (__a);
+}
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminv_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_reduc_smin_nan_scal_v4hf (__a);
+}
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminvq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_reduc_smin_nan_scal_v8hf (__a);
+}
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxnmv_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_reduc_smax_scal_v4hf (__a);
+}
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vmaxnmvq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_reduc_smax_scal_v8hf (__a);
+}
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminnmv_f16 (float16x4_t __a)
+{
+  return __builtin_aarch64_reduc_smin_scal_v4hf (__a);
+}
+
+__extension__ extern __inline float16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vminnmvq_f16 (float16x8_t __a)
+{
+  return __builtin_aarch64_reduc_smin_scal_v8hf (__a);
+}
+
+#pragma GCC pop_options
+
+/* AdvSIMD Dot Product intrinsics.  */
+
+#pragma GCC push_options
+#pragma GCC target ("arch=armv8.2-a+dotprod")
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdot_u32 (uint32x2_t __r, uint8x8_t __a, uint8x8_t __b)
+{
+  return __builtin_aarch64_udotv8qi_uuuu (__r, __a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdotq_u32 (uint32x4_t __r, uint8x16_t __a, uint8x16_t __b)
+{
+  return __builtin_aarch64_udotv16qi_uuuu (__r, __a, __b);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdot_s32 (int32x2_t __r, int8x8_t __a, int8x8_t __b)
+{
+  return __builtin_aarch64_sdotv8qi (__r, __a, __b);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdotq_s32 (int32x4_t __r, int8x16_t __a, int8x16_t __b)
+{
+  return __builtin_aarch64_sdotv16qi (__r, __a, __b);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdot_lane_u32 (uint32x2_t __r, uint8x8_t __a, uint8x8_t __b, const int __index)
+{
+  return __builtin_aarch64_udot_lanev8qi_uuuus (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline uint32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdot_laneq_u32 (uint32x2_t __r, uint8x8_t __a, uint8x16_t __b,
+		const int __index)
+{
+  return __builtin_aarch64_udot_laneqv8qi_uuuus (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdotq_lane_u32 (uint32x4_t __r, uint8x16_t __a, uint8x8_t __b,
+		const int __index)
+{
+  return __builtin_aarch64_udot_lanev16qi_uuuus (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdotq_laneq_u32 (uint32x4_t __r, uint8x16_t __a, uint8x16_t __b,
+		 const int __index)
+{
+  return __builtin_aarch64_udot_laneqv16qi_uuuus (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdot_lane_s32 (int32x2_t __r, int8x8_t __a, int8x8_t __b, const int __index)
+{
+  return __builtin_aarch64_sdot_lanev8qi (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline int32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdot_laneq_s32 (int32x2_t __r, int8x8_t __a, int8x16_t __b, const int __index)
+{
+  return __builtin_aarch64_sdot_laneqv8qi (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdotq_lane_s32 (int32x4_t __r, int8x16_t __a, int8x8_t __b, const int __index)
+{
+  return __builtin_aarch64_sdot_lanev16qi (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vdotq_laneq_s32 (int32x4_t __r, int8x16_t __a, int8x16_t __b, const int __index)
+{
+  return __builtin_aarch64_sdot_laneqv16qi (__r, __a, __b, __index);
+}
+#pragma GCC pop_options
+
+#pragma GCC push_options
+#pragma GCC target ("arch=armv8.2-a+sm4")
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsm3ss1q_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c)
+{
+  return __builtin_aarch64_sm3ss1qv4si_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsm3tt1aq_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c, const int __imm2)
+{
+  return __builtin_aarch64_sm3tt1aqv4si_uuuus (__a, __b, __c, __imm2);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsm3tt1bq_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c, const int __imm2)
+{
+  return __builtin_aarch64_sm3tt1bqv4si_uuuus (__a, __b, __c, __imm2);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsm3tt2aq_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c, const int __imm2)
+{
+  return __builtin_aarch64_sm3tt2aqv4si_uuuus (__a, __b, __c, __imm2);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsm3tt2bq_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c, const int __imm2)
+{
+  return __builtin_aarch64_sm3tt2bqv4si_uuuus (__a, __b, __c, __imm2);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsm3partw1q_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c)
+{
+  return __builtin_aarch64_sm3partw1qv4si_uuuu (__a, __b, __c);
+}
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsm3partw2q_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c)
+{
+  return __builtin_aarch64_sm3partw2qv4si_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsm4eq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return __builtin_aarch64_sm4eqv4si_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsm4ekeyq_u32 (uint32x4_t __a, uint32x4_t __b)
+{
+  return __builtin_aarch64_sm4ekeyqv4si_uuu (__a, __b);
+}
+
+#pragma GCC pop_options
+
+#pragma GCC push_options
+#pragma GCC target ("arch=armv8.2-a+sha3")
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsha512hq_u64 (uint64x2_t __a, uint64x2_t __b, uint64x2_t __c)
+{
+  return __builtin_aarch64_crypto_sha512hqv2di_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsha512h2q_u64 (uint64x2_t __a, uint64x2_t __b, uint64x2_t __c)
+{
+  return __builtin_aarch64_crypto_sha512h2qv2di_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsha512su0q_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return __builtin_aarch64_crypto_sha512su0qv2di_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vsha512su1q_u64 (uint64x2_t __a, uint64x2_t __b, uint64x2_t __c)
+{
+  return __builtin_aarch64_crypto_sha512su1qv2di_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veor3q_u8 (uint8x16_t __a, uint8x16_t __b, uint8x16_t __c)
+{
+  return __builtin_aarch64_eor3qv16qi_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veor3q_u16 (uint16x8_t __a, uint16x8_t __b, uint16x8_t __c)
+{
+  return __builtin_aarch64_eor3qv8hi_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veor3q_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c)
+{
+  return __builtin_aarch64_eor3qv4si_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veor3q_u64 (uint64x2_t __a, uint64x2_t __b, uint64x2_t __c)
+{
+  return __builtin_aarch64_eor3qv2di_uuuu (__a, __b, __c);
+}
+
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veor3q_s8 (int8x16_t __a, int8x16_t __b, int8x16_t __c)
+{
+  return __builtin_aarch64_eor3qv16qi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veor3q_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c)
+{
+  return __builtin_aarch64_eor3qv8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veor3q_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c)
+{
+  return __builtin_aarch64_eor3qv4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+veor3q_s64 (int64x2_t __a, int64x2_t __b, int64x2_t __c)
+{
+  return __builtin_aarch64_eor3qv2di (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vrax1q_u64 (uint64x2_t __a, uint64x2_t __b)
+{
+  return __builtin_aarch64_rax1qv2di_uuu (__a, __b);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vxarq_u64 (uint64x2_t __a, uint64x2_t __b, const int imm6)
+{
+  return __builtin_aarch64_xarqv2di_uuus (__a, __b,imm6);
+}
+
+__extension__ extern __inline uint8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbcaxq_u8 (uint8x16_t __a, uint8x16_t __b, uint8x16_t __c)
+{
+  return __builtin_aarch64_bcaxqv16qi_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline uint16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbcaxq_u16 (uint16x8_t __a, uint16x8_t __b, uint16x8_t __c)
+{
+  return __builtin_aarch64_bcaxqv8hi_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline uint32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbcaxq_u32 (uint32x4_t __a, uint32x4_t __b, uint32x4_t __c)
+{
+  return __builtin_aarch64_bcaxqv4si_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline uint64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbcaxq_u64 (uint64x2_t __a, uint64x2_t __b, uint64x2_t __c)
+{
+  return __builtin_aarch64_bcaxqv2di_uuuu (__a, __b, __c);
+}
+
+__extension__ extern __inline int8x16_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbcaxq_s8 (int8x16_t __a, int8x16_t __b, int8x16_t __c)
+{
+  return __builtin_aarch64_bcaxqv16qi (__a, __b, __c);
+}
+
+__extension__ extern __inline int16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbcaxq_s16 (int16x8_t __a, int16x8_t __b, int16x8_t __c)
+{
+  return __builtin_aarch64_bcaxqv8hi (__a, __b, __c);
+}
+
+__extension__ extern __inline int32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbcaxq_s32 (int32x4_t __a, int32x4_t __b, int32x4_t __c)
+{
+  return __builtin_aarch64_bcaxqv4si (__a, __b, __c);
+}
+
+__extension__ extern __inline int64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vbcaxq_s64 (int64x2_t __a, int64x2_t __b, int64x2_t __c)
+{
+  return __builtin_aarch64_bcaxqv2di (__a, __b, __c);
+}
+
+#pragma GCC pop_options
+
+/* AdvSIMD Complex numbers intrinsics.  */
+
+#pragma GCC push_options
+#pragma GCC target ("arch=armv8.3-a")
+
+#pragma GCC push_options
+#pragma GCC target ("+fp16")
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcadd_rot90_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_fcadd90v4hf (__a, __b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcaddq_rot90_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_fcadd90v8hf (__a, __b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcadd_rot270_f16 (float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_fcadd270v4hf (__a, __b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcaddq_rot270_f16 (float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_fcadd270v8hf (__a, __b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_f16 (float16x4_t __r, float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_fcmla0v4hf (__r, __a, __b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_f16 (float16x8_t __r, float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_fcmla0v8hf (__r, __a, __b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_lane_f16 (float16x4_t __r, float16x4_t __a, float16x4_t __b,
+		const int __index)
+{
+  return __builtin_aarch64_fcmla_lane0v4hf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_laneq_f16 (float16x4_t __r, float16x4_t __a, float16x8_t __b,
+		 const int __index)
+{
+  return __builtin_aarch64_fcmla_laneq0v4hf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_lane_f16 (float16x8_t __r, float16x8_t __a, float16x4_t __b,
+		 const int __index)
+{
+  return __builtin_aarch64_fcmlaq_lane0v8hf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot90_lane_f16 (float16x8_t __r, float16x8_t __a, float16x4_t __b,
+		       const int __index)
+{
+  return __builtin_aarch64_fcmlaq_lane90v8hf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot90_laneq_f16 (float16x4_t __r, float16x4_t __a, float16x8_t __b,
+		       const int __index)
+{
+  return __builtin_aarch64_fcmla_laneq90v4hf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot90_lane_f16 (float16x4_t __r, float16x4_t __a, float16x4_t __b,
+		      const int __index)
+{
+  return __builtin_aarch64_fcmla_lane90v4hf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot90_f16 (float16x8_t __r, float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_fcmla90v8hf (__r, __a, __b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot90_f16 (float16x4_t __r, float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_fcmla90v4hf (__r, __a, __b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_laneq_f16 (float16x8_t __r, float16x8_t __a, float16x8_t __b,
+		  const int __index)
+{
+  return __builtin_aarch64_fcmla_lane0v8hf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot180_laneq_f16 (float16x4_t __r, float16x4_t __a, float16x8_t __b,
+			const int __index)
+{
+  return __builtin_aarch64_fcmla_laneq180v4hf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot180_lane_f16 (float16x4_t __r, float16x4_t __a, float16x4_t __b,
+		       const int __index)
+{
+  return __builtin_aarch64_fcmla_lane180v4hf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot180_f16 (float16x8_t __r, float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_fcmla180v8hf (__r, __a, __b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot180_f16 (float16x4_t __r, float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_fcmla180v4hf (__r, __a, __b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot90_laneq_f16 (float16x8_t __r, float16x8_t __a, float16x8_t __b,
+			const int __index)
+{
+  return __builtin_aarch64_fcmla_lane90v8hf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot270_laneq_f16 (float16x8_t __r, float16x8_t __a, float16x8_t __b,
+			 const int __index)
+{
+  return __builtin_aarch64_fcmla_lane270v8hf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot270_lane_f16 (float16x8_t __r, float16x8_t __a, float16x4_t __b,
+			const int __index)
+{
+  return __builtin_aarch64_fcmlaq_lane270v8hf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot270_laneq_f16 (float16x4_t __r, float16x4_t __a, float16x8_t __b,
+			const int __index)
+{
+  return __builtin_aarch64_fcmla_laneq270v4hf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot270_f16 (float16x8_t __r, float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_fcmla270v8hf (__r, __a, __b);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot270_f16 (float16x4_t __r, float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_fcmla270v4hf (__r, __a, __b);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot180_laneq_f16 (float16x8_t __r, float16x8_t __a, float16x8_t __b,
+			 const int __index)
+{
+  return __builtin_aarch64_fcmla_lane180v8hf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float16x8_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot180_lane_f16 (float16x8_t __r, float16x8_t __a, float16x4_t __b,
+			const int __index)
+{
+  return __builtin_aarch64_fcmlaq_lane180v8hf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float16x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot270_lane_f16 (float16x4_t __r, float16x4_t __a, float16x4_t __b,
+		       const int __index)
+{
+  return __builtin_aarch64_fcmla_lane270v4hf (__r, __a, __b, __index);
+}
+#pragma GCC pop_options
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcadd_rot90_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return __builtin_aarch64_fcadd90v2sf (__a, __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcaddq_rot90_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return __builtin_aarch64_fcadd90v4sf (__a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcaddq_rot90_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return __builtin_aarch64_fcadd90v2df (__a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcadd_rot270_f32 (float32x2_t __a, float32x2_t __b)
+{
+  return __builtin_aarch64_fcadd270v2sf (__a, __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcaddq_rot270_f32 (float32x4_t __a, float32x4_t __b)
+{
+  return __builtin_aarch64_fcadd270v4sf (__a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcaddq_rot270_f64 (float64x2_t __a, float64x2_t __b)
+{
+  return __builtin_aarch64_fcadd270v2df (__a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_f32 (float32x2_t __r, float32x2_t __a, float32x2_t __b)
+{
+  return __builtin_aarch64_fcmla0v2sf (__r, __a, __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_f32 (float32x4_t __r, float32x4_t __a, float32x4_t __b)
+{
+  return __builtin_aarch64_fcmla0v4sf (__r, __a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_f64 (float64x2_t __r, float64x2_t __a, float64x2_t __b)
+{
+  return __builtin_aarch64_fcmla0v2df (__r, __a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_lane_f32 (float32x2_t __r, float32x2_t __a, float32x2_t __b,
+		const int __index)
+{
+  return __builtin_aarch64_fcmla_lane0v2sf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_laneq_f32 (float32x2_t __r, float32x2_t __a, float32x4_t __b,
+		 const int __index)
+{
+  return __builtin_aarch64_fcmla_laneq0v2sf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_lane_f32 (float32x4_t __r, float32x4_t __a, float32x2_t __b,
+		 const int __index)
+{
+  return __builtin_aarch64_fcmlaq_lane0v4sf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_laneq_f32 (float32x4_t __r, float32x4_t __a, float32x4_t __b,
+		  const int __index)
+{
+  return __builtin_aarch64_fcmla_lane0v4sf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot90_f32 (float32x2_t __r, float32x2_t __a, float32x2_t __b)
+{
+  return __builtin_aarch64_fcmla90v2sf (__r, __a, __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot90_f32 (float32x4_t __r, float32x4_t __a, float32x4_t __b)
+{
+  return __builtin_aarch64_fcmla90v4sf (__r, __a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot90_f64 (float64x2_t __r, float64x2_t __a, float64x2_t __b)
+{
+  return __builtin_aarch64_fcmla90v2df (__r, __a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot90_lane_f32 (float32x2_t __r, float32x2_t __a, float32x2_t __b,
+		      const int __index)
+{
+  return __builtin_aarch64_fcmla_lane90v2sf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot90_laneq_f32 (float32x2_t __r, float32x2_t __a, float32x4_t __b,
+		       const int __index)
+{
+  return __builtin_aarch64_fcmla_laneq90v2sf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot90_lane_f32 (float32x4_t __r, float32x4_t __a, float32x2_t __b,
+		       const int __index)
+{
+  return __builtin_aarch64_fcmlaq_lane90v4sf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot90_laneq_f32 (float32x4_t __r, float32x4_t __a, float32x4_t __b,
+			const int __index)
+{
+  return __builtin_aarch64_fcmla_lane90v4sf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot180_f32 (float32x2_t __r, float32x2_t __a, float32x2_t __b)
+{
+  return __builtin_aarch64_fcmla180v2sf (__r, __a, __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot180_f32 (float32x4_t __r, float32x4_t __a, float32x4_t __b)
+{
+  return __builtin_aarch64_fcmla180v4sf (__r, __a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot180_f64 (float64x2_t __r, float64x2_t __a, float64x2_t __b)
+{
+  return __builtin_aarch64_fcmla180v2df (__r, __a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot180_lane_f32 (float32x2_t __r, float32x2_t __a, float32x2_t __b,
+		       const int __index)
+{
+  return __builtin_aarch64_fcmla_lane180v2sf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot180_laneq_f32 (float32x2_t __r, float32x2_t __a, float32x4_t __b,
+			const int __index)
+{
+  return __builtin_aarch64_fcmla_laneq180v2sf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot180_lane_f32 (float32x4_t __r, float32x4_t __a, float32x2_t __b,
+			const int __index)
+{
+  return __builtin_aarch64_fcmlaq_lane180v4sf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot180_laneq_f32 (float32x4_t __r, float32x4_t __a, float32x4_t __b,
+			 const int __index)
+{
+  return __builtin_aarch64_fcmla_lane180v4sf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot270_f32 (float32x2_t __r, float32x2_t __a, float32x2_t __b)
+{
+  return __builtin_aarch64_fcmla270v2sf (__r, __a, __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot270_f32 (float32x4_t __r, float32x4_t __a, float32x4_t __b)
+{
+  return __builtin_aarch64_fcmla270v4sf (__r, __a, __b);
+}
+
+__extension__ extern __inline float64x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot270_f64 (float64x2_t __r, float64x2_t __a, float64x2_t __b)
+{
+  return __builtin_aarch64_fcmla270v2df (__r, __a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot270_lane_f32 (float32x2_t __r, float32x2_t __a, float32x2_t __b,
+		       const int __index)
+{
+  return __builtin_aarch64_fcmla_lane270v2sf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmla_rot270_laneq_f32 (float32x2_t __r, float32x2_t __a, float32x4_t __b,
+			const int __index)
+{
+  return __builtin_aarch64_fcmla_laneq270v2sf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot270_lane_f32 (float32x4_t __r, float32x4_t __a, float32x2_t __b,
+			const int __index)
+{
+  return __builtin_aarch64_fcmlaq_lane270v4sf (__r, __a, __b, __index);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vcmlaq_rot270_laneq_f32 (float32x4_t __r, float32x4_t __a, float32x4_t __b,
+			 const int __index)
+{
+  return __builtin_aarch64_fcmla_lane270v4sf (__r, __a, __b, __index);
+}
+
+#pragma GCC pop_options
+
+#pragma GCC push_options
+#pragma GCC target ("arch=armv8.2-a+fp16fml")
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlal_low_f16 (float32x2_t __r, float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_fmlal_lowv2sf (__r, __a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlsl_low_f16 (float32x2_t __r, float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_fmlsl_lowv2sf (__r, __a, __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlalq_low_f16 (float32x4_t __r, float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_fmlalq_lowv4sf (__r, __a, __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlslq_low_f16 (float32x4_t __r, float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_fmlslq_lowv4sf (__r, __a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlal_high_f16 (float32x2_t __r, float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_fmlal_highv2sf (__r, __a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlsl_high_f16 (float32x2_t __r, float16x4_t __a, float16x4_t __b)
+{
+  return __builtin_aarch64_fmlsl_highv2sf (__r, __a, __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlalq_high_f16 (float32x4_t __r, float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_fmlalq_highv4sf (__r, __a, __b);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlslq_high_f16 (float32x4_t __r, float16x8_t __a, float16x8_t __b)
+{
+  return __builtin_aarch64_fmlslq_highv4sf (__r, __a, __b);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlal_lane_low_f16 (float32x2_t __r, float16x4_t __a, float16x4_t __b,
+		     const int __lane)
+{
+  return __builtin_aarch64_fmlal_lane_lowv2sf (__r, __a, __b, __lane);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlsl_lane_low_f16 (float32x2_t __r, float16x4_t __a, float16x4_t __b,
+		     const int __lane)
+{
+  return __builtin_aarch64_fmlsl_lane_lowv2sf (__r, __a, __b, __lane);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlal_laneq_low_f16 (float32x2_t __r, float16x4_t __a, float16x8_t __b,
+		      const int __lane)
+{
+  return __builtin_aarch64_fmlal_laneq_lowv2sf (__r, __a, __b, __lane);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlsl_laneq_low_f16 (float32x2_t __r, float16x4_t __a, float16x8_t __b,
+		      const int __lane)
+{
+  return __builtin_aarch64_fmlsl_laneq_lowv2sf (__r, __a, __b, __lane);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlalq_lane_low_f16 (float32x4_t __r, float16x8_t __a, float16x4_t __b,
+		      const int __lane)
+{
+  return __builtin_aarch64_fmlalq_lane_lowv4sf (__r, __a, __b, __lane);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlslq_lane_low_f16 (float32x4_t __r, float16x8_t __a, float16x4_t __b,
+		      const int __lane)
+{
+  return __builtin_aarch64_fmlslq_lane_lowv4sf (__r, __a, __b, __lane);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlalq_laneq_low_f16 (float32x4_t __r, float16x8_t __a, float16x8_t __b,
+		       const int __lane)
+{
+  return __builtin_aarch64_fmlalq_laneq_lowv4sf (__r, __a, __b, __lane);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlslq_laneq_low_f16 (float32x4_t __r, float16x8_t __a, float16x8_t __b,
+		      const int __lane)
+{
+  return __builtin_aarch64_fmlslq_laneq_lowv4sf (__r, __a, __b, __lane);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlal_lane_high_f16 (float32x2_t __r, float16x4_t __a, float16x4_t __b,
+		     const int __lane)
+{
+  return __builtin_aarch64_fmlal_lane_highv2sf (__r, __a, __b, __lane);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlsl_lane_high_f16 (float32x2_t __r, float16x4_t __a, float16x4_t __b,
+		     const int __lane)
+{
+  return __builtin_aarch64_fmlsl_lane_highv2sf (__r, __a, __b, __lane);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlal_laneq_high_f16 (float32x2_t __r, float16x4_t __a, float16x8_t __b,
+		      const int __lane)
+{
+  return __builtin_aarch64_fmlal_laneq_highv2sf (__r, __a, __b, __lane);
+}
+
+__extension__ extern __inline float32x2_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlsl_laneq_high_f16 (float32x2_t __r, float16x4_t __a, float16x8_t __b,
+		      const int __lane)
+{
+  return __builtin_aarch64_fmlsl_laneq_highv2sf (__r, __a, __b, __lane);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlalq_lane_high_f16 (float32x4_t __r, float16x8_t __a, float16x4_t __b,
+		      const int __lane)
+{
+  return __builtin_aarch64_fmlalq_lane_highv4sf (__r, __a, __b, __lane);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlslq_lane_high_f16 (float32x4_t __r, float16x8_t __a, float16x4_t __b,
+		      const int __lane)
+{
+  return __builtin_aarch64_fmlslq_lane_highv4sf (__r, __a, __b, __lane);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlalq_laneq_high_f16 (float32x4_t __r, float16x8_t __a, float16x8_t __b,
+		       const int __lane)
+{
+  return __builtin_aarch64_fmlalq_laneq_highv4sf (__r, __a, __b, __lane);
+}
+
+__extension__ extern __inline float32x4_t
+__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
+vfmlslq_laneq_high_f16 (float32x4_t __r, float16x8_t __a, float16x8_t __b,
+		      const int __lane)
+{
+  return __builtin_aarch64_fmlslq_laneq_highv4sf (__r, __a, __b, __lane);
+}
+
+#pragma GCC pop_options
+
+#undef __aarch64_vget_lane_any
+
+#undef __aarch64_vdup_lane_any
+#undef __aarch64_vdup_lane_f16
+#undef __aarch64_vdup_lane_f32
+#undef __aarch64_vdup_lane_f64
+#undef __aarch64_vdup_lane_p8
+#undef __aarch64_vdup_lane_p16
+#undef __aarch64_vdup_lane_s8
+#undef __aarch64_vdup_lane_s16
+#undef __aarch64_vdup_lane_s32
+#undef __aarch64_vdup_lane_s64
+#undef __aarch64_vdup_lane_u8
+#undef __aarch64_vdup_lane_u16
+#undef __aarch64_vdup_lane_u32
+#undef __aarch64_vdup_lane_u64
+#undef __aarch64_vdup_laneq_f16
+#undef __aarch64_vdup_laneq_f32
+#undef __aarch64_vdup_laneq_f64
+#undef __aarch64_vdup_laneq_p8
+#undef __aarch64_vdup_laneq_p16
+#undef __aarch64_vdup_laneq_s8
+#undef __aarch64_vdup_laneq_s16
+#undef __aarch64_vdup_laneq_s32
+#undef __aarch64_vdup_laneq_s64
+#undef __aarch64_vdup_laneq_u8
+#undef __aarch64_vdup_laneq_u16
+#undef __aarch64_vdup_laneq_u32
+#undef __aarch64_vdup_laneq_u64
+#undef __aarch64_vdupq_lane_f16
+#undef __aarch64_vdupq_lane_f32
+#undef __aarch64_vdupq_lane_f64
+#undef __aarch64_vdupq_lane_p8
+#undef __aarch64_vdupq_lane_p16
+#undef __aarch64_vdupq_lane_s8
+#undef __aarch64_vdupq_lane_s16
+#undef __aarch64_vdupq_lane_s32
+#undef __aarch64_vdupq_lane_s64
+#undef __aarch64_vdupq_lane_u8
+#undef __aarch64_vdupq_lane_u16
+#undef __aarch64_vdupq_lane_u32
+#undef __aarch64_vdupq_lane_u64
+#undef __aarch64_vdupq_laneq_f16
+#undef __aarch64_vdupq_laneq_f32
+#undef __aarch64_vdupq_laneq_f64
+#undef __aarch64_vdupq_laneq_p8
+#undef __aarch64_vdupq_laneq_p16
+#undef __aarch64_vdupq_laneq_s8
+#undef __aarch64_vdupq_laneq_s16
+#undef __aarch64_vdupq_laneq_s32
+#undef __aarch64_vdupq_laneq_s64
+#undef __aarch64_vdupq_laneq_u8
+#undef __aarch64_vdupq_laneq_u16
+#undef __aarch64_vdupq_laneq_u32
+#undef __aarch64_vdupq_laneq_u64
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/float.h b/lib/gcc/aarch64-elf/9.1.1/include/float.h
new file mode 100644
index 0000000..9ebae05
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/float.h
@@ -0,0 +1,506 @@
+/* Copyright (C) 2002-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO C Standard:  5.2.4.2.2  Characteristics of floating types <float.h>
+ */
+
+#ifndef _FLOAT_H___
+#define _FLOAT_H___
+
+/* Radix of exponent representation, b. */
+#undef FLT_RADIX
+#define FLT_RADIX	__FLT_RADIX__
+
+/* Number of base-FLT_RADIX digits in the significand, p.  */
+#undef FLT_MANT_DIG
+#undef DBL_MANT_DIG
+#undef LDBL_MANT_DIG
+#define FLT_MANT_DIG	__FLT_MANT_DIG__
+#define DBL_MANT_DIG	__DBL_MANT_DIG__
+#define LDBL_MANT_DIG	__LDBL_MANT_DIG__
+
+/* Number of decimal digits, q, such that any floating-point number with q
+   decimal digits can be rounded into a floating-point number with p radix b
+   digits and back again without change to the q decimal digits,
+
+	p * log10(b)			if b is a power of 10
+	floor((p - 1) * log10(b))	otherwise
+*/
+#undef FLT_DIG
+#undef DBL_DIG
+#undef LDBL_DIG
+#define FLT_DIG		__FLT_DIG__
+#define DBL_DIG		__DBL_DIG__
+#define LDBL_DIG	__LDBL_DIG__
+
+/* Minimum int x such that FLT_RADIX**(x-1) is a normalized float, emin */
+#undef FLT_MIN_EXP
+#undef DBL_MIN_EXP
+#undef LDBL_MIN_EXP
+#define FLT_MIN_EXP	__FLT_MIN_EXP__
+#define DBL_MIN_EXP	__DBL_MIN_EXP__
+#define LDBL_MIN_EXP	__LDBL_MIN_EXP__
+
+/* Minimum negative integer such that 10 raised to that power is in the
+   range of normalized floating-point numbers,
+
+	ceil(log10(b) * (emin - 1))
+*/
+#undef FLT_MIN_10_EXP
+#undef DBL_MIN_10_EXP
+#undef LDBL_MIN_10_EXP
+#define FLT_MIN_10_EXP	__FLT_MIN_10_EXP__
+#define DBL_MIN_10_EXP	__DBL_MIN_10_EXP__
+#define LDBL_MIN_10_EXP	__LDBL_MIN_10_EXP__
+
+/* Maximum int x such that FLT_RADIX**(x-1) is a representable float, emax.  */
+#undef FLT_MAX_EXP
+#undef DBL_MAX_EXP
+#undef LDBL_MAX_EXP
+#define FLT_MAX_EXP	__FLT_MAX_EXP__
+#define DBL_MAX_EXP	__DBL_MAX_EXP__
+#define LDBL_MAX_EXP	__LDBL_MAX_EXP__
+
+/* Maximum integer such that 10 raised to that power is in the range of
+   representable finite floating-point numbers,
+
+	floor(log10((1 - b**-p) * b**emax))
+*/
+#undef FLT_MAX_10_EXP
+#undef DBL_MAX_10_EXP
+#undef LDBL_MAX_10_EXP
+#define FLT_MAX_10_EXP	__FLT_MAX_10_EXP__
+#define DBL_MAX_10_EXP	__DBL_MAX_10_EXP__
+#define LDBL_MAX_10_EXP	__LDBL_MAX_10_EXP__
+
+/* Maximum representable finite floating-point number,
+
+	(1 - b**-p) * b**emax
+*/
+#undef FLT_MAX
+#undef DBL_MAX
+#undef LDBL_MAX
+#define FLT_MAX		__FLT_MAX__
+#define DBL_MAX		__DBL_MAX__
+#define LDBL_MAX	__LDBL_MAX__
+
+/* The difference between 1 and the least value greater than 1 that is
+   representable in the given floating point type, b**1-p.  */
+#undef FLT_EPSILON
+#undef DBL_EPSILON
+#undef LDBL_EPSILON
+#define FLT_EPSILON	__FLT_EPSILON__
+#define DBL_EPSILON	__DBL_EPSILON__
+#define LDBL_EPSILON	__LDBL_EPSILON__
+
+/* Minimum normalized positive floating-point number, b**(emin - 1).  */
+#undef FLT_MIN
+#undef DBL_MIN
+#undef LDBL_MIN
+#define FLT_MIN		__FLT_MIN__
+#define DBL_MIN		__DBL_MIN__
+#define LDBL_MIN	__LDBL_MIN__
+
+/* Addition rounds to 0: zero, 1: nearest, 2: +inf, 3: -inf, -1: unknown.  */
+/* ??? This is supposed to change with calls to fesetround in <fenv.h>.  */
+#undef FLT_ROUNDS
+#define FLT_ROUNDS 1
+
+#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
+     || (defined (__cplusplus) && __cplusplus >= 201103L)
+/* The floating-point expression evaluation method.  The precise
+   definitions of these values are generalised to include support for
+   the interchange and extended types defined in ISO/IEC TS 18661-3.
+   Prior to this (for C99/C11) the definitions were:
+
+	-1  indeterminate
+	 0  evaluate all operations and constants just to the range and
+	    precision of the type
+	 1  evaluate operations and constants of type float and double
+	    to the range and precision of the double type, evaluate
+	    long double operations and constants to the range and
+	    precision of the long double type
+	 2  evaluate all operations and constants to the range and
+	    precision of the long double type
+
+   The TS 18661-3 definitions are:
+
+	-1  indeterminate
+	 0  evaluate all operations and constants, whose semantic type has
+	    at most the range and precision of float, to the range and
+	    precision of float; evaluate all other operations and constants
+	    to the range and precision of the semantic type.
+	 1  evaluate all operations and constants, whose semantic type has
+	    at most the range and precision of double, to the range and
+	    precision of double; evaluate all other operations and constants
+	    to the range and precision of the semantic type.
+	 2  evaluate all operations and constants, whose semantic type has
+	    at most the range and precision of long double, to the range and
+	    precision of long double; evaluate all other operations and
+	    constants to the range and precision of the semantic type.
+	 N  where _FloatN  is a supported interchange floating type
+	    evaluate all operations and constants, whose semantic type has
+	    at most the range and precision of the _FloatN type, to the
+	    range and precision of the _FloatN type; evaluate all other
+	    operations and constants to the range and precision of the
+	    semantic type.
+	 N + 1, where _FloatNx is a supported extended floating type
+	    evaluate operations and constants, whose semantic type has at
+	    most the range and precision of the _FloatNx type, to the range
+	    and precision of the _FloatNx type; evaluate all other
+	    operations and constants to the range and precision of the
+	    semantic type.
+
+   The compiler predefines two macros:
+
+      __FLT_EVAL_METHOD__
+      Which, depending on the value given for
+      -fpermitted-flt-eval-methods, may be limited to only those values
+      for FLT_EVAL_METHOD defined in C99/C11.
+
+     __FLT_EVAL_METHOD_TS_18661_3__
+      Which always permits the values for FLT_EVAL_METHOD defined in
+      ISO/IEC TS 18661-3.
+
+     Here we want to use __FLT_EVAL_METHOD__, unless
+     __STDC_WANT_IEC_60559_TYPES_EXT__ is defined, in which case the user
+     is specifically asking for the ISO/IEC TS 18661-3 types, so we use
+     __FLT_EVAL_METHOD_TS_18661_3__.
+
+   ??? This ought to change with the setting of the fp control word;
+   the value provided by the compiler assumes the widest setting.  */
+#undef FLT_EVAL_METHOD
+#ifdef __STDC_WANT_IEC_60559_TYPES_EXT__
+#define FLT_EVAL_METHOD __FLT_EVAL_METHOD_TS_18661_3__
+#else
+#define FLT_EVAL_METHOD	__FLT_EVAL_METHOD__
+#endif
+
+/* Number of decimal digits, n, such that any floating-point number in the
+   widest supported floating type with pmax radix b digits can be rounded
+   to a floating-point number with n decimal digits and back again without
+   change to the value,
+
+	pmax * log10(b)			if b is a power of 10
+	ceil(1 + pmax * log10(b))	otherwise
+*/
+#undef DECIMAL_DIG
+#define DECIMAL_DIG	__DECIMAL_DIG__
+
+#endif /* C99 */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
+/* Versions of DECIMAL_DIG for each floating-point type.  */
+#undef FLT_DECIMAL_DIG
+#undef DBL_DECIMAL_DIG
+#undef LDBL_DECIMAL_DIG
+#define FLT_DECIMAL_DIG		__FLT_DECIMAL_DIG__
+#define DBL_DECIMAL_DIG		__DBL_DECIMAL_DIG__
+#define LDBL_DECIMAL_DIG	__LDBL_DECIMAL_DIG__
+
+/* Whether types support subnormal numbers.  */
+#undef FLT_HAS_SUBNORM
+#undef DBL_HAS_SUBNORM
+#undef LDBL_HAS_SUBNORM
+#define FLT_HAS_SUBNORM		__FLT_HAS_DENORM__
+#define DBL_HAS_SUBNORM		__DBL_HAS_DENORM__
+#define LDBL_HAS_SUBNORM	__LDBL_HAS_DENORM__
+
+/* Minimum positive values, including subnormals.  */
+#undef FLT_TRUE_MIN
+#undef DBL_TRUE_MIN
+#undef LDBL_TRUE_MIN
+#define FLT_TRUE_MIN	__FLT_DENORM_MIN__
+#define DBL_TRUE_MIN	__DBL_DENORM_MIN__
+#define LDBL_TRUE_MIN	__LDBL_DENORM_MIN__
+
+#endif /* C11 */
+
+#ifdef __STDC_WANT_IEC_60559_BFP_EXT__
+/* Number of decimal digits for which conversions between decimal
+   character strings and binary formats, in both directions, are
+   correctly rounded.  */
+#define CR_DECIMAL_DIG	__UINTMAX_MAX__
+#endif
+
+#ifdef __STDC_WANT_IEC_60559_TYPES_EXT__
+/* Constants for _FloatN and _FloatNx types from TS 18661-3.  See
+   comments above for their semantics.  */
+
+#ifdef __FLT16_MANT_DIG__
+#undef FLT16_MANT_DIG
+#define FLT16_MANT_DIG		__FLT16_MANT_DIG__
+#undef FLT16_DIG
+#define FLT16_DIG		__FLT16_DIG__
+#undef FLT16_MIN_EXP
+#define FLT16_MIN_EXP		__FLT16_MIN_EXP__
+#undef FLT16_MIN_10_EXP
+#define FLT16_MIN_10_EXP	__FLT16_MIN_10_EXP__
+#undef FLT16_MAX_EXP
+#define FLT16_MAX_EXP		__FLT16_MAX_EXP__
+#undef FLT16_MAX_10_EXP
+#define FLT16_MAX_10_EXP	__FLT16_MAX_10_EXP__
+#undef FLT16_MAX
+#define FLT16_MAX		__FLT16_MAX__
+#undef FLT16_EPSILON
+#define FLT16_EPSILON		__FLT16_EPSILON__
+#undef FLT16_MIN
+#define FLT16_MIN		__FLT16_MIN__
+#undef FLT16_DECIMAL_DIG
+#define FLT16_DECIMAL_DIG	__FLT16_DECIMAL_DIG__
+#undef FLT16_TRUE_MIN
+#define FLT16_TRUE_MIN		__FLT16_DENORM_MIN__
+#endif /* __FLT16_MANT_DIG__.  */
+
+#ifdef __FLT32_MANT_DIG__
+#undef FLT32_MANT_DIG
+#define FLT32_MANT_DIG		__FLT32_MANT_DIG__
+#undef FLT32_DIG
+#define FLT32_DIG		__FLT32_DIG__
+#undef FLT32_MIN_EXP
+#define FLT32_MIN_EXP		__FLT32_MIN_EXP__
+#undef FLT32_MIN_10_EXP
+#define FLT32_MIN_10_EXP	__FLT32_MIN_10_EXP__
+#undef FLT32_MAX_EXP
+#define FLT32_MAX_EXP		__FLT32_MAX_EXP__
+#undef FLT32_MAX_10_EXP
+#define FLT32_MAX_10_EXP	__FLT32_MAX_10_EXP__
+#undef FLT32_MAX
+#define FLT32_MAX		__FLT32_MAX__
+#undef FLT32_EPSILON
+#define FLT32_EPSILON		__FLT32_EPSILON__
+#undef FLT32_MIN
+#define FLT32_MIN		__FLT32_MIN__
+#undef FLT32_DECIMAL_DIG
+#define FLT32_DECIMAL_DIG	__FLT32_DECIMAL_DIG__
+#undef FLT32_TRUE_MIN
+#define FLT32_TRUE_MIN		__FLT32_DENORM_MIN__
+#endif /* __FLT32_MANT_DIG__.  */
+
+#ifdef __FLT64_MANT_DIG__
+#undef FLT64_MANT_DIG
+#define FLT64_MANT_DIG		__FLT64_MANT_DIG__
+#undef FLT64_DIG
+#define FLT64_DIG		__FLT64_DIG__
+#undef FLT64_MIN_EXP
+#define FLT64_MIN_EXP		__FLT64_MIN_EXP__
+#undef FLT64_MIN_10_EXP
+#define FLT64_MIN_10_EXP	__FLT64_MIN_10_EXP__
+#undef FLT64_MAX_EXP
+#define FLT64_MAX_EXP		__FLT64_MAX_EXP__
+#undef FLT64_MAX_10_EXP
+#define FLT64_MAX_10_EXP	__FLT64_MAX_10_EXP__
+#undef FLT64_MAX
+#define FLT64_MAX		__FLT64_MAX__
+#undef FLT64_EPSILON
+#define FLT64_EPSILON		__FLT64_EPSILON__
+#undef FLT64_MIN
+#define FLT64_MIN		__FLT64_MIN__
+#undef FLT64_DECIMAL_DIG
+#define FLT64_DECIMAL_DIG	__FLT64_DECIMAL_DIG__
+#undef FLT64_TRUE_MIN
+#define FLT64_TRUE_MIN		__FLT64_DENORM_MIN__
+#endif /* __FLT64_MANT_DIG__.  */
+
+#ifdef __FLT128_MANT_DIG__
+#undef FLT128_MANT_DIG
+#define FLT128_MANT_DIG		__FLT128_MANT_DIG__
+#undef FLT128_DIG
+#define FLT128_DIG		__FLT128_DIG__
+#undef FLT128_MIN_EXP
+#define FLT128_MIN_EXP		__FLT128_MIN_EXP__
+#undef FLT128_MIN_10_EXP
+#define FLT128_MIN_10_EXP	__FLT128_MIN_10_EXP__
+#undef FLT128_MAX_EXP
+#define FLT128_MAX_EXP		__FLT128_MAX_EXP__
+#undef FLT128_MAX_10_EXP
+#define FLT128_MAX_10_EXP	__FLT128_MAX_10_EXP__
+#undef FLT128_MAX
+#define FLT128_MAX		__FLT128_MAX__
+#undef FLT128_EPSILON
+#define FLT128_EPSILON		__FLT128_EPSILON__
+#undef FLT128_MIN
+#define FLT128_MIN		__FLT128_MIN__
+#undef FLT128_DECIMAL_DIG
+#define FLT128_DECIMAL_DIG	__FLT128_DECIMAL_DIG__
+#undef FLT128_TRUE_MIN
+#define FLT128_TRUE_MIN		__FLT128_DENORM_MIN__
+#endif /* __FLT128_MANT_DIG__.  */
+
+#ifdef __FLT32X_MANT_DIG__
+#undef FLT32X_MANT_DIG
+#define FLT32X_MANT_DIG		__FLT32X_MANT_DIG__
+#undef FLT32X_DIG
+#define FLT32X_DIG		__FLT32X_DIG__
+#undef FLT32X_MIN_EXP
+#define FLT32X_MIN_EXP		__FLT32X_MIN_EXP__
+#undef FLT32X_MIN_10_EXP
+#define FLT32X_MIN_10_EXP	__FLT32X_MIN_10_EXP__
+#undef FLT32X_MAX_EXP
+#define FLT32X_MAX_EXP		__FLT32X_MAX_EXP__
+#undef FLT32X_MAX_10_EXP
+#define FLT32X_MAX_10_EXP	__FLT32X_MAX_10_EXP__
+#undef FLT32X_MAX
+#define FLT32X_MAX		__FLT32X_MAX__
+#undef FLT32X_EPSILON
+#define FLT32X_EPSILON		__FLT32X_EPSILON__
+#undef FLT32X_MIN
+#define FLT32X_MIN		__FLT32X_MIN__
+#undef FLT32X_DECIMAL_DIG
+#define FLT32X_DECIMAL_DIG	__FLT32X_DECIMAL_DIG__
+#undef FLT32X_TRUE_MIN
+#define FLT32X_TRUE_MIN		__FLT32X_DENORM_MIN__
+#endif /* __FLT32X_MANT_DIG__.  */
+
+#ifdef __FLT64X_MANT_DIG__
+#undef FLT64X_MANT_DIG
+#define FLT64X_MANT_DIG		__FLT64X_MANT_DIG__
+#undef FLT64X_DIG
+#define FLT64X_DIG		__FLT64X_DIG__
+#undef FLT64X_MIN_EXP
+#define FLT64X_MIN_EXP		__FLT64X_MIN_EXP__
+#undef FLT64X_MIN_10_EXP
+#define FLT64X_MIN_10_EXP	__FLT64X_MIN_10_EXP__
+#undef FLT64X_MAX_EXP
+#define FLT64X_MAX_EXP		__FLT64X_MAX_EXP__
+#undef FLT64X_MAX_10_EXP
+#define FLT64X_MAX_10_EXP	__FLT64X_MAX_10_EXP__
+#undef FLT64X_MAX
+#define FLT64X_MAX		__FLT64X_MAX__
+#undef FLT64X_EPSILON
+#define FLT64X_EPSILON		__FLT64X_EPSILON__
+#undef FLT64X_MIN
+#define FLT64X_MIN		__FLT64X_MIN__
+#undef FLT64X_DECIMAL_DIG
+#define FLT64X_DECIMAL_DIG	__FLT64X_DECIMAL_DIG__
+#undef FLT64X_TRUE_MIN
+#define FLT64X_TRUE_MIN		__FLT64X_DENORM_MIN__
+#endif /* __FLT64X_MANT_DIG__.  */
+
+#ifdef __FLT128X_MANT_DIG__
+#undef FLT128X_MANT_DIG
+#define FLT128X_MANT_DIG	__FLT128X_MANT_DIG__
+#undef FLT128X_DIG
+#define FLT128X_DIG		__FLT128X_DIG__
+#undef FLT128X_MIN_EXP
+#define FLT128X_MIN_EXP		__FLT128X_MIN_EXP__
+#undef FLT128X_MIN_10_EXP
+#define FLT128X_MIN_10_EXP	__FLT128X_MIN_10_EXP__
+#undef FLT128X_MAX_EXP
+#define FLT128X_MAX_EXP		__FLT128X_MAX_EXP__
+#undef FLT128X_MAX_10_EXP
+#define FLT128X_MAX_10_EXP	__FLT128X_MAX_10_EXP__
+#undef FLT128X_MAX
+#define FLT128X_MAX		__FLT128X_MAX__
+#undef FLT128X_EPSILON
+#define FLT128X_EPSILON		__FLT128X_EPSILON__
+#undef FLT128X_MIN
+#define FLT128X_MIN		__FLT128X_MIN__
+#undef FLT128X_DECIMAL_DIG
+#define FLT128X_DECIMAL_DIG	__FLT128X_DECIMAL_DIG__
+#undef FLT128X_TRUE_MIN
+#define FLT128X_TRUE_MIN	__FLT128X_DENORM_MIN__
+#endif /* __FLT128X_MANT_DIG__.  */
+
+#endif /* __STDC_WANT_IEC_60559_TYPES_EXT__.  */
+
+#ifdef __STDC_WANT_DEC_FP__
+/* Draft Technical Report 24732, extension for decimal floating-point
+   arithmetic: Characteristic of decimal floating types <float.h>.  */
+
+/* Number of base-FLT_RADIX digits in the significand, p.  */
+#undef DEC32_MANT_DIG
+#undef DEC64_MANT_DIG
+#undef DEC128_MANT_DIG
+#define DEC32_MANT_DIG	__DEC32_MANT_DIG__
+#define DEC64_MANT_DIG	__DEC64_MANT_DIG__
+#define DEC128_MANT_DIG	__DEC128_MANT_DIG__
+
+/* Minimum exponent. */
+#undef DEC32_MIN_EXP
+#undef DEC64_MIN_EXP
+#undef DEC128_MIN_EXP
+#define DEC32_MIN_EXP	__DEC32_MIN_EXP__
+#define DEC64_MIN_EXP	__DEC64_MIN_EXP__
+#define DEC128_MIN_EXP	__DEC128_MIN_EXP__
+
+/* Maximum exponent. */
+#undef DEC32_MAX_EXP
+#undef DEC64_MAX_EXP
+#undef DEC128_MAX_EXP
+#define DEC32_MAX_EXP	__DEC32_MAX_EXP__
+#define DEC64_MAX_EXP	__DEC64_MAX_EXP__
+#define DEC128_MAX_EXP	__DEC128_MAX_EXP__
+
+/* Maximum representable finite decimal floating-point number
+   (there are 6, 15, and 33 9s after the decimal points respectively). */
+#undef DEC32_MAX
+#undef DEC64_MAX
+#undef DEC128_MAX
+#define DEC32_MAX   __DEC32_MAX__
+#define DEC64_MAX   __DEC64_MAX__
+#define DEC128_MAX  __DEC128_MAX__
+
+/* The difference between 1 and the least value greater than 1 that is
+   representable in the given floating point type. */
+#undef DEC32_EPSILON
+#undef DEC64_EPSILON
+#undef DEC128_EPSILON
+#define DEC32_EPSILON	__DEC32_EPSILON__
+#define DEC64_EPSILON	__DEC64_EPSILON__
+#define DEC128_EPSILON	__DEC128_EPSILON__
+
+/* Minimum normalized positive floating-point number. */
+#undef DEC32_MIN
+#undef DEC64_MIN
+#undef DEC128_MIN
+#define DEC32_MIN	__DEC32_MIN__
+#define DEC64_MIN	__DEC64_MIN__
+#define DEC128_MIN	__DEC128_MIN__
+
+/* Minimum subnormal positive floating-point number. */
+#undef DEC32_SUBNORMAL_MIN
+#undef DEC64_SUBNORMAL_MIN
+#undef DEC128_SUBNORMAL_MIN
+#define DEC32_SUBNORMAL_MIN       __DEC32_SUBNORMAL_MIN__
+#define DEC64_SUBNORMAL_MIN       __DEC64_SUBNORMAL_MIN__
+#define DEC128_SUBNORMAL_MIN      __DEC128_SUBNORMAL_MIN__
+
+/* The floating-point expression evaluation method.
+         -1  indeterminate
+         0  evaluate all operations and constants just to the range and
+            precision of the type
+         1  evaluate operations and constants of type _Decimal32 
+	    and _Decimal64 to the range and precision of the _Decimal64 
+            type, evaluate _Decimal128 operations and constants to the 
+	    range and precision of the _Decimal128 type;
+	 2  evaluate all operations and constants to the range and
+	    precision of the _Decimal128 type.  */
+
+#undef DEC_EVAL_METHOD
+#define DEC_EVAL_METHOD	__DEC_EVAL_METHOD__
+
+#endif /* __STDC_WANT_DEC_FP__ */
+
+#endif /* _FLOAT_H___ */
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/gcov.h b/lib/gcc/aarch64-elf/9.1.1/include/gcov.h
new file mode 100644
index 0000000..9d92edd
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/gcov.h
@@ -0,0 +1,41 @@
+/* GCOV interface routines.
+   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it under
+   the terms of the GNU General Public License as published by the Free
+   Software Foundation; either version 3, or (at your option) any later
+   version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or
+   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+   for more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GCOV_H
+#define GCC_GCOV_H
+
+/* Set all counters to zero.  */
+
+extern void __gcov_reset (void);
+
+/* Write profile information to a file.  */
+
+extern void __gcov_dump (void);
+
+/* Write profile information to a file and reset counters to zero.
+   The function does operations under a mutex.  */
+
+extern void __gcov_flush (void);
+
+#endif /* GCC_GCOV_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/iso646.h b/lib/gcc/aarch64-elf/9.1.1/include/iso646.h
new file mode 100644
index 0000000..01a1245
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/iso646.h
@@ -0,0 +1,45 @@
+/* Copyright (C) 1997-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO C Standard:  7.9  Alternative spellings  <iso646.h>
+ */
+
+#ifndef _ISO646_H
+#define _ISO646_H
+
+#ifndef __cplusplus
+#define and	&&
+#define and_eq	&=
+#define bitand	&
+#define bitor	|
+#define compl	~
+#define not	!
+#define not_eq	!=
+#define or	||
+#define or_eq	|=
+#define xor	^
+#define xor_eq	^=
+#endif
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/stdalign.h b/lib/gcc/aarch64-elf/9.1.1/include/stdalign.h
new file mode 100644
index 0000000..999c431
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/stdalign.h
@@ -0,0 +1,39 @@
+/* Copyright (C) 2011-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/* ISO C1X: 7.15 Alignment <stdalign.h>.  */
+
+#ifndef _STDALIGN_H
+#define _STDALIGN_H
+
+#ifndef __cplusplus
+
+#define alignas _Alignas
+#define alignof _Alignof
+
+#define __alignas_is_defined 1
+#define __alignof_is_defined 1
+
+#endif
+
+#endif	/* stdalign.h */
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/stdarg.h b/lib/gcc/aarch64-elf/9.1.1/include/stdarg.h
new file mode 100644
index 0000000..7d16fbf
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/stdarg.h
@@ -0,0 +1,127 @@
+/* Copyright (C) 1989-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO C Standard:  7.15  Variable arguments  <stdarg.h>
+ */
+
+#ifndef _STDARG_H
+#ifndef _ANSI_STDARG_H_
+#ifndef __need___va_list
+#define _STDARG_H
+#define _ANSI_STDARG_H_
+#endif /* not __need___va_list */
+#undef __need___va_list
+
+/* Define __gnuc_va_list.  */
+
+#ifndef __GNUC_VA_LIST
+#define __GNUC_VA_LIST
+typedef __builtin_va_list __gnuc_va_list;
+#endif
+
+/* Define the standard macros for the user,
+   if this invocation was from the user program.  */
+#ifdef _STDARG_H
+
+#define va_start(v,l)	__builtin_va_start(v,l)
+#define va_end(v)	__builtin_va_end(v)
+#define va_arg(v,l)	__builtin_va_arg(v,l)
+#if !defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L \
+    || __cplusplus + 0 >= 201103L
+#define va_copy(d,s)	__builtin_va_copy(d,s)
+#endif
+#define __va_copy(d,s)	__builtin_va_copy(d,s)
+
+/* Define va_list, if desired, from __gnuc_va_list. */
+/* We deliberately do not define va_list when called from
+   stdio.h, because ANSI C says that stdio.h is not supposed to define
+   va_list.  stdio.h needs to have access to that data type, 
+   but must not use that name.  It should use the name __gnuc_va_list,
+   which is safe because it is reserved for the implementation.  */
+
+#ifdef _BSD_VA_LIST
+#undef _BSD_VA_LIST
+#endif
+
+#if defined(__svr4__) || (defined(_SCO_DS) && !defined(__VA_LIST))
+/* SVR4.2 uses _VA_LIST for an internal alias for va_list,
+   so we must avoid testing it and setting it here.
+   SVR4 uses _VA_LIST as a flag in stdarg.h, but we should
+   have no conflict with that.  */
+#ifndef _VA_LIST_
+#define _VA_LIST_
+#ifdef __i860__
+#ifndef _VA_LIST
+#define _VA_LIST va_list
+#endif
+#endif /* __i860__ */
+typedef __gnuc_va_list va_list;
+#ifdef _SCO_DS
+#define __VA_LIST
+#endif
+#endif /* _VA_LIST_ */
+#else /* not __svr4__ || _SCO_DS */
+
+/* The macro _VA_LIST_ is the same thing used by this file in Ultrix.
+   But on BSD NET2 we must not test or define or undef it.
+   (Note that the comments in NET 2's ansi.h
+   are incorrect for _VA_LIST_--see stdio.h!)  */
+#if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__) || defined(WINNT)
+/* The macro _VA_LIST_DEFINED is used in Windows NT 3.5  */
+#ifndef _VA_LIST_DEFINED
+/* The macro _VA_LIST is used in SCO Unix 3.2.  */
+#ifndef _VA_LIST
+/* The macro _VA_LIST_T_H is used in the Bull dpx2  */
+#ifndef _VA_LIST_T_H
+/* The macro __va_list__ is used by BeOS.  */
+#ifndef __va_list__
+typedef __gnuc_va_list va_list;
+#endif /* not __va_list__ */
+#endif /* not _VA_LIST_T_H */
+#endif /* not _VA_LIST */
+#endif /* not _VA_LIST_DEFINED */
+#if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__))
+#define _VA_LIST_
+#endif
+#ifndef _VA_LIST
+#define _VA_LIST
+#endif
+#ifndef _VA_LIST_DEFINED
+#define _VA_LIST_DEFINED
+#endif
+#ifndef _VA_LIST_T_H
+#define _VA_LIST_T_H
+#endif
+#ifndef __va_list__
+#define __va_list__
+#endif
+
+#endif /* not _VA_LIST_, except on certain systems */
+
+#endif /* not __svr4__ */
+
+#endif /* _STDARG_H */
+
+#endif /* not _ANSI_STDARG_H_ */
+#endif /* not _STDARG_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/stdatomic.h b/lib/gcc/aarch64-elf/9.1.1/include/stdatomic.h
new file mode 100644
index 0000000..96ee9b2
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/stdatomic.h
@@ -0,0 +1,243 @@
+/* Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/* ISO C11 Standard:  7.17  Atomics <stdatomic.h>.  */
+
+#ifndef _STDATOMIC_H
+#define _STDATOMIC_H
+
+typedef enum
+  {
+    memory_order_relaxed = __ATOMIC_RELAXED,
+    memory_order_consume = __ATOMIC_CONSUME,
+    memory_order_acquire = __ATOMIC_ACQUIRE,
+    memory_order_release = __ATOMIC_RELEASE,
+    memory_order_acq_rel = __ATOMIC_ACQ_REL,
+    memory_order_seq_cst = __ATOMIC_SEQ_CST
+  } memory_order;
+
+
+typedef _Atomic _Bool atomic_bool;
+typedef _Atomic char atomic_char;
+typedef _Atomic signed char atomic_schar;
+typedef _Atomic unsigned char atomic_uchar;
+typedef _Atomic short atomic_short;
+typedef _Atomic unsigned short atomic_ushort;
+typedef _Atomic int atomic_int;
+typedef _Atomic unsigned int atomic_uint;
+typedef _Atomic long atomic_long;
+typedef _Atomic unsigned long atomic_ulong;
+typedef _Atomic long long atomic_llong;
+typedef _Atomic unsigned long long atomic_ullong;
+typedef _Atomic __CHAR16_TYPE__ atomic_char16_t;
+typedef _Atomic __CHAR32_TYPE__ atomic_char32_t;
+typedef _Atomic __WCHAR_TYPE__ atomic_wchar_t;
+typedef _Atomic __INT_LEAST8_TYPE__ atomic_int_least8_t;
+typedef _Atomic __UINT_LEAST8_TYPE__ atomic_uint_least8_t;
+typedef _Atomic __INT_LEAST16_TYPE__ atomic_int_least16_t;
+typedef _Atomic __UINT_LEAST16_TYPE__ atomic_uint_least16_t;
+typedef _Atomic __INT_LEAST32_TYPE__ atomic_int_least32_t;
+typedef _Atomic __UINT_LEAST32_TYPE__ atomic_uint_least32_t;
+typedef _Atomic __INT_LEAST64_TYPE__ atomic_int_least64_t;
+typedef _Atomic __UINT_LEAST64_TYPE__ atomic_uint_least64_t;
+typedef _Atomic __INT_FAST8_TYPE__ atomic_int_fast8_t;
+typedef _Atomic __UINT_FAST8_TYPE__ atomic_uint_fast8_t;
+typedef _Atomic __INT_FAST16_TYPE__ atomic_int_fast16_t;
+typedef _Atomic __UINT_FAST16_TYPE__ atomic_uint_fast16_t;
+typedef _Atomic __INT_FAST32_TYPE__ atomic_int_fast32_t;
+typedef _Atomic __UINT_FAST32_TYPE__ atomic_uint_fast32_t;
+typedef _Atomic __INT_FAST64_TYPE__ atomic_int_fast64_t;
+typedef _Atomic __UINT_FAST64_TYPE__ atomic_uint_fast64_t;
+typedef _Atomic __INTPTR_TYPE__ atomic_intptr_t;
+typedef _Atomic __UINTPTR_TYPE__ atomic_uintptr_t;
+typedef _Atomic __SIZE_TYPE__ atomic_size_t;
+typedef _Atomic __PTRDIFF_TYPE__ atomic_ptrdiff_t;
+typedef _Atomic __INTMAX_TYPE__ atomic_intmax_t;
+typedef _Atomic __UINTMAX_TYPE__ atomic_uintmax_t;        
+
+
+#define ATOMIC_VAR_INIT(VALUE)	(VALUE)
+
+/* Initialize an atomic object pointed to by PTR with VAL.  */
+#define atomic_init(PTR, VAL)                           \
+  atomic_store_explicit (PTR, VAL, __ATOMIC_RELAXED)
+
+#define kill_dependency(Y)			\
+  __extension__					\
+  ({						\
+    __auto_type __kill_dependency_tmp = (Y);	\
+    __kill_dependency_tmp;			\
+  })
+
+extern void atomic_thread_fence (memory_order);
+#define atomic_thread_fence(MO)	__atomic_thread_fence (MO)
+extern void atomic_signal_fence (memory_order);
+#define atomic_signal_fence(MO)	__atomic_signal_fence  (MO)
+#define atomic_is_lock_free(OBJ) __atomic_is_lock_free (sizeof (*(OBJ)), (OBJ))
+
+#define ATOMIC_BOOL_LOCK_FREE		__GCC_ATOMIC_BOOL_LOCK_FREE
+#define ATOMIC_CHAR_LOCK_FREE		__GCC_ATOMIC_CHAR_LOCK_FREE
+#define ATOMIC_CHAR16_T_LOCK_FREE	__GCC_ATOMIC_CHAR16_T_LOCK_FREE
+#define ATOMIC_CHAR32_T_LOCK_FREE	__GCC_ATOMIC_CHAR32_T_LOCK_FREE
+#define ATOMIC_WCHAR_T_LOCK_FREE	__GCC_ATOMIC_WCHAR_T_LOCK_FREE
+#define ATOMIC_SHORT_LOCK_FREE		__GCC_ATOMIC_SHORT_LOCK_FREE
+#define ATOMIC_INT_LOCK_FREE		__GCC_ATOMIC_INT_LOCK_FREE
+#define ATOMIC_LONG_LOCK_FREE		__GCC_ATOMIC_LONG_LOCK_FREE
+#define ATOMIC_LLONG_LOCK_FREE		__GCC_ATOMIC_LLONG_LOCK_FREE
+#define ATOMIC_POINTER_LOCK_FREE	__GCC_ATOMIC_POINTER_LOCK_FREE
+
+
+/* Note that these macros require __typeof__ and __auto_type to remove
+   _Atomic qualifiers (and const qualifiers, if those are valid on
+   macro operands).
+   
+   Also note that the header file uses the generic form of __atomic
+   builtins, which requires the address to be taken of the value
+   parameter, and then we pass that value on.  This allows the macros
+   to work for any type, and the compiler is smart enough to convert
+   these to lock-free _N variants if possible, and throw away the
+   temps.  */
+
+#define atomic_store_explicit(PTR, VAL, MO)				\
+  __extension__								\
+  ({									\
+    __auto_type __atomic_store_ptr = (PTR);				\
+    __typeof__ (*__atomic_store_ptr) __atomic_store_tmp = (VAL);	\
+    __atomic_store (__atomic_store_ptr, &__atomic_store_tmp, (MO));	\
+  })
+
+#define atomic_store(PTR, VAL)				\
+  atomic_store_explicit (PTR, VAL, __ATOMIC_SEQ_CST)
+
+
+#define atomic_load_explicit(PTR, MO)					\
+  __extension__								\
+  ({									\
+    __auto_type __atomic_load_ptr = (PTR);				\
+    __typeof__ (*__atomic_load_ptr) __atomic_load_tmp;			\
+    __atomic_load (__atomic_load_ptr, &__atomic_load_tmp, (MO));	\
+    __atomic_load_tmp;							\
+  })
+
+#define atomic_load(PTR)  atomic_load_explicit (PTR, __ATOMIC_SEQ_CST)
+
+
+#define atomic_exchange_explicit(PTR, VAL, MO)				\
+  __extension__								\
+  ({									\
+    __auto_type __atomic_exchange_ptr = (PTR);				\
+    __typeof__ (*__atomic_exchange_ptr) __atomic_exchange_val = (VAL);	\
+    __typeof__ (*__atomic_exchange_ptr) __atomic_exchange_tmp;		\
+    __atomic_exchange (__atomic_exchange_ptr, &__atomic_exchange_val,	\
+		       &__atomic_exchange_tmp, (MO));			\
+    __atomic_exchange_tmp;						\
+  })
+
+#define atomic_exchange(PTR, VAL) 			\
+  atomic_exchange_explicit (PTR, VAL, __ATOMIC_SEQ_CST)
+
+
+#define atomic_compare_exchange_strong_explicit(PTR, VAL, DES, SUC, FAIL) \
+  __extension__								\
+  ({									\
+    __auto_type __atomic_compare_exchange_ptr = (PTR);			\
+    __typeof__ (*__atomic_compare_exchange_ptr) __atomic_compare_exchange_tmp \
+      = (DES);								\
+    __atomic_compare_exchange (__atomic_compare_exchange_ptr, (VAL),	\
+			       &__atomic_compare_exchange_tmp, 0,	\
+			       (SUC), (FAIL));				\
+  })
+
+#define atomic_compare_exchange_strong(PTR, VAL, DES) 			   \
+  atomic_compare_exchange_strong_explicit (PTR, VAL, DES, __ATOMIC_SEQ_CST, \
+					   __ATOMIC_SEQ_CST)
+
+#define atomic_compare_exchange_weak_explicit(PTR, VAL, DES, SUC, FAIL) \
+  __extension__								\
+  ({									\
+    __auto_type __atomic_compare_exchange_ptr = (PTR);			\
+    __typeof__ (*__atomic_compare_exchange_ptr) __atomic_compare_exchange_tmp \
+      = (DES);								\
+    __atomic_compare_exchange (__atomic_compare_exchange_ptr, (VAL),	\
+			       &__atomic_compare_exchange_tmp, 1,	\
+			       (SUC), (FAIL));				\
+  })
+
+#define atomic_compare_exchange_weak(PTR, VAL, DES)			\
+  atomic_compare_exchange_weak_explicit (PTR, VAL, DES, __ATOMIC_SEQ_CST, \
+					 __ATOMIC_SEQ_CST)
+
+
+
+#define atomic_fetch_add(PTR, VAL) __atomic_fetch_add ((PTR), (VAL), 	\
+						       __ATOMIC_SEQ_CST)
+#define atomic_fetch_add_explicit(PTR, VAL, MO) 			\
+			  __atomic_fetch_add ((PTR), (VAL), (MO))
+
+#define atomic_fetch_sub(PTR, VAL) __atomic_fetch_sub ((PTR), (VAL), 	\
+						       __ATOMIC_SEQ_CST)
+#define atomic_fetch_sub_explicit(PTR, VAL, MO) 			\
+			  __atomic_fetch_sub ((PTR), (VAL), (MO))
+
+#define atomic_fetch_or(PTR, VAL) __atomic_fetch_or ((PTR), (VAL), 	\
+						       __ATOMIC_SEQ_CST)
+#define atomic_fetch_or_explicit(PTR, VAL, MO) 			\
+			  __atomic_fetch_or ((PTR), (VAL), (MO))
+
+#define atomic_fetch_xor(PTR, VAL) __atomic_fetch_xor ((PTR), (VAL), 	\
+						       __ATOMIC_SEQ_CST)
+#define atomic_fetch_xor_explicit(PTR, VAL, MO) 			\
+			  __atomic_fetch_xor ((PTR), (VAL), (MO))
+
+#define atomic_fetch_and(PTR, VAL) __atomic_fetch_and ((PTR), (VAL), 	\
+						       __ATOMIC_SEQ_CST)
+#define atomic_fetch_and_explicit(PTR, VAL, MO) 			\
+			  __atomic_fetch_and ((PTR), (VAL), (MO))
+
+
+typedef _Atomic struct
+{
+#if __GCC_ATOMIC_TEST_AND_SET_TRUEVAL == 1
+  _Bool __val;
+#else
+  unsigned char __val;
+#endif
+} atomic_flag;
+
+#define ATOMIC_FLAG_INIT	{ 0 }
+
+
+extern _Bool atomic_flag_test_and_set (volatile atomic_flag *);
+#define atomic_flag_test_and_set(PTR) 					\
+			__atomic_test_and_set ((PTR), __ATOMIC_SEQ_CST)
+extern _Bool atomic_flag_test_and_set_explicit (volatile atomic_flag *,
+						memory_order);
+#define atomic_flag_test_and_set_explicit(PTR, MO)			\
+			__atomic_test_and_set ((PTR), (MO))
+
+extern void atomic_flag_clear (volatile atomic_flag *);
+#define atomic_flag_clear(PTR)	__atomic_clear ((PTR), __ATOMIC_SEQ_CST)
+extern void atomic_flag_clear_explicit (volatile atomic_flag *, memory_order);
+#define atomic_flag_clear_explicit(PTR, MO)   __atomic_clear ((PTR), (MO))
+
+#endif  /* _STDATOMIC_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/stdbool.h b/lib/gcc/aarch64-elf/9.1.1/include/stdbool.h
new file mode 100644
index 0000000..3617ff4
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/stdbool.h
@@ -0,0 +1,54 @@
+/* Copyright (C) 1998-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO C Standard:  7.16  Boolean type and values  <stdbool.h>
+ */
+
+#ifndef _STDBOOL_H
+#define _STDBOOL_H
+
+#ifndef __cplusplus
+
+#define bool	_Bool
+#define true	1
+#define false	0
+
+#else /* __cplusplus */
+
+/* Supporting _Bool in C++ is a GCC extension.  */
+#define _Bool	bool
+
+#if __cplusplus < 201103L
+/* Defining these macros in C++98 is a GCC extension.  */
+#define bool	bool
+#define false	false
+#define true	true
+#endif
+
+#endif /* __cplusplus */
+
+/* Signal that all the definitions are present.  */
+#define __bool_true_false_are_defined	1
+
+#endif	/* stdbool.h */
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/stddef.h b/lib/gcc/aarch64-elf/9.1.1/include/stddef.h
new file mode 100644
index 0000000..da692e1
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/stddef.h
@@ -0,0 +1,440 @@
+/* Copyright (C) 1989-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO C Standard:  7.17  Common definitions  <stddef.h>
+ */
+#if (!defined(_STDDEF_H) && !defined(_STDDEF_H_) && !defined(_ANSI_STDDEF_H) \
+     && !defined(__STDDEF_H__)) \
+    || defined(__need_wchar_t) || defined(__need_size_t) \
+    || defined(__need_ptrdiff_t) || defined(__need_NULL) \
+    || defined(__need_wint_t)
+
+/* Any one of these symbols __need_* means that GNU libc
+   wants us just to define one data type.  So don't define
+   the symbols that indicate this file's entire job has been done.  */
+#if (!defined(__need_wchar_t) && !defined(__need_size_t)	\
+     && !defined(__need_ptrdiff_t) && !defined(__need_NULL)	\
+     && !defined(__need_wint_t))
+#define _STDDEF_H
+#define _STDDEF_H_
+/* snaroff@next.com says the NeXT needs this.  */
+#define _ANSI_STDDEF_H
+#endif
+
+#ifndef __sys_stdtypes_h
+/* This avoids lossage on SunOS but only if stdtypes.h comes first.
+   There's no way to win with the other order!  Sun lossage.  */
+
+#if defined(__NetBSD__)
+#include <machine/ansi.h>
+#endif
+
+#if defined (__FreeBSD__)
+#include <sys/_types.h>
+#endif
+
+#if defined(__NetBSD__)
+#if !defined(_SIZE_T_) && !defined(_BSD_SIZE_T_)
+#define _SIZE_T
+#endif
+#if !defined(_PTRDIFF_T_) && !defined(_BSD_PTRDIFF_T_)
+#define _PTRDIFF_T
+#endif
+/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
+   instead of _WCHAR_T_. */
+#if !defined(_WCHAR_T_) && !defined(_BSD_WCHAR_T_)
+#ifndef _BSD_WCHAR_T_
+#define _WCHAR_T
+#endif
+#endif
+/* Undef _FOO_T_ if we are supposed to define foo_t.  */
+#if defined (__need_ptrdiff_t) || defined (_STDDEF_H_)
+#undef _PTRDIFF_T_
+#undef _BSD_PTRDIFF_T_
+#endif
+#if defined (__need_size_t) || defined (_STDDEF_H_)
+#undef _SIZE_T_
+#undef _BSD_SIZE_T_
+#endif
+#if defined (__need_wchar_t) || defined (_STDDEF_H_)
+#undef _WCHAR_T_
+#undef _BSD_WCHAR_T_
+#endif
+#endif /* defined(__NetBSD__) */
+
+/* Sequent's header files use _PTRDIFF_T_ in some conflicting way.
+   Just ignore it.  */
+#if defined (__sequent__) && defined (_PTRDIFF_T_)
+#undef _PTRDIFF_T_
+#endif
+
+/* On VxWorks, <type/vxTypesBase.h> may have defined macros like
+   _TYPE_size_t which will typedef size_t.  fixincludes patched the
+   vxTypesBase.h so that this macro is only defined if _GCC_SIZE_T is
+   not defined, and so that defining this macro defines _GCC_SIZE_T.
+   If we find that the macros are still defined at this point, we must
+   invoke them so that the type is defined as expected.  */
+#if defined (_TYPE_ptrdiff_t) && (defined (__need_ptrdiff_t) || defined (_STDDEF_H_))
+_TYPE_ptrdiff_t;
+#undef _TYPE_ptrdiff_t
+#endif
+#if defined (_TYPE_size_t) && (defined (__need_size_t) || defined (_STDDEF_H_))
+_TYPE_size_t;
+#undef _TYPE_size_t
+#endif
+#if defined (_TYPE_wchar_t) && (defined (__need_wchar_t) || defined (_STDDEF_H_))
+_TYPE_wchar_t;
+#undef _TYPE_wchar_t
+#endif
+
+/* In case nobody has defined these types, but we aren't running under
+   GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE_TYPE__, and
+   __WCHAR_TYPE__ have reasonable values.  This can happen if the
+   parts of GCC is compiled by an older compiler, that actually
+   include gstddef.h, such as collect2.  */
+
+/* Signed type of difference of two pointers.  */
+
+/* Define this type if we are doing the whole job,
+   or if we want this type in particular.  */
+#if defined (_STDDEF_H) || defined (__need_ptrdiff_t)
+#ifndef _PTRDIFF_T	/* in case <sys/types.h> has defined it. */
+#ifndef _T_PTRDIFF_
+#ifndef _T_PTRDIFF
+#ifndef __PTRDIFF_T
+#ifndef _PTRDIFF_T_
+#ifndef _BSD_PTRDIFF_T_
+#ifndef ___int_ptrdiff_t_h
+#ifndef _GCC_PTRDIFF_T
+#ifndef _PTRDIFF_T_DECLARED /* DragonFly */
+#define _PTRDIFF_T
+#define _T_PTRDIFF_
+#define _T_PTRDIFF
+#define __PTRDIFF_T
+#define _PTRDIFF_T_
+#define _BSD_PTRDIFF_T_
+#define ___int_ptrdiff_t_h
+#define _GCC_PTRDIFF_T
+#define _PTRDIFF_T_DECLARED
+#ifndef __PTRDIFF_TYPE__
+#define __PTRDIFF_TYPE__ long int
+#endif
+typedef __PTRDIFF_TYPE__ ptrdiff_t;
+#endif /* _PTRDIFF_T_DECLARED */
+#endif /* _GCC_PTRDIFF_T */
+#endif /* ___int_ptrdiff_t_h */
+#endif /* _BSD_PTRDIFF_T_ */
+#endif /* _PTRDIFF_T_ */
+#endif /* __PTRDIFF_T */
+#endif /* _T_PTRDIFF */
+#endif /* _T_PTRDIFF_ */
+#endif /* _PTRDIFF_T */
+
+/* If this symbol has done its job, get rid of it.  */
+#undef	__need_ptrdiff_t
+
+#endif /* _STDDEF_H or __need_ptrdiff_t.  */
+
+/* Unsigned type of `sizeof' something.  */
+
+/* Define this type if we are doing the whole job,
+   or if we want this type in particular.  */
+#if defined (_STDDEF_H) || defined (__need_size_t)
+#ifndef __size_t__	/* BeOS */
+#ifndef __SIZE_T__	/* Cray Unicos/Mk */
+#ifndef _SIZE_T	/* in case <sys/types.h> has defined it. */
+#ifndef _SYS_SIZE_T_H
+#ifndef _T_SIZE_
+#ifndef _T_SIZE
+#ifndef __SIZE_T
+#ifndef _SIZE_T_
+#ifndef _BSD_SIZE_T_
+#ifndef _SIZE_T_DEFINED_
+#ifndef _SIZE_T_DEFINED
+#ifndef _BSD_SIZE_T_DEFINED_	/* Darwin */
+#ifndef _SIZE_T_DECLARED	/* FreeBSD 5 */
+#ifndef ___int_size_t_h
+#ifndef _GCC_SIZE_T
+#ifndef _SIZET_
+#ifndef __size_t
+#define __size_t__	/* BeOS */
+#define __SIZE_T__	/* Cray Unicos/Mk */
+#define _SIZE_T
+#define _SYS_SIZE_T_H
+#define _T_SIZE_
+#define _T_SIZE
+#define __SIZE_T
+#define _SIZE_T_
+#define _BSD_SIZE_T_
+#define _SIZE_T_DEFINED_
+#define _SIZE_T_DEFINED
+#define _BSD_SIZE_T_DEFINED_	/* Darwin */
+#define _SIZE_T_DECLARED	/* FreeBSD 5 */
+#define ___int_size_t_h
+#define _GCC_SIZE_T
+#define _SIZET_
+#if defined (__FreeBSD__) \
+  || defined(__DragonFly__) \
+  || defined(__FreeBSD_kernel__) \
+  || defined(__VMS__)
+/* __size_t is a typedef, must not trash it.  */
+#else
+#define __size_t
+#endif
+#ifndef __SIZE_TYPE__
+#define __SIZE_TYPE__ long unsigned int
+#endif
+#if !(defined (__GNUG__) && defined (size_t))
+typedef __SIZE_TYPE__ size_t;
+#ifdef __BEOS__
+typedef long ssize_t;
+#endif /* __BEOS__ */
+#endif /* !(defined (__GNUG__) && defined (size_t)) */
+#endif /* __size_t */
+#endif /* _SIZET_ */
+#endif /* _GCC_SIZE_T */
+#endif /* ___int_size_t_h */
+#endif /* _SIZE_T_DECLARED */
+#endif /* _BSD_SIZE_T_DEFINED_ */
+#endif /* _SIZE_T_DEFINED */
+#endif /* _SIZE_T_DEFINED_ */
+#endif /* _BSD_SIZE_T_ */
+#endif /* _SIZE_T_ */
+#endif /* __SIZE_T */
+#endif /* _T_SIZE */
+#endif /* _T_SIZE_ */
+#endif /* _SYS_SIZE_T_H */
+#endif /* _SIZE_T */
+#endif /* __SIZE_T__ */
+#endif /* __size_t__ */
+#undef	__need_size_t
+#endif /* _STDDEF_H or __need_size_t.  */
+
+
+/* Wide character type.
+   Locale-writers should change this as necessary to
+   be big enough to hold unique values not between 0 and 127,
+   and not (wchar_t) -1, for each defined multibyte character.  */
+
+/* Define this type if we are doing the whole job,
+   or if we want this type in particular.  */
+#if defined (_STDDEF_H) || defined (__need_wchar_t)
+#ifndef __wchar_t__	/* BeOS */
+#ifndef __WCHAR_T__	/* Cray Unicos/Mk */
+#ifndef _WCHAR_T
+#ifndef _T_WCHAR_
+#ifndef _T_WCHAR
+#ifndef __WCHAR_T
+#ifndef _WCHAR_T_
+#ifndef _BSD_WCHAR_T_
+#ifndef _BSD_WCHAR_T_DEFINED_    /* Darwin */
+#ifndef _BSD_RUNE_T_DEFINED_	/* Darwin */
+#ifndef _WCHAR_T_DECLARED /* FreeBSD 5 */
+#ifndef _WCHAR_T_DEFINED_
+#ifndef _WCHAR_T_DEFINED
+#ifndef _WCHAR_T_H
+#ifndef ___int_wchar_t_h
+#ifndef __INT_WCHAR_T_H
+#ifndef _GCC_WCHAR_T
+#define __wchar_t__	/* BeOS */
+#define __WCHAR_T__	/* Cray Unicos/Mk */
+#define _WCHAR_T
+#define _T_WCHAR_
+#define _T_WCHAR
+#define __WCHAR_T
+#define _WCHAR_T_
+#define _BSD_WCHAR_T_
+#define _WCHAR_T_DEFINED_
+#define _WCHAR_T_DEFINED
+#define _WCHAR_T_H
+#define ___int_wchar_t_h
+#define __INT_WCHAR_T_H
+#define _GCC_WCHAR_T
+#define _WCHAR_T_DECLARED
+
+/* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
+   instead of _WCHAR_T_, and _BSD_RUNE_T_ (which, unlike the other
+   symbols in the _FOO_T_ family, stays defined even after its
+   corresponding type is defined).  If we define wchar_t, then we
+   must undef _WCHAR_T_; for BSD/386 1.1 (and perhaps others), if
+   we undef _WCHAR_T_, then we must also define rune_t, since 
+   headers like runetype.h assume that if machine/ansi.h is included,
+   and _BSD_WCHAR_T_ is not defined, then rune_t is available.
+   machine/ansi.h says, "Note that _WCHAR_T_ and _RUNE_T_ must be of
+   the same type." */
+#ifdef _BSD_WCHAR_T_
+#undef _BSD_WCHAR_T_
+#ifdef _BSD_RUNE_T_
+#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
+typedef _BSD_RUNE_T_ rune_t;
+#define _BSD_WCHAR_T_DEFINED_
+#define _BSD_RUNE_T_DEFINED_	/* Darwin */
+#if defined (__FreeBSD__) && (__FreeBSD__ < 5)
+/* Why is this file so hard to maintain properly?  In contrast to
+   the comment above regarding BSD/386 1.1, on FreeBSD for as long
+   as the symbol has existed, _BSD_RUNE_T_ must not stay defined or
+   redundant typedefs will occur when stdlib.h is included after this file. */
+#undef _BSD_RUNE_T_
+#endif
+#endif
+#endif
+#endif
+/* FreeBSD 5 can't be handled well using "traditional" logic above
+   since it no longer defines _BSD_RUNE_T_ yet still desires to export
+   rune_t in some cases... */
+#if defined (__FreeBSD__) && (__FreeBSD__ >= 5)
+#if !defined (_ANSI_SOURCE) && !defined (_POSIX_SOURCE)
+#if __BSD_VISIBLE
+#ifndef _RUNE_T_DECLARED
+typedef __rune_t        rune_t;
+#define _RUNE_T_DECLARED
+#endif
+#endif
+#endif
+#endif
+
+#ifndef __WCHAR_TYPE__
+#define __WCHAR_TYPE__ int
+#endif
+#ifndef __cplusplus
+typedef __WCHAR_TYPE__ wchar_t;
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif /* _WCHAR_T_DECLARED */
+#endif /* _BSD_RUNE_T_DEFINED_ */
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif
+#endif /* __WCHAR_T__ */
+#endif /* __wchar_t__ */
+#undef	__need_wchar_t
+#endif /* _STDDEF_H or __need_wchar_t.  */
+
+#if defined (__need_wint_t)
+#ifndef _WINT_T
+#define _WINT_T
+
+#ifndef __WINT_TYPE__
+#define __WINT_TYPE__ unsigned int
+#endif
+typedef __WINT_TYPE__ wint_t;
+#endif
+#undef __need_wint_t
+#endif
+
+#if defined(__NetBSD__)
+/*  The references to _GCC_PTRDIFF_T_, _GCC_SIZE_T_, and _GCC_WCHAR_T_
+    are probably typos and should be removed before 2.8 is released.  */
+#ifdef _GCC_PTRDIFF_T_
+#undef _PTRDIFF_T_
+#undef _BSD_PTRDIFF_T_
+#endif
+#ifdef _GCC_SIZE_T_
+#undef _SIZE_T_
+#undef _BSD_SIZE_T_
+#endif
+#ifdef _GCC_WCHAR_T_
+#undef _WCHAR_T_
+#undef _BSD_WCHAR_T_
+#endif
+/*  The following ones are the real ones.  */
+#ifdef _GCC_PTRDIFF_T
+#undef _PTRDIFF_T_
+#undef _BSD_PTRDIFF_T_
+#endif
+#ifdef _GCC_SIZE_T
+#undef _SIZE_T_
+#undef _BSD_SIZE_T_
+#endif
+#ifdef _GCC_WCHAR_T
+#undef _WCHAR_T_
+#undef _BSD_WCHAR_T_
+#endif
+#endif /* __NetBSD__ */
+
+#endif /* __sys_stdtypes_h */
+
+/* A null pointer constant.  */
+
+#if defined (_STDDEF_H) || defined (__need_NULL)
+#undef NULL		/* in case <stdio.h> has defined it. */
+#ifdef __GNUG__
+#define NULL __null
+#else   /* G++ */
+#ifndef __cplusplus
+#define NULL ((void *)0)
+#else   /* C++ */
+#define NULL 0
+#endif  /* C++ */
+#endif  /* G++ */
+#endif	/* NULL not defined and <stddef.h> or need NULL.  */
+#undef	__need_NULL
+
+#ifdef _STDDEF_H
+
+/* Offset of member MEMBER in a struct of type TYPE. */
+#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
+
+#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) \
+  || (defined(__cplusplus) && __cplusplus >= 201103L)
+#ifndef _GCC_MAX_ALIGN_T
+#define _GCC_MAX_ALIGN_T
+/* Type whose alignment is supported in every context and is at least
+   as great as that of any standard type not using alignment
+   specifiers.  */
+typedef struct {
+  long long __max_align_ll __attribute__((__aligned__(__alignof__(long long))));
+  long double __max_align_ld __attribute__((__aligned__(__alignof__(long double))));
+  /* _Float128 is defined as a basic type, so max_align_t must be
+     sufficiently aligned for it.  This code must work in C++, so we
+     use __float128 here; that is only available on some
+     architectures, but only on i386 is extra alignment needed for
+     __float128.  */
+#ifdef __i386__
+  __float128 __max_align_f128 __attribute__((__aligned__(__alignof(__float128))));
+#endif
+} max_align_t;
+#endif
+#endif /* C11 or C++11.  */
+
+#if defined(__cplusplus) && __cplusplus >= 201103L
+#ifndef _GXX_NULLPTR_T
+#define _GXX_NULLPTR_T
+  typedef decltype(nullptr) nullptr_t;
+#endif
+#endif /* C++11.  */
+
+#endif /* _STDDEF_H was defined this time */
+
+#endif /* !_STDDEF_H && !_STDDEF_H_ && !_ANSI_STDDEF_H && !__STDDEF_H__
+	  || __need_XXX was not defined before */
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/stdfix.h b/lib/gcc/aarch64-elf/9.1.1/include/stdfix.h
new file mode 100644
index 0000000..c20fa68
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/stdfix.h
@@ -0,0 +1,204 @@
+/* Copyright (C) 2007-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/* ISO/IEC JTC1 SC22 WG14 N1169
+ * Date: 2006-04-04
+ * ISO/IEC TR 18037
+ * Programming languages - C - Extensions to support embedded processors
+ */
+
+#ifndef _STDFIX_H
+#define _STDFIX_H
+
+/* 7.18a.1 Introduction.  */
+
+#undef fract
+#undef accum
+#undef sat
+#define fract		_Fract
+#define accum		_Accum
+#define sat		_Sat
+
+/* 7.18a.3 Precision macros.  */
+
+#undef SFRACT_FBIT
+#undef SFRACT_MIN
+#undef SFRACT_MAX
+#undef SFRACT_EPSILON
+#define SFRACT_FBIT	__SFRACT_FBIT__
+#define SFRACT_MIN	__SFRACT_MIN__
+#define SFRACT_MAX	__SFRACT_MAX__
+#define SFRACT_EPSILON	__SFRACT_EPSILON__
+
+#undef USFRACT_FBIT
+#undef USFRACT_MIN
+#undef USFRACT_MAX
+#undef USFRACT_EPSILON
+#define USFRACT_FBIT	__USFRACT_FBIT__
+#define USFRACT_MIN	__USFRACT_MIN__		/* GCC extension.  */
+#define USFRACT_MAX	__USFRACT_MAX__
+#define USFRACT_EPSILON	__USFRACT_EPSILON__
+
+#undef FRACT_FBIT
+#undef FRACT_MIN
+#undef FRACT_MAX
+#undef FRACT_EPSILON
+#define FRACT_FBIT	__FRACT_FBIT__
+#define FRACT_MIN	__FRACT_MIN__
+#define FRACT_MAX	__FRACT_MAX__
+#define FRACT_EPSILON	__FRACT_EPSILON__
+
+#undef UFRACT_FBIT
+#undef UFRACT_MIN
+#undef UFRACT_MAX
+#undef UFRACT_EPSILON
+#define UFRACT_FBIT	__UFRACT_FBIT__
+#define UFRACT_MIN	__UFRACT_MIN__		/* GCC extension.  */
+#define UFRACT_MAX	__UFRACT_MAX__
+#define UFRACT_EPSILON	__UFRACT_EPSILON__
+
+#undef LFRACT_FBIT
+#undef LFRACT_MIN
+#undef LFRACT_MAX
+#undef LFRACT_EPSILON
+#define LFRACT_FBIT	__LFRACT_FBIT__
+#define LFRACT_MIN	__LFRACT_MIN__
+#define LFRACT_MAX	__LFRACT_MAX__
+#define LFRACT_EPSILON	__LFRACT_EPSILON__
+
+#undef ULFRACT_FBIT
+#undef ULFRACT_MIN
+#undef ULFRACT_MAX
+#undef ULFRACT_EPSILON
+#define ULFRACT_FBIT	__ULFRACT_FBIT__
+#define ULFRACT_MIN	__ULFRACT_MIN__		/* GCC extension.  */
+#define ULFRACT_MAX	__ULFRACT_MAX__
+#define ULFRACT_EPSILON	__ULFRACT_EPSILON__
+
+#undef LLFRACT_FBIT
+#undef LLFRACT_MIN
+#undef LLFRACT_MAX
+#undef LLFRACT_EPSILON
+#define LLFRACT_FBIT	__LLFRACT_FBIT__	/* GCC extension.  */
+#define LLFRACT_MIN	__LLFRACT_MIN__		/* GCC extension.  */
+#define LLFRACT_MAX	__LLFRACT_MAX__		/* GCC extension.  */
+#define LLFRACT_EPSILON	__LLFRACT_EPSILON__	/* GCC extension.  */
+
+#undef ULLFRACT_FBIT
+#undef ULLFRACT_MIN
+#undef ULLFRACT_MAX
+#undef ULLFRACT_EPSILON
+#define ULLFRACT_FBIT	__ULLFRACT_FBIT__	/* GCC extension.  */
+#define ULLFRACT_MIN	__ULLFRACT_MIN__	/* GCC extension.  */
+#define ULLFRACT_MAX	__ULLFRACT_MAX__	/* GCC extension.  */
+#define ULLFRACT_EPSILON	__ULLFRACT_EPSILON__	/* GCC extension.  */
+
+#undef SACCUM_FBIT
+#undef SACCUM_IBIT
+#undef SACCUM_MIN
+#undef SACCUM_MAX
+#undef SACCUM_EPSILON
+#define SACCUM_FBIT	__SACCUM_FBIT__
+#define SACCUM_IBIT	__SACCUM_IBIT__
+#define SACCUM_MIN	__SACCUM_MIN__
+#define SACCUM_MAX	__SACCUM_MAX__
+#define SACCUM_EPSILON	__SACCUM_EPSILON__
+
+#undef USACCUM_FBIT
+#undef USACCUM_IBIT
+#undef USACCUM_MIN
+#undef USACCUM_MAX
+#undef USACCUM_EPSILON
+#define USACCUM_FBIT	__USACCUM_FBIT__
+#define USACCUM_IBIT	__USACCUM_IBIT__
+#define USACCUM_MIN	__USACCUM_MIN__		/* GCC extension.  */
+#define USACCUM_MAX	__USACCUM_MAX__
+#define USACCUM_EPSILON	__USACCUM_EPSILON__
+
+#undef ACCUM_FBIT
+#undef ACCUM_IBIT
+#undef ACCUM_MIN
+#undef ACCUM_MAX
+#undef ACCUM_EPSILON
+#define ACCUM_FBIT	__ACCUM_FBIT__
+#define ACCUM_IBIT	__ACCUM_IBIT__
+#define ACCUM_MIN	__ACCUM_MIN__
+#define ACCUM_MAX	__ACCUM_MAX__
+#define ACCUM_EPSILON	__ACCUM_EPSILON__
+
+#undef UACCUM_FBIT
+#undef UACCUM_IBIT
+#undef UACCUM_MIN
+#undef UACCUM_MAX
+#undef UACCUM_EPSILON
+#define UACCUM_FBIT	__UACCUM_FBIT__
+#define UACCUM_IBIT	__UACCUM_IBIT__
+#define UACCUM_MIN	__UACCUM_MIN__		/* GCC extension.  */
+#define UACCUM_MAX	__UACCUM_MAX__
+#define UACCUM_EPSILON	__UACCUM_EPSILON__
+
+#undef LACCUM_FBIT
+#undef LACCUM_IBIT
+#undef LACCUM_MIN
+#undef LACCUM_MAX
+#undef LACCUM_EPSILON
+#define LACCUM_FBIT	__LACCUM_FBIT__
+#define LACCUM_IBIT	__LACCUM_IBIT__
+#define LACCUM_MIN	__LACCUM_MIN__
+#define LACCUM_MAX	__LACCUM_MAX__
+#define LACCUM_EPSILON	__LACCUM_EPSILON__
+
+#undef ULACCUM_FBIT
+#undef ULACCUM_IBIT
+#undef ULACCUM_MIN
+#undef ULACCUM_MAX
+#undef ULACCUM_EPSILON
+#define ULACCUM_FBIT	__ULACCUM_FBIT__
+#define ULACCUM_IBIT	__ULACCUM_IBIT__
+#define ULACCUM_MIN	__ULACCUM_MIN__		/* GCC extension.  */
+#define ULACCUM_MAX	__ULACCUM_MAX__
+#define ULACCUM_EPSILON	__ULACCUM_EPSILON__
+
+#undef LLACCUM_FBIT
+#undef LLACCUM_IBIT
+#undef LLACCUM_MIN
+#undef LLACCUM_MAX
+#undef LLACCUM_EPSILON
+#define LLACCUM_FBIT	__LLACCUM_FBIT__	/* GCC extension.  */
+#define LLACCUM_IBIT	__LLACCUM_IBIT__	/* GCC extension.  */
+#define LLACCUM_MIN	__LLACCUM_MIN__		/* GCC extension.  */
+#define LLACCUM_MAX	__LLACCUM_MAX__		/* GCC extension.  */
+#define LLACCUM_EPSILON	__LLACCUM_EPSILON__	/* GCC extension.  */
+
+#undef ULLACCUM_FBIT
+#undef ULLACCUM_IBIT
+#undef ULLACCUM_MIN
+#undef ULLACCUM_MAX
+#undef ULLACCUM_EPSILON
+#define ULLACCUM_FBIT	__ULLACCUM_FBIT__	/* GCC extension.  */
+#define ULLACCUM_IBIT	__ULLACCUM_IBIT__	/* GCC extension.  */
+#define ULLACCUM_MIN	__ULLACCUM_MIN__	/* GCC extension.  */
+#define ULLACCUM_MAX	__ULLACCUM_MAX__	/* GCC extension.  */
+#define ULLACCUM_EPSILON	__ULLACCUM_EPSILON__	/* GCC extension.  */
+
+#endif /* _STDFIX_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/stdint-gcc.h b/lib/gcc/aarch64-elf/9.1.1/include/stdint-gcc.h
new file mode 100644
index 0000000..83b03b2
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/stdint-gcc.h
@@ -0,0 +1,364 @@
+/* Copyright (C) 2008-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO C Standard:  7.18  Integer types  <stdint.h>
+ */
+
+#ifndef _GCC_STDINT_H
+#define _GCC_STDINT_H
+
+/* 7.8.1.1 Exact-width integer types */
+
+#ifdef __INT8_TYPE__
+typedef __INT8_TYPE__ int8_t;
+#endif
+#ifdef __INT16_TYPE__
+typedef __INT16_TYPE__ int16_t;
+#endif
+#ifdef __INT32_TYPE__
+typedef __INT32_TYPE__ int32_t;
+#endif
+#ifdef __INT64_TYPE__
+typedef __INT64_TYPE__ int64_t;
+#endif
+#ifdef __UINT8_TYPE__
+typedef __UINT8_TYPE__ uint8_t;
+#endif
+#ifdef __UINT16_TYPE__
+typedef __UINT16_TYPE__ uint16_t;
+#endif
+#ifdef __UINT32_TYPE__
+typedef __UINT32_TYPE__ uint32_t;
+#endif
+#ifdef __UINT64_TYPE__
+typedef __UINT64_TYPE__ uint64_t;
+#endif
+
+/* 7.8.1.2 Minimum-width integer types */
+
+typedef __INT_LEAST8_TYPE__ int_least8_t;
+typedef __INT_LEAST16_TYPE__ int_least16_t;
+typedef __INT_LEAST32_TYPE__ int_least32_t;
+typedef __INT_LEAST64_TYPE__ int_least64_t;
+typedef __UINT_LEAST8_TYPE__ uint_least8_t;
+typedef __UINT_LEAST16_TYPE__ uint_least16_t;
+typedef __UINT_LEAST32_TYPE__ uint_least32_t;
+typedef __UINT_LEAST64_TYPE__ uint_least64_t;
+
+/* 7.8.1.3 Fastest minimum-width integer types */
+
+typedef __INT_FAST8_TYPE__ int_fast8_t;
+typedef __INT_FAST16_TYPE__ int_fast16_t;
+typedef __INT_FAST32_TYPE__ int_fast32_t;
+typedef __INT_FAST64_TYPE__ int_fast64_t;
+typedef __UINT_FAST8_TYPE__ uint_fast8_t;
+typedef __UINT_FAST16_TYPE__ uint_fast16_t;
+typedef __UINT_FAST32_TYPE__ uint_fast32_t;
+typedef __UINT_FAST64_TYPE__ uint_fast64_t;
+
+/* 7.8.1.4 Integer types capable of holding object pointers */
+
+#ifdef __INTPTR_TYPE__
+typedef __INTPTR_TYPE__ intptr_t;
+#endif
+#ifdef __UINTPTR_TYPE__
+typedef __UINTPTR_TYPE__ uintptr_t;
+#endif
+
+/* 7.8.1.5 Greatest-width integer types */
+
+typedef __INTMAX_TYPE__ intmax_t;
+typedef __UINTMAX_TYPE__ uintmax_t;
+
+#if (!defined __cplusplus || __cplusplus >= 201103L \
+     || defined __STDC_LIMIT_MACROS)
+
+/* 7.18.2 Limits of specified-width integer types */
+
+#ifdef __INT8_MAX__
+# undef INT8_MAX
+# define INT8_MAX __INT8_MAX__
+# undef INT8_MIN
+# define INT8_MIN (-INT8_MAX - 1)
+#endif
+#ifdef __UINT8_MAX__
+# undef UINT8_MAX
+# define UINT8_MAX __UINT8_MAX__
+#endif
+#ifdef __INT16_MAX__
+# undef INT16_MAX
+# define INT16_MAX __INT16_MAX__
+# undef INT16_MIN
+# define INT16_MIN (-INT16_MAX - 1)
+#endif
+#ifdef __UINT16_MAX__
+# undef UINT16_MAX
+# define UINT16_MAX __UINT16_MAX__
+#endif
+#ifdef __INT32_MAX__
+# undef INT32_MAX
+# define INT32_MAX __INT32_MAX__
+# undef INT32_MIN
+# define INT32_MIN (-INT32_MAX - 1)
+#endif
+#ifdef __UINT32_MAX__
+# undef UINT32_MAX
+# define UINT32_MAX __UINT32_MAX__
+#endif
+#ifdef __INT64_MAX__
+# undef INT64_MAX
+# define INT64_MAX __INT64_MAX__
+# undef INT64_MIN
+# define INT64_MIN (-INT64_MAX - 1)
+#endif
+#ifdef __UINT64_MAX__
+# undef UINT64_MAX
+# define UINT64_MAX __UINT64_MAX__
+#endif
+
+#undef INT_LEAST8_MAX
+#define INT_LEAST8_MAX __INT_LEAST8_MAX__
+#undef INT_LEAST8_MIN
+#define INT_LEAST8_MIN (-INT_LEAST8_MAX - 1)
+#undef UINT_LEAST8_MAX
+#define UINT_LEAST8_MAX __UINT_LEAST8_MAX__
+#undef INT_LEAST16_MAX
+#define INT_LEAST16_MAX __INT_LEAST16_MAX__
+#undef INT_LEAST16_MIN
+#define INT_LEAST16_MIN (-INT_LEAST16_MAX - 1)
+#undef UINT_LEAST16_MAX
+#define UINT_LEAST16_MAX __UINT_LEAST16_MAX__
+#undef INT_LEAST32_MAX
+#define INT_LEAST32_MAX __INT_LEAST32_MAX__
+#undef INT_LEAST32_MIN
+#define INT_LEAST32_MIN (-INT_LEAST32_MAX - 1)
+#undef UINT_LEAST32_MAX
+#define UINT_LEAST32_MAX __UINT_LEAST32_MAX__
+#undef INT_LEAST64_MAX
+#define INT_LEAST64_MAX __INT_LEAST64_MAX__
+#undef INT_LEAST64_MIN
+#define INT_LEAST64_MIN (-INT_LEAST64_MAX - 1)
+#undef UINT_LEAST64_MAX
+#define UINT_LEAST64_MAX __UINT_LEAST64_MAX__
+
+#undef INT_FAST8_MAX
+#define INT_FAST8_MAX __INT_FAST8_MAX__
+#undef INT_FAST8_MIN
+#define INT_FAST8_MIN (-INT_FAST8_MAX - 1)
+#undef UINT_FAST8_MAX
+#define UINT_FAST8_MAX __UINT_FAST8_MAX__
+#undef INT_FAST16_MAX
+#define INT_FAST16_MAX __INT_FAST16_MAX__
+#undef INT_FAST16_MIN
+#define INT_FAST16_MIN (-INT_FAST16_MAX - 1)
+#undef UINT_FAST16_MAX
+#define UINT_FAST16_MAX __UINT_FAST16_MAX__
+#undef INT_FAST32_MAX
+#define INT_FAST32_MAX __INT_FAST32_MAX__
+#undef INT_FAST32_MIN
+#define INT_FAST32_MIN (-INT_FAST32_MAX - 1)
+#undef UINT_FAST32_MAX
+#define UINT_FAST32_MAX __UINT_FAST32_MAX__
+#undef INT_FAST64_MAX
+#define INT_FAST64_MAX __INT_FAST64_MAX__
+#undef INT_FAST64_MIN
+#define INT_FAST64_MIN (-INT_FAST64_MAX - 1)
+#undef UINT_FAST64_MAX
+#define UINT_FAST64_MAX __UINT_FAST64_MAX__
+
+#ifdef __INTPTR_MAX__
+# undef INTPTR_MAX
+# define INTPTR_MAX __INTPTR_MAX__
+# undef INTPTR_MIN
+# define INTPTR_MIN (-INTPTR_MAX - 1)
+#endif
+#ifdef __UINTPTR_MAX__
+# undef UINTPTR_MAX
+# define UINTPTR_MAX __UINTPTR_MAX__
+#endif
+
+#undef INTMAX_MAX
+#define INTMAX_MAX __INTMAX_MAX__
+#undef INTMAX_MIN
+#define INTMAX_MIN (-INTMAX_MAX - 1)
+#undef UINTMAX_MAX
+#define UINTMAX_MAX __UINTMAX_MAX__
+
+/* 7.18.3 Limits of other integer types */
+
+#undef PTRDIFF_MAX
+#define PTRDIFF_MAX __PTRDIFF_MAX__
+#undef PTRDIFF_MIN
+#define PTRDIFF_MIN (-PTRDIFF_MAX - 1)
+
+#undef SIG_ATOMIC_MAX
+#define SIG_ATOMIC_MAX __SIG_ATOMIC_MAX__
+#undef SIG_ATOMIC_MIN
+#define SIG_ATOMIC_MIN __SIG_ATOMIC_MIN__
+
+#undef SIZE_MAX
+#define SIZE_MAX __SIZE_MAX__
+
+#undef WCHAR_MAX
+#define WCHAR_MAX __WCHAR_MAX__
+#undef WCHAR_MIN
+#define WCHAR_MIN __WCHAR_MIN__
+
+#undef WINT_MAX
+#define WINT_MAX __WINT_MAX__
+#undef WINT_MIN
+#define WINT_MIN __WINT_MIN__
+
+#endif /* (!defined __cplusplus || __cplusplus >= 201103L
+	   || defined __STDC_LIMIT_MACROS)  */
+
+#if (!defined __cplusplus || __cplusplus >= 201103L \
+     || defined __STDC_CONSTANT_MACROS)
+
+#undef INT8_C
+#define INT8_C(c) __INT8_C(c)
+#undef INT16_C
+#define INT16_C(c) __INT16_C(c)
+#undef INT32_C
+#define INT32_C(c) __INT32_C(c)
+#undef INT64_C
+#define INT64_C(c) __INT64_C(c)
+#undef UINT8_C
+#define UINT8_C(c) __UINT8_C(c)
+#undef UINT16_C
+#define UINT16_C(c) __UINT16_C(c)
+#undef UINT32_C
+#define UINT32_C(c) __UINT32_C(c)
+#undef UINT64_C
+#define UINT64_C(c) __UINT64_C(c)
+#undef INTMAX_C
+#define INTMAX_C(c) __INTMAX_C(c)
+#undef UINTMAX_C
+#define UINTMAX_C(c) __UINTMAX_C(c)
+
+#endif /* (!defined __cplusplus || __cplusplus >= 201103L
+	   || defined __STDC_CONSTANT_MACROS) */
+
+#ifdef __STDC_WANT_IEC_60559_BFP_EXT__
+/* TS 18661-1 widths of integer types.  */
+
+#ifdef __INT8_TYPE__
+# undef INT8_WIDTH
+# define INT8_WIDTH 8
+#endif
+#ifdef __UINT8_TYPE__
+# undef UINT8_WIDTH
+# define UINT8_WIDTH 8
+#endif
+#ifdef __INT16_TYPE__
+# undef INT16_WIDTH
+# define INT16_WIDTH 16
+#endif
+#ifdef __UINT16_TYPE__
+# undef UINT16_WIDTH
+# define UINT16_WIDTH 16
+#endif
+#ifdef __INT32_TYPE__
+# undef INT32_WIDTH
+# define INT32_WIDTH 32
+#endif
+#ifdef __UINT32_TYPE__
+# undef UINT32_WIDTH
+# define UINT32_WIDTH 32
+#endif
+#ifdef __INT64_TYPE__
+# undef INT64_WIDTH
+# define INT64_WIDTH 64
+#endif
+#ifdef __UINT64_TYPE__
+# undef UINT64_WIDTH
+# define UINT64_WIDTH 64
+#endif
+
+#undef INT_LEAST8_WIDTH
+#define INT_LEAST8_WIDTH __INT_LEAST8_WIDTH__
+#undef UINT_LEAST8_WIDTH
+#define UINT_LEAST8_WIDTH __INT_LEAST8_WIDTH__
+#undef INT_LEAST16_WIDTH
+#define INT_LEAST16_WIDTH __INT_LEAST16_WIDTH__
+#undef UINT_LEAST16_WIDTH
+#define UINT_LEAST16_WIDTH __INT_LEAST16_WIDTH__
+#undef INT_LEAST32_WIDTH
+#define INT_LEAST32_WIDTH __INT_LEAST32_WIDTH__
+#undef UINT_LEAST32_WIDTH
+#define UINT_LEAST32_WIDTH __INT_LEAST32_WIDTH__
+#undef INT_LEAST64_WIDTH
+#define INT_LEAST64_WIDTH __INT_LEAST64_WIDTH__
+#undef UINT_LEAST64_WIDTH
+#define UINT_LEAST64_WIDTH __INT_LEAST64_WIDTH__
+
+#undef INT_FAST8_WIDTH
+#define INT_FAST8_WIDTH __INT_FAST8_WIDTH__
+#undef UINT_FAST8_WIDTH
+#define UINT_FAST8_WIDTH __INT_FAST8_WIDTH__
+#undef INT_FAST16_WIDTH
+#define INT_FAST16_WIDTH __INT_FAST16_WIDTH__
+#undef UINT_FAST16_WIDTH
+#define UINT_FAST16_WIDTH __INT_FAST16_WIDTH__
+#undef INT_FAST32_WIDTH
+#define INT_FAST32_WIDTH __INT_FAST32_WIDTH__
+#undef UINT_FAST32_WIDTH
+#define UINT_FAST32_WIDTH __INT_FAST32_WIDTH__
+#undef INT_FAST64_WIDTH
+#define INT_FAST64_WIDTH __INT_FAST64_WIDTH__
+#undef UINT_FAST64_WIDTH
+#define UINT_FAST64_WIDTH __INT_FAST64_WIDTH__
+
+#ifdef __INTPTR_TYPE__
+# undef INTPTR_WIDTH
+# define INTPTR_WIDTH __INTPTR_WIDTH__
+#endif
+#ifdef __UINTPTR_TYPE__
+# undef UINTPTR_WIDTH
+# define UINTPTR_WIDTH __INTPTR_WIDTH__
+#endif
+
+#undef INTMAX_WIDTH
+#define INTMAX_WIDTH __INTMAX_WIDTH__
+#undef UINTMAX_WIDTH
+#define UINTMAX_WIDTH __INTMAX_WIDTH__
+
+#undef PTRDIFF_WIDTH
+#define PTRDIFF_WIDTH __PTRDIFF_WIDTH__
+
+#undef SIG_ATOMIC_WIDTH
+#define SIG_ATOMIC_WIDTH __SIG_ATOMIC_WIDTH__
+
+#undef SIZE_WIDTH
+#define SIZE_WIDTH __SIZE_WIDTH__
+
+#undef WCHAR_WIDTH
+#define WCHAR_WIDTH __WCHAR_WIDTH__
+
+#undef WINT_WIDTH
+#define WINT_WIDTH __WINT_WIDTH__
+
+#endif
+
+#endif /* _GCC_STDINT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/stdint.h b/lib/gcc/aarch64-elf/9.1.1/include/stdint.h
new file mode 100644
index 0000000..83b6f70
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/stdint.h
@@ -0,0 +1,14 @@
+#ifndef _GCC_WRAP_STDINT_H
+#if __STDC_HOSTED__
+# if defined __cplusplus && __cplusplus >= 201103L
+#  undef __STDC_LIMIT_MACROS
+#  define __STDC_LIMIT_MACROS
+#  undef __STDC_CONSTANT_MACROS
+#  define __STDC_CONSTANT_MACROS
+# endif
+# include_next <stdint.h>
+#else
+# include "stdint-gcc.h"
+#endif
+#define _GCC_WRAP_STDINT_H
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/stdnoreturn.h b/lib/gcc/aarch64-elf/9.1.1/include/stdnoreturn.h
new file mode 100644
index 0000000..c8d65a6
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/stdnoreturn.h
@@ -0,0 +1,35 @@
+/* Copyright (C) 2011-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/* ISO C1X: 7.23 _Noreturn <stdnoreturn.h>.  */
+
+#ifndef _STDNORETURN_H
+#define _STDNORETURN_H
+
+#ifndef __cplusplus
+
+#define noreturn _Noreturn
+
+#endif
+
+#endif	/* stdnoreturn.h */
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/tgmath.h b/lib/gcc/aarch64-elf/9.1.1/include/tgmath.h
new file mode 100644
index 0000000..edfb71e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/tgmath.h
@@ -0,0 +1,127 @@
+/* Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Contributed by Apple, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO C Standard:  7.22  Type-generic math <tgmath.h>
+ */
+
+#ifndef _TGMATH_H
+#define _TGMATH_H
+
+#include <math.h>
+
+#ifndef __cplusplus
+#include <complex.h>
+
+/* Naming convention: generic macros are defining using
+   __TGMATH_CPLX*, __TGMATH_REAL*, and __TGMATH_CPLX_ONLY.  _CPLX
+   means the generic argument(s) may be real or complex, _REAL means
+   real only, _CPLX means complex only.  If there is no suffix, we are
+   defining a function of one argument.  If the suffix is _n
+   it is a function of n arguments.  We only define these macros for
+   values of n that are needed. */
+
+#define __TGMATH_CPLX(z,R,C)				\
+  __builtin_tgmath (R##f, R, R##l, C##f, C, C##l, (z))
+
+#define __TGMATH_CPLX_2(z1,z2,R,C)				\
+  __builtin_tgmath (R##f, R, R##l, C##f, C, C##l, (z1), (z2))
+
+#define __TGMATH_REAL(x,R) \
+  __builtin_tgmath (R##f, R, R##l, (x))
+#define __TGMATH_REAL_2(x,y,R) \
+  __builtin_tgmath (R##f, R, R##l, (x), (y))
+#define __TGMATH_REAL_3(x,y,z,R) \
+  __builtin_tgmath (R##f, R, R##l, (x), (y), (z))
+#define __TGMATH_CPLX_ONLY(z,C) \
+  __builtin_tgmath (C##f, C, C##l, (z))
+
+/* Functions defined in both <math.h> and <complex.h> (7.22p4) */
+#define acos(z)          __TGMATH_CPLX(z, acos, cacos)
+#define asin(z)          __TGMATH_CPLX(z, asin, casin)
+#define atan(z)          __TGMATH_CPLX(z, atan, catan)
+#define acosh(z)         __TGMATH_CPLX(z, acosh, cacosh)
+#define asinh(z)         __TGMATH_CPLX(z, asinh, casinh)
+#define atanh(z)         __TGMATH_CPLX(z, atanh, catanh)
+#define cos(z)           __TGMATH_CPLX(z, cos, ccos)
+#define sin(z)           __TGMATH_CPLX(z, sin, csin)
+#define tan(z)           __TGMATH_CPLX(z, tan, ctan)
+#define cosh(z)          __TGMATH_CPLX(z, cosh, ccosh)
+#define sinh(z)          __TGMATH_CPLX(z, sinh, csinh)
+#define tanh(z)          __TGMATH_CPLX(z, tanh, ctanh)
+#define exp(z)           __TGMATH_CPLX(z, exp, cexp)
+#define log(z)           __TGMATH_CPLX(z, log, clog)
+#define pow(z1,z2)       __TGMATH_CPLX_2(z1, z2, pow, cpow)
+#define sqrt(z)          __TGMATH_CPLX(z, sqrt, csqrt)
+#define fabs(z)          __TGMATH_CPLX(z, fabs, cabs)
+
+/* Functions defined in <math.h> only (7.22p5) */
+#define atan2(x,y)       __TGMATH_REAL_2(x, y, atan2)
+#define cbrt(x)          __TGMATH_REAL(x, cbrt)
+#define ceil(x)          __TGMATH_REAL(x, ceil)
+#define copysign(x,y)    __TGMATH_REAL_2(x, y, copysign)
+#define erf(x)           __TGMATH_REAL(x, erf)
+#define erfc(x)          __TGMATH_REAL(x, erfc)
+#define exp2(x)          __TGMATH_REAL(x, exp2)
+#define expm1(x)         __TGMATH_REAL(x, expm1)
+#define fdim(x,y)        __TGMATH_REAL_2(x, y, fdim)
+#define floor(x)         __TGMATH_REAL(x, floor)
+#define fma(x,y,z)       __TGMATH_REAL_3(x, y, z, fma)
+#define fmax(x,y)        __TGMATH_REAL_2(x, y, fmax)
+#define fmin(x,y)        __TGMATH_REAL_2(x, y, fmin)
+#define fmod(x,y)        __TGMATH_REAL_2(x, y, fmod)
+#define frexp(x,y)       __TGMATH_REAL_2(x, y, frexp)
+#define hypot(x,y)       __TGMATH_REAL_2(x, y, hypot)
+#define ilogb(x)         __TGMATH_REAL(x, ilogb)
+#define ldexp(x,y)       __TGMATH_REAL_2(x, y, ldexp)
+#define lgamma(x)        __TGMATH_REAL(x, lgamma)
+#define llrint(x)        __TGMATH_REAL(x, llrint)
+#define llround(x)       __TGMATH_REAL(x, llround)
+#define log10(x)         __TGMATH_REAL(x, log10)
+#define log1p(x)         __TGMATH_REAL(x, log1p)
+#define log2(x)          __TGMATH_REAL(x, log2)
+#define logb(x)          __TGMATH_REAL(x, logb)
+#define lrint(x)         __TGMATH_REAL(x, lrint)
+#define lround(x)        __TGMATH_REAL(x, lround)
+#define nearbyint(x)     __TGMATH_REAL(x, nearbyint)
+#define nextafter(x,y)   __TGMATH_REAL_2(x, y, nextafter)
+#define nexttoward(x,y)  __TGMATH_REAL_2(x, y, nexttoward)
+#define remainder(x,y)   __TGMATH_REAL_2(x, y, remainder)
+#define remquo(x,y,z)    __TGMATH_REAL_3(x, y, z, remquo)
+#define rint(x)          __TGMATH_REAL(x, rint)
+#define round(x)         __TGMATH_REAL(x, round)
+#define scalbn(x,y)      __TGMATH_REAL_2(x, y, scalbn)
+#define scalbln(x,y)     __TGMATH_REAL_2(x, y, scalbln)
+#define tgamma(x)        __TGMATH_REAL(x, tgamma)
+#define trunc(x)         __TGMATH_REAL(x, trunc)
+
+/* Functions defined in <complex.h> only (7.22p6) */
+#define carg(z)          __TGMATH_CPLX_ONLY(z, carg)
+#define cimag(z)         __TGMATH_CPLX_ONLY(z, cimag)
+#define conj(z)          __TGMATH_CPLX_ONLY(z, conj)
+#define cproj(z)         __TGMATH_CPLX_ONLY(z, cproj)
+#define creal(z)         __TGMATH_CPLX_ONLY(z, creal)
+
+#endif /* __cplusplus */
+#endif /* _TGMATH_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/unwind.h b/lib/gcc/aarch64-elf/9.1.1/include/unwind.h
new file mode 100644
index 0000000..fbfd92d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/unwind.h
@@ -0,0 +1,297 @@
+/* Exception handling and frame unwind runtime interface routines.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This is derived from the C++ ABI for IA-64.  Where we diverge
+   for cross-architecture compatibility are noted with "@@@".  */
+
+#ifndef _UNWIND_H
+#define _UNWIND_H
+
+#if defined (__SEH__) && !defined (__USING_SJLJ_EXCEPTIONS__)
+/* Only for _GCC_specific_handler.  */
+#include <windows.h>
+#endif
+
+#ifndef HIDE_EXPORTS
+#pragma GCC visibility push(default)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Level 1: Base ABI  */
+
+/* @@@ The IA-64 ABI uses uint64 throughout.  Most places this is
+   inefficient for 32-bit and smaller machines.  */
+typedef unsigned _Unwind_Word __attribute__((__mode__(__unwind_word__)));
+typedef signed _Unwind_Sword __attribute__((__mode__(__unwind_word__)));
+#if defined(__ia64__) && defined(__hpux__)
+typedef unsigned _Unwind_Ptr __attribute__((__mode__(__word__)));
+#else
+typedef unsigned _Unwind_Ptr __attribute__((__mode__(__pointer__)));
+#endif
+typedef unsigned _Unwind_Internal_Ptr __attribute__((__mode__(__pointer__)));
+
+/* @@@ The IA-64 ABI uses a 64-bit word to identify the producer and
+   consumer of an exception.  We'll go along with this for now even on
+   32-bit machines.  We'll need to provide some other option for
+   16-bit machines and for machines with > 8 bits per byte.  */
+typedef unsigned _Unwind_Exception_Class __attribute__((__mode__(__DI__)));
+
+/* The unwind interface uses reason codes in several contexts to
+   identify the reasons for failures or other actions.  */
+typedef enum
+{
+  _URC_NO_REASON = 0,
+  _URC_FOREIGN_EXCEPTION_CAUGHT = 1,
+  _URC_FATAL_PHASE2_ERROR = 2,
+  _URC_FATAL_PHASE1_ERROR = 3,
+  _URC_NORMAL_STOP = 4,
+  _URC_END_OF_STACK = 5,
+  _URC_HANDLER_FOUND = 6,
+  _URC_INSTALL_CONTEXT = 7,
+  _URC_CONTINUE_UNWIND = 8
+} _Unwind_Reason_Code;
+
+
+/* The unwind interface uses a pointer to an exception header object
+   as its representation of an exception being thrown. In general, the
+   full representation of an exception object is language- and
+   implementation-specific, but it will be prefixed by a header
+   understood by the unwind interface.  */
+
+struct _Unwind_Exception;
+
+typedef void (*_Unwind_Exception_Cleanup_Fn) (_Unwind_Reason_Code,
+					      struct _Unwind_Exception *);
+
+struct _Unwind_Exception
+{
+  _Unwind_Exception_Class exception_class;
+  _Unwind_Exception_Cleanup_Fn exception_cleanup;
+
+#if !defined (__USING_SJLJ_EXCEPTIONS__) && defined (__SEH__)
+  _Unwind_Word private_[6];
+#else
+  _Unwind_Word private_1;
+  _Unwind_Word private_2;
+#endif
+
+  /* @@@ The IA-64 ABI says that this structure must be double-word aligned.
+     Taking that literally does not make much sense generically.  Instead we
+     provide the maximum alignment required by any type for the machine.  */
+} __attribute__((__aligned__));
+
+
+/* The ACTIONS argument to the personality routine is a bitwise OR of one
+   or more of the following constants.  */
+typedef int _Unwind_Action;
+
+#define _UA_SEARCH_PHASE	1
+#define _UA_CLEANUP_PHASE	2
+#define _UA_HANDLER_FRAME	4
+#define _UA_FORCE_UNWIND	8
+#define _UA_END_OF_STACK	16
+
+/* The target can override this macro to define any back-end-specific
+   attributes required for the lowest-level stack frame.  */
+#ifndef LIBGCC2_UNWIND_ATTRIBUTE
+#define LIBGCC2_UNWIND_ATTRIBUTE
+#endif
+
+/* This is an opaque type used to refer to a system-specific data
+   structure used by the system unwinder. This context is created and
+   destroyed by the system, and passed to the personality routine
+   during unwinding.  */
+struct _Unwind_Context;
+
+/* Raise an exception, passing along the given exception object.  */
+extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_RaiseException (struct _Unwind_Exception *);
+
+/* Raise an exception for forced unwinding.  */
+
+typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn)
+     (int, _Unwind_Action, _Unwind_Exception_Class,
+      struct _Unwind_Exception *, struct _Unwind_Context *, void *);
+
+extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_ForcedUnwind (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *);
+
+/* Helper to invoke the exception_cleanup routine.  */
+extern void _Unwind_DeleteException (struct _Unwind_Exception *);
+
+/* Resume propagation of an existing exception.  This is used after
+   e.g. executing cleanup code, and not to implement rethrowing.  */
+extern void LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_Resume (struct _Unwind_Exception *);
+
+/* @@@ Resume propagation of a FORCE_UNWIND exception, or to rethrow
+   a normal exception that was handled.  */
+extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_Resume_or_Rethrow (struct _Unwind_Exception *);
+
+/* @@@ Use unwind data to perform a stack backtrace.  The trace callback
+   is called for every stack frame in the call chain, but no cleanup
+   actions are performed.  */
+typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn)
+     (struct _Unwind_Context *, void *);
+
+extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_Backtrace (_Unwind_Trace_Fn, void *);
+
+/* These functions are used for communicating information about the unwind
+   context (i.e. the unwind descriptors and the user register state) between
+   the unwind library and the personality routine and landing pad.  Only
+   selected registers may be manipulated.  */
+
+extern _Unwind_Word _Unwind_GetGR (struct _Unwind_Context *, int);
+extern void _Unwind_SetGR (struct _Unwind_Context *, int, _Unwind_Word);
+
+extern _Unwind_Ptr _Unwind_GetIP (struct _Unwind_Context *);
+extern _Unwind_Ptr _Unwind_GetIPInfo (struct _Unwind_Context *, int *);
+extern void _Unwind_SetIP (struct _Unwind_Context *, _Unwind_Ptr);
+
+/* @@@ Retrieve the CFA of the given context.  */
+extern _Unwind_Word _Unwind_GetCFA (struct _Unwind_Context *);
+
+extern void *_Unwind_GetLanguageSpecificData (struct _Unwind_Context *);
+
+extern _Unwind_Ptr _Unwind_GetRegionStart (struct _Unwind_Context *);
+
+
+/* The personality routine is the function in the C++ (or other language)
+   runtime library which serves as an interface between the system unwind
+   library and language-specific exception handling semantics.  It is
+   specific to the code fragment described by an unwind info block, and
+   it is always referenced via the pointer in the unwind info block, and
+   hence it has no ABI-specified name.
+
+   Note that this implies that two different C++ implementations can
+   use different names, and have different contents in the language
+   specific data area.  Moreover, that the language specific data
+   area contains no version info because name of the function invoked
+   provides more effective versioning by detecting at link time the
+   lack of code to handle the different data format.  */
+
+typedef _Unwind_Reason_Code (*_Unwind_Personality_Fn)
+     (int, _Unwind_Action, _Unwind_Exception_Class,
+      struct _Unwind_Exception *, struct _Unwind_Context *);
+
+/* @@@ The following alternate entry points are for setjmp/longjmp
+   based unwinding.  */
+
+struct SjLj_Function_Context;
+extern void _Unwind_SjLj_Register (struct SjLj_Function_Context *);
+extern void _Unwind_SjLj_Unregister (struct SjLj_Function_Context *);
+
+extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_SjLj_RaiseException (struct _Unwind_Exception *);
+extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_SjLj_ForcedUnwind (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *);
+extern void LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_SjLj_Resume (struct _Unwind_Exception *);
+extern _Unwind_Reason_Code LIBGCC2_UNWIND_ATTRIBUTE
+_Unwind_SjLj_Resume_or_Rethrow (struct _Unwind_Exception *);
+
+/* @@@ The following provide access to the base addresses for text
+   and data-relative addressing in the LDSA.  In order to stay link
+   compatible with the standard ABI for IA-64, we inline these.  */
+
+#ifdef __ia64__
+static inline _Unwind_Ptr
+_Unwind_GetDataRelBase (struct _Unwind_Context *_C)
+{
+  /* The GP is stored in R1.  */
+  return _Unwind_GetGR (_C, 1);
+}
+
+static inline _Unwind_Ptr
+_Unwind_GetTextRelBase (struct _Unwind_Context *_C __attribute__ ((__unused__)))
+{
+  __builtin_abort ();
+  return 0;
+}
+
+/* @@@ Retrieve the Backing Store Pointer of the given context.  */
+extern _Unwind_Word _Unwind_GetBSP (struct _Unwind_Context *);
+#else
+extern _Unwind_Ptr _Unwind_GetDataRelBase (struct _Unwind_Context *);
+extern _Unwind_Ptr _Unwind_GetTextRelBase (struct _Unwind_Context *);
+#endif
+
+/* @@@ Given an address, return the entry point of the function that
+   contains it.  */
+extern void * _Unwind_FindEnclosingFunction (void *pc);
+
+#ifndef __SIZEOF_LONG__
+  #error "__SIZEOF_LONG__ macro not defined"
+#endif
+
+#ifndef __SIZEOF_POINTER__
+  #error "__SIZEOF_POINTER__ macro not defined"
+#endif
+
+
+/* leb128 type numbers have a potentially unlimited size.
+   The target of the following definitions of _sleb128_t and _uleb128_t
+   is to have efficient data types large enough to hold the leb128 type
+   numbers used in the unwind code.
+   Mostly these types will simply be defined to long and unsigned long
+   except when a unsigned long data type on the target machine is not
+   capable of storing a pointer.  */
+
+#if __SIZEOF_LONG__ >= __SIZEOF_POINTER__
+  typedef long _sleb128_t;
+  typedef unsigned long _uleb128_t;
+#elif __SIZEOF_LONG_LONG__ >= __SIZEOF_POINTER__
+  typedef long long _sleb128_t;
+  typedef unsigned long long _uleb128_t;
+#else
+# error "What type shall we use for _sleb128_t?"
+#endif
+
+#if defined (__SEH__) && !defined (__USING_SJLJ_EXCEPTIONS__)
+/* Handles the mapping from SEH to GCC interfaces.  */
+EXCEPTION_DISPOSITION _GCC_specific_handler (PEXCEPTION_RECORD, void *,
+					     PCONTEXT, PDISPATCHER_CONTEXT,
+					     _Unwind_Personality_Fn);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifndef HIDE_EXPORTS
+#pragma GCC visibility pop
+#endif
+
+/* Additional actions to unwind number of stack frames.  */
+#define _Unwind_Frames_Extra(frames)
+
+/* Increment frame count.  */
+#define _Unwind_Frames_Increment(context, frames) frames++
+
+#endif /* unwind.h */
diff --git a/lib/gcc/aarch64-elf/9.1.1/include/varargs.h b/lib/gcc/aarch64-elf/9.1.1/include/varargs.h
new file mode 100644
index 0000000..4b9803e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/include/varargs.h
@@ -0,0 +1,7 @@
+#ifndef _VARARGS_H
+#define _VARARGS_H
+
+#error "GCC no longer implements <varargs.h>."
+#error "Revise your code to use <stdarg.h>."
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/install-tools/fixinc_list b/lib/gcc/aarch64-elf/9.1.1/install-tools/fixinc_list
new file mode 100644
index 0000000..092bc2b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/install-tools/fixinc_list
@@ -0,0 +1 @@
+;
diff --git a/lib/gcc/aarch64-elf/9.1.1/install-tools/gsyslimits.h b/lib/gcc/aarch64-elf/9.1.1/install-tools/gsyslimits.h
new file mode 100644
index 0000000..a362802
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/install-tools/gsyslimits.h
@@ -0,0 +1,8 @@
+/* syslimits.h stands for the system's own limits.h file.
+   If we can use it ok unmodified, then we install this text.
+   If fixincludes fixes it, then the fixed version is installed
+   instead of this text.  */
+
+#define _GCC_NEXT_LIMITS_H		/* tell gcc's limits.h to recurse */
+#include_next <limits.h>
+#undef _GCC_NEXT_LIMITS_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/install-tools/include/README b/lib/gcc/aarch64-elf/9.1.1/install-tools/include/README
new file mode 100644
index 0000000..7086a77
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/install-tools/include/README
@@ -0,0 +1,14 @@
+This README file is copied into the directory for GCC-only header files
+when fixincludes is run by the makefile for GCC.
+
+Many of the files in this directory were automatically edited from the
+standard system header files by the fixincludes process.  They are
+system-specific, and will not work on any other kind of system.  They
+are also not part of GCC.  The reason we have to do this is because
+GCC requires ANSI C headers and many vendors supply ANSI-incompatible
+headers.
+
+Because this is an automated process, sometimes headers get "fixed"
+that do not, strictly speaking, need a fix.  As long as nothing is broken
+by the process, it is just an unfortunate collateral inconvenience.
+We would like to rectify it, if it is not "too inconvenient".
diff --git a/lib/gcc/aarch64-elf/9.1.1/install-tools/include/limits.h b/lib/gcc/aarch64-elf/9.1.1/install-tools/include/limits.h
new file mode 100644
index 0000000..0cddf0f
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/install-tools/include/limits.h
@@ -0,0 +1,152 @@
+/* Copyright (C) 1991-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef _LIMITS_H___
+#define _LIMITS_H___
+
+/* Number of bits in a `char'.  */
+#undef CHAR_BIT
+#define CHAR_BIT __CHAR_BIT__
+
+/* Maximum length of a multibyte character.  */
+#ifndef MB_LEN_MAX
+#define MB_LEN_MAX 1
+#endif
+
+/* Minimum and maximum values a `signed char' can hold.  */
+#undef SCHAR_MIN
+#define SCHAR_MIN (-SCHAR_MAX - 1)
+#undef SCHAR_MAX
+#define SCHAR_MAX __SCHAR_MAX__
+
+/* Maximum value an `unsigned char' can hold.  (Minimum is 0).  */
+#undef UCHAR_MAX
+#if __SCHAR_MAX__ == __INT_MAX__
+# define UCHAR_MAX (SCHAR_MAX * 2U + 1U)
+#else
+# define UCHAR_MAX (SCHAR_MAX * 2 + 1)
+#endif
+
+/* Minimum and maximum values a `char' can hold.  */
+#ifdef __CHAR_UNSIGNED__
+# undef CHAR_MIN
+# if __SCHAR_MAX__ == __INT_MAX__
+#  define CHAR_MIN 0U
+# else
+#  define CHAR_MIN 0
+# endif
+# undef CHAR_MAX
+# define CHAR_MAX UCHAR_MAX
+#else
+# undef CHAR_MIN
+# define CHAR_MIN SCHAR_MIN
+# undef CHAR_MAX
+# define CHAR_MAX SCHAR_MAX
+#endif
+
+/* Minimum and maximum values a `signed short int' can hold.  */
+#undef SHRT_MIN
+#define SHRT_MIN (-SHRT_MAX - 1)
+#undef SHRT_MAX
+#define SHRT_MAX __SHRT_MAX__
+
+/* Maximum value an `unsigned short int' can hold.  (Minimum is 0).  */
+#undef USHRT_MAX
+#if __SHRT_MAX__ == __INT_MAX__
+# define USHRT_MAX (SHRT_MAX * 2U + 1U)
+#else
+# define USHRT_MAX (SHRT_MAX * 2 + 1)
+#endif
+
+/* Minimum and maximum values a `signed int' can hold.  */
+#undef INT_MIN
+#define INT_MIN (-INT_MAX - 1)
+#undef INT_MAX
+#define INT_MAX __INT_MAX__
+
+/* Maximum value an `unsigned int' can hold.  (Minimum is 0).  */
+#undef UINT_MAX
+#define UINT_MAX (INT_MAX * 2U + 1U)
+
+/* Minimum and maximum values a `signed long int' can hold.
+   (Same as `int').  */
+#undef LONG_MIN
+#define LONG_MIN (-LONG_MAX - 1L)
+#undef LONG_MAX
+#define LONG_MAX __LONG_MAX__
+
+/* Maximum value an `unsigned long int' can hold.  (Minimum is 0).  */
+#undef ULONG_MAX
+#define ULONG_MAX (LONG_MAX * 2UL + 1UL)
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+/* Minimum and maximum values a `signed long long int' can hold.  */
+# undef LLONG_MIN
+# define LLONG_MIN (-LLONG_MAX - 1LL)
+# undef LLONG_MAX
+# define LLONG_MAX __LONG_LONG_MAX__
+
+/* Maximum value an `unsigned long long int' can hold.  (Minimum is 0).  */
+# undef ULLONG_MAX
+# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
+#endif
+
+#if defined (__GNU_LIBRARY__) ? defined (__USE_GNU) : !defined (__STRICT_ANSI__)
+/* Minimum and maximum values a `signed long long int' can hold.  */
+# undef LONG_LONG_MIN
+# define LONG_LONG_MIN (-LONG_LONG_MAX - 1LL)
+# undef LONG_LONG_MAX
+# define LONG_LONG_MAX __LONG_LONG_MAX__
+
+/* Maximum value an `unsigned long long int' can hold.  (Minimum is 0).  */
+# undef ULONG_LONG_MAX
+# define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1ULL)
+#endif
+
+#ifdef __STDC_WANT_IEC_60559_BFP_EXT__
+/* TS 18661-1 widths of integer types.  */
+# undef CHAR_WIDTH
+# define CHAR_WIDTH __SCHAR_WIDTH__
+# undef SCHAR_WIDTH
+# define SCHAR_WIDTH __SCHAR_WIDTH__
+# undef UCHAR_WIDTH
+# define UCHAR_WIDTH __SCHAR_WIDTH__
+# undef SHRT_WIDTH
+# define SHRT_WIDTH __SHRT_WIDTH__
+# undef USHRT_WIDTH
+# define USHRT_WIDTH __SHRT_WIDTH__
+# undef INT_WIDTH
+# define INT_WIDTH __INT_WIDTH__
+# undef UINT_WIDTH
+# define UINT_WIDTH __INT_WIDTH__
+# undef LONG_WIDTH
+# define LONG_WIDTH __LONG_WIDTH__
+# undef ULONG_WIDTH
+# define ULONG_WIDTH __LONG_WIDTH__
+# undef LLONG_WIDTH
+# define LLONG_WIDTH __LONG_LONG_WIDTH__
+# undef ULLONG_WIDTH
+# define ULLONG_WIDTH __LONG_LONG_WIDTH__
+#endif
+
+#endif /* _LIMITS_H___ */
diff --git a/lib/gcc/aarch64-elf/9.1.1/install-tools/macro_list b/lib/gcc/aarch64-elf/9.1.1/install-tools/macro_list
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/install-tools/macro_list
diff --git a/lib/gcc/aarch64-elf/9.1.1/install-tools/mkheaders.conf b/lib/gcc/aarch64-elf/9.1.1/install-tools/mkheaders.conf
new file mode 100644
index 0000000..3fc8f46
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/install-tools/mkheaders.conf
@@ -0,0 +1,3 @@
+SYSTEM_HEADER_DIR="/home/arter97/arm64-gcc/aarch64-elf/sys-include"
+OTHER_FIXINCLUDES_DIRS=""
+STMP_FIXINC="stmp-fixinc"
diff --git a/lib/gcc/aarch64-elf/9.1.1/libgcc.a b/lib/gcc/aarch64-elf/9.1.1/libgcc.a
new file mode 100644
index 0000000..1f84913
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/libgcc.a
Binary files differ
diff --git a/lib/gcc/aarch64-elf/9.1.1/libgcov.a b/lib/gcc/aarch64-elf/9.1.1/libgcov.a
new file mode 100644
index 0000000..9a46661
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/libgcov.a
Binary files differ
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/gtype.state b/lib/gcc/aarch64-elf/9.1.1/plugin/gtype.state
new file mode 100644
index 0000000..6aa7052
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/gtype.state
@@ -0,0 +1,32800 @@
+;;;;@@@@ GCC gengtype state
+;;; DON'T EDIT THIS FILE, since generated by GCC's gengtype
+;;; The format of this file is tied to a particular version of GCC.
+;;; Don't parse this file wihout knowing GCC gengtype internals.
+;;; This file should be parsed by the same gengtype which wrote it.
+
+(!version  "9.1.1 20190503")
+(!srcdir  "../../linaro/gcc")
+(!languages 11 ada brig c cp d fortran go jit lto objc objcp)
+(!fileslist 207
+ (!srcfile 2047  "../libcpp/include/line-map.h")
+ (!srcfile 2047  "../libcpp/include/cpplib.h")
+ (!srcfile 2047  "input.h")
+ (!srcfile 2047  "coretypes.h")
+ (!file 2047  "auto-host.h")
+ (!srcfile 2047  "../include/ansidecl.h")
+ (!file 2047  "options.h")
+ (!srcfile 2047  "config/aarch64/biarchlp64.h")
+ (!srcfile 2047  "config/aarch64/aarch64.h")
+ (!srcfile 2047  "config/dbxelf.h")
+ (!srcfile 2047  "config/elfos.h")
+ (!srcfile 2047  "config/newlib-stdint.h")
+ (!srcfile 2047  "config/aarch64/aarch64-elf.h")
+ (!srcfile 2047  "config/aarch64/aarch64-elf-raw.h")
+ (!srcfile 2047  "config/initfini-array.h")
+ (!srcfile 2047  "defaults.h")
+ (!srcfile 2047  "../include/hashtab.h")
+ (!srcfile 2047  "../include/splay-tree.h")
+ (!srcfile 2047  "bitmap.h")
+ (!srcfile 2047  "wide-int.h")
+ (!srcfile 2047  "alias.h")
+ (!srcfile 2047  "coverage.c")
+ (!srcfile 2047  "rtl.h")
+ (!srcfile 2047  "optabs.h")
+ (!srcfile 2047  "tree.h")
+ (!srcfile 2047  "tree-core.h")
+ (!srcfile 2047  "libfuncs.h")
+ (!srcfile 2047  "../libcpp/include/symtab.h")
+ (!srcfile 2047  "../include/obstack.h")
+ (!srcfile 2047  "real.h")
+ (!srcfile 2047  "function.h")
+ (!srcfile 2047  "insn-addr.h")
+ (!srcfile 2047  "hwint.h")
+ (!srcfile 2047  "fixed-value.h")
+ (!srcfile 2047  "output.h")
+ (!srcfile 2047  "cfgloop.h")
+ (!srcfile 2047  "cfg.h")
+ (!srcfile 2047  "profile-count.h")
+ (!srcfile 2047  "cselib.h")
+ (!srcfile 2047  "basic-block.h")
+ (!srcfile 2047  "ipa-ref.h")
+ (!srcfile 2047  "cgraph.h")
+ (!srcfile 2047  "reload.h")
+ (!srcfile 2047  "caller-save.c")
+ (!srcfile 2047  "symtab.c")
+ (!srcfile 2047  "alias.c")
+ (!srcfile 2047  "bitmap.c")
+ (!srcfile 2047  "cselib.c")
+ (!srcfile 2047  "cgraph.c")
+ (!srcfile 2047  "ipa-prop.c")
+ (!srcfile 2047  "ipa-cp.c")
+ (!srcfile 2047  "ipa-utils.h")
+ (!srcfile 2047  "dbxout.c")
+ (!srcfile 2047  "signop.h")
+ (!srcfile 2047  "dwarf2out.h")
+ (!srcfile 2047  "dwarf2asm.c")
+ (!srcfile 2047  "dwarf2cfi.c")
+ (!srcfile 2047  "dwarf2out.c")
+ (!srcfile 2047  "tree-vect-generic.c")
+ (!srcfile 2047  "dojump.c")
+ (!srcfile 2047  "emit-rtl.h")
+ (!srcfile 2047  "emit-rtl.c")
+ (!srcfile 2047  "except.h")
+ (!srcfile 2047  "explow.c")
+ (!srcfile 2047  "expr.c")
+ (!srcfile 2047  "expr.h")
+ (!srcfile 2047  "function.c")
+ (!srcfile 2047  "except.c")
+ (!srcfile 2047  "ggc-tests.c")
+ (!srcfile 2047  "gcse.c")
+ (!srcfile 2047  "godump.c")
+ (!srcfile 2047  "lists.c")
+ (!srcfile 2047  "optabs-libfuncs.c")
+ (!srcfile 2047  "profile.c")
+ (!srcfile 2047  "mcf.c")
+ (!srcfile 2047  "reg-stack.c")
+ (!srcfile 2047  "cfgrtl.c")
+ (!srcfile 2047  "stor-layout.c")
+ (!srcfile 2047  "stringpool.c")
+ (!srcfile 2047  "tree.c")
+ (!srcfile 2047  "varasm.c")
+ (!srcfile 2047  "gimple.h")
+ (!srcfile 2047  "gimple-ssa.h")
+ (!srcfile 2047  "tree-ssanames.c")
+ (!srcfile 2047  "tree-eh.c")
+ (!srcfile 2047  "tree-ssa-address.c")
+ (!srcfile 2047  "tree-cfg.c")
+ (!srcfile 2047  "tree-ssa-loop-ivopts.c")
+ (!srcfile 2047  "tree-dfa.c")
+ (!srcfile 2047  "tree-iterator.c")
+ (!srcfile 2047  "gimple-expr.c")
+ (!srcfile 2047  "tree-chrec.h")
+ (!srcfile 2047  "tree-scalar-evolution.c")
+ (!srcfile 2047  "tree-ssa-operands.h")
+ (!srcfile 2047  "tree-profile.c")
+ (!srcfile 2047  "tree-nested.c")
+ (!srcfile 2047  "omp-offload.h")
+ (!srcfile 2047  "omp-offload.c")
+ (!srcfile 2047  "omp-expand.c")
+ (!srcfile 2047  "omp-low.c")
+ (!srcfile 2047  "targhooks.c")
+ (!srcfile 2047  "config/aarch64/aarch64.c")
+ (!srcfile 2047  "passes.c")
+ (!srcfile 2047  "cgraphunit.c")
+ (!srcfile 2047  "cgraphclones.c")
+ (!srcfile 2047  "tree-phinodes.c")
+ (!srcfile 2047  "tree-ssa-alias.h")
+ (!srcfile 2047  "tree-ssanames.h")
+ (!srcfile 2047  "tree-vrp.h")
+ (!srcfile 2047  "ipa-prop.h")
+ (!srcfile 2047  "trans-mem.c")
+ (!srcfile 2047  "lto-streamer.h")
+ (!srcfile 2047  "target-globals.h")
+ (!srcfile 2047  "ipa-predicate.h")
+ (!srcfile 2047  "ipa-fnsummary.h")
+ (!srcfile 2047  "vtable-verify.c")
+ (!srcfile 2047  "asan.c")
+ (!srcfile 2047  "ubsan.c")
+ (!srcfile 2047  "tsan.c")
+ (!srcfile 2047  "sanopt.c")
+ (!srcfile 2047  "sancov.c")
+ (!srcfile 2047  "ipa-devirt.c")
+ (!srcfile 2047  "internal-fn.h")
+ (!srcfile 2047  "hsa-common.c")
+ (!srcfile 2047  "calls.c")
+ (!srcfile 2047  "omp-general.h")
+ (!srcfile 2047  "config/aarch64/aarch64-builtins.c")
+ (!srcfile 1  "ada/gcc-interface/ada-tree.h")
+ (!srcfile 1  "ada/gcc-interface/gigi.h")
+ (!srcfile 1  "ada/gcc-interface/decl.c")
+ (!srcfile 1  "ada/gcc-interface/trans.c")
+ (!srcfile 1  "ada/gcc-interface/utils.c")
+ (!srcfile 1  "ada/gcc-interface/misc.c")
+ (!srcfile 2  "brig/brig-lang.c")
+ (!srcfile 2  "brig/brig-c.h")
+ (!srcfile 4  "c/c-lang.c")
+ (!srcfile 516  "c/c-tree.h")
+ (!srcfile 516  "c/c-decl.c")
+ (!srcfile 1548  "c-family/c-common.c")
+ (!srcfile 1548  "c-family/c-common.h")
+ (!srcfile 1548  "c-family/c-objc.h")
+ (!srcfile 1540  "c-family/c-cppbuiltin.c")
+ (!srcfile 1548  "c-family/c-pragma.h")
+ (!srcfile 1548  "c-family/c-pragma.c")
+ (!srcfile 1036  "c-family/c-format.c")
+ (!srcfile 516  "c/c-objc-common.c")
+ (!srcfile 516  "c/c-parser.h")
+ (!srcfile 516  "c/c-parser.c")
+ (!srcfile 516  "c/c-lang.h")
+ (!srcfile 1032  "cp/name-lookup.h")
+ (!srcfile 1032  "cp/cp-tree.h")
+ (!srcfile 1032  "cp/decl.h")
+ (!srcfile 1032  "cp/parser.h")
+ (!srcfile 1032  "c-family/c-lex.c")
+ (!srcfile 1032  "cp/call.c")
+ (!srcfile 1032  "cp/class.c")
+ (!srcfile 1032  "cp/constexpr.c")
+ (!srcfile 1032  "cp/cp-gimplify.c")
+ (!srcfile 8  "cp/cp-lang.c")
+ (!srcfile 1032  "cp/cp-objcp-common.c")
+ (!srcfile 1032  "cp/decl.c")
+ (!srcfile 1032  "cp/decl2.c")
+ (!srcfile 1032  "cp/except.c")
+ (!srcfile 1032  "cp/friend.c")
+ (!srcfile 1032  "cp/init.c")
+ (!srcfile 1032  "cp/lambda.c")
+ (!srcfile 1032  "cp/lex.c")
+ (!srcfile 1032  "cp/mangle.c")
+ (!srcfile 1032  "cp/method.c")
+ (!srcfile 1032  "cp/name-lookup.c")
+ (!srcfile 1032  "cp/parser.c")
+ (!srcfile 1032  "cp/pt.c")
+ (!srcfile 1032  "cp/repo.c")
+ (!srcfile 1032  "cp/rtti.c")
+ (!srcfile 1032  "cp/semantics.c")
+ (!srcfile 1032  "cp/tree.c")
+ (!srcfile 1032  "cp/typeck2.c")
+ (!srcfile 1032  "cp/vtable-class-hierarchy.c")
+ (!srcfile 16  "d/d-tree.h")
+ (!srcfile 16  "d/d-builtins.cc")
+ (!srcfile 16  "d/d-lang.cc")
+ (!srcfile 16  "d/modules.cc")
+ (!srcfile 16  "d/typeinfo.cc")
+ (!srcfile 32  "fortran/f95-lang.c")
+ (!srcfile 32  "fortran/trans-decl.c")
+ (!srcfile 32  "fortran/trans-intrinsic.c")
+ (!srcfile 32  "fortran/trans-io.c")
+ (!srcfile 32  "fortran/trans-stmt.c")
+ (!srcfile 32  "fortran/trans-types.c")
+ (!srcfile 32  "fortran/trans-types.h")
+ (!srcfile 32  "fortran/trans.h")
+ (!srcfile 32  "fortran/trans-const.h")
+ (!srcfile 64  "go/go-lang.c")
+ (!srcfile 64  "go/go-c.h")
+ (!srcfile 128  "jit/dummy-frontend.c")
+ (!srcfile 256  "lto/lto-tree.h")
+ (!srcfile 256  "lto/lto-lang.c")
+ (!srcfile 256  "lto/lto.c")
+ (!srcfile 256  "lto/lto.h")
+ (!srcfile 1536  "objc/objc-map.h")
+ (!srcfile 1536  "objc/objc-act.h")
+ (!srcfile 1536  "objc/objc-act.c")
+ (!srcfile 1536  "objc/objc-runtime-shared-support.c")
+ (!srcfile 1536  "objc/objc-gnu-runtime-abi-01.c")
+ (!srcfile 1536  "objc/objc-next-runtime-abi-01.c")
+ (!srcfile 1536  "objc/objc-next-runtime-abi-02.c")
+ (!srcfile 1024  "objcp/objcp-lang.c")
+)
+(!structures 1521
+ 
+ (!type struct 1 nil  gc_used "source_range"
+  (!srcfileloc  "../libcpp/include/line-map.h" 749)
+  (!fields 2 
+   (!pair  "m_start"
+    (!type scalar_nonchar 2 
+     (!type pointer 3 
+      (!type pointer 4 nil  gc_unused
+       (!type already_seen 3)
+      )
+      gc_used
+      (!type already_seen 2)
+     )
+     gc_pointed_to)
+    (!srcfileloc  "../libcpp/include/line-map.h" 321)
+    nil )
+   (!pair  "m_finish"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 322)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 5 nil  gc_used "line_map"
+  (!srcfileloc  "../libcpp/include/line-map.h" 388)
+  (!fields 1 
+   (!pair  "start_location"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 385)
+    nil )
+  )
+  (!options 
+   (!option desc string  "MAP_ORDINARY_P (&%h) ? 1 : 2")
+   (!option tag string  "0")
+  )
+  2047 nil nil )
+ 
+ (!type struct 6 
+  (!type pointer 7 nil  gc_unused
+   (!type already_seen 6)
+  )
+  gc_used "line_map_ordinary"
+  (!srcfileloc  "../libcpp/include/line-map.h" 718)
+  (!fields 7 
+   (!pair  "reason"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 408)
+    nil )
+   (!pair  "sysp"
+    (!type scalar_char 8 
+     (!type pointer 9 
+      (!type pointer 10 nil  gc_unused
+       (!type already_seen 9)
+      )
+      gc_unused
+      (!type already_seen 8)
+     )
+     gc_used)
+    (!srcfileloc  "../libcpp/include/line-map.h" 414)
+    nil )
+   (!pair  "m_column_and_range_bits"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 418)
+    nil )
+   (!pair  "m_range_bits"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 433)
+    nil )
+   (!pair  "to_file"
+    (!type string 11 nil  gc_used)
+    (!srcfileloc  "../libcpp/include/line-map.h" 437)
+    nil )
+   (!pair  "to_line"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 438)
+    nil )
+   (!pair  "included_from"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 443)
+    nil )
+  )
+  (!options 
+   (!option tag string  "1")
+  )
+  2047 nil 
+  (!type already_seen 5)
+ )
+ 
+ (!type struct 12 
+  (!type pointer 13 
+   (!type pointer 14 nil  gc_unused
+    (!type already_seen 13)
+   )
+   gc_unused
+   (!type already_seen 12)
+  )
+  gc_used "cpp_hashnode"
+  (!srcfileloc  "../libcpp/include/cpplib.h" 881)
+  (!fields 7 
+   (!pair  "ident"
+    (!type struct 15 
+     (!type pointer 16 
+      (!type pointer 17 nil  gc_unused
+       (!type already_seen 16)
+      )
+      gc_unused
+      (!type already_seen 15)
+     )
+     gc_used "ht_identifier"
+     (!srcfileloc  "../libcpp/include/symtab.h" 35)
+     (!fields 3 
+      (!pair  "str"
+       (!type already_seen 11)
+       (!srcfileloc  "../libcpp/include/symtab.h" 32)
+       nil )
+      (!pair  "len"
+       (!type already_seen 2)
+       (!srcfileloc  "../libcpp/include/symtab.h" 33)
+       nil )
+      (!pair  "hash_value"
+       (!type already_seen 2)
+       (!srcfileloc  "../libcpp/include/symtab.h" 34)
+       nil )
+     )
+     nil 2047 nil nil )
+    (!srcfileloc  "../libcpp/include/cpplib.h" 869)
+    nil )
+   (!pair  "is_directive"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/cpplib.h" 870)
+    nil )
+   (!pair  "directive_index"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/cpplib.h" 871)
+    nil )
+   (!pair  "rid_code"
+    (!type already_seen 8)
+    (!srcfileloc  "../libcpp/include/cpplib.h" 874)
+    nil )
+   (!pair  "type"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/cpplib.h" 875)
+    nil )
+   (!pair  "flags"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/cpplib.h" 876)
+    nil )
+   (!pair  "value"
+    (!type union 18 nil  gc_used "_cpp_hashnode_value"
+     (!srcfileloc  "../libcpp/include/cpplib.h" 866)
+     (!fields 4 
+      (!pair  "answers"
+       (!type pointer 19 nil  gc_used
+        (!type struct 20 
+         (!type already_seen 19)
+         gc_pointed_to "cpp_macro"
+         (!srcfileloc  "../libcpp/include/cpplib.h" 802)
+         (!fields 12 
+          (!pair  "parm"
+           (!type union 21 nil  gc_used "cpp_parm_u"
+            (!srcfileloc  "../libcpp/include/cpplib.h" 755)
+            (!fields 2 
+             (!pair  "params"
+              (!type already_seen 14)
+              (!srcfileloc  "../libcpp/include/cpplib.h" 751)
+              (!options 
+               (!option length string  "%1.paramc")
+               (!option nested_ptr nested 
+                (!type union 22 
+                 (!type pointer 23 
+                  (!type pointer 24 nil  gc_used
+                   (!type already_seen 23)
+                  )
+                  gc_pointed_to
+                  (!type already_seen 22)
+                 )
+                 gc_pointed_to "tree_node"
+                 (!srcfileloc  "tree-core.h" 1955)
+                 (!fields 39 
+                  (!pair  "base"
+                   (!type struct 25 nil  gc_used "tree_base"
+                    (!srcfileloc  "tree-core.h" 1043)
+                    (!fields 18 
+                     (!pair  "code"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 935)
+                      nil )
+                     (!pair  "side_effects_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 937)
+                      nil )
+                     (!pair  "constant_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 938)
+                      nil )
+                     (!pair  "addressable_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 939)
+                      nil )
+                     (!pair  "volatile_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 940)
+                      nil )
+                     (!pair  "readonly_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 941)
+                      nil )
+                     (!pair  "asm_written_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 942)
+                      nil )
+                     (!pair  "nowarning_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 943)
+                      nil )
+                     (!pair  "visited"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 944)
+                      nil )
+                     (!pair  "used_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 946)
+                      nil )
+                     (!pair  "nothrow_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 947)
+                      nil )
+                     (!pair  "static_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 948)
+                      nil )
+                     (!pair  "public_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 949)
+                      nil )
+                     (!pair  "private_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 950)
+                      nil )
+                     (!pair  "protected_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 951)
+                      nil )
+                     (!pair  "deprecated_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 952)
+                      nil )
+                     (!pair  "default_def_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 953)
+                      nil )
+                     (!pair  "u"
+                      (!type union 26 nil  gc_unused "anonymous:../../linaro/gcc/tree-core.h:955"
+                       (!srcfileloc  "tree-core.h" 1042)
+                       (!fields 9 
+                        (!pair  "bits"
+                         (!type struct 27 nil  gc_unused "anonymous:../../linaro/gcc/tree-core.h:958"
+                          (!srcfileloc  "tree-core.h" 981)
+                          (!fields 16 
+                           (!pair  "lang_flag_0"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 959)
+                            nil )
+                           (!pair  "lang_flag_1"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 960)
+                            nil )
+                           (!pair  "lang_flag_2"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 961)
+                            nil )
+                           (!pair  "lang_flag_3"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 962)
+                            nil )
+                           (!pair  "lang_flag_4"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 963)
+                            nil )
+                           (!pair  "lang_flag_5"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 964)
+                            nil )
+                           (!pair  "lang_flag_6"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 965)
+                            nil )
+                           (!pair  "saturating_flag"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 966)
+                            nil )
+                           (!pair  "unsigned_flag"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 968)
+                            nil )
+                           (!pair  "packed_flag"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 969)
+                            nil )
+                           (!pair  "user_align"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 970)
+                            nil )
+                           (!pair  "nameless_flag"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 971)
+                            nil )
+                           (!pair  "atomic_flag"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 972)
+                            nil )
+                           (!pair  "spare0"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 973)
+                            nil )
+                           (!pair  "spare1"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 975)
+                            nil )
+                           (!pair  "address_space"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 980)
+                            nil )
+                          )
+                          nil 2047 nil nil )
+                         (!srcfileloc  "tree-core.h" 981)
+                         nil )
+                        (!pair  "int_length"
+                         (!type struct 28 nil  gc_unused "anonymous:../../linaro/gcc/tree-core.h:988"
+                          (!srcfileloc  "tree-core.h" 1002)
+                          (!fields 3 
+                           (!pair  "unextended"
+                            (!type already_seen 8)
+                            (!srcfileloc  "tree-core.h" 991)
+                            nil )
+                           (!pair  "extended"
+                            (!type already_seen 8)
+                            (!srcfileloc  "tree-core.h" 995)
+                            nil )
+                           (!pair  "offset"
+                            (!type already_seen 8)
+                            (!srcfileloc  "tree-core.h" 1001)
+                            nil )
+                          )
+                          nil 2047 nil nil )
+                         (!srcfileloc  "tree-core.h" 1002)
+                         nil )
+                        (!pair  "length"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1005)
+                         nil )
+                        (!pair  "vector_cst"
+                         (!type struct 29 nil  gc_unused "anonymous:../../linaro/gcc/tree-core.h:1008"
+                          (!srcfileloc  "tree-core.h" 1017)
+                          (!fields 3 
+                           (!pair  "log2_npatterns"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 1010)
+                            nil )
+                           (!pair  "nelts_per_pattern"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 1013)
+                            nil )
+                           (!pair  "unused"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 1016)
+                            nil )
+                          )
+                          nil 2047 nil nil )
+                         (!srcfileloc  "tree-core.h" 1017)
+                         nil )
+                        (!pair  "version"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1020)
+                         nil )
+                        (!pair  "chrec_var"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1023)
+                         nil )
+                        (!pair  "ifn"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1026)
+                         nil )
+                        (!pair  "omp_atomic_memory_order"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1029)
+                         nil )
+                        (!pair  "dependence_info"
+                         (!type struct 30 nil  gc_unused "anonymous:../../linaro/gcc/tree-core.h:1038"
+                          (!srcfileloc  "tree-core.h" 1041)
+                          (!fields 2 
+                           (!pair  "clique"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 1039)
+                            nil )
+                           (!pair  "base"
+                            (!type already_seen 2)
+                            (!srcfileloc  "tree-core.h" 1040)
+                            nil )
+                          )
+                          nil 2047 nil nil )
+                         (!srcfileloc  "tree-core.h" 1041)
+                         nil )
+                       )
+                       nil 2047 nil )
+                      (!srcfileloc  "tree-core.h" 1042)
+                      (!options 
+                       (!option skip string  "")
+                      )
+                     )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1912)
+                   (!options 
+                    (!option tag string  "TS_BASE")
+                   )
+                  )
+                  (!pair  "typed"
+                   (!type struct 31 nil  gc_used "tree_typed"
+                    (!srcfileloc  "tree-core.h" 1343)
+                    (!fields 2 
+                     (!pair  "base"
+                      (!type already_seen 25)
+                      (!srcfileloc  "tree-core.h" 1341)
+                      nil )
+                     (!pair  "type"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1342)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1913)
+                   (!options 
+                    (!option tag string  "TS_TYPED")
+                   )
+                  )
+                  (!pair  "common"
+                   (!type struct 32 nil  gc_used "tree_common"
+                    (!srcfileloc  "tree-core.h" 1348)
+                    (!fields 2 
+                     (!pair  "typed"
+                      (!type already_seen 31)
+                      (!srcfileloc  "tree-core.h" 1346)
+                      nil )
+                     (!pair  "chain"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1347)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1914)
+                   (!options 
+                    (!option tag string  "TS_COMMON")
+                   )
+                  )
+                  (!pair  "int_cst"
+                   (!type struct 33 nil  gc_used "tree_int_cst"
+                    (!srcfileloc  "tree-core.h" 1353)
+                    (!fields 2 
+                     (!pair  "typed"
+                      (!type already_seen 31)
+                      (!srcfileloc  "tree-core.h" 1351)
+                      nil )
+                     (!pair  "val"
+                      (!type array 34 nil  gc_used "1" 
+                       (!type already_seen 2)
+                      )
+                      (!srcfileloc  "tree-core.h" 1352)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1915)
+                   (!options 
+                    (!option tag string  "TS_INT_CST")
+                   )
+                  )
+                  (!pair  "poly_int_cst"
+                   (!type struct 35 nil  gc_used "tree_poly_int_cst"
+                    (!srcfileloc  "tree-core.h" 1386)
+                    (!fields 2 
+                     (!pair  "typed"
+                      (!type already_seen 31)
+                      (!srcfileloc  "tree-core.h" 1384)
+                      nil )
+                     (!pair  "coeffs"
+                      (!type array 36 nil  gc_used "NUM_POLY_INT_COEFFS" 
+                       (!type already_seen 23)
+                      )
+                      (!srcfileloc  "tree-core.h" 1385)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1916)
+                   (!options 
+                    (!option tag string  "TS_POLY_INT_CST")
+                   )
+                  )
+                  (!pair  "real_cst"
+                   (!type struct 37 nil  gc_used "tree_real_cst"
+                    (!srcfileloc  "tree-core.h" 1359)
+                    (!fields 2 
+                     (!pair  "typed"
+                      (!type already_seen 31)
+                      (!srcfileloc  "tree-core.h" 1357)
+                      nil )
+                     (!pair  "real_cst_ptr"
+                      (!type pointer 38 nil  gc_used
+                       (!type struct 39 
+                        (!type already_seen 38)
+                        gc_pointed_to "real_value"
+                        (!srcfileloc  "real.h" 50)
+                        (!fields 7 
+                         (!pair  "cl"
+                          (!type already_seen 2)
+                          (!srcfileloc  "real.h" 43)
+                          nil )
+                         (!pair  "decimal"
+                          (!type already_seen 2)
+                          (!srcfileloc  "real.h" 44)
+                          nil )
+                         (!pair  "sign"
+                          (!type already_seen 2)
+                          (!srcfileloc  "real.h" 45)
+                          nil )
+                         (!pair  "signalling"
+                          (!type already_seen 2)
+                          (!srcfileloc  "real.h" 46)
+                          nil )
+                         (!pair  "canonical"
+                          (!type already_seen 2)
+                          (!srcfileloc  "real.h" 47)
+                          nil )
+                         (!pair  "uexp"
+                          (!type already_seen 2)
+                          (!srcfileloc  "real.h" 48)
+                          nil )
+                         (!pair  "sig"
+                          (!type array 40 nil  gc_used "SIGSZ" 
+                           (!type already_seen 2)
+                          )
+                          (!srcfileloc  "real.h" 49)
+                          nil )
+                        )
+                        nil 2047 nil nil )
+                      )
+                      (!srcfileloc  "tree-core.h" 1358)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1917)
+                   (!options 
+                    (!option tag string  "TS_REAL_CST")
+                   )
+                  )
+                  (!pair  "fixed_cst"
+                   (!type struct 41 nil  gc_used "tree_fixed_cst"
+                    (!srcfileloc  "tree-core.h" 1364)
+                    (!fields 2 
+                     (!pair  "typed"
+                      (!type already_seen 31)
+                      (!srcfileloc  "tree-core.h" 1362)
+                      nil )
+                     (!pair  "fixed_cst_ptr"
+                      (!type pointer 42 nil  gc_used
+                       (!type struct 43 
+                        (!type already_seen 42)
+                        gc_pointed_to "fixed_value"
+                        (!srcfileloc  "fixed-value.h" 27)
+                        (!fields 2 
+                         (!pair  "data"
+                          (!type already_seen 2)
+                          (!srcfileloc  "fixed-value.h" 25)
+                          nil )
+                         (!pair  "mode"
+                          (!type user_struct 44 nil  gc_used "pod_mode<scalar_mode>"
+                           (!srcfileloc  "coretypes.h" 69)
+                           (!fields 1 
+                            (!pair  "scalar_mode"
+                             (!type struct 45 nil  gc_used "scalar_mode"
+                              (!srcfileloc  "coretypes.h" 65)
+                              (!fields 0 )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "coretypes.h" 69)
+                             nil )
+                           )
+                          )
+                          (!srcfileloc  "fixed-value.h" 26)
+                          nil )
+                        )
+                        nil 2047 nil nil )
+                      )
+                      (!srcfileloc  "tree-core.h" 1363)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1918)
+                   (!options 
+                    (!option tag string  "TS_FIXED_CST")
+                   )
+                  )
+                  (!pair  "vector"
+                   (!type struct 46 nil  gc_used "tree_vector"
+                    (!srcfileloc  "tree-core.h" 1381)
+                    (!fields 2 
+                     (!pair  "typed"
+                      (!type already_seen 31)
+                      (!srcfileloc  "tree-core.h" 1379)
+                      nil )
+                     (!pair  "elts"
+                      (!type array 47 nil  gc_used "1" 
+                       (!type already_seen 23)
+                      )
+                      (!srcfileloc  "tree-core.h" 1380)
+                      (!options 
+                       (!option length string  "vector_cst_encoded_nelts ((tree) &%h)")
+                      )
+                     )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1919)
+                   (!options 
+                    (!option tag string  "TS_VECTOR")
+                   )
+                  )
+                  (!pair  "string"
+                   (!type struct 48 nil  gc_used "tree_string"
+                    (!srcfileloc  "tree-core.h" 1370)
+                    (!fields 3 
+                     (!pair  "typed"
+                      (!type already_seen 31)
+                      (!srcfileloc  "tree-core.h" 1367)
+                      nil )
+                     (!pair  "length"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1368)
+                      nil )
+                     (!pair  "str"
+                      (!type array 49 nil  gc_used "1" 
+                       (!type already_seen 8)
+                      )
+                      (!srcfileloc  "tree-core.h" 1369)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1920)
+                   (!options 
+                    (!option tag string  "TS_STRING")
+                   )
+                  )
+                  (!pair  "complex"
+                   (!type struct 50 nil  gc_used "tree_complex"
+                    (!srcfileloc  "tree-core.h" 1376)
+                    (!fields 3 
+                     (!pair  "typed"
+                      (!type already_seen 31)
+                      (!srcfileloc  "tree-core.h" 1373)
+                      nil )
+                     (!pair  "real"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1374)
+                      nil )
+                     (!pair  "imag"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1375)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1921)
+                   (!options 
+                    (!option tag string  "TS_COMPLEX")
+                   )
+                  )
+                  (!pair  "identifier"
+                   (!type struct 51 nil  gc_used "tree_identifier"
+                    (!srcfileloc  "tree-core.h" 1391)
+                    (!fields 2 
+                     (!pair  "common"
+                      (!type already_seen 32)
+                      (!srcfileloc  "tree-core.h" 1389)
+                      nil )
+                     (!pair  "id"
+                      (!type already_seen 15)
+                      (!srcfileloc  "tree-core.h" 1390)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1922)
+                   (!options 
+                    (!option tag string  "TS_IDENTIFIER")
+                   )
+                  )
+                  (!pair  "decl_minimal"
+                   (!type struct 52 nil  gc_used "tree_decl_minimal"
+                    (!srcfileloc  "tree-core.h" 1639)
+                    (!fields 5 
+                     (!pair  "common"
+                      (!type already_seen 32)
+                      (!srcfileloc  "tree-core.h" 1634)
+                      nil )
+                     (!pair  "locus"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1635)
+                      nil )
+                     (!pair  "uid"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1636)
+                      nil )
+                     (!pair  "name"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1637)
+                      nil )
+                     (!pair  "context"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1638)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1923)
+                   (!options 
+                    (!option tag string  "TS_DECL_MINIMAL")
+                   )
+                  )
+                  (!pair  "decl_common"
+                   (!type struct 53 nil  gc_used "tree_decl_common"
+                    (!srcfileloc  "tree-core.h" 1710)
+                    (!fields 36 
+                     (!pair  "common"
+                      (!type already_seen 52)
+                      (!srcfileloc  "tree-core.h" 1642)
+                      nil )
+                     (!pair  "size"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1643)
+                      nil )
+                     (!pair  "mode"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1645)
+                      nil )
+                     (!pair  "nonlocal_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1647)
+                      nil )
+                     (!pair  "virtual_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1648)
+                      nil )
+                     (!pair  "ignored_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1649)
+                      nil )
+                     (!pair  "abstract_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1650)
+                      nil )
+                     (!pair  "artificial_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1651)
+                      nil )
+                     (!pair  "preserve_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1652)
+                      nil )
+                     (!pair  "debug_expr_is_from"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1653)
+                      nil )
+                     (!pair  "lang_flag_0"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1655)
+                      nil )
+                     (!pair  "lang_flag_1"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1656)
+                      nil )
+                     (!pair  "lang_flag_2"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1657)
+                      nil )
+                     (!pair  "lang_flag_3"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1658)
+                      nil )
+                     (!pair  "lang_flag_4"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1659)
+                      nil )
+                     (!pair  "lang_flag_5"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1660)
+                      nil )
+                     (!pair  "lang_flag_6"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1661)
+                      nil )
+                     (!pair  "lang_flag_7"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1662)
+                      nil )
+                     (!pair  "lang_flag_8"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1663)
+                      nil )
+                     (!pair  "decl_flag_0"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1667)
+                      nil )
+                     (!pair  "decl_flag_1"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1671)
+                      nil )
+                     (!pair  "decl_flag_2"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1675)
+                      nil )
+                     (!pair  "decl_flag_3"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1677)
+                      nil )
+                     (!pair  "gimple_reg_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1680)
+                      nil )
+                     (!pair  "decl_by_reference_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1682)
+                      nil )
+                     (!pair  "decl_read_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1684)
+                      nil )
+                     (!pair  "decl_nonshareable_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1686)
+                      nil )
+                     (!pair  "off_align"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1689)
+                      nil )
+                     (!pair  "align"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1692)
+                      nil )
+                     (!pair  "warn_if_not_align"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1696)
+                      nil )
+                     (!pair  "pt_uid"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1701)
+                      nil )
+                     (!pair  "size_unit"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1703)
+                      nil )
+                     (!pair  "initial"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1704)
+                      nil )
+                     (!pair  "attributes"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1705)
+                      nil )
+                     (!pair  "abstract_origin"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1706)
+                      nil )
+                     (!pair  "lang_specific"
+                      (!type pointer 54 nil  gc_used
+                       (!type lang_struct 55 
+                        (!type already_seen 54)
+                        gc_pointed_to "lang_decl"
+                        (!srcfileloc  "ada/gcc-interface/ada-tree.h" 37)
+                        (!fields 0 )
+                        nil 2047 
+                        (!homotypes 9
+                         (!type struct 56 nil  gc_pointed_to "lang_decl"
+                          (!srcfileloc  "lto/lto-tree.h" 32)
+                          (!fields 1 
+                           (!pair  "dummy"
+                            (!type already_seen 2)
+                            (!srcfileloc  "lto/lto-tree.h" 31)
+                            nil )
+                          )
+                          nil 256 
+                          (!type already_seen 55)
+                          nil )
+                         
+                         (!type struct 57 nil  gc_pointed_to "lang_decl"
+                          (!srcfileloc  "jit/dummy-frontend.c" 45)
+                          (!fields 1 
+                           (!pair  "dummy"
+                            (!type already_seen 8)
+                            (!srcfileloc  "jit/dummy-frontend.c" 44)
+                            nil )
+                          )
+                          (!options 
+                           (!option variable_size string  "")
+                          )
+                          128 
+                          (!type already_seen 55)
+                          nil )
+                         
+                         (!type struct 58 nil  gc_pointed_to "lang_decl"
+                          (!srcfileloc  "go/go-lang.c" 58)
+                          (!fields 1 
+                           (!pair  "dummy"
+                            (!type already_seen 8)
+                            (!srcfileloc  "go/go-lang.c" 57)
+                            nil )
+                          )
+                          nil 64 
+                          (!type already_seen 55)
+                          nil )
+                         
+                         (!type struct 59 nil  gc_pointed_to "lang_decl"
+                          (!srcfileloc  "fortran/trans.h" 983)
+                          (!fields 8 
+                           (!pair  "saved_descriptor"
+                            (!type already_seen 23)
+                            (!srcfileloc  "fortran/trans.h" 971)
+                            nil )
+                           (!pair  "stringlen"
+                            (!type already_seen 23)
+                            (!srcfileloc  "fortran/trans.h" 976)
+                            nil )
+                           (!pair  "addr"
+                            (!type already_seen 23)
+                            (!srcfileloc  "fortran/trans.h" 977)
+                            nil )
+                           (!pair  "span"
+                            (!type already_seen 23)
+                            (!srcfileloc  "fortran/trans.h" 978)
+                            nil )
+                           (!pair  "token"
+                            (!type already_seen 23)
+                            (!srcfileloc  "fortran/trans.h" 980)
+                            nil )
+                           (!pair  "caf_offset"
+                            (!type already_seen 23)
+                            (!srcfileloc  "fortran/trans.h" 980)
+                            nil )
+                           (!pair  "scalar_allocatable"
+                            (!type already_seen 2)
+                            (!srcfileloc  "fortran/trans.h" 981)
+                            nil )
+                           (!pair  "scalar_pointer"
+                            (!type already_seen 2)
+                            (!srcfileloc  "fortran/trans.h" 982)
+                            nil )
+                          )
+                          nil 32 
+                          (!type already_seen 55)
+                          nil )
+                         
+                         (!type struct 60 nil  gc_pointed_to "lang_decl"
+                          (!srcfileloc  "d/d-tree.h" 267)
+                          (!fields 7 
+                           (!pair  "decl"
+                            (!type pointer 61 nil  gc_unused
+                             (!type struct 62 
+                              (!type already_seen 61)
+                              gc_unused "Declaration"
+                              (!srcfileloc  "d/d-tree.h" 206)
+                              (!fields 0 )
+                              nil 16 nil nil )
+                            )
+                            (!srcfileloc  "d/d-tree.h" 248)
+                            (!options 
+                             (!option skip string  "")
+                            )
+                           )
+                           (!pair  "frame_field"
+                            (!type already_seen 23)
+                            (!srcfileloc  "d/d-tree.h" 251)
+                            nil )
+                           (!pair  "named_result"
+                            (!type already_seen 23)
+                            (!srcfileloc  "d/d-tree.h" 254)
+                            nil )
+                           (!pair  "thunks"
+                            (!type already_seen 23)
+                            (!srcfileloc  "d/d-tree.h" 257)
+                            nil )
+                           (!pair  "offset"
+                            (!type already_seen 2)
+                            (!srcfileloc  "d/d-tree.h" 260)
+                            nil )
+                           (!pair  "intrinsic"
+                            (!type already_seen 2)
+                            (!srcfileloc  "d/d-tree.h" 263)
+                            nil )
+                           (!pair  "frame_info"
+                            (!type already_seen 23)
+                            (!srcfileloc  "d/d-tree.h" 266)
+                            nil )
+                          )
+                          nil 16 
+                          (!type already_seen 55)
+                          nil )
+                         
+                         (!type struct 63 nil  gc_pointed_to "lang_decl"
+                          (!srcfileloc  "cp/cp-tree.h" 2711)
+                          (!fields 1 
+                           (!pair  "u"
+                            (!type union 64 nil  gc_used "lang_decl_u"
+                             (!srcfileloc  "cp/cp-tree.h" 2710)
+                             (!fields 6 
+                              (!pair  "base"
+                               (!type struct 65 nil  gc_used "lang_decl_base"
+                                (!srcfileloc  "cp/cp-tree.h" 2572)
+                                (!fields 15 
+                                 (!pair  "selector"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2555)
+                                  nil )
+                                 (!pair  "language"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2556)
+                                  nil )
+                                 (!pair  "use_template"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2557)
+                                  nil )
+                                 (!pair  "not_really_extern"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2558)
+                                  nil )
+                                 (!pair  "initialized_in_class"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2559)
+                                  nil )
+                                 (!pair  "repo_available_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2560)
+                                  nil )
+                                 (!pair  "threadprivate_or_deleted_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2561)
+                                  nil )
+                                 (!pair  "anticipated_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2562)
+                                  nil )
+                                 (!pair  "friend_or_tls"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2564)
+                                  nil )
+                                 (!pair  "unknown_bound_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2565)
+                                  nil )
+                                 (!pair  "odr_used"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2566)
+                                  nil )
+                                 (!pair  "spare"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2567)
+                                  nil )
+                                 (!pair  "concept_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2568)
+                                  nil )
+                                 (!pair  "var_declared_inline_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2569)
+                                  nil )
+                                 (!pair  "dependent_init_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2570)
+                                  nil )
+                                )
+                                nil 1032 nil nil )
+                               (!srcfileloc  "cp/cp-tree.h" 2704)
+                               (!options 
+                                (!option default string  "")
+                               )
+                              )
+                              (!pair  "min"
+                               (!type struct 66 nil  gc_used "lang_decl_min"
+                                (!srcfileloc  "cp/cp-tree.h" 2601)
+                                (!fields 3 
+                                 (!pair  "base"
+                                  (!type already_seen 65)
+                                  (!srcfileloc  "cp/cp-tree.h" 2586)
+                                  nil )
+                                 (!pair  "template_info"
+                                  (!type already_seen 23)
+                                  (!srcfileloc  "cp/cp-tree.h" 2593)
+                                  nil )
+                                 (!pair  "access"
+                                  (!type already_seen 23)
+                                  (!srcfileloc  "cp/cp-tree.h" 2600)
+                                  nil )
+                                )
+                                nil 1032 nil nil )
+                               (!srcfileloc  "cp/cp-tree.h" 2705)
+                               (!options 
+                                (!option tag string  "lds_min")
+                               )
+                              )
+                              (!pair  "fn"
+                               (!type struct 67 nil  gc_used "lang_decl_fn"
+                                (!srcfileloc  "cp/cp-tree.h" 2661)
+                                (!fields 21 
+                                 (!pair  "min"
+                                  (!type already_seen 66)
+                                  (!srcfileloc  "cp/cp-tree.h" 2606)
+                                  nil )
+                                 (!pair  "ovl_op_code"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2609)
+                                  nil )
+                                 (!pair  "global_ctor_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2610)
+                                  nil )
+                                 (!pair  "global_dtor_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2611)
+                                  nil )
+                                 (!pair  "static_function"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2613)
+                                  nil )
+                                 (!pair  "pure_virtual"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2614)
+                                  nil )
+                                 (!pair  "defaulted_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2615)
+                                  nil )
+                                 (!pair  "has_in_charge_parm_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2616)
+                                  nil )
+                                 (!pair  "has_vtt_parm_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2617)
+                                  nil )
+                                 (!pair  "pending_inline_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2618)
+                                  nil )
+                                 (!pair  "nonconverting"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2619)
+                                  nil )
+                                 (!pair  "thunk_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2620)
+                                  nil )
+                                 (!pair  "this_thunk_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2622)
+                                  nil )
+                                 (!pair  "hidden_friend_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2623)
+                                  nil )
+                                 (!pair  "omp_declare_reduction_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2624)
+                                  nil )
+                                 (!pair  "has_dependent_explicit_spec_p"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2625)
+                                  nil )
+                                 (!pair  "spare"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2626)
+                                  nil )
+                                 (!pair  "befriending_classes"
+                                  (!type already_seen 23)
+                                  (!srcfileloc  "cp/cp-tree.h" 2633)
+                                  nil )
+                                 (!pair  "context"
+                                  (!type already_seen 23)
+                                  (!srcfileloc  "cp/cp-tree.h" 2641)
+                                  nil )
+                                 (!pair  "u5"
+                                  (!type union 68 nil  gc_used "lang_decl_u5"
+                                   (!srcfileloc  "cp/cp-tree.h" 2652)
+                                   (!fields 2 
+                                    (!pair  "cloned_function"
+                                     (!type already_seen 23)
+                                     (!srcfileloc  "cp/cp-tree.h" 2647)
+                                     (!options 
+                                      (!option tag string  "0")
+                                     )
+                                    )
+                                    (!pair  "fixed_offset"
+                                     (!type already_seen 2)
+                                     (!srcfileloc  "cp/cp-tree.h" 2651)
+                                     (!options 
+                                      (!option tag string  "1")
+                                     )
+                                    )
+                                   )
+                                   nil 1032 nil )
+                                  (!srcfileloc  "cp/cp-tree.h" 2652)
+                                  (!options 
+                                   (!option desc string  "%1.thunk_p")
+                                  )
+                                 )
+                                 (!pair  "u"
+                                  (!type union 69 nil  gc_used "lang_decl_u3"
+                                   (!srcfileloc  "cp/cp-tree.h" 2659)
+                                   (!fields 2 
+                                    (!pair  "pending_inline_info"
+                                     (!type pointer 70 nil  gc_used
+                                      (!type struct 71 
+                                       (!type already_seen 70)
+                                       gc_pointed_to "cp_token_cache"
+                                       (!srcfileloc  "cp/parser.h" 128)
+                                       (!fields 2 
+                                        (!pair  "first"
+                                         (!type pointer 72 nil  gc_unused
+                                          (!type struct 73 
+                                           (!type already_seen 72)
+                                           gc_used "cp_token"
+                                           (!srcfileloc  "cp/parser.h" 86)
+                                           (!fields 8 
+                                            (!pair  "type"
+                                             (!type already_seen 2)
+                                             (!srcfileloc  "cp/parser.h" 44)
+                                             nil )
+                                            (!pair  "keyword"
+                                             (!type already_seen 2)
+                                             (!srcfileloc  "cp/parser.h" 47)
+                                             nil )
+                                            (!pair  "flags"
+                                             (!type already_seen 8)
+                                             (!srcfileloc  "cp/parser.h" 49)
+                                             nil )
+                                            (!pair  "implicit_extern_c"
+                                             (!type already_seen 2)
+                                             (!srcfileloc  "cp/parser.h" 51)
+                                             nil )
+                                            (!pair  "error_reported"
+                                             (!type already_seen 2)
+                                             (!srcfileloc  "cp/parser.h" 55)
+                                             nil )
+                                            (!pair  "purged_p"
+                                             (!type already_seen 2)
+                                             (!srcfileloc  "cp/parser.h" 59)
+                                             nil )
+                                            (!pair  "location"
+                                             (!type already_seen 2)
+                                             (!srcfileloc  "cp/parser.h" 62)
+                                             nil )
+                                            (!pair  "u"
+                                             (!type union 74 nil  gc_used "cp_token_value"
+                                              (!srcfileloc  "cp/parser.h" 69)
+                                              (!fields 2 
+                                               (!pair  "tree_check_value"
+                                                (!type pointer 75 nil  gc_used
+                                                 (!type struct 76 
+                                                  (!type already_seen 75)
+                                                  gc_pointed_to "tree_check"
+                                                  (!srcfileloc  "cp/parser.h" 38)
+                                                  (!fields 3 
+                                                   (!pair  "value"
+                                                    (!type already_seen 23)
+                                                    (!srcfileloc  "cp/parser.h" 32)
+                                                    nil )
+                                                   (!pair  "checks"
+                                                    (!type pointer 77 nil  gc_used
+                                                     (!type user_struct 78 
+                                                      (!type already_seen 77)
+                                                      gc_pointed_to "vec<deferred_access_check,va_gc>"
+                                                      (!srcfileloc  "cp/parser.h" 34)
+                                                      (!fields 2 
+                                                       (!pair  "va_gc"
+                                                        (!type undefined 79 nil  gc_unused "va_gc"
+                                                         (!srcfileloc  "rtl.h" 263)
+                                                        )
+                                                        (!srcfileloc  "cp/parser.h" 34)
+                                                        nil )
+                                                       (!pair  "deferred_access_check"
+                                                        (!type struct 80 nil  gc_used "deferred_access_check"
+                                                         (!srcfileloc  "cp/parser.h" 34)
+                                                         (!fields 4 
+                                                          (!pair  "binfo"
+                                                           (!type already_seen 23)
+                                                           (!srcfileloc  "cp/cp-tree.h" 6944)
+                                                           nil )
+                                                          (!pair  "decl"
+                                                           (!type already_seen 23)
+                                                           (!srcfileloc  "cp/cp-tree.h" 6946)
+                                                           nil )
+                                                          (!pair  "diag_decl"
+                                                           (!type already_seen 23)
+                                                           (!srcfileloc  "cp/cp-tree.h" 6948)
+                                                           nil )
+                                                          (!pair  "loc"
+                                                           (!type already_seen 2)
+                                                           (!srcfileloc  "cp/cp-tree.h" 6950)
+                                                           nil )
+                                                         )
+                                                         nil 1032 nil nil )
+                                                        (!srcfileloc  "cp/parser.h" 34)
+                                                        nil )
+                                                      )
+                                                     )
+                                                    )
+                                                    (!srcfileloc  "cp/parser.h" 34)
+                                                    nil )
+                                                   (!pair  "qualifying_scope"
+                                                    (!type already_seen 23)
+                                                    (!srcfileloc  "cp/parser.h" 37)
+                                                    nil )
+                                                  )
+                                                  nil 1032 nil nil )
+                                                )
+                                                (!srcfileloc  "cp/parser.h" 66)
+                                                (!options 
+                                                 (!option tag string  "1")
+                                                )
+                                               )
+                                               (!pair  "value"
+                                                (!type already_seen 23)
+                                                (!srcfileloc  "cp/parser.h" 68)
+                                                (!options 
+                                                 (!option tag string  "0")
+                                                )
+                                               )
+                                              )
+                                              nil 1032 nil )
+                                             (!srcfileloc  "cp/parser.h" 71)
+                                             (!options 
+                                              (!option desc string  "(%1.type == CPP_TEMPLATE_ID)|| (%1.type == CPP_NESTED_NAME_SPECIFIER)|| (%1.type == CPP_DECLTYPE)")
+                                             )
+                                            )
+                                           )
+                                           nil 1032 nil nil )
+                                         )
+                                         (!srcfileloc  "cp/parser.h" 122)
+                                         (!options 
+                                          (!option skip string  "")
+                                         )
+                                        )
+                                        (!pair  "last"
+                                         (!type already_seen 72)
+                                         (!srcfileloc  "cp/parser.h" 125)
+                                         (!options 
+                                          (!option skip string  "")
+                                         )
+                                        )
+                                       )
+                                       nil 1032 nil nil )
+                                     )
+                                     (!srcfileloc  "cp/cp-tree.h" 2656)
+                                     (!options 
+                                      (!option tag string  "1")
+                                     )
+                                    )
+                                    (!pair  "saved_language_function"
+                                     (!type pointer 81 nil  gc_used
+                                      (!type lang_struct 82 
+                                       (!type already_seen 81)
+                                       gc_pointed_to "language_function"
+                                       (!srcfileloc  "ada/gcc-interface/trans.c" 117)
+                                       (!fields 0 )
+                                       nil 2047 
+                                       (!homotypes 9
+                                        (!type struct 83 nil  gc_pointed_to "language_function"
+                                         (!srcfileloc  "lto/lto-tree.h" 42)
+                                         (!fields 1 
+                                          (!pair  "dummy"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "lto/lto-tree.h" 41)
+                                           nil )
+                                         )
+                                         nil 256 
+                                         (!type already_seen 82)
+                                         nil )
+                                        
+                                        (!type struct 84 nil  gc_pointed_to "language_function"
+                                         (!srcfileloc  "jit/dummy-frontend.c" 71)
+                                         (!fields 1 
+                                          (!pair  "dummy"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "jit/dummy-frontend.c" 70)
+                                           nil )
+                                         )
+                                         nil 128 
+                                         (!type already_seen 82)
+                                         nil )
+                                        
+                                        (!type struct 85 nil  gc_pointed_to "language_function"
+                                         (!srcfileloc  "go/go-lang.c" 84)
+                                         (!fields 1 
+                                          (!pair  "dummy"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "go/go-lang.c" 83)
+                                           nil )
+                                         )
+                                         nil 64 
+                                         (!type already_seen 82)
+                                         nil )
+                                        
+                                        (!type struct 86 nil  gc_pointed_to "language_function"
+                                         (!srcfileloc  "fortran/f95-lang.c" 68)
+                                         (!fields 1 
+                                          (!pair  "binding_level"
+                                           (!type pointer 87 nil  gc_used
+                                            (!type lang_struct 88 
+                                             (!type already_seen 87)
+                                             gc_pointed_to "binding_level"
+                                             (!srcfileloc  "d/d-tree.h" 118)
+                                             (!fields 0 )
+                                             (!options 
+                                              (!option chain_next string  "%h.level_chain")
+                                             )
+                                             48 
+                                             (!homotypes 2
+                                              (!type struct 89 nil  gc_pointed_to "binding_level"
+                                               (!srcfileloc  "fortran/f95-lang.c" 298)
+                                               (!fields 4 
+                                                (!pair  "names"
+                                                 (!type already_seen 23)
+                                                 (!srcfileloc  "fortran/f95-lang.c" 289)
+                                                 nil )
+                                                (!pair  "blocks"
+                                                 (!type already_seen 23)
+                                                 (!srcfileloc  "fortran/f95-lang.c" 292)
+                                                 nil )
+                                                (!pair  "level_chain"
+                                                 (!type already_seen 87)
+                                                 (!srcfileloc  "fortran/f95-lang.c" 294)
+                                                 nil )
+                                                (!pair  "reversed"
+                                                 (!type already_seen 2)
+                                                 (!srcfileloc  "fortran/f95-lang.c" 297)
+                                                 nil )
+                                               )
+                                               nil 32 
+                                               (!type already_seen 88)
+                                               nil )
+                                              
+                                              (!type struct 90 nil  gc_pointed_to "binding_level"
+                                               (!srcfileloc  "d/d-tree.h" 118)
+                                               (!fields 4 
+                                                (!pair  "names"
+                                                 (!type already_seen 23)
+                                                 (!srcfileloc  "d/d-tree.h" 107)
+                                                 nil )
+                                                (!pair  "blocks"
+                                                 (!type already_seen 23)
+                                                 (!srcfileloc  "d/d-tree.h" 111)
+                                                 nil )
+                                                (!pair  "level_chain"
+                                                 (!type already_seen 87)
+                                                 (!srcfileloc  "d/d-tree.h" 114)
+                                                 nil )
+                                                (!pair  "kind"
+                                                 (!type already_seen 2)
+                                                 (!srcfileloc  "d/d-tree.h" 117)
+                                                 nil )
+                                               )
+                                               (!options 
+                                                (!option chain_next string  "%h.level_chain")
+                                               )
+                                               16 
+                                               (!type already_seen 88)
+                                               nil )
+                                             )
+                                            )
+                                           )
+                                           (!srcfileloc  "fortran/f95-lang.c" 67)
+                                           nil )
+                                         )
+                                         nil 32 
+                                         (!type already_seen 82)
+                                         nil )
+                                        
+                                        (!type struct 91 nil  gc_pointed_to "language_function"
+                                         (!srcfileloc  "d/d-tree.h" 241)
+                                         (!fields 6 
+                                          (!pair  "function"
+                                           (!type pointer 92 nil  gc_unused
+                                            (!type struct 93 
+                                             (!type already_seen 92)
+                                             gc_unused "FuncDeclaration"
+                                             (!srcfileloc  "d/d-tree.h" 226)
+                                             (!fields 0 )
+                                             nil 16 nil nil )
+                                           )
+                                           (!srcfileloc  "d/d-tree.h" 226)
+                                           (!options 
+                                            (!option skip string  "")
+                                           )
+                                          )
+                                          (!pair  "module"
+                                           (!type pointer 94 nil  gc_unused
+                                            (!type struct 95 
+                                             (!type already_seen 94)
+                                             gc_unused "Module"
+                                             (!srcfileloc  "d/d-tree.h" 227)
+                                             (!fields 0 )
+                                             nil 16 nil nil )
+                                           )
+                                           (!srcfileloc  "d/d-tree.h" 227)
+                                           (!options 
+                                            (!option skip string  "")
+                                           )
+                                          )
+                                          (!pair  "static_chain"
+                                           (!type already_seen 23)
+                                           (!srcfileloc  "d/d-tree.h" 230)
+                                           nil )
+                                          (!pair  "stmt_list"
+                                           (!type pointer 96 nil  gc_used
+                                            (!type user_struct 97 
+                                             (!type already_seen 96)
+                                             gc_pointed_to "vec<tree,va_gc>"
+                                             (!srcfileloc  "tree-core.h" 1540)
+                                             (!fields 2 
+                                              (!pair  "va_gc"
+                                               (!type already_seen 79)
+                                               (!srcfileloc  "tree-core.h" 1540)
+                                               nil )
+                                              (!pair  "tree"
+                                               (!type already_seen 23)
+                                               (!srcfileloc  "tree-core.h" 1540)
+                                               nil )
+                                             )
+                                            )
+                                           )
+                                           (!srcfileloc  "d/d-tree.h" 234)
+                                           nil )
+                                          (!pair  "vars_in_scope"
+                                           (!type already_seen 96)
+                                           (!srcfileloc  "d/d-tree.h" 237)
+                                           nil )
+                                          (!pair  "labels"
+                                           (!type pointer 98 nil  gc_used
+                                            (!type user_struct 99 
+                                             (!type already_seen 98)
+                                             gc_pointed_to "hash_map<Statement*,d_label_entry>"
+                                             (!srcfileloc  "d/d-tree.h" 240)
+                                             (!fields 2 
+                                              (!pair  "d_label_entry"
+                                               (!type struct 100 nil  gc_used "d_label_entry"
+                                                (!srcfileloc  "d/d-tree.h" 240)
+                                                (!fields 7 
+                                                 (!pair  "label"
+                                                  (!type already_seen 23)
+                                                  (!srcfileloc  "d/d-tree.h" 147)
+                                                  nil )
+                                                 (!pair  "statement"
+                                                  (!type pointer 101 nil  gc_used
+                                                   (!type struct 102 
+                                                    (!type already_seen 101)
+                                                    gc_pointed_to "Statement"
+                                                    (!srcfileloc  "d/d-tree.h" 132)
+                                                    (!fields 0 )
+                                                    nil 16 nil nil )
+                                                  )
+                                                  (!srcfileloc  "d/d-tree.h" 150)
+                                                  (!options 
+                                                   (!option skip string  "")
+                                                  )
+                                                 )
+                                                 (!pair  "level"
+                                                  (!type already_seen 87)
+                                                  (!srcfileloc  "d/d-tree.h" 155)
+                                                  nil )
+                                                 (!pair  "fwdrefs"
+                                                  (!type pointer 103 nil  gc_used
+                                                   (!type struct 104 
+                                                    (!type already_seen 103)
+                                                    gc_pointed_to "d_label_use_entry"
+                                                    (!srcfileloc  "d/d-tree.h" 138)
+                                                    (!fields 3 
+                                                     (!pair  "next"
+                                                      (!type already_seen 103)
+                                                      (!srcfileloc  "d/d-tree.h" 129)
+                                                      nil )
+                                                     (!pair  "statement"
+                                                      (!type already_seen 101)
+                                                      (!srcfileloc  "d/d-tree.h" 132)
+                                                      (!options 
+                                                       (!option skip string  "")
+                                                      )
+                                                     )
+                                                     (!pair  "level"
+                                                      (!type already_seen 87)
+                                                      (!srcfileloc  "d/d-tree.h" 137)
+                                                      nil )
+                                                    )
+                                                    (!options 
+                                                     (!option chain_next string  "%h.next")
+                                                    )
+                                                    16 nil nil )
+                                                  )
+                                                  (!srcfileloc  "d/d-tree.h" 158)
+                                                  nil )
+                                                 (!pair  "in_try_scope"
+                                                  (!type already_seen 2)
+                                                  (!srcfileloc  "d/d-tree.h" 163)
+                                                  nil )
+                                                 (!pair  "in_catch_scope"
+                                                  (!type already_seen 2)
+                                                  (!srcfileloc  "d/d-tree.h" 164)
+                                                  nil )
+                                                 (!pair  "bc_label"
+                                                  (!type already_seen 2)
+                                                  (!srcfileloc  "d/d-tree.h" 167)
+                                                  nil )
+                                                )
+                                                nil 16 nil nil )
+                                               (!srcfileloc  "d/d-tree.h" 240)
+                                               nil )
+                                              (!pair  "Statement"
+                                               (!type already_seen 101)
+                                               (!srcfileloc  "d/d-tree.h" 240)
+                                               nil )
+                                             )
+                                            )
+                                           )
+                                           (!srcfileloc  "d/d-tree.h" 240)
+                                           nil )
+                                         )
+                                         nil 16 
+                                         (!type already_seen 82)
+                                         nil )
+                                        
+                                        (!type struct 105 nil  gc_pointed_to "language_function"
+                                         (!srcfileloc  "cp/cp-tree.h" 1838)
+                                         (!fields 21 
+                                          (!pair  "base"
+                                           (!type struct 106 nil  gc_used "c_language_function"
+                                            (!srcfileloc  "c-family/c-common.h" 571)
+                                            (!fields 2 
+                                             (!pair  "x_stmt_tree"
+                                              (!type struct 107 
+                                               (!type pointer 108 nil  gc_unused
+                                                (!type already_seen 107)
+                                               )
+                                               gc_used "stmt_tree_s"
+                                               (!srcfileloc  "c-family/c-common.h" 556)
+                                               (!fields 2 
+                                                (!pair  "x_cur_stmt_list"
+                                                 (!type already_seen 96)
+                                                 (!srcfileloc  "c-family/c-common.h" 544)
+                                                 nil )
+                                                (!pair  "stmts_are_full_exprs_p"
+                                                 (!type already_seen 2)
+                                                 (!srcfileloc  "c-family/c-common.h" 555)
+                                                 nil )
+                                               )
+                                               nil 1548 nil nil )
+                                              (!srcfileloc  "c-family/c-common.h" 566)
+                                              nil )
+                                             (!pair  "local_typedefs"
+                                              (!type already_seen 96)
+                                              (!srcfileloc  "c-family/c-common.h" 570)
+                                              nil )
+                                            )
+                                            nil 1548 nil nil )
+                                           (!srcfileloc  "cp/cp-tree.h" 1807)
+                                           nil )
+                                          (!pair  "x_cdtor_label"
+                                           (!type already_seen 23)
+                                           (!srcfileloc  "cp/cp-tree.h" 1809)
+                                           nil )
+                                          (!pair  "x_current_class_ptr"
+                                           (!type already_seen 23)
+                                           (!srcfileloc  "cp/cp-tree.h" 1810)
+                                           nil )
+                                          (!pair  "x_current_class_ref"
+                                           (!type already_seen 23)
+                                           (!srcfileloc  "cp/cp-tree.h" 1811)
+                                           nil )
+                                          (!pair  "x_eh_spec_block"
+                                           (!type already_seen 23)
+                                           (!srcfileloc  "cp/cp-tree.h" 1812)
+                                           nil )
+                                          (!pair  "x_in_charge_parm"
+                                           (!type already_seen 23)
+                                           (!srcfileloc  "cp/cp-tree.h" 1813)
+                                           nil )
+                                          (!pair  "x_vtt_parm"
+                                           (!type already_seen 23)
+                                           (!srcfileloc  "cp/cp-tree.h" 1814)
+                                           nil )
+                                          (!pair  "x_return_value"
+                                           (!type already_seen 23)
+                                           (!srcfileloc  "cp/cp-tree.h" 1815)
+                                           nil )
+                                          (!pair  "x_auto_return_pattern"
+                                           (!type already_seen 23)
+                                           (!srcfileloc  "cp/cp-tree.h" 1816)
+                                           nil )
+                                          (!pair  "returns_value"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "cp/cp-tree.h" 1818)
+                                           nil )
+                                          (!pair  "returns_null"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "cp/cp-tree.h" 1819)
+                                           nil )
+                                          (!pair  "returns_abnormally"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "cp/cp-tree.h" 1820)
+                                           nil )
+                                          (!pair  "infinite_loop"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "cp/cp-tree.h" 1821)
+                                           nil )
+                                          (!pair  "x_in_function_try_handler"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "cp/cp-tree.h" 1822)
+                                           nil )
+                                          (!pair  "x_in_base_initializer"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "cp/cp-tree.h" 1823)
+                                           nil )
+                                          (!pair  "can_throw"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "cp/cp-tree.h" 1826)
+                                           nil )
+                                          (!pair  "invalid_constexpr"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "cp/cp-tree.h" 1828)
+                                           nil )
+                                          (!pair  "x_named_labels"
+                                           (!type pointer 109 nil  gc_used
+                                            (!type user_struct 110 
+                                             (!type already_seen 109)
+                                             gc_pointed_to "hash_table<named_label_hash>"
+                                             (!srcfileloc  "cp/cp-tree.h" 1830)
+                                             (!fields 1 
+                                              (!pair  "named_label_hash"
+                                               (!type struct 111 nil  gc_used "named_label_hash"
+                                                (!srcfileloc  "cp/cp-tree.h" 1830)
+                                                (!fields 0 )
+                                                nil 1032 nil nil )
+                                               (!srcfileloc  "cp/cp-tree.h" 1830)
+                                               nil )
+                                             )
+                                            )
+                                           )
+                                           (!srcfileloc  "cp/cp-tree.h" 1830)
+                                           nil )
+                                          (!pair  "bindings"
+                                           (!type pointer 112 nil  gc_used
+                                            (!type struct 113 
+                                             (!type already_seen 112)
+                                             gc_pointed_to "cp_binding_level"
+                                             (!srcfileloc  "cp/name-lookup.h" 240)
+                                             (!fields 16 
+                                              (!pair  "names"
+                                               (!type already_seen 23)
+                                               (!srcfileloc  "cp/name-lookup.h" 177)
+                                               nil )
+                                              (!pair  "usings"
+                                               (!type already_seen 23)
+                                               (!srcfileloc  "cp/name-lookup.h" 180)
+                                               nil )
+                                              (!pair  "using_directives"
+                                               (!type already_seen 96)
+                                               (!srcfileloc  "cp/name-lookup.h" 183)
+                                               nil )
+                                              (!pair  "class_shadowed"
+                                               (!type pointer 114 nil  gc_used
+                                                (!type user_struct 115 
+                                                 (!type already_seen 114)
+                                                 gc_pointed_to "vec<cp_class_binding,va_gc>"
+                                                 (!srcfileloc  "cp/name-lookup.h" 187)
+                                                 (!fields 2 
+                                                  (!pair  "va_gc"
+                                                   (!type already_seen 79)
+                                                   (!srcfileloc  "cp/name-lookup.h" 187)
+                                                   nil )
+                                                  (!pair  "cp_class_binding"
+                                                   (!type struct 116 nil  gc_used "cp_class_binding"
+                                                    (!srcfileloc  "cp/name-lookup.h" 187)
+                                                    (!fields 2 
+                                                     (!pair  "base"
+                                                      (!type pointer 117 nil  gc_used
+                                                       (!type struct 118 
+                                                        (!type already_seen 117)
+                                                        gc_pointed_to "cxx_binding"
+                                                        (!srcfileloc  "cp/name-lookup.h" 76)
+                                                        (!fields 6 
+                                                         (!pair  "previous"
+                                                          (!type already_seen 117)
+                                                          (!srcfileloc  "cp/name-lookup.h" 67)
+                                                          nil )
+                                                         (!pair  "value"
+                                                          (!type already_seen 23)
+                                                          (!srcfileloc  "cp/name-lookup.h" 69)
+                                                          nil )
+                                                         (!pair  "type"
+                                                          (!type already_seen 23)
+                                                          (!srcfileloc  "cp/name-lookup.h" 71)
+                                                          nil )
+                                                         (!pair  "scope"
+                                                          (!type already_seen 112)
+                                                          (!srcfileloc  "cp/name-lookup.h" 73)
+                                                          nil )
+                                                         (!pair  "value_is_inherited"
+                                                          (!type already_seen 2)
+                                                          (!srcfileloc  "cp/name-lookup.h" 74)
+                                                          nil )
+                                                         (!pair  "is_local"
+                                                          (!type already_seen 2)
+                                                          (!srcfileloc  "cp/name-lookup.h" 75)
+                                                          nil )
+                                                        )
+                                                        nil 1032 nil nil )
+                                                      )
+                                                      (!srcfileloc  "cp/name-lookup.h" 146)
+                                                      nil )
+                                                     (!pair  "identifier"
+                                                      (!type already_seen 23)
+                                                      (!srcfileloc  "cp/name-lookup.h" 148)
+                                                      nil )
+                                                    )
+                                                    nil 1032 nil nil )
+                                                   (!srcfileloc  "cp/name-lookup.h" 187)
+                                                   nil )
+                                                 )
+                                                )
+                                               )
+                                               (!srcfileloc  "cp/name-lookup.h" 187)
+                                               nil )
+                                              (!pair  "type_shadowed"
+                                               (!type already_seen 23)
+                                               (!srcfileloc  "cp/name-lookup.h" 194)
+                                               nil )
+                                              (!pair  "blocks"
+                                               (!type already_seen 23)
+                                               (!srcfileloc  "cp/name-lookup.h" 199)
+                                               nil )
+                                              (!pair  "this_entity"
+                                               (!type already_seen 23)
+                                               (!srcfileloc  "cp/name-lookup.h" 203)
+                                               nil )
+                                              (!pair  "level_chain"
+                                               (!type already_seen 112)
+                                               (!srcfileloc  "cp/name-lookup.h" 206)
+                                               nil )
+                                              (!pair  "statement_list"
+                                               (!type already_seen 23)
+                                               (!srcfileloc  "cp/name-lookup.h" 210)
+                                               nil )
+                                              (!pair  "binding_depth"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "cp/name-lookup.h" 213)
+                                               nil )
+                                              (!pair  "kind"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "cp/name-lookup.h" 218)
+                                               nil )
+                                              (!pair  "explicit_spec_p"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "cp/name-lookup.h" 222)
+                                               nil )
+                                              (!pair  "keep"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "cp/name-lookup.h" 225)
+                                               nil )
+                                              (!pair  "more_cleanups_ok"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "cp/name-lookup.h" 229)
+                                               nil )
+                                              (!pair  "have_cleanups"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "cp/name-lookup.h" 230)
+                                               nil )
+                                              (!pair  "defining_class_p"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "cp/name-lookup.h" 237)
+                                               nil )
+                                             )
+                                             nil 1032 nil nil )
+                                           )
+                                           (!srcfileloc  "cp/cp-tree.h" 1832)
+                                           nil )
+                                          (!pair  "infinite_loops"
+                                           (!type already_seen 96)
+                                           (!srcfileloc  "cp/cp-tree.h" 1836)
+                                           nil )
+                                          (!pair  "extern_decl_map"
+                                           (!type pointer 119 nil  gc_used
+                                            (!type user_struct 120 
+                                             (!type already_seen 119)
+                                             gc_pointed_to "hash_table<cxx_int_tree_map_hasher>"
+                                             (!srcfileloc  "cp/cp-tree.h" 1837)
+                                             (!fields 1 
+                                              (!pair  "cxx_int_tree_map_hasher"
+                                               (!type struct 121 nil  gc_used "cxx_int_tree_map_hasher"
+                                                (!srcfileloc  "cp/cp-tree.h" 1837)
+                                                (!fields 0 )
+                                                nil 1032 nil nil )
+                                               (!srcfileloc  "cp/cp-tree.h" 1837)
+                                               nil )
+                                             )
+                                            )
+                                           )
+                                           (!srcfileloc  "cp/cp-tree.h" 1837)
+                                           nil )
+                                         )
+                                         nil 1032 
+                                         (!type already_seen 82)
+                                         nil )
+                                        
+                                        (!type struct 122 nil  gc_pointed_to "language_function"
+                                         (!srcfileloc  "c/c-lang.h" 62)
+                                         (!fields 9 
+                                          (!pair  "base"
+                                           (!type already_seen 106)
+                                           (!srcfileloc  "c/c-lang.h" 53)
+                                           nil )
+                                          (!pair  "x_break_label"
+                                           (!type already_seen 23)
+                                           (!srcfileloc  "c/c-lang.h" 54)
+                                           nil )
+                                          (!pair  "x_cont_label"
+                                           (!type already_seen 23)
+                                           (!srcfileloc  "c/c-lang.h" 55)
+                                           nil )
+                                          (!pair  "x_switch_stack"
+                                           (!type pointer 123 nil  gc_unused
+                                            (!type struct 124 
+                                             (!type already_seen 123)
+                                             gc_unused "c_switch"nil 
+                                             (!fields 0 )
+                                             nil 0 nil nil )
+                                           )
+                                           (!srcfileloc  "c/c-lang.h" 56)
+                                           (!options 
+                                            (!option skip string  "")
+                                           )
+                                          )
+                                          (!pair  "arg_info"
+                                           (!type pointer 125 nil  gc_unused
+                                            (!type struct 126 
+                                             (!type already_seen 125)
+                                             gc_unused "c_arg_info"nil 
+                                             (!fields 0 )
+                                             nil 0 nil nil )
+                                           )
+                                           (!srcfileloc  "c/c-lang.h" 57)
+                                           (!options 
+                                            (!option skip string  "")
+                                           )
+                                          )
+                                          (!pair  "returns_value"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "c/c-lang.h" 58)
+                                           nil )
+                                          (!pair  "returns_null"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "c/c-lang.h" 59)
+                                           nil )
+                                          (!pair  "returns_abnormally"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "c/c-lang.h" 60)
+                                           nil )
+                                          (!pair  "warn_about_return_type"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "c/c-lang.h" 61)
+                                           nil )
+                                         )
+                                         nil 516 
+                                         (!type already_seen 82)
+                                         nil )
+                                        
+                                        (!type struct 127 nil  gc_pointed_to "language_function"
+                                         (!srcfileloc  "brig/brig-lang.c" 104)
+                                         (!fields 1 
+                                          (!pair  "dummy"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "brig/brig-lang.c" 103)
+                                           nil )
+                                         )
+                                         nil 2 
+                                         (!type already_seen 82)
+                                         nil )
+                                        
+                                        (!type struct 128 nil  gc_pointed_to "language_function"
+                                         (!srcfileloc  "ada/gcc-interface/trans.c" 117)
+                                         (!fields 4 
+                                          (!pair  "parm_attr_cache"
+                                           (!type pointer 129 nil  gc_used
+                                            (!type user_struct 130 
+                                             (!type already_seen 129)
+                                             gc_pointed_to "vec<parm_attr,va_gc>"
+                                             (!srcfileloc  "ada/gcc-interface/trans.c" 113)
+                                             (!fields 2 
+                                              (!pair  "va_gc"
+                                               (!type already_seen 79)
+                                               (!srcfileloc  "ada/gcc-interface/trans.c" 113)
+                                               nil )
+                                              (!pair  "parm_attr"
+                                               (!type pointer 131 nil  gc_used
+                                                (!type struct 132 
+                                                 (!type already_seen 131)
+                                                 gc_pointed_to "parm_attr_d"
+                                                 (!srcfileloc  "ada/gcc-interface/trans.c" 107)
+                                                 (!fields 5 
+                                                  (!pair  "id"
+                                                   (!type already_seen 2)
+                                                   (!srcfileloc  "ada/gcc-interface/trans.c" 102)
+                                                   nil )
+                                                  (!pair  "dim"
+                                                   (!type already_seen 2)
+                                                   (!srcfileloc  "ada/gcc-interface/trans.c" 103)
+                                                   nil )
+                                                  (!pair  "first"
+                                                   (!type already_seen 23)
+                                                   (!srcfileloc  "ada/gcc-interface/trans.c" 104)
+                                                   nil )
+                                                  (!pair  "last"
+                                                   (!type already_seen 23)
+                                                   (!srcfileloc  "ada/gcc-interface/trans.c" 105)
+                                                   nil )
+                                                  (!pair  "length"
+                                                   (!type already_seen 23)
+                                                   (!srcfileloc  "ada/gcc-interface/trans.c" 106)
+                                                   nil )
+                                                 )
+                                                 nil 1 nil nil )
+                                               )
+                                               (!srcfileloc  "ada/gcc-interface/trans.c" 113)
+                                               nil )
+                                             )
+                                            )
+                                           )
+                                           (!srcfileloc  "ada/gcc-interface/trans.c" 113)
+                                           nil )
+                                          (!pair  "named_ret_val"
+                                           (!type pointer 133 nil  gc_used
+                                            (!type struct 134 
+                                             (!type already_seen 133)
+                                             gc_pointed_to "bitmap_head"
+                                             (!srcfileloc  "bitmap.h" 344)
+                                             (!fields 5 
+                                              (!pair  "indx"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "bitmap.h" 332)
+                                               nil )
+                                              (!pair  "tree_form"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "bitmap.h" 335)
+                                               nil )
+                                              (!pair  "first"
+                                               (!type pointer 135 nil  gc_used
+                                                (!type struct 136 
+                                                 (!type already_seen 135)
+                                                 gc_pointed_to "bitmap_element"
+                                                 (!srcfileloc  "bitmap.h" 338)
+                                                 (!fields 4 
+                                                  (!pair  "next"
+                                                   (!type already_seen 135)
+                                                   (!srcfileloc  "bitmap.h" 311)
+                                                   nil )
+                                                  (!pair  "prev"
+                                                   (!type already_seen 135)
+                                                   (!srcfileloc  "bitmap.h" 314)
+                                                   nil )
+                                                  (!pair  "indx"
+                                                   (!type already_seen 2)
+                                                   (!srcfileloc  "bitmap.h" 316)
+                                                   nil )
+                                                  (!pair  "bits"
+                                                   (!type array 137 nil  gc_used "BITMAP_ELEMENT_WORDS" 
+                                                    (!type already_seen 2)
+                                                   )
+                                                   (!srcfileloc  "bitmap.h" 318)
+                                                   nil )
+                                                 )
+                                                 (!options 
+                                                  (!option chain_next string  "%h.next")
+                                                 )
+                                                 2047 nil nil )
+                                               )
+                                               (!srcfileloc  "bitmap.h" 338)
+                                               nil )
+                                              (!pair  "current"
+                                               (!type already_seen 135)
+                                               (!srcfileloc  "bitmap.h" 340)
+                                               (!options 
+                                                (!option skip string  "")
+                                               )
+                                              )
+                                              (!pair  "obstack"
+                                               (!type pointer 138 nil  gc_unused
+                                                (!type struct 139 
+                                                 (!type already_seen 138)
+                                                 gc_unused "bitmap_obstack"
+                                                 (!srcfileloc  "bitmap.h" 342)
+                                                 (!fields 0 )
+                                                 nil 2047 nil nil )
+                                               )
+                                               (!srcfileloc  "bitmap.h" 342)
+                                               (!options 
+                                                (!option skip string  "")
+                                               )
+                                              )
+                                             )
+                                             nil 2047 nil nil )
+                                           )
+                                           (!srcfileloc  "ada/gcc-interface/trans.c" 114)
+                                           nil )
+                                          (!pair  "other_ret_val"
+                                           (!type already_seen 96)
+                                           (!srcfileloc  "ada/gcc-interface/trans.c" 115)
+                                           nil )
+                                          (!pair  "gnat_ret"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "ada/gcc-interface/trans.c" 116)
+                                           nil )
+                                         )
+                                         nil 1 
+                                         (!type already_seen 82)
+                                         nil )
+                                       )
+                                      )
+                                     )
+                                     (!srcfileloc  "cp/cp-tree.h" 2658)
+                                     (!options 
+                                      (!option tag string  "0")
+                                     )
+                                    )
+                                   )
+                                   nil 1032 nil )
+                                  (!srcfileloc  "cp/cp-tree.h" 2659)
+                                  (!options 
+                                   (!option desc string  "%1.pending_inline_p")
+                                  )
+                                 )
+                                )
+                                nil 1032 nil nil )
+                               (!srcfileloc  "cp/cp-tree.h" 2706)
+                               (!options 
+                                (!option tag string  "lds_fn")
+                               )
+                              )
+                              (!pair  "ns"
+                               (!type struct 140 nil  gc_used "lang_decl_ns"
+                                (!srcfileloc  "cp/cp-tree.h" 2678)
+                                (!fields 5 
+                                 (!pair  "base"
+                                  (!type already_seen 65)
+                                  (!srcfileloc  "cp/cp-tree.h" 2666)
+                                  nil )
+                                 (!pair  "level"
+                                  (!type already_seen 112)
+                                  (!srcfileloc  "cp/cp-tree.h" 2667)
+                                  nil )
+                                 (!pair  "usings"
+                                  (!type already_seen 96)
+                                  (!srcfileloc  "cp/cp-tree.h" 2671)
+                                  nil )
+                                 (!pair  "inlinees"
+                                  (!type already_seen 96)
+                                  (!srcfileloc  "cp/cp-tree.h" 2672)
+                                  nil )
+                                 (!pair  "bindings"
+                                  (!type pointer 141 nil  gc_used
+                                   (!type user_struct 142 
+                                    (!type already_seen 141)
+                                    gc_pointed_to "hash_table<named_decl_hash>"
+                                    (!srcfileloc  "cp/cp-tree.h" 2677)
+                                    (!fields 1 
+                                     (!pair  "named_decl_hash"
+                                      (!type struct 143 nil  gc_used "named_decl_hash"
+                                       (!srcfileloc  "cp/cp-tree.h" 2677)
+                                       (!fields 0 )
+                                       nil 1032 nil nil )
+                                      (!srcfileloc  "cp/cp-tree.h" 2677)
+                                      nil )
+                                    )
+                                   )
+                                  )
+                                  (!srcfileloc  "cp/cp-tree.h" 2677)
+                                  nil )
+                                )
+                                nil 1032 nil nil )
+                               (!srcfileloc  "cp/cp-tree.h" 2707)
+                               (!options 
+                                (!option tag string  "lds_ns")
+                               )
+                              )
+                              (!pair  "parm"
+                               (!type struct 144 nil  gc_used "lang_decl_parm"
+                                (!srcfileloc  "cp/cp-tree.h" 2686)
+                                (!fields 3 
+                                 (!pair  "base"
+                                  (!type already_seen 65)
+                                  (!srcfileloc  "cp/cp-tree.h" 2683)
+                                  nil )
+                                 (!pair  "level"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2684)
+                                  nil )
+                                 (!pair  "index"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 2685)
+                                  nil )
+                                )
+                                nil 1032 nil nil )
+                               (!srcfileloc  "cp/cp-tree.h" 2708)
+                               (!options 
+                                (!option tag string  "lds_parm")
+                               )
+                              )
+                              (!pair  "decomp"
+                               (!type struct 145 nil  gc_used "lang_decl_decomp"
+                                (!srcfileloc  "cp/cp-tree.h" 2695)
+                                (!fields 2 
+                                 (!pair  "min"
+                                  (!type already_seen 66)
+                                  (!srcfileloc  "cp/cp-tree.h" 2691)
+                                  nil )
+                                 (!pair  "base"
+                                  (!type already_seen 23)
+                                  (!srcfileloc  "cp/cp-tree.h" 2694)
+                                  nil )
+                                )
+                                nil 1032 nil nil )
+                               (!srcfileloc  "cp/cp-tree.h" 2709)
+                               (!options 
+                                (!option tag string  "lds_decomp")
+                               )
+                              )
+                             )
+                             (!options 
+                              (!option desc string  "%h.base.selector")
+                             )
+                             1032 nil )
+                            (!srcfileloc  "cp/cp-tree.h" 2710)
+                            nil )
+                          )
+                          nil 1032 
+                          (!type already_seen 55)
+                          nil )
+                         
+                         (!type struct 146 nil  gc_pointed_to "lang_decl"
+                          (!srcfileloc  "c/c-lang.h" 46)
+                          (!fields 1 
+                           (!pair  "dummy"
+                            (!type already_seen 8)
+                            (!srcfileloc  "c/c-lang.h" 45)
+                            nil )
+                          )
+                          nil 516 
+                          (!type already_seen 55)
+                          nil )
+                         
+                         (!type struct 147 nil  gc_pointed_to "lang_decl"
+                          (!srcfileloc  "brig/brig-lang.c" 78)
+                          (!fields 1 
+                           (!pair  "dummy"
+                            (!type already_seen 8)
+                            (!srcfileloc  "brig/brig-lang.c" 77)
+                            nil )
+                          )
+                          (!options 
+                           (!option variable_size string  "")
+                          )
+                          2 
+                          (!type already_seen 55)
+                          nil )
+                         
+                         (!type struct 148 nil  gc_pointed_to "lang_decl"
+                          (!srcfileloc  "ada/gcc-interface/ada-tree.h" 37)
+                          (!fields 1 
+                           (!pair  "t"
+                            (!type already_seen 23)
+                            (!srcfileloc  "ada/gcc-interface/ada-tree.h" 37)
+                            nil )
+                          )
+                          nil 1 
+                          (!type already_seen 55)
+                          nil )
+                        )
+                       )
+                      )
+                      (!srcfileloc  "tree-core.h" 1709)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1924)
+                   (!options 
+                    (!option tag string  "TS_DECL_COMMON")
+                   )
+                  )
+                  (!pair  "decl_with_rtl"
+                   (!type struct 149 nil  gc_used "tree_decl_with_rtl"
+                    (!srcfileloc  "tree-core.h" 1715)
+                    (!fields 2 
+                     (!pair  "common"
+                      (!type already_seen 53)
+                      (!srcfileloc  "tree-core.h" 1713)
+                      nil )
+                     (!pair  "rtl"
+                      (!type pointer 150 
+                       (!type pointer 151 nil  gc_used
+                        (!type already_seen 150)
+                       )
+                       gc_pointed_to
+                       (!type struct 152 
+                        (!type already_seen 150)
+                        gc_pointed_to "rtx_def"
+                        (!srcfileloc  "rtl.h" 448)
+                        (!fields 12 
+                         (!pair  "code"
+                          (!type already_seen 2)
+                          (!srcfileloc  "rtl.h" 309)
+                          nil )
+                         (!pair  "mode"
+                          (!type already_seen 2)
+                          (!srcfileloc  "rtl.h" 312)
+                          nil )
+                         (!pair  "jump"
+                          (!type already_seen 2)
+                          (!srcfileloc  "rtl.h" 325)
+                          nil )
+                         (!pair  "call"
+                          (!type already_seen 2)
+                          (!srcfileloc  "rtl.h" 331)
+                          nil )
+                         (!pair  "unchanging"
+                          (!type already_seen 2)
+                          (!srcfileloc  "rtl.h" 343)
+                          nil )
+                         (!pair  "volatil"
+                          (!type already_seen 2)
+                          (!srcfileloc  "rtl.h" 357)
+                          nil )
+                         (!pair  "in_struct"
+                          (!type already_seen 2)
+                          (!srcfileloc  "rtl.h" 372)
+                          nil )
+                         (!pair  "used"
+                          (!type already_seen 2)
+                          (!srcfileloc  "rtl.h" 381)
+                          nil )
+                         (!pair  "frame_related"
+                          (!type already_seen 2)
+                          (!srcfileloc  "rtl.h" 390)
+                          nil )
+                         (!pair  "return_val"
+                          (!type already_seen 2)
+                          (!srcfileloc  "rtl.h" 397)
+                          nil )
+                         (!pair  "u2"
+                          (!type union 153 nil  gc_unused "anonymous:../../linaro/gcc/rtl.h:399"
+                           (!srcfileloc  "rtl.h" 433)
+                           (!fields 6 
+                            (!pair  "original_regno"
+                             (!type already_seen 2)
+                             (!srcfileloc  "rtl.h" 406)
+                             nil )
+                            (!pair  "insn_uid"
+                             (!type already_seen 2)
+                             (!srcfileloc  "rtl.h" 409)
+                             nil )
+                            (!pair  "symbol_ref_flags"
+                             (!type already_seen 2)
+                             (!srcfileloc  "rtl.h" 412)
+                             nil )
+                            (!pair  "var_location_status"
+                             (!type already_seen 2)
+                             (!srcfileloc  "rtl.h" 415)
+                             nil )
+                            (!pair  "num_elem"
+                             (!type already_seen 2)
+                             (!srcfileloc  "rtl.h" 419)
+                             nil )
+                            (!pair  "const_vector"
+                             (!type struct 154 nil  gc_unused "anonymous:../../linaro/gcc/rtl.h:423"
+                              (!srcfileloc  "rtl.h" 432)
+                              (!fields 3 
+                               (!pair  "npatterns"
+                                (!type already_seen 2)
+                                (!srcfileloc  "rtl.h" 425)
+                                nil )
+                               (!pair  "nelts_per_pattern"
+                                (!type already_seen 2)
+                                (!srcfileloc  "rtl.h" 428)
+                                nil )
+                               (!pair  "unused"
+                                (!type already_seen 2)
+                                (!srcfileloc  "rtl.h" 431)
+                                nil )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "rtl.h" 432)
+                             nil )
+                           )
+                           nil 2047 nil )
+                          (!srcfileloc  "rtl.h" 433)
+                          (!options 
+                           (!option skip string  "")
+                          )
+                         )
+                         (!pair  "u"
+                          (!type union 155 nil  gc_used "rtx_def_subunion"
+                           (!srcfileloc  "rtl.h" 447)
+                           (!fields 152 
+                            (!pair  ""
+                             (!type struct 156 nil  gc_used "rtx_def_debug_marker"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 0 )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "DEBUG_MARKER")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 157 nil  gc_used "rtx_def_debug_parameter_ref"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_tree"
+                                (!type already_seen 23)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "DEBUG_PARAMETER_REF")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 158 nil  gc_used "rtx_def_entry_value"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "ENTRY_VALUE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 159 nil  gc_used "rtx_def_debug_implicit_ptr"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_tree"
+                                (!type already_seen 23)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "DEBUG_IMPLICIT_PTR")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 160 nil  gc_used "rtx_def_var_location"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_tree"
+                                (!type already_seen 23)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "VAR_LOCATION")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 161 nil  gc_used "rtx_def_fma"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 3 
+                               (!pair  ".fld[2].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "FMA")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 162 nil  gc_used "rtx_def_us_truncate"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "US_TRUNCATE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 163 nil  gc_used "rtx_def_ss_truncate"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SS_TRUNCATE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 164 nil  gc_used "rtx_def_us_minus"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "US_MINUS")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 165 nil  gc_used "rtx_def_us_ashift"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "US_ASHIFT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 166 nil  gc_used "rtx_def_ss_ashift"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SS_ASHIFT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 167 nil  gc_used "rtx_def_ss_abs"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SS_ABS")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 168 nil  gc_used "rtx_def_us_neg"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "US_NEG")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 169 nil  gc_used "rtx_def_ss_neg"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SS_NEG")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 170 nil  gc_used "rtx_def_ss_minus"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SS_MINUS")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 171 nil  gc_used "rtx_def_us_plus"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "US_PLUS")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 172 nil  gc_used "rtx_def_ss_plus"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SS_PLUS")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 173 nil  gc_used "rtx_def_vec_series"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "VEC_SERIES")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 174 nil  gc_used "rtx_def_vec_duplicate"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "VEC_DUPLICATE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 175 nil  gc_used "rtx_def_vec_concat"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "VEC_CONCAT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 176 nil  gc_used "rtx_def_vec_select"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "VEC_SELECT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 177 nil  gc_used "rtx_def_vec_merge"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 3 
+                               (!pair  ".fld[2].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "VEC_MERGE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 178 nil  gc_used "rtx_def_lo_sum"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "LO_SUM")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 179 nil  gc_used "rtx_def_high"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "HIGH")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 180 nil  gc_used "rtx_def_zero_extract"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 3 
+                               (!pair  ".fld[2].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "ZERO_EXTRACT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 181 nil  gc_used "rtx_def_sign_extract"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 3 
+                               (!pair  ".fld[2].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SIGN_EXTRACT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 182 nil  gc_used "rtx_def_parity"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "PARITY")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 183 nil  gc_used "rtx_def_popcount"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "POPCOUNT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 184 nil  gc_used "rtx_def_ctz"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CTZ")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 185 nil  gc_used "rtx_def_clz"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CLZ")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 186 nil  gc_used "rtx_def_clrsb"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CLRSB")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 187 nil  gc_used "rtx_def_ffs"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "FFS")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 188 nil  gc_used "rtx_def_bswap"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "BSWAP")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 189 nil  gc_used "rtx_def_sqrt"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SQRT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 190 nil  gc_used "rtx_def_abs"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "ABS")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 191 nil  gc_used "rtx_def_unsigned_sat_fract"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "UNSIGNED_SAT_FRACT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 192 nil  gc_used "rtx_def_sat_fract"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SAT_FRACT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 193 nil  gc_used "rtx_def_unsigned_fract_convert"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "UNSIGNED_FRACT_CONVERT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 194 nil  gc_used "rtx_def_fract_convert"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "FRACT_CONVERT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 195 nil  gc_used "rtx_def_unsigned_fix"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "UNSIGNED_FIX")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 196 nil  gc_used "rtx_def_unsigned_float"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "UNSIGNED_FLOAT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 197 nil  gc_used "rtx_def_fix"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "FIX")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 198 nil  gc_used "rtx_def_float"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "FLOAT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 199 nil  gc_used "rtx_def_float_truncate"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "FLOAT_TRUNCATE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 200 nil  gc_used "rtx_def_float_extend"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "FLOAT_EXTEND")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 201 nil  gc_used "rtx_def_truncate"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "TRUNCATE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 202 nil  gc_used "rtx_def_zero_extend"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "ZERO_EXTEND")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 203 nil  gc_used "rtx_def_sign_extend"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SIGN_EXTEND")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 204 nil  gc_used "rtx_def_ltgt"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "LTGT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 205 nil  gc_used "rtx_def_unlt"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "UNLT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 206 nil  gc_used "rtx_def_unle"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "UNLE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 207 nil  gc_used "rtx_def_ungt"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "UNGT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 208 nil  gc_used "rtx_def_unge"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "UNGE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 209 nil  gc_used "rtx_def_uneq"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "UNEQ")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 210 nil  gc_used "rtx_def_ordered"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "ORDERED")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 211 nil  gc_used "rtx_def_unordered"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "UNORDERED")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 212 nil  gc_used "rtx_def_ltu"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "LTU")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 213 nil  gc_used "rtx_def_leu"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "LEU")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 214 nil  gc_used "rtx_def_gtu"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "GTU")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 215 nil  gc_used "rtx_def_geu"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "GEU")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 216 nil  gc_used "rtx_def_lt"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "LT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 217 nil  gc_used "rtx_def_le"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "LE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 218 nil  gc_used "rtx_def_gt"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "GT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 219 nil  gc_used "rtx_def_ge"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "GE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 220 nil  gc_used "rtx_def_eq"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "EQ")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 221 nil  gc_used "rtx_def_ne"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "NE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 222 nil  gc_used "rtx_def_post_modify"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "POST_MODIFY")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 223 nil  gc_used "rtx_def_pre_modify"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "PRE_MODIFY")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 224 nil  gc_used "rtx_def_post_inc"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "POST_INC")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 225 nil  gc_used "rtx_def_post_dec"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "POST_DEC")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 226 nil  gc_used "rtx_def_pre_inc"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "PRE_INC")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 227 nil  gc_used "rtx_def_pre_dec"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "PRE_DEC")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 228 nil  gc_used "rtx_def_umax"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "UMAX")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 229 nil  gc_used "rtx_def_umin"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "UMIN")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 230 nil  gc_used "rtx_def_smax"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SMAX")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 231 nil  gc_used "rtx_def_smin"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SMIN")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 232 nil  gc_used "rtx_def_rotatert"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "ROTATERT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 233 nil  gc_used "rtx_def_lshiftrt"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "LSHIFTRT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 234 nil  gc_used "rtx_def_ashiftrt"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "ASHIFTRT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 235 nil  gc_used "rtx_def_rotate"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "ROTATE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 236 nil  gc_used "rtx_def_ashift"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "ASHIFT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 237 nil  gc_used "rtx_def_not"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "NOT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 238 nil  gc_used "rtx_def_xor"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "XOR")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 239 nil  gc_used "rtx_def_ior"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "IOR")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 240 nil  gc_used "rtx_def_and"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "AND")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 241 nil  gc_used "rtx_def_umod"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "UMOD")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 242 nil  gc_used "rtx_def_udiv"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "UDIV")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 243 nil  gc_used "rtx_def_mod"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "MOD")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 244 nil  gc_used "rtx_def_us_div"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "US_DIV")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 245 nil  gc_used "rtx_def_ss_div"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SS_DIV")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 246 nil  gc_used "rtx_def_div"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "DIV")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 247 nil  gc_used "rtx_def_us_mult"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "US_MULT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 248 nil  gc_used "rtx_def_ss_mult"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SS_MULT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 249 nil  gc_used "rtx_def_mult"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "MULT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 250 nil  gc_used "rtx_def_neg"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "NEG")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 251 nil  gc_used "rtx_def_minus"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "MINUS")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 252 nil  gc_used "rtx_def_plus"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "PLUS")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 253 nil  gc_used "rtx_def_compare"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "COMPARE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 254 nil  gc_used "rtx_def_if_then_else"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 3 
+                               (!pair  ".fld[2].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "IF_THEN_ELSE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 255 nil  gc_used "rtx_def_cc0"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 0 )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CC0")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 256 nil  gc_used "rtx_def_symbol_ref"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 3 
+                               (!pair  "block_sym"
+                                (!type union 257 nil  gc_used "fake_union_1"
+                                 (!srcfileloc  "rtl.h" 447)
+                                 (!fields 1 
+                                  (!pair  ""
+                                   (!type struct 258 nil  gc_used "block_symbol"
+                                    (!srcfileloc  "rtl.h" 241)
+                                    (!fields 3 
+                                     (!pair  "fld"
+                                      (!type array 259 nil  gc_unused "2" 
+                                       (!type undefined 260 nil  gc_unused "rtunion"
+                                        (!srcfileloc  "rtl.h" 233)
+                                       )
+                                      )
+                                      (!srcfileloc  "rtl.h" 233)
+                                      (!options 
+                                       (!option skip string  "")
+                                      )
+                                     )
+                                     (!pair  "block"
+                                      (!type pointer 261 nil  gc_used
+                                       (!type struct 262 
+                                        (!type already_seen 261)
+                                        gc_pointed_to "object_block"
+                                        (!srcfileloc  "rtl.h" 274)
+                                        (!fields 5 
+                                         (!pair  "sect"
+                                          (!type pointer 263 nil  gc_used
+                                           (!type union 264 
+                                            (!type already_seen 263)
+                                            gc_pointed_to "section"
+                                            (!srcfileloc  "output.h" 491)
+                                            (!fields 4 
+                                             (!pair  "common"
+                                              (!type struct 265 nil  gc_used "section_common"
+                                               (!srcfileloc  "output.h" 433)
+                                               (!fields 1 
+                                                (!pair  "flags"
+                                                 (!type already_seen 2)
+                                                 (!srcfileloc  "output.h" 432)
+                                                 nil )
+                                               )
+                                               nil 2047 nil nil )
+                                              (!srcfileloc  "output.h" 487)
+                                              (!options 
+                                               (!option skip string  "")
+                                              )
+                                             )
+                                             (!pair  "named"
+                                              (!type struct 266 nil  gc_used "named_section"
+                                               (!srcfileloc  "output.h" 445)
+                                               (!fields 3 
+                                                (!pair  "common"
+                                                 (!type already_seen 265)
+                                                 (!srcfileloc  "output.h" 437)
+                                                 nil )
+                                                (!pair  "name"
+                                                 (!type already_seen 11)
+                                                 (!srcfileloc  "output.h" 440)
+                                                 nil )
+                                                (!pair  "decl"
+                                                 (!type already_seen 23)
+                                                 (!srcfileloc  "output.h" 444)
+                                                 nil )
+                                               )
+                                               nil 2047 nil nil )
+                                              (!srcfileloc  "output.h" 488)
+                                              (!options 
+                                               (!option tag string  "SECTION_NAMED")
+                                              )
+                                             )
+                                             (!pair  "unnamed"
+                                              (!type struct 267 nil  gc_used "unnamed_section"
+                                               (!srcfileloc  "output.h" 462)
+                                               (!fields 4 
+                                                (!pair  "common"
+                                                 (!type already_seen 265)
+                                                 (!srcfileloc  "output.h" 453)
+                                                 nil )
+                                                (!pair  "callback"
+                                                 (!type already_seen 2)
+                                                 (!srcfileloc  "output.h" 457)
+                                                 (!options 
+                                                  (!option skip string  "")
+                                                 )
+                                                )
+                                                (!pair  "data"
+                                                 (!type already_seen 3)
+                                                 (!srcfileloc  "output.h" 458)
+                                                 (!options 
+                                                  (!option skip string  "")
+                                                 )
+                                                )
+                                                (!pair  "next"
+                                                 (!type already_seen 263)
+                                                 (!srcfileloc  "output.h" 461)
+                                                 nil )
+                                               )
+                                               nil 2047 nil nil )
+                                              (!srcfileloc  "output.h" 489)
+                                              (!options 
+                                               (!option tag string  "SECTION_UNNAMED")
+                                              )
+                                             )
+                                             (!pair  "noswitch"
+                                              (!type struct 268 nil  gc_used "noswitch_section"
+                                               (!srcfileloc  "output.h" 483)
+                                               (!fields 2 
+                                                (!pair  "common"
+                                                 (!type already_seen 265)
+                                                 (!srcfileloc  "output.h" 479)
+                                                 nil )
+                                                (!pair  "callback"
+                                                 (!type already_seen 2)
+                                                 (!srcfileloc  "output.h" 482)
+                                                 (!options 
+                                                  (!option skip string  "")
+                                                 )
+                                                )
+                                               )
+                                               nil 2047 nil nil )
+                                              (!srcfileloc  "output.h" 490)
+                                              (!options 
+                                               (!option tag string  "SECTION_NOSWITCH")
+                                              )
+                                             )
+                                            )
+                                            (!options 
+                                             (!option for_user string  "")
+                                             (!option desc string  "SECTION_STYLE (&(%h))")
+                                            )
+                                            2047 nil )
+                                          )
+                                          (!srcfileloc  "rtl.h" 247)
+                                          nil )
+                                         (!pair  "alignment"
+                                          (!type already_seen 2)
+                                          (!srcfileloc  "rtl.h" 250)
+                                          nil )
+                                         (!pair  "size"
+                                          (!type already_seen 2)
+                                          (!srcfileloc  "rtl.h" 253)
+                                          nil )
+                                         (!pair  "objects"
+                                          (!type pointer 269 nil  gc_used
+                                           (!type user_struct 270 
+                                            (!type already_seen 269)
+                                            gc_pointed_to "vec<rtx,va_gc>"
+                                            (!srcfileloc  "rtl.h" 263)
+                                            (!fields 2 
+                                             (!pair  "va_gc"
+                                              (!type already_seen 79)
+                                              (!srcfileloc  "rtl.h" 263)
+                                              nil )
+                                             (!pair  "rtx"
+                                              (!type already_seen 150)
+                                              (!srcfileloc  "rtl.h" 263)
+                                              nil )
+                                            )
+                                           )
+                                          )
+                                          (!srcfileloc  "rtl.h" 263)
+                                          nil )
+                                         (!pair  "anchors"
+                                          (!type already_seen 269)
+                                          (!srcfileloc  "rtl.h" 273)
+                                          nil )
+                                        )
+                                        (!options 
+                                         (!option for_user string  "")
+                                        )
+                                        2047 nil nil )
+                                      )
+                                      (!srcfileloc  "rtl.h" 236)
+                                      nil )
+                                     (!pair  "offset"
+                                      (!type already_seen 2)
+                                      (!srcfileloc  "rtl.h" 240)
+                                      nil )
+                                    )
+                                    nil 2047 nil nil )
+                                   (!srcfileloc  "gengtype.c" 1010)
+                                   (!options 
+                                    (!option tag string  "1")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                 )
+                                 nil 2047 nil )
+                                (!srcfileloc  "gengtype.c" 1355)
+                                (!options 
+                                 (!option desc string  "SYMBOL_REF_HAS_BLOCK_INFO_P (&%0)")
+                                )
+                               )
+                               (!pair  ".fld[1]."
+                                (!type union 271 nil  gc_used "rtx_def_symbol_subunion"
+                                 (!srcfileloc  "rtl.h" 447)
+                                 (!fields 2 
+                                  (!pair  "rt_constant"
+                                   (!type pointer 272 nil  gc_used
+                                    (!type struct 273 
+                                     (!type already_seen 272)
+                                     gc_pointed_to "constant_descriptor_rtx"
+                                     (!srcfileloc  "varasm.c" 3633)
+                                     (!fields 10 
+                                      (!pair  "next"
+                                       (!type already_seen 272)
+                                       (!srcfileloc  "varasm.c" 3623)
+                                       nil )
+                                      (!pair  "mem"
+                                       (!type already_seen 150)
+                                       (!srcfileloc  "varasm.c" 3624)
+                                       nil )
+                                      (!pair  "sym"
+                                       (!type already_seen 150)
+                                       (!srcfileloc  "varasm.c" 3625)
+                                       nil )
+                                      (!pair  "constant"
+                                       (!type already_seen 150)
+                                       (!srcfileloc  "varasm.c" 3626)
+                                       nil )
+                                      (!pair  "offset"
+                                       (!type already_seen 2)
+                                       (!srcfileloc  "varasm.c" 3627)
+                                       nil )
+                                      (!pair  "hash"
+                                       (!type already_seen 2)
+                                       (!srcfileloc  "varasm.c" 3628)
+                                       nil )
+                                      (!pair  "mode"
+                                       (!type already_seen 2)
+                                       (!srcfileloc  "varasm.c" 3629)
+                                       nil )
+                                      (!pair  "align"
+                                       (!type already_seen 2)
+                                       (!srcfileloc  "varasm.c" 3630)
+                                       nil )
+                                      (!pair  "labelno"
+                                       (!type already_seen 2)
+                                       (!srcfileloc  "varasm.c" 3631)
+                                       nil )
+                                      (!pair  "mark"
+                                       (!type already_seen 2)
+                                       (!srcfileloc  "varasm.c" 3632)
+                                       nil )
+                                     )
+                                     (!options 
+                                      (!option for_user string  "")
+                                      (!option chain_next string  "%h.next")
+                                     )
+                                     2047 nil nil )
+                                   )
+                                   (!srcfileloc  "gengtype.c" 1214)
+                                   (!options 
+                                    (!option tag string  "1")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_tree"
+                                   (!type already_seen 23)
+                                   (!srcfileloc  "gengtype.c" 1212)
+                                   (!options 
+                                    (!option default string  "")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                 )
+                                 nil 2047 nil )
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option desc string  "CONSTANT_POOL_ADDRESS_P (&%0)")
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_str"
+                                (!type already_seen 11)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SYMBOL_REF")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 274 nil  gc_used "rtx_def_label_ref"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "LABEL_REF")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 275 nil  gc_used "rtx_def_mem"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_mem"
+                                (!type pointer 276 nil  gc_used
+                                 (!type struct 277 
+                                  (!type already_seen 276)
+                                  gc_pointed_to "mem_attrs"
+                                  (!srcfileloc  "rtl.h" 181)
+                                  (!fields 8 
+                                   (!pair  "expr"
+                                    (!type already_seen 23)
+                                    (!srcfileloc  "rtl.h" 155)
+                                    nil )
+                                   (!pair  "offset"
+                                    (!type already_seen 2)
+                                    (!srcfileloc  "rtl.h" 159)
+                                    nil )
+                                   (!pair  "size"
+                                    (!type already_seen 2)
+                                    (!srcfileloc  "rtl.h" 163)
+                                    nil )
+                                   (!pair  "alias"
+                                    (!type already_seen 2)
+                                    (!srcfileloc  "rtl.h" 166)
+                                    nil )
+                                   (!pair  "align"
+                                    (!type already_seen 2)
+                                    (!srcfileloc  "rtl.h" 171)
+                                    nil )
+                                   (!pair  "addrspace"
+                                    (!type already_seen 8)
+                                    (!srcfileloc  "rtl.h" 174)
+                                    nil )
+                                   (!pair  "offset_known_p"
+                                    (!type already_seen 2)
+                                    (!srcfileloc  "rtl.h" 177)
+                                    nil )
+                                   (!pair  "size_known_p"
+                                    (!type already_seen 2)
+                                    (!srcfileloc  "rtl.h" 180)
+                                    nil )
+                                  )
+                                  nil 2047 nil nil )
+                                )
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "MEM")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 278 nil  gc_used "rtx_def_concatn"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtvec"
+                                (!type pointer 279 nil  gc_used
+                                 (!type struct 280 
+                                  (!type already_seen 279)
+                                  gc_pointed_to "rtvec_def"
+                                  (!srcfileloc  "rtl.h" 732)
+                                  (!fields 2 
+                                   (!pair  "num_elem"
+                                    (!type already_seen 2)
+                                    (!srcfileloc  "rtl.h" 730)
+                                    nil )
+                                   (!pair  "elem"
+                                    (!type array 281 nil  gc_used "1" 
+                                     (!type already_seen 150)
+                                    )
+                                    (!srcfileloc  "rtl.h" 731)
+                                    (!options 
+                                     (!option length string  "%h.num_elem")
+                                    )
+                                   )
+                                  )
+                                  nil 2047 nil nil )
+                                )
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CONCATN")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 282 nil  gc_used "rtx_def_concat"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CONCAT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 283 nil  gc_used "rtx_def_strict_low_part"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "STRICT_LOW_PART")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 284 nil  gc_used "rtx_def_subreg"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_subreg"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SUBREG")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 285 nil  gc_used "rtx_def_scratch"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 0 )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SCRATCH")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 286 nil  gc_used "rtx_def_reg"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  "reg.attrs"
+                                (!type pointer 287 nil  gc_used
+                                 (!type struct 288 
+                                  (!type already_seen 287)
+                                  gc_pointed_to "reg_attrs"
+                                  (!srcfileloc  "rtl.h" 225)
+                                  (!fields 2 
+                                   (!pair  "decl"
+                                    (!type already_seen 23)
+                                    (!srcfileloc  "rtl.h" 191)
+                                    nil )
+                                   (!pair  "offset"
+                                    (!type already_seen 2)
+                                    (!srcfileloc  "rtl.h" 192)
+                                    nil )
+                                  )
+                                  (!options 
+                                   (!option for_user string  "")
+                                  )
+                                  2047 nil nil )
+                                )
+                                (!srcfileloc  "gengtype.c" 1346)
+                                nil )
+                               (!pair  ".fld[0].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "REG")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 289 nil  gc_used "rtx_def_pc"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 0 )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "PC")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 290 nil  gc_used "rtx_def_const"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CONST")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 291 nil  gc_used "rtx_def_const_string"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_str"
+                                (!type already_seen 11)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CONST_STRING")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 292 nil  gc_used "rtx_def_const_vector"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtvec"
+                                (!type already_seen 279)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CONST_VECTOR")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 293 nil  gc_used "rtx_def_const_double"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CONST_DOUBLE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 294 nil  gc_used "rtx_def_const_fixed"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 3 
+                               (!pair  ".fld[2].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[1].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CONST_FIXED")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 295 nil  gc_used "rtx_def_const_poly_int"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 0 )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CONST_POLY_INT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 296 nil  gc_used "rtx_def_const_wide_int"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 0 )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CONST_WIDE_INT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 297 nil  gc_used "rtx_def_const_int"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CONST_INT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 298 nil  gc_used "rtx_def_trap_if"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "TRAP_IF")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 299 nil  gc_used "rtx_def_eh_return"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 0 )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "EH_RETURN")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 300 nil  gc_used "rtx_def_simple_return"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 0 )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SIMPLE_RETURN")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 301 nil  gc_used "rtx_def_return"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 0 )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "RETURN")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 302 nil  gc_used "rtx_def_call"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CALL")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 303 nil  gc_used "rtx_def_clobber_high"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CLOBBER_HIGH")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 304 nil  gc_used "rtx_def_clobber"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CLOBBER")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 305 nil  gc_used "rtx_def_use"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "USE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 306 nil  gc_used "rtx_def_set"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SET")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 307 nil  gc_used "rtx_def_prefetch"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 3 
+                               (!pair  ".fld[2].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "PREFETCH")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 308 nil  gc_used "rtx_def_addr_diff_vec"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 5 
+                               (!pair  ".fld[4].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[3].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[2].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[1].rt_rtvec"
+                                (!type already_seen 279)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "ADDR_DIFF_VEC")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 309 nil  gc_used "rtx_def_addr_vec"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtvec"
+                                (!type already_seen 279)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "ADDR_VEC")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 310 nil  gc_used "rtx_def_unspec_volatile"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtvec"
+                                (!type already_seen 279)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "UNSPEC_VOLATILE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 311 nil  gc_used "rtx_def_unspec"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtvec"
+                                (!type already_seen 279)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "UNSPEC")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 312 nil  gc_used "rtx_def_asm_operands"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 7 
+                               (!pair  ".fld[6].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[5].rt_rtvec"
+                                (!type already_seen 279)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[4].rt_rtvec"
+                                (!type already_seen 279)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[3].rt_rtvec"
+                                (!type already_seen 279)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[2].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[1].rt_str"
+                                (!type already_seen 11)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_str"
+                                (!type already_seen 11)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "ASM_OPERANDS")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 313 nil  gc_used "rtx_def_asm_input"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_str"
+                                (!type already_seen 11)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "ASM_INPUT")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 314 nil  gc_used "rtx_def_parallel"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtvec"
+                                (!type already_seen 279)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "PARALLEL")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 315 nil  gc_used "rtx_def_cond_exec"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "COND_EXEC")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 316 nil  gc_used "rtx_def_note"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 6 
+                               (!pair  ".fld[5].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[4].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[3]."
+                                (!type union 317 nil  gc_used "rtx_def_note_subunion"
+                                 (!srcfileloc  "rtl.h" 447)
+                                 (!fields 19 
+                                  (!pair  "rt_str"
+                                   (!type already_seen 11)
+                                   (!srcfileloc  "gengtype.c" 1181)
+                                   (!options 
+                                    (!option default string  "")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_int"
+                                   (!type already_seen 2)
+                                   (!srcfileloc  "gengtype.c" 1194)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_UPDATE_SJLJ_CONTEXT")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_int"
+                                   (!type already_seen 2)
+                                   (!srcfileloc  "gengtype.c" 1194)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_CFI_LABEL")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_int"
+                                   (!type already_seen 2)
+                                   (!srcfileloc  "gengtype.c" 1194)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_CFI")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_int"
+                                   (!type already_seen 2)
+                                   (!srcfileloc  "gengtype.c" 1194)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_SWITCH_TEXT_SECTIONS")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_int"
+                                   (!type already_seen 2)
+                                   (!srcfileloc  "gengtype.c" 1194)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_BASIC_BLOCK")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_int"
+                                   (!type already_seen 2)
+                                   (!srcfileloc  "gengtype.c" 1194)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_INLINE_ENTRY")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_int"
+                                   (!type already_seen 2)
+                                   (!srcfileloc  "gengtype.c" 1194)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_BEGIN_STMT")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_rtx"
+                                   (!type already_seen 150)
+                                   (!srcfileloc  "gengtype.c" 1190)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_VAR_LOCATION")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_int"
+                                   (!type already_seen 2)
+                                   (!srcfileloc  "gengtype.c" 1194)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_EH_REGION_END")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_int"
+                                   (!type already_seen 2)
+                                   (!srcfileloc  "gengtype.c" 1194)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_EH_REGION_BEG")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_int"
+                                   (!type already_seen 2)
+                                   (!srcfileloc  "gengtype.c" 1194)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_EPILOGUE_BEG")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_int"
+                                   (!type already_seen 2)
+                                   (!srcfileloc  "gengtype.c" 1194)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_PROLOGUE_END")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_int"
+                                   (!type already_seen 2)
+                                   (!srcfileloc  "gengtype.c" 1194)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_FUNCTION_BEG")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_tree"
+                                   (!type already_seen 23)
+                                   (!srcfileloc  "gengtype.c" 1186)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_BLOCK_END")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_tree"
+                                   (!type already_seen 23)
+                                   (!srcfileloc  "gengtype.c" 1186)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_BLOCK_BEG")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_str"
+                                   (!type already_seen 11)
+                                   (!srcfileloc  "gengtype.c" 1181)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_DELETED_DEBUG_LABEL")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_str"
+                                   (!type already_seen 11)
+                                   (!srcfileloc  "gengtype.c" 1181)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_DELETED_LABEL")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                  (!pair  "rt_int"
+                                   (!type already_seen 2)
+                                   (!srcfileloc  "gengtype.c" 1194)
+                                   (!options 
+                                    (!option tag string  "NOTE_INSN_DELETED")
+                                    (!option dot string  "")
+                                   )
+                                  )
+                                 )
+                                 nil 2047 nil )
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option desc string  "NOTE_KIND (&%0)")
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[2].rt_bb"
+                                (!type pointer 318 nil  gc_used
+                                 (!type struct 319 
+                                  (!type already_seen 318)
+                                  gc_pointed_to "basic_block_def"
+                                  (!srcfileloc  "basic-block.h" 155)
+                                  (!fields 12 
+                                   (!pair  "preds"
+                                    (!type pointer 320 nil  gc_used
+                                     (!type user_struct 321 
+                                      (!type already_seen 320)
+                                      gc_pointed_to "vec<edge,va_gc>"
+                                      (!srcfileloc  "basic-block.h" 118)
+                                      (!fields 2 
+                                       (!pair  "va_gc"
+                                        (!type already_seen 79)
+                                        (!srcfileloc  "basic-block.h" 118)
+                                        nil )
+                                       (!pair  "edge"
+                                        (!type pointer 322 nil  gc_used
+                                         (!type user_struct 323 
+                                          (!type already_seen 322)
+                                          gc_pointed_to "edge_def"
+                                          (!srcfileloc  "basic-block.h" 52)
+                                          (!fields 0 )
+                                         )
+                                        )
+                                        (!srcfileloc  "basic-block.h" 118)
+                                        nil )
+                                      )
+                                     )
+                                    )
+                                    (!srcfileloc  "basic-block.h" 118)
+                                    nil )
+                                   (!pair  "succs"
+                                    (!type already_seen 320)
+                                    (!srcfileloc  "basic-block.h" 119)
+                                    nil )
+                                   (!pair  "aux"
+                                    (!type already_seen 3)
+                                    (!srcfileloc  "basic-block.h" 122)
+                                    (!options 
+                                     (!option skip string  "")
+                                    )
+                                   )
+                                   (!pair  "loop_father"
+                                    (!type pointer 324 nil  gc_used
+                                     (!type struct 325 
+                                      (!type already_seen 324)
+                                      gc_pointed_to "loop"
+                                      (!srcfileloc  "cfgloop.h" 266)
+                                      (!fields 35 
+                                       (!pair  "num"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 119)
+                                        nil )
+                                       (!pair  "ninsns"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 122)
+                                        nil )
+                                       (!pair  "header"
+                                        (!type already_seen 318)
+                                        (!srcfileloc  "cfgloop.h" 125)
+                                        nil )
+                                       (!pair  "latch"
+                                        (!type already_seen 318)
+                                        (!srcfileloc  "cfgloop.h" 128)
+                                        nil )
+                                       (!pair  "lpt_decision"
+                                        (!type struct 326 nil  gc_used "lpt_decision"
+                                         (!srcfileloc  "cfgloop.h" 37)
+                                         (!fields 2 
+                                          (!pair  "decision"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "cfgloop.h" 35)
+                                           nil )
+                                          (!pair  "times"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "cfgloop.h" 36)
+                                           nil )
+                                         )
+                                         nil 2047 nil nil )
+                                        (!srcfileloc  "cfgloop.h" 131)
+                                        nil )
+                                       (!pair  "av_ninsns"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 134)
+                                        nil )
+                                       (!pair  "num_nodes"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 137)
+                                        nil )
+                                       (!pair  "superloops"
+                                        (!type pointer 327 nil  gc_used
+                                         (!type user_struct 328 
+                                          (!type already_seen 327)
+                                          gc_pointed_to "vec<loop_p,va_gc>"
+                                          (!srcfileloc  "cfgloop.h" 140)
+                                          (!fields 2 
+                                           (!pair  "va_gc"
+                                            (!type already_seen 79)
+                                            (!srcfileloc  "cfgloop.h" 140)
+                                            nil )
+                                           (!pair  "loop_p"
+                                            (!type already_seen 324)
+                                            (!srcfileloc  "cfgloop.h" 140)
+                                            nil )
+                                          )
+                                         )
+                                        )
+                                        (!srcfileloc  "cfgloop.h" 140)
+                                        nil )
+                                       (!pair  "inner"
+                                        (!type already_seen 324)
+                                        (!srcfileloc  "cfgloop.h" 143)
+                                        nil )
+                                       (!pair  "next"
+                                        (!type already_seen 324)
+                                        (!srcfileloc  "cfgloop.h" 146)
+                                        nil )
+                                       (!pair  "aux"
+                                        (!type already_seen 3)
+                                        (!srcfileloc  "cfgloop.h" 149)
+                                        (!options 
+                                         (!option skip string  "")
+                                        )
+                                       )
+                                       (!pair  "nb_iterations"
+                                        (!type already_seen 23)
+                                        (!srcfileloc  "cfgloop.h" 158)
+                                        nil )
+                                       (!pair  "nb_iterations_upper_bound"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 162)
+                                        nil )
+                                       (!pair  "nb_iterations_likely_upper_bound"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 164)
+                                        nil )
+                                       (!pair  "nb_iterations_estimate"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 169)
+                                        nil )
+                                       (!pair  "safelen"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 175)
+                                        nil )
+                                       (!pair  "constraints"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 198)
+                                        nil )
+                                       (!pair  "estimate_state"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 202)
+                                        nil )
+                                       (!pair  "any_upper_bound"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 204)
+                                        nil )
+                                       (!pair  "any_estimate"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 205)
+                                        nil )
+                                       (!pair  "any_likely_upper_bound"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 206)
+                                        nil )
+                                       (!pair  "can_be_parallel"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 209)
+                                        nil )
+                                       (!pair  "warned_aggressive_loop_optimizations"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 213)
+                                        nil )
+                                       (!pair  "dont_vectorize"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 216)
+                                        nil )
+                                       (!pair  "force_vectorize"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 219)
+                                        nil )
+                                       (!pair  "in_oacc_kernels_region"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 222)
+                                        nil )
+                                       (!pair  "unroll"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 228)
+                                        nil )
+                                       (!pair  "owned_clique"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 232)
+                                        nil )
+                                       (!pair  "simduid"
+                                        (!type already_seen 23)
+                                        (!srcfileloc  "cfgloop.h" 237)
+                                        nil )
+                                       (!pair  "orig_loop_num"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "cfgloop.h" 247)
+                                        nil )
+                                       (!pair  "bounds"
+                                        (!type pointer 329 nil  gc_used
+                                         (!type struct 330 
+                                          (!type already_seen 329)
+                                          gc_pointed_to "nb_iter_bound"
+                                          (!srcfileloc  "cfgloop.h" 69)
+                                          (!fields 4 
+                                           (!pair  "stmt"
+                                            (!type pointer 331 nil  gc_used
+                                             (!type struct 332 
+                                              (!type already_seen 331)
+                                              gc_pointed_to "gimple"
+                                              (!srcfileloc  "gimple.h" 286)
+                                              (!fields 15 
+                                               (!pair  "code"
+                                                (!type already_seen 2)
+                                                (!srcfileloc  "gimple.h" 227)
+                                                nil )
+                                               (!pair  "no_warning"
+                                                (!type already_seen 2)
+                                                (!srcfileloc  "gimple.h" 230)
+                                                nil )
+                                               (!pair  "visited"
+                                                (!type already_seen 2)
+                                                (!srcfileloc  "gimple.h" 234)
+                                                nil )
+                                               (!pair  "nontemporal_move"
+                                                (!type already_seen 2)
+                                                (!srcfileloc  "gimple.h" 237)
+                                                nil )
+                                               (!pair  "plf"
+                                                (!type already_seen 2)
+                                                (!srcfileloc  "gimple.h" 244)
+                                                nil )
+                                               (!pair  "modified"
+                                                (!type already_seen 2)
+                                                (!srcfileloc  "gimple.h" 248)
+                                                nil )
+                                               (!pair  "has_volatile_ops"
+                                                (!type already_seen 2)
+                                                (!srcfileloc  "gimple.h" 251)
+                                                nil )
+                                               (!pair  "pad"
+                                                (!type already_seen 2)
+                                                (!srcfileloc  "gimple.h" 254)
+                                                nil )
+                                               (!pair  "subcode"
+                                                (!type already_seen 2)
+                                                (!srcfileloc  "gimple.h" 260)
+                                                nil )
+                                               (!pair  "uid"
+                                                (!type already_seen 2)
+                                                (!srcfileloc  "gimple.h" 265)
+                                                nil )
+                                               (!pair  "location"
+                                                (!type already_seen 2)
+                                                (!srcfileloc  "gimple.h" 269)
+                                                nil )
+                                               (!pair  "num_ops"
+                                                (!type already_seen 2)
+                                                (!srcfileloc  "gimple.h" 272)
+                                                nil )
+                                               (!pair  "bb"
+                                                (!type already_seen 318)
+                                                (!srcfileloc  "gimple.h" 276)
+                                                nil )
+                                               (!pair  "next"
+                                                (!type already_seen 331)
+                                                (!srcfileloc  "gimple.h" 284)
+                                                nil )
+                                               (!pair  "prev"
+                                                (!type already_seen 331)
+                                                (!srcfileloc  "gimple.h" 285)
+                                                (!options 
+                                                 (!option skip string  "")
+                                                )
+                                               )
+                                              )
+                                              (!options 
+                                               (!option variable_size string  "")
+                                               (!option chain_next string  "%h.next")
+                                               (!option tag string  "GSS_BASE")
+                                               (!option desc string  "gimple_statement_structure (&%h)")
+                                              )
+                                              2047 nil nil )
+                                            )
+                                            (!srcfileloc  "cfgloop.h" 51)
+                                            nil )
+                                           (!pair  "bound"
+                                            (!type already_seen 2)
+                                            (!srcfileloc  "cfgloop.h" 60)
+                                            nil )
+                                           (!pair  "is_exit"
+                                            (!type already_seen 2)
+                                            (!srcfileloc  "cfgloop.h" 65)
+                                            nil )
+                                           (!pair  "next"
+                                            (!type already_seen 329)
+                                            (!srcfileloc  "cfgloop.h" 68)
+                                            nil )
+                                          )
+                                          (!options 
+                                           (!option chain_next string  "%h.next")
+                                          )
+                                          2047 nil nil )
+                                        )
+                                        (!srcfileloc  "cfgloop.h" 250)
+                                        nil )
+                                       (!pair  "control_ivs"
+                                        (!type pointer 333 nil  gc_used
+                                         (!type struct 334 
+                                          (!type already_seen 333)
+                                          gc_pointed_to "control_iv"
+                                          (!srcfileloc  "cfgloop.h" 113)
+                                          (!fields 3 
+                                           (!pair  "base"
+                                            (!type already_seen 23)
+                                            (!srcfileloc  "cfgloop.h" 110)
+                                            nil )
+                                           (!pair  "step"
+                                            (!type already_seen 23)
+                                            (!srcfileloc  "cfgloop.h" 111)
+                                            nil )
+                                           (!pair  "next"
+                                            (!type already_seen 333)
+                                            (!srcfileloc  "cfgloop.h" 112)
+                                            nil )
+                                          )
+                                          (!options 
+                                           (!option chain_next string  "%h.next")
+                                          )
+                                          2047 nil nil )
+                                        )
+                                        (!srcfileloc  "cfgloop.h" 253)
+                                        nil )
+                                       (!pair  "exits"
+                                        (!type pointer 335 nil  gc_used
+                                         (!type struct 336 
+                                          (!type already_seen 335)
+                                          gc_pointed_to "loop_exit"
+                                          (!srcfileloc  "cfgloop.h" 83)
+                                          (!fields 4 
+                                           (!pair  "e"
+                                            (!type already_seen 322)
+                                            (!srcfileloc  "cfgloop.h" 75)
+                                            nil )
+                                           (!pair  "prev"
+                                            (!type already_seen 335)
+                                            (!srcfileloc  "cfgloop.h" 78)
+                                            nil )
+                                           (!pair  "next"
+                                            (!type already_seen 335)
+                                            (!srcfileloc  "cfgloop.h" 79)
+                                            nil )
+                                           (!pair  "next_e"
+                                            (!type already_seen 335)
+                                            (!srcfileloc  "cfgloop.h" 82)
+                                            nil )
+                                          )
+                                          (!options 
+                                           (!option for_user string  "")
+                                          )
+                                          2047 nil nil )
+                                        )
+                                        (!srcfileloc  "cfgloop.h" 256)
+                                        nil )
+                                       (!pair  "simple_loop_desc"
+                                        (!type pointer 337 nil  gc_used
+                                         (!type struct 338 
+                                          (!type already_seen 337)
+                                          gc_pointed_to "niter_desc"
+                                          (!srcfileloc  "cfgloop.h" 484)
+                                          (!fields 11 
+                                           (!pair  "out_edge"
+                                            (!type already_seen 322)
+                                            (!srcfileloc  "cfgloop.h" 451)
+                                            nil )
+                                           (!pair  "in_edge"
+                                            (!type already_seen 322)
+                                            (!srcfileloc  "cfgloop.h" 454)
+                                            nil )
+                                           (!pair  "simple_p"
+                                            (!type already_seen 2)
+                                            (!srcfileloc  "cfgloop.h" 458)
+                                            nil )
+                                           (!pair  "const_iter"
+                                            (!type already_seen 2)
+                                            (!srcfileloc  "cfgloop.h" 461)
+                                            nil )
+                                           (!pair  "niter"
+                                            (!type already_seen 2)
+                                            (!srcfileloc  "cfgloop.h" 464)
+                                            nil )
+                                           (!pair  "assumptions"
+                                            (!type already_seen 150)
+                                            (!srcfileloc  "cfgloop.h" 467)
+                                            nil )
+                                           (!pair  "noloop_assumptions"
+                                            (!type already_seen 150)
+                                            (!srcfileloc  "cfgloop.h" 471)
+                                            nil )
+                                           (!pair  "infinite"
+                                            (!type already_seen 150)
+                                            (!srcfileloc  "cfgloop.h" 474)
+                                            nil )
+                                           (!pair  "signed_p"
+                                            (!type already_seen 2)
+                                            (!srcfileloc  "cfgloop.h" 477)
+                                            nil )
+                                           (!pair  "mode"
+                                            (!type struct 339 nil  gc_used "scalar_int_mode"
+                                             (!srcfileloc  "coretypes.h" 66)
+                                             (!fields 0 )
+                                             nil 2047 nil nil )
+                                            (!srcfileloc  "cfgloop.h" 480)
+                                            nil )
+                                           (!pair  "niter_expr"
+                                            (!type already_seen 150)
+                                            (!srcfileloc  "cfgloop.h" 483)
+                                            nil )
+                                          )
+                                          nil 2047 nil nil )
+                                        )
+                                        (!srcfileloc  "cfgloop.h" 259)
+                                        nil )
+                                       (!pair  "former_header"
+                                        (!type already_seen 318)
+                                        (!srcfileloc  "cfgloop.h" 265)
+                                        nil )
+                                      )
+                                      (!options 
+                                       (!option chain_next string  "%h.next")
+                                      )
+                                      2047 nil nil )
+                                    )
+                                    (!srcfileloc  "basic-block.h" 125)
+                                    nil )
+                                   (!pair  "dom"
+                                    (!type array 340 nil  gc_unused "2" 
+                                     (!type pointer 341 nil  gc_unused
+                                      (!type struct 342 
+                                       (!type already_seen 341)
+                                       gc_unused "et_node"nil 
+                                       (!fields 0 )
+                                       nil 0 nil nil )
+                                     )
+                                    )
+                                    (!srcfileloc  "basic-block.h" 128)
+                                    (!options 
+                                     (!option skip string  "")
+                                    )
+                                   )
+                                   (!pair  "prev_bb"
+                                    (!type already_seen 318)
+                                    (!srcfileloc  "basic-block.h" 131)
+                                    nil )
+                                   (!pair  "next_bb"
+                                    (!type already_seen 318)
+                                    (!srcfileloc  "basic-block.h" 132)
+                                    nil )
+                                   (!pair  "il"
+                                    (!type union 343 nil  gc_used "basic_block_il_dependent"
+                                     (!srcfileloc  "basic-block.h" 140)
+                                     (!fields 2 
+                                      (!pair  "gimple"
+                                       (!type struct 344 nil  gc_used "gimple_bb_info"
+                                        (!srcfileloc  "basic-block.h" 88)
+                                        (!fields 2 
+                                         (!pair  "seq"
+                                          (!type already_seen 331)
+                                          (!srcfileloc  "basic-block.h" 84)
+                                          nil )
+                                         (!pair  "phi_nodes"
+                                          (!type already_seen 331)
+                                          (!srcfileloc  "basic-block.h" 87)
+                                          nil )
+                                        )
+                                        nil 2047 nil nil )
+                                       (!srcfileloc  "basic-block.h" 135)
+                                       (!options 
+                                        (!option tag string  "0")
+                                       )
+                                      )
+                                      (!pair  "x"
+                                       (!type struct 345 nil  gc_used "anonymous:../../linaro/gcc/basic-block.h:136"
+                                        (!srcfileloc  "basic-block.h" 139)
+                                        (!fields 2 
+                                         (!pair  "head_"
+                                          (!type pointer 346 nil  gc_used
+                                           (!type struct 347 
+                                            (!type already_seen 346)
+                                            gc_pointed_to "rtx_insn"
+                                            (!srcfileloc  "rtl.h" 566)
+                                            (!fields 0 )
+                                            nil 2047 nil 
+                                            (!type already_seen 152)
+                                           )
+                                          )
+                                          (!srcfileloc  "basic-block.h" 137)
+                                          nil )
+                                         (!pair  "rtl"
+                                          (!type pointer 348 nil  gc_used
+                                           (!type struct 349 
+                                            (!type already_seen 348)
+                                            gc_pointed_to "rtl_bb_info"
+                                            (!srcfileloc  "basic-block.h" 80)
+                                            (!fields 3 
+                                             (!pair  "end_"
+                                              (!type already_seen 346)
+                                              (!srcfileloc  "basic-block.h" 74)
+                                              nil )
+                                             (!pair  "header_"
+                                              (!type already_seen 346)
+                                              (!srcfileloc  "basic-block.h" 78)
+                                              nil )
+                                             (!pair  "footer_"
+                                              (!type already_seen 346)
+                                              (!srcfileloc  "basic-block.h" 79)
+                                              nil )
+                                            )
+                                            nil 2047 nil nil )
+                                          )
+                                          (!srcfileloc  "basic-block.h" 138)
+                                          nil )
+                                        )
+                                        nil 2047 nil nil )
+                                       (!srcfileloc  "basic-block.h" 139)
+                                       (!options 
+                                        (!option tag string  "1")
+                                       )
+                                      )
+                                     )
+                                     nil 2047 nil )
+                                    (!srcfileloc  "basic-block.h" 140)
+                                    (!options 
+                                     (!option desc string  "((%1.flags & BB_RTL) != 0)")
+                                    )
+                                   )
+                                   (!pair  "flags"
+                                    (!type already_seen 2)
+                                    (!srcfileloc  "basic-block.h" 143)
+                                    nil )
+                                   (!pair  "index"
+                                    (!type already_seen 2)
+                                    (!srcfileloc  "basic-block.h" 146)
+                                    nil )
+                                   (!pair  "count"
+                                    (!type struct 350 nil  gc_used "profile_count"
+                                     (!srcfileloc  "profile-count.h" 1145)
+                                     (!fields 2 
+                                      (!pair  "UINT64_BIT_FIELD_ALIGN"
+                                       (!type already_seen 2)
+                                       (!srcfileloc  "profile-count.h" 661)
+                                       nil )
+                                      (!pair  "m_quality"
+                                       (!type already_seen 2)
+                                       (!srcfileloc  "profile-count.h" 663)
+                                       nil )
+                                     )
+                                     nil 2047 nil nil )
+                                    (!srcfileloc  "basic-block.h" 149)
+                                    nil )
+                                   (!pair  "discriminator"
+                                    (!type already_seen 2)
+                                    (!srcfileloc  "basic-block.h" 154)
+                                    nil )
+                                  )
+                                  (!options 
+                                   (!option chain_prev string  "%h.prev_bb")
+                                   (!option chain_next string  "%h.next_bb")
+                                  )
+                                  2047 nil nil )
+                                )
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "NOTE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 351 nil  gc_used "rtx_def_code_label"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 7 
+                               (!pair  ".fld[6].rt_str"
+                                (!type already_seen 11)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[5].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[4].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[3].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[2].rt_bb"
+                                (!type already_seen 318)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CODE_LABEL")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 352 nil  gc_used "rtx_def_barrier"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 7 
+                               (!pair  ".fld[6].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[5].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[4].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[3].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[2].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "BARRIER")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 353 nil  gc_used "rtx_def_jump_table_data"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 8 
+                               (!pair  ".fld[7].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[6].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[5].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[4].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[3].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[2].rt_bb"
+                                (!type already_seen 318)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "JUMP_TABLE_DATA")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 354 nil  gc_used "rtx_def_call_insn"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 8 
+                               (!pair  ".fld[7].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[6].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[5].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[4].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[3].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[2].rt_bb"
+                                (!type already_seen 318)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "CALL_INSN")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 355 nil  gc_used "rtx_def_jump_insn"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 8 
+                               (!pair  ".fld[7].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[6].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[5].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[4].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[3].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[2].rt_bb"
+                                (!type already_seen 318)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "JUMP_INSN")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 356 nil  gc_used "rtx_def_insn"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 7 
+                               (!pair  ".fld[6].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[5].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[4].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[3].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[2].rt_bb"
+                                (!type already_seen 318)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "INSN")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 357 nil  gc_used "rtx_def_debug_insn"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 7 
+                               (!pair  ".fld[6].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[5].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[4].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[3].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[2].rt_bb"
+                                (!type already_seen 318)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "DEBUG_INSN")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 358 nil  gc_used "rtx_def_address"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "ADDRESS")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 359 nil  gc_used "rtx_def_sequence"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_rtvec"
+                                (!type already_seen 279)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "SEQUENCE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 360 nil  gc_used "rtx_def_int_list"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "INT_LIST")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 361 nil  gc_used "rtx_def_insn_list"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "INSN_LIST")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 362 nil  gc_used "rtx_def_expr_list"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 2 
+                               (!pair  ".fld[1].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                               (!pair  ".fld[0].rt_rtx"
+                                (!type already_seen 150)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "EXPR_LIST")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 363 nil  gc_used "rtx_def_debug_expr"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_tree"
+                                (!type already_seen 23)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "DEBUG_EXPR")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 364 nil  gc_used "rtx_def_value"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "VALUE")
+                              (!option dot string  "")
+                             )
+                            )
+                            (!pair  ""
+                             (!type struct 365 nil  gc_used "rtx_def_UnKnown"
+                              (!srcfileloc  "rtl.h" 447)
+                              (!fields 1 
+                               (!pair  ".fld[0].rt_int"
+                                (!type already_seen 2)
+                                (!srcfileloc  "gengtype.c" 1333)
+                                (!options 
+                                 (!option dot string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "gengtype.c" 1365)
+                             (!options 
+                              (!option tag string  "UNKNOWN")
+                              (!option dot string  "")
+                             )
+                            )
+                           )
+                           (!options 
+                            (!option dot string  "")
+                           )
+                           2047 nil )
+                          (!srcfileloc  "rtl.h" 447)
+                          (!options 
+                           (!option desc string  "GET_CODE (&%0)")
+                           (!option special string  "rtx_def")
+                          )
+                         )
+                        )
+                        (!options 
+                         (!option chain_prev string  "RTX_PREV (&%h)")
+                         (!option chain_next string  "RTX_NEXT (&%h)")
+                         (!option tag string  "0")
+                         (!option desc string  "0")
+                        )
+                        2047 nil nil )
+                      )
+                      (!srcfileloc  "tree-core.h" 1714)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1925)
+                   (!options 
+                    (!option tag string  "TS_DECL_WRTL")
+                   )
+                  )
+                  (!pair  "decl_non_common"
+                   (!type struct 366 nil  gc_used "tree_decl_non_common"
+                    (!srcfileloc  "tree-core.h" 1790)
+                    (!fields 2 
+                     (!pair  "common"
+                      (!type struct 367 nil  gc_used "tree_decl_with_vis"
+                       (!srcfileloc  "tree-core.h" 1780)
+                       (!fields 20 
+                        (!pair  "common"
+                         (!type already_seen 149)
+                         (!srcfileloc  "tree-core.h" 1747)
+                         nil )
+                        (!pair  "assembler_name"
+                         (!type already_seen 23)
+                         (!srcfileloc  "tree-core.h" 1748)
+                         nil )
+                        (!pair  "symtab_node"
+                         (!type pointer 368 nil  gc_used
+                          (!type struct 369 
+                           (!type already_seen 368)
+                           gc_pointed_to "symtab_node"
+                           (!srcfileloc  "cgraph.h" 631)
+                           (!fields 40 
+                            (!pair  "DEBUG_FUNCTION"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 133)
+                             nil )
+                            (!pair  "DEBUG_FUNCTION"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 136)
+                             nil )
+                            (!pair  "type"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 445)
+                             nil )
+                            (!pair  "resolution"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 448)
+                             nil )
+                            (!pair  "definition"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 454)
+                             nil )
+                            (!pair  "alias"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 457)
+                             nil )
+                            (!pair  "transparent_alias"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 479)
+                             nil )
+                            (!pair  "weakref"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 481)
+                             nil )
+                            (!pair  "cpp_implicit_alias"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 488)
+                             nil )
+                            (!pair  "analyzed"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 491)
+                             nil )
+                            (!pair  "writeonly"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 493)
+                             nil )
+                            (!pair  "refuse_visibility_changes"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 496)
+                             nil )
+                            (!pair  "externally_visible"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 501)
+                             nil )
+                            (!pair  "no_reorder"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 503)
+                             nil )
+                            (!pair  "force_output"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 506)
+                             nil )
+                            (!pair  "forced_by_abi"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 510)
+                             nil )
+                            (!pair  "unique_name"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 512)
+                             nil )
+                            (!pair  "implicit_section"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 515)
+                             nil )
+                            (!pair  "body_removed"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 518)
+                             nil )
+                            (!pair  "used_from_other_partition"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 525)
+                             nil )
+                            (!pair  "in_other_partition"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 529)
+                             nil )
+                            (!pair  "address_taken"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 536)
+                             nil )
+                            (!pair  "in_init_priority_hash"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 538)
+                             nil )
+                            (!pair  "need_lto_streaming"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 542)
+                             nil )
+                            (!pair  "offloadable"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 545)
+                             nil )
+                            (!pair  "ifunc_resolver"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 548)
+                             nil )
+                            (!pair  "order"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 552)
+                             nil )
+                            (!pair  "decl"
+                             (!type already_seen 23)
+                             (!srcfileloc  "cgraph.h" 555)
+                             nil )
+                            (!pair  "next"
+                             (!type already_seen 368)
+                             (!srcfileloc  "cgraph.h" 558)
+                             nil )
+                            (!pair  "previous"
+                             (!type already_seen 368)
+                             (!srcfileloc  "cgraph.h" 559)
+                             nil )
+                            (!pair  "next_sharing_asm_name"
+                             (!type already_seen 368)
+                             (!srcfileloc  "cgraph.h" 570)
+                             nil )
+                            (!pair  "previous_sharing_asm_name"
+                             (!type already_seen 368)
+                             (!srcfileloc  "cgraph.h" 571)
+                             nil )
+                            (!pair  "same_comdat_group"
+                             (!type already_seen 368)
+                             (!srcfileloc  "cgraph.h" 574)
+                             nil )
+                            (!pair  "ref_list"
+                             (!type struct 370 
+                              (!type pointer 371 nil  gc_unused
+                               (!type already_seen 370)
+                              )
+                              gc_used "ipa_ref_list"
+                              (!srcfileloc  "cgraph.h" 577)
+                              (!fields 2 
+                               (!pair  "references"
+                                (!type pointer 372 nil  gc_used
+                                 (!type user_struct 373 
+                                  (!type already_seen 372)
+                                  gc_pointed_to "vec<ipa_ref_t,va_gc>"
+                                  (!srcfileloc  "ipa-ref.h" 131)
+                                  (!fields 2 
+                                   (!pair  "va_gc"
+                                    (!type already_seen 79)
+                                    (!srcfileloc  "ipa-ref.h" 131)
+                                    nil )
+                                   (!pair  "ipa_ref_t"
+                                    (!type struct 374 
+                                     (!type pointer 375 nil  gc_unused
+                                      (!type already_seen 374)
+                                     )
+                                     gc_used "ipa_ref"
+                                     (!srcfileloc  "cgraph.h" 141)
+                                     (!fields 7 
+                                      (!pair  "referring"
+                                       (!type already_seen 368)
+                                       (!srcfileloc  "ipa-ref.h" 58)
+                                       nil )
+                                      (!pair  "referred"
+                                       (!type already_seen 368)
+                                       (!srcfileloc  "ipa-ref.h" 59)
+                                       nil )
+                                      (!pair  "stmt"
+                                       (!type already_seen 331)
+                                       (!srcfileloc  "ipa-ref.h" 60)
+                                       nil )
+                                      (!pair  "lto_stmt_uid"
+                                       (!type already_seen 2)
+                                       (!srcfileloc  "ipa-ref.h" 61)
+                                       nil )
+                                      (!pair  "referred_index"
+                                       (!type already_seen 2)
+                                       (!srcfileloc  "ipa-ref.h" 62)
+                                       nil )
+                                      (!pair  "use"
+                                       (!type already_seen 2)
+                                       (!srcfileloc  "ipa-ref.h" 63)
+                                       nil )
+                                      (!pair  "speculative"
+                                       (!type already_seen 2)
+                                       (!srcfileloc  "ipa-ref.h" 64)
+                                       nil )
+                                     )
+                                     nil 2047 nil nil )
+                                    (!srcfileloc  "ipa-ref.h" 131)
+                                    nil )
+                                  )
+                                 )
+                                )
+                                (!srcfileloc  "ipa-ref.h" 131)
+                                nil )
+                               (!pair  "referring"
+                                (!type user_struct 376 nil  gc_unused "vec<ipa_ref_ptr>"
+                                 (!srcfileloc  "ipa-ref.h" 134)
+                                 (!fields 1 
+                                  (!pair  "ipa_ref_ptr"
+                                   (!type already_seen 375)
+                                   (!srcfileloc  "ipa-ref.h" 134)
+                                   nil )
+                                 )
+                                )
+                                (!srcfileloc  "ipa-ref.h" 134)
+                                (!options 
+                                 (!option skip string  "")
+                                )
+                               )
+                              )
+                              nil 2047 nil nil )
+                             (!srcfileloc  "cgraph.h" 577)
+                             nil )
+                            (!pair  "alias_target"
+                             (!type already_seen 23)
+                             (!srcfileloc  "cgraph.h" 582)
+                             nil )
+                            (!pair  "lto_file_data"
+                             (!type pointer 377 
+                              (!type pointer 378 nil  gc_used
+                               (!type already_seen 377)
+                              )
+                              gc_pointed_to
+                              (!type struct 379 
+                               (!type already_seen 377)
+                               gc_pointed_to "lto_file_decl_data"
+                               (!srcfileloc  "lto-streamer.h" 592)
+                               (!fields 14 
+                                (!pair  "current_decl_state"
+                                 (!type pointer 380 nil  gc_used
+                                  (!type struct 381 
+                                   (!type already_seen 380)
+                                   gc_pointed_to "lto_in_decl_state"
+                                   (!srcfileloc  "lto-streamer.h" 497)
+                                   (!fields 3 
+                                    (!pair  "streams"
+                                     (!type array 382 nil  gc_used "LTO_N_DECL_STREAMS" 
+                                      (!type already_seen 96)
+                                     )
+                                     (!srcfileloc  "lto-streamer.h" 489)
+                                     nil )
+                                    (!pair  "fn_decl"
+                                     (!type already_seen 23)
+                                     (!srcfileloc  "lto-streamer.h" 493)
+                                     nil )
+                                    (!pair  "compressed"
+                                     (!type already_seen 2)
+                                     (!srcfileloc  "lto-streamer.h" 496)
+                                     nil )
+                                   )
+                                   (!options 
+                                    (!option for_user string  "")
+                                   )
+                                   2047 nil nil )
+                                 )
+                                 (!srcfileloc  "lto-streamer.h" 554)
+                                 nil )
+                                (!pair  "global_decl_state"
+                                 (!type already_seen 380)
+                                 (!srcfileloc  "lto-streamer.h" 558)
+                                 nil )
+                                (!pair  "symtab_node_encoder"
+                                 (!type pointer 383 nil  gc_unused
+                                  (!type struct 384 
+                                   (!type already_seen 383)
+                                   gc_unused "lto_symtab_encoder_d"nil 
+                                   (!fields 0 )
+                                   nil 0 nil nil )
+                                 )
+                                 (!srcfileloc  "lto-streamer.h" 561)
+                                 (!options 
+                                  (!option skip string  "")
+                                 )
+                                )
+                                (!pair  "function_decl_states"
+                                 (!type pointer 385 nil  gc_used
+                                  (!type user_struct 386 
+                                   (!type already_seen 385)
+                                   gc_pointed_to "hash_table<decl_state_hasher>"
+                                   (!srcfileloc  "lto-streamer.h" 564)
+                                   (!fields 1 
+                                    (!pair  "decl_state_hasher"
+                                     (!type struct 387 nil  gc_used "decl_state_hasher"
+                                      (!srcfileloc  "lto-streamer.h" 564)
+                                      (!fields 0 )
+                                      nil 2047 nil nil )
+                                     (!srcfileloc  "lto-streamer.h" 564)
+                                     nil )
+                                   )
+                                  )
+                                 )
+                                 (!srcfileloc  "lto-streamer.h" 564)
+                                 nil )
+                                (!pair  "file_name"
+                                 (!type already_seen 11)
+                                 (!srcfileloc  "lto-streamer.h" 567)
+                                 (!options 
+                                  (!option skip string  "")
+                                 )
+                                )
+                                (!pair  "section_hash_table"
+                                 (!type pointer 388 nil  gc_unused
+                                  (!type struct 389 
+                                   (!type already_seen 388)
+                                   gc_unused "htab"nil 
+                                   (!fields 0 )
+                                   nil 0 nil nil )
+                                 )
+                                 (!srcfileloc  "lto-streamer.h" 570)
+                                 (!options 
+                                  (!option skip string  "")
+                                 )
+                                )
+                                (!pair  "renaming_hash_table"
+                                 (!type already_seen 388)
+                                 (!srcfileloc  "lto-streamer.h" 573)
+                                 (!options 
+                                  (!option skip string  "")
+                                 )
+                                )
+                                (!pair  "next"
+                                 (!type already_seen 377)
+                                 (!srcfileloc  "lto-streamer.h" 576)
+                                 nil )
+                                (!pair  "id"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "lto-streamer.h" 579)
+                                 nil )
+                                (!pair  "respairs"
+                                 (!type user_struct 390 nil  gc_unused "vec<res_pair>"
+                                  (!srcfileloc  "lto-streamer.h" 582)
+                                  (!fields 1 
+                                   (!pair  "res_pair"
+                                    (!type struct 391 nil  gc_unused "res_pair"
+                                     (!srcfileloc  "lto-streamer.h" 582)
+                                     (!fields 0 )
+                                     nil 2047 nil nil )
+                                    (!srcfileloc  "lto-streamer.h" 582)
+                                    nil )
+                                  )
+                                 )
+                                 (!srcfileloc  "lto-streamer.h" 582)
+                                 (!options 
+                                  (!option skip string  "")
+                                 )
+                                )
+                                (!pair  "max_index"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "lto-streamer.h" 583)
+                                 nil )
+                                (!pair  "profile_info"
+                                 (!type undefined 392 nil  gc_unused "gcov_summary"
+                                  (!srcfileloc  "lto-streamer.h" 585)
+                                 )
+                                 (!srcfileloc  "lto-streamer.h" 585)
+                                 (!options 
+                                  (!option skip string  "")
+                                 )
+                                )
+                                (!pair  "resolution_map"
+                                 (!type pointer 393 nil  gc_unused
+                                  (!type user_struct 394 
+                                   (!type already_seen 393)
+                                   gc_unused "hash_map<tree,ld_plugin_symbol_resolution>"
+                                   (!srcfileloc  "lto-streamer.h" 588)
+                                   (!fields 2 
+                                    (!pair  "ld_plugin_symbol_resolution"
+                                     (!type undefined 395 nil  gc_unused "ld_plugin_symbol_resolution"
+                                      (!srcfileloc  "lto-streamer.h" 588)
+                                     )
+                                     (!srcfileloc  "lto-streamer.h" 588)
+                                     nil )
+                                    (!pair  "tree"
+                                     (!type already_seen 23)
+                                     (!srcfileloc  "lto-streamer.h" 588)
+                                     nil )
+                                   )
+                                  )
+                                 )
+                                 (!srcfileloc  "lto-streamer.h" 588)
+                                 (!options 
+                                  (!option skip string  "")
+                                 )
+                                )
+                                (!pair  "mode_table"
+                                 (!type already_seen 11)
+                                 (!srcfileloc  "lto-streamer.h" 591)
+                                 nil )
+                               )
+                               nil 2047 nil nil )
+                             )
+                             (!srcfileloc  "cgraph.h" 585)
+                             nil )
+                            (!pair  "aux"
+                             (!type already_seen 3)
+                             (!srcfileloc  "cgraph.h" 587)
+                             (!options 
+                              (!option skip string  "")
+                             )
+                            )
+                            (!pair  "x_comdat_group"
+                             (!type already_seen 23)
+                             (!srcfileloc  "cgraph.h" 590)
+                             nil )
+                            (!pair  "x_section"
+                             (!type pointer 396 nil  gc_used
+                              (!type struct 397 
+                               (!type already_seen 396)
+                               gc_pointed_to "section_hash_entry"
+                               (!srcfileloc  "cgraph.h" 593)
+                               (!fields 2 
+                                (!pair  "ref_count"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "cgraph.h" 53)
+                                 nil )
+                                (!pair  "name"
+                                 (!type already_seen 11)
+                                 (!srcfileloc  "cgraph.h" 54)
+                                 nil )
+                               )
+                               (!options 
+                                (!option for_user string  "")
+                               )
+                               2047 nil nil )
+                             )
+                             (!srcfileloc  "cgraph.h" 593)
+                             nil )
+                            (!pair  "DEBUG_FUNCTION"
+                             (!type already_seen 2)
+                             (!srcfileloc  "cgraph.h" 600)
+                             nil )
+                           )
+                           (!options 
+                            (!option chain_prev string  "%h.previous")
+                            (!option chain_next string  "%h.next")
+                            (!option tag string  "SYMTAB_SYMBOL")
+                            (!option desc string  "%h.type")
+                           )
+                           2047 nil nil )
+                         )
+                         (!srcfileloc  "tree-core.h" 1749)
+                         nil )
+                        (!pair  "defer_output"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1752)
+                         nil )
+                        (!pair  "hard_register"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1753)
+                         nil )
+                        (!pair  "common_flag"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1754)
+                         nil )
+                        (!pair  "in_text_section"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1755)
+                         nil )
+                        (!pair  "in_constant_pool"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1756)
+                         nil )
+                        (!pair  "dllimport_flag"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1757)
+                         nil )
+                        (!pair  "weak_flag"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1759)
+                         nil )
+                        (!pair  "seen_in_bind_expr"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1761)
+                         nil )
+                        (!pair  "comdat_flag"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1762)
+                         nil )
+                        (!pair  "visibility"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1764)
+                         nil )
+                        (!pair  "visibility_specified"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1765)
+                         nil )
+                        (!pair  "init_priority_p"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1768)
+                         nil )
+                        (!pair  "shadowed_for_var_p"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1770)
+                         nil )
+                        (!pair  "cxx_constructor"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1772)
+                         nil )
+                        (!pair  "cxx_destructor"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1774)
+                         nil )
+                        (!pair  "final"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1776)
+                         nil )
+                        (!pair  "regdecl_flag"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1778)
+                         nil )
+                       )
+                       nil 2047 nil nil )
+                      (!srcfileloc  "tree-core.h" 1787)
+                      nil )
+                     (!pair  "result"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1789)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1927)
+                   (!options 
+                    (!option tag string  "TS_DECL_NON_COMMON")
+                   )
+                  )
+                  (!pair  "parm_decl"
+                   (!type struct 398 nil  gc_used "tree_parm_decl"
+                    (!srcfileloc  "tree-core.h" 1744)
+                    (!fields 2 
+                     (!pair  "common"
+                      (!type already_seen 149)
+                      (!srcfileloc  "tree-core.h" 1742)
+                      nil )
+                     (!pair  "incoming_rtl"
+                      (!type already_seen 150)
+                      (!srcfileloc  "tree-core.h" 1743)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1928)
+                   (!options 
+                    (!option tag string  "TS_PARM_DECL")
+                   )
+                  )
+                  (!pair  "decl_with_vis"
+                   (!type already_seen 367)
+                   (!srcfileloc  "tree-core.h" 1929)
+                   (!options 
+                    (!option tag string  "TS_DECL_WITH_VIS")
+                   )
+                  )
+                  (!pair  "var_decl"
+                   (!type struct 399 nil  gc_used "tree_var_decl"
+                    (!srcfileloc  "tree-core.h" 1784)
+                    (!fields 1 
+                     (!pair  "common"
+                      (!type already_seen 367)
+                      (!srcfileloc  "tree-core.h" 1783)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1930)
+                   (!options 
+                    (!option tag string  "TS_VAR_DECL")
+                   )
+                  )
+                  (!pair  "field_decl"
+                   (!type struct 400 nil  gc_used "tree_field_decl"
+                    (!srcfileloc  "tree-core.h" 1725)
+                    (!fields 6 
+                     (!pair  "common"
+                      (!type already_seen 53)
+                      (!srcfileloc  "tree-core.h" 1718)
+                      nil )
+                     (!pair  "offset"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1720)
+                      nil )
+                     (!pair  "bit_field_type"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1721)
+                      nil )
+                     (!pair  "qualifier"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1722)
+                      nil )
+                     (!pair  "bit_offset"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1723)
+                      nil )
+                     (!pair  "fcontext"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1724)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1931)
+                   (!options 
+                    (!option tag string  "TS_FIELD_DECL")
+                   )
+                  )
+                  (!pair  "label_decl"
+                   (!type struct 401 nil  gc_used "tree_label_decl"
+                    (!srcfileloc  "tree-core.h" 1731)
+                    (!fields 3 
+                     (!pair  "common"
+                      (!type already_seen 149)
+                      (!srcfileloc  "tree-core.h" 1728)
+                      nil )
+                     (!pair  "label_decl_uid"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1729)
+                      nil )
+                     (!pair  "eh_landing_pad_nr"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1730)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1932)
+                   (!options 
+                    (!option tag string  "TS_LABEL_DECL")
+                   )
+                  )
+                  (!pair  "result_decl"
+                   (!type struct 402 nil  gc_used "tree_result_decl"
+                    (!srcfileloc  "tree-core.h" 1735)
+                    (!fields 1 
+                     (!pair  "common"
+                      (!type already_seen 149)
+                      (!srcfileloc  "tree-core.h" 1734)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1933)
+                   (!options 
+                    (!option tag string  "TS_RESULT_DECL")
+                   )
+                  )
+                  (!pair  "const_decl"
+                   (!type struct 403 nil  gc_used "tree_const_decl"
+                    (!srcfileloc  "tree-core.h" 1739)
+                    (!fields 1 
+                     (!pair  "common"
+                      (!type already_seen 53)
+                      (!srcfileloc  "tree-core.h" 1738)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1934)
+                   (!options 
+                    (!option tag string  "TS_CONST_DECL")
+                   )
+                  )
+                  (!pair  "type_decl"
+                   (!type struct 404 nil  gc_used "tree_type_decl"
+                    (!srcfileloc  "tree-core.h" 1857)
+                    (!fields 1 
+                     (!pair  "common"
+                      (!type already_seen 366)
+                      (!srcfileloc  "tree-core.h" 1855)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1935)
+                   (!options 
+                    (!option tag string  "TS_TYPE_DECL")
+                   )
+                  )
+                  (!pair  "function_decl"
+                   (!type struct 405 nil  gc_used "tree_function_decl"
+                    (!srcfileloc  "tree-core.h" 1844)
+                    (!fields 28 
+                     (!pair  "common"
+                      (!type already_seen 366)
+                      (!srcfileloc  "tree-core.h" 1798)
+                      nil )
+                     (!pair  "f"
+                      (!type pointer 406 nil  gc_used
+                       (!type struct 407 
+                        (!type already_seen 406)
+                        gc_pointed_to "function"
+                        (!srcfileloc  "function.h" 395)
+                        (!fields 46 
+                         (!pair  "eh"
+                          (!type pointer 408 nil  gc_used
+                           (!type struct 409 
+                            (!type already_seen 408)
+                            gc_pointed_to "eh_status"
+                            (!srcfileloc  "except.h" 218)
+                            (!fields 6 
+                             (!pair  "region_tree"
+                              (!type pointer 410 nil  gc_used
+                               (!type struct 411 
+                                (!type already_seen 410)
+                                gc_pointed_to "eh_region_d"
+                                (!srcfileloc  "except.h" 180)
+                                (!fields 10 
+                                 (!pair  "outer"
+                                  (!type already_seen 410)
+                                  (!srcfileloc  "except.h" 121)
+                                  nil )
+                                 (!pair  "inner"
+                                  (!type already_seen 410)
+                                  (!srcfileloc  "except.h" 124)
+                                  nil )
+                                 (!pair  "next_peer"
+                                  (!type already_seen 410)
+                                  (!srcfileloc  "except.h" 125)
+                                  nil )
+                                 (!pair  "index"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "except.h" 128)
+                                  nil )
+                                 (!pair  "type"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "except.h" 131)
+                                  nil )
+                                 (!pair  "u"
+                                  (!type union 412 nil  gc_used "eh_region_u"
+                                   (!srcfileloc  "except.h" 167)
+                                   (!fields 3 
+                                    (!pair  "eh_try"
+                                     (!type struct 413 nil  gc_used "eh_region_u_try"
+                                      (!srcfileloc  "except.h" 139)
+                                      (!fields 2 
+                                       (!pair  "first_catch"
+                                        (!type pointer 414 nil  gc_used
+                                         (!type struct 415 
+                                          (!type already_seen 414)
+                                          gc_pointed_to "eh_catch_d"
+                                          (!srcfileloc  "except.h" 114)
+                                          (!fields 5 
+                                           (!pair  "next_catch"
+                                            (!type already_seen 414)
+                                            (!srcfileloc  "except.h" 98)
+                                            nil )
+                                           (!pair  "prev_catch"
+                                            (!type already_seen 414)
+                                            (!srcfileloc  "except.h" 99)
+                                            nil )
+                                           (!pair  "type_list"
+                                            (!type already_seen 23)
+                                            (!srcfileloc  "except.h" 103)
+                                            nil )
+                                           (!pair  "filter_list"
+                                            (!type already_seen 23)
+                                            (!srcfileloc  "except.h" 108)
+                                            nil )
+                                           (!pair  "label"
+                                            (!type already_seen 23)
+                                            (!srcfileloc  "except.h" 113)
+                                            nil )
+                                          )
+                                          nil 2047 nil nil )
+                                        )
+                                        (!srcfileloc  "except.h" 137)
+                                        nil )
+                                       (!pair  "last_catch"
+                                        (!type already_seen 414)
+                                        (!srcfileloc  "except.h" 138)
+                                        nil )
+                                      )
+                                      nil 2047 nil nil )
+                                     (!srcfileloc  "except.h" 139)
+                                     (!options 
+                                      (!option tag string  "ERT_TRY")
+                                     )
+                                    )
+                                    (!pair  "allowed"
+                                     (!type struct 416 nil  gc_used "eh_region_u_allowed"
+                                      (!srcfileloc  "except.h" 153)
+                                      (!fields 3 
+                                       (!pair  "type_list"
+                                        (!type already_seen 23)
+                                        (!srcfileloc  "except.h" 143)
+                                        nil )
+                                       (!pair  "label"
+                                        (!type already_seen 23)
+                                        (!srcfileloc  "except.h" 147)
+                                        nil )
+                                       (!pair  "filter"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "except.h" 152)
+                                        nil )
+                                      )
+                                      nil 2047 nil nil )
+                                     (!srcfileloc  "except.h" 153)
+                                     (!options 
+                                      (!option tag string  "ERT_ALLOWED_EXCEPTIONS")
+                                     )
+                                    )
+                                    (!pair  "must_not_throw"
+                                     (!type struct 417 nil  gc_used "eh_region_u_must_not_throw"
+                                      (!srcfileloc  "except.h" 166)
+                                      (!fields 2 
+                                       (!pair  "failure_decl"
+                                        (!type already_seen 23)
+                                        (!srcfileloc  "except.h" 163)
+                                        nil )
+                                       (!pair  "failure_loc"
+                                        (!type already_seen 2)
+                                        (!srcfileloc  "except.h" 165)
+                                        nil )
+                                      )
+                                      nil 2047 nil nil )
+                                     (!srcfileloc  "except.h" 166)
+                                     (!options 
+                                      (!option tag string  "ERT_MUST_NOT_THROW")
+                                     )
+                                    )
+                                   )
+                                   nil 2047 nil )
+                                  (!srcfileloc  "except.h" 167)
+                                  (!options 
+                                   (!option desc string  "%0.type")
+                                  )
+                                 )
+                                 (!pair  "landing_pads"
+                                  (!type pointer 418 nil  gc_used
+                                   (!type struct 419 
+                                    (!type already_seen 418)
+                                    gc_pointed_to "eh_landing_pad_d"
+                                    (!srcfileloc  "except.h" 91)
+                                    (!fields 5 
+                                     (!pair  "next_lp"
+                                      (!type already_seen 418)
+                                      (!srcfileloc  "except.h" 72)
+                                      nil )
+                                     (!pair  "region"
+                                      (!type already_seen 410)
+                                      (!srcfileloc  "except.h" 75)
+                                      nil )
+                                     (!pair  "post_landing_pad"
+                                      (!type already_seen 23)
+                                      (!srcfileloc  "except.h" 80)
+                                      nil )
+                                     (!pair  "landing_pad"
+                                      (!type pointer 420 nil  gc_used
+                                       (!type struct 421 
+                                        (!type already_seen 420)
+                                        gc_pointed_to "rtx_code_label"
+                                        (!srcfileloc  "function.h" 140)
+                                        (!fields 0 )
+                                        nil 2047 nil 
+                                        (!type already_seen 347)
+                                       )
+                                      )
+                                      (!srcfileloc  "except.h" 87)
+                                      nil )
+                                     (!pair  "index"
+                                      (!type already_seen 2)
+                                      (!srcfileloc  "except.h" 90)
+                                      nil )
+                                    )
+                                    nil 2047 nil nil )
+                                  )
+                                  (!srcfileloc  "except.h" 170)
+                                  nil )
+                                 (!pair  "exc_ptr_reg"
+                                  (!type already_seen 150)
+                                  (!srcfileloc  "except.h" 175)
+                                  nil )
+                                 (!pair  "filter_reg"
+                                  (!type already_seen 150)
+                                  (!srcfileloc  "except.h" 175)
+                                  nil )
+                                 (!pair  "use_cxa_end_cleanup"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "except.h" 179)
+                                  nil )
+                                )
+                                nil 2047 nil nil )
+                              )
+                              (!srcfileloc  "except.h" 194)
+                              nil )
+                             (!pair  "region_array"
+                              (!type pointer 422 nil  gc_used
+                               (!type user_struct 423 
+                                (!type already_seen 422)
+                                gc_pointed_to "vec<eh_region,va_gc>"
+                                (!srcfileloc  "except.h" 197)
+                                (!fields 2 
+                                 (!pair  "va_gc"
+                                  (!type already_seen 79)
+                                  (!srcfileloc  "except.h" 197)
+                                  nil )
+                                 (!pair  "eh_region"
+                                  (!type already_seen 410)
+                                  (!srcfileloc  "except.h" 197)
+                                  nil )
+                                )
+                               )
+                              )
+                              (!srcfileloc  "except.h" 197)
+                              nil )
+                             (!pair  "lp_array"
+                              (!type pointer 424 nil  gc_used
+                               (!type user_struct 425 
+                                (!type already_seen 424)
+                                gc_pointed_to "vec<eh_landing_pad,va_gc>"
+                                (!srcfileloc  "except.h" 200)
+                                (!fields 2 
+                                 (!pair  "va_gc"
+                                  (!type already_seen 79)
+                                  (!srcfileloc  "except.h" 200)
+                                  nil )
+                                 (!pair  "eh_landing_pad"
+                                  (!type already_seen 418)
+                                  (!srcfileloc  "except.h" 200)
+                                  nil )
+                                )
+                               )
+                              )
+                              (!srcfileloc  "except.h" 200)
+                              nil )
+                             (!pair  "throw_stmt_table"
+                              (!type pointer 426 nil  gc_used
+                               (!type user_struct 427 
+                                (!type already_seen 426)
+                                gc_pointed_to "hash_map<gimple*,int>"
+                                (!srcfileloc  "except.h" 204)
+                                (!fields 2 
+                                 (!pair  "int"
+                                  (!type undefined 428 nil  gc_unused "int"
+                                   (!srcfileloc  "alias.c" 147)
+                                  )
+                                  (!srcfileloc  "except.h" 204)
+                                  nil )
+                                 (!pair  "gimple"
+                                  (!type already_seen 331)
+                                  (!srcfileloc  "except.h" 204)
+                                  nil )
+                                )
+                               )
+                              )
+                              (!srcfileloc  "except.h" 204)
+                              nil )
+                             (!pair  "ttype_data"
+                              (!type already_seen 96)
+                              (!srcfileloc  "except.h" 208)
+                              nil )
+                             (!pair  "ehspec_data"
+                              (!type union 429 nil  gc_used "eh_status_u"
+                               (!srcfileloc  "except.h" 217)
+                               (!fields 2 
+                                (!pair  "arm_eabi"
+                                 (!type already_seen 96)
+                                 (!srcfileloc  "except.h" 215)
+                                 (!options 
+                                  (!option tag string  "1")
+                                 )
+                                )
+                                (!pair  "other"
+                                 (!type pointer 430 nil  gc_used
+                                  (!type user_struct 431 
+                                   (!type already_seen 430)
+                                   gc_pointed_to "vec<uchar,va_gc>"
+                                   (!srcfileloc  "function.h" 145)
+                                   (!fields 2 
+                                    (!pair  "va_gc"
+                                     (!type already_seen 79)
+                                     (!srcfileloc  "function.h" 145)
+                                     nil )
+                                    (!pair  "uchar"
+                                     (!type already_seen 8)
+                                     (!srcfileloc  "function.h" 145)
+                                     nil )
+                                   )
+                                  )
+                                 )
+                                 (!srcfileloc  "except.h" 216)
+                                 (!options 
+                                  (!option tag string  "0")
+                                 )
+                                )
+                               )
+                               nil 2047 nil )
+                              (!srcfileloc  "except.h" 217)
+                              (!options 
+                               (!option desc string  "targetm.arm_eabi_unwinder")
+                              )
+                             )
+                            )
+                            nil 2047 nil nil )
+                          )
+                          (!srcfileloc  "function.h" 226)
+                          nil )
+                         (!pair  "cfg"
+                          (!type pointer 432 nil  gc_used
+                           (!type struct 433 
+                            (!type already_seen 432)
+                            gc_pointed_to "control_flow_graph"
+                            (!srcfileloc  "cfg.h" 81)
+                            (!fields 15 
+                             (!pair  "x_entry_block_ptr"
+                              (!type already_seen 318)
+                              (!srcfileloc  "cfg.h" 41)
+                              nil )
+                             (!pair  "x_exit_block_ptr"
+                              (!type already_seen 318)
+                              (!srcfileloc  "cfg.h" 42)
+                              nil )
+                             (!pair  "x_basic_block_info"
+                              (!type pointer 434 nil  gc_used
+                               (!type user_struct 435 
+                                (!type already_seen 434)
+                                gc_pointed_to "vec<basic_block,va_gc>"
+                                (!srcfileloc  "cfg.h" 45)
+                                (!fields 2 
+                                 (!pair  "va_gc"
+                                  (!type already_seen 79)
+                                  (!srcfileloc  "cfg.h" 45)
+                                  nil )
+                                 (!pair  "basic_block"
+                                  (!type already_seen 318)
+                                  (!srcfileloc  "cfg.h" 45)
+                                  nil )
+                                )
+                               )
+                              )
+                              (!srcfileloc  "cfg.h" 45)
+                              nil )
+                             (!pair  "x_n_basic_blocks"
+                              (!type already_seen 2)
+                              (!srcfileloc  "cfg.h" 48)
+                              nil )
+                             (!pair  "x_n_edges"
+                              (!type already_seen 2)
+                              (!srcfileloc  "cfg.h" 51)
+                              nil )
+                             (!pair  "x_last_basic_block"
+                              (!type already_seen 2)
+                              (!srcfileloc  "cfg.h" 54)
+                              nil )
+                             (!pair  "last_label_uid"
+                              (!type already_seen 2)
+                              (!srcfileloc  "cfg.h" 57)
+                              nil )
+                             (!pair  "x_label_to_block_map"
+                              (!type already_seen 434)
+                              (!srcfileloc  "cfg.h" 61)
+                              nil )
+                             (!pair  "x_profile_status"
+                              (!type already_seen 2)
+                              (!srcfileloc  "cfg.h" 63)
+                              nil )
+                             (!pair  "x_dom_computed"
+                              (!type array 436 nil  gc_used "2" 
+                               (!type already_seen 2)
+                              )
+                              (!srcfileloc  "cfg.h" 66)
+                              nil )
+                             (!pair  "x_n_bbs_in_dom_tree"
+                              (!type array 437 nil  gc_used "2" 
+                               (!type already_seen 2)
+                              )
+                              (!srcfileloc  "cfg.h" 69)
+                              nil )
+                             (!pair  "max_jumptable_ents"
+                              (!type already_seen 2)
+                              (!srcfileloc  "cfg.h" 73)
+                              nil )
+                             (!pair  "count_max"
+                              (!type already_seen 350)
+                              (!srcfileloc  "cfg.h" 76)
+                              nil )
+                             (!pair  "edge_flags_allocated"
+                              (!type already_seen 2)
+                              (!srcfileloc  "cfg.h" 79)
+                              nil )
+                             (!pair  "bb_flags_allocated"
+                              (!type already_seen 2)
+                              (!srcfileloc  "cfg.h" 80)
+                              nil )
+                            )
+                            nil 2047 nil nil )
+                          )
+                          (!srcfileloc  "function.h" 229)
+                          nil )
+                         (!pair  "gimple_body"
+                          (!type already_seen 331)
+                          (!srcfileloc  "function.h" 232)
+                          nil )
+                         (!pair  "gimple_df"
+                          (!type pointer 438 nil  gc_used
+                           (!type struct 439 
+                            (!type already_seen 438)
+                            gc_pointed_to "gimple_df"
+                            (!srcfileloc  "gimple-ssa.h" 115)
+                            (!fields 13 
+                             (!pair  "ssa_names"
+                              (!type already_seen 96)
+                              (!srcfileloc  "gimple-ssa.h" 74)
+                              nil )
+                             (!pair  "vop"
+                              (!type already_seen 23)
+                              (!srcfileloc  "gimple-ssa.h" 77)
+                              nil )
+                             (!pair  "escaped"
+                              (!type struct 440 nil  gc_used "pt_solution"
+                               (!srcfileloc  "tree-ssa-alias.h" 65)
+                               (!fields 11 
+                                (!pair  "anything"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "tree-ssa-alias.h" 32)
+                                 nil )
+                                (!pair  "nonlocal"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "tree-ssa-alias.h" 36)
+                                 nil )
+                                (!pair  "escaped"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "tree-ssa-alias.h" 40)
+                                 nil )
+                                (!pair  "ipa_escaped"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "tree-ssa-alias.h" 44)
+                                 nil )
+                                (!pair  "null"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "tree-ssa-alias.h" 48)
+                                 nil )
+                                (!pair  "vars_contains_nonlocal"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "tree-ssa-alias.h" 51)
+                                 nil )
+                                (!pair  "vars_contains_escaped"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "tree-ssa-alias.h" 53)
+                                 nil )
+                                (!pair  "vars_contains_escaped_heap"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "tree-ssa-alias.h" 56)
+                                 nil )
+                                (!pair  "vars_contains_restrict"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "tree-ssa-alias.h" 59)
+                                 nil )
+                                (!pair  "vars_contains_interposable"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "tree-ssa-alias.h" 61)
+                                 nil )
+                                (!pair  "vars"
+                                 (!type already_seen 133)
+                                 (!srcfileloc  "tree-ssa-alias.h" 64)
+                                 nil )
+                               )
+                               nil 2047 nil nil )
+                              (!srcfileloc  "gimple-ssa.h" 80)
+                              nil )
+                             (!pair  "decls_to_pointers"
+                              (!type pointer 441 nil  gc_used
+                               (!type user_struct 442 
+                                (!type already_seen 441)
+                                gc_pointed_to "hash_map<tree,tree>"
+                                (!srcfileloc  "gimple-ssa.h" 84)
+                                (!fields 2 
+                                 (!pair  "tree"
+                                  (!type already_seen 23)
+                                  (!srcfileloc  "gimple-ssa.h" 84)
+                                  nil )
+                                 (!pair  "tree"
+                                  (!type already_seen 23)
+                                  (!srcfileloc  "gimple-ssa.h" 84)
+                                  nil )
+                                )
+                               )
+                              )
+                              (!srcfileloc  "gimple-ssa.h" 84)
+                              (!options 
+                               (!option skip string  "")
+                              )
+                             )
+                             (!pair  "free_ssanames"
+                              (!type already_seen 96)
+                              (!srcfileloc  "gimple-ssa.h" 87)
+                              nil )
+                             (!pair  "free_ssanames_queue"
+                              (!type already_seen 96)
+                              (!srcfileloc  "gimple-ssa.h" 90)
+                              nil )
+                             (!pair  "default_defs"
+                              (!type pointer 443 nil  gc_used
+                               (!type user_struct 444 
+                                (!type already_seen 443)
+                                gc_pointed_to "hash_table<ssa_name_hasher>"
+                                (!srcfileloc  "gimple-ssa.h" 96)
+                                (!fields 1 
+                                 (!pair  "ssa_name_hasher"
+                                  (!type struct 445 nil  gc_used "ssa_name_hasher"
+                                   (!srcfileloc  "gimple-ssa.h" 96)
+                                   (!fields 0 )
+                                   nil 2047 nil nil )
+                                  (!srcfileloc  "gimple-ssa.h" 96)
+                                  nil )
+                                )
+                               )
+                              )
+                              (!srcfileloc  "gimple-ssa.h" 96)
+                              nil )
+                             (!pair  "ssa_renaming_needed"
+                              (!type already_seen 2)
+                              (!srcfileloc  "gimple-ssa.h" 99)
+                              nil )
+                             (!pair  "rename_vops"
+                              (!type already_seen 2)
+                              (!srcfileloc  "gimple-ssa.h" 102)
+                              nil )
+                             (!pair  "in_ssa_p"
+                              (!type already_seen 2)
+                              (!srcfileloc  "gimple-ssa.h" 105)
+                              nil )
+                             (!pair  "ipa_pta"
+                              (!type already_seen 2)
+                              (!srcfileloc  "gimple-ssa.h" 108)
+                              nil )
+                             (!pair  "ssa_operands"
+                              (!type struct 446 nil  gc_used "ssa_operands"
+                               (!srcfileloc  "tree-ssa-operands.h" 63)
+                               (!fields 5 
+                                (!pair  "operand_memory"
+                                 (!type pointer 447 nil  gc_used
+                                  (!type struct 448 
+                                   (!type already_seen 447)
+                                   gc_pointed_to "ssa_operand_memory_d"
+                                   (!srcfileloc  "tree-ssa-operands.h" 51)
+                                   (!fields 2 
+                                    (!pair  "next"
+                                     (!type already_seen 447)
+                                     (!srcfileloc  "tree-ssa-operands.h" 49)
+                                     nil )
+                                    (!pair  "mem"
+                                     (!type array 449 nil  gc_used "1" 
+                                      (!type already_seen 8)
+                                     )
+                                     (!srcfileloc  "tree-ssa-operands.h" 50)
+                                     nil )
+                                   )
+                                   (!options 
+                                    (!option chain_next string  "%h.next")
+                                   )
+                                   2047 nil nil )
+                                 )
+                                 (!srcfileloc  "tree-ssa-operands.h" 55)
+                                 nil )
+                                (!pair  "operand_memory_index"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "tree-ssa-operands.h" 56)
+                                 nil )
+                                (!pair  "ssa_operand_mem_size"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "tree-ssa-operands.h" 58)
+                                 nil )
+                                (!pair  "ops_active"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "tree-ssa-operands.h" 60)
+                                 nil )
+                                (!pair  "free_uses"
+                                 (!type pointer 450 nil  gc_unused
+                                  (!type struct 451 
+                                   (!type already_seen 450)
+                                   gc_unused "use_optype_d"nil 
+                                   (!fields 0 )
+                                   nil 0 nil nil )
+                                 )
+                                 (!srcfileloc  "tree-ssa-operands.h" 62)
+                                 (!options 
+                                  (!option skip string  "")
+                                 )
+                                )
+                               )
+                               nil 2047 nil nil )
+                              (!srcfileloc  "gimple-ssa.h" 110)
+                              nil )
+                             (!pair  "tm_restart"
+                              (!type pointer 452 nil  gc_used
+                               (!type user_struct 453 
+                                (!type already_seen 452)
+                                gc_pointed_to "hash_table<tm_restart_hasher>"
+                                (!srcfileloc  "gimple-ssa.h" 114)
+                                (!fields 1 
+                                 (!pair  "tm_restart_hasher"
+                                  (!type struct 454 nil  gc_used "tm_restart_hasher"
+                                   (!srcfileloc  "gimple-ssa.h" 114)
+                                   (!fields 0 )
+                                   nil 2047 nil nil )
+                                  (!srcfileloc  "gimple-ssa.h" 114)
+                                  nil )
+                                )
+                               )
+                              )
+                              (!srcfileloc  "gimple-ssa.h" 114)
+                              nil )
+                            )
+                            nil 2047 nil nil )
+                          )
+                          (!srcfileloc  "function.h" 235)
+                          nil )
+                         (!pair  "x_current_loops"
+                          (!type pointer 455 nil  gc_used
+                           (!type struct 456 
+                            (!type already_seen 455)
+                            gc_pointed_to "loops"
+                            (!srcfileloc  "cfgloop.h" 326)
+                            (!fields 4 
+                             (!pair  "state"
+                              (!type already_seen 2)
+                              (!srcfileloc  "cfgloop.h" 314)
+                              nil )
+                             (!pair  "larray"
+                              (!type already_seen 327)
+                              (!srcfileloc  "cfgloop.h" 317)
+                              nil )
+                             (!pair  "exits"
+                              (!type pointer 457 nil  gc_used
+                               (!type user_struct 458 
+                                (!type already_seen 457)
+                                gc_pointed_to "hash_table<loop_exit_hasher>"
+                                (!srcfileloc  "cfgloop.h" 322)
+                                (!fields 1 
+                                 (!pair  "loop_exit_hasher"
+                                  (!type struct 459 nil  gc_used "loop_exit_hasher"
+                                   (!srcfileloc  "cfgloop.h" 322)
+                                   (!fields 0 )
+                                   nil 2047 nil nil )
+                                  (!srcfileloc  "cfgloop.h" 322)
+                                  nil )
+                                )
+                               )
+                              )
+                              (!srcfileloc  "cfgloop.h" 322)
+                              nil )
+                             (!pair  "tree_root"
+                              (!type already_seen 324)
+                              (!srcfileloc  "cfgloop.h" 325)
+                              nil )
+                            )
+                            nil 2047 nil nil )
+                          )
+                          (!srcfileloc  "function.h" 238)
+                          nil )
+                         (!pair  "pass_startwith"
+                          (!type already_seen 11)
+                          (!srcfileloc  "function.h" 241)
+                          nil )
+                         (!pair  "su"
+                          (!type pointer 460 nil  gc_used
+                           (!type struct 461 
+                            (!type already_seen 460)
+                            gc_pointed_to "stack_usage"
+                            (!srcfileloc  "function.h" 211)
+                            (!fields 4 
+                             (!pair  "static_stack_size"
+                              (!type already_seen 2)
+                              (!srcfileloc  "function.h" 197)
+                              nil )
+                             (!pair  "dynamic_stack_size"
+                              (!type already_seen 2)
+                              (!srcfileloc  "function.h" 201)
+                              nil )
+                             (!pair  "pushed_stack_size"
+                              (!type already_seen 2)
+                              (!srcfileloc  "function.h" 206)
+                              nil )
+                             (!pair  "has_unbounded_dynamic_stack_size"
+                              (!type already_seen 2)
+                              (!srcfileloc  "function.h" 210)
+                              nil )
+                            )
+                            nil 2047 nil nil )
+                          )
+                          (!srcfileloc  "function.h" 244)
+                          nil )
+                         (!pair  "value_histograms"
+                          (!type already_seen 388)
+                          (!srcfileloc  "function.h" 247)
+                          (!options 
+                           (!option skip string  "")
+                          )
+                         )
+                         (!pair  "decl"
+                          (!type already_seen 23)
+                          (!srcfileloc  "function.h" 252)
+                          nil )
+                         (!pair  "static_chain_decl"
+                          (!type already_seen 23)
+                          (!srcfileloc  "function.h" 256)
+                          nil )
+                         (!pair  "nonlocal_goto_save_area"
+                          (!type already_seen 23)
+                          (!srcfileloc  "function.h" 261)
+                          nil )
+                         (!pair  "local_decls"
+                          (!type already_seen 96)
+                          (!srcfileloc  "function.h" 264)
+                          nil )
+                         (!pair  "machine"
+                          (!type pointer 462 nil  gc_unused
+                           (!type struct 463 
+                            (!type already_seen 462)
+                            gc_maybe_pointed_to "machine_function"
+                            (!srcfileloc  "config/aarch64/aarch64.h" 725)
+                            (!fields 2 
+                             (!pair  "frame"
+                              (!type struct 464 nil  gc_used "aarch64_frame"
+                               (!srcfileloc  "config/aarch64/aarch64.h" 718)
+                               (!fields 14 
+                                (!pair  "reg_offset"
+                                 (!type array 465 nil  gc_used "FIRST_PSEUDO_REGISTER" 
+                                  (!type already_seen 2)
+                                 )
+                                 (!srcfileloc  "config/aarch64/aarch64.h" 670)
+                                 nil )
+                                (!pair  "saved_varargs_size"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "config/aarch64/aarch64.h" 676)
+                                 nil )
+                                (!pair  "saved_regs_size"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "config/aarch64/aarch64.h" 680)
+                                 nil )
+                                (!pair  "locals_offset"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "config/aarch64/aarch64.h" 685)
+                                 nil )
+                                (!pair  "hard_fp_offset"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "config/aarch64/aarch64.h" 690)
+                                 nil )
+                                (!pair  "frame_size"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "config/aarch64/aarch64.h" 695)
+                                 nil )
+                                (!pair  "initial_adjust"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "config/aarch64/aarch64.h" 698)
+                                 nil )
+                                (!pair  "callee_adjust"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "config/aarch64/aarch64.h" 702)
+                                 nil )
+                                (!pair  "callee_offset"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "config/aarch64/aarch64.h" 706)
+                                 nil )
+                                (!pair  "final_adjust"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "config/aarch64/aarch64.h" 709)
+                                 nil )
+                                (!pair  "emit_frame_chain"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "config/aarch64/aarch64.h" 712)
+                                 nil )
+                                (!pair  "wb_candidate1"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "config/aarch64/aarch64.h" 714)
+                                 nil )
+                                (!pair  "wb_candidate2"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "config/aarch64/aarch64.h" 715)
+                                 nil )
+                                (!pair  "laid_out"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "config/aarch64/aarch64.h" 717)
+                                 nil )
+                               )
+                               nil 2047 nil nil )
+                              (!srcfileloc  "config/aarch64/aarch64.h" 722)
+                              nil )
+                             (!pair  "reg_is_wrapped_separately"
+                              (!type array 466 nil  gc_used "LAST_SAVED_REGNUM" 
+                               (!type already_seen 2)
+                              )
+                              (!srcfileloc  "config/aarch64/aarch64.h" 724)
+                              nil )
+                            )
+                            nil 2047 nil nil )
+                          )
+                          (!srcfileloc  "function.h" 269)
+                          (!options 
+                           (!option maybe_undef string  "")
+                          )
+                         )
+                         (!pair  "language"
+                          (!type already_seen 81)
+                          (!srcfileloc  "function.h" 272)
+                          nil )
+                         (!pair  "used_types_hash"
+                          (!type pointer 467 nil  gc_used
+                           (!type user_struct 468 
+                            (!type already_seen 467)
+                            gc_pointed_to "hash_set<tree>"
+                            (!srcfileloc  "function.h" 275)
+                            (!fields 1 
+                             (!pair  "tree"
+                              (!type already_seen 23)
+                              (!srcfileloc  "function.h" 275)
+                              nil )
+                            )
+                           )
+                          )
+                          (!srcfileloc  "function.h" 275)
+                          nil )
+                         (!pair  "fde"
+                          (!type pointer 469 nil  gc_used
+                           (!type struct 470 
+                            (!type already_seen 469)
+                            gc_pointed_to "dw_fde_node"
+                            (!srcfileloc  "dwarf2out.h" 111)
+                            (!fields 22 
+                             (!pair  "decl"
+                              (!type already_seen 23)
+                              (!srcfileloc  "dwarf2out.h" 79)
+                              nil )
+                             (!pair  "dw_fde_begin"
+                              (!type already_seen 11)
+                              (!srcfileloc  "dwarf2out.h" 80)
+                              nil )
+                             (!pair  "dw_fde_current_label"
+                              (!type already_seen 11)
+                              (!srcfileloc  "dwarf2out.h" 81)
+                              nil )
+                             (!pair  "dw_fde_end"
+                              (!type already_seen 11)
+                              (!srcfileloc  "dwarf2out.h" 82)
+                              nil )
+                             (!pair  "dw_fde_vms_end_prologue"
+                              (!type already_seen 11)
+                              (!srcfileloc  "dwarf2out.h" 83)
+                              nil )
+                             (!pair  "dw_fde_vms_begin_epilogue"
+                              (!type already_seen 11)
+                              (!srcfileloc  "dwarf2out.h" 84)
+                              nil )
+                             (!pair  "dw_fde_second_begin"
+                              (!type already_seen 11)
+                              (!srcfileloc  "dwarf2out.h" 85)
+                              nil )
+                             (!pair  "dw_fde_second_end"
+                              (!type already_seen 11)
+                              (!srcfileloc  "dwarf2out.h" 86)
+                              nil )
+                             (!pair  "dw_fde_cfi"
+                              (!type pointer 471 nil  gc_used
+                               (!type user_struct 472 
+                                (!type already_seen 471)
+                                gc_pointed_to "vec<dw_cfi_ref,va_gc>"
+                                (!srcfileloc  "dwarf2out.h" 68)
+                                (!fields 2 
+                                 (!pair  "va_gc"
+                                  (!type already_seen 79)
+                                  (!srcfileloc  "dwarf2out.h" 68)
+                                  nil )
+                                 (!pair  "dw_cfi_ref"
+                                  (!type pointer 473 nil  gc_used
+                                   (!type struct 474 
+                                    (!type already_seen 473)
+                                    gc_pointed_to "dw_cfi_node"
+                                    (!srcfileloc  "dwarf2out.h" 65)
+                                    (!fields 3 
+                                     (!pair  "dw_cfi_opc"
+                                      (!type already_seen 2)
+                                      (!srcfileloc  "dwarf2out.h" 60)
+                                      nil )
+                                     (!pair  "dw_cfi_oprnd1"
+                                      (!type union 475 nil  gc_used "anonymous:../../linaro/gcc/dwarf2out.h:50"
+                                       (!srcfileloc  "dwarf2out.h" 57)
+                                       (!fields 5 
+                                        (!pair  "dw_cfi_reg_num"
+                                         (!type already_seen 2)
+                                         (!srcfileloc  "dwarf2out.h" 51)
+                                         (!options 
+                                          (!option tag string  "dw_cfi_oprnd_reg_num")
+                                         )
+                                        )
+                                        (!pair  "dw_cfi_offset"
+                                         (!type already_seen 2)
+                                         (!srcfileloc  "dwarf2out.h" 52)
+                                         (!options 
+                                          (!option tag string  "dw_cfi_oprnd_offset")
+                                         )
+                                        )
+                                        (!pair  "dw_cfi_addr"
+                                         (!type already_seen 11)
+                                         (!srcfileloc  "dwarf2out.h" 53)
+                                         (!options 
+                                          (!option tag string  "dw_cfi_oprnd_addr")
+                                         )
+                                        )
+                                        (!pair  "dw_cfi_loc"
+                                         (!type pointer 476 nil  gc_used
+                                          (!type struct 477 
+                                           (!type already_seen 476)
+                                           gc_pointed_to "dw_loc_descr_node"
+                                           (!srcfileloc  "dwarf2out.h" 258)
+                                           (!fields 7 
+                                            (!pair  "dw_loc_next"
+                                             (!type already_seen 476)
+                                             (!srcfileloc  "dwarf2out.h" 246)
+                                             nil )
+                                            (!pair  "dw_loc_opc"
+                                             (!type already_seen 2)
+                                             (!srcfileloc  "dwarf2out.h" 247)
+                                             nil )
+                                            (!pair  "dtprel"
+                                             (!type already_seen 2)
+                                             (!srcfileloc  "dwarf2out.h" 250)
+                                             nil )
+                                            (!pair  "frame_offset_rel"
+                                             (!type already_seen 2)
+                                             (!srcfileloc  "dwarf2out.h" 254)
+                                             nil )
+                                            (!pair  "dw_loc_addr"
+                                             (!type already_seen 2)
+                                             (!srcfileloc  "dwarf2out.h" 255)
+                                             nil )
+                                            (!pair  "dw_loc_oprnd1"
+                                             (!type struct 478 
+                                              (!type pointer 479 nil  gc_unused
+                                               (!type already_seen 478)
+                                              )
+                                              gc_used "dw_val_node"
+                                              (!srcfileloc  "dwarf2out.h" 256)
+                                              (!fields 3 
+                                               (!pair  "val_class"
+                                                (!type already_seen 2)
+                                                (!srcfileloc  "dwarf2out.h" 201)
+                                                nil )
+                                               (!pair  "val_entry"
+                                                (!type pointer 480 nil  gc_used
+                                                 (!type struct 481 
+                                                  (!type already_seen 480)
+                                                  gc_pointed_to "addr_table_entry"
+                                                  (!srcfileloc  "dwarf2out.c" 1305)
+                                                  (!fields 4 
+                                                   (!pair  "kind"
+                                                    (!type already_seen 2)
+                                                    (!srcfileloc  "dwarf2out.c" 1286)
+                                                    nil )
+                                                   (!pair  "refcount"
+                                                    (!type already_seen 2)
+                                                    (!srcfileloc  "dwarf2out.c" 1287)
+                                                    nil )
+                                                   (!pair  "index"
+                                                    (!type already_seen 2)
+                                                    (!srcfileloc  "dwarf2out.c" 1288)
+                                                    nil )
+                                                   (!pair  "addr"
+                                                    (!type union 482 nil  gc_used "addr_table_entry_struct_union"
+                                                     (!srcfileloc  "dwarf2out.c" 1293)
+                                                     (!fields 2 
+                                                      (!pair  "rtl"
+                                                       (!type already_seen 150)
+                                                       (!srcfileloc  "dwarf2out.c" 1291)
+                                                       (!options 
+                                                        (!option tag string  "0")
+                                                       )
+                                                      )
+                                                      (!pair  "label"
+                                                       (!type already_seen 11)
+                                                       (!srcfileloc  "dwarf2out.c" 1292)
+                                                       (!options 
+                                                        (!option tag string  "1")
+                                                       )
+                                                      )
+                                                     )
+                                                     nil 2047 nil )
+                                                    (!srcfileloc  "dwarf2out.c" 1294)
+                                                    (!options 
+                                                     (!option desc string  "%1.kind")
+                                                    )
+                                                   )
+                                                  )
+                                                  (!options 
+                                                   (!option for_user string  "")
+                                                  )
+                                                  2047 nil nil )
+                                                )
+                                                (!srcfileloc  "dwarf2out.h" 202)
+                                                nil )
+                                               (!pair  "v"
+                                                (!type union 483 nil  gc_used "dw_val_struct_union"
+                                                 (!srcfileloc  "dwarf2out.h" 238)
+                                                 (!fields 23 
+                                                  (!pair  "val_addr"
+                                                   (!type already_seen 150)
+                                                   (!srcfileloc  "dwarf2out.h" 205)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_addr")
+                                                   )
+                                                  )
+                                                  (!pair  "val_offset"
+                                                   (!type already_seen 2)
+                                                   (!srcfileloc  "dwarf2out.h" 206)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_offset")
+                                                   )
+                                                  )
+                                                  (!pair  "val_loc_list"
+                                                   (!type pointer 484 nil  gc_used
+                                                    (!type struct 485 
+                                                     (!type already_seen 484)
+                                                     gc_pointed_to "dw_loc_list_struct"
+                                                     (!srcfileloc  "dwarf2out.c" 1331)
+                                                     (!fields 18 
+                                                      (!pair  "dw_loc_next"
+                                                       (!type already_seen 484)
+                                                       (!srcfileloc  "dwarf2out.c" 1303)
+                                                       nil )
+                                                      (!pair  "begin"
+                                                       (!type already_seen 11)
+                                                       (!srcfileloc  "dwarf2out.c" 1304)
+                                                       nil )
+                                                      (!pair  "begin_entry"
+                                                       (!type already_seen 480)
+                                                       (!srcfileloc  "dwarf2out.c" 1305)
+                                                       nil )
+                                                      (!pair  "end"
+                                                       (!type already_seen 11)
+                                                       (!srcfileloc  "dwarf2out.c" 1306)
+                                                       nil )
+                                                      (!pair  "ll_symbol"
+                                                       (!type already_seen 11)
+                                                       (!srcfileloc  "dwarf2out.c" 1307)
+                                                       nil )
+                                                      (!pair  "vl_symbol"
+                                                       (!type already_seen 11)
+                                                       (!srcfileloc  "dwarf2out.c" 1309)
+                                                       nil )
+                                                      (!pair  "section"
+                                                       (!type already_seen 11)
+                                                       (!srcfileloc  "dwarf2out.c" 1310)
+                                                       nil )
+                                                      (!pair  "expr"
+                                                       (!type already_seen 476)
+                                                       (!srcfileloc  "dwarf2out.c" 1311)
+                                                       nil )
+                                                      (!pair  "vbegin"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 1312)
+                                                       nil )
+                                                      (!pair  "vend"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 1312)
+                                                       nil )
+                                                      (!pair  "hash"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 1313)
+                                                       nil )
+                                                      (!pair  "resolved_addr"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 1316)
+                                                       nil )
+                                                      (!pair  "replaced"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 1318)
+                                                       nil )
+                                                      (!pair  "emitted"
+                                                       (!type already_seen 8)
+                                                       (!srcfileloc  "dwarf2out.c" 1321)
+                                                       nil )
+                                                      (!pair  "num_assigned"
+                                                       (!type already_seen 8)
+                                                       (!srcfileloc  "dwarf2out.c" 1323)
+                                                       nil )
+                                                      (!pair  "offset_emitted"
+                                                       (!type already_seen 8)
+                                                       (!srcfileloc  "dwarf2out.c" 1325)
+                                                       nil )
+                                                      (!pair  "noted_variable_value"
+                                                       (!type already_seen 8)
+                                                       (!srcfileloc  "dwarf2out.c" 1327)
+                                                       nil )
+                                                      (!pair  "force"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 1330)
+                                                       nil )
+                                                     )
+                                                     nil 2047 nil nil )
+                                                   )
+                                                   (!srcfileloc  "dwarf2out.h" 207)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_loc_list")
+                                                   )
+                                                  )
+                                                  (!pair  "val_view_list"
+                                                   (!type pointer 486 nil  gc_used
+                                                    (!type struct 487 
+                                                     (!type already_seen 486)
+                                                     gc_pointed_to "die_struct"
+                                                     (!srcfileloc  "dwarf2out.c" 3101)
+                                                     (!fields 15 
+                                                      (!pair  "die_id"
+                                                       (!type union 488 nil  gc_used "die_symbol_or_type_node"
+                                                        (!srcfileloc  "dwarf2out.c" 3078)
+                                                        (!fields 2 
+                                                         (!pair  "die_symbol"
+                                                          (!type already_seen 11)
+                                                          (!srcfileloc  "dwarf2out.c" 3076)
+                                                          (!options 
+                                                           (!option tag string  "0")
+                                                          )
+                                                         )
+                                                         (!pair  "die_type_node"
+                                                          (!type pointer 489 nil  gc_used
+                                                           (!type struct 490 
+                                                            (!type already_seen 489)
+                                                            gc_pointed_to "comdat_type_node"
+                                                            (!srcfileloc  "dwarf2out.c" 3170)
+                                                            (!fields 5 
+                                                             (!pair  "root_die"
+                                                              (!type already_seen 486)
+                                                              (!srcfileloc  "dwarf2out.c" 3165)
+                                                              nil )
+                                                             (!pair  "type_die"
+                                                              (!type already_seen 486)
+                                                              (!srcfileloc  "dwarf2out.c" 3166)
+                                                              nil )
+                                                             (!pair  "skeleton_die"
+                                                              (!type already_seen 486)
+                                                              (!srcfileloc  "dwarf2out.c" 3167)
+                                                              nil )
+                                                             (!pair  "signature"
+                                                              (!type array 491 nil  gc_used "DWARF_TYPE_SIGNATURE_SIZE" 
+                                                               (!type already_seen 8)
+                                                              )
+                                                              (!srcfileloc  "dwarf2out.c" 3168)
+                                                              nil )
+                                                             (!pair  "next"
+                                                              (!type already_seen 489)
+                                                              (!srcfileloc  "dwarf2out.c" 3169)
+                                                              nil )
+                                                            )
+                                                            nil 2047 nil nil )
+                                                          )
+                                                          (!srcfileloc  "dwarf2out.c" 3077)
+                                                          (!options 
+                                                           (!option tag string  "1")
+                                                          )
+                                                         )
+                                                        )
+                                                        nil 2047 nil )
+                                                       (!srcfileloc  "dwarf2out.c" 3079)
+                                                       (!options 
+                                                        (!option desc string  "%0.comdat_type_p")
+                                                       )
+                                                      )
+                                                      (!pair  "die_attr"
+                                                       (!type pointer 492 nil  gc_used
+                                                        (!type user_struct 493 
+                                                         (!type already_seen 492)
+                                                         gc_pointed_to "vec<dw_attr_node,va_gc>"
+                                                         (!srcfileloc  "dwarf2out.c" 3080)
+                                                         (!fields 2 
+                                                          (!pair  "va_gc"
+                                                           (!type already_seen 79)
+                                                           (!srcfileloc  "dwarf2out.c" 3080)
+                                                           nil )
+                                                          (!pair  "dw_attr_node"
+                                                           (!type struct 494 nil  gc_used "dw_attr_struct"
+                                                            (!srcfileloc  "dwarf2out.c" 3065)
+                                                            (!fields 2 
+                                                             (!pair  "dw_attr"
+                                                              (!type already_seen 2)
+                                                              (!srcfileloc  "dwarf2out.c" 3063)
+                                                              nil )
+                                                             (!pair  "dw_attr_val"
+                                                              (!type already_seen 478)
+                                                              (!srcfileloc  "dwarf2out.c" 3064)
+                                                              nil )
+                                                            )
+                                                            nil 2047 nil nil )
+                                                           (!srcfileloc  "dwarf2out.c" 3080)
+                                                           nil )
+                                                         )
+                                                        )
+                                                       )
+                                                       (!srcfileloc  "dwarf2out.c" 3080)
+                                                       nil )
+                                                      (!pair  "die_parent"
+                                                       (!type already_seen 486)
+                                                       (!srcfileloc  "dwarf2out.c" 3081)
+                                                       nil )
+                                                      (!pair  "die_child"
+                                                       (!type already_seen 486)
+                                                       (!srcfileloc  "dwarf2out.c" 3082)
+                                                       nil )
+                                                      (!pair  "die_sib"
+                                                       (!type already_seen 486)
+                                                       (!srcfileloc  "dwarf2out.c" 3083)
+                                                       nil )
+                                                      (!pair  "die_definition"
+                                                       (!type already_seen 486)
+                                                       (!srcfileloc  "dwarf2out.c" 3084)
+                                                       nil )
+                                                      (!pair  "die_offset"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 3085)
+                                                       nil )
+                                                      (!pair  "die_abbrev"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 3086)
+                                                       nil )
+                                                      (!pair  "die_mark"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 3087)
+                                                       nil )
+                                                      (!pair  "decl_id"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 3088)
+                                                       nil )
+                                                      (!pair  "die_tag"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 3089)
+                                                       nil )
+                                                      (!pair  "die_perennial_p"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 3091)
+                                                       nil )
+                                                      (!pair  "comdat_type_p"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 3092)
+                                                       nil )
+                                                      (!pair  "with_offset"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 3095)
+                                                       nil )
+                                                      (!pair  "removed"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 3099)
+                                                       nil )
+                                                     )
+                                                     (!options 
+                                                      (!option for_user string  "")
+                                                      (!option chain_circular string  "%h.die_sib")
+                                                     )
+                                                     2047 nil nil )
+                                                   )
+                                                   (!srcfileloc  "dwarf2out.h" 208)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_view_list")
+                                                   )
+                                                  )
+                                                  (!pair  "val_loc"
+                                                   (!type already_seen 476)
+                                                   (!srcfileloc  "dwarf2out.h" 209)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_loc")
+                                                   )
+                                                  )
+                                                  (!pair  "val_int"
+                                                   (!type already_seen 2)
+                                                   (!srcfileloc  "dwarf2out.h" 210)
+                                                   (!options 
+                                                    (!option default string  "")
+                                                   )
+                                                  )
+                                                  (!pair  "val_unsigned"
+                                                   (!type already_seen 2)
+                                                   (!srcfileloc  "dwarf2out.h" 212)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_unsigned_const")
+                                                   )
+                                                  )
+                                                  (!pair  "val_double"
+                                                   (!type already_seen 2)
+                                                   (!srcfileloc  "dwarf2out.h" 213)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_const_double")
+                                                   )
+                                                  )
+                                                  (!pair  "val_wide"
+                                                   (!type pointer 495 nil  gc_used
+                                                    (!type user_struct 496 
+                                                     (!type already_seen 495)
+                                                     gc_pointed_to "generic_wide_int<wide_int_storage>"
+                                                     (!srcfileloc  "wide-int.h" 322)
+                                                     (!fields 1 
+                                                      (!pair  "wide_int_storage"
+                                                       (!type struct 497 nil  gc_used "wide_int_storage"
+                                                        (!srcfileloc  "wide-int.h" 1067)
+                                                        (!fields 3 
+                                                         (!pair  "val"
+                                                          (!type array 498 nil  gc_used "WIDE_INT_MAX_ELTS" 
+                                                           (!type already_seen 2)
+                                                          )
+                                                          (!srcfileloc  "wide-int.h" 1041)
+                                                          nil )
+                                                         (!pair  "len"
+                                                          (!type already_seen 2)
+                                                          (!srcfileloc  "wide-int.h" 1042)
+                                                          nil )
+                                                         (!pair  "precision"
+                                                          (!type already_seen 2)
+                                                          (!srcfileloc  "wide-int.h" 1043)
+                                                          nil )
+                                                        )
+                                                        nil 2047 nil nil )
+                                                       (!srcfileloc  "wide-int.h" 322)
+                                                       nil )
+                                                     )
+                                                    )
+                                                   )
+                                                   (!srcfileloc  "dwarf2out.h" 214)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_wide_int")
+                                                   )
+                                                  )
+                                                  (!pair  "val_vec"
+                                                   (!type struct 499 nil  gc_used "dw_vec_const"
+                                                    (!srcfileloc  "dwarf2out.h" 215)
+                                                    (!fields 3 
+                                                     (!pair  "array"
+                                                      (!type already_seen 3)
+                                                      (!srcfileloc  "dwarf2out.h" 171)
+                                                      (!options 
+                                                       (!option atomic string  "")
+                                                      )
+                                                     )
+                                                     (!pair  "length"
+                                                      (!type already_seen 2)
+                                                      (!srcfileloc  "dwarf2out.h" 172)
+                                                      nil )
+                                                     (!pair  "elt_size"
+                                                      (!type already_seen 2)
+                                                      (!srcfileloc  "dwarf2out.h" 173)
+                                                      nil )
+                                                    )
+                                                    nil 2047 nil nil )
+                                                   (!srcfileloc  "dwarf2out.h" 215)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_vec")
+                                                   )
+                                                  )
+                                                  (!pair  "val_die_ref"
+                                                   (!type struct 500 nil  gc_used "dw_val_die_union"
+                                                    (!srcfileloc  "dwarf2out.h" 220)
+                                                    (!fields 2 
+                                                     (!pair  "die"
+                                                      (!type already_seen 486)
+                                                      (!srcfileloc  "dwarf2out.h" 218)
+                                                      nil )
+                                                     (!pair  "external"
+                                                      (!type already_seen 2)
+                                                      (!srcfileloc  "dwarf2out.h" 219)
+                                                      nil )
+                                                    )
+                                                    nil 2047 nil nil )
+                                                   (!srcfileloc  "dwarf2out.h" 220)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_die_ref")
+                                                   )
+                                                  )
+                                                  (!pair  "val_fde_index"
+                                                   (!type already_seen 2)
+                                                   (!srcfileloc  "dwarf2out.h" 221)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_fde_ref")
+                                                   )
+                                                  )
+                                                  (!pair  "val_str"
+                                                   (!type pointer 501 nil  gc_used
+                                                    (!type struct 502 
+                                                     (!type already_seen 501)
+                                                     gc_pointed_to "indirect_string_node"
+                                                     (!srcfileloc  "dwarf2out.c" 221)
+                                                     (!fields 5 
+                                                      (!pair  "str"
+                                                       (!type already_seen 11)
+                                                       (!srcfileloc  "dwarf2out.c" 216)
+                                                       nil )
+                                                      (!pair  "refcount"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 217)
+                                                       nil )
+                                                      (!pair  "form"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 218)
+                                                       nil )
+                                                      (!pair  "label"
+                                                       (!type already_seen 11)
+                                                       (!srcfileloc  "dwarf2out.c" 219)
+                                                       nil )
+                                                      (!pair  "index"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 220)
+                                                       nil )
+                                                     )
+                                                     (!options 
+                                                      (!option for_user string  "")
+                                                     )
+                                                     2047 nil nil )
+                                                   )
+                                                   (!srcfileloc  "dwarf2out.h" 222)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_str")
+                                                   )
+                                                  )
+                                                  (!pair  "val_lbl_id"
+                                                   (!type already_seen 11)
+                                                   (!srcfileloc  "dwarf2out.h" 223)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_lbl_id")
+                                                   )
+                                                  )
+                                                  (!pair  "val_flag"
+                                                   (!type already_seen 8)
+                                                   (!srcfileloc  "dwarf2out.h" 224)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_flag")
+                                                   )
+                                                  )
+                                                  (!pair  "val_file"
+                                                   (!type pointer 503 nil  gc_used
+                                                    (!type struct 504 
+                                                     (!type already_seen 503)
+                                                     gc_pointed_to "dwarf_file_data"
+                                                     (!srcfileloc  "dwarf2out.c" 1275)
+                                                     (!fields 2 
+                                                      (!pair  "filename"
+                                                       (!type already_seen 11)
+                                                       (!srcfileloc  "dwarf2out.c" 1273)
+                                                       nil )
+                                                      (!pair  "emitted_number"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.c" 1274)
+                                                       nil )
+                                                     )
+                                                     (!options 
+                                                      (!option for_user string  "")
+                                                     )
+                                                     2047 nil nil )
+                                                   )
+                                                   (!srcfileloc  "dwarf2out.h" 225)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_file")
+                                                   )
+                                                  )
+                                                  (!pair  "val_file_implicit"
+                                                   (!type already_seen 503)
+                                                   (!srcfileloc  "dwarf2out.h" 227)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_file_implicit")
+                                                   )
+                                                  )
+                                                  (!pair  "val_data8"
+                                                   (!type array 505 nil  gc_used "8" 
+                                                    (!type already_seen 8)
+                                                   )
+                                                   (!srcfileloc  "dwarf2out.h" 228)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_data8")
+                                                   )
+                                                  )
+                                                  (!pair  "val_decl_ref"
+                                                   (!type already_seen 23)
+                                                   (!srcfileloc  "dwarf2out.h" 229)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_decl_ref")
+                                                   )
+                                                  )
+                                                  (!pair  "val_vms_delta"
+                                                   (!type struct 506 nil  gc_used "dw_val_vms_delta_union"
+                                                    (!srcfileloc  "dwarf2out.h" 234)
+                                                    (!fields 2 
+                                                     (!pair  "lbl1"
+                                                      (!type already_seen 11)
+                                                      (!srcfileloc  "dwarf2out.h" 232)
+                                                      nil )
+                                                     (!pair  "lbl2"
+                                                      (!type already_seen 11)
+                                                      (!srcfileloc  "dwarf2out.h" 233)
+                                                      nil )
+                                                    )
+                                                    nil 2047 nil nil )
+                                                   (!srcfileloc  "dwarf2out.h" 234)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_vms_delta")
+                                                   )
+                                                  )
+                                                  (!pair  "val_discr_value"
+                                                   (!type struct 507 nil  gc_used "dw_discr_value"
+                                                    (!srcfileloc  "dwarf2out.h" 235)
+                                                    (!fields 2 
+                                                     (!pair  "pos"
+                                                      (!type already_seen 2)
+                                                      (!srcfileloc  "dwarf2out.h" 186)
+                                                      nil )
+                                                     (!pair  "v"
+                                                      (!type union 508 nil  gc_used "anonymous:../../linaro/gcc/dwarf2out.h:188"
+                                                       (!srcfileloc  "dwarf2out.h" 191)
+                                                       (!fields 2 
+                                                        (!pair  "sval"
+                                                         (!type already_seen 2)
+                                                         (!srcfileloc  "dwarf2out.h" 189)
+                                                         (!options 
+                                                          (!option tag string  "0")
+                                                         )
+                                                        )
+                                                        (!pair  "uval"
+                                                         (!type already_seen 2)
+                                                         (!srcfileloc  "dwarf2out.h" 190)
+                                                         (!options 
+                                                          (!option tag string  "1")
+                                                         )
+                                                        )
+                                                       )
+                                                       nil 2047 nil )
+                                                      (!srcfileloc  "dwarf2out.h" 192)
+                                                      (!options 
+                                                       (!option desc string  "%1.pos")
+                                                      )
+                                                     )
+                                                    )
+                                                    nil 2047 nil nil )
+                                                   (!srcfileloc  "dwarf2out.h" 235)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_discr_value")
+                                                   )
+                                                  )
+                                                  (!pair  "val_discr_list"
+                                                   (!type pointer 509 nil  gc_used
+                                                    (!type struct 510 
+                                                     (!type already_seen 509)
+                                                     gc_pointed_to "dw_discr_list_node"
+                                                     (!srcfileloc  "dwarf2out.h" 273)
+                                                     (!fields 4 
+                                                      (!pair  "dw_discr_next"
+                                                       (!type already_seen 509)
+                                                       (!srcfileloc  "dwarf2out.h" 265)
+                                                       nil )
+                                                      (!pair  "dw_discr_lower_bound"
+                                                       (!type already_seen 507)
+                                                       (!srcfileloc  "dwarf2out.h" 267)
+                                                       nil )
+                                                      (!pair  "dw_discr_upper_bound"
+                                                       (!type already_seen 507)
+                                                       (!srcfileloc  "dwarf2out.h" 268)
+                                                       nil )
+                                                      (!pair  "dw_discr_range"
+                                                       (!type already_seen 2)
+                                                       (!srcfileloc  "dwarf2out.h" 272)
+                                                       nil )
+                                                     )
+                                                     nil 2047 nil nil )
+                                                   )
+                                                   (!srcfileloc  "dwarf2out.h" 236)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_discr_list")
+                                                   )
+                                                  )
+                                                  (!pair  "val_symbolic_view"
+                                                   (!type already_seen 11)
+                                                   (!srcfileloc  "dwarf2out.h" 237)
+                                                   (!options 
+                                                    (!option tag string  "dw_val_class_symview")
+                                                   )
+                                                  )
+                                                 )
+                                                 nil 2047 nil )
+                                                (!srcfileloc  "dwarf2out.h" 239)
+                                                (!options 
+                                                 (!option desc string  "%1.val_class")
+                                                )
+                                               )
+                                              )
+                                              nil 2047 nil nil )
+                                             (!srcfileloc  "dwarf2out.h" 256)
+                                             nil )
+                                            (!pair  "dw_loc_oprnd2"
+                                             (!type already_seen 478)
+                                             (!srcfileloc  "dwarf2out.h" 257)
+                                             nil )
+                                           )
+                                           (!options 
+                                            (!option chain_next string  "%h.dw_loc_next")
+                                           )
+                                           2047 nil nil )
+                                         )
+                                         (!srcfileloc  "dwarf2out.h" 54)
+                                         (!options 
+                                          (!option tag string  "dw_cfi_oprnd_loc")
+                                         )
+                                        )
+                                        (!pair  "dw_cfi_cfa_loc"
+                                         (!type pointer 511 nil  gc_used
+                                          (!type struct 512 
+                                           (!type already_seen 511)
+                                           gc_pointed_to "dw_cfa_location"
+                                           (!srcfileloc  "dwarf2cfi.c" 66)
+                                           (!fields 5 
+                                            (!pair  "offset"
+                                             (!type already_seen 2)
+                                             (!srcfileloc  "dwarf2out.h" 120)
+                                             nil )
+                                            (!pair  "base_offset"
+                                             (!type already_seen 2)
+                                             (!srcfileloc  "dwarf2out.h" 121)
+                                             nil )
+                                            (!pair  "reg"
+                                             (!type already_seen 2)
+                                             (!srcfileloc  "dwarf2out.h" 123)
+                                             nil )
+                                            (!pair  "indirect"
+                                             (!type already_seen 2)
+                                             (!srcfileloc  "dwarf2out.h" 124)
+                                             nil )
+                                            (!pair  "in_use"
+                                             (!type already_seen 2)
+                                             (!srcfileloc  "dwarf2out.h" 125)
+                                             nil )
+                                           )
+                                           nil 2047 nil nil )
+                                         )
+                                         (!srcfileloc  "dwarf2out.h" 56)
+                                         (!options 
+                                          (!option tag string  "dw_cfi_oprnd_cfa_loc")
+                                         )
+                                        )
+                                       )
+                                       nil 2047 nil )
+                                      (!srcfileloc  "dwarf2out.h" 62)
+                                      (!options 
+                                       (!option desc string  "dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")
+                                      )
+                                     )
+                                     (!pair  "dw_cfi_oprnd2"
+                                      (!type already_seen 475)
+                                      (!srcfileloc  "dwarf2out.h" 64)
+                                      (!options 
+                                       (!option desc string  "dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")
+                                      )
+                                     )
+                                    )
+                                    nil 2047 nil nil )
+                                  )
+                                  (!srcfileloc  "dwarf2out.h" 68)
+                                  nil )
+                                )
+                               )
+                              )
+                              (!srcfileloc  "dwarf2out.h" 87)
+                              nil )
+                             (!pair  "dw_fde_switch_cfi_index"
+                              (!type already_seen 2)
+                              (!srcfileloc  "dwarf2out.h" 88)
+                              nil )
+                             (!pair  "stack_realignment"
+                              (!type already_seen 2)
+                              (!srcfileloc  "dwarf2out.h" 89)
+                              nil )
+                             (!pair  "funcdef_number"
+                              (!type already_seen 2)
+                              (!srcfileloc  "dwarf2out.h" 91)
+                              nil )
+                             (!pair  "fde_index"
+                              (!type already_seen 2)
+                              (!srcfileloc  "dwarf2out.h" 92)
+                              nil )
+                             (!pair  "drap_reg"
+                              (!type already_seen 2)
+                              (!srcfileloc  "dwarf2out.h" 95)
+                              nil )
+                             (!pair  "vdrap_reg"
+                              (!type already_seen 2)
+                              (!srcfileloc  "dwarf2out.h" 97)
+                              nil )
+                             (!pair  "all_throwers_are_sibcalls"
+                              (!type already_seen 2)
+                              (!srcfileloc  "dwarf2out.h" 99)
+                              nil )
+                             (!pair  "uses_eh_lsda"
+                              (!type already_seen 2)
+                              (!srcfileloc  "dwarf2out.h" 100)
+                              nil )
+                             (!pair  "nothrow"
+                              (!type already_seen 2)
+                              (!srcfileloc  "dwarf2out.h" 101)
+                              nil )
+                             (!pair  "stack_realign"
+                              (!type already_seen 2)
+                              (!srcfileloc  "dwarf2out.h" 103)
+                              nil )
+                             (!pair  "drap_reg_saved"
+                              (!type already_seen 2)
+                              (!srcfileloc  "dwarf2out.h" 105)
+                              nil )
+                             (!pair  "in_std_section"
+                              (!type already_seen 2)
+                              (!srcfileloc  "dwarf2out.h" 107)
+                              nil )
+                             (!pair  "second_in_std_section"
+                              (!type already_seen 2)
+                              (!srcfileloc  "dwarf2out.h" 110)
+                              nil )
+                            )
+                            nil 2047 nil nil )
+                          )
+                          (!srcfileloc  "function.h" 280)
+                          nil )
+                         (!pair  "last_stmt_uid"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 283)
+                          nil )
+                         (!pair  "debug_marker_count"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 289)
+                          nil )
+                         (!pair  "funcdef_no"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 292)
+                          nil )
+                         (!pair  "function_start_locus"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 295)
+                          nil )
+                         (!pair  "function_end_locus"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 298)
+                          nil )
+                         (!pair  "curr_properties"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 301)
+                          nil )
+                         (!pair  "last_verified"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 302)
+                          nil )
+                         (!pair  "cannot_be_copied_reason"
+                          (!type already_seen 11)
+                          (!srcfileloc  "function.h" 307)
+                          (!options 
+                           (!option skip string  "")
+                          )
+                         )
+                         (!pair  "last_clique"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 310)
+                          nil )
+                         (!pair  "va_list_gpr_size"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 317)
+                          nil )
+                         (!pair  "va_list_fpr_size"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 321)
+                          nil )
+                         (!pair  "calls_setjmp"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 324)
+                          nil )
+                         (!pair  "calls_alloca"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 328)
+                          nil )
+                         (!pair  "has_nonlocal_label"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 332)
+                          nil )
+                         (!pair  "has_forced_label_in_static"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 336)
+                          nil )
+                         (!pair  "cannot_be_copied_set"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 341)
+                          nil )
+                         (!pair  "stdarg"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 344)
+                          nil )
+                         (!pair  "after_inlining"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 346)
+                          nil )
+                         (!pair  "always_inline_functions_inlined"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 347)
+                          nil )
+                         (!pair  "can_throw_non_call_exceptions"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 351)
+                          nil )
+                         (!pair  "can_delete_dead_exceptions"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 355)
+                          nil )
+                         (!pair  "returns_struct"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 362)
+                          nil )
+                         (!pair  "returns_pcc_struct"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 366)
+                          nil )
+                         (!pair  "has_local_explicit_reg_vars"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 370)
+                          nil )
+                         (!pair  "is_thunk"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 376)
+                          nil )
+                         (!pair  "has_force_vectorize_loops"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 380)
+                          nil )
+                         (!pair  "has_simduid_loops"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 384)
+                          nil )
+                         (!pair  "tail_call_marked"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 387)
+                          nil )
+                         (!pair  "has_unroll"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 390)
+                          nil )
+                         (!pair  "debug_nonbind_markers"
+                          (!type already_seen 2)
+                          (!srcfileloc  "function.h" 394)
+                          nil )
+                        )
+                        nil 2047 nil nil )
+                      )
+                      (!srcfileloc  "tree-core.h" 1800)
+                      nil )
+                     (!pair  "arguments"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1803)
+                      nil )
+                     (!pair  "personality"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1805)
+                      nil )
+                     (!pair  "function_specific_target"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1808)
+                      nil )
+                     (!pair  "function_specific_optimization"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1809)
+                      nil )
+                     (!pair  "saved_tree"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1812)
+                      nil )
+                     (!pair  "vindex"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1814)
+                      nil )
+                     (!pair  "function_code"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1820)
+                      nil )
+                     (!pair  "built_in_class"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1821)
+                      nil )
+                     (!pair  "static_ctor_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1823)
+                      nil )
+                     (!pair  "static_dtor_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1824)
+                      nil )
+                     (!pair  "uninlinable"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1826)
+                      nil )
+                     (!pair  "possibly_inlined"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1827)
+                      nil )
+                     (!pair  "novops_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1828)
+                      nil )
+                     (!pair  "returns_twice_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1829)
+                      nil )
+                     (!pair  "malloc_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1830)
+                      nil )
+                     (!pair  "operator_new_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1831)
+                      nil )
+                     (!pair  "declared_inline_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1832)
+                      nil )
+                     (!pair  "no_inline_warning_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1833)
+                      nil )
+                     (!pair  "no_instrument_function_entry_exit"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1835)
+                      nil )
+                     (!pair  "no_limit_stack"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1836)
+                      nil )
+                     (!pair  "disregard_inline_limits"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1837)
+                      nil )
+                     (!pair  "pure_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1838)
+                      nil )
+                     (!pair  "looping_const_or_pure_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1839)
+                      nil )
+                     (!pair  "has_debug_args_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1840)
+                      nil )
+                     (!pair  "versioned_function"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1841)
+                      nil )
+                     (!pair  "lambda_function"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1842)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1936)
+                   (!options 
+                    (!option tag string  "TS_FUNCTION_DECL")
+                   )
+                  )
+                  (!pair  "translation_unit_decl"
+                   (!type struct 513 nil  gc_used "tree_translation_unit_decl"
+                    (!srcfileloc  "tree-core.h" 1852)
+                    (!fields 2 
+                     (!pair  "common"
+                      (!type already_seen 53)
+                      (!srcfileloc  "tree-core.h" 1847)
+                      nil )
+                     (!pair  "language"
+                      (!type already_seen 11)
+                      (!srcfileloc  "tree-core.h" 1849)
+                      (!options 
+                       (!option skip string  "")
+                      )
+                     )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1938)
+                   (!options 
+                    (!option tag string  "TS_TRANSLATION_UNIT_DECL")
+                   )
+                  )
+                  (!pair  "type_common"
+                   (!type struct 514 nil  gc_used "tree_type_common"
+                    (!srcfileloc  "tree-core.h" 1601)
+                    (!fields 35 
+                     (!pair  "common"
+                      (!type already_seen 32)
+                      (!srcfileloc  "tree-core.h" 1553)
+                      nil )
+                     (!pair  "size"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1554)
+                      nil )
+                     (!pair  "size_unit"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1555)
+                      nil )
+                     (!pair  "attributes"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1556)
+                      nil )
+                     (!pair  "uid"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1557)
+                      nil )
+                     (!pair  "precision"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1559)
+                      nil )
+                     (!pair  "no_force_blk_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1560)
+                      nil )
+                     (!pair  "needs_constructing_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1561)
+                      nil )
+                     (!pair  "transparent_aggr_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1562)
+                      nil )
+                     (!pair  "restrict_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1563)
+                      nil )
+                     (!pair  "contains_placeholder_bits"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1564)
+                      nil )
+                     (!pair  "mode"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1566)
+                      nil )
+                     (!pair  "string_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1568)
+                      nil )
+                     (!pair  "lang_flag_0"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1569)
+                      nil )
+                     (!pair  "lang_flag_1"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1570)
+                      nil )
+                     (!pair  "lang_flag_2"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1571)
+                      nil )
+                     (!pair  "lang_flag_3"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1572)
+                      nil )
+                     (!pair  "lang_flag_4"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1573)
+                      nil )
+                     (!pair  "lang_flag_5"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1574)
+                      nil )
+                     (!pair  "lang_flag_6"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1575)
+                      nil )
+                     (!pair  "lang_flag_7"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1576)
+                      nil )
+                     (!pair  "align"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1583)
+                      nil )
+                     (!pair  "warn_if_not_align"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1584)
+                      nil )
+                     (!pair  "typeless_storage"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1585)
+                      nil )
+                     (!pair  "empty_flag"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1586)
+                      nil )
+                     (!pair  "spare"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1587)
+                      nil )
+                     (!pair  "alias_set"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1589)
+                      nil )
+                     (!pair  "pointer_to"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1590)
+                      nil )
+                     (!pair  "reference_to"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1591)
+                      nil )
+                     (!pair  "symtab"
+                      (!type union 515 nil  gc_used "tree_type_symtab"
+                       (!srcfileloc  "tree-core.h" 1595)
+                       (!fields 2 
+                        (!pair  "address"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1593)
+                         (!options 
+                          (!option tag string  "TYPE_SYMTAB_IS_ADDRESS")
+                         )
+                        )
+                        (!pair  "die"
+                         (!type already_seen 486)
+                         (!srcfileloc  "tree-core.h" 1594)
+                         (!options 
+                          (!option tag string  "TYPE_SYMTAB_IS_DIE")
+                         )
+                        )
+                       )
+                       nil 2047 nil )
+                      (!srcfileloc  "tree-core.h" 1595)
+                      (!options 
+                       (!option desc string  "debug_hooks->tree_type_symtab_field")
+                      )
+                     )
+                     (!pair  "canonical"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1596)
+                      nil )
+                     (!pair  "next_variant"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1597)
+                      nil )
+                     (!pair  "main_variant"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1598)
+                      nil )
+                     (!pair  "context"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1599)
+                      nil )
+                     (!pair  "name"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1600)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1939)
+                   (!options 
+                    (!option tag string  "TS_TYPE_COMMON")
+                   )
+                  )
+                  (!pair  "type_with_lang_specific"
+                   (!type struct 516 nil  gc_used "tree_type_with_lang_specific"
+                    (!srcfileloc  "tree-core.h" 1607)
+                    (!fields 2 
+                     (!pair  "common"
+                      (!type already_seen 514)
+                      (!srcfileloc  "tree-core.h" 1604)
+                      nil )
+                     (!pair  "lang_specific"
+                      (!type pointer 517 nil  gc_used
+                       (!type lang_struct 518 
+                        (!type already_seen 517)
+                        gc_pointed_to "lang_type"
+                        (!srcfileloc  "ada/gcc-interface/ada-tree.h" 36)
+                        (!fields 0 )
+                        nil 2047 
+                        (!homotypes 9
+                         (!type struct 519 nil  gc_pointed_to "lang_type"
+                          (!srcfileloc  "lto/lto-tree.h" 37)
+                          (!fields 1 
+                           (!pair  "dummy"
+                            (!type already_seen 2)
+                            (!srcfileloc  "lto/lto-tree.h" 36)
+                            nil )
+                          )
+                          nil 256 
+                          (!type already_seen 518)
+                          nil )
+                         
+                         (!type struct 520 nil  gc_pointed_to "lang_type"
+                          (!srcfileloc  "jit/dummy-frontend.c" 38)
+                          (!fields 1 
+                           (!pair  "dummy"
+                            (!type already_seen 8)
+                            (!srcfileloc  "jit/dummy-frontend.c" 37)
+                            nil )
+                          )
+                          nil 128 
+                          (!type already_seen 518)
+                          nil )
+                         
+                         (!type struct 521 nil  gc_pointed_to "lang_type"
+                          (!srcfileloc  "go/go-lang.c" 51)
+                          (!fields 1 
+                           (!pair  "dummy"
+                            (!type already_seen 8)
+                            (!srcfileloc  "go/go-lang.c" 50)
+                            nil )
+                          )
+                          nil 64 
+                          (!type already_seen 518)
+                          nil )
+                         
+                         (!type struct 522 nil  gc_pointed_to "lang_type"
+                          (!srcfileloc  "fortran/trans.h" 967)
+                          (!fields 15 
+                           (!pair  "rank"
+                            (!type already_seen 2)
+                            (!srcfileloc  "fortran/trans.h" 953)
+                            nil )
+                           (!pair  "corank"
+                            (!type already_seen 2)
+                            (!srcfileloc  "fortran/trans.h" 953)
+                            nil )
+                           (!pair  "akind"
+                            (!type already_seen 2)
+                            (!srcfileloc  "fortran/trans.h" 954)
+                            nil )
+                           (!pair  "lbound"
+                            (!type array 523 nil  gc_used "GFC_MAX_DIMENSIONS" 
+                             (!type already_seen 23)
+                            )
+                            (!srcfileloc  "fortran/trans.h" 955)
+                            nil )
+                           (!pair  "ubound"
+                            (!type array 524 nil  gc_used "GFC_MAX_DIMENSIONS" 
+                             (!type already_seen 23)
+                            )
+                            (!srcfileloc  "fortran/trans.h" 956)
+                            nil )
+                           (!pair  "stride"
+                            (!type array 525 nil  gc_used "GFC_MAX_DIMENSIONS" 
+                             (!type already_seen 23)
+                            )
+                            (!srcfileloc  "fortran/trans.h" 957)
+                            nil )
+                           (!pair  "size"
+                            (!type already_seen 23)
+                            (!srcfileloc  "fortran/trans.h" 958)
+                            nil )
+                           (!pair  "offset"
+                            (!type already_seen 23)
+                            (!srcfileloc  "fortran/trans.h" 959)
+                            nil )
+                           (!pair  "dtype"
+                            (!type already_seen 23)
+                            (!srcfileloc  "fortran/trans.h" 960)
+                            nil )
+                           (!pair  "dataptr_type"
+                            (!type already_seen 23)
+                            (!srcfileloc  "fortran/trans.h" 961)
+                            nil )
+                           (!pair  "span"
+                            (!type already_seen 23)
+                            (!srcfileloc  "fortran/trans.h" 962)
+                            nil )
+                           (!pair  "base_decl"
+                            (!type array 526 nil  gc_used "2" 
+                             (!type already_seen 23)
+                            )
+                            (!srcfileloc  "fortran/trans.h" 963)
+                            nil )
+                           (!pair  "nonrestricted_type"
+                            (!type already_seen 23)
+                            (!srcfileloc  "fortran/trans.h" 964)
+                            nil )
+                           (!pair  "caf_token"
+                            (!type already_seen 23)
+                            (!srcfileloc  "fortran/trans.h" 965)
+                            nil )
+                           (!pair  "caf_offset"
+                            (!type already_seen 23)
+                            (!srcfileloc  "fortran/trans.h" 966)
+                            nil )
+                          )
+                          nil 32 
+                          (!type already_seen 518)
+                          nil )
+                         
+                         (!type struct 527 nil  gc_pointed_to "lang_type"
+                          (!srcfileloc  "d/d-tree.h" 309)
+                          (!fields 1 
+                           (!pair  "type"
+                            (!type pointer 528 nil  gc_unused
+                             (!type struct 529 
+                              (!type already_seen 528)
+                              gc_unused "Type"
+                              (!srcfileloc  "d/d-tree.h" 308)
+                              (!fields 0 )
+                              nil 16 nil nil )
+                            )
+                            (!srcfileloc  "d/d-tree.h" 308)
+                            (!options 
+                             (!option skip string  "")
+                            )
+                           )
+                          )
+                          nil 16 
+                          (!type already_seen 518)
+                          nil )
+                         
+                         (!type struct 530 nil  gc_pointed_to "lang_type"
+                          (!srcfileloc  "cp/cp-tree.h" 2136)
+                          (!fields 67 
+                           (!pair  "align"
+                            (!type already_seen 8)
+                            (!srcfileloc  "cp/cp-tree.h" 2048)
+                            nil )
+                           (!pair  "has_type_conversion"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2050)
+                            nil )
+                           (!pair  "has_copy_ctor"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2051)
+                            nil )
+                           (!pair  "has_default_ctor"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2052)
+                            nil )
+                           (!pair  "const_needs_init"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2053)
+                            nil )
+                           (!pair  "ref_needs_init"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2054)
+                            nil )
+                           (!pair  "has_const_copy_assign"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2055)
+                            nil )
+                           (!pair  "use_template"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2056)
+                            nil )
+                           (!pair  "has_mutable"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2058)
+                            nil )
+                           (!pair  "com_interface"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2059)
+                            nil )
+                           (!pair  "non_pod_class"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2060)
+                            nil )
+                           (!pair  "nearly_empty_p"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2061)
+                            nil )
+                           (!pair  "user_align"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2062)
+                            nil )
+                           (!pair  "has_copy_assign"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2063)
+                            nil )
+                           (!pair  "has_new"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2064)
+                            nil )
+                           (!pair  "has_array_new"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2065)
+                            nil )
+                           (!pair  "gets_delete"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2067)
+                            nil )
+                           (!pair  "interface_only"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2068)
+                            nil )
+                           (!pair  "interface_unknown"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2069)
+                            nil )
+                           (!pair  "contains_empty_class_p"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2070)
+                            nil )
+                           (!pair  "anon_aggr"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2071)
+                            nil )
+                           (!pair  "non_zero_init"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2072)
+                            nil )
+                           (!pair  "empty_p"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2073)
+                            nil )
+                           (!pair  "vec_new_uses_cookie"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2076)
+                            nil )
+                           (!pair  "declared_class"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2077)
+                            nil )
+                           (!pair  "diamond_shaped"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2078)
+                            nil )
+                           (!pair  "repeated_base"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2079)
+                            nil )
+                           (!pair  "being_defined"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2080)
+                            nil )
+                           (!pair  "debug_requested"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2081)
+                            nil )
+                           (!pair  "fields_readonly"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2082)
+                            nil )
+                           (!pair  "ptrmemfunc_flag"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2083)
+                            nil )
+                           (!pair  "was_anonymous"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2085)
+                            nil )
+                           (!pair  "lazy_default_ctor"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2086)
+                            nil )
+                           (!pair  "lazy_copy_ctor"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2087)
+                            nil )
+                           (!pair  "lazy_copy_assign"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2088)
+                            nil )
+                           (!pair  "lazy_destructor"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2089)
+                            nil )
+                           (!pair  "has_const_copy_ctor"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2090)
+                            nil )
+                           (!pair  "has_complex_copy_ctor"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2091)
+                            nil )
+                           (!pair  "has_complex_copy_assign"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2092)
+                            nil )
+                           (!pair  "non_aggregate"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2094)
+                            nil )
+                           (!pair  "has_complex_dflt"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2095)
+                            nil )
+                           (!pair  "has_list_ctor"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2096)
+                            nil )
+                           (!pair  "non_std_layout"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2097)
+                            nil )
+                           (!pair  "is_literal"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2098)
+                            nil )
+                           (!pair  "lazy_move_ctor"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2099)
+                            nil )
+                           (!pair  "lazy_move_assign"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2100)
+                            nil )
+                           (!pair  "has_complex_move_ctor"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2101)
+                            nil )
+                           (!pair  "has_complex_move_assign"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2103)
+                            nil )
+                           (!pair  "has_constexpr_ctor"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2104)
+                            nil )
+                           (!pair  "unique_obj_representations"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2105)
+                            nil )
+                           (!pair  "unique_obj_representations_set"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2106)
+                            nil )
+                           (!pair  "dummy"
+                            (!type already_seen 2)
+                            (!srcfileloc  "cp/cp-tree.h" 2115)
+                            nil )
+                           (!pair  "primary_base"
+                            (!type already_seen 23)
+                            (!srcfileloc  "cp/cp-tree.h" 2117)
+                            nil )
+                           (!pair  "vcall_indices"
+                            (!type pointer 531 nil  gc_used
+                             (!type user_struct 532 
+                              (!type already_seen 531)
+                              gc_pointed_to "vec<tree_pair_s,va_gc>"
+                              (!srcfileloc  "cp/cp-tree.h" 2118)
+                              (!fields 2 
+                               (!pair  "va_gc"
+                                (!type already_seen 79)
+                                (!srcfileloc  "cp/cp-tree.h" 2118)
+                                nil )
+                               (!pair  "tree_pair_s"
+                                (!type struct 533 
+                                 (!type pointer 534 nil  gc_unused
+                                  (!type already_seen 533)
+                                 )
+                                 gc_used "tree_pair_s"
+                                 (!srcfileloc  "cp/cp-tree.h" 2032)
+                                 (!fields 2 
+                                  (!pair  "purpose"
+                                   (!type already_seen 23)
+                                   (!srcfileloc  "cp/cp-tree.h" 2029)
+                                   nil )
+                                  (!pair  "value"
+                                   (!type already_seen 23)
+                                   (!srcfileloc  "cp/cp-tree.h" 2030)
+                                   nil )
+                                 )
+                                 nil 1032 nil nil )
+                                (!srcfileloc  "cp/cp-tree.h" 2118)
+                                nil )
+                              )
+                             )
+                            )
+                            (!srcfileloc  "cp/cp-tree.h" 2118)
+                            nil )
+                           (!pair  "vtables"
+                            (!type already_seen 23)
+                            (!srcfileloc  "cp/cp-tree.h" 2119)
+                            nil )
+                           (!pair  "typeinfo_var"
+                            (!type already_seen 23)
+                            (!srcfileloc  "cp/cp-tree.h" 2120)
+                            nil )
+                           (!pair  "vbases"
+                            (!type already_seen 96)
+                            (!srcfileloc  "cp/cp-tree.h" 2121)
+                            nil )
+                           (!pair  "nested_udts"
+                            (!type pointer 535 nil  gc_used
+                             (!type struct 536 
+                              (!type already_seen 535)
+                              gc_pointed_to "binding_table_s"
+                              (!srcfileloc  "cp/name-lookup.c" 1808)
+                              (!fields 3 
+                               (!pair  "chain"
+                                (!type pointer 537 nil  gc_unused
+                                 (!type pointer 538 
+                                  (!type already_seen 537)
+                                  gc_used
+                                  (!type struct 539 
+                                   (!type already_seen 538)
+                                   gc_pointed_to "binding_entry_s"
+                                   (!srcfileloc  "cp/name-lookup.h" 38)
+                                   (!fields 3 
+                                    (!pair  "chain"
+                                     (!type already_seen 538)
+                                     (!srcfileloc  "cp/name-lookup.h" 35)
+                                     nil )
+                                    (!pair  "name"
+                                     (!type already_seen 23)
+                                     (!srcfileloc  "cp/name-lookup.h" 36)
+                                     nil )
+                                    (!pair  "type"
+                                     (!type already_seen 23)
+                                     (!srcfileloc  "cp/name-lookup.h" 37)
+                                     nil )
+                                   )
+                                   nil 1032 nil nil )
+                                 )
+                                )
+                                (!srcfileloc  "cp/name-lookup.c" 1800)
+                                (!options 
+                                 (!option length string  "%h.chain_count")
+                                )
+                               )
+                               (!pair  "chain_count"
+                                (!type already_seen 2)
+                                (!srcfileloc  "cp/name-lookup.c" 1804)
+                                nil )
+                               (!pair  "entry_count"
+                                (!type already_seen 2)
+                                (!srcfileloc  "cp/name-lookup.c" 1807)
+                                nil )
+                              )
+                              nil 1032 nil nil )
+                            )
+                            (!srcfileloc  "cp/cp-tree.h" 2122)
+                            nil )
+                           (!pair  "as_base"
+                            (!type already_seen 23)
+                            (!srcfileloc  "cp/cp-tree.h" 2123)
+                            nil )
+                           (!pair  "pure_virtuals"
+                            (!type already_seen 96)
+                            (!srcfileloc  "cp/cp-tree.h" 2124)
+                            nil )
+                           (!pair  "friend_classes"
+                            (!type already_seen 23)
+                            (!srcfileloc  "cp/cp-tree.h" 2125)
+                            nil )
+                           (!pair  "members"
+                            (!type already_seen 96)
+                            (!srcfileloc  "cp/cp-tree.h" 2126)
+                            (!options 
+                             (!option reorder string  "resort_type_member_vec")
+                            )
+                           )
+                           (!pair  "key_method"
+                            (!type already_seen 23)
+                            (!srcfileloc  "cp/cp-tree.h" 2127)
+                            nil )
+                           (!pair  "decl_list"
+                            (!type already_seen 23)
+                            (!srcfileloc  "cp/cp-tree.h" 2128)
+                            nil )
+                           (!pair  "befriending_classes"
+                            (!type already_seen 23)
+                            (!srcfileloc  "cp/cp-tree.h" 2129)
+                            nil )
+                           (!pair  "objc_info"
+                            (!type already_seen 23)
+                            (!srcfileloc  "cp/cp-tree.h" 2133)
+                            nil )
+                           (!pair  "lambda_expr"
+                            (!type already_seen 23)
+                            (!srcfileloc  "cp/cp-tree.h" 2135)
+                            nil )
+                          )
+                          nil 1032 
+                          (!type already_seen 518)
+                          nil )
+                         
+                         (!type struct 540 nil  gc_pointed_to "lang_type"
+                          (!srcfileloc  "c/c-lang.h" 42)
+                          (!fields 4 
+                           (!pair  "s"
+                            (!type pointer 541 nil  gc_used
+                             (!type struct 542 
+                              (!type already_seen 541)
+                              gc_pointed_to "sorted_fields_type"
+                              (!srcfileloc  "c/c-lang.h" 30)
+                              (!fields 2 
+                               (!pair  "len"
+                                (!type already_seen 2)
+                                (!srcfileloc  "c/c-lang.h" 28)
+                                nil )
+                               (!pair  "elts"
+                                (!type array 543 nil  gc_used "1" 
+                                 (!type already_seen 23)
+                                )
+                                (!srcfileloc  "c/c-lang.h" 29)
+                                (!options 
+                                 (!option length string  "%h.len")
+                                )
+                               )
+                              )
+                              nil 516 nil nil )
+                            )
+                            (!srcfileloc  "c/c-lang.h" 34)
+                            (!options 
+                             (!option reorder string  "resort_sorted_fields")
+                            )
+                           )
+                           (!pair  "enum_min"
+                            (!type already_seen 23)
+                            (!srcfileloc  "c/c-lang.h" 36)
+                            nil )
+                           (!pair  "enum_max"
+                            (!type already_seen 23)
+                            (!srcfileloc  "c/c-lang.h" 37)
+                            nil )
+                           (!pair  "objc_info"
+                            (!type already_seen 23)
+                            (!srcfileloc  "c/c-lang.h" 41)
+                            nil )
+                          )
+                          nil 516 
+                          (!type already_seen 518)
+                          nil )
+                         
+                         (!type struct 544 nil  gc_pointed_to "lang_type"
+                          (!srcfileloc  "brig/brig-lang.c" 71)
+                          (!fields 1 
+                           (!pair  "dummy"
+                            (!type already_seen 8)
+                            (!srcfileloc  "brig/brig-lang.c" 70)
+                            nil )
+                          )
+                          nil 2 
+                          (!type already_seen 518)
+                          nil )
+                         
+                         (!type struct 545 nil  gc_pointed_to "lang_type"
+                          (!srcfileloc  "ada/gcc-interface/ada-tree.h" 36)
+                          (!fields 2 
+                           (!pair  "t1"
+                            (!type already_seen 23)
+                            (!srcfileloc  "ada/gcc-interface/ada-tree.h" 36)
+                            nil )
+                           (!pair  "t2"
+                            (!type already_seen 23)
+                            (!srcfileloc  "ada/gcc-interface/ada-tree.h" 36)
+                            nil )
+                          )
+                          nil 1 
+                          (!type already_seen 518)
+                          nil )
+                        )
+                       )
+                      )
+                      (!srcfileloc  "tree-core.h" 1606)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1941)
+                   (!options 
+                    (!option tag string  "TS_TYPE_WITH_LANG_SPECIFIC")
+                   )
+                  )
+                  (!pair  "type_non_common"
+                   (!type struct 546 nil  gc_used "tree_type_non_common"
+                    (!srcfileloc  "tree-core.h" 1615)
+                    (!fields 5 
+                     (!pair  "with_lang_specific"
+                      (!type already_seen 516)
+                      (!srcfileloc  "tree-core.h" 1610)
+                      nil )
+                     (!pair  "values"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1611)
+                      nil )
+                     (!pair  "minval"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1612)
+                      nil )
+                     (!pair  "maxval"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1613)
+                      nil )
+                     (!pair  "lang_1"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1614)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1943)
+                   (!options 
+                    (!option tag string  "TS_TYPE_NON_COMMON")
+                   )
+                  )
+                  (!pair  "list"
+                   (!type struct 547 nil  gc_used "tree_list"
+                    (!srcfileloc  "tree-core.h" 1397)
+                    (!fields 3 
+                     (!pair  "common"
+                      (!type already_seen 32)
+                      (!srcfileloc  "tree-core.h" 1394)
+                      nil )
+                     (!pair  "purpose"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1395)
+                      nil )
+                     (!pair  "value"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1396)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1944)
+                   (!options 
+                    (!option tag string  "TS_LIST")
+                   )
+                  )
+                  (!pair  "vec"
+                   (!type struct 548 nil  gc_used "tree_vec"
+                    (!srcfileloc  "tree-core.h" 1402)
+                    (!fields 2 
+                     (!pair  "common"
+                      (!type already_seen 32)
+                      (!srcfileloc  "tree-core.h" 1400)
+                      nil )
+                     (!pair  "a"
+                      (!type array 549 nil  gc_used "1" 
+                       (!type already_seen 23)
+                      )
+                      (!srcfileloc  "tree-core.h" 1401)
+                      (!options 
+                       (!option length string  "TREE_VEC_LENGTH ((tree)&%h)")
+                      )
+                     )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1945)
+                   (!options 
+                    (!option tag string  "TS_VEC")
+                   )
+                  )
+                  (!pair  "exp"
+                   (!type struct 550 nil  gc_used "tree_exp"
+                    (!srcfileloc  "tree-core.h" 1455)
+                    (!fields 3 
+                     (!pair  "typed"
+                      (!type already_seen 31)
+                      (!srcfileloc  "tree-core.h" 1450)
+                      nil )
+                     (!pair  "locus"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1451)
+                      nil )
+                     (!pair  "operands"
+                      (!type union 551 nil  gc_used "tree_exp_subunion"
+                       (!srcfileloc  "tree-core.h" 1454)
+                       (!fields 1 
+                        (!pair  ""
+                         (!type array 552 nil  gc_used "1" 
+                          (!type already_seen 23)
+                         )
+                         (!srcfileloc  "gengtype.c" 1393)
+                         (!options 
+                          (!option default string  "")
+                          (!option length string  "TREE_OPERAND_LENGTH ((tree) &%0)")
+                          (!option dot string  "")
+                         )
+                        )
+                       )
+                       (!options 
+                        (!option dot string  "")
+                       )
+                       2047 nil )
+                      (!srcfileloc  "tree-core.h" 1454)
+                      (!options 
+                       (!option desc string  "TREE_CODE ((tree) &%0)")
+                       (!option special string  "tree_exp")
+                      )
+                     )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1946)
+                   (!options 
+                    (!option tag string  "TS_EXP")
+                   )
+                  )
+                  (!pair  "ssa_name"
+                   (!type struct 553 nil  gc_used "tree_ssa_name"
+                    (!srcfileloc  "tree-core.h" 1491)
+                    (!fields 5 
+                     (!pair  "typed"
+                      (!type already_seen 31)
+                      (!srcfileloc  "tree-core.h" 1472)
+                      nil )
+                     (!pair  "var"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1475)
+                      nil )
+                     (!pair  "def_stmt"
+                      (!type already_seen 331)
+                      (!srcfileloc  "tree-core.h" 1478)
+                      nil )
+                     (!pair  "info"
+                      (!type union 554 nil  gc_used "ssa_name_info_type"
+                       (!srcfileloc  "tree-core.h" 1486)
+                       (!fields 2 
+                        (!pair  "ptr_info"
+                         (!type pointer 555 nil  gc_used
+                          (!type struct 556 
+                           (!type already_seen 555)
+                           gc_pointed_to "ptr_info_def"
+                           (!srcfileloc  "tree-ssanames.h" 46)
+                           (!fields 3 
+                            (!pair  "pt"
+                             (!type already_seen 440)
+                             (!srcfileloc  "tree-ssanames.h" 28)
+                             nil )
+                            (!pair  "align"
+                             (!type already_seen 2)
+                             (!srcfileloc  "tree-ssanames.h" 40)
+                             nil )
+                            (!pair  "misalign"
+                             (!type already_seen 2)
+                             (!srcfileloc  "tree-ssanames.h" 45)
+                             nil )
+                           )
+                           nil 2047 nil nil )
+                         )
+                         (!srcfileloc  "tree-core.h" 1483)
+                         (!options 
+                          (!option tag string  "0")
+                         )
+                        )
+                        (!pair  "range_info"
+                         (!type pointer 557 nil  gc_used
+                          (!type struct 558 
+                           (!type already_seen 557)
+                           gc_pointed_to "range_info_def"
+                           (!srcfileloc  "tree-ssanames.h" 56)
+                           (!fields 0 )
+                           (!options 
+                            (!option variable_size string  "")
+                           )
+                           2047 nil nil )
+                         )
+                         (!srcfileloc  "tree-core.h" 1485)
+                         (!options 
+                          (!option tag string  "1")
+                         )
+                        )
+                       )
+                       nil 2047 nil )
+                      (!srcfileloc  "tree-core.h" 1487)
+                      (!options 
+                       (!option desc string  "%1.typed.type ?!POINTER_TYPE_P (TREE_TYPE ((tree)&%1)) : 2")
+                      )
+                     )
+                     (!pair  "imm_uses"
+                      (!type struct 559 
+                       (!type pointer 560 nil  gc_unused
+                        (!type already_seen 559)
+                       )
+                       gc_used "ssa_use_operand_t"
+                       (!srcfileloc  "tree-ssa-operands.h" 30)
+                       (!fields 4 
+                        (!pair  "prev"
+                         (!type already_seen 560)
+                         (!srcfileloc  "tree-core.h" 1460)
+                         (!options 
+                          (!option skip string  "")
+                         )
+                        )
+                        (!pair  "next"
+                         (!type already_seen 560)
+                         (!srcfileloc  "tree-core.h" 1461)
+                         (!options 
+                          (!option skip string  "")
+                         )
+                        )
+                        (!pair  "loc"
+                         (!type union 561 nil  gc_unused "anonymous:../../linaro/gcc/tree-core.h:1467"
+                          (!srcfileloc  "tree-core.h" 1467)
+                          (!fields 2 
+                           (!pair  "stmt"
+                            (!type already_seen 331)
+                            (!srcfileloc  "tree-core.h" 1467)
+                            nil )
+                           (!pair  "ssa_name"
+                            (!type already_seen 23)
+                            (!srcfileloc  "tree-core.h" 1467)
+                            nil )
+                          )
+                          nil 2047 nil )
+                         (!srcfileloc  "tree-core.h" 1467)
+                         (!options 
+                          (!option skip string  "")
+                         )
+                        )
+                        (!pair  "use"
+                         (!type already_seen 24)
+                         (!srcfileloc  "tree-core.h" 1468)
+                         (!options 
+                          (!option skip string  "")
+                         )
+                        )
+                       )
+                       nil 2047 nil nil )
+                      (!srcfileloc  "tree-core.h" 1490)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1947)
+                   (!options 
+                    (!option tag string  "TS_SSA_NAME")
+                   )
+                  )
+                  (!pair  "block"
+                   (!type struct 562 nil  gc_used "tree_block"
+                    (!srcfileloc  "tree-core.h" 1550)
+                    (!fields 13 
+                     (!pair  "base"
+                      (!type already_seen 25)
+                      (!srcfileloc  "tree-core.h" 1531)
+                      nil )
+                     (!pair  "chain"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1532)
+                      nil )
+                     (!pair  "block_num"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1534)
+                      nil )
+                     (!pair  "locus"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1536)
+                      nil )
+                     (!pair  "end_locus"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1537)
+                      nil )
+                     (!pair  "vars"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1539)
+                      nil )
+                     (!pair  "nonlocalized_vars"
+                      (!type already_seen 96)
+                      (!srcfileloc  "tree-core.h" 1540)
+                      nil )
+                     (!pair  "subblocks"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1542)
+                      nil )
+                     (!pair  "supercontext"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1543)
+                      nil )
+                     (!pair  "abstract_origin"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1544)
+                      nil )
+                     (!pair  "fragment_origin"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1545)
+                      nil )
+                     (!pair  "fragment_chain"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1546)
+                      nil )
+                     (!pair  "die"
+                      (!type already_seen 486)
+                      (!srcfileloc  "tree-core.h" 1549)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1948)
+                   (!options 
+                    (!option tag string  "TS_BLOCK")
+                   )
+                  )
+                  (!pair  "binfo"
+                   (!type struct 563 nil  gc_used "tree_binfo"
+                    (!srcfileloc  "tree-core.h" 1631)
+                    (!fields 10 
+                     (!pair  "common"
+                      (!type already_seen 32)
+                      (!srcfileloc  "tree-core.h" 1618)
+                      nil )
+                     (!pair  "offset"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1620)
+                      nil )
+                     (!pair  "vtable"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1621)
+                      nil )
+                     (!pair  "virtuals"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1622)
+                      nil )
+                     (!pair  "vptr_field"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1623)
+                      nil )
+                     (!pair  "base_accesses"
+                      (!type already_seen 96)
+                      (!srcfileloc  "tree-core.h" 1624)
+                      nil )
+                     (!pair  "inheritance"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1625)
+                      nil )
+                     (!pair  "vtt_subvtt"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1627)
+                      nil )
+                     (!pair  "vtt_vptr"
+                      (!type already_seen 23)
+                      (!srcfileloc  "tree-core.h" 1628)
+                      nil )
+                     (!pair  "base_binfos"
+                      (!type already_seen 97)
+                      (!srcfileloc  "tree-core.h" 1630)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1949)
+                   (!options 
+                    (!option tag string  "TS_BINFO")
+                   )
+                  )
+                  (!pair  "stmt_list"
+                   (!type struct 564 nil  gc_used "tree_statement_list"
+                    (!srcfileloc  "tree-core.h" 1871)
+                    (!fields 3 
+                     (!pair  "typed"
+                      (!type already_seen 31)
+                      (!srcfileloc  "tree-core.h" 1868)
+                      nil )
+                     (!pair  "head"
+                      (!type pointer 565 nil  gc_used
+                       (!type struct 566 
+                        (!type already_seen 565)
+                        gc_pointed_to "tree_statement_list_node"
+                        (!srcfileloc  "tree-core.h" 1864)
+                        (!fields 3 
+                         (!pair  "prev"
+                          (!type already_seen 565)
+                          (!srcfileloc  "tree-core.h" 1861)
+                          nil )
+                         (!pair  "next"
+                          (!type already_seen 565)
+                          (!srcfileloc  "tree-core.h" 1862)
+                          nil )
+                         (!pair  "stmt"
+                          (!type already_seen 23)
+                          (!srcfileloc  "tree-core.h" 1863)
+                          nil )
+                        )
+                        (!options 
+                         (!option chain_prev string  "%h.prev")
+                         (!option chain_next string  "%h.next")
+                        )
+                        2047 nil nil )
+                      )
+                      (!srcfileloc  "tree-core.h" 1869)
+                      nil )
+                     (!pair  "tail"
+                      (!type already_seen 565)
+                      (!srcfileloc  "tree-core.h" 1870)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1950)
+                   (!options 
+                    (!option tag string  "TS_STATEMENT_LIST")
+                   )
+                  )
+                  (!pair  "constructor"
+                   (!type struct 567 nil  gc_used "tree_constructor"
+                    (!srcfileloc  "tree-core.h" 1416)
+                    (!fields 2 
+                     (!pair  "typed"
+                      (!type already_seen 31)
+                      (!srcfileloc  "tree-core.h" 1414)
+                      nil )
+                     (!pair  "elts"
+                      (!type pointer 568 nil  gc_used
+                       (!type user_struct 569 
+                        (!type already_seen 568)
+                        gc_pointed_to "vec<constructor_elt,va_gc>"
+                        (!srcfileloc  "tree-core.h" 1415)
+                        (!fields 2 
+                         (!pair  "va_gc"
+                          (!type already_seen 79)
+                          (!srcfileloc  "tree-core.h" 1415)
+                          nil )
+                         (!pair  "constructor_elt"
+                          (!type struct 570 nil  gc_used "constructor_elt"
+                           (!srcfileloc  "tree-core.h" 1415)
+                           (!fields 2 
+                            (!pair  "index"
+                             (!type already_seen 23)
+                             (!srcfileloc  "tree-core.h" 1409)
+                             nil )
+                            (!pair  "value"
+                             (!type already_seen 23)
+                             (!srcfileloc  "tree-core.h" 1410)
+                             nil )
+                           )
+                           nil 2047 nil nil )
+                          (!srcfileloc  "tree-core.h" 1415)
+                          nil )
+                        )
+                       )
+                      )
+                      (!srcfileloc  "tree-core.h" 1415)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1951)
+                   (!options 
+                    (!option tag string  "TS_CONSTRUCTOR")
+                   )
+                  )
+                  (!pair  "omp_clause"
+                   (!type struct 571 nil  gc_used "tree_omp_clause"
+                    (!srcfileloc  "tree-core.h" 1528)
+                    (!fields 7 
+                     (!pair  "common"
+                      (!type already_seen 32)
+                      (!srcfileloc  "tree-core.h" 1502)
+                      nil )
+                     (!pair  "locus"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1503)
+                      nil )
+                     (!pair  "code"
+                      (!type already_seen 2)
+                      (!srcfileloc  "tree-core.h" 1504)
+                      nil )
+                     (!pair  "subcode"
+                      (!type union 572 nil  gc_unused "omp_clause_subcode"
+                       (!srcfileloc  "tree-core.h" 1519)
+                       (!fields 10 
+                        (!pair  "default_kind"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1506)
+                         nil )
+                        (!pair  "schedule_kind"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1507)
+                         nil )
+                        (!pair  "depend_kind"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1508)
+                         nil )
+                        (!pair  "map_kind"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1510)
+                         nil )
+                        (!pair  "proc_bind_kind"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1511)
+                         nil )
+                        (!pair  "reduction_code"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1512)
+                         nil )
+                        (!pair  "linear_kind"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1513)
+                         nil )
+                        (!pair  "if_modifier"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1514)
+                         nil )
+                        (!pair  "defaultmap_kind"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1515)
+                         nil )
+                        (!pair  "dimension"
+                         (!type already_seen 2)
+                         (!srcfileloc  "tree-core.h" 1518)
+                         nil )
+                       )
+                       nil 2047 nil )
+                      (!srcfileloc  "tree-core.h" 1519)
+                      (!options 
+                       (!option skip string  "")
+                      )
+                     )
+                     (!pair  "gimple_reduction_init"
+                      (!type already_seen 331)
+                      (!srcfileloc  "tree-core.h" 1523)
+                      nil )
+                     (!pair  "gimple_reduction_merge"
+                      (!type already_seen 331)
+                      (!srcfileloc  "tree-core.h" 1524)
+                      nil )
+                     (!pair  "ops"
+                      (!type array 573 nil  gc_used "1" 
+                       (!type already_seen 23)
+                      )
+                      (!srcfileloc  "tree-core.h" 1527)
+                      (!options 
+                       (!option length string  "omp_clause_num_ops[OMP_CLAUSE_CODE ((tree)&%h)]")
+                      )
+                     )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1952)
+                   (!options 
+                    (!option tag string  "TS_OMP_CLAUSE")
+                   )
+                  )
+                  (!pair  "optimization"
+                   (!type struct 574 nil  gc_used "tree_optimization_option"
+                    (!srcfileloc  "tree-core.h" 1889)
+                    (!fields 4 
+                     (!pair  "base"
+                      (!type already_seen 25)
+                      (!srcfileloc  "tree-core.h" 1877)
+                      nil )
+                     (!pair  "opts"
+                      (!type pointer 575 nil  gc_used
+                       (!type struct 576 
+                        (!type already_seen 575)
+                        gc_pointed_to "cl_optimization"
+                        (!fileloc  "options.h" 5559)
+                        (!fields 237 
+                         (!pair  "x_str_align_functions"
+                          (!type already_seen 11)
+                          (!fileloc  "options.h" 5322)
+                          nil )
+                         (!pair  "x_str_align_jumps"
+                          (!type already_seen 11)
+                          (!fileloc  "options.h" 5323)
+                          nil )
+                         (!pair  "x_str_align_labels"
+                          (!type already_seen 11)
+                          (!fileloc  "options.h" 5324)
+                          nil )
+                         (!pair  "x_str_align_loops"
+                          (!type already_seen 11)
+                          (!fileloc  "options.h" 5325)
+                          nil )
+                         (!pair  "x_flag_sched_stalled_insns"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5326)
+                          nil )
+                         (!pair  "x_flag_sched_stalled_insns_dep"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5327)
+                          nil )
+                         (!pair  "x_flag_tree_parallelize_loops"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5328)
+                          nil )
+                         (!pair  "x_flag_fp_contract_mode"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5329)
+                          nil )
+                         (!pair  "x_flag_ira_algorithm"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5330)
+                          nil )
+                         (!pair  "x_flag_ira_region"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5331)
+                          nil )
+                         (!pair  "x_flag_live_patching"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5332)
+                          nil )
+                         (!pair  "x_flag_reorder_blocks_algorithm"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5333)
+                          nil )
+                         (!pair  "x_flag_simd_cost_model"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5334)
+                          nil )
+                         (!pair  "x_flag_stack_reuse"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5335)
+                          nil )
+                         (!pair  "x_flag_vect_cost_model"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5336)
+                          nil )
+                         (!pair  "x_optimize"
+                          (!type already_seen 8)
+                          (!fileloc  "options.h" 5337)
+                          nil )
+                         (!pair  "x_optimize_size"
+                          (!type already_seen 8)
+                          (!fileloc  "options.h" 5338)
+                          nil )
+                         (!pair  "x_optimize_debug"
+                          (!type already_seen 8)
+                          (!fileloc  "options.h" 5339)
+                          nil )
+                         (!pair  "x_optimize_fast"
+                          (!type already_seen 8)
+                          (!fileloc  "options.h" 5340)
+                          nil )
+                         (!pair  "x_flag_aggressive_loop_optimizations"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5341)
+                          nil )
+                         (!pair  "x_flag_align_functions"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5342)
+                          nil )
+                         (!pair  "x_flag_align_jumps"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5343)
+                          nil )
+                         (!pair  "x_flag_align_labels"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5344)
+                          nil )
+                         (!pair  "x_flag_align_loops"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5345)
+                          nil )
+                         (!pair  "x_flag_associative_math"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5346)
+                          nil )
+                         (!pair  "x_flag_assume_phsa"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5347)
+                          nil )
+                         (!pair  "x_flag_asynchronous_unwind_tables"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5348)
+                          nil )
+                         (!pair  "x_flag_auto_inc_dec"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5349)
+                          nil )
+                         (!pair  "x_flag_branch_on_count_reg"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5350)
+                          nil )
+                         (!pair  "x_flag_branch_probabilities"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5351)
+                          nil )
+                         (!pair  "x_flag_branch_target_load_optimize"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5352)
+                          nil )
+                         (!pair  "x_flag_branch_target_load_optimize2"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5353)
+                          nil )
+                         (!pair  "x_flag_btr_bb_exclusive"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5354)
+                          nil )
+                         (!pair  "x_flag_caller_saves"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5355)
+                          nil )
+                         (!pair  "x_flag_code_hoisting"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5356)
+                          nil )
+                         (!pair  "x_flag_combine_stack_adjustments"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5357)
+                          nil )
+                         (!pair  "x_flag_compare_elim_after_reload"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5358)
+                          nil )
+                         (!pair  "x_flag_conserve_stack"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5359)
+                          nil )
+                         (!pair  "x_flag_cprop_registers"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5360)
+                          nil )
+                         (!pair  "x_flag_crossjumping"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5361)
+                          nil )
+                         (!pair  "x_flag_cse_follow_jumps"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5362)
+                          nil )
+                         (!pair  "x_flag_cx_fortran_rules"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5363)
+                          nil )
+                         (!pair  "x_flag_cx_limited_range"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5364)
+                          nil )
+                         (!pair  "x_flag_dce"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5365)
+                          nil )
+                         (!pair  "x_flag_defer_pop"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5366)
+                          nil )
+                         (!pair  "x_flag_delayed_branch"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5367)
+                          nil )
+                         (!pair  "x_flag_delete_dead_exceptions"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5368)
+                          nil )
+                         (!pair  "x_flag_delete_null_pointer_checks"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5369)
+                          nil )
+                         (!pair  "x_flag_devirtualize"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5370)
+                          nil )
+                         (!pair  "x_flag_devirtualize_speculatively"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5371)
+                          nil )
+                         (!pair  "x_flag_dse"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5372)
+                          nil )
+                         (!pair  "x_flag_early_inlining"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5373)
+                          nil )
+                         (!pair  "x_flag_exceptions"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5374)
+                          nil )
+                         (!pair  "x_flag_expensive_optimizations"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5375)
+                          nil )
+                         (!pair  "x_flag_finite_math_only"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5376)
+                          nil )
+                         (!pair  "x_flag_float_store"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5377)
+                          nil )
+                         (!pair  "x_flag_forward_propagate"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5378)
+                          nil )
+                         (!pair  "x_flag_fp_int_builtin_inexact"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5379)
+                          nil )
+                         (!pair  "x_flag_no_function_cse"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5380)
+                          nil )
+                         (!pair  "x_flag_gcse"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5381)
+                          nil )
+                         (!pair  "x_flag_gcse_after_reload"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5382)
+                          nil )
+                         (!pair  "x_flag_gcse_las"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5383)
+                          nil )
+                         (!pair  "x_flag_gcse_lm"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5384)
+                          nil )
+                         (!pair  "x_flag_gcse_sm"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5385)
+                          nil )
+                         (!pair  "x_flag_graphite"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5386)
+                          nil )
+                         (!pair  "x_flag_graphite_identity"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5387)
+                          nil )
+                         (!pair  "x_flag_guess_branch_prob"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5388)
+                          nil )
+                         (!pair  "x_flag_hoist_adjacent_loads"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5389)
+                          nil )
+                         (!pair  "x_flag_if_conversion"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5390)
+                          nil )
+                         (!pair  "x_flag_if_conversion2"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5391)
+                          nil )
+                         (!pair  "x_flag_indirect_inlining"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5392)
+                          nil )
+                         (!pair  "x_flag_no_inline"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5393)
+                          nil )
+                         (!pair  "x_flag_inline_atomics"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5394)
+                          nil )
+                         (!pair  "x_flag_inline_functions"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5395)
+                          nil )
+                         (!pair  "x_flag_inline_functions_called_once"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5396)
+                          nil )
+                         (!pair  "x_flag_inline_small_functions"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5397)
+                          nil )
+                         (!pair  "x_flag_ipa_bit_cp"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5398)
+                          nil )
+                         (!pair  "x_flag_ipa_cp"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5399)
+                          nil )
+                         (!pair  "x_flag_ipa_cp_clone"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5400)
+                          nil )
+                         (!pair  "x_flag_ipa_icf"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5401)
+                          nil )
+                         (!pair  "x_flag_ipa_icf_functions"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5402)
+                          nil )
+                         (!pair  "x_flag_ipa_icf_variables"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5403)
+                          nil )
+                         (!pair  "x_flag_ipa_profile"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5404)
+                          nil )
+                         (!pair  "x_flag_ipa_pta"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5405)
+                          nil )
+                         (!pair  "x_flag_ipa_pure_const"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5406)
+                          nil )
+                         (!pair  "x_flag_ipa_ra"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5407)
+                          nil )
+                         (!pair  "x_flag_ipa_reference"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5408)
+                          nil )
+                         (!pair  "x_flag_ipa_reference_addressable"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5409)
+                          nil )
+                         (!pair  "x_flag_ipa_sra"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5410)
+                          nil )
+                         (!pair  "x_flag_ipa_stack_alignment"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5411)
+                          nil )
+                         (!pair  "x_flag_ipa_vrp"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5412)
+                          nil )
+                         (!pair  "x_flag_ira_hoist_pressure"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5413)
+                          nil )
+                         (!pair  "x_flag_ira_loop_pressure"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5414)
+                          nil )
+                         (!pair  "x_flag_ira_share_save_slots"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5415)
+                          nil )
+                         (!pair  "x_flag_ira_share_spill_slots"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5416)
+                          nil )
+                         (!pair  "x_flag_isolate_erroneous_paths_attribute"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5417)
+                          nil )
+                         (!pair  "x_flag_isolate_erroneous_paths_dereference"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5418)
+                          nil )
+                         (!pair  "x_flag_ivopts"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5419)
+                          nil )
+                         (!pair  "x_flag_jump_tables"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5420)
+                          nil )
+                         (!pair  "x_flag_keep_gc_roots_live"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5421)
+                          nil )
+                         (!pair  "x_flag_lifetime_dse"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5422)
+                          nil )
+                         (!pair  "x_flag_limit_function_alignment"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5423)
+                          nil )
+                         (!pair  "x_flag_live_range_shrinkage"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5424)
+                          nil )
+                         (!pair  "x_flag_loop_interchange"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5425)
+                          nil )
+                         (!pair  "x_flag_loop_nest_optimize"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5426)
+                          nil )
+                         (!pair  "x_flag_loop_parallelize_all"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5427)
+                          nil )
+                         (!pair  "x_flag_unroll_jam"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5428)
+                          nil )
+                         (!pair  "x_flag_lra_remat"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5429)
+                          nil )
+                         (!pair  "x_flag_errno_math"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5430)
+                          nil )
+                         (!pair  "x_flag_modulo_sched"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5431)
+                          nil )
+                         (!pair  "x_flag_modulo_sched_allow_regmoves"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5432)
+                          nil )
+                         (!pair  "x_flag_move_loop_invariants"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5433)
+                          nil )
+                         (!pair  "x_flag_non_call_exceptions"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5434)
+                          nil )
+                         (!pair  "x_flag_nothrow_opt"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5435)
+                          nil )
+                         (!pair  "x_flag_omit_frame_pointer"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5436)
+                          nil )
+                         (!pair  "x_flag_opt_info"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5437)
+                          nil )
+                         (!pair  "x_flag_optimize_sibling_calls"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5438)
+                          nil )
+                         (!pair  "x_flag_optimize_strlen"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5439)
+                          nil )
+                         (!pair  "x_flag_pack_struct"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5440)
+                          nil )
+                         (!pair  "x_flag_partial_inlining"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5441)
+                          nil )
+                         (!pair  "x_flag_peel_loops"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5442)
+                          nil )
+                         (!pair  "x_flag_no_peephole"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5443)
+                          nil )
+                         (!pair  "x_flag_peephole2"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5444)
+                          nil )
+                         (!pair  "x_flag_plt"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5445)
+                          nil )
+                         (!pair  "x_flag_predictive_commoning"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5446)
+                          nil )
+                         (!pair  "x_flag_prefetch_loop_arrays"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5447)
+                          nil )
+                         (!pair  "x_flag_printf_return_value"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5448)
+                          nil )
+                         (!pair  "x_flag_reciprocal_math"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5449)
+                          nil )
+                         (!pair  "x_flag_pcc_struct_return"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5450)
+                          nil )
+                         (!pair  "x_flag_rename_registers"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5451)
+                          nil )
+                         (!pair  "x_flag_reorder_blocks"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5452)
+                          nil )
+                         (!pair  "x_flag_reorder_blocks_and_partition"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5453)
+                          nil )
+                         (!pair  "x_flag_reorder_functions"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5454)
+                          nil )
+                         (!pair  "x_flag_rerun_cse_after_loop"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5455)
+                          nil )
+                         (!pair  "x_flag_resched_modulo_sched"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5456)
+                          nil )
+                         (!pair  "x_flag_rounding_math"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5457)
+                          nil )
+                         (!pair  "x_flag_rtti"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5458)
+                          nil )
+                         (!pair  "x_flag_save_optimization_record"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5459)
+                          nil )
+                         (!pair  "x_flag_sched_critical_path_heuristic"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5460)
+                          nil )
+                         (!pair  "x_flag_sched_dep_count_heuristic"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5461)
+                          nil )
+                         (!pair  "x_flag_sched_group_heuristic"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5462)
+                          nil )
+                         (!pair  "x_flag_schedule_interblock"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5463)
+                          nil )
+                         (!pair  "x_flag_sched_last_insn_heuristic"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5464)
+                          nil )
+                         (!pair  "x_flag_sched_pressure"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5465)
+                          nil )
+                         (!pair  "x_flag_sched_rank_heuristic"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5466)
+                          nil )
+                         (!pair  "x_flag_schedule_speculative"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5467)
+                          nil )
+                         (!pair  "x_flag_sched_spec_insn_heuristic"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5468)
+                          nil )
+                         (!pair  "x_flag_schedule_speculative_load"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5469)
+                          nil )
+                         (!pair  "x_flag_schedule_speculative_load_dangerous"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5470)
+                          nil )
+                         (!pair  "x_flag_sched2_use_superblocks"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5471)
+                          nil )
+                         (!pair  "x_flag_schedule_fusion"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5472)
+                          nil )
+                         (!pair  "x_flag_schedule_insns"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5473)
+                          nil )
+                         (!pair  "x_flag_schedule_insns_after_reload"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5474)
+                          nil )
+                         (!pair  "x_flag_section_anchors"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5475)
+                          nil )
+                         (!pair  "x_flag_sel_sched_pipelining"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5476)
+                          nil )
+                         (!pair  "x_flag_sel_sched_pipelining_outer_loops"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5477)
+                          nil )
+                         (!pair  "x_flag_sel_sched_reschedule_pipelined"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5478)
+                          nil )
+                         (!pair  "x_flag_selective_scheduling"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5479)
+                          nil )
+                         (!pair  "x_flag_selective_scheduling2"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5480)
+                          nil )
+                         (!pair  "x_flag_short_enums"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5481)
+                          nil )
+                         (!pair  "x_flag_short_wchar"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5482)
+                          nil )
+                         (!pair  "x_flag_shrink_wrap"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5483)
+                          nil )
+                         (!pair  "x_flag_shrink_wrap_separate"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5484)
+                          nil )
+                         (!pair  "x_flag_signaling_nans"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5485)
+                          nil )
+                         (!pair  "x_flag_signed_zeros"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5486)
+                          nil )
+                         (!pair  "x_flag_single_precision_constant"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5487)
+                          nil )
+                         (!pair  "x_flag_split_ivs_in_unroller"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5488)
+                          nil )
+                         (!pair  "x_flag_split_loops"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5489)
+                          nil )
+                         (!pair  "x_flag_split_paths"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5490)
+                          nil )
+                         (!pair  "x_flag_split_wide_types"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5491)
+                          nil )
+                         (!pair  "x_flag_ssa_backprop"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5492)
+                          nil )
+                         (!pair  "x_flag_ssa_phiopt"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5493)
+                          nil )
+                         (!pair  "x_flag_stack_clash_protection"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5494)
+                          nil )
+                         (!pair  "x_flag_stack_protect"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5495)
+                          nil )
+                         (!pair  "x_flag_stdarg_opt"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5496)
+                          nil )
+                         (!pair  "x_flag_store_merging"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5497)
+                          nil )
+                         (!pair  "x_flag_strict_aliasing"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5498)
+                          nil )
+                         (!pair  "x_flag_strict_enums"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5499)
+                          nil )
+                         (!pair  "x_flag_strict_volatile_bitfields"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5500)
+                          nil )
+                         (!pair  "x_flag_thread_jumps"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5501)
+                          nil )
+                         (!pair  "x_flag_threadsafe_statics"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5502)
+                          nil )
+                         (!pair  "x_flag_tracer"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5503)
+                          nil )
+                         (!pair  "x_flag_trapping_math"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5504)
+                          nil )
+                         (!pair  "x_flag_trapv"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5505)
+                          nil )
+                         (!pair  "x_flag_tree_bit_ccp"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5506)
+                          nil )
+                         (!pair  "x_flag_tree_builtin_call_dce"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5507)
+                          nil )
+                         (!pair  "x_flag_tree_ccp"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5508)
+                          nil )
+                         (!pair  "x_flag_tree_ch"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5509)
+                          nil )
+                         (!pair  "x_flag_tree_coalesce_vars"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5510)
+                          nil )
+                         (!pair  "x_flag_tree_copy_prop"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5511)
+                          nil )
+                         (!pair  "x_flag_tree_cselim"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5512)
+                          nil )
+                         (!pair  "x_flag_tree_dce"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5513)
+                          nil )
+                         (!pair  "x_flag_tree_dom"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5514)
+                          nil )
+                         (!pair  "x_flag_tree_dse"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5515)
+                          nil )
+                         (!pair  "x_flag_tree_forwprop"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5516)
+                          nil )
+                         (!pair  "x_flag_tree_fre"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5517)
+                          nil )
+                         (!pair  "x_flag_tree_loop_distribute_patterns"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5518)
+                          nil )
+                         (!pair  "x_flag_tree_loop_distribution"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5519)
+                          nil )
+                         (!pair  "x_flag_tree_loop_if_convert"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5520)
+                          nil )
+                         (!pair  "x_flag_tree_loop_im"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5521)
+                          nil )
+                         (!pair  "x_flag_tree_loop_ivcanon"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5522)
+                          nil )
+                         (!pair  "x_flag_tree_loop_optimize"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5523)
+                          nil )
+                         (!pair  "x_flag_tree_loop_vectorize"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5524)
+                          nil )
+                         (!pair  "x_flag_tree_live_range_split"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5525)
+                          nil )
+                         (!pair  "x_flag_tree_partial_pre"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5526)
+                          nil )
+                         (!pair  "x_flag_tree_phiprop"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5527)
+                          nil )
+                         (!pair  "x_flag_tree_pre"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5528)
+                          nil )
+                         (!pair  "x_flag_tree_pta"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5529)
+                          nil )
+                         (!pair  "x_flag_tree_reassoc"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5530)
+                          nil )
+                         (!pair  "x_flag_tree_scev_cprop"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5531)
+                          nil )
+                         (!pair  "x_flag_tree_sink"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5532)
+                          nil )
+                         (!pair  "x_flag_tree_slp_vectorize"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5533)
+                          nil )
+                         (!pair  "x_flag_tree_slsr"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5534)
+                          nil )
+                         (!pair  "x_flag_tree_sra"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5535)
+                          nil )
+                         (!pair  "x_flag_tree_switch_conversion"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5536)
+                          nil )
+                         (!pair  "x_flag_tree_tail_merge"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5537)
+                          nil )
+                         (!pair  "x_flag_tree_ter"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5538)
+                          nil )
+                         (!pair  "x_flag_tree_vrp"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5539)
+                          nil )
+                         (!pair  "x_flag_unconstrained_commons"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5540)
+                          nil )
+                         (!pair  "x_flag_unroll_all_loops"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5541)
+                          nil )
+                         (!pair  "x_flag_unroll_loops"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5542)
+                          nil )
+                         (!pair  "x_flag_unsafe_math_optimizations"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5543)
+                          nil )
+                         (!pair  "x_flag_unswitch_loops"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5544)
+                          nil )
+                         (!pair  "x_flag_unwind_tables"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5545)
+                          nil )
+                         (!pair  "x_flag_var_tracking"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5546)
+                          nil )
+                         (!pair  "x_flag_var_tracking_assignments"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5547)
+                          nil )
+                         (!pair  "x_flag_var_tracking_assignments_toggle"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5548)
+                          nil )
+                         (!pair  "x_flag_var_tracking_uninit"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5549)
+                          nil )
+                         (!pair  "x_flag_variable_expansion_in_unroller"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5550)
+                          nil )
+                         (!pair  "x_flag_version_loops_for_strides"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5551)
+                          nil )
+                         (!pair  "x_flag_value_profile_transformations"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5552)
+                          nil )
+                         (!pair  "x_flag_web"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5553)
+                          nil )
+                         (!pair  "x_flag_wrapv"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5554)
+                          nil )
+                         (!pair  "x_flag_wrapv_pointer"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5555)
+                          nil )
+                         (!pair  "x_flag_mlow_precision_div"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5556)
+                          nil )
+                         (!pair  "x_flag_mrecip_low_precision_sqrt"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5557)
+                          nil )
+                         (!pair  "x_flag_mlow_precision_sqrt"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5558)
+                          nil )
+                        )
+                        nil 2047 nil nil )
+                      )
+                      (!srcfileloc  "tree-core.h" 1880)
+                      nil )
+                     (!pair  "optabs"
+                      (!type already_seen 3)
+                      (!srcfileloc  "tree-core.h" 1884)
+                      (!options 
+                       (!option atomic string  "")
+                      )
+                     )
+                     (!pair  "base_optabs"
+                      (!type pointer 577 nil  gc_unused
+                       (!type struct 578 
+                        (!type already_seen 577)
+                        gc_unused "target_optabs"nil 
+                        (!fields 0 )
+                        nil 0 nil nil )
+                      )
+                      (!srcfileloc  "tree-core.h" 1888)
+                      (!options 
+                       (!option skip string  "")
+                      )
+                     )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1953)
+                   (!options 
+                    (!option tag string  "TS_OPTIMIZATION")
+                   )
+                  )
+                  (!pair  "target_option"
+                   (!type struct 579 nil  gc_used "tree_target_option"
+                    (!srcfileloc  "tree-core.h" 1905)
+                    (!fields 3 
+                     (!pair  "base"
+                      (!type already_seen 25)
+                      (!srcfileloc  "tree-core.h" 1898)
+                      nil )
+                     (!pair  "globals"
+                      (!type pointer 580 nil  gc_used
+                       (!type struct 581 
+                        (!type already_seen 580)
+                        gc_pointed_to "target_globals"
+                        (!srcfileloc  "target-globals.h" 61)
+                        (!fields 16 
+                         (!pair  "flag_state"
+                          (!type pointer 582 nil  gc_unused
+                           (!type struct 583 
+                            (!type already_seen 582)
+                            gc_unused "target_flag_state"nil 
+                            (!fields 0 )
+                            nil 0 nil nil )
+                          )
+                          (!srcfileloc  "target-globals.h" 45)
+                          (!options 
+                           (!option skip string  "")
+                          )
+                         )
+                         (!pair  "regs"
+                          (!type pointer 584 nil  gc_unused
+                           (!type struct 585 
+                            (!type already_seen 584)
+                            gc_unused "target_regs"nil 
+                            (!fields 0 )
+                            nil 0 nil nil )
+                          )
+                          (!srcfileloc  "target-globals.h" 46)
+                          (!options 
+                           (!option skip string  "")
+                          )
+                         )
+                         (!pair  "rtl"
+                          (!type pointer 586 nil  gc_used
+                           (!type struct 587 
+                            (!type already_seen 586)
+                            gc_pointed_to "target_rtl"
+                            (!srcfileloc  "rtl.h" 3725)
+                            (!fields 8 
+                             (!pair  "x_global_rtl"
+                              (!type array 588 nil  gc_used "GR_MAX" 
+                               (!type already_seen 150)
+                              )
+                              (!srcfileloc  "rtl.h" 3697)
+                              nil )
+                             (!pair  "x_pic_offset_table_rtx"
+                              (!type already_seen 150)
+                              (!srcfileloc  "rtl.h" 3700)
+                              nil )
+                             (!pair  "x_return_address_pointer_rtx"
+                              (!type already_seen 150)
+                              (!srcfileloc  "rtl.h" 3705)
+                              nil )
+                             (!pair  "x_initial_regno_reg_rtx"
+                              (!type array 589 nil  gc_used "FIRST_PSEUDO_REGISTER" 
+                               (!type already_seen 150)
+                              )
+                              (!srcfileloc  "rtl.h" 3711)
+                              nil )
+                             (!pair  "x_top_of_stack"
+                              (!type array 590 nil  gc_used "MAX_MACHINE_MODE" 
+                               (!type already_seen 150)
+                              )
+                              (!srcfileloc  "rtl.h" 3714)
+                              nil )
+                             (!pair  "x_static_reg_base_value"
+                              (!type array 591 nil  gc_used "FIRST_PSEUDO_REGISTER" 
+                               (!type already_seen 150)
+                              )
+                              (!srcfileloc  "rtl.h" 3718)
+                              nil )
+                             (!pair  "x_mode_mem_attrs"
+                              (!type array 592 nil  gc_used "(int) MAX_MACHINE_MODE" 
+                               (!type already_seen 276)
+                              )
+                              (!srcfileloc  "rtl.h" 3721)
+                              nil )
+                             (!pair  "target_specific_initialized"
+                              (!type already_seen 2)
+                              (!srcfileloc  "rtl.h" 3724)
+                              nil )
+                            )
+                            nil 2047 nil nil )
+                          )
+                          (!srcfileloc  "target-globals.h" 47)
+                          nil )
+                         (!pair  "recog"
+                          (!type pointer 593 nil  gc_unused
+                           (!type struct 594 
+                            (!type already_seen 593)
+                            gc_unused "target_recog"nil 
+                            (!fields 0 )
+                            nil 0 nil nil )
+                          )
+                          (!srcfileloc  "target-globals.h" 48)
+                          (!options 
+                           (!option skip string  "")
+                          )
+                         )
+                         (!pair  "hard_regs"
+                          (!type pointer 595 nil  gc_unused
+                           (!type struct 596 
+                            (!type already_seen 595)
+                            gc_unused "target_hard_regs"nil 
+                            (!fields 0 )
+                            nil 0 nil nil )
+                          )
+                          (!srcfileloc  "target-globals.h" 49)
+                          (!options 
+                           (!option skip string  "")
+                          )
+                         )
+                         (!pair  "reload"
+                          (!type pointer 597 nil  gc_unused
+                           (!type struct 598 
+                            (!type already_seen 597)
+                            gc_unused "target_reload"nil 
+                            (!fields 0 )
+                            nil 0 nil nil )
+                          )
+                          (!srcfileloc  "target-globals.h" 50)
+                          (!options 
+                           (!option skip string  "")
+                          )
+                         )
+                         (!pair  "expmed"
+                          (!type pointer 599 nil  gc_unused
+                           (!type struct 600 
+                            (!type already_seen 599)
+                            gc_unused "target_expmed"nil 
+                            (!fields 0 )
+                            nil 0 nil nil )
+                          )
+                          (!srcfileloc  "target-globals.h" 51)
+                          (!options 
+                           (!option skip string  "")
+                          )
+                         )
+                         (!pair  "optabs"
+                          (!type already_seen 577)
+                          (!srcfileloc  "target-globals.h" 52)
+                          (!options 
+                           (!option skip string  "")
+                          )
+                         )
+                         (!pair  "libfuncs"
+                          (!type pointer 601 nil  gc_used
+                           (!type struct 602 
+                            (!type already_seen 601)
+                            gc_pointed_to "target_libfuncs"
+                            (!srcfileloc  "libfuncs.h" 62)
+                            (!fields 2 
+                             (!pair  "x_libfunc_table"
+                              (!type array 603 nil  gc_used "LTI_MAX" 
+                               (!type already_seen 150)
+                              )
+                              (!srcfileloc  "libfuncs.h" 58)
+                              nil )
+                             (!pair  "x_libfunc_hash"
+                              (!type pointer 604 nil  gc_used
+                               (!type user_struct 605 
+                                (!type already_seen 604)
+                                gc_pointed_to "hash_table<libfunc_hasher>"
+                                (!srcfileloc  "libfuncs.h" 61)
+                                (!fields 1 
+                                 (!pair  "libfunc_hasher"
+                                  (!type struct 606 nil  gc_used "libfunc_hasher"
+                                   (!srcfileloc  "libfuncs.h" 61)
+                                   (!fields 0 )
+                                   nil 2047 nil nil )
+                                  (!srcfileloc  "libfuncs.h" 61)
+                                  nil )
+                                )
+                               )
+                              )
+                              (!srcfileloc  "libfuncs.h" 61)
+                              nil )
+                            )
+                            nil 2047 nil nil )
+                          )
+                          (!srcfileloc  "target-globals.h" 53)
+                          nil )
+                         (!pair  "cfgloop"
+                          (!type pointer 607 nil  gc_unused
+                           (!type struct 608 
+                            (!type already_seen 607)
+                            gc_unused "target_cfgloop"nil 
+                            (!fields 0 )
+                            nil 0 nil nil )
+                          )
+                          (!srcfileloc  "target-globals.h" 54)
+                          (!options 
+                           (!option skip string  "")
+                          )
+                         )
+                         (!pair  "ira"
+                          (!type pointer 609 nil  gc_unused
+                           (!type struct 610 
+                            (!type already_seen 609)
+                            gc_unused "target_ira"nil 
+                            (!fields 0 )
+                            nil 0 nil nil )
+                          )
+                          (!srcfileloc  "target-globals.h" 55)
+                          (!options 
+                           (!option skip string  "")
+                          )
+                         )
+                         (!pair  "ira_int"
+                          (!type pointer 611 nil  gc_unused
+                           (!type struct 612 
+                            (!type already_seen 611)
+                            gc_unused "target_ira_int"nil 
+                            (!fields 0 )
+                            nil 0 nil nil )
+                          )
+                          (!srcfileloc  "target-globals.h" 56)
+                          (!options 
+                           (!option skip string  "")
+                          )
+                         )
+                         (!pair  "builtins"
+                          (!type pointer 613 nil  gc_unused
+                           (!type struct 614 
+                            (!type already_seen 613)
+                            gc_unused "target_builtins"nil 
+                            (!fields 0 )
+                            nil 0 nil nil )
+                          )
+                          (!srcfileloc  "target-globals.h" 57)
+                          (!options 
+                           (!option skip string  "")
+                          )
+                         )
+                         (!pair  "gcse"
+                          (!type pointer 615 nil  gc_unused
+                           (!type struct 616 
+                            (!type already_seen 615)
+                            gc_unused "target_gcse"nil 
+                            (!fields 0 )
+                            nil 0 nil nil )
+                          )
+                          (!srcfileloc  "target-globals.h" 58)
+                          (!options 
+                           (!option skip string  "")
+                          )
+                         )
+                         (!pair  "bb_reorder"
+                          (!type pointer 617 nil  gc_unused
+                           (!type struct 618 
+                            (!type already_seen 617)
+                            gc_unused "target_bb_reorder"nil 
+                            (!fields 0 )
+                            nil 0 nil nil )
+                          )
+                          (!srcfileloc  "target-globals.h" 59)
+                          (!options 
+                           (!option skip string  "")
+                          )
+                         )
+                         (!pair  "lower_subreg"
+                          (!type pointer 619 nil  gc_unused
+                           (!type struct 620 
+                            (!type already_seen 619)
+                            gc_unused "target_lower_subreg"nil 
+                            (!fields 0 )
+                            nil 0 nil nil )
+                          )
+                          (!srcfileloc  "target-globals.h" 60)
+                          (!options 
+                           (!option skip string  "")
+                          )
+                         )
+                        )
+                        nil 2047 nil nil )
+                      )
+                      (!srcfileloc  "tree-core.h" 1901)
+                      nil )
+                     (!pair  "opts"
+                      (!type pointer 621 nil  gc_used
+                       (!type struct 622 
+                        (!type already_seen 621)
+                        gc_pointed_to "cl_target_option"
+                        (!fileloc  "options.h" 5579)
+                        (!fields 15 
+                         (!pair  "x_aarch64_override_tune_string"
+                          (!type already_seen 11)
+                          (!fileloc  "options.h" 5564)
+                          nil )
+                         (!pair  "x_aarch64_stack_protector_guard_offset"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5565)
+                          nil )
+                         (!pair  "x_aarch64_enable_bti"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5566)
+                          nil )
+                         (!pair  "x_aarch64_isa_flags"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5567)
+                          nil )
+                         (!pair  "x_aarch64_branch_protection_string"
+                          (!type already_seen 11)
+                          (!fileloc  "options.h" 5568)
+                          nil )
+                         (!pair  "x_aarch64_cmodel_var"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5569)
+                          nil )
+                         (!pair  "x_target_flags"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5570)
+                          nil )
+                         (!pair  "x_aarch64_ra_sign_scope"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5571)
+                          nil )
+                         (!pair  "x_aarch64_tls_dialect"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5572)
+                          nil )
+                         (!pair  "x_explicit_arch"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5573)
+                          nil )
+                         (!pair  "x_explicit_tune_core"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5574)
+                          nil )
+                         (!pair  "x_aarch64_fix_a53_err835769"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5575)
+                          nil )
+                         (!pair  "x_aarch64_fix_a53_err843419"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5576)
+                          nil )
+                         (!pair  "x_flag_omit_leaf_frame_pointer"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5577)
+                          nil )
+                         (!pair  "x_pcrelative_literal_loads"
+                          (!type already_seen 2)
+                          (!fileloc  "options.h" 5578)
+                          nil )
+                        )
+                        nil 2047 nil nil )
+                      )
+                      (!srcfileloc  "tree-core.h" 1904)
+                      nil )
+                    )
+                    nil 2047 nil nil )
+                   (!srcfileloc  "tree-core.h" 1954)
+                   (!options 
+                    (!option tag string  "TS_TARGET_OPTION")
+                   )
+                  )
+                 )
+                 (!options 
+                  (!option variable_size string  "")
+                  (!option desc string  "tree_node_structure (&%h)")
+                  (!option ptr_alias type 
+                   (!type lang_struct 623 nil  gc_pointed_to "lang_tree_node"
+                    (!srcfileloc  "ada/gcc-interface/ada-tree.h" 33)
+                    (!fields 0 )
+                    (!options 
+                     (!option chain_next string  "CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN (&%h.generic)) : NULL")
+                     (!option desc string  "0")
+                    )
+                    2047 
+                    (!homotypes 9
+                     (!type union 624 nil  gc_pointed_to "lang_tree_node"
+                      (!srcfileloc  "lto/lto-tree.h" 54)
+                      (!fields 1 
+                       (!pair  "generic"
+                        (!type already_seen 22)
+                        (!srcfileloc  "lto/lto-tree.h" 53)
+                        (!options 
+                         (!option desc string  "tree_node_structure (&%h)")
+                         (!option tag string  "TS_LTO_GENERIC")
+                        )
+                       )
+                      )
+                      (!options 
+                       (!option chain_next string  "CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_TYPE_COMMON) ? ((union lang_tree_node *) %h.generic.type_common.next_variant) : CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) %h.generic.common.chain) : NULL")
+                       (!option desc string  "lto_tree_node_structure (&%h)")
+                      )
+                      256 
+                      (!type already_seen 623)
+                     )
+                     
+                     (!type union 625 nil  gc_pointed_to "lang_tree_node"
+                      (!srcfileloc  "jit/dummy-frontend.c" 64)
+                      (!fields 2 
+                       (!pair  "generic"
+                        (!type already_seen 22)
+                        (!srcfileloc  "jit/dummy-frontend.c" 62)
+                        (!options 
+                         (!option desc string  "tree_node_structure (&%h)")
+                         (!option tag string  "0")
+                        )
+                       )
+                       (!pair  "identifier"
+                        (!type lang_struct 626 nil  gc_used "lang_identifier"
+                         (!srcfileloc  "d/d-tree.h" 334)
+                         (!fields 0 )
+                         nil 496 
+                         (!homotypes 8
+                          (!type struct 627 nil  gc_used "lang_identifier"
+                           (!srcfileloc  "lto/lto-tree.h" 27)
+                           (!fields 1 
+                            (!pair  "base"
+                             (!type already_seen 51)
+                             (!srcfileloc  "lto/lto-tree.h" 26)
+                             nil )
+                           )
+                           nil 256 
+                           (!type already_seen 626)
+                           nil )
+                          
+                          (!type struct 628 nil  gc_used "lang_identifier"
+                           (!srcfileloc  "jit/dummy-frontend.c" 53)
+                           (!fields 1 
+                            (!pair  "common"
+                             (!type already_seen 51)
+                             (!srcfileloc  "jit/dummy-frontend.c" 52)
+                             nil )
+                           )
+                           nil 128 
+                           (!type already_seen 626)
+                           nil )
+                          
+                          (!type struct 629 nil  gc_used "lang_identifier"
+                           (!srcfileloc  "go/go-lang.c" 66)
+                           (!fields 1 
+                            (!pair  "common"
+                             (!type already_seen 51)
+                             (!srcfileloc  "go/go-lang.c" 65)
+                             nil )
+                           )
+                           nil 64 
+                           (!type already_seen 626)
+                           nil )
+                          
+                          (!type struct 630 nil  gc_used "lang_identifier"
+                           (!srcfileloc  "fortran/f95-lang.c" 48)
+                           (!fields 1 
+                            (!pair  "common"
+                             (!type already_seen 51)
+                             (!srcfileloc  "fortran/f95-lang.c" 47)
+                             nil )
+                           )
+                           nil 32 
+                           (!type already_seen 626)
+                           nil )
+                          
+                          (!type struct 631 nil  gc_used "lang_identifier"
+                           (!srcfileloc  "d/d-tree.h" 207)
+                           (!fields 4 
+                            (!pair  "common"
+                             (!type already_seen 51)
+                             (!srcfileloc  "d/d-tree.h" 197)
+                             nil )
+                            (!pair  "pretty_ident"
+                             (!type already_seen 23)
+                             (!srcfileloc  "d/d-tree.h" 200)
+                             nil )
+                            (!pair  "decl_tree"
+                             (!type already_seen 23)
+                             (!srcfileloc  "d/d-tree.h" 203)
+                             nil )
+                            (!pair  "dsymbol"
+                             (!type already_seen 61)
+                             (!srcfileloc  "d/d-tree.h" 206)
+                             (!options 
+                              (!option skip string  "")
+                             )
+                            )
+                           )
+                           nil 16 
+                           (!type already_seen 626)
+                           nil )
+                          
+                          (!type struct 632 nil  gc_used "lang_identifier"
+                           (!srcfileloc  "cp/cp-tree.h" 608)
+                           (!fields 2 
+                            (!pair  "c_common"
+                             (!type struct 633 nil  gc_used "c_common_identifier"
+                              (!srcfileloc  "c-family/c-common.h" 374)
+                              (!fields 2 
+                               (!pair  "common"
+                                (!type already_seen 32)
+                                (!srcfileloc  "c-family/c-common.h" 372)
+                                nil )
+                               (!pair  "node"
+                                (!type already_seen 12)
+                                (!srcfileloc  "c-family/c-common.h" 373)
+                                nil )
+                              )
+                              nil 1548 nil nil )
+                             (!srcfileloc  "cp/cp-tree.h" 606)
+                             nil )
+                            (!pair  "bindings"
+                             (!type already_seen 117)
+                             (!srcfileloc  "cp/cp-tree.h" 607)
+                             nil )
+                           )
+                           nil 1032 
+                           (!type already_seen 626)
+                           nil )
+                          
+                          (!type struct 634 nil  gc_used "lang_identifier"
+                           (!srcfileloc  "c/c-decl.c" 217)
+                           (!fields 4 
+                            (!pair  "common_id"
+                             (!type already_seen 633)
+                             (!srcfileloc  "c/c-decl.c" 213)
+                             nil )
+                            (!pair  "symbol_binding"
+                             (!type pointer 635 nil  gc_used
+                              (!type struct 636 
+                               (!type already_seen 635)
+                               gc_pointed_to "c_binding"
+                               (!srcfileloc  "c/c-decl.c" 202)
+                               (!fields 11 
+                                (!pair  "u"
+                                 (!type union 637 nil  gc_used "anonymous:../../linaro/gcc/c/c-decl.c:188"
+                                  (!srcfileloc  "c/c-decl.c" 191)
+                                  (!fields 2 
+                                   (!pair  "type"
+                                    (!type already_seen 23)
+                                    (!srcfileloc  "c/c-decl.c" 189)
+                                    (!options 
+                                     (!option tag string  "0")
+                                    )
+                                   )
+                                   (!pair  "label"
+                                    (!type pointer 638 nil  gc_used
+                                     (!type struct 639 
+                                      (!type already_seen 638)
+                                      gc_pointed_to "c_label_vars"
+                                      (!srcfileloc  "c/c-decl.c" 381)
+                                      (!fields 4 
+                                       (!pair  "shadowed"
+                                        (!type already_seen 638)
+                                        (!srcfileloc  "c/c-decl.c" 369)
+                                        nil )
+                                       (!pair  "label_bindings"
+                                        (!type struct 640 nil  gc_used "c_spot_bindings"
+                                         (!srcfileloc  "c/c-decl.c" 348)
+                                         (!fields 4 
+                                          (!pair  "scope"
+                                           (!type pointer 641 nil  gc_used
+                                            (!type struct 642 
+                                             (!type already_seen 641)
+                                             gc_pointed_to "c_scope"
+                                             (!srcfileloc  "c/c-decl.c" 483)
+                                             (!fields 14 
+                                              (!pair  "outer"
+                                               (!type already_seen 641)
+                                               (!srcfileloc  "c/c-decl.c" 430)
+                                               nil )
+                                              (!pair  "outer_function"
+                                               (!type already_seen 641)
+                                               (!srcfileloc  "c/c-decl.c" 433)
+                                               nil )
+                                              (!pair  "bindings"
+                                               (!type already_seen 635)
+                                               (!srcfileloc  "c/c-decl.c" 436)
+                                               nil )
+                                              (!pair  "blocks"
+                                               (!type already_seen 23)
+                                               (!srcfileloc  "c/c-decl.c" 440)
+                                               nil )
+                                              (!pair  "blocks_last"
+                                               (!type already_seen 23)
+                                               (!srcfileloc  "c/c-decl.c" 441)
+                                               nil )
+                                              (!pair  "depth"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "c/c-decl.c" 445)
+                                               nil )
+                                              (!pair  "parm_flag"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "c/c-decl.c" 449)
+                                               nil )
+                                              (!pair  "had_vla_unspec"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "c/c-decl.c" 453)
+                                               nil )
+                                              (!pair  "warned_forward_parm_decls"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "c/c-decl.c" 458)
+                                               nil )
+                                              (!pair  "function_body"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "c/c-decl.c" 464)
+                                               nil )
+                                              (!pair  "keep"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "c/c-decl.c" 467)
+                                               nil )
+                                              (!pair  "float_const_decimal64"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "c/c-decl.c" 470)
+                                               nil )
+                                              (!pair  "has_label_bindings"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "c/c-decl.c" 475)
+                                               nil )
+                                              (!pair  "has_jump_unsafe_decl"
+                                               (!type already_seen 2)
+                                               (!srcfileloc  "c/c-decl.c" 482)
+                                               nil )
+                                             )
+                                             (!options 
+                                              (!option chain_next string  "%h.outer")
+                                             )
+                                             516 nil nil )
+                                           )
+                                           (!srcfileloc  "c/c-decl.c" 333)
+                                           nil )
+                                          (!pair  "bindings_in_scope"
+                                           (!type already_seen 635)
+                                           (!srcfileloc  "c/c-decl.c" 337)
+                                           nil )
+                                          (!pair  "stmt_exprs"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "c/c-decl.c" 344)
+                                           nil )
+                                          (!pair  "left_stmt_expr"
+                                           (!type already_seen 2)
+                                           (!srcfileloc  "c/c-decl.c" 347)
+                                           nil )
+                                         )
+                                         nil 516 nil nil )
+                                        (!srcfileloc  "c/c-decl.c" 371)
+                                        nil )
+                                       (!pair  "decls_in_scope"
+                                        (!type already_seen 96)
+                                        (!srcfileloc  "c/c-decl.c" 376)
+                                        nil )
+                                       (!pair  "gotos"
+                                        (!type pointer 643 nil  gc_used
+                                         (!type user_struct 644 
+                                          (!type already_seen 643)
+                                          gc_pointed_to "vec<c_goto_bindings_p,va_gc>"
+                                          (!srcfileloc  "c/c-decl.c" 380)
+                                          (!fields 2 
+                                           (!pair  "va_gc"
+                                            (!type already_seen 79)
+                                            (!srcfileloc  "c/c-decl.c" 380)
+                                            nil )
+                                           (!pair  "c_goto_bindings_p"
+                                            (!type pointer 645 nil  gc_used
+                                             (!type struct 646 
+                                              (!type already_seen 645)
+                                              gc_pointed_to "c_goto_bindings"
+                                              (!srcfileloc  "c/c-decl.c" 359)
+                                              (!fields 2 
+                                               (!pair  "loc"
+                                                (!type already_seen 2)
+                                                (!srcfileloc  "c/c-decl.c" 356)
+                                                nil )
+                                               (!pair  "goto_bindings"
+                                                (!type already_seen 640)
+                                                (!srcfileloc  "c/c-decl.c" 358)
+                                                nil )
+                                              )
+                                              nil 516 nil nil )
+                                            )
+                                            (!srcfileloc  "c/c-decl.c" 380)
+                                            nil )
+                                          )
+                                         )
+                                        )
+                                        (!srcfileloc  "c/c-decl.c" 380)
+                                        nil )
+                                      )
+                                      nil 516 nil nil )
+                                    )
+                                    (!srcfileloc  "c/c-decl.c" 190)
+                                    (!options 
+                                     (!option tag string  "1")
+                                    )
+                                   )
+                                  )
+                                  nil 516 nil )
+                                 (!srcfileloc  "c/c-decl.c" 191)
+                                 (!options 
+                                  (!option desc string  "TREE_CODE (%0.decl) == LABEL_DECL")
+                                 )
+                                )
+                                (!pair  "decl"
+                                 (!type already_seen 23)
+                                 (!srcfileloc  "c/c-decl.c" 192)
+                                 nil )
+                                (!pair  "id"
+                                 (!type already_seen 23)
+                                 (!srcfileloc  "c/c-decl.c" 193)
+                                 nil )
+                                (!pair  "prev"
+                                 (!type already_seen 635)
+                                 (!srcfileloc  "c/c-decl.c" 194)
+                                 nil )
+                                (!pair  "shadowed"
+                                 (!type already_seen 635)
+                                 (!srcfileloc  "c/c-decl.c" 195)
+                                 nil )
+                                (!pair  "depth"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "c/c-decl.c" 196)
+                                 nil )
+                                (!pair  "invisible"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "c/c-decl.c" 197)
+                                 nil )
+                                (!pair  "nested"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "c/c-decl.c" 198)
+                                 nil )
+                                (!pair  "inner_comp"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "c/c-decl.c" 199)
+                                 nil )
+                                (!pair  "in_struct"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "c/c-decl.c" 200)
+                                 nil )
+                                (!pair  "locus"
+                                 (!type already_seen 2)
+                                 (!srcfileloc  "c/c-decl.c" 201)
+                                 nil )
+                               )
+                               (!options 
+                                (!option chain_next string  "%h.prev")
+                               )
+                               516 nil nil )
+                             )
+                             (!srcfileloc  "c/c-decl.c" 214)
+                             nil )
+                            (!pair  "tag_binding"
+                             (!type already_seen 635)
+                             (!srcfileloc  "c/c-decl.c" 215)
+                             nil )
+                            (!pair  "label_binding"
+                             (!type already_seen 635)
+                             (!srcfileloc  "c/c-decl.c" 216)
+                             nil )
+                           )
+                           nil 516 
+                           (!type already_seen 626)
+                           nil )
+                          
+                          (!type struct 647 nil  gc_used "lang_identifier"
+                           (!srcfileloc  "brig/brig-lang.c" 86)
+                           (!fields 1 
+                            (!pair  "common"
+                             (!type already_seen 51)
+                             (!srcfileloc  "brig/brig-lang.c" 85)
+                             nil )
+                           )
+                           nil 2 
+                           (!type already_seen 626)
+                           nil )
+                         )
+                        )
+                        (!srcfileloc  "jit/dummy-frontend.c" 63)
+                        (!options 
+                         (!option tag string  "1")
+                        )
+                       )
+                      )
+                      (!options 
+                       (!option chain_next string  "CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN (&%h.generic)) : NULL")
+                       (!option desc string  "TREE_CODE (&%h.generic) == IDENTIFIER_NODE")
+                      )
+                      128 
+                      (!type already_seen 623)
+                     )
+                     
+                     (!type union 648 nil  gc_pointed_to "lang_tree_node"
+                      (!srcfileloc  "go/go-lang.c" 77)
+                      (!fields 2 
+                       (!pair  "generic"
+                        (!type already_seen 22)
+                        (!srcfileloc  "go/go-lang.c" 75)
+                        (!options 
+                         (!option desc string  "tree_node_structure (&%h)")
+                         (!option tag string  "0")
+                        )
+                       )
+                       (!pair  "identifier"
+                        (!type already_seen 626)
+                        (!srcfileloc  "go/go-lang.c" 76)
+                        (!options 
+                         (!option tag string  "1")
+                        )
+                       )
+                      )
+                      (!options 
+                       (!option chain_next string  "CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN (&%h.generic)) : NULL")
+                       (!option desc string  "TREE_CODE (&%h.generic) == IDENTIFIER_NODE")
+                      )
+                      64 
+                      (!type already_seen 623)
+                     )
+                     
+                     (!type union 649 nil  gc_pointed_to "lang_tree_node"
+                      (!srcfileloc  "fortran/f95-lang.c" 58)
+                      (!fields 2 
+                       (!pair  "generic"
+                        (!type already_seen 22)
+                        (!srcfileloc  "fortran/f95-lang.c" 56)
+                        (!options 
+                         (!option desc string  "tree_node_structure (&%h)")
+                         (!option tag string  "0")
+                        )
+                       )
+                       (!pair  "identifier"
+                        (!type already_seen 626)
+                        (!srcfileloc  "fortran/f95-lang.c" 57)
+                        (!options 
+                         (!option tag string  "1")
+                        )
+                       )
+                      )
+                      (!options 
+                       (!option chain_next string  "CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN (&%h.generic)) : NULL")
+                       (!option desc string  "TREE_CODE (&%h.generic) == IDENTIFIER_NODE")
+                      )
+                      32 
+                      (!type already_seen 623)
+                     )
+                     
+                     (!type union 650 nil  gc_pointed_to "lang_tree_node"
+                      (!srcfileloc  "d/d-tree.h" 336)
+                      (!fields 3 
+                       (!pair  "generic"
+                        (!type already_seen 22)
+                        (!srcfileloc  "d/d-tree.h" 333)
+                        (!options 
+                         (!option desc string  "tree_node_structure (&%h)")
+                         (!option tag string  "TS_D_GENERIC")
+                        )
+                       )
+                       (!pair  "identifier"
+                        (!type already_seen 626)
+                        (!srcfileloc  "d/d-tree.h" 334)
+                        (!options 
+                         (!option tag string  "TS_D_IDENTIFIER")
+                        )
+                       )
+                       (!pair  "frameinfo"
+                        (!type struct 651 nil  gc_used "tree_frame_info"
+                         (!srcfileloc  "d/d-tree.h" 335)
+                         (!fields 2 
+                          (!pair  "common"
+                           (!type already_seen 32)
+                           (!srcfileloc  "d/d-tree.h" 174)
+                           nil )
+                          (!pair  "frame_type"
+                           (!type already_seen 23)
+                           (!srcfileloc  "d/d-tree.h" 175)
+                           nil )
+                         )
+                         nil 16 nil nil )
+                        (!srcfileloc  "d/d-tree.h" 335)
+                        (!options 
+                         (!option tag string  "TS_D_FRAMEINFO")
+                        )
+                       )
+                      )
+                      (!options 
+                       (!option chain_next string  "CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN (&%h.generic)) : NULL")
+                       (!option desc string  "d_tree_node_structure (&%h)")
+                      )
+                      16 
+                      (!type already_seen 623)
+                     )
+                     
+                     (!type union 652 nil  gc_pointed_to "lang_tree_node"
+                      (!srcfileloc  "cp/cp-tree.h" 1611)
+                      (!fields 16 
+                       (!pair  "generic"
+                        (!type already_seen 22)
+                        (!srcfileloc  "cp/cp-tree.h" 1588)
+                        (!options 
+                         (!option desc string  "tree_node_structure (&%h)")
+                         (!option tag string  "TS_CP_GENERIC")
+                        )
+                       )
+                       (!pair  "tpi"
+                        (!type struct 653 nil  gc_used "template_parm_index"
+                         (!srcfileloc  "cp/cp-tree.h" 629)
+                         (!fields 5 
+                          (!pair  "common"
+                           (!type already_seen 32)
+                           (!srcfileloc  "cp/cp-tree.h" 624)
+                           nil )
+                          (!pair  "index"
+                           (!type already_seen 2)
+                           (!srcfileloc  "cp/cp-tree.h" 625)
+                           nil )
+                          (!pair  "level"
+                           (!type already_seen 2)
+                           (!srcfileloc  "cp/cp-tree.h" 626)
+                           nil )
+                          (!pair  "orig_level"
+                           (!type already_seen 2)
+                           (!srcfileloc  "cp/cp-tree.h" 627)
+                           nil )
+                          (!pair  "decl"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 628)
+                           nil )
+                         )
+                         nil 1032 nil nil )
+                        (!srcfileloc  "cp/cp-tree.h" 1589)
+                        (!options 
+                         (!option tag string  "TS_CP_TPI")
+                        )
+                       )
+                       (!pair  "ptrmem"
+                        (!type struct 654 
+                         (!type pointer 655 nil  gc_unused
+                          (!type already_seen 654)
+                         )
+                         gc_used "ptrmem_cst"
+                         (!srcfileloc  "cp/cp-tree.h" 634)
+                         (!fields 2 
+                          (!pair  "common"
+                           (!type already_seen 32)
+                           (!srcfileloc  "cp/cp-tree.h" 632)
+                           nil )
+                          (!pair  "member"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 633)
+                           nil )
+                         )
+                         nil 1032 nil nil )
+                        (!srcfileloc  "cp/cp-tree.h" 1590)
+                        (!options 
+                         (!option tag string  "TS_CP_PTRMEM")
+                        )
+                       )
+                       (!pair  "overload"
+                        (!type struct 656 nil  gc_used "tree_overload"
+                         (!srcfileloc  "cp/cp-tree.h" 733)
+                         (!fields 2 
+                          (!pair  "common"
+                           (!type already_seen 32)
+                           (!srcfileloc  "cp/cp-tree.h" 731)
+                           nil )
+                          (!pair  "function"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 732)
+                           nil )
+                         )
+                         nil 1032 nil nil )
+                        (!srcfileloc  "cp/cp-tree.h" 1591)
+                        (!options 
+                         (!option tag string  "TS_CP_OVERLOAD")
+                        )
+                       )
+                       (!pair  "baselink"
+                        (!type struct 657 nil  gc_used "tree_baselink"
+                         (!srcfileloc  "cp/cp-tree.h" 945)
+                         (!fields 4 
+                          (!pair  "common"
+                           (!type already_seen 32)
+                           (!srcfileloc  "cp/cp-tree.h" 941)
+                           nil )
+                          (!pair  "binfo"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 942)
+                           nil )
+                          (!pair  "functions"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 943)
+                           nil )
+                          (!pair  "access_binfo"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 944)
+                           nil )
+                         )
+                         nil 1032 nil nil )
+                        (!srcfileloc  "cp/cp-tree.h" 1592)
+                        (!options 
+                         (!option tag string  "TS_CP_BASELINK")
+                        )
+                       )
+                       (!pair  "template_decl"
+                        (!type struct 658 nil  gc_used "tree_template_decl"
+                         (!srcfileloc  "cp/cp-tree.h" 907)
+                         (!fields 3 
+                          (!pair  "common"
+                           (!type already_seen 53)
+                           (!srcfileloc  "cp/cp-tree.h" 904)
+                           nil )
+                          (!pair  "arguments"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 905)
+                           nil )
+                          (!pair  "result"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 906)
+                           nil )
+                         )
+                         nil 1032 nil nil )
+                        (!srcfileloc  "cp/cp-tree.h" 1593)
+                        (!options 
+                         (!option tag string  "TS_CP_TEMPLATE_DECL")
+                        )
+                       )
+                       (!pair  "default_arg"
+                        (!type struct 659 nil  gc_used "tree_default_arg"
+                         (!srcfileloc  "cp/cp-tree.h" 1187)
+                         (!fields 3 
+                          (!pair  "common"
+                           (!type already_seen 32)
+                           (!srcfileloc  "cp/cp-tree.h" 1184)
+                           nil )
+                          (!pair  "tokens"
+                           (!type already_seen 70)
+                           (!srcfileloc  "cp/cp-tree.h" 1185)
+                           nil )
+                          (!pair  "instantiations"
+                           (!type already_seen 96)
+                           (!srcfileloc  "cp/cp-tree.h" 1186)
+                           nil )
+                         )
+                         nil 1032 nil nil )
+                        (!srcfileloc  "cp/cp-tree.h" 1594)
+                        (!options 
+                         (!option tag string  "TS_CP_DEFAULT_ARG")
+                        )
+                       )
+                       (!pair  "deferred_noexcept"
+                        (!type struct 660 nil  gc_used "tree_deferred_noexcept"
+                         (!srcfileloc  "cp/cp-tree.h" 1205)
+                         (!fields 3 
+                          (!pair  "base"
+                           (!type already_seen 25)
+                           (!srcfileloc  "cp/cp-tree.h" 1202)
+                           nil )
+                          (!pair  "pattern"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 1203)
+                           nil )
+                          (!pair  "args"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 1204)
+                           nil )
+                         )
+                         nil 1032 nil nil )
+                        (!srcfileloc  "cp/cp-tree.h" 1595)
+                        (!options 
+                         (!option tag string  "TS_CP_DEFERRED_NOEXCEPT")
+                        )
+                       )
+                       (!pair  "identifier"
+                        (!type already_seen 626)
+                        (!srcfileloc  "cp/cp-tree.h" 1596)
+                        (!options 
+                         (!option tag string  "TS_CP_IDENTIFIER")
+                        )
+                       )
+                       (!pair  "static_assertion"
+                        (!type struct 661 nil  gc_used "tree_static_assert"
+                         (!srcfileloc  "cp/cp-tree.h" 1228)
+                         (!fields 4 
+                          (!pair  "common"
+                           (!type already_seen 32)
+                           (!srcfileloc  "cp/cp-tree.h" 1224)
+                           nil )
+                          (!pair  "condition"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 1225)
+                           nil )
+                          (!pair  "message"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 1226)
+                           nil )
+                          (!pair  "location"
+                           (!type already_seen 2)
+                           (!srcfileloc  "cp/cp-tree.h" 1227)
+                           nil )
+                         )
+                         nil 1032 nil nil )
+                        (!srcfileloc  "cp/cp-tree.h" 1598)
+                        (!options 
+                         (!option tag string  "TS_CP_STATIC_ASSERT")
+                        )
+                       )
+                       (!pair  "argument_pack_select"
+                        (!type struct 662 nil  gc_used "tree_argument_pack_select"
+                         (!srcfileloc  "cp/cp-tree.h" 1234)
+                         (!fields 3 
+                          (!pair  "common"
+                           (!type already_seen 32)
+                           (!srcfileloc  "cp/cp-tree.h" 1231)
+                           nil )
+                          (!pair  "argument_pack"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 1232)
+                           nil )
+                          (!pair  "index"
+                           (!type already_seen 2)
+                           (!srcfileloc  "cp/cp-tree.h" 1233)
+                           nil )
+                         )
+                         nil 1032 nil nil )
+                        (!srcfileloc  "cp/cp-tree.h" 1600)
+                        (!options 
+                         (!option tag string  "TS_CP_ARGUMENT_PACK_SELECT")
+                        )
+                       )
+                       (!pair  "trait_expression"
+                        (!type struct 663 nil  gc_used "tree_trait_expr"
+                         (!srcfileloc  "cp/cp-tree.h" 1289)
+                         (!fields 4 
+                          (!pair  "common"
+                           (!type already_seen 32)
+                           (!srcfileloc  "cp/cp-tree.h" 1285)
+                           nil )
+                          (!pair  "type1"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 1286)
+                           nil )
+                          (!pair  "type2"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 1287)
+                           nil )
+                          (!pair  "kind"
+                           (!type already_seen 2)
+                           (!srcfileloc  "cp/cp-tree.h" 1288)
+                           nil )
+                         )
+                         nil 1032 nil nil )
+                        (!srcfileloc  "cp/cp-tree.h" 1602)
+                        (!options 
+                         (!option tag string  "TS_CP_TRAIT_EXPR")
+                        )
+                       )
+                       (!pair  "lambda_expression"
+                        (!type struct 664 nil  gc_used "tree_lambda_expr"
+                         (!srcfileloc  "cp/cp-tree.h" 1381)
+                         (!fields 8 
+                          (!pair  "typed"
+                           (!type already_seen 31)
+                           (!srcfileloc  "cp/cp-tree.h" 1373)
+                           nil )
+                          (!pair  "capture_list"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 1374)
+                           nil )
+                          (!pair  "this_capture"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 1375)
+                           nil )
+                          (!pair  "extra_scope"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 1376)
+                           nil )
+                          (!pair  "pending_proxies"
+                           (!type already_seen 96)
+                           (!srcfileloc  "cp/cp-tree.h" 1377)
+                           nil )
+                          (!pair  "locus"
+                           (!type already_seen 2)
+                           (!srcfileloc  "cp/cp-tree.h" 1378)
+                           nil )
+                          (!pair  "default_capture_mode"
+                           (!type already_seen 2)
+                           (!srcfileloc  "cp/cp-tree.h" 1379)
+                           nil )
+                          (!pair  "discriminator"
+                           (!type already_seen 2)
+                           (!srcfileloc  "cp/cp-tree.h" 1380)
+                           nil )
+                         )
+                         nil 1032 nil nil )
+                        (!srcfileloc  "cp/cp-tree.h" 1604)
+                        (!options 
+                         (!option tag string  "TS_CP_LAMBDA_EXPR")
+                        )
+                       )
+                       (!pair  "template_info"
+                        (!type struct 665 nil  gc_used "tree_template_info"
+                         (!srcfileloc  "cp/cp-tree.h" 1421)
+                         (!fields 2 
+                          (!pair  "common"
+                           (!type already_seen 32)
+                           (!srcfileloc  "cp/cp-tree.h" 1419)
+                           nil )
+                          (!pair  "typedefs_needing_access_checking"
+                           (!type pointer 666 nil  gc_used
+                            (!type user_struct 667 
+                             (!type already_seen 666)
+                             gc_pointed_to "vec<qualified_typedef_usage_t,va_gc>"
+                             (!srcfileloc  "cp/cp-tree.h" 1420)
+                             (!fields 2 
+                              (!pair  "va_gc"
+                               (!type already_seen 79)
+                               (!srcfileloc  "cp/cp-tree.h" 1420)
+                               nil )
+                              (!pair  "qualified_typedef_usage_t"
+                               (!type struct 668 nil  gc_used "qualified_typedef_usage_s"
+                                (!srcfileloc  "cp/cp-tree.h" 1401)
+                                (!fields 3 
+                                 (!pair  "typedef_decl"
+                                  (!type already_seen 23)
+                                  (!srcfileloc  "cp/cp-tree.h" 1398)
+                                  nil )
+                                 (!pair  "context"
+                                  (!type already_seen 23)
+                                  (!srcfileloc  "cp/cp-tree.h" 1399)
+                                  nil )
+                                 (!pair  "locus"
+                                  (!type already_seen 2)
+                                  (!srcfileloc  "cp/cp-tree.h" 1400)
+                                  nil )
+                                )
+                                nil 1032 nil nil )
+                               (!srcfileloc  "cp/cp-tree.h" 1420)
+                               nil )
+                             )
+                            )
+                           )
+                           (!srcfileloc  "cp/cp-tree.h" 1420)
+                           nil )
+                         )
+                         nil 1032 nil nil )
+                        (!srcfileloc  "cp/cp-tree.h" 1606)
+                        (!options 
+                         (!option tag string  "TS_CP_TEMPLATE_INFO")
+                        )
+                       )
+                       (!pair  "constraint_info"
+                        (!type struct 669 nil  gc_used "tree_constraint_info"
+                         (!srcfileloc  "cp/cp-tree.h" 1438)
+                         (!fields 4 
+                          (!pair  "base"
+                           (!type already_seen 25)
+                           (!srcfileloc  "cp/cp-tree.h" 1434)
+                           nil )
+                          (!pair  "template_reqs"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 1435)
+                           nil )
+                          (!pair  "declarator_reqs"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 1436)
+                           nil )
+                          (!pair  "associated_constr"
+                           (!type already_seen 23)
+                           (!srcfileloc  "cp/cp-tree.h" 1437)
+                           nil )
+                         )
+                         nil 1032 nil nil )
+                        (!srcfileloc  "cp/cp-tree.h" 1608)
+                        (!options 
+                         (!option tag string  "TS_CP_CONSTRAINT_INFO")
+                        )
+                       )
+                       (!pair  "userdef_literal"
+                        (!type struct 670 nil  gc_used "tree_userdef_literal"
+                         (!srcfileloc  "c-family/c-common.h" 1234)
+                         (!fields 5 
+                          (!pair  "base"
+                           (!type already_seen 25)
+                           (!srcfileloc  "c-family/c-common.h" 1229)
+                           nil )
+                          (!pair  "suffix_id"
+                           (!type already_seen 23)
+                           (!srcfileloc  "c-family/c-common.h" 1230)
+                           nil )
+                          (!pair  "value"
+                           (!type already_seen 23)
+                           (!srcfileloc  "c-family/c-common.h" 1231)
+                           nil )
+                          (!pair  "num_string"
+                           (!type already_seen 23)
+                           (!srcfileloc  "c-family/c-common.h" 1232)
+                           nil )
+                          (!pair  "overflow"
+                           (!type already_seen 2)
+                           (!srcfileloc  "c-family/c-common.h" 1233)
+                           nil )
+                         )
+                         nil 1548 nil nil )
+                        (!srcfileloc  "cp/cp-tree.h" 1610)
+                        (!options 
+                         (!option tag string  "TS_CP_USERDEF_LITERAL")
+                        )
+                       )
+                      )
+                      (!options 
+                       (!option chain_next string  "(union lang_tree_node *) c_tree_chain_next (&%h.generic)")
+                       (!option desc string  "cp_tree_node_structure (&%h)")
+                      )
+                      1032 
+                      (!type already_seen 623)
+                     )
+                     
+                     (!type union 671 nil  gc_pointed_to "lang_tree_node"
+                      (!srcfileloc  "c/c-decl.c" 322)
+                      (!fields 2 
+                       (!pair  "generic"
+                        (!type already_seen 22)
+                        (!srcfileloc  "c/c-decl.c" 320)
+                        (!options 
+                         (!option desc string  "tree_node_structure (&%h)")
+                         (!option tag string  "0")
+                        )
+                       )
+                       (!pair  "identifier"
+                        (!type already_seen 626)
+                        (!srcfileloc  "c/c-decl.c" 321)
+                        (!options 
+                         (!option tag string  "1")
+                        )
+                       )
+                      )
+                      (!options 
+                       (!option chain_next string  "(union lang_tree_node *) c_tree_chain_next (&%h.generic)")
+                       (!option desc string  "TREE_CODE (&%h.generic) == IDENTIFIER_NODE")
+                      )
+                      516 
+                      (!type already_seen 623)
+                     )
+                     
+                     (!type union 672 nil  gc_pointed_to "lang_tree_node"
+                      (!srcfileloc  "brig/brig-lang.c" 97)
+                      (!fields 2 
+                       (!pair  "generic"
+                        (!type already_seen 22)
+                        (!srcfileloc  "brig/brig-lang.c" 95)
+                        (!options 
+                         (!option desc string  "tree_node_structure (&%h)")
+                         (!option tag string  "0")
+                        )
+                       )
+                       (!pair  "identifier"
+                        (!type already_seen 626)
+                        (!srcfileloc  "brig/brig-lang.c" 96)
+                        (!options 
+                         (!option tag string  "1")
+                        )
+                       )
+                      )
+                      (!options 
+                       (!option chain_next string  "CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN (&%h.generic)) : NULL")
+                       (!option desc string  "TREE_CODE (&%h.generic) == IDENTIFIER_NODE")
+                      )
+                      2 
+                      (!type already_seen 623)
+                     )
+                     
+                     (!type union 673 nil  gc_pointed_to "lang_tree_node"
+                      (!srcfileloc  "ada/gcc-interface/ada-tree.h" 33)
+                      (!fields 1 
+                       (!pair  "generic"
+                        (!type already_seen 22)
+                        (!srcfileloc  "ada/gcc-interface/ada-tree.h" 32)
+                        (!options 
+                         (!option desc string  "tree_node_structure (&%h)")
+                         (!option tag string  "0")
+                        )
+                       )
+                      )
+                      (!options 
+                       (!option chain_next string  "CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN (&%h.generic)) : NULL")
+                       (!option desc string  "0")
+                      )
+                      1 
+                      (!type already_seen 623)
+                     )
+                    )
+                   )
+                  )
+                 )
+                 2047 nil )
+                "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL" "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL")
+               (!option tag string  "false")
+              )
+             )
+             (!pair  "next"
+              (!type already_seen 19)
+              (!srcfileloc  "../libcpp/include/cpplib.h" 754)
+              (!options 
+               (!option tag string  "true")
+              )
+             )
+            )
+            nil 2047 nil )
+           (!srcfileloc  "../libcpp/include/cpplib.h" 755)
+           (!options 
+            (!option desc string  "%1.kind == cmk_assert")
+           )
+          )
+          (!pair  "line"
+           (!type already_seen 2)
+           (!srcfileloc  "../libcpp/include/cpplib.h" 758)
+           nil )
+          (!pair  "count"
+           (!type already_seen 2)
+           (!srcfileloc  "../libcpp/include/cpplib.h" 762)
+           nil )
+          (!pair  "paramc"
+           (!type already_seen 2)
+           (!srcfileloc  "../libcpp/include/cpplib.h" 765)
+           nil )
+          (!pair  "lazy"
+           (!type already_seen 8)
+           (!srcfileloc  "../libcpp/include/cpplib.h" 768)
+           nil )
+          (!pair  "kind"
+           (!type already_seen 2)
+           (!srcfileloc  "../libcpp/include/cpplib.h" 771)
+           nil )
+          (!pair  "fun_like"
+           (!type already_seen 2)
+           (!srcfileloc  "../libcpp/include/cpplib.h" 774)
+           nil )
+          (!pair  "variadic"
+           (!type already_seen 2)
+           (!srcfileloc  "../libcpp/include/cpplib.h" 777)
+           nil )
+          (!pair  "syshdr"
+           (!type already_seen 2)
+           (!srcfileloc  "../libcpp/include/cpplib.h" 780)
+           nil )
+          (!pair  "used"
+           (!type already_seen 2)
+           (!srcfileloc  "../libcpp/include/cpplib.h" 783)
+           nil )
+          (!pair  "extra_tokens"
+           (!type already_seen 2)
+           (!srcfileloc  "../libcpp/include/cpplib.h" 788)
+           nil )
+          (!pair  "exp"
+           (!type union 674 nil  gc_used "cpp_exp_u"
+            (!srcfileloc  "../libcpp/include/cpplib.h" 801)
+            (!fields 2 
+             (!pair  "tokens"
+              (!type array 675 nil  gc_used "1" 
+               (!type struct 676 
+                (!type pointer 677 nil  gc_used
+                 (!type already_seen 676)
+                )
+                gc_pointed_to "cpp_token"
+                (!srcfileloc  "../libcpp/include/cpplib.h" 271)
+                (!fields 4 
+                 (!pair  "src_loc"
+                  (!type already_seen 2)
+                  (!srcfileloc  "../libcpp/include/cpplib.h" 245)
+                  nil )
+                 (!pair  "type"
+                  (!type already_seen 2)
+                  (!srcfileloc  "../libcpp/include/cpplib.h" 247)
+                  nil )
+                 (!pair  "flags"
+                  (!type already_seen 2)
+                  (!srcfileloc  "../libcpp/include/cpplib.h" 248)
+                  nil )
+                 (!pair  "val"
+                  (!type union 678 nil  gc_used "cpp_token_u"
+                   (!srcfileloc  "../libcpp/include/cpplib.h" 270)
+                   (!fields 6 
+                    (!pair  "node"
+                     (!type struct 679 nil  gc_used "cpp_identifier"
+                      (!srcfileloc  "../libcpp/include/cpplib.h" 238)
+                      (!fields 2 
+                       (!pair  "node"
+                        (!type already_seen 13)
+                        (!srcfileloc  "../libcpp/include/cpplib.h" 231)
+                        (!options 
+                         (!option nested_ptr nested 
+                          (!type already_seen 22)
+                          "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL" "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL")
+                        )
+                       )
+                       (!pair  "spelling"
+                        (!type already_seen 13)
+                        (!srcfileloc  "../libcpp/include/cpplib.h" 237)
+                        (!options 
+                         (!option nested_ptr nested 
+                          (!type already_seen 22)
+                          "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL" "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL")
+                        )
+                       )
+                      )
+                      nil 2047 nil nil )
+                     (!srcfileloc  "../libcpp/include/cpplib.h" 253)
+                     (!options 
+                      (!option tag string  "CPP_TOKEN_FLD_NODE")
+                     )
+                    )
+                    (!pair  "source"
+                     (!type already_seen 677)
+                     (!srcfileloc  "../libcpp/include/cpplib.h" 256)
+                     (!options 
+                      (!option tag string  "CPP_TOKEN_FLD_SOURCE")
+                     )
+                    )
+                    (!pair  "str"
+                     (!type struct 680 nil  gc_used "cpp_string"
+                      (!srcfileloc  "../libcpp/include/cpplib.h" 181)
+                      (!fields 2 
+                       (!pair  "len"
+                        (!type already_seen 2)
+                        (!srcfileloc  "../libcpp/include/cpplib.h" 179)
+                        nil )
+                       (!pair  "text"
+                        (!type already_seen 11)
+                        (!srcfileloc  "../libcpp/include/cpplib.h" 180)
+                        nil )
+                      )
+                      nil 2047 nil nil )
+                     (!srcfileloc  "../libcpp/include/cpplib.h" 259)
+                     (!options 
+                      (!option tag string  "CPP_TOKEN_FLD_STR")
+                     )
+                    )
+                    (!pair  "macro_arg"
+                     (!type struct 681 nil  gc_used "cpp_macro_arg"
+                      (!srcfileloc  "../libcpp/include/cpplib.h" 222)
+                      (!fields 2 
+                       (!pair  "arg_no"
+                        (!type already_seen 2)
+                        (!srcfileloc  "../libcpp/include/cpplib.h" 215)
+                        nil )
+                       (!pair  "spelling"
+                        (!type already_seen 13)
+                        (!srcfileloc  "../libcpp/include/cpplib.h" 221)
+                        (!options 
+                         (!option nested_ptr nested 
+                          (!type already_seen 22)
+                          "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL" "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL")
+                        )
+                       )
+                      )
+                      nil 2047 nil nil )
+                     (!srcfileloc  "../libcpp/include/cpplib.h" 262)
+                     (!options 
+                      (!option tag string  "CPP_TOKEN_FLD_ARG_NO")
+                     )
+                    )
+                    (!pair  "token_no"
+                     (!type already_seen 2)
+                     (!srcfileloc  "../libcpp/include/cpplib.h" 266)
+                     (!options 
+                      (!option tag string  "CPP_TOKEN_FLD_TOKEN_NO")
+                     )
+                    )
+                    (!pair  "pragma"
+                     (!type already_seen 2)
+                     (!srcfileloc  "../libcpp/include/cpplib.h" 269)
+                     (!options 
+                      (!option tag string  "CPP_TOKEN_FLD_PRAGMA")
+                     )
+                    )
+                   )
+                   nil 2047 nil )
+                  (!srcfileloc  "../libcpp/include/cpplib.h" 270)
+                  (!options 
+                   (!option desc string  "cpp_token_val_index (&%1)")
+                  )
+                 )
+                )
+                nil 2047 nil nil )
+              )
+              (!srcfileloc  "../libcpp/include/cpplib.h" 795)
+              (!options 
+               (!option length string  "%1.count")
+               (!option tag string  "false")
+              )
+             )
+             (!pair  "text"
+              (!type already_seen 11)
+              (!srcfileloc  "../libcpp/include/cpplib.h" 800)
+              (!options 
+               (!option tag string  "true")
+              )
+             )
+            )
+            nil 2047 nil )
+           (!srcfileloc  "../libcpp/include/cpplib.h" 801)
+           (!options 
+            (!option desc string  "%1.kind == cmk_traditional")
+           )
+          )
+         )
+         nil 2047 nil nil )
+       )
+       (!srcfileloc  "../libcpp/include/cpplib.h" 859)
+       (!options 
+        (!option tag string  "NT_VOID")
+       )
+      )
+      (!pair  "macro"
+       (!type already_seen 19)
+       (!srcfileloc  "../libcpp/include/cpplib.h" 861)
+       (!options 
+        (!option tag string  "NT_USER_MACRO")
+       )
+      )
+      (!pair  "builtin"
+       (!type already_seen 2)
+       (!srcfileloc  "../libcpp/include/cpplib.h" 863)
+       (!options 
+        (!option tag string  "NT_BUILTIN_MACRO")
+       )
+      )
+      (!pair  "arg_index"
+       (!type already_seen 2)
+       (!srcfileloc  "../libcpp/include/cpplib.h" 865)
+       (!options 
+        (!option tag string  "NT_MACRO_ARG")
+       )
+      )
+     )
+     nil 2047 nil )
+    (!srcfileloc  "../libcpp/include/cpplib.h" 880)
+    (!options 
+     (!option desc string  "%1.type")
+    )
+   )
+  )
+  nil 2047 nil nil )
+ 
+ (!type already_seen 22)
+ 
+ (!type struct 682 
+  (!type pointer 683 nil  gc_unused
+   (!type already_seen 682)
+  )
+  gc_used "line_map_macro"
+  (!srcfileloc  "../libcpp/include/line-map.h" 733)
+  (!fields 4 
+   (!pair  "n_tokens"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 463)
+    nil )
+   (!pair  "macro"
+    (!type already_seen 13)
+    (!srcfileloc  "../libcpp/include/line-map.h" 472)
+    (!options 
+     (!option nested_ptr nested 
+      (!type already_seen 22)
+      "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL" "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL")
+    )
+   )
+   (!pair  "macro_locations"
+    (!type already_seen 3)
+    (!srcfileloc  "../libcpp/include/line-map.h" 527)
+    (!options 
+     (!option atomic string  "")
+    )
+   )
+   (!pair  "expansion"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 534)
+    nil )
+  )
+  (!options 
+   (!option tag string  "2")
+  )
+  2047 nil 
+  (!type already_seen 5)
+ )
+ 
+ (!type struct 684 nil  gc_used "maps_info_ordinary"
+  (!srcfileloc  "../libcpp/include/line-map.h" 777)
+  (!fields 4 
+   (!pair  "maps"
+    (!type already_seen 7)
+    (!srcfileloc  "../libcpp/include/line-map.h" 718)
+    (!options 
+     (!option length string  "%h.used")
+    )
+   )
+   (!pair  "allocated"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 721)
+    nil )
+   (!pair  "used"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 725)
+    nil )
+   (!pair  "cache"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 727)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 685 nil  gc_used "maps_info_macro"
+  (!srcfileloc  "../libcpp/include/line-map.h" 779)
+  (!fields 4 
+   (!pair  "maps"
+    (!type already_seen 683)
+    (!srcfileloc  "../libcpp/include/line-map.h" 733)
+    (!options 
+     (!option length string  "%h.used")
+    )
+   )
+   (!pair  "allocated"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 736)
+    nil )
+   (!pair  "used"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 740)
+    nil )
+   (!pair  "cache"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 742)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 686 
+  (!type pointer 687 nil  gc_unused
+   (!type already_seen 686)
+  )
+  gc_used "location_adhoc_data"
+  (!srcfileloc  "../libcpp/include/line-map.h" 751)
+  (!fields 3 
+   (!pair  "locus"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 748)
+    nil )
+   (!pair  "src_range"
+    (!type already_seen 1)
+    (!srcfileloc  "../libcpp/include/line-map.h" 749)
+    nil )
+   (!pair  "data"
+    (!type already_seen 3)
+    (!srcfileloc  "../libcpp/include/line-map.h" 750)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+  )
+  nil 2047 nil nil )
+ 
+ (!type already_seen 389)
+ 
+ (!type struct 688 nil  gc_used "location_adhoc_data_map"
+  (!srcfileloc  "../libcpp/include/line-map.h" 770)
+  (!fields 4 
+   (!pair  "htab"
+    (!type already_seen 388)
+    (!srcfileloc  "../libcpp/include/line-map.h" 766)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "curr_loc"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 767)
+    nil )
+   (!pair  "allocated"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 768)
+    nil )
+   (!pair  "data"
+    (!type already_seen 687)
+    (!srcfileloc  "../libcpp/include/line-map.h" 769)
+    (!options 
+     (!option length string  "%h.allocated")
+    )
+   )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 689 
+  (!type pointer 690 nil  gc_used
+   (!type already_seen 689)
+  )
+  gc_pointed_to "line_maps"
+  (!srcfileloc  "../libcpp/include/line-map.h" 818)
+  (!fields 15 
+   (!pair  "info_ordinary"
+    (!type already_seen 684)
+    (!srcfileloc  "../libcpp/include/line-map.h" 777)
+    nil )
+   (!pair  "info_macro"
+    (!type already_seen 685)
+    (!srcfileloc  "../libcpp/include/line-map.h" 779)
+    nil )
+   (!pair  "depth"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 782)
+    nil )
+   (!pair  "trace_includes"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 785)
+    nil )
+   (!pair  "highest_location"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 788)
+    nil )
+   (!pair  "highest_line"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 791)
+    nil )
+   (!pair  "max_column_hint"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 795)
+    nil )
+   (!pair  "reallocator"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 798)
+    nil )
+   (!pair  "round_alloc_size"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 802)
+    nil )
+   (!pair  "location_adhoc_data_map"
+    (!type already_seen 688)
+    (!srcfileloc  "../libcpp/include/line-map.h" 804)
+    nil )
+   (!pair  "builtin_location"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 808)
+    nil )
+   (!pair  "seen_line_directive"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 811)
+    nil )
+   (!pair  "default_range_bits"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 814)
+    nil )
+   (!pair  "num_optimized_ranges"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 816)
+    nil )
+   (!pair  "num_unoptimized_ranges"
+    (!type already_seen 2)
+    (!srcfileloc  "../libcpp/include/line-map.h" 817)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 691 nil  gc_unused "anonymous:../../linaro/gcc/../libcpp/include/line-map.h:1277"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 692 nil  gc_unused "range_label"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 693 nil  gc_unused "location_range"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 694 nil  gc_unused "semi_embedded_vec"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 695 nil  gc_unused "fixit_hint"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 696 nil  gc_unused "rich_location"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 697 nil  gc_unused "label_text"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 698 nil  gc_unused "linemap_stats"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 699 nil  gc_unused "cpp_reader"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 700 nil  gc_unused "cpp_buffer"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 701 nil  gc_unused "cpp_options"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 676)
+ 
+ (!type already_seen 680)
+ 
+ (!type already_seen 20)
+ 
+ (!type struct 702 nil  gc_unused "cpp_callbacks"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 703 nil  gc_unused "cpp_dir"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 704 nil  gc_unused "_cpp_file"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 681)
+ 
+ (!type already_seen 679)
+ 
+ (!type already_seen 678)
+ 
+ (!type already_seen 21)
+ 
+ (!type already_seen 674)
+ 
+ (!type already_seen 18)
+ 
+ (!type already_seen 15)
+ 
+ (!type struct 705 nil  gc_unused "cpp_string_location_reader"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 706 nil  gc_unused "cpp_substring_ranges"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 707 nil  gc_unused "cpp_num"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 708 nil  gc_unused "anonymous:../../linaro/gcc/../libcpp/include/cpplib.h:1219"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 709 nil  gc_unused "anonymous:../../linaro/gcc/../libcpp/include/cpplib.h:1230"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 710 nil  gc_unused "save_macro_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 711 nil  gc_unused "char_span"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 712 
+  (!type pointer 713 nil  gc_used
+   (!type already_seen 712)
+  )
+  gc_pointed_to "string_concat"
+  (!srcfileloc  "input.h" 184)
+  (!fields 2 
+   (!pair  "m_num"
+    (!type already_seen 2)
+    (!srcfileloc  "input.h" 182)
+    nil )
+   (!pair  "m_locs"
+    (!type already_seen 3)
+    (!srcfileloc  "input.h" 183)
+    (!options 
+     (!option atomic string  "")
+    )
+   )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 714 nil  gc_used "location_hash"
+  (!srcfileloc  "input.h" 210)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type struct 715 
+  (!type pointer 716 nil  gc_used
+   (!type already_seen 715)
+  )
+  gc_pointed_to "string_concat_db"
+  (!srcfileloc  "input.h" 211)
+  (!fields 1 
+   (!pair  "m_table"
+    (!type pointer 717 nil  gc_used
+     (!type user_struct 718 
+      (!type already_seen 717)
+      gc_pointed_to "hash_map<location_hash,string_concat*>"
+      (!srcfileloc  "input.h" 210)
+      (!fields 2 
+       (!pair  "string_concat"
+        (!type already_seen 713)
+        (!srcfileloc  "input.h" 210)
+        nil )
+       (!pair  "location_hash"
+        (!type already_seen 714)
+        (!srcfileloc  "input.h" 210)
+        nil )
+      )
+     )
+    )
+    (!srcfileloc  "input.h" 210)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type already_seen 718)
+ 
+ (!type already_seen 139)
+ 
+ (!type already_seen 134)
+ 
+ (!type struct 719 
+  (!type pointer 720 nil  gc_unused
+   (!type already_seen 719)
+  )
+  gc_unused "simple_bitmap_def"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 152)
+ 
+ (!type already_seen 45)
+ 
+ (!type already_seen 339)
+ 
+ (!type struct 721 nil  gc_unused "scalar_float_mode"
+  (!srcfileloc  "coretypes.h" 67)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type struct 722 nil  gc_unused "complex_mode"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 723 nil  gc_unused "fixed_size_mode"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 724 nil  gc_unused "opt_mode<scalar_mode>"
+  (!srcfileloc  "coretypes.h" 65)
+  (!fields 1 
+   (!pair  "scalar_mode"
+    (!type already_seen 45)
+    (!srcfileloc  "coretypes.h" 65)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 725 nil  gc_unused "opt_mode<scalar_int_mode>"
+  (!srcfileloc  "coretypes.h" 66)
+  (!fields 1 
+   (!pair  "scalar_int_mode"
+    (!type already_seen 339)
+    (!srcfileloc  "coretypes.h" 66)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 726 nil  gc_unused "opt_mode<scalar_float_mode>"
+  (!srcfileloc  "coretypes.h" 67)
+  (!fields 1 
+   (!pair  "scalar_float_mode"
+    (!type already_seen 721)
+    (!srcfileloc  "coretypes.h" 67)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 44)
+ 
+ (!type user_struct 727 nil  gc_unused "pod_mode<scalar_int_mode>"
+  (!srcfileloc  "coretypes.h" 70)
+  (!fields 1 
+   (!pair  "scalar_int_mode"
+    (!type already_seen 339)
+    (!srcfileloc  "coretypes.h" 70)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 728 nil  gc_unused "pod_mode<fixed_size_mode>"
+  (!srcfileloc  "coretypes.h" 71)
+  (!fields 1 
+   (!pair  "fixed_size_mode"
+    (!type already_seen 2)
+    (!srcfileloc  "coretypes.h" 71)
+    nil )
+  )
+ )
+ 
+ (!type struct 729 
+  (!type pointer 730 nil  gc_unused
+   (!type already_seen 729)
+  )
+  gc_pointed_to "rtx_expr_list"
+  (!srcfileloc  "rtl.h" 462)
+  (!fields 0 )
+  nil 2047 nil 
+  (!type already_seen 152)
+ )
+ 
+ (!type struct 731 
+  (!type pointer 732 nil  gc_used
+   (!type already_seen 731)
+  )
+  gc_pointed_to "rtx_insn_list"
+  (!srcfileloc  "rtl.h" 491)
+  (!fields 0 )
+  nil 2047 nil 
+  (!type already_seen 152)
+ )
+ 
+ (!type struct 733 nil  gc_pointed_to "rtx_sequence"
+  (!srcfileloc  "rtl.h" 518)
+  (!fields 0 )
+  nil 2047 nil 
+  (!type already_seen 152)
+ )
+ 
+ (!type already_seen 347)
+ 
+ (!type struct 734 nil  gc_pointed_to "rtx_debug_insn"
+  (!srcfileloc  "rtl.h" 579)
+  (!fields 0 )
+  nil 2047 nil 
+  (!type already_seen 347)
+ )
+ 
+ (!type struct 735 nil  gc_pointed_to "rtx_nonjump_insn"
+  (!srcfileloc  "rtl.h" 590)
+  (!fields 0 )
+  nil 2047 nil 
+  (!type already_seen 347)
+ )
+ 
+ (!type struct 736 nil  gc_pointed_to "rtx_jump_insn"
+  (!srcfileloc  "rtl.h" 617)
+  (!fields 0 )
+  nil 2047 nil 
+  (!type already_seen 347)
+ )
+ 
+ (!type struct 737 nil  gc_pointed_to "rtx_call_insn"
+  (!srcfileloc  "rtl.h" 630)
+  (!fields 0 )
+  nil 2047 nil 
+  (!type already_seen 347)
+ )
+ 
+ (!type struct 738 nil  gc_pointed_to "rtx_jump_table_data"
+  (!srcfileloc  "rtl.h" 658)
+  (!fields 0 )
+  nil 2047 nil 
+  (!type already_seen 347)
+ )
+ 
+ (!type struct 739 nil  gc_pointed_to "rtx_barrier"
+  (!srcfileloc  "rtl.h" 669)
+  (!fields 0 )
+  nil 2047 nil 
+  (!type already_seen 347)
+ )
+ 
+ (!type already_seen 421)
+ 
+ (!type struct 740 
+  (!type pointer 741 nil  gc_used
+   (!type already_seen 740)
+  )
+  gc_pointed_to "rtx_note"
+  (!srcfileloc  "emit-rtl.h" 116)
+  (!fields 0 )
+  nil 2047 nil 
+  (!type already_seen 347)
+ )
+ 
+ (!type already_seen 280)
+ 
+ (!type struct 742 
+  (!type pointer 743 nil  gc_unused
+   (!type already_seen 742)
+  )
+  gc_unused "hwivec_def"
+  (!srcfileloc  "rtl.h" 278)
+  (!fields 1 
+   (!pair  "elem"
+    (!type array 744 nil  gc_unused "1" 
+     (!type already_seen 2)
+    )
+    (!srcfileloc  "rtl.h" 277)
+    nil )
+  )
+  (!options 
+   (!option variable_size string  "")
+  )
+  2047 nil nil )
+ 
+ (!type already_seen 332)
+ 
+ (!type struct 745 nil  gc_unused "gimple_stmt_iterator"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 746 nil  gc_pointed_to "gcond"
+  (!srcfileloc  "gimple.h" 876)
+  (!fields 0 )
+  (!options 
+   (!option tag string  "GSS_WITH_OPS")
+  )
+  2047 nil 
+  (!type struct 747 nil  gc_pointed_to "gimple_statement_with_ops"
+   (!srcfileloc  "gimple.h" 318)
+   (!fields 1 
+    (!pair  "op"
+     (!type array 748 nil  gc_used "1" 
+      (!type already_seen 23)
+     )
+     (!srcfileloc  "gimple.h" 317)
+     (!options 
+      (!option length string  "%h.num_ops")
+     )
+    )
+   )
+   (!options 
+    (!option tag string  "GSS_WITH_OPS")
+   )
+   2047 nil 
+   (!type struct 749 nil  gc_pointed_to "gimple_statement_with_ops_base"
+    (!srcfileloc  "gimple.h" 303)
+    (!fields 1 
+     (!pair  "use_ops"
+      (!type already_seen 450)
+      (!srcfileloc  "gimple.h" 302)
+      (!options 
+       (!option skip string  "")
+      )
+     )
+    )
+    nil 2047 nil 
+    (!type already_seen 332)
+   )
+  )
+ )
+ 
+ (!type struct 750 nil  gc_pointed_to "gdebug"
+  (!srcfileloc  "gimple.h" 886)
+  (!fields 0 )
+  (!options 
+   (!option tag string  "GSS_WITH_OPS")
+  )
+  2047 nil 
+  (!type already_seen 747)
+ )
+ 
+ (!type struct 751 nil  gc_pointed_to "ggoto"
+  (!srcfileloc  "gimple.h" 896)
+  (!fields 0 )
+  (!options 
+   (!option tag string  "GSS_WITH_OPS")
+  )
+  2047 nil 
+  (!type already_seen 747)
+ )
+ 
+ (!type struct 752 nil  gc_pointed_to "glabel"
+  (!srcfileloc  "gimple.h" 906)
+  (!fields 0 )
+  (!options 
+   (!option tag string  "GSS_WITH_OPS")
+  )
+  2047 nil 
+  (!type already_seen 747)
+ )
+ 
+ (!type struct 753 nil  gc_pointed_to "gswitch"
+  (!srcfileloc  "gimple.h" 916)
+  (!fields 0 )
+  (!options 
+   (!option tag string  "GSS_WITH_OPS")
+  )
+  2047 nil 
+  (!type already_seen 747)
+ )
+ 
+ (!type struct 754 nil  gc_pointed_to "gassign"
+  (!srcfileloc  "gimple.h" 927)
+  (!fields 0 )
+  (!options 
+   (!option tag string  "GSS_WITH_MEM_OPS")
+  )
+  2047 nil 
+  (!type struct 755 nil  gc_pointed_to "gimple_statement_with_memory_ops"
+   (!srcfileloc  "gimple.h" 349)
+   (!fields 1 
+    (!pair  "op"
+     (!type array 756 nil  gc_used "1" 
+      (!type already_seen 23)
+     )
+     (!srcfileloc  "gimple.h" 348)
+     (!options 
+      (!option length string  "%h.num_ops")
+     )
+    )
+   )
+   (!options 
+    (!option tag string  "GSS_WITH_MEM_OPS")
+   )
+   2047 nil 
+   (!type struct 757 nil  gc_pointed_to "gimple_statement_with_memory_ops_base"
+    (!srcfileloc  "gimple.h" 333)
+    (!fields 2 
+     (!pair  "vdef"
+      (!type already_seen 23)
+      (!srcfileloc  "gimple.h" 331)
+      (!options 
+       (!option skip string  "")
+      )
+     )
+     (!pair  "vuse"
+      (!type already_seen 23)
+      (!srcfileloc  "gimple.h" 332)
+      (!options 
+       (!option skip string  "")
+      )
+     )
+    )
+    (!options 
+     (!option tag string  "GSS_WITH_MEM_OPS_BASE")
+    )
+    2047 nil 
+    (!type already_seen 749)
+   )
+  )
+ )
+ 
+ (!type struct 758 nil  gc_pointed_to "gasm"
+  (!srcfileloc  "gimple.h" 585)
+  (!fields 6 
+   (!pair  "string"
+    (!type already_seen 11)
+    (!srcfileloc  "gimple.h" 571)
+    nil )
+   (!pair  "ni"
+    (!type already_seen 8)
+    (!srcfileloc  "gimple.h" 575)
+    nil )
+   (!pair  "no"
+    (!type already_seen 8)
+    (!srcfileloc  "gimple.h" 576)
+    nil )
+   (!pair  "nc"
+    (!type already_seen 8)
+    (!srcfileloc  "gimple.h" 577)
+    nil )
+   (!pair  "nl"
+    (!type already_seen 8)
+    (!srcfileloc  "gimple.h" 578)
+    nil )
+   (!pair  "op"
+    (!type array 759 nil  gc_used "1" 
+     (!type already_seen 23)
+    )
+    (!srcfileloc  "gimple.h" 584)
+    (!options 
+     (!option length string  "%h.num_ops")
+    )
+   )
+  )
+  (!options 
+   (!option tag string  "GSS_ASM")
+  )
+  2047 nil 
+  (!type already_seen 757)
+ )
+ 
+ (!type struct 760 
+  (!type pointer 761 nil  gc_used
+   (!type already_seen 760)
+  )
+  gc_pointed_to "gcall"
+  (!srcfileloc  "gimple.h" 376)
+  (!fields 4 
+   (!pair  "call_used"
+    (!type already_seen 440)
+    (!srcfileloc  "gimple.h" 360)
+    nil )
+   (!pair  "call_clobbered"
+    (!type already_seen 440)
+    (!srcfileloc  "gimple.h" 361)
+    nil )
+   (!pair  "u"
+    (!type union 762 nil  gc_used "anonymous:../../linaro/gcc/gimple.h:364"
+     (!srcfileloc  "gimple.h" 367)
+     (!fields 2 
+      (!pair  "fntype"
+       (!type already_seen 23)
+       (!srcfileloc  "gimple.h" 365)
+       (!options 
+        (!option tag string  "0")
+       )
+      )
+      (!pair  "internal_fn"
+       (!type already_seen 2)
+       (!srcfileloc  "gimple.h" 366)
+       (!options 
+        (!option tag string  "GF_CALL_INTERNAL")
+       )
+      )
+     )
+     (!options 
+      (!option desc string  "%1.subcode & GF_CALL_INTERNAL")
+     )
+     2047 nil )
+    (!srcfileloc  "gimple.h" 367)
+    nil )
+   (!pair  "op"
+    (!type array 763 nil  gc_used "1" 
+     (!type already_seen 23)
+    )
+    (!srcfileloc  "gimple.h" 373)
+    (!options 
+     (!option length string  "%h.num_ops")
+    )
+   )
+  )
+  (!options 
+   (!option tag string  "GSS_CALL")
+  )
+  2047 nil 
+  (!type already_seen 757)
+ )
+ 
+ (!type struct 764 nil  gc_pointed_to "gtransaction"
+  (!srcfileloc  "gimple.h" 858)
+  (!fields 4 
+   (!pair  "body"
+    (!type already_seen 331)
+    (!srcfileloc  "gimple.h" 852)
+    nil )
+   (!pair  "label_norm"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 855)
+    nil )
+   (!pair  "label_uninst"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 856)
+    nil )
+   (!pair  "label_over"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 857)
+    nil )
+  )
+  (!options 
+   (!option tag string  "GSS_TRANSACTION")
+  )
+  2047 nil 
+  (!type already_seen 757)
+ )
+ 
+ (!type struct 765 nil  gc_pointed_to "greturn"
+  (!srcfileloc  "gimple.h" 937)
+  (!fields 0 )
+  (!options 
+   (!option tag string  "GSS_WITH_MEM_OPS")
+  )
+  2047 nil 
+  (!type already_seen 755)
+ )
+ 
+ (!type struct 766 nil  gc_pointed_to "gbind"
+  (!srcfileloc  "gimple.h" 412)
+  (!fields 3 
+   (!pair  "vars"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 400)
+    nil )
+   (!pair  "block"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 408)
+    nil )
+   (!pair  "body"
+    (!type already_seen 331)
+    (!srcfileloc  "gimple.h" 411)
+    nil )
+  )
+  (!options 
+   (!option tag string  "GSS_BIND")
+  )
+  2047 nil 
+  (!type already_seen 332)
+ )
+ 
+ (!type struct 767 nil  gc_pointed_to "gcatch"
+  (!srcfileloc  "gimple.h" 427)
+  (!fields 2 
+   (!pair  "types"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 423)
+    nil )
+   (!pair  "handler"
+    (!type already_seen 331)
+    (!srcfileloc  "gimple.h" 426)
+    nil )
+  )
+  (!options 
+   (!option tag string  "GSS_CATCH")
+  )
+  2047 nil 
+  (!type already_seen 332)
+ )
+ 
+ (!type struct 768 nil  gc_pointed_to "geh_filter"
+  (!srcfileloc  "gimple.h" 444)
+  (!fields 2 
+   (!pair  "types"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 439)
+    nil )
+   (!pair  "failure"
+    (!type already_seen 331)
+    (!srcfileloc  "gimple.h" 443)
+    nil )
+  )
+  (!options 
+   (!option tag string  "GSS_EH_FILTER")
+  )
+  2047 nil 
+  (!type already_seen 332)
+ )
+ 
+ (!type struct 769 nil  gc_pointed_to "geh_mnt"
+  (!srcfileloc  "gimple.h" 466)
+  (!fields 1 
+   (!pair  "fndecl"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 465)
+    nil )
+  )
+  (!options 
+   (!option tag string  "GSS_EH_MNT")
+  )
+  2047 nil 
+  (!type already_seen 332)
+ )
+ 
+ (!type struct 770 nil  gc_pointed_to "geh_else"
+  (!srcfileloc  "gimple.h" 455)
+  (!fields 2 
+   (!pair  "n_body"
+    (!type already_seen 331)
+    (!srcfileloc  "gimple.h" 454)
+    nil )
+   (!pair  "e_body"
+    (!type already_seen 331)
+    (!srcfileloc  "gimple.h" 454)
+    nil )
+  )
+  (!options 
+   (!option tag string  "GSS_EH_ELSE")
+  )
+  2047 nil 
+  (!type already_seen 332)
+ )
+ 
+ (!type struct 771 nil  gc_pointed_to "gresx"
+  (!srcfileloc  "gimple.h" 504)
+  (!fields 0 )
+  (!options 
+   (!option tag string  "GSS_EH_CTRL")
+  )
+  2047 nil 
+  (!type struct 772 nil  gc_pointed_to "gimple_statement_eh_ctrl"
+   (!srcfileloc  "gimple.h" 497)
+   (!fields 1 
+    (!pair  "region"
+     (!type already_seen 2)
+     (!srcfileloc  "gimple.h" 496)
+     nil )
+   )
+   (!options 
+    (!option tag string  "GSS_EH_CTRL")
+   )
+   2047 nil 
+   (!type already_seen 332)
+  )
+ )
+ 
+ (!type struct 773 nil  gc_pointed_to "geh_dispatch"
+  (!srcfileloc  "gimple.h" 511)
+  (!fields 0 )
+  (!options 
+   (!option tag string  "GSS_EH_CTRL")
+  )
+  2047 nil 
+  (!type already_seen 772)
+ )
+ 
+ (!type struct 774 nil  gc_pointed_to "gphi"
+  (!srcfileloc  "gimple.h" 484)
+  (!fields 4 
+   (!pair  "capacity"
+    (!type already_seen 2)
+    (!srcfileloc  "gimple.h" 476)
+    nil )
+   (!pair  "nargs"
+    (!type already_seen 2)
+    (!srcfileloc  "gimple.h" 477)
+    nil )
+   (!pair  "result"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 480)
+    nil )
+   (!pair  "args"
+    (!type array 775 nil  gc_used "1" 
+     (!type struct 776 nil  gc_used "phi_arg_d"
+      (!srcfileloc  "tree-core.h" 1499)
+      (!fields 3 
+       (!pair  "imm_use"
+        (!type already_seen 559)
+        (!srcfileloc  "tree-core.h" 1496)
+        nil )
+       (!pair  "def"
+        (!type already_seen 23)
+        (!srcfileloc  "tree-core.h" 1497)
+        nil )
+       (!pair  "locus"
+        (!type already_seen 2)
+        (!srcfileloc  "tree-core.h" 1498)
+        nil )
+      )
+      nil 2047 nil nil )
+    )
+    (!srcfileloc  "gimple.h" 483)
+    (!options 
+     (!option length string  "%h.nargs")
+    )
+   )
+  )
+  (!options 
+   (!option tag string  "GSS_PHI")
+  )
+  2047 nil 
+  (!type already_seen 332)
+ )
+ 
+ (!type struct 777 nil  gc_pointed_to "gtry"
+  (!srcfileloc  "gimple.h" 528)
+  (!fields 2 
+   (!pair  "eval"
+    (!type already_seen 331)
+    (!srcfileloc  "gimple.h" 523)
+    nil )
+   (!pair  "cleanup"
+    (!type already_seen 331)
+    (!srcfileloc  "gimple.h" 527)
+    nil )
+  )
+  (!options 
+   (!option tag string  "GSS_TRY")
+  )
+  2047 nil 
+  (!type already_seen 332)
+ )
+ 
+ (!type struct 778 nil  gc_pointed_to "gomp_atomic_load"
+  (!srcfileloc  "gimple.h" 788)
+  (!fields 2 
+   (!pair  "rhs"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 787)
+    nil )
+   (!pair  "lhs"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 787)
+    nil )
+  )
+  (!options 
+   (!option tag string  "GSS_OMP_ATOMIC_LOAD")
+  )
+  2047 nil 
+  (!type already_seen 332)
+ )
+ 
+ (!type struct 779 nil  gc_pointed_to "gomp_atomic_store"
+  (!srcfileloc  "gimple.h" 808)
+  (!fields 0 )
+  (!options 
+   (!option tag string  "GSS_OMP_ATOMIC_STORE_LAYOUT")
+  )
+  2047 nil 
+  (!type struct 780 nil  gc_pointed_to "gimple_statement_omp_atomic_store_layout"
+   (!srcfileloc  "gimple.h" 800)
+   (!fields 1 
+    (!pair  "val"
+     (!type already_seen 23)
+     (!srcfileloc  "gimple.h" 799)
+     nil )
+   )
+   (!options 
+    (!option tag string  "GSS_OMP_ATOMIC_STORE_LAYOUT")
+   )
+   2047 nil 
+   (!type already_seen 332)
+  )
+ )
+ 
+ (!type struct 781 nil  gc_pointed_to "gomp_continue"
+  (!srcfileloc  "gimple.h" 742)
+  (!fields 2 
+   (!pair  "control_def"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 738)
+    nil )
+   (!pair  "control_use"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 741)
+    nil )
+  )
+  (!options 
+   (!option tag string  "GSS_OMP_CONTINUE")
+  )
+  2047 nil 
+  (!type already_seen 332)
+ )
+ 
+ (!type struct 782 nil  gc_pointed_to "gomp_critical"
+  (!srcfileloc  "gimple.h" 600)
+  (!fields 2 
+   (!pair  "clauses"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 595)
+    nil )
+   (!pair  "name"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 599)
+    nil )
+  )
+  (!options 
+   (!option tag string  "GSS_OMP_CRITICAL")
+  )
+  2047 nil 
+  (!type struct 783 nil  gc_pointed_to "gimple_statement_omp"
+   (!srcfileloc  "gimple.h" 388)
+   (!fields 1 
+    (!pair  "body"
+     (!type already_seen 331)
+     (!srcfileloc  "gimple.h" 387)
+     nil )
+   )
+   (!options 
+    (!option tag string  "GSS_OMP")
+   )
+   2047 nil 
+   (!type already_seen 332)
+  )
+ )
+ 
+ (!type struct 784 nil  gc_pointed_to "gomp_ordered"
+  (!srcfileloc  "gimple.h" 774)
+  (!fields 0 )
+  (!options 
+   (!option tag string  "GSS_OMP_SINGLE_LAYOUT")
+  )
+  2047 nil 
+  (!type struct 785 nil  gc_pointed_to "gimple_statement_omp_single_layout"
+   (!srcfileloc  "gimple.h" 753)
+   (!fields 1 
+    (!pair  "clauses"
+     (!type already_seen 23)
+     (!srcfileloc  "gimple.h" 752)
+     nil )
+   )
+   (!options 
+    (!option tag string  "GSS_OMP_SINGLE_LAYOUT")
+   )
+   2047 nil 
+   (!type already_seen 783)
+  )
+ )
+ 
+ (!type struct 786 nil  gc_pointed_to "gomp_for"
+  (!srcfileloc  "gimple.h" 640)
+  (!fields 4 
+   (!pair  "clauses"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 628)
+    nil )
+   (!pair  "collapse"
+    (!type already_seen 2)
+    (!srcfileloc  "gimple.h" 632)
+    nil )
+   (!pair  "iter"
+    (!type pointer 787 nil  gc_unused
+     (!type struct 788 
+      (!type already_seen 787)
+      gc_used "gimple_omp_for_iter"
+      (!srcfileloc  "gimple.h" 618)
+      (!fields 5 
+       (!pair  "cond"
+        (!type already_seen 2)
+        (!srcfileloc  "gimple.h" 605)
+        nil )
+       (!pair  "index"
+        (!type already_seen 23)
+        (!srcfileloc  "gimple.h" 608)
+        nil )
+       (!pair  "initial"
+        (!type already_seen 23)
+        (!srcfileloc  "gimple.h" 611)
+        nil )
+       (!pair  "final"
+        (!type already_seen 23)
+        (!srcfileloc  "gimple.h" 614)
+        nil )
+       (!pair  "incr"
+        (!type already_seen 23)
+        (!srcfileloc  "gimple.h" 617)
+        nil )
+      )
+      nil 2047 nil nil )
+    )
+    (!srcfileloc  "gimple.h" 635)
+    (!options 
+     (!option length string  "%h.collapse")
+    )
+   )
+   (!pair  "pre_body"
+    (!type already_seen 331)
+    (!srcfileloc  "gimple.h" 639)
+    nil )
+  )
+  (!options 
+   (!option tag string  "GSS_OMP_FOR")
+  )
+  2047 nil 
+  (!type already_seen 783)
+ )
+ 
+ (!type struct 789 nil  gc_pointed_to "gomp_parallel"
+  (!srcfileloc  "gimple.h" 679)
+  (!fields 0 )
+  (!options 
+   (!option tag string  "GSS_OMP_PARALLEL_LAYOUT")
+  )
+  2047 nil 
+  (!type struct 790 nil  gc_pointed_to "gimple_statement_omp_taskreg"
+   (!srcfileloc  "gimple.h" 671)
+   (!fields 0 )
+   (!options 
+    (!option tag string  "GSS_OMP_PARALLEL_LAYOUT")
+   )
+   2047 nil 
+   (!type struct 791 nil  gc_pointed_to "gimple_statement_omp_parallel_layout"
+    (!srcfileloc  "gimple.h" 661)
+    (!fields 3 
+     (!pair  "clauses"
+      (!type already_seen 23)
+      (!srcfileloc  "gimple.h" 652)
+      nil )
+     (!pair  "child_fn"
+      (!type already_seen 23)
+      (!srcfileloc  "gimple.h" 656)
+      nil )
+     (!pair  "data_arg"
+      (!type already_seen 23)
+      (!srcfileloc  "gimple.h" 660)
+      nil )
+    )
+    (!options 
+     (!option tag string  "GSS_OMP_PARALLEL_LAYOUT")
+    )
+    2047 nil 
+    (!type already_seen 783)
+   )
+  )
+ )
+ 
+ (!type struct 792 nil  gc_pointed_to "gomp_task"
+  (!srcfileloc  "gimple.h" 704)
+  (!fields 3 
+   (!pair  "copy_fn"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 698)
+    nil )
+   (!pair  "arg_size"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 702)
+    nil )
+   (!pair  "arg_align"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 703)
+    nil )
+  )
+  (!options 
+   (!option tag string  "GSS_OMP_TASK")
+  )
+  2047 nil 
+  (!type already_seen 790)
+ )
+ 
+ (!type struct 793 nil  gc_pointed_to "gomp_sections"
+  (!srcfileloc  "gimple.h" 725)
+  (!fields 2 
+   (!pair  "clauses"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 719)
+    nil )
+   (!pair  "control"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple.h" 724)
+    nil )
+  )
+  (!options 
+   (!option tag string  "GSS_OMP_SECTIONS")
+  )
+  2047 nil 
+  (!type already_seen 783)
+ )
+ 
+ (!type struct 794 nil  gc_pointed_to "gomp_single"
+  (!srcfileloc  "gimple.h" 760)
+  (!fields 0 )
+  (!options 
+   (!option tag string  "GSS_OMP_SINGLE_LAYOUT")
+  )
+  2047 nil 
+  (!type already_seen 785)
+ )
+ 
+ (!type struct 795 nil  gc_pointed_to "gomp_target"
+  (!srcfileloc  "gimple.h" 687)
+  (!fields 0 )
+  (!options 
+   (!option tag string  "GSS_OMP_PARALLEL_LAYOUT")
+  )
+  2047 nil 
+  (!type already_seen 791)
+ )
+ 
+ (!type struct 796 nil  gc_pointed_to "gomp_teams"
+  (!srcfileloc  "gimple.h" 767)
+  (!fields 0 )
+  (!options 
+   (!option tag string  "GSS_OMP_PARALLEL_LAYOUT")
+  )
+  2047 nil 
+  (!type already_seen 790)
+ )
+ 
+ (!type already_seen 369)
+ 
+ (!type struct 797 
+  (!type pointer 798 
+   (!type pointer 799 nil  gc_used
+    (!type already_seen 798)
+   )
+   gc_pointed_to
+   (!type already_seen 797)
+  )
+  gc_pointed_to "cgraph_node"
+  (!srcfileloc  "cgraph.h" 1489)
+  (!fields 43 
+   (!pair  "DEBUG_FUNCTION"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1095)
+    nil )
+   (!pair  "DEBUG_FUNCTION"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1104)
+    nil )
+   (!pair  "callees"
+    (!type pointer 800 nil  gc_used
+     (!type struct 801 
+      (!type already_seen 800)
+      gc_pointed_to "cgraph_edge"
+      (!srcfileloc  "cgraph.h" 1845)
+      (!fields 20 
+       (!pair  "count"
+        (!type already_seen 350)
+        (!srcfileloc  "cgraph.h" 1762)
+        nil )
+       (!pair  "caller"
+        (!type already_seen 798)
+        (!srcfileloc  "cgraph.h" 1763)
+        nil )
+       (!pair  "callee"
+        (!type already_seen 798)
+        (!srcfileloc  "cgraph.h" 1764)
+        nil )
+       (!pair  "prev_caller"
+        (!type already_seen 800)
+        (!srcfileloc  "cgraph.h" 1765)
+        nil )
+       (!pair  "next_caller"
+        (!type already_seen 800)
+        (!srcfileloc  "cgraph.h" 1766)
+        nil )
+       (!pair  "prev_callee"
+        (!type already_seen 800)
+        (!srcfileloc  "cgraph.h" 1767)
+        nil )
+       (!pair  "next_callee"
+        (!type already_seen 800)
+        (!srcfileloc  "cgraph.h" 1768)
+        nil )
+       (!pair  "call_stmt"
+        (!type already_seen 761)
+        (!srcfileloc  "cgraph.h" 1769)
+        nil )
+       (!pair  "indirect_info"
+        (!type pointer 802 nil  gc_used
+         (!type struct 803 
+          (!type already_seen 802)
+          gc_pointed_to "cgraph_indirect_call_info"
+          (!srcfileloc  "cgraph.h" 1772)
+          (!fields 14 
+           (!pair  "offset"
+            (!type already_seen 2)
+            (!srcfileloc  "cgraph.h" 1633)
+            nil )
+           (!pair  "context"
+            (!type struct 804 nil  gc_used "ipa_polymorphic_call_context"
+             (!srcfileloc  "cgraph.h" 1625)
+             (!fields 10 
+              (!pair  "offset"
+               (!type already_seen 2)
+               (!srcfileloc  "cgraph.h" 1535)
+               nil )
+              (!pair  "speculative_offset"
+               (!type already_seen 2)
+               (!srcfileloc  "cgraph.h" 1536)
+               nil )
+              (!pair  "outer_type"
+               (!type already_seen 23)
+               (!srcfileloc  "cgraph.h" 1537)
+               nil )
+              (!pair  "speculative_outer_type"
+               (!type already_seen 23)
+               (!srcfileloc  "cgraph.h" 1538)
+               nil )
+              (!pair  "maybe_in_construction"
+               (!type already_seen 2)
+               (!srcfileloc  "cgraph.h" 1540)
+               nil )
+              (!pair  "maybe_derived_type"
+               (!type already_seen 2)
+               (!srcfileloc  "cgraph.h" 1542)
+               nil )
+              (!pair  "speculative_maybe_derived_type"
+               (!type already_seen 2)
+               (!srcfileloc  "cgraph.h" 1545)
+               nil )
+              (!pair  "invalid"
+               (!type already_seen 2)
+               (!srcfileloc  "cgraph.h" 1548)
+               nil )
+              (!pair  "dynamic"
+               (!type already_seen 2)
+               (!srcfileloc  "cgraph.h" 1550)
+               nil )
+              (!pair  "DEBUG_FUNCTION"
+               (!type already_seen 2)
+               (!srcfileloc  "cgraph.h" 1612)
+               nil )
+             )
+             nil 2047 nil nil )
+            (!srcfileloc  "cgraph.h" 1635)
+            nil )
+           (!pair  "otr_token"
+            (!type already_seen 2)
+            (!srcfileloc  "cgraph.h" 1637)
+            nil )
+           (!pair  "otr_type"
+            (!type already_seen 23)
+            (!srcfileloc  "cgraph.h" 1639)
+            nil )
+           (!pair  "param_index"
+            (!type already_seen 2)
+            (!srcfileloc  "cgraph.h" 1641)
+            nil )
+           (!pair  "ecf_flags"
+            (!type already_seen 2)
+            (!srcfileloc  "cgraph.h" 1643)
+            nil )
+           (!pair  "common_target_id"
+            (!type already_seen 2)
+            (!srcfileloc  "cgraph.h" 1645)
+            nil )
+           (!pair  "common_target_probability"
+            (!type already_seen 2)
+            (!srcfileloc  "cgraph.h" 1647)
+            nil )
+           (!pair  "polymorphic"
+            (!type already_seen 2)
+            (!srcfileloc  "cgraph.h" 1651)
+            nil )
+           (!pair  "agg_contents"
+            (!type already_seen 2)
+            (!srcfileloc  "cgraph.h" 1654)
+            nil )
+           (!pair  "member_ptr"
+            (!type already_seen 2)
+            (!srcfileloc  "cgraph.h" 1656)
+            nil )
+           (!pair  "by_ref"
+            (!type already_seen 2)
+            (!srcfileloc  "cgraph.h" 1659)
+            nil )
+           (!pair  "guaranteed_unmodified"
+            (!type already_seen 2)
+            (!srcfileloc  "cgraph.h" 1664)
+            nil )
+           (!pair  "vptr_changed"
+            (!type already_seen 2)
+            (!srcfileloc  "cgraph.h" 1667)
+            nil )
+          )
+          nil 2047 nil nil )
+        )
+        (!srcfileloc  "cgraph.h" 1772)
+        nil )
+       (!pair  "aux"
+        (!type already_seen 3)
+        (!srcfileloc  "cgraph.h" 1773)
+        (!options 
+         (!option skip string  "")
+        )
+       )
+       (!pair  "inline_failed"
+        (!type already_seen 2)
+        (!srcfileloc  "cgraph.h" 1776)
+        nil )
+       (!pair  "lto_stmt_uid"
+        (!type already_seen 2)
+        (!srcfileloc  "cgraph.h" 1779)
+        nil )
+       (!pair  "indirect_inlining_edge"
+        (!type already_seen 2)
+        (!srcfileloc  "cgraph.h" 1781)
+        nil )
+       (!pair  "indirect_unknown_callee"
+        (!type already_seen 2)
+        (!srcfileloc  "cgraph.h" 1784)
+        nil )
+       (!pair  "call_stmt_cannot_inline_p"
+        (!type already_seen 2)
+        (!srcfileloc  "cgraph.h" 1787)
+        nil )
+       (!pair  "can_throw_external"
+        (!type already_seen 2)
+        (!srcfileloc  "cgraph.h" 1789)
+        nil )
+       (!pair  "speculative"
+        (!type already_seen 2)
+        (!srcfileloc  "cgraph.h" 1807)
+        nil )
+       (!pair  "in_polymorphic_cdtor"
+        (!type already_seen 2)
+        (!srcfileloc  "cgraph.h" 1810)
+        nil )
+       (!pair  "m_uid"
+        (!type already_seen 2)
+        (!srcfileloc  "cgraph.h" 1824)
+        nil )
+       (!pair  "m_summary_id"
+        (!type already_seen 2)
+        (!srcfileloc  "cgraph.h" 1827)
+        nil )
+      )
+      (!options 
+       (!option for_user string  "")
+       (!option chain_prev string  "%h.prev_caller")
+       (!option chain_next string  "%h.next_caller")
+      )
+      2047 nil nil )
+    )
+    (!srcfileloc  "cgraph.h" 1389)
+    nil )
+   (!pair  "callers"
+    (!type already_seen 800)
+    (!srcfileloc  "cgraph.h" 1390)
+    nil )
+   (!pair  "indirect_calls"
+    (!type already_seen 800)
+    (!srcfileloc  "cgraph.h" 1393)
+    nil )
+   (!pair  "origin"
+    (!type already_seen 798)
+    (!srcfileloc  "cgraph.h" 1395)
+    nil )
+   (!pair  "nested"
+    (!type already_seen 798)
+    (!srcfileloc  "cgraph.h" 1397)
+    nil )
+   (!pair  "next_nested"
+    (!type already_seen 798)
+    (!srcfileloc  "cgraph.h" 1399)
+    nil )
+   (!pair  "next_sibling_clone"
+    (!type already_seen 798)
+    (!srcfileloc  "cgraph.h" 1401)
+    nil )
+   (!pair  "prev_sibling_clone"
+    (!type already_seen 798)
+    (!srcfileloc  "cgraph.h" 1402)
+    nil )
+   (!pair  "clones"
+    (!type already_seen 798)
+    (!srcfileloc  "cgraph.h" 1403)
+    nil )
+   (!pair  "clone_of"
+    (!type already_seen 798)
+    (!srcfileloc  "cgraph.h" 1404)
+    nil )
+   (!pair  "call_site_hash"
+    (!type pointer 805 nil  gc_used
+     (!type user_struct 806 
+      (!type already_seen 805)
+      gc_pointed_to "hash_table<cgraph_edge_hasher>"
+      (!srcfileloc  "cgraph.h" 1407)
+      (!fields 1 
+       (!pair  "cgraph_edge_hasher"
+        (!type struct 807 nil  gc_used "cgraph_edge_hasher"
+         (!srcfileloc  "cgraph.h" 1407)
+         (!fields 0 )
+         nil 2047 nil nil )
+        (!srcfileloc  "cgraph.h" 1407)
+        nil )
+      )
+     )
+    )
+    (!srcfileloc  "cgraph.h" 1407)
+    nil )
+   (!pair  "former_clone_of"
+    (!type already_seen 23)
+    (!srcfileloc  "cgraph.h" 1409)
+    nil )
+   (!pair  "simdclone"
+    (!type pointer 808 nil  gc_used
+     (!type struct 809 
+      (!type already_seen 808)
+      gc_pointed_to "cgraph_simd_clone"
+      (!srcfileloc  "cgraph.h" 1413)
+      (!fields 11 
+       (!pair  "simdlen"
+        (!type already_seen 2)
+        (!srcfileloc  "cgraph.h" 821)
+        nil )
+       (!pair  "nargs"
+        (!type already_seen 2)
+        (!srcfileloc  "cgraph.h" 825)
+        nil )
+       (!pair  "vecsize_int"
+        (!type already_seen 2)
+        (!srcfileloc  "cgraph.h" 828)
+        nil )
+       (!pair  "vecsize_float"
+        (!type already_seen 2)
+        (!srcfileloc  "cgraph.h" 831)
+        nil )
+       (!pair  "mask_mode"
+        (!type already_seen 2)
+        (!srcfileloc  "cgraph.h" 836)
+        nil )
+       (!pair  "vecsize_mangle"
+        (!type already_seen 8)
+        (!srcfileloc  "cgraph.h" 841)
+        nil )
+       (!pair  "inbranch"
+        (!type already_seen 2)
+        (!srcfileloc  "cgraph.h" 845)
+        nil )
+       (!pair  "prev_clone"
+        (!type already_seen 798)
+        (!srcfileloc  "cgraph.h" 848)
+        nil )
+       (!pair  "next_clone"
+        (!type already_seen 798)
+        (!srcfileloc  "cgraph.h" 848)
+        nil )
+       (!pair  "origin"
+        (!type already_seen 798)
+        (!srcfileloc  "cgraph.h" 851)
+        nil )
+       (!pair  "args"
+        (!type array 810 nil  gc_used "1" 
+         (!type struct 811 nil  gc_used "cgraph_simd_clone_arg"
+          (!srcfileloc  "cgraph.h" 854)
+          (!fields 8 
+           (!pair  "orig_arg"
+            (!type already_seen 23)
+            (!srcfileloc  "cgraph.h" 777)
+            nil )
+           (!pair  "orig_type"
+            (!type already_seen 23)
+            (!srcfileloc  "cgraph.h" 781)
+            nil )
+           (!pair  "vector_arg"
+            (!type already_seen 23)
+            (!srcfileloc  "cgraph.h" 789)
+            nil )
+           (!pair  "vector_type"
+            (!type already_seen 23)
+            (!srcfileloc  "cgraph.h" 792)
+            nil )
+           (!pair  "simd_array"
+            (!type already_seen 23)
+            (!srcfileloc  "cgraph.h" 801)
+            nil )
+           (!pair  "arg_type"
+            (!type already_seen 2)
+            (!srcfileloc  "cgraph.h" 805)
+            nil )
+           (!pair  "linear_step"
+            (!type already_seen 2)
+            (!srcfileloc  "cgraph.h" 811)
+            nil )
+           (!pair  "alignment"
+            (!type already_seen 2)
+            (!srcfileloc  "cgraph.h" 814)
+            nil )
+          )
+          nil 2047 nil nil )
+        )
+        (!srcfileloc  "cgraph.h" 854)
+        (!options 
+         (!option length string  "%h.nargs")
+        )
+       )
+      )
+      nil 2047 nil nil )
+    )
+    (!srcfileloc  "cgraph.h" 1413)
+    nil )
+   (!pair  "simd_clones"
+    (!type already_seen 798)
+    (!srcfileloc  "cgraph.h" 1415)
+    nil )
+   (!pair  "ipa_transforms_to_apply"
+    (!type user_struct 812 nil  gc_unused "vec<ipa_opt_pass>"
+     (!srcfileloc  "cgraph.h" 1420)
+     (!fields 1 
+      (!pair  "ipa_opt_pass"
+       (!type pointer 813 nil  gc_unused
+        (!type struct 814 
+         (!type already_seen 813)
+         gc_unused "ipa_opt_pass_d"
+         (!srcfileloc  "cgraph.h" 37)
+         (!fields 0 )
+         nil 2047 nil nil )
+       )
+       (!srcfileloc  "cgraph.h" 1420)
+       nil )
+     )
+    )
+    (!srcfileloc  "cgraph.h" 1420)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "local"
+    (!type struct 815 nil  gc_used "cgraph_local_info"
+     (!srcfileloc  "cgraph.h" 1422)
+     (!fields 5 
+      (!pair  "local"
+       (!type already_seen 2)
+       (!srcfileloc  "cgraph.h" 704)
+       nil )
+      (!pair  "versionable"
+       (!type already_seen 2)
+       (!srcfileloc  "cgraph.h" 707)
+       nil )
+      (!pair  "can_change_signature"
+       (!type already_seen 2)
+       (!srcfileloc  "cgraph.h" 711)
+       nil )
+      (!pair  "redefined_extern_inline"
+       (!type already_seen 2)
+       (!srcfileloc  "cgraph.h" 715)
+       nil )
+      (!pair  "tm_may_enter_irr"
+       (!type already_seen 2)
+       (!srcfileloc  "cgraph.h" 718)
+       nil )
+     )
+     nil 2047 nil nil )
+    (!srcfileloc  "cgraph.h" 1422)
+    nil )
+   (!pair  "global"
+    (!type struct 816 nil  gc_used "cgraph_global_info"
+     (!srcfileloc  "cgraph.h" 1423)
+     (!fields 1 
+      (!pair  "inlined_to"
+       (!type already_seen 798)
+       (!srcfileloc  "cgraph.h" 727)
+       nil )
+     )
+     nil 2047 nil nil )
+    (!srcfileloc  "cgraph.h" 1423)
+    nil )
+   (!pair  "rtl"
+    (!type pointer 817 nil  gc_used
+     (!type struct 818 
+      (!type already_seen 817)
+      gc_pointed_to "cgraph_rtl_info"
+      (!srcfileloc  "rtl.h" 4364)
+      (!fields 3 
+       (!pair  "preferred_incoming_stack_boundary"
+        (!type already_seen 2)
+        (!srcfileloc  "rtl.h" 4356)
+        nil )
+       (!pair  "function_used_regs"
+        (!type already_seen 2)
+        (!srcfileloc  "rtl.h" 4361)
+        nil )
+       (!pair  "function_used_regs_valid"
+        (!type already_seen 2)
+        (!srcfileloc  "rtl.h" 4363)
+        nil )
+      )
+      nil 2047 nil nil )
+    )
+    (!srcfileloc  "cgraph.h" 1424)
+    nil )
+   (!pair  "clone"
+    (!type struct 819 nil  gc_used "cgraph_clone_info"
+     (!srcfileloc  "cgraph.h" 1425)
+     (!fields 3 
+      (!pair  "tree_map"
+       (!type pointer 820 nil  gc_used
+        (!type user_struct 821 
+         (!type already_seen 820)
+         gc_pointed_to "vec<ipa_replace_map*,va_gc>"
+         (!srcfileloc  "cgraph.h" 748)
+         (!fields 2 
+          (!pair  "va_gc"
+           (!type already_seen 79)
+           (!srcfileloc  "cgraph.h" 748)
+           nil )
+          (!pair  "ipa_replace_map"
+           (!type pointer 822 nil  gc_used
+            (!type struct 823 
+             (!type already_seen 822)
+             gc_pointed_to "ipa_replace_map"
+             (!srcfileloc  "cgraph.h" 744)
+             (!fields 5 
+              (!pair  "old_tree"
+               (!type already_seen 23)
+               (!srcfileloc  "cgraph.h" 735)
+               nil )
+              (!pair  "new_tree"
+               (!type already_seen 23)
+               (!srcfileloc  "cgraph.h" 737)
+               nil )
+              (!pair  "parm_num"
+               (!type already_seen 2)
+               (!srcfileloc  "cgraph.h" 739)
+               nil )
+              (!pair  "replace_p"
+               (!type already_seen 2)
+               (!srcfileloc  "cgraph.h" 741)
+               nil )
+              (!pair  "ref_p"
+               (!type already_seen 2)
+               (!srcfileloc  "cgraph.h" 743)
+               nil )
+             )
+             nil 2047 nil nil )
+           )
+           (!srcfileloc  "cgraph.h" 748)
+           nil )
+         )
+        )
+       )
+       (!srcfileloc  "cgraph.h" 748)
+       nil )
+      (!pair  "args_to_skip"
+       (!type already_seen 133)
+       (!srcfileloc  "cgraph.h" 749)
+       nil )
+      (!pair  "combined_args_to_skip"
+       (!type already_seen 133)
+       (!srcfileloc  "cgraph.h" 750)
+       nil )
+     )
+     nil 2047 nil nil )
+    (!srcfileloc  "cgraph.h" 1425)
+    nil )
+   (!pair  "thunk"
+    (!type struct 824 nil  gc_used "cgraph_thunk_info"
+     (!srcfileloc  "cgraph.h" 1426)
+     (!fields 7 
+      (!pair  "fixed_offset"
+       (!type already_seen 2)
+       (!srcfileloc  "cgraph.h" 667)
+       nil )
+      (!pair  "virtual_value"
+       (!type already_seen 2)
+       (!srcfileloc  "cgraph.h" 671)
+       nil )
+      (!pair  "indirect_offset"
+       (!type already_seen 2)
+       (!srcfileloc  "cgraph.h" 675)
+       nil )
+      (!pair  "alias"
+       (!type already_seen 23)
+       (!srcfileloc  "cgraph.h" 679)
+       nil )
+      (!pair  "this_adjusting"
+       (!type already_seen 2)
+       (!srcfileloc  "cgraph.h" 683)
+       nil )
+      (!pair  "virtual_offset_p"
+       (!type already_seen 2)
+       (!srcfileloc  "cgraph.h" 691)
+       nil )
+      (!pair  "thunk_p"
+       (!type already_seen 2)
+       (!srcfileloc  "cgraph.h" 695)
+       nil )
+     )
+     nil 2047 nil nil )
+    (!srcfileloc  "cgraph.h" 1426)
+    nil )
+   (!pair  "count"
+    (!type already_seen 350)
+    (!srcfileloc  "cgraph.h" 1429)
+    nil )
+   (!pair  "count_materialization_scale"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1432)
+    nil )
+   (!pair  "profile_id"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1434)
+    nil )
+   (!pair  "tp_first_run"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1436)
+    nil )
+   (!pair  "used_as_abstract_origin"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1440)
+    nil )
+   (!pair  "lowered"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1442)
+    nil )
+   (!pair  "process"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1445)
+    nil )
+   (!pair  "frequency"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1448)
+    nil )
+   (!pair  "only_called_at_startup"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1450)
+    nil )
+   (!pair  "only_called_at_exit"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1452)
+    nil )
+   (!pair  "tm_clone"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1457)
+    nil )
+   (!pair  "dispatcher_function"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1459)
+    nil )
+   (!pair  "calls_comdat_local"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1462)
+    nil )
+   (!pair  "icf_merged"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1464)
+    nil )
+   (!pair  "nonfreeing_fn"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1468)
+    nil )
+   (!pair  "merged_comdat"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1470)
+    nil )
+   (!pair  "parallelized_function"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1472)
+    nil )
+   (!pair  "split_part"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1474)
+    nil )
+   (!pair  "indirect_call_target"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1476)
+    nil )
+   (!pair  "m_uid"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1480)
+    nil )
+   (!pair  "m_summary_id"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1483)
+    nil )
+  )
+  (!options 
+   (!option tag string  "SYMTAB_FUNCTION")
+  )
+  2047 nil 
+  (!type already_seen 369)
+ )
+ 
+ (!type struct 825 nil  gc_pointed_to "varpool_node"
+  (!srcfileloc  "cgraph.h" 1980)
+  (!fields 5 
+   (!pair  "DEBUG_FUNCTION"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1859)
+    nil )
+   (!pair  "output"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1958)
+    nil )
+   (!pair  "dynamically_initialized"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1962)
+    nil )
+   (!pair  "tls_model"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1964)
+    nil )
+   (!pair  "used_by_single_function"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1970)
+    nil )
+  )
+  (!options 
+   (!option tag string  "SYMTAB_VARIABLE")
+  )
+  2047 nil 
+  (!type already_seen 369)
+ )
+ 
+ (!type already_seen 264)
+ 
+ (!type struct 826 nil  gc_unused "gcc_options"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 622)
+ 
+ (!type already_seen 576)
+ 
+ (!type struct 827 nil  gc_unused "cl_option"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 828 nil  gc_unused "cl_decoded_option"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 829 nil  gc_unused "cl_option_handlers"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 830 nil  gc_unused "diagnostic_context"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 831 nil  gc_unused "pretty_printer"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 323)
+ 
+ (!type already_seen 319)
+ 
+ (!type struct 832 nil  gc_unused "rtl_opt_pass"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 833 nil  gc_unused "context"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 834 nil  gc_unused "std::pair<tree,tree>"
+  (!srcfileloc  "coretypes.h" 334)
+  (!fields 2 
+   (!pair  "tree"
+    (!type already_seen 23)
+    (!srcfileloc  "coretypes.h" 334)
+    nil )
+   (!pair  "tree"
+    (!type already_seen 23)
+    (!srcfileloc  "coretypes.h" 334)
+    nil )
+  )
+ )
+ 
+ (!type struct 835 nil  gc_unused "kv_pair"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 836 nil  gc_unused "_dont_use_rtx_here_"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 837 nil  gc_unused "_dont_use_rtvec_here_"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 838 nil  gc_unused "_dont_use_rtx_insn_here_"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type union 839 nil  gc_unused "_dont_use_tree_here_"nil 
+  (!fields 0 )
+  nil 0 nil )
+ 
+ (!type struct 840 nil  gc_unused "cpp_reason_option_codes_t"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 464)
+ 
+ (!type already_seen 463)
+ 
+ (!type struct 841 nil  gc_unused "anonymous:../../linaro/gcc/config/aarch64/aarch64.h:763"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 842 
+  (!type pointer 843 nil  gc_unused
+   (!type already_seen 842)
+  )
+  gc_unused "splay_tree_node_s"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 844 
+  (!type pointer 845 nil  gc_unused
+   (!type already_seen 844)
+  )
+  gc_unused "splay_tree_s"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 846 nil  gc_unused "bitmap_usage"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 136)
+ 
+ (!type struct 847 nil  gc_unused "bitmap_iterator"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 848 nil  gc_unused "auto_bitmap"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 497)
+ 
+ (!type already_seen 496)
+ 
+ (!type undefined 849 nil  gc_unused "FIXED_WIDE_INT"
+  (!srcfileloc  "wide-int.h" 323)
+ )
+ 
+ (!type user_struct 850 nil  gc_unused "generic_wide_int<fixed_wide_int_storage<WIDE_INT_MAX_PRECISION*>>"
+  (!srcfileloc  "wide-int.h" 327)
+  (!fields 1 
+   (!pair  "fixed_wide_int_storage<WIDE_INT_MAX_PRECISION"
+    (!type pointer 851 nil  gc_unused
+     (!type struct 852 
+      (!type already_seen 851)
+      gc_unused "fixed_wide_int_storage<WIDE_INT_MAX_PRECISION"nil 
+      (!fields 0 )
+      nil 0 nil nil )
+    )
+    (!srcfileloc  "wide-int.h" 327)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 852)
+ 
+ (!type struct 853 nil  gc_unused "wide_int_ref_storage"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 854 nil  gc_unused "generic_wide_int<wide_int_ref_storage<false>>"
+  (!srcfileloc  "wide-int.h" 334)
+  (!fields 1 
+   (!pair  "wide_int_ref_storage<false"
+    (!type user_struct 855 nil  gc_unused "wide_int_ref_storage<false"
+     (!srcfileloc  "wide-int.h" 334)
+     (!fields 1 
+      (!pair  "false"
+       (!type undefined 856 nil  gc_unused "false"
+        (!srcfileloc  "wide-int.h" 334)
+       )
+       (!srcfileloc  "wide-int.h" 334)
+       nil )
+     )
+    )
+    (!srcfileloc  "wide-int.h" 334)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 855)
+ 
+ (!type already_seen 856)
+ 
+ (!type struct 857 nil  gc_unused "binary_traits"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 858 nil  gc_unused "generic_wide_int<fixed_wide_int_storage<int_traits<T2>precision>>"
+  (!srcfileloc  "wide-int.h" 438)
+  (!fields 2 
+   (!pair  "precision"
+    (!type undefined 859 nil  gc_unused "precision"
+     (!srcfileloc  "wide-int.h" 438)
+    )
+    (!srcfileloc  "wide-int.h" 438)
+    nil )
+   (!pair  "fixed_wide_int_storage<int_traits<T2"
+    (!type user_struct 860 nil  gc_unused "fixed_wide_int_storage<int_traits<T2"
+     (!srcfileloc  "wide-int.h" 438)
+     (!fields 1 
+      (!pair  "int_traits<T2"
+       (!type user_struct 861 nil  gc_unused "int_traits<T2"
+        (!srcfileloc  "wide-int.h" 438)
+        (!fields 1 
+         (!pair  "T2"
+          (!type undefined 862 nil  gc_unused "T2"
+           (!srcfileloc  "wide-int.h" 438)
+          )
+          (!srcfileloc  "wide-int.h" 438)
+          nil )
+        )
+       )
+       (!srcfileloc  "wide-int.h" 438)
+       nil )
+     )
+    )
+    (!srcfileloc  "wide-int.h" 438)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 860)
+ 
+ (!type already_seen 861)
+ 
+ (!type already_seen 862)
+ 
+ (!type already_seen 859)
+ 
+ (!type user_struct 863 nil  gc_unused "generic_wide_int<fixed_wide_int_storage<int_traits<T1>precision>>"
+  (!srcfileloc  "wide-int.h" 459)
+  (!fields 2 
+   (!pair  "precision"
+    (!type already_seen 859)
+    (!srcfileloc  "wide-int.h" 459)
+    nil )
+   (!pair  "fixed_wide_int_storage<int_traits<T1"
+    (!type user_struct 864 nil  gc_unused "fixed_wide_int_storage<int_traits<T1"
+     (!srcfileloc  "wide-int.h" 459)
+     (!fields 1 
+      (!pair  "int_traits<T1"
+       (!type user_struct 865 nil  gc_unused "int_traits<T1"
+        (!srcfileloc  "wide-int.h" 459)
+        (!fields 1 
+         (!pair  "T1"
+          (!type undefined 866 nil  gc_unused "T1"
+           (!srcfileloc  "wide-int.h" 459)
+          )
+          (!srcfileloc  "wide-int.h" 459)
+          nil )
+        )
+       )
+       (!srcfileloc  "wide-int.h" 459)
+       nil )
+     )
+    )
+    (!srcfileloc  "wide-int.h" 459)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 864)
+ 
+ (!type already_seen 865)
+ 
+ (!type already_seen 866)
+ 
+ (!type struct 867 nil  gc_unused "storage_ref"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 868 nil  gc_unused "storage"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 869 nil  gc_unused "generic_wide_int"
+  (!srcfileloc  "wide-int.h" 772)
+  (!fields 0 )
+  nil 2047 nil 
+  (!type already_seen 868)
+ )
+ 
+ (!type undefined 870 nil  gc_unused "ASSIGNMENT_OPERATOR"
+  (!srcfileloc  "wide-int.h" 752)
+ )
+ 
+ (!type struct 871 nil  gc_unused "int_traits"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 872 nil  gc_unused "fixed_wide_int_storage"
+  (!srcfileloc  "wide-int.h" 1214)
+  (!fields 2 
+   (!pair  "val"
+    (!type array 873 nil  gc_unused "(N + HOST_BITS_PER_WIDE_INT + 1) / HOST_BITS_PER_WIDE_INT" 
+     (!type already_seen 2)
+    )
+    (!srcfileloc  "wide-int.h" 1196)
+    nil )
+   (!pair  "len"
+    (!type already_seen 2)
+    (!srcfileloc  "wide-int.h" 1197)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 874 nil  gc_unused "trailing_wide_int_storage"
+  (!srcfileloc  "wide-int.h" 1345)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 875 nil  gc_unused "generic_wide_int<trailing_wide_int_storage>"
+  (!srcfileloc  "wide-int.h" 1345)
+  (!fields 1 
+   (!pair  "trailing_wide_int_storage"
+    (!type already_seen 874)
+    (!srcfileloc  "wide-int.h" 1345)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 876 nil  gc_unused "trailing_wide_ints"
+  (!srcfileloc  "wide-int.h" 1385)
+  (!fields 0 )
+ )
+ 
+ (!type struct 877 nil  gc_unused "primitive_int_traits"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 878 nil  gc_unused "hwi_with_prec"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 879 nil  gc_unused "ints_for"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 880 nil  gc_unused "never_used1"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 881 nil  gc_unused "never_used2"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 882 
+  (!type pointer 883 nil  gc_used
+   (!type already_seen 882)
+  )
+  gc_pointed_to "coverage_data"
+  (!srcfileloc  "coverage.c" 64)
+  (!fields 6 
+   (!pair  "next"
+    (!type already_seen 883)
+    (!srcfileloc  "coverage.c" 58)
+    nil )
+   (!pair  "ident"
+    (!type already_seen 2)
+    (!srcfileloc  "coverage.c" 59)
+    nil )
+   (!pair  "lineno_checksum"
+    (!type already_seen 2)
+    (!srcfileloc  "coverage.c" 60)
+    nil )
+   (!pair  "cfg_checksum"
+    (!type already_seen 2)
+    (!srcfileloc  "coverage.c" 61)
+    nil )
+   (!pair  "fn_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "coverage.c" 62)
+    nil )
+   (!pair  "ctr_vars"
+    (!type array 884 nil  gc_used "GCOV_COUNTERS" 
+     (!type already_seen 23)
+    )
+    (!srcfileloc  "coverage.c" 63)
+    nil )
+  )
+  (!options 
+   (!option chain_next string  "%h.next")
+  )
+  2047 nil nil )
+ 
+ (!type struct 885 nil  gc_unused "counts_entry"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 886 nil  gc_unused "addr_diff_vec_flags"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 277)
+ 
+ (!type already_seen 288)
+ 
+ (!type union 887 nil  gc_unused "rtunion"nil 
+  (!fields 0 )
+  nil 0 nil )
+ 
+ (!type struct 888 nil  gc_unused "reg_info"
+  (!srcfileloc  "rtl.h" 226)
+  (!fields 4 
+   (!pair  "regno"
+    (!type already_seen 2)
+    (!srcfileloc  "rtl.h" 218)
+    nil )
+   (!pair  "nregs"
+    (!type already_seen 2)
+    (!srcfileloc  "rtl.h" 221)
+    nil )
+   (!pair  "unused"
+    (!type already_seen 2)
+    (!srcfileloc  "rtl.h" 222)
+    nil )
+   (!pair  "attrs"
+    (!type already_seen 287)
+    (!srcfileloc  "rtl.h" 225)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type already_seen 260)
+ 
+ (!type already_seen 262)
+ 
+ (!type already_seen 258)
+ 
+ (!type already_seen 270)
+ 
+ (!type already_seen 79)
+ 
+ (!type user_struct 889 nil  gc_unused "trailing_wide_ints<NUM_POLY_INT_COEFFS>"
+  (!srcfileloc  "rtl.h" 287)
+  (!fields 1 
+   (!pair  "NUM_POLY_INT_COEFFS"
+    (!type undefined 890 nil  gc_unused "NUM_POLY_INT_COEFFS"
+     (!srcfileloc  "rtl.h" 287)
+    )
+    (!srcfileloc  "rtl.h" 287)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 890)
+ 
+ (!type struct 891 nil  gc_unused "const_poly_int_def"
+  (!srcfileloc  "rtl.h" 288)
+  (!fields 1 
+   (!pair  "coeffs"
+    (!type already_seen 889)
+    (!srcfileloc  "rtl.h" 287)
+    nil )
+  )
+  (!options 
+   (!option variable_size string  "")
+  )
+  2047 nil nil )
+ 
+ (!type already_seen 154)
+ 
+ (!type already_seen 153)
+ 
+ (!type already_seen 39)
+ 
+ (!type already_seen 43)
+ 
+ (!type union 892 nil  gc_used "u"
+  (!srcfileloc  "ggc-tests.c" 140)
+  (!fields 2 
+   (!pair  "u_test_struct"
+    (!type pointer 893 nil  gc_used
+     (!type struct 894 
+      (!type already_seen 893)
+      gc_pointed_to "test_struct"
+      (!srcfileloc  "ggc-tests.c" 53)
+      (!fields 1 
+       (!pair  "other"
+        (!type already_seen 893)
+        (!srcfileloc  "ggc-tests.c" 50)
+        nil )
+      )
+      nil 2047 nil nil )
+    )
+    (!srcfileloc  "ggc-tests.c" 138)
+    (!options 
+     (!option tag string  "WHICH_FIELD_USE_TEST_STRUCT")
+    )
+   )
+   (!pair  "u_test_other"
+    (!type pointer 895 nil  gc_used
+     (!type struct 896 
+      (!type already_seen 895)
+      gc_pointed_to "test_other"
+      (!srcfileloc  "ggc-tests.c" 139)
+      (!fields 2 
+       (!pair  "dummy"
+        (!type array 897 nil  gc_used "256" 
+         (!type already_seen 8)
+        )
+        (!srcfileloc  "ggc-tests.c" 107)
+        nil )
+       (!pair  "m_ptr"
+        (!type already_seen 893)
+        (!srcfileloc  "ggc-tests.c" 108)
+        nil )
+      )
+      nil 2047 nil nil )
+    )
+    (!srcfileloc  "ggc-tests.c" 139)
+    (!options 
+     (!option tag string  "WHICH_FIELD_USE_TEST_OTHER")
+    )
+   )
+  )
+  nil 2047 nil )
+ 
+ (!type already_seen 273)
+ 
+ (!type already_seen 317)
+ 
+ (!type already_seen 271)
+ 
+ (!type already_seen 365)
+ 
+ (!type already_seen 364)
+ 
+ (!type already_seen 363)
+ 
+ (!type already_seen 362)
+ 
+ (!type already_seen 361)
+ 
+ (!type already_seen 360)
+ 
+ (!type already_seen 359)
+ 
+ (!type already_seen 358)
+ 
+ (!type already_seen 357)
+ 
+ (!type already_seen 356)
+ 
+ (!type already_seen 355)
+ 
+ (!type already_seen 354)
+ 
+ (!type already_seen 353)
+ 
+ (!type already_seen 352)
+ 
+ (!type already_seen 351)
+ 
+ (!type already_seen 316)
+ 
+ (!type already_seen 315)
+ 
+ (!type already_seen 314)
+ 
+ (!type already_seen 313)
+ 
+ (!type already_seen 312)
+ 
+ (!type already_seen 311)
+ 
+ (!type already_seen 310)
+ 
+ (!type already_seen 309)
+ 
+ (!type already_seen 308)
+ 
+ (!type already_seen 307)
+ 
+ (!type already_seen 306)
+ 
+ (!type already_seen 305)
+ 
+ (!type already_seen 304)
+ 
+ (!type already_seen 303)
+ 
+ (!type already_seen 302)
+ 
+ (!type already_seen 301)
+ 
+ (!type already_seen 300)
+ 
+ (!type already_seen 299)
+ 
+ (!type already_seen 298)
+ 
+ (!type already_seen 297)
+ 
+ (!type already_seen 296)
+ 
+ (!type already_seen 295)
+ 
+ (!type already_seen 294)
+ 
+ (!type already_seen 293)
+ 
+ (!type already_seen 292)
+ 
+ (!type already_seen 291)
+ 
+ (!type already_seen 290)
+ 
+ (!type already_seen 289)
+ 
+ (!type already_seen 286)
+ 
+ (!type already_seen 285)
+ 
+ (!type already_seen 284)
+ 
+ (!type already_seen 283)
+ 
+ (!type already_seen 282)
+ 
+ (!type already_seen 278)
+ 
+ (!type already_seen 275)
+ 
+ (!type already_seen 274)
+ 
+ (!type already_seen 257)
+ 
+ (!type already_seen 256)
+ 
+ (!type already_seen 255)
+ 
+ (!type already_seen 254)
+ 
+ (!type already_seen 253)
+ 
+ (!type already_seen 252)
+ 
+ (!type already_seen 251)
+ 
+ (!type already_seen 250)
+ 
+ (!type already_seen 249)
+ 
+ (!type already_seen 248)
+ 
+ (!type already_seen 247)
+ 
+ (!type already_seen 246)
+ 
+ (!type already_seen 245)
+ 
+ (!type already_seen 244)
+ 
+ (!type already_seen 243)
+ 
+ (!type already_seen 242)
+ 
+ (!type already_seen 241)
+ 
+ (!type already_seen 240)
+ 
+ (!type already_seen 239)
+ 
+ (!type already_seen 238)
+ 
+ (!type already_seen 237)
+ 
+ (!type already_seen 236)
+ 
+ (!type already_seen 235)
+ 
+ (!type already_seen 234)
+ 
+ (!type already_seen 233)
+ 
+ (!type already_seen 232)
+ 
+ (!type already_seen 231)
+ 
+ (!type already_seen 230)
+ 
+ (!type already_seen 229)
+ 
+ (!type already_seen 228)
+ 
+ (!type already_seen 227)
+ 
+ (!type already_seen 226)
+ 
+ (!type already_seen 225)
+ 
+ (!type already_seen 224)
+ 
+ (!type already_seen 223)
+ 
+ (!type already_seen 222)
+ 
+ (!type already_seen 221)
+ 
+ (!type already_seen 220)
+ 
+ (!type already_seen 219)
+ 
+ (!type already_seen 218)
+ 
+ (!type already_seen 217)
+ 
+ (!type already_seen 216)
+ 
+ (!type already_seen 215)
+ 
+ (!type already_seen 214)
+ 
+ (!type already_seen 213)
+ 
+ (!type already_seen 212)
+ 
+ (!type already_seen 211)
+ 
+ (!type already_seen 210)
+ 
+ (!type already_seen 209)
+ 
+ (!type already_seen 208)
+ 
+ (!type already_seen 207)
+ 
+ (!type already_seen 206)
+ 
+ (!type already_seen 205)
+ 
+ (!type already_seen 204)
+ 
+ (!type already_seen 203)
+ 
+ (!type already_seen 202)
+ 
+ (!type already_seen 201)
+ 
+ (!type already_seen 200)
+ 
+ (!type already_seen 199)
+ 
+ (!type already_seen 198)
+ 
+ (!type already_seen 197)
+ 
+ (!type already_seen 196)
+ 
+ (!type already_seen 195)
+ 
+ (!type already_seen 194)
+ 
+ (!type already_seen 193)
+ 
+ (!type already_seen 192)
+ 
+ (!type already_seen 191)
+ 
+ (!type already_seen 190)
+ 
+ (!type already_seen 189)
+ 
+ (!type already_seen 188)
+ 
+ (!type already_seen 187)
+ 
+ (!type already_seen 186)
+ 
+ (!type already_seen 185)
+ 
+ (!type already_seen 184)
+ 
+ (!type already_seen 183)
+ 
+ (!type already_seen 182)
+ 
+ (!type already_seen 181)
+ 
+ (!type already_seen 180)
+ 
+ (!type already_seen 179)
+ 
+ (!type already_seen 178)
+ 
+ (!type already_seen 177)
+ 
+ (!type already_seen 176)
+ 
+ (!type already_seen 175)
+ 
+ (!type already_seen 174)
+ 
+ (!type already_seen 173)
+ 
+ (!type already_seen 172)
+ 
+ (!type already_seen 171)
+ 
+ (!type already_seen 170)
+ 
+ (!type already_seen 169)
+ 
+ (!type already_seen 168)
+ 
+ (!type already_seen 167)
+ 
+ (!type already_seen 166)
+ 
+ (!type already_seen 165)
+ 
+ (!type already_seen 164)
+ 
+ (!type already_seen 163)
+ 
+ (!type already_seen 162)
+ 
+ (!type already_seen 161)
+ 
+ (!type already_seen 160)
+ 
+ (!type already_seen 159)
+ 
+ (!type already_seen 158)
+ 
+ (!type already_seen 157)
+ 
+ (!type already_seen 156)
+ 
+ (!type already_seen 155)
+ 
+ (!type struct 898 nil  gc_unused "full_rtx_costs"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 899 nil  gc_unused "subreg_shape"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 900 nil  gc_unused "address_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 901 nil  gc_unused "std::pair<rtx,machine_mode>"
+  (!srcfileloc  "rtl.h" 2227)
+  (!fields 2 
+   (!pair  "machine_mode"
+    (!type already_seen 2)
+    (!srcfileloc  "rtl.h" 2227)
+    nil )
+   (!pair  "rtx"
+    (!type already_seen 150)
+    (!srcfileloc  "rtl.h" 2227)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 902 nil  gc_unused "poly_int<NUM_POLY_INT_COEFFS,generic_wide_int<wide_int_ref_storage<false,false>>>"
+  (!srcfileloc  "rtl.h" 2315)
+  (!fields 3 
+   (!pair  "false"
+    (!type already_seen 856)
+    (!srcfileloc  "rtl.h" 2315)
+    nil )
+   (!pair  "generic_wide_int<wide_int_ref_storage<false"
+    (!type user_struct 903 nil  gc_unused "generic_wide_int<wide_int_ref_storage<false"
+     (!srcfileloc  "rtl.h" 2315)
+     (!fields 1 
+      (!pair  "wide_int_ref_storage<false"
+       (!type already_seen 855)
+       (!srcfileloc  "rtl.h" 2315)
+       nil )
+     )
+    )
+    (!srcfileloc  "rtl.h" 2315)
+    nil )
+   (!pair  "NUM_POLY_INT_COEFFS"
+    (!type already_seen 890)
+    (!srcfileloc  "rtl.h" 2315)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 903)
+ 
+ (!type already_seen 407)
+ 
+ (!type struct 904 nil  gc_unused "subreg_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 587)
+ 
+ (!type struct 905 nil  gc_unused "rtl_hooks"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 818)
+ 
+ (!type struct 906 nil  gc_unused "expand_operand"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 907 nil  gc_unused "auto_suppress_location_wrappers"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 908 nil  gc_used "tree_decl_map_cache_hasher"
+  (!srcfileloc  "tree.c" 238)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type struct 909 nil  gc_used "tree_cache_traits"
+  (!srcfileloc  "tree.h" 5177)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 910 
+  (!type pointer 911 nil  gc_used
+   (!type already_seen 910)
+  )
+  gc_pointed_to "hash_map<tree,tree,tree_cache_traits>"
+  (!srcfileloc  "tree.h" 5177)
+  (!fields 3 
+   (!pair  "tree_cache_traits"
+    (!type already_seen 909)
+    (!srcfileloc  "tree.h" 5177)
+    nil )
+   (!pair  "tree"
+    (!type already_seen 23)
+    (!srcfileloc  "tree.h" 5177)
+    nil )
+   (!pair  "tree"
+    (!type already_seen 23)
+    (!srcfileloc  "tree.h" 5177)
+    nil )
+  )
+ )
+ 
+ (!type struct 912 nil  gc_unused "unextended_tree"
+  (!srcfileloc  "tree.h" 5493)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type struct 913 nil  gc_unused "extended_tree"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 914 nil  gc_unused "extended_tree<WIDE_INT_MAX_PRECISION>"
+  (!srcfileloc  "tree.h" 5473)
+  (!fields 1 
+   (!pair  "WIDE_INT_MAX_PRECISION"
+    (!type already_seen 849)
+    (!srcfileloc  "tree.h" 5473)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 915 nil  gc_unused "extended_tree<ADDR_MAX_PRECISION>"
+  (!srcfileloc  "tree.h" 5474)
+  (!fields 1 
+   (!pair  "ADDR_MAX_PRECISION"
+    (!type already_seen 849)
+    (!srcfileloc  "tree.h" 5474)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 916 nil  gc_unused "generic_wide_int<widest_extended_tree>"
+  (!srcfileloc  "tree.h" 5476)
+  (!fields 1 
+   (!pair  "widest_extended_tree"
+    (!type already_seen 914)
+    (!srcfileloc  "tree.h" 5476)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 917 nil  gc_unused "generic_wide_int<offset_extended_tree>"
+  (!srcfileloc  "tree.h" 5477)
+  (!fields 1 
+   (!pair  "offset_extended_tree"
+    (!type already_seen 915)
+    (!srcfileloc  "tree.h" 5477)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 918 nil  gc_unused "generic_wide_int<wide_int_ref_storage<false,false>>"
+  (!srcfileloc  "tree.h" 5478)
+  (!fields 2 
+   (!pair  "false"
+    (!type already_seen 856)
+    (!srcfileloc  "tree.h" 5478)
+    nil )
+   (!pair  "wide_int_ref_storage<false"
+    (!type already_seen 855)
+    (!srcfileloc  "tree.h" 5478)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 919 nil  gc_unused "poly_int<NUM_POLY_INT_COEFFS,generic_wide_int<widest_extended_tree>>"
+  (!srcfileloc  "tree.h" 5487)
+  (!fields 2 
+   (!pair  "generic_wide_int<widest_extended_tree"
+    (!type user_struct 920 nil  gc_unused "generic_wide_int<widest_extended_tree"
+     (!srcfileloc  "tree.h" 5487)
+     (!fields 1 
+      (!pair  "widest_extended_tree"
+       (!type already_seen 914)
+       (!srcfileloc  "tree.h" 5487)
+       nil )
+     )
+    )
+    (!srcfileloc  "tree.h" 5487)
+    nil )
+   (!pair  "NUM_POLY_INT_COEFFS"
+    (!type already_seen 890)
+    (!srcfileloc  "tree.h" 5487)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 920)
+ 
+ (!type user_struct 921 nil  gc_unused "poly_int<NUM_POLY_INT_COEFFS,generic_wide_int<offset_extended_tree>>"
+  (!srcfileloc  "tree.h" 5490)
+  (!fields 2 
+   (!pair  "generic_wide_int<offset_extended_tree"
+    (!type user_struct 922 nil  gc_unused "generic_wide_int<offset_extended_tree"
+     (!srcfileloc  "tree.h" 5490)
+     (!fields 1 
+      (!pair  "offset_extended_tree"
+       (!type already_seen 915)
+       (!srcfileloc  "tree.h" 5490)
+       nil )
+     )
+    )
+    (!srcfileloc  "tree.h" 5490)
+    nil )
+   (!pair  "NUM_POLY_INT_COEFFS"
+    (!type already_seen 890)
+    (!srcfileloc  "tree.h" 5490)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 922)
+ 
+ (!type user_struct 923 nil  gc_unused "poly_int<NUM_POLY_INT_COEFFS,generic_wide_int<unextended_tree>>"
+  (!srcfileloc  "tree.h" 5493)
+  (!fields 2 
+   (!pair  "generic_wide_int<unextended_tree"
+    (!type user_struct 924 nil  gc_unused "generic_wide_int<unextended_tree"
+     (!srcfileloc  "tree.h" 5493)
+     (!fields 1 
+      (!pair  "unextended_tree"
+       (!type already_seen 912)
+       (!srcfileloc  "tree.h" 5493)
+       nil )
+     )
+    )
+    (!srcfileloc  "tree.h" 5493)
+    nil )
+   (!pair  "NUM_POLY_INT_COEFFS"
+    (!type already_seen 890)
+    (!srcfileloc  "tree.h" 5493)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 924)
+ 
+ (!type user_struct 925 nil  gc_unused "generic_wide_int<extended_tree<N>>"
+  (!srcfileloc  "tree.h" 5503)
+  (!fields 1 
+   (!pair  "extended_tree<N"
+    (!type user_struct 926 nil  gc_unused "extended_tree<N"
+     (!srcfileloc  "tree.h" 5503)
+     (!fields 1 
+      (!pair  "N"
+       (!type undefined 927 nil  gc_unused "N"
+        (!srcfileloc  "tree.h" 5503)
+       )
+       (!srcfileloc  "tree.h" 5503)
+       nil )
+     )
+    )
+    (!srcfileloc  "tree.h" 5503)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 926)
+ 
+ (!type already_seen 927)
+ 
+ (!type user_struct 928 nil  gc_unused "generic_wide_int<unextended_tree>"
+  (!srcfileloc  "tree.h" 5510)
+  (!fields 1 
+   (!pair  "unextended_tree"
+    (!type already_seen 912)
+    (!srcfileloc  "tree.h" 5510)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 929 nil  gc_unused "generic_wide_int<wi::extended_tree<WIDE_INT_MAX_PRECISION*>>"
+  (!srcfileloc  "tree.h" 5517)
+  (!fields 1 
+   (!pair  "wi::extended_tree<WIDE_INT_MAX_PRECISION"
+    (!type pointer 930 nil  gc_unused
+     (!type struct 931 
+      (!type already_seen 930)
+      gc_unused "wi::extended_tree<WIDE_INT_MAX_PRECISION"nil 
+      (!fields 0 )
+      nil 0 nil nil )
+    )
+    (!srcfileloc  "tree.h" 5517)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 931)
+ 
+ (!type undefined 932 nil  gc_unused "typename"
+  (!srcfileloc  "tree.h" 5768)
+ )
+ 
+ (!type struct 933 nil  gc_used "int_n_trees_t"
+  (!srcfileloc  "tree.h" 5853)
+  (!fields 2 
+   (!pair  "signed_type"
+    (!type already_seen 23)
+    (!srcfileloc  "tree.h" 5851)
+    nil )
+   (!pair  "unsigned_type"
+    (!type already_seen 23)
+    (!srcfileloc  "tree.h" 5852)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 934 nil  gc_unused "builtin_structptr_type"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 935 nil  gc_unused "op_location_t"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 556)
+ 
+ (!type already_seen 558)
+ 
+ (!type already_seen 487)
+ 
+ (!type struct 936 nil  gc_used "alias_pair"
+  (!srcfileloc  "tree-core.h" 2142)
+  (!fields 2 
+   (!pair  "decl"
+    (!type already_seen 23)
+    (!srcfileloc  "tree-core.h" 895)
+    nil )
+   (!pair  "target"
+    (!type already_seen 23)
+    (!srcfileloc  "tree-core.h" 896)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type already_seen 27)
+ 
+ (!type already_seen 28)
+ 
+ (!type already_seen 29)
+ 
+ (!type already_seen 30)
+ 
+ (!type already_seen 26)
+ 
+ (!type already_seen 25)
+ 
+ (!type already_seen 31)
+ 
+ (!type already_seen 32)
+ 
+ (!type already_seen 33)
+ 
+ (!type already_seen 37)
+ 
+ (!type already_seen 41)
+ 
+ (!type already_seen 48)
+ 
+ (!type already_seen 50)
+ 
+ (!type already_seen 46)
+ 
+ (!type already_seen 35)
+ 
+ (!type already_seen 51)
+ 
+ (!type already_seen 547)
+ 
+ (!type already_seen 548)
+ 
+ (!type already_seen 570)
+ 
+ (!type already_seen 569)
+ 
+ (!type already_seen 567)
+ 
+ (!type already_seen 551)
+ 
+ (!type already_seen 550)
+ 
+ (!type already_seen 559)
+ 
+ (!type already_seen 561)
+ 
+ (!type already_seen 554)
+ 
+ (!type already_seen 553)
+ 
+ (!type already_seen 776)
+ 
+ (!type already_seen 572)
+ 
+ (!type already_seen 571)
+ 
+ (!type already_seen 97)
+ 
+ (!type already_seen 562)
+ 
+ (!type already_seen 515)
+ 
+ (!type already_seen 514)
+ 
+ (!type already_seen 518)
+ 
+ (!type already_seen 516)
+ 
+ (!type already_seen 546)
+ 
+ (!type already_seen 563)
+ 
+ (!type already_seen 52)
+ 
+ (!type already_seen 55)
+ 
+ (!type already_seen 53)
+ 
+ (!type already_seen 149)
+ 
+ (!type already_seen 400)
+ 
+ (!type already_seen 401)
+ 
+ (!type already_seen 402)
+ 
+ (!type already_seen 403)
+ 
+ (!type already_seen 398)
+ 
+ (!type already_seen 367)
+ 
+ (!type already_seen 399)
+ 
+ (!type already_seen 366)
+ 
+ (!type already_seen 405)
+ 
+ (!type already_seen 513)
+ 
+ (!type already_seen 404)
+ 
+ (!type already_seen 566)
+ 
+ (!type already_seen 564)
+ 
+ (!type already_seen 578)
+ 
+ (!type already_seen 574)
+ 
+ (!type already_seen 581)
+ 
+ (!type already_seen 579)
+ 
+ (!type already_seen 623)
+ 
+ (!type struct 937 nil  gc_unused "attribute_spec"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 938 
+  (!type pointer 939 nil  gc_unused
+   (!type already_seen 938)
+  )
+  gc_unused "record_layout_info_s"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 940 nil  gc_unused "function_args_iterator"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 941 nil  gc_used "tree_map_base"
+  (!srcfileloc  "tree-core.h" 2058)
+  (!fields 1 
+   (!pair  "from"
+    (!type already_seen 23)
+    (!srcfileloc  "tree-core.h" 2057)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 942 nil  gc_pointed_to "tree_map"
+  (!srcfileloc  "tree-core.h" 2066)
+  (!fields 3 
+   (!pair  "base"
+    (!type already_seen 941)
+    (!srcfileloc  "tree-core.h" 2063)
+    nil )
+   (!pair  "hash"
+    (!type already_seen 2)
+    (!srcfileloc  "tree-core.h" 2064)
+    nil )
+   (!pair  "to"
+    (!type already_seen 23)
+    (!srcfileloc  "tree-core.h" 2065)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type struct 943 nil  gc_pointed_to "tree_decl_map"
+  (!srcfileloc  "tree-core.h" 2072)
+  (!fields 2 
+   (!pair  "base"
+    (!type already_seen 941)
+    (!srcfileloc  "tree-core.h" 2070)
+    nil )
+   (!pair  "to"
+    (!type already_seen 23)
+    (!srcfileloc  "tree-core.h" 2071)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type struct 944 nil  gc_pointed_to "tree_int_map"
+  (!srcfileloc  "tree-core.h" 2078)
+  (!fields 2 
+   (!pair  "base"
+    (!type already_seen 941)
+    (!srcfileloc  "tree-core.h" 2076)
+    nil )
+   (!pair  "to"
+    (!type already_seen 2)
+    (!srcfileloc  "tree-core.h" 2077)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type struct 945 nil  gc_pointed_to "tree_vec_map"
+  (!srcfileloc  "tree-core.h" 2084)
+  (!fields 2 
+   (!pair  "base"
+    (!type already_seen 941)
+    (!srcfileloc  "tree-core.h" 2082)
+    nil )
+   (!pair  "to"
+    (!type already_seen 96)
+    (!srcfileloc  "tree-core.h" 2083)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type struct 946 nil  gc_unused "call_expr_arg_iterator"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 947 nil  gc_unused "const_call_expr_arg_iterator"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 948 nil  gc_used "builtin_info_type"
+  (!srcfileloc  "tree-core.h" 2177)
+  (!fields 3 
+   (!pair  "decl"
+    (!type already_seen 23)
+    (!srcfileloc  "tree-core.h" 2106)
+    nil )
+   (!pair  "implicit_p"
+    (!type already_seen 2)
+    (!srcfileloc  "tree-core.h" 2109)
+    nil )
+   (!pair  "declared_p"
+    (!type already_seen 2)
+    (!srcfileloc  "tree-core.h" 2111)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 949 nil  gc_unused "floatn_type_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 950 
+  (!type pointer 951 nil  gc_used
+   (!type already_seen 950)
+  )
+  gc_pointed_to "vec<alias_pair,va_gc>"
+  (!srcfileloc  "tree-core.h" 2142)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "tree-core.h" 2142)
+    nil )
+   (!pair  "alias_pair"
+    (!type already_seen 936)
+    (!srcfileloc  "tree-core.h" 2142)
+    nil )
+  )
+ )
+ 
+ (!type struct 952 nil  gc_pointed_to "libfunc_entry"
+  (!srcfileloc  "libfuncs.h" 44)
+  (!fields 4 
+   (!pair  "op"
+    (!type already_seen 2)
+    (!srcfileloc  "libfuncs.h" 42)
+    nil )
+   (!pair  "mode1"
+    (!type already_seen 2)
+    (!srcfileloc  "libfuncs.h" 42)
+    nil )
+   (!pair  "mode2"
+    (!type already_seen 2)
+    (!srcfileloc  "libfuncs.h" 42)
+    nil )
+   (!pair  "libfunc"
+    (!type already_seen 150)
+    (!srcfileloc  "libfuncs.h" 43)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type already_seen 606)
+ 
+ (!type already_seen 605)
+ 
+ (!type already_seen 602)
+ 
+ (!type struct 953 nil  gc_unused "ht"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 954 nil  gc_unused "_obstack_chunk"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 955 nil  gc_unused "obstack"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 956 nil  gc_unused "real_format"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 957 nil  gc_unused "format_helper"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 958 
+  (!type pointer 959 nil  gc_used
+   (!type already_seen 958)
+  )
+  gc_pointed_to "sequence_stack"
+  (!srcfileloc  "function.h" 34)
+  (!fields 3 
+   (!pair  "first"
+    (!type already_seen 346)
+    (!srcfileloc  "function.h" 31)
+    nil )
+   (!pair  "last"
+    (!type already_seen 346)
+    (!srcfileloc  "function.h" 32)
+    nil )
+   (!pair  "next"
+    (!type already_seen 959)
+    (!srcfileloc  "function.h" 33)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 960 nil  gc_used "emit_status"
+  (!srcfileloc  "function.h" 76)
+  (!fields 7 
+   (!pair  "x_reg_rtx_no"
+    (!type already_seen 2)
+    (!srcfileloc  "function.h" 41)
+    nil )
+   (!pair  "x_first_label_num"
+    (!type already_seen 2)
+    (!srcfileloc  "function.h" 44)
+    nil )
+   (!pair  "seq"
+    (!type already_seen 958)
+    (!srcfileloc  "function.h" 56)
+    nil )
+   (!pair  "x_cur_insn_uid"
+    (!type already_seen 2)
+    (!srcfileloc  "function.h" 60)
+    nil )
+   (!pair  "x_cur_debug_insn_uid"
+    (!type already_seen 2)
+    (!srcfileloc  "function.h" 64)
+    nil )
+   (!pair  "regno_pointer_align_length"
+    (!type already_seen 2)
+    (!srcfileloc  "function.h" 70)
+    nil )
+   (!pair  "regno_pointer_align"
+    (!type already_seen 11)
+    (!srcfileloc  "function.h" 75)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+  )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 961 
+  (!type pointer 962 nil  gc_used
+   (!type already_seen 961)
+  )
+  gc_pointed_to "vec<rtx_insn*,va_gc>"
+  (!srcfileloc  "function.h" 131)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "function.h" 131)
+    nil )
+   (!pair  "rtx_insn"
+    (!type already_seen 346)
+    (!srcfileloc  "function.h" 131)
+    nil )
+  )
+ )
+ 
+ (!type struct 963 nil  gc_used "expr_status"
+  (!srcfileloc  "function.h" 132)
+  (!fields 6 
+   (!pair  "x_pending_stack_adjust"
+    (!type already_seen 2)
+    (!srcfileloc  "function.h" 97)
+    nil )
+   (!pair  "x_inhibit_defer_pop"
+    (!type already_seen 2)
+    (!srcfileloc  "function.h" 114)
+    nil )
+   (!pair  "x_stack_pointer_delta"
+    (!type already_seen 2)
+    (!srcfileloc  "function.h" 120)
+    nil )
+   (!pair  "x_saveregs_value"
+    (!type already_seen 150)
+    (!srcfileloc  "function.h" 125)
+    nil )
+   (!pair  "x_apply_args_value"
+    (!type already_seen 150)
+    (!srcfileloc  "function.h" 128)
+    nil )
+   (!pair  "x_forced_labels"
+    (!type already_seen 962)
+    (!srcfileloc  "function.h" 131)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 964 
+  (!type pointer 965 nil  gc_used
+   (!type already_seen 964)
+  )
+  gc_pointed_to "call_site_record_d"
+  (!srcfileloc  "except.c" 167)
+  (!fields 2 
+   (!pair  "landing_pad"
+    (!type already_seen 150)
+    (!srcfileloc  "except.c" 165)
+    nil )
+   (!pair  "action"
+    (!type already_seen 2)
+    (!srcfileloc  "except.c" 166)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type already_seen 431)
+ 
+ (!type user_struct 966 
+  (!type pointer 967 nil  gc_used
+   (!type already_seen 966)
+  )
+  gc_pointed_to "vec<call_site_record,va_gc>"
+  (!srcfileloc  "function.h" 147)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "function.h" 147)
+    nil )
+   (!pair  "call_site_record"
+    (!type already_seen 965)
+    (!srcfileloc  "function.h" 147)
+    nil )
+  )
+ )
+ 
+ (!type struct 968 nil  gc_used "rtl_eh"
+  (!srcfileloc  "function.h" 148)
+  (!fields 7 
+   (!pair  "ehr_stackadj"
+    (!type already_seen 150)
+    (!srcfileloc  "function.h" 138)
+    nil )
+   (!pair  "ehr_handler"
+    (!type already_seen 150)
+    (!srcfileloc  "function.h" 139)
+    nil )
+   (!pair  "ehr_label"
+    (!type already_seen 420)
+    (!srcfileloc  "function.h" 140)
+    nil )
+   (!pair  "sjlj_fc"
+    (!type already_seen 150)
+    (!srcfileloc  "function.h" 142)
+    nil )
+   (!pair  "sjlj_exit_after"
+    (!type already_seen 346)
+    (!srcfileloc  "function.h" 143)
+    nil )
+   (!pair  "action_record_data"
+    (!type already_seen 430)
+    (!srcfileloc  "function.h" 145)
+    nil )
+   (!pair  "call_site_record_v"
+    (!type array 969 nil  gc_used "2" 
+     (!type already_seen 967)
+    )
+    (!srcfileloc  "function.h" 147)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type already_seen 439)
+ 
+ (!type already_seen 470)
+ 
+ (!type struct 970 
+  (!type pointer 971 nil  gc_used
+   (!type already_seen 970)
+  )
+  gc_pointed_to "rtx_constant_pool"
+  (!srcfileloc  "varasm.c" 3662)
+  (!fields 4 
+   (!pair  "first"
+    (!type already_seen 272)
+    (!srcfileloc  "varasm.c" 3650)
+    nil )
+   (!pair  "last"
+    (!type already_seen 272)
+    (!srcfileloc  "varasm.c" 3651)
+    nil )
+   (!pair  "const_rtx_htab"
+    (!type pointer 972 nil  gc_used
+     (!type user_struct 973 
+      (!type already_seen 972)
+      gc_pointed_to "hash_table<const_rtx_desc_hasher>"
+      (!srcfileloc  "varasm.c" 3657)
+      (!fields 1 
+       (!pair  "const_rtx_desc_hasher"
+        (!type struct 974 nil  gc_used "const_rtx_desc_hasher"
+         (!srcfileloc  "varasm.c" 3657)
+         (!fields 0 )
+         nil 2047 nil nil )
+        (!srcfileloc  "varasm.c" 3657)
+        nil )
+      )
+     )
+    )
+    (!srcfileloc  "varasm.c" 3657)
+    nil )
+   (!pair  "offset"
+    (!type already_seen 2)
+    (!srcfileloc  "varasm.c" 3661)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 975 nil  gc_used "varasm_status"
+  (!srcfileloc  "function.h" 168)
+  (!fields 2 
+   (!pair  "pool"
+    (!type already_seen 971)
+    (!srcfileloc  "function.h" 163)
+    nil )
+   (!pair  "deferred_constants"
+    (!type already_seen 2)
+    (!srcfileloc  "function.h" 167)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 976 nil  gc_used "function_subsections"
+  (!srcfileloc  "function.h" 181)
+  (!fields 4 
+   (!pair  "hot_section_label"
+    (!type already_seen 11)
+    (!srcfileloc  "function.h" 177)
+    nil )
+   (!pair  "cold_section_label"
+    (!type already_seen 11)
+    (!srcfileloc  "function.h" 178)
+    nil )
+   (!pair  "hot_section_end_label"
+    (!type already_seen 11)
+    (!srcfileloc  "function.h" 179)
+    nil )
+   (!pair  "cold_section_end_label"
+    (!type already_seen 11)
+    (!srcfileloc  "function.h" 180)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 977 
+  (!type pointer 978 nil  gc_used
+   (!type already_seen 977)
+  )
+  gc_pointed_to "frame_space"
+  (!srcfileloc  "function.h" 192)
+  (!fields 3 
+   (!pair  "next"
+    (!type already_seen 978)
+    (!srcfileloc  "function.h" 188)
+    nil )
+   (!pair  "start"
+    (!type already_seen 2)
+    (!srcfileloc  "function.h" 190)
+    nil )
+   (!pair  "length"
+    (!type already_seen 2)
+    (!srcfileloc  "function.h" 191)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type already_seen 461)
+ 
+ (!type already_seen 409)
+ 
+ (!type already_seen 433)
+ 
+ (!type already_seen 456)
+ 
+ (!type already_seen 82)
+ 
+ (!type already_seen 468)
+ 
+ (!type struct 979 nil  gc_pointed_to "types_used_by_vars_entry"
+  (!srcfileloc  "function.h" 426)
+  (!fields 2 
+   (!pair  "type"
+    (!type already_seen 23)
+    (!srcfileloc  "function.h" 424)
+    nil )
+   (!pair  "var_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "function.h" 425)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type struct 980 nil  gc_used "used_type_hasher"
+  (!srcfileloc  "function.h" 439)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 981 
+  (!type pointer 982 nil  gc_used
+   (!type already_seen 981)
+  )
+  gc_pointed_to "hash_table<used_type_hasher>"
+  (!srcfileloc  "function.h" 439)
+  (!fields 1 
+   (!pair  "used_type_hasher"
+    (!type already_seen 980)
+    (!srcfileloc  "function.h" 439)
+    nil )
+  )
+ )
+ 
+ (!type struct 983 nil  gc_unused "args_size"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 984 nil  gc_unused "locate_and_pad_arg_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 265)
+ 
+ (!type already_seen 266)
+ 
+ (!type already_seen 267)
+ 
+ (!type already_seen 268)
+ 
+ (!type already_seen 326)
+ 
+ (!type already_seen 330)
+ 
+ (!type already_seen 336)
+ 
+ (!type already_seen 459)
+ 
+ (!type already_seen 325)
+ 
+ (!type already_seen 334)
+ 
+ (!type already_seen 328)
+ 
+ (!type already_seen 338)
+ 
+ (!type already_seen 458)
+ 
+ (!type struct 985 nil  gc_unused "eni_weights"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 986 nil  gc_unused "rtx_iv"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 987 nil  gc_unused "loop_iterator"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 608)
+ 
+ (!type already_seen 435)
+ 
+ (!type already_seen 350)
+ 
+ (!type struct 988 nil  gc_unused "auto_flag"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 989 nil  gc_unused "auto_edge_flag"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 990 nil  gc_unused "auto_bb_flag"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 991 nil  gc_unused "profile_probability"
+  (!srcfileloc  "profile-count.h" 582)
+  (!fields 0 )
+ )
+ 
+ (!type struct 992 nil  gc_unused "sreal"
+  (!srcfileloc  "profile-count.h" 1113)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type struct 993 nil  gc_unused "cselib_val"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 994 nil  gc_unused "elt_loc_list"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 995 nil  gc_unused "cselib_set"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 349)
+ 
+ (!type already_seen 344)
+ 
+ (!type already_seen 321)
+ 
+ (!type already_seen 342)
+ 
+ (!type already_seen 345)
+ 
+ (!type already_seen 343)
+ 
+ (!type struct 996 nil  gc_unused "edge_iterator"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 370)
+ 
+ (!type already_seen 374)
+ 
+ (!type already_seen 373)
+ 
+ (!type already_seen 376)
+ 
+ (!type already_seen 814)
+ 
+ (!type already_seen 397)
+ 
+ (!type struct 997 nil  gc_used "section_name_hasher"
+  (!srcfileloc  "cgraph.h" 2329)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type already_seen 379)
+ 
+ (!type struct 998 
+  (!type pointer 999 nil  gc_unused
+   (!type already_seen 998)
+  )
+  gc_used "symbol_priority_map"
+  (!srcfileloc  "cgraph.h" 2335)
+  (!fields 2 
+   (!pair  "init"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 2035)
+    nil )
+   (!pair  "fini"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 2036)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type already_seen 824)
+ 
+ (!type already_seen 815)
+ 
+ (!type already_seen 816)
+ 
+ (!type already_seen 823)
+ 
+ (!type already_seen 821)
+ 
+ (!type already_seen 819)
+ 
+ (!type already_seen 811)
+ 
+ (!type already_seen 809)
+ 
+ (!type struct 1000 
+  (!type pointer 1001 nil  gc_used
+   (!type already_seen 1000)
+  )
+  gc_pointed_to "cgraph_function_version_info"
+  (!srcfileloc  "cgraph.h" 879)
+  (!fields 4 
+   (!pair  "this_node"
+    (!type already_seen 798)
+    (!srcfileloc  "cgraph.h" 860)
+    nil )
+   (!pair  "prev"
+    (!type already_seen 1001)
+    (!srcfileloc  "cgraph.h" 864)
+    nil )
+   (!pair  "next"
+    (!type already_seen 1001)
+    (!srcfileloc  "cgraph.h" 868)
+    nil )
+   (!pair  "dispatcher_resolver"
+    (!type already_seen 23)
+    (!srcfileloc  "cgraph.h" 878)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type already_seen 801)
+ 
+ (!type already_seen 807)
+ 
+ (!type user_struct 1002 nil  gc_unused "vec<cgraph_edge*>"
+  (!srcfileloc  "cgraph.h" 1164)
+  (!fields 1 
+   (!pair  "cgraph_edge"
+    (!type already_seen 800)
+    (!srcfileloc  "cgraph.h" 1164)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 806)
+ 
+ (!type already_seen 812)
+ 
+ (!type struct 1003 
+  (!type pointer 1004 nil  gc_unused
+   (!type already_seen 1003)
+  )
+  gc_unused "cgraph_node_set_def"
+  (!srcfileloc  "cgraph.h" 1499)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type struct 1005 
+  (!type pointer 1006 nil  gc_unused
+   (!type already_seen 1005)
+  )
+  gc_unused "varpool_node_set_def"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1007 nil  gc_unused "cgraph_node_set_iterator"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1008 nil  gc_unused "varpool_node_set_iterator"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 804)
+ 
+ (!type already_seen 803)
+ 
+ (!type undefined 1009 nil  gc_unused "availability"
+  (!srcfileloc  "cgraph.h" 1870)
+ )
+ 
+ (!type struct 1010 
+  (!type pointer 1011 nil  gc_used
+   (!type already_seen 1010)
+  )
+  gc_pointed_to "asm_node"
+  (!srcfileloc  "cgraph.h" 1993)
+  (!fields 3 
+   (!pair  "next"
+    (!type already_seen 1011)
+    (!srcfileloc  "cgraph.h" 1988)
+    nil )
+   (!pair  "asm_str"
+    (!type already_seen 23)
+    (!srcfileloc  "cgraph.h" 1990)
+    nil )
+   (!pair  "order"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 1992)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1012 
+  (!type pointer 1013 nil  gc_unused
+   (!type already_seen 1012)
+  )
+  gc_unused "cgraph_edge_hook_list"
+  (!srcfileloc  "cgraph.h" 2196)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type struct 1014 
+  (!type pointer 1015 nil  gc_unused
+   (!type already_seen 1014)
+  )
+  gc_unused "cgraph_node_hook_list"
+  (!srcfileloc  "cgraph.h" 2203)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type struct 1016 
+  (!type pointer 1017 nil  gc_unused
+   (!type already_seen 1016)
+  )
+  gc_unused "varpool_node_hook_list"
+  (!srcfileloc  "cgraph.h" 2210)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type struct 1018 
+  (!type pointer 1019 nil  gc_unused
+   (!type already_seen 1018)
+  )
+  gc_unused "cgraph_2edge_hook_list"
+  (!srcfileloc  "cgraph.h" 2231)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type struct 1020 
+  (!type pointer 1021 nil  gc_unused
+   (!type already_seen 1020)
+  )
+  gc_unused "cgraph_2node_hook_list"
+  (!srcfileloc  "cgraph.h" 2237)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type struct 1022 nil  gc_used "asmname_hasher"
+  (!srcfileloc  "cgraph.h" 2332)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type struct 1023 
+  (!type pointer 1024 nil  gc_used
+   (!type already_seen 1023)
+  )
+  gc_pointed_to "symbol_table"
+  (!srcfileloc  "cgraph.h" 2388)
+  (!fields 30 
+   (!pair  "DEBUG_FUNCTION"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 2277)
+    nil )
+   (!pair  "cgraph_count"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 2297)
+    nil )
+   (!pair  "cgraph_max_uid"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 2298)
+    nil )
+   (!pair  "cgraph_max_summary_id"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 2299)
+    nil )
+   (!pair  "edges_count"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 2301)
+    nil )
+   (!pair  "edges_max_uid"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 2302)
+    nil )
+   (!pair  "edges_max_summary_id"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 2303)
+    nil )
+   (!pair  "nodes"
+    (!type already_seen 368)
+    (!srcfileloc  "cgraph.h" 2305)
+    nil )
+   (!pair  "asmnodes"
+    (!type already_seen 1011)
+    (!srcfileloc  "cgraph.h" 2306)
+    nil )
+   (!pair  "asm_last_node"
+    (!type already_seen 1011)
+    (!srcfileloc  "cgraph.h" 2307)
+    nil )
+   (!pair  "free_nodes"
+    (!type already_seen 798)
+    (!srcfileloc  "cgraph.h" 2308)
+    nil )
+   (!pair  "free_edges"
+    (!type already_seen 800)
+    (!srcfileloc  "cgraph.h" 2312)
+    nil )
+   (!pair  "order"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 2317)
+    nil )
+   (!pair  "global_info_ready"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 2320)
+    nil )
+   (!pair  "state"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 2322)
+    nil )
+   (!pair  "function_flags_ready"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 2324)
+    nil )
+   (!pair  "cpp_implicit_aliases_done"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 2326)
+    nil )
+   (!pair  "section_hash"
+    (!type pointer 1025 nil  gc_used
+     (!type user_struct 1026 
+      (!type already_seen 1025)
+      gc_pointed_to "hash_table<section_name_hasher>"
+      (!srcfileloc  "cgraph.h" 2329)
+      (!fields 1 
+       (!pair  "section_name_hasher"
+        (!type already_seen 997)
+        (!srcfileloc  "cgraph.h" 2329)
+        nil )
+      )
+     )
+    )
+    (!srcfileloc  "cgraph.h" 2329)
+    nil )
+   (!pair  "assembler_name_hash"
+    (!type pointer 1027 nil  gc_used
+     (!type user_struct 1028 
+      (!type already_seen 1027)
+      gc_pointed_to "hash_table<asmname_hasher>"
+      (!srcfileloc  "cgraph.h" 2332)
+      (!fields 1 
+       (!pair  "asmname_hasher"
+        (!type already_seen 1022)
+        (!srcfileloc  "cgraph.h" 2332)
+        nil )
+      )
+     )
+    )
+    (!srcfileloc  "cgraph.h" 2332)
+    nil )
+   (!pair  "init_priority_hash"
+    (!type pointer 1029 nil  gc_used
+     (!type user_struct 1030 
+      (!type already_seen 1029)
+      gc_pointed_to "hash_map<symtab_node*,symbol_priority_map>"
+      (!srcfileloc  "cgraph.h" 2335)
+      (!fields 2 
+       (!pair  "symbol_priority_map"
+        (!type already_seen 998)
+        (!srcfileloc  "cgraph.h" 2335)
+        nil )
+       (!pair  "symtab_node"
+        (!type already_seen 368)
+        (!srcfileloc  "cgraph.h" 2335)
+        nil )
+      )
+     )
+    )
+    (!srcfileloc  "cgraph.h" 2335)
+    nil )
+   (!pair  "dump_file"
+    (!type pointer 1031 nil  gc_unused
+     (!type undefined 1032 
+      (!type already_seen 1031)
+      gc_unused "FILE"
+      (!srcfileloc  "cgraph.h" 2337)
+     )
+    )
+    (!srcfileloc  "cgraph.h" 2337)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "ipa_clones_dump_file"
+    (!type already_seen 1031)
+    (!srcfileloc  "cgraph.h" 2342)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "cloned_nodes"
+    (!type user_struct 1033 nil  gc_unused "hash_set<cgraph_node*>"
+     (!srcfileloc  "cgraph.h" 2344)
+     (!fields 1 
+      (!pair  "cgraph_node"
+       (!type already_seen 798)
+       (!srcfileloc  "cgraph.h" 2344)
+       nil )
+     )
+    )
+    (!srcfileloc  "cgraph.h" 2344)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "m_first_edge_removal_hook"
+    (!type already_seen 1013)
+    (!srcfileloc  "cgraph.h" 2375)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "m_first_cgraph_removal_hook"
+    (!type already_seen 1015)
+    (!srcfileloc  "cgraph.h" 2377)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "m_first_edge_duplicated_hook"
+    (!type already_seen 1019)
+    (!srcfileloc  "cgraph.h" 2379)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "m_first_cgraph_duplicated_hook"
+    (!type already_seen 1021)
+    (!srcfileloc  "cgraph.h" 2381)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "m_first_cgraph_insertion_hook"
+    (!type already_seen 1015)
+    (!srcfileloc  "cgraph.h" 2383)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "m_first_varpool_insertion_hook"
+    (!type already_seen 1017)
+    (!srcfileloc  "cgraph.h" 2385)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "m_first_varpool_removal_hook"
+    (!type already_seen 1017)
+    (!srcfileloc  "cgraph.h" 2387)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+  )
+  (!options 
+   (!option tag string  "SYMTAB")
+  )
+  2047 nil nil )
+ 
+ (!type already_seen 1026)
+ 
+ (!type already_seen 1028)
+ 
+ (!type already_seen 1030)
+ 
+ (!type already_seen 1032)
+ 
+ (!type already_seen 1033)
+ 
+ (!type struct 1034 nil  gc_pointed_to "constant_descriptor_tree"
+  (!srcfileloc  "cgraph.h" 2958)
+  (!fields 3 
+   (!pair  "rtl"
+    (!type already_seen 150)
+    (!srcfileloc  "cgraph.h" 2949)
+    nil )
+   (!pair  "value"
+    (!type already_seen 23)
+    (!srcfileloc  "cgraph.h" 2952)
+    nil )
+   (!pair  "hash"
+    (!type already_seen 2)
+    (!srcfileloc  "cgraph.h" 2957)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type struct 1035 nil  gc_used "tree_descriptor_hasher"
+  (!srcfileloc  "varasm.c" 2992)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type struct 1036 nil  gc_unused "symbol_table_test"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1037 nil  gc_unused "reload"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 598)
+ 
+ (!type struct 1038 nil  gc_unused "reg_equivs_t"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1039 nil  gc_unused "insn_chain"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1040 nil  gc_unused "saved_hard_reg"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1041 nil  gc_used "alias_set_hash"
+  (!srcfileloc  "alias.c" 147)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1042 
+  (!type pointer 1043 nil  gc_used
+   (!type already_seen 1042)
+  )
+  gc_pointed_to "hash_map<alias_set_hash,int>"
+  (!srcfileloc  "alias.c" 147)
+  (!fields 2 
+   (!pair  "int"
+    (!type already_seen 428)
+    (!srcfileloc  "alias.c" 147)
+    nil )
+   (!pair  "alias_set_hash"
+    (!type already_seen 1041)
+    (!srcfileloc  "alias.c" 147)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 428)
+ 
+ (!type struct 1044 
+  (!type pointer 1045 nil  gc_used
+   (!type already_seen 1044)
+  )
+  gc_pointed_to "alias_set_entry"
+  (!srcfileloc  "alias.c" 148)
+  (!fields 5 
+   (!pair  "alias_set"
+    (!type already_seen 2)
+    (!srcfileloc  "alias.c" 127)
+    nil )
+   (!pair  "has_zero_child"
+    (!type already_seen 2)
+    (!srcfileloc  "alias.c" 131)
+    nil )
+   (!pair  "is_pointer"
+    (!type already_seen 2)
+    (!srcfileloc  "alias.c" 136)
+    nil )
+   (!pair  "has_pointer"
+    (!type already_seen 2)
+    (!srcfileloc  "alias.c" 138)
+    nil )
+   (!pair  "children"
+    (!type already_seen 1043)
+    (!srcfileloc  "alias.c" 147)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1046 
+  (!type pointer 1047 nil  gc_used
+   (!type already_seen 1046)
+  )
+  gc_pointed_to "vec<alias_set_entry*,va_gc>"
+  (!srcfileloc  "alias.c" 278)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "alias.c" 278)
+    nil )
+   (!pair  "alias_set_entry"
+    (!type already_seen 1045)
+    (!srcfileloc  "alias.c" 278)
+    nil )
+  )
+ )
+ 
+ (!type struct 1048 nil  gc_unused "elt_list"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1049 nil  gc_unused "expand_value_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1050 nil  gc_unused "cselib_hasher"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1051 nil  gc_unused "cselib_record_autoinc_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1052 nil  gc_used "function_version_hasher"
+  (!srcfileloc  "cgraph.c" 118)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1053 
+  (!type pointer 1054 nil  gc_used
+   (!type already_seen 1053)
+  )
+  gc_pointed_to "hash_table<function_version_hasher>"
+  (!srcfileloc  "cgraph.c" 118)
+  (!fields 1 
+   (!pair  "function_version_hasher"
+    (!type already_seen 1052)
+    (!srcfileloc  "cgraph.c" 118)
+    nil )
+  )
+ )
+ 
+ (!type struct 1055 nil  gc_unused "set_pure_flag_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 381)
+ 
+ (!type struct 1056 nil  gc_used "ipa_bit_ggc_hash_traits"
+  (!srcfileloc  "ipa-prop.c" 105)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1057 
+  (!type pointer 1058 nil  gc_used
+   (!type already_seen 1057)
+  )
+  gc_pointed_to "hash_table<ipa_bit_ggc_hash_traits>"
+  (!srcfileloc  "ipa-prop.c" 105)
+  (!fields 1 
+   (!pair  "ipa_bit_ggc_hash_traits"
+    (!type already_seen 1056)
+    (!srcfileloc  "ipa-prop.c" 105)
+    nil )
+  )
+ )
+ 
+ (!type struct 1059 nil  gc_used "ipa_vr_ggc_hash_traits"
+  (!srcfileloc  "ipa-prop.c" 150)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1060 
+  (!type pointer 1061 nil  gc_used
+   (!type already_seen 1060)
+  )
+  gc_pointed_to "hash_table<ipa_vr_ggc_hash_traits>"
+  (!srcfileloc  "ipa-prop.c" 150)
+  (!fields 1 
+   (!pair  "ipa_vr_ggc_hash_traits"
+    (!type already_seen 1059)
+    (!srcfileloc  "ipa-prop.c" 150)
+    nil )
+  )
+ )
+ 
+ (!type struct 1062 
+  (!type pointer 1063 nil  gc_unused
+   (!type already_seen 1062)
+  )
+  gc_unused "ipa_cst_ref_desc"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1064 nil  gc_pointed_to "ipa_node_params"
+  (!srcfileloc  "ipa-prop.h" 364)
+  (!fields 13 
+   (!pair  "descriptors"
+    (!type pointer 1065 nil  gc_used
+     (!type user_struct 1066 
+      (!type already_seen 1065)
+      gc_pointed_to "vec<ipa_param_descriptor,va_gc>"
+      (!srcfileloc  "ipa-prop.h" 332)
+      (!fields 2 
+       (!pair  "va_gc"
+        (!type already_seen 79)
+        (!srcfileloc  "ipa-prop.h" 332)
+        nil )
+       (!pair  "ipa_param_descriptor"
+        (!type struct 1067 nil  gc_used "ipa_param_descriptor"
+         (!srcfileloc  "ipa-prop.h" 332)
+         (!fields 4 
+          (!pair  "decl_or_type"
+           (!type already_seen 23)
+           (!srcfileloc  "ipa-prop.h" 308)
+           nil )
+          (!pair  "controlled_uses"
+           (!type already_seen 2)
+           (!srcfileloc  "ipa-prop.h" 312)
+           nil )
+          (!pair  "move_cost"
+           (!type already_seen 2)
+           (!srcfileloc  "ipa-prop.h" 313)
+           nil )
+          (!pair  "used"
+           (!type already_seen 2)
+           (!srcfileloc  "ipa-prop.h" 315)
+           nil )
+         )
+         nil 2047 nil nil )
+        (!srcfileloc  "ipa-prop.h" 332)
+        nil )
+      )
+     )
+    )
+    (!srcfileloc  "ipa-prop.h" 332)
+    nil )
+   (!pair  "lattices"
+    (!type pointer 1068 nil  gc_unused
+     (!type struct 1069 
+      (!type already_seen 1068)
+      gc_unused "ipcp_param_lattices"nil 
+      (!fields 0 )
+      nil 0 nil nil )
+    )
+    (!srcfileloc  "ipa-prop.h" 335)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "ipcp_orig_node"
+    (!type already_seen 798)
+    (!srcfileloc  "ipa-prop.h" 338)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "known_csts"
+    (!type user_struct 1070 nil  gc_unused "vec<tree>"
+     (!srcfileloc  "ipa-prop.h" 341)
+     (!fields 1 
+      (!pair  "tree"
+       (!type already_seen 23)
+       (!srcfileloc  "ipa-prop.h" 341)
+       nil )
+     )
+    )
+    (!srcfileloc  "ipa-prop.h" 341)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "known_contexts"
+    (!type user_struct 1071 nil  gc_unused "vec<ipa_polymorphic_call_context>"
+     (!srcfileloc  "ipa-prop.h" 344)
+     (!fields 1 
+      (!pair  "ipa_polymorphic_call_context"
+       (!type already_seen 804)
+       (!srcfileloc  "ipa-prop.h" 344)
+       nil )
+     )
+    )
+    (!srcfileloc  "ipa-prop.h" 344)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "analysis_done"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-prop.h" 347)
+    nil )
+   (!pair  "node_enqueued"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-prop.h" 349)
+    nil )
+   (!pair  "do_clone_for_all_contexts"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-prop.h" 352)
+    nil )
+   (!pair  "is_all_contexts_clone"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-prop.h" 354)
+    nil )
+   (!pair  "node_dead"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-prop.h" 357)
+    nil )
+   (!pair  "node_within_scc"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-prop.h" 359)
+    nil )
+   (!pair  "node_calling_single_call"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-prop.h" 361)
+    nil )
+   (!pair  "versionable"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-prop.h" 363)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type struct 1072 nil  gc_used "ipa_jump_func"
+  (!srcfileloc  "ipa-prop.h" 582)
+  (!fields 5 
+   (!pair  "agg"
+    (!type struct 1073 
+     (!type pointer 1074 nil  gc_unused
+      (!type already_seen 1073)
+     )
+     gc_used "ipa_agg_jump_function"
+     (!srcfileloc  "ipa-prop.h" 142)
+     (!fields 2 
+      (!pair  "items"
+       (!type pointer 1075 nil  gc_used
+        (!type user_struct 1076 
+         (!type already_seen 1075)
+         gc_pointed_to "vec<ipa_agg_jf_item,va_gc>"
+         (!srcfileloc  "ipa-prop.h" 139)
+         (!fields 2 
+          (!pair  "va_gc"
+           (!type already_seen 79)
+           (!srcfileloc  "ipa-prop.h" 139)
+           nil )
+          (!pair  "ipa_agg_jf_item"
+           (!type struct 1077 nil  gc_used "ipa_agg_jf_item"
+            (!srcfileloc  "ipa-prop.h" 139)
+            (!fields 2 
+             (!pair  "offset"
+              (!type already_seen 2)
+              (!srcfileloc  "ipa-prop.h" 126)
+              nil )
+             (!pair  "value"
+              (!type already_seen 23)
+              (!srcfileloc  "ipa-prop.h" 129)
+              nil )
+            )
+            nil 2047 nil nil )
+           (!srcfileloc  "ipa-prop.h" 139)
+           nil )
+         )
+        )
+       )
+       (!srcfileloc  "ipa-prop.h" 139)
+       nil )
+      (!pair  "by_ref"
+       (!type already_seen 2)
+       (!srcfileloc  "ipa-prop.h" 141)
+       nil )
+     )
+     nil 2047 nil nil )
+    (!srcfileloc  "ipa-prop.h" 175)
+    nil )
+   (!pair  "bits"
+    (!type pointer 1078 nil  gc_used
+     (!type struct 1079 
+      (!type already_seen 1078)
+      gc_pointed_to "ipa_bits"
+      (!srcfileloc  "ipa-prop.h" 155)
+      (!fields 2 
+       (!pair  "value"
+        (!type already_seen 2)
+        (!srcfileloc  "ipa-prop.h" 150)
+        nil )
+       (!pair  "mask"
+        (!type already_seen 2)
+        (!srcfileloc  "ipa-prop.h" 154)
+        nil )
+      )
+      nil 2047 nil nil )
+    )
+    (!srcfileloc  "ipa-prop.h" 180)
+    nil )
+   (!pair  "m_vr"
+    (!type pointer 1080 nil  gc_used
+     (!type struct 1081 
+      (!type already_seen 1080)
+      gc_pointed_to "value_range_base"
+      (!srcfileloc  "tree-vrp.h" 96)
+      (!fields 3 
+       (!pair  "m_kind"
+        (!type already_seen 2)
+        (!srcfileloc  "tree-vrp.h" 83)
+        nil )
+       (!pair  "m_min"
+        (!type already_seen 23)
+        (!srcfileloc  "tree-vrp.h" 85)
+        nil )
+       (!pair  "m_max"
+        (!type already_seen 23)
+        (!srcfileloc  "tree-vrp.h" 86)
+        nil )
+      )
+      (!options 
+       (!option for_user string  "")
+      )
+      2047 nil nil )
+    )
+    (!srcfileloc  "ipa-prop.h" 185)
+    nil )
+   (!pair  "type"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-prop.h" 187)
+    nil )
+   (!pair  "value"
+    (!type union 1082 nil  gc_used "jump_func_value"
+     (!srcfileloc  "ipa-prop.h" 196)
+     (!fields 3 
+      (!pair  "constant"
+       (!type struct 1083 nil  gc_used "ipa_constant_data"
+        (!srcfileloc  "ipa-prop.h" 75)
+        (!fields 2 
+         (!pair  "value"
+          (!type already_seen 23)
+          (!srcfileloc  "ipa-prop.h" 72)
+          nil )
+         (!pair  "rdesc"
+          (!type already_seen 1063)
+          (!srcfileloc  "ipa-prop.h" 74)
+          (!options 
+           (!option skip string  "")
+          )
+         )
+        )
+        nil 2047 nil nil )
+       (!srcfileloc  "ipa-prop.h" 193)
+       (!options 
+        (!option tag string  "IPA_JF_CONST")
+       )
+      )
+      (!pair  "pass_through"
+       (!type struct 1084 nil  gc_used "ipa_pass_through_data"
+        (!srcfileloc  "ipa-prop.h" 98)
+        (!fields 4 
+         (!pair  "operand"
+          (!type already_seen 23)
+          (!srcfileloc  "ipa-prop.h" 83)
+          nil )
+         (!pair  "formal_id"
+          (!type already_seen 2)
+          (!srcfileloc  "ipa-prop.h" 85)
+          nil )
+         (!pair  "operation"
+          (!type already_seen 2)
+          (!srcfileloc  "ipa-prop.h" 90)
+          nil )
+         (!pair  "agg_preserved"
+          (!type already_seen 2)
+          (!srcfileloc  "ipa-prop.h" 97)
+          nil )
+        )
+        nil 2047 nil nil )
+       (!srcfileloc  "ipa-prop.h" 194)
+       (!options 
+        (!option tag string  "IPA_JF_PASS_THROUGH")
+       )
+      )
+      (!pair  "ancestor"
+       (!type struct 1085 nil  gc_used "ipa_ancestor_jf_data"
+        (!srcfileloc  "ipa-prop.h" 111)
+        (!fields 3 
+         (!pair  "offset"
+          (!type already_seen 2)
+          (!srcfileloc  "ipa-prop.h" 106)
+          nil )
+         (!pair  "formal_id"
+          (!type already_seen 2)
+          (!srcfileloc  "ipa-prop.h" 108)
+          nil )
+         (!pair  "agg_preserved"
+          (!type already_seen 2)
+          (!srcfileloc  "ipa-prop.h" 110)
+          nil )
+        )
+        nil 2047 nil nil )
+       (!srcfileloc  "ipa-prop.h" 195)
+       (!options 
+        (!option tag string  "IPA_JF_ANCESTOR")
+       )
+      )
+     )
+     nil 2047 nil )
+    (!srcfileloc  "ipa-prop.h" 196)
+    (!options 
+     (!option desc string  "%1.type")
+    )
+   )
+  )
+  nil 2047 nil nil )
+ 
+ (!type already_seen 1077)
+ 
+ (!type struct 1086 nil  gc_unused "prop_type_change_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1087 nil  gc_unused "ipa_bb_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1088 nil  gc_unused "ipa_param_aa_status"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1089 nil  gc_unused "ipa_known_agg_contents_list"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1090 nil  gc_pointed_to "ipa_edge_args"
+  (!srcfileloc  "ipa-prop.h" 584)
+  (!fields 2 
+   (!pair  "jump_functions"
+    (!type pointer 1091 nil  gc_used
+     (!type user_struct 1092 
+      (!type already_seen 1091)
+      gc_pointed_to "vec<ipa_jump_func,va_gc>"
+      (!srcfileloc  "ipa-prop.h" 582)
+      (!fields 2 
+       (!pair  "va_gc"
+        (!type already_seen 79)
+        (!srcfileloc  "ipa-prop.h" 582)
+        nil )
+       (!pair  "ipa_jump_func"
+        (!type already_seen 1072)
+        (!srcfileloc  "ipa-prop.h" 582)
+        nil )
+      )
+     )
+    )
+    (!srcfileloc  "ipa-prop.h" 582)
+    nil )
+   (!pair  "polymorphic_call_contexts"
+    (!type pointer 1093 nil  gc_used
+     (!type user_struct 1094 
+      (!type already_seen 1093)
+      gc_pointed_to "vec<ipa_polymorphic_call_context,va_gc>"
+      (!srcfileloc  "ipa-prop.h" 583)
+      (!fields 2 
+       (!pair  "va_gc"
+        (!type already_seen 79)
+        (!srcfileloc  "ipa-prop.h" 583)
+        nil )
+       (!pair  "ipa_polymorphic_call_context"
+        (!type already_seen 804)
+        (!srcfileloc  "ipa-prop.h" 583)
+        nil )
+      )
+     )
+    )
+    (!srcfileloc  "ipa-prop.h" 583)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type struct 1095 nil  gc_unused "analysis_dom_walker"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1096 nil  gc_unused "ipa_func_body_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1097 
+  (!type pointer 1098 nil  gc_used
+   (!type already_seen 1097)
+  )
+  gc_pointed_to "ipa_agg_replacement_value"
+  (!srcfileloc  "ipa-prop.h" 551)
+  (!fields 5 
+   (!pair  "next"
+    (!type already_seen 1098)
+    (!srcfileloc  "ipa-prop.h" 535)
+    nil )
+   (!pair  "offset"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-prop.h" 537)
+    nil )
+   (!pair  "value"
+    (!type already_seen 23)
+    (!srcfileloc  "ipa-prop.h" 539)
+    nil )
+   (!pair  "index"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-prop.h" 541)
+    nil )
+   (!pair  "by_ref"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-prop.h" 543)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1099 nil  gc_unused "bitpack_d"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1100 nil  gc_unused "data_in"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1101 nil  gc_unused "output_block"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1102 nil  gc_unused "ipcp_modif_dom_walker"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1103 nil  gc_unused "ipcp_value_source"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1104 nil  gc_unused "ipcp_value_base"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1105 nil  gc_unused "ipcp_value"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1106 nil  gc_unused "ipcp_lattice"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1107 nil  gc_unused "ipcp_agg_lattice"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1108 nil  gc_unused "ipcp_bits_lattice"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1109 nil  gc_unused "ipcp_vr_lattice"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 1069)
+ 
+ (!type struct 1110 nil  gc_unused "caller_statistics"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1111 nil  gc_unused "value_topo_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1112 nil  gc_unused "ipa_topo_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 1073)
+ 
+ (!type struct 1113 
+  (!type pointer 1114 nil  gc_used
+   (!type already_seen 1113)
+  )
+  gc_pointed_to "ipa_fn_summary"
+  (!srcfileloc  "ipa-fnsummary.h" 174)
+  (!fields 17 
+   (!pair  "estimated_self_stack_size"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-fnsummary.h" 121)
+    nil )
+   (!pair  "self_size"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-fnsummary.h" 123)
+    nil )
+   (!pair  "min_size"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-fnsummary.h" 125)
+    nil )
+   (!pair  "inlinable"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-fnsummary.h" 128)
+    nil )
+   (!pair  "single_caller"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-fnsummary.h" 131)
+    nil )
+   (!pair  "fp_expressions"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-fnsummary.h" 133)
+    nil )
+   (!pair  "estimated_stack_size"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-fnsummary.h" 140)
+    nil )
+   (!pair  "stack_frame_offset"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-fnsummary.h" 142)
+    nil )
+   (!pair  "time"
+    (!type already_seen 992)
+    (!srcfileloc  "ipa-fnsummary.h" 144)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "size"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-fnsummary.h" 145)
+    nil )
+   (!pair  "conds"
+    (!type pointer 1115 nil  gc_used
+     (!type user_struct 1116 
+      (!type already_seen 1115)
+      gc_pointed_to "vec<condition,va_gc>"
+      (!srcfileloc  "ipa-predicate.h" 59)
+      (!fields 2 
+       (!pair  "va_gc"
+        (!type already_seen 79)
+        (!srcfileloc  "ipa-predicate.h" 59)
+        nil )
+       (!pair  "condition"
+        (!type struct 1117 nil  gc_used "condition"
+         (!srcfileloc  "ipa-predicate.h" 59)
+         (!fields 7 
+          (!pair  "offset"
+           (!type already_seen 2)
+           (!srcfileloc  "ipa-predicate.h" 32)
+           nil )
+          (!pair  "size"
+           (!type already_seen 2)
+           (!srcfileloc  "ipa-predicate.h" 34)
+           nil )
+          (!pair  "val"
+           (!type already_seen 23)
+           (!srcfileloc  "ipa-predicate.h" 35)
+           nil )
+          (!pair  "operand_num"
+           (!type already_seen 2)
+           (!srcfileloc  "ipa-predicate.h" 36)
+           nil )
+          (!pair  "code"
+           (!type already_seen 2)
+           (!srcfileloc  "ipa-predicate.h" 37)
+           nil )
+          (!pair  "agg_contents"
+           (!type already_seen 2)
+           (!srcfileloc  "ipa-predicate.h" 40)
+           nil )
+          (!pair  "by_ref"
+           (!type already_seen 2)
+           (!srcfileloc  "ipa-predicate.h" 43)
+           nil )
+         )
+         nil 2047 nil nil )
+        (!srcfileloc  "ipa-predicate.h" 59)
+        nil )
+      )
+     )
+    )
+    (!srcfileloc  "ipa-fnsummary.h" 149)
+    nil )
+   (!pair  "size_time_table"
+    (!type pointer 1118 nil  gc_used
+     (!type user_struct 1119 
+      (!type already_seen 1118)
+      gc_pointed_to "vec<size_time_entry,va_gc>"
+      (!srcfileloc  "ipa-fnsummary.h" 150)
+      (!fields 2 
+       (!pair  "va_gc"
+        (!type already_seen 79)
+        (!srcfileloc  "ipa-fnsummary.h" 150)
+        nil )
+       (!pair  "size_time_entry"
+        (!type struct 1120 nil  gc_used "size_time_entry"
+         (!srcfileloc  "ipa-fnsummary.h" 150)
+         (!fields 4 
+          (!pair  "exec_predicate"
+           (!type struct 1121 
+            (!type pointer 1122 nil  gc_unused
+             (!type already_seen 1121)
+            )
+            gc_used "predicate"
+            (!srcfileloc  "ipa-fnsummary.h" 78)
+            (!fields 0 )
+            nil 2047 nil nil )
+           (!srcfileloc  "ipa-fnsummary.h" 78)
+           nil )
+          (!pair  "nonconst_predicate"
+           (!type already_seen 1121)
+           (!srcfileloc  "ipa-fnsummary.h" 82)
+           nil )
+          (!pair  "size"
+           (!type already_seen 2)
+           (!srcfileloc  "ipa-fnsummary.h" 83)
+           nil )
+          (!pair  "time"
+           (!type already_seen 992)
+           (!srcfileloc  "ipa-fnsummary.h" 84)
+           (!options 
+            (!option skip string  "")
+           )
+          )
+         )
+         nil 2047 nil nil )
+        (!srcfileloc  "ipa-fnsummary.h" 150)
+        nil )
+      )
+     )
+    )
+    (!srcfileloc  "ipa-fnsummary.h" 150)
+    nil )
+   (!pair  "loop_iterations"
+    (!type already_seen 1122)
+    (!srcfileloc  "ipa-fnsummary.h" 154)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "loop_stride"
+    (!type already_seen 1122)
+    (!srcfileloc  "ipa-fnsummary.h" 157)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "array_index"
+    (!type already_seen 1122)
+    (!srcfileloc  "ipa-fnsummary.h" 159)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "growth"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-fnsummary.h" 165)
+    nil )
+   (!pair  "scc_no"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-fnsummary.h" 167)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1123 nil  gc_unused "edge_clone_summary"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1124 nil  gc_unused "edge_clone_summary_t"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1125 nil  gc_unused "pass_ipa_cp"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1126 nil  gc_unused "ipa_dfs_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1127 
+  (!type pointer 1128 nil  gc_used
+   (!type already_seen 1127)
+  )
+  gc_pointed_to "odr_type_d"
+  (!srcfileloc  "ipa-devirt.c" 216)
+  (!fields 10 
+   (!pair  "type"
+    (!type already_seen 23)
+    (!srcfileloc  "ipa-devirt.c" 194)
+    nil )
+   (!pair  "bases"
+    (!type user_struct 1129 nil  gc_unused "vec<odr_type>"
+     (!srcfileloc  "ipa-devirt.c" 196)
+     (!fields 1 
+      (!pair  "odr_type"
+       (!type already_seen 1128)
+       (!srcfileloc  "ipa-devirt.c" 196)
+       nil )
+     )
+    )
+    (!srcfileloc  "ipa-devirt.c" 196)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "derived_types"
+    (!type already_seen 1129)
+    (!srcfileloc  "ipa-devirt.c" 199)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "types"
+    (!type already_seen 96)
+    (!srcfileloc  "ipa-devirt.c" 202)
+    nil )
+   (!pair  "types_set"
+    (!type already_seen 467)
+    (!srcfileloc  "ipa-devirt.c" 204)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "id"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-devirt.c" 207)
+    nil )
+   (!pair  "anonymous_namespace"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-devirt.c" 209)
+    nil )
+   (!pair  "all_derivations_known"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-devirt.c" 211)
+    nil )
+   (!pair  "odr_violated"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-devirt.c" 213)
+    nil )
+   (!pair  "rtti_broken"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-devirt.c" 215)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1130 
+  (!type pointer 1131 nil  gc_used
+   (!type already_seen 1130)
+  )
+  gc_pointed_to "typeinfo"
+  (!srcfileloc  "dbxout.c" 173)
+  (!fields 3 
+   (!pair  "status"
+    (!type already_seen 2)
+    (!srcfileloc  "dbxout.c" 170)
+    nil )
+   (!pair  "file_number"
+    (!type already_seen 2)
+    (!srcfileloc  "dbxout.c" 171)
+    nil )
+   (!pair  "type_number"
+    (!type already_seen 2)
+    (!srcfileloc  "dbxout.c" 172)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1132 nil  gc_unused "dbx_file"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 478)
+ 
+ (!type already_seen 474)
+ 
+ (!type already_seen 477)
+ 
+ (!type already_seen 485)
+ 
+ (!type already_seen 510)
+ 
+ (!type already_seen 512)
+ 
+ (!type already_seen 475)
+ 
+ (!type already_seen 472)
+ 
+ (!type already_seen 499)
+ 
+ (!type already_seen 508)
+ 
+ (!type already_seen 507)
+ 
+ (!type already_seen 481)
+ 
+ (!type already_seen 500)
+ 
+ (!type already_seen 502)
+ 
+ (!type already_seen 504)
+ 
+ (!type already_seen 506)
+ 
+ (!type already_seen 483)
+ 
+ (!type struct 1133 nil  gc_unused "array_descr_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1134 nil  gc_unused "fixed_point_type_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 1135 
+  (!type pointer 1136 nil  gc_used
+   (!type already_seen 1135)
+  )
+  gc_pointed_to "hash_map<char*,tree>"
+  (!srcfileloc  "dwarf2asm.c" 865)
+  (!fields 1 
+   (!pair  "tree"
+    (!type already_seen 23)
+    (!srcfileloc  "dwarf2asm.c" 865)
+    nil )
+  )
+ )
+ 
+ (!type struct 1137 
+  (!type pointer 1138 nil  gc_used
+   (!type already_seen 1137)
+  )
+  gc_pointed_to "dw_cfi_row"
+  (!srcfileloc  "dwarf2cfi.c" 190)
+  (!fields 4 
+   (!pair  "cfa"
+    (!type already_seen 512)
+    (!srcfileloc  "dwarf2cfi.c" 66)
+    nil )
+   (!pair  "cfa_cfi"
+    (!type already_seen 473)
+    (!srcfileloc  "dwarf2cfi.c" 67)
+    nil )
+   (!pair  "reg_save"
+    (!type already_seen 471)
+    (!srcfileloc  "dwarf2cfi.c" 70)
+    nil )
+   (!pair  "window_save"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2cfi.c" 73)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1139 
+  (!type pointer 1140 nil  gc_used
+   (!type already_seen 1139)
+  )
+  gc_pointed_to "reg_saved_in_data"
+  (!srcfileloc  "dwarf2cfi.c" 192)
+  (!fields 2 
+   (!pair  "orig_reg"
+    (!type already_seen 150)
+    (!srcfileloc  "dwarf2cfi.c" 78)
+    nil )
+   (!pair  "saved_in_reg"
+    (!type already_seen 150)
+    (!srcfileloc  "dwarf2cfi.c" 79)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1141 nil  gc_unused "dw_trace_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1142 nil  gc_unused "trace_info_hasher"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1143 nil  gc_unused "queued_reg_save"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1144 nil  gc_unused "init_one_dwarf_reg_state"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1145 nil  gc_unused "pass_dwarf2_frame"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 1146 
+  (!type pointer 1147 nil  gc_used
+   (!type already_seen 1146)
+  )
+  gc_pointed_to "vec<dw_fde_ref,va_gc>"
+  (!srcfileloc  "dwarf2out.c" 213)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "dwarf2out.c" 213)
+    nil )
+   (!pair  "dw_fde_ref"
+    (!type already_seen 469)
+    (!srcfileloc  "dwarf2out.c" 213)
+    nil )
+  )
+ )
+ 
+ (!type struct 1148 nil  gc_used "indirect_string_hasher"
+  (!srcfileloc  "dwarf2out.c" 231)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1149 
+  (!type pointer 1150 nil  gc_used
+   (!type already_seen 1149)
+  )
+  gc_pointed_to "hash_table<indirect_string_hasher>"
+  (!srcfileloc  "dwarf2out.c" 231)
+  (!fields 1 
+   (!pair  "indirect_string_hasher"
+    (!type already_seen 1148)
+    (!srcfileloc  "dwarf2out.c" 231)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 482)
+ 
+ (!type already_seen 490)
+ 
+ (!type struct 1151 nil  gc_used "dw_line_info_struct"
+  (!srcfileloc  "dwarf2out.c" 2974)
+  (!fields 2 
+   (!pair  "opcode"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 2972)
+    nil )
+   (!pair  "val"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 2973)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1152 
+  (!type pointer 1153 nil  gc_used
+   (!type already_seen 1152)
+  )
+  gc_pointed_to "vec<dw_line_info_entry,va_gc>"
+  (!srcfileloc  "dwarf2out.c" 3016)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "dwarf2out.c" 3016)
+    nil )
+   (!pair  "dw_line_info_entry"
+    (!type already_seen 1151)
+    (!srcfileloc  "dwarf2out.c" 3016)
+    nil )
+  )
+ )
+ 
+ (!type struct 1154 
+  (!type pointer 1155 nil  gc_used
+   (!type already_seen 1154)
+  )
+  gc_pointed_to "dw_line_info_table"
+  (!srcfileloc  "dwarf2out.c" 3549)
+  (!fields 10 
+   (!pair  "end_label"
+    (!type already_seen 11)
+    (!srcfileloc  "dwarf2out.c" 2979)
+    nil )
+   (!pair  "file_num"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 2983)
+    nil )
+   (!pair  "line_num"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 2984)
+    nil )
+   (!pair  "column_num"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 2985)
+    nil )
+   (!pair  "discrim_num"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 2986)
+    nil )
+   (!pair  "is_stmt"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 2987)
+    nil )
+   (!pair  "in_use"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 2988)
+    nil )
+   (!pair  "view"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 3004)
+    nil )
+   (!pair  "symviews_since_reset"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 3009)
+    nil )
+   (!pair  "entries"
+    (!type already_seen 1153)
+    (!srcfileloc  "dwarf2out.c" 3016)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type already_seen 494)
+ 
+ (!type already_seen 488)
+ 
+ (!type already_seen 493)
+ 
+ (!type struct 1156 nil  gc_unused "set_early_dwarf"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1157 nil  gc_used "pubname_struct"
+  (!srcfileloc  "dwarf2out.c" 3131)
+  (!fields 2 
+   (!pair  "die"
+    (!type already_seen 486)
+    (!srcfileloc  "dwarf2out.c" 3129)
+    nil )
+   (!pair  "name"
+    (!type already_seen 11)
+    (!srcfileloc  "dwarf2out.c" 3130)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1158 nil  gc_used "dw_ranges"
+  (!srcfileloc  "dwarf2out.c" 3582)
+  (!fields 4 
+   (!pair  "label"
+    (!type already_seen 11)
+    (!srcfileloc  "dwarf2out.c" 3136)
+    nil )
+   (!pair  "num"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 3139)
+    nil )
+   (!pair  "idx"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 3141)
+    nil )
+   (!pair  "maybe_new_sec"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 3144)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1159 nil  gc_used "macinfo_struct"
+  (!srcfileloc  "dwarf2out.c" 3153)
+  (!fields 3 
+   (!pair  "code"
+    (!type already_seen 8)
+    (!srcfileloc  "dwarf2out.c" 3150)
+    nil )
+   (!pair  "lineno"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 3151)
+    nil )
+   (!pair  "info"
+    (!type already_seen 11)
+    (!srcfileloc  "dwarf2out.c" 3152)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1160 nil  gc_used "dw_ranges_by_label"
+  (!srcfileloc  "dwarf2out.c" 3585)
+  (!fields 2 
+   (!pair  "begin"
+    (!type already_seen 11)
+    (!srcfileloc  "dwarf2out.c" 3158)
+    nil )
+   (!pair  "end"
+    (!type already_seen 11)
+    (!srcfileloc  "dwarf2out.c" 3159)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1161 
+  (!type pointer 1162 nil  gc_used
+   (!type already_seen 1161)
+  )
+  gc_pointed_to "limbo_die_struct"
+  (!srcfileloc  "dwarf2out.c" 3181)
+  (!fields 3 
+   (!pair  "die"
+    (!type already_seen 486)
+    (!srcfileloc  "dwarf2out.c" 3176)
+    nil )
+   (!pair  "created_for"
+    (!type already_seen 23)
+    (!srcfileloc  "dwarf2out.c" 3179)
+    nil )
+   (!pair  "next"
+    (!type already_seen 1162)
+    (!srcfileloc  "dwarf2out.c" 3180)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1163 nil  gc_unused "skeleton_chain_struct"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1164 nil  gc_used "dwarf_file_hasher"
+  (!srcfileloc  "dwarf2out.c" 3396)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1165 
+  (!type pointer 1166 nil  gc_used
+   (!type already_seen 1165)
+  )
+  gc_pointed_to "hash_table<dwarf_file_hasher>"
+  (!srcfileloc  "dwarf2out.c" 3396)
+  (!fields 1 
+   (!pair  "dwarf_file_hasher"
+    (!type already_seen 1164)
+    (!srcfileloc  "dwarf2out.c" 3396)
+    nil )
+  )
+ )
+ 
+ (!type struct 1167 nil  gc_used "decl_die_hasher"
+  (!srcfileloc  "dwarf2out.c" 3407)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1168 
+  (!type pointer 1169 nil  gc_used
+   (!type already_seen 1168)
+  )
+  gc_pointed_to "hash_table<decl_die_hasher>"
+  (!srcfileloc  "dwarf2out.c" 3407)
+  (!fields 1 
+   (!pair  "decl_die_hasher"
+    (!type already_seen 1167)
+    (!srcfileloc  "dwarf2out.c" 3407)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 1170 
+  (!type pointer 1171 nil  gc_used
+   (!type already_seen 1170)
+  )
+  gc_pointed_to "vec<dw_die_ref,va_gc>"
+  (!srcfileloc  "dwarf2out.c" 3411)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "dwarf2out.c" 3411)
+    nil )
+   (!pair  "dw_die_ref"
+    (!type already_seen 486)
+    (!srcfileloc  "dwarf2out.c" 3411)
+    nil )
+  )
+ )
+ 
+ (!type struct 1172 nil  gc_pointed_to "variable_value_struct"
+  (!srcfileloc  "dwarf2out.c" 3412)
+  (!fields 2 
+   (!pair  "decl_id"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 3410)
+    nil )
+   (!pair  "dies"
+    (!type already_seen 1171)
+    (!srcfileloc  "dwarf2out.c" 3411)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type struct 1173 nil  gc_used "variable_value_hasher"
+  (!srcfileloc  "dwarf2out.c" 3424)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1174 
+  (!type pointer 1175 nil  gc_used
+   (!type already_seen 1174)
+  )
+  gc_pointed_to "hash_table<variable_value_hasher>"
+  (!srcfileloc  "dwarf2out.c" 3424)
+  (!fields 1 
+   (!pair  "variable_value_hasher"
+    (!type already_seen 1173)
+    (!srcfileloc  "dwarf2out.c" 3424)
+    nil )
+  )
+ )
+ 
+ (!type struct 1176 nil  gc_used "block_die_hasher"
+  (!srcfileloc  "dwarf2out.c" 3434)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1177 
+  (!type pointer 1178 nil  gc_used
+   (!type already_seen 1177)
+  )
+  gc_pointed_to "hash_table<block_die_hasher>"
+  (!srcfileloc  "dwarf2out.c" 3434)
+  (!fields 1 
+   (!pair  "block_die_hasher"
+    (!type already_seen 1176)
+    (!srcfileloc  "dwarf2out.c" 3434)
+    nil )
+  )
+ )
+ 
+ (!type struct 1179 nil  gc_used "die_arg_entry_struct"
+  (!srcfileloc  "dwarf2out.c" 3439)
+  (!fields 2 
+   (!pair  "die"
+    (!type already_seen 486)
+    (!srcfileloc  "dwarf2out.c" 3437)
+    nil )
+   (!pair  "arg"
+    (!type already_seen 23)
+    (!srcfileloc  "dwarf2out.c" 3438)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1180 
+  (!type pointer 1181 nil  gc_used
+   (!type already_seen 1180)
+  )
+  gc_pointed_to "var_loc_node"
+  (!srcfileloc  "dwarf2out.c" 3456)
+  (!fields 4 
+   (!pair  "loc"
+    (!type already_seen 150)
+    (!srcfileloc  "dwarf2out.c" 3452)
+    nil )
+   (!pair  "label"
+    (!type already_seen 11)
+    (!srcfileloc  "dwarf2out.c" 3453)
+    nil )
+   (!pair  "next"
+    (!type already_seen 1181)
+    (!srcfileloc  "dwarf2out.c" 3454)
+    nil )
+   (!pair  "view"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 3455)
+    nil )
+  )
+  (!options 
+   (!option chain_next string  "%h.next")
+  )
+  2047 nil nil )
+ 
+ (!type struct 1182 nil  gc_pointed_to "var_loc_list_def"
+  (!srcfileloc  "dwarf2out.c" 3477)
+  (!fields 4 
+   (!pair  "first"
+    (!type already_seen 1181)
+    (!srcfileloc  "dwarf2out.c" 3460)
+    nil )
+   (!pair  "last"
+    (!type already_seen 1181)
+    (!srcfileloc  "dwarf2out.c" 3468)
+    (!options 
+     (!option skip string  "%h")
+    )
+   )
+   (!pair  "last_before_switch"
+    (!type already_seen 1181)
+    (!srcfileloc  "dwarf2out.c" 3473)
+    (!options 
+     (!option skip string  "%h")
+    )
+   )
+   (!pair  "decl_id"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 3476)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type struct 1183 
+  (!type pointer 1184 nil  gc_used
+   (!type already_seen 1183)
+  )
+  gc_pointed_to "call_arg_loc_node"
+  (!srcfileloc  "dwarf2out.c" 3488)
+  (!fields 6 
+   (!pair  "call_arg_loc_note"
+    (!type already_seen 150)
+    (!srcfileloc  "dwarf2out.c" 3482)
+    nil )
+   (!pair  "label"
+    (!type already_seen 11)
+    (!srcfileloc  "dwarf2out.c" 3483)
+    nil )
+   (!pair  "block"
+    (!type already_seen 23)
+    (!srcfileloc  "dwarf2out.c" 3484)
+    nil )
+   (!pair  "tail_call_p"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 3485)
+    nil )
+   (!pair  "symbol_ref"
+    (!type already_seen 150)
+    (!srcfileloc  "dwarf2out.c" 3486)
+    nil )
+   (!pair  "next"
+    (!type already_seen 1184)
+    (!srcfileloc  "dwarf2out.c" 3487)
+    nil )
+  )
+  (!options 
+   (!option chain_next string  "%h.next")
+  )
+  2047 nil nil )
+ 
+ (!type struct 1185 nil  gc_used "decl_loc_hasher"
+  (!srcfileloc  "dwarf2out.c" 3500)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1186 
+  (!type pointer 1187 nil  gc_used
+   (!type already_seen 1186)
+  )
+  gc_pointed_to "hash_table<decl_loc_hasher>"
+  (!srcfileloc  "dwarf2out.c" 3500)
+  (!fields 1 
+   (!pair  "decl_loc_hasher"
+    (!type already_seen 1185)
+    (!srcfileloc  "dwarf2out.c" 3500)
+    nil )
+  )
+ )
+ 
+ (!type struct 1188 nil  gc_pointed_to "cached_dw_loc_list_def"
+  (!srcfileloc  "dwarf2out.c" 3518)
+  (!fields 2 
+   (!pair  "decl_id"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 3514)
+    nil )
+   (!pair  "loc_list"
+    (!type already_seen 484)
+    (!srcfileloc  "dwarf2out.c" 3517)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type struct 1189 nil  gc_used "dw_loc_list_hasher"
+  (!srcfileloc  "dwarf2out.c" 3531)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1190 
+  (!type pointer 1191 nil  gc_used
+   (!type already_seen 1190)
+  )
+  gc_pointed_to "hash_table<dw_loc_list_hasher>"
+  (!srcfileloc  "dwarf2out.c" 3531)
+  (!fields 1 
+   (!pair  "dw_loc_list_hasher"
+    (!type already_seen 1189)
+    (!srcfileloc  "dwarf2out.c" 3531)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 1192 
+  (!type pointer 1193 nil  gc_used
+   (!type already_seen 1192)
+  )
+  gc_pointed_to "vec<dw_line_info_table*,va_gc>"
+  (!srcfileloc  "dwarf2out.c" 3556)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "dwarf2out.c" 3556)
+    nil )
+   (!pair  "dw_line_info_table"
+    (!type already_seen 1155)
+    (!srcfileloc  "dwarf2out.c" 3556)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 1194 
+  (!type pointer 1195 nil  gc_used
+   (!type already_seen 1194)
+  )
+  gc_pointed_to "vec<pubname_entry,va_gc>"
+  (!srcfileloc  "dwarf2out.c" 3564)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "dwarf2out.c" 3564)
+    nil )
+   (!pair  "pubname_entry"
+    (!type already_seen 1157)
+    (!srcfileloc  "dwarf2out.c" 3564)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 1196 
+  (!type pointer 1197 nil  gc_used
+   (!type already_seen 1196)
+  )
+  gc_pointed_to "vec<macinfo_entry,va_gc>"
+  (!srcfileloc  "dwarf2out.c" 3572)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "dwarf2out.c" 3572)
+    nil )
+   (!pair  "macinfo_entry"
+    (!type already_seen 1159)
+    (!srcfileloc  "dwarf2out.c" 3572)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 1198 
+  (!type pointer 1199 nil  gc_used
+   (!type already_seen 1198)
+  )
+  gc_pointed_to "vec<dw_ranges,va_gc>"
+  (!srcfileloc  "dwarf2out.c" 3582)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "dwarf2out.c" 3582)
+    nil )
+   (!pair  "dw_ranges"
+    (!type already_seen 1158)
+    (!srcfileloc  "dwarf2out.c" 3582)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 1200 
+  (!type pointer 1201 nil  gc_used
+   (!type already_seen 1200)
+  )
+  gc_pointed_to "vec<dw_ranges_by_label,va_gc>"
+  (!srcfileloc  "dwarf2out.c" 3585)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "dwarf2out.c" 3585)
+    nil )
+   (!pair  "dw_ranges_by_label"
+    (!type already_seen 1160)
+    (!srcfileloc  "dwarf2out.c" 3585)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 1202 
+  (!type pointer 1203 nil  gc_used
+   (!type already_seen 1202)
+  )
+  gc_pointed_to "vec<die_arg_entry,va_gc>"
+  (!srcfileloc  "dwarf2out.c" 3602)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "dwarf2out.c" 3602)
+    nil )
+   (!pair  "die_arg_entry"
+    (!type already_seen 1179)
+    (!srcfileloc  "dwarf2out.c" 3602)
+    nil )
+  )
+ )
+ 
+ (!type struct 1204 nil  gc_unused "md5_ctx"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1205 nil  gc_unused "checksum_attributes"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1206 nil  gc_unused "loc_descr_context"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1207 nil  gc_unused "vlr_context"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1208 nil  gc_used "addr_hasher"
+  (!srcfileloc  "dwarf2out.c" 4950)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1209 
+  (!type pointer 1210 nil  gc_used
+   (!type already_seen 1209)
+  )
+  gc_pointed_to "hash_table<addr_hasher>"
+  (!srcfileloc  "dwarf2out.c" 4950)
+  (!fields 1 
+   (!pair  "addr_hasher"
+    (!type already_seen 1208)
+    (!srcfileloc  "dwarf2out.c" 4950)
+    nil )
+  )
+ )
+ 
+ (!type struct 1211 nil  gc_used "sym_off_pair"
+  (!srcfileloc  "dwarf2out.c" 5790)
+  (!fields 2 
+   (!pair  "sym"
+    (!type already_seen 11)
+    (!srcfileloc  "dwarf2out.c" 5787)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "off"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 5788)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1212 
+  (!type pointer 1213 nil  gc_used
+   (!type already_seen 1212)
+  )
+  gc_pointed_to "hash_map<tree,sym_off_pair>"
+  (!srcfileloc  "dwarf2out.c" 5790)
+  (!fields 2 
+   (!pair  "sym_off_pair"
+    (!type already_seen 1211)
+    (!srcfileloc  "dwarf2out.c" 5790)
+    nil )
+   (!pair  "tree"
+    (!type already_seen 23)
+    (!srcfileloc  "dwarf2out.c" 5790)
+    nil )
+  )
+ )
+ 
+ (!type struct 1214 nil  gc_unused "decl_table_entry"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1215 nil  gc_unused "decl_table_entry_hasher"
+  (!srcfileloc  "dwarf2out.c" 8177)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1216 nil  gc_unused "hash_table<decl_table_entry_hasher>"
+  (!srcfileloc  "dwarf2out.c" 8177)
+  (!fields 1 
+   (!pair  "decl_table_entry_hasher"
+    (!type already_seen 1215)
+    (!srcfileloc  "dwarf2out.c" 8177)
+    nil )
+  )
+ )
+ 
+ (!type struct 1217 nil  gc_unused "external_ref"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1218 nil  gc_unused "external_ref_hasher"
+  (!srcfileloc  "dwarf2out.c" 8934)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1219 nil  gc_unused "hash_table<external_ref_hasher>"
+  (!srcfileloc  "dwarf2out.c" 8934)
+  (!fields 1 
+   (!pair  "external_ref_hasher"
+    (!type already_seen 1218)
+    (!srcfileloc  "dwarf2out.c" 8934)
+    nil )
+  )
+ )
+ 
+ (!type struct 1220 nil  gc_unused "file_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1221 nil  gc_unused "dir_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1222 nil  gc_unused "file_name_acquire_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1223 nil  gc_unused "dwarf_qual_info_t"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1224 nil  gc_unused "dwarf_procedure_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1225 nil  gc_pointed_to "inline_entry_data"
+  (!srcfileloc  "dwarf2out.c" 23629)
+  (!fields 4 
+   (!pair  "block"
+    (!type already_seen 23)
+    (!srcfileloc  "dwarf2out.c" 23621)
+    nil )
+   (!pair  "label_pfx"
+    (!type already_seen 11)
+    (!srcfileloc  "dwarf2out.c" 23624)
+    nil )
+   (!pair  "label_num"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 23625)
+    nil )
+   (!pair  "view"
+    (!type already_seen 2)
+    (!srcfileloc  "dwarf2out.c" 23628)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type struct 1226 nil  gc_used "inline_entry_data_hasher"
+  (!srcfileloc  "dwarf2out.c" 23655)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1227 
+  (!type pointer 1228 nil  gc_used
+   (!type already_seen 1227)
+  )
+  gc_pointed_to "hash_table<inline_entry_data_hasher>"
+  (!srcfileloc  "dwarf2out.c" 23655)
+  (!fields 1 
+   (!pair  "inline_entry_data_hasher"
+    (!type already_seen 1226)
+    (!srcfileloc  "dwarf2out.c" 23655)
+    nil )
+  )
+ )
+ 
+ (!type struct 1229 nil  gc_unused "macinfo_entry_hasher"
+  (!srcfileloc  "dwarf2out.c" 28212)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1230 nil  gc_unused "hash_table<macinfo_entry_hasher>"
+  (!srcfileloc  "dwarf2out.c" 28212)
+  (!fields 1 
+   (!pair  "macinfo_entry_hasher"
+    (!type already_seen 1229)
+    (!srcfileloc  "dwarf2out.c" 28212)
+    nil )
+  )
+ )
+ 
+ (!type struct 1231 nil  gc_unused "comdat_type_hasher"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1232 nil  gc_unused "loc_list_hasher"
+  (!srcfileloc  "dwarf2out.c" 31132)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1233 nil  gc_unused "hash_table<loc_list_hasher>"
+  (!srcfileloc  "dwarf2out.c" 31132)
+  (!fields 1 
+   (!pair  "loc_list_hasher"
+    (!type already_seen 1232)
+    (!srcfileloc  "dwarf2out.c" 31132)
+    nil )
+  )
+ )
+ 
+ (!type struct 1234 nil  gc_unused "pass_lower_vector"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1235 nil  gc_unused "pass_lower_vector_ssa"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1236 
+  (!type pointer 1237 nil  gc_used
+   (!type already_seen 1236)
+  )
+  gc_pointed_to "temp_slot"
+  (!srcfileloc  "function.c" 585)
+  (!fields 10 
+   (!pair  "next"
+    (!type already_seen 1237)
+    (!srcfileloc  "function.c" 561)
+    nil )
+   (!pair  "prev"
+    (!type already_seen 1237)
+    (!srcfileloc  "function.c" 563)
+    nil )
+   (!pair  "slot"
+    (!type already_seen 150)
+    (!srcfileloc  "function.c" 565)
+    nil )
+   (!pair  "size"
+    (!type already_seen 2)
+    (!srcfileloc  "function.c" 567)
+    nil )
+   (!pair  "type"
+    (!type already_seen 23)
+    (!srcfileloc  "function.c" 572)
+    nil )
+   (!pair  "align"
+    (!type already_seen 2)
+    (!srcfileloc  "function.c" 574)
+    nil )
+   (!pair  "in_use"
+    (!type already_seen 8)
+    (!srcfileloc  "function.c" 576)
+    nil )
+   (!pair  "level"
+    (!type already_seen 2)
+    (!srcfileloc  "function.c" 578)
+    nil )
+   (!pair  "base_offset"
+    (!type already_seen 2)
+    (!srcfileloc  "function.c" 581)
+    nil )
+   (!pair  "full_size"
+    (!type already_seen 2)
+    (!srcfileloc  "function.c" 584)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1238 nil  gc_used "incoming_args"
+  (!srcfileloc  "emit-rtl.h" 53)
+  (!fields 6 
+   (!pair  "pops_args"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 31)
+    nil )
+   (!pair  "size"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 36)
+    nil )
+   (!pair  "pretend_args_size"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 41)
+    nil )
+   (!pair  "arg_offset_rtx"
+    (!type already_seen 150)
+    (!srcfileloc  "emit-rtl.h" 45)
+    nil )
+   (!pair  "info"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 49)
+    nil )
+   (!pair  "internal_arg_pointer"
+    (!type already_seen 150)
+    (!srcfileloc  "emit-rtl.h" 52)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1239 
+  (!type pointer 1240 nil  gc_used
+   (!type already_seen 1239)
+  )
+  gc_pointed_to "initial_value_struct"
+  (!srcfileloc  "function.c" 1260)
+  (!fields 3 
+   (!pair  "num_entries"
+    (!type already_seen 2)
+    (!srcfileloc  "function.c" 1257)
+    nil )
+   (!pair  "max_entries"
+    (!type already_seen 2)
+    (!srcfileloc  "function.c" 1258)
+    nil )
+   (!pair  "entries"
+    (!type pointer 1241 nil  gc_unused
+     (!type struct 1242 
+      (!type already_seen 1241)
+      gc_used "initial_value_pair"
+      (!srcfileloc  "function.c" 1259)
+      (!fields 2 
+       (!pair  "hard_reg"
+        (!type already_seen 150)
+        (!srcfileloc  "function.c" 1250)
+        nil )
+       (!pair  "pseudo"
+        (!type already_seen 150)
+        (!srcfileloc  "function.c" 1251)
+        nil )
+      )
+      nil 2047 nil nil )
+    )
+    (!srcfileloc  "function.c" 1259)
+    (!options 
+     (!option length string  "%h.num_entries")
+    )
+   )
+  )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1243 
+  (!type pointer 1244 nil  gc_used
+   (!type already_seen 1243)
+  )
+  gc_pointed_to "vec<temp_slot_p,va_gc>"
+  (!srcfileloc  "emit-rtl.h" 136)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "emit-rtl.h" 136)
+    nil )
+   (!pair  "temp_slot_p"
+    (!type already_seen 1237)
+    (!srcfileloc  "emit-rtl.h" 136)
+    nil )
+  )
+ )
+ 
+ (!type struct 1245 nil  gc_used "rtl_data"
+  (!srcfileloc  "emit-rtl.h" 297)
+  (!fields 60 
+   (!pair  "expr"
+    (!type already_seen 963)
+    (!srcfileloc  "emit-rtl.h" 60)
+    nil )
+   (!pair  "emit"
+    (!type already_seen 960)
+    (!srcfileloc  "emit-rtl.h" 61)
+    nil )
+   (!pair  "varasm"
+    (!type already_seen 975)
+    (!srcfileloc  "emit-rtl.h" 62)
+    nil )
+   (!pair  "args"
+    (!type already_seen 1238)
+    (!srcfileloc  "emit-rtl.h" 63)
+    nil )
+   (!pair  "subsections"
+    (!type already_seen 976)
+    (!srcfileloc  "emit-rtl.h" 64)
+    nil )
+   (!pair  "eh"
+    (!type already_seen 968)
+    (!srcfileloc  "emit-rtl.h" 65)
+    nil )
+   (!pair  "outgoing_args_size"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 71)
+    nil )
+   (!pair  "return_rtx"
+    (!type already_seen 150)
+    (!srcfileloc  "emit-rtl.h" 77)
+    nil )
+   (!pair  "hard_reg_initial_vals"
+    (!type already_seen 1240)
+    (!srcfileloc  "emit-rtl.h" 84)
+    nil )
+   (!pair  "stack_protect_guard"
+    (!type already_seen 23)
+    (!srcfileloc  "emit-rtl.h" 88)
+    nil )
+   (!pair  "stack_protect_guard_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "emit-rtl.h" 92)
+    nil )
+   (!pair  "x_nonlocal_goto_handler_labels"
+    (!type already_seen 732)
+    (!srcfileloc  "emit-rtl.h" 96)
+    nil )
+   (!pair  "x_return_label"
+    (!type already_seen 420)
+    (!srcfileloc  "emit-rtl.h" 101)
+    nil )
+   (!pair  "x_naked_return_label"
+    (!type already_seen 420)
+    (!srcfileloc  "emit-rtl.h" 106)
+    nil )
+   (!pair  "x_stack_slot_list"
+    (!type already_seen 269)
+    (!srcfileloc  "emit-rtl.h" 110)
+    nil )
+   (!pair  "frame_space_list"
+    (!type already_seen 978)
+    (!srcfileloc  "emit-rtl.h" 113)
+    nil )
+   (!pair  "x_stack_check_probe_note"
+    (!type already_seen 741)
+    (!srcfileloc  "emit-rtl.h" 116)
+    nil )
+   (!pair  "x_arg_pointer_save_area"
+    (!type already_seen 150)
+    (!srcfileloc  "emit-rtl.h" 122)
+    nil )
+   (!pair  "drap_reg"
+    (!type already_seen 150)
+    (!srcfileloc  "emit-rtl.h" 125)
+    nil )
+   (!pair  "x_frame_offset"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 130)
+    nil )
+   (!pair  "x_parm_birth_insn"
+    (!type already_seen 346)
+    (!srcfileloc  "emit-rtl.h" 133)
+    nil )
+   (!pair  "x_used_temp_slots"
+    (!type already_seen 1244)
+    (!srcfileloc  "emit-rtl.h" 136)
+    nil )
+   (!pair  "x_avail_temp_slots"
+    (!type already_seen 1237)
+    (!srcfileloc  "emit-rtl.h" 139)
+    nil )
+   (!pair  "x_temp_slot_level"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 142)
+    nil )
+   (!pair  "stack_alignment_needed"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 146)
+    nil )
+   (!pair  "preferred_stack_boundary"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 150)
+    nil )
+   (!pair  "parm_stack_boundary"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 153)
+    nil )
+   (!pair  "max_used_stack_slot_alignment"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 156)
+    nil )
+   (!pair  "stack_alignment_estimated"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 165)
+    nil )
+   (!pair  "accesses_prior_frames"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 171)
+    nil )
+   (!pair  "calls_eh_return"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 174)
+    nil )
+   (!pair  "saves_all_registers"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 178)
+    nil )
+   (!pair  "has_nonlocal_goto"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 182)
+    nil )
+   (!pair  "has_asm_statement"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 185)
+    nil )
+   (!pair  "all_throwers_are_sibcalls"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 192)
+    nil )
+   (!pair  "limit_stack"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 196)
+    nil )
+   (!pair  "profile"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 199)
+    nil )
+   (!pair  "uses_const_pool"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 202)
+    nil )
+   (!pair  "uses_pic_offset_table"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 205)
+    nil )
+   (!pair  "uses_eh_lsda"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 208)
+    nil )
+   (!pair  "tail_call_emit"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 211)
+    nil )
+   (!pair  "arg_pointer_save_area_init"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 214)
+    nil )
+   (!pair  "frame_pointer_needed"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 219)
+    nil )
+   (!pair  "maybe_hot_insn_p"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 222)
+    nil )
+   (!pair  "stack_realign_needed"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 229)
+    nil )
+   (!pair  "stack_realign_tried"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 234)
+    nil )
+   (!pair  "need_drap"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 238)
+    nil )
+   (!pair  "stack_realign_processed"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 243)
+    nil )
+   (!pair  "stack_realign_finalized"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 247)
+    nil )
+   (!pair  "dbr_scheduled_p"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 250)
+    nil )
+   (!pair  "nothrow"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 255)
+    nil )
+   (!pair  "shrink_wrapped"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 258)
+    nil )
+   (!pair  "shrink_wrapped_separate"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 262)
+    nil )
+   (!pair  "sp_is_unchanging"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 267)
+    nil )
+   (!pair  "is_leaf"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 273)
+    nil )
+   (!pair  "uses_only_leaf_regs"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 278)
+    nil )
+   (!pair  "has_bb_partition"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 283)
+    nil )
+   (!pair  "bb_reorder_complete"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 287)
+    nil )
+   (!pair  "asm_clobbers"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 293)
+    nil )
+   (!pair  "max_insn_address"
+    (!type already_seen 2)
+    (!srcfileloc  "emit-rtl.h" 296)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1246 nil  gc_used "const_int_hasher"
+  (!srcfileloc  "emit-rtl.c" 142)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1247 
+  (!type pointer 1248 nil  gc_used
+   (!type already_seen 1247)
+  )
+  gc_pointed_to "hash_table<const_int_hasher>"
+  (!srcfileloc  "emit-rtl.c" 142)
+  (!fields 1 
+   (!pair  "const_int_hasher"
+    (!type already_seen 1246)
+    (!srcfileloc  "emit-rtl.c" 142)
+    nil )
+  )
+ )
+ 
+ (!type struct 1249 nil  gc_used "const_wide_int_hasher"
+  (!srcfileloc  "emit-rtl.c" 150)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1250 
+  (!type pointer 1251 nil  gc_used
+   (!type already_seen 1250)
+  )
+  gc_pointed_to "hash_table<const_wide_int_hasher>"
+  (!srcfileloc  "emit-rtl.c" 150)
+  (!fields 1 
+   (!pair  "const_wide_int_hasher"
+    (!type already_seen 1249)
+    (!srcfileloc  "emit-rtl.c" 150)
+    nil )
+  )
+ )
+ 
+ (!type struct 1252 nil  gc_used "const_poly_int_hasher"
+  (!srcfileloc  "emit-rtl.c" 160)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1253 
+  (!type pointer 1254 nil  gc_used
+   (!type already_seen 1253)
+  )
+  gc_pointed_to "hash_table<const_poly_int_hasher>"
+  (!srcfileloc  "emit-rtl.c" 160)
+  (!fields 1 
+   (!pair  "const_poly_int_hasher"
+    (!type already_seen 1252)
+    (!srcfileloc  "emit-rtl.c" 160)
+    nil )
+  )
+ )
+ 
+ (!type struct 1255 nil  gc_used "reg_attr_hasher"
+  (!srcfileloc  "emit-rtl.c" 169)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1256 
+  (!type pointer 1257 nil  gc_used
+   (!type already_seen 1256)
+  )
+  gc_pointed_to "hash_table<reg_attr_hasher>"
+  (!srcfileloc  "emit-rtl.c" 169)
+  (!fields 1 
+   (!pair  "reg_attr_hasher"
+    (!type already_seen 1255)
+    (!srcfileloc  "emit-rtl.c" 169)
+    nil )
+  )
+ )
+ 
+ (!type struct 1258 nil  gc_used "const_double_hasher"
+  (!srcfileloc  "emit-rtl.c" 178)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1259 
+  (!type pointer 1260 nil  gc_used
+   (!type already_seen 1259)
+  )
+  gc_pointed_to "hash_table<const_double_hasher>"
+  (!srcfileloc  "emit-rtl.c" 178)
+  (!fields 1 
+   (!pair  "const_double_hasher"
+    (!type already_seen 1258)
+    (!srcfileloc  "emit-rtl.c" 178)
+    nil )
+  )
+ )
+ 
+ (!type struct 1261 nil  gc_used "const_fixed_hasher"
+  (!srcfileloc  "emit-rtl.c" 187)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1262 
+  (!type pointer 1263 nil  gc_used
+   (!type already_seen 1262)
+  )
+  gc_pointed_to "hash_table<const_fixed_hasher>"
+  (!srcfileloc  "emit-rtl.c" 187)
+  (!fields 1 
+   (!pair  "const_fixed_hasher"
+    (!type already_seen 1261)
+    (!srcfileloc  "emit-rtl.c" 187)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 411)
+ 
+ (!type already_seen 419)
+ 
+ (!type already_seen 415)
+ 
+ (!type already_seen 413)
+ 
+ (!type already_seen 416)
+ 
+ (!type already_seen 417)
+ 
+ (!type already_seen 412)
+ 
+ (!type already_seen 423)
+ 
+ (!type already_seen 425)
+ 
+ (!type already_seen 427)
+ 
+ (!type already_seen 429)
+ 
+ (!type struct 1264 nil  gc_unused "throw_stmt_node"
+  (!srcfileloc  "except.h" 289)
+  (!fields 2 
+   (!pair  "stmt"
+    (!type already_seen 331)
+    (!srcfileloc  "except.h" 287)
+    nil )
+   (!pair  "lp_nr"
+    (!type already_seen 2)
+    (!srcfileloc  "except.h" 288)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1265 nil  gc_unused "pieces_addr"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1266 nil  gc_unused "op_by_pieces_d"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1267 nil  gc_unused "move_by_pieces_d"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1268 nil  gc_unused "store_by_pieces_d"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1269 nil  gc_unused "compare_by_pieces_d"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1270 
+  (!type pointer 1271 nil  gc_unused
+   (!type already_seen 1270)
+  )
+  gc_unused "separate_ops"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1272 nil  gc_used "insn_cache_hasher"
+  (!srcfileloc  "function.c" 126)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1273 
+  (!type pointer 1274 nil  gc_used
+   (!type already_seen 1273)
+  )
+  gc_pointed_to "hash_table<insn_cache_hasher>"
+  (!srcfileloc  "function.c" 126)
+  (!fields 1 
+   (!pair  "insn_cache_hasher"
+    (!type already_seen 1272)
+    (!srcfileloc  "function.c" 126)
+    nil )
+  )
+ )
+ 
+ (!type struct 1275 nil  gc_pointed_to "temp_slot_address_entry"
+  (!srcfileloc  "function.c" 592)
+  (!fields 3 
+   (!pair  "hash"
+    (!type already_seen 2)
+    (!srcfileloc  "function.c" 589)
+    nil )
+   (!pair  "address"
+    (!type already_seen 150)
+    (!srcfileloc  "function.c" 590)
+    nil )
+   (!pair  "temp_slot"
+    (!type already_seen 1237)
+    (!srcfileloc  "function.c" 591)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type struct 1276 nil  gc_used "temp_address_hasher"
+  (!srcfileloc  "function.c" 602)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1277 
+  (!type pointer 1278 nil  gc_used
+   (!type already_seen 1277)
+  )
+  gc_pointed_to "hash_table<temp_address_hasher>"
+  (!srcfileloc  "function.c" 602)
+  (!fields 1 
+   (!pair  "temp_address_hasher"
+    (!type already_seen 1276)
+    (!srcfileloc  "function.c" 602)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 1242)
+ 
+ (!type struct 1279 nil  gc_unused "pass_instantiate_virtual_regs"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1280 nil  gc_unused "assign_parm_data_all"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1281 nil  gc_unused "assign_parm_data_one"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1282 nil  gc_unused "pass_leaf_regs"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1283 nil  gc_unused "pass_thread_prologue_and_epilogue"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1284 nil  gc_unused "pass_match_asm_constraints"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 1285 
+  (!type pointer 1286 nil  gc_used
+   (!type already_seen 1285)
+  )
+  gc_pointed_to "hash_map<tree_hash,tree>"
+  (!srcfileloc  "except.c" 150)
+  (!fields 2 
+   (!pair  "tree"
+    (!type already_seen 23)
+    (!srcfileloc  "except.c" 150)
+    nil )
+   (!pair  "tree_hash"
+    (!type undefined 1287 nil  gc_unused "tree_hash"
+     (!srcfileloc  "except.c" 150)
+    )
+    (!srcfileloc  "except.c" 150)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 1287)
+ 
+ (!type struct 1288 nil  gc_unused "action_record"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1289 nil  gc_unused "action_record_hasher"
+  (!srcfileloc  "except.c" 209)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1290 nil  gc_unused "hash_table<action_record_hasher>"
+  (!srcfileloc  "except.c" 209)
+  (!fields 1 
+   (!pair  "action_record_hasher"
+    (!type already_seen 1289)
+    (!srcfileloc  "except.c" 209)
+    nil )
+  )
+ )
+ 
+ (!type struct 1291 nil  gc_unused "duplicate_eh_regions_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1292 nil  gc_unused "ttypes_filter"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1293 nil  gc_unused "ttypes_filter_hasher"
+  (!srcfileloc  "except.c" 728)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1294 nil  gc_unused "hash_table<ttypes_filter_hasher>"
+  (!srcfileloc  "except.c" 728)
+  (!fields 1 
+   (!pair  "ttypes_filter_hasher"
+    (!type already_seen 1293)
+    (!srcfileloc  "except.c" 728)
+    nil )
+  )
+ )
+ 
+ (!type struct 1295 nil  gc_unused "ehspec_hasher"
+  (!srcfileloc  "except.c" 763)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1296 nil  gc_unused "hash_table<ehspec_hasher>"
+  (!srcfileloc  "except.c" 763)
+  (!fields 1 
+   (!pair  "ehspec_hasher"
+    (!type already_seen 1295)
+    (!srcfileloc  "except.c" 763)
+    nil )
+  )
+ )
+ 
+ (!type struct 1297 nil  gc_unused "pass_set_nothrow_function_flags"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1298 nil  gc_unused "pass_convert_to_eh_region_ranges"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 894)
+ 
+ (!type struct 1299 
+  (!type pointer 1300 nil  gc_used
+   (!type already_seen 1299)
+  )
+  gc_pointed_to "test_of_length"
+  (!srcfileloc  "ggc-tests.c" 79)
+  (!fields 2 
+   (!pair  "num_elem"
+    (!type already_seen 2)
+    (!srcfileloc  "ggc-tests.c" 75)
+    nil )
+   (!pair  "elem"
+    (!type array 1301 nil  gc_used "1" 
+     (!type already_seen 1300)
+    )
+    (!srcfileloc  "ggc-tests.c" 76)
+    (!options 
+     (!option length string  "%h.num_elem")
+    )
+   )
+  )
+  nil 2047 nil nil )
+ 
+ (!type already_seen 896)
+ 
+ (!type struct 1302 
+  (!type pointer 1303 nil  gc_used
+   (!type already_seen 1302)
+  )
+  gc_pointed_to "test_of_union"
+  (!srcfileloc  "ggc-tests.c" 145)
+  (!fields 2 
+   (!pair  "m_kind"
+    (!type already_seen 2)
+    (!srcfileloc  "ggc-tests.c" 136)
+    nil )
+   (!pair  "m_u"
+    (!type already_seen 892)
+    (!srcfileloc  "ggc-tests.c" 140)
+    (!options 
+     (!option desc string  "calc_desc (%0.m_kind)")
+    )
+   )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1304 nil  gc_unused "test_struct_with_dtor"
+  (!srcfileloc  "ggc-tests.c" 186)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type struct 1305 
+  (!type pointer 1306 nil  gc_used
+   (!type already_seen 1305)
+  )
+  gc_pointed_to "example_base"
+  (!srcfileloc  "ggc-tests.c" 255)
+  (!fields 2 
+   (!pair  "m_kind"
+    (!type already_seen 2)
+    (!srcfileloc  "ggc-tests.c" 253)
+    nil )
+   (!pair  "m_a"
+    (!type already_seen 893)
+    (!srcfileloc  "ggc-tests.c" 254)
+    nil )
+  )
+  (!options 
+   (!option tag string  "0")
+   (!option desc string  "%h.m_kind")
+  )
+  2047 nil nil )
+ 
+ (!type struct 1307 
+  (!type pointer 1308 nil  gc_used
+   (!type already_seen 1307)
+  )
+  gc_pointed_to "some_subclass"
+  (!srcfileloc  "ggc-tests.c" 266)
+  (!fields 1 
+   (!pair  "m_b"
+    (!type already_seen 893)
+    (!srcfileloc  "ggc-tests.c" 265)
+    nil )
+  )
+  (!options 
+   (!option tag string  "1")
+  )
+  2047 nil 
+  (!type already_seen 1305)
+ )
+ 
+ (!type struct 1309 
+  (!type pointer 1310 nil  gc_used
+   (!type already_seen 1309)
+  )
+  gc_pointed_to "some_other_subclass"
+  (!srcfileloc  "ggc-tests.c" 277)
+  (!fields 1 
+   (!pair  "m_c"
+    (!type already_seen 893)
+    (!srcfileloc  "ggc-tests.c" 276)
+    nil )
+  )
+  (!options 
+   (!option tag string  "2")
+  )
+  2047 nil 
+  (!type already_seen 1305)
+ )
+ 
+ (!type struct 1311 
+  (!type pointer 1312 nil  gc_used
+   (!type already_seen 1311)
+  )
+  gc_pointed_to "test_node"
+  (!srcfileloc  "ggc-tests.c" 336)
+  (!fields 3 
+   (!pair  "m_prev"
+    (!type already_seen 1312)
+    (!srcfileloc  "ggc-tests.c" 333)
+    nil )
+   (!pair  "m_next"
+    (!type already_seen 1312)
+    (!srcfileloc  "ggc-tests.c" 334)
+    nil )
+   (!pair  "m_idx"
+    (!type already_seen 2)
+    (!srcfileloc  "ggc-tests.c" 335)
+    nil )
+  )
+  (!options 
+   (!option chain_prev string  "%h.m_prev")
+   (!option chain_next string  "%h.m_next")
+  )
+  2047 nil nil )
+ 
+ (!type user_struct 1313 
+  (!type pointer 1314 nil  gc_used
+   (!type already_seen 1313)
+  )
+  gc_pointed_to "user_struct"
+  (!srcfileloc  "ggc-tests.c" 398)
+  (!fields 0 )
+ )
+ 
+ (!type already_seen 616)
+ 
+ (!type struct 1315 nil  gc_unused "gcse_expr"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1316 
+  (!type pointer 1317 nil  gc_unused
+   (!type already_seen 1316)
+  )
+  gc_unused "gcse_occr"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1318 nil  gc_unused "gcse_hash_table_d"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1319 nil  gc_unused "ls_expr"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1320 nil  gc_unused "pre_ldst_expr_hasher"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1321 nil  gc_unused "bb_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 1322 nil  gc_unused "vec<rtx_insn*>"
+  (!srcfileloc  "gcse.c" 620)
+  (!fields 1 
+   (!pair  "rtx_insn"
+    (!type already_seen 346)
+    (!srcfileloc  "gcse.c" 620)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 1323 nil  gc_unused "vec<modify_pair>"
+  (!srcfileloc  "gcse.c" 621)
+  (!fields 1 
+   (!pair  "modify_pair"
+    (!type undefined 1324 nil  gc_unused "modify_pair"
+     (!srcfileloc  "gcse.c" 621)
+    )
+    (!srcfileloc  "gcse.c" 621)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 1324)
+ 
+ (!type struct 1325 nil  gc_unused "reg_avail_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1326 nil  gc_unused "mem_conflict_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1327 nil  gc_unused "edge_list"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1328 nil  gc_unused "set_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1329 nil  gc_unused "pass_rtl_pre"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1330 nil  gc_unused "pass_rtl_hoist"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1331 nil  gc_unused "macro_hash_value"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1332 nil  gc_unused "godump_container"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1333 nil  gc_used "libfunc_decl_hasher"
+  (!srcfileloc  "optabs-libfuncs.c" 720)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1334 
+  (!type pointer 1335 nil  gc_used
+   (!type already_seen 1334)
+  )
+  gc_pointed_to "hash_table<libfunc_decl_hasher>"
+  (!srcfileloc  "optabs-libfuncs.c" 720)
+  (!fields 1 
+   (!pair  "libfunc_decl_hasher"
+    (!type already_seen 1333)
+    (!srcfileloc  "optabs-libfuncs.c" 720)
+    nil )
+  )
+ )
+ 
+ (!type struct 1336 nil  gc_unused "bb_profile_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1337 nil  gc_unused "edge_profile_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1338 nil  gc_unused "location_triplet"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1339 nil  gc_unused "location_triplet_hash"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1340 
+  (!type pointer 1341 nil  gc_unused
+   (!type already_seen 1340)
+  )
+  gc_unused "fixup_edge_type"
+  (!srcfileloc  "mcf.c" 94)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type struct 1342 
+  (!type pointer 1343 nil  gc_unused
+   (!type already_seen 1342)
+  )
+  gc_unused "fixup_vertex_type"
+  (!srcfileloc  "mcf.c" 103)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type struct 1344 nil  gc_unused "fixup_graph_type"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1345 nil  gc_unused "queue_type"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1346 nil  gc_unused "augmenting_path_type"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type union 1347 nil  gc_unused "anonymous:../../linaro/gcc/mcf.c:343"nil 
+  (!fields 0 )
+  nil 0 nil )
+ 
+ (!type struct 1348 
+  (!type pointer 1349 nil  gc_unused
+   (!type already_seen 1348)
+  )
+  gc_unused "stack_def"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1350 
+  (!type pointer 1351 nil  gc_unused
+   (!type already_seen 1350)
+  )
+  gc_unused "block_info_def"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1352 nil  gc_unused "pass_stack_regs"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1353 nil  gc_unused "pass_stack_regs_run"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1354 nil  gc_unused "pass_free_cfg"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1355 nil  gc_unused "pass_into_cfg_layout_mode"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1356 nil  gc_unused "pass_outof_cfg_layout_mode"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1357 nil  gc_unused "cfg_hooks"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1358 
+  (!type pointer 1359 nil  gc_used
+   (!type already_seen 1358)
+  )
+  gc_pointed_to "string_pool_data"
+  (!srcfileloc  "stringpool.c" 238)
+  (!fields 3 
+   (!pair  "entries"
+    (!type already_seen 17)
+    (!srcfileloc  "stringpool.c" 235)
+    (!options 
+     (!option nested_ptr nested 
+      (!type already_seen 22)
+      "%h ? HT_IDENT_TO_GCC_IDENT (%h) : NULL" "%h ? GCC_IDENT_TO_HT_IDENT (%h) : NULL")
+     (!option length string  "%h.nslots")
+    )
+   )
+   (!pair  "nslots"
+    (!type already_seen 2)
+    (!srcfileloc  "stringpool.c" 236)
+    nil )
+   (!pair  "nelements"
+    (!type already_seen 2)
+    (!srcfileloc  "stringpool.c" 237)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1360 nil  gc_pointed_to "type_hash"
+  (!srcfileloc  "tree.c" 170)
+  (!fields 2 
+   (!pair  "hash"
+    (!type already_seen 2)
+    (!srcfileloc  "tree.c" 168)
+    nil )
+   (!pair  "type"
+    (!type already_seen 23)
+    (!srcfileloc  "tree.c" 169)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type struct 1361 nil  gc_used "type_cache_hasher"
+  (!srcfileloc  "tree.c" 194)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1362 
+  (!type pointer 1363 nil  gc_used
+   (!type already_seen 1362)
+  )
+  gc_pointed_to "hash_table<type_cache_hasher>"
+  (!srcfileloc  "tree.c" 194)
+  (!fields 1 
+   (!pair  "type_cache_hasher"
+    (!type already_seen 1361)
+    (!srcfileloc  "tree.c" 194)
+    nil )
+  )
+ )
+ 
+ (!type struct 1364 nil  gc_used "int_cst_hasher"
+  (!srcfileloc  "tree.c" 205)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1365 
+  (!type pointer 1366 nil  gc_used
+   (!type already_seen 1365)
+  )
+  gc_pointed_to "hash_table<int_cst_hasher>"
+  (!srcfileloc  "tree.c" 205)
+  (!fields 1 
+   (!pair  "int_cst_hasher"
+    (!type already_seen 1364)
+    (!srcfileloc  "tree.c" 205)
+    nil )
+  )
+ )
+ 
+ (!type struct 1367 nil  gc_used "poly_int_cst_hasher"
+  (!srcfileloc  "tree.c" 216)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1368 
+  (!type pointer 1369 nil  gc_used
+   (!type already_seen 1368)
+  )
+  gc_pointed_to "hash_table<poly_int_cst_hasher>"
+  (!srcfileloc  "tree.c" 216)
+  (!fields 1 
+   (!pair  "poly_int_cst_hasher"
+    (!type already_seen 1367)
+    (!srcfileloc  "tree.c" 216)
+    nil )
+  )
+ )
+ 
+ (!type struct 1370 nil  gc_used "cl_option_hasher"
+  (!srcfileloc  "tree.c" 232)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1371 
+  (!type pointer 1372 nil  gc_used
+   (!type already_seen 1371)
+  )
+  gc_pointed_to "hash_table<cl_option_hasher>"
+  (!srcfileloc  "tree.c" 232)
+  (!fields 1 
+   (!pair  "cl_option_hasher"
+    (!type already_seen 1370)
+    (!srcfileloc  "tree.c" 232)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 1373 
+  (!type pointer 1374 nil  gc_used
+   (!type already_seen 1373)
+  )
+  gc_pointed_to "hash_table<tree_decl_map_cache_hasher>"
+  (!srcfileloc  "tree.c" 238)
+  (!fields 1 
+   (!pair  "tree_decl_map_cache_hasher"
+    (!type already_seen 908)
+    (!srcfileloc  "tree.c" 238)
+    nil )
+  )
+ )
+ 
+ (!type struct 1375 nil  gc_used "tree_vec_map_cache_hasher"
+  (!srcfileloc  "tree.c" 261)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1376 
+  (!type pointer 1377 nil  gc_used
+   (!type already_seen 1376)
+  )
+  gc_pointed_to "hash_table<tree_vec_map_cache_hasher>"
+  (!srcfileloc  "tree.c" 261)
+  (!fields 1 
+   (!pair  "tree_vec_map_cache_hasher"
+    (!type already_seen 1375)
+    (!srcfileloc  "tree.c" 261)
+    nil )
+  )
+ )
+ 
+ (!type struct 1378 nil  gc_unused "free_lang_data_d"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1379 nil  gc_unused "pass_ipa_free_lang_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1380 nil  gc_unused "escaped_string"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1381 nil  gc_unused "addr_const"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1382 nil  gc_used "section_hasher"
+  (!srcfileloc  "varasm.c" 188)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1383 
+  (!type pointer 1384 nil  gc_used
+   (!type already_seen 1383)
+  )
+  gc_pointed_to "hash_table<section_hasher>"
+  (!srcfileloc  "varasm.c" 188)
+  (!fields 1 
+   (!pair  "section_hasher"
+    (!type already_seen 1382)
+    (!srcfileloc  "varasm.c" 188)
+    nil )
+  )
+ )
+ 
+ (!type struct 1385 nil  gc_used "object_block_hasher"
+  (!srcfileloc  "varasm.c" 199)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1386 
+  (!type pointer 1387 nil  gc_used
+   (!type already_seen 1386)
+  )
+  gc_pointed_to "hash_table<object_block_hasher>"
+  (!srcfileloc  "varasm.c" 199)
+  (!fields 1 
+   (!pair  "object_block_hasher"
+    (!type already_seen 1385)
+    (!srcfileloc  "varasm.c" 199)
+    nil )
+  )
+ )
+ 
+ (!type struct 1388 nil  gc_unused "asm_int_op"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 1389 
+  (!type pointer 1390 nil  gc_used
+   (!type already_seen 1389)
+  )
+  gc_pointed_to "hash_table<tree_descriptor_hasher>"
+  (!srcfileloc  "varasm.c" 2992)
+  (!fields 1 
+   (!pair  "tree_descriptor_hasher"
+    (!type already_seen 1035)
+    (!srcfileloc  "varasm.c" 2992)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 974)
+ 
+ (!type already_seen 973)
+ 
+ (!type struct 1391 nil  gc_unused "oc_outer_state"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1392 nil  gc_unused "oc_local_state"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1393 nil  gc_used "tm_clone_hasher"
+  (!srcfileloc  "varasm.c" 6032)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1394 
+  (!type pointer 1395 nil  gc_used
+   (!type already_seen 1394)
+  )
+  gc_pointed_to "hash_table<tm_clone_hasher>"
+  (!srcfileloc  "varasm.c" 6032)
+  (!fields 1 
+   (!pair  "tm_clone_hasher"
+    (!type already_seen 1393)
+    (!srcfileloc  "varasm.c" 6032)
+    nil )
+  )
+ )
+ 
+ (!type struct 1396 nil  gc_unused "tm_alias_pair"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 451)
+ 
+ (!type already_seen 749)
+ 
+ (!type already_seen 747)
+ 
+ (!type already_seen 757)
+ 
+ (!type already_seen 755)
+ 
+ (!type already_seen 440)
+ 
+ (!type already_seen 762)
+ 
+ (!type already_seen 783)
+ 
+ (!type already_seen 772)
+ 
+ (!type struct 1397 nil  gc_pointed_to "gimple_statement_wce"
+  (!srcfileloc  "gimple.h" 559)
+  (!fields 1 
+   (!pair  "cleanup"
+    (!type already_seen 331)
+    (!srcfileloc  "gimple.h" 558)
+    nil )
+  )
+  (!options 
+   (!option tag string  "GSS_WCE")
+  )
+  2047 nil 
+  (!type already_seen 332)
+ )
+ 
+ (!type already_seen 788)
+ 
+ (!type already_seen 791)
+ 
+ (!type already_seen 790)
+ 
+ (!type already_seen 785)
+ 
+ (!type already_seen 780)
+ 
+ (!type struct 1398 nil  gc_pointed_to "gimple_statement_omp_return"
+  (!srcfileloc  "gimple.h" 816)
+  (!fields 0 )
+  (!options 
+   (!option tag string  "GSS_OMP_ATOMIC_STORE_LAYOUT")
+  )
+  2047 nil 
+  (!type already_seen 780)
+ )
+ 
+ (!type struct 1399 nil  gc_unused "gimple_temp_hash_elt"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1400 nil  gc_pointed_to "tm_restart_node"
+  (!srcfileloc  "gimple-ssa.h" 32)
+  (!fields 2 
+   (!pair  "stmt"
+    (!type already_seen 331)
+    (!srcfileloc  "gimple-ssa.h" 30)
+    nil )
+   (!pair  "label_or_list"
+    (!type already_seen 23)
+    (!srcfileloc  "gimple-ssa.h" 31)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type already_seen 454)
+ 
+ (!type already_seen 445)
+ 
+ (!type already_seen 442)
+ 
+ (!type already_seen 444)
+ 
+ (!type already_seen 446)
+ 
+ (!type already_seen 453)
+ 
+ (!type struct 1401 nil  gc_unused "pass_release_ssa_names"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type union 1402 nil  gc_unused "anonymous:../../linaro/gcc/tree-eh.c:53"nil 
+  (!fields 0 )
+  nil 0 nil )
+ 
+ (!type struct 1403 nil  gc_unused "finally_tree_node"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1404 nil  gc_unused "finally_tree_hasher"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1405 nil  gc_unused "goto_queue_node"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1406 nil  gc_unused "leh_state"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1407 nil  gc_unused "leh_tf_state"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1408 nil  gc_unused "labels_s"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1409 nil  gc_unused "pass_lower_eh"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1410 nil  gc_unused "pass_refactor_eh"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1411 nil  gc_unused "pass_lower_resx"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1412 nil  gc_unused "pass_lower_eh_dispatch"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1413 nil  gc_unused "pass_cleanup_eh"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1414 nil  gc_used "mem_addr_template"
+  (!srcfileloc  "tree-ssa-address.c" 94)
+  (!fields 3 
+   (!pair  "ref"
+    (!type already_seen 150)
+    (!srcfileloc  "tree-ssa-address.c" 82)
+    nil )
+   (!pair  "step_p"
+    (!type already_seen 151)
+    (!srcfileloc  "tree-ssa-address.c" 83)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "off_p"
+    (!type already_seen 151)
+    (!srcfileloc  "tree-ssa-address.c" 85)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+  )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1415 
+  (!type pointer 1416 nil  gc_used
+   (!type already_seen 1415)
+  )
+  gc_pointed_to "vec<mem_addr_template,va_gc>"
+  (!srcfileloc  "tree-ssa-address.c" 94)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "tree-ssa-address.c" 94)
+    nil )
+   (!pair  "mem_addr_template"
+    (!type already_seen 1414)
+    (!srcfileloc  "tree-ssa-address.c" 94)
+    nil )
+  )
+ )
+ 
+ (!type struct 1417 nil  gc_unused "mem_address"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1418 nil  gc_unused "cfg_stats_d"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1419 nil  gc_unused "replace_decls_d"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1420 nil  gc_unused "locus_discrim_map"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1421 nil  gc_unused "locus_discrim_hasher"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1422 nil  gc_unused "pass_build_cfg"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1423 nil  gc_unused "omp_region"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1424 nil  gc_unused "walk_stmt_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1425 nil  gc_unused "move_stmt_d"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1426 nil  gc_unused "profile_record"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1427 nil  gc_unused "pass_split_crit_edges"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1428 nil  gc_unused "pass_warn_function_return"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1429 nil  gc_unused "pass_warn_unused_result"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1430 nil  gc_unused "pass_fixup_cfg"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1431 nil  gc_unused "iv_use"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1432 nil  gc_unused "iv"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1433 nil  gc_unused "version_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1434 nil  gc_unused "comp_cost"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1435 nil  gc_unused "iv_inv_expr_ent"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1436 nil  gc_unused "cost_pair"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1437 nil  gc_unused "iv_group"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1438 nil  gc_unused "iv_cand"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1439 nil  gc_unused "iv_common_cand"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1440 nil  gc_unused "iv_common_cand_hasher"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1441 nil  gc_unused "iv_inv_expr_hasher"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1442 nil  gc_unused "ivopts_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1443 nil  gc_unused "iv_ca"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1444 nil  gc_unused "iv_ca_delta"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1445 nil  gc_unused "tree_niter_desc"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1446 nil  gc_unused "ifs_ivopts_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1447 nil  gc_unused "walk_tree_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1448 nil  gc_unused "aff_tree"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1449 nil  gc_unused "ainc_cost_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1450 nil  gc_unused "dfa_stats_d"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1451 nil  gc_unused "numbered_tree"
+  (!srcfileloc  "tree-dfa.c" 950)
+  (!fields 2 
+   (!pair  "t"
+    (!type already_seen 23)
+    (!srcfileloc  "tree-dfa.c" 948)
+    nil )
+   (!pair  "num"
+    (!type already_seen 2)
+    (!srcfileloc  "tree-dfa.c" 949)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1452 nil  gc_pointed_to "scev_info_str"
+  (!srcfileloc  "tree-scalar-evolution.c" 301)
+  (!fields 3 
+   (!pair  "name_version"
+    (!type already_seen 2)
+    (!srcfileloc  "tree-scalar-evolution.c" 298)
+    nil )
+   (!pair  "instantiated_below"
+    (!type already_seen 2)
+    (!srcfileloc  "tree-scalar-evolution.c" 299)
+    nil )
+   (!pair  "chrec"
+    (!type already_seen 23)
+    (!srcfileloc  "tree-scalar-evolution.c" 300)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type struct 1453 nil  gc_used "scev_info_hasher"
+  (!srcfileloc  "tree-scalar-evolution.c" 328)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1454 
+  (!type pointer 1455 nil  gc_used
+   (!type already_seen 1454)
+  )
+  gc_pointed_to "hash_table<scev_info_hasher>"
+  (!srcfileloc  "tree-scalar-evolution.c" 328)
+  (!fields 1 
+   (!pair  "scev_info_hasher"
+    (!type already_seen 1453)
+    (!srcfileloc  "tree-scalar-evolution.c" 328)
+    nil )
+  )
+ )
+ 
+ (!type struct 1456 nil  gc_unused "instantiate_cache_type"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1457 nil  gc_unused "chrec_stats"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 448)
+ 
+ (!type struct 1458 nil  gc_unused "pass_ipa_tree_profile"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1459 nil  gc_unused "nesting_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1460 nil  gc_unused "nesting_copy_body_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1461 nil  gc_unused "oacc_loop"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1462 nil  gc_unused "pass_oacc_device_lower"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1463 nil  gc_unused "pass_omp_device_lower"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1464 nil  gc_unused "pass_omp_target_link"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1465 nil  gc_unused "omp_for_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1466 nil  gc_unused "oacc_collapse"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1467 nil  gc_unused "omp_for_data_loop"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1468 
+  (!type pointer 1469 nil  gc_used
+   (!type already_seen 1468)
+  )
+  gc_pointed_to "grid_launch_attributes_trees"
+  (!srcfileloc  "omp-expand.c" 7034)
+  (!fields 5 
+   (!pair  "kernel_dim_array_type"
+    (!type already_seen 23)
+    (!srcfileloc  "omp-expand.c" 7029)
+    nil )
+   (!pair  "kernel_lattrs_dimnum_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "omp-expand.c" 7030)
+    nil )
+   (!pair  "kernel_lattrs_grid_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "omp-expand.c" 7031)
+    nil )
+   (!pair  "kernel_lattrs_group_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "omp-expand.c" 7032)
+    nil )
+   (!pair  "kernel_launch_attributes_type"
+    (!type already_seen 23)
+    (!srcfileloc  "omp-expand.c" 7033)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type struct 1470 nil  gc_unused "grid_arg_decl_map"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1471 nil  gc_unused "pass_expand_omp"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1472 nil  gc_unused "pass_expand_omp_ssa"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1473 nil  gc_unused "omp_context"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1474 nil  gc_unused "omplow_simd_context"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1475 nil  gc_unused "omp_taskcopy_context"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1476 nil  gc_unused "lower_omp_regimplify_operands_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1477 nil  gc_unused "pass_lower_omp"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1478 nil  gc_unused "pass_diagnose_omp_blocks"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1479 nil  gc_unused "_stmt_vec_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1480 nil  gc_unused "cl_option_state"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1481 nil  gc_unused "simd_immediate_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1482 nil  gc_unused "aarch64_flag_desc"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1483 nil  gc_unused "aarch64_tuning_override_function"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1484 nil  gc_unused "processor"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1485 nil  gc_unused "tune_params"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1486 nil  gc_unused "aarch64_option_extension"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1487 nil  gc_unused "aarch64_branch_protect_type"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1488 nil  gc_unused "aarch64_address_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1489 nil  gc_unused "aarch64_attribute_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1490 nil  gc_unused "expand_vec_perm_d"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1491 nil  gc_unused "gcc_target"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1492 nil  gc_unused "dump_file_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1493 nil  gc_unused "pass_build_ssa_passes"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1494 nil  gc_unused "pass_local_optimization_passes"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1495 nil  gc_unused "pass_ipa_remove_symbols"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1496 nil  gc_unused "pass_all_early_optimizations"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1497 nil  gc_unused "pass_all_optimizations"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1498 nil  gc_unused "pass_all_optimizations_g"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1499 nil  gc_unused "pass_rest_of_compilation"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1500 nil  gc_unused "pass_postreload"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1501 nil  gc_unused "pass_late_compilation"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1502 
+  (!type pointer 1503 nil  gc_unused
+   (!type already_seen 1502)
+  )
+  gc_unused "uid_range"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1504 nil  gc_unused "pass_list_node"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1505 
+  (!type pointer 1506 nil  gc_unused
+   (!type already_seen 1505)
+  )
+  gc_unused "lto_out_decl_state"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1507 nil  gc_unused "cgraph_order_sort"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 1508 
+  (!type pointer 1509 nil  gc_used
+   (!type already_seen 1508)
+  )
+  gc_pointed_to "hash_map<char*,unsigned>"
+  (!srcfileloc  "cgraphclones.c" 520)
+  (!fields 1 
+   (!pair  "unsigned"
+    (!type undefined 1510 nil  gc_unused "unsigned"
+     (!srcfileloc  "cgraphclones.c" 520)
+    )
+    (!srcfileloc  "cgraphclones.c" 520)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 1510)
+ 
+ (!type user_struct 1511 
+  (!type pointer 1512 nil  gc_used
+   (!type already_seen 1511)
+  )
+  gc_pointed_to "vec<gimple*,va_gc>"
+  (!srcfileloc  "tree-phinodes.c" 70)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "tree-phinodes.c" 70)
+    nil )
+   (!pair  "gimple"
+    (!type already_seen 331)
+    (!srcfileloc  "tree-phinodes.c" 70)
+    nil )
+  )
+ )
+ 
+ (!type struct 1513 nil  gc_unused "ao_ref"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type undefined 1514 nil  gc_unused "TRAILING_WIDE_INT_ACCESSOR"
+  (!srcfileloc  "tree-ssanames.h" 52)
+ )
+ 
+ (!type already_seen 1081)
+ 
+ (!type user_struct 1515 nil  gc_unused "value_range"
+  (!srcfileloc  "tree-vrp.h" 153)
+  (!fields 0 )
+ )
+ 
+ (!type struct 1516 nil  gc_unused "assert_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 1083)
+ 
+ (!type already_seen 1084)
+ 
+ (!type already_seen 1085)
+ 
+ (!type already_seen 1076)
+ 
+ (!type already_seen 1079)
+ 
+ (!type struct 1517 nil  gc_used "ipa_vr"
+  (!srcfileloc  "ipa-prop.h" 555)
+  (!fields 4 
+   (!pair  "known"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-prop.h" 162)
+    nil )
+   (!pair  "type"
+    (!type already_seen 2)
+    (!srcfileloc  "ipa-prop.h" 163)
+    nil )
+   (!pair  "min"
+    (!type already_seen 496)
+    (!srcfileloc  "ipa-prop.h" 164)
+    nil )
+   (!pair  "max"
+    (!type already_seen 496)
+    (!srcfileloc  "ipa-prop.h" 165)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type already_seen 1082)
+ 
+ (!type already_seen 1067)
+ 
+ (!type already_seen 1066)
+ 
+ (!type already_seen 1070)
+ 
+ (!type already_seen 1071)
+ 
+ (!type user_struct 1518 
+  (!type pointer 1519 nil  gc_used
+   (!type already_seen 1518)
+  )
+  gc_pointed_to "vec<ipa_bits*,va_gc>"
+  (!srcfileloc  "ipa-prop.h" 553)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "ipa-prop.h" 553)
+    nil )
+   (!pair  "ipa_bits"
+    (!type already_seen 1078)
+    (!srcfileloc  "ipa-prop.h" 553)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 1520 
+  (!type pointer 1521 nil  gc_used
+   (!type already_seen 1520)
+  )
+  gc_pointed_to "vec<ipa_vr,va_gc>"
+  (!srcfileloc  "ipa-prop.h" 555)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "ipa-prop.h" 555)
+    nil )
+   (!pair  "ipa_vr"
+    (!type already_seen 1517)
+    (!srcfileloc  "ipa-prop.h" 555)
+    nil )
+  )
+ )
+ 
+ (!type struct 1522 
+  (!type pointer 1523 nil  gc_used
+   (!type already_seen 1522)
+  )
+  gc_pointed_to "ipcp_transformation"
+  (!srcfileloc  "ipa-prop.h" 556)
+  (!fields 3 
+   (!pair  "agg_values"
+    (!type already_seen 1098)
+    (!srcfileloc  "ipa-prop.h" 551)
+    nil )
+   (!pair  "bits"
+    (!type already_seen 1519)
+    (!srcfileloc  "ipa-prop.h" 553)
+    nil )
+   (!pair  "m_vr"
+    (!type already_seen 1521)
+    (!srcfileloc  "ipa-prop.h" 555)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type already_seen 1092)
+ 
+ (!type already_seen 1094)
+ 
+ (!type user_struct 1524 
+  (!type pointer 1525 nil  gc_used
+   (!type already_seen 1524)
+  )
+  gc_pointed_to "ipa_node_params_t"
+  (!srcfileloc  "ipa-prop.h" 629)
+  (!fields 0 )
+ )
+ 
+ (!type user_struct 1526 
+  (!type pointer 1527 nil  gc_used
+   (!type already_seen 1526)
+  )
+  gc_pointed_to "ipa_edge_args_sum_t"
+  (!srcfileloc  "ipa-prop.h" 646)
+  (!fields 0 )
+ )
+ 
+ (!type struct 1528 nil  gc_unused "ipcp_transformation_t"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 1529 
+  (!type pointer 1530 nil  gc_used
+   (!type already_seen 1529)
+  )
+  gc_pointed_to "function_summary<ipcp_transformation*>"
+  (!srcfileloc  "ipa-prop.h" 673)
+  (!fields 1 
+   (!pair  "ipcp_transformation"
+    (!type already_seen 1523)
+    (!srcfileloc  "ipa-prop.h" 673)
+    nil )
+  )
+ )
+ 
+ (!type struct 1531 nil  gc_used "tm_wrapper_hasher"
+  (!srcfileloc  "trans-mem.c" 466)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1532 
+  (!type pointer 1533 nil  gc_used
+   (!type already_seen 1532)
+  )
+  gc_pointed_to "hash_table<tm_wrapper_hasher>"
+  (!srcfileloc  "trans-mem.c" 466)
+  (!fields 1 
+   (!pair  "tm_wrapper_hasher"
+    (!type already_seen 1531)
+    (!srcfileloc  "trans-mem.c" 466)
+    nil )
+  )
+ )
+ 
+ (!type struct 1534 nil  gc_unused "diagnose_tm"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1535 nil  gc_unused "pass_diagnose_tm_blocks"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1536 nil  gc_unused "tm_log_entry"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1537 nil  gc_unused "log_entry_hasher"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1538 nil  gc_unused "tm_new_mem_map"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1539 nil  gc_unused "tm_mem_map_hasher"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1540 nil  gc_unused "pass_lower_tm"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1541 nil  gc_unused "tm_region"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1542 nil  gc_unused "pass_tm_init"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1543 nil  gc_unused "bb2reg_stuff"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1544 nil  gc_unused "pass_tm_mark"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1545 nil  gc_unused "pass_tm_edges"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1546 nil  gc_unused "tm_memop"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1547 nil  gc_unused "tm_memop_hasher"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1548 nil  gc_unused "tm_memopt_bitmaps"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1549 nil  gc_unused "pass_tm_memopt"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1550 nil  gc_unused "tm_ipa_cg_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 1551 nil  gc_unused "vec<cgraph_node*>"
+  (!srcfileloc  "trans-mem.c" 4182)
+  (!fields 1 
+   (!pair  "cgraph_node"
+    (!type already_seen 798)
+    (!srcfileloc  "trans-mem.c" 4182)
+    nil )
+  )
+ )
+ 
+ (!type struct 1552 nil  gc_unused "demangle_component"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1553 nil  gc_unused "create_version_alias_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1554 nil  gc_unused "pass_ipa_tm"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1555 nil  gc_unused "lto_location_cache"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1556 nil  gc_unused "lto_input_block"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1557 nil  gc_unused "lto_header"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1558 nil  gc_unused "lto_simple_header"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1559 nil  gc_unused "lto_simple_header_with_strings"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1560 nil  gc_unused "lto_function_header"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1561 nil  gc_unused "lto_decl_header"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1562 nil  gc_unused "lto_stats_d"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1563 nil  gc_unused "lto_encoder_entry"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 384)
+ 
+ (!type struct 1564 nil  gc_unused "lto_symtab_encoder_iterator"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1565 nil  gc_unused "lto_tree_ref_encoder"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 387)
+ 
+ (!type already_seen 391)
+ 
+ (!type already_seen 386)
+ 
+ (!type already_seen 390)
+ 
+ (!type already_seen 392)
+ 
+ (!type already_seen 394)
+ 
+ (!type already_seen 395)
+ 
+ (!type struct 1566 nil  gc_unused "lto_char_ptr_base"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1567 nil  gc_unused "lto_output_stream"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1568 nil  gc_unused "lto_simple_output_block"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1569 nil  gc_unused "string_slot"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1570 nil  gc_unused "string_slot_hasher"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1571 nil  gc_unused "dref_entry"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 583)
+ 
+ (!type already_seen 585)
+ 
+ (!type already_seen 594)
+ 
+ (!type already_seen 596)
+ 
+ (!type already_seen 600)
+ 
+ (!type already_seen 610)
+ 
+ (!type already_seen 612)
+ 
+ (!type already_seen 614)
+ 
+ (!type already_seen 618)
+ 
+ (!type already_seen 620)
+ 
+ (!type already_seen 1117)
+ 
+ (!type struct 1572 nil  gc_unused "inline_param_summary"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 1116)
+ 
+ (!type undefined 1573 nil  gc_unused "uint32_t"
+  (!srcfileloc  "ipa-predicate.h" 78)
+ )
+ 
+ (!type already_seen 1121)
+ 
+ (!type struct 1574 nil  gc_unused "agg_position_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 1120)
+ 
+ (!type already_seen 1119)
+ 
+ (!type user_struct 1575 nil  gc_unused "ipa_fn_summary_t"
+  (!srcfileloc  "ipa-fnsummary.h" 202)
+  (!fields 0 )
+ )
+ 
+ (!type user_struct 1576 
+  (!type pointer 1577 nil  gc_used
+   (!type already_seen 1576)
+  )
+  gc_pointed_to "fast_function_summary<ipa_fn_summary*,va_gc>"
+  (!srcfileloc  "ipa-fnsummary.h" 204)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "ipa-fnsummary.h" 204)
+    nil )
+   (!pair  "ipa_fn_summary"
+    (!type already_seen 1114)
+    (!srcfileloc  "ipa-fnsummary.h" 204)
+    nil )
+  )
+ )
+ 
+ (!type struct 1578 nil  gc_unused "ipa_call_summary"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1579 nil  gc_unused "ipa_call_summary_t"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1580 nil  gc_unused "vtable_registration"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1581 nil  gc_unused "vtbl_map_hasher"
+  (!srcfileloc  "vtable-verify.c" 298)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1582 nil  gc_unused "hash_table<vtbl_map_hasher>"
+  (!srcfileloc  "vtable-verify.c" 298)
+  (!fields 1 
+   (!pair  "vtbl_map_hasher"
+    (!type already_seen 1581)
+    (!srcfileloc  "vtable-verify.c" 298)
+    nil )
+  )
+ )
+ 
+ (!type undefined 1583 nil  gc_unused "vtbl_map_table_type::iterator"
+  (!srcfileloc  "vtable-verify.c" 299)
+ )
+ 
+ (!type struct 1584 nil  gc_unused "vtbl_map_node"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1585 nil  gc_unused "pass_vtable_verify"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1586 nil  gc_unused "asan_mem_ref"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1587 nil  gc_unused "asan_mem_ref_hasher"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1588 nil  gc_unused "asan_redzone_buffer"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1589 nil  gc_unused "asan_add_string_csts_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1590 nil  gc_unused "pass_asan"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1591 nil  gc_unused "pass_asan_O0"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1592 nil  gc_pointed_to "tree_type_map"
+  (!srcfileloc  "ubsan.c" 58)
+  (!fields 2 
+   (!pair  "type"
+    (!type already_seen 941)
+    (!srcfileloc  "ubsan.c" 56)
+    nil )
+   (!pair  "decl"
+    (!type already_seen 23)
+    (!srcfileloc  "ubsan.c" 57)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  2047 nil nil )
+ 
+ (!type struct 1593 nil  gc_used "tree_type_map_cache_hasher"
+  (!srcfileloc  "ubsan.c" 82)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1594 
+  (!type pointer 1595 nil  gc_used
+   (!type already_seen 1594)
+  )
+  gc_pointed_to "hash_table<tree_type_map_cache_hasher>"
+  (!srcfileloc  "ubsan.c" 82)
+  (!fields 1 
+   (!pair  "tree_type_map_cache_hasher"
+    (!type already_seen 1593)
+    (!srcfileloc  "ubsan.c" 82)
+    nil )
+  )
+ )
+ 
+ (!type struct 1596 nil  gc_unused "pass_ubsan"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1597 nil  gc_unused "pass_tsan"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1598 nil  gc_unused "pass_tsan_O0"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1599 nil  gc_unused "sanopt_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1600 nil  gc_unused "sanopt_tree_triplet"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1601 nil  gc_unused "sanopt_tree_triplet_hash"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1602 nil  gc_unused "sanopt_tree_couple"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1603 nil  gc_unused "sanopt_tree_couple_hash"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1604 nil  gc_unused "sanopt_ctx"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1605 nil  gc_unused "pass_sanopt"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1606 nil  gc_unused "type_pair"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1607 nil  gc_unused "default_hash_traits"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 1129)
+ 
+ (!type struct 1608 nil  gc_unused "odr_name_hasher"
+  (!srcfileloc  "ipa-devirt.c" 611)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type struct 1609 nil  gc_unused "odr_vtable_hasher"
+  (!srcfileloc  "ipa-devirt.c" 613)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1610 nil  gc_unused "hash_table<odr_name_hasher>"
+  (!srcfileloc  "ipa-devirt.c" 611)
+  (!fields 1 
+   (!pair  "odr_name_hasher"
+    (!type already_seen 1608)
+    (!srcfileloc  "ipa-devirt.c" 611)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 1611 nil  gc_unused "hash_table<odr_vtable_hasher>"
+  (!srcfileloc  "ipa-devirt.c" 613)
+  (!fields 1 
+   (!pair  "odr_vtable_hasher"
+    (!type already_seen 1609)
+    (!srcfileloc  "ipa-devirt.c" 613)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 1612 
+  (!type pointer 1613 nil  gc_used
+   (!type already_seen 1612)
+  )
+  gc_pointed_to "vec<odr_type,va_gc>"
+  (!srcfileloc  "ipa-devirt.c" 620)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "ipa-devirt.c" 620)
+    nil )
+   (!pair  "odr_type"
+    (!type already_seen 1128)
+    (!srcfileloc  "ipa-devirt.c" 620)
+    nil )
+  )
+ )
+ 
+ (!type struct 1614 nil  gc_unused "polymorphic_call_target_d"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1615 nil  gc_unused "polymorphic_call_target_hasher"
+  (!srcfileloc  "ipa-devirt.c" 2853)
+  (!fields 0 )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1616 nil  gc_unused "hash_table<polymorphic_call_target_hasher>"
+  (!srcfileloc  "ipa-devirt.c" 2853)
+  (!fields 1 
+   (!pair  "polymorphic_call_target_hasher"
+    (!type already_seen 1615)
+    (!srcfileloc  "ipa-devirt.c" 2853)
+    nil )
+  )
+ )
+ 
+ (!type struct 1617 nil  gc_unused "odr_type_warn_count"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1618 nil  gc_unused "decl_warn_count"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1619 nil  gc_unused "final_warning_record"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1620 nil  gc_unused "pass_ipa_devirt"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1621 nil  gc_unused "direct_internal_fn_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1622 nil  gc_unused "hsa_function_representation"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1623 nil  gc_used "hsa_decl_kernel_map_element"
+  (!srcfileloc  "hsa-common.c" 67)
+  (!fields 4 
+   (!pair  "decl"
+    (!type already_seen 23)
+    (!srcfileloc  "hsa-common.c" 55)
+    nil )
+   (!pair  "name"
+    (!type already_seen 11)
+    (!srcfileloc  "hsa-common.c" 57)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "omp_data_size"
+    (!type already_seen 2)
+    (!srcfileloc  "hsa-common.c" 59)
+    nil )
+   (!pair  "gridified_kernel_p"
+    (!type already_seen 2)
+    (!srcfileloc  "hsa-common.c" 61)
+    nil )
+  )
+  nil 2047 nil nil )
+ 
+ (!type user_struct 1624 
+  (!type pointer 1625 nil  gc_used
+   (!type already_seen 1624)
+  )
+  gc_pointed_to "vec<hsa_decl_kernel_map_element,va_gc>"
+  (!srcfileloc  "hsa-common.c" 67)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "hsa-common.c" 67)
+    nil )
+   (!pair  "hsa_decl_kernel_map_element"
+    (!type already_seen 1623)
+    (!srcfileloc  "hsa-common.c" 67)
+    nil )
+  )
+ )
+ 
+ (!type struct 1626 nil  gc_unused "arg_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1627 nil  gc_unused "arg"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1628 nil  gc_unused "anonymous:../../linaro/gcc/config/aarch64/aarch64-builtins.c:113"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1629 nil  gc_unused "anonymous:../../linaro/gcc/config/aarch64/aarch64-builtins.c:381"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1630 nil  gc_unused "anonymous:../../linaro/gcc/config/aarch64/aarch64-builtins.c:390"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1631 nil  gc_unused "aarch64_simd_type_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1632 nil  gc_unused "builtin_decls_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1633 nil  gc_unused "File_Info_Type"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1634 nil  gc_unused "Node"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1635 nil  gc_unused "Flags"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1636 nil  gc_unused "Elist_Header"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1637 nil  gc_unused "Elmt_Item"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1638 nil  gc_unused "String_Entry"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1639 nil  gc_unused "List_Header"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1640 nil  gc_unused "attrib"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1641 nil  gc_unused "incomplete"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1642 nil  gc_unused "subst_pair_d"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1643 nil  gc_unused "variant_desc_d"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1644 nil  gc_used "value_annotation_hasher"
+  (!srcfileloc  "ada/gcc-interface/decl.c" 156)
+  (!fields 0 )
+  nil 1 nil nil )
+ 
+ (!type user_struct 1645 
+  (!type pointer 1646 nil  gc_used
+   (!type already_seen 1645)
+  )
+  gc_pointed_to "hash_table<value_annotation_hasher>"
+  (!srcfileloc  "ada/gcc-interface/decl.c" 156)
+  (!fields 1 
+   (!pair  "value_annotation_hasher"
+    (!type already_seen 1644)
+    (!srcfileloc  "ada/gcc-interface/decl.c" 156)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 1647 
+  (!type pointer 1648 nil  gc_used
+   (!type already_seen 1647)
+  )
+  gc_pointed_to "vec<Entity_Id,va_gc_atomic>"
+  (!srcfileloc  "ada/gcc-interface/decl.c" 162)
+  (!fields 2 
+   (!pair  "va_gc_atomic"
+    (!type undefined 1649 nil  gc_unused "va_gc_atomic"
+     (!srcfileloc  "ada/gcc-interface/decl.c" 162)
+    )
+    (!srcfileloc  "ada/gcc-interface/decl.c" 162)
+    nil )
+   (!pair  "Entity_Id"
+    (!type undefined 1650 nil  gc_unused "Entity_Id"
+     (!srcfileloc  "ada/gcc-interface/decl.c" 162)
+    )
+    (!srcfileloc  "ada/gcc-interface/decl.c" 162)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 1650)
+ 
+ (!type already_seen 1649)
+ 
+ (!type struct 1651 nil  gc_pointed_to "tree_entity_vec_map"
+  (!srcfileloc  "ada/gcc-interface/decl.c" 163)
+  (!fields 2 
+   (!pair  "base"
+    (!type already_seen 941)
+    (!srcfileloc  "ada/gcc-interface/decl.c" 161)
+    nil )
+   (!pair  "to"
+    (!type already_seen 1648)
+    (!srcfileloc  "ada/gcc-interface/decl.c" 162)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  1 nil nil )
+ 
+ (!type struct 1652 nil  gc_used "dummy_type_hasher"
+  (!srcfileloc  "ada/gcc-interface/decl.c" 197)
+  (!fields 0 )
+  nil 1 nil nil )
+ 
+ (!type user_struct 1653 
+  (!type pointer 1654 nil  gc_used
+   (!type already_seen 1653)
+  )
+  gc_pointed_to "hash_table<dummy_type_hasher>"
+  (!srcfileloc  "ada/gcc-interface/decl.c" 197)
+  (!fields 1 
+   (!pair  "dummy_type_hasher"
+    (!type already_seen 1652)
+    (!srcfileloc  "ada/gcc-interface/decl.c" 197)
+    nil )
+  )
+ )
+ 
+ (!type struct 1655 nil  gc_unused "anonymous:../../linaro/gcc/ada/gcc-interface/decl.c:256"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1656 nil  gc_unused "er_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1657 nil  gc_unused "vinfo"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 132)
+ 
+ (!type already_seen 130)
+ 
+ (!type struct 1658 
+  (!type pointer 1659 nil  gc_used
+   (!type already_seen 1658)
+  )
+  gc_pointed_to "stmt_group"
+  (!srcfileloc  "ada/gcc-interface/trans.c" 141)
+  (!fields 4 
+   (!pair  "previous"
+    (!type already_seen 1659)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 137)
+    nil )
+   (!pair  "stmt_list"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 138)
+    nil )
+   (!pair  "block"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 139)
+    nil )
+   (!pair  "cleanups"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 140)
+    nil )
+  )
+  (!options 
+   (!option chain_next string  "%h.previous")
+  )
+  1 nil nil )
+ 
+ (!type struct 1660 
+  (!type pointer 1661 nil  gc_used
+   (!type already_seen 1660)
+  )
+  gc_pointed_to "elab_info"
+  (!srcfileloc  "ada/gcc-interface/trans.c" 157)
+  (!fields 3 
+   (!pair  "next"
+    (!type already_seen 1661)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 154)
+    nil )
+   (!pair  "elab_proc"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 155)
+    nil )
+   (!pair  "gnat_node"
+    (!type already_seen 2)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 156)
+    nil )
+  )
+  (!options 
+   (!option chain_next string  "%h.next")
+  )
+  1 nil nil )
+ 
+ (!type struct 1662 
+  (!type pointer 1663 nil  gc_used
+   (!type already_seen 1662)
+  )
+  gc_pointed_to "range_check_info_d"
+  (!srcfileloc  "ada/gcc-interface/trans.c" 189)
+  (!fields 7 
+   (!pair  "low_bound"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 182)
+    nil )
+   (!pair  "high_bound"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 183)
+    nil )
+   (!pair  "disp"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 184)
+    nil )
+   (!pair  "neg_p"
+    (!type already_seen 2)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 185)
+    nil )
+   (!pair  "type"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 186)
+    nil )
+   (!pair  "invariant_cond"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 187)
+    nil )
+   (!pair  "inserted_cond"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 188)
+    nil )
+  )
+  nil 1 nil nil )
+ 
+ (!type user_struct 1664 
+  (!type pointer 1665 nil  gc_used
+   (!type already_seen 1664)
+  )
+  gc_pointed_to "vec<range_check_info,va_gc>"
+  (!srcfileloc  "ada/gcc-interface/trans.c" 203)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 203)
+    nil )
+   (!pair  "range_check_info"
+    (!type already_seen 1663)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 203)
+    nil )
+  )
+ )
+ 
+ (!type struct 1666 
+  (!type pointer 1667 nil  gc_used
+   (!type already_seen 1666)
+  )
+  gc_pointed_to "loop_info_d"
+  (!srcfileloc  "ada/gcc-interface/trans.c" 204)
+  (!fields 8 
+   (!pair  "stmt"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 196)
+    nil )
+   (!pair  "loop_var"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 197)
+    nil )
+   (!pair  "low_bound"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 198)
+    nil )
+   (!pair  "high_bound"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 199)
+    nil )
+   (!pair  "omp_loop_clauses"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 200)
+    nil )
+   (!pair  "omp_construct_clauses"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 201)
+    nil )
+   (!pair  "omp_code"
+    (!type already_seen 2)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 202)
+    nil )
+   (!pair  "checks"
+    (!type already_seen 1665)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 203)
+    nil )
+  )
+  nil 1 nil nil )
+ 
+ (!type user_struct 1668 
+  (!type pointer 1669 nil  gc_used
+   (!type already_seen 1668)
+  )
+  gc_pointed_to "vec<loop_info,va_gc>"
+  (!srcfileloc  "ada/gcc-interface/trans.c" 210)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 210)
+    nil )
+   (!pair  "loop_info"
+    (!type already_seen 1667)
+    (!srcfileloc  "ada/gcc-interface/trans.c" 210)
+    nil )
+  )
+ )
+ 
+ (!type struct 1670 nil  gc_unused "nrv_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1671 
+  (!type pointer 1672 nil  gc_used
+   (!type already_seen 1671)
+  )
+  gc_pointed_to "gnat_binding_level"
+  (!srcfileloc  "ada/gcc-interface/utils.c" 204)
+  (!fields 3 
+   (!pair  "chain"
+    (!type already_seen 1672)
+    (!srcfileloc  "ada/gcc-interface/utils.c" 198)
+    nil )
+   (!pair  "block"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/utils.c" 200)
+    nil )
+   (!pair  "jmpbuf_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/utils.c" 203)
+    nil )
+  )
+  (!options 
+   (!option chain_next string  "%h.chain")
+  )
+  1 nil nil )
+ 
+ (!type struct 1673 nil  gc_pointed_to "pad_type_hash"
+  (!srcfileloc  "ada/gcc-interface/utils.c" 231)
+  (!fields 2 
+   (!pair  "hash"
+    (!type already_seen 2)
+    (!srcfileloc  "ada/gcc-interface/utils.c" 229)
+    nil )
+   (!pair  "type"
+    (!type already_seen 23)
+    (!srcfileloc  "ada/gcc-interface/utils.c" 230)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  1 nil nil )
+ 
+ (!type struct 1674 nil  gc_used "pad_type_hasher"
+  (!srcfileloc  "ada/gcc-interface/utils.c" 245)
+  (!fields 0 )
+  nil 1 nil nil )
+ 
+ (!type user_struct 1675 
+  (!type pointer 1676 nil  gc_used
+   (!type already_seen 1675)
+  )
+  gc_pointed_to "hash_table<pad_type_hasher>"
+  (!srcfileloc  "ada/gcc-interface/utils.c" 245)
+  (!fields 1 
+   (!pair  "pad_type_hasher"
+    (!type already_seen 1674)
+    (!srcfileloc  "ada/gcc-interface/utils.c" 245)
+    nil )
+  )
+ )
+ 
+ (!type struct 1677 nil  gc_unused "deferred_decl_context_node"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1678 nil  gc_unused "lang_hooks"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 626)
+ 
+ (!type struct 1679 nil  gc_unused "c_expr"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1680 nil  gc_unused "c_typespec"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1681 nil  gc_unused "c_declspecs"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1682 nil  gc_unused "c_arg_tag"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 126)
+ 
+ (!type struct 1683 nil  gc_unused "c_declarator"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1684 nil  gc_unused "c_type_name"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1685 nil  gc_unused "c_parm"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1686 nil  gc_unused "c_enum_contents"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 640)
+ 
+ (!type struct 1687 nil  gc_unused "c_struct_parse_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 107)
+ 
+ (!type already_seen 639)
+ 
+ (!type already_seen 637)
+ 
+ (!type already_seen 636)
+ 
+ (!type already_seen 633)
+ 
+ (!type already_seen 642)
+ 
+ (!type already_seen 646)
+ 
+ (!type already_seen 644)
+ 
+ (!type struct 1688 
+  (!type pointer 1689 nil  gc_used
+   (!type already_seen 1688)
+  )
+  gc_pointed_to "c_inline_static"
+  (!srcfileloc  "c/c-decl.c" 554)
+  (!fields 5 
+   (!pair  "location"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-decl.c" 541)
+    nil )
+   (!pair  "function"
+    (!type already_seen 23)
+    (!srcfileloc  "c/c-decl.c" 544)
+    nil )
+   (!pair  "static_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "c/c-decl.c" 547)
+    nil )
+   (!pair  "type"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-decl.c" 550)
+    nil )
+   (!pair  "next"
+    (!type already_seen 1689)
+    (!srcfileloc  "c/c-decl.c" 553)
+    nil )
+  )
+  (!options 
+   (!option chain_next string  "%h.next")
+  )
+  516 nil nil )
+ 
+ (!type already_seen 542)
+ 
+ (!type struct 1690 nil  gc_unused "fname_var_t"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1691 nil  gc_unused "visibility_flags"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1692 nil  gc_unused "tlist"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1693 nil  gc_unused "tlist_cache"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1694 nil  gc_unused "disabled_builtin"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1695 nil  gc_unused "nonnull_arg_ctx"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 1696 
+  (!type pointer 1697 nil  gc_used
+   (!type already_seen 1696)
+  )
+  gc_pointed_to "vec<const_char_p,va_gc>"
+  (!srcfileloc  "c-family/c-common.c" 5514)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "c-family/c-common.c" 5514)
+    nil )
+   (!pair  "const_char_p"
+    (!type already_seen 11)
+    (!srcfileloc  "c-family/c-common.c" 5514)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 1698 
+  (!type pointer 1699 nil  gc_used
+   (!type already_seen 1698)
+  )
+  gc_pointed_to "vec<tree_gc_vec,va_gc>"
+  (!srcfileloc  "c-family/c-common.c" 7698)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "c-family/c-common.c" 7698)
+    nil )
+   (!pair  "tree_gc_vec"
+    (!type already_seen 96)
+    (!srcfileloc  "c-family/c-common.c" 7698)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 1700 nil  gc_unused "hash_set<char*,false,nofree_string_hash>"
+  (!srcfileloc  "c-family/c-common.c" 8645)
+  (!fields 2 
+   (!pair  "nofree_string_hash"
+    (!type undefined 1701 nil  gc_unused "nofree_string_hash"
+     (!srcfileloc  "c-family/c-common.c" 8645)
+    )
+    (!srcfileloc  "c-family/c-common.c" 8645)
+    nil )
+   (!pair  "false"
+    (!type already_seen 856)
+    (!srcfileloc  "c-family/c-common.c" 8645)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 1701)
+ 
+ (!type user_struct 1702 nil  gc_unused "hash_map<char*,per_file_includes_t*>"
+  (!srcfileloc  "c-family/c-common.c" 8650)
+  (!fields 1 
+   (!pair  "per_file_includes_t"
+    (!type pointer 1703 nil  gc_unused
+     (!type struct 1704 
+      (!type already_seen 1703)
+      gc_unused "per_file_includes_t"nil 
+      (!fields 0 )
+      nil 0 nil nil )
+    )
+    (!srcfileloc  "c-family/c-common.c" 8650)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 1704)
+ 
+ (!type struct 1705 nil  gc_unused "c_common_resword"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 106)
+ 
+ (!type struct 1706 nil  gc_unused "c_fileinfo"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1707 nil  gc_unused "substring_loc"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type undefined 1708 nil  gc_unused "wide_int_bitmask"
+  (!srcfileloc  "c-family/c-common.h" 1137)
+ )
+ 
+ (!type already_seen 670)
+ 
+ (!type struct 1709 nil  gc_used "lazy_hex_fp_value_struct"
+  (!srcfileloc  "c-family/c-cppbuiltin.c" 1592)
+  (!fields 4 
+   (!pair  "hex_str"
+    (!type already_seen 11)
+    (!srcfileloc  "c-family/c-cppbuiltin.c" 1588)
+    nil )
+   (!pair  "mode"
+    (!type already_seen 2)
+    (!srcfileloc  "c-family/c-cppbuiltin.c" 1589)
+    nil )
+   (!pair  "digits"
+    (!type already_seen 2)
+    (!srcfileloc  "c-family/c-cppbuiltin.c" 1590)
+    nil )
+   (!pair  "fp_suffix"
+    (!type already_seen 11)
+    (!srcfileloc  "c-family/c-cppbuiltin.c" 1591)
+    nil )
+  )
+  nil 1540 nil nil )
+ 
+ (!type union 1710 nil  gc_unused "gen_pragma_handler"nil 
+  (!fields 0 )
+  nil 0 nil )
+ 
+ (!type struct 1711 nil  gc_unused "internal_pragma_handler"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1712 
+  (!type pointer 1713 nil  gc_used
+   (!type already_seen 1712)
+  )
+  gc_pointed_to "align_stack"
+  (!srcfileloc  "c-family/c-pragma.c" 46)
+  (!fields 3 
+   (!pair  "alignment"
+    (!type already_seen 2)
+    (!srcfileloc  "c-family/c-pragma.c" 43)
+    nil )
+   (!pair  "id"
+    (!type already_seen 23)
+    (!srcfileloc  "c-family/c-pragma.c" 44)
+    nil )
+   (!pair  "prev"
+    (!type already_seen 1713)
+    (!srcfileloc  "c-family/c-pragma.c" 45)
+    nil )
+  )
+  nil 1548 nil nil )
+ 
+ (!type struct 1714 nil  gc_used "pending_weak"
+  (!srcfileloc  "c-family/c-pragma.c" 238)
+  (!fields 2 
+   (!pair  "name"
+    (!type already_seen 23)
+    (!srcfileloc  "c-family/c-pragma.c" 233)
+    nil )
+   (!pair  "value"
+    (!type already_seen 23)
+    (!srcfileloc  "c-family/c-pragma.c" 234)
+    nil )
+  )
+  nil 1548 nil nil )
+ 
+ (!type user_struct 1715 
+  (!type pointer 1716 nil  gc_used
+   (!type already_seen 1715)
+  )
+  gc_pointed_to "vec<pending_weak,va_gc>"
+  (!srcfileloc  "c-family/c-pragma.c" 238)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "c-family/c-pragma.c" 238)
+    nil )
+   (!pair  "pending_weak"
+    (!type already_seen 1714)
+    (!srcfileloc  "c-family/c-pragma.c" 238)
+    nil )
+  )
+ )
+ 
+ (!type struct 1717 nil  gc_used "pending_redefinition"
+  (!srcfileloc  "c-family/c-pragma.c" 484)
+  (!fields 2 
+   (!pair  "oldname"
+    (!type already_seen 23)
+    (!srcfileloc  "c-family/c-pragma.c" 479)
+    nil )
+   (!pair  "newname"
+    (!type already_seen 23)
+    (!srcfileloc  "c-family/c-pragma.c" 480)
+    nil )
+  )
+  nil 1548 nil nil )
+ 
+ (!type user_struct 1718 
+  (!type pointer 1719 nil  gc_used
+   (!type already_seen 1718)
+  )
+  gc_pointed_to "vec<pending_redefinition,va_gc>"
+  (!srcfileloc  "c-family/c-pragma.c" 484)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "c-family/c-pragma.c" 484)
+    nil )
+   (!pair  "pending_redefinition"
+    (!type already_seen 1717)
+    (!srcfileloc  "c-family/c-pragma.c" 484)
+    nil )
+  )
+ )
+ 
+ (!type struct 1720 
+  (!type pointer 1721 nil  gc_used
+   (!type already_seen 1720)
+  )
+  gc_pointed_to "opt_stack"
+  (!srcfileloc  "c-family/c-pragma.c" 993)
+  (!fields 5 
+   (!pair  "prev"
+    (!type already_seen 1721)
+    (!srcfileloc  "c-family/c-pragma.c" 988)
+    nil )
+   (!pair  "target_binary"
+    (!type already_seen 23)
+    (!srcfileloc  "c-family/c-pragma.c" 989)
+    nil )
+   (!pair  "target_strings"
+    (!type already_seen 23)
+    (!srcfileloc  "c-family/c-pragma.c" 990)
+    nil )
+   (!pair  "optimize_binary"
+    (!type already_seen 23)
+    (!srcfileloc  "c-family/c-pragma.c" 991)
+    nil )
+   (!pair  "optimize_strings"
+    (!type already_seen 23)
+    (!srcfileloc  "c-family/c-pragma.c" 992)
+    nil )
+  )
+  nil 1548 nil nil )
+ 
+ (!type struct 1722 nil  gc_unused "pragma_ns_name"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1723 nil  gc_unused "omp_pragma_def"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1724 nil  gc_unused "function_format_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1725 nil  gc_unused "format_wanted_type"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1726 nil  gc_unused "format_check_results"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1727 nil  gc_unused "format_check_context"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1728 nil  gc_unused "flag_chars_t"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1729 nil  gc_unused "length_modifier"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1730 nil  gc_unused "argument_parser"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1731 nil  gc_unused "indirection_suffix"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1732 nil  gc_unused "range_label_for_format_type_mismatch"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1733 
+  (!type pointer 1734 nil  gc_unused
+   (!type already_seen 1733)
+  )
+  gc_used "c_token"
+  (!srcfileloc  "c/c-parser.c" 168)
+  (!fields 7 
+   (!pair  "type"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-parser.h" 55)
+    nil )
+   (!pair  "id_kind"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-parser.h" 58)
+    nil )
+   (!pair  "keyword"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-parser.h" 61)
+    nil )
+   (!pair  "pragma_kind"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-parser.h" 64)
+    nil )
+   (!pair  "location"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-parser.h" 66)
+    nil )
+   (!pair  "value"
+    (!type already_seen 23)
+    (!srcfileloc  "c/c-parser.h" 68)
+    nil )
+   (!pair  "flags"
+    (!type already_seen 8)
+    (!srcfileloc  "c/c-parser.h" 70)
+    nil )
+  )
+  nil 516 nil nil )
+ 
+ (!type struct 1735 
+  (!type pointer 1736 nil  gc_used
+   (!type already_seen 1735)
+  )
+  gc_pointed_to "c_parser"
+  (!srcfileloc  "c/c-parser.c" 240)
+  (!fields 13 
+   (!pair  "tokens"
+    (!type already_seen 1734)
+    (!srcfileloc  "c/c-parser.c" 168)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "tokens_buf"
+    (!type array 1737 nil  gc_used "4" 
+     (!type already_seen 1733)
+    )
+    (!srcfileloc  "c/c-parser.c" 170)
+    nil )
+   (!pair  "tokens_avail"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-parser.c" 173)
+    nil )
+   (!pair  "error"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-parser.c" 177)
+    nil )
+   (!pair  "in_pragma"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-parser.c" 180)
+    nil )
+   (!pair  "in_if_block"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-parser.c" 182)
+    nil )
+   (!pair  "lex_untranslated_string"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-parser.c" 184)
+    nil )
+   (!pair  "objc_pq_context"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-parser.c" 190)
+    nil )
+   (!pair  "objc_could_be_foreach_context"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-parser.c" 195)
+    nil )
+   (!pair  "objc_need_raw_identifier"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-parser.c" 200)
+    nil )
+   (!pair  "in_transaction"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-parser.c" 203)
+    nil )
+   (!pair  "objc_property_attr_context"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-parser.c" 206)
+    nil )
+   (!pair  "last_token_location"
+    (!type already_seen 2)
+    (!srcfileloc  "c/c-parser.c" 209)
+    nil )
+  )
+  nil 516 nil nil )
+ 
+ (!type struct 1738 nil  gc_unused "token_pair"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1739 nil  gc_unused "matching_paren_traits"
+  (!srcfileloc  "c/c-parser.c" 997)
+  (!fields 0 )
+  nil 516 nil nil )
+ 
+ (!type user_struct 1740 nil  gc_unused "token_pair<matching_paren_traits>"
+  (!srcfileloc  "c/c-parser.c" 997)
+  (!fields 1 
+   (!pair  "matching_paren_traits"
+    (!type already_seen 1739)
+    (!srcfileloc  "c/c-parser.c" 997)
+    nil )
+  )
+ )
+ 
+ (!type struct 1741 nil  gc_unused "matching_brace_traits"
+  (!srcfileloc  "c/c-parser.c" 1015)
+  (!fields 0 )
+  nil 516 nil nil )
+ 
+ (!type user_struct 1742 nil  gc_unused "token_pair<matching_brace_traits>"
+  (!srcfileloc  "c/c-parser.c" 1015)
+  (!fields 1 
+   (!pair  "matching_brace_traits"
+    (!type already_seen 1741)
+    (!srcfileloc  "c/c-parser.c" 1015)
+    nil )
+  )
+ )
+ 
+ (!type struct 1743 nil  gc_unused "oacc_routine_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1744 nil  gc_unused "anonymous:../../linaro/gcc/c/c-parser.c:6937"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1745 nil  gc_unused "c_generic_association"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 124)
+ 
+ (!type already_seen 536)
+ 
+ (!type already_seen 539)
+ 
+ (!type already_seen 118)
+ 
+ (!type already_seen 113)
+ 
+ (!type struct 1746 nil  gc_used "cxx_saved_binding"
+  (!srcfileloc  "cp/cp-tree.h" 1617)
+  (!fields 3 
+   (!pair  "identifier"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/name-lookup.h" 82)
+    nil )
+   (!pair  "binding"
+    (!type already_seen 117)
+    (!srcfileloc  "cp/name-lookup.h" 84)
+    nil )
+   (!pair  "real_type_value"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/name-lookup.h" 85)
+    nil )
+  )
+  nil 1032 nil nil )
+ 
+ (!type already_seen 116)
+ 
+ (!type already_seen 115)
+ 
+ (!type struct 1747 nil  gc_unused "cp_expr"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 653)
+ 
+ (!type already_seen 654)
+ 
+ (!type already_seen 656)
+ 
+ (!type struct 1748 nil  gc_unused "ovl_iterator"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1749 nil  gc_unused "lkp_iterator"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 143)
+ 
+ (!type struct 1750 nil  gc_unused "releasing_vec"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 658)
+ 
+ (!type already_seen 657)
+ 
+ (!type already_seen 71)
+ 
+ (!type already_seen 659)
+ 
+ (!type already_seen 660)
+ 
+ (!type already_seen 661)
+ 
+ (!type already_seen 662)
+ 
+ (!type already_seen 663)
+ 
+ (!type already_seen 664)
+ 
+ (!type already_seen 668)
+ 
+ (!type already_seen 667)
+ 
+ (!type already_seen 665)
+ 
+ (!type already_seen 669)
+ 
+ (!type user_struct 1751 
+  (!type pointer 1752 nil  gc_used
+   (!type already_seen 1751)
+  )
+  gc_pointed_to "vec<cxx_saved_binding,va_gc>"
+  (!srcfileloc  "cp/cp-tree.h" 1617)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "cp/cp-tree.h" 1617)
+    nil )
+   (!pair  "cxx_saved_binding"
+    (!type already_seen 1746)
+    (!srcfileloc  "cp/cp-tree.h" 1617)
+    nil )
+  )
+ )
+ 
+ (!type struct 1753 
+  (!type pointer 1754 nil  gc_used
+   (!type already_seen 1753)
+  )
+  gc_pointed_to "saved_scope"
+  (!srcfileloc  "cp/cp-tree.h" 1660)
+  (!fields 30 
+   (!pair  "old_bindings"
+    (!type already_seen 1752)
+    (!srcfileloc  "cp/cp-tree.h" 1617)
+    nil )
+   (!pair  "old_namespace"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/cp-tree.h" 1618)
+    nil )
+   (!pair  "decl_ns_list"
+    (!type already_seen 96)
+    (!srcfileloc  "cp/cp-tree.h" 1619)
+    nil )
+   (!pair  "class_name"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/cp-tree.h" 1620)
+    nil )
+   (!pair  "class_type"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/cp-tree.h" 1621)
+    nil )
+   (!pair  "access_specifier"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/cp-tree.h" 1622)
+    nil )
+   (!pair  "function_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/cp-tree.h" 1623)
+    nil )
+   (!pair  "lang_base"
+    (!type already_seen 96)
+    (!srcfileloc  "cp/cp-tree.h" 1624)
+    nil )
+   (!pair  "lang_name"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/cp-tree.h" 1625)
+    nil )
+   (!pair  "template_parms"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/cp-tree.h" 1626)
+    nil )
+   (!pair  "x_previous_class_level"
+    (!type already_seen 112)
+    (!srcfileloc  "cp/cp-tree.h" 1627)
+    nil )
+   (!pair  "x_saved_tree"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/cp-tree.h" 1628)
+    nil )
+   (!pair  "x_current_class_ptr"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/cp-tree.h" 1631)
+    nil )
+   (!pair  "x_current_class_ref"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/cp-tree.h" 1632)
+    nil )
+   (!pair  "x_processing_template_decl"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 1634)
+    nil )
+   (!pair  "x_processing_specialization"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 1635)
+    nil )
+   (!pair  "suppress_location_wrappers"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 1636)
+    nil )
+   (!pair  "x_processing_explicit_instantiation"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 1637)
+    nil )
+   (!pair  "need_pop_function_context"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 1638)
+    nil )
+   (!pair  "discarded_stmt"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 1642)
+    nil )
+   (!pair  "unevaluated_operand"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 1644)
+    nil )
+   (!pair  "inhibit_evaluation_warnings"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 1645)
+    nil )
+   (!pair  "noexcept_operand"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 1646)
+    nil )
+   (!pair  "omp_declare_target_attribute"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 1649)
+    nil )
+   (!pair  "ref_temp_count"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 1650)
+    nil )
+   (!pair  "x_stmt_tree"
+    (!type already_seen 107)
+    (!srcfileloc  "cp/cp-tree.h" 1652)
+    nil )
+   (!pair  "class_bindings"
+    (!type already_seen 112)
+    (!srcfileloc  "cp/cp-tree.h" 1654)
+    nil )
+   (!pair  "bindings"
+    (!type already_seen 112)
+    (!srcfileloc  "cp/cp-tree.h" 1655)
+    nil )
+   (!pair  "x_local_specializations"
+    (!type already_seen 441)
+    (!srcfileloc  "cp/cp-tree.h" 1657)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "prev"
+    (!type already_seen 1754)
+    (!srcfileloc  "cp/cp-tree.h" 1659)
+    nil )
+  )
+  nil 1032 nil nil )
+ 
+ (!type struct 1755 nil  gc_unused "processing_template_decl_sentinel"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1756 nil  gc_unused "warning_sentinel"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1757 nil  gc_unused "temp_override"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1758 nil  gc_pointed_to "cxx_int_tree_map"
+  (!srcfileloc  "cp/cp-tree.h" 1778)
+  (!fields 2 
+   (!pair  "uid"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 1776)
+    nil )
+   (!pair  "to"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/cp-tree.h" 1777)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  1032 nil nil )
+ 
+ (!type already_seen 121)
+ 
+ (!type struct 1759 
+  (!type pointer 1760 nil  gc_used
+   (!type already_seen 1759)
+  )
+  gc_pointed_to "named_label_entry"
+  (!srcfileloc  "cp/decl.c" 219)
+  (!fields 12 
+   (!pair  "name"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/decl.c" 188)
+    nil )
+   (!pair  "label_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/decl.c" 190)
+    nil )
+   (!pair  "outer"
+    (!type already_seen 1760)
+    (!srcfileloc  "cp/decl.c" 192)
+    nil )
+   (!pair  "binding_level"
+    (!type already_seen 112)
+    (!srcfileloc  "cp/decl.c" 197)
+    nil )
+   (!pair  "names_in_scope"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/decl.c" 202)
+    nil )
+   (!pair  "bad_decls"
+    (!type already_seen 96)
+    (!srcfileloc  "cp/decl.c" 206)
+    nil )
+   (!pair  "uses"
+    (!type pointer 1761 nil  gc_used
+     (!type struct 1762 
+      (!type already_seen 1761)
+      gc_pointed_to "named_label_use_entry"
+      (!srcfileloc  "cp/decl.c" 209)
+      (!fields 5 
+       (!pair  "next"
+        (!type already_seen 1761)
+        (!srcfileloc  "cp/decl.c" 165)
+        nil )
+       (!pair  "binding_level"
+        (!type already_seen 112)
+        (!srcfileloc  "cp/decl.c" 169)
+        nil )
+       (!pair  "names_in_scope"
+        (!type already_seen 23)
+        (!srcfileloc  "cp/decl.c" 173)
+        nil )
+       (!pair  "o_goto_locus"
+        (!type already_seen 2)
+        (!srcfileloc  "cp/decl.c" 175)
+        nil )
+       (!pair  "in_omp_scope"
+        (!type already_seen 2)
+        (!srcfileloc  "cp/decl.c" 179)
+        nil )
+      )
+      (!options 
+       (!option chain_next string  "%h.next")
+      )
+      1032 nil nil )
+    )
+    (!srcfileloc  "cp/decl.c" 209)
+    nil )
+   (!pair  "in_try_scope"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/decl.c" 214)
+    nil )
+   (!pair  "in_catch_scope"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/decl.c" 215)
+    nil )
+   (!pair  "in_omp_scope"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/decl.c" 216)
+    nil )
+   (!pair  "in_transaction_scope"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/decl.c" 217)
+    nil )
+   (!pair  "in_constexpr_if"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/decl.c" 218)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  1032 nil nil )
+ 
+ (!type already_seen 111)
+ 
+ (!type already_seen 110)
+ 
+ (!type already_seen 120)
+ 
+ (!type already_seen 533)
+ 
+ (!type already_seen 532)
+ 
+ (!type already_seen 65)
+ 
+ (!type already_seen 66)
+ 
+ (!type already_seen 68)
+ 
+ (!type already_seen 69)
+ 
+ (!type already_seen 67)
+ 
+ (!type already_seen 142)
+ 
+ (!type already_seen 140)
+ 
+ (!type already_seen 144)
+ 
+ (!type already_seen 145)
+ 
+ (!type already_seen 64)
+ 
+ (!type struct 1763 nil  gc_unused "aggr_init_expr_arg_iterator"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1764 nil  gc_unused "cp_unevaluated"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1765 nil  gc_unused "cp_evaluated"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1766 nil  gc_unused "local_specialization_stack"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1767 nil  gc_used "ovl_op_info_t"
+  (!srcfileloc  "cp/cp-tree.h" 5719)
+  (!fields 6 
+   (!pair  "identifier"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/cp-tree.h" 5705)
+    nil )
+   (!pair  "name"
+    (!type already_seen 11)
+    (!srcfileloc  "cp/cp-tree.h" 5707)
+    nil )
+   (!pair  "mangled_name"
+    (!type already_seen 11)
+    (!srcfileloc  "cp/cp-tree.h" 5709)
+    nil )
+   (!pair  "tree_code"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 5711)
+    nil )
+   (!pair  "ovl_op_code"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 5713)
+    nil )
+   (!pair  "flags"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 5715)
+    nil )
+  )
+  nil 1032 nil nil )
+ 
+ (!type struct 1768 nil  gc_unused "cp_decl_specifier_seq"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1769 nil  gc_unused "cp_declarator"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1770 nil  gc_unused "cp_parameter_declarator"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1771 
+  (!type pointer 1772 nil  gc_used
+   (!type already_seen 1771)
+  )
+  gc_pointed_to "tinst_level"
+  (!srcfileloc  "cp/pt.c" 9021)
+  (!fields 6 
+   (!pair  "next"
+    (!type already_seen 1772)
+    (!srcfileloc  "cp/cp-tree.h" 5987)
+    nil )
+   (!pair  "tldcl"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/cp-tree.h" 5999)
+    nil )
+   (!pair  "targs"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/cp-tree.h" 5999)
+    nil )
+   (!pair  "locus"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 6044)
+    nil )
+   (!pair  "errors"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 6047)
+    nil )
+   (!pair  "refcount"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/cp-tree.h" 6055)
+    nil )
+  )
+  (!options 
+   (!option chain_next string  "%h.next")
+  )
+  1032 nil nil )
+ 
+ (!type struct 1773 nil  gc_unused "access_failure_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1774 nil  gc_unused "conversion"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 80)
+ 
+ (!type struct 1775 nil  gc_unused "deferring_access_check_sentinel"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1776 nil  gc_unused "diagnostic_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 78)
+ 
+ (!type already_seen 76)
+ 
+ (!type already_seen 74)
+ 
+ (!type already_seen 73)
+ 
+ (!type user_struct 1777 
+  (!type pointer 1778 nil  gc_used
+   (!type already_seen 1777)
+  )
+  gc_pointed_to "vec<cp_token,va_gc>"
+  (!srcfileloc  "cp/parser.h" 86)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "cp/parser.h" 86)
+    nil )
+   (!pair  "cp_token"
+    (!type already_seen 73)
+    (!srcfileloc  "cp/parser.h" 86)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 1779 nil  gc_unused "vec<cp_token_position>"
+  (!srcfileloc  "cp/parser.h" 100)
+  (!fields 1 
+   (!pair  "cp_token_position"
+    (!type already_seen 72)
+    (!srcfileloc  "cp/parser.h" 100)
+    nil )
+  )
+ )
+ 
+ (!type struct 1780 
+  (!type pointer 1781 nil  gc_used
+   (!type already_seen 1780)
+  )
+  gc_pointed_to "cp_lexer"
+  (!srcfileloc  "cp/parser.h" 219)
+  (!fields 7 
+   (!pair  "buffer"
+    (!type already_seen 1778)
+    (!srcfileloc  "cp/parser.h" 86)
+    nil )
+   (!pair  "last_token"
+    (!type already_seen 72)
+    (!srcfileloc  "cp/parser.h" 90)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "next_token"
+    (!type already_seen 72)
+    (!srcfileloc  "cp/parser.h" 94)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "saved_tokens"
+    (!type already_seen 1779)
+    (!srcfileloc  "cp/parser.h" 100)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "next"
+    (!type already_seen 1781)
+    (!srcfileloc  "cp/parser.h" 103)
+    nil )
+   (!pair  "debugging_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 106)
+    nil )
+   (!pair  "in_pragma"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 110)
+    nil )
+  )
+  nil 1032 nil nil )
+ 
+ (!type struct 1782 nil  gc_unused "cp_token_ident"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1783 nil  gc_used "cp_default_arg_entry"
+  (!srcfileloc  "cp/parser.h" 156)
+  (!fields 2 
+   (!pair  "class_type"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/parser.h" 144)
+    nil )
+   (!pair  "decl"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/parser.h" 147)
+    nil )
+  )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1784 
+  (!type pointer 1785 nil  gc_used
+   (!type already_seen 1784)
+  )
+  gc_pointed_to "vec<cp_default_arg_entry,va_gc>"
+  (!srcfileloc  "cp/parser.h" 156)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "cp/parser.h" 156)
+    nil )
+   (!pair  "cp_default_arg_entry"
+    (!type already_seen 1783)
+    (!srcfileloc  "cp/parser.h" 156)
+    nil )
+  )
+ )
+ 
+ (!type struct 1786 nil  gc_used "cp_unparsed_functions_entry"
+  (!srcfileloc  "cp/parser.h" 359)
+  (!fields 4 
+   (!pair  "funs_with_default_args"
+    (!type already_seen 1785)
+    (!srcfileloc  "cp/parser.h" 156)
+    nil )
+   (!pair  "funs_with_definitions"
+    (!type already_seen 96)
+    (!srcfileloc  "cp/parser.h" 160)
+    nil )
+   (!pair  "nsdmis"
+    (!type already_seen 96)
+    (!srcfileloc  "cp/parser.h" 164)
+    nil )
+   (!pair  "classes"
+    (!type already_seen 96)
+    (!srcfileloc  "cp/parser.h" 168)
+    nil )
+  )
+  nil 1032 nil nil )
+ 
+ (!type struct 1787 
+  (!type pointer 1788 nil  gc_used
+   (!type already_seen 1787)
+  )
+  gc_pointed_to "cp_parser_context"
+  (!srcfileloc  "cp/parser.h" 253)
+  (!fields 3 
+   (!pair  "status"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 190)
+    nil )
+   (!pair  "object_type"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/parser.h" 195)
+    nil )
+   (!pair  "next"
+    (!type already_seen 1788)
+    (!srcfileloc  "cp/parser.h" 198)
+    nil )
+  )
+  nil 1032 nil nil )
+ 
+ (!type struct 1789 
+  (!type pointer 1790 nil  gc_unused
+   (!type already_seen 1789)
+  )
+  gc_unused "cp_omp_declare_simd_data"
+  (!srcfileloc  "cp/parser.h" 371)
+  (!fields 0 )
+  nil 1032 nil nil )
+ 
+ (!type struct 1791 
+  (!type pointer 1792 nil  gc_unused
+   (!type already_seen 1791)
+  )
+  gc_unused "cp_oacc_routine_data"
+  (!srcfileloc  "cp/parser.h" 375)
+  (!fields 0 )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1793 
+  (!type pointer 1794 nil  gc_used
+   (!type already_seen 1793)
+  )
+  gc_pointed_to "vec<cp_unparsed_functions_entry,va_gc>"
+  (!srcfileloc  "cp/parser.h" 359)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "cp/parser.h" 359)
+    nil )
+   (!pair  "cp_unparsed_functions_entry"
+    (!type already_seen 1786)
+    (!srcfileloc  "cp/parser.h" 359)
+    nil )
+  )
+ )
+ 
+ (!type struct 1795 
+  (!type pointer 1796 nil  gc_used
+   (!type already_seen 1795)
+  )
+  gc_pointed_to "cp_parser"
+  (!srcfileloc  "cp/parser.c" 40720)
+  (!fields 37 
+   (!pair  "lexer"
+    (!type already_seen 1781)
+    (!srcfileloc  "cp/parser.h" 219)
+    nil )
+   (!pair  "scope"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/parser.h" 234)
+    nil )
+   (!pair  "object_scope"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/parser.h" 241)
+    nil )
+   (!pair  "qualifying_scope"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/parser.h" 242)
+    nil )
+   (!pair  "context"
+    (!type already_seen 1788)
+    (!srcfileloc  "cp/parser.h" 253)
+    nil )
+   (!pair  "allow_gnu_extensions_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 257)
+    nil )
+   (!pair  "greater_than_is_operator_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 264)
+    nil )
+   (!pair  "default_arg_ok_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 269)
+    nil )
+   (!pair  "integral_constant_expression_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 273)
+    nil )
+   (!pair  "allow_non_integral_constant_expression_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 279)
+    nil )
+   (!pair  "non_integral_constant_expression_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 283)
+    nil )
+   (!pair  "local_variables_forbidden_p"
+    (!type already_seen 8)
+    (!srcfileloc  "cp/parser.h" 290)
+    nil )
+   (!pair  "in_unbraced_linkage_specification_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 295)
+    nil )
+   (!pair  "in_declarator_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 299)
+    nil )
+   (!pair  "in_template_argument_list_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 302)
+    nil )
+   (!pair  "in_statement"
+    (!type already_seen 8)
+    (!srcfileloc  "cp/parser.h" 314)
+    nil )
+   (!pair  "in_switch_statement_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 320)
+    nil )
+   (!pair  "in_type_id_in_expr_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 325)
+    nil )
+   (!pair  "translate_strings_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 329)
+    nil )
+   (!pair  "in_function_body"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 333)
+    nil )
+   (!pair  "in_transaction"
+    (!type already_seen 8)
+    (!srcfileloc  "cp/parser.h" 337)
+    nil )
+   (!pair  "colon_corrects_to_scope_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 340)
+    nil )
+   (!pair  "colon_doesnt_start_class_def_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 346)
+    nil )
+   (!pair  "type_definition_forbidden_message"
+    (!type already_seen 11)
+    (!srcfileloc  "cp/parser.h" 351)
+    nil )
+   (!pair  "type_definition_forbidden_message_arg"
+    (!type already_seen 11)
+    (!srcfileloc  "cp/parser.h" 354)
+    nil )
+   (!pair  "unparsed_queues"
+    (!type already_seen 1794)
+    (!srcfileloc  "cp/parser.h" 359)
+    nil )
+   (!pair  "num_classes_being_defined"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 363)
+    nil )
+   (!pair  "num_template_parameter_lists"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 367)
+    nil )
+   (!pair  "omp_declare_simd"
+    (!type already_seen 1790)
+    (!srcfileloc  "cp/parser.h" 371)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "oacc_routine"
+    (!type already_seen 1792)
+    (!srcfileloc  "cp/parser.h" 375)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "auto_is_implicit_function_template_parm_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 379)
+    nil )
+   (!pair  "fully_implicit_function_template_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 384)
+    nil )
+   (!pair  "implicit_template_parms"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/parser.h" 392)
+    nil )
+   (!pair  "implicit_template_scope"
+    (!type already_seen 112)
+    (!srcfileloc  "cp/parser.h" 399)
+    nil )
+   (!pair  "in_result_type_constraint_p"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 404)
+    nil )
+   (!pair  "prevent_constrained_type_specifiers"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 408)
+    nil )
+   (!pair  "innermost_linkage_specification_location"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/parser.h" 412)
+    nil )
+  )
+  nil 1032 nil nil )
+ 
+ (!type struct 1797 nil  gc_unused "rejection_reason"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1798 nil  gc_unused "z_candidate"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1799 nil  gc_unused "candidate_warning"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1800 nil  gc_unused "conversion_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1801 nil  gc_unused "NonPublicField"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1802 nil  gc_unused "NonTrivialField"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1803 
+  (!type pointer 1804 nil  gc_unused
+   (!type already_seen 1803)
+  )
+  gc_unused "class_stack_node"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1805 nil  gc_unused "vtbl_init_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1806 nil  gc_unused "flexmems_t"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1807 nil  gc_unused "abi_tag_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1808 nil  gc_unused "find_final_overrider_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1809 nil  gc_unused "secondary_vptr_vtt_init_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1810 
+  (!type pointer 1811 nil  gc_used
+   (!type already_seen 1810)
+  )
+  gc_pointed_to "constexpr_fundef"
+  (!srcfileloc  "cp/constexpr.c" 976)
+  (!fields 4 
+   (!pair  "decl"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/constexpr.c" 140)
+    nil )
+   (!pair  "body"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/constexpr.c" 141)
+    nil )
+   (!pair  "parms"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/constexpr.c" 142)
+    nil )
+   (!pair  "result"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/constexpr.c" 143)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  1032 nil nil )
+ 
+ (!type struct 1812 nil  gc_used "constexpr_fundef_hasher"
+  (!srcfileloc  "cp/constexpr.c" 155)
+  (!fields 0 )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1813 
+  (!type pointer 1814 nil  gc_used
+   (!type already_seen 1813)
+  )
+  gc_pointed_to "hash_table<constexpr_fundef_hasher>"
+  (!srcfileloc  "cp/constexpr.c" 155)
+  (!fields 1 
+   (!pair  "constexpr_fundef_hasher"
+    (!type already_seen 1812)
+    (!srcfileloc  "cp/constexpr.c" 155)
+    nil )
+  )
+ )
+ 
+ (!type struct 1815 nil  gc_pointed_to "constexpr_call"
+  (!srcfileloc  "cp/constexpr.c" 994)
+  (!fields 5 
+   (!pair  "fundef"
+    (!type already_seen 1811)
+    (!srcfileloc  "cp/constexpr.c" 976)
+    nil )
+   (!pair  "bindings"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/constexpr.c" 983)
+    nil )
+   (!pair  "result"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/constexpr.c" 988)
+    nil )
+   (!pair  "hash"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/constexpr.c" 991)
+    nil )
+   (!pair  "manifestly_const_eval"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/constexpr.c" 993)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  1032 nil nil )
+ 
+ (!type struct 1816 nil  gc_used "constexpr_call_hasher"
+  (!srcfileloc  "cp/constexpr.c" 1052)
+  (!fields 0 )
+  nil 1032 nil nil )
+ 
+ (!type struct 1817 nil  gc_unused "constexpr_ctx"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 1818 
+  (!type pointer 1819 nil  gc_used
+   (!type already_seen 1818)
+  )
+  gc_pointed_to "hash_table<constexpr_call_hasher>"
+  (!srcfileloc  "cp/constexpr.c" 1052)
+  (!fields 1 
+   (!pair  "constexpr_call_hasher"
+    (!type already_seen 1816)
+    (!srcfileloc  "cp/constexpr.c" 1052)
+    nil )
+  )
+ )
+ 
+ (!type struct 1820 nil  gc_unused "check_for_return_continue_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1821 nil  gc_unused "cp_genericize_omp_taskreg"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1822 nil  gc_unused "cp_genericize_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 1762)
+ 
+ (!type struct 1823 nil  gc_used "incomplete_var"
+  (!srcfileloc  "cp/decl.c" 247)
+  (!fields 2 
+   (!pair  "decl"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/decl.c" 242)
+    nil )
+   (!pair  "incomplete_type"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/decl.c" 243)
+    nil )
+  )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1824 
+  (!type pointer 1825 nil  gc_used
+   (!type already_seen 1824)
+  )
+  gc_pointed_to "vec<incomplete_var,va_gc>"
+  (!srcfileloc  "cp/decl.c" 247)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "cp/decl.c" 247)
+    nil )
+   (!pair  "incomplete_var"
+    (!type already_seen 1823)
+    (!srcfileloc  "cp/decl.c" 247)
+    nil )
+  )
+ )
+ 
+ (!type struct 1826 nil  gc_unused "cp_switch"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1827 nil  gc_unused "typename_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1828 nil  gc_used "typename_hasher"
+  (!srcfileloc  "cp/decl.c" 3716)
+  (!fields 0 )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1829 
+  (!type pointer 1830 nil  gc_used
+   (!type already_seen 1829)
+  )
+  gc_pointed_to "hash_table<typename_hasher>"
+  (!srcfileloc  "cp/decl.c" 3716)
+  (!fields 1 
+   (!pair  "typename_hasher"
+    (!type already_seen 1828)
+    (!srcfileloc  "cp/decl.c" 3716)
+    nil )
+  )
+ )
+ 
+ (!type struct 1831 nil  gc_unused "predefined_identifier"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1832 nil  gc_unused "reshape_iter"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1833 
+  (!type pointer 1834 nil  gc_unused
+   (!type already_seen 1833)
+  )
+  gc_unused "priority_info_s"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1835 nil  gc_used "mangled_decl_hash"
+  (!srcfileloc  "cp/decl2.c" 138)
+  (!fields 0 )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1836 
+  (!type pointer 1837 nil  gc_used
+   (!type already_seen 1836)
+  )
+  gc_pointed_to "hash_table<mangled_decl_hash>"
+  (!srcfileloc  "cp/decl2.c" 138)
+  (!fields 1 
+   (!pair  "mangled_decl_hash"
+    (!type already_seen 1835)
+    (!srcfileloc  "cp/decl2.c" 138)
+    nil )
+  )
+ )
+ 
+ (!type struct 1838 nil  gc_used "pending_noexcept"
+  (!srcfileloc  "cp/except.c" 1154)
+  (!fields 2 
+   (!pair  "fn"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/except.c" 1151)
+    nil )
+   (!pair  "loc"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/except.c" 1152)
+    nil )
+  )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1839 
+  (!type pointer 1840 nil  gc_used
+   (!type already_seen 1839)
+  )
+  gc_pointed_to "vec<pending_noexcept,va_gc>"
+  (!srcfileloc  "cp/except.c" 1154)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "cp/except.c" 1154)
+    nil )
+   (!pair  "pending_noexcept"
+    (!type already_seen 1838)
+    (!srcfileloc  "cp/except.c" 1154)
+    nil )
+  )
+ )
+ 
+ (!type struct 1841 nil  gc_used "tree_int"
+  (!srcfileloc  "cp/lambda.c" 1342)
+  (!fields 2 
+   (!pair  "t"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/lambda.c" 1339)
+    nil )
+   (!pair  "i"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/lambda.c" 1340)
+    nil )
+  )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1842 
+  (!type pointer 1843 nil  gc_used
+   (!type already_seen 1842)
+  )
+  gc_pointed_to "vec<tree_int,va_gc>"
+  (!srcfileloc  "cp/lambda.c" 1342)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "cp/lambda.c" 1342)
+    nil )
+   (!pair  "tree_int"
+    (!type already_seen 1841)
+    (!srcfileloc  "cp/lambda.c" 1342)
+    nil )
+  )
+ )
+ 
+ (!type struct 1844 nil  gc_unused "impl_files"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1845 nil  gc_used "conv_type_hasher"
+  (!srcfileloc  "cp/lex.c" 606)
+  (!fields 0 )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1846 
+  (!type pointer 1847 nil  gc_used
+   (!type already_seen 1846)
+  )
+  gc_pointed_to "hash_table<conv_type_hasher>"
+  (!srcfileloc  "cp/lex.c" 606)
+  (!fields 1 
+   (!pair  "conv_type_hasher"
+    (!type already_seen 1845)
+    (!srcfileloc  "cp/lex.c" 606)
+    nil )
+  )
+ )
+ 
+ (!type struct 1848 nil  gc_used "globals"
+  (!srcfileloc  "cp/mangle.c" 122)
+  (!fields 5 
+   (!pair  "substitutions"
+    (!type already_seen 96)
+    (!srcfileloc  "cp/mangle.c" 106)
+    nil )
+   (!pair  "entity"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/mangle.c" 109)
+    (!options 
+     (!option skip string  "")
+    )
+   )
+   (!pair  "parm_depth"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/mangle.c" 112)
+    nil )
+   (!pair  "need_abi_warning"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/mangle.c" 116)
+    nil )
+   (!pair  "need_cxx17_warning"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/mangle.c" 119)
+    nil )
+  )
+  nil 1032 nil nil )
+ 
+ (!type struct 1849 nil  gc_unused "name_lookup"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1850 nil  gc_unused "namespace_limit_reached"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1851 nil  gc_unused "show_candidate_location"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1852 nil  gc_unused "suggest_alternatives"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1853 nil  gc_unused "namespace_hints"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1854 nil  gc_unused "std_name_hint"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1855 nil  gc_unused "missing_std_header"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1856 nil  gc_unused "macro_use_before_def"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1857 nil  gc_unused "type_id_in_expr_sentinel"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1858 nil  gc_unused "saved_token_sentinel"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1859 nil  gc_unused "cp_parser_binary_operations_map_node"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1860 nil  gc_unused "cp_parser_expression_stack_entry"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1861 nil  gc_unused "tentative_firewall"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1862 nil  gc_unused "scope_sentinel"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1863 
+  (!type pointer 1864 nil  gc_used
+   (!type already_seen 1863)
+  )
+  gc_pointed_to "pending_template"
+  (!srcfileloc  "cp/pt.c" 9030)
+  (!fields 2 
+   (!pair  "next"
+    (!type already_seen 1864)
+    (!srcfileloc  "cp/pt.c" 55)
+    nil )
+   (!pair  "tinst"
+    (!type already_seen 1772)
+    (!srcfileloc  "cp/pt.c" 56)
+    nil )
+  )
+  (!options 
+   (!option chain_next string  "%h.next")
+  )
+  1032 nil nil )
+ 
+ (!type struct 1865 nil  gc_pointed_to "spec_entry"
+  (!srcfileloc  "cp/pt.c" 105)
+  (!fields 3 
+   (!pair  "tmpl"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/pt.c" 102)
+    nil )
+   (!pair  "args"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/pt.c" 103)
+    nil )
+   (!pair  "spec"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/pt.c" 104)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  1032 nil nil )
+ 
+ (!type struct 1866 nil  gc_used "spec_hasher"
+  (!srcfileloc  "cp/pt.c" 113)
+  (!fields 0 )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1867 
+  (!type pointer 1868 nil  gc_used
+   (!type already_seen 1867)
+  )
+  gc_pointed_to "hash_table<spec_hasher>"
+  (!srcfileloc  "cp/pt.c" 113)
+  (!fields 1 
+   (!pair  "spec_hasher"
+    (!type already_seen 1866)
+    (!srcfileloc  "cp/pt.c" 113)
+    nil )
+  )
+ )
+ 
+ (!type struct 1869 nil  gc_unused "find_parameter_pack_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1870 nil  gc_unused "template_parm_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1871 nil  gc_unused "uses_all_template_parms_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1872 nil  gc_unused "freelist"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1873 nil  gc_unused "pair_fn_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1874 nil  gc_unused "el_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1875 nil  gc_unused "auto_hash"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1876 nil  gc_pointed_to "constr_entry"
+  (!srcfileloc  "cp/pt.c" 27968)
+  (!fields 2 
+   (!pair  "decl"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/pt.c" 27966)
+    nil )
+   (!pair  "ci"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/pt.c" 27967)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  1032 nil nil )
+ 
+ (!type struct 1877 nil  gc_used "constr_hasher"
+  (!srcfileloc  "cp/pt.c" 27991)
+  (!fields 0 )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1878 
+  (!type pointer 1879 nil  gc_used
+   (!type already_seen 1878)
+  )
+  gc_pointed_to "hash_table<constr_hasher>"
+  (!srcfileloc  "cp/pt.c" 27991)
+  (!fields 1 
+   (!pair  "constr_hasher"
+    (!type already_seen 1877)
+    (!srcfileloc  "cp/pt.c" 27991)
+    nil )
+  )
+ )
+ 
+ (!type struct 1880 nil  gc_pointed_to "constraint_sat_entry"
+  (!srcfileloc  "cp/pt.c" 28058)
+  (!fields 3 
+   (!pair  "ci"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/pt.c" 28055)
+    nil )
+   (!pair  "args"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/pt.c" 28056)
+    nil )
+   (!pair  "result"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/pt.c" 28057)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  1032 nil nil )
+ 
+ (!type struct 1881 nil  gc_used "constraint_sat_hasher"
+  (!srcfileloc  "cp/pt.c" 28103)
+  (!fields 0 )
+  nil 1032 nil nil )
+ 
+ (!type struct 1882 nil  gc_pointed_to "concept_spec_entry"
+  (!srcfileloc  "cp/pt.c" 28083)
+  (!fields 3 
+   (!pair  "tmpl"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/pt.c" 28080)
+    nil )
+   (!pair  "args"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/pt.c" 28081)
+    nil )
+   (!pair  "result"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/pt.c" 28082)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  1032 nil nil )
+ 
+ (!type struct 1883 nil  gc_used "concept_spec_hasher"
+  (!srcfileloc  "cp/pt.c" 28104)
+  (!fields 0 )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1884 
+  (!type pointer 1885 nil  gc_used
+   (!type already_seen 1884)
+  )
+  gc_pointed_to "hash_table<constraint_sat_hasher>"
+  (!srcfileloc  "cp/pt.c" 28103)
+  (!fields 1 
+   (!pair  "constraint_sat_hasher"
+    (!type already_seen 1881)
+    (!srcfileloc  "cp/pt.c" 28103)
+    nil )
+  )
+ )
+ 
+ (!type user_struct 1886 
+  (!type pointer 1887 nil  gc_used
+   (!type already_seen 1886)
+  )
+  gc_pointed_to "hash_table<concept_spec_hasher>"
+  (!srcfileloc  "cp/pt.c" 28104)
+  (!fields 1 
+   (!pair  "concept_spec_hasher"
+    (!type already_seen 1883)
+    (!srcfileloc  "cp/pt.c" 28104)
+    nil )
+  )
+ )
+ 
+ (!type struct 1888 nil  gc_pointed_to "subsumption_entry"
+  (!srcfileloc  "cp/pt.c" 28226)
+  (!fields 3 
+   (!pair  "t1"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/pt.c" 28223)
+    nil )
+   (!pair  "t2"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/pt.c" 28224)
+    nil )
+   (!pair  "result"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/pt.c" 28225)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  1032 nil nil )
+ 
+ (!type struct 1889 nil  gc_used "subsumption_hasher"
+  (!srcfileloc  "cp/pt.c" 28246)
+  (!fields 0 )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1890 
+  (!type pointer 1891 nil  gc_used
+   (!type already_seen 1890)
+  )
+  gc_pointed_to "hash_table<subsumption_hasher>"
+  (!srcfileloc  "cp/pt.c" 28246)
+  (!fields 1 
+   (!pair  "subsumption_hasher"
+    (!type already_seen 1889)
+    (!srcfileloc  "cp/pt.c" 28246)
+    nil )
+  )
+ )
+ 
+ (!type struct 1892 nil  gc_used "tinfo_s"
+  (!srcfileloc  "cp/rtti.c" 122)
+  (!fields 3 
+   (!pair  "type"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/rtti.c" 65)
+    nil )
+   (!pair  "vtable"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/rtti.c" 67)
+    nil )
+   (!pair  "name"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/rtti.c" 70)
+    nil )
+  )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1893 
+  (!type pointer 1894 nil  gc_used
+   (!type already_seen 1893)
+  )
+  gc_pointed_to "vec<tinfo_s,va_gc>"
+  (!srcfileloc  "cp/rtti.c" 122)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "cp/rtti.c" 122)
+    nil )
+   (!pair  "tinfo_s"
+    (!type already_seen 1892)
+    (!srcfileloc  "cp/rtti.c" 122)
+    nil )
+  )
+ )
+ 
+ (!type struct 1895 nil  gc_used "deferred_access"
+  (!srcfileloc  "cp/semantics.c" 138)
+  (!fields 2 
+   (!pair  "deferred_access_checks"
+    (!type already_seen 77)
+    (!srcfileloc  "cp/semantics.c" 130)
+    nil )
+   (!pair  "deferring_access_checks_kind"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/semantics.c" 133)
+    nil )
+  )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1896 
+  (!type pointer 1897 nil  gc_used
+   (!type already_seen 1896)
+  )
+  gc_pointed_to "vec<deferred_access,va_gc>"
+  (!srcfileloc  "cp/semantics.c" 138)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "cp/semantics.c" 138)
+    nil )
+   (!pair  "deferred_access"
+    (!type already_seen 1895)
+    (!srcfileloc  "cp/semantics.c" 138)
+    nil )
+  )
+ )
+ 
+ (!type struct 1898 nil  gc_unused "cp_check_omp_declare_reduction_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1899 nil  gc_unused "cplus_array_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1900 nil  gc_used "cplus_array_hasher"
+  (!srcfileloc  "cp/tree.c" 939)
+  (!fields 0 )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1901 
+  (!type pointer 1902 nil  gc_used
+   (!type already_seen 1901)
+  )
+  gc_pointed_to "hash_table<cplus_array_hasher>"
+  (!srcfileloc  "cp/tree.c" 939)
+  (!fields 1 
+   (!pair  "cplus_array_hasher"
+    (!type already_seen 1900)
+    (!srcfileloc  "cp/tree.c" 939)
+    nil )
+  )
+ )
+ 
+ (!type struct 1903 nil  gc_unused "list_proxy"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1904 nil  gc_used "list_hasher"
+  (!srcfileloc  "cp/tree.c" 1993)
+  (!fields 0 )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1905 
+  (!type pointer 1906 nil  gc_used
+   (!type already_seen 1905)
+  )
+  gc_pointed_to "hash_table<list_hasher>"
+  (!srcfileloc  "cp/tree.c" 1993)
+  (!fields 1 
+   (!pair  "list_hasher"
+    (!type already_seen 1904)
+    (!srcfileloc  "cp/tree.c" 1993)
+    nil )
+  )
+ )
+ 
+ (!type struct 1907 nil  gc_unused "bot_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1908 nil  gc_unused "replace_placeholders_t"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1909 
+  (!type pointer 1910 nil  gc_used
+   (!type already_seen 1909)
+  )
+  gc_pointed_to "pending_abstract_type"
+  (!srcfileloc  "cp/typeck2.c" 146)
+  (!fields 5 
+   (!pair  "decl"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/typeck2.c" 132)
+    nil )
+   (!pair  "type"
+    (!type already_seen 23)
+    (!srcfileloc  "cp/typeck2.c" 135)
+    nil )
+   (!pair  "use"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/typeck2.c" 138)
+    nil )
+   (!pair  "locus"
+    (!type already_seen 2)
+    (!srcfileloc  "cp/typeck2.c" 142)
+    nil )
+   (!pair  "next"
+    (!type already_seen 1910)
+    (!srcfileloc  "cp/typeck2.c" 145)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+   (!option chain_next string  "%h.next")
+  )
+  1032 nil nil )
+ 
+ (!type struct 1911 nil  gc_used "abstract_type_hasher"
+  (!srcfileloc  "cp/typeck2.c" 177)
+  (!fields 0 )
+  nil 1032 nil nil )
+ 
+ (!type user_struct 1912 
+  (!type pointer 1913 nil  gc_used
+   (!type already_seen 1912)
+  )
+  gc_pointed_to "hash_table<abstract_type_hasher>"
+  (!srcfileloc  "cp/typeck2.c" 177)
+  (!fields 1 
+   (!pair  "abstract_type_hasher"
+    (!type already_seen 1911)
+    (!srcfileloc  "cp/typeck2.c" 177)
+    nil )
+  )
+ )
+ 
+ (!type struct 1914 nil  gc_unused "work_node"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1915 nil  gc_unused "vtv_graph_node"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1916 nil  gc_unused "Dsymbol"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 62)
+ 
+ (!type struct 1917 nil  gc_unused "AggregateDeclaration"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1918 nil  gc_unused "ClassDeclaration"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1919 nil  gc_unused "EnumDeclaration"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 93)
+ 
+ (!type struct 1920 nil  gc_unused "StructDeclaration"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1921 nil  gc_unused "TypeInfoDeclaration"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1922 nil  gc_unused "VarDeclaration"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1923 nil  gc_unused "UserAttributeDeclaration"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1924 
+  (!type pointer 1925 nil  gc_unused
+   (!type already_seen 1924)
+  )
+  gc_unused "Expression"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1926 nil  gc_unused "ClassReferenceExp"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 95)
+ 
+ (!type already_seen 102)
+ 
+ (!type already_seen 529)
+ 
+ (!type struct 1927 nil  gc_unused "TypeFunction"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1928 nil  gc_unused "Parameter"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1929 nil  gc_unused "BaseClass"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1930 nil  gc_unused "Scope"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1931 nil  gc_unused "Loc"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type user_struct 1932 nil  gc_unused "Array<Expression*>"
+  (!srcfileloc  "d/d-tree.h" 45)
+  (!fields 1 
+   (!pair  "Expression"
+    (!type already_seen 1925)
+    (!srcfileloc  "d/d-tree.h" 45)
+    nil )
+  )
+ )
+ 
+ (!type already_seen 88)
+ 
+ (!type already_seen 104)
+ 
+ (!type already_seen 100)
+ 
+ (!type already_seen 651)
+ 
+ (!type already_seen 99)
+ 
+ (!type struct 1933 nil  gc_unused "builtin_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1934 nil  gc_unused "d_option_data"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1935 nil  gc_unused "module_info"
+  (!srcfileloc  "d/modules.cc" 87)
+  (!fields 7 
+   (!pair  "ctors"
+    (!type already_seen 96)
+    (!srcfileloc  "d/modules.cc" 78)
+    nil )
+   (!pair  "dtors"
+    (!type already_seen 96)
+    (!srcfileloc  "d/modules.cc" 79)
+    nil )
+   (!pair  "ctorgates"
+    (!type already_seen 96)
+    (!srcfileloc  "d/modules.cc" 80)
+    nil )
+   (!pair  "sharedctors"
+    (!type already_seen 96)
+    (!srcfileloc  "d/modules.cc" 82)
+    nil )
+   (!pair  "shareddtors"
+    (!type already_seen 96)
+    (!srcfileloc  "d/modules.cc" 83)
+    nil )
+   (!pair  "sharedctorgates"
+    (!type already_seen 96)
+    (!srcfileloc  "d/modules.cc" 84)
+    nil )
+   (!pair  "unitTests"
+    (!type already_seen 96)
+    (!srcfileloc  "d/modules.cc" 86)
+    nil )
+  )
+  nil 16 nil nil )
+ 
+ (!type struct 1936 nil  gc_unused "TypeInfoVisitor"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1937 nil  gc_unused "TypeInfoDeclVisitor"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1938 nil  gc_unused "SpeculativeTypeVisitor"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1939 nil  gc_used "module_hasher"
+  (!srcfileloc  "fortran/trans-decl.c" 4962)
+  (!fields 0 )
+  nil 32 nil nil )
+ 
+ (!type user_struct 1940 
+  (!type pointer 1941 nil  gc_used
+   (!type already_seen 1940)
+  )
+  gc_pointed_to "hash_table<module_hasher>"
+  (!srcfileloc  "fortran/trans-decl.c" 4962)
+  (!fields 1 
+   (!pair  "module_hasher"
+    (!type already_seen 1939)
+    (!srcfileloc  "fortran/trans-decl.c" 4962)
+    nil )
+  )
+ )
+ 
+ (!type struct 1942 nil  gc_pointed_to "module_htab_entry"
+  (!srcfileloc  "fortran/trans.h" 668)
+  (!fields 3 
+   (!pair  "name"
+    (!type already_seen 11)
+    (!srcfileloc  "fortran/trans.h" 665)
+    nil )
+   (!pair  "namespace_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "fortran/trans.h" 666)
+    nil )
+   (!pair  "decls"
+    (!type pointer 1943 nil  gc_used
+     (!type user_struct 1944 
+      (!type already_seen 1943)
+      gc_pointed_to "hash_table<module_decl_hasher>"
+      (!srcfileloc  "fortran/trans.h" 667)
+      (!fields 1 
+       (!pair  "module_decl_hasher"
+        (!type struct 1945 nil  gc_used "module_decl_hasher"
+         (!srcfileloc  "fortran/trans.h" 667)
+         (!fields 0 )
+         nil 32 nil nil )
+        (!srcfileloc  "fortran/trans.h" 667)
+        nil )
+      )
+     )
+    )
+    (!srcfileloc  "fortran/trans.h" 667)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  32 nil nil )
+ 
+ (!type struct 1946 nil  gc_used "gfc_intrinsic_map_t"
+  (!srcfileloc  "fortran/trans-intrinsic.c" 84)
+  (!fields 19 
+   (!pair  "id"
+    (!type already_seen 2)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 50)
+    nil )
+   (!pair  "float_built_in"
+    (!type already_seen 2)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 54)
+    nil )
+   (!pair  "double_built_in"
+    (!type already_seen 2)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 55)
+    nil )
+   (!pair  "long_double_built_in"
+    (!type already_seen 2)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 56)
+    nil )
+   (!pair  "complex_float_built_in"
+    (!type already_seen 2)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 57)
+    nil )
+   (!pair  "complex_double_built_in"
+    (!type already_seen 2)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 58)
+    nil )
+   (!pair  "complex_long_double_built_in"
+    (!type already_seen 2)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 59)
+    nil )
+   (!pair  "libm_name"
+    (!type already_seen 2)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 64)
+    nil )
+   (!pair  "complex_available"
+    (!type already_seen 2)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 67)
+    nil )
+   (!pair  "is_constant"
+    (!type already_seen 2)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 70)
+    nil )
+   (!pair  "name"
+    (!type already_seen 11)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 73)
+    nil )
+   (!pair  "real4_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 76)
+    nil )
+   (!pair  "real8_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 77)
+    nil )
+   (!pair  "real10_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 78)
+    nil )
+   (!pair  "real16_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 79)
+    nil )
+   (!pair  "complex4_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 80)
+    nil )
+   (!pair  "complex8_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 81)
+    nil )
+   (!pair  "complex10_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 82)
+    nil )
+   (!pair  "complex16_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "fortran/trans-intrinsic.c" 83)
+    nil )
+  )
+  nil 32 nil nil )
+ 
+ (!type struct 1947 nil  gc_used "gfc_st_parameter_field"
+  (!srcfileloc  "fortran/trans-io.c" 73)
+  (!fields 6 
+   (!pair  "name"
+    (!type already_seen 11)
+    (!srcfileloc  "fortran/trans-io.c" 67)
+    nil )
+   (!pair  "mask"
+    (!type already_seen 2)
+    (!srcfileloc  "fortran/trans-io.c" 68)
+    nil )
+   (!pair  "param_type"
+    (!type already_seen 2)
+    (!srcfileloc  "fortran/trans-io.c" 69)
+    nil )
+   (!pair  "type"
+    (!type already_seen 2)
+    (!srcfileloc  "fortran/trans-io.c" 70)
+    nil )
+   (!pair  "field"
+    (!type already_seen 23)
+    (!srcfileloc  "fortran/trans-io.c" 71)
+    nil )
+   (!pair  "field_len"
+    (!type already_seen 23)
+    (!srcfileloc  "fortran/trans-io.c" 72)
+    nil )
+  )
+  nil 32 nil nil )
+ 
+ (!type struct 1948 nil  gc_used "gfc_st_parameter"
+  (!srcfileloc  "fortran/trans-io.c" 79)
+  (!fields 2 
+   (!pair  "name"
+    (!type already_seen 11)
+    (!srcfileloc  "fortran/trans-io.c" 77)
+    nil )
+   (!pair  "type"
+    (!type already_seen 23)
+    (!srcfileloc  "fortran/trans-io.c" 78)
+    nil )
+  )
+  nil 32 nil nil )
+ 
+ (!type struct 1949 nil  gc_unused "iter_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1950 nil  gc_unused "forall_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1951 nil  gc_unused "anonymous:../../linaro/gcc/fortran/trans.h:33"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1952 nil  gc_unused "gfc_se"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1953 nil  gc_unused "gfc_array_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1954 nil  gc_unused "gfc_ss_info"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1955 nil  gc_unused "gfc_ss"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1956 nil  gc_unused "gfc_loopinfo"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1957 nil  gc_unused "anonymous:../../linaro/gcc/fortran/trans.h:390"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1958 nil  gc_unused "anonymous:../../linaro/gcc/fortran/trans.h:402"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type already_seen 1945)
+ 
+ (!type already_seen 1944)
+ 
+ (!type struct 1959 nil  gc_unused "gimplify_omp_ctx"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1960 nil  gc_used "gfc_powdecl_list"
+  (!srcfileloc  "fortran/trans.h" 865)
+  (!fields 3 
+   (!pair  "integer"
+    (!type already_seen 23)
+    (!srcfileloc  "fortran/trans.h" 862)
+    nil )
+   (!pair  "real"
+    (!type already_seen 23)
+    (!srcfileloc  "fortran/trans.h" 863)
+    nil )
+   (!pair  "cmplx"
+    (!type already_seen 23)
+    (!srcfileloc  "fortran/trans.h" 864)
+    nil )
+  )
+  nil 32 nil nil )
+ 
+ (!type struct 1961 nil  gc_unused "gfc_interface_sym_mapping"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1962 nil  gc_unused "gfc_interface_mapping"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1963 nil  gc_unused "go_create_gogo_args"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1964 nil  gc_unused "stat"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1965 nil  gc_unused "Linemap"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1966 nil  gc_unused "Backend"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1967 nil  gc_unused "ggc_root_tab"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1968 nil  gc_unused "lto_section_slot"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1969 nil  gc_unused "tree_scc"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1970 nil  gc_unused "tree_scc_hasher"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1971 nil  gc_unused "streamer_tree_cache_d"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1972 nil  gc_unused "file_data_list"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1973 nil  gc_unused "lto_section_list"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1974 nil  gc_unused "lto_file"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1975 
+  (!type pointer 1976 nil  gc_used
+   (!type already_seen 1975)
+  )
+  gc_pointed_to "objc_map_private"
+  (!srcfileloc  "objc/objc-map.h" 79)
+  (!fields 7 
+   (!pair  "number_of_slots"
+    (!type already_seen 2)
+    (!srcfileloc  "objc/objc-map.h" 54)
+    nil )
+   (!pair  "mask"
+    (!type already_seen 2)
+    (!srcfileloc  "objc/objc-map.h" 57)
+    nil )
+   (!pair  "number_of_non_empty_slots"
+    (!type already_seen 2)
+    (!srcfileloc  "objc/objc-map.h" 62)
+    nil )
+   (!pair  "max_number_of_non_empty_slots"
+    (!type already_seen 2)
+    (!srcfileloc  "objc/objc-map.h" 68)
+    nil )
+   (!pair  "maximum_load_factor"
+    (!type already_seen 2)
+    (!srcfileloc  "objc/objc-map.h" 71)
+    nil )
+   (!pair  "slots"
+    (!type already_seen 24)
+    (!srcfileloc  "objc/objc-map.h" 74)
+    (!options 
+     (!option length string  "%h.number_of_slots")
+    )
+   )
+   (!pair  "values"
+    (!type already_seen 24)
+    (!srcfileloc  "objc/objc-map.h" 78)
+    (!options 
+     (!option length string  "%h.number_of_slots")
+    )
+   )
+  )
+  nil 1536 nil nil )
+ 
+ (!type struct 1977 
+  (!type pointer 1978 
+   (!type pointer 1979 nil  gc_used
+    (!type already_seen 1978)
+   )
+   gc_pointed_to
+   (!type already_seen 1977)
+  )
+  gc_pointed_to "hashed_entry"
+  (!srcfileloc  "objc/objc-act.h" 271)
+  (!fields 3 
+   (!pair  "list"
+    (!type pointer 1980 nil  gc_used
+     (!type struct 1981 
+      (!type already_seen 1980)
+      gc_pointed_to "hashed_attribute"
+      (!srcfileloc  "objc/objc-act.h" 265)
+      (!fields 2 
+       (!pair  "next"
+        (!type already_seen 1980)
+        (!srcfileloc  "objc/objc-act.h" 263)
+        nil )
+       (!pair  "value"
+        (!type already_seen 23)
+        (!srcfileloc  "objc/objc-act.h" 264)
+        nil )
+      )
+      nil 1536 nil nil )
+    )
+    (!srcfileloc  "objc/objc-act.h" 268)
+    nil )
+   (!pair  "next"
+    (!type already_seen 1978)
+    (!srcfileloc  "objc/objc-act.h" 269)
+    nil )
+   (!pair  "key"
+    (!type already_seen 23)
+    (!srcfileloc  "objc/objc-act.h" 270)
+    nil )
+  )
+  nil 1536 nil nil )
+ 
+ (!type already_seen 1981)
+ 
+ (!type struct 1982 
+  (!type pointer 1983 nil  gc_used
+   (!type already_seen 1982)
+  )
+  gc_pointed_to "imp_entry"
+  (!srcfileloc  "objc/objc-act.h" 288)
+  (!fields 6 
+   (!pair  "next"
+    (!type already_seen 1983)
+    (!srcfileloc  "objc/objc-act.h" 282)
+    nil )
+   (!pair  "imp_context"
+    (!type already_seen 23)
+    (!srcfileloc  "objc/objc-act.h" 283)
+    nil )
+   (!pair  "imp_template"
+    (!type already_seen 23)
+    (!srcfileloc  "objc/objc-act.h" 284)
+    nil )
+   (!pair  "class_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "objc/objc-act.h" 285)
+    nil )
+   (!pair  "meta_decl"
+    (!type already_seen 23)
+    (!srcfileloc  "objc/objc-act.h" 286)
+    nil )
+   (!pair  "has_cxx_cdtors"
+    (!type already_seen 2)
+    (!srcfileloc  "objc/objc-act.h" 287)
+    nil )
+  )
+  nil 1536 nil nil )
+ 
+ (!type struct 1984 nil  gc_unused "objc_try_context"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1985 nil  gc_pointed_to "string_descriptor"
+  (!srcfileloc  "objc/objc-act.c" 252)
+  (!fields 2 
+   (!pair  "literal"
+    (!type already_seen 23)
+    (!srcfileloc  "objc/objc-act.c" 248)
+    nil )
+   (!pair  "constructor"
+    (!type already_seen 23)
+    (!srcfileloc  "objc/objc-act.c" 251)
+    nil )
+  )
+  (!options 
+   (!option for_user string  "")
+  )
+  1536 nil nil )
+ 
+ (!type struct 1986 nil  gc_used "objc_string_hasher"
+  (!srcfileloc  "objc/objc-act.c" 260)
+  (!fields 0 )
+  nil 1536 nil nil )
+ 
+ (!type user_struct 1987 
+  (!type pointer 1988 nil  gc_used
+   (!type already_seen 1987)
+  )
+  gc_pointed_to "hash_table<objc_string_hasher>"
+  (!srcfileloc  "objc/objc-act.c" 260)
+  (!fields 1 
+   (!pair  "objc_string_hasher"
+    (!type already_seen 1986)
+    (!srcfileloc  "objc/objc-act.c" 260)
+    nil )
+  )
+ )
+ 
+ (!type struct 1989 nil  gc_unused "decl_name_hash"nil 
+  (!fields 0 )
+  nil 0 nil nil )
+ 
+ (!type struct 1990 nil  gc_used "ident_data_tuple"
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1039)
+  (!fields 2 
+   (!pair  "ident"
+    (!type already_seen 23)
+    (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1015)
+    nil )
+   (!pair  "data"
+    (!type already_seen 23)
+    (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1016)
+    nil )
+  )
+  nil 1536 nil nil )
+ 
+ (!type user_struct 1991 
+  (!type pointer 1992 nil  gc_used
+   (!type already_seen 1991)
+  )
+  gc_pointed_to "vec<ident_data_tuple,va_gc>"
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1039)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1039)
+    nil )
+   (!pair  "ident_data_tuple"
+    (!type already_seen 1990)
+    (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1039)
+    nil )
+  )
+ )
+ 
+ (!type struct 1993 nil  gc_used "msgref_entry"
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1204)
+  (!fields 3 
+   (!pair  "func"
+    (!type already_seen 23)
+    (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1199)
+    nil )
+   (!pair  "selname"
+    (!type already_seen 23)
+    (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1200)
+    nil )
+   (!pair  "refdecl"
+    (!type already_seen 23)
+    (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1201)
+    nil )
+  )
+  nil 1536 nil nil )
+ 
+ (!type user_struct 1994 
+  (!type pointer 1995 nil  gc_used
+   (!type already_seen 1994)
+  )
+  gc_pointed_to "vec<msgref_entry,va_gc>"
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1204)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1204)
+    nil )
+   (!pair  "msgref_entry"
+    (!type already_seen 1993)
+    (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1204)
+    nil )
+  )
+ )
+ 
+ (!type struct 1996 nil  gc_used "prot_list_entry"
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1258)
+  (!fields 2 
+   (!pair  "id"
+    (!type already_seen 23)
+    (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1255)
+    nil )
+   (!pair  "refdecl"
+    (!type already_seen 23)
+    (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1256)
+    nil )
+  )
+  nil 1536 nil nil )
+ 
+ (!type user_struct 1997 
+  (!type pointer 1998 nil  gc_used
+   (!type already_seen 1997)
+  )
+  gc_pointed_to "vec<prot_list_entry,va_gc>"
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1258)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1258)
+    nil )
+   (!pair  "prot_list_entry"
+    (!type already_seen 1996)
+    (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1258)
+    nil )
+  )
+ )
+ 
+ (!type struct 1999 nil  gc_used "ivarref_entry"
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 2764)
+  (!fields 2 
+   (!pair  "decl"
+    (!type already_seen 23)
+    (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 2760)
+    nil )
+   (!pair  "offset"
+    (!type already_seen 23)
+    (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 2761)
+    nil )
+  )
+  nil 1536 nil nil )
+ 
+ (!type user_struct 2000 
+  (!type pointer 2001 nil  gc_used
+   (!type already_seen 2000)
+  )
+  gc_pointed_to "vec<ivarref_entry,va_gc>"
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 2764)
+  (!fields 2 
+   (!pair  "va_gc"
+    (!type already_seen 79)
+    (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 2764)
+    nil )
+   (!pair  "ivarref_entry"
+    (!type already_seen 1999)
+    (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 2764)
+    nil )
+  )
+ )
+)
+(!typedefs 766
+ (!pair  "ivarref_entry"
+  (!type already_seen 1999)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 2764)
+  nil )
+ (!pair  "vec<ivarref_entry,va_gc>"
+  (!type already_seen 2000)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 2764)
+  nil )
+ (!pair  "prot_list_entry"
+  (!type already_seen 1996)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1258)
+  nil )
+ (!pair  "vec<prot_list_entry,va_gc>"
+  (!type already_seen 1997)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1258)
+  nil )
+ (!pair  "msgref_entry"
+  (!type already_seen 1993)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1204)
+  nil )
+ (!pair  "vec<msgref_entry,va_gc>"
+  (!type already_seen 1994)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1204)
+  nil )
+ (!pair  "ident_data_tuple"
+  (!type already_seen 1990)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1039)
+  nil )
+ (!pair  "vec<ident_data_tuple,va_gc>"
+  (!type already_seen 1991)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1039)
+  nil )
+ (!pair  "objc_string_hasher"
+  (!type already_seen 1986)
+  (!srcfileloc  "objc/objc-act.c" 260)
+  nil )
+ (!pair  "hash_table<objc_string_hasher>"
+  (!type already_seen 1987)
+  (!srcfileloc  "objc/objc-act.c" 260)
+  nil )
+ (!pair  "attr"
+  (!type already_seen 1980)
+  (!srcfileloc  "objc/objc-act.h" 260)
+  nil )
+ (!pair  "hash"
+  (!type already_seen 1978)
+  (!srcfileloc  "objc/objc-act.h" 259)
+  nil )
+ (!pair  "objc_map_iterator_t"
+  (!type already_seen 2)
+  (!srcfileloc  "objc/objc-map.h" 241)
+  nil )
+ (!pair  "objc_map_t"
+  (!type already_seen 1976)
+  (!srcfileloc  "objc/objc-map.h" 90)
+  nil )
+ (!pair  "objc_map_private_hash_t"
+  (!type already_seen 2)
+  (!srcfileloc  "objc/objc-map.h" 40)
+  nil )
+ (!pair  "go_char_p"
+  (!type already_seen 9)
+  (!srcfileloc  "go/go-lang.c" 184)
+  nil )
+ (!pair  "gfc_interface_mapping"
+  (!type already_seen 1962)
+  (!srcfileloc  "fortran/trans.h" 1112)
+  nil )
+ (!pair  "gfc_interface_sym_mapping"
+  (!type already_seen 1961)
+  (!srcfileloc  "fortran/trans.h" 1097)
+  nil )
+ (!pair  "gfc_powdecl_list"
+  (!type already_seen 1960)
+  (!srcfileloc  "fortran/trans.h" 866)
+  nil )
+ (!pair  "module_decl_hasher"
+  (!type already_seen 1945)
+  (!srcfileloc  "fortran/trans.h" 667)
+  nil )
+ (!pair  "hash_table<module_decl_hasher>"
+  (!type already_seen 1944)
+  (!srcfileloc  "fortran/trans.h" 667)
+  nil )
+ (!pair  "gfc_wrapped_block"
+  (!type already_seen 1958)
+  (!srcfileloc  "fortran/trans.h" 407)
+  nil )
+ (!pair  "gfc_saved_var"
+  (!type already_seen 1957)
+  (!srcfileloc  "fortran/trans.h" 394)
+  nil )
+ (!pair  "gfc_loopinfo"
+  (!type already_seen 1956)
+  (!srcfileloc  "fortran/trans.h" 384)
+  nil )
+ (!pair  "gfc_ss"
+  (!type already_seen 1955)
+  (!srcfileloc  "fortran/trans.h" 335)
+  nil )
+ (!pair  "gfc_ss_info"
+  (!type already_seen 1954)
+  (!srcfileloc  "fortran/trans.h" 294)
+  nil )
+ (!pair  "gfc_array_info"
+  (!type already_seen 1953)
+  (!srcfileloc  "fortran/trans.h" 195)
+  nil )
+ (!pair  "gfc_se"
+  (!type already_seen 1952)
+  (!srcfileloc  "fortran/trans.h" 105)
+  nil )
+ (!pair  "stmtblock_t"
+  (!type already_seen 1951)
+  (!srcfileloc  "fortran/trans.h" 37)
+  nil )
+ (!pair  "forall_info"
+  (!type already_seen 1950)
+  (!srcfileloc  "fortran/trans-stmt.c" 58)
+  nil )
+ (!pair  "iter_info"
+  (!type already_seen 1949)
+  (!srcfileloc  "fortran/trans-stmt.c" 46)
+  nil )
+ (!pair  "gfc_st_parameter"
+  (!type already_seen 1948)
+  (!srcfileloc  "fortran/trans-io.c" 80)
+  nil )
+ (!pair  "gfc_st_parameter_field"
+  (!type already_seen 1947)
+  (!srcfileloc  "fortran/trans-io.c" 74)
+  nil )
+ (!pair  "gfc_intrinsic_map_t"
+  (!type already_seen 1946)
+  (!srcfileloc  "fortran/trans-intrinsic.c" 85)
+  nil )
+ (!pair  "module_hasher"
+  (!type already_seen 1939)
+  (!srcfileloc  "fortran/trans-decl.c" 4962)
+  nil )
+ (!pair  "hash_table<module_hasher>"
+  (!type already_seen 1940)
+  (!srcfileloc  "fortran/trans-decl.c" 4962)
+  nil )
+ (!pair  "tree_frame_info"
+  (!type already_seen 651)
+  (!srcfileloc  "d/d-tree.h" 335)
+  nil )
+ (!pair  "lang_identifier"
+  (!type already_seen 626)
+  (!srcfileloc  "d/d-tree.h" 334)
+  nil )
+ (!pair  "Type"
+  (!type already_seen 529)
+  (!srcfileloc  "d/d-tree.h" 308)
+  nil )
+ (!pair  "d_label_entry"
+  (!type already_seen 100)
+  (!srcfileloc  "d/d-tree.h" 240)
+  nil )
+ (!pair  "hash_map<Statement*,d_label_entry>"
+  (!type already_seen 99)
+  (!srcfileloc  "d/d-tree.h" 240)
+  nil )
+ (!pair  "Module"
+  (!type already_seen 95)
+  (!srcfileloc  "d/d-tree.h" 227)
+  nil )
+ (!pair  "FuncDeclaration"
+  (!type already_seen 93)
+  (!srcfileloc  "d/d-tree.h" 226)
+  nil )
+ (!pair  "Declaration"
+  (!type already_seen 62)
+  (!srcfileloc  "d/d-tree.h" 206)
+  nil )
+ (!pair  "Statement"
+  (!type already_seen 102)
+  (!srcfileloc  "d/d-tree.h" 132)
+  nil )
+ (!pair  "d_label_use_entry"
+  (!type already_seen 104)
+  (!srcfileloc  "d/d-tree.h" 129)
+  nil )
+ (!pair  "binding_level"
+  (!type already_seen 88)
+  (!srcfileloc  "d/d-tree.h" 114)
+  nil )
+ (!pair  "Expressions"
+  (!type already_seen 1932)
+  (!srcfileloc  "d/d-tree.h" 45)
+  nil )
+ (!pair  "Array<Expression*>"
+  (!type already_seen 1932)
+  (!srcfileloc  "d/d-tree.h" 45)
+  nil )
+ (!pair  "abstract_type_hasher"
+  (!type already_seen 1911)
+  (!srcfileloc  "cp/typeck2.c" 177)
+  nil )
+ (!pair  "hash_table<abstract_type_hasher>"
+  (!type already_seen 1912)
+  (!srcfileloc  "cp/typeck2.c" 177)
+  nil )
+ (!pair  "list_hasher"
+  (!type already_seen 1904)
+  (!srcfileloc  "cp/tree.c" 1993)
+  nil )
+ (!pair  "hash_table<list_hasher>"
+  (!type already_seen 1905)
+  (!srcfileloc  "cp/tree.c" 1993)
+  nil )
+ (!pair  "cplus_array_hasher"
+  (!type already_seen 1900)
+  (!srcfileloc  "cp/tree.c" 939)
+  nil )
+ (!pair  "hash_table<cplus_array_hasher>"
+  (!type already_seen 1901)
+  (!srcfileloc  "cp/tree.c" 939)
+  nil )
+ (!pair  "deferred_access"
+  (!type already_seen 1895)
+  (!srcfileloc  "cp/semantics.c" 138)
+  nil )
+ (!pair  "vec<deferred_access,va_gc>"
+  (!type already_seen 1896)
+  (!srcfileloc  "cp/semantics.c" 138)
+  nil )
+ (!pair  "tinfo_s"
+  (!type already_seen 1892)
+  (!srcfileloc  "cp/rtti.c" 122)
+  nil )
+ (!pair  "vec<tinfo_s,va_gc>"
+  (!type already_seen 1893)
+  (!srcfileloc  "cp/rtti.c" 122)
+  nil )
+ (!pair  "subsumption_hasher"
+  (!type already_seen 1889)
+  (!srcfileloc  "cp/pt.c" 28246)
+  nil )
+ (!pair  "hash_table<subsumption_hasher>"
+  (!type already_seen 1890)
+  (!srcfileloc  "cp/pt.c" 28246)
+  nil )
+ (!pair  "concept_spec_hasher"
+  (!type already_seen 1883)
+  (!srcfileloc  "cp/pt.c" 28104)
+  nil )
+ (!pair  "hash_table<concept_spec_hasher>"
+  (!type already_seen 1886)
+  (!srcfileloc  "cp/pt.c" 28104)
+  nil )
+ (!pair  "constraint_sat_hasher"
+  (!type already_seen 1881)
+  (!srcfileloc  "cp/pt.c" 28103)
+  nil )
+ (!pair  "hash_table<constraint_sat_hasher>"
+  (!type already_seen 1884)
+  (!srcfileloc  "cp/pt.c" 28103)
+  nil )
+ (!pair  "constr_hasher"
+  (!type already_seen 1877)
+  (!srcfileloc  "cp/pt.c" 27991)
+  nil )
+ (!pair  "hash_table<constr_hasher>"
+  (!type already_seen 1878)
+  (!srcfileloc  "cp/pt.c" 27991)
+  nil )
+ (!pair  "pending_template"
+  (!type already_seen 1863)
+  (!srcfileloc  "cp/pt.c" 9030)
+  nil )
+ (!pair  "tinst_level"
+  (!type already_seen 1771)
+  (!srcfileloc  "cp/pt.c" 9021)
+  nil )
+ (!pair  "spec_hasher"
+  (!type already_seen 1866)
+  (!srcfileloc  "cp/pt.c" 113)
+  nil )
+ (!pair  "hash_table<spec_hasher>"
+  (!type already_seen 1867)
+  (!srcfileloc  "cp/pt.c" 113)
+  nil )
+ (!pair  "tree_fn_t"
+  (!type already_seen 2)
+  (!srcfileloc  "cp/pt.c" 48)
+  nil )
+ (!pair  "cp_parser"
+  (!type already_seen 1795)
+  (!srcfileloc  "cp/parser.c" 40720)
+  nil )
+ (!pair  "cp_parser_expression_stack"
+  (!type array 2002 nil  gc_unused "NUM_PREC_VALUES" 
+   (!type already_seen 1860)
+  )
+  (!srcfileloc  "cp/parser.c" 1875)
+  nil )
+ (!pair  "cp_parser_flags"
+  (!type already_seen 2)
+  (!srcfileloc  "cp/parser.c" 1807)
+  nil )
+ (!pair  "substitution_identifier_index_t"
+  (!type already_seen 2)
+  (!srcfileloc  "cp/mangle.c" 147)
+  nil )
+ (!pair  "globals"
+  (!type already_seen 1848)
+  (!srcfileloc  "cp/mangle.c" 122)
+  nil )
+ (!pair  "conv_type_hasher"
+  (!type already_seen 1845)
+  (!srcfileloc  "cp/lex.c" 606)
+  nil )
+ (!pair  "hash_table<conv_type_hasher>"
+  (!type already_seen 1846)
+  (!srcfileloc  "cp/lex.c" 606)
+  nil )
+ (!pair  "tree_int"
+  (!type already_seen 1841)
+  (!srcfileloc  "cp/lambda.c" 1342)
+  nil )
+ (!pair  "vec<tree_int,va_gc>"
+  (!type already_seen 1842)
+  (!srcfileloc  "cp/lambda.c" 1342)
+  nil )
+ (!pair  "pending_noexcept"
+  (!type already_seen 1838)
+  (!srcfileloc  "cp/except.c" 1154)
+  nil )
+ (!pair  "vec<pending_noexcept,va_gc>"
+  (!type already_seen 1839)
+  (!srcfileloc  "cp/except.c" 1154)
+  nil )
+ (!pair  "mangled_decl_hash"
+  (!type already_seen 1835)
+  (!srcfileloc  "cp/decl2.c" 138)
+  nil )
+ (!pair  "hash_table<mangled_decl_hash>"
+  (!type already_seen 1836)
+  (!srcfileloc  "cp/decl2.c" 138)
+  nil )
+ (!pair  "priority_info"
+  (!type already_seen 1834)
+  (!srcfileloc  "cp/decl2.c" 66)
+  nil )
+ (!pair  "typename_hasher"
+  (!type already_seen 1828)
+  (!srcfileloc  "cp/decl.c" 3716)
+  nil )
+ (!pair  "hash_table<typename_hasher>"
+  (!type already_seen 1829)
+  (!srcfileloc  "cp/decl.c" 3716)
+  nil )
+ (!pair  "incomplete_var"
+  (!type already_seen 1823)
+  (!srcfileloc  "cp/decl.c" 247)
+  nil )
+ (!pair  "vec<incomplete_var,va_gc>"
+  (!type already_seen 1824)
+  (!srcfileloc  "cp/decl.c" 247)
+  nil )
+ (!pair  "named_label_use_entry"
+  (!type already_seen 1762)
+  (!srcfileloc  "cp/decl.c" 209)
+  nil )
+ (!pair  "named_label_entry"
+  (!type already_seen 1759)
+  (!srcfileloc  "cp/decl.c" 192)
+  nil )
+ (!pair  "constexpr_call_hasher"
+  (!type already_seen 1816)
+  (!srcfileloc  "cp/constexpr.c" 1052)
+  nil )
+ (!pair  "hash_table<constexpr_call_hasher>"
+  (!type already_seen 1818)
+  (!srcfileloc  "cp/constexpr.c" 1052)
+  nil )
+ (!pair  "constexpr_fundef"
+  (!type already_seen 1810)
+  (!srcfileloc  "cp/constexpr.c" 976)
+  nil )
+ (!pair  "constexpr_fundef_hasher"
+  (!type already_seen 1812)
+  (!srcfileloc  "cp/constexpr.c" 155)
+  nil )
+ (!pair  "hash_table<constexpr_fundef_hasher>"
+  (!type already_seen 1813)
+  (!srcfileloc  "cp/constexpr.c" 155)
+  nil )
+ (!pair  "subobject_offset_fn"
+  (!type already_seen 2)
+  (!srcfileloc  "cp/class.c" 104)
+  nil )
+ (!pair  "class_stack_node_t"
+  (!type already_seen 1804)
+  (!srcfileloc  "cp/class.c" 70)
+  nil )
+ (!pair  "cp_oacc_routine_data"
+  (!type already_seen 1791)
+  (!srcfileloc  "cp/parser.h" 375)
+  nil )
+ (!pair  "cp_omp_declare_simd_data"
+  (!type already_seen 1789)
+  (!srcfileloc  "cp/parser.h" 371)
+  nil )
+ (!pair  "cp_unparsed_functions_entry"
+  (!type already_seen 1786)
+  (!srcfileloc  "cp/parser.h" 359)
+  nil )
+ (!pair  "vec<cp_unparsed_functions_entry,va_gc>"
+  (!type already_seen 1793)
+  (!srcfileloc  "cp/parser.h" 359)
+  nil )
+ (!pair  "cp_parser_context"
+  (!type already_seen 1787)
+  (!srcfileloc  "cp/parser.h" 253)
+  nil )
+ (!pair  "cp_lexer"
+  (!type already_seen 1780)
+  (!srcfileloc  "cp/parser.h" 219)
+  nil )
+ (!pair  "cp_default_arg_entry"
+  (!type already_seen 1783)
+  (!srcfileloc  "cp/parser.h" 156)
+  nil )
+ (!pair  "vec<cp_default_arg_entry,va_gc>"
+  (!type already_seen 1784)
+  (!srcfileloc  "cp/parser.h" 156)
+  nil )
+ (!pair  "cp_token_cache_ptr"
+  (!type already_seen 70)
+  (!srcfileloc  "cp/parser.h" 128)
+  nil )
+ (!pair  "cp_token_cache"
+  (!type already_seen 71)
+  (!srcfileloc  "cp/parser.h" 128)
+  nil )
+ (!pair  "vec<cp_token_position>"
+  (!type already_seen 1779)
+  (!srcfileloc  "cp/parser.h" 100)
+  nil )
+ (!pair  "cp_token"
+  (!type already_seen 73)
+  (!srcfileloc  "cp/parser.h" 86)
+  nil )
+ (!pair  "vec<cp_token,va_gc>"
+  (!type already_seen 1777)
+  (!srcfileloc  "cp/parser.h" 86)
+  nil )
+ (!pair  "cp_token_position"
+  (!type already_seen 72)
+  (!srcfileloc  "cp/parser.h" 76)
+  nil )
+ (!pair  "deferred_access_check"
+  (!type already_seen 80)
+  (!srcfileloc  "cp/parser.h" 34)
+  nil )
+ (!pair  "vec<deferred_access_check,va_gc>"
+  (!type already_seen 78)
+  (!srcfileloc  "cp/parser.h" 34)
+  nil )
+ (!pair  "cp_parameter_declarator"
+  (!type already_seen 1770)
+  (!srcfileloc  "cp/cp-tree.h" 5887)
+  nil )
+ (!pair  "cp_declarator"
+  (!type already_seen 1769)
+  (!srcfileloc  "cp/cp-tree.h" 5885)
+  nil )
+ (!pair  "cp_virt_specifiers"
+  (!type already_seen 2)
+  (!srcfileloc  "cp/cp-tree.h" 5756)
+  nil )
+ (!pair  "cp_cv_quals"
+  (!type already_seen 2)
+  (!srcfileloc  "cp/cp-tree.h" 5740)
+  nil )
+ (!pair  "ovl_op_info_t"
+  (!type already_seen 1767)
+  (!srcfileloc  "cp/cp-tree.h" 5719)
+  nil )
+ (!pair  "base_access"
+  (!type already_seen 2)
+  (!srcfileloc  "cp/cp-tree.h" 5215)
+  nil )
+ (!pair  "tsubst_flags_t"
+  (!type already_seen 2)
+  (!srcfileloc  "cp/cp-tree.h" 5201)
+  nil )
+ (!pair  "cp_lvalue_kind"
+  (!type already_seen 2)
+  (!srcfileloc  "cp/cp-tree.h" 5084)
+  nil )
+ (!pair  "named_decl_hash"
+  (!type already_seen 143)
+  (!srcfileloc  "cp/cp-tree.h" 2677)
+  nil )
+ (!pair  "hash_table<named_decl_hash>"
+  (!type already_seen 142)
+  (!srcfileloc  "cp/cp-tree.h" 2677)
+  nil )
+ (!pair  "vec<tree_pair_s,va_gc>"
+  (!type already_seen 532)
+  (!srcfileloc  "cp/cp-tree.h" 2118)
+  nil )
+ (!pair  "tree_pair_p"
+  (!type already_seen 534)
+  (!srcfileloc  "cp/cp-tree.h" 2032)
+  nil )
+ (!pair  "tree_pair_s"
+  (!type already_seen 533)
+  (!srcfileloc  "cp/cp-tree.h" 2032)
+  nil )
+ (!pair  "cxx_int_tree_map_hasher"
+  (!type already_seen 121)
+  (!srcfileloc  "cp/cp-tree.h" 1837)
+  nil )
+ (!pair  "hash_table<cxx_int_tree_map_hasher>"
+  (!type already_seen 120)
+  (!srcfileloc  "cp/cp-tree.h" 1837)
+  nil )
+ (!pair  "named_label_hash"
+  (!type already_seen 111)
+  (!srcfileloc  "cp/cp-tree.h" 1830)
+  nil )
+ (!pair  "hash_table<named_label_hash>"
+  (!type already_seen 110)
+  (!srcfileloc  "cp/cp-tree.h" 1830)
+  nil )
+ (!pair  "cxx_saved_binding"
+  (!type already_seen 1746)
+  (!srcfileloc  "cp/cp-tree.h" 1617)
+  nil )
+ (!pair  "vec<cxx_saved_binding,va_gc>"
+  (!type already_seen 1751)
+  (!srcfileloc  "cp/cp-tree.h" 1617)
+  nil )
+ (!pair  "vec<qualified_typedef_usage_t,va_gc>"
+  (!type already_seen 667)
+  (!srcfileloc  "cp/cp-tree.h" 1420)
+  nil )
+ (!pair  "qualified_typedef_usage_t"
+  (!type already_seen 668)
+  (!srcfileloc  "cp/cp-tree.h" 1402)
+  nil )
+ (!pair  "ptrmem_cst_t"
+  (!type already_seen 655)
+  (!srcfileloc  "cp/cp-tree.h" 635)
+  nil )
+ (!pair  "cp_class_binding"
+  (!type already_seen 116)
+  (!srcfileloc  "cp/name-lookup.h" 187)
+  nil )
+ (!pair  "vec<cp_class_binding,va_gc>"
+  (!type already_seen 115)
+  (!srcfileloc  "cp/name-lookup.h" 187)
+  nil )
+ (!pair  "cp_binding_level"
+  (!type already_seen 113)
+  (!srcfileloc  "cp/name-lookup.h" 55)
+  nil )
+ (!pair  "cxx_binding"
+  (!type already_seen 118)
+  (!srcfileloc  "cp/name-lookup.h" 52)
+  nil )
+ (!pair  "bt_foreach_proc"
+  (!type already_seen 2)
+  (!srcfileloc  "cp/name-lookup.h" 32)
+  nil )
+ (!pair  "binding_entry"
+  (!type already_seen 538)
+  (!srcfileloc  "cp/name-lookup.h" 29)
+  nil )
+ (!pair  "binding_table"
+  (!type already_seen 535)
+  (!srcfileloc  "cp/name-lookup.h" 28)
+  nil )
+ (!pair  "matching_braces"
+  (!type already_seen 1742)
+  (!srcfileloc  "c/c-parser.c" 1015)
+  nil )
+ (!pair  "matching_brace_traits"
+  (!type already_seen 1741)
+  (!srcfileloc  "c/c-parser.c" 1015)
+  nil )
+ (!pair  "token_pair<matching_brace_traits>"
+  (!type already_seen 1742)
+  (!srcfileloc  "c/c-parser.c" 1015)
+  nil )
+ (!pair  "matching_parens"
+  (!type already_seen 1740)
+  (!srcfileloc  "c/c-parser.c" 997)
+  nil )
+ (!pair  "matching_paren_traits"
+  (!type already_seen 1739)
+  (!srcfileloc  "c/c-parser.c" 997)
+  nil )
+ (!pair  "token_pair<matching_paren_traits>"
+  (!type already_seen 1740)
+  (!srcfileloc  "c/c-parser.c" 997)
+  nil )
+ (!pair  "c_parser"
+  (!type already_seen 1735)
+  (!srcfileloc  "c/c-parser.c" 240)
+  nil )
+ (!pair  "c_token"
+  (!type already_seen 1733)
+  (!srcfileloc  "c/c-parser.c" 168)
+  nil )
+ (!pair  "pending_redefinition"
+  (!type already_seen 1717)
+  (!srcfileloc  "c-family/c-pragma.c" 484)
+  nil )
+ (!pair  "vec<pending_redefinition,va_gc>"
+  (!type already_seen 1718)
+  (!srcfileloc  "c-family/c-pragma.c" 484)
+  nil )
+ (!pair  "pending_weak"
+  (!type already_seen 1714)
+  (!srcfileloc  "c-family/c-pragma.c" 238)
+  nil )
+ (!pair  "vec<pending_weak,va_gc>"
+  (!type already_seen 1715)
+  (!srcfileloc  "c-family/c-pragma.c" 238)
+  nil )
+ (!pair  "pragma_handler_2arg"
+  (!type already_seen 2)
+  (!srcfileloc  "c-family/c-pragma.h" 187)
+  nil )
+ (!pair  "pragma_handler_1arg"
+  (!type already_seen 2)
+  (!srcfileloc  "c-family/c-pragma.h" 184)
+  nil )
+ (!pair  "omp_clause_mask"
+  (!type already_seen 1708)
+  (!srcfileloc  "c-family/c-common.h" 1137)
+  nil )
+ (!pair  "wide_int_bitmask"
+  (!type already_seen 1708)
+  (!srcfileloc  "c-family/c-common.h" 1137)
+  nil )
+ (!pair  "stmt_tree"
+  (!type already_seen 108)
+  (!srcfileloc  "c-family/c-common.h" 558)
+  nil )
+ (!pair  "added_includes_t"
+  (!type already_seen 1702)
+  (!srcfileloc  "c-family/c-common.c" 8650)
+  nil )
+ (!pair  "hash_map<char*,per_file_includes_t*>"
+  (!type already_seen 1702)
+  (!srcfileloc  "c-family/c-common.c" 8650)
+  nil )
+ (!pair  "per_file_includes_t"
+  (!type already_seen 1700)
+  (!srcfileloc  "c-family/c-common.c" 8645)
+  nil )
+ (!pair  "nofree_string_hash"
+  (!type already_seen 1701)
+  (!srcfileloc  "c-family/c-common.c" 8645)
+  nil )
+ (!pair  "hash_set<char*,false,nofree_string_hash>"
+  (!type already_seen 1700)
+  (!srcfileloc  "c-family/c-common.c" 8645)
+  nil )
+ (!pair  "vec<tree_gc_vec,va_gc>"
+  (!type already_seen 1698)
+  (!srcfileloc  "c-family/c-common.c" 7698)
+  nil )
+ (!pair  "tree_gc_vec"
+  (!type already_seen 96)
+  (!srcfileloc  "c-family/c-common.c" 7697)
+  nil )
+ (!pair  "vec<const_char_p,va_gc>"
+  (!type already_seen 1696)
+  (!srcfileloc  "c-family/c-common.c" 5514)
+  nil )
+ (!pair  "const_char_p"
+  (!type already_seen 9)
+  (!srcfileloc  "c-family/c-common.c" 5513)
+  nil )
+ (!pair  "c_binding_ptr"
+  (!type already_seen 635)
+  (!srcfileloc  "c/c-decl.c" 572)
+  nil )
+ (!pair  "vec<c_goto_bindings_p,va_gc>"
+  (!type already_seen 644)
+  (!srcfileloc  "c/c-decl.c" 380)
+  nil )
+ (!pair  "c_goto_bindings_p"
+  (!type already_seen 645)
+  (!srcfileloc  "c/c-decl.c" 361)
+  nil )
+ (!pair  "c_expr_t"
+  (!type already_seen 1679)
+  (!srcfileloc  "c/c-tree.h" 174)
+  nil )
+ (!pair  "builtin_type"
+  (!type already_seen 2)
+  (!srcfileloc  "ada/gcc-interface/utils.c" 5905)
+  nil )
+ (!pair  "pad_type_hasher"
+  (!type already_seen 1674)
+  (!srcfileloc  "ada/gcc-interface/utils.c" 245)
+  nil )
+ (!pair  "hash_table<pad_type_hasher>"
+  (!type already_seen 1675)
+  (!srcfileloc  "ada/gcc-interface/utils.c" 245)
+  nil )
+ (!pair  "vec<loop_info,va_gc>"
+  (!type already_seen 1668)
+  (!srcfileloc  "ada/gcc-interface/trans.c" 210)
+  nil )
+ (!pair  "loop_info"
+  (!type already_seen 1667)
+  (!srcfileloc  "ada/gcc-interface/trans.c" 206)
+  nil )
+ (!pair  "vec<range_check_info,va_gc>"
+  (!type already_seen 1664)
+  (!srcfileloc  "ada/gcc-interface/trans.c" 203)
+  nil )
+ (!pair  "range_check_info"
+  (!type already_seen 1663)
+  (!srcfileloc  "ada/gcc-interface/trans.c" 191)
+  nil )
+ (!pair  "vec<parm_attr,va_gc>"
+  (!type already_seen 130)
+  (!srcfileloc  "ada/gcc-interface/trans.c" 113)
+  nil )
+ (!pair  "parm_attr"
+  (!type already_seen 131)
+  (!srcfileloc  "ada/gcc-interface/trans.c" 109)
+  nil )
+ (!pair  "vinfo_t"
+  (!type already_seen 1657)
+  (!srcfileloc  "ada/gcc-interface/decl.c" 7449)
+  nil )
+ (!pair  "intrin_binding_t"
+  (!type already_seen 1655)
+  (!srcfileloc  "ada/gcc-interface/decl.c" 260)
+  nil )
+ (!pair  "dummy_type_hasher"
+  (!type already_seen 1652)
+  (!srcfileloc  "ada/gcc-interface/decl.c" 197)
+  nil )
+ (!pair  "hash_table<dummy_type_hasher>"
+  (!type already_seen 1653)
+  (!srcfileloc  "ada/gcc-interface/decl.c" 197)
+  nil )
+ (!pair  "va_gc_atomic"
+  (!type already_seen 1649)
+  (!srcfileloc  "ada/gcc-interface/decl.c" 162)
+  nil )
+ (!pair  "Entity_Id"
+  (!type already_seen 1650)
+  (!srcfileloc  "ada/gcc-interface/decl.c" 162)
+  nil )
+ (!pair  "vec<Entity_Id,va_gc_atomic>"
+  (!type already_seen 1647)
+  (!srcfileloc  "ada/gcc-interface/decl.c" 162)
+  nil )
+ (!pair  "value_annotation_hasher"
+  (!type already_seen 1644)
+  (!srcfileloc  "ada/gcc-interface/decl.c" 156)
+  nil )
+ (!pair  "hash_table<value_annotation_hasher>"
+  (!type already_seen 1645)
+  (!srcfileloc  "ada/gcc-interface/decl.c" 156)
+  nil )
+ (!pair  "variant_desc"
+  (!type already_seen 1643)
+  (!srcfileloc  "ada/gcc-interface/decl.c" 131)
+  nil )
+ (!pair  "subst_pair"
+  (!type already_seen 1642)
+  (!srcfileloc  "ada/gcc-interface/decl.c" 113)
+  nil )
+ (!pair  "rewrite_fn"
+  (!type already_seen 2)
+  (!srcfileloc  "ada/gcc-interface/gigi.h" 957)
+  nil )
+ (!pair  "builtin_simd_arg"
+  (!type already_seen 2)
+  (!srcfileloc  "config/aarch64/aarch64-builtins.c" 1116)
+  nil )
+ (!pair  "aarch64_fcmla_laneq_builtin_datum"
+  (!type already_seen 1630)
+  (!srcfileloc  "config/aarch64/aarch64-builtins.c" 396)
+  nil )
+ (!pair  "aarch64_crc_builtin_datum"
+  (!type already_seen 1629)
+  (!srcfileloc  "config/aarch64/aarch64-builtins.c" 386)
+  nil )
+ (!pair  "aarch64_simd_builtin_datum"
+  (!type already_seen 1628)
+  (!srcfileloc  "config/aarch64/aarch64-builtins.c" 119)
+  nil )
+ (!pair  "hsa_decl_kernel_map_element"
+  (!type already_seen 1623)
+  (!srcfileloc  "hsa-common.c" 67)
+  nil )
+ (!pair  "vec<hsa_decl_kernel_map_element,va_gc>"
+  (!type already_seen 1624)
+  (!srcfileloc  "hsa-common.c" 67)
+  nil )
+ (!pair  "polymorphic_call_target_hash_type"
+  (!type already_seen 1616)
+  (!srcfileloc  "ipa-devirt.c" 2854)
+  nil )
+ (!pair  "polymorphic_call_target_hasher"
+  (!type already_seen 1615)
+  (!srcfileloc  "ipa-devirt.c" 2853)
+  nil )
+ (!pair  "hash_table<polymorphic_call_target_hasher>"
+  (!type already_seen 1616)
+  (!srcfileloc  "ipa-devirt.c" 2853)
+  nil )
+ (!pair  "vec<odr_type,va_gc>"
+  (!type already_seen 1612)
+  (!srcfileloc  "ipa-devirt.c" 620)
+  nil )
+ (!pair  "odr_vtable_hash_type"
+  (!type already_seen 1611)
+  (!srcfileloc  "ipa-devirt.c" 613)
+  nil )
+ (!pair  "odr_vtable_hasher"
+  (!type already_seen 1609)
+  (!srcfileloc  "ipa-devirt.c" 613)
+  nil )
+ (!pair  "hash_table<odr_vtable_hasher>"
+  (!type already_seen 1611)
+  (!srcfileloc  "ipa-devirt.c" 613)
+  nil )
+ (!pair  "odr_hash_type"
+  (!type already_seen 1610)
+  (!srcfileloc  "ipa-devirt.c" 611)
+  nil )
+ (!pair  "odr_name_hasher"
+  (!type already_seen 1608)
+  (!srcfileloc  "ipa-devirt.c" 611)
+  nil )
+ (!pair  "hash_table<odr_name_hasher>"
+  (!type already_seen 1610)
+  (!srcfileloc  "ipa-devirt.c" 611)
+  nil )
+ (!pair  "vec<odr_type>"
+  (!type already_seen 1129)
+  (!srcfileloc  "ipa-devirt.c" 196)
+  nil )
+ (!pair  "tree_type_map_cache_hasher"
+  (!type already_seen 1593)
+  (!srcfileloc  "ubsan.c" 82)
+  nil )
+ (!pair  "hash_table<tree_type_map_cache_hasher>"
+  (!type already_seen 1594)
+  (!srcfileloc  "ubsan.c" 82)
+  nil )
+ (!pair  "vtbl_map_iterator_type"
+  (!type already_seen 1583)
+  (!srcfileloc  "vtable-verify.c" 299)
+  nil )
+ (!pair  "vtbl_map_table_type::iterator"
+  (!type already_seen 1583)
+  (!srcfileloc  "vtable-verify.c" 299)
+  nil )
+ (!pair  "vtbl_map_table_type"
+  (!type already_seen 1582)
+  (!srcfileloc  "vtable-verify.c" 298)
+  nil )
+ (!pair  "vtbl_map_hasher"
+  (!type already_seen 1581)
+  (!srcfileloc  "vtable-verify.c" 298)
+  nil )
+ (!pair  "hash_table<vtbl_map_hasher>"
+  (!type already_seen 1582)
+  (!srcfileloc  "vtable-verify.c" 298)
+  nil )
+ (!pair  "fast_function_summary<ipa_fn_summary*,va_gc>"
+  (!type already_seen 1576)
+  (!srcfileloc  "ipa-fnsummary.h" 204)
+  nil )
+ (!pair  "ipa_fn_summary_t"
+  (!type already_seen 1575)
+  (!srcfileloc  "ipa-fnsummary.h" 202)
+  nil )
+ (!pair  "size_time_entry"
+  (!type already_seen 1120)
+  (!srcfileloc  "ipa-fnsummary.h" 150)
+  nil )
+ (!pair  "vec<size_time_entry,va_gc>"
+  (!type already_seen 1119)
+  (!srcfileloc  "ipa-fnsummary.h" 150)
+  nil )
+ (!pair  "ipa_fn_summary"
+  (!type already_seen 1113)
+  (!srcfileloc  "ipa-fnsummary.h" 92)
+  nil )
+ (!pair  "predicate"
+  (!type already_seen 1121)
+  (!srcfileloc  "ipa-fnsummary.h" 78)
+  nil )
+ (!pair  "ipa_hints"
+  (!type already_seen 2)
+  (!srcfileloc  "ipa-fnsummary.h" 58)
+  nil )
+ (!pair  "clause_t"
+  (!type already_seen 1573)
+  (!srcfileloc  "ipa-predicate.h" 78)
+  nil )
+ (!pair  "uint32_t"
+  (!type already_seen 1573)
+  (!srcfileloc  "ipa-predicate.h" 78)
+  nil )
+ (!pair  "conditions"
+  (!type already_seen 1115)
+  (!srcfileloc  "ipa-predicate.h" 59)
+  nil )
+ (!pair  "condition"
+  (!type already_seen 1117)
+  (!srcfileloc  "ipa-predicate.h" 59)
+  nil )
+ (!pair  "vec<condition,va_gc>"
+  (!type already_seen 1116)
+  (!srcfileloc  "ipa-predicate.h" 59)
+  nil )
+ (!pair  "lto_file_decl_data_ptr"
+  (!type already_seen 377)
+  (!srcfileloc  "lto-streamer.h" 594)
+  nil )
+ (!pair  "ld_plugin_symbol_resolution"
+  (!type already_seen 395)
+  (!srcfileloc  "lto-streamer.h" 588)
+  nil )
+ (!pair  "hash_map<tree,ld_plugin_symbol_resolution>"
+  (!type already_seen 394)
+  (!srcfileloc  "lto-streamer.h" 588)
+  nil )
+ (!pair  "gcov_summary"
+  (!type already_seen 392)
+  (!srcfileloc  "lto-streamer.h" 585)
+  nil )
+ (!pair  "res_pair"
+  (!type already_seen 391)
+  (!srcfileloc  "lto-streamer.h" 582)
+  nil )
+ (!pair  "vec<res_pair>"
+  (!type already_seen 390)
+  (!srcfileloc  "lto-streamer.h" 582)
+  nil )
+ (!pair  "decl_state_hasher"
+  (!type already_seen 387)
+  (!srcfileloc  "lto-streamer.h" 564)
+  nil )
+ (!pair  "hash_table<decl_state_hasher>"
+  (!type already_seen 386)
+  (!srcfileloc  "lto-streamer.h" 564)
+  nil )
+ (!pair  "lto_out_decl_state_ptr"
+  (!type already_seen 1506)
+  (!srcfileloc  "lto-streamer.h" 535)
+  nil )
+ (!pair  "lto_in_decl_state_ptr"
+  (!type already_seen 380)
+  (!srcfileloc  "lto-streamer.h" 499)
+  nil )
+ (!pair  "lto_symtab_encoder_t"
+  (!type already_seen 383)
+  (!srcfileloc  "lto-streamer.h" 465)
+  nil )
+ (!pair  "lto_free_section_data_f"
+  (!type already_seen 2)
+  (!srcfileloc  "lto-streamer.h" 293)
+  nil )
+ (!pair  "lto_get_section_data_f"
+  (!type already_seen 2)
+  (!srcfileloc  "lto-streamer.h" 284)
+  nil )
+ (!pair  "ld_plugin_symbol_resolution_t"
+  (!type already_seen 2)
+  (!srcfileloc  "lto-streamer.h" 253)
+  nil )
+ (!pair  "lto_decl_flags_t"
+  (!type already_seen 8)
+  (!srcfileloc  "lto-streamer.h" 126)
+  nil )
+ (!pair  "cgraph_node_queue"
+  (!type already_seen 1551)
+  (!srcfileloc  "trans-mem.c" 4182)
+  nil )
+ (!pair  "vec<cgraph_node*>"
+  (!type already_seen 1551)
+  (!srcfileloc  "trans-mem.c" 4182)
+  nil )
+ (!pair  "tm_wrapper_hasher"
+  (!type already_seen 1531)
+  (!srcfileloc  "trans-mem.c" 466)
+  nil )
+ (!pair  "hash_table<tm_wrapper_hasher>"
+  (!type already_seen 1532)
+  (!srcfileloc  "trans-mem.c" 466)
+  nil )
+ (!pair  "function_summary<ipcp_transformation*>"
+  (!type already_seen 1529)
+  (!srcfileloc  "ipa-prop.h" 673)
+  nil )
+ (!pair  "ipa_edge_args_sum_t"
+  (!type already_seen 1526)
+  (!srcfileloc  "ipa-prop.h" 646)
+  nil )
+ (!pair  "ipa_node_params_t"
+  (!type already_seen 1524)
+  (!srcfileloc  "ipa-prop.h" 629)
+  nil )
+ (!pair  "vec<ipa_polymorphic_call_context,va_gc>"
+  (!type already_seen 1094)
+  (!srcfileloc  "ipa-prop.h" 583)
+  nil )
+ (!pair  "ipa_jump_func"
+  (!type already_seen 1072)
+  (!srcfileloc  "ipa-prop.h" 582)
+  nil )
+ (!pair  "vec<ipa_jump_func,va_gc>"
+  (!type already_seen 1092)
+  (!srcfileloc  "ipa-prop.h" 582)
+  nil )
+ (!pair  "ipa_edge_args"
+  (!type already_seen 1090)
+  (!srcfileloc  "ipa-prop.h" 570)
+  nil )
+ (!pair  "ipa_vr"
+  (!type already_seen 1517)
+  (!srcfileloc  "ipa-prop.h" 555)
+  nil )
+ (!pair  "vec<ipa_vr,va_gc>"
+  (!type already_seen 1520)
+  (!srcfileloc  "ipa-prop.h" 555)
+  nil )
+ (!pair  "vec<ipa_bits*,va_gc>"
+  (!type already_seen 1518)
+  (!srcfileloc  "ipa-prop.h" 553)
+  nil )
+ (!pair  "ipa_agg_replacement_value"
+  (!type already_seen 1097)
+  (!srcfileloc  "ipa-prop.h" 551)
+  nil )
+ (!pair  "vec<ipa_polymorphic_call_context>"
+  (!type already_seen 1071)
+  (!srcfileloc  "ipa-prop.h" 344)
+  nil )
+ (!pair  "vec<tree>"
+  (!type already_seen 1070)
+  (!srcfileloc  "ipa-prop.h" 341)
+  nil )
+ (!pair  "ipa_param_descriptor"
+  (!type already_seen 1067)
+  (!srcfileloc  "ipa-prop.h" 332)
+  nil )
+ (!pair  "vec<ipa_param_descriptor,va_gc>"
+  (!type already_seen 1066)
+  (!srcfileloc  "ipa-prop.h" 332)
+  nil )
+ (!pair  "ipa_node_params"
+  (!type already_seen 1064)
+  (!srcfileloc  "ipa-prop.h" 325)
+  nil )
+ (!pair  "ipa_agg_jump_function_p"
+  (!type already_seen 1074)
+  (!srcfileloc  "ipa-prop.h" 144)
+  nil )
+ (!pair  "ipa_agg_jf_item"
+  (!type already_seen 1077)
+  (!srcfileloc  "ipa-prop.h" 139)
+  nil )
+ (!pair  "vec<ipa_agg_jf_item,va_gc>"
+  (!type already_seen 1076)
+  (!srcfileloc  "ipa-prop.h" 139)
+  nil )
+ (!pair  "value_range"
+  (!type already_seen 1515)
+  (!srcfileloc  "tree-vrp.h" 153)
+  nil )
+ (!pair  "value_range_base"
+  (!type already_seen 1081)
+  (!srcfileloc  "tree-vrp.h" 44)
+  nil )
+ (!pair  "TRAILING_WIDE_INT_ACCESSOR"
+  (!type already_seen 1514)
+  (!srcfileloc  "tree-ssanames.h" 52)
+  nil )
+ (!pair  "vec<gimple*,va_gc>"
+  (!type already_seen 1511)
+  (!srcfileloc  "tree-phinodes.c" 70)
+  nil )
+ (!pair  "unsigned"
+  (!type already_seen 1510)
+  (!srcfileloc  "cgraphclones.c" 520)
+  nil )
+ (!pair  "hash_map<char*,unsigned>"
+  (!type already_seen 1508)
+  (!srcfileloc  "cgraphclones.c" 520)
+  nil )
+ (!pair  "uid_range_p"
+  (!type already_seen 1503)
+  (!srcfileloc  "passes.c" 988)
+  nil )
+ (!pair  "char_ptr"
+  (!type already_seen 9)
+  (!srcfileloc  "passes.c" 870)
+  nil )
+ (!pair  "aarch64_cc"
+  (!type already_seen 2)
+  (!srcfileloc  "config/aarch64/aarch64.c" 1203)
+  nil )
+ (!pair  "use_optype_p"
+  (!type already_seen 450)
+  (!srcfileloc  "tree-ssa-operands.h" 42)
+  nil )
+ (!pair  "use_operand_p"
+  (!type already_seen 560)
+  (!srcfileloc  "tree-ssa-operands.h" 30)
+  nil )
+ (!pair  "ssa_use_operand_t"
+  (!type already_seen 559)
+  (!srcfileloc  "tree-ssa-operands.h" 30)
+  nil )
+ (!pair  "def_operand_p"
+  (!type already_seen 24)
+  (!srcfileloc  "tree-ssa-operands.h" 27)
+  nil )
+ (!pair  "scev_info_hasher"
+  (!type already_seen 1453)
+  (!srcfileloc  "tree-scalar-evolution.c" 328)
+  nil )
+ (!pair  "hash_table<scev_info_hasher>"
+  (!type already_seen 1454)
+  (!srcfileloc  "tree-scalar-evolution.c" 328)
+  nil )
+ (!pair  "mem_addr_template"
+  (!type already_seen 1414)
+  (!srcfileloc  "tree-ssa-address.c" 94)
+  nil )
+ (!pair  "vec<mem_addr_template,va_gc>"
+  (!type already_seen 1415)
+  (!srcfileloc  "tree-ssa-address.c" 94)
+  nil )
+ (!pair  "treemple"
+  (!type already_seen 1402)
+  (!srcfileloc  "tree-eh.c" 53)
+  nil )
+ (!pair  "tm_restart_hasher"
+  (!type already_seen 454)
+  (!srcfileloc  "gimple-ssa.h" 114)
+  nil )
+ (!pair  "hash_table<tm_restart_hasher>"
+  (!type already_seen 453)
+  (!srcfileloc  "gimple-ssa.h" 114)
+  nil )
+ (!pair  "ssa_name_hasher"
+  (!type already_seen 445)
+  (!srcfileloc  "gimple-ssa.h" 96)
+  nil )
+ (!pair  "hash_table<ssa_name_hasher>"
+  (!type already_seen 444)
+  (!srcfileloc  "gimple-ssa.h" 96)
+  nil )
+ (!pair  "hash_map<tree,tree>"
+  (!type already_seen 442)
+  (!srcfileloc  "gimple-ssa.h" 84)
+  nil )
+ (!pair  "elt_t"
+  (!type already_seen 1399)
+  (!srcfileloc  "gimple.h" 1552)
+  nil )
+ (!pair  "gimple_seq_node"
+  (!type already_seen 331)
+  (!srcfileloc  "gimple.h" 28)
+  nil )
+ (!pair  "tm_clone_hasher"
+  (!type already_seen 1393)
+  (!srcfileloc  "varasm.c" 6032)
+  nil )
+ (!pair  "hash_table<tm_clone_hasher>"
+  (!type already_seen 1394)
+  (!srcfileloc  "varasm.c" 6032)
+  nil )
+ (!pair  "const_rtx_desc_hasher"
+  (!type already_seen 974)
+  (!srcfileloc  "varasm.c" 3657)
+  nil )
+ (!pair  "hash_table<const_rtx_desc_hasher>"
+  (!type already_seen 973)
+  (!srcfileloc  "varasm.c" 3657)
+  nil )
+ (!pair  "tree_descriptor_hasher"
+  (!type already_seen 1035)
+  (!srcfileloc  "varasm.c" 2992)
+  nil )
+ (!pair  "hash_table<tree_descriptor_hasher>"
+  (!type already_seen 1389)
+  (!srcfileloc  "varasm.c" 2992)
+  nil )
+ (!pair  "object_block_hasher"
+  (!type already_seen 1385)
+  (!srcfileloc  "varasm.c" 199)
+  nil )
+ (!pair  "hash_table<object_block_hasher>"
+  (!type already_seen 1386)
+  (!srcfileloc  "varasm.c" 199)
+  nil )
+ (!pair  "section_hasher"
+  (!type already_seen 1382)
+  (!srcfileloc  "varasm.c" 188)
+  nil )
+ (!pair  "hash_table<section_hasher>"
+  (!type already_seen 1383)
+  (!srcfileloc  "varasm.c" 188)
+  nil )
+ (!pair  "tree_vec_map_cache_hasher"
+  (!type already_seen 1375)
+  (!srcfileloc  "tree.c" 261)
+  nil )
+ (!pair  "hash_table<tree_vec_map_cache_hasher>"
+  (!type already_seen 1376)
+  (!srcfileloc  "tree.c" 261)
+  nil )
+ (!pair  "tree_decl_map_cache_hasher"
+  (!type already_seen 908)
+  (!srcfileloc  "tree.c" 238)
+  nil )
+ (!pair  "hash_table<tree_decl_map_cache_hasher>"
+  (!type already_seen 1373)
+  (!srcfileloc  "tree.c" 238)
+  nil )
+ (!pair  "cl_option_hasher"
+  (!type already_seen 1370)
+  (!srcfileloc  "tree.c" 232)
+  nil )
+ (!pair  "hash_table<cl_option_hasher>"
+  (!type already_seen 1371)
+  (!srcfileloc  "tree.c" 232)
+  nil )
+ (!pair  "poly_int_cst_hasher"
+  (!type already_seen 1367)
+  (!srcfileloc  "tree.c" 216)
+  nil )
+ (!pair  "hash_table<poly_int_cst_hasher>"
+  (!type already_seen 1368)
+  (!srcfileloc  "tree.c" 216)
+  nil )
+ (!pair  "int_cst_hasher"
+  (!type already_seen 1364)
+  (!srcfileloc  "tree.c" 205)
+  nil )
+ (!pair  "hash_table<int_cst_hasher>"
+  (!type already_seen 1365)
+  (!srcfileloc  "tree.c" 205)
+  nil )
+ (!pair  "type_cache_hasher"
+  (!type already_seen 1361)
+  (!srcfileloc  "tree.c" 194)
+  nil )
+ (!pair  "hash_table<type_cache_hasher>"
+  (!type already_seen 1362)
+  (!srcfileloc  "tree.c" 194)
+  nil )
+ (!pair  "block_info"
+  (!type already_seen 1351)
+  (!srcfileloc  "reg-stack.c" 219)
+  nil )
+ (!pair  "stack_ptr"
+  (!type already_seen 1349)
+  (!srcfileloc  "reg-stack.c" 206)
+  nil )
+ (!pair  "fixup_vertex_p"
+  (!type already_seen 1343)
+  (!srcfileloc  "mcf.c" 103)
+  nil )
+ (!pair  "fixup_vertex_type"
+  (!type already_seen 1342)
+  (!srcfileloc  "mcf.c" 103)
+  nil )
+ (!pair  "fixup_edge_p"
+  (!type already_seen 1341)
+  (!srcfileloc  "mcf.c" 94)
+  nil )
+ (!pair  "fixup_edge_type"
+  (!type already_seen 1340)
+  (!srcfileloc  "mcf.c" 94)
+  nil )
+ (!pair  "libfunc_decl_hasher"
+  (!type already_seen 1333)
+  (!srcfileloc  "optabs-libfuncs.c" 720)
+  nil )
+ (!pair  "hash_table<libfunc_decl_hasher>"
+  (!type already_seen 1334)
+  (!srcfileloc  "optabs-libfuncs.c" 720)
+  nil )
+ (!pair  "vec_modify_pair_heap"
+  (!type already_seen 1323)
+  (!srcfileloc  "gcse.c" 621)
+  nil )
+ (!pair  "modify_pair"
+  (!type already_seen 1324)
+  (!srcfileloc  "gcse.c" 621)
+  nil )
+ (!pair  "vec<modify_pair>"
+  (!type already_seen 1323)
+  (!srcfileloc  "gcse.c" 621)
+  nil )
+ (!pair  "vec_rtx_heap"
+  (!type already_seen 1322)
+  (!srcfileloc  "gcse.c" 620)
+  nil )
+ (!pair  "vec<rtx_insn*>"
+  (!type already_seen 1322)
+  (!srcfileloc  "gcse.c" 620)
+  nil )
+ (!pair  "occr_t"
+  (!type already_seen 1317)
+  (!srcfileloc  "gcse.c" 306)
+  nil )
+ (!pair  "user_struct"
+  (!type already_seen 1313)
+  (!srcfileloc  "ggc-tests.c" 398)
+  nil )
+ (!pair  "test_node"
+  (!type already_seen 1311)
+  (!srcfileloc  "ggc-tests.c" 333)
+  nil )
+ (!pair  "some_other_subclass"
+  (!type already_seen 1309)
+  (!srcfileloc  "ggc-tests.c" 271)
+  nil )
+ (!pair  "some_subclass"
+  (!type already_seen 1307)
+  (!srcfileloc  "ggc-tests.c" 260)
+  nil )
+ (!pair  "example_base"
+  (!type already_seen 1305)
+  (!srcfileloc  "ggc-tests.c" 235)
+  nil )
+ (!pair  "test_of_union"
+  (!type already_seen 1302)
+  (!srcfileloc  "ggc-tests.c" 145)
+  nil )
+ (!pair  "test_other"
+  (!type already_seen 896)
+  (!srcfileloc  "ggc-tests.c" 139)
+  nil )
+ (!pair  "test_of_length"
+  (!type already_seen 1299)
+  (!srcfileloc  "ggc-tests.c" 79)
+  nil )
+ (!pair  "test_struct"
+  (!type already_seen 894)
+  (!srcfileloc  "ggc-tests.c" 53)
+  nil )
+ (!pair  "ehspec_hash_type"
+  (!type already_seen 1296)
+  (!srcfileloc  "except.c" 763)
+  nil )
+ (!pair  "ehspec_hasher"
+  (!type already_seen 1295)
+  (!srcfileloc  "except.c" 763)
+  nil )
+ (!pair  "hash_table<ehspec_hasher>"
+  (!type already_seen 1296)
+  (!srcfileloc  "except.c" 763)
+  nil )
+ (!pair  "ttypes_hash_type"
+  (!type already_seen 1294)
+  (!srcfileloc  "except.c" 728)
+  nil )
+ (!pair  "ttypes_filter_hasher"
+  (!type already_seen 1293)
+  (!srcfileloc  "except.c" 728)
+  nil )
+ (!pair  "hash_table<ttypes_filter_hasher>"
+  (!type already_seen 1294)
+  (!srcfileloc  "except.c" 728)
+  nil )
+ (!pair  "action_hash_type"
+  (!type already_seen 1290)
+  (!srcfileloc  "except.c" 209)
+  nil )
+ (!pair  "action_record_hasher"
+  (!type already_seen 1289)
+  (!srcfileloc  "except.c" 209)
+  nil )
+ (!pair  "hash_table<action_record_hasher>"
+  (!type already_seen 1290)
+  (!srcfileloc  "except.c" 209)
+  nil )
+ (!pair  "tree_hash"
+  (!type already_seen 1287)
+  (!srcfileloc  "except.c" 150)
+  nil )
+ (!pair  "hash_map<tree_hash,tree>"
+  (!type already_seen 1285)
+  (!srcfileloc  "except.c" 150)
+  nil )
+ (!pair  "initial_value_pair"
+  (!type already_seen 1242)
+  (!srcfileloc  "function.c" 1259)
+  nil )
+ (!pair  "temp_address_hasher"
+  (!type already_seen 1276)
+  (!srcfileloc  "function.c" 602)
+  nil )
+ (!pair  "hash_table<temp_address_hasher>"
+  (!type already_seen 1277)
+  (!srcfileloc  "function.c" 602)
+  nil )
+ (!pair  "insn_cache_hasher"
+  (!type already_seen 1272)
+  (!srcfileloc  "function.c" 126)
+  nil )
+ (!pair  "hash_table<insn_cache_hasher>"
+  (!type already_seen 1273)
+  (!srcfileloc  "function.c" 126)
+  nil )
+ (!pair  "by_pieces_constfn"
+  (!type already_seen 2)
+  (!srcfileloc  "expr.h" 110)
+  nil )
+ (!pair  "sepops"
+  (!type already_seen 1271)
+  (!srcfileloc  "expr.h" 55)
+  nil )
+ (!pair  "duplicate_eh_regions_map"
+  (!type already_seen 2)
+  (!srcfileloc  "except.h" 247)
+  nil )
+ (!pair  "hash_map<gimple*,int>"
+  (!type already_seen 427)
+  (!srcfileloc  "except.h" 204)
+  nil )
+ (!pair  "vec<eh_landing_pad,va_gc>"
+  (!type already_seen 425)
+  (!srcfileloc  "except.h" 200)
+  nil )
+ (!pair  "vec<eh_region,va_gc>"
+  (!type already_seen 423)
+  (!srcfileloc  "except.h" 197)
+  nil )
+ (!pair  "eh_region"
+  (!type already_seen 410)
+  (!srcfileloc  "except.h" 184)
+  nil )
+ (!pair  "eh_catch"
+  (!type already_seen 414)
+  (!srcfileloc  "except.h" 183)
+  nil )
+ (!pair  "eh_landing_pad"
+  (!type already_seen 418)
+  (!srcfileloc  "except.h" 182)
+  nil )
+ (!pair  "twi"
+  (!type already_seen 889)
+  (!srcfileloc  "emit-rtl.c" 762)
+  nil )
+ (!pair  "const_fixed_hasher"
+  (!type already_seen 1261)
+  (!srcfileloc  "emit-rtl.c" 187)
+  nil )
+ (!pair  "hash_table<const_fixed_hasher>"
+  (!type already_seen 1262)
+  (!srcfileloc  "emit-rtl.c" 187)
+  nil )
+ (!pair  "const_double_hasher"
+  (!type already_seen 1258)
+  (!srcfileloc  "emit-rtl.c" 178)
+  nil )
+ (!pair  "hash_table<const_double_hasher>"
+  (!type already_seen 1259)
+  (!srcfileloc  "emit-rtl.c" 178)
+  nil )
+ (!pair  "reg_attr_hasher"
+  (!type already_seen 1255)
+  (!srcfileloc  "emit-rtl.c" 169)
+  nil )
+ (!pair  "hash_table<reg_attr_hasher>"
+  (!type already_seen 1256)
+  (!srcfileloc  "emit-rtl.c" 169)
+  nil )
+ (!pair  "const_poly_int_hasher"
+  (!type already_seen 1252)
+  (!srcfileloc  "emit-rtl.c" 160)
+  nil )
+ (!pair  "hash_table<const_poly_int_hasher>"
+  (!type already_seen 1253)
+  (!srcfileloc  "emit-rtl.c" 160)
+  nil )
+ (!pair  "const_wide_int_hasher"
+  (!type already_seen 1249)
+  (!srcfileloc  "emit-rtl.c" 150)
+  nil )
+ (!pair  "hash_table<const_wide_int_hasher>"
+  (!type already_seen 1250)
+  (!srcfileloc  "emit-rtl.c" 150)
+  nil )
+ (!pair  "const_int_hasher"
+  (!type already_seen 1246)
+  (!srcfileloc  "emit-rtl.c" 142)
+  nil )
+ (!pair  "hash_table<const_int_hasher>"
+  (!type already_seen 1247)
+  (!srcfileloc  "emit-rtl.c" 142)
+  nil )
+ (!pair  "vec<temp_slot_p,va_gc>"
+  (!type already_seen 1243)
+  (!srcfileloc  "emit-rtl.h" 136)
+  nil )
+ (!pair  "rtx_note"
+  (!type already_seen 740)
+  (!srcfileloc  "emit-rtl.h" 116)
+  nil )
+ (!pair  "temp_slot_p"
+  (!type already_seen 1237)
+  (!srcfileloc  "emit-rtl.h" 24)
+  nil )
+ (!pair  "elem_op_func"
+  (!type already_seen 2)
+  (!srcfileloc  "tree-vect-generic.c" 123)
+  nil )
+ (!pair  "loc_list_hash_type"
+  (!type already_seen 1233)
+  (!srcfileloc  "dwarf2out.c" 31132)
+  nil )
+ (!pair  "loc_list_hasher"
+  (!type already_seen 1232)
+  (!srcfileloc  "dwarf2out.c" 31132)
+  nil )
+ (!pair  "hash_table<loc_list_hasher>"
+  (!type already_seen 1233)
+  (!srcfileloc  "dwarf2out.c" 31132)
+  nil )
+ (!pair  "macinfo_hash_type"
+  (!type already_seen 1230)
+  (!srcfileloc  "dwarf2out.c" 28212)
+  nil )
+ (!pair  "macinfo_entry_hasher"
+  (!type already_seen 1229)
+  (!srcfileloc  "dwarf2out.c" 28212)
+  nil )
+ (!pair  "hash_table<macinfo_entry_hasher>"
+  (!type already_seen 1230)
+  (!srcfileloc  "dwarf2out.c" 28212)
+  nil )
+ (!pair  "inline_entry_data_hasher"
+  (!type already_seen 1226)
+  (!srcfileloc  "dwarf2out.c" 23655)
+  nil )
+ (!pair  "hash_table<inline_entry_data_hasher>"
+  (!type already_seen 1227)
+  (!srcfileloc  "dwarf2out.c" 23655)
+  nil )
+ (!pair  "external_ref_hash_type"
+  (!type already_seen 1219)
+  (!srcfileloc  "dwarf2out.c" 8934)
+  nil )
+ (!pair  "external_ref_hasher"
+  (!type already_seen 1218)
+  (!srcfileloc  "dwarf2out.c" 8934)
+  nil )
+ (!pair  "hash_table<external_ref_hasher>"
+  (!type already_seen 1219)
+  (!srcfileloc  "dwarf2out.c" 8934)
+  nil )
+ (!pair  "decl_hash_type"
+  (!type already_seen 1216)
+  (!srcfileloc  "dwarf2out.c" 8177)
+  nil )
+ (!pair  "decl_table_entry_hasher"
+  (!type already_seen 1215)
+  (!srcfileloc  "dwarf2out.c" 8177)
+  nil )
+ (!pair  "hash_table<decl_table_entry_hasher>"
+  (!type already_seen 1216)
+  (!srcfileloc  "dwarf2out.c" 8177)
+  nil )
+ (!pair  "sym_off_pair"
+  (!type already_seen 1211)
+  (!srcfileloc  "dwarf2out.c" 5790)
+  nil )
+ (!pair  "hash_map<tree,sym_off_pair>"
+  (!type already_seen 1212)
+  (!srcfileloc  "dwarf2out.c" 5790)
+  nil )
+ (!pair  "addr_hasher"
+  (!type already_seen 1208)
+  (!srcfileloc  "dwarf2out.c" 4950)
+  nil )
+ (!pair  "hash_table<addr_hasher>"
+  (!type already_seen 1209)
+  (!srcfileloc  "dwarf2out.c" 4950)
+  nil )
+ (!pair  "vec<die_arg_entry,va_gc>"
+  (!type already_seen 1202)
+  (!srcfileloc  "dwarf2out.c" 3602)
+  nil )
+ (!pair  "dw_ranges_by_label"
+  (!type already_seen 1160)
+  (!srcfileloc  "dwarf2out.c" 3585)
+  nil )
+ (!pair  "vec<dw_ranges_by_label,va_gc>"
+  (!type already_seen 1200)
+  (!srcfileloc  "dwarf2out.c" 3585)
+  nil )
+ (!pair  "dw_ranges"
+  (!type already_seen 1158)
+  (!srcfileloc  "dwarf2out.c" 3582)
+  nil )
+ (!pair  "vec<dw_ranges,va_gc>"
+  (!type already_seen 1198)
+  (!srcfileloc  "dwarf2out.c" 3582)
+  nil )
+ (!pair  "vec<macinfo_entry,va_gc>"
+  (!type already_seen 1196)
+  (!srcfileloc  "dwarf2out.c" 3572)
+  nil )
+ (!pair  "vec<pubname_entry,va_gc>"
+  (!type already_seen 1194)
+  (!srcfileloc  "dwarf2out.c" 3564)
+  nil )
+ (!pair  "vec<dw_line_info_table*,va_gc>"
+  (!type already_seen 1192)
+  (!srcfileloc  "dwarf2out.c" 3556)
+  nil )
+ (!pair  "dw_line_info_table"
+  (!type already_seen 1154)
+  (!srcfileloc  "dwarf2out.c" 3549)
+  nil )
+ (!pair  "dw_loc_list_hasher"
+  (!type already_seen 1189)
+  (!srcfileloc  "dwarf2out.c" 3531)
+  nil )
+ (!pair  "hash_table<dw_loc_list_hasher>"
+  (!type already_seen 1190)
+  (!srcfileloc  "dwarf2out.c" 3531)
+  nil )
+ (!pair  "cached_dw_loc_list"
+  (!type already_seen 1188)
+  (!srcfileloc  "dwarf2out.c" 3519)
+  nil )
+ (!pair  "decl_loc_hasher"
+  (!type already_seen 1185)
+  (!srcfileloc  "dwarf2out.c" 3500)
+  nil )
+ (!pair  "hash_table<decl_loc_hasher>"
+  (!type already_seen 1186)
+  (!srcfileloc  "dwarf2out.c" 3500)
+  nil )
+ (!pair  "var_loc_list"
+  (!type already_seen 1182)
+  (!srcfileloc  "dwarf2out.c" 3478)
+  nil )
+ (!pair  "die_arg_entry"
+  (!type already_seen 1179)
+  (!srcfileloc  "dwarf2out.c" 3439)
+  nil )
+ (!pair  "block_die_hasher"
+  (!type already_seen 1176)
+  (!srcfileloc  "dwarf2out.c" 3434)
+  nil )
+ (!pair  "hash_table<block_die_hasher>"
+  (!type already_seen 1177)
+  (!srcfileloc  "dwarf2out.c" 3434)
+  nil )
+ (!pair  "variable_value_hasher"
+  (!type already_seen 1173)
+  (!srcfileloc  "dwarf2out.c" 3424)
+  nil )
+ (!pair  "hash_table<variable_value_hasher>"
+  (!type already_seen 1174)
+  (!srcfileloc  "dwarf2out.c" 3424)
+  nil )
+ (!pair  "vec<dw_die_ref,va_gc>"
+  (!type already_seen 1170)
+  (!srcfileloc  "dwarf2out.c" 3411)
+  nil )
+ (!pair  "decl_die_hasher"
+  (!type already_seen 1167)
+  (!srcfileloc  "dwarf2out.c" 3407)
+  nil )
+ (!pair  "hash_table<decl_die_hasher>"
+  (!type already_seen 1168)
+  (!srcfileloc  "dwarf2out.c" 3407)
+  nil )
+ (!pair  "dwarf_file_hasher"
+  (!type already_seen 1164)
+  (!srcfileloc  "dwarf2out.c" 3396)
+  nil )
+ (!pair  "hash_table<dwarf_file_hasher>"
+  (!type already_seen 1165)
+  (!srcfileloc  "dwarf2out.c" 3396)
+  nil )
+ (!pair  "skeleton_chain_node"
+  (!type already_seen 1163)
+  (!srcfileloc  "dwarf2out.c" 3190)
+  nil )
+ (!pair  "limbo_die_node"
+  (!type already_seen 1161)
+  (!srcfileloc  "dwarf2out.c" 3182)
+  nil )
+ (!pair  "macinfo_entry"
+  (!type already_seen 1159)
+  (!srcfileloc  "dwarf2out.c" 3154)
+  nil )
+ (!pair  "pubname_entry"
+  (!type already_seen 1157)
+  (!srcfileloc  "dwarf2out.c" 3132)
+  nil )
+ (!pair  "die_node"
+  (!type already_seen 487)
+  (!srcfileloc  "dwarf2out.c" 3102)
+  nil )
+ (!pair  "vec<dw_attr_node,va_gc>"
+  (!type already_seen 493)
+  (!srcfileloc  "dwarf2out.c" 3080)
+  nil )
+ (!pair  "comdat_type_node"
+  (!type already_seen 490)
+  (!srcfileloc  "dwarf2out.c" 3077)
+  nil )
+ (!pair  "dw_attr_node"
+  (!type already_seen 494)
+  (!srcfileloc  "dwarf2out.c" 3066)
+  nil )
+ (!pair  "vec<dw_line_info_entry,va_gc>"
+  (!type already_seen 1152)
+  (!srcfileloc  "dwarf2out.c" 3016)
+  nil )
+ (!pair  "dw_line_info_entry"
+  (!type already_seen 1151)
+  (!srcfileloc  "dwarf2out.c" 2974)
+  nil )
+ (!pair  "dw_offset"
+  (!type already_seen 2)
+  (!srcfileloc  "dwarf2out.c" 2928)
+  nil )
+ (!pair  "dw_loc_list_node"
+  (!type already_seen 485)
+  (!srcfileloc  "dwarf2out.c" 1331)
+  nil )
+ (!pair  "addr_table_entry"
+  (!type already_seen 481)
+  (!srcfileloc  "dwarf2out.c" 1305)
+  nil )
+ (!pair  "var_loc_view"
+  (!type already_seen 2)
+  (!srcfileloc  "dwarf2out.c" 1297)
+  nil )
+ (!pair  "indirect_string_hasher"
+  (!type already_seen 1148)
+  (!srcfileloc  "dwarf2out.c" 231)
+  nil )
+ (!pair  "hash_table<indirect_string_hasher>"
+  (!type already_seen 1149)
+  (!srcfileloc  "dwarf2out.c" 231)
+  nil )
+ (!pair  "vec<dw_fde_ref,va_gc>"
+  (!type already_seen 1146)
+  (!srcfileloc  "dwarf2out.c" 213)
+  nil )
+ (!pair  "reg_saved_in_data"
+  (!type already_seen 1139)
+  (!srcfileloc  "dwarf2cfi.c" 192)
+  nil )
+ (!pair  "dw_cfi_row"
+  (!type already_seen 1137)
+  (!srcfileloc  "dwarf2cfi.c" 190)
+  nil )
+ (!pair  "dw_cfa_location"
+  (!type already_seen 512)
+  (!srcfileloc  "dwarf2cfi.c" 66)
+  nil )
+ (!pair  "hash_map<char*,tree>"
+  (!type already_seen 1135)
+  (!srcfileloc  "dwarf2asm.c" 865)
+  nil )
+ (!pair  "dw_val_node"
+  (!type already_seen 478)
+  (!srcfileloc  "dwarf2out.h" 256)
+  nil )
+ (!pair  "dw_discr_value"
+  (!type already_seen 507)
+  (!srcfileloc  "dwarf2out.h" 235)
+  nil )
+ (!pair  "dw_vec_const"
+  (!type already_seen 499)
+  (!srcfileloc  "dwarf2out.h" 215)
+  nil )
+ (!pair  "dw_fde_ref"
+  (!type already_seen 469)
+  (!srcfileloc  "dwarf2out.h" 70)
+  nil )
+ (!pair  "cfi_vec"
+  (!type already_seen 471)
+  (!srcfileloc  "dwarf2out.h" 68)
+  nil )
+ (!pair  "vec<dw_cfi_ref,va_gc>"
+  (!type already_seen 472)
+  (!srcfileloc  "dwarf2out.h" 68)
+  nil )
+ (!pair  "dw_cfi_oprnd"
+  (!type already_seen 475)
+  (!srcfileloc  "dwarf2out.h" 57)
+  nil )
+ (!pair  "wide_int_ptr"
+  (!type already_seen 495)
+  (!srcfileloc  "dwarf2out.h" 33)
+  nil )
+ (!pair  "dw_discr_list_ref"
+  (!type already_seen 509)
+  (!srcfileloc  "dwarf2out.h" 32)
+  nil )
+ (!pair  "dw_loc_list_ref"
+  (!type already_seen 484)
+  (!srcfileloc  "dwarf2out.h" 31)
+  nil )
+ (!pair  "dw_loc_descr_ref"
+  (!type already_seen 476)
+  (!srcfileloc  "dwarf2out.h" 30)
+  nil )
+ (!pair  "dw_cfi_ref"
+  (!type already_seen 473)
+  (!srcfileloc  "dwarf2out.h" 29)
+  nil )
+ (!pair  "dw_val_ref"
+  (!type already_seen 479)
+  (!srcfileloc  "dwarf2out.h" 28)
+  nil )
+ (!pair  "const_dw_die_ref"
+  (!type already_seen 486)
+  (!srcfileloc  "dwarf2out.h" 26)
+  nil )
+ (!pair  "dw_die_ref"
+  (!type already_seen 486)
+  (!srcfileloc  "dwarf2out.h" 25)
+  nil )
+ (!pair  "odr_type"
+  (!type already_seen 1128)
+  (!srcfileloc  "ipa-utils.h" 56)
+  nil )
+ (!pair  "odr_type_d"
+  (!type already_seen 1127)
+  (!srcfileloc  "ipa-utils.h" 56)
+  nil )
+ (!pair  "ipa_vr_ggc_hash_traits"
+  (!type already_seen 1059)
+  (!srcfileloc  "ipa-prop.c" 150)
+  nil )
+ (!pair  "hash_table<ipa_vr_ggc_hash_traits>"
+  (!type already_seen 1060)
+  (!srcfileloc  "ipa-prop.c" 150)
+  nil )
+ (!pair  "ipa_bit_ggc_hash_traits"
+  (!type already_seen 1056)
+  (!srcfileloc  "ipa-prop.c" 105)
+  nil )
+ (!pair  "hash_table<ipa_bit_ggc_hash_traits>"
+  (!type already_seen 1057)
+  (!srcfileloc  "ipa-prop.c" 105)
+  nil )
+ (!pair  "function_version_hasher"
+  (!type already_seen 1052)
+  (!srcfileloc  "cgraph.c" 118)
+  nil )
+ (!pair  "hash_table<function_version_hasher>"
+  (!type already_seen 1053)
+  (!srcfileloc  "cgraph.c" 118)
+  nil )
+ (!pair  "vec<alias_set_entry*,va_gc>"
+  (!type already_seen 1046)
+  (!srcfileloc  "alias.c" 278)
+  nil )
+ (!pair  "int"
+  (!type already_seen 428)
+  (!srcfileloc  "alias.c" 147)
+  nil )
+ (!pair  "alias_set_hash"
+  (!type already_seen 1041)
+  (!srcfileloc  "alias.c" 147)
+  nil )
+ (!pair  "hash_map<alias_set_hash,int>"
+  (!type already_seen 1042)
+  (!srcfileloc  "alias.c" 147)
+  nil )
+ (!pair  "hash_set<cgraph_node*>"
+  (!type already_seen 1033)
+  (!srcfileloc  "cgraph.h" 2344)
+  nil )
+ (!pair  "FILE"
+  (!type already_seen 1032)
+  (!srcfileloc  "cgraph.h" 2337)
+  nil )
+ (!pair  "symbol_priority_map"
+  (!type already_seen 998)
+  (!srcfileloc  "cgraph.h" 2335)
+  nil )
+ (!pair  "hash_map<symtab_node*,symbol_priority_map>"
+  (!type already_seen 1030)
+  (!srcfileloc  "cgraph.h" 2335)
+  nil )
+ (!pair  "asmname_hasher"
+  (!type already_seen 1022)
+  (!srcfileloc  "cgraph.h" 2332)
+  nil )
+ (!pair  "hash_table<asmname_hasher>"
+  (!type already_seen 1028)
+  (!srcfileloc  "cgraph.h" 2332)
+  nil )
+ (!pair  "section_name_hasher"
+  (!type already_seen 997)
+  (!srcfileloc  "cgraph.h" 2329)
+  nil )
+ (!pair  "hash_table<section_name_hasher>"
+  (!type already_seen 1026)
+  (!srcfileloc  "cgraph.h" 2329)
+  nil )
+ (!pair  "cgraph_2node_hook_list"
+  (!type already_seen 1020)
+  (!srcfileloc  "cgraph.h" 2237)
+  nil )
+ (!pair  "cgraph_2edge_hook_list"
+  (!type already_seen 1018)
+  (!srcfileloc  "cgraph.h" 2231)
+  nil )
+ (!pair  "varpool_node_hook_list"
+  (!type already_seen 1016)
+  (!srcfileloc  "cgraph.h" 2210)
+  nil )
+ (!pair  "cgraph_node_hook_list"
+  (!type already_seen 1014)
+  (!srcfileloc  "cgraph.h" 2203)
+  nil )
+ (!pair  "cgraph_edge_hook_list"
+  (!type already_seen 1012)
+  (!srcfileloc  "cgraph.h" 2196)
+  nil )
+ (!pair  "symbol_table"
+  (!type already_seen 1023)
+  (!srcfileloc  "cgraph.h" 2075)
+  nil )
+ (!pair  "cgraph_2node_hook"
+  (!type already_seen 2)
+  (!srcfileloc  "cgraph.h" 2025)
+  nil )
+ (!pair  "cgraph_2edge_hook"
+  (!type already_seen 2)
+  (!srcfileloc  "cgraph.h" 2024)
+  nil )
+ (!pair  "varpool_node_hook"
+  (!type already_seen 2)
+  (!srcfileloc  "cgraph.h" 2023)
+  nil )
+ (!pair  "cgraph_node_hook"
+  (!type already_seen 2)
+  (!srcfileloc  "cgraph.h" 2022)
+  nil )
+ (!pair  "cgraph_edge_hook"
+  (!type already_seen 2)
+  (!srcfileloc  "cgraph.h" 2021)
+  nil )
+ (!pair  "asm_node"
+  (!type already_seen 1010)
+  (!srcfileloc  "cgraph.h" 1988)
+  nil )
+ (!pair  "availability"
+  (!type already_seen 1009)
+  (!srcfileloc  "cgraph.h" 1870)
+  nil )
+ (!pair  "cgraph_indirect_call_info"
+  (!type already_seen 803)
+  (!srcfileloc  "cgraph.h" 1772)
+  nil )
+ (!pair  "gcall"
+  (!type already_seen 760)
+  (!srcfileloc  "cgraph.h" 1769)
+  nil )
+ (!pair  "ipa_polymorphic_call_context"
+  (!type already_seen 804)
+  (!srcfileloc  "cgraph.h" 1553)
+  nil )
+ (!pair  "varpool_node_set"
+  (!type already_seen 1006)
+  (!srcfileloc  "cgraph.h" 1500)
+  nil )
+ (!pair  "cgraph_node_set"
+  (!type already_seen 1004)
+  (!srcfileloc  "cgraph.h" 1499)
+  nil )
+ (!pair  "cgraph_node_set_def"
+  (!type already_seen 1003)
+  (!srcfileloc  "cgraph.h" 1499)
+  nil )
+ (!pair  "cgraph_thunk_info"
+  (!type already_seen 824)
+  (!srcfileloc  "cgraph.h" 1426)
+  nil )
+ (!pair  "cgraph_clone_info"
+  (!type already_seen 819)
+  (!srcfileloc  "cgraph.h" 1425)
+  nil )
+ (!pair  "cgraph_global_info"
+  (!type already_seen 816)
+  (!srcfileloc  "cgraph.h" 1423)
+  nil )
+ (!pair  "cgraph_local_info"
+  (!type already_seen 815)
+  (!srcfileloc  "cgraph.h" 1422)
+  nil )
+ (!pair  "vec<ipa_opt_pass>"
+  (!type already_seen 812)
+  (!srcfileloc  "cgraph.h" 1420)
+  nil )
+ (!pair  "cgraph_simd_clone"
+  (!type already_seen 809)
+  (!srcfileloc  "cgraph.h" 1413)
+  nil )
+ (!pair  "cgraph_edge_hasher"
+  (!type already_seen 807)
+  (!srcfileloc  "cgraph.h" 1407)
+  nil )
+ (!pair  "hash_table<cgraph_edge_hasher>"
+  (!type already_seen 806)
+  (!srcfileloc  "cgraph.h" 1407)
+  nil )
+ (!pair  "vec<cgraph_edge*>"
+  (!type already_seen 1002)
+  (!srcfileloc  "cgraph.h" 1164)
+  nil )
+ (!pair  "cgraph_edge"
+  (!type already_seen 801)
+  (!srcfileloc  "cgraph.h" 1140)
+  nil )
+ (!pair  "cgraph_function_version_info"
+  (!type already_seen 1000)
+  (!srcfileloc  "cgraph.h" 864)
+  nil )
+ (!pair  "cgraph_simd_clone_arg"
+  (!type already_seen 811)
+  (!srcfileloc  "cgraph.h" 854)
+  nil )
+ (!pair  "vec<ipa_replace_map*,va_gc>"
+  (!type already_seen 821)
+  (!srcfileloc  "cgraph.h" 748)
+  nil )
+ (!pair  "cgraph_node"
+  (!type already_seen 797)
+  (!srcfileloc  "cgraph.h" 727)
+  nil )
+ (!pair  "section_hash_entry"
+  (!type already_seen 397)
+  (!srcfileloc  "cgraph.h" 593)
+  nil )
+ (!pair  "ipa_ref_list"
+  (!type already_seen 370)
+  (!srcfileloc  "cgraph.h" 577)
+  nil )
+ (!pair  "ipa_ref"
+  (!type already_seen 374)
+  (!srcfileloc  "cgraph.h" 141)
+  nil )
+ (!pair  "ipa_opt_pass"
+  (!type already_seen 813)
+  (!srcfileloc  "cgraph.h" 37)
+  nil )
+ (!pair  "ipa_opt_pass_d"
+  (!type already_seen 814)
+  (!srcfileloc  "cgraph.h" 37)
+  nil )
+ (!pair  "vec<ipa_ref_ptr>"
+  (!type already_seen 376)
+  (!srcfileloc  "ipa-ref.h" 134)
+  nil )
+ (!pair  "vec<ipa_ref_t,va_gc>"
+  (!type already_seen 373)
+  (!srcfileloc  "ipa-ref.h" 131)
+  nil )
+ (!pair  "ipa_ref_ptr"
+  (!type already_seen 375)
+  (!srcfileloc  "ipa-ref.h" 68)
+  nil )
+ (!pair  "ipa_ref_t"
+  (!type already_seen 374)
+  (!srcfileloc  "ipa-ref.h" 67)
+  nil )
+ (!pair  "symtab_node"
+  (!type already_seen 369)
+  (!srcfileloc  "ipa-ref.h" 58)
+  nil )
+ (!pair  "__assert_gimple_bb_smaller_rtl_bb"
+  (!type array 2003 nil  gc_unused "(int) sizeof (struct rtl_bb_info)\n               - (int) sizeof (struct gimple_bb_info)" 
+   (!type already_seen 2)
+  )
+  (!srcfileloc  "basic-block.h" 161)
+  nil )
+ (!pair  "vec<edge,va_gc>"
+  (!type already_seen 321)
+  (!srcfileloc  "basic-block.h" 118)
+  nil )
+ (!pair  "edge_def"
+  (!type already_seen 323)
+  (!srcfileloc  "basic-block.h" 52)
+  nil )
+ (!pair  "cselib_expand_callback"
+  (!type already_seen 2)
+  (!srcfileloc  "cselib.h" 88)
+  nil )
+ (!pair  "sreal"
+  (!type already_seen 992)
+  (!srcfileloc  "profile-count.h" 1113)
+  nil )
+ (!pair  "profile_probability"
+  (!type already_seen 991)
+  (!srcfileloc  "profile-count.h" 582)
+  nil )
+ (!pair  "profile_count"
+  (!type already_seen 350)
+  (!srcfileloc  "cfg.h" 76)
+  nil )
+ (!pair  "vec<basic_block,va_gc>"
+  (!type already_seen 435)
+  (!srcfileloc  "cfg.h" 45)
+  nil )
+ (!pair  "loop_exit_hasher"
+  (!type already_seen 459)
+  (!srcfileloc  "cfgloop.h" 322)
+  nil )
+ (!pair  "hash_table<loop_exit_hasher>"
+  (!type already_seen 458)
+  (!srcfileloc  "cfgloop.h" 322)
+  nil )
+ (!pair  "vec<loop_p,va_gc>"
+  (!type already_seen 328)
+  (!srcfileloc  "cfgloop.h" 140)
+  nil )
+ (!pair  "loop_p"
+  (!type already_seen 324)
+  (!srcfileloc  "cfgloop.h" 94)
+  nil )
+ (!pair  "noswitch_section_callback"
+  (!type already_seen 2)
+  (!srcfileloc  "output.h" 475)
+  nil )
+ (!pair  "unnamed_section_callback"
+  (!type already_seen 2)
+  (!srcfileloc  "output.h" 449)
+  nil )
+ (!pair  "__gcc_host_wide_int__"
+  (!type already_seen 2)
+  (!srcfileloc  "hwint.h" 77)
+  nil )
+ (!pair  "used_type_hasher"
+  (!type already_seen 980)
+  (!srcfileloc  "function.h" 439)
+  nil )
+ (!pair  "hash_table<used_type_hasher>"
+  (!type already_seen 981)
+  (!srcfileloc  "function.h" 439)
+  nil )
+ (!pair  "hash_set<tree>"
+  (!type already_seen 468)
+  (!srcfileloc  "function.h" 275)
+  nil )
+ (!pair  "vec<call_site_record,va_gc>"
+  (!type already_seen 966)
+  (!srcfileloc  "function.h" 147)
+  nil )
+ (!pair  "vec<uchar,va_gc>"
+  (!type already_seen 431)
+  (!srcfileloc  "function.h" 145)
+  nil )
+ (!pair  "rtx_code_label"
+  (!type already_seen 421)
+  (!srcfileloc  "function.h" 140)
+  nil )
+ (!pair  "call_site_record"
+  (!type already_seen 965)
+  (!srcfileloc  "function.h" 134)
+  nil )
+ (!pair  "vec<rtx_insn*,va_gc>"
+  (!type already_seen 961)
+  (!srcfileloc  "function.h" 131)
+  nil )
+ (!pair  "ht_cb"
+  (!type already_seen 2)
+  (!srcfileloc  "../libcpp/include/symtab.h" 89)
+  nil )
+ (!pair  "hashnode"
+  (!type already_seen 16)
+  (!srcfileloc  "../libcpp/include/symtab.h" 41)
+  nil )
+ (!pair  "cpp_hash_table"
+  (!type already_seen 953)
+  (!srcfileloc  "../libcpp/include/symtab.h" 40)
+  nil )
+ (!pair  "ht_identifier_ptr"
+  (!type already_seen 16)
+  (!srcfileloc  "../libcpp/include/symtab.h" 30)
+  nil )
+ (!pair  "ht_identifier"
+  (!type already_seen 15)
+  (!srcfileloc  "../libcpp/include/symtab.h" 29)
+  nil )
+ (!pair  "libfunc_hasher"
+  (!type already_seen 606)
+  (!srcfileloc  "libfuncs.h" 61)
+  nil )
+ (!pair  "hash_table<libfunc_hasher>"
+  (!type already_seen 605)
+  (!srcfileloc  "libfuncs.h" 61)
+  nil )
+ (!pair  "builtin_info_type"
+  (!type already_seen 948)
+  (!srcfileloc  "tree-core.h" 2177)
+  nil )
+ (!pair  "alias_pair"
+  (!type already_seen 936)
+  (!srcfileloc  "tree-core.h" 2142)
+  nil )
+ (!pair  "vec<alias_pair,va_gc>"
+  (!type already_seen 950)
+  (!srcfileloc  "tree-core.h" 2142)
+  nil )
+ (!pair  "record_layout_info"
+  (!type already_seen 939)
+  (!srcfileloc  "tree-core.h" 2048)
+  nil )
+ (!pair  "vec<tree,va_gc>"
+  (!type already_seen 97)
+  (!srcfileloc  "tree-core.h" 1540)
+  nil )
+ (!pair  "constructor_elt"
+  (!type already_seen 570)
+  (!srcfileloc  "tree-core.h" 1415)
+  nil )
+ (!pair  "vec<constructor_elt,va_gc>"
+  (!type already_seen 569)
+  (!srcfileloc  "tree-core.h" 1415)
+  nil )
+ (!pair  "walk_tree_lh"
+  (!type already_seen 2)
+  (!srcfileloc  "tree-core.h" 907)
+  nil )
+ (!pair  "walk_tree_fn"
+  (!type already_seen 2)
+  (!srcfileloc  "tree-core.h" 903)
+  nil )
+ (!pair  "priority_type"
+  (!type already_seen 2)
+  (!srcfileloc  "tree-core.h" 900)
+  nil )
+ (!pair  "poly_int_traits"
+  (!type already_seen 932)
+  (!srcfileloc  "tree.h" 5768)
+  nil )
+ (!pair  "typename"
+  (!type already_seen 932)
+  (!srcfileloc  "tree.h" 5768)
+  nil )
+ (!pair  "widest2_int_cst"
+  (!type already_seen 929)
+  (!srcfileloc  "tree.h" 5518)
+  nil )
+ (!pair  "generic_wide_int<wi::extended_tree<WIDE_INT_MAX_PRECISION*>>"
+  (!type already_seen 929)
+  (!srcfileloc  "tree.h" 5517)
+  nil )
+ (!pair  "unextended"
+  (!type already_seen 928)
+  (!srcfileloc  "tree.h" 5510)
+  nil )
+ (!pair  "generic_wide_int<unextended_tree>"
+  (!type already_seen 928)
+  (!srcfileloc  "tree.h" 5510)
+  nil )
+ (!pair  "extended"
+  (!type already_seen 925)
+  (!srcfileloc  "tree.h" 5503)
+  nil )
+ (!pair  "N"
+  (!type already_seen 927)
+  (!srcfileloc  "tree.h" 5503)
+  nil )
+ (!pair  "extended_tree<N"
+  (!type already_seen 926)
+  (!srcfileloc  "tree.h" 5503)
+  nil )
+ (!pair  "generic_wide_int<extended_tree<N>>"
+  (!type already_seen 925)
+  (!srcfileloc  "tree.h" 5503)
+  nil )
+ (!pair  "tree_to_poly_wide_ref"
+  (!type already_seen 923)
+  (!srcfileloc  "tree.h" 5494)
+  nil )
+ (!pair  "unextended_tree"
+  (!type already_seen 912)
+  (!srcfileloc  "tree.h" 5493)
+  nil )
+ (!pair  "generic_wide_int<unextended_tree"
+  (!type already_seen 924)
+  (!srcfileloc  "tree.h" 5493)
+  nil )
+ (!pair  "poly_int<NUM_POLY_INT_COEFFS,generic_wide_int<unextended_tree>>"
+  (!type already_seen 923)
+  (!srcfileloc  "tree.h" 5493)
+  nil )
+ (!pair  "tree_to_poly_offset_ref"
+  (!type already_seen 921)
+  (!srcfileloc  "tree.h" 5491)
+  nil )
+ (!pair  "generic_wide_int<offset_extended_tree"
+  (!type already_seen 922)
+  (!srcfileloc  "tree.h" 5490)
+  nil )
+ (!pair  "poly_int<NUM_POLY_INT_COEFFS,generic_wide_int<offset_extended_tree>>"
+  (!type already_seen 921)
+  (!srcfileloc  "tree.h" 5490)
+  nil )
+ (!pair  "tree_to_poly_widest_ref"
+  (!type already_seen 919)
+  (!srcfileloc  "tree.h" 5488)
+  nil )
+ (!pair  "generic_wide_int<widest_extended_tree"
+  (!type already_seen 920)
+  (!srcfileloc  "tree.h" 5487)
+  nil )
+ (!pair  "poly_int<NUM_POLY_INT_COEFFS,generic_wide_int<widest_extended_tree>>"
+  (!type already_seen 919)
+  (!srcfileloc  "tree.h" 5487)
+  nil )
+ (!pair  "tree_to_wide_ref"
+  (!type already_seen 918)
+  (!srcfileloc  "tree.h" 5479)
+  nil )
+ (!pair  "generic_wide_int<wide_int_ref_storage<false,false>>"
+  (!type already_seen 918)
+  (!srcfileloc  "tree.h" 5478)
+  nil )
+ (!pair  "tree_to_offset_ref"
+  (!type already_seen 917)
+  (!srcfileloc  "tree.h" 5477)
+  nil )
+ (!pair  "generic_wide_int<offset_extended_tree>"
+  (!type already_seen 917)
+  (!srcfileloc  "tree.h" 5477)
+  nil )
+ (!pair  "tree_to_widest_ref"
+  (!type already_seen 916)
+  (!srcfileloc  "tree.h" 5476)
+  nil )
+ (!pair  "generic_wide_int<widest_extended_tree>"
+  (!type already_seen 916)
+  (!srcfileloc  "tree.h" 5476)
+  nil )
+ (!pair  "offset_extended_tree"
+  (!type already_seen 915)
+  (!srcfileloc  "tree.h" 5474)
+  nil )
+ (!pair  "extended_tree<ADDR_MAX_PRECISION>"
+  (!type already_seen 915)
+  (!srcfileloc  "tree.h" 5474)
+  nil )
+ (!pair  "widest_extended_tree"
+  (!type already_seen 914)
+  (!srcfileloc  "tree.h" 5473)
+  nil )
+ (!pair  "extended_tree<WIDE_INT_MAX_PRECISION>"
+  (!type already_seen 914)
+  (!srcfileloc  "tree.h" 5473)
+  nil )
+ (!pair  "tree_cache_map"
+  (!type already_seen 910)
+  (!srcfileloc  "tree.h" 5177)
+  nil )
+ (!pair  "tree_cache_traits"
+  (!type already_seen 909)
+  (!srcfileloc  "tree.h" 5177)
+  nil )
+ (!pair  "hash_map<tree,tree,tree_cache_traits>"
+  (!type already_seen 910)
+  (!srcfileloc  "tree.h" 5177)
+  nil )
+ (!pair  "hash_rtx_callback_function"
+  (!type already_seen 2)
+  (!srcfileloc  "rtl.h" 3513)
+  nil )
+ (!pair  "rtx_equal_p_callback_function"
+  (!type already_seen 2)
+  (!srcfileloc  "rtl.h" 3508)
+  nil )
+ (!pair  "for_each_inc_dec_fn"
+  (!type already_seen 2)
+  (!srcfileloc  "rtl.h" 3504)
+  nil )
+ (!pair  "rtx_to_poly_wide_ref"
+  (!type already_seen 902)
+  (!srcfileloc  "rtl.h" 2316)
+  nil )
+ (!pair  "generic_wide_int<wide_int_ref_storage<false"
+  (!type already_seen 903)
+  (!srcfileloc  "rtl.h" 2315)
+  nil )
+ (!pair  "poly_int<NUM_POLY_INT_COEFFS,generic_wide_int<wide_int_ref_storage<false,false>>>"
+  (!type already_seen 902)
+  (!srcfileloc  "rtl.h" 2315)
+  nil )
+ (!pair  "rtx_mode_t"
+  (!type already_seen 901)
+  (!srcfileloc  "rtl.h" 2227)
+  nil )
+ (!pair  "std::pair<rtx,machine_mode>"
+  (!type already_seen 901)
+  (!srcfileloc  "rtl.h" 2227)
+  nil )
+ (!pair  "rtx_insn"
+  (!type already_seen 347)
+  (!srcfileloc  "rtl.h" 489)
+  nil )
+ (!pair  "rtx_insn_list"
+  (!type already_seen 731)
+  (!srcfileloc  "rtl.h" 486)
+  nil )
+ (!pair  "rtx_expr_list"
+  (!type already_seen 729)
+  (!srcfileloc  "rtl.h" 458)
+  nil )
+ (!pair  "NUM_POLY_INT_COEFFS"
+  (!type already_seen 890)
+  (!srcfileloc  "rtl.h" 287)
+  nil )
+ (!pair  "trailing_wide_ints<NUM_POLY_INT_COEFFS>"
+  (!type already_seen 889)
+  (!srcfileloc  "rtl.h" 287)
+  nil )
+ (!pair  "va_gc"
+  (!type already_seen 79)
+  (!srcfileloc  "rtl.h" 263)
+  nil )
+ (!pair  "vec<rtx,va_gc>"
+  (!type already_seen 270)
+  (!srcfileloc  "rtl.h" 263)
+  nil )
+ (!pair  "rtunion"
+  (!type already_seen 260)
+  (!srcfileloc  "rtl.h" 233)
+  nil )
+ (!pair  "reg_attrs"
+  (!type already_seen 288)
+  (!srcfileloc  "rtl.h" 225)
+  nil )
+ (!pair  "mem_attrs"
+  (!type already_seen 277)
+  (!srcfileloc  "rtl.h" 150)
+  nil )
+ (!pair  "trailing_wide_ints"
+  (!type already_seen 876)
+  (!srcfileloc  "wide-int.h" 1385)
+  nil )
+ (!pair  "trailing_wide_int"
+  (!type already_seen 875)
+  (!srcfileloc  "wide-int.h" 1345)
+  nil )
+ (!pair  "trailing_wide_int_storage"
+  (!type already_seen 874)
+  (!srcfileloc  "wide-int.h" 1345)
+  nil )
+ (!pair  "generic_wide_int<trailing_wide_int_storage>"
+  (!type already_seen 875)
+  (!srcfileloc  "wide-int.h" 1345)
+  nil )
+ (!pair  "fixed_wide_int_storage"
+  (!type already_seen 872)
+  (!srcfileloc  "wide-int.h" 1200)
+  nil )
+ (!pair  "ASSIGNMENT_OPERATOR"
+  (!type already_seen 870)
+  (!srcfileloc  "wide-int.h" 752)
+  nil )
+ (!pair  "generic_wide_int"
+  (!type already_seen 869)
+  (!srcfileloc  "wide-int.h" 714)
+  nil )
+ (!pair  "T1"
+  (!type already_seen 866)
+  (!srcfileloc  "wide-int.h" 459)
+  nil )
+ (!pair  "int_traits<T1"
+  (!type already_seen 865)
+  (!srcfileloc  "wide-int.h" 459)
+  nil )
+ (!pair  "fixed_wide_int_storage<int_traits<T1"
+  (!type already_seen 864)
+  (!srcfileloc  "wide-int.h" 459)
+  nil )
+ (!pair  "generic_wide_int<fixed_wide_int_storage<int_traits<T1>precision>>"
+  (!type already_seen 863)
+  (!srcfileloc  "wide-int.h" 459)
+  nil )
+ (!pair  "signed_predicate_result"
+  (!type already_seen 2)
+  (!srcfileloc  "wide-int.h" 442)
+  nil )
+ (!pair  "signed_shift_result_type"
+  (!type already_seen 2)
+  (!srcfileloc  "wide-int.h" 441)
+  nil )
+ (!pair  "precision"
+  (!type already_seen 859)
+  (!srcfileloc  "wide-int.h" 438)
+  nil )
+ (!pair  "T2"
+  (!type already_seen 862)
+  (!srcfileloc  "wide-int.h" 438)
+  nil )
+ (!pair  "int_traits<T2"
+  (!type already_seen 861)
+  (!srcfileloc  "wide-int.h" 438)
+  nil )
+ (!pair  "fixed_wide_int_storage<int_traits<T2"
+  (!type already_seen 860)
+  (!srcfileloc  "wide-int.h" 438)
+  nil )
+ (!pair  "generic_wide_int<fixed_wide_int_storage<int_traits<T2>precision>>"
+  (!type already_seen 858)
+  (!srcfileloc  "wide-int.h" 438)
+  nil )
+ (!pair  "predicate_result"
+  (!type already_seen 2)
+  (!srcfileloc  "wide-int.h" 429)
+  nil )
+ (!pair  "operator_result"
+  (!type already_seen 2)
+  (!srcfileloc  "wide-int.h" 428)
+  nil )
+ (!pair  "result_type"
+  (!type already_seen 2)
+  (!srcfileloc  "wide-int.h" 420)
+  nil )
+ (!pair  "wide_int_ref"
+  (!type already_seen 854)
+  (!srcfileloc  "wide-int.h" 334)
+  nil )
+ (!pair  "false"
+  (!type already_seen 856)
+  (!srcfileloc  "wide-int.h" 334)
+  nil )
+ (!pair  "wide_int_ref_storage<false"
+  (!type already_seen 855)
+  (!srcfileloc  "wide-int.h" 334)
+  nil )
+ (!pair  "generic_wide_int<wide_int_ref_storage<false>>"
+  (!type already_seen 854)
+  (!srcfileloc  "wide-int.h" 334)
+  nil )
+ (!pair  "widest2_int"
+  (!type already_seen 850)
+  (!srcfileloc  "wide-int.h" 327)
+  nil )
+ (!pair  "generic_wide_int<fixed_wide_int_storage<WIDE_INT_MAX_PRECISION*>>"
+  (!type already_seen 850)
+  (!srcfileloc  "wide-int.h" 327)
+  nil )
+ (!pair  "WIDE_INT_MAX_PRECISION"
+  (!type already_seen 849)
+  (!srcfileloc  "wide-int.h" 324)
+  nil )
+ (!pair  "ADDR_MAX_PRECISION"
+  (!type already_seen 849)
+  (!srcfileloc  "wide-int.h" 323)
+  nil )
+ (!pair  "FIXED_WIDE_INT"
+  (!type already_seen 849)
+  (!srcfileloc  "wide-int.h" 323)
+  nil )
+ (!pair  "wide_int"
+  (!type already_seen 496)
+  (!srcfileloc  "wide-int.h" 322)
+  nil )
+ (!pair  "wide_int_storage"
+  (!type already_seen 497)
+  (!srcfileloc  "wide-int.h" 322)
+  nil )
+ (!pair  "generic_wide_int<wide_int_storage>"
+  (!type already_seen 496)
+  (!srcfileloc  "wide-int.h" 322)
+  nil )
+ (!pair  "bitmap_obstack"
+  (!type already_seen 139)
+  (!srcfileloc  "bitmap.h" 342)
+  nil )
+ (!pair  "bitmap_element"
+  (!type already_seen 136)
+  (!srcfileloc  "bitmap.h" 338)
+  nil )
+ (!pair  "BITMAP_WORD"
+  (!type already_seen 2)
+  (!srcfileloc  "bitmap.h" 274)
+  nil )
+ (!pair  "splay_tree"
+  (!type already_seen 845)
+  (!srcfileloc  "../include/splay-tree.h" 127)
+  nil )
+ (!pair  "splay_tree_deallocate_fn"
+  (!type already_seen 2)
+  (!srcfileloc  "../include/splay-tree.h" 88)
+  nil )
+ (!pair  "splay_tree_allocate_fn"
+  (!type already_seen 2)
+  (!srcfileloc  "../include/splay-tree.h" 82)
+  nil )
+ (!pair  "splay_tree_foreach_fn"
+  (!type already_seen 2)
+  (!srcfileloc  "../include/splay-tree.h" 76)
+  nil )
+ (!pair  "splay_tree_delete_value_fn"
+  (!type already_seen 2)
+  (!srcfileloc  "../include/splay-tree.h" 73)
+  nil )
+ (!pair  "splay_tree_delete_key_fn"
+  (!type already_seen 2)
+  (!srcfileloc  "../include/splay-tree.h" 67)
+  nil )
+ (!pair  "splay_tree_compare_fn"
+  (!type already_seen 2)
+  (!srcfileloc  "../include/splay-tree.h" 58)
+  nil )
+ (!pair  "splay_tree_node"
+  (!type already_seen 843)
+  (!srcfileloc  "../include/splay-tree.h" 54)
+  nil )
+ (!pair  "splay_tree_value"
+  (!type already_seen 2)
+  (!srcfileloc  "../include/splay-tree.h" 51)
+  nil )
+ (!pair  "splay_tree_key"
+  (!type already_seen 2)
+  (!srcfileloc  "../include/splay-tree.h" 50)
+  nil )
+ (!pair  "htab_t"
+  (!type already_seen 388)
+  (!srcfileloc  "../include/hashtab.h" 139)
+  nil )
+ (!pair  "htab_free_with_arg"
+  (!type already_seen 2)
+  (!srcfileloc  "../include/hashtab.h" 78)
+  nil )
+ (!pair  "htab_alloc_with_arg"
+  (!type already_seen 2)
+  (!srcfileloc  "../include/hashtab.h" 77)
+  nil )
+ (!pair  "htab_free"
+  (!type already_seen 2)
+  (!srcfileloc  "../include/hashtab.h" 73)
+  nil )
+ (!pair  "htab_alloc"
+  (!type already_seen 2)
+  (!srcfileloc  "../include/hashtab.h" 70)
+  nil )
+ (!pair  "htab_trav"
+  (!type already_seen 2)
+  (!srcfileloc  "../include/hashtab.h" 64)
+  nil )
+ (!pair  "htab_del"
+  (!type already_seen 2)
+  (!srcfileloc  "../include/hashtab.h" 58)
+  nil )
+ (!pair  "htab_eq"
+  (!type already_seen 2)
+  (!srcfileloc  "../include/hashtab.h" 54)
+  nil )
+ (!pair  "htab_hash"
+  (!type already_seen 2)
+  (!srcfileloc  "../include/hashtab.h" 47)
+  nil )
+ (!pair  "hashval_t"
+  (!type already_seen 2)
+  (!srcfileloc  "../include/hashtab.h" 42)
+  nil )
+ (!pair  "machine_function"
+  (!type already_seen 463)
+  (!srcfileloc  "config/aarch64/aarch64.h" 725)
+  nil )
+ (!pair  "uchar"
+  (!type already_seen 8)
+  (!srcfileloc  "coretypes.h" 408)
+  nil )
+ (!pair  "gt_pointer_operator"
+  (!type already_seen 2)
+  (!srcfileloc  "coretypes.h" 405)
+  nil )
+ (!pair  "complex_mode"
+  (!type already_seen 722)
+  (!srcfileloc  "coretypes.h" 361)
+  nil )
+ (!pair  "tree_pair"
+  (!type already_seen 834)
+  (!srcfileloc  "coretypes.h" 334)
+  nil )
+ (!pair  "std::pair<tree,tree>"
+  (!type already_seen 834)
+  (!srcfileloc  "coretypes.h" 334)
+  nil )
+ (!pair  "reg_class_t"
+  (!type already_seen 2)
+  (!srcfileloc  "coretypes.h" 326)
+  nil )
+ (!pair  "const_basic_block"
+  (!type already_seen 318)
+  (!srcfileloc  "coretypes.h" 306)
+  nil )
+ (!pair  "basic_block"
+  (!type already_seen 318)
+  (!srcfileloc  "coretypes.h" 305)
+  nil )
+ (!pair  "const_edge"
+  (!type already_seen 322)
+  (!srcfileloc  "coretypes.h" 303)
+  nil )
+ (!pair  "edge"
+  (!type already_seen 322)
+  (!srcfileloc  "coretypes.h" 302)
+  nil )
+ (!pair  "alias_set_type"
+  (!type already_seen 2)
+  (!srcfileloc  "coretypes.h" 299)
+  nil )
+ (!pair  "addr_space_t"
+  (!type already_seen 8)
+  (!srcfileloc  "coretypes.h" 157)
+  nil )
+ (!pair  "section"
+  (!type already_seen 264)
+  (!srcfileloc  "coretypes.h" 146)
+  nil )
+ (!pair  "gimple_seq"
+  (!type already_seen 331)
+  (!srcfileloc  "coretypes.h" 100)
+  nil )
+ (!pair  "gimple"
+  (!type already_seen 332)
+  (!srcfileloc  "coretypes.h" 100)
+  nil )
+ (!pair  "const_tree"
+  (!type already_seen 23)
+  (!srcfileloc  "coretypes.h" 98)
+  nil )
+ (!pair  "tree"
+  (!type already_seen 23)
+  (!srcfileloc  "coretypes.h" 97)
+  nil )
+ (!pair  "const_hwivec"
+  (!type already_seen 743)
+  (!srcfileloc  "coretypes.h" 95)
+  nil )
+ (!pair  "hwivec"
+  (!type already_seen 743)
+  (!srcfileloc  "coretypes.h" 94)
+  nil )
+ (!pair  "const_rtvec"
+  (!type already_seen 279)
+  (!srcfileloc  "coretypes.h" 92)
+  nil )
+ (!pair  "rtvec"
+  (!type already_seen 279)
+  (!srcfileloc  "coretypes.h" 91)
+  nil )
+ (!pair  "fixed_size_mode_pod"
+  (!type already_seen 728)
+  (!srcfileloc  "coretypes.h" 71)
+  nil )
+ (!pair  "pod_mode<fixed_size_mode>"
+  (!type already_seen 728)
+  (!srcfileloc  "coretypes.h" 71)
+  nil )
+ (!pair  "scalar_int_mode_pod"
+  (!type already_seen 727)
+  (!srcfileloc  "coretypes.h" 70)
+  nil )
+ (!pair  "pod_mode<scalar_int_mode>"
+  (!type already_seen 727)
+  (!srcfileloc  "coretypes.h" 70)
+  nil )
+ (!pair  "scalar_mode_pod"
+  (!type already_seen 44)
+  (!srcfileloc  "coretypes.h" 69)
+  nil )
+ (!pair  "pod_mode<scalar_mode>"
+  (!type already_seen 44)
+  (!srcfileloc  "coretypes.h" 69)
+  nil )
+ (!pair  "opt_scalar_float_mode"
+  (!type already_seen 726)
+  (!srcfileloc  "coretypes.h" 67)
+  nil )
+ (!pair  "scalar_float_mode"
+  (!type already_seen 721)
+  (!srcfileloc  "coretypes.h" 67)
+  nil )
+ (!pair  "opt_mode<scalar_float_mode>"
+  (!type already_seen 726)
+  (!srcfileloc  "coretypes.h" 67)
+  nil )
+ (!pair  "opt_scalar_int_mode"
+  (!type already_seen 725)
+  (!srcfileloc  "coretypes.h" 66)
+  nil )
+ (!pair  "scalar_int_mode"
+  (!type already_seen 339)
+  (!srcfileloc  "coretypes.h" 66)
+  nil )
+ (!pair  "opt_mode<scalar_int_mode>"
+  (!type already_seen 725)
+  (!srcfileloc  "coretypes.h" 66)
+  nil )
+ (!pair  "opt_scalar_mode"
+  (!type already_seen 724)
+  (!srcfileloc  "coretypes.h" 65)
+  nil )
+ (!pair  "scalar_mode"
+  (!type already_seen 45)
+  (!srcfileloc  "coretypes.h" 65)
+  nil )
+ (!pair  "opt_mode<scalar_mode>"
+  (!type already_seen 724)
+  (!srcfileloc  "coretypes.h" 65)
+  nil )
+ (!pair  "const_rtx"
+  (!type already_seen 150)
+  (!srcfileloc  "coretypes.h" 58)
+  nil )
+ (!pair  "rtx"
+  (!type already_seen 150)
+  (!srcfileloc  "coretypes.h" 57)
+  nil )
+ (!pair  "const_sbitmap"
+  (!type already_seen 720)
+  (!srcfileloc  "coretypes.h" 55)
+  nil )
+ (!pair  "sbitmap"
+  (!type already_seen 720)
+  (!srcfileloc  "coretypes.h" 54)
+  nil )
+ (!pair  "const_bitmap"
+  (!type already_seen 133)
+  (!srcfileloc  "coretypes.h" 52)
+  nil )
+ (!pair  "bitmap"
+  (!type already_seen 133)
+  (!srcfileloc  "coretypes.h" 51)
+  nil )
+ (!pair  "gcov_type_unsigned"
+  (!type already_seen 2)
+  (!srcfileloc  "coretypes.h" 47)
+  nil )
+ (!pair  "gcov_type"
+  (!type already_seen 2)
+  (!srcfileloc  "coretypes.h" 46)
+  nil )
+ (!pair  "location_hash"
+  (!type already_seen 714)
+  (!srcfileloc  "input.h" 210)
+  nil )
+ (!pair  "hash_map<location_hash,string_concat*>"
+  (!type already_seen 718)
+  (!srcfileloc  "input.h" 210)
+  nil )
+ (!pair  "string_concat_db"
+  (!type already_seen 715)
+  (!srcfileloc  "input.h" 191)
+  nil )
+ (!pair  "string_concat"
+  (!type already_seen 712)
+  (!srcfileloc  "input.h" 180)
+  nil )
+ (!pair  "cpp_cb"
+  (!type already_seen 2)
+  (!srcfileloc  "../libcpp/include/cpplib.h" 1252)
+  nil )
+ (!pair  "cpp_comment_table"
+  (!type already_seen 709)
+  (!srcfileloc  "../libcpp/include/cpplib.h" 1239)
+  nil )
+ (!pair  "cpp_comment"
+  (!type already_seen 708)
+  (!srcfileloc  "../libcpp/include/cpplib.h" 1225)
+  nil )
+ (!pair  "cpp_num"
+  (!type already_seen 707)
+  (!srcfileloc  "../libcpp/include/cpplib.h" 1074)
+  nil )
+ (!pair  "cpp_num_part"
+  (!type already_seen 2)
+  (!srcfileloc  "../libcpp/include/cpplib.h" 1073)
+  nil )
+ (!pair  "missing_header_cb"
+  (!type already_seen 2)
+  (!srcfileloc  "../libcpp/include/cpplib.h" 614)
+  nil )
+ (!pair  "cppchar_signed_t"
+  (!type already_seen 2)
+  (!srcfileloc  "../libcpp/include/cpplib.h" 292)
+  nil )
+ (!pair  "cppchar_t"
+  (!type already_seen 2)
+  (!srcfileloc  "../libcpp/include/cpplib.h" 291)
+  nil )
+ (!pair  "cpp_dir"
+  (!type already_seen 703)
+  (!srcfileloc  "../libcpp/include/cpplib.h" 37)
+  nil )
+ (!pair  "cpp_callbacks"
+  (!type already_seen 702)
+  (!srcfileloc  "../libcpp/include/cpplib.h" 36)
+  nil )
+ (!pair  "cpp_macro"
+  (!type already_seen 20)
+  (!srcfileloc  "../libcpp/include/cpplib.h" 35)
+  nil )
+ (!pair  "cpp_hashnode"
+  (!type already_seen 12)
+  (!srcfileloc  "../libcpp/include/cpplib.h" 34)
+  nil )
+ (!pair  "cpp_string"
+  (!type already_seen 680)
+  (!srcfileloc  "../libcpp/include/cpplib.h" 33)
+  nil )
+ (!pair  "cpp_token"
+  (!type already_seen 676)
+  (!srcfileloc  "../libcpp/include/cpplib.h" 32)
+  nil )
+ (!pair  "cpp_options"
+  (!type already_seen 701)
+  (!srcfileloc  "../libcpp/include/cpplib.h" 31)
+  nil )
+ (!pair  "cpp_buffer"
+  (!type already_seen 700)
+  (!srcfileloc  "../libcpp/include/cpplib.h" 30)
+  nil )
+ (!pair  "cpp_reader"
+  (!type already_seen 699)
+  (!srcfileloc  "../libcpp/include/cpplib.h" 29)
+  nil )
+ (!pair  "expanded_location"
+  (!type already_seen 691)
+  (!srcfileloc  "../libcpp/include/line-map.h" 1290)
+  nil )
+ (!pair  "maps_info_macro"
+  (!type already_seen 685)
+  (!srcfileloc  "../libcpp/include/line-map.h" 779)
+  nil )
+ (!pair  "maps_info_ordinary"
+  (!type already_seen 684)
+  (!srcfileloc  "../libcpp/include/line-map.h" 777)
+  nil )
+ (!pair  "source_range"
+  (!type already_seen 1)
+  (!srcfileloc  "../libcpp/include/line-map.h" 749)
+  nil )
+ (!pair  "line_map_macro"
+  (!type already_seen 682)
+  (!srcfileloc  "../libcpp/include/line-map.h" 733)
+  nil )
+ (!pair  "line_map_ordinary"
+  (!type already_seen 6)
+  (!srcfileloc  "../libcpp/include/line-map.h" 718)
+  nil )
+ (!pair  "line_map_round_alloc_size_func"
+  (!type already_seen 2)
+  (!srcfileloc  "../libcpp/include/line-map.h" 353)
+  nil )
+ (!pair  "line_map_realloc"
+  (!type already_seen 2)
+  (!srcfileloc  "../libcpp/include/line-map.h" 349)
+  nil )
+ (!pair  "location_t"
+  (!type already_seen 2)
+  (!srcfileloc  "../libcpp/include/line-map.h" 291)
+  nil )
+ (!pair  "linenum_arith_t"
+  (!type already_seen 2)
+  (!srcfileloc  "../libcpp/include/line-map.h" 53)
+  nil )
+ (!pair  "linenum_type"
+  (!type already_seen 2)
+  (!srcfileloc  "../libcpp/include/line-map.h" 50)
+  nil )
+ (!pair  "PTR"
+  (!type already_seen 3)
+  (!srcfileloc  "gengtype.c" 5211)
+  nil )
+ (!pair  "CONSTEXPR"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5208)
+  nil )
+ (!pair  "fixed_size_mode"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5207)
+  nil )
+ (!pair  "machine_mode"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5206)
+  nil )
+ (!pair  "void"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5205)
+  nil )
+ (!pair  "JCF_u2"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5204)
+  nil )
+ (!pair  "jword"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5203)
+  nil )
+ (!pair  "uintptr_t"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5202)
+  nil )
+ (!pair  "uint8"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5201)
+  nil )
+ (!pair  "uint64_t"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5200)
+  nil )
+ (!pair  "poly_int64"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5199)
+  nil )
+ (!pair  "int64_t"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5198)
+  nil )
+ (!pair  "widest_int"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5197)
+  nil )
+ (!pair  "offset_int"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5196)
+  nil )
+ (!pair  "poly_int64_pod"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5195)
+  nil )
+ (!pair  "double_int"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5194)
+  nil )
+ (!pair  "FIXED_VALUE_TYPE"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5193)
+  nil )
+ (!pair  "REAL_VALUE_TYPE"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5192)
+  nil )
+ (!pair  "CUMULATIVE_ARGS"
+  (!type already_seen 2)
+  (!srcfileloc  "gengtype.c" 5191)
+  nil )
+)
+(!variables 695
+ (!pair  "objc_eh_personality_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 3607)
+  nil )
+ (!pair  "next_v2_EHTYPE_id_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 3397)
+  nil )
+ (!pair  "next_v2_ehvtable_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 3396)
+  nil )
+ (!pair  "objc_v2_ehtype_template"
+  (!type already_seen 23)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 3395)
+  nil )
+ (!pair  "ehtype_list"
+  (!type already_seen 1992)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 3054)
+  nil )
+ (!pair  "ivar_offset_refs"
+  (!type already_seen 2001)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 2764)
+  nil )
+ (!pair  "protlist"
+  (!type already_seen 1998)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 2109)
+  nil )
+ (!pair  "nonlazy_category_list"
+  (!type already_seen 96)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 2021)
+  nil )
+ (!pair  "category_list"
+  (!type already_seen 96)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 2010)
+  nil )
+ (!pair  "nonlazy_class_list"
+  (!type already_seen 96)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1999)
+  nil )
+ (!pair  "class_list"
+  (!type already_seen 96)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1991)
+  nil )
+ (!pair  "metaclass_super_refs"
+  (!type already_seen 1992)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1435)
+  nil )
+ (!pair  "class_super_refs"
+  (!type already_seen 1992)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1434)
+  nil )
+ (!pair  "protrefs"
+  (!type already_seen 1998)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1258)
+  nil )
+ (!pair  "msgrefs"
+  (!type already_seen 1995)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1204)
+  nil )
+ (!pair  "classrefs"
+  (!type already_seen 1992)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 1039)
+  nil )
+ (!pair  "extern_names"
+  (!type already_seen 1979)
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 235)
+  (!options 
+   (!option length string  "SIZEHASHTABLE")
+  )
+ )
+ (!pair  "objc_v2_global_trees"
+  (!type array 2004 nil  gc_used "OCTI_V2_MAX" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 185)
+  nil )
+ (!pair  "objc_rt_trees"
+  (!type array 2005 nil  gc_used "OCTI_RT_META_MAX" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "objc/objc-next-runtime-abi-02.c" 182)
+  nil )
+ (!pair  "objc_eh_personality_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "objc/objc-next-runtime-abi-01.c" 2786)
+  nil )
+ (!pair  "V1_Property_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "objc/objc-next-runtime-abi-01.c" 1516)
+  nil )
+ (!pair  "V1_ProtocolExt_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "objc/objc-next-runtime-abi-01.c" 1515)
+  nil )
+ (!pair  "V1_Protocol_OPT_CLS_METHODS_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "objc/objc-next-runtime-abi-01.c" 1514)
+  nil )
+ (!pair  "V1_Protocol_OPT_NST_METHODS_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "objc/objc-next-runtime-abi-01.c" 1513)
+  nil )
+ (!pair  "objc_class_ext_template"
+  (!type already_seen 23)
+  (!srcfileloc  "objc/objc-next-runtime-abi-01.c" 1108)
+  nil )
+ (!pair  "objc_protocol_extension_template"
+  (!type already_seen 23)
+  (!srcfileloc  "objc/objc-next-runtime-abi-01.c" 1074)
+  nil )
+ (!pair  "objc_v1_property_template"
+  (!type already_seen 23)
+  (!srcfileloc  "objc/objc-next-runtime-abi-01.c" 1044)
+  nil )
+ (!pair  "class_reference_idx"
+  (!type already_seen 2)
+  (!srcfileloc  "objc/objc-next-runtime-abi-01.c" 676)
+  nil )
+ (!pair  "objc_rt_trees"
+  (!type array 2006 nil  gc_used "OCTI_RT_META_MAX" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "objc/objc-next-runtime-abi-01.c" 107)
+  nil )
+ (!pair  "objc_eh_personality_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "objc/objc-gnu-runtime-abi-01.c" 2141)
+  nil )
+ (!pair  "num_static_inst"
+  (!type already_seen 2)
+  (!srcfileloc  "objc/objc-gnu-runtime-abi-01.c" 862)
+  nil )
+ (!pair  "meta_base"
+  (!type already_seen 23)
+  (!srcfileloc  "objc/objc-gnu-runtime-abi-01.c" 193)
+  nil )
+ (!pair  "objc_meta"
+  (!type already_seen 23)
+  (!srcfileloc  "objc/objc-gnu-runtime-abi-01.c" 192)
+  nil )
+ (!pair  "property_name_attr_idx"
+  (!type already_seen 2)
+  (!srcfileloc  "objc/objc-runtime-shared-support.c" 292)
+  nil )
+ (!pair  "meth_var_types_idx"
+  (!type already_seen 2)
+  (!srcfileloc  "objc/objc-runtime-shared-support.c" 291)
+  nil )
+ (!pair  "meth_var_names_idx"
+  (!type already_seen 2)
+  (!srcfileloc  "objc/objc-runtime-shared-support.c" 290)
+  nil )
+ (!pair  "objc_rt_trees"
+  (!type array 2007 nil  gc_used "OCTI_RT_META_MAX" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "objc/objc-runtime-shared-support.c" 54)
+  nil )
+ (!pair  "objc_parmlist"
+  (!type already_seen 23)
+  (!srcfileloc  "objc/objc-act.c" 8236)
+  nil )
+ (!pair  "interface_map"
+  (!type already_seen 1976)
+  (!srcfileloc  "objc/objc-act.c" 3782)
+  nil )
+ (!pair  "string_layout_checked"
+  (!type already_seen 2)
+  (!srcfileloc  "objc/objc-act.c" 3068)
+  nil )
+ (!pair  "string_htab"
+  (!type already_seen 1988)
+  (!srcfileloc  "objc/objc-act.c" 260)
+  nil )
+ (!pair  "alias_name_map"
+  (!type already_seen 1976)
+  (!srcfileloc  "objc/objc-act.c" 164)
+  nil )
+ (!pair  "class_name_map"
+  (!type already_seen 1976)
+  (!srcfileloc  "objc/objc-act.c" 163)
+  nil )
+ (!pair  "class_method_map"
+  (!type already_seen 1976)
+  (!srcfileloc  "objc/objc-act.c" 159)
+  nil )
+ (!pair  "instance_method_map"
+  (!type already_seen 1976)
+  (!srcfileloc  "objc/objc-act.c" 158)
+  nil )
+ (!pair  "objc_global_trees"
+  (!type array 2008 nil  gc_used "OCTI_MAX" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "objc/objc-act.h" 420)
+  nil )
+ (!pair  "objc_ivar_visibility"
+  (!type already_seen 2)
+  (!srcfileloc  "objc/objc-act.h" 294)
+  nil )
+ (!pair  "cat_count"
+  (!type already_seen 2)
+  (!srcfileloc  "objc/objc-act.h" 292)
+  nil )
+ (!pair  "imp_count"
+  (!type already_seen 2)
+  (!srcfileloc  "objc/objc-act.h" 291)
+  nil )
+ (!pair  "imp_list"
+  (!type already_seen 1983)
+  (!srcfileloc  "objc/objc-act.h" 290)
+  nil )
+ (!pair  "local_variables_to_volatilize"
+  (!type already_seen 96)
+  (!srcfileloc  "objc/objc-act.h" 277)
+  nil )
+ (!pair  "lto_eh_personality_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "lto/lto.c" 3257)
+  nil )
+ (!pair  "real_file_decl_data"
+  (!type already_seen 378)
+  (!srcfileloc  "lto/lto.c" 2757)
+  (!options 
+   (!option length string  "real_file_count + 1")
+  )
+ )
+ (!pair  "all_file_decl_data"
+  (!type already_seen 378)
+  (!srcfileloc  "lto/lto.c" 2725)
+  (!options 
+   (!option length string  "lto_stats.num_input_files + 1")
+  )
+ )
+ (!pair  "tree_with_vars"
+  (!type already_seen 96)
+  (!srcfileloc  "lto/lto.c" 526)
+  nil )
+ (!pair  "lto_mode_identity_table"
+  (!type already_seen 11)
+  (!srcfileloc  "lto/lto.c" 65)
+  nil )
+ (!pair  "first_personality_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "lto/lto.c" 63)
+  nil )
+ (!pair  "registered_builtin_types"
+  (!type already_seen 23)
+  (!srcfileloc  "lto/lto-lang.c" 787)
+  nil )
+ (!pair  "signed_size_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "lto/lto-lang.c" 243)
+  nil )
+ (!pair  "uintmax_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "lto/lto-lang.c" 242)
+  nil )
+ (!pair  "intmax_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "lto/lto-lang.c" 241)
+  nil )
+ (!pair  "wint_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "lto/lto-lang.c" 240)
+  nil )
+ (!pair  "const_string_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "lto/lto-lang.c" 239)
+  nil )
+ (!pair  "string_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "lto/lto-lang.c" 238)
+  nil )
+ (!pair  "builtin_types"
+  (!type array 2009 nil  gc_used "(int) BT_LAST + 1" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "lto/lto-lang.c" 236)
+  nil )
+ (!pair  "built_in_attributes"
+  (!type array 2010 nil  gc_used "(int) ATTR_LAST" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "lto/lto-lang.c" 171)
+  nil )
+ (!pair  "go_non_zero_struct"
+  (!type already_seen 23)
+  (!srcfileloc  "go/go-c.h" 78)
+  nil )
+ (!pair  "go_gc_root"
+  (!type already_seen 23)
+  (!srcfileloc  "go/go-lang.c" 557)
+  nil )
+ (!pair  "gfc_rank_cst"
+  (!type array 2011 nil  gc_used "GFC_MAX_DIMENSIONS + 1" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "fortran/trans-const.h" 65)
+  nil )
+ (!pair  "gfor_fndecl_random_init"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 925)
+  nil )
+ (!pair  "gfor_fndecl_ieee_procedure_exit"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 922)
+  nil )
+ (!pair  "gfor_fndecl_ieee_procedure_entry"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 921)
+  nil )
+ (!pair  "gfor_fndecl_sr_kind"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 918)
+  nil )
+ (!pair  "gfor_fndecl_si_kind"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 917)
+  nil )
+ (!pair  "gfor_fndecl_sc_kind"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 916)
+  nil )
+ (!pair  "gfor_fndecl_is_contiguous0"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 913)
+  nil )
+ (!pair  "gfor_fndecl_kill_sub"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 912)
+  nil )
+ (!pair  "gfor_fndecl_kill"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 911)
+  nil )
+ (!pair  "gfor_fndecl_iargc"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 910)
+  nil )
+ (!pair  "gfor_fndecl_size1"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 909)
+  nil )
+ (!pair  "gfor_fndecl_size0"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 908)
+  nil )
+ (!pair  "gfor_fndecl_convert_char4_to_char1"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 905)
+  nil )
+ (!pair  "gfor_fndecl_convert_char1_to_char4"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 904)
+  nil )
+ (!pair  "gfor_fndecl_select_string_char4"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 901)
+  nil )
+ (!pair  "gfor_fndecl_adjustr_char4"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 900)
+  nil )
+ (!pair  "gfor_fndecl_adjustl_char4"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 899)
+  nil )
+ (!pair  "gfor_fndecl_string_minmax_char4"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 898)
+  nil )
+ (!pair  "gfor_fndecl_string_trim_char4"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 897)
+  nil )
+ (!pair  "gfor_fndecl_string_verify_char4"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 896)
+  nil )
+ (!pair  "gfor_fndecl_string_scan_char4"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 895)
+  nil )
+ (!pair  "gfor_fndecl_string_index_char4"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 894)
+  nil )
+ (!pair  "gfor_fndecl_string_len_trim_char4"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 893)
+  nil )
+ (!pair  "gfor_fndecl_concat_string_char4"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 892)
+  nil )
+ (!pair  "gfor_fndecl_compare_string_char4"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 891)
+  nil )
+ (!pair  "gfor_fndecl_select_string"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 890)
+  nil )
+ (!pair  "gfor_fndecl_adjustr"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 889)
+  nil )
+ (!pair  "gfor_fndecl_adjustl"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 888)
+  nil )
+ (!pair  "gfor_fndecl_string_minmax"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 887)
+  nil )
+ (!pair  "gfor_fndecl_string_trim"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 886)
+  nil )
+ (!pair  "gfor_fndecl_string_verify"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 885)
+  nil )
+ (!pair  "gfor_fndecl_string_scan"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 884)
+  nil )
+ (!pair  "gfor_fndecl_string_index"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 883)
+  nil )
+ (!pair  "gfor_fndecl_string_len_trim"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 882)
+  nil )
+ (!pair  "gfor_fndecl_concat_string"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 881)
+  nil )
+ (!pair  "gfor_fndecl_compare_string"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 880)
+  nil )
+ (!pair  "gfor_fndecl_zgemm"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 877)
+  nil )
+ (!pair  "gfor_fndecl_cgemm"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 876)
+  nil )
+ (!pair  "gfor_fndecl_dgemm"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 875)
+  nil )
+ (!pair  "gfor_fndecl_sgemm"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 874)
+  nil )
+ (!pair  "gfor_fndecl_math_ishftc16"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 871)
+  nil )
+ (!pair  "gfor_fndecl_math_ishftc8"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 870)
+  nil )
+ (!pair  "gfor_fndecl_math_ishftc4"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 869)
+  nil )
+ (!pair  "gfor_fndecl_math_powi"
+  (!type array 2012 nil  gc_used "4" 
+   (!type array 2013 nil  gc_used "3" 
+    (!type already_seen 1960)
+   )
+  )
+  (!srcfileloc  "fortran/trans.h" 868)
+  nil )
+ (!pair  "gfor_fndecl_caf_is_present"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 856)
+  nil )
+ (!pair  "gfor_fndecl_co_sum"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 855)
+  nil )
+ (!pair  "gfor_fndecl_co_reduce"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 854)
+  nil )
+ (!pair  "gfor_fndecl_co_min"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 853)
+  nil )
+ (!pair  "gfor_fndecl_co_max"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 852)
+  nil )
+ (!pair  "gfor_fndecl_co_broadcast"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 851)
+  nil )
+ (!pair  "gfor_fndecl_caf_team_number"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 850)
+  nil )
+ (!pair  "gfor_fndecl_caf_sync_team"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 849)
+  nil )
+ (!pair  "gfor_fndecl_caf_get_team"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 848)
+  nil )
+ (!pair  "gfor_fndecl_caf_end_team"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 847)
+  nil )
+ (!pair  "gfor_fndecl_caf_change_team"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 846)
+  nil )
+ (!pair  "gfor_fndecl_caf_form_team"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 845)
+  nil )
+ (!pair  "gfor_fndecl_caf_stopped_images"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 844)
+  nil )
+ (!pair  "gfor_fndecl_caf_image_status"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 843)
+  nil )
+ (!pair  "gfor_fndecl_caf_failed_images"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 842)
+  nil )
+ (!pair  "gfor_fndecl_caf_fail_image"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 841)
+  nil )
+ (!pair  "gfor_fndecl_caf_event_query"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 840)
+  nil )
+ (!pair  "gfor_fndecl_caf_event_wait"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 839)
+  nil )
+ (!pair  "gfor_fndecl_caf_event_post"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 838)
+  nil )
+ (!pair  "gfor_fndecl_caf_unlock"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 837)
+  nil )
+ (!pair  "gfor_fndecl_caf_lock"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 836)
+  nil )
+ (!pair  "gfor_fndecl_caf_atomic_op"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 835)
+  nil )
+ (!pair  "gfor_fndecl_caf_atomic_cas"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 834)
+  nil )
+ (!pair  "gfor_fndecl_caf_atomic_ref"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 833)
+  nil )
+ (!pair  "gfor_fndecl_caf_atomic_def"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 832)
+  nil )
+ (!pair  "gfor_fndecl_caf_error_stop_str"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 831)
+  nil )
+ (!pair  "gfor_fndecl_caf_error_stop"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 830)
+  nil )
+ (!pair  "gfor_fndecl_caf_stop_str"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 829)
+  nil )
+ (!pair  "gfor_fndecl_caf_stop_numeric"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 828)
+  nil )
+ (!pair  "gfor_fndecl_caf_sync_images"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 827)
+  nil )
+ (!pair  "gfor_fndecl_caf_sync_memory"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 826)
+  nil )
+ (!pair  "gfor_fndecl_caf_sync_all"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 825)
+  nil )
+ (!pair  "gfor_fndecl_caf_sendget_by_ref"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 824)
+  nil )
+ (!pair  "gfor_fndecl_caf_send_by_ref"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 823)
+  nil )
+ (!pair  "gfor_fndecl_caf_get_by_ref"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 822)
+  nil )
+ (!pair  "gfor_fndecl_caf_sendget"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 821)
+  nil )
+ (!pair  "gfor_fndecl_caf_send"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 820)
+  nil )
+ (!pair  "gfor_fndecl_caf_get"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 819)
+  nil )
+ (!pair  "gfor_fndecl_caf_deregister"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 818)
+  nil )
+ (!pair  "gfor_fndecl_caf_register"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 817)
+  nil )
+ (!pair  "gfor_fndecl_caf_num_images"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 816)
+  nil )
+ (!pair  "gfor_fndecl_caf_this_image"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 815)
+  nil )
+ (!pair  "gfor_fndecl_caf_finalize"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 814)
+  nil )
+ (!pair  "gfor_fndecl_caf_init"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 813)
+  nil )
+ (!pair  "gfor_fndecl_system_clock8"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 809)
+  nil )
+ (!pair  "gfor_fndecl_system_clock4"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 808)
+  nil )
+ (!pair  "gfor_fndecl_associated"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 807)
+  nil )
+ (!pair  "gfor_fndecl_gfc_to_cfi"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 806)
+  nil )
+ (!pair  "gfor_fndecl_cfi_to_gfc"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 805)
+  nil )
+ (!pair  "gfor_fndecl_in_unpack"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 804)
+  nil )
+ (!pair  "gfor_fndecl_in_pack"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 803)
+  nil )
+ (!pair  "gfor_fndecl_fdate"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 802)
+  nil )
+ (!pair  "gfor_fndecl_ctime"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 801)
+  nil )
+ (!pair  "gfor_fndecl_ttynam"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 800)
+  nil )
+ (!pair  "gfor_fndecl_set_options"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 799)
+  nil )
+ (!pair  "gfor_fndecl_set_fpe"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 798)
+  nil )
+ (!pair  "gfor_fndecl_generate_error"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 797)
+  nil )
+ (!pair  "gfor_fndecl_os_error"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 796)
+  nil )
+ (!pair  "gfor_fndecl_runtime_warning_at"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 795)
+  nil )
+ (!pair  "gfor_fndecl_runtime_error_at"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 794)
+  nil )
+ (!pair  "gfor_fndecl_runtime_error"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 793)
+  nil )
+ (!pair  "gfor_fndecl_error_stop_string"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 792)
+  nil )
+ (!pair  "gfor_fndecl_error_stop_numeric"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 791)
+  nil )
+ (!pair  "gfor_fndecl_stop_string"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 790)
+  nil )
+ (!pair  "gfor_fndecl_stop_numeric"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 789)
+  nil )
+ (!pair  "gfor_fndecl_pause_string"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 788)
+  nil )
+ (!pair  "gfor_fndecl_pause_numeric"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 787)
+  nil )
+ (!pair  "gfc_static_ctors"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans.h" 679)
+  nil )
+ (!pair  "gfc_charlen_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-types.h" 53)
+  nil )
+ (!pair  "logical_false_node"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-types.h" 49)
+  nil )
+ (!pair  "logical_true_node"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-types.h" 48)
+  nil )
+ (!pair  "logical_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-types.h" 47)
+  nil )
+ (!pair  "gfc_complex_float128_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-types.h" 35)
+  nil )
+ (!pair  "gfc_float128_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-types.h" 34)
+  nil )
+ (!pair  "pchar_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-types.h" 33)
+  nil )
+ (!pair  "prvoid_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-types.h" 32)
+  nil )
+ (!pair  "pvoid_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-types.h" 31)
+  nil )
+ (!pair  "ppvoid_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-types.h" 30)
+  nil )
+ (!pair  "gfc_character1_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-types.h" 29)
+  nil )
+ (!pair  "gfc_array_range_type"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-types.h" 28)
+  nil )
+ (!pair  "gfc_array_index_type"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-types.h" 27)
+  nil )
+ (!pair  "gfc_pcharacter_types"
+  (!type array 2014 nil  gc_used "MAX_CHARACTER_KINDS + 1" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "fortran/trans-types.c" 97)
+  nil )
+ (!pair  "gfc_character_types"
+  (!type array 2015 nil  gc_used "MAX_CHARACTER_KINDS + 1" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "fortran/trans-types.c" 96)
+  nil )
+ (!pair  "gfc_complex_types"
+  (!type array 2016 nil  gc_used "MAX_REAL_KINDS + 1" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "fortran/trans-types.c" 92)
+  nil )
+ (!pair  "gfc_real_types"
+  (!type array 2017 nil  gc_used "MAX_REAL_KINDS + 1" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "fortran/trans-types.c" 91)
+  nil )
+ (!pair  "gfc_logical_types"
+  (!type array 2018 nil  gc_used "MAX_INT_KINDS + 1" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "fortran/trans-types.c" 87)
+  nil )
+ (!pair  "gfc_integer_types"
+  (!type array 2019 nil  gc_used "MAX_INT_KINDS + 1" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "fortran/trans-types.c" 86)
+  nil )
+ (!pair  "gfc_array_descriptor_base_caf"
+  (!type array 2020 nil  gc_used "2 * (GFC_MAX_DIMENSIONS+1)" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "fortran/trans-types.c" 78)
+  nil )
+ (!pair  "gfc_array_descriptor_base"
+  (!type array 2021 nil  gc_used "2 * (GFC_MAX_DIMENSIONS+1)" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "fortran/trans-types.c" 77)
+  nil )
+ (!pair  "gfc_max_array_element_size"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-types.c" 76)
+  nil )
+ (!pair  "gfc_desc_dim_type"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-types.c" 75)
+  nil )
+ (!pair  "select_struct"
+  (!type array 2022 nil  gc_used "2" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "fortran/trans-stmt.c" 2976)
+  nil )
+ (!pair  "dt_parm"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-io.c" 162)
+  nil )
+ (!pair  "iocall"
+  (!type array 2023 nil  gc_used "IOCALL_NUM" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "fortran/trans-io.c" 153)
+  nil )
+ (!pair  "st_parameter_field"
+  (!type array 2024 nil  gc_used "" 
+   (!type already_seen 1947)
+  )
+  (!srcfileloc  "fortran/trans-io.c" 101)
+  nil )
+ (!pair  "st_parameter"
+  (!type array 2025 nil  gc_used "" 
+   (!type already_seen 1948)
+  )
+  (!srcfileloc  "fortran/trans-io.c" 90)
+  nil )
+ (!pair  "gfc_intrinsic_map"
+  (!type array 2026 nil  gc_used "" 
+   (!type already_seen 1946)
+  )
+  (!srcfileloc  "fortran/trans-intrinsic.c" 114)
+  nil )
+ (!pair  "module_htab"
+  (!type already_seen 1941)
+  (!srcfileloc  "fortran/trans-decl.c" 4962)
+  nil )
+ (!pair  "saved_local_decls"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-decl.c" 67)
+  nil )
+ (!pair  "saved_parent_function_decls"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-decl.c" 63)
+  nil )
+ (!pair  "saved_function_decls"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-decl.c" 62)
+  nil )
+ (!pair  "parent_fake_result_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-decl.c" 57)
+  nil )
+ (!pair  "current_fake_result_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/trans-decl.c" 56)
+  nil )
+ (!pair  "global_binding_level"
+  (!type already_seen 87)
+  (!srcfileloc  "fortran/f95-lang.c" 305)
+  nil )
+ (!pair  "current_binding_level"
+  (!type already_seen 87)
+  (!srcfileloc  "fortran/f95-lang.c" 301)
+  nil )
+ (!pair  "current_translation_unit"
+  (!type already_seen 23)
+  (!srcfileloc  "fortran/f95-lang.c" 179)
+  nil )
+ (!pair  "free_binding_level"
+  (!type already_seen 87)
+  (!srcfileloc  "fortran/f95-lang.c" 173)
+  nil )
+ (!pair  "tinfo_types"
+  (!type array 2027 nil  gc_used "TK_END" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "d/typeinfo.cc" 93)
+  nil )
+ (!pair  "static_dtor_list"
+  (!type already_seen 96)
+  (!srcfileloc  "d/modules.cc" 125)
+  nil )
+ (!pair  "static_ctor_list"
+  (!type already_seen 96)
+  (!srcfileloc  "d/modules.cc" 124)
+  nil )
+ (!pair  "d_eh_personality_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "d/d-lang.cc" 1737)
+  nil )
+ (!pair  "d_keep_list"
+  (!type already_seen 23)
+  (!srcfileloc  "d/d-lang.cc" 1726)
+  nil )
+ (!pair  "global_declarations"
+  (!type already_seen 96)
+  (!srcfileloc  "d/d-lang.cc" 98)
+  nil )
+ (!pair  "global_context"
+  (!type already_seen 23)
+  (!srcfileloc  "d/d-lang.cc" 95)
+  nil )
+ (!pair  "builtin_types"
+  (!type array 2028 nil  gc_used "(int) BT_LAST + 1" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "d/d-builtins.cc" 962)
+  nil )
+ (!pair  "built_in_attributes"
+  (!type array 2029 nil  gc_used "(int) ATTR_LAST" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "d/d-builtins.cc" 866)
+  nil )
+ (!pair  "signed_size_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "d/d-builtins.cc" 723)
+  nil )
+ (!pair  "uintmax_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "d/d-builtins.cc" 722)
+  nil )
+ (!pair  "intmax_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "d/d-builtins.cc" 721)
+  nil )
+ (!pair  "wint_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "d/d-builtins.cc" 720)
+  nil )
+ (!pair  "const_string_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "d/d-builtins.cc" 719)
+  nil )
+ (!pair  "string_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "d/d-builtins.cc" 718)
+  nil )
+ (!pair  "gcc_builtins_types"
+  (!type already_seen 96)
+  (!srcfileloc  "d/d-builtins.cc" 46)
+  nil )
+ (!pair  "gcc_builtins_libfuncs"
+  (!type already_seen 96)
+  (!srcfileloc  "d/d-builtins.cc" 45)
+  nil )
+ (!pair  "gcc_builtins_functions"
+  (!type already_seen 96)
+  (!srcfileloc  "d/d-builtins.cc" 44)
+  nil )
+ (!pair  "d_global_trees"
+  (!type array 2030 nil  gc_used "DTI_MAX" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "d/d-tree.h" 422)
+  nil )
+ (!pair  "global_binding_level"
+  (!type already_seen 87)
+  (!srcfileloc  "d/d-tree.h" 122)
+  nil )
+ (!pair  "current_binding_level"
+  (!type already_seen 87)
+  (!srcfileloc  "d/d-tree.h" 121)
+  nil )
+ (!pair  "vlt_register_set_fndecl"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/vtable-class-hierarchy.c" 133)
+  nil )
+ (!pair  "vlt_register_pairs_fndecl"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/vtable-class-hierarchy.c" 132)
+  nil )
+ (!pair  "vlt_saved_class_info"
+  (!type already_seen 96)
+  (!srcfileloc  "cp/vtable-class-hierarchy.c" 131)
+  nil )
+ (!pair  "abstract_pending_vars"
+  (!type already_seen 1913)
+  (!srcfileloc  "cp/typeck2.c" 177)
+  nil )
+ (!pair  "deleted_copy_types"
+  (!type already_seen 467)
+  (!srcfileloc  "cp/tree.c" 3965)
+  nil )
+ (!pair  "list_hash_table"
+  (!type already_seen 1906)
+  (!srcfileloc  "cp/tree.c" 1993)
+  nil )
+ (!pair  "cplus_array_htab"
+  (!type already_seen 1902)
+  (!srcfileloc  "cp/tree.c" 939)
+  nil )
+ (!pair  "deferred_access_no_check"
+  (!type already_seen 2)
+  (!srcfileloc  "cp/semantics.c" 139)
+  nil )
+ (!pair  "deferred_access_stack"
+  (!type already_seen 1897)
+  (!srcfileloc  "cp/semantics.c" 138)
+  nil )
+ (!pair  "tinfo_descs"
+  (!type already_seen 1894)
+  (!srcfileloc  "cp/rtti.c" 122)
+  nil )
+ (!pair  "pending_repo"
+  (!type already_seen 96)
+  (!srcfileloc  "cp/repo.c" 40)
+  nil )
+ (!pair  "subsumption_table"
+  (!type already_seen 1891)
+  (!srcfileloc  "cp/pt.c" 28246)
+  nil )
+ (!pair  "concept_expansions"
+  (!type already_seen 1887)
+  (!srcfileloc  "cp/pt.c" 28159)
+  nil )
+ (!pair  "concept_memos"
+  (!type already_seen 1887)
+  (!srcfileloc  "cp/pt.c" 28104)
+  nil )
+ (!pair  "constraint_memos"
+  (!type already_seen 1885)
+  (!srcfileloc  "cp/pt.c" 28103)
+  nil )
+ (!pair  "decl_constraints"
+  (!type already_seen 1879)
+  (!srcfileloc  "cp/pt.c" 27991)
+  nil )
+ (!pair  "explicit_specifier_map"
+  (!type already_seen 911)
+  (!srcfileloc  "cp/pt.c" 12903)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "defarg_inst"
+  (!type already_seen 911)
+  (!srcfileloc  "cp/pt.c" 12792)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "last_error_tinst_level"
+  (!type already_seen 1772)
+  (!srcfileloc  "cp/pt.c" 10231)
+  nil )
+ (!pair  "pending_template_freelist_head"
+  (!type already_seen 1864)
+  (!srcfileloc  "cp/pt.c" 9030)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "tinst_level_freelist_head"
+  (!type already_seen 1772)
+  (!srcfileloc  "cp/pt.c" 9021)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "tree_list_freelist_head"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/pt.c" 9012)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "defaulted_ttp_cache"
+  (!type already_seen 441)
+  (!srcfileloc  "cp/pt.c" 7348)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "canonical_template_parms"
+  (!type already_seen 96)
+  (!srcfileloc  "cp/pt.c" 121)
+  nil )
+ (!pair  "type_specializations"
+  (!type already_seen 1868)
+  (!srcfileloc  "cp/pt.c" 115)
+  nil )
+ (!pair  "decl_specializations"
+  (!type already_seen 1868)
+  (!srcfileloc  "cp/pt.c" 113)
+  nil )
+ (!pair  "saved_access_scope"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/pt.c" 70)
+  nil )
+ (!pair  "current_tinst_level"
+  (!type already_seen 1772)
+  (!srcfileloc  "cp/pt.c" 68)
+  nil )
+ (!pair  "saved_trees"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/pt.c" 65)
+  nil )
+ (!pair  "last_pending_template"
+  (!type already_seen 1864)
+  (!srcfileloc  "cp/pt.c" 60)
+  nil )
+ (!pair  "pending_templates"
+  (!type already_seen 1864)
+  (!srcfileloc  "cp/pt.c" 59)
+  nil )
+ (!pair  "generic_parm_count"
+  (!type already_seen 2)
+  (!srcfileloc  "cp/parser.c" 41190)
+  nil )
+ (!pair  "the_parser"
+  (!type already_seen 1796)
+  (!srcfileloc  "cp/parser.c" 40720)
+  nil )
+ (!pair  "cp_parser_context_free_list"
+  (!type already_seen 1788)
+  (!srcfileloc  "cp/parser.c" 1886)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "free_saved_scope"
+  (!type already_seen 1754)
+  (!srcfileloc  "cp/name-lookup.c" 7065)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "lambda_cnt"
+  (!type already_seen 2)
+  (!srcfileloc  "cp/name-lookup.c" 3826)
+  nil )
+ (!pair  "anon_cnt"
+  (!type already_seen 2)
+  (!srcfileloc  "cp/name-lookup.c" 3807)
+  nil )
+ (!pair  "free_binding_level"
+  (!type already_seen 112)
+  (!srcfileloc  "cp/name-lookup.c" 3286)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "extern_c_decls"
+  (!type already_seen 141)
+  (!srcfileloc  "cp/name-lookup.c" 2512)
+  nil )
+ (!pair  "free_bindings"
+  (!type already_seen 117)
+  (!srcfileloc  "cp/name-lookup.c" 1944)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "free_binding_entry"
+  (!type already_seen 538)
+  (!srcfileloc  "cp/name-lookup.c" 1738)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "thunk_labelno"
+  (!type already_seen 2)
+  (!srcfileloc  "cp/method.c" 182)
+  nil )
+ (!pair  "subst_identifiers"
+  (!type array 2031 nil  gc_used "SUBID_MAX" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "cp/mangle.c" 151)
+  nil )
+ (!pair  "G"
+  (!type already_seen 1848)
+  (!srcfileloc  "cp/mangle.c" 122)
+  nil )
+ (!pair  "conv_type_names"
+  (!type already_seen 1847)
+  (!srcfileloc  "cp/lex.c" 606)
+  nil )
+ (!pair  "lambda_scope_stack"
+  (!type already_seen 1843)
+  (!srcfileloc  "cp/lambda.c" 1342)
+  nil )
+ (!pair  "lambda_count"
+  (!type already_seen 2)
+  (!srcfileloc  "cp/lambda.c" 1336)
+  nil )
+ (!pair  "lambda_scope"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/lambda.c" 1335)
+  nil )
+ (!pair  "max_id"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/lambda.c" 476)
+  nil )
+ (!pair  "ptr_id"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/lambda.c" 475)
+  nil )
+ (!pair  "nsdmi_inst"
+  (!type already_seen 911)
+  (!srcfileloc  "cp/init.c" 552)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "fn"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/init.c" 52)
+  nil )
+ (!pair  "global_friend"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/friend.c" 35)
+  nil )
+ (!pair  "pending_noexcept_checks"
+  (!type already_seen 1840)
+  (!srcfileloc  "cp/except.c" 1154)
+  nil )
+ (!pair  "ssdf_decls"
+  (!type already_seen 96)
+  (!srcfileloc  "cp/decl2.c" 3660)
+  nil )
+ (!pair  "ssdf_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/decl2.c" 3656)
+  nil )
+ (!pair  "priority_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/decl2.c" 3653)
+  nil )
+ (!pair  "initialize_p_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/decl2.c" 3650)
+  nil )
+ (!pair  "mangled_decls"
+  (!type already_seen 1837)
+  (!srcfileloc  "cp/decl2.c" 138)
+  nil )
+ (!pair  "mangling_aliases"
+  (!type already_seen 96)
+  (!srcfileloc  "cp/decl2.c" 103)
+  nil )
+ (!pair  "no_linkage_decls"
+  (!type already_seen 96)
+  (!srcfileloc  "cp/decl2.c" 99)
+  nil )
+ (!pair  "deferred_fns"
+  (!type already_seen 96)
+  (!srcfileloc  "cp/decl2.c" 95)
+  nil )
+ (!pair  "pending_statics"
+  (!type already_seen 96)
+  (!srcfileloc  "cp/decl2.c" 91)
+  nil )
+ (!pair  "start_cleanup_cnt"
+  (!type already_seen 2)
+  (!srcfileloc  "cp/decl.c" 8118)
+  nil )
+ (!pair  "decomp_type_table"
+  (!type already_seen 911)
+  (!srcfileloc  "cp/decl.c" 7598)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "typename_htab"
+  (!type already_seen 1830)
+  (!srcfileloc  "cp/decl.c" 3716)
+  nil )
+ (!pair  "local_entities"
+  (!type already_seen 96)
+  (!srcfileloc  "cp/decl.c" 875)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "incomplete_vars"
+  (!type already_seen 1825)
+  (!srcfileloc  "cp/decl.c" 247)
+  nil )
+ (!pair  "debug_type_map"
+  (!type already_seen 911)
+  (!srcfileloc  "cp/cp-objcp-common.c" 125)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "cp_eh_personality_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/cp-lang.c" 133)
+  nil )
+ (!pair  "fold_cache"
+  (!type already_seen 441)
+  (!srcfileloc  "cp/cp-gimplify.c" 2203)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "cv_cache"
+  (!type already_seen 441)
+  (!srcfileloc  "cp/constexpr.c" 5516)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "fundef_copies_table"
+  (!type already_seen 441)
+  (!srcfileloc  "cp/constexpr.c" 1118)
+  nil )
+ (!pair  "constexpr_call_table"
+  (!type already_seen 1819)
+  (!srcfileloc  "cp/constexpr.c" 1052)
+  nil )
+ (!pair  "constexpr_fundef_table"
+  (!type already_seen 1814)
+  (!srcfileloc  "cp/constexpr.c" 155)
+  nil )
+ (!pair  "dvirt_fn"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/class.c" 9266)
+  nil )
+ (!pair  "abort_fndecl_addr"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/class.c" 9265)
+  nil )
+ (!pair  "sizeof_biggest_empty_class"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/class.c" 112)
+  nil )
+ (!pair  "default_arg_context"
+  (!type already_seen 96)
+  (!srcfileloc  "cp/call.c" 7668)
+  nil )
+ (!pair  "unemitted_tinfo_decls"
+  (!type already_seen 96)
+  (!srcfileloc  "cp/cp-tree.h" 6887)
+  nil )
+ (!pair  "ovl_op_alternate"
+  (!type array 2032 nil  gc_used "OVL_OP_MAX" 
+   (!type already_seen 8)
+  )
+  (!srcfileloc  "cp/cp-tree.h" 5723)
+  nil )
+ (!pair  "ovl_op_mapping"
+  (!type array 2033 nil  gc_used "MAX_TREE_CODES" 
+   (!type already_seen 8)
+  )
+  (!srcfileloc  "cp/cp-tree.h" 5721)
+  nil )
+ (!pair  "ovl_op_info"
+  (!type array 2034 nil  gc_used "2" 
+   (!type array 2035 nil  gc_used "OVL_OP_MAX" 
+    (!type already_seen 1767)
+   )
+  )
+  (!srcfileloc  "cp/cp-tree.h" 5719)
+  nil )
+ (!pair  "tls_aggregates"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/cp-tree.h" 5417)
+  nil )
+ (!pair  "static_aggregates"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/cp-tree.h" 5415)
+  nil )
+ (!pair  "keyed_classes"
+  (!type already_seen 96)
+  (!srcfileloc  "cp/cp-tree.h" 5321)
+  nil )
+ (!pair  "static_decls"
+  (!type already_seen 96)
+  (!srcfileloc  "cp/cp-tree.h" 5317)
+  nil )
+ (!pair  "integer_two_node"
+  (!type already_seen 23)
+  (!srcfileloc  "cp/cp-tree.h" 5243)
+  nil )
+ (!pair  "scope_chain"
+  (!type already_seen 1754)
+  (!srcfileloc  "cp/cp-tree.h" 1662)
+  nil )
+ (!pair  "cp_global_trees"
+  (!type array 2036 nil  gc_used "CPTI_MAX" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "cp/cp-tree.h" 208)
+  nil )
+ (!pair  "current_omp_declare_target_attribute"
+  (!type already_seen 2)
+  (!srcfileloc  "c/c-lang.h" 66)
+  nil )
+ (!pair  "the_parser"
+  (!type already_seen 1736)
+  (!srcfileloc  "c/c-parser.c" 240)
+  nil )
+ (!pair  "locus"
+  (!type already_seen 23)
+  (!srcfileloc  "c-family/c-format.c" 64)
+  nil )
+ (!pair  "local_cgraph_node_ptr_node"
+  (!type already_seen 23)
+  (!srcfileloc  "c-family/c-format.c" 63)
+  nil )
+ (!pair  "local_gimple_ptr_node"
+  (!type already_seen 23)
+  (!srcfileloc  "c-family/c-format.c" 62)
+  nil )
+ (!pair  "local_tree_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "c-family/c-format.c" 61)
+  nil )
+ (!pair  "options_stack"
+  (!type already_seen 1721)
+  (!srcfileloc  "c-family/c-pragma.c" 995)
+  nil )
+ (!pair  "pending_redefine_extname"
+  (!type already_seen 1719)
+  (!srcfileloc  "c-family/c-pragma.c" 484)
+  nil )
+ (!pair  "pending_weaks"
+  (!type already_seen 1716)
+  (!srcfileloc  "c-family/c-pragma.c" 238)
+  nil )
+ (!pair  "alignment_stack"
+  (!type already_seen 1713)
+  (!srcfileloc  "c-family/c-pragma.c" 48)
+  nil )
+ (!pair  "pragma_extern_prefix"
+  (!type already_seen 23)
+  (!srcfileloc  "c-family/c-pragma.h" 243)
+  nil )
+ (!pair  "lazy_hex_fp_value_count"
+  (!type already_seen 2)
+  (!srcfileloc  "c-family/c-cppbuiltin.c" 1601)
+  nil )
+ (!pair  "lazy_hex_fp_values"
+  (!type array 2037 nil  gc_used "LAZY_HEX_FP_VALUES_CNT" 
+   (!type already_seen 1709)
+  )
+  (!srcfileloc  "c-family/c-cppbuiltin.c" 1600)
+  nil )
+ (!pair  "g_string_concat_db"
+  (!type already_seen 716)
+  (!srcfileloc  "c-family/c-common.h" 1091)
+  nil )
+ (!pair  "registered_builtin_types"
+  (!type already_seen 23)
+  (!srcfileloc  "c-family/c-common.h" 1074)
+  nil )
+ (!pair  "pending_lang_change"
+  (!type already_seen 2)
+  (!srcfileloc  "c-family/c-common.h" 1028)
+  nil )
+ (!pair  "c_global_trees"
+  (!type array 2038 nil  gc_used "CTI_MAX" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "c-family/c-common.h" 503)
+  nil )
+ (!pair  "ridpointers"
+  (!type already_seen 24)
+  (!srcfileloc  "c-family/c-common.h" 287)
+  (!options 
+   (!option length string  "(int) RID_MAX")
+  )
+ )
+ (!pair  "tree_vector_cache"
+  (!type already_seen 1699)
+  (!srcfileloc  "c-family/c-common.c" 7698)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "optimize_args"
+  (!type already_seen 1697)
+  (!srcfileloc  "c-family/c-common.c" 5514)
+  nil )
+ (!pair  "compound_literal_number"
+  (!type already_seen 2)
+  (!srcfileloc  "c-family/c-common.c" 4468)
+  nil )
+ (!pair  "built_in_attributes"
+  (!type array 2039 nil  gc_used "(int) ATTR_LAST" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "c-family/c-common.c" 3762)
+  nil )
+ (!pair  "ext_block"
+  (!type already_seen 23)
+  (!srcfileloc  "c/c-decl.c" 11545)
+  nil )
+ (!pair  "last_structptr_types"
+  (!type array 2040 nil  gc_used "6" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "c/c-decl.c" 1649)
+  nil )
+ (!pair  "c_inline_statics"
+  (!type already_seen 1689)
+  (!srcfileloc  "c/c-decl.c" 558)
+  nil )
+ (!pair  "binding_freelist"
+  (!type already_seen 635)
+  (!srcfileloc  "c/c-decl.c" 510)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "scope_freelist"
+  (!type already_seen 641)
+  (!srcfileloc  "c/c-decl.c" 506)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "external_scope"
+  (!type already_seen 641)
+  (!srcfileloc  "c/c-decl.c" 502)
+  nil )
+ (!pair  "file_scope"
+  (!type already_seen 641)
+  (!srcfileloc  "c/c-decl.c" 497)
+  nil )
+ (!pair  "current_function_scope"
+  (!type already_seen 641)
+  (!srcfileloc  "c/c-decl.c" 493)
+  nil )
+ (!pair  "current_scope"
+  (!type already_seen 641)
+  (!srcfileloc  "c/c-decl.c" 487)
+  nil )
+ (!pair  "visible_builtins"
+  (!type already_seen 23)
+  (!srcfileloc  "c/c-decl.c" 120)
+  nil )
+ (!pair  "c_stmt_tree"
+  (!type already_seen 107)
+  (!srcfileloc  "c/c-decl.c" 113)
+  nil )
+ (!pair  "signed_size_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "brig/brig-lang.c" 584)
+  nil )
+ (!pair  "uintmax_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "brig/brig-lang.c" 583)
+  nil )
+ (!pair  "intmax_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "brig/brig-lang.c" 582)
+  nil )
+ (!pair  "wint_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "brig/brig-lang.c" 581)
+  nil )
+ (!pair  "const_string_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "brig/brig-lang.c" 580)
+  nil )
+ (!pair  "string_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "brig/brig-lang.c" 579)
+  nil )
+ (!pair  "builtin_types"
+  (!type array 2041 nil  gc_used "(int) BT_LAST + 1" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "brig/brig-lang.c" 577)
+  nil )
+ (!pair  "built_in_attributes"
+  (!type array 2042 nil  gc_used "(int) ATTR_LAST" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "brig/brig-lang.c" 574)
+  nil )
+ (!pair  "brig_gc_root"
+  (!type already_seen 23)
+  (!srcfileloc  "brig/brig-lang.c" 434)
+  nil )
+ (!pair  "registered_builtin_types"
+  (!type already_seen 23)
+  (!srcfileloc  "brig/brig-lang.c" 327)
+  nil )
+ (!pair  "gnat_eh_personality_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "ada/gcc-interface/misc.c" 1334)
+  nil )
+ (!pair  "built_in_attributes"
+  (!type array 2043 nil  gc_used "(int) ATTR_LAST" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "ada/gcc-interface/utils.c" 6074)
+  nil )
+ (!pair  "builtin_types"
+  (!type array 2044 nil  gc_used "(int) BT_LAST + 1" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "ada/gcc-interface/utils.c" 5908)
+  nil )
+ (!pair  "dummy_global"
+  (!type already_seen 23)
+  (!srcfileloc  "ada/gcc-interface/utils.c" 5675)
+  nil )
+ (!pair  "pad_type_hash_table"
+  (!type already_seen 1676)
+  (!srcfileloc  "ada/gcc-interface/utils.c" 245)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "free_block_chain"
+  (!type already_seen 23)
+  (!srcfileloc  "ada/gcc-interface/utils.c" 222)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "builtin_decls"
+  (!type already_seen 96)
+  (!srcfileloc  "ada/gcc-interface/utils.c" 219)
+  nil )
+ (!pair  "global_decls"
+  (!type already_seen 96)
+  (!srcfileloc  "ada/gcc-interface/utils.c" 216)
+  nil )
+ (!pair  "global_context"
+  (!type already_seen 23)
+  (!srcfileloc  "ada/gcc-interface/utils.c" 213)
+  nil )
+ (!pair  "free_binding_level"
+  (!type already_seen 1672)
+  (!srcfileloc  "ada/gcc-interface/utils.c" 210)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "current_binding_level"
+  (!type already_seen 1672)
+  (!srcfileloc  "ada/gcc-interface/utils.c" 207)
+  nil )
+ (!pair  "float_types"
+  (!type array 2045 nil  gc_used "NUM_MACHINE_MODES" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "ada/gcc-interface/utils.c" 191)
+  nil )
+ (!pair  "signed_and_unsigned_types"
+  (!type array 2046 nil  gc_used "2 * MAX_BITS_PER_WORD + 1" 
+   (!type array 2047 nil  gc_used "2" 
+    (!type already_seen 23)
+   )
+  )
+  (!srcfileloc  "ada/gcc-interface/utils.c" 188)
+  nil )
+ (!pair  "dummy_node_table"
+  (!type already_seen 24)
+  (!srcfileloc  "ada/gcc-interface/utils.c" 171)
+  (!options 
+   (!option length string  "max_gnat_nodes")
+  )
+ )
+ (!pair  "associate_gnat_to_gnu"
+  (!type already_seen 24)
+  (!srcfileloc  "ada/gcc-interface/utils.c" 159)
+  (!options 
+   (!option length string  "max_gnat_nodes")
+  )
+ )
+ (!pair  "thunk_labelno"
+  (!type already_seen 2)
+  (!srcfileloc  "ada/gcc-interface/trans.c" 11078)
+  nil )
+ (!pair  "gnu_loop_stack"
+  (!type already_seen 1669)
+  (!srcfileloc  "ada/gcc-interface/trans.c" 210)
+  nil )
+ (!pair  "gnu_return_var_stack"
+  (!type already_seen 96)
+  (!srcfileloc  "ada/gcc-interface/trans.c" 178)
+  nil )
+ (!pair  "gnu_return_label_stack"
+  (!type already_seen 96)
+  (!srcfileloc  "ada/gcc-interface/trans.c" 174)
+  nil )
+ (!pair  "gnu_elab_proc_stack"
+  (!type already_seen 96)
+  (!srcfileloc  "ada/gcc-interface/trans.c" 170)
+  nil )
+ (!pair  "gnu_incoming_exc_ptr"
+  (!type already_seen 23)
+  (!srcfileloc  "ada/gcc-interface/trans.c" 167)
+  nil )
+ (!pair  "gnu_except_ptr_stack"
+  (!type already_seen 96)
+  (!srcfileloc  "ada/gcc-interface/trans.c" 164)
+  nil )
+ (!pair  "elab_info_list"
+  (!type already_seen 1661)
+  (!srcfileloc  "ada/gcc-interface/trans.c" 159)
+  nil )
+ (!pair  "stmt_group_free_list"
+  (!type already_seen 1659)
+  (!srcfileloc  "ada/gcc-interface/trans.c" 146)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "current_stmt_group"
+  (!type already_seen 1659)
+  (!srcfileloc  "ada/gcc-interface/trans.c" 143)
+  nil )
+ (!pair  "dummy_to_subprog_map"
+  (!type already_seen 1654)
+  (!srcfileloc  "ada/gcc-interface/decl.c" 197)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "annotate_value_cache"
+  (!type already_seen 1646)
+  (!srcfileloc  "ada/gcc-interface/decl.c" 156)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "gnat_raise_decls_ext"
+  (!type array 2048 nil  gc_used "(int) LAST_REASON_CODE + 1" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "ada/gcc-interface/gigi.h" 453)
+  nil )
+ (!pair  "gnat_raise_decls"
+  (!type array 2049 nil  gc_used "(int) LAST_REASON_CODE + 1" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "ada/gcc-interface/gigi.h" 452)
+  nil )
+ (!pair  "gnat_std_decls"
+  (!type array 2050 nil  gc_used "(int) ADT_LAST" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "ada/gcc-interface/gigi.h" 451)
+  nil )
+ (!pair  "aarch64_builtin_decls"
+  (!type array 2051 nil  gc_used "AARCH64_BUILTIN_MAX" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "config/aarch64/aarch64-builtins.c" 464)
+  nil )
+ (!pair  "omp_requires_mask"
+  (!type already_seen 2)
+  (!srcfileloc  "omp-general.h" 103)
+  nil )
+ (!pair  "alloc_object_size_limit"
+  (!type already_seen 23)
+  (!srcfileloc  "calls.c" 1204)
+  nil )
+ (!pair  "hsa_tree_gt_roots"
+  (!type array 2052 nil  gc_used "3" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "hsa-common.c" 745)
+  nil )
+ (!pair  "hsa_decl_kernel_mapping"
+  (!type already_seen 1625)
+  (!srcfileloc  "hsa-common.c" 68)
+  nil )
+ (!pair  "internal_fn_fnspec_array"
+  (!type array 2053 nil  gc_used "IFN_LAST + 1" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "internal-fn.h" 124)
+  nil )
+ (!pair  "odr_types_ptr"
+  (!type already_seen 1613)
+  (!srcfileloc  "ipa-devirt.c" 620)
+  nil )
+ (!pair  "ubsan_vptr_type_cache_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "ubsan.c" 1197)
+  nil )
+ (!pair  "ubsan_ids"
+  (!type array 2054 nil  gc_used "2" 
+   (!type already_seen 2)
+  )
+  (!srcfileloc  "ubsan.c" 342)
+  nil )
+ (!pair  "ubsan_source_location_type"
+  (!type already_seen 23)
+  (!srcfileloc  "ubsan.c" 238)
+  nil )
+ (!pair  "ubsan_type_descriptor_type"
+  (!type already_seen 23)
+  (!srcfileloc  "ubsan.c" 189)
+  nil )
+ (!pair  "decl_tree_for_type"
+  (!type already_seen 1595)
+  (!srcfileloc  "ubsan.c" 82)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "asan_ctor_statements"
+  (!type already_seen 23)
+  (!srcfileloc  "asan.c" 3033)
+  nil )
+ (!pair  "asan_detect_stack_use_after_return"
+  (!type already_seen 23)
+  (!srcfileloc  "asan.c" 354)
+  nil )
+ (!pair  "shadow_ptr_types"
+  (!type array 2055 nil  gc_used "3" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "asan.c" 351)
+  nil )
+ (!pair  "vtbl_mangled_name_ids"
+  (!type already_seen 96)
+  (!srcfileloc  "vtable-verify.c" 309)
+  nil )
+ (!pair  "vtbl_mangled_name_types"
+  (!type already_seen 96)
+  (!srcfileloc  "vtable-verify.c" 308)
+  nil )
+ (!pair  "verify_vtbl_ptr_fndecl"
+  (!type already_seen 23)
+  (!srcfileloc  "vtable-verify.c" 151)
+  nil )
+ (!pair  "ipa_fn_summaries"
+  (!type already_seen 1577)
+  (!srcfileloc  "ipa-fnsummary.h" 205)
+  nil )
+ (!pair  "tm_wrap_map"
+  (!type already_seen 1533)
+  (!srcfileloc  "trans-mem.c" 466)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "ipcp_transformation_sum"
+  (!type already_seen 1530)
+  (!srcfileloc  "ipa-prop.h" 673)
+  nil )
+ (!pair  "ipa_edge_args_sum"
+  (!type already_seen 1527)
+  (!srcfileloc  "ipa-prop.h" 651)
+  nil )
+ (!pair  "ipa_node_params_sum"
+  (!type already_seen 1525)
+  (!srcfileloc  "ipa-prop.h" 649)
+  nil )
+ (!pair  "ipa_escaped_pt"
+  (!type already_seen 440)
+  (!srcfileloc  "tree-ssa-alias.h" 172)
+  nil )
+ (!pair  "free_phinodes"
+  (!type array 2056 nil  gc_used "NUM_BUCKETS - 2" 
+   (!type already_seen 1512)
+  )
+  (!srcfileloc  "tree-phinodes.c" 70)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "clone_fn_ids"
+  (!type already_seen 1509)
+  (!srcfileloc  "cgraphclones.c" 520)
+  nil )
+ (!pair  "vtable_entry_type"
+  (!type already_seen 23)
+  (!srcfileloc  "cgraphunit.c" 219)
+  nil )
+ (!pair  "order"
+  (!type already_seen 799)
+  (!srcfileloc  "passes.c" 1653)
+  (!options 
+   (!option length string  "nnodes")
+  )
+ )
+ (!pair  "va_list_type"
+  (!type already_seen 23)
+  (!srcfileloc  "config/aarch64/aarch64.c" 13195)
+  nil )
+ (!pair  "aarch64_previous_fndecl"
+  (!type already_seen 23)
+  (!srcfileloc  "config/aarch64/aarch64.c" 12211)
+  nil )
+ (!pair  "tls_get_addr_libfunc"
+  (!type already_seen 150)
+  (!srcfileloc  "config/aarch64/aarch64.c" 1918)
+  nil )
+ (!pair  "stack_chk_fail_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "targhooks.c" 898)
+  nil )
+ (!pair  "stack_chk_guard_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "targhooks.c" 865)
+  nil )
+ (!pair  "critical_name_mutexes"
+  (!type already_seen 441)
+  (!srcfileloc  "omp-low.c" 7949)
+  nil )
+ (!pair  "grid_attr_trees"
+  (!type already_seen 1469)
+  (!srcfileloc  "omp-expand.c" 7036)
+  nil )
+ (!pair  "offload_vars"
+  (!type already_seen 96)
+  (!srcfileloc  "omp-offload.h" 30)
+  nil )
+ (!pair  "offload_funcs"
+  (!type already_seen 96)
+  (!srcfileloc  "omp-offload.h" 29)
+  nil )
+ (!pair  "descriptor_type"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-nested.c" 535)
+  nil )
+ (!pair  "trampoline_type"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-nested.c" 495)
+  nil )
+ (!pair  "ic_tuple_callee_field"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-profile.c" 72)
+  nil )
+ (!pair  "ic_tuple_counters_field"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-profile.c" 71)
+  nil )
+ (!pair  "ic_tuple_var"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-profile.c" 70)
+  nil )
+ (!pair  "tree_time_profiler_counter"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-profile.c" 67)
+  nil )
+ (!pair  "tree_ior_profiler_fn"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-profile.c" 66)
+  nil )
+ (!pair  "tree_average_profiler_fn"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-profile.c" 65)
+  nil )
+ (!pair  "tree_indirect_call_profiler_fn"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-profile.c" 64)
+  nil )
+ (!pair  "tree_one_value_profiler_fn"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-profile.c" 63)
+  nil )
+ (!pair  "tree_pow2_profiler_fn"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-profile.c" 62)
+  nil )
+ (!pair  "tree_interval_profiler_fn"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-profile.c" 61)
+  nil )
+ (!pair  "gcov_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-profile.c" 60)
+  nil )
+ (!pair  "scalar_evolution_info"
+  (!type already_seen 1455)
+  (!srcfileloc  "tree-scalar-evolution.c" 328)
+  nil )
+ (!pair  "chrec_known"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-chrec.h" 30)
+  nil )
+ (!pair  "chrec_dont_know"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-chrec.h" 29)
+  nil )
+ (!pair  "tmp_var_id_num"
+  (!type already_seen 2)
+  (!srcfileloc  "gimple-expr.c" 412)
+  nil )
+ (!pair  "stmt_list_cache"
+  (!type already_seen 96)
+  (!srcfileloc  "tree-iterator.c" 31)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "addr_list"
+  (!type already_seen 269)
+  (!srcfileloc  "tree-ssa-loop-ivopts.c" 2598)
+  nil )
+ (!pair  "mem_addr_template_list"
+  (!type already_seen 1416)
+  (!srcfileloc  "tree-ssa-address.c" 94)
+  nil )
+ (!pair  "elf_fini_array_section"
+  (!type already_seen 263)
+  (!srcfileloc  "varasm.c" 7999)
+  nil )
+ (!pair  "elf_init_array_section"
+  (!type already_seen 263)
+  (!srcfileloc  "varasm.c" 7998)
+  nil )
+ (!pair  "tm_clone_hash"
+  (!type already_seen 1395)
+  (!srcfileloc  "varasm.c" 6032)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "weakref_targets"
+  (!type already_seen 23)
+  (!srcfileloc  "varasm.c" 5704)
+  nil )
+ (!pair  "const_desc_htab"
+  (!type already_seen 1390)
+  (!srcfileloc  "varasm.c" 2992)
+  nil )
+ (!pair  "initial_trampoline"
+  (!type already_seen 150)
+  (!srcfileloc  "varasm.c" 2659)
+  nil )
+ (!pair  "weak_decls"
+  (!type already_seen 23)
+  (!srcfileloc  "varasm.c" 2461)
+  nil )
+ (!pair  "pending_assemble_externals"
+  (!type already_seen 23)
+  (!srcfileloc  "varasm.c" 2392)
+  nil )
+ (!pair  "shared_constant_pool"
+  (!type already_seen 971)
+  (!srcfileloc  "varasm.c" 205)
+  nil )
+ (!pair  "anchor_labelno"
+  (!type already_seen 2)
+  (!srcfileloc  "varasm.c" 202)
+  nil )
+ (!pair  "object_block_htab"
+  (!type already_seen 1387)
+  (!srcfileloc  "varasm.c" 199)
+  nil )
+ (!pair  "section_htab"
+  (!type already_seen 1384)
+  (!srcfileloc  "varasm.c" 188)
+  nil )
+ (!pair  "unnamed_sections"
+  (!type already_seen 263)
+  (!srcfileloc  "varasm.c" 173)
+  nil )
+ (!pair  "const_labelno"
+  (!type already_seen 2)
+  (!srcfileloc  "varasm.c" 80)
+  nil )
+ (!pair  "weak_global_object_name"
+  (!type already_seen 11)
+  (!srcfileloc  "varasm.c" 66)
+  nil )
+ (!pair  "first_global_object_name"
+  (!type already_seen 11)
+  (!srcfileloc  "varasm.c" 65)
+  nil )
+ (!pair  "gcc_eh_personality_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "tree.c" 12976)
+  nil )
+ (!pair  "nonstandard_boolean_type_cache"
+  (!type array 2057 nil  gc_used "MAX_BOOL_CACHED_PREC + 1" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "tree.c" 8220)
+  nil )
+ (!pair  "nonstandard_integer_type_cache"
+  (!type array 2058 nil  gc_used "2 * MAX_INT_CACHED_PREC + 2" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "tree.c" 8178)
+  nil )
+ (!pair  "debug_args_for_decl"
+  (!type already_seen 1377)
+  (!srcfileloc  "tree.c" 261)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "value_expr_for_decl"
+  (!type already_seen 1374)
+  (!srcfileloc  "tree.c" 241)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "debug_expr_for_decl"
+  (!type already_seen 1374)
+  (!srcfileloc  "tree.c" 238)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "cl_option_hash_table"
+  (!type already_seen 1372)
+  (!srcfileloc  "tree.c" 232)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "cl_target_option_node"
+  (!type already_seen 23)
+  (!srcfileloc  "tree.c" 224)
+  nil )
+ (!pair  "cl_optimization_node"
+  (!type already_seen 23)
+  (!srcfileloc  "tree.c" 223)
+  nil )
+ (!pair  "poly_int_cst_hash_table"
+  (!type already_seen 1369)
+  (!srcfileloc  "tree.c" 216)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "int_cst_hash_table"
+  (!type already_seen 1366)
+  (!srcfileloc  "tree.c" 205)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "int_cst_node"
+  (!type already_seen 23)
+  (!srcfileloc  "tree.c" 197)
+  nil )
+ (!pair  "type_hash_table"
+  (!type already_seen 1363)
+  (!srcfileloc  "tree.c" 194)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "next_debug_decl_uid"
+  (!type already_seen 2)
+  (!srcfileloc  "tree.c" 162)
+  nil )
+ (!pair  "next_type_uid"
+  (!type already_seen 2)
+  (!srcfileloc  "tree.c" 159)
+  nil )
+ (!pair  "next_decl_uid"
+  (!type already_seen 2)
+  (!srcfileloc  "tree.c" 157)
+  nil )
+ (!pair  "spd"
+  (!type already_seen 1359)
+  (!srcfileloc  "stringpool.c" 240)
+  nil )
+ (!pair  "size_functions"
+  (!type already_seen 96)
+  (!srcfileloc  "stor-layout.c" 87)
+  nil )
+ (!pair  "cfg_layout_function_header"
+  (!type already_seen 346)
+  (!srcfileloc  "cfgrtl.c" 68)
+  nil )
+ (!pair  "cfg_layout_function_footer"
+  (!type already_seen 346)
+  (!srcfileloc  "cfgrtl.c" 67)
+  nil )
+ (!pair  "libfunc_decls"
+  (!type already_seen 1335)
+  (!srcfileloc  "optabs-libfuncs.c" 720)
+  nil )
+ (!pair  "unused_expr_list"
+  (!type already_seen 150)
+  (!srcfileloc  "lists.c" 34)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "unused_insn_list"
+  (!type already_seen 150)
+  (!srcfileloc  "lists.c" 31)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "queue"
+  (!type already_seen 96)
+  (!srcfileloc  "godump.c" 57)
+  nil )
+ (!pair  "test_insn"
+  (!type already_seen 346)
+  (!srcfileloc  "gcse.c" 823)
+  nil )
+ (!pair  "dummy_unittesting_tree"
+  (!type already_seen 23)
+  (!srcfileloc  "ggc-tests.c" 453)
+  nil )
+ (!pair  "root_user_struct_ptr"
+  (!type already_seen 1314)
+  (!srcfileloc  "ggc-tests.c" 400)
+  nil )
+ (!pair  "root_test_node"
+  (!type already_seen 1312)
+  (!srcfileloc  "ggc-tests.c" 338)
+  nil )
+ (!pair  "test_some_other_subclass_as_base_ptr"
+  (!type already_seen 1306)
+  (!srcfileloc  "ggc-tests.c" 285)
+  nil )
+ (!pair  "test_some_subclass_as_base_ptr"
+  (!type already_seen 1306)
+  (!srcfileloc  "ggc-tests.c" 284)
+  nil )
+ (!pair  "test_some_other_subclass"
+  (!type already_seen 1310)
+  (!srcfileloc  "ggc-tests.c" 283)
+  nil )
+ (!pair  "test_some_subclass"
+  (!type already_seen 1308)
+  (!srcfileloc  "ggc-tests.c" 282)
+  nil )
+ (!pair  "test_example_base"
+  (!type already_seen 1306)
+  (!srcfileloc  "ggc-tests.c" 281)
+  nil )
+ (!pair  "test_of_deletable"
+  (!type already_seen 893)
+  (!srcfileloc  "ggc-tests.c" 215)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "root_test_of_union_2"
+  (!type already_seen 1303)
+  (!srcfileloc  "ggc-tests.c" 146)
+  nil )
+ (!pair  "root_test_of_union_1"
+  (!type already_seen 1303)
+  (!srcfileloc  "ggc-tests.c" 145)
+  nil )
+ (!pair  "root_test_of_length"
+  (!type already_seen 1300)
+  (!srcfileloc  "ggc-tests.c" 79)
+  nil )
+ (!pair  "root_test_struct"
+  (!type already_seen 893)
+  (!srcfileloc  "ggc-tests.c" 53)
+  nil )
+ (!pair  "sjlj_fc_type_node"
+  (!type already_seen 23)
+  (!srcfileloc  "except.c" 155)
+  nil )
+ (!pair  "setjmp_fn"
+  (!type already_seen 23)
+  (!srcfileloc  "except.c" 152)
+  nil )
+ (!pair  "type_to_runtime_map"
+  (!type already_seen 1286)
+  (!srcfileloc  "except.c" 150)
+  nil )
+ (!pair  "call_site_base"
+  (!type already_seen 2)
+  (!srcfileloc  "except.c" 148)
+  nil )
+ (!pair  "next_block_index"
+  (!type already_seen 2)
+  (!srcfileloc  "function.c" 4548)
+  nil )
+ (!pair  "temp_slot_address_table"
+  (!type already_seen 1278)
+  (!srcfileloc  "function.c" 602)
+  nil )
+ (!pair  "epilogue_insn_hash"
+  (!type already_seen 1274)
+  (!srcfileloc  "function.c" 128)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "prologue_insn_hash"
+  (!type already_seen 1274)
+  (!srcfileloc  "function.c" 126)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "funcdef_no"
+  (!type already_seen 2)
+  (!srcfileloc  "function.c" 108)
+  nil )
+ (!pair  "stack_check_libfunc"
+  (!type already_seen 150)
+  (!srcfileloc  "explow.c" 1616)
+  nil )
+ (!pair  "hard_reg_clobbers_high"
+  (!type array 2059 nil  gc_used "NUM_MACHINE_MODES" 
+   (!type array 2060 nil  gc_used "FIRST_PSEUDO_REGISTER" 
+    (!type already_seen 150)
+   )
+  )
+  (!srcfileloc  "emit-rtl.c" 6509)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "hard_reg_clobbers"
+  (!type array 2061 nil  gc_used "NUM_MACHINE_MODES" 
+   (!type array 2062 nil  gc_used "FIRST_PSEUDO_REGISTER" 
+    (!type already_seen 150)
+   )
+  )
+  (!srcfileloc  "emit-rtl.c" 6497)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "free_sequence_stack"
+  (!type already_seen 959)
+  (!srcfileloc  "emit-rtl.c" 5502)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "spill_slot_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "emit-rtl.c" 2651)
+  nil )
+ (!pair  "const_fixed_htab"
+  (!type already_seen 1263)
+  (!srcfileloc  "emit-rtl.c" 187)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "const_double_htab"
+  (!type already_seen 1260)
+  (!srcfileloc  "emit-rtl.c" 178)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "reg_attrs_htab"
+  (!type already_seen 1257)
+  (!srcfileloc  "emit-rtl.c" 169)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "const_poly_int_htab"
+  (!type already_seen 1254)
+  (!srcfileloc  "emit-rtl.c" 160)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "const_wide_int_htab"
+  (!type already_seen 1251)
+  (!srcfileloc  "emit-rtl.c" 150)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "const_int_htab"
+  (!type already_seen 1248)
+  (!srcfileloc  "emit-rtl.c" 142)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "label_num"
+  (!type already_seen 2)
+  (!srcfileloc  "emit-rtl.c" 92)
+  nil )
+ (!pair  "x_rtl"
+  (!type already_seen 1245)
+  (!srcfileloc  "emit-rtl.h" 314)
+  nil )
+ (!pair  "shift_test"
+  (!type already_seen 150)
+  (!srcfileloc  "dojump.c" 127)
+  nil )
+ (!pair  "and_test"
+  (!type already_seen 150)
+  (!srcfileloc  "dojump.c" 126)
+  nil )
+ (!pair  "and_reg"
+  (!type already_seen 150)
+  (!srcfileloc  "dojump.c" 125)
+  nil )
+ (!pair  "vector_last_nunits"
+  (!type already_seen 2)
+  (!srcfileloc  "tree-vect-generic.c" 101)
+  nil )
+ (!pair  "vector_last_type"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-vect-generic.c" 100)
+  nil )
+ (!pair  "vector_inner_type"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-vect-generic.c" 99)
+  nil )
+ (!pair  "inline_entry_data_table"
+  (!type already_seen 1228)
+  (!srcfileloc  "dwarf2out.c" 23655)
+  nil )
+ (!pair  "external_die_map"
+  (!type already_seen 1213)
+  (!srcfileloc  "dwarf2out.c" 5790)
+  nil )
+ (!pair  "addr_index_table"
+  (!type already_seen 1210)
+  (!srcfileloc  "dwarf2out.c" 4950)
+  nil )
+ (!pair  "generic_type_instances"
+  (!type already_seen 96)
+  (!srcfileloc  "dwarf2out.c" 3608)
+  nil )
+ (!pair  "tmpl_value_parm_die_table"
+  (!type already_seen 1203)
+  (!srcfileloc  "dwarf2out.c" 3602)
+  nil )
+ (!pair  "label_num"
+  (!type already_seen 2)
+  (!srcfileloc  "dwarf2out.c" 3600)
+  nil )
+ (!pair  "last_emitted_file"
+  (!type already_seen 503)
+  (!srcfileloc  "dwarf2out.c" 3597)
+  nil )
+ (!pair  "poc_label_num"
+  (!type already_seen 2)
+  (!srcfileloc  "dwarf2out.c" 3594)
+  nil )
+ (!pair  "loclabel_num"
+  (!type already_seen 2)
+  (!srcfileloc  "dwarf2out.c" 3591)
+  nil )
+ (!pair  "have_location_lists"
+  (!type already_seen 2)
+  (!srcfileloc  "dwarf2out.c" 3588)
+  nil )
+ (!pair  "ranges_by_label"
+  (!type already_seen 1201)
+  (!srcfileloc  "dwarf2out.c" 3585)
+  nil )
+ (!pair  "ranges_table"
+  (!type already_seen 1199)
+  (!srcfileloc  "dwarf2out.c" 3582)
+  nil )
+ (!pair  "macinfo_table"
+  (!type already_seen 1197)
+  (!srcfileloc  "dwarf2out.c" 3572)
+  nil )
+ (!pair  "pubtype_table"
+  (!type already_seen 1195)
+  (!srcfileloc  "dwarf2out.c" 3568)
+  nil )
+ (!pair  "pubname_table"
+  (!type already_seen 1195)
+  (!srcfileloc  "dwarf2out.c" 3564)
+  nil )
+ (!pair  "separate_line_info"
+  (!type already_seen 1193)
+  (!srcfileloc  "dwarf2out.c" 3556)
+  nil )
+ (!pair  "cold_text_section_line_info"
+  (!type already_seen 1155)
+  (!srcfileloc  "dwarf2out.c" 3553)
+  nil )
+ (!pair  "text_section_line_info"
+  (!type already_seen 1155)
+  (!srcfileloc  "dwarf2out.c" 3552)
+  nil )
+ (!pair  "cur_line_info_table"
+  (!type already_seen 1155)
+  (!srcfileloc  "dwarf2out.c" 3549)
+  nil )
+ (!pair  "abbrev_die_table"
+  (!type already_seen 1171)
+  (!srcfileloc  "dwarf2out.c" 3535)
+  nil )
+ (!pair  "cached_dw_loc_list_table"
+  (!type already_seen 1191)
+  (!srcfileloc  "dwarf2out.c" 3531)
+  nil )
+ (!pair  "call_arg_locations"
+  (!type already_seen 1184)
+  (!srcfileloc  "dwarf2out.c" 3503)
+  nil )
+ (!pair  "decl_loc_table"
+  (!type already_seen 1187)
+  (!srcfileloc  "dwarf2out.c" 3500)
+  nil )
+ (!pair  "common_block_die_table"
+  (!type already_seen 1178)
+  (!srcfileloc  "dwarf2out.c" 3434)
+  nil )
+ (!pair  "variable_value_hash"
+  (!type already_seen 1175)
+  (!srcfileloc  "dwarf2out.c" 3424)
+  nil )
+ (!pair  "decl_die_table"
+  (!type already_seen 1169)
+  (!srcfileloc  "dwarf2out.c" 3407)
+  nil )
+ (!pair  "file_table"
+  (!type already_seen 1166)
+  (!srcfileloc  "dwarf2out.c" 3396)
+  nil )
+ (!pair  "deferred_asm_name"
+  (!type already_seen 1162)
+  (!srcfileloc  "dwarf2out.c" 3385)
+  nil )
+ (!pair  "limbo_die_list"
+  (!type already_seen 1162)
+  (!srcfileloc  "dwarf2out.c" 3381)
+  nil )
+ (!pair  "cu_die_list"
+  (!type already_seen 1162)
+  (!srcfileloc  "dwarf2out.c" 3378)
+  nil )
+ (!pair  "comdat_type_list"
+  (!type already_seen 489)
+  (!srcfileloc  "dwarf2out.c" 3375)
+  nil )
+ (!pair  "single_comp_unit_die"
+  (!type already_seen 486)
+  (!srcfileloc  "dwarf2out.c" 3372)
+  nil )
+ (!pair  "zero_view_p"
+  (!type already_seen 133)
+  (!srcfileloc  "dwarf2out.c" 3297)
+  nil )
+ (!pair  "do_eh_frame"
+  (!type already_seen 2)
+  (!srcfileloc  "dwarf2out.c" 284)
+  nil )
+ (!pair  "current_unit_personality"
+  (!type already_seen 150)
+  (!srcfileloc  "dwarf2out.c" 281)
+  nil )
+ (!pair  "decltype_auto_die"
+  (!type already_seen 486)
+  (!srcfileloc  "dwarf2out.c" 272)
+  nil )
+ (!pair  "auto_die"
+  (!type already_seen 486)
+  (!srcfileloc  "dwarf2out.c" 269)
+  nil )
+ (!pair  "cold_text_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 266)
+  nil )
+ (!pair  "cold_text_section_used"
+  (!type already_seen 2)
+  (!srcfileloc  "dwarf2out.c" 263)
+  nil )
+ (!pair  "text_section_used"
+  (!type already_seen 2)
+  (!srcfileloc  "dwarf2out.c" 262)
+  nil )
+ (!pair  "have_multiple_function_sections"
+  (!type already_seen 2)
+  (!srcfileloc  "dwarf2out.c" 259)
+  nil )
+ (!pair  "dw2_string_counter"
+  (!type already_seen 2)
+  (!srcfileloc  "dwarf2out.c" 256)
+  nil )
+ (!pair  "skeleton_debug_str_hash"
+  (!type already_seen 1150)
+  (!srcfileloc  "dwarf2out.c" 254)
+  nil )
+ (!pair  "debug_line_str_hash"
+  (!type already_seen 1150)
+  (!srcfileloc  "dwarf2out.c" 233)
+  nil )
+ (!pair  "debug_str_hash"
+  (!type already_seen 1150)
+  (!srcfileloc  "dwarf2out.c" 231)
+  nil )
+ (!pair  "fde_vec"
+  (!type already_seen 1147)
+  (!srcfileloc  "dwarf2out.c" 213)
+  nil )
+ (!pair  "debug_frame_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 174)
+  nil )
+ (!pair  "debug_ranges_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 173)
+  nil )
+ (!pair  "debug_str_offsets_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 172)
+  nil )
+ (!pair  "debug_str_dwo_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 171)
+  nil )
+ (!pair  "debug_line_str_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 170)
+  nil )
+ (!pair  "debug_str_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 169)
+  nil )
+ (!pair  "debug_pubtypes_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 168)
+  nil )
+ (!pair  "debug_pubnames_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 167)
+  nil )
+ (!pair  "debug_loc_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 166)
+  nil )
+ (!pair  "debug_skeleton_line_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 165)
+  nil )
+ (!pair  "debug_line_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 164)
+  nil )
+ (!pair  "debug_macinfo_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 161)
+  nil )
+ (!pair  "debug_addr_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 160)
+  nil )
+ (!pair  "debug_aranges_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 159)
+  nil )
+ (!pair  "debug_skeleton_abbrev_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 158)
+  nil )
+ (!pair  "debug_abbrev_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 157)
+  nil )
+ (!pair  "debug_skeleton_info_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 156)
+  nil )
+ (!pair  "debug_info_section"
+  (!type already_seen 263)
+  (!srcfileloc  "dwarf2out.c" 155)
+  nil )
+ (!pair  "incomplete_types"
+  (!type already_seen 96)
+  (!srcfileloc  "dwarf2out.c" 152)
+  nil )
+ (!pair  "used_rtx_array"
+  (!type already_seen 269)
+  (!srcfileloc  "dwarf2out.c" 146)
+  nil )
+ (!pair  "saved_do_cfi_asm"
+  (!type already_seen 2)
+  (!srcfileloc  "dwarf2cfi.c" 3476)
+  nil )
+ (!pair  "dwarf2out_cfi_label_num"
+  (!type already_seen 2)
+  (!srcfileloc  "dwarf2cfi.c" 194)
+  nil )
+ (!pair  "cie_return_save"
+  (!type already_seen 1140)
+  (!srcfileloc  "dwarf2cfi.c" 192)
+  nil )
+ (!pair  "cie_cfi_row"
+  (!type already_seen 1138)
+  (!srcfileloc  "dwarf2cfi.c" 190)
+  nil )
+ (!pair  "dw2_const_labelno"
+  (!type already_seen 2)
+  (!srcfileloc  "dwarf2asm.c" 867)
+  nil )
+ (!pair  "indirect_pool"
+  (!type already_seen 1136)
+  (!srcfileloc  "dwarf2asm.c" 865)
+  nil )
+ (!pair  "cie_cfi_vec"
+  (!type already_seen 471)
+  (!srcfileloc  "dwarf2out.h" 297)
+  nil )
+ (!pair  "lastfile_is_base"
+  (!type already_seen 2)
+  (!srcfileloc  "dbxout.c" 254)
+  nil )
+ (!pair  "lastlineno"
+  (!type already_seen 2)
+  (!srcfileloc  "dbxout.c" 250)
+  nil )
+ (!pair  "lastfile"
+  (!type already_seen 11)
+  (!srcfileloc  "dbxout.c" 246)
+  nil )
+ (!pair  "source_label_number"
+  (!type already_seen 2)
+  (!srcfileloc  "dbxout.c" 242)
+  nil )
+ (!pair  "dbxout_source_line_counter"
+  (!type already_seen 2)
+  (!srcfileloc  "dbxout.c" 237)
+  nil )
+ (!pair  "scope_labelno"
+  (!type already_seen 2)
+  (!srcfileloc  "dbxout.c" 233)
+  nil )
+ (!pair  "next_file_number"
+  (!type already_seen 2)
+  (!srcfileloc  "dbxout.c" 229)
+  nil )
+ (!pair  "preinit_symbols"
+  (!type already_seen 23)
+  (!srcfileloc  "dbxout.c" 196)
+  nil )
+ (!pair  "next_type_number"
+  (!type already_seen 2)
+  (!srcfileloc  "dbxout.c" 190)
+  nil )
+ (!pair  "typevec_len"
+  (!type already_seen 2)
+  (!srcfileloc  "dbxout.c" 184)
+  nil )
+ (!pair  "typevec"
+  (!type already_seen 1131)
+  (!srcfileloc  "dbxout.c" 180)
+  (!options 
+   (!option length string  "typevec_len")
+  )
+ )
+ (!pair  "ipa_vr_hash_table"
+  (!type already_seen 1061)
+  (!srcfileloc  "ipa-prop.c" 150)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "ipa_bits_hash_table"
+  (!type already_seen 1058)
+  (!srcfileloc  "ipa-prop.c" 105)
+  (!options 
+   (!option cache string  "")
+  )
+ )
+ (!pair  "version_info_node"
+  (!type already_seen 1001)
+  (!srcfileloc  "cgraph.c" 138)
+  nil )
+ (!pair  "cgraph_fnver_htab"
+  (!type already_seen 1054)
+  (!srcfileloc  "cgraph.c" 118)
+  nil )
+ (!pair  "callmem"
+  (!type already_seen 150)
+  (!srcfileloc  "cselib.c" 221)
+  nil )
+ (!pair  "bitmap_ggc_free"
+  (!type already_seen 135)
+  (!srcfileloc  "bitmap.c" 55)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "frame_set"
+  (!type already_seen 2)
+  (!srcfileloc  "alias.c" 1288)
+  nil )
+ (!pair  "varargs_set"
+  (!type already_seen 2)
+  (!srcfileloc  "alias.c" 1266)
+  nil )
+ (!pair  "alias_sets"
+  (!type already_seen 1047)
+  (!srcfileloc  "alias.c" 278)
+  nil )
+ (!pair  "reg_known_value"
+  (!type already_seen 269)
+  (!srcfileloc  "alias.c" 256)
+  nil )
+ (!pair  "old_reg_base_value"
+  (!type already_seen 269)
+  (!srcfileloc  "alias.c" 237)
+  (!options 
+   (!option deletable string  "")
+  )
+ )
+ (!pair  "arg_base_value"
+  (!type already_seen 150)
+  (!srcfileloc  "alias.c" 229)
+  nil )
+ (!pair  "reg_base_value"
+  (!type already_seen 269)
+  (!srcfileloc  "alias.c" 224)
+  nil )
+ (!pair  "restinsn"
+  (!type already_seen 346)
+  (!srcfileloc  "caller-save.c" 106)
+  nil )
+ (!pair  "saveinsn"
+  (!type already_seen 346)
+  (!srcfileloc  "caller-save.c" 105)
+  nil )
+ (!pair  "test_mem"
+  (!type already_seen 150)
+  (!srcfileloc  "caller-save.c" 104)
+  nil )
+ (!pair  "test_reg"
+  (!type already_seen 150)
+  (!srcfileloc  "caller-save.c" 103)
+  nil )
+ (!pair  "restpat"
+  (!type already_seen 150)
+  (!srcfileloc  "caller-save.c" 102)
+  nil )
+ (!pair  "savepat"
+  (!type already_seen 150)
+  (!srcfileloc  "caller-save.c" 101)
+  nil )
+ (!pair  "saved_symtab"
+  (!type already_seen 1024)
+  (!srcfileloc  "cgraph.h" 3429)
+  nil )
+ (!pair  "symtab"
+  (!type already_seen 1024)
+  (!srcfileloc  "cgraph.h" 2390)
+  nil )
+ (!pair  "in_cold_section_p"
+  (!type already_seen 2)
+  (!srcfileloc  "output.h" 515)
+  nil )
+ (!pair  "in_section"
+  (!type already_seen 263)
+  (!srcfileloc  "output.h" 514)
+  nil )
+ (!pair  "bss_noswitch_section"
+  (!type already_seen 263)
+  (!srcfileloc  "output.h" 512)
+  nil )
+ (!pair  "lcomm_section"
+  (!type already_seen 263)
+  (!srcfileloc  "output.h" 511)
+  nil )
+ (!pair  "comm_section"
+  (!type already_seen 263)
+  (!srcfileloc  "output.h" 510)
+  nil )
+ (!pair  "tls_comm_section"
+  (!type already_seen 263)
+  (!srcfileloc  "output.h" 509)
+  nil )
+ (!pair  "eh_frame_section"
+  (!type already_seen 263)
+  (!srcfileloc  "output.h" 508)
+  nil )
+ (!pair  "exception_section"
+  (!type already_seen 263)
+  (!srcfileloc  "output.h" 507)
+  nil )
+ (!pair  "sbss_section"
+  (!type already_seen 263)
+  (!srcfileloc  "output.h" 506)
+  nil )
+ (!pair  "bss_section"
+  (!type already_seen 263)
+  (!srcfileloc  "output.h" 505)
+  nil )
+ (!pair  "dtors_section"
+  (!type already_seen 263)
+  (!srcfileloc  "output.h" 504)
+  nil )
+ (!pair  "ctors_section"
+  (!type already_seen 263)
+  (!srcfileloc  "output.h" 503)
+  nil )
+ (!pair  "sdata_section"
+  (!type already_seen 263)
+  (!srcfileloc  "output.h" 502)
+  nil )
+ (!pair  "readonly_data_section"
+  (!type already_seen 263)
+  (!srcfileloc  "output.h" 501)
+  nil )
+ (!pair  "data_section"
+  (!type already_seen 263)
+  (!srcfileloc  "output.h" 500)
+  nil )
+ (!pair  "text_section"
+  (!type already_seen 263)
+  (!srcfileloc  "output.h" 499)
+  nil )
+ (!pair  "types_used_by_cur_var_decl"
+  (!type already_seen 96)
+  (!srcfileloc  "function.h" 445)
+  nil )
+ (!pair  "types_used_by_vars_hash"
+  (!type already_seen 982)
+  (!srcfileloc  "function.h" 439)
+  nil )
+ (!pair  "cfun"
+  (!type already_seen 406)
+  (!srcfileloc  "function.h" 410)
+  nil )
+ (!pair  "regno_reg_rtx"
+  (!type already_seen 151)
+  (!srcfileloc  "function.h" 87)
+  (!options 
+   (!option length string  "crtl->emit.x_reg_rtx_no")
+  )
+ )
+ (!pair  "default_target_libfuncs"
+  (!type already_seen 602)
+  (!srcfileloc  "libfuncs.h" 64)
+  nil )
+ (!pair  "current_function_func_begin_label"
+  (!type already_seen 11)
+  (!srcfileloc  "tree-core.h" 2186)
+  nil )
+ (!pair  "current_function_decl"
+  (!type already_seen 23)
+  (!srcfileloc  "tree-core.h" 2183)
+  nil )
+ (!pair  "builtin_info"
+  (!type array 2063 nil  gc_used "(int)END_BUILTINS" 
+   (!type already_seen 948)
+  )
+  (!srcfileloc  "tree-core.h" 2177)
+  nil )
+ (!pair  "sizetype_tab"
+  (!type array 2064 nil  gc_used "(int) stk_type_kind_last" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "tree-core.h" 2165)
+  nil )
+ (!pair  "integer_types"
+  (!type array 2065 nil  gc_used "itk_none" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "tree-core.h" 2162)
+  nil )
+ (!pair  "global_trees"
+  (!type array 2066 nil  gc_used "TI_MAX" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "tree-core.h" 2158)
+  nil )
+ (!pair  "all_translation_units"
+  (!type already_seen 96)
+  (!srcfileloc  "tree-core.h" 2155)
+  nil )
+ (!pair  "alias_pairs"
+  (!type already_seen 951)
+  (!srcfileloc  "tree-core.h" 2142)
+  nil )
+ (!pair  "int_n_trees"
+  (!type array 2067 nil  gc_used "NUM_INT_N_ENTS" 
+   (!type already_seen 933)
+  )
+  (!srcfileloc  "tree.h" 5857)
+  nil )
+ (!pair  "stack_limit_rtx"
+  (!type already_seen 150)
+  (!srcfileloc  "rtl.h" 4292)
+  nil )
+ (!pair  "default_target_rtl"
+  (!type already_seen 587)
+  (!srcfileloc  "rtl.h" 3727)
+  nil )
+ (!pair  "invalid_insn_rtx"
+  (!type already_seen 346)
+  (!srcfileloc  "rtl.h" 3625)
+  nil )
+ (!pair  "simple_return_rtx"
+  (!type already_seen 150)
+  (!srcfileloc  "rtl.h" 3624)
+  nil )
+ (!pair  "ret_rtx"
+  (!type already_seen 150)
+  (!srcfileloc  "rtl.h" 3623)
+  nil )
+ (!pair  "cc0_rtx"
+  (!type already_seen 150)
+  (!srcfileloc  "rtl.h" 3622)
+  nil )
+ (!pair  "pc_rtx"
+  (!type already_seen 150)
+  (!srcfileloc  "rtl.h" 3621)
+  nil )
+ (!pair  "const_tiny_rtx"
+  (!type array 2068 nil  gc_used "4" 
+   (!type array 2069 nil  gc_used "(int) MAX_MACHINE_MODE" 
+    (!type already_seen 150)
+   )
+  )
+  (!srcfileloc  "rtl.h" 3608)
+  nil )
+ (!pair  "const_true_rtx"
+  (!type already_seen 150)
+  (!srcfileloc  "rtl.h" 3606)
+  nil )
+ (!pair  "const_int_rtx"
+  (!type array 2070 nil  gc_used "MAX_SAVED_CONST_INT * 2 + 1" 
+   (!type already_seen 150)
+  )
+  (!srcfileloc  "rtl.h" 3600)
+  nil )
+ (!pair  "gcov_fn_info_ptr_type"
+  (!type already_seen 23)
+  (!srcfileloc  "coverage.c" 101)
+  nil )
+ (!pair  "gcov_fn_info_type"
+  (!type already_seen 23)
+  (!srcfileloc  "coverage.c" 100)
+  nil )
+ (!pair  "gcov_info_var"
+  (!type already_seen 23)
+  (!srcfileloc  "coverage.c" 99)
+  nil )
+ (!pair  "fn_v_ctrs"
+  (!type array 2071 nil  gc_used "GCOV_COUNTERS" 
+   (!type already_seen 23)
+  )
+  (!srcfileloc  "coverage.c" 94)
+  nil )
+ (!pair  "functions_head"
+  (!type already_seen 883)
+  (!srcfileloc  "coverage.c" 85)
+  nil )
+ (!pair  "saved_line_table"
+  (!type already_seen 690)
+  (!srcfileloc  "input.h" 27)
+  nil )
+ (!pair  "line_table"
+  (!type already_seen 690)
+  (!srcfileloc  "input.h" 26)
+  nil )
+)
+
+(!endfile)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ada/gcc-interface/ada-tree.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ada/gcc-interface/ada-tree.def
new file mode 100644
index 0000000..8eb4688
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ada/gcc-interface/ada-tree.def
@@ -0,0 +1,79 @@
+/****************************************************************************
+ *                                                                          *
+ *                         GNAT COMPILER COMPONENTS                         *
+ *                                                                          *
+ *                       GNAT-SPECIFIC GCC TREE CODES                       *
+ *                                                                          *
+ *                              Specification                               *
+ *                                                                          *
+ *            Copyright (C) 1992-2009, Free Software Foundation, Inc.       *
+ *                                                                          *
+ * GNAT is free software;  you can  redistribute it  and/or modify it under *
+ * terms of the  GNU General Public License as published  by the Free Soft- *
+ * ware  Foundation;  either version 3,  or (at your option) any later ver- *
+ * sion.  GNAT is distributed in the hope that it will be useful, but WITH- *
+ * OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY *
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License *
+ * for  more details.  You should have received a copy of the GNU General   *
+ * Public License along with GCC; see the file COPYING3.  If not see        *
+ * <http://www.gnu.org/licenses/>.                                          *
+ *                                                                          *
+ * GNAT was originally developed  by the GNAT team at  New York University. *
+ * Extensive contributions were provided by Ada Core Technologies Inc.      *
+ *                                                                          *
+ ****************************************************************************/
+
+/* A type that is an unconstrained array.  This node is never passed to GCC.
+   TREE_TYPE is the type of the fat pointer and TYPE_OBJECT_RECORD_TYPE is
+   the type of a record containing the template and data.  */
+DEFTREECODE (UNCONSTRAINED_ARRAY_TYPE, "unconstrained_array_type", tcc_type, 0)
+
+/* A reference to an unconstrained array.  This node only exists as an
+   intermediate node during the translation of a GNAT tree to a GCC tree;
+   it is never passed to GCC.  The only field used is operand 0, which
+   is the fat pointer object.  */
+DEFTREECODE (UNCONSTRAINED_ARRAY_REF, "unconstrained_array_ref",
+	     tcc_reference, 1)
+
+/* An expression that returns an RTL suitable for its type.  Operand 0
+   is an expression to be evaluated for side effects only.  */
+DEFTREECODE (NULL_EXPR, "null_expr", tcc_expression, 1)
+
+/* Same as PLUS_EXPR, except that no modulo reduction is applied.
+   This is used for loops and never shows up in the tree.  */
+DEFTREECODE (PLUS_NOMOD_EXPR, "plus_nomod_expr", tcc_binary, 2)
+
+/* Same as MINUS_EXPR, except that no modulo reduction is applied.
+   This is used for loops and never shows up in the tree.  */
+DEFTREECODE (MINUS_NOMOD_EXPR, "minus_nomod_expr", tcc_binary, 2)
+
+/* An expression that computes an exponentiation.  Operand 0 is the base and
+   Operand 1 is the exponent.  This node is never passed to GCC: it is only
+   used internally to describe fixed point types scale factors.  */
+DEFTREECODE (POWER_EXPR, "power_expr", tcc_binary, 2)
+
+/* Same as ADDR_EXPR, except that if the operand represents a bit field,
+   return the address of the byte containing the bit.  This is used
+   for the Address attribute and never shows up in the tree.  */
+DEFTREECODE (ATTR_ADDR_EXPR, "attr_addr_expr", tcc_reference, 1)
+
+/* Here are the tree codes for the statement types known to Ada.  These
+   must be at the end of this file to allow IS_ADA_STMT to work.  */
+
+/* This is how record_code_position and insert_code_for work.  The former
+   makes this tree node, whose operand is a statement.  The latter inserts
+   the actual statements into this node.  Gimplification consists of
+   just returning the inner statement.  */
+DEFTREECODE (STMT_STMT, "stmt_stmt", tcc_statement, 1)
+
+/* A loop.  LOOP_STMT_COND is the test to exit the loop.  LOOP_STMT_UPDATE
+   is the statement to update the loop iteration variable at the continue
+   point.  LOOP_STMT_BODY are the statements in the body of the loop.  And
+   LOOP_STMT_LABEL points to the LABEL_DECL of the end label of the loop.  */
+DEFTREECODE (LOOP_STMT, "loop_stmt", tcc_statement, 4)
+
+/* Conditionally exit a loop.  EXIT_STMT_COND is the condition, which, if
+   true, will cause the loop to be exited.  If no condition is specified,
+   the loop is unconditionally exited.  EXIT_STMT_LABEL is the end label
+   corresponding to the loop to exit.  */
+DEFTREECODE (EXIT_STMT, "exit_stmt", tcc_statement, 2)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/addresses.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/addresses.h
new file mode 100644
index 0000000..0fb4160
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/addresses.h
@@ -0,0 +1,90 @@
+/* Inline functions to test validity of reg classes for addressing modes.
+   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Wrapper function to unify target macros MODE_CODE_BASE_REG_CLASS,
+   MODE_BASE_REG_REG_CLASS, MODE_BASE_REG_CLASS and BASE_REG_CLASS.
+   Arguments as for the MODE_CODE_BASE_REG_CLASS macro.  */
+
+#ifndef GCC_ADDRESSES_H
+#define GCC_ADDRESSES_H
+
+static inline enum reg_class
+base_reg_class (machine_mode mode ATTRIBUTE_UNUSED,
+		addr_space_t as ATTRIBUTE_UNUSED,
+		enum rtx_code outer_code ATTRIBUTE_UNUSED,
+		enum rtx_code index_code ATTRIBUTE_UNUSED)
+{
+#ifdef MODE_CODE_BASE_REG_CLASS
+  return MODE_CODE_BASE_REG_CLASS (MACRO_MODE (mode), as, outer_code,
+				   index_code);
+#else
+#ifdef MODE_BASE_REG_REG_CLASS
+  if (index_code == REG)
+    return MODE_BASE_REG_REG_CLASS (MACRO_MODE (mode));
+#endif
+#ifdef MODE_BASE_REG_CLASS
+  return MODE_BASE_REG_CLASS (MACRO_MODE (mode));
+#else
+  return BASE_REG_CLASS;
+#endif
+#endif
+}
+
+/* Wrapper function to unify target macros REGNO_MODE_CODE_OK_FOR_BASE_P,
+   REGNO_MODE_OK_FOR_REG_BASE_P, REGNO_MODE_OK_FOR_BASE_P and
+   REGNO_OK_FOR_BASE_P.
+   Arguments as for the REGNO_MODE_CODE_OK_FOR_BASE_P macro.  */
+
+static inline bool
+ok_for_base_p_1 (unsigned regno ATTRIBUTE_UNUSED,
+		 machine_mode mode ATTRIBUTE_UNUSED,
+		 addr_space_t as ATTRIBUTE_UNUSED,
+		 enum rtx_code outer_code ATTRIBUTE_UNUSED,
+		 enum rtx_code index_code ATTRIBUTE_UNUSED)
+{
+#ifdef REGNO_MODE_CODE_OK_FOR_BASE_P
+  return REGNO_MODE_CODE_OK_FOR_BASE_P (regno, MACRO_MODE (mode), as,
+					outer_code, index_code);
+#else
+#ifdef REGNO_MODE_OK_FOR_REG_BASE_P
+  if (index_code == REG)
+    return REGNO_MODE_OK_FOR_REG_BASE_P (regno, MACRO_MODE (mode));
+#endif
+#ifdef REGNO_MODE_OK_FOR_BASE_P
+  return REGNO_MODE_OK_FOR_BASE_P (regno, MACRO_MODE (mode));
+#else
+  return REGNO_OK_FOR_BASE_P (regno);
+#endif
+#endif
+}
+
+/* Wrapper around ok_for_base_p_1, for use after register allocation is
+   complete.  Arguments as for the called function.  */
+
+static inline bool
+regno_ok_for_base_p (unsigned regno, machine_mode mode, addr_space_t as,
+		     enum rtx_code outer_code, enum rtx_code index_code)
+{
+  if (regno >= FIRST_PSEUDO_REGISTER && reg_renumber[regno] >= 0)
+    regno = reg_renumber[regno];
+
+  return ok_for_base_p_1 (regno, mode, as, outer_code, index_code);
+}
+
+#endif /* GCC_ADDRESSES_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/alias.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/alias.h
new file mode 100644
index 0000000..b69ace5
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/alias.h
@@ -0,0 +1,47 @@
+/* Exported functions from alias.c
+   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_ALIAS_H
+#define GCC_ALIAS_H
+
+extern alias_set_type new_alias_set (void);
+extern alias_set_type get_alias_set (tree);
+extern alias_set_type get_deref_alias_set (tree);
+extern alias_set_type get_varargs_alias_set (void);
+extern alias_set_type get_frame_alias_set (void);
+extern tree component_uses_parent_alias_set_from (const_tree);
+extern bool alias_set_subset_of (alias_set_type, alias_set_type);
+extern void record_alias_subset (alias_set_type, alias_set_type);
+extern void record_component_aliases (tree);
+extern int alias_sets_conflict_p (alias_set_type, alias_set_type);
+extern int alias_sets_must_conflict_p (alias_set_type, alias_set_type);
+extern int objects_must_conflict_p (tree, tree);
+extern int nonoverlapping_memrefs_p (const_rtx, const_rtx, bool);
+extern void dump_alias_stats_in_alias_c (FILE *s);
+tree reference_alias_ptr_type (tree);
+bool alias_ptr_types_compatible_p (tree, tree);
+int compare_base_decls (tree, tree);
+
+/* This alias set can be used to force a memory to conflict with all
+   other memories, creating a barrier across which no memory reference
+   can move.  Note that there are other legacy ways to create such
+   memory barriers, including an address of SCRATCH.  */
+#define ALIAS_SET_MEMORY_BARRIER	((alias_set_type) -1)
+
+#endif /* GCC_ALIAS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/align.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/align.h
new file mode 100644
index 0000000..6768451
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/align.h
@@ -0,0 +1,82 @@
+/* Alignment-related classes.
+   Copyright (C) 2018-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Align flags tuple with alignment in log form and with a maximum skip.  */
+
+struct align_flags_tuple
+{
+  /* Values of the -falign-* flags: how much to align labels in code.
+     log is "align to 2^log" (so 0 means no alignment).
+     maxskip is the maximum allowed amount of padding to insert.  */
+  int log;
+  int maxskip;
+
+  /* Normalize filled values so that maxskip is not bigger than 1 << log.  */
+  void normalize ()
+  {
+    int n = (1 << log);
+    if (maxskip > n)
+      maxskip = n - 1;
+  }
+
+  /* Return original value of an alignment flag.  */
+  int get_value ()
+  {
+    return maxskip + 1;
+  }
+};
+
+/* Alignment flags is structure used as value of -align-* options.
+   It's used in target-dependant code.  */
+
+struct align_flags
+{
+  /* Default constructor.  */
+  align_flags (int log0 = 0, int maxskip0 = 0, int log1 = 0, int maxskip1 = 0)
+  {
+    levels[0].log = log0;
+    levels[0].maxskip = maxskip0;
+    levels[1].log = log1;
+    levels[1].maxskip = maxskip1;
+    normalize ();
+  }
+
+  /* Normalize both components of align_flags.  */
+  void normalize ()
+  {
+    for (unsigned i = 0; i < 2; i++)
+      levels[i].normalize ();
+  }
+
+  /* Get alignment that is common bigger alignment of alignments F0 and F1.  */
+  static align_flags max (const align_flags f0, const align_flags f1)
+    {
+      int log0 = MAX (f0.levels[0].log, f1.levels[0].log);
+      int maxskip0 = MAX (f0.levels[0].maxskip, f1.levels[0].maxskip);
+      int log1 = MAX (f0.levels[1].log, f1.levels[1].log);
+      int maxskip1 = MAX (f0.levels[1].maxskip, f1.levels[1].maxskip);
+      return align_flags (log0, maxskip0, log1, maxskip1);
+    }
+
+  align_flags_tuple levels[2];
+};
+
+/* Define maximum supported code alignment.  */
+#define MAX_CODE_ALIGN 16
+#define MAX_CODE_ALIGN_VALUE (1 << MAX_CODE_ALIGN)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/all-tree.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/all-tree.def
new file mode 100644
index 0000000..724d185
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/all-tree.def
@@ -0,0 +1,7 @@
+#include "tree.def"
+END_OF_BASE_TREE_CODES
+#include "c-family/c-common.def"
+#include "ada/gcc-interface/ada-tree.def"
+#include "cp/cp-tree.def"
+#include "d/d-tree.def"
+#include "objc/objc-tree.def"
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/alloc-pool.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/alloc-pool.h
new file mode 100644
index 0000000..d320810
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/alloc-pool.h
@@ -0,0 +1,569 @@
+/* Functions to support a pool of allocatable objects
+   Copyright (C) 1997-2019 Free Software Foundation, Inc.
+   Contributed by Daniel Berlin <dan@cgsoftware.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+#ifndef ALLOC_POOL_H
+#define ALLOC_POOL_H
+
+#include "memory-block.h"
+#include "options.h"	    // for flag_checking
+
+extern void dump_alloc_pool_statistics (void);
+
+/* Flag indicates whether memory statistics are gathered any longer.  */
+extern bool after_memory_report;
+
+typedef unsigned long ALLOC_POOL_ID_TYPE;
+
+/* Last used ID.  */
+extern ALLOC_POOL_ID_TYPE last_id;
+
+/* Pool allocator memory usage.  */
+struct pool_usage: public mem_usage
+{
+  /* Default contructor.  */
+  pool_usage (): m_element_size (0), m_pool_name ("") {}
+  /* Constructor.  */
+  pool_usage (size_t allocated, size_t times, size_t peak,
+	      size_t instances, size_t element_size,
+	      const char *pool_name)
+    : mem_usage (allocated, times, peak, instances),
+      m_element_size (element_size),
+      m_pool_name (pool_name) {}
+
+  /* Sum the usage with SECOND usage.  */
+  pool_usage
+  operator+ (const pool_usage &second)
+  {
+    return pool_usage (m_allocated + second.m_allocated,
+			     m_times + second.m_times,
+			     m_peak + second.m_peak,
+			     m_instances + second.m_instances,
+			     m_element_size, m_pool_name);
+  }
+
+  /* Dump usage coupled to LOC location, where TOTAL is sum of all rows.  */
+  inline void
+  dump (mem_location *loc, mem_usage &total) const
+  {
+    char *location_string = loc->to_string ();
+
+    fprintf (stderr, "%-32s%-48s " PRsa(5) PRsa(9) ":%5.1f%%"
+	     PRsa(9) PRsa(9) ":%5.1f%%%12" PRIu64 "\n",
+	     m_pool_name, location_string,
+	     SIZE_AMOUNT (m_instances),
+	     SIZE_AMOUNT (m_allocated),
+	     get_percent (m_allocated, total.m_allocated),
+	     SIZE_AMOUNT (m_peak),
+	     SIZE_AMOUNT (m_times),
+	     get_percent (m_times, total.m_times),
+	     (uint64_t)m_element_size);
+
+    free (location_string);
+  }
+
+  /* Dump header with NAME.  */
+  static inline void
+  dump_header (const char *name)
+  {
+    fprintf (stderr, "%-32s%-48s %6s%11s%16s%17s%12s\n", "Pool name", name,
+	     "Pools", "Leak", "Peak", "Times", "Elt size");
+  }
+
+  /* Dump footer.  */
+  inline void
+  dump_footer ()
+  {
+    fprintf (stderr, "%s" PRsa(82) PRsa(10) "\n", "Total",
+	     SIZE_AMOUNT (m_instances), SIZE_AMOUNT (m_allocated));
+  }
+
+  /* Element size.  */
+  size_t m_element_size;
+  /* Pool name.  */
+  const char *m_pool_name;
+};
+
+extern mem_alloc_description<pool_usage> pool_allocator_usage;
+
+#if 0
+/* If a pool with custom block size is needed, one might use the following
+   template.  An instance of this template can be used as a parameter for
+   instantiating base_pool_allocator template:
+
+	typedef custom_block_allocator <128*1024> huge_block_allocator;
+	...
+	static base_pool_allocator <huge_block_allocator>
+						value_pool ("value", 16384);
+
+   Right now it's not used anywhere in the code, and is given here as an
+   example).  */
+
+template <size_t BlockSize>
+class custom_block_allocator
+{
+public:
+  static const size_t block_size = BlockSize;
+
+  static inline void *
+  allocate () ATTRIBUTE_MALLOC
+  {
+    return XNEWVEC (char, BlockSize);
+  }
+
+  static inline void
+  release (void *block)
+  {
+    XDELETEVEC (block);
+  }
+};
+#endif
+
+/* Generic pool allocator.  */
+
+template <typename TBlockAllocator>
+class base_pool_allocator
+{
+public:
+  /* Default constructor for pool allocator called NAME.  */
+  base_pool_allocator (const char *name, size_t size CXX_MEM_STAT_INFO);
+  ~base_pool_allocator ();
+  void release ();
+  void release_if_empty ();
+  void *allocate () ATTRIBUTE_MALLOC;
+  void remove (void *object);
+  size_t num_elts_current ();
+
+private:
+  struct allocation_pool_list
+  {
+    allocation_pool_list *next;
+  };
+
+  /* Initialize a pool allocator.  */
+  void initialize ();
+
+  struct allocation_object
+  {
+#if CHECKING_P
+    /* The ID of alloc pool which the object was allocated from.  */
+    ALLOC_POOL_ID_TYPE id;
+#endif
+
+    union
+      {
+	/* The data of the object.  */
+	char data[1];
+
+	/* Because we want any type of data to be well aligned after the ID,
+	   the following elements are here.  They are never accessed so
+	   the allocated object may be even smaller than this structure.
+	   We do not care about alignment for floating-point types.  */
+	char *align_p;
+	int64_t align_i;
+      } u;
+
+#if CHECKING_P
+    static inline allocation_object*
+    get_instance (void *data_ptr)
+    {
+      return (allocation_object *)(((char *)(data_ptr))
+				      - offsetof (allocation_object,
+						  u.data));
+    }
+#endif
+
+    static inline void*
+    get_data (void *instance_ptr)
+    {
+      return (void*)(((allocation_object *) instance_ptr)->u.data);
+    }
+  };
+
+  /* Align X to 8.  */
+  static inline size_t
+  align_eight (size_t x)
+  {
+    return (((x+7) >> 3) << 3);
+  }
+
+  const char *m_name;
+  ALLOC_POOL_ID_TYPE m_id;
+  size_t m_elts_per_block;
+
+  /* These are the elements that have been allocated at least once
+     and freed.  */
+  allocation_pool_list *m_returned_free_list;
+
+  /* These are the elements that have not yet been allocated out of
+     the last block obtained from XNEWVEC.  */
+  char* m_virgin_free_list;
+
+  /* The number of elements in the virgin_free_list that can be
+     allocated before needing another block.  */
+  size_t m_virgin_elts_remaining;
+  /* The number of elements that are allocated.  */
+  size_t m_elts_allocated;
+  /* The number of elements that are released.  */
+  size_t m_elts_free;
+  /* The number of allocated blocks.  */
+  size_t m_blocks_allocated;
+  /* List of blocks that are used to allocate new objects.  */
+  allocation_pool_list *m_block_list;
+  /* Size of a pool elements in bytes.  */
+  size_t m_elt_size;
+  /* Size in bytes that should be allocated for each element.  */
+  size_t m_size;
+  /* Flag if a pool allocator is initialized.  */
+  bool m_initialized;
+  /* Memory allocation location.  */
+  mem_location m_location;
+};
+
+template <typename TBlockAllocator>
+inline
+base_pool_allocator <TBlockAllocator>::base_pool_allocator (
+				const char *name, size_t size MEM_STAT_DECL):
+  m_name (name), m_id (0), m_elts_per_block (0), m_returned_free_list (NULL),
+  m_virgin_free_list (NULL), m_virgin_elts_remaining (0), m_elts_allocated (0),
+  m_elts_free (0), m_blocks_allocated (0), m_block_list (NULL), m_elt_size (0),
+  m_size (size), m_initialized (false),
+  m_location (ALLOC_POOL_ORIGIN, false PASS_MEM_STAT) {}
+
+/* Initialize a pool allocator.  */
+
+template <typename TBlockAllocator>
+inline void
+base_pool_allocator <TBlockAllocator>::initialize ()
+{
+  gcc_checking_assert (!m_initialized);
+  m_initialized = true;
+
+  size_t size = m_size;
+
+  gcc_checking_assert (m_name);
+  gcc_checking_assert (m_size);
+
+  /* Make size large enough to store the list header.  */
+  if (size < sizeof (allocation_pool_list*))
+    size = sizeof (allocation_pool_list*);
+
+  /* Now align the size to a multiple of 8.  */
+  size = align_eight (size);
+
+  /* Add the aligned size of ID.  */
+  size += offsetof (allocation_object, u.data);
+
+  m_elt_size = size;
+
+  if (GATHER_STATISTICS)
+    {
+      pool_usage *u = pool_allocator_usage.register_descriptor
+	(this, new mem_location (m_location));
+
+      u->m_element_size = m_elt_size;
+      u->m_pool_name = m_name;
+    }
+
+  /* List header size should be a multiple of 8.  */
+  size_t header_size = align_eight (sizeof (allocation_pool_list));
+
+  m_elts_per_block = (TBlockAllocator::block_size - header_size) / size;
+  gcc_checking_assert (m_elts_per_block != 0);
+
+  /* Increase the last used ID and use it for this pool.
+     ID == 0 is used for free elements of pool so skip it.  */
+  last_id++;
+  if (last_id == 0)
+    last_id++;
+
+  m_id = last_id;
+}
+
+/* Free all memory allocated for the given memory pool.  */
+template <typename TBlockAllocator>
+inline void
+base_pool_allocator <TBlockAllocator>::release ()
+{
+  if (!m_initialized)
+    return;
+
+  allocation_pool_list *block, *next_block;
+
+  /* Free each block allocated to the pool.  */
+  for (block = m_block_list; block != NULL; block = next_block)
+    {
+      next_block = block->next;
+      TBlockAllocator::release (block);
+    }
+
+  if (GATHER_STATISTICS && !after_memory_report)
+    {
+      pool_allocator_usage.release_instance_overhead
+	(this, (m_elts_allocated - m_elts_free) * m_elt_size);
+    }
+
+  m_returned_free_list = NULL;
+  m_virgin_free_list = NULL;
+  m_virgin_elts_remaining = 0;
+  m_elts_allocated = 0;
+  m_elts_free = 0;
+  m_blocks_allocated = 0;
+  m_block_list = NULL;
+}
+
+template <typename TBlockAllocator>
+inline void
+base_pool_allocator <TBlockAllocator>::release_if_empty ()
+{
+  if (m_elts_free == m_elts_allocated)
+    release ();
+}
+
+template <typename TBlockAllocator>
+inline base_pool_allocator <TBlockAllocator>::~base_pool_allocator ()
+{
+  release ();
+}
+
+/* Allocates one element from the pool specified.  */
+template <typename TBlockAllocator>
+inline void*
+base_pool_allocator <TBlockAllocator>::allocate ()
+{
+  if (!m_initialized)
+    initialize ();
+
+  allocation_pool_list *header;
+#ifdef ENABLE_VALGRIND_ANNOTATIONS
+  int size;
+#endif
+
+  if (GATHER_STATISTICS)
+    {
+      pool_allocator_usage.register_instance_overhead (m_elt_size, this);
+    }
+
+#ifdef ENABLE_VALGRIND_ANNOTATIONS
+  size = m_elt_size - offsetof (allocation_object, u.data);
+#endif
+
+  /* If there are no more free elements, make some more!.  */
+  if (!m_returned_free_list)
+    {
+      char *block;
+      if (!m_virgin_elts_remaining)
+	{
+	  allocation_pool_list *block_header;
+
+	  /* Make the block.  */
+	  block = reinterpret_cast<char *> (TBlockAllocator::allocate ());
+	  block_header = new (block) allocation_pool_list;
+	  block += align_eight (sizeof (allocation_pool_list));
+
+	  /* Throw it on the block list.  */
+	  block_header->next = m_block_list;
+	  m_block_list = block_header;
+
+	  /* Make the block available for allocation.  */
+	  m_virgin_free_list = block;
+	  m_virgin_elts_remaining = m_elts_per_block;
+
+	  /* Also update the number of elements we have free/allocated, and
+	     increment the allocated block count.  */
+	  m_elts_allocated += m_elts_per_block;
+	  m_elts_free += m_elts_per_block;
+	  m_blocks_allocated += 1;
+	}
+
+      /* We now know that we can take the first elt off the virgin list and
+	 put it on the returned list.  */
+      block = m_virgin_free_list;
+      header = (allocation_pool_list*) allocation_object::get_data (block);
+      header->next = NULL;
+
+      /* Mark the element to be free.  */
+#if CHECKING_P
+      ((allocation_object*) block)->id = 0;
+#endif
+      VALGRIND_DISCARD (VALGRIND_MAKE_MEM_NOACCESS (header,size));
+      m_returned_free_list = header;
+      m_virgin_free_list += m_elt_size;
+      m_virgin_elts_remaining--;
+
+    }
+
+  /* Pull the first free element from the free list, and return it.  */
+  header = m_returned_free_list;
+  VALGRIND_DISCARD (VALGRIND_MAKE_MEM_DEFINED (header, sizeof (*header)));
+  m_returned_free_list = header->next;
+  m_elts_free--;
+
+  /* Set the ID for element.  */
+#if CHECKING_P
+  allocation_object::get_instance (header)->id = m_id;
+#endif
+  VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (header, size));
+
+  return (void *)(header);
+}
+
+/* Puts PTR back on POOL's free list.  */
+template <typename TBlockAllocator>
+inline void
+base_pool_allocator <TBlockAllocator>::remove (void *object)
+{
+  int size = m_elt_size - offsetof (allocation_object, u.data);
+
+  if (flag_checking)
+    {
+      gcc_assert (m_initialized);
+      gcc_assert (object
+		  /* Check if we free more than we allocated.  */
+		  && m_elts_free < m_elts_allocated);
+#if CHECKING_P
+      /* Check whether the PTR was allocated from POOL.  */
+      gcc_assert (m_id == allocation_object::get_instance (object)->id);
+#endif
+
+      memset (object, 0xaf, size);
+    }
+
+#if CHECKING_P 
+  /* Mark the element to be free.  */
+  allocation_object::get_instance (object)->id = 0;
+#endif
+
+  allocation_pool_list *header = new (object) allocation_pool_list;
+  header->next = m_returned_free_list;
+  m_returned_free_list = header;
+  VALGRIND_DISCARD (VALGRIND_MAKE_MEM_NOACCESS (object, size));
+  m_elts_free++;
+
+  if (GATHER_STATISTICS)
+    {
+      pool_allocator_usage.release_instance_overhead (this, m_elt_size);
+    }
+}
+
+/* Number of elements currently active (not returned to pool).  Used for cheap
+   consistency checks.  */
+template <typename TBlockAllocator>
+inline size_t
+base_pool_allocator <TBlockAllocator>::num_elts_current ()
+{
+  return m_elts_allocated - m_elts_free;
+}
+
+/* Specialization of base_pool_allocator which should be used in most cases.
+   Another specialization may be needed, if object size is greater than
+   memory_block_pool::block_size (64 KB).  */
+typedef base_pool_allocator <memory_block_pool> pool_allocator;
+
+/* Type based memory pool allocator.  */
+template <typename T>
+class object_allocator
+{
+public:
+  /* Default constructor for pool allocator called NAME.  */
+  object_allocator (const char *name CXX_MEM_STAT_INFO):
+    m_allocator (name, sizeof (T) PASS_MEM_STAT) {}
+
+  inline void
+  release ()
+  {
+    m_allocator.release ();
+  }
+
+  inline void release_if_empty ()
+  {
+    m_allocator.release_if_empty ();
+  }
+
+
+  /* Allocate memory for instance of type T and call a default constructor.  */
+
+  inline T *
+  allocate () ATTRIBUTE_MALLOC
+  {
+    return ::new (m_allocator.allocate ()) T;
+  }
+
+  /* Allocate memory for instance of type T and return void * that
+     could be used in situations where a default constructor is not provided
+     by the class T.  */
+
+  inline void *
+  allocate_raw () ATTRIBUTE_MALLOC
+  {
+    return m_allocator.allocate ();
+  }
+
+  inline void
+  remove (T *object)
+  {
+    /* Call destructor.  */
+    object->~T ();
+
+    m_allocator.remove (object);
+  }
+
+  inline size_t
+  num_elts_current ()
+  {
+    return m_allocator.num_elts_current ();
+  }
+
+private:
+  pool_allocator m_allocator;
+};
+
+/* Store information about each particular alloc_pool.  Note that this
+   will underestimate the amount the amount of storage used by a small amount:
+   1) The overhead in a pool is not accounted for.
+   2) The unallocated elements in a block are not accounted for.  Note
+   that this can at worst case be one element smaller that the block
+   size for that pool.  */
+struct alloc_pool_descriptor
+{
+  /* Number of pools allocated.  */
+  unsigned long created;
+  /* Gross allocated storage.  */
+  unsigned long allocated;
+  /* Amount of currently active storage.  */
+  unsigned long current;
+  /* Peak amount of storage used.  */
+  unsigned long peak;
+  /* Size of element in the pool.  */
+  int elt_size;
+};
+
+/* Helper for classes that do not provide default ctor.  */
+
+template <typename T>
+inline void *
+operator new (size_t, object_allocator<T> &a)
+{
+  return a.allocate_raw ();
+}
+
+/* Hashtable mapping alloc_pool names to descriptors.  */
+extern hash_map<const char *, alloc_pool_descriptor> *alloc_pool_hash;
+
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ansidecl.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ansidecl.h
new file mode 100644
index 0000000..0395c4d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ansidecl.h
@@ -0,0 +1,402 @@
+/* ANSI and traditional C compatability macros
+   Copyright (C) 1991-2019 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* ANSI and traditional C compatibility macros
+
+   ANSI C is assumed if __STDC__ is #defined.
+
+   Macro		ANSI C definition	Traditional C definition
+   -----		---- - ----------	----------- - ----------
+   PTR			`void *'		`char *'
+   const		not defined		`'
+   volatile		not defined		`'
+   signed		not defined		`'
+
+   For ease of writing code which uses GCC extensions but needs to be
+   portable to other compilers, we provide the GCC_VERSION macro that
+   simplifies testing __GNUC__ and __GNUC_MINOR__ together, and various
+   wrappers around __attribute__.  Also, __extension__ will be #defined
+   to nothing if it doesn't work.  See below.  */
+
+#ifndef	_ANSIDECL_H
+#define _ANSIDECL_H	1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Every source file includes this file,
+   so they will all get the switch for lint.  */
+/* LINTLIBRARY */
+
+/* Using MACRO(x,y) in cpp #if conditionals does not work with some
+   older preprocessors.  Thus we can't define something like this:
+
+#define HAVE_GCC_VERSION(MAJOR, MINOR) \
+  (__GNUC__ > (MAJOR) || (__GNUC__ == (MAJOR) && __GNUC_MINOR__ >= (MINOR)))
+
+and then test "#if HAVE_GCC_VERSION(2,7)".
+
+So instead we use the macro below and test it against specific values.  */
+
+/* This macro simplifies testing whether we are using gcc, and if it
+   is of a particular minimum version. (Both major & minor numbers are
+   significant.)  This macro will evaluate to 0 if we are not using
+   gcc at all.  */
+#ifndef GCC_VERSION
+#define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__)
+#endif /* GCC_VERSION */
+
+#if defined (__STDC__) || defined(__cplusplus) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(_WIN32)
+/* All known AIX compilers implement these things (but don't always
+   define __STDC__).  The RISC/OS MIPS compiler defines these things
+   in SVR4 mode, but does not define __STDC__.  */
+/* eraxxon@alumni.rice.edu: The Compaq C++ compiler, unlike many other
+   C++ compilers, does not define __STDC__, though it acts as if this
+   was so. (Verified versions: 5.7, 6.2, 6.3, 6.5) */
+
+#define PTR		void *
+
+#undef const
+#undef volatile
+#undef signed
+
+/* inline requires special treatment; it's in C99, and GCC >=2.7 supports
+   it too, but it's not in C89.  */
+#undef inline
+#if __STDC_VERSION__ >= 199901L || defined(__cplusplus) || (defined(__SUNPRO_C) && defined(__C99FEATURES__))
+/* it's a keyword */
+#else
+# if GCC_VERSION >= 2007
+#  define inline __inline__   /* __inline__ prevents -pedantic warnings */
+# else
+#  define inline  /* nothing */
+# endif
+#endif
+
+#else	/* Not ANSI C.  */
+
+#define PTR		char *
+
+/* some systems define these in header files for non-ansi mode */
+#undef const
+#undef volatile
+#undef signed
+#undef inline
+#define const
+#define volatile
+#define signed
+#define inline
+
+#endif	/* ANSI C.  */
+
+/* Define macros for some gcc attributes.  This permits us to use the
+   macros freely, and know that they will come into play for the
+   version of gcc in which they are supported.  */
+
+#if (GCC_VERSION < 2007)
+# define __attribute__(x)
+#endif
+
+/* Attribute __malloc__ on functions was valid as of gcc 2.96. */
+#ifndef ATTRIBUTE_MALLOC
+# if (GCC_VERSION >= 2096)
+#  define ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+# else
+#  define ATTRIBUTE_MALLOC
+# endif /* GNUC >= 2.96 */
+#endif /* ATTRIBUTE_MALLOC */
+
+/* Attributes on labels were valid as of gcc 2.93 and g++ 4.5.  For
+   g++ an attribute on a label must be followed by a semicolon.  */
+#ifndef ATTRIBUTE_UNUSED_LABEL
+# ifndef __cplusplus
+#  if GCC_VERSION >= 2093
+#   define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED
+#  else
+#   define ATTRIBUTE_UNUSED_LABEL
+#  endif
+# else
+#  if GCC_VERSION >= 4005
+#   define ATTRIBUTE_UNUSED_LABEL ATTRIBUTE_UNUSED ;
+#  else
+#   define ATTRIBUTE_UNUSED_LABEL
+#  endif
+# endif
+#endif
+
+/* Similarly to ARG_UNUSED below.  Prior to GCC 3.4, the C++ frontend
+   couldn't parse attributes placed after the identifier name, and now
+   the entire compiler is built with C++.  */
+#ifndef ATTRIBUTE_UNUSED
+#if GCC_VERSION >= 3004
+#  define ATTRIBUTE_UNUSED __attribute__ ((__unused__))
+#else
+#define ATTRIBUTE_UNUSED
+#endif
+#endif /* ATTRIBUTE_UNUSED */
+
+/* Before GCC 3.4, the C++ frontend couldn't parse attributes placed after the
+   identifier name.  */
+#if ! defined(__cplusplus) || (GCC_VERSION >= 3004)
+# define ARG_UNUSED(NAME) NAME ATTRIBUTE_UNUSED
+#else /* !__cplusplus || GNUC >= 3.4 */
+# define ARG_UNUSED(NAME) NAME
+#endif /* !__cplusplus || GNUC >= 3.4 */
+
+#ifndef ATTRIBUTE_NORETURN
+#define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__))
+#endif /* ATTRIBUTE_NORETURN */
+
+/* Attribute `nonnull' was valid as of gcc 3.3.  */
+#ifndef ATTRIBUTE_NONNULL
+# if (GCC_VERSION >= 3003)
+#  define ATTRIBUTE_NONNULL(m) __attribute__ ((__nonnull__ (m)))
+# else
+#  define ATTRIBUTE_NONNULL(m)
+# endif /* GNUC >= 3.3 */
+#endif /* ATTRIBUTE_NONNULL */
+
+/* Attribute `returns_nonnull' was valid as of gcc 4.9.  */
+#ifndef ATTRIBUTE_RETURNS_NONNULL
+# if (GCC_VERSION >= 4009)
+#  define ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__))
+# else
+#  define ATTRIBUTE_RETURNS_NONNULL
+# endif /* GNUC >= 4.9 */
+#endif /* ATTRIBUTE_RETURNS_NONNULL */
+
+/* Attribute `pure' was valid as of gcc 3.0.  */
+#ifndef ATTRIBUTE_PURE
+# if (GCC_VERSION >= 3000)
+#  define ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+#  define ATTRIBUTE_PURE
+# endif /* GNUC >= 3.0 */
+#endif /* ATTRIBUTE_PURE */
+
+/* Use ATTRIBUTE_PRINTF when the format specifier must not be NULL.
+   This was the case for the `printf' format attribute by itself
+   before GCC 3.3, but as of 3.3 we need to add the `nonnull'
+   attribute to retain this behavior.  */
+#ifndef ATTRIBUTE_PRINTF
+#define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n))) ATTRIBUTE_NONNULL(m)
+#define ATTRIBUTE_PRINTF_1 ATTRIBUTE_PRINTF(1, 2)
+#define ATTRIBUTE_PRINTF_2 ATTRIBUTE_PRINTF(2, 3)
+#define ATTRIBUTE_PRINTF_3 ATTRIBUTE_PRINTF(3, 4)
+#define ATTRIBUTE_PRINTF_4 ATTRIBUTE_PRINTF(4, 5)
+#define ATTRIBUTE_PRINTF_5 ATTRIBUTE_PRINTF(5, 6)
+#endif /* ATTRIBUTE_PRINTF */
+
+/* Use ATTRIBUTE_FPTR_PRINTF when the format attribute is to be set on
+   a function pointer.  Format attributes were allowed on function
+   pointers as of gcc 3.1.  */
+#ifndef ATTRIBUTE_FPTR_PRINTF
+# if (GCC_VERSION >= 3001)
+#  define ATTRIBUTE_FPTR_PRINTF(m, n) ATTRIBUTE_PRINTF(m, n)
+# else
+#  define ATTRIBUTE_FPTR_PRINTF(m, n)
+# endif /* GNUC >= 3.1 */
+# define ATTRIBUTE_FPTR_PRINTF_1 ATTRIBUTE_FPTR_PRINTF(1, 2)
+# define ATTRIBUTE_FPTR_PRINTF_2 ATTRIBUTE_FPTR_PRINTF(2, 3)
+# define ATTRIBUTE_FPTR_PRINTF_3 ATTRIBUTE_FPTR_PRINTF(3, 4)
+# define ATTRIBUTE_FPTR_PRINTF_4 ATTRIBUTE_FPTR_PRINTF(4, 5)
+# define ATTRIBUTE_FPTR_PRINTF_5 ATTRIBUTE_FPTR_PRINTF(5, 6)
+#endif /* ATTRIBUTE_FPTR_PRINTF */
+
+/* Use ATTRIBUTE_NULL_PRINTF when the format specifier may be NULL.  A
+   NULL format specifier was allowed as of gcc 3.3.  */
+#ifndef ATTRIBUTE_NULL_PRINTF
+# if (GCC_VERSION >= 3003)
+#  define ATTRIBUTE_NULL_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n)))
+# else
+#  define ATTRIBUTE_NULL_PRINTF(m, n)
+# endif /* GNUC >= 3.3 */
+# define ATTRIBUTE_NULL_PRINTF_1 ATTRIBUTE_NULL_PRINTF(1, 2)
+# define ATTRIBUTE_NULL_PRINTF_2 ATTRIBUTE_NULL_PRINTF(2, 3)
+# define ATTRIBUTE_NULL_PRINTF_3 ATTRIBUTE_NULL_PRINTF(3, 4)
+# define ATTRIBUTE_NULL_PRINTF_4 ATTRIBUTE_NULL_PRINTF(4, 5)
+# define ATTRIBUTE_NULL_PRINTF_5 ATTRIBUTE_NULL_PRINTF(5, 6)
+#endif /* ATTRIBUTE_NULL_PRINTF */
+
+/* Attribute `sentinel' was valid as of gcc 3.5.  */
+#ifndef ATTRIBUTE_SENTINEL
+# if (GCC_VERSION >= 3005)
+#  define ATTRIBUTE_SENTINEL __attribute__ ((__sentinel__))
+# else
+#  define ATTRIBUTE_SENTINEL
+# endif /* GNUC >= 3.5 */
+#endif /* ATTRIBUTE_SENTINEL */
+
+
+#ifndef ATTRIBUTE_ALIGNED_ALIGNOF
+# if (GCC_VERSION >= 3000)
+#  define ATTRIBUTE_ALIGNED_ALIGNOF(m) __attribute__ ((__aligned__ (__alignof__ (m))))
+# else
+#  define ATTRIBUTE_ALIGNED_ALIGNOF(m)
+# endif /* GNUC >= 3.0 */
+#endif /* ATTRIBUTE_ALIGNED_ALIGNOF */
+
+/* Useful for structures whose layout must match some binary specification
+   regardless of the alignment and padding qualities of the compiler.  */
+#ifndef ATTRIBUTE_PACKED
+# define ATTRIBUTE_PACKED __attribute__ ((packed))
+#endif
+
+/* Attribute `hot' and `cold' was valid as of gcc 4.3.  */
+#ifndef ATTRIBUTE_COLD
+# if (GCC_VERSION >= 4003)
+#  define ATTRIBUTE_COLD __attribute__ ((__cold__))
+# else
+#  define ATTRIBUTE_COLD
+# endif /* GNUC >= 4.3 */
+#endif /* ATTRIBUTE_COLD */
+#ifndef ATTRIBUTE_HOT
+# if (GCC_VERSION >= 4003)
+#  define ATTRIBUTE_HOT __attribute__ ((__hot__))
+# else
+#  define ATTRIBUTE_HOT
+# endif /* GNUC >= 4.3 */
+#endif /* ATTRIBUTE_HOT */
+
+/* Attribute 'no_sanitize_undefined' was valid as of gcc 4.9.  */
+#ifndef ATTRIBUTE_NO_SANITIZE_UNDEFINED
+# if (GCC_VERSION >= 4009)
+#  define ATTRIBUTE_NO_SANITIZE_UNDEFINED __attribute__ ((no_sanitize_undefined))
+# else
+#  define ATTRIBUTE_NO_SANITIZE_UNDEFINED
+# endif /* GNUC >= 4.9 */
+#endif /* ATTRIBUTE_NO_SANITIZE_UNDEFINED */
+
+/* Attribute 'nonstring' was valid as of gcc 8.  */
+#ifndef ATTRIBUTE_NONSTRING
+# if GCC_VERSION >= 8000
+#  define ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__))
+# else
+#  define ATTRIBUTE_NONSTRING
+# endif
+#endif
+
+/* We use __extension__ in some places to suppress -pedantic warnings
+   about GCC extensions.  This feature didn't work properly before
+   gcc 2.8.  */
+#if GCC_VERSION < 2008
+#define __extension__
+#endif
+
+/* This is used to declare a const variable which should be visible
+   outside of the current compilation unit.  Use it as
+     EXPORTED_CONST int i = 1;
+   This is because the semantics of const are different in C and C++.
+   "extern const" is permitted in C but it looks strange, and gcc
+   warns about it when -Wc++-compat is not used.  */
+#ifdef __cplusplus
+#define EXPORTED_CONST extern const
+#else
+#define EXPORTED_CONST const
+#endif
+
+/* Be conservative and only use enum bitfields with C++ or GCC.
+   FIXME: provide a complete autoconf test for buggy enum bitfields.  */
+
+#ifdef __cplusplus
+#define ENUM_BITFIELD(TYPE) enum TYPE
+#elif (GCC_VERSION > 2000)
+#define ENUM_BITFIELD(TYPE) __extension__ enum TYPE
+#else
+#define ENUM_BITFIELD(TYPE) unsigned int
+#endif
+
+#if __cpp_constexpr >= 200704
+#define CONSTEXPR constexpr
+#else
+#define CONSTEXPR
+#endif
+
+/* C++11 adds the ability to add "override" after an implementation of a
+   virtual function in a subclass, to:
+     (A) document that this is an override of a virtual function
+     (B) allow the compiler to issue a warning if it isn't (e.g. a mismatch
+         of the type signature).
+
+   Similarly, it allows us to add a "final" to indicate that no subclass
+   may subsequently override the vfunc.
+
+   Provide OVERRIDE and FINAL as macros, allowing us to get these benefits
+   when compiling with C++11 support, but without requiring C++11.
+
+   For gcc, use "-std=c++11" to enable C++11 support; gcc 6 onwards enables
+   this by default (actually GNU++14).  */
+
+#if defined __cplusplus
+# if __cplusplus >= 201103
+   /* C++11 claims to be available: use it.  Final/override were only
+      implemented in 4.7, though.  */
+#  if GCC_VERSION < 4007
+#   define OVERRIDE
+#   define FINAL
+#  else
+#   define OVERRIDE override
+#   define FINAL final
+#  endif
+# elif GCC_VERSION >= 4007
+   /* G++ 4.7 supports __final in C++98.  */
+#  define OVERRIDE
+#  define FINAL __final
+# else
+   /* No C++11 support; leave the macros empty.  */
+#  define OVERRIDE
+#  define FINAL
+# endif
+#else
+  /* No C++11 support; leave the macros empty.  */
+# define OVERRIDE
+# define FINAL
+#endif
+
+/* A macro to disable the copy constructor and assignment operator.
+   When building with C++11 and above, the methods are explicitly
+   deleted, causing a compile-time error if something tries to copy.
+   For C++03, this just declares the methods, causing a link-time
+   error if the methods end up called (assuming you don't
+   define them).  For C++03, for best results, place the macro
+   under the private: access specifier, like this,
+
+   class name_lookup
+   {
+     private:
+       DISABLE_COPY_AND_ASSIGN (name_lookup);
+   };
+
+   so that most attempts at copy are caught at compile-time.  */
+
+#if __cplusplus >= 201103
+#define DISABLE_COPY_AND_ASSIGN(TYPE)		\
+  TYPE (const TYPE&) = delete;			\
+  void operator= (const TYPE &) = delete
+  #else
+#define DISABLE_COPY_AND_ASSIGN(TYPE)		\
+  TYPE (const TYPE&);				\
+  void operator= (const TYPE &)
+#endif /* __cplusplus >= 201103 */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* ansidecl.h	*/
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/asan.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/asan.h
new file mode 100644
index 0000000..7675f18
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/asan.h
@@ -0,0 +1,207 @@
+/* AddressSanitizer, a fast memory error detector.
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Contributed by Kostya Serebryany <kcc@google.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef TREE_ASAN
+#define TREE_ASAN
+
+extern void asan_function_start (void);
+extern void asan_finish_file (void);
+extern rtx_insn *asan_emit_stack_protection (rtx, rtx, unsigned int,
+					     HOST_WIDE_INT *, tree *, int);
+extern rtx_insn *asan_emit_allocas_unpoison (rtx, rtx, rtx_insn *);
+extern bool asan_protect_global (tree, bool ignore_decl_rtl_set_p = false);
+extern void initialize_sanitizer_builtins (void);
+extern tree asan_dynamic_init_call (bool);
+extern bool asan_expand_check_ifn (gimple_stmt_iterator *, bool);
+extern bool asan_expand_mark_ifn (gimple_stmt_iterator *);
+extern bool asan_expand_poison_ifn (gimple_stmt_iterator *, bool *,
+				    hash_map<tree, tree> &);
+
+extern gimple_stmt_iterator create_cond_insert_point
+     (gimple_stmt_iterator *, bool, bool, bool, basic_block *, basic_block *);
+
+/* Alias set for accessing the shadow memory.  */
+extern alias_set_type asan_shadow_set;
+
+/* Hash set of labels that are either used in a goto, or their address
+   has been taken.  */
+extern hash_set <tree> *asan_used_labels;
+
+/* Shadow memory is found at
+   (address >> ASAN_SHADOW_SHIFT) + asan_shadow_offset ().  */
+#define ASAN_SHADOW_SHIFT	3
+#define ASAN_SHADOW_GRANULARITY (1UL << ASAN_SHADOW_SHIFT)
+
+/* Red zone size, stack and global variables are padded by ASAN_RED_ZONE_SIZE
+   up to 2 * ASAN_RED_ZONE_SIZE - 1 bytes.  */
+#define ASAN_RED_ZONE_SIZE	32
+
+/* Stack variable use more compact red zones.  The size includes also
+   size of variable itself.  */
+
+#define ASAN_MIN_RED_ZONE_SIZE	16
+
+/* Shadow memory values for stack protection.  Left is below protected vars,
+   the first pointer in stack corresponding to that offset contains
+   ASAN_STACK_FRAME_MAGIC word, the second pointer to a string describing
+   the frame.  Middle is for padding in between variables, right is
+   above the last protected variable and partial immediately after variables
+   up to ASAN_RED_ZONE_SIZE alignment.  */
+#define ASAN_STACK_MAGIC_LEFT		  0xf1
+#define ASAN_STACK_MAGIC_MIDDLE		  0xf2
+#define ASAN_STACK_MAGIC_RIGHT		  0xf3
+#define ASAN_STACK_MAGIC_USE_AFTER_RET	  0xf5
+#define ASAN_STACK_MAGIC_USE_AFTER_SCOPE  0xf8
+
+#define ASAN_STACK_FRAME_MAGIC		0x41b58ab3
+#define ASAN_STACK_RETIRED_MAGIC	0x45e0360e
+
+#define ASAN_USE_AFTER_SCOPE_ATTRIBUTE	"use after scope memory"
+
+/* Various flags for Asan builtins.  */
+enum asan_check_flags
+{
+  ASAN_CHECK_STORE = 1 << 0,
+  ASAN_CHECK_SCALAR_ACCESS = 1 << 1,
+  ASAN_CHECK_NON_ZERO_LEN = 1 << 2,
+  ASAN_CHECK_LAST = 1 << 3
+};
+
+/* Flags for Asan check builtins.  */
+#define IFN_ASAN_MARK_FLAGS DEF(POISON), DEF(UNPOISON)
+
+enum asan_mark_flags
+{
+#define DEF(X) ASAN_MARK_##X
+  IFN_ASAN_MARK_FLAGS
+#undef DEF
+};
+
+/* Return true if STMT is ASAN_MARK with FLAG as first argument.  */
+extern bool asan_mark_p (gimple *stmt, enum asan_mark_flags flag);
+
+/* Return the size of padding needed to insert after a protected
+   decl of SIZE.  */
+
+static inline unsigned int
+asan_red_zone_size (unsigned int size)
+{
+  unsigned int c = size & (ASAN_RED_ZONE_SIZE - 1);
+  return c ? 2 * ASAN_RED_ZONE_SIZE - c : ASAN_RED_ZONE_SIZE;
+}
+
+/* Return how much a stack variable occupis on a stack
+   including a space for red zone.  */
+
+static inline unsigned HOST_WIDE_INT
+asan_var_and_redzone_size (unsigned HOST_WIDE_INT size)
+{
+  if (size <= 4)
+    return 16;
+  else if (size <= 16)
+    return 32;
+  else if (size <= 128)
+    return size + 32;
+  else if (size <= 512)
+    return size + 64;
+  else if (size <= 4096)
+    return size + 128;
+  else
+    return size + 256;
+}
+
+extern bool set_asan_shadow_offset (const char *);
+
+extern void set_sanitized_sections (const char *);
+
+extern bool asan_sanitize_stack_p (void);
+
+extern bool asan_sanitize_allocas_p (void);
+
+extern hash_set<tree> *asan_handled_variables;
+
+/* Return TRUE if builtin with given FCODE will be intercepted by
+   libasan.  */
+
+static inline bool
+asan_intercepted_p (enum built_in_function fcode)
+{
+  return fcode == BUILT_IN_INDEX
+	 || fcode == BUILT_IN_MEMCHR
+	 || fcode == BUILT_IN_MEMCMP
+	 || fcode == BUILT_IN_MEMCPY
+	 || fcode == BUILT_IN_MEMMOVE
+	 || fcode == BUILT_IN_MEMSET
+	 || fcode == BUILT_IN_STRCASECMP
+	 || fcode == BUILT_IN_STRCAT
+	 || fcode == BUILT_IN_STRCHR
+	 || fcode == BUILT_IN_STRCMP
+	 || fcode == BUILT_IN_STRCPY
+	 || fcode == BUILT_IN_STRDUP
+	 || fcode == BUILT_IN_STRLEN
+	 || fcode == BUILT_IN_STRNCASECMP
+	 || fcode == BUILT_IN_STRNCAT
+	 || fcode == BUILT_IN_STRNCMP
+	 || fcode == BUILT_IN_STRCSPN
+	 || fcode == BUILT_IN_STRPBRK
+	 || fcode == BUILT_IN_STRSPN
+	 || fcode == BUILT_IN_STRSTR
+	 || fcode == BUILT_IN_STRNCPY;
+}
+
+/* Return TRUE if we should instrument for use-after-scope sanity checking.  */
+
+static inline bool
+asan_sanitize_use_after_scope (void)
+{
+  return (flag_sanitize_address_use_after_scope && asan_sanitize_stack_p ());
+}
+
+/* Return true if DECL should be guarded on the stack.  */
+
+static inline bool
+asan_protect_stack_decl (tree decl)
+{
+  return DECL_P (decl)
+    && (!DECL_ARTIFICIAL (decl)
+	|| (asan_sanitize_use_after_scope () && TREE_ADDRESSABLE (decl)));
+}
+
+/* Return true when flag_sanitize & FLAG is non-zero.  If FN is non-null,
+   remove all flags mentioned in "no_sanitize" of DECL_ATTRIBUTES.  */
+
+static inline bool
+sanitize_flags_p (unsigned int flag, const_tree fn = current_function_decl)
+{
+  unsigned int result_flags = flag_sanitize & flag;
+  if (result_flags == 0)
+    return false;
+
+  if (fn != NULL_TREE)
+    {
+      tree value = lookup_attribute ("no_sanitize", DECL_ATTRIBUTES (fn));
+      if (value)
+	result_flags &= ~tree_to_uhwi (TREE_VALUE (value));
+    }
+
+  return result_flags;
+}
+
+#endif /* TREE_ASAN */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/attribs.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/attribs.h
new file mode 100644
index 0000000..83ecbbb
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/attribs.h
@@ -0,0 +1,220 @@
+/* Declarations and definitions dealing with attribute handling.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_ATTRIBS_H
+#define GCC_ATTRIBS_H
+
+extern const struct attribute_spec *lookup_attribute_spec (const_tree);
+extern void init_attributes (void);
+
+/* Process the attributes listed in ATTRIBUTES and install them in *NODE,
+   which is either a DECL (including a TYPE_DECL) or a TYPE.  If a DECL,
+   it should be modified in place; if a TYPE, a copy should be created
+   unless ATTR_FLAG_TYPE_IN_PLACE is set in FLAGS.  FLAGS gives further
+   information, in the form of a bitwise OR of flags in enum attribute_flags
+   from tree.h.  Depending on these flags, some attributes may be
+   returned to be applied at a later stage (for example, to apply
+   a decl attribute to the declaration rather than to its type).  */
+extern tree decl_attributes (tree *, tree, int, tree = NULL_TREE);
+
+extern bool cxx11_attribute_p (const_tree);
+extern tree get_attribute_name (const_tree);
+extern void apply_tm_attr (tree, tree);
+extern tree make_attribute (const char *, const char *, tree);
+
+extern struct scoped_attributes* register_scoped_attributes (const struct attribute_spec *,
+							     const char *);
+
+extern char *sorted_attr_string (tree);
+extern bool common_function_versions (tree, tree);
+extern char *make_unique_name (tree, const char *, bool);
+extern tree make_dispatcher_decl (const tree);
+extern bool is_function_default_version (const tree);
+
+/* Return a type like TTYPE except that its TYPE_ATTRIBUTES
+   is ATTRIBUTE.
+
+   Such modified types already made are recorded so that duplicates
+   are not made.  */
+
+extern tree build_type_attribute_variant (tree, tree);
+extern tree build_decl_attribute_variant (tree, tree);
+extern tree build_type_attribute_qual_variant (tree, tree, int);
+
+extern bool attribute_value_equal (const_tree, const_tree);
+
+/* Return 0 if the attributes for two types are incompatible, 1 if they
+   are compatible, and 2 if they are nearly compatible (which causes a
+   warning to be generated).  */
+extern int comp_type_attributes (const_tree, const_tree);
+
+/* Default versions of target-overridable functions.  */
+extern tree merge_decl_attributes (tree, tree);
+extern tree merge_type_attributes (tree, tree);
+
+/* Remove any instances of attribute ATTR_NAME in LIST and return the
+   modified list.  */
+
+extern tree remove_attribute (const char *, tree);
+
+/* Given two attributes lists, return a list of their union.  */
+
+extern tree merge_attributes (tree, tree);
+
+/* Duplicate all attributes with name NAME in ATTR list to *ATTRS if
+   they are missing there.  */
+
+extern void duplicate_one_attribute (tree *, tree, const char *);
+
+/* Duplicate all attributes from user DECL to the corresponding
+   builtin that should be propagated.  */
+
+extern void copy_attributes_to_builtin (tree);
+
+/* Given two Windows decl attributes lists, possibly including
+   dllimport, return a list of their union .  */
+extern tree merge_dllimport_decl_attributes (tree, tree);
+
+/* Handle a "dllimport" or "dllexport" attribute.  */
+extern tree handle_dll_attribute (tree *, tree, tree, int, bool *);
+
+extern int attribute_list_equal (const_tree, const_tree);
+extern int attribute_list_contained (const_tree, const_tree);
+
+/* The backbone of lookup_attribute().  ATTR_LEN is the string length
+   of ATTR_NAME, and LIST is not NULL_TREE.
+
+   The function is called from lookup_attribute in order to optimize
+   for size.  */
+extern tree private_lookup_attribute (const char *attr_name, size_t attr_len,
+				      tree list);
+
+extern unsigned decls_mismatched_attributes (tree, tree, tree,
+					     const char* const[],
+					     pretty_printer*);
+
+extern void maybe_diag_alias_attributes (tree, tree);
+
+/* For a given IDENTIFIER_NODE, strip leading and trailing '_' characters
+   so that we have a canonical form of attribute names.  */
+
+static inline tree
+canonicalize_attr_name (tree attr_name)
+{
+  const size_t l = IDENTIFIER_LENGTH (attr_name);
+  const char *s = IDENTIFIER_POINTER (attr_name);
+
+  if (l > 4 && s[0] == '_' && s[1] == '_' && s[l - 1] == '_' && s[l - 2] == '_')
+    return get_identifier_with_length (s + 2, l - 4);
+
+  return attr_name;
+}
+
+/* Compare attribute identifiers ATTR1 and ATTR2 with length ATTR1_LEN and
+   ATTR2_LEN.  */
+
+static inline bool
+cmp_attribs (const char *attr1, size_t attr1_len,
+	     const char *attr2, size_t attr2_len)
+{
+  return attr1_len == attr2_len && strncmp (attr1, attr2, attr1_len) == 0;
+}
+
+/* Compare attribute identifiers ATTR1 and ATTR2.  */
+
+static inline bool
+cmp_attribs (const char *attr1, const char *attr2)
+{
+  return cmp_attribs (attr1, strlen (attr1), attr2, strlen (attr2));
+}
+
+/* Given an identifier node IDENT and a string ATTR_NAME, return true
+   if the identifier node is a valid attribute name for the string.  */
+
+static inline bool
+is_attribute_p (const char *attr_name, const_tree ident)
+{
+  return cmp_attribs (attr_name, strlen (attr_name),
+		      IDENTIFIER_POINTER (ident), IDENTIFIER_LENGTH (ident));
+}
+
+/* Given an attribute name ATTR_NAME and a list of attributes LIST,
+   return a pointer to the attribute's list element if the attribute
+   is part of the list, or NULL_TREE if not found.  If the attribute
+   appears more than once, this only returns the first occurrence; the
+   TREE_CHAIN of the return value should be passed back in if further
+   occurrences are wanted.  ATTR_NAME must be in the form 'text' (not
+   '__text__').  */
+
+static inline tree
+lookup_attribute (const char *attr_name, tree list)
+{
+  gcc_checking_assert (attr_name[0] != '_');
+  /* In most cases, list is NULL_TREE.  */
+  if (list == NULL_TREE)
+    return NULL_TREE;
+  else
+    {
+      size_t attr_len = strlen (attr_name);
+      /* Do the strlen() before calling the out-of-line implementation.
+	 In most cases attr_name is a string constant, and the compiler
+	 will optimize the strlen() away.  */
+      return private_lookup_attribute (attr_name, attr_len, list);
+    }
+}
+
+/* Given an attribute name ATTR_NAME and a list of attributes LIST,
+   return a pointer to the attribute's list first element if the attribute
+   starts with ATTR_NAME.  ATTR_NAME must be in the form 'text' (not
+   '__text__').  */
+
+static inline tree
+lookup_attribute_by_prefix (const char *attr_name, tree list)
+{
+  gcc_checking_assert (attr_name[0] != '_');
+  /* In most cases, list is NULL_TREE.  */
+  if (list == NULL_TREE)
+    return NULL_TREE;
+  else
+    {
+      size_t attr_len = strlen (attr_name);
+      while (list)
+	{
+	  size_t ident_len = IDENTIFIER_LENGTH (get_attribute_name (list));
+
+	  if (attr_len > ident_len)
+	    {
+	      list = TREE_CHAIN (list);
+	      continue;
+	    }
+
+	  const char *p = IDENTIFIER_POINTER (get_attribute_name (list));
+	  gcc_checking_assert (attr_len == 0 || p[0] != '_');
+
+	  if (strncmp (attr_name, p, attr_len) == 0)
+	    break;
+
+	  list = TREE_CHAIN (list);
+	}
+
+      return list;
+    }
+}
+
+#endif // GCC_ATTRIBS_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/auto-host.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/auto-host.h
new file mode 100644
index 0000000..d8b3897
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/auto-host.h
@@ -0,0 +1,2435 @@
+/* auto-host.h.  Generated from config.in by configure.  */
+/* config.in.  Generated from configure.ac by autoheader.  */
+
+/* Define if this compiler should be built as the offload target compiler. */
+#ifndef USED_FOR_TARGET
+/* #undef ACCEL_COMPILER */
+#endif
+
+
+/* Define if building universal (internal helper macro) */
+#ifndef USED_FOR_TARGET
+/* #undef AC_APPLE_UNIVERSAL_BUILD */
+#endif
+
+
+/* Define to the assembler option to enable compressed debug sections. */
+#ifndef USED_FOR_TARGET
+#define AS_COMPRESS_DEBUG_OPTION "--compress-debug-sections"
+#endif
+
+
+/* Define to the assembler option to disable compressed debug sections. */
+#ifndef USED_FOR_TARGET
+#define AS_NO_COMPRESS_DEBUG_OPTION "--nocompress-debug-sections"
+#endif
+
+
+/* Define as the number of bits in a byte, if `limits.h' doesn't. */
+#ifndef USED_FOR_TARGET
+/* #undef CHAR_BIT */
+#endif
+
+
+/* Define to 0/1 if you want more run-time sanity checks. This one gets a grab
+   bag of miscellaneous but relatively cheap checks. */
+#ifndef USED_FOR_TARGET
+#define CHECKING_P 0
+#endif
+
+
+/* Define 0/1 to force the choice for exception handling model. */
+#ifndef USED_FOR_TARGET
+#define CONFIG_SJLJ_EXCEPTIONS 0
+#endif
+
+
+/* Define to enable the use of a default assembler. */
+#ifndef USED_FOR_TARGET
+/* #undef DEFAULT_ASSEMBLER */
+#endif
+
+
+/* Define to enable the use of a default linker. */
+#ifndef USED_FOR_TARGET
+/* #undef DEFAULT_LINKER */
+#endif
+
+
+/* Define to larger than zero set the default stack clash protector size. */
+#ifndef USED_FOR_TARGET
+#define DEFAULT_STK_CLASH_GUARD_SIZE 0
+#endif
+
+
+/* Define if you want to use __cxa_atexit, rather than atexit, to register C++
+   destructors for local statics and global objects. This is essential for
+   fully standards-compliant handling of destructors, but requires
+   __cxa_atexit in libc. */
+#ifndef USED_FOR_TARGET
+#define DEFAULT_USE_CXA_ATEXIT 2
+#endif
+
+
+/* The default for -fdiagnostics-color option */
+#ifndef USED_FOR_TARGET
+#define DIAGNOSTICS_COLOR_DEFAULT DIAGNOSTICS_COLOR_AUTO
+#endif
+
+
+/* Define if you want assertions enabled. This is a cheap check. */
+#ifndef USED_FOR_TARGET
+#define ENABLE_ASSERT_CHECKING 1
+#endif
+
+
+/* Define to 1 to specify that we are using the BID decimal floating point
+   format instead of DPD */
+#ifndef USED_FOR_TARGET
+#define ENABLE_DECIMAL_BID_FORMAT 0
+#endif
+
+
+/* Define to 1 to enable decimal float extension to C. */
+#ifndef USED_FOR_TARGET
+#define ENABLE_DECIMAL_FLOAT 0
+#endif
+
+
+/* Define if your target supports default PIE and it is enabled. */
+#ifndef USED_FOR_TARGET
+/* #undef ENABLE_DEFAULT_PIE */
+#endif
+
+
+/* Define if your target supports default stack protector and it is enabled.
+   */
+#ifndef USED_FOR_TARGET
+/* #undef ENABLE_DEFAULT_SSP */
+#endif
+
+
+/* Define if you want more run-time sanity checks for dataflow. */
+#ifndef USED_FOR_TARGET
+/* #undef ENABLE_DF_CHECKING */
+#endif
+
+
+/* Define to 0/1 if you want extra run-time checking that might affect code
+   generation. */
+#ifndef USED_FOR_TARGET
+#define ENABLE_EXTRA_CHECKING 0
+#endif
+
+
+/* Define to 1 to enable fixed-point arithmetic extension to C. */
+#ifndef USED_FOR_TARGET
+#define ENABLE_FIXED_POINT 0
+#endif
+
+
+/* Define if you want fold checked that it never destructs its argument. This
+   is quite expensive. */
+#ifndef USED_FOR_TARGET
+/* #undef ENABLE_FOLD_CHECKING */
+#endif
+
+
+/* Define if you want the garbage collector to operate in maximally paranoid
+   mode, validating the entire heap and collecting garbage at every
+   opportunity. This is extremely expensive. */
+#ifndef USED_FOR_TARGET
+/* #undef ENABLE_GC_ALWAYS_COLLECT */
+#endif
+
+
+/* Define if you want the garbage collector to do object poisoning and other
+   memory allocation checks. This is quite expensive. */
+#ifndef USED_FOR_TARGET
+/* #undef ENABLE_GC_CHECKING */
+#endif
+
+
+/* Define if you want operations on GIMPLE (the basic data structure of the
+   high-level optimizers) to be checked for dynamic type safety at runtime.
+   This is moderately expensive. */
+#ifndef USED_FOR_TARGET
+/* #undef ENABLE_GIMPLE_CHECKING */
+#endif
+
+
+/* Define this to enable support for generating HSAIL. */
+#ifndef USED_FOR_TARGET
+/* #undef ENABLE_HSA */
+#endif
+
+
+/* Define if gcc should always pass --build-id to linker. */
+#ifndef USED_FOR_TARGET
+/* #undef ENABLE_LD_BUILDID */
+#endif
+
+
+/* Define to 1 to enable libquadmath support */
+#ifndef USED_FOR_TARGET
+#define ENABLE_LIBQUADMATH_SUPPORT 1
+#endif
+
+
+/* Define to enable LTO support. */
+#ifndef USED_FOR_TARGET
+#define ENABLE_LTO 1
+#endif
+
+
+/* Define to 1 if translation of program messages to the user's native
+   language is requested. */
+#ifndef USED_FOR_TARGET
+/* #undef ENABLE_NLS */
+#endif
+
+
+/* Define this to enable support for offloading. */
+#ifndef USED_FOR_TARGET
+#define ENABLE_OFFLOADING 0
+#endif
+
+
+/* Define to enable plugin support. */
+#ifndef USED_FOR_TARGET
+#define ENABLE_PLUGIN 1
+#endif
+
+
+/* Define if you want all operations on RTL (the basic data structure of the
+   optimizer and back end) to be checked for dynamic type safety at runtime.
+   This is quite expensive. */
+#ifndef USED_FOR_TARGET
+/* #undef ENABLE_RTL_CHECKING */
+#endif
+
+
+/* Define if you want RTL flag accesses to be checked against the RTL codes
+   that are supported for each access macro. This is relatively cheap. */
+#ifndef USED_FOR_TARGET
+/* #undef ENABLE_RTL_FLAG_CHECKING */
+#endif
+
+
+/* Define if you want runtime assertions enabled. This is a cheap check. */
+#define ENABLE_RUNTIME_CHECKING 1
+
+/* Define if you want all operations on trees (the basic data structure of the
+   front ends) to be checked for dynamic type safety at runtime. This is
+   moderately expensive. */
+#ifndef USED_FOR_TARGET
+/* #undef ENABLE_TREE_CHECKING */
+#endif
+
+
+/* Define if you want all gimple types to be verified after gimplifiation.
+   This is cheap. */
+#ifndef USED_FOR_TARGET
+/* #undef ENABLE_TYPES_CHECKING */
+#endif
+
+
+/* Define to get calls to the valgrind runtime enabled. */
+#ifndef USED_FOR_TARGET
+/* #undef ENABLE_VALGRIND_ANNOTATIONS */
+#endif
+
+
+/* Define if you want to run subprograms and generated programs through
+   valgrind (a memory checker). This is extremely expensive. */
+#ifndef USED_FOR_TARGET
+/* #undef ENABLE_VALGRIND_CHECKING */
+#endif
+
+
+/* Define 0/1 if vtable verification feature is enabled. */
+#ifndef USED_FOR_TARGET
+#define ENABLE_VTABLE_VERIFY 0
+#endif
+
+
+/* Define to 1 if installation paths should be looked up in the Windows
+   Registry. Ignored on non-Windows hosts. */
+#ifndef USED_FOR_TARGET
+/* #undef ENABLE_WIN32_REGISTRY */
+#endif
+
+
+/* Define to the name of a file containing a list of extra machine modes for
+   this architecture. */
+#ifndef USED_FOR_TARGET
+#define EXTRA_MODES_FILE "config/aarch64/aarch64-modes.def"
+#endif
+
+
+/* Define to enable detailed memory allocation stats gathering. */
+#ifndef USED_FOR_TARGET
+#define GATHER_STATISTICS 0
+#endif
+
+
+/* Define to 1 if `TIOCGWINSZ' requires <sys/ioctl.h>. */
+#ifndef USED_FOR_TARGET
+#define GWINSZ_IN_SYS_IOCTL 1
+#endif
+
+
+/* mcontext_t fields start with __ */
+#ifndef USED_FOR_TARGET
+/* #undef HAS_MCONTEXT_T_UNDERSCORES */
+#endif
+
+
+/* Define if your assembler supports architecture modifiers. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_ARCHITECTURE_MODIFIERS */
+#endif
+
+
+/* Define if your avr assembler supports -mgcc-isr option. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_AVR_MGCCISR_OPTION */
+#endif
+
+
+/* Define if your avr assembler supports --mlink-relax option. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_AVR_MLINK_RELAX_OPTION */
+#endif
+
+
+/* Define if your avr assembler supports -mrmw option. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_AVR_MRMW_OPTION */
+#endif
+
+
+/* Define to the level of your assembler's compressed debug section support.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_AS_COMPRESS_DEBUG 2
+#endif
+
+
+/* Define if your assembler supports the --debug-prefix-map option. */
+#ifndef USED_FOR_TARGET
+#define HAVE_AS_DEBUG_PREFIX_MAP 1
+#endif
+
+
+/* Define if your assembler supports .module. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_DOT_MODULE */
+#endif
+
+
+/* Define if your assembler supports DSPR1 mult. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_DSPR1_MULT */
+#endif
+
+
+/* Define if your assembler supports .dtprelword. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_DTPRELWORD */
+#endif
+
+
+/* Define if your assembler supports dwarf2 .file/.loc directives, and
+   preserves file table indices exactly as given. */
+#ifndef USED_FOR_TARGET
+#define HAVE_AS_DWARF2_DEBUG_LINE 1
+#endif
+
+
+/* Define if your assembler supports views in dwarf2 .loc directives. */
+#ifndef USED_FOR_TARGET
+#define HAVE_AS_DWARF2_DEBUG_VIEW 1
+#endif
+
+
+/* Define if your assembler supports the R_PPC64_ENTRY relocation. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_ENTRY_MARKERS */
+#endif
+
+
+/* Define if your assembler supports explicit relocations. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_EXPLICIT_RELOCS */
+#endif
+
+
+/* Define if your assembler supports FMAF, HPC, and VIS 3.0 instructions. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_FMAF_HPC_VIS3 */
+#endif
+
+
+/* Define if your assembler supports the --gdwarf2 option. */
+#ifndef USED_FOR_TARGET
+#define HAVE_AS_GDWARF2_DEBUG_FLAG 1
+#endif
+
+
+/* Define if your assembler supports .gnu_attribute. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_GNU_ATTRIBUTE */
+#endif
+
+
+/* Define true if the assembler supports '.long foo@GOTOFF'. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_GOTOFF_IN_DATA */
+#endif
+
+
+/* Define if your assembler supports the --gstabs option. */
+#ifndef USED_FOR_TARGET
+#define HAVE_AS_GSTABS_DEBUG_FLAG 1
+#endif
+
+
+/* Define if your assembler supports the Sun syntax for cmov. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_IX86_CMOV_SUN_SYNTAX */
+#endif
+
+
+/* Define if your assembler supports the subtraction of symbols in different
+   sections. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_IX86_DIFF_SECT_DELTA */
+#endif
+
+
+/* Define if your assembler supports the ffreep mnemonic. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_IX86_FFREEP */
+#endif
+
+
+/* Define if your assembler uses fildq and fistq mnemonics. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_IX86_FILDQ */
+#endif
+
+
+/* Define if your assembler uses filds and fists mnemonics. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_IX86_FILDS */
+#endif
+
+
+/* Define 0/1 if your assembler and linker support @GOT. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_IX86_GOT32X */
+#endif
+
+
+/* Define if your assembler supports HLE prefixes. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_IX86_HLE */
+#endif
+
+
+/* Define if your assembler supports interunit movq mnemonic. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_IX86_INTERUNIT_MOVQ */
+#endif
+
+
+/* Define if your assembler supports the .quad directive. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_IX86_QUAD */
+#endif
+
+
+/* Define if the assembler supports 'rep <insn>, lock <insn>'. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_IX86_REP_LOCK_PREFIX */
+#endif
+
+
+/* Define if your assembler supports the sahf mnemonic in 64bit mode. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_IX86_SAHF */
+#endif
+
+
+/* Define if your assembler supports the swap suffix. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_IX86_SWAP */
+#endif
+
+
+/* Define if your assembler and linker support @tlsgdplt. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_IX86_TLSGDPLT */
+#endif
+
+
+/* Define to 1 if your assembler and linker support @tlsldm. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_IX86_TLSLDM */
+#endif
+
+
+/* Define to 1 if your assembler and linker support @tlsldmplt. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_IX86_TLSLDMPLT */
+#endif
+
+
+/* Define 0/1 if your assembler and linker support calling ___tls_get_addr via
+   GOT. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_IX86_TLS_GET_ADDR_GOT */
+#endif
+
+
+/* Define if your assembler supports the 'ud2' mnemonic. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_IX86_UD2 */
+#endif
+
+
+/* Define if your assembler supports the lituse_jsrdirect relocation. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_JSRDIRECT_RELOCS */
+#endif
+
+
+/* Define if your assembler supports .sleb128 and .uleb128. */
+#ifndef USED_FOR_TARGET
+#define HAVE_AS_LEB128 1
+#endif
+
+
+/* Define if your assembler supports LEON instructions. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_LEON */
+#endif
+
+
+/* Define if the assembler won't complain about a line such as # 0 "" 2. */
+#ifndef USED_FOR_TARGET
+#define HAVE_AS_LINE_ZERO 1
+#endif
+
+
+/* Define if your assembler supports ltoffx and ldxmov relocations. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_LTOFFX_LDXMOV_RELOCS */
+#endif
+
+
+/* Define if your assembler supports the -mabi option. */
+#ifndef USED_FOR_TARGET
+#define HAVE_AS_MABI_OPTION 1
+#endif
+
+
+/* Define if your assembler supports .machine and .machinemode. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_MACHINE_MACHINEMODE */
+#endif
+
+
+/* Define if your assembler supports mfcr field. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_MFCRF */
+#endif
+
+
+/* Define if your Mac OS X assembler supports the -mmacos-version-min option.
+   */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_MMACOSX_VERSION_MIN_OPTION */
+#endif
+
+
+/* Define if the assembler understands -mnan=. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_NAN */
+#endif
+
+
+/* Define if your assembler supports the -no-mul-bug-abort option. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_NO_MUL_BUG_ABORT_OPTION */
+#endif
+
+
+/* Define if the assembler understands -mno-shared. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_NO_SHARED */
+#endif
+
+
+/* Define if your assembler supports offsetable %lo(). */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_OFFSETABLE_LO10 */
+#endif
+
+
+/* Define if your assembler supports R_PPC*_PLTSEQ relocations. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_PLTSEQ */
+#endif
+
+
+/* Define if your assembler supports .ref */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_REF */
+#endif
+
+
+/* Define if your assembler supports R_PPC_REL16 relocs. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_REL16 */
+#endif
+
+
+/* Define if your assembler supports -relax option. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_RELAX_OPTION */
+#endif
+
+
+/* Define if your assembler supports .attribute. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_RISCV_ATTRIBUTE */
+#endif
+
+
+/* Define if your assembler supports relocs needed by -fpic. */
+#ifndef USED_FOR_TARGET
+#define HAVE_AS_SMALL_PIC_RELOCS 1
+#endif
+
+
+/* Define if your assembler supports SPARC4 instructions. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_SPARC4 */
+#endif
+
+
+/* Define if your assembler supports SPARC5 and VIS 4.0 instructions. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_SPARC5_VIS4 */
+#endif
+
+
+/* Define if your assembler supports SPARC6 instructions. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_SPARC6 */
+#endif
+
+
+/* Define if your assembler and linker support GOTDATA_OP relocs. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_SPARC_GOTDATA_OP */
+#endif
+
+
+/* Define if your assembler and linker support unaligned PC relative relocs.
+   */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_SPARC_UA_PCREL */
+#endif
+
+
+/* Define if your assembler and linker support unaligned PC relative relocs
+   against hidden symbols. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_SPARC_UA_PCREL_HIDDEN */
+#endif
+
+
+/* Define if your assembler supports .stabs. */
+#ifndef USED_FOR_TARGET
+#define HAVE_AS_STABS_DIRECTIVE 1
+#endif
+
+
+/* Define if your assembler and linker support thread-local storage. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_TLS */
+#endif
+
+
+/* Define if your assembler supports arg info for __tls_get_addr. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_TLS_MARKERS */
+#endif
+
+
+/* Define if your assembler supports vl/vst/vlm/vstm with an optional
+   alignment hint argument. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_VECTOR_LOADSTORE_ALIGNMENT_HINTS */
+#endif
+
+
+/* Define if your assembler supports VSX instructions. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_VSX */
+#endif
+
+
+/* Define if your assembler supports -xbrace_comment option. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_AS_XBRACE_COMMENT_OPTION */
+#endif
+
+
+/* Define to 1 if you have the `atoq' function. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_ATOQ */
+#endif
+
+
+/* Define to 1 if you have the `clearerr_unlocked' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_CLEARERR_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if you have the `clock' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_CLOCK 1
+#endif
+
+
+/* Define if <time.h> defines clock_t. */
+#ifndef USED_FOR_TARGET
+#define HAVE_CLOCK_T 1
+#endif
+
+
+/* Define 0/1 if your assembler and linker support COMDAT groups. */
+#ifndef USED_FOR_TARGET
+#define HAVE_COMDAT_GROUP 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'abort', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_ABORT 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'asprintf', otherwise define to
+   0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_ASPRINTF 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'atof', otherwise define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_ATOF 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'atol', otherwise define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_ATOL 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'atoll', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_ATOLL 1
+#endif
+
+
+/* Define to 1 if you have the declaration of `basename(const char*)', and to
+   0 if you don't. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_BASENAME 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'calloc', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_CALLOC 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'clearerr_unlocked', otherwise
+   define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_CLEARERR_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'clock', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_CLOCK 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'errno', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_ERRNO 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'feof_unlocked', otherwise define
+   to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_FEOF_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'ferror_unlocked', otherwise
+   define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_FERROR_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'fflush_unlocked', otherwise
+   define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_FFLUSH_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'ffs', otherwise define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_FFS 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'fgetc_unlocked', otherwise
+   define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_FGETC_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'fgets_unlocked', otherwise
+   define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_FGETS_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'fileno_unlocked', otherwise
+   define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_FILENO_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'fprintf_unlocked', otherwise
+   define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_FPRINTF_UNLOCKED 0
+#endif
+
+
+/* Define to 1 if we found a declaration for 'fputc_unlocked', otherwise
+   define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_FPUTC_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'fputs_unlocked', otherwise
+   define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_FPUTS_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'fread_unlocked', otherwise
+   define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_FREAD_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'free', otherwise define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_FREE 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'fwrite_unlocked', otherwise
+   define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_FWRITE_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'getchar_unlocked', otherwise
+   define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_GETCHAR_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'getcwd', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_GETCWD 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'getc_unlocked', otherwise define
+   to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_GETC_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'getenv', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_GETENV 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'getopt', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_GETOPT 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'getpagesize', otherwise define
+   to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_GETPAGESIZE 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'getrlimit', otherwise define to
+   0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_GETRLIMIT 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'getrusage', otherwise define to
+   0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_GETRUSAGE 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'getwd', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_GETWD 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'ldgetname', otherwise define to
+   0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_LDGETNAME 0
+#endif
+
+
+/* Define to 1 if we found a declaration for 'madvise', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_MADVISE 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'malloc', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_MALLOC 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'putchar_unlocked', otherwise
+   define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_PUTCHAR_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'putc_unlocked', otherwise define
+   to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_PUTC_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'realloc', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_REALLOC 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'sbrk', otherwise define to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_SBRK 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'setenv', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_SETENV 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'setrlimit', otherwise define to
+   0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_SETRLIMIT 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'sigaltstack', otherwise define
+   to 0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_SIGALTSTACK 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'snprintf', otherwise define to
+   0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_SNPRINTF 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'stpcpy', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_STPCPY 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'strnlen', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_STRNLEN 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'strsignal', otherwise define to
+   0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_STRSIGNAL 1
+#endif
+
+
+/* Define to 1 if you have the declaration of `strstr(const char*,const
+   char*)', and to 0 if you don't. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_STRSTR 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'strtol', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_STRTOL 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'strtoll', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_STRTOLL 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'strtoul', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_STRTOUL 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'strtoull', otherwise define to
+   0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_STRTOULL 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'strverscmp', otherwise define to
+   0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_STRVERSCMP 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'times', otherwise define to 0.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_TIMES 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'unsetenv', otherwise define to
+   0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_UNSETENV 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'vasprintf', otherwise define to
+   0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_VASPRINTF 1
+#endif
+
+
+/* Define to 1 if we found a declaration for 'vsnprintf', otherwise define to
+   0. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DECL_VSNPRINTF 1
+#endif
+
+
+/* Define to 1 if you have the <direct.h> header file. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_DIRECT_H */
+#endif
+
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_DLFCN_H 1
+#endif
+
+
+/* Define to 1 if you have the <ext/hash_map> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_EXT_HASH_MAP 1
+#endif
+
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_FCNTL_H 1
+#endif
+
+
+/* Define to 1 if you have the `feof_unlocked' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_FEOF_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if you have the `ferror_unlocked' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_FERROR_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if you have the `fflush_unlocked' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_FFLUSH_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if you have the `fgetc_unlocked' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_FGETC_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if you have the `fgets_unlocked' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_FGETS_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if you have the `fileno_unlocked' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_FILENO_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if you have the `fork' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_FORK 1
+#endif
+
+
+/* Define to 1 if you have the `fprintf_unlocked' function. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_FPRINTF_UNLOCKED */
+#endif
+
+
+/* Define to 1 if you have the `fputc_unlocked' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_FPUTC_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if you have the `fputs_unlocked' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_FPUTS_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if you have the `fread_unlocked' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_FREAD_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if you have the <ftw.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_FTW_H 1
+#endif
+
+
+/* Define to 1 if you have the `fwrite_unlocked' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_FWRITE_UNLOCKED 1
+#endif
+
+
+/* Define if your assembler supports specifying the alignment of objects
+   allocated using the GAS .comm command. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_GAS_ALIGNED_COMM */
+#endif
+
+
+/* Define if your assembler supports .balign and .p2align. */
+#ifndef USED_FOR_TARGET
+#define HAVE_GAS_BALIGN_AND_P2ALIGN 1
+#endif
+
+
+/* Define 0/1 if your assembler supports CFI directives. */
+#define HAVE_GAS_CFI_DIRECTIVE 1
+
+/* Define 0/1 if your assembler supports .cfi_personality. */
+#define HAVE_GAS_CFI_PERSONALITY_DIRECTIVE 1
+
+/* Define 0/1 if your assembler supports .cfi_sections. */
+#define HAVE_GAS_CFI_SECTIONS_DIRECTIVE 1
+
+/* Define if your assembler supports the .loc discriminator sub-directive. */
+#ifndef USED_FOR_TARGET
+#define HAVE_GAS_DISCRIMINATOR 1
+#endif
+
+
+/* Define if your assembler supports @gnu_unique_object. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_GAS_GNU_UNIQUE_OBJECT */
+#endif
+
+
+/* Define if your assembler and linker support .hidden. */
+#define HAVE_GAS_HIDDEN 1
+
+/* Define if your assembler supports .lcomm with an alignment field. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_GAS_LCOMM_WITH_ALIGNMENT */
+#endif
+
+
+/* Define if your assembler supports .literal16. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_GAS_LITERAL16 */
+#endif
+
+
+/* Define if your assembler supports the .loc is_stmt sub-directive. */
+#ifndef USED_FOR_TARGET
+#define HAVE_GAS_LOC_STMT 1
+#endif
+
+
+/* Define if your assembler supports specifying the maximum number of bytes to
+   skip when using the GAS .p2align command. */
+#ifndef USED_FOR_TARGET
+#define HAVE_GAS_MAX_SKIP_P2ALIGN 1
+#endif
+
+
+/* Define if your assembler supports the .set micromips directive */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_GAS_MICROMIPS */
+#endif
+
+
+/* Define if your assembler supports .nsubspa comdat option. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_GAS_NSUBSPA_COMDAT */
+#endif
+
+
+/* Define if your assembler and linker support 32-bit section relative relocs
+   via '.secrel32 label'. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_GAS_PE_SECREL32_RELOC */
+#endif
+
+
+/* Define if your assembler supports specifying the exclude section flag. */
+#ifndef USED_FOR_TARGET
+#define HAVE_GAS_SECTION_EXCLUDE 1
+#endif
+
+
+/* Define 0/1 if your assembler supports marking sections with SHF_MERGE flag.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_GAS_SHF_MERGE 1
+#endif
+
+
+/* Define if your assembler supports .subsection and .subsection -1 starts
+   emitting at the beginning of your section. */
+#ifndef USED_FOR_TARGET
+#define HAVE_GAS_SUBSECTION_ORDERING 1
+#endif
+
+
+/* Define if your assembler supports .weak. */
+#ifndef USED_FOR_TARGET
+#define HAVE_GAS_WEAK 1
+#endif
+
+
+/* Define if your assembler supports .weakref. */
+#ifndef USED_FOR_TARGET
+#define HAVE_GAS_WEAKREF 1
+#endif
+
+
+/* Define to 1 if you have the `getchar_unlocked' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_GETCHAR_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if you have the `getc_unlocked' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_GETC_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if you have the `getrlimit' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_GETRLIMIT 1
+#endif
+
+
+/* Define to 1 if you have the `getrusage' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_GETRUSAGE 1
+#endif
+
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_GETTIMEOFDAY 1
+#endif
+
+
+/* Define to 1 if using GNU as. */
+#ifndef USED_FOR_TARGET
+#define HAVE_GNU_AS 1
+#endif
+
+
+/* Define if your system supports gnu indirect functions. */
+#ifndef USED_FOR_TARGET
+#define HAVE_GNU_INDIRECT_FUNCTION 0
+#endif
+
+
+/* Define to 1 if using GNU ld. */
+#ifndef USED_FOR_TARGET
+#define HAVE_GNU_LD 1
+#endif
+
+
+/* Define if the gold linker supports split stack and is available as a
+   non-default */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_GOLD_NON_DEFAULT_SPLIT_STACK */
+#endif
+
+
+/* Define if you have the iconv() function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_ICONV 1
+#endif
+
+
+/* Define to 1 if you have the <iconv.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_ICONV_H 1
+#endif
+
+
+/* Define 0/1 if .init_array/.fini_array sections are available and working.
+   */
+#ifndef USED_FOR_TARGET
+#define HAVE_INITFINI_ARRAY_SUPPORT 1
+#endif
+
+
+/* Define to 1 if the system has the type `intmax_t'. */
+#ifndef USED_FOR_TARGET
+#define HAVE_INTMAX_T 1
+#endif
+
+
+/* Define to 1 if the system has the type `intptr_t'. */
+#ifndef USED_FOR_TARGET
+#define HAVE_INTPTR_T 1
+#endif
+
+
+/* Define if you have a working <inttypes.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_INTTYPES_H 1
+#endif
+
+
+/* Define to 1 if you have the `kill' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_KILL 1
+#endif
+
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#ifndef USED_FOR_TARGET
+#define HAVE_LANGINFO_CODESET 1
+#endif
+
+
+/* Define to 1 if you have the <langinfo.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LANGINFO_H 1
+#endif
+
+
+/* Define if your <locale.h> file defines LC_MESSAGES. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LC_MESSAGES 1
+#endif
+
+
+/* Define to 1 if you have the <ldfcn.h> header file. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_LDFCN_H */
+#endif
+
+
+/* Define 0/1 if your linker supports the SHF_MERGE flag with section
+   alignment > 1. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LD_ALIGNED_SHF_MERGE 1
+#endif
+
+
+/* Define if your linker supports --as-needed/--no-as-needed or equivalent
+   options. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LD_AS_NEEDED 1
+#endif
+
+
+/* Define if your default avr linker script for avrxmega3 leaves .rodata in
+   flash. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_LD_AVR_AVRXMEGA3_RODATA_IN_FLASH */
+#endif
+
+
+/* Define if your linker supports -z bndplt */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_LD_BNDPLT_SUPPORT */
+#endif
+
+
+/* Define if your linker supports --build-id. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LD_BUILDID 1
+#endif
+
+
+/* Define if the linker supports clearing hardware capabilities via mapfile.
+   */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_LD_CLEARCAP */
+#endif
+
+
+/* Define to the level of your linker's compressed debug section support. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LD_COMPRESS_DEBUG 3
+#endif
+
+
+/* Define if your linker supports --demangle option. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LD_DEMANGLE 1
+#endif
+
+
+/* Define 0/1 if your linker supports CIE v3 in .eh_frame. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LD_EH_FRAME_CIEV3 1
+#endif
+
+
+/* Define if your linker supports .eh_frame_hdr. */
+#define HAVE_LD_EH_FRAME_HDR 1
+
+/* Define if your linker supports garbage collection of sections in presence
+   of EH frames. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LD_EH_GC_SECTIONS 1
+#endif
+
+
+/* Define if your linker has buggy garbage collection of sections support when
+   .text.startup.foo like sections are used. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_LD_EH_GC_SECTIONS_BUG */
+#endif
+
+
+/* Define if your PowerPC64 linker supports a large TOC. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_LD_LARGE_TOC */
+#endif
+
+
+/* Define if your PowerPC64 linker only needs function descriptor syms. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_LD_NO_DOT_SYMS */
+#endif
+
+
+/* Define if your linker can relax absolute .eh_frame personality pointers
+   into PC-relative form. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_LD_PERSONALITY_RELAXATION */
+#endif
+
+
+/* Define if your linker supports PIE option. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LD_PIE 1
+#endif
+
+
+/* Define 0/1 if your linker supports -pie option with copy reloc. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LD_PIE_COPYRELOC 0
+#endif
+
+
+/* Define if your PowerPC linker has .gnu.attributes long double support. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_LD_PPC_GNU_ATTR_LONG_DOUBLE */
+#endif
+
+
+/* Define if your linker supports --push-state/--pop-state */
+#ifndef USED_FOR_TARGET
+#define HAVE_LD_PUSHPOPSTATE_SUPPORT 1
+#endif
+
+
+/* Define if your linker links a mix of read-only and read-write sections into
+   a read-write section. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LD_RO_RW_SECTION_MIXING 1
+#endif
+
+
+/* Define if your linker supports the *_sol2 emulations. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_LD_SOL2_EMULATION */
+#endif
+
+
+/* Define if your linker supports -Bstatic/-Bdynamic or equivalent options. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LD_STATIC_DYNAMIC 1
+#endif
+
+
+/* Define if your linker supports --sysroot. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LD_SYSROOT 1
+#endif
+
+
+/* Define to 1 if you have the <limits.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LIMITS_H 1
+#endif
+
+
+/* Define to 1 if you have the <locale.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LOCALE_H 1
+#endif
+
+
+/* Define to 1 if the system has the type `long long'. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LONG_LONG 1
+#endif
+
+
+/* Define to 1 if the system has the type `long long int'. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LONG_LONG_INT 1
+#endif
+
+
+/* Define to the level of your linker's plugin support. */
+#ifndef USED_FOR_TARGET
+#define HAVE_LTO_PLUGIN 2
+#endif
+
+
+/* Define to 1 if you have the `madvise' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_MADVISE 1
+#endif
+
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_MALLOC_H 1
+#endif
+
+
+/* Define to 1 if you have the `mbstowcs' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_MBSTOWCS 1
+#endif
+
+
+/* Define if valgrind's memcheck.h header is installed. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_MEMCHECK_H */
+#endif
+
+
+/* Define to 1 if you have the <memory.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_MEMORY_H 1
+#endif
+
+
+/* Define to 1 if you have the `mmap' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_MMAP 1
+#endif
+
+
+/* Define if mmap with MAP_ANON(YMOUS) works. */
+#ifndef USED_FOR_TARGET
+#define HAVE_MMAP_ANON 1
+#endif
+
+
+/* Define if mmap of /dev/zero works. */
+#ifndef USED_FOR_TARGET
+#define HAVE_MMAP_DEV_ZERO 1
+#endif
+
+
+/* Define if read-only mmap of a plain file works. */
+#ifndef USED_FOR_TARGET
+#define HAVE_MMAP_FILE 1
+#endif
+
+
+/* Define to 1 if you have the `nl_langinfo' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_NL_LANGINFO 1
+#endif
+
+
+/* Define to 1 if you have the `popen' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_POPEN 1
+#endif
+
+
+/* Define to 1 if you have the `putchar_unlocked' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_PUTCHAR_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if you have the `putc_unlocked' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_PUTC_UNLOCKED 1
+#endif
+
+
+/* Define to 1 if you have the `setlocale' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_SETLOCALE 1
+#endif
+
+
+/* Define to 1 if you have the `setrlimit' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_SETRLIMIT 1
+#endif
+
+
+/* Define if the system-provided CRTs are present on Solaris. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_SOLARIS_CRTS */
+#endif
+
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_STDDEF_H 1
+#endif
+
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_STDINT_H 1
+#endif
+
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_STDLIB_H 1
+#endif
+
+
+/* Define to 1 if you have the <strings.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_STRINGS_H 1
+#endif
+
+
+/* Define to 1 if you have the <string.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_STRING_H 1
+#endif
+
+
+/* Define to 1 if you have the `strsignal' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_STRSIGNAL 1
+#endif
+
+
+/* Define if <sys/times.h> defines struct tms. */
+#ifndef USED_FOR_TARGET
+#define HAVE_STRUCT_TMS 1
+#endif
+
+
+/* Define if <utility> defines std::swap. */
+#ifndef USED_FOR_TARGET
+#define HAVE_SWAP_IN_UTILITY 1
+#endif
+
+
+/* Define to 1 if you have the `sysconf' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_SYSCONF 1
+#endif
+
+
+/* Define to 1 if you have the <sys/file.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_SYS_FILE_H 1
+#endif
+
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_SYS_MMAN_H 1
+#endif
+
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_SYS_PARAM_H 1
+#endif
+
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_SYS_RESOURCE_H 1
+#endif
+
+
+/* Define if your target C library provides sys/sdt.h */
+/* #undef HAVE_SYS_SDT_H */
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_SYS_STAT_H 1
+#endif
+
+
+/* Define to 1 if you have the <sys/times.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_SYS_TIMES_H 1
+#endif
+
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_SYS_TIME_H 1
+#endif
+
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_SYS_TYPES_H 1
+#endif
+
+
+/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
+#ifndef USED_FOR_TARGET
+#define HAVE_SYS_WAIT_H 1
+#endif
+
+
+/* Define to 1 if you have the `times' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_TIMES 1
+#endif
+
+
+/* Define to 1 if you have the <time.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_TIME_H 1
+#endif
+
+
+/* Define to 1 if you have the <tr1/unordered_map> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_TR1_UNORDERED_MAP 1
+#endif
+
+
+/* Define to 1 if the system has the type `uintmax_t'. */
+#ifndef USED_FOR_TARGET
+#define HAVE_UINTMAX_T 1
+#endif
+
+
+/* Define to 1 if the system has the type `uintptr_t'. */
+#ifndef USED_FOR_TARGET
+#define HAVE_UINTPTR_T 1
+#endif
+
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_UNISTD_H 1
+#endif
+
+
+/* Define to 1 if you have the <unordered_map> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_UNORDERED_MAP 1
+#endif
+
+
+/* Define to 1 if the system has the type `unsigned long long int'. */
+#ifndef USED_FOR_TARGET
+#define HAVE_UNSIGNED_LONG_LONG_INT 1
+#endif
+
+
+/* Define if valgrind's valgrind/memcheck.h header is installed. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_VALGRIND_MEMCHECK_H */
+#endif
+
+
+/* Define to 1 if you have the `vfork' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_VFORK 1
+#endif
+
+
+/* Define to 1 if you have the <vfork.h> header file. */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_VFORK_H */
+#endif
+
+
+/* Define to 1 if you have the <wchar.h> header file. */
+#ifndef USED_FOR_TARGET
+#define HAVE_WCHAR_H 1
+#endif
+
+
+/* Define to 1 if you have the `wcswidth' function. */
+#ifndef USED_FOR_TARGET
+#define HAVE_WCSWIDTH 1
+#endif
+
+
+/* Define to 1 if `fork' works. */
+#ifndef USED_FOR_TARGET
+#define HAVE_WORKING_FORK 1
+#endif
+
+
+/* Define this macro if mbstowcs does not crash when its first argument is
+   NULL. */
+#ifndef USED_FOR_TARGET
+#define HAVE_WORKING_MBSTOWCS 1
+#endif
+
+
+/* Define to 1 if `vfork' works. */
+#ifndef USED_FOR_TARGET
+#define HAVE_WORKING_VFORK 1
+#endif
+
+
+/* Define if your assembler supports AIX debug frame section label reference.
+   */
+#ifndef USED_FOR_TARGET
+/* #undef HAVE_XCOFF_DWARF_EXTRAS */
+#endif
+
+
+/* Define if isl is in use. */
+#ifndef USED_FOR_TARGET
+#define HAVE_isl 1
+#endif
+
+
+/* Define if F_SETLKW supported by fcntl. */
+#ifndef USED_FOR_TARGET
+#define HOST_HAS_F_SETLKW 1
+#endif
+
+
+/* Define as const if the declaration of iconv() needs const. */
+#ifndef USED_FOR_TARGET
+#define ICONV_CONST 
+#endif
+
+
+/* Define if int64_t uses long as underlying type. */
+#ifndef USED_FOR_TARGET
+#define INT64_T_IS_LONG 1
+#endif
+
+
+/* Define to 1 if ld64 supports '-export_dynamic'. */
+#ifndef USED_FOR_TARGET
+/* #undef LD64_HAS_EXPORT_DYNAMIC */
+#endif
+
+
+/* Define to ld64 version. */
+#ifndef USED_FOR_TARGET
+/* #undef LD64_VERSION */
+#endif
+
+
+/* Define to the linker option to ignore unused dependencies. */
+#ifndef USED_FOR_TARGET
+#define LD_AS_NEEDED_OPTION "--push-state --as-needed"
+#endif
+
+
+/* Define to the linker option to enable compressed debug sections. */
+#ifndef USED_FOR_TARGET
+#define LD_COMPRESS_DEBUG_OPTION "--compress-debug-sections"
+#endif
+
+
+/* Define to the linker option to enable use of shared objects. */
+#ifndef USED_FOR_TARGET
+#define LD_DYNAMIC_OPTION "-Bdynamic"
+#endif
+
+
+/* Define to the linker option to keep unused dependencies. */
+#ifndef USED_FOR_TARGET
+#define LD_NO_AS_NEEDED_OPTION "--pop-state"
+#endif
+
+
+/* Define to the linker option to disable use of shared objects. */
+#ifndef USED_FOR_TARGET
+#define LD_STATIC_OPTION "-Bstatic"
+#endif
+
+
+/* The linker hash style */
+#ifndef USED_FOR_TARGET
+/* #undef LINKER_HASH_STYLE */
+#endif
+
+
+/* Define to the name of the LTO plugin DSO that must be passed to the
+   linker's -plugin=LIB option. */
+#ifndef USED_FOR_TARGET
+#define LTOPLUGINSONAME "liblto_plugin.so"
+#endif
+
+
+/* Define to the sub-directory in which libtool stores uninstalled libraries.
+   */
+#ifndef USED_FOR_TARGET
+#define LT_OBJDIR ".libs/"
+#endif
+
+
+/* Define if we should link mingw executables with --large-address-aware */
+#ifndef USED_FOR_TARGET
+/* #undef MINGW_DEFAULT_LARGE_ADDR_AWARE */
+#endif
+
+
+/* Value to set mingw's _dowildcard to. */
+#ifndef USED_FOR_TARGET
+/* #undef MINGW_DOWILDCARD */
+#endif
+
+
+/* Define if host mkdir takes a single argument. */
+#ifndef USED_FOR_TARGET
+/* #undef MKDIR_TAKES_ONE_ARG */
+#endif
+
+
+/* Define to offload targets, separated by commas. */
+#ifndef USED_FOR_TARGET
+#define OFFLOAD_TARGETS ""
+#endif
+
+
+/* Define to the address where bug reports for this package should be sent. */
+#ifndef USED_FOR_TARGET
+#define PACKAGE_BUGREPORT ""
+#endif
+
+
+/* Define to the full name of this package. */
+#ifndef USED_FOR_TARGET
+#define PACKAGE_NAME ""
+#endif
+
+
+/* Define to the full name and version of this package. */
+#ifndef USED_FOR_TARGET
+#define PACKAGE_STRING ""
+#endif
+
+
+/* Define to the one symbol short name of this package. */
+#ifndef USED_FOR_TARGET
+#define PACKAGE_TARNAME ""
+#endif
+
+
+/* Define to the home page for this package. */
+#ifndef USED_FOR_TARGET
+#define PACKAGE_URL ""
+#endif
+
+
+/* Define to the version of this package. */
+#ifndef USED_FOR_TARGET
+#define PACKAGE_VERSION ""
+#endif
+
+
+/* Specify plugin linker */
+#ifndef USED_FOR_TARGET
+#define PLUGIN_LD_SUFFIX "ld"
+#endif
+
+
+/* Define to .TOC. alignment forced by your linker. */
+#ifndef USED_FOR_TARGET
+/* #undef POWERPC64_TOC_POINTER_ALIGNMENT */
+#endif
+
+
+/* Define to PREFIX/include if cpp should also search that directory. */
+#ifndef USED_FOR_TARGET
+/* #undef PREFIX_INCLUDE_DIR */
+#endif
+
+
+/* The size of `int', as computed by sizeof. */
+#ifndef USED_FOR_TARGET
+#define SIZEOF_INT 4
+#endif
+
+
+/* The size of `long', as computed by sizeof. */
+#ifndef USED_FOR_TARGET
+#define SIZEOF_LONG 8
+#endif
+
+
+/* The size of `long long', as computed by sizeof. */
+#ifndef USED_FOR_TARGET
+#define SIZEOF_LONG_LONG 8
+#endif
+
+
+/* The size of `short', as computed by sizeof. */
+#ifndef USED_FOR_TARGET
+#define SIZEOF_SHORT 2
+#endif
+
+
+/* The size of `void *', as computed by sizeof. */
+#ifndef USED_FOR_TARGET
+#define SIZEOF_VOID_P 8
+#endif
+
+
+/* Define to 1 if you have the ANSI C header files. */
+#ifndef USED_FOR_TARGET
+#define STDC_HEADERS 1
+#endif
+
+
+/* Define if you can safely include both <string.h> and <strings.h>. */
+#ifndef USED_FOR_TARGET
+#define STRING_WITH_STRINGS 1
+#endif
+
+
+/* Define if TFmode long double should be the default */
+#ifndef USED_FOR_TARGET
+/* #undef TARGET_DEFAULT_LONG_DOUBLE_128 */
+#endif
+
+
+/* Define if your target C library provides the `dl_iterate_phdr' function. */
+/* #undef TARGET_DL_ITERATE_PHDR */
+
+/* GNU C Library major version number used on the target, or 0. */
+#ifndef USED_FOR_TARGET
+#define TARGET_GLIBC_MAJOR 0
+#endif
+
+
+/* GNU C Library minor version number used on the target, or 0. */
+#ifndef USED_FOR_TARGET
+#define TARGET_GLIBC_MINOR 0
+#endif
+
+
+/* Define if your target C Library provides the AT_HWCAP value in the TCB */
+#ifndef USED_FOR_TARGET
+/* #undef TARGET_LIBC_PROVIDES_HWCAP_IN_TCB */
+#endif
+
+
+/* Define if your target C library provides stack protector support */
+#ifndef USED_FOR_TARGET
+#define TARGET_LIBC_PROVIDES_SSP 1
+#endif
+
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#ifndef USED_FOR_TARGET
+#define TIME_WITH_SYS_TIME 1
+#endif
+
+
+/* Define to the flag used to mark TLS sections if the default (`T') doesn't
+   work. */
+#ifndef USED_FOR_TARGET
+/* #undef TLS_SECTION_ASM_FLAG */
+#endif
+
+
+/* Define if your assembler mis-optimizes .eh_frame data. */
+#ifndef USED_FOR_TARGET
+/* #undef USE_AS_TRADITIONAL_FORMAT */
+#endif
+
+
+/* Define if you want to generate code by default that assumes that the Cygwin
+   DLL exports wrappers to support libstdc++ function replacement. */
+#ifndef USED_FOR_TARGET
+/* #undef USE_CYGWIN_LIBSTDCXX_WRAPPERS */
+#endif
+
+
+/* Define 0/1 if your linker supports hidden thunks in linkonce sections. */
+#ifndef USED_FOR_TARGET
+/* #undef USE_HIDDEN_LINKONCE */
+#endif
+
+
+/* Define to 1 if the 'long long' type is wider than 'long' but still
+   efficiently supported by the host hardware. */
+#ifndef USED_FOR_TARGET
+/* #undef USE_LONG_LONG_FOR_WIDEST_FAST_INT */
+#endif
+
+
+/* Define if we should use leading underscore on 64 bit mingw targets */
+#ifndef USED_FOR_TARGET
+/* #undef USE_MINGW64_LEADING_UNDERSCORES */
+#endif
+
+
+/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# define _ALL_SOURCE 1
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# define _POSIX_PTHREAD_SEMANTICS 1
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# define _TANDEM_SOURCE 1
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# define __EXTENSIONS__ 1
+#endif
+
+
+/* Define to be the last component of the Windows registry key under which to
+   look for installation paths. The full key used will be
+   HKEY_LOCAL_MACHINE/SOFTWARE/Free Software Foundation/{WIN32_REGISTRY_KEY}.
+   The default is the GCC version number. */
+#ifndef USED_FOR_TARGET
+/* #undef WIN32_REGISTRY_KEY */
+#endif
+
+
+/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+   significant byte first (like Motorola and SPARC, unlike Intel). */
+#if defined AC_APPLE_UNIVERSAL_BUILD
+# if defined __BIG_ENDIAN__
+#  define WORDS_BIGENDIAN 1
+# endif
+#else
+# ifndef WORDS_BIGENDIAN
+/* #  undef WORDS_BIGENDIAN */
+# endif
+#endif
+
+/* Enable large inode numbers on Mac OS X 10.5.  */
+#ifndef _DARWIN_USE_64_BIT_INODE
+# define _DARWIN_USE_64_BIT_INODE 1
+#endif
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#ifndef USED_FOR_TARGET
+/* #undef _FILE_OFFSET_BITS */
+#endif
+
+
+/* Define for large files, on AIX-style hosts. */
+#ifndef USED_FOR_TARGET
+/* #undef _LARGE_FILES */
+#endif
+
+
+/* Define to 1 if on MINIX. */
+#ifndef USED_FOR_TARGET
+/* #undef _MINIX */
+#endif
+
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#ifndef USED_FOR_TARGET
+/* #undef _POSIX_1_SOURCE */
+#endif
+
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#ifndef USED_FOR_TARGET
+/* #undef _POSIX_SOURCE */
+#endif
+
+
+/* Define for Solaris 2.5.1 so the uint32_t typedef from <sys/synch.h>,
+   <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
+   #define below would cause a syntax error. */
+#ifndef USED_FOR_TARGET
+/* #undef _UINT32_T */
+#endif
+
+
+/* Define for Solaris 2.5.1 so the uint64_t typedef from <sys/synch.h>,
+   <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
+   #define below would cause a syntax error. */
+#ifndef USED_FOR_TARGET
+/* #undef _UINT64_T */
+#endif
+
+
+/* Define for Solaris 2.5.1 so the uint8_t typedef from <sys/synch.h>,
+   <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
+   #define below would cause a syntax error. */
+#ifndef USED_FOR_TARGET
+/* #undef _UINT8_T */
+#endif
+
+
+/* Define to `char *' if <sys/types.h> does not define. */
+#ifndef USED_FOR_TARGET
+/* #undef caddr_t */
+#endif
+
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+/* #undef inline */
+#endif
+
+/* Define to the type of a signed integer type of width exactly 16 bits if
+   such a type exists and the standard includes do not define it. */
+#ifndef USED_FOR_TARGET
+/* #undef int16_t */
+#endif
+
+
+/* Define to the type of a signed integer type of width exactly 32 bits if
+   such a type exists and the standard includes do not define it. */
+#ifndef USED_FOR_TARGET
+/* #undef int32_t */
+#endif
+
+
+/* Define to the type of a signed integer type of width exactly 64 bits if
+   such a type exists and the standard includes do not define it. */
+#ifndef USED_FOR_TARGET
+/* #undef int64_t */
+#endif
+
+
+/* Define to the type of a signed integer type of width exactly 8 bits if such
+   a type exists and the standard includes do not define it. */
+#ifndef USED_FOR_TARGET
+/* #undef int8_t */
+#endif
+
+
+/* Define to the widest signed integer type if <stdint.h> and <inttypes.h> do
+   not define. */
+#ifndef USED_FOR_TARGET
+/* #undef intmax_t */
+#endif
+
+
+/* Define to the type of a signed integer type wide enough to hold a pointer,
+   if such a type exists, and if the system does not define it. */
+#ifndef USED_FOR_TARGET
+/* #undef intptr_t */
+#endif
+
+
+/* Define to `int' if <sys/types.h> does not define. */
+#ifndef USED_FOR_TARGET
+/* #undef pid_t */
+#endif
+
+
+/* Define to `long' if <sys/resource.h> doesn't define. */
+#ifndef USED_FOR_TARGET
+/* #undef rlim_t */
+#endif
+
+
+/* Define to `int' if <sys/types.h> does not define. */
+#ifndef USED_FOR_TARGET
+/* #undef ssize_t */
+#endif
+
+
+/* Define to the type of an unsigned integer type of width exactly 16 bits if
+   such a type exists and the standard includes do not define it. */
+#ifndef USED_FOR_TARGET
+/* #undef uint16_t */
+#endif
+
+
+/* Define to the type of an unsigned integer type of width exactly 32 bits if
+   such a type exists and the standard includes do not define it. */
+#ifndef USED_FOR_TARGET
+/* #undef uint32_t */
+#endif
+
+
+/* Define to the type of an unsigned integer type of width exactly 64 bits if
+   such a type exists and the standard includes do not define it. */
+#ifndef USED_FOR_TARGET
+/* #undef uint64_t */
+#endif
+
+
+/* Define to the type of an unsigned integer type of width exactly 8 bits if
+   such a type exists and the standard includes do not define it. */
+#ifndef USED_FOR_TARGET
+/* #undef uint8_t */
+#endif
+
+
+/* Define to the widest unsigned integer type if <stdint.h> and <inttypes.h>
+   do not define. */
+#ifndef USED_FOR_TARGET
+/* #undef uintmax_t */
+#endif
+
+
+/* Define to the type of an unsigned integer type wide enough to hold a
+   pointer, if such a type exists, and if the system does not define it. */
+#ifndef USED_FOR_TARGET
+/* #undef uintptr_t */
+#endif
+
+
+/* Define as `fork' if `vfork' does not work. */
+#ifndef USED_FOR_TARGET
+/* #undef vfork */
+#endif
+
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/auto-profile.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/auto-profile.h
new file mode 100644
index 0000000..4668059
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/auto-profile.h
@@ -0,0 +1,31 @@
+/* auto-profile.h - Defines data exported from auto-profile.c
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Contributed by Dehao Chen (dehao@google.com)
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef AUTO_PROFILE_H
+#define AUTO_PROFILE_H
+
+/* Read, process, finalize AutoFDO data structures.  */
+extern void read_autofdo_file (void);
+extern void end_auto_profile (void);
+
+/* Returns TRUE if EDGE is hot enough to be inlined early.  */
+extern bool afdo_callsite_hot_enough_for_early_inline (struct cgraph_edge *);
+
+#endif /* AUTO_PROFILE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/b-header-vars b/lib/gcc/aarch64-elf/9.1.1/plugin/include/b-header-vars
new file mode 100644
index 0000000..707703e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/b-header-vars
@@ -0,0 +1,91 @@
+USER_H=tgmath.h
+HASHTAB_H=hashtab.h
+OBSTACK_H=obstack.h
+SPLAY_TREE_H=splay-tree.h
+XREGEX_H=xregex.h
+FNMATCH_H=fnmatch.h
+LINKER_PLUGIN_API_H=plugin-api.h
+BCONFIG_H=bconfig.h auto-host.h ansidecl.h
+CONFIG_H=config.h auto-host.h ansidecl.h
+TCONFIG_H=tconfig.h auto-host.h ansidecl.h
+TM_P_H=tm_p.h config/aarch64/aarch64-protos.h aarch-common-protos.h tm-preds.h
+TM_D_H=tm_d.h config/aarch64/aarch64.h defaults.h
+GTM_H=tm.h options.h config/aarch64/biarchlp64.h defaults.h insn-constants.h
+TM_H=tm.h options.h config/aarch64/biarchlp64.h aarch64-cores.def
+DUMPFILE_H=line-map.h dumpfile.h
+VEC_H=vec.h statistics.h ggc.h gtype-desc.h statistics.h
+HASH_TABLE_H=hashtab.h hash-table.h ggc.h gtype-desc.h statistics.h
+EXCEPT_H=except.h hashtab.h
+TARGET_H=tm.h options.h config/aarch64/biarchlp64.h aarch64-cores.def target.h target.def target-hooks-macros.h target-insns.def insn-modes.h insn-codes.h
+C_TARGET_H=c-family/c-target.h c-family/c-target.def target-hooks-macros.h
+COMMON_TARGET_H=common/common-target.h common-target.def target-hooks-macros.h
+D_TARGET_H=d/d-target.h d/d-target.def target-hooks-macros.h
+MACHMODE_H=machmode.h mode-classes.def
+HOOKS_H=hooks.h
+HOSTHOOKS_DEF_H=hosthooks-def.h hooks.h
+LANGHOOKS_DEF_H=langhooks-def.h hooks.h
+TARGET_DEF_H=target-def.h target-hooks-def.h hooks.h targhooks.h
+C_TARGET_DEF_H=c-family/c-target-def.h c-family/c-target-hooks-def.h tree.h tree-core.h coretypes.h insn-modes.h signop.h wide-int.h wide-int-print.h insn-modes-inline.h machmode.h mode-classes.def double-int.h all-tree.def tree.def c-family/c-common.def common-targhooks.h
+CORETYPES_H=coretypes.h insn-modes.h signop.h wide-int.h wide-int-print.h insn-modes-inline.h machmode.h mode-classes.def double-int.h
+RTL_BASE_H=coretypes.h insn-modes.h signop.h wide-int.h wide-int-print.h insn-modes-inline.h machmode.h mode-classes.def double-int.h rtl.h rtl.def reg-notes.def insn-notes.def hashtab.h
+FIXED_VALUE_H=fixed-value.h
+RTL_H=coretypes.h insn-modes.h signop.h wide-int.h wide-int-print.h insn-modes-inline.h machmode.h mode-classes.def double-int.h rtl.h rtl.def reg-notes.def insn-notes.def aarch64-tuning-flags.def genrtl.h
+READ_MD_H=hashtab.h read-md.h
+PARAMS_H=params.h params-enum.h params.def
+INTERNAL_FN_H=internal-fn.h internal-fn.def
+TREE_CORE_H=tree-core.h coretypes.h insn-modes.h signop.h wide-int.h wide-int-print.h insn-modes-inline.h machmode.h mode-classes.def double-int.h all-tree.def tree.def c-family/c-common.def aarch64-tuning-flags.def real.h fixed-value.h
+TREE_H=tree.h tree-core.h coretypes.h insn-modes.h signop.h wide-int.h wide-int-print.h insn-modes-inline.h machmode.h mode-classes.def double-int.h all-tree.def tree.def c-family/c-common.def aarch64-tuning-flags.def real.h fixed-value.h tree-check.h
+REGSET_H=regset.h bitmap.h hashtab.h statistics.h hard-reg-set.h
+BASIC_BLOCK_H=basic-block.h predict.h predict.def vec.h statistics.h ggc.h gtype-desc.h statistics.h function.h line-map.h input.h cfg-flags.def cfghooks.h profile-count.h
+GIMPLE_H=gimple.h gimple.def gsstruct.def vec.h statistics.h ggc.h gtype-desc.h statistics.h ggc.h gtype-desc.h statistics.h basic-block.h predict.h predict.def vec.h statistics.h ggc.h gtype-desc.h statistics.h function.h hashtab.h hash-table.h ggc.h gtype-desc.h statistics.h is-a.h
+GCOV_IO_H=gcov-io.h gcov-iov.h auto-host.h gcov-counter.def
+RECOG_H=recog.h
+EMIT_RTL_H=emit-rtl.h
+FLAGS_H=flags.h flag-types.h options.h flag-types.h config/aarch64/aarch64-opts.h aarch64-tuning-flags.def
+OPTIONS_H=options.h flag-types.h config/aarch64/aarch64-opts.h aarch64-tuning-flags.def
+FUNCTION_H=function.h line-map.h input.h
+EXPR_H=expr.h insn-config.h function.h aarch64-tuning-flags.def real.h fixed-value.h tree-check.h emit-rtl.h
+OPTABS_H=optabs.h insn-codes.h insn-opinit.h
+REGS_H=regs.h hard-reg-set.h
+CFGLOOP_H=cfgloop.h basic-block.h predict.h predict.def vec.h statistics.h ggc.h gtype-desc.h statistics.h function.h hashtab.h statistics.h sbitmap.h
+IPA_UTILS_H=ipa-utils.h tree.h tree-core.h coretypes.h insn-modes.h signop.h wide-int.h wide-int-print.h insn-modes-inline.h machmode.h mode-classes.def double-int.h all-tree.def tree.def c-family/c-common.def plugin-api.h is-a.h
+IPA_REFERENCE_H=ipa-reference.h bitmap.h aarch64-tuning-flags.def real.h fixed-value.h tree-check.h
+CGRAPH_H=cgraph.h vec.h statistics.h ggc.h gtype-desc.h statistics.h tree.h tree-core.h coretypes.h insn-modes.h signop.h wide-int.h wide-int-print.h insn-modes-inline.h machmode.h mode-classes.def double-int.h all-tree.def tree.def c-family/c-common.def plugin-api.h is-a.h
+DF_H=df.h bitmap.h line-map.h input.h cfg-flags.def cfghooks.h profile-count.h alloc-pool.h timevar.h timevar.def
+RESOURCE_H=resource.h hard-reg-set.h df.h bitmap.h line-map.h input.h cfg-flags.def cfghooks.h profile-count.h alloc-pool.h timevar.h timevar.def
+GCC_H=gcc.h version.h diagnostic-core.h line-map.h input.h bversion.h diagnostic.def
+GGC_H=ggc.h gtype-desc.h statistics.h
+TIMEVAR_H=timevar.h timevar.def
+INSN_ATTR_H=insn-attr.h insn-attr-common.h insn-addr.h
+INSN_ADDR_H=insn-addr.h
+C_COMMON_H=c-family/c-common.h c-family/c-common.def tree.h tree-core.h coretypes.h insn-modes.h signop.h wide-int.h wide-int-print.h insn-modes-inline.h machmode.h mode-classes.def double-int.h all-tree.def tree.def c-family/c-common.def line-map.h input.h bversion.h diagnostic.def
+C_PRAGMA_H=c-family/c-pragma.h cpplib.h
+C_TREE_H=c/c-tree.h c-family/c-common.h c-family/c-common.def tree.h tree-core.h coretypes.h insn-modes.h signop.h wide-int.h wide-int-print.h insn-modes-inline.h machmode.h mode-classes.def double-int.h all-tree.def tree.def c-family/c-common.def obstack.h wide-int-print.h
+SYSTEM_H=system.h hwint.h filenames.h
+PREDICT_H=predict.h predict.def
+CPPLIB_H=cpplib.h
+INPUT_H=line-map.h input.h
+OPTS_H=obstack.h
+SYMTAB_H=obstack.h
+CPP_INTERNAL_H=internal.h
+TREE_DUMP_H=tree-dump.h line-map.h dumpfile.h
+TREE_PASS_H=tree-pass.h timevar.h timevar.def line-map.h dumpfile.h
+TREE_SSA_H=tree-ssa.h tree-ssa-operands.h bitmap.h aarch64-tuning-flags.def real.h fixed-value.h tree-check.h tree-ssa-alias.h
+PRETTY_PRINT_H=pretty-print.h obstack.h wide-int-print.h
+TREE_PRETTY_PRINT_H=tree-pretty-print.h pretty-print.h obstack.h wide-int-print.h
+GIMPLE_PRETTY_PRINT_H=gimple-pretty-print.h tree-pretty-print.h pretty-print.h obstack.h wide-int-print.h
+DIAGNOSTIC_CORE_H=diagnostic-core.h line-map.h input.h bversion.h diagnostic.def
+DIAGNOSTIC_H=diagnostic.h diagnostic-core.h obstack.h wide-int-print.h
+C_PRETTY_PRINT_H=c-family/c-pretty-print.h pretty-print.h aarch64-tuning-flags.def real.h fixed-value.h tree-check.h
+TREE_INLINE_H=tree-inline.h
+REAL_H=real.h
+LTO_STREAMER_H=lto-streamer.h obstack.h wide-int-print.h alloc-pool.h
+IPA_PROP_H=ipa-prop.h tree.h tree-core.h coretypes.h insn-modes.h signop.h wide-int.h wide-int-print.h insn-modes-inline.h machmode.h mode-classes.def double-int.h all-tree.def tree.def c-family/c-common.def hashtab.h hash-table.h ggc.h gtype-desc.h statistics.h is-a.h alloc-pool.h
+BITMAP_H=bitmap.h hashtab.h statistics.h
+GCC_PLUGIN_H=gcc-plugin.h highlev-plugin-common.h plugin.def config.h auto-host.h hashtab.h
+PLUGIN_H=plugin.h gcc-plugin.h highlev-plugin-common.h plugin.def config.h auto-host.h hashtab.h
+PLUGIN_VERSION_H=plugin-version.h configargs.h
+CONTEXT_H=context.h
+GENSUPPORT_H=gensupport.h read-md.h optabs.def
+GTFILES_H=gt-coverage.h gt-caller-save.h gt-symtab.h gt-alias.h gt-bitmap.h gt-cselib.h gt-cgraph.h gt-ipa-prop.h gt-ipa-cp.h gt-dbxout.h gt-dwarf2asm.h gt-dwarf2cfi.h gt-dwarf2out.h gt-tree-vect-generic.h gt-dojump.h gt-emit-rtl.h gt-explow.h gt-expr.h gt-function.h gt-except.h gt-ggc-tests.h gt-gcse.h gt-godump.h gt-lists.h gt-optabs-libfuncs.h gt-profile.h gt-mcf.h gt-reg-stack.h gt-cfgrtl.h gt-stor-layout.h gt-stringpool.h gt-tree.h gt-varasm.h gt-tree-ssanames.h gt-tree-eh.h gt-tree-ssa-address.h gt-tree-cfg.h gt-tree-ssa-loop-ivopts.h gt-tree-dfa.h gt-tree-iterator.h gt-gimple-expr.h gt-tree-scalar-evolution.h gt-tree-profile.h gt-tree-nested.h gt-omp-offload.h gt-omp-expand.h gt-omp-low.h gt-targhooks.h gt-aarch64.h gt-passes.h gt-cgraphunit.h gt-cgraphclones.h gt-tree-phinodes.h gt-trans-mem.h gt-vtable-verify.h gt-asan.h gt-ubsan.h gt-tsan.h gt-sanopt.h gt-sancov.h gt-ipa-devirt.h gt-hsa-common.h gt-calls.h gt-aarch64-builtins.h gt-ada-decl.h gt-ada-trans.h gt-ada-utils.h gt-ada-misc.h gt-brig-brig-lang.h gt-c-c-lang.h gt-c-c-decl.h gt-c-family-c-common.h gt-c-family-c-cppbuiltin.h gt-c-family-c-pragma.h gt-c-family-c-format.h gt-c-c-objc-common.h gt-c-c-parser.h gt-c-family-c-common.h gt-c-family-c-format.h gt-c-family-c-lex.h gt-c-family-c-pragma.h gt-cp-call.h gt-cp-class.h gt-cp-constexpr.h gt-cp-cp-gimplify.h gt-cp-cp-lang.h gt-cp-cp-objcp-common.h gt-cp-decl.h gt-cp-decl2.h gt-cp-except.h gt-cp-friend.h gt-cp-init.h gt-cp-lambda.h gt-cp-lex.h gt-cp-mangle.h gt-cp-method.h gt-cp-name-lookup.h gt-cp-parser.h gt-cp-pt.h gt-cp-repo.h gt-cp-rtti.h gt-cp-semantics.h gt-cp-tree.h gt-cp-typeck2.h gt-cp-vtable-class-hierarchy.h gt-fortran-f95-lang.h gt-fortran-trans-decl.h gt-fortran-trans-intrinsic.h gt-fortran-trans-io.h gt-fortran-trans-stmt.h gt-fortran-trans-types.h gt-go-go-lang.h gt-jit-dummy-frontend.h gt-lto-lto-lang.h gt-lto-lto.h gt-objc-objc-act.h gt-objc-objc-runtime-shared-support.h gt-objc-objc-gnu-runtime-abi-01.h gt-objc-objc-next-runtime-abi-01.h gt-objc-objc-next-runtime-abi-02.h gt-c-c-parser.h gt-c-c-decl.h gt-c-c-objc-common.h gt-c-family-c-common.h gt-c-family-c-cppbuiltin.h gt-c-family-c-pragma.h gt-c-family-c-common.h gt-c-family-c-format.h gt-c-family-c-lex.h gt-c-family-c-pragma.h gt-cp-call.h gt-cp-class.h gt-cp-constexpr.h gt-cp-cp-gimplify.h gt-objcp-objcp-lang.h gt-cp-cp-objcp-common.h gt-cp-decl.h gt-cp-decl2.h gt-cp-except.h gt-cp-friend.h gt-cp-init.h gt-cp-lambda.h gt-cp-lex.h gt-cp-mangle.h gt-cp-method.h gt-cp-name-lookup.h gt-cp-parser.h gt-cp-pt.h gt-cp-repo.h gt-cp-rtti.h gt-cp-semantics.h gt-cp-tree.h gt-cp-typeck2.h gt-cp-vtable-class-hierarchy.h gt-c-family-c-cppbuiltin.h gt-objc-objc-act.h gt-objc-objc-gnu-runtime-abi-01.h gt-objc-objc-next-runtime-abi-01.h gt-objc-objc-next-runtime-abi-02.h gt-objc-objc-runtime-shared-support.h
+GTFILES_LANG_H=gtype-ada.h gtype-brig.h gtype-c.h gtype-cp.h gtype-d.h gtype-fortran.h gtype-go.h gtype-jit.h gtype-lto.h gtype-objc.h gtype-objcp.h
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/backend.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/backend.h
new file mode 100644
index 0000000..6aaf1e6
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/backend.h
@@ -0,0 +1,35 @@
+/* Common Backend requirements. 
+
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+   Contributed by Andrew MacLeod <amacleod@redhat.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_BACKEND_H
+#define GCC_BACKEND_H
+
+/* This is an aggregation header file. This means it should contain only
+   other include files.  */
+
+#include "tm.h"
+#include "function.h"
+#include "bitmap.h"
+#include "sbitmap.h"
+#include "basic-block.h"
+#include "cfg.h"
+
+#endif /*GCC_BACKEND_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/basic-block.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/basic-block.h
new file mode 100644
index 0000000..fba5526
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/basic-block.h
@@ -0,0 +1,647 @@
+/* Define control flow data structures for the CFG.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_BASIC_BLOCK_H
+#define GCC_BASIC_BLOCK_H
+
+#include <profile-count.h>
+
+/* Control flow edge information.  */
+struct GTY((user)) edge_def {
+  /* The two blocks at the ends of the edge.  */
+  basic_block src;
+  basic_block dest;
+
+  /* Instructions queued on the edge.  */
+  union edge_def_insns {
+    gimple_seq g;
+    rtx_insn *r;
+  } insns;
+
+  /* Auxiliary info specific to a pass.  */
+  PTR aux;
+
+  /* Location of any goto implicit in the edge.  */
+  location_t goto_locus;
+
+  /* The index number corresponding to this edge in the edge vector
+     dest->preds.  */
+  unsigned int dest_idx;
+
+  int flags;			/* see cfg-flags.def */
+  profile_probability probability;
+
+  /* Return count of edge E.  */
+  inline profile_count count () const;
+};
+
+/* Masks for edge.flags.  */
+#define DEF_EDGE_FLAG(NAME,IDX) EDGE_##NAME = 1 << IDX ,
+enum cfg_edge_flags {
+#include "cfg-flags.def"
+  LAST_CFG_EDGE_FLAG		/* this is only used for EDGE_ALL_FLAGS */
+};
+#undef DEF_EDGE_FLAG
+
+/* Bit mask for all edge flags.  */
+#define EDGE_ALL_FLAGS		((LAST_CFG_EDGE_FLAG - 1) * 2 - 1)
+
+/* The following four flags all indicate something special about an edge.
+   Test the edge flags on EDGE_COMPLEX to detect all forms of "strange"
+   control flow transfers.  */
+#define EDGE_COMPLEX \
+  (EDGE_ABNORMAL | EDGE_ABNORMAL_CALL | EDGE_EH | EDGE_PRESERVE)
+
+struct GTY(()) rtl_bb_info {
+  /* The first insn of the block is embedded into bb->il.x.  */
+  /* The last insn of the block.  */
+  rtx_insn *end_;
+
+  /* In CFGlayout mode points to insn notes/jumptables to be placed just before
+     and after the block.   */
+  rtx_insn *header_;
+  rtx_insn *footer_;
+};
+
+struct GTY(()) gimple_bb_info {
+  /* Sequence of statements in this block.  */
+  gimple_seq seq;
+
+  /* PHI nodes for this block.  */
+  gimple_seq phi_nodes;
+};
+
+/* A basic block is a sequence of instructions with only one entry and
+   only one exit.  If any one of the instructions are executed, they
+   will all be executed, and in sequence from first to last.
+
+   There may be COND_EXEC instructions in the basic block.  The
+   COND_EXEC *instructions* will be executed -- but if the condition
+   is false the conditionally executed *expressions* will of course
+   not be executed.  We don't consider the conditionally executed
+   expression (which might have side-effects) to be in a separate
+   basic block because the program counter will always be at the same
+   location after the COND_EXEC instruction, regardless of whether the
+   condition is true or not.
+
+   Basic blocks need not start with a label nor end with a jump insn.
+   For example, a previous basic block may just "conditionally fall"
+   into the succeeding basic block, and the last basic block need not
+   end with a jump insn.  Block 0 is a descendant of the entry block.
+
+   A basic block beginning with two labels cannot have notes between
+   the labels.
+
+   Data for jump tables are stored in jump_insns that occur in no
+   basic block even though these insns can follow or precede insns in
+   basic blocks.  */
+
+/* Basic block information indexed by block number.  */
+struct GTY((chain_next ("%h.next_bb"), chain_prev ("%h.prev_bb"))) basic_block_def {
+  /* The edges into and out of the block.  */
+  vec<edge, va_gc> *preds;
+  vec<edge, va_gc> *succs;
+
+  /* Auxiliary info specific to a pass.  */
+  PTR GTY ((skip (""))) aux;
+
+  /* Innermost loop containing the block.  */
+  struct loop *loop_father;
+
+  /* The dominance and postdominance information node.  */
+  struct et_node * GTY ((skip (""))) dom[2];
+
+  /* Previous and next blocks in the chain.  */
+  basic_block prev_bb;
+  basic_block next_bb;
+
+  union basic_block_il_dependent {
+      struct gimple_bb_info GTY ((tag ("0"))) gimple;
+      struct {
+        rtx_insn *head_;
+        struct rtl_bb_info * rtl;
+      } GTY ((tag ("1"))) x;
+    } GTY ((desc ("((%1.flags & BB_RTL) != 0)"))) il;
+
+  /* Various flags.  See cfg-flags.def.  */
+  int flags;
+
+  /* The index of this block.  */
+  int index;
+
+  /* Expected number of executions: calculated in profile.c.  */
+  profile_count count;
+
+  /* The discriminator for this block.  The discriminator distinguishes
+     among several basic blocks that share a common locus, allowing for
+     more accurate sample-based profiling.  */
+  int discriminator;
+};
+
+/* This ensures that struct gimple_bb_info is smaller than
+   struct rtl_bb_info, so that inlining the former into basic_block_def
+   is the better choice.  */
+typedef int __assert_gimple_bb_smaller_rtl_bb
+              [(int) sizeof (struct rtl_bb_info)
+               - (int) sizeof (struct gimple_bb_info)];
+
+
+#define BB_FREQ_MAX 10000
+
+/* Masks for basic_block.flags.  */
+#define DEF_BASIC_BLOCK_FLAG(NAME,IDX) BB_##NAME = 1 << IDX ,
+enum cfg_bb_flags
+{
+#include "cfg-flags.def"
+  LAST_CFG_BB_FLAG		/* this is only used for BB_ALL_FLAGS */
+};
+#undef DEF_BASIC_BLOCK_FLAG
+
+/* Bit mask for all basic block flags.  */
+#define BB_ALL_FLAGS		((LAST_CFG_BB_FLAG - 1) * 2 - 1)
+
+/* Bit mask for all basic block flags that must be preserved.  These are
+   the bit masks that are *not* cleared by clear_bb_flags.  */
+#define BB_FLAGS_TO_PRESERVE					\
+  (BB_DISABLE_SCHEDULE | BB_RTL | BB_NON_LOCAL_GOTO_TARGET	\
+   | BB_HOT_PARTITION | BB_COLD_PARTITION)
+
+/* Dummy bitmask for convenience in the hot/cold partitioning code.  */
+#define BB_UNPARTITIONED	0
+
+/* Partitions, to be used when partitioning hot and cold basic blocks into
+   separate sections.  */
+#define BB_PARTITION(bb) ((bb)->flags & (BB_HOT_PARTITION|BB_COLD_PARTITION))
+#define BB_SET_PARTITION(bb, part) do {					\
+  basic_block bb_ = (bb);						\
+  bb_->flags = ((bb_->flags & ~(BB_HOT_PARTITION|BB_COLD_PARTITION))	\
+		| (part));						\
+} while (0)
+
+#define BB_COPY_PARTITION(dstbb, srcbb) \
+  BB_SET_PARTITION (dstbb, BB_PARTITION (srcbb))
+
+/* Defines for accessing the fields of the CFG structure for function FN.  */
+#define ENTRY_BLOCK_PTR_FOR_FN(FN)	     ((FN)->cfg->x_entry_block_ptr)
+#define EXIT_BLOCK_PTR_FOR_FN(FN)	     ((FN)->cfg->x_exit_block_ptr)
+#define basic_block_info_for_fn(FN)	     ((FN)->cfg->x_basic_block_info)
+#define n_basic_blocks_for_fn(FN)	     ((FN)->cfg->x_n_basic_blocks)
+#define n_edges_for_fn(FN)		     ((FN)->cfg->x_n_edges)
+#define last_basic_block_for_fn(FN)	     ((FN)->cfg->x_last_basic_block)
+#define label_to_block_map_for_fn(FN)	     ((FN)->cfg->x_label_to_block_map)
+#define profile_status_for_fn(FN)	     ((FN)->cfg->x_profile_status)
+
+#define BASIC_BLOCK_FOR_FN(FN,N) \
+  ((*basic_block_info_for_fn (FN))[(N)])
+#define SET_BASIC_BLOCK_FOR_FN(FN,N,BB) \
+  ((*basic_block_info_for_fn (FN))[(N)] = (BB))
+
+/* For iterating over basic blocks.  */
+#define FOR_BB_BETWEEN(BB, FROM, TO, DIR) \
+  for (BB = FROM; BB != TO; BB = BB->DIR)
+
+#define FOR_EACH_BB_FN(BB, FN) \
+  FOR_BB_BETWEEN (BB, (FN)->cfg->x_entry_block_ptr->next_bb, (FN)->cfg->x_exit_block_ptr, next_bb)
+
+#define FOR_EACH_BB_REVERSE_FN(BB, FN) \
+  FOR_BB_BETWEEN (BB, (FN)->cfg->x_exit_block_ptr->prev_bb, (FN)->cfg->x_entry_block_ptr, prev_bb)
+
+/* For iterating over insns in basic block.  */
+#define FOR_BB_INSNS(BB, INSN)			\
+  for ((INSN) = BB_HEAD (BB);			\
+       (INSN) && (INSN) != NEXT_INSN (BB_END (BB));	\
+       (INSN) = NEXT_INSN (INSN))
+
+/* For iterating over insns in basic block when we might remove the
+   current insn.  */
+#define FOR_BB_INSNS_SAFE(BB, INSN, CURR)			\
+  for ((INSN) = BB_HEAD (BB), (CURR) = (INSN) ? NEXT_INSN ((INSN)): NULL;	\
+       (INSN) && (INSN) != NEXT_INSN (BB_END (BB));	\
+       (INSN) = (CURR), (CURR) = (INSN) ? NEXT_INSN ((INSN)) : NULL)
+
+#define FOR_BB_INSNS_REVERSE(BB, INSN)		\
+  for ((INSN) = BB_END (BB);			\
+       (INSN) && (INSN) != PREV_INSN (BB_HEAD (BB));	\
+       (INSN) = PREV_INSN (INSN))
+
+#define FOR_BB_INSNS_REVERSE_SAFE(BB, INSN, CURR)	\
+  for ((INSN) = BB_END (BB),(CURR) = (INSN) ? PREV_INSN ((INSN)) : NULL;	\
+       (INSN) && (INSN) != PREV_INSN (BB_HEAD (BB));	\
+       (INSN) = (CURR), (CURR) = (INSN) ? PREV_INSN ((INSN)) : NULL)
+
+/* Cycles through _all_ basic blocks, even the fake ones (entry and
+   exit block).  */
+
+#define FOR_ALL_BB_FN(BB, FN) \
+  for (BB = ENTRY_BLOCK_PTR_FOR_FN (FN); BB; BB = BB->next_bb)
+
+
+/* Stuff for recording basic block info.  */
+
+/* For now, these will be functions (so that they can include checked casts
+   to rtx_insn.   Once the underlying fields are converted from rtx
+   to rtx_insn, these can be converted back to macros.  */
+
+#define BB_HEAD(B)      (B)->il.x.head_
+#define BB_END(B)       (B)->il.x.rtl->end_
+#define BB_HEADER(B)    (B)->il.x.rtl->header_
+#define BB_FOOTER(B)    (B)->il.x.rtl->footer_
+
+/* Special block numbers [markers] for entry and exit.
+   Neither of them is supposed to hold actual statements.  */
+#define ENTRY_BLOCK (0)
+#define EXIT_BLOCK (1)
+
+/* The two blocks that are always in the cfg.  */
+#define NUM_FIXED_BLOCKS (2)
+
+/* This is the value which indicates no edge is present.  */
+#define EDGE_INDEX_NO_EDGE	-1
+
+/* EDGE_INDEX returns an integer index for an edge, or EDGE_INDEX_NO_EDGE
+   if there is no edge between the 2 basic blocks.  */
+#define EDGE_INDEX(el, pred, succ) (find_edge_index ((el), (pred), (succ)))
+
+/* INDEX_EDGE_PRED_BB and INDEX_EDGE_SUCC_BB return a pointer to the basic
+   block which is either the pred or succ end of the indexed edge.  */
+#define INDEX_EDGE_PRED_BB(el, index)	((el)->index_to_edge[(index)]->src)
+#define INDEX_EDGE_SUCC_BB(el, index)	((el)->index_to_edge[(index)]->dest)
+
+/* INDEX_EDGE returns a pointer to the edge.  */
+#define INDEX_EDGE(el, index)           ((el)->index_to_edge[(index)])
+
+/* Number of edges in the compressed edge list.  */
+#define NUM_EDGES(el)			((el)->num_edges)
+
+/* BB is assumed to contain conditional jump.  Return the fallthru edge.  */
+#define FALLTHRU_EDGE(bb)		(EDGE_SUCC ((bb), 0)->flags & EDGE_FALLTHRU \
+					 ? EDGE_SUCC ((bb), 0) : EDGE_SUCC ((bb), 1))
+
+/* BB is assumed to contain conditional jump.  Return the branch edge.  */
+#define BRANCH_EDGE(bb)			(EDGE_SUCC ((bb), 0)->flags & EDGE_FALLTHRU \
+					 ? EDGE_SUCC ((bb), 1) : EDGE_SUCC ((bb), 0))
+
+/* Return expected execution frequency of the edge E.  */
+#define EDGE_FREQUENCY(e)		e->count ().to_frequency (cfun)
+
+/* Compute a scale factor (or probability) suitable for scaling of
+   gcov_type values via apply_probability() and apply_scale().  */
+#define GCOV_COMPUTE_SCALE(num,den) \
+  ((den) ? RDIV ((num) * REG_BR_PROB_BASE, (den)) : REG_BR_PROB_BASE)
+
+/* Return nonzero if edge is critical.  */
+#define EDGE_CRITICAL_P(e)		(EDGE_COUNT ((e)->src->succs) >= 2 \
+					 && EDGE_COUNT ((e)->dest->preds) >= 2)
+
+#define EDGE_COUNT(ev)			vec_safe_length (ev)
+#define EDGE_I(ev,i)			(*ev)[(i)]
+#define EDGE_PRED(bb,i)			(*(bb)->preds)[(i)]
+#define EDGE_SUCC(bb,i)			(*(bb)->succs)[(i)]
+
+/* Returns true if BB has precisely one successor.  */
+
+static inline bool
+single_succ_p (const_basic_block bb)
+{
+  return EDGE_COUNT (bb->succs) == 1;
+}
+
+/* Returns true if BB has precisely one predecessor.  */
+
+static inline bool
+single_pred_p (const_basic_block bb)
+{
+  return EDGE_COUNT (bb->preds) == 1;
+}
+
+/* Returns the single successor edge of basic block BB.  Aborts if
+   BB does not have exactly one successor.  */
+
+static inline edge
+single_succ_edge (const_basic_block bb)
+{
+  gcc_checking_assert (single_succ_p (bb));
+  return EDGE_SUCC (bb, 0);
+}
+
+/* Returns the single predecessor edge of basic block BB.  Aborts
+   if BB does not have exactly one predecessor.  */
+
+static inline edge
+single_pred_edge (const_basic_block bb)
+{
+  gcc_checking_assert (single_pred_p (bb));
+  return EDGE_PRED (bb, 0);
+}
+
+/* Returns the single successor block of basic block BB.  Aborts
+   if BB does not have exactly one successor.  */
+
+static inline basic_block
+single_succ (const_basic_block bb)
+{
+  return single_succ_edge (bb)->dest;
+}
+
+/* Returns the single predecessor block of basic block BB.  Aborts
+   if BB does not have exactly one predecessor.*/
+
+static inline basic_block
+single_pred (const_basic_block bb)
+{
+  return single_pred_edge (bb)->src;
+}
+
+/* Iterator object for edges.  */
+
+struct edge_iterator {
+  unsigned index;
+  vec<edge, va_gc> **container;
+};
+
+static inline vec<edge, va_gc> *
+ei_container (edge_iterator i)
+{
+  gcc_checking_assert (i.container);
+  return *i.container;
+}
+
+#define ei_start(iter) ei_start_1 (&(iter))
+#define ei_last(iter) ei_last_1 (&(iter))
+
+/* Return an iterator pointing to the start of an edge vector.  */
+static inline edge_iterator
+ei_start_1 (vec<edge, va_gc> **ev)
+{
+  edge_iterator i;
+
+  i.index = 0;
+  i.container = ev;
+
+  return i;
+}
+
+/* Return an iterator pointing to the last element of an edge
+   vector.  */
+static inline edge_iterator
+ei_last_1 (vec<edge, va_gc> **ev)
+{
+  edge_iterator i;
+
+  i.index = EDGE_COUNT (*ev) - 1;
+  i.container = ev;
+
+  return i;
+}
+
+/* Is the iterator `i' at the end of the sequence?  */
+static inline bool
+ei_end_p (edge_iterator i)
+{
+  return (i.index == EDGE_COUNT (ei_container (i)));
+}
+
+/* Is the iterator `i' at one position before the end of the
+   sequence?  */
+static inline bool
+ei_one_before_end_p (edge_iterator i)
+{
+  return (i.index + 1 == EDGE_COUNT (ei_container (i)));
+}
+
+/* Advance the iterator to the next element.  */
+static inline void
+ei_next (edge_iterator *i)
+{
+  gcc_checking_assert (i->index < EDGE_COUNT (ei_container (*i)));
+  i->index++;
+}
+
+/* Move the iterator to the previous element.  */
+static inline void
+ei_prev (edge_iterator *i)
+{
+  gcc_checking_assert (i->index > 0);
+  i->index--;
+}
+
+/* Return the edge pointed to by the iterator `i'.  */
+static inline edge
+ei_edge (edge_iterator i)
+{
+  return EDGE_I (ei_container (i), i.index);
+}
+
+/* Return an edge pointed to by the iterator.  Do it safely so that
+   NULL is returned when the iterator is pointing at the end of the
+   sequence.  */
+static inline edge
+ei_safe_edge (edge_iterator i)
+{
+  return !ei_end_p (i) ? ei_edge (i) : NULL;
+}
+
+/* Return 1 if we should continue to iterate.  Return 0 otherwise.
+   *Edge P is set to the next edge if we are to continue to iterate
+   and NULL otherwise.  */
+
+static inline bool
+ei_cond (edge_iterator ei, edge *p)
+{
+  if (!ei_end_p (ei))
+    {
+      *p = ei_edge (ei);
+      return 1;
+    }
+  else
+    {
+      *p = NULL;
+      return 0;
+    }
+}
+
+/* This macro serves as a convenient way to iterate each edge in a
+   vector of predecessor or successor edges.  It must not be used when
+   an element might be removed during the traversal, otherwise
+   elements will be missed.  Instead, use a for-loop like that shown
+   in the following pseudo-code:
+
+   FOR (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); )
+     {
+	IF (e != taken_edge)
+	  remove_edge (e);
+	ELSE
+	  ei_next (&ei);
+     }
+*/
+
+#define FOR_EACH_EDGE(EDGE,ITER,EDGE_VEC)	\
+  for ((ITER) = ei_start ((EDGE_VEC));		\
+       ei_cond ((ITER), &(EDGE));		\
+       ei_next (&(ITER)))
+
+#define CLEANUP_EXPENSIVE	1	/* Do relatively expensive optimizations
+					   except for edge forwarding */
+#define CLEANUP_CROSSJUMP	2	/* Do crossjumping.  */
+#define CLEANUP_POST_REGSTACK	4	/* We run after reg-stack and need
+					   to care REG_DEAD notes.  */
+#define CLEANUP_THREADING	8	/* Do jump threading.  */
+#define CLEANUP_NO_INSN_DEL	16	/* Do not try to delete trivially dead
+					   insns.  */
+#define CLEANUP_CFGLAYOUT	32	/* Do cleanup in cfglayout mode.  */
+#define CLEANUP_CFG_CHANGED	64      /* The caller changed the CFG.  */
+#define CLEANUP_NO_PARTITIONING	128     /* Do not try to fix partitions.  */
+
+/* Return true if BB is in a transaction.  */
+
+static inline bool
+bb_in_transaction (basic_block bb)
+{
+  return bb->flags & BB_IN_TRANSACTION;
+}
+
+/* Return true when one of the predecessor edges of BB is marked with EDGE_EH.  */
+static inline bool
+bb_has_eh_pred (basic_block bb)
+{
+  edge e;
+  edge_iterator ei;
+
+  FOR_EACH_EDGE (e, ei, bb->preds)
+    {
+      if (e->flags & EDGE_EH)
+	return true;
+    }
+  return false;
+}
+
+/* Return true when one of the predecessor edges of BB is marked with EDGE_ABNORMAL.  */
+static inline bool
+bb_has_abnormal_pred (basic_block bb)
+{
+  edge e;
+  edge_iterator ei;
+
+  FOR_EACH_EDGE (e, ei, bb->preds)
+    {
+      if (e->flags & EDGE_ABNORMAL)
+	return true;
+    }
+  return false;
+}
+
+/* Return the fallthru edge in EDGES if it exists, NULL otherwise.  */
+static inline edge
+find_fallthru_edge (vec<edge, va_gc> *edges)
+{
+  edge e;
+  edge_iterator ei;
+
+  FOR_EACH_EDGE (e, ei, edges)
+    if (e->flags & EDGE_FALLTHRU)
+      break;
+
+  return e;
+}
+
+/* Check tha probability is sane.  */
+
+static inline void
+check_probability (int prob)
+{
+  gcc_checking_assert (prob >= 0 && prob <= REG_BR_PROB_BASE);
+}
+
+/* Given PROB1 and PROB2, return PROB1*PROB2/REG_BR_PROB_BASE. 
+   Used to combine BB probabilities.  */
+
+static inline int
+combine_probabilities (int prob1, int prob2)
+{
+  check_probability (prob1);
+  check_probability (prob2);
+  return RDIV (prob1 * prob2, REG_BR_PROB_BASE);
+}
+
+/* Apply scale factor SCALE on frequency or count FREQ. Use this
+   interface when potentially scaling up, so that SCALE is not
+   constrained to be < REG_BR_PROB_BASE.  */
+
+static inline gcov_type
+apply_scale (gcov_type freq, gcov_type scale)
+{
+  return RDIV (freq * scale, REG_BR_PROB_BASE);
+}
+
+/* Apply probability PROB on frequency or count FREQ.  */
+
+static inline gcov_type
+apply_probability (gcov_type freq, int prob)
+{
+  check_probability (prob);
+  return apply_scale (freq, prob);
+}
+
+/* Return inverse probability for PROB.  */
+
+static inline int
+inverse_probability (int prob1)
+{
+  check_probability (prob1);
+  return REG_BR_PROB_BASE - prob1;
+}
+
+/* Return true if BB has at least one abnormal outgoing edge.  */
+
+static inline bool
+has_abnormal_or_eh_outgoing_edge_p (basic_block bb)
+{
+  edge e;
+  edge_iterator ei;
+
+  FOR_EACH_EDGE (e, ei, bb->succs)
+    if (e->flags & (EDGE_ABNORMAL | EDGE_EH))
+      return true;
+
+  return false;
+}
+
+/* Return true when one of the predecessor edges of BB is marked with
+   EDGE_ABNORMAL_CALL or EDGE_EH.  */
+
+static inline bool
+has_abnormal_call_or_eh_pred_edge_p (basic_block bb)
+{
+  edge e;
+  edge_iterator ei;
+
+  FOR_EACH_EDGE (e, ei, bb->preds)
+    if (e->flags & (EDGE_ABNORMAL_CALL | EDGE_EH))
+      return true;
+
+  return false;
+}
+
+/* Return count of edge E.  */
+inline profile_count edge_def::count () const
+{
+  return src->count.apply_probability (probability);
+}
+
+#endif /* GCC_BASIC_BLOCK_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/bb-reorder.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/bb-reorder.h
new file mode 100644
index 0000000..3948bc8
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/bb-reorder.h
@@ -0,0 +1,40 @@
+/* Basic block reordering routines for the GNU compiler.
+   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_BB_REORDER
+#define GCC_BB_REORDER
+
+/* Target-specific globals.  */
+struct target_bb_reorder {
+  /* Length of unconditional jump instruction.  */
+  int x_uncond_jump_length;
+};
+
+extern struct target_bb_reorder default_target_bb_reorder;
+#if SWITCHABLE_TARGET
+extern struct target_bb_reorder *this_target_bb_reorder;
+#else
+#define this_target_bb_reorder (&default_target_bb_reorder)
+#endif
+
+extern int get_uncond_jump_length (void);
+
+extern void insert_section_boundary_note (void);
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/bitmap.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/bitmap.h
new file mode 100644
index 0000000..ed25c1e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/bitmap.h
@@ -0,0 +1,940 @@
+/* Functions to support general ended bitmaps.
+   Copyright (C) 1997-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_BITMAP_H
+#define GCC_BITMAP_H
+
+/* Implementation of sparse integer sets as a linked list or tree.
+
+   This sparse set representation is suitable for sparse sets with an
+   unknown (a priori) universe.
+
+   Sets are represented as double-linked lists of container nodes of
+   type "struct bitmap_element" or as a binary trees of the same
+   container nodes.  Each container node consists of an index for the
+   first member that could be held in the container, a small array of
+   integers that represent the members in the container, and pointers
+   to the next and previous element in the linked list, or left and
+   right children in the tree.  In linked-list form, the container
+   nodes in the list are sorted in ascending order, i.e. the head of
+   the list holds the element with the smallest member of the set.
+   In tree form, nodes to the left have a smaller container index.
+
+   For a given member I in the set:
+     - the element for I will have index is I / (bits per element)
+     - the position for I within element is I % (bits per element)
+
+   This representation is very space-efficient for large sparse sets, and
+   the size of the set can be changed dynamically without much overhead.
+   An important parameter is the number of bits per element.  In this
+   implementation, there are 128 bits per element.  This results in a
+   high storage overhead *per element*, but a small overall overhead if
+   the set is very sparse.
+
+   The storage requirements for linked-list sparse sets are O(E), with E->N
+   in the worst case (a sparse set with large distances between the values
+   of the set members).
+
+   This representation also works well for data flow problems where the size
+   of the set may grow dynamically, but care must be taken that the member_p,
+   add_member, and remove_member operations occur with a suitable access
+   pattern.
+
+   The linked-list set representation works well for problems involving very
+   sparse sets.  The canonical example in GCC is, of course, the "set of
+   sets" for some CFG-based data flow problems (liveness analysis, dominance
+   frontiers, etc.).
+   
+   For random-access sparse sets of unknown universe, the binary tree
+   representation is likely to be a more suitable choice.  Theoretical
+   access times for the binary tree representation are better than those
+   for the linked-list, but in practice this is only true for truely
+   random access.
+
+   Often the most suitable representation during construction of the set
+   is not the best choice for the usage of the set.  For such cases, the
+   "view" of the set can be changed from one representation to the other.
+   This is an O(E) operation:
+
+     * from list to tree view	: bitmap_tree_view
+     * from tree to list view	: bitmap_list_view
+
+   Traversing linked lists or trees can be cache-unfriendly.  Performance
+   can be improved by keeping container nodes in the set grouped together
+   in  memory, using a dedicated obstack for a set (or group of related
+   sets).  Elements allocated on obstacks are released to a free-list and
+   taken off the free list.  If multiple sets are allocated on the same
+   obstack, elements freed from one set may be re-used for one of the other
+   sets.  This usually helps avoid cache misses.
+
+   A single free-list is used for all sets allocated in GGC space.  This is
+   bad for persistent sets, so persistent sets should be allocated on an
+   obstack whenever possible.
+
+   For random-access sets with a known, relatively small universe size, the
+   SparseSet or simple bitmap representations may be more efficient than a
+   linked-list set.
+
+
+   LINKED LIST FORM
+   ================
+
+   In linked-list form, in-order iterations of the set can be executed
+   efficiently.  The downside is that many random-access operations are
+   relatively slow, because the linked list has to be traversed to test
+   membership (i.e. member_p/ add_member/remove_member).
+   
+   To improve the performance of this set representation, the last
+   accessed element and its index are cached.  For membership tests on
+   members close to recently accessed members, the cached last element
+   improves membership test to a constant-time operation.
+
+   The following operations can always be performed in O(1) time in
+   list view:
+
+     * clear			: bitmap_clear
+     * smallest_member		: bitmap_first_set_bit
+     * choose_one		: (not implemented, but could be
+				   in constant time)
+
+   The following operations can be performed in O(E) time worst-case in
+   list view (with E the number of elements in the linked list), but in
+   O(1) time with a suitable access patterns:
+
+     * member_p			: bitmap_bit_p
+     * add_member		: bitmap_set_bit / bitmap_set_range
+     * remove_member		: bitmap_clear_bit / bitmap_clear_range
+
+   The following operations can be performed in O(E) time in list view:
+
+     * cardinality		: bitmap_count_bits
+     * largest_member		: bitmap_last_set_bit (but this could
+				  in constant time with a pointer to
+				  the last element in the chain)
+     * set_size			: bitmap_last_set_bit
+
+   In tree view the following operations can all be performed in O(log E)
+   amortized time with O(E) worst-case behavior.
+
+     * smallest_member
+     * largest_member
+     * set_size
+     * member_p
+     * add_member
+     * remove_member
+
+   Additionally, the linked-list sparse set representation supports
+   enumeration of the members in O(E) time:
+
+     * forall			: EXECUTE_IF_SET_IN_BITMAP
+     * set_copy			: bitmap_copy
+     * set_intersection		: bitmap_intersect_p /
+				  bitmap_and / bitmap_and_into /
+				  EXECUTE_IF_AND_IN_BITMAP
+     * set_union		: bitmap_ior / bitmap_ior_into
+     * set_difference		: bitmap_intersect_compl_p /
+				  bitmap_and_comp / bitmap_and_comp_into /
+				  EXECUTE_IF_AND_COMPL_IN_BITMAP
+     * set_disjuction		: bitmap_xor_comp / bitmap_xor_comp_into
+     * set_compare		: bitmap_equal_p
+
+   Some operations on 3 sets that occur frequently in data flow problems
+   are also implemented:
+
+     * A | (B & C)		: bitmap_ior_and_into
+     * A | (B & ~C)		: bitmap_ior_and_compl /
+				  bitmap_ior_and_compl_into
+
+
+   BINARY TREE FORM
+   ================
+   An alternate "view" of a bitmap is its binary tree representation.
+   For this representation, splay trees are used because they can be
+   implemented using the same data structures as the linked list, with
+   no overhead for meta-data (like color, or rank) on the tree nodes.
+
+   In binary tree form, random-access to the set is much more efficient
+   than for the linked-list representation.  Downsides are the high cost
+   of clearing the set, and the relatively large number of operations
+   necessary to balance the tree.  Also, iterating the set members is
+   not supported.
+   
+   As for the linked-list representation, the last accessed element and
+   its index are cached, so that membership tests on the latest accessed
+   members is a constant-time operation.  Other lookups take O(logE)
+   time amortized (but O(E) time worst-case).
+
+   The following operations can always be performed in O(1) time:
+
+     * choose_one		: (not implemented, but could be
+				   implemented in constant time)
+
+   The following operations can be performed in O(logE) time amortized
+   but O(E) time worst-case, but in O(1) time if the same element is
+   accessed.
+
+     * member_p			: bitmap_bit_p
+     * add_member		: bitmap_set_bit
+     * remove_member		: bitmap_clear_bit
+
+   The following operations can be performed in O(logE) time amortized
+   but O(E) time worst-case:
+
+     * smallest_member		: bitmap_first_set_bit
+     * largest_member		: bitmap_last_set_bit
+     * set_size			: bitmap_last_set_bit
+
+   The following operations can be performed in O(E) time:
+
+     * clear			: bitmap_clear
+
+   The binary tree sparse set representation does *not* support any form
+   of enumeration, and does also *not* support logical operations on sets.
+   The binary tree representation is only supposed to be used for sets
+   on which many random-access membership tests will happen.  */
+
+#include "obstack.h"
+
+/* Bitmap memory usage.  */
+struct bitmap_usage: public mem_usage
+{
+  /* Default contructor.  */
+  bitmap_usage (): m_nsearches (0), m_search_iter (0) {}
+  /* Constructor.  */
+  bitmap_usage (size_t allocated, size_t times, size_t peak,
+	     uint64_t nsearches, uint64_t search_iter)
+    : mem_usage (allocated, times, peak),
+    m_nsearches (nsearches), m_search_iter (search_iter) {}
+
+  /* Sum the usage with SECOND usage.  */
+  bitmap_usage
+  operator+ (const bitmap_usage &second)
+  {
+    return bitmap_usage (m_allocated + second.m_allocated,
+			     m_times + second.m_times,
+			     m_peak + second.m_peak,
+			     m_nsearches + second.m_nsearches,
+			     m_search_iter + second.m_search_iter);
+  }
+
+  /* Dump usage coupled to LOC location, where TOTAL is sum of all rows.  */
+  inline void
+  dump (mem_location *loc, mem_usage &total) const
+  {
+    char *location_string = loc->to_string ();
+
+    fprintf (stderr, "%-48s " PRsa (9) ":%5.1f%%"
+	     PRsa (9) PRsa (9) ":%5.1f%%"
+	     PRsa (11) PRsa (11) "%10s\n",
+	     location_string, SIZE_AMOUNT (m_allocated),
+	     get_percent (m_allocated, total.m_allocated),
+	     SIZE_AMOUNT (m_peak), SIZE_AMOUNT (m_times),
+	     get_percent (m_times, total.m_times),
+	     SIZE_AMOUNT (m_nsearches), SIZE_AMOUNT (m_search_iter),
+	     loc->m_ggc ? "ggc" : "heap");
+
+    free (location_string);
+  }
+
+  /* Dump header with NAME.  */
+  static inline void
+  dump_header (const char *name)
+  {
+    fprintf (stderr, "%-48s %11s%16s%17s%12s%12s%10s\n", name, "Leak", "Peak",
+	     "Times", "N searches", "Search iter", "Type");
+  }
+
+  /* Number search operations.  */
+  uint64_t m_nsearches;
+  /* Number of search iterations.  */
+  uint64_t m_search_iter;
+};
+
+/* Bitmap memory description.  */
+extern mem_alloc_description<bitmap_usage> bitmap_mem_desc;
+
+/* Fundamental storage type for bitmap.  */
+
+typedef unsigned long BITMAP_WORD;
+/* BITMAP_WORD_BITS needs to be unsigned, but cannot contain casts as
+   it is used in preprocessor directives -- hence the 1u.  */
+#define BITMAP_WORD_BITS (CHAR_BIT * SIZEOF_LONG * 1u)
+
+/* Number of words to use for each element in the linked list.  */
+
+#ifndef BITMAP_ELEMENT_WORDS
+#define BITMAP_ELEMENT_WORDS ((128 + BITMAP_WORD_BITS - 1) / BITMAP_WORD_BITS)
+#endif
+
+/* Number of bits in each actual element of a bitmap.  */
+
+#define BITMAP_ELEMENT_ALL_BITS (BITMAP_ELEMENT_WORDS * BITMAP_WORD_BITS)
+
+/* Obstack for allocating bitmaps and elements from.  */
+struct bitmap_obstack {
+  struct bitmap_element *elements;
+  struct bitmap_head *heads;
+  struct obstack obstack;
+};
+
+/* Bitmap set element.  We use a linked list to hold only the bits that
+   are set.  This allows for use to grow the bitset dynamically without
+   having to realloc and copy a giant bit array.
+
+   The free list is implemented as a list of lists.  There is one
+   outer list connected together by prev fields.  Each element of that
+   outer is an inner list (that may consist only of the outer list
+   element) that are connected by the next fields.  The prev pointer
+   is undefined for interior elements.  This allows
+   bitmap_elt_clear_from to be implemented in unit time rather than
+   linear in the number of elements to be freed.  */
+
+struct GTY((chain_next ("%h.next"))) bitmap_element {
+  /* In list form, the next element in the linked list;
+     in tree form, the left child node in the tree.  */
+  struct bitmap_element *next;
+  /* In list form, the previous element in the linked list;
+     in tree form, the right child node in the tree.  */
+  struct bitmap_element *prev;
+  /* regno/BITMAP_ELEMENT_ALL_BITS.  */
+  unsigned int indx;
+  /* Bits that are set, counting from INDX, inclusive  */
+  BITMAP_WORD bits[BITMAP_ELEMENT_WORDS];
+};
+
+/* Head of bitmap linked list.  The 'current' member points to something
+   already pointed to by the chain started by first, so GTY((skip)) it.  */
+
+struct GTY(()) bitmap_head {
+  static bitmap_obstack crashme;
+  /* Poison obstack to not make it not a valid initialized GC bitmap.  */
+  CONSTEXPR bitmap_head()
+    : indx(0), tree_form(false), first(NULL), current(NULL),
+      obstack (&crashme)
+  {}
+  /* Index of last element looked at.  */
+  unsigned int indx;
+  /* False if the bitmap is in list form; true if the bitmap is in tree form.
+     Bitmap iterators only work on bitmaps in list form.  */
+  bool tree_form;
+  /* In list form, the first element in the linked list;
+     in tree form, the root of the tree.   */
+  bitmap_element *first;
+  /* Last element looked at.  */
+  bitmap_element * GTY((skip(""))) current;
+  /* Obstack to allocate elements from.  If NULL, then use GGC allocation.  */
+  bitmap_obstack * GTY((skip(""))) obstack;
+  void dump ();
+};
+
+/* Global data */
+extern bitmap_element bitmap_zero_bits;	/* Zero bitmap element */
+extern bitmap_obstack bitmap_default_obstack;   /* Default bitmap obstack */
+
+/* Change the view of the bitmap to list, or tree.  */
+void bitmap_list_view (bitmap);
+void bitmap_tree_view (bitmap);
+
+/* Clear a bitmap by freeing up the linked list.  */
+extern void bitmap_clear (bitmap);
+
+/* Copy a bitmap to another bitmap.  */
+extern void bitmap_copy (bitmap, const_bitmap);
+
+/* Move a bitmap to another bitmap.  */
+extern void bitmap_move (bitmap, bitmap);
+
+/* True if two bitmaps are identical.  */
+extern bool bitmap_equal_p (const_bitmap, const_bitmap);
+
+/* True if the bitmaps intersect (their AND is non-empty).  */
+extern bool bitmap_intersect_p (const_bitmap, const_bitmap);
+
+/* True if the complement of the second intersects the first (their
+   AND_COMPL is non-empty).  */
+extern bool bitmap_intersect_compl_p (const_bitmap, const_bitmap);
+
+/* True if MAP is an empty bitmap.  */
+inline bool bitmap_empty_p (const_bitmap map)
+{
+  return !map->first;
+}
+
+/* True if the bitmap has only a single bit set.  */
+extern bool bitmap_single_bit_set_p (const_bitmap);
+
+/* Count the number of bits set in the bitmap.  */
+extern unsigned long bitmap_count_bits (const_bitmap);
+
+/* Count the number of unique bits set across the two bitmaps.  */
+extern unsigned long bitmap_count_unique_bits (const_bitmap, const_bitmap);
+
+/* Boolean operations on bitmaps.  The _into variants are two operand
+   versions that modify the first source operand.  The other variants
+   are three operand versions that to not destroy the source bitmaps.
+   The operations supported are &, & ~, |, ^.  */
+extern void bitmap_and (bitmap, const_bitmap, const_bitmap);
+extern bool bitmap_and_into (bitmap, const_bitmap);
+extern bool bitmap_and_compl (bitmap, const_bitmap, const_bitmap);
+extern bool bitmap_and_compl_into (bitmap, const_bitmap);
+#define bitmap_compl_and(DST, A, B) bitmap_and_compl (DST, B, A)
+extern void bitmap_compl_and_into (bitmap, const_bitmap);
+extern void bitmap_clear_range (bitmap, unsigned int, unsigned int);
+extern void bitmap_set_range (bitmap, unsigned int, unsigned int);
+extern bool bitmap_ior (bitmap, const_bitmap, const_bitmap);
+extern bool bitmap_ior_into (bitmap, const_bitmap);
+extern void bitmap_xor (bitmap, const_bitmap, const_bitmap);
+extern void bitmap_xor_into (bitmap, const_bitmap);
+
+/* DST = A | (B & C).  Return true if DST changes.  */
+extern bool bitmap_ior_and_into (bitmap DST, const_bitmap B, const_bitmap C);
+/* DST = A | (B & ~C).  Return true if DST changes.  */
+extern bool bitmap_ior_and_compl (bitmap DST, const_bitmap A,
+				  const_bitmap B, const_bitmap C);
+/* A |= (B & ~C).  Return true if A changes.  */
+extern bool bitmap_ior_and_compl_into (bitmap A,
+				       const_bitmap B, const_bitmap C);
+
+/* Clear a single bit in a bitmap.  Return true if the bit changed.  */
+extern bool bitmap_clear_bit (bitmap, int);
+
+/* Set a single bit in a bitmap.  Return true if the bit changed.  */
+extern bool bitmap_set_bit (bitmap, int);
+
+/* Return true if a bit is set in a bitmap.  */
+extern int bitmap_bit_p (bitmap, int);
+
+/* Debug functions to print a bitmap.  */
+extern void debug_bitmap (const_bitmap);
+extern void debug_bitmap_file (FILE *, const_bitmap);
+
+/* Print a bitmap.  */
+extern void bitmap_print (FILE *, const_bitmap, const char *, const char *);
+
+/* Initialize and release a bitmap obstack.  */
+extern void bitmap_obstack_initialize (bitmap_obstack *);
+extern void bitmap_obstack_release (bitmap_obstack *);
+extern void bitmap_register (bitmap MEM_STAT_DECL);
+extern void dump_bitmap_statistics (void);
+
+/* Initialize a bitmap header.  OBSTACK indicates the bitmap obstack
+   to allocate from, NULL for GC'd bitmap.  */
+
+static inline void
+bitmap_initialize (bitmap head, bitmap_obstack *obstack CXX_MEM_STAT_INFO)
+{
+  head->first = head->current = NULL;
+  head->indx = head->tree_form = 0;
+  head->obstack = obstack;
+  if (GATHER_STATISTICS)
+    bitmap_register (head PASS_MEM_STAT);
+}
+
+/* Release a bitmap (but not its head).  This is suitable for pairing with
+   bitmap_initialize.  */
+
+static inline void
+bitmap_release (bitmap head)
+{
+  bitmap_clear (head);
+  /* Poison the obstack pointer so the obstack can be safely released.
+     Do not zero it as the bitmap then becomes initialized GC.  */
+  head->obstack = &bitmap_head::crashme;
+}
+
+/* Allocate and free bitmaps from obstack, malloc and gc'd memory.  */
+extern bitmap bitmap_alloc (bitmap_obstack *obstack CXX_MEM_STAT_INFO);
+#define BITMAP_ALLOC bitmap_alloc
+extern bitmap bitmap_gc_alloc (ALONE_CXX_MEM_STAT_INFO);
+#define BITMAP_GGC_ALLOC bitmap_gc_alloc
+extern void bitmap_obstack_free (bitmap);
+
+/* A few compatibility/functions macros for compatibility with sbitmaps */
+inline void dump_bitmap (FILE *file, const_bitmap map)
+{
+  bitmap_print (file, map, "", "\n");
+}
+extern void debug (const bitmap_head &ref);
+extern void debug (const bitmap_head *ptr);
+
+extern unsigned bitmap_first_set_bit (const_bitmap);
+extern unsigned bitmap_last_set_bit (const_bitmap);
+
+/* Compute bitmap hash (for purposes of hashing etc.)  */
+extern hashval_t bitmap_hash (const_bitmap);
+
+/* Do any cleanup needed on a bitmap when it is no longer used.  */
+#define BITMAP_FREE(BITMAP) \
+       ((void) (bitmap_obstack_free ((bitmap) BITMAP), (BITMAP) = (bitmap) NULL))
+
+/* Iterator for bitmaps.  */
+
+struct bitmap_iterator
+{
+  /* Pointer to the current bitmap element.  */
+  bitmap_element *elt1;
+
+  /* Pointer to 2nd bitmap element when two are involved.  */
+  bitmap_element *elt2;
+
+  /* Word within the current element.  */
+  unsigned word_no;
+
+  /* Contents of the actually processed word.  When finding next bit
+     it is shifted right, so that the actual bit is always the least
+     significant bit of ACTUAL.  */
+  BITMAP_WORD bits;
+};
+
+/* Initialize a single bitmap iterator.  START_BIT is the first bit to
+   iterate from.  */
+
+static inline void
+bmp_iter_set_init (bitmap_iterator *bi, const_bitmap map,
+		   unsigned start_bit, unsigned *bit_no)
+{
+  bi->elt1 = map->first;
+  bi->elt2 = NULL;
+
+  gcc_checking_assert (!map->tree_form);
+
+  /* Advance elt1 until it is not before the block containing start_bit.  */
+  while (1)
+    {
+      if (!bi->elt1)
+	{
+	  bi->elt1 = &bitmap_zero_bits;
+	  break;
+	}
+
+      if (bi->elt1->indx >= start_bit / BITMAP_ELEMENT_ALL_BITS)
+	break;
+      bi->elt1 = bi->elt1->next;
+    }
+
+  /* We might have gone past the start bit, so reinitialize it.  */
+  if (bi->elt1->indx != start_bit / BITMAP_ELEMENT_ALL_BITS)
+    start_bit = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
+
+  /* Initialize for what is now start_bit.  */
+  bi->word_no = start_bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
+  bi->bits = bi->elt1->bits[bi->word_no];
+  bi->bits >>= start_bit % BITMAP_WORD_BITS;
+
+  /* If this word is zero, we must make sure we're not pointing at the
+     first bit, otherwise our incrementing to the next word boundary
+     will fail.  It won't matter if this increment moves us into the
+     next word.  */
+  start_bit += !bi->bits;
+
+  *bit_no = start_bit;
+}
+
+/* Initialize an iterator to iterate over the intersection of two
+   bitmaps.  START_BIT is the bit to commence from.  */
+
+static inline void
+bmp_iter_and_init (bitmap_iterator *bi, const_bitmap map1, const_bitmap map2,
+		   unsigned start_bit, unsigned *bit_no)
+{
+  bi->elt1 = map1->first;
+  bi->elt2 = map2->first;
+
+  gcc_checking_assert (!map1->tree_form && !map2->tree_form);
+
+  /* Advance elt1 until it is not before the block containing
+     start_bit.  */
+  while (1)
+    {
+      if (!bi->elt1)
+	{
+	  bi->elt2 = NULL;
+	  break;
+	}
+
+      if (bi->elt1->indx >= start_bit / BITMAP_ELEMENT_ALL_BITS)
+	break;
+      bi->elt1 = bi->elt1->next;
+    }
+
+  /* Advance elt2 until it is not before elt1.  */
+  while (1)
+    {
+      if (!bi->elt2)
+	{
+	  bi->elt1 = bi->elt2 = &bitmap_zero_bits;
+	  break;
+	}
+
+      if (bi->elt2->indx >= bi->elt1->indx)
+	break;
+      bi->elt2 = bi->elt2->next;
+    }
+
+  /* If we're at the same index, then we have some intersecting bits.  */
+  if (bi->elt1->indx == bi->elt2->indx)
+    {
+      /* We might have advanced beyond the start_bit, so reinitialize
+	 for that.  */
+      if (bi->elt1->indx != start_bit / BITMAP_ELEMENT_ALL_BITS)
+	start_bit = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
+
+      bi->word_no = start_bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
+      bi->bits = bi->elt1->bits[bi->word_no] & bi->elt2->bits[bi->word_no];
+      bi->bits >>= start_bit % BITMAP_WORD_BITS;
+    }
+  else
+    {
+      /* Otherwise we must immediately advance elt1, so initialize for
+	 that.  */
+      bi->word_no = BITMAP_ELEMENT_WORDS - 1;
+      bi->bits = 0;
+    }
+
+  /* If this word is zero, we must make sure we're not pointing at the
+     first bit, otherwise our incrementing to the next word boundary
+     will fail.  It won't matter if this increment moves us into the
+     next word.  */
+  start_bit += !bi->bits;
+
+  *bit_no = start_bit;
+}
+
+/* Initialize an iterator to iterate over the bits in MAP1 & ~MAP2.  */
+
+static inline void
+bmp_iter_and_compl_init (bitmap_iterator *bi,
+			 const_bitmap map1, const_bitmap map2,
+			 unsigned start_bit, unsigned *bit_no)
+{
+  bi->elt1 = map1->first;
+  bi->elt2 = map2->first;
+
+  gcc_checking_assert (!map1->tree_form && !map2->tree_form);
+
+  /* Advance elt1 until it is not before the block containing start_bit.  */
+  while (1)
+    {
+      if (!bi->elt1)
+	{
+	  bi->elt1 = &bitmap_zero_bits;
+	  break;
+	}
+
+      if (bi->elt1->indx >= start_bit / BITMAP_ELEMENT_ALL_BITS)
+	break;
+      bi->elt1 = bi->elt1->next;
+    }
+
+  /* Advance elt2 until it is not before elt1.  */
+  while (bi->elt2 && bi->elt2->indx < bi->elt1->indx)
+    bi->elt2 = bi->elt2->next;
+
+  /* We might have advanced beyond the start_bit, so reinitialize for
+     that.  */
+  if (bi->elt1->indx != start_bit / BITMAP_ELEMENT_ALL_BITS)
+    start_bit = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
+
+  bi->word_no = start_bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
+  bi->bits = bi->elt1->bits[bi->word_no];
+  if (bi->elt2 && bi->elt1->indx == bi->elt2->indx)
+    bi->bits &= ~bi->elt2->bits[bi->word_no];
+  bi->bits >>= start_bit % BITMAP_WORD_BITS;
+
+  /* If this word is zero, we must make sure we're not pointing at the
+     first bit, otherwise our incrementing to the next word boundary
+     will fail.  It won't matter if this increment moves us into the
+     next word.  */
+  start_bit += !bi->bits;
+
+  *bit_no = start_bit;
+}
+
+/* Advance to the next bit in BI.  We don't advance to the next
+   nonzero bit yet.  */
+
+static inline void
+bmp_iter_next (bitmap_iterator *bi, unsigned *bit_no)
+{
+  bi->bits >>= 1;
+  *bit_no += 1;
+}
+
+/* Advance to first set bit in BI.  */
+
+static inline void
+bmp_iter_next_bit (bitmap_iterator * bi, unsigned *bit_no)
+{
+#if (GCC_VERSION >= 3004)
+  {
+    unsigned int n = __builtin_ctzl (bi->bits);
+    gcc_assert (sizeof (unsigned long) == sizeof (BITMAP_WORD));
+    bi->bits >>= n;
+    *bit_no += n;
+  }
+#else
+  while (!(bi->bits & 1))
+    {
+      bi->bits >>= 1;
+      *bit_no += 1;
+    }
+#endif
+}
+
+/* Advance to the next nonzero bit of a single bitmap, we will have
+   already advanced past the just iterated bit.  Return true if there
+   is a bit to iterate.  */
+
+static inline bool
+bmp_iter_set (bitmap_iterator *bi, unsigned *bit_no)
+{
+  /* If our current word is nonzero, it contains the bit we want.  */
+  if (bi->bits)
+    {
+    next_bit:
+      bmp_iter_next_bit (bi, bit_no);
+      return true;
+    }
+
+  /* Round up to the word boundary.  We might have just iterated past
+     the end of the last word, hence the -1.  It is not possible for
+     bit_no to point at the beginning of the now last word.  */
+  *bit_no = ((*bit_no + BITMAP_WORD_BITS - 1)
+	     / BITMAP_WORD_BITS * BITMAP_WORD_BITS);
+  bi->word_no++;
+
+  while (1)
+    {
+      /* Find the next nonzero word in this elt.  */
+      while (bi->word_no != BITMAP_ELEMENT_WORDS)
+	{
+	  bi->bits = bi->elt1->bits[bi->word_no];
+	  if (bi->bits)
+	    goto next_bit;
+	  *bit_no += BITMAP_WORD_BITS;
+	  bi->word_no++;
+	}
+
+      /* Make sure we didn't remove the element while iterating.  */
+      gcc_checking_assert (bi->elt1->indx != -1U);
+
+      /* Advance to the next element.  */
+      bi->elt1 = bi->elt1->next;
+      if (!bi->elt1)
+	return false;
+      *bit_no = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
+      bi->word_no = 0;
+    }
+}
+
+/* Advance to the next nonzero bit of an intersecting pair of
+   bitmaps.  We will have already advanced past the just iterated bit.
+   Return true if there is a bit to iterate.  */
+
+static inline bool
+bmp_iter_and (bitmap_iterator *bi, unsigned *bit_no)
+{
+  /* If our current word is nonzero, it contains the bit we want.  */
+  if (bi->bits)
+    {
+    next_bit:
+      bmp_iter_next_bit (bi, bit_no);
+      return true;
+    }
+
+  /* Round up to the word boundary.  We might have just iterated past
+     the end of the last word, hence the -1.  It is not possible for
+     bit_no to point at the beginning of the now last word.  */
+  *bit_no = ((*bit_no + BITMAP_WORD_BITS - 1)
+	     / BITMAP_WORD_BITS * BITMAP_WORD_BITS);
+  bi->word_no++;
+
+  while (1)
+    {
+      /* Find the next nonzero word in this elt.  */
+      while (bi->word_no != BITMAP_ELEMENT_WORDS)
+	{
+	  bi->bits = bi->elt1->bits[bi->word_no] & bi->elt2->bits[bi->word_no];
+	  if (bi->bits)
+	    goto next_bit;
+	  *bit_no += BITMAP_WORD_BITS;
+	  bi->word_no++;
+	}
+
+      /* Advance to the next identical element.  */
+      do
+	{
+	  /* Make sure we didn't remove the element while iterating.  */
+	  gcc_checking_assert (bi->elt1->indx != -1U);
+
+	  /* Advance elt1 while it is less than elt2.  We always want
+	     to advance one elt.  */
+	  do
+	    {
+	      bi->elt1 = bi->elt1->next;
+	      if (!bi->elt1)
+		return false;
+	    }
+	  while (bi->elt1->indx < bi->elt2->indx);
+
+	  /* Make sure we didn't remove the element while iterating.  */
+	  gcc_checking_assert (bi->elt2->indx != -1U);
+
+	  /* Advance elt2 to be no less than elt1.  This might not
+	     advance.  */
+	  while (bi->elt2->indx < bi->elt1->indx)
+	    {
+	      bi->elt2 = bi->elt2->next;
+	      if (!bi->elt2)
+		return false;
+	    }
+	}
+      while (bi->elt1->indx != bi->elt2->indx);
+
+      *bit_no = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
+      bi->word_no = 0;
+    }
+}
+
+/* Advance to the next nonzero bit in the intersection of
+   complemented bitmaps.  We will have already advanced past the just
+   iterated bit.  */
+
+static inline bool
+bmp_iter_and_compl (bitmap_iterator *bi, unsigned *bit_no)
+{
+  /* If our current word is nonzero, it contains the bit we want.  */
+  if (bi->bits)
+    {
+    next_bit:
+      bmp_iter_next_bit (bi, bit_no);
+      return true;
+    }
+
+  /* Round up to the word boundary.  We might have just iterated past
+     the end of the last word, hence the -1.  It is not possible for
+     bit_no to point at the beginning of the now last word.  */
+  *bit_no = ((*bit_no + BITMAP_WORD_BITS - 1)
+	     / BITMAP_WORD_BITS * BITMAP_WORD_BITS);
+  bi->word_no++;
+
+  while (1)
+    {
+      /* Find the next nonzero word in this elt.  */
+      while (bi->word_no != BITMAP_ELEMENT_WORDS)
+	{
+	  bi->bits = bi->elt1->bits[bi->word_no];
+	  if (bi->elt2 && bi->elt2->indx == bi->elt1->indx)
+	    bi->bits &= ~bi->elt2->bits[bi->word_no];
+	  if (bi->bits)
+	    goto next_bit;
+	  *bit_no += BITMAP_WORD_BITS;
+	  bi->word_no++;
+	}
+
+      /* Make sure we didn't remove the element while iterating.  */
+      gcc_checking_assert (bi->elt1->indx != -1U);
+
+      /* Advance to the next element of elt1.  */
+      bi->elt1 = bi->elt1->next;
+      if (!bi->elt1)
+	return false;
+
+      /* Make sure we didn't remove the element while iterating.  */
+      gcc_checking_assert (! bi->elt2 || bi->elt2->indx != -1U);
+
+      /* Advance elt2 until it is no less than elt1.  */
+      while (bi->elt2 && bi->elt2->indx < bi->elt1->indx)
+	bi->elt2 = bi->elt2->next;
+
+      *bit_no = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
+      bi->word_no = 0;
+    }
+}
+
+/* If you are modifying a bitmap you are currently iterating over you
+   have to ensure to
+     - never remove the current bit;
+     - if you set or clear a bit before the current bit this operation
+       will not affect the set of bits you are visiting during the iteration;
+     - if you set or clear a bit after the current bit it is unspecified
+       whether that affects the set of bits you are visiting during the
+       iteration.
+   If you want to remove the current bit you can delay this to the next
+   iteration (and after the iteration in case the last iteration is
+   affected).  */
+
+/* Loop over all bits set in BITMAP, starting with MIN and setting
+   BITNUM to the bit number.  ITER is a bitmap iterator.  BITNUM
+   should be treated as a read-only variable as it contains loop
+   state.  */
+
+#ifndef EXECUTE_IF_SET_IN_BITMAP
+/* See sbitmap.h for the other definition of EXECUTE_IF_SET_IN_BITMAP.  */
+#define EXECUTE_IF_SET_IN_BITMAP(BITMAP, MIN, BITNUM, ITER)		\
+  for (bmp_iter_set_init (&(ITER), (BITMAP), (MIN), &(BITNUM));		\
+       bmp_iter_set (&(ITER), &(BITNUM));				\
+       bmp_iter_next (&(ITER), &(BITNUM)))
+#endif
+
+/* Loop over all the bits set in BITMAP1 & BITMAP2, starting with MIN
+   and setting BITNUM to the bit number.  ITER is a bitmap iterator.
+   BITNUM should be treated as a read-only variable as it contains
+   loop state.  */
+
+#define EXECUTE_IF_AND_IN_BITMAP(BITMAP1, BITMAP2, MIN, BITNUM, ITER)	\
+  for (bmp_iter_and_init (&(ITER), (BITMAP1), (BITMAP2), (MIN),		\
+			  &(BITNUM));					\
+       bmp_iter_and (&(ITER), &(BITNUM));				\
+       bmp_iter_next (&(ITER), &(BITNUM)))
+
+/* Loop over all the bits set in BITMAP1 & ~BITMAP2, starting with MIN
+   and setting BITNUM to the bit number.  ITER is a bitmap iterator.
+   BITNUM should be treated as a read-only variable as it contains
+   loop state.  */
+
+#define EXECUTE_IF_AND_COMPL_IN_BITMAP(BITMAP1, BITMAP2, MIN, BITNUM, ITER) \
+  for (bmp_iter_and_compl_init (&(ITER), (BITMAP1), (BITMAP2), (MIN),	\
+				&(BITNUM));				\
+       bmp_iter_and_compl (&(ITER), &(BITNUM));				\
+       bmp_iter_next (&(ITER), &(BITNUM)))
+
+/* A class that ties the lifetime of a bitmap to its scope.  */
+class auto_bitmap
+{
+ public:
+  auto_bitmap () { bitmap_initialize (&m_bits, &bitmap_default_obstack); }
+  explicit auto_bitmap (bitmap_obstack *o) { bitmap_initialize (&m_bits, o); }
+  ~auto_bitmap () { bitmap_clear (&m_bits); }
+  // Allow calling bitmap functions on our bitmap.
+  operator bitmap () { return &m_bits; }
+
+ private:
+  // Prevent making a copy that references our bitmap.
+  auto_bitmap (const auto_bitmap &);
+  auto_bitmap &operator = (const auto_bitmap &);
+#if __cplusplus >= 201103L
+  auto_bitmap (auto_bitmap &&);
+  auto_bitmap &operator = (auto_bitmap &&);
+#endif
+
+  bitmap_head m_bits;
+};
+
+#endif /* GCC_BITMAP_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/brig-builtins.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/brig-builtins.def
new file mode 100644
index 0000000..ec33b2d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/brig-builtins.def
@@ -0,0 +1,675 @@
+/* This file contains the definitions and documentation for the
+   HSAIL builtins used in the GNU compiler.
+   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+
+   Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com>
+   for General Processor Tech.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Following builtins are used by the BRIG (the binary representation of
+   HSAIL) frontend.  Software implementations are available in libhsail-rt.
+   Use leading double underscore in the name to avoid name space clashes
+   with kernel program symbols in case the builtin is implemented as
+   a function call.  */
+
+/* Work-item ID related builtins are not constant in the work-group function
+   mode (each WI has a different return value).  */
+
+#ifndef DEF_HSAIL_BUILTIN
+#define DEF_HSAIL_BUILTIN(ENUM, HSAIL_OPCODE, HSAIL_TYPE,	\
+			  NAME, TYPE, ATTRS)
+#endif
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMABSID, BRIG_OPCODE_WORKITEMABSID,
+		  BRIG_TYPE_U32, "__hsail_workitemabsid", BT_FN_UINT_UINT_PTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_GRIDSIZE, BRIG_OPCODE_GRIDSIZE,
+		  BRIG_TYPE_U32, "__hsail_gridsize", BT_FN_UINT_UINT_PTR,
+		  ATTR_PURE_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMFLATABSID_U32,
+		  BRIG_OPCODE_WORKITEMFLATABSID, BRIG_TYPE_U32,
+		  "__hsail_workitemflatabsid_u32", BT_FN_UINT_CONST_PTR,
+		  ATTR_PURE_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMFLATABSID_U64,
+		  BRIG_OPCODE_WORKITEMFLATABSID, BRIG_TYPE_U64,
+		  "__hsail_workitemflatabsid_u64", BT_FN_ULONG_CONST_PTR,
+		  ATTR_PURE_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMFLATID, BRIG_OPCODE_WORKITEMFLATID,
+		  BRIG_TYPE_U32, "__hsail_workitemflatid", BT_FN_UINT_CONST_PTR,
+		  ATTR_PURE_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMID, BRIG_OPCODE_WORKITEMID,
+		  BRIG_TYPE_U32, "__hsail_workitemid",
+		  BT_FN_UINT_UINT_CONST_PTR, ATTR_PURE_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKGROUPID, BRIG_OPCODE_WORKGROUPID,
+		  BRIG_TYPE_U32, "__hsail_workgroupid",
+		  BT_FN_UINT_UINT_CONST_PTR, ATTR_PURE_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CURRENTWORKITEMFLATID,
+		  BRIG_OPCODE_CURRENTWORKITEMFLATID,
+		  BRIG_TYPE_U32, "__hsail_currentworkitemflatid",
+		  BT_FN_UINT_PTR, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKITEMABSID_U64, BRIG_OPCODE_WORKITEMABSID,
+		  BRIG_TYPE_U64, "__hsail_workitemabsid_u64",
+		  BT_FN_ULONG_UINT_PTR, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_PACKETID, BRIG_OPCODE_PACKETID,
+		  BRIG_TYPE_U64, "__hsail_packetid", BT_FN_ULONG_PTR,
+		  ATTR_PURE_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_PACKETCOMPLETIONSIG_SIG64,
+		  BRIG_OPCODE_PACKETCOMPLETIONSIG, BRIG_TYPE_SIG64,
+		  "__hsail_packetcompletionsig_sig64", BT_FN_ULONG_PTR,
+		  ATTR_PURE_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_PACKETCOMPLETIONSIG_SIG32,
+		  BRIG_OPCODE_PACKETCOMPLETIONSIG, BRIG_TYPE_SIG32,
+		  "__hsail_packetcompletionsig_sig32", BT_FN_UINT_PTR,
+		  ATTR_PURE_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CURRENTWORKGROUPSIZE,
+		  BRIG_OPCODE_CURRENTWORKGROUPSIZE, BRIG_TYPE_U32,
+		  "__hsail_currentworkgroupsize", BT_FN_UINT_UINT_CONST_PTR,
+		  ATTR_PURE_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WORKGROUPSIZE, BRIG_OPCODE_WORKGROUPSIZE,
+		  BRIG_TYPE_U32, "__hsail_workgroupsize",
+		  BT_FN_UINT_UINT_CONST_PTR,
+		  ATTR_PURE_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_DIM, BRIG_OPCODE_DIM,
+		  BRIG_TYPE_U32, "__hsail_dim", BT_FN_UINT_PTR,
+		  ATTR_PURE_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_GRIDGROUPS, BRIG_OPCODE_GRIDGROUPS,
+		  BRIG_TYPE_U32, "__hsail_gridgroups", BT_FN_UINT_UINT_PTR,
+		  ATTR_PURE_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITEXTRACT_S32, BRIG_OPCODE_BITEXTRACT,
+		  BRIG_TYPE_S32, "__hsail_bitextract_s32",
+		  BT_FN_INT_INT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITEXTRACT_U32, BRIG_OPCODE_BITEXTRACT,
+		  BRIG_TYPE_U32, "__hsail_bitextract_u32",
+		  BT_FN_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITEXTRACT_S64, BRIG_OPCODE_BITEXTRACT,
+		  BRIG_TYPE_S64, "__hsail_bitextract_s64",
+		  BT_FN_LONG_LONG_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITEXTRACT_U64, BRIG_OPCODE_BITEXTRACT,
+		  BRIG_TYPE_U64, "__hsail_bitextract_u64",
+		  BT_FN_ULONG_ULONG_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITINSERT_U32, BRIG_OPCODE_BITINSERT,
+		  BRIG_TYPE_U32, "__hsail_bitinsert_u32",
+		  BT_FN_UINT_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITINSERT_U64, BRIG_OPCODE_BITINSERT,
+		  BRIG_TYPE_U64, "__hsail_bitinsert_u64",
+		  BT_FN_ULONG_ULONG_ULONG_UINT_UINT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITMASK_B32, BRIG_OPCODE_BITMASK,
+		  BRIG_TYPE_B32, "__hsail_bitmask_u32", BT_FN_UINT_UINT_UINT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITMASK_B64, BRIG_OPCODE_BITMASK,
+		  BRIG_TYPE_B64, "__hsail_bitmask_u64", BT_FN_ULONG_UINT_UINT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITREV_B32, BRIG_OPCODE_BITREV,
+		  BRIG_TYPE_B32, "__hsail_bitrev_u32", BT_FN_UINT_UINT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITREV_B64, BRIG_OPCODE_BITREV,
+		  BRIG_TYPE_B64, "__hsail_bitrev_u64", BT_FN_ULONG_ULONG,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITSELECT_B32, BRIG_OPCODE_BITSELECT,
+		  BRIG_TYPE_B32, "__hsail_bitselect_u32",
+		  BT_FN_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITSELECT_U64, BRIG_OPCODE_BITSELECT,
+		  BRIG_TYPE_B64, "__hsail_bitselect_u64",
+		  BT_FN_ULONG_ULONG_ULONG_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FIRSTBIT_U32, BRIG_OPCODE_FIRSTBIT,
+		  BRIG_TYPE_U32, "__hsail_firstbit_u32", BT_FN_UINT_UINT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FIRSTBIT_S32, BRIG_OPCODE_FIRSTBIT,
+		  BRIG_TYPE_S32, "__hsail_firstbit_s32", BT_FN_UINT_INT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FIRSTBIT_U64, BRIG_OPCODE_FIRSTBIT,
+		  BRIG_TYPE_U64, "__hsail_firstbit_u64", BT_FN_UINT_ULONG,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FIRSTBIT_S64, BRIG_OPCODE_FIRSTBIT,
+		  BRIG_TYPE_S64, "__hsail_firstbit_s64", BT_FN_UINT_LONG,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LASTBIT_U32, BRIG_OPCODE_LASTBIT,
+		  BRIG_TYPE_U32, "__hsail_lastbit_u32", BT_FN_UINT_UINT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LASTBIT_U64, BRIG_OPCODE_LASTBIT,
+		  BRIG_TYPE_U64, "__hsail_lastbit_u64", BT_FN_UINT_ULONG,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BORROW_U32, BRIG_OPCODE_BORROW,
+		  BRIG_TYPE_U32, "__hsail_borrow_u32", BT_FN_UINT_UINT_UINT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BORROW_U64, BRIG_OPCODE_BORROW,
+		  BRIG_TYPE_U64, "__hsail_borrow_u64", BT_FN_ULONG_ULONG_ULONG,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CARRY_U32, BRIG_OPCODE_CARRY,
+		  BRIG_TYPE_U32, "__hsail_carry_u32", BT_FN_UINT_UINT_UINT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CARRY_U64, BRIG_OPCODE_CARRY,
+		  BRIG_TYPE_U64, "__hsail_carry_u64", BT_FN_ULONG_ULONG_ULONG,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_REM_S32, BRIG_OPCODE_REM,
+		  BRIG_TYPE_S32, "__hsail_rem_s32", BT_FN_INT_INT_INT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_REM_S64, BRIG_OPCODE_REM,
+		  BRIG_TYPE_S64, "__hsail_rem_s64", BT_FN_LONG_LONG_LONG,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MIN_F32, BRIG_OPCODE_MIN,
+		  BRIG_TYPE_F32, "__hsail_min_f32", BT_FN_FLOAT_FLOAT_FLOAT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MAX_F32, BRIG_OPCODE_MAX,
+		  BRIG_TYPE_F32, "__hsail_max_f32", BT_FN_FLOAT_FLOAT_FLOAT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MIN_F64, BRIG_OPCODE_MIN,
+		  BRIG_TYPE_F64, "__hsail_min_f64", BT_FN_DOUBLE_DOUBLE_DOUBLE,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MAX_F64, BRIG_OPCODE_MAX,
+		  BRIG_TYPE_F64, "__hsail_max_f64", BT_FN_DOUBLE_DOUBLE_DOUBLE,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CLASS_F32, BRIG_OPCODE_CLASS,
+		  BRIG_TYPE_F32, "__hsail_class_f32", BT_FN_UINT_FLOAT_UINT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CLASS_F64, BRIG_OPCODE_CLASS,
+		  BRIG_TYPE_F64, "__hsail_class_f64", BT_FN_UINT_DOUBLE_UINT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CLASS_F32_F16, BRIG_OPCODE_CLASS,
+		  BRIG_TYPE_F16, "__hsail_class_f32_f16",
+		  BT_FN_UINT_FLOAT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FRACT_F32, BRIG_OPCODE_FRACT,
+		  BRIG_TYPE_F32, "__hsail_fract_f32", BT_FN_FLOAT_FLOAT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_FRACT_F64, BRIG_OPCODE_FRACT,
+		  BRIG_TYPE_F64, "__hsail_fract_f64", BT_FN_DOUBLE_DOUBLE,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BARRIER, BRIG_OPCODE_BARRIER,
+		  BRIG_TYPE_NONE, "__hsail_barrier", BT_FN_VOID_PTR,
+		  ATTR_RT_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_INITFBAR, BRIG_OPCODE_INITFBAR,
+		  BRIG_TYPE_NONE, "__hsail_initfbar", BT_FN_VOID_UINT_PTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_JOINFBAR, BRIG_OPCODE_JOINFBAR,
+		  BRIG_TYPE_NONE, "__hsail_joinfbar", BT_FN_VOID_UINT_PTR,
+		  ATTR_NOTHROW_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_WAITFBAR, BRIG_OPCODE_WAITFBAR,
+		  BRIG_TYPE_NONE, "__hsail_waitfbar", BT_FN_VOID_UINT_PTR,
+		  ATTR_RT_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_ARRIVEFBAR, BRIG_OPCODE_ARRIVEFBAR,
+		  BRIG_TYPE_NONE, "__hsail_arrivefbar", BT_FN_VOID_UINT_PTR,
+		  ATTR_RT_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LEAVEFBAR, BRIG_OPCODE_LEAVEFBAR,
+		  BRIG_TYPE_NONE, "__hsail_leavefbar", BT_FN_VOID_UINT_PTR,
+		  ATTR_NOTHROW_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_RELEASEFBAR, BRIG_OPCODE_RELEASEFBAR,
+		  BRIG_TYPE_NONE, "__hsail_releasefbar", BT_FN_VOID_UINT_PTR,
+		  ATTR_NOTHROW_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BITALIGN, BRIG_OPCODE_BITALIGN,
+		  BRIG_TYPE_B32, "__hsail_bitalign",
+		  BT_FN_UINT_ULONG_ULONG_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_BYTEALIGN, BRIG_OPCODE_BYTEALIGN,
+		  BRIG_TYPE_B32, "__hsail_bytealign",
+		  BT_FN_UINT_ULONG_ULONG_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LERP, BRIG_OPCODE_LERP,
+		  BRIG_TYPE_U8X4, "__hsail_lerp", BT_FN_UINT_UINT_UINT_UINT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_PACKCVT, BRIG_OPCODE_PACKCVT,
+		  BRIG_TYPE_U8X4, "__hsail_packcvt",
+		  BT_FN_UINT_FLOAT_FLOAT_FLOAT_FLOAT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_UNPACKCVT, BRIG_OPCODE_UNPACKCVT,
+		  BRIG_TYPE_F32, "__hsail_unpackcvt", BT_FN_FLOAT_UINT_UINT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SAD_U16X2, BRIG_OPCODE_SAD,
+		  BRIG_TYPE_U16X2, "__hsail_sad_u16x2",
+		  BT_FN_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SAD_U32, BRIG_OPCODE_SAD,
+		  BRIG_TYPE_U32, "__hsail_sad_u32", BT_FN_UINT_UINT_UINT_UINT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SAD_U8X4, BRIG_OPCODE_SAD,
+		  BRIG_TYPE_U8X4, "__hsail_sad_u8x4",
+		  BT_FN_UINT_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SADHI_U8X4, BRIG_OPCODE_SADHI,
+		  BRIG_TYPE_U16X2, "__hsail_sadhi_u16x2_u8x4",
+		  BT_FN_UINT_UINT_UINT_UINT,
+		  ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CLOCK, BRIG_OPCODE_CLOCK,
+		  BRIG_TYPE_U64, "__hsail_clock", BT_FN_ULONG,
+		  ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CUID, BRIG_OPCODE_CUID,
+		  BRIG_TYPE_U32, "__hsail_cuid", BT_FN_UINT_PTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_MAXCUID, BRIG_OPCODE_MAXCUID,
+		  BRIG_TYPE_U32, "__hsail_maxcuid", BT_FN_UINT_PTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_DEBUGTRAP, BRIG_OPCODE_DEBUGTRAP,
+		  BRIG_TYPE_U32, "__hsail_debugtrap", BT_FN_VOID_UINT_PTR,
+		  ATTR_NORETURN_NOTHROW_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_GROUPBASEPTR, BRIG_OPCODE_GROUPBASEPTR,
+		  BRIG_TYPE_U32, "__hsail_groupbaseptr", BT_FN_UINT_PTR,
+		  ATTR_PURE_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_KERNARGBASEPTR_U64,
+		  BRIG_OPCODE_KERNARGBASEPTR, BRIG_TYPE_U64,
+		  "__hsail_kernargbaseptr_u64", BT_FN_ULONG_PTR,
+		  ATTR_PURE_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_KERNARGBASEPTR_U32,
+		  BRIG_OPCODE_KERNARGBASEPTR, BRIG_TYPE_U32,
+		  "__hsail_kernargbaseptr_u32", BT_FN_UINT_PTR,
+		  ATTR_PURE_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_ALLOCA, BRIG_OPCODE_ALLOCA,
+		  BRIG_TYPE_U32, "__hsail_alloca", BT_FN_UINT_UINT_UINT_PTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LDQUEUEWRITEINDEX,
+		  BRIG_OPCODE_LDQUEUEWRITEINDEX,
+		  BRIG_TYPE_U64, "__hsail_ldqueuewriteindex",
+		  BT_FN_ULONG_ULONG, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_LDQUEUEREADINDEX,
+		  BRIG_OPCODE_LDQUEUEREADINDEX,
+		  BRIG_TYPE_U64, "__hsail_ldqueuereadindex",
+		  BT_FN_ULONG_ULONG, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_STQUEUEWRITEINDEX,
+		  BRIG_OPCODE_STQUEUEWRITEINDEX,
+		  BRIG_TYPE_U64, "__hsail_stqueuewriteindex",
+		  BT_FN_VOID_UINT64_UINT64, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_STQUEUEREADINDEX,
+		  BRIG_OPCODE_STQUEUEREADINDEX,
+		  BRIG_TYPE_U64, "__hsail_stqueuereadindex",
+		  BT_FN_VOID_UINT64_UINT64, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_ADDQUEUEWRITEINDEX,
+		  BRIG_OPCODE_ADDQUEUEWRITEINDEX,
+		  BRIG_TYPE_U64, "__hsail_addqueuewriteindex",
+		  BT_FN_ULONG_ULONG_ULONG, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_CASQUEUEWRITEINDEX,
+		  BRIG_OPCODE_CASQUEUEWRITEINDEX,
+		  BRIG_TYPE_U64, "__hsail_casqueuewriteindex",
+		  BT_FN_ULONG_ULONG_ULONG_ULONG, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SEGMENTP_GLOBAL,
+		  BRIG_OPCODE_SEGMENTP,
+		  BRIG_TYPE_U32, "__hsail_segmentp_global",
+		  BT_FN_UINT32_UINT64_PTR, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SEGMENTP_GROUP,
+		  BRIG_OPCODE_SEGMENTP,
+		  BRIG_TYPE_U32, "__hsail_segmentp_group",
+		  BT_FN_UINT32_UINT64_PTR, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_BUILTIN (BUILT_IN_HSAIL_SEGMENTP_PRIVATE,
+		  BRIG_OPCODE_SEGMENTP,
+		  BRIG_TYPE_U32, "__hsail_segmentp_private",
+		  BT_FN_UINT32_UINT64_PTR, ATTR_NOTHROW_LEAF_LIST)
+
+#ifndef DEF_HSAIL_ATOMIC_BUILTIN
+#define DEF_HSAIL_ATOMIC_BUILTIN(ENUM, ATOMIC_OPCODE, HSAIL_TYPE,	\
+				 NAME, TYPE, ATTRS)
+#endif
+
+DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MIN_S32, BRIG_ATOMIC_MIN,
+			 BRIG_TYPE_S32, "__hsail_atomic_min_s32",
+			 BT_FN_INT_PTR_INT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MIN_S64, BRIG_ATOMIC_MIN,
+			 BRIG_TYPE_S64, "__hsail_atomic_min_s64",
+			 BT_FN_LONG_PTR_LONG, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MIN_U32, BRIG_ATOMIC_MIN,
+			 BRIG_TYPE_U32, "__hsail_atomic_min_u32",
+			 BT_FN_UINT_PTR_UINT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MIN_U64, BRIG_ATOMIC_MIN,
+			 BRIG_TYPE_U64, "__hsail_atomic_min_u64",
+			 BT_FN_ULONG_PTR_ULONG, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MAX_S32, BRIG_ATOMIC_MAX,
+			 BRIG_TYPE_S32, "__hsail_atomic_max_s32",
+			 BT_FN_INT_PTR_INT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MAX_S64, BRIG_ATOMIC_MAX,
+			 BRIG_TYPE_S64, "__hsail_atomic_max_s64",
+			 BT_FN_LONG_PTR_LONG, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MAX_U32, BRIG_ATOMIC_MAX,
+			 BRIG_TYPE_U32, "__hsail_atomic_max_u32",
+			 BT_FN_UINT_PTR_UINT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_MAX_U64, BRIG_ATOMIC_MAX,
+			 BRIG_TYPE_U64, "__hsail_atomic_max_u64",
+			 BT_FN_ULONG_PTR_ULONG, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_WRAPDEC_U32,
+			 BRIG_ATOMIC_WRAPDEC, BRIG_TYPE_U32,
+			 "__hsail_atomic_wrapdec_u32",
+			 BT_FN_UINT_PTR_UINT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_WRAPDEC_U64,
+			 BRIG_ATOMIC_WRAPDEC, BRIG_TYPE_U64,
+			 "__hsail_atomic_wrapdec_u64",
+			 BT_FN_ULONG_PTR_ULONG, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_WRAPINC_U32,
+			 BRIG_ATOMIC_WRAPINC, BRIG_TYPE_U32,
+			 "__hsail_atomic_wrapinc_u32",
+			 BT_FN_UINT_PTR_UINT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_ATOMIC_BUILTIN (BUILT_IN_HSAIL_ATOMIC_WRAPINC_U64,
+			 BRIG_ATOMIC_WRAPINC, BRIG_TYPE_U64,
+			 "__hsail_atomic_wrapinc_u64",
+			 BT_FN_ULONG_PTR_ULONG, ATTR_NOTHROW_LEAF_LIST)
+
+#ifndef DEF_HSAIL_SAT_BUILTIN
+#define DEF_HSAIL_SAT_BUILTIN(ENUM, HSAIL_OPCODE, HSAIL_TYPE,	\
+			      NAME, TYPE, ATTRS)
+#endif
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_U64, BRIG_OPCODE_ADD,
+		      BRIG_TYPE_U64, "__hsail_sat_add_u64",
+		      BT_FN_ULONG_ULONG_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_S64, BRIG_OPCODE_ADD,
+		      BRIG_TYPE_S64, "__hsail_sat_add_s64",
+		      BT_FN_LONG_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_U32, BRIG_OPCODE_ADD,
+		      BRIG_TYPE_U32, "__hsail_sat_add_u32",
+		      BT_FN_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_S32, BRIG_OPCODE_ADD,
+		      BRIG_TYPE_S32, "__hsail_sat_add_s32",
+		      BT_FN_INT_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_U16, BRIG_OPCODE_ADD,
+		      BRIG_TYPE_U16, "__hsail_sat_add_u16",
+		      BT_FN_UINT16_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_S16, BRIG_OPCODE_ADD,
+		      BRIG_TYPE_S16, "__hsail_sat_add_s16",
+		      BT_FN_INT16_INT16_INT16, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_U8, BRIG_OPCODE_ADD,
+		      BRIG_TYPE_U8, "__hsail_sat_add_u8",
+		      BT_FN_UINT8_UINT8_UINT8, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_ADD_S8, BRIG_OPCODE_ADD,
+		      BRIG_TYPE_S8, "__hsail_sat_add_s8",
+		      BT_FN_INT8_INT8_INT8, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_U64, BRIG_OPCODE_SUB,
+		      BRIG_TYPE_U64, "__hsail_sat_sub_u64",
+		      BT_FN_ULONG_ULONG_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_S64, BRIG_OPCODE_SUB,
+		      BRIG_TYPE_S64, "__hsail_sat_sub_s64",
+		      BT_FN_LONG_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_U32, BRIG_OPCODE_SUB,
+		      BRIG_TYPE_U32, "__hsail_sat_sub_u32",
+		      BT_FN_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_S32, BRIG_OPCODE_SUB,
+		      BRIG_TYPE_S32, "__hsail_sat_sub_s32",
+		      BT_FN_INT_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_U16, BRIG_OPCODE_SUB,
+		      BRIG_TYPE_U16, "__hsail_sat_sub_u16",
+		      BT_FN_UINT16_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_S16, BRIG_OPCODE_SUB,
+		      BRIG_TYPE_S16, "__hsail_sat_sub_s16",
+		      BT_FN_INT16_INT16_INT16, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_U8, BRIG_OPCODE_SUB,
+		      BRIG_TYPE_U8, "__hsail_sat_sub_u8",
+		      BT_FN_UINT8_UINT8_UINT8, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_SUB_S8, BRIG_OPCODE_SUB,
+		      BRIG_TYPE_S8, "__hsail_sat_sub_s8",
+		      BT_FN_INT8_INT8_INT8, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_U64, BRIG_OPCODE_MUL,
+		      BRIG_TYPE_U64, "__hsail_sat_mul_u64",
+		      BT_FN_ULONG_ULONG_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_S64, BRIG_OPCODE_MUL,
+		      BRIG_TYPE_S64, "__hsail_sat_mul_s64",
+		      BT_FN_LONG_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_U32, BRIG_OPCODE_MUL,
+		      BRIG_TYPE_U32, "__hsail_sat_mul_u32",
+		      BT_FN_UINT_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_S32, BRIG_OPCODE_MUL,
+		      BRIG_TYPE_S32, "__hsail_sat_mul_s32",
+		      BT_FN_INT_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_U16, BRIG_OPCODE_MUL,
+		      BRIG_TYPE_U16, "__hsail_sat_mul_u16",
+		      BT_FN_UINT16_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_S16, BRIG_OPCODE_MUL,
+		      BRIG_TYPE_S16, "__hsail_sat_mul_s16",
+		      BT_FN_INT16_INT16_INT16, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_U8, BRIG_OPCODE_MUL,
+		      BRIG_TYPE_U8, "__hsail_sat_mul_u8",
+		      BT_FN_UINT8_UINT8_UINT8, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_SAT_BUILTIN (BUILT_IN_HSAIL_SAT_MUL_S8, BRIG_OPCODE_MUL,
+		      BRIG_TYPE_S8, "__hsail_sat_mul_s8",
+		      BT_FN_INT8_INT8_INT8, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+#ifndef DEF_HSAIL_INTR_BUILTIN
+#define DEF_HSAIL_INTR_BUILTIN(ENUM, NAME, TYPE, ATTRS)
+#endif
+
+DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_FTZ_F32_F16, "__hsail_ftz_f32_f16",
+		       BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_FTZ_F32, "__hsail_ftz_f32",
+		       BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_FTZ_F64, "__hsail_ftz_f64",
+		       BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_PUSH_FRAME, "__hsail_alloca_push_frame",
+		       BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_POP_FRAME, "__hsail_alloca_pop_frame",
+		       BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_SETWORKITEMID, "__hsail_setworkitemid",
+		       BT_FN_VOID_UINT32_UINT32_PTR, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_LAUNCH_WG_FUNC,
+		       "__hsail_launch_wg_function",
+		       BT_FN_VOID_PTR_PTR_UINT32, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_LAUNCH_KERNEL,
+		       "__hsail_launch_kernel",
+		       BT_FN_VOID_PTR_PTR_PTR, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_F32_TO_F16, "__hsail_f32_to_f16",
+		       BT_FN_UINT16_UINT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_INTR_BUILTIN (BUILT_IN_HSAIL_F16_TO_F32, "__hsail_f16_to_f32",
+		       BT_FN_UINT32_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+#ifndef DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN
+#define DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN(ENUM, HSAIL_DEST_TYPE, HSAIL_SRC_TYPE, \
+	NAME, TYPE, ATTRS)
+#endif
+
+DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U8_F32,
+				BRIG_TYPE_U8, BRIG_TYPE_F32,
+		       		"__hsail_cvt_zeroi_sat_u8_f32",
+				BT_FN_UINT8_FLOAT,
+				ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S8_F32,
+				BRIG_TYPE_S8, BRIG_TYPE_F32,
+		       		"__hsail_cvt_zeroi_sat_s8_f32",
+				BT_FN_INT8_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U16_F32,
+				BRIG_TYPE_U16, BRIG_TYPE_F32,
+		       		"__hsail_cvt_zeroi_sat_u16_f32",
+				BT_FN_UINT16_FLOAT,
+				ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S16_F32,
+				BRIG_TYPE_S16, BRIG_TYPE_F32,
+		       		"__hsail_cvt_zeroi_sat_s16_f32",
+				BT_FN_INT16_FLOAT,
+				ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U32_F32,
+				BRIG_TYPE_U32, BRIG_TYPE_F32,
+		       		"__hsail_cvt_zeroi_sat_u32_f32",
+				BT_FN_UINT32_FLOAT,
+				ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S32_F32,
+				BRIG_TYPE_S32, BRIG_TYPE_F32,
+		       		"__hsail_cvt_zeroi_sat_s32_f32",
+				BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U64_F32,
+				BRIG_TYPE_U64, BRIG_TYPE_F32,
+		       		"__hsail_cvt_zeroi_sat_u64_f32",
+				BT_FN_UINT64_FLOAT,
+				ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S64_F32,
+				BRIG_TYPE_S64, BRIG_TYPE_F32,
+		       		"__hsail_cvt_zeroi_sat_s64_f32",
+				BT_FN_LONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U8_F64,
+				BRIG_TYPE_U8, BRIG_TYPE_F64,
+		       		"__hsail_cvt_zeroi_sat_u8_f64",
+				BT_FN_UINT8_FLOAT,
+				ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S8_F64,
+				BRIG_TYPE_S8, BRIG_TYPE_F64,
+		       		"__hsail_cvt_zeroi_sat_s8_f64",
+				BT_FN_INT8_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U16_F64,
+				BRIG_TYPE_U16, BRIG_TYPE_F64,
+		       		"__hsail_cvt_zeroi_sat_u16_f64",
+				BT_FN_UINT16_FLOAT,
+				ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S16_F64,
+				BRIG_TYPE_S16, BRIG_TYPE_F64,
+		       		"__hsail_cvt_zeroi_sat_s16_f64",
+				BT_FN_INT16_FLOAT,
+				ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U32_F64,
+				BRIG_TYPE_U32, BRIG_TYPE_F64,
+		       		"__hsail_cvt_zeroi_sat_u32_f64",
+				BT_FN_UINT32_FLOAT,
+				ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S32_F64,
+				BRIG_TYPE_S32, BRIG_TYPE_F64,
+		       		"__hsail_cvt_zeroi_sat_s32_f64",
+				BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_U64_F64,
+				BRIG_TYPE_U64, BRIG_TYPE_F64,
+		       		"__hsail_cvt_zeroi_sat_u64_f64",
+				BT_FN_UINT64_FLOAT,
+				ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN (BUILT_IN_HSAIL_CVT_ZEROI_SAT_S64_F64,
+				BRIG_TYPE_S64, BRIG_TYPE_F64,
+		       		"__hsail_cvt_zeroi_sat_s64_f64",
+				BT_FN_LONG_FLOAT,
+				ATTR_CONST_NOTHROW_LEAF_LIST)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/builtin-attrs.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/builtin-attrs.def
new file mode 100644
index 0000000..204141f
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/builtin-attrs.def
@@ -0,0 +1,412 @@
+/* Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Contributed by Joseph Myers <jsm28@cam.ac.uk>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* This header provides a declarative way of describing the attributes
+   that are applied to some built-in functions by default.  Attributes
+   that are meant to be used by user-defined functions but aren't used
+   by any built-ins, or attributes that apply to types or variables
+   but not to functions need not and should not be defined here.
+
+   Before including this header, you must define the following macros.
+   In each case where there is an ENUM, it is an identifier used to
+   reference the tree in subsequent definitions.
+
+   DEF_ATTR_NULL_TREE (ENUM)
+
+     Constructs a NULL_TREE.
+
+   DEF_ATTR_INT (ENUM, VALUE)
+
+     Constructs an INTEGER_CST with value VALUE (an integer representable
+     in HOST_WIDE_INT).
+
+   DEF_ATTR_IDENT (ENUM, STRING)
+
+     Constructs an IDENTIFIER_NODE for STRING.
+
+   DEF_ATTR_TREE_LIST (ENUM, PURPOSE, VALUE, CHAIN)
+
+     Constructs a TREE_LIST with given PURPOSE, VALUE and CHAIN (given
+     as previous ENUM names).  */
+
+DEF_ATTR_NULL_TREE (ATTR_NULL)
+
+/* Construct a tree for a given integer and a list containing it.  */
+#define DEF_ATTR_FOR_INT(VALUE)					\
+  DEF_ATTR_INT (ATTR_##VALUE, VALUE)			\
+  DEF_ATTR_TREE_LIST (ATTR_LIST_##VALUE, ATTR_NULL,	\
+		      ATTR_##VALUE, ATTR_NULL)
+DEF_ATTR_FOR_INT (0)
+DEF_ATTR_FOR_INT (1)
+DEF_ATTR_FOR_INT (2)
+DEF_ATTR_FOR_INT (3)
+DEF_ATTR_FOR_INT (4)
+DEF_ATTR_FOR_INT (5)
+DEF_ATTR_FOR_INT (6)
+#undef DEF_ATTR_FOR_INT
+
+/* Construct a tree for a given string and a list containing it.  */
+#define DEF_ATTR_FOR_STRING(ENUM, VALUE)					\
+  DEF_ATTR_STRING (ATTR_##ENUM, VALUE)			\
+  DEF_ATTR_TREE_LIST (ATTR_LIST_##ENUM, ATTR_NULL,	\
+		      ATTR_##ENUM, ATTR_NULL)
+DEF_ATTR_FOR_STRING (STR1, "1")
+#undef DEF_ATTR_FOR_STRING
+
+/* Construct a tree for a list of two integers.  */
+#define DEF_LIST_INT_INT(VALUE1, VALUE2)				 \
+  DEF_ATTR_TREE_LIST (ATTR_LIST_##VALUE1##_##VALUE2, ATTR_NULL,		 \
+		      ATTR_##VALUE1, ATTR_LIST_##VALUE2)
+DEF_LIST_INT_INT (1,0)
+DEF_LIST_INT_INT (1,2)
+DEF_LIST_INT_INT (1,3)
+DEF_LIST_INT_INT (1,4)
+DEF_LIST_INT_INT (1,5)
+DEF_LIST_INT_INT (2,0)
+DEF_LIST_INT_INT (2,3)
+DEF_LIST_INT_INT (3,0)
+DEF_LIST_INT_INT (3,4)
+DEF_LIST_INT_INT (4,0)
+DEF_LIST_INT_INT (4,5)
+DEF_LIST_INT_INT (5,0)
+DEF_LIST_INT_INT (5,6)
+#undef DEF_LIST_INT_INT
+
+/* Construct trees for identifiers used in built-in function attributes.
+   The construction contributes to startup costs so only attributes that
+   are used to define built-ins should be defined here.  */
+DEF_ATTR_IDENT (ATTR_ALLOC_SIZE, "alloc_size")
+DEF_ATTR_IDENT (ATTR_COLD, "cold")
+DEF_ATTR_IDENT (ATTR_CONST, "const")
+DEF_ATTR_IDENT (ATTR_FORMAT, "format")
+DEF_ATTR_IDENT (ATTR_FORMAT_ARG, "format_arg")
+DEF_ATTR_IDENT (ATTR_MALLOC, "malloc")
+DEF_ATTR_IDENT (ATTR_NONNULL, "nonnull")
+DEF_ATTR_IDENT (ATTR_NORETURN, "noreturn")
+DEF_ATTR_IDENT (ATTR_NOTHROW, "nothrow")
+DEF_ATTR_IDENT (ATTR_LEAF, "leaf")
+DEF_ATTR_IDENT (ATTR_FNSPEC, "fn spec")
+DEF_ATTR_IDENT (ATTR_PRINTF, "printf")
+DEF_ATTR_IDENT (ATTR_ASM_FPRINTF, "asm_fprintf")
+DEF_ATTR_IDENT (ATTR_GCC_DIAG, "gcc_diag")
+DEF_ATTR_IDENT (ATTR_GCC_CDIAG, "gcc_cdiag")
+DEF_ATTR_IDENT (ATTR_GCC_CXXDIAG, "gcc_cxxdiag")
+DEF_ATTR_IDENT (ATTR_PURE, "pure")
+DEF_ATTR_IDENT (ATTR_NOVOPS, "no vops")
+DEF_ATTR_IDENT (ATTR_SCANF, "scanf")
+DEF_ATTR_IDENT (ATTR_SENTINEL, "sentinel")
+DEF_ATTR_IDENT (ATTR_STRFMON, "strfmon")
+DEF_ATTR_IDENT (ATTR_STRFTIME, "strftime")
+DEF_ATTR_IDENT (ATTR_TYPEGENERIC, "type generic")
+DEF_ATTR_IDENT (ATTR_TM_REGPARM, "*tm regparm")
+DEF_ATTR_IDENT (ATTR_TM_TMPURE, "transaction_pure")
+DEF_ATTR_IDENT (ATTR_RETURNS_TWICE, "returns_twice")
+DEF_ATTR_IDENT (ATTR_RETURNS_NONNULL, "returns_nonnull")
+
+DEF_ATTR_TREE_LIST (ATTR_NOVOPS_LIST, ATTR_NOVOPS, ATTR_NULL, ATTR_NULL)
+
+DEF_ATTR_TREE_LIST (ATTR_NOVOPS_LEAF_LIST, ATTR_LEAF, ATTR_NULL, ATTR_NOVOPS_LIST)
+
+DEF_ATTR_TREE_LIST (ATTR_LEAF_LIST, ATTR_LEAF, ATTR_NULL, ATTR_NULL)
+
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_LIST, ATTR_NOTHROW, ATTR_NULL, ATTR_NULL)
+
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_LEAF_LIST, ATTR_LEAF, ATTR_NULL, ATTR_NOTHROW_LIST)
+
+DEF_ATTR_TREE_LIST (ATTR_NOVOPS_NOTHROW_LEAF_LIST, ATTR_NOVOPS, \
+		        ATTR_NULL, ATTR_NOTHROW_LEAF_LIST)
+DEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_LIST, ATTR_CONST,	\
+			ATTR_NULL, ATTR_NOTHROW_LIST)
+DEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_LEAF_LIST, ATTR_CONST,	\
+			ATTR_NULL, ATTR_NOTHROW_LEAF_LIST)
+DEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_LIST, ATTR_PURE,		\
+			ATTR_NULL, ATTR_NOTHROW_LIST)
+DEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_LEAF_LIST, ATTR_PURE,	\
+			ATTR_NULL, ATTR_NOTHROW_LEAF_LIST)
+DEF_ATTR_TREE_LIST (ATTR_NORETURN_NOTHROW_LIST, ATTR_NORETURN,	\
+			ATTR_NULL, ATTR_NOTHROW_LIST)
+DEF_ATTR_TREE_LIST (ATTR_NORETURN_NOTHROW_LEAF_LIST, ATTR_NORETURN,\
+			ATTR_NULL, ATTR_NOTHROW_LEAF_LIST)
+DEF_ATTR_TREE_LIST (ATTR_NORETURN_NOTHROW_LEAF_COLD_LIST, ATTR_COLD,\
+			ATTR_NULL, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+DEF_ATTR_TREE_LIST (ATTR_RT_NOTHROW_LEAF_LIST, ATTR_RETURNS_TWICE,\
+			ATTR_NULL, ATTR_NOTHROW_LEAF_LIST)
+DEF_ATTR_TREE_LIST (ATTR_COLD_NOTHROW_LEAF_LIST, ATTR_COLD,\
+			ATTR_NULL, ATTR_NOTHROW_LEAF_LIST)
+DEF_ATTR_TREE_LIST (ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST, ATTR_COLD,\
+			ATTR_NULL, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+DEF_ATTR_TREE_LIST (ATTR_CONST_NORETURN_NOTHROW_LEAF_LIST, ATTR_CONST,\
+			ATTR_NULL, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+DEF_ATTR_TREE_LIST (ATTR_CONST_NORETURN_NOTHROW_LEAF_COLD_LIST, ATTR_COLD,\
+			ATTR_NULL, ATTR_CONST_NORETURN_NOTHROW_LEAF_LIST)
+DEF_ATTR_TREE_LIST (ATTR_MALLOC_NOTHROW_LIST, ATTR_MALLOC,	\
+			ATTR_NULL, ATTR_NOTHROW_LIST)
+DEF_ATTR_TREE_LIST (ATTR_MALLOC_NOTHROW_LEAF_LIST, ATTR_MALLOC,	\
+			ATTR_NULL, ATTR_NOTHROW_LEAF_LIST)
+DEF_ATTR_TREE_LIST (ATTR_SENTINEL_NOTHROW_LIST, ATTR_SENTINEL,	\
+			ATTR_NULL, ATTR_NOTHROW_LIST)
+DEF_ATTR_TREE_LIST (ATTR_SENTINEL_NOTHROW_LEAF_LIST, ATTR_SENTINEL,	\
+			ATTR_NULL, ATTR_NOTHROW_LEAF_LIST)
+DEF_ATTR_TREE_LIST (ATTR_COLD_CONST_NORETURN_NOTHROW_LEAF_LIST, ATTR_CONST,\
+			ATTR_NULL, ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+
+/* Allocation functions like malloc and realloc whose first argument
+   with _SIZE_1, or second argument with _SIZE_2, specifies the size
+   of the allocated object.  */
+DEF_ATTR_TREE_LIST (ATTR_MALLOC_SIZE_1_NOTHROW_LIST, ATTR_ALLOC_SIZE,	\
+			ATTR_LIST_1, ATTR_MALLOC_NOTHROW_LIST)
+DEF_ATTR_TREE_LIST (ATTR_ALLOC_SIZE_2_NOTHROW_LIST, ATTR_ALLOC_SIZE,	\
+			ATTR_LIST_2, ATTR_MALLOC_NOTHROW_LIST)
+DEF_ATTR_TREE_LIST (ATTR_MALLOC_SIZE_1_NOTHROW_LEAF_LIST, ATTR_ALLOC_SIZE, \
+		        ATTR_LIST_1, ATTR_MALLOC_NOTHROW_LEAF_LIST)
+/* Alloca is just like malloc except that it never returns null.  */
+DEF_ATTR_TREE_LIST (ATTR_ALLOCA_SIZE_1_NOTHROW_LEAF_LIST, ATTR_RETURNS_NONNULL,
+		    ATTR_NULL, ATTR_MALLOC_SIZE_1_NOTHROW_LEAF_LIST)
+
+/* Allocation functions like calloc the product of whose first two arguments
+   specifies the size of the allocated object.  */
+DEF_ATTR_TREE_LIST (ATTR_MALLOC_SIZE_1_2_NOTHROW_LEAF_LIST, ATTR_ALLOC_SIZE, \
+		        ATTR_LIST_1_2, ATTR_MALLOC_NOTHROW_LEAF_LIST)
+
+/* Allocation functions like realloc whose second argument specifies
+   the size of the allocated object.  */
+DEF_ATTR_TREE_LIST (ATTR_ALLOC_SIZE_2_NOTHROW_LEAF_LIST, ATTR_ALLOC_SIZE, \
+		        ATTR_LIST_2, ATTR_NOTHROW_LEAF_LIST)
+
+/* Functions whose pointer parameter(s) are all nonnull.  */
+DEF_ATTR_TREE_LIST (ATTR_NONNULL_LIST, ATTR_NONNULL, ATTR_NULL, ATTR_NULL)
+/* Functions whose first parameter is a nonnull pointer.  */
+DEF_ATTR_TREE_LIST (ATTR_NONNULL_1, ATTR_NONNULL, ATTR_LIST_1, ATTR_NULL)
+/* Functions whose second parameter is a nonnull pointer.  */
+DEF_ATTR_TREE_LIST (ATTR_NONNULL_2, ATTR_NONNULL, ATTR_LIST_2, ATTR_NULL)
+/* Functions whose third parameter is a nonnull pointer.  */
+DEF_ATTR_TREE_LIST (ATTR_NONNULL_3, ATTR_NONNULL, ATTR_LIST_3, ATTR_NULL)
+/* Nothrow functions with the sentinel(1) attribute. */
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_SENTINEL_1, ATTR_SENTINEL, ATTR_LIST_1, \
+			ATTR_NOTHROW_LIST)
+/* Nothrow functions whose pointer parameter(s) are all nonnull.  */
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL, ATTR_NONNULL, ATTR_NULL, \
+			ATTR_NOTHROW_LIST)
+/* Nothrow leaf functions whose pointer parameter(s) are all nonnull.  */
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_LEAF, ATTR_NONNULL, ATTR_NULL, \
+			ATTR_NOTHROW_LEAF_LIST)
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_LEAF_LIST, ATTR_LEAF, ATTR_NULL, ATTR_NOTHROW_NONNULL_LEAF)
+/* Nothrow functions whose first parameter is a nonnull pointer.  */
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_1, ATTR_NONNULL, ATTR_LIST_1, \
+			ATTR_NOTHROW_LIST)
+/* Nothrow functions whose second parameter is a nonnull pointer.  */
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_2, ATTR_NONNULL, ATTR_LIST_2, \
+			ATTR_NOTHROW_LIST)
+/* Nothrow functions whose third parameter is a nonnull pointer.  */
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_3, ATTR_NONNULL, ATTR_LIST_3, \
+			ATTR_NOTHROW_LIST)
+/* Nothrow functions whose fourth parameter is a nonnull pointer.  */
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_4, ATTR_NONNULL, ATTR_LIST_4, \
+			ATTR_NOTHROW_LIST)
+/* Nothrow functions whose fifth parameter is a nonnull pointer.  */
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_5, ATTR_NONNULL, ATTR_LIST_5, \
+			ATTR_NOTHROW_LIST)
+
+/* Same as ATTR_NONNULL_1.  */
+DEF_ATTR_TREE_LIST (ATTR_NONNULL_1_1, ATTR_NONNULL, ATTR_LIST_1, ATTR_NULL)
+/* Functions like {v,}fprintf whose first and second parameters are
+   nonnull pointers.  As cancellation points the functions are not
+   nothrow.  */
+DEF_ATTR_TREE_LIST (ATTR_NONNULL_1_2, ATTR_NONNULL, ATTR_LIST_1_2, ATTR_NULL)
+/* The following don't have {v,}fprintf forms.  They exist only to
+   make it possible to declare {v,}{f,s}printf attributes using
+   the same macro.  */
+DEF_ATTR_TREE_LIST (ATTR_NONNULL_1_3, ATTR_NONNULL, ATTR_LIST_1_3, ATTR_NULL)
+DEF_ATTR_TREE_LIST (ATTR_NONNULL_1_4, ATTR_NONNULL, ATTR_LIST_1_4, ATTR_NULL)
+DEF_ATTR_TREE_LIST (ATTR_NONNULL_1_5, ATTR_NONNULL, ATTR_LIST_1_5, ATTR_NULL)
+
+/* Same as ATTR_NOTHROW_NONNULL_1.  */
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_1_1, ATTR_NONNULL, ATTR_LIST_1,
+		    ATTR_NOTHROW_LIST)
+/* Nothrow functions like {v,}sprintf whose first and second parameters
+   are nonnull pointers.  */
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_1_2, ATTR_NONNULL, ATTR_LIST_1_2, \
+		    ATTR_NOTHROW_LIST)
+/* Nothrow functions like {v,}snprintf whose first and third parameters
+   are nonnull pointers.  */
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_1_3, ATTR_NONNULL, ATTR_LIST_1_3, \
+		    ATTR_NOTHROW_LIST)
+/* Nothrow functions like {v,}sprintf_chk whose first and fourth parameters
+   are nonnull pointers.  */
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_1_4, ATTR_NONNULL, ATTR_LIST_1_4, \
+		    ATTR_NOTHROW_LIST)
+/* Nothrow functions like {v,}snprintf_chk whose first and fifth parameters
+   are nonnull pointers.  */
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_1_5, ATTR_NONNULL, ATTR_LIST_1_5, \
+		    ATTR_NOTHROW_LIST)
+		
+/* Nothrow leaf functions which are type-generic.  */
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_TYPEGENERIC_LEAF, ATTR_TYPEGENERIC, ATTR_NULL, \
+			ATTR_NOTHROW_LEAF_LIST)
+/* Nothrow nonnull leaf functions that are type-generic.  */
+DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_TYPEGENERIC_LEAF,
+		    ATTR_TYPEGENERIC, ATTR_NULL,
+		    ATTR_NOTHROW_NONNULL_LEAF)
+/* Nothrow const functions whose pointer parameter(s) are all nonnull.  */
+DEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_NONNULL, ATTR_CONST, ATTR_NULL, \
+			ATTR_NOTHROW_NONNULL)
+/* Nothrow leaf functions whose pointer parameter(s) are all nonnull,
+   and which return their first argument.  */
+DEF_ATTR_TREE_LIST (ATTR_RET1_NOTHROW_NONNULL_LEAF, ATTR_FNSPEC, ATTR_LIST_STR1, \
+			ATTR_NOTHROW_NONNULL_LEAF)
+/* Nothrow leaf functions whose pointer parameter(s) are all nonnull,
+   and return value is also nonnull.  */
+DEF_ATTR_TREE_LIST (ATTR_RETNONNULL_NOTHROW_LEAF, ATTR_RETURNS_NONNULL, ATTR_NULL, \
+			ATTR_NOTHROW_NONNULL_LEAF)
+/* Nothrow const leaf functions whose pointer parameter(s) are all nonnull.  */
+DEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_NONNULL_LEAF, ATTR_CONST, ATTR_NULL, \
+			ATTR_NOTHROW_NONNULL_LEAF)
+/* Nothrow const functions which are type-generic.  */
+DEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_TYPEGENERIC, ATTR_TYPEGENERIC, ATTR_NULL, \
+			ATTR_CONST_NOTHROW_LIST)
+/* Nothrow const leaf functions which are type-generic.  */
+DEF_ATTR_TREE_LIST (ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF, ATTR_TYPEGENERIC, ATTR_NULL, \
+			ATTR_CONST_NOTHROW_LEAF_LIST)
+/* Nothrow pure functions whose pointer parameter(s) are all nonnull.  */
+DEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_NONNULL, ATTR_PURE, ATTR_NULL, \
+			ATTR_NOTHROW_NONNULL)
+/* Nothrow pure leaf functions whose pointer parameter(s) are all nonnull.  */
+DEF_ATTR_TREE_LIST (ATTR_PURE_NOTHROW_NONNULL_LEAF, ATTR_PURE, ATTR_NULL, \
+			ATTR_NOTHROW_NONNULL_LEAF)
+/* Nothrow malloc functions whose pointer parameter(s) are all nonnull.  */
+DEF_ATTR_TREE_LIST (ATTR_MALLOC_NOTHROW_NONNULL, ATTR_MALLOC, ATTR_NULL, \
+			ATTR_NOTHROW_NONNULL)
+/* Nothrow malloc leaf functions whose pointer parameter(s) are all nonnull.  */
+DEF_ATTR_TREE_LIST (ATTR_MALLOC_NOTHROW_NONNULL_LEAF, ATTR_MALLOC, ATTR_NULL, \
+			ATTR_NOTHROW_NONNULL_LEAF)
+
+/* Construct a tree for the format attribute (and implicitly nonnull).  */
+#define DEF_FORMAT_ATTRIBUTE(TYPE, FA, VALUES)				 \
+  DEF_ATTR_TREE_LIST (ATTR_##TYPE##_##VALUES, ATTR_NULL,		 \
+		      ATTR_##TYPE, ATTR_LIST_##VALUES)			 \
+  DEF_ATTR_TREE_LIST (ATTR_FORMAT_##TYPE##_##VALUES, ATTR_FORMAT,	 \
+		      ATTR_##TYPE##_##VALUES, ATTR_NONNULL_##FA)
+
+/* Construct a tree for the format and nothrow attributes (format
+   implies nonnull).  */
+#define DEF_FORMAT_ATTRIBUTE_NOTHROW(TYPE, FA, VALUES)			 \
+  DEF_ATTR_TREE_LIST (ATTR_##TYPE##_##VALUES, ATTR_NULL,		 \
+		      ATTR_##TYPE, ATTR_LIST_##VALUES)			 \
+  DEF_ATTR_TREE_LIST (ATTR_FORMAT_##TYPE##_NOTHROW_##VALUES, ATTR_FORMAT,\
+		      ATTR_##TYPE##_##VALUES, ATTR_NOTHROW_NONNULL_##FA)
+
+/* Construct one tree for the format attribute and another for the format
+   and nothrow attributes (in both cases format implies nonnull).  */
+#define DEF_FORMAT_ATTRIBUTE_BOTH(TYPE, FA, VALUES)			 \
+  DEF_ATTR_TREE_LIST (ATTR_##TYPE##_##VALUES, ATTR_NULL,		 \
+		      ATTR_##TYPE, ATTR_LIST_##VALUES)			 \
+  DEF_ATTR_TREE_LIST (ATTR_FORMAT_##TYPE##_##VALUES, ATTR_FORMAT,	 \
+		      ATTR_##TYPE##_##VALUES, ATTR_NONNULL_##FA)	 \
+  DEF_ATTR_TREE_LIST (ATTR_FORMAT_##TYPE##_NOTHROW_##VALUES, ATTR_FORMAT,\
+		      ATTR_##TYPE##_##VALUES, ATTR_NOTHROW_NONNULL_##FA)
+
+/* Construct a pair of trees for the nonnull attribute for the first
+   argument, plus format printf attribute (format implies nonnull):
+   the first ordinary and the second nothrow.  */
+#define DEF_FORMAT_ATTRIBUTE_NONNULL(TYPE, FA, VALUES)			 \
+  DEF_ATTR_TREE_LIST (ATTR_NONNULL_1_FORMAT_##TYPE##_##VALUES,   	 \
+  		      ATTR_FORMAT, ATTR_##TYPE##_##VALUES, 	 	 \
+		      ATTR_NONNULL_1_##FA)				 \
+  DEF_ATTR_TREE_LIST (ATTR_NOTHROW_NONNULL_1_FORMAT_##TYPE##_##VALUES,   \
+  		      ATTR_FORMAT, ATTR_##TYPE##_##VALUES, 	 	 \
+		      ATTR_NOTHROW_NONNULL_1_##FA)
+
+DEF_FORMAT_ATTRIBUTE(PRINTF,1,1_0)
+DEF_FORMAT_ATTRIBUTE(PRINTF,1,1_2)
+DEF_FORMAT_ATTRIBUTE_BOTH(PRINTF,2,2_0)
+DEF_FORMAT_ATTRIBUTE_BOTH(PRINTF,2,2_3)
+DEF_FORMAT_ATTRIBUTE_BOTH(PRINTF,3,3_0)
+DEF_FORMAT_ATTRIBUTE_BOTH(PRINTF,3,3_4)
+DEF_FORMAT_ATTRIBUTE_NOTHROW(PRINTF,4,4_0)
+DEF_FORMAT_ATTRIBUTE_NOTHROW(PRINTF,4,4_5)
+DEF_FORMAT_ATTRIBUTE_NOTHROW(PRINTF,5,5_0)
+DEF_FORMAT_ATTRIBUTE_NOTHROW(PRINTF,5,5_6)
+
+/* Attributes for fprintf(f, f, va).  */
+DEF_FORMAT_ATTRIBUTE_NONNULL(PRINTF,1,1_2)
+/* Attributes for v{f,s}printf(d, f, va).  vsprintf is nothrow, vfprintf
+   is not.  */
+DEF_FORMAT_ATTRIBUTE_NONNULL(PRINTF,2,2_0)
+/* Attributes for {f,s}printf(d, f, ...).  sprintf is nothrow, fprintf
+   is not.  */
+DEF_FORMAT_ATTRIBUTE_NONNULL(PRINTF,2,2_3)
+/* Attributes for vprintf_chk.  */
+DEF_FORMAT_ATTRIBUTE_NONNULL(PRINTF,3,3_0)
+/* Attributes for printf_chk.  */
+DEF_FORMAT_ATTRIBUTE_NONNULL(PRINTF,3,3_4)
+/* Attributes for v{f,s}printf_chk(d, t, bos, f, va).  vsprintf_chk is
+   nothrow, vfprintf_chk is not.  */
+DEF_FORMAT_ATTRIBUTE_NONNULL(PRINTF,4,4_0)
+/* Attributes for {f,s}printf_chk(d, t, bos, f, ...).  sprintf_chk is
+   nothrow, fprintf_chk is not.  */
+DEF_FORMAT_ATTRIBUTE_NONNULL(PRINTF,4,4_5)
+
+DEF_FORMAT_ATTRIBUTE(SCANF,1,1_0)
+DEF_FORMAT_ATTRIBUTE(SCANF,1,1_2)
+DEF_FORMAT_ATTRIBUTE_BOTH(SCANF,2,2_0)
+DEF_FORMAT_ATTRIBUTE_BOTH(SCANF,2,2_3)
+DEF_FORMAT_ATTRIBUTE_NOTHROW(STRFTIME,3,3_0)
+DEF_FORMAT_ATTRIBUTE_NOTHROW(STRFMON,3,3_4)
+#undef DEF_FORMAT_ATTRIBUTE
+#undef DEF_FORMAT_ATTRIBUTE_NOTHROW
+#undef DEF_FORMAT_ATTRIBUTE_BOTH
+
+/* Transactional memory variants of the above.  */
+
+DEF_ATTR_TREE_LIST (ATTR_TM_NOTHROW_LIST,
+		    ATTR_TM_REGPARM, ATTR_NULL, ATTR_NOTHROW_LIST)
+DEF_ATTR_TREE_LIST (ATTR_TM_TMPURE_NOTHROW_LIST,
+		    ATTR_TM_TMPURE, ATTR_NULL, ATTR_TM_NOTHROW_LIST)
+DEF_ATTR_TREE_LIST (ATTR_TM_PURE_TMPURE_NOTHROW_LIST,
+		    ATTR_PURE, ATTR_NULL, ATTR_TM_TMPURE_NOTHROW_LIST)
+DEF_ATTR_TREE_LIST (ATTR_TM_NORETURN_NOTHROW_LIST,
+		    ATTR_TM_REGPARM, ATTR_NULL, ATTR_NORETURN_NOTHROW_LIST)
+DEF_ATTR_TREE_LIST (ATTR_TM_CONST_NOTHROW_LIST,
+		    ATTR_TM_REGPARM, ATTR_NULL, ATTR_CONST_NOTHROW_LIST)
+DEF_ATTR_TREE_LIST (ATTR_TM_NOTHROW_RT_LIST,
+		    ATTR_RETURNS_TWICE, ATTR_NULL, ATTR_TM_NOTHROW_LIST)
+
+/* Same attributes used for BUILT_IN_MALLOC except with TM_PURE thrown in.  */
+DEF_ATTR_TREE_LIST (ATTR_TMPURE_MALLOC_NOTHROW_LIST,
+		   ATTR_TM_TMPURE, ATTR_NULL, ATTR_MALLOC_NOTHROW_LIST)
+/* Same attributes used for BUILT_IN_FREE except with TM_PURE thrown in.  */
+DEF_ATTR_TREE_LIST (ATTR_TMPURE_NOTHROW_LIST,
+		   ATTR_TM_TMPURE, ATTR_NULL, ATTR_NOTHROW_LIST)
+
+DEF_ATTR_TREE_LIST (ATTR_TMPURE_NOTHROW_LEAF_LIST,
+		    ATTR_TM_TMPURE, ATTR_NULL, ATTR_NOTHROW_LEAF_LIST)
+DEF_ATTR_TREE_LIST (ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST,
+		    ATTR_TM_TMPURE, ATTR_NULL, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+DEF_ATTR_TREE_LIST (ATTR_TMPURE_NORETURN_NOTHROW_LEAF_COLD_LIST,
+		    ATTR_COLD, ATTR_NULL,
+		    ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST)
+
+/* Construct a tree for a format_arg attribute.  */
+#define DEF_FORMAT_ARG_ATTRIBUTE(FA)					\
+  DEF_ATTR_TREE_LIST (ATTR_FORMAT_ARG_##FA, ATTR_FORMAT_ARG,		\
+		      ATTR_LIST_##FA, ATTR_NOTHROW_NONNULL_##FA)
+DEF_FORMAT_ARG_ATTRIBUTE(1)
+DEF_FORMAT_ARG_ATTRIBUTE(2)
+#undef DEF_FORMAT_ARG_ATTRIBUTE
+
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/builtin-types.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/builtin-types.def
new file mode 100644
index 0000000..e5c9e06
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/builtin-types.def
@@ -0,0 +1,856 @@
+/* Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* This header provides a declarative way of describing the types that
+   are used when declaring builtin functions.
+
+   Before including this header, you must define the following macros:
+
+   DEF_PRIMITIVE_TYPE (ENUM, TYPE)
+
+     The ENUM is an identifier indicating which type is being defined.
+     TYPE is an expression for a `tree' that represents the type.
+
+   DEF_FUNCTION_TYPE_0 (ENUM, RETURN)
+   DEF_FUNCTION_TYPE_1 (ENUM, RETURN, ARG1)
+   DEF_FUNCTION_TYPE_2 (ENUM, RETURN, ARG1, ARG2)
+   [...]
+
+     These macros describe function types.  ENUM is as above.  The
+     RETURN type is one of the enumerals already defined.  ARG1, ARG2,
+     etc, give the types of the arguments, similarly.
+
+   DEF_FUNCTION_TYPE_VAR_0 (ENUM, RETURN)
+   DEF_FUNCTION_TYPE_VAR_1 (ENUM, RETURN, ARG1)
+   DEF_FUNCTION_TYPE_VAR_2 (ENUM, RETURN, ARG1, ARG2)
+   [...]
+
+     Similar, but for function types that take variable arguments.
+     For example:
+
+       DEF_FUNCTION_TYPE_1 (BT_INT_DOUBLE, BT_INT, BT_DOUBLE)
+
+     describes the type `int ()(double)', using the enumeral
+     BT_INT_DOUBLE, whereas:
+
+       DEF_FUNCTION_TYPE_VAR_1 (BT_INT_DOUBLE_VAR, BT_INT, BT_DOUBLE)
+
+     describes the type `int ()(double, ...)'.
+
+  DEF_POINTER_TYPE (ENUM, TYPE)
+
+    This macro describes a pointer type.  ENUM is as above; TYPE is
+    the type pointed to.  */
+
+DEF_PRIMITIVE_TYPE (BT_VOID, void_type_node)
+DEF_PRIMITIVE_TYPE (BT_BOOL, boolean_type_node)
+DEF_PRIMITIVE_TYPE (BT_INT, integer_type_node)
+DEF_PRIMITIVE_TYPE (BT_UINT, unsigned_type_node)
+DEF_PRIMITIVE_TYPE (BT_LONG, long_integer_type_node)
+DEF_PRIMITIVE_TYPE (BT_ULONG, long_unsigned_type_node)
+DEF_PRIMITIVE_TYPE (BT_LONGLONG, long_long_integer_type_node)
+DEF_PRIMITIVE_TYPE (BT_ULONGLONG, long_long_unsigned_type_node)
+DEF_PRIMITIVE_TYPE (BT_INTMAX, intmax_type_node)
+DEF_PRIMITIVE_TYPE (BT_UINTMAX, uintmax_type_node)
+DEF_PRIMITIVE_TYPE (BT_INT8, signed_char_type_node)
+DEF_PRIMITIVE_TYPE (BT_INT16, short_integer_type_node)
+DEF_PRIMITIVE_TYPE (BT_UINT8, unsigned_char_type_node)
+DEF_PRIMITIVE_TYPE (BT_UINT16, uint16_type_node)
+DEF_PRIMITIVE_TYPE (BT_UINT32, uint32_type_node)
+DEF_PRIMITIVE_TYPE (BT_UINT64, uint64_type_node)
+DEF_PRIMITIVE_TYPE (BT_WORD, (*lang_hooks.types.type_for_mode) (word_mode, 1))
+DEF_PRIMITIVE_TYPE (BT_UNWINDWORD, (*lang_hooks.types.type_for_mode)
+				    (targetm.unwind_word_mode (), 1))
+DEF_PRIMITIVE_TYPE (BT_FLOAT, float_type_node)
+DEF_PRIMITIVE_TYPE (BT_DOUBLE, double_type_node)
+DEF_PRIMITIVE_TYPE (BT_LONGDOUBLE, long_double_type_node)
+DEF_PRIMITIVE_TYPE (BT_FLOAT16, (float16_type_node
+				 ? float16_type_node
+				 : error_mark_node))
+DEF_PRIMITIVE_TYPE (BT_FLOAT32, (float32_type_node
+				 ? float32_type_node
+				 : error_mark_node))
+DEF_PRIMITIVE_TYPE (BT_FLOAT64, (float64_type_node
+				 ? float64_type_node
+				 : error_mark_node))
+DEF_PRIMITIVE_TYPE (BT_FLOAT128, (float128_type_node
+				  ? float128_type_node
+				  : error_mark_node))
+DEF_PRIMITIVE_TYPE (BT_FLOAT32X, (float32x_type_node
+				  ? float32x_type_node
+				  : error_mark_node))
+DEF_PRIMITIVE_TYPE (BT_FLOAT64X, (float64x_type_node
+				  ? float64x_type_node
+				  : error_mark_node))
+DEF_PRIMITIVE_TYPE (BT_FLOAT128X, (float128x_type_node
+				   ? float128x_type_node
+				   : error_mark_node))
+DEF_PRIMITIVE_TYPE (BT_COMPLEX_FLOAT, complex_float_type_node)
+DEF_PRIMITIVE_TYPE (BT_COMPLEX_DOUBLE, complex_double_type_node)
+DEF_PRIMITIVE_TYPE (BT_COMPLEX_LONGDOUBLE, complex_long_double_type_node)
+
+DEF_PRIMITIVE_TYPE (BT_PTR, ptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_FILEPTR, fileptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_CONST_TM_PTR, const_tm_ptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_FENV_T_PTR, fenv_t_ptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_CONST_FENV_T_PTR, const_fenv_t_ptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_FEXCEPT_T_PTR, fexcept_t_ptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_CONST_FEXCEPT_T_PTR, const_fexcept_t_ptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_CONST_PTR, const_ptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_VOLATILE_PTR,
+		    build_pointer_type
+		     (build_qualified_type (void_type_node,
+					    TYPE_QUAL_VOLATILE)))
+DEF_PRIMITIVE_TYPE (BT_CONST_VOLATILE_PTR,
+		    build_pointer_type
+		     (build_qualified_type (void_type_node,
+					  TYPE_QUAL_VOLATILE|TYPE_QUAL_CONST)))
+DEF_PRIMITIVE_TYPE (BT_PTRMODE, (*lang_hooks.types.type_for_mode)(ptr_mode, 0))
+DEF_PRIMITIVE_TYPE (BT_INT_PTR, integer_ptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_FLOAT_PTR, float_ptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_DOUBLE_PTR, double_ptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_CONST_DOUBLE_PTR,
+		    build_pointer_type
+		     (build_qualified_type (double_type_node,
+		     			    TYPE_QUAL_CONST)))
+DEF_PRIMITIVE_TYPE (BT_LONGDOUBLE_PTR, long_double_ptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_PID, pid_type_node)
+DEF_PRIMITIVE_TYPE (BT_SIZE, size_type_node)
+DEF_PRIMITIVE_TYPE (BT_SSIZE, signed_size_type_node)
+DEF_PRIMITIVE_TYPE (BT_WINT, wint_type_node)
+DEF_PRIMITIVE_TYPE (BT_STRING, string_type_node)
+DEF_PRIMITIVE_TYPE (BT_CONST_STRING, const_string_type_node)
+
+DEF_PRIMITIVE_TYPE (BT_DFLOAT32, dfloat32_type_node)
+DEF_PRIMITIVE_TYPE (BT_DFLOAT64, dfloat64_type_node)
+DEF_PRIMITIVE_TYPE (BT_DFLOAT128, dfloat128_type_node)
+DEF_PRIMITIVE_TYPE (BT_DFLOAT32_PTR, dfloat32_ptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_DFLOAT64_PTR, dfloat64_ptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_DFLOAT128_PTR, dfloat128_ptr_type_node)
+
+DEF_PRIMITIVE_TYPE (BT_VALIST_REF, va_list_ref_type_node)
+DEF_PRIMITIVE_TYPE (BT_VALIST_ARG, va_list_arg_type_node)
+
+DEF_PRIMITIVE_TYPE (BT_I1, builtin_type_for_size (BITS_PER_UNIT*1, 1))
+DEF_PRIMITIVE_TYPE (BT_I2, builtin_type_for_size (BITS_PER_UNIT*2, 1))
+DEF_PRIMITIVE_TYPE (BT_I4, builtin_type_for_size (BITS_PER_UNIT*4, 1))
+DEF_PRIMITIVE_TYPE (BT_I8, builtin_type_for_size (BITS_PER_UNIT*8, 1))
+DEF_PRIMITIVE_TYPE (BT_I16, builtin_type_for_size (BITS_PER_UNIT*16, 1))
+
+/* The C type `char * const *'.  */
+DEF_PRIMITIVE_TYPE (BT_PTR_CONST_STRING,
+		    build_pointer_type
+		     (build_qualified_type (string_type_node,
+					    TYPE_QUAL_CONST)))
+
+DEF_POINTER_TYPE (BT_PTR_UINT, BT_UINT)
+DEF_POINTER_TYPE (BT_PTR_LONG, BT_LONG)
+DEF_POINTER_TYPE (BT_PTR_ULONG, BT_ULONG)
+DEF_POINTER_TYPE (BT_PTR_LONGLONG, BT_LONGLONG)
+DEF_POINTER_TYPE (BT_PTR_ULONGLONG, BT_ULONGLONG)
+DEF_POINTER_TYPE (BT_PTR_PTR, BT_PTR)
+
+DEF_FUNCTION_TYPE_0 (BT_FN_VOID, BT_VOID)
+DEF_FUNCTION_TYPE_0 (BT_FN_BOOL, BT_BOOL)
+DEF_FUNCTION_TYPE_0 (BT_FN_PTR, BT_PTR)
+DEF_FUNCTION_TYPE_0 (BT_FN_CONST_STRING, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_0 (BT_FN_PID, BT_PID)
+DEF_FUNCTION_TYPE_0 (BT_FN_INT, BT_INT)
+DEF_FUNCTION_TYPE_0 (BT_FN_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_0 (BT_FN_ULONG, BT_ULONG)
+DEF_FUNCTION_TYPE_0 (BT_FN_FLOAT, BT_FLOAT)
+DEF_FUNCTION_TYPE_0 (BT_FN_DOUBLE, BT_DOUBLE)
+/* For "long double" we use LONGDOUBLE (not LONG_DOUBLE) to
+   distinguish it from two types in sequence, "long" followed by
+   "double".  */
+DEF_FUNCTION_TYPE_0 (BT_FN_LONGDOUBLE, BT_LONGDOUBLE)
+DEF_FUNCTION_TYPE_0 (BT_FN_FLOAT16, BT_FLOAT16)
+DEF_FUNCTION_TYPE_0 (BT_FN_FLOAT32, BT_FLOAT32)
+DEF_FUNCTION_TYPE_0 (BT_FN_FLOAT64, BT_FLOAT64)
+DEF_FUNCTION_TYPE_0 (BT_FN_FLOAT128, BT_FLOAT128)
+DEF_FUNCTION_TYPE_0 (BT_FN_FLOAT32X, BT_FLOAT32X)
+DEF_FUNCTION_TYPE_0 (BT_FN_FLOAT64X, BT_FLOAT64X)
+DEF_FUNCTION_TYPE_0 (BT_FN_FLOAT128X, BT_FLOAT128X)
+DEF_FUNCTION_TYPE_0 (BT_FN_DFLOAT32, BT_DFLOAT32)
+DEF_FUNCTION_TYPE_0 (BT_FN_DFLOAT64, BT_DFLOAT64)
+DEF_FUNCTION_TYPE_0 (BT_FN_DFLOAT128, BT_DFLOAT128)
+
+DEF_FUNCTION_TYPE_1 (BT_FN_LONG_LONG, BT_LONG, BT_LONG)
+DEF_FUNCTION_TYPE_1 (BT_FN_LONGLONG_LONGLONG, BT_LONGLONG, BT_LONGLONG)
+DEF_FUNCTION_TYPE_1 (BT_FN_INTMAX_INTMAX, BT_INTMAX, BT_INTMAX)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_FLOAT, BT_FLOAT, BT_FLOAT)
+DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_DOUBLE, BT_DOUBLE, BT_DOUBLE)
+DEF_FUNCTION_TYPE_1 (BT_FN_LONGDOUBLE_LONGDOUBLE,
+		     BT_LONGDOUBLE, BT_LONGDOUBLE)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT16_FLOAT16, BT_FLOAT16, BT_FLOAT16)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT32_FLOAT32, BT_FLOAT32, BT_FLOAT32)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT64_FLOAT64, BT_FLOAT64, BT_FLOAT64)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT128_FLOAT128, BT_FLOAT128, BT_FLOAT128)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT32X_FLOAT32X, BT_FLOAT32X, BT_FLOAT32X)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT64X_FLOAT64X, BT_FLOAT64X, BT_FLOAT64X)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT128X_FLOAT128X, BT_FLOAT128X, BT_FLOAT128X)
+DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT,
+		     BT_COMPLEX_FLOAT, BT_COMPLEX_FLOAT)
+DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
+		     BT_COMPLEX_DOUBLE, BT_COMPLEX_DOUBLE)
+DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE,
+		     BT_COMPLEX_LONGDOUBLE, BT_COMPLEX_LONGDOUBLE)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_COMPLEX_FLOAT,
+		     BT_FLOAT, BT_COMPLEX_FLOAT)
+DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_COMPLEX_DOUBLE,
+		     BT_DOUBLE, BT_COMPLEX_DOUBLE)
+DEF_FUNCTION_TYPE_1 (BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE,
+		     BT_LONGDOUBLE, BT_COMPLEX_LONGDOUBLE)
+DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_FLOAT_FLOAT,
+		     BT_COMPLEX_FLOAT, BT_FLOAT)
+DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_DOUBLE_DOUBLE,
+		     BT_COMPLEX_DOUBLE, BT_DOUBLE)
+DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_LONGDOUBLE_LONGDOUBLE,
+		     BT_COMPLEX_LONGDOUBLE, BT_LONGDOUBLE)
+DEF_FUNCTION_TYPE_1 (BT_FN_PTR_UINT, BT_PTR, BT_UINT)
+DEF_FUNCTION_TYPE_1 (BT_FN_PTR_SIZE, BT_PTR, BT_SIZE)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_INT, BT_INT, BT_INT)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_UINT, BT_INT, BT_UINT)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_LONG, BT_INT, BT_LONG)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_ULONG, BT_INT, BT_ULONG)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_LONGLONG, BT_INT, BT_LONGLONG)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_ULONGLONG, BT_INT, BT_ULONGLONG)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_INTMAX, BT_INT, BT_INTMAX)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_UINTMAX, BT_INT, BT_UINTMAX)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_PTR, BT_INT, BT_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_FLOAT, BT_INT, BT_FLOAT)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_DOUBLE, BT_INT, BT_DOUBLE)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_LONGDOUBLE, BT_INT, BT_LONGDOUBLE)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_DFLOAT32, BT_INT, BT_DFLOAT32)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_DFLOAT64, BT_INT, BT_DFLOAT64)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_DFLOAT128, BT_INT, BT_DFLOAT128)
+DEF_FUNCTION_TYPE_1 (BT_FN_LONG_FLOAT, BT_LONG, BT_FLOAT)
+DEF_FUNCTION_TYPE_1 (BT_FN_LONG_DOUBLE, BT_LONG, BT_DOUBLE)
+DEF_FUNCTION_TYPE_1 (BT_FN_LONG_LONGDOUBLE, BT_LONG, BT_LONGDOUBLE)
+DEF_FUNCTION_TYPE_1 (BT_FN_LONGLONG_FLOAT, BT_LONGLONG, BT_FLOAT)
+DEF_FUNCTION_TYPE_1 (BT_FN_LONGLONG_DOUBLE, BT_LONGLONG, BT_DOUBLE)
+DEF_FUNCTION_TYPE_1 (BT_FN_LONGLONG_LONGDOUBLE, BT_LONGLONG, BT_LONGDOUBLE)
+DEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTR, BT_VOID, BT_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_SIZE_CONST_STRING, BT_SIZE, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_CONST_STRING, BT_INT, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_1 (BT_FN_PTR_PTR, BT_PTR, BT_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_VOID_VALIST_REF, BT_VOID, BT_VALIST_REF)
+DEF_FUNCTION_TYPE_1 (BT_FN_VOID_INT, BT_VOID, BT_INT)
+DEF_FUNCTION_TYPE_1 (BT_FN_VOID_BOOL, BT_VOID, BT_BOOL)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_CONST_STRING, BT_FLOAT, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_CONST_STRING, BT_DOUBLE, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_1 (BT_FN_LONGDOUBLE_CONST_STRING,
+		     BT_LONGDOUBLE, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT16_CONST_STRING, BT_FLOAT16, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT32_CONST_STRING, BT_FLOAT32, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT64_CONST_STRING, BT_FLOAT64, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT128_CONST_STRING, BT_FLOAT128, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT32X_CONST_STRING, BT_FLOAT32X, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT64X_CONST_STRING, BT_FLOAT64X, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT128X_CONST_STRING, BT_FLOAT128X, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_1 (BT_FN_DFLOAT32_CONST_STRING, BT_DFLOAT32, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_1 (BT_FN_DFLOAT64_CONST_STRING, BT_DFLOAT64, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_1 (BT_FN_DFLOAT128_CONST_STRING,
+		     BT_DFLOAT128, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_1 (BT_FN_STRING_CONST_STRING, BT_STRING, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_1 (BT_FN_UNWINDWORD_PTR, BT_UNWINDWORD, BT_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_WINT, BT_INT, BT_WINT)
+DEF_FUNCTION_TYPE_1 (BT_FN_WINT_WINT, BT_WINT, BT_WINT)
+DEF_FUNCTION_TYPE_1 (BT_FN_DFLOAT32_DFLOAT32, BT_DFLOAT32, BT_DFLOAT32)
+DEF_FUNCTION_TYPE_1 (BT_FN_DFLOAT64_DFLOAT64, BT_DFLOAT64, BT_DFLOAT64)
+DEF_FUNCTION_TYPE_1 (BT_FN_DFLOAT128_DFLOAT128, BT_DFLOAT128, BT_DFLOAT128)
+DEF_FUNCTION_TYPE_1 (BT_FN_VOID_VPTR, BT_VOID, BT_VOLATILE_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTRPTR, BT_VOID, BT_PTR_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_VOID_CONST_PTR, BT_VOID, BT_CONST_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_UINT_UINT, BT_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_1 (BT_FN_UINT_INT, BT_UINT, BT_INT)
+DEF_FUNCTION_TYPE_1 (BT_FN_UINT_ULONG, BT_UINT, BT_ULONG)
+DEF_FUNCTION_TYPE_1 (BT_FN_UINT_LONG, BT_UINT, BT_LONG)
+DEF_FUNCTION_TYPE_1 (BT_FN_UINT_PTR, BT_UINT, BT_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_UINT_CONST_PTR, BT_UINT, BT_CONST_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_ULONG_PTR, BT_ULONG, BT_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_ULONG_CONST_PTR, BT_ULONG, BT_CONST_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_ULONG_ULONG, BT_ULONG, BT_ULONG)
+DEF_FUNCTION_TYPE_1 (BT_FN_ULONGLONG_ULONGLONG, BT_ULONGLONG, BT_ULONGLONG)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT8_FLOAT, BT_INT8, BT_FLOAT)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT16_FLOAT, BT_INT16, BT_FLOAT)
+DEF_FUNCTION_TYPE_1 (BT_FN_UINT32_FLOAT, BT_UINT32, BT_FLOAT)
+DEF_FUNCTION_TYPE_1 (BT_FN_UINT16_FLOAT, BT_UINT16, BT_FLOAT)
+DEF_FUNCTION_TYPE_1 (BT_FN_UINT8_FLOAT, BT_UINT8, BT_FLOAT)
+DEF_FUNCTION_TYPE_1 (BT_FN_UINT16_UINT16, BT_UINT16, BT_UINT16)
+DEF_FUNCTION_TYPE_1 (BT_FN_UINT32_UINT32, BT_UINT32, BT_UINT32)
+DEF_FUNCTION_TYPE_1 (BT_FN_UINT64_UINT64, BT_UINT64, BT_UINT64)
+DEF_FUNCTION_TYPE_1 (BT_FN_UINT64_FLOAT, BT_UINT64, BT_FLOAT)
+DEF_FUNCTION_TYPE_1 (BT_FN_BOOL_INT, BT_BOOL, BT_INT)
+DEF_FUNCTION_TYPE_1 (BT_FN_PTR_CONST_PTR, BT_PTR, BT_CONST_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_CONST_PTR_CONST_PTR, BT_CONST_PTR, BT_CONST_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_UINT16_UINT32, BT_UINT16, BT_UINT32)
+DEF_FUNCTION_TYPE_1 (BT_FN_UINT32_UINT16, BT_UINT32, BT_UINT16)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_FENV_T_PTR, BT_INT, BT_FENV_T_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_INT_CONST_FENV_T_PTR, BT_INT, BT_CONST_FENV_T_PTR)
+
+DEF_POINTER_TYPE (BT_PTR_FN_VOID_PTR, BT_FN_VOID_PTR)
+
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_INT, BT_VOID, BT_PTR, BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_STRING_STRING_CONST_STRING,
+		     BT_STRING, BT_STRING, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_CONST_STRING,
+		     BT_INT, BT_CONST_STRING, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_CONST_STRING,
+		     BT_STRING, BT_CONST_STRING, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_2 (BT_FN_SIZE_CONST_STRING_CONST_STRING,
+		     BT_SIZE, BT_CONST_STRING, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_INT,
+		     BT_STRING, BT_CONST_STRING, BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_SIZE,
+		     BT_STRING, BT_CONST_STRING, BT_SIZE)
+DEF_FUNCTION_TYPE_2 (BT_FN_SIZE_CONST_STRING_SIZE,
+		     BT_SIZE, BT_CONST_STRING, BT_SIZE)
+DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_FILEPTR,
+		     BT_INT, BT_CONST_STRING, BT_FILEPTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_INT_INT_FILEPTR,
+		     BT_INT, BT_INT, BT_FILEPTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_UINT16_UINT16_UINT16,
+		     BT_UINT16, BT_UINT16, BT_UINT16)
+DEF_FUNCTION_TYPE_2 (BT_FN_INT_PTR_INT,
+     		     BT_INT, BT_PTR, BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_UINT_PTR_UINT,
+     		     BT_UINT, BT_PTR, BT_UINT)
+DEF_FUNCTION_TYPE_2 (BT_FN_LONG_PTR_LONG,
+		     BT_LONG, BT_PTR, BT_LONG)
+DEF_FUNCTION_TYPE_2 (BT_FN_ULONG_PTR_ULONG,
+		     BT_ULONG, BT_PTR, BT_ULONG)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTRMODE_PTR,
+		     BT_VOID, BT_PTRMODE, BT_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_PTRMODE,
+		     BT_VOID, BT_PTR, BT_PTRMODE)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_UINT8_UINT8,
+     		     BT_VOID, BT_UINT8, BT_UINT8)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_UINT16_UINT16,
+     		     BT_VOID, BT_UINT16, BT_UINT16)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_UINT32_UINT32,
+     		     BT_VOID, BT_UINT32, BT_UINT32)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_UINT64_UINT64,
+     		     BT_VOID, BT_UINT64, BT_UINT64)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_FLOAT_FLOAT,
+     		     BT_VOID, BT_FLOAT, BT_FLOAT)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_DOUBLE_DOUBLE,
+     		     BT_VOID, BT_DOUBLE, BT_DOUBLE)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_UINT64_PTR,
+     		     BT_VOID, BT_UINT64, BT_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VALIST_REF_VALIST_ARG,
+		     BT_VOID, BT_VALIST_REF, BT_VALIST_ARG)
+DEF_FUNCTION_TYPE_2 (BT_FN_LONG_LONG_LONG,
+		     BT_LONG, BT_LONG, BT_LONG)
+DEF_FUNCTION_TYPE_2 (BT_FN_UINT8_UINT8_UINT8,
+		     BT_UINT8, BT_UINT8, BT_UINT8)
+DEF_FUNCTION_TYPE_2 (BT_FN_INT8_INT8_INT8,
+		     BT_INT8, BT_INT8, BT_INT8)
+DEF_FUNCTION_TYPE_2 (BT_FN_INT16_INT16_INT16,
+		     BT_INT16, BT_INT16, BT_INT16)
+DEF_FUNCTION_TYPE_2 (BT_FN_INT_INT_INT,
+		     BT_INT, BT_INT, BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_UINT_FLOAT_UINT,
+		     BT_UINT, BT_FLOAT, BT_UINT)
+DEF_FUNCTION_TYPE_2 (BT_FN_UINT_DOUBLE_UINT,
+		     BT_UINT, BT_DOUBLE, BT_UINT)
+DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_UINT_UINT,
+		     BT_FLOAT, BT_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_2 (BT_FN_ULONG_UINT_UINT,
+		     BT_ULONG, BT_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_2 (BT_FN_ULONG_UINT_PTR,
+		     BT_ULONG, BT_UINT, BT_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_ULONG_ULONG_ULONG,
+		     BT_ULONG, BT_ULONG, BT_ULONG)
+DEF_FUNCTION_TYPE_2 (BT_FN_UINT_UINT_UINT,
+		     BT_UINT, BT_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_2 (BT_FN_INT_PTR_CONST_STRING,
+		     BT_INT, BT_PTR, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_SIZE,
+		     BT_VOID, BT_PTR, BT_SIZE)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_UINT_PTR,
+		     BT_VOID, BT_UINT, BT_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_FLOAT_FLOAT,
+		     BT_FLOAT, BT_FLOAT, BT_FLOAT)
+DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE_DOUBLE,
+		     BT_DOUBLE, BT_DOUBLE, BT_DOUBLE)
+DEF_FUNCTION_TYPE_2 (BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE,
+		     BT_LONGDOUBLE, BT_LONGDOUBLE, BT_LONGDOUBLE)
+DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT16_FLOAT16_FLOAT16,
+		     BT_FLOAT16, BT_FLOAT16, BT_FLOAT16)
+DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT32_FLOAT32_FLOAT32,
+		     BT_FLOAT32, BT_FLOAT32, BT_FLOAT32)
+DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT64_FLOAT64_FLOAT64,
+		     BT_FLOAT64, BT_FLOAT64, BT_FLOAT64)
+DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT128_FLOAT128_FLOAT128,
+		     BT_FLOAT128, BT_FLOAT128, BT_FLOAT128)
+DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT32X_FLOAT32X_FLOAT32X,
+		     BT_FLOAT32X, BT_FLOAT32X, BT_FLOAT32X)
+DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT64X_FLOAT64X_FLOAT64X,
+		     BT_FLOAT64X, BT_FLOAT64X, BT_FLOAT64X)
+DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT128X_FLOAT128X_FLOAT128X,
+		     BT_FLOAT128X, BT_FLOAT128X, BT_FLOAT128X)
+DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_FLOAT_FLOATPTR,
+		     BT_FLOAT, BT_FLOAT, BT_FLOAT_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE_DOUBLEPTR,
+		     BT_DOUBLE, BT_DOUBLE, BT_DOUBLE_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLEPTR,
+		     BT_LONGDOUBLE, BT_LONGDOUBLE, BT_LONGDOUBLE_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_FLOAT_LONGDOUBLE,
+		     BT_FLOAT, BT_FLOAT, BT_LONGDOUBLE)
+DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE_LONGDOUBLE,
+		     BT_DOUBLE, BT_DOUBLE, BT_LONGDOUBLE)
+DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_FLOAT_INT,
+		     BT_FLOAT, BT_FLOAT, BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE_INT,
+		     BT_DOUBLE, BT_DOUBLE, BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_LONGDOUBLE_LONGDOUBLE_INT,
+		     BT_LONGDOUBLE, BT_LONGDOUBLE, BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_FLOAT_INTPTR,
+		     BT_FLOAT, BT_FLOAT, BT_INT_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE_INTPTR,
+		     BT_DOUBLE, BT_DOUBLE, BT_INT_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR,
+		     BT_LONGDOUBLE, BT_LONGDOUBLE, BT_INT_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_INT_FLOAT,
+		     BT_FLOAT, BT_INT, BT_FLOAT)
+DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_INT_DOUBLE,
+		     BT_DOUBLE, BT_INT, BT_DOUBLE)
+DEF_FUNCTION_TYPE_2 (BT_FN_LONGDOUBLE_INT_LONGDOUBLE,
+		     BT_LONGDOUBLE, BT_INT, BT_LONGDOUBLE)
+DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_FLOAT_LONG,
+		     BT_FLOAT, BT_FLOAT, BT_LONG)
+DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE_LONG,
+		     BT_DOUBLE, BT_DOUBLE, BT_LONG)
+DEF_FUNCTION_TYPE_2 (BT_FN_LONGDOUBLE_LONGDOUBLE_LONG,
+		     BT_LONGDOUBLE, BT_LONGDOUBLE, BT_LONG)
+DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_VALIST_ARG,
+		     BT_INT, BT_CONST_STRING, BT_VALIST_ARG)
+DEF_FUNCTION_TYPE_2 (BT_FN_PTR_SIZE_SIZE,
+		     BT_PTR, BT_SIZE, BT_SIZE)
+DEF_FUNCTION_TYPE_2 (BT_FN_PTR_PTR_SIZE,
+		     BT_PTR, BT_PTR, BT_SIZE)
+DEF_FUNCTION_TYPE_2 (BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT_COMPLEX_FLOAT,
+		     BT_COMPLEX_FLOAT, BT_COMPLEX_FLOAT, BT_COMPLEX_FLOAT)
+DEF_FUNCTION_TYPE_2 (BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
+		     BT_COMPLEX_DOUBLE, BT_COMPLEX_DOUBLE, BT_COMPLEX_DOUBLE)
+DEF_FUNCTION_TYPE_2 (BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE,
+		     BT_COMPLEX_LONGDOUBLE, BT_COMPLEX_LONGDOUBLE, BT_COMPLEX_LONGDOUBLE)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_PTR, BT_VOID, BT_PTR, BT_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_PTR_CONST_STRING,
+		     BT_INT, BT_CONST_STRING, BT_PTR_CONST_STRING)
+DEF_FUNCTION_TYPE_2 (BT_FN_SIZE_CONST_PTR_INT, BT_SIZE, BT_CONST_PTR, BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_I1_VPTR_I1, BT_I1, BT_VOLATILE_PTR, BT_I1)
+DEF_FUNCTION_TYPE_2 (BT_FN_I2_VPTR_I2, BT_I2, BT_VOLATILE_PTR, BT_I2)
+DEF_FUNCTION_TYPE_2 (BT_FN_I4_VPTR_I4, BT_I4, BT_VOLATILE_PTR, BT_I4)
+DEF_FUNCTION_TYPE_2 (BT_FN_I8_VPTR_I8, BT_I8, BT_VOLATILE_PTR, BT_I8)
+DEF_FUNCTION_TYPE_2 (BT_FN_I16_VPTR_I16, BT_I16, BT_VOLATILE_PTR, BT_I16)
+DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_LONGPTR_LONGPTR,
+		     BT_BOOL, BT_PTR_LONG, BT_PTR_LONG)
+DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR,
+		     BT_BOOL, BT_PTR_ULONGLONG, BT_PTR_ULONGLONG)
+DEF_FUNCTION_TYPE_2 (BT_FN_I1_CONST_VPTR_INT, BT_I1, BT_CONST_VOLATILE_PTR,
+		     BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_I2_CONST_VPTR_INT, BT_I2, BT_CONST_VOLATILE_PTR,
+		     BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_I4_CONST_VPTR_INT, BT_I4, BT_CONST_VOLATILE_PTR,
+		     BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_I8_CONST_VPTR_INT, BT_I8, BT_CONST_VOLATILE_PTR,
+		     BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_I16_CONST_VPTR_INT, BT_I16, BT_CONST_VOLATILE_PTR,
+		     BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VPTR_INT, BT_VOID, BT_VOLATILE_PTR, BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_VPTR_INT, BT_BOOL, BT_VOLATILE_PTR, BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_SIZE_CONST_VPTR, BT_BOOL, BT_SIZE,
+		     BT_CONST_VOLATILE_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_INT_BOOL, BT_BOOL, BT_INT, BT_BOOL)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_UINT_UINT, BT_VOID, BT_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_2 (BT_FN_UINT_UINT_PTR, BT_UINT, BT_UINT, BT_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_UINT_UINT_CONST_PTR, BT_UINT, BT_UINT, BT_CONST_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_PTR_CONST_PTR_SIZE, BT_PTR, BT_CONST_PTR, BT_SIZE)
+DEF_FUNCTION_TYPE_2 (BT_FN_PTR_CONST_PTR_CONST_PTR, BT_PTR, BT_CONST_PTR, BT_CONST_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTRPTR_CONST_PTR, BT_VOID, BT_PTR_PTR, BT_CONST_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_CONST_PTR_SIZE, BT_VOID, BT_CONST_PTR, BT_SIZE)
+DEF_FUNCTION_TYPE_2 (BT_FN_CONST_PTR_CONST_PTR_CONST_PTR, BT_CONST_PTR, BT_CONST_PTR, BT_CONST_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_UINT32_UINT64_PTR,
+		     BT_UINT32, BT_UINT64, BT_PTR)
+DEF_FUNCTION_TYPE_2 (BT_FN_INT_FEXCEPT_T_PTR_INT, BT_INT, BT_FEXCEPT_T_PTR,
+		     BT_INT)
+DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_FEXCEPT_T_PTR_INT, BT_INT,
+		     BT_CONST_FEXCEPT_T_PTR, BT_INT)
+
+DEF_POINTER_TYPE (BT_PTR_FN_VOID_PTR_PTR, BT_FN_VOID_PTR_PTR)
+
+DEF_FUNCTION_TYPE_3 (BT_FN_STRING_STRING_CONST_STRING_SIZE,
+		     BT_STRING, BT_STRING, BT_CONST_STRING, BT_SIZE)
+DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
+		     BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_SIZE)
+DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_CONST_PTR_SIZE,
+		     BT_PTR, BT_PTR, BT_CONST_PTR, BT_SIZE)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_CONST_PTR_SIZE,
+		     BT_VOID, BT_PTR, BT_CONST_PTR, BT_SIZE)
+DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
+		     BT_INT, BT_CONST_PTR, BT_CONST_PTR, BT_SIZE)
+DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_INT_SIZE,
+		     BT_PTR, BT_PTR, BT_INT, BT_SIZE)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_INT_SIZE,
+		     BT_VOID, BT_PTR, BT_INT, BT_SIZE)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_INT_INT,
+		     BT_VOID, BT_PTR, BT_INT, BT_INT)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_CONST_PTR_PTR_SIZE,
+		     BT_VOID, BT_CONST_PTR, BT_PTR, BT_SIZE)
+DEF_FUNCTION_TYPE_3 (BT_FN_INT_STRING_CONST_STRING_VALIST_ARG,
+		     BT_INT, BT_STRING, BT_CONST_STRING, BT_VALIST_ARG)
+DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG,
+		     BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_VALIST_ARG)
+DEF_FUNCTION_TYPE_3 (BT_FN_INT_FILEPTR_CONST_STRING_VALIST_ARG,
+		     BT_INT, BT_FILEPTR, BT_CONST_STRING, BT_VALIST_ARG)
+DEF_FUNCTION_TYPE_3 (BT_FN_INT_INT_UINT_UINT,
+		     BT_INT, BT_INT, BT_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_3 (BT_FN_UINT_UINT_UINT_UINT,
+		     BT_UINT, BT_UINT, BT_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_3 (BT_FN_UINT_UINT_UINT_PTR,
+		     BT_UINT, BT_UINT, BT_UINT, BT_PTR)
+DEF_FUNCTION_TYPE_3 (BT_FN_UINT_ULONG_ULONG_UINT,
+		     BT_UINT, BT_ULONG, BT_ULONG, BT_UINT)
+DEF_FUNCTION_TYPE_3 (BT_FN_ULONG_ULONG_ULONG_ULONG,
+		     BT_ULONG, BT_ULONG, BT_ULONG, BT_ULONG)
+DEF_FUNCTION_TYPE_3 (BT_FN_LONG_LONG_UINT_UINT,
+		     BT_LONG, BT_LONG, BT_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_3 (BT_FN_LONG_LONG_LONG_DOUBLE,
+		     BT_LONG, BT_LONG, BT_LONG, BT_DOUBLE)
+DEF_FUNCTION_TYPE_3 (BT_FN_ULONG_ULONG_UINT_UINT,
+		     BT_ULONG, BT_ULONG, BT_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_3 (BT_FN_STRING_CONST_STRING_CONST_STRING_INT,
+		     BT_STRING, BT_CONST_STRING, BT_CONST_STRING, BT_INT)
+DEF_FUNCTION_TYPE_3 (BT_FN_FLOAT_FLOAT_FLOAT_FLOAT,
+		     BT_FLOAT, BT_FLOAT, BT_FLOAT, BT_FLOAT)
+DEF_FUNCTION_TYPE_3 (BT_FN_DOUBLE_DOUBLE_DOUBLE_DOUBLE,
+		     BT_DOUBLE, BT_DOUBLE, BT_DOUBLE, BT_DOUBLE)
+DEF_FUNCTION_TYPE_3 (BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE,
+		     BT_LONGDOUBLE, BT_LONGDOUBLE, BT_LONGDOUBLE, BT_LONGDOUBLE)
+DEF_FUNCTION_TYPE_3 (BT_FN_FLOAT16_FLOAT16_FLOAT16_FLOAT16,
+		     BT_FLOAT16, BT_FLOAT16, BT_FLOAT16, BT_FLOAT16)
+DEF_FUNCTION_TYPE_3 (BT_FN_FLOAT32_FLOAT32_FLOAT32_FLOAT32,
+		     BT_FLOAT32, BT_FLOAT32, BT_FLOAT32, BT_FLOAT32)
+DEF_FUNCTION_TYPE_3 (BT_FN_FLOAT64_FLOAT64_FLOAT64_FLOAT64,
+		     BT_FLOAT64, BT_FLOAT64, BT_FLOAT64, BT_FLOAT64)
+DEF_FUNCTION_TYPE_3 (BT_FN_FLOAT128_FLOAT128_FLOAT128_FLOAT128,
+		     BT_FLOAT128, BT_FLOAT128, BT_FLOAT128, BT_FLOAT128)
+DEF_FUNCTION_TYPE_3 (BT_FN_FLOAT32X_FLOAT32X_FLOAT32X_FLOAT32X,
+		     BT_FLOAT32X, BT_FLOAT32X, BT_FLOAT32X, BT_FLOAT32X)
+DEF_FUNCTION_TYPE_3 (BT_FN_FLOAT64X_FLOAT64X_FLOAT64X_FLOAT64X,
+		     BT_FLOAT64X, BT_FLOAT64X, BT_FLOAT64X, BT_FLOAT64X)
+DEF_FUNCTION_TYPE_3 (BT_FN_FLOAT128X_FLOAT128X_FLOAT128X_FLOAT128X,
+		     BT_FLOAT128X, BT_FLOAT128X, BT_FLOAT128X, BT_FLOAT128X)
+DEF_FUNCTION_TYPE_3 (BT_FN_FLOAT_FLOAT_FLOAT_INTPTR,
+		     BT_FLOAT, BT_FLOAT, BT_FLOAT, BT_INT_PTR)
+DEF_FUNCTION_TYPE_3 (BT_FN_DOUBLE_DOUBLE_DOUBLE_INTPTR,
+		     BT_DOUBLE, BT_DOUBLE, BT_DOUBLE, BT_INT_PTR)
+DEF_FUNCTION_TYPE_3 (BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_INTPTR,
+		     BT_LONGDOUBLE, BT_LONGDOUBLE, BT_LONGDOUBLE, BT_INT_PTR)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_FLOAT_FLOATPTR_FLOATPTR,
+		     BT_VOID, BT_FLOAT, BT_FLOAT_PTR, BT_FLOAT_PTR)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_DOUBLE_DOUBLEPTR_DOUBLEPTR,
+		     BT_VOID, BT_DOUBLE, BT_DOUBLE_PTR, BT_DOUBLE_PTR)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_LONGDOUBLE_LONGDOUBLEPTR_LONGDOUBLEPTR,
+		     BT_VOID, BT_LONGDOUBLE, BT_LONGDOUBLE_PTR, BT_LONGDOUBLE_PTR)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_PTR_PTR, BT_VOID, BT_PTR, BT_PTR, BT_PTR)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_PTR_UINT32, BT_VOID, BT_PTR, BT_PTR, BT_UINT32)
+DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_PTR_CONST_STRING_PTR_CONST_STRING,
+		     BT_INT, BT_CONST_STRING, BT_PTR_CONST_STRING, BT_PTR_CONST_STRING)
+DEF_FUNCTION_TYPE_3 (BT_FN_INT_INT_CONST_STRING_VALIST_ARG,
+		     BT_INT, BT_INT, BT_CONST_STRING, BT_VALIST_ARG)
+DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I1_I1, BT_BOOL, BT_VOLATILE_PTR,
+		     BT_I1, BT_I1)
+DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I2_I2, BT_BOOL, BT_VOLATILE_PTR,
+		     BT_I2, BT_I2)
+DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I4_I4, BT_BOOL, BT_VOLATILE_PTR,
+		     BT_I4, BT_I4)
+DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I8_I8, BT_BOOL, BT_VOLATILE_PTR,
+		     BT_I8, BT_I8)
+DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I16_I16, BT_BOOL, BT_VOLATILE_PTR,
+		     BT_I16, BT_I16)
+DEF_FUNCTION_TYPE_3 (BT_FN_I1_VPTR_I1_I1, BT_I1, BT_VOLATILE_PTR, BT_I1, BT_I1)
+DEF_FUNCTION_TYPE_3 (BT_FN_I2_VPTR_I2_I2, BT_I2, BT_VOLATILE_PTR, BT_I2, BT_I2)
+DEF_FUNCTION_TYPE_3 (BT_FN_I4_VPTR_I4_I4, BT_I4, BT_VOLATILE_PTR, BT_I4, BT_I4)
+DEF_FUNCTION_TYPE_3 (BT_FN_I8_VPTR_I8_I8, BT_I8, BT_VOLATILE_PTR, BT_I8, BT_I8)
+DEF_FUNCTION_TYPE_3 (BT_FN_I16_VPTR_I16_I16, BT_I16, BT_VOLATILE_PTR,
+		     BT_I16, BT_I16)
+DEF_FUNCTION_TYPE_3 (BT_FN_PTR_CONST_PTR_INT_SIZE, BT_PTR,
+		     BT_CONST_PTR, BT_INT, BT_SIZE)
+DEF_FUNCTION_TYPE_3 (BT_FN_I1_VPTR_I1_INT, BT_I1, BT_VOLATILE_PTR, BT_I1, BT_INT)
+DEF_FUNCTION_TYPE_3 (BT_FN_I2_VPTR_I2_INT, BT_I2, BT_VOLATILE_PTR, BT_I2, BT_INT)
+DEF_FUNCTION_TYPE_3 (BT_FN_I4_VPTR_I4_INT, BT_I4, BT_VOLATILE_PTR, BT_I4, BT_INT)
+DEF_FUNCTION_TYPE_3 (BT_FN_I8_VPTR_I8_INT, BT_I8, BT_VOLATILE_PTR, BT_I8, BT_INT)
+DEF_FUNCTION_TYPE_3 (BT_FN_I16_VPTR_I16_INT, BT_I16, BT_VOLATILE_PTR, BT_I16, BT_INT)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_VPTR_I1_INT, BT_VOID, BT_VOLATILE_PTR, BT_I1, BT_INT)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_VPTR_I2_INT, BT_VOID, BT_VOLATILE_PTR, BT_I2, BT_INT)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_VPTR_I4_INT, BT_VOID, BT_VOLATILE_PTR, BT_I4, BT_INT)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_VPTR_I8_INT, BT_VOID, BT_VOLATILE_PTR, BT_I8, BT_INT)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_VPTR_I16_INT, BT_VOID, BT_VOLATILE_PTR, BT_I16, BT_INT)
+DEF_FUNCTION_TYPE_3 (BT_FN_INT_PTRPTR_SIZE_SIZE, BT_INT, BT_PTR_PTR, BT_SIZE, BT_SIZE)
+DEF_FUNCTION_TYPE_3 (BT_FN_PTR_CONST_PTR_CONST_PTR_SIZE, BT_PTR, BT_CONST_PTR, BT_CONST_PTR, BT_SIZE)
+DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_INT_INT_INTPTR, BT_BOOL, BT_INT, BT_INT,
+		     BT_INT_PTR)
+DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_LONG_LONG_LONGPTR, BT_BOOL, BT_LONG, BT_LONG,
+		     BT_PTR_LONG)
+DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_LONGLONG_LONGLONG_LONGLONGPTR, BT_BOOL,
+		     BT_LONGLONG, BT_LONGLONG, BT_PTR_LONGLONG)
+DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_UINT_UINT_UINTPTR, BT_BOOL, BT_UINT, BT_UINT,
+		     BT_PTR_UINT)
+DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_ULONG_ULONG_ULONGPTR, BT_BOOL, BT_ULONG,
+		     BT_ULONG, BT_PTR_ULONG)
+DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_ULONGLONG_ULONGLONG_ULONGLONGPTR, BT_BOOL,
+		     BT_ULONGLONG, BT_ULONGLONG, BT_PTR_ULONGLONG)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_UINT32_UINT64_PTR,
+		     BT_VOID, BT_UINT32, BT_UINT64, BT_PTR)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_UINT32_UINT32_PTR,
+		     BT_VOID, BT_UINT32, BT_UINT32, BT_PTR)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_SIZE_SIZE_PTR, BT_VOID, BT_SIZE, BT_SIZE,
+		     BT_PTR)
+DEF_FUNCTION_TYPE_3 (BT_FN_UINT_UINT_PTR_PTR, BT_UINT, BT_UINT, BT_PTR, BT_PTR)
+
+DEF_FUNCTION_TYPE_4 (BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR,
+		     BT_SIZE, BT_CONST_PTR, BT_SIZE, BT_SIZE, BT_FILEPTR)
+DEF_FUNCTION_TYPE_4 (BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG,
+		BT_INT, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_VALIST_ARG)
+DEF_FUNCTION_TYPE_4 (BT_FN_SIZE_STRING_SIZE_CONST_STRING_CONST_TM_PTR,
+		BT_SIZE, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_CONST_TM_PTR)
+DEF_FUNCTION_TYPE_4 (BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE,
+		     BT_PTR, BT_PTR, BT_CONST_PTR, BT_SIZE, BT_SIZE)
+DEF_FUNCTION_TYPE_4 (BT_FN_PTR_PTR_INT_SIZE_SIZE,
+		     BT_PTR, BT_PTR, BT_INT, BT_SIZE, BT_SIZE)
+DEF_FUNCTION_TYPE_4 (BT_FN_UINT_UINT_UINT_UINT_UINT,
+		     BT_UINT, BT_UINT, BT_UINT, BT_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_4 (BT_FN_UINT_FLOAT_FLOAT_FLOAT_FLOAT,
+		     BT_UINT, BT_FLOAT, BT_FLOAT, BT_FLOAT, BT_FLOAT)
+DEF_FUNCTION_TYPE_4 (BT_FN_ULONG_ULONG_ULONG_UINT_UINT,
+		     BT_ULONG, BT_ULONG, BT_ULONG, BT_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_4 (BT_FN_STRING_STRING_CONST_STRING_SIZE_SIZE,
+		     BT_STRING, BT_STRING, BT_CONST_STRING, BT_SIZE, BT_SIZE)
+DEF_FUNCTION_TYPE_4 (BT_FN_INT_FILEPTR_INT_CONST_STRING_VALIST_ARG,
+		     BT_INT, BT_FILEPTR, BT_INT, BT_CONST_STRING, BT_VALIST_ARG)
+DEF_FUNCTION_TYPE_4 (BT_FN_VOID_OMPFN_PTR_UINT_UINT,
+		     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_4 (BT_FN_UINT_OMPFN_PTR_UINT_UINT,
+		     BT_UINT, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_4 (BT_FN_VOID_PTR_WORD_WORD_PTR,
+		     BT_VOID, BT_PTR, BT_WORD, BT_WORD, BT_PTR)
+DEF_FUNCTION_TYPE_4 (BT_FN_VOID_SIZE_VPTR_PTR_INT, BT_VOID, BT_SIZE,
+		     BT_VOLATILE_PTR, BT_PTR, BT_INT)
+DEF_FUNCTION_TYPE_4 (BT_FN_VOID_SIZE_CONST_VPTR_PTR_INT, BT_VOID, BT_SIZE,
+		     BT_CONST_VOLATILE_PTR, BT_PTR, BT_INT)
+DEF_FUNCTION_TYPE_4 (BT_FN_BOOL_UINT_LONGPTR_LONGPTR_LONGPTR,
+		     BT_BOOL, BT_UINT, BT_PTR_LONG, BT_PTR_LONG, BT_PTR_LONG)
+DEF_FUNCTION_TYPE_4 (BT_FN_BOOL_UINT_ULLPTR_ULLPTR_ULLPTR,
+		     BT_BOOL, BT_UINT, BT_PTR_ULONGLONG, BT_PTR_ULONGLONG,
+		     BT_PTR_ULONGLONG)
+DEF_FUNCTION_TYPE_4 (BT_FN_VOID_UINT_PTR_INT_PTR, BT_VOID, BT_INT, BT_PTR,
+		     BT_INT, BT_PTR)
+
+DEF_FUNCTION_TYPE_5 (BT_FN_INT_STRING_INT_SIZE_CONST_STRING_VALIST_ARG,
+		     BT_INT, BT_STRING, BT_INT, BT_SIZE, BT_CONST_STRING,
+		     BT_VALIST_ARG)
+DEF_FUNCTION_TYPE_5 (BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
+		     BT_BOOL, BT_LONG, BT_LONG, BT_LONG,
+		     BT_PTR_LONG, BT_PTR_LONG)
+DEF_FUNCTION_TYPE_5 (BT_FN_VOID_SIZE_VPTR_PTR_PTR_INT, BT_VOID, BT_SIZE,
+		     BT_VOLATILE_PTR, BT_PTR, BT_PTR, BT_INT)
+DEF_FUNCTION_TYPE_5 (BT_FN_BOOL_VPTR_PTR_I1_INT_INT,
+		     BT_BOOL, BT_VOLATILE_PTR, BT_PTR, BT_I1, BT_INT, BT_INT)
+DEF_FUNCTION_TYPE_5 (BT_FN_BOOL_VPTR_PTR_I2_INT_INT,
+		     BT_BOOL, BT_VOLATILE_PTR, BT_PTR, BT_I2, BT_INT, BT_INT)
+DEF_FUNCTION_TYPE_5 (BT_FN_BOOL_VPTR_PTR_I4_INT_INT,
+		     BT_BOOL, BT_VOLATILE_PTR, BT_PTR, BT_I4, BT_INT, BT_INT)
+DEF_FUNCTION_TYPE_5 (BT_FN_BOOL_VPTR_PTR_I8_INT_INT,
+		     BT_BOOL, BT_VOLATILE_PTR, BT_PTR, BT_I8, BT_INT, BT_INT)
+DEF_FUNCTION_TYPE_5 (BT_FN_BOOL_VPTR_PTR_I16_INT_INT,
+		     BT_BOOL, BT_VOLATILE_PTR, BT_PTR, BT_I16, BT_INT, BT_INT)
+DEF_FUNCTION_TYPE_5 (BT_FN_VOID_INT_SIZE_PTR_PTR_PTR,
+		     BT_VOID, BT_INT, BT_SIZE, BT_PTR, BT_PTR, BT_PTR)
+DEF_FUNCTION_TYPE_5 (BT_FN_VOID_OMPFN_PTR_UINT_UINT_UINT,
+		     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT, BT_UINT,
+		     BT_UINT)
+DEF_FUNCTION_TYPE_5 (BT_FN_BOOL_UINT_LONGPTR_LONG_LONGPTR_LONGPTR,
+		     BT_BOOL, BT_UINT, BT_PTR_LONG, BT_LONG, BT_PTR_LONG,
+		     BT_PTR_LONG)
+DEF_FUNCTION_TYPE_5 (BT_FN_BOOL_UINT_ULLPTR_ULL_ULLPTR_ULLPTR,
+		     BT_BOOL, BT_UINT, BT_PTR_ULONGLONG, BT_ULONGLONG,
+		     BT_PTR_ULONGLONG, BT_PTR_ULONGLONG)
+
+DEF_FUNCTION_TYPE_6 (BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VALIST_ARG,
+		     BT_INT, BT_STRING, BT_SIZE, BT_INT, BT_SIZE,
+		     BT_CONST_STRING, BT_VALIST_ARG)
+DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+		     BT_BOOL, BT_LONG, BT_LONG, BT_LONG, BT_LONG,
+		     BT_PTR_LONG, BT_PTR_LONG)
+DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+		     BT_BOOL, BT_BOOL, BT_ULONGLONG, BT_ULONGLONG,
+		     BT_ULONGLONG, BT_PTR_ULONGLONG, BT_PTR_ULONGLONG)
+DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_VPTR_PTR_I1_BOOL_INT_INT, 
+		     BT_BOOL, BT_VOLATILE_PTR, BT_PTR, BT_I1, BT_BOOL, BT_INT,
+		     BT_INT)
+DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_VPTR_PTR_I2_BOOL_INT_INT, 
+		     BT_BOOL, BT_VOLATILE_PTR, BT_PTR, BT_I2, BT_BOOL, BT_INT,
+		     BT_INT)
+DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_VPTR_PTR_I4_BOOL_INT_INT, 
+		     BT_BOOL, BT_VOLATILE_PTR, BT_PTR, BT_I4, BT_BOOL, BT_INT,
+		     BT_INT)
+DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_VPTR_PTR_I8_BOOL_INT_INT, 
+		     BT_BOOL, BT_VOLATILE_PTR, BT_PTR, BT_I8, BT_BOOL, BT_INT,
+		     BT_INT)
+DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_VPTR_PTR_I16_BOOL_INT_INT, 
+		     BT_BOOL, BT_VOLATILE_PTR, BT_PTR, BT_I16, BT_BOOL, BT_INT,
+		     BT_INT)
+DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_SIZE_VPTR_PTR_PTR_INT_INT, BT_BOOL, BT_SIZE,
+		     BT_VOLATILE_PTR, BT_PTR, BT_PTR, BT_INT, BT_INT)
+
+DEF_FUNCTION_TYPE_7 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_UINT,
+		     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT,
+		     BT_LONG, BT_LONG, BT_LONG, BT_UINT)
+DEF_FUNCTION_TYPE_7 (BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+		     BT_BOOL, BT_BOOL, BT_ULONGLONG, BT_ULONGLONG,
+		     BT_ULONGLONG, BT_ULONGLONG,
+		     BT_PTR_ULONGLONG, BT_PTR_ULONGLONG)
+DEF_FUNCTION_TYPE_7 (BT_FN_VOID_INT_SIZE_PTR_PTR_PTR_UINT_PTR,
+		     BT_VOID, BT_INT, BT_SIZE, BT_PTR, BT_PTR, BT_PTR, BT_UINT,
+		     BT_PTR)
+
+DEF_FUNCTION_TYPE_8 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
+		     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT,
+		     BT_LONG, BT_LONG, BT_LONG, BT_LONG, BT_UINT)
+DEF_FUNCTION_TYPE_8 (BT_FN_BOOL_UINT_LONGPTR_LONG_LONG_LONGPTR_LONGPTR_PTR_PTR,
+		     BT_BOOL, BT_UINT, BT_PTR_LONG, BT_LONG, BT_LONG,
+		     BT_PTR_LONG, BT_PTR_LONG, BT_PTR, BT_PTR)
+DEF_FUNCTION_TYPE_8 (BT_FN_BOOL_UINT_ULLPTR_LONG_ULL_ULLPTR_ULLPTR_PTR_PTR,
+		     BT_BOOL, BT_UINT, BT_PTR_ULONGLONG, BT_LONG, BT_ULONGLONG,
+		     BT_PTR_ULONGLONG, BT_PTR_ULONGLONG, BT_PTR, BT_PTR)
+
+DEF_FUNCTION_TYPE_9 (BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR_INT,
+		     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR,
+		     BT_PTR_FN_VOID_PTR_PTR, BT_LONG, BT_LONG,
+		     BT_BOOL, BT_UINT, BT_PTR, BT_INT)
+DEF_FUNCTION_TYPE_9 (BT_FN_VOID_INT_OMPFN_SIZE_PTR_PTR_PTR_UINT_PTR_PTR,
+		     BT_VOID, BT_INT, BT_PTR_FN_VOID_PTR, BT_SIZE, BT_PTR,
+		     BT_PTR, BT_PTR, BT_UINT, BT_PTR, BT_PTR)
+DEF_FUNCTION_TYPE_9 (BT_FN_BOOL_LONG_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR_PTR_PTR,
+		     BT_BOOL, BT_LONG, BT_LONG, BT_LONG, BT_LONG, BT_LONG,
+		     BT_PTR_LONG, BT_PTR_LONG, BT_PTR, BT_PTR)
+
+DEF_FUNCTION_TYPE_10 (BT_FN_BOOL_BOOL_ULL_ULL_ULL_LONG_ULL_ULLPTR_ULLPTR_PTR_PTR,
+		      BT_BOOL, BT_BOOL, BT_ULONGLONG, BT_ULONGLONG,
+		      BT_ULONGLONG, BT_LONG, BT_ULONGLONG, BT_PTR_ULONGLONG,
+		      BT_PTR_ULONGLONG, BT_PTR, BT_PTR)
+
+DEF_FUNCTION_TYPE_11 (BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_UINT_LONG_INT_LONG_LONG_LONG,
+		      BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR,
+		      BT_PTR_FN_VOID_PTR_PTR, BT_LONG, BT_LONG,
+		      BT_UINT, BT_LONG, BT_INT, BT_LONG, BT_LONG, BT_LONG)
+DEF_FUNCTION_TYPE_11 (BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_UINT_LONG_INT_ULL_ULL_ULL,
+		      BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR,
+		      BT_PTR_FN_VOID_PTR_PTR, BT_LONG, BT_LONG,
+		      BT_UINT, BT_LONG, BT_INT,
+		      BT_ULONGLONG, BT_ULONGLONG, BT_ULONGLONG)
+
+DEF_FUNCTION_TYPE_VAR_0 (BT_FN_VOID_VAR, BT_VOID)
+DEF_FUNCTION_TYPE_VAR_0 (BT_FN_INT_VAR, BT_INT)
+DEF_FUNCTION_TYPE_VAR_0 (BT_FN_PTR_VAR, BT_PTR)
+DEF_FUNCTION_TYPE_VAR_0 (BT_FN_BOOL_VAR, BT_BOOL)
+
+DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_VALIST_REF_VAR,
+			 BT_VOID, BT_VALIST_REF)
+DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_CONST_PTR_VAR,
+			 BT_VOID, BT_CONST_PTR)
+DEF_FUNCTION_TYPE_VAR_1 (BT_FN_INT_CONST_STRING_VAR,
+			 BT_INT, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_VAR_1 (BT_FN_UINT32_UINT32_VAR,
+			 BT_UINT32, BT_UINT32)
+DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_LONG_VAR,
+			 BT_VOID, BT_LONG)
+DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_ULL_VAR,
+			 BT_VOID, BT_ULONGLONG)
+DEF_FUNCTION_TYPE_VAR_1 (BT_FN_PTR_PTR_VAR, BT_PTR, BT_PTR)
+DEF_FUNCTION_TYPE_VAR_1 (BT_FN_I1_I1_VAR, BT_I1, BT_I1)
+DEF_FUNCTION_TYPE_VAR_1 (BT_FN_I2_I2_VAR, BT_I2, BT_I2)
+DEF_FUNCTION_TYPE_VAR_1 (BT_FN_I4_I4_VAR, BT_I4, BT_I4)
+DEF_FUNCTION_TYPE_VAR_1 (BT_FN_I8_I8_VAR, BT_I8, BT_I8)
+DEF_FUNCTION_TYPE_VAR_1 (BT_FN_I16_I16_VAR, BT_I16, BT_I16)
+
+DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_FILEPTR_CONST_STRING_VAR,
+			 BT_INT, BT_FILEPTR, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_STRING_CONST_STRING_VAR,
+			 BT_INT, BT_STRING, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
+			 BT_INT, BT_CONST_STRING, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_INT_CONST_STRING_VAR,
+			 BT_INT, BT_INT, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_VAR_2 (BT_FN_PTR_CONST_PTR_SIZE_VAR, BT_PTR,
+			 BT_CONST_PTR, BT_SIZE)
+DEF_FUNCTION_TYPE_VAR_2 (BT_FN_VOID_INT_INT_VAR, BT_VOID,
+			 BT_INT, BT_INT)
+
+DEF_FUNCTION_TYPE_VAR_3 (BT_FN_INT_STRING_SIZE_CONST_STRING_VAR,
+			 BT_INT, BT_STRING, BT_SIZE, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_VAR_3 (BT_FN_SSIZE_STRING_SIZE_CONST_STRING_VAR,
+			 BT_SSIZE, BT_STRING, BT_SIZE, BT_CONST_STRING)
+DEF_FUNCTION_TYPE_VAR_3 (BT_FN_INT_FILEPTR_INT_CONST_STRING_VAR,
+			 BT_INT, BT_FILEPTR, BT_INT, BT_CONST_STRING)
+
+DEF_FUNCTION_TYPE_VAR_4 (BT_FN_INT_STRING_INT_SIZE_CONST_STRING_VAR,
+			 BT_INT, BT_STRING, BT_INT, BT_SIZE, BT_CONST_STRING)
+
+DEF_FUNCTION_TYPE_VAR_5 (BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VAR,
+			 BT_INT, BT_STRING, BT_SIZE, BT_INT, BT_SIZE,
+			 BT_CONST_STRING)
+
+DEF_FUNCTION_TYPE_VAR_5 (BT_FN_INT_INT_INT_INT_INT_INT_VAR,
+			 BT_INT, BT_INT, BT_INT, BT_INT, BT_INT, BT_INT)
+
+DEF_FUNCTION_TYPE_VAR_6 (BT_FN_VOID_INT_OMPFN_SIZE_PTR_PTR_PTR_VAR,
+			 BT_VOID, BT_INT, BT_PTR_FN_VOID_PTR, BT_SIZE,
+			 BT_PTR, BT_PTR, BT_PTR)
+
+DEF_FUNCTION_TYPE_VAR_7 (BT_FN_VOID_INT_SIZE_PTR_PTR_PTR_INT_INT_VAR,
+			 BT_VOID, BT_INT, BT_SIZE, BT_PTR, BT_PTR,
+			 BT_PTR, BT_INT, BT_INT)
+
+DEF_POINTER_TYPE (BT_PTR_FN_VOID_VAR, BT_FN_VOID_VAR)
+DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
+		     BT_PTR, BT_PTR_FN_VOID_VAR, BT_PTR, BT_SIZE)
+
+
+DEF_FUNCTION_TYPE_1 (BT_FN_I1_VPTR, BT_I1, BT_VOLATILE_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_I2_VPTR, BT_I2, BT_VOLATILE_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_I4_VPTR, BT_I4, BT_VOLATILE_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_I8_VPTR, BT_I8, BT_VOLATILE_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_VPTR, BT_FLOAT, BT_VOLATILE_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_CONST_DOUBLE_PTR, BT_DOUBLE, BT_DOUBLE_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_LDOUBLE_VPTR, BT_LONGDOUBLE, BT_VOLATILE_PTR)
+
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VPTR_I1, BT_VOID, BT_VOLATILE_PTR, BT_I1)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VPTR_I2, BT_VOID, BT_VOLATILE_PTR, BT_I2)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VPTR_I4, BT_VOID, BT_VOLATILE_PTR, BT_I4)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VPTR_I8, BT_VOID, BT_VOLATILE_PTR, BT_I8)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VPTR_FLOAT, BT_VOID, BT_VOLATILE_PTR, BT_FLOAT)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VPTR_DOUBLE, BT_VOID,
+		     BT_VOLATILE_PTR, BT_DOUBLE)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VPTR_LDOUBLE, BT_VOID,
+		     BT_VOLATILE_PTR, BT_LONGDOUBLE)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VPTR_SIZE, BT_VOID,
+		     BT_VOLATILE_PTR, BT_SIZE)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/builtins.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/builtins.def
new file mode 100644
index 0000000..c92292a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/builtins.def
@@ -0,0 +1,1099 @@
+/* This file contains the definitions and documentation for the
+   builtins used in the GNU compiler.
+   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Before including this file, you should define a macro:
+
+     DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P,
+                  FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND)
+
+   This macro will be called once for each builtin function.  The
+   ENUM will be of type `enum built_in_function', and will indicate
+   which builtin function is being processed.  The NAME of the builtin
+   function (which will always start with `__builtin_') is a string
+   literal.  The CLASS is of type `enum built_in_class' and indicates
+   what kind of builtin is being processed.
+
+   Some builtins are actually two separate functions.  For example,
+   for `strcmp' there are two builtin functions; `__builtin_strcmp'
+   and `strcmp' itself.  Both behave identically.  Other builtins
+   define only the `__builtin' variant.  If BOTH_P is TRUE, then this
+   builtin has both variants; otherwise, it is has only the first
+   variant.
+
+   TYPE indicates the type of the function.  The symbols correspond to
+   enumerals from builtin-types.def.  If BOTH_P is true, then LIBTYPE
+   is the type of the non-`__builtin_' variant.  Otherwise, LIBTYPE
+   should be ignored.
+
+   If FALLBACK_P is true then, if for some reason, the compiler cannot
+   expand the builtin function directly, it will call the
+   corresponding library function (which does not have the
+   `__builtin_' prefix.
+
+   If NONANSI_P is true, then the non-`__builtin_' variant is not an
+   ANSI/ISO library function, and so we should pretend it does not
+   exist when compiling in ANSI conformant mode.
+
+   ATTRs is an attribute list as defined in builtin-attrs.def that
+   describes the attributes of this builtin function.
+
+   IMPLICIT specifies condition when the builtin can be produced by
+   compiler.  For instance C90 reserves floorf function, but does not
+   define it's meaning.  When user uses floorf we may assume that the
+   floorf has the meaning we expect, but we can't produce floorf by
+   simplifying floor((double)float) since the runtime need not implement
+   it.
+
+   The builtins is registered only if COND is true.  */
+
+/* A GCC builtin (like __builtin_saveregs) is provided by the
+   compiler, but does not correspond to a function in the standard
+   library.  */
+#undef DEF_GCC_BUILTIN
+#define DEF_GCC_BUILTIN(ENUM, NAME, TYPE, ATTRS)		\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, BT_LAST,	\
+	       false, false, false, ATTRS, true, true)
+
+/* Like DEF_GCC_BUILTIN, except we don't prepend "__builtin_".  */
+#undef DEF_SYNC_BUILTIN
+#define DEF_SYNC_BUILTIN(ENUM, NAME, TYPE, ATTRS)		\
+  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, BT_LAST,	\
+	       false, false, false, ATTRS, true, true)
+
+/* A set of GCC builtins for _FloatN and _FloatNx types.  TYPE_MACRO
+   is called with an argument such as FLOAT32 to produce the enum
+   value for the type.  */
+#undef DEF_GCC_FLOATN_NX_BUILTINS
+#define DEF_GCC_FLOATN_NX_BUILTINS(ENUM, NAME, TYPE_MACRO, ATTRS)	\
+  DEF_GCC_BUILTIN (ENUM ## F16, NAME "f16", TYPE_MACRO (FLOAT16), ATTRS) \
+  DEF_GCC_BUILTIN (ENUM ## F32, NAME "f32", TYPE_MACRO (FLOAT32), ATTRS) \
+  DEF_GCC_BUILTIN (ENUM ## F64, NAME "f64", TYPE_MACRO (FLOAT64), ATTRS) \
+  DEF_GCC_BUILTIN (ENUM ## F128, NAME "f128", TYPE_MACRO (FLOAT128), ATTRS) \
+  DEF_GCC_BUILTIN (ENUM ## F32X, NAME "f32x", TYPE_MACRO (FLOAT32X), ATTRS) \
+  DEF_GCC_BUILTIN (ENUM ## F64X, NAME "f64x", TYPE_MACRO (FLOAT64X), ATTRS) \
+  DEF_GCC_BUILTIN (ENUM ## F128X, NAME "f128x", TYPE_MACRO (FLOAT128X), ATTRS)
+
+/* A library builtin (like __builtin_strchr) is a builtin equivalent
+   of an ANSI/ISO standard library function.  In addition to the
+   `__builtin' version, we will create an ordinary version (e.g,
+   `strchr') as well.  If we cannot compute the answer using the
+   builtin function, we will fall back to the standard library
+   version.  */
+#undef DEF_LIB_BUILTIN
+#define DEF_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, false, ATTRS, true, true)
+
+/* Like DEF_LIB_BUILTIN, except that the function is not one that is
+   specified by ANSI/ISO C.  So, when we're being fully conformant we
+   ignore the version of these builtins that does not begin with
+   __builtin.  */
+#undef DEF_EXT_LIB_BUILTIN
+#define DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, true, ATTRS, false, true)
+
+/* A set of GCC builtins for _FloatN and _FloatNx types.  TYPE_MACRO is called
+   with an argument such as FLOAT32 to produce the enum value for the type.  If
+   we are compiling for the C language with GNU extensions, we enable the name
+   without the __builtin_ prefix as well as the name with the __builtin_
+   prefix.  C++ does not enable these names by default because they don't have
+   the _Float<N> and _Float<N>X keywords, and a class based library should use
+   the __builtin_ names.  */
+#undef DEF_FLOATN_BUILTIN
+#define DEF_FLOATN_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       targetm.floatn_builtin_p ((int) ENUM), true, true, ATTRS, \
+	       false, true)
+#undef DEF_EXT_LIB_FLOATN_NX_BUILTINS
+#define DEF_EXT_LIB_FLOATN_NX_BUILTINS(ENUM, NAME, TYPE_MACRO, ATTRS)	\
+  DEF_FLOATN_BUILTIN (ENUM ## F16, NAME "f16", TYPE_MACRO (FLOAT16), ATTRS) \
+  DEF_FLOATN_BUILTIN (ENUM ## F32, NAME "f32", TYPE_MACRO (FLOAT32), ATTRS) \
+  DEF_FLOATN_BUILTIN (ENUM ## F64, NAME "f64", TYPE_MACRO (FLOAT64), ATTRS) \
+  DEF_FLOATN_BUILTIN (ENUM ## F128, NAME "f128", TYPE_MACRO (FLOAT128), ATTRS) \
+  DEF_FLOATN_BUILTIN (ENUM ## F32X, NAME "f32x", TYPE_MACRO (FLOAT32X), ATTRS) \
+  DEF_FLOATN_BUILTIN (ENUM ## F64X, NAME "f64x", TYPE_MACRO (FLOAT64X), ATTRS) \
+  DEF_FLOATN_BUILTIN (ENUM ## F128X, NAME "f128x", TYPE_MACRO (FLOAT128X), \
+		      ATTRS)
+
+/* Like DEF_LIB_BUILTIN, except that the function is only a part of
+   the standard in C94 or above.  */
+#undef DEF_C94_BUILTIN
+#define DEF_C94_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, !flag_isoc94, ATTRS, targetm.libc_has_function (function_c94), true)
+
+/* Like DEF_LIB_BUILTIN, except that the function is only a part of
+   the standard in C99 or above.  */
+#undef DEF_C99_BUILTIN
+#define DEF_C99_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, !flag_isoc99, ATTRS, targetm.libc_has_function (function_c99_misc), true)
+
+/* Like DEF_LIB_BUILTIN, except that the function is only a part of
+   the standard in C11 or above.  */
+#undef DEF_C11_BUILTIN
+#define DEF_C11_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, !flag_isoc11, ATTRS, targetm.libc_has_function (function_c11_misc), true)
+
+/* Like DEF_C99_BUILTIN, but for complex math functions.  */
+#undef DEF_C99_COMPL_BUILTIN
+#define DEF_C99_COMPL_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, !flag_isoc99, ATTRS, targetm.libc_has_function (function_c99_math_complex), true)
+
+/* Builtin that is specified by C99 and C90 reserve the name for future use.
+   We can still recognize the builtin in C90 mode but we can't produce it
+   implicitly.  */
+#undef DEF_C99_C90RES_BUILTIN
+#define DEF_C99_C90RES_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, !flag_isoc99, ATTRS, targetm.libc_has_function (function_c99_misc), true)
+
+/* Builtin that C99 reserve the name for future use. We can still recognize
+   the builtin in C99 mode but we can't produce it implicitly.  */
+#undef DEF_EXT_C99RES_BUILTIN
+#define DEF_EXT_C99RES_BUILTIN(ENUM, NAME, TYPE, ATTRS)        \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,   \
+	      true, true, true, ATTRS, false, true)
+
+/* Allocate the enum and the name for a builtin, but do not actually
+   define it here at all.  */
+#undef DEF_BUILTIN_STUB
+#define DEF_BUILTIN_STUB(ENUM, NAME) \
+  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, BT_LAST, BT_LAST, false, false, \
+	       false, ATTR_LAST, false, false)
+
+/* Builtin used by the implementation of OpenACC and OpenMP.  Few of these are
+   actually implemented in the compiler; most are in libgomp.  */
+/* These builtins also need to be enabled in offloading compilers invoked from
+   mkoffload; for that purpose, we're checking the -foffload-abi flag here.  */
+#undef DEF_GOACC_BUILTIN
+#define DEF_GOACC_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
+	       false, true, true, ATTRS, false, \
+	       (flag_openacc \
+		|| flag_offload_abi != OFFLOAD_ABI_UNSET))
+#undef DEF_GOACC_BUILTIN_COMPILER
+#define DEF_GOACC_BUILTIN_COMPILER(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
+	       flag_openacc, true, true, ATTRS, false, true)
+#undef DEF_GOACC_BUILTIN_ONLY
+#define DEF_GOACC_BUILTIN_ONLY(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, BT_LAST,    \
+	       false, false, true, ATTRS, false, flag_openacc)
+#undef DEF_GOMP_BUILTIN
+#define DEF_GOMP_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
+               false, true, true, ATTRS, false, \
+	       (flag_openacc \
+		|| flag_openmp \
+		|| flag_tree_parallelize_loops > 1 \
+		|| flag_offload_abi != OFFLOAD_ABI_UNSET))
+
+#undef DEF_HSA_BUILTIN
+#ifdef ENABLE_HSA
+#define DEF_HSA_BUILTIN(ENUM, NAME, TYPE, ATTRS)			\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
+               false, false, true, ATTRS, false, \
+	       (!flag_disable_hsa))
+#else
+#define DEF_HSA_BUILTIN(ENUM, NAME, TYPE, ATTRS)			\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
+               false, false, true, ATTRS, false, \
+	       (false))
+#endif
+
+/* Builtin used by the implementation of GNU TM.  These
+   functions are mapped to the actual implementation of the STM library. */
+#undef DEF_TM_BUILTIN
+#define DEF_TM_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, BT_LAST, \
+	       false, true, true, ATTRS, false, flag_tm)
+
+/* Builtin used by the implementation of libsanitizer. These
+   functions are mapped to the actual implementation of the 
+   libtsan library. */
+#undef DEF_SANITIZER_BUILTIN
+#define DEF_SANITIZER_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
+	       true, true, true, ATTRS, true, \
+	      (flag_sanitize & (SANITIZE_ADDRESS | SANITIZE_THREAD \
+				| SANITIZE_UNDEFINED \
+				| SANITIZE_UNDEFINED_NONDEFAULT) \
+	       || flag_sanitize_coverage))
+
+/* Define an attribute list for math functions that are normally
+   "impure" because some of them may write into global memory for
+   `errno'.  If !flag_errno_math they are instead "const".  */
+#undef ATTR_MATHFN_ERRNO
+#define ATTR_MATHFN_ERRNO (flag_errno_math ? \
+	ATTR_NOTHROW_LEAF_LIST : ATTR_CONST_NOTHROW_LEAF_LIST)
+
+/* Define an attribute list for math functions that are normally
+   "const" but if flag_rounding_math is set they are instead "pure".
+   This distinction accounts for the fact that some math functions
+   check the rounding mode which is akin to examining global
+   memory.  */
+#undef ATTR_MATHFN_FPROUNDING
+#define ATTR_MATHFN_FPROUNDING (flag_rounding_math ? \
+	ATTR_PURE_NOTHROW_LEAF_LIST : ATTR_CONST_NOTHROW_LEAF_LIST)
+
+/* Define an attribute list for math functions that are normally
+   "impure" because some of them may write into global memory for
+   `errno'.  If !flag_errno_math, we can possibly use "pure" or
+   "const" depending on whether we care about FP rounding.  */
+#undef ATTR_MATHFN_FPROUNDING_ERRNO
+#define ATTR_MATHFN_FPROUNDING_ERRNO (flag_errno_math ? \
+	ATTR_NOTHROW_LEAF_LIST : ATTR_MATHFN_FPROUNDING)
+
+/* Define an attribute list for math functions that need to mind FP
+   rounding, but because they store into memory they are never "const"
+   or "pure".  Use of this macro is mainly for documentation and
+   maintenance purposes.  */
+#undef ATTR_MATHFN_FPROUNDING_STORE
+#define ATTR_MATHFN_FPROUNDING_STORE ATTR_NOTHROW_LEAF_LIST
+
+/* Define an attribute list for leaf functions that do not throw
+   exceptions normally, but may throw exceptions when using
+   -fnon-call-exceptions.  */
+#define ATTR_NOTHROWCALL_LEAF_LIST (flag_non_call_exceptions ? \
+	ATTR_LEAF_LIST : ATTR_NOTHROW_LEAF_LIST)
+
+/* Make sure 0 is not a legitimate builtin.  */
+DEF_BUILTIN_STUB(BUILT_IN_NONE, (const char *)0)
+
+/* Category: math builtins.  */
+DEF_LIB_BUILTIN        (BUILT_IN_ACOS, "acos", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ACOSF, "acosf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ACOSH, "acosh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ACOSHF, "acoshf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ACOSHL, "acoshl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ACOSL, "acosl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C11_BUILTIN        (BUILT_IN_ALIGNED_ALLOC, "aligned_alloc", BT_FN_PTR_SIZE_SIZE, ATTR_ALLOC_SIZE_2_NOTHROW_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ASIN, "asin", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ASINF, "asinf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ASINH, "asinh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_ASINHF, "asinhf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_ASINHL, "asinhl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ASINL, "asinl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_ATAN, "atan", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_ATAN2, "atan2", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ATAN2F, "atan2f", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ATAN2L, "atan2l", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ATANF, "atanf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_ATANH, "atanh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ATANHF, "atanhf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ATANHL, "atanhl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ATANL, "atanl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_CBRT, "cbrt", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_CBRTF, "cbrtf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_CBRTL, "cbrtl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_CEIL, "ceil", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_CEILF, "ceilf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_CEILL, "ceill", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#define CEIL_TYPE(F) BT_FN_##F##_##F
+DEF_EXT_LIB_FLOATN_NX_BUILTINS (BUILT_IN_CEIL, "ceil", CEIL_TYPE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#undef CEIL_TYPE
+DEF_C99_BUILTIN        (BUILT_IN_COPYSIGN, "copysign", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_COPYSIGNF, "copysignf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_COPYSIGNL, "copysignl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#define COPYSIGN_TYPE(F) BT_FN_##F##_##F##_##F
+DEF_EXT_LIB_FLOATN_NX_BUILTINS (BUILT_IN_COPYSIGN, "copysign", COPYSIGN_TYPE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#undef COPYSIGN_TYPE
+DEF_LIB_BUILTIN        (BUILT_IN_COS, "cos", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_COSF, "cosf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_COSH, "cosh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_COSHF, "coshf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_COSHL, "coshl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_COSL, "cosl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_DREM, "drem", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_DREMF, "dremf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_DREML, "dreml", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ERF, "erf", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_ERFC, "erfc", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ERFCF, "erfcf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ERFCL, "erfcl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ERFF, "erff", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_ERFL, "erfl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_EXP, "exp", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_EXP10, "exp10", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_EXP10F, "exp10f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_EXP10L, "exp10l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXP2, "exp2", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXP2F, "exp2f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXP2L, "exp2l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_EXPF, "expf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_EXPL, "expl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXPM1, "expm1", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXPM1F, "expm1f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXPM1L, "expm1l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_FABS, "fabs", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FABSF, "fabsf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FABSL, "fabsl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#define FABS_TYPE(F) BT_FN_##F##_##F
+DEF_EXT_LIB_FLOATN_NX_BUILTINS (BUILT_IN_FABS, "fabs", FABS_TYPE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#undef FABS_TYPE
+DEF_GCC_BUILTIN        (BUILT_IN_FABSD32, "fabsd32", BT_FN_DFLOAT32_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_FABSD64, "fabsd64", BT_FN_DFLOAT64_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_FABSD128, "fabsd128", BT_FN_DFLOAT128_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FDIM, "fdim", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_FDIMF, "fdimf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_FDIML, "fdiml", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_FECLEAREXCEPT, "feclearexcept", BT_FN_INT_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FEGETENV, "fegetenv", BT_FN_INT_FENV_T_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FEGETEXCEPTFLAG, "fegetexceptflag", BT_FN_INT_FEXCEPT_T_PTR_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FEGETROUND, "fegetround", BT_FN_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FEHOLDEXCEPT, "feholdexcept", BT_FN_INT_FENV_T_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FERAISEEXCEPT, "feraiseexcept", BT_FN_INT_INT, ATTR_NULL)
+DEF_C99_BUILTIN        (BUILT_IN_FESETENV, "fesetenv", BT_FN_INT_CONST_FENV_T_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FESETEXCEPTFLAG, "fesetexceptflag", BT_FN_INT_CONST_FEXCEPT_T_PTR_INT, ATTR_NULL)
+DEF_C99_BUILTIN        (BUILT_IN_FESETROUND, "fesetround", BT_FN_INT_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FETESTEXCEPT, "fetestexcept", BT_FN_INT_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FEUPDATEENV, "feupdateenv", BT_FN_INT_CONST_FENV_T_PTR, ATTR_NULL)
+DEF_LIB_BUILTIN        (BUILT_IN_FLOOR, "floor", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FLOORF, "floorf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FLOORL, "floorl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#define FLOOR_TYPE(F) BT_FN_##F##_##F
+DEF_EXT_LIB_FLOATN_NX_BUILTINS (BUILT_IN_FLOOR, "floor", FLOOR_TYPE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#undef FLOOR_TYPE
+DEF_C99_BUILTIN        (BUILT_IN_FMA, "fma", BT_FN_DOUBLE_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_FMAF, "fmaf", BT_FN_FLOAT_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_FMAL, "fmal", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+#define FMA_TYPE(F) BT_FN_##F##_##F##_##F##_##F
+DEF_EXT_LIB_FLOATN_NX_BUILTINS (BUILT_IN_FMA, "fma", FMA_TYPE, ATTR_MATHFN_FPROUNDING)
+#undef FMA_TYPE
+DEF_C99_BUILTIN        (BUILT_IN_FMAX, "fmax", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FMAXF, "fmaxf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FMAXL, "fmaxl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#define FMAX_TYPE(F) BT_FN_##F##_##F##_##F
+DEF_EXT_LIB_FLOATN_NX_BUILTINS (BUILT_IN_FMAX, "fmax", FMAX_TYPE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#undef FMAX_TYPE
+DEF_C99_BUILTIN        (BUILT_IN_FMIN, "fmin", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FMINF, "fminf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FMINL, "fminl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#define FMIN_TYPE(F) BT_FN_##F##_##F##_##F
+DEF_EXT_LIB_FLOATN_NX_BUILTINS (BUILT_IN_FMIN, "fmin", FMIN_TYPE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#undef FMIN_TYPE
+DEF_LIB_BUILTIN        (BUILT_IN_FMOD, "fmod", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FMODF, "fmodf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FMODL, "fmodl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_FREXP, "frexp", BT_FN_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FREXPF, "frexpf", BT_FN_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FREXPL, "frexpl", BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMA, "gamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMAF, "gammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMAL, "gammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMA_R, "gamma_r", BT_FN_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMAF_R, "gammaf_r", BT_FN_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMAL_R, "gammal_r", BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_GCC_BUILTIN        (BUILT_IN_HUGE_VAL, "huge_val", BT_FN_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_HUGE_VALF, "huge_valf", BT_FN_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_HUGE_VALL, "huge_vall", BT_FN_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#define INF_TYPE(F) BT_FN_##F
+DEF_GCC_FLOATN_NX_BUILTINS (BUILT_IN_HUGE_VAL, "huge_val", INF_TYPE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_HYPOT, "hypot", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_HYPOTF, "hypotf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_HYPOTL, "hypotl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_ICEIL, "iceil", BT_FN_INT_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_ICEILF, "iceilf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_ICEILL, "iceill", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_IFLOOR, "ifloor", BT_FN_INT_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_IFLOORF, "ifloorf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_IFLOORL, "ifloorl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_ILOGB, "ilogb", BT_FN_INT_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ILOGBF, "ilogbf", BT_FN_INT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ILOGBL, "ilogbl", BT_FN_INT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_INF, "inf", BT_FN_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_INFF, "inff", BT_FN_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_INFL, "infl", BT_FN_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_FLOATN_NX_BUILTINS (BUILT_IN_INF, "inf", INF_TYPE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#undef INF_TYPE
+DEF_GCC_BUILTIN	       (BUILT_IN_INFD32, "infd32", BT_FN_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_INFD64, "infd64", BT_FN_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_INFD128, "infd128", BT_FN_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_IRINT, "irint", BT_FN_INT_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_IRINTF, "irintf", BT_FN_INT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_IRINTL, "irintl", BT_FN_INT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_IROUND, "iround", BT_FN_INT_DOUBLE, ATTR_MATHFN_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_IROUNDF, "iroundf", BT_FN_INT_FLOAT, ATTR_MATHFN_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_IROUNDL, "iroundl", BT_FN_INT_LONGDOUBLE, ATTR_MATHFN_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J0, "j0", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J0F, "j0f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J0L, "j0l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J1, "j1", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J1F, "j1f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J1L, "j1l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_JN, "jn", BT_FN_DOUBLE_INT_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_JNF, "jnf", BT_FN_FLOAT_INT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_JNL, "jnl", BT_FN_LONGDOUBLE_INT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_LCEIL, "lceil", BT_FN_LONG_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LCEILF, "lceilf", BT_FN_LONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LCEILL, "lceill", BT_FN_LONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_LDEXP, "ldexp", BT_FN_DOUBLE_DOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LDEXPF, "ldexpf", BT_FN_FLOAT_FLOAT_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LDEXPL, "ldexpl", BT_FN_LONGDOUBLE_LONGDOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_LFLOOR, "lfloor", BT_FN_LONG_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LFLOORF, "lfloorf", BT_FN_LONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LFLOORL, "lfloorl", BT_FN_LONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_LGAMMA, "lgamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_LGAMMAF, "lgammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_LGAMMAL, "lgammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_LGAMMA_R, "lgamma_r", BT_FN_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_LGAMMAF_R, "lgammaf_r", BT_FN_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_LGAMMAL_R, "lgammal_r", BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_GCC_BUILTIN        (BUILT_IN_LLCEIL, "llceil", BT_FN_LONGLONG_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LLCEILF, "llceilf", BT_FN_LONGLONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LLCEILL, "llceill", BT_FN_LONGLONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LLFLOOR, "llfloor", BT_FN_LONGLONG_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LLFLOORF, "llfloorf", BT_FN_LONGLONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LLFLOORL, "llfloorl", BT_FN_LONGLONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_LLRINT, "llrint", BT_FN_LONGLONG_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LLRINTF, "llrintf", BT_FN_LONGLONG_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LLRINTL, "llrintl", BT_FN_LONGLONG_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LLROUND, "llround", BT_FN_LONGLONG_DOUBLE, ATTR_MATHFN_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LLROUNDF, "llroundf", BT_FN_LONGLONG_FLOAT, ATTR_MATHFN_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LLROUNDL, "llroundl", BT_FN_LONGLONG_LONGDOUBLE, ATTR_MATHFN_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_LOG, "log", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_LOG10, "log10", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LOG10F, "log10f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LOG10L, "log10l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG1P, "log1p", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG1PF, "log1pf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG1PL, "log1pl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG2, "log2", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG2F, "log2f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG2L, "log2l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOGB, "logb", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOGBF, "logbf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOGBL, "logbl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LOGF, "logf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LOGL, "logl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LRINT, "lrint", BT_FN_LONG_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LRINTF, "lrintf", BT_FN_LONG_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LRINTL, "lrintl", BT_FN_LONG_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LROUND, "lround", BT_FN_LONG_DOUBLE, ATTR_MATHFN_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LROUNDF, "lroundf", BT_FN_LONG_FLOAT, ATTR_MATHFN_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LROUNDL, "lroundl", BT_FN_LONG_LONGDOUBLE, ATTR_MATHFN_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_MODF, "modf", BT_FN_DOUBLE_DOUBLE_DOUBLEPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_MODFF, "modff", BT_FN_FLOAT_FLOAT_FLOATPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_MODFL, "modfl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLEPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_NAN, "nan", BT_FN_DOUBLE_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_C99_BUILTIN        (BUILT_IN_NANF, "nanf", BT_FN_FLOAT_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_C99_BUILTIN        (BUILT_IN_NANL, "nanl", BT_FN_LONGDOUBLE_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+#define NAN_TYPE(F) BT_FN_##F##_CONST_STRING
+DEF_EXT_LIB_FLOATN_NX_BUILTINS (BUILT_IN_NAN, "nan", NAN_TYPE, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NAND32, "nand32", BT_FN_DFLOAT32_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NAND64, "nand64", BT_FN_DFLOAT64_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NAND128, "nand128", BT_FN_DFLOAT128_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NANS, "nans", BT_FN_DOUBLE_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NANSF, "nansf", BT_FN_FLOAT_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NANSL, "nansl", BT_FN_LONGDOUBLE_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_FLOATN_NX_BUILTINS (BUILT_IN_NANS, "nans", NAN_TYPE, ATTR_CONST_NOTHROW_NONNULL)
+#undef NAN_TYPE
+DEF_C99_BUILTIN        (BUILT_IN_NEARBYINT, "nearbyint", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_NEARBYINTF, "nearbyintf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_NEARBYINTL, "nearbyintl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#define NEARBYINT_TYPE(F) BT_FN_##F##_##F
+DEF_EXT_LIB_FLOATN_NX_BUILTINS (BUILT_IN_NEARBYINT, "nearbyint", NEARBYINT_TYPE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#undef NEARBYINT_TYPE
+DEF_C99_BUILTIN        (BUILT_IN_NEXTAFTER, "nextafter", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_NEXTAFTERF, "nextafterf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_NEXTAFTERL, "nextafterl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_NEXTTOWARD, "nexttoward", BT_FN_DOUBLE_DOUBLE_LONGDOUBLE, ATTR_MATHFN_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_NEXTTOWARDF, "nexttowardf", BT_FN_FLOAT_FLOAT_LONGDOUBLE, ATTR_MATHFN_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_NEXTTOWARDL, "nexttowardl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_POW, "pow", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_POW10, "pow10", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_POW10F, "pow10f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_POW10L, "pow10l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_POWF, "powf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_POWI, "powi", BT_FN_DOUBLE_DOUBLE_INT, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN        (BUILT_IN_POWIF, "powif", BT_FN_FLOAT_FLOAT_INT, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN        (BUILT_IN_POWIL, "powil", BT_FN_LONGDOUBLE_LONGDOUBLE_INT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_POWL, "powl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_REMAINDER, "remainder", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_REMAINDERF, "remainderf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_REMAINDERL, "remainderl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_REMQUO, "remquo", BT_FN_DOUBLE_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_REMQUOF, "remquof", BT_FN_FLOAT_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_REMQUOL, "remquol", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_RINT, "rint", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_RINTF, "rintf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_RINTL, "rintl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+#define RINT_TYPE(F) BT_FN_##F##_##F
+DEF_EXT_LIB_FLOATN_NX_BUILTINS (BUILT_IN_RINT, "rint", RINT_TYPE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#undef RINT_TYPE
+DEF_C99_BUILTIN        (BUILT_IN_ROUND, "round", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_ROUNDF, "roundf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_ROUNDL, "roundl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#define ROUND_TYPE(F) BT_FN_##F##_##F
+DEF_EXT_LIB_FLOATN_NX_BUILTINS (BUILT_IN_ROUND, "round", ROUND_TYPE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#undef ROUND_TYPE
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SCALB, "scalb", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SCALBF, "scalbf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SCALBL, "scalbl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBLN, "scalbln", BT_FN_DOUBLE_DOUBLE_LONG, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBLNF, "scalblnf", BT_FN_FLOAT_FLOAT_LONG, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBLNL, "scalblnl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONG, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBN, "scalbn", BT_FN_DOUBLE_DOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBNF, "scalbnf", BT_FN_FLOAT_FLOAT_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBNL, "scalbnl", BT_FN_LONGDOUBLE_LONGDOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBIT, "signbit", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITF, "signbitf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITL, "signbitl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITD32, "signbitd32", BT_FN_INT_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITD64, "signbitd64", BT_FN_INT_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITD128, "signbitd128", BT_FN_INT_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNIFICAND, "significand", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNIFICANDF, "significandf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNIFICANDL, "significandl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_SIN, "sin", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SINCOS, "sincos", BT_FN_VOID_DOUBLE_DOUBLEPTR_DOUBLEPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SINCOSF, "sincosf", BT_FN_VOID_FLOAT_FLOATPTR_FLOATPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SINCOSL, "sincosl", BT_FN_VOID_LONGDOUBLE_LONGDOUBLEPTR_LONGDOUBLEPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SINF, "sinf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_SINH, "sinh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SINHF, "sinhf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SINHL, "sinhl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SINL, "sinl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_SQRT, "sqrt", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SQRTF, "sqrtf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SQRTL, "sqrtl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+#define SQRT_TYPE(F) BT_FN_##F##_##F
+DEF_EXT_LIB_FLOATN_NX_BUILTINS (BUILT_IN_SQRT, "sqrt", SQRT_TYPE, ATTR_MATHFN_FPROUNDING_ERRNO)
+#undef SQRT_TYPE
+DEF_LIB_BUILTIN        (BUILT_IN_TAN, "tan", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_TANF, "tanf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_TANH, "tanh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_TANHF, "tanhf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_TANHL, "tanhl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_TANL, "tanl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_TGAMMA, "tgamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_TGAMMAF, "tgammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_TGAMMAL, "tgammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_TRUNC, "trunc", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_TRUNCF, "truncf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_TRUNCL, "truncl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#define TRUNC_TYPE(F) BT_FN_##F##_##F
+DEF_EXT_LIB_FLOATN_NX_BUILTINS (BUILT_IN_TRUNC, "trunc", TRUNC_TYPE, ATTR_CONST_NOTHROW_LEAF_LIST)
+#undef TRUNC_TYPE
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y0, "y0", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y0F, "y0f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y0L, "y0l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y1, "y1", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y1F, "y1f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y1L, "y1l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_YN, "yn", BT_FN_DOUBLE_INT_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_YNF, "ynf", BT_FN_FLOAT_INT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_YNL, "ynl", BT_FN_LONGDOUBLE_INT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+
+/* Category: _Complex math builtins.  */
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CABS, "cabs", BT_FN_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CABSF, "cabsf", BT_FN_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CABSL, "cabsl", BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOS, "cacos", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSF, "cacosf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSH, "cacosh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSHF, "cacoshf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSHL, "cacoshl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSL, "cacosl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CARG, "carg", BT_FN_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CARGF, "cargf", BT_FN_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CARGL, "cargl", BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASIN, "casin", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINF, "casinf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINH, "casinh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINHF, "casinhf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINHL, "casinhl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINL, "casinl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATAN, "catan", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANF, "catanf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANH, "catanh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANHF, "catanhf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANHL, "catanhl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANL, "catanl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOS, "ccos", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSF, "ccosf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSH, "ccosh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSHF, "ccoshf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSHL, "ccoshl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSL, "ccosl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CEXP, "cexp", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CEXPF, "cexpf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CEXPL, "cexpl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN        (BUILT_IN_CEXPI, "cexpi", BT_FN_COMPLEX_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN        (BUILT_IN_CEXPIF, "cexpif", BT_FN_COMPLEX_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN        (BUILT_IN_CEXPIL, "cexpil", BT_FN_COMPLEX_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CIMAG, "cimag", BT_FN_DOUBLE_COMPLEX_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CIMAGF, "cimagf", BT_FN_FLOAT_COMPLEX_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CIMAGL, "cimagl", BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CLOG, "clog", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CLOGF, "clogf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CLOGL, "clogl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_EXT_C99RES_BUILTIN (BUILT_IN_CLOG10, "clog10", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_EXT_C99RES_BUILTIN (BUILT_IN_CLOG10F, "clog10f", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_EXT_C99RES_BUILTIN (BUILT_IN_CLOG10L, "clog10l", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CONJ, "conj", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CONJF, "conjf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CONJL, "conjl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPOW, "cpow", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPOWF, "cpowf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPOWL, "cpowl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPROJ, "cproj", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPROJF, "cprojf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPROJL, "cprojl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CREAL, "creal", BT_FN_DOUBLE_COMPLEX_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CREALF, "crealf", BT_FN_FLOAT_COMPLEX_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CREALL, "creall", BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSIN, "csin", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINF, "csinf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINH, "csinh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINHF, "csinhf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINHL, "csinhl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINL, "csinl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSQRT, "csqrt", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSQRTF, "csqrtf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSQRTL, "csqrtl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTAN, "ctan", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANF, "ctanf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANH, "ctanh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANHF, "ctanhf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANHL, "ctanhl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANL, "ctanl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+
+/* Category: string/memory builtins.  */
+/* bcmp, bcopy and bzero have traditionally accepted NULL pointers
+   when the length parameter is zero, so don't apply attribute "nonnull".  */
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_BCMP, "bcmp", BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_BCOPY, "bcopy", BT_FN_VOID_CONST_PTR_PTR_SIZE, ATTR_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_BZERO, "bzero", BT_FN_VOID_PTR_SIZE, ATTR_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_INDEX, "index", BT_FN_STRING_CONST_STRING_INT, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_MEMCHR, "memchr", BT_FN_PTR_CONST_PTR_INT_SIZE, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_MEMCMP, "memcmp", BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN	       (BUILT_IN_MEMCPY, "memcpy", BT_FN_PTR_PTR_CONST_PTR_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN	       (BUILT_IN_MEMMOVE, "memmove", BT_FN_PTR_PTR_CONST_PTR_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_MEMPCPY, "mempcpy", BT_FN_PTR_PTR_CONST_PTR_SIZE, ATTR_RETNONNULL_NOTHROW_LEAF)
+DEF_LIB_BUILTIN	       (BUILT_IN_MEMSET, "memset", BT_FN_PTR_PTR_INT_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_RINDEX, "rindex", BT_FN_STRING_CONST_STRING_INT, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STPCPY, "stpcpy", BT_FN_STRING_STRING_CONST_STRING, ATTR_RETNONNULL_NOTHROW_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STPNCPY, "stpncpy", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_RETNONNULL_NOTHROW_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRCASECMP, "strcasecmp", BT_FN_INT_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRCAT, "strcat", BT_FN_STRING_STRING_CONST_STRING, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRCHR, "strchr", BT_FN_STRING_CONST_STRING_INT, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRCMP, "strcmp", BT_FN_INT_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRCPY, "strcpy", BT_FN_STRING_STRING_CONST_STRING, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRCSPN, "strcspn", BT_FN_SIZE_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRDUP, "strdup", BT_FN_STRING_CONST_STRING, ATTR_MALLOC_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRNDUP, "strndup", BT_FN_STRING_CONST_STRING_SIZE, ATTR_MALLOC_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRLEN, "strlen", BT_FN_SIZE_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRNCASECMP, "strncasecmp", BT_FN_INT_CONST_STRING_CONST_STRING_SIZE, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRNCAT, "strncat", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRNCMP, "strncmp", BT_FN_INT_CONST_STRING_CONST_STRING_SIZE, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRNCPY, "strncpy", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRNLEN, "strnlen", BT_FN_SIZE_CONST_STRING_SIZE, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRPBRK, "strpbrk", BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRRCHR, "strrchr", BT_FN_STRING_CONST_STRING_INT, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRSPN, "strspn", BT_FN_SIZE_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRSTR, "strstr", BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+
+/* Category: stdio builtins.  */
+DEF_LIB_BUILTIN        (BUILT_IN_FPRINTF, "fprintf", BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_NONNULL_1_FORMAT_PRINTF_2_3)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPRINTF_UNLOCKED, "fprintf_unlocked", BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_NONNULL_1_FORMAT_PRINTF_2_3)
+DEF_LIB_BUILTIN        (BUILT_IN_PUTC, "putc", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_PUTC_UNLOCKED, "putc_unlocked", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_FPUTC, "fputc", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPUTC_UNLOCKED, "fputc_unlocked", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_FPUTS, "fputs", BT_FN_INT_CONST_STRING_FILEPTR, ATTR_NONNULL_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPUTS_UNLOCKED, "fputs_unlocked", BT_FN_INT_CONST_STRING_FILEPTR, ATTR_NONNULL_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_FSCANF, "fscanf", BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_FORMAT_SCANF_2_3)
+DEF_LIB_BUILTIN        (BUILT_IN_FWRITE, "fwrite", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR, ATTR_NONNULL_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FWRITE_UNLOCKED, "fwrite_unlocked", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR, ATTR_NONNULL_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_PRINTF, "printf", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_1_2)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_PRINTF_UNLOCKED, "printf_unlocked", BT_FN_INT_CONST_STRING_VAR, ATTR_NONNULL_1_FORMAT_PRINTF_1_2)
+DEF_LIB_BUILTIN        (BUILT_IN_PUTCHAR, "putchar", BT_FN_INT_INT, ATTR_NULL)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_PUTCHAR_UNLOCKED, "putchar_unlocked", BT_FN_INT_INT, ATTR_NULL)
+DEF_LIB_BUILTIN        (BUILT_IN_PUTS, "puts", BT_FN_INT_CONST_STRING, ATTR_NONNULL_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_PUTS_UNLOCKED, "puts_unlocked", BT_FN_INT_CONST_STRING, ATTR_NONNULL_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_SCANF, "scanf", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_SCANF_1_2)
+DEF_C99_BUILTIN        (BUILT_IN_SNPRINTF, "snprintf", BT_FN_INT_STRING_SIZE_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_NOTHROW_3_4)
+
+DEF_LIB_BUILTIN        (BUILT_IN_SPRINTF, "sprintf", BT_FN_INT_STRING_CONST_STRING_VAR, ATTR_NOTHROW_NONNULL_1_FORMAT_PRINTF_2_3)
+DEF_LIB_BUILTIN        (BUILT_IN_SSCANF, "sscanf", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_FORMAT_SCANF_NOTHROW_2_3)
+DEF_LIB_BUILTIN        (BUILT_IN_VFPRINTF, "vfprintf", BT_FN_INT_FILEPTR_CONST_STRING_VALIST_ARG, ATTR_NONNULL_1_FORMAT_PRINTF_2_0)
+DEF_C99_BUILTIN        (BUILT_IN_VFSCANF, "vfscanf", BT_FN_INT_FILEPTR_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_2_0)
+DEF_LIB_BUILTIN        (BUILT_IN_VPRINTF, "vprintf", BT_FN_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_1_0)
+DEF_C99_BUILTIN        (BUILT_IN_VSCANF, "vscanf", BT_FN_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_1_0)
+DEF_C99_BUILTIN        (BUILT_IN_VSNPRINTF, "vsnprintf", BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_NOTHROW_3_0)
+DEF_LIB_BUILTIN        (BUILT_IN_VSPRINTF, "vsprintf", BT_FN_INT_STRING_CONST_STRING_VALIST_ARG, ATTR_NOTHROW_NONNULL_1_FORMAT_PRINTF_2_0)
+DEF_C99_BUILTIN        (BUILT_IN_VSSCANF, "vsscanf", BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_NOTHROW_2_0)
+
+/* Category: ctype builtins.  */
+DEF_LIB_BUILTIN        (BUILT_IN_ISALNUM, "isalnum", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISALPHA, "isalpha", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISASCII, "isascii", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_ISBLANK, "isblank", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISCNTRL, "iscntrl", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISDIGIT, "isdigit", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISGRAPH, "isgraph", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISLOWER, "islower", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISPRINT, "isprint", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISPUNCT, "ispunct", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISSPACE, "isspace", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISUPPER, "isupper", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISXDIGIT, "isxdigit", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_TOASCII, "toascii", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_TOLOWER, "tolower", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_TOUPPER, "toupper", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+
+/* Category: wctype builtins.  */
+DEF_C94_BUILTIN        (BUILT_IN_ISWALNUM, "iswalnum", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWALPHA, "iswalpha", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_ISWBLANK, "iswblank", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWCNTRL, "iswcntrl", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWDIGIT, "iswdigit", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWGRAPH, "iswgraph", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWLOWER, "iswlower", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWPRINT, "iswprint", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWPUNCT, "iswpunct", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWSPACE, "iswspace", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWUPPER, "iswupper", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWXDIGIT, "iswxdigit", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_TOWLOWER, "towlower", BT_FN_WINT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_TOWUPPER, "towupper", BT_FN_WINT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+
+/* Category: integer overflow checking builtins.  */
+DEF_GCC_BUILTIN        (BUILT_IN_ADD_OVERFLOW, "add_overflow", BT_FN_BOOL_VAR, ATTR_NOTHROW_NONNULL_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_SUB_OVERFLOW, "sub_overflow", BT_FN_BOOL_VAR, ATTR_NOTHROW_NONNULL_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_MUL_OVERFLOW, "mul_overflow", BT_FN_BOOL_VAR, ATTR_NOTHROW_NONNULL_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ADD_OVERFLOW_P, "add_overflow_p", BT_FN_BOOL_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_SUB_OVERFLOW_P, "sub_overflow_p", BT_FN_BOOL_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_MUL_OVERFLOW_P, "mul_overflow_p", BT_FN_BOOL_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+/* Clang compatibility.  */
+DEF_GCC_BUILTIN        (BUILT_IN_SADD_OVERFLOW, "sadd_overflow", BT_FN_BOOL_INT_INT_INTPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SADDL_OVERFLOW, "saddl_overflow", BT_FN_BOOL_LONG_LONG_LONGPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SADDLL_OVERFLOW, "saddll_overflow", BT_FN_BOOL_LONGLONG_LONGLONG_LONGLONGPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SSUB_OVERFLOW, "ssub_overflow", BT_FN_BOOL_INT_INT_INTPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SSUBL_OVERFLOW, "ssubl_overflow", BT_FN_BOOL_LONG_LONG_LONGPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SSUBLL_OVERFLOW, "ssubll_overflow", BT_FN_BOOL_LONGLONG_LONGLONG_LONGLONGPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SMUL_OVERFLOW, "smul_overflow", BT_FN_BOOL_INT_INT_INTPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SMULL_OVERFLOW, "smull_overflow", BT_FN_BOOL_LONG_LONG_LONGPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SMULLL_OVERFLOW, "smulll_overflow", BT_FN_BOOL_LONGLONG_LONGLONG_LONGLONGPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UADD_OVERFLOW, "uadd_overflow", BT_FN_BOOL_UINT_UINT_UINTPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UADDL_OVERFLOW, "uaddl_overflow", BT_FN_BOOL_ULONG_ULONG_ULONGPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UADDLL_OVERFLOW, "uaddll_overflow", BT_FN_BOOL_ULONGLONG_ULONGLONG_ULONGLONGPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_USUB_OVERFLOW, "usub_overflow", BT_FN_BOOL_UINT_UINT_UINTPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_USUBL_OVERFLOW, "usubl_overflow", BT_FN_BOOL_ULONG_ULONG_ULONGPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_USUBLL_OVERFLOW, "usubll_overflow", BT_FN_BOOL_ULONGLONG_ULONGLONG_ULONGLONGPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UMUL_OVERFLOW, "umul_overflow", BT_FN_BOOL_UINT_UINT_UINTPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UMULL_OVERFLOW, "umull_overflow", BT_FN_BOOL_ULONG_ULONG_ULONGPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UMULLL_OVERFLOW, "umulll_overflow", BT_FN_BOOL_ULONGLONG_ULONGLONG_ULONGLONGPTR, ATTR_NOTHROW_NONNULL_LEAF_LIST)
+
+/* Category: miscellaneous builtins.  */
+DEF_LIB_BUILTIN        (BUILT_IN_ABORT, "abort", BT_FN_VOID, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_COLD_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ABS, "abs", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_AGGREGATE_INCOMING_ADDRESS, "aggregate_incoming_address", BT_FN_PTR_VAR, ATTR_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ALLOCA, "alloca", BT_FN_PTR_SIZE, ATTR_ALLOCA_SIZE_1_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_APPLY, "apply", BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_APPLY_ARGS, "apply_args", BT_FN_PTR_VAR, ATTR_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_BSWAP16, "bswap16", BT_FN_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_BSWAP32, "bswap32", BT_FN_UINT32_UINT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_BSWAP64, "bswap64", BT_FN_UINT64_UINT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_CLEAR_CACHE, "__clear_cache", BT_FN_VOID_PTR_PTR, ATTR_NOTHROW_LEAF_LIST)
+/* [trans-mem]: Adjust BUILT_IN_TM_CALLOC if BUILT_IN_CALLOC is changed.  */
+DEF_LIB_BUILTIN        (BUILT_IN_CALLOC, "calloc", BT_FN_PTR_SIZE_SIZE, ATTR_MALLOC_SIZE_1_2_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLASSIFY_TYPE, "classify_type", BT_FN_INT_VAR, ATTR_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLZ, "clz", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLZIMAX, "clzimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLZL, "clzl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLZLL, "clzll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CONSTANT_P, "constant_p", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CTZ, "ctz", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CTZIMAX, "ctzimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CTZL, "ctzl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CTZLL, "ctzll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLRSB, "clrsb", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLRSBIMAX, "clrsbimax", BT_FN_INT_INTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLRSBL, "clrsbl", BT_FN_INT_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLRSBLL, "clrsbll", BT_FN_INT_LONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_DCGETTEXT, "dcgettext", BT_FN_STRING_CONST_STRING_CONST_STRING_INT, ATTR_FORMAT_ARG_2)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_DGETTEXT, "dgettext", BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_FORMAT_ARG_2)
+DEF_GCC_BUILTIN        (BUILT_IN_DWARF_CFA, "dwarf_cfa", BT_FN_PTR, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_DWARF_SP_COLUMN, "dwarf_sp_column", BT_FN_UINT, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_EH_RETURN, "eh_return", BT_FN_VOID_PTRMODE_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_EH_RETURN_DATA_REGNO, "eh_return_data_regno", BT_FN_INT_INT, ATTR_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECL, "execl", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_SENTINEL_NOTHROW_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECLP, "execlp", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_SENTINEL_NOTHROW_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECLE, "execle", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_NOTHROW_SENTINEL_1)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECV, "execv", BT_FN_INT_CONST_STRING_PTR_CONST_STRING, ATTR_NOTHROW_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECVP, "execvp", BT_FN_INT_CONST_STRING_PTR_CONST_STRING, ATTR_NOTHROW_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECVE, "execve", BT_FN_INT_CONST_STRING_PTR_CONST_STRING_PTR_CONST_STRING, ATTR_NOTHROW_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_EXIT, "exit", BT_FN_VOID_INT, ATTR_NORETURN_NOTHROW_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_EXPECT, "expect", BT_FN_LONG_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_EXPECT_WITH_PROBABILITY, "expect_with_probability", BT_FN_LONG_LONG_LONG_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_ASSUME_ALIGNED, "assume_aligned", BT_FN_PTR_CONST_PTR_SIZE_VAR, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_EXTEND_POINTER, "extend_pointer", BT_FN_UNWINDWORD_PTR, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_EXTRACT_RETURN_ADDR, "extract_return_addr", BT_FN_PTR_PTR, ATTR_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFS, "ffs", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFSIMAX, "ffsimax", BT_FN_INT_INTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFSL, "ffsl", BT_FN_INT_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFSLL, "ffsll", BT_FN_INT_LONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_FORK, "fork", BT_FN_PID, ATTR_NOTHROW_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_FRAME_ADDRESS, "frame_address", BT_FN_PTR_UINT, ATTR_NULL)
+/* [trans-mem]: Adjust BUILT_IN_TM_FREE if BUILT_IN_FREE is changed.  */
+DEF_LIB_BUILTIN        (BUILT_IN_FREE, "free", BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_FROB_RETURN_ADDR, "frob_return_addr", BT_FN_PTR_PTR, ATTR_NULL)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GETTEXT, "gettext", BT_FN_STRING_CONST_STRING, ATTR_FORMAT_ARG_1)
+DEF_C99_BUILTIN        (BUILT_IN_IMAXABS, "imaxabs", BT_FN_INTMAX_INTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_INIT_DWARF_REG_SIZES, "init_dwarf_reg_size_table", BT_FN_VOID_PTR, ATTR_NULL)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITE, "finite", BT_FN_INT_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITEF, "finitef", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITEL, "finitel", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITED32, "finited32", BT_FN_INT_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITED64, "finited64", BT_FN_INT_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITED128, "finited128", BT_FN_INT_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_FPCLASSIFY, "fpclassify", BT_FN_INT_INT_INT_INT_INT_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISFINITE, "isfinite", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISINF_SIGN, "isinf_sign", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ISINF, "isinf", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFF, "isinff", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFL, "isinfl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFD32, "isinfd32", BT_FN_INT_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFD64, "isinfd64", BT_FN_INT_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFD128, "isinfd128", BT_FN_INT_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ISNAN, "isnan", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNANF, "isnanf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNANL, "isnanl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNAND32, "isnand32", BT_FN_INT_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNAND64, "isnand64", BT_FN_INT_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNAND128, "isnand128", BT_FN_INT_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_ISNORMAL, "isnormal", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISGREATER, "isgreater", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISGREATEREQUAL, "isgreaterequal", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISLESS, "isless", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISLESSEQUAL, "islessequal", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISLESSGREATER, "islessgreater", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISUNORDERED, "isunordered", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_LABS, "labs", BT_FN_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_LLABS, "llabs", BT_FN_LONGLONG_LONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LONGJMP, "longjmp", BT_FN_VOID_PTR_INT, ATTR_NORETURN_NOTHROW_LIST)
+/* [trans-mem]: Adjust BUILT_IN_TM_MALLOC if BUILT_IN_MALLOC is changed.  */
+DEF_LIB_BUILTIN        (BUILT_IN_MALLOC, "malloc", BT_FN_PTR_SIZE, ATTR_MALLOC_SIZE_1_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_NEXT_ARG, "next_arg", BT_FN_PTR_VAR, ATTR_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_PARITY, "parity", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_PARITYIMAX, "parityimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_PARITYL, "parityl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_PARITYLL, "parityll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNT, "popcount", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNTIMAX, "popcountimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNTL, "popcountl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNTLL, "popcountll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_POSIX_MEMALIGN, "posix_memalign", BT_FN_INT_PTRPTR_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_PREFETCH, "prefetch", BT_FN_VOID_CONST_PTR_VAR, ATTR_NOVOPS_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_REALLOC, "realloc", BT_FN_PTR_PTR_SIZE, ATTR_ALLOC_SIZE_2_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_RETURN, "return", BT_FN_VOID_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_RETURN_ADDRESS, "return_address", BT_FN_PTR_UINT, ATTR_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SAVEREGS, "saveregs", BT_FN_PTR_VAR, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_SETJMP, "setjmp", BT_FN_INT_PTR, ATTR_RT_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRFMON, "strfmon", BT_FN_SSIZE_STRING_SIZE_CONST_STRING_VAR, ATTR_FORMAT_STRFMON_NOTHROW_3_4)
+DEF_LIB_BUILTIN        (BUILT_IN_STRFTIME, "strftime", BT_FN_SIZE_STRING_SIZE_CONST_STRING_CONST_TM_PTR, ATTR_FORMAT_STRFTIME_NOTHROW_3_0)
+DEF_GCC_BUILTIN        (BUILT_IN_TRAP, "trap", BT_FN_VOID, ATTR_NORETURN_NOTHROW_LEAF_COLD_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UNREACHABLE, "unreachable", BT_FN_VOID, ATTR_CONST_NORETURN_NOTHROW_LEAF_COLD_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UNWIND_INIT, "unwind_init", BT_FN_VOID, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_UPDATE_SETJMP_BUF, "update_setjmp_buf", BT_FN_VOID_PTR, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_VA_COPY, "va_copy", BT_FN_VOID_VALIST_REF_VALIST_ARG, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_VA_END, "va_end", BT_FN_VOID_VALIST_REF, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_VA_START, "va_start", BT_FN_VOID_VALIST_REF_VAR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_VA_ARG_PACK, "va_arg_pack", BT_FN_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_VA_ARG_PACK_LEN, "va_arg_pack_len", BT_FN_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN__EXIT, "_exit", BT_FN_VOID_INT, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN__EXIT2, "_Exit", BT_FN_VOID_INT, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+
+/* Implementing nested functions.  */
+DEF_BUILTIN_STUB (BUILT_IN_INIT_TRAMPOLINE, "__builtin_init_trampoline")
+DEF_BUILTIN_STUB (BUILT_IN_INIT_HEAP_TRAMPOLINE, "__builtin_init_heap_trampoline")
+DEF_BUILTIN_STUB (BUILT_IN_ADJUST_TRAMPOLINE, "__builtin_adjust_trampoline")
+DEF_BUILTIN_STUB (BUILT_IN_INIT_DESCRIPTOR, "__builtin_init_descriptor")
+DEF_BUILTIN_STUB (BUILT_IN_ADJUST_DESCRIPTOR, "__builtin_adjust_descriptor")
+DEF_BUILTIN_STUB (BUILT_IN_NONLOCAL_GOTO, "__builtin_nonlocal_goto")
+
+/* Implementing __builtin_setjmp.  */
+DEF_BUILTIN_STUB (BUILT_IN_SETJMP_SETUP, "__builtin_setjmp_setup")
+DEF_BUILTIN_STUB (BUILT_IN_SETJMP_RECEIVER, "__builtin_setjmp_receiver")
+
+/* Implementing variable sized local variables.  */
+DEF_BUILTIN_STUB (BUILT_IN_STACK_SAVE, "__builtin_stack_save")
+DEF_BUILTIN_STUB (BUILT_IN_STACK_RESTORE, "__builtin_stack_restore")
+DEF_BUILTIN_STUB (BUILT_IN_ALLOCA_WITH_ALIGN, "__builtin_alloca_with_align")
+DEF_BUILTIN_STUB (BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX, "__builtin_alloca_with_align_and_max")
+
+/* An internal version of memcmp, used when the result is only tested for
+   equality with zero.  */
+DEF_BUILTIN_STUB (BUILT_IN_MEMCMP_EQ, "__builtin_memcmp_eq")
+
+/* An internal version of strcmp/strncmp, used when the result is only 
+   tested for equality with zero.  */
+DEF_BUILTIN_STUB (BUILT_IN_STRCMP_EQ, "__builtin_strcmp_eq")
+DEF_BUILTIN_STUB (BUILT_IN_STRNCMP_EQ, "__builtin_strncmp_eq")
+
+/* Object size checking builtins.  */
+DEF_GCC_BUILTIN	       (BUILT_IN_OBJECT_SIZE, "object_size", BT_FN_SIZE_CONST_PTR_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_MEMCPY_CHK, "__memcpy_chk", BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_MEMMOVE_CHK, "__memmove_chk", BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_MEMPCPY_CHK, "__mempcpy_chk", BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE, ATTR_RETNONNULL_NOTHROW_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_MEMSET_CHK, "__memset_chk", BT_FN_PTR_PTR_INT_SIZE_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STPCPY_CHK, "__stpcpy_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_RETNONNULL_NOTHROW_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STPNCPY_CHK, "__stpncpy_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE_SIZE, ATTR_RETNONNULL_NOTHROW_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRCAT_CHK, "__strcat_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRCPY_CHK, "__strcpy_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRNCAT_CHK, "__strncat_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRNCPY_CHK, "__strncpy_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SNPRINTF_CHK, "__snprintf_chk", BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_NOTHROW_5_6)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SPRINTF_CHK, "__sprintf_chk", BT_FN_INT_STRING_INT_SIZE_CONST_STRING_VAR, ATTR_NOTHROW_NONNULL_1_FORMAT_PRINTF_4_5)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_VSNPRINTF_CHK, "__vsnprintf_chk", BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_NOTHROW_5_0)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_VSPRINTF_CHK, "__vsprintf_chk", BT_FN_INT_STRING_INT_SIZE_CONST_STRING_VALIST_ARG, ATTR_NOTHROW_NONNULL_1_FORMAT_PRINTF_4_0)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPRINTF_CHK, "__fprintf_chk", BT_FN_INT_FILEPTR_INT_CONST_STRING_VAR, ATTR_NONNULL_1_FORMAT_PRINTF_3_4)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_PRINTF_CHK, "__printf_chk", BT_FN_INT_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_2_3)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_VFPRINTF_CHK, "__vfprintf_chk", BT_FN_INT_FILEPTR_INT_CONST_STRING_VALIST_ARG, ATTR_NONNULL_1_FORMAT_PRINTF_3_0)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_VPRINTF_CHK, "__vprintf_chk", BT_FN_INT_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_2_0)
+
+/* Profiling hooks.  */
+DEF_BUILTIN (BUILT_IN_PROFILE_FUNC_ENTER, "__cyg_profile_func_enter", BUILT_IN_NORMAL, BT_FN_VOID_PTR_PTR, BT_LAST,
+	     false, false, false, ATTR_NULL, true, true)
+DEF_BUILTIN (BUILT_IN_PROFILE_FUNC_EXIT, "__cyg_profile_func_exit", BUILT_IN_NORMAL, BT_FN_VOID_PTR_PTR, BT_LAST,
+	     false, false, false, ATTR_NULL, true, true)
+
+/* TLS thread pointer related builtins.  */
+DEF_BUILTIN (BUILT_IN_THREAD_POINTER, "__builtin_thread_pointer",
+	     BUILT_IN_NORMAL, BT_FN_PTR, BT_LAST,
+	     false, false, true, ATTR_CONST_NOTHROW_LIST, true,
+	     targetm.have_tls)
+
+DEF_BUILTIN (BUILT_IN_SET_THREAD_POINTER, "__builtin_set_thread_pointer",
+	     BUILT_IN_NORMAL, BT_FN_VOID_PTR, BT_LAST,
+	     false, false, true, ATTR_NOTHROW_LIST, true,
+	     targetm.have_tls)
+
+/* TLS emulation.  */
+DEF_BUILTIN (BUILT_IN_EMUTLS_GET_ADDRESS, targetm.emutls.get_address,
+	     BUILT_IN_NORMAL,
+	     BT_FN_PTR_PTR,  BT_FN_PTR_PTR,
+	     true, true, true, ATTR_CONST_NOTHROW_NONNULL_LEAF, false,
+	     !targetm.have_tls)
+DEF_BUILTIN (BUILT_IN_EMUTLS_REGISTER_COMMON,
+	     targetm.emutls.register_common, BUILT_IN_NORMAL,
+	     BT_FN_VOID_PTR_WORD_WORD_PTR, BT_FN_VOID_PTR_WORD_WORD_PTR,
+	     true, true, true, ATTR_NOTHROW_LEAF_LIST, false,
+	     !targetm.have_tls)
+
+/* Suppressing speculation.  Users are expected to use the first (N)
+   variant, which will be translated internally into one of the other
+   types.  */
+
+DEF_GCC_BUILTIN (BUILT_IN_SPECULATION_SAFE_VALUE_N, "speculation_safe_value",
+		 BT_FN_VOID_VAR, ATTR_NOVOPS_NOTHROW_LEAF_LIST)
+
+DEF_GCC_BUILTIN (BUILT_IN_SPECULATION_SAFE_VALUE_PTR,
+		 "speculation_safe_value_ptr", BT_FN_PTR_PTR_VAR,
+		 ATTR_NOVOPS_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_SPECULATION_SAFE_VALUE_1, "speculation_safe_value_1",
+		 BT_FN_I1_I1_VAR, ATTR_NOVOPS_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_SPECULATION_SAFE_VALUE_2, "speculation_safe_value_2",
+		 BT_FN_I2_I2_VAR, ATTR_NOVOPS_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_SPECULATION_SAFE_VALUE_4, "speculation_safe_value_4",
+		 BT_FN_I4_I4_VAR, ATTR_NOVOPS_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_SPECULATION_SAFE_VALUE_8, "speculation_safe_value_8",
+		 BT_FN_I8_I8_VAR, ATTR_NOVOPS_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_SPECULATION_SAFE_VALUE_16,
+		 "speculation_safe_value_16", BT_FN_I16_I16_VAR,
+		 ATTR_NOVOPS_NOTHROW_LEAF_LIST)
+
+/* Exception support.  */
+DEF_BUILTIN_STUB (BUILT_IN_UNWIND_RESUME, "__builtin_unwind_resume")
+DEF_BUILTIN_STUB (BUILT_IN_CXA_END_CLEANUP, "__builtin_cxa_end_cleanup")
+DEF_BUILTIN_STUB (BUILT_IN_EH_POINTER, "__builtin_eh_pointer")
+DEF_BUILTIN_STUB (BUILT_IN_EH_FILTER, "__builtin_eh_filter")
+DEF_BUILTIN_STUB (BUILT_IN_EH_COPY_VALUES, "__builtin_eh_copy_values")
+
+/* __FILE__, __LINE__, __FUNCTION__ as builtins.  */
+DEF_GCC_BUILTIN (BUILT_IN_FILE, "FILE", BT_FN_CONST_STRING, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_FUNCTION, "FUNCTION", BT_FN_CONST_STRING, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_LINE, "LINE", BT_FN_INT, ATTR_NOTHROW_LEAF_LIST)
+
+/* Synchronization Primitives.  */
+#include "sync-builtins.def"
+
+/* Offloading and Multi Processing builtins.  */
+#include "omp-builtins.def"
+
+/* Heterogeneous Systems Architecture.  */
+#include "hsa-builtins.def"
+
+/* GTM builtins. */
+#include "gtm-builtins.def"
+
+/* Sanitizer builtins. */
+#include "sanitizer.def"
+
+/* Do not expose the BRIG builtins by default gcc-wide, but only privately in
+   the BRIG FE as long as there are no references for them in the middle end
+   or any of the upstream backends.  */
+
+#ifndef DEF_HSAIL_BUILTIN
+#define DEF_HSAIL_BUILTIN(ENUM, HSAIL_OPCODE, HSAIL_TYPE, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN_STUB (ENUM, "__builtin_" NAME)
+#endif
+
+/* HSAIL atomic builtins do not have separate identifying opcodes.  */
+
+#ifndef DEF_HSAIL_ATOMIC_BUILTIN
+#define DEF_HSAIL_ATOMIC_BUILTIN(ENUM, ATOMIC_OPCODE, HSAIL_TYPE, NAME, \
+	TYPE, ATTRS) \
+  DEF_BUILTIN_STUB (ENUM, "__builtin_" NAME)
+#endif
+
+/* HSAIL saturating arithmetics builtins.  */
+
+#ifndef DEF_HSAIL_SAT_BUILTIN
+#define DEF_HSAIL_SAT_BUILTIN(ENUM, BRIG_OPCODE, HSAIL_TYPE, NAME, \
+	TYPE, ATTRS) \
+  DEF_BUILTIN_STUB (ENUM, "__builtin_" NAME)
+#endif
+
+/* HSAIL builtins used internally by the frontend.  */
+
+#ifndef DEF_HSAIL_INTR_BUILTIN
+#define DEF_HSAIL_INTR_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN_STUB (ENUM, "__builtin_" NAME)
+#endif
+
+/* HSAIL saturated conversions.  */
+
+#ifndef DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN
+#define DEF_HSAIL_CVT_ZEROI_SAT_BUILTIN(ENUM, HSAIL_DEST_TYPE, HSAIL_SRC_TYPE, \
+  NAME, TYPE, ATTRS) \
+  DEF_BUILTIN_STUB (ENUM, "__builtin_" NAME)
+#endif
+
+/* HSAIL/BRIG frontend builtins.  */
+#include "brig-builtins.def"
+
+#undef DEF_BUILTIN
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/builtins.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/builtins.h
new file mode 100644
index 0000000..1ffb491
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/builtins.h
@@ -0,0 +1,154 @@
+/* Expand builtin functions.
+   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_BUILTINS_H
+#define GCC_BUILTINS_H
+
+#include <mpc.h>
+
+/* Target-dependent globals.  */
+struct target_builtins {
+  /* For each register that may be used for calling a function, this
+     gives a mode used to copy the register's value.  VOIDmode indicates
+     the register is not used for calling a function.  If the machine
+     has register windows, this gives only the outbound registers.
+     INCOMING_REGNO gives the corresponding inbound register.  */
+  fixed_size_mode_pod x_apply_args_mode[FIRST_PSEUDO_REGISTER];
+
+  /* For each register that may be used for returning values, this gives
+     a mode used to copy the register's value.  VOIDmode indicates the
+     register is not used for returning values.  If the machine has
+     register windows, this gives only the outbound registers.
+     INCOMING_REGNO gives the corresponding inbound register.  */
+  fixed_size_mode_pod x_apply_result_mode[FIRST_PSEUDO_REGISTER];
+};
+
+extern struct target_builtins default_target_builtins;
+#if SWITCHABLE_TARGET
+extern struct target_builtins *this_target_builtins;
+#else
+#define this_target_builtins (&default_target_builtins)
+#endif
+
+/* Non-zero if __builtin_constant_p should be folded right away.  */
+extern bool force_folding_builtin_constant_p;
+
+extern bool called_as_built_in (tree);
+extern bool get_object_alignment_1 (tree, unsigned int *,
+				    unsigned HOST_WIDE_INT *);
+extern unsigned int get_object_alignment (tree);
+extern bool get_pointer_alignment_1 (tree, unsigned int *,
+				     unsigned HOST_WIDE_INT *);
+extern unsigned int get_pointer_alignment (tree);
+extern unsigned string_length (const void*, unsigned, unsigned);
+
+struct c_strlen_data
+{
+  /* [MINLEN, MAXBOUND, MAXLEN] is a range describing the length of
+     one or more strings of possibly unknown length.  For a single
+     string of known length the range is a constant where
+     MINLEN == MAXBOUND == MAXLEN holds.
+     For other strings, MINLEN is the length of the shortest known
+     string.  MAXBOUND is the length of a string that could be stored
+     in the largest array referenced by the expression.  MAXLEN is
+     the length of the longest sequence of non-zero bytes
+     in an object referenced by the expression.  For such strings,
+     MINLEN <= MAXBOUND <= MAXLEN holds.  For example, given:
+       struct A { char a[7], b[]; };
+       extern struct A *p;
+       n = strlen (p->a);
+     the computed range will be [0, 6, ALL_ONES].
+     However, for a conditional expression involving a string
+     of known length and an array of unknown bound such as
+       n = strlen (i ? p->b : "123");
+     the range will be [3, 3, ALL_ONES].
+     MINLEN != 0 && MAXLEN == ALL_ONES indicates that MINLEN is
+     the length of the shortest known string and implies that
+     the shortest possible string referenced by the expression may
+     actually be the empty string.  This distinction is useful for
+     diagnostics.  get_range_strlen() return value distinguishes
+     between these two cases.
+     As the tighter (and more optimistic) bound, MAXBOUND is suitable
+     for diagnostics but not for optimization.
+     As the more conservative bound, MAXLEN is intended to be used
+     for optimization.  */
+  tree minlen;
+  tree maxlen;
+  tree maxbound;
+  /* When non-null, NONSTR refers to the declaration known to store
+     an unterminated constant character array, as in:
+     const char s[] = { 'a', 'b', 'c' };
+     It is used to diagnose uses of such arrays in functions such as
+     strlen() that expect a nul-terminated string as an argument.  */
+  tree decl;
+  /* Non-constant offset from the beginning of a string not accounted
+     for in the length range.  Used to improve diagnostics.  */
+  tree off;
+};
+
+extern tree c_strlen (tree, int, c_strlen_data * = NULL, unsigned = 1);
+extern rtx c_readstr (const char *, scalar_int_mode, bool = true);
+extern void expand_builtin_setjmp_setup (rtx, rtx);
+extern void expand_builtin_setjmp_receiver (rtx);
+extern void expand_builtin_update_setjmp_buf (rtx);
+extern tree mathfn_built_in (tree, enum built_in_function fn);
+extern tree mathfn_built_in (tree, combined_fn);
+extern rtx builtin_strncpy_read_str (void *, HOST_WIDE_INT, scalar_int_mode);
+extern rtx builtin_memset_read_str (void *, HOST_WIDE_INT, scalar_int_mode);
+extern rtx expand_builtin_saveregs (void);
+extern tree std_build_builtin_va_list (void);
+extern tree std_fn_abi_va_list (tree);
+extern tree std_canonical_va_list_type (tree);
+extern void std_expand_builtin_va_start (tree, rtx);
+extern void expand_builtin_trap (void);
+extern void expand_ifn_atomic_bit_test_and (gcall *);
+extern void expand_ifn_atomic_compare_exchange (gcall *);
+extern rtx expand_builtin (tree, rtx, rtx, machine_mode, int);
+extern enum built_in_function builtin_mathfn_code (const_tree);
+extern tree fold_builtin_expect (location_t, tree, tree, tree, tree);
+extern bool avoid_folding_inline_builtin (tree);
+extern tree fold_call_expr (location_t, tree, bool);
+extern tree fold_builtin_call_array (location_t, tree, tree, int, tree *);
+extern tree fold_builtin_n (location_t, tree, tree *, int, bool);
+extern bool validate_gimple_arglist (const gcall *, ...);
+extern rtx default_expand_builtin (tree, rtx, rtx, machine_mode, int);
+extern bool fold_builtin_next_arg (tree, bool);
+extern tree do_mpc_arg2 (tree, tree, tree, int, int (*)(mpc_ptr, mpc_srcptr, mpc_srcptr, mpc_rnd_t));
+extern tree fold_call_stmt (gcall *, bool);
+extern void set_builtin_user_assembler_name (tree decl, const char *asmspec);
+extern bool is_simple_builtin (tree);
+extern bool is_inexpensive_builtin (tree);
+extern tree compute_objsize (tree, int);
+
+extern bool readonly_data_expr (tree exp);
+extern bool init_target_chars (void);
+extern unsigned HOST_WIDE_INT target_newline;
+extern unsigned HOST_WIDE_INT target_percent;
+extern char target_percent_s[3];
+extern char target_percent_c[3];
+extern char target_percent_s_newline[4];
+extern bool target_char_cst_p (tree t, char *p);
+
+extern internal_fn associated_internal_fn (tree);
+extern internal_fn replacement_internal_fn (gcall *);
+
+extern void warn_string_no_nul (location_t, const char *, tree, tree);
+extern tree unterminated_array (tree, tree * = NULL, bool * = NULL);
+
+#endif /* GCC_BUILTINS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/bversion.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/bversion.h
new file mode 100644
index 0000000..c7ce46d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/bversion.h
@@ -0,0 +1,4 @@
+#define BUILDING_GCC_MAJOR 9
+#define BUILDING_GCC_MINOR 1
+#define BUILDING_GCC_PATCHLEVEL 1
+#define BUILDING_GCC_VERSION (BUILDING_GCC_MAJOR * 1000 + BUILDING_GCC_MINOR)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-family/c-common.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-family/c-common.def
new file mode 100644
index 0000000..e24cc69
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-family/c-common.def
@@ -0,0 +1,62 @@
+/* This file contains the definitions and documentation for the
+   additional tree codes used in the GNU C compiler (see tree.def
+   for the standard codes).
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+   Written by Benjamin Chelf <chelf@codesourcery.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Tree nodes used in the C frontend.  These are also shared with the
+   C++ and Objective C frontends.  */
+
+/* A C_MAYBE_CONST_EXPR, currently only used for C and Objective C,
+   tracks information about constancy of an expression and VLA type
+   sizes or VM expressions from typeof that need to be evaluated
+   before the main expression.  It is used during parsing and removed
+   in c_fully_fold.  C_MAYBE_CONST_EXPR_PRE is the expression to
+   evaluate first, if not NULL; C_MAYBE_CONST_EXPR_EXPR is the main
+   expression.  If C_MAYBE_CONST_EXPR_INT_OPERANDS is set then the
+   expression may be used in an unevaluated part of an integer
+   constant expression, but not in an evaluated part.  If
+   C_MAYBE_CONST_EXPR_NON_CONST is set then the expression contains
+   something that cannot occur in an evaluated part of a constant
+   expression (or outside of sizeof in C90 mode); otherwise it does
+   not.  */
+DEFTREECODE (C_MAYBE_CONST_EXPR, "c_maybe_const_expr", tcc_expression, 2)
+
+/* An EXCESS_PRECISION_EXPR, currently only used for C and Objective
+   C, represents an expression evaluated in greater range or precision
+   than its type.  The type of the EXCESS_PRECISION_EXPR is the
+   semantic type while the operand represents what is actually being
+   evaluated.  */
+DEFTREECODE (EXCESS_PRECISION_EXPR, "excess_precision_expr", tcc_expression, 1)
+
+/* Used to represent a user-defined literal.
+   The operands are an IDENTIFIER for the suffix, the VALUE of the literal,
+   and for numeric literals the original string representation of the
+   number.  */
+DEFTREECODE (USERDEF_LITERAL, "userdef_literal", tcc_exceptional, 3)
+
+/* Represents a 'sizeof' expression during C++ template expansion,
+   or for the purpose of -Wsizeof-pointer-memaccess warning.  */
+DEFTREECODE (SIZEOF_EXPR, "sizeof_expr", tcc_expression, 1)
+
+/*
+Local variables:
+mode:c
+End:
+*/
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-family/c-common.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-family/c-common.h
new file mode 100644
index 0000000..1cf2cae
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-family/c-common.h
@@ -0,0 +1,1391 @@
+/* Definitions for c-common.c.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_C_COMMON_H
+#define GCC_C_COMMON_H
+
+#include "splay-tree.h"
+#include "cpplib.h"
+#include "alias.h"
+#include "tree.h"
+#include "fold-const.h"
+#include "wide-int-bitmask.h"
+
+/* In order for the format checking to accept the C frontend
+   diagnostic framework extensions, you must include this file before
+   diagnostic-core.h, not after.  The C front end formats are a subset of those
+   for C++, so they are the appropriate set to use in common code;
+   cp-tree.h overrides this for C++.  */
+#if defined(GCC_DIAGNOSTIC_CORE_H)
+#error \
+In order for the format checking to accept the C front end diagnostic \
+framework extensions, you must include this file before diagnostic-core.h \
+never after.
+#endif
+#ifndef GCC_DIAG_STYLE
+#define GCC_DIAG_STYLE __gcc_cdiag__
+#endif
+#include "diagnostic-core.h"
+
+/* Usage of TREE_LANG_FLAG_?:
+   0: IDENTIFIER_MARKED (used by search routines).
+      C_MAYBE_CONST_EXPR_INT_OPERANDS (in C_MAYBE_CONST_EXPR, for C)
+   1: C_DECLARED_LABEL_FLAG (in LABEL_DECL)
+      STATEMENT_LIST_STMT_EXPR (in STATEMENT_LIST)
+      C_MAYBE_CONST_EXPR_NON_CONST (in C_MAYBE_CONST_EXPR, for C)
+   2: unused
+   3: STATEMENT_LIST_HAS_LABEL (in STATEMENT_LIST)
+   4: unused
+*/
+
+/* Reserved identifiers.  This is the union of all the keywords for C,
+   C++, and Objective-C.  All the type modifiers have to be in one
+   block at the beginning, because they are used as mask bits.  There
+   are 28 type modifiers; if we add many more we will have to redesign
+   the mask mechanism.  */
+
+enum rid
+{
+  /* Modifiers: */
+  /* C, in empirical order of frequency.  */
+  RID_STATIC = 0,
+  RID_UNSIGNED, RID_LONG,    RID_CONST, RID_EXTERN,
+  RID_REGISTER, RID_TYPEDEF, RID_SHORT, RID_INLINE,
+  RID_VOLATILE, RID_SIGNED,  RID_AUTO,  RID_RESTRICT,
+  RID_NORETURN, RID_ATOMIC,
+
+  /* C extensions */
+  RID_COMPLEX, RID_THREAD, RID_SAT,
+
+  /* C++ */
+  RID_FRIEND, RID_VIRTUAL, RID_EXPLICIT, RID_EXPORT, RID_MUTABLE,
+
+  /* ObjC ("PQ" reserved words - they do not appear after a '@' and
+     are keywords only in specific contexts)  */
+  RID_IN, RID_OUT, RID_INOUT, RID_BYCOPY, RID_BYREF, RID_ONEWAY,
+
+  /* ObjC ("PATTR" reserved words - they do not appear after a '@' 
+     and are keywords only as property attributes)  */
+  RID_GETTER, RID_SETTER,
+  RID_READONLY, RID_READWRITE,
+  RID_ASSIGN, RID_RETAIN, RID_COPY,
+  RID_NONATOMIC,
+
+  /* C (reserved and imaginary types not implemented, so any use is a
+     syntax error) */
+  RID_IMAGINARY,
+
+  /* C */
+  RID_INT,     RID_CHAR,   RID_FLOAT,    RID_DOUBLE, RID_VOID,
+  RID_ENUM,    RID_STRUCT, RID_UNION,    RID_IF,     RID_ELSE,
+  RID_WHILE,   RID_DO,     RID_FOR,      RID_SWITCH, RID_CASE,
+  RID_DEFAULT, RID_BREAK,  RID_CONTINUE, RID_RETURN, RID_GOTO,
+  RID_SIZEOF,
+
+  /* C extensions */
+  RID_ASM,       RID_TYPEOF,   RID_ALIGNOF,  RID_ATTRIBUTE,  RID_VA_ARG,
+  RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL,      RID_CHOOSE_EXPR,
+  RID_TYPES_COMPATIBLE_P,      RID_BUILTIN_COMPLEX,	     RID_BUILTIN_SHUFFLE,
+  RID_BUILTIN_CONVERTVECTOR,   RID_BUILTIN_TGMATH,
+  RID_BUILTIN_HAS_ATTRIBUTE,
+  RID_DFLOAT32, RID_DFLOAT64, RID_DFLOAT128,
+
+  /* TS 18661-3 keywords, in the same sequence as the TI_* values.  */
+  RID_FLOAT16,
+  RID_FLOATN_NX_FIRST = RID_FLOAT16,
+  RID_FLOAT32,
+  RID_FLOAT64,
+  RID_FLOAT128,
+  RID_FLOAT32X,
+  RID_FLOAT64X,
+  RID_FLOAT128X,
+#define CASE_RID_FLOATN_NX						\
+  case RID_FLOAT16: case RID_FLOAT32: case RID_FLOAT64: case RID_FLOAT128: \
+  case RID_FLOAT32X: case RID_FLOAT64X: case RID_FLOAT128X
+
+  RID_FRACT, RID_ACCUM, RID_AUTO_TYPE, RID_BUILTIN_CALL_WITH_STATIC_CHAIN,
+
+  /* "__GIMPLE", for the GIMPLE-parsing extension to the C frontend. */
+  RID_GIMPLE,
+
+  /* "__PHI", for parsing PHI function in GIMPLE FE.  */
+  RID_PHI,
+
+  /* "__RTL", for the RTL-parsing extension to the C frontend.  */
+  RID_RTL,
+
+  /* C11 */
+  RID_ALIGNAS, RID_GENERIC,
+
+  /* This means to warn that this is a C++ keyword, and then treat it
+     as a normal identifier.  */
+  RID_CXX_COMPAT_WARN,
+
+  /* GNU transactional memory extension */
+  RID_TRANSACTION_ATOMIC, RID_TRANSACTION_RELAXED, RID_TRANSACTION_CANCEL,
+
+  /* Too many ways of getting the name of a function as a string */
+  RID_FUNCTION_NAME, RID_PRETTY_FUNCTION_NAME, RID_C99_FUNCTION_NAME,
+
+  /* C++ (some of these are keywords in Objective-C as well, but only
+     if they appear after a '@') */
+  RID_BOOL,     RID_WCHAR,    RID_CLASS,
+  RID_PUBLIC,   RID_PRIVATE,  RID_PROTECTED,
+  RID_TEMPLATE, RID_NULL,     RID_CATCH,
+  RID_DELETE,   RID_FALSE,    RID_NAMESPACE,
+  RID_NEW,      RID_OFFSETOF, RID_OPERATOR,
+  RID_THIS,     RID_THROW,    RID_TRUE,
+  RID_TRY,      RID_TYPENAME, RID_TYPEID,
+  RID_USING,    RID_CHAR16,   RID_CHAR32,
+
+  /* casts */
+  RID_CONSTCAST, RID_DYNCAST, RID_REINTCAST, RID_STATCAST,
+
+  /* C++ extensions */
+  RID_ADDRESSOF,               RID_BASES,
+  RID_BUILTIN_LAUNDER,         RID_DIRECT_BASES,
+  RID_HAS_NOTHROW_ASSIGN,      RID_HAS_NOTHROW_CONSTRUCTOR,
+  RID_HAS_NOTHROW_COPY,        RID_HAS_TRIVIAL_ASSIGN,
+  RID_HAS_TRIVIAL_CONSTRUCTOR, RID_HAS_TRIVIAL_COPY,
+  RID_HAS_TRIVIAL_DESTRUCTOR,  RID_HAS_UNIQUE_OBJ_REPRESENTATIONS,
+  RID_HAS_VIRTUAL_DESTRUCTOR,
+  RID_IS_ABSTRACT,             RID_IS_AGGREGATE,
+  RID_IS_BASE_OF,              RID_IS_CLASS,
+  RID_IS_EMPTY,                RID_IS_ENUM,
+  RID_IS_FINAL,                RID_IS_LITERAL_TYPE,
+  RID_IS_POD,                  RID_IS_POLYMORPHIC,
+  RID_IS_SAME_AS,
+  RID_IS_STD_LAYOUT,           RID_IS_TRIVIAL,
+  RID_IS_TRIVIALLY_ASSIGNABLE, RID_IS_TRIVIALLY_CONSTRUCTIBLE,
+  RID_IS_TRIVIALLY_COPYABLE,
+  RID_IS_UNION,                RID_UNDERLYING_TYPE,
+  RID_IS_ASSIGNABLE,           RID_IS_CONSTRUCTIBLE,
+
+  /* C++11 */
+  RID_CONSTEXPR, RID_DECLTYPE, RID_NOEXCEPT, RID_NULLPTR, RID_STATIC_ASSERT,
+
+  /* char8_t */
+  RID_CHAR8,
+
+  /* C++ concepts */
+  RID_CONCEPT, RID_REQUIRES,
+
+  /* C++ transactional memory.  */
+  RID_ATOMIC_NOEXCEPT, RID_ATOMIC_CANCEL, RID_SYNCHRONIZED,
+
+  /* Objective-C ("AT" reserved words - they are only keywords when
+     they follow '@')  */
+  RID_AT_ENCODE,   RID_AT_END,
+  RID_AT_CLASS,    RID_AT_ALIAS,     RID_AT_DEFS,
+  RID_AT_PRIVATE,  RID_AT_PROTECTED, RID_AT_PUBLIC,  RID_AT_PACKAGE,
+  RID_AT_PROTOCOL, RID_AT_SELECTOR,
+  RID_AT_THROW,	   RID_AT_TRY,       RID_AT_CATCH,
+  RID_AT_FINALLY,  RID_AT_SYNCHRONIZED, 
+  RID_AT_OPTIONAL, RID_AT_REQUIRED, RID_AT_PROPERTY,
+  RID_AT_SYNTHESIZE, RID_AT_DYNAMIC,
+  RID_AT_INTERFACE,
+  RID_AT_IMPLEMENTATION,
+
+  /* Named address support, mapping the keyword to a particular named address
+     number.  Named address space 0 is reserved for the generic address.  If
+     there are more than 254 named addresses, the addr_space_t type will need
+     to be grown from an unsigned char to unsigned short.  */
+  RID_ADDR_SPACE_0,		/* generic address */
+  RID_ADDR_SPACE_1,
+  RID_ADDR_SPACE_2,
+  RID_ADDR_SPACE_3,
+  RID_ADDR_SPACE_4,
+  RID_ADDR_SPACE_5,
+  RID_ADDR_SPACE_6,
+  RID_ADDR_SPACE_7,
+  RID_ADDR_SPACE_8,
+  RID_ADDR_SPACE_9,
+  RID_ADDR_SPACE_10,
+  RID_ADDR_SPACE_11,
+  RID_ADDR_SPACE_12,
+  RID_ADDR_SPACE_13,
+  RID_ADDR_SPACE_14,
+  RID_ADDR_SPACE_15,
+
+  RID_FIRST_ADDR_SPACE = RID_ADDR_SPACE_0,
+  RID_LAST_ADDR_SPACE = RID_ADDR_SPACE_15,
+
+  /* __intN keywords.  The _N_M here doesn't correspond to the intN
+     in the keyword; use the bitsize in int_n_t_data_t[M] for that.
+     For example, if int_n_t_data_t[0].bitsize is 13, then RID_INT_N_0
+     is for __int13.  */
+
+  /* Note that the range to use is RID_FIRST_INT_N through
+     RID_FIRST_INT_N + NUM_INT_N_ENTS - 1 and c-parser.c has a list of
+     all RID_INT_N_* in a case statement.  */
+
+  RID_INT_N_0,
+  RID_INT_N_1,
+  RID_INT_N_2,
+  RID_INT_N_3,
+
+  RID_FIRST_INT_N = RID_INT_N_0,
+  RID_LAST_INT_N = RID_INT_N_3,
+
+  RID_MAX,
+
+  RID_FIRST_MODIFIER = RID_STATIC,
+  RID_LAST_MODIFIER = RID_ONEWAY,
+
+  RID_FIRST_CXX11 = RID_CONSTEXPR,
+  RID_LAST_CXX11 = RID_STATIC_ASSERT,
+  RID_FIRST_AT = RID_AT_ENCODE,
+  RID_LAST_AT = RID_AT_IMPLEMENTATION,
+  RID_FIRST_PQ = RID_IN,
+  RID_LAST_PQ = RID_ONEWAY,
+  RID_FIRST_PATTR = RID_GETTER,
+  RID_LAST_PATTR = RID_NONATOMIC
+};
+
+#define OBJC_IS_AT_KEYWORD(rid) \
+  ((unsigned int) (rid) >= (unsigned int) RID_FIRST_AT && \
+   (unsigned int) (rid) <= (unsigned int) RID_LAST_AT)
+
+#define OBJC_IS_PQ_KEYWORD(rid) \
+  ((unsigned int) (rid) >= (unsigned int) RID_FIRST_PQ && \
+   (unsigned int) (rid) <= (unsigned int) RID_LAST_PQ)
+
+#define OBJC_IS_PATTR_KEYWORD(rid) \
+  ((unsigned int) (rid) >= (unsigned int) RID_FIRST_PATTR && \
+   (unsigned int) (rid) <= (unsigned int) RID_LAST_PATTR)
+
+/* OBJC_IS_CXX_KEYWORD recognizes the 'CXX_OBJC' keywords (such as
+   'class') which are shared in a subtle way between Objective-C and
+   C++.  When the lexer is lexing in Objective-C/Objective-C++, if it
+   finds '@' followed by one of these identifiers (eg, '@class'), it
+   recognizes the whole as an Objective-C keyword.  If the identifier
+   is found elsewhere, it follows the rules of the C/C++ language.
+ */
+#define OBJC_IS_CXX_KEYWORD(rid) \
+  (rid == RID_CLASS || rid == RID_SYNCHRONIZED			\
+   || rid == RID_PUBLIC || rid == RID_PROTECTED || rid == RID_PRIVATE	\
+   || rid == RID_TRY || rid == RID_THROW || rid == RID_CATCH)
+
+/* The elements of `ridpointers' are identifier nodes for the reserved
+   type names and storage classes.  It is indexed by a RID_... value.  */
+extern GTY ((length ("(int) RID_MAX"))) tree *ridpointers;
+
+/* Standard named or nameless data types of the C compiler.  */
+
+enum c_tree_index
+{
+    CTI_CHAR8_TYPE,
+    CTI_CHAR16_TYPE,
+    CTI_CHAR32_TYPE,
+    CTI_WCHAR_TYPE,
+    CTI_UNDERLYING_WCHAR_TYPE,
+    CTI_WINT_TYPE,
+    CTI_SIGNED_SIZE_TYPE, /* For format checking only.  */
+    CTI_UNSIGNED_PTRDIFF_TYPE, /* For format checking only.  */
+    CTI_INTMAX_TYPE,
+    CTI_UINTMAX_TYPE,
+    CTI_WIDEST_INT_LIT_TYPE,
+    CTI_WIDEST_UINT_LIT_TYPE,
+
+    /* Types for <stdint.h>, that may not be defined on all
+       targets.  */
+    CTI_SIG_ATOMIC_TYPE,
+    CTI_INT8_TYPE,
+    CTI_INT16_TYPE,
+    CTI_INT32_TYPE,
+    CTI_INT64_TYPE,
+    CTI_UINT8_TYPE,
+    CTI_UINT16_TYPE,
+    CTI_UINT32_TYPE,
+    CTI_UINT64_TYPE,
+    CTI_INT_LEAST8_TYPE,
+    CTI_INT_LEAST16_TYPE,
+    CTI_INT_LEAST32_TYPE,
+    CTI_INT_LEAST64_TYPE,
+    CTI_UINT_LEAST8_TYPE,
+    CTI_UINT_LEAST16_TYPE,
+    CTI_UINT_LEAST32_TYPE,
+    CTI_UINT_LEAST64_TYPE,
+    CTI_INT_FAST8_TYPE,
+    CTI_INT_FAST16_TYPE,
+    CTI_INT_FAST32_TYPE,
+    CTI_INT_FAST64_TYPE,
+    CTI_UINT_FAST8_TYPE,
+    CTI_UINT_FAST16_TYPE,
+    CTI_UINT_FAST32_TYPE,
+    CTI_UINT_FAST64_TYPE,
+    CTI_INTPTR_TYPE,
+    CTI_UINTPTR_TYPE,
+
+    CTI_CHAR_ARRAY_TYPE,
+    CTI_CHAR8_ARRAY_TYPE,
+    CTI_CHAR16_ARRAY_TYPE,
+    CTI_CHAR32_ARRAY_TYPE,
+    CTI_WCHAR_ARRAY_TYPE,
+    CTI_STRING_TYPE,
+    CTI_CONST_STRING_TYPE,
+
+    /* Type for boolean expressions (bool in C++, int in C).  */
+    CTI_TRUTHVALUE_TYPE,
+    CTI_TRUTHVALUE_TRUE,
+    CTI_TRUTHVALUE_FALSE,
+
+    CTI_DEFAULT_FUNCTION_TYPE,
+
+    /* These are not types, but we have to look them up all the time.  */
+    CTI_FUNCTION_NAME_DECL,
+    CTI_PRETTY_FUNCTION_NAME_DECL,
+    CTI_C99_FUNCTION_NAME_DECL,
+    CTI_SAVED_FUNCTION_NAME_DECLS,
+
+    CTI_NULL,
+
+    CTI_MAX
+};
+
+#define C_CPP_HASHNODE(id) \
+  (&(((struct c_common_identifier *) (id))->node))
+#define C_RID_CODE(id) \
+  ((enum rid) (((struct c_common_identifier *) (id))->node.rid_code))
+#define C_SET_RID_CODE(id, code) \
+  (((struct c_common_identifier *) (id))->node.rid_code = (unsigned char) code)
+
+/* Identifier part common to the C front ends.  Inherits from
+   tree_identifier, despite appearances.  */
+struct GTY(()) c_common_identifier {
+  struct tree_common common;
+  struct cpp_hashnode node;
+};
+
+/* An entry in the reserved keyword table.  */
+
+struct c_common_resword
+{
+  const char *const word;
+  ENUM_BITFIELD(rid) const rid : 16;
+  const unsigned int disable   : 16;
+};
+
+/* Mode used to build pointers (VOIDmode means ptr_mode).  */
+
+extern machine_mode c_default_pointer_mode;
+
+/* Extra cpp_ttype values for C++.  */
+
+/* A token type for template-ids.  If a template-id is processed while
+   parsing tentatively, it is replaced with a CPP_TEMPLATE_ID token;
+   the value of the CPP_TEMPLATE_ID is whatever was returned by
+   cp_parser_template_id.  */
+#define CPP_TEMPLATE_ID ((enum cpp_ttype) (CPP_KEYWORD + 1))
+
+/* A token type for nested-name-specifiers.  If a
+   nested-name-specifier is processed while parsing tentatively, it is
+   replaced with a CPP_NESTED_NAME_SPECIFIER token; the value of the
+   CPP_NESTED_NAME_SPECIFIER is whatever was returned by
+   cp_parser_nested_name_specifier_opt.  */
+#define CPP_NESTED_NAME_SPECIFIER ((enum cpp_ttype) (CPP_TEMPLATE_ID + 1))
+
+/* A token type for pre-parsed C++0x decltype.  */
+#define CPP_DECLTYPE ((enum cpp_ttype) (CPP_NESTED_NAME_SPECIFIER + 1))
+
+/* A token type for pre-parsed primary-expression (lambda- or statement-).  */
+#define CPP_PREPARSED_EXPR ((enum cpp_ttype) (CPP_DECLTYPE + 1))
+
+/* The number of token types, including C++-specific ones.  */
+#define N_CP_TTYPES ((int) (CPP_PREPARSED_EXPR + 1))
+
+/* Disable mask.  Keywords are disabled if (reswords[i].disable &
+   mask) is _true_.  Thus for keywords which are present in all
+   languages the disable field is zero.  */
+
+#define D_CONLY		0x0001	/* C only (not in C++).  */
+#define D_CXXONLY	0x0002	/* C++ only (not in C).  */
+#define D_C99		0x0004	/* In C, C99 only.  */
+#define D_CXX11         0x0008	/* In C++, C++11 only.  */
+#define D_EXT		0x0010	/* GCC extension.  */
+#define D_EXT89		0x0020	/* GCC extension incorporated in C99.  */
+#define D_ASM		0x0040	/* Disabled by -fno-asm.  */
+#define D_OBJC		0x0080	/* In Objective C and neither C nor C++.  */
+#define D_CXX_OBJC	0x0100	/* In Objective C, and C++, but not C.  */
+#define D_CXXWARN	0x0200	/* In C warn with -Wcxx-compat.  */
+#define D_CXX_CONCEPTS  0x0400	/* In C++, only with concepts.  */
+#define D_TRANSMEM	0X0800	/* C++ transactional memory TS.  */
+#define D_CXX_CHAR8_T	0X1000	/* In C++, only with -fchar8_t.  */
+
+#define D_CXX_CONCEPTS_FLAGS D_CXXONLY | D_CXX_CONCEPTS
+#define D_CXX_CHAR8_T_FLAGS D_CXXONLY | D_CXX_CHAR8_T
+
+/* The reserved keyword table.  */
+extern const struct c_common_resword c_common_reswords[];
+
+/* The number of items in the reserved keyword table.  */
+extern const unsigned int num_c_common_reswords;
+
+#define char8_type_node			c_global_trees[CTI_CHAR8_TYPE]
+#define char16_type_node		c_global_trees[CTI_CHAR16_TYPE]
+#define char32_type_node		c_global_trees[CTI_CHAR32_TYPE]
+#define wchar_type_node			c_global_trees[CTI_WCHAR_TYPE]
+#define underlying_wchar_type_node	c_global_trees[CTI_UNDERLYING_WCHAR_TYPE]
+#define wint_type_node			c_global_trees[CTI_WINT_TYPE]
+#define signed_size_type_node		c_global_trees[CTI_SIGNED_SIZE_TYPE]
+#define unsigned_ptrdiff_type_node	c_global_trees[CTI_UNSIGNED_PTRDIFF_TYPE]
+#define intmax_type_node		c_global_trees[CTI_INTMAX_TYPE]
+#define uintmax_type_node		c_global_trees[CTI_UINTMAX_TYPE]
+#define widest_integer_literal_type_node c_global_trees[CTI_WIDEST_INT_LIT_TYPE]
+#define widest_unsigned_literal_type_node c_global_trees[CTI_WIDEST_UINT_LIT_TYPE]
+
+#define sig_atomic_type_node		c_global_trees[CTI_SIG_ATOMIC_TYPE]
+#define int8_type_node			c_global_trees[CTI_INT8_TYPE]
+#define int16_type_node			c_global_trees[CTI_INT16_TYPE]
+#define int32_type_node			c_global_trees[CTI_INT32_TYPE]
+#define int64_type_node			c_global_trees[CTI_INT64_TYPE]
+#define uint8_type_node			c_global_trees[CTI_UINT8_TYPE]
+#define c_uint16_type_node		c_global_trees[CTI_UINT16_TYPE]
+#define c_uint32_type_node		c_global_trees[CTI_UINT32_TYPE]
+#define c_uint64_type_node		c_global_trees[CTI_UINT64_TYPE]
+#define int_least8_type_node		c_global_trees[CTI_INT_LEAST8_TYPE]
+#define int_least16_type_node		c_global_trees[CTI_INT_LEAST16_TYPE]
+#define int_least32_type_node		c_global_trees[CTI_INT_LEAST32_TYPE]
+#define int_least64_type_node		c_global_trees[CTI_INT_LEAST64_TYPE]
+#define uint_least8_type_node		c_global_trees[CTI_UINT_LEAST8_TYPE]
+#define uint_least16_type_node		c_global_trees[CTI_UINT_LEAST16_TYPE]
+#define uint_least32_type_node		c_global_trees[CTI_UINT_LEAST32_TYPE]
+#define uint_least64_type_node		c_global_trees[CTI_UINT_LEAST64_TYPE]
+#define int_fast8_type_node		c_global_trees[CTI_INT_FAST8_TYPE]
+#define int_fast16_type_node		c_global_trees[CTI_INT_FAST16_TYPE]
+#define int_fast32_type_node		c_global_trees[CTI_INT_FAST32_TYPE]
+#define int_fast64_type_node		c_global_trees[CTI_INT_FAST64_TYPE]
+#define uint_fast8_type_node		c_global_trees[CTI_UINT_FAST8_TYPE]
+#define uint_fast16_type_node		c_global_trees[CTI_UINT_FAST16_TYPE]
+#define uint_fast32_type_node		c_global_trees[CTI_UINT_FAST32_TYPE]
+#define uint_fast64_type_node		c_global_trees[CTI_UINT_FAST64_TYPE]
+#define intptr_type_node		c_global_trees[CTI_INTPTR_TYPE]
+#define uintptr_type_node		c_global_trees[CTI_UINTPTR_TYPE]
+
+#define truthvalue_type_node		c_global_trees[CTI_TRUTHVALUE_TYPE]
+#define truthvalue_true_node		c_global_trees[CTI_TRUTHVALUE_TRUE]
+#define truthvalue_false_node		c_global_trees[CTI_TRUTHVALUE_FALSE]
+
+#define char_array_type_node		c_global_trees[CTI_CHAR_ARRAY_TYPE]
+#define char8_array_type_node		c_global_trees[CTI_CHAR8_ARRAY_TYPE]
+#define char16_array_type_node		c_global_trees[CTI_CHAR16_ARRAY_TYPE]
+#define char32_array_type_node		c_global_trees[CTI_CHAR32_ARRAY_TYPE]
+#define wchar_array_type_node		c_global_trees[CTI_WCHAR_ARRAY_TYPE]
+#define string_type_node		c_global_trees[CTI_STRING_TYPE]
+#define const_string_type_node		c_global_trees[CTI_CONST_STRING_TYPE]
+
+#define default_function_type		c_global_trees[CTI_DEFAULT_FUNCTION_TYPE]
+
+#define function_name_decl_node		c_global_trees[CTI_FUNCTION_NAME_DECL]
+#define pretty_function_name_decl_node	c_global_trees[CTI_PRETTY_FUNCTION_NAME_DECL]
+#define c99_function_name_decl_node		c_global_trees[CTI_C99_FUNCTION_NAME_DECL]
+#define saved_function_name_decls	c_global_trees[CTI_SAVED_FUNCTION_NAME_DECLS]
+
+/* The node for C++ `__null'.  */
+#define null_node                       c_global_trees[CTI_NULL]
+
+extern GTY(()) tree c_global_trees[CTI_MAX];
+
+/* Mark which labels are explicitly declared.
+   These may be shadowed, and may be referenced from nested functions.  */
+#define C_DECLARED_LABEL_FLAG(label) TREE_LANG_FLAG_1 (label)
+
+enum c_language_kind
+{
+  clk_c		= 0,		/* C90, C94, C99, C11 or C2X */
+  clk_objc	= 1,		/* clk_c with ObjC features.  */
+  clk_cxx	= 2,		/* ANSI/ISO C++ */
+  clk_objcxx	= 3		/* clk_cxx with ObjC features.  */
+};
+
+/* To test for a specific language use c_language, defined by each
+   front end.  For "ObjC features" or "not C++" use the macros.  */
+extern c_language_kind c_language;
+
+#define c_dialect_cxx()		((c_language & clk_cxx) != 0)
+#define c_dialect_objc()	((c_language & clk_objc) != 0)
+
+/* The various name of operator that appears in error messages. */
+enum ref_operator {
+  /* NULL */
+  RO_NULL,
+  /* array indexing */
+  RO_ARRAY_INDEXING,
+  /* unary * */
+  RO_UNARY_STAR,
+  /* -> */
+  RO_ARROW,
+  /* implicit conversion */
+  RO_IMPLICIT_CONVERSION,
+  /* ->* */
+  RO_ARROW_STAR
+};
+
+/* Information about a statement tree.  */
+
+struct GTY(()) stmt_tree_s {
+  /* A stack of statement lists being collected.  */
+  vec<tree, va_gc> *x_cur_stmt_list;
+
+  /* In C++, Nonzero if we should treat statements as full
+     expressions.  In particular, this variable is non-zero if at the
+     end of a statement we should destroy any temporaries created
+     during that statement.  Similarly, if, at the end of a block, we
+     should destroy any local variables in this block.  Normally, this
+     variable is nonzero, since those are the normal semantics of
+     C++.
+
+     This flag has no effect in C.  */
+  int stmts_are_full_exprs_p;
+};
+
+typedef struct stmt_tree_s *stmt_tree;
+
+/* Global state pertinent to the current function.  Some C dialects
+   extend this structure with additional fields.  */
+
+struct GTY(()) c_language_function {
+  /* While we are parsing the function, this contains information
+     about the statement-tree that we are building.  */
+  struct stmt_tree_s x_stmt_tree;
+
+  /* Vector of locally defined typedefs, for
+     -Wunused-local-typedefs.  */
+  vec<tree, va_gc> *local_typedefs;
+};
+
+#define stmt_list_stack (current_stmt_tree ()->x_cur_stmt_list)
+
+/* When building a statement-tree, this is the current statement list
+   being collected.  */
+#define cur_stmt_list	(stmt_list_stack->last ())
+
+#define building_stmt_list_p() (stmt_list_stack && !stmt_list_stack->is_empty())
+
+/* Language-specific hooks.  */
+
+/* If non-NULL, this function is called after a precompile header file
+   is loaded.  */
+extern void (*lang_post_pch_load) (void);
+
+extern void push_file_scope (void);
+extern void pop_file_scope (void);
+extern stmt_tree current_stmt_tree (void);
+extern tree push_stmt_list (void);
+extern tree pop_stmt_list (tree);
+extern tree add_stmt (tree);
+extern void push_cleanup (tree, tree, bool);
+
+extern tree build_modify_expr (location_t, tree, tree, enum tree_code,
+			       location_t, tree, tree);
+extern tree build_indirect_ref (location_t, tree, ref_operator);
+
+extern bool has_c_linkage (const_tree decl);
+extern bool c_decl_implicit (const_tree);
+
+/* Switches common to the C front ends.  */
+
+/* Nonzero means don't output line number information.  */
+
+extern char flag_no_line_commands;
+
+/* Nonzero causes -E output not to be done, but directives such as
+   #define that have side effects are still obeyed.  */
+
+extern char flag_no_output;
+
+/* Nonzero means dump macros in some fashion; contains the 'D', 'M',
+   'N' or 'U' of the command line switch.  */
+
+extern char flag_dump_macros;
+
+/* Nonzero means pass #include lines through to the output.  */
+
+extern char flag_dump_includes;
+
+/* Nonzero means process PCH files while preprocessing.  */
+
+extern bool flag_pch_preprocess;
+
+/* The file name to which we should write a precompiled header, or
+   NULL if no header will be written in this compile.  */
+
+extern const char *pch_file;
+
+/* Nonzero if an ISO standard was selected.  It rejects macros in the
+   user's namespace.  */
+
+extern int flag_iso;
+
+/* C/ObjC language option variables.  */
+
+
+/* Nonzero means allow type mismatches in conditional expressions;
+   just make their values `void'.  */
+
+extern int flag_cond_mismatch;
+
+/* Nonzero means enable C89 Amendment 1 features.  */
+
+extern int flag_isoc94;
+
+/* Nonzero means use the ISO C99 (or later) dialect of C.  */
+
+extern int flag_isoc99;
+
+/* Nonzero means use the ISO C11 (or later) dialect of C.  */
+
+extern int flag_isoc11;
+
+/* Nonzero means use the ISO C2X dialect of C.  */
+
+extern int flag_isoc2x;
+
+/* Nonzero means that we have builtin functions, and main is an int.  */
+
+extern int flag_hosted;
+
+/* ObjC language option variables.  */
+
+
+/* Tells the compiler that this is a special run.  Do not perform any
+   compiling, instead we are to test some platform dependent features
+   and output a C header file with appropriate definitions.  */
+
+extern int print_struct_values;
+
+/* Tells the compiler what is the constant string class for ObjC.  */
+
+extern const char *constant_string_class_name;
+
+
+/* C++ language option variables.  */
+
+/* The reference version of the ABI for -Wabi.  */
+
+extern int warn_abi_version;
+
+/* Return TRUE if one of {flag_abi_version,flag_abi_compat_version} is
+   less than N and the other is at least N.  */
+#define abi_compat_version_crosses(N)		\
+  (abi_version_at_least(N)			\
+   != (flag_abi_compat_version == 0		\
+       || flag_abi_compat_version >= (N)))
+
+/* Return TRUE if one of {flag_abi_version,warn_abi_version} is
+   less than N and the other is at least N, for use by -Wabi.  */
+#define abi_version_crosses(N)			\
+  (abi_version_at_least(N)			\
+   != (warn_abi_version == 0			\
+       || warn_abi_version >= (N)))
+
+/* Nonzero means generate separate instantiation control files and
+   juggle them at link time.  */
+
+extern int flag_use_repository;
+
+/* The supported C++ dialects.  */
+
+enum cxx_dialect {
+  cxx_unset,
+  /* C++98 with TC1  */
+  cxx98,
+  cxx03 = cxx98,
+  /* C++11  */
+  cxx0x,
+  cxx11 = cxx0x,
+  /* C++14 */
+  cxx14,
+  /* C++17 */
+  cxx17,
+  /* C++2a (C++20?) */
+  cxx2a
+};
+
+/* The C++ dialect being used. C++98 is the default.  */
+extern enum cxx_dialect cxx_dialect;
+
+/* Maximum template instantiation depth.  This limit is rather
+   arbitrary, but it exists to limit the time it takes to notice
+   excessively recursive template instantiations.  */
+
+extern int max_tinst_depth;
+
+/* Nonzero means that we should not issue warnings about problems that
+   occur when the code is executed, because the code being processed
+   is not expected to be executed.  This is set during parsing.  This
+   is used for cases like sizeof() and "0 ? a : b".  This is a count,
+   not a bool, because unexecuted expressions can nest.  */
+
+extern int c_inhibit_evaluation_warnings;
+
+/* Whether lexing has been completed, so subsequent preprocessor
+   errors should use the compiler's input_location.  */
+
+extern bool done_lexing;
+
+/* C types are partitioned into three subsets: object, function, and
+   incomplete types.  */
+#define C_TYPE_OBJECT_P(type) \
+  (TREE_CODE (type) != FUNCTION_TYPE && TYPE_SIZE (type))
+
+#define C_TYPE_INCOMPLETE_P(type) \
+  (TREE_CODE (type) != FUNCTION_TYPE && TYPE_SIZE (type) == 0)
+
+#define C_TYPE_FUNCTION_P(type) \
+  (TREE_CODE (type) == FUNCTION_TYPE)
+
+/* For convenience we define a single macro to identify the class of
+   object or incomplete types.  */
+#define C_TYPE_OBJECT_OR_INCOMPLETE_P(type) \
+  (!C_TYPE_FUNCTION_P (type))
+
+struct visibility_flags
+{
+  unsigned inpragma : 1;	/* True when in #pragma GCC visibility.  */
+  unsigned inlines_hidden : 1;	/* True when -finlineshidden in effect.  */
+};
+
+/* These enumerators are possible types of unsafe conversions.  */
+enum conversion_safety {
+  /* The conversion is safe.  */
+  SAFE_CONVERSION = 0,
+  /* Another type of conversion with problems.  */
+  UNSAFE_OTHER,
+  /* Conversion between signed and unsigned integers
+     which are all warned about immediately, so this is unused.  */
+  UNSAFE_SIGN,
+  /* Conversions that reduce the precision of reals including conversions
+     from reals to integers.  */
+  UNSAFE_REAL,
+  /* Conversions from complex to reals or integers, that discard imaginary
+     component.  */
+  UNSAFE_IMAGINARY
+};
+
+/* Global visibility options.  */
+extern struct visibility_flags visibility_options;
+
+/* Attribute table common to the C front ends.  */
+extern const struct attribute_spec c_common_attribute_table[];
+extern const struct attribute_spec c_common_format_attribute_table[];
+
+/* Pointer to function to lazily generate the VAR_DECL for __FUNCTION__ etc.
+   ID is the identifier to use, NAME is the string.
+   TYPE_DEP indicates whether it depends on type of the function or not
+   (i.e. __PRETTY_FUNCTION__).  */
+
+extern tree (*make_fname_decl) (location_t, tree, int);
+
+/* In c-decl.c and cp/tree.c.  FIXME.  */
+extern void c_register_addr_space (const char *str, addr_space_t as);
+
+/* In c-common.c.  */
+extern bool in_late_binary_op;
+extern const char *c_addr_space_name (addr_space_t as);
+extern tree identifier_global_value (tree);
+extern tree c_linkage_bindings (tree);
+extern void record_builtin_type (enum rid, const char *, tree);
+extern tree build_void_list_node (void);
+extern void start_fname_decls (void);
+extern void finish_fname_decls (void);
+extern const char *fname_as_string (int);
+extern tree fname_decl (location_t, unsigned, tree);
+
+extern int check_user_alignment (const_tree, bool, bool);
+extern bool check_function_arguments (location_t loc, const_tree, const_tree,
+				      int, tree *, vec<location_t> *);
+extern void check_function_arguments_recurse (void (*)
+					      (void *, tree,
+					       unsigned HOST_WIDE_INT),
+					      void *, tree,
+					      unsigned HOST_WIDE_INT);
+extern bool check_builtin_function_arguments (location_t, vec<location_t>,
+					      tree, int, tree *);
+extern void check_function_format (const_tree, tree, int, tree *,
+				   vec<location_t> *);
+extern bool attribute_fallthrough_p (tree);
+extern tree handle_format_attribute (tree *, tree, tree, int, bool *);
+extern tree handle_format_arg_attribute (tree *, tree, tree, int, bool *);
+extern bool c_common_handle_option (size_t, const char *, HOST_WIDE_INT, int,
+				    location_t,
+				    const struct cl_option_handlers *);
+extern bool default_handle_c_option (size_t, const char *, int);
+extern tree c_common_type_for_mode (machine_mode, int);
+extern tree c_common_type_for_size (unsigned int, int);
+extern tree c_common_fixed_point_type_for_size (unsigned int, unsigned int,
+						int, int);
+extern tree c_common_unsigned_type (tree);
+extern tree c_common_signed_type (tree);
+extern tree c_common_signed_or_unsigned_type (int, tree);
+extern void c_common_init_ts (void);
+extern tree c_build_bitfield_integer_type (unsigned HOST_WIDE_INT, int);
+extern enum conversion_safety unsafe_conversion_p (location_t, tree, tree, tree,
+						   bool);
+extern bool decl_with_nonnull_addr_p (const_tree);
+extern tree c_fully_fold (tree, bool, bool *, bool = false);
+extern tree c_wrap_maybe_const (tree, bool);
+extern tree c_common_truthvalue_conversion (location_t, tree);
+extern void c_apply_type_quals_to_decl (int, tree);
+extern tree c_sizeof_or_alignof_type (location_t, tree, bool, bool, int);
+extern tree c_alignof_expr (location_t, tree);
+/* Print an error message for invalid operands to arith operation CODE.
+   NOP_EXPR is used as a special case (see truthvalue_conversion).  */
+extern void binary_op_error (rich_location *, enum tree_code, tree, tree);
+extern tree fix_string_type (tree);
+extern tree convert_and_check (location_t, tree, tree);
+extern bool c_determine_visibility (tree);
+extern bool vector_types_compatible_elements_p (tree, tree);
+extern void mark_valid_location_for_stdc_pragma (bool);
+extern bool valid_location_for_stdc_pragma_p (void);
+extern void set_float_const_decimal64 (void);
+extern void clear_float_const_decimal64 (void);
+extern bool float_const_decimal64_p (void);
+
+extern bool keyword_begins_type_specifier (enum rid);
+extern bool keyword_is_storage_class_specifier (enum rid);
+extern bool keyword_is_type_qualifier (enum rid);
+extern bool keyword_is_decl_specifier (enum rid);
+extern unsigned max_align_t_align (void);
+extern bool cxx_fundamental_alignment_p (unsigned);
+extern bool pointer_to_zero_sized_aggr_p (tree);
+extern bool bool_promoted_to_int_p (tree);
+extern tree fold_for_warn (tree);
+extern tree c_common_get_narrower (tree, int *);
+extern bool get_nonnull_operand (tree, unsigned HOST_WIDE_INT *);
+
+#define c_sizeof(LOC, T)  c_sizeof_or_alignof_type (LOC, T, true, false, 1)
+#define c_alignof(LOC, T) c_sizeof_or_alignof_type (LOC, T, false, false, 1)
+
+/* Subroutine of build_binary_op, used for certain operations.  */
+extern tree shorten_binary_op (tree result_type, tree op0, tree op1, bool bitwise);
+
+/* Subroutine of build_binary_op, used for comparison operations.
+   See if the operands have both been converted from subword integer types
+   and, if so, perhaps change them both back to their original type.  */
+extern tree shorten_compare (location_t, tree *, tree *, tree *,
+			     enum tree_code *);
+
+extern tree pointer_int_sum (location_t, enum tree_code, tree, tree,
+			     bool = true);
+
+/* Add qualifiers to a type, in the fashion for C.  */
+extern tree c_build_qualified_type (tree, int, tree = NULL_TREE, size_t = 0);
+
+/* Build tree nodes and builtin functions common to both C and C++ language
+   frontends.  */
+extern void c_common_nodes_and_builtins (void);
+
+extern void disable_builtin_function (const char *);
+
+extern void set_compound_literal_name (tree decl);
+
+extern tree build_va_arg (location_t, tree, tree);
+
+extern const unsigned int c_family_lang_mask;
+extern unsigned int c_common_option_lang_mask (void);
+extern void c_common_diagnostics_set_defaults (diagnostic_context *);
+extern bool c_common_complain_wrong_lang_p (const struct cl_option *);
+extern void c_common_init_options_struct (struct gcc_options *);
+extern void c_common_init_options (unsigned int, struct cl_decoded_option *);
+extern bool c_common_post_options (const char **);
+extern bool c_common_init (void);
+extern void c_common_finish (void);
+extern void c_common_parse_file (void);
+extern FILE *get_dump_info (int, dump_flags_t *);
+extern alias_set_type c_common_get_alias_set (tree);
+extern void c_register_builtin_type (tree, const char*);
+extern bool c_promoting_integer_type_p (const_tree);
+extern bool self_promoting_args_p (const_tree);
+extern tree strip_pointer_operator (tree);
+extern tree strip_pointer_or_array_types (tree);
+extern HOST_WIDE_INT c_common_to_target_charset (HOST_WIDE_INT);
+
+/* This is the basic parsing function.  */
+extern void c_parse_file (void);
+
+extern void c_parse_final_cleanups (void);
+
+/* These macros provide convenient access to the various _STMT nodes.  */
+
+/* Nonzero if a given STATEMENT_LIST represents the outermost binding
+   if a statement expression.  */
+#define STATEMENT_LIST_STMT_EXPR(NODE) \
+  TREE_LANG_FLAG_1 (STATEMENT_LIST_CHECK (NODE))
+
+/* Nonzero if a label has been added to the statement list.  */
+#define STATEMENT_LIST_HAS_LABEL(NODE) \
+  TREE_LANG_FLAG_3 (STATEMENT_LIST_CHECK (NODE))
+
+/* C_MAYBE_CONST_EXPR accessors.  */
+#define C_MAYBE_CONST_EXPR_PRE(NODE)			\
+  TREE_OPERAND (C_MAYBE_CONST_EXPR_CHECK (NODE), 0)
+#define C_MAYBE_CONST_EXPR_EXPR(NODE)			\
+  TREE_OPERAND (C_MAYBE_CONST_EXPR_CHECK (NODE), 1)
+#define C_MAYBE_CONST_EXPR_INT_OPERANDS(NODE)		\
+  TREE_LANG_FLAG_0 (C_MAYBE_CONST_EXPR_CHECK (NODE))
+#define C_MAYBE_CONST_EXPR_NON_CONST(NODE)		\
+  TREE_LANG_FLAG_1 (C_MAYBE_CONST_EXPR_CHECK (NODE))
+#define EXPR_INT_CONST_OPERANDS(EXPR)			\
+  (INTEGRAL_TYPE_P (TREE_TYPE (EXPR))			\
+   && (TREE_CODE (EXPR) == INTEGER_CST			\
+       || (TREE_CODE (EXPR) == C_MAYBE_CONST_EXPR	\
+	   && C_MAYBE_CONST_EXPR_INT_OPERANDS (EXPR))))
+
+/* In a FIELD_DECL, nonzero if the decl was originally a bitfield.  */
+#define DECL_C_BIT_FIELD(NODE) \
+  (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) == 1)
+#define SET_DECL_C_BIT_FIELD(NODE) \
+  (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 1)
+#define CLEAR_DECL_C_BIT_FIELD(NODE) \
+  (DECL_LANG_FLAG_4 (FIELD_DECL_CHECK (NODE)) = 0)
+
+/* True if the decl was an unnamed bitfield.  */
+#define DECL_UNNAMED_BIT_FIELD(NODE) \
+  (DECL_C_BIT_FIELD (NODE) && !DECL_NAME (NODE))
+
+extern tree do_case (location_t, tree, tree);
+extern tree build_stmt (location_t, enum tree_code, ...);
+extern tree build_real_imag_expr (location_t, enum tree_code, tree);
+
+/* These functions must be defined by each front-end which implements
+   a variant of the C language.  They are used in c-common.c.  */
+
+extern tree build_unary_op (location_t, enum tree_code, tree, bool);
+extern tree build_binary_op (location_t, enum tree_code, tree, tree, bool);
+extern tree perform_integral_promotions (tree);
+
+/* These functions must be defined by each front-end which implements
+   a variant of the C language.  They are used by port files.  */
+
+extern tree default_conversion (tree);
+
+/* Given two integer or real types, return the type for their sum.
+   Given two compatible ANSI C types, returns the merged type.  */
+
+extern tree common_type (tree, tree);
+
+extern tree decl_constant_value (tree);
+
+/* Handle increment and decrement of boolean types.  */
+extern tree boolean_increment (enum tree_code, tree);
+
+extern int case_compare (splay_tree_key, splay_tree_key);
+
+extern tree c_add_case_label (location_t, splay_tree, tree, tree, tree);
+extern bool c_switch_covers_all_cases_p (splay_tree, tree);
+
+extern tree build_function_call (location_t, tree, tree);
+
+extern tree build_function_call_vec (location_t, vec<location_t>, tree,
+				     vec<tree, va_gc> *, vec<tree, va_gc> *);
+
+extern tree resolve_overloaded_builtin (location_t, tree, vec<tree, va_gc> *);
+
+extern tree finish_label_address_expr (tree, location_t);
+
+/* Same function prototype, but the C and C++ front ends have
+   different implementations.  Used in c-common.c.  */
+extern tree lookup_label (tree);
+extern tree lookup_name (tree);
+extern bool lvalue_p (const_tree);
+
+extern bool vector_targets_convertible_p (const_tree t1, const_tree t2);
+extern bool vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note);
+extern tree c_build_vec_perm_expr (location_t, tree, tree, tree, bool = true);
+extern tree c_build_vec_convert (location_t, tree, location_t, tree, bool = true);
+
+extern void init_c_lex (void);
+
+extern void c_cpp_builtins (cpp_reader *);
+extern void c_cpp_builtins_optimize_pragma (cpp_reader *, tree, tree);
+extern bool c_cpp_diagnostic (cpp_reader *, enum cpp_diagnostic_level,
+			      enum cpp_warning_reason, rich_location *,
+			      const char *, va_list *)
+     ATTRIBUTE_GCC_DIAG(5,0);
+extern int c_common_has_attribute (cpp_reader *);
+
+extern bool parse_optimize_options (tree, bool);
+
+/* Positive if an implicit `extern "C"' scope has just been entered;
+   negative if such a scope has just been exited.  */
+extern GTY(()) int pending_lang_change;
+
+/* Information recorded about each file examined during compilation.  */
+
+struct c_fileinfo
+{
+  int time;	/* Time spent in the file.  */
+
+  /* Flags used only by C++.
+     INTERFACE_ONLY nonzero means that we are in an "interface" section
+     of the compiler.  INTERFACE_UNKNOWN nonzero means we cannot trust
+     the value of INTERFACE_ONLY.  If INTERFACE_UNKNOWN is zero and
+     INTERFACE_ONLY is zero, it means that we are responsible for
+     exporting definitions that others might need.  */
+  short interface_only;
+  short interface_unknown;
+};
+
+struct c_fileinfo *get_fileinfo (const char *);
+extern void dump_time_statistics (void);
+
+extern bool c_dump_tree (void *, tree);
+
+extern void verify_sequence_points (tree);
+
+extern tree fold_offsetof (tree, tree = size_type_node,
+			   tree_code ctx = ERROR_MARK);
+
+extern int complete_array_type (tree *, tree, bool);
+extern void complete_flexible_array_elts (tree);
+
+extern tree builtin_type_for_size (int, bool);
+
+extern void c_common_mark_addressable_vec (tree);
+
+extern void set_underlying_type (tree);
+extern void record_types_used_by_current_var_decl (tree);
+extern vec<tree, va_gc> *make_tree_vector (void);
+extern void release_tree_vector (vec<tree, va_gc> *);
+extern vec<tree, va_gc> *make_tree_vector_single (tree);
+extern vec<tree, va_gc> *make_tree_vector_from_list (tree);
+extern vec<tree, va_gc> *make_tree_vector_from_ctor (tree);
+extern vec<tree, va_gc> *make_tree_vector_copy (const vec<tree, va_gc> *);
+
+/* Used for communication between c_common_type_for_mode and
+   c_register_builtin_type.  */
+extern GTY(()) tree registered_builtin_types;
+
+/* Read SOURCE_DATE_EPOCH from environment to have a deterministic
+   timestamp to replace embedded current dates to get reproducible
+   results.  Returns -1 if SOURCE_DATE_EPOCH is not defined.  */
+extern time_t cb_get_source_date_epoch (cpp_reader *pfile);
+
+/* The value (as a unix timestamp) corresponds to date
+   "Dec 31 9999 23:59:59 UTC", which is the latest date that __DATE__ and
+   __TIME__ can store.  */
+#define MAX_SOURCE_DATE_EPOCH HOST_WIDE_INT_C (253402300799)
+
+/* Callback for libcpp for offering spelling suggestions for misspelled
+   directives.  */
+extern const char *cb_get_suggestion (cpp_reader *, const char *,
+				      const char *const *);
+
+extern GTY(()) string_concat_db *g_string_concat_db;
+
+class substring_loc;
+extern const char *c_get_substring_location (const substring_loc &substr_loc,
+					     location_t *out_loc);
+
+/* In c-gimplify.c  */
+extern void c_genericize (tree);
+extern int c_gimplify_expr (tree *, gimple_seq *, gimple_seq *);
+extern tree c_build_bind_expr (location_t, tree, tree);
+
+/* In c-lex.c.  */
+extern enum cpp_ttype
+conflict_marker_get_final_tok_kind (enum cpp_ttype tok1_kind);
+
+/* In c-pch.c  */
+extern void pch_init (void);
+extern void pch_cpp_save_state (void);
+extern int c_common_valid_pch (cpp_reader *pfile, const char *name, int fd);
+extern void c_common_read_pch (cpp_reader *pfile, const char *name, int fd,
+			       const char *orig);
+extern void c_common_write_pch (void);
+extern void c_common_no_more_pch (void);
+extern void c_common_pch_pragma (cpp_reader *pfile, const char *);
+
+/* In *-checksum.c */
+extern const unsigned char executable_checksum[16];
+
+/* In c-cppbuiltin.c  */
+extern void builtin_define_std (const char *macro);
+extern void builtin_define_with_value (const char *, const char *, int);
+extern void builtin_define_with_int_value (const char *, HOST_WIDE_INT);
+extern void builtin_define_type_sizeof (const char *, tree);
+extern void c_stddef_cpp_builtins (void);
+extern void fe_file_change (const line_map_ordinary *);
+extern void c_parse_error (const char *, enum cpp_ttype, tree, unsigned char,
+			   rich_location *richloc);
+
+/* In c-ppoutput.c  */
+extern void init_pp_output (FILE *);
+extern void preprocess_file (cpp_reader *);
+extern void pp_file_change (const line_map_ordinary *);
+extern void pp_dir_change (cpp_reader *, const char *);
+extern bool check_missing_format_attribute (tree, tree);
+
+/* In c-omp.c  */
+typedef wide_int_bitmask omp_clause_mask;
+
+#define OMP_CLAUSE_MASK_1 omp_clause_mask (1)
+
+enum c_omp_clause_split
+{
+  C_OMP_CLAUSE_SPLIT_TARGET = 0,
+  C_OMP_CLAUSE_SPLIT_TEAMS,
+  C_OMP_CLAUSE_SPLIT_DISTRIBUTE,
+  C_OMP_CLAUSE_SPLIT_PARALLEL,
+  C_OMP_CLAUSE_SPLIT_FOR,
+  C_OMP_CLAUSE_SPLIT_SIMD,
+  C_OMP_CLAUSE_SPLIT_COUNT,
+  C_OMP_CLAUSE_SPLIT_SECTIONS = C_OMP_CLAUSE_SPLIT_FOR,
+  C_OMP_CLAUSE_SPLIT_TASKLOOP = C_OMP_CLAUSE_SPLIT_FOR
+};
+
+enum c_omp_region_type
+{
+  C_ORT_OMP			= 1 << 0,
+  C_ORT_ACC			= 1 << 1,
+  C_ORT_DECLARE_SIMD		= 1 << 2,
+  C_ORT_OMP_DECLARE_SIMD	= C_ORT_OMP | C_ORT_DECLARE_SIMD
+};
+
+extern tree c_finish_omp_master (location_t, tree);
+extern tree c_finish_omp_taskgroup (location_t, tree, tree);
+extern tree c_finish_omp_critical (location_t, tree, tree, tree);
+extern tree c_finish_omp_ordered (location_t, tree, tree);
+extern void c_finish_omp_barrier (location_t);
+extern tree c_finish_omp_atomic (location_t, enum tree_code, enum tree_code,
+				 tree, tree, tree, tree, tree, bool,
+				 enum omp_memory_order, bool = false);
+extern bool c_omp_depend_t_p (tree);
+extern void c_finish_omp_depobj (location_t, tree, enum omp_clause_depend_kind,
+				 tree);
+extern void c_finish_omp_flush (location_t, int);
+extern void c_finish_omp_taskwait (location_t);
+extern void c_finish_omp_taskyield (location_t);
+extern tree c_finish_omp_for (location_t, enum tree_code, tree, tree, tree,
+			      tree, tree, tree, tree, bool);
+extern bool c_omp_check_loop_iv (tree, tree, walk_tree_lh);
+extern bool c_omp_check_loop_iv_exprs (location_t, tree, tree, tree, tree,
+				       walk_tree_lh);
+extern tree c_finish_oacc_wait (location_t, tree, tree);
+extern tree c_oacc_split_loop_clauses (tree, tree *, bool);
+extern void c_omp_split_clauses (location_t, enum tree_code, omp_clause_mask,
+				 tree, tree *);
+extern tree c_omp_declare_simd_clauses_to_numbers (tree, tree);
+extern void c_omp_declare_simd_clauses_to_decls (tree, tree);
+extern enum omp_clause_default_kind c_omp_predetermined_sharing (tree);
+
+/* Return next tree in the chain for chain_next walking of tree nodes.  */
+static inline tree
+c_tree_chain_next (tree t)
+{
+  /* TREE_CHAIN of a type is TYPE_STUB_DECL, which is different
+     kind of object, never a long chain of nodes.  Prefer
+     TYPE_NEXT_VARIANT for types.  */
+  if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPE_COMMON))
+    return TYPE_NEXT_VARIANT (t);
+  /* Otherwise, if there is TREE_CHAIN, return it.  */
+  if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_COMMON))
+    return TREE_CHAIN (t);
+  return NULL;
+}
+
+/* Mask used by tm_stmt_attr.  */
+#define TM_STMT_ATTR_OUTER	2
+#define TM_STMT_ATTR_ATOMIC	4
+#define TM_STMT_ATTR_RELAXED	8
+
+/* Mask used by tm_attr_to_mask and tm_mask_to_attr.  Note that these
+   are ordered specifically such that more restrictive attributes are
+   at lower bit positions.  This fact is known by the C++ tm attribute
+   inheritance code such that least bit extraction (mask & -mask) results
+   in the most restrictive attribute.  */
+#define TM_ATTR_SAFE			1
+#define TM_ATTR_CALLABLE		2
+#define TM_ATTR_PURE			4
+#define TM_ATTR_IRREVOCABLE		8
+#define TM_ATTR_MAY_CANCEL_OUTER	16
+
+/* A suffix-identifier value doublet that represents user-defined literals
+   for C++-0x.  */
+enum overflow_type {
+  OT_UNDERFLOW = -1,
+  OT_NONE,
+  OT_OVERFLOW
+};
+
+struct GTY(()) tree_userdef_literal {
+  struct tree_base base;
+  tree suffix_id;
+  tree value;
+  tree num_string;
+  enum overflow_type overflow;
+};
+
+#define USERDEF_LITERAL_SUFFIX_ID(NODE) \
+  (((struct tree_userdef_literal *)USERDEF_LITERAL_CHECK (NODE))->suffix_id)
+
+#define USERDEF_LITERAL_VALUE(NODE) \
+  (((struct tree_userdef_literal *)USERDEF_LITERAL_CHECK (NODE))->value)
+
+#define USERDEF_LITERAL_OVERFLOW(NODE) \
+  (((struct tree_userdef_literal *)USERDEF_LITERAL_CHECK (NODE))->overflow)
+
+#define USERDEF_LITERAL_NUM_STRING(NODE) \
+  (((struct tree_userdef_literal *)USERDEF_LITERAL_CHECK (NODE))->num_string)
+
+#define USERDEF_LITERAL_TYPE(NODE) \
+  (TREE_TYPE (USERDEF_LITERAL_VALUE (NODE)))
+
+extern tree build_userdef_literal (tree suffix_id, tree value,
+				   enum overflow_type overflow,
+				   tree num_string);
+
+extern bool convert_vector_to_array_for_subscript (location_t, tree *, tree);
+
+/* Possibe cases of scalar_to_vector conversion.  */
+enum stv_conv {
+  stv_error,        /* Error occurred.  */
+  stv_nothing,      /* Nothing happened.  */
+  stv_firstarg,     /* First argument must be expanded.  */
+  stv_secondarg     /* Second argument must be expanded.  */
+};
+
+extern enum stv_conv scalar_to_vector (location_t loc, enum tree_code code,
+				       tree op0, tree op1, bool);
+
+extern tree find_inv_trees (tree *, int *, void *);
+extern tree replace_inv_trees (tree *, int *, void *);
+
+extern bool reject_gcc_builtin (const_tree, location_t = UNKNOWN_LOCATION);
+extern bool valid_array_size_p (location_t, const_tree, tree, bool = true);
+extern void invalid_array_size_error (location_t, cst_size_error,
+				      const_tree, const_tree);
+
+/* In c-warn.c.  */
+extern void constant_expression_warning (tree);
+extern void constant_expression_error (tree);
+extern void overflow_warning (location_t, tree, tree = NULL_TREE);
+extern void warn_logical_operator (location_t, enum tree_code, tree,
+				   enum tree_code, tree, enum tree_code, tree);
+extern void warn_tautological_cmp (const op_location_t &, enum tree_code,
+				   tree, tree);
+extern void warn_logical_not_parentheses (location_t, enum tree_code, tree,
+					  tree);
+extern bool warn_if_unused_value (const_tree, location_t);
+extern bool strict_aliasing_warning (location_t, tree, tree);
+extern void sizeof_pointer_memaccess_warning (location_t *, tree,
+					      vec<tree, va_gc> *, tree *,
+					      bool (*) (tree, tree));
+extern void check_main_parameter_types (tree decl);
+extern void warnings_for_convert_and_check (location_t, tree, tree, tree);
+extern void c_do_switch_warnings (splay_tree, location_t, tree, tree, bool);
+extern void warn_for_omitted_condop (location_t, tree);
+extern bool warn_for_restrict (unsigned, tree *, unsigned);
+extern void warn_for_address_or_pointer_of_packed_member (tree, tree);
+
+/* Places where an lvalue, or modifiable lvalue, may be required.
+   Used to select diagnostic messages in lvalue_error and
+   readonly_error.  */
+enum lvalue_use {
+  lv_assign,
+  lv_increment,
+  lv_decrement,
+  lv_addressof,
+  lv_asm
+};
+
+extern void lvalue_error (location_t, enum lvalue_use);
+extern void invalid_indirection_error (location_t, tree, ref_operator);
+extern void readonly_error (location_t, tree, enum lvalue_use);
+extern void warn_array_subscript_with_type_char (location_t, tree);
+extern void warn_about_parentheses (location_t,
+				    enum tree_code,
+				    enum tree_code, tree,
+				    enum tree_code, tree);
+extern void warn_for_unused_label (tree label);
+extern void warn_for_div_by_zero (location_t, tree divisor);
+extern void warn_for_memset (location_t, tree, tree, int);
+extern void warn_for_sign_compare (location_t,
+				   tree orig_op0, tree orig_op1,
+				   tree op0, tree op1,
+				   tree result_type,
+				   enum tree_code resultcode);
+extern void do_warn_double_promotion (tree, tree, tree, const char *,
+				      location_t);
+extern void do_warn_unused_parameter (tree);
+extern void record_locally_defined_typedef (tree);
+extern void maybe_record_typedef_use (tree);
+extern void maybe_warn_unused_local_typedefs (void);
+extern void maybe_warn_bool_compare (location_t, enum tree_code, tree, tree);
+extern bool maybe_warn_shift_overflow (location_t, tree, tree);
+extern void warn_duplicated_cond_add_or_warn (location_t, tree, vec<tree> **);
+extern bool diagnose_mismatched_attributes (tree, tree);
+extern tree do_warn_duplicated_branches_r (tree *, int *, void *);
+extern void warn_for_multistatement_macros (location_t, location_t,
+					    location_t, enum rid);
+
+/* In c-attribs.c.  */
+extern bool attribute_takes_identifier_p (const_tree);
+extern tree handle_unused_attribute (tree *, tree, tree, int, bool *);
+extern int parse_tm_stmt_attr (tree, int);
+extern int tm_attr_to_mask (tree);
+extern tree tm_mask_to_attr (int);
+extern tree find_tm_attribute (tree);
+extern const struct attribute_spec::exclusions attr_cold_hot_exclusions[];
+
+/* In c-format.c.  */
+extern bool valid_format_string_type_p (tree);
+
+/* A bitmap of flags to positional_argument.  */
+enum posargflags {
+  /* Consider positional attribute argument value zero valid.  */
+  POSARG_ZERO = 1,
+  /* Consider positional attribute argument value valid if it refers
+     to the ellipsis (i.e., beyond the last typed argument).  */
+  POSARG_ELLIPSIS = 2
+};
+
+extern tree positional_argument (const_tree, const_tree, tree, tree_code,
+				 int = 0, int = posargflags ());
+
+extern enum flt_eval_method
+excess_precision_mode_join (enum flt_eval_method, enum flt_eval_method);
+
+extern int c_flt_eval_method (bool ts18661_p);
+extern void add_no_sanitize_value (tree node, unsigned int flags);
+
+extern void maybe_add_include_fixit (rich_location *, const char *, bool);
+extern void maybe_suggest_missing_token_insertion (rich_location *richloc,
+						   enum cpp_ttype token_type,
+						   location_t prev_token_loc);
+extern tree braced_lists_to_strings (tree, tree);
+
+extern bool has_attribute (location_t, tree, tree, tree (*)(tree));
+
+#if CHECKING_P
+namespace selftest {
+  /* Declarations for specific families of tests within c-family,
+     by source file, in alphabetical order.  */
+  extern void c_format_c_tests (void);
+  extern void c_indentation_c_tests (void);
+  extern void c_pretty_print_c_tests (void);
+  extern void c_spellcheck_cc_tests (void);
+
+  /* The entrypoint for running all of the above tests.  */
+  extern void c_family_tests (void);
+} // namespace selftest
+#endif /* #if CHECKING_P */
+
+#endif /* ! GCC_C_COMMON_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-family/c-objc.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-family/c-objc.h
new file mode 100644
index 0000000..c945a43
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-family/c-objc.h
@@ -0,0 +1,114 @@
+/* Definitions of Objective-C front-end entry points used for C and C++.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_C_COMMON_OBJC_H
+#define GCC_C_COMMON_OBJC_H
+
+/* ObjC ivar visibility types.  */
+enum GTY(()) objc_ivar_visibility_kind {
+  OBJC_IVAR_VIS_PROTECTED = 0,
+  OBJC_IVAR_VIS_PUBLIC    = 1,
+  OBJC_IVAR_VIS_PRIVATE   = 2,
+  OBJC_IVAR_VIS_PACKAGE   = 3
+};
+
+/* Objective-C / Objective-C++ entry points.  */
+
+/* The following ObjC/ObjC++ functions are called by the C and/or C++
+   front-ends; they all must have corresponding stubs in stub-objc.c.  */
+extern void objc_write_global_declarations (void);
+extern tree objc_is_class_name (tree);
+extern tree objc_is_object_ptr (tree);
+extern void objc_check_decl (tree);
+extern void objc_check_global_decl (tree);
+extern tree objc_common_type (tree, tree);
+extern bool objc_compare_types (tree, tree, int, tree);
+extern bool objc_have_common_type (tree, tree, int, tree);
+extern bool objc_diagnose_private_ivar (tree);
+extern void objc_volatilize_decl (tree);
+extern tree objc_rewrite_function_call (tree, tree);
+extern tree objc_message_selector (void);
+extern tree objc_lookup_ivar (tree, tree);
+extern void objc_clear_super_receiver (void);
+extern int objc_is_public (tree, tree);
+extern tree objc_is_id (tree);
+extern void objc_declare_alias (tree, tree);
+extern void objc_declare_class (tree);
+extern void objc_declare_protocol (tree, tree);
+extern tree objc_build_message_expr (tree, tree);
+extern tree objc_finish_message_expr (tree, tree, tree, tree*);
+extern tree objc_build_selector_expr (location_t, tree);
+extern tree objc_build_protocol_expr (tree);
+extern tree objc_build_encode_expr (tree);
+extern tree objc_build_string_object (tree);
+extern tree objc_get_protocol_qualified_type (tree, tree);
+extern tree objc_get_class_reference (tree);
+extern tree objc_get_class_ivars (tree);
+extern bool objc_detect_field_duplicates (bool);
+extern void objc_start_class_interface (tree, tree, tree, tree);
+extern void objc_start_category_interface (tree, tree, tree, tree);
+extern void objc_start_protocol (tree, tree, tree);
+extern void objc_continue_interface (void);
+extern void objc_finish_interface (void);
+extern void objc_start_class_implementation (tree, tree);
+extern void objc_start_category_implementation (tree, tree);
+extern void objc_continue_implementation (void);
+extern void objc_finish_implementation (void);
+extern void objc_set_visibility (objc_ivar_visibility_kind);
+extern tree objc_build_method_signature (bool, tree, tree, tree, bool);
+extern void objc_add_method_declaration (bool, tree, tree);
+extern bool objc_start_method_definition (bool, tree, tree, tree);
+extern void objc_finish_method_definition (tree);
+extern void objc_add_instance_variable (tree);
+extern tree objc_build_keyword_decl (tree, tree, tree, tree);
+extern tree objc_build_throw_stmt (location_t, tree);
+extern void objc_begin_try_stmt (location_t, tree);
+extern tree objc_finish_try_stmt (void);
+extern void objc_begin_catch_clause (tree);
+extern void objc_finish_catch_clause (void);
+extern void objc_build_finally_clause (location_t, tree);
+extern tree objc_build_synchronized (location_t, tree, tree);
+extern int objc_static_init_needed_p (void);
+extern tree objc_generate_static_init_call (tree);
+extern tree objc_generate_write_barrier (tree, enum tree_code, tree);
+extern void objc_set_method_opt (bool);
+extern void objc_finish_foreach_loop (location_t, tree, tree, tree, tree, tree);
+extern bool  objc_method_decl (enum tree_code);
+extern void objc_add_property_declaration (location_t, tree, bool, bool, bool, 
+					   bool, bool, bool, tree, tree);
+extern tree objc_maybe_build_component_ref (tree, tree);
+extern tree objc_build_class_component_ref (tree, tree);
+extern tree objc_maybe_build_modify_expr (tree, tree);
+extern tree objc_build_incr_expr_for_property_ref (location_t, enum tree_code, 
+						   tree, tree);
+extern void objc_add_synthesize_declaration (location_t, tree);
+extern void objc_add_dynamic_declaration (location_t, tree);
+extern const char * objc_maybe_printable_name (tree, int);
+extern bool objc_is_property_ref (tree);
+extern bool objc_string_ref_type_p (tree);
+extern void objc_check_format_arg (tree, tree);
+extern void objc_finish_function (void);
+extern void objc_maybe_warn_exceptions (location_t);
+
+/* The following are provided by the C and C++ front-ends, and called by
+   ObjC/ObjC++.  */
+extern void *objc_get_current_scope (void);
+extern void objc_mark_locals_volatile (void *);
+
+#endif /* ! GCC_C_COMMON_OBJC_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-family/c-pragma.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-family/c-pragma.h
new file mode 100644
index 0000000..2bbb279
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-family/c-pragma.h
@@ -0,0 +1,245 @@
+/* Pragma related interfaces.
+   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_C_PRAGMA_H
+#define GCC_C_PRAGMA_H
+
+#include "cpplib.h" /* For enum cpp_ttype.  */
+
+/* Pragma identifiers built in to the front end parsers.  Identifiers
+   for ancillary handlers will follow these.  */
+enum pragma_kind {
+  PRAGMA_NONE = 0,
+
+  PRAGMA_OACC_ATOMIC,
+  PRAGMA_OACC_CACHE,
+  PRAGMA_OACC_DATA,
+  PRAGMA_OACC_DECLARE,
+  PRAGMA_OACC_ENTER_DATA,
+  PRAGMA_OACC_EXIT_DATA,
+  PRAGMA_OACC_HOST_DATA,
+  PRAGMA_OACC_KERNELS,
+  PRAGMA_OACC_LOOP,
+  PRAGMA_OACC_PARALLEL,
+  PRAGMA_OACC_ROUTINE,
+  PRAGMA_OACC_UPDATE,
+  PRAGMA_OACC_WAIT,
+
+  PRAGMA_OMP_ATOMIC,
+  PRAGMA_OMP_BARRIER,
+  PRAGMA_OMP_CANCEL,
+  PRAGMA_OMP_CANCELLATION_POINT,
+  PRAGMA_OMP_CRITICAL,
+  PRAGMA_OMP_DECLARE,
+  PRAGMA_OMP_DEPOBJ,
+  PRAGMA_OMP_DISTRIBUTE,
+  PRAGMA_OMP_END_DECLARE_TARGET,
+  PRAGMA_OMP_FLUSH,
+  PRAGMA_OMP_FOR,
+  PRAGMA_OMP_MASTER,
+  PRAGMA_OMP_ORDERED,
+  PRAGMA_OMP_PARALLEL,
+  PRAGMA_OMP_REQUIRES,
+  PRAGMA_OMP_SECTION,
+  PRAGMA_OMP_SECTIONS,
+  PRAGMA_OMP_SIMD,
+  PRAGMA_OMP_SINGLE,
+  PRAGMA_OMP_TARGET,
+  PRAGMA_OMP_TASK,
+  PRAGMA_OMP_TASKGROUP,
+  PRAGMA_OMP_TASKLOOP,
+  PRAGMA_OMP_TASKWAIT,
+  PRAGMA_OMP_TASKYIELD,
+  PRAGMA_OMP_THREADPRIVATE,
+  PRAGMA_OMP_TEAMS,
+
+  PRAGMA_GCC_PCH_PREPROCESS,
+  PRAGMA_IVDEP,
+  PRAGMA_UNROLL,
+
+  PRAGMA_FIRST_EXTERNAL
+};
+
+
+/* All clauses defined by OpenACC 2.0, and OpenMP 2.5, 3.0, 3.1, 4.0, 4.5
+   and 5.0.  Used internally by both C and C++ parsers.  */
+enum pragma_omp_clause {
+  PRAGMA_OMP_CLAUSE_NONE = 0,
+
+  PRAGMA_OMP_CLAUSE_ALIGNED,
+  PRAGMA_OMP_CLAUSE_COLLAPSE,
+  PRAGMA_OMP_CLAUSE_COPYIN,
+  PRAGMA_OMP_CLAUSE_COPYPRIVATE,
+  PRAGMA_OMP_CLAUSE_DEFAULT,
+  PRAGMA_OMP_CLAUSE_DEFAULTMAP,
+  PRAGMA_OMP_CLAUSE_DEPEND,
+  PRAGMA_OMP_CLAUSE_DEVICE,
+  PRAGMA_OMP_CLAUSE_DIST_SCHEDULE,
+  PRAGMA_OMP_CLAUSE_FINAL,
+  PRAGMA_OMP_CLAUSE_FIRSTPRIVATE,
+  PRAGMA_OMP_CLAUSE_FOR,
+  PRAGMA_OMP_CLAUSE_FROM,
+  PRAGMA_OMP_CLAUSE_GRAINSIZE,
+  PRAGMA_OMP_CLAUSE_HINT,
+  PRAGMA_OMP_CLAUSE_IF,
+  PRAGMA_OMP_CLAUSE_IN_REDUCTION,
+  PRAGMA_OMP_CLAUSE_INBRANCH,
+  PRAGMA_OMP_CLAUSE_IS_DEVICE_PTR,
+  PRAGMA_OMP_CLAUSE_LASTPRIVATE,
+  PRAGMA_OMP_CLAUSE_LINEAR,
+  PRAGMA_OMP_CLAUSE_LINK,
+  PRAGMA_OMP_CLAUSE_MAP,
+  PRAGMA_OMP_CLAUSE_MERGEABLE,
+  PRAGMA_OMP_CLAUSE_NOGROUP,
+  PRAGMA_OMP_CLAUSE_NONTEMPORAL,
+  PRAGMA_OMP_CLAUSE_NOTINBRANCH,
+  PRAGMA_OMP_CLAUSE_NOWAIT,
+  PRAGMA_OMP_CLAUSE_NUM_TASKS,
+  PRAGMA_OMP_CLAUSE_NUM_TEAMS,
+  PRAGMA_OMP_CLAUSE_NUM_THREADS,
+  PRAGMA_OMP_CLAUSE_ORDERED,
+  PRAGMA_OMP_CLAUSE_PARALLEL,
+  PRAGMA_OMP_CLAUSE_PRIORITY,
+  PRAGMA_OMP_CLAUSE_PRIVATE,
+  PRAGMA_OMP_CLAUSE_PROC_BIND,
+  PRAGMA_OMP_CLAUSE_REDUCTION,
+  PRAGMA_OMP_CLAUSE_SAFELEN,
+  PRAGMA_OMP_CLAUSE_SCHEDULE,
+  PRAGMA_OMP_CLAUSE_SECTIONS,
+  PRAGMA_OMP_CLAUSE_SHARED,
+  PRAGMA_OMP_CLAUSE_SIMD,
+  PRAGMA_OMP_CLAUSE_SIMDLEN,
+  PRAGMA_OMP_CLAUSE_TASK_REDUCTION,
+  PRAGMA_OMP_CLAUSE_TASKGROUP,
+  PRAGMA_OMP_CLAUSE_THREAD_LIMIT,
+  PRAGMA_OMP_CLAUSE_THREADS,
+  PRAGMA_OMP_CLAUSE_TO,
+  PRAGMA_OMP_CLAUSE_UNIFORM,
+  PRAGMA_OMP_CLAUSE_UNTIED,
+  PRAGMA_OMP_CLAUSE_USE_DEVICE_PTR,
+
+  /* Clauses for OpenACC.  */
+  PRAGMA_OACC_CLAUSE_ASYNC,
+  PRAGMA_OACC_CLAUSE_AUTO,
+  PRAGMA_OACC_CLAUSE_COPY,
+  PRAGMA_OACC_CLAUSE_COPYOUT,
+  PRAGMA_OACC_CLAUSE_CREATE,
+  PRAGMA_OACC_CLAUSE_DELETE,
+  PRAGMA_OACC_CLAUSE_DEVICEPTR,
+  PRAGMA_OACC_CLAUSE_DEVICE_RESIDENT,
+  PRAGMA_OACC_CLAUSE_FINALIZE,
+  PRAGMA_OACC_CLAUSE_GANG,
+  PRAGMA_OACC_CLAUSE_HOST,
+  PRAGMA_OACC_CLAUSE_INDEPENDENT,
+  PRAGMA_OACC_CLAUSE_NUM_GANGS,
+  PRAGMA_OACC_CLAUSE_NUM_WORKERS,
+  PRAGMA_OACC_CLAUSE_PRESENT,
+  PRAGMA_OACC_CLAUSE_SELF,
+  PRAGMA_OACC_CLAUSE_SEQ,
+  PRAGMA_OACC_CLAUSE_TILE,
+  PRAGMA_OACC_CLAUSE_USE_DEVICE,
+  PRAGMA_OACC_CLAUSE_VECTOR,
+  PRAGMA_OACC_CLAUSE_VECTOR_LENGTH,
+  PRAGMA_OACC_CLAUSE_WAIT,
+  PRAGMA_OACC_CLAUSE_WORKER,
+  PRAGMA_OACC_CLAUSE_IF_PRESENT,
+  PRAGMA_OACC_CLAUSE_COLLAPSE = PRAGMA_OMP_CLAUSE_COLLAPSE,
+  PRAGMA_OACC_CLAUSE_COPYIN = PRAGMA_OMP_CLAUSE_COPYIN,
+  PRAGMA_OACC_CLAUSE_DEVICE = PRAGMA_OMP_CLAUSE_DEVICE,
+  PRAGMA_OACC_CLAUSE_DEFAULT = PRAGMA_OMP_CLAUSE_DEFAULT,
+  PRAGMA_OACC_CLAUSE_FIRSTPRIVATE = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE,
+  PRAGMA_OACC_CLAUSE_IF = PRAGMA_OMP_CLAUSE_IF,
+  PRAGMA_OACC_CLAUSE_PRIVATE = PRAGMA_OMP_CLAUSE_PRIVATE,
+  PRAGMA_OACC_CLAUSE_REDUCTION = PRAGMA_OMP_CLAUSE_REDUCTION,
+  PRAGMA_OACC_CLAUSE_LINK = PRAGMA_OMP_CLAUSE_LINK
+};
+
+extern struct cpp_reader* parse_in;
+
+/* It's safe to always leave visibility pragma enabled as if
+   visibility is not supported on the host OS platform the
+   statements are ignored.  */
+extern void push_visibility (const char *, int);
+extern bool pop_visibility (int);
+
+extern void init_pragma (void);
+
+/* Front-end wrappers for pragma registration.  */
+typedef void (*pragma_handler_1arg)(struct cpp_reader *);
+/* A second pragma handler, which adds a void * argument allowing to pass extra
+   data to the handler.  */
+typedef void (*pragma_handler_2arg)(struct cpp_reader *, void *);
+
+/* This union allows to abstract the different handlers.  */
+union gen_pragma_handler {
+  pragma_handler_1arg handler_1arg;
+  pragma_handler_2arg handler_2arg;
+};
+/* Internally used to keep the data of the handler.  */
+struct internal_pragma_handler {
+  union gen_pragma_handler handler;
+  /* Permits to know if handler is a pragma_handler_1arg (extra_data is false)
+     or a pragma_handler_2arg (extra_data is true).  */
+  bool extra_data;
+  /* A data field which can be used when extra_data is true.  */
+  void * data;
+};
+
+extern void c_register_pragma (const char *space, const char *name,
+                               pragma_handler_1arg handler);
+extern void c_register_pragma_with_data (const char *space, const char *name,
+                                         pragma_handler_2arg handler,
+                                         void *data);
+
+extern void c_register_pragma_with_expansion (const char *space,
+                                              const char *name,
+                                              pragma_handler_1arg handler);
+extern void c_register_pragma_with_expansion_and_data (const char *space,
+                                                       const char *name,
+                                                   pragma_handler_2arg handler,
+                                                       void *data);
+extern void c_invoke_pragma_handler (unsigned int);
+
+extern void maybe_apply_pragma_weak (tree);
+extern void maybe_apply_pending_pragma_weaks (void);
+extern tree maybe_apply_renaming_pragma (tree, tree);
+extern void maybe_apply_pragma_scalar_storage_order (tree);
+extern void add_to_renaming_pragma_list (tree, tree);
+
+extern enum cpp_ttype pragma_lex (tree *, location_t *loc = NULL);
+
+/* Flags for use with c_lex_with_flags.  The values here were picked
+   so that 0 means to translate and join strings.  */
+#define C_LEX_STRING_NO_TRANSLATE 1 /* Do not lex strings into
+				       execution character set.  */
+#define C_LEX_STRING_NO_JOIN	  2 /* Do not concatenate strings
+				       nor translate them into execution
+				       character set.  */
+
+/* This is not actually available to pragma parsers.  It's merely a
+   convenient location to declare this function for c-lex, after
+   having enum cpp_ttype declared.  */
+extern enum cpp_ttype c_lex_with_flags (tree *, location_t *, unsigned char *,
+					int);
+
+extern void c_pp_lookup_pragma (unsigned int, const char **, const char **);
+
+extern GTY(()) tree pragma_extern_prefix;
+
+#endif /* GCC_C_PRAGMA_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-family/c-pretty-print.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-family/c-pretty-print.h
new file mode 100644
index 0000000..6084dcf
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-family/c-pretty-print.h
@@ -0,0 +1,141 @@
+/* Various declarations for the C and C++ pretty-printers.
+   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_C_PRETTY_PRINTER
+#define GCC_C_PRETTY_PRINTER
+
+#include "tree.h"
+#include "c-family/c-common.h"
+#include "pretty-print.h"
+
+
+enum pp_c_pretty_print_flags
+  {
+     pp_c_flag_abstract = 1 << 1,
+     pp_c_flag_gnu_v3 = 1 << 2,
+     pp_c_flag_last_bit = 3
+  };
+
+
+/* The data type used to bundle information necessary for pretty-printing
+   a C or C++ entity.  */
+struct c_pretty_printer;
+
+/* The type of a C pretty-printer 'member' function.  */
+typedef void (*c_pretty_print_fn) (c_pretty_printer *, tree);
+
+/* The datatype that contains information necessary for pretty-printing
+   a tree that represents a C construct.  Any pretty-printer for a
+   language using C syntax can derive from this datatype and reuse
+   facilities provided here.  A derived pretty-printer can override
+   any function listed in the vtable below.  See cp/cxx-pretty-print.h
+   and cp/cxx-pretty-print.c for an example of derivation.  */
+struct c_pretty_printer : pretty_printer
+{
+  c_pretty_printer ();
+
+  // Format string, possibly translated.
+  void translate_string (const char *);
+
+  virtual void constant (tree);
+  virtual void id_expression (tree);
+  virtual void primary_expression (tree);
+  virtual void postfix_expression (tree);
+  virtual void unary_expression (tree);
+  virtual void multiplicative_expression (tree);
+  virtual void conditional_expression (tree);
+  virtual void assignment_expression (tree);
+  virtual void expression (tree);
+
+  virtual void type_id (tree);
+  virtual void statement (tree);
+
+  virtual void declaration (tree);
+  virtual void declaration_specifiers (tree);
+  virtual void simple_type_specifier (tree);
+  virtual void function_specifier (tree);
+  virtual void storage_class_specifier (tree);
+  virtual void declarator (tree);
+  virtual void direct_declarator (tree);
+  virtual void abstract_declarator (tree);
+  virtual void direct_abstract_declarator (tree);
+
+  virtual void initializer (tree);
+  /* Points to the first element of an array of offset-list.
+     Not used yet.  */
+  int *offset_list;
+
+  pp_flags flags;
+
+  /* These must be overridden by each of the C and C++ front-end to
+     reflect their understanding of syntactic productions when they differ.  */
+  c_pretty_print_fn type_specifier_seq;
+  c_pretty_print_fn ptr_operator;
+  c_pretty_print_fn parameter_list;
+};
+
+#define pp_c_tree_identifier(PPI, ID)              \
+   pp_c_identifier (PPI, IDENTIFIER_POINTER (ID))
+
+#define pp_type_specifier_seq(PP, D)    (PP)->type_specifier_seq (PP, D)
+#define pp_ptr_operator(PP, D)          (PP)->ptr_operator (PP, D)
+#define pp_parameter_list(PP, T)        (PP)->parameter_list (PP, T)
+
+void pp_c_whitespace (c_pretty_printer *);
+void pp_c_left_paren (c_pretty_printer *);
+void pp_c_right_paren (c_pretty_printer *);
+void pp_c_left_brace (c_pretty_printer *);
+void pp_c_right_brace (c_pretty_printer *);
+void pp_c_left_bracket (c_pretty_printer *);
+void pp_c_right_bracket (c_pretty_printer *);
+void pp_c_dot (c_pretty_printer *);
+void pp_c_ampersand (c_pretty_printer *);
+void pp_c_star (c_pretty_printer *);
+void pp_c_arrow (c_pretty_printer *);
+void pp_c_semicolon (c_pretty_printer *);
+void pp_c_complement (c_pretty_printer *);
+void pp_c_exclamation (c_pretty_printer *);
+void pp_c_space_for_pointer_operator (c_pretty_printer *, tree);
+
+/* Declarations.  */
+void pp_c_tree_decl_identifier (c_pretty_printer *, tree);
+void pp_c_function_definition (c_pretty_printer *, tree);
+void pp_c_attributes (c_pretty_printer *, tree);
+void pp_c_attributes_display (c_pretty_printer *, tree);
+void pp_c_cv_qualifiers (c_pretty_printer *pp, int qualifiers, bool func_type);
+void pp_c_type_qualifier_list (c_pretty_printer *, tree);
+void pp_c_parameter_type_list (c_pretty_printer *, tree);
+void pp_c_specifier_qualifier_list (c_pretty_printer *, tree);
+/* Expressions.  */
+void pp_c_logical_or_expression (c_pretty_printer *, tree);
+void pp_c_expression_list (c_pretty_printer *, tree);
+void pp_c_constructor_elts (c_pretty_printer *, vec<constructor_elt, va_gc> *);
+void pp_c_call_argument_list (c_pretty_printer *, tree);
+void pp_c_type_cast (c_pretty_printer *, tree);
+void pp_c_cast_expression (c_pretty_printer *, tree);
+void pp_c_init_declarator (c_pretty_printer *, tree);
+void pp_c_ws_string (c_pretty_printer *, const char *);
+void pp_c_identifier (c_pretty_printer *, const char *);
+void pp_c_string_literal (c_pretty_printer *, tree);
+void pp_c_integer_constant (c_pretty_printer *, tree);
+
+void print_c_tree (FILE *file, tree t);
+
+#endif /* GCC_C_PRETTY_PRINTER */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-tree.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-tree.h
new file mode 100644
index 0000000..9393f6d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/c-tree.h
@@ -0,0 +1,797 @@
+/* Definitions for C parsing and type checking.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_C_TREE_H
+#define GCC_C_TREE_H
+
+#include "c-family/c-common.h"
+#include "diagnostic.h"
+
+/* struct lang_identifier is private to c-decl.c, but langhooks.c needs to
+   know how big it is.  This is sanity-checked in c-decl.c.  */
+#define C_SIZEOF_STRUCT_LANG_IDENTIFIER \
+  (sizeof (struct c_common_identifier) + 3 * sizeof (void *))
+
+/* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only.  */
+#define C_TYPE_FIELDS_READONLY(TYPE) TREE_LANG_FLAG_1 (TYPE)
+
+/* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is volatile.  */
+#define C_TYPE_FIELDS_VOLATILE(TYPE) TREE_LANG_FLAG_2 (TYPE)
+
+/* In a RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE
+   nonzero if the definition of the type has already started.  */
+#define C_TYPE_BEING_DEFINED(TYPE) TYPE_LANG_FLAG_0 (TYPE)
+
+/* In an incomplete RECORD_TYPE or UNION_TYPE, a list of variable
+   declarations whose type would be completed by completing that type.  */
+#define C_TYPE_INCOMPLETE_VARS(TYPE) TYPE_VFIELD (TYPE)
+
+/* In an IDENTIFIER_NODE, nonzero if this identifier is actually a
+   keyword.  C_RID_CODE (node) is then the RID_* value of the keyword.  */
+#define C_IS_RESERVED_WORD(ID) TREE_LANG_FLAG_0 (ID)
+
+/* Record whether a type or decl was written with nonconstant size.
+   Note that TYPE_SIZE may have simplified to a constant.  */
+#define C_TYPE_VARIABLE_SIZE(TYPE) TYPE_LANG_FLAG_1 (TYPE)
+#define C_DECL_VARIABLE_SIZE(TYPE) DECL_LANG_FLAG_0 (TYPE)
+
+/* Record whether a type is defined inside a struct or union type.
+   This is used for -Wc++-compat. */
+#define C_TYPE_DEFINED_IN_STRUCT(TYPE) TYPE_LANG_FLAG_2 (TYPE)
+
+/* Record whether an "incomplete type" error was given for the type.  */
+#define C_TYPE_ERROR_REPORTED(TYPE) TYPE_LANG_FLAG_3 (TYPE)
+
+/* Record whether a typedef for type `int' was actually `signed int'.  */
+#define C_TYPEDEF_EXPLICITLY_SIGNED(EXP) DECL_LANG_FLAG_1 (EXP)
+
+/* For a FUNCTION_DECL, nonzero if it was defined without an explicit
+   return type.  */
+#define C_FUNCTION_IMPLICIT_INT(EXP) DECL_LANG_FLAG_1 (EXP)
+
+/* For a FUNCTION_DECL, nonzero if it was an implicit declaration.  */
+#define C_DECL_IMPLICIT(EXP) DECL_LANG_FLAG_2 (EXP)
+
+/* For a PARM_DECL, nonzero if it was declared as an array.  */
+#define C_ARRAY_PARAMETER(NODE) DECL_LANG_FLAG_0 (NODE)
+
+/* For FUNCTION_DECLs, evaluates true if the decl is built-in but has
+   been declared.  */
+#define C_DECL_DECLARED_BUILTIN(EXP)		\
+  DECL_LANG_FLAG_3 (FUNCTION_DECL_CHECK (EXP))
+
+/* For FUNCTION_DECLs, evaluates true if the decl is built-in, has a
+   built-in prototype and does not have a non-built-in prototype.  */
+#define C_DECL_BUILTIN_PROTOTYPE(EXP)		\
+  DECL_LANG_FLAG_6 (FUNCTION_DECL_CHECK (EXP))
+
+/* Record whether a decl was declared register.  This is strictly a
+   front-end flag, whereas DECL_REGISTER is used for code generation;
+   they may differ for structures with volatile fields.  */
+#define C_DECL_REGISTER(EXP) DECL_LANG_FLAG_4 (EXP)
+
+/* Record whether a decl was used in an expression anywhere except an
+   unevaluated operand of sizeof / typeof / alignof.  This is only
+   used for functions declared static but not defined, though outside
+   sizeof and typeof it is set for other function decls as well.  */
+#define C_DECL_USED(EXP) DECL_LANG_FLAG_5 (FUNCTION_DECL_CHECK (EXP))
+
+/* Record whether a variable has been declared threadprivate by
+   #pragma omp threadprivate.  */
+#define C_DECL_THREADPRIVATE_P(DECL) DECL_LANG_FLAG_3 (VAR_DECL_CHECK (DECL))
+
+/* Set on VAR_DECLs for compound literals.  */
+#define C_DECL_COMPOUND_LITERAL_P(DECL) \
+  DECL_LANG_FLAG_5 (VAR_DECL_CHECK (DECL))
+
+/* Nonzero for a decl which either doesn't exist or isn't a prototype.
+   N.B. Could be simplified if all built-in decls had complete prototypes
+   (but this is presently difficult because some of them need FILE*).  */
+#define C_DECL_ISNT_PROTOTYPE(EXP)			\
+       (EXP == 0					\
+	|| (!prototype_p (TREE_TYPE (EXP))	\
+	    && !fndecl_built_in_p (EXP)))
+
+/* For FUNCTION_TYPE, a hidden list of types of arguments.  The same as
+   TYPE_ARG_TYPES for functions with prototypes, but created for functions
+   without prototypes.  */
+#define TYPE_ACTUAL_ARG_TYPES(NODE) TYPE_LANG_SLOT_1 (NODE)
+
+/* For a CONSTRUCTOR, whether some initializer contains a
+   subexpression meaning it is not a constant expression.  */
+#define CONSTRUCTOR_NON_CONST(EXPR) TREE_LANG_FLAG_1 (CONSTRUCTOR_CHECK (EXPR))
+
+/* For a SAVE_EXPR, nonzero if the operand of the SAVE_EXPR has already
+   been folded.  */
+#define SAVE_EXPR_FOLDED_P(EXP)	TREE_LANG_FLAG_1 (SAVE_EXPR_CHECK (EXP))
+
+/* Record parser information about an expression that is irrelevant
+   for code generation alongside a tree representing its value.  */
+struct c_expr
+{
+  /* The value of the expression.  */
+  tree value;
+  /* Record the original unary/binary operator of an expression, which may
+     have been changed by fold, STRING_CST for unparenthesized string
+     constants, C_MAYBE_CONST_EXPR for __builtin_constant_p calls
+     (even if parenthesized), for subexpressions, and for non-constant
+     initializers, or ERROR_MARK for other expressions (including
+     parenthesized expressions).  */
+  enum tree_code original_code;
+  /* If not NULL, the original type of an expression.  This will
+     differ from the type of the value field for an enum constant.
+     The type of an enum constant is a plain integer type, but this
+     field will be the enum type.  */
+  tree original_type;
+
+  /* The source range of this expression.  This is redundant
+     for node values that have locations, but not all node kinds
+     have locations (e.g. constants, and references to params, locals,
+     etc), so we stash a copy here.  */
+  source_range src_range;
+
+  /* Access to the first and last locations within the source spelling
+     of this expression.  */
+  location_t get_start () const { return src_range.m_start; }
+  location_t get_finish () const { return src_range.m_finish; }
+
+  location_t get_location () const
+  {
+    if (EXPR_HAS_LOCATION (value))
+      return EXPR_LOCATION (value);
+    else
+      return make_location (get_start (), get_start (), get_finish ());
+  }
+
+  /* Set the value to error_mark_node whilst ensuring that src_range
+     is initialized.  */
+  void set_error ()
+  {
+    value = error_mark_node;
+    src_range.m_start = UNKNOWN_LOCATION;
+    src_range.m_finish = UNKNOWN_LOCATION;
+  }
+};
+
+/* Type alias for struct c_expr. This allows to use the structure
+   inside the VEC types.  */
+typedef struct c_expr c_expr_t;
+
+/* A kind of type specifier.  Note that this information is currently
+   only used to distinguish tag definitions, tag references and typeof
+   uses.  */
+enum c_typespec_kind {
+  /* No typespec.  This appears only in struct c_declspec.  */
+  ctsk_none,
+  /* A reserved keyword type specifier.  */
+  ctsk_resword,
+  /* A reference to a tag, previously declared, such as "struct foo".
+     This includes where the previous declaration was as a different
+     kind of tag, in which case this is only valid if shadowing that
+     tag in an inner scope.  */
+  ctsk_tagref,
+  /* A reference to a tag, not previously declared in a visible
+     scope.  */
+  ctsk_tagfirstref,
+  /* A definition of a tag such as "struct foo { int a; }".  */
+  ctsk_tagdef,
+  /* A typedef name.  */
+  ctsk_typedef,
+  /* An ObjC-specific kind of type specifier.  */
+  ctsk_objc,
+  /* A typeof specifier, or _Atomic ( type-name ).  */
+  ctsk_typeof
+};
+
+/* A type specifier: this structure is created in the parser and
+   passed to declspecs_add_type only.  */
+struct c_typespec {
+  /* What kind of type specifier this is.  */
+  enum c_typespec_kind kind;
+  /* Whether the expression has operands suitable for use in constant
+     expressions.  */
+  bool expr_const_operands;
+  /* The specifier itself.  */
+  tree spec;
+  /* An expression to be evaluated before the type specifier, in the
+     case of typeof specifiers, or NULL otherwise or if no such
+     expression is required for a particular typeof specifier.  In
+     particular, when typeof is applied to an expression of variably
+     modified type, that expression must be evaluated in order to
+     determine array sizes that form part of the type, but the
+     expression itself (as opposed to the array sizes) forms no part
+     of the type and so needs to be recorded separately.  */
+  tree expr;
+};
+
+/* A storage class specifier.  */
+enum c_storage_class {
+  csc_none,
+  csc_auto,
+  csc_extern,
+  csc_register,
+  csc_static,
+  csc_typedef
+};
+
+/* A type specifier keyword "void", "_Bool", "char", "int", "float",
+   "double", "_Decimal32", "_Decimal64", "_Decimal128", "_Fract", "_Accum",
+   or none of these.  */
+enum c_typespec_keyword {
+  cts_none,
+  cts_void,
+  cts_bool,
+  cts_char,
+  cts_int,
+  cts_float,
+  cts_int_n,
+  cts_double,
+  cts_dfloat32,
+  cts_dfloat64,
+  cts_dfloat128,
+  cts_floatn_nx,
+  cts_fract,
+  cts_accum,
+  cts_auto_type
+};
+
+/* This enum lists all the possible declarator specifiers, storage
+   class or attribute that a user can write.  There is at least one
+   enumerator per possible declarator specifier in the struct
+   c_declspecs below.
+
+   It is used to index the array of declspec locations in struct
+   c_declspecs.  */
+enum c_declspec_word {
+  cdw_typespec /* A catch-all for a typespec.  */,
+  cdw_storage_class  /* A catch-all for a storage class */,
+  cdw_attributes,
+  cdw_typedef,
+  cdw_explicit_signed,
+  cdw_deprecated,
+  cdw_default_int,
+  cdw_long,
+  cdw_long_long,
+  cdw_short,
+  cdw_signed,
+  cdw_unsigned,
+  cdw_complex,
+  cdw_inline,
+  cdw_noreturn,
+  cdw_thread,
+  cdw_const,
+  cdw_volatile,
+  cdw_restrict,
+  cdw_atomic,
+  cdw_saturating,
+  cdw_alignas,
+  cdw_address_space,
+  cdw_gimple,
+  cdw_rtl,
+  cdw_number_of_elements /* This one must always be the last
+			    enumerator.  */
+};
+
+enum c_declspec_il {
+  cdil_none,
+  cdil_gimple,		/* __GIMPLE  */
+  cdil_gimple_cfg,	/* __GIMPLE(cfg)  */
+  cdil_gimple_ssa,	/* __GIMPLE(ssa)  */
+  cdil_rtl		/* __RTL  */
+};
+
+/* A sequence of declaration specifiers in C.  When a new declaration
+   specifier is added, please update the enum c_declspec_word above
+   accordingly.  */
+struct c_declspecs {
+  location_t locations[cdw_number_of_elements];
+  /* The type specified, if a single type specifier such as a struct,
+     union or enum specifier, typedef name or typeof specifies the
+     whole type, or NULL_TREE if none or a keyword such as "void" or
+     "char" is used.  Does not include qualifiers.  */
+  tree type;
+  /* Any expression to be evaluated before the type, from a typeof
+     specifier.  */
+  tree expr;
+  /* The attributes from a typedef decl.  */
+  tree decl_attr;
+  /* When parsing, the attributes.  Outside the parser, this will be
+     NULL; attributes (possibly from multiple lists) will be passed
+     separately.  */
+  tree attrs;
+  /* The pass to start compiling a __GIMPLE or __RTL function with.  */
+  char *gimple_or_rtl_pass;
+  /* The base-2 log of the greatest alignment required by an _Alignas
+     specifier, in bytes, or -1 if no such specifiers with nonzero
+     alignment.  */
+  int align_log;
+  /* For the __intN declspec, this stores the index into the int_n_* arrays.  */
+  int int_n_idx;
+  /* For the _FloatN and _FloatNx declspec, this stores the index into
+     the floatn_nx_types array.  */
+  int floatn_nx_idx;
+  /* The storage class specifier, or csc_none if none.  */
+  enum c_storage_class storage_class;
+  /* Any type specifier keyword used such as "int", not reflecting
+     modifiers such as "short", or cts_none if none.  */
+  ENUM_BITFIELD (c_typespec_keyword) typespec_word : 8;
+  /* The kind of type specifier if one has been seen, ctsk_none
+     otherwise.  */
+  ENUM_BITFIELD (c_typespec_kind) typespec_kind : 3;
+  ENUM_BITFIELD (c_declspec_il) declspec_il : 3;
+  /* Whether any expressions in typeof specifiers may appear in
+     constant expressions.  */
+  BOOL_BITFIELD expr_const_operands : 1;
+  /* Whether any declaration specifiers have been seen at all.  */
+  BOOL_BITFIELD declspecs_seen_p : 1;
+  /* Whether something other than a storage class specifier or
+     attribute has been seen.  This is used to warn for the
+     obsolescent usage of storage class specifiers other than at the
+     start of the list.  (Doing this properly would require function
+     specifiers to be handled separately from storage class
+     specifiers.)  */
+  BOOL_BITFIELD non_sc_seen_p : 1;
+  /* Whether the type is specified by a typedef or typeof name.  */
+  BOOL_BITFIELD typedef_p : 1;
+  /* Whether the type is explicitly "signed" or specified by a typedef
+     whose type is explicitly "signed".  */
+  BOOL_BITFIELD explicit_signed_p : 1;
+  /* Whether the specifiers include a deprecated typedef.  */
+  BOOL_BITFIELD deprecated_p : 1;
+  /* Whether the type defaulted to "int" because there were no type
+     specifiers.  */
+  BOOL_BITFIELD default_int_p : 1;
+  /* Whether "long" was specified.  */
+  BOOL_BITFIELD long_p : 1;
+  /* Whether "long" was specified more than once.  */
+  BOOL_BITFIELD long_long_p : 1;
+  /* Whether "short" was specified.  */
+  BOOL_BITFIELD short_p : 1;
+  /* Whether "signed" was specified.  */
+  BOOL_BITFIELD signed_p : 1;
+  /* Whether "unsigned" was specified.  */
+  BOOL_BITFIELD unsigned_p : 1;
+  /* Whether "complex" was specified.  */
+  BOOL_BITFIELD complex_p : 1;
+  /* Whether "inline" was specified.  */
+  BOOL_BITFIELD inline_p : 1;
+  /* Whether "_Noreturn" was speciied.  */
+  BOOL_BITFIELD noreturn_p : 1;
+  /* Whether "__thread" or "_Thread_local" was specified.  */
+  BOOL_BITFIELD thread_p : 1;
+  /* Whether "__thread" rather than "_Thread_local" was specified.  */
+  BOOL_BITFIELD thread_gnu_p : 1;
+  /* Whether "const" was specified.  */
+  BOOL_BITFIELD const_p : 1;
+  /* Whether "volatile" was specified.  */
+  BOOL_BITFIELD volatile_p : 1;
+  /* Whether "restrict" was specified.  */
+  BOOL_BITFIELD restrict_p : 1;
+  /* Whether "_Atomic" was specified.  */
+  BOOL_BITFIELD atomic_p : 1;
+  /* Whether "_Sat" was specified.  */
+  BOOL_BITFIELD saturating_p : 1;
+  /* Whether any alignment specifier (even with zero alignment) was
+     specified.  */
+  BOOL_BITFIELD alignas_p : 1;
+  /* The address space that the declaration belongs to.  */
+  addr_space_t address_space;
+};
+
+/* The various kinds of declarators in C.  */
+enum c_declarator_kind {
+  /* An identifier.  */
+  cdk_id,
+  /* A function.  */
+  cdk_function,
+  /* An array.  */
+  cdk_array,
+  /* A pointer.  */
+  cdk_pointer,
+  /* Parenthesized declarator with nested attributes.  */
+  cdk_attrs
+};
+
+struct c_arg_tag {
+  /* The argument name.  */
+  tree id;
+  /* The type of the argument.  */
+  tree type;
+};
+
+
+/* Information about the parameters in a function declarator.  */
+struct c_arg_info {
+  /* A list of parameter decls.  */
+  tree parms;
+  /* A list of structure, union and enum tags defined.  */
+  vec<c_arg_tag, va_gc> *tags;
+  /* A list of argument types to go in the FUNCTION_TYPE.  */
+  tree types;
+  /* A list of non-parameter decls (notably enumeration constants)
+     defined with the parameters.  */
+  tree others;
+  /* A compound expression of VLA sizes from the parameters, or NULL.
+     In a function definition, these are used to ensure that
+     side-effects in sizes of arrays converted to pointers (such as a
+     parameter int i[n++]) take place; otherwise, they are
+     ignored.  */
+  tree pending_sizes;
+  /* True when these arguments had [*].  */
+  BOOL_BITFIELD had_vla_unspec : 1;
+};
+
+/* A declarator.  */
+struct c_declarator {
+  /* The kind of declarator.  */
+  enum c_declarator_kind kind;
+  location_t id_loc; /* Currently only set for cdk_id, cdk_array. */
+  /* Except for cdk_id, the contained declarator.  For cdk_id, NULL.  */
+  struct c_declarator *declarator;
+  union {
+    /* For identifiers, an IDENTIFIER_NODE or NULL_TREE if an abstract
+       declarator.  */
+    tree id;
+    /* For functions.  */
+    struct c_arg_info *arg_info;
+    /* For arrays.  */
+    struct {
+      /* The array dimension, or NULL for [] and [*].  */
+      tree dimen;
+      /* The qualifiers inside [].  */
+      int quals;
+      /* The attributes (currently ignored) inside [].  */
+      tree attrs;
+      /* Whether [static] was used.  */
+      BOOL_BITFIELD static_p : 1;
+      /* Whether [*] was used.  */
+      BOOL_BITFIELD vla_unspec_p : 1;
+    } array;
+    /* For pointers, the qualifiers on the pointer type.  */
+    int pointer_quals;
+    /* For attributes.  */
+    tree attrs;
+  } u;
+};
+
+/* A type name.  */
+struct c_type_name {
+  /* The declaration specifiers.  */
+  struct c_declspecs *specs;
+  /* The declarator.  */
+  struct c_declarator *declarator;
+};
+
+/* A parameter.  */
+struct c_parm {
+  /* The declaration specifiers, minus any prefix attributes.  */
+  struct c_declspecs *specs;
+  /* The attributes.  */
+  tree attrs;
+  /* The declarator.  */
+  struct c_declarator *declarator;
+  /* The location of the parameter.  */
+  location_t loc;
+};
+
+/* Used when parsing an enum.  Initialized by start_enum.  */
+struct c_enum_contents
+{
+  /* While defining an enum type, this is 1 plus the last enumerator
+     constant value.  */
+  tree enum_next_value;
+
+  /* Nonzero means that there was overflow computing enum_next_value.  */
+  int enum_overflow;
+};
+
+/* A type of reference to a static identifier in an inline
+   function.  */
+enum c_inline_static_type {
+  /* Identifier with internal linkage used in function that may be an
+     inline definition (i.e., file-scope static).  */
+  csi_internal,
+  /* Modifiable object with static storage duration defined in
+     function that may be an inline definition (i.e., local
+     static).  */
+  csi_modifiable
+};
+
+
+/* in c-parser.c */
+extern void c_parse_init (void);
+extern bool c_keyword_starts_typename (enum rid keyword);
+
+/* in c-aux-info.c */
+extern void gen_aux_info_record (tree, int, int, int);
+
+/* in c-decl.c */
+struct c_spot_bindings;
+struct c_struct_parse_info;
+extern struct obstack parser_obstack;
+extern tree c_break_label;
+extern tree c_cont_label;
+
+extern bool global_bindings_p (void);
+extern tree pushdecl (tree);
+extern void push_scope (void);
+extern tree pop_scope (void);
+extern void c_bindings_start_stmt_expr (struct c_spot_bindings *);
+extern void c_bindings_end_stmt_expr (struct c_spot_bindings *);
+
+extern void record_inline_static (location_t, tree, tree,
+				  enum c_inline_static_type);
+extern void c_init_decl_processing (void);
+extern void c_print_identifier (FILE *, tree, int);
+extern int quals_from_declspecs (const struct c_declspecs *);
+extern struct c_declarator *build_array_declarator (location_t, tree,
+    						    struct c_declspecs *,
+						    bool, bool);
+extern tree build_enumerator (location_t, location_t, struct c_enum_contents *,
+			      tree, tree);
+extern tree check_for_loop_decls (location_t, bool);
+extern void mark_forward_parm_decls (void);
+extern void declare_parm_level (void);
+extern void undeclared_variable (location_t, tree);
+extern tree lookup_label_for_goto (location_t, tree);
+extern tree declare_label (tree);
+extern tree define_label (location_t, tree);
+extern struct c_spot_bindings *c_get_switch_bindings (void);
+extern void c_release_switch_bindings (struct c_spot_bindings *);
+extern bool c_check_switch_jump_warnings (struct c_spot_bindings *,
+					  location_t, location_t);
+extern void finish_decl (tree, location_t, tree, tree, tree);
+extern tree finish_enum (tree, tree, tree);
+extern void finish_function (void);
+extern tree finish_struct (location_t, tree, tree, tree,
+			   struct c_struct_parse_info *);
+extern struct c_arg_info *build_arg_info (void);
+extern struct c_arg_info *get_parm_info (bool, tree);
+extern tree grokfield (location_t, struct c_declarator *,
+		       struct c_declspecs *, tree, tree *);
+extern tree groktypename (struct c_type_name *, tree *, bool *);
+extern tree grokparm (const struct c_parm *, tree *);
+extern tree implicitly_declare (location_t, tree);
+extern void keep_next_level (void);
+extern void pending_xref_error (void);
+extern void c_push_function_context (void);
+extern void c_pop_function_context (void);
+extern void push_parm_decl (const struct c_parm *, tree *);
+extern struct c_declarator *set_array_declarator_inner (struct c_declarator *,
+							struct c_declarator *);
+extern tree c_builtin_function (tree);
+extern tree c_builtin_function_ext_scope (tree);
+extern void shadow_tag (const struct c_declspecs *);
+extern void shadow_tag_warned (const struct c_declspecs *, int);
+extern tree start_enum (location_t, struct c_enum_contents *, tree);
+extern bool start_function (struct c_declspecs *, struct c_declarator *, tree);
+extern tree start_decl (struct c_declarator *, struct c_declspecs *, bool,
+			tree);
+extern tree start_struct (location_t, enum tree_code, tree,
+			  struct c_struct_parse_info **);
+extern void store_parm_decls (void);
+extern void store_parm_decls_from (struct c_arg_info *);
+extern void temp_store_parm_decls (tree, tree);
+extern void temp_pop_parm_decls (void);
+extern tree xref_tag (enum tree_code, tree);
+extern struct c_typespec parser_xref_tag (location_t, enum tree_code, tree);
+extern struct c_parm *build_c_parm (struct c_declspecs *, tree,
+				    struct c_declarator *, location_t);
+extern struct c_declarator *build_attrs_declarator (tree,
+						    struct c_declarator *);
+extern struct c_declarator *build_function_declarator (struct c_arg_info *,
+						       struct c_declarator *);
+extern struct c_declarator *build_id_declarator (tree);
+extern struct c_declarator *make_pointer_declarator (struct c_declspecs *,
+						     struct c_declarator *);
+extern struct c_declspecs *build_null_declspecs (void);
+extern struct c_declspecs *declspecs_add_qual (location_t,
+					       struct c_declspecs *, tree);
+extern struct c_declspecs *declspecs_add_type (location_t,
+					       struct c_declspecs *,
+					       struct c_typespec);
+extern struct c_declspecs *declspecs_add_scspec (location_t,
+						 struct c_declspecs *, tree);
+extern struct c_declspecs *declspecs_add_attrs (location_t,
+						struct c_declspecs *, tree);
+extern struct c_declspecs *declspecs_add_addrspace (location_t,
+						    struct c_declspecs *,
+						    addr_space_t);
+extern struct c_declspecs *declspecs_add_alignas (location_t,
+						  struct c_declspecs *, tree);
+extern struct c_declspecs *finish_declspecs (struct c_declspecs *);
+
+/* in c-objc-common.c */
+extern bool c_objc_common_init (void);
+extern bool c_missing_noreturn_ok_p (tree);
+extern bool c_warn_unused_global_decl (const_tree);
+extern void c_initialize_diagnostics (diagnostic_context *);
+extern bool c_vla_unspec_p (tree x, tree fn);
+extern alias_set_type c_get_alias_set (tree);
+
+/* in c-typeck.c */
+extern int in_alignof;
+extern int in_sizeof;
+extern int in_typeof;
+
+extern tree c_last_sizeof_arg;
+extern location_t c_last_sizeof_loc;
+
+extern struct c_switch *c_switch_stack;
+
+extern tree c_objc_common_truthvalue_conversion (location_t, tree);
+extern tree require_complete_type (location_t, tree);
+extern bool same_translation_unit_p (const_tree, const_tree);
+extern int comptypes (tree, tree);
+extern int comptypes_check_different_types (tree, tree, bool *);
+extern bool c_vla_type_p (const_tree);
+extern bool c_mark_addressable (tree, bool = false);
+extern void c_incomplete_type_error (location_t, const_tree, const_tree);
+extern tree c_type_promotes_to (tree);
+extern struct c_expr default_function_array_conversion (location_t,
+							struct c_expr);
+extern struct c_expr default_function_array_read_conversion (location_t,
+							     struct c_expr);
+extern struct c_expr convert_lvalue_to_rvalue (location_t, struct c_expr,
+					       bool, bool);
+extern tree decl_constant_value_1 (tree, bool);
+extern void mark_exp_read (tree);
+extern tree composite_type (tree, tree);
+extern tree build_component_ref (location_t, tree, tree, location_t);
+extern tree build_array_ref (location_t, tree, tree);
+extern tree build_external_ref (location_t, tree, bool, tree *);
+extern void pop_maybe_used (bool);
+extern struct c_expr c_expr_sizeof_expr (location_t, struct c_expr);
+extern struct c_expr c_expr_sizeof_type (location_t, struct c_type_name *);
+extern struct c_expr parser_build_unary_op (location_t, enum tree_code,
+    					    struct c_expr);
+extern struct c_expr parser_build_binary_op (location_t,
+    					     enum tree_code, struct c_expr,
+					     struct c_expr);
+extern tree build_conditional_expr (location_t, tree, bool, tree, tree,
+				    location_t, tree, tree, location_t);
+extern tree build_compound_expr (location_t, tree, tree);
+extern tree c_cast_expr (location_t, struct c_type_name *, tree);
+extern tree build_c_cast (location_t, tree, tree);
+extern void store_init_value (location_t, tree, tree, tree);
+extern void maybe_warn_string_init (location_t, tree, struct c_expr);
+extern void start_init (tree, tree, int, rich_location *);
+extern void finish_init (void);
+extern void really_start_incremental_init (tree);
+extern void finish_implicit_inits (location_t, struct obstack *);
+extern void push_init_level (location_t, int, struct obstack *);
+extern struct c_expr pop_init_level (location_t, int, struct obstack *,
+				     location_t);
+extern void set_init_index (location_t, tree, tree, struct obstack *);
+extern void set_init_label (location_t, tree, location_t, struct obstack *);
+extern void process_init_element (location_t, struct c_expr, bool,
+				  struct obstack *);
+extern tree build_compound_literal (location_t, tree, tree, bool,
+				    unsigned int);
+extern void check_compound_literal_type (location_t, struct c_type_name *);
+extern tree c_start_case (location_t, location_t, tree, bool);
+extern void c_finish_case (tree, tree);
+extern tree build_asm_expr (location_t, tree, tree, tree, tree, tree, bool,
+			    bool);
+extern tree build_asm_stmt (bool, tree);
+extern int c_types_compatible_p (tree, tree);
+extern tree c_begin_compound_stmt (bool);
+extern tree c_end_compound_stmt (location_t, tree, bool);
+extern void c_finish_if_stmt (location_t, tree, tree, tree);
+extern void c_finish_loop (location_t, tree, tree, tree, tree, tree, bool);
+extern tree c_begin_stmt_expr (void);
+extern tree c_finish_stmt_expr (location_t, tree);
+extern tree c_process_expr_stmt (location_t, tree);
+extern tree c_finish_expr_stmt (location_t, tree);
+extern tree c_finish_return (location_t, tree, tree);
+extern tree c_finish_bc_stmt (location_t, tree *, bool);
+extern tree c_finish_goto_label (location_t, tree);
+extern tree c_finish_goto_ptr (location_t, tree);
+extern tree c_expr_to_decl (tree, bool *, bool *);
+extern tree c_finish_omp_construct (location_t, enum tree_code, tree, tree);
+extern tree c_finish_oacc_data (location_t, tree, tree);
+extern tree c_finish_oacc_host_data (location_t, tree, tree);
+extern tree c_begin_omp_parallel (void);
+extern tree c_finish_omp_parallel (location_t, tree, tree);
+extern tree c_begin_omp_task (void);
+extern tree c_finish_omp_task (location_t, tree, tree);
+extern void c_finish_omp_cancel (location_t, tree);
+extern void c_finish_omp_cancellation_point (location_t, tree);
+extern tree c_finish_omp_clauses (tree, enum c_omp_region_type);
+extern tree c_build_va_arg (location_t, tree, location_t, tree);
+extern tree c_finish_transaction (location_t, tree, int);
+extern bool c_tree_equal (tree, tree);
+extern tree c_build_function_call_vec (location_t, vec<location_t>, tree,
+				       vec<tree, va_gc> *, vec<tree, va_gc> *);
+extern tree c_omp_clause_copy_ctor (tree, tree, tree);
+
+/* Set to 0 at beginning of a function definition, set to 1 if
+   a return statement that specifies a return value is seen.  */
+
+extern int current_function_returns_value;
+
+/* Set to 0 at beginning of a function definition, set to 1 if
+   a return statement with no argument is seen.  */
+
+extern int current_function_returns_null;
+
+/* Set to 0 at beginning of a function definition, set to 1 if
+   a call to a noreturn function is seen.  */
+
+extern int current_function_returns_abnormally;
+
+/* In c-decl.c */
+
+/* Tell the binding oracle what kind of binding we are looking for.  */
+
+enum c_oracle_request
+{
+  C_ORACLE_SYMBOL,
+  C_ORACLE_TAG,
+  C_ORACLE_LABEL
+};
+
+/* If this is non-NULL, then it is a "binding oracle" which can lazily
+   create bindings when needed by the C compiler.  The oracle is told
+   the name and type of the binding to create.  It can call pushdecl
+   or the like to ensure the binding is visible; or do nothing,
+   leaving the binding untouched.  c-decl.c takes note of when the
+   oracle has been called and will not call it again if it fails to
+   create a given binding.  */
+
+typedef void c_binding_oracle_function (enum c_oracle_request, tree identifier);
+
+extern c_binding_oracle_function *c_binding_oracle;
+
+extern void c_finish_incomplete_decl (tree);
+extern tree c_omp_reduction_id (enum tree_code, tree);
+extern tree c_omp_reduction_decl (tree);
+extern tree c_omp_reduction_lookup (tree, tree);
+extern tree c_check_omp_declare_reduction_r (tree *, int *, void *);
+extern void c_pushtag (location_t, tree, tree);
+extern void c_bind (location_t, tree, bool);
+extern bool tag_exists_p (enum tree_code, tree);
+
+/* In c-errors.c */
+extern bool pedwarn_c90 (location_t, int opt, const char *, ...)
+    ATTRIBUTE_GCC_DIAG(3,4);
+extern bool pedwarn_c99 (location_t, int opt, const char *, ...)
+    ATTRIBUTE_GCC_DIAG(3,4);
+extern bool pedwarn_c11 (location_t, int opt, const char *, ...)
+    ATTRIBUTE_GCC_DIAG(3,4);
+
+extern void
+set_c_expr_source_range (c_expr *expr,
+			 location_t start, location_t finish);
+
+extern void
+set_c_expr_source_range (c_expr *expr,
+			 source_range src_range);
+
+/* In c-fold.c */
+extern vec<tree> incomplete_record_decls;
+
+#if CHECKING_P
+namespace selftest {
+  extern void run_c_tests (void);
+} // namespace selftest
+#endif /* #if CHECKING_P */
+
+
+#endif /* ! GCC_C_TREE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/calls.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/calls.h
new file mode 100644
index 0000000..128bb51
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/calls.h
@@ -0,0 +1,46 @@
+/* Declarations and data types for RTL call insn generation.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_CALLS_H
+#define GCC_CALLS_H
+
+extern int flags_from_decl_or_type (const_tree);
+extern int call_expr_flags (const_tree);
+extern int setjmp_call_p (const_tree);
+extern bool gimple_maybe_alloca_call_p (const gimple *);
+extern bool gimple_alloca_call_p (const gimple *);
+extern bool alloca_call_p (const_tree);
+extern bool must_pass_in_stack_var_size (machine_mode, const_tree);
+extern bool must_pass_in_stack_var_size_or_pad (machine_mode, const_tree);
+extern rtx prepare_call_address (tree, rtx, rtx, rtx *, int, int);
+extern bool shift_return_value (machine_mode, bool, rtx);
+extern rtx expand_call (tree, rtx, int);
+extern void fixup_tail_calls (void);
+
+extern bool pass_by_reference (CUMULATIVE_ARGS *, machine_mode,
+			       tree, bool);
+extern bool reference_callee_copied (CUMULATIVE_ARGS *, machine_mode,
+				     tree, bool);
+extern void maybe_warn_alloc_args_overflow (tree, tree, tree[2], int[2]);
+extern tree get_attr_nonstring_decl (tree, tree * = NULL);
+extern void maybe_warn_nonstring_arg (tree, tree);
+extern bool get_size_range (tree, tree[2], bool = false);
+extern rtx rtx_for_static_chain (const_tree, bool);
+
+#endif // GCC_CALLS_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ccmp.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ccmp.h
new file mode 100644
index 0000000..cd38db6
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ccmp.h
@@ -0,0 +1,25 @@
+/* Conditional comapre related functions.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_CCMP_H
+#define GCC_CCMP_H
+
+extern rtx expand_ccmp_expr (gimple *, machine_mode);
+
+#endif  /* GCC_CCMP_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfg-flags.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfg-flags.def
new file mode 100644
index 0000000..b5712d5
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfg-flags.def
@@ -0,0 +1,191 @@
+/* Flags on basic blocks and edges.
+   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* This file defines flags that may appear on basic blocks or on
+   edges.  Source files define DEF_BASIC_BLOCK_FLAG or DEF_EDGE_FLAG
+   appropriately before including this file.  */
+
+#if !defined(DEF_BASIC_BLOCK_FLAG) && !defined(DEF_EDGE_FLAG)
+#error "You must define DEF_BASIC_BLOCK_FLAG or DEF_EDGE_FLAG"
+#endif
+
+#ifdef DEF_BASIC_BLOCK_FLAG
+
+/* Masks for basic_block.flags.
+
+   The format of this file is: DEF_BASIC_BLOCK_FLAG(NAME, IDX).
+   NAME is the name of the basic block flag.  A flag BB_#NAME will be
+   created and the name is used in dump_edge_info.
+   IDX is a sequence number that is used to determine the value
+   of the flag, which is 1 << IDX).
+
+   BB_HOT_PARTITION and BB_COLD_PARTITION should be preserved throughout
+   the compilation, so they are never cleared.
+
+   All other flags may be cleared by clear_bb_flags().  It is generally
+   a bad idea to rely on any flags being up-to-date.  */
+
+/* Only set on blocks that have just been created by create_bb.  */
+DEF_BASIC_BLOCK_FLAG(NEW, 0)
+
+/* Set by find_unreachable_blocks.  Do not rely on this being set in any
+   pass.  */
+DEF_BASIC_BLOCK_FLAG(REACHABLE, 1)
+
+/* Set for blocks in an irreducible loop by loop analysis.  */
+DEF_BASIC_BLOCK_FLAG(IRREDUCIBLE_LOOP, 2)
+
+/* Set on blocks that may actually not be single-entry single-exit block.  */
+DEF_BASIC_BLOCK_FLAG(SUPERBLOCK, 3)
+
+/* Set on basic blocks that the scheduler should not touch.  This is used
+   by SMS to prevent other schedulers from messing with the loop schedule.  */
+DEF_BASIC_BLOCK_FLAG(DISABLE_SCHEDULE, 4)
+
+/* Set on blocks that should be put in a hot section.  */
+DEF_BASIC_BLOCK_FLAG(HOT_PARTITION, 5)
+
+/* Set on blocks that should be put in a cold section.  */
+DEF_BASIC_BLOCK_FLAG(COLD_PARTITION, 6)
+
+/* Set on block that was duplicated.  */
+DEF_BASIC_BLOCK_FLAG(DUPLICATED, 7)
+
+/* Set if the label at the top of this block is the target of a non-local goto.  */
+DEF_BASIC_BLOCK_FLAG(NON_LOCAL_GOTO_TARGET, 8)
+
+/* Set on blocks that are in RTL format.  */
+DEF_BASIC_BLOCK_FLAG(RTL, 9) 
+
+/* Set on blocks that are forwarder blocks.
+   Only used in cfgcleanup.c.  */
+DEF_BASIC_BLOCK_FLAG(FORWARDER_BLOCK, 10)
+
+/* Set on blocks that cannot be threaded through.
+   Only used for jump threading.  */
+DEF_BASIC_BLOCK_FLAG(NONTHREADABLE_BLOCK, 11)
+
+/* Set on blocks that were modified in some way.  This bit is set in
+   df_set_bb_dirty, but not cleared by df_analyze, so it can be used
+   to test whether a block has been modified prior to a df_analyze call.  */
+DEF_BASIC_BLOCK_FLAG(MODIFIED, 12)
+
+/* A general visited flag for passes to use.  */
+DEF_BASIC_BLOCK_FLAG(VISITED, 13)
+
+/* Set on blocks that are in a transaction.  This is calculated on
+   demand, and is available after calling compute_transaction_bits().  */
+DEF_BASIC_BLOCK_FLAG(IN_TRANSACTION, 14)
+
+#endif
+
+#ifdef DEF_EDGE_FLAG
+
+/* Masks for edge.flags.
+
+   The format of this file is: DEF_EDGE_FLAG(NAME, IDX, STRING).
+   NAME is the name of the edge flag.  A flag EDGE_#NAME will be
+   created and the name is used in dump_edge_info.
+   IDX is a sequence number that is used to determine the value
+   of the flag, which is 1 << IDX).  */
+
+/* 'Straight line' flow.  In GIMPLE and in cfglayout mode, all normal
+   edges are fallthru edges.  In cfgrtl mode, this flag really means
+   that control flow falls through to the next basic block in the line.  */
+DEF_EDGE_FLAG(FALLTHRU, 0)
+
+/* Strange flow, like a computed jump or exception handling.  Usually
+   this means that the edge cannot be split.  */
+DEF_EDGE_FLAG(ABNORMAL, 1)
+
+/* Edge out of a basic block that ends with a CALL_INSN with abnormal
+   exit, like an exception or a non-local goto.
+   ABNORMAL_CALL edges also have ABNORMAL set.
+   This flag is only used for the RTL CFG.  */
+DEF_EDGE_FLAG(ABNORMAL_CALL, 2)
+
+/* Exception edge.  Exception handling edges represent possible control
+   transfers from a trapping instruction to an exception handler.
+   EH edges also have ABNORMAL set for the RTL CFG.  */
+DEF_EDGE_FLAG(EH, 3)
+
+/* Never merge blocks via this edge.  This is used for exception handling,
+   to prevent merging away edges to the post-landing-pad basic block.
+   This flag is only used for the RTL CFG.  */
+DEF_EDGE_FLAG(PRESERVE, 4)
+
+/* Not a real edge.  This is used to connect parts of the CFG that do
+   not halt, such as infinite loops and noreturn functions, to the
+   EXIT_BLOCK, so that traversing of the reverse CFG is possible.  */
+DEF_EDGE_FLAG(FAKE, 5)
+
+/* A back edge, marked in a depth-first search of the CFG.  Back edges
+   are hints that this edge may be part of a loop in the CFG.  */
+DEF_EDGE_FLAG(DFS_BACK, 6)
+
+/* Edge in a part of the CFG that is an irreducible loop.  */
+DEF_EDGE_FLAG(IRREDUCIBLE_LOOP, 7)
+
+/* Edge taken when controlling predicate is nonzero.
+   This is only used for the GIMPLE CFG.  */
+DEF_EDGE_FLAG(TRUE_VALUE, 8)
+
+/* Edge taken when controlling predicate is zero.
+   This is only used for the GIMPLE CFG.  */
+DEF_EDGE_FLAG(FALSE_VALUE, 9)
+
+/* Edge is executable.  This is only used in GIMPLE SSA-CCP and VRP.
+   This is only used for the GIMPLE CFG.  */
+DEF_EDGE_FLAG(EXECUTABLE, 10)
+
+/* Edge crosses between hot and cold sections, when we do partitioning.
+   This flag is only used for the RTL CFG.  */
+DEF_EDGE_FLAG(CROSSING, 11)
+
+/* Edge from a sibcall CALL_INSN to exit.
+   SIBCALL edges also have ABNORMAL set.
+   This flag is only used for the RTL CFG.  */
+DEF_EDGE_FLAG(SIBCALL, 12)
+
+/* Candidate for straight line flow.  Only used in bb-reorder.c.
+   This flag is only used for the RTL CFG.  */
+DEF_EDGE_FLAG(CAN_FALLTHRU, 13)
+
+/* Exit of a loop.  This is only used in ifcvt.c.
+   This flag is only used for the RTL CFG.  */
+DEF_EDGE_FLAG(LOOP_EXIT, 14)
+
+/* Uninstrumented edge out of a GIMPLE_TRANSACTION statement.  */
+DEF_EDGE_FLAG(TM_UNINSTRUMENTED, 15)
+
+/* Abort (over) edge out of a GIMPLE_TRANSACTION statement.  */
+DEF_EDGE_FLAG(TM_ABORT, 16)
+
+/* An edge we should ignore.  It should be entirely local to
+   passes.  ie, it is never set on any edge upon the completion
+   of any pass.  */
+DEF_EDGE_FLAG(IGNORE, 17)
+
+#endif
+
+/*
+Local variables:
+mode:c
+End:
+*/
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfg.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfg.h
new file mode 100644
index 0000000..b6f95bd
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfg.h
@@ -0,0 +1,184 @@
+/* Control flow graph manipulation code header file.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_CFG_H
+#define GCC_CFG_H
+
+#include "dominance.h"
+
+/* What sort of profiling information we have.  */
+enum profile_status_d
+{
+  PROFILE_ABSENT,
+  PROFILE_GUESSED,
+  PROFILE_READ,
+  PROFILE_LAST	/* Last value, used by profile streaming.  */
+};
+
+/* A structure to group all the per-function control flow graph data.
+   The x_* prefixing is necessary because otherwise references to the
+   fields of this struct are interpreted as the defines for backward
+   source compatibility following the definition of this struct.  */
+struct GTY(()) control_flow_graph {
+  /* Block pointers for the exit and entry of a function.
+     These are always the head and tail of the basic block list.  */
+  basic_block x_entry_block_ptr;
+  basic_block x_exit_block_ptr;
+
+  /* Index by basic block number, get basic block struct info.  */
+  vec<basic_block, va_gc> *x_basic_block_info;
+
+  /* Number of basic blocks in this flow graph.  */
+  int x_n_basic_blocks;
+
+  /* Number of edges in this flow graph.  */
+  int x_n_edges;
+
+  /* The first free basic block number.  */
+  int x_last_basic_block;
+
+  /* UIDs for LABEL_DECLs.  */
+  int last_label_uid;
+
+  /* Mapping of labels to their associated blocks.  At present
+     only used for the gimple CFG.  */
+  vec<basic_block, va_gc> *x_label_to_block_map;
+
+  enum profile_status_d x_profile_status;
+
+  /* Whether the dominators and the postdominators are available.  */
+  enum dom_state x_dom_computed[2];
+
+  /* Number of basic blocks in the dominance tree.  */
+  unsigned x_n_bbs_in_dom_tree[2];
+
+  /* Maximal number of entities in the single jumptable.  Used to estimate
+     final flowgraph size.  */
+  int max_jumptable_ents;
+
+  /* Maximal count of BB in function.  */
+  profile_count count_max;
+
+  /* Dynamically allocated edge/bb flags.  */
+  int edge_flags_allocated;
+  int bb_flags_allocated;
+};
+
+
+extern void init_flow (function *);
+extern void clear_edges (function *);
+extern basic_block alloc_block (void);
+extern void link_block (basic_block, basic_block);
+extern void unlink_block (basic_block);
+extern void compact_blocks (void);
+extern void expunge_block (basic_block);
+extern edge unchecked_make_edge (basic_block, basic_block, int);
+extern edge cached_make_edge (sbitmap, basic_block, basic_block, int);
+extern edge make_edge (basic_block, basic_block, int);
+extern edge make_single_succ_edge (basic_block, basic_block, int);
+extern void remove_edge_raw (edge);
+extern void redirect_edge_succ (edge, basic_block);
+extern void redirect_edge_pred (edge, basic_block);
+extern void clear_bb_flags (void);
+extern void dump_edge_info (FILE *, edge, dump_flags_t, int);
+extern void debug (edge_def &ref);
+extern void debug (edge_def *ptr);
+extern void alloc_aux_for_blocks (int);
+extern void clear_aux_for_blocks (void);
+extern void free_aux_for_blocks (void);
+extern void alloc_aux_for_edge (edge, int);
+extern void alloc_aux_for_edges (int);
+extern void clear_aux_for_edges (void);
+extern void free_aux_for_edges (void);
+extern void debug_bb (basic_block);
+extern basic_block debug_bb_n (int);
+extern void dump_bb_info (FILE *, basic_block, int, dump_flags_t, bool, bool);
+extern void brief_dump_cfg (FILE *, dump_flags_t);
+extern void update_bb_profile_for_threading (basic_block, profile_count, edge);
+extern void scale_bbs_frequencies_profile_count (basic_block *, int,
+					     profile_count, profile_count);
+extern void scale_bbs_frequencies (basic_block *, int, profile_probability);
+extern void initialize_original_copy_tables (void);
+extern void reset_original_copy_tables (void);
+extern void free_original_copy_tables (void);
+extern bool original_copy_tables_initialized_p (void);
+extern void set_bb_original (basic_block, basic_block);
+extern basic_block get_bb_original (basic_block);
+extern void set_bb_copy (basic_block, basic_block);
+extern basic_block get_bb_copy (basic_block);
+void set_loop_copy (struct loop *, struct loop *);
+struct loop *get_loop_copy (struct loop *);
+
+/* Generic RAII class to allocate a bit from storage of integer type T.
+   The allocated bit is accessible as mask with the single bit set
+   via the conversion operator to T.  */
+
+template <class T>
+class auto_flag
+{
+public:
+  /* static assert T is integer type of max HOST_WIDE_INT precision.  */
+  auto_flag (T *sptr)
+    {
+      m_sptr = sptr;
+      int free_bit = ffs_hwi (~*sptr);
+      /* If there are no unset bits... */
+      if (free_bit == 0)
+	gcc_unreachable ();
+      m_flag = HOST_WIDE_INT_1U << (free_bit - 1);
+      /* ...or if T is signed and thus the complement is sign-extended,
+         check if we ran out of bits.  We could spare us this bit
+	 if we could use C++11 std::make_unsigned<T>::type to pass
+	 ~*sptr to ffs_hwi.  */
+      if (m_flag == 0)
+	gcc_unreachable ();
+      gcc_checking_assert ((*sptr & m_flag) == 0);
+      *sptr |= m_flag;
+    }
+  ~auto_flag ()
+    {
+      gcc_checking_assert ((*m_sptr & m_flag) == m_flag);
+      *m_sptr &= ~m_flag;
+    }
+  operator T () const { return m_flag; }
+private:
+  T *m_sptr;
+  T m_flag;
+};
+
+/* RAII class to allocate an edge flag for temporary use.  You have
+   to clear the flag from all edges when you are finished using it.  */
+
+class auto_edge_flag : public auto_flag<int>
+{
+public:
+  auto_edge_flag (function *fun)
+    : auto_flag<int> (&fun->cfg->edge_flags_allocated) {}
+};
+
+/* RAII class to allocate a bb flag for temporary use.  You have
+   to clear the flag from all edges when you are finished using it.  */
+class auto_bb_flag : public auto_flag<int>
+{
+public:
+  auto_bb_flag (function *fun)
+    : auto_flag<int> (&fun->cfg->bb_flags_allocated) {}
+};
+
+#endif /* GCC_CFG_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfganal.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfganal.h
new file mode 100644
index 0000000..ba889e2
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfganal.h
@@ -0,0 +1,86 @@
+/* Control flow graph analysis header file.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+#ifndef GCC_CFGANAL_H
+#define GCC_CFGANAL_H
+
+/* This structure maintains an edge list vector.  */
+/* FIXME: Make this a vec<edge>.  */
+struct edge_list
+{
+  int num_edges;
+  edge *index_to_edge;
+};
+
+
+/* Class to compute and manage control dependences on an edge-list.  */
+class control_dependences
+{
+public:
+  control_dependences ();
+  ~control_dependences ();
+  bitmap get_edges_dependent_on (int);
+  basic_block get_edge_src (int);
+  basic_block get_edge_dest (int);
+
+private:
+  void set_control_dependence_map_bit (basic_block, int);
+  void clear_control_dependence_bitmap (basic_block);
+  void find_control_dependence (int);
+  vec<bitmap> control_dependence_map;
+  vec<std::pair<int, int> > m_el;
+};
+
+extern bool mark_dfs_back_edges (void);
+extern void find_unreachable_blocks (void);
+extern void verify_no_unreachable_blocks (void);
+struct edge_list * create_edge_list (void);
+void free_edge_list (struct edge_list *);
+void print_edge_list (FILE *, struct edge_list *);
+void verify_edge_list (FILE *, struct edge_list *);
+edge find_edge (basic_block, basic_block);
+int find_edge_index (struct edge_list *, basic_block, basic_block);
+extern void remove_fake_edges (void);
+extern void remove_fake_exit_edges (void);
+extern void add_noreturn_fake_exit_edges (void);
+extern void connect_infinite_loops_to_exit (void);
+extern int post_order_compute (int *, bool, bool);
+extern basic_block dfs_find_deadend (basic_block);
+extern void inverted_post_order_compute (vec<int> *postorder, sbitmap *start_points = 0);
+extern int pre_and_rev_post_order_compute_fn (struct function *,
+					      int *, int *, bool);
+extern int pre_and_rev_post_order_compute (int *, int *, bool);
+extern int rev_post_order_and_mark_dfs_back_seme (struct function *, edge,
+						  bitmap, bool, int *);
+extern int dfs_enumerate_from (basic_block, int,
+			       bool (*)(const_basic_block, const void *),
+			       basic_block *, int, const void *);
+extern void compute_dominance_frontiers (struct bitmap_head *);
+extern bitmap compute_idf (bitmap, struct bitmap_head *);
+extern void bitmap_intersection_of_succs (sbitmap, sbitmap *, basic_block);
+extern void bitmap_intersection_of_preds (sbitmap, sbitmap *, basic_block);
+extern void bitmap_union_of_succs (sbitmap, sbitmap *, basic_block);
+extern void bitmap_union_of_preds (sbitmap, sbitmap *, basic_block);
+extern basic_block * single_pred_before_succ_order (void);
+extern edge single_incoming_edge_ignoring_loop_edges (basic_block, bool);
+extern edge single_pred_edge_ignoring_loop_edges (basic_block, bool);
+
+
+#endif /* GCC_CFGANAL_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgbuild.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgbuild.h
new file mode 100644
index 0000000..76399b4
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgbuild.h
@@ -0,0 +1,28 @@
+/* Control flow graph building header file.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_CFGBUILD_H
+#define GCC_CFGBUILD_H
+
+extern bool inside_basic_block_p (const rtx_insn *);
+extern bool control_flow_insn_p (const rtx_insn *);
+extern void rtl_make_eh_edge (sbitmap, basic_block, rtx);
+extern void find_many_sub_basic_blocks (sbitmap);
+
+#endif /* GCC_CFGBUILD_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgcleanup.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgcleanup.h
new file mode 100644
index 0000000..923ba89
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgcleanup.h
@@ -0,0 +1,34 @@
+/* Control flow optimization header file.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+#ifndef GCC_CFGCLEANUP_H
+#define GCC_CFGCLEANUP_H
+
+enum replace_direction { dir_none, dir_forward, dir_backward, dir_both };
+
+extern int flow_find_cross_jump (basic_block, basic_block, rtx_insn **,
+				 rtx_insn **, enum replace_direction*);
+extern int flow_find_head_matching_sequence (basic_block, basic_block,
+					     rtx_insn **, rtx_insn **, int);
+extern bool delete_unreachable_blocks (void);
+extern void delete_dead_jumptables (void);
+extern bool cleanup_cfg (int);
+
+#endif /* GCC_CFGCLEANUP_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgexpand.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgexpand.h
new file mode 100644
index 0000000..7dfe3bb
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgexpand.h
@@ -0,0 +1,28 @@
+/* Header file for lowering trees to RTL.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_CFGEXPAND_H
+#define GCC_CFGEXPAND_H
+
+extern tree gimple_assign_rhs_to_tree (gimple *);
+extern HOST_WIDE_INT estimated_stack_frame_size (struct cgraph_node *);
+extern void set_parm_rtl (tree, rtx);
+
+
+#endif /* GCC_CFGEXPAND_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfghooks.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfghooks.h
new file mode 100644
index 0000000..e9385c9
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfghooks.h
@@ -0,0 +1,287 @@
+/* Hooks for cfg representation specific functions.
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Contributed by Sebastian Pop <s.pop@laposte.net>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_CFGHOOKS_H
+#define GCC_CFGHOOKS_H
+
+#include "predict.h"
+
+/* Structure to gather statistic about profile consistency, per pass.
+   An array of this structure, indexed by pass static number, is allocated
+   in passes.c.  The structure is defined here so that different CFG modes
+   can do their book-keeping via CFG hooks.
+
+   For every field[2], field[0] is the count before the pass runs, and
+   field[1] is the post-pass count.  This allows us to monitor the effect
+   of each individual pass on the profile consistency.
+   
+   This structure is not supposed to be used by anything other than passes.c
+   and one CFG hook per CFG mode.  */
+struct profile_record
+{
+  /* The number of basic blocks where sum(freq) of the block's predecessors
+     doesn't match reasonably well with the incoming frequency.  */
+  int num_mismatched_freq_in;
+  /* Likewise for a basic block's successors.  */
+  int num_mismatched_freq_out;
+  /* The number of basic blocks where sum(count) of the block's predecessors
+     doesn't match reasonably well with the incoming frequency.  */
+  int num_mismatched_count_in;
+  /* Likewise for a basic block's successors.  */
+  int num_mismatched_count_out;
+  /* A weighted cost of the run-time of the function body.  */
+  gcov_type_unsigned time;
+  /* A weighted cost of the size of the function body.  */
+  int size;
+  /* True iff this pass actually was run.  */
+  bool run;
+};
+
+typedef int_hash <unsigned short, 0> dependence_hash;
+
+/* Optional data for duplicate_block.   */
+
+struct copy_bb_data
+{
+  copy_bb_data() : dependence_map (NULL) {}
+  ~copy_bb_data () { delete dependence_map; }
+
+  /* A map from the copied BBs dependence info cliques to
+     equivalents in the BBs duplicated to.  */
+  hash_map<dependence_hash, unsigned short> *dependence_map;
+};
+
+struct cfg_hooks
+{
+  /* Name of the corresponding ir.  */
+  const char *name;
+
+  /* Debugging.  */
+  int (*verify_flow_info) (void);
+  void (*dump_bb) (FILE *, basic_block, int, dump_flags_t);
+  void (*dump_bb_for_graph) (pretty_printer *, basic_block);
+
+  /* Basic CFG manipulation.  */
+
+  /* Return new basic block.  */
+  basic_block (*create_basic_block) (void *head, void *end, basic_block after);
+
+  /* Redirect edge E to the given basic block B and update underlying program
+     representation.  Returns edge representing redirected branch (that may not
+     be equivalent to E in the case of duplicate edges being removed) or NULL
+     if edge is not easily redirectable for whatever reason.  */
+  edge (*redirect_edge_and_branch) (edge e, basic_block b);
+
+  /* Same as the above but allows redirecting of fallthru edges.  In that case
+     newly created forwarder basic block is returned.  The edge must
+     not be abnormal.  */
+  basic_block (*redirect_edge_and_branch_force) (edge, basic_block);
+
+  /* Returns true if it is possible to remove the edge by redirecting it
+     to the destination of the other edge going from its source.  */
+  bool (*can_remove_branch_p) (const_edge);
+
+  /* Remove statements corresponding to a given basic block.  */
+  void (*delete_basic_block) (basic_block);
+
+  /* Creates a new basic block just after basic block B by splitting
+     everything after specified instruction I.  */
+  basic_block (*split_block) (basic_block b, void * i);
+
+  /* Move block B immediately after block A.  */
+  bool (*move_block_after) (basic_block b, basic_block a);
+
+  /* Return true when blocks A and B can be merged into single basic block.  */
+  bool (*can_merge_blocks_p) (basic_block a, basic_block b);
+
+  /* Merge blocks A and B.  */
+  void (*merge_blocks) (basic_block a, basic_block b);
+
+  /* Predict edge E using PREDICTOR to given PROBABILITY.  */
+  void (*predict_edge) (edge e, enum br_predictor predictor, int probability);
+
+  /* Return true if the one of outgoing edges is already predicted by
+     PREDICTOR.  */
+  bool (*predicted_by_p) (const_basic_block bb, enum br_predictor predictor);
+
+  /* Return true when block A can be duplicated.  */
+  bool (*can_duplicate_block_p) (const_basic_block a);
+
+  /* Duplicate block A.  */
+  basic_block (*duplicate_block) (basic_block a, copy_bb_data *);
+
+  /* Higher level functions representable by primitive operations above if
+     we didn't have some oddities in RTL and Tree representations.  */
+  basic_block (*split_edge) (edge);
+  void (*make_forwarder_block) (edge);
+
+  /* Try to make the edge fallthru.  */
+  void (*tidy_fallthru_edge) (edge);
+
+  /* Make the edge non-fallthru.  */
+  basic_block (*force_nonfallthru) (edge);
+
+  /* Say whether a block ends with a call, possibly followed by some
+     other code that must stay with the call.  */
+  bool (*block_ends_with_call_p) (basic_block);
+
+  /* Say whether a block ends with a conditional branch.  Switches
+     and unconditional branches do not qualify.  */
+  bool (*block_ends_with_condjump_p) (const_basic_block);
+
+  /* Add fake edges to the function exit for any non constant and non noreturn
+     calls, volatile inline assembly in the bitmap of blocks specified by
+     BLOCKS or to the whole CFG if BLOCKS is zero.  Return the number of blocks
+     that were split.
+
+     The goal is to expose cases in which entering a basic block does not imply
+     that all subsequent instructions must be executed.  */
+  int (*flow_call_edges_add) (sbitmap);
+
+  /* This function is called immediately after edge E is added to the
+     edge vector E->dest->preds.  */
+  void (*execute_on_growing_pred) (edge);
+
+  /* This function is called immediately before edge E is removed from
+     the edge vector E->dest->preds.  */
+  void (*execute_on_shrinking_pred) (edge);
+
+  /* A hook for duplicating loop in CFG, currently this is used
+     in loop versioning.  */
+  bool (*cfg_hook_duplicate_loop_to_header_edge) (struct loop *, edge,
+						  unsigned, sbitmap,
+						  edge, vec<edge> *,
+						  int);
+
+  /* Add condition to new basic block and update CFG used in loop
+     versioning.  */
+  void (*lv_add_condition_to_bb) (basic_block, basic_block, basic_block,
+				  void *);
+  /* Update the PHI nodes in case of loop versioning.  */
+  void (*lv_adjust_loop_header_phi) (basic_block, basic_block,
+				     basic_block, edge);
+
+  /* Given a condition BB extract the true/false taken/not taken edges
+     (depending if we are on tree's or RTL). */
+  void (*extract_cond_bb_edges) (basic_block, edge *, edge *);
+
+
+  /* Add PHI arguments queued in PENDINT_STMT list on edge E to edge
+     E->dest (only in tree-ssa loop versioning.  */
+  void (*flush_pending_stmts) (edge);
+  
+  /* True if a block contains no executable instructions.  */
+  bool (*empty_block_p) (basic_block);
+
+  /* Split a basic block if it ends with a conditional branch and if
+     the other part of the block is not empty.  */
+  basic_block (*split_block_before_cond_jump) (basic_block);
+
+  /* Do book-keeping of a basic block for the profile consistency checker.  */
+  void (*account_profile_record) (basic_block, struct profile_record *);
+};
+
+extern void verify_flow_info (void);
+
+/* Check control flow invariants, if internal consistency checks are
+   enabled.  */
+
+static inline void
+checking_verify_flow_info (void)
+{
+  /* TODO: Add a separate option for -fchecking=cfg.  */
+  if (flag_checking)
+    verify_flow_info ();
+}
+
+extern void dump_bb (FILE *, basic_block, int, dump_flags_t);
+extern void dump_bb_for_graph (pretty_printer *, basic_block);
+extern void dump_flow_info (FILE *, dump_flags_t);
+
+extern edge redirect_edge_and_branch (edge, basic_block);
+extern basic_block redirect_edge_and_branch_force (edge, basic_block);
+extern edge redirect_edge_succ_nodup (edge, basic_block);
+extern bool can_remove_branch_p (const_edge);
+extern void remove_branch (edge);
+extern void remove_edge (edge);
+extern edge split_block (basic_block, rtx);
+extern edge split_block (basic_block, gimple *);
+extern edge split_block_after_labels (basic_block);
+extern bool move_block_after (basic_block, basic_block);
+extern void delete_basic_block (basic_block);
+extern basic_block split_edge (edge);
+extern basic_block create_basic_block (rtx, rtx, basic_block);
+extern basic_block create_basic_block (gimple_seq, basic_block);
+extern basic_block create_empty_bb (basic_block);
+extern bool can_merge_blocks_p (basic_block, basic_block);
+extern void merge_blocks (basic_block, basic_block);
+extern edge make_forwarder_block (basic_block, bool (*)(edge),
+				  void (*) (basic_block));
+extern basic_block force_nonfallthru (edge);
+extern void tidy_fallthru_edge (edge);
+extern void tidy_fallthru_edges (void);
+extern void predict_edge (edge e, enum br_predictor predictor, int probability);
+extern bool predicted_by_p (const_basic_block bb, enum br_predictor predictor);
+extern bool can_duplicate_block_p (const_basic_block);
+extern basic_block duplicate_block (basic_block, edge, basic_block,
+				    copy_bb_data * = NULL);
+extern bool block_ends_with_call_p (basic_block bb);
+extern bool empty_block_p (basic_block);
+extern basic_block split_block_before_cond_jump (basic_block);
+extern bool block_ends_with_condjump_p (const_basic_block bb);
+extern int flow_call_edges_add (sbitmap);
+extern void execute_on_growing_pred (edge);
+extern void execute_on_shrinking_pred (edge);
+extern bool cfg_hook_duplicate_loop_to_header_edge (struct loop *loop, edge,
+						    unsigned int ndupl,
+						    sbitmap wont_exit,
+						    edge orig,
+						    vec<edge> *to_remove,
+						    int flags);
+
+extern void lv_flush_pending_stmts (edge);
+extern void extract_cond_bb_edges (basic_block, edge *, edge*);
+extern void lv_adjust_loop_header_phi (basic_block, basic_block, basic_block,
+				       edge);
+extern void lv_add_condition_to_bb (basic_block, basic_block, basic_block,
+				    void *);
+
+extern bool can_copy_bbs_p (basic_block *, unsigned);
+extern void copy_bbs (basic_block *, unsigned, basic_block *,
+		      edge *, unsigned, edge *, struct loop *,
+		      basic_block, bool);
+
+void profile_record_check_consistency (profile_record *);
+void profile_record_account_profile (profile_record *);
+
+/* Hooks containers.  */
+extern struct cfg_hooks gimple_cfg_hooks;
+extern struct cfg_hooks rtl_cfg_hooks;
+extern struct cfg_hooks cfg_layout_rtl_cfg_hooks;
+
+/* Declarations.  */
+extern enum ir_type current_ir_type (void);
+extern void rtl_register_cfg_hooks (void);
+extern void cfg_layout_rtl_register_cfg_hooks (void);
+extern void gimple_register_cfg_hooks (void);
+extern struct cfg_hooks get_cfg_hooks (void);
+extern void set_cfg_hooks (struct cfg_hooks);
+
+#endif /* GCC_CFGHOOKS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgloop.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgloop.h
new file mode 100644
index 0000000..e82cd7a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgloop.h
@@ -0,0 +1,877 @@
+/* Natural loop functions
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_CFGLOOP_H
+#define GCC_CFGLOOP_H
+
+#include "cfgloopmanip.h"
+
+/* Structure to hold decision about unrolling/peeling.  */
+enum lpt_dec
+{
+  LPT_NONE,
+  LPT_UNROLL_CONSTANT,
+  LPT_UNROLL_RUNTIME,
+  LPT_UNROLL_STUPID
+};
+
+struct GTY (()) lpt_decision {
+  enum lpt_dec decision;
+  unsigned times;
+};
+
+/* The type of extend applied to an IV.  */
+enum iv_extend_code
+{
+  IV_SIGN_EXTEND,
+  IV_ZERO_EXTEND,
+  IV_UNKNOWN_EXTEND
+};
+
+/* The structure describing a bound on number of iterations of a loop.  */
+
+struct GTY ((chain_next ("%h.next"))) nb_iter_bound {
+  /* The statement STMT is executed at most ...  */
+  gimple *stmt;
+
+  /* ... BOUND + 1 times (BOUND must be an unsigned constant).
+     The + 1 is added for the following reasons:
+
+     a) 0 would otherwise be unused, while we would need to care more about
+        overflows (as MAX + 1 is sometimes produced as the estimate on number
+	of executions of STMT).
+     b) it is consistent with the result of number_of_iterations_exit.  */
+  widest_int bound;
+
+  /* True if the statement will cause the loop to be leaved the (at most)
+     BOUND + 1-st time it is executed, that is, all the statements after it
+     are executed at most BOUND times.  */
+  bool is_exit;
+
+  /* The next bound in the list.  */
+  struct nb_iter_bound *next;
+};
+
+/* Description of the loop exit.  */
+
+struct GTY ((for_user)) loop_exit {
+  /* The exit edge.  */
+  edge e;
+
+  /* Previous and next exit in the list of the exits of the loop.  */
+  struct loop_exit *prev;
+  struct loop_exit *next;
+
+  /* Next element in the list of loops from that E exits.  */
+  struct loop_exit *next_e;
+};
+
+struct loop_exit_hasher : ggc_ptr_hash<loop_exit>
+{
+  typedef edge compare_type;
+
+  static hashval_t hash (loop_exit *);
+  static bool equal (loop_exit *, edge);
+  static void remove (loop_exit *);
+};
+
+typedef struct loop *loop_p;
+
+/* An integer estimation of the number of iterations.  Estimate_state
+   describes what is the state of the estimation.  */
+enum loop_estimation
+{
+  /* Estimate was not computed yet.  */
+  EST_NOT_COMPUTED,
+  /* Estimate is ready.  */
+  EST_AVAILABLE,
+  EST_LAST
+};
+
+/* The structure describing non-overflow control induction variable for
+   loop's exit edge.  */
+struct GTY ((chain_next ("%h.next"))) control_iv {
+  tree base;
+  tree step;
+  struct control_iv *next;
+};
+
+/* Structure to hold information for each natural loop.  */
+struct GTY ((chain_next ("%h.next"))) loop {
+  /* Index into loops array.  Note indices will never be reused after loop
+     is destroyed.  */
+  int num;
+
+  /* Number of loop insns.  */
+  unsigned ninsns;
+
+  /* Basic block of loop header.  */
+  basic_block header;
+
+  /* Basic block of loop latch.  */
+  basic_block latch;
+
+  /* For loop unrolling/peeling decision.  */
+  struct lpt_decision lpt_decision;
+
+  /* Average number of executed insns per iteration.  */
+  unsigned av_ninsns;
+
+  /* Number of blocks contained within the loop.  */
+  unsigned num_nodes;
+
+  /* Superloops of the loop, starting with the outermost loop.  */
+  vec<loop_p, va_gc> *superloops;
+
+  /* The first inner (child) loop or NULL if innermost loop.  */
+  struct loop *inner;
+
+  /* Link to the next (sibling) loop.  */
+  struct loop *next;
+
+  /* Auxiliary info specific to a pass.  */
+  PTR GTY ((skip (""))) aux;
+
+  /* The number of times the latch of the loop is executed.  This can be an
+     INTEGER_CST, or a symbolic expression representing the number of
+     iterations like "N - 1", or a COND_EXPR containing the runtime
+     conditions under which the number of iterations is non zero.
+
+     Don't access this field directly: number_of_latch_executions
+     computes and caches the computed information in this field.  */
+  tree nb_iterations;
+
+  /* An integer guaranteed to be greater or equal to nb_iterations.  Only
+     valid if any_upper_bound is true.  */
+  widest_int nb_iterations_upper_bound;
+
+  widest_int nb_iterations_likely_upper_bound;
+
+  /* An integer giving an estimate on nb_iterations.  Unlike
+     nb_iterations_upper_bound, there is no guarantee that it is at least
+     nb_iterations.  */
+  widest_int nb_iterations_estimate;
+
+  /* If > 0, an integer, where the user asserted that for any
+     I in [ 0, nb_iterations ) and for any J in
+     [ I, min ( I + safelen, nb_iterations ) ), the Ith and Jth iterations
+     of the loop can be safely evaluated concurrently.  */
+  int safelen;
+
+  /* Constraints are generally set by consumers and affect certain
+     semantics of niter analyzer APIs.  Currently the APIs affected are
+     number_of_iterations_exit* functions and their callers.  One typical
+     use case of constraints is to vectorize possibly infinite loop:
+
+       1) Compute niter->assumptions by calling niter analyzer API and
+	  record it as possible condition for loop versioning.
+       2) Clear buffered result of niter/scev analyzer.
+       3) Set constraint LOOP_C_FINITE assuming the loop is finite.
+       4) Analyze data references.  Since data reference analysis depends
+	  on niter/scev analyzer, the point is that niter/scev analysis
+	  is done under circumstance of LOOP_C_FINITE constraint.
+       5) Version the loop with niter->assumptions computed in step 1).
+       6) Vectorize the versioned loop in which niter->assumptions is
+	  checked to be true.
+       7) Update constraints in versioned loops so that niter analyzer
+	  in following passes can use it.
+
+     Note consumers are usually the loop optimizers and it is consumers'
+     responsibility to set/clear constraints correctly.  Failing to do
+     that might result in hard to track down bugs in niter/scev consumers.  */
+  unsigned constraints;
+
+  /* An integer estimation of the number of iterations.  Estimate_state
+     describes what is the state of the estimation.  */
+  ENUM_BITFIELD(loop_estimation) estimate_state : 8;
+
+  unsigned any_upper_bound : 1;
+  unsigned any_estimate : 1;
+  unsigned any_likely_upper_bound : 1;
+
+  /* True if the loop can be parallel.  */
+  unsigned can_be_parallel : 1;
+
+  /* True if -Waggressive-loop-optimizations warned about this loop
+     already.  */
+  unsigned warned_aggressive_loop_optimizations : 1;
+
+  /* True if this loop should never be vectorized.  */
+  unsigned dont_vectorize : 1;
+
+  /* True if we should try harder to vectorize this loop.  */
+  unsigned force_vectorize : 1;
+
+  /* True if the loop is part of an oacc kernels region.  */
+  unsigned in_oacc_kernels_region : 1;
+
+  /* The number of times to unroll the loop.  0 means no information given,
+     just do what we always do.  A value of 1 means do not unroll the loop.
+     A value of USHRT_MAX means unroll with no specific unrolling factor.
+     Other values means unroll with the given unrolling factor.  */
+  unsigned short unroll;
+
+  /* If this loop was inlined the main clique of the callee which does
+     not need remapping when copying the loop body.  */
+  unsigned short owned_clique;
+
+  /* For SIMD loops, this is a unique identifier of the loop, referenced
+     by IFN_GOMP_SIMD_VF, IFN_GOMP_SIMD_LANE and IFN_GOMP_SIMD_LAST_LANE
+     builtins.  */
+  tree simduid;
+
+  /* In loop optimization, it's common to generate loops from the original
+     loop.  This field records the index of the original loop which can be
+     used to track the original loop from newly generated loops.  This can
+     be done by calling function get_loop (cfun, orig_loop_num).  Note the
+     original loop could be destroyed for various reasons thus no longer
+     exists, as a result, function call to get_loop returns NULL pointer.
+     In this case, this field should not be used and needs to be cleared
+     whenever possible.  */
+  int orig_loop_num;
+
+  /* Upper bound on number of iterations of a loop.  */
+  struct nb_iter_bound *bounds;
+
+  /* Non-overflow control ivs of a loop.  */
+  struct control_iv *control_ivs;
+
+  /* Head of the cyclic list of the exits of the loop.  */
+  struct loop_exit *exits;
+
+  /* Number of iteration analysis data for RTL.  */
+  struct niter_desc *simple_loop_desc;
+
+  /* For sanity checking during loop fixup we record here the former
+     loop header for loops marked for removal.  Note that this prevents
+     the basic-block from being collected but its index can still be
+     reused.  */
+  basic_block former_header;
+};
+
+/* Set if the loop is known to be infinite.  */
+#define LOOP_C_INFINITE		(1 << 0)
+/* Set if the loop is known to be finite without any assumptions.  */
+#define LOOP_C_FINITE		(1 << 1)
+
+/* Set C to the LOOP constraint.  */
+static inline void
+loop_constraint_set (struct loop *loop, unsigned c)
+{
+  loop->constraints |= c;
+}
+
+/* Clear C from the LOOP constraint.  */
+static inline void
+loop_constraint_clear (struct loop *loop, unsigned c)
+{
+  loop->constraints &= ~c;
+}
+
+/* Check if C is set in the LOOP constraint.  */
+static inline bool
+loop_constraint_set_p (struct loop *loop, unsigned c)
+{
+  return (loop->constraints & c) == c;
+}
+
+/* Flags for state of loop structure.  */
+enum
+{
+  LOOPS_HAVE_PREHEADERS = 1,
+  LOOPS_HAVE_SIMPLE_LATCHES = 2,
+  LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS = 4,
+  LOOPS_HAVE_RECORDED_EXITS = 8,
+  LOOPS_MAY_HAVE_MULTIPLE_LATCHES = 16,
+  LOOP_CLOSED_SSA = 32,
+  LOOPS_NEED_FIXUP = 64,
+  LOOPS_HAVE_FALLTHRU_PREHEADERS = 128
+};
+
+#define LOOPS_NORMAL (LOOPS_HAVE_PREHEADERS | LOOPS_HAVE_SIMPLE_LATCHES \
+		      | LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS)
+#define AVOID_CFG_MODIFICATIONS (LOOPS_MAY_HAVE_MULTIPLE_LATCHES)
+
+/* Structure to hold CFG information about natural loops within a function.  */
+struct GTY (()) loops {
+  /* State of loops.  */
+  int state;
+
+  /* Array of the loops.  */
+  vec<loop_p, va_gc> *larray;
+
+  /* Maps edges to the list of their descriptions as loop exits.  Edges
+     whose sources or destinations have loop_father == NULL (which may
+     happen during the cfg manipulations) should not appear in EXITS.  */
+  hash_table<loop_exit_hasher> *GTY(()) exits;
+
+  /* Pointer to root of loop hierarchy tree.  */
+  struct loop *tree_root;
+};
+
+/* Loop recognition.  */
+bool bb_loop_header_p (basic_block);
+void init_loops_structure (struct function *, struct loops *, unsigned);
+extern struct loops *flow_loops_find (struct loops *);
+extern void disambiguate_loops_with_multiple_latches (void);
+extern void flow_loops_free (struct loops *);
+extern void flow_loops_dump (FILE *,
+			     void (*)(const struct loop *, FILE *, int), int);
+extern void flow_loop_dump (const struct loop *, FILE *,
+			    void (*)(const struct loop *, FILE *, int), int);
+struct loop *alloc_loop (void);
+extern void flow_loop_free (struct loop *);
+int flow_loop_nodes_find (basic_block, struct loop *);
+unsigned fix_loop_structure (bitmap changed_bbs);
+bool mark_irreducible_loops (void);
+void release_recorded_exits (function *);
+void record_loop_exits (void);
+void rescan_loop_exit (edge, bool, bool);
+void sort_sibling_loops (function *);
+
+/* Loop data structure manipulation/querying.  */
+extern void flow_loop_tree_node_add (struct loop *, struct loop *,
+				     struct loop * = NULL);
+extern void flow_loop_tree_node_remove (struct loop *);
+extern bool flow_loop_nested_p	(const struct loop *, const struct loop *);
+extern bool flow_bb_inside_loop_p (const struct loop *, const_basic_block);
+extern struct loop * find_common_loop (struct loop *, struct loop *);
+struct loop *superloop_at_depth (struct loop *, unsigned);
+struct eni_weights;
+extern int num_loop_insns (const struct loop *);
+extern int average_num_loop_insns (const struct loop *);
+extern unsigned get_loop_level (const struct loop *);
+extern bool loop_exit_edge_p (const struct loop *, const_edge);
+extern bool loop_exits_to_bb_p (struct loop *, basic_block);
+extern bool loop_exits_from_bb_p (struct loop *, basic_block);
+extern void mark_loop_exit_edges (void);
+extern dump_user_location_t get_loop_location (struct loop *loop);
+
+/* Loops & cfg manipulation.  */
+extern basic_block *get_loop_body (const struct loop *);
+extern unsigned get_loop_body_with_size (const struct loop *, basic_block *,
+					 unsigned);
+extern basic_block *get_loop_body_in_dom_order (const struct loop *);
+extern basic_block *get_loop_body_in_bfs_order (const struct loop *);
+extern basic_block *get_loop_body_in_custom_order (const struct loop *,
+			       int (*) (const void *, const void *));
+
+extern vec<edge> get_loop_exit_edges (const struct loop *);
+extern edge single_exit (const struct loop *);
+extern edge single_likely_exit (struct loop *loop);
+extern unsigned num_loop_branches (const struct loop *);
+
+extern edge loop_preheader_edge (const struct loop *);
+extern edge loop_latch_edge (const struct loop *);
+
+extern void add_bb_to_loop (basic_block, struct loop *);
+extern void remove_bb_from_loops (basic_block);
+
+extern void cancel_loop_tree (struct loop *);
+extern void delete_loop (struct loop *);
+
+
+extern void verify_loop_structure (void);
+
+/* Loop analysis.  */
+extern bool just_once_each_iteration_p (const struct loop *, const_basic_block);
+gcov_type expected_loop_iterations_unbounded (const struct loop *,
+					      bool *read_profile_p = NULL, bool by_profile_only = false);
+extern unsigned expected_loop_iterations (struct loop *);
+extern rtx doloop_condition_get (rtx_insn *);
+
+void mark_loop_for_removal (loop_p);
+
+/* Induction variable analysis.  */
+
+/* The description of induction variable.  The things are a bit complicated
+   due to need to handle subregs and extends.  The value of the object described
+   by it can be obtained as follows (all computations are done in extend_mode):
+
+   Value in i-th iteration is
+     delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)).
+
+   If first_special is true, the value in the first iteration is
+     delta + mult * base
+
+   If extend = UNKNOWN, first_special must be false, delta 0, mult 1 and value is
+     subreg_{mode} (base + i * step)
+
+   The get_iv_value function can be used to obtain these expressions.
+
+   ??? Add a third mode field that would specify the mode in that inner
+   computation is done, which would enable it to be different from the
+   outer one?  */
+
+struct rtx_iv
+{
+  /* Its base and step (mode of base and step is supposed to be extend_mode,
+     see the description above).  */
+  rtx base, step;
+
+  /* The type of extend applied to it (IV_SIGN_EXTEND, IV_ZERO_EXTEND,
+     or IV_UNKNOWN_EXTEND).  */
+  enum iv_extend_code extend;
+
+  /* Operations applied in the extended mode.  */
+  rtx delta, mult;
+
+  /* The mode it is extended to.  */
+  scalar_int_mode extend_mode;
+
+  /* The mode the variable iterates in.  */
+  scalar_int_mode mode;
+
+  /* Whether the first iteration needs to be handled specially.  */
+  unsigned first_special : 1;
+};
+
+/* The description of an exit from the loop and of the number of iterations
+   till we take the exit.  */
+
+struct GTY(()) niter_desc
+{
+  /* The edge out of the loop.  */
+  edge out_edge;
+
+  /* The other edge leading from the condition.  */
+  edge in_edge;
+
+  /* True if we are able to say anything about number of iterations of the
+     loop.  */
+  bool simple_p;
+
+  /* True if the loop iterates the constant number of times.  */
+  bool const_iter;
+
+  /* Number of iterations if constant.  */
+  uint64_t niter;
+
+  /* Assumptions under that the rest of the information is valid.  */
+  rtx assumptions;
+
+  /* Assumptions under that the loop ends before reaching the latch,
+     even if value of niter_expr says otherwise.  */
+  rtx noloop_assumptions;
+
+  /* Condition under that the loop is infinite.  */
+  rtx infinite;
+
+  /* Whether the comparison is signed.  */
+  bool signed_p;
+
+  /* The mode in that niter_expr should be computed.  */
+  scalar_int_mode mode;
+
+  /* The number of iterations of the loop.  */
+  rtx niter_expr;
+};
+
+extern void iv_analysis_loop_init (struct loop *);
+extern bool iv_analyze (rtx_insn *, scalar_int_mode, rtx, struct rtx_iv *);
+extern bool iv_analyze_result (rtx_insn *, rtx, struct rtx_iv *);
+extern bool iv_analyze_expr (rtx_insn *, scalar_int_mode, rtx,
+			     struct rtx_iv *);
+extern rtx get_iv_value (struct rtx_iv *, rtx);
+extern bool biv_p (rtx_insn *, scalar_int_mode, rtx);
+extern void find_simple_exit (struct loop *, struct niter_desc *);
+extern void iv_analysis_done (void);
+
+extern struct niter_desc *get_simple_loop_desc (struct loop *loop);
+extern void free_simple_loop_desc (struct loop *loop);
+
+static inline struct niter_desc *
+simple_loop_desc (struct loop *loop)
+{
+  return loop->simple_loop_desc;
+}
+
+/* Accessors for the loop structures.  */
+
+/* Returns the loop with index NUM from FNs loop tree.  */
+
+static inline struct loop *
+get_loop (struct function *fn, unsigned num)
+{
+  return (*loops_for_fn (fn)->larray)[num];
+}
+
+/* Returns the number of superloops of LOOP.  */
+
+static inline unsigned
+loop_depth (const struct loop *loop)
+{
+  return vec_safe_length (loop->superloops);
+}
+
+/* Returns the immediate superloop of LOOP, or NULL if LOOP is the outermost
+   loop.  */
+
+static inline struct loop *
+loop_outer (const struct loop *loop)
+{
+  unsigned n = vec_safe_length (loop->superloops);
+
+  if (n == 0)
+    return NULL;
+
+  return (*loop->superloops)[n - 1];
+}
+
+/* Returns true if LOOP has at least one exit edge.  */
+
+static inline bool
+loop_has_exit_edges (const struct loop *loop)
+{
+  return loop->exits->next->e != NULL;
+}
+
+/* Returns the list of loops in FN.  */
+
+inline vec<loop_p, va_gc> *
+get_loops (struct function *fn)
+{
+  struct loops *loops = loops_for_fn (fn);
+  if (!loops)
+    return NULL;
+
+  return loops->larray;
+}
+
+/* Returns the number of loops in FN (including the removed
+   ones and the fake loop that forms the root of the loop tree).  */
+
+static inline unsigned
+number_of_loops (struct function *fn)
+{
+  struct loops *loops = loops_for_fn (fn);
+  if (!loops)
+    return 0;
+
+  return vec_safe_length (loops->larray);
+}
+
+/* Returns true if state of the loops satisfies all properties
+   described by FLAGS.  */
+
+static inline bool
+loops_state_satisfies_p (function *fn, unsigned flags)
+{
+  return (loops_for_fn (fn)->state & flags) == flags;
+}
+
+static inline bool
+loops_state_satisfies_p (unsigned flags)
+{
+  return loops_state_satisfies_p (cfun, flags);
+}
+
+/* Sets FLAGS to the loops state.  */
+
+static inline void
+loops_state_set (function *fn, unsigned flags)
+{
+  loops_for_fn (fn)->state |= flags;
+}
+
+static inline void
+loops_state_set (unsigned flags)
+{
+  loops_state_set (cfun, flags);
+}
+
+/* Clears FLAGS from the loops state.  */
+
+static inline void
+loops_state_clear (function *fn, unsigned flags)
+{
+  loops_for_fn (fn)->state &= ~flags;
+}
+
+static inline void
+loops_state_clear (unsigned flags)
+{
+  if (!current_loops)
+    return;
+  loops_state_clear (cfun, flags);
+}
+
+/* Check loop structure invariants, if internal consistency checks are
+   enabled.  */
+
+static inline void
+checking_verify_loop_structure (void)
+{
+  /* VERIFY_LOOP_STRUCTURE essentially asserts that no loops need fixups.
+
+     The loop optimizers should never make changes to the CFG which
+     require loop fixups.  But the low level CFG manipulation code may
+     set the flag conservatively.
+
+     Go ahead and clear the flag here.  That avoids the assert inside
+     VERIFY_LOOP_STRUCTURE, and if there is an inconsistency in the loop
+     structures VERIFY_LOOP_STRUCTURE will detect it.
+
+     This also avoid the compile time cost of excessive fixups.  */
+  loops_state_clear (LOOPS_NEED_FIXUP);
+  if (flag_checking)
+    verify_loop_structure ();
+}
+
+/* Loop iterators.  */
+
+/* Flags for loop iteration.  */
+
+enum li_flags
+{
+  LI_INCLUDE_ROOT = 1,		/* Include the fake root of the loop tree.  */
+  LI_FROM_INNERMOST = 2,	/* Iterate over the loops in the reverse order,
+				   starting from innermost ones.  */
+  LI_ONLY_INNERMOST = 4		/* Iterate only over innermost loops.  */
+};
+
+/* The iterator for loops.  */
+
+struct loop_iterator
+{
+  loop_iterator (function *fn, loop_p *loop, unsigned flags);
+  ~loop_iterator ();
+
+  inline loop_p next ();
+
+  /* The function we are visiting.  */
+  function *fn;
+
+  /* The list of loops to visit.  */
+  vec<int> to_visit;
+
+  /* The index of the actual loop.  */
+  unsigned idx;
+};
+
+inline loop_p
+loop_iterator::next ()
+{
+  int anum;
+
+  while (this->to_visit.iterate (this->idx, &anum))
+    {
+      this->idx++;
+      loop_p loop = get_loop (fn, anum);
+      if (loop)
+	return loop;
+    }
+
+  return NULL;
+}
+
+inline
+loop_iterator::loop_iterator (function *fn, loop_p *loop, unsigned flags)
+{
+  struct loop *aloop;
+  unsigned i;
+  int mn;
+
+  this->idx = 0;
+  this->fn = fn;
+  if (!loops_for_fn (fn))
+    {
+      this->to_visit.create (0);
+      *loop = NULL;
+      return;
+    }
+
+  this->to_visit.create (number_of_loops (fn));
+  mn = (flags & LI_INCLUDE_ROOT) ? 0 : 1;
+
+  if (flags & LI_ONLY_INNERMOST)
+    {
+      for (i = 0; vec_safe_iterate (loops_for_fn (fn)->larray, i, &aloop); i++)
+	if (aloop != NULL
+	    && aloop->inner == NULL
+	    && aloop->num >= mn)
+	  this->to_visit.quick_push (aloop->num);
+    }
+  else if (flags & LI_FROM_INNERMOST)
+    {
+      /* Push the loops to LI->TO_VISIT in postorder.  */
+      for (aloop = loops_for_fn (fn)->tree_root;
+	   aloop->inner != NULL;
+	   aloop = aloop->inner)
+	continue;
+
+      while (1)
+	{
+	  if (aloop->num >= mn)
+	    this->to_visit.quick_push (aloop->num);
+
+	  if (aloop->next)
+	    {
+	      for (aloop = aloop->next;
+		   aloop->inner != NULL;
+		   aloop = aloop->inner)
+		continue;
+	    }
+	  else if (!loop_outer (aloop))
+	    break;
+	  else
+	    aloop = loop_outer (aloop);
+	}
+    }
+  else
+    {
+      /* Push the loops to LI->TO_VISIT in preorder.  */
+      aloop = loops_for_fn (fn)->tree_root;
+      while (1)
+	{
+	  if (aloop->num >= mn)
+	    this->to_visit.quick_push (aloop->num);
+
+	  if (aloop->inner != NULL)
+	    aloop = aloop->inner;
+	  else
+	    {
+	      while (aloop != NULL && aloop->next == NULL)
+		aloop = loop_outer (aloop);
+	      if (aloop == NULL)
+		break;
+	      aloop = aloop->next;
+	    }
+	}
+    }
+
+  *loop = this->next ();
+}
+
+inline
+loop_iterator::~loop_iterator ()
+{
+  this->to_visit.release ();
+}
+
+#define FOR_EACH_LOOP(LOOP, FLAGS) \
+  for (loop_iterator li(cfun, &(LOOP), FLAGS); \
+       (LOOP); \
+       (LOOP) = li.next ())
+
+#define FOR_EACH_LOOP_FN(FN, LOOP, FLAGS) \
+  for (loop_iterator li(FN, &(LOOP), FLAGS); \
+       (LOOP); \
+       (LOOP) = li.next ())
+
+/* The properties of the target.  */
+struct target_cfgloop {
+  /* Number of available registers.  */
+  unsigned x_target_avail_regs;
+
+  /* Number of available registers that are call-clobbered.  */
+  unsigned x_target_clobbered_regs;
+
+  /* Number of registers reserved for temporary expressions.  */
+  unsigned x_target_res_regs;
+
+  /* The cost for register when there still is some reserve, but we are
+     approaching the number of available registers.  */
+  unsigned x_target_reg_cost[2];
+
+  /* The cost for register when we need to spill.  */
+  unsigned x_target_spill_cost[2];
+};
+
+extern struct target_cfgloop default_target_cfgloop;
+#if SWITCHABLE_TARGET
+extern struct target_cfgloop *this_target_cfgloop;
+#else
+#define this_target_cfgloop (&default_target_cfgloop)
+#endif
+
+#define target_avail_regs \
+  (this_target_cfgloop->x_target_avail_regs)
+#define target_clobbered_regs \
+  (this_target_cfgloop->x_target_clobbered_regs)
+#define target_res_regs \
+  (this_target_cfgloop->x_target_res_regs)
+#define target_reg_cost \
+  (this_target_cfgloop->x_target_reg_cost)
+#define target_spill_cost \
+  (this_target_cfgloop->x_target_spill_cost)
+
+/* Register pressure estimation for induction variable optimizations & loop
+   invariant motion.  */
+extern unsigned estimate_reg_pressure_cost (unsigned, unsigned, bool, bool);
+extern void init_set_costs (void);
+
+/* Loop optimizer initialization.  */
+extern void loop_optimizer_init (unsigned);
+extern void loop_optimizer_finalize (function *);
+inline void
+loop_optimizer_finalize ()
+{
+  loop_optimizer_finalize (cfun);
+}
+
+/* Optimization passes.  */
+enum
+{
+  UAP_UNROLL = 1,	/* Enables unrolling of loops if it seems profitable.  */
+  UAP_UNROLL_ALL = 2	/* Enables unrolling of all loops.  */
+};
+
+extern void doloop_optimize_loops (void);
+extern void move_loop_invariants (void);
+extern vec<basic_block> get_loop_hot_path (const struct loop *loop);
+
+/* Returns the outermost loop of the loop nest that contains LOOP.*/
+static inline struct loop *
+loop_outermost (struct loop *loop)
+{
+  unsigned n = vec_safe_length (loop->superloops);
+
+  if (n <= 1)
+    return loop;
+
+  return (*loop->superloops)[1];
+}
+
+extern void record_niter_bound (struct loop *, const widest_int &, bool, bool);
+extern HOST_WIDE_INT get_estimated_loop_iterations_int (struct loop *);
+extern HOST_WIDE_INT get_max_loop_iterations_int (const struct loop *);
+extern HOST_WIDE_INT get_likely_max_loop_iterations_int (struct loop *);
+extern bool get_estimated_loop_iterations (struct loop *loop, widest_int *nit);
+extern bool get_max_loop_iterations (const struct loop *loop, widest_int *nit);
+extern bool get_likely_max_loop_iterations (struct loop *loop, widest_int *nit);
+extern int bb_loop_depth (const_basic_block);
+
+/* Converts VAL to widest_int.  */
+
+static inline widest_int
+gcov_type_to_wide_int (gcov_type val)
+{
+  HOST_WIDE_INT a[2];
+
+  a[0] = (unsigned HOST_WIDE_INT) val;
+  /* If HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_WIDEST_INT, avoid shifting by
+     the size of type.  */
+  val >>= HOST_BITS_PER_WIDE_INT - 1;
+  val >>= 1;
+  a[1] = (unsigned HOST_WIDE_INT) val;
+
+  return widest_int::from_array (a, 2);
+}
+#endif /* GCC_CFGLOOP_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgloopmanip.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgloopmanip.h
new file mode 100644
index 0000000..d57aead
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgloopmanip.h
@@ -0,0 +1,66 @@
+/* Loop manipulation header.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_CFGLOOPMANIP_H
+#define GCC_CFGLOOPMANIP_H
+
+enum
+{
+  CP_SIMPLE_PREHEADERS = 1,
+  CP_FALLTHRU_PREHEADERS = 2
+};
+
+#define DLTHE_FLAG_UPDATE_FREQ	1	/* Update frequencies in
+					   duplicate_loop_to_header_edge.  */
+#define DLTHE_RECORD_COPY_NUMBER 2	/* Record copy number in the aux
+					   field of newly create BB.  */
+#define DLTHE_FLAG_COMPLETTE_PEEL 4	/* Update frequencies expecting
+					   a complete peeling.  */
+extern edge mfb_kj_edge;
+
+extern bool remove_path (edge, bool * = NULL, bitmap = NULL);
+extern void place_new_loop (struct function *, struct loop *);
+extern void add_loop (struct loop *, struct loop *);
+extern void scale_loop_frequencies (struct loop *, profile_probability);
+extern void scale_loop_profile (struct loop *, profile_probability, gcov_type);
+extern edge create_empty_if_region_on_edge (edge, tree);
+extern struct loop *create_empty_loop_on_edge (edge, tree, tree, tree, tree,
+					       tree *, tree *, struct loop *);
+extern struct loop *loopify (edge, edge,
+			     basic_block, edge, edge, bool,
+			     profile_probability, profile_probability);
+extern void unloop (struct loop *, bool *, bitmap);
+extern void copy_loop_info (struct loop *loop, struct loop *target);
+extern struct loop * duplicate_loop (struct loop *, struct loop *,
+				     struct loop * = NULL);
+extern void duplicate_subloops (struct loop *, struct loop *);
+extern bool can_duplicate_loop_p (const struct loop *loop);
+extern bool duplicate_loop_to_header_edge (struct loop *, edge,
+					   unsigned, sbitmap, edge,
+ 					   vec<edge> *, int);
+extern bool mfb_keep_just (edge);
+basic_block create_preheader (struct loop *, int);
+extern void create_preheaders (int);
+extern void force_single_succ_latches (void);
+struct loop * loop_version (struct loop *, void *,
+			    basic_block *,
+			    profile_probability, profile_probability,
+			    profile_probability, profile_probability, bool);
+
+#endif /* GCC_CFGLOOPMANIP_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgrtl.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgrtl.h
new file mode 100644
index 0000000..ffd211a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cfgrtl.h
@@ -0,0 +1,59 @@
+/* Define control flow data structures for the CFG.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_CFGRTL_H
+#define GCC_CFGRTL_H
+
+extern void delete_insn (rtx_insn *);
+extern bool delete_insn_and_edges (rtx_insn *);
+extern void delete_insn_chain (rtx, rtx_insn *, bool);
+extern basic_block create_basic_block_structure (rtx_insn *, rtx_insn *,
+						 rtx_note *, basic_block);
+extern void compute_bb_for_insn (void);
+extern unsigned int free_bb_for_insn (void);
+extern rtx_insn *entry_of_function (void);
+extern void update_bb_for_insn (basic_block);
+extern bool contains_no_active_insn_p (const_basic_block);
+extern bool forwarder_block_p (const_basic_block);
+extern bool can_fallthru (basic_block, basic_block);
+extern rtx_note *bb_note (basic_block);
+extern rtx_code_label *block_label (basic_block);
+extern edge try_redirect_by_replacing_jump (edge, basic_block, bool);
+extern void emit_barrier_after_bb (basic_block bb);
+extern basic_block force_nonfallthru_and_redirect (edge, basic_block, rtx);
+extern void insert_insn_on_edge (rtx, edge);
+extern void commit_one_edge_insertion (edge e);
+extern void commit_edge_insertions (void);
+extern void print_rtl_with_bb (FILE *, const rtx_insn *, dump_flags_t);
+extern void update_br_prob_note (basic_block);
+extern rtx_insn *get_last_bb_insn (basic_block);
+extern void fixup_partitions (void);
+extern bool purge_dead_edges (basic_block);
+extern bool purge_all_dead_edges (void);
+extern bool fixup_abnormal_edges (void);
+extern rtx_insn *unlink_insn_chain (rtx_insn *, rtx_insn *);
+extern void relink_block_chain (bool);
+extern rtx_insn *duplicate_insn_chain (rtx_insn *, rtx_insn *);
+extern void cfg_layout_initialize (int);
+extern void cfg_layout_finalize (void);
+extern void break_superblocks (void);
+extern void init_rtl_bb_info (basic_block);
+extern void find_bbs_reachable_by_hot_paths (hash_set <basic_block> *);
+
+#endif /* GCC_CFGRTL_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/cgraph.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cgraph.h
new file mode 100644
index 0000000..9a19d83
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cgraph.h
@@ -0,0 +1,3452 @@
+/* Callgraph handling code.
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Contributed by Jan Hubicka
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_CGRAPH_H
+#define GCC_CGRAPH_H
+
+#include "profile-count.h"
+#include "ipa-ref.h"
+#include "plugin-api.h"
+
+extern void debuginfo_early_init (void);
+extern void debuginfo_init (void);
+extern void debuginfo_fini (void);
+extern void debuginfo_start (void);
+extern void debuginfo_stop (void);
+extern void debuginfo_early_start (void);
+extern void debuginfo_early_stop (void);
+
+class ipa_opt_pass_d;
+typedef ipa_opt_pass_d *ipa_opt_pass;
+
+/* Symbol table consists of functions and variables.
+   TODO: add labels and CONST_DECLs.  */
+enum symtab_type
+{
+  SYMTAB_SYMBOL,
+  SYMTAB_FUNCTION,
+  SYMTAB_VARIABLE
+};
+
+/* Section names are stored as reference counted strings in GGC safe hashtable
+   (to make them survive through PCH).  */
+
+struct GTY((for_user)) section_hash_entry
+{
+  int ref_count;
+  char *name;  /* As long as this datastructure stays in GGC, we cannot put
+		  string at the tail of structure of GGC dies in horrible
+		  way  */
+};
+
+struct section_name_hasher : ggc_ptr_hash<section_hash_entry>
+{
+  typedef const char *compare_type;
+
+  static hashval_t hash (section_hash_entry *);
+  static bool equal (section_hash_entry *, const char *);
+};
+
+enum availability
+{
+  /* Not yet set by cgraph_function_body_availability.  */
+  AVAIL_UNSET,
+  /* Function body/variable initializer is unknown.  */
+  AVAIL_NOT_AVAILABLE,
+  /* Function body/variable initializer is known but might be replaced
+     by a different one from other compilation unit and thus needs to
+     be dealt with a care.  Like AVAIL_NOT_AVAILABLE it can have
+     arbitrary side effects on escaping variables and functions, while
+     like AVAILABLE it might access static variables.  */
+  AVAIL_INTERPOSABLE,
+  /* Function body/variable initializer is known and will be used in final
+     program.  */
+  AVAIL_AVAILABLE,
+  /* Function body/variable initializer is known and all it's uses are
+     explicitly visible within current unit (ie it's address is never taken and
+     it is not exported to other units). Currently used only for functions.  */
+  AVAIL_LOCAL
+};
+
+/* Classification of symbols WRT partitioning.  */
+enum symbol_partitioning_class
+{
+   /* External declarations are ignored by partitioning algorithms and they are
+      added into the boundary later via compute_ltrans_boundary.  */
+   SYMBOL_EXTERNAL,
+   /* Partitioned symbols are pur into one of partitions.  */
+   SYMBOL_PARTITION,
+   /* Duplicated symbols (such as comdat or constant pool references) are
+      copied into every node needing them via add_symbol_to_partition.  */
+   SYMBOL_DUPLICATE
+};
+
+/* Base of all entries in the symbol table.
+   The symtab_node is inherited by cgraph and varpol nodes.  */
+class GTY((desc ("%h.type"), tag ("SYMTAB_SYMBOL"),
+	   chain_next ("%h.next"), chain_prev ("%h.previous")))
+  symtab_node
+{
+public:
+  friend class symbol_table;
+
+  /* Return name.  */
+  const char *name () const;
+
+  /* Return dump name.  */
+  const char *dump_name () const;
+
+  /* Return asm name.  */
+  const char *asm_name () const;
+
+  /* Return dump name with assembler name.  */
+  const char *dump_asm_name () const;
+
+  /* Add node into symbol table.  This function is not used directly, but via
+     cgraph/varpool node creation routines.  */
+  void register_symbol (void);
+
+  /* Remove symbol from symbol table.  */
+  void remove (void);
+
+  /* Dump symtab node to F.  */
+  void dump (FILE *f);
+
+  /* Dump symtab node to stderr.  */
+  void DEBUG_FUNCTION debug (void);
+
+  /* Verify consistency of node.  */
+  void DEBUG_FUNCTION verify (void);
+
+  /* Return ipa reference from this symtab_node to
+     REFERED_NODE or REFERED_VARPOOL_NODE. USE_TYPE specify type
+     of the use and STMT the statement (if it exists).  */
+  ipa_ref *create_reference (symtab_node *referred_node,
+			     enum ipa_ref_use use_type);
+
+  /* Return ipa reference from this symtab_node to
+     REFERED_NODE or REFERED_VARPOOL_NODE. USE_TYPE specify type
+     of the use and STMT the statement (if it exists).  */
+  ipa_ref *create_reference (symtab_node *referred_node,
+			     enum ipa_ref_use use_type, gimple *stmt);
+
+  /* If VAL is a reference to a function or a variable, add a reference from
+     this symtab_node to the corresponding symbol table node.  Return the new
+     reference or NULL if none was created.  */
+  ipa_ref *maybe_create_reference (tree val, gimple *stmt);
+
+  /* Clone all references from symtab NODE to this symtab_node.  */
+  void clone_references (symtab_node *node);
+
+  /* Remove all stmt references in non-speculative references.
+     Those are not maintained during inlining & clonning.
+     The exception are speculative references that are updated along
+     with callgraph edges associated with them.  */
+  void clone_referring (symtab_node *node);
+
+  /* Clone reference REF to this symtab_node and set its stmt to STMT.  */
+  ipa_ref *clone_reference (ipa_ref *ref, gimple *stmt);
+
+  /* Find the structure describing a reference to REFERRED_NODE
+     and associated with statement STMT.  */
+  ipa_ref *find_reference (symtab_node *referred_node, gimple *stmt,
+			   unsigned int lto_stmt_uid);
+
+  /* Remove all references that are associated with statement STMT.  */
+  void remove_stmt_references (gimple *stmt);
+
+  /* Remove all stmt references in non-speculative references.
+     Those are not maintained during inlining & clonning.
+     The exception are speculative references that are updated along
+     with callgraph edges associated with them.  */
+  void clear_stmts_in_references (void);
+
+  /* Remove all references in ref list.  */
+  void remove_all_references (void);
+
+  /* Remove all referring items in ref list.  */
+  void remove_all_referring (void);
+
+  /* Dump references in ref list to FILE.  */
+  void dump_references (FILE *file);
+
+  /* Dump referring in list to FILE.  */
+  void dump_referring (FILE *);
+
+  /* Get number of references for this node.  */
+  inline unsigned num_references (void)
+  {
+    return ref_list.references ? ref_list.references->length () : 0;
+  }
+
+  /* Iterates I-th reference in the list, REF is also set.  */
+  ipa_ref *iterate_reference (unsigned i, ipa_ref *&ref);
+
+  /* Iterates I-th referring item in the list, REF is also set.  */
+  ipa_ref *iterate_referring (unsigned i, ipa_ref *&ref);
+
+  /* Iterates I-th referring alias item in the list, REF is also set.  */
+  ipa_ref *iterate_direct_aliases (unsigned i, ipa_ref *&ref);
+
+  /* Return true if symtab node and TARGET represents
+     semantically equivalent symbols.  */
+  bool semantically_equivalent_p (symtab_node *target);
+
+  /* Classify symbol symtab node for partitioning.  */
+  enum symbol_partitioning_class get_partitioning_class (void);
+
+  /* Return comdat group.  */
+  tree get_comdat_group ()
+    {
+      return x_comdat_group;
+    }
+
+  /* Return comdat group as identifier_node.  */
+  tree get_comdat_group_id ()
+    {
+      if (x_comdat_group && TREE_CODE (x_comdat_group) != IDENTIFIER_NODE)
+	x_comdat_group = DECL_ASSEMBLER_NAME (x_comdat_group);
+      return x_comdat_group;
+    }
+
+  /* Set comdat group.  */
+  void set_comdat_group (tree group)
+    {
+      gcc_checking_assert (!group || TREE_CODE (group) == IDENTIFIER_NODE
+			   || DECL_P (group));
+      x_comdat_group = group;
+    }
+
+  /* Return section as string.  */
+  const char * get_section ()
+    {
+      if (!x_section)
+	return NULL;
+      return x_section->name;
+    }
+
+  /* Remove node from same comdat group.   */
+  void remove_from_same_comdat_group (void);
+
+  /* Add this symtab_node to the same comdat group that OLD is in.  */
+  void add_to_same_comdat_group (symtab_node *old_node);
+
+  /* Dissolve the same_comdat_group list in which NODE resides.  */
+  void dissolve_same_comdat_group_list (void);
+
+  /* Return true when symtab_node is known to be used from other (non-LTO)
+     object file. Known only when doing LTO via linker plugin.  */
+  bool used_from_object_file_p (void);
+
+  /* Walk the alias chain to return the symbol NODE is alias of.
+     If NODE is not an alias, return NODE.
+     When AVAILABILITY is non-NULL, get minimal availability in the chain.
+     When REF is non-NULL, assume that reference happens in symbol REF
+     when determining the availability.  */
+  symtab_node *ultimate_alias_target (enum availability *avail = NULL,
+				      struct symtab_node *ref = NULL);
+
+  /* Return next reachable static symbol with initializer after NODE.  */
+  inline symtab_node *next_defined_symbol (void);
+
+  /* Add reference recording that symtab node is alias of TARGET.
+     If TRANSPARENT is true make the alias to be transparent alias.
+     The function can fail in the case of aliasing cycles; in this case
+     it returns false.  */
+  bool resolve_alias (symtab_node *target, bool transparent = false);
+
+  /* C++ FE sometimes change linkage flags after producing same
+     body aliases.  */
+  void fixup_same_cpp_alias_visibility (symtab_node *target);
+
+  /* Call callback on symtab node and aliases associated to this node.
+     When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
+     skipped.  */
+  bool call_for_symbol_and_aliases (bool (*callback) (symtab_node *, void *),
+				    void *data,
+				    bool include_overwrite);
+
+  /* If node cannot be interposable by static or dynamic linker to point to
+     different definition, return this symbol. Otherwise look for alias with
+     such property and if none exists, introduce new one.  */
+  symtab_node *noninterposable_alias (void);
+
+  /* Return node that alias is aliasing.  */
+  inline symtab_node *get_alias_target (void);
+
+  /* Set section for symbol and its aliases.  */
+  void set_section (const char *section);
+
+  /* Set section, do not recurse into aliases.
+     When one wants to change section of symbol and its aliases,
+     use set_section.  */
+  void set_section_for_node (const char *section);
+
+  /* Set initialization priority to PRIORITY.  */
+  void set_init_priority (priority_type priority);
+
+  /* Return the initialization priority.  */
+  priority_type get_init_priority ();
+
+  /* Return availability of NODE when referenced from REF.  */
+  enum availability get_availability (symtab_node *ref = NULL);
+
+  /* During LTO stream-in this predicate can be used to check whether node
+     in question prevails in the linking to save some memory usage.  */
+  bool prevailing_p (void);
+
+  /* Return true if NODE binds to current definition in final executable
+     when referenced from REF.  If REF is NULL return conservative value
+     for any reference.  */
+  bool binds_to_current_def_p (symtab_node *ref = NULL);
+
+  /* Make DECL local.  */
+  void make_decl_local (void);
+
+  /* Copy visibility from N.  */
+  void copy_visibility_from (symtab_node *n);
+
+  /* Return desired alignment of the definition.  This is NOT alignment useful
+     to access THIS, because THIS may be interposable and DECL_ALIGN should
+     be used instead.  It however must be guaranteed when output definition
+     of THIS.  */
+  unsigned int definition_alignment ();
+
+  /* Return true if alignment can be increased.  */
+  bool can_increase_alignment_p ();
+
+  /* Increase alignment of symbol to ALIGN.  */
+  void increase_alignment (unsigned int align);
+
+  /* Return true if list contains an alias.  */
+  bool has_aliases_p (void);
+
+  /* Return true when the symbol is real symbol, i.e. it is not inline clone
+     or abstract function kept for debug info purposes only.  */
+  bool real_symbol_p (void);
+
+  /* Return true when the symbol needs to be output to the LTO symbol table.  */
+  bool output_to_lto_symbol_table_p (void);
+
+  /* Determine if symbol declaration is needed.  That is, visible to something
+     either outside this translation unit, something magic in the system
+     configury. This function is used just during symbol creation.  */
+  bool needed_p (void);
+
+  /* Return true if this symbol is a function from the C frontend specified
+     directly in RTL form (with "__RTL").  */
+  bool native_rtl_p () const;
+
+  /* Return true when there are references to the node.  */
+  bool referred_to_p (bool include_self = true);
+
+  /* Return true if symbol can be discarded by linker from the binary.
+     Assume that symbol is used (so there is no need to take into account
+     garbage collecting linkers)
+
+     This can happen for comdats, commons and weaks when they are previaled
+     by other definition at static linking time.  */
+  inline bool
+  can_be_discarded_p (void)
+  {
+    return (DECL_EXTERNAL (decl)
+	    || ((get_comdat_group ()
+		 || DECL_COMMON (decl)
+		 || (DECL_SECTION_NAME (decl) && DECL_WEAK (decl)))
+		&& ((resolution != LDPR_PREVAILING_DEF
+		     && resolution != LDPR_PREVAILING_DEF_IRONLY_EXP)
+		    || flag_incremental_link)
+		&& resolution != LDPR_PREVAILING_DEF_IRONLY));
+  }
+
+  /* Return true if NODE is local to a particular COMDAT group, and must not
+     be named from outside the COMDAT.  This is used for C++ decloned
+     constructors.  */
+  inline bool comdat_local_p (void)
+  {
+    return (same_comdat_group && !TREE_PUBLIC (decl));
+  }
+
+  /* Return true if ONE and TWO are part of the same COMDAT group.  */
+  inline bool in_same_comdat_group_p (symtab_node *target);
+
+  /* Return true if symbol is known to be nonzero.  */
+  bool nonzero_address ();
+
+  /* Return 0 if symbol is known to have different address than S2,
+     Return 1 if symbol is known to have same address as S2,
+     return 2 otherwise. 
+
+     If MEMORY_ACCESSED is true, assume that both memory pointer to THIS
+     and S2 is going to be accessed.  This eliminates the situations when
+     either THIS or S2 is NULL and is seful for comparing bases when deciding
+     about memory aliasing.  */
+  int equal_address_to (symtab_node *s2, bool memory_accessed = false);
+
+  /* Return true if symbol's address may possibly be compared to other
+     symbol's address.  */
+  bool address_matters_p ();
+
+  /* Return true if NODE's address can be compared.  This use properties
+     of NODE only and does not look if the address is actually taken in
+     interesting way.  For that use ADDRESS_MATTERS_P instead.  */
+  bool address_can_be_compared_p (void);
+
+  /* Return symbol table node associated with DECL, if any,
+     and NULL otherwise.  */
+  static inline symtab_node *get (const_tree decl)
+  {
+    /* Check that we are called for sane type of object - functions
+       and static or external variables.  */
+    gcc_checking_assert (TREE_CODE (decl) == FUNCTION_DECL
+			 || (TREE_CODE (decl) == VAR_DECL
+			     && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)
+				 || in_lto_p)));
+    /* Check that the mapping is sane - perhaps this check can go away,
+       but at the moment frontends tends to corrupt the mapping by calling
+       memcpy/memset on the tree nodes.  */
+    gcc_checking_assert (!decl->decl_with_vis.symtab_node
+			 || decl->decl_with_vis.symtab_node->decl == decl);
+    return decl->decl_with_vis.symtab_node;
+  }
+
+  /* Try to find a symtab node for declaration DECL and if it does not
+     exist or if it corresponds to an inline clone, create a new one.  */
+  static inline symtab_node * get_create (tree node);
+
+  /* Return the cgraph node that has ASMNAME for its DECL_ASSEMBLER_NAME.
+     Return NULL if there's no such node.  */
+  static symtab_node *get_for_asmname (const_tree asmname);
+
+  /* Verify symbol table for internal consistency.  */
+  static DEBUG_FUNCTION void verify_symtab_nodes (void);
+
+  /* Perform internal consistency checks, if they are enabled.  */
+  static inline void checking_verify_symtab_nodes (void);
+
+  /* Type of the symbol.  */
+  ENUM_BITFIELD (symtab_type) type : 8;
+
+  /* The symbols resolution.  */
+  ENUM_BITFIELD (ld_plugin_symbol_resolution) resolution : 8;
+
+  /*** Flags representing the symbol type.  ***/
+
+  /* True when symbol corresponds to a definition in current unit.
+     set via finalize_function or finalize_decl  */
+  unsigned definition : 1;
+  /* True when symbol is an alias.
+     Set by ssemble_alias.  */
+  unsigned alias : 1;
+  /* When true the alias is translated into its target symbol either by GCC
+     or assembler (it also may just be a duplicate declaration of the same
+     linker name).
+
+     Currently transparent aliases come in three different flavors
+       - aliases having the same assembler name as their target (aka duplicated
+	 declarations). In this case the assembler names compare via
+	 assembler_names_equal_p and weakref is false
+       - aliases that are renamed at a time being output to final file
+	 by varasm.c. For those DECL_ASSEMBLER_NAME have
+	 IDENTIFIER_TRANSPARENT_ALIAS set and thus also their assembler
+	 name must be unique.
+	 Weakrefs belong to this cateogry when we target assembler without
+	 .weakref directive.
+       - weakrefs that are renamed by assembler via .weakref directive.
+	 In this case the alias may or may not be definition (depending if
+	 target declaration was seen by the compiler), weakref is set.
+	 Unless we are before renaming statics, assembler names are different.
+
+     Given that we now support duplicate declarations, the second option is
+     redundant and will be removed.  */
+  unsigned transparent_alias : 1;
+  /* True when alias is a weakref.  */
+  unsigned weakref : 1;
+  /* C++ frontend produce same body aliases and extra name aliases for
+     virtual functions and vtables that are obviously equivalent.
+     Those aliases are bit special, especially because C++ frontend
+     visibility code is so ugly it cannot get them right at first time
+     and their visibility needs to be copied from their "masters" at
+     the end of parsing.  */
+  unsigned cpp_implicit_alias : 1;
+  /* Set once the definition was analyzed.  The list of references and
+     other properties are built during analysis.  */
+  unsigned analyzed : 1;
+  /* Set for write-only variables.  */
+  unsigned writeonly : 1;
+  /* Visibility of symbol was used for further optimization; do not
+     permit further changes.  */
+  unsigned refuse_visibility_changes : 1;
+
+  /*** Visibility and linkage flags.  ***/
+
+  /* Set when function is visible by other units.  */
+  unsigned externally_visible : 1;
+  /* Don't reorder to other symbols having this set.  */
+  unsigned no_reorder : 1;
+  /* The symbol will be assumed to be used in an invisible way (like
+     by an toplevel asm statement).  */
+  unsigned force_output : 1;
+  /* Like FORCE_OUTPUT, but in the case it is ABI requiring the symbol to be
+     exported.  Unlike FORCE_OUTPUT this flag gets cleared to symbols promoted
+     to static and it does not inhibit optimization.  */
+  unsigned forced_by_abi : 1;
+  /* True when the name is known to be unique and thus it does not need mangling.  */
+  unsigned unique_name : 1;
+  /* Specify whether the section was set by user or by
+     compiler via -ffunction-sections.  */
+  unsigned implicit_section : 1;
+  /* True when body and other characteristics have been removed by
+     symtab_remove_unreachable_nodes. */
+  unsigned body_removed : 1;
+
+  /*** WHOPR Partitioning flags.
+       These flags are used at ltrans stage when only part of the callgraph is
+       available. ***/
+
+  /* Set when variable is used from other LTRANS partition.  */
+  unsigned used_from_other_partition : 1;
+  /* Set when function is available in the other LTRANS partition.
+     During WPA output it is used to mark nodes that are present in
+     multiple partitions.  */
+  unsigned in_other_partition : 1;
+
+
+
+  /*** other flags.  ***/
+
+  /* Set when symbol has address taken. */
+  unsigned address_taken : 1;
+  /* Set when init priority is set.  */
+  unsigned in_init_priority_hash : 1;
+
+  /* Set when symbol needs to be streamed into LTO bytecode for LTO, or in case
+     of offloading, for separate compilation for a different target.  */
+  unsigned need_lto_streaming : 1;
+
+  /* Set when symbol can be streamed into bytecode for offloading.  */
+  unsigned offloadable : 1;
+
+  /* Set when symbol is an IFUNC resolver.  */
+  unsigned ifunc_resolver : 1;
+
+
+  /* Ordering of all symtab entries.  */
+  int order;
+
+  /* Declaration representing the symbol.  */
+  tree decl;
+
+  /* Linked list of symbol table entries starting with symtab_nodes.  */
+  symtab_node *next;
+  symtab_node *previous;
+
+  /* Linked list of symbols with the same asm name.  There may be multiple
+     entries for single symbol name during LTO, because symbols are renamed
+     only after partitioning.
+
+     Because inline clones are kept in the assembler name has, they also produce
+     duplicate entries.
+
+     There are also several long standing bugs where frontends and builtin
+     code produce duplicated decls.  */
+  symtab_node *next_sharing_asm_name;
+  symtab_node *previous_sharing_asm_name;
+
+  /* Circular list of nodes in the same comdat group if non-NULL.  */
+  symtab_node *same_comdat_group;
+
+  /* Vectors of referring and referenced entities.  */
+  ipa_ref_list ref_list;
+
+  /* Alias target. May be either DECL pointer or ASSEMBLER_NAME pointer
+     depending to what was known to frontend on the creation time.
+     Once alias is resolved, this pointer become NULL.  */
+  tree alias_target;
+
+  /* File stream where this node is being written to.  */
+  struct lto_file_decl_data * lto_file_data;
+
+  PTR GTY ((skip)) aux;
+
+  /* Comdat group the symbol is in.  Can be private if GGC allowed that.  */
+  tree x_comdat_group;
+
+  /* Section name. Again can be private, if allowed.  */
+  section_hash_entry *x_section;
+
+protected:
+  /* Dump base fields of symtab nodes to F.  Not to be used directly.  */
+  void dump_base (FILE *);
+
+  /* Verify common part of symtab node.  */
+  bool DEBUG_FUNCTION verify_base (void);
+
+  /* Remove node from symbol table.  This function is not used directly, but via
+     cgraph/varpool node removal routines.  */
+  void unregister (void);
+
+  /* Return the initialization and finalization priority information for
+     DECL.  If there is no previous priority information, a freshly
+     allocated structure is returned.  */
+  struct symbol_priority_map *priority_info (void);
+
+  /* Worker for call_for_symbol_and_aliases_1.  */
+  bool call_for_symbol_and_aliases_1 (bool (*callback) (symtab_node *, void *),
+				      void *data,
+				      bool include_overwrite);
+private:
+  /* Worker for set_section.  */
+  static bool set_section (symtab_node *n, void *s);
+
+  /* Worker for symtab_resolve_alias.  */
+  static bool set_implicit_section (symtab_node *n, void *);
+
+  /* Worker searching noninterposable alias.  */
+  static bool noninterposable_alias (symtab_node *node, void *data);
+
+  /* Worker for ultimate_alias_target.  */
+  symtab_node *ultimate_alias_target_1 (enum availability *avail = NULL,
+					symtab_node *ref = NULL);
+
+  /* Get dump name with normal or assembly name.  */
+  const char *get_dump_name (bool asm_name_p) const;
+};
+
+inline void
+symtab_node::checking_verify_symtab_nodes (void)
+{
+  if (flag_checking)
+    symtab_node::verify_symtab_nodes ();
+}
+
+/* Walk all aliases for NODE.  */
+#define FOR_EACH_ALIAS(node, alias) \
+  for (unsigned x_i = 0; node->iterate_direct_aliases (x_i, alias); x_i++)
+
+/* This is the information that is put into the cgraph local structure
+   to recover a function.  */
+struct lto_file_decl_data;
+
+extern const char * const cgraph_availability_names[];
+extern const char * const ld_plugin_symbol_resolution_names[];
+extern const char * const tls_model_names[];
+
+/* Sub-structure of cgraph_node.  Holds information about thunk, used only for
+   same body aliases.
+
+   Thunks are basically wrappers around methods which are introduced in case
+   of multiple inheritance in order to adjust the value of the "this" pointer
+   or of the returned value.
+
+   In the case of this-adjusting thunks, each back-end can override the
+   can_output_mi_thunk/output_mi_thunk target hooks to generate a minimal thunk
+   (with a tail call for instance) directly as assembly.  For the default hook
+   or for the case where the can_output_mi_thunk hooks return false, the thunk
+   is gimplified and lowered using the regular machinery.  */
+
+struct GTY(()) cgraph_thunk_info {
+  /* Offset used to adjust "this".  */
+  HOST_WIDE_INT fixed_offset;
+
+  /* Offset in the virtual table to get the offset to adjust "this".  Valid iff
+     VIRTUAL_OFFSET_P is true.  */
+  HOST_WIDE_INT virtual_value;
+
+  /* Offset from "this" to get the offset to adjust "this".  Zero means: this
+     offset is to be ignored.  */
+  HOST_WIDE_INT indirect_offset;
+
+  /* Thunk target, i.e. the method that this thunk wraps.  Depending on the
+     TARGET_USE_LOCAL_THUNK_ALIAS_P macro, this may have to be a new alias.  */
+  tree alias;
+
+  /* Nonzero for a "this" adjusting thunk and zero for a result adjusting
+     thunk.  */
+  bool this_adjusting;
+
+  /* If true, this thunk is what we call a virtual thunk.  In this case:
+     * for this-adjusting thunks, after the FIXED_OFFSET based adjustment is
+       done, add to the result the offset found in the vtable at:
+	 vptr + VIRTUAL_VALUE
+     * for result-adjusting thunks, the FIXED_OFFSET adjustment is done after
+       the virtual one.  */
+  bool virtual_offset_p;
+
+  /* Set to true when alias node (the cgraph_node to which this struct belong)
+     is a thunk.  Access to any other fields is invalid if this is false.  */
+  bool thunk_p;
+};
+
+/* Information about the function collected locally.
+   Available after function is analyzed.  */
+
+struct GTY(()) cgraph_local_info {
+  /* Set when function is visible in current compilation unit only and
+     its address is never taken.  */
+  unsigned local : 1;
+
+  /* False when there is something makes versioning impossible.  */
+  unsigned versionable : 1;
+
+  /* False when function calling convention and signature cannot be changed.
+     This is the case when __builtin_apply_args is used.  */
+  unsigned can_change_signature : 1;
+
+  /* True when the function has been originally extern inline, but it is
+     redefined now.  */
+  unsigned redefined_extern_inline : 1;
+
+  /* True if the function may enter serial irrevocable mode.  */
+  unsigned tm_may_enter_irr : 1;
+};
+
+/* Information about the function that needs to be computed globally
+   once compilation is finished.  Available only with -funit-at-a-time.  */
+
+struct GTY(()) cgraph_global_info {
+  /* For inline clones this points to the function they will be
+     inlined into.  */
+  cgraph_node *inlined_to;
+};
+
+/* Represent which DECL tree (or reference to such tree)
+   will be replaced by another tree while versioning.  */
+struct GTY(()) ipa_replace_map
+{
+  /* The tree that will be replaced.  */
+  tree old_tree;
+  /* The new (replacing) tree.  */
+  tree new_tree;
+  /* Parameter number to replace, when old_tree is NULL.  */
+  int parm_num;
+  /* True when a substitution should be done, false otherwise.  */
+  bool replace_p;
+  /* True when we replace a reference to old_tree.  */
+  bool ref_p;
+};
+
+struct GTY(()) cgraph_clone_info
+{
+  vec<ipa_replace_map *, va_gc> *tree_map;
+  bitmap args_to_skip;
+  bitmap combined_args_to_skip;
+};
+
+enum cgraph_simd_clone_arg_type
+{
+  SIMD_CLONE_ARG_TYPE_VECTOR,
+  SIMD_CLONE_ARG_TYPE_UNIFORM,
+  /* These are only for integer/pointer arguments passed by value.  */
+  SIMD_CLONE_ARG_TYPE_LINEAR_CONSTANT_STEP,
+  SIMD_CLONE_ARG_TYPE_LINEAR_VARIABLE_STEP,
+  /* These 6 are only for reference type arguments or arguments passed
+     by reference.  */
+  SIMD_CLONE_ARG_TYPE_LINEAR_REF_CONSTANT_STEP,
+  SIMD_CLONE_ARG_TYPE_LINEAR_REF_VARIABLE_STEP,
+  SIMD_CLONE_ARG_TYPE_LINEAR_UVAL_CONSTANT_STEP,
+  SIMD_CLONE_ARG_TYPE_LINEAR_UVAL_VARIABLE_STEP,
+  SIMD_CLONE_ARG_TYPE_LINEAR_VAL_CONSTANT_STEP,
+  SIMD_CLONE_ARG_TYPE_LINEAR_VAL_VARIABLE_STEP,
+  SIMD_CLONE_ARG_TYPE_MASK
+};
+
+/* Function arguments in the original function of a SIMD clone.
+   Supplementary data for `struct simd_clone'.  */
+
+struct GTY(()) cgraph_simd_clone_arg {
+  /* Original function argument as it originally existed in
+     DECL_ARGUMENTS.  */
+  tree orig_arg;
+
+  /* orig_arg's function (or for extern functions type from
+     TYPE_ARG_TYPES).  */
+  tree orig_type;
+
+  /* If argument is a vector, this holds the vector version of
+     orig_arg that after adjusting the argument types will live in
+     DECL_ARGUMENTS.  Otherwise, this is NULL.
+
+     This basically holds:
+       vector(simdlen) __typeof__(orig_arg) new_arg.  */
+  tree vector_arg;
+
+  /* vector_arg's type (or for extern functions new vector type.  */
+  tree vector_type;
+
+  /* If argument is a vector, this holds the array where the simd
+     argument is held while executing the simd clone function.  This
+     is a local variable in the cloned function.  Its content is
+     copied from vector_arg upon entry to the clone.
+
+     This basically holds:
+       __typeof__(orig_arg) simd_array[simdlen].  */
+  tree simd_array;
+
+  /* A SIMD clone's argument can be either linear (constant or
+     variable), uniform, or vector.  */
+  enum cgraph_simd_clone_arg_type arg_type;
+
+  /* For arg_type SIMD_CLONE_ARG_TYPE_LINEAR_*CONSTANT_STEP this is
+     the constant linear step, if arg_type is
+     SIMD_CLONE_ARG_TYPE_LINEAR_*VARIABLE_STEP, this is index of
+     the uniform argument holding the step, otherwise 0.  */
+  HOST_WIDE_INT linear_step;
+
+  /* Variable alignment if available, otherwise 0.  */
+  unsigned int alignment;
+};
+
+/* Specific data for a SIMD function clone.  */
+
+struct GTY(()) cgraph_simd_clone {
+  /* Number of words in the SIMD lane associated with this clone.  */
+  unsigned int simdlen;
+
+  /* Number of annotated function arguments in `args'.  This is
+     usually the number of named arguments in FNDECL.  */
+  unsigned int nargs;
+
+  /* Max hardware vector size in bits for integral vectors.  */
+  unsigned int vecsize_int;
+
+  /* Max hardware vector size in bits for floating point vectors.  */
+  unsigned int vecsize_float;
+
+  /* Machine mode of the mask argument(s), if they are to be passed
+     as bitmasks in integer argument(s).  VOIDmode if masks are passed
+     as vectors of characteristic type.  */
+  machine_mode mask_mode;
+
+  /* The mangling character for a given vector size.  This is used
+     to determine the ISA mangling bit as specified in the Intel
+     Vector ABI.  */
+  unsigned char vecsize_mangle;
+
+  /* True if this is the masked, in-branch version of the clone,
+     otherwise false.  */
+  unsigned int inbranch : 1;
+
+  /* Doubly linked list of SIMD clones.  */
+  cgraph_node *prev_clone, *next_clone;
+
+  /* Original cgraph node the SIMD clones were created for.  */
+  cgraph_node *origin;
+
+  /* Annotated function arguments for the original function.  */
+  cgraph_simd_clone_arg GTY((length ("%h.nargs"))) args[1];
+};
+
+/* Function Multiversioning info.  */
+struct GTY((for_user)) cgraph_function_version_info {
+  /* The cgraph_node for which the function version info is stored.  */
+  cgraph_node *this_node;
+  /* Chains all the semantically identical function versions.  The
+     first function in this chain is the version_info node of the
+     default function.  */
+  cgraph_function_version_info *prev;
+  /* If this version node corresponds to a dispatcher for function
+     versions, this points to the version info node of the default
+     function, the first node in the chain.  */
+  cgraph_function_version_info *next;
+  /* If this node corresponds to a function version, this points
+     to the dispatcher function decl, which is the function that must
+     be called to execute the right function version at run-time.
+
+     If this cgraph node is a dispatcher (if dispatcher_function is
+     true, in the cgraph_node struct) for function versions, this
+     points to resolver function, which holds the function body of the
+     dispatcher. The dispatcher decl is an alias to the resolver
+     function decl.  */
+  tree dispatcher_resolver;
+};
+
+#define DEFCIFCODE(code, type, string)	CIF_ ## code,
+/* Reasons for inlining failures.  */
+
+enum cgraph_inline_failed_t {
+#include "cif-code.def"
+  CIF_N_REASONS
+};
+
+enum cgraph_inline_failed_type_t
+{
+  CIF_FINAL_NORMAL = 0,
+  CIF_FINAL_ERROR
+};
+
+struct cgraph_edge;
+
+struct cgraph_edge_hasher : ggc_ptr_hash<cgraph_edge>
+{
+  typedef gimple *compare_type;
+
+  static hashval_t hash (cgraph_edge *);
+  static hashval_t hash (gimple *);
+  static bool equal (cgraph_edge *, gimple *);
+};
+
+/* The cgraph data structure.
+   Each function decl has assigned cgraph_node listing callees and callers.  */
+
+struct GTY((tag ("SYMTAB_FUNCTION"))) cgraph_node : public symtab_node {
+public:
+  friend class symbol_table;
+
+  /* Remove the node from cgraph and all inline clones inlined into it.
+     Skip however removal of FORBIDDEN_NODE and return true if it needs to be
+     removed.  This allows to call the function from outer loop walking clone
+     tree.  */
+  bool remove_symbol_and_inline_clones (cgraph_node *forbidden_node = NULL);
+
+  /* Record all references from cgraph_node that are taken
+     in statement STMT.  */
+  void record_stmt_references (gimple *stmt);
+
+  /* Like cgraph_set_call_stmt but walk the clone tree and update all
+     clones sharing the same function body.
+     When WHOLE_SPECULATIVE_EDGES is true, all three components of
+     speculative edge gets updated.  Otherwise we update only direct
+     call.  */
+  void set_call_stmt_including_clones (gimple *old_stmt, gcall *new_stmt,
+				       bool update_speculative = true);
+
+  /* Walk the alias chain to return the function cgraph_node is alias of.
+     Walk through thunk, too.
+     When AVAILABILITY is non-NULL, get minimal availability in the chain. 
+     When REF is non-NULL, assume that reference happens in symbol REF
+     when determining the availability.  */
+  cgraph_node *function_symbol (enum availability *avail = NULL,
+				struct symtab_node *ref = NULL);
+
+  /* Walk the alias chain to return the function cgraph_node is alias of.
+     Walk through non virtual thunks, too.  Thus we return either a function
+     or a virtual thunk node.
+     When AVAILABILITY is non-NULL, get minimal availability in the chain.  
+     When REF is non-NULL, assume that reference happens in symbol REF
+     when determining the availability.  */
+  cgraph_node *function_or_virtual_thunk_symbol
+				(enum availability *avail = NULL,
+				 struct symtab_node *ref = NULL);
+
+  /* Create node representing clone of N executed COUNT times.  Decrease
+     the execution counts from original node too.
+     The new clone will have decl set to DECL that may or may not be the same
+     as decl of N.
+
+     When UPDATE_ORIGINAL is true, the counts are subtracted from the original
+     function's profile to reflect the fact that part of execution is handled
+     by node.
+     When CALL_DUPLICATOIN_HOOK is true, the ipa passes are acknowledged about
+     the new clone. Otherwise the caller is responsible for doing so later.
+
+     If the new node is being inlined into another one, NEW_INLINED_TO should be
+     the outline function the new one is (even indirectly) inlined to.
+     All hooks will see this in node's global.inlined_to, when invoked.
+     Can be NULL if the node is not inlined.  SUFFIX is string that is appended
+     to the original name.  */
+  cgraph_node *create_clone (tree decl, profile_count count,
+			     bool update_original,
+			     vec<cgraph_edge *> redirect_callers,
+			     bool call_duplication_hook,
+			     cgraph_node *new_inlined_to,
+			     bitmap args_to_skip, const char *suffix = NULL);
+
+  /* Create callgraph node clone with new declaration.  The actual body will be
+     copied later at compilation stage.  The name of the new clone will be
+     constructed from the name of the original node, SUFFIX and NUM_SUFFIX.  */
+  cgraph_node *create_virtual_clone (vec<cgraph_edge *> redirect_callers,
+				     vec<ipa_replace_map *, va_gc> *tree_map,
+				     bitmap args_to_skip, const char * suffix,
+				     unsigned num_suffix);
+
+  /* cgraph node being removed from symbol table; see if its entry can be
+   replaced by other inline clone.  */
+  cgraph_node *find_replacement (void);
+
+  /* Create a new cgraph node which is the new version of
+     callgraph node.  REDIRECT_CALLERS holds the callers
+     edges which should be redirected to point to
+     NEW_VERSION.  ALL the callees edges of the node
+     are cloned to the new version node.  Return the new
+     version node.
+
+     If non-NULL BLOCK_TO_COPY determine what basic blocks
+     was copied to prevent duplications of calls that are dead
+     in the clone.
+
+     SUFFIX is string that is appended to the original name.  */
+
+  cgraph_node *create_version_clone (tree new_decl,
+				    vec<cgraph_edge *> redirect_callers,
+				    bitmap bbs_to_copy,
+				    const char *suffix = NULL);
+
+  /* Perform function versioning.
+     Function versioning includes copying of the tree and
+     a callgraph update (creating a new cgraph node and updating
+     its callees and callers).
+
+     REDIRECT_CALLERS varray includes the edges to be redirected
+     to the new version.
+
+     TREE_MAP is a mapping of tree nodes we want to replace with
+     new ones (according to results of prior analysis).
+
+     If non-NULL ARGS_TO_SKIP determine function parameters to remove
+     from new version.
+     If SKIP_RETURN is true, the new version will return void.
+     If non-NULL BLOCK_TO_COPY determine what basic blocks to copy.
+     If non_NULL NEW_ENTRY determine new entry BB of the clone.
+
+     If TARGET_ATTRIBUTES is non-null, when creating a new declaration,
+     add the attributes to DECL_ATTRIBUTES.  And call valid_attribute_p
+     that will promote value of the attribute DECL_FUNCTION_SPECIFIC_TARGET
+     of the declaration.
+
+     Return the new version's cgraph node.  */
+  cgraph_node *create_version_clone_with_body
+    (vec<cgraph_edge *> redirect_callers,
+     vec<ipa_replace_map *, va_gc> *tree_map, bitmap args_to_skip,
+     bool skip_return, bitmap bbs_to_copy, basic_block new_entry_block,
+     const char *clone_name, tree target_attributes = NULL_TREE);
+
+  /* Insert a new cgraph_function_version_info node into cgraph_fnver_htab
+     corresponding to cgraph_node.  */
+  cgraph_function_version_info *insert_new_function_version (void);
+
+  /* Get the cgraph_function_version_info node corresponding to node.  */
+  cgraph_function_version_info *function_version (void);
+
+  /* Discover all functions and variables that are trivially needed, analyze
+     them as well as all functions and variables referred by them  */
+  void analyze (void);
+
+  /* Add thunk alias into callgraph.  The alias declaration is ALIAS and it
+     aliases DECL with an adjustments made into the first parameter.
+     See comments in struct cgraph_thunk_info for detail on the parameters.  */
+  cgraph_node * create_thunk (tree alias, tree, bool this_adjusting,
+			      HOST_WIDE_INT fixed_offset,
+			      HOST_WIDE_INT virtual_value,
+			      HOST_WIDE_INT indirect_offset,
+			      tree virtual_offset,
+			      tree real_alias);
+
+
+  /* Return node that alias is aliasing.  */
+  inline cgraph_node *get_alias_target (void);
+
+  /* Given function symbol, walk the alias chain to return the function node
+     is alias of. Do not walk through thunks.
+     When AVAILABILITY is non-NULL, get minimal availability in the chain.
+     When REF is non-NULL, assume that reference happens in symbol REF
+     when determining the availability.  */
+
+  cgraph_node *ultimate_alias_target (availability *availability = NULL,
+				      symtab_node *ref = NULL);
+
+  /* Expand thunk NODE to gimple if possible.
+     When FORCE_GIMPLE_THUNK is true, gimple thunk is created and
+     no assembler is produced.
+     When OUTPUT_ASM_THUNK is true, also produce assembler for
+     thunks that are not lowered.  */
+  bool expand_thunk (bool output_asm_thunks, bool force_gimple_thunk);
+
+  /*  Call expand_thunk on all callers that are thunks and analyze those
+      nodes that were expanded.  */
+  void expand_all_artificial_thunks ();
+
+  /* Assemble thunks and aliases associated to node.  */
+  void assemble_thunks_and_aliases (void);
+
+  /* Expand function specified by node.  */
+  void expand (void);
+
+  /* As an GCC extension we allow redefinition of the function.  The
+     semantics when both copies of bodies differ is not well defined.
+     We replace the old body with new body so in unit at a time mode
+     we always use new body, while in normal mode we may end up with
+     old body inlined into some functions and new body expanded and
+     inlined in others.  */
+  void reset (void);
+
+  /* Creates a wrapper from cgraph_node to TARGET node. Thunk is used for this
+     kind of wrapper method.  */
+  void create_wrapper (cgraph_node *target);
+
+  /* Verify cgraph nodes of the cgraph node.  */
+  void DEBUG_FUNCTION verify_node (void);
+
+  /* Remove function from symbol table.  */
+  void remove (void);
+
+  /* Dump call graph node to file F.  */
+  void dump (FILE *f);
+
+  /* Dump call graph node to stderr.  */
+  void DEBUG_FUNCTION debug (void);
+
+  /* When doing LTO, read cgraph_node's body from disk if it is not already
+     present.  */
+  bool get_untransformed_body (void);
+
+  /* Prepare function body.  When doing LTO, read cgraph_node's body from disk 
+     if it is not already present.  When some IPA transformations are scheduled,
+     apply them.  */
+  bool get_body (void);
+
+  /* Release memory used to represent body of function.
+     Use this only for functions that are released before being translated to
+     target code (i.e. RTL).  Functions that are compiled to RTL and beyond
+     are free'd in final.c via free_after_compilation().  */
+  void release_body (bool keep_arguments = false);
+
+  /* Return the DECL_STRUCT_FUNCTION of the function.  */
+  struct function *get_fun (void);
+
+  /* cgraph_node is no longer nested function; update cgraph accordingly.  */
+  void unnest (void);
+
+  /* Bring cgraph node local.  */
+  void make_local (void);
+
+  /* Likewise indicate that a node is having address taken.  */
+  void mark_address_taken (void);
+
+  /* Set fialization priority to PRIORITY.  */
+  void set_fini_priority (priority_type priority);
+
+  /* Return the finalization priority.  */
+  priority_type get_fini_priority (void);
+
+  /* Create edge from a given function to CALLEE in the cgraph.  */
+  cgraph_edge *create_edge (cgraph_node *callee,
+			    gcall *call_stmt, profile_count count);
+
+  /* Create an indirect edge with a yet-undetermined callee where the call
+     statement destination is a formal parameter of the caller with index
+     PARAM_INDEX. */
+  cgraph_edge *create_indirect_edge (gcall *call_stmt, int ecf_flags,
+				     profile_count count,
+				     bool compute_indirect_info = true);
+
+  /* Like cgraph_create_edge walk the clone tree and update all clones sharing
+   same function body.  If clones already have edge for OLD_STMT; only
+   update the edge same way as cgraph_set_call_stmt_including_clones does.  */
+  void create_edge_including_clones (cgraph_node *callee,
+				     gimple *old_stmt, gcall *stmt,
+				     profile_count count,
+				     cgraph_inline_failed_t reason);
+
+  /* Return the callgraph edge representing the GIMPLE_CALL statement
+     CALL_STMT.  */
+  cgraph_edge *get_edge (gimple *call_stmt);
+
+  /* Collect all callers of cgraph_node and its aliases that are known to lead
+     to NODE (i.e. are not overwritable) and that are not thunks.  */
+  vec<cgraph_edge *> collect_callers (void);
+
+  /* Remove all callers from the node.  */
+  void remove_callers (void);
+
+  /* Remove all callees from the node.  */
+  void remove_callees (void);
+
+  /* Return function availability.  See cgraph.h for description of individual
+     return values.  */
+  enum availability get_availability (symtab_node *ref = NULL);
+
+  /* Set TREE_NOTHROW on cgraph_node's decl and on aliases of the node
+     if any to NOTHROW.  */
+  bool set_nothrow_flag (bool nothrow);
+
+  /* SET DECL_IS_MALLOC on cgraph_node's decl and on aliases of the node
+     if any.  */
+  bool set_malloc_flag (bool malloc_p);
+
+  /* If SET_CONST is true, mark function, aliases and thunks to be ECF_CONST.
+    If SET_CONST if false, clear the flag.
+
+    When setting the flag be careful about possible interposition and
+    do not set the flag for functions that can be interposet and set pure
+    flag for functions that can bind to other definition. 
+
+    Return true if any change was done. */
+
+  bool set_const_flag (bool set_const, bool looping);
+
+  /* Set DECL_PURE_P on cgraph_node's decl and on aliases of the node
+     if any to PURE.
+
+     When setting the flag, be careful about possible interposition.
+     Return true if any change was done. */
+
+  bool set_pure_flag (bool pure, bool looping);
+
+  /* Call callback on function and aliases associated to the function.
+     When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
+     skipped. */
+
+  bool call_for_symbol_and_aliases (bool (*callback) (cgraph_node *,
+						      void *),
+				    void *data, bool include_overwritable);
+
+  /* Call callback on cgraph_node, thunks and aliases associated to NODE.
+     When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
+     skipped.  When EXCLUDE_VIRTUAL_THUNKS is true, virtual thunks are
+     skipped.  */
+  bool call_for_symbol_thunks_and_aliases (bool (*callback) (cgraph_node *node,
+							     void *data),
+					   void *data,
+					   bool include_overwritable,
+					   bool exclude_virtual_thunks = false);
+
+  /* Likewise indicate that a node is needed, i.e. reachable via some
+     external means.  */
+  inline void mark_force_output (void);
+
+  /* Return true when function can be marked local.  */
+  bool local_p (void);
+
+  /* Return true if cgraph_node can be made local for API change.
+     Extern inline functions and C++ COMDAT functions can be made local
+     at the expense of possible code size growth if function is used in multiple
+     compilation units.  */
+  bool can_be_local_p (void);
+
+  /* Return true when cgraph_node cannot return or throw and thus
+     it is safe to ignore its side effects for IPA analysis.  */
+  bool cannot_return_p (void);
+
+  /* Return true when function cgraph_node and all its aliases are only called
+     directly.
+     i.e. it is not externally visible, address was not taken and
+     it is not used in any other non-standard way.  */
+  bool only_called_directly_p (void);
+
+  /* Return true when function is only called directly or it has alias.
+     i.e. it is not externally visible, address was not taken and
+     it is not used in any other non-standard way.  */
+  inline bool only_called_directly_or_aliased_p (void);
+
+  /* Return true when function cgraph_node can be expected to be removed
+     from program when direct calls in this compilation unit are removed.
+
+     As a special case COMDAT functions are
+     cgraph_can_remove_if_no_direct_calls_p while the are not
+     cgraph_only_called_directly_p (it is possible they are called from other
+     unit)
+
+     This function behaves as cgraph_only_called_directly_p because eliminating
+     all uses of COMDAT function does not make it necessarily disappear from
+     the program unless we are compiling whole program or we do LTO.  In this
+     case we know we win since dynamic linking will not really discard the
+     linkonce section.  
+
+     If WILL_INLINE is true, assume that function will be inlined into all the
+     direct calls.  */
+  bool will_be_removed_from_program_if_no_direct_calls_p
+	 (bool will_inline = false);
+
+  /* Return true when function can be removed from callgraph
+     if all direct calls and references are eliminated.  The function does
+     not take into account comdat groups.  */
+  bool can_remove_if_no_direct_calls_and_refs_p (void);
+
+  /* Return true when function cgraph_node and its aliases can be removed from
+     callgraph if all direct calls are eliminated. 
+     If WILL_INLINE is true, assume that function will be inlined into all the
+     direct calls.  */
+  bool can_remove_if_no_direct_calls_p (bool will_inline = false);
+
+  /* Return true when callgraph node is a function with Gimple body defined
+     in current unit.  Functions can also be define externally or they
+     can be thunks with no Gimple representation.
+
+     Note that at WPA stage, the function body may not be present in memory.  */
+  inline bool has_gimple_body_p (void);
+
+  /* Return true if this node represents a former, i.e. an expanded, thunk.  */
+  inline bool former_thunk_p (void);
+
+  /* Return true if function should be optimized for size.  */
+  bool optimize_for_size_p (void);
+
+  /* Dump the callgraph to file F.  */
+  static void dump_cgraph (FILE *f);
+
+  /* Dump the call graph to stderr.  */
+  static inline
+  void debug_cgraph (void)
+  {
+    dump_cgraph (stderr);
+  }
+
+  /* Get unique identifier of the node.  */
+  inline int get_uid ()
+  {
+    return m_uid;
+  }
+
+  /* Get summary id of the node.  */
+  inline int get_summary_id ()
+  {
+    return m_summary_id;
+  }
+
+  /* Record that DECL1 and DECL2 are semantically identical function
+     versions.  */
+  static void record_function_versions (tree decl1, tree decl2);
+
+  /* Remove the cgraph_function_version_info and cgraph_node for DECL.  This
+     DECL is a duplicate declaration.  */
+  static void delete_function_version_by_decl (tree decl);
+
+  /* Add the function FNDECL to the call graph.
+     Unlike finalize_function, this function is intended to be used
+     by middle end and allows insertion of new function at arbitrary point
+     of compilation.  The function can be either in high, low or SSA form
+     GIMPLE.
+
+     The function is assumed to be reachable and have address taken (so no
+     API breaking optimizations are performed on it).
+
+     Main work done by this function is to enqueue the function for later
+     processing to avoid need the passes to be re-entrant.  */
+  static void add_new_function (tree fndecl, bool lowered);
+
+  /* Return callgraph node for given symbol and check it is a function. */
+  static inline cgraph_node *get (const_tree decl)
+  {
+    gcc_checking_assert (TREE_CODE (decl) == FUNCTION_DECL);
+    return dyn_cast <cgraph_node *> (symtab_node::get (decl));
+  }
+
+  /* DECL has been parsed.  Take it, queue it, compile it at the whim of the
+     logic in effect.  If NO_COLLECT is true, then our caller cannot stand to
+     have the garbage collector run at the moment.  We would need to either
+     create a new GC context, or just not compile right now.  */
+  static void finalize_function (tree, bool);
+
+  /* Return cgraph node assigned to DECL.  Create new one when needed.  */
+  static cgraph_node * create (tree decl);
+
+  /* Try to find a call graph node for declaration DECL and if it does not
+     exist or if it corresponds to an inline clone, create a new one.  */
+  static cgraph_node * get_create (tree);
+
+  /* Return local info for the compiled function.  */
+  static cgraph_local_info *local_info (tree decl);
+
+  /* Return local info for the compiled function.  */
+  static struct cgraph_rtl_info *rtl_info (tree);
+
+  /* Return the cgraph node that has ASMNAME for its DECL_ASSEMBLER_NAME.
+     Return NULL if there's no such node.  */
+  static cgraph_node *get_for_asmname (tree asmname);
+
+  /* Attempt to mark ALIAS as an alias to DECL.  Return alias node if
+     successful and NULL otherwise.
+     Same body aliases are output whenever the body of DECL is output,
+     and cgraph_node::get (ALIAS) transparently
+     returns cgraph_node::get (DECL).  */
+  static cgraph_node * create_same_body_alias (tree alias, tree decl);
+
+  /* Verify whole cgraph structure.  */
+  static void DEBUG_FUNCTION verify_cgraph_nodes (void);
+
+  /* Verify cgraph, if consistency checking is enabled.  */
+  static inline void checking_verify_cgraph_nodes (void);
+
+  /* Worker to bring NODE local.  */
+  static bool make_local (cgraph_node *node, void *);
+
+  /* Mark ALIAS as an alias to DECL.  DECL_NODE is cgraph node representing
+     the function body is associated
+     with (not necessarily cgraph_node (DECL).  */
+  static cgraph_node *create_alias (tree alias, tree target);
+
+  /* Return true if NODE has thunk.  */
+  static bool has_thunk_p (cgraph_node *node, void *);
+
+  cgraph_edge *callees;
+  cgraph_edge *callers;
+  /* List of edges representing indirect calls with a yet undetermined
+     callee.  */
+  cgraph_edge *indirect_calls;
+  /* For nested functions points to function the node is nested in.  */
+  cgraph_node *origin;
+  /* Points to first nested function, if any.  */
+  cgraph_node *nested;
+  /* Pointer to the next function with same origin, if any.  */
+  cgraph_node *next_nested;
+  /* Pointer to the next clone.  */
+  cgraph_node *next_sibling_clone;
+  cgraph_node *prev_sibling_clone;
+  cgraph_node *clones;
+  cgraph_node *clone_of;
+  /* For functions with many calls sites it holds map from call expression
+     to the edge to speed up cgraph_edge function.  */
+  hash_table<cgraph_edge_hasher> *GTY(()) call_site_hash;
+  /* Declaration node used to be clone of. */
+  tree former_clone_of;
+
+  /* If this is a SIMD clone, this points to the SIMD specific
+     information for it.  */
+  cgraph_simd_clone *simdclone;
+  /* If this function has SIMD clones, this points to the first clone.  */
+  cgraph_node *simd_clones;
+
+  /* Interprocedural passes scheduled to have their transform functions
+     applied next time we execute local pass on them.  We maintain it
+     per-function in order to allow IPA passes to introduce new functions.  */
+  vec<ipa_opt_pass> GTY((skip)) ipa_transforms_to_apply;
+
+  cgraph_local_info local;
+  cgraph_global_info global;
+  struct cgraph_rtl_info *rtl;
+  cgraph_clone_info clone;
+  cgraph_thunk_info thunk;
+
+  /* Expected number of executions: calculated in profile.c.  */
+  profile_count count;
+  /* How to scale counts at materialization time; used to merge
+     LTO units with different number of profile runs.  */
+  int count_materialization_scale;
+  /* ID assigned by the profiling.  */
+  unsigned int profile_id;
+  /* Time profiler: first run of function.  */
+  int tp_first_run;
+
+  /* Set when decl is an abstract function pointed to by the
+     ABSTRACT_DECL_ORIGIN of a reachable function.  */
+  unsigned used_as_abstract_origin : 1;
+  /* Set once the function is lowered (i.e. its CFG is built).  */
+  unsigned lowered : 1;
+  /* Set once the function has been instantiated and its callee
+     lists created.  */
+  unsigned process : 1;
+  /* How commonly executed the node is.  Initialized during branch
+     probabilities pass.  */
+  ENUM_BITFIELD (node_frequency) frequency : 2;
+  /* True when function can only be called at startup (from static ctor).  */
+  unsigned only_called_at_startup : 1;
+  /* True when function can only be called at startup (from static dtor).  */
+  unsigned only_called_at_exit : 1;
+  /* True when function is the transactional clone of a function which
+     is called only from inside transactions.  */
+  /* ?? We should be able to remove this.  We have enough bits in
+     cgraph to calculate it.  */
+  unsigned tm_clone : 1;
+  /* True if this decl is a dispatcher for function versions.  */
+  unsigned dispatcher_function : 1;
+  /* True if this decl calls a COMDAT-local function.  This is set up in
+     compute_fn_summary and inline_call.  */
+  unsigned calls_comdat_local : 1;
+  /* True if node has been created by merge operation in IPA-ICF.  */
+  unsigned icf_merged: 1;
+  /* True if call to node can't result in a call to free, munmap or
+     other operation that could make previously non-trapping memory
+     accesses trapping.  */
+  unsigned nonfreeing_fn : 1;
+  /* True if there was multiple COMDAT bodies merged by lto-symtab.  */
+  unsigned merged_comdat : 1;
+  /* True if function was created to be executed in parallel.  */
+  unsigned parallelized_function : 1;
+  /* True if function is part split out by ipa-split.  */
+  unsigned split_part : 1;
+  /* True if the function appears as possible target of indirect call.  */
+  unsigned indirect_call_target : 1;
+
+private:
+  /* Unique id of the node.  */
+  int m_uid;
+
+  /* Summary id that is recycled.  */
+  int m_summary_id;
+
+  /* Worker for call_for_symbol_and_aliases.  */
+  bool call_for_symbol_and_aliases_1 (bool (*callback) (cgraph_node *,
+						        void *),
+				      void *data, bool include_overwritable);
+};
+
+/* A cgraph node set is a collection of cgraph nodes.  A cgraph node
+   can appear in multiple sets.  */
+struct cgraph_node_set_def
+{
+  hash_map<cgraph_node *, size_t> *map;
+  vec<cgraph_node *> nodes;
+};
+
+typedef cgraph_node_set_def *cgraph_node_set;
+typedef struct varpool_node_set_def *varpool_node_set;
+
+class varpool_node;
+
+/* A varpool node set is a collection of varpool nodes.  A varpool node
+   can appear in multiple sets.  */
+struct varpool_node_set_def
+{
+  hash_map<varpool_node *, size_t> * map;
+  vec<varpool_node *> nodes;
+};
+
+/* Iterator structure for cgraph node sets.  */
+struct cgraph_node_set_iterator
+{
+  cgraph_node_set set;
+  unsigned index;
+};
+
+/* Iterator structure for varpool node sets.  */
+struct varpool_node_set_iterator
+{
+  varpool_node_set set;
+  unsigned index;
+};
+
+/* Context of polymorphic call. It represent information about the type of
+   instance that may reach the call.  This is used by ipa-devirt walkers of the
+   type inheritance graph.  */
+
+class GTY(()) ipa_polymorphic_call_context {
+public:
+  /* The called object appears in an object of type OUTER_TYPE
+     at offset OFFSET.  When information is not 100% reliable, we
+     use SPECULATIVE_OUTER_TYPE and SPECULATIVE_OFFSET. */
+  HOST_WIDE_INT offset;
+  HOST_WIDE_INT speculative_offset;
+  tree outer_type;
+  tree speculative_outer_type;
+  /* True if outer object may be in construction or destruction.  */
+  unsigned maybe_in_construction : 1;
+  /* True if outer object may be of derived type.  */
+  unsigned maybe_derived_type : 1;
+  /* True if speculative outer object may be of derived type.  We always
+     speculate that construction does not happen.  */
+  unsigned speculative_maybe_derived_type : 1;
+  /* True if the context is invalid and all calls should be redirected
+     to BUILTIN_UNREACHABLE.  */
+  unsigned invalid : 1;
+  /* True if the outer type is dynamic.  */
+  unsigned dynamic : 1;
+
+  /* Build empty "I know nothing" context.  */
+  ipa_polymorphic_call_context ();
+  /* Build polymorphic call context for indirect call E.  */
+  ipa_polymorphic_call_context (cgraph_edge *e);
+  /* Build polymorphic call context for IP invariant CST.
+     If specified, OTR_TYPE specify the type of polymorphic call
+     that takes CST+OFFSET as a prameter.  */
+  ipa_polymorphic_call_context (tree cst, tree otr_type = NULL,
+				HOST_WIDE_INT offset = 0);
+  /* Build context for pointer REF contained in FNDECL at statement STMT.
+     if INSTANCE is non-NULL, return pointer to the object described by
+     the context.  */
+  ipa_polymorphic_call_context (tree fndecl, tree ref, gimple *stmt,
+				tree *instance = NULL);
+
+  /* Look for vtable stores or constructor calls to work out dynamic type
+     of memory location.  */
+  bool get_dynamic_type (tree, tree, tree, gimple *, unsigned *);
+
+  /* Make context non-speculative.  */
+  void clear_speculation ();
+
+  /* Produce context specifying all derrived types of OTR_TYPE.  If OTR_TYPE is
+     NULL, the context is set to dummy "I know nothing" setting.  */
+  void clear_outer_type (tree otr_type = NULL);
+
+  /* Walk container types and modify context to point to actual class
+     containing OTR_TYPE (if non-NULL) as base class.
+     Return true if resulting context is valid.
+
+     When CONSIDER_PLACEMENT_NEW is false, reject contexts that may be made
+     valid only via allocation of new polymorphic type inside by means
+     of placement new.
+
+     When CONSIDER_BASES is false, only look for actual fields, not base types
+     of TYPE.  */
+  bool restrict_to_inner_class (tree otr_type,
+				bool consider_placement_new = true,
+				bool consider_bases = true);
+
+  /* Adjust all offsets in contexts by given number of bits.  */
+  void offset_by (HOST_WIDE_INT);
+  /* Use when we cannot track dynamic type change.  This speculatively assume
+     type change is not happening.  */
+  void possible_dynamic_type_change (bool, tree otr_type = NULL);
+  /* Assume that both THIS and a given context is valid and strenghten THIS
+     if possible.  Return true if any strenghtening was made.
+     If actual type the context is being used in is known, OTR_TYPE should be
+     set accordingly. This improves quality of combined result.  */
+  bool combine_with (ipa_polymorphic_call_context, tree otr_type = NULL);
+  bool meet_with (ipa_polymorphic_call_context, tree otr_type = NULL);
+
+  /* Return TRUE if context is fully useless.  */
+  bool useless_p () const;
+  /* Return TRUE if this context conveys the same information as X.  */
+  bool equal_to (const ipa_polymorphic_call_context &x) const;
+
+  /* Dump human readable context to F.  If NEWLINE is true, it will be
+     terminated by a newline.  */
+  void dump (FILE *f, bool newline = true) const;
+  void DEBUG_FUNCTION debug () const;
+
+  /* LTO streaming.  */
+  void stream_out (struct output_block *) const;
+  void stream_in (struct lto_input_block *, struct data_in *data_in);
+
+private:
+  bool combine_speculation_with (tree, HOST_WIDE_INT, bool, tree);
+  bool meet_speculation_with (tree, HOST_WIDE_INT, bool, tree);
+  void set_by_decl (tree, HOST_WIDE_INT);
+  bool set_by_invariant (tree, tree, HOST_WIDE_INT);
+  bool speculation_consistent_p (tree, HOST_WIDE_INT, bool, tree) const;
+  void make_speculative (tree otr_type = NULL);
+};
+
+/* Structure containing additional information about an indirect call.  */
+
+struct GTY(()) cgraph_indirect_call_info
+{
+  /* When agg_content is set, an offset where the call pointer is located
+     within the aggregate.  */
+  HOST_WIDE_INT offset;
+  /* Context of the polymorphic call; use only when POLYMORPHIC flag is set.  */
+  ipa_polymorphic_call_context context;
+  /* OBJ_TYPE_REF_TOKEN of a polymorphic call (if polymorphic is set).  */
+  HOST_WIDE_INT otr_token;
+  /* Type of the object from OBJ_TYPE_REF_OBJECT. */
+  tree otr_type;
+  /* Index of the parameter that is called.  */
+  int param_index;
+  /* ECF flags determined from the caller.  */
+  int ecf_flags;
+  /* Profile_id of common target obtrained from profile.  */
+  int common_target_id;
+  /* Probability that call will land in function with COMMON_TARGET_ID.  */
+  int common_target_probability;
+
+  /* Set when the call is a virtual call with the parameter being the
+     associated object pointer rather than a simple direct call.  */
+  unsigned polymorphic : 1;
+  /* Set when the call is a call of a pointer loaded from contents of an
+     aggregate at offset.  */
+  unsigned agg_contents : 1;
+  /* Set when this is a call through a member pointer.  */
+  unsigned member_ptr : 1;
+  /* When the agg_contents bit is set, this one determines whether the
+     destination is loaded from a parameter passed by reference. */
+  unsigned by_ref : 1;
+  /* When the agg_contents bit is set, this one determines whether we can
+     deduce from the function body that the loaded value from the reference is
+     never modified between the invocation of the function and the load
+     point.  */
+  unsigned guaranteed_unmodified : 1;
+  /* For polymorphic calls this specify whether the virtual table pointer
+     may have changed in between function entry and the call.  */
+  unsigned vptr_changed : 1;
+};
+
+struct GTY((chain_next ("%h.next_caller"), chain_prev ("%h.prev_caller"),
+	    for_user)) cgraph_edge {
+  friend class cgraph_node;
+  friend class symbol_table;
+
+  /* Remove the edge in the cgraph.  */
+  void remove (void);
+
+  /* Change field call_stmt of edge to NEW_STMT.
+     If UPDATE_SPECULATIVE and E is any component of speculative
+     edge, then update all components.  */
+  void set_call_stmt (gcall *new_stmt, bool update_speculative = true);
+
+  /* Redirect callee of the edge to N.  The function does not update underlying
+     call expression.  */
+  void redirect_callee (cgraph_node *n);
+
+  /* If the edge does not lead to a thunk, simply redirect it to N.  Otherwise
+     create one or more equivalent thunks for N and redirect E to the first in
+     the chain.  Note that it is then necessary to call
+     n->expand_all_artificial_thunks once all callers are redirected.  */
+  void redirect_callee_duplicating_thunks (cgraph_node *n);
+
+  /* Make an indirect edge with an unknown callee an ordinary edge leading to
+     CALLEE.  DELTA is an integer constant that is to be added to the this
+     pointer (first parameter) to compensate for skipping
+     a thunk adjustment.  */
+  cgraph_edge *make_direct (cgraph_node *callee);
+
+  /* Turn edge into speculative call calling N2. Update
+     the profile so the direct call is taken COUNT times
+     with FREQUENCY.  */
+  cgraph_edge *make_speculative (cgraph_node *n2, profile_count direct_count);
+
+   /* Given speculative call edge, return all three components.  */
+  void speculative_call_info (cgraph_edge *&direct, cgraph_edge *&indirect,
+			      ipa_ref *&reference);
+
+  /* Speculative call edge turned out to be direct call to CALLE_DECL.
+     Remove the speculative call sequence and return edge representing the call.
+     It is up to caller to redirect the call as appropriate. */
+  cgraph_edge *resolve_speculation (tree callee_decl = NULL);
+
+  /* If necessary, change the function declaration in the call statement
+     associated with the edge so that it corresponds to the edge callee.  */
+  gimple *redirect_call_stmt_to_callee (void);
+
+  /* Create clone of edge in the node N represented
+     by CALL_EXPR the callgraph.  */
+  cgraph_edge * clone (cgraph_node *n, gcall *call_stmt, unsigned stmt_uid,
+		       profile_count num, profile_count den,
+		       bool update_original);
+
+  /* Verify edge count and frequency.  */
+  bool verify_count ();
+
+  /* Return true when call of edge cannot lead to return from caller
+     and thus it is safe to ignore its side effects for IPA analysis
+     when computing side effects of the caller.  */
+  bool cannot_lead_to_return_p (void);
+
+  /* Return true when the edge represents a direct recursion.  */
+  bool recursive_p (void);
+
+  /* Return true if the call can be hot.  */
+  bool maybe_hot_p (void);
+
+  /* Get unique identifier of the edge.  */
+  inline int get_uid ()
+  {
+    return m_uid;
+  }
+
+  /* Get summary id of the edge.  */
+  inline int get_summary_id ()
+  {
+    return m_summary_id;
+  }
+
+  /* Rebuild cgraph edges for current function node.  This needs to be run after
+     passes that don't update the cgraph.  */
+  static unsigned int rebuild_edges (void);
+
+  /* Rebuild cgraph references for current function node.  This needs to be run
+     after passes that don't update the cgraph.  */
+  static void rebuild_references (void);
+
+  /* During LTO stream in this can be used to check whether call can possibly
+     be internal to the current translation unit.  */
+  bool possibly_call_in_translation_unit_p (void);
+
+  /* Expected number of executions: calculated in profile.c.  */
+  profile_count count;
+  cgraph_node *caller;
+  cgraph_node *callee;
+  cgraph_edge *prev_caller;
+  cgraph_edge *next_caller;
+  cgraph_edge *prev_callee;
+  cgraph_edge *next_callee;
+  gcall *call_stmt;
+  /* Additional information about an indirect call.  Not cleared when an edge
+     becomes direct.  */
+  cgraph_indirect_call_info *indirect_info;
+  PTR GTY ((skip (""))) aux;
+  /* When equal to CIF_OK, inline this call.  Otherwise, points to the
+     explanation why function was not inlined.  */
+  enum cgraph_inline_failed_t inline_failed;
+  /* The stmt_uid of call_stmt.  This is used by LTO to recover the call_stmt
+     when the function is serialized in.  */
+  unsigned int lto_stmt_uid;
+  /* Whether this edge was made direct by indirect inlining.  */
+  unsigned int indirect_inlining_edge : 1;
+  /* Whether this edge describes an indirect call with an undetermined
+     callee.  */
+  unsigned int indirect_unknown_callee : 1;
+  /* Whether this edge is still a dangling  */
+  /* True if the corresponding CALL stmt cannot be inlined.  */
+  unsigned int call_stmt_cannot_inline_p : 1;
+  /* Can this call throw externally?  */
+  unsigned int can_throw_external : 1;
+  /* Edges with SPECULATIVE flag represents indirect calls that was
+     speculatively turned into direct (i.e. by profile feedback).
+     The final code sequence will have form:
+
+     if (call_target == expected_fn)
+       expected_fn ();
+     else
+       call_target ();
+
+     Every speculative call is represented by three components attached
+     to a same call statement:
+     1) a direct call (to expected_fn)
+     2) an indirect call (to call_target)
+     3) a IPA_REF_ADDR refrence to expected_fn.
+
+     Optimizers may later redirect direct call to clone, so 1) and 3)
+     do not need to necesarily agree with destination.  */
+  unsigned int speculative : 1;
+  /* Set to true when caller is a constructor or destructor of polymorphic
+     type.  */
+  unsigned in_polymorphic_cdtor : 1;
+
+  /* Return true if call must bind to current definition.  */
+  bool binds_to_current_def_p ();
+
+  /* Expected frequency of executions within the function.
+     When set to CGRAPH_FREQ_BASE, the edge is expected to be called once
+     per function call.  The range is 0 to CGRAPH_FREQ_MAX.  */
+  int frequency ();
+
+  /* Expected frequency of executions within the function.  */
+  sreal sreal_frequency ();
+private:
+  /* Unique id of the edge.  */
+  int m_uid;
+
+  /* Summary id that is recycled.  */
+  int m_summary_id;
+
+  /* Remove the edge from the list of the callers of the callee.  */
+  void remove_caller (void);
+
+  /* Remove the edge from the list of the callees of the caller.  */
+  void remove_callee (void);
+
+  /* Set callee N of call graph edge and add it to the corresponding set of
+     callers. */
+  void set_callee (cgraph_node *n);
+
+  /* Output flags of edge to a file F.  */
+  void dump_edge_flags (FILE *f);
+
+  /* Verify that call graph edge corresponds to DECL from the associated
+     statement.  Return true if the verification should fail.  */
+  bool verify_corresponds_to_fndecl (tree decl);
+};
+
+#define CGRAPH_FREQ_BASE 1000
+#define CGRAPH_FREQ_MAX 100000
+
+/* The varpool data structure.
+   Each static variable decl has assigned varpool_node.  */
+
+class GTY((tag ("SYMTAB_VARIABLE"))) varpool_node : public symtab_node {
+public:
+  /* Dump given varpool node to F.  */
+  void dump (FILE *f);
+
+  /* Dump given varpool node to stderr.  */
+  void DEBUG_FUNCTION debug (void);
+
+  /* Remove variable from symbol table.  */
+  void remove (void);
+
+  /* Remove node initializer when it is no longer needed.  */
+  void remove_initializer (void);
+
+  void analyze (void);
+
+  /* Return variable availability.  */
+  availability get_availability (symtab_node *ref = NULL);
+
+  /* When doing LTO, read variable's constructor from disk if
+     it is not already present.  */
+  tree get_constructor (void);
+
+  /* Return true if variable has constructor that can be used for folding.  */
+  bool ctor_useable_for_folding_p (void);
+
+  /* For given variable pool node, walk the alias chain to return the function
+     the variable is alias of. Do not walk through thunks.
+     When AVAILABILITY is non-NULL, get minimal availability in the chain.
+     When REF is non-NULL, assume that reference happens in symbol REF
+     when determining the availability.  */
+  inline varpool_node *ultimate_alias_target
+    (availability *availability = NULL, symtab_node *ref = NULL);
+
+  /* Return node that alias is aliasing.  */
+  inline varpool_node *get_alias_target (void);
+
+  /* Output one variable, if necessary.  Return whether we output it.  */
+  bool assemble_decl (void);
+
+  /* For variables in named sections make sure get_variable_section
+     is called before we switch to those sections.  Then section
+     conflicts between read-only and read-only requiring relocations
+     sections can be resolved.  */
+  void finalize_named_section_flags (void);
+
+  /* Call calback on varpool symbol and aliases associated to varpool symbol.
+     When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
+     skipped. */
+  bool call_for_symbol_and_aliases (bool (*callback) (varpool_node *, void *),
+				    void *data,
+				    bool include_overwritable);
+
+  /* Return true when variable should be considered externally visible.  */
+  bool externally_visible_p (void);
+
+  /* Return true when all references to variable must be visible
+     in ipa_ref_list.
+     i.e. if the variable is not externally visible or not used in some magic
+     way (asm statement or such).
+     The magic uses are all summarized in force_output flag.  */
+  inline bool all_refs_explicit_p ();
+
+  /* Return true when variable can be removed from variable pool
+     if all direct calls are eliminated.  */
+  inline bool can_remove_if_no_refs_p (void);
+
+  /* Add the variable DECL to the varpool.
+     Unlike finalize_decl function is intended to be used
+     by middle end and allows insertion of new variable at arbitrary point
+     of compilation.  */
+  static void add (tree decl);
+
+  /* Return varpool node for given symbol and check it is a function. */
+  static inline varpool_node *get (const_tree decl);
+
+  /* Mark DECL as finalized.  By finalizing the declaration, frontend instruct
+     the middle end to output the variable to asm file, if needed or externally
+     visible.  */
+  static void finalize_decl (tree decl);
+
+  /* Attempt to mark ALIAS as an alias to DECL.  Return TRUE if successful.
+     Extra name aliases are output whenever DECL is output.  */
+  static varpool_node * create_extra_name_alias (tree alias, tree decl);
+
+  /* Attempt to mark ALIAS as an alias to DECL.  Return TRUE if successful.
+     Extra name aliases are output whenever DECL is output.  */
+  static varpool_node * create_alias (tree, tree);
+
+  /* Dump the variable pool to F.  */
+  static void dump_varpool (FILE *f);
+
+  /* Dump the variable pool to stderr.  */
+  static void DEBUG_FUNCTION debug_varpool (void);
+
+  /* Allocate new callgraph node and insert it into basic data structures.  */
+  static varpool_node *create_empty (void);
+
+  /* Return varpool node assigned to DECL.  Create new one when needed.  */
+  static varpool_node *get_create (tree decl);
+
+  /* Given an assembler name, lookup node.  */
+  static varpool_node *get_for_asmname (tree asmname);
+
+  /* Set when variable is scheduled to be assembled.  */
+  unsigned output : 1;
+
+  /* Set if the variable is dynamically initialized, except for
+     function local statics.   */
+  unsigned dynamically_initialized : 1;
+
+  ENUM_BITFIELD(tls_model) tls_model : 3;
+
+  /* Set if the variable is known to be used by single function only.
+     This is computed by ipa_signle_use pass and used by late optimizations
+     in places where optimization would be valid for local static variable
+     if we did not do any inter-procedural code movement.  */
+  unsigned used_by_single_function : 1;
+
+private:
+  /* Assemble thunks and aliases associated to varpool node.  */
+  void assemble_aliases (void);
+
+  /* Worker for call_for_node_and_aliases.  */
+  bool call_for_symbol_and_aliases_1 (bool (*callback) (varpool_node *, void *),
+				      void *data,
+				      bool include_overwritable);
+};
+
+/* Every top level asm statement is put into a asm_node.  */
+
+struct GTY(()) asm_node {
+
+
+  /* Next asm node.  */
+  asm_node *next;
+  /* String for this asm node.  */
+  tree asm_str;
+  /* Ordering of all cgraph nodes.  */
+  int order;
+};
+
+/* Report whether or not THIS symtab node is a function, aka cgraph_node.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <cgraph_node *>::test (symtab_node *p)
+{
+  return p && p->type == SYMTAB_FUNCTION;
+}
+
+/* Report whether or not THIS symtab node is a vriable, aka varpool_node.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <varpool_node *>::test (symtab_node *p)
+{
+  return p && p->type == SYMTAB_VARIABLE;
+}
+
+/* Macros to access the next item in the list of free cgraph nodes and
+   edges. */
+#define NEXT_FREE_NODE(NODE) dyn_cast<cgraph_node *> ((NODE)->next)
+#define SET_NEXT_FREE_NODE(NODE,NODE2) ((NODE))->next = NODE2
+#define NEXT_FREE_EDGE(EDGE) (EDGE)->prev_caller
+
+typedef void (*cgraph_edge_hook)(cgraph_edge *, void *);
+typedef void (*cgraph_node_hook)(cgraph_node *, void *);
+typedef void (*varpool_node_hook)(varpool_node *, void *);
+typedef void (*cgraph_2edge_hook)(cgraph_edge *, cgraph_edge *, void *);
+typedef void (*cgraph_2node_hook)(cgraph_node *, cgraph_node *, void *);
+
+struct cgraph_edge_hook_list;
+struct cgraph_node_hook_list;
+struct varpool_node_hook_list;
+struct cgraph_2edge_hook_list;
+struct cgraph_2node_hook_list;
+
+/* Map from a symbol to initialization/finalization priorities.  */
+struct GTY(()) symbol_priority_map {
+  priority_type init;
+  priority_type fini;
+};
+
+enum symtab_state
+{
+  /* Frontend is parsing and finalizing functions.  */
+  PARSING,
+  /* Callgraph is being constructed.  It is safe to add new functions.  */
+  CONSTRUCTION,
+  /* Callgraph is being streamed-in at LTO time.  */
+  LTO_STREAMING,
+  /* Callgraph is built and early IPA passes are being run.  */
+  IPA,
+  /* Callgraph is built and all functions are transformed to SSA form.  */
+  IPA_SSA,
+  /* All inline decisions are done; it is now possible to remove extern inline
+     functions and virtual call targets.  */
+  IPA_SSA_AFTER_INLINING,
+  /* Functions are now ordered and being passed to RTL expanders.  */
+  EXPANSION,
+  /* All cgraph expansion is done.  */
+  FINISHED
+};
+
+struct asmname_hasher : ggc_ptr_hash <symtab_node>
+{
+  typedef const_tree compare_type;
+
+  static hashval_t hash (symtab_node *n);
+  static bool equal (symtab_node *n, const_tree t);
+};
+
+class GTY((tag ("SYMTAB"))) symbol_table
+{
+public:
+  friend class symtab_node;
+  friend class cgraph_node;
+  friend class cgraph_edge;
+
+  symbol_table (): cgraph_max_uid (1), cgraph_max_summary_id (0),
+  edges_max_uid (1), edges_max_summary_id (0)
+  {
+  }
+
+  /* Initialize callgraph dump file.  */
+  void initialize (void);
+
+  /* Register a top-level asm statement ASM_STR.  */
+  inline asm_node *finalize_toplevel_asm (tree asm_str);
+
+  /* Analyze the whole compilation unit once it is parsed completely.  */
+  void finalize_compilation_unit (void);
+
+  /* C++ frontend produce same body aliases all over the place, even before PCH
+     gets streamed out. It relies on us linking the aliases with their function
+     in order to do the fixups, but ipa-ref is not PCH safe.  Consequentely we
+     first produce aliases without links, but once C++ FE is sure he won't sream
+     PCH we build the links via this function.  */
+  void process_same_body_aliases (void);
+
+  /* Perform simple optimizations based on callgraph.  */
+  void compile (void);
+
+  /* Process CGRAPH_NEW_FUNCTIONS and perform actions necessary to add these
+     functions into callgraph in a way so they look like ordinary reachable
+     functions inserted into callgraph already at construction time.  */
+  void process_new_functions (void);
+
+  /* Once all functions from compilation unit are in memory, produce all clones
+     and update all calls.  We might also do this on demand if we don't want to
+     bring all functions to memory prior compilation, but current WHOPR
+     implementation does that and it is bit easier to keep everything right
+     in this order.  */
+  void materialize_all_clones (void);
+
+  /* Register a symbol NODE.  */
+  inline void register_symbol (symtab_node *node);
+
+  inline void
+  clear_asm_symbols (void)
+  {
+    asmnodes = NULL;
+    asm_last_node = NULL;
+  }
+
+  /* Perform reachability analysis and reclaim all unreachable nodes.  */
+  bool remove_unreachable_nodes (FILE *file);
+
+  /* Optimization of function bodies might've rendered some variables as
+     unnecessary so we want to avoid these from being compiled.  Re-do
+     reachability starting from variables that are either externally visible
+     or was referred from the asm output routines.  */
+  void remove_unreferenced_decls (void);
+
+  /* Unregister a symbol NODE.  */
+  inline void unregister (symtab_node *node);
+
+  /* Allocate new callgraph node and insert it into basic data structures.  */
+  cgraph_node *create_empty (void);
+
+  /* Release a callgraph NODE.  */
+  void release_symbol (cgraph_node *node);
+
+  /* Output all variables enqueued to be assembled.  */
+  bool output_variables (void);
+
+  /* Weakrefs may be associated to external decls and thus not output
+     at expansion time.  Emit all necessary aliases.  */
+  void output_weakrefs (void);
+
+  /* Return first static symbol with definition.  */
+  inline symtab_node *first_symbol (void);
+
+  /* Return first assembler symbol.  */
+  inline asm_node *
+  first_asm_symbol (void)
+  {
+    return asmnodes;
+  }
+
+  /* Return first static symbol with definition.  */
+  inline symtab_node *first_defined_symbol (void);
+
+  /* Return first variable.  */
+  inline varpool_node *first_variable (void);
+
+  /* Return next variable after NODE.  */
+  inline varpool_node *next_variable (varpool_node *node);
+
+  /* Return first static variable with initializer.  */
+  inline varpool_node *first_static_initializer (void);
+
+  /* Return next static variable with initializer after NODE.  */
+  inline varpool_node *next_static_initializer (varpool_node *node);
+
+  /* Return first static variable with definition.  */
+  inline varpool_node *first_defined_variable (void);
+
+  /* Return next static variable with definition after NODE.  */
+  inline varpool_node *next_defined_variable (varpool_node *node);
+
+  /* Return first function with body defined.  */
+  inline cgraph_node *first_defined_function (void);
+
+  /* Return next function with body defined after NODE.  */
+  inline cgraph_node *next_defined_function (cgraph_node *node);
+
+  /* Return first function.  */
+  inline cgraph_node *first_function (void);
+
+  /* Return next function.  */
+  inline cgraph_node *next_function (cgraph_node *node);
+
+  /* Return first function with body defined.  */
+  cgraph_node *first_function_with_gimple_body (void);
+
+  /* Return next reachable static variable with initializer after NODE.  */
+  inline cgraph_node *next_function_with_gimple_body (cgraph_node *node);
+
+  /* Register HOOK to be called with DATA on each removed edge.  */
+  cgraph_edge_hook_list *add_edge_removal_hook (cgraph_edge_hook hook,
+						void *data);
+
+  /* Remove ENTRY from the list of hooks called on removing edges.  */
+  void remove_edge_removal_hook (cgraph_edge_hook_list *entry);
+
+  /* Register HOOK to be called with DATA on each removed node.  */
+  cgraph_node_hook_list *add_cgraph_removal_hook (cgraph_node_hook hook,
+						  void *data);
+
+  /* Remove ENTRY from the list of hooks called on removing nodes.  */
+  void remove_cgraph_removal_hook (cgraph_node_hook_list *entry);
+
+  /* Register HOOK to be called with DATA on each removed node.  */
+  varpool_node_hook_list *add_varpool_removal_hook (varpool_node_hook hook,
+						    void *data);
+
+  /* Remove ENTRY from the list of hooks called on removing nodes.  */
+  void remove_varpool_removal_hook (varpool_node_hook_list *entry);
+
+  /* Register HOOK to be called with DATA on each inserted node.  */
+  cgraph_node_hook_list *add_cgraph_insertion_hook (cgraph_node_hook hook,
+						    void *data);
+
+  /* Remove ENTRY from the list of hooks called on inserted nodes.  */
+  void remove_cgraph_insertion_hook (cgraph_node_hook_list *entry);
+
+  /* Register HOOK to be called with DATA on each inserted node.  */
+  varpool_node_hook_list *add_varpool_insertion_hook (varpool_node_hook hook,
+						      void *data);
+
+  /* Remove ENTRY from the list of hooks called on inserted nodes.  */
+  void remove_varpool_insertion_hook (varpool_node_hook_list *entry);
+
+  /* Register HOOK to be called with DATA on each duplicated edge.  */
+  cgraph_2edge_hook_list *add_edge_duplication_hook (cgraph_2edge_hook hook,
+						     void *data);
+  /* Remove ENTRY from the list of hooks called on duplicating edges.  */
+  void remove_edge_duplication_hook (cgraph_2edge_hook_list *entry);
+
+  /* Register HOOK to be called with DATA on each duplicated node.  */
+  cgraph_2node_hook_list *add_cgraph_duplication_hook (cgraph_2node_hook hook,
+						       void *data);
+
+  /* Remove ENTRY from the list of hooks called on duplicating nodes.  */
+  void remove_cgraph_duplication_hook (cgraph_2node_hook_list *entry);
+
+  /* Call all edge removal hooks.  */
+  void call_edge_removal_hooks (cgraph_edge *e);
+
+  /* Call all node insertion hooks.  */
+  void call_cgraph_insertion_hooks (cgraph_node *node);
+
+  /* Call all node removal hooks.  */
+  void call_cgraph_removal_hooks (cgraph_node *node);
+
+  /* Call all node duplication hooks.  */
+  void call_cgraph_duplication_hooks (cgraph_node *node, cgraph_node *node2);
+
+  /* Call all edge duplication hooks.  */
+  void call_edge_duplication_hooks (cgraph_edge *cs1, cgraph_edge *cs2);
+
+  /* Call all node removal hooks.  */
+  void call_varpool_removal_hooks (varpool_node *node);
+
+  /* Call all node insertion hooks.  */
+  void call_varpool_insertion_hooks (varpool_node *node);
+
+  /* Arrange node to be first in its entry of assembler_name_hash.  */
+  void symtab_prevail_in_asm_name_hash (symtab_node *node);
+
+  /* Initalize asm name hash unless.  */
+  void symtab_initialize_asm_name_hash (void);
+
+  /* Set the DECL_ASSEMBLER_NAME and update symtab hashtables.  */
+  void change_decl_assembler_name (tree decl, tree name);
+
+  /* Dump symbol table to F.  */
+  void dump (FILE *f);
+
+  /* Dump symbol table to stderr.  */
+  void DEBUG_FUNCTION debug (void);
+
+  /* Assign a new summary ID for the callgraph NODE.  */
+  inline int assign_summary_id (cgraph_node *node)
+  {
+    node->m_summary_id = cgraph_max_summary_id++;
+    return node->m_summary_id;
+  }
+
+  /* Assign a new summary ID for the callgraph EDGE.  */
+  inline int assign_summary_id (cgraph_edge *edge)
+  {
+    edge->m_summary_id = edges_max_summary_id++;
+    return edge->m_summary_id;
+  }
+
+  /* Return true if assembler names NAME1 and NAME2 leads to the same symbol
+     name.  */
+  static bool assembler_names_equal_p (const char *name1, const char *name2);
+
+  int cgraph_count;
+  int cgraph_max_uid;
+  int cgraph_max_summary_id;
+
+  int edges_count;
+  int edges_max_uid;
+  int edges_max_summary_id;
+
+  symtab_node* GTY(()) nodes;
+  asm_node* GTY(()) asmnodes;
+  asm_node* GTY(()) asm_last_node;
+  cgraph_node* GTY(()) free_nodes;
+
+  /* Head of a linked list of unused (freed) call graph edges.
+     Do not GTY((delete)) this list so UIDs gets reliably recycled.  */
+  cgraph_edge * GTY(()) free_edges;
+
+  /* The order index of the next symtab node to be created.  This is
+     used so that we can sort the cgraph nodes in order by when we saw
+     them, to support -fno-toplevel-reorder.  */
+  int order;
+
+  /* Set when whole unit has been analyzed so we can access global info.  */
+  bool global_info_ready;
+  /* What state callgraph is in right now.  */
+  enum symtab_state state;
+  /* Set when the cgraph is fully build and the basic flags are computed.  */
+  bool function_flags_ready;
+
+  bool cpp_implicit_aliases_done;
+
+  /* Hash table used to hold sectoons.  */
+  hash_table<section_name_hasher> *GTY(()) section_hash;
+
+  /* Hash table used to convert assembler names into nodes.  */
+  hash_table<asmname_hasher> *assembler_name_hash;
+
+  /* Hash table used to hold init priorities.  */
+  hash_map<symtab_node *, symbol_priority_map> *init_priority_hash;
+
+  FILE* GTY ((skip)) dump_file;
+
+  /* Return symbol used to separate symbol name from suffix.  */
+  static char symbol_suffix_separator ();
+
+  FILE* GTY ((skip)) ipa_clones_dump_file;
+
+  hash_set <const cgraph_node *> GTY ((skip)) cloned_nodes;
+
+private:
+  /* Allocate new callgraph node.  */
+  inline cgraph_node * allocate_cgraph_symbol (void);
+
+  /* Allocate a cgraph_edge structure and fill it with data according to the
+     parameters of which only CALLEE can be NULL (when creating an indirect call
+     edge).  */
+  cgraph_edge *create_edge (cgraph_node *caller, cgraph_node *callee,
+			    gcall *call_stmt, profile_count count,
+			    bool indir_unknown_callee);
+
+  /* Put the edge onto the free list.  */
+  void free_edge (cgraph_edge *e);
+
+  /* Insert NODE to assembler name hash.  */
+  void insert_to_assembler_name_hash (symtab_node *node, bool with_clones);
+
+  /* Remove NODE from assembler name hash.  */
+  void unlink_from_assembler_name_hash (symtab_node *node, bool with_clones);
+
+  /* Hash asmnames ignoring the user specified marks.  */
+  static hashval_t decl_assembler_name_hash (const_tree asmname);
+
+  /* Compare ASMNAME with the DECL_ASSEMBLER_NAME of DECL.  */
+  static bool decl_assembler_name_equal (tree decl, const_tree asmname);
+
+  friend struct asmname_hasher;
+
+  /* List of hooks triggered when an edge is removed.  */
+  cgraph_edge_hook_list * GTY((skip)) m_first_edge_removal_hook;
+  /* List of hooks triggem_red when a cgraph node is removed.  */
+  cgraph_node_hook_list * GTY((skip)) m_first_cgraph_removal_hook;
+  /* List of hooks triggered when an edge is duplicated.  */
+  cgraph_2edge_hook_list * GTY((skip)) m_first_edge_duplicated_hook;
+  /* List of hooks triggered when a node is duplicated.  */
+  cgraph_2node_hook_list * GTY((skip)) m_first_cgraph_duplicated_hook;
+  /* List of hooks triggered when an function is inserted.  */
+  cgraph_node_hook_list * GTY((skip)) m_first_cgraph_insertion_hook;
+  /* List of hooks triggered when an variable is inserted.  */
+  varpool_node_hook_list * GTY((skip)) m_first_varpool_insertion_hook;
+  /* List of hooks triggered when a node is removed.  */
+  varpool_node_hook_list * GTY((skip)) m_first_varpool_removal_hook;
+};
+
+extern GTY(()) symbol_table *symtab;
+
+extern vec<cgraph_node *> cgraph_new_nodes;
+
+inline hashval_t
+asmname_hasher::hash (symtab_node *n)
+{
+  return symbol_table::decl_assembler_name_hash
+    (DECL_ASSEMBLER_NAME (n->decl));
+}
+
+inline bool
+asmname_hasher::equal (symtab_node *n, const_tree t)
+{
+  return symbol_table::decl_assembler_name_equal (n->decl, t);
+}
+
+/* In cgraph.c  */
+void cgraph_c_finalize (void);
+void release_function_body (tree);
+cgraph_indirect_call_info *cgraph_allocate_init_indirect_info (void);
+
+void cgraph_update_edges_for_call_stmt (gimple *, tree, gimple *);
+bool cgraph_function_possibly_inlined_p (tree);
+
+const char* cgraph_inline_failed_string (cgraph_inline_failed_t);
+cgraph_inline_failed_type_t cgraph_inline_failed_type (cgraph_inline_failed_t);
+
+extern bool gimple_check_call_matching_types (gimple *, tree, bool);
+
+/* In cgraphunit.c  */
+void cgraphunit_c_finalize (void);
+
+/*  Initialize datastructures so DECL is a function in lowered gimple form.
+    IN_SSA is true if the gimple is in SSA.  */
+basic_block init_lowered_empty_function (tree, bool, profile_count);
+
+tree thunk_adjust (gimple_stmt_iterator *, tree, bool, HOST_WIDE_INT, tree,
+		   HOST_WIDE_INT);
+/* In cgraphclones.c  */
+
+tree clone_function_name_numbered (const char *name, const char *suffix);
+tree clone_function_name_numbered (tree decl, const char *suffix);
+tree clone_function_name (const char *name, const char *suffix,
+			  unsigned long number);
+tree clone_function_name (tree decl, const char *suffix,
+			  unsigned long number);
+tree clone_function_name (tree decl, const char *suffix);
+
+void tree_function_versioning (tree, tree, vec<ipa_replace_map *, va_gc> *,
+			       bool, bitmap, bool, bitmap, basic_block);
+
+void dump_callgraph_transformation (const cgraph_node *original,
+				    const cgraph_node *clone,
+				    const char *suffix);
+tree cgraph_build_function_type_skip_args (tree orig_type, bitmap args_to_skip,
+					   bool skip_return);
+
+/* In cgraphbuild.c  */
+int compute_call_stmt_bb_frequency (tree, basic_block bb);
+void record_references_in_initializer (tree, bool);
+
+/* In ipa.c  */
+void cgraph_build_static_cdtor (char which, tree body, int priority);
+bool ipa_discover_variable_flags (void);
+
+/* In varpool.c  */
+tree ctor_for_folding (tree);
+
+/* In ipa-inline-analysis.c  */
+void initialize_inline_failed (struct cgraph_edge *);
+bool speculation_useful_p (struct cgraph_edge *e, bool anticipate_inlining);
+
+/* Return true when the symbol is real symbol, i.e. it is not inline clone
+   or abstract function kept for debug info purposes only.  */
+inline bool
+symtab_node::real_symbol_p (void)
+{
+  cgraph_node *cnode;
+
+  if (DECL_ABSTRACT_P (decl))
+    return false;
+  if (transparent_alias && definition)
+    return false;
+  if (!is_a <cgraph_node *> (this))
+    return true;
+  cnode = dyn_cast <cgraph_node *> (this);
+  if (cnode->global.inlined_to)
+    return false;
+  return true;
+}
+
+/* Return true if DECL should have entry in symbol table if used.
+   Those are functions and static & external veriables*/
+
+static inline bool
+decl_in_symtab_p (const_tree decl)
+{
+  return (TREE_CODE (decl) == FUNCTION_DECL
+          || (TREE_CODE (decl) == VAR_DECL
+	      && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))));
+}
+
+inline bool
+symtab_node::in_same_comdat_group_p (symtab_node *target)
+{
+  symtab_node *source = this;
+
+  if (cgraph_node *cn = dyn_cast <cgraph_node *> (target))
+    {
+      if (cn->global.inlined_to)
+	source = cn->global.inlined_to;
+    }
+  if (cgraph_node *cn = dyn_cast <cgraph_node *> (target))
+    {
+      if (cn->global.inlined_to)
+	target = cn->global.inlined_to;
+    }
+
+  return source->get_comdat_group () == target->get_comdat_group ();
+}
+
+/* Return node that alias is aliasing.  */
+
+inline symtab_node *
+symtab_node::get_alias_target (void)
+{
+  ipa_ref *ref = NULL;
+  iterate_reference (0, ref);
+  gcc_checking_assert (ref->use == IPA_REF_ALIAS);
+  return ref->referred;
+}
+
+/* Return next reachable static symbol with initializer after the node.  */
+
+inline symtab_node *
+symtab_node::next_defined_symbol (void)
+{
+  symtab_node *node1 = next;
+
+  for (; node1; node1 = node1->next)
+    if (node1->definition)
+      return node1;
+
+  return NULL;
+}
+
+/* Iterates I-th reference in the list, REF is also set.  */
+
+inline ipa_ref *
+symtab_node::iterate_reference (unsigned i, ipa_ref *&ref)
+{
+  vec_safe_iterate (ref_list.references, i, &ref);
+
+  return ref;
+}
+
+/* Iterates I-th referring item in the list, REF is also set.  */
+
+inline ipa_ref *
+symtab_node::iterate_referring (unsigned i, ipa_ref *&ref)
+{
+  ref_list.referring.iterate (i, &ref);
+
+  return ref;
+}
+
+/* Iterates I-th referring alias item in the list, REF is also set.  */
+
+inline ipa_ref *
+symtab_node::iterate_direct_aliases (unsigned i, ipa_ref *&ref)
+{
+  ref_list.referring.iterate (i, &ref);
+
+  if (ref && ref->use != IPA_REF_ALIAS)
+    return NULL;
+
+  return ref;
+}
+
+/* Return true if list contains an alias.  */
+
+inline bool
+symtab_node::has_aliases_p (void)
+{
+  ipa_ref *ref = NULL;
+
+  return (iterate_direct_aliases (0, ref) != NULL);
+}
+
+/* Return true when RESOLUTION indicate that linker will use
+   the symbol from non-LTO object files.  */
+
+inline bool
+resolution_used_from_other_file_p (enum ld_plugin_symbol_resolution resolution)
+{
+  return (resolution == LDPR_PREVAILING_DEF
+	  || resolution == LDPR_PREEMPTED_REG
+	  || resolution == LDPR_RESOLVED_EXEC
+	  || resolution == LDPR_RESOLVED_DYN);
+}
+
+/* Return true when symtab_node is known to be used from other (non-LTO)
+   object file. Known only when doing LTO via linker plugin.  */
+
+inline bool
+symtab_node::used_from_object_file_p (void)
+{
+  if (!TREE_PUBLIC (decl) || DECL_EXTERNAL (decl))
+    return false;
+  if (resolution_used_from_other_file_p (resolution))
+    return true;
+  return false;
+}
+
+/* Return varpool node for given symbol and check it is a function. */
+
+inline varpool_node *
+varpool_node::get (const_tree decl)
+{
+  gcc_checking_assert (TREE_CODE (decl) == VAR_DECL);
+  return dyn_cast<varpool_node *> (symtab_node::get (decl));
+}
+
+/* Register a symbol NODE.  */
+
+inline void
+symbol_table::register_symbol (symtab_node *node)
+{
+  node->next = nodes;
+  node->previous = NULL;
+
+  if (nodes)
+    nodes->previous = node;
+  nodes = node;
+
+  node->order = order++;
+}
+
+/* Register a top-level asm statement ASM_STR.  */
+
+asm_node *
+symbol_table::finalize_toplevel_asm (tree asm_str)
+{
+  asm_node *node;
+
+  node = ggc_cleared_alloc<asm_node> ();
+  node->asm_str = asm_str;
+  node->order = order++;
+  node->next = NULL;
+
+  if (asmnodes == NULL)
+    asmnodes = node;
+  else
+    asm_last_node->next = node;
+
+  asm_last_node = node;
+  return node;
+}
+
+/* Unregister a symbol NODE.  */
+inline void
+symbol_table::unregister (symtab_node *node)
+{
+  if (node->previous)
+    node->previous->next = node->next;
+  else
+    nodes = node->next;
+
+  if (node->next)
+    node->next->previous = node->previous;
+
+  node->next = NULL;
+  node->previous = NULL;
+}
+
+/* Release a callgraph NODE with UID and put in to the list of free nodes.  */
+
+inline void
+symbol_table::release_symbol (cgraph_node *node)
+{
+  cgraph_count--;
+
+  /* Clear out the node to NULL all pointers and add the node to the free
+     list.  */
+  int summary_id = node->m_summary_id;
+  memset (node, 0, sizeof (*node));
+  node->type = SYMTAB_FUNCTION;
+  node->m_summary_id = summary_id;
+  SET_NEXT_FREE_NODE (node, free_nodes);
+  free_nodes = node;
+}
+
+/* Allocate new callgraph node.  */
+
+inline cgraph_node *
+symbol_table::allocate_cgraph_symbol (void)
+{
+  cgraph_node *node;
+
+  if (free_nodes)
+    {
+      node = free_nodes;
+      free_nodes = NEXT_FREE_NODE (node);
+    }
+  else
+    {
+      node = ggc_cleared_alloc<cgraph_node> ();
+      node->m_summary_id = -1;
+    }
+
+  node->m_uid = cgraph_max_uid++;
+  return node;
+}
+
+
+/* Return first static symbol with definition.  */
+inline symtab_node *
+symbol_table::first_symbol (void)
+{
+  return nodes;
+}
+
+/* Walk all symbols.  */
+#define FOR_EACH_SYMBOL(node) \
+   for ((node) = symtab->first_symbol (); (node); (node) = (node)->next)
+
+/* Return first static symbol with definition.  */
+inline symtab_node *
+symbol_table::first_defined_symbol (void)
+{
+  symtab_node *node;
+
+  for (node = nodes; node; node = node->next)
+    if (node->definition)
+      return node;
+
+  return NULL;
+}
+
+/* Walk all symbols with definitions in current unit.  */
+#define FOR_EACH_DEFINED_SYMBOL(node) \
+   for ((node) = symtab->first_defined_symbol (); (node); \
+	(node) = node->next_defined_symbol ())
+
+/* Return first variable.  */
+inline varpool_node *
+symbol_table::first_variable (void)
+{
+  symtab_node *node;
+  for (node = nodes; node; node = node->next)
+    if (varpool_node *vnode = dyn_cast <varpool_node *> (node))
+      return vnode;
+  return NULL;
+}
+
+/* Return next variable after NODE.  */
+inline varpool_node *
+symbol_table::next_variable (varpool_node *node)
+{
+  symtab_node *node1 = node->next;
+  for (; node1; node1 = node1->next)
+    if (varpool_node *vnode1 = dyn_cast <varpool_node *> (node1))
+      return vnode1;
+  return NULL;
+}
+/* Walk all variables.  */
+#define FOR_EACH_VARIABLE(node) \
+   for ((node) = symtab->first_variable (); \
+        (node); \
+	(node) = symtab->next_variable ((node)))
+
+/* Return first static variable with initializer.  */
+inline varpool_node *
+symbol_table::first_static_initializer (void)
+{
+  symtab_node *node;
+  for (node = nodes; node; node = node->next)
+    {
+      varpool_node *vnode = dyn_cast <varpool_node *> (node);
+      if (vnode && DECL_INITIAL (node->decl))
+	return vnode;
+    }
+  return NULL;
+}
+
+/* Return next static variable with initializer after NODE.  */
+inline varpool_node *
+symbol_table::next_static_initializer (varpool_node *node)
+{
+  symtab_node *node1 = node->next;
+  for (; node1; node1 = node1->next)
+    {
+      varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
+      if (vnode1 && DECL_INITIAL (node1->decl))
+	return vnode1;
+    }
+  return NULL;
+}
+
+/* Walk all static variables with initializer set.  */
+#define FOR_EACH_STATIC_INITIALIZER(node) \
+   for ((node) = symtab->first_static_initializer (); (node); \
+	(node) = symtab->next_static_initializer (node))
+
+/* Return first static variable with definition.  */
+inline varpool_node *
+symbol_table::first_defined_variable (void)
+{
+  symtab_node *node;
+  for (node = nodes; node; node = node->next)
+    {
+      varpool_node *vnode = dyn_cast <varpool_node *> (node);
+      if (vnode && vnode->definition)
+	return vnode;
+    }
+  return NULL;
+}
+
+/* Return next static variable with definition after NODE.  */
+inline varpool_node *
+symbol_table::next_defined_variable (varpool_node *node)
+{
+  symtab_node *node1 = node->next;
+  for (; node1; node1 = node1->next)
+    {
+      varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
+      if (vnode1 && vnode1->definition)
+	return vnode1;
+    }
+  return NULL;
+}
+/* Walk all variables with definitions in current unit.  */
+#define FOR_EACH_DEFINED_VARIABLE(node) \
+   for ((node) = symtab->first_defined_variable (); (node); \
+	(node) = symtab->next_defined_variable (node))
+
+/* Return first function with body defined.  */
+inline cgraph_node *
+symbol_table::first_defined_function (void)
+{
+  symtab_node *node;
+  for (node = nodes; node; node = node->next)
+    {
+      cgraph_node *cn = dyn_cast <cgraph_node *> (node);
+      if (cn && cn->definition)
+	return cn;
+    }
+  return NULL;
+}
+
+/* Return next function with body defined after NODE.  */
+inline cgraph_node *
+symbol_table::next_defined_function (cgraph_node *node)
+{
+  symtab_node *node1 = node->next;
+  for (; node1; node1 = node1->next)
+    {
+      cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
+      if (cn1 && cn1->definition)
+	return cn1;
+    }
+  return NULL;
+}
+
+/* Walk all functions with body defined.  */
+#define FOR_EACH_DEFINED_FUNCTION(node) \
+   for ((node) = symtab->first_defined_function (); (node); \
+	(node) = symtab->next_defined_function ((node)))
+
+/* Return first function.  */
+inline cgraph_node *
+symbol_table::first_function (void)
+{
+  symtab_node *node;
+  for (node = nodes; node; node = node->next)
+    if (cgraph_node *cn = dyn_cast <cgraph_node *> (node))
+      return cn;
+  return NULL;
+}
+
+/* Return next function.  */
+inline cgraph_node *
+symbol_table::next_function (cgraph_node *node)
+{
+  symtab_node *node1 = node->next;
+  for (; node1; node1 = node1->next)
+    if (cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1))
+      return cn1;
+  return NULL;
+}
+
+/* Return first function with body defined.  */
+inline cgraph_node *
+symbol_table::first_function_with_gimple_body (void)
+{
+  symtab_node *node;
+  for (node = nodes; node; node = node->next)
+    {
+      cgraph_node *cn = dyn_cast <cgraph_node *> (node);
+      if (cn && cn->has_gimple_body_p ())
+	return cn;
+    }
+  return NULL;
+}
+
+/* Return next reachable static variable with initializer after NODE.  */
+inline cgraph_node *
+symbol_table::next_function_with_gimple_body (cgraph_node *node)
+{
+  symtab_node *node1 = node->next;
+  for (; node1; node1 = node1->next)
+    {
+      cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
+      if (cn1 && cn1->has_gimple_body_p ())
+	return cn1;
+    }
+  return NULL;
+}
+
+/* Walk all functions.  */
+#define FOR_EACH_FUNCTION(node) \
+   for ((node) = symtab->first_function (); (node); \
+	(node) = symtab->next_function ((node)))
+
+/* Return true when callgraph node is a function with Gimple body defined
+   in current unit.  Functions can also be define externally or they
+   can be thunks with no Gimple representation.
+
+   Note that at WPA stage, the function body may not be present in memory.  */
+
+inline bool
+cgraph_node::has_gimple_body_p (void)
+{
+  return definition && !thunk.thunk_p && !alias;
+}
+
+/* Return true if this node represents a former, i.e. an expanded, thunk.  */
+
+inline bool
+cgraph_node::former_thunk_p (void)
+{
+  return (!thunk.thunk_p
+	  && (thunk.fixed_offset
+	      || thunk.virtual_offset_p
+	      || thunk.indirect_offset));
+}
+
+/* Walk all functions with body defined.  */
+#define FOR_EACH_FUNCTION_WITH_GIMPLE_BODY(node) \
+   for ((node) = symtab->first_function_with_gimple_body (); (node); \
+	(node) = symtab->next_function_with_gimple_body (node))
+
+/* Uniquize all constants that appear in memory.
+   Each constant in memory thus far output is recorded
+   in `const_desc_table'.  */
+
+struct GTY((for_user)) constant_descriptor_tree {
+  /* A MEM for the constant.  */
+  rtx rtl;
+
+  /* The value of the constant.  */
+  tree value;
+
+  /* Hash of value.  Computing the hash from value each time
+     hashfn is called can't work properly, as that means recursive
+     use of the hash table during hash table expansion.  */
+  hashval_t hash;
+};
+
+/* Return true when function is only called directly or it has alias.
+   i.e. it is not externally visible, address was not taken and
+   it is not used in any other non-standard way.  */
+
+inline bool
+cgraph_node::only_called_directly_or_aliased_p (void)
+{
+  gcc_assert (!global.inlined_to);
+  return (!force_output && !address_taken
+	  && !ifunc_resolver
+	  && !used_from_other_partition
+	  && !DECL_VIRTUAL_P (decl)
+	  && !DECL_STATIC_CONSTRUCTOR (decl)
+	  && !DECL_STATIC_DESTRUCTOR (decl)
+	  && !used_from_object_file_p ()
+	  && !externally_visible);
+}
+
+/* Return true when function can be removed from callgraph
+   if all direct calls are eliminated.  */
+
+inline bool
+cgraph_node::can_remove_if_no_direct_calls_and_refs_p (void)
+{
+  gcc_checking_assert (!global.inlined_to);
+  /* Extern inlines can always go, we will use the external definition.  */
+  if (DECL_EXTERNAL (decl))
+    return true;
+  /* When function is needed, we cannot remove it.  */
+  if (force_output || used_from_other_partition)
+    return false;
+  if (DECL_STATIC_CONSTRUCTOR (decl)
+      || DECL_STATIC_DESTRUCTOR (decl))
+    return false;
+  /* Only COMDAT functions can be removed if externally visible.  */
+  if (externally_visible
+      && (!DECL_COMDAT (decl)
+	  || forced_by_abi
+	  || used_from_object_file_p ()))
+    return false;
+  return true;
+}
+
+/* Verify cgraph, if consistency checking is enabled.  */
+
+inline void
+cgraph_node::checking_verify_cgraph_nodes (void)
+{
+  if (flag_checking)
+    cgraph_node::verify_cgraph_nodes ();
+}
+
+/* Return true when variable can be removed from variable pool
+   if all direct calls are eliminated.  */
+
+inline bool
+varpool_node::can_remove_if_no_refs_p (void)
+{
+  if (DECL_EXTERNAL (decl))
+    return true;
+  return (!force_output && !used_from_other_partition
+	  && ((DECL_COMDAT (decl)
+	       && !forced_by_abi
+	       && !used_from_object_file_p ())
+	      || !externally_visible
+	      || DECL_HAS_VALUE_EXPR_P (decl)));
+}
+
+/* Return true when all references to variable must be visible in ipa_ref_list.
+   i.e. if the variable is not externally visible or not used in some magic
+   way (asm statement or such).
+   The magic uses are all summarized in force_output flag.  */
+
+inline bool
+varpool_node::all_refs_explicit_p ()
+{
+  return (definition
+	  && !externally_visible
+	  && !used_from_other_partition
+	  && !force_output);
+}
+
+struct tree_descriptor_hasher : ggc_ptr_hash<constant_descriptor_tree>
+{
+  static hashval_t hash (constant_descriptor_tree *);
+  static bool equal (constant_descriptor_tree *, constant_descriptor_tree *);
+};
+
+/* Constant pool accessor function.  */
+hash_table<tree_descriptor_hasher> *constant_pool_htab (void);
+
+/* Return node that alias is aliasing.  */
+
+inline cgraph_node *
+cgraph_node::get_alias_target (void)
+{
+  return dyn_cast <cgraph_node *> (symtab_node::get_alias_target ());
+}
+
+/* Return node that alias is aliasing.  */
+
+inline varpool_node *
+varpool_node::get_alias_target (void)
+{
+  return dyn_cast <varpool_node *> (symtab_node::get_alias_target ());
+}
+
+/* Walk the alias chain to return the symbol NODE is alias of.
+   If NODE is not an alias, return NODE.
+   When AVAILABILITY is non-NULL, get minimal availability in the chain.
+   When REF is non-NULL, assume that reference happens in symbol REF
+   when determining the availability.  */
+
+inline symtab_node *
+symtab_node::ultimate_alias_target (enum availability *availability,
+				    symtab_node *ref)
+{
+  if (!alias)
+    {
+      if (availability)
+	*availability = get_availability (ref);
+      return this;
+    }
+
+  return ultimate_alias_target_1 (availability, ref);
+}
+
+/* Given function symbol, walk the alias chain to return the function node
+   is alias of. Do not walk through thunks.
+   When AVAILABILITY is non-NULL, get minimal availability in the chain.
+   When REF is non-NULL, assume that reference happens in symbol REF
+   when determining the availability.  */
+
+inline cgraph_node *
+cgraph_node::ultimate_alias_target (enum availability *availability,
+				    symtab_node *ref)
+{
+  cgraph_node *n = dyn_cast <cgraph_node *>
+    (symtab_node::ultimate_alias_target (availability, ref));
+  if (!n && availability)
+    *availability = AVAIL_NOT_AVAILABLE;
+  return n;
+}
+
+/* For given variable pool node, walk the alias chain to return the function
+   the variable is alias of. Do not walk through thunks.
+   When AVAILABILITY is non-NULL, get minimal availability in the chain.
+   When REF is non-NULL, assume that reference happens in symbol REF
+   when determining the availability.  */
+
+inline varpool_node *
+varpool_node::ultimate_alias_target (availability *availability,
+				     symtab_node *ref)
+{
+  varpool_node *n = dyn_cast <varpool_node *>
+    (symtab_node::ultimate_alias_target (availability, ref));
+
+  if (!n && availability)
+    *availability = AVAIL_NOT_AVAILABLE;
+  return n;
+}
+
+/* Set callee N of call graph edge and add it to the corresponding set of
+   callers. */
+
+inline void
+cgraph_edge::set_callee (cgraph_node *n)
+{
+  prev_caller = NULL;
+  if (n->callers)
+    n->callers->prev_caller = this;
+  next_caller = n->callers;
+  n->callers = this;
+  callee = n;
+}
+
+/* Redirect callee of the edge to N.  The function does not update underlying
+   call expression.  */
+
+inline void
+cgraph_edge::redirect_callee (cgraph_node *n)
+{
+  /* Remove from callers list of the current callee.  */
+  remove_callee ();
+
+  /* Insert to callers list of the new callee.  */
+  set_callee (n);
+}
+
+/* Return true when the edge represents a direct recursion.  */
+
+inline bool
+cgraph_edge::recursive_p (void)
+{
+  cgraph_node *c = callee->ultimate_alias_target ();
+  if (caller->global.inlined_to)
+    return caller->global.inlined_to->decl == c->decl;
+  else
+    return caller->decl == c->decl;
+}
+
+/* Remove the edge from the list of the callers of the callee.  */
+
+inline void
+cgraph_edge::remove_callee (void)
+{
+  gcc_assert (!indirect_unknown_callee);
+  if (prev_caller)
+    prev_caller->next_caller = next_caller;
+  if (next_caller)
+    next_caller->prev_caller = prev_caller;
+  if (!prev_caller)
+    callee->callers = next_caller;
+}
+
+/* Return true if call must bind to current definition.  */
+
+inline bool
+cgraph_edge::binds_to_current_def_p ()
+{
+  if (callee)
+    return callee->binds_to_current_def_p (caller);
+  else
+    return false;
+}
+
+/* Expected frequency of executions within the function.
+   When set to CGRAPH_FREQ_BASE, the edge is expected to be called once
+   per function call.  The range is 0 to CGRAPH_FREQ_MAX.  */
+
+inline int
+cgraph_edge::frequency ()
+{
+  return count.to_cgraph_frequency (caller->global.inlined_to
+				    ? caller->global.inlined_to->count
+				    : caller->count);
+}
+
+
+/* Return true if the TM_CLONE bit is set for a given FNDECL.  */
+static inline bool
+decl_is_tm_clone (const_tree fndecl)
+{
+  cgraph_node *n = cgraph_node::get (fndecl);
+  if (n)
+    return n->tm_clone;
+  return false;
+}
+
+/* Likewise indicate that a node is needed, i.e. reachable via some
+   external means.  */
+
+inline void
+cgraph_node::mark_force_output (void)
+{
+  force_output = 1;
+  gcc_checking_assert (!global.inlined_to);
+}
+
+/* Return true if function should be optimized for size.  */
+
+inline bool
+cgraph_node::optimize_for_size_p (void)
+{
+  if (opt_for_fn (decl, optimize_size))
+    return true;
+  if (frequency == NODE_FREQUENCY_UNLIKELY_EXECUTED)
+    return true;
+  else
+    return false;
+}
+
+/* Return symtab_node for NODE or create one if it is not present
+   in symtab.  */
+
+inline symtab_node *
+symtab_node::get_create (tree node)
+{
+  if (TREE_CODE (node) == VAR_DECL)
+    return varpool_node::get_create (node);
+  else
+    return cgraph_node::get_create (node);
+}
+
+/* Return availability of NODE when referenced from REF.  */
+
+inline enum availability
+symtab_node::get_availability (symtab_node *ref)
+{
+  if (is_a <cgraph_node *> (this))
+    return dyn_cast <cgraph_node *> (this)->get_availability (ref);
+  else
+    return dyn_cast <varpool_node *> (this)->get_availability (ref);
+}
+
+/* Call calback on symtab node and aliases associated to this node.
+   When INCLUDE_OVERWRITABLE is false, overwritable symbols are skipped. */
+
+inline bool
+symtab_node::call_for_symbol_and_aliases (bool (*callback) (symtab_node *,
+							    void *),
+					  void *data,
+					  bool include_overwritable)
+{
+  if (include_overwritable
+      || get_availability () > AVAIL_INTERPOSABLE)
+    {
+      if (callback (this, data))
+        return true;
+    }
+  if (has_aliases_p ())
+    return call_for_symbol_and_aliases_1 (callback, data, include_overwritable);
+  return false;
+}
+
+/* Call callback on function and aliases associated to the function.
+   When INCLUDE_OVERWRITABLE is false, overwritable symbols are
+   skipped.  */
+
+inline bool
+cgraph_node::call_for_symbol_and_aliases (bool (*callback) (cgraph_node *,
+							    void *),
+					  void *data,
+					  bool include_overwritable)
+{
+  if (include_overwritable
+      || get_availability () > AVAIL_INTERPOSABLE)
+    {
+      if (callback (this, data))
+        return true;
+    }
+  if (has_aliases_p ())
+    return call_for_symbol_and_aliases_1 (callback, data, include_overwritable);
+  return false;
+}
+
+/* Call calback on varpool symbol and aliases associated to varpool symbol.
+   When INCLUDE_OVERWRITABLE is false, overwritable symbols are
+   skipped. */
+
+inline bool
+varpool_node::call_for_symbol_and_aliases (bool (*callback) (varpool_node *,
+							     void *),
+					   void *data,
+					   bool include_overwritable)
+{
+  if (include_overwritable
+      || get_availability () > AVAIL_INTERPOSABLE)
+    {
+      if (callback (this, data))
+        return true;
+    }
+  if (has_aliases_p ())
+    return call_for_symbol_and_aliases_1 (callback, data, include_overwritable);
+  return false;
+}
+
+/* Return true if refernece may be used in address compare.  */
+
+inline bool
+ipa_ref::address_matters_p ()
+{
+  if (use != IPA_REF_ADDR)
+    return false;
+  /* Addresses taken from virtual tables are never compared.  */
+  if (is_a <varpool_node *> (referring)
+      && DECL_VIRTUAL_P (referring->decl))
+    return false;
+  return referred->address_can_be_compared_p ();
+}
+
+/* Build polymorphic call context for indirect call E.  */
+
+inline
+ipa_polymorphic_call_context::ipa_polymorphic_call_context (cgraph_edge *e)
+{
+  gcc_checking_assert (e->indirect_info->polymorphic);
+  *this = e->indirect_info->context;
+}
+
+/* Build empty "I know nothing" context.  */
+
+inline
+ipa_polymorphic_call_context::ipa_polymorphic_call_context ()
+{
+  clear_speculation ();
+  clear_outer_type ();
+  invalid = false;
+}
+
+/* Make context non-speculative.  */
+
+inline void
+ipa_polymorphic_call_context::clear_speculation ()
+{
+  speculative_outer_type = NULL;
+  speculative_offset = 0;
+  speculative_maybe_derived_type = false;
+}
+
+/* Produce context specifying all derrived types of OTR_TYPE.  If OTR_TYPE is
+   NULL, the context is set to dummy "I know nothing" setting.  */
+
+inline void
+ipa_polymorphic_call_context::clear_outer_type (tree otr_type)
+{
+  outer_type = otr_type ? TYPE_MAIN_VARIANT (otr_type) : NULL;
+  offset = 0;
+  maybe_derived_type = true;
+  maybe_in_construction = true;
+  dynamic = true;
+}
+
+/* Adjust all offsets in contexts by OFF bits.  */
+
+inline void
+ipa_polymorphic_call_context::offset_by (HOST_WIDE_INT off)
+{
+  if (outer_type)
+    offset += off;
+  if (speculative_outer_type)
+    speculative_offset += off;
+}
+
+/* Return TRUE if context is fully useless.  */
+
+inline bool
+ipa_polymorphic_call_context::useless_p () const
+{
+  return (!outer_type && !speculative_outer_type);
+}
+
+/* When using fprintf (or similar), problems can arise with
+   transient generated strings.  Many string-generation APIs
+   only support one result being alive at once (e.g. by
+   returning a pointer to a statically-allocated buffer).
+
+   If there is more than one generated string within one
+   fprintf call: the first string gets evicted or overwritten
+   by the second, before fprintf is fully evaluated.
+   See e.g. PR/53136.
+
+   This function provides a workaround for this, by providing
+   a simple way to create copies of these transient strings,
+   without the need to have explicit cleanup:
+
+       fprintf (dumpfile, "string 1: %s string 2:%s\n",
+                xstrdup_for_dump (EXPR_1),
+                xstrdup_for_dump (EXPR_2));
+
+   This is actually a simple wrapper around ggc_strdup, but
+   the name documents the intent.  We require that no GC can occur
+   within the fprintf call.  */
+
+static inline const char *
+xstrdup_for_dump (const char *transient_str)
+{
+  return ggc_strdup (transient_str);
+}
+
+/* During LTO stream-in this predicate can be used to check whether node
+   in question prevails in the linking to save some memory usage.  */
+inline bool
+symtab_node::prevailing_p (void)
+{
+  return definition && ((!TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl))
+			 || previous_sharing_asm_name == NULL);
+}
+
+extern GTY(()) symbol_table *saved_symtab;
+
+#if CHECKING_P
+
+namespace selftest {
+
+/* An RAII-style class for use in selftests for temporarily using a different
+   symbol_table, so that such tests can be isolated from each other.  */
+
+class symbol_table_test
+{
+ public:
+  /* Constructor.  Override "symtab".  */
+  symbol_table_test ();
+
+  /* Destructor.  Restore the saved_symtab.  */
+  ~symbol_table_test ();
+};
+
+} // namespace selftest
+
+#endif /* CHECKING_P */
+
+#endif  /* GCC_CGRAPH_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/cif-code.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cif-code.def
new file mode 100644
index 0000000..0fabfeb
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cif-code.def
@@ -0,0 +1,147 @@
+/* This file contains the definitions of the cgraph_inline_failed_t
+   enums used in GCC.
+
+   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Contributed by Doug Kwan <dougkwan@google.com>
+
+This file is part of GCC.
+
+GCC is free software you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* The format of this file is
+   DEFCIFCODE(code, string).
+
+   Where symbol is the enumeration name without the ``''.
+   The argument STRING is a explain the failure.  Except for OK,
+   which is a NULL pointer.  */
+
+/* Inlining successful.  This must be the first code.  */
+DEFCIFCODE(OK, CIF_FINAL_NORMAL, NULL)
+
+/* Inlining failed for an unspecified reason.  */
+DEFCIFCODE(UNSPECIFIED, CIF_FINAL_ERROR, "")
+
+/* Function has not be considered for inlining.  This is the code for
+   functions that have not been rejected for inlining yet.  */
+DEFCIFCODE(FUNCTION_NOT_CONSIDERED, CIF_FINAL_NORMAL,
+	   N_("function not considered for inlining"))
+
+/* Caller is compiled with optimizations disabled.  */
+DEFCIFCODE(FUNCTION_NOT_OPTIMIZED, CIF_FINAL_ERROR,
+	   N_("caller is not optimized"))
+
+/* Inlining failed owing to unavailable function body.  */
+DEFCIFCODE(BODY_NOT_AVAILABLE, CIF_FINAL_ERROR,
+	   N_("function body not available"))
+
+/* Extern inline function that has been redefined.  */
+DEFCIFCODE(REDEFINED_EXTERN_INLINE, CIF_FINAL_ERROR,
+	   N_("redefined extern inline functions are not considered for "
+	      "inlining"))
+
+/* Function is not inlinable.  */
+DEFCIFCODE(FUNCTION_NOT_INLINABLE, CIF_FINAL_ERROR,
+	   N_("function not inlinable"))
+
+/* Function is overwritable.  */
+DEFCIFCODE(OVERWRITABLE, CIF_FINAL_ERROR,
+	   N_("function body can be overwritten at link time"))
+
+/* Function is not an inlining candidate.  */
+DEFCIFCODE(FUNCTION_NOT_INLINE_CANDIDATE, CIF_FINAL_NORMAL,
+	   N_("function not inline candidate"))
+
+/* Inlining failed because of various limit parameters.  */
+DEFCIFCODE(LARGE_FUNCTION_GROWTH_LIMIT, CIF_FINAL_NORMAL,
+	   N_("--param large-function-growth limit reached"))
+DEFCIFCODE(LARGE_STACK_FRAME_GROWTH_LIMIT, CIF_FINAL_NORMAL,
+	   N_("--param large-stack-frame-growth limit reached"))
+DEFCIFCODE(MAX_INLINE_INSNS_SINGLE_LIMIT, CIF_FINAL_NORMAL,
+	   N_("--param max-inline-insns-single limit reached"))
+DEFCIFCODE(MAX_INLINE_INSNS_AUTO_LIMIT, CIF_FINAL_NORMAL,
+	   N_("--param max-inline-insns-auto limit reached"))
+DEFCIFCODE(INLINE_UNIT_GROWTH_LIMIT, CIF_FINAL_NORMAL,
+	   N_("--param inline-unit-growth limit reached"))
+
+/* Recursive inlining.  */
+DEFCIFCODE(RECURSIVE_INLINING, CIF_FINAL_NORMAL,
+	   N_("recursive inlining"))
+
+/* Call is unlikely.  */
+DEFCIFCODE(UNLIKELY_CALL, CIF_FINAL_NORMAL,
+	   N_("call is unlikely and code size would grow"))
+
+/* Function is not declared as inline.  */
+DEFCIFCODE(NOT_DECLARED_INLINED, CIF_FINAL_NORMAL,
+	   N_("function not declared inline and code size would grow"))
+
+/* Caller and callee disagree on the arguments.  */
+DEFCIFCODE(MISMATCHED_ARGUMENTS, CIF_FINAL_ERROR,
+	   N_("mismatched arguments"))
+
+/* Caller and callee disagree on the arguments.  */
+DEFCIFCODE(LTO_MISMATCHED_DECLARATIONS, CIF_FINAL_ERROR,
+	   N_("mismatched declarations during linktime optimization"))
+
+/* Caller is variadic thunk.  */
+DEFCIFCODE(VARIADIC_THUNK, CIF_FINAL_ERROR,
+	   N_("variadic thunk call"))
+
+/* Call was originally indirect.  */
+DEFCIFCODE(ORIGINALLY_INDIRECT_CALL, CIF_FINAL_NORMAL,
+	   N_("originally indirect function call not considered for inlining"))
+
+/* Ths edge represents an indirect edge with a yet-undetermined callee .  */
+DEFCIFCODE(INDIRECT_UNKNOWN_CALL, CIF_FINAL_NORMAL,
+	   N_("indirect function call with a yet undetermined callee"))
+
+/* We can't inline different EH personalities together.  */
+DEFCIFCODE(EH_PERSONALITY, CIF_FINAL_ERROR,
+	   N_("exception handling personality mismatch"))
+
+/* We can't inline if the callee can throw non-call exceptions but the
+   caller cannot.  */
+DEFCIFCODE(NON_CALL_EXCEPTIONS, CIF_FINAL_ERROR,
+	   N_("non-call exception handling mismatch"))
+
+/* We can't inline because of mismatched target specific options.  */
+DEFCIFCODE(TARGET_OPTION_MISMATCH, CIF_FINAL_ERROR,
+	   N_("target specific option mismatch"))
+
+/* We can't inline because of mismatched optimization levels.  */
+DEFCIFCODE(OPTIMIZATION_MISMATCH, CIF_FINAL_ERROR,
+	   N_("optimization level attribute mismatch"))
+
+/* We can't inline because the callee refers to comdat-local symbols.  */
+DEFCIFCODE(USES_COMDAT_LOCAL, CIF_FINAL_ERROR,
+	   N_("callee refers to comdat-local symbols"))
+
+/* We can't inline because of mismatched caller/callee attributes.  */
+DEFCIFCODE(ATTRIBUTE_MISMATCH, CIF_FINAL_ERROR,
+	   N_("function attribute mismatch"))
+
+/* We can't inline because the user requests only static functions
+   but the function has external linkage for live patching purpose.  */
+DEFCIFCODE(EXTERN_LIVE_ONLY_STATIC, CIF_FINAL_ERROR,
+	   N_("function has external linkage when the user requests only"
+	      " inlining static for live patching"))
+
+/* We proved that the call is unreachable.  */
+DEFCIFCODE(UNREACHABLE, CIF_FINAL_ERROR,
+	   N_("unreachable"))
+
+/* We can't inline because of instrumentation thunk.  */
+DEFCIFCODE(CHKP, CIF_FINAL_ERROR,
+	   N_("caller is instrumentation thunk"))
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/collect-utils.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/collect-utils.h
new file mode 100644
index 0000000..9c5f80d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/collect-utils.h
@@ -0,0 +1,49 @@
+/* Utility functions used by tools like collect2 and lto-wrapper.
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_COLLECT_UTILS_H
+#define GCC_COLLECT_UTILS_H
+
+/* Provided in collect-utils.c.  */
+extern void notice (const char *, ...)
+  __attribute__ ((format (printf, 1, 2)));
+extern void fatal_signal (int);
+
+extern struct pex_obj *collect_execute (const char *, char **,
+					const char *, const char *,
+					int, bool);
+extern int collect_wait (const char *, struct pex_obj *);
+extern void do_wait (const char *, struct pex_obj *);
+extern void fork_execute (const char *, char **, bool);
+extern void utils_cleanup (bool);
+
+
+extern bool debug;
+extern bool verbose;
+extern bool save_temps;
+
+/* Provided by the tool itself.  */
+
+/* The name of the tool, printed in error messages.  */
+extern const char tool_name[];
+/* Called by utils_cleanup.  */
+extern void tool_cleanup (bool);
+extern void maybe_unlink (const char *);
+
+#endif /* GCC_COLLECT_UTILS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/collect2-aix.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/collect2-aix.h
new file mode 100644
index 0000000..d86dfd4
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/collect2-aix.h
@@ -0,0 +1,306 @@
+/* AIX cross support for collect2.
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_COLLECT2_AIX_H
+#define GCC_COLLECT2_AIX_H
+/* collect2-aix.c requires mmap support.  It should otherwise be
+   fairly portable.  */
+#if defined(CROSS_DIRECTORY_STRUCTURE) \
+    && defined(TARGET_AIX_VERSION) \
+    && HAVE_MMAP
+
+#define CROSS_AIX_SUPPORT 1
+
+/* -------------------------------------------------------------------------
+   Definitions adapted from bfd.  (Fairly heavily adapted in some cases.)
+   ------------------------------------------------------------------------- */
+
+/* Compatibility types for bfd.  */
+typedef unsigned HOST_WIDE_INT bfd_vma;
+
+/* The size of an archive's fl_magic field.  */
+#define FL_MAGIC_SIZE 8
+
+/* The expected contents of fl_magic for big archives.  */
+#define FL_MAGIC_BIG_AR "<bigaf>\012"
+
+/* The size of each offset string in the header of a big archive.  */
+#define AR_BIG_OFFSET_SIZE 20
+
+/* The format of the file header in a "big" XCOFF archive.  */
+struct external_big_ar_filehdr
+{
+  /* Magic string.  */
+  char fl_magic[FL_MAGIC_SIZE];
+
+  /* Offset of the member table (decimal ASCII string).  */
+  char fl_memoff[AR_BIG_OFFSET_SIZE];
+
+  /* Offset of the global symbol table for 32-bit objects (decimal ASCII
+     string).  */
+  char fl_symoff[AR_BIG_OFFSET_SIZE];
+
+  /* Offset of the global symbol table for 64-bit objects (decimal ASCII
+     string).  */
+  char fl_symoff64[AR_BIG_OFFSET_SIZE];
+
+  /* Offset of the first member in the archive (decimal ASCII string).  */
+  char fl_firstmemoff[AR_BIG_OFFSET_SIZE];
+
+  /* Offset of the last member in the archive (decimal ASCII string).  */
+  char fl_lastmemoff[AR_BIG_OFFSET_SIZE];
+
+  /* Offset of the first member on the free list (decimal ASCII
+     string).  */
+  char fl_freeoff[AR_BIG_OFFSET_SIZE];
+};
+
+/* Each archive name is followed by this many bytes of magic string.  */
+#define SXCOFFARFMAG 2
+
+/* The format of a member header in a "big" XCOFF archive.  */
+struct external_big_ar_member
+{
+  /* File size not including the header (decimal ASCII string).  */
+  char ar_size[AR_BIG_OFFSET_SIZE];
+
+  /* File offset of next archive member (decimal ASCII string).  */
+  char ar_nextoff[AR_BIG_OFFSET_SIZE];
+
+  /* File offset of previous archive member (decimal ASCII string).  */
+  char ar_prevoff[AR_BIG_OFFSET_SIZE];
+
+  /* File mtime (decimal ASCII string).  */
+  char ar_date[12];
+
+  /* File UID (decimal ASCII string).  */
+  char ar_uid[12];
+
+  /* File GID (decimal ASCII string).  */
+  char ar_gid[12];
+
+  /* File mode (octal ASCII string).  */
+  char ar_mode[12];
+
+  /* Length of file name (decimal ASCII string).  */
+  char ar_namlen[4];
+
+  /* This structure is followed by the file name.  The length of the
+     name is given in the namlen field.  If the length of the name is
+     odd, the name is followed by a null byte.  The name and optional
+     null byte are followed by XCOFFARFMAG, which is not included in
+     namlen.  The contents of the archive member follow; the number of
+     bytes is given in the size field.  */
+};
+
+/* The known values of f_magic in an XCOFF file header.  */
+#define U802WRMAGIC 0730	/* Writeable text segments.  */
+#define U802ROMAGIC 0735	/* Readonly sharable text segments.  */
+#define U802TOCMAGIC 0737	/* Readonly text segments and TOC.  */
+#define U803XTOCMAGIC 0757	/* Aix 4.3 64-bit XCOFF.  */
+#define U64_TOCMAGIC 0767	/* AIX 5+ 64-bit XCOFF.  */
+
+/* The number of bytes in an XCOFF file's f_magic field.  */
+#define F_MAGIC_SIZE 2
+
+/* The format of a 32-bit XCOFF file header.  */
+struct external_filehdr_32
+{
+  /* The magic number.  */
+  char f_magic[F_MAGIC_SIZE];
+
+  /* The number of sections.  */
+  char f_nscns[2];
+
+  /* Time & date stamp.  */
+  char f_timdat[4];
+
+  /* The offset of the symbol table from the start of the file.  */
+  char f_symptr[4];
+
+  /* The number of entries in the symbol table.  */
+  char f_nsyms[4];
+
+  /* The size of the auxiliary header.  */
+  char f_opthdr[2];
+
+  /* Flags.  */
+  char f_flags[2];
+};
+
+/* The format of a 64-bit XCOFF file header.  */
+struct external_filehdr_64
+{
+  /* The magic number.  */
+  char f_magic[F_MAGIC_SIZE];
+
+  /* The number of sections.  */
+  char f_nscns[2];
+
+  /* Time & date stamp.  */
+  char f_timdat[4];
+
+  /* The offset of the symbol table from the start of the file.  */
+  char f_symptr[8];
+
+  /* The size of the auxiliary header.  */
+  char f_opthdr[2];
+
+  /* Flags.  */
+  char f_flags[2];
+
+  /* The number of entries in the symbol table.  */
+  char f_nsyms[4];
+};
+
+/* An internal representation of the XCOFF file header.  */
+struct internal_filehdr
+{
+  unsigned short f_magic;
+  unsigned short f_nscns;
+  long f_timdat;
+  bfd_vma f_symptr;
+  long f_nsyms;
+  unsigned short f_opthdr;
+  unsigned short f_flags;
+};
+
+/* Symbol classes have their names in the debug section if this flag
+   is set.  */
+#define DBXMASK 0x80
+
+/* The format of an XCOFF symbol-table entry.  */
+struct external_syment
+{
+  union {
+    struct {
+      union {
+	/* The name of the symbol.  There is an implicit null character
+	   after the end of the array.  */
+	char n_name[8];
+	struct {
+	  /* If n_zeroes is zero, n_offset is the offset the name from
+	     the start of the string table.  */
+	  char n_zeroes[4];
+	  char n_offset[4];
+	} u;
+      } u;
+
+      /* The symbol's value.  */
+      char n_value[4];
+    } xcoff32;
+    struct {
+      /* The symbol's value.  */
+      char n_value[8];
+
+      /* The offset of the symbol from the start of the string table.  */
+      char n_offset[4];
+    } xcoff64;
+  } u;
+
+  /* The number of the section to which this symbol belongs.  */
+  char n_scnum[2];
+
+  /* The type of symbol.  (It can be interpreted as an n_lang
+     and an n_cpu byte, but we don't care about that here.)  */
+  char n_type[2];
+
+  /* The class of symbol (a C_* value).  */
+  char n_sclass[1];
+
+  /* The number of auxiliary symbols attached to this entry.  */
+  char n_numaux[1];
+};
+
+/* Definitions required by collect2.  */
+#define C_EXT 2
+
+#define F_SHROBJ    0x2000
+#define F_LOADONLY  0x4000
+
+#define N_UNDEF ((short) 0)
+#define N_TMASK 060
+#define N_BTSHFT 4
+
+#define DT_NON 0
+#define DT_FCN 2
+
+/* -------------------------------------------------------------------------
+   Local code.
+   ------------------------------------------------------------------------- */
+
+/* An internal representation of an XCOFF symbol-table entry,
+   which is associated with the API-defined SYMENT type.  */
+struct internal_syment
+{
+  char n_name[9];
+  unsigned int n_zeroes;
+  bfd_vma n_offset;
+  bfd_vma n_value;
+  short n_scnum;
+  unsigned short n_flags;
+  unsigned short n_type;
+  unsigned char n_sclass;
+  unsigned char n_numaux;
+};
+typedef struct internal_syment SYMENT;
+
+/* The internal representation of the API-defined LDFILE type.  */
+struct internal_ldfile
+{
+  /* The file handle for the associated file, or -1 if it hasn't been
+     opened yet.  */
+  int fd;
+
+  /* The start of the current XCOFF object, if one has been mapped
+     into memory.  Null otherwise.  */
+  char *object;
+
+  /* The offset of OBJECT from the start of the containing page.  */
+  size_t page_offset;
+
+  /* The size of the file pointed to by OBJECT.  Valid iff OFFSET
+     is nonnull.  */
+  size_t object_size;
+
+  /* The offset of the next member in an archive after OBJECT,
+     or -1 if this isn't an archive.  Valid iff OFFSET is nonnull.  */
+  off_t next_member;
+
+  /* The parsed version of the XCOFF file header.  */
+  struct internal_filehdr filehdr;
+};
+typedef struct internal_ldfile LDFILE;
+
+/* The API allows the file header to be directly accessed via this macro.  */
+#define HEADER(FILE) ((FILE)->filehdr)
+
+/* API-defined return codes.  SUCCESS must be > 0 and FAILURE must be <= 0.  */
+#define SUCCESS 1
+#define FAILURE 0
+
+/* API-defined functions.  */
+extern LDFILE *ldopen (char *, LDFILE *);
+extern char *ldgetname (LDFILE *, SYMENT *);
+extern int ldtbread (LDFILE *, long, SYMENT *);
+extern int ldclose (LDFILE *);
+
+#endif
+
+#endif /* GCC_COLLECT2_AIX_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/collect2.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/collect2.h
new file mode 100644
index 0000000..34d17c2
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/collect2.h
@@ -0,0 +1,45 @@
+/* Header file for collect/tlink routines.
+   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_COLLECT2_H
+#define GCC_COLLECT2_H
+
+extern void do_tlink (char **, char **);
+
+extern struct pex_obj *collect_execute (const char *, char **, const char *,
+					const char *, int flags);
+
+extern int collect_wait (const char *, struct pex_obj *);
+
+extern void dump_ld_file (const char *, FILE *);
+
+extern int file_exists (const char *);
+
+extern const char *ldout;
+extern const char *lderrout;
+extern const char *c_file_name;
+extern struct obstack temporary_obstack;
+extern char *temporary_firstobj;
+extern bool may_unlink_output_file;
+
+extern void notice_translated (const char *, ...) ATTRIBUTE_PRINTF_1;
+extern void notice (const char *, ...) ATTRIBUTE_PRINTF_1;
+
+extern bool at_file_supplied;
+#endif /* ! GCC_COLLECT2_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/color-macros.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/color-macros.h
new file mode 100644
index 0000000..005d482
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/color-macros.h
@@ -0,0 +1,108 @@
+/* Terminal color manipulation macros.
+   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_COLOR_MACROS_H
+#define GCC_COLOR_MACROS_H
+
+/* Select Graphic Rendition (SGR, "\33[...m") strings.  */
+/* Also Erase in Line (EL) to Right ("\33[K") by default.  */
+/*    Why have EL to Right after SGR?
+	 -- The behavior of line-wrapping when at the bottom of the
+	    terminal screen and at the end of the current line is often
+	    such that a new line is introduced, entirely cleared with
+	    the current background color which may be different from the
+	    default one (see the boolean back_color_erase terminfo(5)
+	    capability), thus scrolling the display by one line.
+	    The end of this new line will stay in this background color
+	    even after reverting to the default background color with
+	    "\33[m', unless it is explicitly cleared again with "\33[K"
+	    (which is the behavior the user would instinctively expect
+	    from the whole thing).  There may be some unavoidable
+	    background-color flicker at the end of this new line because
+	    of this (when timing with the monitor's redraw is just right).
+	 -- The behavior of HT (tab, "\t") is usually the same as that of
+	    Cursor Forward Tabulation (CHT) with a default parameter
+	    of 1 ("\33[I"), i.e., it performs pure movement to the next
+	    tab stop, without any clearing of either content or screen
+	    attributes (including background color); try
+	       printf 'asdfqwerzxcv\rASDF\tZXCV\n'
+	    in a bash(1) shell to demonstrate this.  This is not what the
+	    user would instinctively expect of HT (but is ok for CHT).
+	    The instinctive behavior would include clearing the terminal
+	    cells that are skipped over by HT with blank cells in the
+	    current screen attributes, including background color;
+	    the boolean dest_tabs_magic_smso terminfo(5) capability
+	    indicates this saner behavior for HT, but only some rare
+	    terminals have it (although it also indicates a special
+	    glitch with standout mode in the Teleray terminal for which
+	    it was initially introduced).  The remedy is to add "\33K"
+	    after each SGR sequence, be it START (to fix the behavior
+	    of any HT after that before another SGR) or END (to fix the
+	    behavior of an HT in default background color that would
+	    follow a line-wrapping at the bottom of the screen in another
+	    background color, and to complement doing it after START).
+	    Piping GCC's output through a pager such as less(1) avoids
+	    any HT problems since the pager performs tab expansion.
+
+      Generic disadvantages of this remedy are:
+	 -- Some very rare terminals might support SGR but not EL (nobody
+	    will use "gcc -fdiagnostics-color" on a terminal that does not
+	    support SGR in the first place).
+	 -- Having these extra control sequences might somewhat complicate
+	    the task of any program trying to parse "gcc -fdiagnostics-color"
+	    output in order to extract structuring information from it.
+      A specific disadvantage to doing it after SGR START is:
+	 -- Even more possible background color flicker (when timing
+	    with the monitor's redraw is just right), even when not at the
+	    bottom of the screen.
+      There are no additional disadvantages specific to doing it after
+      SGR END.
+
+      It would be impractical for GCC to become a full-fledged
+      terminal program linked against ncurses or the like, so it will
+      not detect terminfo(5) capabilities.  */
+
+#define COLOR_SEPARATOR		";"
+#define COLOR_NONE		"00"
+#define COLOR_BOLD		"01"
+#define COLOR_UNDERSCORE	"04"
+#define COLOR_BLINK		"05"
+#define COLOR_REVERSE		"07"
+#define COLOR_FG_BLACK		"30"
+#define COLOR_FG_RED		"31"
+#define COLOR_FG_GREEN		"32"
+#define COLOR_FG_YELLOW		"33"
+#define COLOR_FG_BLUE		"34"
+#define COLOR_FG_MAGENTA	"35"
+#define COLOR_FG_CYAN		"36"
+#define COLOR_FG_WHITE		"37"
+#define COLOR_BG_BLACK		"40"
+#define COLOR_BG_RED		"41"
+#define COLOR_BG_GREEN		"42"
+#define COLOR_BG_YELLOW		"43"
+#define COLOR_BG_BLUE		"44"
+#define COLOR_BG_MAGENTA	"45"
+#define COLOR_BG_CYAN		"46"
+#define COLOR_BG_WHITE		"47"
+#define SGR_START		"\33["
+#define SGR_END			"m\33[K"
+#define SGR_SEQ(str)		SGR_START str SGR_END
+#define SGR_RESET		SGR_SEQ("")
+
+#endif  /* GCC_COLOR_MACROS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/conditions.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/conditions.h
new file mode 100644
index 0000000..ac23756
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/conditions.h
@@ -0,0 +1,118 @@
+/* Definitions for condition code handling in final.c and output routines.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_CONDITIONS_H
+#define GCC_CONDITIONS_H
+
+/* The variable cc_status says how to interpret the condition code.
+   It is set by output routines for an instruction that sets the cc's
+   and examined by output routines for jump instructions.
+
+   cc_status contains two components named `value1' and `value2'
+   that record two equivalent expressions for the values that the
+   condition codes were set from.  (Either or both may be null if
+   there is no useful expression to record.)  These fields are
+   used for eliminating redundant test and compare instructions
+   in the cases where the condition codes were already set by the
+   previous instruction.
+
+   cc_status.flags contains flags which say that the condition codes
+   were set in a nonstandard manner.  The output of jump instructions
+   uses these flags to compensate and produce the standard result
+   with the nonstandard condition codes.  Standard flags are defined here.
+   The tm.h file can also define other machine-dependent flags.
+
+   cc_status also contains a machine-dependent component `mdep'
+   whose type, `CC_STATUS_MDEP', may be defined as a macro in the
+   tm.h file.  */
+
+#ifndef CC_STATUS_MDEP
+#define CC_STATUS_MDEP int
+#endif
+
+#ifndef CC_STATUS_MDEP_INIT
+#define CC_STATUS_MDEP_INIT 0
+#endif
+
+struct CC_STATUS {int flags; rtx value1, value2; CC_STATUS_MDEP mdep;};
+
+/* While outputting an insn as assembler code,
+   this is the status BEFORE that insn.  */
+extern CC_STATUS cc_prev_status;
+
+/* While outputting an insn as assembler code,
+   this is being altered to the status AFTER that insn.  */
+extern CC_STATUS cc_status;
+
+/* These are the machine-independent flags:  */
+
+/* Set if the sign of the cc value is inverted:
+   output a following jump-if-less as a jump-if-greater, etc.  */
+#define CC_REVERSED 1
+
+/* This bit means that the current setting of the N bit is bogus
+   and conditional jumps should use the Z bit in its place.
+   This state obtains when an extraction of a signed single-bit field
+   or an arithmetic shift right of a byte by 7 bits
+   is turned into a btst, because btst does not set the N bit.  */
+#define CC_NOT_POSITIVE 2
+
+/* This bit means that the current setting of the N bit is bogus
+   and conditional jumps should pretend that the N bit is clear.
+   Used after extraction of an unsigned bit
+   or logical shift right of a byte by 7 bits is turned into a btst.
+   The btst does not alter the N bit, but the result of that shift
+   or extract is never negative.  */
+#define CC_NOT_NEGATIVE 4
+
+/* This bit means that the current setting of the overflow flag
+   is bogus and conditional jumps should pretend there is no overflow.  */
+/* ??? Note that for most targets this macro is misnamed as it applies
+   to the carry flag, not the overflow flag.  */
+#define CC_NO_OVERFLOW 010
+
+/* This bit means that what ought to be in the Z bit
+   should be tested as the complement of the N bit.  */
+#define CC_Z_IN_NOT_N 020
+
+/* This bit means that what ought to be in the Z bit
+   should be tested as the N bit.  */
+#define CC_Z_IN_N 040
+
+/* Nonzero if we must invert the sense of the following branch, i.e.
+   change EQ to NE.  This is not safe for IEEE floating point operations!
+   It is intended for use only when a combination of arithmetic
+   or logical insns can leave the condition codes set in a fortuitous
+   (though inverted) state.  */
+#define CC_INVERTED 0100
+
+/* Nonzero if we must convert signed condition operators to unsigned.
+   This is only used by machine description files.  */
+#define CC_NOT_SIGNED 0200
+
+/* This is how to initialize the variable cc_status.
+   final does this at appropriate moments.  */
+
+/* FIXME: We want to get rid of these ifndefs.  */
+#ifndef CC_STATUS_INIT
+#define CC_STATUS_INIT  \
+ (cc_status.flags = 0, cc_status.value1 = 0, cc_status.value2 = 0,  \
+  CC_STATUS_MDEP_INIT)
+#endif
+#endif /* GCC_CONDITIONS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/config.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config.h
new file mode 100644
index 0000000..aa6dd6b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config.h
@@ -0,0 +1,10 @@
+#ifndef GCC_CONFIG_H
+#define GCC_CONFIG_H
+#ifdef GENERATOR_FILE
+#error config.h is for the host, not build, machine.
+#endif
+#include "auto-host.h"
+#ifdef IN_GCC
+# include "ansidecl.h"
+#endif
+#endif /* GCC_CONFIG_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-arches.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-arches.def
new file mode 100644
index 0000000..d258bd4
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-arches.def
@@ -0,0 +1,40 @@
+/* Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Contributed by ARM Ltd.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Before using #include to read this file, define a macro:
+
+      AARCH64_ARCH(NAME, CORE, ARCH_IDENT, ARCH_REV, FLAGS)
+
+   The NAME is the name of the architecture, represented as a string
+   constant.  The CORE is the identifier for a core representative of
+   this architecture.  ARCH_IDENT is the architecture identifier.  It must be
+   unique and be syntactically valid to appear as part of an enum identifier.
+   ARCH_REV is an integer specifying the architecture major revision.
+   FLAGS are the flags implied by the architecture.
+   Due to the assumptions about the positions of these fields in config.gcc,
+   the NAME should be kept as the first argument and FLAGS as the last.  */
+
+AARCH64_ARCH("armv8-a",	      generic,	     8A,	8,  AARCH64_FL_FOR_ARCH8)
+AARCH64_ARCH("armv8.1-a",     generic,	     8_1A,	8,  AARCH64_FL_FOR_ARCH8_1)
+AARCH64_ARCH("armv8.2-a",     generic,	     8_2A,	8,  AARCH64_FL_FOR_ARCH8_2)
+AARCH64_ARCH("armv8.3-a",     generic,	     8_3A,	8,  AARCH64_FL_FOR_ARCH8_3)
+AARCH64_ARCH("armv8.4-a",     generic,	     8_4A,	8,  AARCH64_FL_FOR_ARCH8_4)
+AARCH64_ARCH("armv8.5-a",     generic,	     8_5A,	8,  AARCH64_FL_FOR_ARCH8_5)
+
+#undef AARCH64_ARCH
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-cores.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-cores.def
new file mode 100644
index 0000000..82d91d6
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-cores.def
@@ -0,0 +1,127 @@
+/* Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Contributed by ARM Ltd.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This is a list of cores that implement AArch64.
+
+   Before using #include to read this file, define a macro:
+
+      AARCH64_CORE(CORE_NAME, CORE_IDENT, SCHEDULER_IDENT, ARCH_IDENT, FLAGS, COSTS, IMP, PART, VARIANT)
+
+   The CORE_NAME is the name of the core, represented as a string constant.
+   The CORE_IDENT is the name of the core, represented as an identifier.
+   The SCHEDULER_IDENT is the name of the core for which scheduling decisions
+   will be made, represented as an identifier.
+   ARCH_IDENT is the architecture implemented by the chip as specified in
+   aarch64-arches.def.
+   FLAGS are the bitwise-or of the traits that apply to that core.
+   This need not include flags implied by the architecture.
+   COSTS is the name of the rtx_costs routine to use.
+   IMP is the implementer ID of the CPU vendor.  On a GNU/Linux system it
+   can be found in /proc/cpuinfo. A partial list of implementer IDs is
+   given in the ARM Architecture Reference Manual ARMv8, for
+   ARMv8-A architecture profile.
+   PART is the part number of the CPU.  On a GNU/Linux system it can be
+   found in /proc/cpuinfo.  For big.LITTLE systems this should use the
+   macro AARCH64_BIG_LITTLE where the big part number comes as the first
+   argument to the macro and little is the second.
+   VARIANT is the variant of the CPU.  In a GNU/Linux system it can found
+   in /proc/cpuinfo.  If this is -1, this means it can match any variant.  */
+
+/* ARMv8-A Architecture Processors.  */
+
+/* ARM ('A') cores. */
+AARCH64_CORE("cortex-a35",  cortexa35, cortexa53, 8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa35, 0x41, 0xd04, -1)
+AARCH64_CORE("cortex-a53",  cortexa53, cortexa53, 8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa53, 0x41, 0xd03, -1)
+AARCH64_CORE("cortex-a57",  cortexa57, cortexa57, 8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa57, 0x41, 0xd07, -1)
+AARCH64_CORE("cortex-a72",  cortexa72, cortexa57, 8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa72, 0x41, 0xd08, -1)
+AARCH64_CORE("cortex-a73",  cortexa73, cortexa57, 8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa73, 0x41, 0xd09, -1)
+
+/* Cavium ('C') cores. */
+AARCH64_CORE("thunderx",      thunderx,      thunderx,  8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, thunderx,  0x43, 0x0a0, -1)
+/* Do not swap around "thunderxt88p1" and "thunderxt88",
+   this order is required to handle variant correctly. */
+AARCH64_CORE("thunderxt88p1", thunderxt88p1, thunderx,  8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO,	thunderxt88,  0x43, 0x0a1, 0)
+AARCH64_CORE("thunderxt88",   thunderxt88,   thunderx,  8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, thunderxt88,  0x43, 0x0a1, -1)
+
+/* OcteonTX is the official name for T81/T83. */
+AARCH64_CORE("octeontx",      octeontx,      thunderx,  8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, thunderx,  0x43, 0x0a0, -1)
+AARCH64_CORE("octeontx81",    octeontxt81,   thunderx,  8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, thunderx,  0x43, 0x0a2, -1)
+AARCH64_CORE("octeontx83",    octeontxt83,   thunderx,  8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, thunderx,  0x43, 0x0a3, -1)
+
+AARCH64_CORE("thunderxt81",   thunderxt81,   thunderx,  8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, thunderx,  0x43, 0x0a2, -1)
+AARCH64_CORE("thunderxt83",   thunderxt83,   thunderx,  8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, thunderx,  0x43, 0x0a3, -1)
+
+/* Ampere Computing cores. */
+/* Do not swap around "emag" and "xgene1",
+   this order is required to handle variant correctly. */
+AARCH64_CORE("emag",        emag,      xgene1,    8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, emag, 0x50, 0x000, 3)
+
+/* APM ('P') cores. */
+AARCH64_CORE("xgene1",      xgene1,    xgene1,    8A,  AARCH64_FL_FOR_ARCH8, xgene1, 0x50, 0x000, -1)
+
+/* Qualcomm ('Q') cores. */
+AARCH64_CORE("falkor",      falkor,    falkor,    8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO | AARCH64_FL_RDMA, qdf24xx,   0x51, 0xC00, -1)
+AARCH64_CORE("qdf24xx",     qdf24xx,   falkor,    8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO | AARCH64_FL_RDMA, qdf24xx,   0x51, 0xC00, -1)
+
+/* Samsung ('S') cores. */
+AARCH64_CORE("exynos-m1",   exynosm1,  exynosm1,  8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, exynosm1,  0x53, 0x001, -1)
+
+/* HXT ('h') cores. */
+AARCH64_CORE("phecda",      phecda,    falkor,    8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, qdf24xx,   0x68, 0x000, -1)
+
+/* ARMv8.1-A Architecture Processors.  */
+
+/* Broadcom ('B') cores. */
+AARCH64_CORE("thunderx2t99p1",  thunderx2t99p1, thunderx2t99, 8_1A,  AARCH64_FL_FOR_ARCH8_1 | AARCH64_FL_CRYPTO, thunderx2t99, 0x42, 0x516, -1)
+AARCH64_CORE("vulcan",  vulcan, thunderx2t99, 8_1A,  AARCH64_FL_FOR_ARCH8_1 | AARCH64_FL_CRYPTO, thunderx2t99, 0x42, 0x516, -1)
+
+/* Cavium ('C') cores. */
+AARCH64_CORE("thunderx2t99",  thunderx2t99,  thunderx2t99, 8_1A,  AARCH64_FL_FOR_ARCH8_1 | AARCH64_FL_CRYPTO, thunderx2t99, 0x43, 0x0af, -1)
+
+/* ARMv8.2-A Architecture Processors.  */
+
+/* ARM ('A') cores. */
+AARCH64_CORE("cortex-a55",  cortexa55, cortexa53, 8_2A,  AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_F16 | AARCH64_FL_RCPC | AARCH64_FL_DOTPROD, cortexa53, 0x41, 0xd05, -1)
+AARCH64_CORE("cortex-a75",  cortexa75, cortexa57, 8_2A,  AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_F16 | AARCH64_FL_RCPC | AARCH64_FL_DOTPROD, cortexa73, 0x41, 0xd0a, -1)
+AARCH64_CORE("cortex-a76",  cortexa76, cortexa57, 8_2A,  AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_F16 | AARCH64_FL_RCPC | AARCH64_FL_DOTPROD, cortexa72, 0x41, 0xd0b, -1)
+AARCH64_CORE("ares",  ares, cortexa57, 8_2A,  AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_F16 | AARCH64_FL_RCPC | AARCH64_FL_DOTPROD | AARCH64_FL_PROFILE, neoversen1, 0x41, 0xd0c, -1)
+AARCH64_CORE("neoverse-n1",  neoversen1, cortexa57, 8_2A,  AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_F16 | AARCH64_FL_RCPC | AARCH64_FL_DOTPROD | AARCH64_FL_PROFILE, neoversen1, 0x41, 0xd0c, -1)
+AARCH64_CORE("neoverse-e1",  neoversee1, cortexa53, 8_2A,  AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_F16 | AARCH64_FL_RCPC | AARCH64_FL_DOTPROD | AARCH64_FL_SSBS, cortexa53, 0x41, 0xd4a, -1)
+
+/* HiSilicon ('H') cores. */
+AARCH64_CORE("tsv110",  tsv110, tsv110, 8_2A,  AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_CRYPTO | AARCH64_FL_F16 | AARCH64_FL_AES | AARCH64_FL_SHA2, tsv110,   0x48, 0xd01, -1)
+
+/* ARMv8.4-A Architecture Processors.  */
+
+/* Qualcomm ('Q') cores. */
+AARCH64_CORE("saphira",     saphira,    saphira,    8_4A,  AARCH64_FL_FOR_ARCH8_4 | AARCH64_FL_CRYPTO | AARCH64_FL_RCPC, saphira,   0x51, 0xC01, -1)
+
+/* ARMv8-A big.LITTLE implementations.  */
+
+AARCH64_CORE("cortex-a57.cortex-a53",  cortexa57cortexa53, cortexa53, 8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa57, 0x41, AARCH64_BIG_LITTLE (0xd07, 0xd03), -1)
+AARCH64_CORE("cortex-a72.cortex-a53",  cortexa72cortexa53, cortexa53, 8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa72, 0x41, AARCH64_BIG_LITTLE (0xd08, 0xd03), -1)
+AARCH64_CORE("cortex-a73.cortex-a35",  cortexa73cortexa35, cortexa53, 8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa73, 0x41, AARCH64_BIG_LITTLE (0xd09, 0xd04), -1)
+AARCH64_CORE("cortex-a73.cortex-a53",  cortexa73cortexa53, cortexa53, 8A,  AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC, cortexa73, 0x41, AARCH64_BIG_LITTLE (0xd09, 0xd03), -1)
+
+/* ARM DynamIQ big.LITTLE configurations.  */
+
+AARCH64_CORE("cortex-a75.cortex-a55",  cortexa75cortexa55, cortexa53, 8_2A,  AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_F16 | AARCH64_FL_RCPC | AARCH64_FL_DOTPROD, cortexa73, 0x41, AARCH64_BIG_LITTLE (0xd0a, 0xd05), -1)
+AARCH64_CORE("cortex-a76.cortex-a55",  cortexa76cortexa55, cortexa53, 8_2A,  AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_F16 | AARCH64_FL_RCPC | AARCH64_FL_DOTPROD, cortexa72, 0x41, AARCH64_BIG_LITTLE (0xd0b, 0xd05), -1)
+
+#undef AARCH64_CORE
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-elf-raw.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-elf-raw.h
new file mode 100644
index 0000000..bbebd0e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-elf-raw.h
@@ -0,0 +1,58 @@
+/* Machine description for AArch64 architecture.
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Contributed by ARM Ltd.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Support for bare-metal builds.  */
+#ifndef GCC_AARCH64_ELF_RAW_H
+#define GCC_AARCH64_ELF_RAW_H
+
+#define STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
+#define ENDFILE_SPEC \
+  " crtend%O%s crtn%O%s " \
+  "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s}"
+
+#if TARGET_FIX_ERR_A53_835769_DEFAULT
+#define CA53_ERR_835769_SPEC \
+  " %{!mno-fix-cortex-a53-835769:--fix-cortex-a53-835769}"
+#else
+#define CA53_ERR_835769_SPEC \
+  " %{mfix-cortex-a53-835769:--fix-cortex-a53-835769}"
+#endif
+
+#if TARGET_FIX_ERR_A53_843419_DEFAULT
+#define CA53_ERR_843419_SPEC \
+  " %{!mno-fix-cortex-a53-843419:--fix-cortex-a53-843419}"
+#else
+#define CA53_ERR_843419_SPEC \
+  " %{mfix-cortex-a53-843419:--fix-cortex-a53-843419}"
+#endif
+
+#ifndef LINK_SPEC
+#define LINK_SPEC "%{h*}			\
+   %{static:-Bstatic}				\
+   %{shared:-shared}				\
+   %{symbolic:-Bsymbolic}			\
+   %{!static:%{rdynamic:-export-dynamic}}	\
+   %{mbig-endian:-EB} %{mlittle-endian:-EL} -X	\
+  -maarch64elf%{mabi=ilp32*:32}%{mbig-endian:b}" \
+  CA53_ERR_835769_SPEC \
+  CA53_ERR_843419_SPEC
+#endif
+
+#endif /* GCC_AARCH64_ELF_RAW_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-elf.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-elf.h
new file mode 100644
index 0000000..6b3e0c2
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-elf.h
@@ -0,0 +1,150 @@
+/* Machine description for AArch64 architecture.
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Contributed by ARM Ltd.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_AARCH64_ELF_H
+#define GCC_AARCH64_ELF_H
+
+
+#define ASM_OUTPUT_LABELREF(FILE, NAME) \
+  aarch64_asm_output_labelref (FILE, NAME)
+
+#define TEXT_SECTION_ASM_OP	"\t.text"
+#define DATA_SECTION_ASM_OP	"\t.data"
+#define BSS_SECTION_ASM_OP	"\t.bss"
+
+#define CTORS_SECTION_ASM_OP "\t.section\t.init_array,\"aw\",%init_array"
+#define DTORS_SECTION_ASM_OP "\t.section\t.fini_array,\"aw\",%fini_array"
+
+#undef INIT_SECTION_ASM_OP
+#undef FINI_SECTION_ASM_OP
+#define INIT_ARRAY_SECTION_ASM_OP CTORS_SECTION_ASM_OP
+#define FINI_ARRAY_SECTION_ASM_OP DTORS_SECTION_ASM_OP
+
+/* Since we use .init_array/.fini_array we don't need the markers at
+   the start and end of the ctors/dtors arrays.  */
+#define CTOR_LIST_BEGIN asm (CTORS_SECTION_ASM_OP)
+#define CTOR_LIST_END		/* empty */
+#define DTOR_LIST_BEGIN asm (DTORS_SECTION_ASM_OP)
+#define DTOR_LIST_END		/* empty */
+
+#undef TARGET_ASM_CONSTRUCTOR
+#define TARGET_ASM_CONSTRUCTOR aarch64_elf_asm_constructor
+
+#undef TARGET_ASM_DESTRUCTOR
+#define TARGET_ASM_DESTRUCTOR aarch64_elf_asm_destructor
+
+#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
+/* Support for -falign-* switches.  Use .p2align to ensure that code
+   sections are padded with NOP instructions, rather than zeros.  */
+#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE, LOG, MAX_SKIP)		\
+  do								\
+    {								\
+      if ((LOG) != 0)						\
+	{							\
+	  if ((MAX_SKIP) == 0)					\
+	    fprintf ((FILE), "\t.p2align %d\n", (int) (LOG));	\
+	  else							\
+	    fprintf ((FILE), "\t.p2align %d,,%d\n",		\
+		     (int) (LOG), (int) (MAX_SKIP));		\
+	}							\
+    } while (0)
+
+#endif /* HAVE_GAS_MAX_SKIP_P2ALIGN */
+
+#define JUMP_TABLES_IN_TEXT_SECTION 0
+
+#define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL)		\
+  do {									\
+    switch (GET_MODE (BODY))						\
+      {									\
+      case E_QImode:							\
+	asm_fprintf (STREAM, "\t.byte\t(%LL%d - %LLrtx%d) / 4\n",	\
+		     VALUE, REL);					\
+	break;								\
+      case E_HImode:							\
+	asm_fprintf (STREAM, "\t.2byte\t(%LL%d - %LLrtx%d) / 4\n",	\
+		     VALUE, REL);					\
+	break;								\
+      case E_SImode:							\
+      case E_DImode: /* See comment in aarch64_output_casesi.  */		\
+	asm_fprintf (STREAM, "\t.word\t(%LL%d - %LLrtx%d) / 4\n",	\
+		     VALUE, REL);					\
+	break;								\
+      default:								\
+	gcc_unreachable ();						\
+      }									\
+  } while (0)
+
+#define ASM_OUTPUT_ALIGN(STREAM, POWER)		\
+  fprintf(STREAM, "\t.align\t%d\n", (int)POWER)
+
+#define ASM_COMMENT_START "//"
+
+#define LOCAL_LABEL_PREFIX	"."
+#define USER_LABEL_PREFIX	""
+
+#define GLOBAL_ASM_OP "\t.global\t"
+
+#ifdef TARGET_BIG_ENDIAN_DEFAULT
+#define ENDIAN_SPEC "-mbig-endian"
+#else
+#define ENDIAN_SPEC "-mlittle-endian"
+#endif
+
+#if TARGET_DATA_MODEL == 1
+#define ABI_SPEC  "-mabi=lp64"
+#define MULTILIB_DEFAULTS { "mabi=lp64" }
+#elif TARGET_DATA_MODEL == 2
+#define ABI_SPEC  "-mabi=ilp32"
+#define MULTILIB_DEFAULTS { "mabi=ilp32" }
+#else
+#error "Unknown or undefined TARGET_DATA_MODEL!"
+#endif
+
+/* Force the default endianness and ABI flags onto the command line
+   in order to make the other specs easier to write.  */
+#undef DRIVER_SELF_SPECS
+#define DRIVER_SELF_SPECS \
+  " %{!mbig-endian:%{!mlittle-endian:" ENDIAN_SPEC "}}" \
+  " %{!mabi=*:" ABI_SPEC "}" \
+  MCPU_MTUNE_NATIVE_SPECS
+
+#ifdef HAVE_AS_MABI_OPTION
+#define ASM_MABI_SPEC	"%{mabi=*:-mabi=%*}"
+#else
+#define ASM_MABI_SPEC	"%{mabi=lp64:}"
+#endif
+
+#ifndef ASM_SPEC
+#define ASM_SPEC "\
+%{mbig-endian:-EB} \
+%{mlittle-endian:-EL} \
+%{march=*:-march=%*} \
+%(asm_cpu_spec)" \
+ASM_MABI_SPEC
+#endif
+
+#undef TYPE_OPERAND_FMT
+#define TYPE_OPERAND_FMT	"%%%s"
+
+/* Stabs debug not required.  */
+#undef DBX_DEBUGGING_INFO
+
+#endif /* GCC_AARCH64_ELF_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-fusion-pairs.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-fusion-pairs.def
new file mode 100644
index 0000000..ce4bb92
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-fusion-pairs.def
@@ -0,0 +1,39 @@
+/* Copyright (C) 2015-2019 Free Software Foundation, Inc.
+   Contributed by ARM Ltd.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Pairs of instructions which can be fused. before including this file,
+   define a macro:
+
+     AARCH64_FUSION_PAIR (name, internal_name)
+
+   Where:
+
+     NAME is a string giving a friendly name for the instructions to fuse.
+     INTERNAL_NAME gives the internal name suitable for appending to
+     AARCH64_FUSE_ to give an enum name. */
+
+AARCH64_FUSION_PAIR ("mov+movk", MOV_MOVK)
+AARCH64_FUSION_PAIR ("adrp+add", ADRP_ADD)
+AARCH64_FUSION_PAIR ("movk+movk", MOVK_MOVK)
+AARCH64_FUSION_PAIR ("adrp+ldr", ADRP_LDR)
+AARCH64_FUSION_PAIR ("cmp+branch", CMP_BRANCH)
+AARCH64_FUSION_PAIR ("aes+aesmc", AES_AESMC)
+AARCH64_FUSION_PAIR ("alu+branch", ALU_BRANCH)
+
+#undef AARCH64_FUSION_PAIR
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-opts.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-opts.h
new file mode 100644
index 0000000..4b07d29
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-opts.h
@@ -0,0 +1,101 @@
+/* Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Contributed by ARM Ltd.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Definitions for option handling for AArch64.  */
+
+#ifndef GCC_AARCH64_OPTS_H
+#define GCC_AARCH64_OPTS_H
+
+/* The various cores that implement AArch64.  */
+enum aarch64_processor
+{
+#define AARCH64_CORE(NAME, INTERNAL_IDENT, SCHED, ARCH, FLAGS, COSTS, IMP, PART, VARIANT) \
+  INTERNAL_IDENT,
+#include "aarch64-cores.def"
+  /* Used to indicate that no processor has been specified.  */
+  generic,
+  /* Used to mark the end of the processor table.  */
+  aarch64_none
+};
+
+enum aarch64_arch
+{
+#define AARCH64_ARCH(NAME, CORE, ARCH_IDENT, ARCH_REV, FLAGS) \
+  AARCH64_ARCH_##ARCH_IDENT,
+#include "aarch64-arches.def"
+  aarch64_no_arch
+};
+
+/* TLS types.  */
+enum aarch64_tls_type {
+  TLS_TRADITIONAL,
+  TLS_DESCRIPTORS
+};
+
+/* The code model defines the address generation strategy.
+   Most have a PIC and non-PIC variant.  */
+enum aarch64_code_model {
+  /* Static code and data fit within a 1MB region.
+     Not fully implemented, mostly treated as SMALL.  */
+  AARCH64_CMODEL_TINY,
+  /* Static code, data and GOT/PLT fit within a 1MB region.
+     Not fully implemented, mostly treated as SMALL_PIC.  */
+  AARCH64_CMODEL_TINY_PIC,
+  /* Static code and data fit within a 4GB region.
+     The default non-PIC code model.  */
+  AARCH64_CMODEL_SMALL,
+  /* Static code, data and GOT/PLT fit within a 4GB region.
+     The default PIC code model.  */
+  AARCH64_CMODEL_SMALL_PIC,
+  /* -fpic for small memory model.
+     GOT size to 28KiB (4K*8-4K) or 3580 entries.  */
+  AARCH64_CMODEL_SMALL_SPIC,
+  /* No assumptions about addresses of code and data.
+     The PIC variant is not yet implemented.  */
+  AARCH64_CMODEL_LARGE
+};
+
+/* Function types -msign-return-address should sign.  */
+enum aarch64_function_type {
+  /* Don't sign any function.  */
+  AARCH64_FUNCTION_NONE,
+  /* Non-leaf functions.  */
+  AARCH64_FUNCTION_NON_LEAF,
+  /* All functions.  */
+  AARCH64_FUNCTION_ALL
+};
+
+/* SVE vector register sizes.  */
+enum aarch64_sve_vector_bits_enum {
+  SVE_SCALABLE,
+  SVE_NOT_IMPLEMENTED = SVE_SCALABLE,
+  SVE_128 = 128,
+  SVE_256 = 256,
+  SVE_512 = 512,
+  SVE_1024 = 1024,
+  SVE_2048 = 2048
+};
+
+/* Where to get the canary for the stack protector.  */
+enum stack_protector_guard {
+  SSP_SYSREG,			/* per-thread canary in special system register */
+  SSP_GLOBAL			/* global canary */
+};
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-protos.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-protos.h
new file mode 100644
index 0000000..b6c0d0a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-protos.h
@@ -0,0 +1,645 @@
+/* Machine description for AArch64 architecture.
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Contributed by ARM Ltd.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+
+#ifndef GCC_AARCH64_PROTOS_H
+#define GCC_AARCH64_PROTOS_H
+
+#include "input.h"
+
+/* SYMBOL_SMALL_ABSOLUTE: Generate symbol accesses through
+   high and lo relocs that calculate the base address using a PC
+   relative reloc.
+   So to get the address of foo, we generate
+   adrp x0, foo
+   add  x0, x0, :lo12:foo
+
+   To load or store something to foo, we could use the corresponding
+   load store variants that generate an
+   ldr x0, [x0,:lo12:foo]
+   or
+   str x1, [x0, :lo12:foo]
+
+   This corresponds to the small code model of the compiler.
+
+   SYMBOL_SMALL_GOT_4G: Similar to the one above but this
+   gives us the GOT entry of the symbol being referred to :
+   Thus calculating the GOT entry for foo is done using the
+   following sequence of instructions.  The ADRP instruction
+   gets us to the page containing the GOT entry of the symbol
+   and the got_lo12 gets us the actual offset in it, together
+   the base and offset, we can address 4G size GOT table.
+
+   adrp  x0, :got:foo
+   ldr   x0, [x0, :gotoff_lo12:foo]
+
+   This corresponds to the small PIC model of the compiler.
+
+   SYMBOL_SMALL_GOT_28K: Similar to SYMBOL_SMALL_GOT_4G, but used for symbol
+   restricted within 28K GOT table size.
+
+   ldr reg, [gp, #:gotpage_lo15:sym]
+
+   This corresponds to -fpic model for small memory model of the compiler.
+
+   SYMBOL_SMALL_TLSGD
+   SYMBOL_SMALL_TLSDESC
+   SYMBOL_SMALL_TLSIE
+   SYMBOL_TINY_TLSIE
+   SYMBOL_TLSLE12
+   SYMBOL_TLSLE24
+   SYMBOL_TLSLE32
+   SYMBOL_TLSLE48
+   Each of these represents a thread-local symbol, and corresponds to the
+   thread local storage relocation operator for the symbol being referred to.
+
+   SYMBOL_TINY_ABSOLUTE
+
+   Generate symbol accesses as a PC relative address using a single
+   instruction.  To compute the address of symbol foo, we generate:
+
+   ADR x0, foo
+
+   SYMBOL_TINY_GOT
+
+   Generate symbol accesses via the GOT using a single PC relative
+   instruction.  To compute the address of symbol foo, we generate:
+
+   ldr t0, :got:foo
+
+   The value of foo can subsequently read using:
+
+   ldrb    t0, [t0]
+
+   SYMBOL_FORCE_TO_MEM : Global variables are addressed using
+   constant pool.  All variable addresses are spilled into constant
+   pools.  The constant pools themselves are addressed using PC
+   relative accesses.  This only works for the large code model.
+ */
+enum aarch64_symbol_type
+{
+  SYMBOL_SMALL_ABSOLUTE,
+  SYMBOL_SMALL_GOT_28K,
+  SYMBOL_SMALL_GOT_4G,
+  SYMBOL_SMALL_TLSGD,
+  SYMBOL_SMALL_TLSDESC,
+  SYMBOL_SMALL_TLSIE,
+  SYMBOL_TINY_ABSOLUTE,
+  SYMBOL_TINY_GOT,
+  SYMBOL_TINY_TLSIE,
+  SYMBOL_TLSLE12,
+  SYMBOL_TLSLE24,
+  SYMBOL_TLSLE32,
+  SYMBOL_TLSLE48,
+  SYMBOL_FORCE_TO_MEM
+};
+
+/* Classifies the type of an address query.
+
+   ADDR_QUERY_M
+      Query what is valid for an "m" constraint and a memory_operand
+      (the rules are the same for both).
+
+   ADDR_QUERY_LDP_STP
+      Query what is valid for a load/store pair.
+
+   ADDR_QUERY_LDP_STP_N
+      Query what is valid for a load/store pair, but narrow the incoming mode
+      for address checking.  This is used for the store_pair_lanes patterns.
+
+   ADDR_QUERY_ANY
+      Query what is valid for at least one memory constraint, which may
+      allow things that "m" doesn't.  For example, the SVE LDR and STR
+      addressing modes allow a wider range of immediate offsets than "m"
+      does.  */
+enum aarch64_addr_query_type {
+  ADDR_QUERY_M,
+  ADDR_QUERY_LDP_STP,
+  ADDR_QUERY_LDP_STP_N,
+  ADDR_QUERY_ANY
+};
+
+/* A set of tuning parameters contains references to size and time
+   cost models and vectors for address cost calculations, register
+   move costs and memory move costs.  */
+
+/* Scaled addressing modes can vary cost depending on the mode of the
+   value to be loaded/stored.  QImode values cannot use scaled
+   addressing modes.  */
+
+struct scale_addr_mode_cost
+{
+  const int hi;
+  const int si;
+  const int di;
+  const int ti;
+};
+
+/* Additional cost for addresses.  */
+struct cpu_addrcost_table
+{
+  const struct scale_addr_mode_cost addr_scale_costs;
+  const int pre_modify;
+  const int post_modify;
+  const int register_offset;
+  const int register_sextend;
+  const int register_zextend;
+  const int imm_offset;
+};
+
+/* Additional costs for register copies.  Cost is for one register.  */
+struct cpu_regmove_cost
+{
+  const int GP2GP;
+  const int GP2FP;
+  const int FP2GP;
+  const int FP2FP;
+};
+
+/* Cost for vector insn classes.  */
+struct cpu_vector_cost
+{
+  const int scalar_int_stmt_cost;	 /* Cost of any int scalar operation,
+					    excluding load and store.  */
+  const int scalar_fp_stmt_cost;	 /* Cost of any fp scalar operation,
+					    excluding load and store.  */
+  const int scalar_load_cost;		 /* Cost of scalar load.  */
+  const int scalar_store_cost;		 /* Cost of scalar store.  */
+  const int vec_int_stmt_cost;		 /* Cost of any int vector operation,
+					    excluding load, store, permute,
+					    vector-to-scalar and
+					    scalar-to-vector operation.  */
+  const int vec_fp_stmt_cost;		 /* Cost of any fp vector operation,
+					    excluding load, store, permute,
+					    vector-to-scalar and
+					    scalar-to-vector operation.  */
+  const int vec_permute_cost;		 /* Cost of permute operation.  */
+  const int vec_to_scalar_cost;		 /* Cost of vec-to-scalar operation.  */
+  const int scalar_to_vec_cost;		 /* Cost of scalar-to-vector
+					    operation.  */
+  const int vec_align_load_cost;	 /* Cost of aligned vector load.  */
+  const int vec_unalign_load_cost;	 /* Cost of unaligned vector load.  */
+  const int vec_unalign_store_cost;	 /* Cost of unaligned vector store.  */
+  const int vec_store_cost;		 /* Cost of vector store.  */
+  const int cond_taken_branch_cost;	 /* Cost of taken branch.  */
+  const int cond_not_taken_branch_cost;  /* Cost of not taken branch.  */
+};
+
+/* Branch costs.  */
+struct cpu_branch_cost
+{
+  const int predictable;    /* Predictable branch or optimizing for size.  */
+  const int unpredictable;  /* Unpredictable branch or optimizing for speed.  */
+};
+
+/* Control approximate alternatives to certain FP operators.  */
+#define AARCH64_APPROX_MODE(MODE) \
+  ((MIN_MODE_FLOAT <= (MODE) && (MODE) <= MAX_MODE_FLOAT) \
+   ? (1 << ((MODE) - MIN_MODE_FLOAT)) \
+   : (MIN_MODE_VECTOR_FLOAT <= (MODE) && (MODE) <= MAX_MODE_VECTOR_FLOAT) \
+     ? (1 << ((MODE) - MIN_MODE_VECTOR_FLOAT \
+	      + MAX_MODE_FLOAT - MIN_MODE_FLOAT + 1)) \
+     : (0))
+#define AARCH64_APPROX_NONE (0)
+#define AARCH64_APPROX_ALL (-1)
+
+/* Allowed modes for approximations.  */
+struct cpu_approx_modes
+{
+  const unsigned int division;		/* Division.  */
+  const unsigned int sqrt;		/* Square root.  */
+  const unsigned int recip_sqrt;	/* Reciprocal square root.  */
+};
+
+/* Cache prefetch settings for prefetch-loop-arrays.  */
+struct cpu_prefetch_tune
+{
+  const int num_slots;
+  const int l1_cache_size;
+  const int l1_cache_line_size;
+  const int l2_cache_size;
+  /* Whether software prefetch hints should be issued for non-constant
+     strides.  */
+  const bool prefetch_dynamic_strides;
+  /* The minimum constant stride beyond which we should use prefetch
+     hints for.  */
+  const int minimum_stride;
+  const int default_opt_level;
+};
+
+struct tune_params
+{
+  const struct cpu_cost_table *insn_extra_cost;
+  const struct cpu_addrcost_table *addr_cost;
+  const struct cpu_regmove_cost *regmove_cost;
+  const struct cpu_vector_cost *vec_costs;
+  const struct cpu_branch_cost *branch_costs;
+  const struct cpu_approx_modes *approx_modes;
+  /* Width of the SVE registers or SVE_NOT_IMPLEMENTED if not applicable.
+     Only used for tuning decisions, does not disable VLA
+     vectorization.  */
+  enum aarch64_sve_vector_bits_enum sve_width;
+  int memmov_cost;
+  int issue_rate;
+  unsigned int fusible_ops;
+  const char *function_align;
+  const char *jump_align;
+  const char *loop_align;
+  int int_reassoc_width;
+  int fp_reassoc_width;
+  int vec_reassoc_width;
+  int min_div_recip_mul_sf;
+  int min_div_recip_mul_df;
+  /* Value for aarch64_case_values_threshold; or 0 for the default.  */
+  unsigned int max_case_values;
+/* An enum specifying how to take into account CPU autoprefetch capabilities
+   during instruction scheduling:
+   - AUTOPREFETCHER_OFF: Do not take autoprefetch capabilities into account.
+   - AUTOPREFETCHER_WEAK: Attempt to sort sequences of loads/store in order of
+   offsets but allow the pipeline hazard recognizer to alter that order to
+   maximize multi-issue opportunities.
+   - AUTOPREFETCHER_STRONG: Attempt to sort sequences of loads/store in order of
+   offsets and prefer this even if it restricts multi-issue opportunities.  */
+
+  enum aarch64_autoprefetch_model
+  {
+    AUTOPREFETCHER_OFF,
+    AUTOPREFETCHER_WEAK,
+    AUTOPREFETCHER_STRONG
+  } autoprefetcher_model;
+
+  unsigned int extra_tuning_flags;
+
+  /* Place prefetch struct pointer at the end to enable type checking
+     errors when tune_params misses elements (e.g., from erroneous merges).  */
+  const struct cpu_prefetch_tune *prefetch;
+};
+
+/* Classifies an address.
+
+   ADDRESS_REG_IMM
+       A simple base register plus immediate offset.
+
+   ADDRESS_REG_WB
+       A base register indexed by immediate offset with writeback.
+
+   ADDRESS_REG_REG
+       A base register indexed by (optionally scaled) register.
+
+   ADDRESS_REG_UXTW
+       A base register indexed by (optionally scaled) zero-extended register.
+
+   ADDRESS_REG_SXTW
+       A base register indexed by (optionally scaled) sign-extended register.
+
+   ADDRESS_LO_SUM
+       A LO_SUM rtx with a base register and "LO12" symbol relocation.
+
+   ADDRESS_SYMBOLIC:
+       A constant symbolic address, in pc-relative literal pool.  */
+
+enum aarch64_address_type {
+  ADDRESS_REG_IMM,
+  ADDRESS_REG_WB,
+  ADDRESS_REG_REG,
+  ADDRESS_REG_UXTW,
+  ADDRESS_REG_SXTW,
+  ADDRESS_LO_SUM,
+  ADDRESS_SYMBOLIC
+};
+
+/* Address information.  */
+struct aarch64_address_info {
+  enum aarch64_address_type type;
+  rtx base;
+  rtx offset;
+  poly_int64 const_offset;
+  int shift;
+  enum aarch64_symbol_type symbol_type;
+};
+
+#define AARCH64_FUSION_PAIR(x, name) \
+  AARCH64_FUSE_##name##_index, 
+/* Supported fusion operations.  */
+enum aarch64_fusion_pairs_index
+{
+#include "aarch64-fusion-pairs.def"
+  AARCH64_FUSE_index_END
+};
+
+#define AARCH64_FUSION_PAIR(x, name) \
+  AARCH64_FUSE_##name = (1u << AARCH64_FUSE_##name##_index),
+/* Supported fusion operations.  */
+enum aarch64_fusion_pairs
+{
+  AARCH64_FUSE_NOTHING = 0,
+#include "aarch64-fusion-pairs.def"
+  AARCH64_FUSE_ALL = (1u << AARCH64_FUSE_index_END) - 1
+};
+
+#define AARCH64_EXTRA_TUNING_OPTION(x, name) \
+  AARCH64_EXTRA_TUNE_##name##_index,
+/* Supported tuning flags indexes.  */
+enum aarch64_extra_tuning_flags_index
+{
+#include "aarch64-tuning-flags.def"
+  AARCH64_EXTRA_TUNE_index_END
+};
+
+
+#define AARCH64_EXTRA_TUNING_OPTION(x, name) \
+  AARCH64_EXTRA_TUNE_##name = (1u << AARCH64_EXTRA_TUNE_##name##_index),
+/* Supported tuning flags.  */
+enum aarch64_extra_tuning_flags
+{
+  AARCH64_EXTRA_TUNE_NONE = 0,
+#include "aarch64-tuning-flags.def"
+  AARCH64_EXTRA_TUNE_ALL = (1u << AARCH64_EXTRA_TUNE_index_END) - 1
+};
+
+/* Enum describing the various ways that the
+   aarch64_parse_{arch,tune,cpu,extension} functions can fail.
+   This way their callers can choose what kind of error to give.  */
+
+enum aarch64_parse_opt_result
+{
+  AARCH64_PARSE_OK,			/* Parsing was successful.  */
+  AARCH64_PARSE_MISSING_ARG,		/* Missing argument.  */
+  AARCH64_PARSE_INVALID_FEATURE,	/* Invalid feature modifier.  */
+  AARCH64_PARSE_INVALID_ARG		/* Invalid arch, tune, cpu arg.  */
+};
+
+/* Enum to distinguish which type of check is to be done in
+   aarch64_simd_valid_immediate.  This is used as a bitmask where
+   AARCH64_CHECK_MOV has both bits set.  Thus AARCH64_CHECK_MOV will
+   perform all checks.  Adding new types would require changes accordingly.  */
+enum simd_immediate_check {
+  AARCH64_CHECK_ORR  = 1 << 0,
+  AARCH64_CHECK_BIC  = 1 << 1,
+  AARCH64_CHECK_MOV  = AARCH64_CHECK_ORR | AARCH64_CHECK_BIC
+};
+
+extern struct tune_params aarch64_tune_params;
+
+poly_int64 aarch64_initial_elimination_offset (unsigned, unsigned);
+int aarch64_get_condition_code (rtx);
+bool aarch64_address_valid_for_prefetch_p (rtx, bool);
+bool aarch64_bitmask_imm (HOST_WIDE_INT val, machine_mode);
+unsigned HOST_WIDE_INT aarch64_and_split_imm1 (HOST_WIDE_INT val_in);
+unsigned HOST_WIDE_INT aarch64_and_split_imm2 (HOST_WIDE_INT val_in);
+bool aarch64_and_bitmask_imm (unsigned HOST_WIDE_INT val_in, machine_mode mode);
+int aarch64_branch_cost (bool, bool);
+enum aarch64_symbol_type aarch64_classify_symbolic_expression (rtx);
+bool aarch64_can_const_movi_rtx_p (rtx x, machine_mode mode);
+bool aarch64_const_vec_all_same_int_p (rtx, HOST_WIDE_INT);
+bool aarch64_const_vec_all_same_in_range_p (rtx, HOST_WIDE_INT,
+					    HOST_WIDE_INT);
+bool aarch64_constant_address_p (rtx);
+bool aarch64_emit_approx_div (rtx, rtx, rtx);
+bool aarch64_emit_approx_sqrt (rtx, rtx, bool);
+void aarch64_expand_call (rtx, rtx, bool);
+bool aarch64_expand_movmem (rtx *);
+bool aarch64_float_const_zero_rtx_p (rtx);
+bool aarch64_float_const_rtx_p (rtx);
+bool aarch64_function_arg_regno_p (unsigned);
+bool aarch64_fusion_enabled_p (enum aarch64_fusion_pairs);
+bool aarch64_gen_movmemqi (rtx *);
+bool aarch64_gimple_fold_builtin (gimple_stmt_iterator *);
+bool aarch64_is_extend_from_extract (scalar_int_mode, rtx, rtx);
+bool aarch64_is_long_call_p (rtx);
+bool aarch64_is_noplt_call_p (rtx);
+bool aarch64_label_mentioned_p (rtx);
+void aarch64_declare_function_name (FILE *, const char*, tree);
+bool aarch64_legitimate_pic_operand_p (rtx);
+bool aarch64_mask_and_shift_for_ubfiz_p (scalar_int_mode, rtx, rtx);
+bool aarch64_masks_and_shift_for_bfi_p (scalar_int_mode, unsigned HOST_WIDE_INT,
+					unsigned HOST_WIDE_INT,
+					unsigned HOST_WIDE_INT);
+bool aarch64_zero_extend_const_eq (machine_mode, rtx, machine_mode, rtx);
+bool aarch64_move_imm (HOST_WIDE_INT, machine_mode);
+opt_machine_mode aarch64_sve_pred_mode (unsigned int);
+bool aarch64_sve_cnt_immediate_p (rtx);
+bool aarch64_sve_addvl_addpl_immediate_p (rtx);
+bool aarch64_sve_inc_dec_immediate_p (rtx);
+int aarch64_add_offset_temporaries (rtx);
+void aarch64_split_add_offset (scalar_int_mode, rtx, rtx, rtx, rtx, rtx);
+bool aarch64_mov_operand_p (rtx, machine_mode);
+rtx aarch64_reverse_mask (machine_mode, unsigned int);
+bool aarch64_offset_7bit_signed_scaled_p (machine_mode, poly_int64);
+bool aarch64_offset_9bit_signed_unscaled_p (machine_mode, poly_int64);
+char *aarch64_output_sve_cnt_immediate (const char *, const char *, rtx);
+char *aarch64_output_sve_addvl_addpl (rtx, rtx, rtx);
+char *aarch64_output_sve_inc_dec_immediate (const char *, rtx);
+char *aarch64_output_scalar_simd_mov_immediate (rtx, scalar_int_mode);
+char *aarch64_output_simd_mov_immediate (rtx, unsigned,
+			enum simd_immediate_check w = AARCH64_CHECK_MOV);
+char *aarch64_output_sve_mov_immediate (rtx);
+char *aarch64_output_ptrue (machine_mode, char);
+bool aarch64_pad_reg_upward (machine_mode, const_tree, bool);
+bool aarch64_regno_ok_for_base_p (int, bool);
+bool aarch64_regno_ok_for_index_p (int, bool);
+bool aarch64_reinterpret_float_as_int (rtx value, unsigned HOST_WIDE_INT *fail);
+bool aarch64_simd_check_vect_par_cnst_half (rtx op, machine_mode mode,
+					    bool high);
+bool aarch64_simd_scalar_immediate_valid_for_move (rtx, scalar_int_mode);
+bool aarch64_simd_shift_imm_p (rtx, machine_mode, bool);
+bool aarch64_simd_valid_immediate (rtx, struct simd_immediate_info *,
+			enum simd_immediate_check w = AARCH64_CHECK_MOV);
+rtx aarch64_check_zero_based_sve_index_immediate (rtx);
+bool aarch64_sve_index_immediate_p (rtx);
+bool aarch64_sve_arith_immediate_p (rtx, bool);
+bool aarch64_sve_bitmask_immediate_p (rtx);
+bool aarch64_sve_dup_immediate_p (rtx);
+bool aarch64_sve_cmp_immediate_p (rtx, bool);
+bool aarch64_sve_float_arith_immediate_p (rtx, bool);
+bool aarch64_sve_float_mul_immediate_p (rtx);
+bool aarch64_split_dimode_const_store (rtx, rtx);
+bool aarch64_symbolic_address_p (rtx);
+bool aarch64_uimm12_shift (HOST_WIDE_INT);
+bool aarch64_use_return_insn_p (void);
+bool aarch64_use_simple_return_insn_p (void);
+const char *aarch64_mangle_builtin_type (const_tree);
+const char *aarch64_output_casesi (rtx *);
+
+enum aarch64_symbol_type aarch64_classify_symbol (rtx, HOST_WIDE_INT);
+enum aarch64_symbol_type aarch64_classify_tls_symbol (rtx);
+enum reg_class aarch64_regno_regclass (unsigned);
+int aarch64_asm_preferred_eh_data_format (int, int);
+int aarch64_fpconst_pow_of_2 (rtx);
+machine_mode aarch64_hard_regno_caller_save_mode (unsigned, unsigned,
+						       machine_mode);
+int aarch64_uxt_size (int, HOST_WIDE_INT);
+int aarch64_vec_fpconst_pow_of_2 (rtx);
+rtx aarch64_eh_return_handler_rtx (void);
+rtx aarch64_mask_from_zextract_ops (rtx, rtx);
+const char *aarch64_output_move_struct (rtx *operands);
+rtx aarch64_return_addr (int, rtx);
+rtx aarch64_simd_gen_const_vector_dup (machine_mode, HOST_WIDE_INT);
+bool aarch64_simd_mem_operand_p (rtx);
+bool aarch64_sve_ld1r_operand_p (rtx);
+bool aarch64_sve_ldr_operand_p (rtx);
+bool aarch64_sve_struct_memory_operand_p (rtx);
+rtx aarch64_simd_vect_par_cnst_half (machine_mode, int, bool);
+rtx aarch64_tls_get_addr (void);
+tree aarch64_fold_builtin (tree, int, tree *, bool);
+unsigned aarch64_dbx_register_number (unsigned);
+unsigned aarch64_trampoline_size (void);
+void aarch64_asm_output_labelref (FILE *, const char *);
+void aarch64_cpu_cpp_builtins (cpp_reader *);
+const char * aarch64_gen_far_branch (rtx *, int, const char *, const char *);
+const char * aarch64_output_probe_stack_range (rtx, rtx);
+const char * aarch64_output_probe_sve_stack_clash (rtx, rtx, rtx, rtx);
+void aarch64_err_no_fpadvsimd (machine_mode);
+void aarch64_expand_epilogue (bool);
+void aarch64_expand_mov_immediate (rtx, rtx, rtx (*) (rtx, rtx) = 0);
+void aarch64_emit_sve_pred_move (rtx, rtx, rtx);
+void aarch64_expand_sve_mem_move (rtx, rtx, machine_mode);
+bool aarch64_maybe_expand_sve_subreg_move (rtx, rtx);
+void aarch64_split_sve_subreg_move (rtx, rtx, rtx);
+void aarch64_expand_prologue (void);
+void aarch64_expand_vector_init (rtx, rtx);
+void aarch64_init_cumulative_args (CUMULATIVE_ARGS *, const_tree, rtx,
+				   const_tree, unsigned);
+void aarch64_init_expanders (void);
+void aarch64_init_simd_builtins (void);
+void aarch64_emit_call_insn (rtx);
+void aarch64_register_pragmas (void);
+void aarch64_relayout_simd_types (void);
+void aarch64_reset_previous_fndecl (void);
+bool aarch64_return_address_signing_enabled (void);
+bool aarch64_bti_enabled (void);
+void aarch64_save_restore_target_globals (tree);
+void aarch64_addti_scratch_regs (rtx, rtx, rtx *,
+				 rtx *, rtx *,
+				 rtx *, rtx *,
+				 rtx *);
+void aarch64_subvti_scratch_regs (rtx, rtx, rtx *,
+				  rtx *, rtx *,
+				  rtx *, rtx *, rtx *);
+void aarch64_expand_subvti (rtx, rtx, rtx,
+			    rtx, rtx, rtx, rtx, bool);
+
+
+/* Initialize builtins for SIMD intrinsics.  */
+void init_aarch64_simd_builtins (void);
+
+void aarch64_simd_emit_reg_reg_move (rtx *, machine_mode, unsigned int);
+
+/* Expand builtins for SIMD intrinsics.  */
+rtx aarch64_simd_expand_builtin (int, tree, rtx);
+
+void aarch64_simd_lane_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT, const_tree);
+rtx aarch64_endian_lane_rtx (machine_mode, unsigned int);
+
+void aarch64_split_128bit_move (rtx, rtx);
+
+bool aarch64_split_128bit_move_p (rtx, rtx);
+
+bool aarch64_mov128_immediate (rtx);
+
+void aarch64_split_simd_combine (rtx, rtx, rtx);
+
+void aarch64_split_simd_move (rtx, rtx);
+
+/* Check for a legitimate floating point constant for FMOV.  */
+bool aarch64_float_const_representable_p (rtx);
+
+extern int aarch64_epilogue_uses (int);
+
+#if defined (RTX_CODE)
+void aarch64_gen_unlikely_cbranch (enum rtx_code, machine_mode cc_mode,
+				   rtx label_ref);
+bool aarch64_legitimate_address_p (machine_mode, rtx, bool,
+				   aarch64_addr_query_type = ADDR_QUERY_M);
+machine_mode aarch64_select_cc_mode (RTX_CODE, rtx, rtx);
+rtx aarch64_gen_compare_reg (RTX_CODE, rtx, rtx);
+rtx aarch64_load_tp (rtx);
+
+void aarch64_expand_compare_and_swap (rtx op[]);
+void aarch64_split_compare_and_swap (rtx op[]);
+
+void aarch64_split_atomic_op (enum rtx_code, rtx, rtx, rtx, rtx, rtx, rtx);
+
+bool aarch64_gen_adjusted_ldpstp (rtx *, bool, scalar_mode, RTX_CODE);
+
+void aarch64_expand_sve_vec_cmp_int (rtx, rtx_code, rtx, rtx);
+bool aarch64_expand_sve_vec_cmp_float (rtx, rtx_code, rtx, rtx, bool);
+void aarch64_expand_sve_vcond (machine_mode, machine_mode, rtx *);
+#endif /* RTX_CODE */
+
+void aarch64_init_builtins (void);
+
+bool aarch64_process_target_attr (tree);
+void aarch64_override_options_internal (struct gcc_options *);
+
+rtx aarch64_expand_builtin (tree exp,
+			    rtx target,
+			    rtx subtarget ATTRIBUTE_UNUSED,
+			    machine_mode mode ATTRIBUTE_UNUSED,
+			    int ignore ATTRIBUTE_UNUSED);
+tree aarch64_builtin_decl (unsigned, bool ATTRIBUTE_UNUSED);
+tree aarch64_builtin_rsqrt (unsigned int);
+tree aarch64_builtin_vectorized_function (unsigned int, tree, tree);
+
+extern void aarch64_split_combinev16qi (rtx operands[3]);
+extern void aarch64_expand_vec_perm (rtx, rtx, rtx, rtx, unsigned int);
+extern void aarch64_expand_sve_vec_perm (rtx, rtx, rtx, rtx);
+extern bool aarch64_madd_needs_nop (rtx_insn *);
+extern void aarch64_final_prescan_insn (rtx_insn *);
+void aarch64_atomic_assign_expand_fenv (tree *, tree *, tree *);
+int aarch64_ccmp_mode_to_code (machine_mode mode);
+
+bool extract_base_offset_in_addr (rtx mem, rtx *base, rtx *offset);
+bool aarch64_operands_ok_for_ldpstp (rtx *, bool, machine_mode);
+bool aarch64_operands_adjust_ok_for_ldpstp (rtx *, bool, scalar_mode);
+void aarch64_swap_ldrstr_operands (rtx *, bool);
+
+extern void aarch64_asm_output_pool_epilogue (FILE *, const char *,
+					      tree, HOST_WIDE_INT);
+
+
+extern bool aarch64_classify_address (struct aarch64_address_info *, rtx,
+				      machine_mode, bool,
+				      aarch64_addr_query_type = ADDR_QUERY_M);
+
+/* Defined in common/config/aarch64-common.c.  */
+bool aarch64_handle_option (struct gcc_options *, struct gcc_options *,
+			     const struct cl_decoded_option *, location_t);
+const char *aarch64_rewrite_selected_cpu (const char *name);
+enum aarch64_parse_opt_result aarch64_parse_extension (const char *,
+						       unsigned long *,
+						       std::string *);
+void aarch64_get_all_extension_candidates (auto_vec<const char *> *candidates);
+std::string aarch64_get_extension_string_for_isa_flags (unsigned long,
+							unsigned long);
+
+/* Defined in aarch64-d.c  */
+extern void aarch64_d_target_versions (void);
+
+rtl_opt_pass *make_pass_fma_steering (gcc::context *);
+rtl_opt_pass *make_pass_track_speculation (gcc::context *);
+rtl_opt_pass *make_pass_tag_collision_avoidance (gcc::context *);
+rtl_opt_pass *make_pass_insert_bti (gcc::context *ctxt);
+
+poly_uint64 aarch64_regmode_natural_size (machine_mode);
+
+bool aarch64_high_bits_all_ones_p (HOST_WIDE_INT);
+
+#endif /* GCC_AARCH64_PROTOS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-tuning-flags.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-tuning-flags.def
new file mode 100644
index 0000000..91a0ff5
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64-tuning-flags.def
@@ -0,0 +1,49 @@
+/* Copyright (C) 2015-2019 Free Software Foundation, Inc.
+   Contributed by ARM Ltd.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Additional control over certain tuning parameters.  Before including
+   this file, define a macro:
+
+     AARCH64_EXTRA_TUNING_OPTION (name, internal_name)
+
+   Where:
+
+     NAME is a string giving a friendly name for the tuning flag.
+     INTERNAL_NAME gives the internal name suitable for appending to
+     AARCH64_TUNE_ to give an enum name. */
+
+AARCH64_EXTRA_TUNING_OPTION ("rename_fma_regs", RENAME_FMA_REGS)
+
+/* Don't create non-8 byte aligned load/store pair.  That is if the
+two load/stores are not at least 8 byte aligned don't create load/store
+pairs.   */
+AARCH64_EXTRA_TUNING_OPTION ("slow_unaligned_ldpw", SLOW_UNALIGNED_LDPW)
+
+/* Some of the optional shift to some arthematic instructions are
+   considered cheap.  Logical shift left <=4 with or without a
+   zero extend are considered cheap.  Sign extend; non logical shift left
+   are not considered cheap.  */
+AARCH64_EXTRA_TUNING_OPTION ("cheap_shift_extend", CHEAP_SHIFT_EXTEND)
+
+/* Disallow load/store pair instructions on Q-registers.  */
+AARCH64_EXTRA_TUNING_OPTION ("no_ldp_stp_qregs", NO_LDP_STP_QREGS)
+
+AARCH64_EXTRA_TUNING_OPTION ("rename_load_regs", RENAME_LOAD_REGS)
+
+#undef AARCH64_EXTRA_TUNING_OPTION
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64.h
new file mode 100644
index 0000000..7bd3bf5
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/aarch64.h
@@ -0,0 +1,1117 @@
+/* Machine description for AArch64 architecture.
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Contributed by ARM Ltd.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+
+#ifndef GCC_AARCH64_H
+#define GCC_AARCH64_H
+
+/* Target CPU builtins.  */
+#define TARGET_CPU_CPP_BUILTINS()	\
+  aarch64_cpu_cpp_builtins (pfile)
+
+/* Target CPU versions for D.  */
+#define TARGET_D_CPU_VERSIONS aarch64_d_target_versions
+
+
+
+#define REGISTER_TARGET_PRAGMAS() aarch64_register_pragmas ()
+
+/* Target machine storage layout.  */
+
+#define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE)	\
+  if (GET_MODE_CLASS (MODE) == MODE_INT		\
+      && GET_MODE_SIZE (MODE) < 4)		\
+    {						\
+      if (MODE == QImode || MODE == HImode)	\
+	{					\
+	  MODE = SImode;			\
+	}					\
+    }
+
+/* Bits are always numbered from the LSBit.  */
+#define BITS_BIG_ENDIAN 0
+
+/* Big/little-endian flavour.  */
+#define BYTES_BIG_ENDIAN (TARGET_BIG_END != 0)
+#define WORDS_BIG_ENDIAN (BYTES_BIG_ENDIAN)
+
+/* AdvSIMD is supported in the default configuration, unless disabled by
+   -mgeneral-regs-only or by the +nosimd extension.  */
+#define TARGET_SIMD (!TARGET_GENERAL_REGS_ONLY && AARCH64_ISA_SIMD)
+#define TARGET_FLOAT (!TARGET_GENERAL_REGS_ONLY && AARCH64_ISA_FP)
+
+#define UNITS_PER_WORD		8
+
+#define UNITS_PER_VREG		16
+
+#define PARM_BOUNDARY		64
+
+#define STACK_BOUNDARY		128
+
+#define FUNCTION_BOUNDARY	32
+
+#define EMPTY_FIELD_BOUNDARY	32
+
+#define BIGGEST_ALIGNMENT	128
+
+#define SHORT_TYPE_SIZE		16
+
+#define INT_TYPE_SIZE		32
+
+#define LONG_TYPE_SIZE		(TARGET_ILP32 ? 32 : 64)
+
+#define POINTER_SIZE		(TARGET_ILP32 ? 32 : 64)
+
+#define LONG_LONG_TYPE_SIZE	64
+
+#define FLOAT_TYPE_SIZE		32
+
+#define DOUBLE_TYPE_SIZE	64
+
+#define LONG_DOUBLE_TYPE_SIZE	128
+
+/* This value is the amount of bytes a caller is allowed to drop the stack
+   before probing has to be done for stack clash protection.  */
+#define STACK_CLASH_CALLER_GUARD 1024
+
+/* This value represents the minimum amount of bytes we expect the function's
+   outgoing arguments to be when stack-clash is enabled.  */
+#define STACK_CLASH_MIN_BYTES_OUTGOING_ARGS 8
+
+/* This value controls how many pages we manually unroll the loop for when
+   generating stack clash probes.  */
+#define STACK_CLASH_MAX_UNROLL_PAGES 4
+
+/* The architecture reserves all bits of the address for hardware use,
+   so the vbit must go into the delta field of pointers to member
+   functions.  This is the same config as that in the AArch32
+   port.  */
+#define TARGET_PTRMEMFUNC_VBIT_LOCATION ptrmemfunc_vbit_in_delta
+
+/* Align definitions of arrays, unions and structures so that
+   initializations and copies can be made more efficient.  This is not
+   ABI-changing, so it only affects places where we can see the
+   definition.  Increasing the alignment tends to introduce padding,
+   so don't do this when optimizing for size/conserving stack space.  */
+#define AARCH64_EXPAND_ALIGNMENT(COND, EXP, ALIGN)			\
+  (((COND) && ((ALIGN) < BITS_PER_WORD)					\
+    && (TREE_CODE (EXP) == ARRAY_TYPE					\
+	|| TREE_CODE (EXP) == UNION_TYPE				\
+	|| TREE_CODE (EXP) == RECORD_TYPE)) ? BITS_PER_WORD : (ALIGN))
+
+/* Align global data.  */
+#define DATA_ALIGNMENT(EXP, ALIGN)			\
+  AARCH64_EXPAND_ALIGNMENT (!optimize_size, EXP, ALIGN)
+
+/* Similarly, make sure that objects on the stack are sensibly aligned.  */
+#define LOCAL_ALIGNMENT(EXP, ALIGN)				\
+  AARCH64_EXPAND_ALIGNMENT (!flag_conserve_stack, EXP, ALIGN)
+
+#define STRUCTURE_SIZE_BOUNDARY		8
+
+/* Heap alignment (same as BIGGEST_ALIGNMENT and STACK_BOUNDARY).  */
+#define MALLOC_ABI_ALIGNMENT  128
+
+/* Defined by the ABI */
+#define WCHAR_TYPE "unsigned int"
+#define WCHAR_TYPE_SIZE			32
+
+/* Using long long breaks -ansi and -std=c90, so these will need to be
+   made conditional for an LLP64 ABI.  */
+
+#define SIZE_TYPE	"long unsigned int"
+
+#define PTRDIFF_TYPE	"long int"
+
+#define PCC_BITFIELD_TYPE_MATTERS	1
+
+/* Major revision number of the ARM Architecture implemented by the target.  */
+extern unsigned aarch64_architecture_version;
+
+/* Instruction tuning/selection flags.  */
+
+/* Bit values used to identify processor capabilities.  */
+#define AARCH64_FL_SIMD       (1 << 0)	/* Has SIMD instructions.  */
+#define AARCH64_FL_FP         (1 << 1)	/* Has FP.  */
+#define AARCH64_FL_CRYPTO     (1 << 2)	/* Has crypto.  */
+#define AARCH64_FL_CRC        (1 << 3)	/* Has CRC.  */
+/* ARMv8.1-A architecture extensions.  */
+#define AARCH64_FL_LSE	      (1 << 4)  /* Has Large System Extensions.  */
+#define AARCH64_FL_RDMA       (1 << 5)  /* Has Round Double Multiply Add.  */
+#define AARCH64_FL_V8_1       (1 << 6)  /* Has ARMv8.1-A extensions.  */
+/* ARMv8.2-A architecture extensions.  */
+#define AARCH64_FL_V8_2       (1 << 8)  /* Has ARMv8.2-A features.  */
+#define AARCH64_FL_F16	      (1 << 9)  /* Has ARMv8.2-A FP16 extensions.  */
+#define AARCH64_FL_SVE        (1 << 10) /* Has Scalable Vector Extensions.  */
+/* ARMv8.3-A architecture extensions.  */
+#define AARCH64_FL_V8_3       (1 << 11)  /* Has ARMv8.3-A features.  */
+#define AARCH64_FL_RCPC       (1 << 12)  /* Has support for RCpc model.  */
+#define AARCH64_FL_DOTPROD    (1 << 13)  /* Has ARMv8.2-A Dot Product ins.  */
+/* New flags to split crypto into aes and sha2.  */
+#define AARCH64_FL_AES	      (1 << 14)  /* Has Crypto AES.  */
+#define AARCH64_FL_SHA2	      (1 << 15)  /* Has Crypto SHA2.  */
+/* ARMv8.4-A architecture extensions.  */
+#define AARCH64_FL_V8_4	      (1 << 16)  /* Has ARMv8.4-A features.  */
+#define AARCH64_FL_SM4	      (1 << 17)  /* Has ARMv8.4-A SM3 and SM4.  */
+#define AARCH64_FL_SHA3	      (1 << 18)  /* Has ARMv8.4-a SHA3 and SHA512.  */
+#define AARCH64_FL_F16FML     (1 << 19)  /* Has ARMv8.4-a FP16 extensions.  */
+#define AARCH64_FL_RCPC8_4    (1 << 20)  /* Has ARMv8.4-a RCPC extensions.  */
+
+/* Statistical Profiling extensions.  */
+#define AARCH64_FL_PROFILE    (1 << 21)
+
+/* ARMv8.5-A architecture extensions.  */
+#define AARCH64_FL_V8_5	      (1 << 22)  /* Has ARMv8.5-A features.  */
+#define AARCH64_FL_RNG	      (1 << 23)  /* ARMv8.5-A Random Number Insns.  */
+#define AARCH64_FL_MEMTAG     (1 << 24)  /* ARMv8.5-A Memory Tagging
+					    Extensions.  */
+
+/* Speculation Barrier instruction supported.  */
+#define AARCH64_FL_SB	      (1 << 25)
+
+/* Speculative Store Bypass Safe instruction supported.  */
+#define AARCH64_FL_SSBS	      (1 << 26)
+
+/* Execution and Data Prediction Restriction instructions supported.  */
+#define AARCH64_FL_PREDRES    (1 << 27)
+
+/* Has FP and SIMD.  */
+#define AARCH64_FL_FPSIMD     (AARCH64_FL_FP | AARCH64_FL_SIMD)
+
+/* Has FP without SIMD.  */
+#define AARCH64_FL_FPQ16      (AARCH64_FL_FP & ~AARCH64_FL_SIMD)
+
+/* Architecture flags that effect instruction selection.  */
+#define AARCH64_FL_FOR_ARCH8       (AARCH64_FL_FPSIMD)
+#define AARCH64_FL_FOR_ARCH8_1			       \
+  (AARCH64_FL_FOR_ARCH8 | AARCH64_FL_LSE | AARCH64_FL_CRC \
+   | AARCH64_FL_RDMA | AARCH64_FL_V8_1)
+#define AARCH64_FL_FOR_ARCH8_2			\
+  (AARCH64_FL_FOR_ARCH8_1 | AARCH64_FL_V8_2)
+#define AARCH64_FL_FOR_ARCH8_3			\
+  (AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_V8_3)
+#define AARCH64_FL_FOR_ARCH8_4			\
+  (AARCH64_FL_FOR_ARCH8_3 | AARCH64_FL_V8_4 | AARCH64_FL_F16FML \
+   | AARCH64_FL_DOTPROD | AARCH64_FL_RCPC8_4)
+#define AARCH64_FL_FOR_ARCH8_5			\
+  (AARCH64_FL_FOR_ARCH8_4 | AARCH64_FL_V8_5	\
+   | AARCH64_FL_SB | AARCH64_FL_SSBS | AARCH64_FL_PREDRES)
+
+/* Macros to test ISA flags.  */
+
+#define AARCH64_ISA_CRC            (aarch64_isa_flags & AARCH64_FL_CRC)
+#define AARCH64_ISA_CRYPTO         (aarch64_isa_flags & AARCH64_FL_CRYPTO)
+#define AARCH64_ISA_FP             (aarch64_isa_flags & AARCH64_FL_FP)
+#define AARCH64_ISA_SIMD           (aarch64_isa_flags & AARCH64_FL_SIMD)
+#define AARCH64_ISA_LSE		   (aarch64_isa_flags & AARCH64_FL_LSE)
+#define AARCH64_ISA_RDMA	   (aarch64_isa_flags & AARCH64_FL_RDMA)
+#define AARCH64_ISA_V8_2	   (aarch64_isa_flags & AARCH64_FL_V8_2)
+#define AARCH64_ISA_F16		   (aarch64_isa_flags & AARCH64_FL_F16)
+#define AARCH64_ISA_SVE            (aarch64_isa_flags & AARCH64_FL_SVE)
+#define AARCH64_ISA_V8_3	   (aarch64_isa_flags & AARCH64_FL_V8_3)
+#define AARCH64_ISA_DOTPROD	   (aarch64_isa_flags & AARCH64_FL_DOTPROD)
+#define AARCH64_ISA_AES	           (aarch64_isa_flags & AARCH64_FL_AES)
+#define AARCH64_ISA_SHA2	   (aarch64_isa_flags & AARCH64_FL_SHA2)
+#define AARCH64_ISA_V8_4	   (aarch64_isa_flags & AARCH64_FL_V8_4)
+#define AARCH64_ISA_SM4	           (aarch64_isa_flags & AARCH64_FL_SM4)
+#define AARCH64_ISA_SHA3	   (aarch64_isa_flags & AARCH64_FL_SHA3)
+#define AARCH64_ISA_F16FML	   (aarch64_isa_flags & AARCH64_FL_F16FML)
+#define AARCH64_ISA_RCPC8_4	   (aarch64_isa_flags & AARCH64_FL_RCPC8_4)
+#define AARCH64_ISA_V8_5	   (aarch64_isa_flags & AARCH64_FL_V8_5)
+
+/* Crypto is an optional extension to AdvSIMD.  */
+#define TARGET_CRYPTO (TARGET_SIMD && AARCH64_ISA_CRYPTO)
+
+/* SHA2 is an optional extension to AdvSIMD.  */
+#define TARGET_SHA2 ((TARGET_SIMD && AARCH64_ISA_SHA2) || TARGET_CRYPTO)
+
+/* SHA3 is an optional extension to AdvSIMD.  */
+#define TARGET_SHA3 (TARGET_SIMD && AARCH64_ISA_SHA3)
+
+/* AES is an optional extension to AdvSIMD.  */
+#define TARGET_AES ((TARGET_SIMD && AARCH64_ISA_AES) || TARGET_CRYPTO)
+
+/* SM is an optional extension to AdvSIMD.  */
+#define TARGET_SM4 (TARGET_SIMD && AARCH64_ISA_SM4)
+
+/* FP16FML is an optional extension to AdvSIMD.  */
+#define TARGET_F16FML (TARGET_SIMD && AARCH64_ISA_F16FML && TARGET_FP_F16INST)
+
+/* CRC instructions that can be enabled through +crc arch extension.  */
+#define TARGET_CRC32 (AARCH64_ISA_CRC)
+
+/* Atomic instructions that can be enabled through the +lse extension.  */
+#define TARGET_LSE (AARCH64_ISA_LSE)
+
+/* ARMv8.2-A FP16 support that can be enabled through the +fp16 extension.  */
+#define TARGET_FP_F16INST (TARGET_FLOAT && AARCH64_ISA_F16)
+#define TARGET_SIMD_F16INST (TARGET_SIMD && AARCH64_ISA_F16)
+
+/* Dot Product is an optional extension to AdvSIMD enabled through +dotprod.  */
+#define TARGET_DOTPROD (TARGET_SIMD && AARCH64_ISA_DOTPROD)
+
+/* SVE instructions, enabled through +sve.  */
+#define TARGET_SVE (AARCH64_ISA_SVE)
+
+/* ARMv8.3-A features.  */
+#define TARGET_ARMV8_3	(AARCH64_ISA_V8_3)
+
+/* Armv8.3-a Complex number extension to AdvSIMD extensions.  */
+#define TARGET_COMPLEX (TARGET_SIMD && TARGET_ARMV8_3)
+
+/* Make sure this is always defined so we don't have to check for ifdefs
+   but rather use normal ifs.  */
+#ifndef TARGET_FIX_ERR_A53_835769_DEFAULT
+#define TARGET_FIX_ERR_A53_835769_DEFAULT 0
+#else
+#undef TARGET_FIX_ERR_A53_835769_DEFAULT
+#define TARGET_FIX_ERR_A53_835769_DEFAULT 1
+#endif
+
+/* Apply the workaround for Cortex-A53 erratum 835769.  */
+#define TARGET_FIX_ERR_A53_835769	\
+  ((aarch64_fix_a53_err835769 == 2)	\
+  ? TARGET_FIX_ERR_A53_835769_DEFAULT : aarch64_fix_a53_err835769)
+
+/* Make sure this is always defined so we don't have to check for ifdefs
+   but rather use normal ifs.  */
+#ifndef TARGET_FIX_ERR_A53_843419_DEFAULT
+#define TARGET_FIX_ERR_A53_843419_DEFAULT 0
+#else
+#undef TARGET_FIX_ERR_A53_843419_DEFAULT
+#define TARGET_FIX_ERR_A53_843419_DEFAULT 1
+#endif
+
+/* Apply the workaround for Cortex-A53 erratum 843419.  */
+#define TARGET_FIX_ERR_A53_843419	\
+  ((aarch64_fix_a53_err843419 == 2)	\
+  ? TARGET_FIX_ERR_A53_843419_DEFAULT : aarch64_fix_a53_err843419)
+
+/* ARMv8.1-A Adv.SIMD support.  */
+#define TARGET_SIMD_RDMA (TARGET_SIMD && AARCH64_ISA_RDMA)
+
+/* Standard register usage.  */
+
+/* 31 64-bit general purpose registers R0-R30:
+   R30		LR (link register)
+   R29		FP (frame pointer)
+   R19-R28	Callee-saved registers
+   R18		The platform register; use as temporary register.
+   R17		IP1 The second intra-procedure-call temporary register
+		(can be used by call veneers and PLT code); otherwise use
+		as a temporary register
+   R16		IP0 The first intra-procedure-call temporary register (can
+		be used by call veneers and PLT code); otherwise use as a
+		temporary register
+   R9-R15	Temporary registers
+   R8		Structure value parameter / temporary register
+   R0-R7	Parameter/result registers
+
+   SP		stack pointer, encoded as X/R31 where permitted.
+   ZR		zero register, encoded as X/R31 elsewhere
+
+   32 x 128-bit floating-point/vector registers
+   V16-V31	Caller-saved (temporary) registers
+   V8-V15	Callee-saved registers
+   V0-V7	Parameter/result registers
+
+   The vector register V0 holds scalar B0, H0, S0 and D0 in its least
+   significant bits.  Unlike AArch32 S1 is not packed into D0, etc.
+
+   P0-P7        Predicate low registers: valid in all predicate contexts
+   P8-P15       Predicate high registers: used as scratch space
+
+   VG           Pseudo "vector granules" register
+
+   VG is the number of 64-bit elements in an SVE vector.  We define
+   it as a hard register so that we can easily map it to the DWARF VG
+   register.  GCC internally uses the poly_int variable aarch64_sve_vg
+   instead.  */
+
+#define FIXED_REGISTERS					\
+  {							\
+    0, 0, 0, 0,   0, 0, 0, 0,	/* R0 - R7 */		\
+    0, 0, 0, 0,   0, 0, 0, 0,	/* R8 - R15 */		\
+    0, 0, 0, 0,   0, 0, 0, 0,	/* R16 - R23 */		\
+    0, 0, 0, 0,   0, 1, 0, 1,	/* R24 - R30, SP */	\
+    0, 0, 0, 0,   0, 0, 0, 0,   /* V0 - V7 */           \
+    0, 0, 0, 0,   0, 0, 0, 0,   /* V8 - V15 */		\
+    0, 0, 0, 0,   0, 0, 0, 0,   /* V16 - V23 */         \
+    0, 0, 0, 0,   0, 0, 0, 0,   /* V24 - V31 */         \
+    1, 1, 1, 1,			/* SFP, AP, CC, VG */	\
+    0, 0, 0, 0,   0, 0, 0, 0,   /* P0 - P7 */           \
+    0, 0, 0, 0,   0, 0, 0, 0,   /* P8 - P15 */          \
+  }
+
+/* X30 is marked as caller-saved which is in line with regular function call
+   behavior since the call instructions clobber it; AARCH64_EXPAND_CALL does
+   that for regular function calls and avoids it for sibcalls.  X30 is
+   considered live for sibcalls; EPILOGUE_USES helps achieve that by returning
+   true but not until function epilogues have been generated.  This ensures
+   that X30 is available for use in leaf functions if needed.  */
+
+#define CALL_USED_REGISTERS				\
+  {							\
+    1, 1, 1, 1,   1, 1, 1, 1,	/* R0 - R7 */		\
+    1, 1, 1, 1,   1, 1, 1, 1,	/* R8 - R15 */		\
+    1, 1, 1, 0,   0, 0, 0, 0,	/* R16 - R23 */		\
+    0, 0, 0, 0,   0, 1, 1, 1,	/* R24 - R30, SP */	\
+    1, 1, 1, 1,   1, 1, 1, 1,	/* V0 - V7 */		\
+    0, 0, 0, 0,   0, 0, 0, 0,	/* V8 - V15 */		\
+    1, 1, 1, 1,   1, 1, 1, 1,   /* V16 - V23 */         \
+    1, 1, 1, 1,   1, 1, 1, 1,   /* V24 - V31 */         \
+    1, 1, 1, 1,			/* SFP, AP, CC, VG */	\
+    1, 1, 1, 1,   1, 1, 1, 1,	/* P0 - P7 */		\
+    1, 1, 1, 1,   1, 1, 1, 1,	/* P8 - P15 */		\
+  }
+
+#define REGISTER_NAMES						\
+  {								\
+    "x0",  "x1",  "x2",  "x3",  "x4",  "x5",  "x6",  "x7",	\
+    "x8",  "x9",  "x10", "x11", "x12", "x13", "x14", "x15",	\
+    "x16", "x17", "x18", "x19", "x20", "x21", "x22", "x23",	\
+    "x24", "x25", "x26", "x27", "x28", "x29", "x30", "sp",	\
+    "v0",  "v1",  "v2",  "v3",  "v4",  "v5",  "v6",  "v7",	\
+    "v8",  "v9",  "v10", "v11", "v12", "v13", "v14", "v15",	\
+    "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",	\
+    "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31",	\
+    "sfp", "ap",  "cc",  "vg",					\
+    "p0",  "p1",  "p2",  "p3",  "p4",  "p5",  "p6",  "p7",	\
+    "p8",  "p9",  "p10", "p11", "p12", "p13", "p14", "p15",	\
+  }
+
+/* Generate the register aliases for core register N */
+#define R_ALIASES(N) {"r" # N, R0_REGNUM + (N)}, \
+                     {"w" # N, R0_REGNUM + (N)}
+
+#define V_ALIASES(N) {"q" # N, V0_REGNUM + (N)}, \
+                     {"d" # N, V0_REGNUM + (N)}, \
+                     {"s" # N, V0_REGNUM + (N)}, \
+                     {"h" # N, V0_REGNUM + (N)}, \
+                     {"b" # N, V0_REGNUM + (N)}, \
+                     {"z" # N, V0_REGNUM + (N)}
+
+/* Provide aliases for all of the ISA defined register name forms.
+   These aliases are convenient for use in the clobber lists of inline
+   asm statements.  */
+
+#define ADDITIONAL_REGISTER_NAMES \
+  { R_ALIASES(0),  R_ALIASES(1),  R_ALIASES(2),  R_ALIASES(3),  \
+    R_ALIASES(4),  R_ALIASES(5),  R_ALIASES(6),  R_ALIASES(7),  \
+    R_ALIASES(8),  R_ALIASES(9),  R_ALIASES(10), R_ALIASES(11), \
+    R_ALIASES(12), R_ALIASES(13), R_ALIASES(14), R_ALIASES(15), \
+    R_ALIASES(16), R_ALIASES(17), R_ALIASES(18), R_ALIASES(19), \
+    R_ALIASES(20), R_ALIASES(21), R_ALIASES(22), R_ALIASES(23), \
+    R_ALIASES(24), R_ALIASES(25), R_ALIASES(26), R_ALIASES(27), \
+    R_ALIASES(28), R_ALIASES(29), R_ALIASES(30), {"wsp", R0_REGNUM + 31}, \
+    V_ALIASES(0),  V_ALIASES(1),  V_ALIASES(2),  V_ALIASES(3),  \
+    V_ALIASES(4),  V_ALIASES(5),  V_ALIASES(6),  V_ALIASES(7),  \
+    V_ALIASES(8),  V_ALIASES(9),  V_ALIASES(10), V_ALIASES(11), \
+    V_ALIASES(12), V_ALIASES(13), V_ALIASES(14), V_ALIASES(15), \
+    V_ALIASES(16), V_ALIASES(17), V_ALIASES(18), V_ALIASES(19), \
+    V_ALIASES(20), V_ALIASES(21), V_ALIASES(22), V_ALIASES(23), \
+    V_ALIASES(24), V_ALIASES(25), V_ALIASES(26), V_ALIASES(27), \
+    V_ALIASES(28), V_ALIASES(29), V_ALIASES(30), V_ALIASES(31)  \
+  }
+
+#define EPILOGUE_USES(REGNO) (aarch64_epilogue_uses (REGNO))
+
+/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
+   the stack pointer does not matter.  This is only true if the function
+   uses alloca.  */
+#define EXIT_IGNORE_STACK	(cfun->calls_alloca)
+
+#define STATIC_CHAIN_REGNUM		R18_REGNUM
+#define HARD_FRAME_POINTER_REGNUM	R29_REGNUM
+#define FRAME_POINTER_REGNUM		SFP_REGNUM
+#define STACK_POINTER_REGNUM		SP_REGNUM
+#define ARG_POINTER_REGNUM		AP_REGNUM
+#define FIRST_PSEUDO_REGISTER		(P15_REGNUM + 1)
+
+/* The number of (integer) argument register available.  */
+#define NUM_ARG_REGS			8
+#define NUM_FP_ARG_REGS			8
+
+/* A Homogeneous Floating-Point or Short-Vector Aggregate may have at most
+   four members.  */
+#define HA_MAX_NUM_FLDS		4
+
+/* External dwarf register number scheme.  These number are used to
+   identify registers in dwarf debug information, the values are
+   defined by the AArch64 ABI.  The numbering scheme is independent of
+   GCC's internal register numbering scheme.  */
+
+#define AARCH64_DWARF_R0        0
+
+/* The number of R registers, note 31! not 32.  */
+#define AARCH64_DWARF_NUMBER_R 31
+
+#define AARCH64_DWARF_SP       31
+#define AARCH64_DWARF_VG       46
+#define AARCH64_DWARF_P0       48
+#define AARCH64_DWARF_V0       64
+
+/* The number of V registers.  */
+#define AARCH64_DWARF_NUMBER_V 32
+
+/* For signal frames we need to use an alternative return column.  This
+   value must not correspond to a hard register and must be out of the
+   range of DWARF_FRAME_REGNUM().  */
+#define DWARF_ALT_FRAME_RETURN_COLUMN   \
+  (AARCH64_DWARF_V0 + AARCH64_DWARF_NUMBER_V)
+
+/* We add 1 extra frame register for use as the
+   DWARF_ALT_FRAME_RETURN_COLUMN.  */
+#define DWARF_FRAME_REGISTERS           (DWARF_ALT_FRAME_RETURN_COLUMN + 1)
+
+
+#define DBX_REGISTER_NUMBER(REGNO)	aarch64_dbx_register_number (REGNO)
+/* Provide a definition of DWARF_FRAME_REGNUM here so that fallback unwinders
+   can use DWARF_ALT_FRAME_RETURN_COLUMN defined below.  This is just the same
+   as the default definition in dwarf2out.c.  */
+#undef DWARF_FRAME_REGNUM
+#define DWARF_FRAME_REGNUM(REGNO)	DBX_REGISTER_NUMBER (REGNO)
+
+#define DWARF_FRAME_RETURN_COLUMN	DWARF_FRAME_REGNUM (LR_REGNUM)
+
+#define DWARF2_UNWIND_INFO 1
+
+/* Use R0 through R3 to pass exception handling information.  */
+#define EH_RETURN_DATA_REGNO(N) \
+  ((N) < 4 ? ((unsigned int) R0_REGNUM + (N)) : INVALID_REGNUM)
+
+/* Select a format to encode pointers in exception handling data.  */
+#define ASM_PREFERRED_EH_DATA_FORMAT(CODE, GLOBAL) \
+  aarch64_asm_preferred_eh_data_format ((CODE), (GLOBAL))
+
+/* Output the assembly strings we want to add to a function definition.  */
+#define ASM_DECLARE_FUNCTION_NAME(STR, NAME, DECL)	\
+  aarch64_declare_function_name (STR, NAME, DECL)
+
+/* For EH returns X4 contains the stack adjustment.  */
+#define EH_RETURN_STACKADJ_RTX	gen_rtx_REG (Pmode, R4_REGNUM)
+#define EH_RETURN_HANDLER_RTX  aarch64_eh_return_handler_rtx ()
+
+/* Don't use __builtin_setjmp until we've defined it.  */
+#undef DONT_USE_BUILTIN_SETJMP
+#define DONT_USE_BUILTIN_SETJMP 1
+
+#undef TARGET_COMPUTE_FRAME_LAYOUT
+#define TARGET_COMPUTE_FRAME_LAYOUT aarch64_layout_frame
+
+/* Register in which the structure value is to be returned.  */
+#define AARCH64_STRUCT_VALUE_REGNUM R8_REGNUM
+
+/* Non-zero if REGNO is part of the Core register set.
+
+   The rather unusual way of expressing this check is to avoid
+   warnings when building the compiler when R0_REGNUM is 0 and REGNO
+   is unsigned.  */
+#define GP_REGNUM_P(REGNO)						\
+  (((unsigned) (REGNO - R0_REGNUM)) <= (R30_REGNUM - R0_REGNUM))
+
+#define FP_REGNUM_P(REGNO)			\
+  (((unsigned) (REGNO - V0_REGNUM)) <= (V31_REGNUM - V0_REGNUM))
+
+#define FP_LO_REGNUM_P(REGNO)            \
+  (((unsigned) (REGNO - V0_REGNUM)) <= (V15_REGNUM - V0_REGNUM))
+
+#define PR_REGNUM_P(REGNO)\
+  (((unsigned) (REGNO - P0_REGNUM)) <= (P15_REGNUM - P0_REGNUM))
+
+#define PR_LO_REGNUM_P(REGNO)\
+  (((unsigned) (REGNO - P0_REGNUM)) <= (P7_REGNUM - P0_REGNUM))
+
+#define FP_SIMD_SAVED_REGNUM_P(REGNO)			\
+  (((unsigned) (REGNO - V8_REGNUM)) <= (V23_REGNUM - V8_REGNUM))
+
+/* Register and constant classes.  */
+
+enum reg_class
+{
+  NO_REGS,
+  TAILCALL_ADDR_REGS,
+  GENERAL_REGS,
+  STACK_REG,
+  POINTER_REGS,
+  FP_LO_REGS,
+  FP_REGS,
+  POINTER_AND_FP_REGS,
+  PR_LO_REGS,
+  PR_HI_REGS,
+  PR_REGS,
+  ALL_REGS,
+  LIM_REG_CLASSES		/* Last */
+};
+
+#define N_REG_CLASSES	((int) LIM_REG_CLASSES)
+
+#define REG_CLASS_NAMES				\
+{						\
+  "NO_REGS",					\
+  "TAILCALL_ADDR_REGS",				\
+  "GENERAL_REGS",				\
+  "STACK_REG",					\
+  "POINTER_REGS",				\
+  "FP_LO_REGS",					\
+  "FP_REGS",					\
+  "POINTER_AND_FP_REGS",			\
+  "PR_LO_REGS",					\
+  "PR_HI_REGS",					\
+  "PR_REGS",					\
+  "ALL_REGS"					\
+}
+
+#define REG_CLASS_CONTENTS						\
+{									\
+  { 0x00000000, 0x00000000, 0x00000000 },	/* NO_REGS */		\
+  { 0x00030000, 0x00000000, 0x00000000 },	/* TAILCALL_ADDR_REGS */\
+  { 0x7fffffff, 0x00000000, 0x00000003 },	/* GENERAL_REGS */	\
+  { 0x80000000, 0x00000000, 0x00000000 },	/* STACK_REG */		\
+  { 0xffffffff, 0x00000000, 0x00000003 },	/* POINTER_REGS */	\
+  { 0x00000000, 0x0000ffff, 0x00000000 },       /* FP_LO_REGS  */	\
+  { 0x00000000, 0xffffffff, 0x00000000 },       /* FP_REGS  */		\
+  { 0xffffffff, 0xffffffff, 0x00000003 },	/* POINTER_AND_FP_REGS */\
+  { 0x00000000, 0x00000000, 0x00000ff0 },	/* PR_LO_REGS */	\
+  { 0x00000000, 0x00000000, 0x000ff000 },	/* PR_HI_REGS */	\
+  { 0x00000000, 0x00000000, 0x000ffff0 },	/* PR_REGS */		\
+  { 0xffffffff, 0xffffffff, 0x000fffff }	/* ALL_REGS */		\
+}
+
+#define REGNO_REG_CLASS(REGNO)	aarch64_regno_regclass (REGNO)
+
+#define INDEX_REG_CLASS	GENERAL_REGS
+#define BASE_REG_CLASS  POINTER_REGS
+
+/* Register pairs used to eliminate unneeded registers that point into
+   the stack frame.  */
+#define ELIMINABLE_REGS							\
+{									\
+  { ARG_POINTER_REGNUM,		STACK_POINTER_REGNUM		},	\
+  { ARG_POINTER_REGNUM,		HARD_FRAME_POINTER_REGNUM	},	\
+  { FRAME_POINTER_REGNUM,	STACK_POINTER_REGNUM		},	\
+  { FRAME_POINTER_REGNUM,	HARD_FRAME_POINTER_REGNUM	},	\
+}
+
+#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
+  (OFFSET) = aarch64_initial_elimination_offset (FROM, TO)
+
+/* CPU/ARCH option handling.  */
+#include "config/aarch64/aarch64-opts.h"
+
+enum target_cpus
+{
+#define AARCH64_CORE(NAME, INTERNAL_IDENT, SCHED, ARCH, FLAGS, COSTS, IMP, PART, VARIANT) \
+  TARGET_CPU_##INTERNAL_IDENT,
+#include "aarch64-cores.def"
+  TARGET_CPU_generic
+};
+
+/* If there is no CPU defined at configure, use generic as default.  */
+#ifndef TARGET_CPU_DEFAULT
+#define TARGET_CPU_DEFAULT \
+  (TARGET_CPU_generic | (AARCH64_CPU_DEFAULT_FLAGS << 6))
+#endif
+
+/* If inserting NOP before a mult-accumulate insn remember to adjust the
+   length so that conditional branching code is updated appropriately.  */
+#define ADJUST_INSN_LENGTH(insn, length)	\
+  do						\
+    {						\
+       if (aarch64_madd_needs_nop (insn))	\
+         length += 4;				\
+    } while (0)
+
+#define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS)	\
+    aarch64_final_prescan_insn (INSN);			\
+
+/* The processor for which instructions should be scheduled.  */
+extern enum aarch64_processor aarch64_tune;
+
+/* RTL generation support.  */
+#define INIT_EXPANDERS aarch64_init_expanders ()
+
+
+/* Stack layout; function entry, exit and calling.  */
+#define STACK_GROWS_DOWNWARD	1
+
+#define FRAME_GROWS_DOWNWARD	1
+
+#define ACCUMULATE_OUTGOING_ARGS	1
+
+#define FIRST_PARM_OFFSET(FNDECL) 0
+
+/* Fix for VFP */
+#define LIBCALL_VALUE(MODE)  \
+  gen_rtx_REG (MODE, FLOAT_MODE_P (MODE) ? V0_REGNUM : R0_REGNUM)
+
+#define DEFAULT_PCC_STRUCT_RETURN 0
+
+#ifdef HAVE_POLY_INT_H
+struct GTY (()) aarch64_frame
+{
+  HOST_WIDE_INT reg_offset[FIRST_PSEUDO_REGISTER];
+
+  /* The number of extra stack bytes taken up by register varargs.
+     This area is allocated by the callee at the very top of the
+     frame.  This value is rounded up to a multiple of
+     STACK_BOUNDARY.  */
+  HOST_WIDE_INT saved_varargs_size;
+
+  /* The size of the saved callee-save int/FP registers.  */
+
+  HOST_WIDE_INT saved_regs_size;
+
+  /* Offset from the base of the frame (incomming SP) to the
+     top of the locals area.  This value is always a multiple of
+     STACK_BOUNDARY.  */
+  poly_int64 locals_offset;
+
+  /* Offset from the base of the frame (incomming SP) to the
+     hard_frame_pointer.  This value is always a multiple of
+     STACK_BOUNDARY.  */
+  poly_int64 hard_fp_offset;
+
+  /* The size of the frame.  This value is the offset from base of the
+     frame (incomming SP) to the stack_pointer.  This value is always
+     a multiple of STACK_BOUNDARY.  */
+  poly_int64 frame_size;
+
+  /* The size of the initial stack adjustment before saving callee-saves.  */
+  poly_int64 initial_adjust;
+
+  /* The writeback value when pushing callee-save registers.
+     It is zero when no push is used.  */
+  HOST_WIDE_INT callee_adjust;
+
+  /* The offset from SP to the callee-save registers after initial_adjust.
+     It may be non-zero if no push is used (ie. callee_adjust == 0).  */
+  poly_int64 callee_offset;
+
+  /* The size of the stack adjustment after saving callee-saves.  */
+  poly_int64 final_adjust;
+
+  /* Store FP,LR and setup a frame pointer.  */
+  bool emit_frame_chain;
+
+  unsigned wb_candidate1;
+  unsigned wb_candidate2;
+
+  bool laid_out;
+};
+
+typedef struct GTY (()) machine_function
+{
+  struct aarch64_frame frame;
+  /* One entry for each hard register.  */
+  bool reg_is_wrapped_separately[LAST_SAVED_REGNUM];
+} machine_function;
+#endif
+
+/* Which ABI to use.  */
+enum aarch64_abi_type
+{
+  AARCH64_ABI_LP64 = 0,
+  AARCH64_ABI_ILP32 = 1
+};
+
+#ifndef AARCH64_ABI_DEFAULT
+#define AARCH64_ABI_DEFAULT AARCH64_ABI_LP64
+#endif
+
+#define TARGET_ILP32	(aarch64_abi & AARCH64_ABI_ILP32)
+
+enum arm_pcs
+{
+  ARM_PCS_AAPCS64,		/* Base standard AAPCS for 64 bit.  */
+  ARM_PCS_UNKNOWN
+};
+
+
+
+
+/* We can't use machine_mode inside a generator file because it
+   hasn't been created yet; we shouldn't be using any code that
+   needs the real definition though, so this ought to be safe.  */
+#ifdef GENERATOR_FILE
+#define MACHMODE int
+#else
+#include "insn-modes.h"
+#define MACHMODE machine_mode
+#endif
+
+#ifndef USED_FOR_TARGET
+/* AAPCS related state tracking.  */
+typedef struct
+{
+  enum arm_pcs pcs_variant;
+  int aapcs_arg_processed;	/* No need to lay out this argument again.  */
+  int aapcs_ncrn;		/* Next Core register number.  */
+  int aapcs_nextncrn;		/* Next next core register number.  */
+  int aapcs_nvrn;		/* Next Vector register number.  */
+  int aapcs_nextnvrn;		/* Next Next Vector register number.  */
+  rtx aapcs_reg;		/* Register assigned to this argument.  This
+				   is NULL_RTX if this parameter goes on
+				   the stack.  */
+  MACHMODE aapcs_vfp_rmode;
+  int aapcs_stack_words;	/* If the argument is passed on the stack, this
+				   is the number of words needed, after rounding
+				   up.  Only meaningful when
+				   aapcs_reg == NULL_RTX.  */
+  int aapcs_stack_size;		/* The total size (in words, per 8 byte) of the
+				   stack arg area so far.  */
+} CUMULATIVE_ARGS;
+#endif
+
+#define BLOCK_REG_PADDING(MODE, TYPE, FIRST) \
+  (aarch64_pad_reg_upward (MODE, TYPE, FIRST) ? PAD_UPWARD : PAD_DOWNWARD)
+
+#define PAD_VARARGS_DOWN	0
+
+#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \
+  aarch64_init_cumulative_args (&(CUM), FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS)
+
+#define FUNCTION_ARG_REGNO_P(REGNO) \
+  aarch64_function_arg_regno_p(REGNO)
+
+
+/* ISA Features.  */
+
+/* Addressing modes, etc.  */
+#define HAVE_POST_INCREMENT	1
+#define HAVE_PRE_INCREMENT	1
+#define HAVE_POST_DECREMENT	1
+#define HAVE_PRE_DECREMENT	1
+#define HAVE_POST_MODIFY_DISP	1
+#define HAVE_PRE_MODIFY_DISP	1
+
+#define MAX_REGS_PER_ADDRESS	2
+
+#define CONSTANT_ADDRESS_P(X)		aarch64_constant_address_p(X)
+
+#define REGNO_OK_FOR_BASE_P(REGNO)	\
+  aarch64_regno_ok_for_base_p (REGNO, true)
+
+#define REGNO_OK_FOR_INDEX_P(REGNO) \
+  aarch64_regno_ok_for_index_p (REGNO, true)
+
+#define LEGITIMATE_PIC_OPERAND_P(X) \
+  aarch64_legitimate_pic_operand_p (X)
+
+#define CASE_VECTOR_MODE Pmode
+
+#define DEFAULT_SIGNED_CHAR 0
+
+/* An integer expression for the size in bits of the largest integer machine
+   mode that should actually be used.  We allow pairs of registers.  */
+#define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TImode)
+
+/* Maximum bytes moved by a single instruction (load/store pair).  */
+#define MOVE_MAX (UNITS_PER_WORD * 2)
+
+/* The base cost overhead of a memcpy call, for MOVE_RATIO and friends.  */
+#define AARCH64_CALL_RATIO 8
+
+/* MOVE_RATIO dictates when we will use the move_by_pieces infrastructure.
+   move_by_pieces will continually copy the largest safe chunks.  So a
+   7-byte copy is a 4-byte + 2-byte + byte copy.  This proves inefficient
+   for both size and speed of copy, so we will instead use the "movmem"
+   standard name to implement the copy.  This logic does not apply when
+   targeting -mstrict-align, so keep a sensible default in that case.  */
+#define MOVE_RATIO(speed) \
+  (!STRICT_ALIGNMENT ? 2 : (((speed) ? 15 : AARCH64_CALL_RATIO) / 2))
+
+/* For CLEAR_RATIO, when optimizing for size, give a better estimate
+   of the length of a memset call, but use the default otherwise.  */
+#define CLEAR_RATIO(speed) \
+  ((speed) ? 15 : AARCH64_CALL_RATIO)
+
+/* SET_RATIO is similar to CLEAR_RATIO, but for a non-zero constant, so when
+   optimizing for size adjust the ratio to account for the overhead of loading
+   the constant.  */
+#define SET_RATIO(speed) \
+  ((speed) ? 15 : AARCH64_CALL_RATIO - 2)
+
+/* Disable auto-increment in move_by_pieces et al.  Use of auto-increment is
+   rarely a good idea in straight-line code since it adds an extra address
+   dependency between each instruction.  Better to use incrementing offsets.  */
+#define USE_LOAD_POST_INCREMENT(MODE)   0
+#define USE_LOAD_POST_DECREMENT(MODE)   0
+#define USE_LOAD_PRE_INCREMENT(MODE)    0
+#define USE_LOAD_PRE_DECREMENT(MODE)    0
+#define USE_STORE_POST_INCREMENT(MODE)  0
+#define USE_STORE_POST_DECREMENT(MODE)  0
+#define USE_STORE_PRE_INCREMENT(MODE)   0
+#define USE_STORE_PRE_DECREMENT(MODE)   0
+
+/* WORD_REGISTER_OPERATIONS does not hold for AArch64.
+   The assigned word_mode is DImode but operations narrower than SImode
+   behave as 32-bit operations if using the W-form of the registers rather
+   than as word_mode (64-bit) operations as WORD_REGISTER_OPERATIONS
+   expects.  */
+#define WORD_REGISTER_OPERATIONS 0
+
+/* Define if loading from memory in MODE, an integral mode narrower than
+   BITS_PER_WORD will either zero-extend or sign-extend.  The value of this
+   macro should be the code that says which one of the two operations is
+   implicitly done, or UNKNOWN if none.  */
+#define LOAD_EXTEND_OP(MODE) ZERO_EXTEND
+
+/* Define this macro to be non-zero if instructions will fail to work
+   if given data not on the nominal alignment.  */
+#define STRICT_ALIGNMENT		TARGET_STRICT_ALIGN
+
+/* Define this macro to be non-zero if accessing less than a word of
+   memory is no faster than accessing a word of memory, i.e., if such
+   accesses require more than one instruction or if there is no
+   difference in cost.
+   Although there's no difference in instruction count or cycles,
+   in AArch64 we don't want to expand to a sub-word to a 64-bit access
+   if we don't have to, for power-saving reasons.  */
+#define SLOW_BYTE_ACCESS		0
+
+#define NO_FUNCTION_CSE	1
+
+/* Specify the machine mode that the hardware addresses have.
+   After generation of rtl, the compiler makes no further distinction
+   between pointers and any other objects of this machine mode.  */
+#define Pmode		DImode
+
+/* A C expression whose value is zero if pointers that need to be extended
+   from being `POINTER_SIZE' bits wide to `Pmode' are sign-extended and
+   greater then zero if they are zero-extended and less then zero if the
+   ptr_extend instruction should be used.  */
+#define POINTERS_EXTEND_UNSIGNED 1
+
+/* Mode of a function address in a call instruction (for indexing purposes).  */
+#define FUNCTION_MODE	Pmode
+
+#define SELECT_CC_MODE(OP, X, Y)	aarch64_select_cc_mode (OP, X, Y)
+
+#define REVERSIBLE_CC_MODE(MODE) 1
+
+#define REVERSE_CONDITION(CODE, MODE)		\
+  (((MODE) == CCFPmode || (MODE) == CCFPEmode)	\
+   ? reverse_condition_maybe_unordered (CODE)	\
+   : reverse_condition (CODE))
+
+#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) \
+  ((VALUE) = GET_MODE_UNIT_BITSIZE (MODE), 2)
+#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE) \
+  ((VALUE) = GET_MODE_UNIT_BITSIZE (MODE), 2)
+
+#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (Pmode, LR_REGNUM)
+
+#define RETURN_ADDR_RTX aarch64_return_addr
+
+/* BTI c + 3 insns + 2 pointer-sized entries.  */
+#define TRAMPOLINE_SIZE	(TARGET_ILP32 ? 24 : 32)
+
+/* Trampolines contain dwords, so must be dword aligned.  */
+#define TRAMPOLINE_ALIGNMENT 64
+
+/* Put trampolines in the text section so that mapping symbols work
+   correctly.  */
+#define TRAMPOLINE_SECTION text_section
+
+/* To start with.  */
+#define BRANCH_COST(SPEED_P, PREDICTABLE_P) \
+  (aarch64_branch_cost (SPEED_P, PREDICTABLE_P))
+
+
+/* Assembly output.  */
+
+/* For now we'll make all jump tables pc-relative.  */
+#define CASE_VECTOR_PC_RELATIVE	1
+
+#define CASE_VECTOR_SHORTEN_MODE(min, max, body)	\
+  ((min < -0x1fff0 || max > 0x1fff0) ? SImode		\
+   : (min < -0x1f0 || max > 0x1f0) ? HImode		\
+   : QImode)
+
+/* Jump table alignment is explicit in ASM_OUTPUT_CASE_LABEL.  */
+#define ADDR_VEC_ALIGN(JUMPTABLE) 0
+
+#define MCOUNT_NAME "_mcount"
+
+#define NO_PROFILE_COUNTERS 1
+
+/* Emit rtl for profiling.  Output assembler code to FILE
+   to call "_mcount" for profiling a function entry.  */
+#define PROFILE_HOOK(LABEL)						\
+  {									\
+    rtx fun, lr;							\
+    lr = get_hard_reg_initial_val (Pmode, LR_REGNUM);			\
+    fun = gen_rtx_SYMBOL_REF (Pmode, MCOUNT_NAME);			\
+    emit_library_call (fun, LCT_NORMAL, VOIDmode, lr, Pmode);		\
+  }
+
+/* All the work done in PROFILE_HOOK, but still required.  */
+#define FUNCTION_PROFILER(STREAM, LABELNO) do { } while (0)
+
+/* For some reason, the Linux headers think they know how to define
+   these macros.  They don't!!!  */
+#undef ASM_APP_ON
+#undef ASM_APP_OFF
+#define ASM_APP_ON	"\t" ASM_COMMENT_START " Start of user assembly\n"
+#define ASM_APP_OFF	"\t" ASM_COMMENT_START " End of user assembly\n"
+
+#define CONSTANT_POOL_BEFORE_FUNCTION 0
+
+/* This definition should be relocated to aarch64-elf-raw.h.  This macro
+   should be undefined in aarch64-linux.h and a clear_cache pattern
+   implmented to emit either the call to __aarch64_sync_cache_range()
+   directly or preferably the appropriate sycall or cache clear
+   instructions inline.  */
+#define CLEAR_INSN_CACHE(beg, end)				\
+  extern void  __aarch64_sync_cache_range (void *, void *);	\
+  __aarch64_sync_cache_range (beg, end)
+
+#define SHIFT_COUNT_TRUNCATED (!TARGET_SIMD)
+
+/* Choose appropriate mode for caller saves, so we do the minimum
+   required size of load/store.  */
+#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \
+  aarch64_hard_regno_caller_save_mode ((REGNO), (NREGS), (MODE))
+
+#undef SWITCHABLE_TARGET
+#define SWITCHABLE_TARGET 1
+
+/* Check TLS Descriptors mechanism is selected.  */
+#define TARGET_TLS_DESC (aarch64_tls_dialect == TLS_DESCRIPTORS)
+
+extern enum aarch64_code_model aarch64_cmodel;
+
+/* When using the tiny addressing model conditional and unconditional branches
+   can span the whole of the available address space (1MB).  */
+#define HAS_LONG_COND_BRANCH				\
+  (aarch64_cmodel == AARCH64_CMODEL_TINY		\
+   || aarch64_cmodel == AARCH64_CMODEL_TINY_PIC)
+
+#define HAS_LONG_UNCOND_BRANCH				\
+  (aarch64_cmodel == AARCH64_CMODEL_TINY		\
+   || aarch64_cmodel == AARCH64_CMODEL_TINY_PIC)
+
+#define TARGET_SUPPORTS_WIDE_INT 1
+
+/* Modes valid for AdvSIMD D registers, i.e. that fit in half a Q register.  */
+#define AARCH64_VALID_SIMD_DREG_MODE(MODE) \
+  ((MODE) == V2SImode || (MODE) == V4HImode || (MODE) == V8QImode \
+   || (MODE) == V2SFmode || (MODE) == V4HFmode || (MODE) == DImode \
+   || (MODE) == DFmode)
+
+/* Modes valid for AdvSIMD Q registers.  */
+#define AARCH64_VALID_SIMD_QREG_MODE(MODE) \
+  ((MODE) == V4SImode || (MODE) == V8HImode || (MODE) == V16QImode \
+   || (MODE) == V4SFmode || (MODE) == V8HFmode || (MODE) == V2DImode \
+   || (MODE) == V2DFmode)
+
+#define ENDIAN_LANE_N(NUNITS, N) \
+  (BYTES_BIG_ENDIAN ? NUNITS - 1 - N : N)
+
+/* Support for a configure-time default CPU, etc.  We currently support
+   --with-arch and --with-cpu.  Both are ignored if either is specified
+   explicitly on the command line at run time.  */
+#define OPTION_DEFAULT_SPECS				\
+  {"arch", "%{!march=*:%{!mcpu=*:-march=%(VALUE)}}" },	\
+  {"cpu",  "%{!march=*:%{!mcpu=*:-mcpu=%(VALUE)}}" },
+
+#define MCPU_TO_MARCH_SPEC \
+   " %{mcpu=*:-march=%:rewrite_mcpu(%{mcpu=*:%*})}"
+
+extern const char *aarch64_rewrite_mcpu (int argc, const char **argv);
+#define MCPU_TO_MARCH_SPEC_FUNCTIONS \
+  { "rewrite_mcpu", aarch64_rewrite_mcpu },
+
+#if defined(__aarch64__)
+extern const char *host_detect_local_cpu (int argc, const char **argv);
+#define HAVE_LOCAL_CPU_DETECT
+# define EXTRA_SPEC_FUNCTIONS						\
+  { "local_cpu_detect", host_detect_local_cpu },			\
+  MCPU_TO_MARCH_SPEC_FUNCTIONS
+
+# define MCPU_MTUNE_NATIVE_SPECS					\
+   " %{march=native:%<march=native %:local_cpu_detect(arch)}"		\
+   " %{mcpu=native:%<mcpu=native %:local_cpu_detect(cpu)}"		\
+   " %{mtune=native:%<mtune=native %:local_cpu_detect(tune)}"
+#else
+# define MCPU_MTUNE_NATIVE_SPECS ""
+# define EXTRA_SPEC_FUNCTIONS MCPU_TO_MARCH_SPEC_FUNCTIONS
+#endif
+
+#define ASM_CPU_SPEC \
+   MCPU_TO_MARCH_SPEC
+
+#define EXTRA_SPECS						\
+  { "asm_cpu_spec",		ASM_CPU_SPEC }
+
+#define ASM_OUTPUT_POOL_EPILOGUE  aarch64_asm_output_pool_epilogue
+
+/* This type is the user-visible __fp16, and a pointer to that type.  We
+   need it in many places in the backend.  Defined in aarch64-builtins.c.  */
+extern tree aarch64_fp16_type_node;
+extern tree aarch64_fp16_ptr_type_node;
+
+/* The generic unwind code in libgcc does not initialize the frame pointer.
+   So in order to unwind a function using a frame pointer, the very first
+   function that is unwound must save the frame pointer.  That way the frame
+   pointer is restored and its value is now valid - otherwise _Unwind_GetGR
+   crashes.  Libgcc can now be safely built with -fomit-frame-pointer.  */
+#define LIBGCC2_UNWIND_ATTRIBUTE \
+  __attribute__((optimize ("no-omit-frame-pointer")))
+
+#ifndef USED_FOR_TARGET
+extern poly_uint16 aarch64_sve_vg;
+
+/* The number of bits and bytes in an SVE vector.  */
+#define BITS_PER_SVE_VECTOR (poly_uint16 (aarch64_sve_vg * 64))
+#define BYTES_PER_SVE_VECTOR (poly_uint16 (aarch64_sve_vg * 8))
+
+/* The number of bytes in an SVE predicate.  */
+#define BYTES_PER_SVE_PRED aarch64_sve_vg
+
+/* The SVE mode for a vector of bytes.  */
+#define SVE_BYTE_MODE VNx16QImode
+
+/* The maximum number of bytes in a fixed-size vector.  This is 256 bytes
+   (for -msve-vector-bits=2048) multiplied by the maximum number of
+   vectors in a structure mode (4).
+
+   This limit must not be used for variable-size vectors, since
+   VL-agnostic code must work with arbitary vector lengths.  */
+#define MAX_COMPILE_TIME_VEC_BYTES (256 * 4)
+#endif
+
+#define REGMODE_NATURAL_SIZE(MODE) aarch64_regmode_natural_size (MODE)
+
+/* Allocate a minimum of STACK_CLASH_MIN_BYTES_OUTGOING_ARGS bytes for the
+   outgoing arguments if stack clash protection is enabled.  This is essential
+   as the extra arg space allows us to skip a check in alloca.  */
+#undef STACK_DYNAMIC_OFFSET
+#define STACK_DYNAMIC_OFFSET(FUNDECL)			   \
+   ((flag_stack_clash_protection			   \
+     && cfun->calls_alloca				   \
+     && known_lt (crtl->outgoing_args_size,		   \
+		  STACK_CLASH_MIN_BYTES_OUTGOING_ARGS))    \
+    ? ROUND_UP (STACK_CLASH_MIN_BYTES_OUTGOING_ARGS,       \
+		STACK_BOUNDARY / BITS_PER_UNIT)		   \
+    : (crtl->outgoing_args_size + STACK_POINTER_OFFSET))
+
+#endif /* GCC_AARCH64_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/biarchlp64.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/biarchlp64.h
new file mode 100644
index 0000000..5de245d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/aarch64/biarchlp64.h
@@ -0,0 +1,29 @@
+/* Make configure files to produce biarch compiler defaulting to ilp64 ABI.
+   This file must be included very first, while the OS specific file later
+   to overwrite otherwise wrong defaults.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+   Contributed by ARM Ltd.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#define AARCH64_ABI_DEFAULT AARCH64_ABI_LP64
+#define TARGET_DATA_MODEL 1
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/arm/aarch-common-protos.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/arm/aarch-common-protos.h
new file mode 100644
index 0000000..11cd514
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/arm/aarch-common-protos.h
@@ -0,0 +1,146 @@
+/* Functions and structures shared between arm and aarch64.
+
+   Copyright (C) 1991-2019 Free Software Foundation, Inc.
+   Contributed by ARM Ltd.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+
+#ifndef GCC_AARCH_COMMON_PROTOS_H
+#define GCC_AARCH_COMMON_PROTOS_H
+
+extern int aarch_accumulator_forwarding (rtx_insn *, rtx_insn *);
+extern int aarch_crypto_can_dual_issue (rtx_insn *, rtx_insn *);
+extern bool aarch_rev16_p (rtx);
+extern bool aarch_rev16_shleft_mask_imm_p (rtx, machine_mode);
+extern bool aarch_rev16_shright_mask_imm_p (rtx, machine_mode);
+extern bool aarch_mm_needs_acquire (rtx);
+extern bool aarch_mm_needs_release (rtx);
+extern int arm_early_load_addr_dep (rtx, rtx);
+extern int arm_early_load_addr_dep_ptr (rtx, rtx);
+extern int arm_early_store_addr_dep (rtx, rtx);
+extern int arm_early_store_addr_dep_ptr (rtx, rtx);
+extern int arm_mac_accumulator_is_mul_result (rtx, rtx);
+extern int arm_mac_accumulator_is_result (rtx, rtx);
+extern int arm_no_early_alu_shift_dep (rtx, rtx);
+extern int arm_no_early_alu_shift_value_dep (rtx, rtx);
+extern int arm_no_early_mul_dep (rtx, rtx);
+extern int arm_no_early_store_addr_dep (rtx, rtx);
+extern bool arm_rtx_shift_left_p (rtx);
+
+/* RTX cost table definitions.  These are used when tuning for speed rather
+   than for size and should reflect the _additional_ cost over the cost
+   of the fastest instruction in the machine, which is COSTS_N_INSNS (1).
+   Therefore it's okay for some costs to be 0.
+   Costs may not have a negative value.  */
+struct alu_cost_table
+{
+  const int arith;		/* ADD/SUB.  */
+  const int logical;		/* AND/ORR/EOR/BIC, etc.  */
+  const int shift;		/* Simple shift.  */
+  const int shift_reg;		/* Simple shift by reg.  */
+  const int arith_shift;	/* Additional when arith also shifts...  */
+  const int arith_shift_reg;	/* ... and when the shift is by a reg.  */
+  const int log_shift;		/* Additional when logic also shifts...  */
+  const int log_shift_reg;	/* ... and when the shift is by a reg.  */
+  const int extend;		/* Zero/sign extension.  */
+  const int extend_arith;	/* Extend and arith.  */
+  const int bfi;		/* Bit-field insert.  */
+  const int bfx;		/* Bit-field extraction.  */
+  const int clz;		/* Count Leading Zeros.  */
+  const int rev;		/* Reverse bits/bytes.  */
+  const int non_exec;		/* Extra cost when not executing insn.  */
+  const bool non_exec_costs_exec; /* True if non-execution must add the exec
+				     cost.  */
+};
+
+struct mult_cost_table
+{
+  const int simple;
+  const int flag_setting;	/* Additional cost if multiply sets flags. */
+  const int extend;
+  const int add;
+  const int extend_add;
+  const int idiv;
+};
+
+/* Calculations of LDM costs are complex.  We assume an initial cost
+   (ldm_1st) which will load the number of registers mentioned in
+   ldm_regs_per_insn_1st registers; then each additional
+   ldm_regs_per_insn_subsequent registers cost one more insn.
+   Similarly for STM operations.
+   Therefore the ldm_regs_per_insn_1st/stm_regs_per_insn_1st and
+   ldm_regs_per_insn_subsequent/stm_regs_per_insn_subsequent fields indicate
+   the number of registers loaded/stored and are expressed by a simple integer
+   and not by a COSTS_N_INSNS (N) expression.
+   */
+struct mem_cost_table
+{
+  const int load;
+  const int load_sign_extend;	/* Additional to load cost.  */
+  const int ldrd;		/* Cost of LDRD.  */
+  const int ldm_1st;
+  const int ldm_regs_per_insn_1st;
+  const int ldm_regs_per_insn_subsequent;
+  const int loadf;		/* SFmode.  */
+  const int loadd;		/* DFmode.  */
+  const int load_unaligned;	/* Extra for unaligned loads.  */
+  const int store;
+  const int strd;
+  const int stm_1st;
+  const int stm_regs_per_insn_1st;
+  const int stm_regs_per_insn_subsequent;
+  const int storef;		/* SFmode.  */
+  const int stored;		/* DFmode.  */
+  const int store_unaligned;	/* Extra for unaligned stores.  */
+  const int loadv;		/* Vector load.  */
+  const int storev;		/* Vector store.  */
+};
+
+struct fp_cost_table
+{
+  const int div;
+  const int mult;
+  const int mult_addsub;	/* Non-fused.  */
+  const int fma;		/* Fused.  */
+  const int addsub;
+  const int fpconst;		/* Immediate.  */
+  const int neg;		/* NEG and ABS.  */
+  const int compare;
+  const int widen;		/* Widen to this size.  */
+  const int narrow;		/* Narrow from this size.  */
+  const int toint;
+  const int fromint;
+  const int roundint;		/* V8 round to integral, remains FP format.  */
+};
+
+struct vector_cost_table
+{
+  const int alu;
+};
+
+struct cpu_cost_table
+{
+  const struct alu_cost_table alu;
+  const struct mult_cost_table mult[2]; /* SImode and DImode.  */
+  const struct mem_cost_table ldst;
+  const struct fp_cost_table fp[2]; /* SFmode and DFmode.  */
+  const struct vector_cost_table vect;
+};
+
+
+#endif /* GCC_AARCH_COMMON_PROTOS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/dbxelf.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/dbxelf.h
new file mode 100644
index 0000000..26c9fd7
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/dbxelf.h
@@ -0,0 +1,68 @@
+/* Definitions needed when using stabs embedded in ELF sections.
+   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/* This file may be included by any ELF target which wishes to
+   support -gstabs generating stabs in sections, as produced by gas
+   and understood by gdb.  */
+
+#ifndef GCC_DBX_ELF_H
+#define GCC_DBX_ELF_H
+
+/* Output DBX (stabs) debugging information if doing -gstabs.  */
+
+#define DBX_DEBUGGING_INFO 1
+
+/* Make LBRAC and RBRAC addresses relative to the start of the
+   function.  The native Solaris stabs debugging format works this
+   way, gdb expects it, and it reduces the number of relocation
+   entries...  */
+
+#define DBX_BLOCKS_FUNCTION_RELATIVE 1
+
+/* ... but, to make this work, functions must appear prior to line info.  */
+
+#define DBX_FUNCTION_FIRST
+
+/* When generating stabs debugging, use N_BINCL entries.  */
+
+#define DBX_USE_BINCL
+
+/* There is no limit to the length of stabs strings.  */
+
+#ifndef DBX_CONTIN_LENGTH
+#define DBX_CONTIN_LENGTH 0
+#endif
+
+/* Like block addresses, stabs line numbers are relative to the
+   current function.  */
+
+#define DBX_LINES_FUNCTION_RELATIVE 1
+
+/* Generate a blank trailing N_SO to mark the end of the .o file, since
+   we can't depend upon the linker to mark .o file boundaries with
+   embedded stabs.  */
+
+#define DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END
+
+#endif /* ! GCC_DBX_ELF_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/elfos.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/elfos.h
new file mode 100644
index 0000000..e00d437
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/elfos.h
@@ -0,0 +1,465 @@
+/* elfos.h  --  operating system specific defines to be used when
+   targeting GCC for some generic ELF system
+   Copyright (C) 1991-2019 Free Software Foundation, Inc.
+   Based on svr4.h contributed by Ron Guilmette (rfg@netcom.com).
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#define TARGET_OBJFMT_CPP_BUILTINS()		\
+  do						\
+    {						\
+	builtin_define ("__ELF__");		\
+    }						\
+  while (0)
+
+/* Define a symbol indicating that we are using elfos.h.
+   Some CPU specific configuration files use this.  */
+#define USING_ELFOS_H
+
+/* The prefix to add to user-visible assembler symbols.
+
+   For ELF systems the convention is *not* to prepend a leading
+   underscore onto user-level symbol names.  */
+
+#undef  USER_LABEL_PREFIX
+#define USER_LABEL_PREFIX ""
+
+/* The biggest alignment supported by ELF in bits. 32-bit ELF 
+   supports section alignment up to (0x80000000 * 8), while 
+   64-bit ELF supports (0x8000000000000000 * 8). If this macro 
+   is not defined, the default is the largest alignment supported 
+   by 32-bit ELF and representable on a 32-bit host. Use this
+   macro to limit the alignment which can be specified using
+   the `__attribute__ ((aligned (N)))' construct.  */
+#ifndef MAX_OFILE_ALIGNMENT
+#define MAX_OFILE_ALIGNMENT (((unsigned int) 1 << 28) * 8)
+#endif
+
+/* Use periods rather than dollar signs in special g++ assembler names.  */
+
+#define NO_DOLLAR_IN_LABEL
+
+/* Writing `int' for a bit-field forces int alignment for the structure.  */
+
+#ifndef PCC_BITFIELD_TYPE_MATTERS
+#define PCC_BITFIELD_TYPE_MATTERS 1
+#endif
+
+/* All ELF targets can support DWARF-2.  */
+
+#define DWARF2_DEBUGGING_INFO 1
+
+/* The GNU tools operate better with dwarf2, and it is required by some
+   psABI's.  Since we don't have any native tools to be compatible with,
+   default to dwarf2.  */
+
+#ifndef PREFERRED_DEBUGGING_TYPE
+#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
+#endif
+
+/* All SVR4 targets use the ELF object file format.  */
+#define OBJECT_FORMAT_ELF
+
+
+/* Output #ident as a .ident.  */
+
+#undef TARGET_ASM_OUTPUT_IDENT
+#define TARGET_ASM_OUTPUT_IDENT default_asm_output_ident_directive
+
+#undef  SET_ASM_OP
+#define SET_ASM_OP	"\t.set\t"
+
+/* Most svr4 assemblers want a .file directive at the beginning of
+   their input file.  */
+#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
+
+/* This is how to allocate empty space in some section.  The .zero
+   pseudo-op is used for this on most svr4 assemblers.  */
+
+#define SKIP_ASM_OP	"\t.zero\t"
+
+#undef  ASM_OUTPUT_SKIP
+#define ASM_OUTPUT_SKIP(FILE, SIZE) \
+   fprintf ((FILE), "%s" HOST_WIDE_INT_PRINT_UNSIGNED "\n",\
+	    SKIP_ASM_OP, (SIZE))
+
+/* This is how to store into the string LABEL
+   the symbol_ref name of an internal numbered label where
+   PREFIX is the class of label and NUM is the number within the class.
+   This is suitable for output with `assemble_name'.
+
+   For most svr4 systems, the convention is that any symbol which begins
+   with a period is not put into the linker symbol table by the assembler.  */
+
+#undef  ASM_GENERATE_INTERNAL_LABEL
+#define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM)		\
+  do								\
+    {								\
+      char *__p;						\
+      (LABEL)[0] = '*';						\
+      (LABEL)[1] = '.';						\
+      __p = stpcpy (&(LABEL)[2], PREFIX);			\
+      sprint_ul (__p, (unsigned long) (NUM));			\
+    }								\
+  while (0)
+
+/* Output the label which precedes a jumptable.  Note that for all svr4
+   systems where we actually generate jumptables (which is to say every
+   svr4 target except i386, where we use casesi instead) we put the jump-
+   tables into the .rodata section and since other stuff could have been
+   put into the .rodata section prior to any given jumptable, we have to
+   make sure that the location counter for the .rodata section gets pro-
+   perly re-aligned prior to the actual beginning of the jump table.  */
+
+#undef ALIGN_ASM_OP
+#define ALIGN_ASM_OP "\t.align\t"
+
+#ifndef ASM_OUTPUT_BEFORE_CASE_LABEL
+#define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE, PREFIX, NUM, TABLE) \
+  ASM_OUTPUT_ALIGN ((FILE), 2)
+#endif
+
+#undef  ASM_OUTPUT_CASE_LABEL
+#define ASM_OUTPUT_CASE_LABEL(FILE, PREFIX, NUM, JUMPTABLE)		\
+  do									\
+    {									\
+      ASM_OUTPUT_BEFORE_CASE_LABEL (FILE, PREFIX, NUM, JUMPTABLE);	\
+      (*targetm.asm_out.internal_label) (FILE, PREFIX, NUM);		\
+    }									\
+  while (0)
+
+/* The standard SVR4 assembler seems to require that certain builtin
+   library routines (e.g. .udiv) be explicitly declared as .globl
+   in each assembly file where they are referenced.  */
+
+#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN)	\
+  (*targetm.asm_out.globalize_label) (FILE, XSTR (FUN, 0))
+
+/* This says how to output assembler code to declare an
+   uninitialized external linkage data object.  Under SVR4,
+   the linker seems to want the alignment of data objects
+   to depend on their types.  We do exactly that here.  */
+
+#define COMMON_ASM_OP	"\t.comm\t"
+
+#undef  ASM_OUTPUT_ALIGNED_COMMON
+#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN)		\
+  do									\
+    {									\
+      fprintf ((FILE), "%s", COMMON_ASM_OP);				\
+      assemble_name ((FILE), (NAME));					\
+      fprintf ((FILE), "," HOST_WIDE_INT_PRINT_UNSIGNED ",%u\n",		\
+	       (SIZE), (ALIGN) / BITS_PER_UNIT);			\
+    }									\
+  while (0)
+
+/* This says how to output assembler code to declare an
+   uninitialized internal linkage data object.  Under SVR4,
+   the linker seems to want the alignment of data objects
+   to depend on their types.  We do exactly that here.  */
+
+#define LOCAL_ASM_OP	"\t.local\t"
+
+#undef  ASM_OUTPUT_ALIGNED_LOCAL
+#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN)	\
+  do								\
+    {								\
+      fprintf ((FILE), "%s", LOCAL_ASM_OP);			\
+      assemble_name ((FILE), (NAME));				\
+      fprintf ((FILE), "\n");					\
+      ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN);	\
+    }								\
+  while (0)
+
+/* This is the pseudo-op used to generate a contiguous sequence of byte
+   values from a double-quoted string WITHOUT HAVING A TERMINATING NUL
+   AUTOMATICALLY APPENDED.  This is the same for most svr4 assemblers.  */
+
+#undef  ASCII_DATA_ASM_OP
+#define ASCII_DATA_ASM_OP	"\t.ascii\t"
+
+/* Support a read-only data section.  */
+#define READONLY_DATA_SECTION_ASM_OP	"\t.section\t.rodata"
+
+/* On svr4, we *do* have support for the .init and .fini sections, and we
+   can put stuff in there to be executed before and after `main'.  We let
+   crtstuff.c and other files know this by defining the following symbols.
+   The definitions say how to change sections to the .init and .fini
+   sections.  This is the same for all known svr4 assemblers.  */
+
+#define INIT_SECTION_ASM_OP	"\t.section\t.init"
+#define FINI_SECTION_ASM_OP	"\t.section\t.fini"
+
+/* Output assembly directive to move to the beginning of current section.  */
+#ifdef HAVE_GAS_SUBSECTION_ORDERING
+# define ASM_SECTION_START_OP	"\t.subsection\t-1"
+# define ASM_OUTPUT_SECTION_START(FILE)	\
+  fprintf ((FILE), "%s\n", ASM_SECTION_START_OP)
+#endif
+
+#define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
+
+/* Switch into a generic section.  */
+#define TARGET_ASM_NAMED_SECTION  default_elf_asm_named_section
+
+#undef  TARGET_ASM_SELECT_RTX_SECTION
+#define TARGET_ASM_SELECT_RTX_SECTION default_elf_select_rtx_section
+#undef	TARGET_ASM_SELECT_SECTION
+#define TARGET_ASM_SELECT_SECTION default_elf_select_section
+#undef  TARGET_HAVE_SWITCHABLE_BSS_SECTIONS
+#define TARGET_HAVE_SWITCHABLE_BSS_SECTIONS true
+
+/* Define the strings used for the special svr4 .type and .size directives.
+   These strings generally do not vary from one system running svr4 to
+   another, but if a given system (e.g. m88k running svr) needs to use
+   different pseudo-op names for these, they may be overridden in the
+   file which includes this one.  */
+
+#define TYPE_ASM_OP	"\t.type\t"
+#define SIZE_ASM_OP	"\t.size\t"
+
+/* This is how we tell the assembler that a symbol is weak.  */
+
+#define ASM_WEAKEN_LABEL(FILE, NAME)	\
+  do					\
+    {					\
+      fputs ("\t.weak\t", (FILE));	\
+      assemble_name ((FILE), (NAME));	\
+      fputc ('\n', (FILE));		\
+    }					\
+  while (0)
+
+/* The following macro defines the format used to output the second
+   operand of the .type assembler directive.  Different svr4 assemblers
+   expect various different forms for this operand.  The one given here
+   is just a default.  You may need to override it in your machine-
+   specific tm.h file (depending upon the particulars of your assembler).  */
+
+#define TYPE_OPERAND_FMT	"@%s"
+
+/* Write the extra assembler code needed to declare a function's result.
+   Most svr4 assemblers don't require any special declaration of the
+   result value, but there are exceptions.  */
+
+#ifndef ASM_DECLARE_RESULT
+#define ASM_DECLARE_RESULT(FILE, RESULT)
+#endif
+
+/* These macros generate the special .type and .size directives which
+   are used to set the corresponding fields of the linker symbol table
+   entries in an ELF object file under SVR4.  These macros also output
+   the starting labels for the relevant functions/objects.  */
+
+/* Write the extra assembler code needed to declare a function properly.
+   Some svr4 assemblers need to also have something extra said about the
+   function's return value.  We allow for that here.  */
+
+#ifndef ASM_DECLARE_FUNCTION_NAME
+#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)		\
+  do								\
+    {								\
+      ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function");	\
+      ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL));		\
+      ASM_OUTPUT_FUNCTION_LABEL (FILE, NAME, DECL);		\
+    }								\
+  while (0)
+#endif
+
+/* Write the extra assembler code needed to declare the name of a
+   cold function partition properly. Some svr4 assemblers need to also
+   have something extra said about the function's return value.  We
+   allow for that here.  */
+
+#ifndef ASM_DECLARE_COLD_FUNCTION_NAME
+#define ASM_DECLARE_COLD_FUNCTION_NAME(FILE, NAME, DECL)	\
+  do								\
+    {								\
+      ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function");	\
+      ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL));		\
+      ASM_OUTPUT_FUNCTION_LABEL (FILE, NAME, DECL);		\
+    }								\
+  while (0)
+#endif
+
+/* Write the extra assembler code needed to declare an object properly.  */
+
+#ifdef HAVE_GAS_GNU_UNIQUE_OBJECT
+#define USE_GNU_UNIQUE_OBJECT flag_gnu_unique
+#else
+#define USE_GNU_UNIQUE_OBJECT 0
+#endif
+
+#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)			\
+  do									\
+    {									\
+      HOST_WIDE_INT size;						\
+									\
+      /* For template static data member instantiations or		\
+	 inline fn local statics and their guard variables, use		\
+	 gnu_unique_object so that they will be combined even under	\
+	 RTLD_LOCAL.  Don't use gnu_unique_object for typeinfo,		\
+	 vtables and other read-only artificial decls.  */		\
+      if (USE_GNU_UNIQUE_OBJECT && DECL_ONE_ONLY (DECL)			\
+	  && (!DECL_ARTIFICIAL (DECL) || !TREE_READONLY (DECL)))	\
+	ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "gnu_unique_object");	\
+      else								\
+	ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object");		\
+									\
+      size_directive_output = 0;					\
+      if (!flag_inhibit_size_directive					\
+	  && (DECL) && DECL_SIZE (DECL))				\
+	{								\
+	  size_directive_output = 1;					\
+	  size = tree_to_uhwi (DECL_SIZE_UNIT (DECL));			\
+	  ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size);			\
+	}								\
+									\
+      ASM_OUTPUT_LABEL (FILE, NAME);					\
+    }									\
+  while (0)
+
+/* Output the size directive for a decl in rest_of_decl_compilation
+   in the case where we did not do so before the initializer.
+   Once we find the error_mark_node, we know that the value of
+   size_directive_output was set
+   by ASM_DECLARE_OBJECT_NAME when it was run for the same decl.  */
+
+#undef ASM_FINISH_DECLARE_OBJECT
+#define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END)\
+  do								\
+    {								\
+      const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0);	\
+      HOST_WIDE_INT size;					\
+								\
+      if (!flag_inhibit_size_directive				\
+	  && DECL_SIZE (DECL)					\
+	  && ! AT_END && TOP_LEVEL				\
+	  && DECL_INITIAL (DECL) == error_mark_node		\
+	  && !size_directive_output)				\
+	{							\
+	  size_directive_output = 1;				\
+	  size = tree_to_uhwi (DECL_SIZE_UNIT (DECL));		\
+	  ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size);		\
+	}							\
+    }								\
+  while (0)
+
+/* This is how to declare the size of a function.  */
+#ifndef ASM_DECLARE_FUNCTION_SIZE
+#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL)		\
+  do								\
+    {								\
+      if (!flag_inhibit_size_directive)				\
+	ASM_OUTPUT_MEASURED_SIZE (FILE, FNAME);			\
+    }								\
+  while (0)
+#endif
+
+/* This is how to declare the size of a cold function partition.  */
+#ifndef ASM_DECLARE_COLD_FUNCTION_SIZE
+#define ASM_DECLARE_COLD_FUNCTION_SIZE(FILE, FNAME, DECL)	\
+  do								\
+    {								\
+      if (!flag_inhibit_size_directive)				\
+	ASM_OUTPUT_MEASURED_SIZE (FILE, FNAME);			\
+    }								\
+  while (0)
+#endif
+
+/* A table of bytes codes used by the ASM_OUTPUT_ASCII and
+   ASM_OUTPUT_LIMITED_STRING macros.  Each byte in the table
+   corresponds to a particular byte value [0..255].  For any
+   given byte value, if the value in the corresponding table
+   position is zero, the given character can be output directly.
+   If the table value is 1, the byte must be output as a \ooo
+   octal escape.  If the tables value is anything else, then the
+   byte value should be output as a \ followed by the value
+   in the table.  Note that we can use standard UN*X escape
+   sequences for many control characters, but we don't use
+   \a to represent BEL because some svr4 assemblers (e.g. on
+   the i386) don't know about that.  Also, we don't use \v
+   since some versions of gas, such as 2.2 did not accept it.  */
+
+#define ELF_ASCII_ESCAPES \
+"\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
+\0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
+\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\
+\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\
+\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
+\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
+\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
+\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1"
+
+/* Some svr4 assemblers have a limit on the number of characters which
+   can appear in the operand of a .string directive.  If your assembler
+   has such a limitation, you should define STRING_LIMIT to reflect that
+   limit.  Note that at least some svr4 assemblers have a limit on the
+   actual number of bytes in the double-quoted string, and that they
+   count each character in an escape sequence as one byte.  Thus, an
+   escape sequence like \377 would count as four bytes.
+
+   If your target assembler doesn't support the .string directive, you
+   should define this to zero.
+*/
+
+#define ELF_STRING_LIMIT	((unsigned) 256)
+
+#define STRING_ASM_OP	"\t.string\t"
+
+/* The routine used to output NUL terminated strings.  We use a special
+   version of this for most svr4 targets because doing so makes the
+   generated assembly code more compact (and thus faster to assemble)
+   as well as more readable, especially for targets like the i386
+   (where the only alternative is to output character sequences as
+   comma separated lists of numbers).  */
+
+#define ASM_OUTPUT_LIMITED_STRING(FILE, STR)		\
+  default_elf_asm_output_limited_string ((FILE), (STR))
+
+/* The routine used to output sequences of byte values.  We use a special
+   version of this for most svr4 targets because doing so makes the
+   generated assembly code more compact (and thus faster to assemble)
+   as well as more readable.  Note that if we find subparts of the
+   character sequence which end with NUL (and which are shorter than
+   STRING_LIMIT) we output those using ASM_OUTPUT_LIMITED_STRING.  */
+
+#undef  ASM_OUTPUT_ASCII
+#define ASM_OUTPUT_ASCII(FILE, STR, LENGTH)			\
+  default_elf_asm_output_ascii ((FILE), (STR), (LENGTH))
+
+/* Allow the use of the -frecord-gcc-switches switch via the
+   elf_record_gcc_switches function defined in varasm.c.  */
+#undef  TARGET_ASM_RECORD_GCC_SWITCHES
+#define TARGET_ASM_RECORD_GCC_SWITCHES elf_record_gcc_switches
+
+/* A C statement (sans semicolon) to output to the stdio stream STREAM
+   any text necessary for declaring the name of an external symbol
+   named NAME which is referenced in this compilation but not defined.
+   It is needed to properly support non-default visibility.  */
+
+#ifndef ASM_OUTPUT_EXTERNAL
+#define ASM_OUTPUT_EXTERNAL(FILE, DECL, NAME) \
+  default_elf_asm_output_external (FILE, DECL, NAME)
+#endif
+
+#undef TARGET_LIBC_HAS_FUNCTION
+#define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/initfini-array.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/initfini-array.h
new file mode 100644
index 0000000..139d34e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/initfini-array.h
@@ -0,0 +1,45 @@
+/* Definitions for ELF systems with .init_array/.fini_array section
+   support.
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   Under Section 7 of GPL version 3, you are granted additional
+   permissions described in the GCC Runtime Library Exception, version
+   3.1, as published by the Free Software Foundation.
+
+   You should have received a copy of the GNU General Public License and
+   a copy of the GCC Runtime Library Exception along with this program;
+   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if HAVE_INITFINI_ARRAY_SUPPORT
+
+#define USE_INITFINI_ARRAY
+
+#undef INIT_SECTION_ASM_OP
+#undef FINI_SECTION_ASM_OP
+
+#undef INIT_ARRAY_SECTION_ASM_OP
+#define INIT_ARRAY_SECTION_ASM_OP
+
+#undef FINI_ARRAY_SECTION_ASM_OP
+#define FINI_ARRAY_SECTION_ASM_OP
+
+/* Use .init_array/.fini_array section for constructors and destructors. */
+#undef TARGET_ASM_CONSTRUCTOR
+#define TARGET_ASM_CONSTRUCTOR default_elf_init_array_asm_out_constructor
+#undef TARGET_ASM_DESTRUCTOR
+#define TARGET_ASM_DESTRUCTOR default_elf_fini_array_asm_out_destructor
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/newlib-stdint.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/newlib-stdint.h
new file mode 100644
index 0000000..89af533
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/config/newlib-stdint.h
@@ -0,0 +1,69 @@
+/* Definitions for <stdint.h> types on systems using newlib.
+   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/* newlib uses 32-bit long in certain cases for all non-SPU
+   targets.  */
+#ifndef STDINT_LONG32
+#define STDINT_LONG32 (LONG_TYPE_SIZE == 32)
+#endif
+
+#define SIG_ATOMIC_TYPE "int"
+
+/* The newlib logic actually checks for sizes greater than 32 rather
+   than equal to 64 for various 64-bit types.  */
+
+#define INT8_TYPE (CHAR_TYPE_SIZE == 8 ? "signed char" : 0)
+#define INT16_TYPE (SHORT_TYPE_SIZE == 16 ? "short int" : INT_TYPE_SIZE == 16 ? "int" : CHAR_TYPE_SIZE == 16 ? "signed char" : 0)
+#define INT32_TYPE (STDINT_LONG32 ? "long int" : INT_TYPE_SIZE == 32 ? "int" : SHORT_TYPE_SIZE == 32 ? "short int" : CHAR_TYPE_SIZE == 32 ? "signed char" : 0)
+#define INT64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : LONG_LONG_TYPE_SIZE == 64 ? "long long int" : INT_TYPE_SIZE == 64 ? "int" : 0)
+#define UINT8_TYPE (CHAR_TYPE_SIZE == 8 ? "unsigned char" : 0)
+#define UINT16_TYPE (SHORT_TYPE_SIZE == 16 ? "short unsigned int" : INT_TYPE_SIZE == 16 ? "unsigned int" : CHAR_TYPE_SIZE == 16 ? "unsigned char" : 0)
+#define UINT32_TYPE (STDINT_LONG32 ? "long unsigned int" : INT_TYPE_SIZE == 32 ? "unsigned int" : SHORT_TYPE_SIZE == 32 ? "short unsigned int" : CHAR_TYPE_SIZE == 32 ? "unsigned char" : 0)
+#define UINT64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : LONG_LONG_TYPE_SIZE == 64 ? "long long unsigned int" : INT_TYPE_SIZE == 64 ? "unsigned int" : 0)
+
+#define INT_LEAST8_TYPE (INT8_TYPE ? INT8_TYPE : INT16_TYPE ? INT16_TYPE : INT32_TYPE ? INT32_TYPE : INT64_TYPE ? INT64_TYPE : 0)
+#define INT_LEAST16_TYPE (INT16_TYPE ? INT16_TYPE : INT32_TYPE ? INT32_TYPE : INT64_TYPE ? INT64_TYPE : 0)
+#define INT_LEAST32_TYPE (INT32_TYPE ? INT32_TYPE : INT64_TYPE ? INT64_TYPE : 0)
+#define INT_LEAST64_TYPE INT64_TYPE
+#define UINT_LEAST8_TYPE (UINT8_TYPE ? UINT8_TYPE : UINT16_TYPE ? UINT16_TYPE : UINT32_TYPE ? UINT32_TYPE : UINT64_TYPE ? UINT64_TYPE : 0)
+#define UINT_LEAST16_TYPE (UINT16_TYPE ? UINT16_TYPE : UINT32_TYPE ? UINT32_TYPE : UINT64_TYPE ? UINT64_TYPE : 0)
+#define UINT_LEAST32_TYPE (UINT32_TYPE ? UINT32_TYPE : UINT64_TYPE ? UINT64_TYPE : 0)
+#define UINT_LEAST64_TYPE UINT64_TYPE
+
+#define INT_FAST8_TYPE (INT_TYPE_SIZE >= 8 ? "int" : INT_LEAST8_TYPE)
+#define INT_FAST16_TYPE (INT_TYPE_SIZE >= 16 ? "int" : INT_LEAST16_TYPE)
+#define INT_FAST32_TYPE (INT_TYPE_SIZE >= 32 ? "int" : INT_LEAST32_TYPE)
+#define INT_FAST64_TYPE (INT_TYPE_SIZE >= 64 ? "int" : INT_LEAST64_TYPE)
+#define UINT_FAST8_TYPE (INT_TYPE_SIZE >= 8 ? "unsigned int" : UINT_LEAST8_TYPE)
+#define UINT_FAST16_TYPE (INT_TYPE_SIZE >= 16 ? "unsigned int" : UINT_LEAST16_TYPE)
+#define UINT_FAST32_TYPE (INT_TYPE_SIZE >= 32 ? "unsigned int" : UINT_LEAST32_TYPE)
+#define UINT_FAST64_TYPE (INT_TYPE_SIZE >= 64 ? "unsigned int" : UINT_LEAST64_TYPE)
+
+/* Newlib uses the unsigned type corresponding to ptrdiff_t for
+   uintptr_t; this is the same as size_t for most newlib-using
+   targets.  */
+#define INTPTR_TYPE PTRDIFF_TYPE
+#ifndef UINTPTR_TYPE
+#define UINTPTR_TYPE SIZE_TYPE
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/configargs.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/configargs.h
new file mode 100644
index 0000000..f32d391
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/configargs.h
@@ -0,0 +1,7 @@
+/* Generated automatically. */
+static const char configuration_arguments[] = "../linaro/configure -v --disable-shared --disable-nls --disable-threads --disable-tls --disable-bootstrap --disable-browser-plugin --disable-cloog-version-check --disable-isl-version-check --disable-libgomp --disable-libitm --disable-libmudflap --disable-libsanitizer --disable-libssp --disable-libstdc__-v3 --disable-multilib --disable-ppl-version-check --disable-sjlj-exceptions --disable-vtable-verify --disable-werror --enable-checking=release --enable-languages=c --enable-lto --enable-plugin --enable-gold --enable-graphite=yes --enable-initfini-array --enable-ld=default --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=aarch64-elf --prefix=/home/arter97/arm64-gcc --with-newlib --with-gnu-as --with-gnu-ld --without-included-gettext --with-target-system-zlib";
+static const char thread_model[] = "single";
+
+static const struct {
+  const char *name, *value;
+} configure_default_options[] = { { NULL, NULL} };
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/context.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/context.h
new file mode 100644
index 0000000..d2bab2a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/context.h
@@ -0,0 +1,69 @@
+/* context.h - Holder for global state
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_CONTEXT_H
+#define GCC_CONTEXT_H
+
+namespace gcc {
+
+class pass_manager;
+class dump_manager;
+
+/* GCC's internal state can be divided into zero or more
+   "parallel universe" of state; an instance of this class is one such
+   context of state.  */
+class context
+{
+public:
+  context ();
+  ~context ();
+
+  /* The flag shows if there are symbols to be streamed for offloading.  */
+  bool have_offload;
+
+  /* Pass-management.  */
+
+  void set_passes (pass_manager *m)
+  {
+    gcc_assert (!m_passes);
+    m_passes = m;
+  }
+
+  pass_manager *get_passes () { gcc_assert (m_passes); return m_passes; }
+
+  /* Handling dump files.  */
+
+  dump_manager *get_dumps () {gcc_assert (m_dumps); return m_dumps; }
+
+private:
+  /* Pass-management.  */
+  pass_manager *m_passes;
+
+  /* Dump files.  */
+  dump_manager *m_dumps;
+
+}; // class context
+
+} // namespace gcc
+
+/* The global singleton context aka "g".
+   (the name is chosen to be easy to type in a debugger).  */
+extern gcc::context *g;
+
+#endif /* ! GCC_CONTEXT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/convert.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/convert.h
new file mode 100644
index 0000000..5be553b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/convert.h
@@ -0,0 +1,45 @@
+/* Definition of functions in convert.c.
+   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_CONVERT_H
+#define GCC_CONVERT_H
+
+extern tree convert_to_integer (tree, tree);
+extern tree convert_to_integer_maybe_fold (tree, tree, bool);
+extern tree convert_to_pointer (tree, tree);
+extern tree convert_to_pointer_maybe_fold (tree, tree, bool);
+extern tree convert_to_real (tree, tree);
+extern tree convert_to_real_maybe_fold (tree, tree, bool);
+extern tree convert_to_fixed (tree, tree);
+extern tree convert_to_complex (tree, tree);
+extern tree convert_to_complex_maybe_fold (tree, tree, bool);
+extern tree convert_to_vector (tree, tree);
+
+extern inline tree convert_to_integer_nofold (tree t, tree x)
+{ return convert_to_integer_maybe_fold (t, x, false); }
+extern inline tree convert_to_pointer_nofold (tree t, tree x)
+{ return convert_to_pointer_maybe_fold (t, x, false); }
+extern inline tree convert_to_real_nofold (tree t, tree x)
+{ return convert_to_real_maybe_fold (t, x, false); }
+extern inline tree convert_to_complex_nofold (tree t, tree x)
+{ return convert_to_complex_maybe_fold (t, x, false); }
+
+extern tree preserve_any_location_wrapper (tree result, tree orig_expr);
+
+#endif /* GCC_CONVERT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/coretypes.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/coretypes.h
new file mode 100644
index 0000000..2f6b859
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/coretypes.h
@@ -0,0 +1,449 @@
+/* GCC core type declarations.
+   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/* Provide forward declarations of core types which are referred to by
+   most of the compiler.  This allows header files to use these types
+   (e.g. in function prototypes) without concern for whether the full
+   definitions are visible.  Some other declarations that need to be
+   universally visible are here, too.
+
+   In the context of tconfig.h, most of these have special definitions
+   which prevent them from being used except in further type
+   declarations.  This is a kludge; the right thing is to avoid
+   including the "tm.h" header set in the context of tconfig.h, but
+   we're not there yet.  */
+
+#ifndef GCC_CORETYPES_H
+#define GCC_CORETYPES_H
+
+#ifndef GTY
+#define GTY(x)  /* nothing - marker for gengtype */
+#endif
+
+#ifndef USED_FOR_TARGET
+
+typedef int64_t gcov_type;
+typedef uint64_t gcov_type_unsigned;
+
+struct bitmap_obstack;
+struct bitmap_head;
+typedef struct bitmap_head *bitmap;
+typedef const struct bitmap_head *const_bitmap;
+struct simple_bitmap_def;
+typedef struct simple_bitmap_def *sbitmap;
+typedef const struct simple_bitmap_def *const_sbitmap;
+struct rtx_def;
+typedef struct rtx_def *rtx;
+typedef const struct rtx_def *const_rtx;
+class scalar_mode;
+class scalar_int_mode;
+class scalar_float_mode;
+class complex_mode;
+class fixed_size_mode;
+template<typename> class opt_mode;
+typedef opt_mode<scalar_mode> opt_scalar_mode;
+typedef opt_mode<scalar_int_mode> opt_scalar_int_mode;
+typedef opt_mode<scalar_float_mode> opt_scalar_float_mode;
+template<typename> class pod_mode;
+typedef pod_mode<scalar_mode> scalar_mode_pod;
+typedef pod_mode<scalar_int_mode> scalar_int_mode_pod;
+typedef pod_mode<fixed_size_mode> fixed_size_mode_pod;
+
+/* Subclasses of rtx_def, using indentation to show the class
+   hierarchy, along with the relevant invariant.
+   Where possible, keep this list in the same order as in rtl.def.  */
+class rtx_def;
+  class rtx_expr_list;           /* GET_CODE (X) == EXPR_LIST */
+  class rtx_insn_list;           /* GET_CODE (X) == INSN_LIST */
+  class rtx_sequence;            /* GET_CODE (X) == SEQUENCE */
+  class rtx_insn;
+    class rtx_debug_insn;      /* DEBUG_INSN_P (X) */
+    class rtx_nonjump_insn;    /* NONJUMP_INSN_P (X) */
+    class rtx_jump_insn;       /* JUMP_P (X) */
+    class rtx_call_insn;       /* CALL_P (X) */
+    class rtx_jump_table_data; /* JUMP_TABLE_DATA_P (X) */
+    class rtx_barrier;         /* BARRIER_P (X) */
+    class rtx_code_label;      /* LABEL_P (X) */
+    class rtx_note;            /* NOTE_P (X) */
+
+struct rtvec_def;
+typedef struct rtvec_def *rtvec;
+typedef const struct rtvec_def *const_rtvec;
+struct hwivec_def;
+typedef struct hwivec_def *hwivec;
+typedef const struct hwivec_def *const_hwivec;
+union tree_node;
+typedef union tree_node *tree;
+typedef const union tree_node *const_tree;
+struct gimple;
+typedef gimple *gimple_seq;
+struct gimple_stmt_iterator;
+
+/* Forward decls for leaf gimple subclasses (for individual gimple codes).
+   Keep this in the same order as the corresponding codes in gimple.def.  */
+
+struct gcond;
+struct gdebug;
+struct ggoto;
+struct glabel;
+struct gswitch;
+struct gassign;
+struct gasm;
+struct gcall;
+struct gtransaction;
+struct greturn;
+struct gbind;
+struct gcatch;
+struct geh_filter;
+struct geh_mnt;
+struct geh_else;
+struct gresx;
+struct geh_dispatch;
+struct gphi;
+struct gtry;
+struct gomp_atomic_load;
+struct gomp_atomic_store;
+struct gomp_continue;
+struct gomp_critical;
+struct gomp_ordered;
+struct gomp_for;
+struct gomp_parallel;
+struct gomp_task;
+struct gomp_sections;
+struct gomp_single;
+struct gomp_target;
+struct gomp_teams;
+
+/* Subclasses of symtab_node, using indentation to show the class
+   hierarchy.  */
+
+class symtab_node;
+  struct cgraph_node;
+  class varpool_node;
+
+union section;
+typedef union section section;
+struct gcc_options;
+struct cl_target_option;
+struct cl_optimization;
+struct cl_option;
+struct cl_decoded_option;
+struct cl_option_handlers;
+struct diagnostic_context;
+struct pretty_printer;
+
+/* Address space number for named address space support.  */
+typedef unsigned char addr_space_t;
+
+/* The value of addr_space_t that represents the generic address space.  */
+#define ADDR_SPACE_GENERIC 0
+#define ADDR_SPACE_GENERIC_P(AS) ((AS) == ADDR_SPACE_GENERIC)
+
+/* The major intermediate representations of GCC.  */
+enum ir_type {
+  IR_GIMPLE,
+  IR_RTL_CFGRTL,
+  IR_RTL_CFGLAYOUT
+};
+
+/* Provide forward struct declaration so that we don't have to include
+   all of cpplib.h whenever a random prototype includes a pointer.
+   Note that the cpp_reader and cpp_token typedefs remain part of
+   cpplib.h.  */
+
+struct cpp_reader;
+struct cpp_token;
+
+/* The thread-local storage model associated with a given VAR_DECL
+   or SYMBOL_REF.  This isn't used much, but both trees and RTL refer
+   to it, so it's here.  */
+enum tls_model {
+  TLS_MODEL_NONE,
+  TLS_MODEL_EMULATED,
+  TLS_MODEL_REAL,
+  TLS_MODEL_GLOBAL_DYNAMIC = TLS_MODEL_REAL,
+  TLS_MODEL_LOCAL_DYNAMIC,
+  TLS_MODEL_INITIAL_EXEC,
+  TLS_MODEL_LOCAL_EXEC
+};
+
+/* Types of ABI for an offload compiler.  */
+enum offload_abi {
+  OFFLOAD_ABI_UNSET,
+  OFFLOAD_ABI_LP64,
+  OFFLOAD_ABI_ILP32
+};
+
+/* Types of profile update methods.  */
+enum profile_update {
+  PROFILE_UPDATE_SINGLE,
+  PROFILE_UPDATE_ATOMIC,
+  PROFILE_UPDATE_PREFER_ATOMIC
+};
+
+/* Types of unwind/exception handling info that can be generated.  */
+
+enum unwind_info_type
+{
+  UI_NONE,
+  UI_SJLJ,
+  UI_DWARF2,
+  UI_TARGET,
+  UI_SEH
+};
+
+/* Callgraph node profile representation.  */
+enum node_frequency {
+  /* This function most likely won't be executed at all.
+     (set only when profile feedback is available or via function attribute). */
+  NODE_FREQUENCY_UNLIKELY_EXECUTED,
+  /* For functions that are known to be executed once (i.e. constructors, destructors
+     and main function.  */
+  NODE_FREQUENCY_EXECUTED_ONCE,
+  /* The default value.  */
+  NODE_FREQUENCY_NORMAL,
+  /* Optimize this function hard
+     (set only when profile feedback is available or via function attribute). */
+  NODE_FREQUENCY_HOT
+};
+
+/* Ways of optimizing code.  */
+enum optimization_type {
+  /* Prioritize speed over size.  */
+  OPTIMIZE_FOR_SPEED,
+
+  /* Only do things that are good for both size and speed.  */
+  OPTIMIZE_FOR_BOTH,
+
+  /* Prioritize size over speed.  */
+  OPTIMIZE_FOR_SIZE
+};
+
+/* Enumerates a padding direction.  */
+enum pad_direction {
+  /* No padding is required.  */
+  PAD_NONE,
+
+  /* Insert padding above the data, i.e. at higher memeory addresses
+     when dealing with memory, and at the most significant end when
+     dealing with registers.  */
+  PAD_UPWARD,
+
+  /* Insert padding below the data, i.e. at lower memeory addresses
+     when dealing with memory, and at the least significant end when
+     dealing with registers.  */
+  PAD_DOWNWARD
+};
+
+/* Possible initialization status of a variable.   When requested
+   by the user, this information is tracked and recorded in the DWARF
+   debug information, along with the variable's location.  */
+enum var_init_status
+{
+  VAR_INIT_STATUS_UNKNOWN,
+  VAR_INIT_STATUS_UNINITIALIZED,
+  VAR_INIT_STATUS_INITIALIZED
+};
+
+/* Names for the different levels of -Wstrict-overflow=N.  The numeric
+   values here correspond to N.  */
+enum warn_strict_overflow_code
+{
+  /* Overflow warning that should be issued with -Wall: a questionable
+     construct that is easy to avoid even when using macros.  Example:
+     folding (x + CONSTANT > x) to 1.  */
+  WARN_STRICT_OVERFLOW_ALL = 1,
+  /* Overflow warning about folding a comparison to a constant because
+     of undefined signed overflow, other than cases covered by
+     WARN_STRICT_OVERFLOW_ALL.  Example: folding (abs (x) >= 0) to 1
+     (this is false when x == INT_MIN).  */
+  WARN_STRICT_OVERFLOW_CONDITIONAL = 2,
+  /* Overflow warning about changes to comparisons other than folding
+     them to a constant.  Example: folding (x + 1 > 1) to (x > 0).  */
+  WARN_STRICT_OVERFLOW_COMPARISON = 3,
+  /* Overflow warnings not covered by the above cases.  Example:
+     folding ((x * 10) / 5) to (x * 2).  */
+  WARN_STRICT_OVERFLOW_MISC = 4,
+  /* Overflow warnings about reducing magnitude of constants in
+     comparison.  Example: folding (x + 2 > y) to (x + 1 >= y).  */
+  WARN_STRICT_OVERFLOW_MAGNITUDE = 5
+};
+
+/* The type of an alias set.  Code currently assumes that variables of
+   this type can take the values 0 (the alias set which aliases
+   everything) and -1 (sometimes indicating that the alias set is
+   unknown, sometimes indicating a memory barrier) and -2 (indicating
+   that the alias set should be set to a unique value but has not been
+   set yet).  */
+typedef int alias_set_type;
+
+struct edge_def;
+typedef struct edge_def *edge;
+typedef const struct edge_def *const_edge;
+struct basic_block_def;
+typedef struct basic_block_def *basic_block;
+typedef const struct basic_block_def *const_basic_block;
+
+#if !defined (GENERATOR_FILE)
+# define OBSTACK_CHUNK_SIZE     memory_block_pool::block_size
+# define obstack_chunk_alloc    mempool_obstack_chunk_alloc
+# define obstack_chunk_free     mempool_obstack_chunk_free
+#else
+# define OBSTACK_CHUNK_SIZE     0
+# define obstack_chunk_alloc    xmalloc
+# define obstack_chunk_free     free
+#endif
+
+#define gcc_obstack_init(OBSTACK)				\
+  obstack_specify_allocation ((OBSTACK), OBSTACK_CHUNK_SIZE, 0,	\
+			      obstack_chunk_alloc,		\
+			      obstack_chunk_free)
+
+/* enum reg_class is target specific, so it should not appear in
+   target-independent code or interfaces, like the target hook declarations
+   in target.h.  */
+typedef int reg_class_t;
+
+class rtl_opt_pass;
+
+namespace gcc {
+  class context;
+}
+
+typedef std::pair <tree, tree> tree_pair;
+
+/* Define a name->value mapping.  */
+template <typename ValueType>
+struct kv_pair
+{
+  const char *const name;	/* the name of the value */
+  const ValueType value;	/* the value of the name */
+};
+
+#else
+
+struct _dont_use_rtx_here_;
+struct _dont_use_rtvec_here_;
+struct _dont_use_rtx_insn_here_;
+union _dont_use_tree_here_;
+#define rtx struct _dont_use_rtx_here_ *
+#define const_rtx struct _dont_use_rtx_here_ *
+#define rtvec struct _dont_use_rtvec_here *
+#define const_rtvec struct _dont_use_rtvec_here *
+#define rtx_insn struct _dont_use_rtx_insn_here_
+#define tree union _dont_use_tree_here_ *
+#define const_tree union _dont_use_tree_here_ *
+
+typedef struct scalar_mode scalar_mode;
+typedef struct scalar_int_mode scalar_int_mode;
+typedef struct scalar_float_mode scalar_float_mode;
+typedef struct complex_mode complex_mode;
+
+#endif
+
+/* Classes of functions that compiler needs to check
+   whether they are present at the runtime or not.  */
+enum function_class {
+  function_c94,
+  function_c99_misc,
+  function_c99_math_complex,
+  function_sincos,
+  function_c11_misc
+};
+
+/* Enumerate visibility settings.  This is deliberately ordered from most
+   to least visibility.  */
+enum symbol_visibility
+{
+  VISIBILITY_DEFAULT,
+  VISIBILITY_PROTECTED,
+  VISIBILITY_HIDDEN,
+  VISIBILITY_INTERNAL
+};
+
+/* enums used by the targetm.excess_precision hook.  */
+
+enum flt_eval_method
+{
+  FLT_EVAL_METHOD_UNPREDICTABLE = -1,
+  FLT_EVAL_METHOD_PROMOTE_TO_FLOAT = 0,
+  FLT_EVAL_METHOD_PROMOTE_TO_DOUBLE = 1,
+  FLT_EVAL_METHOD_PROMOTE_TO_LONG_DOUBLE = 2,
+  FLT_EVAL_METHOD_PROMOTE_TO_FLOAT16 = 16
+};
+
+enum excess_precision_type
+{
+  EXCESS_PRECISION_TYPE_IMPLICIT,
+  EXCESS_PRECISION_TYPE_STANDARD,
+  EXCESS_PRECISION_TYPE_FAST
+};
+
+/* Support for user-provided GGC and PCH markers.  The first parameter
+   is a pointer to a pointer, the second a cookie.  */
+typedef void (*gt_pointer_operator) (void *, void *);
+
+#if !defined (HAVE_UCHAR)
+typedef unsigned char uchar;
+#endif
+
+/* Most source files will require the following headers.  */
+#if !defined (USED_FOR_TARGET)
+#include "insn-modes.h"
+#include "signop.h"
+#include "wide-int.h" 
+#include "wide-int-print.h"
+
+/* On targets that don't need polynomial offsets, target-specific code
+   should be able to treat poly_int like a normal constant, with a
+   conversion operator going from the former to the latter.  We also
+   allow this for gencondmd.c for all targets, so that we can treat
+   machine_modes as enums without causing build failures.  */
+#if (defined (IN_TARGET_CODE) \
+     && (defined (USE_ENUM_MODES) || NUM_POLY_INT_COEFFS == 1))
+#define POLY_INT_CONVERSION 1
+#else
+#define POLY_INT_CONVERSION 0
+#endif
+
+#include "poly-int.h"
+#include "poly-int-types.h"
+#include "insn-modes-inline.h"
+#include "machmode.h"
+#include "double-int.h"
+#include "align.h"
+/* Most host source files will require the following headers.  */
+#if !defined (GENERATOR_FILE)
+#include "real.h"
+#include "fixed-value.h"
+#include "hash-table.h"
+#include "hash-set.h"
+#include "input.h"
+#include "is-a.h"
+#include "memory-block.h"
+#include "dumpfile.h"
+#endif
+#endif /* GENERATOR_FILE && !USED_FOR_TARGET */
+
+#endif /* coretypes.h */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/coverage.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/coverage.h
new file mode 100644
index 0000000..9e1a292
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/coverage.h
@@ -0,0 +1,61 @@
+/* coverage.h - Defines data exported from coverage.c
+   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_COVERAGE_H
+#define GCC_COVERAGE_H
+
+#include "gcov-io.h"
+
+extern void coverage_init (const char *);
+extern void coverage_finish (void);
+extern void coverage_remove_note_file (void);
+
+/* Start outputting coverage information for the current
+   function.  */
+extern int coverage_begin_function (unsigned, unsigned);
+
+/* Complete the coverage information for the current function.  */
+extern void coverage_end_function (unsigned, unsigned);
+
+/* Compute the control flow checksum for the function FN given as argument.  */
+extern unsigned coverage_compute_cfg_checksum (struct function *fn);
+
+/* Compute the profile id of function N.  */
+extern unsigned coverage_compute_profile_id (struct cgraph_node *n);
+
+/* Compute the line number checksum for the current function.  */
+extern unsigned coverage_compute_lineno_checksum (void);
+
+/* Allocate some counters. Repeatable per function.  */
+extern int coverage_counter_alloc (unsigned /*counter*/, unsigned/*num*/);
+/* Use a counter from the most recent allocation.  */
+extern tree tree_coverage_counter_ref (unsigned /*counter*/, unsigned/*num*/);
+/* Use a counter address from the most recent allocation.  */
+extern tree tree_coverage_counter_addr (unsigned /*counter*/, unsigned/*num*/);
+
+/* Get all the counters for the current function.  */
+extern gcov_type *get_coverage_counts (unsigned /*counter*/,
+				       unsigned /*cfg_checksum*/,
+				       unsigned /*lineno_checksum*/,
+				       unsigned /*n_counts*/);
+
+extern tree get_gcov_type (void);
+extern bool coverage_node_map_initialized_p (void);
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/cp/cp-tree.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cp/cp-tree.def
new file mode 100644
index 0000000..03c105b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cp/cp-tree.def
@@ -0,0 +1,607 @@
+/* This file contains the definitions and documentation for the
+   additional tree codes used in the GNU C++ compiler (see tree.def
+   for the standard codes).
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+   Hacked by Michael Tiemann (tiemann@cygnus.com)
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+/* An OFFSET_REF is used in two situations:
+
+   1. An expression of the form `A::m' where `A' is a class and `m' is
+      a non-static member.  In this case, operand 0 will be a TYPE
+      (corresponding to `A') and operand 1 will be a FIELD_DECL,
+      BASELINK, or TEMPLATE_ID_EXPR (corresponding to `m').
+
+      The expression is a pointer-to-member if its address is taken,
+      but simply denotes a member of the object if its address is not
+      taken.
+
+      This form is only used during the parsing phase; once semantic
+      analysis has taken place they are eliminated.
+
+   2. An expression of the form `x.*p'.  In this case, operand 0 will
+      be an expression corresponding to `x' and operand 1 will be an
+      expression with pointer-to-member type.  */
+DEFTREECODE (OFFSET_REF, "offset_ref", tcc_reference, 2)
+
+/* A pointer-to-member constant.  For a pointer-to-member constant
+   `X::Y' The PTRMEM_CST_CLASS is the RECORD_TYPE for `X' and the
+   PTRMEM_CST_MEMBER is the _DECL for `Y'.  */
+DEFTREECODE (PTRMEM_CST, "ptrmem_cst", tcc_constant, 0)
+
+/* For NEW_EXPR, operand 0 is the placement list.
+   Operand 1 is the new-declarator.
+   Operand 2 is the number of elements in the array.
+   Operand 3 is the initializer.  */
+DEFTREECODE (NEW_EXPR, "nw_expr", tcc_expression, 4)
+DEFTREECODE (VEC_NEW_EXPR, "vec_nw_expr", tcc_expression, 3)
+
+/* For DELETE_EXPR, operand 0 is the store to be destroyed.
+   Operand 1 is the value to pass to the destroying function
+   saying whether the store should be deallocated as well.  */
+DEFTREECODE (DELETE_EXPR, "dl_expr", tcc_expression, 2)
+DEFTREECODE (VEC_DELETE_EXPR, "vec_dl_expr", tcc_expression, 2)
+
+/* Value is reference to particular overloaded class method.
+   Operand 0 is the class, operand 1 is the field
+   The COMPLEXITY field holds the class level (usually 0).  */
+DEFTREECODE (SCOPE_REF, "scope_ref", tcc_reference, 2)
+
+/* When composing an object with a member, this is the result.
+   Operand 0 is the object.  Operand 1 is the member (usually
+   a dereferenced pointer to member).  */
+DEFTREECODE (MEMBER_REF, "member_ref", tcc_reference, 2)
+
+/* Type conversion operator in C++.  TREE_TYPE is type that this
+   operator converts to.  Operand is expression to be converted.  */
+DEFTREECODE (TYPE_EXPR, "type_expr", tcc_expression, 1)
+
+/* AGGR_INIT_EXPRs have a variably-sized representation similar to
+   that of CALL_EXPRs.  Operand 0 is an INTEGER_CST node containing the
+   operand count, operand 1 is the function which performs initialization,
+   operand 2 is the slot which was allocated for this expression, and
+   the remaining operands are the arguments to the initialization function.  */
+DEFTREECODE (AGGR_INIT_EXPR, "aggr_init_expr", tcc_vl_exp, 3)
+
+/* Initialization of an array from another array, expressed at a high level
+   so that it works with TARGET_EXPR.  Operand 0 is the target, operand 1
+   is the initializer.  */
+DEFTREECODE (VEC_INIT_EXPR, "vec_init_expr", tcc_expression, 2)
+
+/* A throw expression.  operand 0 is the expression, if there was one,
+   else it is NULL_TREE.  */
+DEFTREECODE (THROW_EXPR, "throw_expr", tcc_expression, 1)
+
+/* An empty class object.  The TREE_TYPE gives the class type.  We use
+   these to avoid actually creating instances of the empty classes.  */
+DEFTREECODE (EMPTY_CLASS_EXPR, "empty_class_expr", tcc_expression, 0)
+
+/* A reference to a member function or member functions from a base
+   class.  BASELINK_FUNCTIONS gives the FUNCTION_DECL,
+   TEMPLATE_DECL, OVERLOAD, or TEMPLATE_ID_EXPR corresponding to the
+   functions.  BASELINK_BINFO gives the base from which the functions
+   come, i.e., the base to which the `this' pointer must be converted
+   before the functions are called.  BASELINK_ACCESS_BINFO gives the
+   base used to name the functions.
+
+   A BASELINK is an expression; the TREE_TYPE of the BASELINK gives
+   the type of the expression.  This type is either a FUNCTION_TYPE,
+   METHOD_TYPE, or `unknown_type_node' indicating that the function is
+   overloaded.  */
+DEFTREECODE (BASELINK, "baselink", tcc_exceptional, 0)
+
+/* Template definition.  The following fields have the specified uses,
+   although there are other macros in cp-tree.h that should be used for
+   accessing this data.
+	DECL_ARGUMENTS		template parm vector
+	DECL_TEMPLATE_INFO      template text &c
+	DECL_VINDEX		list of instantiations already produced;
+				only done for functions so far
+   For class template:
+	DECL_INITIAL		associated templates (methods &c)
+	DECL_TEMPLATE_RESULT    null
+   For non-class templates:
+	TREE_TYPE		type of object to be constructed
+	DECL_TEMPLATE_RESULT    decl for object to be created
+				(e.g., FUNCTION_DECL with tmpl parms used)
+ */
+DEFTREECODE (TEMPLATE_DECL, "template_decl", tcc_declaration, 0)
+
+/* Index into a template parameter list.  The TEMPLATE_PARM_IDX gives
+   the index (from 0) of the parameter, while the TEMPLATE_PARM_LEVEL
+   gives the level (from 1) of the parameter.
+
+   Here's an example:
+
+   template <class T> // Index 0, Level 1.
+   struct S
+   {
+      template <class U, // Index 0, Level 2.
+		class V> // Index 1, Level 2.
+      void f();
+   };
+
+   The DESCENDANTS will be a chain of TEMPLATE_PARM_INDEXs descended
+   from this one.  The first descendant will have the same IDX, but
+   its LEVEL will be one less.  The TREE_CHAIN field is used to chain
+   together the descendants.  The TEMPLATE_PARM_DECL is the
+   declaration of this parameter, either a TYPE_DECL or CONST_DECL.
+   The TEMPLATE_PARM_ORIG_LEVEL is the LEVEL of the most distant
+   parent, i.e., the LEVEL that the parameter originally had when it
+   was declared.  For example, if we instantiate S<int>, we will have:
+
+   struct S<int>
+   {
+     template <class U, // Index 0, Level 1, Orig Level 2
+	       class V> // Index 1, Level 1, Orig Level 2
+     void f();
+   };
+
+   The LEVEL is the level of the parameter when we are worrying about
+   the types of things; the ORIG_LEVEL is the level when we are
+   worrying about instantiating things.  */
+DEFTREECODE (TEMPLATE_PARM_INDEX, "template_parm_index", tcc_exceptional, 0)
+
+/* Index into a template parameter list for template template parameters.
+   This parameter must be a type.  The TYPE_FIELDS value will be a
+   TEMPLATE_PARM_INDEX.
+
+   It is used without template arguments like TT in C<TT>,
+   TYPE_NAME is a TEMPLATE_DECL.  */
+DEFTREECODE (TEMPLATE_TEMPLATE_PARM, "template_template_parm", tcc_type, 0)
+
+/* The ordering of the following codes is optimized for the checking
+   macros in tree.h.  Changing the order will degrade the speed of the
+   compiler.  TEMPLATE_TYPE_PARM, TYPENAME_TYPE, TYPEOF_TYPE,
+   BOUND_TEMPLATE_TEMPLATE_PARM.  */
+
+/* Index into a template parameter list.  This parameter must be a type.
+   The type.values field will be a TEMPLATE_PARM_INDEX.  */
+DEFTREECODE (TEMPLATE_TYPE_PARM, "template_type_parm", tcc_type, 0)
+
+/* A type designated by `typename T::t'.  TYPE_CONTEXT is `T',
+   TYPE_NAME is an IDENTIFIER_NODE for `t'.  If the type was named via
+   template-id, TYPENAME_TYPE_FULLNAME will hold the TEMPLATE_ID_EXPR.
+   TREE_TYPE is always NULL.  */
+DEFTREECODE (TYPENAME_TYPE, "typename_type", tcc_type, 0)
+
+/* A type designated by `__typeof (expr)'.  TYPEOF_TYPE_EXPR is the
+   expression in question.  */
+DEFTREECODE (TYPEOF_TYPE, "typeof_type", tcc_type, 0)
+
+/* Like TEMPLATE_TEMPLATE_PARM it is used with bound template arguments
+   like TT<int>.
+   In this case, TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO contains the
+   template name and its bound arguments.  TYPE_NAME is a TYPE_DECL.  */
+DEFTREECODE (BOUND_TEMPLATE_TEMPLATE_PARM, "bound_template_template_parm",
+	     tcc_type, 0)
+
+/* For template template argument of the form `T::template C'.
+   TYPE_CONTEXT is `T', the template parameter dependent object.
+   TYPE_NAME is an IDENTIFIER_NODE for `C', the member class template.  */
+DEFTREECODE (UNBOUND_CLASS_TEMPLATE, "unbound_class_template", tcc_type, 0)
+
+/* A using declaration.  USING_DECL_SCOPE contains the specified
+   scope.  In a variadic using-declaration, this is a TYPE_PACK_EXPANSION.
+   In a member using decl, unless DECL_DEPENDENT_P is true,
+   USING_DECL_DECLS contains the _DECL or OVERLOAD so named.  This is
+   not an alias, but is later expanded into multiple aliases.  */
+DEFTREECODE (USING_DECL, "using_decl", tcc_declaration, 0)
+
+/* A using directive. The operand is USING_STMT_NAMESPACE.  */
+DEFTREECODE (USING_STMT, "using_stmt", tcc_statement, 1)
+
+/* An un-parsed default argument.  Holds a vector of input tokens and
+   a vector of places where the argument was instantiated before
+   parsing had occurred.  */
+DEFTREECODE (DEFAULT_ARG, "default_arg", tcc_exceptional, 0)
+
+/* An uninstantiated/unevaluated noexcept-specification.  For the
+   uninstantiated case, DEFERRED_NOEXCEPT_PATTERN is the pattern from the
+   template, and DEFERRED_NOEXCEPT_ARGS are the template arguments to
+   substitute into the pattern when needed.  For the unevaluated case,
+   those slots are NULL_TREE and we use get_defaulted_eh_spec to find
+   the exception-specification.  */
+DEFTREECODE (DEFERRED_NOEXCEPT, "deferred_noexcept", tcc_exceptional, 0)
+
+/* A template-id, like foo<int>.  The first operand is the template.
+   The second is NULL if there are no explicit arguments, or a
+   TREE_VEC of arguments.  The template will be a FUNCTION_DECL,
+   TEMPLATE_DECL, or an OVERLOAD.  If the template-id refers to a
+   member template, the template may be an IDENTIFIER_NODE.  */
+DEFTREECODE (TEMPLATE_ID_EXPR, "template_id_expr", tcc_expression, 2)
+
+/* One of a set of overloaded functions.  */
+DEFTREECODE (OVERLOAD, "overload", tcc_exceptional, 0)
+
+/* A pseudo-destructor, of the form "OBJECT.~DESTRUCTOR" or
+   "OBJECT.SCOPE::~DESTRUCTOR.  The first operand is the OBJECT.  The
+   second operand (if non-NULL) is the SCOPE.  The third operand is
+   the TYPE node corresponding to the DESTRUCTOR.  The type of the
+   first operand will always be a scalar type.
+
+   The type of a PSEUDO_DTOR_EXPR is always "void", even though it can
+   be used as if it were a zero-argument function.  We handle the
+   function-call case specially, and giving it "void" type prevents it
+   being used in expressions in ways that are not permitted.  */
+DEFTREECODE (PSEUDO_DTOR_EXPR, "pseudo_dtor_expr", tcc_expression, 3)
+
+/* A whole bunch of tree codes for the initial, superficial parsing of
+   templates.  */
+DEFTREECODE (MODOP_EXPR, "modop_expr", tcc_expression, 3)
+DEFTREECODE (CAST_EXPR, "cast_expr", tcc_unary, 1)
+DEFTREECODE (REINTERPRET_CAST_EXPR, "reinterpret_cast_expr", tcc_unary, 1)
+DEFTREECODE (CONST_CAST_EXPR, "const_cast_expr", tcc_unary, 1)
+DEFTREECODE (STATIC_CAST_EXPR, "static_cast_expr", tcc_unary, 1)
+DEFTREECODE (DYNAMIC_CAST_EXPR, "dynamic_cast_expr", tcc_unary, 1)
+DEFTREECODE (IMPLICIT_CONV_EXPR, "implicit_conv_expr", tcc_unary, 1)
+DEFTREECODE (DOTSTAR_EXPR, "dotstar_expr", tcc_expression, 2)
+DEFTREECODE (TYPEID_EXPR, "typeid_expr", tcc_expression, 1)
+DEFTREECODE (NOEXCEPT_EXPR, "noexcept_expr", tcc_unary, 1)
+
+/* A placeholder for an expression that is not type-dependent, but
+   does occur in a template.  When an expression that is not
+   type-dependent appears in a larger expression, we must compute the
+   type of that larger expression.  That computation would normally
+   modify the original expression, which would change the mangling of
+   that expression if it appeared in a template argument list.  In
+   that situation, we create a NON_DEPENDENT_EXPR to take the place of
+   the original expression.  The expression is the only operand -- it
+   is only needed for diagnostics.  */
+DEFTREECODE (NON_DEPENDENT_EXPR, "non_dependent_expr", tcc_expression, 1)
+
+/* CTOR_INITIALIZER is a placeholder in template code for a call to
+   setup_vtbl_pointer (and appears in all functions, not just ctors).  */
+DEFTREECODE (CTOR_INITIALIZER, "ctor_initializer", tcc_expression, 1)
+
+DEFTREECODE (TRY_BLOCK, "try_block", tcc_statement, 2)
+
+DEFTREECODE (EH_SPEC_BLOCK, "eh_spec_block", tcc_statement, 2)
+
+/* A HANDLER wraps a catch handler for the HANDLER_TYPE.  If this is
+   CATCH_ALL_TYPE, then the handler catches all types.  The declaration of
+   the catch variable is in HANDLER_PARMS, and the body block in
+   HANDLER_BODY.  */
+DEFTREECODE (HANDLER, "handler", tcc_statement, 2)
+
+/* A MUST_NOT_THROW_EXPR wraps an expression that may not
+   throw, and must call terminate if it does.  The second argument
+   is a condition, used in templates to express noexcept (condition).  */
+DEFTREECODE (MUST_NOT_THROW_EXPR, "must_not_throw_expr", tcc_expression, 2)
+
+/* A CLEANUP_STMT marks the point at which a declaration is fully
+   constructed.  The CLEANUP_EXPR is run on behalf of CLEANUP_DECL
+   when CLEANUP_BODY completes.  */
+DEFTREECODE (CLEANUP_STMT, "cleanup_stmt", tcc_statement, 3)
+
+/* Represents an 'if' statement. The operands are IF_COND,
+   THEN_CLAUSE, and ELSE_CLAUSE, and the current scope, respectively.  */
+/* ??? It is currently still necessary to distinguish between IF_STMT
+   and COND_EXPR for the benefit of templates.  */
+DEFTREECODE (IF_STMT, "if_stmt", tcc_statement, 4)
+
+/* Used to represent a `for' statement. The operands are
+   FOR_INIT_STMT, FOR_COND, FOR_EXPR, and FOR_BODY, respectively.  */
+DEFTREECODE (FOR_STMT, "for_stmt", tcc_statement, 5)
+
+/* Used to represent a range-based `for' statement. The operands are
+   RANGE_FOR_DECL, RANGE_FOR_EXPR, RANGE_FOR_BODY, RANGE_FOR_SCOPE,
+   RANGE_FOR_UNROLL, and RANGE_FOR_INIT_STMT, respectively.  Only used in
+   templates.  */
+DEFTREECODE (RANGE_FOR_STMT, "range_for_stmt", tcc_statement, 6)
+
+/* Used to represent a 'while' statement. The operands are WHILE_COND
+   and WHILE_BODY, respectively.  */
+DEFTREECODE (WHILE_STMT, "while_stmt", tcc_statement, 2)
+
+/* Used to represent a 'do' statement. The operands are DO_BODY and
+   DO_COND, respectively.  */
+DEFTREECODE (DO_STMT, "do_stmt", tcc_statement, 2)
+
+/* Used to represent a 'break' statement.  */
+DEFTREECODE (BREAK_STMT, "break_stmt", tcc_statement, 0)
+
+/* Used to represent a 'continue' statement.  */
+DEFTREECODE (CONTINUE_STMT, "continue_stmt", tcc_statement, 0)
+
+/* Used to represent a 'switch' statement. The operands are
+   SWITCH_STMT_COND, SWITCH_STMT_BODY, SWITCH_STMT_TYPE, and
+   SWITCH_STMT_SCOPE, respectively.  */
+DEFTREECODE (SWITCH_STMT, "switch_stmt", tcc_statement, 4)
+
+/* Used to represent an expression statement.  Use `EXPR_STMT_EXPR' to
+   obtain the expression.  */
+DEFTREECODE (EXPR_STMT, "expr_stmt", tcc_expression, 1)
+
+DEFTREECODE (TAG_DEFN, "tag_defn", tcc_expression, 0)
+
+/* Represents an 'offsetof' expression during template expansion.  */
+DEFTREECODE (OFFSETOF_EXPR, "offsetof_expr", tcc_expression, 2)
+
+/* Represents an '__builtin_addressof' expression during template
+   expansion.  This is similar to ADDR_EXPR, but it doesn't invoke
+   overloaded & operators.  */
+DEFTREECODE (ADDRESSOF_EXPR, "addressof_expr", tcc_expression, 1)
+
+/* Represents the -> operator during template expansion.  */
+DEFTREECODE (ARROW_EXPR, "arrow_expr", tcc_expression, 1)
+
+/* Represents an '__alignof__' expression during template
+   expansion.  */
+DEFTREECODE (ALIGNOF_EXPR, "alignof_expr", tcc_expression, 1)
+
+/* Represents an Objective-C++ '@encode' expression during template
+   expansion.  */
+DEFTREECODE (AT_ENCODE_EXPR, "at_encode_expr", tcc_expression, 1)
+
+/* A STMT_EXPR represents a statement-expression during template
+   expansion.  This is the GCC extension { ( ... ) }.  The
+   STMT_EXPR_STMT is the statement given by the expression.  */
+DEFTREECODE (STMT_EXPR, "stmt_expr", tcc_expression, 1)
+
+/* Unary plus. Operand 0 is the expression to which the unary plus
+   is applied.  */
+DEFTREECODE (UNARY_PLUS_EXPR, "unary_plus_expr", tcc_unary, 1)
+
+/** C++11 extensions. */
+
+/* A static assertion.  This is a C++11 extension.
+   STATIC_ASSERT_CONDITION contains the condition that is being
+   checked.  STATIC_ASSERT_MESSAGE contains the message (a string
+   literal) to be displayed if the condition fails to hold.  */
+DEFTREECODE (STATIC_ASSERT, "static_assert", tcc_exceptional, 0)
+
+/* Represents an argument pack of types (or templates). An argument
+   pack stores zero or more arguments that will be used to instantiate
+   a parameter pack. 
+
+   ARGUMENT_PACK_ARGS retrieves the arguments stored in the argument
+   pack.
+
+   Example:
+     template<typename... Values>
+     class tuple { ... };
+
+     tuple<int, float, double> t;
+
+   Values is a (template) parameter pack. When tuple<int, float,
+   double> is instantiated, the Values parameter pack is instantiated
+   with the argument pack <int, float, double>. ARGUMENT_PACK_ARGS will
+   be a TREE_VEC containing int, float, and double.  */
+DEFTREECODE (TYPE_ARGUMENT_PACK, "type_argument_pack", tcc_type, 0)
+
+/* Represents an argument pack of values, which can be used either for
+   non-type template arguments or function call arguments. 
+
+   NONTYPE_ARGUMENT_PACK plays precisely the same role as
+   TYPE_ARGUMENT_PACK, but will be used for packing non-type template
+   arguments (e.g., "int... Dimensions") or function arguments ("const
+   Args&... args"). */
+DEFTREECODE (NONTYPE_ARGUMENT_PACK, "nontype_argument_pack", tcc_expression, 1)
+
+/* Represents a type expression that will be expanded into a list of
+   types when instantiated with one or more argument packs.
+
+   PACK_EXPANSION_PATTERN retrieves the expansion pattern. This is
+   the type or expression that we will substitute into with each
+   argument in an argument pack.
+
+   SET_PACK_EXPANSION_PATTERN sets the expansion pattern.
+
+   PACK_EXPANSION_PARAMETER_PACKS contains a TREE_LIST of the parameter
+   packs that are used in this pack expansion.
+
+   Example:
+     template<typename... Values>
+     struct tied : tuple<Values&...> { 
+       // ...
+     };
+
+   The derivation from tuple contains a TYPE_PACK_EXPANSION for the
+   template arguments. Its PACK_EXPANSION_PATTERN is "Values&" and its
+   PACK_EXPANSION_PARAMETER_PACKS will contain "Values".  */
+DEFTREECODE (TYPE_PACK_EXPANSION, "type_pack_expansion", tcc_type, 0)
+
+/* Represents an expression that will be expanded into a list of
+   expressions when instantiated with one or more argument packs.
+
+   EXPR_PACK_EXPANSION plays precisely the same role as TYPE_PACK_EXPANSION,
+   but will be used for expressions.  */
+DEFTREECODE (EXPR_PACK_EXPANSION, "expr_pack_expansion", tcc_expression, 3)
+
+/* Selects the Ith parameter out of an argument pack. This node will
+   be used when instantiating pack expansions; see
+   tsubst_pack_expansion. 
+
+   ARGUMENT_PACK_SELECT_FROM_PACK contains the *_ARGUMENT_PACK node
+   from which the argument will be selected.
+
+   ARGUMENT_PACK_SELECT_INDEX contains the index into the argument
+   pack that will be returned by this ARGUMENT_PACK_SELECT node. The
+   index is a machine integer.  */
+DEFTREECODE (ARGUMENT_PACK_SELECT, "argument_pack_select", tcc_exceptional, 0)
+
+/* Fold expressions allow the expansion of a template argument pack
+   over a binary operator.
+
+   FOLD_EXPR_MOD_P is true when the fold operation is a compound assignment
+   operator.
+
+   FOLD_EXPR_OP is an INTEGER_CST storing the tree code for the folded
+   expression. Note that when FOLDEXPR_MOD_P is true, the operator is
+   a compound assignment operator for that kind of expression.
+
+   FOLD_EXPR_PACK is an expression containing an unexpanded parameter pack;
+   when expanded, each term becomes an argument of the folded expression.
+
+   In a BINARY_FOLD_EXPRESSION, FOLD_EXPR_INIT is the non-pack argument. */
+DEFTREECODE (UNARY_LEFT_FOLD_EXPR, "unary_left_fold_expr", tcc_expression, 2)
+DEFTREECODE (UNARY_RIGHT_FOLD_EXPR, "unary_right_fold_expr", tcc_expression, 2)
+DEFTREECODE (BINARY_LEFT_FOLD_EXPR, "binary_left_fold_expr", tcc_expression, 3)
+DEFTREECODE (BINARY_RIGHT_FOLD_EXPR, "binary_right_fold_expr", tcc_expression, 3)
+
+
+/** C++ extensions. */
+
+/* Represents a trait expression during template expansion.  */
+DEFTREECODE (TRAIT_EXPR, "trait_expr", tcc_exceptional, 0)
+
+/* A lambda expression.  This is a C++0x extension.
+   LAMBDA_EXPR_DEFAULT_CAPTURE_MODE is an enum for the default, which may be
+   none.
+   LAMBDA_EXPR_CAPTURE_LIST holds the capture-list, including `this'.
+   LAMBDA_EXPR_THIS_CAPTURE goes straight to the capture of `this', if it exists.
+   LAMBDA_EXPR_PENDING_PROXIES is a vector of capture proxies which need to
+   be pushed once scope returns to the lambda.
+   LAMBDA_EXPR_MUTABLE_P signals whether this lambda was declared mutable.  */
+DEFTREECODE (LAMBDA_EXPR, "lambda_expr", tcc_exceptional, 0)
+
+/* The declared type of an expression.  This is a C++0x extension.
+   DECLTYPE_TYPE_EXPR is the expression whose type we are computing.
+   DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P states whether the
+   expression was parsed as an id-expression or a member access
+   expression. When false, it was parsed as a full expression.
+   DECLTYPE_FOR_LAMBDA_CAPTURE is set if we want lambda capture semantics.
+   DECLTYPE_FOR_LAMBDA_RETURN is set if we want lambda return deduction.  */
+DEFTREECODE (DECLTYPE_TYPE, "decltype_type", tcc_type, 0)
+
+/* A type designated by `__underlying_type (type)'.
+   UNDERLYING_TYPE_TYPE is the type in question.  */
+DEFTREECODE (UNDERLYING_TYPE, "underlying_type", tcc_type, 0)
+
+/* A type designated by one of the bases type traits.
+   BASES_TYPE is the type in question.  */
+DEFTREECODE (BASES, "bases", tcc_type, 0)
+
+/* Used to represent the template information stored by template
+   specializations.
+   The accessors are:
+   TI_TEMPLATE the template declaration associated to the specialization
+   TI_ARGS the arguments of the template specialization
+   TI_TYPEDEFS_NEEDING_ACCESS_CHECKING the vector of typedefs used in
+   the pattern of the template for which access check is needed at template
+   instantiation time.  */
+DEFTREECODE (TEMPLATE_INFO, "template_info", tcc_exceptional, 0)
+
+/* OpenMP - #pragma omp depobj
+   Operand 0: OMP_DEPOBJ_DEPOBJ: Depobj expression
+   Operand 1: OMP_DEPOBJ_CLAUSES: List of clauses.  */
+DEFTREECODE (OMP_DEPOBJ, "omp_depobj", tcc_statement, 2)
+
+/* Extensions for Concepts. */
+
+/* Used to represent information associated with constrained declarations. */
+DEFTREECODE (CONSTRAINT_INFO, "constraint_info", tcc_exceptional, 0)
+
+/* A wildcard declaration is a placeholder for a template parameter
+   used to resolve constrained-type-names in concepts.  During
+   resolution, the matching argument is saved as the TREE_TYPE
+   of the wildcard.  */
+DEFTREECODE (WILDCARD_DECL, "wildcard_decl", tcc_declaration, 0)
+
+/* A requires-expr is a binary expression. The first operand is
+   its parameter list (possibly NULL). The second is a list of
+   requirements, which are denoted by the _REQ* tree codes
+   below. */
+DEFTREECODE (REQUIRES_EXPR,   "requires_expr", tcc_expression, 2)
+
+/* A requirement for an expression. */
+DEFTREECODE (SIMPLE_REQ, "simple_req", tcc_expression, 1)
+
+/* A requirement for a type. */
+DEFTREECODE (TYPE_REQ, "type_req", tcc_expression, 1)
+
+/* A requirement for an expression and its properties. The
+   first operand is the expression, and the 2nd is its type.
+   The accessor COMPOUND_REQ_NOEXCEPT determines whether
+   the noexcept keyword was present. */
+DEFTREECODE (COMPOUND_REQ, "compound_req", tcc_expression, 2)
+
+/* A requires clause within a requires expression. */
+DEFTREECODE (NESTED_REQ, "nested_req", tcc_expression, 1)
+
+/* Constraints are modeled as kinds of expressions.
+   The operands of a constraint can be either types or expressions.
+   Unlike expressions, constraints do not have a type. */
+
+/* A predicate constraint evaluates an expression E.
+
+   PRED_CONSTR_EXPR has the expression to be evaluated. */
+DEFTREECODE (PRED_CONSTR, "pred_constr", tcc_expression, 1)
+
+/* A check constraint represents the checking of a concept
+   C. It has two operands: the template defining the concept
+   and a sequence of template arguments.
+
+   CHECK_CONSTR_CONCEPT has the concept definition
+   CHECK_CONSTR_ARGUMENTS are the template arguments */
+DEFTREECODE (CHECK_CONSTR, "check_constr", tcc_expression, 2)
+
+/* An expression constraint determines the validity of a expression E.
+
+   EXPR_CONST_EXPR has the expression being validated. */
+DEFTREECODE (EXPR_CONSTR, "expr_constr", tcc_expression, 1)
+
+/* A type constraint determines the validity of a type T. Note that
+
+   TYPE_CONST_TYPE has the type being validated */
+DEFTREECODE (TYPE_CONSTR, "type_constr", tcc_expression, 1)
+
+/* An implicit conversion constraint determines if an expression
+   E is implicitly convertible to a type T. Note that T may
+   be dependent but does not contain any placeholders.
+
+   ICONV_CONSTR_EXPR has the expression E.
+   ICONV_CONSTR_TYPE has the type T.
+   */
+DEFTREECODE (ICONV_CONSTR, "iconv_constr", tcc_expression, 2)
+
+/* An argument deduction constraint determines if the type of an
+   expression E can be deduced from a type pattern T. Note that
+   T must contain at least one place holder.
+
+   DEDUCT_CONSTR_EXPR has the expression E
+   DEDUCT_CONSTR_PATTERN has the type pattern T.
+   DEDUCT_CONSTR_PLACEHOLDERS has the list of placeholder nodes in T. */
+DEFTREECODE (DEDUCT_CONSTR, "deduct_constr", tcc_expression, 3)
+
+/* An exception constraint determines if, for an expression E,
+   noexcept(E) is true.
+
+   EXCEPT_CONSTR_EXPR has the expression E. */
+DEFTREECODE (EXCEPT_CONSTR, "except_constr", tcc_expression, 1)
+
+/* A parameterized constraint declares constraint variables, which
+   are used in expression, type, and exception constraints.
+
+   PARM_CONSTR_PARMS has a TREE_LIST of parameter declarations.
+   PARM_CONSTR_OPERAND has the nested constraint. */
+DEFTREECODE (PARM_CONSTR, "parm_constr", tcc_expression, 2)
+
+/* The conjunction and disjunction of two constraints, respectively.
+   Operands are accessed using TREE_OPERAND. */
+DEFTREECODE (CONJ_CONSTR, "conj_constr", tcc_expression, 2)
+DEFTREECODE (DISJ_CONSTR, "disj_constr", tcc_expression, 2)
+
+
+/*
+Local variables:
+mode:c
+End:
+*/
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/cppbuiltin.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cppbuiltin.h
new file mode 100644
index 0000000..c5a2135
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cppbuiltin.h
@@ -0,0 +1,33 @@
+/* Define builtin-in macros for all front ends that perform preprocessing
+   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_CPPBUILTIN_H
+#define GCC_CPPBUILTIN_H
+
+/* Parse a BASEVER version string of the format "major.minor.patchlevel"
+   or "major.minor" to extract its components.  */
+extern void parse_basever (int *, int *, int *);
+
+/* Define macros builtins common to all language performing CPP
+   preprocessing.  */
+extern void define_language_independent_builtin_macros (cpp_reader *);
+
+
+#endif /* ! GCC_CPPBUILTIN_H */
+
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/cppdefault.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cppdefault.h
new file mode 100644
index 0000000..e2d96f1
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cppdefault.h
@@ -0,0 +1,71 @@
+/* CPP Library.
+   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Contributed by Per Bothner, 1994-95.
+   Based on CCCP program by Paul Rubin, June 1986
+   Adapted to ANSI C, Richard Stallman, Jan 1987
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_CPPDEFAULT_H
+#define GCC_CPPDEFAULT_H
+
+/* This is the default list of directories to search for include files.
+   It may be overridden by the various -I and -ixxx options.
+
+   #include "file" looks in the same directory as the current file,
+   then this list.
+   #include <file> just looks in this list.
+
+   All these directories are treated as `system' include directories
+   (they are not subject to pedantic warnings in some cases).  */
+
+struct default_include
+{
+  const char *const fname;	/* The name of the directory.  */
+  const char *const component;	/* The component containing the directory
+				   (see update_path in prefix.c) */
+  const char cplusplus;		/* Only look here if we're compiling C++.  */
+  const char cxx_aware;		/* Includes in this directory don't need to
+				   be wrapped in extern "C" when compiling
+				   C++.  */
+  const char add_sysroot;	/* FNAME should be prefixed by
+				   cpp_SYSROOT.  */
+  const char multilib;		/* FNAME should have appended
+				   - the multilib path specified with -imultilib
+				     when set to 1,
+				   - the multiarch path specified with
+				     -imultiarch, when set to 2.  */
+};
+
+extern const struct default_include cpp_include_defaults[];
+extern const char cpp_GCC_INCLUDE_DIR[];
+extern const size_t cpp_GCC_INCLUDE_DIR_len;
+
+/* The configure-time prefix, i.e., the value supplied as the argument
+   to --prefix=.  */
+extern const char cpp_PREFIX[];
+/* The length of the configure-time prefix.  */
+extern const size_t cpp_PREFIX_len;
+/* The configure-time execution prefix.  This is typically the lib/gcc
+   subdirectory of cpp_PREFIX.  */
+extern const char cpp_EXEC_PREFIX[];
+/* The run-time execution prefix.  This is typically the lib/gcc
+   subdirectory of the actual installation.  */
+extern const char *gcc_exec_prefix;
+
+/* Return true if the toolchain is relocated.  */
+bool cpp_relocated (void);
+
+#endif /* ! GCC_CPPDEFAULT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/cpplib.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cpplib.h
new file mode 100644
index 0000000..87cc6a3
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cpplib.h
@@ -0,0 +1,1305 @@
+/* Definitions for CPP library.
+   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   Written by Per Bothner, 1994-95.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them.   Help stamp out software-hoarding!  */
+#ifndef LIBCPP_CPPLIB_H
+#define LIBCPP_CPPLIB_H
+
+#include <sys/types.h>
+#include "symtab.h"
+#include "line-map.h"
+
+typedef struct cpp_reader cpp_reader;
+typedef struct cpp_buffer cpp_buffer;
+typedef struct cpp_options cpp_options;
+typedef struct cpp_token cpp_token;
+typedef struct cpp_string cpp_string;
+typedef struct cpp_hashnode cpp_hashnode;
+typedef struct cpp_macro cpp_macro;
+typedef struct cpp_callbacks cpp_callbacks;
+typedef struct cpp_dir cpp_dir;
+
+struct _cpp_file;
+
+/* The first three groups, apart from '=', can appear in preprocessor
+   expressions (+= and -= are used to indicate unary + and - resp.).
+   This allows a lookup table to be implemented in _cpp_parse_expr.
+
+   The first group, to CPP_LAST_EQ, can be immediately followed by an
+   '='.  The lexer needs operators ending in '=', like ">>=", to be in
+   the same order as their counterparts without the '=', like ">>".
+
+   See the cpp_operator table optab in expr.c if you change the order or
+   add or remove anything in the first group.  */
+
+#define TTYPE_TABLE							\
+  OP(EQ,		"=")						\
+  OP(NOT,		"!")						\
+  OP(GREATER,		">")	/* compare */				\
+  OP(LESS,		"<")						\
+  OP(PLUS,		"+")	/* math */				\
+  OP(MINUS,		"-")						\
+  OP(MULT,		"*")						\
+  OP(DIV,		"/")						\
+  OP(MOD,		"%")						\
+  OP(AND,		"&")	/* bit ops */				\
+  OP(OR,		"|")						\
+  OP(XOR,		"^")						\
+  OP(RSHIFT,		">>")						\
+  OP(LSHIFT,		"<<")						\
+									\
+  OP(COMPL,		"~")						\
+  OP(AND_AND,		"&&")	/* logical */				\
+  OP(OR_OR,		"||")						\
+  OP(QUERY,		"?")						\
+  OP(COLON,		":")						\
+  OP(COMMA,		",")	/* grouping */				\
+  OP(OPEN_PAREN,	"(")						\
+  OP(CLOSE_PAREN,	")")						\
+  TK(EOF,		NONE)						\
+  OP(EQ_EQ,		"==")	/* compare */				\
+  OP(NOT_EQ,		"!=")						\
+  OP(GREATER_EQ,	">=")						\
+  OP(LESS_EQ,		"<=")						\
+									\
+  /* These two are unary + / - in preprocessor expressions.  */		\
+  OP(PLUS_EQ,		"+=")	/* math */				\
+  OP(MINUS_EQ,		"-=")						\
+									\
+  OP(MULT_EQ,		"*=")						\
+  OP(DIV_EQ,		"/=")						\
+  OP(MOD_EQ,		"%=")						\
+  OP(AND_EQ,		"&=")	/* bit ops */				\
+  OP(OR_EQ,		"|=")						\
+  OP(XOR_EQ,		"^=")						\
+  OP(RSHIFT_EQ,		">>=")						\
+  OP(LSHIFT_EQ,		"<<=")						\
+  /* Digraphs together, beginning with CPP_FIRST_DIGRAPH.  */		\
+  OP(HASH,		"#")	/* digraphs */				\
+  OP(PASTE,		"##")						\
+  OP(OPEN_SQUARE,	"[")						\
+  OP(CLOSE_SQUARE,	"]")						\
+  OP(OPEN_BRACE,	"{")						\
+  OP(CLOSE_BRACE,	"}")						\
+  /* The remainder of the punctuation.	Order is not significant.  */	\
+  OP(SEMICOLON,		";")	/* structure */				\
+  OP(ELLIPSIS,		"...")						\
+  OP(PLUS_PLUS,		"++")	/* increment */				\
+  OP(MINUS_MINUS,	"--")						\
+  OP(DEREF,		"->")	/* accessors */				\
+  OP(DOT,		".")						\
+  OP(SCOPE,		"::")						\
+  OP(DEREF_STAR,	"->*")						\
+  OP(DOT_STAR,		".*")						\
+  OP(ATSIGN,		"@")  /* used in Objective-C */			\
+									\
+  TK(NAME,		IDENT)	 /* word */				\
+  TK(AT_NAME,		IDENT)	 /* @word - Objective-C */		\
+  TK(NUMBER,		LITERAL) /* 34_be+ta  */			\
+									\
+  TK(CHAR,		LITERAL) /* 'char' */				\
+  TK(WCHAR,		LITERAL) /* L'char' */				\
+  TK(CHAR16,		LITERAL) /* u'char' */				\
+  TK(CHAR32,		LITERAL) /* U'char' */				\
+  TK(UTF8CHAR,		LITERAL) /* u8'char' */				\
+  TK(OTHER,		LITERAL) /* stray punctuation */		\
+									\
+  TK(STRING,		LITERAL) /* "string" */				\
+  TK(WSTRING,		LITERAL) /* L"string" */			\
+  TK(STRING16,		LITERAL) /* u"string" */			\
+  TK(STRING32,		LITERAL) /* U"string" */			\
+  TK(UTF8STRING,	LITERAL) /* u8"string" */			\
+  TK(OBJC_STRING,	LITERAL) /* @"string" - Objective-C */		\
+  TK(HEADER_NAME,	LITERAL) /* <stdio.h> in #include */		\
+									\
+  TK(CHAR_USERDEF,	LITERAL) /* 'char'_suffix - C++-0x */		\
+  TK(WCHAR_USERDEF,	LITERAL) /* L'char'_suffix - C++-0x */		\
+  TK(CHAR16_USERDEF,	LITERAL) /* u'char'_suffix - C++-0x */		\
+  TK(CHAR32_USERDEF,	LITERAL) /* U'char'_suffix - C++-0x */		\
+  TK(UTF8CHAR_USERDEF,	LITERAL) /* u8'char'_suffix - C++-0x */		\
+  TK(STRING_USERDEF,	LITERAL) /* "string"_suffix - C++-0x */		\
+  TK(WSTRING_USERDEF,	LITERAL) /* L"string"_suffix - C++-0x */	\
+  TK(STRING16_USERDEF,	LITERAL) /* u"string"_suffix - C++-0x */	\
+  TK(STRING32_USERDEF,	LITERAL) /* U"string"_suffix - C++-0x */	\
+  TK(UTF8STRING_USERDEF,LITERAL) /* u8"string"_suffix - C++-0x */	\
+									\
+  TK(COMMENT,		LITERAL) /* Only if output comments.  */	\
+				 /* SPELL_LITERAL happens to DTRT.  */	\
+  TK(MACRO_ARG,		NONE)	 /* Macro argument.  */			\
+  TK(PRAGMA,		NONE)	 /* Only for deferred pragmas.  */	\
+  TK(PRAGMA_EOL,	NONE)	 /* End-of-line for deferred pragmas.  */ \
+  TK(PADDING,		NONE)	 /* Whitespace for -E.	*/
+
+#define OP(e, s) CPP_ ## e,
+#define TK(e, s) CPP_ ## e,
+enum cpp_ttype
+{
+  TTYPE_TABLE
+  N_TTYPES,
+
+  /* A token type for keywords, as opposed to ordinary identifiers.  */
+  CPP_KEYWORD,
+
+  /* Positions in the table.  */
+  CPP_LAST_EQ        = CPP_LSHIFT,
+  CPP_FIRST_DIGRAPH  = CPP_HASH,
+  CPP_LAST_PUNCTUATOR= CPP_ATSIGN,
+  CPP_LAST_CPP_OP    = CPP_LESS_EQ
+};
+#undef OP
+#undef TK
+
+/* C language kind, used when calling cpp_create_reader.  */
+enum c_lang {CLK_GNUC89 = 0, CLK_GNUC99, CLK_GNUC11, CLK_GNUC17, CLK_GNUC2X,
+	     CLK_STDC89, CLK_STDC94, CLK_STDC99, CLK_STDC11, CLK_STDC17,
+	     CLK_STDC2X,
+	     CLK_GNUCXX, CLK_CXX98, CLK_GNUCXX11, CLK_CXX11,
+	     CLK_GNUCXX14, CLK_CXX14, CLK_GNUCXX17, CLK_CXX17,
+	     CLK_GNUCXX2A, CLK_CXX2A, CLK_ASM};
+
+/* Payload of a NUMBER, STRING, CHAR or COMMENT token.  */
+struct GTY(()) cpp_string {
+  unsigned int len;
+  const unsigned char *text;
+};
+
+/* Flags for the cpp_token structure.  */
+#define PREV_WHITE	(1 << 0) /* If whitespace before this token.  */
+#define DIGRAPH		(1 << 1) /* If it was a digraph.  */
+#define STRINGIFY_ARG	(1 << 2) /* If macro argument to be stringified.  */
+#define PASTE_LEFT	(1 << 3) /* If on LHS of a ## operator.  */
+#define NAMED_OP	(1 << 4) /* C++ named operators.  */
+#define PREV_FALLTHROUGH (1 << 5) /* On a token preceeded by FALLTHROUGH
+				     comment.  */
+#define BOL		(1 << 6) /* Token at beginning of line.  */
+#define PURE_ZERO	(1 << 7) /* Single 0 digit, used by the C++ frontend,
+				    set in c-lex.c.  */
+#define SP_DIGRAPH	(1 << 8) /* # or ## token was a digraph.  */
+#define SP_PREV_WHITE	(1 << 9) /* If whitespace before a ##
+				    operator, or before this token
+				    after a # operator.  */
+#define NO_EXPAND	(1 << 10) /* Do not macro-expand this token.  */
+
+/* Specify which field, if any, of the cpp_token union is used.  */
+
+enum cpp_token_fld_kind {
+  CPP_TOKEN_FLD_NODE,
+  CPP_TOKEN_FLD_SOURCE,
+  CPP_TOKEN_FLD_STR,
+  CPP_TOKEN_FLD_ARG_NO,
+  CPP_TOKEN_FLD_TOKEN_NO,
+  CPP_TOKEN_FLD_PRAGMA,
+  CPP_TOKEN_FLD_NONE
+};
+
+/* A macro argument in the cpp_token union.  */
+struct GTY(()) cpp_macro_arg {
+  /* Argument number.  */
+  unsigned int arg_no;
+  /* The original spelling of the macro argument token.  */
+  cpp_hashnode *
+    GTY ((nested_ptr (union tree_node,
+		"%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
+			"%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL")))
+       spelling;
+};
+
+/* An identifier in the cpp_token union.  */
+struct GTY(()) cpp_identifier {
+  /* The canonical (UTF-8) spelling of the identifier.  */
+  cpp_hashnode *
+    GTY ((nested_ptr (union tree_node,
+		"%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
+			"%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL")))
+       node;
+  /* The original spelling of the identifier.  */
+  cpp_hashnode *
+    GTY ((nested_ptr (union tree_node,
+		"%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
+			"%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL")))
+       spelling;
+};
+
+/* A preprocessing token.  This has been carefully packed and should
+   occupy 16 bytes on 32-bit hosts and 24 bytes on 64-bit hosts.  */
+struct GTY(()) cpp_token {
+
+  /* Location of first char of token, together with range of full token.  */
+  location_t src_loc;
+
+  ENUM_BITFIELD(cpp_ttype) type : CHAR_BIT;  /* token type */
+  unsigned short flags;		/* flags - see above */
+
+  union cpp_token_u
+  {
+    /* An identifier.  */
+    struct cpp_identifier GTY ((tag ("CPP_TOKEN_FLD_NODE"))) node;
+	 
+    /* Inherit padding from this token.  */
+    cpp_token * GTY ((tag ("CPP_TOKEN_FLD_SOURCE"))) source;
+
+    /* A string, or number.  */
+    struct cpp_string GTY ((tag ("CPP_TOKEN_FLD_STR"))) str;
+
+    /* Argument no. (and original spelling) for a CPP_MACRO_ARG.  */
+    struct cpp_macro_arg GTY ((tag ("CPP_TOKEN_FLD_ARG_NO"))) macro_arg;
+
+    /* Original token no. for a CPP_PASTE (from a sequence of
+       consecutive paste tokens in a macro expansion).  */
+    unsigned int GTY ((tag ("CPP_TOKEN_FLD_TOKEN_NO"))) token_no;
+
+    /* Caller-supplied identifier for a CPP_PRAGMA.  */
+    unsigned int GTY ((tag ("CPP_TOKEN_FLD_PRAGMA"))) pragma;
+  } GTY ((desc ("cpp_token_val_index (&%1)"))) val;
+};
+
+/* Say which field is in use.  */
+extern enum cpp_token_fld_kind cpp_token_val_index (const cpp_token *tok);
+
+/* A type wide enough to hold any multibyte source character.
+   cpplib's character constant interpreter requires an unsigned type.
+   Also, a typedef for the signed equivalent.
+   The width of this type is capped at 32 bits; there do exist targets
+   where wchar_t is 64 bits, but only in a non-default mode, and there
+   would be no meaningful interpretation for a wchar_t value greater
+   than 2^32 anyway -- the widest wide-character encoding around is
+   ISO 10646, which stops at 2^31.  */
+#if CHAR_BIT * SIZEOF_INT >= 32
+# define CPPCHAR_SIGNED_T int
+#elif CHAR_BIT * SIZEOF_LONG >= 32
+# define CPPCHAR_SIGNED_T long
+#else
+# error "Cannot find a least-32-bit signed integer type"
+#endif
+typedef unsigned CPPCHAR_SIGNED_T cppchar_t;
+typedef CPPCHAR_SIGNED_T cppchar_signed_t;
+
+/* Style of header dependencies to generate.  */
+enum cpp_deps_style { DEPS_NONE = 0, DEPS_USER, DEPS_SYSTEM };
+
+/* The possible normalization levels, from most restrictive to least.  */
+enum cpp_normalize_level {
+  /* In NFKC.  */
+  normalized_KC = 0,
+  /* In NFC.  */
+  normalized_C,
+  /* In NFC, except for subsequences where being in NFC would make
+     the identifier invalid.  */
+  normalized_identifier_C,
+  /* Not normalized at all.  */
+  normalized_none
+};
+
+/* This structure is nested inside struct cpp_reader, and
+   carries all the options visible to the command line.  */
+struct cpp_options
+{
+  /* Characters between tab stops.  */
+  unsigned int tabstop;
+
+  /* The language we're preprocessing.  */
+  enum c_lang lang;
+
+  /* Nonzero means use extra default include directories for C++.  */
+  unsigned char cplusplus;
+
+  /* Nonzero means handle cplusplus style comments.  */
+  unsigned char cplusplus_comments;
+
+  /* Nonzero means define __OBJC__, treat @ as a special token, use
+     the OBJC[PLUS]_INCLUDE_PATH environment variable, and allow
+     "#import".  */
+  unsigned char objc;
+
+  /* Nonzero means don't copy comments into the output file.  */
+  unsigned char discard_comments;
+
+  /* Nonzero means don't copy comments into the output file during
+     macro expansion.  */
+  unsigned char discard_comments_in_macro_exp;
+
+  /* Nonzero means process the ISO trigraph sequences.  */
+  unsigned char trigraphs;
+
+  /* Nonzero means process the ISO digraph sequences.  */
+  unsigned char digraphs;
+
+  /* Nonzero means to allow hexadecimal floats and LL suffixes.  */
+  unsigned char extended_numbers;
+
+  /* Nonzero means process u/U prefix literals (UTF-16/32).  */
+  unsigned char uliterals;
+
+  /* Nonzero means process u8 prefixed character literals (UTF-8).  */
+  unsigned char utf8_char_literals;
+
+  /* Nonzero means process r/R raw strings.  If this is set, uliterals
+     must be set as well.  */
+  unsigned char rliterals;
+
+  /* Nonzero means print names of header files (-H).  */
+  unsigned char print_include_names;
+
+  /* Nonzero means complain about deprecated features.  */
+  unsigned char cpp_warn_deprecated;
+
+  /* Nonzero means warn if slash-star appears in a comment.  */
+  unsigned char warn_comments;
+
+  /* Nonzero means to warn about __DATA__, __TIME__ and __TIMESTAMP__ usage.   */
+  unsigned char warn_date_time;
+
+  /* Nonzero means warn if a user-supplied include directory does not
+     exist.  */
+  unsigned char warn_missing_include_dirs;
+
+  /* Nonzero means warn if there are any trigraphs.  */
+  unsigned char warn_trigraphs;
+
+  /* Nonzero means warn about multicharacter charconsts.  */
+  unsigned char warn_multichar;
+
+  /* Nonzero means warn about various incompatibilities with
+     traditional C.  */
+  unsigned char cpp_warn_traditional;
+
+  /* Nonzero means warn about long long numeric constants.  */
+  unsigned char cpp_warn_long_long;
+
+  /* Nonzero means warn about text after an #endif (or #else).  */
+  unsigned char warn_endif_labels;
+
+  /* Nonzero means warn about implicit sign changes owing to integer
+     promotions.  */
+  unsigned char warn_num_sign_change;
+
+  /* Zero means don't warn about __VA_ARGS__ usage in c89 pedantic mode.
+     Presumably the usage is protected by the appropriate #ifdef.  */
+  unsigned char warn_variadic_macros;
+
+  /* Nonzero means warn about builtin macros that are redefined or
+     explicitly undefined.  */
+  unsigned char warn_builtin_macro_redefined;
+
+  /* Different -Wimplicit-fallthrough= levels.  */
+  unsigned char cpp_warn_implicit_fallthrough;
+
+  /* Nonzero means we should look for header.gcc files that remap file
+     names.  */
+  unsigned char remap;
+
+  /* Zero means dollar signs are punctuation.  */
+  unsigned char dollars_in_ident;
+
+  /* Nonzero means UCNs are accepted in identifiers.  */
+  unsigned char extended_identifiers;
+
+  /* True if we should warn about dollars in identifiers or numbers
+     for this translation unit.  */
+  unsigned char warn_dollars;
+
+  /* Nonzero means warn if undefined identifiers are evaluated in an #if.  */
+  unsigned char warn_undef;
+
+  /* Nonzero means warn if "defined" is encountered in a place other than
+     an #if.  */
+  unsigned char warn_expansion_to_defined;
+
+  /* Nonzero means warn of unused macros from the main file.  */
+  unsigned char warn_unused_macros;
+
+  /* Nonzero for the 1999 C Standard, including corrigenda and amendments.  */
+  unsigned char c99;
+
+  /* Nonzero if we are conforming to a specific C or C++ standard.  */
+  unsigned char std;
+
+  /* Nonzero means give all the error messages the ANSI standard requires.  */
+  unsigned char cpp_pedantic;
+
+  /* Nonzero means we're looking at already preprocessed code, so don't
+     bother trying to do macro expansion and whatnot.  */
+  unsigned char preprocessed;
+  
+  /* Nonzero means we are going to emit debugging logs during
+     preprocessing.  */
+  unsigned char debug;
+
+  /* Nonzero means we are tracking locations of tokens involved in
+     macro expansion. 1 Means we track the location in degraded mode
+     where we do not track locations of tokens resulting from the
+     expansion of arguments of function-like macro.  2 Means we do
+     track all macro expansions. This last option is the one that
+     consumes the highest amount of memory.  */
+  unsigned char track_macro_expansion;
+
+  /* Nonzero means handle C++ alternate operator names.  */
+  unsigned char operator_names;
+
+  /* Nonzero means warn about use of C++ alternate operator names.  */
+  unsigned char warn_cxx_operator_names;
+
+  /* True for traditional preprocessing.  */
+  unsigned char traditional;
+
+  /* Nonzero for C++ 2011 Standard user-defined literals.  */
+  unsigned char user_literals;
+
+  /* Nonzero means warn when a string or character literal is followed by a
+     ud-suffix which does not beging with an underscore.  */
+  unsigned char warn_literal_suffix;
+
+  /* Nonzero means interpret imaginary, fixed-point, or other gnu extension
+     literal number suffixes as user-defined literal number suffixes.  */
+  unsigned char ext_numeric_literals;
+
+  /* Nonzero means extended identifiers allow the characters specified
+     in C11 and C++11.  */
+  unsigned char c11_identifiers;
+
+  /* Nonzero for C++ 2014 Standard binary constants.  */
+  unsigned char binary_constants;
+
+  /* Nonzero for C++ 2014 Standard digit separators.  */
+  unsigned char digit_separators;
+
+  /* Nonzero for C++2a __VA_OPT__ feature.  */
+  unsigned char va_opt;
+
+  /* Holds the name of the target (execution) character set.  */
+  const char *narrow_charset;
+
+  /* Holds the name of the target wide character set.  */
+  const char *wide_charset;
+
+  /* Holds the name of the input character set.  */
+  const char *input_charset;
+
+  /* The minimum permitted level of normalization before a warning
+     is generated.  See enum cpp_normalize_level.  */
+  int warn_normalize;
+
+  /* True to warn about precompiled header files we couldn't use.  */
+  bool warn_invalid_pch;
+
+  /* True if dependencies should be restored from a precompiled header.  */
+  bool restore_pch_deps;
+
+  /* True if warn about differences between C90 and C99.  */
+  signed char cpp_warn_c90_c99_compat;
+
+  /* True if warn about differences between C++98 and C++11.  */
+  bool cpp_warn_cxx11_compat;
+
+  /* Dependency generation.  */
+  struct
+  {
+    /* Style of header dependencies to generate.  */
+    enum cpp_deps_style style;
+
+    /* Assume missing files are generated files.  */
+    bool missing_files;
+
+    /* Generate phony targets for each dependency apart from the first
+       one.  */
+    bool phony_targets;
+
+    /* If true, no dependency is generated on the main file.  */
+    bool ignore_main_file;
+
+    /* If true, intend to use the preprocessor output (e.g., for compilation)
+       in addition to the dependency info.  */
+    bool need_preprocessor_output;
+  } deps;
+
+  /* Target-specific features set by the front end or client.  */
+
+  /* Precision for target CPP arithmetic, target characters, target
+     ints and target wide characters, respectively.  */
+  size_t precision, char_precision, int_precision, wchar_precision;
+
+  /* True means chars (wide chars) are unsigned.  */
+  bool unsigned_char, unsigned_wchar;
+
+  /* True if the most significant byte in a word has the lowest
+     address in memory.  */
+  bool bytes_big_endian;
+
+  /* Nonzero means __STDC__ should have the value 0 in system headers.  */
+  unsigned char stdc_0_in_system_headers;
+
+  /* True disables tokenization outside of preprocessing directives. */
+  bool directives_only;
+
+  /* True enables canonicalization of system header file paths. */
+  bool canonical_system_headers;
+};
+
+/* Diagnostic levels.  To get a diagnostic without associating a
+   position in the translation unit with it, use cpp_error_with_line
+   with a line number of zero.  */
+
+enum cpp_diagnostic_level {
+  /* Warning, an error with -Werror.  */
+  CPP_DL_WARNING = 0,
+  /* Same as CPP_DL_WARNING, except it is not suppressed in system headers.  */
+  CPP_DL_WARNING_SYSHDR,
+  /* Warning, an error with -pedantic-errors or -Werror.  */
+  CPP_DL_PEDWARN,
+  /* An error.  */
+  CPP_DL_ERROR,
+  /* An internal consistency check failed.  Prints "internal error: ",
+     otherwise the same as CPP_DL_ERROR.  */
+  CPP_DL_ICE,
+  /* An informative note following a warning.  */
+  CPP_DL_NOTE,
+  /* A fatal error.  */
+  CPP_DL_FATAL
+};
+
+/* Warning reason codes. Use a reason code of CPP_W_NONE for unclassified
+   warnings and diagnostics that are not warnings.  */
+
+enum cpp_warning_reason {
+  CPP_W_NONE = 0,
+  CPP_W_DEPRECATED,
+  CPP_W_COMMENTS,
+  CPP_W_MISSING_INCLUDE_DIRS,
+  CPP_W_TRIGRAPHS,
+  CPP_W_MULTICHAR,
+  CPP_W_TRADITIONAL,
+  CPP_W_LONG_LONG,
+  CPP_W_ENDIF_LABELS,
+  CPP_W_NUM_SIGN_CHANGE,
+  CPP_W_VARIADIC_MACROS,
+  CPP_W_BUILTIN_MACRO_REDEFINED,
+  CPP_W_DOLLARS,
+  CPP_W_UNDEF,
+  CPP_W_UNUSED_MACROS,
+  CPP_W_CXX_OPERATOR_NAMES,
+  CPP_W_NORMALIZE,
+  CPP_W_INVALID_PCH,
+  CPP_W_WARNING_DIRECTIVE,
+  CPP_W_LITERAL_SUFFIX,
+  CPP_W_DATE_TIME,
+  CPP_W_PEDANTIC,
+  CPP_W_C90_C99_COMPAT,
+  CPP_W_CXX11_COMPAT,
+  CPP_W_EXPANSION_TO_DEFINED
+};
+
+/* Callback for header lookup for HEADER, which is the name of a
+   source file.  It is used as a method of last resort to find headers
+   that are not otherwise found during the normal include processing.
+   The return value is the malloced name of a header to try and open,
+   if any, or NULL otherwise.  This callback is called only if the
+   header is otherwise unfound.  */
+typedef const char *(*missing_header_cb)(cpp_reader *, const char *header, cpp_dir **);
+
+/* Call backs to cpplib client.  */
+struct cpp_callbacks
+{
+  /* Called when a new line of preprocessed output is started.  */
+  void (*line_change) (cpp_reader *, const cpp_token *, int);
+
+  /* Called when switching to/from a new file.
+     The line_map is for the new file.  It is NULL if there is no new file.
+     (In C this happens when done with <built-in>+<command line> and also
+     when done with a main file.)  This can be used for resource cleanup.  */
+  void (*file_change) (cpp_reader *, const line_map_ordinary *);
+
+  void (*dir_change) (cpp_reader *, const char *);
+  void (*include) (cpp_reader *, location_t, const unsigned char *,
+		   const char *, int, const cpp_token **);
+  void (*define) (cpp_reader *, location_t, cpp_hashnode *);
+  void (*undef) (cpp_reader *, location_t, cpp_hashnode *);
+  void (*ident) (cpp_reader *, location_t, const cpp_string *);
+  void (*def_pragma) (cpp_reader *, location_t);
+  int (*valid_pch) (cpp_reader *, const char *, int);
+  void (*read_pch) (cpp_reader *, const char *, int, const char *);
+  missing_header_cb missing_header;
+
+  /* Context-sensitive macro support.  Returns macro (if any) that should
+     be expanded.  */
+  cpp_hashnode * (*macro_to_expand) (cpp_reader *, const cpp_token *);
+
+  /* Called to emit a diagnostic.  This callback receives the
+     translated message.  */
+  bool (*diagnostic) (cpp_reader *,
+		      enum cpp_diagnostic_level,
+		      enum cpp_warning_reason,
+		      rich_location *,
+		      const char *, va_list *)
+       ATTRIBUTE_FPTR_PRINTF(5,0);
+
+  /* Callbacks for when a macro is expanded, or tested (whether
+     defined or not at the time) in #ifdef, #ifndef or "defined".  */
+  void (*used_define) (cpp_reader *, location_t, cpp_hashnode *);
+  void (*used_undef) (cpp_reader *, location_t, cpp_hashnode *);
+  /* Called before #define and #undef or other macro definition
+     changes are processed.  */
+  void (*before_define) (cpp_reader *);
+  /* Called whenever a macro is expanded or tested.
+     Second argument is the location of the start of the current expansion.  */
+  void (*used) (cpp_reader *, location_t, cpp_hashnode *);
+
+  /* Callback to identify whether an attribute exists.  */
+  int (*has_attribute) (cpp_reader *);
+
+  /* Callback that can change a user lazy into normal macro.  */
+  void (*user_lazy_macro) (cpp_reader *, cpp_macro *, unsigned);
+
+  /* Callback to parse SOURCE_DATE_EPOCH from environment.  */
+  time_t (*get_source_date_epoch) (cpp_reader *);
+
+  /* Callback for providing suggestions for misspelled directives.  */
+  const char *(*get_suggestion) (cpp_reader *, const char *, const char *const *);
+
+  /* Callback for when a comment is encountered, giving the location
+     of the opening slash, a pointer to the content (which is not
+     necessarily 0-terminated), and the length of the content.
+     The content contains the opening slash-star (or slash-slash),
+     and for C-style comments contains the closing star-slash.  For
+     C++-style comments it does not include the terminating newline.  */
+  void (*comment) (cpp_reader *, location_t, const unsigned char *,
+		   size_t);
+
+  /* Callback for filename remapping in __FILE__ and __BASE_FILE__ macro
+     expansions.  */
+  const char *(*remap_filename) (const char*);
+};
+
+#ifdef VMS
+#define INO_T_CPP ino_t ino[3]
+#else
+#define INO_T_CPP ino_t ino
+#endif
+
+/* Chain of directories to look for include files in.  */
+struct cpp_dir
+{
+  /* NULL-terminated singly-linked list.  */
+  struct cpp_dir *next;
+
+  /* NAME of the directory, NUL-terminated.  */
+  char *name;
+  unsigned int len;
+
+  /* One if a system header, two if a system header that has extern
+     "C" guards for C++.  */
+  unsigned char sysp;
+
+  /* Is this a user-supplied directory? */
+  bool user_supplied_p;
+
+  /* The canonicalized NAME as determined by lrealpath.  This field 
+     is only used by hosts that lack reliable inode numbers.  */
+  char *canonical_name;
+
+  /* Mapping of file names for this directory for MS-DOS and related
+     platforms.  A NULL-terminated array of (from, to) pairs.  */
+  const char **name_map;
+
+  /* Routine to construct pathname, given the search path name and the
+     HEADER we are trying to find, return a constructed pathname to
+     try and open.  If this is NULL, the constructed pathname is as
+     constructed by append_file_to_dir.  */
+  char *(*construct) (const char *header, cpp_dir *dir);
+
+  /* The C front end uses these to recognize duplicated
+     directories in the search path.  */
+  INO_T_CPP;
+  dev_t dev;
+};
+
+/* The kind of the cpp_macro.  */
+enum cpp_macro_kind {
+  cmk_macro,	/* An ISO macro (token expansion).  */
+  cmk_assert,   /* An assertion.  */
+  cmk_traditional	/* A traditional macro (text expansion).  */
+};
+
+/* Each macro definition is recorded in a cpp_macro structure.
+   Variadic macros cannot occur with traditional cpp.  */
+struct GTY(()) cpp_macro {
+  union cpp_parm_u 
+  {
+    /* Parameters, if any.  If parameter names use extended identifiers,
+       the original spelling of those identifiers, not the canonical
+       UTF-8 spelling, goes here.  */
+    cpp_hashnode ** GTY ((tag ("false"),
+			  nested_ptr (union tree_node,
+	"%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
+	"%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL"),
+			  length ("%1.paramc"))) params;
+
+    /* If this is an assertion, the next one in the chain.  */
+    cpp_macro *GTY ((tag ("true"))) next;
+  } GTY ((desc ("%1.kind == cmk_assert"))) parm;
+
+  /* Definition line number.  */
+  location_t line;
+
+  /* Number of tokens in body, or bytes for traditional macros.  */
+  /* Do we really need 2^32-1 range here?  */
+  unsigned int count;
+
+  /* Number of parameters.  */
+  unsigned short paramc;
+
+  /* Non-zero if this is a user-lazy macro, value provided by user.  */
+  unsigned char lazy;
+
+  /* The kind of this macro (ISO, trad or assert) */
+  unsigned kind : 2;
+
+  /* If a function-like macro.  */
+  unsigned int fun_like : 1;
+
+  /* If a variadic macro.  */
+  unsigned int variadic : 1;
+
+  /* If macro defined in system header.  */
+  unsigned int syshdr   : 1;
+
+  /* Nonzero if it has been expanded or had its existence tested.  */
+  unsigned int used     : 1;
+
+  /* Indicate whether the tokens include extra CPP_PASTE tokens at the
+     end to track invalid redefinitions with consecutive CPP_PASTE
+     tokens.  */
+  unsigned int extra_tokens : 1;
+
+  /* 1 bits spare (32-bit). 33 on 64-bit target.  */
+
+  union cpp_exp_u
+  {
+    /* Trailing array of replacement tokens (ISO), or assertion body value.  */
+    cpp_token GTY ((tag ("false"), length ("%1.count"))) tokens[1];
+
+    /* Pointer to replacement text (traditional).  See comment at top
+       of cpptrad.c for how traditional function-like macros are
+       encoded.  */
+    const unsigned char *GTY ((tag ("true"))) text;
+  } GTY ((desc ("%1.kind == cmk_traditional"))) exp;
+};
+
+/* Poisoned identifiers are flagged NODE_POISONED.  NODE_OPERATOR (C++
+   only) indicates an identifier that behaves like an operator such as
+   "xor".  NODE_DIAGNOSTIC is for speed in lex_token: it indicates a
+   diagnostic may be required for this node.  Currently this only
+   applies to __VA_ARGS__, poisoned identifiers, and -Wc++-compat
+   warnings about NODE_OPERATOR.  */
+
+/* Hash node flags.  */
+#define NODE_OPERATOR	(1 << 0)	/* C++ named operator.  */
+#define NODE_POISONED	(1 << 1)	/* Poisoned identifier.  */
+#define NODE_DIAGNOSTIC (1 << 2)	/* Possible diagnostic when lexed.  */
+#define NODE_WARN	(1 << 3)	/* Warn if redefined or undefined.  */
+#define NODE_DISABLED	(1 << 4)	/* A disabled macro.  */
+#define NODE_USED	(1 << 5)	/* Dumped with -dU.  */
+#define NODE_CONDITIONAL (1 << 6)	/* Conditional macro */
+#define NODE_WARN_OPERATOR (1 << 7)	/* Warn about C++ named operator.  */
+
+/* Different flavors of hash node.  */
+enum node_type
+{
+  NT_VOID = 0,	   /* Maybe an assert?  */
+  NT_MACRO_ARG,	   /* A macro arg.  */
+  NT_USER_MACRO,   /* A user macro.  */
+  NT_BUILTIN_MACRO, /* A builtin macro.  */
+  NT_MACRO_MASK = NT_USER_MACRO  /* Mask for either macro kind.  */
+};
+
+/* Different flavors of builtin macro.  _Pragma is an operator, but we
+   handle it with the builtin code for efficiency reasons.  */
+enum cpp_builtin_type
+{
+  BT_SPECLINE = 0,		/* `__LINE__' */
+  BT_DATE,			/* `__DATE__' */
+  BT_FILE,			/* `__FILE__' */
+  BT_BASE_FILE,			/* `__BASE_FILE__' */
+  BT_INCLUDE_LEVEL,		/* `__INCLUDE_LEVEL__' */
+  BT_TIME,			/* `__TIME__' */
+  BT_STDC,			/* `__STDC__' */
+  BT_PRAGMA,			/* `_Pragma' operator */
+  BT_TIMESTAMP,			/* `__TIMESTAMP__' */
+  BT_COUNTER,			/* `__COUNTER__' */
+  BT_HAS_ATTRIBUTE		/* `__has_attribute__(x)' */
+};
+
+#define CPP_HASHNODE(HNODE)	((cpp_hashnode *) (HNODE))
+#define HT_NODE(NODE)		(&(NODE)->ident)
+#define NODE_LEN(NODE)		HT_LEN (HT_NODE (NODE))
+#define NODE_NAME(NODE)		HT_STR (HT_NODE (NODE))
+
+/* The common part of an identifier node shared amongst all 3 C front
+   ends.  Also used to store CPP identifiers, which are a superset of
+   identifiers in the grammatical sense.  */
+
+union GTY(()) _cpp_hashnode_value {
+  /* Assert (maybe NULL) */
+  cpp_macro * GTY((tag ("NT_VOID"))) answers;
+  /* Macro (never NULL) */
+  cpp_macro * GTY((tag ("NT_USER_MACRO"))) macro;
+  /* Code for a builtin macro.  */
+  enum cpp_builtin_type GTY ((tag ("NT_BUILTIN_MACRO"))) builtin;
+  /* Macro argument index.  */
+  unsigned short GTY ((tag ("NT_MACRO_ARG"))) arg_index;
+};
+
+struct GTY(()) cpp_hashnode {
+  struct ht_identifier ident;
+  unsigned int is_directive : 1;
+  unsigned int directive_index : 7;	/* If is_directive,
+					   then index into directive table.
+					   Otherwise, a NODE_OPERATOR.  */
+  unsigned char rid_code;		/* Rid code - for front ends.  */
+  ENUM_BITFIELD(node_type) type : 2;	/* CPP node type.  */
+  unsigned int flags : 8;		/* CPP flags.  */
+
+  /* 6 bits spare (plus another 32 on 64-bit hosts).  */
+
+  union _cpp_hashnode_value GTY ((desc ("%1.type"))) value;
+};
+
+/* A class for iterating through the source locations within a
+   string token (before escapes are interpreted, and before
+   concatenation).  */
+
+class cpp_string_location_reader {
+ public:
+  cpp_string_location_reader (location_t src_loc,
+			      line_maps *line_table);
+
+  source_range get_next ();
+
+ private:
+  location_t m_loc;
+  int m_offset_per_column;
+  line_maps *m_line_table;
+};
+
+/* A class for storing the source ranges of all of the characters within
+   a string literal, after escapes are interpreted, and after
+   concatenation.
+
+   This is not GTY-marked, as instances are intended to be temporary.  */
+
+class cpp_substring_ranges
+{
+ public:
+  cpp_substring_ranges ();
+  ~cpp_substring_ranges ();
+
+  int get_num_ranges () const { return m_num_ranges; }
+  source_range get_range (int idx) const
+  {
+    linemap_assert (idx < m_num_ranges);
+    return m_ranges[idx];
+  }
+
+  void add_range (source_range range);
+  void add_n_ranges (int num, cpp_string_location_reader &loc_reader);
+
+ private:
+  source_range *m_ranges;
+  int m_num_ranges;
+  int m_alloc_ranges;
+};
+
+/* Call this first to get a handle to pass to other functions.
+
+   If you want cpplib to manage its own hashtable, pass in a NULL
+   pointer.  Otherwise you should pass in an initialized hash table
+   that cpplib will share; this technique is used by the C front
+   ends.  */
+extern cpp_reader *cpp_create_reader (enum c_lang, struct ht *,
+				      struct line_maps *);
+
+/* Reset the cpp_reader's line_map.  This is only used after reading a
+   PCH file.  */
+extern void cpp_set_line_map (cpp_reader *, struct line_maps *);
+
+/* Call this to change the selected language standard (e.g. because of
+   command line options).  */
+extern void cpp_set_lang (cpp_reader *, enum c_lang);
+
+/* Set the include paths.  */
+extern void cpp_set_include_chains (cpp_reader *, cpp_dir *, cpp_dir *, int);
+
+/* Call these to get pointers to the options, callback, and deps
+   structures for a given reader.  These pointers are good until you
+   call cpp_finish on that reader.  You can either edit the callbacks
+   through the pointer returned from cpp_get_callbacks, or set them
+   with cpp_set_callbacks.  */
+extern cpp_options *cpp_get_options (cpp_reader *);
+extern cpp_callbacks *cpp_get_callbacks (cpp_reader *);
+extern void cpp_set_callbacks (cpp_reader *, cpp_callbacks *);
+extern struct deps *cpp_get_deps (cpp_reader *);
+
+/* This function reads the file, but does not start preprocessing.  It
+   returns the name of the original file; this is the same as the
+   input file, except for preprocessed input.  This will generate at
+   least one file change callback, and possibly a line change callback
+   too.  If there was an error opening the file, it returns NULL.  */
+extern const char *cpp_read_main_file (cpp_reader *, const char *);
+
+/* Set up built-ins with special behavior.  Use cpp_init_builtins()
+   instead unless your know what you are doing.  */
+extern void cpp_init_special_builtins (cpp_reader *);
+
+/* Set up built-ins like __FILE__.  */
+extern void cpp_init_builtins (cpp_reader *, int);
+
+/* This is called after options have been parsed, and partially
+   processed.  */
+extern void cpp_post_options (cpp_reader *);
+
+/* Set up translation to the target character set.  */
+extern void cpp_init_iconv (cpp_reader *);
+
+/* Call this to finish preprocessing.  If you requested dependency
+   generation, pass an open stream to write the information to,
+   otherwise NULL.  It is your responsibility to close the stream.  */
+extern void cpp_finish (cpp_reader *, FILE *deps_stream);
+
+/* Call this to release the handle at the end of preprocessing.  Any
+   use of the handle after this function returns is invalid.  */
+extern void cpp_destroy (cpp_reader *);
+
+extern unsigned int cpp_token_len (const cpp_token *);
+extern unsigned char *cpp_token_as_text (cpp_reader *, const cpp_token *);
+extern unsigned char *cpp_spell_token (cpp_reader *, const cpp_token *,
+				       unsigned char *, bool);
+extern void cpp_register_pragma (cpp_reader *, const char *, const char *,
+				 void (*) (cpp_reader *), bool);
+extern void cpp_register_deferred_pragma (cpp_reader *, const char *,
+					  const char *, unsigned, bool, bool);
+extern int cpp_avoid_paste (cpp_reader *, const cpp_token *,
+			    const cpp_token *);
+extern const cpp_token *cpp_get_token (cpp_reader *);
+extern const cpp_token *cpp_get_token_with_location (cpp_reader *,
+						     location_t *);
+inline bool cpp_user_macro_p (const cpp_hashnode *node)
+{
+  return node->type == NT_USER_MACRO;
+}
+inline bool cpp_builtin_macro_p (const cpp_hashnode *node)
+{
+  return node->type == NT_BUILTIN_MACRO;
+}
+inline bool cpp_macro_p (const cpp_hashnode *node)
+{
+  return node->type & NT_MACRO_MASK;
+}
+
+/* Returns true if NODE is a function-like user macro.  */
+inline bool cpp_fun_like_macro_p (cpp_hashnode *node)
+{
+  return cpp_user_macro_p (node) && node->value.macro->fun_like;
+}
+
+extern const unsigned char *cpp_macro_definition (cpp_reader *,
+						  cpp_hashnode *);
+inline location_t cpp_macro_definition_location (cpp_hashnode *node)
+{
+  return node->value.macro->line;
+}
+extern void _cpp_backup_tokens (cpp_reader *, unsigned int);
+extern const cpp_token *cpp_peek_token (cpp_reader *, int);
+
+/* Evaluate a CPP_*CHAR* token.  */
+extern cppchar_t cpp_interpret_charconst (cpp_reader *, const cpp_token *,
+					  unsigned int *, int *);
+/* Evaluate a vector of CPP_*STRING* tokens.  */
+extern bool cpp_interpret_string (cpp_reader *,
+				  const cpp_string *, size_t,
+				  cpp_string *, enum cpp_ttype);
+extern const char *cpp_interpret_string_ranges (cpp_reader *pfile,
+						const cpp_string *from,
+						cpp_string_location_reader *,
+						size_t count,
+						cpp_substring_ranges *out,
+						enum cpp_ttype type);
+extern bool cpp_interpret_string_notranslate (cpp_reader *,
+					      const cpp_string *, size_t,
+					      cpp_string *, enum cpp_ttype);
+
+/* Convert a host character constant to the execution character set.  */
+extern cppchar_t cpp_host_to_exec_charset (cpp_reader *, cppchar_t);
+
+/* Used to register macros and assertions, perhaps from the command line.
+   The text is the same as the command line argument.  */
+extern void cpp_define (cpp_reader *, const char *);
+extern void cpp_define_formatted (cpp_reader *pfile, 
+				  const char *fmt, ...) ATTRIBUTE_PRINTF_2;
+extern void cpp_assert (cpp_reader *, const char *);
+extern void cpp_undef (cpp_reader *, const char *);
+extern void cpp_unassert (cpp_reader *, const char *);
+
+/* Mark a node as a lazily defined macro.  */
+extern void cpp_define_lazily (cpp_reader *, cpp_hashnode *node, unsigned N);
+
+/* Undefine all macros and assertions.  */
+extern void cpp_undef_all (cpp_reader *);
+
+extern cpp_buffer *cpp_push_buffer (cpp_reader *, const unsigned char *,
+				    size_t, int);
+extern int cpp_defined (cpp_reader *, const unsigned char *, int);
+
+/* A preprocessing number.  Code assumes that any unused high bits of
+   the double integer are set to zero.  */
+
+/* This type has to be equal to unsigned HOST_WIDE_INT, see
+   gcc/c-family/c-lex.c.  */
+typedef uint64_t cpp_num_part;
+typedef struct cpp_num cpp_num;
+struct cpp_num
+{
+  cpp_num_part high;
+  cpp_num_part low;
+  bool unsignedp;  /* True if value should be treated as unsigned.  */
+  bool overflow;   /* True if the most recent calculation overflowed.  */
+};
+
+/* cpplib provides two interfaces for interpretation of preprocessing
+   numbers.
+
+   cpp_classify_number categorizes numeric constants according to
+   their field (integer, floating point, or invalid), radix (decimal,
+   octal, hexadecimal), and type suffixes.  */
+
+#define CPP_N_CATEGORY  0x000F
+#define CPP_N_INVALID	0x0000
+#define CPP_N_INTEGER	0x0001
+#define CPP_N_FLOATING	0x0002
+
+#define CPP_N_WIDTH	0x00F0
+#define CPP_N_SMALL	0x0010	/* int, float, short _Fract/Accum  */
+#define CPP_N_MEDIUM	0x0020	/* long, double, long _Fract/_Accum.  */
+#define CPP_N_LARGE	0x0040	/* long long, long double,
+				   long long _Fract/Accum.  */
+
+#define CPP_N_WIDTH_MD	0xF0000	/* machine defined.  */
+#define CPP_N_MD_W	0x10000
+#define CPP_N_MD_Q	0x20000
+
+#define CPP_N_RADIX	0x0F00
+#define CPP_N_DECIMAL	0x0100
+#define CPP_N_HEX	0x0200
+#define CPP_N_OCTAL	0x0400
+#define CPP_N_BINARY	0x0800
+
+#define CPP_N_UNSIGNED	0x1000	/* Properties.  */
+#define CPP_N_IMAGINARY	0x2000
+#define CPP_N_DFLOAT	0x4000
+#define CPP_N_DEFAULT	0x8000
+
+#define CPP_N_FRACT	0x100000 /* Fract types.  */
+#define CPP_N_ACCUM	0x200000 /* Accum types.  */
+#define CPP_N_FLOATN	0x400000 /* _FloatN types.  */
+#define CPP_N_FLOATNX	0x800000 /* _FloatNx types.  */
+
+#define CPP_N_USERDEF	0x1000000 /* C++0x user-defined literal.  */
+
+#define CPP_N_WIDTH_FLOATN_NX	0xF0000000 /* _FloatN / _FloatNx value
+					      of N, divided by 16.  */
+#define CPP_FLOATN_SHIFT	24
+#define CPP_FLOATN_MAX	0xF0
+
+/* Classify a CPP_NUMBER token.  The return value is a combination of
+   the flags from the above sets.  */
+extern unsigned cpp_classify_number (cpp_reader *, const cpp_token *,
+				     const char **, location_t);
+
+/* Return the classification flags for a float suffix.  */
+extern unsigned int cpp_interpret_float_suffix (cpp_reader *, const char *,
+						size_t);
+
+/* Return the classification flags for an int suffix.  */
+extern unsigned int cpp_interpret_int_suffix (cpp_reader *, const char *,
+					      size_t);
+
+/* Evaluate a token classified as category CPP_N_INTEGER.  */
+extern cpp_num cpp_interpret_integer (cpp_reader *, const cpp_token *,
+				      unsigned int);
+
+/* Sign extend a number, with PRECISION significant bits and all
+   others assumed clear, to fill out a cpp_num structure.  */
+cpp_num cpp_num_sign_extend (cpp_num, size_t);
+
+/* Output a diagnostic of some kind.  */
+extern bool cpp_error (cpp_reader *, enum cpp_diagnostic_level,
+		       const char *msgid, ...)
+  ATTRIBUTE_PRINTF_3;
+extern bool cpp_warning (cpp_reader *, enum cpp_warning_reason,
+			 const char *msgid, ...)
+  ATTRIBUTE_PRINTF_3;
+extern bool cpp_pedwarning (cpp_reader *, enum cpp_warning_reason,
+			    const char *msgid, ...)
+  ATTRIBUTE_PRINTF_3;
+extern bool cpp_warning_syshdr (cpp_reader *, enum cpp_warning_reason reason,
+				const char *msgid, ...)
+  ATTRIBUTE_PRINTF_3;
+
+/* Output a diagnostic with "MSGID: " preceding the
+   error string of errno.  No location is printed.  */
+extern bool cpp_errno (cpp_reader *, enum cpp_diagnostic_level,
+		       const char *msgid);
+/* Similarly, but with "FILENAME: " instead of "MSGID: ", where
+   the filename is not localized.  */
+extern bool cpp_errno_filename (cpp_reader *, enum cpp_diagnostic_level,
+				const char *filename, location_t loc);
+
+/* Same as cpp_error, except additionally specifies a position as a
+   (translation unit) physical line and physical column.  If the line is
+   zero, then no location is printed.  */
+extern bool cpp_error_with_line (cpp_reader *, enum cpp_diagnostic_level,
+				 location_t, unsigned,
+				 const char *msgid, ...)
+  ATTRIBUTE_PRINTF_5;
+extern bool cpp_warning_with_line (cpp_reader *, enum cpp_warning_reason,
+				   location_t, unsigned,
+				   const char *msgid, ...)
+  ATTRIBUTE_PRINTF_5;
+extern bool cpp_pedwarning_with_line (cpp_reader *, enum cpp_warning_reason,
+				      location_t, unsigned,
+				      const char *msgid, ...)
+  ATTRIBUTE_PRINTF_5;
+extern bool cpp_warning_with_line_syshdr (cpp_reader *, enum cpp_warning_reason,
+					  location_t, unsigned,
+					  const char *msgid, ...)
+  ATTRIBUTE_PRINTF_5;
+
+extern bool cpp_error_at (cpp_reader * pfile, enum cpp_diagnostic_level,
+			  location_t src_loc, const char *msgid, ...)
+  ATTRIBUTE_PRINTF_4;
+
+extern bool cpp_error_at (cpp_reader * pfile, enum cpp_diagnostic_level,
+			  rich_location *richloc, const char *msgid, ...)
+  ATTRIBUTE_PRINTF_4;
+
+/* In lex.c */
+extern int cpp_ideq (const cpp_token *, const char *);
+extern void cpp_output_line (cpp_reader *, FILE *);
+extern unsigned char *cpp_output_line_to_string (cpp_reader *,
+						 const unsigned char *);
+extern void cpp_output_token (const cpp_token *, FILE *);
+extern const char *cpp_type2name (enum cpp_ttype, unsigned char flags);
+/* Returns the value of an escape sequence, truncated to the correct
+   target precision.  PSTR points to the input pointer, which is just
+   after the backslash.  LIMIT is how much text we have.  WIDE is true
+   if the escape sequence is part of a wide character constant or
+   string literal.  Handles all relevant diagnostics.  */
+extern cppchar_t cpp_parse_escape (cpp_reader *, const unsigned char ** pstr,
+				   const unsigned char *limit, int wide);
+
+/* Structure used to hold a comment block at a given location in the
+   source code.  */
+
+typedef struct
+{
+  /* Text of the comment including the terminators.  */
+  char *comment;
+
+  /* source location for the given comment.  */
+  location_t sloc;
+} cpp_comment;
+
+/* Structure holding all comments for a given cpp_reader.  */
+
+typedef struct
+{
+  /* table of comment entries.  */
+  cpp_comment *entries;
+
+  /* number of actual entries entered in the table.  */
+  int count;
+
+  /* number of entries allocated currently.  */
+  int allocated;
+} cpp_comment_table;
+
+/* Returns the table of comments encountered by the preprocessor. This
+   table is only populated when pfile->state.save_comments is true. */
+extern cpp_comment_table *cpp_get_comments (cpp_reader *);
+
+/* In hash.c */
+
+/* Lookup an identifier in the hashtable.  Puts the identifier in the
+   table if it is not already there.  */
+extern cpp_hashnode *cpp_lookup (cpp_reader *, const unsigned char *,
+				 unsigned int);
+
+typedef int (*cpp_cb) (cpp_reader *, cpp_hashnode *, void *);
+extern void cpp_forall_identifiers (cpp_reader *, cpp_cb, void *);
+
+/* In macro.c */
+extern void cpp_scan_nooutput (cpp_reader *);
+extern int  cpp_sys_macro_p (cpp_reader *);
+extern unsigned char *cpp_quote_string (unsigned char *, const unsigned char *,
+					unsigned int);
+
+/* In files.c */
+extern bool cpp_included (cpp_reader *, const char *);
+extern bool cpp_included_before (cpp_reader *, const char *, location_t);
+extern void cpp_make_system_header (cpp_reader *, int, int);
+extern bool cpp_push_include (cpp_reader *, const char *);
+extern bool cpp_push_default_include (cpp_reader *, const char *);
+extern void cpp_change_file (cpp_reader *, enum lc_reason, const char *);
+extern const char *cpp_get_path (struct _cpp_file *);
+extern cpp_dir *cpp_get_dir (struct _cpp_file *);
+extern cpp_buffer *cpp_get_buffer (cpp_reader *);
+extern struct _cpp_file *cpp_get_file (cpp_buffer *);
+extern cpp_buffer *cpp_get_prev (cpp_buffer *);
+extern void cpp_clear_file_cache (cpp_reader *);
+
+/* In pch.c */
+struct save_macro_data;
+extern int cpp_save_state (cpp_reader *, FILE *);
+extern int cpp_write_pch_deps (cpp_reader *, FILE *);
+extern int cpp_write_pch_state (cpp_reader *, FILE *);
+extern int cpp_valid_state (cpp_reader *, const char *, int);
+extern void cpp_prepare_state (cpp_reader *, struct save_macro_data **);
+extern int cpp_read_state (cpp_reader *, const char *, FILE *,
+			   struct save_macro_data *);
+
+/* In lex.c */
+extern void cpp_force_token_locations (cpp_reader *, location_t);
+extern void cpp_stop_forcing_token_locations (cpp_reader *);
+
+/* In expr.c */
+extern enum cpp_ttype cpp_userdef_string_remove_type
+  (enum cpp_ttype type);
+extern enum cpp_ttype cpp_userdef_string_add_type
+  (enum cpp_ttype type);
+extern enum cpp_ttype cpp_userdef_char_remove_type
+  (enum cpp_ttype type);
+extern enum cpp_ttype cpp_userdef_char_add_type
+  (enum cpp_ttype type);
+extern bool cpp_userdef_string_p
+  (enum cpp_ttype type);
+extern bool cpp_userdef_char_p
+  (enum cpp_ttype type);
+extern const char * cpp_get_userdef_suffix
+  (const cpp_token *);
+
+#endif /* ! LIBCPP_CPPLIB_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/cselib.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cselib.h
new file mode 100644
index 0000000..8b8d3e8
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/cselib.h
@@ -0,0 +1,140 @@
+/* Common subexpression elimination for GNU compiler.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_CSELIB_H
+#define GCC_CSELIB_H
+
+/* Describe a value.  */
+struct cselib_val
+{
+  /* The hash value.  */
+  unsigned int hash;
+
+  /* A unique id assigned to values.  */
+  int uid;
+
+  /* A VALUE rtx that points back to this structure.  */
+  rtx val_rtx;
+
+  /* All rtl expressions that hold this value at the current time during a
+     scan.  */
+  struct elt_loc_list *locs;
+
+  /* If this value is used as an address, points to a list of values that
+     use it as an address in a MEM.  */
+  struct elt_list *addr_list;
+
+  struct cselib_val *next_containing_mem;
+};
+
+/* A list of rtl expressions that hold the same value.  */
+struct elt_loc_list {
+  /* Next element in the list.  */
+  struct elt_loc_list *next;
+  /* An rtl expression that holds the value.  */
+  rtx loc;
+  /* The insn that made the equivalence.  */
+  rtx_insn *setting_insn;
+};
+
+/* Describe a single set that is part of an insn.  */
+struct cselib_set
+{
+  rtx src;
+  rtx dest;
+  cselib_val *src_elt;
+  cselib_val *dest_addr_elt;
+};
+
+enum cselib_record_what
+{
+  CSELIB_RECORD_MEMORY = 1,
+  CSELIB_PRESERVE_CONSTANTS = 2
+};
+
+extern void (*cselib_discard_hook) (cselib_val *);
+extern void (*cselib_record_sets_hook) (rtx_insn *insn, struct cselib_set *sets,
+					int n_sets);
+
+extern cselib_val *cselib_lookup (rtx, machine_mode,
+				  int, machine_mode);
+extern cselib_val *cselib_lookup_from_insn (rtx, machine_mode,
+					    int, machine_mode, rtx_insn *);
+extern void cselib_init (int);
+extern void cselib_clear_table (void);
+extern void cselib_finish (void);
+extern void cselib_process_insn (rtx_insn *);
+extern bool fp_setter_insn (rtx_insn *);
+extern machine_mode cselib_reg_set_mode (const_rtx);
+extern int rtx_equal_for_cselib_1 (rtx, rtx, machine_mode, int);
+extern int references_value_p (const_rtx, int);
+extern rtx cselib_expand_value_rtx (rtx, bitmap, int);
+typedef rtx (*cselib_expand_callback)(rtx, bitmap, int, void *);
+extern rtx cselib_expand_value_rtx_cb (rtx, bitmap, int,
+				       cselib_expand_callback, void *);
+extern bool cselib_dummy_expand_value_rtx_cb (rtx, bitmap, int,
+					      cselib_expand_callback, void *);
+extern rtx cselib_subst_to_values (rtx, machine_mode);
+extern rtx cselib_subst_to_values_from_insn (rtx, machine_mode, rtx_insn *);
+extern void cselib_invalidate_rtx (rtx, const_rtx = NULL);
+
+extern void cselib_reset_table (unsigned int);
+extern unsigned int cselib_get_next_uid (void);
+extern void cselib_preserve_value (cselib_val *);
+extern bool cselib_preserved_value_p (cselib_val *);
+extern void cselib_preserve_only_values (void);
+extern void cselib_preserve_cfa_base_value (cselib_val *, unsigned int);
+extern void cselib_add_permanent_equiv (cselib_val *, rtx, rtx_insn *);
+extern bool cselib_have_permanent_equivalences (void);
+extern void cselib_set_value_sp_based (cselib_val *);
+extern bool cselib_sp_based_value_p (cselib_val *);
+
+extern void dump_cselib_table (FILE *);
+
+/* Return the canonical value for VAL, following the equivalence chain
+   towards the earliest (== lowest uid) equivalent value.  */
+
+static inline cselib_val *
+canonical_cselib_val (cselib_val *val)
+{
+  cselib_val *canon;
+
+  if (!val->locs || val->locs->next
+      || !val->locs->loc || GET_CODE (val->locs->loc) != VALUE
+      || val->uid < CSELIB_VAL_PTR (val->locs->loc)->uid)
+    return val;
+
+  canon = CSELIB_VAL_PTR (val->locs->loc);
+  gcc_checking_assert (canonical_cselib_val (canon) == canon);
+  return canon;
+}
+
+/* Return nonzero if we can prove that X and Y contain the same value, taking
+   our gathered information into account.  */
+
+static inline int
+rtx_equal_for_cselib_p (rtx x, rtx y)
+{
+  if (x == y)
+    return 1;
+
+  return rtx_equal_for_cselib_1 (x, y, VOIDmode, 0);
+}
+
+#endif /* GCC_CSELIB_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/d/d-tree.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/d/d-tree.def
new file mode 100644
index 0000000..ae3f41d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/d/d-tree.def
@@ -0,0 +1,29 @@
+/* d-tree.def -- Definitions and documentation for additional tree codes used
+   in the D compiler  (see tree.def for standard codes).
+   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Logical shift done on an unsigned type.  If the first operand is
+   signed, it will be converted to the unsigned equivalent.  The second
+   operand is the number of bits to shift by; it need not be the same
+   type as the first operand and result.  */
+DEFTREECODE (UNSIGNED_RSHIFT_EXPR, "unsigned_rshift_expr", tcc_binary, 2)
+
+/* Floating point modulus that expands to a call to fmod.  */
+DEFTREECODE (FLOAT_MOD_EXPR, "float_mod_expr", tcc_binary, 2)
+
+/* Used to represent information associated with a function closure.  */
+DEFTREECODE (FUNCFRAME_INFO, "funcframe_info", tcc_exceptional, 0)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/data-streamer.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/data-streamer.h
new file mode 100644
index 0000000..cb3efc1
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/data-streamer.h
@@ -0,0 +1,345 @@
+/* Generic streaming support for various data types.
+
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Contributed by Diego Novillo <dnovillo@google.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_DATA_STREAMER_H
+#define GCC_DATA_STREAMER_H
+
+#include "lto-streamer.h"
+
+/* Data structures used to pack values and bitflags into a vector of
+   words.  Used to stream values of a fixed number of bits in a space
+   efficient way.  */
+static unsigned const BITS_PER_BITPACK_WORD = HOST_BITS_PER_WIDE_INT;
+
+typedef unsigned HOST_WIDE_INT bitpack_word_t;
+
+struct bitpack_d
+{
+  /* The position of the first unused or unconsumed bit in the word.  */
+  unsigned pos;
+
+  /* The current word we are (un)packing.  */
+  bitpack_word_t word;
+
+  /* The lto_output_stream or the lto_input_block we are streaming to/from.  */
+  void *stream;
+};
+
+/* In data-streamer.c  */
+void bp_pack_var_len_unsigned (struct bitpack_d *, unsigned HOST_WIDE_INT);
+void bp_pack_var_len_int (struct bitpack_d *, HOST_WIDE_INT);
+unsigned HOST_WIDE_INT bp_unpack_var_len_unsigned (struct bitpack_d *);
+HOST_WIDE_INT bp_unpack_var_len_int (struct bitpack_d *);
+
+/* In data-streamer-out.c  */
+void streamer_write_zero (struct output_block *);
+void streamer_write_uhwi (struct output_block *, unsigned HOST_WIDE_INT);
+void streamer_write_hwi (struct output_block *, HOST_WIDE_INT);
+void streamer_write_gcov_count (struct output_block *, gcov_type);
+void streamer_write_string (struct output_block *, struct lto_output_stream *,
+			    const char *, bool);
+void streamer_write_string_with_length (struct output_block *,
+					struct lto_output_stream *,
+					const char *, unsigned int, bool);
+void bp_pack_string_with_length (struct output_block *, struct bitpack_d *,
+				 const char *, unsigned int, bool);
+void bp_pack_string (struct output_block *, struct bitpack_d *,
+		     const char *, bool);
+void streamer_write_uhwi_stream (struct lto_output_stream *,
+				 unsigned HOST_WIDE_INT);
+void streamer_write_hwi_stream (struct lto_output_stream *, HOST_WIDE_INT);
+void streamer_write_gcov_count_stream (struct lto_output_stream *, gcov_type);
+void streamer_write_data_stream (struct lto_output_stream *, const void *,
+				 size_t);
+void streamer_write_wide_int (struct output_block *, const wide_int &);
+void streamer_write_widest_int (struct output_block *, const widest_int &);
+
+/* In data-streamer-in.c  */
+const char *streamer_read_string (struct data_in *, struct lto_input_block *);
+const char *streamer_read_indexed_string (struct data_in *,
+					  struct lto_input_block *,
+					  unsigned int *);
+const char *bp_unpack_indexed_string (struct data_in *, struct bitpack_d *,
+				      unsigned int *);
+const char *bp_unpack_string (struct data_in *, struct bitpack_d *);
+unsigned HOST_WIDE_INT streamer_read_uhwi (struct lto_input_block *);
+HOST_WIDE_INT streamer_read_hwi (struct lto_input_block *);
+gcov_type streamer_read_gcov_count (struct lto_input_block *);
+wide_int streamer_read_wide_int (struct lto_input_block *);
+widest_int streamer_read_widest_int (struct lto_input_block *);
+
+/* Returns a new bit-packing context for bit-packing into S.  */
+static inline struct bitpack_d
+bitpack_create (struct lto_output_stream *s)
+{
+  struct bitpack_d bp;
+  bp.pos = 0;
+  bp.word = 0;
+  bp.stream = (void *)s;
+  return bp;
+}
+
+/* Pack the NBITS bit sized value VAL into the bit-packing context BP.  */
+static inline void
+bp_pack_value (struct bitpack_d *bp, bitpack_word_t val, unsigned nbits)
+{
+  bitpack_word_t word = bp->word;
+  int pos = bp->pos;
+
+  /* Verify that VAL fits in the NBITS.  */
+  gcc_checking_assert (nbits == BITS_PER_BITPACK_WORD
+		       || !(val & ~(((bitpack_word_t)1<<nbits)-1)));
+
+  /* If val does not fit into the current bitpack word switch to the
+     next one.  */
+  if (pos + nbits > BITS_PER_BITPACK_WORD)
+    {
+      streamer_write_uhwi_stream ((struct lto_output_stream *) bp->stream,
+				  word);
+      word = val;
+      pos = nbits;
+    }
+  else
+    {
+      word |= val << pos;
+      pos += nbits;
+    }
+  bp->word = word;
+  bp->pos = pos;
+}
+
+/* Pack VAL into the bit-packing context BP, using NBITS for each
+   coefficient.  */
+static inline void
+bp_pack_poly_value (struct bitpack_d *bp,
+		    const poly_int<NUM_POLY_INT_COEFFS, bitpack_word_t> &val,
+		    unsigned nbits)
+{
+  for (int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
+    bp_pack_value (bp, val.coeffs[i], nbits);
+}
+
+/* Finishes bit-packing of BP.  */
+static inline void
+streamer_write_bitpack (struct bitpack_d *bp)
+{
+  streamer_write_uhwi_stream ((struct lto_output_stream *) bp->stream,
+			      bp->word);
+  bp->word = 0;
+  bp->pos = 0;
+}
+
+/* Returns a new bit-packing context for bit-unpacking from IB.  */
+static inline struct bitpack_d
+streamer_read_bitpack (struct lto_input_block *ib)
+{
+  struct bitpack_d bp;
+  bp.word = streamer_read_uhwi (ib);
+  bp.pos = 0;
+  bp.stream = (void *)ib;
+  return bp;
+}
+
+/* Unpacks NBITS bits from the bit-packing context BP and returns them.  */
+static inline bitpack_word_t
+bp_unpack_value (struct bitpack_d *bp, unsigned nbits)
+{
+  bitpack_word_t mask, val;
+  int pos = bp->pos;
+
+  mask = (nbits == BITS_PER_BITPACK_WORD
+	  ? (bitpack_word_t) -1
+	  : ((bitpack_word_t) 1 << nbits) - 1);
+
+  /* If there are not continuous nbits in the current bitpack word
+     switch to the next one.  */
+  if (pos + nbits > BITS_PER_BITPACK_WORD)
+    {
+      bp->word = val 
+	= streamer_read_uhwi ((struct lto_input_block *)bp->stream);
+      bp->pos = nbits;
+      return val & mask;
+    }
+  val = bp->word;
+  val >>= pos;
+  bp->pos = pos + nbits;
+
+  return val & mask;
+}
+
+/* Unpacks a polynomial value from the bit-packing context BP in which each
+   coefficient has NBITS bits.  */
+static inline poly_int<NUM_POLY_INT_COEFFS, bitpack_word_t>
+bp_unpack_poly_value (struct bitpack_d *bp, unsigned nbits)
+{
+  poly_int_pod<NUM_POLY_INT_COEFFS, bitpack_word_t> x;
+  for (int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
+    x.coeffs[i] = bp_unpack_value (bp, nbits);
+  return x;
+}
+
+
+/* Write a character to the output block.  */
+
+static inline void
+streamer_write_char_stream (struct lto_output_stream *obs, char c)
+{
+  /* No space left.  */
+  if (obs->left_in_block == 0)
+    lto_append_block (obs);
+
+  /* Write the actual character.  */
+  char *current_pointer = obs->current_pointer;
+  *(current_pointer++) = c;
+  obs->current_pointer = current_pointer;
+  obs->total_size++;
+  obs->left_in_block--;
+}
+
+
+/* Read byte from the input block.  */
+
+static inline unsigned char
+streamer_read_uchar (struct lto_input_block *ib)
+{
+  if (ib->p >= ib->len)
+    lto_section_overrun (ib);
+  return (ib->data[ib->p++]);
+}
+
+/* Output VAL into OBS and verify it is in range MIN...MAX that is supposed
+   to be compile time constant.
+   Be host independent, limit range to 31bits.  */
+
+static inline void
+streamer_write_hwi_in_range (struct lto_output_stream *obs,
+				  HOST_WIDE_INT min,
+				  HOST_WIDE_INT max,
+				  HOST_WIDE_INT val)
+{
+  HOST_WIDE_INT range = max - min;
+
+  gcc_checking_assert (val >= min && val <= max && range > 0
+		       && range < 0x7fffffff);
+
+  val -= min;
+  streamer_write_uhwi_stream (obs, (unsigned HOST_WIDE_INT) val);
+}
+
+/* Input VAL into OBS and verify it is in range MIN...MAX that is supposed
+   to be compile time constant.  PURPOSE is used for error reporting.  */
+
+static inline HOST_WIDE_INT
+streamer_read_hwi_in_range (struct lto_input_block *ib,
+				 const char *purpose,
+				 HOST_WIDE_INT min,
+				 HOST_WIDE_INT max)
+{
+  HOST_WIDE_INT range = max - min;
+  unsigned HOST_WIDE_INT uval = streamer_read_uhwi (ib);
+
+  gcc_checking_assert (range > 0 && range < 0x7fffffff);
+
+  HOST_WIDE_INT val = (HOST_WIDE_INT) (uval + (unsigned HOST_WIDE_INT) min);
+  if (val < min || val > max)
+    lto_value_range_error (purpose, val, min, max);
+  return val;
+}
+
+/* Output VAL into BP and verify it is in range MIN...MAX that is supposed
+   to be compile time constant.
+   Be host independent, limit range to 31bits.  */
+
+static inline void
+bp_pack_int_in_range (struct bitpack_d *bp,
+		      HOST_WIDE_INT min,
+		      HOST_WIDE_INT max,
+		      HOST_WIDE_INT val)
+{
+  HOST_WIDE_INT range = max - min;
+  int nbits = floor_log2 (range) + 1;
+
+  gcc_checking_assert (val >= min && val <= max && range > 0
+		       && range < 0x7fffffff);
+
+  val -= min;
+  bp_pack_value (bp, val, nbits);
+}
+
+/* Input VAL into BP and verify it is in range MIN...MAX that is supposed
+   to be compile time constant.  PURPOSE is used for error reporting.  */
+
+static inline HOST_WIDE_INT
+bp_unpack_int_in_range (struct bitpack_d *bp,
+		        const char *purpose,
+		        HOST_WIDE_INT min,
+		        HOST_WIDE_INT max)
+{
+  HOST_WIDE_INT range = max - min;
+  int nbits = floor_log2 (range) + 1;
+  HOST_WIDE_INT val = bp_unpack_value (bp, nbits);
+
+  gcc_checking_assert (range > 0 && range < 0x7fffffff);
+
+  if (val < min || val > max)
+    lto_value_range_error (purpose, val, min, max);
+  return val;
+}
+
+/* Output VAL of type "enum enum_name" into OBS.
+   Assume range 0...ENUM_LAST - 1.  */
+#define streamer_write_enum(obs,enum_name,enum_last,val) \
+  streamer_write_hwi_in_range ((obs), 0, (int)(enum_last) - 1, (int)(val))
+
+/* Input enum of type "enum enum_name" from IB.
+   Assume range 0...ENUM_LAST - 1.  */
+#define streamer_read_enum(ib,enum_name,enum_last) \
+  (enum enum_name)streamer_read_hwi_in_range ((ib), #enum_name, 0, \
+					      (int)(enum_last) - 1)
+
+/* Output VAL of type "enum enum_name" into BP.
+   Assume range 0...ENUM_LAST - 1.  */
+#define bp_pack_enum(bp,enum_name,enum_last,val) \
+  bp_pack_int_in_range ((bp), 0, (int)(enum_last) - 1, (int)(val))
+
+/* Input enum of type "enum enum_name" from BP.
+   Assume range 0...ENUM_LAST - 1.  */
+#define bp_unpack_enum(bp,enum_name,enum_last) \
+  (enum enum_name)bp_unpack_int_in_range ((bp), #enum_name, 0, \
+					(int)(enum_last) - 1)
+
+/* Output the start of a record with TAG to output block OB.  */
+
+static inline void
+streamer_write_record_start (struct output_block *ob, enum LTO_tags tag)
+{
+  streamer_write_enum (ob->main_stream, LTO_tags, LTO_NUM_TAGS, tag);
+}
+
+/* Return the next tag in the input block IB.  */
+
+static inline enum LTO_tags
+streamer_read_record_start (struct lto_input_block *ib)
+{
+  return streamer_read_enum (ib, LTO_tags, LTO_NUM_TAGS);
+}
+
+#endif  /* GCC_DATA_STREAMER_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/dbgcnt.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dbgcnt.def
new file mode 100644
index 0000000..dd874c5
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dbgcnt.def
@@ -0,0 +1,197 @@
+/* This file contains the list of the debug counter for GCC.
+   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+/* A debug counter provides you a way to count an event
+   and return false after the counter has exceeded the threshold
+   specified by the option.
+
+   What is it used for ?
+
+   This is primarily used to speed up the search for the bad transformation
+   an optimization pass does. By doing a binary search on N,
+   you can quickly narrow down to one transformation
+   which is bad, or which triggers the bad behavior downstream
+   (usually in the form of the badly generated code).
+
+   How does it work ?
+
+   Every time dbg_cnt(named-counter) is called,
+   the counter is incremented for the named-counter.
+   And the incremented value is compared against the threshold (limit)
+   specified by the option.
+   dbg_cnt () returns true if it is at or below threshold, and false if above.
+
+   How to add a new one ?
+
+   To add a new counter, simply add an entry below with some descriptive name,
+   and add call(s) to dbg_cnt(your-counter-name) in appropriate places.
+   Usually, you want to control at the finest granularity
+   any particular transformation can happen.
+   e.g. for each instruction in a dead code elimination,
+   or for each copy instruction in register coalescing,
+   or constant-propagation for each insn,
+   or a block straightening, etc.
+   See dce.c for an example. With the dbg_cnt () call in dce.c,
+   now a developer can use -fdbg-cnt=dce:N
+   to stop doing the dead code elimination after N times.
+
+   How to use it ?
+
+   By default, all limits are UINT_MAX.
+   Since debug count is unsigned int, <= UINT_MAX returns true always.
+   i.e.  dbg_cnt() returns true always regardless of the counter value
+   (although it still counts the event).
+   Use -fdbg-cnt=counter1:N,counter2:M,...
+   which sets the limit for counter1 to N, and the limit for counter2 to M, etc.
+   e.g. setting a limit to zero will make dbg_cnt () return false *always*.
+
+   The following shell file can then be used to binary search for
+   exact transformation that causes the bug.  A second shell script
+   should be written, say "tryTest", which exits with 1 if the
+   compiled program fails and exits with 0 if the program succeeds.
+   This shell script should take 1 parameter, the value to be passed
+   to set the counter of the compilation command in tryTest.  Then,
+   assuming that the following script is called binarySearch,
+   the command:
+
+	binarySearch tryTest
+
+   will automatically find the highest value of the counter for which
+   the program fails.  If tryTest never fails, binarySearch will
+   produce unpredictable results as it will try to find an upper bound
+   that does not exist.
+
+   When dbgcnt does hits the limit, it writes a comment in the current
+   dump_file of the form:
+
+       ***dbgcnt: limit reached for %s.***
+
+   Assuming that the dump file is logging the analysis/transformations
+   it is making, this pinpoints the exact position in the log file
+   where the problem transformation is being logged.
+
+=====================================
+#!/bin/bash
+
+while getopts "l:u:i:" opt
+do
+    case $opt in
+        l) lb="$OPTARG";;
+        u) ub="$OPTARG";;
+        i) init="$OPTARG";;
+        ?) usage; exit 3;;
+    esac
+done
+
+shift $(($OPTIND - 1))
+echo $@
+cmd=${1+"${@}"}
+
+lb=${lb:=0}
+init=${init:=100}
+
+$cmd $lb
+lb_val=$?
+if [ -z "$ub" ]; then
+    # find the upper bound
+    ub=$(($init + $lb))
+    true
+    while [ $? -eq $lb_val ]; do
+        ub=$(($ub * 10))
+        #ub=`expr $ub \* 10`
+        $cmd $ub
+    done
+fi
+
+echo command: $cmd
+
+true
+while [ `expr $ub - $lb` -gt 1 ]; do
+    try=$(($lb + ( $ub - $lb ) / 2))
+    $cmd $try
+    if [ $? -eq $lb_val ]; then
+        lb=$try
+    else
+        ub=$try
+    fi
+done
+
+echo lbound: $lb
+echo ubound: $ub
+
+=====================================
+
+*/
+
+/* Debug counter definitions.  */
+DEBUG_COUNTER (asan_use_after_scope)
+DEBUG_COUNTER (auto_inc_dec)
+DEBUG_COUNTER (ccp)
+DEBUG_COUNTER (cfg_cleanup)
+DEBUG_COUNTER (cprop)
+DEBUG_COUNTER (cse2_move2add)
+DEBUG_COUNTER (dce)
+DEBUG_COUNTER (dce_fast)
+DEBUG_COUNTER (dce_ud)
+DEBUG_COUNTER (delete_trivial_dead)
+DEBUG_COUNTER (devirt)
+DEBUG_COUNTER (df_byte_scan)
+DEBUG_COUNTER (dse)
+DEBUG_COUNTER (dse1)
+DEBUG_COUNTER (dse2)
+DEBUG_COUNTER (eipa_sra)
+DEBUG_COUNTER (gcse2_delete)
+DEBUG_COUNTER (global_alloc_at_func)
+DEBUG_COUNTER (global_alloc_at_reg)
+DEBUG_COUNTER (graphite_scop)
+DEBUG_COUNTER (hoist)
+DEBUG_COUNTER (hoist_insn)
+DEBUG_COUNTER (ia64_sched2)
+DEBUG_COUNTER (if_after_combine)
+DEBUG_COUNTER (if_after_reload)
+DEBUG_COUNTER (if_conversion)
+DEBUG_COUNTER (if_conversion_tree)
+DEBUG_COUNTER (ira_move)
+DEBUG_COUNTER (local_alloc_for_sched)
+DEBUG_COUNTER (merged_ipa_icf)
+DEBUG_COUNTER (postreload_cse)
+DEBUG_COUNTER (pre)
+DEBUG_COUNTER (pre_insn)
+DEBUG_COUNTER (prefetch)
+DEBUG_COUNTER (registered_jump_thread)
+DEBUG_COUNTER (sched2_func)
+DEBUG_COUNTER (sched_block)
+DEBUG_COUNTER (sched_breakdep)
+DEBUG_COUNTER (sched_func)
+DEBUG_COUNTER (sched_insn)
+DEBUG_COUNTER (sched_region)
+DEBUG_COUNTER (sel_sched_cnt)
+DEBUG_COUNTER (sel_sched_insn_cnt)
+DEBUG_COUNTER (sel_sched_region_cnt)
+DEBUG_COUNTER (sms_sched_loop)
+DEBUG_COUNTER (split_for_sched2)
+DEBUG_COUNTER (store_motion)
+DEBUG_COUNTER (stv_conversion)
+DEBUG_COUNTER (tail_call)
+DEBUG_COUNTER (treepre_insert)
+DEBUG_COUNTER (tree_sra)
+DEBUG_COUNTER (vect_loop)
+DEBUG_COUNTER (vect_slp)
+DEBUG_COUNTER (dom_unreachable_edges)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/dbgcnt.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dbgcnt.h
new file mode 100644
index 0000000..c855d23
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dbgcnt.h
@@ -0,0 +1,39 @@
+/* Debug counter for debugging support
+   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.
+
+See dbgcnt.def for usage information.  */
+
+#ifndef GCC_DBGCNT_H
+#define GCC_DBGCNT_H
+
+#define DEBUG_COUNTER(a) a,
+
+enum debug_counter {
+#include "dbgcnt.def"
+   debug_counter_number_of_counters
+};
+
+#undef DEBUG_COUNTER
+
+extern bool dbg_cnt_is_enabled (enum debug_counter index);
+extern bool dbg_cnt (enum debug_counter index);
+extern void dbg_cnt_process_opt (const char *arg);
+extern void dbg_cnt_list_all_counters (void);
+
+#endif /* GCC_DBGCNT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/dbxout.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dbxout.h
new file mode 100644
index 0000000..c655e48
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dbxout.h
@@ -0,0 +1,60 @@
+/* dbxout.h - Various declarations for functions found in dbxout.c
+   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_DBXOUT_H
+#define GCC_DBXOUT_H
+
+extern int dbxout_symbol (tree, int);
+extern void dbxout_parms (tree);
+extern void dbxout_reg_parms (tree);
+extern int dbxout_syms (tree);
+
+extern void default_stabs_asm_out_destructor (rtx, int);
+extern void default_stabs_asm_out_constructor (rtx, int);
+
+/* dbxout helper functions */
+#if defined DBX_DEBUGGING_INFO || defined XCOFF_DEBUGGING_INFO
+
+extern void dbxout_int (int);
+extern void dbxout_stabd (int, int);
+extern void dbxout_begin_stabn (int);
+extern void dbxout_begin_stabn_sline (int);
+extern void dbxout_begin_empty_stabs (int);
+extern void dbxout_begin_simple_stabs (const char *, int);
+extern void dbxout_begin_simple_stabs_desc (const char *, int, int);
+
+extern void dbxout_stab_value_zero (void);
+extern void dbxout_stab_value_label (const char *);
+extern void dbxout_stab_value_label_diff (const char *, const char *);
+extern void dbxout_stab_value_internal_label (const char *, int *);
+extern void dbxout_stab_value_internal_label_diff (const char *, int *,
+						   const char *);
+#endif
+
+/* Language description for N_SO stabs.  */
+#define N_SO_AS          1
+#define N_SO_C           2
+#define N_SO_ANSI_C      3
+#define N_SO_CC          4 /* c++*/
+#define N_SO_FORTRAN     5
+#define N_SO_FORTRAN90   7
+#define N_SO_OBJC        50
+#define N_SO_OBJCPLUS    51
+
+#endif /* GCC_DBXOUT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/dce.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dce.h
new file mode 100644
index 0000000..8b5ee87
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dce.h
@@ -0,0 +1,27 @@
+/* RTL dead code elimination.
+   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_DCE_H
+#define GCC_DCE_H
+
+extern void run_word_dce (void);
+extern void run_fast_dce (void);
+extern void run_fast_df_dce (void);
+
+#endif /* GCC_DCE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ddg.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ddg.h
new file mode 100644
index 0000000..3bfc2c8
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ddg.h
@@ -0,0 +1,185 @@
+/* DDG - Data Dependence Graph - interface.
+   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Contributed by Ayal Zaks and Mustafa Hagog <zaks,mustafa@il.ibm.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_DDG_H
+#define GCC_DDG_H
+
+/* For sbitmap.  */
+
+typedef struct ddg_node *ddg_node_ptr;
+typedef struct ddg_edge *ddg_edge_ptr;
+typedef struct ddg *ddg_ptr;
+typedef struct ddg_scc *ddg_scc_ptr;
+typedef struct ddg_all_sccs *ddg_all_sccs_ptr;
+
+enum dep_type {TRUE_DEP, OUTPUT_DEP, ANTI_DEP};
+enum dep_data_type {REG_OR_MEM_DEP, REG_DEP, MEM_DEP, REG_AND_MEM_DEP};
+
+/* The following two macros enables direct access to the successors and
+   predecessors bitmaps held in each ddg_node.  Do not make changes to
+   these bitmaps, unless you want to change the DDG.  */
+#define NODE_SUCCESSORS(x)  ((x)->successors)
+#define NODE_PREDECESSORS(x)  ((x)->predecessors)
+
+/* A structure that represents a node in the DDG.  */
+struct ddg_node
+{
+  /* Each node has a unique CUID index.  These indices increase monotonically
+     (according to the order of the corresponding INSN in the BB), starting
+     from 0 with no gaps.  */
+  int cuid;
+
+  /* The insn represented by the node.  */
+  rtx_insn *insn;
+
+  /* A note preceding INSN (or INSN itself), such that all insns linked
+     from FIRST_NOTE until INSN (inclusive of both) are moved together
+     when reordering the insns.  This takes care of notes that should
+     continue to precede INSN.  */
+  rtx_insn *first_note;
+
+  /* Incoming and outgoing dependency edges.  */
+  ddg_edge_ptr in;
+  ddg_edge_ptr out;
+
+  /* Each bit corresponds to a ddg_node according to its cuid, and is
+     set iff the node is a successor/predecessor of "this" node.  */
+  sbitmap successors;
+  sbitmap predecessors;
+
+  /* For general use by algorithms manipulating the ddg.  */
+  union {
+    int count;
+    void *info;
+  } aux;
+};
+
+/* A structure that represents an edge in the DDG.  */
+struct ddg_edge
+{
+  /* The source and destination nodes of the dependency edge.  */
+  ddg_node_ptr src;
+  ddg_node_ptr dest;
+
+  /* TRUE, OUTPUT or ANTI dependency.  */
+  dep_type type;
+
+  /* REG or MEM dependency.  */
+  dep_data_type data_type;
+
+  /* Latency of the dependency.  */
+  int latency;
+
+  /* The distance: number of loop iterations the dependency crosses.  */
+  int distance;
+
+  /* The following two fields are used to form a linked list of the in/out
+     going edges to/from each node.  */
+  ddg_edge_ptr next_in;
+  ddg_edge_ptr next_out;
+
+  /* For general use by algorithms manipulating the ddg.  */
+  union {
+    int count;
+    void *info;
+  } aux;
+};
+
+/* This structure holds the Data Dependence Graph for a basic block.  */
+struct ddg
+{
+  /* The basic block for which this DDG is built.  */
+  basic_block bb;
+
+  /* Number of instructions in the basic block.  */
+  int num_nodes;
+
+  /* Number of load/store instructions in the BB - statistics.  */
+  int num_loads;
+  int num_stores;
+
+  /* Number of debug instructions in the BB.  */
+  int num_debug;
+
+  /* This array holds the nodes in the graph; it is indexed by the node
+     cuid, which follows the order of the instructions in the BB.  */
+  ddg_node_ptr nodes;
+
+  /* The branch closing the loop.  */
+  ddg_node_ptr closing_branch;
+
+  /* Build dependence edges for closing_branch, when set.  In certain cases,
+     the closing branch can be dealt with separately from the insns of the
+     loop, and then no such deps are needed.  */
+  int closing_branch_deps;
+
+  /* Array and number of backarcs (edges with distance > 0) in the DDG.  */
+  int num_backarcs;
+  ddg_edge_ptr *backarcs;
+};
+
+
+/* Holds information on an SCC (Strongly Connected Component) of the DDG.  */
+struct ddg_scc
+{
+  /* A bitmap that represents the nodes of the DDG that are in the SCC.  */
+  sbitmap nodes;
+
+  /* Array and number of backarcs (edges with distance > 0) in the SCC.  */
+  ddg_edge_ptr *backarcs;
+  int num_backarcs;
+
+  /* The maximum of (total_latency/total_distance) over all cycles in SCC.  */
+  int recurrence_length;
+};
+
+/* This structure holds the SCCs of the DDG.  */
+struct ddg_all_sccs
+{
+  /* Array that holds the SCCs in the DDG, and their number.  */
+  ddg_scc_ptr *sccs;
+  int num_sccs;
+
+  ddg_ptr ddg;
+};
+
+
+ddg_ptr create_ddg (basic_block, int closing_branch_deps);
+void free_ddg (ddg_ptr);
+
+void print_ddg (FILE *, ddg_ptr);
+void vcg_print_ddg (FILE *, ddg_ptr);
+void print_ddg_edge (FILE *, ddg_edge_ptr);
+void print_sccs (FILE *, ddg_all_sccs_ptr, ddg_ptr);
+
+ddg_node_ptr get_node_of_insn (ddg_ptr, rtx_insn *);
+
+void find_successors (sbitmap result, ddg_ptr, sbitmap);
+void find_predecessors (sbitmap result, ddg_ptr, sbitmap);
+
+ddg_all_sccs_ptr create_ddg_all_sccs (ddg_ptr);
+void free_ddg_all_sccs (ddg_all_sccs_ptr);
+
+int find_nodes_on_paths (sbitmap result, ddg_ptr, sbitmap from, sbitmap to);
+int longest_simple_path (ddg_ptr, int from, int to, sbitmap via);
+
+bool autoinc_var_is_used_p (rtx_insn *, rtx_insn *);
+
+#endif /* GCC_DDG_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/debug.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/debug.h
new file mode 100644
index 0000000..412e7ca
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/debug.h
@@ -0,0 +1,274 @@
+/* Debug hooks for GCC.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_DEBUG_H
+#define GCC_DEBUG_H
+
+/* This structure contains hooks for the debug information output
+   functions, accessed through the global instance debug_hooks set in
+   toplev.c according to command line options.  */
+struct gcc_debug_hooks
+{
+  /* Initialize debug output.  MAIN_FILENAME is the name of the main
+     input file.  */
+  void (* init) (const char *main_filename);
+
+  /* Output debug symbols.  */
+  void (* finish) (const char *main_filename);
+
+  /* Run cleanups necessary after early debug generation.  */
+  void (* early_finish) (const char *main_filename);
+
+  /* Called from cgraph_optimize before starting to assemble
+     functions/variables/toplevel asms.  */
+  void (* assembly_start) (void);
+
+  /* Macro defined on line LINE with name and expansion TEXT.  */
+  void (* define) (unsigned int line, const char *text);
+
+  /* MACRO undefined on line LINE.  */
+  void (* undef) (unsigned int line, const char *macro);
+
+  /* Record the beginning of a new source file FILE from LINE number
+     in the previous one.  */
+  void (* start_source_file) (unsigned int line, const char *file);
+
+  /* Record the resumption of a source file.  LINE is the line number
+     in the source file we are returning to.  */
+  void (* end_source_file) (unsigned int line);
+
+  /* Record the beginning of block N, counting from 1 and not
+     including the function-scope block, at LINE.  */
+  void (* begin_block) (unsigned int line, unsigned int n);
+
+  /* Record the end of a block.  Arguments as for begin_block.  */
+  void (* end_block) (unsigned int line, unsigned int n);
+
+  /* Returns nonzero if it is appropriate not to emit any debugging
+     information for BLOCK, because it doesn't contain any
+     instructions.  This may not be the case for blocks containing
+     nested functions, since we may actually call such a function even
+     though the BLOCK information is messed up.  Defaults to true.  */
+  bool (* ignore_block) (const_tree);
+
+  /* Record a source file location at (FILE, LINE, COLUMN, DISCRIMINATOR).  */
+  void (* source_line) (unsigned int line, unsigned int column,
+			const char *file, int discriminator, bool is_stmt);
+
+  /* Called at start of prologue code.  LINE is the first line in the
+     function.  */
+  void (* begin_prologue) (unsigned int line, unsigned int column,
+			   const char *file);
+
+  /* Called at end of prologue code.  LINE is the first line in the
+     function.  */
+  void (* end_prologue) (unsigned int line, const char *file);
+
+  /* Called at beginning of epilogue code.  */
+  void (* begin_epilogue) (unsigned int line, const char *file);
+
+  /* Record end of epilogue code.  */
+  void (* end_epilogue) (unsigned int line, const char *file);
+
+  /* Called at start of function DECL, before it is declared.  */
+  void (* begin_function) (tree decl);
+
+  /* Record end of function.  LINE is highest line number in function.  */
+  void (* end_function) (unsigned int line);
+
+  /* Register UNIT as the main translation unit.  Called from front-ends when
+     they create their main translation unit.  */
+  void (* register_main_translation_unit) (tree);
+
+  /* Debug information for a function DECL.  This might include the
+     function name (a symbol), its parameters, and the block that
+     makes up the function's body, and the local variables of the
+     function.
+
+     This is only called for FUNCTION_DECLs.  It is part of the late
+     debug pass and is called from rest_of_handle_final.
+
+     Location information is available at this point.
+
+     See the documentation for early_global_decl and late_global_decl
+     for other entry points into the debugging back-ends for DECLs.  */
+  void (* function_decl) (tree decl);
+
+  /* Debug information for a global DECL.  Called from the parser
+     after the parsing process has finished.
+
+     This gets called for both variables and functions.
+
+     Location information is not available at this point, but it is a
+     good probe point to get access to symbols before they get
+     optimized away.
+
+     This hook may be called on VAR_DECLs or FUNCTION_DECLs.  It is up
+     to the hook to use what it needs.  */
+  void (* early_global_decl) (tree decl);
+
+  /* Augment debug information generated by early_global_decl with
+     more complete debug info (if applicable).  Called from toplev.c
+     after the compilation proper has finished and cgraph information
+     is available.
+
+     This gets called for both variables and functions.
+
+     Location information is usually available at this point, unless
+     the hook is being called for a decl that has been optimized away.
+
+     This hook may be called on VAR_DECLs or FUNCTION_DECLs.  It is up
+     to the hook to use what it needs.  */
+  void (* late_global_decl) (tree decl);
+
+  /* Debug information for a type DECL.  Called from toplev.c after
+     compilation proper, also from various language front ends to
+     record built-in types.  The second argument is properly a
+     boolean, which indicates whether or not the type is a "local"
+     type as determined by the language.  (It's not a boolean for
+     legacy reasons.)  */
+  void (* type_decl) (tree decl, int local);
+
+  /* Debug information for imported modules and declarations.  */
+  void (* imported_module_or_decl) (tree decl, tree name,
+				    tree context, bool child,
+				    bool implicit);
+
+  /* Return true if a DIE for the tree is available and return a symbol
+     and offset that can be used to refer to it externally.  */
+  bool (* die_ref_for_decl) (tree, const char **, unsigned HOST_WIDE_INT *);
+
+  /* Early debug information for the tree is available at symbol plus
+     offset externally.  */
+  void (* register_external_die) (tree, const char *, unsigned HOST_WIDE_INT);
+
+  /* DECL is an inline function, whose body is present, but which is
+     not being output at this point.  */
+  void (* deferred_inline_function) (tree decl);
+
+  /* DECL is an inline function which is about to be emitted out of
+     line.  The hook is useful to, e.g., emit abstract debug info for
+     the inline before it gets mangled by optimization.  */
+  void (* outlining_inline_function) (tree decl);
+
+  /* Called from final_scan_insn for any CODE_LABEL insn whose
+     LABEL_NAME is non-null.  */
+  void (* label) (rtx_code_label *);
+
+  /* Called after the start and before the end of writing a PCH file.
+     The parameter is 0 if after the start, 1 if before the end.  */
+  void (* handle_pch) (unsigned int);
+
+  /* Called from final_scan_insn for any NOTE_INSN_VAR_LOCATION note.  */
+  void (* var_location) (rtx_insn *);
+
+  /* Called from final_scan_insn for any NOTE_INSN_INLINE_ENTRY note.  */
+  void (* inline_entry) (tree block);
+
+  /* Called from finalize_size_functions for size functions so that their body
+     can be encoded in the debug info to describe the layout of variable-length
+     structures.  */
+  void (* size_function) (tree decl);
+
+  /* Called from final_scan_insn if there is a switch between hot and cold
+     text sections.  */
+  void (* switch_text_section) (void);
+
+  /* Called from grokdeclarator.  Replaces the anonymous name with the
+     type name.  */
+  void (* set_name) (tree, tree);
+
+  /* This is 1 if the debug writer wants to see start and end commands for the
+     main source files, and 0 otherwise.  */
+  int start_end_main_source_file;
+
+  /* The type of symtab field used by these debug hooks.  This is one
+     of the TYPE_SYMTAB_IS_xxx values defined in tree.h.  */
+  int tree_type_symtab_field;
+};
+
+extern const struct gcc_debug_hooks *debug_hooks;
+
+/* The do-nothing hooks.  */
+extern void debug_nothing_void (void);
+extern void debug_nothing_charstar (const char *);
+extern void debug_nothing_int_int_charstar (unsigned int, unsigned int,
+					    const char *);
+extern void debug_nothing_int_charstar (unsigned int, const char *);
+extern void debug_nothing_int_int_charstar_int_bool (unsigned int,
+						     unsigned int,
+						     const char *,
+						     int, bool);
+extern void debug_nothing_int (unsigned int);
+extern void debug_nothing_int_int (unsigned int, unsigned int);
+extern void debug_nothing_tree (tree);
+extern void debug_nothing_tree_tree (tree, tree);
+extern void debug_nothing_tree_int (tree, int);
+extern void debug_nothing_tree_tree_tree_bool_bool (tree, tree, tree,
+						    bool, bool);
+extern bool debug_true_const_tree (const_tree);
+extern void debug_nothing_rtx_insn (rtx_insn *);
+extern void debug_nothing_rtx_code_label (rtx_code_label *);
+extern bool debug_false_tree_charstarstar_uhwistar (tree, const char **,
+						    unsigned HOST_WIDE_INT *);
+extern void debug_nothing_tree_charstar_uhwi (tree, const char *,
+					      unsigned HOST_WIDE_INT);
+
+/* Hooks for various debug formats.  */
+extern const struct gcc_debug_hooks do_nothing_debug_hooks;
+extern const struct gcc_debug_hooks dbx_debug_hooks;
+extern const struct gcc_debug_hooks xcoff_debug_hooks;
+extern const struct gcc_debug_hooks dwarf2_debug_hooks;
+extern const struct gcc_debug_hooks dwarf2_lineno_debug_hooks;
+extern const struct gcc_debug_hooks vmsdbg_debug_hooks;
+
+/* Dwarf2 frame information.  */
+
+extern void dwarf2out_begin_prologue (unsigned int, unsigned int,
+				      const char *);
+extern void dwarf2out_vms_end_prologue (unsigned int, const char *);
+extern void dwarf2out_vms_begin_epilogue (unsigned int, const char *);
+extern void dwarf2out_end_epilogue (unsigned int, const char *);
+extern void dwarf2out_frame_finish (void);
+extern bool dwarf2out_do_eh_frame (void);
+extern bool dwarf2out_do_frame (void);
+extern bool dwarf2out_do_cfi_asm (void);
+extern void dwarf2out_switch_text_section (void);
+extern bool dwarf2out_default_as_loc_support (void);
+extern bool dwarf2out_default_as_locview_support (void);
+
+/* For -fdump-go-spec.  */
+
+extern const struct gcc_debug_hooks *
+dump_go_spec_init (const char *, const struct gcc_debug_hooks *);
+
+/* Instance discriminator mapping table.  See final.c.  */
+typedef hash_map<const_tree, int> decl_to_instance_map_t;
+extern decl_to_instance_map_t *decl_to_instance_map;
+
+/* Allocate decl_to_instance_map with COUNT slots to begin wtih, if it
+ * hasn't been allocated yet.  */
+
+static inline decl_to_instance_map_t *
+maybe_create_decl_to_instance_map (int count = 13)
+{
+  if (!decl_to_instance_map)
+    decl_to_instance_map = new decl_to_instance_map_t (count);
+  return decl_to_instance_map;
+}
+
+#endif /* !GCC_DEBUG_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/defaults.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/defaults.h
new file mode 100644
index 0000000..b753425
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/defaults.h
@@ -0,0 +1,1462 @@
+/* Definitions of various defaults for tm.h macros.
+   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+   Contributed by Ron Guilmette (rfg@monkeys.com)
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_DEFAULTS_H
+#define GCC_DEFAULTS_H
+
+/* How to start an assembler comment.  */
+#ifndef ASM_COMMENT_START
+#define ASM_COMMENT_START ";#"
+#endif
+
+/* Store in OUTPUT a string (made with alloca) containing an
+   assembler-name for a local static variable or function named NAME.
+   LABELNO is an integer which is different for each call.  */
+
+#ifndef ASM_PN_FORMAT
+# ifndef NO_DOT_IN_LABEL
+#  define ASM_PN_FORMAT "%s.%lu"
+# else
+#  ifndef NO_DOLLAR_IN_LABEL
+#   define ASM_PN_FORMAT "%s$%lu"
+#  else
+#   define ASM_PN_FORMAT "__%s_%lu"
+#  endif
+# endif
+#endif /* ! ASM_PN_FORMAT */
+
+#ifndef ASM_FORMAT_PRIVATE_NAME
+# define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
+  do { const char *const name_ = (NAME); \
+       char *const output_ = (OUTPUT) = \
+	 (char *) alloca (strlen (name_) + 32); \
+       sprintf (output_, ASM_PN_FORMAT, name_, (unsigned long)(LABELNO)); \
+  } while (0)
+#endif
+
+/* Choose a reasonable default for ASM_OUTPUT_ASCII.  */
+
+#ifndef ASM_OUTPUT_ASCII
+#define ASM_OUTPUT_ASCII(MYFILE, MYSTRING, MYLENGTH) \
+  do {									      \
+    FILE *_hide_asm_out_file = (MYFILE);				      \
+    const unsigned char *_hide_p = (const unsigned char *) (MYSTRING);	      \
+    int _hide_thissize = (MYLENGTH);					      \
+    {									      \
+      FILE *asm_out_file = _hide_asm_out_file;				      \
+      const unsigned char *p = _hide_p;					      \
+      int thissize = _hide_thissize;					      \
+      int i;								      \
+      fprintf (asm_out_file, "\t.ascii \"");				      \
+									      \
+      for (i = 0; i < thissize; i++)					      \
+	{								      \
+	  int c = p[i];			   				      \
+	  if (c == '\"' || c == '\\')					      \
+	    putc ('\\', asm_out_file);					      \
+	  if (ISPRINT (c))						      \
+	    putc (c, asm_out_file);					      \
+	  else								      \
+	    {								      \
+	      fprintf (asm_out_file, "\\%o", c);			      \
+	      /* After an octal-escape, if a digit follows,		      \
+		 terminate one string constant and start another.	      \
+		 The VAX assembler fails to stop reading the escape	      \
+		 after three digits, so this is the only way we		      \
+		 can get it to parse the data properly.  */		      \
+	      if (i < thissize - 1 && ISDIGIT (p[i + 1]))		      \
+		fprintf (asm_out_file, "\"\n\t.ascii \"");		      \
+	  }								      \
+	}								      \
+      fprintf (asm_out_file, "\"\n");					      \
+    }									      \
+  }									      \
+  while (0)
+#endif
+
+/* This is how we tell the assembler to equate two values.  */
+#ifdef SET_ASM_OP
+#ifndef ASM_OUTPUT_DEF
+#define ASM_OUTPUT_DEF(FILE,LABEL1,LABEL2)				\
+ do {	fprintf ((FILE), "%s", SET_ASM_OP);				\
+	assemble_name (FILE, LABEL1);					\
+	fprintf (FILE, ",");						\
+	assemble_name (FILE, LABEL2);					\
+	fprintf (FILE, "\n");						\
+  } while (0)
+#endif
+#endif
+
+#ifndef IFUNC_ASM_TYPE
+#define IFUNC_ASM_TYPE "gnu_indirect_function"
+#endif
+
+#ifndef TLS_COMMON_ASM_OP
+#define TLS_COMMON_ASM_OP ".tls_common"
+#endif
+
+#if defined (HAVE_AS_TLS) && !defined (ASM_OUTPUT_TLS_COMMON)
+#define ASM_OUTPUT_TLS_COMMON(FILE, DECL, NAME, SIZE)			\
+  do									\
+    {									\
+      fprintf ((FILE), "\t%s\t", TLS_COMMON_ASM_OP);			\
+      assemble_name ((FILE), (NAME));					\
+      fprintf ((FILE), "," HOST_WIDE_INT_PRINT_UNSIGNED",%u\n",		\
+	       (SIZE), DECL_ALIGN (DECL) / BITS_PER_UNIT);		\
+    }									\
+  while (0)
+#endif
+
+/* Decide whether to defer emitting the assembler output for an equate
+   of two values.  The default is to not defer output.  */
+#ifndef TARGET_DEFERRED_OUTPUT_DEFS
+#define TARGET_DEFERRED_OUTPUT_DEFS(DECL,TARGET) false
+#endif
+
+/* This is how to output the definition of a user-level label named
+   NAME, such as the label on variable NAME.  */
+
+#ifndef ASM_OUTPUT_LABEL
+#define ASM_OUTPUT_LABEL(FILE,NAME) \
+  do {						\
+    assemble_name ((FILE), (NAME));		\
+    fputs (":\n", (FILE));			\
+  } while (0)
+#endif
+
+/* This is how to output the definition of a user-level label named
+   NAME, such as the label on a function.  */
+
+#ifndef ASM_OUTPUT_FUNCTION_LABEL
+#define ASM_OUTPUT_FUNCTION_LABEL(FILE, NAME, DECL) \
+  ASM_OUTPUT_LABEL ((FILE), (NAME))
+#endif
+
+/* Output the definition of a compiler-generated label named NAME.  */
+#ifndef ASM_OUTPUT_INTERNAL_LABEL
+#define ASM_OUTPUT_INTERNAL_LABEL(FILE,NAME)	\
+  do {						\
+    assemble_name_raw ((FILE), (NAME));		\
+    fputs (":\n", (FILE));			\
+  } while (0)
+#endif
+
+/* This is how to output a reference to a user-level label named NAME.  */
+
+#ifndef ASM_OUTPUT_LABELREF
+#define ASM_OUTPUT_LABELREF(FILE,NAME)  \
+  do {							\
+    fputs (user_label_prefix, (FILE));			\
+    fputs ((NAME), (FILE));				\
+  } while (0)
+#endif
+
+/* Allow target to print debug info labels specially.  This is useful for
+   VLIW targets, since debug info labels should go into the middle of
+   instruction bundles instead of breaking them.  */
+
+#ifndef ASM_OUTPUT_DEBUG_LABEL
+#define ASM_OUTPUT_DEBUG_LABEL(FILE, PREFIX, NUM) \
+  (*targetm.asm_out.internal_label) (FILE, PREFIX, NUM)
+#endif
+
+/* This is how we tell the assembler that a symbol is weak.  */
+#ifndef ASM_OUTPUT_WEAK_ALIAS
+#if defined (ASM_WEAKEN_LABEL) && defined (ASM_OUTPUT_DEF)
+#define ASM_OUTPUT_WEAK_ALIAS(STREAM, NAME, VALUE)	\
+  do							\
+    {							\
+      ASM_WEAKEN_LABEL (STREAM, NAME);			\
+      if (VALUE)					\
+        ASM_OUTPUT_DEF (STREAM, NAME, VALUE);		\
+    }							\
+  while (0)
+#endif
+#endif
+
+/* This is how we tell the assembler that a symbol is a weak alias to
+   another symbol that doesn't require the other symbol to be defined.
+   Uses of the former will turn into weak uses of the latter, i.e.,
+   uses that, in case the latter is undefined, will not cause errors,
+   and will add it to the symbol table as weak undefined.  However, if
+   the latter is referenced directly, a strong reference prevails.  */
+#ifndef ASM_OUTPUT_WEAKREF
+#if defined HAVE_GAS_WEAKREF
+#define ASM_OUTPUT_WEAKREF(FILE, DECL, NAME, VALUE)			\
+  do									\
+    {									\
+      fprintf ((FILE), "\t.weakref\t");					\
+      assemble_name ((FILE), (NAME));					\
+      fprintf ((FILE), ",");						\
+      assemble_name ((FILE), (VALUE));					\
+      fprintf ((FILE), "\n");						\
+    }									\
+  while (0)
+#endif
+#endif
+
+/* How to emit a .type directive.  */
+#ifndef ASM_OUTPUT_TYPE_DIRECTIVE
+#if defined TYPE_ASM_OP && defined TYPE_OPERAND_FMT
+#define ASM_OUTPUT_TYPE_DIRECTIVE(STREAM, NAME, TYPE)	\
+  do							\
+    {							\
+      fputs (TYPE_ASM_OP, STREAM);			\
+      assemble_name (STREAM, NAME);			\
+      fputs (", ", STREAM);				\
+      fprintf (STREAM, TYPE_OPERAND_FMT, TYPE);		\
+      putc ('\n', STREAM);				\
+    }							\
+  while (0)
+#endif
+#endif
+
+/* How to emit a .size directive.  */
+#ifndef ASM_OUTPUT_SIZE_DIRECTIVE
+#ifdef SIZE_ASM_OP
+#define ASM_OUTPUT_SIZE_DIRECTIVE(STREAM, NAME, SIZE)	\
+  do							\
+    {							\
+      HOST_WIDE_INT size_ = (SIZE);			\
+      fputs (SIZE_ASM_OP, STREAM);			\
+      assemble_name (STREAM, NAME);			\
+      fprintf (STREAM, ", " HOST_WIDE_INT_PRINT_DEC "\n", size_); \
+    }							\
+  while (0)
+
+#define ASM_OUTPUT_MEASURED_SIZE(STREAM, NAME)		\
+  do							\
+    {							\
+      fputs (SIZE_ASM_OP, STREAM);			\
+      assemble_name (STREAM, NAME);			\
+      fputs (", .-", STREAM);				\
+      assemble_name (STREAM, NAME);			\
+      putc ('\n', STREAM);				\
+    }							\
+  while (0)
+
+#endif
+#endif
+
+/* This determines whether or not we support weak symbols.  SUPPORTS_WEAK
+   must be a preprocessor constant.  */
+#ifndef SUPPORTS_WEAK
+#if defined (ASM_WEAKEN_LABEL) || defined (ASM_WEAKEN_DECL)
+#define SUPPORTS_WEAK 1
+#else
+#define SUPPORTS_WEAK 0
+#endif
+#endif
+
+/* This determines whether or not we support weak symbols during target
+   code generation.  TARGET_SUPPORTS_WEAK can be any valid C expression.  */
+#ifndef TARGET_SUPPORTS_WEAK
+#define TARGET_SUPPORTS_WEAK (SUPPORTS_WEAK)
+#endif
+
+/* This determines whether or not we support the discriminator
+   attribute in the .loc directive.  */
+#ifndef SUPPORTS_DISCRIMINATOR
+#ifdef HAVE_GAS_DISCRIMINATOR
+#define SUPPORTS_DISCRIMINATOR 1
+#else
+#define SUPPORTS_DISCRIMINATOR 0
+#endif
+#endif
+
+/* This determines whether or not we support link-once semantics.  */
+#ifndef SUPPORTS_ONE_ONLY
+#ifdef MAKE_DECL_ONE_ONLY
+#define SUPPORTS_ONE_ONLY 1
+#else
+#define SUPPORTS_ONE_ONLY 0
+#endif
+#endif
+
+/* This determines whether weak symbols must be left out of a static
+   archive's table of contents.  Defining this macro to be nonzero has
+   the consequence that certain symbols will not be made weak that
+   otherwise would be.  The C++ ABI requires this macro to be zero;
+   see the documentation.  */
+#ifndef TARGET_WEAK_NOT_IN_ARCHIVE_TOC
+#define TARGET_WEAK_NOT_IN_ARCHIVE_TOC 0
+#endif
+
+/* This determines whether or not we need linkonce unwind information.  */
+#ifndef TARGET_USES_WEAK_UNWIND_INFO
+#define TARGET_USES_WEAK_UNWIND_INFO 0
+#endif
+
+/* By default, there is no prefix on user-defined symbols.  */
+#ifndef USER_LABEL_PREFIX
+#define USER_LABEL_PREFIX ""
+#endif
+
+/* If the target supports weak symbols, define TARGET_ATTRIBUTE_WEAK to
+   provide a weak attribute.  Else define it to nothing.
+
+   This would normally belong in ansidecl.h, but SUPPORTS_WEAK is
+   not available at that time.
+
+   Note, this is only for use by target files which we know are to be
+   compiled by GCC.  */
+#ifndef TARGET_ATTRIBUTE_WEAK
+# if SUPPORTS_WEAK
+#  define TARGET_ATTRIBUTE_WEAK __attribute__ ((weak))
+# else
+#  define TARGET_ATTRIBUTE_WEAK
+# endif
+#endif
+
+/* By default we can assume that all global symbols are in one namespace,
+   across all shared libraries.  */
+#ifndef MULTIPLE_SYMBOL_SPACES
+# define MULTIPLE_SYMBOL_SPACES 0
+#endif
+
+/* If the target supports init_priority C++ attribute, give
+   SUPPORTS_INIT_PRIORITY a nonzero value.  */
+#ifndef SUPPORTS_INIT_PRIORITY
+#define SUPPORTS_INIT_PRIORITY 1
+#endif /* SUPPORTS_INIT_PRIORITY */
+
+/* If we have a definition of INCOMING_RETURN_ADDR_RTX, assume that
+   the rest of the DWARF 2 frame unwind support is also provided.  */
+#if !defined (DWARF2_UNWIND_INFO) && defined (INCOMING_RETURN_ADDR_RTX)
+#define DWARF2_UNWIND_INFO 1
+#endif
+
+/* If we have named sections, and we're using crtstuff to run ctors,
+   use them for registering eh frame information.  */
+#if defined (TARGET_ASM_NAMED_SECTION) && DWARF2_UNWIND_INFO \
+    && !defined (EH_FRAME_THROUGH_COLLECT2)
+#ifndef EH_FRAME_SECTION_NAME
+#define EH_FRAME_SECTION_NAME ".eh_frame"
+#endif
+#endif
+
+/* On many systems, different EH table encodings are used under
+   difference circumstances.  Some will require runtime relocations;
+   some will not.  For those that do not require runtime relocations,
+   we would like to make the table read-only.  However, since the
+   read-only tables may need to be combined with read-write tables
+   that do require runtime relocation, it is not safe to make the
+   tables read-only unless the linker will merge read-only and
+   read-write sections into a single read-write section.  If your
+   linker does not have this ability, but your system is such that no
+   encoding used with non-PIC code will ever require a runtime
+   relocation, then you can define EH_TABLES_CAN_BE_READ_ONLY to 1 in
+   your target configuration file.  */
+#ifndef EH_TABLES_CAN_BE_READ_ONLY
+#ifdef HAVE_LD_RO_RW_SECTION_MIXING
+#define EH_TABLES_CAN_BE_READ_ONLY 1
+#else
+#define EH_TABLES_CAN_BE_READ_ONLY 0
+#endif
+#endif
+
+/* Provide defaults for stuff that may not be defined when using
+   sjlj exceptions.  */
+#ifndef EH_RETURN_DATA_REGNO
+#define EH_RETURN_DATA_REGNO(N) INVALID_REGNUM
+#endif
+
+/* Offset between the eh handler address and entry in eh tables.  */
+#ifndef RETURN_ADDR_OFFSET
+#define RETURN_ADDR_OFFSET 0
+#endif
+
+#ifndef MASK_RETURN_ADDR
+#define MASK_RETURN_ADDR NULL_RTX
+#endif
+
+/* Number of hardware registers that go into the DWARF-2 unwind info.
+   If not defined, equals FIRST_PSEUDO_REGISTER  */
+
+#ifndef DWARF_FRAME_REGISTERS
+#define DWARF_FRAME_REGISTERS FIRST_PSEUDO_REGISTER
+#endif
+
+/* Offsets recorded in opcodes are a multiple of this alignment factor.  */
+#ifndef DWARF_CIE_DATA_ALIGNMENT
+#ifdef STACK_GROWS_DOWNWARD
+#define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
+#else
+#define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
+#endif
+#endif
+
+/* The DWARF 2 CFA column which tracks the return address.  Normally this
+   is the column for PC, or the first column after all of the hard
+   registers.  */
+#ifndef DWARF_FRAME_RETURN_COLUMN
+#ifdef PC_REGNUM
+#define DWARF_FRAME_RETURN_COLUMN	DWARF_FRAME_REGNUM (PC_REGNUM)
+#else
+#define DWARF_FRAME_RETURN_COLUMN	DWARF_FRAME_REGISTERS
+#endif
+#endif
+
+/* How to renumber registers for dbx and gdb.  If not defined, assume
+   no renumbering is necessary.  */
+
+#ifndef DBX_REGISTER_NUMBER
+#define DBX_REGISTER_NUMBER(REGNO) (REGNO)
+#endif
+
+/* The mapping from gcc register number to DWARF 2 CFA column number.
+   By default, we just provide columns for all registers.  */
+#ifndef DWARF_FRAME_REGNUM
+#define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
+#endif
+
+/* The mapping from dwarf CFA reg number to internal dwarf reg numbers.  */
+#ifndef DWARF_REG_TO_UNWIND_COLUMN
+#define DWARF_REG_TO_UNWIND_COLUMN(REGNO) (REGNO)
+#endif
+
+/* Map register numbers held in the call frame info that gcc has
+   collected using DWARF_FRAME_REGNUM to those that should be output in
+   .debug_frame and .eh_frame.  */
+#ifndef DWARF2_FRAME_REG_OUT
+#define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
+#endif
+
+/* The size of addresses as they appear in the Dwarf 2 data.
+   Some architectures use word addresses to refer to code locations,
+   but Dwarf 2 info always uses byte addresses.  On such machines,
+   Dwarf 2 addresses need to be larger than the architecture's
+   pointers.  */
+#ifndef DWARF2_ADDR_SIZE
+#define DWARF2_ADDR_SIZE ((POINTER_SIZE + BITS_PER_UNIT - 1) / BITS_PER_UNIT)
+#endif
+
+/* The size in bytes of a DWARF field indicating an offset or length
+   relative to a debug info section, specified to be 4 bytes in the
+   DWARF-2 specification.  The SGI/MIPS ABI defines it to be the same
+   as PTR_SIZE.  */
+#ifndef DWARF_OFFSET_SIZE
+#define DWARF_OFFSET_SIZE 4
+#endif
+
+/* The size in bytes of a DWARF 4 type signature.  */
+#ifndef DWARF_TYPE_SIGNATURE_SIZE
+#define DWARF_TYPE_SIGNATURE_SIZE 8
+#endif
+
+/* Default sizes for base C types.  If the sizes are different for
+   your target, you should override these values by defining the
+   appropriate symbols in your tm.h file.  */
+
+#ifndef BITS_PER_WORD
+#define BITS_PER_WORD (BITS_PER_UNIT * UNITS_PER_WORD)
+#endif
+
+#ifndef CHAR_TYPE_SIZE
+#define CHAR_TYPE_SIZE BITS_PER_UNIT
+#endif
+
+#ifndef BOOL_TYPE_SIZE
+/* `bool' has size and alignment `1', on almost all platforms.  */
+#define BOOL_TYPE_SIZE CHAR_TYPE_SIZE
+#endif
+
+#ifndef SHORT_TYPE_SIZE
+#define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
+#endif
+
+#ifndef INT_TYPE_SIZE
+#define INT_TYPE_SIZE BITS_PER_WORD
+#endif
+
+#ifndef LONG_TYPE_SIZE
+#define LONG_TYPE_SIZE BITS_PER_WORD
+#endif
+
+#ifndef LONG_LONG_TYPE_SIZE
+#define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
+#endif
+
+#ifndef WCHAR_TYPE_SIZE
+#define WCHAR_TYPE_SIZE INT_TYPE_SIZE
+#endif
+
+#ifndef FLOAT_TYPE_SIZE
+#define FLOAT_TYPE_SIZE BITS_PER_WORD
+#endif
+
+#ifndef DOUBLE_TYPE_SIZE
+#define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
+#endif
+
+#ifndef LONG_DOUBLE_TYPE_SIZE
+#define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
+#endif
+
+#ifndef DECIMAL32_TYPE_SIZE
+#define DECIMAL32_TYPE_SIZE 32
+#endif
+
+#ifndef DECIMAL64_TYPE_SIZE
+#define DECIMAL64_TYPE_SIZE 64
+#endif
+
+#ifndef DECIMAL128_TYPE_SIZE
+#define DECIMAL128_TYPE_SIZE 128
+#endif
+
+#ifndef SHORT_FRACT_TYPE_SIZE
+#define SHORT_FRACT_TYPE_SIZE BITS_PER_UNIT
+#endif
+
+#ifndef FRACT_TYPE_SIZE
+#define FRACT_TYPE_SIZE (BITS_PER_UNIT * 2)
+#endif
+
+#ifndef LONG_FRACT_TYPE_SIZE
+#define LONG_FRACT_TYPE_SIZE (BITS_PER_UNIT * 4)
+#endif
+
+#ifndef LONG_LONG_FRACT_TYPE_SIZE
+#define LONG_LONG_FRACT_TYPE_SIZE (BITS_PER_UNIT * 8)
+#endif
+
+#ifndef SHORT_ACCUM_TYPE_SIZE
+#define SHORT_ACCUM_TYPE_SIZE (SHORT_FRACT_TYPE_SIZE * 2)
+#endif
+
+#ifndef ACCUM_TYPE_SIZE
+#define ACCUM_TYPE_SIZE (FRACT_TYPE_SIZE * 2)
+#endif
+
+#ifndef LONG_ACCUM_TYPE_SIZE
+#define LONG_ACCUM_TYPE_SIZE (LONG_FRACT_TYPE_SIZE * 2)
+#endif
+
+#ifndef LONG_LONG_ACCUM_TYPE_SIZE
+#define LONG_LONG_ACCUM_TYPE_SIZE (LONG_LONG_FRACT_TYPE_SIZE * 2)
+#endif
+
+/* We let tm.h override the types used here, to handle trivial differences
+   such as the choice of unsigned int or long unsigned int for size_t.
+   When machines start needing nontrivial differences in the size type,
+   it would be best to do something here to figure out automatically
+   from other information what type to use.  */
+
+#ifndef SIZE_TYPE
+#define SIZE_TYPE "long unsigned int"
+#endif
+
+#ifndef SIZETYPE
+#define SIZETYPE SIZE_TYPE
+#endif
+
+#ifndef PID_TYPE
+#define PID_TYPE "int"
+#endif
+
+/* If GCC knows the exact uint_least16_t and uint_least32_t types from
+   <stdint.h>, use them for char16_t and char32_t.  Otherwise, use
+   these guesses; getting the wrong type of a given width will not
+   affect C++ name mangling because in C++ these are distinct types
+   not typedefs.  */
+
+#ifndef CHAR8_TYPE
+#define CHAR8_TYPE "unsigned char"
+#endif
+
+#ifdef UINT_LEAST16_TYPE
+#define CHAR16_TYPE UINT_LEAST16_TYPE
+#else
+#define CHAR16_TYPE "short unsigned int"
+#endif
+
+#ifdef UINT_LEAST32_TYPE
+#define CHAR32_TYPE UINT_LEAST32_TYPE
+#else
+#define CHAR32_TYPE "unsigned int"
+#endif
+
+#ifndef WCHAR_TYPE
+#define WCHAR_TYPE "int"
+#endif
+
+/* WCHAR_TYPE gets overridden by -fshort-wchar.  */
+#define MODIFIED_WCHAR_TYPE \
+	(flag_short_wchar ? "short unsigned int" : WCHAR_TYPE)
+
+#ifndef PTRDIFF_TYPE
+#define PTRDIFF_TYPE "long int"
+#endif
+
+#ifndef WINT_TYPE
+#define WINT_TYPE "unsigned int"
+#endif
+
+#ifndef INTMAX_TYPE
+#define INTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE)	\
+		     ? "int"					\
+		     : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE)	\
+			? "long int"				\
+			: "long long int"))
+#endif
+
+#ifndef UINTMAX_TYPE
+#define UINTMAX_TYPE ((INT_TYPE_SIZE == LONG_LONG_TYPE_SIZE)	\
+		     ? "unsigned int"				\
+		     : ((LONG_TYPE_SIZE == LONG_LONG_TYPE_SIZE)	\
+			? "long unsigned int"			\
+			: "long long unsigned int"))
+#endif
+
+
+/* There are no default definitions of these <stdint.h> types.  */
+
+#ifndef SIG_ATOMIC_TYPE
+#define SIG_ATOMIC_TYPE ((const char *) NULL)
+#endif
+
+#ifndef INT8_TYPE
+#define INT8_TYPE ((const char *) NULL)
+#endif
+
+#ifndef INT16_TYPE
+#define INT16_TYPE ((const char *) NULL)
+#endif
+
+#ifndef INT32_TYPE
+#define INT32_TYPE ((const char *) NULL)
+#endif
+
+#ifndef INT64_TYPE
+#define INT64_TYPE ((const char *) NULL)
+#endif
+
+#ifndef UINT8_TYPE
+#define UINT8_TYPE ((const char *) NULL)
+#endif
+
+#ifndef UINT16_TYPE
+#define UINT16_TYPE ((const char *) NULL)
+#endif
+
+#ifndef UINT32_TYPE
+#define UINT32_TYPE ((const char *) NULL)
+#endif
+
+#ifndef UINT64_TYPE
+#define UINT64_TYPE ((const char *) NULL)
+#endif
+
+#ifndef INT_LEAST8_TYPE
+#define INT_LEAST8_TYPE ((const char *) NULL)
+#endif
+
+#ifndef INT_LEAST16_TYPE
+#define INT_LEAST16_TYPE ((const char *) NULL)
+#endif
+
+#ifndef INT_LEAST32_TYPE
+#define INT_LEAST32_TYPE ((const char *) NULL)
+#endif
+
+#ifndef INT_LEAST64_TYPE
+#define INT_LEAST64_TYPE ((const char *) NULL)
+#endif
+
+#ifndef UINT_LEAST8_TYPE
+#define UINT_LEAST8_TYPE ((const char *) NULL)
+#endif
+
+#ifndef UINT_LEAST16_TYPE
+#define UINT_LEAST16_TYPE ((const char *) NULL)
+#endif
+
+#ifndef UINT_LEAST32_TYPE
+#define UINT_LEAST32_TYPE ((const char *) NULL)
+#endif
+
+#ifndef UINT_LEAST64_TYPE
+#define UINT_LEAST64_TYPE ((const char *) NULL)
+#endif
+
+#ifndef INT_FAST8_TYPE
+#define INT_FAST8_TYPE ((const char *) NULL)
+#endif
+
+#ifndef INT_FAST16_TYPE
+#define INT_FAST16_TYPE ((const char *) NULL)
+#endif
+
+#ifndef INT_FAST32_TYPE
+#define INT_FAST32_TYPE ((const char *) NULL)
+#endif
+
+#ifndef INT_FAST64_TYPE
+#define INT_FAST64_TYPE ((const char *) NULL)
+#endif
+
+#ifndef UINT_FAST8_TYPE
+#define UINT_FAST8_TYPE ((const char *) NULL)
+#endif
+
+#ifndef UINT_FAST16_TYPE
+#define UINT_FAST16_TYPE ((const char *) NULL)
+#endif
+
+#ifndef UINT_FAST32_TYPE
+#define UINT_FAST32_TYPE ((const char *) NULL)
+#endif
+
+#ifndef UINT_FAST64_TYPE
+#define UINT_FAST64_TYPE ((const char *) NULL)
+#endif
+
+#ifndef INTPTR_TYPE
+#define INTPTR_TYPE ((const char *) NULL)
+#endif
+
+#ifndef UINTPTR_TYPE
+#define UINTPTR_TYPE ((const char *) NULL)
+#endif
+
+/* Width in bits of a pointer.  Mind the value of the macro `Pmode'.  */
+#ifndef POINTER_SIZE
+#define POINTER_SIZE BITS_PER_WORD
+#endif
+#ifndef POINTER_SIZE_UNITS
+#define POINTER_SIZE_UNITS ((POINTER_SIZE + BITS_PER_UNIT - 1) / BITS_PER_UNIT)
+#endif
+
+
+#ifndef PIC_OFFSET_TABLE_REGNUM
+#define PIC_OFFSET_TABLE_REGNUM INVALID_REGNUM
+#endif
+
+#ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
+#define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED 0
+#endif
+
+#ifndef TARGET_DLLIMPORT_DECL_ATTRIBUTES
+#define TARGET_DLLIMPORT_DECL_ATTRIBUTES 0
+#endif
+
+#ifndef TARGET_DECLSPEC
+#if TARGET_DLLIMPORT_DECL_ATTRIBUTES
+/* If the target supports the "dllimport" attribute, users are
+   probably used to the "__declspec" syntax.  */
+#define TARGET_DECLSPEC 1
+#else
+#define TARGET_DECLSPEC 0
+#endif
+#endif
+
+/* By default, the preprocessor should be invoked the same way in C++
+   as in C.  */
+#ifndef CPLUSPLUS_CPP_SPEC
+#ifdef CPP_SPEC
+#define CPLUSPLUS_CPP_SPEC CPP_SPEC
+#endif
+#endif
+
+#ifndef ACCUMULATE_OUTGOING_ARGS
+#define ACCUMULATE_OUTGOING_ARGS 0
+#endif
+
+/* By default, use the GNU runtime for Objective C.  */
+#ifndef NEXT_OBJC_RUNTIME
+#define NEXT_OBJC_RUNTIME 0
+#endif
+
+/* Supply a default definition for PUSH_ARGS.  */
+#ifndef PUSH_ARGS
+#ifdef PUSH_ROUNDING
+#define PUSH_ARGS	!ACCUMULATE_OUTGOING_ARGS
+#else
+#define PUSH_ARGS	0
+#endif
+#endif
+
+/* Decide whether a function's arguments should be processed
+   from first to last or from last to first.
+
+   They should if the stack and args grow in opposite directions, but
+   only if we have push insns.  */
+
+#ifdef PUSH_ROUNDING
+
+#ifndef PUSH_ARGS_REVERSED
+#if defined (STACK_GROWS_DOWNWARD) != defined (ARGS_GROW_DOWNWARD)
+#define PUSH_ARGS_REVERSED  PUSH_ARGS
+#endif
+#endif
+
+#endif
+
+#ifndef PUSH_ARGS_REVERSED
+#define PUSH_ARGS_REVERSED 0
+#endif
+
+/* Default value for the alignment (in bits) a C conformant malloc has to
+   provide. This default is intended to be safe and always correct.  */
+#ifndef MALLOC_ABI_ALIGNMENT
+#define MALLOC_ABI_ALIGNMENT BITS_PER_WORD
+#endif
+
+/* If PREFERRED_STACK_BOUNDARY is not defined, set it to STACK_BOUNDARY.
+   STACK_BOUNDARY is required.  */
+#ifndef PREFERRED_STACK_BOUNDARY
+#define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY
+#endif
+
+/* Set INCOMING_STACK_BOUNDARY to PREFERRED_STACK_BOUNDARY if it is not
+   defined.  */
+#ifndef INCOMING_STACK_BOUNDARY
+#define INCOMING_STACK_BOUNDARY PREFERRED_STACK_BOUNDARY
+#endif
+
+#ifndef TARGET_DEFAULT_PACK_STRUCT
+#define TARGET_DEFAULT_PACK_STRUCT 0
+#endif
+
+/* By default, the vtable entries are void pointers, the so the alignment
+   is the same as pointer alignment.  The value of this macro specifies
+   the alignment of the vtable entry in bits.  It should be defined only
+   when special alignment is necessary.  */
+#ifndef TARGET_VTABLE_ENTRY_ALIGN
+#define TARGET_VTABLE_ENTRY_ALIGN POINTER_SIZE
+#endif
+
+/* There are a few non-descriptor entries in the vtable at offsets below
+   zero.  If these entries must be padded (say, to preserve the alignment
+   specified by TARGET_VTABLE_ENTRY_ALIGN), set this to the number of
+   words in each data entry.  */
+#ifndef TARGET_VTABLE_DATA_ENTRY_DISTANCE
+#define TARGET_VTABLE_DATA_ENTRY_DISTANCE 1
+#endif
+
+/* Decide whether it is safe to use a local alias for a virtual function
+   when constructing thunks.  */
+#ifndef TARGET_USE_LOCAL_THUNK_ALIAS_P
+#ifdef ASM_OUTPUT_DEF
+#define TARGET_USE_LOCAL_THUNK_ALIAS_P(DECL) 1
+#else
+#define TARGET_USE_LOCAL_THUNK_ALIAS_P(DECL) 0
+#endif
+#endif
+
+/* Decide whether target supports aliases.  */
+#ifndef TARGET_SUPPORTS_ALIASES
+#ifdef ASM_OUTPUT_DEF
+#define TARGET_SUPPORTS_ALIASES 1
+#else
+#define TARGET_SUPPORTS_ALIASES 0
+#endif
+#endif
+
+/* Select a format to encode pointers in exception handling data.  We
+   prefer those that result in fewer dynamic relocations.  Assume no
+   special support here and encode direct references.  */
+#ifndef ASM_PREFERRED_EH_DATA_FORMAT
+#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL)  DW_EH_PE_absptr
+#endif
+
+/* By default, the C++ compiler will use the lowest bit of the pointer
+   to function to indicate a pointer-to-member-function points to a
+   virtual member function.  However, if FUNCTION_BOUNDARY indicates
+   function addresses aren't always even, the lowest bit of the delta
+   field will be used.  */
+#ifndef TARGET_PTRMEMFUNC_VBIT_LOCATION
+#define TARGET_PTRMEMFUNC_VBIT_LOCATION \
+  (FUNCTION_BOUNDARY >= 2 * BITS_PER_UNIT \
+   ? ptrmemfunc_vbit_in_pfn : ptrmemfunc_vbit_in_delta)
+#endif
+
+#ifndef DEFAULT_GDB_EXTENSIONS
+#define DEFAULT_GDB_EXTENSIONS 1
+#endif
+
+/* If more than one debugging type is supported, you must define
+   PREFERRED_DEBUGGING_TYPE to choose the default.  */
+
+#if 1 < (defined (DBX_DEBUGGING_INFO) \
+         + defined (DWARF2_DEBUGGING_INFO) + defined (XCOFF_DEBUGGING_INFO) \
+         + defined (VMS_DEBUGGING_INFO))
+#ifndef PREFERRED_DEBUGGING_TYPE
+#error You must define PREFERRED_DEBUGGING_TYPE
+#endif /* no PREFERRED_DEBUGGING_TYPE */
+
+/* If only one debugging format is supported, define PREFERRED_DEBUGGING_TYPE
+   here so other code needn't care.  */
+#elif defined DBX_DEBUGGING_INFO
+#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+
+#elif defined DWARF2_DEBUGGING_INFO || defined DWARF2_LINENO_DEBUGGING_INFO
+#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
+
+#elif defined VMS_DEBUGGING_INFO
+#define PREFERRED_DEBUGGING_TYPE VMS_AND_DWARF2_DEBUG
+
+#elif defined XCOFF_DEBUGGING_INFO
+#define PREFERRED_DEBUGGING_TYPE XCOFF_DEBUG
+
+#else
+/* No debugging format is supported by this target.  */
+#define PREFERRED_DEBUGGING_TYPE NO_DEBUG
+#endif
+
+#ifndef FLOAT_LIB_COMPARE_RETURNS_BOOL
+#define FLOAT_LIB_COMPARE_RETURNS_BOOL(MODE, COMPARISON) false
+#endif
+
+/* True if the targets integer-comparison functions return { 0, 1, 2
+   } to indicate { <, ==, > }.  False if { -1, 0, 1 } is used
+   instead.  The libgcc routines are biased.  */
+#ifndef TARGET_LIB_INT_CMP_BIASED
+#define TARGET_LIB_INT_CMP_BIASED (true)
+#endif
+
+/* If FLOAT_WORDS_BIG_ENDIAN is not defined in the header files,
+   then the word-endianness is the same as for integers.  */
+#ifndef FLOAT_WORDS_BIG_ENDIAN
+#define FLOAT_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN
+#endif
+
+#ifndef REG_WORDS_BIG_ENDIAN
+#define REG_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN
+#endif
+
+
+#ifndef TARGET_DEC_EVAL_METHOD
+#define TARGET_DEC_EVAL_METHOD 2
+#endif
+
+#ifndef HAS_LONG_COND_BRANCH
+#define HAS_LONG_COND_BRANCH 0
+#endif
+
+#ifndef HAS_LONG_UNCOND_BRANCH
+#define HAS_LONG_UNCOND_BRANCH 0
+#endif
+
+/* Determine whether __cxa_atexit, rather than atexit, is used to
+   register C++ destructors for local statics and global objects.  */
+#ifndef DEFAULT_USE_CXA_ATEXIT
+#define DEFAULT_USE_CXA_ATEXIT 0
+#endif
+
+#if GCC_VERSION >= 3000 && defined IN_GCC
+/* These old constraint macros shouldn't appear anywhere in a
+   configuration using MD constraint definitions.  */
+#endif
+
+/* Determin whether the target runtime library is Bionic */
+#ifndef TARGET_HAS_BIONIC
+#define TARGET_HAS_BIONIC 0
+#endif
+
+/* Indicate that CLZ and CTZ are undefined at zero.  */
+#ifndef CLZ_DEFINED_VALUE_AT_ZERO
+#define CLZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE)  0
+#endif
+#ifndef CTZ_DEFINED_VALUE_AT_ZERO
+#define CTZ_DEFINED_VALUE_AT_ZERO(MODE, VALUE)  0
+#endif
+
+/* Provide a default value for STORE_FLAG_VALUE.  */
+#ifndef STORE_FLAG_VALUE
+#define STORE_FLAG_VALUE  1
+#endif
+
+/* This macro is used to determine what the largest unit size that
+   move_by_pieces can use is.  */
+
+/* MOVE_MAX_PIECES is the number of bytes at a time which we can
+   move efficiently, as opposed to  MOVE_MAX which is the maximum
+   number of bytes we can move with a single instruction.  */
+
+#ifndef MOVE_MAX_PIECES
+#define MOVE_MAX_PIECES   MOVE_MAX
+#endif
+
+/* STORE_MAX_PIECES is the number of bytes at a time that we can
+   store efficiently.  Due to internal GCC limitations, this is
+   MOVE_MAX_PIECES limited by the number of bytes GCC can represent
+   for an immediate constant.  */
+
+#ifndef STORE_MAX_PIECES
+#define STORE_MAX_PIECES  MIN (MOVE_MAX_PIECES, 2 * sizeof (HOST_WIDE_INT))
+#endif
+
+/* Likewise for block comparisons.  */
+#ifndef COMPARE_MAX_PIECES
+#define COMPARE_MAX_PIECES  MOVE_MAX_PIECES
+#endif
+
+#ifndef MAX_MOVE_MAX
+#define MAX_MOVE_MAX MOVE_MAX
+#endif
+
+#ifndef MIN_UNITS_PER_WORD
+#define MIN_UNITS_PER_WORD UNITS_PER_WORD
+#endif
+
+#ifndef MAX_BITS_PER_WORD
+#define MAX_BITS_PER_WORD BITS_PER_WORD
+#endif
+
+#ifndef STACK_POINTER_OFFSET
+#define STACK_POINTER_OFFSET    0
+#endif
+
+#ifndef LOCAL_REGNO
+#define LOCAL_REGNO(REGNO)  0
+#endif
+
+#ifndef HONOR_REG_ALLOC_ORDER
+#define HONOR_REG_ALLOC_ORDER 0
+#endif
+
+/* EXIT_IGNORE_STACK should be nonzero if, when returning from a function,
+   the stack pointer does not matter.  The value is tested only in
+   functions that have frame pointers.  */
+#ifndef EXIT_IGNORE_STACK
+#define EXIT_IGNORE_STACK 0
+#endif
+
+/* Assume that case vectors are not pc-relative.  */
+#ifndef CASE_VECTOR_PC_RELATIVE
+#define CASE_VECTOR_PC_RELATIVE 0
+#endif
+
+/* Force minimum alignment to be able to use the least significant bits
+   for distinguishing descriptor addresses from code addresses.  */
+#define FUNCTION_ALIGNMENT(ALIGN)					\
+  (lang_hooks.custom_function_descriptors				\
+   && targetm.calls.custom_function_descriptors > 0			\
+   ? MAX ((ALIGN),						\
+	  2 * targetm.calls.custom_function_descriptors * BITS_PER_UNIT)\
+   : (ALIGN))
+
+/* Assume that trampolines need function alignment.  */
+#ifndef TRAMPOLINE_ALIGNMENT
+#define TRAMPOLINE_ALIGNMENT FUNCTION_ALIGNMENT (FUNCTION_BOUNDARY)
+#endif
+
+/* Register mappings for target machines without register windows.  */
+#ifndef INCOMING_REGNO
+#define INCOMING_REGNO(N) (N)
+#endif
+
+#ifndef OUTGOING_REGNO
+#define OUTGOING_REGNO(N) (N)
+#endif
+
+#ifndef SHIFT_COUNT_TRUNCATED
+#define SHIFT_COUNT_TRUNCATED 0
+#endif
+
+#ifndef LEGITIMATE_PIC_OPERAND_P
+#define LEGITIMATE_PIC_OPERAND_P(X) 1
+#endif
+
+#ifndef TARGET_MEM_CONSTRAINT
+#define TARGET_MEM_CONSTRAINT 'm'
+#endif
+
+#ifndef REVERSIBLE_CC_MODE
+#define REVERSIBLE_CC_MODE(MODE) 0
+#endif
+
+/* Biggest alignment supported by the object file format of this machine.  */
+#ifndef MAX_OFILE_ALIGNMENT
+#define MAX_OFILE_ALIGNMENT BIGGEST_ALIGNMENT
+#endif
+
+#ifndef FRAME_GROWS_DOWNWARD
+#define FRAME_GROWS_DOWNWARD 0
+#endif
+
+#ifndef RETURN_ADDR_IN_PREVIOUS_FRAME
+#define RETURN_ADDR_IN_PREVIOUS_FRAME 0
+#endif
+
+/* On most machines, the CFA coincides with the first incoming parm.  */
+#ifndef ARG_POINTER_CFA_OFFSET
+#define ARG_POINTER_CFA_OFFSET(FNDECL) \
+  (FIRST_PARM_OFFSET (FNDECL) + crtl->args.pretend_args_size)
+#endif
+
+/* On most machines, we use the CFA as DW_AT_frame_base.  */
+#ifndef CFA_FRAME_BASE_OFFSET
+#define CFA_FRAME_BASE_OFFSET(FNDECL) 0
+#endif
+
+/* The offset from the incoming value of %sp to the top of the stack frame
+   for the current function.  */
+#ifndef INCOMING_FRAME_SP_OFFSET
+#define INCOMING_FRAME_SP_OFFSET 0
+#endif
+
+#ifndef HARD_REGNO_NREGS_HAS_PADDING
+#define HARD_REGNO_NREGS_HAS_PADDING(REGNO, MODE) 0
+#define HARD_REGNO_NREGS_WITH_PADDING(REGNO, MODE) -1
+#endif
+
+#ifndef OUTGOING_REG_PARM_STACK_SPACE
+#define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 0
+#endif
+
+/* MAX_STACK_ALIGNMENT is the maximum stack alignment guaranteed by
+   the backend.  MAX_SUPPORTED_STACK_ALIGNMENT is the maximum best
+   effort stack alignment supported by the backend.  If the backend
+   supports stack alignment, MAX_SUPPORTED_STACK_ALIGNMENT and
+   MAX_STACK_ALIGNMENT are the same.  Otherwise, the incoming stack
+   boundary will limit the maximum guaranteed stack alignment.  */
+#ifdef MAX_STACK_ALIGNMENT
+#define MAX_SUPPORTED_STACK_ALIGNMENT MAX_STACK_ALIGNMENT
+#else
+#define MAX_STACK_ALIGNMENT STACK_BOUNDARY
+#define MAX_SUPPORTED_STACK_ALIGNMENT PREFERRED_STACK_BOUNDARY
+#endif
+
+#define SUPPORTS_STACK_ALIGNMENT (MAX_STACK_ALIGNMENT > STACK_BOUNDARY)
+
+#ifndef LOCAL_ALIGNMENT
+#define LOCAL_ALIGNMENT(TYPE, ALIGNMENT) ALIGNMENT
+#endif
+
+#ifndef STACK_SLOT_ALIGNMENT
+#define STACK_SLOT_ALIGNMENT(TYPE,MODE,ALIGN) \
+  ((TYPE) ? LOCAL_ALIGNMENT ((TYPE), (ALIGN)) : (ALIGN))
+#endif
+
+#ifndef LOCAL_DECL_ALIGNMENT
+#define LOCAL_DECL_ALIGNMENT(DECL) \
+  LOCAL_ALIGNMENT (TREE_TYPE (DECL), DECL_ALIGN (DECL))
+#endif
+
+#ifndef MINIMUM_ALIGNMENT
+#define MINIMUM_ALIGNMENT(EXP,MODE,ALIGN) (ALIGN)
+#endif
+
+/* Alignment value for attribute ((aligned)).  */
+#ifndef ATTRIBUTE_ALIGNED_VALUE
+#define ATTRIBUTE_ALIGNED_VALUE BIGGEST_ALIGNMENT
+#endif
+
+/* For most ports anything that evaluates to a constant symbolic
+   or integer value is acceptable as a constant address.  */
+#ifndef CONSTANT_ADDRESS_P
+#define CONSTANT_ADDRESS_P(X)   (CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)
+#endif
+
+#ifndef MAX_FIXED_MODE_SIZE
+#define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (DImode)
+#endif
+
+/* Nonzero if structures and unions should be returned in memory.
+
+   This should only be defined if compatibility with another compiler or
+   with an ABI is needed, because it results in slower code.  */
+
+#ifndef DEFAULT_PCC_STRUCT_RETURN
+#define DEFAULT_PCC_STRUCT_RETURN 1
+#endif
+
+#ifndef PCC_BITFIELD_TYPE_MATTERS
+#define PCC_BITFIELD_TYPE_MATTERS false
+#endif
+
+#ifndef INSN_SETS_ARE_DELAYED
+#define INSN_SETS_ARE_DELAYED(INSN) false
+#endif
+
+#ifndef INSN_REFERENCES_ARE_DELAYED
+#define INSN_REFERENCES_ARE_DELAYED(INSN) false
+#endif
+
+#ifndef NO_FUNCTION_CSE
+#define NO_FUNCTION_CSE false
+#endif
+
+#ifndef HARD_REGNO_RENAME_OK
+#define HARD_REGNO_RENAME_OK(FROM, TO) true
+#endif
+
+#ifndef EPILOGUE_USES
+#define EPILOGUE_USES(REG) false
+#endif
+
+#ifndef ARGS_GROW_DOWNWARD
+#define ARGS_GROW_DOWNWARD 0
+#endif
+
+#ifndef STACK_GROWS_DOWNWARD
+#define STACK_GROWS_DOWNWARD 0
+#endif
+
+#ifndef STACK_PUSH_CODE
+#if STACK_GROWS_DOWNWARD
+#define STACK_PUSH_CODE PRE_DEC
+#else
+#define STACK_PUSH_CODE PRE_INC
+#endif
+#endif
+
+/* Default value for flag_pie when flag_pie is initialized to -1:
+   --enable-default-pie: Default flag_pie to -fPIE.
+   --disable-default-pie: Default flag_pie to 0.
+ */
+#ifdef ENABLE_DEFAULT_PIE
+# ifndef DEFAULT_FLAG_PIE
+#  define DEFAULT_FLAG_PIE 2
+# endif
+#else
+# define DEFAULT_FLAG_PIE 0
+#endif
+
+#ifndef SWITCHABLE_TARGET
+#define SWITCHABLE_TARGET 0
+#endif
+
+/* If the target supports integers that are wider than two
+   HOST_WIDE_INTs on the host compiler, then the target should define
+   TARGET_SUPPORTS_WIDE_INT and make the appropriate fixups.
+   Otherwise the compiler really is not robust.  */
+#ifndef TARGET_SUPPORTS_WIDE_INT
+#define TARGET_SUPPORTS_WIDE_INT 0
+#endif
+
+#ifndef SHORT_IMMEDIATES_SIGN_EXTEND
+#define SHORT_IMMEDIATES_SIGN_EXTEND 0
+#endif
+
+#ifndef WORD_REGISTER_OPERATIONS
+#define WORD_REGISTER_OPERATIONS 0
+#endif
+
+#ifndef LOAD_EXTEND_OP
+#define LOAD_EXTEND_OP(M) UNKNOWN
+#endif
+
+#ifndef INITIAL_FRAME_ADDRESS_RTX
+#define INITIAL_FRAME_ADDRESS_RTX NULL
+#endif
+
+#ifndef SETUP_FRAME_ADDRESSES
+#define SETUP_FRAME_ADDRESSES() do { } while (0)
+#endif
+
+#ifndef DYNAMIC_CHAIN_ADDRESS
+#define DYNAMIC_CHAIN_ADDRESS(x) (x)
+#endif
+
+#ifndef FRAME_ADDR_RTX
+#define FRAME_ADDR_RTX(x) (x)
+#endif
+
+#ifndef REVERSE_CONDITION
+#define REVERSE_CONDITION(code, mode) reverse_condition (code)
+#endif
+
+#ifndef TARGET_PECOFF
+#define TARGET_PECOFF 0
+#endif
+
+#ifndef TARGET_COFF
+#define TARGET_COFF 0
+#endif
+
+#ifndef EH_RETURN_HANDLER_RTX
+#define EH_RETURN_HANDLER_RTX NULL
+#endif
+
+#ifdef GCC_INSN_FLAGS_H
+/* Dependent default target macro definitions
+
+   This section of defaults.h defines target macros that depend on generated
+   headers.  This is a bit awkward:  We want to put all default definitions
+   for target macros in defaults.h, but some of the defaults depend on the
+   HAVE_* flags defines of insn-flags.h.  But insn-flags.h is not always
+   included by files that do include defaults.h.
+
+   Fortunately, the default macro definitions that depend on the HAVE_*
+   macros are also the ones that will only be used inside GCC itself, i.e.
+   not in the gen* programs or in target objects like libgcc.
+
+   Obviously, it would be best to keep this section of defaults.h as small
+   as possible, by converting the macros defined below to target hooks or
+   functions.
+*/
+
+/* The default branch cost is 1.  */
+#ifndef BRANCH_COST
+#define BRANCH_COST(speed_p, predictable_p) 1
+#endif
+
+/* If a memory-to-memory move would take MOVE_RATIO or more simple
+   move-instruction sequences, we will do a movmem or libcall instead.  */
+
+#ifndef MOVE_RATIO
+#if defined (HAVE_movmemqi) || defined (HAVE_movmemhi) || defined (HAVE_movmemsi) || defined (HAVE_movmemdi) || defined (HAVE_movmemti)
+#define MOVE_RATIO(speed) 2
+#else
+/* If we are optimizing for space (-Os), cut down the default move ratio.  */
+#define MOVE_RATIO(speed) ((speed) ? 15 : 3)
+#endif
+#endif
+
+/* If a clear memory operation would take CLEAR_RATIO or more simple
+   move-instruction sequences, we will do a setmem or libcall instead.  */
+
+#ifndef CLEAR_RATIO
+#if defined (HAVE_setmemqi) || defined (HAVE_setmemhi) || defined (HAVE_setmemsi) || defined (HAVE_setmemdi) || defined (HAVE_setmemti)
+#define CLEAR_RATIO(speed) 2
+#else
+/* If we are optimizing for space, cut down the default clear ratio.  */
+#define CLEAR_RATIO(speed) ((speed) ? 15 :3)
+#endif
+#endif
+
+/* If a memory set (to value other than zero) operation would take
+   SET_RATIO or more simple move-instruction sequences, we will do a movmem
+   or libcall instead.  */
+#ifndef SET_RATIO
+#define SET_RATIO(speed) MOVE_RATIO (speed)
+#endif
+
+/* Supply a default definition of STACK_SAVEAREA_MODE for emit_stack_save.
+   Normally move_insn, so Pmode stack pointer.  */
+
+#ifndef STACK_SAVEAREA_MODE
+#define STACK_SAVEAREA_MODE(LEVEL) Pmode
+#endif
+
+/* Supply a default definition of STACK_SIZE_MODE for
+   allocate_dynamic_stack_space.  Normally PLUS/MINUS, so word_mode.  */
+
+#ifndef STACK_SIZE_MODE
+#define STACK_SIZE_MODE word_mode
+#endif
+
+/* Default value for flag_stack_protect when flag_stack_protect is initialized to -1:
+   --enable-default-ssp: Default flag_stack_protect to -fstack-protector-strong.
+   --disable-default-ssp: Default flag_stack_protect to 0.
+ */
+#ifdef ENABLE_DEFAULT_SSP
+# ifndef DEFAULT_FLAG_SSP
+#  define DEFAULT_FLAG_SSP 3
+# endif
+#else
+# define DEFAULT_FLAG_SSP 0
+#endif
+
+/* Provide default values for the macros controlling stack checking.  */
+
+/* The default is neither full builtin stack checking...  */
+#ifndef STACK_CHECK_BUILTIN
+#define STACK_CHECK_BUILTIN 0
+#endif
+
+/* ...nor static builtin stack checking.  */
+#ifndef STACK_CHECK_STATIC_BUILTIN
+#define STACK_CHECK_STATIC_BUILTIN 0
+#endif
+
+/* The default interval is one page (4096 bytes).  */
+#ifndef STACK_CHECK_PROBE_INTERVAL_EXP
+#define STACK_CHECK_PROBE_INTERVAL_EXP 12
+#endif
+
+/* The default is not to move the stack pointer.  */
+#ifndef STACK_CHECK_MOVING_SP
+#define STACK_CHECK_MOVING_SP 0
+#endif
+
+/* This is a kludge to try to capture the discrepancy between the old
+   mechanism (generic stack checking) and the new mechanism (static
+   builtin stack checking).  STACK_CHECK_PROTECT needs to be bumped
+   for the latter because part of the protection area is effectively
+   included in STACK_CHECK_MAX_FRAME_SIZE for the former.  */
+#ifdef STACK_CHECK_PROTECT
+#define STACK_OLD_CHECK_PROTECT STACK_CHECK_PROTECT
+#else
+#define STACK_OLD_CHECK_PROTECT						\
+ (!global_options.x_flag_exceptions					\
+  ? 75 * UNITS_PER_WORD							\
+  : targetm_common.except_unwind_info (&global_options) == UI_SJLJ	\
+    ? 4 * 1024								\
+    : 8 * 1024)
+#endif
+
+/* Minimum amount of stack required to recover from an anticipated stack
+   overflow detection.  The default value conveys an estimate of the amount
+   of stack required to propagate an exception.  */
+#ifndef STACK_CHECK_PROTECT
+#define STACK_CHECK_PROTECT						\
+ (!global_options.x_flag_exceptions					\
+  ? 4 * 1024								\
+  : targetm_common.except_unwind_info (&global_options) == UI_SJLJ	\
+    ? 8 * 1024								\
+    : 12 * 1024)
+#endif
+
+/* Make the maximum frame size be the largest we can and still only need
+   one probe per function.  */
+#ifndef STACK_CHECK_MAX_FRAME_SIZE
+#define STACK_CHECK_MAX_FRAME_SIZE \
+  ((1 << STACK_CHECK_PROBE_INTERVAL_EXP) - UNITS_PER_WORD)
+#endif
+
+/* This is arbitrary, but should be large enough everywhere.  */
+#ifndef STACK_CHECK_FIXED_FRAME_SIZE
+#define STACK_CHECK_FIXED_FRAME_SIZE (4 * UNITS_PER_WORD)
+#endif
+
+/* Provide a reasonable default for the maximum size of an object to
+   allocate in the fixed frame.  We may need to be able to make this
+   controllable by the user at some point.  */
+#ifndef STACK_CHECK_MAX_VAR_SIZE
+#define STACK_CHECK_MAX_VAR_SIZE (STACK_CHECK_MAX_FRAME_SIZE / 100)
+#endif
+
+/* By default, the C++ compiler will use function addresses in the
+   vtable entries.  Setting this nonzero tells the compiler to use
+   function descriptors instead.  The value of this macro says how
+   many words wide the descriptor is (normally 2).  It is assumed
+   that the address of a function descriptor may be treated as a
+   pointer to a function.  */
+#ifndef TARGET_VTABLE_USES_DESCRIPTORS
+#define TARGET_VTABLE_USES_DESCRIPTORS 0
+#endif
+
+#endif /* GCC_INSN_FLAGS_H  */
+
+#ifndef DWARF_GNAT_ENCODINGS_DEFAULT
+#define DWARF_GNAT_ENCODINGS_DEFAULT DWARF_GNAT_ENCODINGS_GDB
+#endif
+
+#endif  /* ! GCC_DEFAULTS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/df.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/df.h
new file mode 100644
index 0000000..d76d31b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/df.h
@@ -0,0 +1,1243 @@
+/* Form lists of pseudo register references for autoinc optimization
+   for GNU compiler.  This is part of flow optimization.
+   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Originally contributed by Michael P. Hayes
+             (m.hayes@elec.canterbury.ac.nz, mhayes@redhat.com)
+   Major rewrite contributed by Danny Berlin (dberlin@dberlin.org)
+             and Kenneth Zadeck (zadeck@naturalbridge.com).
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_DF_H
+#define GCC_DF_H
+
+#include "regset.h"
+#include "alloc-pool.h"
+#include "timevar.h"
+
+struct dataflow;
+struct df_d;
+struct df_problem;
+struct df_link;
+struct df_insn_info;
+union df_ref_d;
+
+/* Data flow problems.  All problems must have a unique id here.  */
+
+/* Scanning is not really a dataflow problem, but it is useful to have
+   the basic block functions in the vector so that things get done in
+   a uniform manner.  The last four problems can be added or deleted
+   at any time are always defined (though LIVE is always there at -O2
+   or higher); the others are always there.  */
+enum df_problem_id
+  {
+    DF_SCAN,
+    DF_LR,                /* Live Registers backward. */
+    DF_LIVE,              /* Live Registers & Uninitialized Registers */
+    DF_RD,                /* Reaching Defs. */
+    DF_CHAIN,             /* Def-Use and/or Use-Def Chains. */
+    DF_WORD_LR,           /* Subreg tracking lr.  */
+    DF_NOTE,              /* REG_DEAD and REG_UNUSED notes.  */
+    DF_MD,                /* Multiple Definitions. */
+    DF_MIR,               /* Must-initialized Registers.  */
+
+    DF_LAST_PROBLEM_PLUS1
+  };
+
+/* Dataflow direction.  */
+enum df_flow_dir
+  {
+    DF_NONE,
+    DF_FORWARD,
+    DF_BACKWARD
+  };
+
+/* Descriminator for the various df_ref types.  */
+enum df_ref_class {DF_REF_BASE, DF_REF_ARTIFICIAL, DF_REF_REGULAR};
+
+/* The first of these us a set of a registers.  The remaining three
+   are all uses of a register (the mem_load and mem_store relate to
+   how the register as an addressing operand).  */
+enum df_ref_type {DF_REF_REG_DEF, DF_REF_REG_USE,
+		  DF_REF_REG_MEM_LOAD, DF_REF_REG_MEM_STORE};
+
+enum df_ref_flags
+  {
+    /* This flag is set if this ref occurs inside of a conditional
+       execution instruction.  */
+    DF_REF_CONDITIONAL = 1 << 0,
+
+    /* If this flag is set for an artificial use or def, that ref
+       logically happens at the top of the block.  If it is not set
+       for an artificial use or def, that ref logically happens at the
+       bottom of the block.  This is never set for regular refs.  */
+    DF_REF_AT_TOP = 1 << 1,
+
+    /* This flag is set if the use is inside a REG_EQUAL or REG_EQUIV
+       note.  */
+    DF_REF_IN_NOTE = 1 << 2,
+
+    /* This bit is true if this ref can make regs_ever_live true for
+       this regno.  */
+    DF_HARD_REG_LIVE = 1 << 3,
+
+
+    /* This flag is set if this ref is a partial use or def of the
+       associated register.  */
+    DF_REF_PARTIAL = 1 << 4,
+
+    /* Read-modify-write refs generate both a use and a def and
+       these are marked with this flag to show that they are not
+       independent.  */
+    DF_REF_READ_WRITE = 1 << 5,
+
+    /* This flag is set if this ref, generally a def, may clobber the
+       referenced register.  This is generally only set for hard
+       registers that cross a call site.  With better information
+       about calls, some of these could be changed in the future to
+       DF_REF_MUST_CLOBBER.  */
+    DF_REF_MAY_CLOBBER = 1 << 6,
+
+    /* This flag is set if this ref, generally a def, is a real
+       clobber. This is not currently set for registers live across a
+       call because that clobbering may or may not happen.
+
+       Most of the uses of this are with sets that have a
+       GET_CODE(..)==CLOBBER.  Note that this is set even if the
+       clobber is to a subreg.  So in order to tell if the clobber
+       wipes out the entire register, it is necessary to also check
+       the DF_REF_PARTIAL flag.  */
+    DF_REF_MUST_CLOBBER = 1 << 7,
+
+
+    /* If the ref has one of the following two flags set, then the
+       struct df_ref can be cast to struct df_ref_extract to access
+       the width and offset fields.  */
+
+    /* This flag is set if the ref contains a SIGN_EXTRACT.  */
+    DF_REF_SIGN_EXTRACT = 1 << 8,
+
+    /* This flag is set if the ref contains a ZERO_EXTRACT.  */
+    DF_REF_ZERO_EXTRACT = 1 << 9,
+
+    /* This flag is set if the ref contains a STRICT_LOW_PART.  */
+    DF_REF_STRICT_LOW_PART = 1 << 10,
+
+    /* This flag is set if the ref contains a SUBREG.  */
+    DF_REF_SUBREG = 1 << 11,
+
+
+    /* This bit is true if this ref is part of a multiword hardreg.  */
+    DF_REF_MW_HARDREG = 1 << 12,
+
+    /* This flag is set if this ref is a usage of the stack pointer by
+       a function call.  */
+    DF_REF_CALL_STACK_USAGE = 1 << 13,
+
+    /* This flag is used for verification of existing refs. */
+    DF_REF_REG_MARKER = 1 << 14,
+
+    /* This flag is set if this ref is inside a pre/post modify.  */
+    DF_REF_PRE_POST_MODIFY = 1 << 15
+
+  };
+
+/* The possible ordering of refs within the df_ref_info.  */
+enum df_ref_order
+  {
+    /* There is not table.  */
+    DF_REF_ORDER_NO_TABLE,
+
+    /* There is a table of refs but it is not (or no longer) organized
+       by one of the following methods.  */
+    DF_REF_ORDER_UNORDERED,
+    DF_REF_ORDER_UNORDERED_WITH_NOTES,
+
+    /* Organize the table by reg order, all of the refs with regno 0
+       followed by all of the refs with regno 1 ... .  Within all of
+       the regs for a particular regno, the refs are unordered.  */
+    DF_REF_ORDER_BY_REG,
+
+    /* For uses, the refs within eq notes may be added for
+       DF_REF_ORDER_BY_REG.  */
+    DF_REF_ORDER_BY_REG_WITH_NOTES,
+
+    /* Organize the refs in insn order.  The insns are ordered within a
+       block, and the blocks are ordered by FOR_ALL_BB_FN.  */
+    DF_REF_ORDER_BY_INSN,
+
+    /* For uses, the refs within eq notes may be added for
+       DF_REF_ORDER_BY_INSN.  */
+    DF_REF_ORDER_BY_INSN_WITH_NOTES
+  };
+
+/* Function prototypes added to df_problem instance.  */
+
+/* Allocate the problem specific data.  */
+typedef void (*df_alloc_function) (bitmap);
+
+/* This function is called if the problem has global data that needs
+   to be cleared when ever the set of blocks changes.  The bitmap
+   contains the set of blocks that may require special attention.
+   This call is only made if some of the blocks are going to change.
+   If everything is to be deleted, the wholesale deletion mechanisms
+   apply. */
+typedef void (*df_reset_function) (bitmap);
+
+/* Free the basic block info.  Called from the block reordering code
+   to get rid of the blocks that have been squished down.   */
+typedef void (*df_free_bb_function) (basic_block, void *);
+
+/* Local compute function.  */
+typedef void (*df_local_compute_function) (bitmap);
+
+/* Init the solution specific data.  */
+typedef void (*df_init_function) (bitmap);
+
+/* Iterative dataflow function.  */
+typedef void (*df_dataflow_function) (struct dataflow *, bitmap, int *, int);
+
+/* Confluence operator for blocks with 0 out (or in) edges.  */
+typedef void (*df_confluence_function_0) (basic_block);
+
+/* Confluence operator for blocks with 1 or more out (or in) edges.
+   Return true if BB input data has changed.  */
+typedef bool (*df_confluence_function_n) (edge);
+
+/* Transfer function for blocks. 
+   Return true if BB output data has changed.  */
+typedef bool (*df_transfer_function) (int);
+
+/* Function to massage the information after the problem solving.  */
+typedef void (*df_finalizer_function) (bitmap);
+
+/* Function to free all of the problem specific datastructures.  */
+typedef void (*df_free_function) (void);
+
+/* Function to remove this problem from the stack of dataflow problems
+   without effecting the other problems in the stack except for those
+   that depend on this problem.  */
+typedef void (*df_remove_problem_function) (void);
+
+/* Function to dump basic block independent results to FILE.  */
+typedef void (*df_dump_problem_function) (FILE *);
+
+/* Function to dump top or bottom of basic block results to FILE.  */
+typedef void (*df_dump_bb_problem_function) (basic_block, FILE *);
+
+/* Function to dump before or after an insn to FILE.  */
+typedef void (*df_dump_insn_problem_function) (const rtx_insn *, FILE *);
+
+/* Function to dump top or bottom of basic block results to FILE.  */
+typedef void (*df_verify_solution_start) (void);
+
+/* Function to dump top or bottom of basic block results to FILE.  */
+typedef void (*df_verify_solution_end) (void);
+
+/* The static description of a dataflow problem to solve.  See above
+   typedefs for doc for the function fields.  */
+
+struct df_problem {
+  /* The unique id of the problem.  This is used it index into
+     df->defined_problems to make accessing the problem data easy.  */
+  enum df_problem_id id;
+  enum df_flow_dir dir;			/* Dataflow direction.  */
+  df_alloc_function alloc_fun;
+  df_reset_function reset_fun;
+  df_free_bb_function free_bb_fun;
+  df_local_compute_function local_compute_fun;
+  df_init_function init_fun;
+  df_dataflow_function dataflow_fun;
+  df_confluence_function_0 con_fun_0;
+  df_confluence_function_n con_fun_n;
+  df_transfer_function trans_fun;
+  df_finalizer_function finalize_fun;
+  df_free_function free_fun;
+  df_remove_problem_function remove_problem_fun;
+  df_dump_problem_function dump_start_fun;
+  df_dump_bb_problem_function dump_top_fun;
+  df_dump_bb_problem_function dump_bottom_fun;
+  df_dump_insn_problem_function dump_insn_top_fun;
+  df_dump_insn_problem_function dump_insn_bottom_fun;
+  df_verify_solution_start verify_start_fun;
+  df_verify_solution_end verify_end_fun;
+  const struct df_problem *dependent_problem;
+  unsigned int block_info_elt_size;
+
+  /* The timevar id associated with this pass.  */
+  timevar_id_t tv_id;
+
+  /* True if the df_set_blocks should null out the basic block info if
+     this block drops out of df->blocks_to_analyze.  */
+  bool free_blocks_on_set_blocks;
+};
+
+
+/* The specific instance of the problem to solve.  */
+struct dataflow
+{
+  const struct df_problem *problem;     /* The problem to be solved.  */
+
+  /* Array indexed by bb->index, that contains basic block problem and
+     solution specific information.  */
+  void *block_info;
+  unsigned int block_info_size;
+
+  /* The pool to allocate the block_info from. */
+  object_allocator<df_link> *block_pool;
+
+  /* The lr and live problems have their transfer functions recomputed
+     only if necessary.  This is possible for them because, the
+     problems are kept active for the entire backend and their
+     transfer functions are indexed by the REGNO.  These are not
+     defined for any other problem.  */
+  bitmap out_of_date_transfer_functions;
+
+  /* Other problem specific data that is not on a per basic block
+     basis.  The structure is generally defined privately for the
+     problem.  The exception being the scanning problem where it is
+     fully public.  */
+  void *problem_data;
+
+  /* Local flags for some of the problems. */
+  unsigned int local_flags;
+
+  /* True if this problem of this instance has been initialized.  This
+     is used by the dumpers to keep garbage out of the dumps if, for
+     debugging a dump is produced before the first call to
+     df_analyze after a new problem is added.  */
+  bool computed;
+
+  /* True if the something has changed which invalidates the dataflow
+     solutions.  Note that this bit is always true for all problems except
+     lr and live.  */
+  bool solutions_dirty;
+
+  /* If true, this pass is deleted by df_finish_pass.  This is never
+     true for DF_SCAN and DF_LR.  It is true for DF_LIVE if optimize >
+     1.  It is always true for the other problems.  */
+  bool optional_p;
+};
+
+
+/* The set of multiword hardregs used as operands to this
+   instruction. These are factored into individual uses and defs but
+   the aggregate is still needed to service the REG_DEAD and
+   REG_UNUSED notes.  */
+struct df_mw_hardreg
+{
+  df_mw_hardreg *next;		/* Next entry for this instruction.  */
+  rtx mw_reg;                   /* The multiword hardreg.  */
+  /* These two bitfields are intentionally oversized, in the hope that
+     accesses to 16-bit fields will usually be quicker.  */
+  ENUM_BITFIELD(df_ref_type) type : 16;
+				/* Used to see if the ref is read or write.  */
+  int flags : 16;		/* Various df_ref_flags.  */
+  unsigned int start_regno;     /* First word of the multi word subreg.  */
+  unsigned int end_regno;       /* Last word of the multi word subreg.  */
+  unsigned int mw_order;        /* Same as df_ref.ref_order.  */
+};
+
+
+/* Define a register reference structure.  One of these is allocated
+    for every register reference (use or def).  Note some register
+    references (e.g., post_inc, subreg) generate both a def and a use.  */
+struct df_base_ref
+{
+  /* These three bitfields are intentionally oversized, in the hope that
+     accesses to 8 and 16-bit fields will usually be quicker.  */
+  ENUM_BITFIELD(df_ref_class) cl : 8;
+
+  ENUM_BITFIELD(df_ref_type) type : 8;
+				/* Type of ref.  */
+  int flags : 16;		/* Various df_ref_flags.  */
+  unsigned int regno;		/* The register number referenced.  */
+  rtx reg;			/* The register referenced.  */
+  union df_ref_d *next_loc;	/* Next ref for same insn or bb.  */
+  struct df_link *chain;	/* Head of def-use, use-def.  */
+  /* Pointer to the insn info of the containing instruction.  FIXME!
+     Currently this is NULL for artificial refs but this will be used
+     when FUDs are added.  */
+  struct df_insn_info *insn_info;
+  /* For each regno, there are three chains of refs, one for the uses,
+     the eq_uses and the defs.  These chains go through the refs
+     themselves rather than using an external structure.  */
+  union df_ref_d *next_reg;     /* Next ref with same regno and type.  */
+  union df_ref_d *prev_reg;     /* Prev ref with same regno and type.  */
+  /* Location in the ref table.  This is only valid after a call to
+     df_maybe_reorganize_[use,def]_refs which is an expensive operation.  */
+  int id;
+  /* The index at which the operand was scanned in the insn.  This is
+     used to totally order the refs in an insn.  */
+  unsigned int ref_order;
+};
+
+
+/* The three types of df_refs.  Note that the df_ref_extract is an
+   extension of the df_regular_ref, not the df_base_ref.  */
+struct df_artificial_ref
+{
+  struct df_base_ref base;
+
+  /* Artificial refs do not have an insn, so to get the basic block,
+     it must be explicitly here.  */
+  basic_block bb;
+};
+
+
+struct df_regular_ref
+{
+  struct df_base_ref base;
+  /* The loc is the address in the insn of the reg.  This is not
+     defined for special registers, such as clobbers and stack
+     pointers that are also associated with call insns and so those
+     just use the base.  */
+  rtx *loc;
+};
+
+/* Union of the different kinds of defs/uses placeholders.  */
+union df_ref_d
+{
+  struct df_base_ref base;
+  struct df_regular_ref regular_ref;
+  struct df_artificial_ref artificial_ref;
+};
+typedef union df_ref_d *df_ref;
+
+
+/* One of these structures is allocated for every insn.  */
+struct df_insn_info
+{
+  rtx_insn *insn;	        /* The insn this info comes from.  */
+  df_ref defs;	                /* Head of insn-def chain.  */
+  df_ref uses;	                /* Head of insn-use chain.  */
+  /* Head of insn-use chain for uses in REG_EQUAL/EQUIV notes.  */
+  df_ref eq_uses;
+  struct df_mw_hardreg *mw_hardregs;
+  /* The logical uid of the insn in the basic block.  This is valid
+     after any call to df_analyze but may rot after insns are added,
+     deleted or moved. */
+  int luid;
+};
+
+/* These links are used for ref-ref chains.  Currently only DEF-USE and
+   USE-DEF chains can be built by DF.  */
+struct df_link
+{
+  df_ref ref;
+  struct df_link *next;
+};
+
+
+enum df_chain_flags
+{
+  /* Flags that control the building of chains.  */
+  DF_DU_CHAIN      =  1, /* Build DU chains.  */
+  DF_UD_CHAIN      =  2  /* Build UD chains.  */
+};
+
+enum df_scan_flags
+{
+  /* Flags for the SCAN problem.  */
+  DF_SCAN_EMPTY_ENTRY_EXIT = 1  /* Don't define any registers in the entry
+				   block; don't use any in the exit block.  */
+};
+
+enum df_changeable_flags
+{
+  /* Scanning flags.  */
+  /* Flag to control the running of dce as a side effect of building LR.  */
+  DF_LR_RUN_DCE           = 1 << 0, /* Run DCE.  */
+  DF_NO_HARD_REGS         = 1 << 1, /* Skip hard registers in RD and CHAIN Building.  */
+
+  DF_EQ_NOTES             = 1 << 2, /* Build chains with uses present in EQUIV/EQUAL notes. */
+  DF_NO_REGS_EVER_LIVE    = 1 << 3, /* Do not compute the regs_ever_live.  */
+
+  /* Cause df_insn_rescan df_notes_rescan and df_insn_delete, to
+  return immediately.  This is used by passes that know how to update
+  the scanning them selves.  */
+  DF_NO_INSN_RESCAN       = 1 << 4,
+
+  /* Cause df_insn_rescan df_notes_rescan and df_insn_delete, to
+  return after marking the insn for later processing.  This allows all
+  rescans to be batched.  */
+  DF_DEFER_INSN_RESCAN    = 1 << 5,
+
+  /* Compute the reaching defs problem as "live and reaching defs" (LR&RD).
+     A DEF is reaching and live at insn I if DEF reaches I and REGNO(DEF)
+     is in LR_IN of the basic block containing I.  */
+  DF_RD_PRUNE_DEAD_DEFS   = 1 << 6,
+
+  DF_VERIFY_SCHEDULED     = 1 << 7
+};
+
+/* Two of these structures are inline in df, one for the uses and one
+   for the defs.  This structure is only contains the refs within the
+   boundary of the df_set_blocks if that has been defined.  */
+struct df_ref_info
+{
+  df_ref *refs;                 /* Ref table, indexed by id.  */
+  unsigned int *begin;          /* First ref_index for this pseudo.  */
+  unsigned int *count;          /* Count of refs for this pseudo.  */
+  unsigned int refs_size;       /* Size of currently allocated refs table.  */
+
+  /* Table_size is the number of elements in the refs table.  This
+     will also be the width of the bitvectors in the rd and ru
+     problems.  Total_size is the number of refs.  These will be the
+     same if the focus has not been reduced by df_set_blocks.  If the
+     focus has been reduced, table_size will be smaller since it only
+     contains the refs in the set blocks.  */
+  unsigned int table_size;
+  unsigned int total_size;
+
+  enum df_ref_order ref_order;
+};
+
+/* Three of these structures are allocated for every pseudo reg. One
+   for the uses, one for the eq_uses and one for the defs.  */
+struct df_reg_info
+{
+  /* Head of chain for refs of that type and regno.  */
+  df_ref reg_chain;
+  /* Number of refs in the chain.  */
+  unsigned int n_refs;
+};
+
+
+/*----------------------------------------------------------------------------
+   Problem data for the scanning dataflow problem.  Unlike the other
+   dataflow problems, the problem data for scanning is fully exposed and
+   used by owners of the problem.
+----------------------------------------------------------------------------*/
+
+struct df_d
+{
+
+  /* The set of problems to be solved is stored in two arrays.  In
+     PROBLEMS_IN_ORDER, the problems are stored in the order that they
+     are solved.  This is an internally dense array that may have
+     nulls at the end of it.  In PROBLEMS_BY_INDEX, the problem is
+     stored by the value in df_problem.id.  These are used to access
+     the problem local data without having to search the first
+     array.  */
+
+  struct dataflow *problems_in_order[DF_LAST_PROBLEM_PLUS1];
+  struct dataflow *problems_by_index[DF_LAST_PROBLEM_PLUS1];
+
+  /* If not NULL, this subset of blocks of the program to be
+     considered for analysis.  At certain times, this will contain all
+     the blocks in the function so it cannot be used as an indicator
+     of if we are analyzing a subset.  See analyze_subset.  */
+  bitmap blocks_to_analyze;
+
+  /* The following information is really the problem data for the
+     scanning instance but it is used too often by the other problems
+     to keep getting it from there.  */
+  struct df_ref_info def_info;   /* Def info.  */
+  struct df_ref_info use_info;   /* Use info.  */
+
+  /* The following three arrays are allocated in parallel.   They contain
+     the sets of refs of each type for each reg.  */
+  struct df_reg_info **def_regs;       /* Def reg info.  */
+  struct df_reg_info **use_regs;       /* Eq_use reg info.  */
+  struct df_reg_info **eq_use_regs;    /* Eq_use info.  */
+  unsigned int regs_size;       /* Size of currently allocated regs table.  */
+  unsigned int regs_inited;     /* Number of regs with reg_infos allocated.  */
+
+
+  struct df_insn_info **insns;   /* Insn table, indexed by insn UID.  */
+  unsigned int insns_size;       /* Size of insn table.  */
+
+  int num_problems_defined;
+
+  bitmap_head hardware_regs_used;     /* The set of hardware registers used.  */
+  /* The set of hard regs that are in the artificial uses at the end
+     of a regular basic block.  */
+  bitmap_head regular_block_artificial_uses;
+  /* The set of hard regs that are in the artificial uses at the end
+     of a basic block that has an EH pred.  */
+  bitmap_head eh_block_artificial_uses;
+  /* The set of hardware registers live on entry to the function.  */
+  bitmap entry_block_defs;
+  bitmap exit_block_uses;        /* The set of hardware registers used in exit block.  */
+
+  /* Insns to delete, rescan or reprocess the notes at next
+     df_rescan_all or df_process_deferred_rescans. */
+  bitmap_head insns_to_delete;
+  bitmap_head insns_to_rescan;
+  bitmap_head insns_to_notes_rescan;
+  int *postorder;                /* The current set of basic blocks
+                                    in reverse postorder.  */
+  vec<int> postorder_inverted;       /* The current set of basic blocks
+                                    in reverse postorder of inverted CFG.  */
+  int n_blocks;                  /* The number of blocks in reverse postorder.  */
+
+  /* An array [FIRST_PSEUDO_REGISTER], indexed by regno, of the number
+     of refs that qualify as being real hard regs uses.  Artificial
+     uses and defs as well as refs in eq notes are ignored.  If the
+     ref is a def, it cannot be a MAY_CLOBBER def.  If the ref is a
+     use, it cannot be the emim_reg_set or be the frame or arg pointer
+     register.  Uses in debug insns are ignored.
+
+     IT IS NOT ACCEPTABLE TO MANUALLY CHANGE THIS ARRAY.  This array
+     always reflects the actual number of refs in the insn stream that
+     satisfy the above criteria.  */
+  unsigned int *hard_regs_live_count;
+
+  /* This counter provides a way to totally order refs without using
+     addresses.  It is incremented whenever a ref is created.  */
+  unsigned int ref_order;
+
+  /* Problem specific control information.  This is a combination of
+     enum df_changeable_flags values.  */
+  int changeable_flags : 8;
+
+  /* If this is true, then only a subset of the blocks of the program
+     is considered to compute the solutions of dataflow problems.  */
+  bool analyze_subset;
+
+  /* True if someone added or deleted something from regs_ever_live so
+     that the entry and exit blocks need be reprocessed.  */
+  bool redo_entry_and_exit;
+};
+
+#define DF_SCAN_BB_INFO(BB) (df_scan_get_bb_info ((BB)->index))
+#define DF_RD_BB_INFO(BB) (df_rd_get_bb_info ((BB)->index))
+#define DF_LR_BB_INFO(BB) (df_lr_get_bb_info ((BB)->index))
+#define DF_LIVE_BB_INFO(BB) (df_live_get_bb_info ((BB)->index))
+#define DF_WORD_LR_BB_INFO(BB) (df_word_lr_get_bb_info ((BB)->index))
+#define DF_MD_BB_INFO(BB) (df_md_get_bb_info ((BB)->index))
+#define DF_MIR_BB_INFO(BB) (df_mir_get_bb_info ((BB)->index))
+
+/* Most transformations that wish to use live register analysis will
+   use these macros.  This info is the and of the lr and live sets.  */
+#define DF_LIVE_IN(BB) (&DF_LIVE_BB_INFO (BB)->in)
+#define DF_LIVE_OUT(BB) (&DF_LIVE_BB_INFO (BB)->out)
+
+#define DF_MIR_IN(BB) (&DF_MIR_BB_INFO (BB)->in)
+#define DF_MIR_OUT(BB) (&DF_MIR_BB_INFO (BB)->out)
+
+/* These macros are used by passes that are not tolerant of
+   uninitialized variables.  This intolerance should eventually
+   be fixed.  */
+#define DF_LR_IN(BB) (&DF_LR_BB_INFO (BB)->in)
+#define DF_LR_OUT(BB) (&DF_LR_BB_INFO (BB)->out)
+
+/* These macros are used by passes that are not tolerant of
+   uninitialized variables.  This intolerance should eventually
+   be fixed.  */
+#define DF_WORD_LR_IN(BB) (&DF_WORD_LR_BB_INFO (BB)->in)
+#define DF_WORD_LR_OUT(BB) (&DF_WORD_LR_BB_INFO (BB)->out)
+
+/* Macros to access the elements within the ref structure.  */
+
+
+#define DF_REF_REAL_REG(REF) (GET_CODE ((REF)->base.reg) == SUBREG \
+				? SUBREG_REG ((REF)->base.reg) : ((REF)->base.reg))
+#define DF_REF_REGNO(REF) ((REF)->base.regno)
+#define DF_REF_REAL_LOC(REF) (GET_CODE (*((REF)->regular_ref.loc)) == SUBREG \
+                               ? &SUBREG_REG (*((REF)->regular_ref.loc)) : ((REF)->regular_ref.loc))
+#define DF_REF_REG(REF) ((REF)->base.reg)
+#define DF_REF_LOC(REF) (DF_REF_CLASS (REF) == DF_REF_REGULAR ? \
+			 (REF)->regular_ref.loc : NULL)
+#define DF_REF_BB(REF) (DF_REF_IS_ARTIFICIAL (REF) \
+			? (REF)->artificial_ref.bb \
+			: BLOCK_FOR_INSN (DF_REF_INSN (REF)))
+#define DF_REF_BBNO(REF) (DF_REF_BB (REF)->index)
+#define DF_REF_INSN_INFO(REF) ((REF)->base.insn_info)
+#define DF_REF_INSN(REF) ((REF)->base.insn_info->insn)
+#define DF_REF_INSN_UID(REF) (INSN_UID (DF_REF_INSN(REF)))
+#define DF_REF_CLASS(REF) ((REF)->base.cl)
+#define DF_REF_TYPE(REF) ((REF)->base.type)
+#define DF_REF_CHAIN(REF) ((REF)->base.chain)
+#define DF_REF_ID(REF) ((REF)->base.id)
+#define DF_REF_FLAGS(REF) ((REF)->base.flags)
+#define DF_REF_FLAGS_IS_SET(REF, v) ((DF_REF_FLAGS (REF) & (v)) != 0)
+#define DF_REF_FLAGS_SET(REF, v) (DF_REF_FLAGS (REF) |= (v))
+#define DF_REF_FLAGS_CLEAR(REF, v) (DF_REF_FLAGS (REF) &= ~(v))
+#define DF_REF_ORDER(REF) ((REF)->base.ref_order)
+/* If DF_REF_IS_ARTIFICIAL () is true, this is not a real
+   definition/use, but an artificial one created to model always live
+   registers, eh uses, etc.  */
+#define DF_REF_IS_ARTIFICIAL(REF) (DF_REF_CLASS (REF) == DF_REF_ARTIFICIAL)
+#define DF_REF_REG_MARK(REF) (DF_REF_FLAGS_SET ((REF),DF_REF_REG_MARKER))
+#define DF_REF_REG_UNMARK(REF) (DF_REF_FLAGS_CLEAR ((REF),DF_REF_REG_MARKER))
+#define DF_REF_IS_REG_MARKED(REF) (DF_REF_FLAGS_IS_SET ((REF),DF_REF_REG_MARKER))
+#define DF_REF_NEXT_LOC(REF) ((REF)->base.next_loc)
+#define DF_REF_NEXT_REG(REF) ((REF)->base.next_reg)
+#define DF_REF_PREV_REG(REF) ((REF)->base.prev_reg)
+/* The following two macros may only be applied if one of
+   DF_REF_SIGN_EXTRACT | DF_REF_ZERO_EXTRACT is true. */
+#define DF_REF_EXTRACT_WIDTH(REF) ((REF)->extract_ref.width)
+#define DF_REF_EXTRACT_OFFSET(REF) ((REF)->extract_ref.offset)
+#define DF_REF_EXTRACT_MODE(REF) ((REF)->extract_ref.mode)
+
+/* Macros to determine the reference type.  */
+#define DF_REF_REG_DEF_P(REF) (DF_REF_TYPE (REF) == DF_REF_REG_DEF)
+#define DF_REF_REG_USE_P(REF) (!DF_REF_REG_DEF_P (REF))
+#define DF_REF_REG_MEM_STORE_P(REF) (DF_REF_TYPE (REF) == DF_REF_REG_MEM_STORE)
+#define DF_REF_REG_MEM_LOAD_P(REF) (DF_REF_TYPE (REF) == DF_REF_REG_MEM_LOAD)
+#define DF_REF_REG_MEM_P(REF) (DF_REF_REG_MEM_STORE_P (REF) \
+                               || DF_REF_REG_MEM_LOAD_P (REF))
+
+#define DF_MWS_REG_DEF_P(MREF) (DF_MWS_TYPE (MREF) == DF_REF_REG_DEF)
+#define DF_MWS_REG_USE_P(MREF) (!DF_MWS_REG_DEF_P (MREF))
+#define DF_MWS_NEXT(MREF) ((MREF)->next)
+#define DF_MWS_TYPE(MREF) ((MREF)->type)
+
+/* Macros to get the refs out of def_info or use_info refs table.  If
+   the focus of the dataflow has been set to some subset of blocks
+   with df_set_blocks, these macros will only find the uses and defs
+   in that subset of blocks.
+
+   These macros should be used with care.  The def macros are only
+   usable after a call to df_maybe_reorganize_def_refs and the use
+   macros are only usable after a call to
+   df_maybe_reorganize_use_refs.  HOWEVER, BUILDING AND USING THESE
+   ARRAYS ARE A CACHE LOCALITY KILLER.  */
+
+#define DF_DEFS_TABLE_SIZE() (df->def_info.table_size)
+#define DF_DEFS_GET(ID) (df->def_info.refs[(ID)])
+#define DF_DEFS_SET(ID,VAL) (df->def_info.refs[(ID)]=(VAL))
+#define DF_DEFS_COUNT(ID) (df->def_info.count[(ID)])
+#define DF_DEFS_BEGIN(ID) (df->def_info.begin[(ID)])
+#define DF_USES_TABLE_SIZE() (df->use_info.table_size)
+#define DF_USES_GET(ID) (df->use_info.refs[(ID)])
+#define DF_USES_SET(ID,VAL) (df->use_info.refs[(ID)]=(VAL))
+#define DF_USES_COUNT(ID) (df->use_info.count[(ID)])
+#define DF_USES_BEGIN(ID) (df->use_info.begin[(ID)])
+
+/* Macros to access the register information from scan dataflow record.  */
+
+#define DF_REG_SIZE(DF) (df->regs_inited)
+#define DF_REG_DEF_GET(REG) (df->def_regs[(REG)])
+#define DF_REG_DEF_CHAIN(REG) (df->def_regs[(REG)]->reg_chain)
+#define DF_REG_DEF_COUNT(REG) (df->def_regs[(REG)]->n_refs)
+#define DF_REG_USE_GET(REG) (df->use_regs[(REG)])
+#define DF_REG_USE_CHAIN(REG) (df->use_regs[(REG)]->reg_chain)
+#define DF_REG_USE_COUNT(REG) (df->use_regs[(REG)]->n_refs)
+#define DF_REG_EQ_USE_GET(REG) (df->eq_use_regs[(REG)])
+#define DF_REG_EQ_USE_CHAIN(REG) (df->eq_use_regs[(REG)]->reg_chain)
+#define DF_REG_EQ_USE_COUNT(REG) (df->eq_use_regs[(REG)]->n_refs)
+
+/* Macros to access the elements within the reg_info structure table.  */
+
+#define DF_REGNO_FIRST_DEF(REGNUM) \
+(DF_REG_DEF_GET(REGNUM) ? DF_REG_DEF_GET (REGNUM) : 0)
+#define DF_REGNO_LAST_USE(REGNUM) \
+(DF_REG_USE_GET(REGNUM) ? DF_REG_USE_GET (REGNUM) : 0)
+
+/* Macros to access the elements within the insn_info structure table.  */
+
+#define DF_INSN_SIZE() ((df)->insns_size)
+#define DF_INSN_INFO_GET(INSN) (df->insns[(INSN_UID (INSN))])
+#define DF_INSN_INFO_SET(INSN,VAL) (df->insns[(INSN_UID (INSN))]=(VAL))
+#define DF_INSN_INFO_LUID(II) ((II)->luid)
+#define DF_INSN_INFO_DEFS(II) ((II)->defs)
+#define DF_INSN_INFO_USES(II) ((II)->uses)
+#define DF_INSN_INFO_EQ_USES(II) ((II)->eq_uses)
+#define DF_INSN_INFO_MWS(II) ((II)->mw_hardregs)
+
+#define DF_INSN_LUID(INSN) (DF_INSN_INFO_LUID (DF_INSN_INFO_GET (INSN)))
+#define DF_INSN_DEFS(INSN) (DF_INSN_INFO_DEFS (DF_INSN_INFO_GET (INSN)))
+#define DF_INSN_USES(INSN) (DF_INSN_INFO_USES (DF_INSN_INFO_GET (INSN)))
+#define DF_INSN_EQ_USES(INSN) (DF_INSN_INFO_EQ_USES (DF_INSN_INFO_GET (INSN)))
+
+#define DF_INSN_UID_GET(UID) (df->insns[(UID)])
+#define DF_INSN_UID_SET(UID,VAL) (df->insns[(UID)]=(VAL))
+#define DF_INSN_UID_SAFE_GET(UID) (((unsigned)(UID) < DF_INSN_SIZE ())	\
+                                     ? DF_INSN_UID_GET (UID) \
+                                     : NULL)
+#define DF_INSN_UID_LUID(INSN) (DF_INSN_UID_GET (INSN)->luid)
+#define DF_INSN_UID_DEFS(INSN) (DF_INSN_UID_GET (INSN)->defs)
+#define DF_INSN_UID_USES(INSN) (DF_INSN_UID_GET (INSN)->uses)
+#define DF_INSN_UID_EQ_USES(INSN) (DF_INSN_UID_GET (INSN)->eq_uses)
+#define DF_INSN_UID_MWS(INSN) (DF_INSN_UID_GET (INSN)->mw_hardregs)
+
+#define FOR_EACH_INSN_INFO_DEF(ITER, INSN) \
+  for (ITER = DF_INSN_INFO_DEFS (INSN); ITER; ITER = DF_REF_NEXT_LOC (ITER))
+
+#define FOR_EACH_INSN_INFO_USE(ITER, INSN) \
+  for (ITER = DF_INSN_INFO_USES (INSN); ITER; ITER = DF_REF_NEXT_LOC (ITER))
+
+#define FOR_EACH_INSN_INFO_EQ_USE(ITER, INSN) \
+  for (ITER = DF_INSN_INFO_EQ_USES (INSN); ITER; ITER = DF_REF_NEXT_LOC (ITER))
+
+#define FOR_EACH_INSN_INFO_MW(ITER, INSN) \
+  for (ITER = DF_INSN_INFO_MWS (INSN); ITER; ITER = DF_MWS_NEXT (ITER))
+
+#define FOR_EACH_INSN_DEF(ITER, INSN) \
+  FOR_EACH_INSN_INFO_DEF(ITER, DF_INSN_INFO_GET (INSN))
+
+#define FOR_EACH_INSN_USE(ITER, INSN) \
+  FOR_EACH_INSN_INFO_USE(ITER, DF_INSN_INFO_GET (INSN))
+
+#define FOR_EACH_INSN_EQ_USE(ITER, INSN) \
+  FOR_EACH_INSN_INFO_EQ_USE(ITER, DF_INSN_INFO_GET (INSN))
+
+#define FOR_EACH_ARTIFICIAL_USE(ITER, BB_INDEX) \
+  for (ITER = df_get_artificial_uses (BB_INDEX); ITER; \
+       ITER = DF_REF_NEXT_LOC (ITER))
+
+#define FOR_EACH_ARTIFICIAL_DEF(ITER, BB_INDEX) \
+  for (ITER = df_get_artificial_defs (BB_INDEX); ITER; \
+       ITER = DF_REF_NEXT_LOC (ITER))
+
+/* An obstack for bitmap not related to specific dataflow problems.
+   This obstack should e.g. be used for bitmaps with a short life time
+   such as temporary bitmaps.  This obstack is declared in df-core.c.  */
+
+extern bitmap_obstack df_bitmap_obstack;
+
+
+/* One of these structures is allocated for every basic block.  */
+struct df_scan_bb_info
+{
+  /* The entry block has many artificial defs and these are at the
+     bottom of the block.
+
+     Blocks that are targets of exception edges may have some
+     artificial defs.  These are logically located at the top of the
+     block.
+
+     Blocks that are the targets of non-local goto's have the hard
+     frame pointer defined at the top of the block.  */
+  df_ref artificial_defs;
+
+  /* Blocks that are targets of exception edges may have some
+     artificial uses.  These are logically at the top of the block.
+
+     Most blocks have artificial uses at the bottom of the block.  */
+  df_ref artificial_uses;
+};
+
+
+/* Reaching definitions.  All bitmaps are indexed by the id field of
+   the ref except sparse_kill which is indexed by regno.  For the
+   LR&RD problem, the kill set is not complete: It does not contain
+   DEFs killed because the set register has died in the LR set.  */
+struct df_rd_bb_info
+{
+  /* Local sets to describe the basic blocks.   */
+  bitmap_head kill;
+  bitmap_head sparse_kill;
+  bitmap_head gen;   /* The set of defs generated in this block.  */
+
+  /* The results of the dataflow problem.  */
+  bitmap_head in;    /* At the top of the block.  */
+  bitmap_head out;   /* At the bottom of the block.  */
+};
+
+
+/* Multiple reaching definitions.  All bitmaps are referenced by the
+   register number.  */
+
+struct df_md_bb_info
+{
+  /* Local sets to describe the basic blocks.  */
+  bitmap_head gen;    /* Partial/conditional definitions live at BB out.  */
+  bitmap_head kill;   /* Other definitions that are live at BB out.  */
+  bitmap_head init;   /* Definitions coming from dominance frontier edges. */
+
+  /* The results of the dataflow problem.  */
+  bitmap_head in;    /* Just before the block itself. */
+  bitmap_head out;   /* At the bottom of the block.  */
+};
+
+
+/* Live registers, a backwards dataflow problem.  All bitmaps are
+   referenced by the register number.  */
+
+struct df_lr_bb_info
+{
+  /* Local sets to describe the basic blocks.  */
+  bitmap_head def;   /* The set of registers set in this block
+                        - except artificial defs at the top.  */
+  bitmap_head use;   /* The set of registers used in this block.  */
+
+  /* The results of the dataflow problem.  */
+  bitmap_head in;    /* Just before the block itself. */
+  bitmap_head out;   /* At the bottom of the block.  */
+};
+
+
+/* Uninitialized registers.  All bitmaps are referenced by the
+   register number.  Anded results of the forwards and backward live
+   info.  Note that the forwards live information is not available
+   separately.  */
+struct df_live_bb_info
+{
+  /* Local sets to describe the basic blocks.  */
+  bitmap_head kill;  /* The set of registers unset in this block.  Calls,
+		        for instance, unset registers.  */
+  bitmap_head gen;   /* The set of registers set in this block.  */
+
+  /* The results of the dataflow problem.  */
+  bitmap_head in;    /* At the top of the block.  */
+  bitmap_head out;   /* At the bottom of the block.  */
+};
+
+
+/* Live registers, a backwards dataflow problem.  These bitmaps are
+   indexed by 2 * regno for each pseudo and have two entries for each
+   pseudo.  Only pseudos that have a size of 2 * UNITS_PER_WORD are
+   meaningfully tracked.  */
+
+struct df_word_lr_bb_info
+{
+  /* Local sets to describe the basic blocks.  */
+  bitmap_head def;   /* The set of registers set in this block
+                        - except artificial defs at the top.  */
+  bitmap_head use;   /* The set of registers used in this block.  */
+
+  /* The results of the dataflow problem.  */
+  bitmap_head in;    /* Just before the block itself. */
+  bitmap_head out;   /* At the bottom of the block.  */
+};
+
+/* Must-initialized registers.  All bitmaps are referenced by the
+   register number.  */
+struct df_mir_bb_info
+{
+  /* Local sets to describe the basic blocks.  */
+  bitmap_head kill;  /* The set of registers unset in this block.  Calls,
+		        for instance, unset registers.  */
+  bitmap_head gen;   /* The set of registers set in this block, excluding the
+			ones killed later on in this block.  */
+
+  /* The results of the dataflow problem.  */
+  bitmap_head in;    /* At the top of the block.  */
+  bitmap_head out;   /* At the bottom of the block.  */
+};
+
+
+/* This is used for debugging and for the dumpers to find the latest
+   instance so that the df info can be added to the dumps.  This
+   should not be used by regular code.  */
+extern struct df_d *df;
+#define df_scan    (df->problems_by_index[DF_SCAN])
+#define df_rd      (df->problems_by_index[DF_RD])
+#define df_lr      (df->problems_by_index[DF_LR])
+#define df_live    (df->problems_by_index[DF_LIVE])
+#define df_chain   (df->problems_by_index[DF_CHAIN])
+#define df_word_lr (df->problems_by_index[DF_WORD_LR])
+#define df_note    (df->problems_by_index[DF_NOTE])
+#define df_md      (df->problems_by_index[DF_MD])
+#define df_mir     (df->problems_by_index[DF_MIR])
+
+/* This symbol turns on checking that each modification of the cfg has
+  been identified to the appropriate df routines.  It is not part of
+  verification per se because the check that the final solution has
+  not changed covers this.  However, if the solution is not being
+  properly recomputed because the cfg is being modified, adding in
+  calls to df_check_cfg_clean can be used to find the source of that
+  kind of problem.  */
+#if 0
+#define DF_DEBUG_CFG
+#endif
+
+
+/* Functions defined in df-core.c.  */
+
+extern void df_add_problem (const struct df_problem *);
+extern int df_set_flags (int);
+extern int df_clear_flags (int);
+extern void df_set_blocks (bitmap);
+extern void df_remove_problem (struct dataflow *);
+extern void df_finish_pass (bool);
+extern void df_analyze_problem (struct dataflow *, bitmap, int *, int);
+extern void df_analyze ();
+extern void df_analyze_loop (struct loop *);
+extern int df_get_n_blocks (enum df_flow_dir);
+extern int *df_get_postorder (enum df_flow_dir);
+extern void df_simple_dataflow (enum df_flow_dir, df_init_function,
+				df_confluence_function_0, df_confluence_function_n,
+				df_transfer_function, bitmap, int *, int);
+extern void df_mark_solutions_dirty (void);
+extern bool df_get_bb_dirty (basic_block);
+extern void df_set_bb_dirty (basic_block);
+extern void df_compact_blocks (void);
+extern void df_bb_replace (int, basic_block);
+extern void df_bb_delete (int);
+extern void df_verify (void);
+#ifdef DF_DEBUG_CFG
+extern void df_check_cfg_clean (void);
+#endif
+extern df_ref df_bb_regno_first_def_find (basic_block, unsigned int);
+extern df_ref df_bb_regno_last_def_find (basic_block, unsigned int);
+extern df_ref df_find_def (rtx_insn *, rtx);
+extern bool df_reg_defined (rtx_insn *, rtx);
+extern df_ref df_find_use (rtx_insn *, rtx);
+extern bool df_reg_used (rtx_insn *, rtx);
+extern void df_worklist_dataflow (struct dataflow *,bitmap, int *, int);
+extern void df_print_regset (FILE *file, bitmap r);
+extern void df_print_word_regset (FILE *file, bitmap r);
+extern void df_dump (FILE *);
+extern void df_dump_region (FILE *);
+extern void df_dump_start (FILE *);
+extern void df_dump_top (basic_block, FILE *);
+extern void df_dump_bottom (basic_block, FILE *);
+extern void df_dump_insn_top (const rtx_insn *, FILE *);
+extern void df_dump_insn_bottom (const rtx_insn *, FILE *);
+extern void df_refs_chain_dump (df_ref, bool, FILE *);
+extern void df_regs_chain_dump (df_ref,  FILE *);
+extern void df_insn_debug (rtx_insn *, bool, FILE *);
+extern void df_insn_debug_regno (rtx_insn *, FILE *);
+extern void df_regno_debug (unsigned int, FILE *);
+extern void df_ref_debug (df_ref, FILE *);
+extern void debug_df_insn (rtx_insn *);
+extern void debug_df_regno (unsigned int);
+extern void debug_df_reg (rtx);
+extern void debug_df_defno (unsigned int);
+extern void debug_df_useno (unsigned int);
+extern void debug_df_ref (df_ref);
+extern void debug_df_chain (struct df_link *);
+
+/* Functions defined in df-problems.c. */
+
+extern struct df_link *df_chain_create (df_ref, df_ref);
+extern void df_chain_unlink (df_ref);
+extern void df_chain_copy (df_ref, struct df_link *);
+extern void df_grow_bb_info (struct dataflow *);
+extern void df_chain_dump (struct df_link *, FILE *);
+extern void df_print_bb_index (basic_block bb, FILE *file);
+extern void df_rd_add_problem (void);
+extern void df_rd_simulate_artificial_defs_at_top (basic_block, bitmap);
+extern void df_rd_simulate_one_insn (basic_block, rtx_insn *, bitmap);
+extern void df_lr_add_problem (void);
+extern void df_lr_verify_transfer_functions (void);
+extern void df_live_verify_transfer_functions (void);
+extern void df_live_add_problem (void);
+extern void df_live_set_all_dirty (void);
+extern void df_chain_add_problem (unsigned int);
+extern void df_word_lr_add_problem (void);
+extern bool df_word_lr_mark_ref (df_ref, bool, bitmap);
+extern bool df_word_lr_simulate_defs (rtx_insn *, bitmap);
+extern void df_word_lr_simulate_uses (rtx_insn *, bitmap);
+extern void df_word_lr_simulate_artificial_refs_at_top (basic_block, bitmap);
+extern void df_word_lr_simulate_artificial_refs_at_end (basic_block, bitmap);
+extern void df_note_add_problem (void);
+extern void df_md_add_problem (void);
+extern void df_md_simulate_artificial_defs_at_top (basic_block, bitmap);
+extern void df_md_simulate_one_insn (basic_block, rtx_insn *, bitmap);
+extern void df_mir_add_problem (void);
+extern void df_mir_simulate_one_insn (basic_block, rtx_insn *, bitmap, bitmap);
+extern void df_simulate_find_noclobber_defs (rtx_insn *, bitmap);
+extern void df_simulate_find_defs (rtx_insn *, bitmap);
+extern void df_simulate_defs (rtx_insn *, bitmap);
+extern void df_simulate_uses (rtx_insn *, bitmap);
+extern void df_simulate_initialize_backwards (basic_block, bitmap);
+extern void df_simulate_one_insn_backwards (basic_block, rtx_insn *, bitmap);
+extern void df_simulate_finalize_backwards (basic_block, bitmap);
+extern void df_simulate_initialize_forwards (basic_block, bitmap);
+extern void df_simulate_one_insn_forwards (basic_block, rtx_insn *, bitmap);
+extern void simulate_backwards_to_point (basic_block, regset, rtx);
+extern bool can_move_insns_across (rtx_insn *, rtx_insn *,
+				   rtx_insn *, rtx_insn *,
+				   basic_block, regset,
+				   regset, rtx_insn **);
+/* Functions defined in df-scan.c.  */
+
+extern void df_scan_alloc (bitmap);
+extern void df_scan_add_problem (void);
+extern void df_grow_reg_info (void);
+extern void df_grow_insn_info (void);
+extern void df_scan_blocks (void);
+extern void df_uses_create (rtx *, rtx_insn *, int);
+extern struct df_insn_info * df_insn_create_insn_record (rtx_insn *);
+extern void df_insn_delete (rtx_insn *);
+extern void df_bb_refs_record (int, bool);
+extern bool df_insn_rescan (rtx_insn *);
+extern bool df_insn_rescan_debug_internal (rtx_insn *);
+extern void df_insn_rescan_all (void);
+extern void df_process_deferred_rescans (void);
+extern void df_recompute_luids (basic_block);
+extern void df_insn_change_bb (rtx_insn *, basic_block);
+extern void df_maybe_reorganize_use_refs (enum df_ref_order);
+extern void df_maybe_reorganize_def_refs (enum df_ref_order);
+extern void df_ref_change_reg_with_loc (rtx, unsigned int);
+extern void df_notes_rescan (rtx_insn *);
+extern void df_hard_reg_init (void);
+extern void df_update_entry_block_defs (void);
+extern void df_update_exit_block_uses (void);
+extern void df_update_entry_exit_and_calls (void);
+extern bool df_hard_reg_used_p (unsigned int);
+extern unsigned int df_hard_reg_used_count (unsigned int);
+extern bool df_regs_ever_live_p (unsigned int);
+extern void df_set_regs_ever_live (unsigned int, bool);
+extern void df_compute_regs_ever_live (bool);
+extern void df_scan_verify (void);
+
+
+/*----------------------------------------------------------------------------
+   Public functions access functions for the dataflow problems.
+----------------------------------------------------------------------------*/
+
+static inline struct df_scan_bb_info *
+df_scan_get_bb_info (unsigned int index)
+{
+  if (index < df_scan->block_info_size)
+    return &((struct df_scan_bb_info *) df_scan->block_info)[index];
+  else
+    return NULL;
+}
+
+static inline struct df_rd_bb_info *
+df_rd_get_bb_info (unsigned int index)
+{
+  if (index < df_rd->block_info_size)
+    return &((struct df_rd_bb_info *) df_rd->block_info)[index];
+  else
+    return NULL;
+}
+
+static inline struct df_lr_bb_info *
+df_lr_get_bb_info (unsigned int index)
+{
+  if (index < df_lr->block_info_size)
+    return &((struct df_lr_bb_info *) df_lr->block_info)[index];
+  else
+    return NULL;
+}
+
+static inline struct df_md_bb_info *
+df_md_get_bb_info (unsigned int index)
+{
+  if (index < df_md->block_info_size)
+    return &((struct df_md_bb_info *) df_md->block_info)[index];
+  else
+    return NULL;
+}
+
+static inline struct df_live_bb_info *
+df_live_get_bb_info (unsigned int index)
+{
+  if (index < df_live->block_info_size)
+    return &((struct df_live_bb_info *) df_live->block_info)[index];
+  else
+    return NULL;
+}
+
+static inline struct df_word_lr_bb_info *
+df_word_lr_get_bb_info (unsigned int index)
+{
+  if (index < df_word_lr->block_info_size)
+    return &((struct df_word_lr_bb_info *) df_word_lr->block_info)[index];
+  else
+    return NULL;
+}
+
+static inline struct df_mir_bb_info *
+df_mir_get_bb_info (unsigned int index)
+{
+  if (index < df_mir->block_info_size)
+    return &((struct df_mir_bb_info *) df_mir->block_info)[index];
+  else
+    return NULL;
+}
+
+/* Get the live at out set for BB no matter what problem happens to be
+   defined.  This function is used by the register allocators who
+   choose different dataflow problems depending on the optimization
+   level.  */
+
+static inline bitmap
+df_get_live_out (basic_block bb)
+{
+  gcc_checking_assert (df_lr);
+
+  if (df_live)
+    return DF_LIVE_OUT (bb);
+  else
+    return DF_LR_OUT (bb);
+}
+
+/* Get the live at in set for BB no matter what problem happens to be
+   defined.  This function is used by the register allocators who
+   choose different dataflow problems depending on the optimization
+   level.  */
+
+static inline bitmap
+df_get_live_in (basic_block bb)
+{
+  gcc_checking_assert (df_lr);
+
+  if (df_live)
+    return DF_LIVE_IN (bb);
+  else
+    return DF_LR_IN (bb);
+}
+
+/* Get basic block info.  */
+/* Get the artificial defs for a basic block.  */
+
+static inline df_ref
+df_get_artificial_defs (unsigned int bb_index)
+{
+  return df_scan_get_bb_info (bb_index)->artificial_defs;
+}
+
+
+/* Get the artificial uses for a basic block.  */
+
+static inline df_ref
+df_get_artificial_uses (unsigned int bb_index)
+{
+  return df_scan_get_bb_info (bb_index)->artificial_uses;
+}
+
+/* If INSN defines exactly one register, return the associated reference,
+   otherwise return null.  */
+
+static inline df_ref
+df_single_def (const df_insn_info *info)
+{
+  df_ref defs = DF_INSN_INFO_DEFS (info);
+  return defs && !DF_REF_NEXT_LOC (defs) ? defs : NULL;
+}
+
+/* If INSN uses exactly one register, return the associated reference,
+   otherwise return null.  */
+
+static inline df_ref
+df_single_use (const df_insn_info *info)
+{
+  df_ref uses = DF_INSN_INFO_USES (info);
+  return uses && !DF_REF_NEXT_LOC (uses) ? uses : NULL;
+}
+
+/* web */
+
+class web_entry_base
+{
+ private:
+  /* Reference to the parent in the union/find tree.  */
+  web_entry_base *pred_pvt;
+
+ public:
+  /* Accessors.  */
+  web_entry_base *pred () { return pred_pvt; }
+  void set_pred (web_entry_base *p) { pred_pvt = p; }
+
+  /* Find representative in union-find tree.  */
+  web_entry_base *unionfind_root ();
+
+  /* Union with another set, returning TRUE if they are already unioned.  */
+  friend bool unionfind_union (web_entry_base *first, web_entry_base *second);
+};
+
+#endif /* GCC_DF_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/dfp.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dfp.h
new file mode 100644
index 0000000..7c1449e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dfp.h
@@ -0,0 +1,50 @@
+/* Decimal floating point support functions for GNU compiler.
+   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_DFP_H
+#define GCC_DFP_H
+
+/* Encode REAL_VALUE_TYPEs into 32/64/128-bit IEEE 754 encoded values.  */
+void encode_decimal32  (const struct real_format *fmt, long *, const REAL_VALUE_TYPE *);
+void encode_decimal64  (const struct real_format *fmt, long *, const REAL_VALUE_TYPE *);
+void decode_decimal128 (const struct real_format *, REAL_VALUE_TYPE *, const long *);
+
+/* Decode 32/64/128-bit IEEE 754 encoded values into REAL_VALUE_TYPEs.  */
+void decode_decimal32  (const struct real_format *, REAL_VALUE_TYPE *, const long *);
+void decode_decimal64  (const struct real_format *, REAL_VALUE_TYPE *, const long *);
+void encode_decimal128 (const struct real_format *fmt, long *, const REAL_VALUE_TYPE *);
+
+/* Arithmetic and conversion functions.  */
+int  decimal_do_compare (const REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *, int);
+void decimal_real_from_string (REAL_VALUE_TYPE *, const char *);
+void decimal_round_for_format (const struct real_format *, REAL_VALUE_TYPE *);
+void decimal_real_convert (REAL_VALUE_TYPE *, const real_format *,
+			   const REAL_VALUE_TYPE *);
+void decimal_real_to_decimal (char *, const REAL_VALUE_TYPE *, size_t, size_t, int);
+void decimal_do_fix_trunc (REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *);
+void decimal_real_maxval (REAL_VALUE_TYPE *, int, machine_mode);
+wide_int decimal_real_to_integer (const REAL_VALUE_TYPE *, bool *, int);
+HOST_WIDE_INT decimal_real_to_integer (const REAL_VALUE_TYPE *);
+
+#ifdef TREE_CODE
+bool decimal_real_arithmetic (REAL_VALUE_TYPE *, enum tree_code, const REAL_VALUE_TYPE *,
+			      const REAL_VALUE_TYPE *);
+#endif
+
+#endif /* GCC_DFP_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/diagnostic-color.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/diagnostic-color.h
new file mode 100644
index 0000000..1349d04
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/diagnostic-color.h
@@ -0,0 +1,65 @@
+/* Copyright (C) 2013-2019 Free Software Foundation, Inc.
+   Contributed by Manuel Lopez-Ibanez <manu@gcc.gnu.org>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Based on code from: */
+/* grep.c - main driver file for grep.
+   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+   02110-1301, USA.
+
+   Written July 1992 by Mike Haertel.  */
+
+#ifndef GCC_DIAGNOSTIC_COLOR_H
+#define GCC_DIAGNOSTIC_COLOR_H
+
+/* Whether to add color to diagnostics:
+   o DIAGNOSTICS_COLOR_NO: never
+   o DIAGNOSTICS_COLOR_YES: always
+   o DIAGNOSTICS_COLOR_AUTO: depending on the output stream.  */
+typedef enum
+{
+  DIAGNOSTICS_COLOR_NO       = 0,
+  DIAGNOSTICS_COLOR_YES      = 1,
+  DIAGNOSTICS_COLOR_AUTO     = 2
+} diagnostic_color_rule_t;
+
+const char *colorize_start (bool, const char *, size_t);
+const char *colorize_stop (bool);
+bool colorize_init (diagnostic_color_rule_t);
+
+inline const char *
+colorize_start (bool show_color, const char *name)
+{
+  return colorize_start (show_color, name, strlen (name));
+}
+
+#endif /* ! GCC_DIAGNOSTIC_COLOR_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/diagnostic-core.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/diagnostic-core.h
new file mode 100644
index 0000000..efafde4
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/diagnostic-core.h
@@ -0,0 +1,121 @@
+/* Declarations of core diagnostic functionality for code that does
+   not need to deal with diagnostic contexts or diagnostic info
+   structures.
+   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_DIAGNOSTIC_CORE_H
+#define GCC_DIAGNOSTIC_CORE_H
+
+#include "bversion.h"
+
+/* Constants used to discriminate diagnostics.  */
+typedef enum
+{
+#define DEFINE_DIAGNOSTIC_KIND(K, msgid, C) K,
+#include "diagnostic.def"
+#undef DEFINE_DIAGNOSTIC_KIND
+  DK_LAST_DIAGNOSTIC_KIND,
+  /* This is used for tagging pragma pops in the diagnostic
+     classification history chain.  */
+  DK_POP
+} diagnostic_t;
+
+/* RAII-style class for grouping related diagnostics.  */
+
+class auto_diagnostic_group
+{
+ public:
+  auto_diagnostic_group ();
+  ~auto_diagnostic_group ();
+};
+
+extern const char *progname;
+
+extern const char *trim_filename (const char *);
+
+/* If we haven't already defined a front-end-specific diagnostics
+   style, use the generic one.  */
+#ifndef GCC_DIAG_STYLE
+#define GCC_DIAG_STYLE __gcc_tdiag__
+#endif
+/* None of these functions are suitable for ATTRIBUTE_PRINTF, because
+   each language front end can extend them with its own set of format
+   specifiers.  We must use custom format checks.  */
+#if (CHECKING_P && GCC_VERSION >= 4001) || GCC_VERSION == BUILDING_GCC_VERSION
+#define ATTRIBUTE_GCC_DIAG(m, n) __attribute__ ((__format__ (GCC_DIAG_STYLE, m, n))) ATTRIBUTE_NONNULL(m)
+#else
+#define ATTRIBUTE_GCC_DIAG(m, n) ATTRIBUTE_NONNULL(m)
+#endif
+extern void internal_error (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2)
+     ATTRIBUTE_NORETURN;
+extern void internal_error_no_backtrace (const char *, ...)
+     ATTRIBUTE_GCC_DIAG(1,2) ATTRIBUTE_NORETURN;
+/* Pass one of the OPT_W* from options.h as the first parameter.  */
+extern bool warning (int, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
+extern bool warning_n (location_t, int, unsigned HOST_WIDE_INT,
+		       const char *, const char *, ...)
+    ATTRIBUTE_GCC_DIAG(4,6) ATTRIBUTE_GCC_DIAG(5,6);
+extern bool warning_n (rich_location *, int, unsigned HOST_WIDE_INT,
+		       const char *, const char *, ...)
+    ATTRIBUTE_GCC_DIAG(4, 6) ATTRIBUTE_GCC_DIAG(5, 6);
+extern bool warning_at (location_t, int, const char *, ...)
+    ATTRIBUTE_GCC_DIAG(3,4);
+extern bool warning_at (rich_location *, int, const char *, ...)
+    ATTRIBUTE_GCC_DIAG(3,4);
+extern void error (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);
+extern void error_n (location_t, unsigned HOST_WIDE_INT, const char *,
+		     const char *, ...)
+    ATTRIBUTE_GCC_DIAG(3,5) ATTRIBUTE_GCC_DIAG(4,5);
+extern void error_at (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
+extern void error_at (rich_location *, const char *, ...)
+  ATTRIBUTE_GCC_DIAG(2,3);
+extern void fatal_error (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3)
+     ATTRIBUTE_NORETURN;
+/* Pass one of the OPT_W* from options.h as the second parameter.  */
+extern bool pedwarn (location_t, int, const char *, ...)
+     ATTRIBUTE_GCC_DIAG(3,4);
+extern bool pedwarn (rich_location *, int, const char *, ...)
+     ATTRIBUTE_GCC_DIAG(3,4);
+extern bool permerror (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
+extern bool permerror (rich_location *, const char *,
+				   ...) ATTRIBUTE_GCC_DIAG(2,3);
+extern void sorry (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);
+extern void sorry_at (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
+extern void inform (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
+extern void inform (rich_location *, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
+extern void inform_n (location_t, unsigned HOST_WIDE_INT, const char *,
+		      const char *, ...)
+    ATTRIBUTE_GCC_DIAG(3,5) ATTRIBUTE_GCC_DIAG(4,5);
+extern void verbatim (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);
+extern bool emit_diagnostic (diagnostic_t, location_t, int,
+			     const char *, ...) ATTRIBUTE_GCC_DIAG(4,5);
+extern bool emit_diagnostic (diagnostic_t, rich_location *, int,
+			     const char *, ...) ATTRIBUTE_GCC_DIAG(4,5);
+extern bool emit_diagnostic_valist (diagnostic_t, location_t, int, const char *,
+				    va_list *) ATTRIBUTE_GCC_DIAG (4,0);
+extern bool seen_error (void);
+
+#ifdef BUFSIZ
+  /* N.B. Unlike all the others, fnotice is just gettext+fprintf, and
+     therefore it can have ATTRIBUTE_PRINTF.  */
+extern void fnotice			(FILE *, const char *, ...)
+     ATTRIBUTE_PRINTF_2;
+#endif
+
+#endif /* ! GCC_DIAGNOSTIC_CORE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/diagnostic.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/diagnostic.def
new file mode 100644
index 0000000..f3c0b2c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/diagnostic.def
@@ -0,0 +1,50 @@
+/* Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* DK_UNSPECIFIED must be first so it has a value of zero.  We never
+   assign this kind to an actual diagnostic, we only use this in
+   variables that can hold a kind, to mean they have yet to have a
+   kind specified.  I.e. they're uninitialized.  Within the diagnostic
+   machinery, this kind also means "don't change the existing kind",
+   meaning "no change is specified".  */
+DEFINE_DIAGNOSTIC_KIND (DK_UNSPECIFIED, "", NULL)
+
+/* If a diagnostic is set to DK_IGNORED, it won't get reported at all.
+   This is used by the diagnostic machinery when it wants to disable a
+   diagnostic without disabling the option which causes it.  */
+DEFINE_DIAGNOSTIC_KIND (DK_IGNORED, "", NULL)
+
+/* The remainder are real diagnostic types.  */
+DEFINE_DIAGNOSTIC_KIND (DK_FATAL, "fatal error: ", "error")
+DEFINE_DIAGNOSTIC_KIND (DK_ICE, "internal compiler error: ", "error")
+DEFINE_DIAGNOSTIC_KIND (DK_ERROR, "error: ", "error")
+DEFINE_DIAGNOSTIC_KIND (DK_SORRY, "sorry, unimplemented: ", "error")
+DEFINE_DIAGNOSTIC_KIND (DK_WARNING, "warning: ", "warning")
+DEFINE_DIAGNOSTIC_KIND (DK_ANACHRONISM, "anachronism: ", "warning")
+DEFINE_DIAGNOSTIC_KIND (DK_NOTE, "note: ", "note")
+DEFINE_DIAGNOSTIC_KIND (DK_DEBUG, "debug: ", "note")
+/* These two would be re-classified as DK_WARNING or DK_ERROR, so the
+prefix does not matter.  */
+DEFINE_DIAGNOSTIC_KIND (DK_PEDWARN, "pedwarn: ", NULL)
+DEFINE_DIAGNOSTIC_KIND (DK_PERMERROR, "permerror: ", NULL)
+/* This one is just for counting DK_WARNING promoted to DK_ERROR
+   due to -Werror and -Werror=warning.  */
+DEFINE_DIAGNOSTIC_KIND (DK_WERROR, "error: ", NULL)
+/* This is like DK_ICE, but backtrace is not printed.  Used in the driver
+   when reporting fatal signal in the compiler.  */
+DEFINE_DIAGNOSTIC_KIND (DK_ICE_NOBT, "internal compiler error: ", "error")
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/diagnostic.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/diagnostic.h
new file mode 100644
index 0000000..46c3b50
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/diagnostic.h
@@ -0,0 +1,427 @@
+/* Various declarations for language-independent diagnostics subroutines.
+   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Contributed by Gabriel Dos Reis <gdr@codesourcery.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_DIAGNOSTIC_H
+#define GCC_DIAGNOSTIC_H
+
+#include "pretty-print.h"
+#include "diagnostic-core.h"
+
+/* Enum for overriding the standard output format.  */
+
+enum diagnostics_output_format
+{
+  /* The default: textual output.  */
+  DIAGNOSTICS_OUTPUT_FORMAT_TEXT,
+
+  /* JSON-based output.  */
+  DIAGNOSTICS_OUTPUT_FORMAT_JSON
+};
+
+/* A diagnostic is described by the MESSAGE to send, the FILE and LINE of
+   its context and its KIND (ice, error, warning, note, ...)  See complete
+   list in diagnostic.def.  */
+struct diagnostic_info
+{
+  /* Text to be formatted.  */
+  text_info message;
+
+  /* The location at which the diagnostic is to be reported.  */
+  rich_location *richloc;
+
+  /* Auxiliary data for client.  */
+  void *x_data;
+  /* The kind of diagnostic it is about.  */
+  diagnostic_t kind;
+  /* Which OPT_* directly controls this diagnostic.  */
+  int option_index;
+};
+
+/* Each time a diagnostic's classification is changed with a pragma,
+   we record the change and the location of the change in an array of
+   these structs.  */
+struct diagnostic_classification_change_t
+{
+  location_t location;
+  int option;
+  diagnostic_t kind;
+};
+
+/*  Forward declarations.  */
+typedef void (*diagnostic_starter_fn) (diagnostic_context *,
+				       diagnostic_info *);
+
+typedef void (*diagnostic_start_span_fn) (diagnostic_context *,
+					  expanded_location);
+
+typedef void (*diagnostic_finalizer_fn) (diagnostic_context *,
+					 diagnostic_info *,
+					 diagnostic_t);
+
+class edit_context;
+
+/* This data structure bundles altogether any information relevant to
+   the context of a diagnostic message.  */
+struct diagnostic_context
+{
+  /* Where most of the diagnostic formatting work is done.  */
+  pretty_printer *printer;
+
+  /* The number of times we have issued diagnostics.  */
+  int diagnostic_count[DK_LAST_DIAGNOSTIC_KIND];
+
+  /* True if it has been requested that warnings be treated as errors.  */
+  bool warning_as_error_requested;
+
+  /* The number of option indexes that can be passed to warning() et
+     al.  */
+  int n_opts;
+
+  /* For each option index that can be passed to warning() et al
+     (OPT_* from options.h when using this code with the core GCC
+     options), this array may contain a new kind that the diagnostic
+     should be changed to before reporting, or DK_UNSPECIFIED to leave
+     it as the reported kind, or DK_IGNORED to not report it at
+     all.  */
+  diagnostic_t *classify_diagnostic;
+
+  /* History of all changes to the classifications above.  This list
+     is stored in location-order, so we can search it, either
+     binary-wise or end-to-front, to find the most recent
+     classification for a given diagnostic, given the location of the
+     diagnostic.  */
+  diagnostic_classification_change_t *classification_history;
+
+  /* The size of the above array.  */
+  int n_classification_history;
+
+  /* For pragma push/pop.  */
+  int *push_list;
+  int n_push;
+
+  /* True if we should print the source line with a caret indicating
+     the location.  */
+  bool show_caret;
+
+  /* Maximum width of the source line printed.  */
+  int caret_max_width;
+
+  /* Character used for caret diagnostics.  */
+  char caret_chars[rich_location::STATICALLY_ALLOCATED_RANGES];
+
+  /* True if we should print the command line option which controls
+     each diagnostic, if known.  */
+  bool show_option_requested;
+
+  /* True if we should raise a SIGABRT on errors.  */
+  bool abort_on_error;
+
+  /* True if we should show the column number on diagnostics.  */
+  bool show_column;
+
+  /* True if pedwarns are errors.  */
+  bool pedantic_errors;
+
+  /* True if permerrors are warnings.  */
+  bool permissive;
+
+  /* The index of the option to associate with turning permerrors into
+     warnings.  */
+  int opt_permissive;
+
+  /* True if errors are fatal.  */
+  bool fatal_errors;
+
+  /* True if all warnings should be disabled.  */
+  bool dc_inhibit_warnings;
+
+  /* True if warnings should be given in system headers.  */
+  bool dc_warn_system_headers;
+
+  /* Maximum number of errors to report.  */
+  int max_errors;
+
+  /* This function is called before any message is printed out.  It is
+     responsible for preparing message prefix and such.  For example, it
+     might say:
+     In file included from "/usr/local/include/curses.h:5:
+                      from "/home/gdr/src/nifty_printer.h:56:
+                      ...
+  */
+  diagnostic_starter_fn begin_diagnostic;
+
+  /* This function is called by diagnostic_show_locus in between
+     disjoint spans of source code, so that the context can print
+     something to indicate that a new span of source code has begun.  */
+  diagnostic_start_span_fn start_span;
+
+  /* This function is called after the diagnostic message is printed.  */
+  diagnostic_finalizer_fn end_diagnostic;
+
+  /* Client hook to report an internal error.  */
+  void (*internal_error) (diagnostic_context *, const char *, va_list *);
+
+  /* Client hook to say whether the option controlling a diagnostic is
+     enabled.  Returns nonzero if enabled, zero if disabled.  */
+  int (*option_enabled) (int, void *);
+
+  /* Client information to pass as second argument to
+     option_enabled.  */
+  void *option_state;
+
+  /* Client hook to return the name of an option that controls a
+     diagnostic.  Returns malloced memory.  The first diagnostic_t
+     argument is the kind of diagnostic before any reclassification
+     (of warnings as errors, etc.); the second is the kind after any
+     reclassification.  May return NULL if no name is to be printed.
+     May be passed 0 as well as the index of a particular option.  */
+  char *(*option_name) (diagnostic_context *, int, diagnostic_t, diagnostic_t);
+
+  /* Auxiliary data for client.  */
+  void *x_data;
+
+  /* Used to detect that the last caret was printed at the same location.  */
+  location_t last_location;
+
+  /* Used to detect when the input file stack has changed since last
+     described.  */
+  const line_map_ordinary *last_module;
+
+  int lock;
+
+  bool inhibit_notes_p;
+
+  /* When printing source code, should the characters at carets and ranges
+     be colorized? (assuming colorization is on at all).
+     This should be true for frontends that generate range information
+     (so that the ranges of code are colorized),
+     and false for frontends that merely specify points within the
+     source code (to avoid e.g. colorizing just the first character in
+     a token, which would look strange).  */
+  bool colorize_source_p;
+
+  /* When printing source code, should labelled ranges be printed?  */
+  bool show_labels_p;
+
+  /* When printing source code, should there be a left-hand margin
+     showing line numbers?  */
+  bool show_line_numbers_p;
+
+  /* If printing source code, what should the minimum width of the margin
+     be?  Line numbers will be right-aligned, and padded to this width.  */
+  int min_margin_width;
+
+  /* Usable by plugins; if true, print a debugging ruler above the
+     source output.  */
+  bool show_ruler_p;
+
+  /* If true, print fixits in machine-parseable form after the
+     rest of the diagnostic.  */
+  bool parseable_fixits_p;
+
+  /* If non-NULL, an edit_context to which fix-it hints should be
+     applied, for generating patches.  */
+  edit_context *edit_context_ptr;
+
+  /* How many diagnostic_group instances are currently alive.  */
+  int diagnostic_group_nesting_depth;
+
+  /* How many diagnostics have been emitted since the bottommost
+     diagnostic_group was pushed.  */
+  int diagnostic_group_emission_count;
+
+  /* Optional callbacks for handling diagnostic groups.  */
+
+  /* If non-NULL, this will be called immediately before the first
+     time a diagnostic is emitted within a stack of groups.  */
+  void (*begin_group_cb) (diagnostic_context * context);
+
+  /* If non-NULL, this will be called when a stack of groups is
+     popped if any diagnostics were emitted within that group.  */
+  void (*end_group_cb) (diagnostic_context * context);
+
+  /* Callback for final cleanup.  */
+  void (*final_cb) (diagnostic_context *context);
+};
+
+static inline void
+diagnostic_inhibit_notes (diagnostic_context * context)
+{
+  context->inhibit_notes_p = true;
+}
+
+
+/* Client supplied function to announce a diagnostic.  */
+#define diagnostic_starter(DC) (DC)->begin_diagnostic
+
+/* Client supplied function called after a diagnostic message is
+   displayed.  */
+#define diagnostic_finalizer(DC) (DC)->end_diagnostic
+
+/* Extension hooks for client.  */
+#define diagnostic_context_auxiliary_data(DC) (DC)->x_data
+#define diagnostic_info_auxiliary_data(DI) (DI)->x_data
+
+/* Same as pp_format_decoder.  Works on 'diagnostic_context *'.  */
+#define diagnostic_format_decoder(DC) ((DC)->printer->format_decoder)
+
+/* Same as output_prefixing_rule.  Works on 'diagnostic_context *'.  */
+#define diagnostic_prefixing_rule(DC) ((DC)->printer->wrapping.rule)
+
+/* Raise SIGABRT on any diagnostic of severity DK_ERROR or higher.  */
+#define diagnostic_abort_on_error(DC) \
+  (DC)->abort_on_error = true
+
+/* This diagnostic_context is used by front-ends that directly output
+   diagnostic messages without going through `error', `warning',
+   and similar functions.  */
+extern diagnostic_context *global_dc;
+
+/* Returns whether the diagnostic framework has been intialized already and is
+   ready for use.  */
+#define diagnostic_ready_p() (global_dc->printer != NULL)
+
+/* The total count of a KIND of diagnostics emitted so far.  */
+#define diagnostic_kind_count(DC, DK) (DC)->diagnostic_count[(int) (DK)]
+
+/* The number of errors that have been issued so far.  Ideally, these
+   would take a diagnostic_context as an argument.  */
+#define errorcount diagnostic_kind_count (global_dc, DK_ERROR)
+/* Similarly, but for warnings.  */
+#define warningcount diagnostic_kind_count (global_dc, DK_WARNING)
+/* Similarly, but for warnings promoted to errors.  */
+#define werrorcount diagnostic_kind_count (global_dc, DK_WERROR)
+/* Similarly, but for sorrys.  */
+#define sorrycount diagnostic_kind_count (global_dc, DK_SORRY)
+
+/* Returns nonzero if warnings should be emitted.  */
+#define diagnostic_report_warnings_p(DC, LOC)				\
+  (!(DC)->dc_inhibit_warnings						\
+   && !(in_system_header_at (LOC) && !(DC)->dc_warn_system_headers))
+
+/* Override the option index to be used for reporting a
+   diagnostic.  */
+
+static inline void
+diagnostic_override_option_index (diagnostic_info *info, int optidx)
+{
+  info->option_index = optidx;
+}
+
+/* Diagnostic related functions.  */
+extern void diagnostic_initialize (diagnostic_context *, int);
+extern void diagnostic_color_init (diagnostic_context *, int value = -1);
+extern void diagnostic_finish (diagnostic_context *);
+extern void diagnostic_report_current_module (diagnostic_context *, location_t);
+extern void diagnostic_show_locus (diagnostic_context *,
+				   rich_location *richloc,
+				   diagnostic_t diagnostic_kind);
+
+/* Force diagnostics controlled by OPTIDX to be kind KIND.  */
+extern diagnostic_t diagnostic_classify_diagnostic (diagnostic_context *,
+						    int /* optidx */,
+						    diagnostic_t /* kind */,
+						    location_t);
+extern void diagnostic_push_diagnostics (diagnostic_context *, location_t);
+extern void diagnostic_pop_diagnostics (diagnostic_context *, location_t);
+extern bool diagnostic_report_diagnostic (diagnostic_context *,
+					  diagnostic_info *);
+#ifdef ATTRIBUTE_GCC_DIAG
+extern void diagnostic_set_info (diagnostic_info *, const char *, va_list *,
+				 rich_location *, diagnostic_t) ATTRIBUTE_GCC_DIAG(2,0);
+extern void diagnostic_set_info_translated (diagnostic_info *, const char *,
+					    va_list *, rich_location *,
+					    diagnostic_t)
+     ATTRIBUTE_GCC_DIAG(2,0);
+extern void diagnostic_append_note (diagnostic_context *, location_t,
+                                    const char *, ...) ATTRIBUTE_GCC_DIAG(3,4);
+#endif
+extern char *diagnostic_build_prefix (diagnostic_context *, const diagnostic_info *);
+void default_diagnostic_starter (diagnostic_context *, diagnostic_info *);
+void default_diagnostic_start_span_fn (diagnostic_context *,
+				       expanded_location);
+void default_diagnostic_finalizer (diagnostic_context *, diagnostic_info *,
+				   diagnostic_t);
+void diagnostic_set_caret_max_width (diagnostic_context *context, int value);
+void diagnostic_action_after_output (diagnostic_context *, diagnostic_t);
+void diagnostic_check_max_errors (diagnostic_context *, bool flush = false);
+
+void diagnostic_file_cache_fini (void);
+
+int get_terminal_width (void);
+
+/* Return the location associated to this diagnostic. Parameter WHICH
+   specifies which location. By default, expand the first one.  */
+
+static inline location_t
+diagnostic_location (const diagnostic_info * diagnostic, int which = 0)
+{
+  return diagnostic->message.get_location (which);
+}
+
+/* Return the number of locations to be printed in DIAGNOSTIC.  */
+
+static inline unsigned int
+diagnostic_num_locations (const diagnostic_info * diagnostic)
+{
+  return diagnostic->message.m_richloc->get_num_locations ();
+}
+
+/* Expand the location of this diagnostic. Use this function for
+   consistency.  Parameter WHICH specifies which location. By default,
+   expand the first one.  */
+
+static inline expanded_location
+diagnostic_expand_location (const diagnostic_info * diagnostic, int which = 0)
+{
+  return diagnostic->richloc->get_expanded_location (which);
+}
+
+/* This is somehow the right-side margin of a caret line, that is, we
+   print at least these many characters after the position pointed at
+   by the caret.  */
+const int CARET_LINE_MARGIN = 10;
+
+/* Return true if the two locations can be represented within the same
+   caret line.  This is used to build a prefix and also to determine
+   whether to print one or two caret lines.  */
+
+static inline bool
+diagnostic_same_line (const diagnostic_context *context,
+		       expanded_location s1, expanded_location s2)
+{
+  return s2.column && s1.line == s2.line 
+    && context->caret_max_width - CARET_LINE_MARGIN > abs (s1.column - s2.column);
+}
+
+extern const char *diagnostic_get_color_for_kind (diagnostic_t kind);
+
+/* Pure text formatting support functions.  */
+extern char *file_name_as_prefix (diagnostic_context *, const char *);
+
+extern char *build_message_string (const char *, ...) ATTRIBUTE_PRINTF_1;
+
+extern void diagnostic_output_format_init (diagnostic_context *,
+					   enum diagnostics_output_format);
+
+/* Compute the number of digits in the decimal representation of an integer.  */
+extern int num_digits (int);
+
+#endif /* ! GCC_DIAGNOSTIC_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/dojump.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dojump.h
new file mode 100644
index 0000000..ad01929
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dojump.h
@@ -0,0 +1,77 @@
+/* Export function prototypes from dojump.c.
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_DOJUMP_H
+#define GCC_DOJUMP_H
+
+/* At the start of a function, record that we have no previously-pushed
+   arguments waiting to be popped.  */
+extern void init_pending_stack_adjust (void);
+
+/* Discard any pending stack adjustment.  */
+extern void discard_pending_stack_adjust (void);
+
+/* When exiting from function, if safe, clear out any pending stack adjust
+   so the adjustment won't get done.  */
+extern void clear_pending_stack_adjust (void);
+
+/* Pop any previously-pushed arguments that have not been popped yet.  */
+extern void do_pending_stack_adjust (void);
+
+/* Struct for saving/restoring of pending_stack_adjust/stack_pointer_delta
+   values.  */
+
+struct saved_pending_stack_adjust
+{
+  /* Saved value of pending_stack_adjust.  */
+  poly_int64 x_pending_stack_adjust;
+
+  /* Saved value of stack_pointer_delta.  */
+  poly_int64 x_stack_pointer_delta;
+};
+
+/* Remember pending_stack_adjust/stack_pointer_delta.
+   To be used around code that may call do_pending_stack_adjust (),
+   but the generated code could be discarded e.g. using delete_insns_since.  */
+
+extern void save_pending_stack_adjust (saved_pending_stack_adjust *);
+
+/* Restore the saved pending_stack_adjust/stack_pointer_delta.  */
+
+extern void restore_pending_stack_adjust (saved_pending_stack_adjust *);
+
+extern bool split_comparison (enum rtx_code, machine_mode,
+			      enum rtx_code *, enum rtx_code *);
+
+/* Generate code to evaluate EXP and jump to LABEL if the value is nonzero.  */
+extern void jumpif (tree exp, rtx_code_label *label, profile_probability prob);
+extern void jumpif_1 (enum tree_code, tree, tree, rtx_code_label *,
+		      profile_probability);
+
+/* Generate code to evaluate EXP and jump to LABEL if the value is zero.  */
+extern void jumpifnot (tree exp, rtx_code_label *label,
+		       profile_probability prob);
+extern void jumpifnot_1 (enum tree_code, tree, tree, rtx_code_label *,
+			 profile_probability);
+
+extern void do_compare_rtx_and_jump (rtx, rtx, enum rtx_code, int,
+				     machine_mode, rtx, rtx_code_label *,
+				     rtx_code_label *, profile_probability);
+
+#endif /* GCC_DOJUMP_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/dominance.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dominance.h
new file mode 100644
index 0000000..5b59833
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dominance.h
@@ -0,0 +1,94 @@
+/* Calculate (post)dominators header file.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_DOMINANCE_H
+#define GCC_DOMINANCE_H
+
+enum cdi_direction
+{
+  CDI_DOMINATORS = 1,
+  CDI_POST_DOMINATORS = 2
+};
+
+/* State of dominance information.  */
+
+enum dom_state
+{
+  DOM_NONE,		/* Not computed at all.  */
+  DOM_NO_FAST_QUERY,	/* The data is OK, but the fast query data are not usable.  */
+  DOM_OK		/* Everything is ok.  */
+};
+
+extern void calculate_dominance_info (enum cdi_direction);
+extern void calculate_dominance_info_for_region (enum cdi_direction,
+						 vec<basic_block>);
+extern void free_dominance_info (function *, enum cdi_direction);
+extern void free_dominance_info (enum cdi_direction);
+extern void free_dominance_info_for_region (function *,
+					    enum cdi_direction,
+					    vec<basic_block>);
+extern basic_block get_immediate_dominator (enum cdi_direction, basic_block);
+extern void set_immediate_dominator (enum cdi_direction, basic_block,
+				     basic_block);
+extern vec<basic_block> get_dominated_by (enum cdi_direction, basic_block);
+extern vec<basic_block> get_dominated_by_region (enum cdi_direction,
+							 basic_block *,
+							 unsigned);
+extern vec<basic_block> get_dominated_to_depth (enum cdi_direction,
+							basic_block, int);
+extern vec<basic_block> get_all_dominated_blocks (enum cdi_direction,
+							  basic_block);
+extern void redirect_immediate_dominators (enum cdi_direction, basic_block,
+					   basic_block);
+extern basic_block nearest_common_dominator (enum cdi_direction,
+					     basic_block, basic_block);
+extern basic_block nearest_common_dominator_for_set (enum cdi_direction,
+						     bitmap);
+extern bool dominated_by_p (enum cdi_direction, const_basic_block,
+			    const_basic_block);
+unsigned bb_dom_dfs_in (enum cdi_direction, basic_block);
+unsigned bb_dom_dfs_out (enum cdi_direction, basic_block);
+extern void verify_dominators (enum cdi_direction);
+
+/* Verify invariants of computed dominance information, if internal consistency
+   checks are enabled.  */
+
+static inline void
+checking_verify_dominators (cdi_direction dir)
+{
+  if (flag_checking)
+    verify_dominators (dir);
+}
+
+basic_block recompute_dominator (enum cdi_direction, basic_block);
+extern void iterate_fix_dominators (enum cdi_direction,
+				    vec<basic_block> , bool);
+extern void add_to_dominance_info (enum cdi_direction, basic_block);
+extern void delete_from_dominance_info (enum cdi_direction, basic_block);
+extern basic_block first_dom_son (enum cdi_direction, basic_block);
+extern basic_block next_dom_son (enum cdi_direction, basic_block);
+extern enum dom_state dom_info_state (function *, enum cdi_direction);
+extern enum dom_state dom_info_state (enum cdi_direction);
+extern void set_dom_info_availability (enum cdi_direction, enum dom_state);
+extern bool dom_info_available_p (function *, enum cdi_direction);
+extern bool dom_info_available_p (enum cdi_direction);
+
+
+
+#endif /* GCC_DOMINANCE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/domwalk.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/domwalk.h
new file mode 100644
index 0000000..f865c61
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/domwalk.h
@@ -0,0 +1,114 @@
+/* Generic dominator tree walker
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Contributed by Diego Novillo <dnovillo@redhat.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_DOM_WALK_H
+#define GCC_DOM_WALK_H
+
+/**
+ * This is the main class for the dominator walker. It is expected that
+ * consumers will have a custom class inheriting from it, which will over ride
+ * at least one of before_dom_children and after_dom_children to implement the
+ * custom behavior.
+ */
+class dom_walker
+{
+public:
+  static const edge STOP;
+
+  /* An enum for determining whether the dom walk should be constrained to
+     blocks reachable by executable edges.  */
+
+  enum reachability
+  {
+    /* Walk all blocks within the CFG.  */
+    ALL_BLOCKS,
+
+    /* Use REACHABLE_BLOCKS when your subclass can discover that some edges
+       are not executable.
+
+       If a subclass can discover that a COND, SWITCH or GOTO has a static
+       target in the before_dom_children callback, the taken edge should
+       be returned.  The generic walker will clear EDGE_EXECUTABLE on all
+       edges it can determine are not executable.
+
+       With REACHABLE_BLOCKS, EDGE_EXECUTABLE will be set on every edge in
+       the dom_walker ctor; the flag will then be cleared on edges that are
+       determined to be not executable.  */
+    REACHABLE_BLOCKS,
+
+    /* Identical to REACHABLE_BLOCKS, but the initial state of EDGE_EXECUTABLE
+       will instead be preserved in the ctor, allowing for information about
+       non-executable edges to be merged in from an earlier analysis (and
+       potentially for additional edges to be marked as non-executable).  */
+    REACHABLE_BLOCKS_PRESERVING_FLAGS
+  };
+
+  /* You can provide a mapping of basic-block index to RPO if you
+     have that readily available or you do multiple walks.  If you
+     specify NULL as BB_INDEX_TO_RPO dominator children will not be
+     walked in RPO order.  */
+  dom_walker (cdi_direction direction, enum reachability = ALL_BLOCKS,
+	      int *bb_index_to_rpo = NULL);
+
+  ~dom_walker ();
+
+  /* Walk the dominator tree.  */
+  void walk (basic_block);
+
+  /* Function to call before the recursive walk of the dominator children.
+
+     Return value is the always taken edge if the block has multiple outgoing
+     edges, NULL otherwise.  When skipping unreachable blocks, the walker
+     uses the taken edge information to clear EDGE_EXECUTABLE on the other
+     edges, exposing unreachable blocks.  A NULL return value means all
+     outgoing edges should still be considered executable.  A return value
+     of STOP means to stop the domwalk from processing dominated blocks from
+     here.  This can be used to process a SEME region only (note domwalk
+     will still do work linear in function size).  */
+  virtual edge before_dom_children (basic_block) { return NULL; }
+
+  /* Function to call after the recursive walk of the dominator children.  */
+  virtual void after_dom_children (basic_block) {}
+
+private:
+  /* This is the direction of the dominator tree we want to walk.  i.e.,
+     if it is set to CDI_DOMINATORS, then we walk the dominator tree,
+     if it is set to CDI_POST_DOMINATORS, then we walk the post
+     dominator tree.  */
+  const ENUM_BITFIELD (cdi_direction) m_dom_direction : 2;
+  const ENUM_BITFIELD (reachability) m_reachability : 2;
+  bool m_user_bb_to_rpo;
+  basic_block m_unreachable_dom;
+  int *m_bb_to_rpo;
+
+  /* Query whether or not the given block is reachable or not.  */
+  bool bb_reachable (struct function *, basic_block);
+
+  /* Given an unreachable block, propagate that property to outgoing
+     and possibly incoming edges for the block.  Typically called after
+     determining a block is unreachable in the before_dom_children
+     callback.  */
+  void propagate_unreachable_to_edges (basic_block, FILE *, dump_flags_t);
+
+};
+
+extern void set_all_edges_as_executable (function *fn);
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/double-int.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/double-int.h
new file mode 100644
index 0000000..09bf154
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/double-int.h
@@ -0,0 +1,470 @@
+/* Operations with long integers.
+   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef DOUBLE_INT_H
+#define DOUBLE_INT_H
+
+/* A large integer is currently represented as a pair of HOST_WIDE_INTs.
+   It therefore represents a number with precision of
+   2 * HOST_BITS_PER_WIDE_INT bits (it is however possible that the
+   internal representation will change, if numbers with greater precision
+   are needed, so the users should not rely on it).  The representation does
+   not contain any information about signedness of the represented value, so
+   it can be used to represent both signed and unsigned numbers.  For
+   operations where the results depend on signedness (division, comparisons),
+   it must be specified separately.  For each such operation, there are three
+   versions of the function -- double_int_op, that takes an extra UNS argument
+   giving the signedness of the values, and double_int_sop and double_int_uop
+   that stand for its specializations for signed and unsigned values.
+
+   You may also represent with numbers in smaller precision using double_int.
+   You however need to use double_int_ext (that fills in the bits of the
+   number over the prescribed precision with zeros or with the sign bit) before
+   operations that do not perform arithmetics modulo 2^precision (comparisons,
+   division), and possibly before storing the results, if you want to keep
+   them in some canonical form).  In general, the signedness of double_int_ext
+   should match the signedness of the operation.
+
+   ??? The components of double_int differ in signedness mostly for
+   historical reasons (they replace an older structure used to represent
+   numbers with precision higher than HOST_WIDE_INT).  It might be less
+   confusing to have them both signed or both unsigned.  */
+
+struct double_int
+{
+  /* Normally, we would define constructors to create instances.
+     Two things prevent us from doing so.
+     First, defining a constructor makes the class non-POD in C++03,
+     and we certainly want double_int to be a POD.
+     Second, the GCC conding conventions prefer explicit conversion,
+     and explicit conversion operators are not available until C++11.  */
+
+  static double_int from_uhwi (unsigned HOST_WIDE_INT cst);
+  static double_int from_shwi (HOST_WIDE_INT cst);
+  static double_int from_pair (HOST_WIDE_INT high, unsigned HOST_WIDE_INT low);
+
+  /* Construct from a fuffer of length LEN.  BUFFER will be read according
+     to byte endianness and word endianness.  */
+  static double_int from_buffer (const unsigned char *buffer, int len);
+
+  /* No copy assignment operator or destructor to keep the type a POD.  */
+
+  /* There are some special value-creation static member functions.  */
+
+  static double_int mask (unsigned prec);
+  static double_int max_value (unsigned int prec, bool uns);
+  static double_int min_value (unsigned int prec, bool uns);
+
+  /* The following functions are mutating operations.  */
+
+  double_int &operator ++ (); // prefix
+  double_int &operator -- (); // prefix
+  double_int &operator *= (double_int);
+  double_int &operator += (double_int);
+  double_int &operator -= (double_int);
+  double_int &operator &= (double_int);
+  double_int &operator ^= (double_int);
+  double_int &operator |= (double_int);
+
+  /* The following functions are non-mutating operations.  */
+
+  /* Conversion functions.  */
+
+  HOST_WIDE_INT to_shwi () const;
+  unsigned HOST_WIDE_INT to_uhwi () const;
+
+  /* Conversion query functions.  */
+
+  bool fits_uhwi () const;
+  bool fits_shwi () const;
+  bool fits_hwi (bool uns) const;
+
+  /* Attribute query functions.  */
+
+  int trailing_zeros () const;
+  int popcount () const;
+
+  /* Arithmetic query operations.  */
+
+  bool multiple_of (double_int, bool, double_int *) const;
+
+  /* Arithmetic operation functions.  */
+
+  /* The following operations perform arithmetics modulo 2^precision, so you
+     do not need to call .ext between them, even if you are representing
+     numbers with precision less than HOST_BITS_PER_DOUBLE_INT bits.  */
+
+  double_int set_bit (unsigned) const;
+  double_int mul_with_sign (double_int, bool unsigned_p, bool *overflow) const;
+  double_int wide_mul_with_sign (double_int, bool unsigned_p,
+				 double_int *higher, bool *overflow) const;
+  double_int add_with_sign (double_int, bool unsigned_p, bool *overflow) const;
+  double_int sub_with_overflow (double_int, bool *overflow) const;
+  double_int neg_with_overflow (bool *overflow) const;
+
+  double_int operator * (double_int) const;
+  double_int operator + (double_int) const;
+  double_int operator - (double_int) const;
+  double_int operator - () const;
+  double_int operator ~ () const;
+  double_int operator & (double_int) const;
+  double_int operator | (double_int) const;
+  double_int operator ^ (double_int) const;
+  double_int and_not (double_int) const;
+
+  double_int lshift (HOST_WIDE_INT count) const;
+  double_int lshift (HOST_WIDE_INT count, unsigned int prec, bool arith) const;
+  double_int rshift (HOST_WIDE_INT count) const;
+  double_int rshift (HOST_WIDE_INT count, unsigned int prec, bool arith) const;
+  double_int alshift (HOST_WIDE_INT count, unsigned int prec) const;
+  double_int arshift (HOST_WIDE_INT count, unsigned int prec) const;
+  double_int llshift (HOST_WIDE_INT count, unsigned int prec) const;
+  double_int lrshift (HOST_WIDE_INT count, unsigned int prec) const;
+  double_int lrotate (HOST_WIDE_INT count, unsigned int prec) const;
+  double_int rrotate (HOST_WIDE_INT count, unsigned int prec) const;
+
+  /* You must ensure that double_int::ext is called on the operands
+     of the following operations, if the precision of the numbers
+     is less than HOST_BITS_PER_DOUBLE_INT bits.  */
+
+  double_int div (double_int, bool, unsigned) const;
+  double_int sdiv (double_int, unsigned) const;
+  double_int udiv (double_int, unsigned) const;
+  double_int mod (double_int, bool, unsigned) const;
+  double_int smod (double_int, unsigned) const;
+  double_int umod (double_int, unsigned) const;
+  double_int divmod_with_overflow (double_int, bool, unsigned,
+				   double_int *, bool *) const;
+  double_int divmod (double_int, bool, unsigned, double_int *) const;
+  double_int sdivmod (double_int, unsigned, double_int *) const;
+  double_int udivmod (double_int, unsigned, double_int *) const;
+
+  /* Precision control functions.  */
+
+  double_int ext (unsigned prec, bool uns) const;
+  double_int zext (unsigned prec) const;
+  double_int sext (unsigned prec) const;
+
+  /* Comparative functions.  */
+
+  bool is_zero () const;
+  bool is_one () const;
+  bool is_minus_one () const;
+  bool is_negative () const;
+
+  int cmp (double_int b, bool uns) const;
+  int ucmp (double_int b) const;
+  int scmp (double_int b) const;
+
+  bool ult (double_int b) const;
+  bool ule (double_int b) const;
+  bool ugt (double_int b) const;
+  bool slt (double_int b) const;
+  bool sle (double_int b) const;
+  bool sgt (double_int b) const;
+
+  double_int max (double_int b, bool uns);
+  double_int smax (double_int b);
+  double_int umax (double_int b);
+
+  double_int min (double_int b, bool uns);
+  double_int smin (double_int b);
+  double_int umin (double_int b);
+
+  bool operator == (double_int cst2) const;
+  bool operator != (double_int cst2) const;
+
+  /* Please migrate away from using these member variables publicly.  */
+
+  unsigned HOST_WIDE_INT low;
+  HOST_WIDE_INT high;
+
+};
+
+#define HOST_BITS_PER_DOUBLE_INT (2 * HOST_BITS_PER_WIDE_INT)
+
+/* Constructors and conversions.  */
+
+/* Constructs double_int from integer CST.  The bits over the precision of
+   HOST_WIDE_INT are filled with the sign bit.  */
+
+inline double_int
+double_int::from_shwi (HOST_WIDE_INT cst)
+{
+  double_int r;
+  r.low = (unsigned HOST_WIDE_INT) cst;
+  r.high = cst < 0 ? -1 : 0;
+  return r;
+}
+
+/* Some useful constants.  */
+/* FIXME(crowl): Maybe remove after converting callers?
+   The problem is that a named constant would not be as optimizable,
+   while the functional syntax is more verbose.  */
+
+#define double_int_minus_one (double_int::from_shwi (-1))
+#define double_int_zero (double_int::from_shwi (0))
+#define double_int_one (double_int::from_shwi (1))
+#define double_int_two (double_int::from_shwi (2))
+#define double_int_ten (double_int::from_shwi (10))
+
+/* Constructs double_int from unsigned integer CST.  The bits over the
+   precision of HOST_WIDE_INT are filled with zeros.  */
+
+inline double_int
+double_int::from_uhwi (unsigned HOST_WIDE_INT cst)
+{
+  double_int r;
+  r.low = cst;
+  r.high = 0;
+  return r;
+}
+
+inline double_int
+double_int::from_pair (HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
+{
+  double_int r;
+  r.low = low;
+  r.high = high;
+  return r;
+}
+
+inline double_int &
+double_int::operator ++ ()
+{
+  *this += double_int_one;
+  return *this;
+}
+
+inline double_int &
+double_int::operator -- ()
+{
+  *this -= double_int_one;
+  return *this;
+}
+
+inline double_int &
+double_int::operator &= (double_int b)
+{
+  *this = *this & b;
+  return *this;
+}
+
+inline double_int &
+double_int::operator ^= (double_int b)
+{
+  *this = *this ^ b;
+  return *this;
+}
+
+inline double_int &
+double_int::operator |= (double_int b)
+{
+  *this = *this | b;
+  return *this;
+}
+
+/* Returns value of CST as a signed number.  CST must satisfy
+   double_int::fits_signed.  */
+
+inline HOST_WIDE_INT
+double_int::to_shwi () const
+{
+  return (HOST_WIDE_INT) low;
+}
+
+/* Returns value of CST as an unsigned number.  CST must satisfy
+   double_int::fits_unsigned.  */
+
+inline unsigned HOST_WIDE_INT
+double_int::to_uhwi () const
+{
+  return low;
+}
+
+/* Returns true if CST fits in unsigned HOST_WIDE_INT.  */
+
+inline bool
+double_int::fits_uhwi () const
+{
+  return high == 0;
+}
+
+/* Logical operations.  */
+
+/* Returns ~A.  */
+
+inline double_int
+double_int::operator ~ () const
+{
+  double_int result;
+  result.low = ~low;
+  result.high = ~high;
+  return result;
+}
+
+/* Returns A | B.  */
+
+inline double_int
+double_int::operator | (double_int b) const
+{
+  double_int result;
+  result.low = low | b.low;
+  result.high = high | b.high;
+  return result;
+}
+
+/* Returns A & B.  */
+
+inline double_int
+double_int::operator & (double_int b) const
+{
+  double_int result;
+  result.low = low & b.low;
+  result.high = high & b.high;
+  return result;
+}
+
+/* Returns A & ~B.  */
+
+inline double_int
+double_int::and_not (double_int b) const
+{
+  double_int result;
+  result.low = low & ~b.low;
+  result.high = high & ~b.high;
+  return result;
+}
+
+/* Returns A ^ B.  */
+
+inline double_int
+double_int::operator ^ (double_int b) const
+{
+  double_int result;
+  result.low = low ^ b.low;
+  result.high = high ^ b.high;
+  return result;
+}
+
+void dump_double_int (FILE *, double_int, bool);
+
+#define ALL_ONES HOST_WIDE_INT_M1U
+
+/* The operands of the following comparison functions must be processed
+   with double_int_ext, if their precision is less than
+   HOST_BITS_PER_DOUBLE_INT bits.  */
+
+/* Returns true if CST is zero.  */
+
+inline bool
+double_int::is_zero () const
+{
+  return low == 0 && high == 0;
+}
+
+/* Returns true if CST is one.  */
+
+inline bool
+double_int::is_one () const
+{
+  return low == 1 && high == 0;
+}
+
+/* Returns true if CST is minus one.  */
+
+inline bool
+double_int::is_minus_one () const
+{
+  return low == ALL_ONES && high == -1;
+}
+
+/* Returns true if CST is negative.  */
+
+inline bool
+double_int::is_negative () const
+{
+  return high < 0;
+}
+
+/* Returns true if CST1 == CST2.  */
+
+inline bool
+double_int::operator == (double_int cst2) const
+{
+  return low == cst2.low && high == cst2.high;
+}
+
+/* Returns true if CST1 != CST2.  */
+
+inline bool
+double_int::operator != (double_int cst2) const
+{
+  return low != cst2.low || high != cst2.high;
+}
+
+/* Return number of set bits of CST.  */
+
+inline int
+double_int::popcount () const
+{
+  return popcount_hwi (high) + popcount_hwi (low);
+}
+
+
+#ifndef GENERATOR_FILE
+/* Conversion to and from GMP integer representations.  */
+
+void mpz_set_double_int (mpz_t, double_int, bool);
+double_int mpz_get_double_int (const_tree, mpz_t, bool);
+#endif
+
+namespace wi
+{
+  template <>
+  struct int_traits <double_int>
+  {
+    static const enum precision_type precision_type = CONST_PRECISION;
+    static const bool host_dependent_precision = true;
+    static const unsigned int precision = HOST_BITS_PER_DOUBLE_INT;
+    static unsigned int get_precision (const double_int &);
+    static wi::storage_ref decompose (HOST_WIDE_INT *, unsigned int,
+				      const double_int &);
+  };
+}
+
+inline unsigned int
+wi::int_traits <double_int>::get_precision (const double_int &)
+{
+  return precision;
+}
+
+inline wi::storage_ref
+wi::int_traits <double_int>::decompose (HOST_WIDE_INT *scratch, unsigned int p,
+					const double_int &x)
+{
+  gcc_checking_assert (precision == p);
+  scratch[0] = x.low;
+  if ((x.high == 0 && scratch[0] >= 0) || (x.high == -1 && scratch[0] < 0))
+    return wi::storage_ref (scratch, 1, precision);
+  scratch[1] = x.high;
+  return wi::storage_ref (scratch, 2, precision);
+}
+
+#endif /* DOUBLE_INT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/dump-context.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dump-context.h
new file mode 100644
index 0000000..b17b86a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dump-context.h
@@ -0,0 +1,283 @@
+/* Support code for handling the various dump_* calls in dumpfile.h
+   Copyright (C) 2018-2019 Free Software Foundation, Inc.
+   Contributed by David Malcolm <dmalcolm@redhat.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+#ifndef GCC_DUMP_CONTEXT_H
+#define GCC_DUMP_CONTEXT_H 1
+
+#include "dumpfile.h"
+#include "pretty-print.h"
+#include "selftest.h"
+#include "optinfo.h"
+
+class optrecord_json_writer;
+namespace selftest { class temp_dump_context; }
+
+/* A class for handling the various dump_* calls.
+
+   In particular, this class has responsibility for consolidating
+   the "dump_*" calls into optinfo instances (delimited by "dump_*_loc"
+   calls), and emitting them.
+
+   Putting this in a class (rather than as global state) allows
+   for selftesting of this code.  */
+
+class dump_context
+{
+  friend class selftest::temp_dump_context;
+
+ public:
+  static dump_context &get () { return *s_current; }
+
+  ~dump_context ();
+
+  void refresh_dumps_are_enabled ();
+
+  void dump_loc (const dump_metadata_t &metadata,
+		 const dump_user_location_t &loc);
+  void dump_loc_immediate (dump_flags_t dump_kind,
+			   const dump_user_location_t &loc);
+
+  void dump_gimple_stmt (const dump_metadata_t &metadata,
+			 dump_flags_t extra_dump_flags,
+			 gimple *gs, int spc);
+
+  void dump_gimple_stmt_loc (const dump_metadata_t &metadata,
+			     const dump_user_location_t &loc,
+			     dump_flags_t extra_dump_flags,
+			     gimple *gs, int spc);
+
+  void dump_gimple_expr (const dump_metadata_t &metadata,
+			 dump_flags_t extra_dump_flags,
+			 gimple *gs, int spc);
+
+  void dump_gimple_expr_loc (const dump_metadata_t &metadata,
+			     const dump_user_location_t &loc,
+			     dump_flags_t extra_dump_flags,
+			     gimple *gs,
+			     int spc);
+
+  void dump_generic_expr (const dump_metadata_t &metadata,
+			  dump_flags_t extra_dump_flags,
+			  tree t);
+
+  void dump_generic_expr_loc (const dump_metadata_t &metadata,
+			      const dump_user_location_t &loc,
+			      dump_flags_t extra_dump_flags,
+			      tree t);
+
+  void dump_printf_va (const dump_metadata_t &metadata, const char *format,
+		       va_list *ap) ATTRIBUTE_GCC_DUMP_PRINTF (3, 0);
+
+  void dump_printf_loc_va (const dump_metadata_t &metadata,
+			   const dump_user_location_t &loc,
+			   const char *format, va_list *ap)
+    ATTRIBUTE_GCC_DUMP_PRINTF (4, 0);
+
+  template<unsigned int N, typename C>
+  void dump_dec (const dump_metadata_t &metadata, const poly_int<N, C> &value);
+
+  void dump_symtab_node (const dump_metadata_t &metadata, symtab_node *node);
+
+  /* Managing nested scopes.  */
+  unsigned int get_scope_depth () const;
+  void begin_scope (const char *name,
+		    const dump_user_location_t &user_location,
+		    const dump_impl_location_t &impl_location);
+  void end_scope ();
+
+  /* Should optinfo instances be created?
+     All creation of optinfos should be guarded by this predicate.
+     Return true if any optinfo destinations are active.  */
+  bool optinfo_enabled_p () const;
+
+  bool optimization_records_enabled_p () const
+  {
+    return m_json_writer != NULL;
+  }
+  void set_json_writer (optrecord_json_writer *writer);
+  void finish_any_json_writer ();
+
+  void end_any_optinfo ();
+
+  void emit_optinfo (const optinfo *info);
+  void emit_item (optinfo_item *item, dump_flags_t dump_kind);
+
+  bool apply_dump_filter_p (dump_flags_t dump_kind, dump_flags_t filter) const;
+
+ private:
+  optinfo &ensure_pending_optinfo (const dump_metadata_t &metadata);
+  optinfo &begin_next_optinfo (const dump_metadata_t &metadata,
+			       const dump_user_location_t &loc);
+
+  /* The current nesting depth of dump scopes, for showing nesting
+     via indentation).  */
+  unsigned int m_scope_depth;
+
+  /* The optinfo currently being accumulated since the last dump_*_loc call,
+     if any.  */
+  optinfo *m_pending;
+
+  /* If -fsave-optimization-record is enabled, the heap-allocated JSON writer
+     instance, otherwise NULL.  */
+  optrecord_json_writer *m_json_writer;
+
+  /* For use in selftests: if non-NULL, then items are to be printed
+     to this, using the given flags.  */
+  pretty_printer *m_test_pp;
+  dump_flags_t m_test_pp_flags;
+
+  /* The currently active dump_context, for use by the dump_* API calls.  */
+  static dump_context *s_current;
+
+  /* The default active context.  */
+  static dump_context s_default;
+};
+
+/* A subclass of pretty_printer for implementing dump_context::dump_printf_va.
+   In particular, the formatted chunks are captured as optinfo_item instances,
+   thus retaining metadata about the entities being dumped (e.g. source
+   locations), rather than just as plain text.  */
+
+class dump_pretty_printer : public pretty_printer
+{
+public:
+  dump_pretty_printer (dump_context *context, dump_flags_t dump_kind);
+
+  void emit_items (optinfo *dest);
+
+private:
+  /* Information on an optinfo_item that was generated during phase 2 of
+     formatting.  */
+  struct stashed_item
+  {
+    stashed_item (const char **buffer_ptr_, optinfo_item *item_)
+      : buffer_ptr (buffer_ptr_), item (item_) {}
+    const char **buffer_ptr;
+    optinfo_item *item;
+  };
+
+  static bool format_decoder_cb (pretty_printer *pp, text_info *text,
+				 const char *spec, int /*precision*/,
+				 bool /*wide*/, bool /*set_locus*/,
+				 bool /*verbose*/, bool */*quoted*/,
+				 const char **buffer_ptr);
+
+  bool decode_format (text_info *text, const char *spec,
+		      const char **buffer_ptr);
+
+  void stash_item (const char **buffer_ptr, optinfo_item *item);
+
+  void emit_any_pending_textual_chunks (optinfo *dest);
+
+  void emit_item (optinfo_item *item, optinfo *dest);
+
+  dump_context *m_context;
+  dump_flags_t m_dump_kind;
+  auto_vec<stashed_item> m_stashed_items;
+};
+
+#if CHECKING_P
+
+namespace selftest {
+
+/* An RAII-style class for use in selftests for temporarily using a different
+   dump_context.  */
+
+class temp_dump_context
+{
+ public:
+  temp_dump_context (bool forcibly_enable_optinfo,
+		     bool forcibly_enable_dumping,
+		     dump_flags_t test_pp_flags);
+  ~temp_dump_context ();
+
+  /* Support for selftests.  */
+  optinfo *get_pending_optinfo () const { return m_context.m_pending; }
+  const char *get_dumped_text ();
+
+ private:
+  pretty_printer m_pp;
+  dump_context m_context;
+  dump_context *m_saved;
+};
+
+/* Implementation detail of ASSERT_DUMPED_TEXT_EQ.  */
+
+extern void verify_dumped_text (const location &loc,
+				temp_dump_context *context,
+				const char *expected_text);
+
+/* Verify that the text dumped so far in CONTEXT equals
+   EXPECTED_TEXT.
+   As a side-effect, the internal buffer is 0-terminated.  */
+
+#define ASSERT_DUMPED_TEXT_EQ(CONTEXT, EXPECTED_TEXT)			\
+  SELFTEST_BEGIN_STMT							\
+    verify_dumped_text (SELFTEST_LOCATION, &(CONTEXT), (EXPECTED_TEXT)); \
+  SELFTEST_END_STMT
+
+
+/* Verify that ITEM has the expected values.  */
+
+void
+verify_item (const location &loc,
+	     const optinfo_item *item,
+	     enum optinfo_item_kind expected_kind,
+	     location_t expected_location,
+	     const char *expected_text);
+
+/* Verify that ITEM is a text item, with EXPECTED_TEXT.  */
+
+#define ASSERT_IS_TEXT(ITEM, EXPECTED_TEXT) \
+  SELFTEST_BEGIN_STMT						    \
+    verify_item (SELFTEST_LOCATION, (ITEM), OPTINFO_ITEM_KIND_TEXT, \
+		 UNKNOWN_LOCATION, (EXPECTED_TEXT));		    \
+  SELFTEST_END_STMT
+
+/* Verify that ITEM is a tree item, with the expected values.  */
+
+#define ASSERT_IS_TREE(ITEM, EXPECTED_LOCATION, EXPECTED_TEXT) \
+  SELFTEST_BEGIN_STMT						    \
+    verify_item (SELFTEST_LOCATION, (ITEM), OPTINFO_ITEM_KIND_TREE, \
+		 (EXPECTED_LOCATION), (EXPECTED_TEXT));	    \
+  SELFTEST_END_STMT
+
+/* Verify that ITEM is a gimple item, with the expected values.  */
+
+#define ASSERT_IS_GIMPLE(ITEM, EXPECTED_LOCATION, EXPECTED_TEXT) \
+  SELFTEST_BEGIN_STMT						    \
+    verify_item (SELFTEST_LOCATION, (ITEM), OPTINFO_ITEM_KIND_GIMPLE, \
+		 (EXPECTED_LOCATION), (EXPECTED_TEXT));	    \
+  SELFTEST_END_STMT
+
+/* Verify that ITEM is a symtab node, with the expected values.  */
+
+#define ASSERT_IS_SYMTAB_NODE(ITEM, EXPECTED_LOCATION, EXPECTED_TEXT) \
+  SELFTEST_BEGIN_STMT						    \
+    verify_item (SELFTEST_LOCATION, (ITEM), OPTINFO_ITEM_KIND_SYMTAB_NODE, \
+		 (EXPECTED_LOCATION), (EXPECTED_TEXT));	    \
+  SELFTEST_END_STMT
+
+} // namespace selftest
+
+#endif /* CHECKING_P */
+
+#endif /* GCC_DUMP_CONTEXT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/dumpfile.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dumpfile.h
new file mode 100644
index 0000000..1f9ac42
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dumpfile.h
@@ -0,0 +1,758 @@
+/* Definitions for the shared dumpfile.
+   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+#ifndef GCC_DUMPFILE_H
+#define GCC_DUMPFILE_H 1
+
+#include "profile-count.h"
+
+/* An attribute for annotating formatting printing functions that use
+   the dumpfile/optinfo formatting codes.  These are the pretty_printer
+   format codes (see pretty-print.c), with additional codes for middle-end
+   specific entities (see dumpfile.c).  */
+
+#if GCC_VERSION >= 9000
+#define ATTRIBUTE_GCC_DUMP_PRINTF(m, n) \
+  __attribute__ ((__format__ (__gcc_dump_printf__, m ,n))) \
+  ATTRIBUTE_NONNULL(m)
+#else
+#define ATTRIBUTE_GCC_DUMP_PRINTF(m, n) ATTRIBUTE_NONNULL(m)
+#endif
+
+/* Different tree dump places.  When you add new tree dump places,
+   extend the DUMP_FILES array in dumpfile.c.  */
+enum tree_dump_index
+{
+  TDI_none,			/* No dump */
+  TDI_cgraph,			/* dump function call graph.  */
+  TDI_inheritance,		/* dump type inheritance graph.  */
+  TDI_clones,			/* dump IPA cloning decisions.  */
+  TDI_original,			/* dump each function before optimizing it */
+  TDI_gimple,			/* dump each function after gimplifying it */
+  TDI_nested,			/* dump each function after unnesting it */
+  TDI_lto_stream_out,		/* dump information about lto streaming */
+
+  TDI_lang_all,			/* enable all the language dumps.  */
+  TDI_tree_all,			/* enable all the GENERIC/GIMPLE dumps.  */
+  TDI_rtl_all,			/* enable all the RTL dumps.  */
+  TDI_ipa_all,			/* enable all the IPA dumps.  */
+
+  TDI_end
+};
+
+/* Enum used to distinguish dump files to types.  */
+
+enum dump_kind
+{
+  DK_none,
+  DK_lang,
+  DK_tree,
+  DK_rtl,
+  DK_ipa
+};
+
+/* Bit masks to control dumping. Not all values are applicable to all
+   dumps. Add new ones at the end. When you define new values, extend
+   the DUMP_OPTIONS array in dumpfile.c. The TDF_* flags coexist with
+   MSG_* flags (for -fopt-info) and the bit values must be chosen to
+   allow that.  */
+enum dump_flag
+{
+  /* Value of TDF_NONE is used just for bits filtered by TDF_KIND_MASK.  */
+  TDF_NONE  = 0,
+
+  /* Dump node addresses.  */
+  TDF_ADDRESS = (1 << 0),
+
+  /* Don't go wild following links.  */
+  TDF_SLIM = (1 << 1),
+
+  /* Don't unparse the function.  */
+  TDF_RAW = (1 << 2),
+
+  /* Show more detailed info about each pass.  */
+  TDF_DETAILS = (1 << 3),
+
+  /* Dump various statistics about each pass.  */
+  TDF_STATS = (1 << 4),
+
+  /* Display basic block boundaries.  */
+  TDF_BLOCKS = (1 << 5),
+
+  /* Display virtual operands.  */
+  TDF_VOPS = (1 << 6),
+
+  /* Display statement line numbers.  */
+  TDF_LINENO = (1 << 7),
+
+  /* Display decl UIDs.  */
+  TDF_UID  = (1 << 8),
+
+  /* Address of stmt.  */
+  TDF_STMTADDR = (1 << 9),
+
+  /* A graph dump is being emitted.  */
+  TDF_GRAPH = (1 << 10),
+
+  /* Display memory symbols in expr.
+     Implies TDF_VOPS.  */
+  TDF_MEMSYMS = (1 << 11),
+
+  /* A flag to only print the RHS of a gimple stmt.  */
+  TDF_RHS_ONLY = (1 << 12),
+
+  /* Display asm names of decls.  */
+  TDF_ASMNAME = (1 << 13),
+
+  /* Display EH region number holding this gimple statement.  */
+  TDF_EH  = (1 << 14),
+
+  /* Omit UIDs from dumps.  */
+  TDF_NOUID = (1 << 15),
+
+  /* Display alias information.  */
+  TDF_ALIAS = (1 << 16),
+
+  /* Enumerate locals by uid.  */
+  TDF_ENUMERATE_LOCALS = (1 << 17),
+
+  /* Dump cselib details.  */
+  TDF_CSELIB = (1 << 18),
+
+  /* Dump SCEV details.  */
+  TDF_SCEV = (1 << 19),
+
+  /* Dump in GIMPLE FE syntax  */
+  TDF_GIMPLE = (1 << 20),
+
+  /* Dump folding details.  */
+  TDF_FOLDING = (1 << 21),
+
+  /* MSG_* flags for expressing the kinds of message to
+     be emitted by -fopt-info.  */
+
+  /* -fopt-info optimized sources.  */
+  MSG_OPTIMIZED_LOCATIONS = (1 << 22),
+
+  /* Missed opportunities.  */
+  MSG_MISSED_OPTIMIZATION = (1 << 23),
+
+  /* General optimization info.  */
+  MSG_NOTE = (1 << 24),
+
+  /* Mask for selecting MSG_-kind flags.  */
+  MSG_ALL_KINDS = (MSG_OPTIMIZED_LOCATIONS
+		   | MSG_MISSED_OPTIMIZATION
+		   | MSG_NOTE),
+
+  /* MSG_PRIORITY_* flags for expressing the priority levels of message
+     to be emitted by -fopt-info, and filtering on them.
+     By default, messages at the top-level dump scope are "user-facing",
+     whereas those that are in nested scopes are implicitly "internals".
+     This behavior can be overridden for a given dump message by explicitly
+     specifying one of the MSG_PRIORITY_* flags.
+
+     By default, dump files show both kinds of message, whereas -fopt-info
+     only shows "user-facing" messages, and requires the "-internals"
+     sub-option of -fopt-info to show the internal messages.  */
+
+  /* Implicitly supplied for messages at the top-level dump scope.  */
+  MSG_PRIORITY_USER_FACING = (1 << 25),
+
+  /* Implicitly supplied for messages within nested dump scopes.  */
+  MSG_PRIORITY_INTERNALS = (1 << 26),
+
+  /* Supplied when an opt_problem generated in a nested scope is re-emitted
+     at the top-level.   We want to default to showing these in -fopt-info
+     output, but to *not* show them in dump files, as the message would be
+     shown twice, messing up "scan-tree-dump-times" in DejaGnu tests.  */
+  MSG_PRIORITY_REEMITTED = (1 << 27),
+
+  /* Mask for selecting MSG_PRIORITY_* flags.  */
+  MSG_ALL_PRIORITIES = (MSG_PRIORITY_USER_FACING
+			| MSG_PRIORITY_INTERNALS
+			| MSG_PRIORITY_REEMITTED),
+
+  /* Dumping for -fcompare-debug.  */
+  TDF_COMPARE_DEBUG = (1 << 28),
+
+  /* All values.  */
+  TDF_ALL_VALUES = (1 << 29) - 1
+};
+
+/* Dump flags type.  */
+
+typedef enum dump_flag dump_flags_t;
+
+static inline dump_flags_t
+operator| (dump_flags_t lhs, dump_flags_t rhs)
+{
+  return (dump_flags_t)((int)lhs | (int)rhs);
+}
+
+static inline dump_flags_t
+operator& (dump_flags_t lhs, dump_flags_t rhs)
+{
+  return (dump_flags_t)((int)lhs & (int)rhs);
+}
+
+static inline dump_flags_t
+operator~ (dump_flags_t flags)
+{
+  return (dump_flags_t)~((int)flags);
+}
+
+static inline dump_flags_t &
+operator|= (dump_flags_t &lhs, dump_flags_t rhs)
+{
+  lhs = (dump_flags_t)((int)lhs | (int)rhs);
+  return lhs;
+}
+
+static inline dump_flags_t &
+operator&= (dump_flags_t &lhs, dump_flags_t rhs)
+{
+  lhs = (dump_flags_t)((int)lhs & (int)rhs);
+  return lhs;
+}
+
+/* Flags to control high-level -fopt-info dumps.  Usually these flags
+   define a group of passes.  An optimization pass can be part of
+   multiple groups.  */
+
+enum optgroup_flag
+{
+  OPTGROUP_NONE = 0,
+
+  /* IPA optimization passes */
+  OPTGROUP_IPA  = (1 << 1),
+
+  /* Loop optimization passes */
+  OPTGROUP_LOOP = (1 << 2),
+
+  /* Inlining passes */
+  OPTGROUP_INLINE = (1 << 3),
+
+  /* OMP (Offloading and Multi Processing) transformations */
+  OPTGROUP_OMP = (1 << 4),
+
+  /* Vectorization passes */
+  OPTGROUP_VEC = (1 << 5),
+
+  /* All other passes */
+  OPTGROUP_OTHER = (1 << 6),
+
+  OPTGROUP_ALL = (OPTGROUP_IPA | OPTGROUP_LOOP | OPTGROUP_INLINE
+		  | OPTGROUP_OMP | OPTGROUP_VEC | OPTGROUP_OTHER)
+};
+
+typedef enum optgroup_flag optgroup_flags_t;
+
+static inline optgroup_flags_t
+operator| (optgroup_flags_t lhs, optgroup_flags_t rhs)
+{
+  return (optgroup_flags_t)((int)lhs | (int)rhs);
+}
+
+static inline optgroup_flags_t &
+operator|= (optgroup_flags_t &lhs, optgroup_flags_t rhs)
+{
+  lhs = (optgroup_flags_t)((int)lhs | (int)rhs);
+  return lhs;
+}
+
+/* Define a tree dump switch.  */
+struct dump_file_info
+{
+  /* Suffix to give output file.  */
+  const char *suffix;
+  /* Command line dump switch.  */
+  const char *swtch;
+  /* Command line glob.  */
+  const char *glob;
+  /* Filename for the pass-specific stream.  */
+  const char *pfilename;
+  /* Filename for the -fopt-info stream.  */
+  const char *alt_filename;
+  /* Pass-specific dump stream.  */
+  FILE *pstream;
+  /* -fopt-info stream.  */
+  FILE *alt_stream;
+  /* Dump kind.  */
+  dump_kind dkind;
+  /* Dump flags.  */
+  dump_flags_t pflags;
+  /* A pass flags for -fopt-info.  */
+  dump_flags_t alt_flags;
+  /* Flags for -fopt-info given by a user.  */
+  optgroup_flags_t optgroup_flags;
+  /* State of pass-specific stream.  */
+  int pstate;
+  /* State of the -fopt-info stream.  */
+  int alt_state;
+  /* Dump file number.  */
+  int num;
+  /* Fields "suffix", "swtch", "glob" can be const strings,
+     or can be dynamically allocated, needing free.  */
+  bool owns_strings;
+  /* When a given dump file is being initialized, this flag is set to true
+     if the corresponding TDF_graph dump file has also been initialized.  */
+  bool graph_dump_initialized;
+};
+
+/* A class for describing where in the user's source that a dump message
+   relates to, with various constructors for convenience.
+   In particular, this lets us associate dump messages
+   with hotness information (e.g. from PGO), allowing them to
+   be prioritized by code hotness.  */
+
+class dump_user_location_t
+{
+ public:
+  /* Default constructor, analogous to UNKNOWN_LOCATION.  */
+  dump_user_location_t () : m_count (), m_loc (UNKNOWN_LOCATION) {}
+
+  /* Construct from a gimple statement (using its location and hotness).  */
+  dump_user_location_t (const gimple *stmt);
+
+  /* Construct from an RTL instruction (using its location and hotness).  */
+  dump_user_location_t (const rtx_insn *insn);
+
+  /* Construct from a location_t.  This one is deprecated (since it doesn't
+     capture hotness information); it thus needs to be spelled out.  */
+  static dump_user_location_t
+  from_location_t (location_t loc)
+  {
+    return dump_user_location_t (profile_count (), loc);
+  }
+
+  /* Construct from a function declaration.  This one requires spelling out
+     to avoid accidentally constructing from other kinds of tree.  */
+  static dump_user_location_t
+  from_function_decl (tree fndecl);
+
+  profile_count get_count () const { return m_count; }
+  location_t get_location_t () const { return m_loc; }
+
+ private:
+  /* Private ctor from count and location, for use by from_location_t.  */
+  dump_user_location_t (profile_count count, location_t loc)
+    : m_count (count), m_loc (loc)
+  {}
+
+  profile_count m_count;
+  location_t m_loc;
+};
+
+/* A class for identifying where in the compiler's own source
+   (or a plugin) that a dump message is being emitted from.  */
+
+struct dump_impl_location_t
+{
+  dump_impl_location_t (
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
+			const char *file = __builtin_FILE (),
+			int line = __builtin_LINE (),
+			const char *function = __builtin_FUNCTION ()
+#else
+			const char *file = __FILE__,
+			int line = __LINE__,
+			const char *function = NULL
+#endif
+  )
+  : m_file (file), m_line (line), m_function (function)
+  {}
+
+  const char *m_file;
+  int m_line;
+  const char *m_function;
+};
+
+/* A bundle of metadata for describing a dump message:
+   (a) the dump_flags
+   (b) the source location within the compiler/plugin.
+
+   The constructors use default parameters so that (b) gets sets up
+   automatically.
+
+   Hence you can pass in e.g. MSG_NOTE, and the dump call
+   will automatically record where in GCC's source code the
+   dump was emitted from.  */
+
+class dump_metadata_t
+{
+ public:
+  dump_metadata_t (dump_flags_t dump_flags,
+		   const dump_impl_location_t &impl_location
+		     = dump_impl_location_t ())
+  : m_dump_flags (dump_flags),
+    m_impl_location (impl_location)
+  {
+  }
+
+  dump_flags_t get_dump_flags () const { return m_dump_flags; }
+
+  const dump_impl_location_t &
+  get_impl_location () const { return m_impl_location; }
+
+ private:
+  dump_flags_t m_dump_flags;
+  dump_impl_location_t m_impl_location;
+};
+
+/* A bundle of information for describing the location of a dump message:
+   (a) the source location and hotness within the user's code, together with
+   (b) the source location within the compiler/plugin.
+
+   The constructors use default parameters so that (b) gets sets up
+   automatically.
+
+   The upshot is that you can pass in e.g. a gimple * to dump_printf_loc,
+   and the dump call will automatically record where in GCC's source
+   code the dump was emitted from.  */
+
+class dump_location_t
+{
+ public:
+  /* Default constructor, analogous to UNKNOWN_LOCATION.  */
+  dump_location_t (const dump_impl_location_t &impl_location
+		     = dump_impl_location_t ())
+  : m_user_location (dump_user_location_t ()),
+    m_impl_location (impl_location)
+  {
+  }
+
+  /* Construct from a gimple statement (using its location and hotness).  */
+  dump_location_t (const gimple *stmt,
+		   const dump_impl_location_t &impl_location
+		     = dump_impl_location_t ())
+  : m_user_location (dump_user_location_t (stmt)),
+    m_impl_location (impl_location)
+  {
+  }
+
+  /* Construct from an RTL instruction (using its location and hotness).  */
+  dump_location_t (const rtx_insn *insn,
+		   const dump_impl_location_t &impl_location
+		   = dump_impl_location_t ())
+  : m_user_location (dump_user_location_t (insn)),
+    m_impl_location (impl_location)
+  {
+  }
+
+  /* Construct from a dump_user_location_t.  */
+  dump_location_t (const dump_user_location_t &user_location,
+		   const dump_impl_location_t &impl_location
+		     = dump_impl_location_t ())
+  : m_user_location (user_location),
+    m_impl_location (impl_location)
+  {
+  }
+
+  /* Construct from a location_t.  This one is deprecated (since it doesn't
+     capture hotness information), and thus requires spelling out.  */
+  static dump_location_t
+  from_location_t (location_t loc,
+		   const dump_impl_location_t &impl_location
+		     = dump_impl_location_t ())
+  {
+    return dump_location_t (dump_user_location_t::from_location_t (loc),
+			    impl_location);
+  }
+
+  const dump_user_location_t &
+  get_user_location () const { return m_user_location; }
+
+  const dump_impl_location_t &
+  get_impl_location () const { return m_impl_location; }
+
+  location_t get_location_t () const
+  {
+    return m_user_location.get_location_t ();
+  }
+
+  profile_count get_count () const { return m_user_location.get_count (); }
+
+ private:
+  dump_user_location_t m_user_location;
+  dump_impl_location_t m_impl_location;
+};
+
+/* In dumpfile.c */
+extern FILE *dump_begin (int, dump_flags_t *, int part=-1);
+extern void dump_end (int, FILE *);
+extern int opt_info_switch_p (const char *);
+extern const char *dump_flag_name (int);
+extern const kv_pair<optgroup_flags_t> optgroup_options[];
+
+/* Global variables used to communicate with passes.  */
+extern FILE *dump_file;
+extern dump_flags_t dump_flags;
+extern const char *dump_file_name;
+
+extern bool dumps_are_enabled;
+
+extern void set_dump_file (FILE *new_dump_file);
+
+/* Return true if any of the dumps is enabled, false otherwise. */
+static inline bool
+dump_enabled_p (void)
+{
+  return dumps_are_enabled;
+}
+
+/* The following API calls (which *don't* take a "FILE *")
+   write the output to zero or more locations.
+
+   Some destinations are written to immediately as dump_* calls
+   are made; for others, the output is consolidated into an "optinfo"
+   instance (with its own metadata), and only emitted once the optinfo
+   is complete.
+
+   The destinations are:
+
+   (a) the "immediate" destinations:
+       (a.1) the active dump_file, if any
+       (a.2) the -fopt-info destination, if any
+   (b) the "optinfo" destinations, if any:
+       (b.1) as optimization records
+
+   dump_* (MSG_*) --> dumpfile.c --> items --> (a.1) dump_file
+                                       |   `-> (a.2) alt_dump_file
+                                       |
+                                       `--> (b) optinfo
+                                                `---> optinfo destinations
+                                                      (b.1) optimization records
+
+   For optinfos, the dump_*_loc mark the beginning of an optinfo
+   instance: all subsequent dump_* calls are consolidated into
+   that optinfo, until the next dump_*_loc call (or a change in
+   dump scope, or a call to dumpfile_ensure_any_optinfo_are_flushed).
+
+   A group of dump_* calls should be guarded by:
+
+     if (dump_enabled_p ())
+
+   to minimize the work done for the common case where dumps
+   are disabled.  */
+
+extern void dump_printf (const dump_metadata_t &, const char *, ...)
+  ATTRIBUTE_GCC_DUMP_PRINTF (2, 3);
+
+extern void dump_printf_loc (const dump_metadata_t &, const dump_user_location_t &,
+			     const char *, ...)
+  ATTRIBUTE_GCC_DUMP_PRINTF (3, 0);
+extern void dump_function (int phase, tree fn);
+extern void dump_basic_block (dump_flags_t, basic_block, int);
+extern void dump_generic_expr_loc (const dump_metadata_t &,
+				   const dump_user_location_t &,
+				   dump_flags_t, tree);
+extern void dump_generic_expr (const dump_metadata_t &, dump_flags_t, tree);
+extern void dump_gimple_stmt_loc (const dump_metadata_t &,
+				  const dump_user_location_t &,
+				  dump_flags_t, gimple *, int);
+extern void dump_gimple_stmt (const dump_metadata_t &, dump_flags_t, gimple *, int);
+extern void dump_gimple_expr_loc (const dump_metadata_t &,
+				  const dump_user_location_t &,
+				  dump_flags_t, gimple *, int);
+extern void dump_gimple_expr (const dump_metadata_t &, dump_flags_t, gimple *, int);
+extern void dump_symtab_node (const dump_metadata_t &, symtab_node *);
+
+template<unsigned int N, typename C>
+void dump_dec (const dump_metadata_t &, const poly_int<N, C> &);
+extern void dump_dec (dump_flags_t, const poly_wide_int &, signop);
+extern void dump_hex (dump_flags_t, const poly_wide_int &);
+
+extern void dumpfile_ensure_any_optinfo_are_flushed ();
+
+/* Managing nested scopes, so that dumps can express the call chain
+   leading to a dump message.  */
+
+extern unsigned int get_dump_scope_depth ();
+extern void dump_begin_scope (const char *name,
+			      const dump_user_location_t &user_location,
+			      const dump_impl_location_t &impl_location);
+extern void dump_end_scope ();
+
+/* Implementation detail of the AUTO_DUMP_SCOPE macro below.
+
+   A RAII-style class intended to make it easy to emit dump
+   information about entering and exiting a collection of nested
+   function calls.  */
+
+class auto_dump_scope
+{
+ public:
+  auto_dump_scope (const char *name,
+		   const dump_user_location_t &user_location,
+		   const dump_impl_location_t &impl_location
+		   = dump_impl_location_t ())
+  {
+    if (dump_enabled_p ())
+      dump_begin_scope (name, user_location, impl_location);
+  }
+  ~auto_dump_scope ()
+  {
+    if (dump_enabled_p ())
+      dump_end_scope ();
+  }
+};
+
+/* A macro for calling:
+     dump_begin_scope (NAME, USER_LOC);
+   via an RAII object, thus printing "=== MSG ===\n" to the dumpfile etc,
+   and then calling
+     dump_end_scope ();
+   once the object goes out of scope, thus capturing the nesting of
+   the scopes.
+
+   These scopes affect dump messages within them: dump messages at the
+   top level implicitly default to MSG_PRIORITY_USER_FACING, whereas those
+   in a nested scope implicitly default to MSG_PRIORITY_INTERNALS.  */
+
+#define AUTO_DUMP_SCOPE(NAME, USER_LOC) \
+  auto_dump_scope scope (NAME, USER_LOC)
+
+extern void dump_function (int phase, tree fn);
+extern void print_combine_total_stats (void);
+extern bool enable_rtl_dump_file (void);
+
+/* In tree-dump.c  */
+extern void dump_node (const_tree, dump_flags_t, FILE *);
+
+/* In combine.c  */
+extern void dump_combine_total_stats (FILE *);
+/* In cfghooks.c  */
+extern void dump_bb (FILE *, basic_block, int, dump_flags_t);
+
+struct opt_pass;
+
+namespace gcc {
+
+/* A class for managing all of the various dump files used by the
+   optimization passes.  */
+
+class dump_manager
+{
+public:
+
+  dump_manager ();
+  ~dump_manager ();
+
+  /* Register a dumpfile.
+
+     TAKE_OWNERSHIP determines whether callee takes ownership of strings
+     SUFFIX, SWTCH, and GLOB. */
+  unsigned int
+  dump_register (const char *suffix, const char *swtch, const char *glob,
+		 dump_kind dkind, optgroup_flags_t optgroup_flags,
+		 bool take_ownership);
+
+  /* Allow languages and middle-end to register their dumps before the
+     optimization passes.  */
+  void
+  register_dumps ();
+
+  /* Return the dump_file_info for the given phase.  */
+  struct dump_file_info *
+  get_dump_file_info (int phase) const;
+
+  struct dump_file_info *
+  get_dump_file_info_by_switch (const char *swtch) const;
+
+  /* Return the name of the dump file for the given phase.
+     If the dump is not enabled, returns NULL.  */
+  char *
+  get_dump_file_name (int phase, int part = -1) const;
+
+  char *
+  get_dump_file_name (struct dump_file_info *dfi, int part = -1) const;
+
+  int
+  dump_switch_p (const char *arg);
+
+  /* Start a dump for PHASE. Store user-supplied dump flags in
+     *FLAG_PTR.  Return the number of streams opened.  Set globals
+     DUMP_FILE, and ALT_DUMP_FILE to point to the opened streams, and
+     set dump_flags appropriately for both pass dump stream and
+     -fopt-info stream. */
+  int
+  dump_start (int phase, dump_flags_t *flag_ptr);
+
+  /* Finish a tree dump for PHASE and close associated dump streams.  Also
+     reset the globals DUMP_FILE, ALT_DUMP_FILE, and DUMP_FLAGS.  */
+  void
+  dump_finish (int phase);
+
+  FILE *
+  dump_begin (int phase, dump_flags_t *flag_ptr, int part);
+
+  /* Returns nonzero if tree dump PHASE has been initialized.  */
+  int
+  dump_initialized_p (int phase) const;
+
+  /* Returns the switch name of PHASE.  */
+  const char *
+  dump_flag_name (int phase) const;
+
+  void register_pass (opt_pass *pass);
+
+private:
+
+  int
+  dump_phase_enabled_p (int phase) const;
+
+  int
+  dump_switch_p_1 (const char *arg, struct dump_file_info *dfi, bool doglob);
+
+  int
+  dump_enable_all (dump_kind dkind, dump_flags_t flags, const char *filename);
+
+  int
+  opt_info_enable_passes (optgroup_flags_t optgroup_flags, dump_flags_t flags,
+			  const char *filename);
+
+  bool update_dfi_for_opt_info (dump_file_info *dfi) const;
+
+private:
+
+  /* Dynamically registered dump files and switches.  */
+  int m_next_dump;
+  struct dump_file_info *m_extra_dump_files;
+  size_t m_extra_dump_files_in_use;
+  size_t m_extra_dump_files_alloced;
+
+  /* Stored values from -fopt-info, for handling passes created after
+     option-parsing (by backends and by plugins).  */
+  optgroup_flags_t m_optgroup_flags;
+  dump_flags_t m_optinfo_flags;
+  char *m_optinfo_filename;
+
+  /* Grant access to dump_enable_all.  */
+  friend bool ::enable_rtl_dump_file (void);
+
+  /* Grant access to opt_info_enable_passes.  */
+  friend int ::opt_info_switch_p (const char *arg);
+
+}; // class dump_manager
+
+} // namespace gcc
+
+#endif /* GCC_DUMPFILE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/dwarf2asm.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dwarf2asm.h
new file mode 100644
index 0000000..965bc7f
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dwarf2asm.h
@@ -0,0 +1,100 @@
+/* Dwarf2 assembler output helper routines.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_DWARF2ASM_H
+#define GCC_DWARF2ASM_H
+
+extern void dw2_assemble_integer (int, rtx);
+
+extern void dw2_asm_output_data_raw (int, unsigned HOST_WIDE_INT);
+
+extern void dw2_asm_output_data (int, unsigned HOST_WIDE_INT,
+				 const char *, ...)
+     ATTRIBUTE_NULL_PRINTF_3;
+
+extern void dw2_asm_output_delta (int, const char *, const char *,
+				  const char *, ...)
+     ATTRIBUTE_NULL_PRINTF_4;
+
+extern void dw2_asm_output_vms_delta (int, const char *, const char *,
+				      const char *, ...)
+     ATTRIBUTE_NULL_PRINTF_4;
+
+extern void dw2_asm_output_offset (int, const char *, section *,
+				   const char *, ...)
+     ATTRIBUTE_NULL_PRINTF_4;
+
+extern void dw2_asm_output_offset (int, const char *, HOST_WIDE_INT,
+				   section *, const char *, ...)
+     ATTRIBUTE_NULL_PRINTF_5;
+
+extern void dw2_asm_output_addr (int, const char *, const char *, ...)
+     ATTRIBUTE_NULL_PRINTF_3;
+
+extern void dw2_asm_output_addr_rtx (int, rtx, const char *, ...)
+     ATTRIBUTE_NULL_PRINTF_3;
+
+extern void dw2_asm_output_encoded_addr_rtx (int, rtx, bool,
+					     const char *, ...)
+     ATTRIBUTE_NULL_PRINTF_4;
+
+extern void dw2_asm_output_nstring (const char *, size_t,
+				    const char *, ...)
+     ATTRIBUTE_NULL_PRINTF_3;
+
+extern void dw2_asm_output_data_uleb128_raw (unsigned HOST_WIDE_INT);
+
+extern void dw2_asm_output_data_uleb128	(unsigned HOST_WIDE_INT,
+					 const char *, ...)
+     ATTRIBUTE_NULL_PRINTF_2;
+
+extern void dw2_asm_output_data_sleb128_raw (HOST_WIDE_INT);
+
+extern void dw2_asm_output_data_sleb128	(HOST_WIDE_INT,
+					 const char *, ...)
+     ATTRIBUTE_NULL_PRINTF_2;
+
+extern void dw2_asm_output_symname_uleb128 (const char *,
+					    const char *, ...)
+     ATTRIBUTE_NULL_PRINTF_2;
+
+extern void dw2_asm_output_delta_uleb128 (const char *, const char *,
+					  const char *, ...)
+     ATTRIBUTE_NULL_PRINTF_3;
+
+extern int size_of_uleb128 (unsigned HOST_WIDE_INT);
+extern int size_of_sleb128 (HOST_WIDE_INT);
+extern int size_of_encoded_value (int);
+extern const char *eh_data_format_name (int);
+
+extern rtx dw2_force_const_mem (rtx, bool);
+extern void dw2_output_indirect_constants (void);
+
+/* These are currently unused.  */
+
+#if 0
+extern void dw2_asm_output_pcrel (int, const char *, const char *, ...)
+     ATTRIBUTE_NULL_PRINTF_3;
+
+extern void dw2_asm_output_delta_sleb128 (const char *, const char *,
+					  const char *, ...)
+     ATTRIBUTE_NULL_PRINTF_3;
+#endif
+
+#endif /* GCC_DWARF2ASM_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/dwarf2out.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dwarf2out.h
new file mode 100644
index 0000000..add8836
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/dwarf2out.h
@@ -0,0 +1,387 @@
+/* dwarf2out.h - Various declarations for functions found in dwarf2out.c
+   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_DWARF2OUT_H
+#define GCC_DWARF2OUT_H 1
+
+#include "dwarf2.h"	/* ??? Remove this once only used by dwarf2foo.c.  */
+
+typedef struct die_struct *dw_die_ref;
+typedef const struct die_struct *const_dw_die_ref;
+
+typedef struct dw_val_node *dw_val_ref;
+typedef struct dw_cfi_node *dw_cfi_ref;
+typedef struct dw_loc_descr_node *dw_loc_descr_ref;
+typedef struct dw_loc_list_struct *dw_loc_list_ref;
+typedef struct dw_discr_list_node *dw_discr_list_ref;
+typedef wide_int *wide_int_ptr;
+
+
+/* Call frames are described using a sequence of Call Frame
+   Information instructions.  The register number, offset
+   and address fields are provided as possible operands;
+   their use is selected by the opcode field.  */
+
+enum dw_cfi_oprnd_type {
+  dw_cfi_oprnd_unused,
+  dw_cfi_oprnd_reg_num,
+  dw_cfi_oprnd_offset,
+  dw_cfi_oprnd_addr,
+  dw_cfi_oprnd_loc,
+  dw_cfi_oprnd_cfa_loc
+};
+
+typedef union GTY(()) {
+  unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
+  HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
+  const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
+  struct dw_loc_descr_node * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
+  struct dw_cfa_location * GTY ((tag ("dw_cfi_oprnd_cfa_loc")))
+    dw_cfi_cfa_loc;
+} dw_cfi_oprnd;
+
+struct GTY(()) dw_cfi_node {
+  enum dwarf_call_frame_info dw_cfi_opc;
+  dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
+    dw_cfi_oprnd1;
+  dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
+    dw_cfi_oprnd2;
+};
+
+
+typedef vec<dw_cfi_ref, va_gc> *cfi_vec;
+
+typedef struct dw_fde_node *dw_fde_ref;
+
+/* All call frame descriptions (FDE's) in the GCC generated DWARF
+   refer to a single Common Information Entry (CIE), defined at
+   the beginning of the .debug_frame section.  This use of a single
+   CIE obviates the need to keep track of multiple CIE's
+   in the DWARF generation routines below.  */
+
+struct GTY(()) dw_fde_node {
+  tree decl;
+  const char *dw_fde_begin;
+  const char *dw_fde_current_label;
+  const char *dw_fde_end;
+  const char *dw_fde_vms_end_prologue;
+  const char *dw_fde_vms_begin_epilogue;
+  const char *dw_fde_second_begin;
+  const char *dw_fde_second_end;
+  cfi_vec dw_fde_cfi;
+  int dw_fde_switch_cfi_index; /* Last CFI before switching sections.  */
+  HOST_WIDE_INT stack_realignment;
+
+  unsigned funcdef_number;
+  unsigned fde_index;
+
+  /* Dynamic realign argument pointer register.  */
+  unsigned int drap_reg;
+  /* Virtual dynamic realign argument pointer register.  */
+  unsigned int vdrap_reg;
+  /* These 3 flags are copied from rtl_data in function.h.  */
+  unsigned all_throwers_are_sibcalls : 1;
+  unsigned uses_eh_lsda : 1;
+  unsigned nothrow : 1;
+  /* Whether we did stack realign in this call frame.  */
+  unsigned stack_realign : 1;
+  /* Whether dynamic realign argument pointer register has been saved.  */
+  unsigned drap_reg_saved: 1;
+  /* True iff dw_fde_begin label is in text_section or cold_text_section.  */
+  unsigned in_std_section : 1;
+  /* True iff dw_fde_second_begin label is in text_section or
+     cold_text_section.  */
+  unsigned second_in_std_section : 1;
+};
+
+
+/* This is how we define the location of the CFA. We use to handle it
+   as REG + OFFSET all the time,  but now it can be more complex.
+   It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
+   Instead of passing around REG and OFFSET, we pass a copy
+   of this structure.  */
+struct GTY(()) dw_cfa_location {
+  poly_int64_pod offset;
+  poly_int64_pod base_offset;
+  /* REG is in DWARF_FRAME_REGNUM space, *not* normal REGNO space.  */
+  unsigned int reg;
+  BOOL_BITFIELD indirect : 1;  /* 1 if CFA is accessed via a dereference.  */
+  BOOL_BITFIELD in_use : 1;    /* 1 if a saved cfa is stored here.  */
+};
+
+
+/* Each DIE may have a series of attribute/value pairs.  Values
+   can take on several forms.  The forms that are used in this
+   implementation are listed below.  */
+
+enum dw_val_class
+{
+  dw_val_class_none,
+  dw_val_class_addr,
+  dw_val_class_offset,
+  dw_val_class_loc,
+  dw_val_class_loc_list,
+  dw_val_class_range_list,
+  dw_val_class_const,
+  dw_val_class_unsigned_const,
+  dw_val_class_const_double,
+  dw_val_class_wide_int,
+  dw_val_class_vec,
+  dw_val_class_flag,
+  dw_val_class_die_ref,
+  dw_val_class_fde_ref,
+  dw_val_class_lbl_id,
+  dw_val_class_lineptr,
+  dw_val_class_str,
+  dw_val_class_macptr,
+  dw_val_class_loclistsptr,
+  dw_val_class_file,
+  dw_val_class_data8,
+  dw_val_class_decl_ref,
+  dw_val_class_vms_delta,
+  dw_val_class_high_pc,
+  dw_val_class_discr_value,
+  dw_val_class_discr_list,
+  dw_val_class_const_implicit,
+  dw_val_class_unsigned_const_implicit,
+  dw_val_class_file_implicit,
+  dw_val_class_view_list,
+  dw_val_class_symview
+};
+
+/* Describe a floating point constant value, or a vector constant value.  */
+
+struct GTY(()) dw_vec_const {
+  void * GTY((atomic)) array;
+  unsigned length;
+  unsigned elt_size;
+};
+
+/* Describe a single value that a discriminant can match.
+
+   Discriminants (in the "record variant part" meaning) are scalars.
+   dw_discr_list_ref and dw_discr_value are a mean to describe a set of
+   discriminant values that are matched by a particular variant.
+
+   Discriminants can be signed or unsigned scalars, and can be discriminants
+   values.  Both have to be consistent, though.  */
+
+struct GTY(()) dw_discr_value {
+  int pos; /* Whether the discriminant value is positive (unsigned).  */
+  union
+    {
+      HOST_WIDE_INT GTY ((tag ("0"))) sval;
+      unsigned HOST_WIDE_INT GTY ((tag ("1"))) uval;
+    }
+  GTY ((desc ("%1.pos"))) v;
+};
+
+struct addr_table_entry;
+
+/* The dw_val_node describes an attribute's value, as it is
+   represented internally.  */
+
+struct GTY(()) dw_val_node {
+  enum dw_val_class val_class;
+  struct addr_table_entry * GTY(()) val_entry;
+  union dw_val_struct_union
+    {
+      rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
+      unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
+      dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
+      dw_die_ref GTY ((tag ("dw_val_class_view_list"))) val_view_list;
+      dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
+      HOST_WIDE_INT GTY ((default)) val_int;
+      unsigned HOST_WIDE_INT
+	GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
+      double_int GTY ((tag ("dw_val_class_const_double"))) val_double;
+      wide_int_ptr GTY ((tag ("dw_val_class_wide_int"))) val_wide;
+      dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
+      struct dw_val_die_union
+	{
+	  dw_die_ref die;
+	  int external;
+	} GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
+      unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
+      struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
+      char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
+      unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
+      struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
+      struct dwarf_file_data *
+	GTY ((tag ("dw_val_class_file_implicit"))) val_file_implicit;
+      unsigned char GTY ((tag ("dw_val_class_data8"))) val_data8[8];
+      tree GTY ((tag ("dw_val_class_decl_ref"))) val_decl_ref;
+      struct dw_val_vms_delta_union
+	{
+	  char * lbl1;
+	  char * lbl2;
+	} GTY ((tag ("dw_val_class_vms_delta"))) val_vms_delta;
+      dw_discr_value GTY ((tag ("dw_val_class_discr_value"))) val_discr_value;
+      dw_discr_list_ref GTY ((tag ("dw_val_class_discr_list"))) val_discr_list;
+      char * GTY ((tag ("dw_val_class_symview"))) val_symbolic_view;
+    }
+  GTY ((desc ("%1.val_class"))) v;
+};
+
+/* Locations in memory are described using a sequence of stack machine
+   operations.  */
+
+struct GTY((chain_next ("%h.dw_loc_next"))) dw_loc_descr_node {
+  dw_loc_descr_ref dw_loc_next;
+  ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc : 8;
+  /* Used to distinguish DW_OP_addr with a direct symbol relocation
+     from DW_OP_addr with a dtp-relative symbol relocation.  */
+  unsigned int dtprel : 1;
+  /* For DW_OP_pick, DW_OP_dup and DW_OP_over operations: true iff.
+     it targets a DWARF prodecure argument.  In this case, it needs to be
+     relocated according to the current frame offset.  */
+  unsigned int frame_offset_rel : 1;
+  int dw_loc_addr;
+  dw_val_node dw_loc_oprnd1;
+  dw_val_node dw_loc_oprnd2;
+};
+
+/* A variant (inside a record variant part) is selected when the corresponding
+   discriminant matches its set of values (see the comment for dw_discr_value).
+   The following datastructure holds such matching information.  */
+
+struct GTY(()) dw_discr_list_node {
+  dw_discr_list_ref dw_discr_next;
+
+  dw_discr_value dw_discr_lower_bound;
+  dw_discr_value dw_discr_upper_bound;
+  /* This node represents only the value in dw_discr_lower_bound when it's
+     zero.  It represents the range between the two fields (bounds included)
+     otherwise.  */
+  int dw_discr_range;
+};
+
+/* Interface from dwarf2out.c to dwarf2cfi.c.  */
+extern struct dw_loc_descr_node *build_cfa_loc
+  (dw_cfa_location *, poly_int64);
+extern struct dw_loc_descr_node *build_cfa_aligned_loc
+  (dw_cfa_location *, poly_int64, HOST_WIDE_INT);
+extern struct dw_loc_descr_node *mem_loc_descriptor
+  (rtx, machine_mode mode, machine_mode mem_mode,
+   enum var_init_status);
+extern bool loc_descr_equal_p (dw_loc_descr_ref, dw_loc_descr_ref);
+extern dw_fde_ref dwarf2out_alloc_current_fde (void);
+
+extern unsigned long size_of_locs (dw_loc_descr_ref);
+extern void output_loc_sequence (dw_loc_descr_ref, int);
+extern void output_loc_sequence_raw (dw_loc_descr_ref);
+
+/* Interface from dwarf2cfi.c to dwarf2out.c.  */
+extern void lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc,
+			  dw_cfa_location *remember);
+extern bool cfa_equal_p (const dw_cfa_location *, const dw_cfa_location *);
+
+extern void output_cfi (dw_cfi_ref, dw_fde_ref, int);
+
+extern GTY(()) cfi_vec cie_cfi_vec;
+
+/* Interface from dwarf2*.c to the rest of the compiler.  */
+extern enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
+  (enum dwarf_call_frame_info cfi);
+extern enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
+  (enum dwarf_call_frame_info cfi);
+
+extern void output_cfi_directive (FILE *f, struct dw_cfi_node *cfi);
+
+extern void dwarf2out_emit_cfi (dw_cfi_ref cfi);
+
+extern void debug_dwarf (void);
+struct die_struct;
+extern void debug_dwarf_die (struct die_struct *);
+extern void debug_dwarf_loc_descr (dw_loc_descr_ref);
+extern void debug (die_struct &ref);
+extern void debug (die_struct *ptr);
+extern void dwarf2out_set_demangle_name_func (const char *(*) (const char *));
+#ifdef VMS_DEBUGGING_INFO
+extern void dwarf2out_vms_debug_main_pointer (void);
+#endif
+
+enum array_descr_ordering
+{
+  array_descr_ordering_default,
+  array_descr_ordering_row_major,
+  array_descr_ordering_column_major
+};
+
+#define DWARF2OUT_ARRAY_DESCR_INFO_MAX_DIMEN 16
+
+struct array_descr_info
+{
+  int ndimensions;
+  enum array_descr_ordering ordering;
+  tree element_type;
+  tree base_decl;
+  tree data_location;
+  tree allocated;
+  tree associated;
+  tree stride;
+  tree rank;
+  bool stride_in_bits;
+  struct array_descr_dimen
+    {
+      /* GCC uses sizetype for array indices, so lower_bound and upper_bound
+	 will likely be "sizetype" values. However, bounds may have another
+	 type in the original source code.  */
+      tree bounds_type;
+      tree lower_bound;
+      tree upper_bound;
+
+      /* Only Fortran uses more than one dimension for array types.  For other
+	 languages, the stride can be rather specified for the whole array.  */
+      tree stride;
+    } dimen[DWARF2OUT_ARRAY_DESCR_INFO_MAX_DIMEN];
+};
+
+enum fixed_point_scale_factor
+{
+  fixed_point_scale_factor_binary,
+  fixed_point_scale_factor_decimal,
+  fixed_point_scale_factor_arbitrary
+};
+
+struct fixed_point_type_info
+{
+  /* A scale factor is the value one has to multiply with physical data in
+     order to get the fixed point logical data.  The DWARF standard enables one
+     to encode it in three ways.  */
+  enum fixed_point_scale_factor scale_factor_kind;
+  union
+    {
+      /* For binary scale factor, the scale factor is: 2 ** binary.  */
+      int binary;
+      /* For decimal scale factor, the scale factor is: 10 ** binary.  */
+      int decimal;
+      /* For arbitrary scale factor, the scale factor is:
+	 numerator / denominator.  */
+      struct
+	{
+	  unsigned HOST_WIDE_INT numerator;
+	  HOST_WIDE_INT denominator;
+	} arbitrary;
+    } scale_factor;
+};
+
+void dwarf2out_c_finalize (void);
+
+#endif /* GCC_DWARF2OUT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/edit-context.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/edit-context.h
new file mode 100644
index 0000000..a26ed1d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/edit-context.h
@@ -0,0 +1,67 @@
+/* Determining the results of applying fix-it hints.
+   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_EDIT_CONTEXT_H
+#define GCC_EDIT_CONTEXT_H
+
+#include "typed-splay-tree.h"
+
+class edit_context;
+class edited_file;
+
+/* A set of changes to the source code.
+
+   The changes are "atomic" - if any changes can't be applied,
+   none of them can be (tracked by the m_valid flag).
+   Similarly, attempts to add the changes from a rich_location flagged
+   as containing invalid changes mean that the whole of the edit_context
+   is flagged as invalid.
+
+   A complication here is that fix-its are expressed relative to coordinates
+   in the files when they were parsed, before any changes have been made, and
+   so if there's more that one fix-it to be applied, we have to adjust
+   later fix-its to allow for the changes made by earlier ones.  This
+   is done by the various "get_effective_column" methods.  */
+
+class edit_context
+{
+ public:
+  edit_context ();
+
+  bool valid_p () const { return m_valid; }
+
+  void add_fixits (rich_location *richloc);
+
+  char *get_content (const char *filename);
+
+  int get_effective_column (const char *filename, int line, int column);
+
+  char *generate_diff (bool show_filenames);
+  void print_diff (pretty_printer *pp, bool show_filenames);
+
+ private:
+  bool apply_fixit (const fixit_hint *hint);
+  edited_file *get_file (const char *filename);
+  edited_file &get_or_insert_file (const char *filename);
+
+  bool m_valid;
+  typed_splay_tree<const char *, edited_file *> m_files;
+};
+
+#endif /* GCC_EDIT_CONTEXT_H.  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/emit-rtl.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/emit-rtl.h
new file mode 100644
index 0000000..7b1cecd
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/emit-rtl.h
@@ -0,0 +1,524 @@
+/* Exported functions from emit-rtl.c
+   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_EMIT_RTL_H
+#define GCC_EMIT_RTL_H
+
+struct temp_slot;
+typedef struct temp_slot *temp_slot_p;
+
+/* Information mainlined about RTL representation of incoming arguments.  */
+struct GTY(()) incoming_args {
+  /* Number of bytes of args popped by function being compiled on its return.
+     Zero if no bytes are to be popped.
+     May affect compilation of return insn or of function epilogue.  */
+  poly_int64_pod pops_args;
+
+  /* If function's args have a fixed size, this is that size, in bytes.
+     Otherwise, it is -1.
+     May affect compilation of return insn or of function epilogue.  */
+  poly_int64_pod size;
+
+  /* # bytes the prologue should push and pretend that the caller pushed them.
+     The prologue must do this, but only if parms can be passed in
+     registers.  */
+  int pretend_args_size;
+
+  /* This is the offset from the arg pointer to the place where the first
+     anonymous arg can be found, if there is one.  */
+  rtx arg_offset_rtx;
+
+  /* Quantities of various kinds of registers
+     used for the current function's args.  */
+  CUMULATIVE_ARGS info;
+
+  /* The arg pointer hard register, or the pseudo into which it was copied.  */
+  rtx internal_arg_pointer;
+};
+
+
+/* Datastructures maintained for currently processed function in RTL form.  */
+struct GTY(()) rtl_data {
+  void init_stack_alignment ();
+
+  struct expr_status expr;
+  struct emit_status emit;
+  struct varasm_status varasm;
+  struct incoming_args args;
+  struct function_subsections subsections;
+  struct rtl_eh eh;
+
+  /* For function.c  */
+
+  /* # of bytes of outgoing arguments.  If ACCUMULATE_OUTGOING_ARGS is
+     defined, the needed space is pushed by the prologue.  */
+  poly_int64_pod outgoing_args_size;
+
+  /* If nonzero, an RTL expression for the location at which the current
+     function returns its result.  If the current function returns its
+     result in a register, current_function_return_rtx will always be
+     the hard register containing the result.  */
+  rtx return_rtx;
+
+  /* Vector of initial-value pairs.  Each pair consists of a pseudo
+     register of approprite mode that stores the initial value a hard
+     register REGNO, and that hard register itself.  */
+  /* ??? This could be a VEC but there is currently no way to define an
+	 opaque VEC type.  */
+  struct initial_value_struct *hard_reg_initial_vals;
+
+  /* A variable living at the top of the frame that holds a known value.
+     Used for detecting stack clobbers.  */
+  tree stack_protect_guard;
+
+  /* The __stack_chk_guard variable or expression holding the stack
+     protector canary value.  */
+  tree stack_protect_guard_decl;
+
+  /* List (chain of INSN_LIST) of labels heading the current handlers for
+     nonlocal gotos.  */
+  rtx_insn_list *x_nonlocal_goto_handler_labels;
+
+  /* Label that will go on function epilogue.
+     Jumping to this label serves as a "return" instruction
+     on machines which require execution of the epilogue on all returns.  */
+  rtx_code_label *x_return_label;
+
+  /* Label that will go on the end of function epilogue.
+     Jumping to this label serves as a "naked return" instruction
+     on machines which require execution of the epilogue on all returns.  */
+  rtx_code_label *x_naked_return_label;
+
+  /* List (chain of EXPR_LISTs) of all stack slots in this function.
+     Made for the sake of unshare_all_rtl.  */
+  vec<rtx, va_gc> *x_stack_slot_list;
+
+  /* List of empty areas in the stack frame.  */
+  struct frame_space *frame_space_list;
+
+  /* Place after which to insert the tail_recursion_label if we need one.  */
+  rtx_note *x_stack_check_probe_note;
+
+  /* Location at which to save the argument pointer if it will need to be
+     referenced.  There are two cases where this is done: if nonlocal gotos
+     exist, or if vars stored at an offset from the argument pointer will be
+     needed by inner routines.  */
+  rtx x_arg_pointer_save_area;
+
+  /* Dynamic Realign Argument Pointer used for realigning stack.  */
+  rtx drap_reg;
+
+  /* Offset to end of allocated area of stack frame.
+     If stack grows down, this is the address of the last stack slot allocated.
+     If stack grows up, this is the address for the next slot.  */
+  poly_int64_pod x_frame_offset;
+
+  /* Insn after which register parms and SAVE_EXPRs are born, if nonopt.  */
+  rtx_insn *x_parm_birth_insn;
+
+  /* List of all used temporaries allocated, by level.  */
+  vec<temp_slot_p, va_gc> *x_used_temp_slots;
+
+  /* List of available temp slots.  */
+  struct temp_slot *x_avail_temp_slots;
+
+  /* Current nesting level for temporaries.  */
+  int x_temp_slot_level;
+
+  /* The largest alignment needed on the stack, including requirement
+     for outgoing stack alignment.  */
+  unsigned int stack_alignment_needed;
+
+  /* Preferred alignment of the end of stack frame, which is preferred
+     to call other functions.  */
+  unsigned int preferred_stack_boundary;
+
+  /* The minimum alignment of parameter stack.  */
+  unsigned int parm_stack_boundary;
+
+  /* The largest alignment of slot allocated on the stack.  */
+  unsigned int max_used_stack_slot_alignment;
+
+  /* The stack alignment estimated before reload, with consideration of
+     following factors:
+     1. Alignment of local stack variables (max_used_stack_slot_alignment)
+     2. Alignment requirement to call other functions
+        (preferred_stack_boundary)
+     3. Alignment of non-local stack variables but might be spilled in
+        local stack.  */
+  unsigned int stack_alignment_estimated;
+
+  /* For reorg.  */
+
+  /* Nonzero if function being compiled called builtin_return_addr or
+     builtin_frame_address with nonzero count.  */
+  bool accesses_prior_frames;
+
+  /* Nonzero if the function calls __builtin_eh_return.  */
+  bool calls_eh_return;
+
+  /* Nonzero if function saves all registers, e.g. if it has a nonlocal
+     label that can reach the exit block via non-exceptional paths. */
+  bool saves_all_registers;
+
+  /* Nonzero if function being compiled has nonlocal gotos to parent
+     function.  */
+  bool has_nonlocal_goto;
+
+  /* Nonzero if function being compiled has an asm statement.  */
+  bool has_asm_statement;
+
+  /* This bit is used by the exception handling logic.  It is set if all
+     calls (if any) are sibling calls.  Such functions do not have to
+     have EH tables generated, as they cannot throw.  A call to such a
+     function, however, should be treated as throwing if any of its callees
+     can throw.  */
+  bool all_throwers_are_sibcalls;
+
+  /* Nonzero if stack limit checking should be enabled in the current
+     function.  */
+  bool limit_stack;
+
+  /* Nonzero if profiling code should be generated.  */
+  bool profile;
+
+  /* Nonzero if the current function uses the constant pool.  */
+  bool uses_const_pool;
+
+  /* Nonzero if the current function uses pic_offset_table_rtx.  */
+  bool uses_pic_offset_table;
+
+  /* Nonzero if the current function needs an lsda for exception handling.  */
+  bool uses_eh_lsda;
+
+  /* Set when the tail call has been produced.  */
+  bool tail_call_emit;
+
+  /* Nonzero if code to initialize arg_pointer_save_area has been emitted.  */
+  bool arg_pointer_save_area_init;
+
+  /* Nonzero if current function must be given a frame pointer.
+     Set in reload1.c or lra-eliminations.c if anything is allocated
+     on the stack there.  */
+  bool frame_pointer_needed;
+
+  /* When set, expand should optimize for speed.  */
+  bool maybe_hot_insn_p;
+
+  /* Nonzero if function stack realignment is needed.  This flag may be
+     set twice: before and after reload.  It is set before reload wrt
+     stack alignment estimation before reload.  It will be changed after
+     reload if by then criteria of stack realignment is different.
+     The value set after reload is the accurate one and is finalized.  */
+  bool stack_realign_needed;
+
+  /* Nonzero if function stack realignment is tried.  This flag is set
+     only once before reload.  It affects register elimination.  This
+     is used to generate DWARF debug info for stack variables.  */
+  bool stack_realign_tried;
+
+  /* Nonzero if function being compiled needs dynamic realigned
+     argument pointer (drap) if stack needs realigning.  */
+  bool need_drap;
+
+  /* Nonzero if function stack realignment estimation is done, namely
+     stack_realign_needed flag has been set before reload wrt estimated
+     stack alignment info.  */
+  bool stack_realign_processed;
+
+  /* Nonzero if function stack realignment has been finalized, namely
+     stack_realign_needed flag has been set and finalized after reload.  */
+  bool stack_realign_finalized;
+
+  /* True if dbr_schedule has already been called for this function.  */
+  bool dbr_scheduled_p;
+
+  /* True if current function cannot throw.  Unlike
+     TREE_NOTHROW (current_function_decl) it is set even for overwritable
+     function where currently compiled version of it is nothrow.  */
+  bool nothrow;
+
+  /* True if we performed shrink-wrapping for the current function.  */
+  bool shrink_wrapped;
+
+  /* True if we performed shrink-wrapping for separate components for
+     the current function.  */
+  bool shrink_wrapped_separate;
+
+  /* Nonzero if function being compiled doesn't modify the stack pointer
+     (ignoring the prologue and epilogue).  This is only valid after
+     pass_stack_ptr_mod has run.  */
+  bool sp_is_unchanging;
+
+  /* Nonzero if function being compiled doesn't contain any calls
+     (ignoring the prologue and epilogue).  This is set prior to
+     register allocation in IRA and is valid for the remaining
+     compiler passes.  */
+  bool is_leaf;
+
+  /* Nonzero if the function being compiled is a leaf function which only
+     uses leaf registers.  This is valid after reload (specifically after
+     sched2) and is useful only if the port defines LEAF_REGISTERS.  */
+  bool uses_only_leaf_regs;
+
+  /* Nonzero if the function being compiled has undergone hot/cold partitioning
+     (under flag_reorder_blocks_and_partition) and has at least one cold
+     block.  */
+  bool has_bb_partition;
+
+  /* Nonzero if the function being compiled has completed the bb reordering
+     pass.  */
+  bool bb_reorder_complete;
+
+  /* Like regs_ever_live, but 1 if a reg is set or clobbered from an
+     asm.  Unlike regs_ever_live, elements of this array corresponding
+     to eliminable regs (like the frame pointer) are set if an asm
+     sets them.  */
+  HARD_REG_SET asm_clobbers;
+
+  /* The highest address seen during shorten_branches.  */
+  int max_insn_address;
+};
+
+#define return_label (crtl->x_return_label)
+#define naked_return_label (crtl->x_naked_return_label)
+#define stack_slot_list (crtl->x_stack_slot_list)
+#define parm_birth_insn (crtl->x_parm_birth_insn)
+#define frame_offset (crtl->x_frame_offset)
+#define stack_check_probe_note (crtl->x_stack_check_probe_note)
+#define arg_pointer_save_area (crtl->x_arg_pointer_save_area)
+#define used_temp_slots (crtl->x_used_temp_slots)
+#define avail_temp_slots (crtl->x_avail_temp_slots)
+#define temp_slot_level (crtl->x_temp_slot_level)
+#define nonlocal_goto_handler_labels (crtl->x_nonlocal_goto_handler_labels)
+#define frame_pointer_needed (crtl->frame_pointer_needed)
+#define stack_realign_fp (crtl->stack_realign_needed && !crtl->need_drap)
+#define stack_realign_drap (crtl->stack_realign_needed && crtl->need_drap)
+
+extern GTY(()) struct rtl_data x_rtl;
+
+/* Accessor to RTL datastructures.  We keep them statically allocated now since
+   we never keep multiple functions.  For threaded compiler we might however
+   want to do differently.  */
+#define crtl (&x_rtl)
+
+/* Return whether two MEM_ATTRs are equal.  */
+bool mem_attrs_eq_p (const struct mem_attrs *, const struct mem_attrs *);
+
+/* Set the alias set of MEM to SET.  */
+extern void set_mem_alias_set (rtx, alias_set_type);
+
+/* Set the alignment of MEM to ALIGN bits.  */
+extern void set_mem_align (rtx, unsigned int);
+
+/* Set the address space of MEM to ADDRSPACE.  */
+extern void set_mem_addr_space (rtx, addr_space_t);
+
+/* Set the expr for MEM to EXPR.  */
+extern void set_mem_expr (rtx, tree);
+
+/* Set the offset for MEM to OFFSET.  */
+extern void set_mem_offset (rtx, poly_int64);
+
+/* Clear the offset recorded for MEM.  */
+extern void clear_mem_offset (rtx);
+
+/* Set the size for MEM to SIZE.  */
+extern void set_mem_size (rtx, poly_int64);
+
+/* Clear the size recorded for MEM.  */
+extern void clear_mem_size (rtx);
+
+/* Set the attributes for MEM appropriate for a spill slot.  */
+extern void set_mem_attrs_for_spill (rtx);
+extern tree get_spill_slot_decl (bool);
+
+/* Return a memory reference like MEMREF, but with its address changed to
+   ADDR.  The caller is asserting that the actual piece of memory pointed
+   to is the same, just the form of the address is being changed, such as
+   by putting something into a register.  */
+extern rtx replace_equiv_address (rtx, rtx, bool = false);
+
+/* Likewise, but the reference is not required to be valid.  */
+extern rtx replace_equiv_address_nv (rtx, rtx, bool = false);
+
+extern rtx gen_blockage (void);
+extern rtvec gen_rtvec (int, ...);
+extern rtx copy_insn_1 (rtx);
+extern rtx copy_insn (rtx);
+extern rtx_insn *copy_delay_slot_insn (rtx_insn *);
+extern rtx gen_int_mode (poly_int64, machine_mode);
+extern rtx_insn *emit_copy_of_insn_after (rtx_insn *, rtx_insn *);
+extern void set_reg_attrs_from_value (rtx, rtx);
+extern void set_reg_attrs_for_parm (rtx, rtx);
+extern void set_reg_attrs_for_decl_rtl (tree t, rtx x);
+extern void adjust_reg_mode (rtx, machine_mode);
+extern int mem_expr_equal_p (const_tree, const_tree);
+extern rtx gen_int_shift_amount (machine_mode, poly_int64);
+
+extern bool need_atomic_barrier_p (enum memmodel, bool);
+
+/* Return the current sequence.  */
+
+static inline struct sequence_stack *
+get_current_sequence (void)
+{
+  return &crtl->emit.seq;
+}
+
+/* Return the outermost sequence.  */
+
+static inline struct sequence_stack *
+get_topmost_sequence (void)
+{
+  struct sequence_stack *seq, *top;
+
+  seq = get_current_sequence ();
+  do
+    {
+      top = seq;
+      seq = seq->next;
+    } while (seq);
+  return top;
+}
+
+/* Return the first insn of the current sequence or current function.  */
+
+static inline rtx_insn *
+get_insns (void)
+{
+  return get_current_sequence ()->first;
+}
+
+/* Specify a new insn as the first in the chain.  */
+
+static inline void
+set_first_insn (rtx_insn *insn)
+{
+  gcc_checking_assert (!insn || !PREV_INSN (insn));
+  get_current_sequence ()->first = insn;
+}
+
+/* Return the last insn emitted in current sequence or current function.  */
+
+static inline rtx_insn *
+get_last_insn (void)
+{
+  return get_current_sequence ()->last;
+}
+
+/* Specify a new insn as the last in the chain.  */
+
+static inline void
+set_last_insn (rtx_insn *insn)
+{
+  gcc_checking_assert (!insn || !NEXT_INSN (insn));
+  get_current_sequence ()->last = insn;
+}
+
+/* Return a number larger than any instruction's uid in this function.  */
+
+static inline int
+get_max_uid (void)
+{
+  return crtl->emit.x_cur_insn_uid;
+}
+
+extern bool valid_for_const_vector_p (machine_mode, rtx);
+extern rtx gen_const_vec_duplicate (machine_mode, rtx);
+extern rtx gen_vec_duplicate (machine_mode, rtx);
+
+extern rtx gen_const_vec_series (machine_mode, rtx, rtx);
+extern rtx gen_vec_series (machine_mode, rtx, rtx);
+
+extern void set_decl_incoming_rtl (tree, rtx, bool);
+
+/* Return a memory reference like MEMREF, but with its mode changed
+   to MODE and its address changed to ADDR.
+   (VOIDmode means don't change the mode.
+   NULL for ADDR means don't change the address.)  */
+extern rtx change_address (rtx, machine_mode, rtx);
+
+/* Return a memory reference like MEMREF, but with its mode changed
+   to MODE and its address offset by OFFSET bytes.  */
+#define adjust_address(MEMREF, MODE, OFFSET) \
+  adjust_address_1 (MEMREF, MODE, OFFSET, 1, 1, 0, 0)
+
+/* Likewise, but the reference is not required to be valid.  */
+#define adjust_address_nv(MEMREF, MODE, OFFSET) \
+  adjust_address_1 (MEMREF, MODE, OFFSET, 0, 1, 0, 0)
+
+/* Return a memory reference like MEMREF, but with its mode changed
+   to MODE and its address offset by OFFSET bytes.  Assume that it's
+   for a bitfield and conservatively drop the underlying object if we
+   cannot be sure to stay within its bounds.  */
+#define adjust_bitfield_address(MEMREF, MODE, OFFSET) \
+  adjust_address_1 (MEMREF, MODE, OFFSET, 1, 1, 1, 0)
+
+/* As for adjust_bitfield_address, but specify that the width of
+   BLKmode accesses is SIZE bytes.  */
+#define adjust_bitfield_address_size(MEMREF, MODE, OFFSET, SIZE) \
+  adjust_address_1 (MEMREF, MODE, OFFSET, 1, 1, 1, SIZE)
+
+/* Likewise, but the reference is not required to be valid.  */
+#define adjust_bitfield_address_nv(MEMREF, MODE, OFFSET) \
+  adjust_address_1 (MEMREF, MODE, OFFSET, 0, 1, 1, 0)
+
+/* Return a memory reference like MEMREF, but with its mode changed
+   to MODE and its address changed to ADDR, which is assumed to be
+   increased by OFFSET bytes from MEMREF.  */
+#define adjust_automodify_address(MEMREF, MODE, ADDR, OFFSET) \
+  adjust_automodify_address_1 (MEMREF, MODE, ADDR, OFFSET, 1)
+
+/* Likewise, but the reference is not required to be valid.  */
+#define adjust_automodify_address_nv(MEMREF, MODE, ADDR, OFFSET) \
+  adjust_automodify_address_1 (MEMREF, MODE, ADDR, OFFSET, 0)
+
+extern rtx adjust_address_1 (rtx, machine_mode, poly_int64, int, int,
+			     int, poly_int64);
+extern rtx adjust_automodify_address_1 (rtx, machine_mode, rtx,
+					poly_int64, int);
+
+/* Return a memory reference like MEMREF, but whose address is changed by
+   adding OFFSET, an RTX, to it.  POW2 is the highest power of two factor
+   known to be in OFFSET (possibly 1).  */
+extern rtx offset_address (rtx, rtx, unsigned HOST_WIDE_INT);
+
+/* Given REF, a MEM, and T, either the type of X or the expression
+   corresponding to REF, set the memory attributes.  OBJECTP is nonzero
+   if we are making a new object of this type.  */
+extern void set_mem_attributes (rtx, tree, int);
+
+/* Similar, except that BITPOS has not yet been applied to REF, so if
+   we alter MEM_OFFSET according to T then we should subtract BITPOS
+   expecting that it'll be added back in later.  */
+extern void set_mem_attributes_minus_bitpos (rtx, tree, int, poly_int64);
+
+/* Return OFFSET if XEXP (MEM, 0) - OFFSET is known to be ALIGN
+   bits aligned for 0 <= OFFSET < ALIGN / BITS_PER_UNIT, or
+   -1 if not known.  */
+extern int get_mem_align_offset (rtx, unsigned int);
+
+/* Return a memory reference like MEMREF, but with its mode widened to
+   MODE and adjusted by OFFSET.  */
+extern rtx widen_memory_access (rtx, machine_mode, poly_int64);
+
+extern void maybe_set_max_label_num (rtx_code_label *x);
+
+#endif /* GCC_EMIT_RTL_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/errors.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/errors.h
new file mode 100644
index 0000000..11ead1a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/errors.h
@@ -0,0 +1,40 @@
+/* Basic error reporting routines.
+   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* warning, error, and fatal.  These definitions are suitable for use
+   in the generator programs; eventually we would like to use them in
+   cc1 too, but that's a longer term project.
+
+   N.B. We cannot presently use ATTRIBUTE_PRINTF with these functions,
+   because they can be extended with additional format specifiers which
+   GCC does not know about.  */
+
+#ifndef GCC_ERRORS_H
+#define GCC_ERRORS_H
+
+extern void warning (const char *, ...) ATTRIBUTE_PRINTF_1 ATTRIBUTE_COLD;
+extern void error (const char *, ...) ATTRIBUTE_PRINTF_1 ATTRIBUTE_COLD;
+extern void fatal (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF_1 ATTRIBUTE_COLD;
+extern void internal_error (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF_1 ATTRIBUTE_COLD;
+extern const char *trim_filename (const char *);
+
+extern int have_error;
+extern const char *progname;
+
+#endif /* ! GCC_ERRORS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/et-forest.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/et-forest.h
new file mode 100644
index 0000000..3eb9ab4
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/et-forest.h
@@ -0,0 +1,85 @@
+/* Et-forest data structure implementation.
+   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This package implements ET forest data structure. Each tree in
+   the structure maintains a tree structure and offers logarithmic time
+   for tree operations (insertion and removal of nodes and edges) and
+   poly-logarithmic time for nearest common ancestor.
+
+   ET tree stores its structure as a sequence of symbols obtained
+   by dfs(root)
+
+   dfs (node)
+   {
+     s = node;
+     for each child c of node do
+       s = concat (s, c, node);
+     return s;
+   }
+
+   For example for tree
+
+            1
+          / | \
+         2  3  4
+       / |
+      4  5
+
+   the sequence is 1 2 4 2 5 3 1 3 1 4 1.
+
+   The sequence is stored in a slightly modified splay tree.
+   In order to support various types of node values, a hashtable
+   is used to convert node values to the internal representation.  */
+
+#ifndef _ET_TREE_H
+#define _ET_TREE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* The node representing the node in an et tree.  */
+struct et_node
+{
+  void *data;			/* The data represented by the node.  */
+
+  int dfs_num_in, dfs_num_out;	/* Number of the node in the dfs ordering.  */
+
+  struct et_node *father;	/* Father of the node.  */
+  struct et_node *son;		/* The first of the sons of the node.  */
+  struct et_node *left;
+  struct et_node *right;	/* The brothers of the node.  */
+
+  struct et_occ *rightmost_occ;	/* The rightmost occurrence.  */
+  struct et_occ *parent_occ;	/* The occurrence of the parent node.  */
+};
+
+struct et_node *et_new_tree (void *data);
+void et_free_tree (struct et_node *);
+void et_free_tree_force (struct et_node *);
+void et_free_pools (void);
+void et_set_father (struct et_node *, struct et_node *);
+void et_split (struct et_node *);
+struct et_node *et_nca (struct et_node *, struct et_node *);
+bool et_below (struct et_node *, struct et_node *);
+struct et_node *et_root (struct et_node *);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _ET_TREE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/except.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/except.h
new file mode 100644
index 0000000..dbd4ddb
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/except.h
@@ -0,0 +1,334 @@
+/* Exception Handling interface routines.
+   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Contributed by Mike Stump <mrs@cygnus.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* No include guards here, but define an include file marker anyway, so
+   that the compiler can keep track of where this file is included.  This
+   is e.g. used to avoid including this file in front-end specific files.  */
+#ifndef GCC_EXCEPT_H
+#define GCC_EXCEPT_H
+
+
+struct function;
+struct eh_region_d;
+
+/* The type of an exception region.  */
+enum eh_region_type
+{
+  /* CLEANUP regions implement e.g. destructors run when exiting a block.
+     They can be generated from both GIMPLE_TRY_FINALLY and GIMPLE_TRY_CATCH
+     nodes.  It is expected by the runtime that cleanup regions will *not*
+     resume normal program flow, but will continue propagation of the
+     exception.  */
+  ERT_CLEANUP,
+
+  /* TRY regions implement catching an exception.  The list of types associated
+     with the attached catch handlers is examined in order by the runtime and
+     control is transferred to the appropriate handler.  Note that a NULL type
+     list is a catch-all handler, and that it will catch *all* exceptions
+     including those originating from a different language.  */
+  ERT_TRY,
+
+  /* ALLOWED_EXCEPTIONS regions implement exception filtering, e.g. the
+     throw(type-list) specification that can be added to C++ functions.
+     The runtime examines the thrown exception vs the type list, and if
+     the exception does not match, transfers control to the handler.  The
+     normal handler for C++ calls __cxa_call_unexpected.  */
+  ERT_ALLOWED_EXCEPTIONS,
+
+  /* MUST_NOT_THROW regions prevent all exceptions from propagating.  This
+     region type is used in C++ to surround destructors being run inside a
+     CLEANUP region.  This differs from an ALLOWED_EXCEPTIONS region with
+     an empty type list in that the runtime is prepared to terminate the
+     program directly.  We only generate code for MUST_NOT_THROW regions
+     along control paths that are already handling an exception within the
+     current function.  */
+  ERT_MUST_NOT_THROW
+};
+
+
+/* A landing pad for a given exception region.  Any transfer of control
+   from the EH runtime to the function happens at a landing pad.  */
+
+struct GTY(()) eh_landing_pad_d
+{
+  /* The linked list of all landing pads associated with the region.  */
+  struct eh_landing_pad_d *next_lp;
+
+  /* The region with which this landing pad is associated.  */
+  struct eh_region_d *region;
+
+  /* At the gimple level, the location to which control will be transferred
+     for this landing pad.  There can be both EH and normal edges into the
+     block containing the post-landing-pad label.  */
+  tree post_landing_pad;
+
+  /* At the rtl level, the location to which the runtime will transfer
+     control.  This differs from the post-landing-pad in that the target's
+     EXCEPTION_RECEIVER pattern will be expanded here, as well as other
+     bookkeeping specific to exceptions.  There must not be normal edges
+     into the block containing the landing-pad label.  */
+  rtx_code_label *landing_pad;
+
+  /* The index of this landing pad within fun->eh->lp_array.  */
+  int index;
+};
+
+/* A catch handler associated with an ERT_TRY region.  */
+
+struct GTY(()) eh_catch_d
+{
+  /* The double-linked list of all catch handlers for the region.  */
+  struct eh_catch_d *next_catch;
+  struct eh_catch_d *prev_catch;
+
+  /* A TREE_LIST of runtime type objects that this catch handler
+     will catch, or NULL if all exceptions are caught.  */
+  tree type_list;
+
+  /* A TREE_LIST of INTEGER_CSTs that correspond to the type_list entries,
+     having been mapped by assign_filter_values.  These integers are to be
+     compared against the __builtin_eh_filter value.  */
+  tree filter_list;
+
+  /* The code that should be executed if this catch handler matches the
+     thrown exception.  This label is only maintained until
+     pass_lower_eh_dispatch, at which point it is cleared.  */
+  tree label;
+};
+
+/* Describes one exception region.  */
+
+struct GTY(()) eh_region_d
+{
+  /* The immediately surrounding region.  */
+  struct eh_region_d *outer;
+
+  /* The list of immediately contained regions.  */
+  struct eh_region_d *inner;
+  struct eh_region_d *next_peer;
+
+  /* The index of this region within fun->eh->region_array.  */
+  int index;
+
+  /* Each region does exactly one thing.  */
+  enum eh_region_type type;
+
+  /* Holds the action to perform based on the preceding type.  */
+  union eh_region_u {
+    struct eh_region_u_try {
+      /* The double-linked list of all catch handlers for this region.  */
+      struct eh_catch_d *first_catch;
+      struct eh_catch_d *last_catch;
+    } GTY ((tag ("ERT_TRY"))) eh_try;
+
+    struct eh_region_u_allowed {
+      /* A TREE_LIST of runtime type objects allowed to pass.  */
+      tree type_list;
+      /* The code that should be executed if the thrown exception does
+	 not match the type list.  This label is only maintained until
+	 pass_lower_eh_dispatch, at which point it is cleared.  */
+      tree label;
+      /* The integer that will be passed by the runtime to signal that
+	 we should execute the code at LABEL.  This integer is assigned
+	 by assign_filter_values and is to be compared against the
+	 __builtin_eh_filter value.  */
+      int filter;
+    } GTY ((tag ("ERT_ALLOWED_EXCEPTIONS"))) allowed;
+
+    struct eh_region_u_must_not_throw {
+      /* A function decl to be invoked if this region is actually reachable
+	 from within the function, rather than implementable from the runtime.
+	 The normal way for this to happen is for there to be a CLEANUP region
+	 contained within this MUST_NOT_THROW region.  Note that if the
+	 runtime handles the MUST_NOT_THROW region, we have no control over
+	 what termination function is called; it will be decided by the
+	 personality function in effect for this CIE.  */
+      tree failure_decl;
+      /* The location assigned to the call of FAILURE_DECL, if expanded.  */
+      location_t failure_loc;
+    } GTY ((tag ("ERT_MUST_NOT_THROW"))) must_not_throw;
+  } GTY ((desc ("%0.type"))) u;
+
+  /* The list of landing pads associated with this region.  */
+  struct eh_landing_pad_d *landing_pads;
+
+  /* EXC_PTR and FILTER values copied from the runtime for this region.
+     Each region gets its own psuedos so that if there are nested exceptions
+     we do not overwrite the values of the first exception.  */
+  rtx exc_ptr_reg, filter_reg;
+
+  /* True if this region should use __cxa_end_cleanup instead
+     of _Unwind_Resume.  */
+  bool use_cxa_end_cleanup;
+};
+
+typedef struct eh_landing_pad_d *eh_landing_pad;
+typedef struct eh_catch_d *eh_catch;
+typedef struct eh_region_d *eh_region;
+
+
+
+
+/* The exception status for each function.  */
+
+struct GTY(()) eh_status
+{
+  /* The tree of all regions for this function.  */
+  eh_region region_tree;
+
+  /* The same information as an indexable array.  */
+  vec<eh_region, va_gc> *region_array;
+
+  /* The landing pads as an indexable array.  */
+  vec<eh_landing_pad, va_gc> *lp_array;
+
+  /* At the gimple level, a mapping from gimple statement to landing pad
+     or must-not-throw region.  See record_stmt_eh_region.  */
+  hash_map<gimple *, int> *GTY(()) throw_stmt_table;
+
+  /* All of the runtime type data used by the function.  These objects
+     are emitted to the lang-specific-data-area for the function.  */
+  vec<tree, va_gc> *ttype_data;
+
+  /* The table of all action chains.  These encode the eh_region tree in
+     a compact form for use by the runtime, and is also emitted to the
+     lang-specific-data-area.  Note that the ARM EABI uses a different
+     format for the encoding than all other ports.  */
+  union eh_status_u {
+    vec<tree, va_gc> *GTY((tag ("1"))) arm_eabi;
+    vec<uchar, va_gc> *GTY((tag ("0"))) other;
+  } GTY ((desc ("targetm.arm_eabi_unwinder"))) ehspec_data;
+};
+
+
+/* Invokes CALLBACK for every exception handler label.  Only used by old
+   loop hackery; should not be used by new code.  */
+extern void for_each_eh_label (void (*) (rtx));
+
+extern void init_eh_for_function (void);
+
+extern void remove_eh_landing_pad (eh_landing_pad);
+extern void remove_eh_handler (eh_region);
+extern void remove_unreachable_eh_regions (sbitmap);
+
+extern bool current_function_has_exception_handlers (void);
+extern void output_function_exception_table (int);
+
+extern rtx expand_builtin_eh_pointer (tree);
+extern rtx expand_builtin_eh_filter (tree);
+extern rtx expand_builtin_eh_copy_values (tree);
+extern void expand_builtin_unwind_init (void);
+extern rtx expand_builtin_eh_return_data_regno (tree);
+extern rtx expand_builtin_extract_return_addr (tree);
+extern void expand_builtin_init_dwarf_reg_sizes (tree);
+extern rtx expand_builtin_frob_return_addr (tree);
+extern rtx expand_builtin_dwarf_sp_column (void);
+extern void expand_builtin_eh_return (tree, tree);
+extern void expand_eh_return (void);
+extern rtx expand_builtin_extend_pointer (tree);
+
+typedef tree (*duplicate_eh_regions_map) (tree, void *);
+extern hash_map<void *, void *> *duplicate_eh_regions
+  (struct function *, eh_region, int, duplicate_eh_regions_map, void *);
+
+extern void sjlj_emit_function_exit_after (rtx_insn *);
+extern void update_sjlj_context (void);
+
+extern eh_region gen_eh_region_cleanup (eh_region);
+extern eh_region gen_eh_region_try (eh_region);
+extern eh_region gen_eh_region_allowed (eh_region, tree);
+extern eh_region gen_eh_region_must_not_throw (eh_region);
+
+extern eh_catch gen_eh_region_catch (eh_region, tree);
+extern eh_landing_pad gen_eh_landing_pad (eh_region);
+
+extern eh_region get_eh_region_from_number_fn (struct function *, int);
+extern eh_region get_eh_region_from_number (int);
+extern eh_landing_pad get_eh_landing_pad_from_number_fn (struct function*,int);
+extern eh_landing_pad get_eh_landing_pad_from_number (int);
+extern eh_region get_eh_region_from_lp_number_fn (struct function *, int);
+extern eh_region get_eh_region_from_lp_number (int);
+
+extern eh_region eh_region_outermost (struct function *, eh_region, eh_region);
+
+extern void make_reg_eh_region_note (rtx_insn *insn, int ecf_flags, int lp_nr);
+extern void make_reg_eh_region_note_nothrow_nononlocal (rtx_insn *);
+
+extern void verify_eh_tree (struct function *);
+extern void dump_eh_tree (FILE *, struct function *);
+void debug_eh_tree (struct function *);
+extern void add_type_for_runtime (tree);
+extern tree lookup_type_for_runtime (tree);
+extern void assign_filter_values (void);
+
+extern eh_region get_eh_region_from_rtx (const_rtx);
+extern eh_landing_pad get_eh_landing_pad_from_rtx (const_rtx);
+
+extern void finish_eh_generation (void);
+
+struct GTY(()) throw_stmt_node {
+  gimple *stmt;
+  int lp_nr;
+};
+
+extern hash_map<gimple *, int> *get_eh_throw_stmt_table (struct function *);
+extern void set_eh_throw_stmt_table (function *, hash_map<gimple *, int> *);
+
+enum eh_personality_kind {
+  eh_personality_none,
+  eh_personality_any,
+  eh_personality_lang
+};
+
+extern enum eh_personality_kind
+function_needs_eh_personality (struct function *);
+
+/* Pre-order iteration within the eh_region tree.  */
+
+static inline eh_region
+ehr_next (eh_region r, eh_region start)
+{
+  if (r->inner)
+    r = r->inner;
+  else if (r->next_peer && r != start)
+    r = r->next_peer;
+  else
+    {
+      do
+	{
+	  r = r->outer;
+	  if (r == start)
+	    return NULL;
+	}
+      while (r->next_peer == NULL);
+      r = r->next_peer;
+    }
+  return r;
+}
+
+#define FOR_ALL_EH_REGION_AT(R, START) \
+  for ((R) = (START); (R) != NULL; (R) = ehr_next (R, START))
+
+#define FOR_ALL_EH_REGION_FN(R, FN) \
+  for ((R) = (FN)->eh->region_tree; (R) != NULL; (R) = ehr_next (R, NULL))
+
+#define FOR_ALL_EH_REGION(R) FOR_ALL_EH_REGION_FN (R, cfun)
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/explow.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/explow.h
new file mode 100644
index 0000000..5110ad8
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/explow.h
@@ -0,0 +1,139 @@
+/* Export function prototypes from explow.c.
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_EXPLOW_H
+#define GCC_EXPLOW_H
+
+/* Return a memory reference like MEMREF, but which is known to have a
+   valid address.  */
+extern rtx validize_mem (rtx);
+
+extern rtx use_anchored_address (rtx);
+
+/* Copy given rtx to a new temp reg and return that.  */
+extern rtx copy_to_reg (rtx);
+
+/* Like copy_to_reg but always make the reg Pmode.  */
+extern rtx copy_addr_to_reg (rtx);
+
+/* Like copy_to_reg but always make the reg the specified mode MODE.  */
+extern rtx copy_to_mode_reg (machine_mode, rtx);
+
+/* Copy given rtx to given temp reg and return that.  */
+extern rtx copy_to_suggested_reg (rtx, rtx, machine_mode);
+
+/* Copy a value to a register if it isn't already a register.
+   Args are mode (in case value is a constant) and the value.  */
+extern rtx force_reg (machine_mode, rtx);
+
+/* Return given rtx, copied into a new temp reg if it was in memory.  */
+extern rtx force_not_mem (rtx);
+
+/* Return mode and signedness to use when an argument or result in the
+   given mode is promoted.  */
+extern machine_mode promote_function_mode (const_tree, machine_mode, int *,
+					        const_tree, int);
+
+/* Return mode and signedness to use when an object in the given mode
+   is promoted.  */
+extern machine_mode promote_mode (const_tree, machine_mode, int *);
+
+/* Return mode and signedness to use when object is promoted.  */
+machine_mode promote_decl_mode (const_tree, int *);
+
+/* Return mode and signedness to use when object is promoted.  */
+machine_mode promote_ssa_mode (const_tree, int *);
+
+/* Remove some bytes from the stack.  An rtx says how many.  */
+extern void adjust_stack (rtx);
+
+/* Add some bytes to the stack.  An rtx says how many.  */
+extern void anti_adjust_stack (rtx);
+
+/* Add some bytes to the stack while probing it.  An rtx says how many. */
+extern void anti_adjust_stack_and_probe (rtx, bool);
+
+/* Support for building allocation/probing loops for stack-clash
+   protection of dyamically allocated stack space.  */
+extern void compute_stack_clash_protection_loop_data (rtx *, rtx *, rtx *,
+						      HOST_WIDE_INT *, rtx);
+extern void emit_stack_clash_protection_probe_loop_start (rtx *, rtx *,
+							  rtx, bool);
+extern void emit_stack_clash_protection_probe_loop_end (rtx, rtx,
+							rtx, bool);
+
+/* This enum is used for the following two functions.  */
+enum save_level {SAVE_BLOCK, SAVE_FUNCTION, SAVE_NONLOCAL};
+
+/* Save the stack pointer at the specified level.  */
+extern void emit_stack_save (enum save_level, rtx *);
+
+/* Restore the stack pointer from a save area of the specified level.  */
+extern void emit_stack_restore (enum save_level, rtx);
+
+/* Invoke emit_stack_save for the nonlocal_goto_save_area.  */
+extern void update_nonlocal_goto_save_area (void);
+
+/* Record a new stack level.  */
+extern void record_new_stack_level (void);
+
+/* Allocate some space on the stack dynamically and return its address.  */
+extern rtx allocate_dynamic_stack_space (rtx, unsigned, unsigned,
+					 HOST_WIDE_INT, bool);
+
+/* Calculate the necessary size of a constant dynamic stack allocation from the
+   size of the variable area.  */
+extern void get_dynamic_stack_size (rtx *, unsigned, unsigned, HOST_WIDE_INT *);
+
+/* Returns the address of the dynamic stack space without allocating it.  */
+extern rtx get_dynamic_stack_base (poly_int64, unsigned);
+
+/* Return an rtx doing runtime alignment to REQUIRED_ALIGN on TARGET.  */
+extern rtx align_dynamic_address (rtx, unsigned);
+
+/* Emit one stack probe at ADDRESS, an address within the stack.  */
+extern void emit_stack_probe (rtx);
+
+/* Probe a range of stack addresses from FIRST to FIRST+SIZE, inclusive.
+   FIRST is a constant and size is a Pmode RTX.  These are offsets from
+   the current stack pointer.  STACK_GROWS_DOWNWARD says whether to add
+   or subtract them from the stack pointer.  */
+extern void probe_stack_range (HOST_WIDE_INT, rtx);
+
+/* Return an rtx that refers to the value returned by a library call
+   in its original home.  This becomes invalid if any more code is emitted.  */
+extern rtx hard_libcall_value (machine_mode, rtx);
+
+/* Return an rtx that refers to the value returned by a function
+   in its original home.  This becomes invalid if any more code is emitted.  */
+extern rtx hard_function_value (const_tree, const_tree, const_tree, int);
+
+/* Convert arg to a valid memory address for specified machine mode that points
+   to a specific named address space, by emitting insns to perform arithmetic
+   if necessary.  */
+extern rtx memory_address_addr_space (machine_mode, rtx, addr_space_t);
+
+extern rtx eliminate_constant_term (rtx, rtx *);
+
+/* Like memory_address_addr_space, except assume the memory address points to
+   the generic named address space.  */
+#define memory_address(MODE,RTX) \
+	memory_address_addr_space ((MODE), (RTX), ADDR_SPACE_GENERIC)
+
+#endif /* GCC_EXPLOW_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/expmed.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/expmed.h
new file mode 100644
index 0000000..cb9b13e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/expmed.h
@@ -0,0 +1,733 @@
+/* Target-dependent costs for expmed.c.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef EXPMED_H
+#define EXPMED_H 1
+
+#include "insn-codes.h"
+
+enum alg_code {
+  alg_unknown,
+  alg_zero,
+  alg_m, alg_shift,
+  alg_add_t_m2,
+  alg_sub_t_m2,
+  alg_add_factor,
+  alg_sub_factor,
+  alg_add_t2_m,
+  alg_sub_t2_m,
+  alg_impossible
+};
+
+/* Indicates the type of fixup needed after a constant multiplication.
+   BASIC_VARIANT means no fixup is needed, NEGATE_VARIANT means that
+   the result should be negated, and ADD_VARIANT means that the
+   multiplicand should be added to the result.  */
+enum mult_variant {basic_variant, negate_variant, add_variant};
+
+bool choose_mult_variant (machine_mode, HOST_WIDE_INT,
+			  struct algorithm *, enum mult_variant *, int);
+
+/* This structure holds the "cost" of a multiply sequence.  The
+   "cost" field holds the total rtx_cost of every operator in the
+   synthetic multiplication sequence, hence cost(a op b) is defined
+   as rtx_cost(op) + cost(a) + cost(b), where cost(leaf) is zero.
+   The "latency" field holds the minimum possible latency of the
+   synthetic multiply, on a hypothetical infinitely parallel CPU.
+   This is the critical path, or the maximum height, of the expression
+   tree which is the sum of rtx_costs on the most expensive path from
+   any leaf to the root.  Hence latency(a op b) is defined as zero for
+   leaves and rtx_cost(op) + max(latency(a), latency(b)) otherwise.  */
+
+struct mult_cost {
+  short cost;     /* Total rtx_cost of the multiplication sequence.  */
+  short latency;  /* The latency of the multiplication sequence.  */
+};
+
+/* This macro is used to compare a pointer to a mult_cost against an
+   single integer "rtx_cost" value.  This is equivalent to the macro
+   CHEAPER_MULT_COST(X,Z) where Z = {Y,Y}.  */
+#define MULT_COST_LESS(X,Y) ((X)->cost < (Y)	\
+			     || ((X)->cost == (Y) && (X)->latency < (Y)))
+
+/* This macro is used to compare two pointers to mult_costs against
+   each other.  The macro returns true if X is cheaper than Y.
+   Currently, the cheaper of two mult_costs is the one with the
+   lower "cost".  If "cost"s are tied, the lower latency is cheaper.  */
+#define CHEAPER_MULT_COST(X,Y)  ((X)->cost < (Y)->cost		\
+				 || ((X)->cost == (Y)->cost	\
+				     && (X)->latency < (Y)->latency))
+
+/* This structure records a sequence of operations.
+   `ops' is the number of operations recorded.
+   `cost' is their total cost.
+   The operations are stored in `op' and the corresponding
+   logarithms of the integer coefficients in `log'.
+
+   These are the operations:
+   alg_zero		total := 0;
+   alg_m		total := multiplicand;
+   alg_shift		total := total * coeff
+   alg_add_t_m2		total := total + multiplicand * coeff;
+   alg_sub_t_m2		total := total - multiplicand * coeff;
+   alg_add_factor	total := total * coeff + total;
+   alg_sub_factor	total := total * coeff - total;
+   alg_add_t2_m		total := total * coeff + multiplicand;
+   alg_sub_t2_m		total := total * coeff - multiplicand;
+
+   The first operand must be either alg_zero or alg_m.  */
+
+struct algorithm
+{
+  struct mult_cost cost;
+  short ops;
+  /* The size of the OP and LOG fields are not directly related to the
+     word size, but the worst-case algorithms will be if we have few
+     consecutive ones or zeros, i.e., a multiplicand like 10101010101...
+     In that case we will generate shift-by-2, add, shift-by-2, add,...,
+     in total wordsize operations.  */
+  enum alg_code op[MAX_BITS_PER_WORD];
+  char log[MAX_BITS_PER_WORD];
+};
+
+/* The entry for our multiplication cache/hash table.  */
+struct alg_hash_entry {
+  /* The number we are multiplying by.  */
+  unsigned HOST_WIDE_INT t;
+
+  /* The mode in which we are multiplying something by T.  */
+  machine_mode mode;
+
+  /* The best multiplication algorithm for t.  */
+  enum alg_code alg;
+
+  /* The cost of multiplication if ALG_CODE is not alg_impossible.
+     Otherwise, the cost within which multiplication by T is
+     impossible.  */
+  struct mult_cost cost;
+
+  /* Optimized for speed? */
+  bool speed;
+};
+
+/* The number of cache/hash entries.  */
+#if HOST_BITS_PER_WIDE_INT == 64
+#define NUM_ALG_HASH_ENTRIES 1031
+#else
+#define NUM_ALG_HASH_ENTRIES 307
+#endif
+
+#define NUM_MODE_INT \
+  (MAX_MODE_INT - MIN_MODE_INT + 1)
+#define NUM_MODE_PARTIAL_INT \
+  (MIN_MODE_PARTIAL_INT == E_VOIDmode ? 0 \
+   : MAX_MODE_PARTIAL_INT - MIN_MODE_PARTIAL_INT + 1)
+#define NUM_MODE_VECTOR_INT \
+  (MIN_MODE_VECTOR_INT == E_VOIDmode ? 0 \
+   : MAX_MODE_VECTOR_INT - MIN_MODE_VECTOR_INT + 1)
+
+#define NUM_MODE_IP_INT (NUM_MODE_INT + NUM_MODE_PARTIAL_INT)
+#define NUM_MODE_IPV_INT (NUM_MODE_IP_INT + NUM_MODE_VECTOR_INT)
+
+struct expmed_op_cheap {
+  bool cheap[2][NUM_MODE_IPV_INT];
+};
+
+struct expmed_op_costs {
+  int cost[2][NUM_MODE_IPV_INT];
+};
+
+/* Target-dependent globals.  */
+struct target_expmed {
+  /* Each entry of ALG_HASH caches alg_code for some integer.  This is
+     actually a hash table.  If we have a collision, that the older
+     entry is kicked out.  */
+  struct alg_hash_entry x_alg_hash[NUM_ALG_HASH_ENTRIES];
+
+  /* True if x_alg_hash might already have been used.  */
+  bool x_alg_hash_used_p;
+
+  /* Nonzero means divides or modulus operations are relatively cheap for
+     powers of two, so don't use branches; emit the operation instead.
+     Usually, this will mean that the MD file will emit non-branch
+     sequences.  */
+  struct expmed_op_cheap x_sdiv_pow2_cheap;
+  struct expmed_op_cheap x_smod_pow2_cheap;
+
+  /* Cost of various pieces of RTL.  Note that some of these are indexed by
+     shift count and some by mode.  */
+  int x_zero_cost[2];
+  struct expmed_op_costs x_add_cost;
+  struct expmed_op_costs x_neg_cost;
+  struct expmed_op_costs x_shift_cost[MAX_BITS_PER_WORD];
+  struct expmed_op_costs x_shiftadd_cost[MAX_BITS_PER_WORD];
+  struct expmed_op_costs x_shiftsub0_cost[MAX_BITS_PER_WORD];
+  struct expmed_op_costs x_shiftsub1_cost[MAX_BITS_PER_WORD];
+  struct expmed_op_costs x_mul_cost;
+  struct expmed_op_costs x_sdiv_cost;
+  struct expmed_op_costs x_udiv_cost;
+  int x_mul_widen_cost[2][NUM_MODE_INT];
+  int x_mul_highpart_cost[2][NUM_MODE_INT];
+
+  /* Conversion costs are only defined between two scalar integer modes
+     of different sizes.  The first machine mode is the destination mode,
+     and the second is the source mode.  */
+  int x_convert_cost[2][NUM_MODE_IP_INT][NUM_MODE_IP_INT];
+};
+
+extern struct target_expmed default_target_expmed;
+#if SWITCHABLE_TARGET
+extern struct target_expmed *this_target_expmed;
+#else
+#define this_target_expmed (&default_target_expmed)
+#endif
+
+/* Return a pointer to the alg_hash_entry at IDX.  */
+
+static inline struct alg_hash_entry *
+alg_hash_entry_ptr (int idx)
+{
+  return &this_target_expmed->x_alg_hash[idx];
+}
+
+/* Return true if the x_alg_hash field might have been used.  */
+
+static inline bool
+alg_hash_used_p (void)
+{
+  return this_target_expmed->x_alg_hash_used_p;
+}
+
+/* Set whether the x_alg_hash field might have been used.  */
+
+static inline void
+set_alg_hash_used_p (bool usedp)
+{
+  this_target_expmed->x_alg_hash_used_p = usedp;
+}
+
+/* Compute an index into the cost arrays by mode class.  */
+
+static inline int
+expmed_mode_index (machine_mode mode)
+{
+  switch (GET_MODE_CLASS (mode))
+    {
+    case MODE_INT:
+      return mode - MIN_MODE_INT;
+    case MODE_PARTIAL_INT:
+      /* If there are no partial integer modes, help the compiler
+	 to figure out this will never happen.  See PR59934.  */
+      if (MIN_MODE_PARTIAL_INT != VOIDmode)
+	return mode - MIN_MODE_PARTIAL_INT + NUM_MODE_INT;
+      break;
+    case MODE_VECTOR_INT:
+      /* If there are no vector integer modes, help the compiler
+	 to figure out this will never happen.  See PR59934.  */
+      if (MIN_MODE_VECTOR_INT != VOIDmode)
+	return mode - MIN_MODE_VECTOR_INT + NUM_MODE_IP_INT;
+      break;
+    default:
+      break;
+    }
+  gcc_unreachable ();
+}
+
+/* Return a pointer to a boolean contained in EOC indicating whether
+   a particular operation performed in MODE is cheap when optimizing
+   for SPEED.  */
+
+static inline bool *
+expmed_op_cheap_ptr (struct expmed_op_cheap *eoc, bool speed,
+		     machine_mode mode)
+{
+  int idx = expmed_mode_index (mode);
+  return &eoc->cheap[speed][idx];
+}
+
+/* Return a pointer to a cost contained in COSTS when a particular
+   operation is performed in MODE when optimizing for SPEED.  */
+
+static inline int *
+expmed_op_cost_ptr (struct expmed_op_costs *costs, bool speed,
+		    machine_mode mode)
+{
+  int idx = expmed_mode_index (mode);
+  return &costs->cost[speed][idx];
+}
+
+/* Subroutine of {set_,}sdiv_pow2_cheap.  Not to be used otherwise.  */
+
+static inline bool *
+sdiv_pow2_cheap_ptr (bool speed, machine_mode mode)
+{
+  return expmed_op_cheap_ptr (&this_target_expmed->x_sdiv_pow2_cheap,
+			      speed, mode);
+}
+
+/* Set whether a signed division by a power of 2 is cheap in MODE
+   when optimizing for SPEED.  */
+
+static inline void
+set_sdiv_pow2_cheap (bool speed, machine_mode mode, bool cheap_p)
+{
+  *sdiv_pow2_cheap_ptr (speed, mode) = cheap_p;
+}
+
+/* Return whether a signed division by a power of 2 is cheap in MODE
+   when optimizing for SPEED.  */
+
+static inline bool
+sdiv_pow2_cheap (bool speed, machine_mode mode)
+{
+  return *sdiv_pow2_cheap_ptr (speed, mode);
+}
+
+/* Subroutine of {set_,}smod_pow2_cheap.  Not to be used otherwise.  */
+
+static inline bool *
+smod_pow2_cheap_ptr (bool speed, machine_mode mode)
+{
+  return expmed_op_cheap_ptr (&this_target_expmed->x_smod_pow2_cheap,
+			      speed, mode);
+}
+
+/* Set whether a signed modulo by a power of 2 is CHEAP in MODE when
+   optimizing for SPEED.  */
+
+static inline void
+set_smod_pow2_cheap (bool speed, machine_mode mode, bool cheap)
+{
+  *smod_pow2_cheap_ptr (speed, mode) = cheap;
+}
+
+/* Return whether a signed modulo by a power of 2 is cheap in MODE
+   when optimizing for SPEED.  */
+
+static inline bool
+smod_pow2_cheap (bool speed, machine_mode mode)
+{
+  return *smod_pow2_cheap_ptr (speed, mode);
+}
+
+/* Subroutine of {set_,}zero_cost.  Not to be used otherwise.  */
+
+static inline int *
+zero_cost_ptr (bool speed)
+{
+  return &this_target_expmed->x_zero_cost[speed];
+}
+
+/* Set the COST of loading zero when optimizing for SPEED.  */
+
+static inline void
+set_zero_cost (bool speed, int cost)
+{
+  *zero_cost_ptr (speed) = cost;
+}
+
+/* Return the COST of loading zero when optimizing for SPEED.  */
+
+static inline int
+zero_cost (bool speed)
+{
+  return *zero_cost_ptr (speed);
+}
+
+/* Subroutine of {set_,}add_cost.  Not to be used otherwise.  */
+
+static inline int *
+add_cost_ptr (bool speed, machine_mode mode)
+{
+  return expmed_op_cost_ptr (&this_target_expmed->x_add_cost, speed, mode);
+}
+
+/* Set the COST of computing an add in MODE when optimizing for SPEED.  */
+
+static inline void
+set_add_cost (bool speed, machine_mode mode, int cost)
+{
+  *add_cost_ptr (speed, mode) = cost;
+}
+
+/* Return the cost of computing an add in MODE when optimizing for SPEED.  */
+
+static inline int
+add_cost (bool speed, machine_mode mode)
+{
+  return *add_cost_ptr (speed, mode);
+}
+
+/* Subroutine of {set_,}neg_cost.  Not to be used otherwise.  */
+
+static inline int *
+neg_cost_ptr (bool speed, machine_mode mode)
+{
+  return expmed_op_cost_ptr (&this_target_expmed->x_neg_cost, speed, mode);
+}
+
+/* Set the COST of computing a negation in MODE when optimizing for SPEED.  */
+
+static inline void
+set_neg_cost (bool speed, machine_mode mode, int cost)
+{
+  *neg_cost_ptr (speed, mode) = cost;
+}
+
+/* Return the cost of computing a negation in MODE when optimizing for
+   SPEED.  */
+
+static inline int
+neg_cost (bool speed, machine_mode mode)
+{
+  return *neg_cost_ptr (speed, mode);
+}
+
+/* Subroutine of {set_,}shift_cost.  Not to be used otherwise.  */
+
+static inline int *
+shift_cost_ptr (bool speed, machine_mode mode, int bits)
+{
+  return expmed_op_cost_ptr (&this_target_expmed->x_shift_cost[bits],
+			     speed, mode);
+}
+
+/* Set the COST of doing a shift in MODE by BITS when optimizing for SPEED.  */
+
+static inline void
+set_shift_cost (bool speed, machine_mode mode, int bits, int cost)
+{
+  *shift_cost_ptr (speed, mode, bits) = cost;
+}
+
+/* Return the cost of doing a shift in MODE by BITS when optimizing for
+   SPEED.  */
+
+static inline int
+shift_cost (bool speed, machine_mode mode, int bits)
+{
+  return *shift_cost_ptr (speed, mode, bits);
+}
+
+/* Subroutine of {set_,}shiftadd_cost.  Not to be used otherwise.  */
+
+static inline int *
+shiftadd_cost_ptr (bool speed, machine_mode mode, int bits)
+{
+  return expmed_op_cost_ptr (&this_target_expmed->x_shiftadd_cost[bits],
+			     speed, mode);
+}
+
+/* Set the COST of doing a shift in MODE by BITS followed by an add when
+   optimizing for SPEED.  */
+
+static inline void
+set_shiftadd_cost (bool speed, machine_mode mode, int bits, int cost)
+{
+  *shiftadd_cost_ptr (speed, mode, bits) = cost;
+}
+
+/* Return the cost of doing a shift in MODE by BITS followed by an add
+   when optimizing for SPEED.  */
+
+static inline int
+shiftadd_cost (bool speed, machine_mode mode, int bits)
+{
+  return *shiftadd_cost_ptr (speed, mode, bits);
+}
+
+/* Subroutine of {set_,}shiftsub0_cost.  Not to be used otherwise.  */
+
+static inline int *
+shiftsub0_cost_ptr (bool speed, machine_mode mode, int bits)
+{
+  return expmed_op_cost_ptr (&this_target_expmed->x_shiftsub0_cost[bits],
+			     speed, mode);
+}
+
+/* Set the COST of doing a shift in MODE by BITS and then subtracting a
+   value when optimizing for SPEED.  */
+
+static inline void
+set_shiftsub0_cost (bool speed, machine_mode mode, int bits, int cost)
+{
+  *shiftsub0_cost_ptr (speed, mode, bits) = cost;
+}
+
+/* Return the cost of doing a shift in MODE by BITS and then subtracting
+   a value when optimizing for SPEED.  */
+
+static inline int
+shiftsub0_cost (bool speed, machine_mode mode, int bits)
+{
+  return *shiftsub0_cost_ptr (speed, mode, bits);
+}
+
+/* Subroutine of {set_,}shiftsub1_cost.  Not to be used otherwise.  */
+
+static inline int *
+shiftsub1_cost_ptr (bool speed, machine_mode mode, int bits)
+{
+  return expmed_op_cost_ptr (&this_target_expmed->x_shiftsub1_cost[bits],
+			     speed, mode);
+}
+
+/* Set the COST of subtracting a shift in MODE by BITS from a value when
+   optimizing for SPEED.  */
+
+static inline void
+set_shiftsub1_cost (bool speed, machine_mode mode, int bits, int cost)
+{
+  *shiftsub1_cost_ptr (speed, mode, bits) = cost;
+}
+
+/* Return the cost of subtracting a shift in MODE by BITS from a value
+   when optimizing for SPEED.  */
+
+static inline int
+shiftsub1_cost (bool speed, machine_mode mode, int bits)
+{
+  return *shiftsub1_cost_ptr (speed, mode, bits);
+}
+
+/* Subroutine of {set_,}mul_cost.  Not to be used otherwise.  */
+
+static inline int *
+mul_cost_ptr (bool speed, machine_mode mode)
+{
+  return expmed_op_cost_ptr (&this_target_expmed->x_mul_cost, speed, mode);
+}
+
+/* Set the COST of doing a multiplication in MODE when optimizing for
+   SPEED.  */
+
+static inline void
+set_mul_cost (bool speed, machine_mode mode, int cost)
+{
+  *mul_cost_ptr (speed, mode) = cost;
+}
+
+/* Return the cost of doing a multiplication in MODE when optimizing
+   for SPEED.  */
+
+static inline int
+mul_cost (bool speed, machine_mode mode)
+{
+  return *mul_cost_ptr (speed, mode);
+}
+
+/* Subroutine of {set_,}sdiv_cost.  Not to be used otherwise.  */
+
+static inline int *
+sdiv_cost_ptr (bool speed, machine_mode mode)
+{
+  return expmed_op_cost_ptr (&this_target_expmed->x_sdiv_cost, speed, mode);
+}
+
+/* Set the COST of doing a signed division in MODE when optimizing
+   for SPEED.  */
+
+static inline void
+set_sdiv_cost (bool speed, machine_mode mode, int cost)
+{
+  *sdiv_cost_ptr (speed, mode) = cost;
+}
+
+/* Return the cost of doing a signed division in MODE when optimizing
+   for SPEED.  */
+
+static inline int
+sdiv_cost (bool speed, machine_mode mode)
+{
+  return *sdiv_cost_ptr (speed, mode);
+}
+
+/* Subroutine of {set_,}udiv_cost.  Not to be used otherwise.  */
+
+static inline int *
+udiv_cost_ptr (bool speed, machine_mode mode)
+{
+  return expmed_op_cost_ptr (&this_target_expmed->x_udiv_cost, speed, mode);
+}
+
+/* Set the COST of doing an unsigned division in MODE when optimizing
+   for SPEED.  */
+
+static inline void
+set_udiv_cost (bool speed, machine_mode mode, int cost)
+{
+  *udiv_cost_ptr (speed, mode) = cost;
+}
+
+/* Return the cost of doing an unsigned division in MODE when
+   optimizing for SPEED.  */
+
+static inline int
+udiv_cost (bool speed, machine_mode mode)
+{
+  return *udiv_cost_ptr (speed, mode);
+}
+
+/* Subroutine of {set_,}mul_widen_cost.  Not to be used otherwise.  */
+
+static inline int *
+mul_widen_cost_ptr (bool speed, machine_mode mode)
+{
+  gcc_assert (GET_MODE_CLASS (mode) == MODE_INT);
+
+  return &this_target_expmed->x_mul_widen_cost[speed][mode - MIN_MODE_INT];
+}
+
+/* Set the COST for computing a widening multiplication in MODE when
+   optimizing for SPEED.  */
+
+static inline void
+set_mul_widen_cost (bool speed, machine_mode mode, int cost)
+{
+  *mul_widen_cost_ptr (speed, mode) = cost;
+}
+
+/* Return the cost for computing a widening multiplication in MODE when
+   optimizing for SPEED.  */
+
+static inline int
+mul_widen_cost (bool speed, machine_mode mode)
+{
+  return *mul_widen_cost_ptr (speed, mode);
+}
+
+/* Subroutine of {set_,}mul_highpart_cost.  Not to be used otherwise.  */
+
+static inline int *
+mul_highpart_cost_ptr (bool speed, machine_mode mode)
+{
+  gcc_assert (GET_MODE_CLASS (mode) == MODE_INT);
+  int m = mode - MIN_MODE_INT;
+  gcc_assert (m < NUM_MODE_INT);
+
+  return &this_target_expmed->x_mul_highpart_cost[speed][m];
+}
+
+/* Set the COST for computing the high part of a multiplication in MODE
+   when optimizing for SPEED.  */
+
+static inline void
+set_mul_highpart_cost (bool speed, machine_mode mode, int cost)
+{
+  *mul_highpart_cost_ptr (speed, mode) = cost;
+}
+
+/* Return the cost for computing the high part of a multiplication in MODE
+   when optimizing for SPEED.  */
+
+static inline int
+mul_highpart_cost (bool speed, machine_mode mode)
+{
+  return *mul_highpart_cost_ptr (speed, mode);
+}
+
+/* Subroutine of {set_,}convert_cost.  Not to be used otherwise.  */
+
+static inline int *
+convert_cost_ptr (machine_mode to_mode, machine_mode from_mode,
+		  bool speed)
+{
+  int to_idx = expmed_mode_index (to_mode);
+  int from_idx = expmed_mode_index (from_mode);
+
+  gcc_assert (IN_RANGE (to_idx, 0, NUM_MODE_IP_INT - 1));
+  gcc_assert (IN_RANGE (from_idx, 0, NUM_MODE_IP_INT - 1));
+
+  return &this_target_expmed->x_convert_cost[speed][to_idx][from_idx];
+}
+
+/* Set the COST for converting from FROM_MODE to TO_MODE when optimizing
+   for SPEED.  */
+
+static inline void
+set_convert_cost (machine_mode to_mode, machine_mode from_mode,
+		  bool speed, int cost)
+{
+  *convert_cost_ptr (to_mode, from_mode, speed) = cost;
+}
+
+/* Return the cost for converting from FROM_MODE to TO_MODE when optimizing
+   for SPEED.  */
+
+static inline int
+convert_cost (machine_mode to_mode, machine_mode from_mode,
+	      bool speed)
+{
+  return *convert_cost_ptr (to_mode, from_mode, speed);
+}
+
+extern int mult_by_coeff_cost (HOST_WIDE_INT, machine_mode, bool);
+extern rtx emit_cstore (rtx target, enum insn_code icode, enum rtx_code code,
+			machine_mode mode, machine_mode compare_mode,
+			int unsignedp, rtx x, rtx y, int normalizep,
+			machine_mode target_mode);
+
+/* Arguments MODE, RTX: return an rtx for the negation of that value.
+   May emit insns.  */
+extern rtx negate_rtx (machine_mode, rtx);
+
+/* Arguments MODE, RTX: return an rtx for the flipping of that value.
+   May emit insns.  */
+extern rtx flip_storage_order (machine_mode, rtx);
+
+/* Expand a logical AND operation.  */
+extern rtx expand_and (machine_mode, rtx, rtx, rtx);
+
+/* Emit a store-flag operation.  */
+extern rtx emit_store_flag (rtx, enum rtx_code, rtx, rtx, machine_mode,
+			    int, int);
+
+/* Like emit_store_flag, but always succeeds.  */
+extern rtx emit_store_flag_force (rtx, enum rtx_code, rtx, rtx,
+				  machine_mode, int, int);
+
+extern void canonicalize_comparison (machine_mode, enum rtx_code *, rtx *);
+
+/* Choose a minimal N + 1 bit approximation to 1/D that can be used to
+   replace division by D, and put the least significant N bits of the result
+   in *MULTIPLIER_PTR and return the most significant bit.  */
+extern unsigned HOST_WIDE_INT choose_multiplier (unsigned HOST_WIDE_INT, int,
+						 int, unsigned HOST_WIDE_INT *,
+						 int *, int *);
+
+#ifdef TREE_CODE
+extern rtx expand_variable_shift (enum tree_code, machine_mode,
+				  rtx, tree, rtx, int);
+extern rtx expand_shift (enum tree_code, machine_mode, rtx, poly_int64, rtx,
+			 int);
+extern rtx expand_divmod (int, enum tree_code, machine_mode, rtx, rtx,
+			  rtx, int);
+#endif
+
+extern void store_bit_field (rtx, poly_uint64, poly_uint64,
+			     poly_uint64, poly_uint64,
+			     machine_mode, rtx, bool);
+extern rtx extract_bit_field (rtx, poly_uint64, poly_uint64, int, rtx,
+			      machine_mode, machine_mode, bool, rtx *);
+extern rtx extract_low_bits (machine_mode, machine_mode, rtx);
+extern rtx expand_mult (machine_mode, rtx, rtx, rtx, int, bool = false);
+extern rtx expand_mult_highpart_adjust (scalar_int_mode, rtx, rtx, rtx,
+					rtx, int);
+
+#endif  // EXPMED_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/expr.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/expr.h
new file mode 100644
index 0000000..17c3962
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/expr.h
@@ -0,0 +1,322 @@
+/* Definitions for code generation pass of GNU compiler.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_EXPR_H
+#define GCC_EXPR_H
+
+/* This is the 4th arg to `expand_expr'.
+   EXPAND_STACK_PARM means we are possibly expanding a call param onto
+   the stack.
+   EXPAND_SUM means it is ok to return a PLUS rtx or MULT rtx.
+   EXPAND_INITIALIZER is similar but also record any labels on forced_labels.
+   EXPAND_CONST_ADDRESS means it is ok to return a MEM whose address
+    is a constant that is not a legitimate address.
+   EXPAND_WRITE means we are only going to write to the resulting rtx.
+   EXPAND_MEMORY means we are interested in a memory result, even if
+    the memory is constant and we could have propagated a constant value,
+    or the memory is unaligned on a STRICT_ALIGNMENT target.  */
+enum expand_modifier {EXPAND_NORMAL = 0, EXPAND_STACK_PARM, EXPAND_SUM,
+		      EXPAND_CONST_ADDRESS, EXPAND_INITIALIZER, EXPAND_WRITE,
+		      EXPAND_MEMORY};
+
+/* Prevent the compiler from deferring stack pops.  See
+   inhibit_defer_pop for more information.  */
+#define NO_DEFER_POP (inhibit_defer_pop += 1)
+
+/* Allow the compiler to defer stack pops.  See inhibit_defer_pop for
+   more information.  */
+#define OK_DEFER_POP (inhibit_defer_pop -= 1)
+
+/* This structure is used to pass around information about exploded
+   unary, binary and trinary expressions between expand_expr_real_1 and
+   friends.  */
+typedef struct separate_ops
+{
+  enum tree_code code;
+  location_t location;
+  tree type;
+  tree op0, op1, op2;
+} *sepops;
+
+/* This is run during target initialization to set up which modes can be
+   used directly in memory and to initialize the block move optab.  */
+extern void init_expr_target (void);
+
+/* This is run at the start of compiling a function.  */
+extern void init_expr (void);
+
+/* Emit some rtl insns to move data between rtx's, converting machine modes.
+   Both modes must be floating or both fixed.  */
+extern void convert_move (rtx, rtx, int);
+
+/* Convert an rtx to specified machine mode and return the result.  */
+extern rtx convert_to_mode (machine_mode, rtx, int);
+
+/* Convert an rtx to MODE from OLDMODE and return the result.  */
+extern rtx convert_modes (machine_mode, machine_mode, rtx, int);
+
+/* Expand a call to memcpy or memmove or memcmp, and return the result.  */
+extern rtx emit_block_op_via_libcall (enum built_in_function, rtx, rtx, rtx,
+				      bool);
+
+static inline rtx
+emit_block_copy_via_libcall (rtx dst, rtx src, rtx size, bool tailcall = false)
+{
+  return emit_block_op_via_libcall (BUILT_IN_MEMCPY, dst, src, size, tailcall);
+}
+
+static inline rtx
+emit_block_move_via_libcall (rtx dst, rtx src, rtx size, bool tailcall = false)
+{
+  return emit_block_op_via_libcall (BUILT_IN_MEMMOVE, dst, src, size, tailcall);
+}
+
+static inline rtx
+emit_block_comp_via_libcall (rtx dst, rtx src, rtx size, bool tailcall = false)
+{
+  return emit_block_op_via_libcall (BUILT_IN_MEMCMP, dst, src, size, tailcall);
+}
+
+/* Emit code to move a block Y to a block X.  */
+enum block_op_methods
+{
+  BLOCK_OP_NORMAL,
+  BLOCK_OP_NO_LIBCALL,
+  BLOCK_OP_CALL_PARM,
+  /* Like BLOCK_OP_NORMAL, but the libcall can be tail call optimized.  */
+  BLOCK_OP_TAILCALL,
+  /* Like BLOCK_OP_NO_LIBCALL, but instead of emitting a libcall return
+     pc_rtx to indicate nothing has been emitted and let the caller handle
+     it.  */
+  BLOCK_OP_NO_LIBCALL_RET
+};
+
+typedef rtx (*by_pieces_constfn) (void *, HOST_WIDE_INT, scalar_int_mode);
+
+extern rtx emit_block_move (rtx, rtx, rtx, enum block_op_methods);
+extern rtx emit_block_move_hints (rtx, rtx, rtx, enum block_op_methods,
+			          unsigned int, HOST_WIDE_INT,
+				  unsigned HOST_WIDE_INT,
+				  unsigned HOST_WIDE_INT,
+				  unsigned HOST_WIDE_INT);
+extern rtx emit_block_cmp_hints (rtx, rtx, rtx, tree, rtx, bool,
+				 by_pieces_constfn, void *);
+extern bool emit_storent_insn (rtx to, rtx from);
+
+/* Copy all or part of a value X into registers starting at REGNO.
+   The number of registers to be filled is NREGS.  */
+extern void move_block_to_reg (int, rtx, int, machine_mode);
+
+/* Copy all or part of a BLKmode value X out of registers starting at REGNO.
+   The number of registers to be filled is NREGS.  */
+extern void move_block_from_reg (int, rtx, int);
+
+/* Generate a non-consecutive group of registers represented by a PARALLEL.  */
+extern rtx gen_group_rtx (rtx);
+
+/* Load a BLKmode value into non-consecutive registers represented by a
+   PARALLEL.  */
+extern void emit_group_load (rtx, rtx, tree, poly_int64);
+
+/* Similarly, but load into new temporaries.  */
+extern rtx emit_group_load_into_temps (rtx, rtx, tree, poly_int64);
+
+/* Move a non-consecutive group of registers represented by a PARALLEL into
+   a non-consecutive group of registers represented by a PARALLEL.  */
+extern void emit_group_move (rtx, rtx);
+
+/* Move a group of registers represented by a PARALLEL into pseudos.  */
+extern rtx emit_group_move_into_temps (rtx);
+
+/* Store a BLKmode value from non-consecutive registers represented by a
+   PARALLEL.  */
+extern void emit_group_store (rtx, rtx, tree, poly_int64);
+
+extern rtx maybe_emit_group_store (rtx, tree);
+
+/* Mark REG as holding a parameter for the next CALL_INSN.
+   Mode is TYPE_MODE of the non-promoted parameter, or VOIDmode.  */
+extern void use_reg_mode (rtx *, rtx, machine_mode);
+extern void clobber_reg_mode (rtx *, rtx, machine_mode);
+
+extern rtx copy_blkmode_to_reg (machine_mode, tree);
+
+/* Mark REG as holding a parameter for the next CALL_INSN.  */
+static inline void
+use_reg (rtx *fusage, rtx reg)
+{
+  use_reg_mode (fusage, reg, VOIDmode);
+}
+
+/* Mark REG as clobbered by the call with FUSAGE as CALL_INSN_FUNCTION_USAGE.  */
+static inline void
+clobber_reg (rtx *fusage, rtx reg)
+{
+  clobber_reg_mode (fusage, reg, VOIDmode);
+}
+
+/* Mark NREGS consecutive regs, starting at REGNO, as holding parameters
+   for the next CALL_INSN.  */
+extern void use_regs (rtx *, int, int);
+
+/* Mark a PARALLEL as holding a parameter for the next CALL_INSN.  */
+extern void use_group_regs (rtx *, rtx);
+
+#ifdef GCC_INSN_CODES_H
+extern rtx expand_cmpstrn_or_cmpmem (insn_code, rtx, rtx, rtx, tree, rtx,
+				     HOST_WIDE_INT);
+#endif
+
+/* Write zeros through the storage of OBJECT.
+   If OBJECT has BLKmode, SIZE is its length in bytes.  */
+extern rtx clear_storage (rtx, rtx, enum block_op_methods);
+extern rtx clear_storage_hints (rtx, rtx, enum block_op_methods,
+			        unsigned int, HOST_WIDE_INT,
+				unsigned HOST_WIDE_INT,
+				unsigned HOST_WIDE_INT,
+				unsigned HOST_WIDE_INT);
+/* The same, but always output an library call.  */
+extern rtx set_storage_via_libcall (rtx, rtx, rtx, bool = false);
+
+/* Expand a setmem pattern; return true if successful.  */
+extern bool set_storage_via_setmem (rtx, rtx, rtx, unsigned int,
+				    unsigned int, HOST_WIDE_INT,
+				    unsigned HOST_WIDE_INT,
+				    unsigned HOST_WIDE_INT,
+				    unsigned HOST_WIDE_INT);
+
+/* Return nonzero if it is desirable to store LEN bytes generated by
+   CONSTFUN with several move instructions by store_by_pieces
+   function.  CONSTFUNDATA is a pointer which will be passed as argument
+   in every CONSTFUN call.
+   ALIGN is maximum alignment we can assume.
+   MEMSETP is true if this is a real memset/bzero, not a copy
+   of a const string.  */
+extern int can_store_by_pieces (unsigned HOST_WIDE_INT,
+				by_pieces_constfn,
+				void *, unsigned int, bool);
+
+/* Generate several move instructions to store LEN bytes generated by
+   CONSTFUN to block TO.  (A MEM rtx with BLKmode).  CONSTFUNDATA is a
+   pointer which will be passed as argument in every CONSTFUN call.
+   ALIGN is maximum alignment we can assume.
+   MEMSETP is true if this is a real memset/bzero, not a copy.
+   Returns TO + LEN.  */
+extern rtx store_by_pieces (rtx, unsigned HOST_WIDE_INT, by_pieces_constfn,
+			    void *, unsigned int, bool, memop_ret);
+
+/* Emit insns to set X from Y.  */
+extern rtx_insn *emit_move_insn (rtx, rtx);
+extern rtx_insn *gen_move_insn (rtx, rtx);
+
+/* Emit insns to set X from Y, with no frills.  */
+extern rtx_insn *emit_move_insn_1 (rtx, rtx);
+
+extern rtx_insn *emit_move_complex_push (machine_mode, rtx, rtx);
+extern rtx_insn *emit_move_complex_parts (rtx, rtx);
+extern rtx read_complex_part (rtx, bool);
+extern void write_complex_part (rtx, rtx, bool);
+extern rtx read_complex_part (rtx, bool);
+extern rtx emit_move_resolve_push (machine_mode, rtx);
+
+/* Push a block of length SIZE (perhaps variable)
+   and return an rtx to address the beginning of the block.  */
+extern rtx push_block (rtx, poly_int64, int);
+
+/* Generate code to push something onto the stack, given its mode and type.  */
+extern bool emit_push_insn (rtx, machine_mode, tree, rtx, unsigned int,
+			    int, rtx, poly_int64, rtx, rtx, int, rtx, bool);
+
+/* Extract the accessible bit-range from a COMPONENT_REF.  */
+extern void get_bit_range (poly_uint64_pod *, poly_uint64_pod *, tree,
+			   poly_int64_pod *, tree *);
+
+/* Expand an assignment that stores the value of FROM into TO.  */
+extern void expand_assignment (tree, tree, bool);
+
+/* Generate code for computing expression EXP,
+   and storing the value into TARGET.
+   If SUGGEST_REG is nonzero, copy the value through a register
+   and return that register, if that is possible.  */
+extern rtx store_expr (tree, rtx, int, bool, bool);
+
+/* Given an rtx that may include add and multiply operations,
+   generate them as insns and return a pseudo-reg containing the value.
+   Useful after calling expand_expr with 1 as sum_ok.  */
+extern rtx force_operand (rtx, rtx);
+
+/* Work horses for expand_expr.  */
+extern rtx expand_expr_real (tree, rtx, machine_mode,
+			     enum expand_modifier, rtx *, bool);
+extern rtx expand_expr_real_1 (tree, rtx, machine_mode,
+			       enum expand_modifier, rtx *, bool);
+extern rtx expand_expr_real_2 (sepops, rtx, machine_mode,
+			       enum expand_modifier);
+
+/* Generate code for computing expression EXP.
+   An rtx for the computed value is returned.  The value is never null.
+   In the case of a void EXP, const0_rtx is returned.  */
+static inline rtx
+expand_expr (tree exp, rtx target, machine_mode mode,
+	     enum expand_modifier modifier)
+{
+  return expand_expr_real (exp, target, mode, modifier, NULL, false);
+}
+
+static inline rtx
+expand_normal (tree exp)
+{
+  return expand_expr_real (exp, NULL_RTX, VOIDmode, EXPAND_NORMAL, NULL, false);
+}
+
+
+/* Return the tree node and offset if a given argument corresponds to
+   a string constant.  */
+extern tree string_constant (tree, tree *, tree *, tree *);
+
+extern enum tree_code maybe_optimize_mod_cmp (enum tree_code, tree *, tree *);
+
+/* Two different ways of generating switch statements.  */
+extern int try_casesi (tree, tree, tree, tree, rtx, rtx, rtx, profile_probability);
+extern int try_tablejump (tree, tree, tree, tree, rtx, rtx, profile_probability);
+
+extern int safe_from_p (const_rtx, tree, int);
+
+/* Get the personality libfunc for a function decl.  */
+rtx get_personality_function (tree);
+
+/* Determine whether the LEN bytes can be moved by using several move
+   instructions.  Return nonzero if a call to move_by_pieces should
+   succeed.  */
+extern bool can_move_by_pieces (unsigned HOST_WIDE_INT, unsigned int);
+
+extern unsigned HOST_WIDE_INT highest_pow2_factor (const_tree);
+
+extern bool categorize_ctor_elements (const_tree, HOST_WIDE_INT *,
+				      HOST_WIDE_INT *, HOST_WIDE_INT *,
+				      bool *);
+
+extern void expand_operands (tree, tree, rtx, rtx*, rtx*,
+			     enum expand_modifier);
+
+/* rtl.h and tree.h were included.  */
+/* Return an rtx for the size in bytes of the value of an expr.  */
+extern rtx expr_size (tree);
+
+#endif /* GCC_EXPR_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/fibonacci_heap.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/fibonacci_heap.h
new file mode 100644
index 0000000..6e0a216
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/fibonacci_heap.h
@@ -0,0 +1,651 @@
+/* Fibonacci heap for GNU compiler.
+   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Contributed by Daniel Berlin (dan@cgsoftware.com).
+   Re-implemented in C++ by Martin Liska <mliska@suse.cz>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Fibonacci heaps are somewhat complex, but, there's an article in
+   DDJ that explains them pretty well:
+
+   http://www.ddj.com/articles/1997/9701/9701o/9701o.htm?topic=algoritms
+
+   Introduction to algorithms by Corman and Rivest also goes over them.
+
+   The original paper that introduced them is "Fibonacci heaps and their
+   uses in improved network optimization algorithms" by Tarjan and
+   Fredman (JACM 34(3), July 1987).
+
+   Amortized and real worst case time for operations:
+
+   ExtractMin: O(lg n) amortized. O(n) worst case.
+   DecreaseKey: O(1) amortized.  O(lg n) worst case.
+   Insert: O(1) amortized.
+   Union: O(1) amortized.  */
+
+#ifndef GCC_FIBONACCI_HEAP_H
+#define GCC_FIBONACCI_HEAP_H
+
+/* Forward definition.  */
+
+template<class K, class V>
+class fibonacci_heap;
+
+/* Fibonacci heap node class.  */
+
+template<class K, class V>
+class fibonacci_node
+{
+  typedef fibonacci_node<K,V> fibonacci_node_t;
+  friend class fibonacci_heap<K,V>;
+
+public:
+  /* Default constructor.  */
+  fibonacci_node (): m_parent (NULL), m_child (NULL), m_left (this),
+    m_right (this), m_degree (0), m_mark (0)
+  {
+  }
+
+  /* Constructor for a node with given KEY.  */
+  fibonacci_node (K key, V *data = NULL): m_parent (NULL), m_child (NULL),
+    m_left (this), m_right (this), m_key (key), m_data (data),
+    m_degree (0), m_mark (0)
+  {
+  }
+
+  /* Compare fibonacci node with OTHER node.  */
+  int compare (fibonacci_node_t *other)
+  {
+    if (m_key < other->m_key)
+      return -1;
+    if (m_key > other->m_key)
+      return 1;
+    return 0;
+  }
+
+  /* Compare the node with a given KEY.  */
+  int compare_data (K key)
+  {
+    return fibonacci_node_t (key).compare (this);
+  }
+
+  /* Remove fibonacci heap node.  */
+  fibonacci_node_t *remove ();
+
+  /* Link the node with PARENT.  */
+  void link (fibonacci_node_t *parent);
+
+  /* Return key associated with the node.  */
+  K get_key ()
+  {
+    return m_key;
+  }
+
+  /* Return data associated with the node.  */
+  V *get_data ()
+  {
+    return m_data;
+  }
+
+private:
+  /* Put node B after this node.  */
+  void insert_after (fibonacci_node_t *b);
+
+  /* Insert fibonacci node B after this node.  */
+  void insert_before (fibonacci_node_t *b)
+  {
+    m_left->insert_after (b);
+  }
+
+  /* Parent node.  */
+  fibonacci_node *m_parent;
+  /* Child node.  */
+  fibonacci_node *m_child;
+  /* Left sibling.  */
+  fibonacci_node *m_left;
+  /* Right node.  */
+  fibonacci_node *m_right;
+  /* Key associated with node.  */
+  K m_key;
+  /* Data associated with node.  */
+  V *m_data;
+
+#if defined (__GNUC__) && (!defined (SIZEOF_INT) || SIZEOF_INT < 4)
+  /* Degree of the node.  */
+  __extension__ unsigned long int m_degree : 31;
+  /* Mark of the node.  */
+  __extension__ unsigned long int m_mark : 1;
+#else
+  /* Degree of the node.  */
+  unsigned int m_degree : 31;
+  /* Mark of the node.  */
+  unsigned int m_mark : 1;
+#endif
+};
+
+/* Fibonacci heap class. */
+template<class K, class V>
+class fibonacci_heap
+{
+  typedef fibonacci_node<K,V> fibonacci_node_t;
+  friend class fibonacci_node<K,V>;
+
+public:
+  /* Default constructor.  */
+  fibonacci_heap (K global_min_key): m_nodes (0), m_min (NULL), m_root (NULL),
+    m_global_min_key (global_min_key)
+  {
+  }
+
+  /* Destructor.  */
+  ~fibonacci_heap ()
+  {
+    while (m_min != NULL)
+      delete (extract_minimum_node ());
+  }
+
+  /* Insert new node given by KEY and DATA associated with the key.  */
+  fibonacci_node_t *insert (K key, V *data);
+
+  /* Return true if no entry is present.  */
+  bool empty ()
+  {
+    return m_nodes == 0;
+  }
+
+  /* Return the number of nodes.  */
+  size_t nodes ()
+  {
+    return m_nodes;
+  }
+
+  /* Return minimal key presented in the heap.  */
+  K min_key ()
+  {
+    if (m_min == NULL)
+      gcc_unreachable ();
+
+    return m_min->m_key;
+  }
+
+  /* For given NODE, set new KEY value.  */
+  K replace_key (fibonacci_node_t *node, K key)
+  {
+    K okey = node->m_key;
+
+    replace_key_data (node, key, node->m_data);
+    return okey;
+  }
+
+  /* For given NODE, decrease value to new KEY.  */
+  K decrease_key (fibonacci_node_t *node, K key)
+  {
+    gcc_assert (key <= node->m_key);
+    return replace_key (node, key);
+  }
+
+  /* For given NODE, set new KEY and DATA value.  */
+  V *replace_key_data (fibonacci_node_t *node, K key, V *data);
+
+  /* Extract minimum node in the heap. If RELEASE is specified,
+     memory is released.  */
+  V *extract_min (bool release = true);
+
+  /* Return value associated with minimum node in the heap.  */
+  V *min ()
+  {
+    if (m_min == NULL)
+      return NULL;
+
+    return m_min->m_data;
+  }
+
+  /* Replace data associated with NODE and replace it with DATA.  */
+  V *replace_data (fibonacci_node_t *node, V *data)
+  {
+    return replace_key_data (node, node->m_key, data);
+  }
+
+  /* Delete NODE in the heap.  */
+  V *delete_node (fibonacci_node_t *node, bool release = true);
+
+  /* Union the heap with HEAPB.  */
+  fibonacci_heap *union_with (fibonacci_heap *heapb);
+
+private:
+  /* Insert new NODE given by KEY and DATA associated with the key.  */
+  fibonacci_node_t *insert (fibonacci_node_t *node, K key, V *data);
+
+  /* Insert new NODE that has already filled key and value.  */
+  fibonacci_node_t *insert_node (fibonacci_node_t *node);
+
+  /* Insert it into the root list.  */
+  void insert_root (fibonacci_node_t *node);
+
+  /* Remove NODE from PARENT's child list.  */
+  void cut (fibonacci_node_t *node, fibonacci_node_t *parent);
+
+  /* Process cut of node Y and do it recursivelly.  */
+  void cascading_cut (fibonacci_node_t *y);
+
+  /* Extract minimum node from the heap.  */
+  fibonacci_node_t * extract_minimum_node ();
+
+  /* Remove root NODE from the heap.  */
+  void remove_root (fibonacci_node_t *node);
+
+  /* Consolidate heap.  */
+  void consolidate ();
+
+  /* Number of nodes.  */
+  size_t m_nodes;
+  /* Minimum node of the heap.  */
+  fibonacci_node_t *m_min;
+  /* Root node of the heap.  */
+  fibonacci_node_t *m_root;
+  /* Global minimum given in the heap construction.  */
+  K m_global_min_key;
+};
+
+/* Remove fibonacci heap node.  */
+
+template<class K, class V>
+fibonacci_node<K,V> *
+fibonacci_node<K,V>::remove ()
+{
+  fibonacci_node<K,V> *ret;
+
+  if (this == m_left)
+    ret = NULL;
+  else
+    ret = m_left;
+
+  if (m_parent != NULL && m_parent->m_child == this)
+    m_parent->m_child = ret;
+
+  m_right->m_left = m_left;
+  m_left->m_right = m_right;
+
+  m_parent = NULL;
+  m_left = this;
+  m_right = this;
+
+  return ret;
+}
+
+/* Link the node with PARENT.  */
+
+template<class K, class V>
+void
+fibonacci_node<K,V>::link (fibonacci_node<K,V> *parent)
+{
+  if (parent->m_child == NULL)
+    parent->m_child = this;
+  else
+    parent->m_child->insert_before (this);
+  m_parent = parent;
+  parent->m_degree++;
+  m_mark = 0;
+}
+
+/* Put node B after this node.  */
+
+template<class K, class V>
+void
+fibonacci_node<K,V>::insert_after (fibonacci_node<K,V> *b)
+{
+  fibonacci_node<K,V> *a = this;
+
+  if (a == a->m_right)
+    {
+      a->m_right = b;
+      a->m_left = b;
+      b->m_right = a;
+      b->m_left = a;
+    }
+  else
+    {
+      b->m_right = a->m_right;
+      a->m_right->m_left = b;
+      a->m_right = b;
+      b->m_left = a;
+    }
+}
+
+/* Insert new node given by KEY and DATA associated with the key.  */
+
+template<class K, class V>
+fibonacci_node<K,V>*
+fibonacci_heap<K,V>::insert (K key, V *data)
+{
+  /* Create the new node.  */
+  fibonacci_node<K,V> *node = new fibonacci_node_t (key, data);
+
+  return insert_node (node);
+}
+
+/* Insert new NODE given by DATA associated with the key.  */
+
+template<class K, class V>
+fibonacci_node<K,V>*
+fibonacci_heap<K,V>::insert (fibonacci_node_t *node, K key, V *data)
+{
+  /* Set the node's data.  */
+  node->m_data = data;
+  node->m_key = key;
+
+  return insert_node (node);
+}
+
+/* Insert new NODE that has already filled key and value.  */
+
+template<class K, class V>
+fibonacci_node<K,V>*
+fibonacci_heap<K,V>::insert_node (fibonacci_node_t *node)
+{
+  /* Insert it into the root list.  */
+  insert_root (node);
+
+  /* If their was no minimum, or this key is less than the min,
+     it's the new min.  */
+  if (m_min == NULL || node->m_key < m_min->m_key)
+    m_min = node;
+
+  m_nodes++;
+
+  return node;
+}
+
+/* For given NODE, set new KEY and DATA value.  */
+
+template<class K, class V>
+V*
+fibonacci_heap<K,V>::replace_key_data (fibonacci_node<K,V> *node, K key,
+				       V *data)
+{
+  K okey;
+  fibonacci_node<K,V> *y;
+  V *odata = node->m_data;
+
+  /* If we wanted to, we do a real increase by redeleting and
+     inserting.  */
+  if (node->compare_data (key) > 0)
+    {
+      delete_node (node, false);
+
+      node = new (node) fibonacci_node_t ();
+      insert (node, key, data);
+
+      return odata;
+    }
+
+  okey = node->m_key;
+  node->m_data = data;
+  node->m_key = key;
+  y = node->m_parent;
+
+  /* Short-circuit if the key is the same, as we then don't have to
+     do anything.  Except if we're trying to force the new node to
+     be the new minimum for delete.  */
+  if (okey == key && okey != m_global_min_key)
+    return odata;
+
+  /* These two compares are specifically <= 0 to make sure that in the case
+     of equality, a node we replaced the data on, becomes the new min.  This
+     is needed so that delete's call to extractmin gets the right node.  */
+  if (y != NULL && node->compare (y) <= 0)
+    {
+      cut (node, y);
+      cascading_cut (y);
+    }
+
+  if (node->compare (m_min) <= 0)
+    m_min = node;
+
+  return odata;
+}
+
+/* Extract minimum node in the heap.  Delete fibonacci node if RELEASE
+   is true.  */
+
+template<class K, class V>
+V*
+fibonacci_heap<K,V>::extract_min (bool release)
+{
+  fibonacci_node<K,V> *z;
+  V *ret = NULL;
+
+  /* If we don't have a min set, it means we have no nodes.  */
+  if (m_min != NULL)
+    {
+      /* Otherwise, extract the min node, free the node, and return the
+       node's data.  */
+      z = extract_minimum_node ();
+      ret = z->m_data;
+
+      if (release)
+        delete (z);
+    }
+
+  return ret;
+}
+
+/* Delete NODE in the heap, if RELEASE is specified memory is released.  */
+
+template<class K, class V>
+V*
+fibonacci_heap<K,V>::delete_node (fibonacci_node<K,V> *node, bool release)
+{
+  V *ret = node->m_data;
+
+  /* To perform delete, we just make it the min key, and extract.  */
+  replace_key (node, m_global_min_key);
+  if (node != m_min)
+    {
+      fprintf (stderr, "Can't force minimum on fibheap.\n");
+      abort ();
+    }
+  extract_min (release);
+
+  return ret;
+}
+
+/* Union the heap with HEAPB.  One of the heaps is going to be deleted.  */
+
+template<class K, class V>
+fibonacci_heap<K,V>*
+fibonacci_heap<K,V>::union_with (fibonacci_heap<K,V> *heapb)
+{
+  fibonacci_heap<K,V> *heapa = this;
+
+  fibonacci_node<K,V> *a_root, *b_root;
+
+  /* If one of the heaps is empty, the union is just the other heap.  */
+  if ((a_root = heapa->m_root) == NULL)
+    {
+      delete (heapa);
+      return heapb;
+    }
+  if ((b_root = heapb->m_root) == NULL)
+    {
+      delete (heapb);
+      return heapa;
+    }
+
+  /* Merge them to the next nodes on the opposite chain.  */
+  a_root->m_left->m_right = b_root;
+  b_root->m_left->m_right = a_root;
+  std::swap (a_root->m_left, b_root->m_left);
+  heapa->m_nodes += heapb->m_nodes;
+
+  /* And set the new minimum, if it's changed.  */
+  if (heapb->m_min->compare (heapa->m_min) < 0)
+    heapa->m_min = heapb->m_min;
+
+  /* Set m_min to NULL to not to delete live fibonacci nodes.  */
+  heapb->m_min = NULL;
+  delete (heapb);
+
+  return heapa;
+}
+
+/* Insert it into the root list.  */
+
+template<class K, class V>
+void
+fibonacci_heap<K,V>::insert_root (fibonacci_node_t *node)
+{
+  /* If the heap is currently empty, the new node becomes the singleton
+     circular root list.  */
+  if (m_root == NULL)
+    {
+      m_root = node;
+      node->m_left = node;
+      node->m_right = node;
+      return;
+    }
+
+  /* Otherwise, insert it in the circular root list between the root
+     and it's right node.  */
+  m_root->insert_after (node);
+}
+
+/* Remove NODE from PARENT's child list.  */
+
+template<class K, class V>
+void
+fibonacci_heap<K,V>::cut (fibonacci_node<K,V> *node,
+			  fibonacci_node<K,V> *parent)
+{
+  node->remove ();
+  parent->m_degree--;
+  insert_root (node);
+  node->m_parent = NULL;
+  node->m_mark = 0;
+}
+
+/* Process cut of node Y and do it recursivelly.  */
+
+template<class K, class V>
+void
+fibonacci_heap<K,V>::cascading_cut (fibonacci_node<K,V> *y)
+{
+  fibonacci_node<K,V> *z;
+
+  while ((z = y->m_parent) != NULL)
+    {
+      if (y->m_mark == 0)
+	{
+	  y->m_mark = 1;
+	  return;
+	}
+      else
+	{
+	  cut (y, z);
+	  y = z;
+	}
+    }
+}
+
+/* Extract minimum node from the heap.  */
+
+template<class K, class V>
+fibonacci_node<K,V>*
+fibonacci_heap<K,V>::extract_minimum_node ()
+{
+  fibonacci_node<K,V> *ret = m_min;
+  fibonacci_node<K,V> *x, *y, *orig;
+
+  /* Attach the child list of the minimum node to the root list of the heap.
+     If there is no child list, we don't do squat.  */
+  for (x = ret->m_child, orig = NULL; x != orig && x != NULL; x = y)
+    {
+      if (orig == NULL)
+	orig = x;
+      y = x->m_right;
+      x->m_parent = NULL;
+      insert_root (x);
+    }
+
+  /* Remove the old root.  */
+  remove_root (ret);
+  m_nodes--;
+
+  /* If we are left with no nodes, then the min is NULL.  */
+  if (m_nodes == 0)
+    m_min = NULL;
+  else
+    {
+      /* Otherwise, consolidate to find new minimum, as well as do the reorg
+       work that needs to be done.  */
+      m_min = ret->m_right;
+      consolidate ();
+    }
+
+  return ret;
+}
+
+/* Remove root NODE from the heap.  */
+
+template<class K, class V>
+void
+fibonacci_heap<K,V>::remove_root (fibonacci_node<K,V> *node)
+{
+  if (node->m_left == node)
+    m_root = NULL;
+  else
+    m_root = node->remove ();
+}
+
+/* Consolidate heap.  */
+
+template<class K, class V>
+void fibonacci_heap<K,V>::consolidate ()
+{
+  int D = 1 + 8 * sizeof (long);
+  auto_vec<fibonacci_node<K,V> *> a (D);
+  a.safe_grow_cleared (D);
+  fibonacci_node<K,V> *w, *x, *y;
+  int i, d;
+
+  while ((w = m_root) != NULL)
+    {
+      x = w;
+      remove_root (w);
+      d = x->m_degree;
+      while (a[d] != NULL)
+	{
+	  y = a[d];
+	  if (x->compare (y) > 0)
+	    std::swap (x, y);
+	  y->link (x);
+	  a[d] = NULL;
+	  d++;
+	}
+      a[d] = x;
+    }
+  m_min = NULL;
+  for (i = 0; i < D; i++)
+    if (a[i] != NULL)
+      {
+	insert_root (a[i]);
+	if (m_min == NULL || a[i]->compare (m_min) < 0)
+	  m_min = a[i];
+      }
+}
+
+#endif  // GCC_FIBONACCI_HEAP_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/file-find.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/file-find.h
new file mode 100644
index 0000000..2802c2e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/file-find.h
@@ -0,0 +1,47 @@
+/* Prototypes and data structures used for implementing functions for
+   finding files relative to GCC binaries.
+   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_FILE_FIND_H
+#define GCC_FILE_FIND_H
+
+/* Structure to hold all the directories in which to search for files to
+   execute.  */
+
+struct prefix_list
+{
+  const char *prefix;         /* String to prepend to the path.  */
+  struct prefix_list *next;   /* Next in linked list.  */
+};
+
+struct path_prefix
+{
+  struct prefix_list *plist;  /* List of prefixes to try */
+  int max_len;                /* Max length of a prefix in PLIST */
+  const char *name;           /* Name of this list (used in config stuff) */
+};
+
+extern void find_file_set_debug (bool);
+extern char *find_a_file (struct path_prefix *, const char *, int);
+extern void add_prefix (struct path_prefix *, const char *);
+extern void add_prefix_begin (struct path_prefix *, const char *);
+extern void prefix_from_env (const char *, struct path_prefix *);
+extern void prefix_from_string (const char *, struct path_prefix *);
+
+#endif /* GCC_FILE_FIND_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/file-prefix-map.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/file-prefix-map.h
new file mode 100644
index 0000000..901c063
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/file-prefix-map.h
@@ -0,0 +1,28 @@
+/* Declarations for file prefix remapping support (-f*-prefix-map options).
+   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_FILE_PREFIX_MAP_H
+#define GCC_FILE_PREFIX_MAP_H
+
+void add_macro_prefix_map (const char *);
+void add_debug_prefix_map (const char *);
+void add_file_prefix_map (const char *);
+
+const char *remap_macro_filename (const char *);
+const char *remap_debug_filename (const char *);
+
+#endif /* !GCC_FILE_PREFIX_MAP_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/filenames.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/filenames.h
new file mode 100644
index 0000000..1bcfddb
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/filenames.h
@@ -0,0 +1,99 @@
+/* Macros for taking apart, interpreting and processing file names.
+
+   These are here because some non-Posix (a.k.a. DOSish) systems have
+   drive letter brain-damage at the beginning of an absolute file name,
+   use forward- and back-slash in path names interchangeably, and
+   some of them have case-insensitive file names.
+
+   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+
+This file is part of BFD, the Binary File Descriptor library.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef FILENAMES_H
+#define FILENAMES_H
+
+#include "hashtab.h" /* for hashval_t */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(__MSDOS__) || defined(_WIN32) || defined(__OS2__) || defined (__CYGWIN__)
+#  ifndef HAVE_DOS_BASED_FILE_SYSTEM
+#    define HAVE_DOS_BASED_FILE_SYSTEM 1
+#  endif
+#  ifndef HAVE_CASE_INSENSITIVE_FILE_SYSTEM
+#    define HAVE_CASE_INSENSITIVE_FILE_SYSTEM 1
+#  endif
+#  define HAS_DRIVE_SPEC(f) HAS_DOS_DRIVE_SPEC (f)
+#  define IS_DIR_SEPARATOR(c) IS_DOS_DIR_SEPARATOR (c)
+#  define IS_ABSOLUTE_PATH(f) IS_DOS_ABSOLUTE_PATH (f)
+#else /* not DOSish */
+#  if defined(__APPLE__)
+#    ifndef HAVE_CASE_INSENSITIVE_FILE_SYSTEM
+#      define HAVE_CASE_INSENSITIVE_FILE_SYSTEM 1
+#    endif
+#  endif /* __APPLE__ */
+#  define HAS_DRIVE_SPEC(f) (0)
+#  define IS_DIR_SEPARATOR(c) IS_UNIX_DIR_SEPARATOR (c)
+#  define IS_ABSOLUTE_PATH(f) IS_UNIX_ABSOLUTE_PATH (f)
+#endif
+
+#define IS_DIR_SEPARATOR_1(dos_based, c)				\
+  (((c) == '/')								\
+   || (((c) == '\\') && (dos_based)))
+
+#define HAS_DRIVE_SPEC_1(dos_based, f)			\
+  ((f)[0] && ((f)[1] == ':') && (dos_based))
+
+/* Remove the drive spec from F, assuming HAS_DRIVE_SPEC (f).
+   The result is a pointer to the remainder of F.  */
+#define STRIP_DRIVE_SPEC(f)	((f) + 2)
+
+#define IS_DOS_DIR_SEPARATOR(c) IS_DIR_SEPARATOR_1 (1, c)
+#define IS_DOS_ABSOLUTE_PATH(f) IS_ABSOLUTE_PATH_1 (1, f)
+#define HAS_DOS_DRIVE_SPEC(f) HAS_DRIVE_SPEC_1 (1, f)
+
+#define IS_UNIX_DIR_SEPARATOR(c) IS_DIR_SEPARATOR_1 (0, c)
+#define IS_UNIX_ABSOLUTE_PATH(f) IS_ABSOLUTE_PATH_1 (0, f)
+
+/* Note that when DOS_BASED is true, IS_ABSOLUTE_PATH accepts d:foo as
+   well, although it is only semi-absolute.  This is because the users
+   of IS_ABSOLUTE_PATH want to know whether to prepend the current
+   working directory to a file name, which should not be done with a
+   name like d:foo.  */
+#define IS_ABSOLUTE_PATH_1(dos_based, f)		 \
+  (IS_DIR_SEPARATOR_1 (dos_based, (f)[0])		 \
+   || HAS_DRIVE_SPEC_1 (dos_based, f))
+
+extern int filename_cmp (const char *s1, const char *s2);
+#define FILENAME_CMP(s1, s2)	filename_cmp(s1, s2)
+
+extern int filename_ncmp (const char *s1, const char *s2,
+			  size_t n);
+
+extern hashval_t filename_hash (const void *s);
+
+extern int filename_eq (const void *s1, const void *s2);
+
+extern int canonical_filename_eq (const char *a, const char *b);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* FILENAMES_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/fixed-value.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/fixed-value.h
new file mode 100644
index 0000000..27fc3a8
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/fixed-value.h
@@ -0,0 +1,111 @@
+/* Fixed-point arithmetic support.
+   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_FIXED_VALUE_H
+#define GCC_FIXED_VALUE_H
+
+struct GTY(()) fixed_value
+{
+  double_int data;       /* Store data up to 2 wide integers.  */
+  scalar_mode_pod mode;  /* Use machine mode to know IBIT and FBIT.  */
+};
+
+#define FIXED_VALUE_TYPE struct fixed_value
+
+#define MAX_FCONST0	18	/* For storing 18 fixed-point zeros per
+				   fract, ufract, accum, and uaccum modes .  */
+#define MAX_FCONST1	8	/* For storing 8 fixed-point ones per accum
+				   and uaccum modes.  */
+/* Constant fixed-point values 0 and 1.  */
+extern FIXED_VALUE_TYPE fconst0[MAX_FCONST0];
+extern FIXED_VALUE_TYPE fconst1[MAX_FCONST1];
+
+/* Macros to access fconst0 and fconst1 via machine modes.  */
+#define FCONST0(mode)	fconst0[mode - QQmode]
+#define FCONST1(mode)	fconst1[mode - HAmode]
+
+/* Return a CONST_FIXED with value R and mode M.  */
+#define CONST_FIXED_FROM_FIXED_VALUE(r, m) \
+  const_fixed_from_fixed_value (r, m)
+extern rtx const_fixed_from_fixed_value (FIXED_VALUE_TYPE, machine_mode);
+
+/* Construct a FIXED_VALUE from a bit payload and machine mode MODE.
+   The bits in PAYLOAD are sign-extended/zero-extended according to MODE.  */
+extern FIXED_VALUE_TYPE fixed_from_double_int (double_int, scalar_mode);
+
+/* Return a CONST_FIXED from a bit payload and machine mode MODE.
+   The bits in PAYLOAD are sign-extended/zero-extended according to MODE.  */
+static inline rtx
+const_fixed_from_double_int (double_int payload,
+			     scalar_mode mode)
+{
+  return
+    const_fixed_from_fixed_value (fixed_from_double_int (payload, mode),
+                                  mode);
+}
+
+/* Initialize from a decimal or hexadecimal string.  */
+extern void fixed_from_string (FIXED_VALUE_TYPE *, const char *,
+			       scalar_mode);
+
+/* In tree.c: wrap up a FIXED_VALUE_TYPE in a tree node.  */
+extern tree build_fixed (tree, FIXED_VALUE_TYPE);
+
+/* Extend or truncate to a new mode.  */
+extern bool fixed_convert (FIXED_VALUE_TYPE *, scalar_mode,
+			   const FIXED_VALUE_TYPE *, bool);
+
+/* Convert to a fixed-point mode from an integer.  */
+extern bool fixed_convert_from_int (FIXED_VALUE_TYPE *, scalar_mode,
+				    double_int, bool, bool);
+
+/* Convert to a fixed-point mode from a real.  */
+extern bool fixed_convert_from_real (FIXED_VALUE_TYPE *, scalar_mode,
+				     const REAL_VALUE_TYPE *, bool);
+
+/* Convert to a real mode from a fixed-point.  */
+extern void real_convert_from_fixed (REAL_VALUE_TYPE *, scalar_mode,
+				     const FIXED_VALUE_TYPE *);
+
+/* Compare two fixed-point objects for bitwise identity.  */
+extern bool fixed_identical (const FIXED_VALUE_TYPE *, const FIXED_VALUE_TYPE *);
+
+/* Calculate a hash value.  */
+extern unsigned int fixed_hash (const FIXED_VALUE_TYPE *);
+
+#define FIXED_VALUES_IDENTICAL(x, y)	fixed_identical (&(x), &(y))
+
+/* Determine whether a fixed-point value X is negative.  */
+#define FIXED_VALUE_NEGATIVE(x)		fixed_isneg (&(x))
+
+/* Render F as a decimal floating point constant.  */
+extern void fixed_to_decimal (char *str, const FIXED_VALUE_TYPE *, size_t);
+
+/* Binary or unary arithmetic on tree_code.  */
+extern bool fixed_arithmetic (FIXED_VALUE_TYPE *, int, const FIXED_VALUE_TYPE *,
+			      const FIXED_VALUE_TYPE *, bool);
+
+/* Compare fixed-point values by tree_code.  */
+extern bool fixed_compare (int, const FIXED_VALUE_TYPE *,
+			   const FIXED_VALUE_TYPE *);
+
+/* Determine whether a fixed-point value X is negative.  */
+extern bool fixed_isneg (const FIXED_VALUE_TYPE *);
+
+#endif /* GCC_FIXED_VALUE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/flag-types.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/flag-types.h
new file mode 100644
index 0000000..a210328
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/flag-types.h
@@ -0,0 +1,357 @@
+/* Compilation switch flag type definitions for GCC.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_FLAG_TYPES_H
+#define GCC_FLAG_TYPES_H
+
+enum debug_info_type
+{
+  NO_DEBUG,	    /* Write no debug info.  */
+  DBX_DEBUG,	    /* Write BSD .stabs for DBX (using dbxout.c).  */
+  DWARF2_DEBUG,	    /* Write Dwarf v2 debug info (using dwarf2out.c).  */
+  XCOFF_DEBUG,	    /* Write IBM/Xcoff debug info (using dbxout.c).  */
+  VMS_DEBUG,        /* Write VMS debug info (using vmsdbgout.c).  */
+  VMS_AND_DWARF2_DEBUG /* Write VMS debug info (using vmsdbgout.c).
+                          and DWARF v2 debug info (using dwarf2out.c).  */
+};
+
+enum debug_info_levels
+{
+  DINFO_LEVEL_NONE,	/* Write no debugging info.  */
+  DINFO_LEVEL_TERSE,	/* Write minimal info to support tracebacks only.  */
+  DINFO_LEVEL_NORMAL,	/* Write info for all declarations (and line table).  */
+  DINFO_LEVEL_VERBOSE	/* Write normal info plus #define/#undef info.  */
+};
+
+/* A major contribution to object and executable size is debug
+   information size.  A major contribution to debug information
+   size is struct descriptions replicated in several object files.
+   The following function determines whether or not debug information
+   should be generated for a given struct.  The indirect parameter
+   indicates that the struct is being handled indirectly, via
+   a pointer.  See opts.c for the implementation. */
+
+enum debug_info_usage
+{
+  DINFO_USAGE_DFN,	/* A struct definition. */
+  DINFO_USAGE_DIR_USE,	/* A direct use, such as the type of a variable. */
+  DINFO_USAGE_IND_USE,	/* An indirect use, such as through a pointer. */
+  DINFO_USAGE_NUM_ENUMS	/* The number of enumerators. */
+};
+
+/* A major contribution to object and executable size is debug
+   information size.  A major contribution to debug information size
+   is struct descriptions replicated in several object files. The
+   following flags attempt to reduce this information.  The basic
+   idea is to not emit struct debugging information in the current
+   compilation unit when that information will be generated by
+   another compilation unit.
+
+   Debug information for a struct defined in the current source
+   file should be generated in the object file.  Likewise the
+   debug information for a struct defined in a header should be
+   generated in the object file of the corresponding source file.
+   Both of these case are handled when the base name of the file of
+   the struct definition matches the base name of the source file
+   of the current compilation unit.  This matching emits minimal
+   struct debugging information.
+
+   The base file name matching rule above will fail to emit debug
+   information for structs defined in system headers.  So a second
+   category of files includes system headers in addition to files
+   with matching bases.
+
+   The remaining types of files are library headers and application
+   headers.  We cannot currently distinguish these two types.  */
+
+enum debug_struct_file
+{
+  DINFO_STRUCT_FILE_NONE,   /* Debug no structs. */
+  DINFO_STRUCT_FILE_BASE,   /* Debug structs defined in files with the
+                               same base name as the compilation unit. */
+  DINFO_STRUCT_FILE_SYS,    /* Also debug structs defined in system
+                               header files.  */
+  DINFO_STRUCT_FILE_ANY     /* Debug structs defined in all files. */
+};
+
+/* Balance between GNAT encodings and standard DWARF to emit.  */
+
+enum dwarf_gnat_encodings
+{
+  DWARF_GNAT_ENCODINGS_ALL = 0,	    /* Emit all GNAT encodings, then emit as
+				       much standard DWARF as possible so it
+				       does not conflict with GNAT
+				       encodings.  */
+  DWARF_GNAT_ENCODINGS_GDB = 1,	    /* Emit as much standard DWARF as possible
+				       as long as GDB handles them.  Emit GNAT
+				       encodings for the rest.  */
+  DWARF_GNAT_ENCODINGS_MINIMAL = 2  /* Emit all the standard DWARF we can.
+				       Emit GNAT encodings for the rest.  */
+};
+
+/* Enumerate Objective-c instance variable visibility settings. */
+
+enum ivar_visibility
+{
+  IVAR_VISIBILITY_PRIVATE,
+  IVAR_VISIBILITY_PROTECTED,
+  IVAR_VISIBILITY_PUBLIC,
+  IVAR_VISIBILITY_PACKAGE
+};
+
+/* The stack reuse level.  */
+enum stack_reuse_level
+{
+  SR_NONE,
+  SR_NAMED_VARS,
+  SR_ALL
+};
+
+/* The live patching level.  */
+enum live_patching_level
+{
+  LIVE_PATCHING_NONE = 0,
+  LIVE_PATCHING_INLINE_ONLY_STATIC,
+  LIVE_PATCHING_INLINE_CLONE
+};
+
+/* The algorithm used for basic block reordering.  */
+enum reorder_blocks_algorithm
+{
+  REORDER_BLOCKS_ALGORITHM_SIMPLE,
+  REORDER_BLOCKS_ALGORITHM_STC
+};
+
+/* The algorithm used for the integrated register allocator (IRA).  */
+enum ira_algorithm
+{
+  IRA_ALGORITHM_CB,
+  IRA_ALGORITHM_PRIORITY
+};
+
+/* The regions used for the integrated register allocator (IRA).  */
+enum ira_region
+{
+  IRA_REGION_ONE,
+  IRA_REGION_ALL,
+  IRA_REGION_MIXED,
+  /* This value means that there were no options -fira-region on the
+     command line and that we should choose a value depending on the
+     used -O option.  */
+  IRA_REGION_AUTODETECT
+};
+
+/* The options for excess precision.  */
+enum excess_precision
+{
+  EXCESS_PRECISION_DEFAULT,
+  EXCESS_PRECISION_FAST,
+  EXCESS_PRECISION_STANDARD
+};
+
+/* The options for which values of FLT_EVAL_METHOD are permissible.  */
+enum permitted_flt_eval_methods
+{
+  PERMITTED_FLT_EVAL_METHODS_DEFAULT,
+  PERMITTED_FLT_EVAL_METHODS_TS_18661,
+  PERMITTED_FLT_EVAL_METHODS_C11
+};
+
+/* Type of stack check.
+
+   Stack checking is designed to detect infinite recursion and stack
+   overflows for Ada programs.  Furthermore stack checking tries to ensure
+   in that scenario that enough stack space is left to run a signal handler.
+
+   -fstack-check= does not prevent stack-clash style attacks.  For that
+   you want -fstack-clash-protection.  */
+enum stack_check_type
+{
+  /* Do not check the stack.  */
+  NO_STACK_CHECK = 0,
+
+  /* Check the stack generically, i.e. assume no specific support
+     from the target configuration files.  */
+  GENERIC_STACK_CHECK,
+
+  /* Check the stack and rely on the target configuration files to
+     check the static frame of functions, i.e. use the generic
+     mechanism only for dynamic stack allocations.  */
+  STATIC_BUILTIN_STACK_CHECK,
+
+  /* Check the stack and entirely rely on the target configuration
+     files, i.e. do not use the generic mechanism at all.  */
+  FULL_BUILTIN_STACK_CHECK
+};
+
+/* Floating-point contraction mode.  */
+enum fp_contract_mode {
+  FP_CONTRACT_OFF = 0,
+  FP_CONTRACT_ON = 1,
+  FP_CONTRACT_FAST = 2
+};
+
+/* Scalar storage order kind.  */
+enum scalar_storage_order_kind {
+  SSO_NATIVE = 0,
+  SSO_BIG_ENDIAN,
+  SSO_LITTLE_ENDIAN
+};
+
+/* Vectorizer cost-model.  */
+enum vect_cost_model {
+  VECT_COST_MODEL_UNLIMITED = 0,
+  VECT_COST_MODEL_CHEAP = 1,
+  VECT_COST_MODEL_DYNAMIC = 2,
+  VECT_COST_MODEL_DEFAULT = 3
+};
+
+/* Different instrumentation modes.  */
+enum sanitize_code {
+  /* AddressSanitizer.  */
+  SANITIZE_ADDRESS = 1UL << 0,
+  SANITIZE_USER_ADDRESS = 1UL << 1,
+  SANITIZE_KERNEL_ADDRESS = 1UL << 2,
+  /* ThreadSanitizer.  */
+  SANITIZE_THREAD = 1UL << 3,
+  /* LeakSanitizer.  */
+  SANITIZE_LEAK = 1UL << 4,
+  /* UndefinedBehaviorSanitizer.  */
+  SANITIZE_SHIFT_BASE = 1UL << 5,
+  SANITIZE_SHIFT_EXPONENT = 1UL << 6,
+  SANITIZE_DIVIDE = 1UL << 7,
+  SANITIZE_UNREACHABLE = 1UL << 8,
+  SANITIZE_VLA = 1UL << 9,
+  SANITIZE_NULL = 1UL << 10,
+  SANITIZE_RETURN = 1UL << 11,
+  SANITIZE_SI_OVERFLOW = 1UL << 12,
+  SANITIZE_BOOL = 1UL << 13,
+  SANITIZE_ENUM = 1UL << 14,
+  SANITIZE_FLOAT_DIVIDE = 1UL << 15,
+  SANITIZE_FLOAT_CAST = 1UL << 16,
+  SANITIZE_BOUNDS = 1UL << 17,
+  SANITIZE_ALIGNMENT = 1UL << 18,
+  SANITIZE_NONNULL_ATTRIBUTE = 1UL << 19,
+  SANITIZE_RETURNS_NONNULL_ATTRIBUTE = 1UL << 20,
+  SANITIZE_OBJECT_SIZE = 1UL << 21,
+  SANITIZE_VPTR = 1UL << 22,
+  SANITIZE_BOUNDS_STRICT = 1UL << 23,
+  SANITIZE_POINTER_OVERFLOW = 1UL << 24,
+  SANITIZE_BUILTIN = 1UL << 25,
+  SANITIZE_POINTER_COMPARE = 1UL << 26,
+  SANITIZE_POINTER_SUBTRACT = 1UL << 27,
+  SANITIZE_SHIFT = SANITIZE_SHIFT_BASE | SANITIZE_SHIFT_EXPONENT,
+  SANITIZE_UNDEFINED = SANITIZE_SHIFT | SANITIZE_DIVIDE | SANITIZE_UNREACHABLE
+		       | SANITIZE_VLA | SANITIZE_NULL | SANITIZE_RETURN
+		       | SANITIZE_SI_OVERFLOW | SANITIZE_BOOL | SANITIZE_ENUM
+		       | SANITIZE_BOUNDS | SANITIZE_ALIGNMENT
+		       | SANITIZE_NONNULL_ATTRIBUTE
+		       | SANITIZE_RETURNS_NONNULL_ATTRIBUTE
+		       | SANITIZE_OBJECT_SIZE | SANITIZE_VPTR
+		       | SANITIZE_POINTER_OVERFLOW | SANITIZE_BUILTIN,
+  SANITIZE_UNDEFINED_NONDEFAULT = SANITIZE_FLOAT_DIVIDE | SANITIZE_FLOAT_CAST
+				  | SANITIZE_BOUNDS_STRICT
+};
+
+/* Settings of flag_incremental_link.  */
+enum incremental_link {
+  INCREMENTAL_LINK_NONE,
+  /* Do incremental linking and produce binary.  */
+  INCREMENTAL_LINK_NOLTO,
+  /* Do incremental linking and produce IL.  */
+  INCREMENTAL_LINK_LTO
+};
+
+/* Different trace modes.  */
+enum sanitize_coverage_code {
+  /* Trace PC.  */
+  SANITIZE_COV_TRACE_PC = 1 << 0,
+  /* Trace Comparison.  */
+  SANITIZE_COV_TRACE_CMP = 1 << 1
+};
+
+/* flag_vtable_verify initialization levels. */
+enum vtv_priority {
+  VTV_NO_PRIORITY       = 0,  /* i.E. Do NOT do vtable verification. */
+  VTV_STANDARD_PRIORITY = 1,
+  VTV_PREINIT_PRIORITY  = 2
+};
+
+/* flag_lto_partition initialization values.  */
+enum lto_partition_model {
+  LTO_PARTITION_NONE = 0,
+  LTO_PARTITION_ONE = 1,
+  LTO_PARTITION_BALANCED = 2,
+  LTO_PARTITION_1TO1 = 3,
+  LTO_PARTITION_MAX = 4
+};
+
+/* flag_lto_linker_output initialization values.  */
+enum lto_linker_output {
+  LTO_LINKER_OUTPUT_UNKNOWN,
+  LTO_LINKER_OUTPUT_REL,
+  LTO_LINKER_OUTPUT_NOLTOREL,
+  LTO_LINKER_OUTPUT_DYN,
+  LTO_LINKER_OUTPUT_PIE,
+  LTO_LINKER_OUTPUT_EXEC
+};
+
+/* gfortran -finit-real= values.  */
+
+enum gfc_init_local_real
+{
+  GFC_INIT_REAL_OFF = 0,
+  GFC_INIT_REAL_ZERO,
+  GFC_INIT_REAL_NAN,
+  GFC_INIT_REAL_SNAN,
+  GFC_INIT_REAL_INF,
+  GFC_INIT_REAL_NEG_INF
+};
+
+/* gfortran -fcoarray= values.  */
+
+enum gfc_fcoarray
+{
+  GFC_FCOARRAY_NONE = 0,
+  GFC_FCOARRAY_SINGLE,
+  GFC_FCOARRAY_LIB
+};
+
+
+/* gfortran -fconvert= values; used for unformatted I/O.
+   Keep in sync with GFC_CONVERT_* in gcc/fortran/libgfortran.h.   */
+enum gfc_convert
+{
+  GFC_FLAG_CONVERT_NATIVE = 0,
+  GFC_FLAG_CONVERT_SWAP,
+  GFC_FLAG_CONVERT_BIG,
+  GFC_FLAG_CONVERT_LITTLE
+};
+
+
+/* Control-Flow Protection values.  */
+enum cf_protection_level
+{
+  CF_NONE = 0,
+  CF_BRANCH = 1 << 0,
+  CF_RETURN = 1 << 1,
+  CF_FULL = CF_BRANCH | CF_RETURN,
+  CF_SET = 1 << 2
+};
+#endif /* ! GCC_FLAG_TYPES_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/flags.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/flags.h
new file mode 100644
index 0000000..0ea1812
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/flags.h
@@ -0,0 +1,87 @@
+/* Compilation switch flag definitions for GCC.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_FLAGS_H
+#define GCC_FLAGS_H
+
+#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS)
+
+/* Names of debug_info_type, for error messages.  */
+extern const char *const debug_type_names[];
+
+extern void strip_off_ending (char *, int);
+extern int base_of_path (const char *path, const char **base_out);
+
+/* Return true iff flags are set as if -ffast-math.  */
+extern bool fast_math_flags_set_p (const struct gcc_options *);
+extern bool fast_math_flags_struct_set_p (struct cl_optimization *);
+
+
+/* Now the symbols that are set with `-f' switches.  */
+
+/* True if printing into -fdump-final-insns= dump.  */
+
+extern bool final_insns_dump_p;
+
+
+/* Other basic status info about current function.  */
+
+struct target_flag_state
+{
+  /* Each falign-foo can generate up to two levels of alignment:
+     -falign-foo=N:M[:N2:M2] */
+  align_flags x_align_loops;
+  align_flags x_align_jumps;
+  align_flags x_align_labels;
+  align_flags x_align_functions;
+
+  /* The excess precision currently in effect.  */
+  enum excess_precision x_flag_excess_precision;
+};
+
+extern struct target_flag_state default_target_flag_state;
+#if SWITCHABLE_TARGET
+extern struct target_flag_state *this_target_flag_state;
+#else
+#define this_target_flag_state (&default_target_flag_state)
+#endif
+
+#define align_loops	 (this_target_flag_state->x_align_loops)
+#define align_jumps	 (this_target_flag_state->x_align_jumps)
+#define align_labels	 (this_target_flag_state->x_align_labels)
+#define align_functions	 (this_target_flag_state->x_align_functions)
+
+/* String representaions of the above options are available in
+   const char *str_align_foo.  NULL if not set.  */
+
+#define flag_excess_precision \
+  (this_target_flag_state->x_flag_excess_precision)
+
+/* Returns TRUE if generated code should match ABI version N or
+   greater is in use.  */
+
+#define abi_version_at_least(N) \
+  (flag_abi_version == 0 || flag_abi_version >= (N))
+
+/* Whether to emit an overflow warning whose code is C.  */
+#define issue_strict_overflow_warning(c) (warn_strict_overflow >= (int) (c))
+
+#endif
+
+#endif /* ! GCC_FLAGS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/fold-const-call.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/fold-const-call.h
new file mode 100644
index 0000000..fa2931a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/fold-const-call.h
@@ -0,0 +1,28 @@
+/* Fold calls to built-in and internal functions with constant arguments.
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_FOLD_CONST_CALL_H
+#define GCC_FOLD_CONST_CALL_H
+
+tree fold_const_call (combined_fn, tree, tree);
+tree fold_const_call (combined_fn, tree, tree, tree);
+tree fold_const_call (combined_fn, tree, tree, tree, tree);
+tree build_cmp_result (tree type, int res);
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/fold-const.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/fold-const.h
new file mode 100644
index 0000000..049fee9
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/fold-const.h
@@ -0,0 +1,210 @@
+/* Fold a constant sub-tree into a single node for C-compiler
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_FOLD_CONST_H
+#define GCC_FOLD_CONST_H
+
+/* Non-zero if we are folding constants inside an initializer; zero
+   otherwise.  */
+extern int folding_initializer;
+
+/* Convert between trees and native memory representation.  */
+extern int native_encode_expr (const_tree, unsigned char *, int, int off = -1);
+extern tree native_interpret_expr (tree, const unsigned char *, int);
+
+/* Fold constants as much as possible in an expression.
+   Returns the simplified expression.
+   Acts only on the top level of the expression;
+   if the argument itself cannot be simplified, its
+   subexpressions are not changed.  */
+
+extern tree fold (tree);
+#define fold_unary(CODE,T1,T2)\
+   fold_unary_loc (UNKNOWN_LOCATION, CODE, T1, T2)
+extern tree fold_unary_loc (location_t, enum tree_code, tree, tree);
+#define fold_unary_ignore_overflow(CODE,T1,T2)\
+   fold_unary_ignore_overflow_loc (UNKNOWN_LOCATION, CODE, T1, T2)
+extern tree fold_unary_ignore_overflow_loc (location_t, enum tree_code, tree, tree);
+#define fold_binary(CODE,T1,T2,T3)\
+   fold_binary_loc (UNKNOWN_LOCATION, CODE, T1, T2, T3)
+extern tree fold_binary_loc (location_t, enum tree_code, tree, tree, tree);
+#define fold_ternary(CODE,T1,T2,T3,T4)\
+   fold_ternary_loc (UNKNOWN_LOCATION, CODE, T1, T2, T3, T4)
+extern tree fold_ternary_loc (location_t, enum tree_code, tree, tree, tree, tree);
+#define fold_build1(c,t1,t2)\
+   fold_build1_loc (UNKNOWN_LOCATION, c, t1, t2 MEM_STAT_INFO)
+extern tree fold_build1_loc (location_t, enum tree_code, tree,
+			     tree CXX_MEM_STAT_INFO);
+#define fold_build2(c,t1,t2,t3)\
+   fold_build2_loc (UNKNOWN_LOCATION, c, t1, t2, t3 MEM_STAT_INFO)
+extern tree fold_build2_loc (location_t, enum tree_code, tree, tree,
+			     tree CXX_MEM_STAT_INFO);
+#define fold_build3(c,t1,t2,t3,t4)\
+   fold_build3_loc (UNKNOWN_LOCATION, c, t1, t2, t3, t4 MEM_STAT_INFO)
+extern tree fold_build3_loc (location_t, enum tree_code, tree, tree, tree,
+				  tree CXX_MEM_STAT_INFO);
+extern tree fold_build1_initializer_loc (location_t, enum tree_code, tree, tree);
+extern tree fold_build2_initializer_loc (location_t, enum tree_code, tree, tree, tree);
+#define fold_build_call_array(T1,T2,N,T4)\
+   fold_build_call_array_loc (UNKNOWN_LOCATION, T1, T2, N, T4)
+extern tree fold_build_call_array_loc (location_t, tree, tree, int, tree *);
+#define fold_build_call_array_initializer(T1,T2,N,T4)\
+   fold_build_call_array_initializer_loc (UNKNOWN_LOCATION, T1, T2, N, T4)
+extern tree fold_build_call_array_initializer_loc (location_t, tree, tree, int, tree *);
+extern tree get_array_ctor_element_at_index (tree, offset_int);
+extern bool fold_convertible_p (const_tree, const_tree);
+#define fold_convert(T1,T2)\
+   fold_convert_loc (UNKNOWN_LOCATION, T1, T2)
+extern tree fold_convert_loc (location_t, tree, tree);
+extern tree fold_single_bit_test (location_t, enum tree_code, tree, tree, tree);
+extern tree fold_ignored_result (tree);
+extern tree fold_abs_const (tree, tree);
+extern tree fold_indirect_ref_1 (location_t, tree, tree);
+extern void fold_defer_overflow_warnings (void);
+extern void fold_undefer_overflow_warnings (bool, const gimple *, int);
+extern void fold_undefer_and_ignore_overflow_warnings (void);
+extern bool fold_deferring_overflow_warnings_p (void);
+extern void fold_overflow_warning (const char*, enum warn_strict_overflow_code);
+extern enum tree_code fold_div_compare (enum tree_code, tree, tree,
+					tree *, tree *, bool *);
+extern int operand_equal_p (const_tree, const_tree, unsigned int);
+extern int multiple_of_p (tree, const_tree, const_tree);
+#define omit_one_operand(T1,T2,T3)\
+   omit_one_operand_loc (UNKNOWN_LOCATION, T1, T2, T3)
+extern tree omit_one_operand_loc (location_t, tree, tree, tree);
+#define omit_two_operands(T1,T2,T3,T4)\
+   omit_two_operands_loc (UNKNOWN_LOCATION, T1, T2, T3, T4)
+extern tree omit_two_operands_loc (location_t, tree, tree, tree, tree);
+#define invert_truthvalue(T)\
+   invert_truthvalue_loc (UNKNOWN_LOCATION, T)
+extern tree invert_truthvalue_loc (location_t, tree);
+extern tree fold_unary_to_constant (enum tree_code, tree, tree);
+extern tree fold_binary_to_constant (enum tree_code, tree, tree, tree);
+extern tree fold_bit_and_mask (tree, tree, enum tree_code,
+			       tree, enum tree_code, tree, tree,
+			       tree, enum tree_code, tree, tree, tree *);
+extern tree fold_read_from_constant_string (tree);
+extern bool wide_int_binop (wide_int &res, enum tree_code,
+			    const wide_int &arg1, const wide_int &arg2,
+			    signop, wi::overflow_type *);
+extern tree int_const_binop (enum tree_code, const_tree, const_tree, int = 1);
+#define build_fold_addr_expr(T)\
+        build_fold_addr_expr_loc (UNKNOWN_LOCATION, (T))
+extern tree build_fold_addr_expr_loc (location_t, tree);
+#define build_fold_addr_expr_with_type(T,TYPE)\
+        build_fold_addr_expr_with_type_loc (UNKNOWN_LOCATION, (T), TYPE)
+extern tree build_fold_addr_expr_with_type_loc (location_t, tree, tree);
+extern tree fold_build_cleanup_point_expr (tree type, tree expr);
+#define build_fold_indirect_ref(T)\
+        build_fold_indirect_ref_loc (UNKNOWN_LOCATION, T)
+extern tree build_fold_indirect_ref_loc (location_t, tree);
+#define fold_indirect_ref(T)\
+        fold_indirect_ref_loc (UNKNOWN_LOCATION, T)
+extern tree fold_indirect_ref_loc (location_t, tree);
+extern tree build_simple_mem_ref_loc (location_t, tree);
+#define build_simple_mem_ref(T)\
+	build_simple_mem_ref_loc (UNKNOWN_LOCATION, T)
+extern poly_offset_int mem_ref_offset (const_tree);
+extern tree build_invariant_address (tree, tree, poly_int64);
+extern tree constant_boolean_node (bool, tree);
+extern tree div_if_zero_remainder (const_tree, const_tree);
+
+extern bool tree_swap_operands_p (const_tree, const_tree);
+extern enum tree_code swap_tree_comparison (enum tree_code);
+
+extern bool ptr_difference_const (tree, tree, poly_int64_pod *);
+extern enum tree_code invert_tree_comparison (enum tree_code, bool);
+extern bool inverse_conditions_p (const_tree, const_tree);
+
+extern bool tree_unary_nonzero_warnv_p (enum tree_code, tree, tree, bool *);
+extern bool tree_binary_nonzero_warnv_p (enum tree_code, tree, tree, tree op1,
+                                         bool *);
+extern bool tree_single_nonzero_warnv_p (tree, bool *);
+extern bool tree_unary_nonnegative_warnv_p (enum tree_code, tree, tree,
+					    bool *, int);
+extern bool tree_binary_nonnegative_warnv_p (enum tree_code, tree, tree, tree,
+					     bool *, int);
+extern bool tree_single_nonnegative_warnv_p (tree, bool *, int);
+extern bool tree_call_nonnegative_warnv_p (tree, combined_fn, tree, tree,
+					   bool *, int);
+
+extern bool integer_valued_real_unary_p (tree_code, tree, int);
+extern bool integer_valued_real_binary_p (tree_code, tree, tree, int);
+extern bool integer_valued_real_call_p (combined_fn, tree, tree, int);
+extern bool integer_valued_real_single_p (tree, int);
+extern bool integer_valued_real_p (tree, int = 0);
+
+extern bool fold_real_zero_addition_p (const_tree, const_tree, int);
+extern tree combine_comparisons (location_t, enum tree_code, enum tree_code,
+				 enum tree_code, tree, tree, tree);
+extern void debug_fold_checksum (const_tree);
+extern bool may_negate_without_overflow_p (const_tree);
+#define round_up(T,N) round_up_loc (UNKNOWN_LOCATION, T, N)
+extern tree round_up_loc (location_t, tree, unsigned int);
+#define round_down(T,N) round_down_loc (UNKNOWN_LOCATION, T, N)
+extern tree round_down_loc (location_t, tree, int);
+extern tree size_int_kind (poly_int64, enum size_type_kind);
+#define size_binop(CODE,T1,T2)\
+   size_binop_loc (UNKNOWN_LOCATION, CODE, T1, T2)
+extern tree size_binop_loc (location_t, enum tree_code, tree, tree);
+#define size_diffop(T1,T2)\
+   size_diffop_loc (UNKNOWN_LOCATION, T1, T2)
+extern tree size_diffop_loc (location_t, tree, tree);
+
+/* Return an expr equal to X but certainly not valid as an lvalue.  */
+#define non_lvalue(T) non_lvalue_loc (UNKNOWN_LOCATION, T)
+extern tree non_lvalue_loc (location_t, tree);
+
+extern bool tree_expr_nonzero_p (tree);
+extern bool tree_expr_nonnegative_p (tree);
+extern bool tree_expr_nonnegative_warnv_p (tree, bool *, int = 0);
+extern tree make_range (tree, int *, tree *, tree *, bool *);
+extern tree make_range_step (location_t, enum tree_code, tree, tree, tree,
+			     tree *, tree *, int *, bool *);
+extern tree range_check_type (tree);
+extern tree build_range_check (location_t, tree, tree, int, tree, tree);
+extern bool merge_ranges (int *, tree *, tree *, int, tree, tree, int,
+			  tree, tree);
+extern tree sign_bit_p (tree, const_tree);
+extern tree exact_inverse (tree, tree);
+extern bool expr_not_equal_to (tree t, const wide_int &);
+extern tree const_unop (enum tree_code, tree, tree);
+extern tree const_binop (enum tree_code, tree, tree, tree);
+extern bool negate_mathfn_p (combined_fn);
+extern const char *c_getstr (tree, unsigned HOST_WIDE_INT * = NULL);
+extern wide_int tree_nonzero_bits (const_tree);
+
+/* Return OFF converted to a pointer offset type suitable as offset for
+   POINTER_PLUS_EXPR.  Use location LOC for this conversion.  */
+extern tree convert_to_ptrofftype_loc (location_t loc, tree off);
+
+#define convert_to_ptrofftype(t) convert_to_ptrofftype_loc (UNKNOWN_LOCATION, t)
+
+/* Build and fold a POINTER_PLUS_EXPR at LOC offsetting PTR by OFF.  */
+extern tree fold_build_pointer_plus_loc (location_t loc, tree ptr, tree off);
+
+#define fold_build_pointer_plus(p,o) \
+	fold_build_pointer_plus_loc (UNKNOWN_LOCATION, p, o)
+
+/* Build and fold a POINTER_PLUS_EXPR at LOC offsetting PTR by OFF.  */
+extern tree fold_build_pointer_plus_hwi_loc (location_t loc, tree ptr, HOST_WIDE_INT off);
+
+#define fold_build_pointer_plus_hwi(p,o) \
+	fold_build_pointer_plus_hwi_loc (UNKNOWN_LOCATION, p, o)
+#endif // GCC_FOLD_CONST_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/function.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/function.h
new file mode 100644
index 0000000..cef093c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/function.h
@@ -0,0 +1,670 @@
+/* Structure for saving state for a nested function.
+   Copyright (C) 1989-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_FUNCTION_H
+#define GCC_FUNCTION_H
+
+
+/* Stack of pending (incomplete) sequences saved by `start_sequence'.
+   Each element describes one pending sequence.
+   The main insn-chain is saved in the last element of the chain,
+   unless the chain is empty.  */
+
+struct GTY(()) sequence_stack {
+  /* First and last insns in the chain of the saved sequence.  */
+  rtx_insn *first;
+  rtx_insn *last;
+  struct sequence_stack *next;
+};
+
+struct GTY(()) emit_status {
+  void ensure_regno_capacity ();
+
+  /* This is reset to LAST_VIRTUAL_REGISTER + 1 at the start of each function.
+     After rtl generation, it is 1 plus the largest register number used.  */
+  int x_reg_rtx_no;
+
+  /* Lowest label number in current function.  */
+  int x_first_label_num;
+
+  /* seq.first and seq.last are the ends of the doubly-linked chain of
+     rtl for the current function.  Both are reset to null at the
+     start of rtl generation for the function. 
+
+     start_sequence saves both of these on seq.next and then starts
+     a new, nested sequence of insns.
+
+     seq.next is a stack of pending (incomplete) sequences saved by
+     start_sequence.  Each element describes one pending sequence.
+     The main insn-chain is the last element of the chain.  */
+  struct sequence_stack seq;
+
+  /* INSN_UID for next insn emitted.
+     Reset to 1 for each function compiled.  */
+  int x_cur_insn_uid;
+
+  /* INSN_UID for next debug insn emitted.  Only used if
+     --param min-nondebug-insn-uid=<value> is given with nonzero value.  */
+  int x_cur_debug_insn_uid;
+
+  /* The length of the regno_pointer_align, regno_decl, and x_regno_reg_rtx
+     vectors.  Since these vectors are needed during the expansion phase when
+     the total number of registers in the function is not yet known, the
+     vectors are copied and made bigger when necessary.  */
+  int regno_pointer_align_length;
+
+  /* Indexed by pseudo register number, if nonzero gives the known alignment
+     for that pseudo (if REG_POINTER is set in x_regno_reg_rtx).
+     Allocated in parallel with x_regno_reg_rtx.  */
+  unsigned char * GTY((skip)) regno_pointer_align;
+};
+
+
+/* Indexed by register number, gives an rtx for that register (and only
+   that register).  For pseudo registers, it is the unique rtx for
+   that pseudo.  For hard registers, it is an rtx of the mode specified
+   by reg_raw_mode.
+
+   FIXME: We could put it into emit_status struct, but gengtype is not
+   able to deal with length attribute nested in top level structures.  */
+
+extern GTY ((length ("crtl->emit.x_reg_rtx_no"))) rtx * regno_reg_rtx;
+
+/* For backward compatibility... eventually these should all go away.  */
+#define reg_rtx_no (crtl->emit.x_reg_rtx_no)
+
+#define REGNO_POINTER_ALIGN(REGNO) (crtl->emit.regno_pointer_align[REGNO])
+
+struct GTY(()) expr_status {
+  /* Number of units that we should eventually pop off the stack.
+     These are the arguments to function calls that have already returned.  */
+  poly_int64_pod x_pending_stack_adjust;
+
+  /* Under some ABIs, it is the caller's responsibility to pop arguments
+     pushed for function calls.  A naive implementation would simply pop
+     the arguments immediately after each call.  However, if several
+     function calls are made in a row, it is typically cheaper to pop
+     all the arguments after all of the calls are complete since a
+     single pop instruction can be used.  Therefore, GCC attempts to
+     defer popping the arguments until absolutely necessary.  (For
+     example, at the end of a conditional, the arguments must be popped,
+     since code outside the conditional won't know whether or not the
+     arguments need to be popped.)
+
+     When INHIBIT_DEFER_POP is nonzero, however, the compiler does not
+     attempt to defer pops.  Instead, the stack is popped immediately
+     after each call.  Rather then setting this variable directly, use
+     NO_DEFER_POP and OK_DEFER_POP.  */
+  int x_inhibit_defer_pop;
+
+  /* If PREFERRED_STACK_BOUNDARY and PUSH_ROUNDING are defined, the stack
+     boundary can be momentarily unaligned while pushing the arguments.
+     Record the delta since last aligned boundary here in order to get
+     stack alignment in the nested function calls working right.  */
+  poly_int64_pod x_stack_pointer_delta;
+
+  /* Nonzero means __builtin_saveregs has already been done in this function.
+     The value is the pseudoreg containing the value __builtin_saveregs
+     returned.  */
+  rtx x_saveregs_value;
+
+  /* Similarly for __builtin_apply_args.  */
+  rtx x_apply_args_value;
+
+  /* List of labels that must never be deleted.  */
+  vec<rtx_insn *, va_gc> *x_forced_labels;
+};
+
+typedef struct call_site_record_d *call_site_record;
+
+/* RTL representation of exception handling.  */
+struct GTY(()) rtl_eh {
+  rtx ehr_stackadj;
+  rtx ehr_handler;
+  rtx_code_label *ehr_label;
+
+  rtx sjlj_fc;
+  rtx_insn *sjlj_exit_after;
+
+  vec<uchar, va_gc> *action_record_data;
+
+  vec<call_site_record, va_gc> *call_site_record_v[2];
+};
+
+#define pending_stack_adjust (crtl->expr.x_pending_stack_adjust)
+#define inhibit_defer_pop (crtl->expr.x_inhibit_defer_pop)
+#define saveregs_value (crtl->expr.x_saveregs_value)
+#define apply_args_value (crtl->expr.x_apply_args_value)
+#define forced_labels (crtl->expr.x_forced_labels)
+#define stack_pointer_delta (crtl->expr.x_stack_pointer_delta)
+
+struct gimple_df;
+struct call_site_record_d;
+struct dw_fde_node;
+
+struct GTY(()) varasm_status {
+  /* If we're using a per-function constant pool, this is it.  */
+  struct rtx_constant_pool *pool;
+
+  /* Number of tree-constants deferred during the expansion of this
+     function.  */
+  unsigned int deferred_constants;
+};
+
+
+/* Data for function partitioning.  */
+struct GTY(()) function_subsections {
+  /* Assembly labels for the hot and cold text sections, to
+     be used by debugger functions for determining the size of text
+     sections.  */
+
+  const char *hot_section_label;
+  const char *cold_section_label;
+  const char *hot_section_end_label;
+  const char *cold_section_end_label;
+};
+
+/* Describe an empty area of space in the stack frame.  These can be chained
+   into a list; this is used to keep track of space wasted for alignment
+   reasons.  */
+struct GTY(()) frame_space
+{
+  struct frame_space *next;
+
+  poly_int64 start;
+  poly_int64 length;
+};
+
+struct GTY(()) stack_usage
+{
+  /* # of bytes of static stack space allocated by the function.  */
+  HOST_WIDE_INT static_stack_size;
+
+  /* # of bytes of dynamic stack space allocated by the function.  This is
+     meaningful only if has_unbounded_dynamic_stack_size is zero.  */
+  HOST_WIDE_INT dynamic_stack_size;
+
+  /* Upper bound on the number of bytes pushed onto the stack after the
+     prologue.  If !ACCUMULATE_OUTGOING_ARGS, it contains the outgoing
+     arguments.  */
+  poly_int64 pushed_stack_size;
+
+  /* Nonzero if the amount of stack space allocated dynamically cannot
+     be bounded at compile-time.  */
+  unsigned int has_unbounded_dynamic_stack_size : 1;
+};
+
+#define current_function_static_stack_size (cfun->su->static_stack_size)
+#define current_function_dynamic_stack_size (cfun->su->dynamic_stack_size)
+#define current_function_pushed_stack_size (cfun->su->pushed_stack_size)
+#define current_function_has_unbounded_dynamic_stack_size \
+  (cfun->su->has_unbounded_dynamic_stack_size)
+#define current_function_allocates_dynamic_stack_space    \
+  (current_function_dynamic_stack_size != 0               \
+   || current_function_has_unbounded_dynamic_stack_size)
+
+/* This structure can save all the important global and static variables
+   describing the status of the current function.  */
+
+struct GTY(()) function {
+  struct eh_status *eh;
+
+  /* The control flow graph for this function.  */
+  struct control_flow_graph *cfg;
+
+  /* GIMPLE body for this function.  */
+  gimple_seq gimple_body;
+
+  /* SSA and dataflow information.  */
+  struct gimple_df *gimple_df;
+
+  /* The loops in this function.  */
+  struct loops *x_current_loops;
+
+  /* Filled by the GIMPLE and RTL FEs, pass to start compilation with.  */
+  char *pass_startwith;
+
+  /* The stack usage of this function.  */
+  struct stack_usage *su;
+
+  /* Value histograms attached to particular statements.  */
+  htab_t GTY((skip)) value_histograms;
+
+  /* For function.c.  */
+
+  /* Points to the FUNCTION_DECL of this function.  */
+  tree decl;
+
+  /* A PARM_DECL that should contain the static chain for this function.
+     It will be initialized at the beginning of the function.  */
+  tree static_chain_decl;
+
+  /* An expression that contains the non-local goto save area.  The first
+     word is the saved frame pointer and the second is the saved stack
+     pointer.  */
+  tree nonlocal_goto_save_area;
+
+  /* Vector of function local variables, functions, types and constants.  */
+  vec<tree, va_gc> *local_decls;
+
+  /* For md files.  */
+
+  /* tm.h can use this to store whatever it likes.  */
+  struct machine_function * GTY ((maybe_undef)) machine;
+
+  /* Language-specific code can use this to store whatever it likes.  */
+  struct language_function * language;
+
+  /* Used types hash table.  */
+  hash_set<tree> *GTY (()) used_types_hash;
+
+  /* Dwarf2 Frame Description Entry, containing the Call Frame Instructions
+     used for unwinding.  Only set when either dwarf2 unwinding or dwarf2
+     debugging is enabled.  */
+  struct dw_fde_node *fde;
+
+  /* Last statement uid.  */
+  int last_stmt_uid;
+
+  /* Debug marker counter.  Count begin stmt markers.  We don't have
+     to keep it exact, it's more of a rough estimate to enable us to
+     decide whether they are too many to copy during inlining, or when
+     expanding to RTL.  */
+  int debug_marker_count;
+
+  /* Function sequence number for profiling, debugging, etc.  */
+  int funcdef_no;
+
+  /* Line number of the start of the function for debugging purposes.  */
+  location_t function_start_locus;
+
+  /* Line number of the end of the function.  */
+  location_t function_end_locus;
+
+  /* Properties used by the pass manager.  */
+  unsigned int curr_properties;
+  unsigned int last_verified;
+
+  /* Non-null if the function does something that would prevent it from
+     being copied; this applies to both versioning and inlining.  Set to
+     a string describing the reason for failure.  */
+  const char * GTY((skip)) cannot_be_copied_reason;
+
+  /* Last assigned dependence info clique.  */
+  unsigned short last_clique;
+
+  /* Collected bit flags.  */
+
+  /* Number of units of general registers that need saving in stdarg
+     function.  What unit is depends on the backend, either it is number
+     of bytes, or it can be number of registers.  */
+  unsigned int va_list_gpr_size : 8;
+
+  /* Number of units of floating point registers that need saving in stdarg
+     function.  */
+  unsigned int va_list_fpr_size : 8;
+
+  /* Nonzero if function being compiled can call setjmp.  */
+  unsigned int calls_setjmp : 1;
+
+  /* Nonzero if function being compiled can call alloca,
+     either as a subroutine or builtin.  */
+  unsigned int calls_alloca : 1;
+
+  /* Nonzero if function being compiled receives nonlocal gotos
+     from nested functions.  */
+  unsigned int has_nonlocal_label : 1;
+
+  /* Nonzero if function being compiled has a forced label
+     placed into static storage.  */
+  unsigned int has_forced_label_in_static : 1;
+
+  /* Nonzero if we've set cannot_be_copied_reason.  I.e. if
+     (cannot_be_copied_set && !cannot_be_copied_reason), the function
+     can in fact be copied.  */
+  unsigned int cannot_be_copied_set : 1;
+
+  /* Nonzero if current function uses stdarg.h or equivalent.  */
+  unsigned int stdarg : 1;
+
+  unsigned int after_inlining : 1;
+  unsigned int always_inline_functions_inlined : 1;
+
+  /* Nonzero if function being compiled can throw synchronous non-call
+     exceptions.  */
+  unsigned int can_throw_non_call_exceptions : 1;
+
+  /* Nonzero if instructions that may throw exceptions but don't otherwise
+     contribute to the execution of the program can be deleted.  */
+  unsigned int can_delete_dead_exceptions : 1;
+
+  /* Fields below this point are not set for abstract functions; see
+     allocate_struct_function.  */
+
+  /* Nonzero if function being compiled needs to be given an address
+     where the value should be stored.  */
+  unsigned int returns_struct : 1;
+
+  /* Nonzero if function being compiled needs to
+     return the address of where it has put a structure value.  */
+  unsigned int returns_pcc_struct : 1;
+
+  /* Nonzero if this function has local DECL_HARD_REGISTER variables.
+     In this case code motion has to be done more carefully.  */
+  unsigned int has_local_explicit_reg_vars : 1;
+
+  /* Nonzero if the current function is a thunk, i.e., a lightweight
+     function implemented by the output_mi_thunk hook) that just
+     adjusts one of its arguments and forwards to another
+     function.  */
+  unsigned int is_thunk : 1;
+
+  /* Nonzero if the current function contains any loops with
+     loop->force_vectorize set.  */
+  unsigned int has_force_vectorize_loops : 1;
+
+  /* Nonzero if the current function contains any loops with
+     nonzero value in loop->simduid.  */
+  unsigned int has_simduid_loops : 1;
+
+  /* Nonzero when the tail call has been identified.  */
+  unsigned int tail_call_marked : 1;
+
+  /* Nonzero if the current function contains a #pragma GCC unroll.  */
+  unsigned int has_unroll : 1;
+
+  /* Set when the function was compiled with generation of debug
+     (begin stmt, inline entry, ...) markers enabled.  */
+  unsigned int debug_nonbind_markers : 1;
+};
+
+/* Add the decl D to the local_decls list of FUN.  */
+
+void add_local_decl (struct function *fun, tree d);
+
+#define FOR_EACH_LOCAL_DECL(FUN, I, D)		\
+  FOR_EACH_VEC_SAFE_ELT_REVERSE ((FUN)->local_decls, I, D)
+
+/* If va_list_[gf]pr_size is set to this, it means we don't know how
+   many units need to be saved.  */
+#define VA_LIST_MAX_GPR_SIZE	255
+#define VA_LIST_MAX_FPR_SIZE	255
+
+/* The function currently being compiled.  */
+extern GTY(()) struct function *cfun;
+
+/* In order to ensure that cfun is not set directly, we redefine it so
+   that it is not an lvalue.  Rather than assign to cfun, use
+   push_cfun or set_cfun.  */
+#define cfun (cfun + 0)
+
+/* Nonzero if we've already converted virtual regs to hard regs.  */
+extern int virtuals_instantiated;
+
+/* Nonzero if at least one trampoline has been created.  */
+extern int trampolines_created;
+
+struct GTY((for_user)) types_used_by_vars_entry {
+  tree type;
+  tree var_decl;
+};
+
+struct used_type_hasher : ggc_ptr_hash<types_used_by_vars_entry>
+{
+  static hashval_t hash (types_used_by_vars_entry *);
+  static bool equal (types_used_by_vars_entry *, types_used_by_vars_entry *);
+};
+
+/* Hash table making the relationship between a global variable
+   and the types it references in its initializer. The key of the
+   entry is a referenced type, and the value is the DECL of the global
+   variable. types_use_by_vars_do_hash and types_used_by_vars_eq below are
+   the hash and equality functions to use for this hash table.  */
+extern GTY(()) hash_table<used_type_hasher> *types_used_by_vars_hash;
+
+void types_used_by_var_decl_insert (tree type, tree var_decl);
+
+/* During parsing of a global variable, this vector contains the types
+   referenced by the global variable.  */
+extern GTY(()) vec<tree, va_gc> *types_used_by_cur_var_decl;
+
+
+/* Return the loop tree of FN.  */
+
+inline struct loops *
+loops_for_fn (struct function *fn)
+{
+  return fn->x_current_loops;
+}
+
+/* Set the loop tree of FN to LOOPS.  */
+
+inline void
+set_loops_for_fn (struct function *fn, struct loops *loops)
+{
+  gcc_checking_assert (fn->x_current_loops == NULL || loops == NULL);
+  fn->x_current_loops = loops;
+}
+
+/* For backward compatibility... eventually these should all go away.  */
+#define current_function_funcdef_no (cfun->funcdef_no)
+
+#define current_loops (cfun->x_current_loops)
+#define dom_computed (cfun->cfg->x_dom_computed)
+#define n_bbs_in_dom_tree (cfun->cfg->x_n_bbs_in_dom_tree)
+#define VALUE_HISTOGRAMS(fun) (fun)->value_histograms
+
+/* A pointer to a function to create target specific, per-function
+   data structures.  */
+extern struct machine_function * (*init_machine_status) (void);
+
+/* Structure to record the size of a sequence of arguments
+   as the sum of a tree-expression and a constant.  This structure is
+   also used to store offsets from the stack, which might be negative,
+   so the variable part must be ssizetype, not sizetype.  */
+
+struct args_size
+{
+  poly_int64_pod constant;
+  tree var;
+};
+
+/* Package up various arg related fields of struct args for
+   locate_and_pad_parm.  */
+struct locate_and_pad_arg_data
+{
+  /* Size of this argument on the stack, rounded up for any padding it
+     gets.  If REG_PARM_STACK_SPACE is defined, then register parms are
+     counted here, otherwise they aren't.  */
+  struct args_size size;
+  /* Offset of this argument from beginning of stack-args.  */
+  struct args_size offset;
+  /* Offset to the start of the stack slot.  Different from OFFSET
+     if this arg pads downward.  */
+  struct args_size slot_offset;
+  /* The amount that the stack pointer needs to be adjusted to
+     force alignment for the next argument.  */
+  struct args_size alignment_pad;
+  /* Which way we should pad this arg.  */
+  pad_direction where_pad;
+  /* slot_offset is at least this aligned.  */
+  unsigned int boundary;
+};
+
+/* Add the value of the tree INC to the `struct args_size' TO.  */
+
+#define ADD_PARM_SIZE(TO, INC)					\
+do {								\
+  tree inc = (INC);						\
+  if (tree_fits_shwi_p (inc))					\
+    (TO).constant += tree_to_shwi (inc);			\
+  else if ((TO).var == 0)					\
+    (TO).var = fold_convert (ssizetype, inc);			\
+  else								\
+    (TO).var = size_binop (PLUS_EXPR, (TO).var,			\
+			   fold_convert (ssizetype, inc));	\
+} while (0)
+
+#define SUB_PARM_SIZE(TO, DEC)					\
+do {								\
+  tree dec = (DEC);						\
+  if (tree_fits_shwi_p (dec))					\
+    (TO).constant -= tree_to_shwi (dec);			\
+  else if ((TO).var == 0)					\
+    (TO).var = size_binop (MINUS_EXPR, ssize_int (0),		\
+			   fold_convert (ssizetype, dec));	\
+  else								\
+    (TO).var = size_binop (MINUS_EXPR, (TO).var,		\
+			   fold_convert (ssizetype, dec));	\
+} while (0)
+
+/* Convert the implicit sum in a `struct args_size' into a tree
+   of type ssizetype.  */
+#define ARGS_SIZE_TREE(SIZE)					\
+((SIZE).var == 0 ? ssize_int ((SIZE).constant)			\
+ : size_binop (PLUS_EXPR, fold_convert (ssizetype, (SIZE).var),	\
+	       ssize_int ((SIZE).constant)))
+
+/* Convert the implicit sum in a `struct args_size' into an rtx.  */
+#define ARGS_SIZE_RTX(SIZE)					\
+((SIZE).var == 0 ? gen_int_mode ((SIZE).constant, Pmode)	\
+ : expand_normal (ARGS_SIZE_TREE (SIZE)))
+
+#define ASLK_REDUCE_ALIGN 1
+#define ASLK_RECORD_PAD 2
+
+/* If pointers to member functions use the least significant bit to
+   indicate whether a function is virtual, ensure a pointer
+   to this function will have that bit clear.  */
+#define MINIMUM_METHOD_BOUNDARY \
+  ((TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn)	     \
+   ? MAX (FUNCTION_BOUNDARY, 2 * BITS_PER_UNIT) : FUNCTION_BOUNDARY)
+
+enum stack_clash_probes {
+  NO_PROBE_NO_FRAME,
+  NO_PROBE_SMALL_FRAME,
+  PROBE_INLINE,
+  PROBE_LOOP
+};
+
+extern void dump_stack_clash_frame_info (enum stack_clash_probes, bool);
+
+
+extern void push_function_context (void);
+extern void pop_function_context (void);
+
+/* Save and restore status information for a nested function.  */
+extern void free_after_parsing (struct function *);
+extern void free_after_compilation (struct function *);
+
+/* Return size needed for stack frame based on slots so far allocated.
+   This size counts from zero.  It is not rounded to STACK_BOUNDARY;
+   the caller may have to do that.  */
+extern poly_int64 get_frame_size (void);
+
+/* Issue an error message and return TRUE if frame OFFSET overflows in
+   the signed target pointer arithmetics for function FUNC.  Otherwise
+   return FALSE.  */
+extern bool frame_offset_overflow (poly_int64, tree);
+
+extern unsigned int spill_slot_alignment (machine_mode);
+
+extern rtx assign_stack_local_1 (machine_mode, poly_int64, int, int);
+extern rtx assign_stack_local (machine_mode, poly_int64, int);
+extern rtx assign_stack_temp_for_type (machine_mode, poly_int64, tree);
+extern rtx assign_stack_temp (machine_mode, poly_int64);
+extern rtx assign_temp (tree, int, int);
+extern void update_temp_slot_address (rtx, rtx);
+extern void preserve_temp_slots (rtx);
+extern void free_temp_slots (void);
+extern void push_temp_slots (void);
+extern void pop_temp_slots (void);
+extern void init_temp_slots (void);
+extern rtx get_hard_reg_initial_reg (rtx);
+extern rtx get_hard_reg_initial_val (machine_mode, unsigned int);
+extern rtx has_hard_reg_initial_val (machine_mode, unsigned int);
+
+/* Called from gimple_expand_cfg.  */
+extern unsigned int emit_initial_value_sets (void);
+
+extern bool initial_value_entry (int i, rtx *, rtx *);
+extern void instantiate_decl_rtl (rtx x);
+extern int aggregate_value_p (const_tree, const_tree);
+extern bool use_register_for_decl (const_tree);
+extern gimple_seq gimplify_parameters (gimple_seq *);
+extern void locate_and_pad_parm (machine_mode, tree, int, int, int,
+				 tree, struct args_size *,
+				 struct locate_and_pad_arg_data *);
+extern void generate_setjmp_warnings (void);
+
+/* Identify BLOCKs referenced by more than one NOTE_INSN_BLOCK_{BEG,END},
+   and create duplicate blocks.  */
+extern void reorder_blocks (void);
+extern void clear_block_marks (tree);
+extern tree blocks_nreverse (tree);
+extern tree block_chainon (tree, tree);
+
+/* Set BLOCK_NUMBER for all the blocks in FN.  */
+extern void number_blocks (tree);
+
+/* cfun shouldn't be set directly; use one of these functions instead.  */
+extern void set_cfun (struct function *new_cfun, bool force = false);
+extern void push_cfun (struct function *new_cfun);
+extern void pop_cfun (void);
+
+extern int get_next_funcdef_no (void);
+extern int get_last_funcdef_no (void);
+extern void allocate_struct_function (tree, bool);
+extern void push_struct_function (tree fndecl);
+extern void push_dummy_function (bool);
+extern void pop_dummy_function (void);
+extern void init_dummy_function_start (void);
+extern void init_function_start (tree);
+extern void stack_protect_epilogue (void);
+extern void expand_function_start (tree);
+extern void expand_dummy_function_end (void);
+
+extern void thread_prologue_and_epilogue_insns (void);
+extern void diddle_return_value (void (*)(rtx, void*), void*);
+extern void clobber_return_register (void);
+extern void expand_function_end (void);
+extern rtx get_arg_pointer_save_area (void);
+extern void maybe_copy_prologue_epilogue_insn (rtx, rtx);
+extern int prologue_contains (const rtx_insn *);
+extern int epilogue_contains (const rtx_insn *);
+extern int prologue_epilogue_contains (const rtx_insn *);
+extern void record_prologue_seq (rtx_insn *);
+extern void record_epilogue_seq (rtx_insn *);
+extern void emit_return_into_block (bool simple_p, basic_block bb);
+extern void set_return_jump_label (rtx_insn *);
+extern bool active_insn_between (rtx_insn *head, rtx_insn *tail);
+extern vec<edge> convert_jumps_to_returns (basic_block last_bb, bool simple_p,
+					   vec<edge> unconverted);
+extern basic_block emit_return_for_exit (edge exit_fallthru_edge,
+					 bool simple_p);
+extern void reposition_prologue_and_epilogue_notes (void);
+
+/* Returns the name of the current function.  */
+extern const char *fndecl_name (tree);
+extern const char *function_name (struct function *);
+extern const char *current_function_name (void);
+
+extern void used_types_insert (tree);
+
+#endif  /* GCC_FUNCTION_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcc-plugin.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcc-plugin.h
new file mode 100644
index 0000000..d9e143e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcc-plugin.h
@@ -0,0 +1,47 @@
+/* Public header file for plugins to include.
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_PLUGIN_H
+#define GCC_PLUGIN_H
+
+#ifndef IN_GCC
+#define IN_GCC
+#endif
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "backend.h"
+#include "cfghooks.h"
+#include "hard-reg-set.h"
+#include "cfgrtl.h"
+#include "cfganal.h"
+#include "lcm.h"
+#include "cfgbuild.h"
+#include "cfgcleanup.h"
+#include "plugin-api.h"
+#include "ipa-ref.h"
+#include "alias.h"
+#include "flags.h"
+#include "tree-core.h"
+#include "fold-const.h"
+#include "tree-check.h"
+#include "plugin.h"
+
+#endif /* GCC_PLUGIN_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcc-rich-location.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcc-rich-location.h
new file mode 100644
index 0000000..de92e3b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcc-rich-location.h
@@ -0,0 +1,222 @@
+/* Declarations relating to class gcc_rich_location
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_RICH_LOCATION_H
+#define GCC_RICH_LOCATION_H
+
+/* A gcc_rich_location is libcpp's rich_location with additional
+   helper methods for working with gcc's types.  */
+class gcc_rich_location : public rich_location
+{
+ public:
+  /* Constructors.  */
+
+  /* Constructing from a location.  */
+  gcc_rich_location (location_t loc, const range_label *label = NULL)
+  : rich_location (line_table, loc, label)
+  {
+  }
+
+  /* Methods for adding ranges via gcc entities.  */
+  void
+  add_expr (tree expr, range_label *label);
+
+  void
+  maybe_add_expr (tree t, range_label *label);
+
+  void add_fixit_misspelled_id (location_t misspelled_token_loc,
+				tree hint_id);
+
+  /* If LOC is within the spans of lines that will already be printed for
+     this gcc_rich_location, then add it as a secondary location
+     and return true.
+
+     Otherwise return false.
+
+     This allows for a diagnostic to compactly print secondary locations
+     in one diagnostic when these are near enough the primary locations for
+     diagnostics-show-locus.c to cope with them, and to fall back to
+     printing them via a note otherwise e.g.:
+
+	gcc_rich_location richloc (primary_loc);
+	bool added secondary = richloc.add_location_if_nearby (secondary_loc);
+	error_at (&richloc, "main message");
+	if (!added secondary)
+	  inform (secondary_loc, "message for secondary");
+
+     Implemented in diagnostic-show-locus.c.  */
+
+  bool add_location_if_nearby (location_t loc);
+
+  /* Add a fix-it hint suggesting the insertion of CONTENT before
+     INSERTION_POINT.
+
+     Attempt to handle formatting: if INSERTION_POINT is the first thing on
+     its line, and INDENT is sufficiently sane, then add CONTENT on its own
+     line, using the indentation of INDENT.
+     Otherwise, add CONTENT directly before INSERTION_POINT.
+
+     For example, adding "CONTENT;" with the closing brace as the insertion
+     point and using "INDENT;" for indentation:
+
+       if ()
+         {
+           INDENT;
+         }
+
+     would lead to:
+
+       if ()
+         {
+           INDENT;
+           CONTENT;
+         }
+
+     but adding it to:
+
+       if () {INDENT;}
+
+     would lead to:
+
+       if () {INDENT;CONTENT;}
+  */
+  void add_fixit_insert_formatted (const char *content,
+				   location_t insertion_point,
+				   location_t indent);
+};
+
+/* Concrete subclass of libcpp's range_label.
+   Simple implementation using a string literal.  */
+
+class text_range_label : public range_label
+{
+ public:
+  text_range_label (const char *text) : m_text (text) {}
+
+  label_text get_text (unsigned /*range_idx*/) const FINAL OVERRIDE
+  {
+    return label_text (const_cast <char *> (m_text), false);
+  }
+
+ private:
+  const char *m_text;
+};
+
+/* Concrete subclass of libcpp's range_label for use in
+   diagnostics involving mismatched types.
+
+   Each frontend that uses this should supply its own implementation.
+
+   Generate a label describing LABELLED_TYPE.  The frontend may use
+   OTHER_TYPE where appropriate for highlighting the differences between
+   the two types (analogous to C++'s use of %H and %I with
+   template types).
+
+   Either or both of LABELLED_TYPE and OTHER_TYPE may be NULL_TREE.
+   If LABELLED_TYPE is NULL_TREE, then there is no label.
+
+   For example, this rich_location could use two instances of
+   range_label_for_type_mismatch:
+
+      printf ("arg0: %i  arg1: %s arg2: %i",
+                               ^~
+                               |
+                               const char *
+              100, 101, 102);
+                   ~~~
+                   |
+                   int
+
+   (a) the label for "%s" with LABELLED_TYPE for "const char*" and
+   (b) the label for "101" with LABELLED TYPE for "int"
+   where each one uses the other's type as OTHER_TYPE.  */
+
+class range_label_for_type_mismatch : public range_label
+{
+ public:
+  range_label_for_type_mismatch (tree labelled_type, tree other_type)
+  : m_labelled_type (labelled_type), m_other_type (other_type)
+  {
+  }
+
+  label_text get_text (unsigned range_idx) const OVERRIDE;
+
+ protected:
+  tree m_labelled_type;
+  tree m_other_type;
+};
+
+/* Subclass of range_label for labelling the type of EXPR when reporting
+   a type mismatch between EXPR and OTHER_EXPR.
+   Either or both of EXPR and OTHER_EXPR could be NULL.  */
+
+class maybe_range_label_for_tree_type_mismatch : public range_label
+{
+ public:
+  maybe_range_label_for_tree_type_mismatch (tree expr, tree other_expr)
+  : m_expr (expr), m_other_expr (other_expr)
+  {
+  }
+
+  label_text get_text (unsigned range_idx) const FINAL OVERRIDE;
+
+ private:
+  tree m_expr;
+  tree m_other_expr;
+};
+
+struct op_location_t;
+
+/* A subclass of rich_location for showing problems with binary operations.
+
+   If enough location information is available, the ctor will make a
+   3-location rich_location of the form:
+
+     arg_0 op arg_1
+     ~~~~~ ^~ ~~~~~
+       |        |
+       |        arg1 type
+       arg0 type
+
+   labelling the types of the arguments if SHOW_TYPES is true.
+
+   Otherwise, it will fall back to a 1-location rich_location using the
+   compound location within LOC:
+
+     arg_0 op arg_1
+     ~~~~~~^~~~~~~~
+
+   for which we can't label the types.  */
+
+class binary_op_rich_location : public gcc_rich_location
+{
+ public:
+  binary_op_rich_location (const op_location_t &loc,
+			   tree arg0, tree arg1,
+			   bool show_types);
+
+ private:
+  static bool use_operator_loc_p (const op_location_t &loc,
+				  tree arg0, tree arg1);
+
+  maybe_range_label_for_tree_type_mismatch m_label_for_arg0;
+  maybe_range_label_for_tree_type_mismatch m_label_for_arg1;
+};
+
+#endif /* GCC_RICH_LOCATION_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcc-symtab.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcc-symtab.h
new file mode 100644
index 0000000..4bd3d2b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcc-symtab.h
@@ -0,0 +1,28 @@
+/* Declarations for symtab.c.
+   FIXME - This file should be named symtab.h, but that name conflicts
+           with libcpp's symtab.h.
+
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SYMTAB_H
+#define GCC_SYMTAB_H
+
+extern void change_decl_assembler_name (tree, tree);
+
+#endif  // GCC_SYMTAB_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcc.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcc.h
new file mode 100644
index 0000000..a0a1d94
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcc.h
@@ -0,0 +1,99 @@
+/* Header file for modules that link with gcc.c
+   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GCC_H
+#define GCC_GCC_H
+
+#include "version.h"
+#include "diagnostic-core.h"
+
+/* The top-level "main" within the driver would be ~1000 lines long.
+   This class breaks it up into smaller functions and contains some
+   state shared by them.  */
+
+class driver
+{
+ public:
+  driver (bool can_finalize, bool debug);
+  ~driver ();
+  int main (int argc, char **argv);
+  void finalize ();
+
+ private:
+  void set_progname (const char *argv0) const;
+  void expand_at_files (int *argc, char ***argv) const;
+  void decode_argv (int argc, const char **argv);
+  void global_initializations ();
+  void build_multilib_strings () const;
+  void set_up_specs () const;
+  void putenv_COLLECT_GCC (const char *argv0) const;
+  void maybe_putenv_COLLECT_LTO_WRAPPER () const;
+  void maybe_putenv_OFFLOAD_TARGETS () const;
+  void handle_unrecognized_options ();
+  int maybe_print_and_exit () const;
+  bool prepare_infiles ();
+  void do_spec_on_infiles () const;
+  void maybe_run_linker (const char *argv0) const;
+  void final_actions () const;
+  int get_exit_code () const;
+
+ private:
+  char *explicit_link_files;
+  struct cl_decoded_option *decoded_options;
+  unsigned int decoded_options_count;
+  option_proposer m_option_proposer;
+};
+
+/* The mapping of a spec function name to the C function that
+   implements it.  */
+struct spec_function
+{
+  const char *name;
+  const char *(*func) (int, const char **);
+};
+
+/* These are exported by gcc.c.  */
+extern int do_spec (const char *);
+extern void record_temp_file (const char *, int, int);
+extern void set_input (const char *);
+
+/* Spec files linked with gcc.c must provide definitions for these.  */
+
+/* Called before processing to change/add/remove arguments.  */
+extern void lang_specific_driver (struct cl_decoded_option **,
+				  unsigned int *, int *);
+
+/* Called before linking.  Returns 0 on success and -1 on failure.  */
+extern int lang_specific_pre_link (void);
+
+extern int n_infiles;
+
+/* Number of extra output files that lang_specific_pre_link may generate.  */
+extern int lang_specific_extra_outfiles;
+
+/* A vector of corresponding output files is made up later.  */
+
+extern const char **outfiles;
+
+extern void
+driver_get_configure_time_options (void (*cb)(const char *option,
+					      void *user_data),
+				   void *user_data);
+
+#endif /* ! GCC_GCC_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcov-counter.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcov-counter.def
new file mode 100644
index 0000000..3a0e620
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcov-counter.def
@@ -0,0 +1,54 @@
+/* Definitions for the gcov counters in the GNU compiler.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Before including this file, define a macro:
+
+     DEF_GCOV_COUNTER(COUNTER, NAME, FN_TYPE)
+
+   This macro will be expanded to all supported gcov counters, their
+   names, or the type of handler functions.  FN_TYPE will be
+   expanded to a handler function, like in gcov_merge, it is
+   expanded to __gcov_merge ## FN_TYPE.  */
+
+/* Arc transitions.  */
+DEF_GCOV_COUNTER(GCOV_COUNTER_ARCS, "arcs", _add)
+
+/* Histogram of value inside an interval.  */
+DEF_GCOV_COUNTER(GCOV_COUNTER_V_INTERVAL, "interval", _add)
+
+/* Histogram of exact power2 logarithm of a value.  */
+DEF_GCOV_COUNTER(GCOV_COUNTER_V_POW2, "pow2", _add)
+
+/* The most common value of expression.  */
+DEF_GCOV_COUNTER(GCOV_COUNTER_V_SINGLE, "single", _single)
+
+/* The most common indirect address.  */
+DEF_GCOV_COUNTER(GCOV_COUNTER_V_INDIR, "indirect_call", _single)
+
+/* Compute average value passed to the counter.  */
+DEF_GCOV_COUNTER(GCOV_COUNTER_AVERAGE, "average", _add)
+
+/* IOR of the all values passed to counter.  */
+DEF_GCOV_COUNTER(GCOV_COUNTER_IOR, "ior", _ior)
+
+/* Time profile collecting first run of a function */
+DEF_GCOV_COUNTER(GCOV_TIME_PROFILER, "time_profiler", _time_profile)
+
+/* Top N value tracking for indirect calls.  */
+DEF_GCOV_COUNTER(GCOV_COUNTER_ICALL_TOPNV, "indirect_call_topn", _icall_topn)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcov-io.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcov-io.h
new file mode 100644
index 0000000..9edb292
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcov-io.h
@@ -0,0 +1,362 @@
+/* File format for coverage information
+   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+   Contributed by Bob Manson <manson@cygnus.com>.
+   Completely remangled by Nathan Sidwell <nathan@codesourcery.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+
+/* Coverage information is held in two files.  A notes file, which is
+   generated by the compiler, and a data file, which is generated by
+   the program under test.  Both files use a similar structure.  We do
+   not attempt to make these files backwards compatible with previous
+   versions, as you only need coverage information when developing a
+   program.  We do hold version information, so that mismatches can be
+   detected, and we use a format that allows tools to skip information
+   they do not understand or are not interested in.
+
+   Numbers are recorded in the 32 bit unsigned binary form of the
+   endianness of the machine generating the file. 64 bit numbers are
+   stored as two 32 bit numbers, the low part first.  Strings are
+   padded with 1 to 4 NUL bytes, to bring the length up to a multiple
+   of 4. The number of 4 bytes is stored, followed by the padded
+   string. Zero length and NULL strings are simply stored as a length
+   of zero (they have no trailing NUL or padding).
+
+   	int32:  byte3 byte2 byte1 byte0 | byte0 byte1 byte2 byte3
+	int64:  int32:low int32:high
+	string: int32:0 | int32:length char* char:0 padding
+	padding: | char:0 | char:0 char:0 | char:0 char:0 char:0
+	item: int32 | int64 | string
+
+   The basic format of the notes file is
+
+	file : int32:magic int32:version int32:stamp int32:support_unexecuted_blocks record*
+
+   The basic format of the data file is
+
+   	file : int32:magic int32:version int32:stamp record*
+
+   The magic ident is different for the notes and the data files.  The
+   magic ident is used to determine the endianness of the file, when
+   reading.  The version is the same for both files and is derived
+   from gcc's version number. The stamp value is used to synchronize
+   note and data files and to synchronize merging within a data
+   file. It need not be an absolute time stamp, merely a ticker that
+   increments fast enough and cycles slow enough to distinguish
+   different compile/run/compile cycles.
+
+   Although the ident and version are formally 32 bit numbers, they
+   are derived from 4 character ASCII strings.  The version number
+   consists of a two character major version number
+   (first digit starts from 'A' letter to not to clash with the older
+   numbering scheme), the single character minor version number,
+   and a single character indicating the status of the release.
+   That will be 'e' experimental, 'p' prerelease and 'r' for release.
+   Because, by good fortune, these are in alphabetical order, string
+   collating can be used to compare version strings.  Be aware that
+   the 'e' designation will (naturally) be unstable and might be
+   incompatible with itself.  For gcc 17.0 experimental, it would be
+   'B70e' (0x42373065).  As we currently do not release more than 5 minor
+   releases, the single character should be always fine.  Major number
+   is currently changed roughly every year, which gives us space
+   for next 250 years (maximum allowed number would be 259.9).
+
+   A record has a tag, length and variable amount of data.
+
+   	record: header data
+	header: int32:tag int32:length
+	data: item*
+
+   Records are not nested, but there is a record hierarchy.  Tag
+   numbers reflect this hierarchy.  Tags are unique across note and
+   data files.  Some record types have a varying amount of data.  The
+   LENGTH is the number of 4bytes that follow and is usually used to
+   determine how much data.  The tag value is split into 4 8-bit
+   fields, one for each of four possible levels.  The most significant
+   is allocated first.  Unused levels are zero.  Active levels are
+   odd-valued, so that the LSB of the level is one.  A sub-level
+   incorporates the values of its superlevels.  This formatting allows
+   you to determine the tag hierarchy, without understanding the tags
+   themselves, and is similar to the standard section numbering used
+   in technical documents.  Level values [1..3f] are used for common
+   tags, values [41..9f] for the notes file and [a1..ff] for the data
+   file.
+
+   The notes file contains the following records
+   	note: unit function-graph*
+	unit: header int32:checksum string:source
+	function-graph: announce_function basic_blocks {arcs | lines}*
+	announce_function: header int32:ident
+		int32:lineno_checksum int32:cfg_checksum
+		string:name string:source int32:start_lineno int32:start_column int32:end_lineno
+	basic_block: header int32:flags*
+	arcs: header int32:block_no arc*
+	arc:  int32:dest_block int32:flags
+        lines: header int32:block_no line*
+               int32:0 string:NULL
+	line:  int32:line_no | int32:0 string:filename
+
+   The BASIC_BLOCK record holds per-bb flags.  The number of blocks
+   can be inferred from its data length.  There is one ARCS record per
+   basic block.  The number of arcs from a bb is implicit from the
+   data length.  It enumerates the destination bb and per-arc flags.
+   There is one LINES record per basic block, it enumerates the source
+   lines which belong to that basic block.  Source file names are
+   introduced by a line number of 0, following lines are from the new
+   source file.  The initial source file for the function is NULL, but
+   the current source file should be remembered from one LINES record
+   to the next.  The end of a block is indicated by an empty filename
+   - this does not reset the current source file.  Note there is no
+   ordering of the ARCS and LINES records: they may be in any order,
+   interleaved in any manner.  The current filename follows the order
+   the LINES records are stored in the file, *not* the ordering of the
+   blocks they are for.
+
+   The data file contains the following records.
+	data: {unit summary:object function-data*}*
+	unit: header int32:checksum
+	function-data:	announce_function present counts
+	announce_function: header int32:ident
+		int32:lineno_checksum int32:cfg_checksum
+	present: header int32:present
+	counts: header int64:count*
+	summary: int32:checksum int32:runs int32:sum_max
+
+   The ANNOUNCE_FUNCTION record is the same as that in the note file,
+   but without the source location.  The COUNTS gives the
+   counter values for instrumented features.  The about the whole
+   program.  The checksum is used for whole program summaries, and
+   disambiguates different programs which include the same
+   instrumented object file.  There may be several program summaries,
+   each with a unique checksum.  The object summary's checksum is
+   zero.  Note that the data file might contain information from
+   several runs concatenated, or the data might be merged.
+
+   This file is included by both the compiler, gcov tools and the
+   runtime support library libgcov. IN_LIBGCOV and IN_GCOV are used to
+   distinguish which case is which.  If IN_LIBGCOV is nonzero,
+   libgcov is being built. If IN_GCOV is nonzero, the gcov tools are
+   being built. Otherwise the compiler is being built. IN_GCOV may be
+   positive or negative. If positive, we are compiling a tool that
+   requires additional functions (see the code for knowledge of what
+   those functions are).  */
+
+#ifndef GCC_GCOV_IO_H
+#define GCC_GCOV_IO_H
+
+#ifndef IN_LIBGCOV
+/* About the host */
+
+typedef unsigned gcov_unsigned_t;
+typedef unsigned gcov_position_t;
+/* gcov_type is typedef'd elsewhere for the compiler */
+#if IN_GCOV
+#define GCOV_LINKAGE static
+typedef int64_t gcov_type;
+typedef uint64_t gcov_type_unsigned;
+#if IN_GCOV > 0
+#include <sys/types.h>
+#endif
+#endif
+
+#if defined (HOST_HAS_F_SETLKW)
+#define GCOV_LOCKED 1
+#else
+#define GCOV_LOCKED 0
+#endif
+
+#define ATTRIBUTE_HIDDEN
+
+#endif /* !IN_LIBGCOV */
+
+#ifndef GCOV_LINKAGE
+#define GCOV_LINKAGE extern
+#endif
+
+#if IN_LIBGCOV
+#define gcov_nonruntime_assert(EXPR) ((void)(0 && (EXPR)))
+#else
+#define gcov_nonruntime_assert(EXPR) gcc_assert (EXPR)
+#define gcov_error(...) fatal_error (input_location, __VA_ARGS__)
+#endif
+
+/* File suffixes.  */
+#define GCOV_DATA_SUFFIX ".gcda"
+#define GCOV_NOTE_SUFFIX ".gcno"
+
+/* File magic. Must not be palindromes.  */
+#define GCOV_DATA_MAGIC ((gcov_unsigned_t)0x67636461) /* "gcda" */
+#define GCOV_NOTE_MAGIC ((gcov_unsigned_t)0x67636e6f) /* "gcno" */
+
+/* gcov-iov.h is automatically generated by the makefile from
+   version.c, it looks like
+   	#define GCOV_VERSION ((gcov_unsigned_t)0x89abcdef)
+*/
+#include "gcov-iov.h"
+
+/* Convert a magic or version number to a 4 character string.  */
+#define GCOV_UNSIGNED2STRING(ARRAY,VALUE)	\
+  ((ARRAY)[0] = (char)((VALUE) >> 24),		\
+   (ARRAY)[1] = (char)((VALUE) >> 16),		\
+   (ARRAY)[2] = (char)((VALUE) >> 8),		\
+   (ARRAY)[3] = (char)((VALUE) >> 0))
+
+/* The record tags.  Values [1..3f] are for tags which may be in either
+   file.  Values [41..9f] for those in the note file and [a1..ff] for
+   the data file.  The tag value zero is used as an explicit end of
+   file marker -- it is not required to be present.  */
+
+#define GCOV_TAG_FUNCTION	 ((gcov_unsigned_t)0x01000000)
+#define GCOV_TAG_FUNCTION_LENGTH (3)
+#define GCOV_TAG_BLOCKS		 ((gcov_unsigned_t)0x01410000)
+#define GCOV_TAG_BLOCKS_LENGTH(NUM) (NUM)
+#define GCOV_TAG_ARCS		 ((gcov_unsigned_t)0x01430000)
+#define GCOV_TAG_ARCS_LENGTH(NUM)  (1 + (NUM) * 2)
+#define GCOV_TAG_ARCS_NUM(LENGTH)  (((LENGTH) - 1) / 2)
+#define GCOV_TAG_LINES		 ((gcov_unsigned_t)0x01450000)
+#define GCOV_TAG_COUNTER_BASE 	 ((gcov_unsigned_t)0x01a10000)
+#define GCOV_TAG_COUNTER_LENGTH(NUM) ((NUM) * 2)
+#define GCOV_TAG_COUNTER_NUM(LENGTH) ((LENGTH) / 2)
+#define GCOV_TAG_OBJECT_SUMMARY  ((gcov_unsigned_t)0xa1000000)
+#define GCOV_TAG_PROGRAM_SUMMARY ((gcov_unsigned_t)0xa3000000) /* Obsolete */
+#define GCOV_TAG_SUMMARY_LENGTH (2)
+#define GCOV_TAG_AFDO_FILE_NAMES ((gcov_unsigned_t)0xaa000000)
+#define GCOV_TAG_AFDO_FUNCTION ((gcov_unsigned_t)0xac000000)
+#define GCOV_TAG_AFDO_WORKING_SET ((gcov_unsigned_t)0xaf000000)
+
+
+/* Counters that are collected.  */
+
+#define DEF_GCOV_COUNTER(COUNTER, NAME, MERGE_FN) COUNTER,
+enum {
+#include "gcov-counter.def"
+GCOV_COUNTERS
+};
+#undef DEF_GCOV_COUNTER
+
+/* The first of counters used for value profiling.  They must form a
+   consecutive interval and their order must match the order of
+   HIST_TYPEs in value-prof.h.  */
+#define GCOV_FIRST_VALUE_COUNTER GCOV_COUNTER_V_INTERVAL
+
+/* The last of counters used for value profiling.  */
+#define GCOV_LAST_VALUE_COUNTER (GCOV_COUNTERS - 1)
+
+/* Number of counters used for value profiling.  */
+#define GCOV_N_VALUE_COUNTERS \
+  (GCOV_LAST_VALUE_COUNTER - GCOV_FIRST_VALUE_COUNTER + 1)
+
+/* The number of hottest callees to be tracked.  */
+#define GCOV_ICALL_TOPN_VAL  2
+
+/* The number of counter entries per icall callsite.  */
+#define GCOV_ICALL_TOPN_NCOUNTS (1 + GCOV_ICALL_TOPN_VAL * 4)
+
+/* Convert a counter index to a tag.  */
+#define GCOV_TAG_FOR_COUNTER(COUNT)				\
+	(GCOV_TAG_COUNTER_BASE + ((gcov_unsigned_t)(COUNT) << 17))
+/* Convert a tag to a counter.  */
+#define GCOV_COUNTER_FOR_TAG(TAG)					\
+	((unsigned)(((TAG) - GCOV_TAG_COUNTER_BASE) >> 17))
+/* Check whether a tag is a counter tag.  */
+#define GCOV_TAG_IS_COUNTER(TAG)				\
+	(!((TAG) & 0xFFFF) && GCOV_COUNTER_FOR_TAG (TAG) < GCOV_COUNTERS)
+
+/* The tag level mask has 1's in the position of the inner levels, &
+   the lsb of the current level, and zero on the current and outer
+   levels.  */
+#define GCOV_TAG_MASK(TAG) (((TAG) - 1) ^ (TAG))
+
+/* Return nonzero if SUB is an immediate subtag of TAG.  */
+#define GCOV_TAG_IS_SUBTAG(TAG,SUB)				\
+	(GCOV_TAG_MASK (TAG) >> 8 == GCOV_TAG_MASK (SUB) 	\
+	 && !(((SUB) ^ (TAG)) & ~GCOV_TAG_MASK (TAG)))
+
+/* Return nonzero if SUB is at a sublevel to TAG.  */
+#define GCOV_TAG_IS_SUBLEVEL(TAG,SUB)				\
+     	(GCOV_TAG_MASK (TAG) > GCOV_TAG_MASK (SUB))
+
+/* Basic block flags.  */
+#define GCOV_BLOCK_UNEXPECTED	(1 << 1)
+
+/* Arc flags.  */
+#define GCOV_ARC_ON_TREE 	(1 << 0)
+#define GCOV_ARC_FAKE		(1 << 1)
+#define GCOV_ARC_FALLTHROUGH	(1 << 2)
+
+/* Object & program summary record.  */
+
+struct gcov_summary
+{
+  gcov_unsigned_t runs;		/* Number of program runs.  */
+  gcov_type sum_max;    	/* Sum of individual run max values.  */
+};
+
+#if !defined(inhibit_libc)
+
+/* Functions for reading and writing gcov files. In libgcov you can
+   open the file for reading then writing. Elsewhere you can open the
+   file either for reading or for writing. When reading a file you may
+   use the gcov_read_* functions, gcov_sync, gcov_position, &
+   gcov_error. When writing a file you may use the gcov_write
+   functions, gcov_seek & gcov_error. When a file is to be rewritten
+   you use the functions for reading, then gcov_rewrite then the
+   functions for writing.  Your file may become corrupted if you break
+   these invariants.  */
+
+#if !IN_LIBGCOV
+GCOV_LINKAGE int gcov_open (const char */*name*/, int /*direction*/);
+GCOV_LINKAGE int gcov_magic (gcov_unsigned_t, gcov_unsigned_t);
+#endif
+
+/* Available everywhere.  */
+GCOV_LINKAGE int gcov_close (void) ATTRIBUTE_HIDDEN;
+GCOV_LINKAGE gcov_unsigned_t gcov_read_unsigned (void) ATTRIBUTE_HIDDEN;
+GCOV_LINKAGE gcov_type gcov_read_counter (void) ATTRIBUTE_HIDDEN;
+GCOV_LINKAGE void gcov_read_summary (struct gcov_summary *) ATTRIBUTE_HIDDEN;
+GCOV_LINKAGE const char *gcov_read_string (void);
+GCOV_LINKAGE void gcov_sync (gcov_position_t /*base*/,
+			     gcov_unsigned_t /*length */);
+char *mangle_path (char const *base);
+
+#if !IN_GCOV
+/* Available outside gcov */
+GCOV_LINKAGE void gcov_write_unsigned (gcov_unsigned_t) ATTRIBUTE_HIDDEN;
+#endif
+
+#if !IN_GCOV && !IN_LIBGCOV
+/* Available only in compiler */
+GCOV_LINKAGE void gcov_write_string (const char *);
+GCOV_LINKAGE void gcov_write_filename (const char *);
+GCOV_LINKAGE gcov_position_t gcov_write_tag (gcov_unsigned_t);
+GCOV_LINKAGE void gcov_write_length (gcov_position_t /*position*/);
+#endif
+
+#if IN_GCOV > 0
+/* Available in gcov */
+GCOV_LINKAGE time_t gcov_time (void);
+#endif
+
+#endif /* !inhibit_libc  */
+
+#endif /* GCC_GCOV_IO_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcse-common.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcse-common.h
new file mode 100644
index 0000000..b44c2d4
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcse-common.h
@@ -0,0 +1,47 @@
+/* Structures and prototypes common across the normal GCSE
+   implementation and the post-reload implementation.
+   Copyright (C) 1997-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GCSE_COMMON_H
+#define GCC_GCSE_COMMON_H
+
+typedef vec<rtx_insn *> vec_rtx_heap;
+struct modify_pair
+{
+  rtx dest;                     /* A MEM.  */
+  rtx dest_addr;                /* The canonical address of `dest'.  */
+};
+
+typedef vec<modify_pair> vec_modify_pair_heap;
+
+struct gcse_note_stores_info
+{
+  rtx_insn *insn;
+  vec<modify_pair> *canon_mem_list;
+};
+
+extern void compute_transp (const_rtx, int, sbitmap *, bitmap,
+			    bitmap, vec<modify_pair> *);
+extern void record_last_mem_set_info_common (rtx_insn *,
+					     vec<rtx_insn *> *,
+					     vec<modify_pair> *,
+					     bitmap, bitmap);
+
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcse.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcse.h
new file mode 100644
index 0000000..5371873
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gcse.h
@@ -0,0 +1,45 @@
+/* Global common subexpression elimination/Partial redundancy elimination
+   and global constant/copy propagation for GNU compiler.
+   Copyright (C) 1997-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GCSE_H
+#define GCC_GCSE_H
+
+/* Target-dependent globals.  */
+struct target_gcse {
+  /* Nonzero for each mode that supports (set (reg) (reg)).
+     This is trivially true for integer and floating point values.
+     It may or may not be true for condition codes.  */
+  char x_can_copy[(int) NUM_MACHINE_MODES];
+
+  /* True if the previous field has been initialized.  */
+  bool x_can_copy_init_p;
+};
+
+extern struct target_gcse default_target_gcse;
+#if SWITCHABLE_TARGET
+extern struct target_gcse *this_target_gcse;
+#else
+#define this_target_gcse (&default_target_gcse)
+#endif
+
+void gcse_c_finalize (void);
+extern bool gcse_or_cprop_is_too_expensive (const char *);
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/generic-match.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/generic-match.h
new file mode 100644
index 0000000..a1e5e2b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/generic-match.h
@@ -0,0 +1,33 @@
+/* Generic simplify definitions.
+
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Contributed by Richard Guenther <rguenther@suse.de>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GENERIC_MATCH_H
+#define GCC_GENERIC_MATCH_H
+
+/* Note the following functions are supposed to be only used from
+   fold_unary_loc, fold_binary_loc and fold_ternary_loc respectively.
+   They are not considered a public API.  */
+
+tree generic_simplify (location_t, enum tree_code, tree, tree);
+tree generic_simplify (location_t, enum tree_code, tree, tree, tree);
+tree generic_simplify (location_t, enum tree_code, tree, tree, tree, tree);
+
+#endif  /* GCC_GENERIC_MATCH_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gengtype.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gengtype.h
new file mode 100644
index 0000000..02be0c1
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gengtype.h
@@ -0,0 +1,510 @@
+/* Process source files and output type information.
+   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it under
+   the terms of the GNU General Public License as published by the Free
+   Software Foundation; either version 3, or (at your option) any later
+   version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or
+   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+   for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GENGTYPE_H
+#define GCC_GENGTYPE_H
+
+#define obstack_chunk_alloc    xmalloc
+#define obstack_chunk_free     free
+#define OBSTACK_CHUNK_SIZE     0
+
+/* Sets of accepted source languages like C, C++, Ada... are
+   represented by a bitmap.  */
+typedef unsigned lang_bitmap;
+
+/* Variable length structure representing an input file.  A hash table
+   ensure uniqueness for a given input file name.  The only function
+   allocating input_file-s is input_file_by_name.  */
+struct input_file_st 
+{
+  struct outf* inpoutf;  /* Cached corresponding output file, computed
+                            in get_output_file_with_visibility.  */
+  lang_bitmap inpbitmap; /* The set of languages using this file.  */
+  bool inpisplugin;      /* Flag set for plugin input files.  */
+  char inpname[1];       /* A variable-length array, ended by a null
+                            char.  */
+};
+typedef struct input_file_st input_file;
+
+/* A file position, mostly for error messages.
+   The FILE element may be compared using pointer equality.  */
+struct fileloc
+{
+  const input_file *file;
+  int line;
+};
+
+
+/* Table of all input files and its size.  */
+extern const input_file** gt_files;
+extern size_t num_gt_files;
+
+/* A number of places use the name of this "gengtype.c" file for a
+   location for things that we can't rely on the source to define.  We
+   also need to refer to the "system.h" file specifically.  These two
+   pointers are initialized early in main.  */
+extern input_file* this_file;
+extern input_file* system_h_file;
+
+/* Retrieve or create the input_file for a given name, which is a file
+   path.  This is the only function allocating input_file-s and it is
+   hash-consing them.  */
+input_file* input_file_by_name (const char* name);
+
+/* For F an input_file, return the relative path to F from $(srcdir)
+   if the latter is a prefix in F, NULL otherwise.  */
+const char *get_file_srcdir_relative_path (const input_file *inpf);
+
+/* Get the name of an input file.  */
+static inline const char*
+get_input_file_name (const input_file *inpf)
+{
+  if (inpf)
+      return inpf->inpname;
+  return NULL;
+}
+
+/* Return a bitmap which has bit `1 << BASE_FILE_<lang>' set iff
+   INPUT_FILE is used by <lang>.
+
+   This function should be written to assume that a file _is_ used
+   if the situation is unclear.  If it wrongly assumes a file _is_ used,
+   a linker error will result.  If it wrongly assumes a file _is not_ used,
+   some GC roots may be missed, which is a much harder-to-debug problem.
+  */
+
+static inline lang_bitmap
+get_lang_bitmap (const input_file* inpf)
+{
+  if (inpf == NULL)
+    return 0;
+  return inpf->inpbitmap;
+}
+
+/* Set the bitmap returned by get_lang_bitmap.  The only legitimate
+   callers of this function are read_input_list & read_state_*.  */
+static inline void
+set_lang_bitmap (input_file* inpf, lang_bitmap n)
+{
+  gcc_assert (inpf);
+  inpf->inpbitmap = n;
+}
+
+/* Vector of per-language directories.  */
+extern const char **lang_dir_names;
+extern size_t num_lang_dirs;
+
+/* Data types handed around within, but opaque to, the lexer and parser.  */
+typedef struct pair *pair_p;
+typedef struct type *type_p;
+typedef const struct type *const_type_p;
+typedef struct options *options_p;
+
+/* Variables used to communicate between the lexer and the parser.  */
+extern int lexer_toplevel_done;
+extern struct fileloc lexer_line;
+
+/* Various things, organized as linked lists, needed both in
+   gengtype.c & in gengtype-state.c files.  */
+extern pair_p typedefs;
+extern type_p structures;
+extern pair_p variables;
+
+/* An enum for distinguishing GGC vs PCH.  */
+
+enum write_types_kinds
+{
+  WTK_GGC,
+  WTK_PCH,
+
+  NUM_WTK
+};
+
+/* Discrimating kind of types we can understand.  */
+
+enum typekind {
+  TYPE_NONE=0,          /* Never used, so zeroed memory is invalid.  */
+  TYPE_UNDEFINED,	/* We have not yet seen a definition for this type.
+			   If a type is still undefined when generating code,
+			   an error will be generated.  */
+  TYPE_SCALAR,          /* Scalar types like char.  */
+  TYPE_STRING,          /* The string type.  */
+  TYPE_STRUCT,          /* Type for GTY-ed structs.  */
+  TYPE_UNION,           /* Type for GTY-ed discriminated unions.  */
+  TYPE_POINTER,         /* Pointer type to GTY-ed type.  */
+  TYPE_ARRAY,           /* Array of GTY-ed types.  */
+  TYPE_LANG_STRUCT,     /* GCC front-end language specific structs.
+                           Various languages may have homonymous but
+                           different structs.  */
+  TYPE_USER_STRUCT	/* User defined type.  Walkers and markers for
+			   this type are assumed to be provided by the
+			   user.  */
+};
+
+/* Discriminating kind for options.  */
+enum option_kind {
+  OPTION_NONE=0,        /* Never used, so zeroed memory is invalid.  */
+  OPTION_STRING,        /* A string-valued option.  Most options are
+                           strings.  */
+  OPTION_TYPE,          /* A type-valued option.  */
+  OPTION_NESTED         /* Option data for 'nested_ptr'.  */
+};
+
+
+/* A way to pass data through to the output end.  */
+struct options {
+  struct options *next;         /* next option of the same pair.  */
+  const char *name;             /* GTY option name.  */
+  enum option_kind kind;        /* discriminating option kind.  */
+  union {
+    const char* string;                    /* When OPTION_STRING.  */
+    type_p type;                           /* When OPTION_TYPE.  */
+    struct nested_ptr_data* nested;        /* when OPTION_NESTED.  */
+  } info;
+};
+
+
+/* Option data for the 'nested_ptr' option.  */
+struct nested_ptr_data {
+  type_p type;
+  const char *convert_to;
+  const char *convert_from;
+};
+
+/* Some functions to create various options structures with name NAME
+   and info INFO.  NEXT is the next option in the chain.  */
+
+/* Create a string option.  */
+options_p create_string_option (options_p next, const char* name,
+                                const char* info);
+
+/* Create a type option.  */
+options_p create_type_option (options_p next, const char* name,
+                              type_p info);
+
+/* Create a nested option.  */
+options_p create_nested_option (options_p next, const char* name,
+				struct nested_ptr_data* info);
+
+/* Create a nested pointer option.  */
+options_p create_nested_ptr_option (options_p next, type_p t,
+				    const char *to, const char *from);
+
+/* A name and a type.  */
+struct pair {
+  pair_p next;                  /* The next pair in the linked list.  */
+  const char *name;             /* The defined name.  */
+  type_p type;                  /* Its GTY-ed type.  */
+  struct fileloc line;          /* The file location.  */
+  options_p opt;                /* GTY options, as a linked list.  */
+};
+
+/* Usage information for GTY-ed types.  Gengtype has to care only of
+   used GTY-ed types.  Types are initially unused, and their usage is
+   computed by set_gc_used_type and set_gc_used functions.  */
+
+enum gc_used_enum {
+
+  /* We need that zeroed types are initially unused.  */
+  GC_UNUSED=0,
+
+  /* The GTY-ed type is used, e.g by a GTY-ed variable or a field
+     inside a GTY-ed used type.  */
+  GC_USED,
+
+  /* For GTY-ed structures whose definitions we haven't seen so far
+     when we encounter a pointer to it that is annotated with
+     ``maybe_undef''.  If after reading in everything we don't have
+     source file information for it, we assume that it never has been
+     defined.  */
+  GC_MAYBE_POINTED_TO,
+
+  /* For known GTY-ed structures which are pointed to by GTY-ed
+     variables or fields.  */
+  GC_POINTED_TO
+};
+
+/* Our type structure describes all types handled by gengtype.  */
+struct type {
+  /* Discriminating kind, cannot be TYPE_NONE.  */
+  enum typekind kind;
+
+  /* For top-level structs or unions, the 'next' field links the
+     global list 'structures'; for lang_structs, their homonymous structs are
+     linked using this 'next' field.  The homonymous list starts at the
+     s.lang_struct field of the lang_struct.  See the new_structure function
+     for details.  This is tricky!  */
+  type_p next;
+
+  /* State number used when writing & reading the persistent state.  A
+     type with a positive number has already been written.  For ease
+     of debugging, newly allocated types have a unique negative
+     number.  */
+  int state_number;
+
+  /* Each GTY-ed type which is pointed to by some GTY-ed type knows
+     the GTY pointer type pointing to it.  See create_pointer
+     function.  */
+  type_p pointer_to;
+
+  /* Type usage information, computed by set_gc_used_type and
+     set_gc_used functions.  */
+  enum gc_used_enum gc_used;
+
+  /* The following union is discriminated by the 'kind' field above.  */
+  union {
+    /* TYPE__NONE is impossible.  */
+
+    /* when TYPE_POINTER:  */
+    type_p p;
+
+    /* when TYPE_STRUCT or TYPE_UNION or TYPE_LANG_STRUCT, we have an
+       aggregate type containing fields: */
+    struct {
+      const char *tag;          /* the aggregate tag, if any.  */
+      struct fileloc line;      /* the source location.  */
+      pair_p fields;            /* the linked list of fields.  */
+      options_p opt;            /* the GTY options if any.  */
+      lang_bitmap bitmap;       /* the set of front-end languages
+                                   using that GTY-ed aggregate.  */
+      /* For TYPE_LANG_STRUCT, the lang_struct field gives the first
+         element of a linked list of homonymous struct or union types.
+         Within this list, each homonymous type has as its lang_struct
+         field the original TYPE_LANG_STRUCT type.  This is a dirty
+         trick, see the new_structure function for details.  */
+      type_p lang_struct;
+
+      type_p base_class; /* the parent class, if any.  */
+
+      /* The following two fields are not serialized in state files, and
+	 are instead reconstructed on load.  */
+
+      /* The head of a singly-linked list of immediate descendents in
+	 the inheritance hierarchy.  */
+      type_p first_subclass;
+      /* The next in that list.  */
+      type_p next_sibling_class;
+
+      /* Have we already written ggc/pch user func for ptr to this?
+	 (in write_user_func_for_structure_ptr).  */
+      bool wrote_user_func_for_ptr[NUM_WTK];
+    } s;
+
+    /* when TYPE_SCALAR: */
+    bool scalar_is_char;
+
+    /* when TYPE_ARRAY: */
+    struct {
+      type_p p;                 /* The array component type.  */
+      const char *len;          /* The string if any giving its length.  */
+    } a;
+
+  } u;
+};
+
+/* The one and only TYPE_STRING.  */
+extern struct type string_type;
+
+/* The two and only TYPE_SCALARs.  Their u.scalar_is_char flags are
+   set early in main.  */
+extern struct type scalar_nonchar;
+extern struct type scalar_char;
+
+/* Test if a type is a union, either a plain one or a language
+   specific one.  */
+#define UNION_P(x)					\
+    ((x)->kind == TYPE_UNION				\
+     || ((x)->kind == TYPE_LANG_STRUCT			\
+         && (x)->u.s.lang_struct->kind == TYPE_UNION))
+
+/* Test if a type is a union or a structure, perhaps a language
+   specific one.  */
+static inline bool
+union_or_struct_p (enum typekind kind)
+{
+  return (kind == TYPE_UNION
+	  || kind == TYPE_STRUCT
+          || kind == TYPE_LANG_STRUCT
+	  || kind == TYPE_USER_STRUCT);
+}
+
+static inline bool
+union_or_struct_p (const_type_p x)
+{
+  return union_or_struct_p (x->kind);
+}
+
+/* Give the file location of a type, if any. */
+static inline struct fileloc* 
+type_fileloc (type_p t)
+{
+  if (!t) 
+    return NULL;
+  if (union_or_struct_p (t))
+    return &t->u.s.line;
+  return NULL;
+}
+
+/* Structure representing an output file.  */
+struct outf
+{
+  struct outf *next;
+  const char *name;
+  size_t buflength;
+  size_t bufused;
+  char *buf;
+};
+typedef struct outf *outf_p;
+
+/* The list of output files.  */
+extern outf_p output_files;
+
+/* The output header file that is included into pretty much every
+   source file.  */
+extern outf_p header_file;
+
+/* Print, like fprintf, to O.  No-op if O is NULL.  */
+void
+oprintf (outf_p o, const char *S, ...)
+  ATTRIBUTE_PRINTF_2;
+
+/* An output file, suitable for definitions, that can see declarations
+   made in INPF and is linked into every language that uses INPF.  May
+   return NULL in plugin mode.  The INPF argument is almost const, but
+   since the result is cached in its inpoutf field it cannot be
+   declared const.  */
+outf_p get_output_file_with_visibility (input_file* inpf);
+
+/* The name of an output file, suitable for definitions, that can see
+   declarations made in INPF and is linked into every language that
+   uses INPF.  May return NULL.  */
+const char *get_output_file_name (input_file *inpf);
+
+
+/* Source directory.  */
+extern const char *srcdir;	/* (-S) program argument. */
+
+/* Length of srcdir name.  */
+extern size_t srcdir_len;
+
+/* Variable used for reading and writing the state.  */
+extern const char *read_state_filename; /* (-r) program argument. */
+extern const char *write_state_filename; /* (-w) program argument. */
+
+/* Functions reading and writing the entire gengtype state, called from
+   main, and implemented in file gengtype-state.c.  */
+void read_state (const char* path);
+/* Write the state, and update the state_number field in types.  */
+void write_state (const char* path);
+
+
+/* Print an error message.  */
+extern void error_at_line
+(const struct fileloc *pos, const char *msg, ...) ATTRIBUTE_PRINTF_2;
+
+/* Constructor routines for types.  */
+extern void do_typedef (const char *s, type_p t, struct fileloc *pos);
+extern void do_scalar_typedef (const char *s, struct fileloc *pos);
+extern type_p resolve_typedef (const char *s, struct fileloc *pos);
+extern void add_subclass (type_p base, type_p subclass);
+extern type_p new_structure (const char *name, enum typekind kind,
+			     struct fileloc *pos, pair_p fields,
+			     options_p o, type_p base);
+type_p create_user_defined_type (const char *, struct fileloc *);
+extern type_p find_structure (const char *s, enum typekind kind);
+extern type_p create_scalar_type (const char *name);
+extern type_p create_pointer (type_p t);
+extern type_p create_array (type_p t, const char *len);
+extern pair_p create_field_at (pair_p next, type_p type,
+			       const char *name, options_p opt,
+			       struct fileloc *pos);
+extern pair_p nreverse_pairs (pair_p list);
+extern type_p adjust_field_type (type_p, options_p);
+extern void note_variable (const char *s, type_p t, options_p o,
+			   struct fileloc *pos);
+
+/* Lexer and parser routines.  */
+extern int yylex (const char **yylval);
+extern void yybegin (const char *fname);
+extern void yyend (void);
+extern void parse_file (const char *name);
+extern bool hit_error;
+
+/* Token codes.  */
+enum gty_token
+{
+  EOF_TOKEN = 0,
+
+  /* Per standard convention, codes in the range (0, UCHAR_MAX]
+     represent single characters with those character codes.  */
+  CHAR_TOKEN_OFFSET = UCHAR_MAX + 1,
+  GTY_TOKEN = CHAR_TOKEN_OFFSET,
+  TYPEDEF,
+  EXTERN,
+  STATIC,
+  UNION,
+  STRUCT,
+  ENUM,
+  ELLIPSIS,
+  PTR_ALIAS,
+  NESTED_PTR,
+  USER_GTY,
+  NUM,
+  SCALAR,
+  ID,
+  STRING,
+  CHAR,
+  ARRAY,
+  IGNORABLE_CXX_KEYWORD,
+
+  /* print_token assumes that any token >= FIRST_TOKEN_WITH_VALUE may have
+     a meaningful value to be printed.  */
+  FIRST_TOKEN_WITH_VALUE = USER_GTY
+};
+
+
+/* Level for verbose messages, e.g. output file generation...  */
+extern int verbosity_level;	/* (-v) program argument.  */
+
+/* For debugging purposes we provide two flags.  */
+
+/* Dump everything to understand gengtype's state. Might be useful to
+   gengtype users.  */
+extern int do_dump;		/* (-d) program argument. */
+
+/* Trace the execution by many DBGPRINTF (with the position inside
+   gengtype source code).  Only useful to debug gengtype itself.  */
+extern int do_debug;		/* (-D) program argument. */
+
+#define DBGPRINTF(Fmt,...) do {if (do_debug)				\
+      fprintf (stderr, "%s:%d: " Fmt "\n",				\
+	       lbasename (__FILE__),__LINE__, ##__VA_ARGS__);} while (0)
+void dbgprint_count_type_at (const char *, int, const char *, type_p);
+#define DBGPRINT_COUNT_TYPE(Msg,Ty) do {if (do_debug)			\
+      dbgprint_count_type_at (__FILE__, __LINE__, Msg, Ty);}while (0)
+
+#define FOR_ALL_INHERITED_FIELDS(TYPE, FIELD_VAR) \
+  for (type_p sub = (TYPE); sub; sub = sub->u.s.base_class) \
+    for (FIELD_VAR = sub->u.s.fields; FIELD_VAR; FIELD_VAR = FIELD_VAR->next)
+
+extern bool
+opts_have (options_p opts, const char *str);
+
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/genrtl.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/genrtl.h
new file mode 100644
index 0000000..bfa4812
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/genrtl.h
@@ -0,0 +1,1218 @@
+/* Generated automatically by gengenrtl from rtl.def.  */
+
+#ifndef GCC_GENRTL_H
+#define GCC_GENRTL_H
+
+#include "statistics.h"
+
+static inline rtx
+gen_rtx_fmt_0_stat (RTX_CODE code, machine_mode mode MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  X0EXP (rt, 0) = NULL_RTX;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_0(c, m)\
+        gen_rtx_fmt_0_stat (c, m MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_ee_stat (RTX_CODE code, machine_mode mode,
+	rtx arg0,
+	rtx arg1 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XEXP (rt, 0) = arg0;
+  XEXP (rt, 1) = arg1;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_ee(c, m, p0, p1)\
+        gen_rtx_fmt_ee_stat (c, m, p0, p1 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_ue_stat (RTX_CODE code, machine_mode mode,
+	rtx arg0,
+	rtx arg1 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XEXP (rt, 0) = arg0;
+  XEXP (rt, 1) = arg1;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_ue(c, m, p0, p1)\
+        gen_rtx_fmt_ue_stat (c, m, p0, p1 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_ie_stat (RTX_CODE code, machine_mode mode,
+	int arg0,
+	rtx arg1 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XINT (rt, 0) = arg0;
+  XEXP (rt, 1) = arg1;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_ie(c, m, p0, p1)\
+        gen_rtx_fmt_ie_stat (c, m, p0, p1 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_E_stat (RTX_CODE code, machine_mode mode,
+	rtvec arg0 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XVEC (rt, 0) = arg0;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_E(c, m, p0)\
+        gen_rtx_fmt_E_stat (c, m, p0 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_i_stat (RTX_CODE code, machine_mode mode,
+	int arg0 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XINT (rt, 0) = arg0;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_i(c, m, p0)\
+        gen_rtx_fmt_i_stat (c, m, p0 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_uuBeiie_stat (RTX_CODE code, machine_mode mode,
+	rtx arg0,
+	rtx arg1,
+	basic_block arg2,
+	rtx arg3,
+	int arg4,
+	int arg5,
+	rtx arg6 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XEXP (rt, 0) = arg0;
+  XEXP (rt, 1) = arg1;
+  XBBDEF (rt, 2) = arg2;
+  XEXP (rt, 3) = arg3;
+  XINT (rt, 4) = arg4;
+  XINT (rt, 5) = arg5;
+  XEXP (rt, 6) = arg6;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_uuBeiie(c, m, p0, p1, p2, p3, p4, p5, p6)\
+        gen_rtx_fmt_uuBeiie_stat (c, m, p0, p1, p2, p3, p4, p5, p6 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_uuBeiie0_stat (RTX_CODE code, machine_mode mode,
+	rtx arg0,
+	rtx arg1,
+	basic_block arg2,
+	rtx arg3,
+	int arg4,
+	int arg5,
+	rtx arg6 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XEXP (rt, 0) = arg0;
+  XEXP (rt, 1) = arg1;
+  XBBDEF (rt, 2) = arg2;
+  XEXP (rt, 3) = arg3;
+  XINT (rt, 4) = arg4;
+  XINT (rt, 5) = arg5;
+  XEXP (rt, 6) = arg6;
+  X0EXP (rt, 7) = NULL_RTX;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_uuBeiie0(c, m, p0, p1, p2, p3, p4, p5, p6)\
+        gen_rtx_fmt_uuBeiie0_stat (c, m, p0, p1, p2, p3, p4, p5, p6 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_uuBeiiee_stat (RTX_CODE code, machine_mode mode,
+	rtx arg0,
+	rtx arg1,
+	basic_block arg2,
+	rtx arg3,
+	int arg4,
+	int arg5,
+	rtx arg6,
+	rtx arg7 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XEXP (rt, 0) = arg0;
+  XEXP (rt, 1) = arg1;
+  XBBDEF (rt, 2) = arg2;
+  XEXP (rt, 3) = arg3;
+  XINT (rt, 4) = arg4;
+  XINT (rt, 5) = arg5;
+  XEXP (rt, 6) = arg6;
+  XEXP (rt, 7) = arg7;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_uuBeiiee(c, m, p0, p1, p2, p3, p4, p5, p6, p7)\
+        gen_rtx_fmt_uuBeiiee_stat (c, m, p0, p1, p2, p3, p4, p5, p6, p7 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_uuBe0000_stat (RTX_CODE code, machine_mode mode,
+	rtx arg0,
+	rtx arg1,
+	basic_block arg2,
+	rtx arg3 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XEXP (rt, 0) = arg0;
+  XEXP (rt, 1) = arg1;
+  XBBDEF (rt, 2) = arg2;
+  XEXP (rt, 3) = arg3;
+  X0EXP (rt, 4) = NULL_RTX;
+  X0EXP (rt, 5) = NULL_RTX;
+  X0EXP (rt, 6) = NULL_RTX;
+  X0EXP (rt, 7) = NULL_RTX;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_uuBe0000(c, m, p0, p1, p2, p3)\
+        gen_rtx_fmt_uuBe0000_stat (c, m, p0, p1, p2, p3 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_uu00000_stat (RTX_CODE code, machine_mode mode,
+	rtx arg0,
+	rtx arg1 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XEXP (rt, 0) = arg0;
+  XEXP (rt, 1) = arg1;
+  X0EXP (rt, 2) = NULL_RTX;
+  X0EXP (rt, 3) = NULL_RTX;
+  X0EXP (rt, 4) = NULL_RTX;
+  X0EXP (rt, 5) = NULL_RTX;
+  X0EXP (rt, 6) = NULL_RTX;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_uu00000(c, m, p0, p1)\
+        gen_rtx_fmt_uu00000_stat (c, m, p0, p1 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_uuB00is_stat (RTX_CODE code, machine_mode mode,
+	rtx arg0,
+	rtx arg1,
+	basic_block arg2,
+	int arg3,
+	const char *arg4 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XEXP (rt, 0) = arg0;
+  XEXP (rt, 1) = arg1;
+  XBBDEF (rt, 2) = arg2;
+  X0EXP (rt, 3) = NULL_RTX;
+  X0EXP (rt, 4) = NULL_RTX;
+  XINT (rt, 5) = arg3;
+  XSTR (rt, 6) = arg4;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_uuB00is(c, m, p0, p1, p2, p3, p4)\
+        gen_rtx_fmt_uuB00is_stat (c, m, p0, p1, p2, p3, p4 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_si_stat (RTX_CODE code, machine_mode mode,
+	const char *arg0,
+	int arg1 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XSTR (rt, 0) = arg0;
+  XINT (rt, 1) = arg1;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_si(c, m, p0, p1)\
+        gen_rtx_fmt_si_stat (c, m, p0, p1 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_ssiEEEi_stat (RTX_CODE code, machine_mode mode,
+	const char *arg0,
+	const char *arg1,
+	int arg2,
+	rtvec arg3,
+	rtvec arg4,
+	rtvec arg5,
+	int arg6 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XSTR (rt, 0) = arg0;
+  XSTR (rt, 1) = arg1;
+  XINT (rt, 2) = arg2;
+  XVEC (rt, 3) = arg3;
+  XVEC (rt, 4) = arg4;
+  XVEC (rt, 5) = arg5;
+  XINT (rt, 6) = arg6;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_ssiEEEi(c, m, p0, p1, p2, p3, p4, p5, p6)\
+        gen_rtx_fmt_ssiEEEi_stat (c, m, p0, p1, p2, p3, p4, p5, p6 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_Ei_stat (RTX_CODE code, machine_mode mode,
+	rtvec arg0,
+	int arg1 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XVEC (rt, 0) = arg0;
+  XINT (rt, 1) = arg1;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_Ei(c, m, p0, p1)\
+        gen_rtx_fmt_Ei_stat (c, m, p0, p1 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_eEee0_stat (RTX_CODE code, machine_mode mode,
+	rtx arg0,
+	rtvec arg1,
+	rtx arg2,
+	rtx arg3 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XEXP (rt, 0) = arg0;
+  XVEC (rt, 1) = arg1;
+  XEXP (rt, 2) = arg2;
+  XEXP (rt, 3) = arg3;
+  X0EXP (rt, 4) = NULL_RTX;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_eEee0(c, m, p0, p1, p2, p3)\
+        gen_rtx_fmt_eEee0_stat (c, m, p0, p1, p2, p3 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_eee_stat (RTX_CODE code, machine_mode mode,
+	rtx arg0,
+	rtx arg1,
+	rtx arg2 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XEXP (rt, 0) = arg0;
+  XEXP (rt, 1) = arg1;
+  XEXP (rt, 2) = arg2;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_eee(c, m, p0, p1, p2)\
+        gen_rtx_fmt_eee_stat (c, m, p0, p1, p2 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_e_stat (RTX_CODE code, machine_mode mode,
+	rtx arg0 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XEXP (rt, 0) = arg0;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_e(c, m, p0)\
+        gen_rtx_fmt_e_stat (c, m, p0 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt__stat (RTX_CODE code, machine_mode mode MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+
+  return rt;
+}
+
+#define gen_rtx_fmt_(c, m)\
+        gen_rtx_fmt__stat (c, m MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_w_stat (RTX_CODE code, machine_mode mode,
+	HOST_WIDE_INT arg0 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XWINT (rt, 0) = arg0;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_w(c, m, p0)\
+        gen_rtx_fmt_w_stat (c, m, p0 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_www_stat (RTX_CODE code, machine_mode mode,
+	HOST_WIDE_INT arg0,
+	HOST_WIDE_INT arg1,
+	HOST_WIDE_INT arg2 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XWINT (rt, 0) = arg0;
+  XWINT (rt, 1) = arg1;
+  XWINT (rt, 2) = arg2;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_www(c, m, p0, p1, p2)\
+        gen_rtx_fmt_www_stat (c, m, p0, p1, p2 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_s_stat (RTX_CODE code, machine_mode mode,
+	const char *arg0 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XSTR (rt, 0) = arg0;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_s(c, m, p0)\
+        gen_rtx_fmt_s_stat (c, m, p0 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_ep_stat (RTX_CODE code, machine_mode mode,
+	rtx arg0,
+	poly_uint16 arg1 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XEXP (rt, 0) = arg0;
+  SUBREG_BYTE (rt) = arg1;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_ep(c, m, p0, p1)\
+        gen_rtx_fmt_ep_stat (c, m, p0, p1 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_e0_stat (RTX_CODE code, machine_mode mode,
+	rtx arg0 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XEXP (rt, 0) = arg0;
+  X0EXP (rt, 1) = NULL_RTX;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_e0(c, m, p0)\
+        gen_rtx_fmt_e0_stat (c, m, p0 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_u_stat (RTX_CODE code, machine_mode mode,
+	rtx arg0 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XEXP (rt, 0) = arg0;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_u(c, m, p0)\
+        gen_rtx_fmt_u_stat (c, m, p0 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_s0_stat (RTX_CODE code, machine_mode mode,
+	const char *arg0 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XSTR (rt, 0) = arg0;
+  X0EXP (rt, 1) = NULL_RTX;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_s0(c, m, p0)\
+        gen_rtx_fmt_s0_stat (c, m, p0 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_te_stat (RTX_CODE code, machine_mode mode,
+	tree arg0,
+	rtx arg1 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XTREE (rt, 0) = arg0;
+  XEXP (rt, 1) = arg1;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_te(c, m, p0, p1)\
+        gen_rtx_fmt_te_stat (c, m, p0, p1 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_t_stat (RTX_CODE code, machine_mode mode,
+	tree arg0 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XTREE (rt, 0) = arg0;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_t(c, m, p0)\
+        gen_rtx_fmt_t_stat (c, m, p0 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_iss_stat (RTX_CODE code, machine_mode mode,
+	int arg0,
+	const char *arg1,
+	const char *arg2 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XINT (rt, 0) = arg0;
+  XSTR (rt, 1) = arg1;
+  XSTR (rt, 2) = arg2;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_iss(c, m, p0, p1, p2)\
+        gen_rtx_fmt_iss_stat (c, m, p0, p1, p2 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_is_stat (RTX_CODE code, machine_mode mode,
+	int arg0,
+	const char *arg1 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XINT (rt, 0) = arg0;
+  XSTR (rt, 1) = arg1;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_is(c, m, p0, p1)\
+        gen_rtx_fmt_is_stat (c, m, p0, p1 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_isE_stat (RTX_CODE code, machine_mode mode,
+	int arg0,
+	const char *arg1,
+	rtvec arg2 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XINT (rt, 0) = arg0;
+  XSTR (rt, 1) = arg1;
+  XVEC (rt, 2) = arg2;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_isE(c, m, p0, p1, p2)\
+        gen_rtx_fmt_isE_stat (c, m, p0, p1, p2 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_iE_stat (RTX_CODE code, machine_mode mode,
+	int arg0,
+	rtvec arg1 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XINT (rt, 0) = arg0;
+  XVEC (rt, 1) = arg1;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_iE(c, m, p0, p1)\
+        gen_rtx_fmt_iE_stat (c, m, p0, p1 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_ss_stat (RTX_CODE code, machine_mode mode,
+	const char *arg0,
+	const char *arg1 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XSTR (rt, 0) = arg0;
+  XSTR (rt, 1) = arg1;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_ss(c, m, p0, p1)\
+        gen_rtx_fmt_ss_stat (c, m, p0, p1 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_eE_stat (RTX_CODE code, machine_mode mode,
+	rtx arg0,
+	rtvec arg1 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XEXP (rt, 0) = arg0;
+  XVEC (rt, 1) = arg1;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_eE(c, m, p0, p1)\
+        gen_rtx_fmt_eE_stat (c, m, p0, p1 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_ses_stat (RTX_CODE code, machine_mode mode,
+	const char *arg0,
+	rtx arg1,
+	const char *arg2 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XSTR (rt, 0) = arg0;
+  XEXP (rt, 1) = arg1;
+  XSTR (rt, 2) = arg2;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_ses(c, m, p0, p1, p2)\
+        gen_rtx_fmt_ses_stat (c, m, p0, p1, p2 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_sss_stat (RTX_CODE code, machine_mode mode,
+	const char *arg0,
+	const char *arg1,
+	const char *arg2 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XSTR (rt, 0) = arg0;
+  XSTR (rt, 1) = arg1;
+  XSTR (rt, 2) = arg2;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_sss(c, m, p0, p1, p2)\
+        gen_rtx_fmt_sss_stat (c, m, p0, p1, p2 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_sse_stat (RTX_CODE code, machine_mode mode,
+	const char *arg0,
+	const char *arg1,
+	rtx arg2 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XSTR (rt, 0) = arg0;
+  XSTR (rt, 1) = arg1;
+  XEXP (rt, 2) = arg2;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_sse(c, m, p0, p1, p2)\
+        gen_rtx_fmt_sse_stat (c, m, p0, p1, p2 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_sies_stat (RTX_CODE code, machine_mode mode,
+	const char *arg0,
+	int arg1,
+	rtx arg2,
+	const char *arg3 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XSTR (rt, 0) = arg0;
+  XINT (rt, 1) = arg1;
+  XEXP (rt, 2) = arg2;
+  XSTR (rt, 3) = arg3;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_sies(c, m, p0, p1, p2, p3)\
+        gen_rtx_fmt_sies_stat (c, m, p0, p1, p2, p3 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_sE_stat (RTX_CODE code, machine_mode mode,
+	const char *arg0,
+	rtvec arg1 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XSTR (rt, 0) = arg0;
+  XVEC (rt, 1) = arg1;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_sE(c, m, p0, p1)\
+        gen_rtx_fmt_sE_stat (c, m, p0, p1 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_ww_stat (RTX_CODE code, machine_mode mode,
+	HOST_WIDE_INT arg0,
+	HOST_WIDE_INT arg1 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XWINT (rt, 0) = arg0;
+  XWINT (rt, 1) = arg1;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_ww(c, m, p0, p1)\
+        gen_rtx_fmt_ww_stat (c, m, p0, p1 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_Ee_stat (RTX_CODE code, machine_mode mode,
+	rtvec arg0,
+	rtx arg1 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XVEC (rt, 0) = arg0;
+  XEXP (rt, 1) = arg1;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_Ee(c, m, p0, p1)\
+        gen_rtx_fmt_Ee_stat (c, m, p0, p1 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_sEsE_stat (RTX_CODE code, machine_mode mode,
+	const char *arg0,
+	rtvec arg1,
+	const char *arg2,
+	rtvec arg3 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XSTR (rt, 0) = arg0;
+  XVEC (rt, 1) = arg1;
+  XSTR (rt, 2) = arg2;
+  XVEC (rt, 3) = arg3;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_sEsE(c, m, p0, p1, p2, p3)\
+        gen_rtx_fmt_sEsE_stat (c, m, p0, p1, p2, p3 MEM_STAT_INFO)
+
+static inline rtx
+gen_rtx_fmt_ssss_stat (RTX_CODE code, machine_mode mode,
+	const char *arg0,
+	const char *arg1,
+	const char *arg2,
+	const char *arg3 MEM_STAT_DECL)
+{
+  rtx rt;
+  rt = rtx_alloc (code PASS_MEM_STAT);
+
+  PUT_MODE_RAW (rt, mode);
+  XSTR (rt, 0) = arg0;
+  XSTR (rt, 1) = arg1;
+  XSTR (rt, 2) = arg2;
+  XSTR (rt, 3) = arg3;
+
+  return rt;
+}
+
+#define gen_rtx_fmt_ssss(c, m, p0, p1, p2, p3)\
+        gen_rtx_fmt_ssss_stat (c, m, p0, p1, p2, p3 MEM_STAT_INFO)
+
+
+#define gen_rtx_VALUE(MODE) \
+  gen_rtx_fmt_0 (VALUE, (MODE))
+#define gen_rtx_DEBUG_EXPR(MODE) \
+  gen_rtx_fmt_0 (DEBUG_EXPR, (MODE))
+#define gen_rtx_raw_EXPR_LIST(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (EXPR_LIST, (MODE), (ARG0), (ARG1))
+#define gen_rtx_raw_INSN_LIST(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ue (INSN_LIST, (MODE), (ARG0), (ARG1))
+#define gen_rtx_INT_LIST(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ie (INT_LIST, (MODE), (ARG0), (ARG1))
+#define gen_rtx_SEQUENCE(MODE, ARG0) \
+  gen_rtx_fmt_E (SEQUENCE, (MODE), (ARG0))
+#define gen_rtx_ADDRESS(MODE, ARG0) \
+  gen_rtx_fmt_i (ADDRESS, (MODE), (ARG0))
+#define gen_rtx_DEBUG_INSN(MODE, ARG0, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
+  gen_rtx_fmt_uuBeiie (DEBUG_INSN, (MODE), (ARG0), (ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6))
+#define gen_rtx_raw_INSN(MODE, ARG0, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
+  gen_rtx_fmt_uuBeiie (INSN, (MODE), (ARG0), (ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6))
+#define gen_rtx_JUMP_INSN(MODE, ARG0, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
+  gen_rtx_fmt_uuBeiie0 (JUMP_INSN, (MODE), (ARG0), (ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6))
+#define gen_rtx_CALL_INSN(MODE, ARG0, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) \
+  gen_rtx_fmt_uuBeiiee (CALL_INSN, (MODE), (ARG0), (ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6), (ARG7))
+#define gen_rtx_JUMP_TABLE_DATA(MODE, ARG0, ARG1, ARG2, ARG3) \
+  gen_rtx_fmt_uuBe0000 (JUMP_TABLE_DATA, (MODE), (ARG0), (ARG1), (ARG2), (ARG3))
+#define gen_rtx_BARRIER(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_uu00000 (BARRIER, (MODE), (ARG0), (ARG1))
+#define gen_rtx_CODE_LABEL(MODE, ARG0, ARG1, ARG2, ARG3, ARG4) \
+  gen_rtx_fmt_uuB00is (CODE_LABEL, (MODE), (ARG0), (ARG1), (ARG2), (ARG3), (ARG4))
+#define gen_rtx_COND_EXEC(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (COND_EXEC, (MODE), (ARG0), (ARG1))
+#define gen_rtx_PARALLEL(MODE, ARG0) \
+  gen_rtx_fmt_E (PARALLEL, (MODE), (ARG0))
+#define gen_rtx_ASM_INPUT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_si (ASM_INPUT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_ASM_OPERANDS(MODE, ARG0, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
+  gen_rtx_fmt_ssiEEEi (ASM_OPERANDS, (MODE), (ARG0), (ARG1), (ARG2), (ARG3), (ARG4), (ARG5), (ARG6))
+#define gen_rtx_UNSPEC(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_Ei (UNSPEC, (MODE), (ARG0), (ARG1))
+#define gen_rtx_UNSPEC_VOLATILE(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_Ei (UNSPEC_VOLATILE, (MODE), (ARG0), (ARG1))
+#define gen_rtx_ADDR_VEC(MODE, ARG0) \
+  gen_rtx_fmt_E (ADDR_VEC, (MODE), (ARG0))
+#define gen_rtx_ADDR_DIFF_VEC(MODE, ARG0, ARG1, ARG2, ARG3) \
+  gen_rtx_fmt_eEee0 (ADDR_DIFF_VEC, (MODE), (ARG0), (ARG1), (ARG2), (ARG3))
+#define gen_rtx_PREFETCH(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_eee (PREFETCH, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_SET(ARG0, ARG1) \
+  gen_rtx_fmt_ee (SET, VOIDmode, (ARG0), (ARG1))
+#define gen_rtx_USE(MODE, ARG0) \
+  gen_rtx_fmt_e (USE, (MODE), (ARG0))
+#define gen_rtx_CLOBBER(MODE, ARG0) \
+  gen_rtx_fmt_e (CLOBBER, (MODE), (ARG0))
+#define gen_rtx_CLOBBER_HIGH(MODE, ARG0) \
+  gen_rtx_fmt_e (CLOBBER_HIGH, (MODE), (ARG0))
+#define gen_rtx_CALL(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (CALL, (MODE), (ARG0), (ARG1))
+#define gen_rtx_raw_RETURN(MODE) \
+  gen_rtx_fmt_ (RETURN, (MODE))
+#define gen_rtx_raw_SIMPLE_RETURN(MODE) \
+  gen_rtx_fmt_ (SIMPLE_RETURN, (MODE))
+#define gen_rtx_EH_RETURN(MODE) \
+  gen_rtx_fmt_ (EH_RETURN, (MODE))
+#define gen_rtx_TRAP_IF(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (TRAP_IF, (MODE), (ARG0), (ARG1))
+#define gen_rtx_raw_CONST_INT(MODE, ARG0) \
+  gen_rtx_fmt_w (CONST_INT, (MODE), (ARG0))
+#define gen_rtx_raw_CONST_VECTOR(MODE, ARG0) \
+  gen_rtx_fmt_E (CONST_VECTOR, (MODE), (ARG0))
+#define gen_rtx_CONST_STRING(MODE, ARG0) \
+  gen_rtx_fmt_s (CONST_STRING, (MODE), (ARG0))
+#define gen_rtx_CONST(MODE, ARG0) \
+  gen_rtx_fmt_e (CONST, (MODE), (ARG0))
+#define gen_rtx_raw_PC(MODE) \
+  gen_rtx_fmt_ (PC, (MODE))
+#define gen_rtx_SCRATCH(MODE) \
+  gen_rtx_fmt_ (SCRATCH, (MODE))
+#define gen_rtx_raw_SUBREG(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ep (SUBREG, (MODE), (ARG0), (ARG1))
+#define gen_rtx_STRICT_LOW_PART(MODE, ARG0) \
+  gen_rtx_fmt_e (STRICT_LOW_PART, (MODE), (ARG0))
+#define gen_rtx_CONCAT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (CONCAT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_CONCATN(MODE, ARG0) \
+  gen_rtx_fmt_E (CONCATN, (MODE), (ARG0))
+#define gen_rtx_raw_MEM(MODE, ARG0) \
+  gen_rtx_fmt_e0 (MEM, (MODE), (ARG0))
+#define gen_rtx_LABEL_REF(MODE, ARG0) \
+  gen_rtx_fmt_u (LABEL_REF, (MODE), (ARG0))
+#define gen_rtx_SYMBOL_REF(MODE, ARG0) \
+  gen_rtx_fmt_s0 (SYMBOL_REF, (MODE), (ARG0))
+#define gen_rtx_raw_CC0(MODE) \
+  gen_rtx_fmt_ (CC0, (MODE))
+#define gen_rtx_IF_THEN_ELSE(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_eee (IF_THEN_ELSE, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_COMPARE(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (COMPARE, (MODE), (ARG0), (ARG1))
+#define gen_rtx_PLUS(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (PLUS, (MODE), (ARG0), (ARG1))
+#define gen_rtx_MINUS(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (MINUS, (MODE), (ARG0), (ARG1))
+#define gen_rtx_NEG(MODE, ARG0) \
+  gen_rtx_fmt_e (NEG, (MODE), (ARG0))
+#define gen_rtx_MULT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (MULT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_SS_MULT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (SS_MULT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_US_MULT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (US_MULT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_DIV(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (DIV, (MODE), (ARG0), (ARG1))
+#define gen_rtx_SS_DIV(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (SS_DIV, (MODE), (ARG0), (ARG1))
+#define gen_rtx_US_DIV(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (US_DIV, (MODE), (ARG0), (ARG1))
+#define gen_rtx_MOD(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (MOD, (MODE), (ARG0), (ARG1))
+#define gen_rtx_UDIV(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (UDIV, (MODE), (ARG0), (ARG1))
+#define gen_rtx_UMOD(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (UMOD, (MODE), (ARG0), (ARG1))
+#define gen_rtx_AND(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (AND, (MODE), (ARG0), (ARG1))
+#define gen_rtx_IOR(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (IOR, (MODE), (ARG0), (ARG1))
+#define gen_rtx_XOR(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (XOR, (MODE), (ARG0), (ARG1))
+#define gen_rtx_NOT(MODE, ARG0) \
+  gen_rtx_fmt_e (NOT, (MODE), (ARG0))
+#define gen_rtx_ASHIFT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (ASHIFT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_ROTATE(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (ROTATE, (MODE), (ARG0), (ARG1))
+#define gen_rtx_ASHIFTRT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (ASHIFTRT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_LSHIFTRT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (LSHIFTRT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_ROTATERT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (ROTATERT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_SMIN(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (SMIN, (MODE), (ARG0), (ARG1))
+#define gen_rtx_SMAX(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (SMAX, (MODE), (ARG0), (ARG1))
+#define gen_rtx_UMIN(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (UMIN, (MODE), (ARG0), (ARG1))
+#define gen_rtx_UMAX(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (UMAX, (MODE), (ARG0), (ARG1))
+#define gen_rtx_PRE_DEC(MODE, ARG0) \
+  gen_rtx_fmt_e (PRE_DEC, (MODE), (ARG0))
+#define gen_rtx_PRE_INC(MODE, ARG0) \
+  gen_rtx_fmt_e (PRE_INC, (MODE), (ARG0))
+#define gen_rtx_POST_DEC(MODE, ARG0) \
+  gen_rtx_fmt_e (POST_DEC, (MODE), (ARG0))
+#define gen_rtx_POST_INC(MODE, ARG0) \
+  gen_rtx_fmt_e (POST_INC, (MODE), (ARG0))
+#define gen_rtx_PRE_MODIFY(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (PRE_MODIFY, (MODE), (ARG0), (ARG1))
+#define gen_rtx_POST_MODIFY(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (POST_MODIFY, (MODE), (ARG0), (ARG1))
+#define gen_rtx_NE(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (NE, (MODE), (ARG0), (ARG1))
+#define gen_rtx_EQ(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (EQ, (MODE), (ARG0), (ARG1))
+#define gen_rtx_GE(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (GE, (MODE), (ARG0), (ARG1))
+#define gen_rtx_GT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (GT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_LE(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (LE, (MODE), (ARG0), (ARG1))
+#define gen_rtx_LT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (LT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_GEU(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (GEU, (MODE), (ARG0), (ARG1))
+#define gen_rtx_GTU(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (GTU, (MODE), (ARG0), (ARG1))
+#define gen_rtx_LEU(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (LEU, (MODE), (ARG0), (ARG1))
+#define gen_rtx_LTU(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (LTU, (MODE), (ARG0), (ARG1))
+#define gen_rtx_UNORDERED(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (UNORDERED, (MODE), (ARG0), (ARG1))
+#define gen_rtx_ORDERED(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (ORDERED, (MODE), (ARG0), (ARG1))
+#define gen_rtx_UNEQ(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (UNEQ, (MODE), (ARG0), (ARG1))
+#define gen_rtx_UNGE(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (UNGE, (MODE), (ARG0), (ARG1))
+#define gen_rtx_UNGT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (UNGT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_UNLE(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (UNLE, (MODE), (ARG0), (ARG1))
+#define gen_rtx_UNLT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (UNLT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_LTGT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (LTGT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_SIGN_EXTEND(MODE, ARG0) \
+  gen_rtx_fmt_e (SIGN_EXTEND, (MODE), (ARG0))
+#define gen_rtx_ZERO_EXTEND(MODE, ARG0) \
+  gen_rtx_fmt_e (ZERO_EXTEND, (MODE), (ARG0))
+#define gen_rtx_TRUNCATE(MODE, ARG0) \
+  gen_rtx_fmt_e (TRUNCATE, (MODE), (ARG0))
+#define gen_rtx_FLOAT_EXTEND(MODE, ARG0) \
+  gen_rtx_fmt_e (FLOAT_EXTEND, (MODE), (ARG0))
+#define gen_rtx_FLOAT_TRUNCATE(MODE, ARG0) \
+  gen_rtx_fmt_e (FLOAT_TRUNCATE, (MODE), (ARG0))
+#define gen_rtx_FLOAT(MODE, ARG0) \
+  gen_rtx_fmt_e (FLOAT, (MODE), (ARG0))
+#define gen_rtx_FIX(MODE, ARG0) \
+  gen_rtx_fmt_e (FIX, (MODE), (ARG0))
+#define gen_rtx_UNSIGNED_FLOAT(MODE, ARG0) \
+  gen_rtx_fmt_e (UNSIGNED_FLOAT, (MODE), (ARG0))
+#define gen_rtx_UNSIGNED_FIX(MODE, ARG0) \
+  gen_rtx_fmt_e (UNSIGNED_FIX, (MODE), (ARG0))
+#define gen_rtx_FRACT_CONVERT(MODE, ARG0) \
+  gen_rtx_fmt_e (FRACT_CONVERT, (MODE), (ARG0))
+#define gen_rtx_UNSIGNED_FRACT_CONVERT(MODE, ARG0) \
+  gen_rtx_fmt_e (UNSIGNED_FRACT_CONVERT, (MODE), (ARG0))
+#define gen_rtx_SAT_FRACT(MODE, ARG0) \
+  gen_rtx_fmt_e (SAT_FRACT, (MODE), (ARG0))
+#define gen_rtx_UNSIGNED_SAT_FRACT(MODE, ARG0) \
+  gen_rtx_fmt_e (UNSIGNED_SAT_FRACT, (MODE), (ARG0))
+#define gen_rtx_ABS(MODE, ARG0) \
+  gen_rtx_fmt_e (ABS, (MODE), (ARG0))
+#define gen_rtx_SQRT(MODE, ARG0) \
+  gen_rtx_fmt_e (SQRT, (MODE), (ARG0))
+#define gen_rtx_BSWAP(MODE, ARG0) \
+  gen_rtx_fmt_e (BSWAP, (MODE), (ARG0))
+#define gen_rtx_FFS(MODE, ARG0) \
+  gen_rtx_fmt_e (FFS, (MODE), (ARG0))
+#define gen_rtx_CLRSB(MODE, ARG0) \
+  gen_rtx_fmt_e (CLRSB, (MODE), (ARG0))
+#define gen_rtx_CLZ(MODE, ARG0) \
+  gen_rtx_fmt_e (CLZ, (MODE), (ARG0))
+#define gen_rtx_CTZ(MODE, ARG0) \
+  gen_rtx_fmt_e (CTZ, (MODE), (ARG0))
+#define gen_rtx_POPCOUNT(MODE, ARG0) \
+  gen_rtx_fmt_e (POPCOUNT, (MODE), (ARG0))
+#define gen_rtx_PARITY(MODE, ARG0) \
+  gen_rtx_fmt_e (PARITY, (MODE), (ARG0))
+#define gen_rtx_SIGN_EXTRACT(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_eee (SIGN_EXTRACT, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_ZERO_EXTRACT(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_eee (ZERO_EXTRACT, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_HIGH(MODE, ARG0) \
+  gen_rtx_fmt_e (HIGH, (MODE), (ARG0))
+#define gen_rtx_LO_SUM(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (LO_SUM, (MODE), (ARG0), (ARG1))
+#define gen_rtx_VEC_MERGE(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_eee (VEC_MERGE, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_VEC_SELECT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (VEC_SELECT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_VEC_CONCAT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (VEC_CONCAT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_VEC_DUPLICATE(MODE, ARG0) \
+  gen_rtx_fmt_e (VEC_DUPLICATE, (MODE), (ARG0))
+#define gen_rtx_VEC_SERIES(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (VEC_SERIES, (MODE), (ARG0), (ARG1))
+#define gen_rtx_SS_PLUS(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (SS_PLUS, (MODE), (ARG0), (ARG1))
+#define gen_rtx_US_PLUS(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (US_PLUS, (MODE), (ARG0), (ARG1))
+#define gen_rtx_SS_MINUS(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (SS_MINUS, (MODE), (ARG0), (ARG1))
+#define gen_rtx_SS_NEG(MODE, ARG0) \
+  gen_rtx_fmt_e (SS_NEG, (MODE), (ARG0))
+#define gen_rtx_US_NEG(MODE, ARG0) \
+  gen_rtx_fmt_e (US_NEG, (MODE), (ARG0))
+#define gen_rtx_SS_ABS(MODE, ARG0) \
+  gen_rtx_fmt_e (SS_ABS, (MODE), (ARG0))
+#define gen_rtx_SS_ASHIFT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (SS_ASHIFT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_US_ASHIFT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (US_ASHIFT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_US_MINUS(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ee (US_MINUS, (MODE), (ARG0), (ARG1))
+#define gen_rtx_SS_TRUNCATE(MODE, ARG0) \
+  gen_rtx_fmt_e (SS_TRUNCATE, (MODE), (ARG0))
+#define gen_rtx_US_TRUNCATE(MODE, ARG0) \
+  gen_rtx_fmt_e (US_TRUNCATE, (MODE), (ARG0))
+#define gen_rtx_FMA(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_eee (FMA, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_DEBUG_IMPLICIT_PTR(MODE, ARG0) \
+  gen_rtx_fmt_t (DEBUG_IMPLICIT_PTR, (MODE), (ARG0))
+#define gen_rtx_ENTRY_VALUE(MODE) \
+  gen_rtx_fmt_0 (ENTRY_VALUE, (MODE))
+#define gen_rtx_DEBUG_PARAMETER_REF(MODE, ARG0) \
+  gen_rtx_fmt_t (DEBUG_PARAMETER_REF, (MODE), (ARG0))
+#define gen_rtx_DEBUG_MARKER(MODE) \
+  gen_rtx_fmt_ (DEBUG_MARKER, (MODE))
+#define gen_rtx_MATCH_OPERAND(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_iss (MATCH_OPERAND, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_MATCH_SCRATCH(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_is (MATCH_SCRATCH, (MODE), (ARG0), (ARG1))
+#define gen_rtx_MATCH_OPERATOR(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_isE (MATCH_OPERATOR, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_MATCH_PARALLEL(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_isE (MATCH_PARALLEL, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_MATCH_DUP(MODE, ARG0) \
+  gen_rtx_fmt_i (MATCH_DUP, (MODE), (ARG0))
+#define gen_rtx_MATCH_OP_DUP(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_iE (MATCH_OP_DUP, (MODE), (ARG0), (ARG1))
+#define gen_rtx_MATCH_PAR_DUP(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_iE (MATCH_PAR_DUP, (MODE), (ARG0), (ARG1))
+#define gen_rtx_MATCH_CODE(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ss (MATCH_CODE, (MODE), (ARG0), (ARG1))
+#define gen_rtx_MATCH_TEST(MODE, ARG0) \
+  gen_rtx_fmt_s (MATCH_TEST, (MODE), (ARG0))
+#define gen_rtx_DEFINE_DELAY(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_eE (DEFINE_DELAY, (MODE), (ARG0), (ARG1))
+#define gen_rtx_DEFINE_PREDICATE(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_ses (DEFINE_PREDICATE, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_DEFINE_SPECIAL_PREDICATE(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_ses (DEFINE_SPECIAL_PREDICATE, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_DEFINE_REGISTER_CONSTRAINT(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_sss (DEFINE_REGISTER_CONSTRAINT, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_DEFINE_CONSTRAINT(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_sse (DEFINE_CONSTRAINT, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_DEFINE_MEMORY_CONSTRAINT(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_sse (DEFINE_MEMORY_CONSTRAINT, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_DEFINE_SPECIAL_MEMORY_CONSTRAINT(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_sse (DEFINE_SPECIAL_MEMORY_CONSTRAINT, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_DEFINE_ADDRESS_CONSTRAINT(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_sse (DEFINE_ADDRESS_CONSTRAINT, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_EXCLUSION_SET(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ss (EXCLUSION_SET, (MODE), (ARG0), (ARG1))
+#define gen_rtx_PRESENCE_SET(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ss (PRESENCE_SET, (MODE), (ARG0), (ARG1))
+#define gen_rtx_FINAL_PRESENCE_SET(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ss (FINAL_PRESENCE_SET, (MODE), (ARG0), (ARG1))
+#define gen_rtx_ABSENCE_SET(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ss (ABSENCE_SET, (MODE), (ARG0), (ARG1))
+#define gen_rtx_FINAL_ABSENCE_SET(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ss (FINAL_ABSENCE_SET, (MODE), (ARG0), (ARG1))
+#define gen_rtx_DEFINE_AUTOMATON(MODE, ARG0) \
+  gen_rtx_fmt_s (DEFINE_AUTOMATON, (MODE), (ARG0))
+#define gen_rtx_AUTOMATA_OPTION(MODE, ARG0) \
+  gen_rtx_fmt_s (AUTOMATA_OPTION, (MODE), (ARG0))
+#define gen_rtx_DEFINE_RESERVATION(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ss (DEFINE_RESERVATION, (MODE), (ARG0), (ARG1))
+#define gen_rtx_DEFINE_INSN_RESERVATION(MODE, ARG0, ARG1, ARG2, ARG3) \
+  gen_rtx_fmt_sies (DEFINE_INSN_RESERVATION, (MODE), (ARG0), (ARG1), (ARG2), (ARG3))
+#define gen_rtx_DEFINE_ATTR(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_sse (DEFINE_ATTR, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_DEFINE_ENUM_ATTR(MODE, ARG0, ARG1, ARG2) \
+  gen_rtx_fmt_sse (DEFINE_ENUM_ATTR, (MODE), (ARG0), (ARG1), (ARG2))
+#define gen_rtx_ATTR(MODE, ARG0) \
+  gen_rtx_fmt_s (ATTR, (MODE), (ARG0))
+#define gen_rtx_SET_ATTR(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ss (SET_ATTR, (MODE), (ARG0), (ARG1))
+#define gen_rtx_SET_ATTR_ALTERNATIVE(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_sE (SET_ATTR_ALTERNATIVE, (MODE), (ARG0), (ARG1))
+#define gen_rtx_EQ_ATTR(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ss (EQ_ATTR, (MODE), (ARG0), (ARG1))
+#define gen_rtx_EQ_ATTR_ALT(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_ww (EQ_ATTR_ALT, (MODE), (ARG0), (ARG1))
+#define gen_rtx_ATTR_FLAG(MODE, ARG0) \
+  gen_rtx_fmt_s (ATTR_FLAG, (MODE), (ARG0))
+#define gen_rtx_COND(MODE, ARG0, ARG1) \
+  gen_rtx_fmt_Ee (COND, (MODE), (ARG0), (ARG1))
+#define gen_rtx_DEFINE_SUBST(MODE, ARG0, ARG1, ARG2, ARG3) \
+  gen_rtx_fmt_sEsE (DEFINE_SUBST, (MODE), (ARG0), (ARG1), (ARG2), (ARG3))
+#define gen_rtx_DEFINE_SUBST_ATTR(MODE, ARG0, ARG1, ARG2, ARG3) \
+  gen_rtx_fmt_ssss (DEFINE_SUBST_ATTR, (MODE), (ARG0), (ARG1), (ARG2), (ARG3))
+
+#endif /* GCC_GENRTL_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gensupport.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gensupport.h
new file mode 100644
index 0000000..5c43203
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gensupport.h
@@ -0,0 +1,227 @@
+/* Declarations for rtx-reader support for gen* routines.
+   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GENSUPPORT_H
+#define GCC_GENSUPPORT_H
+
+#include "read-md.h"
+
+struct obstack;
+extern struct obstack *rtl_obstack;
+
+/* Information about an .md define_* rtx.  */
+struct md_rtx_info {
+  /* The rtx itself.  */
+  rtx def;
+
+  /* The location of the first line of the rtx.  */
+  file_location loc;
+
+  /* The unique number attached to the rtx.  Currently all define_insns,
+     define_expands, define_splits, define_peepholes and define_peephole2s
+     share the same insn_code index space.  */
+  int index;
+};
+
+#define OPTAB_CL(name, pat, c, b, l)		name,
+#define OPTAB_CX(name, pat)
+#define OPTAB_CD(name, pat)			name,
+#define OPTAB_NL(name, pat, c, b, s, l)		name,
+#define OPTAB_NC(name, pat, c)			name,
+#define OPTAB_NX(name, pat)
+#define OPTAB_VL(name, pat, c, b, s, l)		name,
+#define OPTAB_VC(name, pat, c)			name,
+#define OPTAB_VX(name, pat)
+#define OPTAB_DC(name, pat, c)			name,
+#define OPTAB_D(name, pat)			name,
+
+/* Enumerates all optabs.  */
+typedef enum optab_tag {
+  unknown_optab,
+#include "optabs.def"
+  NUM_OPTABS
+} optab;
+
+#undef OPTAB_CL
+#undef OPTAB_CX
+#undef OPTAB_CD
+#undef OPTAB_NL
+#undef OPTAB_NC
+#undef OPTAB_NX
+#undef OPTAB_VL
+#undef OPTAB_VC
+#undef OPTAB_VX
+#undef OPTAB_DC
+#undef OPTAB_D
+
+/* Describes one entry in optabs.def.  */
+struct optab_def
+{
+  /* The name of the optab (e.g. "add_optab").  */
+  const char *name;
+
+  /* The pattern that matching define_expands and define_insns have.
+     See the comment at the head of optabs.def for details.  */
+  const char *pattern;
+
+  /* The initializers (in the form of C code) for the libcall_basename,
+     libcall_suffix and libcall_gen fields of (convert_)optab_libcall_d.  */
+  const char *base;
+  const char *suffix;
+  const char *libcall;
+
+  /* The optab's enum value.  */
+  unsigned int op;
+
+  /* The value returned by optab_to_code (OP).  */
+  enum rtx_code fcode;
+
+  /* CODE if code_to_optab (CODE) should return OP, otherwise UNKNOWN.  */
+  enum rtx_code rcode;
+
+  /* 1: conversion optabs with libcall data,
+     2: conversion optabs without libcall data,
+     3: non-conversion optabs with libcall data ("normal" and "overflow"
+        optabs in the optabs.def comment)
+     4: non-conversion optabs without libcall data ("direct" optabs).  */
+  unsigned int kind;
+};
+
+extern optab_def optabs[];
+extern unsigned int num_optabs;
+
+/* Information about an instruction name that matches an optab pattern.  */
+struct optab_pattern
+{
+  /* The name of the instruction.  */
+  const char *name;
+
+  /* The matching optab.  */
+  unsigned int op;
+
+  /* The optab modes.  M2 is only significant for conversion optabs;
+     it is zero otherwise.  */
+  unsigned int m1, m2;
+
+  /* An index that provides a lexicographical sort of (OP, M2, M1).
+     Used by genopinit.c.  */
+  unsigned int sort_num;
+};
+
+extern rtx add_implicit_parallel (rtvec);
+extern rtx_reader *init_rtx_reader_args_cb (int, const char **,
+					    bool (*)(const char *));
+extern rtx_reader *init_rtx_reader_args (int, const char **);
+extern bool read_md_rtx (md_rtx_info *);
+extern unsigned int get_num_insn_codes ();
+
+/* Set this to 0 to disable automatic elision of insn patterns which
+   can never be used in this configuration.  See genconditions.c.
+   Must be set before calling init_md_reader.  */
+extern int insn_elision;
+
+/* Return the C test that says whether a definition rtx can be used,
+   or "" if it can be used unconditionally.  */
+extern const char *get_c_test (rtx);
+
+/* If the C test passed as the argument can be evaluated at compile
+   time, return its truth value; else return -1.  The test must have
+   appeared somewhere in the machine description when genconditions
+   was run.  */
+extern int maybe_eval_c_test (const char *);
+
+/* Add an entry to the table of conditions.  Used by genconditions and
+   by read-rtl.c.  */
+extern void add_c_test (const char *, int);
+
+/* This structure is used internally by gensupport.c and genconditions.c.  */
+struct c_test
+{
+  const char *expr;
+  int value;
+};
+
+#ifdef __HASHTAB_H__
+extern hashval_t hash_c_test (const void *);
+extern int cmp_c_test (const void *, const void *);
+extern void traverse_c_tests (htab_trav, void *);
+#endif
+
+/* Predicate handling: helper functions and data structures.  */
+
+struct pred_data
+{
+  struct pred_data *next;	/* for iterating over the set of all preds */
+  const char *name;		/* predicate name */
+  bool special;			/* special handling of modes? */
+
+  /* data used primarily by genpreds.c */
+  const char *c_block;		/* C test block */
+  rtx exp;			/* RTL test expression */
+
+  /* data used primarily by genrecog.c */
+  enum rtx_code singleton;	/* if pred takes only one code, that code */
+  int num_codes;		/* number of codes accepted */
+  bool allows_non_lvalue;	/* if pred allows non-lvalue expressions */
+  bool allows_non_const;	/* if pred allows non-const expressions */
+  bool codes[NUM_RTX_CODE];	/* set of codes accepted */
+};
+
+extern struct pred_data *first_predicate;
+extern struct pred_data *lookup_predicate (const char *);
+extern void add_predicate_code (struct pred_data *, enum rtx_code);
+extern void add_predicate (struct pred_data *);
+
+#define FOR_ALL_PREDICATES(p) for (p = first_predicate; p; p = p->next)
+
+struct pattern_stats
+{
+  /* The largest match_operand, match_operator or match_parallel
+     number found.  */
+  int max_opno;
+
+  /* The largest match_dup, match_op_dup or match_par_dup number found.  */
+  int max_dup_opno;
+
+  /* The smallest and largest match_scratch number found.  */
+  int min_scratch_opno;
+  int max_scratch_opno;
+
+  /* The number of times match_dup, match_op_dup or match_par_dup appears
+     in the pattern.  */
+  int num_dups;
+
+  /* The number of rtx arguments to the generator function.  */
+  int num_generator_args;
+
+  /* The number of rtx operands in an insn.  */
+  int num_insn_operands;
+
+  /* The number of operand variables that are needed.  */
+  int num_operand_vars;
+};
+
+extern void get_pattern_stats (struct pattern_stats *ranges, rtvec vec);
+extern void compute_test_codes (rtx, file_location, char *);
+extern file_location get_file_location (rtx);
+extern const char *get_emit_function (rtx);
+extern bool needs_barrier_p (rtx);
+extern bool find_optab (optab_pattern *, const char *);
+
+#endif /* GCC_GENSUPPORT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ggc-internal.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ggc-internal.h
new file mode 100644
index 0000000..f27ce29
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ggc-internal.h
@@ -0,0 +1,118 @@
+/* Garbage collection for the GNU compiler.  Internal definitions
+   for ggc-*.c and stringpool.c.
+
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GGC_INTERNAL_H
+#define GCC_GGC_INTERNAL_H
+
+
+/* Call ggc_set_mark on all the roots.  */
+extern void ggc_mark_roots (void);
+
+/* Stringpool.  */
+
+/* Mark the entries in the string pool.  */
+extern void ggc_mark_stringpool	(void);
+
+/* Purge the entries in the string pool.  */
+extern void ggc_purge_stringpool (void);
+
+/* Save and restore the string pool entries for PCH.  */
+
+extern void gt_pch_save_stringpool (void);
+extern void gt_pch_fixup_stringpool (void);
+extern void gt_pch_restore_stringpool (void);
+
+/* PCH and GGC handling for strings, mostly trivial.  */
+extern void gt_pch_p_S (void *, void *, gt_pointer_operator, void *);
+
+/* PCH.  */
+
+struct ggc_pch_data;
+
+/* Return a new ggc_pch_data structure.  */
+extern struct ggc_pch_data *init_ggc_pch (void);
+
+/* The second parameter and third parameters give the address and size
+   of an object.  Update the ggc_pch_data structure with as much of
+   that information as is necessary. The bool argument should be true
+   if the object is a string.  */
+extern void ggc_pch_count_object (struct ggc_pch_data *, void *, size_t, bool);
+
+/* Return the total size of the data to be written to hold all
+   the objects previously passed to ggc_pch_count_object.  */
+extern size_t ggc_pch_total_size (struct ggc_pch_data *);
+
+/* The objects, when read, will most likely be at the address
+   in the second parameter.  */
+extern void ggc_pch_this_base (struct ggc_pch_data *, void *);
+
+/* Assuming that the objects really do end up at the address
+   passed to ggc_pch_this_base, return the address of this object.
+   The bool argument should be true if the object is a string.  */
+extern char *ggc_pch_alloc_object (struct ggc_pch_data *, void *, size_t, bool);
+
+/* Write out any initial information required.  */
+extern void ggc_pch_prepare_write (struct ggc_pch_data *, FILE *);
+
+/* Write out this object, including any padding.  The last argument should be
+   true if the object is a string.  */
+extern void ggc_pch_write_object (struct ggc_pch_data *, FILE *, void *,
+				  void *, size_t, bool);
+
+/* All objects have been written, write out any final information
+   required.  */
+extern void ggc_pch_finish (struct ggc_pch_data *, FILE *);
+
+/* A PCH file has just been read in at the address specified second
+   parameter.  Set up the GC implementation for the new objects.  */
+extern void ggc_pch_read (FILE *, void *);
+
+
+/* Allocation and collection.  */
+
+/* When set, ggc_collect will do collection.  */
+extern bool ggc_force_collect;
+
+extern void ggc_record_overhead (size_t, size_t, void * FINAL_MEM_STAT_DECL);
+
+extern void ggc_free_overhead (void *);
+
+extern void ggc_prune_overhead_list (void);
+
+/* Return the number of bytes allocated at the indicated address.  */
+extern size_t ggc_get_size (const void *);
+
+
+/* Statistics.  */
+
+/* This structure contains the statistics common to all collectors.
+   Particular collectors can extend this structure.  */
+struct ggc_statistics
+{
+  /* At present, we don't really gather any interesting statistics.  */
+  int unused;
+};
+
+/* Used by the various collectors to gather and print statistics that
+   do not depend on the collector in use.  */
+extern void ggc_print_common_statistics (FILE *, ggc_statistics *);
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ggc.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ggc.h
new file mode 100644
index 0000000..60273f2
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ggc.h
@@ -0,0 +1,322 @@
+/* Garbage collection for the GNU compiler.
+
+   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GGC_H
+#define GCC_GGC_H
+
+/* Symbols are marked with `ggc' for `gcc gc' so as not to interfere with
+   an external gc library that might be linked in.  */
+
+/* Internal functions and data structures used by the GTY
+   machinery, including the generated gt*.[hc] files.  */
+
+#include "gtype-desc.h"
+
+/* One of these applies its third parameter (with cookie in the fourth
+   parameter) to each pointer in the object pointed to by the first
+   parameter, using the second parameter.  */
+typedef void (*gt_note_pointers) (void *, void *, gt_pointer_operator,
+				  void *);
+
+/* One of these is called before objects are re-ordered in memory.
+   The first parameter is the original object, the second is the
+   subobject that has had its pointers reordered, the third parameter
+   can compute the new values of a pointer when given the cookie in
+   the fourth parameter.  */
+typedef void (*gt_handle_reorder) (void *, void *, gt_pointer_operator,
+				   void *);
+
+/* Used by the gt_pch_n_* routines.  Register an object in the hash table.  */
+extern int gt_pch_note_object (void *, void *, gt_note_pointers);
+
+/* Used by the gt_pch_n_* routines.  Register that an object has a reorder
+   function.  */
+extern void gt_pch_note_reorder (void *, void *, gt_handle_reorder);
+
+/* generated function to clear caches in gc memory.  */
+extern void gt_clear_caches ();
+
+/* Mark the object in the first parameter and anything it points to.  */
+typedef void (*gt_pointer_walker) (void *);
+
+/* Structures for the easy way to mark roots.
+   In an array, terminated by having base == NULL.  */
+struct ggc_root_tab {
+  void *base;
+  size_t nelt;
+  size_t stride;
+  gt_pointer_walker cb;
+  gt_pointer_walker pchw;
+};
+#define LAST_GGC_ROOT_TAB { NULL, 0, 0, NULL, NULL }
+/* Pointers to arrays of ggc_root_tab, terminated by NULL.  */
+extern const struct ggc_root_tab * const gt_ggc_rtab[];
+extern const struct ggc_root_tab * const gt_ggc_deletable_rtab[];
+extern const struct ggc_root_tab * const gt_pch_scalar_rtab[];
+
+/* If EXPR is not NULL and previously unmarked, mark it and evaluate
+   to true.  Otherwise evaluate to false.  */
+#define ggc_test_and_set_mark(EXPR) \
+  ((EXPR) != NULL && ((void *) (EXPR)) != (void *) 1 && ! ggc_set_mark (EXPR))
+
+#define ggc_mark(EXPR)				\
+  do {						\
+    const void *const a__ = (EXPR);		\
+    if (a__ != NULL && a__ != (void *) 1)	\
+      ggc_set_mark (a__);			\
+  } while (0)
+
+/* Actually set the mark on a particular region of memory, but don't
+   follow pointers.  This function is called by ggc_mark_*.  It
+   returns zero if the object was not previously marked; nonzero if
+   the object was already marked, or if, for any other reason,
+   pointers in this data structure should not be traversed.  */
+extern int ggc_set_mark	(const void *);
+
+/* Return 1 if P has been marked, zero otherwise.
+   P must have been allocated by the GC allocator; it mustn't point to
+   static objects, stack variables, or memory allocated with malloc.  */
+extern int ggc_marked_p	(const void *);
+
+/* PCH and GGC handling for strings, mostly trivial.  */
+extern void gt_pch_n_S (const void *);
+extern void gt_ggc_m_S (const void *);
+
+/* End of GTY machinery API.  */
+
+/* Initialize the string pool.  */
+extern void init_stringpool (void);
+
+/* Initialize the garbage collector.  */
+extern void init_ggc (void);
+
+/* When true, identifier nodes are considered as GC roots.  When
+   false, identifier nodes are treated like any other GC-allocated
+   object, and the identifier hash table is treated as a weak
+   hash.  */
+extern bool ggc_protect_identifiers;
+
+/* Write out all GCed objects to F.  */
+extern void gt_pch_save (FILE *f);
+
+
+/* Allocation.  */
+
+/* The internal primitive.  */
+extern void *ggc_internal_alloc (size_t, void (*)(void *), size_t,
+				 size_t CXX_MEM_STAT_INFO)
+     ATTRIBUTE_MALLOC;
+
+inline void *
+ggc_internal_alloc (size_t s CXX_MEM_STAT_INFO)
+{
+  return ggc_internal_alloc (s, NULL, 0, 1 PASS_MEM_STAT);
+}
+
+extern size_t ggc_round_alloc_size (size_t requested_size);
+
+/* Allocates cleared memory.  */
+extern void *ggc_internal_cleared_alloc (size_t, void (*)(void *),
+					 size_t, size_t
+					 CXX_MEM_STAT_INFO) ATTRIBUTE_MALLOC;
+
+inline void *
+ggc_internal_cleared_alloc (size_t s CXX_MEM_STAT_INFO)
+{
+  return ggc_internal_cleared_alloc (s, NULL, 0, 1 PASS_MEM_STAT);
+}
+
+/* Resize a block.  */
+extern void *ggc_realloc (void *, size_t CXX_MEM_STAT_INFO);
+
+/* Free a block.  To be used when known for certain it's not reachable.  */
+extern void ggc_free (void *);
+
+extern void dump_ggc_loc_statistics (bool);
+
+/* Reallocator.  */
+#define GGC_RESIZEVEC(T, P, N) \
+    ((T *) ggc_realloc ((P), (N) * sizeof (T) MEM_STAT_INFO))
+
+template<typename T>
+void
+finalize (void *p)
+{
+  static_cast<T *> (p)->~T ();
+}
+
+template<typename T>
+inline bool
+need_finalization_p ()
+{
+#if GCC_VERSION >= 4003
+  return !__has_trivial_destructor (T);
+#else
+  return true;
+#endif
+}
+
+template<typename T>
+inline T *
+ggc_alloc (ALONE_CXX_MEM_STAT_INFO)
+{
+  if (need_finalization_p<T> ())
+    return static_cast<T *> (ggc_internal_alloc (sizeof (T), finalize<T>, 0, 1
+						 PASS_MEM_STAT));
+  else
+    return static_cast<T *> (ggc_internal_alloc (sizeof (T), NULL, 0, 1
+						 PASS_MEM_STAT));
+}
+
+template<typename T>
+inline T *
+ggc_cleared_alloc (ALONE_CXX_MEM_STAT_INFO)
+{
+  if (need_finalization_p<T> ())
+    return static_cast<T *> (ggc_internal_cleared_alloc (sizeof (T),
+							 finalize<T>, 0, 1
+							 PASS_MEM_STAT));
+  else
+    return static_cast<T *> (ggc_internal_cleared_alloc (sizeof (T), NULL, 0, 1
+							 PASS_MEM_STAT));
+}
+
+template<typename T>
+inline T *
+ggc_vec_alloc (size_t c CXX_MEM_STAT_INFO)
+{
+  if (need_finalization_p<T> ())
+    return static_cast<T *> (ggc_internal_alloc (c * sizeof (T), finalize<T>,
+						 sizeof (T), c PASS_MEM_STAT));
+  else
+    return static_cast<T *> (ggc_internal_alloc (c * sizeof (T), NULL, 0, 0
+						 PASS_MEM_STAT));
+}
+
+template<typename T>
+inline T *
+ggc_cleared_vec_alloc (size_t c CXX_MEM_STAT_INFO)
+{
+  if (need_finalization_p<T> ())
+    return static_cast<T *> (ggc_internal_cleared_alloc (c * sizeof (T),
+							 finalize<T>,
+							 sizeof (T), c
+							 PASS_MEM_STAT));
+  else
+    return static_cast<T *> (ggc_internal_cleared_alloc (c * sizeof (T), NULL,
+							 0, 0 PASS_MEM_STAT));
+}
+
+inline void *
+ggc_alloc_atomic (size_t s CXX_MEM_STAT_INFO)
+{
+    return ggc_internal_alloc (s PASS_MEM_STAT);
+}
+
+/* Allocate a gc-able string, and fill it with LENGTH bytes from CONTENTS.
+   If LENGTH is -1, then CONTENTS is assumed to be a
+   null-terminated string and the memory sized accordingly.  */
+extern const char *ggc_alloc_string (const char *contents, int length
+                                     CXX_MEM_STAT_INFO);
+
+/* Make a copy of S, in GC-able memory.  */
+#define ggc_strdup(S) ggc_alloc_string ((S), -1 MEM_STAT_INFO)
+
+/* Invoke the collector.  Garbage collection occurs only when this
+   function is called, not during allocations.  */
+extern void ggc_collect	(void);
+
+/* Assume that all GGC memory is reachable and grow the limits for next collection. */
+extern void ggc_grow (void);
+
+/* Register an additional root table.  This can be useful for some
+   plugins.  Does nothing if the passed pointer is NULL. */
+extern void ggc_register_root_tab (const struct ggc_root_tab *);
+
+/* Read objects previously saved with gt_pch_save from F.  */
+extern void gt_pch_restore (FILE *f);
+
+/* Statistics.  */
+
+/* Print allocation statistics.  */
+extern void ggc_print_statistics (void);
+
+extern void stringpool_statistics (void);
+
+/* Heuristics.  */
+extern void init_ggc_heuristics (void);
+
+#define ggc_alloc_rtvec_sized(NELT)				\
+  (rtvec_def *) ggc_internal_alloc (sizeof (struct rtvec_def)		\
+		       + ((NELT) - 1) * sizeof (rtx))		\
+
+/* Memory statistics passing versions of some allocators.  Too few of them to
+   make gengtype produce them, so just define the needed ones here.  */
+inline struct rtx_def *
+ggc_alloc_rtx_def_stat (size_t s CXX_MEM_STAT_INFO)
+{
+  return (struct rtx_def *) ggc_internal_alloc (s PASS_MEM_STAT);
+}
+
+inline union tree_node *
+ggc_alloc_tree_node_stat (size_t s CXX_MEM_STAT_INFO)
+{
+  return (union tree_node *) ggc_internal_alloc (s PASS_MEM_STAT);
+}
+
+inline union tree_node *
+ggc_alloc_cleared_tree_node_stat (size_t s CXX_MEM_STAT_INFO)
+{
+  return (union tree_node *) ggc_internal_cleared_alloc (s PASS_MEM_STAT);
+}
+
+inline gimple *
+ggc_alloc_cleared_gimple_statement_stat (size_t s CXX_MEM_STAT_INFO)
+{
+  return (gimple *) ggc_internal_cleared_alloc (s PASS_MEM_STAT);
+}
+
+inline void
+gt_ggc_mx (const char *s)
+{
+  ggc_test_and_set_mark (const_cast<char *> (s));
+}
+
+inline void
+gt_pch_nx (const char *)
+{
+}
+
+inline void
+gt_ggc_mx (int)
+{
+}
+
+inline void
+gt_pch_nx (int)
+{
+}
+
+inline void
+gt_pch_nx (unsigned int)
+{
+}
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-builder.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-builder.h
new file mode 100644
index 0000000..3383851
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-builder.h
@@ -0,0 +1,34 @@
+/* Header file for high level statement building routines.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+#ifndef GCC_GIMPLE_BUILDER_H
+#define GCC_GIMPLE_BUILDER_H
+
+gassign *build_assign (enum tree_code, tree, int, tree lhs = NULL_TREE);
+gassign *build_assign (enum tree_code, gimple *, int, tree lhs = NULL_TREE);
+gassign *build_assign (enum tree_code, tree, tree, tree lhs = NULL_TREE);
+gassign *build_assign (enum tree_code, gimple *, tree, tree lhs = NULL_TREE);
+gassign *build_assign (enum tree_code, tree, gimple *, tree lhs = NULL_TREE);
+gassign *build_assign (enum tree_code, gimple *, gimple *,
+		       tree lhs = NULL_TREE);
+gassign *build_type_cast (tree, tree, tree lhs = NULL_TREE);
+gassign *build_type_cast (tree, gimple *, tree lhs = NULL_TREE);
+
+#endif /* GCC_GIMPLE_BUILDER_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-expr.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-expr.h
new file mode 100644
index 0000000..1ad1432
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-expr.h
@@ -0,0 +1,178 @@
+/* Header file for gimple decl, type and expressions.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GIMPLE_EXPR_H
+#define GCC_GIMPLE_EXPR_H
+
+extern bool useless_type_conversion_p (tree, tree);
+
+
+extern void gimple_set_body (tree, gimple_seq);
+extern gimple_seq gimple_body (tree);
+extern bool gimple_has_body_p (tree);
+extern const char *gimple_decl_printable_name (tree, int);
+extern tree copy_var_decl (tree, tree, tree);
+extern tree create_tmp_var_name (const char *);
+extern tree create_tmp_var_raw (tree, const char * = NULL);
+extern tree create_tmp_var (tree, const char * = NULL);
+extern tree create_tmp_reg (tree, const char * = NULL);
+extern tree create_tmp_reg_fn (struct function *, tree, const char *);
+
+
+extern void extract_ops_from_tree (tree, enum tree_code *, tree *, tree *,
+				   tree *);
+extern void gimple_cond_get_ops_from_tree (tree, enum tree_code *, tree *,
+					   tree *);
+extern bool is_gimple_lvalue (tree);
+extern bool is_gimple_condexpr (tree);
+extern bool is_gimple_address (const_tree);
+extern bool is_gimple_invariant_address (const_tree);
+extern bool is_gimple_ip_invariant_address (const_tree);
+extern bool is_gimple_min_invariant (const_tree);
+extern bool is_gimple_ip_invariant (const_tree);
+extern bool is_gimple_reg (tree);
+extern bool is_gimple_val (tree);
+extern bool is_gimple_asm_val (tree);
+extern bool is_gimple_min_lval (tree);
+extern bool is_gimple_call_addr (tree);
+extern bool is_gimple_mem_ref_addr (tree);
+extern void flush_mark_addressable_queue (void);
+extern void mark_addressable (tree);
+extern bool is_gimple_reg_rhs (tree);
+
+/* Return true if a conversion from either type of TYPE1 and TYPE2
+   to the other is not required.  Otherwise return false.  */
+
+static inline bool
+types_compatible_p (tree type1, tree type2)
+{
+  return (type1 == type2
+	  || (useless_type_conversion_p (type1, type2)
+	      && useless_type_conversion_p (type2, type1)));
+}
+
+/* Return true if TYPE is a suitable type for a scalar register variable.  */
+
+static inline bool
+is_gimple_reg_type (tree type)
+{
+  return !AGGREGATE_TYPE_P (type);
+}
+
+/* Return true if T is a variable.  */
+
+static inline bool
+is_gimple_variable (tree t)
+{
+  return (TREE_CODE (t) == VAR_DECL
+	  || TREE_CODE (t) == PARM_DECL
+	  || TREE_CODE (t) == RESULT_DECL
+	  || TREE_CODE (t) == SSA_NAME);
+}
+
+/*  Return true if T is a GIMPLE identifier (something with an address).  */
+
+static inline bool
+is_gimple_id (tree t)
+{
+  return (is_gimple_variable (t)
+	  || TREE_CODE (t) == FUNCTION_DECL
+	  || TREE_CODE (t) == LABEL_DECL
+	  || TREE_CODE (t) == CONST_DECL
+	  /* Allow string constants, since they are addressable.  */
+	  || TREE_CODE (t) == STRING_CST);
+}
+
+/* Return true if OP, an SSA name or a DECL is a virtual operand.  */
+
+static inline bool
+virtual_operand_p (tree op)
+{
+  if (TREE_CODE (op) == SSA_NAME)
+    return SSA_NAME_IS_VIRTUAL_OPERAND (op);
+
+  if (TREE_CODE (op) == VAR_DECL)
+    return VAR_DECL_IS_VIRTUAL_OPERAND (op);
+
+  return false;
+}
+
+/*  Return true if T is something whose address can be taken.  */
+
+static inline bool
+is_gimple_addressable (tree t)
+{
+  return (is_gimple_id (t) || handled_component_p (t)
+	  || TREE_CODE (t) == TARGET_MEM_REF
+	  || TREE_CODE (t) == MEM_REF);
+}
+
+/* Return true if T is a valid gimple constant.  */
+
+static inline bool
+is_gimple_constant (const_tree t)
+{
+  switch (TREE_CODE (t))
+    {
+    case INTEGER_CST:
+    case POLY_INT_CST:
+    case REAL_CST:
+    case FIXED_CST:
+    case COMPLEX_CST:
+    case VECTOR_CST:
+    case STRING_CST:
+      return true;
+
+    default:
+      return false;
+    }
+}
+
+/* A wrapper around extract_ops_from_tree with 3 ops, for callers which
+   expect to see only a maximum of two operands.  */
+
+static inline void
+extract_ops_from_tree (tree expr, enum tree_code *code, tree *op0,
+		       tree *op1)
+{
+  tree op2;
+  extract_ops_from_tree (expr, code, op0, op1, &op2);
+  gcc_assert (op2 == NULL_TREE);
+}
+
+/* Given a valid GIMPLE_CALL function address return the FUNCTION_DECL
+   associated with the callee if known.  Otherwise return NULL_TREE.  */
+
+static inline tree
+gimple_call_addr_fndecl (const_tree fn)
+{
+  if (fn && TREE_CODE (fn) == ADDR_EXPR)
+    {
+      tree fndecl = TREE_OPERAND (fn, 0);
+      if (TREE_CODE (fndecl) == MEM_REF
+	  && TREE_CODE (TREE_OPERAND (fndecl, 0)) == ADDR_EXPR
+	  && integer_zerop (TREE_OPERAND (fndecl, 1)))
+	fndecl = TREE_OPERAND (TREE_OPERAND (fndecl, 0), 0);
+      if (TREE_CODE (fndecl) == FUNCTION_DECL)
+	return fndecl;
+    }
+  return NULL_TREE;
+}
+
+#endif /* GCC_GIMPLE_EXPR_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-fold.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-fold.h
new file mode 100644
index 0000000..673d484
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-fold.h
@@ -0,0 +1,164 @@
+/* Gimple folding definitions.
+
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Contributed by Richard Guenther <rguenther@suse.de>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GIMPLE_FOLD_H
+#define GCC_GIMPLE_FOLD_H
+
+extern tree create_tmp_reg_or_ssa_name (tree, gimple *stmt = NULL);
+extern tree canonicalize_constructor_val (tree, tree);
+extern tree get_symbol_constant_value (tree);
+struct c_strlen_data;
+extern bool get_range_strlen (tree, c_strlen_data *, unsigned eltsize);
+extern void gimplify_and_update_call_from_tree (gimple_stmt_iterator *, tree);
+extern bool fold_stmt (gimple_stmt_iterator *);
+extern bool fold_stmt (gimple_stmt_iterator *, tree (*) (tree));
+extern bool fold_stmt_inplace (gimple_stmt_iterator *);
+extern tree maybe_fold_and_comparisons (enum tree_code, tree, tree, 
+					enum tree_code, tree, tree);
+extern tree maybe_fold_or_comparisons (enum tree_code, tree, tree,
+				       enum tree_code, tree, tree);
+extern bool optimize_atomic_compare_exchange_p (gimple *);
+extern void fold_builtin_atomic_compare_exchange (gimple_stmt_iterator *);
+extern bool arith_overflowed_p (enum tree_code, const_tree, const_tree,
+				const_tree);
+extern tree no_follow_ssa_edges (tree);
+extern tree follow_single_use_edges (tree);
+extern tree follow_all_ssa_edges (tree);
+extern tree gimple_fold_stmt_to_constant_1 (gimple *, tree (*) (tree),
+					    tree (*) (tree) = no_follow_ssa_edges);
+extern tree gimple_fold_stmt_to_constant (gimple *, tree (*) (tree));
+extern tree fold_ctor_reference (tree, tree, const poly_uint64&,
+				 const poly_uint64&, tree,
+				 unsigned HOST_WIDE_INT * = NULL);
+extern tree fold_const_aggregate_ref_1 (tree, tree (*) (tree));
+extern tree fold_const_aggregate_ref (tree);
+extern tree gimple_get_virt_method_for_binfo (HOST_WIDE_INT, tree,
+					      bool *can_refer = NULL);
+extern tree gimple_get_virt_method_for_vtable (HOST_WIDE_INT, tree,
+					       unsigned HOST_WIDE_INT,
+					       bool *can_refer = NULL);
+extern tree gimple_fold_indirect_ref (tree);
+extern bool gimple_fold_builtin_sprintf (gimple_stmt_iterator *);
+extern bool gimple_fold_builtin_snprintf (gimple_stmt_iterator *);
+extern bool arith_code_with_undefined_signed_overflow (tree_code);
+extern gimple_seq rewrite_to_defined_overflow (gimple *);
+extern void replace_call_with_value (gimple_stmt_iterator *, tree);
+extern tree tree_vec_extract (gimple_stmt_iterator *, tree, tree, tree, tree);
+
+/* gimple_build, functionally matching fold_buildN, outputs stmts
+   int the provided sequence, matching and simplifying them on-the-fly.
+   Supposed to replace force_gimple_operand (fold_buildN (...), ...).  */
+extern tree gimple_build (gimple_seq *, location_t,
+			  enum tree_code, tree, tree);
+inline tree
+gimple_build (gimple_seq *seq,
+	      enum tree_code code, tree type, tree op0)
+{
+  return gimple_build (seq, UNKNOWN_LOCATION, code, type, op0);
+}
+extern tree gimple_build (gimple_seq *, location_t,
+			  enum tree_code, tree, tree, tree);
+inline tree
+gimple_build (gimple_seq *seq,
+	      enum tree_code code, tree type, tree op0, tree op1)
+{
+  return gimple_build (seq, UNKNOWN_LOCATION, code, type, op0, op1);
+}
+extern tree gimple_build (gimple_seq *, location_t,
+			  enum tree_code, tree, tree, tree, tree);
+inline tree
+gimple_build (gimple_seq *seq,
+	      enum tree_code code, tree type, tree op0, tree op1, tree op2)
+{
+  return gimple_build (seq, UNKNOWN_LOCATION, code, type, op0, op1, op2);
+}
+extern tree gimple_build (gimple_seq *, location_t, combined_fn, tree, tree);
+inline tree
+gimple_build (gimple_seq *seq, combined_fn fn, tree type, tree arg0)
+{
+  return gimple_build (seq, UNKNOWN_LOCATION, fn, type, arg0);
+}
+extern tree gimple_build (gimple_seq *, location_t, combined_fn,
+			  tree, tree, tree);
+inline tree
+gimple_build (gimple_seq *seq, combined_fn fn,
+	      tree type, tree arg0, tree arg1)
+{
+  return gimple_build (seq, UNKNOWN_LOCATION, fn, type, arg0, arg1);
+}
+extern tree gimple_build (gimple_seq *, location_t, combined_fn,
+			  tree, tree, tree, tree);
+inline tree
+gimple_build (gimple_seq *seq, combined_fn fn,
+	      tree type, tree arg0, tree arg1, tree arg2)
+{
+  return gimple_build (seq, UNKNOWN_LOCATION, fn, type, arg0, arg1, arg2);
+}
+
+extern tree gimple_convert (gimple_seq *, location_t, tree, tree);
+inline tree
+gimple_convert (gimple_seq *seq, tree type, tree op)
+{
+  return gimple_convert (seq, UNKNOWN_LOCATION, type, op);
+}
+
+extern tree gimple_convert_to_ptrofftype (gimple_seq *, location_t, tree);
+inline tree
+gimple_convert_to_ptrofftype (gimple_seq *seq, tree op)
+{
+  return gimple_convert_to_ptrofftype (seq, UNKNOWN_LOCATION, op);
+}
+
+extern tree gimple_build_vector_from_val (gimple_seq *, location_t, tree,
+					  tree);
+inline tree
+gimple_build_vector_from_val (gimple_seq *seq, tree type, tree op)
+{
+  return gimple_build_vector_from_val (seq, UNKNOWN_LOCATION, type, op);
+}
+
+class tree_vector_builder;
+extern tree gimple_build_vector (gimple_seq *, location_t,
+				 tree_vector_builder *);
+inline tree
+gimple_build_vector (gimple_seq *seq, tree_vector_builder *builder)
+{
+  return gimple_build_vector (seq, UNKNOWN_LOCATION, builder);
+}
+
+extern bool gimple_stmt_nonnegative_warnv_p (gimple *, bool *, int = 0);
+extern bool gimple_stmt_integer_valued_real_p (gimple *, int = 0);
+
+/* In gimple-match.c.  */
+extern tree gimple_simplify (enum tree_code, tree, tree,
+			     gimple_seq *, tree (*)(tree));
+extern tree gimple_simplify (enum tree_code, tree, tree, tree,
+			     gimple_seq *, tree (*)(tree));
+extern tree gimple_simplify (enum tree_code, tree, tree, tree, tree,
+			     gimple_seq *, tree (*)(tree));
+extern tree gimple_simplify (combined_fn, tree, tree,
+			     gimple_seq *, tree (*)(tree));
+extern tree gimple_simplify (combined_fn, tree, tree, tree,
+			     gimple_seq *, tree (*)(tree));
+extern tree gimple_simplify (combined_fn, tree, tree, tree, tree,
+			     gimple_seq *, tree (*)(tree));
+
+#endif  /* GCC_GIMPLE_FOLD_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-iterator.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-iterator.h
new file mode 100644
index 0000000..ee6f5b1
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-iterator.h
@@ -0,0 +1,397 @@
+/* Header file for gimple iterators.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GIMPLE_ITERATOR_H
+#define GCC_GIMPLE_ITERATOR_H
+
+/* Iterator object for GIMPLE statement sequences.  */
+
+struct gimple_stmt_iterator
+{
+  /* Sequence node holding the current statement.  */
+  gimple_seq_node ptr;
+
+  /* Sequence and basic block holding the statement.  These fields
+     are necessary to handle edge cases such as when statement is
+     added to an empty basic block or when the last statement of a
+     block/sequence is removed.  */
+  gimple_seq *seq;
+  basic_block bb;
+};
+
+/* Iterator over GIMPLE_PHI statements.  */
+struct gphi_iterator : public gimple_stmt_iterator
+{
+  gphi *phi () const
+  {
+    return as_a <gphi *> (ptr);
+  }
+};
+ 
+enum gsi_iterator_update
+{
+  GSI_NEW_STMT,		/* Only valid when single statement is added, move
+			   iterator to it.  */
+  GSI_SAME_STMT,	/* Leave the iterator at the same statement.  */
+  GSI_CONTINUE_LINKING	/* Move iterator to whatever position is suitable
+			   for linking other statements in the same
+			   direction.  */
+};
+
+extern void gsi_insert_seq_before_without_update (gimple_stmt_iterator *,
+						  gimple_seq,
+						  enum gsi_iterator_update);
+extern void gsi_insert_seq_before (gimple_stmt_iterator *, gimple_seq,
+				   enum gsi_iterator_update);
+extern void gsi_insert_seq_after_without_update (gimple_stmt_iterator *,
+						 gimple_seq,
+						 enum gsi_iterator_update);
+extern void gsi_insert_seq_after (gimple_stmt_iterator *, gimple_seq,
+				  enum gsi_iterator_update);
+extern gimple_seq gsi_split_seq_after (gimple_stmt_iterator);
+extern void gsi_set_stmt (gimple_stmt_iterator *, gimple *);
+extern void gsi_split_seq_before (gimple_stmt_iterator *, gimple_seq *);
+extern bool gsi_replace (gimple_stmt_iterator *, gimple *, bool);
+extern void gsi_replace_with_seq (gimple_stmt_iterator *, gimple_seq, bool);
+extern void gsi_insert_before_without_update (gimple_stmt_iterator *, gimple *,
+					      enum gsi_iterator_update);
+extern void gsi_insert_before (gimple_stmt_iterator *, gimple *,
+			       enum gsi_iterator_update);
+extern void gsi_insert_after_without_update (gimple_stmt_iterator *, gimple *,
+					     enum gsi_iterator_update);
+extern void gsi_insert_after (gimple_stmt_iterator *, gimple *,
+			      enum gsi_iterator_update);
+extern bool gsi_remove (gimple_stmt_iterator *, bool);
+extern gimple_stmt_iterator gsi_for_stmt (gimple *);
+extern gimple_stmt_iterator gsi_for_stmt (gimple *, gimple_seq *);
+extern gphi_iterator gsi_for_phi (gphi *);
+extern void gsi_move_after (gimple_stmt_iterator *, gimple_stmt_iterator *);
+extern void gsi_move_before (gimple_stmt_iterator *, gimple_stmt_iterator *);
+extern void gsi_move_to_bb_end (gimple_stmt_iterator *, basic_block);
+extern void gsi_insert_on_edge (edge, gimple *);
+extern void gsi_insert_seq_on_edge (edge, gimple_seq);
+extern basic_block gsi_insert_on_edge_immediate (edge, gimple *);
+extern basic_block gsi_insert_seq_on_edge_immediate (edge, gimple_seq);
+extern void gsi_commit_edge_inserts (void);
+extern void gsi_commit_one_edge_insert (edge, basic_block *);
+extern gphi_iterator gsi_start_phis (basic_block);
+extern void update_modified_stmts (gimple_seq);
+
+/* Return a new iterator pointing to GIMPLE_SEQ's first statement.  */
+
+static inline gimple_stmt_iterator
+gsi_start_1 (gimple_seq *seq)
+{
+  gimple_stmt_iterator i;
+
+  i.ptr = gimple_seq_first (*seq);
+  i.seq = seq;
+  i.bb = i.ptr ? gimple_bb (i.ptr) : NULL;
+
+  return i;
+}
+
+#define gsi_start(x) gsi_start_1 (&(x))
+
+static inline gimple_stmt_iterator
+gsi_none (void)
+{
+  gimple_stmt_iterator i;
+  i.ptr = NULL;
+  i.seq = NULL;
+  i.bb = NULL;
+  return i;
+}
+
+/* Return a new iterator pointing to the first statement in basic block BB.  */
+
+static inline gimple_stmt_iterator
+gsi_start_bb (basic_block bb)
+{
+  gimple_stmt_iterator i;
+  gimple_seq *seq;
+
+  seq = bb_seq_addr (bb);
+  i.ptr = gimple_seq_first (*seq);
+  i.seq = seq;
+  i.bb = bb;
+
+  return i;
+}
+
+gimple_stmt_iterator gsi_start_edge (edge e);
+
+/* Return a new iterator initially pointing to GIMPLE_SEQ's last statement.  */
+
+static inline gimple_stmt_iterator
+gsi_last_1 (gimple_seq *seq)
+{
+  gimple_stmt_iterator i;
+
+  i.ptr = gimple_seq_last (*seq);
+  i.seq = seq;
+  i.bb = i.ptr ? gimple_bb (i.ptr) : NULL;
+
+  return i;
+}
+
+#define gsi_last(x) gsi_last_1 (&(x))
+
+/* Return a new iterator pointing to the last statement in basic block BB.  */
+
+static inline gimple_stmt_iterator
+gsi_last_bb (basic_block bb)
+{
+  gimple_stmt_iterator i;
+  gimple_seq *seq;
+
+  seq = bb_seq_addr (bb);
+  i.ptr = gimple_seq_last (*seq);
+  i.seq = seq;
+  i.bb = bb;
+
+  return i;
+}
+
+/* Return true if I is at the end of its sequence.  */
+
+static inline bool
+gsi_end_p (gimple_stmt_iterator i)
+{
+  return i.ptr == NULL;
+}
+
+/* Return true if I is one statement before the end of its sequence.  */
+
+static inline bool
+gsi_one_before_end_p (gimple_stmt_iterator i)
+{
+  return i.ptr != NULL && i.ptr->next == NULL;
+}
+
+/* Advance the iterator to the next gimple statement.  */
+
+static inline void
+gsi_next (gimple_stmt_iterator *i)
+{
+  i->ptr = i->ptr->next;
+}
+
+/* Advance the iterator to the previous gimple statement.  */
+
+static inline void
+gsi_prev (gimple_stmt_iterator *i)
+{
+  gimple *prev = i->ptr->prev;
+  if (prev->next)
+    i->ptr = prev;
+  else
+    i->ptr = NULL;
+}
+
+/* Return the current stmt.  */
+
+static inline gimple *
+gsi_stmt (gimple_stmt_iterator i)
+{
+  return i.ptr;
+}
+
+/* Return a block statement iterator that points to the first
+   non-label statement in block BB.  */
+
+static inline gimple_stmt_iterator
+gsi_after_labels (basic_block bb)
+{
+  gimple_stmt_iterator gsi = gsi_start_bb (bb);
+
+  for (; !gsi_end_p (gsi); )
+    {
+      if (gimple_code (gsi_stmt (gsi)) == GIMPLE_LABEL)
+	gsi_next (&gsi);
+      else
+	break;
+    }
+
+  return gsi;
+}
+
+/* Advance the iterator to the next non-debug gimple statement.  */
+
+static inline void
+gsi_next_nondebug (gimple_stmt_iterator *i)
+{
+  do
+    {
+      gsi_next (i);
+    }
+  while (!gsi_end_p (*i) && is_gimple_debug (gsi_stmt (*i)));
+}
+
+/* Advance the iterator to the previous non-debug gimple statement.  */
+
+static inline void
+gsi_prev_nondebug (gimple_stmt_iterator *i)
+{
+  do
+    {
+      gsi_prev (i);
+    }
+  while (!gsi_end_p (*i) && is_gimple_debug (gsi_stmt (*i)));
+}
+
+/* Return a new iterator pointing to the first non-debug statement in
+   SEQ.  */
+
+static inline gimple_stmt_iterator
+gsi_start_nondebug (gimple_seq seq)
+{
+  gimple_stmt_iterator gsi = gsi_start (seq);
+  if (!gsi_end_p (gsi) && is_gimple_debug (gsi_stmt (gsi)))
+    gsi_next_nondebug (&gsi);
+
+  return gsi;
+}
+
+/* Return a new iterator pointing to the first non-debug statement in
+   basic block BB.  */
+
+static inline gimple_stmt_iterator
+gsi_start_nondebug_bb (basic_block bb)
+{
+  gimple_stmt_iterator i = gsi_start_bb (bb);
+
+  if (!gsi_end_p (i) && is_gimple_debug (gsi_stmt (i)))
+    gsi_next_nondebug (&i);
+
+  return i;
+}
+
+/* Return a new iterator pointing to the first non-debug non-label statement in
+   basic block BB.  */
+
+static inline gimple_stmt_iterator
+gsi_start_nondebug_after_labels_bb (basic_block bb)
+{
+  gimple_stmt_iterator i = gsi_after_labels (bb);
+
+  if (!gsi_end_p (i) && is_gimple_debug (gsi_stmt (i)))
+    gsi_next_nondebug (&i);
+
+  return i;
+}
+
+/* Return a new iterator pointing to the last non-debug statement in
+   basic block BB.  */
+
+static inline gimple_stmt_iterator
+gsi_last_nondebug_bb (basic_block bb)
+{
+  gimple_stmt_iterator i = gsi_last_bb (bb);
+
+  if (!gsi_end_p (i) && is_gimple_debug (gsi_stmt (i)))
+    gsi_prev_nondebug (&i);
+
+  return i;
+}
+
+/* Return true if I is followed only by debug statements in its
+   sequence.  */
+
+static inline bool
+gsi_one_nondebug_before_end_p (gimple_stmt_iterator i)
+{
+  if (gsi_one_before_end_p (i))
+    return true;
+  if (gsi_end_p (i))
+    return false;
+  gsi_next_nondebug (&i);
+  return gsi_end_p (i);
+}
+
+/* Iterates I statement iterator to the next non-virtual statement.  */
+
+static inline void
+gsi_next_nonvirtual_phi (gphi_iterator *i)
+{
+  gphi *phi;
+
+  if (gsi_end_p (*i))
+    return;
+
+  phi = i->phi ();
+  gcc_assert (phi != NULL);
+
+  while (virtual_operand_p (gimple_phi_result (phi)))
+    {
+      gsi_next (i);
+
+      if (gsi_end_p (*i))
+	return;
+
+      phi = i->phi ();
+    }
+}
+
+/* Return the basic block associated with this iterator.  */
+
+static inline basic_block
+gsi_bb (gimple_stmt_iterator i)
+{
+  return i.bb;
+}
+
+/* Return the sequence associated with this iterator.  */
+
+static inline gimple_seq
+gsi_seq (gimple_stmt_iterator i)
+{
+  return *i.seq;
+}
+
+/* Determine whether SEQ is a nondebug singleton.  */
+
+static inline bool
+gimple_seq_nondebug_singleton_p (gimple_seq seq)
+{
+  gimple_stmt_iterator gsi;
+
+  /* Find a nondebug gimple.  */
+  gsi.ptr = gimple_seq_first (seq);
+  gsi.seq = &seq;
+  gsi.bb = NULL;
+  while (!gsi_end_p (gsi)
+	 && is_gimple_debug (gsi_stmt (gsi)))
+    gsi_next (&gsi);
+
+  /* No nondebug gimple found, not a singleton.  */
+  if (gsi_end_p (gsi))
+    return false;
+
+  /* Find a next nondebug gimple.  */
+  gsi_next (&gsi);
+  while (!gsi_end_p (gsi)
+	 && is_gimple_debug (gsi_stmt (gsi)))
+    gsi_next (&gsi);
+
+  /* Only a singleton if there's no next nondebug gimple.  */
+  return gsi_end_p (gsi);
+}
+
+#endif /* GCC_GIMPLE_ITERATOR_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-low.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-low.h
new file mode 100644
index 0000000..89317c9
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-low.h
@@ -0,0 +1,28 @@
+/* Header file for gimple lowering pass.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GIMPLE_LOW_H
+#define GCC_GIMPLE_LOW_H
+
+extern bool gimple_stmt_may_fallthru (gimple *);
+extern bool gimple_seq_may_fallthru (gimple_seq);
+extern void record_vars_into (tree, tree);
+extern void record_vars (tree);
+
+#endif /* GCC_GIMPLE_LOW_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-match.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-match.h
new file mode 100644
index 0000000..22fa86c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-match.h
@@ -0,0 +1,344 @@
+/* Gimple simplify definitions.
+
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Contributed by Richard Guenther <rguenther@suse.de>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GIMPLE_MATCH_H
+#define GCC_GIMPLE_MATCH_H
+
+
+/* Helper to transparently allow tree codes and builtin function codes
+   exist in one storage entity.  */
+class code_helper
+{
+public:
+  code_helper () {}
+  code_helper (tree_code code) : rep ((int) code) {}
+  code_helper (combined_fn fn) : rep (-(int) fn) {}
+  operator tree_code () const { return (tree_code) rep; }
+  operator combined_fn () const { return (combined_fn) -rep; }
+  bool is_tree_code () const { return rep > 0; }
+  bool is_fn_code () const { return rep < 0; }
+  int get_rep () const { return rep; }
+private:
+  int rep;
+};
+
+/* Represents the condition under which an operation should happen,
+   and the value to use otherwise.  The condition applies elementwise
+   (as for VEC_COND_EXPR) if the values are vectors.  */
+struct gimple_match_cond
+{
+  enum uncond { UNCOND };
+
+  /* Build an unconditional op.  */
+  gimple_match_cond (uncond) : cond (NULL_TREE), else_value (NULL_TREE) {}
+  gimple_match_cond (tree, tree);
+
+  gimple_match_cond any_else () const;
+
+  /* The condition under which the operation occurs, or NULL_TREE
+     if the operation is unconditional.  */
+  tree cond;
+
+  /* The value to use when the condition is false.  This is NULL_TREE if
+     the operation is unconditional or if the value doesn't matter.  */
+  tree else_value;
+};
+
+inline
+gimple_match_cond::gimple_match_cond (tree cond_in, tree else_value_in)
+  : cond (cond_in), else_value (else_value_in)
+{
+}
+
+/* Return a gimple_match_cond with the same condition but with an
+   arbitrary ELSE_VALUE.  */
+
+inline gimple_match_cond
+gimple_match_cond::any_else () const
+{
+  return gimple_match_cond (cond, NULL_TREE);
+}
+
+/* Represents an operation to be simplified, or the result of the
+   simplification.  */
+struct gimple_match_op
+{
+  gimple_match_op ();
+  gimple_match_op (const gimple_match_cond &, code_helper, tree, unsigned int);
+  gimple_match_op (const gimple_match_cond &,
+		   code_helper, tree, tree);
+  gimple_match_op (const gimple_match_cond &,
+		   code_helper, tree, tree, tree);
+  gimple_match_op (const gimple_match_cond &,
+		   code_helper, tree, tree, tree, tree);
+  gimple_match_op (const gimple_match_cond &,
+		   code_helper, tree, tree, tree, tree, tree);
+  gimple_match_op (const gimple_match_cond &,
+		   code_helper, tree, tree, tree, tree, tree, tree);
+
+  void set_op (code_helper, tree, unsigned int);
+  void set_op (code_helper, tree, tree);
+  void set_op (code_helper, tree, tree, tree);
+  void set_op (code_helper, tree, tree, tree, tree);
+  void set_op (code_helper, tree, tree, tree, tree, bool);
+  void set_op (code_helper, tree, tree, tree, tree, tree);
+  void set_op (code_helper, tree, tree, tree, tree, tree, tree);
+  void set_value (tree);
+
+  tree op_or_null (unsigned int) const;
+
+  /* The maximum value of NUM_OPS.  */
+  static const unsigned int MAX_NUM_OPS = 5;
+
+  /* The conditions under which the operation is performed, and the value to
+     use as a fallback.  */
+  gimple_match_cond cond;
+
+  /* The operation being performed.  */
+  code_helper code;
+
+  /* The type of the result.  */
+  tree type;
+
+  /* For a BIT_FIELD_REF, whether the group of bits is stored in reverse order
+     from the target order.  */
+  bool reverse;
+
+  /* The number of operands to CODE.  */
+  unsigned int num_ops;
+
+  /* The operands to CODE.  Only the first NUM_OPS entries are meaningful.  */
+  tree ops[MAX_NUM_OPS];
+};
+
+inline
+gimple_match_op::gimple_match_op ()
+  : cond (gimple_match_cond::UNCOND), type (NULL_TREE), reverse (false),
+    num_ops (0)
+{
+}
+
+/* Constructor that takes the condition, code, type and number of
+   operands, but leaves the caller to fill in the operands.  */
+
+inline
+gimple_match_op::gimple_match_op (const gimple_match_cond &cond_in,
+				  code_helper code_in, tree type_in,
+				  unsigned int num_ops_in)
+  : cond (cond_in), code (code_in), type (type_in), reverse (false),
+    num_ops (num_ops_in)
+{
+}
+
+/* Constructors for various numbers of operands.  */
+
+inline
+gimple_match_op::gimple_match_op (const gimple_match_cond &cond_in,
+				  code_helper code_in, tree type_in,
+				  tree op0)
+  : cond (cond_in), code (code_in), type (type_in), reverse (false),
+    num_ops (1)
+{
+  ops[0] = op0;
+}
+
+inline
+gimple_match_op::gimple_match_op (const gimple_match_cond &cond_in,
+				  code_helper code_in, tree type_in,
+				  tree op0, tree op1)
+  : cond (cond_in), code (code_in), type (type_in), reverse (false), 
+    num_ops (2)
+{
+  ops[0] = op0;
+  ops[1] = op1;
+}
+
+inline
+gimple_match_op::gimple_match_op (const gimple_match_cond &cond_in,
+				  code_helper code_in, tree type_in,
+				  tree op0, tree op1, tree op2)
+  : cond (cond_in), code (code_in), type (type_in), reverse (false),
+    num_ops (3)
+{
+  ops[0] = op0;
+  ops[1] = op1;
+  ops[2] = op2;
+}
+
+inline
+gimple_match_op::gimple_match_op (const gimple_match_cond &cond_in,
+				  code_helper code_in, tree type_in,
+				  tree op0, tree op1, tree op2, tree op3)
+  : cond (cond_in), code (code_in), type (type_in), reverse (false),
+    num_ops (4)
+{
+  ops[0] = op0;
+  ops[1] = op1;
+  ops[2] = op2;
+  ops[3] = op3;
+}
+
+inline
+gimple_match_op::gimple_match_op (const gimple_match_cond &cond_in,
+				  code_helper code_in, tree type_in,
+				  tree op0, tree op1, tree op2, tree op3,
+				  tree op4)
+  : cond (cond_in), code (code_in), type (type_in), reverse (false),
+    num_ops (5)
+{
+  ops[0] = op0;
+  ops[1] = op1;
+  ops[2] = op2;
+  ops[3] = op3;
+  ops[4] = op4;
+}
+
+/* Change the operation performed to CODE_IN, the type of the result to
+   TYPE_IN, and the number of operands to NUM_OPS_IN.  The caller needs
+   to set the operands itself.  */
+
+inline void
+gimple_match_op::set_op (code_helper code_in, tree type_in,
+			 unsigned int num_ops_in)
+{
+  code = code_in;
+  type = type_in;
+  num_ops = num_ops_in;
+}
+
+/* Functions for changing the operation performed, for various numbers
+   of operands.  */
+
+inline void
+gimple_match_op::set_op (code_helper code_in, tree type_in, tree op0)
+{
+  code = code_in;
+  type = type_in;
+  num_ops = 1;
+  ops[0] = op0;
+}
+
+inline void
+gimple_match_op::set_op (code_helper code_in, tree type_in, tree op0, tree op1)
+{
+  code = code_in;
+  type = type_in;
+  num_ops = 2;
+  ops[0] = op0;
+  ops[1] = op1;
+}
+
+inline void
+gimple_match_op::set_op (code_helper code_in, tree type_in,
+			 tree op0, tree op1, tree op2)
+{
+  code = code_in;
+  type = type_in;
+  num_ops = 3;
+  ops[0] = op0;
+  ops[1] = op1;
+  ops[2] = op2;
+}
+
+inline void
+gimple_match_op::set_op (code_helper code_in, tree type_in,
+			 tree op0, tree op1, tree op2, bool reverse_in)
+{
+  code = code_in;
+  type = type_in;
+  reverse = reverse_in;
+  num_ops = 3;
+  ops[0] = op0;
+  ops[1] = op1;
+  ops[2] = op2;
+}
+
+inline void
+gimple_match_op::set_op (code_helper code_in, tree type_in,
+			 tree op0, tree op1, tree op2, tree op3)
+{
+  code = code_in;
+  type = type_in;
+  num_ops = 4;
+  ops[0] = op0;
+  ops[1] = op1;
+  ops[2] = op2;
+  ops[3] = op3;
+}
+
+inline void
+gimple_match_op::set_op (code_helper code_in, tree type_in,
+			 tree op0, tree op1, tree op2, tree op3, tree op4)
+{
+  code = code_in;
+  type = type_in;
+  num_ops = 5;
+  ops[0] = op0;
+  ops[1] = op1;
+  ops[2] = op2;
+  ops[3] = op3;
+  ops[4] = op4;
+}
+
+/* Set the "operation" to be the single value VALUE, such as a constant
+   or SSA_NAME.  */
+
+inline void
+gimple_match_op::set_value (tree value)
+{
+  set_op (TREE_CODE (value), TREE_TYPE (value), value);
+}
+
+/* Return the value of operand I, or null if there aren't that many
+   operands.  */
+
+inline tree
+gimple_match_op::op_or_null (unsigned int i) const
+{
+  return i < num_ops ? ops[i] : NULL_TREE;
+}
+
+/* Return whether OP is a non-expression result and a gimple value.  */
+
+inline bool
+gimple_simplified_result_is_gimple_val (const gimple_match_op *op)
+{
+  return (op->code.is_tree_code ()
+	  && (TREE_CODE_LENGTH ((tree_code) op->code) == 0
+	      || ((tree_code) op->code) == ADDR_EXPR)
+	  && is_gimple_val (op->ops[0]));
+}
+
+extern tree (*mprts_hook) (gimple_match_op *);
+
+bool gimple_simplify (gimple *, gimple_match_op *, gimple_seq *,
+		      tree (*)(tree), tree (*)(tree));
+bool gimple_resimplify1 (gimple_seq *, gimple_match_op *, tree (*)(tree));
+bool gimple_resimplify2 (gimple_seq *, gimple_match_op *, tree (*)(tree));
+bool gimple_resimplify3 (gimple_seq *, gimple_match_op *, tree (*)(tree));
+bool gimple_resimplify4 (gimple_seq *, gimple_match_op *, tree (*)(tree));
+bool gimple_resimplify5 (gimple_seq *, gimple_match_op *, tree (*)(tree));
+tree maybe_push_res_to_seq (gimple_match_op *, gimple_seq *,
+			    tree res = NULL_TREE);
+void maybe_build_generic_op (gimple_match_op *);
+
+
+#endif  /* GCC_GIMPLE_MATCH_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-predict.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-predict.h
new file mode 100644
index 0000000..761098b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-predict.h
@@ -0,0 +1,91 @@
+/* Gimple prediction routines.
+
+   Copyright (C) 2007-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GIMPLE_PREDICT_H
+#define GCC_GIMPLE_PREDICT_H
+
+#include "predict.h"
+
+/* Return the predictor of GIMPLE_PREDICT statement GS.  */
+
+static inline enum br_predictor
+gimple_predict_predictor (gimple *gs)
+{
+  GIMPLE_CHECK (gs, GIMPLE_PREDICT);
+  return (enum br_predictor) (gs->subcode & ~GF_PREDICT_TAKEN);
+}
+
+
+/* Set the predictor of GIMPLE_PREDICT statement GS to PREDICT.  */
+
+static inline void
+gimple_predict_set_predictor (gimple *gs, enum br_predictor predictor)
+{
+  GIMPLE_CHECK (gs, GIMPLE_PREDICT);
+  gs->subcode = (gs->subcode & GF_PREDICT_TAKEN)
+		       | (unsigned) predictor;
+}
+
+
+/* Return the outcome of GIMPLE_PREDICT statement GS.  */
+
+static inline enum prediction
+gimple_predict_outcome (gimple *gs)
+{
+  GIMPLE_CHECK (gs, GIMPLE_PREDICT);
+  return (gs->subcode & GF_PREDICT_TAKEN) ? TAKEN : NOT_TAKEN;
+}
+
+
+/* Set the outcome of GIMPLE_PREDICT statement GS to OUTCOME.  */
+
+static inline void
+gimple_predict_set_outcome (gimple *gs, enum prediction outcome)
+{
+  GIMPLE_CHECK (gs, GIMPLE_PREDICT);
+  if (outcome == TAKEN)
+    gs->subcode |= GF_PREDICT_TAKEN;
+  else
+    gs->subcode &= ~GF_PREDICT_TAKEN;
+}
+
+/* Build a GIMPLE_PREDICT statement.  PREDICT is one of the predictors from
+   predict.def, OUTCOME is NOT_TAKEN or TAKEN.  */
+
+inline gimple *
+gimple_build_predict (enum br_predictor predictor, enum prediction outcome)
+{
+  gimple *p = gimple_alloc (GIMPLE_PREDICT, 0);
+  /* Ensure all the predictors fit into the lower bits of the subcode.  */
+  gcc_assert ((int) END_PREDICTORS <= GF_PREDICT_TAKEN);
+  gimple_predict_set_predictor (p, predictor);
+  gimple_predict_set_outcome (p, outcome);
+  return p;
+}
+
+/* Return true if GS is a GIMPLE_PREDICT statement.  */
+
+static inline bool
+is_gimple_predict (const gimple *gs)
+{
+  return gimple_code (gs) == GIMPLE_PREDICT;
+}
+
+#endif  /* GCC_GIMPLE_PREDICT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-pretty-print.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-pretty-print.h
new file mode 100644
index 0000000..8d8e105
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-pretty-print.h
@@ -0,0 +1,40 @@
+/* Various declarations for pretty formatting of GIMPLE statements and
+   expressions.
+   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GIMPLE_PRETTY_PRINT_H
+#define GCC_GIMPLE_PRETTY_PRINT_H
+
+#include "tree-pretty-print.h"
+
+/* In gimple-pretty-print.c  */
+extern void debug_gimple_stmt (gimple *);
+extern void debug_gimple_seq (gimple_seq);
+extern void print_gimple_seq (FILE *, gimple_seq, int, dump_flags_t);
+extern void print_gimple_stmt (FILE *, gimple *, int, dump_flags_t = TDF_NONE);
+extern void debug (gimple &ref);
+extern void debug (gimple *ptr);
+extern void print_gimple_expr (FILE *, gimple *, int, dump_flags_t = TDF_NONE);
+extern void pp_gimple_stmt_1 (pretty_printer *, gimple *, int, dump_flags_t);
+extern void gimple_dump_bb (FILE *, basic_block, int, dump_flags_t);
+extern void gimple_dump_bb_for_graph (pretty_printer *, basic_block);
+extern void dump_ssaname_info_to_file (FILE *, tree, int);
+extern void percent_G_format (text_info *);
+
+#endif /* ! GCC_GIMPLE_PRETTY_PRINT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-ssa-evrp-analyze.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-ssa-evrp-analyze.h
new file mode 100644
index 0000000..1157027
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-ssa-evrp-analyze.h
@@ -0,0 +1,78 @@
+/* Support routines for Value Range Propagation (VRP).
+   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GIMPLE_SSA_EVRP_ANALYZE_H
+#define GCC_GIMPLE_SSA_EVRP_ANALYZE_H
+
+class evrp_range_analyzer
+{
+ public:
+  evrp_range_analyzer (bool update_global_ranges);
+  ~evrp_range_analyzer (void)
+  {
+    delete vr_values;
+    stack.release ();
+  }
+
+  void enter (basic_block);
+  void push_marker (void);
+  void pop_to_marker (void);
+  void leave (basic_block);
+  void record_ranges_from_stmt (gimple *, bool);
+
+  /* Main interface to retrieve range information.  */
+  value_range *get_value_range (const_tree op)
+    { return vr_values->get_value_range (op); }
+
+  /* Record a new unwindable range.  */
+  void push_value_range (tree var, value_range *vr);
+
+  /* Dump all the current value ranges.  This is primarily
+     a debugging interface.  */
+  void dump_all_value_ranges (FILE *fp)
+    { vr_values->dump_all_value_ranges (fp); }
+
+  /* A bit of a wart.  This should ideally go away.  */
+  void vrp_visit_cond_stmt (gcond *cond, edge *e)
+    { return vr_values->vrp_visit_cond_stmt (cond, e); }
+
+  /* Get the underlying vr_values class instance.  If TRANSFER is
+     true, then we are transferring ownership.  Else we keep ownership.
+
+     This should be converted to a unique_ptr.  */
+  class vr_values *get_vr_values (void) { return vr_values; }
+
+ private:
+  DISABLE_COPY_AND_ASSIGN (evrp_range_analyzer);
+  class vr_values *vr_values;
+
+  value_range *pop_value_range (tree var);
+  value_range *try_find_new_range (tree, tree op, tree_code code, tree limit);
+  void record_ranges_from_incoming_edge (basic_block);
+  void record_ranges_from_phis (basic_block);
+  void set_ssa_range_info (tree, value_range *);
+
+  /* STACK holds the old VR.  */
+  auto_vec<std::pair <tree, value_range*> > stack;
+
+  /* True if we are updating global ranges, false otherwise.  */
+  bool m_update_global_ranges;
+};
+
+#endif /* GCC_GIMPLE_SSA_EVRP_ANALYZE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-ssa-warn-restrict.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-ssa-warn-restrict.h
new file mode 100644
index 0000000..47835de
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-ssa-warn-restrict.h
@@ -0,0 +1,26 @@
+/* Warn on violations of the restrict qualifier.
+   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Contributed by Martin Sebor <msebor@redhat.com>.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it under
+   the terms of the GNU General Public License as published by the Free
+   Software Foundation; either version 3, or (at your option) any later
+   version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or
+   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+   for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GIMPLE_SSA_WARN_RESTRICT_H
+
+extern int check_bounds_or_overlap (gimple *, tree, tree, tree, tree,
+				    bool = false, bool = true);
+
+#endif /* GIMPLE_SSA_WARN_RESTRICT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-ssa.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-ssa.h
new file mode 100644
index 0000000..227f58c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-ssa.h
@@ -0,0 +1,201 @@
+/* Header file for routines that straddle the border between GIMPLE and
+   SSA in gimple.
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GIMPLE_SSA_H
+#define GCC_GIMPLE_SSA_H
+
+#include "tree-ssa-operands.h"
+
+/* This structure is used to map a gimple statement to a label,
+   or list of labels to represent transaction restart.  */
+
+struct GTY((for_user)) tm_restart_node {
+  gimple *stmt;
+  tree label_or_list;
+};
+
+/* Hasher for tm_restart_node.  */
+
+struct tm_restart_hasher : ggc_ptr_hash<tm_restart_node>
+{
+  static hashval_t hash (tm_restart_node *n) { return htab_hash_pointer (n); }
+
+  static bool
+  equal (tm_restart_node *a, tm_restart_node *b)
+  {
+    return a == b;
+  }
+};
+
+extern void gt_ggc_mx (gimple *&);
+extern void gt_pch_nx (gimple *&);
+
+struct ssa_name_hasher : ggc_ptr_hash<tree_node>
+{
+  /* Hash a tree in a uid_decl_map.  */
+
+  static hashval_t
+  hash (tree item)
+  {
+    return item->ssa_name.var->decl_minimal.uid;
+  }
+
+  /* Return true if the DECL_UID in both trees are equal.  */
+
+  static bool
+  equal (tree a, tree b)
+{
+  return (a->ssa_name.var->decl_minimal.uid == b->ssa_name.var->decl_minimal.uid);
+}
+};
+
+/* Gimple dataflow datastructure. All publicly available fields shall have
+   gimple_ accessor defined, all publicly modifiable fields should have
+   gimple_set accessor.  */
+struct GTY(()) gimple_df {
+  /* Array of all SSA_NAMEs used in the function.  */
+  vec<tree, va_gc> *ssa_names;
+
+  /* Artificial variable used for the virtual operand FUD chain.  */
+  tree vop;
+
+  /* The PTA solution for the ESCAPED artificial variable.  */
+  struct pt_solution escaped;
+
+  /* A map of decls to artificial ssa-names that point to the partition
+     of the decl.  */
+  hash_map<tree, tree> * GTY((skip(""))) decls_to_pointers;
+
+  /* Free list of SSA_NAMEs.  */
+  vec<tree, va_gc> *free_ssanames;
+
+  /* Queue of SSA_NAMEs to be freed at the next opportunity.  */
+  vec<tree, va_gc> *free_ssanames_queue;
+
+  /* Hashtable holding definition for symbol.  If this field is not NULL, it
+     means that the first reference to this variable in the function is a
+     USE or a VUSE.  In those cases, the SSA renamer creates an SSA name
+     for this variable with an empty defining statement.  */
+  hash_table<ssa_name_hasher> *default_defs;
+
+  /* True if there are any symbols that need to be renamed.  */
+  unsigned int ssa_renaming_needed : 1;
+
+  /* True if all virtual operands need to be renamed.  */
+  unsigned int rename_vops : 1;
+
+  /* True if the code is in ssa form.  */
+  unsigned int in_ssa_p : 1;
+
+  /* True if IPA points-to information was computed for this function.  */
+  unsigned int ipa_pta : 1;
+
+  struct ssa_operands ssa_operands;
+
+  /* Map gimple stmt to tree label (or list of labels) for transaction
+     restart and abort.  */
+  hash_table<tm_restart_hasher> *tm_restart;
+};
+
+
+/* Return true when gimple SSA form was built.
+   gimple_in_ssa_p is queried by gimplifier in various early stages before SSA
+   infrastructure is initialized.  Check for presence of the datastructures
+   at first place.  */
+static inline bool
+gimple_in_ssa_p (const struct function *fun)
+{
+  return fun && fun->gimple_df && fun->gimple_df->in_ssa_p;
+}
+
+/* Artificial variable used for the virtual operand FUD chain.  */
+static inline tree
+gimple_vop (const struct function *fun)
+{
+  gcc_checking_assert (fun && fun->gimple_df);
+  return fun->gimple_df->vop;
+}
+
+/* Return the set of VUSE operand for statement G.  */
+
+static inline use_operand_p
+gimple_vuse_op (const gimple *g)
+{
+  struct use_optype_d *ops;
+  const gimple_statement_with_memory_ops *mem_ops_stmt =
+     dyn_cast <const gimple_statement_with_memory_ops *> (g);
+  if (!mem_ops_stmt)
+    return NULL_USE_OPERAND_P;
+  ops = mem_ops_stmt->use_ops;
+  if (ops
+      && USE_OP_PTR (ops)->use == &mem_ops_stmt->vuse)
+    return USE_OP_PTR (ops);
+  return NULL_USE_OPERAND_P;
+}
+
+/* Return the set of VDEF operand for statement G.  */
+
+static inline def_operand_p
+gimple_vdef_op (gimple *g)
+{
+  gimple_statement_with_memory_ops *mem_ops_stmt =
+     dyn_cast <gimple_statement_with_memory_ops *> (g);
+  if (!mem_ops_stmt)
+    return NULL_DEF_OPERAND_P;
+  if (mem_ops_stmt->vdef)
+    return &mem_ops_stmt->vdef;
+  return NULL_DEF_OPERAND_P;
+}
+
+/* Mark statement S as modified, and update it.  */
+
+static inline void
+update_stmt (gimple *s)
+{
+  if (gimple_has_ops (s))
+    {
+      gimple_set_modified (s, true);
+      update_stmt_operands (cfun, s);
+    }
+}
+
+/* Update statement S if it has been optimized.  */
+
+static inline void
+update_stmt_if_modified (gimple *s)
+{
+  if (gimple_modified_p (s))
+    update_stmt_operands (cfun, s);
+}
+
+/* Mark statement S as modified, and update it.  */
+
+static inline void
+update_stmt_fn (struct function *fn, gimple *s)
+{
+  if (gimple_has_ops (s))
+    {
+      gimple_set_modified (s, true);
+      update_stmt_operands (fn, s);
+    }
+}
+
+
+#endif /* GCC_GIMPLE_SSA_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-streamer.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-streamer.h
new file mode 100644
index 0000000..d0d144e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-streamer.h
@@ -0,0 +1,34 @@
+/* Data structures and functions for streaming GIMPLE.
+
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Contributed by Diego Novillo <dnovillo@google.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GIMPLE_STREAMER_H
+#define GCC_GIMPLE_STREAMER_H
+
+#include "tree-streamer.h"
+
+/* In gimple-streamer-in.c  */
+void input_bb (struct lto_input_block *, enum LTO_tags, struct data_in *,
+	       struct function *, int);
+
+/* In gimple-streamer-out.c  */
+void output_bb (struct output_block *, basic_block, struct function *);
+
+#endif  /* GCC_GIMPLE_STREAMER_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-walk.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-walk.h
new file mode 100644
index 0000000..0f0bd45
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple-walk.h
@@ -0,0 +1,101 @@
+/* Header file for gimple statement walk support.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GIMPLE_WALK_H
+#define GCC_GIMPLE_WALK_H
+
+/* Convenience routines to walk all statements of a gimple function.
+   Note that this is useful exclusively before the code is converted
+   into SSA form.  Once the program is in SSA form, the standard
+   operand interface should be used to analyze/modify statements.  */
+struct walk_stmt_info
+{
+  /* Points to the current statement being walked.  */
+  gimple_stmt_iterator gsi;
+  gimple *stmt;
+
+  /* Additional data that the callback functions may want to carry
+     through the recursion.  */
+  void *info;
+
+  /* Pointer map used to mark visited tree nodes when calling
+     walk_tree on each operand.  If set to NULL, duplicate tree nodes
+     will be visited more than once.  */
+  hash_set<tree> *pset;
+
+  /* Operand returned by the callbacks.  This is set when calling
+     walk_gimple_seq.  If the walk_stmt_fn or walk_tree_fn callback
+     returns non-NULL, this field will contain the tree returned by
+     the last callback.  */
+  tree callback_result;
+
+  /* Indicates whether the operand being examined may be replaced
+     with something that matches is_gimple_val (if true) or something
+     slightly more complicated (if false).  "Something" technically
+     means the common subset of is_gimple_lvalue and is_gimple_rhs,
+     but we never try to form anything more complicated than that, so
+     we don't bother checking.
+
+     Also note that CALLBACK should update this flag while walking the
+     sub-expressions of a statement.  For instance, when walking the
+     statement 'foo (&var)', the flag VAL_ONLY will initially be set
+     to true, however, when walking &var, the operand of that
+     ADDR_EXPR does not need to be a GIMPLE value.  */
+  BOOL_BITFIELD val_only : 1;
+
+  /* True if we are currently walking the LHS of an assignment.  */
+  BOOL_BITFIELD is_lhs : 1;
+
+  /* Optional.  Set to true by the callback functions if they made any
+     changes.  */
+  BOOL_BITFIELD changed : 1;
+
+  /* True if we're interested in location information.  */
+  BOOL_BITFIELD want_locations : 1;
+
+  /* True if we've removed the statement that was processed.  */
+  BOOL_BITFIELD removed_stmt : 1;
+};
+
+/* Callback for walk_gimple_stmt.  Called for every statement found
+   during traversal.  The first argument points to the statement to
+   walk.  The second argument is a flag that the callback sets to
+   'true' if it the callback handled all the operands and
+   sub-statements of the statement (the default value of this flag is
+   'false').  The third argument is an anonymous pointer to data
+   to be used by the callback.  */
+typedef tree (*walk_stmt_fn) (gimple_stmt_iterator *, bool *,
+			      struct walk_stmt_info *);
+
+extern gimple *walk_gimple_seq_mod (gimple_seq *, walk_stmt_fn, walk_tree_fn,
+				   struct walk_stmt_info *);
+extern gimple *walk_gimple_seq (gimple_seq, walk_stmt_fn, walk_tree_fn,
+			       struct walk_stmt_info *);
+extern tree walk_gimple_op (gimple *, walk_tree_fn, struct walk_stmt_info *);
+extern tree walk_gimple_stmt (gimple_stmt_iterator *, walk_stmt_fn,
+			      walk_tree_fn, struct walk_stmt_info *);
+typedef bool (*walk_stmt_load_store_addr_fn) (gimple *, tree, tree, void *);
+extern bool walk_stmt_load_store_addr_ops (gimple *, void *,
+					   walk_stmt_load_store_addr_fn,
+					   walk_stmt_load_store_addr_fn,
+					   walk_stmt_load_store_addr_fn);
+extern bool walk_stmt_load_store_ops (gimple *, void *,
+				      walk_stmt_load_store_addr_fn,
+				      walk_stmt_load_store_addr_fn);
+#endif /* GCC_GIMPLE_WALK_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple.def
new file mode 100644
index 0000000..78e3467
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple.def
@@ -0,0 +1,398 @@
+/* This file contains the definitions of the GIMPLE IR tuples used in GCC.
+
+   Copyright (C) 2007-2019 Free Software Foundation, Inc.
+   Contributed by Aldy Hernandez <aldyh@redhat.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* The format of this file is
+   DEFGSCODE(GIMPLE_symbol, printable name, GSS_symbol).  */
+
+
+/* Error marker.  This is used in similar ways as ERROR_MARK in tree.def.  */
+DEFGSCODE(GIMPLE_ERROR_MARK, "gimple_error_mark", GSS_BASE)
+
+/* IMPORTANT.  Do not rearrange the codes between GIMPLE_COND and
+   GIMPLE_RETURN.  The ordering is exposed by gimple_has_ops calls.
+   These are all the GIMPLE statements with register operands.  */
+
+/* GIMPLE_COND <COND_CODE, OP1, OP2, TRUE_LABEL, FALSE_LABEL>
+   represents the conditional jump:
+
+   if (OP1 COND_CODE OP2) goto TRUE_LABEL else goto FALSE_LABEL
+
+   COND_CODE is the tree code used as the comparison predicate.  It
+   must be of class tcc_comparison.
+
+   OP1 and OP2 are the operands used in the comparison.  They must be
+   accepted by is_gimple_operand.
+
+   TRUE_LABEL and FALSE_LABEL are the LABEL_DECL nodes used as the
+   jump target for the comparison.  */
+DEFGSCODE(GIMPLE_COND, "gimple_cond", GSS_WITH_OPS)
+
+/* GIMPLE_DEBUG represents a debug statement.  */
+DEFGSCODE(GIMPLE_DEBUG, "gimple_debug", GSS_WITH_OPS)
+
+/* GIMPLE_GOTO <TARGET> represents unconditional jumps.
+   TARGET is a LABEL_DECL or an expression node for computed GOTOs.  */
+DEFGSCODE(GIMPLE_GOTO, "gimple_goto", GSS_WITH_OPS)
+
+/* GIMPLE_LABEL <LABEL> represents label statements.  LABEL is a
+   LABEL_DECL representing a jump target.  */
+DEFGSCODE(GIMPLE_LABEL, "gimple_label", GSS_WITH_OPS)
+
+/* GIMPLE_SWITCH <INDEX, DEFAULT_LAB, LAB1, ..., LABN> represents the
+   multiway branch:
+
+   switch (INDEX)
+   {
+     case LAB1: ...; break;
+     ...
+     case LABN: ...; break;
+     default: ...
+   }
+
+   INDEX is the variable evaluated to decide which label to jump to.
+
+   DEFAULT_LAB, LAB1 ... LABN are the tree nodes representing case labels.
+   They must be CASE_LABEL_EXPR nodes.  */
+DEFGSCODE(GIMPLE_SWITCH, "gimple_switch", GSS_WITH_OPS)
+
+/* IMPORTANT.
+
+   Do not rearrange the codes between GIMPLE_ASSIGN and GIMPLE_RETURN.
+   It's exposed by GIMPLE_RANGE_CHECK calls. These are all the GIMPLE
+   statements with memory and register operands.  */
+
+/* GIMPLE_ASSIGN <SUBCODE, LHS, RHS1[, RHS2]> represents the assignment
+   statement
+
+   LHS = RHS1 SUBCODE RHS2.
+
+   SUBCODE is the tree code for the expression computed by the RHS of the
+   assignment.  It must be one of the tree codes accepted by
+   get_gimple_rhs_class.  If LHS is not a gimple register according to
+   is_gimple_reg, SUBCODE must be of class GIMPLE_SINGLE_RHS.
+
+   LHS is the operand on the LHS of the assignment.  It must be a tree node
+   accepted by is_gimple_lvalue.
+
+   RHS1 is the first operand on the RHS of the assignment.  It must always be
+   present.  It must be a tree node accepted by is_gimple_val.
+
+   RHS2 is the second operand on the RHS of the assignment.  It must be a tree
+   node accepted by is_gimple_val.  This argument exists only if SUBCODE is
+   of class GIMPLE_BINARY_RHS.  */
+DEFGSCODE(GIMPLE_ASSIGN, "gimple_assign", GSS_WITH_MEM_OPS)
+
+/* GIMPLE_ASM <STRING, I1, ..., IN, O1, ... OM, C1, ..., CP>
+   represents inline assembly statements.
+
+   STRING is the string containing the assembly statements.
+   I1 ... IN are the N input operands.
+   O1 ... OM are the M output operands.
+   C1 ... CP are the P clobber operands.
+   L1 ... LQ are the Q label operands.  */
+DEFGSCODE(GIMPLE_ASM, "gimple_asm", GSS_ASM)
+
+/* GIMPLE_CALL <FN, LHS, ARG1, ..., ARGN[, CHAIN]> represents function
+   calls.
+
+   FN is the callee.  It must be accepted by is_gimple_call_addr.
+
+   LHS is the operand where the return value from FN is stored.  It may
+   be NULL.
+
+   ARG1 ... ARGN are the arguments.  They must all be accepted by
+   is_gimple_operand.
+
+    CHAIN is the optional static chain link for nested functions.  */
+DEFGSCODE(GIMPLE_CALL, "gimple_call", GSS_CALL)
+
+/* GIMPLE_TRANSACTION <BODY, LABEL> represents __transaction_atomic and
+   __transaction_relaxed blocks.
+   BODY is the sequence of statements inside the transaction.
+   LABEL is a label for the statement immediately following the
+   transaction.  This is before RETURN so that it has MEM_OPS,
+   so that it can clobber global memory.  */
+DEFGSCODE(GIMPLE_TRANSACTION, "gimple_transaction", GSS_TRANSACTION)
+
+/* GIMPLE_RETURN <RETVAL> represents return statements.
+
+   RETVAL is the value to return or NULL.  If a value is returned it
+   must be accepted by is_gimple_operand.  */
+DEFGSCODE(GIMPLE_RETURN, "gimple_return", GSS_WITH_MEM_OPS)
+
+/* GIMPLE_BIND <VARS, BLOCK, BODY> represents a lexical scope.
+   VARS is the set of variables declared in that scope.
+   BLOCK is the symbol binding block used for debug information.
+   BODY is the sequence of statements in the scope.  */
+DEFGSCODE(GIMPLE_BIND, "gimple_bind", GSS_BIND)
+
+/* GIMPLE_CATCH <TYPES, HANDLER> represents a typed exception handler.
+   TYPES is the type (or list of types) handled.  HANDLER is the
+   sequence of statements that handle these types.  */
+DEFGSCODE(GIMPLE_CATCH, "gimple_catch", GSS_CATCH)
+
+/* GIMPLE_EH_FILTER <TYPES, FAILURE> represents an exception
+   specification.  TYPES is a list of allowed types and FAILURE is the
+   sequence of statements to execute on failure.  */
+DEFGSCODE(GIMPLE_EH_FILTER, "gimple_eh_filter", GSS_EH_FILTER)
+
+/* GIMPLE_EH_MUST_NOT_THROW <DECL> represents an exception barrier.
+   DECL is a noreturn function decl taking no arguments that will
+   be invoked if an exception propagates to this point.  */
+DEFGSCODE(GIMPLE_EH_MUST_NOT_THROW, "gimple_eh_must_not_throw", GSS_EH_MNT)
+
+/* GIMPLE_EH_ELSE <N_BODY, E_BODY> must be the sole contents of
+   a GIMPLE_TRY_FINALLY node.  For all normal exits from the try block,
+   N_BODY is run; for all exception exits from the try block,
+   E_BODY is run.  */
+DEFGSCODE(GIMPLE_EH_ELSE, "gimple_eh_else", GSS_EH_ELSE)
+
+/* GIMPLE_RESX resumes execution after an exception.  */
+DEFGSCODE(GIMPLE_RESX, "gimple_resx", GSS_EH_CTRL)
+
+/* GIMPLE_EH_DISPATCH demultiplexes an exception edge based on
+   the FILTER argument.  */
+DEFGSCODE(GIMPLE_EH_DISPATCH, "gimple_eh_dispatch", GSS_EH_CTRL)
+
+/* GIMPLE_PHI <RESULT, ARG1, ..., ARGN> represents the PHI node
+
+   RESULT = PHI <ARG1, ..., ARGN>
+
+   RESULT is the SSA name created by this PHI node.
+
+   ARG1 ... ARGN are the arguments to the PHI node.  N must be
+   exactly the same as the number of incoming edges to the basic block
+   holding the PHI node.  Every argument is either an SSA name or a
+   tree node of class tcc_constant.  */
+DEFGSCODE(GIMPLE_PHI, "gimple_phi", GSS_PHI)
+
+/* GIMPLE_TRY <TRY_KIND, EVAL, CLEANUP>
+   represents a try/catch or a try/finally statement.
+
+   TRY_KIND is either GIMPLE_TRY_CATCH or GIMPLE_TRY_FINALLY.
+
+   EVAL is the sequence of statements to execute on entry to GIMPLE_TRY.
+
+   CLEANUP is the sequence of statements to execute according to
+   TRY_KIND.  If TRY_KIND is GIMPLE_TRY_CATCH, CLEANUP is only exected
+   if an exception is thrown during execution of EVAL.  If TRY_KIND is
+   GIMPLE_TRY_FINALLY, CLEANUP is always executed after executing EVAL
+   (regardless of whether EVAL finished normally, or jumped out or an
+   exception was thrown).  */
+DEFGSCODE(GIMPLE_TRY, "gimple_try", GSS_TRY)
+
+/* GIMPLE_NOP represents the "do nothing" statement.  */
+DEFGSCODE(GIMPLE_NOP, "gimple_nop", GSS_BASE)
+
+
+/* IMPORTANT.
+
+   Do not rearrange any of the GIMPLE_OMP_* codes.  This ordering is
+   exposed by the range check in gimple_omp_subcode().  */
+
+
+/* Tuples used for lowering of OMP_ATOMIC.  Although the form of the OMP_ATOMIC
+   expression is very simple (just in form mem op= expr), various implicit
+   conversions may cause the expression to become more complex, so that it does
+   not fit the gimple grammar very well.  To overcome this problem, OMP_ATOMIC
+   is rewritten as a sequence of two codes in gimplification:
+
+   GIMPLE_OMP_LOAD (tmp, mem)
+   val = some computations involving tmp;
+   GIMPLE_OMP_STORE (val).  */
+DEFGSCODE(GIMPLE_OMP_ATOMIC_LOAD, "gimple_omp_atomic_load",
+	  GSS_OMP_ATOMIC_LOAD)
+DEFGSCODE(GIMPLE_OMP_ATOMIC_STORE, "gimple_omp_atomic_store",
+	  GSS_OMP_ATOMIC_STORE_LAYOUT)
+
+/* GIMPLE_OMP_CONTINUE marks the location of the loop or sections
+   iteration in partially lowered OpenMP code.  */
+DEFGSCODE(GIMPLE_OMP_CONTINUE, "gimple_omp_continue", GSS_OMP_CONTINUE)
+
+/* GIMPLE_OMP_CRITICAL <NAME, BODY> represents
+
+   #pragma omp critical [name]
+
+   NAME is the name given to the critical section.
+   BODY is the sequence of statements that are inside the critical section.  */
+DEFGSCODE(GIMPLE_OMP_CRITICAL, "gimple_omp_critical", GSS_OMP_CRITICAL)
+
+/* GIMPLE_OMP_FOR <BODY, CLAUSES, INDEX, INITIAL, FINAL, COND, INCR, PRE_BODY>
+   represents
+
+   PRE_BODY
+   #pragma omp for [clause1 ... clauseN]
+   for (INDEX = INITIAL; INDEX COND FINAL; INDEX {+=,-=} INCR)
+   BODY
+
+   Likewise for:
+   #pragma acc loop [clause1 ... clauseN]
+
+   BODY is the loop body.
+
+   CLAUSES is the list of clauses.
+
+   INDEX must be an integer or pointer variable, which is implicitly thread
+   private.  It must be accepted by is_gimple_operand.
+
+   INITIAL is the initial value given to INDEX. It must be
+   accepted by is_gimple_operand.
+
+   FINAL is the final value that INDEX should take. It must
+   be accepted by is_gimple_operand.
+
+   COND is the condition code for the controlling predicate.  It must
+   be one of { <, >, <=, >= }
+
+   INCR is the loop index increment.  It must be tree node of type
+   tcc_constant.
+
+   PRE_BODY is a landing pad filled by the gimplifier with things from
+   INIT, COND, and INCR that are technically part of the OMP_FOR
+   structured block, but are evaluated before the loop body begins.
+
+   INITIAL, FINAL and INCR are required to be loop invariant integer
+   expressions that are evaluated without any synchronization.
+   The evaluation order, frequency of evaluation and side-effects are
+   unspecified by the standards.  */
+DEFGSCODE(GIMPLE_OMP_FOR, "gimple_omp_for", GSS_OMP_FOR)
+
+/* GIMPLE_OMP_MASTER <BODY> represents #pragma omp master.
+   BODY is the sequence of statements to execute in the master section.  */
+DEFGSCODE(GIMPLE_OMP_MASTER, "gimple_omp_master", GSS_OMP)
+
+/* GIMPLE_OMP_TASKGROUP <BODY, CLAUSES> represents #pragma omp taskgroup.
+   BODY is the sequence of statements inside the taskgroup section.
+   CLAUSES is an OMP_CLAUSE chain holding the associated clauses.  */
+DEFGSCODE(GIMPLE_OMP_TASKGROUP, "gimple_omp_taskgroup", GSS_OMP_SINGLE_LAYOUT)
+
+/* GIMPLE_OMP_PARALLEL <BODY, CLAUSES, CHILD_FN, DATA_ARG> represents
+
+   #pragma omp parallel [CLAUSES]
+   BODY
+
+   BODY is a the sequence of statements to be executed by all threads.
+
+   CLAUSES is an OMP_CLAUSE chain with all the clauses.
+
+   CHILD_FN is set when outlining the body of the parallel region.
+   All the statements in BODY are moved into this newly created
+   function when converting OMP constructs into low-GIMPLE.
+
+   DATA_ARG is a local variable in the parent function containing data
+   to be shared with CHILD_FN.  This is used to implement all the data
+   sharing clauses.  */
+DEFGSCODE(GIMPLE_OMP_PARALLEL, "gimple_omp_parallel", GSS_OMP_PARALLEL_LAYOUT)
+
+/* GIMPLE_OMP_TASK <BODY, CLAUSES, CHILD_FN, DATA_ARG, COPY_FN,
+		    ARG_SIZE, ARG_ALIGN> represents
+
+   #pragma omp task [CLAUSES]
+   BODY
+
+   BODY is a the sequence of statements to be executed by all threads.
+
+   CLAUSES is an OMP_CLAUSE chain with all the clauses.
+
+   CHILD_FN is set when outlining the body of the explicit task region.
+   All the statements in BODY are moved into this newly created
+   function when converting OMP constructs into low-GIMPLE.
+
+   DATA_ARG is a local variable in the parent function containing data
+   to be shared with CHILD_FN.  This is used to implement all the data
+   sharing clauses.
+
+   COPY_FN is set when outlining the firstprivate var initialization.
+   All the needed statements are emitted into the newly created
+   function, or when only memcpy is needed, it is NULL.
+
+   ARG_SIZE and ARG_ALIGN are the size and alignment of the incoming
+   data area allocated by GOMP_task and passed to CHILD_FN.  */
+DEFGSCODE(GIMPLE_OMP_TASK, "gimple_omp_task", GSS_OMP_TASK)
+
+/* OMP_RETURN marks the end of an OpenMP directive.  */
+DEFGSCODE(GIMPLE_OMP_RETURN, "gimple_omp_return", GSS_OMP_ATOMIC_STORE_LAYOUT)
+
+/* OMP_SECTION <BODY> represents #pragma omp section.
+   BODY is the sequence of statements in the section body.  */
+DEFGSCODE(GIMPLE_OMP_SECTION, "gimple_omp_section", GSS_OMP)
+
+/* OMP_SECTIONS <BODY, CLAUSES, CONTROL> represents #pragma omp sections.
+
+   BODY is the sequence of statements in the sections body.
+   CLAUSES is an OMP_CLAUSE chain holding the list of associated clauses.
+   CONTROL is a VAR_DECL used for deciding which of the sections
+   to execute.  */
+DEFGSCODE(GIMPLE_OMP_SECTIONS, "gimple_omp_sections", GSS_OMP_SECTIONS)
+
+/* GIMPLE_OMP_SECTIONS_SWITCH is a marker placed immediately after
+   OMP_SECTIONS.  It represents the GIMPLE_SWITCH used to decide which
+   branch is taken.  */
+DEFGSCODE(GIMPLE_OMP_SECTIONS_SWITCH, "gimple_omp_sections_switch", GSS_BASE)
+
+/* GIMPLE_OMP_SINGLE <BODY, CLAUSES> represents #pragma omp single
+   BODY is the sequence of statements inside the single section.
+   CLAUSES is an OMP_CLAUSE chain holding the associated clauses.  */
+DEFGSCODE(GIMPLE_OMP_SINGLE, "gimple_omp_single", GSS_OMP_SINGLE_LAYOUT)
+
+/* GIMPLE_OMP_TARGET <BODY, CLAUSES, CHILD_FN> represents
+   #pragma acc {kernels,parallel,data,enter data,exit data,update}
+   #pragma omp target {,data,update}
+   BODY is the sequence of statements inside the construct
+   (NULL for some variants).
+   CLAUSES is an OMP_CLAUSE chain holding the associated clauses.
+   CHILD_FN is set when outlining the body of the offloaded region.
+   All the statements in BODY are moved into this newly created
+   function when converting OMP constructs into low-GIMPLE.
+   DATA_ARG is a vec of 3 local variables in the parent function
+   containing data to be mapped to CHILD_FN.  This is used to
+   implement the MAP clauses.  */
+DEFGSCODE(GIMPLE_OMP_TARGET, "gimple_omp_target", GSS_OMP_PARALLEL_LAYOUT)
+
+/* GIMPLE_OMP_TEAMS <BODY, CLAUSES, CHILD_FN, DATA_ARG> represents
+   #pragma omp teams
+   BODY is the sequence of statements inside the single section.
+   CLAUSES is an OMP_CLAUSE chain holding the associated clauses.
+   CHILD_FN and DATA_ARG like for GIMPLE_OMP_PARALLEL.  */
+DEFGSCODE(GIMPLE_OMP_TEAMS, "gimple_omp_teams", GSS_OMP_PARALLEL_LAYOUT)
+
+/* GIMPLE_OMP_ORDERED <BODY, CLAUSES> represents #pragma omp ordered.
+   BODY is the sequence of statements to execute in the ordered section.
+   CLAUSES is an OMP_CLAUSE chain holding the associated clauses.  */
+DEFGSCODE(GIMPLE_OMP_ORDERED, "gimple_omp_ordered", GSS_OMP_SINGLE_LAYOUT)
+
+/* GIMPLE_OMP_GRID_BODY <BODY> represents a parallel loop lowered for execution
+   on a GPU.  It is an artificial statement created by omp lowering.  */
+DEFGSCODE(GIMPLE_OMP_GRID_BODY, "gimple_omp_gpukernel", GSS_OMP)
+
+/* GIMPLE_PREDICT <PREDICT, OUTCOME> specifies a hint for branch prediction.
+
+   PREDICT is one of the predictors from predict.def.
+
+   OUTCOME is NOT_TAKEN or TAKEN.  */
+DEFGSCODE(GIMPLE_PREDICT, "gimple_predict", GSS_BASE)
+
+/*  This node represents a cleanup expression.  It is ONLY USED INTERNALLY
+    by the gimplifier as a placeholder for cleanups, and its uses will be
+    cleaned up by the time gimplification is done.
+
+    This tuple should not exist outside of the gimplifier proper.  */
+DEFGSCODE(GIMPLE_WITH_CLEANUP_EXPR, "gimple_with_cleanup_expr", GSS_WCE)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple.h
new file mode 100644
index 0000000..8b5c9e2
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimple.h
@@ -0,0 +1,6570 @@
+/* Gimple IR definitions.
+
+   Copyright (C) 2007-2019 Free Software Foundation, Inc.
+   Contributed by Aldy Hernandez <aldyh@redhat.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GIMPLE_H
+#define GCC_GIMPLE_H
+
+#include "tree-ssa-alias.h"
+#include "gimple-expr.h"
+
+typedef gimple *gimple_seq_node;
+
+enum gimple_code {
+#define DEFGSCODE(SYM, STRING, STRUCT)	SYM,
+#include "gimple.def"
+#undef DEFGSCODE
+    LAST_AND_UNUSED_GIMPLE_CODE
+};
+
+extern const char *const gimple_code_name[];
+extern const unsigned char gimple_rhs_class_table[];
+
+/* Strip the outermost pointer, from tr1/type_traits.  */
+template<typename T> struct remove_pointer { typedef T type; };
+template<typename T> struct remove_pointer<T *> { typedef T type; };
+
+/* Error out if a gimple tuple is addressed incorrectly.  */
+#if defined ENABLE_GIMPLE_CHECKING
+#define gcc_gimple_checking_assert(EXPR) gcc_assert (EXPR)
+extern void gimple_check_failed (const gimple *, const char *, int,        \
+                                 const char *, enum gimple_code,           \
+				 enum tree_code) ATTRIBUTE_NORETURN 	   \
+						 ATTRIBUTE_COLD;
+
+#define GIMPLE_CHECK(GS, CODE)						\
+  do {									\
+    const gimple *__gs = (GS);						\
+    if (gimple_code (__gs) != (CODE))					\
+      gimple_check_failed (__gs, __FILE__, __LINE__, __FUNCTION__,	\
+	  		   (CODE), ERROR_MARK);				\
+  } while (0)
+template <typename T>
+static inline T
+GIMPLE_CHECK2(const gimple *gs,
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
+	      const char *file = __builtin_FILE (),
+	      int line = __builtin_LINE (),
+	      const char *fun = __builtin_FUNCTION ())
+#else
+	      const char *file = __FILE__,
+	      int line = __LINE__,
+	      const char *fun = NULL)
+#endif
+{
+  T ret = dyn_cast <T> (gs);
+  if (!ret)
+    gimple_check_failed (gs, file, line, fun,
+			 remove_pointer<T>::type::code_, ERROR_MARK);
+  return ret;
+}
+template <typename T>
+static inline T
+GIMPLE_CHECK2(gimple *gs,
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
+	      const char *file = __builtin_FILE (),
+	      int line = __builtin_LINE (),
+	      const char *fun = __builtin_FUNCTION ())
+#else
+	      const char *file = __FILE__,
+	      int line = __LINE__,
+	      const char *fun = NULL)
+#endif
+{
+  T ret = dyn_cast <T> (gs);
+  if (!ret)
+    gimple_check_failed (gs, file, line, fun,
+			 remove_pointer<T>::type::code_, ERROR_MARK);
+  return ret;
+}
+#else  /* not ENABLE_GIMPLE_CHECKING  */
+#define gcc_gimple_checking_assert(EXPR) ((void)(0 && (EXPR)))
+#define GIMPLE_CHECK(GS, CODE)			(void)0
+template <typename T>
+static inline T
+GIMPLE_CHECK2(gimple *gs)
+{
+  return as_a <T> (gs);
+}
+template <typename T>
+static inline T
+GIMPLE_CHECK2(const gimple *gs)
+{
+  return as_a <T> (gs);
+}
+#endif
+
+/* Class of GIMPLE expressions suitable for the RHS of assignments.  See
+   get_gimple_rhs_class.  */
+enum gimple_rhs_class
+{
+  GIMPLE_INVALID_RHS,	/* The expression cannot be used on the RHS.  */
+  GIMPLE_TERNARY_RHS,	/* The expression is a ternary operation.  */
+  GIMPLE_BINARY_RHS,	/* The expression is a binary operation.  */
+  GIMPLE_UNARY_RHS,	/* The expression is a unary operation.  */
+  GIMPLE_SINGLE_RHS	/* The expression is a single object (an SSA
+			   name, a _DECL, a _REF, etc.  */
+};
+
+/* Specific flags for individual GIMPLE statements.  These flags are
+   always stored in gimple.subcode and they may only be
+   defined for statement codes that do not use subcodes.
+
+   Values for the masks can overlap as long as the overlapping values
+   are never used in the same statement class.
+
+   The maximum mask value that can be defined is 1 << 15 (i.e., each
+   statement code can hold up to 16 bitflags).
+
+   Keep this list sorted.  */
+enum gf_mask {
+    GF_ASM_INPUT		= 1 << 0,
+    GF_ASM_VOLATILE		= 1 << 1,
+    GF_ASM_INLINE		= 1 << 2,
+    GF_CALL_FROM_THUNK		= 1 << 0,
+    GF_CALL_RETURN_SLOT_OPT	= 1 << 1,
+    GF_CALL_TAILCALL		= 1 << 2,
+    GF_CALL_VA_ARG_PACK		= 1 << 3,
+    GF_CALL_NOTHROW		= 1 << 4,
+    GF_CALL_ALLOCA_FOR_VAR	= 1 << 5,
+    GF_CALL_INTERNAL		= 1 << 6,
+    GF_CALL_CTRL_ALTERING       = 1 << 7,
+    GF_CALL_MUST_TAIL_CALL	= 1 << 9,
+    GF_CALL_BY_DESCRIPTOR	= 1 << 10,
+    GF_CALL_NOCF_CHECK		= 1 << 11,
+    GF_OMP_PARALLEL_COMBINED	= 1 << 0,
+    GF_OMP_PARALLEL_GRID_PHONY = 1 << 1,
+    GF_OMP_TASK_TASKLOOP	= 1 << 0,
+    GF_OMP_TASK_TASKWAIT	= 1 << 1,
+    GF_OMP_FOR_KIND_MASK	= (1 << 4) - 1,
+    GF_OMP_FOR_KIND_FOR		= 0,
+    GF_OMP_FOR_KIND_DISTRIBUTE	= 1,
+    GF_OMP_FOR_KIND_TASKLOOP	= 2,
+    GF_OMP_FOR_KIND_OACC_LOOP	= 4,
+    GF_OMP_FOR_KIND_GRID_LOOP = 5,
+    /* Flag for SIMD variants of OMP_FOR kinds.  */
+    GF_OMP_FOR_SIMD		= 1 << 3,
+    GF_OMP_FOR_KIND_SIMD	= GF_OMP_FOR_SIMD | 0,
+    GF_OMP_FOR_COMBINED		= 1 << 4,
+    GF_OMP_FOR_COMBINED_INTO	= 1 << 5,
+    /* The following flag must not be used on GF_OMP_FOR_KIND_GRID_LOOP loop
+       statements.  */
+    GF_OMP_FOR_GRID_PHONY	= 1 << 6,
+    /* The following two flags should only be set on GF_OMP_FOR_KIND_GRID_LOOP
+       loop statements.  */
+    GF_OMP_FOR_GRID_INTRA_GROUP	= 1 << 6,
+    GF_OMP_FOR_GRID_GROUP_ITER  = 1 << 7,
+    GF_OMP_TARGET_KIND_MASK	= (1 << 4) - 1,
+    GF_OMP_TARGET_KIND_REGION	= 0,
+    GF_OMP_TARGET_KIND_DATA	= 1,
+    GF_OMP_TARGET_KIND_UPDATE	= 2,
+    GF_OMP_TARGET_KIND_ENTER_DATA = 3,
+    GF_OMP_TARGET_KIND_EXIT_DATA = 4,
+    GF_OMP_TARGET_KIND_OACC_PARALLEL = 5,
+    GF_OMP_TARGET_KIND_OACC_KERNELS = 6,
+    GF_OMP_TARGET_KIND_OACC_DATA = 7,
+    GF_OMP_TARGET_KIND_OACC_UPDATE = 8,
+    GF_OMP_TARGET_KIND_OACC_ENTER_EXIT_DATA = 9,
+    GF_OMP_TARGET_KIND_OACC_DECLARE = 10,
+    GF_OMP_TARGET_KIND_OACC_HOST_DATA = 11,
+    GF_OMP_TEAMS_GRID_PHONY	= 1 << 0,
+    GF_OMP_TEAMS_HOST		= 1 << 1,
+
+    /* True on an GIMPLE_OMP_RETURN statement if the return does not require
+       a thread synchronization via some sort of barrier.  The exact barrier
+       that would otherwise be emitted is dependent on the OMP statement with
+       which this return is associated.  */
+    GF_OMP_RETURN_NOWAIT	= 1 << 0,
+
+    GF_OMP_SECTION_LAST		= 1 << 0,
+    GF_OMP_ATOMIC_MEMORY_ORDER  = (1 << 3) - 1,
+    GF_OMP_ATOMIC_NEED_VALUE	= 1 << 3,
+    GF_PREDICT_TAKEN		= 1 << 15
+};
+
+/* This subcode tells apart different kinds of stmts that are not used
+   for codegen, but rather to retain debug information.  */
+enum gimple_debug_subcode {
+  GIMPLE_DEBUG_BIND = 0,
+  GIMPLE_DEBUG_SOURCE_BIND = 1,
+  GIMPLE_DEBUG_BEGIN_STMT = 2,
+  GIMPLE_DEBUG_INLINE_ENTRY = 3
+};
+
+/* Masks for selecting a pass local flag (PLF) to work on.  These
+   masks are used by gimple_set_plf and gimple_plf.  */
+enum plf_mask {
+    GF_PLF_1	= 1 << 0,
+    GF_PLF_2	= 1 << 1
+};
+
+/* Data structure definitions for GIMPLE tuples.  NOTE: word markers
+   are for 64 bit hosts.  */
+
+struct GTY((desc ("gimple_statement_structure (&%h)"), tag ("GSS_BASE"),
+	    chain_next ("%h.next"), variable_size))
+  gimple
+{
+  /* [ WORD 1 ]
+     Main identifying code for a tuple.  */
+  ENUM_BITFIELD(gimple_code) code : 8;
+
+  /* Nonzero if a warning should not be emitted on this tuple.  */
+  unsigned int no_warning	: 1;
+
+  /* Nonzero if this tuple has been visited.  Passes are responsible
+     for clearing this bit before using it.  */
+  unsigned int visited		: 1;
+
+  /* Nonzero if this tuple represents a non-temporal move.  */
+  unsigned int nontemporal_move	: 1;
+
+  /* Pass local flags.  These flags are free for any pass to use as
+     they see fit.  Passes should not assume that these flags contain
+     any useful value when the pass starts.  Any initial state that
+     the pass requires should be set on entry to the pass.  See
+     gimple_set_plf and gimple_plf for usage.  */
+  unsigned int plf		: 2;
+
+  /* Nonzero if this statement has been modified and needs to have its
+     operands rescanned.  */
+  unsigned modified 		: 1;
+
+  /* Nonzero if this statement contains volatile operands.  */
+  unsigned has_volatile_ops 	: 1;
+
+  /* Padding to get subcode to 16 bit alignment.  */
+  unsigned pad			: 1;
+
+  /* The SUBCODE field can be used for tuple-specific flags for tuples
+     that do not require subcodes.  Note that SUBCODE should be at
+     least as wide as tree codes, as several tuples store tree codes
+     in there.  */
+  unsigned int subcode		: 16;
+
+  /* UID of this statement.  This is used by passes that want to
+     assign IDs to statements.  It must be assigned and used by each
+     pass.  By default it should be assumed to contain garbage.  */
+  unsigned uid;
+
+  /* [ WORD 2 ]
+     Locus information for debug info.  */
+  location_t location;
+
+  /* Number of operands in this tuple.  */
+  unsigned num_ops;
+
+  /* [ WORD 3 ]
+     Basic block holding this statement.  */
+  basic_block bb;
+
+  /* [ WORD 4-5 ]
+     Linked lists of gimple statements.  The next pointers form
+     a NULL terminated list, the prev pointers are a cyclic list.
+     A gimple statement is hence also a double-ended list of
+     statements, with the pointer itself being the first element,
+     and the prev pointer being the last.  */
+  gimple *next;
+  gimple *GTY((skip)) prev;
+};
+
+
+/* Base structure for tuples with operands.  */
+
+/* This gimple subclass has no tag value.  */
+struct GTY(())
+  gimple_statement_with_ops_base : public gimple
+{
+  /* [ WORD 1-6 ] : base class */
+
+  /* [ WORD 7 ]
+     SSA operand vectors.  NOTE: It should be possible to
+     amalgamate these vectors with the operand vector OP.  However,
+     the SSA operand vectors are organized differently and contain
+     more information (like immediate use chaining).  */
+  struct use_optype_d GTY((skip (""))) *use_ops;
+};
+
+
+/* Statements that take register operands.  */
+
+struct GTY((tag("GSS_WITH_OPS")))
+  gimple_statement_with_ops : public gimple_statement_with_ops_base
+{
+  /* [ WORD 1-7 ] : base class */
+
+  /* [ WORD 8 ]
+     Operand vector.  NOTE!  This must always be the last field
+     of this structure.  In particular, this means that this
+     structure cannot be embedded inside another one.  */
+  tree GTY((length ("%h.num_ops"))) op[1];
+};
+
+
+/* Base for statements that take both memory and register operands.  */
+
+struct GTY((tag("GSS_WITH_MEM_OPS_BASE")))
+  gimple_statement_with_memory_ops_base : public gimple_statement_with_ops_base
+{
+  /* [ WORD 1-7 ] : base class */
+
+  /* [ WORD 8-9 ]
+     Virtual operands for this statement.  The GC will pick them
+     up via the ssa_names array.  */
+  tree GTY((skip (""))) vdef;
+  tree GTY((skip (""))) vuse;
+};
+
+
+/* Statements that take both memory and register operands.  */
+
+struct GTY((tag("GSS_WITH_MEM_OPS")))
+  gimple_statement_with_memory_ops :
+    public gimple_statement_with_memory_ops_base
+{
+  /* [ WORD 1-9 ] : base class */
+
+  /* [ WORD 10 ]
+     Operand vector.  NOTE!  This must always be the last field
+     of this structure.  In particular, this means that this
+     structure cannot be embedded inside another one.  */
+  tree GTY((length ("%h.num_ops"))) op[1];
+};
+
+
+/* Call statements that take both memory and register operands.  */
+
+struct GTY((tag("GSS_CALL")))
+  gcall : public gimple_statement_with_memory_ops_base
+{
+  /* [ WORD 1-9 ] : base class */
+
+  /* [ WORD 10-13 ]  */
+  struct pt_solution call_used;
+  struct pt_solution call_clobbered;
+
+  /* [ WORD 14 ]  */
+  union GTY ((desc ("%1.subcode & GF_CALL_INTERNAL"))) {
+    tree GTY ((tag ("0"))) fntype;
+    enum internal_fn GTY ((tag ("GF_CALL_INTERNAL"))) internal_fn;
+  } u;
+
+  /* [ WORD 15 ]
+     Operand vector.  NOTE!  This must always be the last field
+     of this structure.  In particular, this means that this
+     structure cannot be embedded inside another one.  */
+  tree GTY((length ("%h.num_ops"))) op[1];
+
+  static const enum gimple_code code_ = GIMPLE_CALL;
+};
+
+
+/* OMP statements.  */
+
+struct GTY((tag("GSS_OMP")))
+  gimple_statement_omp : public gimple
+{
+  /* [ WORD 1-6 ] : base class */
+
+  /* [ WORD 7 ]  */
+  gimple_seq body;
+};
+
+
+/* GIMPLE_BIND */
+
+struct GTY((tag("GSS_BIND")))
+  gbind : public gimple
+{
+  /* [ WORD 1-6 ] : base class */
+
+  /* [ WORD 7 ]
+     Variables declared in this scope.  */
+  tree vars;
+
+  /* [ WORD 8 ]
+     This is different than the BLOCK field in gimple,
+     which is analogous to TREE_BLOCK (i.e., the lexical block holding
+     this statement).  This field is the equivalent of BIND_EXPR_BLOCK
+     in tree land (i.e., the lexical scope defined by this bind).  See
+     gimple-low.c.  */
+  tree block;
+
+  /* [ WORD 9 ]  */
+  gimple_seq body;
+};
+
+
+/* GIMPLE_CATCH */
+
+struct GTY((tag("GSS_CATCH")))
+  gcatch : public gimple
+{
+  /* [ WORD 1-6 ] : base class */
+
+  /* [ WORD 7 ]  */
+  tree types;
+
+  /* [ WORD 8 ]  */
+  gimple_seq handler;
+};
+
+
+/* GIMPLE_EH_FILTER */
+
+struct GTY((tag("GSS_EH_FILTER")))
+  geh_filter : public gimple
+{
+  /* [ WORD 1-6 ] : base class */
+
+  /* [ WORD 7 ]
+     Filter types.  */
+  tree types;
+
+  /* [ WORD 8 ]
+     Failure actions.  */
+  gimple_seq failure;
+};
+
+/* GIMPLE_EH_ELSE */
+
+struct GTY((tag("GSS_EH_ELSE")))
+  geh_else : public gimple
+{
+  /* [ WORD 1-6 ] : base class */
+
+  /* [ WORD 7,8 ] */
+  gimple_seq n_body, e_body;
+};
+
+/* GIMPLE_EH_MUST_NOT_THROW */
+
+struct GTY((tag("GSS_EH_MNT")))
+  geh_mnt : public gimple
+{
+  /* [ WORD 1-6 ] : base class */
+
+  /* [ WORD 7 ] Abort function decl.  */
+  tree fndecl;
+};
+
+/* GIMPLE_PHI */
+
+struct GTY((tag("GSS_PHI")))
+  gphi : public gimple
+{
+  /* [ WORD 1-6 ] : base class */
+
+  /* [ WORD 7 ]  */
+  unsigned capacity;
+  unsigned nargs;
+
+  /* [ WORD 8 ]  */
+  tree result;
+
+  /* [ WORD 9 ]  */
+  struct phi_arg_d GTY ((length ("%h.nargs"))) args[1];
+};
+
+
+/* GIMPLE_RESX, GIMPLE_EH_DISPATCH */
+
+struct GTY((tag("GSS_EH_CTRL")))
+  gimple_statement_eh_ctrl : public gimple
+{
+  /* [ WORD 1-6 ] : base class */
+
+  /* [ WORD 7 ]
+     Exception region number.  */
+  int region;
+};
+
+struct GTY((tag("GSS_EH_CTRL")))
+  gresx : public gimple_statement_eh_ctrl
+{
+  /* No extra fields; adds invariant:
+       stmt->code == GIMPLE_RESX.  */
+};
+
+struct GTY((tag("GSS_EH_CTRL")))
+  geh_dispatch : public gimple_statement_eh_ctrl
+{
+  /* No extra fields; adds invariant:
+       stmt->code == GIMPLE_EH_DISPATH.  */
+};
+
+
+/* GIMPLE_TRY */
+
+struct GTY((tag("GSS_TRY")))
+  gtry : public gimple
+{
+  /* [ WORD 1-6 ] : base class */
+
+  /* [ WORD 7 ]
+     Expression to evaluate.  */
+  gimple_seq eval;
+
+  /* [ WORD 8 ]
+     Cleanup expression.  */
+  gimple_seq cleanup;
+};
+
+/* Kind of GIMPLE_TRY statements.  */
+enum gimple_try_flags
+{
+  /* A try/catch.  */
+  GIMPLE_TRY_CATCH = 1 << 0,
+
+  /* A try/finally.  */
+  GIMPLE_TRY_FINALLY = 1 << 1,
+  GIMPLE_TRY_KIND = GIMPLE_TRY_CATCH | GIMPLE_TRY_FINALLY,
+
+  /* Analogous to TRY_CATCH_IS_CLEANUP.  */
+  GIMPLE_TRY_CATCH_IS_CLEANUP = 1 << 2
+};
+
+/* GIMPLE_WITH_CLEANUP_EXPR */
+
+struct GTY((tag("GSS_WCE")))
+  gimple_statement_wce : public gimple
+{
+  /* [ WORD 1-6 ] : base class */
+
+  /* Subcode: CLEANUP_EH_ONLY.  True if the cleanup should only be
+	      executed if an exception is thrown, not on normal exit of its
+	      scope.  This flag is analogous to the CLEANUP_EH_ONLY flag
+	      in TARGET_EXPRs.  */
+
+  /* [ WORD 7 ]
+     Cleanup expression.  */
+  gimple_seq cleanup;
+};
+
+
+/* GIMPLE_ASM  */
+
+struct GTY((tag("GSS_ASM")))
+  gasm : public gimple_statement_with_memory_ops_base
+{
+  /* [ WORD 1-9 ] : base class */
+
+  /* [ WORD 10 ]
+     __asm__ statement.  */
+  const char *string;
+
+  /* [ WORD 11 ]
+       Number of inputs, outputs, clobbers, labels.  */
+  unsigned char ni;
+  unsigned char no;
+  unsigned char nc;
+  unsigned char nl;
+
+  /* [ WORD 12 ]
+     Operand vector.  NOTE!  This must always be the last field
+     of this structure.  In particular, this means that this
+     structure cannot be embedded inside another one.  */
+  tree GTY((length ("%h.num_ops"))) op[1];
+};
+
+/* GIMPLE_OMP_CRITICAL */
+
+struct GTY((tag("GSS_OMP_CRITICAL")))
+  gomp_critical : public gimple_statement_omp
+{
+  /* [ WORD 1-7 ] : base class */
+
+  /* [ WORD 8 ]  */
+  tree clauses;
+
+  /* [ WORD 9 ]
+     Critical section name.  */
+  tree name;
+};
+
+
+struct GTY(()) gimple_omp_for_iter {
+  /* Condition code.  */
+  enum tree_code cond;
+
+  /* Index variable.  */
+  tree index;
+
+  /* Initial value.  */
+  tree initial;
+
+  /* Final value.  */
+  tree final;
+
+  /* Increment.  */
+  tree incr;
+};
+
+/* GIMPLE_OMP_FOR */
+
+struct GTY((tag("GSS_OMP_FOR")))
+  gomp_for : public gimple_statement_omp
+{
+  /* [ WORD 1-7 ] : base class */
+
+  /* [ WORD 8 ]  */
+  tree clauses;
+
+  /* [ WORD 9 ]
+     Number of elements in iter array.  */
+  size_t collapse;
+
+  /* [ WORD 10 ]  */
+  struct gimple_omp_for_iter * GTY((length ("%h.collapse"))) iter;
+
+  /* [ WORD 11 ]
+     Pre-body evaluated before the loop body begins.  */
+  gimple_seq pre_body;
+};
+
+
+/* GIMPLE_OMP_PARALLEL, GIMPLE_OMP_TARGET, GIMPLE_OMP_TASK, GIMPLE_OMP_TEAMS */
+
+struct GTY((tag("GSS_OMP_PARALLEL_LAYOUT")))
+  gimple_statement_omp_parallel_layout : public gimple_statement_omp
+{
+  /* [ WORD 1-7 ] : base class */
+
+  /* [ WORD 8 ]
+     Clauses.  */
+  tree clauses;
+
+  /* [ WORD 9 ]
+     Child function holding the body of the parallel region.  */
+  tree child_fn;
+
+  /* [ WORD 10 ]
+     Shared data argument.  */
+  tree data_arg;
+};
+
+/* GIMPLE_OMP_PARALLEL or GIMPLE_TASK */
+struct GTY((tag("GSS_OMP_PARALLEL_LAYOUT")))
+  gimple_statement_omp_taskreg : public gimple_statement_omp_parallel_layout
+{
+    /* No extra fields; adds invariant:
+         stmt->code == GIMPLE_OMP_PARALLEL
+	 || stmt->code == GIMPLE_OMP_TASK
+	 || stmt->code == GIMPLE_OMP_TEAMS.  */
+};
+
+/* GIMPLE_OMP_PARALLEL */
+struct GTY((tag("GSS_OMP_PARALLEL_LAYOUT")))
+  gomp_parallel : public gimple_statement_omp_taskreg
+{
+    /* No extra fields; adds invariant:
+         stmt->code == GIMPLE_OMP_PARALLEL.  */
+};
+
+/* GIMPLE_OMP_TARGET */
+struct GTY((tag("GSS_OMP_PARALLEL_LAYOUT")))
+  gomp_target : public gimple_statement_omp_parallel_layout
+{
+    /* No extra fields; adds invariant:
+         stmt->code == GIMPLE_OMP_TARGET.  */
+};
+
+/* GIMPLE_OMP_TASK */
+
+struct GTY((tag("GSS_OMP_TASK")))
+  gomp_task : public gimple_statement_omp_taskreg
+{
+  /* [ WORD 1-10 ] : base class */
+
+  /* [ WORD 11 ]
+     Child function holding firstprivate initialization if needed.  */
+  tree copy_fn;
+
+  /* [ WORD 12-13 ]
+     Size and alignment in bytes of the argument data block.  */
+  tree arg_size;
+  tree arg_align;
+};
+
+
+/* GIMPLE_OMP_SECTION */
+/* Uses struct gimple_statement_omp.  */
+
+
+/* GIMPLE_OMP_SECTIONS */
+
+struct GTY((tag("GSS_OMP_SECTIONS")))
+  gomp_sections : public gimple_statement_omp
+{
+  /* [ WORD 1-7 ] : base class */
+
+  /* [ WORD 8 ]  */
+  tree clauses;
+
+  /* [ WORD 9 ]
+     The control variable used for deciding which of the sections to
+     execute.  */
+  tree control;
+};
+
+/* GIMPLE_OMP_CONTINUE.
+
+   Note: This does not inherit from gimple_statement_omp, because we
+         do not need the body field.  */
+
+struct GTY((tag("GSS_OMP_CONTINUE")))
+  gomp_continue : public gimple
+{
+  /* [ WORD 1-6 ] : base class */
+
+  /* [ WORD 7 ]  */
+  tree control_def;
+
+  /* [ WORD 8 ]  */
+  tree control_use;
+};
+
+/* GIMPLE_OMP_SINGLE, GIMPLE_OMP_ORDERED, GIMPLE_OMP_TASKGROUP.  */
+
+struct GTY((tag("GSS_OMP_SINGLE_LAYOUT")))
+  gimple_statement_omp_single_layout : public gimple_statement_omp
+{
+  /* [ WORD 1-7 ] : base class */
+
+  /* [ WORD 8 ]  */
+  tree clauses;
+};
+
+struct GTY((tag("GSS_OMP_SINGLE_LAYOUT")))
+  gomp_single : public gimple_statement_omp_single_layout
+{
+    /* No extra fields; adds invariant:
+         stmt->code == GIMPLE_OMP_SINGLE.  */
+};
+
+struct GTY((tag("GSS_OMP_PARALLEL_LAYOUT")))
+  gomp_teams : public gimple_statement_omp_taskreg
+{
+    /* No extra fields; adds invariant:
+         stmt->code == GIMPLE_OMP_TEAMS.  */
+};
+
+struct GTY((tag("GSS_OMP_SINGLE_LAYOUT")))
+  gomp_ordered : public gimple_statement_omp_single_layout
+{
+    /* No extra fields; adds invariant:
+	 stmt->code == GIMPLE_OMP_ORDERED.  */
+};
+
+
+/* GIMPLE_OMP_ATOMIC_LOAD.
+   Note: This is based on gimple, not g_s_omp, because g_s_omp
+   contains a sequence, which we don't need here.  */
+
+struct GTY((tag("GSS_OMP_ATOMIC_LOAD")))
+  gomp_atomic_load : public gimple
+{
+  /* [ WORD 1-6 ] : base class */
+
+  /* [ WORD 7-8 ]  */
+  tree rhs, lhs;
+};
+
+/* GIMPLE_OMP_ATOMIC_STORE.
+   See note on GIMPLE_OMP_ATOMIC_LOAD.  */
+
+struct GTY((tag("GSS_OMP_ATOMIC_STORE_LAYOUT")))
+  gimple_statement_omp_atomic_store_layout : public gimple
+{
+  /* [ WORD 1-6 ] : base class */
+
+  /* [ WORD 7 ]  */
+  tree val;
+};
+
+struct GTY((tag("GSS_OMP_ATOMIC_STORE_LAYOUT")))
+  gomp_atomic_store :
+    public gimple_statement_omp_atomic_store_layout
+{
+    /* No extra fields; adds invariant:
+         stmt->code == GIMPLE_OMP_ATOMIC_STORE.  */
+};
+
+struct GTY((tag("GSS_OMP_ATOMIC_STORE_LAYOUT")))
+  gimple_statement_omp_return :
+    public gimple_statement_omp_atomic_store_layout
+{
+    /* No extra fields; adds invariant:
+         stmt->code == GIMPLE_OMP_RETURN.  */
+};
+
+/* GIMPLE_TRANSACTION.  */
+
+/* Bits to be stored in the GIMPLE_TRANSACTION subcode.  */
+
+/* The __transaction_atomic was declared [[outer]] or it is
+   __transaction_relaxed.  */
+#define GTMA_IS_OUTER			(1u << 0)
+#define GTMA_IS_RELAXED			(1u << 1)
+#define GTMA_DECLARATION_MASK		(GTMA_IS_OUTER | GTMA_IS_RELAXED)
+
+/* The transaction is seen to not have an abort.  */
+#define GTMA_HAVE_ABORT			(1u << 2)
+/* The transaction is seen to have loads or stores.  */
+#define GTMA_HAVE_LOAD			(1u << 3)
+#define GTMA_HAVE_STORE			(1u << 4)
+/* The transaction MAY enter serial irrevocable mode in its dynamic scope.  */
+#define GTMA_MAY_ENTER_IRREVOCABLE	(1u << 5)
+/* The transaction WILL enter serial irrevocable mode.
+   An irrevocable block post-dominates the entire transaction, such
+   that all invocations of the transaction will go serial-irrevocable.
+   In such case, we don't bother instrumenting the transaction, and
+   tell the runtime that it should begin the transaction in
+   serial-irrevocable mode.  */
+#define GTMA_DOES_GO_IRREVOCABLE	(1u << 6)
+/* The transaction contains no instrumentation code whatsover, most
+   likely because it is guaranteed to go irrevocable upon entry.  */
+#define GTMA_HAS_NO_INSTRUMENTATION	(1u << 7)
+
+struct GTY((tag("GSS_TRANSACTION")))
+  gtransaction : public gimple_statement_with_memory_ops_base
+{
+  /* [ WORD 1-9 ] : base class */
+
+  /* [ WORD 10 ] */
+  gimple_seq body;
+
+  /* [ WORD 11-13 ] */
+  tree label_norm;
+  tree label_uninst;
+  tree label_over;
+};
+
+#define DEFGSSTRUCT(SYM, STRUCT, HAS_TREE_OP)	SYM,
+enum gimple_statement_structure_enum {
+#include "gsstruct.def"
+    LAST_GSS_ENUM
+};
+#undef DEFGSSTRUCT
+
+/* A statement with the invariant that
+      stmt->code == GIMPLE_COND
+   i.e. a conditional jump statement.  */
+
+struct GTY((tag("GSS_WITH_OPS")))
+  gcond : public gimple_statement_with_ops
+{
+  /* no additional fields; this uses the layout for GSS_WITH_OPS. */
+  static const enum gimple_code code_ = GIMPLE_COND;
+};
+
+/* A statement with the invariant that
+      stmt->code == GIMPLE_DEBUG
+   i.e. a debug statement.  */
+
+struct GTY((tag("GSS_WITH_OPS")))
+  gdebug : public gimple_statement_with_ops
+{
+  /* no additional fields; this uses the layout for GSS_WITH_OPS. */
+};
+
+/* A statement with the invariant that
+      stmt->code == GIMPLE_GOTO
+   i.e. a goto statement.  */
+
+struct GTY((tag("GSS_WITH_OPS")))
+  ggoto : public gimple_statement_with_ops
+{
+  /* no additional fields; this uses the layout for GSS_WITH_OPS. */
+};
+
+/* A statement with the invariant that
+      stmt->code == GIMPLE_LABEL
+   i.e. a label statement.  */
+
+struct GTY((tag("GSS_WITH_OPS")))
+  glabel : public gimple_statement_with_ops
+{
+  /* no additional fields; this uses the layout for GSS_WITH_OPS. */
+};
+
+/* A statement with the invariant that
+      stmt->code == GIMPLE_SWITCH
+   i.e. a switch statement.  */
+
+struct GTY((tag("GSS_WITH_OPS")))
+  gswitch : public gimple_statement_with_ops
+{
+  /* no additional fields; this uses the layout for GSS_WITH_OPS. */
+};
+
+/* A statement with the invariant that
+      stmt->code == GIMPLE_ASSIGN
+   i.e. an assignment statement.  */
+
+struct GTY((tag("GSS_WITH_MEM_OPS")))
+  gassign : public gimple_statement_with_memory_ops
+{
+  static const enum gimple_code code_ = GIMPLE_ASSIGN;
+  /* no additional fields; this uses the layout for GSS_WITH_MEM_OPS. */
+};
+
+/* A statement with the invariant that
+      stmt->code == GIMPLE_RETURN
+   i.e. a return statement.  */
+
+struct GTY((tag("GSS_WITH_MEM_OPS")))
+  greturn : public gimple_statement_with_memory_ops
+{
+  /* no additional fields; this uses the layout for GSS_WITH_MEM_OPS. */
+};
+
+template <>
+template <>
+inline bool
+is_a_helper <gasm *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_ASM;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gassign *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_ASSIGN;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gassign *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_ASSIGN;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gbind *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_BIND;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gcall *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_CALL;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gcatch *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_CATCH;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gcond *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_COND;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gcond *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_COND;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gdebug *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_DEBUG;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <ggoto *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_GOTO;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <glabel *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_LABEL;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gresx *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_RESX;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <geh_dispatch *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_EH_DISPATCH;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <geh_else *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_EH_ELSE;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <geh_filter *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_EH_FILTER;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <geh_mnt *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_EH_MUST_NOT_THROW;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gomp_atomic_load *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_ATOMIC_LOAD;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gomp_atomic_store *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_ATOMIC_STORE;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gimple_statement_omp_return *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_RETURN;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gomp_continue *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_CONTINUE;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gomp_critical *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_CRITICAL;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gomp_ordered *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_ORDERED;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gomp_for *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_FOR;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gimple_statement_omp_taskreg *>::test (gimple *gs)
+{
+  return (gs->code == GIMPLE_OMP_PARALLEL
+	  || gs->code == GIMPLE_OMP_TASK
+	  || gs->code == GIMPLE_OMP_TEAMS);
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gomp_parallel *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_PARALLEL;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gomp_target *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_TARGET;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gomp_sections *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_SECTIONS;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gomp_single *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_SINGLE;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gomp_teams *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_TEAMS;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gomp_task *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_TASK;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gphi *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_PHI;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <greturn *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_RETURN;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gswitch *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_SWITCH;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gtransaction *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_TRANSACTION;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gtry *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_TRY;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gimple_statement_wce *>::test (gimple *gs)
+{
+  return gs->code == GIMPLE_WITH_CLEANUP_EXPR;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gasm *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_ASM;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gbind *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_BIND;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gcall *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_CALL;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gcatch *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_CATCH;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gresx *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_RESX;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const geh_dispatch *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_EH_DISPATCH;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const geh_filter *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_EH_FILTER;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gomp_atomic_load *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_ATOMIC_LOAD;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gomp_atomic_store *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_ATOMIC_STORE;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gimple_statement_omp_return *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_RETURN;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gomp_continue *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_CONTINUE;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gomp_critical *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_CRITICAL;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gomp_ordered *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_ORDERED;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gomp_for *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_FOR;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gimple_statement_omp_taskreg *>::test (const gimple *gs)
+{
+  return (gs->code == GIMPLE_OMP_PARALLEL
+	  || gs->code == GIMPLE_OMP_TASK
+	  || gs->code == GIMPLE_OMP_TEAMS);
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gomp_parallel *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_PARALLEL;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gomp_target *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_TARGET;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gomp_sections *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_SECTIONS;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gomp_single *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_SINGLE;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gomp_teams *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_TEAMS;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gomp_task *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_OMP_TASK;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gphi *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_PHI;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gtransaction *>::test (const gimple *gs)
+{
+  return gs->code == GIMPLE_TRANSACTION;
+}
+
+/* Offset in bytes to the location of the operand vector.
+   Zero if there is no operand vector for this tuple structure.  */
+extern size_t const gimple_ops_offset_[];
+
+/* Map GIMPLE codes to GSS codes.  */
+extern enum gimple_statement_structure_enum const gss_for_code_[];
+
+/* This variable holds the currently expanded gimple statement for purposes
+   of comminucating the profile info to the builtin expanders.  */
+extern gimple *currently_expanding_gimple_stmt;
+
+gimple *gimple_alloc (enum gimple_code, unsigned CXX_MEM_STAT_INFO);
+greturn *gimple_build_return (tree);
+void gimple_call_reset_alias_info (gcall *);
+gcall *gimple_build_call_vec (tree, vec<tree> );
+gcall *gimple_build_call (tree, unsigned, ...);
+gcall *gimple_build_call_valist (tree, unsigned, va_list);
+gcall *gimple_build_call_internal (enum internal_fn, unsigned, ...);
+gcall *gimple_build_call_internal_vec (enum internal_fn, vec<tree> );
+gcall *gimple_build_call_from_tree (tree, tree);
+gassign *gimple_build_assign (tree, tree CXX_MEM_STAT_INFO);
+gassign *gimple_build_assign (tree, enum tree_code,
+			      tree, tree, tree CXX_MEM_STAT_INFO);
+gassign *gimple_build_assign (tree, enum tree_code,
+			      tree, tree CXX_MEM_STAT_INFO);
+gassign *gimple_build_assign (tree, enum tree_code, tree CXX_MEM_STAT_INFO);
+gcond *gimple_build_cond (enum tree_code, tree, tree, tree, tree);
+gcond *gimple_build_cond_from_tree (tree, tree, tree);
+void gimple_cond_set_condition_from_tree (gcond *, tree);
+glabel *gimple_build_label (tree label);
+ggoto *gimple_build_goto (tree dest);
+gimple *gimple_build_nop (void);
+gbind *gimple_build_bind (tree, gimple_seq, tree);
+gasm *gimple_build_asm_vec (const char *, vec<tree, va_gc> *,
+				 vec<tree, va_gc> *, vec<tree, va_gc> *,
+				 vec<tree, va_gc> *);
+gcatch *gimple_build_catch (tree, gimple_seq);
+geh_filter *gimple_build_eh_filter (tree, gimple_seq);
+geh_mnt *gimple_build_eh_must_not_throw (tree);
+geh_else *gimple_build_eh_else (gimple_seq, gimple_seq);
+gtry *gimple_build_try (gimple_seq, gimple_seq,
+					enum gimple_try_flags);
+gimple *gimple_build_wce (gimple_seq);
+gresx *gimple_build_resx (int);
+gswitch *gimple_build_switch_nlabels (unsigned, tree, tree);
+gswitch *gimple_build_switch (tree, tree, vec<tree> );
+geh_dispatch *gimple_build_eh_dispatch (int);
+gdebug *gimple_build_debug_bind (tree, tree, gimple * CXX_MEM_STAT_INFO);
+gdebug *gimple_build_debug_source_bind (tree, tree, gimple * CXX_MEM_STAT_INFO);
+gdebug *gimple_build_debug_begin_stmt (tree, location_t CXX_MEM_STAT_INFO);
+gdebug *gimple_build_debug_inline_entry (tree, location_t CXX_MEM_STAT_INFO);
+gomp_critical *gimple_build_omp_critical (gimple_seq, tree, tree);
+gomp_for *gimple_build_omp_for (gimple_seq, int, tree, size_t, gimple_seq);
+gomp_parallel *gimple_build_omp_parallel (gimple_seq, tree, tree, tree);
+gomp_task *gimple_build_omp_task (gimple_seq, tree, tree, tree, tree,
+				       tree, tree);
+gimple *gimple_build_omp_section (gimple_seq);
+gimple *gimple_build_omp_master (gimple_seq);
+gimple *gimple_build_omp_grid_body (gimple_seq);
+gimple *gimple_build_omp_taskgroup (gimple_seq, tree);
+gomp_continue *gimple_build_omp_continue (tree, tree);
+gomp_ordered *gimple_build_omp_ordered (gimple_seq, tree);
+gimple *gimple_build_omp_return (bool);
+gomp_sections *gimple_build_omp_sections (gimple_seq, tree);
+gimple *gimple_build_omp_sections_switch (void);
+gomp_single *gimple_build_omp_single (gimple_seq, tree);
+gomp_target *gimple_build_omp_target (gimple_seq, int, tree);
+gomp_teams *gimple_build_omp_teams (gimple_seq, tree);
+gomp_atomic_load *gimple_build_omp_atomic_load (tree, tree,
+						enum omp_memory_order);
+gomp_atomic_store *gimple_build_omp_atomic_store (tree, enum omp_memory_order);
+gtransaction *gimple_build_transaction (gimple_seq);
+extern void gimple_seq_add_stmt (gimple_seq *, gimple *);
+extern void gimple_seq_add_stmt_without_update (gimple_seq *, gimple *);
+void gimple_seq_add_seq (gimple_seq *, gimple_seq);
+void gimple_seq_add_seq_without_update (gimple_seq *, gimple_seq);
+extern void annotate_all_with_location_after (gimple_seq, gimple_stmt_iterator,
+					      location_t);
+extern void annotate_all_with_location (gimple_seq, location_t);
+bool empty_body_p (gimple_seq);
+gimple_seq gimple_seq_copy (gimple_seq);
+bool gimple_call_same_target_p (const gimple *, const gimple *);
+int gimple_call_flags (const gimple *);
+int gimple_call_arg_flags (const gcall *, unsigned);
+int gimple_call_return_flags (const gcall *);
+bool gimple_call_nonnull_result_p (gcall *);
+tree gimple_call_nonnull_arg (gcall *);
+bool gimple_assign_copy_p (gimple *);
+bool gimple_assign_ssa_name_copy_p (gimple *);
+bool gimple_assign_unary_nop_p (gimple *);
+void gimple_set_bb (gimple *, basic_block);
+void gimple_assign_set_rhs_from_tree (gimple_stmt_iterator *, tree);
+void gimple_assign_set_rhs_with_ops (gimple_stmt_iterator *, enum tree_code,
+				     tree, tree, tree);
+tree gimple_get_lhs (const gimple *);
+void gimple_set_lhs (gimple *, tree);
+gimple *gimple_copy (gimple *);
+bool gimple_has_side_effects (const gimple *);
+bool gimple_could_trap_p_1 (gimple *, bool, bool);
+bool gimple_could_trap_p (gimple *);
+bool gimple_assign_rhs_could_trap_p (gimple *);
+extern void dump_gimple_statistics (void);
+unsigned get_gimple_rhs_num_ops (enum tree_code);
+extern tree canonicalize_cond_expr_cond (tree);
+gcall *gimple_call_copy_skip_args (gcall *, bitmap);
+extern bool gimple_compare_field_offset (tree, tree);
+extern tree gimple_unsigned_type (tree);
+extern tree gimple_signed_type (tree);
+extern alias_set_type gimple_get_alias_set (tree);
+extern bool gimple_ior_addresses_taken (bitmap, gimple *);
+extern bool gimple_builtin_call_types_compatible_p (const gimple *, tree);
+extern combined_fn gimple_call_combined_fn (const gimple *);
+extern bool gimple_call_builtin_p (const gimple *);
+extern bool gimple_call_builtin_p (const gimple *, enum built_in_class);
+extern bool gimple_call_builtin_p (const gimple *, enum built_in_function);
+extern bool gimple_asm_clobbers_memory_p (const gasm *);
+extern void dump_decl_set (FILE *, bitmap);
+extern bool nonfreeing_call_p (gimple *);
+extern bool nonbarrier_call_p (gimple *);
+extern bool infer_nonnull_range (gimple *, tree);
+extern bool infer_nonnull_range_by_dereference (gimple *, tree);
+extern bool infer_nonnull_range_by_attribute (gimple *, tree);
+extern void sort_case_labels (vec<tree>);
+extern void preprocess_case_label_vec_for_gimple (vec<tree>, tree, tree *);
+extern void gimple_seq_set_location (gimple_seq, location_t);
+extern void gimple_seq_discard (gimple_seq);
+extern void maybe_remove_unused_call_args (struct function *, gimple *);
+extern bool gimple_inexpensive_call_p (gcall *);
+extern bool stmt_can_terminate_bb_p (gimple *);
+
+/* Formal (expression) temporary table handling: multiple occurrences of
+   the same scalar expression are evaluated into the same temporary.  */
+
+typedef struct gimple_temp_hash_elt
+{
+  tree val;   /* Key */
+  tree temp;  /* Value */
+} elt_t;
+
+/* Get the number of the next statement uid to be allocated.  */
+static inline unsigned int
+gimple_stmt_max_uid (struct function *fn)
+{
+  return fn->last_stmt_uid;
+}
+
+/* Set the number of the next statement uid to be allocated.  */
+static inline void
+set_gimple_stmt_max_uid (struct function *fn, unsigned int maxid)
+{
+  fn->last_stmt_uid = maxid;
+}
+
+/* Set the number of the next statement uid to be allocated.  */
+static inline unsigned int
+inc_gimple_stmt_max_uid (struct function *fn)
+{
+  return fn->last_stmt_uid++;
+}
+
+/* Return the first node in GIMPLE sequence S.  */
+
+static inline gimple_seq_node
+gimple_seq_first (gimple_seq s)
+{
+  return s;
+}
+
+
+/* Return the first statement in GIMPLE sequence S.  */
+
+static inline gimple *
+gimple_seq_first_stmt (gimple_seq s)
+{
+  gimple_seq_node n = gimple_seq_first (s);
+  return n;
+}
+
+/* Return the first statement in GIMPLE sequence S as a gbind *,
+   verifying that it has code GIMPLE_BIND in a checked build.  */
+
+static inline gbind *
+gimple_seq_first_stmt_as_a_bind (gimple_seq s)
+{
+  gimple_seq_node n = gimple_seq_first (s);
+  return as_a <gbind *> (n);
+}
+
+
+/* Return the last node in GIMPLE sequence S.  */
+
+static inline gimple_seq_node
+gimple_seq_last (gimple_seq s)
+{
+  return s ? s->prev : NULL;
+}
+
+
+/* Return the last statement in GIMPLE sequence S.  */
+
+static inline gimple *
+gimple_seq_last_stmt (gimple_seq s)
+{
+  gimple_seq_node n = gimple_seq_last (s);
+  return n;
+}
+
+
+/* Set the last node in GIMPLE sequence *PS to LAST.  */
+
+static inline void
+gimple_seq_set_last (gimple_seq *ps, gimple_seq_node last)
+{
+  (*ps)->prev = last;
+}
+
+
+/* Set the first node in GIMPLE sequence *PS to FIRST.  */
+
+static inline void
+gimple_seq_set_first (gimple_seq *ps, gimple_seq_node first)
+{
+  *ps = first;
+}
+
+
+/* Return true if GIMPLE sequence S is empty.  */
+
+static inline bool
+gimple_seq_empty_p (gimple_seq s)
+{
+  return s == NULL;
+}
+
+/* Allocate a new sequence and initialize its first element with STMT.  */
+
+static inline gimple_seq
+gimple_seq_alloc_with_stmt (gimple *stmt)
+{
+  gimple_seq seq = NULL;
+  gimple_seq_add_stmt (&seq, stmt);
+  return seq;
+}
+
+
+/* Returns the sequence of statements in BB.  */
+
+static inline gimple_seq
+bb_seq (const_basic_block bb)
+{
+  return (!(bb->flags & BB_RTL)) ? bb->il.gimple.seq : NULL;
+}
+
+static inline gimple_seq *
+bb_seq_addr (basic_block bb)
+{
+  return (!(bb->flags & BB_RTL)) ? &bb->il.gimple.seq : NULL;
+}
+
+/* Sets the sequence of statements in BB to SEQ.  */
+
+static inline void
+set_bb_seq (basic_block bb, gimple_seq seq)
+{
+  gcc_checking_assert (!(bb->flags & BB_RTL));
+  bb->il.gimple.seq = seq;
+}
+
+
+/* Return the code for GIMPLE statement G.  */
+
+static inline enum gimple_code
+gimple_code (const gimple *g)
+{
+  return g->code;
+}
+
+
+/* Return the GSS code used by a GIMPLE code.  */
+
+static inline enum gimple_statement_structure_enum
+gss_for_code (enum gimple_code code)
+{
+  gcc_gimple_checking_assert ((unsigned int)code < LAST_AND_UNUSED_GIMPLE_CODE);
+  return gss_for_code_[code];
+}
+
+
+/* Return which GSS code is used by GS.  */
+
+static inline enum gimple_statement_structure_enum
+gimple_statement_structure (gimple *gs)
+{
+  return gss_for_code (gimple_code (gs));
+}
+
+
+/* Return true if statement G has sub-statements.  This is only true for
+   High GIMPLE statements.  */
+
+static inline bool
+gimple_has_substatements (gimple *g)
+{
+  switch (gimple_code (g))
+    {
+    case GIMPLE_BIND:
+    case GIMPLE_CATCH:
+    case GIMPLE_EH_FILTER:
+    case GIMPLE_EH_ELSE:
+    case GIMPLE_TRY:
+    case GIMPLE_OMP_FOR:
+    case GIMPLE_OMP_MASTER:
+    case GIMPLE_OMP_TASKGROUP:
+    case GIMPLE_OMP_ORDERED:
+    case GIMPLE_OMP_SECTION:
+    case GIMPLE_OMP_PARALLEL:
+    case GIMPLE_OMP_TASK:
+    case GIMPLE_OMP_SECTIONS:
+    case GIMPLE_OMP_SINGLE:
+    case GIMPLE_OMP_TARGET:
+    case GIMPLE_OMP_TEAMS:
+    case GIMPLE_OMP_CRITICAL:
+    case GIMPLE_WITH_CLEANUP_EXPR:
+    case GIMPLE_TRANSACTION:
+    case GIMPLE_OMP_GRID_BODY:
+      return true;
+
+    default:
+      return false;
+    }
+}
+
+
+/* Return the basic block holding statement G.  */
+
+static inline basic_block
+gimple_bb (const gimple *g)
+{
+  return g->bb;
+}
+
+
+/* Return the lexical scope block holding statement G.  */
+
+static inline tree
+gimple_block (const gimple *g)
+{
+  return LOCATION_BLOCK (g->location);
+}
+
+
+/* Set BLOCK to be the lexical scope block holding statement G.  */
+
+static inline void
+gimple_set_block (gimple *g, tree block)
+{
+  g->location = set_block (g->location, block);
+}
+
+
+/* Return location information for statement G.  */
+
+static inline location_t
+gimple_location (const gimple *g)
+{
+  return g->location;
+}
+
+/* Return location information for statement G if g is not NULL.
+   Otherwise, UNKNOWN_LOCATION is returned.  */
+
+static inline location_t
+gimple_location_safe (const gimple *g)
+{
+  return g ? gimple_location (g) : UNKNOWN_LOCATION;
+}
+
+/* Set location information for statement G.  */
+
+static inline void
+gimple_set_location (gimple *g, location_t location)
+{
+  g->location = location;
+}
+
+
+/* Return true if G contains location information.  */
+
+static inline bool
+gimple_has_location (const gimple *g)
+{
+  return LOCATION_LOCUS (gimple_location (g)) != UNKNOWN_LOCATION;
+}
+
+
+/* Return non-artificial location information for statement G.  */
+
+static inline location_t
+gimple_nonartificial_location (const gimple *g)
+{
+  location_t *ploc = NULL;
+
+  if (tree block = gimple_block (g))
+    ploc = block_nonartificial_location (block);
+
+  return ploc ? *ploc : gimple_location (g);
+}
+
+
+/* Return the file name of the location of STMT.  */
+
+static inline const char *
+gimple_filename (const gimple *stmt)
+{
+  return LOCATION_FILE (gimple_location (stmt));
+}
+
+
+/* Return the line number of the location of STMT.  */
+
+static inline int
+gimple_lineno (const gimple *stmt)
+{
+  return LOCATION_LINE (gimple_location (stmt));
+}
+
+
+/* Determine whether SEQ is a singleton. */
+
+static inline bool
+gimple_seq_singleton_p (gimple_seq seq)
+{
+  return ((gimple_seq_first (seq) != NULL)
+	  && (gimple_seq_first (seq) == gimple_seq_last (seq)));
+}
+
+/* Return true if no warnings should be emitted for statement STMT.  */
+
+static inline bool
+gimple_no_warning_p (const gimple *stmt)
+{
+  return stmt->no_warning;
+}
+
+/* Set the no_warning flag of STMT to NO_WARNING.  */
+
+static inline void
+gimple_set_no_warning (gimple *stmt, bool no_warning)
+{
+  stmt->no_warning = (unsigned) no_warning;
+}
+
+/* Set the visited status on statement STMT to VISITED_P.
+
+   Please note that this 'visited' property of the gimple statement is
+   supposed to be undefined at pass boundaries.  This means that a
+   given pass should not assume it contains any useful value when the
+   pass starts and thus can set it to any value it sees fit.
+
+   You can learn more about the visited property of the gimple
+   statement by reading the comments of the 'visited' data member of
+   struct gimple.
+ */
+
+static inline void
+gimple_set_visited (gimple *stmt, bool visited_p)
+{
+  stmt->visited = (unsigned) visited_p;
+}
+
+
+/* Return the visited status for statement STMT.
+
+   Please note that this 'visited' property of the gimple statement is
+   supposed to be undefined at pass boundaries.  This means that a
+   given pass should not assume it contains any useful value when the
+   pass starts and thus can set it to any value it sees fit.
+
+   You can learn more about the visited property of the gimple
+   statement by reading the comments of the 'visited' data member of
+   struct gimple.  */
+
+static inline bool
+gimple_visited_p (gimple *stmt)
+{
+  return stmt->visited;
+}
+
+
+/* Set pass local flag PLF on statement STMT to VAL_P.
+
+   Please note that this PLF property of the gimple statement is
+   supposed to be undefined at pass boundaries.  This means that a
+   given pass should not assume it contains any useful value when the
+   pass starts and thus can set it to any value it sees fit.
+
+   You can learn more about the PLF property by reading the comment of
+   the 'plf' data member of struct gimple_statement_structure.  */
+
+static inline void
+gimple_set_plf (gimple *stmt, enum plf_mask plf, bool val_p)
+{
+  if (val_p)
+    stmt->plf |= (unsigned int) plf;
+  else
+    stmt->plf &= ~((unsigned int) plf);
+}
+
+
+/* Return the value of pass local flag PLF on statement STMT.
+
+   Please note that this 'plf' property of the gimple statement is
+   supposed to be undefined at pass boundaries.  This means that a
+   given pass should not assume it contains any useful value when the
+   pass starts and thus can set it to any value it sees fit.
+
+   You can learn more about the plf property by reading the comment of
+   the 'plf' data member of struct gimple_statement_structure.  */
+
+static inline unsigned int
+gimple_plf (gimple *stmt, enum plf_mask plf)
+{
+  return stmt->plf & ((unsigned int) plf);
+}
+
+
+/* Set the UID of statement.
+
+   Please note that this UID property is supposed to be undefined at
+   pass boundaries.  This means that a given pass should not assume it
+   contains any useful value when the pass starts and thus can set it
+   to any value it sees fit.  */
+
+static inline void
+gimple_set_uid (gimple *g, unsigned uid)
+{
+  g->uid = uid;
+}
+
+
+/* Return the UID of statement.
+
+   Please note that this UID property is supposed to be undefined at
+   pass boundaries.  This means that a given pass should not assume it
+   contains any useful value when the pass starts and thus can set it
+   to any value it sees fit.  */
+
+static inline unsigned
+gimple_uid (const gimple *g)
+{
+  return g->uid;
+}
+
+
+/* Make statement G a singleton sequence.  */
+
+static inline void
+gimple_init_singleton (gimple *g)
+{
+  g->next = NULL;
+  g->prev = g;
+}
+
+
+/* Return true if GIMPLE statement G has register or memory operands.  */
+
+static inline bool
+gimple_has_ops (const gimple *g)
+{
+  return gimple_code (g) >= GIMPLE_COND && gimple_code (g) <= GIMPLE_RETURN;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gimple_statement_with_ops *>::test (const gimple *gs)
+{
+  return gimple_has_ops (gs);
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gimple_statement_with_ops *>::test (gimple *gs)
+{
+  return gimple_has_ops (gs);
+}
+
+/* Return true if GIMPLE statement G has memory operands.  */
+
+static inline bool
+gimple_has_mem_ops (const gimple *g)
+{
+  return gimple_code (g) >= GIMPLE_ASSIGN && gimple_code (g) <= GIMPLE_RETURN;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const gimple_statement_with_memory_ops *>::test (const gimple *gs)
+{
+  return gimple_has_mem_ops (gs);
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <gimple_statement_with_memory_ops *>::test (gimple *gs)
+{
+  return gimple_has_mem_ops (gs);
+}
+
+/* Return the set of USE operands for statement G.  */
+
+static inline struct use_optype_d *
+gimple_use_ops (const gimple *g)
+{
+  const gimple_statement_with_ops *ops_stmt =
+    dyn_cast <const gimple_statement_with_ops *> (g);
+  if (!ops_stmt)
+    return NULL;
+  return ops_stmt->use_ops;
+}
+
+
+/* Set USE to be the set of USE operands for statement G.  */
+
+static inline void
+gimple_set_use_ops (gimple *g, struct use_optype_d *use)
+{
+  gimple_statement_with_ops *ops_stmt =
+    as_a <gimple_statement_with_ops *> (g);
+  ops_stmt->use_ops = use;
+}
+
+
+/* Return the single VUSE operand of the statement G.  */
+
+static inline tree
+gimple_vuse (const gimple *g)
+{
+  const gimple_statement_with_memory_ops *mem_ops_stmt =
+     dyn_cast <const gimple_statement_with_memory_ops *> (g);
+  if (!mem_ops_stmt)
+    return NULL_TREE;
+  return mem_ops_stmt->vuse;
+}
+
+/* Return the single VDEF operand of the statement G.  */
+
+static inline tree
+gimple_vdef (const gimple *g)
+{
+  const gimple_statement_with_memory_ops *mem_ops_stmt =
+     dyn_cast <const gimple_statement_with_memory_ops *> (g);
+  if (!mem_ops_stmt)
+    return NULL_TREE;
+  return mem_ops_stmt->vdef;
+}
+
+/* Return the single VUSE operand of the statement G.  */
+
+static inline tree *
+gimple_vuse_ptr (gimple *g)
+{
+  gimple_statement_with_memory_ops *mem_ops_stmt =
+     dyn_cast <gimple_statement_with_memory_ops *> (g);
+  if (!mem_ops_stmt)
+    return NULL;
+  return &mem_ops_stmt->vuse;
+}
+
+/* Return the single VDEF operand of the statement G.  */
+
+static inline tree *
+gimple_vdef_ptr (gimple *g)
+{
+  gimple_statement_with_memory_ops *mem_ops_stmt =
+     dyn_cast <gimple_statement_with_memory_ops *> (g);
+  if (!mem_ops_stmt)
+    return NULL;
+  return &mem_ops_stmt->vdef;
+}
+
+/* Set the single VUSE operand of the statement G.  */
+
+static inline void
+gimple_set_vuse (gimple *g, tree vuse)
+{
+  gimple_statement_with_memory_ops *mem_ops_stmt =
+    as_a <gimple_statement_with_memory_ops *> (g);
+  mem_ops_stmt->vuse = vuse;
+}
+
+/* Set the single VDEF operand of the statement G.  */
+
+static inline void
+gimple_set_vdef (gimple *g, tree vdef)
+{
+  gimple_statement_with_memory_ops *mem_ops_stmt =
+    as_a <gimple_statement_with_memory_ops *> (g);
+  mem_ops_stmt->vdef = vdef;
+}
+
+
+/* Return true if statement G has operands and the modified field has
+   been set.  */
+
+static inline bool
+gimple_modified_p (const gimple *g)
+{
+  return (gimple_has_ops (g)) ? (bool) g->modified : false;
+}
+
+
+/* Set the MODIFIED flag to MODIFIEDP, iff the gimple statement G has
+   a MODIFIED field.  */
+
+static inline void
+gimple_set_modified (gimple *s, bool modifiedp)
+{
+  if (gimple_has_ops (s))
+    s->modified = (unsigned) modifiedp;
+}
+
+
+/* Return the tree code for the expression computed by STMT.  This is
+   only valid for GIMPLE_COND, GIMPLE_CALL and GIMPLE_ASSIGN.  For
+   GIMPLE_CALL, return CALL_EXPR as the expression code for
+   consistency.  This is useful when the caller needs to deal with the
+   three kinds of computation that GIMPLE supports.  */
+
+static inline enum tree_code
+gimple_expr_code (const gimple *stmt)
+{
+  enum gimple_code code = gimple_code (stmt);
+  if (code == GIMPLE_ASSIGN || code == GIMPLE_COND)
+    return (enum tree_code) stmt->subcode;
+  else
+    {
+      gcc_gimple_checking_assert (code == GIMPLE_CALL);
+      return CALL_EXPR;
+    }
+}
+
+
+/* Return true if statement STMT contains volatile operands.  */
+
+static inline bool
+gimple_has_volatile_ops (const gimple *stmt)
+{
+  if (gimple_has_mem_ops (stmt))
+    return stmt->has_volatile_ops;
+  else
+    return false;
+}
+
+
+/* Set the HAS_VOLATILE_OPS flag to VOLATILEP.  */
+
+static inline void
+gimple_set_has_volatile_ops (gimple *stmt, bool volatilep)
+{
+  if (gimple_has_mem_ops (stmt))
+    stmt->has_volatile_ops = (unsigned) volatilep;
+}
+
+/* Return true if STMT is in a transaction.  */
+
+static inline bool
+gimple_in_transaction (const gimple *stmt)
+{
+  return bb_in_transaction (gimple_bb (stmt));
+}
+
+/* Return true if statement STMT may access memory.  */
+
+static inline bool
+gimple_references_memory_p (gimple *stmt)
+{
+  return gimple_has_mem_ops (stmt) && gimple_vuse (stmt);
+}
+
+
+/* Return the subcode for OMP statement S.  */
+
+static inline unsigned
+gimple_omp_subcode (const gimple *s)
+{
+  gcc_gimple_checking_assert (gimple_code (s) >= GIMPLE_OMP_ATOMIC_LOAD
+			      && gimple_code (s) <= GIMPLE_OMP_TEAMS);
+  return s->subcode;
+}
+
+/* Set the subcode for OMP statement S to SUBCODE.  */
+
+static inline void
+gimple_omp_set_subcode (gimple *s, unsigned int subcode)
+{
+  /* We only have 16 bits for the subcode.  Assert that we are not
+     overflowing it.  */
+  gcc_gimple_checking_assert (subcode < (1 << 16));
+  s->subcode = subcode;
+}
+
+/* Set the nowait flag on OMP_RETURN statement S.  */
+
+static inline void
+gimple_omp_return_set_nowait (gimple *s)
+{
+  GIMPLE_CHECK (s, GIMPLE_OMP_RETURN);
+  s->subcode |= GF_OMP_RETURN_NOWAIT;
+}
+
+
+/* Return true if OMP return statement G has the GF_OMP_RETURN_NOWAIT
+   flag set.  */
+
+static inline bool
+gimple_omp_return_nowait_p (const gimple *g)
+{
+  GIMPLE_CHECK (g, GIMPLE_OMP_RETURN);
+  return (gimple_omp_subcode (g) & GF_OMP_RETURN_NOWAIT) != 0;
+}
+
+
+/* Set the LHS of OMP return.  */
+
+static inline void
+gimple_omp_return_set_lhs (gimple *g, tree lhs)
+{
+  gimple_statement_omp_return *omp_return_stmt =
+    as_a <gimple_statement_omp_return *> (g);
+  omp_return_stmt->val = lhs;
+}
+
+
+/* Get the LHS of OMP return.  */
+
+static inline tree
+gimple_omp_return_lhs (const gimple *g)
+{
+  const gimple_statement_omp_return *omp_return_stmt =
+    as_a <const gimple_statement_omp_return *> (g);
+  return omp_return_stmt->val;
+}
+
+
+/* Return a pointer to the LHS of OMP return.  */
+
+static inline tree *
+gimple_omp_return_lhs_ptr (gimple *g)
+{
+  gimple_statement_omp_return *omp_return_stmt =
+    as_a <gimple_statement_omp_return *> (g);
+  return &omp_return_stmt->val;
+}
+
+
+/* Return true if OMP section statement G has the GF_OMP_SECTION_LAST
+   flag set.  */
+
+static inline bool
+gimple_omp_section_last_p (const gimple *g)
+{
+  GIMPLE_CHECK (g, GIMPLE_OMP_SECTION);
+  return (gimple_omp_subcode (g) & GF_OMP_SECTION_LAST) != 0;
+}
+
+
+/* Set the GF_OMP_SECTION_LAST flag on G.  */
+
+static inline void
+gimple_omp_section_set_last (gimple *g)
+{
+  GIMPLE_CHECK (g, GIMPLE_OMP_SECTION);
+  g->subcode |= GF_OMP_SECTION_LAST;
+}
+
+
+/* Return true if OMP parallel statement G has the
+   GF_OMP_PARALLEL_COMBINED flag set.  */
+
+static inline bool
+gimple_omp_parallel_combined_p (const gimple *g)
+{
+  GIMPLE_CHECK (g, GIMPLE_OMP_PARALLEL);
+  return (gimple_omp_subcode (g) & GF_OMP_PARALLEL_COMBINED) != 0;
+}
+
+
+/* Set the GF_OMP_PARALLEL_COMBINED field in G depending on the boolean
+   value of COMBINED_P.  */
+
+static inline void
+gimple_omp_parallel_set_combined_p (gimple *g, bool combined_p)
+{
+  GIMPLE_CHECK (g, GIMPLE_OMP_PARALLEL);
+  if (combined_p)
+    g->subcode |= GF_OMP_PARALLEL_COMBINED;
+  else
+    g->subcode &= ~GF_OMP_PARALLEL_COMBINED;
+}
+
+
+/* Return true if OMP atomic load/store statement G has the
+   GF_OMP_ATOMIC_NEED_VALUE flag set.  */
+
+static inline bool
+gimple_omp_atomic_need_value_p (const gimple *g)
+{
+  if (gimple_code (g) != GIMPLE_OMP_ATOMIC_LOAD)
+    GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_STORE);
+  return (gimple_omp_subcode (g) & GF_OMP_ATOMIC_NEED_VALUE) != 0;
+}
+
+
+/* Set the GF_OMP_ATOMIC_NEED_VALUE flag on G.  */
+
+static inline void
+gimple_omp_atomic_set_need_value (gimple *g)
+{
+  if (gimple_code (g) != GIMPLE_OMP_ATOMIC_LOAD)
+    GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_STORE);
+  g->subcode |= GF_OMP_ATOMIC_NEED_VALUE;
+}
+
+
+/* Return the memory order of the OMP atomic load/store statement G.  */
+
+static inline enum omp_memory_order
+gimple_omp_atomic_memory_order (const gimple *g)
+{
+  if (gimple_code (g) != GIMPLE_OMP_ATOMIC_LOAD)
+    GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_STORE);
+  return (enum omp_memory_order)
+	 (gimple_omp_subcode (g) & GF_OMP_ATOMIC_MEMORY_ORDER);
+}
+
+
+/* Set the memory order on G.  */
+
+static inline void
+gimple_omp_atomic_set_memory_order (gimple *g, enum omp_memory_order mo)
+{
+  if (gimple_code (g) != GIMPLE_OMP_ATOMIC_LOAD)
+    GIMPLE_CHECK (g, GIMPLE_OMP_ATOMIC_STORE);
+  g->subcode = ((g->subcode & ~GF_OMP_ATOMIC_MEMORY_ORDER)
+		| (mo & GF_OMP_ATOMIC_MEMORY_ORDER));
+}
+
+
+/* Return the number of operands for statement GS.  */
+
+static inline unsigned
+gimple_num_ops (const gimple *gs)
+{
+  return gs->num_ops;
+}
+
+
+/* Set the number of operands for statement GS.  */
+
+static inline void
+gimple_set_num_ops (gimple *gs, unsigned num_ops)
+{
+  gs->num_ops = num_ops;
+}
+
+
+/* Return the array of operands for statement GS.  */
+
+static inline tree *
+gimple_ops (gimple *gs)
+{
+  size_t off;
+
+  /* All the tuples have their operand vector at the very bottom
+     of the structure.  Note that those structures that do not
+     have an operand vector have a zero offset.  */
+  off = gimple_ops_offset_[gimple_statement_structure (gs)];
+  gcc_gimple_checking_assert (off != 0);
+
+  return (tree *) ((char *) gs + off);
+}
+
+
+/* Return operand I for statement GS.  */
+
+static inline tree
+gimple_op (const gimple *gs, unsigned i)
+{
+  if (gimple_has_ops (gs))
+    {
+      gcc_gimple_checking_assert (i < gimple_num_ops (gs));
+      return gimple_ops (CONST_CAST_GIMPLE (gs))[i];
+    }
+  else
+    return NULL_TREE;
+}
+
+/* Return a pointer to operand I for statement GS.  */
+
+static inline tree *
+gimple_op_ptr (gimple *gs, unsigned i)
+{
+  if (gimple_has_ops (gs))
+    {
+      gcc_gimple_checking_assert (i < gimple_num_ops (gs));
+      return gimple_ops (gs) + i;
+    }
+  else
+    return NULL;
+}
+
+/* Set operand I of statement GS to OP.  */
+
+static inline void
+gimple_set_op (gimple *gs, unsigned i, tree op)
+{
+  gcc_gimple_checking_assert (gimple_has_ops (gs) && i < gimple_num_ops (gs));
+
+  /* Note.  It may be tempting to assert that OP matches
+     is_gimple_operand, but that would be wrong.  Different tuples
+     accept slightly different sets of tree operands.  Each caller
+     should perform its own validation.  */
+  gimple_ops (gs)[i] = op;
+}
+
+/* Return true if GS is a GIMPLE_ASSIGN.  */
+
+static inline bool
+is_gimple_assign (const gimple *gs)
+{
+  return gimple_code (gs) == GIMPLE_ASSIGN;
+}
+
+/* Determine if expression CODE is one of the valid expressions that can
+   be used on the RHS of GIMPLE assignments.  */
+
+static inline enum gimple_rhs_class
+get_gimple_rhs_class (enum tree_code code)
+{
+  return (enum gimple_rhs_class) gimple_rhs_class_table[(int) code];
+}
+
+/* Return the LHS of assignment statement GS.  */
+
+static inline tree
+gimple_assign_lhs (const gassign *gs)
+{
+  return gs->op[0];
+}
+
+static inline tree
+gimple_assign_lhs (const gimple *gs)
+{
+  const gassign *ass = GIMPLE_CHECK2<const gassign *> (gs);
+  return gimple_assign_lhs (ass);
+}
+
+
+/* Return a pointer to the LHS of assignment statement GS.  */
+
+static inline tree *
+gimple_assign_lhs_ptr (gassign *gs)
+{
+  return &gs->op[0];
+}
+
+static inline tree *
+gimple_assign_lhs_ptr (gimple *gs)
+{
+  gassign *ass = GIMPLE_CHECK2<gassign *> (gs);
+  return gimple_assign_lhs_ptr (ass);
+}
+
+
+/* Set LHS to be the LHS operand of assignment statement GS.  */
+
+static inline void
+gimple_assign_set_lhs (gassign *gs, tree lhs)
+{
+  gs->op[0] = lhs;
+
+  if (lhs && TREE_CODE (lhs) == SSA_NAME)
+    SSA_NAME_DEF_STMT (lhs) = gs;
+}
+
+static inline void
+gimple_assign_set_lhs (gimple *gs, tree lhs)
+{
+  gassign *ass = GIMPLE_CHECK2<gassign *> (gs);
+  gimple_assign_set_lhs (ass, lhs);
+}
+
+
+/* Return the first operand on the RHS of assignment statement GS.  */
+
+static inline tree
+gimple_assign_rhs1 (const gassign *gs)
+{
+  return gs->op[1];
+}
+
+static inline tree
+gimple_assign_rhs1 (const gimple *gs)
+{
+  const gassign *ass = GIMPLE_CHECK2<const gassign *> (gs);
+  return gimple_assign_rhs1 (ass);
+}
+
+
+/* Return a pointer to the first operand on the RHS of assignment
+   statement GS.  */
+
+static inline tree *
+gimple_assign_rhs1_ptr (gassign *gs)
+{
+  return &gs->op[1];
+}
+
+static inline tree *
+gimple_assign_rhs1_ptr (gimple *gs)
+{
+  gassign *ass = GIMPLE_CHECK2<gassign *> (gs);
+  return gimple_assign_rhs1_ptr (ass);
+}
+
+/* Set RHS to be the first operand on the RHS of assignment statement GS.  */
+
+static inline void
+gimple_assign_set_rhs1 (gassign *gs, tree rhs)
+{
+  gs->op[1] = rhs;
+}
+
+static inline void
+gimple_assign_set_rhs1 (gimple *gs, tree rhs)
+{
+  gassign *ass = GIMPLE_CHECK2<gassign *> (gs);
+  gimple_assign_set_rhs1 (ass, rhs);
+}
+
+
+/* Return the second operand on the RHS of assignment statement GS.
+   If GS does not have two operands, NULL is returned instead.  */
+
+static inline tree
+gimple_assign_rhs2 (const gassign *gs)
+{
+  if (gimple_num_ops (gs) >= 3)
+    return gs->op[2];
+  else
+    return NULL_TREE;
+}
+
+static inline tree
+gimple_assign_rhs2 (const gimple *gs)
+{
+  const gassign *ass = GIMPLE_CHECK2<const gassign *> (gs);
+  return gimple_assign_rhs2 (ass);
+}
+
+
+/* Return a pointer to the second operand on the RHS of assignment
+   statement GS.  */
+
+static inline tree *
+gimple_assign_rhs2_ptr (gassign *gs)
+{
+  gcc_gimple_checking_assert (gimple_num_ops (gs) >= 3);
+  return &gs->op[2];
+}
+
+static inline tree *
+gimple_assign_rhs2_ptr (gimple *gs)
+{
+  gassign *ass = GIMPLE_CHECK2<gassign *> (gs);
+  return gimple_assign_rhs2_ptr (ass);
+}
+
+
+/* Set RHS to be the second operand on the RHS of assignment statement GS.  */
+
+static inline void
+gimple_assign_set_rhs2 (gassign *gs, tree rhs)
+{
+  gcc_gimple_checking_assert (gimple_num_ops (gs) >= 3);
+  gs->op[2] = rhs;
+}
+
+static inline void
+gimple_assign_set_rhs2 (gimple *gs, tree rhs)
+{
+  gassign *ass = GIMPLE_CHECK2<gassign *> (gs);
+  return gimple_assign_set_rhs2 (ass, rhs);
+}
+
+/* Return the third operand on the RHS of assignment statement GS.
+   If GS does not have two operands, NULL is returned instead.  */
+
+static inline tree
+gimple_assign_rhs3 (const gassign *gs)
+{
+  if (gimple_num_ops (gs) >= 4)
+    return gs->op[3];
+  else
+    return NULL_TREE;
+}
+
+static inline tree
+gimple_assign_rhs3 (const gimple *gs)
+{
+  const gassign *ass = GIMPLE_CHECK2<const gassign *> (gs);
+  return gimple_assign_rhs3 (ass);
+}
+
+/* Return a pointer to the third operand on the RHS of assignment
+   statement GS.  */
+
+static inline tree *
+gimple_assign_rhs3_ptr (gimple *gs)
+{
+  gassign *ass = GIMPLE_CHECK2<gassign *> (gs);
+  gcc_gimple_checking_assert (gimple_num_ops (gs) >= 4);
+  return &ass->op[3];
+}
+
+
+/* Set RHS to be the third operand on the RHS of assignment statement GS.  */
+
+static inline void
+gimple_assign_set_rhs3 (gassign *gs, tree rhs)
+{
+  gcc_gimple_checking_assert (gimple_num_ops (gs) >= 4);
+  gs->op[3] = rhs;
+}
+
+static inline void
+gimple_assign_set_rhs3 (gimple *gs, tree rhs)
+{
+  gassign *ass = GIMPLE_CHECK2<gassign *> (gs);
+  gimple_assign_set_rhs3 (ass, rhs);
+}
+
+
+/* A wrapper around 3 operand gimple_assign_set_rhs_with_ops, for callers
+   which expect to see only two operands.  */
+
+static inline void
+gimple_assign_set_rhs_with_ops (gimple_stmt_iterator *gsi, enum tree_code code,
+				tree op1, tree op2)
+{
+  gimple_assign_set_rhs_with_ops (gsi, code, op1, op2, NULL);
+}
+
+/* A wrapper around 3 operand gimple_assign_set_rhs_with_ops, for callers
+   which expect to see only one operands.  */
+
+static inline void
+gimple_assign_set_rhs_with_ops (gimple_stmt_iterator *gsi, enum tree_code code,
+				tree op1)
+{
+  gimple_assign_set_rhs_with_ops (gsi, code, op1, NULL, NULL);
+}
+
+/* Returns true if GS is a nontemporal move.  */
+
+static inline bool
+gimple_assign_nontemporal_move_p (const gassign *gs)
+{
+  return gs->nontemporal_move;
+}
+
+/* Sets nontemporal move flag of GS to NONTEMPORAL.  */
+
+static inline void
+gimple_assign_set_nontemporal_move (gimple *gs, bool nontemporal)
+{
+  GIMPLE_CHECK (gs, GIMPLE_ASSIGN);
+  gs->nontemporal_move = nontemporal;
+}
+
+
+/* Return the code of the expression computed on the rhs of assignment
+   statement GS.  In case that the RHS is a single object, returns the
+   tree code of the object.  */
+
+static inline enum tree_code
+gimple_assign_rhs_code (const gassign *gs)
+{
+  enum tree_code code = (enum tree_code) gs->subcode;
+  /* While we initially set subcode to the TREE_CODE of the rhs for
+     GIMPLE_SINGLE_RHS assigns we do not update that subcode to stay
+     in sync when we rewrite stmts into SSA form or do SSA propagations.  */
+  if (get_gimple_rhs_class (code) == GIMPLE_SINGLE_RHS)
+    code = TREE_CODE (gs->op[1]);
+
+  return code;
+}
+
+static inline enum tree_code
+gimple_assign_rhs_code (const gimple *gs)
+{
+  const gassign *ass = GIMPLE_CHECK2<const gassign *> (gs);
+  return gimple_assign_rhs_code (ass);
+}
+
+
+/* Set CODE to be the code for the expression computed on the RHS of
+   assignment S.  */
+
+static inline void
+gimple_assign_set_rhs_code (gimple *s, enum tree_code code)
+{
+  GIMPLE_CHECK (s, GIMPLE_ASSIGN);
+  s->subcode = code;
+}
+
+
+/* Return the gimple rhs class of the code of the expression computed on
+   the rhs of assignment statement GS.
+   This will never return GIMPLE_INVALID_RHS.  */
+
+static inline enum gimple_rhs_class
+gimple_assign_rhs_class (const gimple *gs)
+{
+  return get_gimple_rhs_class (gimple_assign_rhs_code (gs));
+}
+
+/* Return true if GS is an assignment with a singleton RHS, i.e.,
+   there is no operator associated with the assignment itself.
+   Unlike gimple_assign_copy_p, this predicate returns true for
+   any RHS operand, including those that perform an operation
+   and do not have the semantics of a copy, such as COND_EXPR.  */
+
+static inline bool
+gimple_assign_single_p (const gimple *gs)
+{
+  return (is_gimple_assign (gs)
+          && gimple_assign_rhs_class (gs) == GIMPLE_SINGLE_RHS);
+}
+
+/* Return true if GS performs a store to its lhs.  */
+
+static inline bool
+gimple_store_p (const gimple *gs)
+{
+  tree lhs = gimple_get_lhs (gs);
+  return lhs && !is_gimple_reg (lhs);
+}
+
+/* Return true if GS is an assignment that loads from its rhs1.  */
+
+static inline bool
+gimple_assign_load_p (const gimple *gs)
+{
+  tree rhs;
+  if (!gimple_assign_single_p (gs))
+    return false;
+  rhs = gimple_assign_rhs1 (gs);
+  if (TREE_CODE (rhs) == WITH_SIZE_EXPR)
+    return true;
+  rhs = get_base_address (rhs);
+  return (DECL_P (rhs)
+	  || TREE_CODE (rhs) == MEM_REF || TREE_CODE (rhs) == TARGET_MEM_REF);
+}
+
+
+/* Return true if S is a type-cast assignment.  */
+
+static inline bool
+gimple_assign_cast_p (const gimple *s)
+{
+  if (is_gimple_assign (s))
+    {
+      enum tree_code sc = gimple_assign_rhs_code (s);
+      return CONVERT_EXPR_CODE_P (sc)
+	     || sc == VIEW_CONVERT_EXPR
+	     || sc == FIX_TRUNC_EXPR;
+    }
+
+  return false;
+}
+
+/* Return true if S is a clobber statement.  */
+
+static inline bool
+gimple_clobber_p (const gimple *s)
+{
+  return gimple_assign_single_p (s)
+         && TREE_CLOBBER_P (gimple_assign_rhs1 (s));
+}
+
+/* Return true if GS is a GIMPLE_CALL.  */
+
+static inline bool
+is_gimple_call (const gimple *gs)
+{
+  return gimple_code (gs) == GIMPLE_CALL;
+}
+
+/* Return the LHS of call statement GS.  */
+
+static inline tree
+gimple_call_lhs (const gcall *gs)
+{
+  return gs->op[0];
+}
+
+static inline tree
+gimple_call_lhs (const gimple *gs)
+{
+  const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
+  return gimple_call_lhs (gc);
+}
+
+
+/* Return a pointer to the LHS of call statement GS.  */
+
+static inline tree *
+gimple_call_lhs_ptr (gcall *gs)
+{
+  return &gs->op[0];
+}
+
+static inline tree *
+gimple_call_lhs_ptr (gimple *gs)
+{
+  gcall *gc = GIMPLE_CHECK2<gcall *> (gs);
+  return gimple_call_lhs_ptr (gc);
+}
+
+
+/* Set LHS to be the LHS operand of call statement GS.  */
+
+static inline void
+gimple_call_set_lhs (gcall *gs, tree lhs)
+{
+  gs->op[0] = lhs;
+  if (lhs && TREE_CODE (lhs) == SSA_NAME)
+    SSA_NAME_DEF_STMT (lhs) = gs;
+}
+
+static inline void
+gimple_call_set_lhs (gimple *gs, tree lhs)
+{
+  gcall *gc = GIMPLE_CHECK2<gcall *> (gs);
+  gimple_call_set_lhs (gc, lhs);
+}
+
+
+/* Return true if call GS calls an internal-only function, as enumerated
+   by internal_fn.  */
+
+static inline bool
+gimple_call_internal_p (const gcall *gs)
+{
+  return (gs->subcode & GF_CALL_INTERNAL) != 0;
+}
+
+static inline bool
+gimple_call_internal_p (const gimple *gs)
+{
+  const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
+  return gimple_call_internal_p (gc);
+}
+
+/* Return true if call GS is marked as nocf_check.  */
+
+static inline bool
+gimple_call_nocf_check_p (const gcall *gs)
+{
+  return (gs->subcode & GF_CALL_NOCF_CHECK) != 0;
+}
+
+/* Mark statement GS as nocf_check call.  */
+
+static inline void
+gimple_call_set_nocf_check (gcall *gs, bool nocf_check)
+{
+  if (nocf_check)
+    gs->subcode |= GF_CALL_NOCF_CHECK;
+  else
+    gs->subcode &= ~GF_CALL_NOCF_CHECK;
+}
+
+/* Return the target of internal call GS.  */
+
+static inline enum internal_fn
+gimple_call_internal_fn (const gcall *gs)
+{
+  gcc_gimple_checking_assert (gimple_call_internal_p (gs));
+  return gs->u.internal_fn;
+}
+
+static inline enum internal_fn
+gimple_call_internal_fn (const gimple *gs)
+{
+  const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
+  return gimple_call_internal_fn (gc);
+}
+
+/* Return true, if this internal gimple call is unique.  */
+
+static inline bool
+gimple_call_internal_unique_p (const gcall *gs)
+{
+  return gimple_call_internal_fn (gs) == IFN_UNIQUE;
+}
+
+static inline bool
+gimple_call_internal_unique_p (const gimple *gs)
+{
+  const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
+  return gimple_call_internal_unique_p (gc);
+}
+
+/* Return true if GS is an internal function FN.  */
+
+static inline bool
+gimple_call_internal_p (const gimple *gs, internal_fn fn)
+{
+  return (is_gimple_call (gs)
+	  && gimple_call_internal_p (gs)
+	  && gimple_call_internal_fn (gs) == fn);
+}
+
+/* If CTRL_ALTERING_P is true, mark GIMPLE_CALL S to be a stmt
+   that could alter control flow.  */
+
+static inline void
+gimple_call_set_ctrl_altering (gcall *s, bool ctrl_altering_p)
+{
+  if (ctrl_altering_p)
+    s->subcode |= GF_CALL_CTRL_ALTERING;
+  else
+    s->subcode &= ~GF_CALL_CTRL_ALTERING;
+}
+
+static inline void
+gimple_call_set_ctrl_altering (gimple *s, bool ctrl_altering_p)
+{
+  gcall *gc = GIMPLE_CHECK2<gcall *> (s);
+  gimple_call_set_ctrl_altering (gc, ctrl_altering_p);
+}
+
+/* Return true if call GS calls an func whose GF_CALL_CTRL_ALTERING
+   flag is set. Such call could not be a stmt in the middle of a bb.  */
+
+static inline bool
+gimple_call_ctrl_altering_p (const gcall *gs)
+{
+  return (gs->subcode & GF_CALL_CTRL_ALTERING) != 0;
+}
+
+static inline bool
+gimple_call_ctrl_altering_p (const gimple *gs)
+{
+  const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
+  return gimple_call_ctrl_altering_p (gc);
+}
+
+
+/* Return the function type of the function called by GS.  */
+
+static inline tree
+gimple_call_fntype (const gcall *gs)
+{
+  if (gimple_call_internal_p (gs))
+    return NULL_TREE;
+  return gs->u.fntype;
+}
+
+static inline tree
+gimple_call_fntype (const gimple *gs)
+{
+  const gcall *call_stmt = GIMPLE_CHECK2<const gcall *> (gs);
+  return gimple_call_fntype (call_stmt);
+}
+
+/* Set the type of the function called by CALL_STMT to FNTYPE.  */
+
+static inline void
+gimple_call_set_fntype (gcall *call_stmt, tree fntype)
+{
+  gcc_gimple_checking_assert (!gimple_call_internal_p (call_stmt));
+  call_stmt->u.fntype = fntype;
+}
+
+
+/* Return the tree node representing the function called by call
+   statement GS.  */
+
+static inline tree
+gimple_call_fn (const gcall *gs)
+{
+  return gs->op[1];
+}
+
+static inline tree
+gimple_call_fn (const gimple *gs)
+{
+  const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
+  return gimple_call_fn (gc);
+}
+
+/* Return a pointer to the tree node representing the function called by call
+   statement GS.  */
+
+static inline tree *
+gimple_call_fn_ptr (gcall *gs)
+{
+  return &gs->op[1];
+}
+
+static inline tree *
+gimple_call_fn_ptr (gimple *gs)
+{
+  gcall *gc = GIMPLE_CHECK2<gcall *> (gs);
+  return gimple_call_fn_ptr (gc);
+}
+
+
+/* Set FN to be the function called by call statement GS.  */
+
+static inline void
+gimple_call_set_fn (gcall *gs, tree fn)
+{
+  gcc_gimple_checking_assert (!gimple_call_internal_p (gs));
+  gs->op[1] = fn;
+}
+
+
+/* Set FNDECL to be the function called by call statement GS.  */
+
+static inline void
+gimple_call_set_fndecl (gcall *gs, tree decl)
+{
+  gcc_gimple_checking_assert (!gimple_call_internal_p (gs));
+  gs->op[1] = build1_loc (gimple_location (gs), ADDR_EXPR,
+			  build_pointer_type (TREE_TYPE (decl)), decl);
+}
+
+static inline void
+gimple_call_set_fndecl (gimple *gs, tree decl)
+{
+  gcall *gc = GIMPLE_CHECK2<gcall *> (gs);
+  gimple_call_set_fndecl (gc, decl);
+}
+
+
+/* Set internal function FN to be the function called by call statement CALL_STMT.  */
+
+static inline void
+gimple_call_set_internal_fn (gcall *call_stmt, enum internal_fn fn)
+{
+  gcc_gimple_checking_assert (gimple_call_internal_p (call_stmt));
+  call_stmt->u.internal_fn = fn;
+}
+
+
+/* If a given GIMPLE_CALL's callee is a FUNCTION_DECL, return it.
+   Otherwise return NULL.  This function is analogous to
+   get_callee_fndecl in tree land.  */
+
+static inline tree
+gimple_call_fndecl (const gcall *gs)
+{
+  return gimple_call_addr_fndecl (gimple_call_fn (gs));
+}
+
+static inline tree
+gimple_call_fndecl (const gimple *gs)
+{
+  const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
+  return gimple_call_fndecl (gc);
+}
+
+
+/* Return the type returned by call statement GS.  */
+
+static inline tree
+gimple_call_return_type (const gcall *gs)
+{
+  tree type = gimple_call_fntype (gs);
+
+  if (type == NULL_TREE)
+    return TREE_TYPE (gimple_call_lhs (gs));
+
+  /* The type returned by a function is the type of its
+     function type.  */
+  return TREE_TYPE (type);
+}
+
+
+/* Return the static chain for call statement GS.  */
+
+static inline tree
+gimple_call_chain (const gcall *gs)
+{
+  return gs->op[2];
+}
+
+static inline tree
+gimple_call_chain (const gimple *gs)
+{
+  const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
+  return gimple_call_chain (gc);
+}
+
+
+/* Return a pointer to the static chain for call statement CALL_STMT.  */
+
+static inline tree *
+gimple_call_chain_ptr (gcall *call_stmt)
+{
+  return &call_stmt->op[2];
+}
+
+/* Set CHAIN to be the static chain for call statement CALL_STMT.  */
+
+static inline void
+gimple_call_set_chain (gcall *call_stmt, tree chain)
+{
+  call_stmt->op[2] = chain;
+}
+
+
+/* Return the number of arguments used by call statement GS.  */
+
+static inline unsigned
+gimple_call_num_args (const gcall *gs)
+{
+  return gimple_num_ops (gs) - 3;
+}
+
+static inline unsigned
+gimple_call_num_args (const gimple *gs)
+{
+  const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
+  return gimple_call_num_args (gc);
+}
+
+
+/* Return the argument at position INDEX for call statement GS.  */
+
+static inline tree
+gimple_call_arg (const gcall *gs, unsigned index)
+{
+  gcc_gimple_checking_assert (gimple_num_ops (gs) > index + 3);
+  return gs->op[index + 3];
+}
+
+static inline tree
+gimple_call_arg (const gimple *gs, unsigned index)
+{
+  const gcall *gc = GIMPLE_CHECK2<const gcall *> (gs);
+  return gimple_call_arg (gc, index);
+}
+
+
+/* Return a pointer to the argument at position INDEX for call
+   statement GS.  */
+
+static inline tree *
+gimple_call_arg_ptr (gcall *gs, unsigned index)
+{
+  gcc_gimple_checking_assert (gimple_num_ops (gs) > index + 3);
+  return &gs->op[index + 3];
+}
+
+static inline tree *
+gimple_call_arg_ptr (gimple *gs, unsigned index)
+{
+  gcall *gc = GIMPLE_CHECK2<gcall *> (gs);
+  return gimple_call_arg_ptr (gc, index);
+}
+
+
+/* Set ARG to be the argument at position INDEX for call statement GS.  */
+
+static inline void
+gimple_call_set_arg (gcall *gs, unsigned index, tree arg)
+{
+  gcc_gimple_checking_assert (gimple_num_ops (gs) > index + 3);
+  gs->op[index + 3] = arg;
+}
+
+static inline void
+gimple_call_set_arg (gimple *gs, unsigned index, tree arg)
+{
+  gcall *gc = GIMPLE_CHECK2<gcall *> (gs);
+  gimple_call_set_arg (gc, index, arg);
+}
+
+
+/* If TAIL_P is true, mark call statement S as being a tail call
+   (i.e., a call just before the exit of a function).  These calls are
+   candidate for tail call optimization.  */
+
+static inline void
+gimple_call_set_tail (gcall *s, bool tail_p)
+{
+  if (tail_p)
+    s->subcode |= GF_CALL_TAILCALL;
+  else
+    s->subcode &= ~GF_CALL_TAILCALL;
+}
+
+
+/* Return true if GIMPLE_CALL S is marked as a tail call.  */
+
+static inline bool
+gimple_call_tail_p (gcall *s)
+{
+  return (s->subcode & GF_CALL_TAILCALL) != 0;
+}
+
+/* Mark (or clear) call statement S as requiring tail call optimization.  */
+
+static inline void
+gimple_call_set_must_tail (gcall *s, bool must_tail_p)
+{
+  if (must_tail_p)
+    s->subcode |= GF_CALL_MUST_TAIL_CALL;
+  else
+    s->subcode &= ~GF_CALL_MUST_TAIL_CALL;
+}
+
+/* Return true if call statement has been marked as requiring
+   tail call optimization.  */
+
+static inline bool
+gimple_call_must_tail_p (const gcall *s)
+{
+  return (s->subcode & GF_CALL_MUST_TAIL_CALL) != 0;
+}
+
+/* If RETURN_SLOT_OPT_P is true mark GIMPLE_CALL S as valid for return
+   slot optimization.  This transformation uses the target of the call
+   expansion as the return slot for calls that return in memory.  */
+
+static inline void
+gimple_call_set_return_slot_opt (gcall *s, bool return_slot_opt_p)
+{
+  if (return_slot_opt_p)
+    s->subcode |= GF_CALL_RETURN_SLOT_OPT;
+  else
+    s->subcode &= ~GF_CALL_RETURN_SLOT_OPT;
+}
+
+
+/* Return true if S is marked for return slot optimization.  */
+
+static inline bool
+gimple_call_return_slot_opt_p (gcall *s)
+{
+  return (s->subcode & GF_CALL_RETURN_SLOT_OPT) != 0;
+}
+
+
+/* If FROM_THUNK_P is true, mark GIMPLE_CALL S as being the jump from a
+   thunk to the thunked-to function.  */
+
+static inline void
+gimple_call_set_from_thunk (gcall *s, bool from_thunk_p)
+{
+  if (from_thunk_p)
+    s->subcode |= GF_CALL_FROM_THUNK;
+  else
+    s->subcode &= ~GF_CALL_FROM_THUNK;
+}
+
+
+/* Return true if GIMPLE_CALL S is a jump from a thunk.  */
+
+static inline bool
+gimple_call_from_thunk_p (gcall *s)
+{
+  return (s->subcode & GF_CALL_FROM_THUNK) != 0;
+}
+
+
+/* If PASS_ARG_PACK_P is true, GIMPLE_CALL S is a stdarg call that needs the
+   argument pack in its argument list.  */
+
+static inline void
+gimple_call_set_va_arg_pack (gcall *s, bool pass_arg_pack_p)
+{
+  if (pass_arg_pack_p)
+    s->subcode |= GF_CALL_VA_ARG_PACK;
+  else
+    s->subcode &= ~GF_CALL_VA_ARG_PACK;
+}
+
+
+/* Return true if GIMPLE_CALL S is a stdarg call that needs the
+   argument pack in its argument list.  */
+
+static inline bool
+gimple_call_va_arg_pack_p (gcall *s)
+{
+  return (s->subcode & GF_CALL_VA_ARG_PACK) != 0;
+}
+
+
+/* Return true if S is a noreturn call.  */
+
+static inline bool
+gimple_call_noreturn_p (const gcall *s)
+{
+  return (gimple_call_flags (s) & ECF_NORETURN) != 0;
+}
+
+static inline bool
+gimple_call_noreturn_p (const gimple *s)
+{
+  const gcall *gc = GIMPLE_CHECK2<const gcall *> (s);
+  return gimple_call_noreturn_p (gc);
+}
+
+
+/* If NOTHROW_P is true, GIMPLE_CALL S is a call that is known to not throw
+   even if the called function can throw in other cases.  */
+
+static inline void
+gimple_call_set_nothrow (gcall *s, bool nothrow_p)
+{
+  if (nothrow_p)
+    s->subcode |= GF_CALL_NOTHROW;
+  else
+    s->subcode &= ~GF_CALL_NOTHROW;
+}
+
+/* Return true if S is a nothrow call.  */
+
+static inline bool
+gimple_call_nothrow_p (gcall *s)
+{
+  return (gimple_call_flags (s) & ECF_NOTHROW) != 0;
+}
+
+/* If FOR_VAR is true, GIMPLE_CALL S is a call to builtin_alloca that
+   is known to be emitted for VLA objects.  Those are wrapped by
+   stack_save/stack_restore calls and hence can't lead to unbounded
+   stack growth even when they occur in loops.  */
+
+static inline void
+gimple_call_set_alloca_for_var (gcall *s, bool for_var)
+{
+  if (for_var)
+    s->subcode |= GF_CALL_ALLOCA_FOR_VAR;
+  else
+    s->subcode &= ~GF_CALL_ALLOCA_FOR_VAR;
+}
+
+/* Return true of S is a call to builtin_alloca emitted for VLA objects.  */
+
+static inline bool
+gimple_call_alloca_for_var_p (gcall *s)
+{
+  return (s->subcode & GF_CALL_ALLOCA_FOR_VAR) != 0;
+}
+
+/* If BY_DESCRIPTOR_P is true, GIMPLE_CALL S is an indirect call for which
+   pointers to nested function are descriptors instead of trampolines.  */
+
+static inline void
+gimple_call_set_by_descriptor (gcall  *s, bool by_descriptor_p)
+{
+  if (by_descriptor_p)
+    s->subcode |= GF_CALL_BY_DESCRIPTOR;
+  else
+    s->subcode &= ~GF_CALL_BY_DESCRIPTOR;
+}
+
+/* Return true if S is a by-descriptor call.  */
+
+static inline bool
+gimple_call_by_descriptor_p (gcall *s)
+{
+  return (s->subcode & GF_CALL_BY_DESCRIPTOR) != 0;
+}
+
+/* Copy all the GF_CALL_* flags from ORIG_CALL to DEST_CALL.  */
+
+static inline void
+gimple_call_copy_flags (gcall *dest_call, gcall *orig_call)
+{
+  dest_call->subcode = orig_call->subcode;
+}
+
+
+/* Return a pointer to the points-to solution for the set of call-used
+   variables of the call CALL_STMT.  */
+
+static inline struct pt_solution *
+gimple_call_use_set (gcall *call_stmt)
+{
+  return &call_stmt->call_used;
+}
+
+
+/* Return a pointer to the points-to solution for the set of call-used
+   variables of the call CALL_STMT.  */
+
+static inline struct pt_solution *
+gimple_call_clobber_set (gcall *call_stmt)
+{
+  return &call_stmt->call_clobbered;
+}
+
+
+/* Returns true if this is a GIMPLE_ASSIGN or a GIMPLE_CALL with a
+   non-NULL lhs.  */
+
+static inline bool
+gimple_has_lhs (gimple *stmt)
+{
+  if (is_gimple_assign (stmt))
+    return true;
+  if (gcall *call = dyn_cast <gcall *> (stmt))
+    return gimple_call_lhs (call) != NULL_TREE;
+  return false;
+}
+
+
+/* Return the code of the predicate computed by conditional statement GS.  */
+
+static inline enum tree_code
+gimple_cond_code (const gcond *gs)
+{
+  return (enum tree_code) gs->subcode;
+}
+
+static inline enum tree_code
+gimple_cond_code (const gimple *gs)
+{
+  const gcond *gc = GIMPLE_CHECK2<const gcond *> (gs);
+  return gimple_cond_code (gc);
+}
+
+
+/* Set CODE to be the predicate code for the conditional statement GS.  */
+
+static inline void
+gimple_cond_set_code (gcond *gs, enum tree_code code)
+{
+  gs->subcode = code;
+}
+
+
+/* Return the LHS of the predicate computed by conditional statement GS.  */
+
+static inline tree
+gimple_cond_lhs (const gcond *gs)
+{
+  return gs->op[0];
+}
+
+static inline tree
+gimple_cond_lhs (const gimple *gs)
+{
+  const gcond *gc = GIMPLE_CHECK2<const gcond *> (gs);
+  return gimple_cond_lhs (gc);
+}
+
+/* Return the pointer to the LHS of the predicate computed by conditional
+   statement GS.  */
+
+static inline tree *
+gimple_cond_lhs_ptr (gcond *gs)
+{
+  return &gs->op[0];
+}
+
+/* Set LHS to be the LHS operand of the predicate computed by
+   conditional statement GS.  */
+
+static inline void
+gimple_cond_set_lhs (gcond *gs, tree lhs)
+{
+  gs->op[0] = lhs;
+}
+
+
+/* Return the RHS operand of the predicate computed by conditional GS.  */
+
+static inline tree
+gimple_cond_rhs (const gcond *gs)
+{
+  return gs->op[1];
+}
+
+static inline tree
+gimple_cond_rhs (const gimple *gs)
+{
+  const gcond *gc = GIMPLE_CHECK2<const gcond *> (gs);
+  return gimple_cond_rhs (gc);
+}
+
+/* Return the pointer to the RHS operand of the predicate computed by
+   conditional GS.  */
+
+static inline tree *
+gimple_cond_rhs_ptr (gcond *gs)
+{
+  return &gs->op[1];
+}
+
+
+/* Set RHS to be the RHS operand of the predicate computed by
+   conditional statement GS.  */
+
+static inline void
+gimple_cond_set_rhs (gcond *gs, tree rhs)
+{
+  gs->op[1] = rhs;
+}
+
+
+/* Return the label used by conditional statement GS when its
+   predicate evaluates to true.  */
+
+static inline tree
+gimple_cond_true_label (const gcond *gs)
+{
+  return gs->op[2];
+}
+
+
+/* Set LABEL to be the label used by conditional statement GS when its
+   predicate evaluates to true.  */
+
+static inline void
+gimple_cond_set_true_label (gcond *gs, tree label)
+{
+  gs->op[2] = label;
+}
+
+
+/* Set LABEL to be the label used by conditional statement GS when its
+   predicate evaluates to false.  */
+
+static inline void
+gimple_cond_set_false_label (gcond *gs, tree label)
+{
+  gs->op[3] = label;
+}
+
+
+/* Return the label used by conditional statement GS when its
+   predicate evaluates to false.  */
+
+static inline tree
+gimple_cond_false_label (const gcond *gs)
+{
+  return gs->op[3];
+}
+
+
+/* Set the conditional COND_STMT to be of the form 'if (1 == 0)'.  */
+
+static inline void
+gimple_cond_make_false (gcond *gs)
+{
+  gimple_cond_set_lhs (gs, boolean_false_node);
+  gimple_cond_set_rhs (gs, boolean_false_node);
+  gs->subcode = NE_EXPR;
+}
+
+
+/* Set the conditional COND_STMT to be of the form 'if (1 == 1)'.  */
+
+static inline void
+gimple_cond_make_true (gcond *gs)
+{
+  gimple_cond_set_lhs (gs, boolean_true_node);
+  gimple_cond_set_rhs (gs, boolean_false_node);
+  gs->subcode = NE_EXPR;
+}
+
+/* Check if conditional statemente GS is of the form 'if (1 == 1)',
+  'if (0 == 0)', 'if (1 != 0)' or 'if (0 != 1)' */
+
+static inline bool
+gimple_cond_true_p (const gcond *gs)
+{
+  tree lhs = gimple_cond_lhs (gs);
+  tree rhs = gimple_cond_rhs (gs);
+  enum tree_code code = gimple_cond_code (gs);
+
+  if (lhs != boolean_true_node && lhs != boolean_false_node)
+    return false;
+
+  if (rhs != boolean_true_node && rhs != boolean_false_node)
+    return false;
+
+  if (code == NE_EXPR && lhs != rhs)
+    return true;
+
+  if (code == EQ_EXPR && lhs == rhs)
+      return true;
+
+  return false;
+}
+
+/* Check if conditional statement GS is of the form 'if (1 != 1)',
+   'if (0 != 0)', 'if (1 == 0)' or 'if (0 == 1)' */
+
+static inline bool
+gimple_cond_false_p (const gcond *gs)
+{
+  tree lhs = gimple_cond_lhs (gs);
+  tree rhs = gimple_cond_rhs (gs);
+  enum tree_code code = gimple_cond_code (gs);
+
+  if (lhs != boolean_true_node && lhs != boolean_false_node)
+    return false;
+
+  if (rhs != boolean_true_node && rhs != boolean_false_node)
+    return false;
+
+  if (code == NE_EXPR && lhs == rhs)
+    return true;
+
+  if (code == EQ_EXPR && lhs != rhs)
+      return true;
+
+  return false;
+}
+
+/* Set the code, LHS and RHS of GIMPLE_COND STMT from CODE, LHS and RHS.  */
+
+static inline void
+gimple_cond_set_condition (gcond *stmt, enum tree_code code, tree lhs,
+			   tree rhs)
+{
+  gimple_cond_set_code (stmt, code);
+  gimple_cond_set_lhs (stmt, lhs);
+  gimple_cond_set_rhs (stmt, rhs);
+}
+
+/* Return the LABEL_DECL node used by GIMPLE_LABEL statement GS.  */
+
+static inline tree
+gimple_label_label (const glabel *gs)
+{
+  return gs->op[0];
+}
+
+
+/* Set LABEL to be the LABEL_DECL node used by GIMPLE_LABEL statement
+   GS.  */
+
+static inline void
+gimple_label_set_label (glabel *gs, tree label)
+{
+  gs->op[0] = label;
+}
+
+
+/* Return the destination of the unconditional jump GS.  */
+
+static inline tree
+gimple_goto_dest (const gimple *gs)
+{
+  GIMPLE_CHECK (gs, GIMPLE_GOTO);
+  return gimple_op (gs, 0);
+}
+
+
+/* Set DEST to be the destination of the unconditonal jump GS.  */
+
+static inline void
+gimple_goto_set_dest (ggoto *gs, tree dest)
+{
+  gs->op[0] = dest;
+}
+
+
+/* Return the variables declared in the GIMPLE_BIND statement GS.  */
+
+static inline tree
+gimple_bind_vars (const gbind *bind_stmt)
+{
+  return bind_stmt->vars;
+}
+
+
+/* Set VARS to be the set of variables declared in the GIMPLE_BIND
+   statement GS.  */
+
+static inline void
+gimple_bind_set_vars (gbind *bind_stmt, tree vars)
+{
+  bind_stmt->vars = vars;
+}
+
+
+/* Append VARS to the set of variables declared in the GIMPLE_BIND
+   statement GS.  */
+
+static inline void
+gimple_bind_append_vars (gbind *bind_stmt, tree vars)
+{
+  bind_stmt->vars = chainon (bind_stmt->vars, vars);
+}
+
+
+static inline gimple_seq *
+gimple_bind_body_ptr (gbind *bind_stmt)
+{
+  return &bind_stmt->body;
+}
+
+/* Return the GIMPLE sequence contained in the GIMPLE_BIND statement GS.  */
+
+static inline gimple_seq
+gimple_bind_body (gbind *gs)
+{
+  return *gimple_bind_body_ptr (gs);
+}
+
+
+/* Set SEQ to be the GIMPLE sequence contained in the GIMPLE_BIND
+   statement GS.  */
+
+static inline void
+gimple_bind_set_body (gbind *bind_stmt, gimple_seq seq)
+{
+  bind_stmt->body = seq;
+}
+
+
+/* Append a statement to the end of a GIMPLE_BIND's body.  */
+
+static inline void
+gimple_bind_add_stmt (gbind *bind_stmt, gimple *stmt)
+{
+  gimple_seq_add_stmt (&bind_stmt->body, stmt);
+}
+
+
+/* Append a sequence of statements to the end of a GIMPLE_BIND's body.  */
+
+static inline void
+gimple_bind_add_seq (gbind *bind_stmt, gimple_seq seq)
+{
+  gimple_seq_add_seq (&bind_stmt->body, seq);
+}
+
+
+/* Return the TREE_BLOCK node associated with GIMPLE_BIND statement
+   GS.  This is analogous to the BIND_EXPR_BLOCK field in trees.  */
+
+static inline tree
+gimple_bind_block (const gbind *bind_stmt)
+{
+  return bind_stmt->block;
+}
+
+
+/* Set BLOCK to be the TREE_BLOCK node associated with GIMPLE_BIND
+   statement GS.  */
+
+static inline void
+gimple_bind_set_block (gbind *bind_stmt, tree block)
+{
+  gcc_gimple_checking_assert (block == NULL_TREE
+			      || TREE_CODE (block) == BLOCK);
+  bind_stmt->block = block;
+}
+
+
+/* Return the number of input operands for GIMPLE_ASM ASM_STMT.  */
+
+static inline unsigned
+gimple_asm_ninputs (const gasm *asm_stmt)
+{
+  return asm_stmt->ni;
+}
+
+
+/* Return the number of output operands for GIMPLE_ASM ASM_STMT.  */
+
+static inline unsigned
+gimple_asm_noutputs (const gasm *asm_stmt)
+{
+  return asm_stmt->no;
+}
+
+
+/* Return the number of clobber operands for GIMPLE_ASM ASM_STMT.  */
+
+static inline unsigned
+gimple_asm_nclobbers (const gasm *asm_stmt)
+{
+  return asm_stmt->nc;
+}
+
+/* Return the number of label operands for GIMPLE_ASM ASM_STMT.  */
+
+static inline unsigned
+gimple_asm_nlabels (const gasm *asm_stmt)
+{
+  return asm_stmt->nl;
+}
+
+/* Return input operand INDEX of GIMPLE_ASM ASM_STMT.  */
+
+static inline tree
+gimple_asm_input_op (const gasm *asm_stmt, unsigned index)
+{
+  gcc_gimple_checking_assert (index < asm_stmt->ni);
+  return asm_stmt->op[index + asm_stmt->no];
+}
+
+/* Set IN_OP to be input operand INDEX in GIMPLE_ASM ASM_STMT.  */
+
+static inline void
+gimple_asm_set_input_op (gasm *asm_stmt, unsigned index, tree in_op)
+{
+  gcc_gimple_checking_assert (index < asm_stmt->ni
+			      && TREE_CODE (in_op) == TREE_LIST);
+  asm_stmt->op[index + asm_stmt->no] = in_op;
+}
+
+
+/* Return output operand INDEX of GIMPLE_ASM ASM_STMT.  */
+
+static inline tree
+gimple_asm_output_op (const gasm *asm_stmt, unsigned index)
+{
+  gcc_gimple_checking_assert (index < asm_stmt->no);
+  return asm_stmt->op[index];
+}
+
+/* Set OUT_OP to be output operand INDEX in GIMPLE_ASM ASM_STMT.  */
+
+static inline void
+gimple_asm_set_output_op (gasm *asm_stmt, unsigned index, tree out_op)
+{
+  gcc_gimple_checking_assert (index < asm_stmt->no
+			      && TREE_CODE (out_op) == TREE_LIST);
+  asm_stmt->op[index] = out_op;
+}
+
+
+/* Return clobber operand INDEX of GIMPLE_ASM ASM_STMT.  */
+
+static inline tree
+gimple_asm_clobber_op (const gasm *asm_stmt, unsigned index)
+{
+  gcc_gimple_checking_assert (index < asm_stmt->nc);
+  return asm_stmt->op[index + asm_stmt->ni + asm_stmt->no];
+}
+
+
+/* Set CLOBBER_OP to be clobber operand INDEX in GIMPLE_ASM ASM_STMT.  */
+
+static inline void
+gimple_asm_set_clobber_op (gasm *asm_stmt, unsigned index, tree clobber_op)
+{
+  gcc_gimple_checking_assert (index < asm_stmt->nc
+			      && TREE_CODE (clobber_op) == TREE_LIST);
+  asm_stmt->op[index + asm_stmt->ni + asm_stmt->no] = clobber_op;
+}
+
+/* Return label operand INDEX of GIMPLE_ASM ASM_STMT.  */
+
+static inline tree
+gimple_asm_label_op (const gasm *asm_stmt, unsigned index)
+{
+  gcc_gimple_checking_assert (index < asm_stmt->nl);
+  return asm_stmt->op[index + asm_stmt->ni + asm_stmt->nc];
+}
+
+/* Set LABEL_OP to be label operand INDEX in GIMPLE_ASM ASM_STMT.  */
+
+static inline void
+gimple_asm_set_label_op (gasm *asm_stmt, unsigned index, tree label_op)
+{
+  gcc_gimple_checking_assert (index < asm_stmt->nl
+			      && TREE_CODE (label_op) == TREE_LIST);
+  asm_stmt->op[index + asm_stmt->ni + asm_stmt->nc] = label_op;
+}
+
+/* Return the string representing the assembly instruction in
+   GIMPLE_ASM ASM_STMT.  */
+
+static inline const char *
+gimple_asm_string (const gasm *asm_stmt)
+{
+  return asm_stmt->string;
+}
+
+
+/* Return true if ASM_STMT is marked volatile.  */
+
+static inline bool
+gimple_asm_volatile_p (const gasm *asm_stmt)
+{
+  return (asm_stmt->subcode & GF_ASM_VOLATILE) != 0;
+}
+
+
+/* If VOLATILE_P is true, mark asm statement ASM_STMT as volatile.  */
+
+static inline void
+gimple_asm_set_volatile (gasm *asm_stmt, bool volatile_p)
+{
+  if (volatile_p)
+    asm_stmt->subcode |= GF_ASM_VOLATILE;
+  else
+    asm_stmt->subcode &= ~GF_ASM_VOLATILE;
+}
+
+
+/* Return true if ASM_STMT is marked inline.  */
+
+static inline bool
+gimple_asm_inline_p (const gasm *asm_stmt)
+{
+  return (asm_stmt->subcode & GF_ASM_INLINE) != 0;
+}
+
+
+/* If INLINE_P is true, mark asm statement ASM_STMT as inline.  */
+
+static inline void
+gimple_asm_set_inline (gasm *asm_stmt, bool inline_p)
+{
+  if (inline_p)
+    asm_stmt->subcode |= GF_ASM_INLINE;
+  else
+    asm_stmt->subcode &= ~GF_ASM_INLINE;
+}
+
+
+/* If INPUT_P is true, mark asm ASM_STMT as an ASM_INPUT.  */
+
+static inline void
+gimple_asm_set_input (gasm *asm_stmt, bool input_p)
+{
+  if (input_p)
+    asm_stmt->subcode |= GF_ASM_INPUT;
+  else
+    asm_stmt->subcode &= ~GF_ASM_INPUT;
+}
+
+
+/* Return true if asm ASM_STMT is an ASM_INPUT.  */
+
+static inline bool
+gimple_asm_input_p (const gasm *asm_stmt)
+{
+  return (asm_stmt->subcode & GF_ASM_INPUT) != 0;
+}
+
+
+/* Return the types handled by GIMPLE_CATCH statement CATCH_STMT.  */
+
+static inline tree
+gimple_catch_types (const gcatch *catch_stmt)
+{
+  return catch_stmt->types;
+}
+
+
+/* Return a pointer to the types handled by GIMPLE_CATCH statement CATCH_STMT.  */
+
+static inline tree *
+gimple_catch_types_ptr (gcatch *catch_stmt)
+{
+  return &catch_stmt->types;
+}
+
+
+/* Return a pointer to the GIMPLE sequence representing the body of
+   the handler of GIMPLE_CATCH statement CATCH_STMT.  */
+
+static inline gimple_seq *
+gimple_catch_handler_ptr (gcatch *catch_stmt)
+{
+  return &catch_stmt->handler;
+}
+
+
+/* Return the GIMPLE sequence representing the body of the handler of
+   GIMPLE_CATCH statement CATCH_STMT.  */
+
+static inline gimple_seq
+gimple_catch_handler (gcatch *catch_stmt)
+{
+  return *gimple_catch_handler_ptr (catch_stmt);
+}
+
+
+/* Set T to be the set of types handled by GIMPLE_CATCH CATCH_STMT.  */
+
+static inline void
+gimple_catch_set_types (gcatch *catch_stmt, tree t)
+{
+  catch_stmt->types = t;
+}
+
+
+/* Set HANDLER to be the body of GIMPLE_CATCH CATCH_STMT.  */
+
+static inline void
+gimple_catch_set_handler (gcatch *catch_stmt, gimple_seq handler)
+{
+  catch_stmt->handler = handler;
+}
+
+
+/* Return the types handled by GIMPLE_EH_FILTER statement GS.  */
+
+static inline tree
+gimple_eh_filter_types (const gimple *gs)
+{
+  const geh_filter *eh_filter_stmt = as_a <const geh_filter *> (gs);
+  return eh_filter_stmt->types;
+}
+
+
+/* Return a pointer to the types handled by GIMPLE_EH_FILTER statement
+   GS.  */
+
+static inline tree *
+gimple_eh_filter_types_ptr (gimple *gs)
+{
+  geh_filter *eh_filter_stmt = as_a <geh_filter *> (gs);
+  return &eh_filter_stmt->types;
+}
+
+
+/* Return a pointer to the sequence of statement to execute when
+   GIMPLE_EH_FILTER statement fails.  */
+
+static inline gimple_seq *
+gimple_eh_filter_failure_ptr (gimple *gs)
+{
+  geh_filter *eh_filter_stmt = as_a <geh_filter *> (gs);
+  return &eh_filter_stmt->failure;
+}
+
+
+/* Return the sequence of statement to execute when GIMPLE_EH_FILTER
+   statement fails.  */
+
+static inline gimple_seq
+gimple_eh_filter_failure (gimple *gs)
+{
+  return *gimple_eh_filter_failure_ptr (gs);
+}
+
+
+/* Set TYPES to be the set of types handled by GIMPLE_EH_FILTER
+   EH_FILTER_STMT.  */
+
+static inline void
+gimple_eh_filter_set_types (geh_filter *eh_filter_stmt, tree types)
+{
+  eh_filter_stmt->types = types;
+}
+
+
+/* Set FAILURE to be the sequence of statements to execute on failure
+   for GIMPLE_EH_FILTER EH_FILTER_STMT.  */
+
+static inline void
+gimple_eh_filter_set_failure (geh_filter *eh_filter_stmt,
+			      gimple_seq failure)
+{
+  eh_filter_stmt->failure = failure;
+}
+
+/* Get the function decl to be called by the MUST_NOT_THROW region.  */
+
+static inline tree
+gimple_eh_must_not_throw_fndecl (geh_mnt *eh_mnt_stmt)
+{
+  return eh_mnt_stmt->fndecl;
+}
+
+/* Set the function decl to be called by GS to DECL.  */
+
+static inline void
+gimple_eh_must_not_throw_set_fndecl (geh_mnt *eh_mnt_stmt,
+				     tree decl)
+{
+  eh_mnt_stmt->fndecl = decl;
+}
+
+/* GIMPLE_EH_ELSE accessors.  */
+
+static inline gimple_seq *
+gimple_eh_else_n_body_ptr (geh_else *eh_else_stmt)
+{
+  return &eh_else_stmt->n_body;
+}
+
+static inline gimple_seq
+gimple_eh_else_n_body (geh_else *eh_else_stmt)
+{
+  return *gimple_eh_else_n_body_ptr (eh_else_stmt);
+}
+
+static inline gimple_seq *
+gimple_eh_else_e_body_ptr (geh_else *eh_else_stmt)
+{
+  return &eh_else_stmt->e_body;
+}
+
+static inline gimple_seq
+gimple_eh_else_e_body (geh_else *eh_else_stmt)
+{
+  return *gimple_eh_else_e_body_ptr (eh_else_stmt);
+}
+
+static inline void
+gimple_eh_else_set_n_body (geh_else *eh_else_stmt, gimple_seq seq)
+{
+  eh_else_stmt->n_body = seq;
+}
+
+static inline void
+gimple_eh_else_set_e_body (geh_else *eh_else_stmt, gimple_seq seq)
+{
+  eh_else_stmt->e_body = seq;
+}
+
+/* GIMPLE_TRY accessors. */
+
+/* Return the kind of try block represented by GIMPLE_TRY GS.  This is
+   either GIMPLE_TRY_CATCH or GIMPLE_TRY_FINALLY.  */
+
+static inline enum gimple_try_flags
+gimple_try_kind (const gimple *gs)
+{
+  GIMPLE_CHECK (gs, GIMPLE_TRY);
+  return (enum gimple_try_flags) (gs->subcode & GIMPLE_TRY_KIND);
+}
+
+
+/* Set the kind of try block represented by GIMPLE_TRY GS.  */
+
+static inline void
+gimple_try_set_kind (gtry *gs, enum gimple_try_flags kind)
+{
+  gcc_gimple_checking_assert (kind == GIMPLE_TRY_CATCH
+			      || kind == GIMPLE_TRY_FINALLY);
+  if (gimple_try_kind (gs) != kind)
+    gs->subcode = (unsigned int) kind;
+}
+
+
+/* Return the GIMPLE_TRY_CATCH_IS_CLEANUP flag.  */
+
+static inline bool
+gimple_try_catch_is_cleanup (const gimple *gs)
+{
+  gcc_gimple_checking_assert (gimple_try_kind (gs) == GIMPLE_TRY_CATCH);
+  return (gs->subcode & GIMPLE_TRY_CATCH_IS_CLEANUP) != 0;
+}
+
+
+/* Return a pointer to the sequence of statements used as the
+   body for GIMPLE_TRY GS.  */
+
+static inline gimple_seq *
+gimple_try_eval_ptr (gimple *gs)
+{
+  gtry *try_stmt = as_a <gtry *> (gs);
+  return &try_stmt->eval;
+}
+
+
+/* Return the sequence of statements used as the body for GIMPLE_TRY GS.  */
+
+static inline gimple_seq
+gimple_try_eval (gimple *gs)
+{
+  return *gimple_try_eval_ptr (gs);
+}
+
+
+/* Return a pointer to the sequence of statements used as the cleanup body for
+   GIMPLE_TRY GS.  */
+
+static inline gimple_seq *
+gimple_try_cleanup_ptr (gimple *gs)
+{
+  gtry *try_stmt = as_a <gtry *> (gs);
+  return &try_stmt->cleanup;
+}
+
+
+/* Return the sequence of statements used as the cleanup body for
+   GIMPLE_TRY GS.  */
+
+static inline gimple_seq
+gimple_try_cleanup (gimple *gs)
+{
+  return *gimple_try_cleanup_ptr (gs);
+}
+
+
+/* Set the GIMPLE_TRY_CATCH_IS_CLEANUP flag.  */
+
+static inline void
+gimple_try_set_catch_is_cleanup (gtry *g, bool catch_is_cleanup)
+{
+  gcc_gimple_checking_assert (gimple_try_kind (g) == GIMPLE_TRY_CATCH);
+  if (catch_is_cleanup)
+    g->subcode |= GIMPLE_TRY_CATCH_IS_CLEANUP;
+  else
+    g->subcode &= ~GIMPLE_TRY_CATCH_IS_CLEANUP;
+}
+
+
+/* Set EVAL to be the sequence of statements to use as the body for
+   GIMPLE_TRY TRY_STMT.  */
+
+static inline void
+gimple_try_set_eval (gtry *try_stmt, gimple_seq eval)
+{
+  try_stmt->eval = eval;
+}
+
+
+/* Set CLEANUP to be the sequence of statements to use as the cleanup
+   body for GIMPLE_TRY TRY_STMT.  */
+
+static inline void
+gimple_try_set_cleanup (gtry *try_stmt, gimple_seq cleanup)
+{
+  try_stmt->cleanup = cleanup;
+}
+
+
+/* Return a pointer to the cleanup sequence for cleanup statement GS.  */
+
+static inline gimple_seq *
+gimple_wce_cleanup_ptr (gimple *gs)
+{
+  gimple_statement_wce *wce_stmt = as_a <gimple_statement_wce *> (gs);
+  return &wce_stmt->cleanup;
+}
+
+
+/* Return the cleanup sequence for cleanup statement GS.  */
+
+static inline gimple_seq
+gimple_wce_cleanup (gimple *gs)
+{
+  return *gimple_wce_cleanup_ptr (gs);
+}
+
+
+/* Set CLEANUP to be the cleanup sequence for GS.  */
+
+static inline void
+gimple_wce_set_cleanup (gimple *gs, gimple_seq cleanup)
+{
+  gimple_statement_wce *wce_stmt = as_a <gimple_statement_wce *> (gs);
+  wce_stmt->cleanup = cleanup;
+}
+
+
+/* Return the CLEANUP_EH_ONLY flag for a WCE tuple.  */
+
+static inline bool
+gimple_wce_cleanup_eh_only (const gimple *gs)
+{
+  GIMPLE_CHECK (gs, GIMPLE_WITH_CLEANUP_EXPR);
+  return gs->subcode != 0;
+}
+
+
+/* Set the CLEANUP_EH_ONLY flag for a WCE tuple.  */
+
+static inline void
+gimple_wce_set_cleanup_eh_only (gimple *gs, bool eh_only_p)
+{
+  GIMPLE_CHECK (gs, GIMPLE_WITH_CLEANUP_EXPR);
+  gs->subcode = (unsigned int) eh_only_p;
+}
+
+
+/* Return the maximum number of arguments supported by GIMPLE_PHI GS.  */
+
+static inline unsigned
+gimple_phi_capacity (const gimple *gs)
+{
+  const gphi *phi_stmt = as_a <const gphi *> (gs);
+  return phi_stmt->capacity;
+}
+
+
+/* Return the number of arguments in GIMPLE_PHI GS.  This must always
+   be exactly the number of incoming edges for the basic block holding
+   GS.  */
+
+static inline unsigned
+gimple_phi_num_args (const gimple *gs)
+{
+  const gphi *phi_stmt = as_a <const gphi *> (gs);
+  return phi_stmt->nargs;
+}
+
+
+/* Return the SSA name created by GIMPLE_PHI GS.  */
+
+static inline tree
+gimple_phi_result (const gphi *gs)
+{
+  return gs->result;
+}
+
+static inline tree
+gimple_phi_result (const gimple *gs)
+{
+  const gphi *phi_stmt = as_a <const gphi *> (gs);
+  return gimple_phi_result (phi_stmt);
+}
+
+/* Return a pointer to the SSA name created by GIMPLE_PHI GS.  */
+
+static inline tree *
+gimple_phi_result_ptr (gphi *gs)
+{
+  return &gs->result;
+}
+
+static inline tree *
+gimple_phi_result_ptr (gimple *gs)
+{
+  gphi *phi_stmt = as_a <gphi *> (gs);
+  return gimple_phi_result_ptr (phi_stmt);
+}
+
+/* Set RESULT to be the SSA name created by GIMPLE_PHI PHI.  */
+
+static inline void
+gimple_phi_set_result (gphi *phi, tree result)
+{
+  phi->result = result;
+  if (result && TREE_CODE (result) == SSA_NAME)
+    SSA_NAME_DEF_STMT (result) = phi;
+}
+
+
+/* Return the PHI argument corresponding to incoming edge INDEX for
+   GIMPLE_PHI GS.  */
+
+static inline struct phi_arg_d *
+gimple_phi_arg (gphi *gs, unsigned index)
+{
+  gcc_gimple_checking_assert (index < gs->nargs);
+  return &(gs->args[index]);
+}
+
+static inline struct phi_arg_d *
+gimple_phi_arg (gimple *gs, unsigned index)
+{
+  gphi *phi_stmt = as_a <gphi *> (gs);
+  return gimple_phi_arg (phi_stmt, index);
+}
+
+/* Set PHIARG to be the argument corresponding to incoming edge INDEX
+   for GIMPLE_PHI PHI.  */
+
+static inline void
+gimple_phi_set_arg (gphi *phi, unsigned index, struct phi_arg_d * phiarg)
+{
+  gcc_gimple_checking_assert (index < phi->nargs);
+  phi->args[index] = *phiarg;
+}
+
+/* Return the PHI nodes for basic block BB, or NULL if there are no
+   PHI nodes.  */
+
+static inline gimple_seq
+phi_nodes (const_basic_block bb)
+{
+  gcc_checking_assert (!(bb->flags & BB_RTL));
+  return bb->il.gimple.phi_nodes;
+}
+
+/* Return a pointer to the PHI nodes for basic block BB.  */
+
+static inline gimple_seq *
+phi_nodes_ptr (basic_block bb)
+{
+  gcc_checking_assert (!(bb->flags & BB_RTL));
+  return &bb->il.gimple.phi_nodes;
+}
+
+/* Return the tree operand for argument I of PHI node GS.  */
+
+static inline tree
+gimple_phi_arg_def (gphi *gs, size_t index)
+{
+  return gimple_phi_arg (gs, index)->def;
+}
+
+static inline tree
+gimple_phi_arg_def (gimple *gs, size_t index)
+{
+  return gimple_phi_arg (gs, index)->def;
+}
+
+
+/* Return a pointer to the tree operand for argument I of phi node PHI.  */
+
+static inline tree *
+gimple_phi_arg_def_ptr (gphi *phi, size_t index)
+{
+  return &gimple_phi_arg (phi, index)->def;
+}
+
+/* Return the edge associated with argument I of phi node PHI.  */
+
+static inline edge
+gimple_phi_arg_edge (gphi *phi, size_t i)
+{
+  return EDGE_PRED (gimple_bb (phi), i);
+}
+
+/* Return the source location of gimple argument I of phi node PHI.  */
+
+static inline location_t
+gimple_phi_arg_location (gphi *phi, size_t i)
+{
+  return gimple_phi_arg (phi, i)->locus;
+}
+
+/* Return the source location of the argument on edge E of phi node PHI.  */
+
+static inline location_t
+gimple_phi_arg_location_from_edge (gphi *phi, edge e)
+{
+  return gimple_phi_arg (phi, e->dest_idx)->locus;
+}
+
+/* Set the source location of gimple argument I of phi node PHI to LOC.  */
+
+static inline void
+gimple_phi_arg_set_location (gphi *phi, size_t i, location_t loc)
+{
+  gimple_phi_arg (phi, i)->locus = loc;
+}
+
+/* Return TRUE if argument I of phi node PHI has a location record.  */
+
+static inline bool
+gimple_phi_arg_has_location (gphi *phi, size_t i)
+{
+  return gimple_phi_arg_location (phi, i) != UNKNOWN_LOCATION;
+}
+
+
+/* Return the region number for GIMPLE_RESX RESX_STMT.  */
+
+static inline int
+gimple_resx_region (const gresx *resx_stmt)
+{
+  return resx_stmt->region;
+}
+
+/* Set REGION to be the region number for GIMPLE_RESX RESX_STMT.  */
+
+static inline void
+gimple_resx_set_region (gresx *resx_stmt, int region)
+{
+  resx_stmt->region = region;
+}
+
+/* Return the region number for GIMPLE_EH_DISPATCH EH_DISPATCH_STMT.  */
+
+static inline int
+gimple_eh_dispatch_region (const geh_dispatch *eh_dispatch_stmt)
+{
+  return eh_dispatch_stmt->region;
+}
+
+/* Set REGION to be the region number for GIMPLE_EH_DISPATCH
+   EH_DISPATCH_STMT.  */
+
+static inline void
+gimple_eh_dispatch_set_region (geh_dispatch *eh_dispatch_stmt, int region)
+{
+  eh_dispatch_stmt->region = region;
+}
+
+/* Return the number of labels associated with the switch statement GS.  */
+
+static inline unsigned
+gimple_switch_num_labels (const gswitch *gs)
+{
+  unsigned num_ops;
+  GIMPLE_CHECK (gs, GIMPLE_SWITCH);
+  num_ops = gimple_num_ops (gs);
+  gcc_gimple_checking_assert (num_ops > 1);
+  return num_ops - 1;
+}
+
+
+/* Set NLABELS to be the number of labels for the switch statement GS.  */
+
+static inline void
+gimple_switch_set_num_labels (gswitch *g, unsigned nlabels)
+{
+  GIMPLE_CHECK (g, GIMPLE_SWITCH);
+  gimple_set_num_ops (g, nlabels + 1);
+}
+
+
+/* Return the index variable used by the switch statement GS.  */
+
+static inline tree
+gimple_switch_index (const gswitch *gs)
+{
+  return gs->op[0];
+}
+
+
+/* Return a pointer to the index variable for the switch statement GS.  */
+
+static inline tree *
+gimple_switch_index_ptr (gswitch *gs)
+{
+  return &gs->op[0];
+}
+
+
+/* Set INDEX to be the index variable for switch statement GS.  */
+
+static inline void
+gimple_switch_set_index (gswitch *gs, tree index)
+{
+  gcc_gimple_checking_assert (SSA_VAR_P (index) || CONSTANT_CLASS_P (index));
+  gs->op[0] = index;
+}
+
+
+/* Return the label numbered INDEX.  The default label is 0, followed by any
+   labels in a switch statement.  */
+
+static inline tree
+gimple_switch_label (const gswitch *gs, unsigned index)
+{
+  gcc_gimple_checking_assert (gimple_num_ops (gs) > index + 1);
+  return gs->op[index + 1];
+}
+
+/* Set the label number INDEX to LABEL.  0 is always the default label.  */
+
+static inline void
+gimple_switch_set_label (gswitch *gs, unsigned index, tree label)
+{
+  gcc_gimple_checking_assert (gimple_num_ops (gs) > index + 1
+			      && (label == NULL_TREE
+			          || TREE_CODE (label) == CASE_LABEL_EXPR));
+  gs->op[index + 1] = label;
+}
+
+/* Return the default label for a switch statement.  */
+
+static inline tree
+gimple_switch_default_label (const gswitch *gs)
+{
+  tree label = gimple_switch_label (gs, 0);
+  gcc_checking_assert (!CASE_LOW (label) && !CASE_HIGH (label));
+  return label;
+}
+
+/* Set the default label for a switch statement.  */
+
+static inline void
+gimple_switch_set_default_label (gswitch *gs, tree label)
+{
+  gcc_checking_assert (!CASE_LOW (label) && !CASE_HIGH (label));
+  gimple_switch_set_label (gs, 0, label);
+}
+
+/* Return true if GS is a GIMPLE_DEBUG statement.  */
+
+static inline bool
+is_gimple_debug (const gimple *gs)
+{
+  return gimple_code (gs) == GIMPLE_DEBUG;
+}
+
+
+/* Return the last nondebug statement in GIMPLE sequence S.  */
+
+static inline gimple *
+gimple_seq_last_nondebug_stmt (gimple_seq s)
+{
+  gimple_seq_node n;
+  for (n = gimple_seq_last (s);
+       n && is_gimple_debug (n);
+       n = n->prev)
+    if (n->prev == s)
+      return NULL;
+  return n;
+}
+
+
+/* Return true if S is a GIMPLE_DEBUG BIND statement.  */
+
+static inline bool
+gimple_debug_bind_p (const gimple *s)
+{
+  if (is_gimple_debug (s))
+    return s->subcode == GIMPLE_DEBUG_BIND;
+
+  return false;
+}
+
+/* Return the variable bound in a GIMPLE_DEBUG bind statement.  */
+
+static inline tree
+gimple_debug_bind_get_var (gimple *dbg)
+{
+  GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+  gcc_gimple_checking_assert (gimple_debug_bind_p (dbg));
+  return gimple_op (dbg, 0);
+}
+
+/* Return the value bound to the variable in a GIMPLE_DEBUG bind
+   statement.  */
+
+static inline tree
+gimple_debug_bind_get_value (gimple *dbg)
+{
+  GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+  gcc_gimple_checking_assert (gimple_debug_bind_p (dbg));
+  return gimple_op (dbg, 1);
+}
+
+/* Return a pointer to the value bound to the variable in a
+   GIMPLE_DEBUG bind statement.  */
+
+static inline tree *
+gimple_debug_bind_get_value_ptr (gimple *dbg)
+{
+  GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+  gcc_gimple_checking_assert (gimple_debug_bind_p (dbg));
+  return gimple_op_ptr (dbg, 1);
+}
+
+/* Set the variable bound in a GIMPLE_DEBUG bind statement.  */
+
+static inline void
+gimple_debug_bind_set_var (gimple *dbg, tree var)
+{
+  GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+  gcc_gimple_checking_assert (gimple_debug_bind_p (dbg));
+  gimple_set_op (dbg, 0, var);
+}
+
+/* Set the value bound to the variable in a GIMPLE_DEBUG bind
+   statement.  */
+
+static inline void
+gimple_debug_bind_set_value (gimple *dbg, tree value)
+{
+  GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+  gcc_gimple_checking_assert (gimple_debug_bind_p (dbg));
+  gimple_set_op (dbg, 1, value);
+}
+
+/* The second operand of a GIMPLE_DEBUG_BIND, when the value was
+   optimized away.  */
+#define GIMPLE_DEBUG_BIND_NOVALUE NULL_TREE /* error_mark_node */
+
+/* Remove the value bound to the variable in a GIMPLE_DEBUG bind
+   statement.  */
+
+static inline void
+gimple_debug_bind_reset_value (gimple *dbg)
+{
+  GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+  gcc_gimple_checking_assert (gimple_debug_bind_p (dbg));
+  gimple_set_op (dbg, 1, GIMPLE_DEBUG_BIND_NOVALUE);
+}
+
+/* Return true if the GIMPLE_DEBUG bind statement is bound to a
+   value.  */
+
+static inline bool
+gimple_debug_bind_has_value_p (gimple *dbg)
+{
+  GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+  gcc_gimple_checking_assert (gimple_debug_bind_p (dbg));
+  return gimple_op (dbg, 1) != GIMPLE_DEBUG_BIND_NOVALUE;
+}
+
+#undef GIMPLE_DEBUG_BIND_NOVALUE
+
+/* Return true if S is a GIMPLE_DEBUG SOURCE BIND statement.  */
+
+static inline bool
+gimple_debug_source_bind_p (const gimple *s)
+{
+  if (is_gimple_debug (s))
+    return s->subcode == GIMPLE_DEBUG_SOURCE_BIND;
+
+  return false;
+}
+
+/* Return the variable bound in a GIMPLE_DEBUG source bind statement.  */
+
+static inline tree
+gimple_debug_source_bind_get_var (gimple *dbg)
+{
+  GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+  gcc_gimple_checking_assert (gimple_debug_source_bind_p (dbg));
+  return gimple_op (dbg, 0);
+}
+
+/* Return the value bound to the variable in a GIMPLE_DEBUG source bind
+   statement.  */
+
+static inline tree
+gimple_debug_source_bind_get_value (gimple *dbg)
+{
+  GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+  gcc_gimple_checking_assert (gimple_debug_source_bind_p (dbg));
+  return gimple_op (dbg, 1);
+}
+
+/* Return a pointer to the value bound to the variable in a
+   GIMPLE_DEBUG source bind statement.  */
+
+static inline tree *
+gimple_debug_source_bind_get_value_ptr (gimple *dbg)
+{
+  GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+  gcc_gimple_checking_assert (gimple_debug_source_bind_p (dbg));
+  return gimple_op_ptr (dbg, 1);
+}
+
+/* Set the variable bound in a GIMPLE_DEBUG source bind statement.  */
+
+static inline void
+gimple_debug_source_bind_set_var (gimple *dbg, tree var)
+{
+  GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+  gcc_gimple_checking_assert (gimple_debug_source_bind_p (dbg));
+  gimple_set_op (dbg, 0, var);
+}
+
+/* Set the value bound to the variable in a GIMPLE_DEBUG source bind
+   statement.  */
+
+static inline void
+gimple_debug_source_bind_set_value (gimple *dbg, tree value)
+{
+  GIMPLE_CHECK (dbg, GIMPLE_DEBUG);
+  gcc_gimple_checking_assert (gimple_debug_source_bind_p (dbg));
+  gimple_set_op (dbg, 1, value);
+}
+
+/* Return true if S is a GIMPLE_DEBUG BEGIN_STMT statement.  */
+
+static inline bool
+gimple_debug_begin_stmt_p (const gimple *s)
+{
+  if (is_gimple_debug (s))
+    return s->subcode == GIMPLE_DEBUG_BEGIN_STMT;
+
+  return false;
+}
+
+/* Return true if S is a GIMPLE_DEBUG INLINE_ENTRY statement.  */
+
+static inline bool
+gimple_debug_inline_entry_p (const gimple *s)
+{
+  if (is_gimple_debug (s))
+    return s->subcode == GIMPLE_DEBUG_INLINE_ENTRY;
+
+  return false;
+}
+
+/* Return true if S is a GIMPLE_DEBUG non-binding marker statement.  */
+
+static inline bool
+gimple_debug_nonbind_marker_p (const gimple *s)
+{
+  if (is_gimple_debug (s))
+    return s->subcode == GIMPLE_DEBUG_BEGIN_STMT
+      || s->subcode == GIMPLE_DEBUG_INLINE_ENTRY;
+
+  return false;
+}
+
+/* Return the line number for EXPR, or return -1 if we have no line
+   number information for it.  */
+static inline int
+get_lineno (const gimple *stmt)
+{
+  location_t loc;
+
+  if (!stmt)
+    return -1;
+
+  loc = gimple_location (stmt);
+  if (loc == UNKNOWN_LOCATION)
+    return -1;
+
+  return LOCATION_LINE (loc);
+}
+
+/* Return a pointer to the body for the OMP statement GS.  */
+
+static inline gimple_seq *
+gimple_omp_body_ptr (gimple *gs)
+{
+  return &static_cast <gimple_statement_omp *> (gs)->body;
+}
+
+/* Return the body for the OMP statement GS.  */
+
+static inline gimple_seq
+gimple_omp_body (gimple *gs)
+{
+  return *gimple_omp_body_ptr (gs);
+}
+
+/* Set BODY to be the body for the OMP statement GS.  */
+
+static inline void
+gimple_omp_set_body (gimple *gs, gimple_seq body)
+{
+  static_cast <gimple_statement_omp *> (gs)->body = body;
+}
+
+
+/* Return the name associated with OMP_CRITICAL statement CRIT_STMT.  */
+
+static inline tree
+gimple_omp_critical_name (const gomp_critical *crit_stmt)
+{
+  return crit_stmt->name;
+}
+
+
+/* Return a pointer to the name associated with OMP critical statement
+   CRIT_STMT.  */
+
+static inline tree *
+gimple_omp_critical_name_ptr (gomp_critical *crit_stmt)
+{
+  return &crit_stmt->name;
+}
+
+
+/* Set NAME to be the name associated with OMP critical statement
+   CRIT_STMT.  */
+
+static inline void
+gimple_omp_critical_set_name (gomp_critical *crit_stmt, tree name)
+{
+  crit_stmt->name = name;
+}
+
+
+/* Return the clauses associated with OMP_CRITICAL statement CRIT_STMT.  */
+
+static inline tree
+gimple_omp_critical_clauses (const gomp_critical *crit_stmt)
+{
+  return crit_stmt->clauses;
+}
+
+
+/* Return a pointer to the clauses associated with OMP critical statement
+   CRIT_STMT.  */
+
+static inline tree *
+gimple_omp_critical_clauses_ptr (gomp_critical *crit_stmt)
+{
+  return &crit_stmt->clauses;
+}
+
+
+/* Set CLAUSES to be the clauses associated with OMP critical statement
+   CRIT_STMT.  */
+
+static inline void
+gimple_omp_critical_set_clauses (gomp_critical *crit_stmt, tree clauses)
+{
+  crit_stmt->clauses = clauses;
+}
+
+
+/* Return the clauses associated with OMP_ORDERED statement ORD_STMT.  */
+
+static inline tree
+gimple_omp_ordered_clauses (const gomp_ordered *ord_stmt)
+{
+  return ord_stmt->clauses;
+}
+
+
+/* Return a pointer to the clauses associated with OMP ordered statement
+   ORD_STMT.  */
+
+static inline tree *
+gimple_omp_ordered_clauses_ptr (gomp_ordered *ord_stmt)
+{
+  return &ord_stmt->clauses;
+}
+
+
+/* Set CLAUSES to be the clauses associated with OMP ordered statement
+   ORD_STMT.  */
+
+static inline void
+gimple_omp_ordered_set_clauses (gomp_ordered *ord_stmt, tree clauses)
+{
+  ord_stmt->clauses = clauses;
+}
+
+
+/* Return the clauses associated with OMP_TASKGROUP statement GS.  */
+
+static inline tree
+gimple_omp_taskgroup_clauses (const gimple *gs)
+{
+  GIMPLE_CHECK (gs, GIMPLE_OMP_TASKGROUP);
+  return
+    static_cast <const gimple_statement_omp_single_layout *> (gs)->clauses;
+}
+
+
+/* Return a pointer to the clauses associated with OMP taskgroup statement
+   GS.  */
+
+static inline tree *
+gimple_omp_taskgroup_clauses_ptr (gimple *gs)
+{
+  GIMPLE_CHECK (gs, GIMPLE_OMP_TASKGROUP);
+  return &static_cast <gimple_statement_omp_single_layout *> (gs)->clauses;
+}
+
+
+/* Set CLAUSES to be the clauses associated with OMP taskgroup statement
+   GS.  */
+
+static inline void
+gimple_omp_taskgroup_set_clauses (gimple *gs, tree clauses)
+{
+  GIMPLE_CHECK (gs, GIMPLE_OMP_TASKGROUP);
+  static_cast <gimple_statement_omp_single_layout *> (gs)->clauses
+    = clauses;
+}
+
+
+/* Return the kind of the OMP_FOR statemement G.  */
+
+static inline int
+gimple_omp_for_kind (const gimple *g)
+{
+  GIMPLE_CHECK (g, GIMPLE_OMP_FOR);
+  return (gimple_omp_subcode (g) & GF_OMP_FOR_KIND_MASK);
+}
+
+
+/* Set the kind of the OMP_FOR statement G.  */
+
+static inline void
+gimple_omp_for_set_kind (gomp_for *g, int kind)
+{
+  g->subcode = (g->subcode & ~GF_OMP_FOR_KIND_MASK)
+		      | (kind & GF_OMP_FOR_KIND_MASK);
+}
+
+
+/* Return true if OMP_FOR statement G has the
+   GF_OMP_FOR_COMBINED flag set.  */
+
+static inline bool
+gimple_omp_for_combined_p (const gimple *g)
+{
+  GIMPLE_CHECK (g, GIMPLE_OMP_FOR);
+  return (gimple_omp_subcode (g) & GF_OMP_FOR_COMBINED) != 0;
+}
+
+
+/* Set the GF_OMP_FOR_COMBINED field in the OMP_FOR statement G depending on
+   the boolean value of COMBINED_P.  */
+
+static inline void
+gimple_omp_for_set_combined_p (gomp_for *g, bool combined_p)
+{
+  if (combined_p)
+    g->subcode |= GF_OMP_FOR_COMBINED;
+  else
+    g->subcode &= ~GF_OMP_FOR_COMBINED;
+}
+
+
+/* Return true if the OMP_FOR statement G has the
+   GF_OMP_FOR_COMBINED_INTO flag set.  */
+
+static inline bool
+gimple_omp_for_combined_into_p (const gimple *g)
+{
+  GIMPLE_CHECK (g, GIMPLE_OMP_FOR);
+  return (gimple_omp_subcode (g) & GF_OMP_FOR_COMBINED_INTO) != 0;
+}
+
+
+/* Set the GF_OMP_FOR_COMBINED_INTO field in the OMP_FOR statement G depending
+   on the boolean value of COMBINED_P.  */
+
+static inline void
+gimple_omp_for_set_combined_into_p (gomp_for *g, bool combined_p)
+{
+  if (combined_p)
+    g->subcode |= GF_OMP_FOR_COMBINED_INTO;
+  else
+    g->subcode &= ~GF_OMP_FOR_COMBINED_INTO;
+}
+
+
+/* Return the clauses associated with the OMP_FOR statement GS.  */
+
+static inline tree
+gimple_omp_for_clauses (const gimple *gs)
+{
+  const gomp_for *omp_for_stmt = as_a <const gomp_for *> (gs);
+  return omp_for_stmt->clauses;
+}
+
+
+/* Return a pointer to the clauses associated with the OMP_FOR statement
+   GS.  */
+
+static inline tree *
+gimple_omp_for_clauses_ptr (gimple *gs)
+{
+  gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
+  return &omp_for_stmt->clauses;
+}
+
+
+/* Set CLAUSES to be the list of clauses associated with the OMP_FOR statement
+   GS.  */
+
+static inline void
+gimple_omp_for_set_clauses (gimple *gs, tree clauses)
+{
+  gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
+  omp_for_stmt->clauses = clauses;
+}
+
+
+/* Get the collapse count of the OMP_FOR statement GS.  */
+
+static inline size_t
+gimple_omp_for_collapse (gimple *gs)
+{
+  gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
+  return omp_for_stmt->collapse;
+}
+
+
+/* Return the condition code associated with the OMP_FOR statement GS.  */
+
+static inline enum tree_code
+gimple_omp_for_cond (const gimple *gs, size_t i)
+{
+  const gomp_for *omp_for_stmt = as_a <const gomp_for *> (gs);
+  gcc_gimple_checking_assert (i < omp_for_stmt->collapse);
+  return omp_for_stmt->iter[i].cond;
+}
+
+
+/* Set COND to be the condition code for the OMP_FOR statement GS.  */
+
+static inline void
+gimple_omp_for_set_cond (gimple *gs, size_t i, enum tree_code cond)
+{
+  gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
+  gcc_gimple_checking_assert (TREE_CODE_CLASS (cond) == tcc_comparison
+			      && i < omp_for_stmt->collapse);
+  omp_for_stmt->iter[i].cond = cond;
+}
+
+
+/* Return the index variable for the OMP_FOR statement GS.  */
+
+static inline tree
+gimple_omp_for_index (const gimple *gs, size_t i)
+{
+  const gomp_for *omp_for_stmt = as_a <const gomp_for *> (gs);
+  gcc_gimple_checking_assert (i < omp_for_stmt->collapse);
+  return omp_for_stmt->iter[i].index;
+}
+
+
+/* Return a pointer to the index variable for the OMP_FOR statement GS.  */
+
+static inline tree *
+gimple_omp_for_index_ptr (gimple *gs, size_t i)
+{
+  gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
+  gcc_gimple_checking_assert (i < omp_for_stmt->collapse);
+  return &omp_for_stmt->iter[i].index;
+}
+
+
+/* Set INDEX to be the index variable for the OMP_FOR statement GS.  */
+
+static inline void
+gimple_omp_for_set_index (gimple *gs, size_t i, tree index)
+{
+  gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
+  gcc_gimple_checking_assert (i < omp_for_stmt->collapse);
+  omp_for_stmt->iter[i].index = index;
+}
+
+
+/* Return the initial value for the OMP_FOR statement GS.  */
+
+static inline tree
+gimple_omp_for_initial (const gimple *gs, size_t i)
+{
+  const gomp_for *omp_for_stmt = as_a <const gomp_for *> (gs);
+  gcc_gimple_checking_assert (i < omp_for_stmt->collapse);
+  return omp_for_stmt->iter[i].initial;
+}
+
+
+/* Return a pointer to the initial value for the OMP_FOR statement GS.  */
+
+static inline tree *
+gimple_omp_for_initial_ptr (gimple *gs, size_t i)
+{
+  gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
+  gcc_gimple_checking_assert (i < omp_for_stmt->collapse);
+  return &omp_for_stmt->iter[i].initial;
+}
+
+
+/* Set INITIAL to be the initial value for the OMP_FOR statement GS.  */
+
+static inline void
+gimple_omp_for_set_initial (gimple *gs, size_t i, tree initial)
+{
+  gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
+  gcc_gimple_checking_assert (i < omp_for_stmt->collapse);
+  omp_for_stmt->iter[i].initial = initial;
+}
+
+
+/* Return the final value for the OMP_FOR statement GS.  */
+
+static inline tree
+gimple_omp_for_final (const gimple *gs, size_t i)
+{
+  const gomp_for *omp_for_stmt = as_a <const gomp_for *> (gs);
+  gcc_gimple_checking_assert (i < omp_for_stmt->collapse);
+  return omp_for_stmt->iter[i].final;
+}
+
+
+/* Return a pointer to the final value for the OMP_FOR statement GS.  */
+
+static inline tree *
+gimple_omp_for_final_ptr (gimple *gs, size_t i)
+{
+  gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
+  gcc_gimple_checking_assert (i < omp_for_stmt->collapse);
+  return &omp_for_stmt->iter[i].final;
+}
+
+
+/* Set FINAL to be the final value for the OMP_FOR statement GS.  */
+
+static inline void
+gimple_omp_for_set_final (gimple *gs, size_t i, tree final)
+{
+  gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
+  gcc_gimple_checking_assert (i < omp_for_stmt->collapse);
+  omp_for_stmt->iter[i].final = final;
+}
+
+
+/* Return the increment value for the OMP_FOR statement GS.  */
+
+static inline tree
+gimple_omp_for_incr (const gimple *gs, size_t i)
+{
+  const gomp_for *omp_for_stmt = as_a <const gomp_for *> (gs);
+  gcc_gimple_checking_assert (i < omp_for_stmt->collapse);
+  return omp_for_stmt->iter[i].incr;
+}
+
+
+/* Return a pointer to the increment value for the OMP_FOR statement GS.  */
+
+static inline tree *
+gimple_omp_for_incr_ptr (gimple *gs, size_t i)
+{
+  gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
+  gcc_gimple_checking_assert (i < omp_for_stmt->collapse);
+  return &omp_for_stmt->iter[i].incr;
+}
+
+
+/* Set INCR to be the increment value for the OMP_FOR statement GS.  */
+
+static inline void
+gimple_omp_for_set_incr (gimple *gs, size_t i, tree incr)
+{
+  gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
+  gcc_gimple_checking_assert (i < omp_for_stmt->collapse);
+  omp_for_stmt->iter[i].incr = incr;
+}
+
+
+/* Return a pointer to the sequence of statements to execute before the OMP_FOR
+   statement GS starts.  */
+
+static inline gimple_seq *
+gimple_omp_for_pre_body_ptr (gimple *gs)
+{
+  gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
+  return &omp_for_stmt->pre_body;
+}
+
+
+/* Return the sequence of statements to execute before the OMP_FOR
+   statement GS starts.  */
+
+static inline gimple_seq
+gimple_omp_for_pre_body (gimple *gs)
+{
+  return *gimple_omp_for_pre_body_ptr (gs);
+}
+
+
+/* Set PRE_BODY to be the sequence of statements to execute before the
+   OMP_FOR statement GS starts.  */
+
+static inline void
+gimple_omp_for_set_pre_body (gimple *gs, gimple_seq pre_body)
+{
+  gomp_for *omp_for_stmt = as_a <gomp_for *> (gs);
+  omp_for_stmt->pre_body = pre_body;
+}
+
+/* Return the kernel_phony of OMP_FOR statement.  */
+
+static inline bool
+gimple_omp_for_grid_phony (const gomp_for *omp_for)
+{
+  gcc_checking_assert (gimple_omp_for_kind (omp_for)
+		       != GF_OMP_FOR_KIND_GRID_LOOP);
+  return (gimple_omp_subcode (omp_for) & GF_OMP_FOR_GRID_PHONY) != 0;
+}
+
+/* Set kernel_phony flag of OMP_FOR to VALUE.  */
+
+static inline void
+gimple_omp_for_set_grid_phony (gomp_for *omp_for, bool value)
+{
+  gcc_checking_assert (gimple_omp_for_kind (omp_for)
+		       != GF_OMP_FOR_KIND_GRID_LOOP);
+  if (value)
+    omp_for->subcode |= GF_OMP_FOR_GRID_PHONY;
+  else
+    omp_for->subcode &= ~GF_OMP_FOR_GRID_PHONY;
+}
+
+/* Return the kernel_intra_group of a GRID_LOOP OMP_FOR statement.  */
+
+static inline bool
+gimple_omp_for_grid_intra_group (const gomp_for *omp_for)
+{
+  gcc_checking_assert (gimple_omp_for_kind (omp_for)
+		       == GF_OMP_FOR_KIND_GRID_LOOP);
+  return (gimple_omp_subcode (omp_for) & GF_OMP_FOR_GRID_INTRA_GROUP) != 0;
+}
+
+/* Set kernel_intra_group flag of OMP_FOR to VALUE.  */
+
+static inline void
+gimple_omp_for_set_grid_intra_group (gomp_for *omp_for, bool value)
+{
+  gcc_checking_assert (gimple_omp_for_kind (omp_for)
+		       == GF_OMP_FOR_KIND_GRID_LOOP);
+  if (value)
+    omp_for->subcode |= GF_OMP_FOR_GRID_INTRA_GROUP;
+  else
+    omp_for->subcode &= ~GF_OMP_FOR_GRID_INTRA_GROUP;
+}
+
+/* Return true if iterations of a grid OMP_FOR statement correspond to HSA
+   groups.  */
+
+static inline bool
+gimple_omp_for_grid_group_iter (const gomp_for *omp_for)
+{
+  gcc_checking_assert (gimple_omp_for_kind (omp_for)
+		       == GF_OMP_FOR_KIND_GRID_LOOP);
+  return (gimple_omp_subcode (omp_for) & GF_OMP_FOR_GRID_GROUP_ITER) != 0;
+}
+
+/* Set group_iter flag of OMP_FOR to VALUE.  */
+
+static inline void
+gimple_omp_for_set_grid_group_iter (gomp_for *omp_for, bool value)
+{
+  gcc_checking_assert (gimple_omp_for_kind (omp_for)
+		       == GF_OMP_FOR_KIND_GRID_LOOP);
+  if (value)
+    omp_for->subcode |= GF_OMP_FOR_GRID_GROUP_ITER;
+  else
+    omp_for->subcode &= ~GF_OMP_FOR_GRID_GROUP_ITER;
+}
+
+/* Return the clauses associated with OMP_PARALLEL GS.  */
+
+static inline tree
+gimple_omp_parallel_clauses (const gimple *gs)
+{
+  const gomp_parallel *omp_parallel_stmt = as_a <const gomp_parallel *> (gs);
+  return omp_parallel_stmt->clauses;
+}
+
+
+/* Return a pointer to the clauses associated with OMP_PARALLEL_STMT.  */
+
+static inline tree *
+gimple_omp_parallel_clauses_ptr (gomp_parallel *omp_parallel_stmt)
+{
+  return &omp_parallel_stmt->clauses;
+}
+
+
+/* Set CLAUSES to be the list of clauses associated with OMP_PARALLEL_STMT.  */
+
+static inline void
+gimple_omp_parallel_set_clauses (gomp_parallel *omp_parallel_stmt,
+				 tree clauses)
+{
+  omp_parallel_stmt->clauses = clauses;
+}
+
+
+/* Return the child function used to hold the body of OMP_PARALLEL_STMT.  */
+
+static inline tree
+gimple_omp_parallel_child_fn (const gomp_parallel *omp_parallel_stmt)
+{
+  return omp_parallel_stmt->child_fn;
+}
+
+/* Return a pointer to the child function used to hold the body of
+   OMP_PARALLEL_STMT.  */
+
+static inline tree *
+gimple_omp_parallel_child_fn_ptr (gomp_parallel *omp_parallel_stmt)
+{
+  return &omp_parallel_stmt->child_fn;
+}
+
+
+/* Set CHILD_FN to be the child function for OMP_PARALLEL_STMT.  */
+
+static inline void
+gimple_omp_parallel_set_child_fn (gomp_parallel *omp_parallel_stmt,
+				  tree child_fn)
+{
+  omp_parallel_stmt->child_fn = child_fn;
+}
+
+
+/* Return the artificial argument used to send variables and values
+   from the parent to the children threads in OMP_PARALLEL_STMT.  */
+
+static inline tree
+gimple_omp_parallel_data_arg (const gomp_parallel *omp_parallel_stmt)
+{
+  return omp_parallel_stmt->data_arg;
+}
+
+
+/* Return a pointer to the data argument for OMP_PARALLEL_STMT.  */
+
+static inline tree *
+gimple_omp_parallel_data_arg_ptr (gomp_parallel *omp_parallel_stmt)
+{
+  return &omp_parallel_stmt->data_arg;
+}
+
+
+/* Set DATA_ARG to be the data argument for OMP_PARALLEL_STMT.  */
+
+static inline void
+gimple_omp_parallel_set_data_arg (gomp_parallel *omp_parallel_stmt,
+				  tree data_arg)
+{
+  omp_parallel_stmt->data_arg = data_arg;
+}
+
+/* Return the kernel_phony flag of OMP_PARALLEL_STMT.  */
+
+static inline bool
+gimple_omp_parallel_grid_phony (const gomp_parallel *stmt)
+{
+  return (gimple_omp_subcode (stmt) & GF_OMP_PARALLEL_GRID_PHONY) != 0;
+}
+
+/* Set kernel_phony flag of OMP_PARALLEL_STMT to VALUE.  */
+
+static inline void
+gimple_omp_parallel_set_grid_phony (gomp_parallel *stmt, bool value)
+{
+  if (value)
+    stmt->subcode |= GF_OMP_PARALLEL_GRID_PHONY;
+  else
+    stmt->subcode &= ~GF_OMP_PARALLEL_GRID_PHONY;
+}
+
+/* Return the clauses associated with OMP_TASK GS.  */
+
+static inline tree
+gimple_omp_task_clauses (const gimple *gs)
+{
+  const gomp_task *omp_task_stmt = as_a <const gomp_task *> (gs);
+  return omp_task_stmt->clauses;
+}
+
+
+/* Return a pointer to the clauses associated with OMP_TASK GS.  */
+
+static inline tree *
+gimple_omp_task_clauses_ptr (gimple *gs)
+{
+  gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
+  return &omp_task_stmt->clauses;
+}
+
+
+/* Set CLAUSES to be the list of clauses associated with OMP_TASK
+   GS.  */
+
+static inline void
+gimple_omp_task_set_clauses (gimple *gs, tree clauses)
+{
+  gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
+  omp_task_stmt->clauses = clauses;
+}
+
+
+/* Return true if OMP task statement G has the
+   GF_OMP_TASK_TASKLOOP flag set.  */
+
+static inline bool
+gimple_omp_task_taskloop_p (const gimple *g)
+{
+  GIMPLE_CHECK (g, GIMPLE_OMP_TASK);
+  return (gimple_omp_subcode (g) & GF_OMP_TASK_TASKLOOP) != 0;
+}
+
+
+/* Set the GF_OMP_TASK_TASKLOOP field in G depending on the boolean
+   value of TASKLOOP_P.  */
+
+static inline void
+gimple_omp_task_set_taskloop_p (gimple *g, bool taskloop_p)
+{
+  GIMPLE_CHECK (g, GIMPLE_OMP_TASK);
+  if (taskloop_p)
+    g->subcode |= GF_OMP_TASK_TASKLOOP;
+  else
+    g->subcode &= ~GF_OMP_TASK_TASKLOOP;
+}
+
+
+/* Return true if OMP task statement G has the
+   GF_OMP_TASK_TASKWAIT flag set.  */
+
+static inline bool
+gimple_omp_task_taskwait_p (const gimple *g)
+{
+  GIMPLE_CHECK (g, GIMPLE_OMP_TASK);
+  return (gimple_omp_subcode (g) & GF_OMP_TASK_TASKWAIT) != 0;
+}
+
+
+/* Set the GF_OMP_TASK_TASKWAIT field in G depending on the boolean
+   value of TASKWAIT_P.  */
+
+static inline void
+gimple_omp_task_set_taskwait_p (gimple *g, bool taskwait_p)
+{
+  GIMPLE_CHECK (g, GIMPLE_OMP_TASK);
+  if (taskwait_p)
+    g->subcode |= GF_OMP_TASK_TASKWAIT;
+  else
+    g->subcode &= ~GF_OMP_TASK_TASKWAIT;
+}
+
+
+/* Return the child function used to hold the body of OMP_TASK GS.  */
+
+static inline tree
+gimple_omp_task_child_fn (const gimple *gs)
+{
+  const gomp_task *omp_task_stmt = as_a <const gomp_task *> (gs);
+  return omp_task_stmt->child_fn;
+}
+
+/* Return a pointer to the child function used to hold the body of
+   OMP_TASK GS.  */
+
+static inline tree *
+gimple_omp_task_child_fn_ptr (gimple *gs)
+{
+  gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
+  return &omp_task_stmt->child_fn;
+}
+
+
+/* Set CHILD_FN to be the child function for OMP_TASK GS.  */
+
+static inline void
+gimple_omp_task_set_child_fn (gimple *gs, tree child_fn)
+{
+  gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
+  omp_task_stmt->child_fn = child_fn;
+}
+
+
+/* Return the artificial argument used to send variables and values
+   from the parent to the children threads in OMP_TASK GS.  */
+
+static inline tree
+gimple_omp_task_data_arg (const gimple *gs)
+{
+  const gomp_task *omp_task_stmt = as_a <const gomp_task *> (gs);
+  return omp_task_stmt->data_arg;
+}
+
+
+/* Return a pointer to the data argument for OMP_TASK GS.  */
+
+static inline tree *
+gimple_omp_task_data_arg_ptr (gimple *gs)
+{
+  gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
+  return &omp_task_stmt->data_arg;
+}
+
+
+/* Set DATA_ARG to be the data argument for OMP_TASK GS.  */
+
+static inline void
+gimple_omp_task_set_data_arg (gimple *gs, tree data_arg)
+{
+  gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
+  omp_task_stmt->data_arg = data_arg;
+}
+
+
+/* Return the clauses associated with OMP_TASK GS.  */
+
+static inline tree
+gimple_omp_taskreg_clauses (const gimple *gs)
+{
+  const gimple_statement_omp_taskreg *omp_taskreg_stmt
+    = as_a <const gimple_statement_omp_taskreg *> (gs);
+  return omp_taskreg_stmt->clauses;
+}
+
+
+/* Return a pointer to the clauses associated with OMP_TASK GS.  */
+
+static inline tree *
+gimple_omp_taskreg_clauses_ptr (gimple *gs)
+{
+  gimple_statement_omp_taskreg *omp_taskreg_stmt
+    = as_a <gimple_statement_omp_taskreg *> (gs);
+  return &omp_taskreg_stmt->clauses;
+}
+
+
+/* Set CLAUSES to be the list of clauses associated with OMP_TASK
+   GS.  */
+
+static inline void
+gimple_omp_taskreg_set_clauses (gimple *gs, tree clauses)
+{
+  gimple_statement_omp_taskreg *omp_taskreg_stmt
+    = as_a <gimple_statement_omp_taskreg *> (gs);
+  omp_taskreg_stmt->clauses = clauses;
+}
+
+
+/* Return the child function used to hold the body of OMP_TASK GS.  */
+
+static inline tree
+gimple_omp_taskreg_child_fn (const gimple *gs)
+{
+  const gimple_statement_omp_taskreg *omp_taskreg_stmt
+    = as_a <const gimple_statement_omp_taskreg *> (gs);
+  return omp_taskreg_stmt->child_fn;
+}
+
+/* Return a pointer to the child function used to hold the body of
+   OMP_TASK GS.  */
+
+static inline tree *
+gimple_omp_taskreg_child_fn_ptr (gimple *gs)
+{
+  gimple_statement_omp_taskreg *omp_taskreg_stmt
+    = as_a <gimple_statement_omp_taskreg *> (gs);
+  return &omp_taskreg_stmt->child_fn;
+}
+
+
+/* Set CHILD_FN to be the child function for OMP_TASK GS.  */
+
+static inline void
+gimple_omp_taskreg_set_child_fn (gimple *gs, tree child_fn)
+{
+  gimple_statement_omp_taskreg *omp_taskreg_stmt
+    = as_a <gimple_statement_omp_taskreg *> (gs);
+  omp_taskreg_stmt->child_fn = child_fn;
+}
+
+
+/* Return the artificial argument used to send variables and values
+   from the parent to the children threads in OMP_TASK GS.  */
+
+static inline tree
+gimple_omp_taskreg_data_arg (const gimple *gs)
+{
+  const gimple_statement_omp_taskreg *omp_taskreg_stmt
+    = as_a <const gimple_statement_omp_taskreg *> (gs);
+  return omp_taskreg_stmt->data_arg;
+}
+
+
+/* Return a pointer to the data argument for OMP_TASK GS.  */
+
+static inline tree *
+gimple_omp_taskreg_data_arg_ptr (gimple *gs)
+{
+  gimple_statement_omp_taskreg *omp_taskreg_stmt
+    = as_a <gimple_statement_omp_taskreg *> (gs);
+  return &omp_taskreg_stmt->data_arg;
+}
+
+
+/* Set DATA_ARG to be the data argument for OMP_TASK GS.  */
+
+static inline void
+gimple_omp_taskreg_set_data_arg (gimple *gs, tree data_arg)
+{
+  gimple_statement_omp_taskreg *omp_taskreg_stmt
+    = as_a <gimple_statement_omp_taskreg *> (gs);
+  omp_taskreg_stmt->data_arg = data_arg;
+}
+
+
+/* Return the copy function used to hold the body of OMP_TASK GS.  */
+
+static inline tree
+gimple_omp_task_copy_fn (const gimple *gs)
+{
+  const gomp_task *omp_task_stmt = as_a <const gomp_task *> (gs);
+  return omp_task_stmt->copy_fn;
+}
+
+/* Return a pointer to the copy function used to hold the body of
+   OMP_TASK GS.  */
+
+static inline tree *
+gimple_omp_task_copy_fn_ptr (gimple *gs)
+{
+  gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
+  return &omp_task_stmt->copy_fn;
+}
+
+
+/* Set CHILD_FN to be the copy function for OMP_TASK GS.  */
+
+static inline void
+gimple_omp_task_set_copy_fn (gimple *gs, tree copy_fn)
+{
+  gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
+  omp_task_stmt->copy_fn = copy_fn;
+}
+
+
+/* Return size of the data block in bytes in OMP_TASK GS.  */
+
+static inline tree
+gimple_omp_task_arg_size (const gimple *gs)
+{
+  const gomp_task *omp_task_stmt = as_a <const gomp_task *> (gs);
+  return omp_task_stmt->arg_size;
+}
+
+
+/* Return a pointer to the data block size for OMP_TASK GS.  */
+
+static inline tree *
+gimple_omp_task_arg_size_ptr (gimple *gs)
+{
+  gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
+  return &omp_task_stmt->arg_size;
+}
+
+
+/* Set ARG_SIZE to be the data block size for OMP_TASK GS.  */
+
+static inline void
+gimple_omp_task_set_arg_size (gimple *gs, tree arg_size)
+{
+  gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
+  omp_task_stmt->arg_size = arg_size;
+}
+
+
+/* Return align of the data block in bytes in OMP_TASK GS.  */
+
+static inline tree
+gimple_omp_task_arg_align (const gimple *gs)
+{
+  const gomp_task *omp_task_stmt = as_a <const gomp_task *> (gs);
+  return omp_task_stmt->arg_align;
+}
+
+
+/* Return a pointer to the data block align for OMP_TASK GS.  */
+
+static inline tree *
+gimple_omp_task_arg_align_ptr (gimple *gs)
+{
+  gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
+  return &omp_task_stmt->arg_align;
+}
+
+
+/* Set ARG_SIZE to be the data block align for OMP_TASK GS.  */
+
+static inline void
+gimple_omp_task_set_arg_align (gimple *gs, tree arg_align)
+{
+  gomp_task *omp_task_stmt = as_a <gomp_task *> (gs);
+  omp_task_stmt->arg_align = arg_align;
+}
+
+
+/* Return the clauses associated with OMP_SINGLE GS.  */
+
+static inline tree
+gimple_omp_single_clauses (const gimple *gs)
+{
+  const gomp_single *omp_single_stmt = as_a <const gomp_single *> (gs);
+  return omp_single_stmt->clauses;
+}
+
+
+/* Return a pointer to the clauses associated with OMP_SINGLE GS.  */
+
+static inline tree *
+gimple_omp_single_clauses_ptr (gimple *gs)
+{
+  gomp_single *omp_single_stmt = as_a <gomp_single *> (gs);
+  return &omp_single_stmt->clauses;
+}
+
+
+/* Set CLAUSES to be the clauses associated with OMP_SINGLE_STMT.  */
+
+static inline void
+gimple_omp_single_set_clauses (gomp_single *omp_single_stmt, tree clauses)
+{
+  omp_single_stmt->clauses = clauses;
+}
+
+
+/* Return the clauses associated with OMP_TARGET GS.  */
+
+static inline tree
+gimple_omp_target_clauses (const gimple *gs)
+{
+  const gomp_target *omp_target_stmt = as_a <const gomp_target *> (gs);
+  return omp_target_stmt->clauses;
+}
+
+
+/* Return a pointer to the clauses associated with OMP_TARGET GS.  */
+
+static inline tree *
+gimple_omp_target_clauses_ptr (gimple *gs)
+{
+  gomp_target *omp_target_stmt = as_a <gomp_target *> (gs);
+  return &omp_target_stmt->clauses;
+}
+
+
+/* Set CLAUSES to be the clauses associated with OMP_TARGET_STMT.  */
+
+static inline void
+gimple_omp_target_set_clauses (gomp_target *omp_target_stmt,
+			       tree clauses)
+{
+  omp_target_stmt->clauses = clauses;
+}
+
+
+/* Return the kind of the OMP_TARGET G.  */
+
+static inline int
+gimple_omp_target_kind (const gimple *g)
+{
+  GIMPLE_CHECK (g, GIMPLE_OMP_TARGET);
+  return (gimple_omp_subcode (g) & GF_OMP_TARGET_KIND_MASK);
+}
+
+
+/* Set the kind of the OMP_TARGET G.  */
+
+static inline void
+gimple_omp_target_set_kind (gomp_target *g, int kind)
+{
+  g->subcode = (g->subcode & ~GF_OMP_TARGET_KIND_MASK)
+		      | (kind & GF_OMP_TARGET_KIND_MASK);
+}
+
+
+/* Return the child function used to hold the body of OMP_TARGET_STMT.  */
+
+static inline tree
+gimple_omp_target_child_fn (const gomp_target *omp_target_stmt)
+{
+  return omp_target_stmt->child_fn;
+}
+
+/* Return a pointer to the child function used to hold the body of
+   OMP_TARGET_STMT.  */
+
+static inline tree *
+gimple_omp_target_child_fn_ptr (gomp_target *omp_target_stmt)
+{
+  return &omp_target_stmt->child_fn;
+}
+
+
+/* Set CHILD_FN to be the child function for OMP_TARGET_STMT.  */
+
+static inline void
+gimple_omp_target_set_child_fn (gomp_target *omp_target_stmt,
+				tree child_fn)
+{
+  omp_target_stmt->child_fn = child_fn;
+}
+
+
+/* Return the artificial argument used to send variables and values
+   from the parent to the children threads in OMP_TARGET_STMT.  */
+
+static inline tree
+gimple_omp_target_data_arg (const gomp_target *omp_target_stmt)
+{
+  return omp_target_stmt->data_arg;
+}
+
+
+/* Return a pointer to the data argument for OMP_TARGET GS.  */
+
+static inline tree *
+gimple_omp_target_data_arg_ptr (gomp_target *omp_target_stmt)
+{
+  return &omp_target_stmt->data_arg;
+}
+
+
+/* Set DATA_ARG to be the data argument for OMP_TARGET_STMT.  */
+
+static inline void
+gimple_omp_target_set_data_arg (gomp_target *omp_target_stmt,
+				tree data_arg)
+{
+  omp_target_stmt->data_arg = data_arg;
+}
+
+
+/* Return the clauses associated with OMP_TEAMS GS.  */
+
+static inline tree
+gimple_omp_teams_clauses (const gimple *gs)
+{
+  const gomp_teams *omp_teams_stmt = as_a <const gomp_teams *> (gs);
+  return omp_teams_stmt->clauses;
+}
+
+
+/* Return a pointer to the clauses associated with OMP_TEAMS GS.  */
+
+static inline tree *
+gimple_omp_teams_clauses_ptr (gimple *gs)
+{
+  gomp_teams *omp_teams_stmt = as_a <gomp_teams *> (gs);
+  return &omp_teams_stmt->clauses;
+}
+
+
+/* Set CLAUSES to be the clauses associated with OMP_TEAMS_STMT.  */
+
+static inline void
+gimple_omp_teams_set_clauses (gomp_teams *omp_teams_stmt, tree clauses)
+{
+  omp_teams_stmt->clauses = clauses;
+}
+
+/* Return the child function used to hold the body of OMP_TEAMS_STMT.  */
+
+static inline tree
+gimple_omp_teams_child_fn (const gomp_teams *omp_teams_stmt)
+{
+  return omp_teams_stmt->child_fn;
+}
+
+/* Return a pointer to the child function used to hold the body of
+   OMP_TEAMS_STMT.  */
+
+static inline tree *
+gimple_omp_teams_child_fn_ptr (gomp_teams *omp_teams_stmt)
+{
+  return &omp_teams_stmt->child_fn;
+}
+
+
+/* Set CHILD_FN to be the child function for OMP_TEAMS_STMT.  */
+
+static inline void
+gimple_omp_teams_set_child_fn (gomp_teams *omp_teams_stmt, tree child_fn)
+{
+  omp_teams_stmt->child_fn = child_fn;
+}
+
+
+/* Return the artificial argument used to send variables and values
+   from the parent to the children threads in OMP_TEAMS_STMT.  */
+
+static inline tree
+gimple_omp_teams_data_arg (const gomp_teams *omp_teams_stmt)
+{
+  return omp_teams_stmt->data_arg;
+}
+
+
+/* Return a pointer to the data argument for OMP_TEAMS_STMT.  */
+
+static inline tree *
+gimple_omp_teams_data_arg_ptr (gomp_teams *omp_teams_stmt)
+{
+  return &omp_teams_stmt->data_arg;
+}
+
+
+/* Set DATA_ARG to be the data argument for OMP_TEAMS_STMT.  */
+
+static inline void
+gimple_omp_teams_set_data_arg (gomp_teams *omp_teams_stmt, tree data_arg)
+{
+  omp_teams_stmt->data_arg = data_arg;
+}
+
+/* Return the kernel_phony flag of an OMP_TEAMS_STMT.  */
+
+static inline bool
+gimple_omp_teams_grid_phony (const gomp_teams *omp_teams_stmt)
+{
+  return (gimple_omp_subcode (omp_teams_stmt) & GF_OMP_TEAMS_GRID_PHONY) != 0;
+}
+
+/* Set kernel_phony flag of an OMP_TEAMS_STMT to VALUE.  */
+
+static inline void
+gimple_omp_teams_set_grid_phony (gomp_teams *omp_teams_stmt, bool value)
+{
+  if (value)
+    omp_teams_stmt->subcode |= GF_OMP_TEAMS_GRID_PHONY;
+  else
+    omp_teams_stmt->subcode &= ~GF_OMP_TEAMS_GRID_PHONY;
+}
+
+/* Return the host flag of an OMP_TEAMS_STMT.  */
+
+static inline bool
+gimple_omp_teams_host (const gomp_teams *omp_teams_stmt)
+{
+  return (gimple_omp_subcode (omp_teams_stmt) & GF_OMP_TEAMS_HOST) != 0;
+}
+
+/* Set host flag of an OMP_TEAMS_STMT to VALUE.  */
+
+static inline void
+gimple_omp_teams_set_host (gomp_teams *omp_teams_stmt, bool value)
+{
+  if (value)
+    omp_teams_stmt->subcode |= GF_OMP_TEAMS_HOST;
+  else
+    omp_teams_stmt->subcode &= ~GF_OMP_TEAMS_HOST;
+}
+
+/* Return the clauses associated with OMP_SECTIONS GS.  */
+
+static inline tree
+gimple_omp_sections_clauses (const gimple *gs)
+{
+  const gomp_sections *omp_sections_stmt = as_a <const gomp_sections *> (gs);
+  return omp_sections_stmt->clauses;
+}
+
+
+/* Return a pointer to the clauses associated with OMP_SECTIONS GS.  */
+
+static inline tree *
+gimple_omp_sections_clauses_ptr (gimple *gs)
+{
+  gomp_sections *omp_sections_stmt = as_a <gomp_sections *> (gs);
+  return &omp_sections_stmt->clauses;
+}
+
+
+/* Set CLAUSES to be the set of clauses associated with OMP_SECTIONS
+   GS.  */
+
+static inline void
+gimple_omp_sections_set_clauses (gimple *gs, tree clauses)
+{
+  gomp_sections *omp_sections_stmt = as_a <gomp_sections *> (gs);
+  omp_sections_stmt->clauses = clauses;
+}
+
+
+/* Return the control variable associated with the GIMPLE_OMP_SECTIONS
+   in GS.  */
+
+static inline tree
+gimple_omp_sections_control (const gimple *gs)
+{
+  const gomp_sections *omp_sections_stmt = as_a <const gomp_sections *> (gs);
+  return omp_sections_stmt->control;
+}
+
+
+/* Return a pointer to the clauses associated with the GIMPLE_OMP_SECTIONS
+   GS.  */
+
+static inline tree *
+gimple_omp_sections_control_ptr (gimple *gs)
+{
+  gomp_sections *omp_sections_stmt = as_a <gomp_sections *> (gs);
+  return &omp_sections_stmt->control;
+}
+
+
+/* Set CONTROL to be the set of clauses associated with the
+   GIMPLE_OMP_SECTIONS in GS.  */
+
+static inline void
+gimple_omp_sections_set_control (gimple *gs, tree control)
+{
+  gomp_sections *omp_sections_stmt = as_a <gomp_sections *> (gs);
+  omp_sections_stmt->control = control;
+}
+
+
+/* Set the value being stored in an atomic store.  */
+
+static inline void
+gimple_omp_atomic_store_set_val (gomp_atomic_store *store_stmt, tree val)
+{
+  store_stmt->val = val;
+}
+
+
+/* Return the value being stored in an atomic store.  */
+
+static inline tree
+gimple_omp_atomic_store_val (const gomp_atomic_store *store_stmt)
+{
+  return store_stmt->val;
+}
+
+
+/* Return a pointer to the value being stored in an atomic store.  */
+
+static inline tree *
+gimple_omp_atomic_store_val_ptr (gomp_atomic_store *store_stmt)
+{
+  return &store_stmt->val;
+}
+
+
+/* Set the LHS of an atomic load.  */
+
+static inline void
+gimple_omp_atomic_load_set_lhs (gomp_atomic_load *load_stmt, tree lhs)
+{
+  load_stmt->lhs = lhs;
+}
+
+
+/* Get the LHS of an atomic load.  */
+
+static inline tree
+gimple_omp_atomic_load_lhs (const gomp_atomic_load *load_stmt)
+{
+  return load_stmt->lhs;
+}
+
+
+/* Return a pointer to the LHS of an atomic load.  */
+
+static inline tree *
+gimple_omp_atomic_load_lhs_ptr (gomp_atomic_load *load_stmt)
+{
+  return &load_stmt->lhs;
+}
+
+
+/* Set the RHS of an atomic load.  */
+
+static inline void
+gimple_omp_atomic_load_set_rhs (gomp_atomic_load *load_stmt, tree rhs)
+{
+  load_stmt->rhs = rhs;
+}
+
+
+/* Get the RHS of an atomic load.  */
+
+static inline tree
+gimple_omp_atomic_load_rhs (const gomp_atomic_load *load_stmt)
+{
+  return load_stmt->rhs;
+}
+
+
+/* Return a pointer to the RHS of an atomic load.  */
+
+static inline tree *
+gimple_omp_atomic_load_rhs_ptr (gomp_atomic_load *load_stmt)
+{
+  return &load_stmt->rhs;
+}
+
+
+/* Get the definition of the control variable in a GIMPLE_OMP_CONTINUE.  */
+
+static inline tree
+gimple_omp_continue_control_def (const gomp_continue *cont_stmt)
+{
+  return cont_stmt->control_def;
+}
+
+/* The same as above, but return the address.  */
+
+static inline tree *
+gimple_omp_continue_control_def_ptr (gomp_continue *cont_stmt)
+{
+  return &cont_stmt->control_def;
+}
+
+/* Set the definition of the control variable in a GIMPLE_OMP_CONTINUE.  */
+
+static inline void
+gimple_omp_continue_set_control_def (gomp_continue *cont_stmt, tree def)
+{
+  cont_stmt->control_def = def;
+}
+
+
+/* Get the use of the control variable in a GIMPLE_OMP_CONTINUE.  */
+
+static inline tree
+gimple_omp_continue_control_use (const gomp_continue *cont_stmt)
+{
+  return cont_stmt->control_use;
+}
+
+
+/* The same as above, but return the address.  */
+
+static inline tree *
+gimple_omp_continue_control_use_ptr (gomp_continue *cont_stmt)
+{
+  return &cont_stmt->control_use;
+}
+
+
+/* Set the use of the control variable in a GIMPLE_OMP_CONTINUE.  */
+
+static inline void
+gimple_omp_continue_set_control_use (gomp_continue *cont_stmt, tree use)
+{
+  cont_stmt->control_use = use;
+}
+
+/* Return a pointer to the body for the GIMPLE_TRANSACTION statement
+   TRANSACTION_STMT.  */
+
+static inline gimple_seq *
+gimple_transaction_body_ptr (gtransaction *transaction_stmt)
+{
+  return &transaction_stmt->body;
+}
+
+/* Return the body for the GIMPLE_TRANSACTION statement TRANSACTION_STMT.  */
+
+static inline gimple_seq
+gimple_transaction_body (gtransaction *transaction_stmt)
+{
+  return transaction_stmt->body;
+}
+
+/* Return the label associated with a GIMPLE_TRANSACTION.  */
+
+static inline tree
+gimple_transaction_label_norm (const gtransaction *transaction_stmt)
+{
+  return transaction_stmt->label_norm;
+}
+
+static inline tree *
+gimple_transaction_label_norm_ptr (gtransaction *transaction_stmt)
+{
+  return &transaction_stmt->label_norm;
+}
+
+static inline tree
+gimple_transaction_label_uninst (const gtransaction *transaction_stmt)
+{
+  return transaction_stmt->label_uninst;
+}
+
+static inline tree *
+gimple_transaction_label_uninst_ptr (gtransaction *transaction_stmt)
+{
+  return &transaction_stmt->label_uninst;
+}
+
+static inline tree
+gimple_transaction_label_over (const gtransaction *transaction_stmt)
+{
+  return transaction_stmt->label_over;
+}
+
+static inline tree *
+gimple_transaction_label_over_ptr (gtransaction *transaction_stmt)
+{
+  return &transaction_stmt->label_over;
+}
+
+/* Return the subcode associated with a GIMPLE_TRANSACTION.  */
+
+static inline unsigned int
+gimple_transaction_subcode (const gtransaction *transaction_stmt)
+{
+  return transaction_stmt->subcode;
+}
+
+/* Set BODY to be the body for the GIMPLE_TRANSACTION statement
+   TRANSACTION_STMT.  */
+
+static inline void
+gimple_transaction_set_body (gtransaction *transaction_stmt,
+			     gimple_seq body)
+{
+  transaction_stmt->body = body;
+}
+
+/* Set the label associated with a GIMPLE_TRANSACTION.  */
+
+static inline void
+gimple_transaction_set_label_norm (gtransaction *transaction_stmt, tree label)
+{
+  transaction_stmt->label_norm = label;
+}
+
+static inline void
+gimple_transaction_set_label_uninst (gtransaction *transaction_stmt, tree label)
+{
+  transaction_stmt->label_uninst = label;
+}
+
+static inline void
+gimple_transaction_set_label_over (gtransaction *transaction_stmt, tree label)
+{
+  transaction_stmt->label_over = label;
+}
+
+/* Set the subcode associated with a GIMPLE_TRANSACTION.  */
+
+static inline void
+gimple_transaction_set_subcode (gtransaction *transaction_stmt,
+				unsigned int subcode)
+{
+  transaction_stmt->subcode = subcode;
+}
+
+/* Return a pointer to the return value for GIMPLE_RETURN GS.  */
+
+static inline tree *
+gimple_return_retval_ptr (greturn *gs)
+{
+  return &gs->op[0];
+}
+
+/* Return the return value for GIMPLE_RETURN GS.  */
+
+static inline tree
+gimple_return_retval (const greturn *gs)
+{
+  return gs->op[0];
+}
+
+
+/* Set RETVAL to be the return value for GIMPLE_RETURN GS.  */
+
+static inline void
+gimple_return_set_retval (greturn *gs, tree retval)
+{
+  gs->op[0] = retval;
+}
+
+
+/* Returns true when the gimple statement STMT is any of the OMP types.  */
+
+#define CASE_GIMPLE_OMP				\
+    case GIMPLE_OMP_PARALLEL:			\
+    case GIMPLE_OMP_TASK:			\
+    case GIMPLE_OMP_FOR:			\
+    case GIMPLE_OMP_SECTIONS:			\
+    case GIMPLE_OMP_SECTIONS_SWITCH:		\
+    case GIMPLE_OMP_SINGLE:			\
+    case GIMPLE_OMP_TARGET:			\
+    case GIMPLE_OMP_TEAMS:			\
+    case GIMPLE_OMP_SECTION:			\
+    case GIMPLE_OMP_MASTER:			\
+    case GIMPLE_OMP_TASKGROUP:			\
+    case GIMPLE_OMP_ORDERED:			\
+    case GIMPLE_OMP_CRITICAL:			\
+    case GIMPLE_OMP_RETURN:			\
+    case GIMPLE_OMP_ATOMIC_LOAD:		\
+    case GIMPLE_OMP_ATOMIC_STORE:		\
+    case GIMPLE_OMP_CONTINUE:			\
+    case GIMPLE_OMP_GRID_BODY
+
+static inline bool
+is_gimple_omp (const gimple *stmt)
+{
+  switch (gimple_code (stmt))
+    {
+    CASE_GIMPLE_OMP:
+      return true;
+    default:
+      return false;
+    }
+}
+
+/* Return true if the OMP gimple statement STMT is any of the OpenACC types
+   specifically.  */
+
+static inline bool
+is_gimple_omp_oacc (const gimple *stmt)
+{
+  gcc_assert (is_gimple_omp (stmt));
+  switch (gimple_code (stmt))
+    {
+    case GIMPLE_OMP_FOR:
+      switch (gimple_omp_for_kind (stmt))
+	{
+	case GF_OMP_FOR_KIND_OACC_LOOP:
+	  return true;
+	default:
+	  return false;
+	}
+    case GIMPLE_OMP_TARGET:
+      switch (gimple_omp_target_kind (stmt))
+	{
+	case GF_OMP_TARGET_KIND_OACC_PARALLEL:
+	case GF_OMP_TARGET_KIND_OACC_KERNELS:
+	case GF_OMP_TARGET_KIND_OACC_DATA:
+	case GF_OMP_TARGET_KIND_OACC_UPDATE:
+	case GF_OMP_TARGET_KIND_OACC_ENTER_EXIT_DATA:
+	case GF_OMP_TARGET_KIND_OACC_DECLARE:
+	case GF_OMP_TARGET_KIND_OACC_HOST_DATA:
+	  return true;
+	default:
+	  return false;
+	}
+    default:
+      return false;
+    }
+}
+
+
+/* Return true if the OMP gimple statement STMT is offloaded.  */
+
+static inline bool
+is_gimple_omp_offloaded (const gimple *stmt)
+{
+  gcc_assert (is_gimple_omp (stmt));
+  switch (gimple_code (stmt))
+    {
+    case GIMPLE_OMP_TARGET:
+      switch (gimple_omp_target_kind (stmt))
+	{
+	case GF_OMP_TARGET_KIND_REGION:
+	case GF_OMP_TARGET_KIND_OACC_PARALLEL:
+	case GF_OMP_TARGET_KIND_OACC_KERNELS:
+	  return true;
+	default:
+	  return false;
+	}
+    default:
+      return false;
+    }
+}
+
+
+/* Returns TRUE if statement G is a GIMPLE_NOP.  */
+
+static inline bool
+gimple_nop_p (const gimple *g)
+{
+  return gimple_code (g) == GIMPLE_NOP;
+}
+
+
+/* Return true if GS is a GIMPLE_RESX.  */
+
+static inline bool
+is_gimple_resx (const gimple *gs)
+{
+  return gimple_code (gs) == GIMPLE_RESX;
+}
+
+/* Return the type of the main expression computed by STMT.  Return
+   void_type_node if the statement computes nothing.  */
+
+static inline tree
+gimple_expr_type (const gimple *stmt)
+{
+  enum gimple_code code = gimple_code (stmt);
+  /* In general we want to pass out a type that can be substituted
+     for both the RHS and the LHS types if there is a possibly
+     useless conversion involved.  That means returning the
+     original RHS type as far as we can reconstruct it.  */
+  if (code == GIMPLE_CALL)
+    {
+      const gcall *call_stmt = as_a <const gcall *> (stmt);
+      if (gimple_call_internal_p (call_stmt))
+	switch (gimple_call_internal_fn (call_stmt))
+	  {
+	  case IFN_MASK_STORE:
+	  case IFN_SCATTER_STORE:
+	    return TREE_TYPE (gimple_call_arg (call_stmt, 3));
+	  case IFN_MASK_SCATTER_STORE:
+	    return TREE_TYPE (gimple_call_arg (call_stmt, 4));
+	  default:
+	    break;
+	  }
+      return gimple_call_return_type (call_stmt);
+    }
+  else if (code == GIMPLE_ASSIGN)
+    {
+      if (gimple_assign_rhs_code (stmt) == POINTER_PLUS_EXPR)
+        return TREE_TYPE (gimple_assign_rhs1 (stmt));
+      else
+        /* As fallback use the type of the LHS.  */
+        return TREE_TYPE (gimple_get_lhs (stmt));
+    }
+  else if (code == GIMPLE_COND)
+    return boolean_type_node;
+  else
+    return void_type_node;
+}
+
+/* Enum and arrays used for allocation stats.  Keep in sync with
+   gimple.c:gimple_alloc_kind_names.  */
+enum gimple_alloc_kind
+{
+  gimple_alloc_kind_assign,	/* Assignments.  */
+  gimple_alloc_kind_phi,	/* PHI nodes.  */
+  gimple_alloc_kind_cond,	/* Conditionals.  */
+  gimple_alloc_kind_rest,	/* Everything else.  */
+  gimple_alloc_kind_all
+};
+
+extern uint64_t gimple_alloc_counts[];
+extern uint64_t gimple_alloc_sizes[];
+
+/* Return the allocation kind for a given stmt CODE.  */
+static inline enum gimple_alloc_kind
+gimple_alloc_kind (enum gimple_code code)
+{
+  switch (code)
+    {
+      case GIMPLE_ASSIGN:
+	return gimple_alloc_kind_assign;
+      case GIMPLE_PHI:
+	return gimple_alloc_kind_phi;
+      case GIMPLE_COND:
+	return gimple_alloc_kind_cond;
+      default:
+	return gimple_alloc_kind_rest;
+    }
+}
+
+/* Return true if a location should not be emitted for this statement
+   by annotate_all_with_location.  */
+
+static inline bool
+gimple_do_not_emit_location_p (gimple *g)
+{
+  return gimple_plf (g, GF_PLF_1);
+}
+
+/* Mark statement G so a location will not be emitted by
+   annotate_one_with_location.  */
+
+static inline void
+gimple_set_do_not_emit_location (gimple *g)
+{
+  /* The PLF flags are initialized to 0 when a new tuple is created,
+     so no need to initialize it anywhere.  */
+  gimple_set_plf (g, GF_PLF_1, true);
+}
+
+#endif  /* GCC_GIMPLE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimplify-me.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimplify-me.h
new file mode 100644
index 0000000..5340ac4
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimplify-me.h
@@ -0,0 +1,37 @@
+/* Header file for middle end gimplification.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GIMPLIFY_ME_H
+#define GCC_GIMPLIFY_ME_H
+
+/* Validation of GIMPLE expressions.  Note that these predicates only check
+ *    the basic form of the expression, they don't recurse to make sure that
+ *       underlying nodes are also of the right form.  */
+typedef bool (*gimple_predicate)(tree);
+
+extern tree force_gimple_operand_1 (tree, gimple_seq *, gimple_predicate, tree);
+extern tree force_gimple_operand (tree, gimple_seq *, bool, tree);
+extern tree force_gimple_operand_gsi_1 (gimple_stmt_iterator *, tree,
+					gimple_predicate, tree,
+					bool, enum gsi_iterator_update);
+extern tree force_gimple_operand_gsi (gimple_stmt_iterator *, tree, bool, tree,
+				      bool, enum gsi_iterator_update);
+extern void gimple_regimplify_operands (gimple *, gimple_stmt_iterator *);
+
+#endif /* GCC_GIMPLIFY_ME_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimplify.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimplify.h
new file mode 100644
index 0000000..1070006
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gimplify.h
@@ -0,0 +1,89 @@
+/* Header file for gimplification.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GIMPLIFY_H
+#define GCC_GIMPLIFY_H
+
+/* Validation of GIMPLE expressions.  Note that these predicates only check
+   the basic form of the expression, they don't recurse to make sure that
+   underlying nodes are also of the right form.  */
+typedef bool (*gimple_predicate)(tree);
+
+/* FIXME we should deduce this from the predicate.  */
+enum fallback {
+  fb_none = 0,		/* Do not generate a temporary.  */
+
+  fb_rvalue = 1,	/* Generate an rvalue to hold the result of a
+			   gimplified expression.  */
+
+  fb_lvalue = 2,	/* Generate an lvalue to hold the result of a
+			   gimplified expression.  */
+
+  fb_mayfail = 4,	/* Gimplification may fail.  Error issued
+			   afterwards.  */
+  fb_either= fb_rvalue | fb_lvalue
+};
+
+typedef int fallback_t;
+
+enum gimplify_status {
+  GS_ERROR	= -2,	/* Something Bad Seen.  */
+  GS_UNHANDLED	= -1,	/* A langhook result for "I dunno".  */
+  GS_OK		= 0,	/* We did something, maybe more to do.  */
+  GS_ALL_DONE	= 1	/* The expression is fully gimplified.  */
+};
+
+extern void free_gimplify_stack (void);
+extern void push_gimplify_context (bool in_ssa = false,
+				   bool rhs_cond_ok = false);
+extern void pop_gimplify_context (gimple *);
+extern gbind *gimple_current_bind_expr (void);
+extern vec<gbind *> gimple_bind_expr_stack (void);
+extern void gimplify_and_add (tree, gimple_seq *);
+extern tree get_formal_tmp_var (tree, gimple_seq *);
+extern tree get_initialized_tmp_var (tree, gimple_seq *, gimple_seq *,
+				     bool = true);
+extern void declare_vars (tree, gimple *, bool);
+extern void gimple_add_tmp_var (tree);
+extern void gimple_add_tmp_var_fn (struct function *, tree);
+extern tree unshare_expr (tree);
+extern tree unshare_expr_without_location (tree);
+extern tree voidify_wrapper_expr (tree, tree);
+extern tree build_and_jump (tree *);
+extern enum gimplify_status gimplify_self_mod_expr (tree *, gimple_seq *,
+						    gimple_seq *, bool, tree);
+extern tree gimple_boolify (tree);
+extern gimple_predicate rhs_predicate_for (tree);
+extern bool gimplify_stmt (tree *, gimple_seq *);
+extern void omp_firstprivatize_variable (struct gimplify_omp_ctx *, tree);
+extern enum gimplify_status gimplify_expr (tree *, gimple_seq *, gimple_seq *,
+					   bool (*) (tree), fallback_t);
+
+extern void gimplify_type_sizes (tree, gimple_seq *);
+extern void gimplify_one_sizepos (tree *, gimple_seq *);
+extern gbind *gimplify_body (tree, bool);
+extern enum gimplify_status gimplify_arg (tree *, gimple_seq *, location_t,
+					  bool = true);
+extern void gimplify_function_tree (tree);
+extern enum gimplify_status gimplify_va_arg_expr (tree *, gimple_seq *,
+						  gimple_seq *);
+extern bool generic_expr_could_trap_p (tree expr);
+gimple *gimplify_assign (tree, tree, gimple_seq *);
+
+#endif /* GCC_GIMPLIFY_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/glimits.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/glimits.h
new file mode 100644
index 0000000..0cddf0f
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/glimits.h
@@ -0,0 +1,152 @@
+/* Copyright (C) 1991-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef _LIMITS_H___
+#define _LIMITS_H___
+
+/* Number of bits in a `char'.  */
+#undef CHAR_BIT
+#define CHAR_BIT __CHAR_BIT__
+
+/* Maximum length of a multibyte character.  */
+#ifndef MB_LEN_MAX
+#define MB_LEN_MAX 1
+#endif
+
+/* Minimum and maximum values a `signed char' can hold.  */
+#undef SCHAR_MIN
+#define SCHAR_MIN (-SCHAR_MAX - 1)
+#undef SCHAR_MAX
+#define SCHAR_MAX __SCHAR_MAX__
+
+/* Maximum value an `unsigned char' can hold.  (Minimum is 0).  */
+#undef UCHAR_MAX
+#if __SCHAR_MAX__ == __INT_MAX__
+# define UCHAR_MAX (SCHAR_MAX * 2U + 1U)
+#else
+# define UCHAR_MAX (SCHAR_MAX * 2 + 1)
+#endif
+
+/* Minimum and maximum values a `char' can hold.  */
+#ifdef __CHAR_UNSIGNED__
+# undef CHAR_MIN
+# if __SCHAR_MAX__ == __INT_MAX__
+#  define CHAR_MIN 0U
+# else
+#  define CHAR_MIN 0
+# endif
+# undef CHAR_MAX
+# define CHAR_MAX UCHAR_MAX
+#else
+# undef CHAR_MIN
+# define CHAR_MIN SCHAR_MIN
+# undef CHAR_MAX
+# define CHAR_MAX SCHAR_MAX
+#endif
+
+/* Minimum and maximum values a `signed short int' can hold.  */
+#undef SHRT_MIN
+#define SHRT_MIN (-SHRT_MAX - 1)
+#undef SHRT_MAX
+#define SHRT_MAX __SHRT_MAX__
+
+/* Maximum value an `unsigned short int' can hold.  (Minimum is 0).  */
+#undef USHRT_MAX
+#if __SHRT_MAX__ == __INT_MAX__
+# define USHRT_MAX (SHRT_MAX * 2U + 1U)
+#else
+# define USHRT_MAX (SHRT_MAX * 2 + 1)
+#endif
+
+/* Minimum and maximum values a `signed int' can hold.  */
+#undef INT_MIN
+#define INT_MIN (-INT_MAX - 1)
+#undef INT_MAX
+#define INT_MAX __INT_MAX__
+
+/* Maximum value an `unsigned int' can hold.  (Minimum is 0).  */
+#undef UINT_MAX
+#define UINT_MAX (INT_MAX * 2U + 1U)
+
+/* Minimum and maximum values a `signed long int' can hold.
+   (Same as `int').  */
+#undef LONG_MIN
+#define LONG_MIN (-LONG_MAX - 1L)
+#undef LONG_MAX
+#define LONG_MAX __LONG_MAX__
+
+/* Maximum value an `unsigned long int' can hold.  (Minimum is 0).  */
+#undef ULONG_MAX
+#define ULONG_MAX (LONG_MAX * 2UL + 1UL)
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+/* Minimum and maximum values a `signed long long int' can hold.  */
+# undef LLONG_MIN
+# define LLONG_MIN (-LLONG_MAX - 1LL)
+# undef LLONG_MAX
+# define LLONG_MAX __LONG_LONG_MAX__
+
+/* Maximum value an `unsigned long long int' can hold.  (Minimum is 0).  */
+# undef ULLONG_MAX
+# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
+#endif
+
+#if defined (__GNU_LIBRARY__) ? defined (__USE_GNU) : !defined (__STRICT_ANSI__)
+/* Minimum and maximum values a `signed long long int' can hold.  */
+# undef LONG_LONG_MIN
+# define LONG_LONG_MIN (-LONG_LONG_MAX - 1LL)
+# undef LONG_LONG_MAX
+# define LONG_LONG_MAX __LONG_LONG_MAX__
+
+/* Maximum value an `unsigned long long int' can hold.  (Minimum is 0).  */
+# undef ULONG_LONG_MAX
+# define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1ULL)
+#endif
+
+#ifdef __STDC_WANT_IEC_60559_BFP_EXT__
+/* TS 18661-1 widths of integer types.  */
+# undef CHAR_WIDTH
+# define CHAR_WIDTH __SCHAR_WIDTH__
+# undef SCHAR_WIDTH
+# define SCHAR_WIDTH __SCHAR_WIDTH__
+# undef UCHAR_WIDTH
+# define UCHAR_WIDTH __SCHAR_WIDTH__
+# undef SHRT_WIDTH
+# define SHRT_WIDTH __SHRT_WIDTH__
+# undef USHRT_WIDTH
+# define USHRT_WIDTH __SHRT_WIDTH__
+# undef INT_WIDTH
+# define INT_WIDTH __INT_WIDTH__
+# undef UINT_WIDTH
+# define UINT_WIDTH __INT_WIDTH__
+# undef LONG_WIDTH
+# define LONG_WIDTH __LONG_WIDTH__
+# undef ULONG_WIDTH
+# define ULONG_WIDTH __LONG_WIDTH__
+# undef LLONG_WIDTH
+# define LLONG_WIDTH __LONG_LONG_WIDTH__
+# undef ULLONG_WIDTH
+# define ULLONG_WIDTH __LONG_LONG_WIDTH__
+#endif
+
+#endif /* _LIMITS_H___ */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/graph.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/graph.h
new file mode 100644
index 0000000..356f9fe
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/graph.h
@@ -0,0 +1,27 @@
+/* Header file for graph routines.
+   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GRAPH_H
+#define GCC_GRAPH_H
+
+extern void print_graph_cfg (const char *, struct function *);
+extern void clean_graph_dump_file (const char *);
+extern void finish_graph_dump_file (const char *);
+
+#endif /* ! GCC_GRAPH_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/graphds.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/graphds.h
new file mode 100644
index 0000000..68adc49
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/graphds.h
@@ -0,0 +1,68 @@
+/* Graph representation.
+   Copyright (C) 2007-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GRAPHDS_H
+#define GCC_GRAPHDS_H
+
+/* Structure representing edge of a graph.  */
+
+struct graph_edge
+{
+  int src, dest;	/* Source and destination.  */
+  struct graph_edge *pred_next, *succ_next;
+			/* Next edge in predecessor and successor lists.  */
+  void *data;		/* Data attached to the edge.  */
+};
+
+/* Structure representing vertex of a graph.  */
+
+struct vertex
+{
+  struct graph_edge *pred, *succ;
+			/* Lists of predecessors and successors.  */
+  int component;	/* Number of dfs restarts before reaching the
+			   vertex.  */
+  int post;		/* Postorder number.  */
+  void *data;		/* Data attached to the vertex.  */
+};
+
+/* Structure representing a graph.  */
+
+struct graph
+{
+  int n_vertices;	   /* Number of vertices.  */
+  struct vertex *vertices; /* The vertices.  */
+  struct obstack ob;	   /* Obstack for vertex and edge allocation.  */
+};
+
+struct graph *new_graph (int);
+void dump_graph (FILE *, struct graph *);
+struct graph_edge *add_edge (struct graph *, int, int);
+void identify_vertices (struct graph *, int, int);
+typedef bool (*skip_edge_callback) (struct graph_edge *);
+int graphds_dfs (struct graph *, int *, int,
+		 vec<int> *, bool, bitmap, skip_edge_callback = NULL);
+int graphds_scc (struct graph *, bitmap, skip_edge_callback = NULL);
+void graphds_domtree (struct graph *, int, int *, int *, int *);
+typedef void (*graphds_edge_callback) (struct graph *,
+				       struct graph_edge *, void *);
+void for_each_edge (struct graph *, graphds_edge_callback, void *);
+void free_graph (struct graph *g);
+
+#endif /* GCC_GRAPHDS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/graphite.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/graphite.h
new file mode 100644
index 0000000..dc4b15d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/graphite.h
@@ -0,0 +1,468 @@
+/* Graphite polyhedral representation.
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Contributed by Sebastian Pop <sebastian.pop@amd.com> and
+   Tobias Grosser <grosser@fim.uni-passau.de>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GRAPHITE_POLY_H
+#define GCC_GRAPHITE_POLY_H
+
+#include "sese.h"
+#include <isl/options.h>
+#include <isl/ctx.h>
+#include <isl/val.h>
+#include <isl/set.h>
+#include <isl/union_set.h>
+#include <isl/map.h>
+#include <isl/union_map.h>
+#include <isl/aff.h>
+#include <isl/constraint.h>
+#include <isl/flow.h>
+#include <isl/ilp.h>
+#include <isl/schedule.h>
+#include <isl/ast_build.h>
+#include <isl/schedule_node.h>
+#include <isl/id.h>
+#include <isl/space.h>
+
+typedef struct poly_dr *poly_dr_p;
+
+typedef struct poly_bb *poly_bb_p;
+
+typedef struct scop *scop_p;
+
+typedef unsigned graphite_dim_t;
+
+static inline graphite_dim_t scop_nb_params (scop_p);
+
+/* A data reference can write or read some memory or we
+   just know it may write some memory.  */
+enum poly_dr_type
+{
+  PDR_READ,
+  /* PDR_MAY_READs are represented using PDR_READS.  This does not
+     limit the expressiveness.  */
+  PDR_WRITE,
+  PDR_MAY_WRITE
+};
+
+struct poly_dr
+{
+  /* An identifier for this PDR.  */
+  int id;
+
+  /* The number of data refs identical to this one in the PBB.  */
+  int nb_refs;
+
+  /* A pointer to the gimple stmt containing this reference.  */
+  gimple *stmt;
+
+  /* A pointer to the PBB that contains this data reference.  */
+  poly_bb_p pbb;
+
+  enum poly_dr_type type;
+
+  /* The access polyhedron contains the polyhedral space this data
+     reference will access.
+
+     The polyhedron contains these dimensions:
+
+     - The alias set (a):
+     Every memory access is classified in at least one alias set.
+
+     - The subscripts (s_0, ..., s_n):
+     The memory is accessed using zero or more subscript dimensions.
+
+     - The iteration domain (variables and parameters)
+
+     Do not hardcode the dimensions.  Use the following accessor functions:
+     - pdr_alias_set_dim
+     - pdr_subscript_dim
+     - pdr_iterator_dim
+     - pdr_parameter_dim
+
+     Example:
+
+     | int A[1335][123];
+     | int *p = malloc ();
+     |
+     | k = ...
+     | for i
+     |   {
+     |     if (unknown_function ())
+     |       p = A;
+     |       ... = p[?][?];
+     | 	   for j
+     |       A[i][j+k] = m;
+     |   }
+
+     The data access A[i][j+k] in alias set "5" is described like this:
+
+     | i   j   k   a  s0  s1   1
+     | 0   0   0   1   0   0  -5     =  0
+     |-1   0   0   0   1   0   0     =  0
+     | 0  -1  -1   0   0   1   0     =  0
+     | 0   0   0   0   1   0   0     >= 0  # The last four lines describe the
+     | 0   0   0   0   0   1   0     >= 0  # array size.
+     | 0   0   0   0  -1   0 1335    >= 0
+     | 0   0   0   0   0  -1 123     >= 0
+
+     The pointer "*p" in alias set "5" and "7" is described as a union of
+     polyhedron:
+
+
+     | i   k   a  s0   1
+     | 0   0   1   0  -5   =  0
+     | 0   0   0   1   0   >= 0
+
+     "or"
+
+     | i   k   a  s0   1
+     | 0   0   1   0  -7   =  0
+     | 0   0   0   1   0   >= 0
+
+     "*p" accesses all of the object allocated with 'malloc'.
+
+     The scalar data access "m" is represented as an array with zero subscript
+     dimensions.
+
+     | i   j   k   a   1
+     | 0   0   0  -1   15  = 0
+
+     The difference between the graphite internal format for access data and
+     the OpenSop format is in the order of columns.
+     Instead of having:
+
+     | i   j   k   a  s0  s1   1
+     | 0   0   0   1   0   0  -5     =  0
+     |-1   0   0   0   1   0   0     =  0
+     | 0  -1  -1   0   0   1   0     =  0
+     | 0   0   0   0   1   0   0     >= 0  # The last four lines describe the
+     | 0   0   0   0   0   1   0     >= 0  # array size.
+     | 0   0   0   0  -1   0 1335    >= 0
+     | 0   0   0   0   0  -1 123     >= 0
+
+     In OpenScop we have:
+
+     | a  s0  s1   i   j   k   1
+     | 1   0   0   0   0   0  -5     =  0
+     | 0   1   0  -1   0   0   0     =  0
+     | 0   0   1   0  -1  -1   0     =  0
+     | 0   1   0   0   0   0   0     >= 0  # The last four lines describe the
+     | 0   0   1   0   0   0   0     >= 0  # array size.
+     | 0  -1   0   0   0   0 1335    >= 0
+     | 0   0  -1   0   0   0 123     >= 0
+
+     The OpenScop access function is printed as follows:
+
+     | 1  # The number of disjunct components in a union of access functions.
+     | R C O I L P  # Described bellow.
+     | a  s0  s1   i   j   k   1
+     | 1   0   0   0   0   0  -5     =  0
+     | 0   1   0  -1   0   0   0     =  0
+     | 0   0   1   0  -1  -1   0     =  0
+     | 0   1   0   0   0   0   0     >= 0  # The last four lines describe the
+     | 0   0   1   0   0   0   0     >= 0  # array size.
+     | 0  -1   0   0   0   0 1335    >= 0
+     | 0   0  -1   0   0   0 123     >= 0
+
+     Where:
+     - R: Number of rows.
+     - C: Number of columns.
+     - O: Number of output dimensions = alias set + number of subscripts.
+     - I: Number of input dimensions (iterators).
+     - L: Number of local (existentially quantified) dimensions.
+     - P: Number of parameters.
+
+     In the example, the vector "R C O I L P" is "7 7 3 2 0 1".  */
+  isl_map *accesses;
+  isl_set *subscript_sizes;
+};
+
+#define PDR_ID(PDR) (PDR->id)
+#define PDR_NB_REFS(PDR) (PDR->nb_refs)
+#define PDR_PBB(PDR) (PDR->pbb)
+#define PDR_TYPE(PDR) (PDR->type)
+#define PDR_ACCESSES(PDR) (NULL)
+
+void new_poly_dr (poly_bb_p, gimple *, enum poly_dr_type,
+		  isl_map *, isl_set *);
+void debug_pdr (poly_dr_p);
+void print_pdr (FILE *, poly_dr_p);
+
+static inline bool
+pdr_read_p (poly_dr_p pdr)
+{
+  return PDR_TYPE (pdr) == PDR_READ;
+}
+
+/* Returns true when PDR is a "write".  */
+
+static inline bool
+pdr_write_p (poly_dr_p pdr)
+{
+  return PDR_TYPE (pdr) == PDR_WRITE;
+}
+
+/* Returns true when PDR is a "may write".  */
+
+static inline bool
+pdr_may_write_p (poly_dr_p pdr)
+{
+  return PDR_TYPE (pdr) == PDR_MAY_WRITE;
+}
+
+/* POLY_BB represents a blackbox in the polyhedral model.  */
+
+struct poly_bb
+{
+  /* Pointer to a basic block or a statement in the compiler.  */
+  gimple_poly_bb_p black_box;
+
+  /* Pointer to the SCOP containing this PBB.  */
+  scop_p scop;
+
+  /* The iteration domain of this bb.  The layout of this polyhedron
+     is I|G with I the iteration domain, G the context parameters.
+
+     Example:
+
+     for (i = a - 7*b + 8; i <= 3*a + 13*b + 20; i++)
+       for (j = 2; j <= 2*i + 5; j++)
+         for (k = 0; k <= 5; k++)
+           S (i,j,k)
+
+     Loop iterators: i, j, k
+     Parameters: a, b
+
+     | i >=  a -  7b +  8
+     | i <= 3a + 13b + 20
+     | j >= 2
+     | j <= 2i + 5
+     | k >= 0
+     | k <= 5
+
+     The number of variables in the DOMAIN may change and is not
+     related to the number of loops in the original code.  */
+  isl_set *domain;
+  isl_set *iterators;
+
+  /* The data references we access.  */
+  vec<poly_dr_p> drs;
+
+  /* The last basic block generated for this pbb.  */
+  basic_block new_bb;
+};
+
+#define PBB_BLACK_BOX(PBB) ((gimple_poly_bb_p) PBB->black_box)
+#define PBB_SCOP(PBB) (PBB->scop)
+#define PBB_DRS(PBB) (PBB->drs)
+
+extern poly_bb_p new_poly_bb (scop_p, gimple_poly_bb_p);
+extern void print_pbb_domain (FILE *, poly_bb_p);
+extern void print_pbb (FILE *, poly_bb_p);
+extern void print_scop_context (FILE *, scop_p);
+extern void print_scop (FILE *, scop_p);
+extern void debug_pbb_domain (poly_bb_p);
+extern void debug_pbb (poly_bb_p);
+extern void print_pdrs (FILE *, poly_bb_p);
+extern void debug_pdrs (poly_bb_p);
+extern void debug_scop_context (scop_p);
+extern void debug_scop (scop_p);
+extern void print_scop_params (FILE *, scop_p);
+extern void debug_scop_params (scop_p);
+extern void print_iteration_domain (FILE *, poly_bb_p);
+extern void print_iteration_domains (FILE *, scop_p);
+extern void debug_iteration_domain (poly_bb_p);
+extern void debug_iteration_domains (scop_p);
+extern void print_isl_set (FILE *, isl_set *);
+extern void print_isl_map (FILE *, isl_map *);
+extern void print_isl_union_map (FILE *, isl_union_map *);
+extern void print_isl_aff (FILE *, isl_aff *);
+extern void print_isl_constraint (FILE *, isl_constraint *);
+extern void print_isl_schedule (FILE *, isl_schedule *);
+extern void debug_isl_schedule (isl_schedule *);
+extern void print_isl_ast (FILE *, isl_ast_node *);
+extern void debug_isl_ast (isl_ast_node *);
+extern void debug_isl_set (isl_set *);
+extern void debug_isl_map (isl_map *);
+extern void debug_isl_union_map (isl_union_map *);
+extern void debug_isl_aff (isl_aff *);
+extern void debug_isl_constraint (isl_constraint *);
+extern void debug_gmp_value (mpz_t);
+extern void debug_scop_pbb (scop_p scop, int i);
+extern void print_schedule_ast (FILE *, __isl_keep isl_schedule *, scop_p);
+extern void debug_schedule_ast (__isl_keep isl_schedule *, scop_p);
+
+/* The basic block of the PBB.  */
+
+static inline basic_block
+pbb_bb (poly_bb_p pbb)
+{
+  return GBB_BB (PBB_BLACK_BOX (pbb));
+}
+
+static inline int
+pbb_index (poly_bb_p pbb)
+{
+  return pbb_bb (pbb)->index;
+}
+
+/* The loop of the PBB.  */
+
+static inline loop_p
+pbb_loop (poly_bb_p pbb)
+{
+  return gbb_loop (PBB_BLACK_BOX (pbb));
+}
+
+/* The scop that contains the PDR.  */
+
+static inline scop_p
+pdr_scop (poly_dr_p pdr)
+{
+  return PBB_SCOP (PDR_PBB (pdr));
+}
+
+/* Set black box of PBB to BLACKBOX.  */
+
+static inline void
+pbb_set_black_box (poly_bb_p pbb, gimple_poly_bb_p black_box)
+{
+  pbb->black_box = black_box;
+}
+
+/* A helper structure to keep track of data references, polyhedral BBs, and
+   alias sets.  */
+
+struct dr_info
+{
+  enum {
+    invalid_alias_set = -1
+  };
+  /* The data reference.  */
+  data_reference_p dr;
+
+  /* The polyhedral BB containing this DR.  */
+  poly_bb_p pbb;
+
+  /* ALIAS_SET is the SCC number assigned by a graph_dfs of the alias graph.
+     -1 is an invalid alias set.  */
+  int alias_set;
+
+  /* Construct a DR_INFO from a data reference DR, an ALIAS_SET, and a PBB.  */
+  dr_info (data_reference_p dr, poly_bb_p pbb,
+	   int alias_set = invalid_alias_set)
+    : dr (dr), pbb (pbb), alias_set (alias_set) {}
+};
+
+/* A SCOP is a Static Control Part of the program, simple enough to be
+   represented in polyhedral form.  */
+struct scop
+{
+  /* A SCOP is defined as a SESE region.  */
+  sese_info_p scop_info;
+
+  /* Number of parameters in SCoP.  */
+  graphite_dim_t nb_params;
+
+  /* The maximum alias set as assigned to drs by build_alias_sets.  */
+  unsigned max_alias_set;
+
+  /* All the basic blocks in this scop that contain memory references
+     and that will be represented as statements in the polyhedral
+     representation.  */
+  vec<poly_bb_p> pbbs;
+
+  /* All the data references in this scop.  */
+  vec<dr_info> drs;
+
+  /* The context describes known restrictions concerning the parameters
+     and relations in between the parameters.
+
+  void f (int8_t a, uint_16_t b) {
+    c = 2 a + b;
+    ...
+  }
+
+  Here we can add these restrictions to the context:
+
+  -128 >= a >= 127
+     0 >= b >= 65,535
+     c = 2a + b  */
+  isl_set *param_context;
+
+  /* The context used internally by isl.  */
+  isl_ctx *isl_context;
+
+  /* SCoP original schedule.  */
+  isl_schedule *original_schedule;
+
+  /* SCoP transformed schedule.  */
+  isl_schedule *transformed_schedule;
+
+  /* The data dependence relation among the data references in this scop.  */
+  isl_union_map *dependence;
+};
+
+extern scop_p new_scop (edge, edge);
+extern void free_scop (scop_p);
+extern gimple_poly_bb_p new_gimple_poly_bb (basic_block, vec<data_reference_p>,
+					    vec<scalar_use>, vec<tree>);
+extern bool apply_poly_transforms (scop_p);
+
+/* Set the region of SCOP to REGION.  */
+
+static inline void
+scop_set_region (scop_p scop, sese_info_p region)
+{
+  scop->scop_info = region;
+}
+
+/* Returns the number of parameters for SCOP.  */
+
+static inline graphite_dim_t
+scop_nb_params (scop_p scop)
+{
+  return scop->nb_params;
+}
+
+/* Set the number of params of SCOP to NB_PARAMS.  */
+
+static inline void
+scop_set_nb_params (scop_p scop, graphite_dim_t nb_params)
+{
+  scop->nb_params = nb_params;
+}
+
+extern void scop_get_dependences (scop_p scop);
+
+bool
+carries_deps (__isl_keep isl_union_map *schedule,
+	      __isl_keep isl_union_map *deps,
+	      int depth);
+
+extern bool build_poly_scop (scop_p);
+extern bool graphite_regenerate_ast_isl (scop_p);
+extern void build_scops (vec<scop_p> *);
+extern tree cached_scalar_evolution_in_region (const sese_l &, loop_p, tree);
+extern void dot_all_sese (FILE *, vec<sese_l> &);
+extern void dot_sese (sese_l &);
+extern void dot_cfg ();
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gsstruct.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gsstruct.def
new file mode 100644
index 0000000..adeaf03
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gsstruct.def
@@ -0,0 +1,53 @@
+/* This file contains the definitions for the gimple IR structure
+   enumeration used in GCC.
+
+   Copyright (C) 2007-2019 Free Software Foundation, Inc.
+   Contributed by Aldy Hernandez <aldyh@redhat.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* The format of this file is
+   DEFGSSTRUCT(GSS enumeration value, structure name, has-tree-operands).
+   Each enum value should correspond with a single member of the union
+   gimple_statement_d.  */
+
+DEFGSSTRUCT(GSS_BASE, gimple, false)
+DEFGSSTRUCT(GSS_WITH_OPS, gimple_statement_with_ops, true)
+DEFGSSTRUCT(GSS_WITH_MEM_OPS_BASE, gimple_statement_with_memory_ops_base, false)
+DEFGSSTRUCT(GSS_WITH_MEM_OPS, gimple_statement_with_memory_ops, true)
+DEFGSSTRUCT(GSS_CALL, gcall, true)
+DEFGSSTRUCT(GSS_ASM, gasm, true)
+DEFGSSTRUCT(GSS_BIND, gbind, false)
+DEFGSSTRUCT(GSS_PHI, gphi, false)
+DEFGSSTRUCT(GSS_TRY, gtry, false)
+DEFGSSTRUCT(GSS_CATCH, gcatch, false)
+DEFGSSTRUCT(GSS_EH_FILTER, geh_filter, false)
+DEFGSSTRUCT(GSS_EH_MNT, geh_mnt, false)
+DEFGSSTRUCT(GSS_EH_CTRL, gimple_statement_eh_ctrl, false)
+DEFGSSTRUCT(GSS_EH_ELSE, geh_else, false)
+DEFGSSTRUCT(GSS_WCE, gimple_statement_wce, false)
+DEFGSSTRUCT(GSS_OMP, gimple_statement_omp, false)
+DEFGSSTRUCT(GSS_OMP_CRITICAL, gomp_critical, false)
+DEFGSSTRUCT(GSS_OMP_FOR, gomp_for, false)
+DEFGSSTRUCT(GSS_OMP_PARALLEL_LAYOUT, gimple_statement_omp_parallel_layout, false)
+DEFGSSTRUCT(GSS_OMP_TASK, gomp_task, false)
+DEFGSSTRUCT(GSS_OMP_SECTIONS, gomp_sections, false)
+DEFGSSTRUCT(GSS_OMP_SINGLE_LAYOUT, gimple_statement_omp_single_layout, false)
+DEFGSSTRUCT(GSS_OMP_CONTINUE, gomp_continue, false)
+DEFGSSTRUCT(GSS_OMP_ATOMIC_LOAD, gomp_atomic_load, false)
+DEFGSSTRUCT(GSS_OMP_ATOMIC_STORE_LAYOUT, gomp_atomic_store, false)
+DEFGSSTRUCT(GSS_TRANSACTION, gtransaction, false)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gstab.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gstab.h
new file mode 100644
index 0000000..26c8969
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gstab.h
@@ -0,0 +1,35 @@
+/* Copyright (C) 1997-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_GSTAB_H
+#define GCC_GSTAB_H
+
+#define __define_stab(NAME, CODE, STRING) NAME=CODE,
+
+enum
+{
+#include "stab.def"
+LAST_UNUSED_STAB_CODE
+};
+
+/* stabs debug codes really are integers with expressive names.  */
+typedef int stab_code_type;
+
+#undef __define_stab
+
+#endif /* ! GCC_GSTAB_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gsyms.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gsyms.h
new file mode 100644
index 0000000..d069997
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gsyms.h
@@ -0,0 +1,97 @@
+/* Copyright (C) 1992-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* For cross compilation, use the portable definitions from the COFF
+   documentation.  */
+#ifndef GCC_GSYMS_H
+#define GCC_GSYMS_H
+
+#define __GNU_SYMS__
+
+enum sdb_storage_class
+{
+  C_EFCN = -1,
+  C_NULL = 0,
+  C_AUTO = 1,
+  C_EXT = 2,
+  C_STAT = 3,
+  C_REG = 4,
+  C_EXTDEF = 5,
+  C_LABEL = 6,
+  C_ULABEL = 7,
+  C_MOS = 8,
+  C_ARG = 9,
+  C_STRTAG = 10,
+  C_MOU = 11,
+  C_UNTAG = 12,
+  C_TPDEF = 13,
+  C_USTATIC = 14,
+  C_ENTAG = 15,
+  C_MOE = 16,
+  C_REGPARM = 17,
+  C_FIELD = 18,
+
+  C_BLOCK = 100,
+  C_FCN = 101,
+  C_EOS = 102,
+  C_FILE = 103,
+  C_LINE = 104,
+  C_ALIAS = 105,
+  C_HIDDEN = 106
+};
+
+enum sdb_type
+{
+  T_NULL = 0,
+  T_ARG = 1,
+  T_VOID = 1,
+  T_CHAR = 2,
+  T_SHORT = 3,
+  T_INT = 4,
+  T_LONG = 5,
+  T_FLOAT = 6,
+  T_DOUBLE = 7,
+  T_STRUCT = 8,
+  T_UNION = 9,
+  T_ENUM = 10,
+  T_MOE = 11,
+  T_UCHAR = 12,
+  T_USHORT = 13,
+  T_UINT = 14,
+  T_ULONG = 15
+};
+
+enum sdb_type_class
+{
+  DT_NON = 0,
+  DT_PTR = 1,
+  DT_FCN = 2,
+  DT_ARY = 3
+};
+
+enum sdb_masks
+{
+  N_BTMASK = 017,
+  N_TMASK = 060,
+  N_TMASK1 = 0300,
+  N_TMASK2 = 0360,
+  N_BTSHFT = 4,
+  N_TSHIFT = 2
+};
+
+#endif /* GCC_GSYMS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gsyslimits.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gsyslimits.h
new file mode 100644
index 0000000..a362802
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gsyslimits.h
@@ -0,0 +1,8 @@
+/* syslimits.h stands for the system's own limits.h file.
+   If we can use it ok unmodified, then we install this text.
+   If fixincludes fixes it, then the fixed version is installed
+   instead of this text.  */
+
+#define _GCC_NEXT_LIMITS_H		/* tell gcc's limits.h to recurse */
+#include_next <limits.h>
+#undef _GCC_NEXT_LIMITS_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gtm-builtins.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gtm-builtins.def
new file mode 100644
index 0000000..6d5cfb9
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gtm-builtins.def
@@ -0,0 +1,212 @@
+DEF_TM_BUILTIN (BUILT_IN_TM_START, "_ITM_beginTransaction",
+		BT_FN_UINT32_UINT32_VAR, ATTR_TM_NOTHROW_RT_LIST)
+
+DEF_TM_BUILTIN (BUILT_IN_TM_COMMIT, "_ITM_commitTransaction",
+		BT_FN_VOID, ATTR_TM_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_COMMIT_EH, "_ITM_commitTransactionEH",
+		BT_FN_VOID_PTR, ATTR_TM_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_ABORT, "_ITM_abortTransaction",
+		BT_FN_VOID_INT, ATTR_TM_NORETURN_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_IRREVOCABLE, "_ITM_changeTransactionMode",
+		BT_FN_VOID_INT, ATTR_TM_NOTHROW_LIST)
+
+DEF_TM_BUILTIN (BUILT_IN_TM_MEMCPY, "_ITM_memcpyRtWt",
+		BT_FN_VOID_PTR_CONST_PTR_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_MEMCPY_RNWT, "_ITM_memcpyRnWt",
+		BT_FN_VOID_PTR_CONST_PTR_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_MEMCPY_RTWN, "_ITM_memcpyRtWn",
+		BT_FN_VOID_PTR_CONST_PTR_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_MEMMOVE, "_ITM_memmoveRtWt",
+		BT_FN_VOID_PTR_CONST_PTR_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_MEMSET, "_ITM_memsetW",
+	       	BT_FN_VOID_PTR_INT_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
+
+DEF_TM_BUILTIN (BUILT_IN_TM_GETTMCLONE_IRR, "_ITM_getTMCloneOrIrrevocable",
+		BT_FN_PTR_PTR, ATTR_TM_CONST_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_GETTMCLONE_SAFE, "_ITM_getTMCloneSafe",
+		BT_FN_PTR_PTR, ATTR_TM_CONST_NOTHROW_LIST)
+
+/* Memory allocation builtins.  */
+DEF_TM_BUILTIN (BUILT_IN_TM_MALLOC, "_ITM_malloc",
+		BT_FN_PTR_SIZE, ATTR_TMPURE_MALLOC_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_CALLOC, "_ITM_calloc",
+		BT_FN_PTR_SIZE_SIZE, ATTR_TMPURE_MALLOC_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_FREE, "_ITM_free",
+		BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+
+/* Logging builtins.  */
+DEF_TM_BUILTIN (BUILT_IN_TM_LOG_1, "_ITM_LU1",
+		BT_FN_VOID_VPTR, ATTR_TM_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOG_2, "_ITM_LU2",
+		BT_FN_VOID_VPTR, ATTR_TM_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOG_4, "_ITM_LU4",
+		BT_FN_VOID_VPTR, ATTR_TM_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOG_8, "_ITM_LU8",
+		BT_FN_VOID_VPTR, ATTR_TM_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOG_FLOAT, "_ITM_LF",
+		BT_FN_VOID_VPTR, ATTR_TM_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOG_DOUBLE, "_ITM_LD",
+		BT_FN_VOID_VPTR, ATTR_TM_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOG_LDOUBLE, "_ITM_LE",
+		BT_FN_VOID_VPTR, ATTR_TM_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOG, "_ITM_LB",
+		BT_FN_VOID_VPTR_SIZE, ATTR_TM_TMPURE_NOTHROW_LIST)
+
+/* These stubs should get defined in the backend if applicable.  */
+DEF_BUILTIN_STUB (BUILT_IN_TM_LOG_M64, "__builtin__ITM_LM64")
+DEF_BUILTIN_STUB (BUILT_IN_TM_LOG_M128, "__builtin__ITM_LM128")
+DEF_BUILTIN_STUB (BUILT_IN_TM_LOG_M256, "__builtin__ITM_LM256")
+
+/* Writes.
+
+   Note: The writes must follow the following order: STORE, WAR, WAW.
+   The TM optimizations depend on this order.
+
+   BUILT_IN_TM_STORE_1 must be the first builtin.
+   BUILTIN_TM_LOAD_STORE_P depends on this.  */
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_1, "_ITM_WU1",
+		BT_FN_VOID_VPTR_I1, ATTR_TM_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_WAR_1, "_ITM_WaRU1",
+		BT_FN_VOID_VPTR_I1, ATTR_TM_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_WAW_1, "_ITM_WaWU1",
+		BT_FN_VOID_VPTR_I1, ATTR_TM_NOTHROW_LIST)
+
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_2, "_ITM_WU2",
+		BT_FN_VOID_VPTR_I2, ATTR_TM_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_WAR_2, "_ITM_WaRU2",
+		BT_FN_VOID_VPTR_I2, ATTR_TM_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_WAW_2, "_ITM_WaWU2",
+		BT_FN_VOID_VPTR_I2, ATTR_TM_NOTHROW_LIST)
+
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_4, "_ITM_WU4",
+		BT_FN_VOID_VPTR_I4, ATTR_TM_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_WAR_4, "_ITM_WaRU4",
+		BT_FN_VOID_VPTR_I4, ATTR_TM_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_WAW_4, "_ITM_WaWU4",
+		BT_FN_VOID_VPTR_I4, ATTR_TM_NOTHROW_LIST)
+
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_8, "_ITM_WU8",
+		BT_FN_VOID_VPTR_I8, ATTR_TM_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_WAR_8, "_ITM_WaRU8",
+		BT_FN_VOID_VPTR_I8, ATTR_TM_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_WAW_8, "_ITM_WaWU8",
+		BT_FN_VOID_VPTR_I8, ATTR_TM_NOTHROW_LIST)
+
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_FLOAT, "_ITM_WF",
+		BT_FN_VOID_VPTR_FLOAT, ATTR_TM_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_WAR_FLOAT, "_ITM_WaRF",
+		BT_FN_VOID_VPTR_FLOAT, ATTR_TM_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_WAW_FLOAT, "_ITM_WaWF",
+		BT_FN_VOID_VPTR_FLOAT, ATTR_TM_NOTHROW_LIST)
+
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_DOUBLE, "_ITM_WD",
+		BT_FN_VOID_VPTR_DOUBLE, ATTR_TM_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_WAR_DOUBLE, "_ITM_WaRD",
+		BT_FN_VOID_VPTR_DOUBLE, ATTR_TM_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_WAW_DOUBLE, "_ITM_WaWD",
+		BT_FN_VOID_VPTR_DOUBLE, ATTR_TM_NOTHROW_LIST)
+
+/* These stubs should get defined in the backend if applicable.  */
+DEF_BUILTIN_STUB (BUILT_IN_TM_STORE_M64, "__builtin__ITM_WM64")
+DEF_BUILTIN_STUB (BUILT_IN_TM_STORE_WAR_M64, "__builtin__ITM_WaRM64")
+DEF_BUILTIN_STUB (BUILT_IN_TM_STORE_WAW_M64, "__builtin__ITM_WaWM64")
+DEF_BUILTIN_STUB (BUILT_IN_TM_STORE_M128, "__builtin__ITM_WM128")
+DEF_BUILTIN_STUB (BUILT_IN_TM_STORE_WAR_M128, "__builtin__ITM_WaRM128")
+DEF_BUILTIN_STUB (BUILT_IN_TM_STORE_WAW_M128, "__builtin__ITM_WaWM128")
+DEF_BUILTIN_STUB (BUILT_IN_TM_STORE_M256, "__builtin__ITM_WM256")
+DEF_BUILTIN_STUB (BUILT_IN_TM_STORE_WAR_M256, "__builtin__ITM_WaRM256")
+DEF_BUILTIN_STUB (BUILT_IN_TM_STORE_WAW_M256, "__builtin__ITM_WaWM256")
+
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_LDOUBLE, "_ITM_WE",
+		BT_FN_VOID_VPTR_LDOUBLE, ATTR_TM_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_WAR_LDOUBLE, "_ITM_WaRE",
+		BT_FN_VOID_VPTR_LDOUBLE, ATTR_TM_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_STORE_WAW_LDOUBLE, "_ITM_WaWE",
+		BT_FN_VOID_VPTR_LDOUBLE, ATTR_TM_NOTHROW_LIST)
+/* Note: BUILT_IN_TM_STORE_WAW_LDOUBLE must be the last TM store.
+   BUILTIN_TM_STORE_P depends on this.  */
+
+/* Reads.
+
+   Note: The reads must follow the following order: LOAD, RAR, RAW, RFW.
+   The TM optimizations depend on this order.  */
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_1, "_ITM_RU1",
+		BT_FN_I1_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAR_1, "_ITM_RaRU1",
+		BT_FN_I1_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAW_1, "_ITM_RaWU1",
+		BT_FN_I1_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RFW_1, "_ITM_RfWU1",
+		BT_FN_I1_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_2, "_ITM_RU2",
+		BT_FN_I2_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAR_2, "_ITM_RaRU2",
+		BT_FN_I2_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAW_2, "_ITM_RaWU2",
+		BT_FN_I2_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RFW_2, "_ITM_RfWU2",
+		BT_FN_I2_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_4, "_ITM_RU4",
+		BT_FN_I4_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAR_4, "_ITM_RaRU4",
+		BT_FN_I4_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAW_4, "_ITM_RaWU4",
+		BT_FN_I4_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RFW_4, "_ITM_RfWU4",
+		BT_FN_I4_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_8, "_ITM_RU8",
+		BT_FN_I8_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAR_8, "_ITM_RaRU8",
+		BT_FN_I8_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAW_8, "_ITM_RaWU8",
+		BT_FN_I8_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RFW_8, "_ITM_RfWU8",
+		BT_FN_I8_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_FLOAT, "_ITM_RF",
+		BT_FN_FLOAT_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAR_FLOAT, "_ITM_RaRF",
+		BT_FN_FLOAT_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAW_FLOAT, "_ITM_RaWF",
+		BT_FN_FLOAT_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RFW_FLOAT, "_ITM_RfWF",
+		BT_FN_FLOAT_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_DOUBLE, "_ITM_RD",
+		BT_FN_DOUBLE_CONST_DOUBLE_PTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAR_DOUBLE, "_ITM_RaRD",
+		BT_FN_DOUBLE_CONST_DOUBLE_PTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAW_DOUBLE, "_ITM_RaWD",
+		BT_FN_DOUBLE_CONST_DOUBLE_PTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RFW_DOUBLE, "_ITM_RfWD",
+		BT_FN_DOUBLE_CONST_DOUBLE_PTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+
+/* These stubs should get defined in the backend if applicable.  */
+DEF_BUILTIN_STUB (BUILT_IN_TM_LOAD_M64, "__builtin__ITM_RM64")
+DEF_BUILTIN_STUB (BUILT_IN_TM_LOAD_RAR_M64, "__builtin__ITM_RaRM64")
+DEF_BUILTIN_STUB (BUILT_IN_TM_LOAD_RAW_M64, "__builtin__ITM_RaRM64")
+DEF_BUILTIN_STUB (BUILT_IN_TM_LOAD_RFW_M64, "__builtin__ITM_RfWM64")
+DEF_BUILTIN_STUB (BUILT_IN_TM_LOAD_M128, "__builtin__ITM_RM128")
+DEF_BUILTIN_STUB (BUILT_IN_TM_LOAD_RAR_M128, "__builtin__ITM_RaRM128")
+DEF_BUILTIN_STUB (BUILT_IN_TM_LOAD_RAW_M128, "__builtin__ITM_RaRM128")
+DEF_BUILTIN_STUB (BUILT_IN_TM_LOAD_RFW_M128, "__builtin__ITM_RfWM128")
+DEF_BUILTIN_STUB (BUILT_IN_TM_LOAD_M256, "__builtin__ITM_RM256")
+DEF_BUILTIN_STUB (BUILT_IN_TM_LOAD_RAR_M256, "__builtin__ITM_RaRM256")
+DEF_BUILTIN_STUB (BUILT_IN_TM_LOAD_RAW_M256, "__builtin__ITM_RaRM256")
+DEF_BUILTIN_STUB (BUILT_IN_TM_LOAD_RFW_M256, "__builtin__ITM_RfWM256")
+
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_LDOUBLE, "_ITM_RE",
+		BT_FN_LDOUBLE_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAR_LDOUBLE, "_ITM_RaRE",
+		BT_FN_LDOUBLE_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RAW_LDOUBLE, "_ITM_RaWE",
+		BT_FN_LDOUBLE_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+DEF_TM_BUILTIN (BUILT_IN_TM_LOAD_RFW_LDOUBLE, "_ITM_RfWE",
+		BT_FN_LDOUBLE_VPTR, ATTR_TM_PURE_TMPURE_NOTHROW_LIST)
+
+/* Note: BUILT_IN_TM_LOAD_RFW_LDOUBLE must be the last TM load as well
+   as the last builtin.  BUILTIN_TM_LOAD_STORE_P and BUILTIN_TM_LOAD_P
+   depend on this.  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/gtype-desc.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gtype-desc.h
new file mode 100644
index 0000000..61ef6d4
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/gtype-desc.h
@@ -0,0 +1,3319 @@
+/* Type information for GCC.
+   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* This file is machine generated.  Do not edit.  */
+
+/* GC marker procedures.  */
+/* Macros and declarations.  */
+#define gt_ggc_m_9tree_node(X) do { \
+  if (X != NULL) gt_ggc_mx_tree_node (X);\
+  } while (0)
+#define gt_ggc_mx_tree_node gt_ggc_mx_lang_tree_node
+#define gt_ggc_m_9line_maps(X) do { \
+  if (X != NULL) gt_ggc_mx_line_maps (X);\
+  } while (0)
+extern void gt_ggc_mx_line_maps (void *);
+#define gt_ggc_m_9cpp_token(X) do { \
+  if (X != NULL) gt_ggc_mx_cpp_token (X);\
+  } while (0)
+extern void gt_ggc_mx_cpp_token (void *);
+#define gt_ggc_m_9cpp_macro(X) do { \
+  if (X != NULL) gt_ggc_mx_cpp_macro (X);\
+  } while (0)
+extern void gt_ggc_mx_cpp_macro (void *);
+#define gt_ggc_m_13string_concat(X) do { \
+  if (X != NULL) gt_ggc_mx_string_concat (X);\
+  } while (0)
+extern void gt_ggc_mx_string_concat (void *);
+#define gt_ggc_m_16string_concat_db(X) do { \
+  if (X != NULL) gt_ggc_mx_string_concat_db (X);\
+  } while (0)
+extern void gt_ggc_mx_string_concat_db (void *);
+#define gt_ggc_m_38hash_map_location_hash_string_concat__(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_map_location_hash_string_concat__ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_map_location_hash_string_concat__ (void *);
+#define gt_ggc_m_11bitmap_head(X) do { \
+  if (X != NULL) gt_ggc_mx_bitmap_head (X);\
+  } while (0)
+extern void gt_ggc_mx_bitmap_head (void *);
+#define gt_ggc_m_7rtx_def(X) do { \
+  if (X != NULL) gt_ggc_mx_rtx_def (X);\
+  } while (0)
+extern void gt_ggc_mx_rtx_def (void *);
+#define gt_ggc_m_9rtvec_def(X) do { \
+  if (X != NULL) gt_ggc_mx_rtvec_def (X);\
+  } while (0)
+extern void gt_ggc_mx_rtvec_def (void *);
+#define gt_ggc_m_6gimple(X) do { \
+  if (X != NULL) gt_ggc_mx_gimple (X);\
+  } while (0)
+extern void gt_ggc_mx_gimple (void *);
+#define gt_ggc_m_11symtab_node(X) do { \
+  if (X != NULL) gt_ggc_mx_symtab_node (X);\
+  } while (0)
+extern void gt_ggc_mx_symtab_node (void *);
+#define gt_ggc_m_7section(X) do { \
+  if (X != NULL) gt_ggc_mx_section (X);\
+  } while (0)
+extern void gt_ggc_mx_section (void *);
+#define gt_ggc_m_16cl_target_option(X) do { \
+  if (X != NULL) gt_ggc_mx_cl_target_option (X);\
+  } while (0)
+extern void gt_ggc_mx_cl_target_option (void *);
+#define gt_ggc_m_15cl_optimization(X) do { \
+  if (X != NULL) gt_ggc_mx_cl_optimization (X);\
+  } while (0)
+extern void gt_ggc_mx_cl_optimization (void *);
+#define gt_ggc_m_8edge_def(X) do { \
+  if (X != NULL) gt_ggc_mx_edge_def (X);\
+  } while (0)
+extern void gt_ggc_mx_edge_def (void *);
+#define gt_ggc_m_15basic_block_def(X) do { \
+  if (X != NULL) gt_ggc_mx_basic_block_def (X);\
+  } while (0)
+extern void gt_ggc_mx_basic_block_def (void *);
+#define gt_ggc_m_16machine_function(X) do { \
+  if (X != NULL) gt_ggc_mx_machine_function (X);\
+  } while (0)
+extern void gt_ggc_mx_machine_function (void *);
+#define gt_ggc_m_14bitmap_element(X) do { \
+  if (X != NULL) gt_ggc_mx_bitmap_element (X);\
+  } while (0)
+extern void gt_ggc_mx_bitmap_element (void *);
+#define gt_ggc_m_34generic_wide_int_wide_int_storage_(X) do { \
+  if (X != NULL) gt_ggc_mx_generic_wide_int_wide_int_storage_ (X);\
+  } while (0)
+extern void gt_ggc_mx_generic_wide_int_wide_int_storage_ (void *);
+#define gt_ggc_m_13coverage_data(X) do { \
+  if (X != NULL) gt_ggc_mx_coverage_data (X);\
+  } while (0)
+extern void gt_ggc_mx_coverage_data (void *);
+#define gt_ggc_m_9mem_attrs(X) do { \
+  if (X != NULL) gt_ggc_mx_mem_attrs (X);\
+  } while (0)
+extern void gt_ggc_mx_mem_attrs (void *);
+#define gt_ggc_m_9reg_attrs(X) do { \
+  if (X != NULL) gt_ggc_mx_reg_attrs (X);\
+  } while (0)
+extern void gt_ggc_mx_reg_attrs (void *);
+#define gt_ggc_m_12object_block(X) do { \
+  if (X != NULL) gt_ggc_mx_object_block (X);\
+  } while (0)
+extern void gt_ggc_mx_object_block (void *);
+#define gt_ggc_m_14vec_rtx_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_rtx_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_rtx_va_gc_ (void *);
+#define gt_ggc_m_10real_value(X) do { \
+  if (X != NULL) gt_ggc_mx_real_value (X);\
+  } while (0)
+extern void gt_ggc_mx_real_value (void *);
+#define gt_ggc_m_11fixed_value(X) do { \
+  if (X != NULL) gt_ggc_mx_fixed_value (X);\
+  } while (0)
+extern void gt_ggc_mx_fixed_value (void *);
+#define gt_ggc_m_23constant_descriptor_rtx(X) do { \
+  if (X != NULL) gt_ggc_mx_constant_descriptor_rtx (X);\
+  } while (0)
+extern void gt_ggc_mx_constant_descriptor_rtx (void *);
+#define gt_ggc_m_8function(X) do { \
+  if (X != NULL) gt_ggc_mx_function (X);\
+  } while (0)
+extern void gt_ggc_mx_function (void *);
+#define gt_ggc_m_10target_rtl(X) do { \
+  if (X != NULL) gt_ggc_mx_target_rtl (X);\
+  } while (0)
+extern void gt_ggc_mx_target_rtl (void *);
+#define gt_ggc_m_15cgraph_rtl_info(X) do { \
+  if (X != NULL) gt_ggc_mx_cgraph_rtl_info (X);\
+  } while (0)
+extern void gt_ggc_mx_cgraph_rtl_info (void *);
+#define gt_ggc_m_37hash_map_tree_tree_tree_cache_traits_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_map_tree_tree_tree_cache_traits_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_map_tree_tree_tree_cache_traits_ (void *);
+#define gt_ggc_m_12ptr_info_def(X) do { \
+  if (X != NULL) gt_ggc_mx_ptr_info_def (X);\
+  } while (0)
+extern void gt_ggc_mx_ptr_info_def (void *);
+#define gt_ggc_m_14range_info_def(X) do { \
+  if (X != NULL) gt_ggc_mx_range_info_def (X);\
+  } while (0)
+extern void gt_ggc_mx_range_info_def (void *);
+#define gt_ggc_m_10die_struct(X) do { \
+  if (X != NULL) gt_ggc_mx_die_struct (X);\
+  } while (0)
+extern void gt_ggc_mx_die_struct (void *);
+#define gt_ggc_m_26vec_constructor_elt_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_constructor_elt_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_constructor_elt_va_gc_ (void *);
+#define gt_ggc_m_15vec_tree_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_tree_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_tree_va_gc_ (void *);
+#define gt_ggc_m_9lang_type(X) do { \
+  if (X != NULL) gt_ggc_mx_lang_type (X);\
+  } while (0)
+extern void gt_ggc_mx_lang_type (void *);
+#define gt_ggc_m_9lang_decl(X) do { \
+  if (X != NULL) gt_ggc_mx_lang_decl (X);\
+  } while (0)
+extern void gt_ggc_mx_lang_decl (void *);
+#define gt_ggc_m_24tree_statement_list_node(X) do { \
+  if (X != NULL) gt_ggc_mx_tree_statement_list_node (X);\
+  } while (0)
+extern void gt_ggc_mx_tree_statement_list_node (void *);
+#define gt_ggc_m_14target_globals(X) do { \
+  if (X != NULL) gt_ggc_mx_target_globals (X);\
+  } while (0)
+extern void gt_ggc_mx_target_globals (void *);
+#define gt_ggc_m_14lang_tree_node(X) do { \
+  if (X != NULL) gt_ggc_mx_lang_tree_node (X);\
+  } while (0)
+extern void gt_ggc_mx_lang_tree_node (void *);
+#define gt_ggc_m_8tree_map(X) do { \
+  if (X != NULL) gt_ggc_mx_tree_map (X);\
+  } while (0)
+extern void gt_ggc_mx_tree_map (void *);
+#define gt_ggc_m_13tree_decl_map(X) do { \
+  if (X != NULL) gt_ggc_mx_tree_decl_map (X);\
+  } while (0)
+extern void gt_ggc_mx_tree_decl_map (void *);
+#define gt_ggc_m_12tree_int_map(X) do { \
+  if (X != NULL) gt_ggc_mx_tree_int_map (X);\
+  } while (0)
+extern void gt_ggc_mx_tree_int_map (void *);
+#define gt_ggc_m_12tree_vec_map(X) do { \
+  if (X != NULL) gt_ggc_mx_tree_vec_map (X);\
+  } while (0)
+extern void gt_ggc_mx_tree_vec_map (void *);
+#define gt_ggc_m_21vec_alias_pair_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_alias_pair_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_alias_pair_va_gc_ (void *);
+#define gt_ggc_m_13libfunc_entry(X) do { \
+  if (X != NULL) gt_ggc_mx_libfunc_entry (X);\
+  } while (0)
+extern void gt_ggc_mx_libfunc_entry (void *);
+#define gt_ggc_m_26hash_table_libfunc_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_libfunc_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_libfunc_hasher_ (void *);
+#define gt_ggc_m_15target_libfuncs(X) do { \
+  if (X != NULL) gt_ggc_mx_target_libfuncs (X);\
+  } while (0)
+extern void gt_ggc_mx_target_libfuncs (void *);
+#define gt_ggc_m_14sequence_stack(X) do { \
+  if (X != NULL) gt_ggc_mx_sequence_stack (X);\
+  } while (0)
+extern void gt_ggc_mx_sequence_stack (void *);
+#define gt_ggc_m_20vec_rtx_insn__va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_rtx_insn__va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_rtx_insn__va_gc_ (void *);
+#define gt_ggc_m_18call_site_record_d(X) do { \
+  if (X != NULL) gt_ggc_mx_call_site_record_d (X);\
+  } while (0)
+extern void gt_ggc_mx_call_site_record_d (void *);
+#define gt_ggc_m_16vec_uchar_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_uchar_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_uchar_va_gc_ (void *);
+#define gt_ggc_m_27vec_call_site_record_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_call_site_record_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_call_site_record_va_gc_ (void *);
+#define gt_ggc_m_9gimple_df(X) do { \
+  if (X != NULL) gt_ggc_mx_gimple_df (X);\
+  } while (0)
+extern void gt_ggc_mx_gimple_df (void *);
+#define gt_ggc_m_11dw_fde_node(X) do { \
+  if (X != NULL) gt_ggc_mx_dw_fde_node (X);\
+  } while (0)
+extern void gt_ggc_mx_dw_fde_node (void *);
+#define gt_ggc_m_17rtx_constant_pool(X) do { \
+  if (X != NULL) gt_ggc_mx_rtx_constant_pool (X);\
+  } while (0)
+extern void gt_ggc_mx_rtx_constant_pool (void *);
+#define gt_ggc_m_11frame_space(X) do { \
+  if (X != NULL) gt_ggc_mx_frame_space (X);\
+  } while (0)
+extern void gt_ggc_mx_frame_space (void *);
+#define gt_ggc_m_11stack_usage(X) do { \
+  if (X != NULL) gt_ggc_mx_stack_usage (X);\
+  } while (0)
+extern void gt_ggc_mx_stack_usage (void *);
+#define gt_ggc_m_9eh_status(X) do { \
+  if (X != NULL) gt_ggc_mx_eh_status (X);\
+  } while (0)
+extern void gt_ggc_mx_eh_status (void *);
+#define gt_ggc_m_18control_flow_graph(X) do { \
+  if (X != NULL) gt_ggc_mx_control_flow_graph (X);\
+  } while (0)
+extern void gt_ggc_mx_control_flow_graph (void *);
+#define gt_ggc_m_5loops(X) do { \
+  if (X != NULL) gt_ggc_mx_loops (X);\
+  } while (0)
+extern void gt_ggc_mx_loops (void *);
+#define gt_ggc_m_17language_function(X) do { \
+  if (X != NULL) gt_ggc_mx_language_function (X);\
+  } while (0)
+extern void gt_ggc_mx_language_function (void *);
+#define gt_ggc_m_14hash_set_tree_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_set_tree_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_set_tree_ (void *);
+#define gt_ggc_m_24types_used_by_vars_entry(X) do { \
+  if (X != NULL) gt_ggc_mx_types_used_by_vars_entry (X);\
+  } while (0)
+extern void gt_ggc_mx_types_used_by_vars_entry (void *);
+#define gt_ggc_m_28hash_table_used_type_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_used_type_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_used_type_hasher_ (void *);
+#define gt_ggc_m_13nb_iter_bound(X) do { \
+  if (X != NULL) gt_ggc_mx_nb_iter_bound (X);\
+  } while (0)
+extern void gt_ggc_mx_nb_iter_bound (void *);
+#define gt_ggc_m_9loop_exit(X) do { \
+  if (X != NULL) gt_ggc_mx_loop_exit (X);\
+  } while (0)
+extern void gt_ggc_mx_loop_exit (void *);
+#define gt_ggc_m_4loop(X) do { \
+  if (X != NULL) gt_ggc_mx_loop (X);\
+  } while (0)
+extern void gt_ggc_mx_loop (void *);
+#define gt_ggc_m_10control_iv(X) do { \
+  if (X != NULL) gt_ggc_mx_control_iv (X);\
+  } while (0)
+extern void gt_ggc_mx_control_iv (void *);
+#define gt_ggc_m_17vec_loop_p_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_loop_p_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_loop_p_va_gc_ (void *);
+#define gt_ggc_m_10niter_desc(X) do { \
+  if (X != NULL) gt_ggc_mx_niter_desc (X);\
+  } while (0)
+extern void gt_ggc_mx_niter_desc (void *);
+#define gt_ggc_m_28hash_table_loop_exit_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_loop_exit_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_loop_exit_hasher_ (void *);
+#define gt_ggc_m_22vec_basic_block_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_basic_block_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_basic_block_va_gc_ (void *);
+#define gt_ggc_m_11rtl_bb_info(X) do { \
+  if (X != NULL) gt_ggc_mx_rtl_bb_info (X);\
+  } while (0)
+extern void gt_ggc_mx_rtl_bb_info (void *);
+#define gt_ggc_m_15vec_edge_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_edge_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_edge_va_gc_ (void *);
+#define gt_ggc_m_20vec_ipa_ref_t_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_ipa_ref_t_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_ipa_ref_t_va_gc_ (void *);
+#define gt_ggc_m_18section_hash_entry(X) do { \
+  if (X != NULL) gt_ggc_mx_section_hash_entry (X);\
+  } while (0)
+extern void gt_ggc_mx_section_hash_entry (void *);
+#define gt_ggc_m_18lto_file_decl_data(X) do { \
+  if (X != NULL) gt_ggc_mx_lto_file_decl_data (X);\
+  } while (0)
+extern void gt_ggc_mx_lto_file_decl_data (void *);
+#define gt_ggc_m_15ipa_replace_map(X) do { \
+  if (X != NULL) gt_ggc_mx_ipa_replace_map (X);\
+  } while (0)
+extern void gt_ggc_mx_ipa_replace_map (void *);
+#define gt_ggc_m_27vec_ipa_replace_map__va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_ipa_replace_map__va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_ipa_replace_map__va_gc_ (void *);
+#define gt_ggc_m_17cgraph_simd_clone(X) do { \
+  if (X != NULL) gt_ggc_mx_cgraph_simd_clone (X);\
+  } while (0)
+extern void gt_ggc_mx_cgraph_simd_clone (void *);
+#define gt_ggc_m_28cgraph_function_version_info(X) do { \
+  if (X != NULL) gt_ggc_mx_cgraph_function_version_info (X);\
+  } while (0)
+extern void gt_ggc_mx_cgraph_function_version_info (void *);
+#define gt_ggc_m_11cgraph_edge(X) do { \
+  if (X != NULL) gt_ggc_mx_cgraph_edge (X);\
+  } while (0)
+extern void gt_ggc_mx_cgraph_edge (void *);
+#define gt_ggc_m_30hash_table_cgraph_edge_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_cgraph_edge_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_cgraph_edge_hasher_ (void *);
+#define gt_ggc_m_25cgraph_indirect_call_info(X) do { \
+  if (X != NULL) gt_ggc_mx_cgraph_indirect_call_info (X);\
+  } while (0)
+extern void gt_ggc_mx_cgraph_indirect_call_info (void *);
+#define gt_ggc_m_8asm_node(X) do { \
+  if (X != NULL) gt_ggc_mx_asm_node (X);\
+  } while (0)
+extern void gt_ggc_mx_asm_node (void *);
+#define gt_ggc_m_12symbol_table(X) do { \
+  if (X != NULL) gt_ggc_mx_symbol_table (X);\
+  } while (0)
+extern void gt_ggc_mx_symbol_table (void *);
+#define gt_ggc_m_31hash_table_section_name_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_section_name_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_section_name_hasher_ (void *);
+#define gt_ggc_m_26hash_table_asmname_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_asmname_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_asmname_hasher_ (void *);
+#define gt_ggc_m_42hash_map_symtab_node__symbol_priority_map_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_map_symtab_node__symbol_priority_map_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_map_symtab_node__symbol_priority_map_ (void *);
+#define gt_ggc_m_24constant_descriptor_tree(X) do { \
+  if (X != NULL) gt_ggc_mx_constant_descriptor_tree (X);\
+  } while (0)
+extern void gt_ggc_mx_constant_descriptor_tree (void *);
+#define gt_ggc_m_28hash_map_alias_set_hash_int_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_map_alias_set_hash_int_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_map_alias_set_hash_int_ (void *);
+#define gt_ggc_m_15alias_set_entry(X) do { \
+  if (X != NULL) gt_ggc_mx_alias_set_entry (X);\
+  } while (0)
+extern void gt_ggc_mx_alias_set_entry (void *);
+#define gt_ggc_m_27vec_alias_set_entry__va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_alias_set_entry__va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_alias_set_entry__va_gc_ (void *);
+#define gt_ggc_m_35hash_table_function_version_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_function_version_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_function_version_hasher_ (void *);
+#define gt_ggc_m_17lto_in_decl_state(X) do { \
+  if (X != NULL) gt_ggc_mx_lto_in_decl_state (X);\
+  } while (0)
+extern void gt_ggc_mx_lto_in_decl_state (void *);
+#define gt_ggc_m_35hash_table_ipa_bit_ggc_hash_traits_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_ipa_bit_ggc_hash_traits_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_ipa_bit_ggc_hash_traits_ (void *);
+#define gt_ggc_m_34hash_table_ipa_vr_ggc_hash_traits_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_ipa_vr_ggc_hash_traits_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_ipa_vr_ggc_hash_traits_ (void *);
+#define gt_ggc_m_15ipa_node_params(X) do { \
+  if (X != NULL) gt_ggc_mx_ipa_node_params (X);\
+  } while (0)
+extern void gt_ggc_mx_ipa_node_params (void *);
+#define gt_ggc_m_13ipa_edge_args(X) do { \
+  if (X != NULL) gt_ggc_mx_ipa_edge_args (X);\
+  } while (0)
+extern void gt_ggc_mx_ipa_edge_args (void *);
+#define gt_ggc_m_25ipa_agg_replacement_value(X) do { \
+  if (X != NULL) gt_ggc_mx_ipa_agg_replacement_value (X);\
+  } while (0)
+extern void gt_ggc_mx_ipa_agg_replacement_value (void *);
+#define gt_ggc_m_14ipa_fn_summary(X) do { \
+  if (X != NULL) gt_ggc_mx_ipa_fn_summary (X);\
+  } while (0)
+extern void gt_ggc_mx_ipa_fn_summary (void *);
+#define gt_ggc_m_10odr_type_d(X) do { \
+  if (X != NULL) gt_ggc_mx_odr_type_d (X);\
+  } while (0)
+extern void gt_ggc_mx_odr_type_d (void *);
+#define gt_ggc_m_8typeinfo(X) do { \
+  if (X != NULL) gt_ggc_mx_typeinfo (X);\
+  } while (0)
+extern void gt_ggc_mx_typeinfo (void *);
+#define gt_ggc_m_11dw_cfi_node(X) do { \
+  if (X != NULL) gt_ggc_mx_dw_cfi_node (X);\
+  } while (0)
+extern void gt_ggc_mx_dw_cfi_node (void *);
+#define gt_ggc_m_17dw_loc_descr_node(X) do { \
+  if (X != NULL) gt_ggc_mx_dw_loc_descr_node (X);\
+  } while (0)
+extern void gt_ggc_mx_dw_loc_descr_node (void *);
+#define gt_ggc_m_18dw_loc_list_struct(X) do { \
+  if (X != NULL) gt_ggc_mx_dw_loc_list_struct (X);\
+  } while (0)
+extern void gt_ggc_mx_dw_loc_list_struct (void *);
+#define gt_ggc_m_18dw_discr_list_node(X) do { \
+  if (X != NULL) gt_ggc_mx_dw_discr_list_node (X);\
+  } while (0)
+extern void gt_ggc_mx_dw_discr_list_node (void *);
+#define gt_ggc_m_15dw_cfa_location(X) do { \
+  if (X != NULL) gt_ggc_mx_dw_cfa_location (X);\
+  } while (0)
+extern void gt_ggc_mx_dw_cfa_location (void *);
+#define gt_ggc_m_21vec_dw_cfi_ref_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_dw_cfi_ref_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_dw_cfi_ref_va_gc_ (void *);
+#define gt_ggc_m_16addr_table_entry(X) do { \
+  if (X != NULL) gt_ggc_mx_addr_table_entry (X);\
+  } while (0)
+extern void gt_ggc_mx_addr_table_entry (void *);
+#define gt_ggc_m_20indirect_string_node(X) do { \
+  if (X != NULL) gt_ggc_mx_indirect_string_node (X);\
+  } while (0)
+extern void gt_ggc_mx_indirect_string_node (void *);
+#define gt_ggc_m_15dwarf_file_data(X) do { \
+  if (X != NULL) gt_ggc_mx_dwarf_file_data (X);\
+  } while (0)
+extern void gt_ggc_mx_dwarf_file_data (void *);
+#define gt_ggc_m_20hash_map_char__tree_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_map_char__tree_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_map_char__tree_ (void *);
+#define gt_ggc_m_10dw_cfi_row(X) do { \
+  if (X != NULL) gt_ggc_mx_dw_cfi_row (X);\
+  } while (0)
+extern void gt_ggc_mx_dw_cfi_row (void *);
+#define gt_ggc_m_17reg_saved_in_data(X) do { \
+  if (X != NULL) gt_ggc_mx_reg_saved_in_data (X);\
+  } while (0)
+extern void gt_ggc_mx_reg_saved_in_data (void *);
+#define gt_ggc_m_21vec_dw_fde_ref_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_dw_fde_ref_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_dw_fde_ref_va_gc_ (void *);
+#define gt_ggc_m_34hash_table_indirect_string_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_indirect_string_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_indirect_string_hasher_ (void *);
+#define gt_ggc_m_16comdat_type_node(X) do { \
+  if (X != NULL) gt_ggc_mx_comdat_type_node (X);\
+  } while (0)
+extern void gt_ggc_mx_comdat_type_node (void *);
+#define gt_ggc_m_29vec_dw_line_info_entry_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_dw_line_info_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_dw_line_info_entry_va_gc_ (void *);
+#define gt_ggc_m_18dw_line_info_table(X) do { \
+  if (X != NULL) gt_ggc_mx_dw_line_info_table (X);\
+  } while (0)
+extern void gt_ggc_mx_dw_line_info_table (void *);
+#define gt_ggc_m_23vec_dw_attr_node_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_dw_attr_node_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_dw_attr_node_va_gc_ (void *);
+#define gt_ggc_m_16limbo_die_struct(X) do { \
+  if (X != NULL) gt_ggc_mx_limbo_die_struct (X);\
+  } while (0)
+extern void gt_ggc_mx_limbo_die_struct (void *);
+#define gt_ggc_m_29hash_table_dwarf_file_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_dwarf_file_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_dwarf_file_hasher_ (void *);
+#define gt_ggc_m_27hash_table_decl_die_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_decl_die_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_decl_die_hasher_ (void *);
+#define gt_ggc_m_21vec_dw_die_ref_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_dw_die_ref_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_dw_die_ref_va_gc_ (void *);
+#define gt_ggc_m_21variable_value_struct(X) do { \
+  if (X != NULL) gt_ggc_mx_variable_value_struct (X);\
+  } while (0)
+extern void gt_ggc_mx_variable_value_struct (void *);
+#define gt_ggc_m_33hash_table_variable_value_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_variable_value_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_variable_value_hasher_ (void *);
+#define gt_ggc_m_28hash_table_block_die_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_block_die_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_block_die_hasher_ (void *);
+#define gt_ggc_m_12var_loc_node(X) do { \
+  if (X != NULL) gt_ggc_mx_var_loc_node (X);\
+  } while (0)
+extern void gt_ggc_mx_var_loc_node (void *);
+#define gt_ggc_m_16var_loc_list_def(X) do { \
+  if (X != NULL) gt_ggc_mx_var_loc_list_def (X);\
+  } while (0)
+extern void gt_ggc_mx_var_loc_list_def (void *);
+#define gt_ggc_m_17call_arg_loc_node(X) do { \
+  if (X != NULL) gt_ggc_mx_call_arg_loc_node (X);\
+  } while (0)
+extern void gt_ggc_mx_call_arg_loc_node (void *);
+#define gt_ggc_m_27hash_table_decl_loc_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_decl_loc_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_decl_loc_hasher_ (void *);
+#define gt_ggc_m_22cached_dw_loc_list_def(X) do { \
+  if (X != NULL) gt_ggc_mx_cached_dw_loc_list_def (X);\
+  } while (0)
+extern void gt_ggc_mx_cached_dw_loc_list_def (void *);
+#define gt_ggc_m_30hash_table_dw_loc_list_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_dw_loc_list_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_dw_loc_list_hasher_ (void *);
+#define gt_ggc_m_30vec_dw_line_info_table__va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_dw_line_info_table__va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_dw_line_info_table__va_gc_ (void *);
+#define gt_ggc_m_24vec_pubname_entry_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_pubname_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_pubname_entry_va_gc_ (void *);
+#define gt_ggc_m_24vec_macinfo_entry_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_macinfo_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_macinfo_entry_va_gc_ (void *);
+#define gt_ggc_m_20vec_dw_ranges_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_dw_ranges_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_dw_ranges_va_gc_ (void *);
+#define gt_ggc_m_29vec_dw_ranges_by_label_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_dw_ranges_by_label_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_dw_ranges_by_label_va_gc_ (void *);
+#define gt_ggc_m_24vec_die_arg_entry_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_die_arg_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_die_arg_entry_va_gc_ (void *);
+#define gt_ggc_m_23hash_table_addr_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_addr_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_addr_hasher_ (void *);
+#define gt_ggc_m_27hash_map_tree_sym_off_pair_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_map_tree_sym_off_pair_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_map_tree_sym_off_pair_ (void *);
+#define gt_ggc_m_17inline_entry_data(X) do { \
+  if (X != NULL) gt_ggc_mx_inline_entry_data (X);\
+  } while (0)
+extern void gt_ggc_mx_inline_entry_data (void *);
+#define gt_ggc_m_36hash_table_inline_entry_data_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_inline_entry_data_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_inline_entry_data_hasher_ (void *);
+#define gt_ggc_m_9temp_slot(X) do { \
+  if (X != NULL) gt_ggc_mx_temp_slot (X);\
+  } while (0)
+extern void gt_ggc_mx_temp_slot (void *);
+#define gt_ggc_m_20initial_value_struct(X) do { \
+  if (X != NULL) gt_ggc_mx_initial_value_struct (X);\
+  } while (0)
+extern void gt_ggc_mx_initial_value_struct (void *);
+#define gt_ggc_m_22vec_temp_slot_p_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_temp_slot_p_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_temp_slot_p_va_gc_ (void *);
+#define gt_ggc_m_28hash_table_const_int_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_const_int_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_const_int_hasher_ (void *);
+#define gt_ggc_m_33hash_table_const_wide_int_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_const_wide_int_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_const_wide_int_hasher_ (void *);
+#define gt_ggc_m_33hash_table_const_poly_int_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_const_poly_int_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_const_poly_int_hasher_ (void *);
+#define gt_ggc_m_27hash_table_reg_attr_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_reg_attr_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_reg_attr_hasher_ (void *);
+#define gt_ggc_m_31hash_table_const_double_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_const_double_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_const_double_hasher_ (void *);
+#define gt_ggc_m_30hash_table_const_fixed_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_const_fixed_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_const_fixed_hasher_ (void *);
+#define gt_ggc_m_11eh_region_d(X) do { \
+  if (X != NULL) gt_ggc_mx_eh_region_d (X);\
+  } while (0)
+extern void gt_ggc_mx_eh_region_d (void *);
+#define gt_ggc_m_16eh_landing_pad_d(X) do { \
+  if (X != NULL) gt_ggc_mx_eh_landing_pad_d (X);\
+  } while (0)
+extern void gt_ggc_mx_eh_landing_pad_d (void *);
+#define gt_ggc_m_10eh_catch_d(X) do { \
+  if (X != NULL) gt_ggc_mx_eh_catch_d (X);\
+  } while (0)
+extern void gt_ggc_mx_eh_catch_d (void *);
+#define gt_ggc_m_20vec_eh_region_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_eh_region_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_eh_region_va_gc_ (void *);
+#define gt_ggc_m_25vec_eh_landing_pad_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_eh_landing_pad_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_eh_landing_pad_va_gc_ (void *);
+#define gt_ggc_m_21hash_map_gimple__int_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_map_gimple__int_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_map_gimple__int_ (void *);
+#define gt_ggc_m_29hash_table_insn_cache_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_insn_cache_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_insn_cache_hasher_ (void *);
+#define gt_ggc_m_23temp_slot_address_entry(X) do { \
+  if (X != NULL) gt_ggc_mx_temp_slot_address_entry (X);\
+  } while (0)
+extern void gt_ggc_mx_temp_slot_address_entry (void *);
+#define gt_ggc_m_31hash_table_temp_address_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_temp_address_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_temp_address_hasher_ (void *);
+#define gt_ggc_m_24hash_map_tree_hash_tree_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_map_tree_hash_tree_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_map_tree_hash_tree_ (void *);
+#define gt_ggc_m_11test_struct(X) do { \
+  if (X != NULL) gt_ggc_mx_test_struct (X);\
+  } while (0)
+extern void gt_ggc_mx_test_struct (void *);
+#define gt_ggc_m_14test_of_length(X) do { \
+  if (X != NULL) gt_ggc_mx_test_of_length (X);\
+  } while (0)
+extern void gt_ggc_mx_test_of_length (void *);
+#define gt_ggc_m_10test_other(X) do { \
+  if (X != NULL) gt_ggc_mx_test_other (X);\
+  } while (0)
+extern void gt_ggc_mx_test_other (void *);
+#define gt_ggc_m_13test_of_union(X) do { \
+  if (X != NULL) gt_ggc_mx_test_of_union (X);\
+  } while (0)
+extern void gt_ggc_mx_test_of_union (void *);
+#define gt_ggc_m_12example_base(X) do { \
+  if (X != NULL) gt_ggc_mx_example_base (X);\
+  } while (0)
+extern void gt_ggc_mx_example_base (void *);
+#define gt_ggc_m_9test_node(X) do { \
+  if (X != NULL) gt_ggc_mx_test_node (X);\
+  } while (0)
+extern void gt_ggc_mx_test_node (void *);
+#define gt_ggc_m_11user_struct(X) do { \
+  if (X != NULL) gt_ggc_mx_user_struct (X);\
+  } while (0)
+extern void gt_ggc_mx_user_struct (void *);
+#define gt_ggc_m_31hash_table_libfunc_decl_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_libfunc_decl_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_libfunc_decl_hasher_ (void *);
+#define gt_ggc_m_16string_pool_data(X) do { \
+  if (X != NULL) gt_ggc_mx_string_pool_data (X);\
+  } while (0)
+extern void gt_ggc_mx_string_pool_data (void *);
+#define gt_ggc_m_9type_hash(X) do { \
+  if (X != NULL) gt_ggc_mx_type_hash (X);\
+  } while (0)
+extern void gt_ggc_mx_type_hash (void *);
+#define gt_ggc_m_29hash_table_type_cache_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_type_cache_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_type_cache_hasher_ (void *);
+#define gt_ggc_m_26hash_table_int_cst_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_int_cst_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_int_cst_hasher_ (void *);
+#define gt_ggc_m_31hash_table_poly_int_cst_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_poly_int_cst_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_poly_int_cst_hasher_ (void *);
+#define gt_ggc_m_28hash_table_cl_option_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_cl_option_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_cl_option_hasher_ (void *);
+#define gt_ggc_m_38hash_table_tree_decl_map_cache_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_tree_decl_map_cache_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_tree_decl_map_cache_hasher_ (void *);
+#define gt_ggc_m_37hash_table_tree_vec_map_cache_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_tree_vec_map_cache_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_tree_vec_map_cache_hasher_ (void *);
+#define gt_ggc_m_26hash_table_section_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_section_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_section_hasher_ (void *);
+#define gt_ggc_m_31hash_table_object_block_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_object_block_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_object_block_hasher_ (void *);
+#define gt_ggc_m_34hash_table_tree_descriptor_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_tree_descriptor_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_tree_descriptor_hasher_ (void *);
+#define gt_ggc_m_33hash_table_const_rtx_desc_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_const_rtx_desc_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_const_rtx_desc_hasher_ (void *);
+#define gt_ggc_m_27hash_table_tm_clone_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_tm_clone_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_tm_clone_hasher_ (void *);
+#define gt_ggc_m_15tm_restart_node(X) do { \
+  if (X != NULL) gt_ggc_mx_tm_restart_node (X);\
+  } while (0)
+extern void gt_ggc_mx_tm_restart_node (void *);
+#define gt_ggc_m_19hash_map_tree_tree_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_map_tree_tree_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_map_tree_tree_ (void *);
+#define gt_ggc_m_27hash_table_ssa_name_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_ssa_name_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_ssa_name_hasher_ (void *);
+#define gt_ggc_m_29hash_table_tm_restart_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_tm_restart_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_tm_restart_hasher_ (void *);
+#define gt_ggc_m_28vec_mem_addr_template_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_mem_addr_template_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_mem_addr_template_va_gc_ (void *);
+#define gt_ggc_m_13scev_info_str(X) do { \
+  if (X != NULL) gt_ggc_mx_scev_info_str (X);\
+  } while (0)
+extern void gt_ggc_mx_scev_info_str (void *);
+#define gt_ggc_m_28hash_table_scev_info_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_scev_info_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_scev_info_hasher_ (void *);
+#define gt_ggc_m_20ssa_operand_memory_d(X) do { \
+  if (X != NULL) gt_ggc_mx_ssa_operand_memory_d (X);\
+  } while (0)
+extern void gt_ggc_mx_ssa_operand_memory_d (void *);
+#define gt_ggc_m_28grid_launch_attributes_trees(X) do { \
+  if (X != NULL) gt_ggc_mx_grid_launch_attributes_trees (X);\
+  } while (0)
+extern void gt_ggc_mx_grid_launch_attributes_trees (void *);
+#define gt_ggc_m_24hash_map_char__unsigned_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_map_char__unsigned_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_map_char__unsigned_ (void *);
+#define gt_ggc_m_18vec_gimple__va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_gimple__va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_gimple__va_gc_ (void *);
+#define gt_ggc_m_16value_range_base(X) do { \
+  if (X != NULL) gt_ggc_mx_value_range_base (X);\
+  } while (0)
+extern void gt_ggc_mx_value_range_base (void *);
+#define gt_ggc_m_26vec_ipa_agg_jf_item_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_ipa_agg_jf_item_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_ipa_agg_jf_item_va_gc_ (void *);
+#define gt_ggc_m_8ipa_bits(X) do { \
+  if (X != NULL) gt_ggc_mx_ipa_bits (X);\
+  } while (0)
+extern void gt_ggc_mx_ipa_bits (void *);
+#define gt_ggc_m_31vec_ipa_param_descriptor_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_ipa_param_descriptor_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_ipa_param_descriptor_va_gc_ (void *);
+#define gt_ggc_m_20vec_ipa_bits__va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_ipa_bits__va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_ipa_bits__va_gc_ (void *);
+#define gt_ggc_m_17vec_ipa_vr_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_ipa_vr_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_ipa_vr_va_gc_ (void *);
+#define gt_ggc_m_19ipcp_transformation(X) do { \
+  if (X != NULL) gt_ggc_mx_ipcp_transformation (X);\
+  } while (0)
+extern void gt_ggc_mx_ipcp_transformation (void *);
+#define gt_ggc_m_24vec_ipa_jump_func_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_ipa_jump_func_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_ipa_jump_func_va_gc_ (void *);
+#define gt_ggc_m_39vec_ipa_polymorphic_call_context_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_ipa_polymorphic_call_context_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_ipa_polymorphic_call_context_va_gc_ (void *);
+#define gt_ggc_m_17ipa_node_params_t(X) do { \
+  if (X != NULL) gt_ggc_mx_ipa_node_params_t (X);\
+  } while (0)
+extern void gt_ggc_mx_ipa_node_params_t (void *);
+#define gt_ggc_m_19ipa_edge_args_sum_t(X) do { \
+  if (X != NULL) gt_ggc_mx_ipa_edge_args_sum_t (X);\
+  } while (0)
+extern void gt_ggc_mx_ipa_edge_args_sum_t (void *);
+#define gt_ggc_m_38function_summary_ipcp_transformation__(X) do { \
+  if (X != NULL) gt_ggc_mx_function_summary_ipcp_transformation__ (X);\
+  } while (0)
+extern void gt_ggc_mx_function_summary_ipcp_transformation__ (void *);
+#define gt_ggc_m_29hash_table_tm_wrapper_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_tm_wrapper_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_tm_wrapper_hasher_ (void *);
+#define gt_ggc_m_29hash_table_decl_state_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_decl_state_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_decl_state_hasher_ (void *);
+#define gt_ggc_m_20vec_condition_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_condition_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_condition_va_gc_ (void *);
+#define gt_ggc_m_26vec_size_time_entry_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_size_time_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_size_time_entry_va_gc_ (void *);
+#define gt_ggc_m_44fast_function_summary_ipa_fn_summary__va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_fast_function_summary_ipa_fn_summary__va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_fast_function_summary_ipa_fn_summary__va_gc_ (void *);
+#define gt_ggc_m_13tree_type_map(X) do { \
+  if (X != NULL) gt_ggc_mx_tree_type_map (X);\
+  } while (0)
+extern void gt_ggc_mx_tree_type_map (void *);
+#define gt_ggc_m_38hash_table_tree_type_map_cache_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_tree_type_map_cache_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_tree_type_map_cache_hasher_ (void *);
+#define gt_ggc_m_19vec_odr_type_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_odr_type_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_odr_type_va_gc_ (void *);
+#define gt_ggc_m_38vec_hsa_decl_kernel_map_element_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_hsa_decl_kernel_map_element_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_hsa_decl_kernel_map_element_va_gc_ (void *);
+#define gt_ggc_m_35hash_table_value_annotation_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_value_annotation_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_value_annotation_hasher_ (void *);
+#define gt_ggc_m_27vec_Entity_Id_va_gc_atomic_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_Entity_Id_va_gc_atomic_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_Entity_Id_va_gc_atomic_ (void *);
+#define gt_ggc_m_19tree_entity_vec_map(X) do { \
+  if (X != NULL) gt_ggc_mx_tree_entity_vec_map (X);\
+  } while (0)
+extern void gt_ggc_mx_tree_entity_vec_map (void *);
+#define gt_ggc_m_29hash_table_dummy_type_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_dummy_type_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_dummy_type_hasher_ (void *);
+#define gt_ggc_m_11parm_attr_d(X) do { \
+  if (X != NULL) gt_ggc_mx_parm_attr_d (X);\
+  } while (0)
+extern void gt_ggc_mx_parm_attr_d (void *);
+#define gt_ggc_m_20vec_parm_attr_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_parm_attr_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_parm_attr_va_gc_ (void *);
+#define gt_ggc_m_10stmt_group(X) do { \
+  if (X != NULL) gt_ggc_mx_stmt_group (X);\
+  } while (0)
+extern void gt_ggc_mx_stmt_group (void *);
+#define gt_ggc_m_9elab_info(X) do { \
+  if (X != NULL) gt_ggc_mx_elab_info (X);\
+  } while (0)
+extern void gt_ggc_mx_elab_info (void *);
+#define gt_ggc_m_18range_check_info_d(X) do { \
+  if (X != NULL) gt_ggc_mx_range_check_info_d (X);\
+  } while (0)
+extern void gt_ggc_mx_range_check_info_d (void *);
+#define gt_ggc_m_27vec_range_check_info_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_range_check_info_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_range_check_info_va_gc_ (void *);
+#define gt_ggc_m_11loop_info_d(X) do { \
+  if (X != NULL) gt_ggc_mx_loop_info_d (X);\
+  } while (0)
+extern void gt_ggc_mx_loop_info_d (void *);
+#define gt_ggc_m_20vec_loop_info_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_loop_info_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_loop_info_va_gc_ (void *);
+#define gt_ggc_m_18gnat_binding_level(X) do { \
+  if (X != NULL) gt_ggc_mx_gnat_binding_level (X);\
+  } while (0)
+extern void gt_ggc_mx_gnat_binding_level (void *);
+#define gt_ggc_m_13pad_type_hash(X) do { \
+  if (X != NULL) gt_ggc_mx_pad_type_hash (X);\
+  } while (0)
+extern void gt_ggc_mx_pad_type_hash (void *);
+#define gt_ggc_m_27hash_table_pad_type_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_pad_type_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_pad_type_hasher_ (void *);
+#define gt_ggc_m_12c_label_vars(X) do { \
+  if (X != NULL) gt_ggc_mx_c_label_vars (X);\
+  } while (0)
+extern void gt_ggc_mx_c_label_vars (void *);
+#define gt_ggc_m_9c_binding(X) do { \
+  if (X != NULL) gt_ggc_mx_c_binding (X);\
+  } while (0)
+extern void gt_ggc_mx_c_binding (void *);
+#define gt_ggc_m_7c_scope(X) do { \
+  if (X != NULL) gt_ggc_mx_c_scope (X);\
+  } while (0)
+extern void gt_ggc_mx_c_scope (void *);
+#define gt_ggc_m_15c_goto_bindings(X) do { \
+  if (X != NULL) gt_ggc_mx_c_goto_bindings (X);\
+  } while (0)
+extern void gt_ggc_mx_c_goto_bindings (void *);
+#define gt_ggc_m_28vec_c_goto_bindings_p_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_c_goto_bindings_p_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_c_goto_bindings_p_va_gc_ (void *);
+#define gt_ggc_m_15c_inline_static(X) do { \
+  if (X != NULL) gt_ggc_mx_c_inline_static (X);\
+  } while (0)
+extern void gt_ggc_mx_c_inline_static (void *);
+#define gt_ggc_m_18sorted_fields_type(X) do { \
+  if (X != NULL) gt_ggc_mx_sorted_fields_type (X);\
+  } while (0)
+extern void gt_ggc_mx_sorted_fields_type (void *);
+#define gt_ggc_m_23vec_const_char_p_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_const_char_p_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_const_char_p_va_gc_ (void *);
+#define gt_ggc_m_22vec_tree_gc_vec_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_tree_gc_vec_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_tree_gc_vec_va_gc_ (void *);
+#define gt_ggc_m_11align_stack(X) do { \
+  if (X != NULL) gt_ggc_mx_align_stack (X);\
+  } while (0)
+extern void gt_ggc_mx_align_stack (void *);
+#define gt_ggc_m_23vec_pending_weak_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_pending_weak_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_pending_weak_va_gc_ (void *);
+#define gt_ggc_m_31vec_pending_redefinition_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_pending_redefinition_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_pending_redefinition_va_gc_ (void *);
+#define gt_ggc_m_9opt_stack(X) do { \
+  if (X != NULL) gt_ggc_mx_opt_stack (X);\
+  } while (0)
+extern void gt_ggc_mx_opt_stack (void *);
+#define gt_ggc_m_8c_parser(X) do { \
+  if (X != NULL) gt_ggc_mx_c_parser (X);\
+  } while (0)
+extern void gt_ggc_mx_c_parser (void *);
+#define gt_ggc_m_15binding_table_s(X) do { \
+  if (X != NULL) gt_ggc_mx_binding_table_s (X);\
+  } while (0)
+extern void gt_ggc_mx_binding_table_s (void *);
+#define gt_ggc_m_15binding_entry_s(X) do { \
+  if (X != NULL) gt_ggc_mx_binding_entry_s (X);\
+  } while (0)
+extern void gt_ggc_mx_binding_entry_s (void *);
+#define gt_ggc_m_11cxx_binding(X) do { \
+  if (X != NULL) gt_ggc_mx_cxx_binding (X);\
+  } while (0)
+extern void gt_ggc_mx_cxx_binding (void *);
+#define gt_ggc_m_16cp_binding_level(X) do { \
+  if (X != NULL) gt_ggc_mx_cp_binding_level (X);\
+  } while (0)
+extern void gt_ggc_mx_cp_binding_level (void *);
+#define gt_ggc_m_27vec_cp_class_binding_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_cp_class_binding_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_cp_class_binding_va_gc_ (void *);
+#define gt_ggc_m_14cp_token_cache(X) do { \
+  if (X != NULL) gt_ggc_mx_cp_token_cache (X);\
+  } while (0)
+extern void gt_ggc_mx_cp_token_cache (void *);
+#define gt_ggc_m_36vec_qualified_typedef_usage_t_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_qualified_typedef_usage_t_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_qualified_typedef_usage_t_va_gc_ (void *);
+#define gt_ggc_m_28vec_cxx_saved_binding_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_cxx_saved_binding_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_cxx_saved_binding_va_gc_ (void *);
+#define gt_ggc_m_11saved_scope(X) do { \
+  if (X != NULL) gt_ggc_mx_saved_scope (X);\
+  } while (0)
+extern void gt_ggc_mx_saved_scope (void *);
+#define gt_ggc_m_16cxx_int_tree_map(X) do { \
+  if (X != NULL) gt_ggc_mx_cxx_int_tree_map (X);\
+  } while (0)
+extern void gt_ggc_mx_cxx_int_tree_map (void *);
+#define gt_ggc_m_17named_label_entry(X) do { \
+  if (X != NULL) gt_ggc_mx_named_label_entry (X);\
+  } while (0)
+extern void gt_ggc_mx_named_label_entry (void *);
+#define gt_ggc_m_28hash_table_named_label_hash_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_named_label_hash_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_named_label_hash_ (void *);
+#define gt_ggc_m_35hash_table_cxx_int_tree_map_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_cxx_int_tree_map_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_cxx_int_tree_map_hasher_ (void *);
+#define gt_ggc_m_22vec_tree_pair_s_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_tree_pair_s_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_tree_pair_s_va_gc_ (void *);
+#define gt_ggc_m_27hash_table_named_decl_hash_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_named_decl_hash_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_named_decl_hash_ (void *);
+#define gt_ggc_m_11tinst_level(X) do { \
+  if (X != NULL) gt_ggc_mx_tinst_level (X);\
+  } while (0)
+extern void gt_ggc_mx_tinst_level (void *);
+#define gt_ggc_m_32vec_deferred_access_check_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_deferred_access_check_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_deferred_access_check_va_gc_ (void *);
+#define gt_ggc_m_10tree_check(X) do { \
+  if (X != NULL) gt_ggc_mx_tree_check (X);\
+  } while (0)
+extern void gt_ggc_mx_tree_check (void *);
+#define gt_ggc_m_19vec_cp_token_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_cp_token_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_cp_token_va_gc_ (void *);
+#define gt_ggc_m_8cp_lexer(X) do { \
+  if (X != NULL) gt_ggc_mx_cp_lexer (X);\
+  } while (0)
+extern void gt_ggc_mx_cp_lexer (void *);
+#define gt_ggc_m_31vec_cp_default_arg_entry_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_cp_default_arg_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_cp_default_arg_entry_va_gc_ (void *);
+#define gt_ggc_m_17cp_parser_context(X) do { \
+  if (X != NULL) gt_ggc_mx_cp_parser_context (X);\
+  } while (0)
+extern void gt_ggc_mx_cp_parser_context (void *);
+#define gt_ggc_m_38vec_cp_unparsed_functions_entry_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_cp_unparsed_functions_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_cp_unparsed_functions_entry_va_gc_ (void *);
+#define gt_ggc_m_9cp_parser(X) do { \
+  if (X != NULL) gt_ggc_mx_cp_parser (X);\
+  } while (0)
+extern void gt_ggc_mx_cp_parser (void *);
+#define gt_ggc_m_16constexpr_fundef(X) do { \
+  if (X != NULL) gt_ggc_mx_constexpr_fundef (X);\
+  } while (0)
+extern void gt_ggc_mx_constexpr_fundef (void *);
+#define gt_ggc_m_35hash_table_constexpr_fundef_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_constexpr_fundef_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_constexpr_fundef_hasher_ (void *);
+#define gt_ggc_m_14constexpr_call(X) do { \
+  if (X != NULL) gt_ggc_mx_constexpr_call (X);\
+  } while (0)
+extern void gt_ggc_mx_constexpr_call (void *);
+#define gt_ggc_m_33hash_table_constexpr_call_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_constexpr_call_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_constexpr_call_hasher_ (void *);
+#define gt_ggc_m_21named_label_use_entry(X) do { \
+  if (X != NULL) gt_ggc_mx_named_label_use_entry (X);\
+  } while (0)
+extern void gt_ggc_mx_named_label_use_entry (void *);
+#define gt_ggc_m_25vec_incomplete_var_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_incomplete_var_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_incomplete_var_va_gc_ (void *);
+#define gt_ggc_m_27hash_table_typename_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_typename_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_typename_hasher_ (void *);
+#define gt_ggc_m_29hash_table_mangled_decl_hash_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_mangled_decl_hash_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_mangled_decl_hash_ (void *);
+#define gt_ggc_m_27vec_pending_noexcept_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_pending_noexcept_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_pending_noexcept_va_gc_ (void *);
+#define gt_ggc_m_19vec_tree_int_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_tree_int_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_tree_int_va_gc_ (void *);
+#define gt_ggc_m_28hash_table_conv_type_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_conv_type_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_conv_type_hasher_ (void *);
+#define gt_ggc_m_16pending_template(X) do { \
+  if (X != NULL) gt_ggc_mx_pending_template (X);\
+  } while (0)
+extern void gt_ggc_mx_pending_template (void *);
+#define gt_ggc_m_10spec_entry(X) do { \
+  if (X != NULL) gt_ggc_mx_spec_entry (X);\
+  } while (0)
+extern void gt_ggc_mx_spec_entry (void *);
+#define gt_ggc_m_23hash_table_spec_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_spec_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_spec_hasher_ (void *);
+#define gt_ggc_m_12constr_entry(X) do { \
+  if (X != NULL) gt_ggc_mx_constr_entry (X);\
+  } while (0)
+extern void gt_ggc_mx_constr_entry (void *);
+#define gt_ggc_m_25hash_table_constr_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_constr_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_constr_hasher_ (void *);
+#define gt_ggc_m_20constraint_sat_entry(X) do { \
+  if (X != NULL) gt_ggc_mx_constraint_sat_entry (X);\
+  } while (0)
+extern void gt_ggc_mx_constraint_sat_entry (void *);
+#define gt_ggc_m_18concept_spec_entry(X) do { \
+  if (X != NULL) gt_ggc_mx_concept_spec_entry (X);\
+  } while (0)
+extern void gt_ggc_mx_concept_spec_entry (void *);
+#define gt_ggc_m_33hash_table_constraint_sat_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_constraint_sat_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_constraint_sat_hasher_ (void *);
+#define gt_ggc_m_31hash_table_concept_spec_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_concept_spec_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_concept_spec_hasher_ (void *);
+#define gt_ggc_m_17subsumption_entry(X) do { \
+  if (X != NULL) gt_ggc_mx_subsumption_entry (X);\
+  } while (0)
+extern void gt_ggc_mx_subsumption_entry (void *);
+#define gt_ggc_m_30hash_table_subsumption_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_subsumption_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_subsumption_hasher_ (void *);
+#define gt_ggc_m_18vec_tinfo_s_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_tinfo_s_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_tinfo_s_va_gc_ (void *);
+#define gt_ggc_m_26vec_deferred_access_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_deferred_access_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_deferred_access_va_gc_ (void *);
+#define gt_ggc_m_30hash_table_cplus_array_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_cplus_array_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_cplus_array_hasher_ (void *);
+#define gt_ggc_m_23hash_table_list_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_list_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_list_hasher_ (void *);
+#define gt_ggc_m_21pending_abstract_type(X) do { \
+  if (X != NULL) gt_ggc_mx_pending_abstract_type (X);\
+  } while (0)
+extern void gt_ggc_mx_pending_abstract_type (void *);
+#define gt_ggc_m_32hash_table_abstract_type_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_abstract_type_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_abstract_type_hasher_ (void *);
+#define gt_ggc_m_9Statement(X) do { \
+  if (X != NULL) gt_ggc_mx_Statement (X);\
+  } while (0)
+extern void gt_ggc_mx_Statement (void *);
+#define gt_ggc_m_13binding_level(X) do { \
+  if (X != NULL) gt_ggc_mx_binding_level (X);\
+  } while (0)
+extern void gt_ggc_mx_binding_level (void *);
+#define gt_ggc_m_17d_label_use_entry(X) do { \
+  if (X != NULL) gt_ggc_mx_d_label_use_entry (X);\
+  } while (0)
+extern void gt_ggc_mx_d_label_use_entry (void *);
+#define gt_ggc_m_34hash_map_Statement__d_label_entry_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_map_Statement__d_label_entry_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_map_Statement__d_label_entry_ (void *);
+#define gt_ggc_m_25hash_table_module_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_module_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_module_hasher_ (void *);
+#define gt_ggc_m_17module_htab_entry(X) do { \
+  if (X != NULL) gt_ggc_mx_module_htab_entry (X);\
+  } while (0)
+extern void gt_ggc_mx_module_htab_entry (void *);
+#define gt_ggc_m_30hash_table_module_decl_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_module_decl_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_module_decl_hasher_ (void *);
+#define gt_ggc_m_16objc_map_private(X) do { \
+  if (X != NULL) gt_ggc_mx_objc_map_private (X);\
+  } while (0)
+extern void gt_ggc_mx_objc_map_private (void *);
+#define gt_ggc_m_12hashed_entry(X) do { \
+  if (X != NULL) gt_ggc_mx_hashed_entry (X);\
+  } while (0)
+extern void gt_ggc_mx_hashed_entry (void *);
+#define gt_ggc_m_16hashed_attribute(X) do { \
+  if (X != NULL) gt_ggc_mx_hashed_attribute (X);\
+  } while (0)
+extern void gt_ggc_mx_hashed_attribute (void *);
+#define gt_ggc_m_9imp_entry(X) do { \
+  if (X != NULL) gt_ggc_mx_imp_entry (X);\
+  } while (0)
+extern void gt_ggc_mx_imp_entry (void *);
+#define gt_ggc_m_17string_descriptor(X) do { \
+  if (X != NULL) gt_ggc_mx_string_descriptor (X);\
+  } while (0)
+extern void gt_ggc_mx_string_descriptor (void *);
+#define gt_ggc_m_30hash_table_objc_string_hasher_(X) do { \
+  if (X != NULL) gt_ggc_mx_hash_table_objc_string_hasher_ (X);\
+  } while (0)
+extern void gt_ggc_mx_hash_table_objc_string_hasher_ (void *);
+#define gt_ggc_m_27vec_ident_data_tuple_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_ident_data_tuple_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_ident_data_tuple_va_gc_ (void *);
+#define gt_ggc_m_23vec_msgref_entry_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_msgref_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_msgref_entry_va_gc_ (void *);
+#define gt_ggc_m_26vec_prot_list_entry_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_prot_list_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_prot_list_entry_va_gc_ (void *);
+#define gt_ggc_m_24vec_ivarref_entry_va_gc_(X) do { \
+  if (X != NULL) gt_ggc_mx_vec_ivarref_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_ggc_mx_vec_ivarref_entry_va_gc_ (void *);
+
+/* functions code */
+
+/* PCH type-walking procedures.  */
+/* Macros and declarations.  */
+#define gt_pch_n_9tree_node(X) do { \
+  if (X != NULL) gt_pch_nx_tree_node (X);\
+  } while (0)
+#define gt_pch_nx_tree_node gt_pch_nx_lang_tree_node
+#define gt_pch_n_9line_maps(X) do { \
+  if (X != NULL) gt_pch_nx_line_maps (X);\
+  } while (0)
+extern void gt_pch_nx_line_maps (void *);
+#define gt_pch_n_9cpp_token(X) do { \
+  if (X != NULL) gt_pch_nx_cpp_token (X);\
+  } while (0)
+extern void gt_pch_nx_cpp_token (void *);
+#define gt_pch_n_9cpp_macro(X) do { \
+  if (X != NULL) gt_pch_nx_cpp_macro (X);\
+  } while (0)
+extern void gt_pch_nx_cpp_macro (void *);
+#define gt_pch_n_13string_concat(X) do { \
+  if (X != NULL) gt_pch_nx_string_concat (X);\
+  } while (0)
+extern void gt_pch_nx_string_concat (void *);
+#define gt_pch_n_16string_concat_db(X) do { \
+  if (X != NULL) gt_pch_nx_string_concat_db (X);\
+  } while (0)
+extern void gt_pch_nx_string_concat_db (void *);
+#define gt_pch_n_38hash_map_location_hash_string_concat__(X) do { \
+  if (X != NULL) gt_pch_nx_hash_map_location_hash_string_concat__ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_map_location_hash_string_concat__ (void *);
+#define gt_pch_n_11bitmap_head(X) do { \
+  if (X != NULL) gt_pch_nx_bitmap_head (X);\
+  } while (0)
+extern void gt_pch_nx_bitmap_head (void *);
+#define gt_pch_n_7rtx_def(X) do { \
+  if (X != NULL) gt_pch_nx_rtx_def (X);\
+  } while (0)
+extern void gt_pch_nx_rtx_def (void *);
+#define gt_pch_n_9rtvec_def(X) do { \
+  if (X != NULL) gt_pch_nx_rtvec_def (X);\
+  } while (0)
+extern void gt_pch_nx_rtvec_def (void *);
+#define gt_pch_n_6gimple(X) do { \
+  if (X != NULL) gt_pch_nx_gimple (X);\
+  } while (0)
+extern void gt_pch_nx_gimple (void *);
+#define gt_pch_n_11symtab_node(X) do { \
+  if (X != NULL) gt_pch_nx_symtab_node (X);\
+  } while (0)
+extern void gt_pch_nx_symtab_node (void *);
+#define gt_pch_n_7section(X) do { \
+  if (X != NULL) gt_pch_nx_section (X);\
+  } while (0)
+extern void gt_pch_nx_section (void *);
+#define gt_pch_n_16cl_target_option(X) do { \
+  if (X != NULL) gt_pch_nx_cl_target_option (X);\
+  } while (0)
+extern void gt_pch_nx_cl_target_option (void *);
+#define gt_pch_n_15cl_optimization(X) do { \
+  if (X != NULL) gt_pch_nx_cl_optimization (X);\
+  } while (0)
+extern void gt_pch_nx_cl_optimization (void *);
+#define gt_pch_n_8edge_def(X) do { \
+  if (X != NULL) gt_pch_nx_edge_def (X);\
+  } while (0)
+extern void gt_pch_nx_edge_def (void *);
+#define gt_pch_n_15basic_block_def(X) do { \
+  if (X != NULL) gt_pch_nx_basic_block_def (X);\
+  } while (0)
+extern void gt_pch_nx_basic_block_def (void *);
+#define gt_pch_n_16machine_function(X) do { \
+  if (X != NULL) gt_pch_nx_machine_function (X);\
+  } while (0)
+extern void gt_pch_nx_machine_function (void *);
+#define gt_pch_n_14bitmap_element(X) do { \
+  if (X != NULL) gt_pch_nx_bitmap_element (X);\
+  } while (0)
+extern void gt_pch_nx_bitmap_element (void *);
+#define gt_pch_n_34generic_wide_int_wide_int_storage_(X) do { \
+  if (X != NULL) gt_pch_nx_generic_wide_int_wide_int_storage_ (X);\
+  } while (0)
+extern void gt_pch_nx_generic_wide_int_wide_int_storage_ (void *);
+#define gt_pch_n_13coverage_data(X) do { \
+  if (X != NULL) gt_pch_nx_coverage_data (X);\
+  } while (0)
+extern void gt_pch_nx_coverage_data (void *);
+#define gt_pch_n_9mem_attrs(X) do { \
+  if (X != NULL) gt_pch_nx_mem_attrs (X);\
+  } while (0)
+extern void gt_pch_nx_mem_attrs (void *);
+#define gt_pch_n_9reg_attrs(X) do { \
+  if (X != NULL) gt_pch_nx_reg_attrs (X);\
+  } while (0)
+extern void gt_pch_nx_reg_attrs (void *);
+#define gt_pch_n_12object_block(X) do { \
+  if (X != NULL) gt_pch_nx_object_block (X);\
+  } while (0)
+extern void gt_pch_nx_object_block (void *);
+#define gt_pch_n_14vec_rtx_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_rtx_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_rtx_va_gc_ (void *);
+#define gt_pch_n_10real_value(X) do { \
+  if (X != NULL) gt_pch_nx_real_value (X);\
+  } while (0)
+extern void gt_pch_nx_real_value (void *);
+#define gt_pch_n_11fixed_value(X) do { \
+  if (X != NULL) gt_pch_nx_fixed_value (X);\
+  } while (0)
+extern void gt_pch_nx_fixed_value (void *);
+#define gt_pch_n_23constant_descriptor_rtx(X) do { \
+  if (X != NULL) gt_pch_nx_constant_descriptor_rtx (X);\
+  } while (0)
+extern void gt_pch_nx_constant_descriptor_rtx (void *);
+#define gt_pch_n_8function(X) do { \
+  if (X != NULL) gt_pch_nx_function (X);\
+  } while (0)
+extern void gt_pch_nx_function (void *);
+#define gt_pch_n_10target_rtl(X) do { \
+  if (X != NULL) gt_pch_nx_target_rtl (X);\
+  } while (0)
+extern void gt_pch_nx_target_rtl (void *);
+#define gt_pch_n_15cgraph_rtl_info(X) do { \
+  if (X != NULL) gt_pch_nx_cgraph_rtl_info (X);\
+  } while (0)
+extern void gt_pch_nx_cgraph_rtl_info (void *);
+#define gt_pch_n_37hash_map_tree_tree_tree_cache_traits_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_map_tree_tree_tree_cache_traits_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_map_tree_tree_tree_cache_traits_ (void *);
+#define gt_pch_n_12ptr_info_def(X) do { \
+  if (X != NULL) gt_pch_nx_ptr_info_def (X);\
+  } while (0)
+extern void gt_pch_nx_ptr_info_def (void *);
+#define gt_pch_n_14range_info_def(X) do { \
+  if (X != NULL) gt_pch_nx_range_info_def (X);\
+  } while (0)
+extern void gt_pch_nx_range_info_def (void *);
+#define gt_pch_n_10die_struct(X) do { \
+  if (X != NULL) gt_pch_nx_die_struct (X);\
+  } while (0)
+extern void gt_pch_nx_die_struct (void *);
+#define gt_pch_n_26vec_constructor_elt_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_constructor_elt_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_constructor_elt_va_gc_ (void *);
+#define gt_pch_n_15vec_tree_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_tree_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_tree_va_gc_ (void *);
+#define gt_pch_n_9lang_type(X) do { \
+  if (X != NULL) gt_pch_nx_lang_type (X);\
+  } while (0)
+extern void gt_pch_nx_lang_type (void *);
+#define gt_pch_n_9lang_decl(X) do { \
+  if (X != NULL) gt_pch_nx_lang_decl (X);\
+  } while (0)
+extern void gt_pch_nx_lang_decl (void *);
+#define gt_pch_n_24tree_statement_list_node(X) do { \
+  if (X != NULL) gt_pch_nx_tree_statement_list_node (X);\
+  } while (0)
+extern void gt_pch_nx_tree_statement_list_node (void *);
+#define gt_pch_n_14target_globals(X) do { \
+  if (X != NULL) gt_pch_nx_target_globals (X);\
+  } while (0)
+extern void gt_pch_nx_target_globals (void *);
+#define gt_pch_n_14lang_tree_node(X) do { \
+  if (X != NULL) gt_pch_nx_lang_tree_node (X);\
+  } while (0)
+extern void gt_pch_nx_lang_tree_node (void *);
+#define gt_pch_n_8tree_map(X) do { \
+  if (X != NULL) gt_pch_nx_tree_map (X);\
+  } while (0)
+extern void gt_pch_nx_tree_map (void *);
+#define gt_pch_n_13tree_decl_map(X) do { \
+  if (X != NULL) gt_pch_nx_tree_decl_map (X);\
+  } while (0)
+extern void gt_pch_nx_tree_decl_map (void *);
+#define gt_pch_n_12tree_int_map(X) do { \
+  if (X != NULL) gt_pch_nx_tree_int_map (X);\
+  } while (0)
+extern void gt_pch_nx_tree_int_map (void *);
+#define gt_pch_n_12tree_vec_map(X) do { \
+  if (X != NULL) gt_pch_nx_tree_vec_map (X);\
+  } while (0)
+extern void gt_pch_nx_tree_vec_map (void *);
+#define gt_pch_n_21vec_alias_pair_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_alias_pair_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_alias_pair_va_gc_ (void *);
+#define gt_pch_n_13libfunc_entry(X) do { \
+  if (X != NULL) gt_pch_nx_libfunc_entry (X);\
+  } while (0)
+extern void gt_pch_nx_libfunc_entry (void *);
+#define gt_pch_n_26hash_table_libfunc_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_libfunc_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_libfunc_hasher_ (void *);
+#define gt_pch_n_15target_libfuncs(X) do { \
+  if (X != NULL) gt_pch_nx_target_libfuncs (X);\
+  } while (0)
+extern void gt_pch_nx_target_libfuncs (void *);
+#define gt_pch_n_14sequence_stack(X) do { \
+  if (X != NULL) gt_pch_nx_sequence_stack (X);\
+  } while (0)
+extern void gt_pch_nx_sequence_stack (void *);
+#define gt_pch_n_20vec_rtx_insn__va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_rtx_insn__va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_rtx_insn__va_gc_ (void *);
+#define gt_pch_n_18call_site_record_d(X) do { \
+  if (X != NULL) gt_pch_nx_call_site_record_d (X);\
+  } while (0)
+extern void gt_pch_nx_call_site_record_d (void *);
+#define gt_pch_n_16vec_uchar_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_uchar_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_uchar_va_gc_ (void *);
+#define gt_pch_n_27vec_call_site_record_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_call_site_record_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_call_site_record_va_gc_ (void *);
+#define gt_pch_n_9gimple_df(X) do { \
+  if (X != NULL) gt_pch_nx_gimple_df (X);\
+  } while (0)
+extern void gt_pch_nx_gimple_df (void *);
+#define gt_pch_n_11dw_fde_node(X) do { \
+  if (X != NULL) gt_pch_nx_dw_fde_node (X);\
+  } while (0)
+extern void gt_pch_nx_dw_fde_node (void *);
+#define gt_pch_n_17rtx_constant_pool(X) do { \
+  if (X != NULL) gt_pch_nx_rtx_constant_pool (X);\
+  } while (0)
+extern void gt_pch_nx_rtx_constant_pool (void *);
+#define gt_pch_n_11frame_space(X) do { \
+  if (X != NULL) gt_pch_nx_frame_space (X);\
+  } while (0)
+extern void gt_pch_nx_frame_space (void *);
+#define gt_pch_n_11stack_usage(X) do { \
+  if (X != NULL) gt_pch_nx_stack_usage (X);\
+  } while (0)
+extern void gt_pch_nx_stack_usage (void *);
+#define gt_pch_n_9eh_status(X) do { \
+  if (X != NULL) gt_pch_nx_eh_status (X);\
+  } while (0)
+extern void gt_pch_nx_eh_status (void *);
+#define gt_pch_n_18control_flow_graph(X) do { \
+  if (X != NULL) gt_pch_nx_control_flow_graph (X);\
+  } while (0)
+extern void gt_pch_nx_control_flow_graph (void *);
+#define gt_pch_n_5loops(X) do { \
+  if (X != NULL) gt_pch_nx_loops (X);\
+  } while (0)
+extern void gt_pch_nx_loops (void *);
+#define gt_pch_n_17language_function(X) do { \
+  if (X != NULL) gt_pch_nx_language_function (X);\
+  } while (0)
+extern void gt_pch_nx_language_function (void *);
+#define gt_pch_n_14hash_set_tree_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_set_tree_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_set_tree_ (void *);
+#define gt_pch_n_24types_used_by_vars_entry(X) do { \
+  if (X != NULL) gt_pch_nx_types_used_by_vars_entry (X);\
+  } while (0)
+extern void gt_pch_nx_types_used_by_vars_entry (void *);
+#define gt_pch_n_28hash_table_used_type_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_used_type_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_used_type_hasher_ (void *);
+#define gt_pch_n_13nb_iter_bound(X) do { \
+  if (X != NULL) gt_pch_nx_nb_iter_bound (X);\
+  } while (0)
+extern void gt_pch_nx_nb_iter_bound (void *);
+#define gt_pch_n_9loop_exit(X) do { \
+  if (X != NULL) gt_pch_nx_loop_exit (X);\
+  } while (0)
+extern void gt_pch_nx_loop_exit (void *);
+#define gt_pch_n_4loop(X) do { \
+  if (X != NULL) gt_pch_nx_loop (X);\
+  } while (0)
+extern void gt_pch_nx_loop (void *);
+#define gt_pch_n_10control_iv(X) do { \
+  if (X != NULL) gt_pch_nx_control_iv (X);\
+  } while (0)
+extern void gt_pch_nx_control_iv (void *);
+#define gt_pch_n_17vec_loop_p_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_loop_p_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_loop_p_va_gc_ (void *);
+#define gt_pch_n_10niter_desc(X) do { \
+  if (X != NULL) gt_pch_nx_niter_desc (X);\
+  } while (0)
+extern void gt_pch_nx_niter_desc (void *);
+#define gt_pch_n_28hash_table_loop_exit_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_loop_exit_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_loop_exit_hasher_ (void *);
+#define gt_pch_n_22vec_basic_block_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_basic_block_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_basic_block_va_gc_ (void *);
+#define gt_pch_n_11rtl_bb_info(X) do { \
+  if (X != NULL) gt_pch_nx_rtl_bb_info (X);\
+  } while (0)
+extern void gt_pch_nx_rtl_bb_info (void *);
+#define gt_pch_n_15vec_edge_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_edge_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_edge_va_gc_ (void *);
+#define gt_pch_n_20vec_ipa_ref_t_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_ipa_ref_t_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_ipa_ref_t_va_gc_ (void *);
+#define gt_pch_n_18section_hash_entry(X) do { \
+  if (X != NULL) gt_pch_nx_section_hash_entry (X);\
+  } while (0)
+extern void gt_pch_nx_section_hash_entry (void *);
+#define gt_pch_n_18lto_file_decl_data(X) do { \
+  if (X != NULL) gt_pch_nx_lto_file_decl_data (X);\
+  } while (0)
+extern void gt_pch_nx_lto_file_decl_data (void *);
+#define gt_pch_n_15ipa_replace_map(X) do { \
+  if (X != NULL) gt_pch_nx_ipa_replace_map (X);\
+  } while (0)
+extern void gt_pch_nx_ipa_replace_map (void *);
+#define gt_pch_n_27vec_ipa_replace_map__va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_ipa_replace_map__va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_ipa_replace_map__va_gc_ (void *);
+#define gt_pch_n_17cgraph_simd_clone(X) do { \
+  if (X != NULL) gt_pch_nx_cgraph_simd_clone (X);\
+  } while (0)
+extern void gt_pch_nx_cgraph_simd_clone (void *);
+#define gt_pch_n_28cgraph_function_version_info(X) do { \
+  if (X != NULL) gt_pch_nx_cgraph_function_version_info (X);\
+  } while (0)
+extern void gt_pch_nx_cgraph_function_version_info (void *);
+#define gt_pch_n_11cgraph_edge(X) do { \
+  if (X != NULL) gt_pch_nx_cgraph_edge (X);\
+  } while (0)
+extern void gt_pch_nx_cgraph_edge (void *);
+#define gt_pch_n_30hash_table_cgraph_edge_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_cgraph_edge_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_cgraph_edge_hasher_ (void *);
+#define gt_pch_n_25cgraph_indirect_call_info(X) do { \
+  if (X != NULL) gt_pch_nx_cgraph_indirect_call_info (X);\
+  } while (0)
+extern void gt_pch_nx_cgraph_indirect_call_info (void *);
+#define gt_pch_n_8asm_node(X) do { \
+  if (X != NULL) gt_pch_nx_asm_node (X);\
+  } while (0)
+extern void gt_pch_nx_asm_node (void *);
+#define gt_pch_n_12symbol_table(X) do { \
+  if (X != NULL) gt_pch_nx_symbol_table (X);\
+  } while (0)
+extern void gt_pch_nx_symbol_table (void *);
+#define gt_pch_n_31hash_table_section_name_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_section_name_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_section_name_hasher_ (void *);
+#define gt_pch_n_26hash_table_asmname_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_asmname_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_asmname_hasher_ (void *);
+#define gt_pch_n_42hash_map_symtab_node__symbol_priority_map_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_map_symtab_node__symbol_priority_map_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_map_symtab_node__symbol_priority_map_ (void *);
+#define gt_pch_n_24constant_descriptor_tree(X) do { \
+  if (X != NULL) gt_pch_nx_constant_descriptor_tree (X);\
+  } while (0)
+extern void gt_pch_nx_constant_descriptor_tree (void *);
+#define gt_pch_n_28hash_map_alias_set_hash_int_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_map_alias_set_hash_int_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_map_alias_set_hash_int_ (void *);
+#define gt_pch_n_15alias_set_entry(X) do { \
+  if (X != NULL) gt_pch_nx_alias_set_entry (X);\
+  } while (0)
+extern void gt_pch_nx_alias_set_entry (void *);
+#define gt_pch_n_27vec_alias_set_entry__va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_alias_set_entry__va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_alias_set_entry__va_gc_ (void *);
+#define gt_pch_n_35hash_table_function_version_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_function_version_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_function_version_hasher_ (void *);
+#define gt_pch_n_17lto_in_decl_state(X) do { \
+  if (X != NULL) gt_pch_nx_lto_in_decl_state (X);\
+  } while (0)
+extern void gt_pch_nx_lto_in_decl_state (void *);
+#define gt_pch_n_35hash_table_ipa_bit_ggc_hash_traits_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_ipa_bit_ggc_hash_traits_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_ipa_bit_ggc_hash_traits_ (void *);
+#define gt_pch_n_34hash_table_ipa_vr_ggc_hash_traits_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_ipa_vr_ggc_hash_traits_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_ipa_vr_ggc_hash_traits_ (void *);
+#define gt_pch_n_15ipa_node_params(X) do { \
+  if (X != NULL) gt_pch_nx_ipa_node_params (X);\
+  } while (0)
+extern void gt_pch_nx_ipa_node_params (void *);
+#define gt_pch_n_13ipa_edge_args(X) do { \
+  if (X != NULL) gt_pch_nx_ipa_edge_args (X);\
+  } while (0)
+extern void gt_pch_nx_ipa_edge_args (void *);
+#define gt_pch_n_25ipa_agg_replacement_value(X) do { \
+  if (X != NULL) gt_pch_nx_ipa_agg_replacement_value (X);\
+  } while (0)
+extern void gt_pch_nx_ipa_agg_replacement_value (void *);
+#define gt_pch_n_14ipa_fn_summary(X) do { \
+  if (X != NULL) gt_pch_nx_ipa_fn_summary (X);\
+  } while (0)
+extern void gt_pch_nx_ipa_fn_summary (void *);
+#define gt_pch_n_10odr_type_d(X) do { \
+  if (X != NULL) gt_pch_nx_odr_type_d (X);\
+  } while (0)
+extern void gt_pch_nx_odr_type_d (void *);
+#define gt_pch_n_8typeinfo(X) do { \
+  if (X != NULL) gt_pch_nx_typeinfo (X);\
+  } while (0)
+extern void gt_pch_nx_typeinfo (void *);
+#define gt_pch_n_11dw_cfi_node(X) do { \
+  if (X != NULL) gt_pch_nx_dw_cfi_node (X);\
+  } while (0)
+extern void gt_pch_nx_dw_cfi_node (void *);
+#define gt_pch_n_17dw_loc_descr_node(X) do { \
+  if (X != NULL) gt_pch_nx_dw_loc_descr_node (X);\
+  } while (0)
+extern void gt_pch_nx_dw_loc_descr_node (void *);
+#define gt_pch_n_18dw_loc_list_struct(X) do { \
+  if (X != NULL) gt_pch_nx_dw_loc_list_struct (X);\
+  } while (0)
+extern void gt_pch_nx_dw_loc_list_struct (void *);
+#define gt_pch_n_18dw_discr_list_node(X) do { \
+  if (X != NULL) gt_pch_nx_dw_discr_list_node (X);\
+  } while (0)
+extern void gt_pch_nx_dw_discr_list_node (void *);
+#define gt_pch_n_15dw_cfa_location(X) do { \
+  if (X != NULL) gt_pch_nx_dw_cfa_location (X);\
+  } while (0)
+extern void gt_pch_nx_dw_cfa_location (void *);
+#define gt_pch_n_21vec_dw_cfi_ref_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_dw_cfi_ref_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_dw_cfi_ref_va_gc_ (void *);
+#define gt_pch_n_16addr_table_entry(X) do { \
+  if (X != NULL) gt_pch_nx_addr_table_entry (X);\
+  } while (0)
+extern void gt_pch_nx_addr_table_entry (void *);
+#define gt_pch_n_20indirect_string_node(X) do { \
+  if (X != NULL) gt_pch_nx_indirect_string_node (X);\
+  } while (0)
+extern void gt_pch_nx_indirect_string_node (void *);
+#define gt_pch_n_15dwarf_file_data(X) do { \
+  if (X != NULL) gt_pch_nx_dwarf_file_data (X);\
+  } while (0)
+extern void gt_pch_nx_dwarf_file_data (void *);
+#define gt_pch_n_20hash_map_char__tree_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_map_char__tree_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_map_char__tree_ (void *);
+#define gt_pch_n_10dw_cfi_row(X) do { \
+  if (X != NULL) gt_pch_nx_dw_cfi_row (X);\
+  } while (0)
+extern void gt_pch_nx_dw_cfi_row (void *);
+#define gt_pch_n_17reg_saved_in_data(X) do { \
+  if (X != NULL) gt_pch_nx_reg_saved_in_data (X);\
+  } while (0)
+extern void gt_pch_nx_reg_saved_in_data (void *);
+#define gt_pch_n_21vec_dw_fde_ref_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_dw_fde_ref_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_dw_fde_ref_va_gc_ (void *);
+#define gt_pch_n_34hash_table_indirect_string_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_indirect_string_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_indirect_string_hasher_ (void *);
+#define gt_pch_n_16comdat_type_node(X) do { \
+  if (X != NULL) gt_pch_nx_comdat_type_node (X);\
+  } while (0)
+extern void gt_pch_nx_comdat_type_node (void *);
+#define gt_pch_n_29vec_dw_line_info_entry_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_dw_line_info_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_dw_line_info_entry_va_gc_ (void *);
+#define gt_pch_n_18dw_line_info_table(X) do { \
+  if (X != NULL) gt_pch_nx_dw_line_info_table (X);\
+  } while (0)
+extern void gt_pch_nx_dw_line_info_table (void *);
+#define gt_pch_n_23vec_dw_attr_node_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_dw_attr_node_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_dw_attr_node_va_gc_ (void *);
+#define gt_pch_n_16limbo_die_struct(X) do { \
+  if (X != NULL) gt_pch_nx_limbo_die_struct (X);\
+  } while (0)
+extern void gt_pch_nx_limbo_die_struct (void *);
+#define gt_pch_n_29hash_table_dwarf_file_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_dwarf_file_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_dwarf_file_hasher_ (void *);
+#define gt_pch_n_27hash_table_decl_die_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_decl_die_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_decl_die_hasher_ (void *);
+#define gt_pch_n_21vec_dw_die_ref_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_dw_die_ref_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_dw_die_ref_va_gc_ (void *);
+#define gt_pch_n_21variable_value_struct(X) do { \
+  if (X != NULL) gt_pch_nx_variable_value_struct (X);\
+  } while (0)
+extern void gt_pch_nx_variable_value_struct (void *);
+#define gt_pch_n_33hash_table_variable_value_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_variable_value_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_variable_value_hasher_ (void *);
+#define gt_pch_n_28hash_table_block_die_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_block_die_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_block_die_hasher_ (void *);
+#define gt_pch_n_12var_loc_node(X) do { \
+  if (X != NULL) gt_pch_nx_var_loc_node (X);\
+  } while (0)
+extern void gt_pch_nx_var_loc_node (void *);
+#define gt_pch_n_16var_loc_list_def(X) do { \
+  if (X != NULL) gt_pch_nx_var_loc_list_def (X);\
+  } while (0)
+extern void gt_pch_nx_var_loc_list_def (void *);
+#define gt_pch_n_17call_arg_loc_node(X) do { \
+  if (X != NULL) gt_pch_nx_call_arg_loc_node (X);\
+  } while (0)
+extern void gt_pch_nx_call_arg_loc_node (void *);
+#define gt_pch_n_27hash_table_decl_loc_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_decl_loc_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_decl_loc_hasher_ (void *);
+#define gt_pch_n_22cached_dw_loc_list_def(X) do { \
+  if (X != NULL) gt_pch_nx_cached_dw_loc_list_def (X);\
+  } while (0)
+extern void gt_pch_nx_cached_dw_loc_list_def (void *);
+#define gt_pch_n_30hash_table_dw_loc_list_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_dw_loc_list_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_dw_loc_list_hasher_ (void *);
+#define gt_pch_n_30vec_dw_line_info_table__va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_dw_line_info_table__va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_dw_line_info_table__va_gc_ (void *);
+#define gt_pch_n_24vec_pubname_entry_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_pubname_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_pubname_entry_va_gc_ (void *);
+#define gt_pch_n_24vec_macinfo_entry_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_macinfo_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_macinfo_entry_va_gc_ (void *);
+#define gt_pch_n_20vec_dw_ranges_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_dw_ranges_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_dw_ranges_va_gc_ (void *);
+#define gt_pch_n_29vec_dw_ranges_by_label_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_dw_ranges_by_label_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_dw_ranges_by_label_va_gc_ (void *);
+#define gt_pch_n_24vec_die_arg_entry_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_die_arg_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_die_arg_entry_va_gc_ (void *);
+#define gt_pch_n_23hash_table_addr_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_addr_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_addr_hasher_ (void *);
+#define gt_pch_n_27hash_map_tree_sym_off_pair_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_map_tree_sym_off_pair_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_map_tree_sym_off_pair_ (void *);
+#define gt_pch_n_17inline_entry_data(X) do { \
+  if (X != NULL) gt_pch_nx_inline_entry_data (X);\
+  } while (0)
+extern void gt_pch_nx_inline_entry_data (void *);
+#define gt_pch_n_36hash_table_inline_entry_data_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_inline_entry_data_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_inline_entry_data_hasher_ (void *);
+#define gt_pch_n_9temp_slot(X) do { \
+  if (X != NULL) gt_pch_nx_temp_slot (X);\
+  } while (0)
+extern void gt_pch_nx_temp_slot (void *);
+#define gt_pch_n_20initial_value_struct(X) do { \
+  if (X != NULL) gt_pch_nx_initial_value_struct (X);\
+  } while (0)
+extern void gt_pch_nx_initial_value_struct (void *);
+#define gt_pch_n_22vec_temp_slot_p_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_temp_slot_p_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_temp_slot_p_va_gc_ (void *);
+#define gt_pch_n_28hash_table_const_int_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_const_int_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_const_int_hasher_ (void *);
+#define gt_pch_n_33hash_table_const_wide_int_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_const_wide_int_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_const_wide_int_hasher_ (void *);
+#define gt_pch_n_33hash_table_const_poly_int_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_const_poly_int_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_const_poly_int_hasher_ (void *);
+#define gt_pch_n_27hash_table_reg_attr_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_reg_attr_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_reg_attr_hasher_ (void *);
+#define gt_pch_n_31hash_table_const_double_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_const_double_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_const_double_hasher_ (void *);
+#define gt_pch_n_30hash_table_const_fixed_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_const_fixed_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_const_fixed_hasher_ (void *);
+#define gt_pch_n_11eh_region_d(X) do { \
+  if (X != NULL) gt_pch_nx_eh_region_d (X);\
+  } while (0)
+extern void gt_pch_nx_eh_region_d (void *);
+#define gt_pch_n_16eh_landing_pad_d(X) do { \
+  if (X != NULL) gt_pch_nx_eh_landing_pad_d (X);\
+  } while (0)
+extern void gt_pch_nx_eh_landing_pad_d (void *);
+#define gt_pch_n_10eh_catch_d(X) do { \
+  if (X != NULL) gt_pch_nx_eh_catch_d (X);\
+  } while (0)
+extern void gt_pch_nx_eh_catch_d (void *);
+#define gt_pch_n_20vec_eh_region_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_eh_region_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_eh_region_va_gc_ (void *);
+#define gt_pch_n_25vec_eh_landing_pad_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_eh_landing_pad_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_eh_landing_pad_va_gc_ (void *);
+#define gt_pch_n_21hash_map_gimple__int_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_map_gimple__int_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_map_gimple__int_ (void *);
+#define gt_pch_n_29hash_table_insn_cache_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_insn_cache_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_insn_cache_hasher_ (void *);
+#define gt_pch_n_23temp_slot_address_entry(X) do { \
+  if (X != NULL) gt_pch_nx_temp_slot_address_entry (X);\
+  } while (0)
+extern void gt_pch_nx_temp_slot_address_entry (void *);
+#define gt_pch_n_31hash_table_temp_address_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_temp_address_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_temp_address_hasher_ (void *);
+#define gt_pch_n_24hash_map_tree_hash_tree_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_map_tree_hash_tree_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_map_tree_hash_tree_ (void *);
+#define gt_pch_n_11test_struct(X) do { \
+  if (X != NULL) gt_pch_nx_test_struct (X);\
+  } while (0)
+extern void gt_pch_nx_test_struct (void *);
+#define gt_pch_n_14test_of_length(X) do { \
+  if (X != NULL) gt_pch_nx_test_of_length (X);\
+  } while (0)
+extern void gt_pch_nx_test_of_length (void *);
+#define gt_pch_n_10test_other(X) do { \
+  if (X != NULL) gt_pch_nx_test_other (X);\
+  } while (0)
+extern void gt_pch_nx_test_other (void *);
+#define gt_pch_n_13test_of_union(X) do { \
+  if (X != NULL) gt_pch_nx_test_of_union (X);\
+  } while (0)
+extern void gt_pch_nx_test_of_union (void *);
+#define gt_pch_n_12example_base(X) do { \
+  if (X != NULL) gt_pch_nx_example_base (X);\
+  } while (0)
+extern void gt_pch_nx_example_base (void *);
+#define gt_pch_n_9test_node(X) do { \
+  if (X != NULL) gt_pch_nx_test_node (X);\
+  } while (0)
+extern void gt_pch_nx_test_node (void *);
+#define gt_pch_n_11user_struct(X) do { \
+  if (X != NULL) gt_pch_nx_user_struct (X);\
+  } while (0)
+extern void gt_pch_nx_user_struct (void *);
+#define gt_pch_n_31hash_table_libfunc_decl_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_libfunc_decl_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_libfunc_decl_hasher_ (void *);
+#define gt_pch_n_16string_pool_data(X) do { \
+  if (X != NULL) gt_pch_nx_string_pool_data (X);\
+  } while (0)
+extern void gt_pch_nx_string_pool_data (void *);
+#define gt_pch_n_9type_hash(X) do { \
+  if (X != NULL) gt_pch_nx_type_hash (X);\
+  } while (0)
+extern void gt_pch_nx_type_hash (void *);
+#define gt_pch_n_29hash_table_type_cache_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_type_cache_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_type_cache_hasher_ (void *);
+#define gt_pch_n_26hash_table_int_cst_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_int_cst_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_int_cst_hasher_ (void *);
+#define gt_pch_n_31hash_table_poly_int_cst_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_poly_int_cst_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_poly_int_cst_hasher_ (void *);
+#define gt_pch_n_28hash_table_cl_option_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_cl_option_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_cl_option_hasher_ (void *);
+#define gt_pch_n_38hash_table_tree_decl_map_cache_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_tree_decl_map_cache_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_tree_decl_map_cache_hasher_ (void *);
+#define gt_pch_n_37hash_table_tree_vec_map_cache_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_tree_vec_map_cache_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_tree_vec_map_cache_hasher_ (void *);
+#define gt_pch_n_26hash_table_section_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_section_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_section_hasher_ (void *);
+#define gt_pch_n_31hash_table_object_block_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_object_block_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_object_block_hasher_ (void *);
+#define gt_pch_n_34hash_table_tree_descriptor_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_tree_descriptor_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_tree_descriptor_hasher_ (void *);
+#define gt_pch_n_33hash_table_const_rtx_desc_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_const_rtx_desc_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_const_rtx_desc_hasher_ (void *);
+#define gt_pch_n_27hash_table_tm_clone_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_tm_clone_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_tm_clone_hasher_ (void *);
+#define gt_pch_n_15tm_restart_node(X) do { \
+  if (X != NULL) gt_pch_nx_tm_restart_node (X);\
+  } while (0)
+extern void gt_pch_nx_tm_restart_node (void *);
+#define gt_pch_n_19hash_map_tree_tree_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_map_tree_tree_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_map_tree_tree_ (void *);
+#define gt_pch_n_27hash_table_ssa_name_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_ssa_name_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_ssa_name_hasher_ (void *);
+#define gt_pch_n_29hash_table_tm_restart_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_tm_restart_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_tm_restart_hasher_ (void *);
+#define gt_pch_n_28vec_mem_addr_template_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_mem_addr_template_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_mem_addr_template_va_gc_ (void *);
+#define gt_pch_n_13scev_info_str(X) do { \
+  if (X != NULL) gt_pch_nx_scev_info_str (X);\
+  } while (0)
+extern void gt_pch_nx_scev_info_str (void *);
+#define gt_pch_n_28hash_table_scev_info_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_scev_info_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_scev_info_hasher_ (void *);
+#define gt_pch_n_20ssa_operand_memory_d(X) do { \
+  if (X != NULL) gt_pch_nx_ssa_operand_memory_d (X);\
+  } while (0)
+extern void gt_pch_nx_ssa_operand_memory_d (void *);
+#define gt_pch_n_28grid_launch_attributes_trees(X) do { \
+  if (X != NULL) gt_pch_nx_grid_launch_attributes_trees (X);\
+  } while (0)
+extern void gt_pch_nx_grid_launch_attributes_trees (void *);
+#define gt_pch_n_24hash_map_char__unsigned_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_map_char__unsigned_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_map_char__unsigned_ (void *);
+#define gt_pch_n_18vec_gimple__va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_gimple__va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_gimple__va_gc_ (void *);
+#define gt_pch_n_16value_range_base(X) do { \
+  if (X != NULL) gt_pch_nx_value_range_base (X);\
+  } while (0)
+extern void gt_pch_nx_value_range_base (void *);
+#define gt_pch_n_26vec_ipa_agg_jf_item_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_ipa_agg_jf_item_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_ipa_agg_jf_item_va_gc_ (void *);
+#define gt_pch_n_8ipa_bits(X) do { \
+  if (X != NULL) gt_pch_nx_ipa_bits (X);\
+  } while (0)
+extern void gt_pch_nx_ipa_bits (void *);
+#define gt_pch_n_31vec_ipa_param_descriptor_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_ipa_param_descriptor_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_ipa_param_descriptor_va_gc_ (void *);
+#define gt_pch_n_20vec_ipa_bits__va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_ipa_bits__va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_ipa_bits__va_gc_ (void *);
+#define gt_pch_n_17vec_ipa_vr_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_ipa_vr_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_ipa_vr_va_gc_ (void *);
+#define gt_pch_n_19ipcp_transformation(X) do { \
+  if (X != NULL) gt_pch_nx_ipcp_transformation (X);\
+  } while (0)
+extern void gt_pch_nx_ipcp_transformation (void *);
+#define gt_pch_n_24vec_ipa_jump_func_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_ipa_jump_func_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_ipa_jump_func_va_gc_ (void *);
+#define gt_pch_n_39vec_ipa_polymorphic_call_context_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_ipa_polymorphic_call_context_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_ipa_polymorphic_call_context_va_gc_ (void *);
+#define gt_pch_n_17ipa_node_params_t(X) do { \
+  if (X != NULL) gt_pch_nx_ipa_node_params_t (X);\
+  } while (0)
+extern void gt_pch_nx_ipa_node_params_t (void *);
+#define gt_pch_n_19ipa_edge_args_sum_t(X) do { \
+  if (X != NULL) gt_pch_nx_ipa_edge_args_sum_t (X);\
+  } while (0)
+extern void gt_pch_nx_ipa_edge_args_sum_t (void *);
+#define gt_pch_n_38function_summary_ipcp_transformation__(X) do { \
+  if (X != NULL) gt_pch_nx_function_summary_ipcp_transformation__ (X);\
+  } while (0)
+extern void gt_pch_nx_function_summary_ipcp_transformation__ (void *);
+#define gt_pch_n_29hash_table_tm_wrapper_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_tm_wrapper_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_tm_wrapper_hasher_ (void *);
+#define gt_pch_n_29hash_table_decl_state_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_decl_state_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_decl_state_hasher_ (void *);
+#define gt_pch_n_20vec_condition_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_condition_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_condition_va_gc_ (void *);
+#define gt_pch_n_26vec_size_time_entry_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_size_time_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_size_time_entry_va_gc_ (void *);
+#define gt_pch_n_44fast_function_summary_ipa_fn_summary__va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_fast_function_summary_ipa_fn_summary__va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_fast_function_summary_ipa_fn_summary__va_gc_ (void *);
+#define gt_pch_n_13tree_type_map(X) do { \
+  if (X != NULL) gt_pch_nx_tree_type_map (X);\
+  } while (0)
+extern void gt_pch_nx_tree_type_map (void *);
+#define gt_pch_n_38hash_table_tree_type_map_cache_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_tree_type_map_cache_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_tree_type_map_cache_hasher_ (void *);
+#define gt_pch_n_19vec_odr_type_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_odr_type_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_odr_type_va_gc_ (void *);
+#define gt_pch_n_38vec_hsa_decl_kernel_map_element_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_hsa_decl_kernel_map_element_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_hsa_decl_kernel_map_element_va_gc_ (void *);
+#define gt_pch_n_35hash_table_value_annotation_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_value_annotation_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_value_annotation_hasher_ (void *);
+#define gt_pch_n_27vec_Entity_Id_va_gc_atomic_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_Entity_Id_va_gc_atomic_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_Entity_Id_va_gc_atomic_ (void *);
+#define gt_pch_n_19tree_entity_vec_map(X) do { \
+  if (X != NULL) gt_pch_nx_tree_entity_vec_map (X);\
+  } while (0)
+extern void gt_pch_nx_tree_entity_vec_map (void *);
+#define gt_pch_n_29hash_table_dummy_type_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_dummy_type_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_dummy_type_hasher_ (void *);
+#define gt_pch_n_11parm_attr_d(X) do { \
+  if (X != NULL) gt_pch_nx_parm_attr_d (X);\
+  } while (0)
+extern void gt_pch_nx_parm_attr_d (void *);
+#define gt_pch_n_20vec_parm_attr_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_parm_attr_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_parm_attr_va_gc_ (void *);
+#define gt_pch_n_10stmt_group(X) do { \
+  if (X != NULL) gt_pch_nx_stmt_group (X);\
+  } while (0)
+extern void gt_pch_nx_stmt_group (void *);
+#define gt_pch_n_9elab_info(X) do { \
+  if (X != NULL) gt_pch_nx_elab_info (X);\
+  } while (0)
+extern void gt_pch_nx_elab_info (void *);
+#define gt_pch_n_18range_check_info_d(X) do { \
+  if (X != NULL) gt_pch_nx_range_check_info_d (X);\
+  } while (0)
+extern void gt_pch_nx_range_check_info_d (void *);
+#define gt_pch_n_27vec_range_check_info_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_range_check_info_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_range_check_info_va_gc_ (void *);
+#define gt_pch_n_11loop_info_d(X) do { \
+  if (X != NULL) gt_pch_nx_loop_info_d (X);\
+  } while (0)
+extern void gt_pch_nx_loop_info_d (void *);
+#define gt_pch_n_20vec_loop_info_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_loop_info_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_loop_info_va_gc_ (void *);
+#define gt_pch_n_18gnat_binding_level(X) do { \
+  if (X != NULL) gt_pch_nx_gnat_binding_level (X);\
+  } while (0)
+extern void gt_pch_nx_gnat_binding_level (void *);
+#define gt_pch_n_13pad_type_hash(X) do { \
+  if (X != NULL) gt_pch_nx_pad_type_hash (X);\
+  } while (0)
+extern void gt_pch_nx_pad_type_hash (void *);
+#define gt_pch_n_27hash_table_pad_type_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_pad_type_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_pad_type_hasher_ (void *);
+#define gt_pch_n_12c_label_vars(X) do { \
+  if (X != NULL) gt_pch_nx_c_label_vars (X);\
+  } while (0)
+extern void gt_pch_nx_c_label_vars (void *);
+#define gt_pch_n_9c_binding(X) do { \
+  if (X != NULL) gt_pch_nx_c_binding (X);\
+  } while (0)
+extern void gt_pch_nx_c_binding (void *);
+#define gt_pch_n_7c_scope(X) do { \
+  if (X != NULL) gt_pch_nx_c_scope (X);\
+  } while (0)
+extern void gt_pch_nx_c_scope (void *);
+#define gt_pch_n_15c_goto_bindings(X) do { \
+  if (X != NULL) gt_pch_nx_c_goto_bindings (X);\
+  } while (0)
+extern void gt_pch_nx_c_goto_bindings (void *);
+#define gt_pch_n_28vec_c_goto_bindings_p_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_c_goto_bindings_p_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_c_goto_bindings_p_va_gc_ (void *);
+#define gt_pch_n_15c_inline_static(X) do { \
+  if (X != NULL) gt_pch_nx_c_inline_static (X);\
+  } while (0)
+extern void gt_pch_nx_c_inline_static (void *);
+#define gt_pch_n_18sorted_fields_type(X) do { \
+  if (X != NULL) gt_pch_nx_sorted_fields_type (X);\
+  } while (0)
+extern void gt_pch_nx_sorted_fields_type (void *);
+#define gt_pch_n_23vec_const_char_p_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_const_char_p_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_const_char_p_va_gc_ (void *);
+#define gt_pch_n_22vec_tree_gc_vec_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_tree_gc_vec_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_tree_gc_vec_va_gc_ (void *);
+#define gt_pch_n_11align_stack(X) do { \
+  if (X != NULL) gt_pch_nx_align_stack (X);\
+  } while (0)
+extern void gt_pch_nx_align_stack (void *);
+#define gt_pch_n_23vec_pending_weak_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_pending_weak_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_pending_weak_va_gc_ (void *);
+#define gt_pch_n_31vec_pending_redefinition_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_pending_redefinition_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_pending_redefinition_va_gc_ (void *);
+#define gt_pch_n_9opt_stack(X) do { \
+  if (X != NULL) gt_pch_nx_opt_stack (X);\
+  } while (0)
+extern void gt_pch_nx_opt_stack (void *);
+#define gt_pch_n_8c_parser(X) do { \
+  if (X != NULL) gt_pch_nx_c_parser (X);\
+  } while (0)
+extern void gt_pch_nx_c_parser (void *);
+#define gt_pch_n_15binding_table_s(X) do { \
+  if (X != NULL) gt_pch_nx_binding_table_s (X);\
+  } while (0)
+extern void gt_pch_nx_binding_table_s (void *);
+#define gt_pch_n_15binding_entry_s(X) do { \
+  if (X != NULL) gt_pch_nx_binding_entry_s (X);\
+  } while (0)
+extern void gt_pch_nx_binding_entry_s (void *);
+#define gt_pch_n_11cxx_binding(X) do { \
+  if (X != NULL) gt_pch_nx_cxx_binding (X);\
+  } while (0)
+extern void gt_pch_nx_cxx_binding (void *);
+#define gt_pch_n_16cp_binding_level(X) do { \
+  if (X != NULL) gt_pch_nx_cp_binding_level (X);\
+  } while (0)
+extern void gt_pch_nx_cp_binding_level (void *);
+#define gt_pch_n_27vec_cp_class_binding_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_cp_class_binding_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_cp_class_binding_va_gc_ (void *);
+#define gt_pch_n_14cp_token_cache(X) do { \
+  if (X != NULL) gt_pch_nx_cp_token_cache (X);\
+  } while (0)
+extern void gt_pch_nx_cp_token_cache (void *);
+#define gt_pch_n_36vec_qualified_typedef_usage_t_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_qualified_typedef_usage_t_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_qualified_typedef_usage_t_va_gc_ (void *);
+#define gt_pch_n_28vec_cxx_saved_binding_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_cxx_saved_binding_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_cxx_saved_binding_va_gc_ (void *);
+#define gt_pch_n_11saved_scope(X) do { \
+  if (X != NULL) gt_pch_nx_saved_scope (X);\
+  } while (0)
+extern void gt_pch_nx_saved_scope (void *);
+#define gt_pch_n_16cxx_int_tree_map(X) do { \
+  if (X != NULL) gt_pch_nx_cxx_int_tree_map (X);\
+  } while (0)
+extern void gt_pch_nx_cxx_int_tree_map (void *);
+#define gt_pch_n_17named_label_entry(X) do { \
+  if (X != NULL) gt_pch_nx_named_label_entry (X);\
+  } while (0)
+extern void gt_pch_nx_named_label_entry (void *);
+#define gt_pch_n_28hash_table_named_label_hash_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_named_label_hash_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_named_label_hash_ (void *);
+#define gt_pch_n_35hash_table_cxx_int_tree_map_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_cxx_int_tree_map_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_cxx_int_tree_map_hasher_ (void *);
+#define gt_pch_n_22vec_tree_pair_s_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_tree_pair_s_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_tree_pair_s_va_gc_ (void *);
+#define gt_pch_n_27hash_table_named_decl_hash_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_named_decl_hash_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_named_decl_hash_ (void *);
+#define gt_pch_n_11tinst_level(X) do { \
+  if (X != NULL) gt_pch_nx_tinst_level (X);\
+  } while (0)
+extern void gt_pch_nx_tinst_level (void *);
+#define gt_pch_n_32vec_deferred_access_check_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_deferred_access_check_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_deferred_access_check_va_gc_ (void *);
+#define gt_pch_n_10tree_check(X) do { \
+  if (X != NULL) gt_pch_nx_tree_check (X);\
+  } while (0)
+extern void gt_pch_nx_tree_check (void *);
+#define gt_pch_n_19vec_cp_token_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_cp_token_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_cp_token_va_gc_ (void *);
+#define gt_pch_n_8cp_lexer(X) do { \
+  if (X != NULL) gt_pch_nx_cp_lexer (X);\
+  } while (0)
+extern void gt_pch_nx_cp_lexer (void *);
+#define gt_pch_n_31vec_cp_default_arg_entry_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_cp_default_arg_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_cp_default_arg_entry_va_gc_ (void *);
+#define gt_pch_n_17cp_parser_context(X) do { \
+  if (X != NULL) gt_pch_nx_cp_parser_context (X);\
+  } while (0)
+extern void gt_pch_nx_cp_parser_context (void *);
+#define gt_pch_n_38vec_cp_unparsed_functions_entry_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_cp_unparsed_functions_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_cp_unparsed_functions_entry_va_gc_ (void *);
+#define gt_pch_n_9cp_parser(X) do { \
+  if (X != NULL) gt_pch_nx_cp_parser (X);\
+  } while (0)
+extern void gt_pch_nx_cp_parser (void *);
+#define gt_pch_n_16constexpr_fundef(X) do { \
+  if (X != NULL) gt_pch_nx_constexpr_fundef (X);\
+  } while (0)
+extern void gt_pch_nx_constexpr_fundef (void *);
+#define gt_pch_n_35hash_table_constexpr_fundef_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_constexpr_fundef_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_constexpr_fundef_hasher_ (void *);
+#define gt_pch_n_14constexpr_call(X) do { \
+  if (X != NULL) gt_pch_nx_constexpr_call (X);\
+  } while (0)
+extern void gt_pch_nx_constexpr_call (void *);
+#define gt_pch_n_33hash_table_constexpr_call_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_constexpr_call_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_constexpr_call_hasher_ (void *);
+#define gt_pch_n_21named_label_use_entry(X) do { \
+  if (X != NULL) gt_pch_nx_named_label_use_entry (X);\
+  } while (0)
+extern void gt_pch_nx_named_label_use_entry (void *);
+#define gt_pch_n_25vec_incomplete_var_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_incomplete_var_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_incomplete_var_va_gc_ (void *);
+#define gt_pch_n_27hash_table_typename_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_typename_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_typename_hasher_ (void *);
+#define gt_pch_n_29hash_table_mangled_decl_hash_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_mangled_decl_hash_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_mangled_decl_hash_ (void *);
+#define gt_pch_n_27vec_pending_noexcept_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_pending_noexcept_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_pending_noexcept_va_gc_ (void *);
+#define gt_pch_n_19vec_tree_int_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_tree_int_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_tree_int_va_gc_ (void *);
+#define gt_pch_n_28hash_table_conv_type_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_conv_type_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_conv_type_hasher_ (void *);
+#define gt_pch_n_16pending_template(X) do { \
+  if (X != NULL) gt_pch_nx_pending_template (X);\
+  } while (0)
+extern void gt_pch_nx_pending_template (void *);
+#define gt_pch_n_10spec_entry(X) do { \
+  if (X != NULL) gt_pch_nx_spec_entry (X);\
+  } while (0)
+extern void gt_pch_nx_spec_entry (void *);
+#define gt_pch_n_23hash_table_spec_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_spec_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_spec_hasher_ (void *);
+#define gt_pch_n_12constr_entry(X) do { \
+  if (X != NULL) gt_pch_nx_constr_entry (X);\
+  } while (0)
+extern void gt_pch_nx_constr_entry (void *);
+#define gt_pch_n_25hash_table_constr_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_constr_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_constr_hasher_ (void *);
+#define gt_pch_n_20constraint_sat_entry(X) do { \
+  if (X != NULL) gt_pch_nx_constraint_sat_entry (X);\
+  } while (0)
+extern void gt_pch_nx_constraint_sat_entry (void *);
+#define gt_pch_n_18concept_spec_entry(X) do { \
+  if (X != NULL) gt_pch_nx_concept_spec_entry (X);\
+  } while (0)
+extern void gt_pch_nx_concept_spec_entry (void *);
+#define gt_pch_n_33hash_table_constraint_sat_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_constraint_sat_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_constraint_sat_hasher_ (void *);
+#define gt_pch_n_31hash_table_concept_spec_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_concept_spec_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_concept_spec_hasher_ (void *);
+#define gt_pch_n_17subsumption_entry(X) do { \
+  if (X != NULL) gt_pch_nx_subsumption_entry (X);\
+  } while (0)
+extern void gt_pch_nx_subsumption_entry (void *);
+#define gt_pch_n_30hash_table_subsumption_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_subsumption_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_subsumption_hasher_ (void *);
+#define gt_pch_n_18vec_tinfo_s_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_tinfo_s_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_tinfo_s_va_gc_ (void *);
+#define gt_pch_n_26vec_deferred_access_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_deferred_access_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_deferred_access_va_gc_ (void *);
+#define gt_pch_n_30hash_table_cplus_array_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_cplus_array_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_cplus_array_hasher_ (void *);
+#define gt_pch_n_23hash_table_list_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_list_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_list_hasher_ (void *);
+#define gt_pch_n_21pending_abstract_type(X) do { \
+  if (X != NULL) gt_pch_nx_pending_abstract_type (X);\
+  } while (0)
+extern void gt_pch_nx_pending_abstract_type (void *);
+#define gt_pch_n_32hash_table_abstract_type_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_abstract_type_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_abstract_type_hasher_ (void *);
+#define gt_pch_n_9Statement(X) do { \
+  if (X != NULL) gt_pch_nx_Statement (X);\
+  } while (0)
+extern void gt_pch_nx_Statement (void *);
+#define gt_pch_n_13binding_level(X) do { \
+  if (X != NULL) gt_pch_nx_binding_level (X);\
+  } while (0)
+extern void gt_pch_nx_binding_level (void *);
+#define gt_pch_n_17d_label_use_entry(X) do { \
+  if (X != NULL) gt_pch_nx_d_label_use_entry (X);\
+  } while (0)
+extern void gt_pch_nx_d_label_use_entry (void *);
+#define gt_pch_n_34hash_map_Statement__d_label_entry_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_map_Statement__d_label_entry_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_map_Statement__d_label_entry_ (void *);
+#define gt_pch_n_25hash_table_module_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_module_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_module_hasher_ (void *);
+#define gt_pch_n_17module_htab_entry(X) do { \
+  if (X != NULL) gt_pch_nx_module_htab_entry (X);\
+  } while (0)
+extern void gt_pch_nx_module_htab_entry (void *);
+#define gt_pch_n_30hash_table_module_decl_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_module_decl_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_module_decl_hasher_ (void *);
+#define gt_pch_n_16objc_map_private(X) do { \
+  if (X != NULL) gt_pch_nx_objc_map_private (X);\
+  } while (0)
+extern void gt_pch_nx_objc_map_private (void *);
+#define gt_pch_n_12hashed_entry(X) do { \
+  if (X != NULL) gt_pch_nx_hashed_entry (X);\
+  } while (0)
+extern void gt_pch_nx_hashed_entry (void *);
+#define gt_pch_n_16hashed_attribute(X) do { \
+  if (X != NULL) gt_pch_nx_hashed_attribute (X);\
+  } while (0)
+extern void gt_pch_nx_hashed_attribute (void *);
+#define gt_pch_n_9imp_entry(X) do { \
+  if (X != NULL) gt_pch_nx_imp_entry (X);\
+  } while (0)
+extern void gt_pch_nx_imp_entry (void *);
+#define gt_pch_n_17string_descriptor(X) do { \
+  if (X != NULL) gt_pch_nx_string_descriptor (X);\
+  } while (0)
+extern void gt_pch_nx_string_descriptor (void *);
+#define gt_pch_n_30hash_table_objc_string_hasher_(X) do { \
+  if (X != NULL) gt_pch_nx_hash_table_objc_string_hasher_ (X);\
+  } while (0)
+extern void gt_pch_nx_hash_table_objc_string_hasher_ (void *);
+#define gt_pch_n_27vec_ident_data_tuple_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_ident_data_tuple_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_ident_data_tuple_va_gc_ (void *);
+#define gt_pch_n_23vec_msgref_entry_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_msgref_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_msgref_entry_va_gc_ (void *);
+#define gt_pch_n_26vec_prot_list_entry_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_prot_list_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_prot_list_entry_va_gc_ (void *);
+#define gt_pch_n_24vec_ivarref_entry_va_gc_(X) do { \
+  if (X != NULL) gt_pch_nx_vec_ivarref_entry_va_gc_ (X);\
+  } while (0)
+extern void gt_pch_nx_vec_ivarref_entry_va_gc_ (void *);
+
+/* functions code */
+
+/* Local pointer-walking routines.  */
+#define gt_pch_p_9tree_node gt_pch_p_14lang_tree_node
+extern void gt_pch_p_9line_maps
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9cpp_token
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9cpp_macro
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_13string_concat
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_16string_concat_db
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_38hash_map_location_hash_string_concat__
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11bitmap_head
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_7rtx_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_7rtx_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_7rtx_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_7rtx_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_7rtx_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_7rtx_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_7rtx_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_7rtx_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_7rtx_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_7rtx_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_7rtx_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_7rtx_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_7rtx_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9rtvec_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11symtab_node
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11symtab_node
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11symtab_node
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_7section
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_16cl_target_option
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_15cl_optimization
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_8edge_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_15basic_block_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_16machine_function
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_14bitmap_element
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_34generic_wide_int_wide_int_storage_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_13coverage_data
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9mem_attrs
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9reg_attrs
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_12object_block
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_14vec_rtx_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_10real_value
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11fixed_value
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_23constant_descriptor_rtx
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_8function
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_10target_rtl
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_15cgraph_rtl_info
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_37hash_map_tree_tree_tree_cache_traits_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_12ptr_info_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_14range_info_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_10die_struct
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_26vec_constructor_elt_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_15vec_tree_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9lang_type
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9lang_decl
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_24tree_statement_list_node
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_14target_globals
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_14lang_tree_node
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_8tree_map
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_13tree_decl_map
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_12tree_int_map
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_12tree_vec_map
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_21vec_alias_pair_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_13libfunc_entry
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_26hash_table_libfunc_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_15target_libfuncs
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_14sequence_stack
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_20vec_rtx_insn__va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_18call_site_record_d
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_16vec_uchar_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_27vec_call_site_record_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9gimple_df
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11dw_fde_node
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_17rtx_constant_pool
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11frame_space
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11stack_usage
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9eh_status
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_18control_flow_graph
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_5loops
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_17language_function
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_14hash_set_tree_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_24types_used_by_vars_entry
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_28hash_table_used_type_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_13nb_iter_bound
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9loop_exit
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_4loop
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_10control_iv
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_17vec_loop_p_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_10niter_desc
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_28hash_table_loop_exit_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_22vec_basic_block_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11rtl_bb_info
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_15vec_edge_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_20vec_ipa_ref_t_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_18section_hash_entry
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_18lto_file_decl_data
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_15ipa_replace_map
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_27vec_ipa_replace_map__va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_17cgraph_simd_clone
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_28cgraph_function_version_info
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11cgraph_edge
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_30hash_table_cgraph_edge_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_25cgraph_indirect_call_info
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_8asm_node
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_12symbol_table
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_31hash_table_section_name_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_26hash_table_asmname_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_42hash_map_symtab_node__symbol_priority_map_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_24constant_descriptor_tree
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_28hash_map_alias_set_hash_int_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_15alias_set_entry
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_27vec_alias_set_entry__va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_35hash_table_function_version_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_17lto_in_decl_state
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_35hash_table_ipa_bit_ggc_hash_traits_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_34hash_table_ipa_vr_ggc_hash_traits_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_15ipa_node_params
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_13ipa_edge_args
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_25ipa_agg_replacement_value
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_14ipa_fn_summary
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_10odr_type_d
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_8typeinfo
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11dw_cfi_node
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_17dw_loc_descr_node
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_18dw_loc_list_struct
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_18dw_discr_list_node
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_15dw_cfa_location
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_21vec_dw_cfi_ref_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_16addr_table_entry
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_20indirect_string_node
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_15dwarf_file_data
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_20hash_map_char__tree_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_10dw_cfi_row
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_17reg_saved_in_data
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_21vec_dw_fde_ref_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_34hash_table_indirect_string_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_16comdat_type_node
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_29vec_dw_line_info_entry_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_18dw_line_info_table
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_23vec_dw_attr_node_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_16limbo_die_struct
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_29hash_table_dwarf_file_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_27hash_table_decl_die_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_21vec_dw_die_ref_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_21variable_value_struct
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_33hash_table_variable_value_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_28hash_table_block_die_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_12var_loc_node
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_16var_loc_list_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_17call_arg_loc_node
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_27hash_table_decl_loc_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_22cached_dw_loc_list_def
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_30hash_table_dw_loc_list_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_30vec_dw_line_info_table__va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_24vec_pubname_entry_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_24vec_macinfo_entry_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_20vec_dw_ranges_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_29vec_dw_ranges_by_label_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_24vec_die_arg_entry_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_23hash_table_addr_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_27hash_map_tree_sym_off_pair_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_17inline_entry_data
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_36hash_table_inline_entry_data_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9temp_slot
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_20initial_value_struct
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_22vec_temp_slot_p_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_28hash_table_const_int_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_33hash_table_const_wide_int_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_33hash_table_const_poly_int_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_27hash_table_reg_attr_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_31hash_table_const_double_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_30hash_table_const_fixed_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11eh_region_d
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_16eh_landing_pad_d
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_10eh_catch_d
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_20vec_eh_region_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_25vec_eh_landing_pad_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_21hash_map_gimple__int_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_29hash_table_insn_cache_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_23temp_slot_address_entry
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_31hash_table_temp_address_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_24hash_map_tree_hash_tree_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11test_struct
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_14test_of_length
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_10test_other
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_13test_of_union
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_12example_base
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_12example_base
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_12example_base
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9test_node
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11user_struct
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_31hash_table_libfunc_decl_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_16string_pool_data
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9type_hash
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_29hash_table_type_cache_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_26hash_table_int_cst_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_31hash_table_poly_int_cst_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_28hash_table_cl_option_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_38hash_table_tree_decl_map_cache_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_37hash_table_tree_vec_map_cache_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_26hash_table_section_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_31hash_table_object_block_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_34hash_table_tree_descriptor_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_33hash_table_const_rtx_desc_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_27hash_table_tm_clone_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_6gimple
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_15tm_restart_node
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_19hash_map_tree_tree_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_27hash_table_ssa_name_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_29hash_table_tm_restart_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_28vec_mem_addr_template_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_13scev_info_str
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_28hash_table_scev_info_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_20ssa_operand_memory_d
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_28grid_launch_attributes_trees
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_24hash_map_char__unsigned_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_18vec_gimple__va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_16value_range_base
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_26vec_ipa_agg_jf_item_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_8ipa_bits
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_31vec_ipa_param_descriptor_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_20vec_ipa_bits__va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_17vec_ipa_vr_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_19ipcp_transformation
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_24vec_ipa_jump_func_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_39vec_ipa_polymorphic_call_context_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_17ipa_node_params_t
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_19ipa_edge_args_sum_t
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_38function_summary_ipcp_transformation__
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_29hash_table_tm_wrapper_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_29hash_table_decl_state_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_20vec_condition_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_26vec_size_time_entry_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_44fast_function_summary_ipa_fn_summary__va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_13tree_type_map
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_38hash_table_tree_type_map_cache_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_19vec_odr_type_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_38vec_hsa_decl_kernel_map_element_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_35hash_table_value_annotation_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_27vec_Entity_Id_va_gc_atomic_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_19tree_entity_vec_map
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_29hash_table_dummy_type_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11parm_attr_d
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_20vec_parm_attr_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_10stmt_group
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9elab_info
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_18range_check_info_d
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_27vec_range_check_info_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11loop_info_d
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_20vec_loop_info_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_18gnat_binding_level
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_13pad_type_hash
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_27hash_table_pad_type_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_12c_label_vars
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9c_binding
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_7c_scope
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_15c_goto_bindings
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_28vec_c_goto_bindings_p_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_15c_inline_static
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_18sorted_fields_type
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_23vec_const_char_p_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_22vec_tree_gc_vec_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11align_stack
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_23vec_pending_weak_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_31vec_pending_redefinition_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9opt_stack
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_8c_parser
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_15binding_table_s
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_15binding_entry_s
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11cxx_binding
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_16cp_binding_level
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_27vec_cp_class_binding_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_14cp_token_cache
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_36vec_qualified_typedef_usage_t_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_28vec_cxx_saved_binding_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11saved_scope
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_16cxx_int_tree_map
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_17named_label_entry
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_28hash_table_named_label_hash_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_35hash_table_cxx_int_tree_map_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_22vec_tree_pair_s_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_27hash_table_named_decl_hash_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_11tinst_level
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_32vec_deferred_access_check_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_10tree_check
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_19vec_cp_token_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_8cp_lexer
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_31vec_cp_default_arg_entry_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_17cp_parser_context
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_38vec_cp_unparsed_functions_entry_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9cp_parser
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_16constexpr_fundef
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_35hash_table_constexpr_fundef_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_14constexpr_call
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_33hash_table_constexpr_call_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_21named_label_use_entry
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_25vec_incomplete_var_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_27hash_table_typename_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_29hash_table_mangled_decl_hash_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_27vec_pending_noexcept_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_19vec_tree_int_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_28hash_table_conv_type_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_16pending_template
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_10spec_entry
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_23hash_table_spec_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_12constr_entry
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_25hash_table_constr_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_20constraint_sat_entry
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_18concept_spec_entry
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_33hash_table_constraint_sat_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_31hash_table_concept_spec_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_17subsumption_entry
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_30hash_table_subsumption_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_18vec_tinfo_s_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_26vec_deferred_access_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_30hash_table_cplus_array_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_23hash_table_list_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_21pending_abstract_type
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_32hash_table_abstract_type_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9Statement
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_13binding_level
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_17d_label_use_entry
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_34hash_map_Statement__d_label_entry_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_25hash_table_module_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_17module_htab_entry
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_30hash_table_module_decl_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_16objc_map_private
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_12hashed_entry
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_16hashed_attribute
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_9imp_entry
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_17string_descriptor
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_30hash_table_objc_string_hasher_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_27vec_ident_data_tuple_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_23vec_msgref_entry_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_26vec_prot_list_entry_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
+extern void gt_pch_p_24vec_ivarref_entry_va_gc_
+    (void *, void *, gt_pointer_operator, void *);
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/hard-reg-set.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hard-reg-set.h
new file mode 100644
index 0000000..a728196
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hard-reg-set.h
@@ -0,0 +1,773 @@
+/* Sets (bit vectors) of hard registers, and operations on them.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_HARD_REG_SET_H
+#define GCC_HARD_REG_SET_H
+
+/* Define the type of a set of hard registers.  */
+
+/* HARD_REG_ELT_TYPE is a typedef of the unsigned integral type which
+   will be used for hard reg sets, either alone or in an array.
+
+   If HARD_REG_SET is a macro, its definition is HARD_REG_ELT_TYPE,
+   and it has enough bits to represent all the target machine's hard
+   registers.  Otherwise, it is a typedef for a suitably sized array
+   of HARD_REG_ELT_TYPEs.  HARD_REG_SET_LONGS is defined as how many.
+
+   Note that lots of code assumes that the first part of a regset is
+   the same format as a HARD_REG_SET.  To help make sure this is true,
+   we only try the widest fast integer mode (HOST_WIDEST_FAST_INT)
+   instead of all the smaller types.  This approach loses only if
+   there are very few registers and then only in the few cases where
+   we have an array of HARD_REG_SETs, so it needn't be as complex as
+   it used to be.  */
+
+typedef unsigned HOST_WIDEST_FAST_INT HARD_REG_ELT_TYPE;
+
+#if FIRST_PSEUDO_REGISTER <= HOST_BITS_PER_WIDEST_FAST_INT
+
+#define HARD_REG_SET HARD_REG_ELT_TYPE
+
+#else
+
+#define HARD_REG_SET_LONGS \
+ ((FIRST_PSEUDO_REGISTER + HOST_BITS_PER_WIDEST_FAST_INT - 1)	\
+  / HOST_BITS_PER_WIDEST_FAST_INT)
+typedef HARD_REG_ELT_TYPE HARD_REG_SET[HARD_REG_SET_LONGS];
+
+#endif
+
+/* HARD_REG_SET wrapped into a structure, to make it possible to
+   use HARD_REG_SET even in APIs that should not include
+   hard-reg-set.h.  */
+struct hard_reg_set_container
+{
+  HARD_REG_SET set;
+};
+
+/* HARD_CONST is used to cast a constant to the appropriate type
+   for use with a HARD_REG_SET.  */
+
+#define HARD_CONST(X) ((HARD_REG_ELT_TYPE) (X))
+
+/* Define macros SET_HARD_REG_BIT, CLEAR_HARD_REG_BIT and TEST_HARD_REG_BIT
+   to set, clear or test one bit in a hard reg set of type HARD_REG_SET.
+   All three take two arguments: the set and the register number.
+
+   In the case where sets are arrays of longs, the first argument
+   is actually a pointer to a long.
+
+   Define two macros for initializing a set:
+   CLEAR_HARD_REG_SET and SET_HARD_REG_SET.
+   These take just one argument.
+
+   Also define macros for copying hard reg sets:
+   COPY_HARD_REG_SET and COMPL_HARD_REG_SET.
+   These take two arguments TO and FROM; they read from FROM
+   and store into TO.  COMPL_HARD_REG_SET complements each bit.
+
+   Also define macros for combining hard reg sets:
+   IOR_HARD_REG_SET and AND_HARD_REG_SET.
+   These take two arguments TO and FROM; they read from FROM
+   and combine bitwise into TO.  Define also two variants
+   IOR_COMPL_HARD_REG_SET and AND_COMPL_HARD_REG_SET
+   which use the complement of the set FROM.
+
+   Also define:
+
+   hard_reg_set_subset_p (X, Y), which returns true if X is a subset of Y.
+   hard_reg_set_equal_p (X, Y), which returns true if X and Y are equal.
+   hard_reg_set_intersect_p (X, Y), which returns true if X and Y intersect.
+   hard_reg_set_empty_p (X), which returns true if X is empty.  */
+
+#define UHOST_BITS_PER_WIDE_INT ((unsigned) HOST_BITS_PER_WIDEST_FAST_INT)
+
+#ifdef HARD_REG_SET
+
+#define SET_HARD_REG_BIT(SET, BIT)  \
+ ((SET) |= HARD_CONST (1) << (BIT))
+#define CLEAR_HARD_REG_BIT(SET, BIT)  \
+ ((SET) &= ~(HARD_CONST (1) << (BIT)))
+#define TEST_HARD_REG_BIT(SET, BIT)  \
+ (!!((SET) & (HARD_CONST (1) << (BIT))))
+
+#define CLEAR_HARD_REG_SET(TO) ((TO) = HARD_CONST (0))
+#define SET_HARD_REG_SET(TO) ((TO) = ~ HARD_CONST (0))
+
+#define COPY_HARD_REG_SET(TO, FROM) ((TO) = (FROM))
+#define COMPL_HARD_REG_SET(TO, FROM) ((TO) = ~(FROM))
+
+#define IOR_HARD_REG_SET(TO, FROM) ((TO) |= (FROM))
+#define IOR_COMPL_HARD_REG_SET(TO, FROM) ((TO) |= ~ (FROM))
+#define AND_HARD_REG_SET(TO, FROM) ((TO) &= (FROM))
+#define AND_COMPL_HARD_REG_SET(TO, FROM) ((TO) &= ~ (FROM))
+
+static inline bool
+hard_reg_set_subset_p (const HARD_REG_SET x, const HARD_REG_SET y)
+{
+  return (x & ~y) == HARD_CONST (0);
+}
+
+static inline bool
+hard_reg_set_equal_p (const HARD_REG_SET x, const HARD_REG_SET y)
+{
+  return x == y;
+}
+
+static inline bool
+hard_reg_set_intersect_p (const HARD_REG_SET x, const HARD_REG_SET y)
+{
+  return (x & y) != HARD_CONST (0);
+}
+
+static inline bool
+hard_reg_set_empty_p (const HARD_REG_SET x)
+{
+  return x == HARD_CONST (0);
+}
+
+#else
+
+#define SET_HARD_REG_BIT(SET, BIT)		\
+  ((SET)[(BIT) / UHOST_BITS_PER_WIDE_INT]	\
+   |= HARD_CONST (1) << ((BIT) % UHOST_BITS_PER_WIDE_INT))
+
+#define CLEAR_HARD_REG_BIT(SET, BIT)		\
+  ((SET)[(BIT) / UHOST_BITS_PER_WIDE_INT]	\
+   &= ~(HARD_CONST (1) << ((BIT) % UHOST_BITS_PER_WIDE_INT)))
+
+#define TEST_HARD_REG_BIT(SET, BIT)		\
+  (!!((SET)[(BIT) / UHOST_BITS_PER_WIDE_INT]	\
+      & (HARD_CONST (1) << ((BIT) % UHOST_BITS_PER_WIDE_INT))))
+
+#if FIRST_PSEUDO_REGISTER <= 2*HOST_BITS_PER_WIDEST_FAST_INT
+#define CLEAR_HARD_REG_SET(TO)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     scan_tp_[0] = 0;						\
+     scan_tp_[1] = 0; } while (0)
+
+#define SET_HARD_REG_SET(TO)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     scan_tp_[0] = -1;						\
+     scan_tp_[1] = -1; } while (0)
+
+#define COPY_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] = scan_fp_[0];					\
+     scan_tp_[1] = scan_fp_[1]; } while (0)
+
+#define COMPL_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] = ~ scan_fp_[0];				\
+     scan_tp_[1] = ~ scan_fp_[1]; } while (0)
+
+#define AND_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] &= scan_fp_[0];				\
+     scan_tp_[1] &= scan_fp_[1]; } while (0)
+
+#define AND_COMPL_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] &= ~ scan_fp_[0];				\
+     scan_tp_[1] &= ~ scan_fp_[1]; } while (0)
+
+#define IOR_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] |= scan_fp_[0];				\
+     scan_tp_[1] |= scan_fp_[1]; } while (0)
+
+#define IOR_COMPL_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] |= ~ scan_fp_[0];				\
+     scan_tp_[1] |= ~ scan_fp_[1]; } while (0)
+
+static inline bool
+hard_reg_set_subset_p (const HARD_REG_SET x, const HARD_REG_SET y)
+{
+  return (x[0] & ~y[0]) == 0 && (x[1] & ~y[1]) == 0;
+}
+
+static inline bool
+hard_reg_set_equal_p (const HARD_REG_SET x, const HARD_REG_SET y)
+{
+  return x[0] == y[0] && x[1] == y[1];
+}
+
+static inline bool
+hard_reg_set_intersect_p (const HARD_REG_SET x, const HARD_REG_SET y)
+{
+  return (x[0] & y[0]) != 0 || (x[1] & y[1]) != 0;
+}
+
+static inline bool
+hard_reg_set_empty_p (const HARD_REG_SET x)
+{
+  return x[0] == 0 && x[1] == 0;
+}
+
+#else
+#if FIRST_PSEUDO_REGISTER <= 3*HOST_BITS_PER_WIDEST_FAST_INT
+#define CLEAR_HARD_REG_SET(TO)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     scan_tp_[0] = 0;						\
+     scan_tp_[1] = 0;						\
+     scan_tp_[2] = 0; } while (0)
+
+#define SET_HARD_REG_SET(TO)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     scan_tp_[0] = -1;						\
+     scan_tp_[1] = -1;						\
+     scan_tp_[2] = -1; } while (0)
+
+#define COPY_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] = scan_fp_[0];					\
+     scan_tp_[1] = scan_fp_[1];					\
+     scan_tp_[2] = scan_fp_[2]; } while (0)
+
+#define COMPL_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] = ~ scan_fp_[0];				\
+     scan_tp_[1] = ~ scan_fp_[1];				\
+     scan_tp_[2] = ~ scan_fp_[2]; } while (0)
+
+#define AND_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] &= scan_fp_[0];				\
+     scan_tp_[1] &= scan_fp_[1];				\
+     scan_tp_[2] &= scan_fp_[2]; } while (0)
+
+#define AND_COMPL_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] &= ~ scan_fp_[0];				\
+     scan_tp_[1] &= ~ scan_fp_[1];				\
+     scan_tp_[2] &= ~ scan_fp_[2]; } while (0)
+
+#define IOR_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] |= scan_fp_[0];				\
+     scan_tp_[1] |= scan_fp_[1];				\
+     scan_tp_[2] |= scan_fp_[2]; } while (0)
+
+#define IOR_COMPL_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] |= ~ scan_fp_[0];				\
+     scan_tp_[1] |= ~ scan_fp_[1];				\
+     scan_tp_[2] |= ~ scan_fp_[2]; } while (0)
+
+static inline bool
+hard_reg_set_subset_p (const HARD_REG_SET x, const HARD_REG_SET y)
+{
+  return ((x[0] & ~y[0]) == 0
+	  && (x[1] & ~y[1]) == 0
+	  && (x[2] & ~y[2]) == 0);
+}
+
+static inline bool
+hard_reg_set_equal_p (const HARD_REG_SET x, const HARD_REG_SET y)
+{
+  return x[0] == y[0] && x[1] == y[1] && x[2] == y[2];
+}
+
+static inline bool
+hard_reg_set_intersect_p (const HARD_REG_SET x, const HARD_REG_SET y)
+{
+  return ((x[0] & y[0]) != 0
+	  || (x[1] & y[1]) != 0
+	  || (x[2] & y[2]) != 0);
+}
+
+static inline bool
+hard_reg_set_empty_p (const HARD_REG_SET x)
+{
+  return x[0] == 0 && x[1] == 0 && x[2] == 0;
+}
+
+#else
+#if FIRST_PSEUDO_REGISTER <= 4*HOST_BITS_PER_WIDEST_FAST_INT
+#define CLEAR_HARD_REG_SET(TO)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     scan_tp_[0] = 0;						\
+     scan_tp_[1] = 0;						\
+     scan_tp_[2] = 0;						\
+     scan_tp_[3] = 0; } while (0)
+
+#define SET_HARD_REG_SET(TO)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     scan_tp_[0] = -1;						\
+     scan_tp_[1] = -1;						\
+     scan_tp_[2] = -1;						\
+     scan_tp_[3] = -1; } while (0)
+
+#define COPY_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] = scan_fp_[0];					\
+     scan_tp_[1] = scan_fp_[1];					\
+     scan_tp_[2] = scan_fp_[2];					\
+     scan_tp_[3] = scan_fp_[3]; } while (0)
+
+#define COMPL_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] = ~ scan_fp_[0];				\
+     scan_tp_[1] = ~ scan_fp_[1];				\
+     scan_tp_[2] = ~ scan_fp_[2];				\
+     scan_tp_[3] = ~ scan_fp_[3]; } while (0)
+
+#define AND_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] &= scan_fp_[0];				\
+     scan_tp_[1] &= scan_fp_[1];				\
+     scan_tp_[2] &= scan_fp_[2];				\
+     scan_tp_[3] &= scan_fp_[3]; } while (0)
+
+#define AND_COMPL_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] &= ~ scan_fp_[0];				\
+     scan_tp_[1] &= ~ scan_fp_[1];				\
+     scan_tp_[2] &= ~ scan_fp_[2];				\
+     scan_tp_[3] &= ~ scan_fp_[3]; } while (0)
+
+#define IOR_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] |= scan_fp_[0];				\
+     scan_tp_[1] |= scan_fp_[1];				\
+     scan_tp_[2] |= scan_fp_[2];				\
+     scan_tp_[3] |= scan_fp_[3]; } while (0)
+
+#define IOR_COMPL_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     scan_tp_[0] |= ~ scan_fp_[0];				\
+     scan_tp_[1] |= ~ scan_fp_[1];				\
+     scan_tp_[2] |= ~ scan_fp_[2];				\
+     scan_tp_[3] |= ~ scan_fp_[3]; } while (0)
+
+static inline bool
+hard_reg_set_subset_p (const HARD_REG_SET x, const HARD_REG_SET y)
+{
+  return ((x[0] & ~y[0]) == 0
+	  && (x[1] & ~y[1]) == 0
+	  && (x[2] & ~y[2]) == 0
+	  && (x[3] & ~y[3]) == 0);
+}
+
+static inline bool
+hard_reg_set_equal_p (const HARD_REG_SET x, const HARD_REG_SET y)
+{
+  return x[0] == y[0] && x[1] == y[1] && x[2] == y[2] && x[3] == y[3];
+}
+
+static inline bool
+hard_reg_set_intersect_p (const HARD_REG_SET x, const HARD_REG_SET y)
+{
+  return ((x[0] & y[0]) != 0
+	  || (x[1] & y[1]) != 0
+	  || (x[2] & y[2]) != 0
+	  || (x[3] & y[3]) != 0);
+}
+
+static inline bool
+hard_reg_set_empty_p (const HARD_REG_SET x)
+{
+  return x[0] == 0 && x[1] == 0 && x[2] == 0 && x[3] == 0;
+}
+
+#else /* FIRST_PSEUDO_REGISTER > 4*HOST_BITS_PER_WIDEST_FAST_INT */
+
+#define CLEAR_HARD_REG_SET(TO)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     int i;							\
+     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
+       *scan_tp_++ = 0; } while (0)
+
+#define SET_HARD_REG_SET(TO)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     int i;							\
+     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
+       *scan_tp_++ = -1; } while (0)
+
+#define COPY_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     int i;							\
+     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
+       *scan_tp_++ = *scan_fp_++; } while (0)
+
+#define COMPL_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     int i;							\
+     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
+       *scan_tp_++ = ~ *scan_fp_++; } while (0)
+
+#define AND_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     int i;							\
+     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
+       *scan_tp_++ &= *scan_fp_++; } while (0)
+
+#define AND_COMPL_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     int i;							\
+     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
+       *scan_tp_++ &= ~ *scan_fp_++; } while (0)
+
+#define IOR_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     int i;							\
+     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
+       *scan_tp_++ |= *scan_fp_++; } while (0)
+
+#define IOR_COMPL_HARD_REG_SET(TO, FROM)  \
+do { HARD_REG_ELT_TYPE *scan_tp_ = (TO);			\
+     const HARD_REG_ELT_TYPE *scan_fp_ = (FROM);		\
+     int i;							\
+     for (i = 0; i < HARD_REG_SET_LONGS; i++)			\
+       *scan_tp_++ |= ~ *scan_fp_++; } while (0)
+
+static inline bool
+hard_reg_set_subset_p (const HARD_REG_SET x, const HARD_REG_SET y)
+{
+  int i;
+
+  for (i = 0; i < HARD_REG_SET_LONGS; i++)
+    if ((x[i] & ~y[i]) != 0)
+      return false;
+  return true;
+}
+
+static inline bool
+hard_reg_set_equal_p (const HARD_REG_SET x, const HARD_REG_SET y)
+{
+  int i;
+
+  for (i = 0; i < HARD_REG_SET_LONGS; i++)
+    if (x[i] != y[i])
+      return false;
+  return true;
+}
+
+static inline bool
+hard_reg_set_intersect_p (const HARD_REG_SET x, const HARD_REG_SET y)
+{
+  int i;
+
+  for (i = 0; i < HARD_REG_SET_LONGS; i++)
+    if ((x[i] & y[i]) != 0)
+      return true;
+  return false;
+}
+
+static inline bool
+hard_reg_set_empty_p (const HARD_REG_SET x)
+{
+  int i;
+
+  for (i = 0; i < HARD_REG_SET_LONGS; i++)
+    if (x[i] != 0)
+      return false;
+  return true;
+}
+
+#endif
+#endif
+#endif
+#endif
+
+/* Iterator for hard register sets.  */
+
+struct hard_reg_set_iterator
+{
+  /* Pointer to the current element.  */
+  HARD_REG_ELT_TYPE *pelt;
+
+  /* The length of the set.  */
+  unsigned short length;
+
+  /* Word within the current element.  */
+  unsigned short word_no;
+
+  /* Contents of the actually processed word.  When finding next bit
+     it is shifted right, so that the actual bit is always the least
+     significant bit of ACTUAL.  */
+  HARD_REG_ELT_TYPE bits;
+};
+
+#define HARD_REG_ELT_BITS UHOST_BITS_PER_WIDE_INT
+
+/* The implementation of the iterator functions is fully analogous to
+   the bitmap iterators.  */
+static inline void
+hard_reg_set_iter_init (hard_reg_set_iterator *iter, HARD_REG_SET set,
+                        unsigned min, unsigned *regno)
+{
+#ifdef HARD_REG_SET_LONGS
+  iter->pelt = set;
+  iter->length = HARD_REG_SET_LONGS;
+#else
+  iter->pelt = &set;
+  iter->length = 1;
+#endif
+  iter->word_no = min / HARD_REG_ELT_BITS;
+  if (iter->word_no < iter->length)
+    {
+      iter->bits = iter->pelt[iter->word_no];
+      iter->bits >>= min % HARD_REG_ELT_BITS;
+
+      /* This is required for correct search of the next bit.  */
+      min += !iter->bits;
+    }
+  *regno = min;
+}
+
+static inline bool
+hard_reg_set_iter_set (hard_reg_set_iterator *iter, unsigned *regno)
+{
+  while (1)
+    {
+      /* Return false when we're advanced past the end of the set.  */
+      if (iter->word_no >= iter->length)
+        return false;
+
+      if (iter->bits)
+        {
+          /* Find the correct bit and return it.  */
+          while (!(iter->bits & 1))
+            {
+              iter->bits >>= 1;
+              *regno += 1;
+            }
+          return (*regno < FIRST_PSEUDO_REGISTER);
+        }
+
+      /* Round to the beginning of the next word.  */
+      *regno = (*regno + HARD_REG_ELT_BITS - 1);
+      *regno -= *regno % HARD_REG_ELT_BITS;
+
+      /* Find the next non-zero word.  */
+      while (++iter->word_no < iter->length)
+        {
+          iter->bits = iter->pelt[iter->word_no];
+          if (iter->bits)
+            break;
+          *regno += HARD_REG_ELT_BITS;
+        }
+    }
+}
+
+static inline void
+hard_reg_set_iter_next (hard_reg_set_iterator *iter, unsigned *regno)
+{
+  iter->bits >>= 1;
+  *regno += 1;
+}
+
+#define EXECUTE_IF_SET_IN_HARD_REG_SET(SET, MIN, REGNUM, ITER)          \
+  for (hard_reg_set_iter_init (&(ITER), (SET), (MIN), &(REGNUM));       \
+       hard_reg_set_iter_set (&(ITER), &(REGNUM));                      \
+       hard_reg_set_iter_next (&(ITER), &(REGNUM)))
+
+
+/* Define some standard sets of registers.  */
+
+/* Indexed by hard register number, contains 1 for registers
+   that are being used for global register decls.
+   These must be exempt from ordinary flow analysis
+   and are also considered fixed.  */
+
+extern char global_regs[FIRST_PSEUDO_REGISTER];
+
+struct simplifiable_subreg;
+struct subreg_shape;
+
+struct simplifiable_subregs_hasher : nofree_ptr_hash <simplifiable_subreg>
+{
+  typedef const subreg_shape *compare_type;
+
+  static inline hashval_t hash (const simplifiable_subreg *);
+  static inline bool equal (const simplifiable_subreg *, const subreg_shape *);
+};
+
+struct target_hard_regs {
+  void finalize ();
+
+  /* The set of registers that actually exist on the current target.  */
+  HARD_REG_SET x_accessible_reg_set;
+
+  /* The set of registers that should be considered to be register
+     operands.  It is a subset of x_accessible_reg_set.  */
+  HARD_REG_SET x_operand_reg_set;
+
+  /* Indexed by hard register number, contains 1 for registers
+     that are fixed use (stack pointer, pc, frame pointer, etc.;.
+     These are the registers that cannot be used to allocate
+     a pseudo reg whose life does not cross calls.  */
+  char x_fixed_regs[FIRST_PSEUDO_REGISTER];
+
+  /* The same info as a HARD_REG_SET.  */
+  HARD_REG_SET x_fixed_reg_set;
+
+  /* Indexed by hard register number, contains 1 for registers
+     that are fixed use or are clobbered by function calls.
+     These are the registers that cannot be used to allocate
+     a pseudo reg whose life crosses calls.  */
+  char x_call_used_regs[FIRST_PSEUDO_REGISTER];
+
+  char x_call_really_used_regs[FIRST_PSEUDO_REGISTER];
+
+  /* The same info as a HARD_REG_SET.  */
+  HARD_REG_SET x_call_used_reg_set;
+
+  /* Contains registers that are fixed use -- i.e. in fixed_reg_set -- or
+     a function value return register or TARGET_STRUCT_VALUE_RTX or
+     STATIC_CHAIN_REGNUM.  These are the registers that cannot hold quantities
+     across calls even if we are willing to save and restore them.  */
+  HARD_REG_SET x_call_fixed_reg_set;
+
+  /* Contains registers that are fixed use -- i.e. in fixed_reg_set -- but
+     only if they are not merely part of that set because they are global
+     regs.  Global regs that are not otherwise fixed can still take part
+     in register allocation.  */
+  HARD_REG_SET x_fixed_nonglobal_reg_set;
+
+  /* Contains 1 for registers that are set or clobbered by calls.  */
+  /* ??? Ideally, this would be just call_used_regs plus global_regs, but
+     for someone's bright idea to have call_used_regs strictly include
+     fixed_regs.  Which leaves us guessing as to the set of fixed_regs
+     that are actually preserved.  We know for sure that those associated
+     with the local stack frame are safe, but scant others.  */
+  HARD_REG_SET x_regs_invalidated_by_call;
+
+  /* Call used hard registers which cannot be saved because there is no
+     insn for this.  */
+  HARD_REG_SET x_no_caller_save_reg_set;
+
+  /* Table of register numbers in the order in which to try to use them.  */
+  int x_reg_alloc_order[FIRST_PSEUDO_REGISTER];
+
+  /* The inverse of reg_alloc_order.  */
+  int x_inv_reg_alloc_order[FIRST_PSEUDO_REGISTER];
+
+  /* For each reg class, a HARD_REG_SET saying which registers are in it.  */
+  HARD_REG_SET x_reg_class_contents[N_REG_CLASSES];
+
+  /* For each reg class, a boolean saying whether the class contains only
+     fixed registers.  */
+  bool x_class_only_fixed_regs[N_REG_CLASSES];
+
+  /* For each reg class, number of regs it contains.  */
+  unsigned int x_reg_class_size[N_REG_CLASSES];
+
+  /* For each reg class, table listing all the classes contained in it.  */
+  enum reg_class x_reg_class_subclasses[N_REG_CLASSES][N_REG_CLASSES];
+
+  /* For each pair of reg classes,
+     a largest reg class contained in their union.  */
+  enum reg_class x_reg_class_subunion[N_REG_CLASSES][N_REG_CLASSES];
+
+  /* For each pair of reg classes,
+     the smallest reg class that contains their union.  */
+  enum reg_class x_reg_class_superunion[N_REG_CLASSES][N_REG_CLASSES];
+
+  /* Vector indexed by hardware reg giving its name.  */
+  const char *x_reg_names[FIRST_PSEUDO_REGISTER];
+
+  /* Records which registers can form a particular subreg, with the subreg
+     being identified by its outer mode, inner mode and offset.  */
+  hash_table <simplifiable_subregs_hasher> *x_simplifiable_subregs;
+};
+
+extern struct target_hard_regs default_target_hard_regs;
+#if SWITCHABLE_TARGET
+extern struct target_hard_regs *this_target_hard_regs;
+#else
+#define this_target_hard_regs (&default_target_hard_regs)
+#endif
+
+#define accessible_reg_set \
+  (this_target_hard_regs->x_accessible_reg_set)
+#define operand_reg_set \
+  (this_target_hard_regs->x_operand_reg_set)
+#define fixed_regs \
+  (this_target_hard_regs->x_fixed_regs)
+#define fixed_reg_set \
+  (this_target_hard_regs->x_fixed_reg_set)
+#define fixed_nonglobal_reg_set \
+  (this_target_hard_regs->x_fixed_nonglobal_reg_set)
+#define call_used_regs \
+  (this_target_hard_regs->x_call_used_regs)
+#define call_really_used_regs \
+  (this_target_hard_regs->x_call_really_used_regs)
+#define call_used_reg_set \
+  (this_target_hard_regs->x_call_used_reg_set)
+#define call_fixed_reg_set \
+  (this_target_hard_regs->x_call_fixed_reg_set)
+#define regs_invalidated_by_call \
+  (this_target_hard_regs->x_regs_invalidated_by_call)
+#define no_caller_save_reg_set \
+  (this_target_hard_regs->x_no_caller_save_reg_set)
+#define reg_alloc_order \
+  (this_target_hard_regs->x_reg_alloc_order)
+#define inv_reg_alloc_order \
+  (this_target_hard_regs->x_inv_reg_alloc_order)
+#define reg_class_contents \
+  (this_target_hard_regs->x_reg_class_contents)
+#define class_only_fixed_regs \
+  (this_target_hard_regs->x_class_only_fixed_regs)
+#define reg_class_size \
+  (this_target_hard_regs->x_reg_class_size)
+#define reg_class_subclasses \
+  (this_target_hard_regs->x_reg_class_subclasses)
+#define reg_class_subunion \
+  (this_target_hard_regs->x_reg_class_subunion)
+#define reg_class_superunion \
+  (this_target_hard_regs->x_reg_class_superunion)
+#define reg_names \
+  (this_target_hard_regs->x_reg_names)
+
+/* Vector indexed by reg class giving its name.  */
+
+extern const char * reg_class_names[];
+
+/* Given a hard REGN a FROM mode and a TO mode, return true if
+   REGN can change from mode FROM to mode TO.  */
+#define REG_CAN_CHANGE_MODE_P(REGN, FROM, TO)                          \
+  (targetm.can_change_mode_class (FROM, TO, REGNO_REG_CLASS (REGN)))
+
+#endif /* ! GCC_HARD_REG_SET_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/hash-map-traits.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hash-map-traits.h
new file mode 100644
index 0000000..af66018
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hash-map-traits.h
@@ -0,0 +1,188 @@
+/* A hash map traits.
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef HASH_MAP_TRAITS_H
+#define HASH_MAP_TRAITS_H
+
+/* Bacause mem-stats.h uses default hashmap traits, we have to
+   put the class to this separate header file.  */
+
+#include "hash-traits.h"
+
+/* Implement hash_map traits for a key with hash traits H.  Empty and
+   deleted map entries are represented as empty and deleted keys.  */
+
+template <typename H, typename Value>
+struct simple_hashmap_traits
+{
+  typedef typename H::value_type key_type;
+  static const bool maybe_mx = true;
+  static inline hashval_t hash (const key_type &);
+  static inline bool equal_keys (const key_type &, const key_type &);
+  template <typename T> static inline void remove (T &);
+  template <typename T> static inline bool is_empty (const T &);
+  template <typename T> static inline bool is_deleted (const T &);
+  template <typename T> static inline void mark_empty (T &);
+  template <typename T> static inline void mark_deleted (T &);
+};
+
+template <typename H, typename Value>
+inline hashval_t
+simple_hashmap_traits <H, Value>::hash (const key_type &h)
+{
+  return H::hash (h);
+}
+
+template <typename H, typename Value>
+inline bool
+simple_hashmap_traits <H, Value>::equal_keys (const key_type &k1,
+					      const key_type &k2)
+{
+  return H::equal (k1, k2);
+}
+
+template <typename H, typename Value>
+template <typename T>
+inline void
+simple_hashmap_traits <H, Value>::remove (T &entry)
+{
+  H::remove (entry.m_key);
+  entry.m_value.~Value ();
+}
+
+template <typename H, typename Value>
+template <typename T>
+inline bool
+simple_hashmap_traits <H, Value>::is_empty (const T &entry)
+{
+  return H::is_empty (entry.m_key);
+}
+
+template <typename H, typename Value>
+template <typename T>
+inline bool
+simple_hashmap_traits <H, Value>::is_deleted (const T &entry)
+{
+  return H::is_deleted (entry.m_key);
+}
+
+template <typename H, typename Value>
+template <typename T>
+inline void
+simple_hashmap_traits <H, Value>::mark_empty (T &entry)
+{
+  H::mark_empty (entry.m_key);
+}
+
+template <typename H, typename Value>
+template <typename T>
+inline void
+simple_hashmap_traits <H, Value>::mark_deleted (T &entry)
+{
+  H::mark_deleted (entry.m_key);
+}
+
+template <typename H, typename Value>
+struct simple_cache_map_traits: public simple_hashmap_traits<H,Value>
+{
+  static const bool maybe_mx = false;
+};
+
+/* Implement traits for a hash_map with values of type Value for cases
+   in which the key cannot represent empty and deleted slots.  Instead
+   record empty and deleted entries in Value.  Derived classes must
+   implement the hash and equal_keys functions.  */
+
+template <typename Value>
+struct unbounded_hashmap_traits
+{
+  template <typename T> static inline void remove (T &);
+  template <typename T> static inline bool is_empty (const T &);
+  template <typename T> static inline bool is_deleted (const T &);
+  template <typename T> static inline void mark_empty (T &);
+  template <typename T> static inline void mark_deleted (T &);
+};
+
+template <typename Value>
+template <typename T>
+inline void
+unbounded_hashmap_traits <Value>::remove (T &entry)
+{
+  default_hash_traits <Value>::remove (entry.m_value);
+}
+
+template <typename Value>
+template <typename T>
+inline bool
+unbounded_hashmap_traits <Value>::is_empty (const T &entry)
+{
+  return default_hash_traits <Value>::is_empty (entry.m_value);
+}
+
+template <typename Value>
+template <typename T>
+inline bool
+unbounded_hashmap_traits <Value>::is_deleted (const T &entry)
+{
+  return default_hash_traits <Value>::is_deleted (entry.m_value);
+}
+
+template <typename Value>
+template <typename T>
+inline void
+unbounded_hashmap_traits <Value>::mark_empty (T &entry)
+{
+  default_hash_traits <Value>::mark_empty (entry.m_value);
+}
+
+template <typename Value>
+template <typename T>
+inline void
+unbounded_hashmap_traits <Value>::mark_deleted (T &entry)
+{
+  default_hash_traits <Value>::mark_deleted (entry.m_value);
+}
+
+/* Implement traits for a hash_map from integer type Key to Value in
+   cases where Key has no spare values for recording empty and deleted
+   slots.  */
+
+template <typename Key, typename Value>
+struct unbounded_int_hashmap_traits : unbounded_hashmap_traits <Value>
+{
+  typedef Key key_type;
+  static inline hashval_t hash (Key);
+  static inline bool equal_keys (Key, Key);
+};
+
+template <typename Key, typename Value>
+inline hashval_t
+unbounded_int_hashmap_traits <Key, Value>::hash (Key k)
+{
+  return k;
+}
+
+template <typename Key, typename Value>
+inline bool
+unbounded_int_hashmap_traits <Key, Value>::equal_keys (Key k1, Key k2)
+{
+  return k1 == k2;
+}
+
+#endif // HASH_MAP_TRAITS_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/hash-map.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hash-map.h
new file mode 100644
index 0000000..9d41696
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hash-map.h
@@ -0,0 +1,301 @@
+/* A type-safe hash map.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+#ifndef hash_map_h
+#define hash_map_h
+
+template<typename KeyId, typename Value,
+	 typename Traits>
+class GTY((user)) hash_map
+{
+  typedef typename Traits::key_type Key;
+  struct hash_entry
+  {
+    Key m_key;
+    Value m_value;
+
+    typedef hash_entry value_type;
+    typedef Key compare_type;
+
+    static hashval_t hash (const hash_entry &e)
+      {
+       	return Traits::hash (e.m_key);
+      }
+
+    static bool equal (const hash_entry &a, const Key &b)
+       	{
+	  return Traits::equal_keys (a.m_key, b);
+       	}
+
+    static void remove (hash_entry &e) { Traits::remove (e); }
+
+    static void mark_deleted (hash_entry &e) { Traits::mark_deleted (e); }
+
+    static bool is_deleted (const hash_entry &e)
+      {
+       	return Traits::is_deleted (e);
+      }
+
+    static void mark_empty (hash_entry &e) { Traits::mark_empty (e); }
+    static bool is_empty (const hash_entry &e) { return Traits::is_empty (e); }
+
+    static void ggc_mx (hash_entry &e)
+      {
+	gt_ggc_mx (e.m_key);
+	gt_ggc_mx (e.m_value);
+      }
+
+    static void ggc_maybe_mx (hash_entry &e)
+      {
+	if (Traits::maybe_mx)
+	  ggc_mx (e);
+      }
+
+    static void pch_nx (hash_entry &e)
+      {
+	gt_pch_nx (e.m_key);
+	gt_pch_nx (e.m_value);
+      }
+
+    static void pch_nx (hash_entry &e, gt_pointer_operator op, void *c)
+      {
+	pch_nx_helper (e.m_key, op, c);
+	pch_nx_helper (e.m_value, op, c);
+      }
+
+    static int keep_cache_entry (hash_entry &e)
+      {
+	return ggc_marked_p (e.m_key);
+      }
+
+  private:
+    template<typename T>
+    static void
+      pch_nx_helper (T &x, gt_pointer_operator op, void *cookie)
+	{
+	  gt_pch_nx (&x, op, cookie);
+	}
+
+    static void
+      pch_nx_helper (int, gt_pointer_operator, void *)
+	{
+	}
+
+    static void
+      pch_nx_helper (unsigned int, gt_pointer_operator, void *)
+	{
+	}
+
+    static void
+      pch_nx_helper (bool, gt_pointer_operator, void *)
+	{
+	}
+
+    template<typename T>
+      static void
+      pch_nx_helper (T *&x, gt_pointer_operator op, void *cookie)
+	{
+	  op (&x, cookie);
+	}
+  };
+
+public:
+  explicit hash_map (size_t n = 13, bool ggc = false,
+		     bool gather_mem_stats = GATHER_STATISTICS
+		     CXX_MEM_STAT_INFO)
+    : m_table (n, ggc, gather_mem_stats, HASH_MAP_ORIGIN PASS_MEM_STAT) {}
+
+  explicit hash_map (const hash_map &h, bool ggc = false,
+		     bool gather_mem_stats = GATHER_STATISTICS
+		     CXX_MEM_STAT_INFO)
+    : m_table (h.m_table, ggc, gather_mem_stats,
+	       HASH_MAP_ORIGIN PASS_MEM_STAT) {}
+
+  /* Create a hash_map in ggc memory.  */
+  static hash_map *create_ggc (size_t size,
+			       bool gather_mem_stats = GATHER_STATISTICS
+			       CXX_MEM_STAT_INFO)
+    {
+      hash_map *map = ggc_alloc<hash_map> ();
+      new (map) hash_map (size, true, gather_mem_stats PASS_MEM_STAT);
+      return map;
+    }
+
+  /* If key k isn't already in the map add key k with value v to the map, and
+     return false.  Otherwise set the value of the entry for key k to be v and
+     return true.  */
+
+  bool put (const Key &k, const Value &v)
+    {
+      hash_entry *e = m_table.find_slot_with_hash (k, Traits::hash (k),
+						   INSERT);
+      bool existed = !hash_entry::is_empty (*e);
+      if (!existed)
+	e->m_key = k;
+
+      e->m_value = v;
+      return existed;
+    }
+
+  /* if the passed in key is in the map return its value otherwise NULL.  */
+
+  Value *get (const Key &k)
+    {
+      hash_entry &e = m_table.find_with_hash (k, Traits::hash (k));
+      return Traits::is_empty (e) ? NULL : &e.m_value;
+    }
+
+  /* Return a reference to the value for the passed in key, creating the entry
+     if it doesn't already exist.  If existed is not NULL then it is set to false
+     if the key was not previously in the map, and true otherwise.  */
+
+  Value &get_or_insert (const Key &k, bool *existed = NULL)
+    {
+      hash_entry *e = m_table.find_slot_with_hash (k, Traits::hash (k),
+						   INSERT);
+      bool ins = Traits::is_empty (*e);
+      if (ins)
+	e->m_key = k;
+
+      if (existed != NULL)
+	*existed = !ins;
+
+      return e->m_value;
+    }
+
+  void remove (const Key &k)
+    {
+      m_table.remove_elt_with_hash (k, Traits::hash (k));
+    }
+
+  /* Call the call back on each pair of key and value with the passed in
+     arg.  */
+
+  template<typename Arg, bool (*f)(const typename Traits::key_type &,
+				   const Value &, Arg)>
+  void traverse (Arg a) const
+    {
+      for (typename hash_table<hash_entry>::iterator iter = m_table.begin ();
+	   iter != m_table.end (); ++iter)
+	f ((*iter).m_key, (*iter).m_value, a);
+    }
+
+  template<typename Arg, bool (*f)(const typename Traits::key_type &,
+				   Value *, Arg)>
+  void traverse (Arg a) const
+    {
+      for (typename hash_table<hash_entry>::iterator iter = m_table.begin ();
+	   iter != m_table.end (); ++iter)
+	if (!f ((*iter).m_key, &(*iter).m_value, a))
+	  break;
+    }
+
+  size_t elements () const { return m_table.elements (); }
+
+  void empty () { m_table.empty(); }
+
+  class iterator
+  {
+  public:
+    explicit iterator (const typename hash_table<hash_entry>::iterator &iter) :
+      m_iter (iter) {}
+
+    iterator &operator++ ()
+    {
+      ++m_iter;
+      return *this;
+    }
+
+    /* Can't use std::pair here, because GCC before 4.3 don't handle
+       std::pair where template parameters are references well.
+       See PR86739.  */
+    struct reference_pair {
+      const Key &first;
+      Value &second;
+
+      reference_pair (const Key &key, Value &value) : first (key), second (value) {}
+
+      template <typename K, typename V>
+      operator std::pair<K, V> () const { return std::pair<K, V> (first, second); }
+    };
+
+    reference_pair operator* ()
+    {
+      hash_entry &e = *m_iter;
+      return reference_pair (e.m_key, e.m_value);
+    }
+
+    bool
+    operator != (const iterator &other) const
+    {
+      return m_iter != other.m_iter;
+    }
+
+  private:
+    typename hash_table<hash_entry>::iterator m_iter;
+  };
+
+  /* Standard iterator retrieval methods.  */
+
+  iterator  begin () const { return iterator (m_table.begin ()); }
+  iterator end () const { return iterator (m_table.end ()); }
+
+private:
+
+  template<typename T, typename U, typename V> friend void gt_ggc_mx (hash_map<T, U, V> *);
+  template<typename T, typename U, typename V> friend void gt_pch_nx (hash_map<T, U, V> *);
+  template<typename T, typename U, typename V> friend void gt_pch_nx (hash_map<T, U, V> *, gt_pointer_operator, void *);
+  template<typename T, typename U, typename V> friend void gt_cleare_cache (hash_map<T, U, V> *);
+
+  hash_table<hash_entry> m_table;
+};
+
+/* ggc marking routines.  */
+
+template<typename K, typename V, typename H>
+static inline void
+gt_ggc_mx (hash_map<K, V, H> *h)
+{
+  gt_ggc_mx (&h->m_table);
+}
+
+template<typename K, typename V, typename H>
+static inline void
+gt_pch_nx (hash_map<K, V, H> *h)
+{
+  gt_pch_nx (&h->m_table);
+}
+
+template<typename K, typename V, typename H>
+static inline void
+gt_cleare_cache (hash_map<K, V, H> *h)
+{
+  if (h)
+    gt_cleare_cache (&h->m_table);
+}
+
+template<typename K, typename V, typename H>
+static inline void
+gt_pch_nx (hash_map<K, V, H> *h, gt_pointer_operator op, void *cookie)
+{
+  op (&h->m_table.m_entries, cookie);
+}
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/hash-set.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hash-set.h
new file mode 100644
index 0000000..8e1f38b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hash-set.h
@@ -0,0 +1,199 @@
+/* A type-safe hash set.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+#ifndef hash_set_h
+#define hash_set_h
+
+template<typename KeyId, bool Lazy = false,
+	 typename Traits = default_hash_traits<KeyId> >
+class hash_set
+{
+public:
+  typedef typename Traits::value_type Key;
+  explicit hash_set (size_t n = 13, bool ggc = false CXX_MEM_STAT_INFO)
+    : m_table (n, ggc, GATHER_STATISTICS, HASH_SET_ORIGIN PASS_MEM_STAT) {}
+
+  /* Create a hash_set in gc memory with space for at least n elements.  */
+
+  static hash_set *
+  create_ggc (size_t n)
+    {
+      hash_set *set = ggc_alloc<hash_set> ();
+      new (set) hash_set (n, true);
+      return set;
+    }
+
+  /* If key k isn't already in the map add it to the map, and
+     return false.  Otherwise return true.  */
+
+  bool add (const Key &k)
+    {
+      Key *e = m_table.find_slot_with_hash (k, Traits::hash (k), INSERT);
+      bool existed = !Traits::is_empty (*e);
+      if (!existed)
+	*e = k;
+
+      return existed;
+    }
+
+  /* if the passed in key is in the map return its value otherwise NULL.  */
+
+  bool contains (const Key &k)
+    {
+      if (Lazy)
+	return (m_table.find_slot_with_hash (k, Traits::hash (k), NO_INSERT)
+		!= NULL);
+      Key &e = m_table.find_with_hash (k, Traits::hash (k));
+      return !Traits::is_empty (e);
+    }
+
+  void remove (const Key &k)
+    {
+      m_table.remove_elt_with_hash (k, Traits::hash (k));
+    }
+
+  /* Call the call back on each pair of key and value with the passed in
+     arg.  */
+
+  template<typename Arg, bool (*f)(const typename Traits::value_type &, Arg)>
+  void traverse (Arg a) const
+    {
+      for (typename hash_table<Traits, Lazy>::iterator iter = m_table.begin ();
+	   iter != m_table.end (); ++iter)
+	f (*iter, a);
+    }
+
+  /* Return the number of elements in the set.  */
+
+  size_t elements () const { return m_table.elements (); }
+
+  /* Clear the hash table.  */
+
+  void empty () { m_table.empty (); }
+
+  class iterator
+  {
+  public:
+    explicit iterator (const typename hash_table<Traits,
+						 Lazy>::iterator &iter) :
+      m_iter (iter) {}
+
+    iterator &operator++ ()
+      {
+	++m_iter;
+	return *this;
+      }
+
+    Key
+    operator* ()
+      {
+	return *m_iter;
+      }
+
+    bool
+    operator != (const iterator &other) const
+      {
+	return m_iter != other.m_iter;
+      }
+
+  private:
+    typename hash_table<Traits, Lazy>::iterator m_iter;
+  };
+
+  /* Standard iterator retrieval methods.  */
+
+  iterator begin () const { return iterator (m_table.begin ()); }
+  iterator end () const { return iterator (m_table.end ()); }
+
+
+private:
+
+  template<typename T, typename U>
+  friend void gt_ggc_mx (hash_set<T, false, U> *);
+  template<typename T, typename U>
+  friend void gt_pch_nx (hash_set<T, false, U> *);
+  template<typename T, typename U>
+  friend void gt_pch_nx (hash_set<T, false, U> *, gt_pointer_operator, void *);
+
+  hash_table<Traits, Lazy> m_table;
+};
+
+/* Generic hash_set<TYPE> debug helper.
+
+   This needs to be instantiated for each hash_set<TYPE> used throughout
+   the compiler like this:
+
+    DEFINE_DEBUG_HASH_SET (TYPE)
+
+   The reason we have a debug_helper() is because GDB can't
+   disambiguate a plain call to debug(some_hash), and it must be called
+   like debug<TYPE>(some_hash).  */
+template<typename T>
+void
+debug_helper (hash_set<T> &ref)
+{
+  for (typename hash_set<T>::iterator it = ref.begin ();
+       it != ref.end (); ++it)
+    {
+      debug_slim (*it);
+      fputc ('\n', stderr);
+    }
+}
+
+#define DEFINE_DEBUG_HASH_SET(T) \
+  template void debug_helper (hash_set<T> &);		\
+  DEBUG_FUNCTION void					\
+  debug (hash_set<T> &ref)				\
+  {							\
+    debug_helper <T> (ref);				\
+  }							\
+  DEBUG_FUNCTION void					\
+  debug (hash_set<T> *ptr)				\
+  {							\
+    if (ptr)						\
+      debug (*ptr);					\
+    else						\
+      fprintf (stderr, "<nil>\n");			\
+  }
+
+/* ggc marking routines.  */
+
+template<typename K, typename H>
+static inline void
+gt_ggc_mx (hash_set<K, false, H> *h)
+{
+  gt_ggc_mx (&h->m_table);
+}
+
+template<typename K, typename H>
+static inline void
+gt_pch_nx (hash_set<K, false, H> *h)
+{
+  gt_pch_nx (&h->m_table);
+}
+
+template<typename K, typename H>
+static inline void
+gt_pch_nx (hash_set<K, false, H> *h, gt_pointer_operator op, void *cookie)
+{
+  op (&h->m_table.m_entries, cookie);
+}
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/hash-table.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hash-table.h
new file mode 100644
index 0000000..7ba6356
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hash-table.h
@@ -0,0 +1,1180 @@
+/* A type-safe hash table template.
+   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Contributed by Lawrence Crowl <crowl@google.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+/* This file implements a typed hash table.
+   The implementation borrows from libiberty's htab_t in hashtab.h.
+
+
+   INTRODUCTION TO TYPES
+
+   Users of the hash table generally need to be aware of three types.
+
+      1. The type being placed into the hash table.  This type is called
+      the value type.
+
+      2. The type used to describe how to handle the value type within
+      the hash table.  This descriptor type provides the hash table with
+      several things.
+
+         - A typedef named 'value_type' to the value type (from above).
+
+         - A static member function named 'hash' that takes a value_type
+         (or 'const value_type &') and returns a hashval_t value.
+
+         - A typedef named 'compare_type' that is used to test when a value
+         is found.  This type is the comparison type.  Usually, it will be the
+         same as value_type.  If it is not the same type, you must generally
+         explicitly compute hash values and pass them to the hash table.
+
+         - A static member function named 'equal' that takes a value_type
+         and a compare_type, and returns a bool.  Both arguments can be
+         const references.
+
+         - A static function named 'remove' that takes an value_type pointer
+         and frees the memory allocated by it.  This function is used when
+         individual elements of the table need to be disposed of (e.g.,
+         when deleting a hash table, removing elements from the table, etc).
+
+	 - An optional static function named 'keep_cache_entry'.  This
+	 function is provided only for garbage-collected elements that
+	 are not marked by the normal gc mark pass.  It describes what
+	 what should happen to the element at the end of the gc mark phase.
+	 The return value should be:
+	   - 0 if the element should be deleted
+	   - 1 if the element should be kept and needs to be marked
+	   - -1 if the element should be kept and is already marked.
+	 Returning -1 rather than 1 is purely an optimization.
+
+      3. The type of the hash table itself.  (More later.)
+
+   In very special circumstances, users may need to know about a fourth type.
+
+      4. The template type used to describe how hash table memory
+      is allocated.  This type is called the allocator type.  It is
+      parameterized on the value type.  It provides two functions:
+
+         - A static member function named 'data_alloc'.  This function
+         allocates the data elements in the table.
+
+         - A static member function named 'data_free'.  This function
+         deallocates the data elements in the table.
+
+   Hash table are instantiated with two type arguments.
+
+      * The descriptor type, (2) above.
+
+      * The allocator type, (4) above.  In general, you will not need to
+      provide your own allocator type.  By default, hash tables will use
+      the class template xcallocator, which uses malloc/free for allocation.
+
+
+   DEFINING A DESCRIPTOR TYPE
+
+   The first task in using the hash table is to describe the element type.
+   We compose this into a few steps.
+
+      1. Decide on a removal policy for values stored in the table.
+         hash-traits.h provides class templates for the four most common
+         policies:
+
+         * typed_free_remove implements the static 'remove' member function
+         by calling free().
+
+         * typed_noop_remove implements the static 'remove' member function
+         by doing nothing.
+
+         * ggc_remove implements the static 'remove' member by doing nothing,
+         but instead provides routines for gc marking and for PCH streaming.
+         Use this for garbage-collected data that needs to be preserved across
+         collections.
+
+         * ggc_cache_remove is like ggc_remove, except that it does not
+         mark the entries during the normal gc mark phase.  Instead it
+         uses 'keep_cache_entry' (described above) to keep elements that
+         were not collected and delete those that were.  Use this for
+         garbage-collected caches that should not in themselves stop
+         the data from being collected.
+
+         You can use these policies by simply deriving the descriptor type
+         from one of those class template, with the appropriate argument.
+
+         Otherwise, you need to write the static 'remove' member function
+         in the descriptor class.
+
+      2. Choose a hash function.  Write the static 'hash' member function.
+
+      3. Decide whether the lookup function should take as input an object
+	 of type value_type or something more restricted.  Define compare_type
+	 accordingly.
+
+      4. Choose an equality testing function 'equal' that compares a value_type
+	 and a compare_type.
+
+   If your elements are pointers, it is usually easiest to start with one
+   of the generic pointer descriptors described below and override the bits
+   you need to change.
+
+   AN EXAMPLE DESCRIPTOR TYPE
+
+   Suppose you want to put some_type into the hash table.  You could define
+   the descriptor type as follows.
+
+      struct some_type_hasher : nofree_ptr_hash <some_type>
+      // Deriving from nofree_ptr_hash means that we get a 'remove' that does
+      // nothing.  This choice is good for raw values.
+      {
+        static inline hashval_t hash (const value_type *);
+        static inline bool equal (const value_type *, const compare_type *);
+      };
+
+      inline hashval_t
+      some_type_hasher::hash (const value_type *e)
+      { ... compute and return a hash value for E ... }
+
+      inline bool
+      some_type_hasher::equal (const value_type *p1, const compare_type *p2)
+      { ... compare P1 vs P2.  Return true if they are the 'same' ... }
+
+
+   AN EXAMPLE HASH_TABLE DECLARATION
+
+   To instantiate a hash table for some_type:
+
+      hash_table <some_type_hasher> some_type_hash_table;
+
+   There is no need to mention some_type directly, as the hash table will
+   obtain it using some_type_hasher::value_type.
+
+   You can then use any of the functions in hash_table's public interface.
+   See hash_table for details.  The interface is very similar to libiberty's
+   htab_t.
+
+   If a hash table is used only in some rare cases, it is possible
+   to construct the hash_table lazily before first use.  This is done
+   through:
+
+      hash_table <some_type_hasher, true> some_type_hash_table;
+
+   which will cause whatever methods actually need the allocated entries
+   array to allocate it later.
+
+
+   EASY DESCRIPTORS FOR POINTERS
+
+   There are four descriptors for pointer elements, one for each of
+   the removal policies above:
+
+   * nofree_ptr_hash (based on typed_noop_remove)
+   * free_ptr_hash (based on typed_free_remove)
+   * ggc_ptr_hash (based on ggc_remove)
+   * ggc_cache_ptr_hash (based on ggc_cache_remove)
+
+   These descriptors hash and compare elements by their pointer value,
+   rather than what they point to.  So, to instantiate a hash table over
+   pointers to whatever_type, without freeing the whatever_types, use:
+
+      hash_table <nofree_ptr_hash <whatever_type> > whatever_type_hash_table;
+
+
+   HASH TABLE ITERATORS
+
+   The hash table provides standard C++ iterators.  For example, consider a
+   hash table of some_info.  We wish to consume each element of the table:
+
+      extern void consume (some_info *);
+
+   We define a convenience typedef and the hash table:
+
+      typedef hash_table <some_info_hasher> info_table_type;
+      info_table_type info_table;
+
+   Then we write the loop in typical C++ style:
+
+      for (info_table_type::iterator iter = info_table.begin ();
+           iter != info_table.end ();
+           ++iter)
+        if ((*iter).status == INFO_READY)
+          consume (&*iter);
+
+   Or with common sub-expression elimination:
+
+      for (info_table_type::iterator iter = info_table.begin ();
+           iter != info_table.end ();
+           ++iter)
+        {
+          some_info &elem = *iter;
+          if (elem.status == INFO_READY)
+            consume (&elem);
+        }
+
+   One can also use a more typical GCC style:
+
+      typedef some_info *some_info_p;
+      some_info *elem_ptr;
+      info_table_type::iterator iter;
+      FOR_EACH_HASH_TABLE_ELEMENT (info_table, elem_ptr, some_info_p, iter)
+        if (elem_ptr->status == INFO_READY)
+          consume (elem_ptr);
+
+*/
+
+
+#ifndef TYPED_HASHTAB_H
+#define TYPED_HASHTAB_H
+
+#include "statistics.h"
+#include "ggc.h"
+#include "vec.h"
+#include "hashtab.h"
+#include "inchash.h"
+#include "mem-stats-traits.h"
+#include "hash-traits.h"
+#include "hash-map-traits.h"
+
+template<typename, typename, typename> class hash_map;
+template<typename, bool, typename> class hash_set;
+
+/* The ordinary memory allocator.  */
+/* FIXME (crowl): This allocator may be extracted for wider sharing later.  */
+
+template <typename Type>
+struct xcallocator
+{
+  static Type *data_alloc (size_t count);
+  static void data_free (Type *memory);
+};
+
+
+/* Allocate memory for COUNT data blocks.  */
+
+template <typename Type>
+inline Type *
+xcallocator <Type>::data_alloc (size_t count)
+{
+  return static_cast <Type *> (xcalloc (count, sizeof (Type)));
+}
+
+
+/* Free memory for data blocks.  */
+
+template <typename Type>
+inline void
+xcallocator <Type>::data_free (Type *memory)
+{
+  return ::free (memory);
+}
+
+
+/* Table of primes and their inversion information.  */
+
+struct prime_ent
+{
+  hashval_t prime;
+  hashval_t inv;
+  hashval_t inv_m2;     /* inverse of prime-2 */
+  hashval_t shift;
+};
+
+extern struct prime_ent const prime_tab[];
+
+
+/* Functions for computing hash table indexes.  */
+
+extern unsigned int hash_table_higher_prime_index (unsigned long n)
+   ATTRIBUTE_PURE;
+
+/* Return X % Y using multiplicative inverse values INV and SHIFT.
+
+   The multiplicative inverses computed above are for 32-bit types,
+   and requires that we be able to compute a highpart multiply.
+
+   FIX: I am not at all convinced that
+     3 loads, 2 multiplications, 3 shifts, and 3 additions
+   will be faster than
+     1 load and 1 modulus
+   on modern systems running a compiler.  */
+
+inline hashval_t
+mul_mod (hashval_t x, hashval_t y, hashval_t inv, int shift)
+{
+   hashval_t t1, t2, t3, t4, q, r;
+
+   t1 = ((uint64_t)x * inv) >> 32;
+   t2 = x - t1;
+   t3 = t2 >> 1;
+   t4 = t1 + t3;
+   q  = t4 >> shift;
+   r  = x - (q * y);
+
+   return r;
+}
+
+/* Compute the primary table index for HASH given current prime index.  */
+
+inline hashval_t
+hash_table_mod1 (hashval_t hash, unsigned int index)
+{
+  const struct prime_ent *p = &prime_tab[index];
+  gcc_checking_assert (sizeof (hashval_t) * CHAR_BIT <= 32);
+  return mul_mod (hash, p->prime, p->inv, p->shift);
+}
+
+/* Compute the secondary table index for HASH given current prime index.  */
+
+inline hashval_t
+hash_table_mod2 (hashval_t hash, unsigned int index)
+{
+  const struct prime_ent *p = &prime_tab[index];
+  gcc_checking_assert (sizeof (hashval_t) * CHAR_BIT <= 32);
+  return 1 + mul_mod (hash, p->prime - 2, p->inv_m2, p->shift);
+}
+
+class mem_usage;
+
+/* User-facing hash table type.
+
+   The table stores elements of type Descriptor::value_type and uses
+   the static descriptor functions described at the top of the file
+   to hash, compare and remove elements.
+
+   Specify the template Allocator to allocate and free memory.
+     The default is xcallocator.
+
+     Storage is an implementation detail and should not be used outside the
+     hash table code.
+
+*/
+template <typename Descriptor, bool Lazy = false,
+	  template<typename Type> class Allocator = xcallocator>
+class hash_table
+{
+  typedef typename Descriptor::value_type value_type;
+  typedef typename Descriptor::compare_type compare_type;
+
+public:
+  explicit hash_table (size_t, bool ggc = false,
+		       bool gather_mem_stats = GATHER_STATISTICS,
+		       mem_alloc_origin origin = HASH_TABLE_ORIGIN
+		       CXX_MEM_STAT_INFO);
+  explicit hash_table (const hash_table &, bool ggc = false,
+		       bool gather_mem_stats = GATHER_STATISTICS,
+		       mem_alloc_origin origin = HASH_TABLE_ORIGIN
+		       CXX_MEM_STAT_INFO);
+  ~hash_table ();
+
+  /* Create a hash_table in gc memory.  */
+  static hash_table *
+  create_ggc (size_t n CXX_MEM_STAT_INFO)
+  {
+    hash_table *table = ggc_alloc<hash_table> ();
+    new (table) hash_table (n, true, GATHER_STATISTICS,
+			    HASH_TABLE_ORIGIN PASS_MEM_STAT);
+    return table;
+  }
+
+  /* Current size (in entries) of the hash table.  */
+  size_t size () const { return m_size; }
+
+  /* Return the current number of elements in this hash table. */
+  size_t elements () const { return m_n_elements - m_n_deleted; }
+
+  /* Return the current number of elements in this hash table. */
+  size_t elements_with_deleted () const { return m_n_elements; }
+
+  /* This function clears all entries in this hash table.  */
+  void empty () { if (elements ()) empty_slow (); }
+
+  /* This function clears a specified SLOT in a hash table.  It is
+     useful when you've already done the lookup and don't want to do it
+     again. */
+  void clear_slot (value_type *);
+
+  /* This function searches for a hash table entry equal to the given
+     COMPARABLE element starting with the given HASH value.  It cannot
+     be used to insert or delete an element. */
+  value_type &find_with_hash (const compare_type &, hashval_t);
+
+  /* Like find_slot_with_hash, but compute the hash value from the element.  */
+  value_type &find (const value_type &value)
+    {
+      return find_with_hash (value, Descriptor::hash (value));
+    }
+
+  value_type *find_slot (const value_type &value, insert_option insert)
+    {
+      return find_slot_with_hash (value, Descriptor::hash (value), insert);
+    }
+
+  /* This function searches for a hash table slot containing an entry
+     equal to the given COMPARABLE element and starting with the given
+     HASH.  To delete an entry, call this with insert=NO_INSERT, then
+     call clear_slot on the slot returned (possibly after doing some
+     checks).  To insert an entry, call this with insert=INSERT, then
+     write the value you want into the returned slot.  When inserting an
+     entry, NULL may be returned if memory allocation fails. */
+  value_type *find_slot_with_hash (const compare_type &comparable,
+				   hashval_t hash, enum insert_option insert);
+
+  /* This function deletes an element with the given COMPARABLE value
+     from hash table starting with the given HASH.  If there is no
+     matching element in the hash table, this function does nothing. */
+  void remove_elt_with_hash (const compare_type &, hashval_t);
+
+  /* Like remove_elt_with_hash, but compute the hash value from the
+     element.  */
+  void remove_elt (const value_type &value)
+    {
+      remove_elt_with_hash (value, Descriptor::hash (value));
+    }
+
+  /* This function scans over the entire hash table calling CALLBACK for
+     each live entry.  If CALLBACK returns false, the iteration stops.
+     ARGUMENT is passed as CALLBACK's second argument. */
+  template <typename Argument,
+	    int (*Callback) (value_type *slot, Argument argument)>
+  void traverse_noresize (Argument argument);
+
+  /* Like traverse_noresize, but does resize the table when it is too empty
+     to improve effectivity of subsequent calls.  */
+  template <typename Argument,
+	    int (*Callback) (value_type *slot, Argument argument)>
+  void traverse (Argument argument);
+
+  class iterator
+  {
+  public:
+    iterator () : m_slot (NULL), m_limit (NULL) {}
+
+    iterator (value_type *slot, value_type *limit) :
+      m_slot (slot), m_limit (limit) {}
+
+    inline value_type &operator * () { return *m_slot; }
+    void slide ();
+    inline iterator &operator ++ ();
+    bool operator != (const iterator &other) const
+      {
+	return m_slot != other.m_slot || m_limit != other.m_limit;
+      }
+
+  private:
+    value_type *m_slot;
+    value_type *m_limit;
+  };
+
+  iterator begin () const
+    {
+      if (Lazy && m_entries == NULL)
+	return iterator ();
+      iterator iter (m_entries, m_entries + m_size);
+      iter.slide ();
+      return iter;
+    }
+
+  iterator end () const { return iterator (); }
+
+  double collisions () const
+    {
+      return m_searches ? static_cast <double> (m_collisions) / m_searches : 0;
+    }
+
+private:
+  template<typename T> friend void gt_ggc_mx (hash_table<T> *);
+  template<typename T> friend void gt_pch_nx (hash_table<T> *);
+  template<typename T> friend void
+    hashtab_entry_note_pointers (void *, void *, gt_pointer_operator, void *);
+  template<typename T, typename U, typename V> friend void
+  gt_pch_nx (hash_map<T, U, V> *, gt_pointer_operator, void *);
+  template<typename T, typename U>
+  friend void gt_pch_nx (hash_set<T, false, U> *, gt_pointer_operator, void *);
+  template<typename T> friend void gt_pch_nx (hash_table<T> *,
+					      gt_pointer_operator, void *);
+
+  template<typename T> friend void gt_cleare_cache (hash_table<T> *);
+
+  void empty_slow ();
+
+  value_type *alloc_entries (size_t n CXX_MEM_STAT_INFO) const;
+  value_type *find_empty_slot_for_expand (hashval_t);
+  bool too_empty_p (unsigned int);
+  void expand ();
+  static bool is_deleted (value_type &v)
+  {
+    return Descriptor::is_deleted (v);
+  }
+
+  static bool is_empty (value_type &v)
+  {
+    return Descriptor::is_empty (v);
+  }
+
+  static void mark_deleted (value_type &v)
+  {
+    Descriptor::mark_deleted (v);
+  }
+
+  static void mark_empty (value_type &v)
+  {
+    Descriptor::mark_empty (v);
+  }
+
+  /* Table itself.  */
+  typename Descriptor::value_type *m_entries;
+
+  size_t m_size;
+
+  /* Current number of elements including also deleted elements.  */
+  size_t m_n_elements;
+
+  /* Current number of deleted elements in the table.  */
+  size_t m_n_deleted;
+
+  /* The following member is used for debugging. Its value is number
+     of all calls of `htab_find_slot' for the hash table. */
+  unsigned int m_searches;
+
+  /* The following member is used for debugging.  Its value is number
+     of collisions fixed for time of work with the hash table. */
+  unsigned int m_collisions;
+
+  /* Current size (in entries) of the hash table, as an index into the
+     table of primes.  */
+  unsigned int m_size_prime_index;
+
+  /* if m_entries is stored in ggc memory.  */
+  bool m_ggc;
+
+  /* If we should gather memory statistics for the table.  */
+#if GATHER_STATISTICS
+  bool m_gather_mem_stats;
+#else
+  static const bool m_gather_mem_stats = false;
+#endif
+};
+
+/* As mem-stats.h heavily utilizes hash maps (hash tables), we have to include
+   mem-stats.h after hash_table declaration.  */
+
+#include "mem-stats.h"
+#include "hash-map.h"
+
+extern mem_alloc_description<mem_usage>& hash_table_usage (void);
+
+/* Support function for statistics.  */
+extern void dump_hash_table_loc_statistics (void);
+
+template<typename Descriptor, bool Lazy,
+	 template<typename Type> class Allocator>
+hash_table<Descriptor, Lazy, Allocator>::hash_table (size_t size, bool ggc,
+						     bool gather_mem_stats
+						     ATTRIBUTE_UNUSED,
+						     mem_alloc_origin origin
+						     MEM_STAT_DECL) :
+  m_n_elements (0), m_n_deleted (0), m_searches (0), m_collisions (0),
+  m_ggc (ggc)
+#if GATHER_STATISTICS
+  , m_gather_mem_stats (gather_mem_stats)
+#endif
+{
+  unsigned int size_prime_index;
+
+  size_prime_index = hash_table_higher_prime_index (size);
+  size = prime_tab[size_prime_index].prime;
+
+  if (m_gather_mem_stats)
+    hash_table_usage ().register_descriptor (this, origin, ggc
+					     FINAL_PASS_MEM_STAT);
+
+  if (Lazy)
+    m_entries = NULL;
+  else
+    m_entries = alloc_entries (size PASS_MEM_STAT);
+  m_size = size;
+  m_size_prime_index = size_prime_index;
+}
+
+template<typename Descriptor, bool Lazy,
+	 template<typename Type> class Allocator>
+hash_table<Descriptor, Lazy, Allocator>::hash_table (const hash_table &h,
+						     bool ggc,
+						     bool gather_mem_stats
+						     ATTRIBUTE_UNUSED,
+						     mem_alloc_origin origin
+						     MEM_STAT_DECL) :
+  m_n_elements (h.m_n_elements), m_n_deleted (h.m_n_deleted),
+  m_searches (0), m_collisions (0), m_ggc (ggc)
+#if GATHER_STATISTICS
+  , m_gather_mem_stats (gather_mem_stats)
+#endif
+{
+  size_t size = h.m_size;
+
+  if (m_gather_mem_stats)
+    hash_table_usage ().register_descriptor (this, origin, ggc
+					  FINAL_PASS_MEM_STAT);
+
+  if (Lazy && h.m_entries == NULL)
+    m_entries = NULL;
+  else
+    {
+      value_type *nentries = alloc_entries (size PASS_MEM_STAT);
+      for (size_t i = 0; i < size; ++i)
+	{
+	  value_type &entry = h.m_entries[i];
+	  if (is_deleted (entry))
+	    mark_deleted (nentries[i]);
+	  else if (!is_empty (entry))
+	    nentries[i] = entry;
+	}
+      m_entries = nentries;
+    }
+  m_size = size;
+  m_size_prime_index = h.m_size_prime_index;
+}
+
+template<typename Descriptor, bool Lazy,
+	 template<typename Type> class Allocator>
+hash_table<Descriptor, Lazy, Allocator>::~hash_table ()
+{
+  if (!Lazy || m_entries)
+    {
+      for (size_t i = m_size - 1; i < m_size; i--)
+	if (!is_empty (m_entries[i]) && !is_deleted (m_entries[i]))
+	  Descriptor::remove (m_entries[i]);
+
+      if (!m_ggc)
+	Allocator <value_type> ::data_free (m_entries);
+      else
+	ggc_free (m_entries);
+      if (m_gather_mem_stats)
+	hash_table_usage ().release_instance_overhead (this,
+						       sizeof (value_type)
+						       * m_size, true);
+    }
+  else if (m_gather_mem_stats)
+    hash_table_usage ().unregister_descriptor (this);
+}
+
+/* This function returns an array of empty hash table elements.  */
+
+template<typename Descriptor, bool Lazy,
+	 template<typename Type> class Allocator>
+inline typename hash_table<Descriptor, Lazy, Allocator>::value_type *
+hash_table<Descriptor, Lazy,
+	   Allocator>::alloc_entries (size_t n MEM_STAT_DECL) const
+{
+  value_type *nentries;
+
+  if (m_gather_mem_stats)
+    hash_table_usage ().register_instance_overhead (sizeof (value_type) * n, this);
+
+  if (!m_ggc)
+    nentries = Allocator <value_type> ::data_alloc (n);
+  else
+    nentries = ::ggc_cleared_vec_alloc<value_type> (n PASS_MEM_STAT);
+
+  gcc_assert (nentries != NULL);
+  for (size_t i = 0; i < n; i++)
+    mark_empty (nentries[i]);
+
+  return nentries;
+}
+
+/* Similar to find_slot, but without several unwanted side effects:
+    - Does not call equal when it finds an existing entry.
+    - Does not change the count of elements/searches/collisions in the
+      hash table.
+   This function also assumes there are no deleted entries in the table.
+   HASH is the hash value for the element to be inserted.  */
+
+template<typename Descriptor, bool Lazy,
+	 template<typename Type> class Allocator>
+typename hash_table<Descriptor, Lazy, Allocator>::value_type *
+hash_table<Descriptor, Lazy,
+	   Allocator>::find_empty_slot_for_expand (hashval_t hash)
+{
+  hashval_t index = hash_table_mod1 (hash, m_size_prime_index);
+  size_t size = m_size;
+  value_type *slot = m_entries + index;
+  hashval_t hash2;
+
+  if (is_empty (*slot))
+    return slot;
+  gcc_checking_assert (!is_deleted (*slot));
+
+  hash2 = hash_table_mod2 (hash, m_size_prime_index);
+  for (;;)
+    {
+      index += hash2;
+      if (index >= size)
+        index -= size;
+
+      slot = m_entries + index;
+      if (is_empty (*slot))
+        return slot;
+      gcc_checking_assert (!is_deleted (*slot));
+    }
+}
+
+/* Return true if the current table is excessively big for ELTS elements.  */
+
+template<typename Descriptor, bool Lazy,
+	 template<typename Type> class Allocator>
+inline bool
+hash_table<Descriptor, Lazy, Allocator>::too_empty_p (unsigned int elts)
+{
+  return elts * 8 < m_size && m_size > 32;
+}
+
+/* The following function changes size of memory allocated for the
+   entries and repeatedly inserts the table elements.  The occupancy
+   of the table after the call will be about 50%.  Naturally the hash
+   table must already exist.  Remember also that the place of the
+   table entries is changed.  If memory allocation fails, this function
+   will abort.  */
+
+template<typename Descriptor, bool Lazy,
+	 template<typename Type> class Allocator>
+void
+hash_table<Descriptor, Lazy, Allocator>::expand ()
+{
+  value_type *oentries = m_entries;
+  unsigned int oindex = m_size_prime_index;
+  size_t osize = size ();
+  value_type *olimit = oentries + osize;
+  size_t elts = elements ();
+
+  /* Resize only when table after removal of unused elements is either
+     too full or too empty.  */
+  unsigned int nindex;
+  size_t nsize;
+  if (elts * 2 > osize || too_empty_p (elts))
+    {
+      nindex = hash_table_higher_prime_index (elts * 2);
+      nsize = prime_tab[nindex].prime;
+    }
+  else
+    {
+      nindex = oindex;
+      nsize = osize;
+    }
+
+  value_type *nentries = alloc_entries (nsize);
+
+  if (m_gather_mem_stats)
+    hash_table_usage ().release_instance_overhead (this, sizeof (value_type)
+						    * osize);
+
+  m_entries = nentries;
+  m_size = nsize;
+  m_size_prime_index = nindex;
+  m_n_elements -= m_n_deleted;
+  m_n_deleted = 0;
+
+  value_type *p = oentries;
+  do
+    {
+      value_type &x = *p;
+
+      if (!is_empty (x) && !is_deleted (x))
+        {
+          value_type *q = find_empty_slot_for_expand (Descriptor::hash (x));
+
+          *q = x;
+        }
+
+      p++;
+    }
+  while (p < olimit);
+
+  if (!m_ggc)
+    Allocator <value_type> ::data_free (oentries);
+  else
+    ggc_free (oentries);
+}
+
+/* Implements empty() in cases where it isn't a no-op.  */
+
+template<typename Descriptor, bool Lazy,
+	 template<typename Type> class Allocator>
+void
+hash_table<Descriptor, Lazy, Allocator>::empty_slow ()
+{
+  size_t size = m_size;
+  size_t nsize = size;
+  value_type *entries = m_entries;
+  int i;
+
+  for (i = size - 1; i >= 0; i--)
+    if (!is_empty (entries[i]) && !is_deleted (entries[i]))
+      Descriptor::remove (entries[i]);
+
+  /* Instead of clearing megabyte, downsize the table.  */
+  if (size > 1024*1024 / sizeof (value_type))
+    nsize = 1024 / sizeof (value_type);
+  else if (too_empty_p (m_n_elements))
+    nsize = m_n_elements * 2;
+
+  if (nsize != size)
+    {
+      int nindex = hash_table_higher_prime_index (nsize);
+      int nsize = prime_tab[nindex].prime;
+
+      if (!m_ggc)
+	Allocator <value_type> ::data_free (m_entries);
+      else
+	ggc_free (m_entries);
+
+      m_entries = alloc_entries (nsize);
+      m_size = nsize;
+      m_size_prime_index = nindex;
+    }
+  else
+    {
+#ifndef BROKEN_VALUE_INITIALIZATION
+      for ( ; size; ++entries, --size)
+	*entries = value_type ();
+#else
+      memset (entries, 0, size * sizeof (value_type));
+#endif
+    }
+  m_n_deleted = 0;
+  m_n_elements = 0;
+}
+
+/* This function clears a specified SLOT in a hash table.  It is
+   useful when you've already done the lookup and don't want to do it
+   again. */
+
+template<typename Descriptor, bool Lazy,
+	 template<typename Type> class Allocator>
+void
+hash_table<Descriptor, Lazy, Allocator>::clear_slot (value_type *slot)
+{
+  gcc_checking_assert (!(slot < m_entries || slot >= m_entries + size ()
+		         || is_empty (*slot) || is_deleted (*slot)));
+
+  Descriptor::remove (*slot);
+
+  mark_deleted (*slot);
+  m_n_deleted++;
+}
+
+/* This function searches for a hash table entry equal to the given
+   COMPARABLE element starting with the given HASH value.  It cannot
+   be used to insert or delete an element. */
+
+template<typename Descriptor, bool Lazy,
+	 template<typename Type> class Allocator>
+typename hash_table<Descriptor, Lazy, Allocator>::value_type &
+hash_table<Descriptor, Lazy, Allocator>
+::find_with_hash (const compare_type &comparable, hashval_t hash)
+{
+  m_searches++;
+  size_t size = m_size;
+  hashval_t index = hash_table_mod1 (hash, m_size_prime_index);
+
+  if (Lazy && m_entries == NULL)
+    m_entries = alloc_entries (size);
+  value_type *entry = &m_entries[index];
+  if (is_empty (*entry)
+      || (!is_deleted (*entry) && Descriptor::equal (*entry, comparable)))
+    return *entry;
+
+  hashval_t hash2 = hash_table_mod2 (hash, m_size_prime_index);
+  for (;;)
+    {
+      m_collisions++;
+      index += hash2;
+      if (index >= size)
+        index -= size;
+
+      entry = &m_entries[index];
+      if (is_empty (*entry)
+          || (!is_deleted (*entry) && Descriptor::equal (*entry, comparable)))
+        return *entry;
+    }
+}
+
+/* This function searches for a hash table slot containing an entry
+   equal to the given COMPARABLE element and starting with the given
+   HASH.  To delete an entry, call this with insert=NO_INSERT, then
+   call clear_slot on the slot returned (possibly after doing some
+   checks).  To insert an entry, call this with insert=INSERT, then
+   write the value you want into the returned slot.  When inserting an
+   entry, NULL may be returned if memory allocation fails. */
+
+template<typename Descriptor, bool Lazy,
+	 template<typename Type> class Allocator>
+typename hash_table<Descriptor, Lazy, Allocator>::value_type *
+hash_table<Descriptor, Lazy, Allocator>
+::find_slot_with_hash (const compare_type &comparable, hashval_t hash,
+		       enum insert_option insert)
+{
+  if (Lazy && m_entries == NULL)
+    {
+      if (insert == INSERT)
+	m_entries = alloc_entries (m_size);
+      else
+	return NULL;
+    }
+  if (insert == INSERT && m_size * 3 <= m_n_elements * 4)
+    expand ();
+
+  m_searches++;
+
+  value_type *first_deleted_slot = NULL;
+  hashval_t index = hash_table_mod1 (hash, m_size_prime_index);
+  hashval_t hash2 = hash_table_mod2 (hash, m_size_prime_index);
+  value_type *entry = &m_entries[index];
+  size_t size = m_size;
+  if (is_empty (*entry))
+    goto empty_entry;
+  else if (is_deleted (*entry))
+    first_deleted_slot = &m_entries[index];
+  else if (Descriptor::equal (*entry, comparable))
+    return &m_entries[index];
+
+  for (;;)
+    {
+      m_collisions++;
+      index += hash2;
+      if (index >= size)
+	index -= size;
+
+      entry = &m_entries[index];
+      if (is_empty (*entry))
+	goto empty_entry;
+      else if (is_deleted (*entry))
+	{
+	  if (!first_deleted_slot)
+	    first_deleted_slot = &m_entries[index];
+	}
+      else if (Descriptor::equal (*entry, comparable))
+	return &m_entries[index];
+    }
+
+ empty_entry:
+  if (insert == NO_INSERT)
+    return NULL;
+
+  if (first_deleted_slot)
+    {
+      m_n_deleted--;
+      mark_empty (*first_deleted_slot);
+      return first_deleted_slot;
+    }
+
+  m_n_elements++;
+  return &m_entries[index];
+}
+
+/* This function deletes an element with the given COMPARABLE value
+   from hash table starting with the given HASH.  If there is no
+   matching element in the hash table, this function does nothing. */
+
+template<typename Descriptor, bool Lazy,
+	 template<typename Type> class Allocator>
+void
+hash_table<Descriptor, Lazy, Allocator>
+::remove_elt_with_hash (const compare_type &comparable, hashval_t hash)
+{
+  value_type *slot = find_slot_with_hash (comparable, hash, NO_INSERT);
+  if (slot == NULL)
+    return;
+
+  Descriptor::remove (*slot);
+
+  mark_deleted (*slot);
+  m_n_deleted++;
+}
+
+/* This function scans over the entire hash table calling CALLBACK for
+   each live entry.  If CALLBACK returns false, the iteration stops.
+   ARGUMENT is passed as CALLBACK's second argument. */
+
+template<typename Descriptor, bool Lazy,
+	  template<typename Type> class Allocator>
+template<typename Argument,
+	 int (*Callback)
+	 (typename hash_table<Descriptor, Lazy, Allocator>::value_type *slot,
+	 Argument argument)>
+void
+hash_table<Descriptor, Lazy, Allocator>::traverse_noresize (Argument argument)
+{
+  if (Lazy && m_entries == NULL)
+    return;
+
+  value_type *slot = m_entries;
+  value_type *limit = slot + size ();
+
+  do
+    {
+      value_type &x = *slot;
+
+      if (!is_empty (x) && !is_deleted (x))
+        if (! Callback (slot, argument))
+          break;
+    }
+  while (++slot < limit);
+}
+
+/* Like traverse_noresize, but does resize the table when it is too empty
+   to improve effectivity of subsequent calls.  */
+
+template <typename Descriptor, bool Lazy,
+	  template <typename Type> class Allocator>
+template <typename Argument,
+	  int (*Callback)
+	  (typename hash_table<Descriptor, Lazy, Allocator>::value_type *slot,
+	  Argument argument)>
+void
+hash_table<Descriptor, Lazy, Allocator>::traverse (Argument argument)
+{
+  if (too_empty_p (elements ()) && (!Lazy || m_entries))
+    expand ();
+
+  traverse_noresize <Argument, Callback> (argument);
+}
+
+/* Slide down the iterator slots until an active entry is found.  */
+
+template<typename Descriptor, bool Lazy,
+	 template<typename Type> class Allocator>
+void
+hash_table<Descriptor, Lazy, Allocator>::iterator::slide ()
+{
+  for ( ; m_slot < m_limit; ++m_slot )
+    {
+      value_type &x = *m_slot;
+      if (!is_empty (x) && !is_deleted (x))
+        return;
+    }
+  m_slot = NULL;
+  m_limit = NULL;
+}
+
+/* Bump the iterator.  */
+
+template<typename Descriptor, bool Lazy,
+	 template<typename Type> class Allocator>
+inline typename hash_table<Descriptor, Lazy, Allocator>::iterator &
+hash_table<Descriptor, Lazy, Allocator>::iterator::operator ++ ()
+{
+  ++m_slot;
+  slide ();
+  return *this;
+}
+
+
+/* Iterate through the elements of hash_table HTAB,
+   using hash_table <....>::iterator ITER,
+   storing each element in RESULT, which is of type TYPE.  */
+
+#define FOR_EACH_HASH_TABLE_ELEMENT(HTAB, RESULT, TYPE, ITER) \
+  for ((ITER) = (HTAB).begin (); \
+       (ITER) != (HTAB).end () ? (RESULT = *(ITER) , true) : false; \
+       ++(ITER))
+
+/* ggc walking routines.  */
+
+template<typename E>
+static inline void
+gt_ggc_mx (hash_table<E> *h)
+{
+  typedef hash_table<E> table;
+
+  if (!ggc_test_and_set_mark (h->m_entries))
+    return;
+
+  for (size_t i = 0; i < h->m_size; i++)
+    {
+      if (table::is_empty (h->m_entries[i])
+	  || table::is_deleted (h->m_entries[i]))
+	continue;
+
+      /* Use ggc_maxbe_mx so we don't mark right away for cache tables; we'll
+	 mark in gt_cleare_cache if appropriate.  */
+      E::ggc_maybe_mx (h->m_entries[i]);
+    }
+}
+
+template<typename D>
+static inline void
+hashtab_entry_note_pointers (void *obj, void *h, gt_pointer_operator op,
+			     void *cookie)
+{
+  hash_table<D> *map = static_cast<hash_table<D> *> (h);
+  gcc_checking_assert (map->m_entries == obj);
+  for (size_t i = 0; i < map->m_size; i++)
+    {
+      typedef hash_table<D> table;
+      if (table::is_empty (map->m_entries[i])
+	  || table::is_deleted (map->m_entries[i]))
+	continue;
+
+      D::pch_nx (map->m_entries[i], op, cookie);
+    }
+}
+
+template<typename D>
+static void
+gt_pch_nx (hash_table<D> *h)
+{
+  bool success
+    = gt_pch_note_object (h->m_entries, h, hashtab_entry_note_pointers<D>);
+  gcc_checking_assert (success);
+  for (size_t i = 0; i < h->m_size; i++)
+    {
+      if (hash_table<D>::is_empty (h->m_entries[i])
+	  || hash_table<D>::is_deleted (h->m_entries[i]))
+	continue;
+
+      D::pch_nx (h->m_entries[i]);
+    }
+}
+
+template<typename D>
+static inline void
+gt_pch_nx (hash_table<D> *h, gt_pointer_operator op, void *cookie)
+{
+  op (&h->m_entries, cookie);
+}
+
+template<typename H>
+inline void
+gt_cleare_cache (hash_table<H> *h)
+{
+  typedef hash_table<H> table;
+  if (!h)
+    return;
+
+  for (typename table::iterator iter = h->begin (); iter != h->end (); ++iter)
+    if (!table::is_empty (*iter) && !table::is_deleted (*iter))
+      {
+	int res = H::keep_cache_entry (*iter);
+	if (res == 0)
+	  h->clear_slot (&*iter);
+	else if (res != -1)
+	  H::ggc_mx (*iter);
+      }
+}
+
+#endif /* TYPED_HASHTAB_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/hash-traits.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hash-traits.h
new file mode 100644
index 0000000..2d17e2c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hash-traits.h
@@ -0,0 +1,386 @@
+/* Traits for hashable types.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef hash_traits_h
+#define hash_traits_h
+
+/* Helpful type for removing with free.  */
+
+template <typename Type>
+struct typed_free_remove
+{
+  static inline void remove (Type *p);
+};
+
+
+/* Remove with free.  */
+
+template <typename Type>
+inline void
+typed_free_remove <Type>::remove (Type *p)
+{
+  free (p);
+}
+
+/* Helpful type for removing with delete.  */
+
+template <typename Type>
+struct typed_delete_remove
+{
+  static inline void remove (Type *p);
+};
+
+
+/* Remove with delete.  */
+
+template <typename Type>
+inline void
+typed_delete_remove <Type>::remove (Type *p)
+{
+  delete p;
+}
+
+/* Helpful type for a no-op remove.  */
+
+template <typename Type>
+struct typed_noop_remove
+{
+  static inline void remove (Type &);
+};
+
+
+/* Remove doing nothing.  */
+
+template <typename Type>
+inline void
+typed_noop_remove <Type>::remove (Type &)
+{
+}
+
+
+/* Hasher for integer type Type in which Empty is a spare value that can be
+   used to mark empty slots.  If Deleted != Empty then Deleted is another
+   spare value that can be used for deleted slots; if Deleted == Empty then
+   hash table entries cannot be deleted.  */
+
+template <typename Type, Type Empty, Type Deleted = Empty>
+struct int_hash : typed_noop_remove <Type>
+{
+  typedef Type value_type;
+  typedef Type compare_type;
+
+  static inline hashval_t hash (value_type);
+  static inline bool equal (value_type existing, value_type candidate);
+  static inline void mark_deleted (Type &);
+  static inline void mark_empty (Type &);
+  static inline bool is_deleted (Type);
+  static inline bool is_empty (Type);
+};
+
+template <typename Type, Type Empty, Type Deleted>
+inline hashval_t
+int_hash <Type, Empty, Deleted>::hash (value_type x)
+{
+  return x;
+}
+
+template <typename Type, Type Empty, Type Deleted>
+inline bool
+int_hash <Type, Empty, Deleted>::equal (value_type x, value_type y)
+{
+  return x == y;
+}
+
+template <typename Type, Type Empty, Type Deleted>
+inline void
+int_hash <Type, Empty, Deleted>::mark_deleted (Type &x)
+{
+  gcc_assert (Empty != Deleted);
+  x = Deleted;
+}
+
+template <typename Type, Type Empty, Type Deleted>
+inline void
+int_hash <Type, Empty, Deleted>::mark_empty (Type &x)
+{
+  x = Empty;
+}
+
+template <typename Type, Type Empty, Type Deleted>
+inline bool
+int_hash <Type, Empty, Deleted>::is_deleted (Type x)
+{
+  return Empty != Deleted && x == Deleted;
+}
+
+template <typename Type, Type Empty, Type Deleted>
+inline bool
+int_hash <Type, Empty, Deleted>::is_empty (Type x)
+{
+  return x == Empty;
+}
+
+/* Pointer hasher based on pointer equality.  Other types of pointer hash
+   can inherit this and override the hash and equal functions with some
+   other form of equality (such as string equality).  */
+
+template <typename Type>
+struct pointer_hash
+{
+  typedef Type *value_type;
+  typedef Type *compare_type;
+
+  static inline hashval_t hash (const value_type &);
+  static inline bool equal (const value_type &existing,
+			    const compare_type &candidate);
+  static inline void mark_deleted (Type *&);
+  static inline void mark_empty (Type *&);
+  static inline bool is_deleted (Type *);
+  static inline bool is_empty (Type *);
+};
+
+template <typename Type>
+inline hashval_t
+pointer_hash <Type>::hash (const value_type &candidate)
+{
+  /* This is a really poor hash function, but it is what the current code uses,
+     so I am reusing it to avoid an additional axis in testing.  */
+  return (hashval_t) ((intptr_t)candidate >> 3);
+}
+
+template <typename Type>
+inline bool
+pointer_hash <Type>::equal (const value_type &existing,
+			   const compare_type &candidate)
+{
+  return existing == candidate;
+}
+
+template <typename Type>
+inline void
+pointer_hash <Type>::mark_deleted (Type *&e)
+{
+  e = reinterpret_cast<Type *> (1);
+}
+
+template <typename Type>
+inline void
+pointer_hash <Type>::mark_empty (Type *&e)
+{
+  e = NULL;
+}
+
+template <typename Type>
+inline bool
+pointer_hash <Type>::is_deleted (Type *e)
+{
+  return e == reinterpret_cast<Type *> (1);
+}
+
+template <typename Type>
+inline bool
+pointer_hash <Type>::is_empty (Type *e)
+{
+  return e == NULL;
+}
+
+/* Hasher for "const char *" strings, using string rather than pointer
+   equality.  */
+
+struct string_hash : pointer_hash <const char>
+{
+  static inline hashval_t hash (const char *);
+  static inline bool equal (const char *, const char *);
+};
+
+inline hashval_t
+string_hash::hash (const char *id)
+{
+  return htab_hash_string (id);
+}
+
+inline bool
+string_hash::equal (const char *id1, const char *id2)
+{
+  return strcmp (id1, id2) == 0;
+}
+
+/* Remover and marker for entries in gc memory.  */
+
+template<typename T>
+struct ggc_remove
+{
+  static void remove (T &) {}
+
+  static void
+  ggc_mx (T &p)
+  {
+    extern void gt_ggc_mx (T &);
+    gt_ggc_mx (p);
+  }
+
+  /* Overridden in ggc_cache_remove.  */
+  static void
+  ggc_maybe_mx (T &p)
+  {
+    ggc_mx (p);
+  }
+
+  static void
+  pch_nx (T &p)
+  {
+    extern void gt_pch_nx (T &);
+    gt_pch_nx (p);
+  }
+
+  static void
+  pch_nx (T &p, gt_pointer_operator op, void *cookie)
+  {
+    op (&p, cookie);
+  }
+};
+
+/* Remover and marker for "cache" entries in gc memory.  These entries can
+   be deleted if there are no non-cache references to the data.  */
+
+template<typename T>
+struct ggc_cache_remove : ggc_remove<T>
+{
+  /* Entries are weakly held because this is for caches.  */
+  static void ggc_maybe_mx (T &) {}
+
+  static int
+  keep_cache_entry (T &e)
+  {
+    return ggc_marked_p (e) ? -1 : 0;
+  }
+};
+
+/* Traits for pointer elements that should not be freed when an element
+   is deleted.  */
+
+template <typename T>
+struct nofree_ptr_hash : pointer_hash <T>, typed_noop_remove <T *> {};
+
+/* Traits for pointer elements that should be freed via free() when an
+   element is deleted.  */
+
+template <typename T>
+struct free_ptr_hash : pointer_hash <T>, typed_free_remove <T> {};
+
+/* Traits for pointer elements that should be freed via delete operand when an
+   element is deleted.  */
+
+template <typename T>
+struct delete_ptr_hash : pointer_hash <T>, typed_delete_remove <T> {};
+
+/* Traits for elements that point to gc memory.  The pointed-to data
+   must be kept across collections.  */
+
+template <typename T>
+struct ggc_ptr_hash : pointer_hash <T>, ggc_remove <T *> {};
+
+/* Traits for elements that point to gc memory.  The elements don't
+   in themselves keep the pointed-to data alive and they can be deleted
+   if the pointed-to data is going to be collected.  */
+
+template <typename T>
+struct ggc_cache_ptr_hash : pointer_hash <T>, ggc_cache_remove <T *> {};
+
+/* Traits for string elements that should not be freed when an element
+   is deleted.  */
+
+struct nofree_string_hash : string_hash, typed_noop_remove <const char *> {};
+
+/* Traits for pairs of values, using the first to record empty and
+   deleted slots.  */
+
+template <typename T1, typename T2>
+struct pair_hash
+{
+  typedef std::pair <typename T1::value_type,
+		     typename T2::value_type> value_type;
+  typedef std::pair <typename T1::compare_type,
+		     typename T2::compare_type> compare_type;
+
+  static inline hashval_t hash (const value_type &);
+  static inline bool equal (const value_type &, const compare_type &);
+  static inline void remove (value_type &);
+  static inline void mark_deleted (value_type &);
+  static inline void mark_empty (value_type &);
+  static inline bool is_deleted (const value_type &);
+  static inline bool is_empty (const value_type &);
+};
+
+template <typename T1, typename T2>
+inline hashval_t
+pair_hash <T1, T2>::hash (const value_type &x)
+{
+  return iterative_hash_hashval_t (T1::hash (x.first), T2::hash (x.second));
+}
+
+template <typename T1, typename T2>
+inline bool
+pair_hash <T1, T2>::equal (const value_type &x, const compare_type &y)
+{
+  return T1::equal (x.first, y.first) && T2::equal (x.second, y.second);
+}
+
+template <typename T1, typename T2>
+inline void
+pair_hash <T1, T2>::remove (value_type &x)
+{
+  T1::remove (x.first);
+  T2::remove (x.second);
+}
+
+template <typename T1, typename T2>
+inline void
+pair_hash <T1, T2>::mark_deleted (value_type &x)
+{
+  T1::mark_deleted (x.first);
+}
+
+template <typename T1, typename T2>
+inline void
+pair_hash <T1, T2>::mark_empty (value_type &x)
+{
+  T1::mark_empty (x.first);
+}
+
+template <typename T1, typename T2>
+inline bool
+pair_hash <T1, T2>::is_deleted (const value_type &x)
+{
+  return T1::is_deleted (x.first);
+}
+
+template <typename T1, typename T2>
+inline bool
+pair_hash <T1, T2>::is_empty (const value_type &x)
+{
+  return T1::is_empty (x.first);
+}
+
+template <typename T> struct default_hash_traits : T {};
+
+template <typename T>
+struct default_hash_traits <T *> : ggc_ptr_hash <T> {};
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/hashtab.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hashtab.h
new file mode 100644
index 0000000..9bb0293
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hashtab.h
@@ -0,0 +1,204 @@
+/* An expandable hash tables datatype.  
+   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Contributed by Vladimir Makarov (vmakarov@cygnus.com).
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+/* This package implements basic hash table functionality.  It is possible
+   to search for an entry, create an entry and destroy an entry.
+
+   Elements in the table are generic pointers.
+
+   The size of the table is not fixed; if the occupancy of the table
+   grows too high the hash table will be expanded.
+
+   The abstract data implementation is based on generalized Algorithm D
+   from Knuth's book "The art of computer programming".  Hash table is
+   expanded by creation of new hash table and transferring elements from
+   the old table to the new table.  */
+
+#ifndef __HASHTAB_H__
+#define __HASHTAB_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "ansidecl.h"
+
+/* The type for a hash code.  */
+typedef unsigned int hashval_t;
+
+/* Callback function pointer types.  */
+
+/* Calculate hash of a table entry.  */
+typedef hashval_t (*htab_hash) (const void *);
+
+/* Compare a table entry with a possible entry.  The entry already in
+   the table always comes first, so the second element can be of a
+   different type (but in this case htab_find and htab_find_slot
+   cannot be used; instead the variants that accept a hash value
+   must be used).  */
+typedef int (*htab_eq) (const void *, const void *);
+
+/* Cleanup function called whenever a live element is removed from
+   the hash table.  */
+typedef void (*htab_del) (void *);
+  
+/* Function called by htab_traverse for each live element.  The first
+   arg is the slot of the element (which can be passed to htab_clear_slot
+   if desired), the second arg is the auxiliary pointer handed to
+   htab_traverse.  Return 1 to continue scan, 0 to stop.  */
+typedef int (*htab_trav) (void **, void *);
+
+/* Memory-allocation function, with the same functionality as calloc().
+   Iff it returns NULL, the hash table implementation will pass an error
+   code back to the user, so if your code doesn't handle errors,
+   best if you use xcalloc instead.  */
+typedef void *(*htab_alloc) (size_t, size_t);
+
+/* We also need a free() routine.  */
+typedef void (*htab_free) (void *);
+
+/* Memory allocation and deallocation; variants which take an extra
+   argument.  */
+typedef void *(*htab_alloc_with_arg) (void *, size_t, size_t);
+typedef void (*htab_free_with_arg) (void *, void *);
+
+/* This macro defines reserved value for empty table entry.  */
+
+#define HTAB_EMPTY_ENTRY    ((PTR) 0)
+
+/* This macro defines reserved value for table entry which contained
+   a deleted element. */
+
+#define HTAB_DELETED_ENTRY  ((PTR) 1)
+
+/* Hash tables are of the following type.  The structure
+   (implementation) of this type is not needed for using the hash
+   tables.  All work with hash table should be executed only through
+   functions mentioned below.  The size of this structure is subject to
+   change.  */
+
+struct htab {
+  /* Pointer to hash function.  */
+  htab_hash hash_f;
+
+  /* Pointer to comparison function.  */
+  htab_eq eq_f;
+
+  /* Pointer to cleanup function.  */
+  htab_del del_f;
+
+  /* Table itself.  */
+  void **entries;
+
+  /* Current size (in entries) of the hash table.  */
+  size_t size;
+
+  /* Current number of elements including also deleted elements.  */
+  size_t n_elements;
+
+  /* Current number of deleted elements in the table.  */
+  size_t n_deleted;
+
+  /* The following member is used for debugging. Its value is number
+     of all calls of `htab_find_slot' for the hash table. */
+  unsigned int searches;
+
+  /* The following member is used for debugging.  Its value is number
+     of collisions fixed for time of work with the hash table. */
+  unsigned int collisions;
+
+  /* Pointers to allocate/free functions.  */
+  htab_alloc alloc_f;
+  htab_free free_f;
+
+  /* Alternate allocate/free functions, which take an extra argument.  */
+  void *alloc_arg;
+  htab_alloc_with_arg alloc_with_arg_f;
+  htab_free_with_arg free_with_arg_f;
+
+  /* Current size (in entries) of the hash table, as an index into the
+     table of primes.  */
+  unsigned int size_prime_index;
+};
+
+typedef struct htab *htab_t;
+
+/* An enum saying whether we insert into the hash table or not.  */
+enum insert_option {NO_INSERT, INSERT};
+
+/* The prototypes of the package functions. */
+
+extern htab_t	htab_create_alloc  (size_t, htab_hash,
+                                    htab_eq, htab_del,
+                                    htab_alloc, htab_free);
+
+extern htab_t	htab_create_alloc_ex (size_t, htab_hash,
+                                      htab_eq, htab_del,
+                                      void *, htab_alloc_with_arg,
+                                      htab_free_with_arg);
+
+extern htab_t  htab_create_typed_alloc (size_t, htab_hash, htab_eq, htab_del,
+					htab_alloc, htab_alloc, htab_free);
+
+/* Backward-compatibility functions.  */
+extern htab_t htab_create (size_t, htab_hash, htab_eq, htab_del);
+extern htab_t htab_try_create (size_t, htab_hash, htab_eq, htab_del);
+
+extern void	htab_set_functions_ex (htab_t, htab_hash,
+                                       htab_eq, htab_del,
+                                       void *, htab_alloc_with_arg,
+                                       htab_free_with_arg);
+
+extern void	htab_delete (htab_t);
+extern void	htab_empty (htab_t);
+
+extern void *	htab_find (htab_t, const void *);
+extern void **	htab_find_slot (htab_t, const void *, enum insert_option);
+extern void *	htab_find_with_hash (htab_t, const void *, hashval_t);
+extern void **	htab_find_slot_with_hash (htab_t, const void *,
+					  hashval_t, enum insert_option);
+extern void	htab_clear_slot	(htab_t, void **);
+extern void	htab_remove_elt	(htab_t, void *);
+extern void	htab_remove_elt_with_hash (htab_t, void *, hashval_t);
+
+extern void	htab_traverse (htab_t, htab_trav, void *);
+extern void	htab_traverse_noresize (htab_t, htab_trav, void *);
+
+extern size_t	htab_size (htab_t);
+extern size_t	htab_elements (htab_t);
+extern double	htab_collisions	(htab_t);
+
+/* A hash function for pointers.  */
+extern htab_hash htab_hash_pointer;
+
+/* An equality function for pointers.  */
+extern htab_eq htab_eq_pointer;
+
+/* A hash function for null-terminated strings.  */
+extern hashval_t htab_hash_string (const void *);
+
+/* An iterative hash function for arbitrary data.  */
+extern hashval_t iterative_hash (const void *, size_t, hashval_t);
+/* Shorthand for hashing something with an intrinsic size.  */
+#define iterative_hash_object(OB,INIT) iterative_hash (&OB, sizeof (OB), INIT)
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __HASHTAB_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/highlev-plugin-common.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/highlev-plugin-common.h
new file mode 100644
index 0000000..9f91165
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/highlev-plugin-common.h
@@ -0,0 +1,33 @@
+/* Interface for high-level plugins in GCC - Parts common between GCC,
+   ICI and high-level plugins.
+
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+   Contributed by INRIA.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef HIGHLEV_PLUGIN_COMMON_H
+#define HIGHLEV_PLUGIN_COMMON_H
+
+/* Return codes for invoke_plugin_callbacks / call_plugin_event .  */
+#define PLUGEVT_SUCCESS         0
+#define PLUGEVT_NO_EVENTS       1
+#define PLUGEVT_NO_SUCH_EVENT   2
+#define PLUGEVT_NO_CALLBACK     3
+
+#endif /* HIGHLEV_PLUGIN_COMMON_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/hooks.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hooks.h
new file mode 100644
index 0000000..0bc8117
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hooks.h
@@ -0,0 +1,133 @@
+/* General-purpose hooks.
+   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.
+
+   In other words, you are welcome to use, share and improve this program.
+   You are forbidden to forbid anyone else to use, share and improve
+   what you give them.   Help stamp out software-hoarding!  */
+
+#ifndef GCC_HOOKS_H
+#define GCC_HOOKS_H
+
+
+extern bool hook_bool_void_false (void);
+extern bool hook_bool_void_true (void);
+extern bool hook_bool_bool_false (bool);
+extern bool hook_bool_bool_gcc_optionsp_false (bool, struct gcc_options *);
+extern bool hook_bool_const_int_const_int_true (const int, const int);
+extern bool hook_bool_mode_false (machine_mode);
+extern bool hook_bool_mode_true (machine_mode);
+extern bool hook_bool_mode_mode_true (machine_mode, machine_mode);
+extern bool hook_bool_mode_const_rtx_false (machine_mode, const_rtx);
+extern bool hook_bool_mode_const_rtx_true (machine_mode, const_rtx);
+extern bool hook_bool_mode_rtx_false (machine_mode, rtx);
+extern bool hook_bool_mode_rtx_true (machine_mode, rtx);
+extern bool hook_bool_const_rtx_insn_const_rtx_insn_true (const rtx_insn *,
+							  const rtx_insn *);
+extern bool hook_bool_mode_uhwi_false (machine_mode,
+				       unsigned HOST_WIDE_INT);
+extern bool hook_bool_puint64_puint64_true (poly_uint64, poly_uint64);
+extern bool hook_bool_insn_uint_mode_false (rtx_insn *, unsigned int,
+					    machine_mode);
+extern bool hook_bool_uint_mode_true (unsigned int, machine_mode);
+extern bool hook_bool_tree_false (tree);
+extern bool hook_bool_const_tree_false (const_tree);
+extern bool hook_bool_tree_true (tree);
+extern bool hook_bool_const_tree_true (const_tree);
+extern bool hook_bool_gsiptr_false (gimple_stmt_iterator *);
+extern bool hook_bool_const_tree_hwi_hwi_const_tree_false (const_tree,
+							   HOST_WIDE_INT,
+							   HOST_WIDE_INT,
+							   const_tree);
+extern bool hook_bool_const_tree_hwi_hwi_const_tree_true (const_tree,
+							  HOST_WIDE_INT,
+							  HOST_WIDE_INT,
+							  const_tree);
+extern bool hook_bool_rtx_insn_true (rtx_insn *);
+extern bool hook_bool_rtx_false (rtx);
+extern bool hook_bool_rtx_insn_int_false (rtx_insn *, int);
+extern bool hook_bool_uintp_uintp_false (unsigned int *, unsigned int *);
+extern bool hook_bool_reg_class_t_false (reg_class_t regclass);
+extern bool hook_bool_mode_mode_reg_class_t_true (machine_mode, machine_mode,
+						  reg_class_t);
+extern bool hook_bool_mode_reg_class_t_reg_class_t_false (machine_mode,
+							  reg_class_t,
+							  reg_class_t);
+extern bool hook_bool_rtx_mode_int_int_intp_bool_false (rtx, machine_mode,
+							int, int, int *, bool);
+extern bool hook_bool_tree_tree_false (tree, tree);
+extern bool hook_bool_tree_tree_true (tree, tree);
+extern bool hook_bool_tree_bool_false (tree, bool);
+extern bool hook_bool_wint_wint_uint_bool_true (const widest_int &,
+						const widest_int &,
+						unsigned int, bool);
+
+extern void hook_void_void (void);
+extern void hook_void_constcharptr (const char *);
+extern void hook_void_rtx_insn_int (rtx_insn *, int);
+extern void hook_void_FILEptr_constcharptr (FILE *, const char *);
+extern void hook_void_FILEptr_constcharptr_const_tree (FILE *, const char *,
+						       const_tree);
+extern bool hook_bool_FILEptr_rtx_false (FILE *, rtx);
+extern void hook_void_rtx_tree (rtx, tree);
+extern void hook_void_FILEptr_tree (FILE *, tree);
+extern void hook_void_tree (tree);
+extern void hook_void_tree_treeptr (tree, tree *);
+extern void hook_void_int_int (int, int);
+extern void hook_void_gcc_optionsp (struct gcc_options *);
+extern bool hook_bool_uint_uintp_false (unsigned int, unsigned int *);
+
+extern int hook_int_uint_mode_1 (unsigned int, machine_mode);
+extern int hook_int_const_tree_0 (const_tree);
+extern int hook_int_const_tree_const_tree_1 (const_tree, const_tree);
+extern int hook_int_rtx_0 (rtx);
+extern int hook_int_rtx_1 (rtx);
+extern int hook_int_rtx_insn_0 (rtx_insn *);
+extern int hook_int_rtx_insn_unreachable (rtx_insn *);
+extern int hook_int_rtx_bool_0 (rtx, bool);
+extern int hook_int_rtx_mode_as_bool_0 (rtx, machine_mode, addr_space_t,
+					bool);
+
+extern HOST_WIDE_INT hook_hwi_void_0 (void);
+
+extern tree hook_tree_const_tree_null (const_tree);
+extern tree hook_tree_void_null (void);
+
+extern tree hook_tree_tree_tree_null (tree, tree);
+extern tree hook_tree_tree_tree_tree_null (tree, tree, tree);
+extern tree hook_tree_tree_int_treep_bool_null (tree, int, tree *, bool);
+
+extern unsigned hook_uint_void_0 (void);
+extern unsigned int hook_uint_mode_0 (machine_mode);
+
+extern bool default_can_output_mi_thunk_no_vcall (const_tree, HOST_WIDE_INT,
+						  HOST_WIDE_INT, const_tree);
+
+extern rtx hook_rtx_rtx_identity (rtx);
+extern rtx hook_rtx_rtx_null (rtx);
+extern rtx hook_rtx_tree_int_null (tree, int);
+
+extern char *hook_charptr_void_null (void);
+extern const char *hook_constcharptr_void_null (void);
+extern const char *hook_constcharptr_const_tree_null (const_tree);
+extern const char *hook_constcharptr_const_rtx_insn_null (const rtx_insn *);
+extern const char *hook_constcharptr_const_tree_const_tree_null (const_tree, const_tree);
+extern const char *hook_constcharptr_int_const_tree_null (int, const_tree);
+extern const char *hook_constcharptr_int_const_tree_const_tree_null (int, const_tree, const_tree);
+
+extern opt_machine_mode hook_optmode_mode_uhwi_none (machine_mode,
+						     unsigned HOST_WIDE_INT);
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/hosthooks-def.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hosthooks-def.h
new file mode 100644
index 0000000..e955143
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hosthooks-def.h
@@ -0,0 +1,51 @@
+/* Default macros to initialize the lang_hooks data structure.
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_HOST_HOOKS_DEF_H
+#define GCC_HOST_HOOKS_DEF_H
+
+#include "hooks.h"
+
+#define HOST_HOOKS_EXTRA_SIGNALS hook_void_void
+#if HAVE_MMAP_FILE
+#define HOST_HOOKS_GT_PCH_GET_ADDRESS mmap_gt_pch_get_address
+#define HOST_HOOKS_GT_PCH_USE_ADDRESS mmap_gt_pch_use_address
+#else
+#define HOST_HOOKS_GT_PCH_GET_ADDRESS default_gt_pch_get_address
+#define HOST_HOOKS_GT_PCH_USE_ADDRESS default_gt_pch_use_address
+#endif
+
+#define HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY \
+  default_gt_pch_alloc_granularity
+
+extern void* default_gt_pch_get_address (size_t, int);
+extern int default_gt_pch_use_address (void *, size_t, int, size_t);
+extern size_t default_gt_pch_alloc_granularity (void);
+extern void* mmap_gt_pch_get_address (size_t, int);
+extern int mmap_gt_pch_use_address (void *, size_t, int, size_t);
+
+/* The structure is defined in hosthooks.h.  */
+#define HOST_HOOKS_INITIALIZER {		\
+  HOST_HOOKS_EXTRA_SIGNALS,			\
+  HOST_HOOKS_GT_PCH_GET_ADDRESS,		\
+  HOST_HOOKS_GT_PCH_USE_ADDRESS,		\
+  HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY		\
+}
+
+#endif /* GCC_HOST_HOOKS_DEF_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/hosthooks.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hosthooks.h
new file mode 100644
index 0000000..f4d1bfb
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hosthooks.h
@@ -0,0 +1,48 @@
+/* The host_hooks data structure.
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_HOST_HOOKS_H
+#define GCC_HOST_HOOKS_H
+
+struct host_hooks
+{
+  void (*extra_signals) (void);
+
+  /* Identify an address that's likely to be free in a subsequent invocation
+     of the compiler.  The area should be able to hold SIZE bytes.  FD is an
+     open file descriptor if the host would like to probe with mmap.  */
+  void * (*gt_pch_get_address) (size_t size, int fd);
+
+  /* ADDR is an address returned by gt_pch_get_address.  Attempt to allocate
+     SIZE bytes at the same address and load it with the data from FD at
+     OFFSET.  Return -1 if we couldn't allocate memory at ADDR, return 0
+     if the memory is allocated but the data not loaded, return 1 if done.  */
+  int (*gt_pch_use_address) (void *addr, size_t size, int fd, size_t offset);
+
+  /*  Return the alignment required for allocating virtual memory. Usually
+      this is the same as pagesize.  */
+  size_t (*gt_pch_alloc_granularity) (void);
+
+  /* Whenever you add entries here, make sure you adjust hosthooks-def.h.  */
+};
+
+/* Each host provides its own.  */
+extern const struct host_hooks host_hooks;
+
+#endif /* GCC_LANG_HOOKS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/hsa-brig-format.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hsa-brig-format.h
new file mode 100644
index 0000000..eb28863
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hsa-brig-format.h
@@ -0,0 +1,1234 @@
+/* HSA BRIG (binary representation of HSAIL) 1.0.1 representation description.
+   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.
+
+The contents of the file was created by extracting data structures, enum,
+typedef and other definitions from HSA Programmer's Reference Manual Version
+1.0.1 (http://www.hsafoundation.com/standards/).
+
+HTML version is provided on the following link:
+http://www.hsafoundation.com/html/Content/PRM/Topics/PRM_title_page.htm */
+
+#ifndef HSA_BRIG_FORMAT_H
+#define HSA_BRIG_FORMAT_H
+
+struct BrigModuleHeader;
+typedef uint16_t BrigKind16_t;
+typedef uint32_t BrigVersion32_t;
+
+typedef BrigModuleHeader *BrigModule_t;
+typedef uint32_t BrigDataOffset32_t;
+typedef uint32_t BrigCodeOffset32_t;
+typedef uint32_t BrigOperandOffset32_t;
+typedef BrigDataOffset32_t BrigDataOffsetString32_t;
+typedef BrigDataOffset32_t BrigDataOffsetCodeList32_t;
+typedef BrigDataOffset32_t BrigDataOffsetOperandList32_t;
+typedef uint8_t BrigAlignment8_t;
+
+enum BrigAlignment
+{
+  BRIG_ALIGNMENT_NONE = 0,
+  BRIG_ALIGNMENT_1 = 1,
+  BRIG_ALIGNMENT_2 = 2,
+  BRIG_ALIGNMENT_4 = 3,
+  BRIG_ALIGNMENT_8 = 4,
+  BRIG_ALIGNMENT_16 = 5,
+  BRIG_ALIGNMENT_32 = 6,
+  BRIG_ALIGNMENT_64 = 7,
+  BRIG_ALIGNMENT_128 = 8,
+  BRIG_ALIGNMENT_256 = 9
+};
+
+typedef uint8_t BrigAllocation8_t;
+
+enum BrigAllocation
+{
+  BRIG_ALLOCATION_NONE = 0,
+  BRIG_ALLOCATION_PROGRAM = 1,
+  BRIG_ALLOCATION_AGENT = 2,
+  BRIG_ALLOCATION_AUTOMATIC = 3
+};
+
+typedef uint8_t BrigAluModifier8_t;
+
+enum BrigAluModifierMask
+{
+  BRIG_ALU_FTZ = 1
+};
+
+typedef uint8_t BrigAtomicOperation8_t;
+
+enum BrigAtomicOperation
+{
+  BRIG_ATOMIC_ADD = 0,
+  BRIG_ATOMIC_AND = 1,
+  BRIG_ATOMIC_CAS = 2,
+  BRIG_ATOMIC_EXCH = 3,
+  BRIG_ATOMIC_LD = 4,
+  BRIG_ATOMIC_MAX = 5,
+  BRIG_ATOMIC_MIN = 6,
+  BRIG_ATOMIC_OR = 7,
+  BRIG_ATOMIC_ST = 8,
+  BRIG_ATOMIC_SUB = 9,
+  BRIG_ATOMIC_WRAPDEC = 10,
+  BRIG_ATOMIC_WRAPINC = 11,
+  BRIG_ATOMIC_XOR = 12,
+  BRIG_ATOMIC_WAIT_EQ = 13,
+  BRIG_ATOMIC_WAIT_NE = 14,
+  BRIG_ATOMIC_WAIT_LT = 15,
+  BRIG_ATOMIC_WAIT_GTE = 16,
+  BRIG_ATOMIC_WAITTIMEOUT_EQ = 17,
+  BRIG_ATOMIC_WAITTIMEOUT_NE = 18,
+  BRIG_ATOMIC_WAITTIMEOUT_LT = 19,
+  BRIG_ATOMIC_WAITTIMEOUT_GTE = 20
+};
+
+struct BrigBase
+{
+  uint16_t byteCount;
+  BrigKind16_t kind;
+};
+
+typedef uint8_t BrigCompareOperation8_t;
+
+enum BrigCompareOperation
+{
+  BRIG_COMPARE_EQ = 0,
+  BRIG_COMPARE_NE = 1,
+  BRIG_COMPARE_LT = 2,
+  BRIG_COMPARE_LE = 3,
+  BRIG_COMPARE_GT = 4,
+  BRIG_COMPARE_GE = 5,
+  BRIG_COMPARE_EQU = 6,
+  BRIG_COMPARE_NEU = 7,
+  BRIG_COMPARE_LTU = 8,
+  BRIG_COMPARE_LEU = 9,
+  BRIG_COMPARE_GTU = 10,
+  BRIG_COMPARE_GEU = 11,
+  BRIG_COMPARE_NUM = 12,
+  BRIG_COMPARE_NAN = 13,
+  BRIG_COMPARE_SEQ = 14,
+  BRIG_COMPARE_SNE = 15,
+  BRIG_COMPARE_SLT = 16,
+  BRIG_COMPARE_SLE = 17,
+  BRIG_COMPARE_SGT = 18,
+  BRIG_COMPARE_SGE = 19,
+  BRIG_COMPARE_SGEU = 20,
+  BRIG_COMPARE_SEQU = 21,
+  BRIG_COMPARE_SNEU = 22,
+  BRIG_COMPARE_SLTU = 23,
+  BRIG_COMPARE_SLEU = 24,
+  BRIG_COMPARE_SNUM = 25,
+  BRIG_COMPARE_SNAN = 26,
+  BRIG_COMPARE_SGTU = 27
+};
+
+typedef uint16_t BrigControlDirective16_t;
+
+enum BrigControlDirective
+{
+  BRIG_CONTROL_NONE = 0,
+  BRIG_CONTROL_ENABLEBREAKEXCEPTIONS = 1,
+  BRIG_CONTROL_ENABLEDETECTEXCEPTIONS = 2,
+  BRIG_CONTROL_MAXDYNAMICGROUPSIZE = 3,
+  BRIG_CONTROL_MAXFLATGRIDSIZE = 4,
+  BRIG_CONTROL_MAXFLATWORKGROUPSIZE = 5,
+  BRIG_CONTROL_REQUIREDDIM = 6,
+  BRIG_CONTROL_REQUIREDGRIDSIZE = 7,
+  BRIG_CONTROL_REQUIREDWORKGROUPSIZE = 8,
+  BRIG_CONTROL_REQUIRENOPARTIALWORKGROUPS = 9
+};
+
+typedef uint32_t BrigExceptions32_t;
+
+enum BrigExceptionsMask
+{
+  BRIG_EXCEPTIONS_INVALID_OPERATION = 1 << 0,
+  BRIG_EXCEPTIONS_DIVIDE_BY_ZERO = 1 << 1,
+  BRIG_EXCEPTIONS_OVERFLOW = 1 << 2,
+  BRIG_EXCEPTIONS_UNDERFLOW = 1 << 3,
+  BRIG_EXCEPTIONS_INEXACT = 1 << 4,
+  BRIG_EXCEPTIONS_FIRST_USER_DEFINED = 1 << 16
+};
+
+typedef uint8_t BrigExecutableModifier8_t;
+
+enum BrigExecutableModifierMask
+{
+  BRIG_EXECUTABLE_DEFINITION = 1
+};
+
+typedef uint8_t BrigImageChannelOrder8_t;
+
+enum BrigImageChannelOrder
+{
+  BRIG_CHANNEL_ORDER_A = 0,
+  BRIG_CHANNEL_ORDER_R = 1,
+  BRIG_CHANNEL_ORDER_RX = 2,
+  BRIG_CHANNEL_ORDER_RG = 3,
+  BRIG_CHANNEL_ORDER_RGX = 4,
+  BRIG_CHANNEL_ORDER_RA = 5,
+  BRIG_CHANNEL_ORDER_RGB = 6,
+  BRIG_CHANNEL_ORDER_RGBX = 7,
+  BRIG_CHANNEL_ORDER_RGBA = 8,
+  BRIG_CHANNEL_ORDER_BGRA = 9,
+  BRIG_CHANNEL_ORDER_ARGB = 10,
+  BRIG_CHANNEL_ORDER_ABGR = 11,
+  BRIG_CHANNEL_ORDER_SRGB = 12,
+  BRIG_CHANNEL_ORDER_SRGBX = 13,
+  BRIG_CHANNEL_ORDER_SRGBA = 14,
+  BRIG_CHANNEL_ORDER_SBGRA = 15,
+  BRIG_CHANNEL_ORDER_INTENSITY = 16,
+  BRIG_CHANNEL_ORDER_LUMINANCE = 17,
+  BRIG_CHANNEL_ORDER_DEPTH = 18,
+  BRIG_CHANNEL_ORDER_DEPTH_STENCIL = 19,
+  BRIG_CHANNEL_ORDER_FIRST_USER_DEFINED = 128
+};
+
+typedef uint8_t BrigImageChannelType8_t;
+
+enum BrigImageChannelType
+{
+  BRIG_CHANNEL_TYPE_SNORM_INT8 = 0,
+  BRIG_CHANNEL_TYPE_SNORM_INT16 = 1,
+  BRIG_CHANNEL_TYPE_UNORM_INT8 = 2,
+  BRIG_CHANNEL_TYPE_UNORM_INT16 = 3,
+  BRIG_CHANNEL_TYPE_UNORM_INT24 = 4,
+  BRIG_CHANNEL_TYPE_UNORM_SHORT_555 = 5,
+  BRIG_CHANNEL_TYPE_UNORM_SHORT_565 = 6,
+  BRIG_CHANNEL_TYPE_UNORM_INT_101010 = 7,
+  BRIG_CHANNEL_TYPE_SIGNED_INT8 = 8,
+  BRIG_CHANNEL_TYPE_SIGNED_INT16 = 9,
+  BRIG_CHANNEL_TYPE_SIGNED_INT32 = 10,
+  BRIG_CHANNEL_TYPE_UNSIGNED_INT8 = 11,
+  BRIG_CHANNEL_TYPE_UNSIGNED_INT16 = 12,
+  BRIG_CHANNEL_TYPE_UNSIGNED_INT32 = 13,
+  BRIG_CHANNEL_TYPE_HALF_FLOAT = 14,
+  BRIG_CHANNEL_TYPE_FLOAT = 15,
+  BRIG_CHANNEL_TYPE_FIRST_USER_DEFINED = 128
+};
+
+typedef uint8_t BrigImageGeometry8_t;
+
+enum BrigImageGeometry
+{
+  BRIG_GEOMETRY_1D = 0,
+  BRIG_GEOMETRY_2D = 1,
+  BRIG_GEOMETRY_3D = 2,
+  BRIG_GEOMETRY_1DA = 3,
+  BRIG_GEOMETRY_2DA = 4,
+  BRIG_GEOMETRY_1DB = 5,
+  BRIG_GEOMETRY_2DDEPTH = 6,
+  BRIG_GEOMETRY_2DADEPTH = 7,
+  BRIG_GEOMETRY_FIRST_USER_DEFINED = 128
+};
+
+typedef uint8_t BrigImageQuery8_t;
+
+enum BrigImageQuery
+{
+  BRIG_IMAGE_QUERY_WIDTH = 0,
+  BRIG_IMAGE_QUERY_HEIGHT = 1,
+  BRIG_IMAGE_QUERY_DEPTH = 2,
+  BRIG_IMAGE_QUERY_ARRAY = 3,
+  BRIG_IMAGE_QUERY_CHANNELORDER = 4,
+  BRIG_IMAGE_QUERY_CHANNELTYPE = 5
+};
+
+enum BrigKind
+{
+  BRIG_KIND_NONE = 0x0000,
+  BRIG_KIND_DIRECTIVE_BEGIN = 0x1000,
+  BRIG_KIND_DIRECTIVE_ARG_BLOCK_END = 0x1000,
+  BRIG_KIND_DIRECTIVE_ARG_BLOCK_START = 0x1001,
+  BRIG_KIND_DIRECTIVE_COMMENT = 0x1002,
+  BRIG_KIND_DIRECTIVE_CONTROL = 0x1003,
+  BRIG_KIND_DIRECTIVE_EXTENSION = 0x1004,
+  BRIG_KIND_DIRECTIVE_FBARRIER = 0x1005,
+  BRIG_KIND_DIRECTIVE_FUNCTION = 0x1006,
+  BRIG_KIND_DIRECTIVE_INDIRECT_FUNCTION = 0x1007,
+  BRIG_KIND_DIRECTIVE_KERNEL = 0x1008,
+  BRIG_KIND_DIRECTIVE_LABEL = 0x1009,
+  BRIG_KIND_DIRECTIVE_LOC = 0x100a,
+  BRIG_KIND_DIRECTIVE_MODULE = 0x100b,
+  BRIG_KIND_DIRECTIVE_PRAGMA = 0x100c,
+  BRIG_KIND_DIRECTIVE_SIGNATURE = 0x100d,
+  BRIG_KIND_DIRECTIVE_VARIABLE = 0x100e,
+  BRIG_KIND_DIRECTIVE_END = 0x100f,
+  BRIG_KIND_INST_BEGIN = 0x2000,
+  BRIG_KIND_INST_ADDR = 0x2000,
+  BRIG_KIND_INST_ATOMIC = 0x2001,
+  BRIG_KIND_INST_BASIC = 0x2002,
+  BRIG_KIND_INST_BR = 0x2003,
+  BRIG_KIND_INST_CMP = 0x2004,
+  BRIG_KIND_INST_CVT = 0x2005,
+  BRIG_KIND_INST_IMAGE = 0x2006,
+  BRIG_KIND_INST_LANE = 0x2007,
+  BRIG_KIND_INST_MEM = 0x2008,
+  BRIG_KIND_INST_MEM_FENCE = 0x2009,
+  BRIG_KIND_INST_MOD = 0x200a,
+  BRIG_KIND_INST_QUERY_IMAGE = 0x200b,
+  BRIG_KIND_INST_QUERY_SAMPLER = 0x200c,
+  BRIG_KIND_INST_QUEUE = 0x200d,
+  BRIG_KIND_INST_SEG = 0x200e,
+  BRIG_KIND_INST_SEG_CVT = 0x200f,
+  BRIG_KIND_INST_SIGNAL = 0x2010,
+  BRIG_KIND_INST_SOURCE_TYPE = 0x2011,
+  BRIG_KIND_INST_END = 0x2012,
+  BRIG_KIND_OPERAND_BEGIN = 0x3000,
+  BRIG_KIND_OPERAND_ADDRESS = 0x3000,
+  BRIG_KIND_OPERAND_ALIGN = 0x3001,
+  BRIG_KIND_OPERAND_CODE_LIST = 0x3002,
+  BRIG_KIND_OPERAND_CODE_REF = 0x3003,
+  BRIG_KIND_OPERAND_CONSTANT_BYTES = 0x3004,
+  BRIG_KIND_OPERAND_RESERVED = 0x3005,
+  BRIG_KIND_OPERAND_CONSTANT_IMAGE = 0x3006,
+  BRIG_KIND_OPERAND_CONSTANT_OPERAND_LIST = 0x3007,
+  BRIG_KIND_OPERAND_CONSTANT_SAMPLER = 0x3008,
+  BRIG_KIND_OPERAND_OPERAND_LIST = 0x3009,
+  BRIG_KIND_OPERAND_REGISTER = 0x300a,
+  BRIG_KIND_OPERAND_STRING = 0x300b,
+  BRIG_KIND_OPERAND_WAVESIZE = 0x300c,
+  BRIG_KIND_OPERAND_END = 0x300d
+};
+
+typedef uint8_t BrigLinkage8_t;
+
+enum BrigLinkage
+{
+  BRIG_LINKAGE_NONE = 0,
+  BRIG_LINKAGE_PROGRAM = 1,
+  BRIG_LINKAGE_MODULE = 2,
+  BRIG_LINKAGE_FUNCTION = 3,
+  BRIG_LINKAGE_ARG = 4
+};
+
+typedef uint8_t BrigMachineModel8_t;
+
+enum BrigMachineModel
+{
+  BRIG_MACHINE_SMALL = 0,
+  BRIG_MACHINE_LARGE = 1
+};
+
+typedef uint8_t BrigMemoryModifier8_t;
+
+enum BrigMemoryModifierMask
+{
+  BRIG_MEMORY_CONST = 1
+};
+
+typedef uint8_t BrigMemoryOrder8_t;
+
+enum BrigMemoryOrder
+{
+  BRIG_MEMORY_ORDER_NONE = 0,
+  BRIG_MEMORY_ORDER_RELAXED = 1,
+  BRIG_MEMORY_ORDER_SC_ACQUIRE = 2,
+  BRIG_MEMORY_ORDER_SC_RELEASE = 3,
+  BRIG_MEMORY_ORDER_SC_ACQUIRE_RELEASE = 4
+};
+
+typedef uint8_t BrigMemoryScope8_t;
+
+enum BrigMemoryScope
+{
+  BRIG_MEMORY_SCOPE_NONE = 0,
+  BRIG_MEMORY_SCOPE_WORKITEM = 1,
+  BRIG_MEMORY_SCOPE_WAVEFRONT = 2,
+  BRIG_MEMORY_SCOPE_WORKGROUP = 3,
+  BRIG_MEMORY_SCOPE_AGENT = 4,
+  BRIG_MEMORY_SCOPE_SYSTEM = 5
+};
+
+struct BrigModuleHeader
+{
+  char identification[8];
+  BrigVersion32_t brigMajor;
+  BrigVersion32_t brigMinor;
+  uint64_t byteCount;
+  uint8_t hash[64];
+  uint32_t reserved;
+  uint32_t sectionCount;
+  uint64_t sectionIndex;
+};
+
+typedef uint16_t BrigOpcode16_t;
+
+enum BrigOpcode
+{
+  BRIG_OPCODE_NOP = 0,
+  BRIG_OPCODE_ABS = 1,
+  BRIG_OPCODE_ADD = 2,
+  BRIG_OPCODE_BORROW = 3,
+  BRIG_OPCODE_CARRY = 4,
+  BRIG_OPCODE_CEIL = 5,
+  BRIG_OPCODE_COPYSIGN = 6,
+  BRIG_OPCODE_DIV = 7,
+  BRIG_OPCODE_FLOOR = 8,
+  BRIG_OPCODE_FMA = 9,
+  BRIG_OPCODE_FRACT = 10,
+  BRIG_OPCODE_MAD = 11,
+  BRIG_OPCODE_MAX = 12,
+  BRIG_OPCODE_MIN = 13,
+  BRIG_OPCODE_MUL = 14,
+  BRIG_OPCODE_MULHI = 15,
+  BRIG_OPCODE_NEG = 16,
+  BRIG_OPCODE_REM = 17,
+  BRIG_OPCODE_RINT = 18,
+  BRIG_OPCODE_SQRT = 19,
+  BRIG_OPCODE_SUB = 20,
+  BRIG_OPCODE_TRUNC = 21,
+  BRIG_OPCODE_MAD24 = 22,
+  BRIG_OPCODE_MAD24HI = 23,
+  BRIG_OPCODE_MUL24 = 24,
+  BRIG_OPCODE_MUL24HI = 25,
+  BRIG_OPCODE_SHL = 26,
+  BRIG_OPCODE_SHR = 27,
+  BRIG_OPCODE_AND = 28,
+  BRIG_OPCODE_NOT = 29,
+  BRIG_OPCODE_OR = 30,
+  BRIG_OPCODE_POPCOUNT = 31,
+  BRIG_OPCODE_XOR = 32,
+  BRIG_OPCODE_BITEXTRACT = 33,
+  BRIG_OPCODE_BITINSERT = 34,
+  BRIG_OPCODE_BITMASK = 35,
+  BRIG_OPCODE_BITREV = 36,
+  BRIG_OPCODE_BITSELECT = 37,
+  BRIG_OPCODE_FIRSTBIT = 38,
+  BRIG_OPCODE_LASTBIT = 39,
+  BRIG_OPCODE_COMBINE = 40,
+  BRIG_OPCODE_EXPAND = 41,
+  BRIG_OPCODE_LDA = 42,
+  BRIG_OPCODE_MOV = 43,
+  BRIG_OPCODE_SHUFFLE = 44,
+  BRIG_OPCODE_UNPACKHI = 45,
+  BRIG_OPCODE_UNPACKLO = 46,
+  BRIG_OPCODE_PACK = 47,
+  BRIG_OPCODE_UNPACK = 48,
+  BRIG_OPCODE_CMOV = 49,
+  BRIG_OPCODE_CLASS = 50,
+  BRIG_OPCODE_NCOS = 51,
+  BRIG_OPCODE_NEXP2 = 52,
+  BRIG_OPCODE_NFMA = 53,
+  BRIG_OPCODE_NLOG2 = 54,
+  BRIG_OPCODE_NRCP = 55,
+  BRIG_OPCODE_NRSQRT = 56,
+  BRIG_OPCODE_NSIN = 57,
+  BRIG_OPCODE_NSQRT = 58,
+  BRIG_OPCODE_BITALIGN = 59,
+  BRIG_OPCODE_BYTEALIGN = 60,
+  BRIG_OPCODE_PACKCVT = 61,
+  BRIG_OPCODE_UNPACKCVT = 62,
+  BRIG_OPCODE_LERP = 63,
+  BRIG_OPCODE_SAD = 64,
+  BRIG_OPCODE_SADHI = 65,
+  BRIG_OPCODE_SEGMENTP = 66,
+  BRIG_OPCODE_FTOS = 67,
+  BRIG_OPCODE_STOF = 68,
+  BRIG_OPCODE_CMP = 69,
+  BRIG_OPCODE_CVT = 70,
+  BRIG_OPCODE_LD = 71,
+  BRIG_OPCODE_ST = 72,
+  BRIG_OPCODE_ATOMIC = 73,
+  BRIG_OPCODE_ATOMICNORET = 74,
+  BRIG_OPCODE_SIGNAL = 75,
+  BRIG_OPCODE_SIGNALNORET = 76,
+  BRIG_OPCODE_MEMFENCE = 77,
+  BRIG_OPCODE_RDIMAGE = 78,
+  BRIG_OPCODE_LDIMAGE = 79,
+  BRIG_OPCODE_STIMAGE = 80,
+  BRIG_OPCODE_IMAGEFENCE = 81,
+  BRIG_OPCODE_QUERYIMAGE = 82,
+  BRIG_OPCODE_QUERYSAMPLER = 83,
+  BRIG_OPCODE_CBR = 84,
+  BRIG_OPCODE_BR = 85,
+  BRIG_OPCODE_SBR = 86,
+  BRIG_OPCODE_BARRIER = 87,
+  BRIG_OPCODE_WAVEBARRIER = 88,
+  BRIG_OPCODE_ARRIVEFBAR = 89,
+  BRIG_OPCODE_INITFBAR = 90,
+  BRIG_OPCODE_JOINFBAR = 91,
+  BRIG_OPCODE_LEAVEFBAR = 92,
+  BRIG_OPCODE_RELEASEFBAR = 93,
+  BRIG_OPCODE_WAITFBAR = 94,
+  BRIG_OPCODE_LDF = 95,
+  BRIG_OPCODE_ACTIVELANECOUNT = 96,
+  BRIG_OPCODE_ACTIVELANEID = 97,
+  BRIG_OPCODE_ACTIVELANEMASK = 98,
+  BRIG_OPCODE_ACTIVELANEPERMUTE = 99,
+  BRIG_OPCODE_CALL = 100,
+  BRIG_OPCODE_SCALL = 101,
+  BRIG_OPCODE_ICALL = 102,
+  BRIG_OPCODE_RET = 103,
+  BRIG_OPCODE_ALLOCA = 104,
+  BRIG_OPCODE_CURRENTWORKGROUPSIZE = 105,
+  BRIG_OPCODE_CURRENTWORKITEMFLATID = 106,
+  BRIG_OPCODE_DIM = 107,
+  BRIG_OPCODE_GRIDGROUPS = 108,
+  BRIG_OPCODE_GRIDSIZE = 109,
+  BRIG_OPCODE_PACKETCOMPLETIONSIG = 110,
+  BRIG_OPCODE_PACKETID = 111,
+  BRIG_OPCODE_WORKGROUPID = 112,
+  BRIG_OPCODE_WORKGROUPSIZE = 113,
+  BRIG_OPCODE_WORKITEMABSID = 114,
+  BRIG_OPCODE_WORKITEMFLATABSID = 115,
+  BRIG_OPCODE_WORKITEMFLATID = 116,
+  BRIG_OPCODE_WORKITEMID = 117,
+  BRIG_OPCODE_CLEARDETECTEXCEPT = 118,
+  BRIG_OPCODE_GETDETECTEXCEPT = 119,
+  BRIG_OPCODE_SETDETECTEXCEPT = 120,
+  BRIG_OPCODE_ADDQUEUEWRITEINDEX = 121,
+  BRIG_OPCODE_CASQUEUEWRITEINDEX = 122,
+  BRIG_OPCODE_LDQUEUEREADINDEX = 123,
+  BRIG_OPCODE_LDQUEUEWRITEINDEX = 124,
+  BRIG_OPCODE_STQUEUEREADINDEX = 125,
+  BRIG_OPCODE_STQUEUEWRITEINDEX = 126,
+  BRIG_OPCODE_CLOCK = 127,
+  BRIG_OPCODE_CUID = 128,
+  BRIG_OPCODE_DEBUGTRAP = 129,
+  BRIG_OPCODE_GROUPBASEPTR = 130,
+  BRIG_OPCODE_KERNARGBASEPTR = 131,
+  BRIG_OPCODE_LANEID = 132,
+  BRIG_OPCODE_MAXCUID = 133,
+  BRIG_OPCODE_MAXWAVEID = 134,
+  BRIG_OPCODE_NULLPTR = 135,
+  BRIG_OPCODE_WAVEID = 136,
+  BRIG_OPCODE_FIRST_USER_DEFINED = 32768
+};
+
+typedef uint8_t BrigPack8_t;
+
+enum BrigPack
+{
+  BRIG_PACK_NONE = 0,
+  BRIG_PACK_PP = 1,
+  BRIG_PACK_PS = 2,
+  BRIG_PACK_SP = 3,
+  BRIG_PACK_SS = 4,
+  BRIG_PACK_S = 5,
+  BRIG_PACK_P = 6,
+  BRIG_PACK_PPSAT = 7,
+  BRIG_PACK_PSSAT = 8,
+  BRIG_PACK_SPSAT = 9,
+  BRIG_PACK_SSSAT = 10,
+  BRIG_PACK_SSAT = 11,
+  BRIG_PACK_PSAT = 12
+};
+
+typedef uint8_t BrigProfile8_t;
+
+enum BrigProfile
+{
+  BRIG_PROFILE_BASE = 0,
+  BRIG_PROFILE_FULL = 1
+};
+
+typedef uint16_t BrigRegisterKind16_t;
+
+enum BrigRegisterKind
+{
+  BRIG_REGISTER_KIND_CONTROL = 0,
+  BRIG_REGISTER_KIND_SINGLE = 1,
+  BRIG_REGISTER_KIND_DOUBLE = 2,
+  BRIG_REGISTER_KIND_QUAD = 3
+};
+
+typedef uint8_t BrigRound8_t;
+
+enum BrigRound
+{
+  BRIG_ROUND_NONE = 0,
+  BRIG_ROUND_FLOAT_DEFAULT = 1,
+  BRIG_ROUND_FLOAT_NEAR_EVEN = 2,
+  BRIG_ROUND_FLOAT_ZERO = 3,
+  BRIG_ROUND_FLOAT_PLUS_INFINITY = 4,
+  BRIG_ROUND_FLOAT_MINUS_INFINITY = 5,
+  BRIG_ROUND_INTEGER_NEAR_EVEN = 6,
+  BRIG_ROUND_INTEGER_ZERO = 7,
+  BRIG_ROUND_INTEGER_PLUS_INFINITY = 8,
+  BRIG_ROUND_INTEGER_MINUS_INFINITY = 9,
+  BRIG_ROUND_INTEGER_NEAR_EVEN_SAT = 10,
+  BRIG_ROUND_INTEGER_ZERO_SAT = 11,
+  BRIG_ROUND_INTEGER_PLUS_INFINITY_SAT = 12,
+  BRIG_ROUND_INTEGER_MINUS_INFINITY_SAT = 13,
+  BRIG_ROUND_INTEGER_SIGNALING_NEAR_EVEN = 14,
+  BRIG_ROUND_INTEGER_SIGNALING_ZERO = 15,
+  BRIG_ROUND_INTEGER_SIGNALING_PLUS_INFINITY = 16,
+  BRIG_ROUND_INTEGER_SIGNALING_MINUS_INFINITY = 17,
+  BRIG_ROUND_INTEGER_SIGNALING_NEAR_EVEN_SAT = 18,
+  BRIG_ROUND_INTEGER_SIGNALING_ZERO_SAT = 19,
+  BRIG_ROUND_INTEGER_SIGNALING_PLUS_INFINITY_SAT = 20,
+  BRIG_ROUND_INTEGER_SIGNALING_MINUS_INFINITY_SAT = 21
+};
+
+typedef uint8_t BrigSamplerAddressing8_t;
+
+enum BrigSamplerAddressing
+{
+  BRIG_ADDRESSING_UNDEFINED = 0,
+  BRIG_ADDRESSING_CLAMP_TO_EDGE = 1,
+  BRIG_ADDRESSING_CLAMP_TO_BORDER = 2,
+  BRIG_ADDRESSING_REPEAT = 3,
+  BRIG_ADDRESSING_MIRRORED_REPEAT = 4,
+  BRIG_ADDRESSING_FIRST_USER_DEFINED = 128
+};
+
+typedef uint8_t BrigSamplerCoordNormalization8_t;
+
+enum BrigSamplerCoordNormalization
+{
+  BRIG_COORD_UNNORMALIZED = 0,
+  BRIG_COORD_NORMALIZED = 1
+};
+
+typedef uint8_t BrigSamplerFilter8_t;
+
+enum BrigSamplerFilter
+{
+  BRIG_FILTER_NEAREST = 0,
+  BRIG_FILTER_LINEAR = 1,
+  BRIG_FILTER_FIRST_USER_DEFINED = 128
+};
+
+typedef uint8_t BrigSamplerQuery8_t;
+
+enum BrigSamplerQuery
+{
+  BRIG_SAMPLER_QUERY_ADDRESSING = 0,
+  BRIG_SAMPLER_QUERY_COORD = 1,
+  BRIG_SAMPLER_QUERY_FILTER = 2
+};
+
+typedef uint32_t BrigSectionIndex32_t;
+
+enum BrigSectionIndex
+{
+  BRIG_SECTION_INDEX_DATA = 0,
+  BRIG_SECTION_INDEX_CODE = 1,
+  BRIG_SECTION_INDEX_OPERAND = 2,
+  BRIG_SECTION_INDEX_BEGIN_IMPLEMENTATION_DEFINED = 3
+};
+
+struct BrigSectionHeader
+{
+  uint64_t byteCount;
+  uint32_t headerByteCount;
+  uint32_t nameLength;
+  uint8_t name[1];
+};
+
+typedef uint8_t BrigSegCvtModifier8_t;
+
+enum BrigSegCvtModifierMask
+{
+  BRIG_SEG_CVT_NONULL = 1
+};
+
+typedef uint8_t BrigSegment8_t;
+
+enum BrigSegment
+{
+  BRIG_SEGMENT_NONE = 0,
+  BRIG_SEGMENT_FLAT = 1,
+  BRIG_SEGMENT_GLOBAL = 2,
+  BRIG_SEGMENT_READONLY = 3,
+  BRIG_SEGMENT_KERNARG = 4,
+  BRIG_SEGMENT_GROUP = 5,
+  BRIG_SEGMENT_PRIVATE = 6,
+  BRIG_SEGMENT_SPILL = 7,
+  BRIG_SEGMENT_ARG = 8,
+  BRIG_SEGMENT_FIRST_USER_DEFINED = 128
+};
+
+enum
+{
+  BRIG_TYPE_BASE_SIZE = 5,
+  BRIG_TYPE_PACK_SIZE = 2,
+  BRIG_TYPE_ARRAY_SIZE = 1,
+
+  BRIG_TYPE_BASE_SHIFT = 0,
+  BRIG_TYPE_PACK_SHIFT = BRIG_TYPE_BASE_SHIFT + BRIG_TYPE_BASE_SIZE,
+  BRIG_TYPE_ARRAY_SHIFT = BRIG_TYPE_PACK_SHIFT + BRIG_TYPE_PACK_SIZE,
+
+  BRIG_TYPE_BASE_MASK = ((1 << BRIG_TYPE_BASE_SIZE) - 1)
+			<< BRIG_TYPE_BASE_SHIFT,
+  BRIG_TYPE_PACK_MASK = ((1 << BRIG_TYPE_PACK_SIZE) - 1)
+			<< BRIG_TYPE_PACK_SHIFT,
+  BRIG_TYPE_ARRAY_MASK = ((1 << BRIG_TYPE_ARRAY_SIZE) - 1)
+			 << BRIG_TYPE_ARRAY_SHIFT,
+
+  BRIG_TYPE_PACK_NONE = 0 << BRIG_TYPE_PACK_SHIFT,
+  BRIG_TYPE_PACK_32 = 1 << BRIG_TYPE_PACK_SHIFT,
+  BRIG_TYPE_PACK_64 = 2 << BRIG_TYPE_PACK_SHIFT,
+  BRIG_TYPE_PACK_128 = 3 << BRIG_TYPE_PACK_SHIFT,
+
+  BRIG_TYPE_ARRAY = 1 << BRIG_TYPE_ARRAY_SHIFT
+};
+
+typedef uint16_t BrigType16_t;
+
+enum BrigType
+{
+  BRIG_TYPE_NONE = 0,
+
+  BRIG_TYPE_U8 = 1,
+  BRIG_TYPE_U16 = 2,
+  BRIG_TYPE_U32 = 3,
+  BRIG_TYPE_U64 = 4,
+
+  BRIG_TYPE_S8 = 5,
+  BRIG_TYPE_S16 = 6,
+  BRIG_TYPE_S32 = 7,
+  BRIG_TYPE_S64 = 8,
+
+  BRIG_TYPE_F16 = 9,
+  BRIG_TYPE_F32 = 10,
+  BRIG_TYPE_F64 = 11,
+
+  BRIG_TYPE_B1 = 12,
+  BRIG_TYPE_B8 = 13,
+  BRIG_TYPE_B16 = 14,
+  BRIG_TYPE_B32 = 15,
+  BRIG_TYPE_B64 = 16,
+  BRIG_TYPE_B128 = 17,
+
+  BRIG_TYPE_SAMP = 18,
+  BRIG_TYPE_ROIMG = 19,
+  BRIG_TYPE_WOIMG = 20,
+  BRIG_TYPE_RWIMG = 21,
+
+  BRIG_TYPE_SIG32 = 22,
+  BRIG_TYPE_SIG64 = 23,
+
+  BRIG_TYPE_U8X4 = BRIG_TYPE_U8 | BRIG_TYPE_PACK_32,
+  BRIG_TYPE_U8X8 = BRIG_TYPE_U8 | BRIG_TYPE_PACK_64,
+  BRIG_TYPE_U8X16 = BRIG_TYPE_U8 | BRIG_TYPE_PACK_128,
+
+  BRIG_TYPE_U16X2 = BRIG_TYPE_U16 | BRIG_TYPE_PACK_32,
+  BRIG_TYPE_U16X4 = BRIG_TYPE_U16 | BRIG_TYPE_PACK_64,
+  BRIG_TYPE_U16X8 = BRIG_TYPE_U16 | BRIG_TYPE_PACK_128,
+
+  BRIG_TYPE_U32X2 = BRIG_TYPE_U32 | BRIG_TYPE_PACK_64,
+  BRIG_TYPE_U32X4 = BRIG_TYPE_U32 | BRIG_TYPE_PACK_128,
+
+  BRIG_TYPE_U64X2 = BRIG_TYPE_U64 | BRIG_TYPE_PACK_128,
+
+  BRIG_TYPE_S8X4 = BRIG_TYPE_S8 | BRIG_TYPE_PACK_32,
+  BRIG_TYPE_S8X8 = BRIG_TYPE_S8 | BRIG_TYPE_PACK_64,
+  BRIG_TYPE_S8X16 = BRIG_TYPE_S8 | BRIG_TYPE_PACK_128,
+
+  BRIG_TYPE_S16X2 = BRIG_TYPE_S16 | BRIG_TYPE_PACK_32,
+  BRIG_TYPE_S16X4 = BRIG_TYPE_S16 | BRIG_TYPE_PACK_64,
+  BRIG_TYPE_S16X8 = BRIG_TYPE_S16 | BRIG_TYPE_PACK_128,
+
+  BRIG_TYPE_S32X2 = BRIG_TYPE_S32 | BRIG_TYPE_PACK_64,
+  BRIG_TYPE_S32X4 = BRIG_TYPE_S32 | BRIG_TYPE_PACK_128,
+
+  BRIG_TYPE_S64X2 = BRIG_TYPE_S64 | BRIG_TYPE_PACK_128,
+
+  BRIG_TYPE_F16X2 = BRIG_TYPE_F16 | BRIG_TYPE_PACK_32,
+  BRIG_TYPE_F16X4 = BRIG_TYPE_F16 | BRIG_TYPE_PACK_64,
+  BRIG_TYPE_F16X8 = BRIG_TYPE_F16 | BRIG_TYPE_PACK_128,
+
+  BRIG_TYPE_F32X2 = BRIG_TYPE_F32 | BRIG_TYPE_PACK_64,
+  BRIG_TYPE_F32X4 = BRIG_TYPE_F32 | BRIG_TYPE_PACK_128,
+
+  BRIG_TYPE_F64X2 = BRIG_TYPE_F64 | BRIG_TYPE_PACK_128,
+
+  BRIG_TYPE_U8_ARRAY = BRIG_TYPE_U8 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_U16_ARRAY = BRIG_TYPE_U16 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_U32_ARRAY = BRIG_TYPE_U32 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_U64_ARRAY = BRIG_TYPE_U64 | BRIG_TYPE_ARRAY,
+
+  BRIG_TYPE_S8_ARRAY = BRIG_TYPE_S8 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_S16_ARRAY = BRIG_TYPE_S16 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_S32_ARRAY = BRIG_TYPE_S32 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_S64_ARRAY = BRIG_TYPE_S64 | BRIG_TYPE_ARRAY,
+
+  BRIG_TYPE_F16_ARRAY = BRIG_TYPE_F16 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_F32_ARRAY = BRIG_TYPE_F32 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_F64_ARRAY = BRIG_TYPE_F64 | BRIG_TYPE_ARRAY,
+
+  BRIG_TYPE_B8_ARRAY = BRIG_TYPE_B8 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_B16_ARRAY = BRIG_TYPE_B16 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_B32_ARRAY = BRIG_TYPE_B32 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_B64_ARRAY = BRIG_TYPE_B64 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_B128_ARRAY = BRIG_TYPE_B128 | BRIG_TYPE_ARRAY,
+
+  BRIG_TYPE_SAMP_ARRAY = BRIG_TYPE_SAMP | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_ROIMG_ARRAY = BRIG_TYPE_ROIMG | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_WOIMG_ARRAY = BRIG_TYPE_WOIMG | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_RWIMG_ARRAY = BRIG_TYPE_RWIMG | BRIG_TYPE_ARRAY,
+
+  BRIG_TYPE_SIG32_ARRAY = BRIG_TYPE_SIG32 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_SIG64_ARRAY = BRIG_TYPE_SIG64 | BRIG_TYPE_ARRAY,
+
+  BRIG_TYPE_U8X4_ARRAY = BRIG_TYPE_U8X4 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_U8X8_ARRAY = BRIG_TYPE_U8X8 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_U8X16_ARRAY = BRIG_TYPE_U8X16 | BRIG_TYPE_ARRAY,
+
+  BRIG_TYPE_U16X2_ARRAY = BRIG_TYPE_U16X2 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_U16X4_ARRAY = BRIG_TYPE_U16X4 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_U16X8_ARRAY = BRIG_TYPE_U16X8 | BRIG_TYPE_ARRAY,
+
+  BRIG_TYPE_U32X2_ARRAY = BRIG_TYPE_U32X2 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_U32X4_ARRAY = BRIG_TYPE_U32X4 | BRIG_TYPE_ARRAY,
+
+  BRIG_TYPE_U64X2_ARRAY = BRIG_TYPE_U64X2 | BRIG_TYPE_ARRAY,
+
+  BRIG_TYPE_S8X4_ARRAY = BRIG_TYPE_S8X4 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_S8X8_ARRAY = BRIG_TYPE_S8X8 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_S8X16_ARRAY = BRIG_TYPE_S8X16 | BRIG_TYPE_ARRAY,
+
+  BRIG_TYPE_S16X2_ARRAY = BRIG_TYPE_S16X2 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_S16X4_ARRAY = BRIG_TYPE_S16X4 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_S16X8_ARRAY = BRIG_TYPE_S16X8 | BRIG_TYPE_ARRAY,
+
+  BRIG_TYPE_S32X2_ARRAY = BRIG_TYPE_S32X2 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_S32X4_ARRAY = BRIG_TYPE_S32X4 | BRIG_TYPE_ARRAY,
+
+  BRIG_TYPE_S64X2_ARRAY = BRIG_TYPE_S64X2 | BRIG_TYPE_ARRAY,
+
+  BRIG_TYPE_F16X2_ARRAY = BRIG_TYPE_F16X2 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_F16X4_ARRAY = BRIG_TYPE_F16X4 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_F16X8_ARRAY = BRIG_TYPE_F16X8 | BRIG_TYPE_ARRAY,
+
+  BRIG_TYPE_F32X2_ARRAY = BRIG_TYPE_F32X2 | BRIG_TYPE_ARRAY,
+  BRIG_TYPE_F32X4_ARRAY = BRIG_TYPE_F32X4 | BRIG_TYPE_ARRAY,
+
+  BRIG_TYPE_F64X2_ARRAY = BRIG_TYPE_F64X2 | BRIG_TYPE_ARRAY
+};
+
+struct BrigUInt64
+{
+  uint32_t lo;
+  uint32_t hi;
+};
+
+typedef uint8_t BrigVariableModifier8_t;
+
+enum BrigVariableModifierMask
+{
+  BRIG_VARIABLE_DEFINITION = 1,
+  BRIG_VARIABLE_CONST = 2
+};
+
+enum BrigVersion
+{
+  BRIG_VERSION_HSAIL_MAJOR = 1,
+  BRIG_VERSION_HSAIL_MINOR = 0,
+  BRIG_VERSION_BRIG_MAJOR = 1,
+  BRIG_VERSION_BRIG_MINOR = 0
+};
+
+typedef uint8_t BrigWidth8_t;
+
+enum BrigWidth
+{
+  BRIG_WIDTH_NONE = 0,
+  BRIG_WIDTH_1 = 1,
+  BRIG_WIDTH_2 = 2,
+  BRIG_WIDTH_4 = 3,
+  BRIG_WIDTH_8 = 4,
+  BRIG_WIDTH_16 = 5,
+  BRIG_WIDTH_32 = 6,
+  BRIG_WIDTH_64 = 7,
+  BRIG_WIDTH_128 = 8,
+  BRIG_WIDTH_256 = 9,
+  BRIG_WIDTH_512 = 10,
+  BRIG_WIDTH_1024 = 11,
+  BRIG_WIDTH_2048 = 12,
+  BRIG_WIDTH_4096 = 13,
+  BRIG_WIDTH_8192 = 14,
+  BRIG_WIDTH_16384 = 15,
+  BRIG_WIDTH_32768 = 16,
+  BRIG_WIDTH_65536 = 17,
+  BRIG_WIDTH_131072 = 18,
+  BRIG_WIDTH_262144 = 19,
+  BRIG_WIDTH_524288 = 20,
+  BRIG_WIDTH_1048576 = 21,
+  BRIG_WIDTH_2097152 = 22,
+  BRIG_WIDTH_4194304 = 23,
+  BRIG_WIDTH_8388608 = 24,
+  BRIG_WIDTH_16777216 = 25,
+  BRIG_WIDTH_33554432 = 26,
+  BRIG_WIDTH_67108864 = 27,
+  BRIG_WIDTH_134217728 = 28,
+  BRIG_WIDTH_268435456 = 29,
+  BRIG_WIDTH_536870912 = 30,
+  BRIG_WIDTH_1073741824 = 31,
+  BRIG_WIDTH_2147483648 = 32,
+  BRIG_WIDTH_WAVESIZE = 33,
+  BRIG_WIDTH_ALL = 34
+};
+
+struct BrigData
+{
+  uint32_t byteCount;
+  uint8_t bytes[1];
+};
+
+struct BrigDirectiveArgBlock
+{
+  BrigBase base;
+};
+
+struct BrigDirectiveComment
+{
+  BrigBase base;
+  BrigDataOffsetString32_t name;
+};
+
+struct BrigDirectiveControl
+{
+  BrigBase base;
+  BrigControlDirective16_t control;
+  uint16_t reserved;
+  BrigDataOffsetOperandList32_t operands;
+};
+
+struct BrigDirectiveExecutable
+{
+  BrigBase base;
+  BrigDataOffsetString32_t name;
+  uint16_t outArgCount;
+  uint16_t inArgCount;
+  BrigCodeOffset32_t firstInArg;
+  BrigCodeOffset32_t firstCodeBlockEntry;
+  BrigCodeOffset32_t nextModuleEntry;
+  BrigExecutableModifier8_t modifier;
+  BrigLinkage8_t linkage;
+  uint16_t reserved;
+};
+
+struct BrigDirectiveExtension
+{
+  BrigBase base;
+  BrigDataOffsetString32_t name;
+};
+
+struct BrigDirectiveFbarrier
+{
+  BrigBase base;
+  BrigDataOffsetString32_t name;
+  BrigVariableModifier8_t modifier;
+  BrigLinkage8_t linkage;
+  uint16_t reserved;
+};
+
+struct BrigDirectiveLabel
+{
+  BrigBase base;
+  BrigDataOffsetString32_t name;
+};
+
+struct BrigDirectiveLoc
+{
+  BrigBase base;
+  BrigDataOffsetString32_t filename;
+  uint32_t line;
+  uint32_t column;
+};
+
+struct BrigDirectiveModule
+{
+  BrigBase base;
+  BrigDataOffsetString32_t name;
+  BrigVersion32_t hsailMajor;
+  BrigVersion32_t hsailMinor;
+  BrigProfile8_t profile;
+  BrigMachineModel8_t machineModel;
+  BrigRound8_t defaultFloatRound;
+  uint8_t reserved;
+};
+
+struct BrigDirectiveNone
+{
+  BrigBase base;
+};
+
+struct BrigDirectivePragma
+{
+  BrigBase base;
+  BrigDataOffsetOperandList32_t operands;
+};
+
+struct BrigDirectiveVariable
+{
+  BrigBase base;
+  BrigDataOffsetString32_t name;
+  BrigOperandOffset32_t init;
+  BrigType16_t type;
+  BrigSegment8_t segment;
+  BrigAlignment8_t align;
+  BrigUInt64 dim;
+  BrigVariableModifier8_t modifier;
+  BrigLinkage8_t linkage;
+  BrigAllocation8_t allocation;
+  uint8_t reserved;
+};
+
+struct BrigInstBase
+{
+  BrigBase base;
+  BrigOpcode16_t opcode;
+  BrigType16_t type;
+  BrigDataOffsetOperandList32_t operands;
+};
+
+struct BrigInstAddr
+{
+  BrigInstBase base;
+  BrigSegment8_t segment;
+  uint8_t reserved[3];
+};
+
+struct BrigInstAtomic
+{
+  BrigInstBase base;
+  BrigSegment8_t segment;
+  BrigMemoryOrder8_t memoryOrder;
+  BrigMemoryScope8_t memoryScope;
+  BrigAtomicOperation8_t atomicOperation;
+  uint8_t equivClass;
+  uint8_t reserved[3];
+};
+
+struct BrigInstBasic
+{
+  BrigInstBase base;
+};
+
+struct BrigInstBr
+{
+  BrigInstBase base;
+  BrigWidth8_t width;
+  uint8_t reserved[3];
+};
+
+struct BrigInstCmp
+{
+  BrigInstBase base;
+  BrigType16_t sourceType;
+  BrigAluModifier8_t modifier;
+  BrigCompareOperation8_t compare;
+  BrigPack8_t pack;
+  uint8_t reserved[3];
+};
+
+struct BrigInstCvt
+{
+  BrigInstBase base;
+  BrigType16_t sourceType;
+  BrigAluModifier8_t modifier;
+  BrigRound8_t round;
+};
+
+struct BrigInstImage
+{
+  BrigInstBase base;
+  BrigType16_t imageType;
+  BrigType16_t coordType;
+  BrigImageGeometry8_t geometry;
+  uint8_t equivClass;
+  uint16_t reserved;
+};
+
+struct BrigInstLane
+{
+  BrigInstBase base;
+  BrigType16_t sourceType;
+  BrigWidth8_t width;
+  uint8_t reserved;
+};
+
+struct BrigInstMem
+{
+  BrigInstBase base;
+  BrigSegment8_t segment;
+  BrigAlignment8_t align;
+  uint8_t equivClass;
+  BrigWidth8_t width;
+  BrigMemoryModifier8_t modifier;
+  uint8_t reserved[3];
+};
+
+struct BrigInstMemFence
+{
+  BrigInstBase base;
+  BrigMemoryOrder8_t memoryOrder;
+  BrigMemoryScope8_t globalSegmentMemoryScope;
+  BrigMemoryScope8_t groupSegmentMemoryScope;
+  BrigMemoryScope8_t imageSegmentMemoryScope;
+};
+
+struct BrigInstMod
+{
+  BrigInstBase base;
+  BrigAluModifier8_t modifier;
+  BrigRound8_t round;
+  BrigPack8_t pack;
+  uint8_t reserved;
+};
+
+struct BrigInstQueryImage
+{
+  BrigInstBase base;
+  BrigType16_t imageType;
+  BrigImageGeometry8_t geometry;
+  BrigImageQuery8_t query;
+};
+
+struct BrigInstQuerySampler
+{
+  BrigInstBase base;
+  BrigSamplerQuery8_t query;
+  uint8_t reserved[3];
+};
+
+struct BrigInstQueue
+{
+  BrigInstBase base;
+  BrigSegment8_t segment;
+  BrigMemoryOrder8_t memoryOrder;
+  uint16_t reserved;
+};
+
+struct BrigInstSeg
+{
+  BrigInstBase base;
+  BrigSegment8_t segment;
+  uint8_t reserved[3];
+};
+
+struct BrigInstSegCvt
+{
+  BrigInstBase base;
+  BrigType16_t sourceType;
+  BrigSegment8_t segment;
+  BrigSegCvtModifier8_t modifier;
+};
+
+struct BrigInstSignal
+{
+  BrigInstBase base;
+  BrigType16_t signalType;
+  BrigMemoryOrder8_t memoryOrder;
+  BrigAtomicOperation8_t signalOperation;
+};
+
+struct BrigInstSourceType
+{
+  BrigInstBase base;
+  BrigType16_t sourceType;
+  uint16_t reserved;
+};
+
+struct BrigOperandAddress
+{
+  BrigBase base;
+  BrigCodeOffset32_t symbol;
+  BrigOperandOffset32_t reg;
+  BrigUInt64 offset;
+};
+
+struct BrigOperandAlign
+{
+  BrigBase base;
+  BrigAlignment8_t align;
+  uint8_t reserved[3];
+};
+
+struct BrigOperandCodeList
+{
+  BrigBase base;
+  BrigDataOffsetCodeList32_t elements;
+};
+
+struct BrigOperandCodeRef
+{
+  BrigBase base;
+  BrigCodeOffset32_t ref;
+};
+
+struct BrigOperandConstantBytes
+{
+  BrigBase base;
+  BrigType16_t type;
+  uint16_t reserved;
+  BrigDataOffsetString32_t bytes;
+};
+
+struct BrigOperandConstantImage
+{
+  BrigBase base;
+  BrigType16_t type;
+  BrigImageGeometry8_t geometry;
+  BrigImageChannelOrder8_t channelOrder;
+  BrigImageChannelType8_t channelType;
+  uint8_t reserved[3];
+  BrigUInt64 width;
+  BrigUInt64 height;
+  BrigUInt64 depth;
+  BrigUInt64 array;
+};
+
+struct BrigOperandConstantOperandList
+{
+  BrigBase base;
+  BrigType16_t type;
+  uint16_t reserved;
+  BrigDataOffsetOperandList32_t elements;
+};
+
+struct BrigOperandConstantSampler
+{
+  BrigBase base;
+  BrigType16_t type;
+  BrigSamplerCoordNormalization8_t coord;
+  BrigSamplerFilter8_t filter;
+  BrigSamplerAddressing8_t addressing;
+  uint8_t reserved[3];
+};
+
+struct BrigOperandOperandList
+{
+  BrigBase base;
+  BrigDataOffsetOperandList32_t elements;
+};
+
+struct BrigOperandRegister
+{
+  BrigBase base;
+  BrigRegisterKind16_t regKind;
+  uint16_t regNum;
+};
+
+struct BrigOperandString
+{
+  BrigBase base;
+  BrigDataOffsetString32_t string;
+};
+
+struct BrigOperandWavesize
+{
+  BrigBase base;
+};
+
+#endif /* HSA_BRIG_FORMAT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/hsa-builtins.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hsa-builtins.def
new file mode 100644
index 0000000..28c3cbf
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hsa-builtins.def
@@ -0,0 +1,39 @@
+/* This file contains the definitions and documentation for the
+   Offloading and Multi Processing builtins used in the GNU compiler.
+   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Before including this file, you should define a macro:
+
+     DEF_HSA_BUILTIN (ENUM, NAME, TYPE, ATTRS)
+
+   See builtins.def for details.  */
+
+/* The reason why they aren't in gcc/builtins.def is that the Fortran front end
+   doesn't source those.  */
+
+DEF_HSA_BUILTIN (BUILT_IN_HSA_WORKGROUPID, "hsa_workgroupid",
+	  	 BT_FN_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_HSA_BUILTIN (BUILT_IN_HSA_WORKITEMID, "hsa_workitemid",
+	  	 BT_FN_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_HSA_BUILTIN (BUILT_IN_HSA_WORKITEMABSID, "hsa_workitemabsid",
+	  	 BT_FN_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_HSA_BUILTIN (BUILT_IN_HSA_GRIDSIZE, "hsa_gridsize",
+		 BT_FN_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_HSA_BUILTIN (BUILT_IN_HSA_CURRENTWORKGROUPSIZE, "hsa_currentworkgroupsize",
+		 BT_FN_UINT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/hsa-common.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hsa-common.h
new file mode 100644
index 0000000..9c61786
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hsa-common.h
@@ -0,0 +1,1417 @@
+/* HSAIL and BRIG related macros and definitions.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef HSA_H
+#define HSA_H
+
+#include "hsa-brig-format.h"
+#include "is-a.h"
+#include "predict.h"
+#include "tree.h"
+#include "vec.h"
+#include "hash-table.h"
+#include "basic-block.h"
+#include "bitmap.h"
+
+
+/* Return true if the compiler should produce HSAIL.  */
+
+static inline bool
+hsa_gen_requested_p (void)
+{
+#ifndef ENABLE_HSA
+  return false;
+#endif
+  return !flag_disable_hsa;
+}
+
+/* Standard warning message if we failed to generate HSAIL for a function.  */
+
+#define HSA_SORRY_MSG "could not emit HSAIL for the function"
+
+class hsa_op_immed;
+class hsa_op_cst_list;
+class hsa_insn_basic;
+class hsa_op_address;
+class hsa_op_reg;
+class hsa_bb;
+
+/* Class representing an input argument, output argument (result) or a
+   variable, that will eventually end up being a symbol directive.  */
+
+struct hsa_symbol
+{
+  /* Constructor.  */
+  hsa_symbol (BrigType16_t type, BrigSegment8_t segment,
+	      BrigLinkage8_t linkage, bool global_scope_p = false,
+	      BrigAllocation allocation = BRIG_ALLOCATION_AUTOMATIC,
+	      BrigAlignment8_t align = BRIG_ALIGNMENT_8);
+
+  /* Return total size of the symbol.  */
+  unsigned HOST_WIDE_INT total_byte_size ();
+
+  /* Fill in those values into the symbol according to DECL, which are
+     determined independently from whether it is parameter, result,
+     or a variable, local or global.  */
+  void fillup_for_decl (tree decl);
+
+  /* Pointer to the original tree, which is PARM_DECL for input parameters and
+     RESULT_DECL for the output parameters.  Also can be CONST_DECL for Fortran
+     constants which need to be put into readonly segment.  */
+  tree m_decl;
+
+  /* Name of the symbol, that will be written into output and dumps.  Can be
+     NULL, see name_number below.  */
+  const char *m_name;
+
+  /* If name is NULL, artificial name will be formed from the segment name and
+     this number.  */
+  int m_name_number;
+
+  /* Once written, this is the offset of the associated symbol directive.  Zero
+     means the symbol has not been written yet.  */
+  unsigned m_directive_offset;
+
+  /* HSA type of the parameter.  */
+  BrigType16_t m_type;
+
+  /* The HSA segment this will eventually end up in.  */
+  BrigSegment8_t m_segment;
+
+  /* The HSA kind of linkage.  */
+  BrigLinkage8_t m_linkage;
+
+  /* Array dimension, if non-zero.  */
+  unsigned HOST_WIDE_INT m_dim;
+
+  /* Constant value, used for string constants.  */
+  hsa_op_immed *m_cst_value;
+
+  /* Is in global scope.  */
+  bool m_global_scope_p;
+
+  /* True if an error has been seen for the symbol.  */
+  bool m_seen_error;
+
+  /* Symbol allocation.  */
+  BrigAllocation m_allocation;
+
+  /* Flag used for global variables if a variable is already emitted or not.  */
+  bool m_emitted_to_brig;
+
+  /* Alignment of the symbol.  */
+  BrigAlignment8_t m_align;
+
+private:
+  /* Default constructor.  */
+  hsa_symbol ();
+};
+
+/* Abstract class for HSA instruction operands.  */
+
+class hsa_op_base
+{
+public:
+  /* Next operand scheduled to be written when writing BRIG operand
+     section.  */
+  hsa_op_base *m_next;
+
+  /* Offset to which the associated operand structure will be written.  Zero if
+     yet not scheduled for writing.  */
+  unsigned m_brig_op_offset;
+
+  /* The type of a particular operand.  */
+  BrigKind16_t m_kind;
+
+protected:
+  hsa_op_base (BrigKind16_t k);
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_op_base () {}
+};
+
+/* Common abstract ancestor for operands which have a type.  */
+
+class hsa_op_with_type : public hsa_op_base
+{
+public:
+  /* The type.  */
+  BrigType16_t m_type;
+
+  /* Convert an operand to a destination type DTYPE and attach insns
+     to HBB if needed.  */
+  hsa_op_with_type *get_in_type (BrigType16_t dtype, hsa_bb *hbb);
+  /* If this operand has integer type smaller than 32 bits, extend it to 32
+     bits, adding instructions to HBB if needed.  */
+  hsa_op_with_type *extend_int_to_32bit (hsa_bb *hbb);
+
+protected:
+  hsa_op_with_type (BrigKind16_t k, BrigType16_t t);
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_op_with_type () : hsa_op_base (BRIG_KIND_NONE) {}
+};
+
+/* An immediate HSA operand.  */
+
+class hsa_op_immed : public hsa_op_with_type
+{
+public:
+  hsa_op_immed (tree tree_val, bool min32int = true);
+  hsa_op_immed (HOST_WIDE_INT int_value, BrigType16_t type);
+  void *operator new (size_t);
+  ~hsa_op_immed ();
+  void set_type (BrigKind16_t t);
+
+  /* Function returns pointer to a buffer that contains binary representation
+     of the immeadiate value.  The buffer has length of BRIG_SIZE and
+     a caller is responsible for deallocation of the buffer.  */
+  char *emit_to_buffer (unsigned *brig_size);
+
+  /* Value as represented by middle end.  */
+  tree m_tree_value;
+
+  /* Integer value representation.  */
+  HOST_WIDE_INT m_int_value;
+
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_op_immed ();
+  /* All objects are deallocated by destroying their pool, so make delete
+     inaccessible too.  */
+  void operator delete (void *) {}
+};
+
+/* Report whether or not P is a an immediate operand.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_op_immed *>::test (hsa_op_base *p)
+{
+  return p->m_kind == BRIG_KIND_OPERAND_CONSTANT_BYTES;
+}
+
+/* Likewise, but for a more specified base. */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_op_immed *>::test (hsa_op_with_type *p)
+{
+  return p->m_kind == BRIG_KIND_OPERAND_CONSTANT_BYTES;
+}
+
+
+/* HSA register operand.  */
+
+class hsa_op_reg : public hsa_op_with_type
+{
+  friend class hsa_insn_basic;
+  friend class hsa_insn_phi;
+public:
+  hsa_op_reg (BrigType16_t t);
+  void *operator new (size_t);
+
+  /* Verify register operand.  */
+  void verify_ssa ();
+
+  /* If NON-NULL, gimple SSA that we come from.  NULL if none.  */
+  tree m_gimple_ssa;
+
+  /* Defining instruction while still in the SSA.  */
+  hsa_insn_basic *m_def_insn;
+
+  /* If the register allocator decides to spill the register, this is the
+     appropriate spill symbol.  */
+  hsa_symbol *m_spill_sym;
+
+  /* Number of this register structure in the order in which they were
+     allocated.  */
+  int m_order;
+  int m_lr_begin, m_lr_end;
+
+  /* Zero if the register is not yet allocated.  After, allocation, this must
+     be 'c', 's', 'd' or 'q'.  */
+  char m_reg_class;
+  /* If allocated, the number of the HW register (within its HSA register
+     class).  */
+  char m_hard_num;
+
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_op_reg () : hsa_op_with_type (BRIG_KIND_NONE, BRIG_TYPE_NONE) {}
+  /* All objects are deallocated by destroying their pool, so make delete
+     inaccessible too.  */
+  void operator delete (void *) {}
+  /* Set definition where the register is defined.  */
+  void set_definition (hsa_insn_basic *insn);
+  /* Uses of the value while still in SSA.  */
+  auto_vec <hsa_insn_basic *> m_uses;
+};
+
+/* Report whether or not P is a register operand.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_op_reg *>::test (hsa_op_base *p)
+{
+  return p->m_kind == BRIG_KIND_OPERAND_REGISTER;
+}
+
+/* Report whether or not P is a register operand.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_op_reg *>::test (hsa_op_with_type *p)
+{
+  return p->m_kind == BRIG_KIND_OPERAND_REGISTER;
+}
+
+/* An address HSA operand.  */
+
+class hsa_op_address : public hsa_op_base
+{
+public:
+  /* set up a new address operand consisting of base symbol SYM, register R and
+     immediate OFFSET.  If the machine model is not large and offset is 64 bit,
+     the upper, 32 bits have to be zero.  */
+  hsa_op_address (hsa_symbol *sym, hsa_op_reg *reg,
+		  HOST_WIDE_INT offset = 0);
+
+  void *operator new (size_t);
+
+  /* Set up a new address operand consisting of base symbol SYM and
+     immediate OFFSET.  If the machine model is not large and offset is 64 bit,
+     the upper, 32 bits have to be zero.  */
+  hsa_op_address (hsa_symbol *sym, HOST_WIDE_INT offset = 0);
+
+  /* Set up a new address operand consisting of register R and
+     immediate OFFSET.  If the machine model is not large and offset is 64 bit,
+     the upper, 32 bits have to be zero.  */
+  hsa_op_address (hsa_op_reg *reg, HOST_WIDE_INT offset = 0);
+
+  /* Symbol base of the address.  Can be NULL if there is none.  */
+  hsa_symbol *m_symbol;
+
+  /* Register offset.  Can be NULL if there is none.  */
+  hsa_op_reg *m_reg;
+
+  /* Immediate byte offset.  */
+  HOST_WIDE_INT m_imm_offset;
+
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_op_address () : hsa_op_base (BRIG_KIND_NONE) {}
+  /* All objects are deallocated by destroying their pool, so make delete
+     inaccessible too.  */
+  void operator delete (void *) {}
+};
+
+/* Report whether or not P is an address operand.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_op_address *>::test (hsa_op_base *p)
+{
+  return p->m_kind == BRIG_KIND_OPERAND_ADDRESS;
+}
+
+/* A reference to code HSA operand.  It can be either reference
+   to a start of a BB or a start of a function.  */
+
+class hsa_op_code_ref : public hsa_op_base
+{
+public:
+  hsa_op_code_ref ();
+
+  /* Offset in the code section that this refers to.  */
+  unsigned m_directive_offset;
+};
+
+/* Report whether or not P is a code reference operand.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_op_code_ref *>::test (hsa_op_base *p)
+{
+  return p->m_kind == BRIG_KIND_OPERAND_CODE_REF;
+}
+
+/* Code list HSA operand.  */
+
+class hsa_op_code_list: public hsa_op_base
+{
+public:
+  hsa_op_code_list (unsigned elements);
+  void *operator new (size_t);
+
+  /* Offset to variable-sized array in hsa_data section, where
+     are offsets to entries in the hsa_code section.  */
+  auto_vec<unsigned> m_offsets;
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_op_code_list () : hsa_op_base (BRIG_KIND_NONE) {}
+  /* All objects are deallocated by destroying their pool, so make delete
+     inaccessible too.  */
+  void operator delete (void *) {}
+};
+
+/* Report whether or not P is a code list operand.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_op_code_list *>::test (hsa_op_base *p)
+{
+  return p->m_kind == BRIG_KIND_OPERAND_CODE_LIST;
+}
+
+/* Operand list HSA operand.  */
+
+class hsa_op_operand_list: public hsa_op_base
+{
+public:
+  hsa_op_operand_list (unsigned elements);
+  ~hsa_op_operand_list ();
+  void *operator new (size_t);
+
+  /* Offset to variable-sized array in hsa_data section, where
+     are offsets to entries in the hsa_code section.  */
+  auto_vec<unsigned> m_offsets;
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_op_operand_list () : hsa_op_base (BRIG_KIND_NONE) {}
+  /* All objects are deallocated by destroying their pool, so make delete
+     inaccessible too.  */
+  void operator delete (void *) {}
+};
+
+/* Report whether or not P is a code list operand.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_op_operand_list *>::test (hsa_op_base *p)
+{
+  return p->m_kind == BRIG_KIND_OPERAND_OPERAND_LIST;
+}
+
+/* Opcodes of instructions that are not part of HSA but that we use to
+   represent it nevertheless.  */
+
+#define HSA_OPCODE_PHI (-1)
+#define HSA_OPCODE_ARG_BLOCK (-2)
+
+/* The number of operand pointers we can directly in an instruction.  */
+#define HSA_BRIG_INT_STORAGE_OPERANDS 5
+
+/* Class representing an HSA instruction.  Unlike typical ancestors for
+   specialized classes, this one is also directly used for all instructions
+   that are then represented as BrigInstBasic.  */
+
+class hsa_insn_basic
+{
+public:
+  hsa_insn_basic (unsigned nops, int opc);
+  hsa_insn_basic (unsigned nops, int opc, BrigType16_t t,
+		  hsa_op_base *arg0 = NULL,
+		  hsa_op_base *arg1 = NULL,
+		  hsa_op_base *arg2 = NULL,
+		  hsa_op_base *arg3 = NULL);
+
+  void *operator new (size_t);
+  void set_op (int index, hsa_op_base *op);
+  hsa_op_base *get_op (int index);
+  hsa_op_base **get_op_addr (int index);
+  unsigned int operand_count ();
+  void verify ();
+  unsigned input_count ();
+  unsigned num_used_ops ();
+  void set_output_in_type (hsa_op_reg *dest, unsigned op_index, hsa_bb *hbb);
+  bool op_output_p (unsigned opnum);
+
+  /* The previous and next instruction in the basic block.  */
+  hsa_insn_basic *m_prev, *m_next;
+
+  /* Basic block this instruction belongs to.  */
+  basic_block m_bb;
+
+  /* Operand code distinguishing different types of instructions.  Eventually
+     these should only be BRIG_INST_* values from the BrigOpcode16_t range but
+     initially we use negative values for PHI nodes and such.  */
+  int m_opcode;
+
+  /* Linearized number assigned to the instruction by HSA RA.  */
+  int m_number;
+
+  /* Type of the destination of the operations.  */
+  BrigType16_t m_type;
+
+  /* BRIG offset of the instruction in code section.  */
+  unsigned int m_brig_offset;
+
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_insn_basic () {}
+  /* All objects are deallocated by destroying their pool, so make delete
+     inaccessible too.  */
+  void operator delete (void *) {}
+  /* The individual operands.  All instructions but PHI nodes have five or
+     fewer instructions and so will fit the internal storage.  */
+  /* TODO: Vast majority of instructions have three or fewer operands, so we
+     may actually try reducing it.  */
+  auto_vec<hsa_op_base *, HSA_BRIG_INT_STORAGE_OPERANDS> m_operands;
+};
+
+/* Class representing a PHI node of the SSA form of HSA virtual
+   registers.  */
+
+class hsa_insn_phi : public hsa_insn_basic
+{
+public:
+  hsa_insn_phi (unsigned nops, hsa_op_reg *dst);
+
+  /* Destination.  */
+  hsa_op_reg *m_dest;
+
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_insn_phi () : hsa_insn_basic (1, HSA_OPCODE_PHI) {}
+};
+
+/* Report whether or not P is a PHI node.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_insn_phi *>::test (hsa_insn_basic *p)
+{
+  return p->m_opcode == HSA_OPCODE_PHI;
+}
+
+/* HSA instruction for  */
+class hsa_insn_br : public hsa_insn_basic
+{
+public:
+  hsa_insn_br (unsigned nops, int opc, BrigType16_t t, BrigWidth8_t width,
+	       hsa_op_base *arg0 = NULL, hsa_op_base *arg1 = NULL,
+	       hsa_op_base *arg2 = NULL, hsa_op_base *arg3 = NULL);
+
+  /* Number of work-items affected in the same way by the instruction.  */
+  BrigWidth8_t m_width;
+
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_insn_br () : hsa_insn_basic (0, BRIG_OPCODE_BR) {}
+};
+
+/* Return true if P is a branching/synchronization instruction.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_insn_br *>::test (hsa_insn_basic *p)
+{
+  return p->m_opcode == BRIG_OPCODE_BARRIER
+    || p->m_opcode == BRIG_OPCODE_BR;
+}
+
+/* HSA instruction for conditional branches.  Structurally the same as
+   hsa_insn_br but we represent it specially because of inherent control
+   flow it represents.  */
+
+class hsa_insn_cbr : public hsa_insn_br
+{
+public:
+  hsa_insn_cbr (hsa_op_reg *ctrl);
+
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_insn_cbr () : hsa_insn_br (0, BRIG_OPCODE_CBR, BRIG_TYPE_B1,
+				 BRIG_WIDTH_1) {}
+};
+
+/* Report whether P is a contitional branching instruction.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_insn_cbr *>::test (hsa_insn_basic *p)
+{
+  return p->m_opcode == BRIG_OPCODE_CBR;
+}
+
+/* HSA instruction for switch branches.  */
+
+class hsa_insn_sbr : public hsa_insn_basic
+{
+public:
+  hsa_insn_sbr (hsa_op_reg *index, unsigned jump_count);
+
+  /* Default destructor.  */
+  ~hsa_insn_sbr ();
+
+  void replace_all_labels (basic_block old_bb, basic_block new_bb);
+
+  /* Width as described in HSA documentation.  */
+  BrigWidth8_t m_width;
+
+  /* Jump table.  */
+  vec <basic_block> m_jump_table;
+
+  /* Code list for label references.  */
+  hsa_op_code_list *m_label_code_list;
+
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_insn_sbr () : hsa_insn_basic (1, BRIG_OPCODE_SBR) {}
+};
+
+/* Report whether P is a switch branching instruction.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_insn_sbr *>::test (hsa_insn_basic *p)
+{
+  return p->m_opcode == BRIG_OPCODE_SBR;
+}
+
+/* HSA instruction for comparisons.  */
+
+class hsa_insn_cmp : public hsa_insn_basic
+{
+public:
+  hsa_insn_cmp (BrigCompareOperation8_t cmp, BrigType16_t t,
+		hsa_op_base *arg0 = NULL, hsa_op_base *arg1 = NULL,
+		hsa_op_base *arg2 = NULL);
+
+  /* Source type should be derived from operand types.  */
+
+  /* The comparison operation.  */
+  BrigCompareOperation8_t m_compare;
+
+  /* TODO: Modifiers and packing control are missing but so are everywhere
+     else.  */
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_insn_cmp () : hsa_insn_basic (1, BRIG_OPCODE_CMP) {}
+};
+
+/* Report whether or not P is a comparison instruction.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_insn_cmp *>::test (hsa_insn_basic *p)
+{
+  return p->m_opcode == BRIG_OPCODE_CMP;
+}
+
+/* HSA instruction for memory operations.  */
+
+class hsa_insn_mem : public hsa_insn_basic
+{
+public:
+  hsa_insn_mem (int opc, BrigType16_t t, hsa_op_base *arg0, hsa_op_base *arg1);
+
+  /* Set alignment to VALUE.  */
+
+  void set_align (BrigAlignment8_t value);
+
+  /* The segment is of the memory access is either the segment of the symbol in
+     the address operand or flat address is there is no symbol there.  */
+
+  /* Required alignment of the memory operation.  */
+  BrigAlignment8_t m_align;
+
+  /* HSA equiv class, basically an alias set number.  */
+  uint8_t m_equiv_class;
+
+  /* TODO:  Add width modifier, perhaps also other things.  */
+protected:
+  hsa_insn_mem (unsigned nops, int opc, BrigType16_t t,
+		hsa_op_base *arg0 = NULL, hsa_op_base *arg1 = NULL,
+		hsa_op_base *arg2 = NULL, hsa_op_base *arg3 = NULL);
+
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_insn_mem () : hsa_insn_basic (1, BRIG_OPCODE_LD) {}
+};
+
+/* Report whether or not P is a memory instruction.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_insn_mem *>::test (hsa_insn_basic *p)
+{
+  return (p->m_opcode == BRIG_OPCODE_LD
+	  || p->m_opcode == BRIG_OPCODE_ST);
+}
+
+/* HSA instruction for atomic operations.  */
+
+class hsa_insn_atomic : public hsa_insn_mem
+{
+public:
+  hsa_insn_atomic (int nops, int opc, enum BrigAtomicOperation aop,
+		   BrigType16_t t, BrigMemoryOrder memorder,
+		   hsa_op_base *arg0 = NULL, hsa_op_base *arg1 = NULL,
+		   hsa_op_base *arg2 = NULL, hsa_op_base *arg3 = NULL);
+
+  /* The operation itself.  */
+  enum BrigAtomicOperation m_atomicop;
+
+  /* Things like acquire/release/aligned.  */
+  enum BrigMemoryOrder m_memoryorder;
+
+  /* Scope of the atomic operation.  */
+  enum BrigMemoryScope m_memoryscope;
+
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_insn_atomic () : hsa_insn_mem (1, BRIG_KIND_NONE, BRIG_TYPE_NONE) {}
+};
+
+/* Report whether or not P is an atomic instruction.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_insn_atomic *>::test (hsa_insn_basic *p)
+{
+  return (p->m_opcode == BRIG_OPCODE_ATOMIC
+	  || p->m_opcode == BRIG_OPCODE_ATOMICNORET);
+}
+
+/* HSA instruction for signal operations.  */
+
+class hsa_insn_signal : public hsa_insn_basic
+{
+public:
+  hsa_insn_signal (int nops, int opc, enum BrigAtomicOperation sop,
+		   BrigType16_t t, BrigMemoryOrder memorder,
+		   hsa_op_base *arg0 = NULL, hsa_op_base *arg1 = NULL,
+		   hsa_op_base *arg2 = NULL, hsa_op_base *arg3 = NULL);
+
+  /* Things like acquire/release/aligned.  */
+  enum BrigMemoryOrder m_memory_order;
+
+  /* The operation itself.  */
+  enum BrigAtomicOperation m_signalop;
+};
+
+/* Report whether or not P is a signal instruction.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_insn_signal *>::test (hsa_insn_basic *p)
+{
+  return (p->m_opcode == BRIG_OPCODE_SIGNAL
+	  || p->m_opcode == BRIG_OPCODE_SIGNALNORET);
+}
+
+/* HSA instruction to convert between flat addressing and segments.  */
+
+class hsa_insn_seg : public hsa_insn_basic
+{
+public:
+  hsa_insn_seg (int opc, BrigType16_t destt, BrigType16_t srct,
+		BrigSegment8_t seg, hsa_op_base *arg0, hsa_op_base *arg1);
+
+  /* Source type.  Depends on the source addressing/segment.  */
+  BrigType16_t m_src_type;
+  /* The segment we are converting from or to.  */
+  BrigSegment8_t m_segment;
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_insn_seg () : hsa_insn_basic (1, BRIG_OPCODE_STOF) {}
+};
+
+/* Report whether or not P is a segment conversion instruction.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_insn_seg *>::test (hsa_insn_basic *p)
+{
+  return (p->m_opcode == BRIG_OPCODE_STOF
+	  || p->m_opcode == BRIG_OPCODE_FTOS);
+}
+
+/* Class for internal functions for purpose of HSA emission.  */
+
+class hsa_internal_fn
+{
+public:
+  hsa_internal_fn (enum internal_fn fn, unsigned type_bit_size):
+    m_fn (fn), m_type_bit_size (type_bit_size), m_offset (0) {}
+
+  hsa_internal_fn (const hsa_internal_fn *f):
+    m_fn (f->m_fn), m_type_bit_size (f->m_type_bit_size),
+    m_offset (f->m_offset) {}
+
+  /* Return arity of the internal function.  */
+  unsigned get_arity ();
+
+  /* Return BRIG type of N-th argument, if -1 is passed, return value type
+     is received.  */
+  BrigType16_t get_argument_type (int n);
+
+  /* Return function name.  The memory must be released by a caller.  */
+  char *name ();
+
+  /* Internal function.  */
+  enum internal_fn m_fn;
+
+  /* Bit width of return type.  */
+  unsigned m_type_bit_size;
+
+  /* BRIG offset of declaration of the function.  */
+  BrigCodeOffset32_t m_offset;
+};
+
+/* HSA instruction for function call.  */
+
+class hsa_insn_call : public hsa_insn_basic
+{
+public:
+  hsa_insn_call (tree callee);
+  hsa_insn_call (hsa_internal_fn *fn);
+
+  /* Default destructor.  */
+  ~hsa_insn_call ();
+
+  /* Called function.  */
+  tree m_called_function;
+
+  /* Called internal function.  */
+  hsa_internal_fn *m_called_internal_fn;
+
+  /* Input formal arguments.  */
+  auto_vec <hsa_symbol *> m_input_args;
+
+  /* Input arguments store instructions.  */
+  auto_vec <hsa_insn_mem *> m_input_arg_insns;
+
+  /* Output argument, can be NULL for void functions.  */
+  hsa_symbol *m_output_arg;
+
+  /* Called function code reference.  */
+  hsa_op_code_ref m_func;
+
+  /* Code list for arguments of the function.  */
+  hsa_op_code_list *m_args_code_list;
+
+  /* Code list for result of the function.  */
+  hsa_op_code_list *m_result_code_list;
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_insn_call () : hsa_insn_basic (0, BRIG_OPCODE_CALL) {}
+};
+
+/* Report whether or not P is a call instruction.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_insn_call *>::test (hsa_insn_basic *p)
+{
+  return (p->m_opcode == BRIG_OPCODE_CALL);
+}
+
+/* HSA call instruction block encapsulates definition of arguments,
+   result type, corresponding loads and a possible store.
+   Moreover, it contains a single call instruction.
+   Emission of the instruction will produce multiple
+   HSAIL instructions.  */
+
+class hsa_insn_arg_block : public hsa_insn_basic
+{
+public:
+  hsa_insn_arg_block (BrigKind brig_kind, hsa_insn_call * call);
+
+  /* Kind of argument block.  */
+  BrigKind m_kind;
+
+  /* Call instruction.  */
+  hsa_insn_call *m_call_insn;
+};
+
+/* Report whether or not P is a call block instruction.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_insn_arg_block *>::test (hsa_insn_basic *p)
+{
+  return (p->m_opcode == HSA_OPCODE_ARG_BLOCK);
+}
+
+/* HSA comment instruction.  */
+
+class hsa_insn_comment: public hsa_insn_basic
+{
+public:
+  /* Constructor of class representing the comment in HSAIL.  */
+  hsa_insn_comment (const char *s);
+
+  /* Default destructor.  */
+  ~hsa_insn_comment ();
+
+  char *m_comment;
+};
+
+/* Report whether or not P is a call block instruction.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_insn_comment *>::test (hsa_insn_basic *p)
+{
+  return (p->m_opcode == BRIG_KIND_DIRECTIVE_COMMENT);
+}
+
+/* HSA queue instruction.  */
+
+class hsa_insn_queue: public hsa_insn_basic
+{
+public:
+  hsa_insn_queue (int nops, int opcode, BrigSegment segment,
+		  BrigMemoryOrder memory_order,
+		  hsa_op_base *arg0 = NULL, hsa_op_base *arg1 = NULL,
+		  hsa_op_base *arg2 = NULL, hsa_op_base *arg3 = NULL);
+
+  /* Destructor.  */
+  ~hsa_insn_queue ();
+
+  /* Segment used to refer to the queue.  Must be global or flat.  */
+  BrigSegment m_segment;
+  /* Memory order used to specify synchronization.  */
+  BrigMemoryOrder m_memory_order;
+};
+
+/* Report whether or not P is a queue instruction.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_insn_queue *>::test (hsa_insn_basic *p)
+{
+  return (p->m_opcode == BRIG_OPCODE_ADDQUEUEWRITEINDEX
+	  || p->m_opcode == BRIG_OPCODE_CASQUEUEWRITEINDEX
+	  || p->m_opcode == BRIG_OPCODE_LDQUEUEREADINDEX
+	  || p->m_opcode == BRIG_OPCODE_LDQUEUEWRITEINDEX
+	  || p->m_opcode == BRIG_OPCODE_STQUEUEREADINDEX
+	  || p->m_opcode == BRIG_OPCODE_STQUEUEWRITEINDEX);
+}
+
+/* HSA source type instruction.  */
+
+class hsa_insn_srctype: public hsa_insn_basic
+{
+public:
+  hsa_insn_srctype (int nops, BrigOpcode opcode, BrigType16_t destt,
+		   BrigType16_t srct, hsa_op_base *arg0, hsa_op_base *arg1,
+		   hsa_op_base *arg2);
+
+  /* Source type.  */
+  BrigType16_t m_source_type;
+
+  /* Destructor.  */
+  ~hsa_insn_srctype ();
+};
+
+/* Report whether or not P is a source type instruction.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_insn_srctype *>::test (hsa_insn_basic *p)
+{
+  return (p->m_opcode == BRIG_OPCODE_POPCOUNT
+	  || p->m_opcode == BRIG_OPCODE_FIRSTBIT
+	  || p->m_opcode == BRIG_OPCODE_LASTBIT);
+}
+
+/* HSA packed instruction.  */
+
+class hsa_insn_packed : public hsa_insn_srctype
+{
+public:
+  hsa_insn_packed (int nops, BrigOpcode opcode, BrigType16_t destt,
+		   BrigType16_t srct, hsa_op_base *arg0, hsa_op_base *arg1,
+		   hsa_op_base *arg2);
+
+  /* Operand list for an operand of the instruction.  */
+  hsa_op_operand_list *m_operand_list;
+
+  /* Destructor.  */
+  ~hsa_insn_packed ();
+};
+
+/* Report whether or not P is a combine instruction.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_insn_packed *>::test (hsa_insn_basic *p)
+{
+  return (p->m_opcode == BRIG_OPCODE_COMBINE
+	  || p->m_opcode == BRIG_OPCODE_EXPAND);
+}
+
+/* HSA convert instruction.  */
+
+class hsa_insn_cvt: public hsa_insn_basic
+{
+public:
+  hsa_insn_cvt (hsa_op_with_type *dest, hsa_op_with_type *src);
+};
+
+/* Report whether or not P is a convert instruction.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_insn_cvt *>::test (hsa_insn_basic *p)
+{
+  return (p->m_opcode == BRIG_OPCODE_CVT);
+}
+
+/* HSA alloca instruction.  */
+
+class hsa_insn_alloca: public hsa_insn_basic
+{
+public:
+  hsa_insn_alloca (hsa_op_with_type *dest, hsa_op_with_type *size,
+		   unsigned alignment = 0);
+
+  /* Required alignment of the allocation.  */
+  BrigAlignment8_t m_align;
+};
+
+/* Report whether or not P is an alloca instruction.  */
+
+template <>
+template <>
+inline bool
+is_a_helper <hsa_insn_alloca *>::test (hsa_insn_basic *p)
+{
+  return (p->m_opcode == BRIG_OPCODE_ALLOCA);
+}
+
+/* Basic block of HSA instructions.  */
+
+class hsa_bb
+{
+public:
+  hsa_bb (basic_block cfg_bb);
+  hsa_bb (basic_block cfg_bb, int idx);
+
+  /* Append an instruction INSN into the basic block.  */
+  void append_insn (hsa_insn_basic *insn);
+
+  /* Add a PHI instruction.  */
+  void append_phi (hsa_insn_phi *phi);
+
+  /* The real CFG BB that this HBB belongs to.  */
+  basic_block m_bb;
+
+  /* The operand that refers to the label to this BB.  */
+  hsa_op_code_ref m_label_ref;
+
+  /* The first and last instruction.  */
+  hsa_insn_basic *m_first_insn, *m_last_insn;
+  /* The first and last phi node.  */
+  hsa_insn_phi *m_first_phi, *m_last_phi;
+
+  /* Just a number to construct names from.  */
+  int m_index;
+
+  auto_bitmap m_liveout, m_livein;
+private:
+  /* Make the default constructor inaccessible.  */
+  hsa_bb ();
+  /* All objects are deallocated by destroying their pool, so make delete
+     inaccessible too.  */
+  void operator delete (void *) {}
+};
+
+/* Return the corresponding HSA basic block structure for the given control
+   flow basic_block BB.  */
+
+static inline hsa_bb *
+hsa_bb_for_bb (basic_block bb)
+{
+  return (struct hsa_bb *) bb->aux;
+}
+
+/* Class for hashing local hsa_symbols.  */
+
+struct hsa_noop_symbol_hasher : nofree_ptr_hash <hsa_symbol>
+{
+  static inline hashval_t hash (const value_type);
+  static inline bool equal (const value_type, const compare_type);
+};
+
+/* Hash hsa_symbol.  */
+
+inline hashval_t
+hsa_noop_symbol_hasher::hash (const value_type item)
+{
+  return DECL_UID (item->m_decl);
+}
+
+/* Return true if the DECL_UIDs of decls both symbols refer to are equal.  */
+
+inline bool
+hsa_noop_symbol_hasher::equal (const value_type a, const compare_type b)
+{
+  return (DECL_UID (a->m_decl) == DECL_UID (b->m_decl));
+}
+
+/* Structure that encapsulates intermediate representation of a HSA
+   function.  */
+
+class hsa_function_representation
+{
+public:
+  hsa_function_representation (tree fdecl, bool kernel_p,
+			       unsigned ssa_names_count,
+			       bool modified_cfg = false);
+  hsa_function_representation (hsa_internal_fn *fn);
+  ~hsa_function_representation ();
+
+  /* Builds a shadow register that is utilized to a kernel dispatch.  */
+  hsa_op_reg *get_shadow_reg ();
+
+  /* Return true if we are in a function that has kernel dispatch
+     shadow register.  */
+  bool has_shadow_reg_p ();
+
+  /* The entry/exit blocks don't contain incoming code,
+     but the HSA generator might use them to put code into,
+     so we need hsa_bb instances of them.  */
+  void init_extra_bbs ();
+
+  /* Update CFG dominators if m_modified_cfg flag is set.  */
+  void update_dominance ();
+
+  /* Return linkage of the representation.  */
+  BrigLinkage8_t get_linkage ();
+
+  /* Create a private symbol of requested TYPE.  */
+  hsa_symbol *create_hsa_temporary (BrigType16_t type);
+
+  /* Lookup or create a HSA pseudo register for a given gimple SSA name.  */
+  hsa_op_reg *reg_for_gimple_ssa (tree ssa);
+
+  /* Name of the function.  */
+  char *m_name;
+
+  /* Number of allocated register structures.  */
+  int m_reg_count;
+
+  /* Input arguments.  */
+  vec <hsa_symbol *> m_input_args;
+
+  /* Output argument or NULL if there is none.  */
+  hsa_symbol *m_output_arg;
+
+  /* Hash table of local variable symbols.  */
+  hash_table <hsa_noop_symbol_hasher> *m_local_symbols;
+
+  /* Hash map for string constants.  */
+  hash_map <tree, hsa_symbol *> m_string_constants_map;
+
+  /* Vector of pointers to spill symbols.  */
+  vec <struct hsa_symbol *> m_spill_symbols;
+
+  /* Vector of pointers to global variables and transformed string constants
+     that are used by the function.  */
+  vec <struct hsa_symbol *> m_global_symbols;
+
+  /* Private function artificial variables.  */
+  vec <struct hsa_symbol *> m_private_variables;
+
+  /* Vector of called function declarations.  */
+  vec <tree> m_called_functions;
+
+  /* Vector of used internal functions.  */
+  vec <hsa_internal_fn *> m_called_internal_fns;
+
+  /* Number of HBB BBs.  */
+  int m_hbb_count;
+
+  /* Whether or not we could check and enforce SSA properties.  */
+  bool m_in_ssa;
+
+  /* True if the function is kernel function.  */
+  bool m_kern_p;
+
+  /* True if the function representation is a declaration.  */
+  bool m_declaration_p;
+
+  /* Function declaration tree.  */
+  tree m_decl;
+
+  /* Internal function info is used for declarations of internal functions.  */
+  hsa_internal_fn *m_internal_fn;
+
+  /* Runtime shadow register.  */
+  hsa_op_reg *m_shadow_reg;
+
+  /* Number of kernel dispatched which take place in the function.  */
+  unsigned m_kernel_dispatch_count;
+
+  /* If the function representation contains a kernel dispatch,
+     OMP data size is necessary memory that is used for copying before
+     a kernel dispatch.  */
+  unsigned m_maximum_omp_data_size;
+
+  /* Return true if there's an HSA-specific warning already seen.  */
+  bool m_seen_error;
+
+  /* Counter for temporary symbols created in the function representation.  */
+  unsigned m_temp_symbol_count;
+
+  /* SSA names mapping.  */
+  vec <hsa_op_reg *> m_ssa_map;
+
+  /* Flag whether a function needs update of dominators before RA.  */
+  bool m_modified_cfg;
+};
+
+enum hsa_function_kind
+{
+  HSA_INVALID,
+  HSA_KERNEL,
+  HSA_FUNCTION
+};
+
+struct hsa_function_summary
+{
+  /* Default constructor.  */
+  hsa_function_summary ();
+
+  /* Kind of GPU/host function.  */
+  hsa_function_kind m_kind;
+
+  /* Pointer to a cgraph node which is a HSA implementation of the function.
+     In case of the function is a HSA function, the bound function points
+     to the host function.  */
+  cgraph_node *m_bound_function;
+
+  /* Identifies if the function is an HSA function or a host function.  */
+  bool m_gpu_implementation_p;
+
+  /* True if the function is a gridified kernel.  */
+  bool m_gridified_kernel_p;
+};
+
+inline
+hsa_function_summary::hsa_function_summary (): m_kind (HSA_INVALID),
+  m_bound_function (NULL), m_gpu_implementation_p (false)
+{
+}
+
+/* Function summary for HSA functions.  */
+class hsa_summary_t: public function_summary <hsa_function_summary *>
+{
+public:
+  hsa_summary_t (symbol_table *table):
+    function_summary<hsa_function_summary *> (table)
+  {
+    disable_insertion_hook ();
+  }
+
+  /* Couple GPU and HOST as gpu-specific and host-specific implementation of
+     the same function.  KIND determines whether GPU is a host-invokable kernel
+     or gpu-callable function and GRIDIFIED_KERNEL_P is set if the function was
+     gridified in OMP.  */
+
+  void link_functions (cgraph_node *gpu, cgraph_node *host,
+		       hsa_function_kind kind, bool gridified_kernel_p);
+
+private:
+  void process_gpu_implementation_attributes (tree gdecl);
+};
+
+/* OMP simple builtin describes behavior that should be done for
+   the routine.  */
+class omp_simple_builtin
+{
+public:
+  omp_simple_builtin (const char *name, const char *warning_message,
+	       bool sorry, hsa_op_immed *return_value = NULL):
+    m_name (name), m_warning_message (warning_message), m_sorry (sorry),
+    m_return_value (return_value)
+  {}
+
+  /* Generate HSAIL instructions for the builtin or produce warning message.  */
+  void generate (gimple *stmt, hsa_bb *hbb);
+
+  /* Name of function.  */
+  const char *m_name;
+
+  /* Warning message.  */
+  const char *m_warning_message;
+
+  /* Flag if we should sorry after the warning message is printed.  */
+  bool m_sorry;
+
+  /* Return value of the function.  */
+  hsa_op_immed *m_return_value;
+
+  /* Emission function.  */
+  void (*m_emit_func) (gimple *stmt, hsa_bb *);
+};
+
+/* Class for hashing hsa_internal_fn.  */
+
+struct hsa_internal_fn_hasher: free_ptr_hash <hsa_internal_fn>
+{
+  static inline hashval_t hash (const value_type);
+  static inline bool equal (const value_type, const compare_type);
+};
+
+/* Hash hsa_symbol.  */
+
+inline hashval_t
+hsa_internal_fn_hasher::hash (const value_type item)
+{
+  return item->m_fn;
+}
+
+/* Return true if the DECL_UIDs of decls both symbols refer to  are equal.  */
+
+inline bool
+hsa_internal_fn_hasher::equal (const value_type a, const compare_type b)
+{
+  return a->m_fn == b->m_fn && a->m_type_bit_size == b->m_type_bit_size;
+}
+
+/* in hsa-common.c */
+extern struct hsa_function_representation *hsa_cfun;
+extern hash_map <tree, vec <const char *> *> *hsa_decl_kernel_dependencies;
+extern hsa_summary_t *hsa_summaries;
+extern hsa_symbol *hsa_num_threads;
+extern unsigned hsa_kernel_calls_counter;
+extern hash_set <tree> *hsa_failed_functions;
+extern hash_table <hsa_noop_symbol_hasher> *hsa_global_variable_symbols;
+
+bool hsa_callable_function_p (tree fndecl);
+void hsa_init_compilation_unit_data (void);
+void hsa_deinit_compilation_unit_data (void);
+bool hsa_machine_large_p (void);
+bool hsa_full_profile_p (void);
+bool hsa_opcode_floating_bit_insn_p (BrigOpcode16_t);
+unsigned hsa_type_bit_size (BrigType16_t t);
+BrigType16_t hsa_bittype_for_bitsize (unsigned bitsize);
+BrigType16_t hsa_uint_for_bitsize (unsigned bitsize);
+BrigType16_t hsa_float_for_bitsize (unsigned bitsize);
+BrigType16_t hsa_bittype_for_type (BrigType16_t t);
+BrigType16_t hsa_unsigned_type_for_type (BrigType16_t t);
+bool hsa_type_packed_p (BrigType16_t type);
+bool hsa_type_float_p (BrigType16_t type);
+bool hsa_type_integer_p (BrigType16_t type);
+bool hsa_btype_p (BrigType16_t type);
+BrigAlignment8_t hsa_alignment_encoding (unsigned n);
+BrigAlignment8_t hsa_natural_alignment (BrigType16_t type);
+BrigAlignment8_t hsa_object_alignment (tree t);
+unsigned hsa_byte_alignment (BrigAlignment8_t alignment);
+void hsa_destroy_operand (hsa_op_base *op);
+void hsa_destroy_insn (hsa_insn_basic *insn);
+void hsa_add_kern_decl_mapping (tree decl, char *name, unsigned, bool);
+unsigned hsa_get_number_decl_kernel_mappings (void);
+tree hsa_get_decl_kernel_mapping_decl (unsigned i);
+char *hsa_get_decl_kernel_mapping_name (unsigned i);
+unsigned hsa_get_decl_kernel_mapping_omp_size (unsigned i);
+bool hsa_get_decl_kernel_mapping_gridified (unsigned i);
+void hsa_free_decl_kernel_mapping (void);
+tree *hsa_get_ctor_statements (void);
+tree *hsa_get_dtor_statements (void);
+tree *hsa_get_kernel_dispatch_type (void);
+void hsa_add_kernel_dependency (tree caller, const char *called_function);
+void hsa_sanitize_name (char *p);
+char *hsa_brig_function_name (const char *p);
+const char *hsa_get_declaration_name (tree decl);
+void hsa_register_kernel (cgraph_node *host);
+void hsa_register_kernel (cgraph_node *gpu, cgraph_node *host);
+bool hsa_seen_error (void);
+void hsa_fail_cfun (void);
+
+/* In hsa-gen.c.  */
+void hsa_build_append_simple_mov (hsa_op_reg *, hsa_op_base *, hsa_bb *);
+hsa_symbol *hsa_get_spill_symbol (BrigType16_t);
+hsa_symbol *hsa_get_string_cst_symbol (BrigType16_t);
+hsa_op_reg *hsa_spill_in (hsa_insn_basic *, hsa_op_reg *, hsa_op_reg **);
+hsa_op_reg *hsa_spill_out (hsa_insn_basic *, hsa_op_reg *, hsa_op_reg **);
+hsa_bb *hsa_init_new_bb (basic_block);
+hsa_function_representation *hsa_generate_function_declaration (tree decl);
+hsa_function_representation *hsa_generate_internal_fn_decl (hsa_internal_fn *);
+tree hsa_get_host_function (tree decl);
+
+/* In hsa-regalloc.c.  */
+void hsa_regalloc (void);
+
+/* In hsa-brig.c.  */
+extern hash_table <hsa_internal_fn_hasher> *hsa_emitted_internal_decls;
+void hsa_brig_emit_function (void);
+void hsa_output_brig (void);
+unsigned hsa_get_imm_brig_type_len (BrigType16_t type);
+void hsa_brig_emit_omp_symbols (void);
+
+/*  In hsa-dump.c.  */
+const char *hsa_seg_name (BrigSegment8_t);
+void dump_hsa_insn (FILE *f, hsa_insn_basic *insn);
+void dump_hsa_bb (FILE *, hsa_bb *);
+void dump_hsa_cfun (FILE *);
+DEBUG_FUNCTION void debug_hsa_operand (hsa_op_base *opc);
+DEBUG_FUNCTION void debug_hsa_insn (hsa_insn_basic *insn);
+
+union hsa_bytes
+{
+  uint8_t b8;
+  uint16_t b16;
+  uint32_t b32;
+  uint64_t b64;
+};
+
+/* Return true if a function DECL is an HSA implementation.  */
+
+static inline bool
+hsa_gpu_implementation_p (tree decl)
+{
+  if (hsa_summaries == NULL)
+    return false;
+
+  hsa_function_summary *s = hsa_summaries->get (cgraph_node::get_create (decl));
+  return s != NULL && s->m_gpu_implementation_p;
+}
+
+#endif /* HSA_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/hw-doloop.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hw-doloop.h
new file mode 100644
index 0000000..25a7d13
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hw-doloop.h
@@ -0,0 +1,160 @@
+/* Code to analyze doloop loops in order for targets to perform late
+   optimizations converting doloops to other forms of hardware loops.
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_HW_DOLOOP_H
+#define GCC_HW_DOLOOP_H
+
+/* We need to keep a vector of loops */
+typedef struct hwloop_info_d *hwloop_info;
+
+/* Information about a loop we have found (or are in the process of
+   finding).  */
+struct GTY (()) hwloop_info_d
+{
+  /* loop number, for dumps */
+  int loop_no;
+
+  /* Next loop in the graph. */
+  hwloop_info next;
+
+  /* Vector of blocks only within the loop, including those within
+     inner loops.  */
+  vec<basic_block> blocks;
+
+  /* Same information in a bitmap.  */
+  bitmap block_bitmap;
+
+  /* Vector of inner loops within this loop.  Includes loops of every
+     nesting level.  */
+  vec<hwloop_info> loops;
+
+  /* All edges that jump into the loop.  */
+  vec<edge, va_gc> *incoming;
+
+  /* The ports currently using this infrastructure can typically
+     handle two cases: all incoming edges have the same destination
+     block, or all incoming edges have the same source block.  These
+     two members are set to the common source or destination we found,
+     or NULL if different blocks were found.  If both are NULL the
+     loop can't be optimized.  */
+  basic_block incoming_src;
+  basic_block incoming_dest;
+
+  /* First block in the loop.  This is the one branched to by the loop_end
+     insn.  */
+  basic_block head;
+
+  /* Last block in the loop (the one with the loop_end insn).  */
+  basic_block tail;
+
+  /* The successor block of the loop.  This is the one the loop_end insn
+     falls into.  */
+  basic_block successor;
+
+  /* The last instruction in the tail.  */
+  rtx_insn *last_insn;
+
+  /* The loop_end insn.  */
+  rtx_insn *loop_end;
+
+  /* The iteration register.  */
+  rtx iter_reg;
+
+  /* The new label placed at the beginning of the loop. */
+  rtx_insn *start_label;
+
+  /* The new label placed at the end of the loop. */
+  rtx end_label;
+
+  /* The length of the loop.  */
+  int length;
+
+  /* The nesting depth of the loop.  Innermost loops are given a depth
+     of 1.  Only successfully optimized doloops are counted; if an inner
+     loop was marked as bad, it does not increase the depth of its parent
+     loop.
+     This value is valid when the target's optimize function is called.  */
+  int depth;
+
+  /* True if we can't optimize this loop.  */
+  bool bad;
+
+  /* True if we have visited this loop during the optimization phase.  */
+  bool visited;
+
+  /* The following values are collected before calling the target's optimize
+     function and are not valid earlier.  */
+  
+  /* Record information about control flow: whether the loop has calls
+     or asm statements, whether it has edges that jump out of the loop,
+     or edges that jump within the loop.  */
+  bool has_call;
+  bool has_asm;
+  bool jumps_within;
+  bool jumps_outof;
+
+  /* True if there is an instruction other than the doloop_end which uses the
+     iteration register.  */
+  bool iter_reg_used;
+  /* True if the iteration register lives past the doloop instruction.  */
+  bool iter_reg_used_outside;
+
+  /* Hard registers set at any point in the loop, except for the loop counter
+     register's set in the doloop_end instruction.  */
+  HARD_REG_SET regs_set_in_loop;
+};
+
+/* A set of hooks to be defined by a target that wants to use the reorg_loops
+   functionality.
+
+   reorg_loops is intended to handle cases where special hardware loop
+   setup instructions are required before the loop, for example to set
+   up loop counter registers that are not exposed to the register
+   allocator, or to inform the hardware about loop bounds.
+
+   reorg_loops performs analysis to discover loop_end patterns created
+   by the earlier loop-doloop pass, and sets up a hwloop_info
+   structure for each such insn it finds.  It then tries to discover
+   the basic blocks containing the loop by tracking the lifetime of
+   the iteration register.
+
+   If a valid loop can't be found, the FAIL function is called;
+   otherwise the OPT function is called for each loop, visiting
+   innermost loops first and ascending.  */
+struct hw_doloop_hooks
+{
+  /* Examine INSN.  If it is a suitable doloop_end pattern, return the
+     iteration register, which should be a single hard register.
+     Otherwise, return NULL_RTX.  */
+  rtx (*end_pattern_reg) (rtx_insn *insn);
+  /* Optimize LOOP.  The target should perform any additional analysis
+     (e.g. checking that the loop isn't too long), and then perform
+     its transformations.  Return true if successful, false if the
+     loop should be marked bad.  If it returns false, the FAIL
+     function is called.  */
+  bool (*opt) (hwloop_info loop);
+  /* Handle a loop that was marked bad for any reason.  This could be
+     used to split the doloop_end pattern.  */
+  void (*fail) (hwloop_info loop);
+};
+
+extern void reorg_loops (bool, struct hw_doloop_hooks *);
+
+#endif /* GCC_HW_DOLOOP_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/hwint.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hwint.h
new file mode 100644
index 0000000..dfb552f
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/hwint.h
@@ -0,0 +1,336 @@
+/* HOST_WIDE_INT definitions for the GNU compiler.
+   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+
+   This file is part of GCC.
+
+   Provide definitions for macros which depend on HOST_BITS_PER_INT
+   and HOST_BITS_PER_LONG.  */
+
+#ifndef GCC_HWINT_H
+#define GCC_HWINT_H
+
+/* This describes the machine the compiler is hosted on.  */
+#define HOST_BITS_PER_CHAR  CHAR_BIT
+#define HOST_BITS_PER_SHORT (CHAR_BIT * SIZEOF_SHORT)
+#define HOST_BITS_PER_INT   (CHAR_BIT * SIZEOF_INT)
+#define HOST_BITS_PER_LONG  (CHAR_BIT * SIZEOF_LONG)
+#define HOST_BITS_PER_PTR   (CHAR_BIT * SIZEOF_VOID_P)
+
+/* The string that should be inserted into a printf style format to
+   indicate a "long" operand.  */
+#ifndef HOST_LONG_FORMAT
+#define HOST_LONG_FORMAT "l"
+#endif
+
+/* The string that should be inserted into a printf style format to
+   indicate a "long long" operand.  */
+#ifndef HOST_LONG_LONG_FORMAT
+#define HOST_LONG_LONG_FORMAT "ll"
+#endif
+
+/* If HAVE_LONG_LONG and SIZEOF_LONG_LONG aren't defined, but
+   GCC_VERSION >= 3000, assume this is the second or later stage of a
+   bootstrap, we do have long long, and it's 64 bits.  (This is
+   required by C99; we do have some ports that violate that assumption
+   but they're all cross-compile-only.)  Just in case, force a
+   constraint violation if that assumption is incorrect.  */
+#if !defined HAVE_LONG_LONG
+# if GCC_VERSION >= 3000
+#  define HAVE_LONG_LONG 1
+#  define SIZEOF_LONG_LONG 8
+extern char sizeof_long_long_must_be_8[sizeof (long long) == 8 ? 1 : -1];
+# endif
+#endif
+
+#ifdef HAVE_LONG_LONG
+# define HOST_BITS_PER_LONGLONG (CHAR_BIT * SIZEOF_LONG_LONG)
+#endif
+
+/* Set HOST_WIDE_INT, this should be always 64 bits.
+   The underlying type is matched to that of int64_t and assumed
+   to be either long or long long.  */
+
+#define HOST_BITS_PER_WIDE_INT 64
+#if INT64_T_IS_LONG   
+#   define HOST_WIDE_INT long
+#   define HOST_WIDE_INT_C(X) X ## L
+#else
+# if HOST_BITS_PER_LONGLONG == 64
+#   define HOST_WIDE_INT long long
+#   define HOST_WIDE_INT_C(X) X ## LL
+# else
+   #error "Unable to find a suitable type for HOST_WIDE_INT"
+# endif
+#endif
+
+#define HOST_WIDE_INT_UC(X) HOST_WIDE_INT_C (X ## U)
+#define HOST_WIDE_INT_0 HOST_WIDE_INT_C (0)
+#define HOST_WIDE_INT_0U HOST_WIDE_INT_UC (0)
+#define HOST_WIDE_INT_1 HOST_WIDE_INT_C (1)
+#define HOST_WIDE_INT_1U HOST_WIDE_INT_UC (1)
+#define HOST_WIDE_INT_M1 HOST_WIDE_INT_C (-1)
+#define HOST_WIDE_INT_M1U HOST_WIDE_INT_UC (-1)
+
+/* This is a magic identifier which allows GCC to figure out the type
+   of HOST_WIDE_INT for %wd specifier checks.  You must issue this
+   typedef before using the __asm_fprintf__ format attribute.  */
+typedef HOST_WIDE_INT __gcc_host_wide_int__;
+
+/* Provide C99 <inttypes.h> style format definitions for 64bits.  */
+#ifndef HAVE_INTTYPES_H
+#if INT64_T_IS_LONG
+# define GCC_PRI64 HOST_LONG_FORMAT
+#else
+# define GCC_PRI64 HOST_LONG_LONG_FORMAT
+#endif
+#undef PRId64
+#define PRId64 GCC_PRI64 "d"
+#undef PRIi64
+#define PRIi64 GCC_PRI64 "i"
+#undef PRIo64
+#define PRIo64 GCC_PRI64 "o"
+#undef PRIu64
+#define PRIu64 GCC_PRI64 "u"
+#undef PRIx64
+#define PRIx64 GCC_PRI64 "x"
+#undef PRIX64
+#define PRIX64 GCC_PRI64 "X"
+#endif
+
+/* Various printf format strings for HOST_WIDE_INT.  */
+
+#if INT64_T_IS_LONG
+# define HOST_WIDE_INT_PRINT HOST_LONG_FORMAT
+# define HOST_WIDE_INT_PRINT_C "L"
+#else
+# define HOST_WIDE_INT_PRINT HOST_LONG_LONG_FORMAT
+# define HOST_WIDE_INT_PRINT_C "LL"
+#endif
+
+#define HOST_WIDE_INT_PRINT_DEC "%" PRId64
+#define HOST_WIDE_INT_PRINT_DEC_C "%" PRId64 HOST_WIDE_INT_PRINT_C
+#define HOST_WIDE_INT_PRINT_UNSIGNED "%" PRIu64
+#define HOST_WIDE_INT_PRINT_HEX "%#" PRIx64
+#define HOST_WIDE_INT_PRINT_HEX_PURE "%" PRIx64
+#define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%" PRIx64 "%016" PRIx64
+#define HOST_WIDE_INT_PRINT_PADDED_HEX "%016" PRIx64
+
+/* Define HOST_WIDEST_FAST_INT to the widest integer type supported
+   efficiently in hardware.  (That is, the widest integer type that fits
+   in a hardware register.)  Normally this is "long" but on some hosts it
+   should be "long long" or "__int64".  This is no convenient way to
+   autodetect this, so such systems must set a flag in config.host; see there
+   for details.  */
+
+#ifdef USE_LONG_LONG_FOR_WIDEST_FAST_INT
+#  ifdef HAVE_LONG_LONG
+#    define HOST_WIDEST_FAST_INT long long
+#    define HOST_BITS_PER_WIDEST_FAST_INT HOST_BITS_PER_LONGLONG
+#  else
+#    error "Your host said it wanted to use long long but that does not exist"
+#  endif
+#else
+#  define HOST_WIDEST_FAST_INT long
+#  define HOST_BITS_PER_WIDEST_FAST_INT HOST_BITS_PER_LONG
+#endif
+
+/* Inline functions operating on HOST_WIDE_INT.  */
+
+/* Return X with all but the lowest bit masked off.  */
+
+static inline unsigned HOST_WIDE_INT
+least_bit_hwi (unsigned HOST_WIDE_INT x)
+{
+  return (x & -x);
+}
+
+/* True if X is zero or a power of two.  */
+
+static inline bool
+pow2_or_zerop (unsigned HOST_WIDE_INT x)
+{
+  return least_bit_hwi (x) == x;
+}
+
+/* True if X is a power of two.  */
+
+static inline bool
+pow2p_hwi (unsigned HOST_WIDE_INT x)
+{
+  return x && pow2_or_zerop (x);
+}
+
+#if GCC_VERSION < 3004
+
+extern int clz_hwi (unsigned HOST_WIDE_INT x);
+extern int ctz_hwi (unsigned HOST_WIDE_INT x);
+extern int ffs_hwi (unsigned HOST_WIDE_INT x);
+
+/* Return the number of set bits in X.  */
+extern int popcount_hwi (unsigned HOST_WIDE_INT x);
+
+/* Return log2, or -1 if not exact.  */
+extern int exact_log2                  (unsigned HOST_WIDE_INT);
+
+/* Return floor of log2, with -1 for zero.  */
+extern int floor_log2                  (unsigned HOST_WIDE_INT);
+
+/* Return the smallest n such that 2**n >= X.  */
+extern int ceil_log2			(unsigned HOST_WIDE_INT);
+
+#else /* GCC_VERSION >= 3004 */
+
+/* For convenience, define 0 -> word_size.  */
+static inline int
+clz_hwi (unsigned HOST_WIDE_INT x)
+{
+  if (x == 0)
+    return HOST_BITS_PER_WIDE_INT;
+# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
+  return __builtin_clzl (x);
+# elif HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONGLONG
+  return __builtin_clzll (x);
+# else
+  return __builtin_clz (x);
+# endif
+}
+
+static inline int
+ctz_hwi (unsigned HOST_WIDE_INT x)
+{
+  if (x == 0)
+    return HOST_BITS_PER_WIDE_INT;
+# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
+  return __builtin_ctzl (x);
+# elif HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONGLONG
+  return __builtin_ctzll (x);
+# else
+  return __builtin_ctz (x);
+# endif
+}
+
+static inline int
+ffs_hwi (unsigned HOST_WIDE_INT x)
+{
+# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
+  return __builtin_ffsl (x);
+# elif HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONGLONG
+  return __builtin_ffsll (x);
+# else
+  return __builtin_ffs (x);
+# endif
+}
+
+static inline int
+popcount_hwi (unsigned HOST_WIDE_INT x)
+{
+# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
+  return __builtin_popcountl (x);
+# elif HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONGLONG
+  return __builtin_popcountll (x);
+# else
+  return __builtin_popcount (x);
+# endif
+}
+
+static inline int
+floor_log2 (unsigned HOST_WIDE_INT x)
+{
+  return HOST_BITS_PER_WIDE_INT - 1 - clz_hwi (x);
+}
+
+static inline int
+ceil_log2 (unsigned HOST_WIDE_INT x)
+{
+  return x == 0 ? 0 : floor_log2 (x - 1) + 1;
+}
+
+static inline int
+exact_log2 (unsigned HOST_WIDE_INT x)
+{
+  return pow2p_hwi (x) ? ctz_hwi (x) : -1;
+}
+
+#endif /* GCC_VERSION >= 3004 */
+
+#define HOST_WIDE_INT_MIN (HOST_WIDE_INT) \
+  (HOST_WIDE_INT_1U << (HOST_BITS_PER_WIDE_INT - 1))
+#define HOST_WIDE_INT_MAX (~(HOST_WIDE_INT_MIN))
+
+extern HOST_WIDE_INT abs_hwi (HOST_WIDE_INT);
+extern unsigned HOST_WIDE_INT absu_hwi (HOST_WIDE_INT);
+extern HOST_WIDE_INT gcd (HOST_WIDE_INT, HOST_WIDE_INT);
+extern HOST_WIDE_INT pos_mul_hwi (HOST_WIDE_INT, HOST_WIDE_INT);
+extern HOST_WIDE_INT mul_hwi (HOST_WIDE_INT, HOST_WIDE_INT);
+extern HOST_WIDE_INT least_common_multiple (HOST_WIDE_INT, HOST_WIDE_INT);
+
+/* Like ctz_hwi, except 0 when x == 0.  */
+
+static inline int
+ctz_or_zero (unsigned HOST_WIDE_INT x)
+{
+  return ffs_hwi (x) - 1;
+}
+
+/* Sign extend SRC starting from PREC.  */
+
+static inline HOST_WIDE_INT
+sext_hwi (HOST_WIDE_INT src, unsigned int prec)
+{
+  if (prec == HOST_BITS_PER_WIDE_INT)
+    return src;
+  else
+#if defined (__GNUC__)
+    {
+      /* Take the faster path if the implementation-defined bits it's relying
+	 on are implemented the way we expect them to be.  Namely, conversion
+	 from unsigned to signed preserves bit pattern, and right shift of
+	 a signed value propagates the sign bit.
+	 We have to convert from signed to unsigned and back, because when left
+	 shifting signed values, any overflow is undefined behavior.  */
+      gcc_checking_assert (prec < HOST_BITS_PER_WIDE_INT);
+      int shift = HOST_BITS_PER_WIDE_INT - prec;
+      return ((HOST_WIDE_INT) ((unsigned HOST_WIDE_INT) src << shift)) >> shift;
+    }
+#else
+    {
+      /* Fall back to the slower, well defined path otherwise.  */
+      gcc_checking_assert (prec < HOST_BITS_PER_WIDE_INT);
+      HOST_WIDE_INT sign_mask = HOST_WIDE_INT_1 << (prec - 1);
+      HOST_WIDE_INT value_mask = (HOST_WIDE_INT_1U << prec) - HOST_WIDE_INT_1U;
+      return (((src & value_mask) ^ sign_mask) - sign_mask);
+    }
+#endif
+}
+
+/* Zero extend SRC starting from PREC.  */
+static inline unsigned HOST_WIDE_INT
+zext_hwi (unsigned HOST_WIDE_INT src, unsigned int prec)
+{
+  if (prec == HOST_BITS_PER_WIDE_INT)
+    return src;
+  else
+    {
+      gcc_checking_assert (prec < HOST_BITS_PER_WIDE_INT);
+      return src & ((HOST_WIDE_INT_1U << prec) - 1);
+    }
+}
+
+/* Compute the absolute value of X.  */
+
+inline HOST_WIDE_INT
+abs_hwi (HOST_WIDE_INT x)
+{
+  gcc_checking_assert (x != HOST_WIDE_INT_MIN);
+  return x >= 0 ? x : -x;
+}
+
+/* Compute the absolute value of X as an unsigned type.  */
+
+inline unsigned HOST_WIDE_INT
+absu_hwi (HOST_WIDE_INT x)
+{
+  return x >= 0 ? (unsigned HOST_WIDE_INT)x : -(unsigned HOST_WIDE_INT)x;
+}
+
+#endif /* ! GCC_HWINT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ifcvt.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ifcvt.h
new file mode 100644
index 0000000..153ad96
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ifcvt.h
@@ -0,0 +1,113 @@
+/* If-conversion header file.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_IFCVT_H
+#define GCC_IFCVT_H
+
+/* Structure to group all of the information to process IF-THEN and
+   IF-THEN-ELSE blocks for the conditional execution support.  */
+
+struct ce_if_block
+{
+  basic_block test_bb;			/* First test block.  */
+  basic_block then_bb;			/* THEN block.  */
+  basic_block else_bb;			/* ELSE block or NULL.  */
+  basic_block join_bb;			/* Join THEN/ELSE blocks.  */
+  basic_block last_test_bb;		/* Last bb to hold && or || tests.  */
+  int num_multiple_test_blocks;		/* # of && and || basic blocks.  */
+  int num_and_and_blocks;		/* # of && blocks.  */
+  int num_or_or_blocks;			/* # of || blocks.  */
+  int num_multiple_test_insns;		/* # of insns in && and || blocks.  */
+  int and_and_p;			/* Complex test is &&.  */
+  int num_then_insns;			/* # of insns in THEN block.  */
+  int num_else_insns;			/* # of insns in ELSE block.  */
+  int pass;				/* Pass number.  */
+};
+
+/* Used by noce_process_if_block to communicate with its subroutines.
+
+   The subroutines know that A and B may be evaluated freely.  They
+   know that X is a register.  They should insert new instructions
+   before cond_earliest.  */
+
+struct noce_if_info
+{
+  /* The basic blocks that make up the IF-THEN-{ELSE-,}JOIN block.  */
+  basic_block test_bb, then_bb, else_bb, join_bb;
+
+  /* The jump that ends TEST_BB.  */
+  rtx_insn *jump;
+
+  /* The jump condition.  */
+  rtx cond;
+
+  /* Reversed jump condition.  */
+  rtx rev_cond;
+
+  /* New insns should be inserted before this one.  */
+  rtx_insn *cond_earliest;
+
+  /* Insns in the THEN and ELSE block.  There is always just this
+     one insns in those blocks.  The insns are single_set insns.
+     If there was no ELSE block, INSN_B is the last insn before
+     COND_EARLIEST, or NULL_RTX.  In the former case, the insn
+     operands are still valid, as if INSN_B was moved down below
+     the jump.  */
+  rtx_insn *insn_a, *insn_b;
+
+  /* The SET_SRC of INSN_A and INSN_B.  */
+  rtx a, b;
+
+  /* The SET_DEST of INSN_A.  */
+  rtx x;
+
+  /* The original set destination that the THEN and ELSE basic blocks finally
+     write their result to.  */
+  rtx orig_x;
+  /* True if this if block is not canonical.  In the canonical form of
+     if blocks, the THEN_BB is the block reached via the fallthru edge
+     from TEST_BB.  For the noce transformations, we allow the symmetric
+     form as well.  */
+  bool then_else_reversed;
+
+  /* True if the contents of then_bb and else_bb are a
+     simple single set instruction.  */
+  bool then_simple;
+  bool else_simple;
+
+  /* True if we're optimisizing the control block for speed, false if
+     we're optimizing for size.  */
+  bool speed_p;
+
+  /* An estimate of the original costs.  When optimizing for size, this is the
+     combined cost of COND, JUMP and the costs for THEN_BB and ELSE_BB.
+     When optimizing for speed, we use the costs of COND plus the minimum of
+     the costs for THEN_BB and ELSE_BB, as computed in the next field.  */
+  unsigned int original_cost;
+
+  /* Maximum permissible cost for the unconditional sequence we should
+     generate to replace this branch.  */
+  unsigned int max_seq_cost;
+
+  /* The name of the noce transform that succeeded in if-converting
+     this structure.  Used for debugging.  */
+  const char *transform_name;
+};
+
+#endif /* GCC_IFCVT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/inchash.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/inchash.h
new file mode 100644
index 0000000..f61e631
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/inchash.h
@@ -0,0 +1,211 @@
+/* An incremental hash abstract data type.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef INCHASH_H
+#define INCHASH_H 1
+
+
+/* This file implements an incremential hash function ADT, to be used
+   by code that incrementially hashes a lot of unrelated data
+   (not in a single memory block) into a single value. The goal
+   is to make it easy to plug in efficient hash algorithms.
+   Currently it just implements the plain old jhash based
+   incremental hash from gcc's tree.c.  */
+
+hashval_t iterative_hash_host_wide_int (HOST_WIDE_INT, hashval_t);
+hashval_t iterative_hash_hashval_t (hashval_t, hashval_t);
+
+namespace inchash
+{
+
+class hash
+{
+ public:
+
+  /* Start incremential hashing, optionally with SEED.  */
+  hash (hashval_t seed = 0)
+  {
+    val = seed;
+    bits = 0;
+  }
+
+  /* End incremential hashing and provide the final value.  */
+  hashval_t end ()
+  {
+    return val;
+  }
+
+  /* Add unsigned value V.  */
+  void add_int (unsigned v)
+  {
+    val = iterative_hash_hashval_t (v, val);
+  }
+
+  /* Add polynomial value V, treating each element as an unsigned int.  */
+  template<unsigned int N, typename T>
+  void add_poly_int (const poly_int_pod<N, T> &v)
+  {
+    for (unsigned int i = 0; i < N; ++i)
+      add_int (v.coeffs[i]);
+  }
+
+  /* Add HOST_WIDE_INT value V.  */
+  void add_hwi (HOST_WIDE_INT v)
+  {
+    val = iterative_hash_host_wide_int (v, val);
+  }
+
+  /* Add polynomial value V, treating each element as a HOST_WIDE_INT.  */
+  template<unsigned int N, typename T>
+  void add_poly_hwi (const poly_int_pod<N, T> &v)
+  {
+    for (unsigned int i = 0; i < N; ++i)
+      add_hwi (v.coeffs[i]);
+  }
+
+  /* Add wide_int-based value V.  */
+  template<typename T>
+  void add_wide_int (const generic_wide_int<T> &x)
+  {
+    add_int (x.get_len ());
+    for (unsigned i = 0; i < x.get_len (); i++)
+      add_hwi (x.elt (i));
+  }
+
+  /* Hash in pointer PTR.  */
+  void add_ptr (const void *ptr)
+  {
+    add (&ptr, sizeof (ptr));
+  }
+
+  /* Add a memory block DATA with size LEN.  */
+  void add (const void *data, size_t len)
+  {
+    val = iterative_hash (data, len, val);
+  }
+
+  /* Merge hash value OTHER.  */
+  void merge_hash (hashval_t other)
+  {
+    val = iterative_hash_hashval_t (other, val);
+  }
+
+  /* Hash in state from other inchash OTHER.  */
+  void merge (hash &other)
+  {
+    merge_hash (other.val);
+  }
+
+  template<class T> void add_object(T &obj)
+  {
+    add (&obj, sizeof(T));
+  }
+
+  /* Support for accumulating boolean flags */
+
+  void add_flag (bool flag)
+  {
+    bits = (bits << 1) | flag;
+  }
+
+  void commit_flag ()
+  {
+    add_int (bits);
+    bits = 0;
+  }
+
+  /* Support for commutative hashing. Add A and B in a defined order
+     based on their value. This is useful for hashing commutative
+     expressions, so that A+B and B+A get the same hash.  */
+
+  void add_commutative (hash &a, hash &b)
+  {
+    if (a.end() > b.end())
+      {
+	merge (b);
+	merge (a);
+      }
+    else
+      {
+	merge (a);
+	merge (b);
+      }
+  }
+
+ private:
+  hashval_t val;
+  unsigned bits;
+};
+
+}
+
+/* Borrowed from hashtab.c iterative_hash implementation.  */
+#define mix(a,b,c) \
+{ \
+  a -= b; a -= c; a ^= (c>>13); \
+  b -= c; b -= a; b ^= (a<< 8); \
+  c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \
+  a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \
+  b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \
+  c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \
+  a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \
+  b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \
+  c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \
+}
+
+
+/* Produce good hash value combining VAL and VAL2.  */
+inline
+hashval_t
+iterative_hash_hashval_t (hashval_t val, hashval_t val2)
+{
+  /* the golden ratio; an arbitrary value.  */
+  hashval_t a = 0x9e3779b9;
+
+  mix (a, val, val2);
+  return val2;
+}
+
+/* Produce good hash value combining VAL and VAL2.  */
+
+inline
+hashval_t
+iterative_hash_host_wide_int (HOST_WIDE_INT val, hashval_t val2)
+{
+  if (sizeof (HOST_WIDE_INT) == sizeof (hashval_t))
+    return iterative_hash_hashval_t (val, val2);
+  else
+    {
+      hashval_t a = (hashval_t) val;
+      /* Avoid warnings about shifting of more than the width of the type on
+         hosts that won't execute this path.  */
+      int zero = 0;
+      hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 8 + zero));
+      mix (a, b, val2);
+      if (sizeof (HOST_WIDE_INT) > 2 * sizeof (hashval_t))
+	{
+	  hashval_t a = (hashval_t) (val >> (sizeof (hashval_t) * 16 + zero));
+	  hashval_t b = (hashval_t) (val >> (sizeof (hashval_t) * 24 + zero));
+	  mix (a, b, val2);
+	}
+      return val2;
+    }
+}
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/incpath.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/incpath.h
new file mode 100644
index 0000000..4926e2f
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/incpath.h
@@ -0,0 +1,46 @@
+/* Set up combined include path for the preprocessor.
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_INCPATH_H
+#define GCC_INCPATH_H
+
+/* Various fragments of include path.  */
+enum incpath_kind {
+  INC_QUOTE = 0, /* include "foo" */
+  INC_BRACKET,   /* include <foo> */
+  INC_SYSTEM,    /* sysinclude */
+  INC_AFTER,	/* post-sysinclude.  */
+  INC_MAX
+};
+
+extern void split_quote_chain (void);
+extern void add_path (char *, incpath_kind, int, bool);
+extern void register_include_chains (cpp_reader *, const char *,
+				     const char *, const char *,
+				     int, int, int);
+extern void add_cpp_dir_path (struct cpp_dir *, incpath_kind);
+extern struct cpp_dir *get_added_cpp_dirs (incpath_kind);
+
+struct target_c_incpath_s {
+  /* Do extra includes processing.  STDINC is false iff -nostdinc was given.  */
+  void (*extra_pre_includes) (const char *, const char *, int);
+  void (*extra_includes) (const char *, const char *, int);
+};
+
+extern struct target_c_incpath_s target_c_incpath;
+
+#endif /* GCC_INCPATH_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/input.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/input.h
new file mode 100644
index 0000000..3c7cf36
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/input.h
@@ -0,0 +1,213 @@
+/* Declarations for variables relating to reading the source file.
+   Used by parsers, lexical analyzers, and error message routines.
+   Copyright (C) 1993-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_INPUT_H
+#define GCC_INPUT_H
+
+#include "line-map.h"
+
+extern GTY(()) struct line_maps *line_table;
+extern GTY(()) struct line_maps *saved_line_table;
+
+/* A value which will never be used to represent a real location.  */
+#define UNKNOWN_LOCATION ((location_t) 0)
+
+/* The location for declarations in "<built-in>" */
+#define BUILTINS_LOCATION ((location_t) 1)
+
+/* line-map.c reserves RESERVED_LOCATION_COUNT to the user.  Ensure
+   both UNKNOWN_LOCATION and BUILTINS_LOCATION fit into that.  */
+STATIC_ASSERT (BUILTINS_LOCATION < RESERVED_LOCATION_COUNT);
+
+extern bool is_location_from_builtin_token (location_t);
+extern expanded_location expand_location (location_t);
+
+/* A class capturing the bounds of a buffer, to allow for run-time
+   bounds-checking in a checked build.  */
+
+class char_span
+{
+ public:
+  char_span (const char *ptr, size_t n_elts) : m_ptr (ptr), m_n_elts (n_elts) {}
+
+  /* Test for a non-NULL pointer.  */
+  operator bool() const { return m_ptr; }
+
+  /* Get length, not including any 0-terminator (which may not be,
+     in fact, present).  */
+  size_t length () const { return m_n_elts; }
+
+  const char *get_buffer () const { return m_ptr; }
+
+  char operator[] (int idx) const
+  {
+    gcc_assert (idx >= 0);
+    gcc_assert ((size_t)idx < m_n_elts);
+    return m_ptr[idx];
+  }
+
+  char_span subspan (int offset, int n_elts) const
+  {
+    gcc_assert (offset >= 0);
+    gcc_assert (offset < (int)m_n_elts);
+    gcc_assert (n_elts >= 0);
+    gcc_assert (offset + n_elts <= (int)m_n_elts);
+    return char_span (m_ptr + offset, n_elts);
+  }
+
+  char *xstrdup () const
+  {
+    return ::xstrndup (m_ptr, m_n_elts);
+  }
+
+ private:
+  const char *m_ptr;
+  size_t m_n_elts;
+};
+
+extern char_span location_get_source_line (const char *file_path, int line);
+
+extern bool location_missing_trailing_newline (const char *file_path);
+extern expanded_location
+expand_location_to_spelling_point (location_t,
+				   enum location_aspect aspect
+				     = LOCATION_ASPECT_CARET);
+extern location_t expansion_point_location_if_in_system_header (location_t);
+extern location_t expansion_point_location (location_t);
+
+extern location_t input_location;
+
+#define LOCATION_FILE(LOC) ((expand_location (LOC)).file)
+#define LOCATION_LINE(LOC) ((expand_location (LOC)).line)
+#define LOCATION_COLUMN(LOC)((expand_location (LOC)).column)
+#define LOCATION_LOCUS(LOC) \
+  ((IS_ADHOC_LOC (LOC)) ? get_location_from_adhoc_loc (line_table, LOC) \
+   : (LOC))
+#define LOCATION_BLOCK(LOC) \
+  ((tree) ((IS_ADHOC_LOC (LOC)) ? get_data_from_adhoc_loc (line_table, (LOC)) \
+   : NULL))
+#define RESERVED_LOCATION_P(LOC) \
+  (LOCATION_LOCUS (LOC) < RESERVED_LOCATION_COUNT)
+
+/* Return a positive value if LOCATION is the locus of a token that is
+   located in a system header, O otherwise. It returns 1 if LOCATION
+   is the locus of a token that is located in a system header, and 2
+   if LOCATION is the locus of a token located in a C system header
+   that therefore needs to be extern "C" protected in C++.
+
+   Note that this function returns 1 if LOCATION belongs to a token
+   that is part of a macro replacement-list defined in a system
+   header, but expanded in a non-system file.  */
+
+static inline int
+in_system_header_at (location_t loc)
+{
+  return linemap_location_in_system_header_p (line_table, loc);
+}
+
+/* Return true if LOCATION is the locus of a token that
+   comes from a macro expansion, false otherwise.  */
+
+static inline bool
+from_macro_expansion_at (location_t loc)
+{
+  return linemap_location_from_macro_expansion_p (line_table, loc);
+}
+
+/* Return true if LOCATION is the locus of a token that comes from
+   a macro definition, false otherwise.  This differs from from_macro_expansion_at
+   in its treatment of macro arguments, for which this returns false.  */
+
+static inline bool
+from_macro_definition_at (location_t loc)
+{
+  return linemap_location_from_macro_definition_p (line_table, loc);
+}
+
+static inline location_t
+get_pure_location (location_t loc)
+{
+  return get_pure_location (line_table, loc);
+}
+
+/* Get the start of any range encoded within location LOC.  */
+
+static inline location_t
+get_start (location_t loc)
+{
+  return get_range_from_loc (line_table, loc).m_start;
+}
+
+/* Get the endpoint of any range encoded within location LOC.  */
+
+static inline location_t
+get_finish (location_t loc)
+{
+  return get_range_from_loc (line_table, loc).m_finish;
+}
+
+extern location_t make_location (location_t caret,
+				 location_t start, location_t finish);
+extern location_t make_location (location_t caret, source_range src_range);
+
+void dump_line_table_statistics (void);
+
+void dump_location_info (FILE *stream);
+
+void diagnostics_file_cache_fini (void);
+
+void diagnostics_file_cache_forcibly_evict_file (const char *file_path);
+
+struct GTY(()) string_concat
+{
+  string_concat (int num, location_t *locs);
+
+  int m_num;
+  location_t * GTY ((atomic)) m_locs;
+};
+
+struct location_hash : int_hash <location_t, UNKNOWN_LOCATION> { };
+
+class GTY(()) string_concat_db
+{
+ public:
+  string_concat_db ();
+  void record_string_concatenation (int num, location_t *locs);
+
+  bool get_string_concatenation (location_t loc,
+				 int *out_num,
+				 location_t **out_locs);
+
+ private:
+  static location_t get_key_loc (location_t loc);
+
+  /* For the fields to be private, we must grant access to the
+     generated code in gtype-desc.c.  */
+
+  friend void ::gt_ggc_mx_string_concat_db (void *x_p);
+  friend void ::gt_pch_nx_string_concat_db (void *x_p);
+  friend void ::gt_pch_p_16string_concat_db (void *this_obj, void *x_p,
+					     gt_pointer_operator op,
+					     void *cookie);
+
+  hash_map <location_hash, string_concat *> *m_table;
+};
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-addr.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-addr.h
new file mode 100644
index 0000000..8e33c62
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-addr.h
@@ -0,0 +1,63 @@
+/* Macros to support INSN_ADDRESSES
+   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_INSN_ADDR_H
+#define GCC_INSN_ADDR_H
+
+extern vec<int> insn_addresses_;
+extern int insn_current_address;
+
+#define INSN_ADDRESSES(id) (insn_addresses_[id])
+#define INSN_ADDRESSES_ALLOC(size)			\
+  do							\
+    {							\
+      insn_addresses_.create (size);			\
+      insn_addresses_.safe_grow_cleared (size);		\
+      memset (insn_addresses_.address (),		\
+	      0, sizeof (int) * size);			\
+    }							\
+  while (0)
+#define INSN_ADDRESSES_FREE() (insn_addresses_.release ())
+#define INSN_ADDRESSES_SET_P() (insn_addresses_.exists ())
+#define INSN_ADDRESSES_SIZE() (insn_addresses_.length ())
+
+static inline void
+insn_addresses_new (rtx_insn *insn, int insn_addr)
+{
+  unsigned insn_uid = INSN_UID ((insn));
+
+  if (INSN_ADDRESSES_SET_P ())
+    {
+      size_t size = INSN_ADDRESSES_SIZE ();
+      if (size <= insn_uid)
+	{
+	  int *p;
+	  insn_addresses_.safe_grow (insn_uid + 1);
+	  p = insn_addresses_.address ();
+	  memset (&p[size],
+		  0, sizeof (int) * (insn_uid + 1 - size));
+	}
+      INSN_ADDRESSES (insn_uid) = insn_addr;
+    }
+}
+
+#define INSN_ADDRESSES_NEW(insn, addr)		\
+  (insn_addresses_new (insn, addr))
+
+#endif /* ! GCC_INSN_ADDR_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-attr-common.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-attr-common.h
new file mode 100644
index 0000000..c477bdf
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-attr-common.h
@@ -0,0 +1,25 @@
+/* Generated automatically by the program `genattr-common'
+   from the machine description file `md'.  */
+
+#ifndef GCC_INSN_ATTR_COMMON_H
+#define GCC_INSN_ATTR_COMMON_H
+
+enum attr_type {TYPE_ADC_IMM, TYPE_ADC_REG, TYPE_ADCS_IMM, TYPE_ADCS_REG, TYPE_ADR, TYPE_ALU_EXT, TYPE_ALU_IMM, TYPE_ALU_SREG, TYPE_ALU_SHIFT_IMM, TYPE_ALU_SHIFT_REG, TYPE_ALU_DSP_REG, TYPE_ALUS_EXT, TYPE_ALUS_IMM, TYPE_ALUS_SREG, TYPE_ALUS_SHIFT_IMM, TYPE_ALUS_SHIFT_REG, TYPE_BFM, TYPE_BFX, TYPE_BLOCK, TYPE_BRANCH, TYPE_CALL, TYPE_CLZ, TYPE_NO_INSN, TYPE_CSEL, TYPE_CRC, TYPE_EXTEND, TYPE_F_CVT, TYPE_F_CVTF2I, TYPE_F_CVTI2F, TYPE_F_FLAG, TYPE_F_LOADD, TYPE_F_LOADS, TYPE_F_MCR, TYPE_F_MCRR, TYPE_F_MINMAXD, TYPE_F_MINMAXS, TYPE_F_MRC, TYPE_F_MRRC, TYPE_F_RINTD, TYPE_F_RINTS, TYPE_F_STORED, TYPE_F_STORES, TYPE_FADDD, TYPE_FADDS, TYPE_FCCMPD, TYPE_FCCMPS, TYPE_FCMPD, TYPE_FCMPS, TYPE_FCONSTD, TYPE_FCONSTS, TYPE_FCSEL, TYPE_FDIVD, TYPE_FDIVS, TYPE_FFARITHD, TYPE_FFARITHS, TYPE_FFMAD, TYPE_FFMAS, TYPE_FLOAT, TYPE_FMACD, TYPE_FMACS, TYPE_FMOV, TYPE_FMULD, TYPE_FMULS, TYPE_FSQRTS, TYPE_FSQRTD, TYPE_LOAD_ACQ, TYPE_LOAD_BYTE, TYPE_LOAD_4, TYPE_LOAD_8, TYPE_LOAD_12, TYPE_LOAD_16, TYPE_LOGIC_IMM, TYPE_LOGIC_REG, TYPE_LOGIC_SHIFT_IMM, TYPE_LOGIC_SHIFT_REG, TYPE_LOGICS_IMM, TYPE_LOGICS_REG, TYPE_LOGICS_SHIFT_IMM, TYPE_LOGICS_SHIFT_REG, TYPE_MLA, TYPE_MLAS, TYPE_MOV_IMM, TYPE_MOV_REG, TYPE_MOV_SHIFT, TYPE_MOV_SHIFT_REG, TYPE_MRS, TYPE_MUL, TYPE_MULS, TYPE_MULTIPLE, TYPE_MVN_IMM, TYPE_MVN_REG, TYPE_MVN_SHIFT, TYPE_MVN_SHIFT_REG, TYPE_NOP, TYPE_RBIT, TYPE_REV, TYPE_ROTATE_IMM, TYPE_SDIV, TYPE_SHIFT_IMM, TYPE_SHIFT_REG, TYPE_SMLAD, TYPE_SMLADX, TYPE_SMLAL, TYPE_SMLALD, TYPE_SMLALS, TYPE_SMLALXY, TYPE_SMLAWX, TYPE_SMLAWY, TYPE_SMLAXY, TYPE_SMLSD, TYPE_SMLSDX, TYPE_SMLSLD, TYPE_SMMLA, TYPE_SMMUL, TYPE_SMMULR, TYPE_SMUAD, TYPE_SMUADX, TYPE_SMULL, TYPE_SMULLS, TYPE_SMULWY, TYPE_SMULXY, TYPE_SMUSD, TYPE_SMUSDX, TYPE_STORE_REL, TYPE_STORE_4, TYPE_STORE_8, TYPE_STORE_12, TYPE_STORE_16, TYPE_TRAP, TYPE_UDIV, TYPE_UMAAL, TYPE_UMLAL, TYPE_UMLALS, TYPE_UMULL, TYPE_UMULLS, TYPE_UNTYPED, TYPE_WMMX_TANDC, TYPE_WMMX_TBCST, TYPE_WMMX_TEXTRC, TYPE_WMMX_TEXTRM, TYPE_WMMX_TINSR, TYPE_WMMX_TMCR, TYPE_WMMX_TMCRR, TYPE_WMMX_TMIA, TYPE_WMMX_TMIAPH, TYPE_WMMX_TMIAXY, TYPE_WMMX_TMRC, TYPE_WMMX_TMRRC, TYPE_WMMX_TMOVMSK, TYPE_WMMX_TORC, TYPE_WMMX_TORVSC, TYPE_WMMX_WABS, TYPE_WMMX_WABSDIFF, TYPE_WMMX_WACC, TYPE_WMMX_WADD, TYPE_WMMX_WADDBHUS, TYPE_WMMX_WADDSUBHX, TYPE_WMMX_WALIGNI, TYPE_WMMX_WALIGNR, TYPE_WMMX_WAND, TYPE_WMMX_WANDN, TYPE_WMMX_WAVG2, TYPE_WMMX_WAVG4, TYPE_WMMX_WCMPEQ, TYPE_WMMX_WCMPGT, TYPE_WMMX_WMAC, TYPE_WMMX_WMADD, TYPE_WMMX_WMAX, TYPE_WMMX_WMERGE, TYPE_WMMX_WMIAWXY, TYPE_WMMX_WMIAXY, TYPE_WMMX_WMIN, TYPE_WMMX_WMOV, TYPE_WMMX_WMUL, TYPE_WMMX_WMULW, TYPE_WMMX_WLDR, TYPE_WMMX_WOR, TYPE_WMMX_WPACK, TYPE_WMMX_WQMIAXY, TYPE_WMMX_WQMULM, TYPE_WMMX_WQMULWM, TYPE_WMMX_WROR, TYPE_WMMX_WSAD, TYPE_WMMX_WSHUFH, TYPE_WMMX_WSLL, TYPE_WMMX_WSRA, TYPE_WMMX_WSRL, TYPE_WMMX_WSTR, TYPE_WMMX_WSUB, TYPE_WMMX_WSUBADDHX, TYPE_WMMX_WUNPCKEH, TYPE_WMMX_WUNPCKEL, TYPE_WMMX_WUNPCKIH, TYPE_WMMX_WUNPCKIL, TYPE_WMMX_WXOR, TYPE_NEON_ADD, TYPE_NEON_ADD_Q, TYPE_NEON_ADD_WIDEN, TYPE_NEON_ADD_LONG, TYPE_NEON_QADD, TYPE_NEON_QADD_Q, TYPE_NEON_ADD_HALVE, TYPE_NEON_ADD_HALVE_Q, TYPE_NEON_ADD_HALVE_NARROW_Q, TYPE_NEON_SUB, TYPE_NEON_SUB_Q, TYPE_NEON_SUB_WIDEN, TYPE_NEON_SUB_LONG, TYPE_NEON_QSUB, TYPE_NEON_QSUB_Q, TYPE_NEON_SUB_HALVE, TYPE_NEON_SUB_HALVE_Q, TYPE_NEON_SUB_HALVE_NARROW_Q, TYPE_NEON_FCADD, TYPE_NEON_FCMLA, TYPE_NEON_ABS, TYPE_NEON_ABS_Q, TYPE_NEON_DOT, TYPE_NEON_DOT_Q, TYPE_NEON_NEG, TYPE_NEON_NEG_Q, TYPE_NEON_QNEG, TYPE_NEON_QNEG_Q, TYPE_NEON_QABS, TYPE_NEON_QABS_Q, TYPE_NEON_ABD, TYPE_NEON_ABD_Q, TYPE_NEON_ABD_LONG, TYPE_NEON_MINMAX, TYPE_NEON_MINMAX_Q, TYPE_NEON_COMPARE, TYPE_NEON_COMPARE_Q, TYPE_NEON_COMPARE_ZERO, TYPE_NEON_COMPARE_ZERO_Q, TYPE_NEON_ARITH_ACC, TYPE_NEON_ARITH_ACC_Q, TYPE_NEON_REDUC_ADD, TYPE_NEON_REDUC_ADD_Q, TYPE_NEON_REDUC_ADD_LONG, TYPE_NEON_REDUC_ADD_ACC, TYPE_NEON_REDUC_ADD_ACC_Q, TYPE_NEON_REDUC_MINMAX, TYPE_NEON_REDUC_MINMAX_Q, TYPE_NEON_LOGIC, TYPE_NEON_LOGIC_Q, TYPE_NEON_TST, TYPE_NEON_TST_Q, TYPE_NEON_SHIFT_IMM, TYPE_NEON_SHIFT_IMM_Q, TYPE_NEON_SHIFT_IMM_NARROW_Q, TYPE_NEON_SHIFT_IMM_LONG, TYPE_NEON_SHIFT_REG, TYPE_NEON_SHIFT_REG_Q, TYPE_NEON_SHIFT_ACC, TYPE_NEON_SHIFT_ACC_Q, TYPE_NEON_SAT_SHIFT_IMM, TYPE_NEON_SAT_SHIFT_IMM_Q, TYPE_NEON_SAT_SHIFT_IMM_NARROW_Q, TYPE_NEON_SAT_SHIFT_REG, TYPE_NEON_SAT_SHIFT_REG_Q, TYPE_NEON_INS, TYPE_NEON_INS_Q, TYPE_NEON_MOVE, TYPE_NEON_MOVE_Q, TYPE_NEON_MOVE_NARROW_Q, TYPE_NEON_PERMUTE, TYPE_NEON_PERMUTE_Q, TYPE_NEON_ZIP, TYPE_NEON_ZIP_Q, TYPE_NEON_TBL1, TYPE_NEON_TBL1_Q, TYPE_NEON_TBL2, TYPE_NEON_TBL2_Q, TYPE_NEON_TBL3, TYPE_NEON_TBL3_Q, TYPE_NEON_TBL4, TYPE_NEON_TBL4_Q, TYPE_NEON_BSL, TYPE_NEON_BSL_Q, TYPE_NEON_CLS, TYPE_NEON_CLS_Q, TYPE_NEON_CNT, TYPE_NEON_CNT_Q, TYPE_NEON_DUP, TYPE_NEON_DUP_Q, TYPE_NEON_EXT, TYPE_NEON_EXT_Q, TYPE_NEON_RBIT, TYPE_NEON_RBIT_Q, TYPE_NEON_REV, TYPE_NEON_REV_Q, TYPE_NEON_MUL_B, TYPE_NEON_MUL_B_Q, TYPE_NEON_MUL_H, TYPE_NEON_MUL_H_Q, TYPE_NEON_MUL_S, TYPE_NEON_MUL_S_Q, TYPE_NEON_MUL_B_LONG, TYPE_NEON_MUL_H_LONG, TYPE_NEON_MUL_S_LONG, TYPE_NEON_MUL_D_LONG, TYPE_NEON_MUL_H_SCALAR, TYPE_NEON_MUL_H_SCALAR_Q, TYPE_NEON_MUL_S_SCALAR, TYPE_NEON_MUL_S_SCALAR_Q, TYPE_NEON_MUL_H_SCALAR_LONG, TYPE_NEON_MUL_S_SCALAR_LONG, TYPE_NEON_SAT_MUL_B, TYPE_NEON_SAT_MUL_B_Q, TYPE_NEON_SAT_MUL_H, TYPE_NEON_SAT_MUL_H_Q, TYPE_NEON_SAT_MUL_S, TYPE_NEON_SAT_MUL_S_Q, TYPE_NEON_SAT_MUL_B_LONG, TYPE_NEON_SAT_MUL_H_LONG, TYPE_NEON_SAT_MUL_S_LONG, TYPE_NEON_SAT_MUL_H_SCALAR, TYPE_NEON_SAT_MUL_H_SCALAR_Q, TYPE_NEON_SAT_MUL_S_SCALAR, TYPE_NEON_SAT_MUL_S_SCALAR_Q, TYPE_NEON_SAT_MUL_H_SCALAR_LONG, TYPE_NEON_SAT_MUL_S_SCALAR_LONG, TYPE_NEON_MLA_B, TYPE_NEON_MLA_B_Q, TYPE_NEON_MLA_H, TYPE_NEON_MLA_H_Q, TYPE_NEON_MLA_S, TYPE_NEON_MLA_S_Q, TYPE_NEON_MLA_B_LONG, TYPE_NEON_MLA_H_LONG, TYPE_NEON_MLA_S_LONG, TYPE_NEON_MLA_H_SCALAR, TYPE_NEON_MLA_H_SCALAR_Q, TYPE_NEON_MLA_S_SCALAR, TYPE_NEON_MLA_S_SCALAR_Q, TYPE_NEON_MLA_H_SCALAR_LONG, TYPE_NEON_MLA_S_SCALAR_LONG, TYPE_NEON_SAT_MLA_B_LONG, TYPE_NEON_SAT_MLA_H_LONG, TYPE_NEON_SAT_MLA_S_LONG, TYPE_NEON_SAT_MLA_H_SCALAR_LONG, TYPE_NEON_SAT_MLA_S_SCALAR_LONG, TYPE_NEON_TO_GP, TYPE_NEON_TO_GP_Q, TYPE_NEON_FROM_GP, TYPE_NEON_FROM_GP_Q, TYPE_NEON_LDR, TYPE_NEON_LDP, TYPE_NEON_LDP_Q, TYPE_NEON_LOAD1_1REG, TYPE_NEON_LOAD1_1REG_Q, TYPE_NEON_LOAD1_2REG, TYPE_NEON_LOAD1_2REG_Q, TYPE_NEON_LOAD1_3REG, TYPE_NEON_LOAD1_3REG_Q, TYPE_NEON_LOAD1_4REG, TYPE_NEON_LOAD1_4REG_Q, TYPE_NEON_LOAD1_ALL_LANES, TYPE_NEON_LOAD1_ALL_LANES_Q, TYPE_NEON_LOAD1_ONE_LANE, TYPE_NEON_LOAD1_ONE_LANE_Q, TYPE_NEON_LOAD2_2REG, TYPE_NEON_LOAD2_2REG_Q, TYPE_NEON_LOAD2_4REG, TYPE_NEON_LOAD2_4REG_Q, TYPE_NEON_LOAD2_ALL_LANES, TYPE_NEON_LOAD2_ALL_LANES_Q, TYPE_NEON_LOAD2_ONE_LANE, TYPE_NEON_LOAD2_ONE_LANE_Q, TYPE_NEON_LOAD3_3REG, TYPE_NEON_LOAD3_3REG_Q, TYPE_NEON_LOAD3_ALL_LANES, TYPE_NEON_LOAD3_ALL_LANES_Q, TYPE_NEON_LOAD3_ONE_LANE, TYPE_NEON_LOAD3_ONE_LANE_Q, TYPE_NEON_LOAD4_4REG, TYPE_NEON_LOAD4_4REG_Q, TYPE_NEON_LOAD4_ALL_LANES, TYPE_NEON_LOAD4_ALL_LANES_Q, TYPE_NEON_LOAD4_ONE_LANE, TYPE_NEON_LOAD4_ONE_LANE_Q, TYPE_NEON_STR, TYPE_NEON_STP, TYPE_NEON_STP_Q, TYPE_NEON_STORE1_1REG, TYPE_NEON_STORE1_1REG_Q, TYPE_NEON_STORE1_2REG, TYPE_NEON_STORE1_2REG_Q, TYPE_NEON_STORE1_3REG, TYPE_NEON_STORE1_3REG_Q, TYPE_NEON_STORE1_4REG, TYPE_NEON_STORE1_4REG_Q, TYPE_NEON_STORE1_ONE_LANE, TYPE_NEON_STORE1_ONE_LANE_Q, TYPE_NEON_STORE2_2REG, TYPE_NEON_STORE2_2REG_Q, TYPE_NEON_STORE2_4REG, TYPE_NEON_STORE2_4REG_Q, TYPE_NEON_STORE2_ONE_LANE, TYPE_NEON_STORE2_ONE_LANE_Q, TYPE_NEON_STORE3_3REG, TYPE_NEON_STORE3_3REG_Q, TYPE_NEON_STORE3_ONE_LANE, TYPE_NEON_STORE3_ONE_LANE_Q, TYPE_NEON_STORE4_4REG, TYPE_NEON_STORE4_4REG_Q, TYPE_NEON_STORE4_ONE_LANE, TYPE_NEON_STORE4_ONE_LANE_Q, TYPE_NEON_FP_ABS_S, TYPE_NEON_FP_ABS_S_Q, TYPE_NEON_FP_ABS_D, TYPE_NEON_FP_ABS_D_Q, TYPE_NEON_FP_NEG_S, TYPE_NEON_FP_NEG_S_Q, TYPE_NEON_FP_NEG_D, TYPE_NEON_FP_NEG_D_Q, TYPE_NEON_FP_ABD_S, TYPE_NEON_FP_ABD_S_Q, TYPE_NEON_FP_ABD_D, TYPE_NEON_FP_ABD_D_Q, TYPE_NEON_FP_ADDSUB_S, TYPE_NEON_FP_ADDSUB_S_Q, TYPE_NEON_FP_ADDSUB_D, TYPE_NEON_FP_ADDSUB_D_Q, TYPE_NEON_FP_COMPARE_S, TYPE_NEON_FP_COMPARE_S_Q, TYPE_NEON_FP_COMPARE_D, TYPE_NEON_FP_COMPARE_D_Q, TYPE_NEON_FP_MINMAX_S, TYPE_NEON_FP_MINMAX_S_Q, TYPE_NEON_FP_MINMAX_D, TYPE_NEON_FP_MINMAX_D_Q, TYPE_NEON_FP_REDUC_ADD_S, TYPE_NEON_FP_REDUC_ADD_S_Q, TYPE_NEON_FP_REDUC_ADD_D, TYPE_NEON_FP_REDUC_ADD_D_Q, TYPE_NEON_FP_REDUC_MINMAX_S, TYPE_NEON_FP_REDUC_MINMAX_S_Q, TYPE_NEON_FP_REDUC_MINMAX_D, TYPE_NEON_FP_REDUC_MINMAX_D_Q, TYPE_NEON_FP_CVT_NARROW_S_Q, TYPE_NEON_FP_CVT_NARROW_D_Q, TYPE_NEON_FP_CVT_WIDEN_H, TYPE_NEON_FP_CVT_WIDEN_S, TYPE_NEON_FP_TO_INT_S, TYPE_NEON_FP_TO_INT_S_Q, TYPE_NEON_FP_TO_INT_D, TYPE_NEON_FP_TO_INT_D_Q, TYPE_NEON_INT_TO_FP_S, TYPE_NEON_INT_TO_FP_S_Q, TYPE_NEON_INT_TO_FP_D, TYPE_NEON_INT_TO_FP_D_Q, TYPE_NEON_FP_ROUND_S, TYPE_NEON_FP_ROUND_S_Q, TYPE_NEON_FP_ROUND_D, TYPE_NEON_FP_ROUND_D_Q, TYPE_NEON_FP_RECPE_S, TYPE_NEON_FP_RECPE_S_Q, TYPE_NEON_FP_RECPE_D, TYPE_NEON_FP_RECPE_D_Q, TYPE_NEON_FP_RECPS_S, TYPE_NEON_FP_RECPS_S_Q, TYPE_NEON_FP_RECPS_D, TYPE_NEON_FP_RECPS_D_Q, TYPE_NEON_FP_RECPX_S, TYPE_NEON_FP_RECPX_S_Q, TYPE_NEON_FP_RECPX_D, TYPE_NEON_FP_RECPX_D_Q, TYPE_NEON_FP_RSQRTE_S, TYPE_NEON_FP_RSQRTE_S_Q, TYPE_NEON_FP_RSQRTE_D, TYPE_NEON_FP_RSQRTE_D_Q, TYPE_NEON_FP_RSQRTS_S, TYPE_NEON_FP_RSQRTS_S_Q, TYPE_NEON_FP_RSQRTS_D, TYPE_NEON_FP_RSQRTS_D_Q, TYPE_NEON_FP_MUL_S, TYPE_NEON_FP_MUL_S_Q, TYPE_NEON_FP_MUL_S_SCALAR, TYPE_NEON_FP_MUL_S_SCALAR_Q, TYPE_NEON_FP_MUL_D, TYPE_NEON_FP_MUL_D_Q, TYPE_NEON_FP_MUL_D_SCALAR_Q, TYPE_NEON_FP_MLA_S, TYPE_NEON_FP_MLA_S_Q, TYPE_NEON_FP_MLA_S_SCALAR, TYPE_NEON_FP_MLA_S_SCALAR_Q, TYPE_NEON_FP_MLA_D, TYPE_NEON_FP_MLA_D_Q, TYPE_NEON_FP_MLA_D_SCALAR_Q, TYPE_NEON_FP_SQRT_S, TYPE_NEON_FP_SQRT_S_Q, TYPE_NEON_FP_SQRT_D, TYPE_NEON_FP_SQRT_D_Q, TYPE_NEON_FP_DIV_S, TYPE_NEON_FP_DIV_S_Q, TYPE_NEON_FP_DIV_D, TYPE_NEON_FP_DIV_D_Q, TYPE_CRYPTO_AESE, TYPE_CRYPTO_AESMC, TYPE_CRYPTO_SHA1_XOR, TYPE_CRYPTO_SHA1_FAST, TYPE_CRYPTO_SHA1_SLOW, TYPE_CRYPTO_SHA256_FAST, TYPE_CRYPTO_SHA256_SLOW, TYPE_CRYPTO_PMULL, TYPE_CRYPTO_SHA512, TYPE_CRYPTO_SHA3, TYPE_CRYPTO_SM3, TYPE_CRYPTO_SM4, TYPE_COPROC};
+enum attr_mul32 {MUL32_NO, MUL32_YES};
+enum attr_widen_mul64 {WIDEN_MUL64_NO, WIDEN_MUL64_YES};
+enum attr_is_neon_type {IS_NEON_TYPE_YES, IS_NEON_TYPE_NO};
+enum attr_fp {FP_NO, FP_YES};
+enum attr_arch_enabled {ARCH_ENABLED_NO, ARCH_ENABLED_YES};
+enum attr_enabled {ENABLED_NO, ENABLED_YES};
+enum attr_movprfx {MOVPRFX_NO, MOVPRFX_YES};
+enum attr_predicated {PREDICATED_YES, PREDICATED_NO};
+enum attr_speculation_barrier {SPECULATION_BARRIER_TRUE, SPECULATION_BARRIER_FALSE};
+enum attr_tune {TUNE_CORTEXA35, TUNE_CORTEXA53, TUNE_CORTEXA57, TUNE_CORTEXA72, TUNE_CORTEXA73, TUNE_THUNDERX, TUNE_THUNDERXT88P1, TUNE_THUNDERXT88, TUNE_OCTEONTX, TUNE_OCTEONTXT81, TUNE_OCTEONTXT83, TUNE_THUNDERXT81, TUNE_THUNDERXT83, TUNE_EMAG, TUNE_XGENE1, TUNE_FALKOR, TUNE_QDF24XX, TUNE_EXYNOSM1, TUNE_PHECDA, TUNE_THUNDERX2T99P1, TUNE_VULCAN, TUNE_THUNDERX2T99, TUNE_CORTEXA55, TUNE_CORTEXA75, TUNE_CORTEXA76, TUNE_ARES, TUNE_NEOVERSEN1, TUNE_NEOVERSEE1, TUNE_TSV110, TUNE_SAPHIRA, TUNE_CORTEXA57CORTEXA53, TUNE_CORTEXA72CORTEXA53, TUNE_CORTEXA73CORTEXA35, TUNE_CORTEXA73CORTEXA53, TUNE_CORTEXA75CORTEXA55, TUNE_CORTEXA76CORTEXA55};
+enum attr_cortex_a53_advsimd_type {CORTEX_A53_ADVSIMD_TYPE_ADVSIMD_ALU, CORTEX_A53_ADVSIMD_TYPE_ADVSIMD_ALU_Q, CORTEX_A53_ADVSIMD_TYPE_ADVSIMD_MUL, CORTEX_A53_ADVSIMD_TYPE_ADVSIMD_MUL_Q, CORTEX_A53_ADVSIMD_TYPE_ADVSIMD_DIV_S, CORTEX_A53_ADVSIMD_TYPE_ADVSIMD_DIV_S_Q, CORTEX_A53_ADVSIMD_TYPE_ADVSIMD_DIV_D, CORTEX_A53_ADVSIMD_TYPE_ADVSIMD_DIV_D_Q, CORTEX_A53_ADVSIMD_TYPE_ADVSIMD_LOAD_64, CORTEX_A53_ADVSIMD_TYPE_ADVSIMD_STORE_64, CORTEX_A53_ADVSIMD_TYPE_ADVSIMD_LOAD_128, CORTEX_A53_ADVSIMD_TYPE_ADVSIMD_STORE_128, CORTEX_A53_ADVSIMD_TYPE_ADVSIMD_LOAD_LOTS, CORTEX_A53_ADVSIMD_TYPE_ADVSIMD_STORE_LOTS, CORTEX_A53_ADVSIMD_TYPE_UNKNOWN};
+enum attr_cortex_a57_neon_type {CORTEX_A57_NEON_TYPE_NEON_ABD, CORTEX_A57_NEON_TYPE_NEON_ABD_Q, CORTEX_A57_NEON_TYPE_NEON_ARITH_ACC, CORTEX_A57_NEON_TYPE_NEON_ARITH_ACC_Q, CORTEX_A57_NEON_TYPE_NEON_ARITH_BASIC, CORTEX_A57_NEON_TYPE_NEON_ARITH_COMPLEX, CORTEX_A57_NEON_TYPE_NEON_REDUC_ADD_ACC, CORTEX_A57_NEON_TYPE_NEON_MULTIPLY, CORTEX_A57_NEON_TYPE_NEON_MULTIPLY_Q, CORTEX_A57_NEON_TYPE_NEON_MULTIPLY_LONG, CORTEX_A57_NEON_TYPE_NEON_MLA, CORTEX_A57_NEON_TYPE_NEON_MLA_Q, CORTEX_A57_NEON_TYPE_NEON_MLA_LONG, CORTEX_A57_NEON_TYPE_NEON_SAT_MLA_LONG, CORTEX_A57_NEON_TYPE_NEON_SHIFT_ACC, CORTEX_A57_NEON_TYPE_NEON_SHIFT_IMM_BASIC, CORTEX_A57_NEON_TYPE_NEON_SHIFT_IMM_COMPLEX, CORTEX_A57_NEON_TYPE_NEON_SHIFT_REG_BASIC, CORTEX_A57_NEON_TYPE_NEON_SHIFT_REG_BASIC_Q, CORTEX_A57_NEON_TYPE_NEON_SHIFT_REG_COMPLEX, CORTEX_A57_NEON_TYPE_NEON_SHIFT_REG_COMPLEX_Q, CORTEX_A57_NEON_TYPE_NEON_FP_NEGABS, CORTEX_A57_NEON_TYPE_NEON_FP_ARITH, CORTEX_A57_NEON_TYPE_NEON_FP_ARITH_Q, CORTEX_A57_NEON_TYPE_NEON_FP_REDUCTIONS_Q, CORTEX_A57_NEON_TYPE_NEON_FP_CVT_INT, CORTEX_A57_NEON_TYPE_NEON_FP_CVT_INT_Q, CORTEX_A57_NEON_TYPE_NEON_FP_CVT16, CORTEX_A57_NEON_TYPE_NEON_FP_MINMAX, CORTEX_A57_NEON_TYPE_NEON_FP_MUL, CORTEX_A57_NEON_TYPE_NEON_FP_MUL_Q, CORTEX_A57_NEON_TYPE_NEON_FP_MLA, CORTEX_A57_NEON_TYPE_NEON_FP_MLA_Q, CORTEX_A57_NEON_TYPE_NEON_FP_RECPE_RSQRTE, CORTEX_A57_NEON_TYPE_NEON_FP_RECPE_RSQRTE_Q, CORTEX_A57_NEON_TYPE_NEON_FP_RECPS_RSQRTS, CORTEX_A57_NEON_TYPE_NEON_FP_RECPS_RSQRTS_Q, CORTEX_A57_NEON_TYPE_NEON_BITOPS, CORTEX_A57_NEON_TYPE_NEON_BITOPS_Q, CORTEX_A57_NEON_TYPE_NEON_FROM_GP, CORTEX_A57_NEON_TYPE_NEON_FROM_GP_Q, CORTEX_A57_NEON_TYPE_NEON_MOVE, CORTEX_A57_NEON_TYPE_NEON_TBL3_TBL4, CORTEX_A57_NEON_TYPE_NEON_ZIP_Q, CORTEX_A57_NEON_TYPE_NEON_TO_GP, CORTEX_A57_NEON_TYPE_NEON_LOAD_A, CORTEX_A57_NEON_TYPE_NEON_LOAD_B, CORTEX_A57_NEON_TYPE_NEON_LOAD_C, CORTEX_A57_NEON_TYPE_NEON_LOAD_D, CORTEX_A57_NEON_TYPE_NEON_LOAD_E, CORTEX_A57_NEON_TYPE_NEON_LOAD_F, CORTEX_A57_NEON_TYPE_NEON_STORE_A, CORTEX_A57_NEON_TYPE_NEON_STORE_B, CORTEX_A57_NEON_TYPE_NEON_STORE_COMPLEX, CORTEX_A57_NEON_TYPE_UNKNOWN};
+enum attr_exynos_m1_neon_type {EXYNOS_M1_NEON_TYPE_NEON_ARITH_SIMPLE, EXYNOS_M1_NEON_TYPE_NEON_ARITH_BASIC, EXYNOS_M1_NEON_TYPE_NEON_ARITH_COMPLEX, EXYNOS_M1_NEON_TYPE_NEON_MULTIPLY, EXYNOS_M1_NEON_TYPE_NEON_MLA, EXYNOS_M1_NEON_TYPE_NEON_MLA_Q, EXYNOS_M1_NEON_TYPE_NEON_MLA_LONG, EXYNOS_M1_NEON_TYPE_NEON_SAT_MLA_LONG, EXYNOS_M1_NEON_TYPE_NEON_SHIFT_ACC, EXYNOS_M1_NEON_TYPE_NEON_SHIFT_IMM_BASIC, EXYNOS_M1_NEON_TYPE_NEON_SHIFT_IMM_COMPLEX, EXYNOS_M1_NEON_TYPE_NEON_SHIFT_REG_BASIC, EXYNOS_M1_NEON_TYPE_NEON_SHIFT_REG_BASIC_Q, EXYNOS_M1_NEON_TYPE_NEON_SHIFT_REG_COMPLEX, EXYNOS_M1_NEON_TYPE_NEON_SHIFT_REG_COMPLEX_Q, EXYNOS_M1_NEON_TYPE_NEON_FP_UNARY, EXYNOS_M1_NEON_TYPE_NEON_FP_ADD, EXYNOS_M1_NEON_TYPE_NEON_FP_ABD, EXYNOS_M1_NEON_TYPE_NEON_FP_COMPARE, EXYNOS_M1_NEON_TYPE_NEON_FP_REDUC_MINMAX, EXYNOS_M1_NEON_TYPE_NEON_FP_REDUC_ADD, EXYNOS_M1_NEON_TYPE_NEON_FP_ROUND, EXYNOS_M1_NEON_TYPE_NEON_FP_CVT, EXYNOS_M1_NEON_TYPE_NEON_FP_MINMAX, EXYNOS_M1_NEON_TYPE_NEON_FP_MUL, EXYNOS_M1_NEON_TYPE_NEON_FP_MUL_Q, EXYNOS_M1_NEON_TYPE_NEON_FP_MLA, EXYNOS_M1_NEON_TYPE_NEON_FP_MLA_Q, EXYNOS_M1_NEON_TYPE_NEON_FP_ESTIMATE, EXYNOS_M1_NEON_TYPE_NEON_FP_ESTIMATEX, EXYNOS_M1_NEON_TYPE_NEON_FP_STEP, EXYNOS_M1_NEON_TYPE_NEON_BITOPS, EXYNOS_M1_NEON_TYPE_NEON_BITOPS_Q, EXYNOS_M1_NEON_TYPE_NEON_BITINS, EXYNOS_M1_NEON_TYPE_NEON_TO_GP, EXYNOS_M1_NEON_TYPE_NEON_FROM_GP, EXYNOS_M1_NEON_TYPE_NEON_MOVE, EXYNOS_M1_NEON_TYPE_NEON_TBL, EXYNOS_M1_NEON_TYPE_NEON_LOAD1_1, EXYNOS_M1_NEON_TYPE_NEON_LOAD1_2, EXYNOS_M1_NEON_TYPE_NEON_LOAD1_3, EXYNOS_M1_NEON_TYPE_NEON_LOAD1_4, EXYNOS_M1_NEON_TYPE_NEON_LOAD1_ONE, EXYNOS_M1_NEON_TYPE_NEON_LOAD1_ALL, EXYNOS_M1_NEON_TYPE_NEON_LOAD2_2, EXYNOS_M1_NEON_TYPE_NEON_LOAD2_ONE, EXYNOS_M1_NEON_TYPE_NEON_LOAD2_ALL, EXYNOS_M1_NEON_TYPE_NEON_LOAD3_3, EXYNOS_M1_NEON_TYPE_NEON_LOAD3_ONE, EXYNOS_M1_NEON_TYPE_NEON_LOAD3_ALL, EXYNOS_M1_NEON_TYPE_NEON_LOAD4_4, EXYNOS_M1_NEON_TYPE_NEON_LOAD4_ONE, EXYNOS_M1_NEON_TYPE_NEON_LOAD4_ALL, EXYNOS_M1_NEON_TYPE_NEON_STORE, EXYNOS_M1_NEON_TYPE_NEON_STORE1_1, EXYNOS_M1_NEON_TYPE_NEON_STORE1_2, EXYNOS_M1_NEON_TYPE_NEON_STORE1_3, EXYNOS_M1_NEON_TYPE_NEON_STORE1_4, EXYNOS_M1_NEON_TYPE_NEON_STORE1_ONE, EXYNOS_M1_NEON_TYPE_NEON_STORE2_2, EXYNOS_M1_NEON_TYPE_NEON_STORE2_ONE, EXYNOS_M1_NEON_TYPE_NEON_STORE3_3, EXYNOS_M1_NEON_TYPE_NEON_STORE3_ONE, EXYNOS_M1_NEON_TYPE_NEON_STORE4_4, EXYNOS_M1_NEON_TYPE_NEON_STORE4_ONE, EXYNOS_M1_NEON_TYPE_UNKNOWN};
+enum attr_tsv110_neon_type {TSV110_NEON_TYPE_NEON_ARITH_ACC, TSV110_NEON_TYPE_NEON_ARITH_ACC_Q, TSV110_NEON_TYPE_NEON_ARITH_BASIC, TSV110_NEON_TYPE_NEON_ARITH_COMPLEX, TSV110_NEON_TYPE_NEON_REDUC_ADD_ACC, TSV110_NEON_TYPE_NEON_MULTIPLY, TSV110_NEON_TYPE_NEON_MULTIPLY_Q, TSV110_NEON_TYPE_NEON_MULTIPLY_LONG, TSV110_NEON_TYPE_NEON_MLA, TSV110_NEON_TYPE_NEON_MLA_Q, TSV110_NEON_TYPE_NEON_MLA_LONG, TSV110_NEON_TYPE_NEON_SAT_MLA_LONG, TSV110_NEON_TYPE_NEON_SHIFT_ACC, TSV110_NEON_TYPE_NEON_SHIFT_IMM_BASIC, TSV110_NEON_TYPE_NEON_SHIFT_IMM_COMPLEX, TSV110_NEON_TYPE_NEON_SHIFT_REG_BASIC, TSV110_NEON_TYPE_NEON_SHIFT_REG_BASIC_Q, TSV110_NEON_TYPE_NEON_SHIFT_REG_COMPLEX, TSV110_NEON_TYPE_NEON_SHIFT_REG_COMPLEX_Q, TSV110_NEON_TYPE_NEON_FP_NEGABS, TSV110_NEON_TYPE_NEON_FP_ARITH, TSV110_NEON_TYPE_NEON_FP_ARITH_Q, TSV110_NEON_TYPE_NEON_FP_REDUCTIONS_Q, TSV110_NEON_TYPE_NEON_FP_CVT_INT, TSV110_NEON_TYPE_NEON_FP_CVT_INT_Q, TSV110_NEON_TYPE_NEON_FP_CVT16, TSV110_NEON_TYPE_NEON_FP_MINMAX, TSV110_NEON_TYPE_NEON_FP_MUL, TSV110_NEON_TYPE_NEON_FP_MUL_Q, TSV110_NEON_TYPE_NEON_FP_MLA, TSV110_NEON_TYPE_NEON_FP_MLA_Q, TSV110_NEON_TYPE_NEON_FP_RECPE_RSQRTE, TSV110_NEON_TYPE_NEON_FP_RECPE_RSQRTE_Q, TSV110_NEON_TYPE_NEON_FP_RECPS_RSQRTS, TSV110_NEON_TYPE_NEON_FP_RECPS_RSQRTS_Q, TSV110_NEON_TYPE_NEON_BITOPS, TSV110_NEON_TYPE_NEON_BITOPS_Q, TSV110_NEON_TYPE_NEON_FROM_GP, TSV110_NEON_TYPE_NEON_FROM_GP_Q, TSV110_NEON_TYPE_NEON_MOVE, TSV110_NEON_TYPE_NEON_TBL3_TBL4, TSV110_NEON_TYPE_NEON_ZIP_Q, TSV110_NEON_TYPE_NEON_TO_GP, TSV110_NEON_TYPE_NEON_LOAD_A, TSV110_NEON_TYPE_NEON_LOAD_B, TSV110_NEON_TYPE_NEON_LOAD_C, TSV110_NEON_TYPE_NEON_LOAD_D, TSV110_NEON_TYPE_NEON_LOAD_E, TSV110_NEON_TYPE_NEON_LOAD_F, TSV110_NEON_TYPE_NEON_STORE_A, TSV110_NEON_TYPE_NEON_STORE_B, TSV110_NEON_TYPE_NEON_STORE_COMPLEX, TSV110_NEON_TYPE_UNKNOWN};
+#define INSN_SCHEDULING
+#define DELAY_SLOTS 0
+
+#endif /* GCC_INSN_ATTR_COMMON_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-attr.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-attr.h
new file mode 100644
index 0000000..1d327b0
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-attr.h
@@ -0,0 +1,238 @@
+/* Generated automatically by the program `genattr'
+   from the machine description file `md'.  */
+
+#ifndef GCC_INSN_ATTR_H
+#define GCC_INSN_ATTR_H
+
+#include "insn-attr-common.h"
+
+#define HAVE_ATTR_type 1
+extern enum attr_type get_attr_type (rtx_insn *);
+
+#define HAVE_ATTR_mul32 1
+extern enum attr_mul32 get_attr_mul32 (rtx_insn *);
+
+#define HAVE_ATTR_widen_mul64 1
+extern enum attr_widen_mul64 get_attr_widen_mul64 (rtx_insn *);
+
+#define HAVE_ATTR_is_neon_type 1
+extern enum attr_is_neon_type get_attr_is_neon_type (rtx_insn *);
+
+#define HAVE_ATTR_arch 1
+extern enum arches get_attr_arch (rtx_insn *);
+
+#define HAVE_ATTR_fp 1
+extern enum attr_fp get_attr_fp (rtx_insn *);
+
+#define HAVE_ATTR_arch_enabled 1
+extern enum attr_arch_enabled get_attr_arch_enabled (rtx_insn *);
+
+#define HAVE_ATTR_enabled 1
+extern enum attr_enabled get_attr_enabled (rtx_insn *);
+
+#define HAVE_ATTR_far_branch 1
+extern int get_attr_far_branch (rtx_insn *);
+#define HAVE_ATTR_movprfx 1
+extern enum attr_movprfx get_attr_movprfx (rtx_insn *);
+
+#define HAVE_ATTR_length 1
+extern int get_attr_length (rtx_insn *);
+extern void shorten_branches (rtx_insn *);
+extern int insn_default_length (rtx_insn *);
+extern int insn_min_length (rtx_insn *);
+extern int insn_variable_length_p (rtx_insn *);
+extern int insn_current_length (rtx_insn *);
+
+#include "insn-addr.h"
+
+#define HAVE_ATTR_predicated 1
+extern enum attr_predicated get_attr_predicated (rtx_insn *);
+
+#define HAVE_ATTR_speculation_barrier 1
+extern enum attr_speculation_barrier get_attr_speculation_barrier (rtx_insn *);
+
+#define HAVE_ATTR_tune 1
+extern enum attr_tune get_attr_tune (void);
+
+#define HAVE_ATTR_cortex_a53_advsimd_type 1
+extern enum attr_cortex_a53_advsimd_type get_attr_cortex_a53_advsimd_type (rtx_insn *);
+
+#define HAVE_ATTR_cortex_a57_neon_type 1
+extern enum attr_cortex_a57_neon_type get_attr_cortex_a57_neon_type (rtx_insn *);
+
+#define HAVE_ATTR_exynos_m1_neon_type 1
+extern enum attr_exynos_m1_neon_type get_attr_exynos_m1_neon_type (rtx_insn *);
+
+#define HAVE_ATTR_tsv110_neon_type 1
+extern enum attr_tsv110_neon_type get_attr_tsv110_neon_type (rtx_insn *);
+
+extern int num_delay_slots (rtx_insn *);
+extern int eligible_for_delay (rtx_insn *, int, rtx_insn *, int);
+
+extern int const_num_delay_slots (rtx_insn *);
+
+#define ANNUL_IFTRUE_SLOTS 0
+extern int eligible_for_annul_true (rtx_insn *, int, rtx_insn *, int);
+#define ANNUL_IFFALSE_SLOTS 0
+extern int eligible_for_annul_false (rtx_insn *, int, rtx_insn *, int);
+
+/* DFA based pipeline interface.  */
+#ifndef AUTOMATON_ALTS
+#define AUTOMATON_ALTS 0
+#endif
+
+
+#ifndef AUTOMATON_STATE_ALTS
+#define AUTOMATON_STATE_ALTS 0
+#endif
+
+#ifndef CPU_UNITS_QUERY
+#define CPU_UNITS_QUERY 0
+#endif
+
+/* Initialize fn pointers for internal_dfa_insn_code
+   and insn_default_latency.  */
+extern void init_sched_attrs (void);
+
+/* Internal insn code number used by automata.  */
+extern int (*internal_dfa_insn_code) (rtx_insn *);
+
+/* Insn latency time defined in define_insn_reservation. */
+extern int (*insn_default_latency) (rtx_insn *);
+
+/* Return nonzero if there is a bypass for given insn
+   which is a data producer.  */
+extern int bypass_p (rtx_insn *);
+
+/* Insn latency time on data consumed by the 2nd insn.
+   Use the function if bypass_p returns nonzero for
+   the 1st insn. */
+extern int insn_latency (rtx_insn *, rtx_insn *);
+
+/* Maximal insn latency time possible of all bypasses for this insn.
+   Use the function if bypass_p returns nonzero for
+   the 1st insn. */
+extern int maximal_insn_latency (rtx_insn *);
+
+
+#if AUTOMATON_ALTS
+/* The following function returns number of alternative
+   reservations of given insn.  It may be used for better
+   insns scheduling heuristics. */
+extern int insn_alts (rtx);
+
+#endif
+
+/* Maximal possible number of insns waiting results being
+   produced by insns whose execution is not finished. */
+extern const int max_insn_queue_index;
+
+/* Pointer to data describing current state of DFA.  */
+typedef void *state_t;
+
+/* Size of the data in bytes.  */
+extern int state_size (void);
+
+/* Initiate given DFA state, i.e. Set up the state
+   as all functional units were not reserved.  */
+extern void state_reset (state_t);
+/* The following function returns negative value if given
+   insn can be issued in processor state described by given
+   DFA state.  In this case, the DFA state is changed to
+   reflect the current and future reservations by given
+   insn.  Otherwise the function returns minimal time
+   delay to issue the insn.  This delay may be zero
+   for superscalar or VLIW processors.  If the second
+   parameter is NULL the function changes given DFA state
+   as new processor cycle started.  */
+extern int state_transition (state_t, rtx);
+
+#if AUTOMATON_STATE_ALTS
+/* The following function returns number of possible
+   alternative reservations of given insn in given
+   DFA state.  It may be used for better insns scheduling
+   heuristics.  By default the function is defined if
+   macro AUTOMATON_STATE_ALTS is defined because its
+   implementation may require much memory.  */
+extern int state_alts (state_t, rtx);
+#endif
+
+extern int min_issue_delay (state_t, rtx_insn *);
+/* The following function returns nonzero if no one insn
+   can be issued in current DFA state. */
+extern int state_dead_lock_p (state_t);
+/* The function returns minimal delay of issue of the 2nd
+   insn after issuing the 1st insn in given DFA state.
+   The 1st insn should be issued in given state (i.e.
+    state_transition should return negative value for
+    the insn and the state).  Data dependencies between
+    the insns are ignored by the function.  */
+extern int min_insn_conflict_delay (state_t, rtx_insn *, rtx_insn *);
+/* The following function outputs reservations for given
+   insn as they are described in the corresponding
+   define_insn_reservation.  */
+extern void print_reservation (FILE *, rtx_insn *);
+
+#if CPU_UNITS_QUERY
+/* The following function returns code of functional unit
+   with given name (see define_cpu_unit). */
+extern int get_cpu_unit_code (const char *);
+/* The following function returns nonzero if functional
+   unit with given code is currently reserved in given
+   DFA state.  */
+extern int cpu_unit_reservation_p (state_t, int);
+#endif
+
+/* The following function returns true if insn
+   has a dfa reservation.  */
+extern bool insn_has_dfa_reservation_p (rtx_insn *);
+
+/* Clean insn code cache.  It should be called if there
+   is a chance that condition value in a
+   define_insn_reservation will be changed after
+   last call of dfa_start.  */
+extern void dfa_clean_insn_cache (void);
+
+extern void dfa_clear_single_insn_cache (rtx_insn *);
+
+/* Initiate and finish work with DFA.  They should be
+   called as the first and the last interface
+   functions.  */
+extern void dfa_start (void);
+extern void dfa_finish (void);
+#ifndef HAVE_ATTR_length
+#define HAVE_ATTR_length 0
+#endif
+#ifndef HAVE_ATTR_enabled
+#define HAVE_ATTR_enabled 0
+#endif
+#ifndef HAVE_ATTR_preferred_for_size
+#define HAVE_ATTR_preferred_for_size 0
+#endif
+#ifndef HAVE_ATTR_preferred_for_speed
+#define HAVE_ATTR_preferred_for_speed 0
+#endif
+#if !HAVE_ATTR_length
+extern int hook_int_rtx_insn_unreachable (rtx_insn *);
+#define insn_default_length hook_int_rtx_insn_unreachable
+#define insn_min_length hook_int_rtx_insn_unreachable
+#define insn_variable_length_p hook_int_rtx_insn_unreachable
+#define insn_current_length hook_int_rtx_insn_unreachable
+#include "insn-addr.h"
+#endif
+extern int hook_int_rtx_1 (rtx);
+#if !HAVE_ATTR_enabled
+#define get_attr_enabled hook_int_rtx_1
+#endif
+#if !HAVE_ATTR_preferred_for_size
+#define get_attr_preferred_for_size hook_int_rtx_1
+#endif
+#if !HAVE_ATTR_preferred_for_speed
+#define get_attr_preferred_for_speed hook_int_rtx_1
+#endif
+
+
+#define ATTR_FLAG_forward	0x1
+#define ATTR_FLAG_backward	0x2
+
+#endif /* GCC_INSN_ATTR_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-codes.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-codes.h
new file mode 100644
index 0000000..9d603f2
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-codes.h
@@ -0,0 +1,4711 @@
+/* Generated automatically by the program `gencodes'
+   from the machine description file `md'.  */
+
+#ifndef GCC_INSN_CODES_H
+#define GCC_INSN_CODES_H
+
+enum insn_code {
+  CODE_FOR_nothing = 0,
+  CODE_FOR_indirect_jump = 1,
+  CODE_FOR_jump = 2,
+  CODE_FOR_ccmpsi = 3,
+  CODE_FOR_ccmpdi = 4,
+  CODE_FOR_fccmpsf = 5,
+  CODE_FOR_fccmpdf = 6,
+  CODE_FOR_fccmpesf = 7,
+  CODE_FOR_fccmpedf = 8,
+  CODE_FOR_condjump = 9,
+  CODE_FOR_nop = 19,
+  CODE_FOR_prefetch = 20,
+  CODE_FOR_trap = 21,
+  CODE_FOR_simple_return = 23,
+  CODE_FOR_insv_immsi = 48,
+  CODE_FOR_insv_immdi = 49,
+  CODE_FOR_load_pair_sw_sisi = 55,
+  CODE_FOR_load_pair_sw_sfsi = 56,
+  CODE_FOR_load_pair_sw_sisf = 57,
+  CODE_FOR_load_pair_sw_sfsf = 58,
+  CODE_FOR_load_pair_dw_didi = 59,
+  CODE_FOR_load_pair_dw_didf = 60,
+  CODE_FOR_load_pair_dw_dfdi = 61,
+  CODE_FOR_load_pair_dw_dfdf = 62,
+  CODE_FOR_load_pair_dw_tftf = 63,
+  CODE_FOR_store_pair_sw_sisi = 64,
+  CODE_FOR_store_pair_sw_sfsi = 65,
+  CODE_FOR_store_pair_sw_sisf = 66,
+  CODE_FOR_store_pair_sw_sfsf = 67,
+  CODE_FOR_store_pair_dw_didi = 68,
+  CODE_FOR_store_pair_dw_didf = 69,
+  CODE_FOR_store_pair_dw_dfdi = 70,
+  CODE_FOR_store_pair_dw_dfdf = 71,
+  CODE_FOR_store_pair_dw_tftf = 72,
+  CODE_FOR_loadwb_pairsi_si = 73,
+  CODE_FOR_loadwb_pairsi_di = 74,
+  CODE_FOR_loadwb_pairdi_si = 75,
+  CODE_FOR_loadwb_pairdi_di = 76,
+  CODE_FOR_loadwb_pairsf_si = 77,
+  CODE_FOR_loadwb_pairsf_di = 78,
+  CODE_FOR_loadwb_pairdf_si = 79,
+  CODE_FOR_loadwb_pairdf_di = 80,
+  CODE_FOR_loadwb_pairti_si = 81,
+  CODE_FOR_loadwb_pairti_di = 82,
+  CODE_FOR_loadwb_pairtf_si = 83,
+  CODE_FOR_loadwb_pairtf_di = 84,
+  CODE_FOR_storewb_pairsi_si = 85,
+  CODE_FOR_storewb_pairsi_di = 86,
+  CODE_FOR_storewb_pairdi_si = 87,
+  CODE_FOR_storewb_pairdi_di = 88,
+  CODE_FOR_storewb_pairsf_si = 89,
+  CODE_FOR_storewb_pairsf_di = 90,
+  CODE_FOR_storewb_pairdf_si = 91,
+  CODE_FOR_storewb_pairdf_di = 92,
+  CODE_FOR_storewb_pairti_si = 93,
+  CODE_FOR_storewb_pairti_di = 94,
+  CODE_FOR_storewb_pairtf_si = 95,
+  CODE_FOR_storewb_pairtf_di = 96,
+  CODE_FOR_addsi3_compare0 = 116,
+  CODE_FOR_adddi3_compare0 = 117,
+  CODE_FOR_addsi3_compareC = 121,
+  CODE_FOR_adddi3_compareC = 122,
+  CODE_FOR_addsi3_compareV_imm = 127,
+  CODE_FOR_adddi3_compareV_imm = 128,
+  CODE_FOR_addsi3_compareV = 129,
+  CODE_FOR_adddi3_compareV = 130,
+  CODE_FOR_aarch64_subsi_compare0 = 205,
+  CODE_FOR_aarch64_subdi_compare0 = 206,
+  CODE_FOR_subsi3 = 295,
+  CODE_FOR_subdi3 = 297,
+  CODE_FOR_subvsi_insn = 298,
+  CODE_FOR_subvdi_insn = 299,
+  CODE_FOR_subvsi_imm = 300,
+  CODE_FOR_subvdi_imm = 301,
+  CODE_FOR_negvsi_insn = 302,
+  CODE_FOR_negvdi_insn = 303,
+  CODE_FOR_negvsi_cmp_only = 304,
+  CODE_FOR_negvdi_cmp_only = 305,
+  CODE_FOR_negdi_carryout = 308,
+  CODE_FOR_negvdi_carryinV = 309,
+  CODE_FOR_subsi3_compare1_imm = 313,
+  CODE_FOR_subdi3_compare1_imm = 314,
+  CODE_FOR_subsi3_compare1 = 315,
+  CODE_FOR_subdi3_compare1 = 316,
+  CODE_FOR_negsi2 = 392,
+  CODE_FOR_negdi2 = 393,
+  CODE_FOR_negsi2_compare0 = 398,
+  CODE_FOR_negdi2_compare0 = 399,
+  CODE_FOR_mulsi3 = 419,
+  CODE_FOR_muldi3 = 420,
+  CODE_FOR_maddsi = 422,
+  CODE_FOR_madddi = 423,
+  CODE_FOR_mulsidi3 = 431,
+  CODE_FOR_umulsidi3 = 432,
+  CODE_FOR_maddsidi4 = 433,
+  CODE_FOR_umaddsidi4 = 434,
+  CODE_FOR_msubsidi4 = 435,
+  CODE_FOR_umsubsidi4 = 436,
+  CODE_FOR_smuldi3_highpart = 439,
+  CODE_FOR_umuldi3_highpart = 440,
+  CODE_FOR_divsi3 = 441,
+  CODE_FOR_udivsi3 = 442,
+  CODE_FOR_divdi3 = 443,
+  CODE_FOR_udivdi3 = 444,
+  CODE_FOR_cmpsi = 447,
+  CODE_FOR_cmpdi = 448,
+  CODE_FOR_fcmpsf = 449,
+  CODE_FOR_fcmpdf = 450,
+  CODE_FOR_fcmpesf = 451,
+  CODE_FOR_fcmpedf = 452,
+  CODE_FOR_aarch64_cstoreqi = 483,
+  CODE_FOR_aarch64_cstorehi = 484,
+  CODE_FOR_aarch64_cstoresi = 485,
+  CODE_FOR_aarch64_cstoredi = 486,
+  CODE_FOR_cstoreqi_neg = 492,
+  CODE_FOR_cstorehi_neg = 493,
+  CODE_FOR_cstoresi_neg = 494,
+  CODE_FOR_cstoredi_neg = 495,
+  CODE_FOR_aarch64_crc32b = 505,
+  CODE_FOR_aarch64_crc32h = 506,
+  CODE_FOR_aarch64_crc32w = 507,
+  CODE_FOR_aarch64_crc32x = 508,
+  CODE_FOR_aarch64_crc32cb = 509,
+  CODE_FOR_aarch64_crc32ch = 510,
+  CODE_FOR_aarch64_crc32cw = 511,
+  CODE_FOR_aarch64_crc32cx = 512,
+  CODE_FOR_csinc3si_insn = 515,
+  CODE_FOR_csinc3di_insn = 516,
+  CODE_FOR_csneg3_uxtw_insn = 519,
+  CODE_FOR_csneg3si_insn = 520,
+  CODE_FOR_csneg3di_insn = 521,
+  CODE_FOR_aarch64_uqdecsi = 522,
+  CODE_FOR_aarch64_uqdecdi = 523,
+  CODE_FOR_andsi3 = 526,
+  CODE_FOR_iorsi3 = 527,
+  CODE_FOR_xorsi3 = 528,
+  CODE_FOR_anddi3 = 529,
+  CODE_FOR_iordi3 = 530,
+  CODE_FOR_xordi3 = 531,
+  CODE_FOR_one_cmplsi2 = 595,
+  CODE_FOR_one_cmpldi2 = 596,
+  CODE_FOR_and_one_cmpl_ashlsi3 = 619,
+  CODE_FOR_ior_one_cmpl_ashlsi3 = 620,
+  CODE_FOR_xor_one_cmpl_ashlsi3 = 621,
+  CODE_FOR_and_one_cmpl_ashrsi3 = 622,
+  CODE_FOR_ior_one_cmpl_ashrsi3 = 623,
+  CODE_FOR_xor_one_cmpl_ashrsi3 = 624,
+  CODE_FOR_and_one_cmpl_lshrsi3 = 625,
+  CODE_FOR_ior_one_cmpl_lshrsi3 = 626,
+  CODE_FOR_xor_one_cmpl_lshrsi3 = 627,
+  CODE_FOR_and_one_cmpl_rotrsi3 = 628,
+  CODE_FOR_ior_one_cmpl_rotrsi3 = 629,
+  CODE_FOR_xor_one_cmpl_rotrsi3 = 630,
+  CODE_FOR_and_one_cmpl_ashldi3 = 631,
+  CODE_FOR_ior_one_cmpl_ashldi3 = 632,
+  CODE_FOR_xor_one_cmpl_ashldi3 = 633,
+  CODE_FOR_and_one_cmpl_ashrdi3 = 634,
+  CODE_FOR_ior_one_cmpl_ashrdi3 = 635,
+  CODE_FOR_xor_one_cmpl_ashrdi3 = 636,
+  CODE_FOR_and_one_cmpl_lshrdi3 = 637,
+  CODE_FOR_ior_one_cmpl_lshrdi3 = 638,
+  CODE_FOR_xor_one_cmpl_lshrdi3 = 639,
+  CODE_FOR_and_one_cmpl_rotrdi3 = 640,
+  CODE_FOR_ior_one_cmpl_rotrdi3 = 641,
+  CODE_FOR_xor_one_cmpl_rotrdi3 = 642,
+  CODE_FOR_clzsi2 = 675,
+  CODE_FOR_clzdi2 = 676,
+  CODE_FOR_clrsbsi2 = 677,
+  CODE_FOR_clrsbdi2 = 678,
+  CODE_FOR_rbitsi2 = 679,
+  CODE_FOR_rbitdi2 = 680,
+  CODE_FOR_ctzsi2 = 681,
+  CODE_FOR_ctzdi2 = 682,
+  CODE_FOR_bswapsi2 = 819,
+  CODE_FOR_bswapdi2 = 820,
+  CODE_FOR_bswaphi2 = 821,
+  CODE_FOR_rev16si2 = 825,
+  CODE_FOR_rev16di2 = 826,
+  CODE_FOR_rev16si2_alt = 827,
+  CODE_FOR_rev16di2_alt = 828,
+  CODE_FOR_btrunchf2 = 830,
+  CODE_FOR_ceilhf2 = 831,
+  CODE_FOR_floorhf2 = 832,
+  CODE_FOR_frintnhf2 = 833,
+  CODE_FOR_nearbyinthf2 = 834,
+  CODE_FOR_rinthf2 = 835,
+  CODE_FOR_roundhf2 = 836,
+  CODE_FOR_btruncsf2 = 837,
+  CODE_FOR_ceilsf2 = 838,
+  CODE_FOR_floorsf2 = 839,
+  CODE_FOR_frintnsf2 = 840,
+  CODE_FOR_nearbyintsf2 = 841,
+  CODE_FOR_rintsf2 = 842,
+  CODE_FOR_roundsf2 = 843,
+  CODE_FOR_btruncdf2 = 844,
+  CODE_FOR_ceildf2 = 845,
+  CODE_FOR_floordf2 = 846,
+  CODE_FOR_frintndf2 = 847,
+  CODE_FOR_nearbyintdf2 = 848,
+  CODE_FOR_rintdf2 = 849,
+  CODE_FOR_rounddf2 = 850,
+  CODE_FOR_lbtrunchfsi2 = 851,
+  CODE_FOR_lceilhfsi2 = 852,
+  CODE_FOR_lfloorhfsi2 = 853,
+  CODE_FOR_lroundhfsi2 = 854,
+  CODE_FOR_lfrintnhfsi2 = 855,
+  CODE_FOR_lbtruncuhfsi2 = 856,
+  CODE_FOR_lceiluhfsi2 = 857,
+  CODE_FOR_lflooruhfsi2 = 858,
+  CODE_FOR_lrounduhfsi2 = 859,
+  CODE_FOR_lfrintnuhfsi2 = 860,
+  CODE_FOR_lbtrunchfdi2 = 861,
+  CODE_FOR_lceilhfdi2 = 862,
+  CODE_FOR_lfloorhfdi2 = 863,
+  CODE_FOR_lroundhfdi2 = 864,
+  CODE_FOR_lfrintnhfdi2 = 865,
+  CODE_FOR_lbtruncuhfdi2 = 866,
+  CODE_FOR_lceiluhfdi2 = 867,
+  CODE_FOR_lflooruhfdi2 = 868,
+  CODE_FOR_lrounduhfdi2 = 869,
+  CODE_FOR_lfrintnuhfdi2 = 870,
+  CODE_FOR_lbtruncsfsi2 = 871,
+  CODE_FOR_lceilsfsi2 = 872,
+  CODE_FOR_lfloorsfsi2 = 873,
+  CODE_FOR_lroundsfsi2 = 874,
+  CODE_FOR_lfrintnsfsi2 = 875,
+  CODE_FOR_lbtruncusfsi2 = 876,
+  CODE_FOR_lceilusfsi2 = 877,
+  CODE_FOR_lfloorusfsi2 = 878,
+  CODE_FOR_lroundusfsi2 = 879,
+  CODE_FOR_lfrintnusfsi2 = 880,
+  CODE_FOR_lbtruncsfdi2 = 881,
+  CODE_FOR_lceilsfdi2 = 882,
+  CODE_FOR_lfloorsfdi2 = 883,
+  CODE_FOR_lroundsfdi2 = 884,
+  CODE_FOR_lfrintnsfdi2 = 885,
+  CODE_FOR_lbtruncusfdi2 = 886,
+  CODE_FOR_lceilusfdi2 = 887,
+  CODE_FOR_lfloorusfdi2 = 888,
+  CODE_FOR_lroundusfdi2 = 889,
+  CODE_FOR_lfrintnusfdi2 = 890,
+  CODE_FOR_lbtruncdfsi2 = 891,
+  CODE_FOR_lceildfsi2 = 892,
+  CODE_FOR_lfloordfsi2 = 893,
+  CODE_FOR_lrounddfsi2 = 894,
+  CODE_FOR_lfrintndfsi2 = 895,
+  CODE_FOR_lbtruncudfsi2 = 896,
+  CODE_FOR_lceiludfsi2 = 897,
+  CODE_FOR_lfloorudfsi2 = 898,
+  CODE_FOR_lroundudfsi2 = 899,
+  CODE_FOR_lfrintnudfsi2 = 900,
+  CODE_FOR_lbtruncdfdi2 = 901,
+  CODE_FOR_lceildfdi2 = 902,
+  CODE_FOR_lfloordfdi2 = 903,
+  CODE_FOR_lrounddfdi2 = 904,
+  CODE_FOR_lfrintndfdi2 = 905,
+  CODE_FOR_lbtruncudfdi2 = 906,
+  CODE_FOR_lceiludfdi2 = 907,
+  CODE_FOR_lfloorudfdi2 = 908,
+  CODE_FOR_lroundudfdi2 = 909,
+  CODE_FOR_lfrintnudfdi2 = 910,
+  CODE_FOR_extendsfdf2 = 931,
+  CODE_FOR_extendhfsf2 = 932,
+  CODE_FOR_extendhfdf2 = 933,
+  CODE_FOR_truncdfsf2 = 934,
+  CODE_FOR_truncsfhf2 = 935,
+  CODE_FOR_truncdfhf2 = 936,
+  CODE_FOR_fix_truncsfsi2 = 937,
+  CODE_FOR_fixuns_truncsfsi2 = 938,
+  CODE_FOR_fix_truncdfdi2 = 939,
+  CODE_FOR_fixuns_truncdfdi2 = 940,
+  CODE_FOR_fix_trunchfsi2 = 941,
+  CODE_FOR_fixuns_trunchfsi2 = 942,
+  CODE_FOR_fix_trunchfdi2 = 943,
+  CODE_FOR_fixuns_trunchfdi2 = 944,
+  CODE_FOR_fix_truncdfsi2 = 945,
+  CODE_FOR_fixuns_truncdfsi2 = 946,
+  CODE_FOR_fix_truncsfdi2 = 947,
+  CODE_FOR_fixuns_truncsfdi2 = 948,
+  CODE_FOR_floatsisf2 = 951,
+  CODE_FOR_floatunssisf2 = 952,
+  CODE_FOR_floatdidf2 = 953,
+  CODE_FOR_floatunsdidf2 = 954,
+  CODE_FOR_floatdisf2 = 955,
+  CODE_FOR_floatunsdisf2 = 956,
+  CODE_FOR_floatsidf2 = 957,
+  CODE_FOR_floatunssidf2 = 958,
+  CODE_FOR_aarch64_fp16_floatsihf2 = 959,
+  CODE_FOR_aarch64_fp16_floatunssihf2 = 960,
+  CODE_FOR_aarch64_fp16_floatdihf2 = 961,
+  CODE_FOR_aarch64_fp16_floatunsdihf2 = 962,
+  CODE_FOR_fcvtzssf3 = 963,
+  CODE_FOR_fcvtzusf3 = 964,
+  CODE_FOR_fcvtzsdf3 = 965,
+  CODE_FOR_fcvtzudf3 = 966,
+  CODE_FOR_scvtfsi3 = 967,
+  CODE_FOR_ucvtfsi3 = 968,
+  CODE_FOR_scvtfdi3 = 969,
+  CODE_FOR_ucvtfdi3 = 970,
+  CODE_FOR_fcvtzshfsi3 = 971,
+  CODE_FOR_fcvtzuhfsi3 = 972,
+  CODE_FOR_fcvtzshfdi3 = 973,
+  CODE_FOR_fcvtzuhfdi3 = 974,
+  CODE_FOR_scvtfsihf3 = 975,
+  CODE_FOR_ucvtfsihf3 = 976,
+  CODE_FOR_scvtfdihf3 = 977,
+  CODE_FOR_ucvtfdihf3 = 978,
+  CODE_FOR_fcvtzshf3 = 979,
+  CODE_FOR_fcvtzuhf3 = 980,
+  CODE_FOR_scvtfhi3 = 981,
+  CODE_FOR_ucvtfhi3 = 982,
+  CODE_FOR_addhf3 = 983,
+  CODE_FOR_addsf3 = 984,
+  CODE_FOR_adddf3 = 985,
+  CODE_FOR_subhf3 = 986,
+  CODE_FOR_subsf3 = 987,
+  CODE_FOR_subdf3 = 988,
+  CODE_FOR_mulhf3 = 989,
+  CODE_FOR_mulsf3 = 990,
+  CODE_FOR_muldf3 = 991,
+  CODE_FOR_neghf2 = 999,
+  CODE_FOR_negsf2 = 1000,
+  CODE_FOR_negdf2 = 1001,
+  CODE_FOR_abshf2 = 1005,
+  CODE_FOR_abssf2 = 1006,
+  CODE_FOR_absdf2 = 1007,
+  CODE_FOR_smaxsf3 = 1008,
+  CODE_FOR_smaxdf3 = 1009,
+  CODE_FOR_sminsf3 = 1010,
+  CODE_FOR_smindf3 = 1011,
+  CODE_FOR_smax_nanhf3 = 1012,
+  CODE_FOR_smin_nanhf3 = 1013,
+  CODE_FOR_fmaxhf3 = 1014,
+  CODE_FOR_fminhf3 = 1015,
+  CODE_FOR_smax_nansf3 = 1016,
+  CODE_FOR_smin_nansf3 = 1017,
+  CODE_FOR_fmaxsf3 = 1018,
+  CODE_FOR_fminsf3 = 1019,
+  CODE_FOR_smax_nandf3 = 1020,
+  CODE_FOR_smin_nandf3 = 1021,
+  CODE_FOR_fmaxdf3 = 1022,
+  CODE_FOR_fmindf3 = 1023,
+  CODE_FOR_copysignsf3_insn = 1024,
+  CODE_FOR_copysigndf3_insn = 1025,
+  CODE_FOR_aarch64_movdi_tilow = 1026,
+  CODE_FOR_aarch64_movdi_tflow = 1027,
+  CODE_FOR_aarch64_movdi_tihigh = 1028,
+  CODE_FOR_aarch64_movdi_tfhigh = 1029,
+  CODE_FOR_aarch64_movtihigh_di = 1030,
+  CODE_FOR_aarch64_movtfhigh_di = 1031,
+  CODE_FOR_aarch64_movtilow_di = 1032,
+  CODE_FOR_aarch64_movtflow_di = 1033,
+  CODE_FOR_aarch64_movtilow_tilow = 1034,
+  CODE_FOR_add_losym_si = 1035,
+  CODE_FOR_add_losym_di = 1036,
+  CODE_FOR_ldr_got_small_si = 1037,
+  CODE_FOR_ldr_got_small_di = 1038,
+  CODE_FOR_ldr_got_small_sidi = 1039,
+  CODE_FOR_ldr_got_small_28k_si = 1040,
+  CODE_FOR_ldr_got_small_28k_di = 1041,
+  CODE_FOR_ldr_got_small_28k_sidi = 1042,
+  CODE_FOR_ldr_got_tiny = 1043,
+  CODE_FOR_aarch64_load_tp_hard = 1044,
+  CODE_FOR_tlsie_small_si = 1047,
+  CODE_FOR_tlsie_small_di = 1048,
+  CODE_FOR_tlsie_small_sidi = 1049,
+  CODE_FOR_tlsie_tiny_si = 1050,
+  CODE_FOR_tlsie_tiny_di = 1051,
+  CODE_FOR_tlsie_tiny_sidi = 1052,
+  CODE_FOR_tlsle12_si = 1053,
+  CODE_FOR_tlsle12_di = 1054,
+  CODE_FOR_tlsle24_si = 1055,
+  CODE_FOR_tlsle24_di = 1056,
+  CODE_FOR_tlsle32_si = 1057,
+  CODE_FOR_tlsle32_di = 1058,
+  CODE_FOR_tlsle48_si = 1059,
+  CODE_FOR_tlsle48_di = 1060,
+  CODE_FOR_tlsdesc_small_advsimd_si = 1061,
+  CODE_FOR_tlsdesc_small_advsimd_di = 1062,
+  CODE_FOR_tlsdesc_small_sve_si = 1063,
+  CODE_FOR_tlsdesc_small_sve_di = 1064,
+  CODE_FOR_stack_tie = 1065,
+  CODE_FOR_pacisp = 1066,
+  CODE_FOR_autisp = 1067,
+  CODE_FOR_paci1716 = 1068,
+  CODE_FOR_auti1716 = 1069,
+  CODE_FOR_xpaclri = 1070,
+  CODE_FOR_blockage = 1071,
+  CODE_FOR_probe_stack_range = 1072,
+  CODE_FOR_probe_sve_stack_clash_si = 1073,
+  CODE_FOR_probe_sve_stack_clash_di = 1074,
+  CODE_FOR_reg_stack_protect_address_si = 1075,
+  CODE_FOR_reg_stack_protect_address_di = 1076,
+  CODE_FOR_stack_protect_set_si = 1077,
+  CODE_FOR_stack_protect_set_di = 1078,
+  CODE_FOR_stack_protect_test_si = 1079,
+  CODE_FOR_stack_protect_test_di = 1080,
+  CODE_FOR_set_fpcr = 1081,
+  CODE_FOR_get_fpcr = 1082,
+  CODE_FOR_set_fpsr = 1083,
+  CODE_FOR_get_fpsr = 1084,
+  CODE_FOR_speculation_tracker = 1085,
+  CODE_FOR_bti_noarg = 1086,
+  CODE_FOR_bti_c = 1087,
+  CODE_FOR_bti_j = 1088,
+  CODE_FOR_bti_jc = 1089,
+  CODE_FOR_speculation_barrier = 1090,
+  CODE_FOR_despeculate_simpleqi = 1096,
+  CODE_FOR_despeculate_simplehi = 1097,
+  CODE_FOR_despeculate_simplesi = 1098,
+  CODE_FOR_despeculate_simpledi = 1099,
+  CODE_FOR_despeculate_simpleti = 1100,
+  CODE_FOR_aarch64_simd_dupv8qi = 1101,
+  CODE_FOR_aarch64_simd_dupv16qi = 1102,
+  CODE_FOR_aarch64_simd_dupv4hi = 1103,
+  CODE_FOR_aarch64_simd_dupv8hi = 1104,
+  CODE_FOR_aarch64_simd_dupv2si = 1105,
+  CODE_FOR_aarch64_simd_dupv4si = 1106,
+  CODE_FOR_aarch64_simd_dupv2di = 1107,
+  CODE_FOR_aarch64_simd_dupv4hf = 1108,
+  CODE_FOR_aarch64_simd_dupv8hf = 1109,
+  CODE_FOR_aarch64_simd_dupv2sf = 1110,
+  CODE_FOR_aarch64_simd_dupv4sf = 1111,
+  CODE_FOR_aarch64_simd_dupv2df = 1112,
+  CODE_FOR_aarch64_dup_lanev8qi = 1113,
+  CODE_FOR_aarch64_dup_lanev16qi = 1114,
+  CODE_FOR_aarch64_dup_lanev4hi = 1115,
+  CODE_FOR_aarch64_dup_lanev8hi = 1116,
+  CODE_FOR_aarch64_dup_lanev2si = 1117,
+  CODE_FOR_aarch64_dup_lanev4si = 1118,
+  CODE_FOR_aarch64_dup_lanev2di = 1119,
+  CODE_FOR_aarch64_dup_lanev4hf = 1120,
+  CODE_FOR_aarch64_dup_lanev8hf = 1121,
+  CODE_FOR_aarch64_dup_lanev2sf = 1122,
+  CODE_FOR_aarch64_dup_lanev4sf = 1123,
+  CODE_FOR_aarch64_dup_lanev2df = 1124,
+  CODE_FOR_aarch64_dup_lane_to_128v8qi = 1125,
+  CODE_FOR_aarch64_dup_lane_to_64v16qi = 1126,
+  CODE_FOR_aarch64_dup_lane_to_128v4hi = 1127,
+  CODE_FOR_aarch64_dup_lane_to_64v8hi = 1128,
+  CODE_FOR_aarch64_dup_lane_to_128v2si = 1129,
+  CODE_FOR_aarch64_dup_lane_to_64v4si = 1130,
+  CODE_FOR_aarch64_dup_lane_to_128v4hf = 1131,
+  CODE_FOR_aarch64_dup_lane_to_64v8hf = 1132,
+  CODE_FOR_aarch64_dup_lane_to_128v2sf = 1133,
+  CODE_FOR_aarch64_dup_lane_to_64v4sf = 1134,
+  CODE_FOR_aarch64_store_lane0v8qi = 1147,
+  CODE_FOR_aarch64_store_lane0v16qi = 1148,
+  CODE_FOR_aarch64_store_lane0v4hi = 1149,
+  CODE_FOR_aarch64_store_lane0v8hi = 1150,
+  CODE_FOR_aarch64_store_lane0v2si = 1151,
+  CODE_FOR_aarch64_store_lane0v4si = 1152,
+  CODE_FOR_aarch64_store_lane0v2di = 1153,
+  CODE_FOR_aarch64_store_lane0v4hf = 1154,
+  CODE_FOR_aarch64_store_lane0v8hf = 1155,
+  CODE_FOR_aarch64_store_lane0v2sf = 1156,
+  CODE_FOR_aarch64_store_lane0v4sf = 1157,
+  CODE_FOR_aarch64_store_lane0v2df = 1158,
+  CODE_FOR_load_pairv8qiv8qi = 1159,
+  CODE_FOR_load_pairv4hiv8qi = 1160,
+  CODE_FOR_load_pairv4hfv8qi = 1161,
+  CODE_FOR_load_pairv2siv8qi = 1162,
+  CODE_FOR_load_pairv2sfv8qi = 1163,
+  CODE_FOR_load_pairdfv8qi = 1164,
+  CODE_FOR_load_pairv8qiv4hi = 1165,
+  CODE_FOR_load_pairv4hiv4hi = 1166,
+  CODE_FOR_load_pairv4hfv4hi = 1167,
+  CODE_FOR_load_pairv2siv4hi = 1168,
+  CODE_FOR_load_pairv2sfv4hi = 1169,
+  CODE_FOR_load_pairdfv4hi = 1170,
+  CODE_FOR_load_pairv8qiv4hf = 1171,
+  CODE_FOR_load_pairv4hiv4hf = 1172,
+  CODE_FOR_load_pairv4hfv4hf = 1173,
+  CODE_FOR_load_pairv2siv4hf = 1174,
+  CODE_FOR_load_pairv2sfv4hf = 1175,
+  CODE_FOR_load_pairdfv4hf = 1176,
+  CODE_FOR_load_pairv8qiv2si = 1177,
+  CODE_FOR_load_pairv4hiv2si = 1178,
+  CODE_FOR_load_pairv4hfv2si = 1179,
+  CODE_FOR_load_pairv2siv2si = 1180,
+  CODE_FOR_load_pairv2sfv2si = 1181,
+  CODE_FOR_load_pairdfv2si = 1182,
+  CODE_FOR_load_pairv8qiv2sf = 1183,
+  CODE_FOR_load_pairv4hiv2sf = 1184,
+  CODE_FOR_load_pairv4hfv2sf = 1185,
+  CODE_FOR_load_pairv2siv2sf = 1186,
+  CODE_FOR_load_pairv2sfv2sf = 1187,
+  CODE_FOR_load_pairdfv2sf = 1188,
+  CODE_FOR_load_pairv8qidf = 1189,
+  CODE_FOR_load_pairv4hidf = 1190,
+  CODE_FOR_load_pairv4hfdf = 1191,
+  CODE_FOR_load_pairv2sidf = 1192,
+  CODE_FOR_load_pairv2sfdf = 1193,
+  CODE_FOR_load_pairdfdf = 1194,
+  CODE_FOR_vec_store_pairv8qiv8qi = 1195,
+  CODE_FOR_vec_store_pairv4hiv8qi = 1196,
+  CODE_FOR_vec_store_pairv4hfv8qi = 1197,
+  CODE_FOR_vec_store_pairv2siv8qi = 1198,
+  CODE_FOR_vec_store_pairv2sfv8qi = 1199,
+  CODE_FOR_vec_store_pairdfv8qi = 1200,
+  CODE_FOR_vec_store_pairv8qiv4hi = 1201,
+  CODE_FOR_vec_store_pairv4hiv4hi = 1202,
+  CODE_FOR_vec_store_pairv4hfv4hi = 1203,
+  CODE_FOR_vec_store_pairv2siv4hi = 1204,
+  CODE_FOR_vec_store_pairv2sfv4hi = 1205,
+  CODE_FOR_vec_store_pairdfv4hi = 1206,
+  CODE_FOR_vec_store_pairv8qiv4hf = 1207,
+  CODE_FOR_vec_store_pairv4hiv4hf = 1208,
+  CODE_FOR_vec_store_pairv4hfv4hf = 1209,
+  CODE_FOR_vec_store_pairv2siv4hf = 1210,
+  CODE_FOR_vec_store_pairv2sfv4hf = 1211,
+  CODE_FOR_vec_store_pairdfv4hf = 1212,
+  CODE_FOR_vec_store_pairv8qiv2si = 1213,
+  CODE_FOR_vec_store_pairv4hiv2si = 1214,
+  CODE_FOR_vec_store_pairv4hfv2si = 1215,
+  CODE_FOR_vec_store_pairv2siv2si = 1216,
+  CODE_FOR_vec_store_pairv2sfv2si = 1217,
+  CODE_FOR_vec_store_pairdfv2si = 1218,
+  CODE_FOR_vec_store_pairv8qiv2sf = 1219,
+  CODE_FOR_vec_store_pairv4hiv2sf = 1220,
+  CODE_FOR_vec_store_pairv4hfv2sf = 1221,
+  CODE_FOR_vec_store_pairv2siv2sf = 1222,
+  CODE_FOR_vec_store_pairv2sfv2sf = 1223,
+  CODE_FOR_vec_store_pairdfv2sf = 1224,
+  CODE_FOR_vec_store_pairv8qidf = 1225,
+  CODE_FOR_vec_store_pairv4hidf = 1226,
+  CODE_FOR_vec_store_pairv4hfdf = 1227,
+  CODE_FOR_vec_store_pairv2sidf = 1228,
+  CODE_FOR_vec_store_pairv2sfdf = 1229,
+  CODE_FOR_vec_store_pairdfdf = 1230,
+  CODE_FOR_load_pairv16qiv16qi = 1231,
+  CODE_FOR_load_pairv8hiv16qi = 1232,
+  CODE_FOR_load_pairv4siv16qi = 1233,
+  CODE_FOR_load_pairv2div16qi = 1234,
+  CODE_FOR_load_pairv8hfv16qi = 1235,
+  CODE_FOR_load_pairv4sfv16qi = 1236,
+  CODE_FOR_load_pairv2dfv16qi = 1237,
+  CODE_FOR_load_pairv16qiv8hi = 1238,
+  CODE_FOR_load_pairv8hiv8hi = 1239,
+  CODE_FOR_load_pairv4siv8hi = 1240,
+  CODE_FOR_load_pairv2div8hi = 1241,
+  CODE_FOR_load_pairv8hfv8hi = 1242,
+  CODE_FOR_load_pairv4sfv8hi = 1243,
+  CODE_FOR_load_pairv2dfv8hi = 1244,
+  CODE_FOR_load_pairv16qiv4si = 1245,
+  CODE_FOR_load_pairv8hiv4si = 1246,
+  CODE_FOR_load_pairv4siv4si = 1247,
+  CODE_FOR_load_pairv2div4si = 1248,
+  CODE_FOR_load_pairv8hfv4si = 1249,
+  CODE_FOR_load_pairv4sfv4si = 1250,
+  CODE_FOR_load_pairv2dfv4si = 1251,
+  CODE_FOR_load_pairv16qiv2di = 1252,
+  CODE_FOR_load_pairv8hiv2di = 1253,
+  CODE_FOR_load_pairv4siv2di = 1254,
+  CODE_FOR_load_pairv2div2di = 1255,
+  CODE_FOR_load_pairv8hfv2di = 1256,
+  CODE_FOR_load_pairv4sfv2di = 1257,
+  CODE_FOR_load_pairv2dfv2di = 1258,
+  CODE_FOR_load_pairv16qiv8hf = 1259,
+  CODE_FOR_load_pairv8hiv8hf = 1260,
+  CODE_FOR_load_pairv4siv8hf = 1261,
+  CODE_FOR_load_pairv2div8hf = 1262,
+  CODE_FOR_load_pairv8hfv8hf = 1263,
+  CODE_FOR_load_pairv4sfv8hf = 1264,
+  CODE_FOR_load_pairv2dfv8hf = 1265,
+  CODE_FOR_load_pairv16qiv4sf = 1266,
+  CODE_FOR_load_pairv8hiv4sf = 1267,
+  CODE_FOR_load_pairv4siv4sf = 1268,
+  CODE_FOR_load_pairv2div4sf = 1269,
+  CODE_FOR_load_pairv8hfv4sf = 1270,
+  CODE_FOR_load_pairv4sfv4sf = 1271,
+  CODE_FOR_load_pairv2dfv4sf = 1272,
+  CODE_FOR_load_pairv16qiv2df = 1273,
+  CODE_FOR_load_pairv8hiv2df = 1274,
+  CODE_FOR_load_pairv4siv2df = 1275,
+  CODE_FOR_load_pairv2div2df = 1276,
+  CODE_FOR_load_pairv8hfv2df = 1277,
+  CODE_FOR_load_pairv4sfv2df = 1278,
+  CODE_FOR_load_pairv2dfv2df = 1279,
+  CODE_FOR_vec_store_pairv16qiv16qi = 1280,
+  CODE_FOR_vec_store_pairv8hiv16qi = 1281,
+  CODE_FOR_vec_store_pairv4siv16qi = 1282,
+  CODE_FOR_vec_store_pairv2div16qi = 1283,
+  CODE_FOR_vec_store_pairv8hfv16qi = 1284,
+  CODE_FOR_vec_store_pairv4sfv16qi = 1285,
+  CODE_FOR_vec_store_pairv2dfv16qi = 1286,
+  CODE_FOR_vec_store_pairv16qiv8hi = 1287,
+  CODE_FOR_vec_store_pairv8hiv8hi = 1288,
+  CODE_FOR_vec_store_pairv4siv8hi = 1289,
+  CODE_FOR_vec_store_pairv2div8hi = 1290,
+  CODE_FOR_vec_store_pairv8hfv8hi = 1291,
+  CODE_FOR_vec_store_pairv4sfv8hi = 1292,
+  CODE_FOR_vec_store_pairv2dfv8hi = 1293,
+  CODE_FOR_vec_store_pairv16qiv4si = 1294,
+  CODE_FOR_vec_store_pairv8hiv4si = 1295,
+  CODE_FOR_vec_store_pairv4siv4si = 1296,
+  CODE_FOR_vec_store_pairv2div4si = 1297,
+  CODE_FOR_vec_store_pairv8hfv4si = 1298,
+  CODE_FOR_vec_store_pairv4sfv4si = 1299,
+  CODE_FOR_vec_store_pairv2dfv4si = 1300,
+  CODE_FOR_vec_store_pairv16qiv2di = 1301,
+  CODE_FOR_vec_store_pairv8hiv2di = 1302,
+  CODE_FOR_vec_store_pairv4siv2di = 1303,
+  CODE_FOR_vec_store_pairv2div2di = 1304,
+  CODE_FOR_vec_store_pairv8hfv2di = 1305,
+  CODE_FOR_vec_store_pairv4sfv2di = 1306,
+  CODE_FOR_vec_store_pairv2dfv2di = 1307,
+  CODE_FOR_vec_store_pairv16qiv8hf = 1308,
+  CODE_FOR_vec_store_pairv8hiv8hf = 1309,
+  CODE_FOR_vec_store_pairv4siv8hf = 1310,
+  CODE_FOR_vec_store_pairv2div8hf = 1311,
+  CODE_FOR_vec_store_pairv8hfv8hf = 1312,
+  CODE_FOR_vec_store_pairv4sfv8hf = 1313,
+  CODE_FOR_vec_store_pairv2dfv8hf = 1314,
+  CODE_FOR_vec_store_pairv16qiv4sf = 1315,
+  CODE_FOR_vec_store_pairv8hiv4sf = 1316,
+  CODE_FOR_vec_store_pairv4siv4sf = 1317,
+  CODE_FOR_vec_store_pairv2div4sf = 1318,
+  CODE_FOR_vec_store_pairv8hfv4sf = 1319,
+  CODE_FOR_vec_store_pairv4sfv4sf = 1320,
+  CODE_FOR_vec_store_pairv2dfv4sf = 1321,
+  CODE_FOR_vec_store_pairv16qiv2df = 1322,
+  CODE_FOR_vec_store_pairv8hiv2df = 1323,
+  CODE_FOR_vec_store_pairv4siv2df = 1324,
+  CODE_FOR_vec_store_pairv2div2df = 1325,
+  CODE_FOR_vec_store_pairv8hfv2df = 1326,
+  CODE_FOR_vec_store_pairv4sfv2df = 1327,
+  CODE_FOR_vec_store_pairv2dfv2df = 1328,
+  CODE_FOR_aarch64_simd_mov_from_v16qilow = 1329,
+  CODE_FOR_aarch64_simd_mov_from_v8hilow = 1330,
+  CODE_FOR_aarch64_simd_mov_from_v4silow = 1331,
+  CODE_FOR_aarch64_simd_mov_from_v2dilow = 1332,
+  CODE_FOR_aarch64_simd_mov_from_v8hflow = 1333,
+  CODE_FOR_aarch64_simd_mov_from_v4sflow = 1334,
+  CODE_FOR_aarch64_simd_mov_from_v2dflow = 1335,
+  CODE_FOR_aarch64_simd_mov_from_v16qihigh = 1336,
+  CODE_FOR_aarch64_simd_mov_from_v8hihigh = 1337,
+  CODE_FOR_aarch64_simd_mov_from_v4sihigh = 1338,
+  CODE_FOR_aarch64_simd_mov_from_v2dihigh = 1339,
+  CODE_FOR_aarch64_simd_mov_from_v8hfhigh = 1340,
+  CODE_FOR_aarch64_simd_mov_from_v4sfhigh = 1341,
+  CODE_FOR_aarch64_simd_mov_from_v2dfhigh = 1342,
+  CODE_FOR_ornv8qi3 = 1343,
+  CODE_FOR_ornv16qi3 = 1344,
+  CODE_FOR_ornv4hi3 = 1345,
+  CODE_FOR_ornv8hi3 = 1346,
+  CODE_FOR_ornv2si3 = 1347,
+  CODE_FOR_ornv4si3 = 1348,
+  CODE_FOR_ornv2di3 = 1349,
+  CODE_FOR_bicv8qi3 = 1350,
+  CODE_FOR_bicv16qi3 = 1351,
+  CODE_FOR_bicv4hi3 = 1352,
+  CODE_FOR_bicv8hi3 = 1353,
+  CODE_FOR_bicv2si3 = 1354,
+  CODE_FOR_bicv4si3 = 1355,
+  CODE_FOR_bicv2di3 = 1356,
+  CODE_FOR_addv8qi3 = 1357,
+  CODE_FOR_addv16qi3 = 1358,
+  CODE_FOR_addv4hi3 = 1359,
+  CODE_FOR_addv8hi3 = 1360,
+  CODE_FOR_addv2si3 = 1361,
+  CODE_FOR_addv4si3 = 1362,
+  CODE_FOR_addv2di3 = 1363,
+  CODE_FOR_subv8qi3 = 1364,
+  CODE_FOR_subv16qi3 = 1365,
+  CODE_FOR_subv4hi3 = 1366,
+  CODE_FOR_subv8hi3 = 1367,
+  CODE_FOR_subv2si3 = 1368,
+  CODE_FOR_subv4si3 = 1369,
+  CODE_FOR_subv2di3 = 1370,
+  CODE_FOR_mulv8qi3 = 1371,
+  CODE_FOR_mulv16qi3 = 1372,
+  CODE_FOR_mulv4hi3 = 1373,
+  CODE_FOR_mulv8hi3 = 1374,
+  CODE_FOR_mulv2si3 = 1375,
+  CODE_FOR_mulv4si3 = 1376,
+  CODE_FOR_bswapv4hi2 = 1377,
+  CODE_FOR_bswapv8hi2 = 1378,
+  CODE_FOR_bswapv2si2 = 1379,
+  CODE_FOR_bswapv4si2 = 1380,
+  CODE_FOR_bswapv2di2 = 1381,
+  CODE_FOR_aarch64_rbitv8qi = 1382,
+  CODE_FOR_aarch64_rbitv16qi = 1383,
+  CODE_FOR_aarch64_fcadd90v4hf = 1384,
+  CODE_FOR_aarch64_fcadd270v4hf = 1385,
+  CODE_FOR_aarch64_fcadd90v8hf = 1386,
+  CODE_FOR_aarch64_fcadd270v8hf = 1387,
+  CODE_FOR_aarch64_fcadd90v2sf = 1388,
+  CODE_FOR_aarch64_fcadd270v2sf = 1389,
+  CODE_FOR_aarch64_fcadd90v4sf = 1390,
+  CODE_FOR_aarch64_fcadd270v4sf = 1391,
+  CODE_FOR_aarch64_fcadd90v2df = 1392,
+  CODE_FOR_aarch64_fcadd270v2df = 1393,
+  CODE_FOR_aarch64_fcmla0v4hf = 1394,
+  CODE_FOR_aarch64_fcmla90v4hf = 1395,
+  CODE_FOR_aarch64_fcmla180v4hf = 1396,
+  CODE_FOR_aarch64_fcmla270v4hf = 1397,
+  CODE_FOR_aarch64_fcmla0v8hf = 1398,
+  CODE_FOR_aarch64_fcmla90v8hf = 1399,
+  CODE_FOR_aarch64_fcmla180v8hf = 1400,
+  CODE_FOR_aarch64_fcmla270v8hf = 1401,
+  CODE_FOR_aarch64_fcmla0v2sf = 1402,
+  CODE_FOR_aarch64_fcmla90v2sf = 1403,
+  CODE_FOR_aarch64_fcmla180v2sf = 1404,
+  CODE_FOR_aarch64_fcmla270v2sf = 1405,
+  CODE_FOR_aarch64_fcmla0v4sf = 1406,
+  CODE_FOR_aarch64_fcmla90v4sf = 1407,
+  CODE_FOR_aarch64_fcmla180v4sf = 1408,
+  CODE_FOR_aarch64_fcmla270v4sf = 1409,
+  CODE_FOR_aarch64_fcmla0v2df = 1410,
+  CODE_FOR_aarch64_fcmla90v2df = 1411,
+  CODE_FOR_aarch64_fcmla180v2df = 1412,
+  CODE_FOR_aarch64_fcmla270v2df = 1413,
+  CODE_FOR_aarch64_fcmla_lane0v4hf = 1414,
+  CODE_FOR_aarch64_fcmla_lane90v4hf = 1415,
+  CODE_FOR_aarch64_fcmla_lane180v4hf = 1416,
+  CODE_FOR_aarch64_fcmla_lane270v4hf = 1417,
+  CODE_FOR_aarch64_fcmla_lane0v8hf = 1418,
+  CODE_FOR_aarch64_fcmla_lane90v8hf = 1419,
+  CODE_FOR_aarch64_fcmla_lane180v8hf = 1420,
+  CODE_FOR_aarch64_fcmla_lane270v8hf = 1421,
+  CODE_FOR_aarch64_fcmla_lane0v2sf = 1422,
+  CODE_FOR_aarch64_fcmla_lane90v2sf = 1423,
+  CODE_FOR_aarch64_fcmla_lane180v2sf = 1424,
+  CODE_FOR_aarch64_fcmla_lane270v2sf = 1425,
+  CODE_FOR_aarch64_fcmla_lane0v4sf = 1426,
+  CODE_FOR_aarch64_fcmla_lane90v4sf = 1427,
+  CODE_FOR_aarch64_fcmla_lane180v4sf = 1428,
+  CODE_FOR_aarch64_fcmla_lane270v4sf = 1429,
+  CODE_FOR_aarch64_fcmla_lane0v2df = 1430,
+  CODE_FOR_aarch64_fcmla_lane90v2df = 1431,
+  CODE_FOR_aarch64_fcmla_lane180v2df = 1432,
+  CODE_FOR_aarch64_fcmla_lane270v2df = 1433,
+  CODE_FOR_aarch64_fcmla_laneq0v4hf = 1434,
+  CODE_FOR_aarch64_fcmla_laneq90v4hf = 1435,
+  CODE_FOR_aarch64_fcmla_laneq180v4hf = 1436,
+  CODE_FOR_aarch64_fcmla_laneq270v4hf = 1437,
+  CODE_FOR_aarch64_fcmlaq_lane0v8hf = 1438,
+  CODE_FOR_aarch64_fcmlaq_lane90v8hf = 1439,
+  CODE_FOR_aarch64_fcmlaq_lane180v8hf = 1440,
+  CODE_FOR_aarch64_fcmlaq_lane270v8hf = 1441,
+  CODE_FOR_aarch64_fcmlaq_lane0v4sf = 1442,
+  CODE_FOR_aarch64_fcmlaq_lane90v4sf = 1443,
+  CODE_FOR_aarch64_fcmlaq_lane180v4sf = 1444,
+  CODE_FOR_aarch64_fcmlaq_lane270v4sf = 1445,
+  CODE_FOR_aarch64_sdotv8qi = 1446,
+  CODE_FOR_aarch64_udotv8qi = 1447,
+  CODE_FOR_aarch64_sdotv16qi = 1448,
+  CODE_FOR_aarch64_udotv16qi = 1449,
+  CODE_FOR_aarch64_sdot_lanev8qi = 1450,
+  CODE_FOR_aarch64_udot_lanev8qi = 1451,
+  CODE_FOR_aarch64_sdot_lanev16qi = 1452,
+  CODE_FOR_aarch64_udot_lanev16qi = 1453,
+  CODE_FOR_aarch64_sdot_laneqv8qi = 1454,
+  CODE_FOR_aarch64_udot_laneqv8qi = 1455,
+  CODE_FOR_aarch64_sdot_laneqv16qi = 1456,
+  CODE_FOR_aarch64_udot_laneqv16qi = 1457,
+  CODE_FOR_aarch64_rsqrtev4hf = 1482,
+  CODE_FOR_aarch64_rsqrtev8hf = 1483,
+  CODE_FOR_aarch64_rsqrtev2sf = 1484,
+  CODE_FOR_aarch64_rsqrtev4sf = 1485,
+  CODE_FOR_aarch64_rsqrtev2df = 1486,
+  CODE_FOR_aarch64_rsqrtehf = 1487,
+  CODE_FOR_aarch64_rsqrtesf = 1488,
+  CODE_FOR_aarch64_rsqrtedf = 1489,
+  CODE_FOR_aarch64_rsqrtsv4hf = 1490,
+  CODE_FOR_aarch64_rsqrtsv8hf = 1491,
+  CODE_FOR_aarch64_rsqrtsv2sf = 1492,
+  CODE_FOR_aarch64_rsqrtsv4sf = 1493,
+  CODE_FOR_aarch64_rsqrtsv2df = 1494,
+  CODE_FOR_aarch64_rsqrtshf = 1495,
+  CODE_FOR_aarch64_rsqrtssf = 1496,
+  CODE_FOR_aarch64_rsqrtsdf = 1497,
+  CODE_FOR_negv8qi2 = 1499,
+  CODE_FOR_negv16qi2 = 1500,
+  CODE_FOR_negv4hi2 = 1501,
+  CODE_FOR_negv8hi2 = 1502,
+  CODE_FOR_negv2si2 = 1503,
+  CODE_FOR_negv4si2 = 1504,
+  CODE_FOR_negv2di2 = 1505,
+  CODE_FOR_absv8qi2 = 1506,
+  CODE_FOR_absv16qi2 = 1507,
+  CODE_FOR_absv4hi2 = 1508,
+  CODE_FOR_absv8hi2 = 1509,
+  CODE_FOR_absv2si2 = 1510,
+  CODE_FOR_absv4si2 = 1511,
+  CODE_FOR_absv2di2 = 1512,
+  CODE_FOR_aarch64_absv8qi = 1513,
+  CODE_FOR_aarch64_absv16qi = 1514,
+  CODE_FOR_aarch64_absv4hi = 1515,
+  CODE_FOR_aarch64_absv8hi = 1516,
+  CODE_FOR_aarch64_absv2si = 1517,
+  CODE_FOR_aarch64_absv4si = 1518,
+  CODE_FOR_aarch64_absv2di = 1519,
+  CODE_FOR_aarch64_absdi = 1520,
+  CODE_FOR_aarch64_sabdl2v8qi_3 = 1533,
+  CODE_FOR_aarch64_uabdl2v8qi_3 = 1534,
+  CODE_FOR_aarch64_sabdl2v16qi_3 = 1535,
+  CODE_FOR_aarch64_uabdl2v16qi_3 = 1536,
+  CODE_FOR_aarch64_sabdl2v4hi_3 = 1537,
+  CODE_FOR_aarch64_uabdl2v4hi_3 = 1538,
+  CODE_FOR_aarch64_sabdl2v8hi_3 = 1539,
+  CODE_FOR_aarch64_uabdl2v8hi_3 = 1540,
+  CODE_FOR_aarch64_sabdl2v4si_3 = 1541,
+  CODE_FOR_aarch64_uabdl2v4si_3 = 1542,
+  CODE_FOR_aarch64_sabalv8qi_4 = 1543,
+  CODE_FOR_aarch64_uabalv8qi_4 = 1544,
+  CODE_FOR_aarch64_sabalv16qi_4 = 1545,
+  CODE_FOR_aarch64_uabalv16qi_4 = 1546,
+  CODE_FOR_aarch64_sabalv4hi_4 = 1547,
+  CODE_FOR_aarch64_uabalv4hi_4 = 1548,
+  CODE_FOR_aarch64_sabalv8hi_4 = 1549,
+  CODE_FOR_aarch64_uabalv8hi_4 = 1550,
+  CODE_FOR_aarch64_sabalv4si_4 = 1551,
+  CODE_FOR_aarch64_uabalv4si_4 = 1552,
+  CODE_FOR_aarch64_sadalpv8qi_3 = 1553,
+  CODE_FOR_aarch64_uadalpv8qi_3 = 1554,
+  CODE_FOR_aarch64_sadalpv16qi_3 = 1555,
+  CODE_FOR_aarch64_uadalpv16qi_3 = 1556,
+  CODE_FOR_aarch64_sadalpv4hi_3 = 1557,
+  CODE_FOR_aarch64_uadalpv4hi_3 = 1558,
+  CODE_FOR_aarch64_sadalpv8hi_3 = 1559,
+  CODE_FOR_aarch64_uadalpv8hi_3 = 1560,
+  CODE_FOR_aarch64_sadalpv4si_3 = 1561,
+  CODE_FOR_aarch64_uadalpv4si_3 = 1562,
+  CODE_FOR_abav8qi_3 = 1563,
+  CODE_FOR_abav16qi_3 = 1564,
+  CODE_FOR_abav4hi_3 = 1565,
+  CODE_FOR_abav8hi_3 = 1566,
+  CODE_FOR_abav2si_3 = 1567,
+  CODE_FOR_abav4si_3 = 1568,
+  CODE_FOR_fabdv4hf3 = 1569,
+  CODE_FOR_fabdv8hf3 = 1570,
+  CODE_FOR_fabdv2sf3 = 1571,
+  CODE_FOR_fabdv4sf3 = 1572,
+  CODE_FOR_fabdv2df3 = 1573,
+  CODE_FOR_fabdhf3 = 1574,
+  CODE_FOR_fabdsf3 = 1575,
+  CODE_FOR_fabddf3 = 1576,
+  CODE_FOR_andv8qi3 = 1577,
+  CODE_FOR_andv16qi3 = 1578,
+  CODE_FOR_andv4hi3 = 1579,
+  CODE_FOR_andv8hi3 = 1580,
+  CODE_FOR_andv2si3 = 1581,
+  CODE_FOR_andv4si3 = 1582,
+  CODE_FOR_andv2di3 = 1583,
+  CODE_FOR_iorv8qi3 = 1584,
+  CODE_FOR_iorv16qi3 = 1585,
+  CODE_FOR_iorv4hi3 = 1586,
+  CODE_FOR_iorv8hi3 = 1587,
+  CODE_FOR_iorv2si3 = 1588,
+  CODE_FOR_iorv4si3 = 1589,
+  CODE_FOR_iorv2di3 = 1590,
+  CODE_FOR_xorv8qi3 = 1591,
+  CODE_FOR_xorv16qi3 = 1592,
+  CODE_FOR_xorv4hi3 = 1593,
+  CODE_FOR_xorv8hi3 = 1594,
+  CODE_FOR_xorv2si3 = 1595,
+  CODE_FOR_xorv4si3 = 1596,
+  CODE_FOR_xorv2di3 = 1597,
+  CODE_FOR_one_cmplv8qi2 = 1598,
+  CODE_FOR_one_cmplv16qi2 = 1599,
+  CODE_FOR_one_cmplv4hi2 = 1600,
+  CODE_FOR_one_cmplv8hi2 = 1601,
+  CODE_FOR_one_cmplv2si2 = 1602,
+  CODE_FOR_one_cmplv4si2 = 1603,
+  CODE_FOR_one_cmplv2di2 = 1604,
+  CODE_FOR_aarch64_simd_vec_setv8qi = 1605,
+  CODE_FOR_aarch64_simd_vec_setv16qi = 1606,
+  CODE_FOR_aarch64_simd_vec_setv4hi = 1607,
+  CODE_FOR_aarch64_simd_vec_setv8hi = 1608,
+  CODE_FOR_aarch64_simd_vec_setv2si = 1609,
+  CODE_FOR_aarch64_simd_vec_setv4si = 1610,
+  CODE_FOR_aarch64_simd_vec_setv2di = 1611,
+  CODE_FOR_aarch64_simd_vec_setv4hf = 1612,
+  CODE_FOR_aarch64_simd_vec_setv8hf = 1613,
+  CODE_FOR_aarch64_simd_vec_setv2sf = 1614,
+  CODE_FOR_aarch64_simd_vec_setv4sf = 1615,
+  CODE_FOR_aarch64_simd_vec_setv2df = 1616,
+  CODE_FOR_aarch64_simd_lshrv8qi = 1639,
+  CODE_FOR_aarch64_simd_lshrv16qi = 1640,
+  CODE_FOR_aarch64_simd_lshrv4hi = 1641,
+  CODE_FOR_aarch64_simd_lshrv8hi = 1642,
+  CODE_FOR_aarch64_simd_lshrv2si = 1643,
+  CODE_FOR_aarch64_simd_lshrv4si = 1644,
+  CODE_FOR_aarch64_simd_lshrv2di = 1645,
+  CODE_FOR_aarch64_simd_ashrv8qi = 1646,
+  CODE_FOR_aarch64_simd_ashrv16qi = 1647,
+  CODE_FOR_aarch64_simd_ashrv4hi = 1648,
+  CODE_FOR_aarch64_simd_ashrv8hi = 1649,
+  CODE_FOR_aarch64_simd_ashrv2si = 1650,
+  CODE_FOR_aarch64_simd_ashrv4si = 1651,
+  CODE_FOR_aarch64_simd_ashrv2di = 1652,
+  CODE_FOR_aarch64_simd_imm_shlv8qi = 1653,
+  CODE_FOR_aarch64_simd_imm_shlv16qi = 1654,
+  CODE_FOR_aarch64_simd_imm_shlv4hi = 1655,
+  CODE_FOR_aarch64_simd_imm_shlv8hi = 1656,
+  CODE_FOR_aarch64_simd_imm_shlv2si = 1657,
+  CODE_FOR_aarch64_simd_imm_shlv4si = 1658,
+  CODE_FOR_aarch64_simd_imm_shlv2di = 1659,
+  CODE_FOR_aarch64_simd_reg_sshlv8qi = 1660,
+  CODE_FOR_aarch64_simd_reg_sshlv16qi = 1661,
+  CODE_FOR_aarch64_simd_reg_sshlv4hi = 1662,
+  CODE_FOR_aarch64_simd_reg_sshlv8hi = 1663,
+  CODE_FOR_aarch64_simd_reg_sshlv2si = 1664,
+  CODE_FOR_aarch64_simd_reg_sshlv4si = 1665,
+  CODE_FOR_aarch64_simd_reg_sshlv2di = 1666,
+  CODE_FOR_aarch64_simd_reg_shlv8qi_unsigned = 1667,
+  CODE_FOR_aarch64_simd_reg_shlv16qi_unsigned = 1668,
+  CODE_FOR_aarch64_simd_reg_shlv4hi_unsigned = 1669,
+  CODE_FOR_aarch64_simd_reg_shlv8hi_unsigned = 1670,
+  CODE_FOR_aarch64_simd_reg_shlv2si_unsigned = 1671,
+  CODE_FOR_aarch64_simd_reg_shlv4si_unsigned = 1672,
+  CODE_FOR_aarch64_simd_reg_shlv2di_unsigned = 1673,
+  CODE_FOR_aarch64_simd_reg_shlv8qi_signed = 1674,
+  CODE_FOR_aarch64_simd_reg_shlv16qi_signed = 1675,
+  CODE_FOR_aarch64_simd_reg_shlv4hi_signed = 1676,
+  CODE_FOR_aarch64_simd_reg_shlv8hi_signed = 1677,
+  CODE_FOR_aarch64_simd_reg_shlv2si_signed = 1678,
+  CODE_FOR_aarch64_simd_reg_shlv4si_signed = 1679,
+  CODE_FOR_aarch64_simd_reg_shlv2di_signed = 1680,
+  CODE_FOR_vec_shr_v8qi = 1681,
+  CODE_FOR_vec_shr_v4hi = 1682,
+  CODE_FOR_vec_shr_v4hf = 1683,
+  CODE_FOR_vec_shr_v2si = 1684,
+  CODE_FOR_vec_shr_v2sf = 1685,
+  CODE_FOR_aarch64_mlav8qi = 1686,
+  CODE_FOR_aarch64_mlav16qi = 1687,
+  CODE_FOR_aarch64_mlav4hi = 1688,
+  CODE_FOR_aarch64_mlav8hi = 1689,
+  CODE_FOR_aarch64_mlav2si = 1690,
+  CODE_FOR_aarch64_mlav4si = 1691,
+  CODE_FOR_aarch64_mlsv8qi = 1704,
+  CODE_FOR_aarch64_mlsv16qi = 1705,
+  CODE_FOR_aarch64_mlsv4hi = 1706,
+  CODE_FOR_aarch64_mlsv8hi = 1707,
+  CODE_FOR_aarch64_mlsv2si = 1708,
+  CODE_FOR_aarch64_mlsv4si = 1709,
+  CODE_FOR_smaxv8qi3 = 1722,
+  CODE_FOR_sminv8qi3 = 1723,
+  CODE_FOR_umaxv8qi3 = 1724,
+  CODE_FOR_uminv8qi3 = 1725,
+  CODE_FOR_smaxv16qi3 = 1726,
+  CODE_FOR_sminv16qi3 = 1727,
+  CODE_FOR_umaxv16qi3 = 1728,
+  CODE_FOR_uminv16qi3 = 1729,
+  CODE_FOR_smaxv4hi3 = 1730,
+  CODE_FOR_sminv4hi3 = 1731,
+  CODE_FOR_umaxv4hi3 = 1732,
+  CODE_FOR_uminv4hi3 = 1733,
+  CODE_FOR_smaxv8hi3 = 1734,
+  CODE_FOR_sminv8hi3 = 1735,
+  CODE_FOR_umaxv8hi3 = 1736,
+  CODE_FOR_uminv8hi3 = 1737,
+  CODE_FOR_smaxv2si3 = 1738,
+  CODE_FOR_sminv2si3 = 1739,
+  CODE_FOR_umaxv2si3 = 1740,
+  CODE_FOR_uminv2si3 = 1741,
+  CODE_FOR_smaxv4si3 = 1742,
+  CODE_FOR_sminv4si3 = 1743,
+  CODE_FOR_umaxv4si3 = 1744,
+  CODE_FOR_uminv4si3 = 1745,
+  CODE_FOR_aarch64_umaxpv8qi = 1746,
+  CODE_FOR_aarch64_uminpv8qi = 1747,
+  CODE_FOR_aarch64_smaxpv8qi = 1748,
+  CODE_FOR_aarch64_sminpv8qi = 1749,
+  CODE_FOR_aarch64_umaxpv16qi = 1750,
+  CODE_FOR_aarch64_uminpv16qi = 1751,
+  CODE_FOR_aarch64_smaxpv16qi = 1752,
+  CODE_FOR_aarch64_sminpv16qi = 1753,
+  CODE_FOR_aarch64_umaxpv4hi = 1754,
+  CODE_FOR_aarch64_uminpv4hi = 1755,
+  CODE_FOR_aarch64_smaxpv4hi = 1756,
+  CODE_FOR_aarch64_sminpv4hi = 1757,
+  CODE_FOR_aarch64_umaxpv8hi = 1758,
+  CODE_FOR_aarch64_uminpv8hi = 1759,
+  CODE_FOR_aarch64_smaxpv8hi = 1760,
+  CODE_FOR_aarch64_sminpv8hi = 1761,
+  CODE_FOR_aarch64_umaxpv2si = 1762,
+  CODE_FOR_aarch64_uminpv2si = 1763,
+  CODE_FOR_aarch64_smaxpv2si = 1764,
+  CODE_FOR_aarch64_sminpv2si = 1765,
+  CODE_FOR_aarch64_umaxpv4si = 1766,
+  CODE_FOR_aarch64_uminpv4si = 1767,
+  CODE_FOR_aarch64_smaxpv4si = 1768,
+  CODE_FOR_aarch64_sminpv4si = 1769,
+  CODE_FOR_aarch64_smax_nanpv4hf = 1770,
+  CODE_FOR_aarch64_smin_nanpv4hf = 1771,
+  CODE_FOR_aarch64_smaxpv4hf = 1772,
+  CODE_FOR_aarch64_sminpv4hf = 1773,
+  CODE_FOR_aarch64_smax_nanpv8hf = 1774,
+  CODE_FOR_aarch64_smin_nanpv8hf = 1775,
+  CODE_FOR_aarch64_smaxpv8hf = 1776,
+  CODE_FOR_aarch64_sminpv8hf = 1777,
+  CODE_FOR_aarch64_smax_nanpv2sf = 1778,
+  CODE_FOR_aarch64_smin_nanpv2sf = 1779,
+  CODE_FOR_aarch64_smaxpv2sf = 1780,
+  CODE_FOR_aarch64_sminpv2sf = 1781,
+  CODE_FOR_aarch64_smax_nanpv4sf = 1782,
+  CODE_FOR_aarch64_smin_nanpv4sf = 1783,
+  CODE_FOR_aarch64_smaxpv4sf = 1784,
+  CODE_FOR_aarch64_sminpv4sf = 1785,
+  CODE_FOR_aarch64_smax_nanpv2df = 1786,
+  CODE_FOR_aarch64_smin_nanpv2df = 1787,
+  CODE_FOR_aarch64_smaxpv2df = 1788,
+  CODE_FOR_aarch64_sminpv2df = 1789,
+  CODE_FOR_move_lo_quad_internal_v16qi = 1790,
+  CODE_FOR_move_lo_quad_internal_v8hi = 1791,
+  CODE_FOR_move_lo_quad_internal_v4si = 1792,
+  CODE_FOR_move_lo_quad_internal_v8hf = 1793,
+  CODE_FOR_move_lo_quad_internal_v4sf = 1794,
+  CODE_FOR_move_lo_quad_internal_v2di = 1795,
+  CODE_FOR_move_lo_quad_internal_v2df = 1796,
+  CODE_FOR_move_lo_quad_internal_be_v16qi = 1797,
+  CODE_FOR_move_lo_quad_internal_be_v8hi = 1798,
+  CODE_FOR_move_lo_quad_internal_be_v4si = 1799,
+  CODE_FOR_move_lo_quad_internal_be_v8hf = 1800,
+  CODE_FOR_move_lo_quad_internal_be_v4sf = 1801,
+  CODE_FOR_move_lo_quad_internal_be_v2di = 1802,
+  CODE_FOR_move_lo_quad_internal_be_v2df = 1803,
+  CODE_FOR_aarch64_simd_move_hi_quad_v16qi = 1804,
+  CODE_FOR_aarch64_simd_move_hi_quad_v8hi = 1805,
+  CODE_FOR_aarch64_simd_move_hi_quad_v4si = 1806,
+  CODE_FOR_aarch64_simd_move_hi_quad_v2di = 1807,
+  CODE_FOR_aarch64_simd_move_hi_quad_v8hf = 1808,
+  CODE_FOR_aarch64_simd_move_hi_quad_v4sf = 1809,
+  CODE_FOR_aarch64_simd_move_hi_quad_v2df = 1810,
+  CODE_FOR_aarch64_simd_move_hi_quad_be_v16qi = 1811,
+  CODE_FOR_aarch64_simd_move_hi_quad_be_v8hi = 1812,
+  CODE_FOR_aarch64_simd_move_hi_quad_be_v4si = 1813,
+  CODE_FOR_aarch64_simd_move_hi_quad_be_v2di = 1814,
+  CODE_FOR_aarch64_simd_move_hi_quad_be_v8hf = 1815,
+  CODE_FOR_aarch64_simd_move_hi_quad_be_v4sf = 1816,
+  CODE_FOR_aarch64_simd_move_hi_quad_be_v2df = 1817,
+  CODE_FOR_aarch64_simd_vec_pack_trunc_v8hi = 1818,
+  CODE_FOR_aarch64_simd_vec_pack_trunc_v4si = 1819,
+  CODE_FOR_aarch64_simd_vec_pack_trunc_v2di = 1820,
+  CODE_FOR_vec_pack_trunc_v8hi = 1821,
+  CODE_FOR_vec_pack_trunc_v4si = 1822,
+  CODE_FOR_vec_pack_trunc_v2di = 1823,
+  CODE_FOR_aarch64_simd_vec_unpacks_lo_v16qi = 1824,
+  CODE_FOR_aarch64_simd_vec_unpacku_lo_v16qi = 1825,
+  CODE_FOR_aarch64_simd_vec_unpacks_lo_v8hi = 1826,
+  CODE_FOR_aarch64_simd_vec_unpacku_lo_v8hi = 1827,
+  CODE_FOR_aarch64_simd_vec_unpacks_lo_v4si = 1828,
+  CODE_FOR_aarch64_simd_vec_unpacku_lo_v4si = 1829,
+  CODE_FOR_aarch64_simd_vec_unpacks_hi_v16qi = 1830,
+  CODE_FOR_aarch64_simd_vec_unpacku_hi_v16qi = 1831,
+  CODE_FOR_aarch64_simd_vec_unpacks_hi_v8hi = 1832,
+  CODE_FOR_aarch64_simd_vec_unpacku_hi_v8hi = 1833,
+  CODE_FOR_aarch64_simd_vec_unpacks_hi_v4si = 1834,
+  CODE_FOR_aarch64_simd_vec_unpacku_hi_v4si = 1835,
+  CODE_FOR_aarch64_simd_vec_smult_lo_v16qi = 1872,
+  CODE_FOR_aarch64_simd_vec_umult_lo_v16qi = 1873,
+  CODE_FOR_aarch64_simd_vec_smult_lo_v8hi = 1874,
+  CODE_FOR_aarch64_simd_vec_umult_lo_v8hi = 1875,
+  CODE_FOR_aarch64_simd_vec_smult_lo_v4si = 1876,
+  CODE_FOR_aarch64_simd_vec_umult_lo_v4si = 1877,
+  CODE_FOR_aarch64_simd_vec_smult_hi_v16qi = 1878,
+  CODE_FOR_aarch64_simd_vec_umult_hi_v16qi = 1879,
+  CODE_FOR_aarch64_simd_vec_smult_hi_v8hi = 1880,
+  CODE_FOR_aarch64_simd_vec_umult_hi_v8hi = 1881,
+  CODE_FOR_aarch64_simd_vec_smult_hi_v4si = 1882,
+  CODE_FOR_aarch64_simd_vec_umult_hi_v4si = 1883,
+  CODE_FOR_addv4hf3 = 1884,
+  CODE_FOR_addv8hf3 = 1885,
+  CODE_FOR_addv2sf3 = 1886,
+  CODE_FOR_addv4sf3 = 1887,
+  CODE_FOR_addv2df3 = 1888,
+  CODE_FOR_subv4hf3 = 1889,
+  CODE_FOR_subv8hf3 = 1890,
+  CODE_FOR_subv2sf3 = 1891,
+  CODE_FOR_subv4sf3 = 1892,
+  CODE_FOR_subv2df3 = 1893,
+  CODE_FOR_mulv4hf3 = 1894,
+  CODE_FOR_mulv8hf3 = 1895,
+  CODE_FOR_mulv2sf3 = 1896,
+  CODE_FOR_mulv4sf3 = 1897,
+  CODE_FOR_mulv2df3 = 1898,
+  CODE_FOR_negv4hf2 = 1904,
+  CODE_FOR_negv8hf2 = 1905,
+  CODE_FOR_negv2sf2 = 1906,
+  CODE_FOR_negv4sf2 = 1907,
+  CODE_FOR_negv2df2 = 1908,
+  CODE_FOR_absv4hf2 = 1909,
+  CODE_FOR_absv8hf2 = 1910,
+  CODE_FOR_absv2sf2 = 1911,
+  CODE_FOR_absv4sf2 = 1912,
+  CODE_FOR_absv2df2 = 1913,
+  CODE_FOR_fmav4hf4 = 1914,
+  CODE_FOR_fmav8hf4 = 1915,
+  CODE_FOR_fmav2sf4 = 1916,
+  CODE_FOR_fmav4sf4 = 1917,
+  CODE_FOR_fmav2df4 = 1918,
+  CODE_FOR_fnmav4hf4 = 1934,
+  CODE_FOR_fnmav8hf4 = 1935,
+  CODE_FOR_fnmav2sf4 = 1936,
+  CODE_FOR_fnmav4sf4 = 1937,
+  CODE_FOR_fnmav2df4 = 1938,
+  CODE_FOR_btruncv4hf2 = 1954,
+  CODE_FOR_ceilv4hf2 = 1955,
+  CODE_FOR_floorv4hf2 = 1956,
+  CODE_FOR_frintnv4hf2 = 1957,
+  CODE_FOR_nearbyintv4hf2 = 1958,
+  CODE_FOR_rintv4hf2 = 1959,
+  CODE_FOR_roundv4hf2 = 1960,
+  CODE_FOR_btruncv8hf2 = 1961,
+  CODE_FOR_ceilv8hf2 = 1962,
+  CODE_FOR_floorv8hf2 = 1963,
+  CODE_FOR_frintnv8hf2 = 1964,
+  CODE_FOR_nearbyintv8hf2 = 1965,
+  CODE_FOR_rintv8hf2 = 1966,
+  CODE_FOR_roundv8hf2 = 1967,
+  CODE_FOR_btruncv2sf2 = 1968,
+  CODE_FOR_ceilv2sf2 = 1969,
+  CODE_FOR_floorv2sf2 = 1970,
+  CODE_FOR_frintnv2sf2 = 1971,
+  CODE_FOR_nearbyintv2sf2 = 1972,
+  CODE_FOR_rintv2sf2 = 1973,
+  CODE_FOR_roundv2sf2 = 1974,
+  CODE_FOR_btruncv4sf2 = 1975,
+  CODE_FOR_ceilv4sf2 = 1976,
+  CODE_FOR_floorv4sf2 = 1977,
+  CODE_FOR_frintnv4sf2 = 1978,
+  CODE_FOR_nearbyintv4sf2 = 1979,
+  CODE_FOR_rintv4sf2 = 1980,
+  CODE_FOR_roundv4sf2 = 1981,
+  CODE_FOR_btruncv2df2 = 1982,
+  CODE_FOR_ceilv2df2 = 1983,
+  CODE_FOR_floorv2df2 = 1984,
+  CODE_FOR_frintnv2df2 = 1985,
+  CODE_FOR_nearbyintv2df2 = 1986,
+  CODE_FOR_rintv2df2 = 1987,
+  CODE_FOR_roundv2df2 = 1988,
+  CODE_FOR_lbtruncv4hfv4hi2 = 1989,
+  CODE_FOR_lceilv4hfv4hi2 = 1990,
+  CODE_FOR_lfloorv4hfv4hi2 = 1991,
+  CODE_FOR_lroundv4hfv4hi2 = 1992,
+  CODE_FOR_lfrintnv4hfv4hi2 = 1993,
+  CODE_FOR_lbtruncuv4hfv4hi2 = 1994,
+  CODE_FOR_lceiluv4hfv4hi2 = 1995,
+  CODE_FOR_lflooruv4hfv4hi2 = 1996,
+  CODE_FOR_lrounduv4hfv4hi2 = 1997,
+  CODE_FOR_lfrintnuv4hfv4hi2 = 1998,
+  CODE_FOR_lbtruncv8hfv8hi2 = 1999,
+  CODE_FOR_lceilv8hfv8hi2 = 2000,
+  CODE_FOR_lfloorv8hfv8hi2 = 2001,
+  CODE_FOR_lroundv8hfv8hi2 = 2002,
+  CODE_FOR_lfrintnv8hfv8hi2 = 2003,
+  CODE_FOR_lbtruncuv8hfv8hi2 = 2004,
+  CODE_FOR_lceiluv8hfv8hi2 = 2005,
+  CODE_FOR_lflooruv8hfv8hi2 = 2006,
+  CODE_FOR_lrounduv8hfv8hi2 = 2007,
+  CODE_FOR_lfrintnuv8hfv8hi2 = 2008,
+  CODE_FOR_lbtruncv2sfv2si2 = 2009,
+  CODE_FOR_lceilv2sfv2si2 = 2010,
+  CODE_FOR_lfloorv2sfv2si2 = 2011,
+  CODE_FOR_lroundv2sfv2si2 = 2012,
+  CODE_FOR_lfrintnv2sfv2si2 = 2013,
+  CODE_FOR_lbtruncuv2sfv2si2 = 2014,
+  CODE_FOR_lceiluv2sfv2si2 = 2015,
+  CODE_FOR_lflooruv2sfv2si2 = 2016,
+  CODE_FOR_lrounduv2sfv2si2 = 2017,
+  CODE_FOR_lfrintnuv2sfv2si2 = 2018,
+  CODE_FOR_lbtruncv4sfv4si2 = 2019,
+  CODE_FOR_lceilv4sfv4si2 = 2020,
+  CODE_FOR_lfloorv4sfv4si2 = 2021,
+  CODE_FOR_lroundv4sfv4si2 = 2022,
+  CODE_FOR_lfrintnv4sfv4si2 = 2023,
+  CODE_FOR_lbtruncuv4sfv4si2 = 2024,
+  CODE_FOR_lceiluv4sfv4si2 = 2025,
+  CODE_FOR_lflooruv4sfv4si2 = 2026,
+  CODE_FOR_lrounduv4sfv4si2 = 2027,
+  CODE_FOR_lfrintnuv4sfv4si2 = 2028,
+  CODE_FOR_lbtruncv2dfv2di2 = 2029,
+  CODE_FOR_lceilv2dfv2di2 = 2030,
+  CODE_FOR_lfloorv2dfv2di2 = 2031,
+  CODE_FOR_lroundv2dfv2di2 = 2032,
+  CODE_FOR_lfrintnv2dfv2di2 = 2033,
+  CODE_FOR_lbtruncuv2dfv2di2 = 2034,
+  CODE_FOR_lceiluv2dfv2di2 = 2035,
+  CODE_FOR_lflooruv2dfv2di2 = 2036,
+  CODE_FOR_lrounduv2dfv2di2 = 2037,
+  CODE_FOR_lfrintnuv2dfv2di2 = 2038,
+  CODE_FOR_lbtrunchfhi2 = 2039,
+  CODE_FOR_lceilhfhi2 = 2040,
+  CODE_FOR_lfloorhfhi2 = 2041,
+  CODE_FOR_lroundhfhi2 = 2042,
+  CODE_FOR_lfrintnhfhi2 = 2043,
+  CODE_FOR_lbtruncuhfhi2 = 2044,
+  CODE_FOR_lceiluhfhi2 = 2045,
+  CODE_FOR_lflooruhfhi2 = 2046,
+  CODE_FOR_lrounduhfhi2 = 2047,
+  CODE_FOR_lfrintnuhfhi2 = 2048,
+  CODE_FOR_fix_trunchfhi2 = 2049,
+  CODE_FOR_fixuns_trunchfhi2 = 2050,
+  CODE_FOR_floathihf2 = 2051,
+  CODE_FOR_floatunshihf2 = 2052,
+  CODE_FOR_floatv4hiv4hf2 = 2059,
+  CODE_FOR_floatunsv4hiv4hf2 = 2060,
+  CODE_FOR_floatv8hiv8hf2 = 2061,
+  CODE_FOR_floatunsv8hiv8hf2 = 2062,
+  CODE_FOR_floatv2siv2sf2 = 2063,
+  CODE_FOR_floatunsv2siv2sf2 = 2064,
+  CODE_FOR_floatv4siv4sf2 = 2065,
+  CODE_FOR_floatunsv4siv4sf2 = 2066,
+  CODE_FOR_floatv2div2df2 = 2067,
+  CODE_FOR_floatunsv2div2df2 = 2068,
+  CODE_FOR_aarch64_simd_vec_unpacks_lo_v8hf = 2069,
+  CODE_FOR_aarch64_simd_vec_unpacks_lo_v4sf = 2070,
+  CODE_FOR_fcvtzsv4hf3 = 2071,
+  CODE_FOR_fcvtzuv4hf3 = 2072,
+  CODE_FOR_fcvtzsv8hf3 = 2073,
+  CODE_FOR_fcvtzuv8hf3 = 2074,
+  CODE_FOR_fcvtzsv2sf3 = 2075,
+  CODE_FOR_fcvtzuv2sf3 = 2076,
+  CODE_FOR_fcvtzsv4sf3 = 2077,
+  CODE_FOR_fcvtzuv4sf3 = 2078,
+  CODE_FOR_fcvtzsv2df3 = 2079,
+  CODE_FOR_fcvtzuv2df3 = 2080,
+  CODE_FOR_scvtfv4hi3 = 2081,
+  CODE_FOR_ucvtfv4hi3 = 2082,
+  CODE_FOR_scvtfv8hi3 = 2083,
+  CODE_FOR_ucvtfv8hi3 = 2084,
+  CODE_FOR_scvtfv2si3 = 2085,
+  CODE_FOR_ucvtfv2si3 = 2086,
+  CODE_FOR_scvtfv4si3 = 2087,
+  CODE_FOR_ucvtfv4si3 = 2088,
+  CODE_FOR_scvtfv2di3 = 2089,
+  CODE_FOR_ucvtfv2di3 = 2090,
+  CODE_FOR_aarch64_simd_vec_unpacks_hi_v8hf = 2091,
+  CODE_FOR_aarch64_simd_vec_unpacks_hi_v4sf = 2092,
+  CODE_FOR_aarch64_float_extend_lo_v2df = 2093,
+  CODE_FOR_aarch64_float_extend_lo_v4sf = 2094,
+  CODE_FOR_aarch64_float_truncate_lo_v2sf = 2095,
+  CODE_FOR_aarch64_float_truncate_lo_v4hf = 2096,
+  CODE_FOR_aarch64_float_truncate_hi_v4sf_le = 2097,
+  CODE_FOR_aarch64_float_truncate_hi_v8hf_le = 2098,
+  CODE_FOR_aarch64_float_truncate_hi_v4sf_be = 2099,
+  CODE_FOR_aarch64_float_truncate_hi_v8hf_be = 2100,
+  CODE_FOR_smaxv4hf3 = 2101,
+  CODE_FOR_sminv4hf3 = 2102,
+  CODE_FOR_smaxv8hf3 = 2103,
+  CODE_FOR_sminv8hf3 = 2104,
+  CODE_FOR_smaxv2sf3 = 2105,
+  CODE_FOR_sminv2sf3 = 2106,
+  CODE_FOR_smaxv4sf3 = 2107,
+  CODE_FOR_sminv4sf3 = 2108,
+  CODE_FOR_smaxv2df3 = 2109,
+  CODE_FOR_sminv2df3 = 2110,
+  CODE_FOR_smax_nanv4hf3 = 2111,
+  CODE_FOR_smin_nanv4hf3 = 2112,
+  CODE_FOR_fmaxv4hf3 = 2113,
+  CODE_FOR_fminv4hf3 = 2114,
+  CODE_FOR_smax_nanv8hf3 = 2115,
+  CODE_FOR_smin_nanv8hf3 = 2116,
+  CODE_FOR_fmaxv8hf3 = 2117,
+  CODE_FOR_fminv8hf3 = 2118,
+  CODE_FOR_smax_nanv2sf3 = 2119,
+  CODE_FOR_smin_nanv2sf3 = 2120,
+  CODE_FOR_fmaxv2sf3 = 2121,
+  CODE_FOR_fminv2sf3 = 2122,
+  CODE_FOR_smax_nanv4sf3 = 2123,
+  CODE_FOR_smin_nanv4sf3 = 2124,
+  CODE_FOR_fmaxv4sf3 = 2125,
+  CODE_FOR_fminv4sf3 = 2126,
+  CODE_FOR_smax_nanv2df3 = 2127,
+  CODE_FOR_smin_nanv2df3 = 2128,
+  CODE_FOR_fmaxv2df3 = 2129,
+  CODE_FOR_fminv2df3 = 2130,
+  CODE_FOR_aarch64_faddpv4hf = 2131,
+  CODE_FOR_aarch64_faddpv8hf = 2132,
+  CODE_FOR_aarch64_faddpv2sf = 2133,
+  CODE_FOR_aarch64_faddpv4sf = 2134,
+  CODE_FOR_aarch64_faddpv2df = 2135,
+  CODE_FOR_aarch64_reduc_plus_internalv8qi = 2136,
+  CODE_FOR_aarch64_reduc_plus_internalv16qi = 2137,
+  CODE_FOR_aarch64_reduc_plus_internalv4hi = 2138,
+  CODE_FOR_aarch64_reduc_plus_internalv8hi = 2139,
+  CODE_FOR_aarch64_reduc_plus_internalv4si = 2140,
+  CODE_FOR_aarch64_reduc_plus_internalv2di = 2141,
+  CODE_FOR_aarch64_reduc_plus_internalv2si = 2142,
+  CODE_FOR_reduc_plus_scal_v2sf = 2143,
+  CODE_FOR_reduc_plus_scal_v2df = 2144,
+  CODE_FOR_clrsbv8qi2 = 2145,
+  CODE_FOR_clrsbv16qi2 = 2146,
+  CODE_FOR_clrsbv4hi2 = 2147,
+  CODE_FOR_clrsbv8hi2 = 2148,
+  CODE_FOR_clrsbv2si2 = 2149,
+  CODE_FOR_clrsbv4si2 = 2150,
+  CODE_FOR_clzv8qi2 = 2151,
+  CODE_FOR_clzv16qi2 = 2152,
+  CODE_FOR_clzv4hi2 = 2153,
+  CODE_FOR_clzv8hi2 = 2154,
+  CODE_FOR_clzv2si2 = 2155,
+  CODE_FOR_clzv4si2 = 2156,
+  CODE_FOR_popcountv8qi2 = 2157,
+  CODE_FOR_popcountv16qi2 = 2158,
+  CODE_FOR_aarch64_reduc_umax_internalv8qi = 2159,
+  CODE_FOR_aarch64_reduc_umin_internalv8qi = 2160,
+  CODE_FOR_aarch64_reduc_smax_internalv8qi = 2161,
+  CODE_FOR_aarch64_reduc_smin_internalv8qi = 2162,
+  CODE_FOR_aarch64_reduc_umax_internalv16qi = 2163,
+  CODE_FOR_aarch64_reduc_umin_internalv16qi = 2164,
+  CODE_FOR_aarch64_reduc_smax_internalv16qi = 2165,
+  CODE_FOR_aarch64_reduc_smin_internalv16qi = 2166,
+  CODE_FOR_aarch64_reduc_umax_internalv4hi = 2167,
+  CODE_FOR_aarch64_reduc_umin_internalv4hi = 2168,
+  CODE_FOR_aarch64_reduc_smax_internalv4hi = 2169,
+  CODE_FOR_aarch64_reduc_smin_internalv4hi = 2170,
+  CODE_FOR_aarch64_reduc_umax_internalv8hi = 2171,
+  CODE_FOR_aarch64_reduc_umin_internalv8hi = 2172,
+  CODE_FOR_aarch64_reduc_smax_internalv8hi = 2173,
+  CODE_FOR_aarch64_reduc_smin_internalv8hi = 2174,
+  CODE_FOR_aarch64_reduc_umax_internalv4si = 2175,
+  CODE_FOR_aarch64_reduc_umin_internalv4si = 2176,
+  CODE_FOR_aarch64_reduc_smax_internalv4si = 2177,
+  CODE_FOR_aarch64_reduc_smin_internalv4si = 2178,
+  CODE_FOR_aarch64_reduc_umax_internalv2si = 2179,
+  CODE_FOR_aarch64_reduc_umin_internalv2si = 2180,
+  CODE_FOR_aarch64_reduc_smax_internalv2si = 2181,
+  CODE_FOR_aarch64_reduc_smin_internalv2si = 2182,
+  CODE_FOR_aarch64_reduc_smax_nan_internalv4hf = 2183,
+  CODE_FOR_aarch64_reduc_smin_nan_internalv4hf = 2184,
+  CODE_FOR_aarch64_reduc_smax_internalv4hf = 2185,
+  CODE_FOR_aarch64_reduc_smin_internalv4hf = 2186,
+  CODE_FOR_aarch64_reduc_smax_nan_internalv8hf = 2187,
+  CODE_FOR_aarch64_reduc_smin_nan_internalv8hf = 2188,
+  CODE_FOR_aarch64_reduc_smax_internalv8hf = 2189,
+  CODE_FOR_aarch64_reduc_smin_internalv8hf = 2190,
+  CODE_FOR_aarch64_reduc_smax_nan_internalv2sf = 2191,
+  CODE_FOR_aarch64_reduc_smin_nan_internalv2sf = 2192,
+  CODE_FOR_aarch64_reduc_smax_internalv2sf = 2193,
+  CODE_FOR_aarch64_reduc_smin_internalv2sf = 2194,
+  CODE_FOR_aarch64_reduc_smax_nan_internalv4sf = 2195,
+  CODE_FOR_aarch64_reduc_smin_nan_internalv4sf = 2196,
+  CODE_FOR_aarch64_reduc_smax_internalv4sf = 2197,
+  CODE_FOR_aarch64_reduc_smin_internalv4sf = 2198,
+  CODE_FOR_aarch64_reduc_smax_nan_internalv2df = 2199,
+  CODE_FOR_aarch64_reduc_smin_nan_internalv2df = 2200,
+  CODE_FOR_aarch64_reduc_smax_internalv2df = 2201,
+  CODE_FOR_aarch64_reduc_smin_internalv2df = 2202,
+  CODE_FOR_aarch64_simd_bslv8qi_internal = 2203,
+  CODE_FOR_aarch64_simd_bslv16qi_internal = 2204,
+  CODE_FOR_aarch64_simd_bslv4hi_internal = 2205,
+  CODE_FOR_aarch64_simd_bslv8hi_internal = 2206,
+  CODE_FOR_aarch64_simd_bslv2si_internal = 2207,
+  CODE_FOR_aarch64_simd_bslv4si_internal = 2208,
+  CODE_FOR_aarch64_simd_bslv2di_internal = 2209,
+  CODE_FOR_aarch64_simd_bsldi_internal = 2217,
+  CODE_FOR_aarch64_simd_bsldi_alt = 2218,
+  CODE_FOR_aarch64_get_lanev8qi = 2235,
+  CODE_FOR_aarch64_get_lanev16qi = 2236,
+  CODE_FOR_aarch64_get_lanev4hi = 2237,
+  CODE_FOR_aarch64_get_lanev8hi = 2238,
+  CODE_FOR_aarch64_get_lanev2si = 2239,
+  CODE_FOR_aarch64_get_lanev4si = 2240,
+  CODE_FOR_aarch64_get_lanev2di = 2241,
+  CODE_FOR_aarch64_get_lanev4hf = 2242,
+  CODE_FOR_aarch64_get_lanev8hf = 2243,
+  CODE_FOR_aarch64_get_lanev2sf = 2244,
+  CODE_FOR_aarch64_get_lanev4sf = 2245,
+  CODE_FOR_aarch64_get_lanev2df = 2246,
+  CODE_FOR_load_pair_lanesv8qi = 2247,
+  CODE_FOR_load_pair_lanesv4hi = 2248,
+  CODE_FOR_load_pair_lanesv4hf = 2249,
+  CODE_FOR_load_pair_lanesv2si = 2250,
+  CODE_FOR_load_pair_lanesv2sf = 2251,
+  CODE_FOR_load_pair_lanesdi = 2252,
+  CODE_FOR_load_pair_lanesdf = 2253,
+  CODE_FOR_store_pair_lanesv8qi = 2254,
+  CODE_FOR_store_pair_lanesv4hi = 2255,
+  CODE_FOR_store_pair_lanesv4hf = 2256,
+  CODE_FOR_store_pair_lanesv2si = 2257,
+  CODE_FOR_store_pair_lanesv2sf = 2258,
+  CODE_FOR_store_pair_lanesdi = 2259,
+  CODE_FOR_store_pair_lanesdf = 2260,
+  CODE_FOR_aarch64_saddlv16qi_hi_internal = 2275,
+  CODE_FOR_aarch64_ssublv16qi_hi_internal = 2276,
+  CODE_FOR_aarch64_uaddlv16qi_hi_internal = 2277,
+  CODE_FOR_aarch64_usublv16qi_hi_internal = 2278,
+  CODE_FOR_aarch64_saddlv8hi_hi_internal = 2279,
+  CODE_FOR_aarch64_ssublv8hi_hi_internal = 2280,
+  CODE_FOR_aarch64_uaddlv8hi_hi_internal = 2281,
+  CODE_FOR_aarch64_usublv8hi_hi_internal = 2282,
+  CODE_FOR_aarch64_saddlv4si_hi_internal = 2283,
+  CODE_FOR_aarch64_ssublv4si_hi_internal = 2284,
+  CODE_FOR_aarch64_uaddlv4si_hi_internal = 2285,
+  CODE_FOR_aarch64_usublv4si_hi_internal = 2286,
+  CODE_FOR_aarch64_saddlv16qi_lo_internal = 2287,
+  CODE_FOR_aarch64_ssublv16qi_lo_internal = 2288,
+  CODE_FOR_aarch64_uaddlv16qi_lo_internal = 2289,
+  CODE_FOR_aarch64_usublv16qi_lo_internal = 2290,
+  CODE_FOR_aarch64_saddlv8hi_lo_internal = 2291,
+  CODE_FOR_aarch64_ssublv8hi_lo_internal = 2292,
+  CODE_FOR_aarch64_uaddlv8hi_lo_internal = 2293,
+  CODE_FOR_aarch64_usublv8hi_lo_internal = 2294,
+  CODE_FOR_aarch64_saddlv4si_lo_internal = 2295,
+  CODE_FOR_aarch64_ssublv4si_lo_internal = 2296,
+  CODE_FOR_aarch64_uaddlv4si_lo_internal = 2297,
+  CODE_FOR_aarch64_usublv4si_lo_internal = 2298,
+  CODE_FOR_aarch64_saddlv8qi = 2299,
+  CODE_FOR_aarch64_ssublv8qi = 2300,
+  CODE_FOR_aarch64_uaddlv8qi = 2301,
+  CODE_FOR_aarch64_usublv8qi = 2302,
+  CODE_FOR_aarch64_saddlv4hi = 2303,
+  CODE_FOR_aarch64_ssublv4hi = 2304,
+  CODE_FOR_aarch64_uaddlv4hi = 2305,
+  CODE_FOR_aarch64_usublv4hi = 2306,
+  CODE_FOR_aarch64_saddlv2si = 2307,
+  CODE_FOR_aarch64_ssublv2si = 2308,
+  CODE_FOR_aarch64_uaddlv2si = 2309,
+  CODE_FOR_aarch64_usublv2si = 2310,
+  CODE_FOR_aarch64_ssubwv8qi = 2311,
+  CODE_FOR_aarch64_usubwv8qi = 2312,
+  CODE_FOR_aarch64_ssubwv4hi = 2313,
+  CODE_FOR_aarch64_usubwv4hi = 2314,
+  CODE_FOR_aarch64_ssubwv2si = 2315,
+  CODE_FOR_aarch64_usubwv2si = 2316,
+  CODE_FOR_aarch64_ssubwv16qi_internal = 2317,
+  CODE_FOR_aarch64_usubwv16qi_internal = 2318,
+  CODE_FOR_aarch64_ssubwv8hi_internal = 2319,
+  CODE_FOR_aarch64_usubwv8hi_internal = 2320,
+  CODE_FOR_aarch64_ssubwv4si_internal = 2321,
+  CODE_FOR_aarch64_usubwv4si_internal = 2322,
+  CODE_FOR_aarch64_ssubw2v16qi_internal = 2323,
+  CODE_FOR_aarch64_usubw2v16qi_internal = 2324,
+  CODE_FOR_aarch64_ssubw2v8hi_internal = 2325,
+  CODE_FOR_aarch64_usubw2v8hi_internal = 2326,
+  CODE_FOR_aarch64_ssubw2v4si_internal = 2327,
+  CODE_FOR_aarch64_usubw2v4si_internal = 2328,
+  CODE_FOR_aarch64_saddwv8qi = 2329,
+  CODE_FOR_aarch64_uaddwv8qi = 2330,
+  CODE_FOR_aarch64_saddwv4hi = 2331,
+  CODE_FOR_aarch64_uaddwv4hi = 2332,
+  CODE_FOR_aarch64_saddwv2si = 2333,
+  CODE_FOR_aarch64_uaddwv2si = 2334,
+  CODE_FOR_aarch64_saddwv16qi_internal = 2335,
+  CODE_FOR_aarch64_uaddwv16qi_internal = 2336,
+  CODE_FOR_aarch64_saddwv8hi_internal = 2337,
+  CODE_FOR_aarch64_uaddwv8hi_internal = 2338,
+  CODE_FOR_aarch64_saddwv4si_internal = 2339,
+  CODE_FOR_aarch64_uaddwv4si_internal = 2340,
+  CODE_FOR_aarch64_saddw2v16qi_internal = 2341,
+  CODE_FOR_aarch64_uaddw2v16qi_internal = 2342,
+  CODE_FOR_aarch64_saddw2v8hi_internal = 2343,
+  CODE_FOR_aarch64_uaddw2v8hi_internal = 2344,
+  CODE_FOR_aarch64_saddw2v4si_internal = 2345,
+  CODE_FOR_aarch64_uaddw2v4si_internal = 2346,
+  CODE_FOR_aarch64_shaddv8qi = 2347,
+  CODE_FOR_aarch64_uhaddv8qi = 2348,
+  CODE_FOR_aarch64_srhaddv8qi = 2349,
+  CODE_FOR_aarch64_urhaddv8qi = 2350,
+  CODE_FOR_aarch64_shsubv8qi = 2351,
+  CODE_FOR_aarch64_uhsubv8qi = 2352,
+  CODE_FOR_aarch64_srhsubv8qi = 2353,
+  CODE_FOR_aarch64_urhsubv8qi = 2354,
+  CODE_FOR_aarch64_shaddv16qi = 2355,
+  CODE_FOR_aarch64_uhaddv16qi = 2356,
+  CODE_FOR_aarch64_srhaddv16qi = 2357,
+  CODE_FOR_aarch64_urhaddv16qi = 2358,
+  CODE_FOR_aarch64_shsubv16qi = 2359,
+  CODE_FOR_aarch64_uhsubv16qi = 2360,
+  CODE_FOR_aarch64_srhsubv16qi = 2361,
+  CODE_FOR_aarch64_urhsubv16qi = 2362,
+  CODE_FOR_aarch64_shaddv4hi = 2363,
+  CODE_FOR_aarch64_uhaddv4hi = 2364,
+  CODE_FOR_aarch64_srhaddv4hi = 2365,
+  CODE_FOR_aarch64_urhaddv4hi = 2366,
+  CODE_FOR_aarch64_shsubv4hi = 2367,
+  CODE_FOR_aarch64_uhsubv4hi = 2368,
+  CODE_FOR_aarch64_srhsubv4hi = 2369,
+  CODE_FOR_aarch64_urhsubv4hi = 2370,
+  CODE_FOR_aarch64_shaddv8hi = 2371,
+  CODE_FOR_aarch64_uhaddv8hi = 2372,
+  CODE_FOR_aarch64_srhaddv8hi = 2373,
+  CODE_FOR_aarch64_urhaddv8hi = 2374,
+  CODE_FOR_aarch64_shsubv8hi = 2375,
+  CODE_FOR_aarch64_uhsubv8hi = 2376,
+  CODE_FOR_aarch64_srhsubv8hi = 2377,
+  CODE_FOR_aarch64_urhsubv8hi = 2378,
+  CODE_FOR_aarch64_shaddv2si = 2379,
+  CODE_FOR_aarch64_uhaddv2si = 2380,
+  CODE_FOR_aarch64_srhaddv2si = 2381,
+  CODE_FOR_aarch64_urhaddv2si = 2382,
+  CODE_FOR_aarch64_shsubv2si = 2383,
+  CODE_FOR_aarch64_uhsubv2si = 2384,
+  CODE_FOR_aarch64_srhsubv2si = 2385,
+  CODE_FOR_aarch64_urhsubv2si = 2386,
+  CODE_FOR_aarch64_shaddv4si = 2387,
+  CODE_FOR_aarch64_uhaddv4si = 2388,
+  CODE_FOR_aarch64_srhaddv4si = 2389,
+  CODE_FOR_aarch64_urhaddv4si = 2390,
+  CODE_FOR_aarch64_shsubv4si = 2391,
+  CODE_FOR_aarch64_uhsubv4si = 2392,
+  CODE_FOR_aarch64_srhsubv4si = 2393,
+  CODE_FOR_aarch64_urhsubv4si = 2394,
+  CODE_FOR_aarch64_addhnv8hi = 2395,
+  CODE_FOR_aarch64_raddhnv8hi = 2396,
+  CODE_FOR_aarch64_subhnv8hi = 2397,
+  CODE_FOR_aarch64_rsubhnv8hi = 2398,
+  CODE_FOR_aarch64_addhnv4si = 2399,
+  CODE_FOR_aarch64_raddhnv4si = 2400,
+  CODE_FOR_aarch64_subhnv4si = 2401,
+  CODE_FOR_aarch64_rsubhnv4si = 2402,
+  CODE_FOR_aarch64_addhnv2di = 2403,
+  CODE_FOR_aarch64_raddhnv2di = 2404,
+  CODE_FOR_aarch64_subhnv2di = 2405,
+  CODE_FOR_aarch64_rsubhnv2di = 2406,
+  CODE_FOR_aarch64_addhn2v8hi = 2407,
+  CODE_FOR_aarch64_raddhn2v8hi = 2408,
+  CODE_FOR_aarch64_subhn2v8hi = 2409,
+  CODE_FOR_aarch64_rsubhn2v8hi = 2410,
+  CODE_FOR_aarch64_addhn2v4si = 2411,
+  CODE_FOR_aarch64_raddhn2v4si = 2412,
+  CODE_FOR_aarch64_subhn2v4si = 2413,
+  CODE_FOR_aarch64_rsubhn2v4si = 2414,
+  CODE_FOR_aarch64_addhn2v2di = 2415,
+  CODE_FOR_aarch64_raddhn2v2di = 2416,
+  CODE_FOR_aarch64_subhn2v2di = 2417,
+  CODE_FOR_aarch64_rsubhn2v2di = 2418,
+  CODE_FOR_aarch64_pmulv8qi = 2419,
+  CODE_FOR_aarch64_pmulv16qi = 2420,
+  CODE_FOR_aarch64_fmulxv4hf = 2421,
+  CODE_FOR_aarch64_fmulxv8hf = 2422,
+  CODE_FOR_aarch64_fmulxv2sf = 2423,
+  CODE_FOR_aarch64_fmulxv4sf = 2424,
+  CODE_FOR_aarch64_fmulxv2df = 2425,
+  CODE_FOR_aarch64_fmulxhf = 2426,
+  CODE_FOR_aarch64_fmulxsf = 2427,
+  CODE_FOR_aarch64_fmulxdf = 2428,
+  CODE_FOR_aarch64_sqaddv8qi = 2442,
+  CODE_FOR_aarch64_uqaddv8qi = 2443,
+  CODE_FOR_aarch64_sqsubv8qi = 2444,
+  CODE_FOR_aarch64_uqsubv8qi = 2445,
+  CODE_FOR_aarch64_sqaddv16qi = 2446,
+  CODE_FOR_aarch64_uqaddv16qi = 2447,
+  CODE_FOR_aarch64_sqsubv16qi = 2448,
+  CODE_FOR_aarch64_uqsubv16qi = 2449,
+  CODE_FOR_aarch64_sqaddv4hi = 2450,
+  CODE_FOR_aarch64_uqaddv4hi = 2451,
+  CODE_FOR_aarch64_sqsubv4hi = 2452,
+  CODE_FOR_aarch64_uqsubv4hi = 2453,
+  CODE_FOR_aarch64_sqaddv8hi = 2454,
+  CODE_FOR_aarch64_uqaddv8hi = 2455,
+  CODE_FOR_aarch64_sqsubv8hi = 2456,
+  CODE_FOR_aarch64_uqsubv8hi = 2457,
+  CODE_FOR_aarch64_sqaddv2si = 2458,
+  CODE_FOR_aarch64_uqaddv2si = 2459,
+  CODE_FOR_aarch64_sqsubv2si = 2460,
+  CODE_FOR_aarch64_uqsubv2si = 2461,
+  CODE_FOR_aarch64_sqaddv4si = 2462,
+  CODE_FOR_aarch64_uqaddv4si = 2463,
+  CODE_FOR_aarch64_sqsubv4si = 2464,
+  CODE_FOR_aarch64_uqsubv4si = 2465,
+  CODE_FOR_aarch64_sqaddv2di = 2466,
+  CODE_FOR_aarch64_uqaddv2di = 2467,
+  CODE_FOR_aarch64_sqsubv2di = 2468,
+  CODE_FOR_aarch64_uqsubv2di = 2469,
+  CODE_FOR_aarch64_sqaddqi = 2470,
+  CODE_FOR_aarch64_uqaddqi = 2471,
+  CODE_FOR_aarch64_sqsubqi = 2472,
+  CODE_FOR_aarch64_uqsubqi = 2473,
+  CODE_FOR_aarch64_sqaddhi = 2474,
+  CODE_FOR_aarch64_uqaddhi = 2475,
+  CODE_FOR_aarch64_sqsubhi = 2476,
+  CODE_FOR_aarch64_uqsubhi = 2477,
+  CODE_FOR_aarch64_sqaddsi = 2478,
+  CODE_FOR_aarch64_uqaddsi = 2479,
+  CODE_FOR_aarch64_sqsubsi = 2480,
+  CODE_FOR_aarch64_uqsubsi = 2481,
+  CODE_FOR_aarch64_sqadddi = 2482,
+  CODE_FOR_aarch64_uqadddi = 2483,
+  CODE_FOR_aarch64_sqsubdi = 2484,
+  CODE_FOR_aarch64_uqsubdi = 2485,
+  CODE_FOR_aarch64_suqaddv8qi = 2486,
+  CODE_FOR_aarch64_usqaddv8qi = 2487,
+  CODE_FOR_aarch64_suqaddv16qi = 2488,
+  CODE_FOR_aarch64_usqaddv16qi = 2489,
+  CODE_FOR_aarch64_suqaddv4hi = 2490,
+  CODE_FOR_aarch64_usqaddv4hi = 2491,
+  CODE_FOR_aarch64_suqaddv8hi = 2492,
+  CODE_FOR_aarch64_usqaddv8hi = 2493,
+  CODE_FOR_aarch64_suqaddv2si = 2494,
+  CODE_FOR_aarch64_usqaddv2si = 2495,
+  CODE_FOR_aarch64_suqaddv4si = 2496,
+  CODE_FOR_aarch64_usqaddv4si = 2497,
+  CODE_FOR_aarch64_suqaddv2di = 2498,
+  CODE_FOR_aarch64_usqaddv2di = 2499,
+  CODE_FOR_aarch64_suqaddqi = 2500,
+  CODE_FOR_aarch64_usqaddqi = 2501,
+  CODE_FOR_aarch64_suqaddhi = 2502,
+  CODE_FOR_aarch64_usqaddhi = 2503,
+  CODE_FOR_aarch64_suqaddsi = 2504,
+  CODE_FOR_aarch64_usqaddsi = 2505,
+  CODE_FOR_aarch64_suqadddi = 2506,
+  CODE_FOR_aarch64_usqadddi = 2507,
+  CODE_FOR_aarch64_sqmovunv8hi = 2508,
+  CODE_FOR_aarch64_sqmovunv4si = 2509,
+  CODE_FOR_aarch64_sqmovunv2di = 2510,
+  CODE_FOR_aarch64_sqmovunhi = 2511,
+  CODE_FOR_aarch64_sqmovunsi = 2512,
+  CODE_FOR_aarch64_sqmovundi = 2513,
+  CODE_FOR_aarch64_sqmovnv8hi = 2514,
+  CODE_FOR_aarch64_uqmovnv8hi = 2515,
+  CODE_FOR_aarch64_sqmovnv4si = 2516,
+  CODE_FOR_aarch64_uqmovnv4si = 2517,
+  CODE_FOR_aarch64_sqmovnv2di = 2518,
+  CODE_FOR_aarch64_uqmovnv2di = 2519,
+  CODE_FOR_aarch64_sqmovnhi = 2520,
+  CODE_FOR_aarch64_uqmovnhi = 2521,
+  CODE_FOR_aarch64_sqmovnsi = 2522,
+  CODE_FOR_aarch64_uqmovnsi = 2523,
+  CODE_FOR_aarch64_sqmovndi = 2524,
+  CODE_FOR_aarch64_uqmovndi = 2525,
+  CODE_FOR_aarch64_sqnegv8qi = 2526,
+  CODE_FOR_aarch64_sqabsv8qi = 2527,
+  CODE_FOR_aarch64_sqnegv16qi = 2528,
+  CODE_FOR_aarch64_sqabsv16qi = 2529,
+  CODE_FOR_aarch64_sqnegv4hi = 2530,
+  CODE_FOR_aarch64_sqabsv4hi = 2531,
+  CODE_FOR_aarch64_sqnegv8hi = 2532,
+  CODE_FOR_aarch64_sqabsv8hi = 2533,
+  CODE_FOR_aarch64_sqnegv2si = 2534,
+  CODE_FOR_aarch64_sqabsv2si = 2535,
+  CODE_FOR_aarch64_sqnegv4si = 2536,
+  CODE_FOR_aarch64_sqabsv4si = 2537,
+  CODE_FOR_aarch64_sqnegv2di = 2538,
+  CODE_FOR_aarch64_sqabsv2di = 2539,
+  CODE_FOR_aarch64_sqnegqi = 2540,
+  CODE_FOR_aarch64_sqabsqi = 2541,
+  CODE_FOR_aarch64_sqneghi = 2542,
+  CODE_FOR_aarch64_sqabshi = 2543,
+  CODE_FOR_aarch64_sqnegsi = 2544,
+  CODE_FOR_aarch64_sqabssi = 2545,
+  CODE_FOR_aarch64_sqnegdi = 2546,
+  CODE_FOR_aarch64_sqabsdi = 2547,
+  CODE_FOR_aarch64_sqdmulhv4hi = 2548,
+  CODE_FOR_aarch64_sqrdmulhv4hi = 2549,
+  CODE_FOR_aarch64_sqdmulhv8hi = 2550,
+  CODE_FOR_aarch64_sqrdmulhv8hi = 2551,
+  CODE_FOR_aarch64_sqdmulhv2si = 2552,
+  CODE_FOR_aarch64_sqrdmulhv2si = 2553,
+  CODE_FOR_aarch64_sqdmulhv4si = 2554,
+  CODE_FOR_aarch64_sqrdmulhv4si = 2555,
+  CODE_FOR_aarch64_sqdmulhhi = 2556,
+  CODE_FOR_aarch64_sqrdmulhhi = 2557,
+  CODE_FOR_aarch64_sqdmulhsi = 2558,
+  CODE_FOR_aarch64_sqrdmulhsi = 2559,
+  CODE_FOR_aarch64_sqdmulh_lanev4hi = 2560,
+  CODE_FOR_aarch64_sqrdmulh_lanev4hi = 2561,
+  CODE_FOR_aarch64_sqdmulh_lanev8hi = 2562,
+  CODE_FOR_aarch64_sqrdmulh_lanev8hi = 2563,
+  CODE_FOR_aarch64_sqdmulh_lanev2si = 2564,
+  CODE_FOR_aarch64_sqrdmulh_lanev2si = 2565,
+  CODE_FOR_aarch64_sqdmulh_lanev4si = 2566,
+  CODE_FOR_aarch64_sqrdmulh_lanev4si = 2567,
+  CODE_FOR_aarch64_sqdmulh_laneqv4hi = 2568,
+  CODE_FOR_aarch64_sqrdmulh_laneqv4hi = 2569,
+  CODE_FOR_aarch64_sqdmulh_laneqv8hi = 2570,
+  CODE_FOR_aarch64_sqrdmulh_laneqv8hi = 2571,
+  CODE_FOR_aarch64_sqdmulh_laneqv2si = 2572,
+  CODE_FOR_aarch64_sqrdmulh_laneqv2si = 2573,
+  CODE_FOR_aarch64_sqdmulh_laneqv4si = 2574,
+  CODE_FOR_aarch64_sqrdmulh_laneqv4si = 2575,
+  CODE_FOR_aarch64_sqdmulh_lanehi = 2576,
+  CODE_FOR_aarch64_sqrdmulh_lanehi = 2577,
+  CODE_FOR_aarch64_sqdmulh_lanesi = 2578,
+  CODE_FOR_aarch64_sqrdmulh_lanesi = 2579,
+  CODE_FOR_aarch64_sqdmulh_laneqhi = 2580,
+  CODE_FOR_aarch64_sqrdmulh_laneqhi = 2581,
+  CODE_FOR_aarch64_sqdmulh_laneqsi = 2582,
+  CODE_FOR_aarch64_sqrdmulh_laneqsi = 2583,
+  CODE_FOR_aarch64_sqrdmlahv4hi = 2584,
+  CODE_FOR_aarch64_sqrdmlshv4hi = 2585,
+  CODE_FOR_aarch64_sqrdmlahv8hi = 2586,
+  CODE_FOR_aarch64_sqrdmlshv8hi = 2587,
+  CODE_FOR_aarch64_sqrdmlahv2si = 2588,
+  CODE_FOR_aarch64_sqrdmlshv2si = 2589,
+  CODE_FOR_aarch64_sqrdmlahv4si = 2590,
+  CODE_FOR_aarch64_sqrdmlshv4si = 2591,
+  CODE_FOR_aarch64_sqrdmlahhi = 2592,
+  CODE_FOR_aarch64_sqrdmlshhi = 2593,
+  CODE_FOR_aarch64_sqrdmlahsi = 2594,
+  CODE_FOR_aarch64_sqrdmlshsi = 2595,
+  CODE_FOR_aarch64_sqrdmlah_lanev4hi = 2596,
+  CODE_FOR_aarch64_sqrdmlsh_lanev4hi = 2597,
+  CODE_FOR_aarch64_sqrdmlah_lanev8hi = 2598,
+  CODE_FOR_aarch64_sqrdmlsh_lanev8hi = 2599,
+  CODE_FOR_aarch64_sqrdmlah_lanev2si = 2600,
+  CODE_FOR_aarch64_sqrdmlsh_lanev2si = 2601,
+  CODE_FOR_aarch64_sqrdmlah_lanev4si = 2602,
+  CODE_FOR_aarch64_sqrdmlsh_lanev4si = 2603,
+  CODE_FOR_aarch64_sqrdmlah_lanehi = 2604,
+  CODE_FOR_aarch64_sqrdmlsh_lanehi = 2605,
+  CODE_FOR_aarch64_sqrdmlah_lanesi = 2606,
+  CODE_FOR_aarch64_sqrdmlsh_lanesi = 2607,
+  CODE_FOR_aarch64_sqrdmlah_laneqv4hi = 2608,
+  CODE_FOR_aarch64_sqrdmlsh_laneqv4hi = 2609,
+  CODE_FOR_aarch64_sqrdmlah_laneqv8hi = 2610,
+  CODE_FOR_aarch64_sqrdmlsh_laneqv8hi = 2611,
+  CODE_FOR_aarch64_sqrdmlah_laneqv2si = 2612,
+  CODE_FOR_aarch64_sqrdmlsh_laneqv2si = 2613,
+  CODE_FOR_aarch64_sqrdmlah_laneqv4si = 2614,
+  CODE_FOR_aarch64_sqrdmlsh_laneqv4si = 2615,
+  CODE_FOR_aarch64_sqrdmlah_laneqhi = 2616,
+  CODE_FOR_aarch64_sqrdmlsh_laneqhi = 2617,
+  CODE_FOR_aarch64_sqrdmlah_laneqsi = 2618,
+  CODE_FOR_aarch64_sqrdmlsh_laneqsi = 2619,
+  CODE_FOR_aarch64_sqdmlalv4hi = 2620,
+  CODE_FOR_aarch64_sqdmlslv4hi = 2621,
+  CODE_FOR_aarch64_sqdmlalv2si = 2622,
+  CODE_FOR_aarch64_sqdmlslv2si = 2623,
+  CODE_FOR_aarch64_sqdmlalhi = 2624,
+  CODE_FOR_aarch64_sqdmlslhi = 2625,
+  CODE_FOR_aarch64_sqdmlalsi = 2626,
+  CODE_FOR_aarch64_sqdmlslsi = 2627,
+  CODE_FOR_aarch64_sqdmlal_lanev4hi = 2628,
+  CODE_FOR_aarch64_sqdmlsl_lanev4hi = 2629,
+  CODE_FOR_aarch64_sqdmlal_lanev2si = 2630,
+  CODE_FOR_aarch64_sqdmlsl_lanev2si = 2631,
+  CODE_FOR_aarch64_sqdmlal_laneqv4hi = 2632,
+  CODE_FOR_aarch64_sqdmlsl_laneqv4hi = 2633,
+  CODE_FOR_aarch64_sqdmlal_laneqv2si = 2634,
+  CODE_FOR_aarch64_sqdmlsl_laneqv2si = 2635,
+  CODE_FOR_aarch64_sqdmlal_lanehi = 2636,
+  CODE_FOR_aarch64_sqdmlsl_lanehi = 2637,
+  CODE_FOR_aarch64_sqdmlal_lanesi = 2638,
+  CODE_FOR_aarch64_sqdmlsl_lanesi = 2639,
+  CODE_FOR_aarch64_sqdmlal_laneqhi = 2640,
+  CODE_FOR_aarch64_sqdmlsl_laneqhi = 2641,
+  CODE_FOR_aarch64_sqdmlal_laneqsi = 2642,
+  CODE_FOR_aarch64_sqdmlsl_laneqsi = 2643,
+  CODE_FOR_aarch64_sqdmlal_nv4hi = 2644,
+  CODE_FOR_aarch64_sqdmlsl_nv4hi = 2645,
+  CODE_FOR_aarch64_sqdmlal_nv2si = 2646,
+  CODE_FOR_aarch64_sqdmlsl_nv2si = 2647,
+  CODE_FOR_aarch64_sqdmlal2v8hi_internal = 2648,
+  CODE_FOR_aarch64_sqdmlsl2v8hi_internal = 2649,
+  CODE_FOR_aarch64_sqdmlal2v4si_internal = 2650,
+  CODE_FOR_aarch64_sqdmlsl2v4si_internal = 2651,
+  CODE_FOR_aarch64_sqdmlal2_lanev8hi_internal = 2652,
+  CODE_FOR_aarch64_sqdmlsl2_lanev8hi_internal = 2653,
+  CODE_FOR_aarch64_sqdmlal2_lanev4si_internal = 2654,
+  CODE_FOR_aarch64_sqdmlsl2_lanev4si_internal = 2655,
+  CODE_FOR_aarch64_sqdmlal2_laneqv8hi_internal = 2656,
+  CODE_FOR_aarch64_sqdmlsl2_laneqv8hi_internal = 2657,
+  CODE_FOR_aarch64_sqdmlal2_laneqv4si_internal = 2658,
+  CODE_FOR_aarch64_sqdmlsl2_laneqv4si_internal = 2659,
+  CODE_FOR_aarch64_sqdmlal2_nv8hi_internal = 2660,
+  CODE_FOR_aarch64_sqdmlsl2_nv8hi_internal = 2661,
+  CODE_FOR_aarch64_sqdmlal2_nv4si_internal = 2662,
+  CODE_FOR_aarch64_sqdmlsl2_nv4si_internal = 2663,
+  CODE_FOR_aarch64_sqdmullv4hi = 2664,
+  CODE_FOR_aarch64_sqdmullv2si = 2665,
+  CODE_FOR_aarch64_sqdmullhi = 2666,
+  CODE_FOR_aarch64_sqdmullsi = 2667,
+  CODE_FOR_aarch64_sqdmull_lanev4hi = 2668,
+  CODE_FOR_aarch64_sqdmull_lanev2si = 2669,
+  CODE_FOR_aarch64_sqdmull_laneqv4hi = 2670,
+  CODE_FOR_aarch64_sqdmull_laneqv2si = 2671,
+  CODE_FOR_aarch64_sqdmull_lanehi = 2672,
+  CODE_FOR_aarch64_sqdmull_lanesi = 2673,
+  CODE_FOR_aarch64_sqdmull_laneqhi = 2674,
+  CODE_FOR_aarch64_sqdmull_laneqsi = 2675,
+  CODE_FOR_aarch64_sqdmull_nv4hi = 2676,
+  CODE_FOR_aarch64_sqdmull_nv2si = 2677,
+  CODE_FOR_aarch64_sqdmull2v8hi_internal = 2678,
+  CODE_FOR_aarch64_sqdmull2v4si_internal = 2679,
+  CODE_FOR_aarch64_sqdmull2_lanev8hi_internal = 2680,
+  CODE_FOR_aarch64_sqdmull2_lanev4si_internal = 2681,
+  CODE_FOR_aarch64_sqdmull2_laneqv8hi_internal = 2682,
+  CODE_FOR_aarch64_sqdmull2_laneqv4si_internal = 2683,
+  CODE_FOR_aarch64_sqdmull2_nv8hi_internal = 2684,
+  CODE_FOR_aarch64_sqdmull2_nv4si_internal = 2685,
+  CODE_FOR_aarch64_sshlv8qi = 2686,
+  CODE_FOR_aarch64_ushlv8qi = 2687,
+  CODE_FOR_aarch64_srshlv8qi = 2688,
+  CODE_FOR_aarch64_urshlv8qi = 2689,
+  CODE_FOR_aarch64_sshlv16qi = 2690,
+  CODE_FOR_aarch64_ushlv16qi = 2691,
+  CODE_FOR_aarch64_srshlv16qi = 2692,
+  CODE_FOR_aarch64_urshlv16qi = 2693,
+  CODE_FOR_aarch64_sshlv4hi = 2694,
+  CODE_FOR_aarch64_ushlv4hi = 2695,
+  CODE_FOR_aarch64_srshlv4hi = 2696,
+  CODE_FOR_aarch64_urshlv4hi = 2697,
+  CODE_FOR_aarch64_sshlv8hi = 2698,
+  CODE_FOR_aarch64_ushlv8hi = 2699,
+  CODE_FOR_aarch64_srshlv8hi = 2700,
+  CODE_FOR_aarch64_urshlv8hi = 2701,
+  CODE_FOR_aarch64_sshlv2si = 2702,
+  CODE_FOR_aarch64_ushlv2si = 2703,
+  CODE_FOR_aarch64_srshlv2si = 2704,
+  CODE_FOR_aarch64_urshlv2si = 2705,
+  CODE_FOR_aarch64_sshlv4si = 2706,
+  CODE_FOR_aarch64_ushlv4si = 2707,
+  CODE_FOR_aarch64_srshlv4si = 2708,
+  CODE_FOR_aarch64_urshlv4si = 2709,
+  CODE_FOR_aarch64_sshlv2di = 2710,
+  CODE_FOR_aarch64_ushlv2di = 2711,
+  CODE_FOR_aarch64_srshlv2di = 2712,
+  CODE_FOR_aarch64_urshlv2di = 2713,
+  CODE_FOR_aarch64_sshldi = 2714,
+  CODE_FOR_aarch64_ushldi = 2715,
+  CODE_FOR_aarch64_srshldi = 2716,
+  CODE_FOR_aarch64_urshldi = 2717,
+  CODE_FOR_aarch64_sqshlv8qi = 2718,
+  CODE_FOR_aarch64_uqshlv8qi = 2719,
+  CODE_FOR_aarch64_sqrshlv8qi = 2720,
+  CODE_FOR_aarch64_uqrshlv8qi = 2721,
+  CODE_FOR_aarch64_sqshlv16qi = 2722,
+  CODE_FOR_aarch64_uqshlv16qi = 2723,
+  CODE_FOR_aarch64_sqrshlv16qi = 2724,
+  CODE_FOR_aarch64_uqrshlv16qi = 2725,
+  CODE_FOR_aarch64_sqshlv4hi = 2726,
+  CODE_FOR_aarch64_uqshlv4hi = 2727,
+  CODE_FOR_aarch64_sqrshlv4hi = 2728,
+  CODE_FOR_aarch64_uqrshlv4hi = 2729,
+  CODE_FOR_aarch64_sqshlv8hi = 2730,
+  CODE_FOR_aarch64_uqshlv8hi = 2731,
+  CODE_FOR_aarch64_sqrshlv8hi = 2732,
+  CODE_FOR_aarch64_uqrshlv8hi = 2733,
+  CODE_FOR_aarch64_sqshlv2si = 2734,
+  CODE_FOR_aarch64_uqshlv2si = 2735,
+  CODE_FOR_aarch64_sqrshlv2si = 2736,
+  CODE_FOR_aarch64_uqrshlv2si = 2737,
+  CODE_FOR_aarch64_sqshlv4si = 2738,
+  CODE_FOR_aarch64_uqshlv4si = 2739,
+  CODE_FOR_aarch64_sqrshlv4si = 2740,
+  CODE_FOR_aarch64_uqrshlv4si = 2741,
+  CODE_FOR_aarch64_sqshlv2di = 2742,
+  CODE_FOR_aarch64_uqshlv2di = 2743,
+  CODE_FOR_aarch64_sqrshlv2di = 2744,
+  CODE_FOR_aarch64_uqrshlv2di = 2745,
+  CODE_FOR_aarch64_sqshlqi = 2746,
+  CODE_FOR_aarch64_uqshlqi = 2747,
+  CODE_FOR_aarch64_sqrshlqi = 2748,
+  CODE_FOR_aarch64_uqrshlqi = 2749,
+  CODE_FOR_aarch64_sqshlhi = 2750,
+  CODE_FOR_aarch64_uqshlhi = 2751,
+  CODE_FOR_aarch64_sqrshlhi = 2752,
+  CODE_FOR_aarch64_uqrshlhi = 2753,
+  CODE_FOR_aarch64_sqshlsi = 2754,
+  CODE_FOR_aarch64_uqshlsi = 2755,
+  CODE_FOR_aarch64_sqrshlsi = 2756,
+  CODE_FOR_aarch64_uqrshlsi = 2757,
+  CODE_FOR_aarch64_sqshldi = 2758,
+  CODE_FOR_aarch64_uqshldi = 2759,
+  CODE_FOR_aarch64_sqrshldi = 2760,
+  CODE_FOR_aarch64_uqrshldi = 2761,
+  CODE_FOR_aarch64_sshll_nv8qi = 2762,
+  CODE_FOR_aarch64_ushll_nv8qi = 2763,
+  CODE_FOR_aarch64_sshll_nv4hi = 2764,
+  CODE_FOR_aarch64_ushll_nv4hi = 2765,
+  CODE_FOR_aarch64_sshll_nv2si = 2766,
+  CODE_FOR_aarch64_ushll_nv2si = 2767,
+  CODE_FOR_aarch64_sshll2_nv16qi = 2768,
+  CODE_FOR_aarch64_ushll2_nv16qi = 2769,
+  CODE_FOR_aarch64_sshll2_nv8hi = 2770,
+  CODE_FOR_aarch64_ushll2_nv8hi = 2771,
+  CODE_FOR_aarch64_sshll2_nv4si = 2772,
+  CODE_FOR_aarch64_ushll2_nv4si = 2773,
+  CODE_FOR_aarch64_srshr_nv8qi = 2774,
+  CODE_FOR_aarch64_urshr_nv8qi = 2775,
+  CODE_FOR_aarch64_srshr_nv16qi = 2776,
+  CODE_FOR_aarch64_urshr_nv16qi = 2777,
+  CODE_FOR_aarch64_srshr_nv4hi = 2778,
+  CODE_FOR_aarch64_urshr_nv4hi = 2779,
+  CODE_FOR_aarch64_srshr_nv8hi = 2780,
+  CODE_FOR_aarch64_urshr_nv8hi = 2781,
+  CODE_FOR_aarch64_srshr_nv2si = 2782,
+  CODE_FOR_aarch64_urshr_nv2si = 2783,
+  CODE_FOR_aarch64_srshr_nv4si = 2784,
+  CODE_FOR_aarch64_urshr_nv4si = 2785,
+  CODE_FOR_aarch64_srshr_nv2di = 2786,
+  CODE_FOR_aarch64_urshr_nv2di = 2787,
+  CODE_FOR_aarch64_srshr_ndi = 2788,
+  CODE_FOR_aarch64_urshr_ndi = 2789,
+  CODE_FOR_aarch64_ssra_nv8qi = 2790,
+  CODE_FOR_aarch64_usra_nv8qi = 2791,
+  CODE_FOR_aarch64_srsra_nv8qi = 2792,
+  CODE_FOR_aarch64_ursra_nv8qi = 2793,
+  CODE_FOR_aarch64_ssra_nv16qi = 2794,
+  CODE_FOR_aarch64_usra_nv16qi = 2795,
+  CODE_FOR_aarch64_srsra_nv16qi = 2796,
+  CODE_FOR_aarch64_ursra_nv16qi = 2797,
+  CODE_FOR_aarch64_ssra_nv4hi = 2798,
+  CODE_FOR_aarch64_usra_nv4hi = 2799,
+  CODE_FOR_aarch64_srsra_nv4hi = 2800,
+  CODE_FOR_aarch64_ursra_nv4hi = 2801,
+  CODE_FOR_aarch64_ssra_nv8hi = 2802,
+  CODE_FOR_aarch64_usra_nv8hi = 2803,
+  CODE_FOR_aarch64_srsra_nv8hi = 2804,
+  CODE_FOR_aarch64_ursra_nv8hi = 2805,
+  CODE_FOR_aarch64_ssra_nv2si = 2806,
+  CODE_FOR_aarch64_usra_nv2si = 2807,
+  CODE_FOR_aarch64_srsra_nv2si = 2808,
+  CODE_FOR_aarch64_ursra_nv2si = 2809,
+  CODE_FOR_aarch64_ssra_nv4si = 2810,
+  CODE_FOR_aarch64_usra_nv4si = 2811,
+  CODE_FOR_aarch64_srsra_nv4si = 2812,
+  CODE_FOR_aarch64_ursra_nv4si = 2813,
+  CODE_FOR_aarch64_ssra_nv2di = 2814,
+  CODE_FOR_aarch64_usra_nv2di = 2815,
+  CODE_FOR_aarch64_srsra_nv2di = 2816,
+  CODE_FOR_aarch64_ursra_nv2di = 2817,
+  CODE_FOR_aarch64_ssra_ndi = 2818,
+  CODE_FOR_aarch64_usra_ndi = 2819,
+  CODE_FOR_aarch64_srsra_ndi = 2820,
+  CODE_FOR_aarch64_ursra_ndi = 2821,
+  CODE_FOR_aarch64_ssli_nv8qi = 2822,
+  CODE_FOR_aarch64_usli_nv8qi = 2823,
+  CODE_FOR_aarch64_ssri_nv8qi = 2824,
+  CODE_FOR_aarch64_usri_nv8qi = 2825,
+  CODE_FOR_aarch64_ssli_nv16qi = 2826,
+  CODE_FOR_aarch64_usli_nv16qi = 2827,
+  CODE_FOR_aarch64_ssri_nv16qi = 2828,
+  CODE_FOR_aarch64_usri_nv16qi = 2829,
+  CODE_FOR_aarch64_ssli_nv4hi = 2830,
+  CODE_FOR_aarch64_usli_nv4hi = 2831,
+  CODE_FOR_aarch64_ssri_nv4hi = 2832,
+  CODE_FOR_aarch64_usri_nv4hi = 2833,
+  CODE_FOR_aarch64_ssli_nv8hi = 2834,
+  CODE_FOR_aarch64_usli_nv8hi = 2835,
+  CODE_FOR_aarch64_ssri_nv8hi = 2836,
+  CODE_FOR_aarch64_usri_nv8hi = 2837,
+  CODE_FOR_aarch64_ssli_nv2si = 2838,
+  CODE_FOR_aarch64_usli_nv2si = 2839,
+  CODE_FOR_aarch64_ssri_nv2si = 2840,
+  CODE_FOR_aarch64_usri_nv2si = 2841,
+  CODE_FOR_aarch64_ssli_nv4si = 2842,
+  CODE_FOR_aarch64_usli_nv4si = 2843,
+  CODE_FOR_aarch64_ssri_nv4si = 2844,
+  CODE_FOR_aarch64_usri_nv4si = 2845,
+  CODE_FOR_aarch64_ssli_nv2di = 2846,
+  CODE_FOR_aarch64_usli_nv2di = 2847,
+  CODE_FOR_aarch64_ssri_nv2di = 2848,
+  CODE_FOR_aarch64_usri_nv2di = 2849,
+  CODE_FOR_aarch64_ssli_ndi = 2850,
+  CODE_FOR_aarch64_usli_ndi = 2851,
+  CODE_FOR_aarch64_ssri_ndi = 2852,
+  CODE_FOR_aarch64_usri_ndi = 2853,
+  CODE_FOR_aarch64_sqshlu_nv8qi = 2854,
+  CODE_FOR_aarch64_sqshl_nv8qi = 2855,
+  CODE_FOR_aarch64_uqshl_nv8qi = 2856,
+  CODE_FOR_aarch64_sqshlu_nv16qi = 2857,
+  CODE_FOR_aarch64_sqshl_nv16qi = 2858,
+  CODE_FOR_aarch64_uqshl_nv16qi = 2859,
+  CODE_FOR_aarch64_sqshlu_nv4hi = 2860,
+  CODE_FOR_aarch64_sqshl_nv4hi = 2861,
+  CODE_FOR_aarch64_uqshl_nv4hi = 2862,
+  CODE_FOR_aarch64_sqshlu_nv8hi = 2863,
+  CODE_FOR_aarch64_sqshl_nv8hi = 2864,
+  CODE_FOR_aarch64_uqshl_nv8hi = 2865,
+  CODE_FOR_aarch64_sqshlu_nv2si = 2866,
+  CODE_FOR_aarch64_sqshl_nv2si = 2867,
+  CODE_FOR_aarch64_uqshl_nv2si = 2868,
+  CODE_FOR_aarch64_sqshlu_nv4si = 2869,
+  CODE_FOR_aarch64_sqshl_nv4si = 2870,
+  CODE_FOR_aarch64_uqshl_nv4si = 2871,
+  CODE_FOR_aarch64_sqshlu_nv2di = 2872,
+  CODE_FOR_aarch64_sqshl_nv2di = 2873,
+  CODE_FOR_aarch64_uqshl_nv2di = 2874,
+  CODE_FOR_aarch64_sqshlu_nqi = 2875,
+  CODE_FOR_aarch64_sqshl_nqi = 2876,
+  CODE_FOR_aarch64_uqshl_nqi = 2877,
+  CODE_FOR_aarch64_sqshlu_nhi = 2878,
+  CODE_FOR_aarch64_sqshl_nhi = 2879,
+  CODE_FOR_aarch64_uqshl_nhi = 2880,
+  CODE_FOR_aarch64_sqshlu_nsi = 2881,
+  CODE_FOR_aarch64_sqshl_nsi = 2882,
+  CODE_FOR_aarch64_uqshl_nsi = 2883,
+  CODE_FOR_aarch64_sqshlu_ndi = 2884,
+  CODE_FOR_aarch64_sqshl_ndi = 2885,
+  CODE_FOR_aarch64_uqshl_ndi = 2886,
+  CODE_FOR_aarch64_sqshrun_nv8hi = 2887,
+  CODE_FOR_aarch64_sqrshrun_nv8hi = 2888,
+  CODE_FOR_aarch64_sqshrn_nv8hi = 2889,
+  CODE_FOR_aarch64_uqshrn_nv8hi = 2890,
+  CODE_FOR_aarch64_sqrshrn_nv8hi = 2891,
+  CODE_FOR_aarch64_uqrshrn_nv8hi = 2892,
+  CODE_FOR_aarch64_sqshrun_nv4si = 2893,
+  CODE_FOR_aarch64_sqrshrun_nv4si = 2894,
+  CODE_FOR_aarch64_sqshrn_nv4si = 2895,
+  CODE_FOR_aarch64_uqshrn_nv4si = 2896,
+  CODE_FOR_aarch64_sqrshrn_nv4si = 2897,
+  CODE_FOR_aarch64_uqrshrn_nv4si = 2898,
+  CODE_FOR_aarch64_sqshrun_nv2di = 2899,
+  CODE_FOR_aarch64_sqrshrun_nv2di = 2900,
+  CODE_FOR_aarch64_sqshrn_nv2di = 2901,
+  CODE_FOR_aarch64_uqshrn_nv2di = 2902,
+  CODE_FOR_aarch64_sqrshrn_nv2di = 2903,
+  CODE_FOR_aarch64_uqrshrn_nv2di = 2904,
+  CODE_FOR_aarch64_sqshrun_nhi = 2905,
+  CODE_FOR_aarch64_sqrshrun_nhi = 2906,
+  CODE_FOR_aarch64_sqshrn_nhi = 2907,
+  CODE_FOR_aarch64_uqshrn_nhi = 2908,
+  CODE_FOR_aarch64_sqrshrn_nhi = 2909,
+  CODE_FOR_aarch64_uqrshrn_nhi = 2910,
+  CODE_FOR_aarch64_sqshrun_nsi = 2911,
+  CODE_FOR_aarch64_sqrshrun_nsi = 2912,
+  CODE_FOR_aarch64_sqshrn_nsi = 2913,
+  CODE_FOR_aarch64_uqshrn_nsi = 2914,
+  CODE_FOR_aarch64_sqrshrn_nsi = 2915,
+  CODE_FOR_aarch64_uqrshrn_nsi = 2916,
+  CODE_FOR_aarch64_sqshrun_ndi = 2917,
+  CODE_FOR_aarch64_sqrshrun_ndi = 2918,
+  CODE_FOR_aarch64_sqshrn_ndi = 2919,
+  CODE_FOR_aarch64_uqshrn_ndi = 2920,
+  CODE_FOR_aarch64_sqrshrn_ndi = 2921,
+  CODE_FOR_aarch64_uqrshrn_ndi = 2922,
+  CODE_FOR_aarch64_cmltv8qi = 2923,
+  CODE_FOR_aarch64_cmlev8qi = 2924,
+  CODE_FOR_aarch64_cmeqv8qi = 2925,
+  CODE_FOR_aarch64_cmgev8qi = 2926,
+  CODE_FOR_aarch64_cmgtv8qi = 2927,
+  CODE_FOR_aarch64_cmltv16qi = 2928,
+  CODE_FOR_aarch64_cmlev16qi = 2929,
+  CODE_FOR_aarch64_cmeqv16qi = 2930,
+  CODE_FOR_aarch64_cmgev16qi = 2931,
+  CODE_FOR_aarch64_cmgtv16qi = 2932,
+  CODE_FOR_aarch64_cmltv4hi = 2933,
+  CODE_FOR_aarch64_cmlev4hi = 2934,
+  CODE_FOR_aarch64_cmeqv4hi = 2935,
+  CODE_FOR_aarch64_cmgev4hi = 2936,
+  CODE_FOR_aarch64_cmgtv4hi = 2937,
+  CODE_FOR_aarch64_cmltv8hi = 2938,
+  CODE_FOR_aarch64_cmlev8hi = 2939,
+  CODE_FOR_aarch64_cmeqv8hi = 2940,
+  CODE_FOR_aarch64_cmgev8hi = 2941,
+  CODE_FOR_aarch64_cmgtv8hi = 2942,
+  CODE_FOR_aarch64_cmltv2si = 2943,
+  CODE_FOR_aarch64_cmlev2si = 2944,
+  CODE_FOR_aarch64_cmeqv2si = 2945,
+  CODE_FOR_aarch64_cmgev2si = 2946,
+  CODE_FOR_aarch64_cmgtv2si = 2947,
+  CODE_FOR_aarch64_cmltv4si = 2948,
+  CODE_FOR_aarch64_cmlev4si = 2949,
+  CODE_FOR_aarch64_cmeqv4si = 2950,
+  CODE_FOR_aarch64_cmgev4si = 2951,
+  CODE_FOR_aarch64_cmgtv4si = 2952,
+  CODE_FOR_aarch64_cmltv2di = 2953,
+  CODE_FOR_aarch64_cmlev2di = 2954,
+  CODE_FOR_aarch64_cmeqv2di = 2955,
+  CODE_FOR_aarch64_cmgev2di = 2956,
+  CODE_FOR_aarch64_cmgtv2di = 2957,
+  CODE_FOR_aarch64_cmltdi = 2958,
+  CODE_FOR_aarch64_cmledi = 2959,
+  CODE_FOR_aarch64_cmeqdi = 2960,
+  CODE_FOR_aarch64_cmgedi = 2961,
+  CODE_FOR_aarch64_cmgtdi = 2962,
+  CODE_FOR_aarch64_cmltuv8qi = 2968,
+  CODE_FOR_aarch64_cmleuv8qi = 2969,
+  CODE_FOR_aarch64_cmgeuv8qi = 2970,
+  CODE_FOR_aarch64_cmgtuv8qi = 2971,
+  CODE_FOR_aarch64_cmltuv16qi = 2972,
+  CODE_FOR_aarch64_cmleuv16qi = 2973,
+  CODE_FOR_aarch64_cmgeuv16qi = 2974,
+  CODE_FOR_aarch64_cmgtuv16qi = 2975,
+  CODE_FOR_aarch64_cmltuv4hi = 2976,
+  CODE_FOR_aarch64_cmleuv4hi = 2977,
+  CODE_FOR_aarch64_cmgeuv4hi = 2978,
+  CODE_FOR_aarch64_cmgtuv4hi = 2979,
+  CODE_FOR_aarch64_cmltuv8hi = 2980,
+  CODE_FOR_aarch64_cmleuv8hi = 2981,
+  CODE_FOR_aarch64_cmgeuv8hi = 2982,
+  CODE_FOR_aarch64_cmgtuv8hi = 2983,
+  CODE_FOR_aarch64_cmltuv2si = 2984,
+  CODE_FOR_aarch64_cmleuv2si = 2985,
+  CODE_FOR_aarch64_cmgeuv2si = 2986,
+  CODE_FOR_aarch64_cmgtuv2si = 2987,
+  CODE_FOR_aarch64_cmltuv4si = 2988,
+  CODE_FOR_aarch64_cmleuv4si = 2989,
+  CODE_FOR_aarch64_cmgeuv4si = 2990,
+  CODE_FOR_aarch64_cmgtuv4si = 2991,
+  CODE_FOR_aarch64_cmltuv2di = 2992,
+  CODE_FOR_aarch64_cmleuv2di = 2993,
+  CODE_FOR_aarch64_cmgeuv2di = 2994,
+  CODE_FOR_aarch64_cmgtuv2di = 2995,
+  CODE_FOR_aarch64_cmltudi = 2996,
+  CODE_FOR_aarch64_cmleudi = 2997,
+  CODE_FOR_aarch64_cmgeudi = 2998,
+  CODE_FOR_aarch64_cmgtudi = 2999,
+  CODE_FOR_aarch64_cmtstv8qi = 3004,
+  CODE_FOR_aarch64_cmtstv16qi = 3005,
+  CODE_FOR_aarch64_cmtstv4hi = 3006,
+  CODE_FOR_aarch64_cmtstv8hi = 3007,
+  CODE_FOR_aarch64_cmtstv2si = 3008,
+  CODE_FOR_aarch64_cmtstv4si = 3009,
+  CODE_FOR_aarch64_cmtstv2di = 3010,
+  CODE_FOR_aarch64_cmtstdi = 3011,
+  CODE_FOR_aarch64_cmltv4hf = 3013,
+  CODE_FOR_aarch64_cmlev4hf = 3014,
+  CODE_FOR_aarch64_cmeqv4hf = 3015,
+  CODE_FOR_aarch64_cmgev4hf = 3016,
+  CODE_FOR_aarch64_cmgtv4hf = 3017,
+  CODE_FOR_aarch64_cmltv8hf = 3018,
+  CODE_FOR_aarch64_cmlev8hf = 3019,
+  CODE_FOR_aarch64_cmeqv8hf = 3020,
+  CODE_FOR_aarch64_cmgev8hf = 3021,
+  CODE_FOR_aarch64_cmgtv8hf = 3022,
+  CODE_FOR_aarch64_cmltv2sf = 3023,
+  CODE_FOR_aarch64_cmlev2sf = 3024,
+  CODE_FOR_aarch64_cmeqv2sf = 3025,
+  CODE_FOR_aarch64_cmgev2sf = 3026,
+  CODE_FOR_aarch64_cmgtv2sf = 3027,
+  CODE_FOR_aarch64_cmltv4sf = 3028,
+  CODE_FOR_aarch64_cmlev4sf = 3029,
+  CODE_FOR_aarch64_cmeqv4sf = 3030,
+  CODE_FOR_aarch64_cmgev4sf = 3031,
+  CODE_FOR_aarch64_cmgtv4sf = 3032,
+  CODE_FOR_aarch64_cmltv2df = 3033,
+  CODE_FOR_aarch64_cmlev2df = 3034,
+  CODE_FOR_aarch64_cmeqv2df = 3035,
+  CODE_FOR_aarch64_cmgev2df = 3036,
+  CODE_FOR_aarch64_cmgtv2df = 3037,
+  CODE_FOR_aarch64_cmlthf = 3038,
+  CODE_FOR_aarch64_cmlehf = 3039,
+  CODE_FOR_aarch64_cmeqhf = 3040,
+  CODE_FOR_aarch64_cmgehf = 3041,
+  CODE_FOR_aarch64_cmgthf = 3042,
+  CODE_FOR_aarch64_cmltsf = 3043,
+  CODE_FOR_aarch64_cmlesf = 3044,
+  CODE_FOR_aarch64_cmeqsf = 3045,
+  CODE_FOR_aarch64_cmgesf = 3046,
+  CODE_FOR_aarch64_cmgtsf = 3047,
+  CODE_FOR_aarch64_cmltdf = 3048,
+  CODE_FOR_aarch64_cmledf = 3049,
+  CODE_FOR_aarch64_cmeqdf = 3050,
+  CODE_FOR_aarch64_cmgedf = 3051,
+  CODE_FOR_aarch64_cmgtdf = 3052,
+  CODE_FOR_aarch64_facltv4hf = 3053,
+  CODE_FOR_aarch64_faclev4hf = 3054,
+  CODE_FOR_aarch64_facgev4hf = 3055,
+  CODE_FOR_aarch64_facgtv4hf = 3056,
+  CODE_FOR_aarch64_facltv8hf = 3057,
+  CODE_FOR_aarch64_faclev8hf = 3058,
+  CODE_FOR_aarch64_facgev8hf = 3059,
+  CODE_FOR_aarch64_facgtv8hf = 3060,
+  CODE_FOR_aarch64_facltv2sf = 3061,
+  CODE_FOR_aarch64_faclev2sf = 3062,
+  CODE_FOR_aarch64_facgev2sf = 3063,
+  CODE_FOR_aarch64_facgtv2sf = 3064,
+  CODE_FOR_aarch64_facltv4sf = 3065,
+  CODE_FOR_aarch64_faclev4sf = 3066,
+  CODE_FOR_aarch64_facgev4sf = 3067,
+  CODE_FOR_aarch64_facgtv4sf = 3068,
+  CODE_FOR_aarch64_facltv2df = 3069,
+  CODE_FOR_aarch64_faclev2df = 3070,
+  CODE_FOR_aarch64_facgev2df = 3071,
+  CODE_FOR_aarch64_facgtv2df = 3072,
+  CODE_FOR_aarch64_faclthf = 3073,
+  CODE_FOR_aarch64_faclehf = 3074,
+  CODE_FOR_aarch64_facgehf = 3075,
+  CODE_FOR_aarch64_facgthf = 3076,
+  CODE_FOR_aarch64_facltsf = 3077,
+  CODE_FOR_aarch64_faclesf = 3078,
+  CODE_FOR_aarch64_facgesf = 3079,
+  CODE_FOR_aarch64_facgtsf = 3080,
+  CODE_FOR_aarch64_facltdf = 3081,
+  CODE_FOR_aarch64_facledf = 3082,
+  CODE_FOR_aarch64_facgedf = 3083,
+  CODE_FOR_aarch64_facgtdf = 3084,
+  CODE_FOR_aarch64_addpv8qi = 3085,
+  CODE_FOR_aarch64_addpv4hi = 3086,
+  CODE_FOR_aarch64_addpv2si = 3087,
+  CODE_FOR_aarch64_addpdi = 3088,
+  CODE_FOR_aarch64_simd_ld2v16qi = 3094,
+  CODE_FOR_aarch64_simd_ld2v8hi = 3095,
+  CODE_FOR_aarch64_simd_ld2v4si = 3096,
+  CODE_FOR_aarch64_simd_ld2v2di = 3097,
+  CODE_FOR_aarch64_simd_ld2v8hf = 3098,
+  CODE_FOR_aarch64_simd_ld2v4sf = 3099,
+  CODE_FOR_aarch64_simd_ld2v2df = 3100,
+  CODE_FOR_aarch64_simd_ld2rv8qi = 3101,
+  CODE_FOR_aarch64_simd_ld2rv16qi = 3102,
+  CODE_FOR_aarch64_simd_ld2rv4hi = 3103,
+  CODE_FOR_aarch64_simd_ld2rv8hi = 3104,
+  CODE_FOR_aarch64_simd_ld2rv2si = 3105,
+  CODE_FOR_aarch64_simd_ld2rv4si = 3106,
+  CODE_FOR_aarch64_simd_ld2rv2di = 3107,
+  CODE_FOR_aarch64_simd_ld2rv4hf = 3108,
+  CODE_FOR_aarch64_simd_ld2rv8hf = 3109,
+  CODE_FOR_aarch64_simd_ld2rv2sf = 3110,
+  CODE_FOR_aarch64_simd_ld2rv4sf = 3111,
+  CODE_FOR_aarch64_simd_ld2rv2df = 3112,
+  CODE_FOR_aarch64_simd_ld2rdi = 3113,
+  CODE_FOR_aarch64_simd_ld2rdf = 3114,
+  CODE_FOR_aarch64_vec_load_lanesoi_lanev8qi = 3115,
+  CODE_FOR_aarch64_vec_load_lanesoi_lanev16qi = 3116,
+  CODE_FOR_aarch64_vec_load_lanesoi_lanev4hi = 3117,
+  CODE_FOR_aarch64_vec_load_lanesoi_lanev8hi = 3118,
+  CODE_FOR_aarch64_vec_load_lanesoi_lanev2si = 3119,
+  CODE_FOR_aarch64_vec_load_lanesoi_lanev4si = 3120,
+  CODE_FOR_aarch64_vec_load_lanesoi_lanev2di = 3121,
+  CODE_FOR_aarch64_vec_load_lanesoi_lanev4hf = 3122,
+  CODE_FOR_aarch64_vec_load_lanesoi_lanev8hf = 3123,
+  CODE_FOR_aarch64_vec_load_lanesoi_lanev2sf = 3124,
+  CODE_FOR_aarch64_vec_load_lanesoi_lanev4sf = 3125,
+  CODE_FOR_aarch64_vec_load_lanesoi_lanev2df = 3126,
+  CODE_FOR_aarch64_vec_load_lanesoi_lanedi = 3127,
+  CODE_FOR_aarch64_vec_load_lanesoi_lanedf = 3128,
+  CODE_FOR_aarch64_simd_st2v16qi = 3129,
+  CODE_FOR_aarch64_simd_st2v8hi = 3130,
+  CODE_FOR_aarch64_simd_st2v4si = 3131,
+  CODE_FOR_aarch64_simd_st2v2di = 3132,
+  CODE_FOR_aarch64_simd_st2v8hf = 3133,
+  CODE_FOR_aarch64_simd_st2v4sf = 3134,
+  CODE_FOR_aarch64_simd_st2v2df = 3135,
+  CODE_FOR_aarch64_vec_store_lanesoi_lanev8qi = 3136,
+  CODE_FOR_aarch64_vec_store_lanesoi_lanev16qi = 3137,
+  CODE_FOR_aarch64_vec_store_lanesoi_lanev4hi = 3138,
+  CODE_FOR_aarch64_vec_store_lanesoi_lanev8hi = 3139,
+  CODE_FOR_aarch64_vec_store_lanesoi_lanev2si = 3140,
+  CODE_FOR_aarch64_vec_store_lanesoi_lanev4si = 3141,
+  CODE_FOR_aarch64_vec_store_lanesoi_lanev2di = 3142,
+  CODE_FOR_aarch64_vec_store_lanesoi_lanev4hf = 3143,
+  CODE_FOR_aarch64_vec_store_lanesoi_lanev8hf = 3144,
+  CODE_FOR_aarch64_vec_store_lanesoi_lanev2sf = 3145,
+  CODE_FOR_aarch64_vec_store_lanesoi_lanev4sf = 3146,
+  CODE_FOR_aarch64_vec_store_lanesoi_lanev2df = 3147,
+  CODE_FOR_aarch64_vec_store_lanesoi_lanedi = 3148,
+  CODE_FOR_aarch64_vec_store_lanesoi_lanedf = 3149,
+  CODE_FOR_aarch64_simd_ld3v16qi = 3150,
+  CODE_FOR_aarch64_simd_ld3v8hi = 3151,
+  CODE_FOR_aarch64_simd_ld3v4si = 3152,
+  CODE_FOR_aarch64_simd_ld3v2di = 3153,
+  CODE_FOR_aarch64_simd_ld3v8hf = 3154,
+  CODE_FOR_aarch64_simd_ld3v4sf = 3155,
+  CODE_FOR_aarch64_simd_ld3v2df = 3156,
+  CODE_FOR_aarch64_simd_ld3rv8qi = 3157,
+  CODE_FOR_aarch64_simd_ld3rv16qi = 3158,
+  CODE_FOR_aarch64_simd_ld3rv4hi = 3159,
+  CODE_FOR_aarch64_simd_ld3rv8hi = 3160,
+  CODE_FOR_aarch64_simd_ld3rv2si = 3161,
+  CODE_FOR_aarch64_simd_ld3rv4si = 3162,
+  CODE_FOR_aarch64_simd_ld3rv2di = 3163,
+  CODE_FOR_aarch64_simd_ld3rv4hf = 3164,
+  CODE_FOR_aarch64_simd_ld3rv8hf = 3165,
+  CODE_FOR_aarch64_simd_ld3rv2sf = 3166,
+  CODE_FOR_aarch64_simd_ld3rv4sf = 3167,
+  CODE_FOR_aarch64_simd_ld3rv2df = 3168,
+  CODE_FOR_aarch64_simd_ld3rdi = 3169,
+  CODE_FOR_aarch64_simd_ld3rdf = 3170,
+  CODE_FOR_aarch64_vec_load_lanesci_lanev8qi = 3171,
+  CODE_FOR_aarch64_vec_load_lanesci_lanev16qi = 3172,
+  CODE_FOR_aarch64_vec_load_lanesci_lanev4hi = 3173,
+  CODE_FOR_aarch64_vec_load_lanesci_lanev8hi = 3174,
+  CODE_FOR_aarch64_vec_load_lanesci_lanev2si = 3175,
+  CODE_FOR_aarch64_vec_load_lanesci_lanev4si = 3176,
+  CODE_FOR_aarch64_vec_load_lanesci_lanev2di = 3177,
+  CODE_FOR_aarch64_vec_load_lanesci_lanev4hf = 3178,
+  CODE_FOR_aarch64_vec_load_lanesci_lanev8hf = 3179,
+  CODE_FOR_aarch64_vec_load_lanesci_lanev2sf = 3180,
+  CODE_FOR_aarch64_vec_load_lanesci_lanev4sf = 3181,
+  CODE_FOR_aarch64_vec_load_lanesci_lanev2df = 3182,
+  CODE_FOR_aarch64_vec_load_lanesci_lanedi = 3183,
+  CODE_FOR_aarch64_vec_load_lanesci_lanedf = 3184,
+  CODE_FOR_aarch64_simd_st3v16qi = 3185,
+  CODE_FOR_aarch64_simd_st3v8hi = 3186,
+  CODE_FOR_aarch64_simd_st3v4si = 3187,
+  CODE_FOR_aarch64_simd_st3v2di = 3188,
+  CODE_FOR_aarch64_simd_st3v8hf = 3189,
+  CODE_FOR_aarch64_simd_st3v4sf = 3190,
+  CODE_FOR_aarch64_simd_st3v2df = 3191,
+  CODE_FOR_aarch64_vec_store_lanesci_lanev8qi = 3192,
+  CODE_FOR_aarch64_vec_store_lanesci_lanev16qi = 3193,
+  CODE_FOR_aarch64_vec_store_lanesci_lanev4hi = 3194,
+  CODE_FOR_aarch64_vec_store_lanesci_lanev8hi = 3195,
+  CODE_FOR_aarch64_vec_store_lanesci_lanev2si = 3196,
+  CODE_FOR_aarch64_vec_store_lanesci_lanev4si = 3197,
+  CODE_FOR_aarch64_vec_store_lanesci_lanev2di = 3198,
+  CODE_FOR_aarch64_vec_store_lanesci_lanev4hf = 3199,
+  CODE_FOR_aarch64_vec_store_lanesci_lanev8hf = 3200,
+  CODE_FOR_aarch64_vec_store_lanesci_lanev2sf = 3201,
+  CODE_FOR_aarch64_vec_store_lanesci_lanev4sf = 3202,
+  CODE_FOR_aarch64_vec_store_lanesci_lanev2df = 3203,
+  CODE_FOR_aarch64_vec_store_lanesci_lanedi = 3204,
+  CODE_FOR_aarch64_vec_store_lanesci_lanedf = 3205,
+  CODE_FOR_aarch64_simd_ld4v16qi = 3206,
+  CODE_FOR_aarch64_simd_ld4v8hi = 3207,
+  CODE_FOR_aarch64_simd_ld4v4si = 3208,
+  CODE_FOR_aarch64_simd_ld4v2di = 3209,
+  CODE_FOR_aarch64_simd_ld4v8hf = 3210,
+  CODE_FOR_aarch64_simd_ld4v4sf = 3211,
+  CODE_FOR_aarch64_simd_ld4v2df = 3212,
+  CODE_FOR_aarch64_simd_ld4rv8qi = 3213,
+  CODE_FOR_aarch64_simd_ld4rv16qi = 3214,
+  CODE_FOR_aarch64_simd_ld4rv4hi = 3215,
+  CODE_FOR_aarch64_simd_ld4rv8hi = 3216,
+  CODE_FOR_aarch64_simd_ld4rv2si = 3217,
+  CODE_FOR_aarch64_simd_ld4rv4si = 3218,
+  CODE_FOR_aarch64_simd_ld4rv2di = 3219,
+  CODE_FOR_aarch64_simd_ld4rv4hf = 3220,
+  CODE_FOR_aarch64_simd_ld4rv8hf = 3221,
+  CODE_FOR_aarch64_simd_ld4rv2sf = 3222,
+  CODE_FOR_aarch64_simd_ld4rv4sf = 3223,
+  CODE_FOR_aarch64_simd_ld4rv2df = 3224,
+  CODE_FOR_aarch64_simd_ld4rdi = 3225,
+  CODE_FOR_aarch64_simd_ld4rdf = 3226,
+  CODE_FOR_aarch64_vec_load_lanesxi_lanev8qi = 3227,
+  CODE_FOR_aarch64_vec_load_lanesxi_lanev16qi = 3228,
+  CODE_FOR_aarch64_vec_load_lanesxi_lanev4hi = 3229,
+  CODE_FOR_aarch64_vec_load_lanesxi_lanev8hi = 3230,
+  CODE_FOR_aarch64_vec_load_lanesxi_lanev2si = 3231,
+  CODE_FOR_aarch64_vec_load_lanesxi_lanev4si = 3232,
+  CODE_FOR_aarch64_vec_load_lanesxi_lanev2di = 3233,
+  CODE_FOR_aarch64_vec_load_lanesxi_lanev4hf = 3234,
+  CODE_FOR_aarch64_vec_load_lanesxi_lanev8hf = 3235,
+  CODE_FOR_aarch64_vec_load_lanesxi_lanev2sf = 3236,
+  CODE_FOR_aarch64_vec_load_lanesxi_lanev4sf = 3237,
+  CODE_FOR_aarch64_vec_load_lanesxi_lanev2df = 3238,
+  CODE_FOR_aarch64_vec_load_lanesxi_lanedi = 3239,
+  CODE_FOR_aarch64_vec_load_lanesxi_lanedf = 3240,
+  CODE_FOR_aarch64_simd_st4v16qi = 3241,
+  CODE_FOR_aarch64_simd_st4v8hi = 3242,
+  CODE_FOR_aarch64_simd_st4v4si = 3243,
+  CODE_FOR_aarch64_simd_st4v2di = 3244,
+  CODE_FOR_aarch64_simd_st4v8hf = 3245,
+  CODE_FOR_aarch64_simd_st4v4sf = 3246,
+  CODE_FOR_aarch64_simd_st4v2df = 3247,
+  CODE_FOR_aarch64_vec_store_lanesxi_lanev8qi = 3248,
+  CODE_FOR_aarch64_vec_store_lanesxi_lanev16qi = 3249,
+  CODE_FOR_aarch64_vec_store_lanesxi_lanev4hi = 3250,
+  CODE_FOR_aarch64_vec_store_lanesxi_lanev8hi = 3251,
+  CODE_FOR_aarch64_vec_store_lanesxi_lanev2si = 3252,
+  CODE_FOR_aarch64_vec_store_lanesxi_lanev4si = 3253,
+  CODE_FOR_aarch64_vec_store_lanesxi_lanev2di = 3254,
+  CODE_FOR_aarch64_vec_store_lanesxi_lanev4hf = 3255,
+  CODE_FOR_aarch64_vec_store_lanesxi_lanev8hf = 3256,
+  CODE_FOR_aarch64_vec_store_lanesxi_lanev2sf = 3257,
+  CODE_FOR_aarch64_vec_store_lanesxi_lanev4sf = 3258,
+  CODE_FOR_aarch64_vec_store_lanesxi_lanev2df = 3259,
+  CODE_FOR_aarch64_vec_store_lanesxi_lanedi = 3260,
+  CODE_FOR_aarch64_vec_store_lanesxi_lanedf = 3261,
+  CODE_FOR_aarch64_rev_reglistoi = 3262,
+  CODE_FOR_aarch64_rev_reglistci = 3263,
+  CODE_FOR_aarch64_rev_reglistxi = 3264,
+  CODE_FOR_aarch64_ld1_x3_v8qi = 3265,
+  CODE_FOR_aarch64_ld1_x3_v16qi = 3266,
+  CODE_FOR_aarch64_ld1_x3_v4hi = 3267,
+  CODE_FOR_aarch64_ld1_x3_v8hi = 3268,
+  CODE_FOR_aarch64_ld1_x3_v2si = 3269,
+  CODE_FOR_aarch64_ld1_x3_v4si = 3270,
+  CODE_FOR_aarch64_ld1_x3_v2di = 3271,
+  CODE_FOR_aarch64_ld1_x3_v4hf = 3272,
+  CODE_FOR_aarch64_ld1_x3_v8hf = 3273,
+  CODE_FOR_aarch64_ld1_x3_v2sf = 3274,
+  CODE_FOR_aarch64_ld1_x3_v4sf = 3275,
+  CODE_FOR_aarch64_ld1_x3_v2df = 3276,
+  CODE_FOR_aarch64_ld1_x3_di = 3277,
+  CODE_FOR_aarch64_ld1_x3_df = 3278,
+  CODE_FOR_aarch64_st1_x2_v8qi = 3279,
+  CODE_FOR_aarch64_st1_x2_v16qi = 3280,
+  CODE_FOR_aarch64_st1_x2_v4hi = 3281,
+  CODE_FOR_aarch64_st1_x2_v8hi = 3282,
+  CODE_FOR_aarch64_st1_x2_v2si = 3283,
+  CODE_FOR_aarch64_st1_x2_v4si = 3284,
+  CODE_FOR_aarch64_st1_x2_v2di = 3285,
+  CODE_FOR_aarch64_st1_x2_v4hf = 3286,
+  CODE_FOR_aarch64_st1_x2_v8hf = 3287,
+  CODE_FOR_aarch64_st1_x2_v2sf = 3288,
+  CODE_FOR_aarch64_st1_x2_v4sf = 3289,
+  CODE_FOR_aarch64_st1_x2_v2df = 3290,
+  CODE_FOR_aarch64_st1_x2_di = 3291,
+  CODE_FOR_aarch64_st1_x2_df = 3292,
+  CODE_FOR_aarch64_st1_x3_v8qi = 3293,
+  CODE_FOR_aarch64_st1_x3_v16qi = 3294,
+  CODE_FOR_aarch64_st1_x3_v4hi = 3295,
+  CODE_FOR_aarch64_st1_x3_v8hi = 3296,
+  CODE_FOR_aarch64_st1_x3_v2si = 3297,
+  CODE_FOR_aarch64_st1_x3_v4si = 3298,
+  CODE_FOR_aarch64_st1_x3_v2di = 3299,
+  CODE_FOR_aarch64_st1_x3_v4hf = 3300,
+  CODE_FOR_aarch64_st1_x3_v8hf = 3301,
+  CODE_FOR_aarch64_st1_x3_v2sf = 3302,
+  CODE_FOR_aarch64_st1_x3_v4sf = 3303,
+  CODE_FOR_aarch64_st1_x3_v2df = 3304,
+  CODE_FOR_aarch64_st1_x3_di = 3305,
+  CODE_FOR_aarch64_st1_x3_df = 3306,
+  CODE_FOR_aarch64_be_ld1v8qi = 3310,
+  CODE_FOR_aarch64_be_ld1v16qi = 3311,
+  CODE_FOR_aarch64_be_ld1v4hi = 3312,
+  CODE_FOR_aarch64_be_ld1v8hi = 3313,
+  CODE_FOR_aarch64_be_ld1v2si = 3314,
+  CODE_FOR_aarch64_be_ld1v4si = 3315,
+  CODE_FOR_aarch64_be_ld1v2di = 3316,
+  CODE_FOR_aarch64_be_ld1v4hf = 3317,
+  CODE_FOR_aarch64_be_ld1v8hf = 3318,
+  CODE_FOR_aarch64_be_ld1v2sf = 3319,
+  CODE_FOR_aarch64_be_ld1v4sf = 3320,
+  CODE_FOR_aarch64_be_ld1v2df = 3321,
+  CODE_FOR_aarch64_be_ld1di = 3322,
+  CODE_FOR_aarch64_be_st1v8qi = 3323,
+  CODE_FOR_aarch64_be_st1v16qi = 3324,
+  CODE_FOR_aarch64_be_st1v4hi = 3325,
+  CODE_FOR_aarch64_be_st1v8hi = 3326,
+  CODE_FOR_aarch64_be_st1v2si = 3327,
+  CODE_FOR_aarch64_be_st1v4si = 3328,
+  CODE_FOR_aarch64_be_st1v2di = 3329,
+  CODE_FOR_aarch64_be_st1v4hf = 3330,
+  CODE_FOR_aarch64_be_st1v8hf = 3331,
+  CODE_FOR_aarch64_be_st1v2sf = 3332,
+  CODE_FOR_aarch64_be_st1v4sf = 3333,
+  CODE_FOR_aarch64_be_st1v2df = 3334,
+  CODE_FOR_aarch64_be_st1di = 3335,
+  CODE_FOR_aarch64_ld2v8qi_dreg = 3339,
+  CODE_FOR_aarch64_ld2v4hi_dreg = 3340,
+  CODE_FOR_aarch64_ld2v4hf_dreg = 3341,
+  CODE_FOR_aarch64_ld2v2si_dreg = 3342,
+  CODE_FOR_aarch64_ld2v2sf_dreg = 3343,
+  CODE_FOR_aarch64_ld2di_dreg = 3344,
+  CODE_FOR_aarch64_ld2df_dreg = 3345,
+  CODE_FOR_aarch64_ld3v8qi_dreg = 3346,
+  CODE_FOR_aarch64_ld3v4hi_dreg = 3347,
+  CODE_FOR_aarch64_ld3v4hf_dreg = 3348,
+  CODE_FOR_aarch64_ld3v2si_dreg = 3349,
+  CODE_FOR_aarch64_ld3v2sf_dreg = 3350,
+  CODE_FOR_aarch64_ld3di_dreg = 3351,
+  CODE_FOR_aarch64_ld3df_dreg = 3352,
+  CODE_FOR_aarch64_ld4v8qi_dreg = 3353,
+  CODE_FOR_aarch64_ld4v4hi_dreg = 3354,
+  CODE_FOR_aarch64_ld4v4hf_dreg = 3355,
+  CODE_FOR_aarch64_ld4v2si_dreg = 3356,
+  CODE_FOR_aarch64_ld4v2sf_dreg = 3357,
+  CODE_FOR_aarch64_ld4di_dreg = 3358,
+  CODE_FOR_aarch64_ld4df_dreg = 3359,
+  CODE_FOR_aarch64_tbl1v8qi = 3360,
+  CODE_FOR_aarch64_tbl1v16qi = 3361,
+  CODE_FOR_aarch64_tbl2v16qi = 3362,
+  CODE_FOR_aarch64_tbl3v8qi = 3363,
+  CODE_FOR_aarch64_tbl3v16qi = 3364,
+  CODE_FOR_aarch64_tbx4v8qi = 3365,
+  CODE_FOR_aarch64_tbx4v16qi = 3366,
+  CODE_FOR_aarch64_qtbl3v8qi = 3367,
+  CODE_FOR_aarch64_qtbl3v16qi = 3368,
+  CODE_FOR_aarch64_qtbx3v8qi = 3369,
+  CODE_FOR_aarch64_qtbx3v16qi = 3370,
+  CODE_FOR_aarch64_qtbl4v8qi = 3371,
+  CODE_FOR_aarch64_qtbl4v16qi = 3372,
+  CODE_FOR_aarch64_qtbx4v8qi = 3373,
+  CODE_FOR_aarch64_qtbx4v16qi = 3374,
+  CODE_FOR_aarch64_combinev16qi = 3375,
+  CODE_FOR_aarch64_zip1v8qi = 3376,
+  CODE_FOR_aarch64_zip2v8qi = 3377,
+  CODE_FOR_aarch64_trn1v8qi = 3378,
+  CODE_FOR_aarch64_trn2v8qi = 3379,
+  CODE_FOR_aarch64_uzp1v8qi = 3380,
+  CODE_FOR_aarch64_uzp2v8qi = 3381,
+  CODE_FOR_aarch64_zip1v16qi = 3382,
+  CODE_FOR_aarch64_zip2v16qi = 3383,
+  CODE_FOR_aarch64_trn1v16qi = 3384,
+  CODE_FOR_aarch64_trn2v16qi = 3385,
+  CODE_FOR_aarch64_uzp1v16qi = 3386,
+  CODE_FOR_aarch64_uzp2v16qi = 3387,
+  CODE_FOR_aarch64_zip1v4hi = 3388,
+  CODE_FOR_aarch64_zip2v4hi = 3389,
+  CODE_FOR_aarch64_trn1v4hi = 3390,
+  CODE_FOR_aarch64_trn2v4hi = 3391,
+  CODE_FOR_aarch64_uzp1v4hi = 3392,
+  CODE_FOR_aarch64_uzp2v4hi = 3393,
+  CODE_FOR_aarch64_zip1v8hi = 3394,
+  CODE_FOR_aarch64_zip2v8hi = 3395,
+  CODE_FOR_aarch64_trn1v8hi = 3396,
+  CODE_FOR_aarch64_trn2v8hi = 3397,
+  CODE_FOR_aarch64_uzp1v8hi = 3398,
+  CODE_FOR_aarch64_uzp2v8hi = 3399,
+  CODE_FOR_aarch64_zip1v2si = 3400,
+  CODE_FOR_aarch64_zip2v2si = 3401,
+  CODE_FOR_aarch64_trn1v2si = 3402,
+  CODE_FOR_aarch64_trn2v2si = 3403,
+  CODE_FOR_aarch64_uzp1v2si = 3404,
+  CODE_FOR_aarch64_uzp2v2si = 3405,
+  CODE_FOR_aarch64_zip1v4si = 3406,
+  CODE_FOR_aarch64_zip2v4si = 3407,
+  CODE_FOR_aarch64_trn1v4si = 3408,
+  CODE_FOR_aarch64_trn2v4si = 3409,
+  CODE_FOR_aarch64_uzp1v4si = 3410,
+  CODE_FOR_aarch64_uzp2v4si = 3411,
+  CODE_FOR_aarch64_zip1v2di = 3412,
+  CODE_FOR_aarch64_zip2v2di = 3413,
+  CODE_FOR_aarch64_trn1v2di = 3414,
+  CODE_FOR_aarch64_trn2v2di = 3415,
+  CODE_FOR_aarch64_uzp1v2di = 3416,
+  CODE_FOR_aarch64_uzp2v2di = 3417,
+  CODE_FOR_aarch64_zip1v4hf = 3418,
+  CODE_FOR_aarch64_zip2v4hf = 3419,
+  CODE_FOR_aarch64_trn1v4hf = 3420,
+  CODE_FOR_aarch64_trn2v4hf = 3421,
+  CODE_FOR_aarch64_uzp1v4hf = 3422,
+  CODE_FOR_aarch64_uzp2v4hf = 3423,
+  CODE_FOR_aarch64_zip1v8hf = 3424,
+  CODE_FOR_aarch64_zip2v8hf = 3425,
+  CODE_FOR_aarch64_trn1v8hf = 3426,
+  CODE_FOR_aarch64_trn2v8hf = 3427,
+  CODE_FOR_aarch64_uzp1v8hf = 3428,
+  CODE_FOR_aarch64_uzp2v8hf = 3429,
+  CODE_FOR_aarch64_zip1v2sf = 3430,
+  CODE_FOR_aarch64_zip2v2sf = 3431,
+  CODE_FOR_aarch64_trn1v2sf = 3432,
+  CODE_FOR_aarch64_trn2v2sf = 3433,
+  CODE_FOR_aarch64_uzp1v2sf = 3434,
+  CODE_FOR_aarch64_uzp2v2sf = 3435,
+  CODE_FOR_aarch64_zip1v4sf = 3436,
+  CODE_FOR_aarch64_zip2v4sf = 3437,
+  CODE_FOR_aarch64_trn1v4sf = 3438,
+  CODE_FOR_aarch64_trn2v4sf = 3439,
+  CODE_FOR_aarch64_uzp1v4sf = 3440,
+  CODE_FOR_aarch64_uzp2v4sf = 3441,
+  CODE_FOR_aarch64_zip1v2df = 3442,
+  CODE_FOR_aarch64_zip2v2df = 3443,
+  CODE_FOR_aarch64_trn1v2df = 3444,
+  CODE_FOR_aarch64_trn2v2df = 3445,
+  CODE_FOR_aarch64_uzp1v2df = 3446,
+  CODE_FOR_aarch64_uzp2v2df = 3447,
+  CODE_FOR_aarch64_extv8qi = 3448,
+  CODE_FOR_aarch64_extv16qi = 3449,
+  CODE_FOR_aarch64_extv4hi = 3450,
+  CODE_FOR_aarch64_extv8hi = 3451,
+  CODE_FOR_aarch64_extv2si = 3452,
+  CODE_FOR_aarch64_extv4si = 3453,
+  CODE_FOR_aarch64_extv2di = 3454,
+  CODE_FOR_aarch64_extv4hf = 3455,
+  CODE_FOR_aarch64_extv8hf = 3456,
+  CODE_FOR_aarch64_extv2sf = 3457,
+  CODE_FOR_aarch64_extv4sf = 3458,
+  CODE_FOR_aarch64_extv2df = 3459,
+  CODE_FOR_aarch64_rev64v8qi = 3460,
+  CODE_FOR_aarch64_rev32v8qi = 3461,
+  CODE_FOR_aarch64_rev16v8qi = 3462,
+  CODE_FOR_aarch64_rev64v16qi = 3463,
+  CODE_FOR_aarch64_rev32v16qi = 3464,
+  CODE_FOR_aarch64_rev16v16qi = 3465,
+  CODE_FOR_aarch64_rev64v4hi = 3466,
+  CODE_FOR_aarch64_rev32v4hi = 3467,
+  CODE_FOR_aarch64_rev16v4hi = 3468,
+  CODE_FOR_aarch64_rev64v8hi = 3469,
+  CODE_FOR_aarch64_rev32v8hi = 3470,
+  CODE_FOR_aarch64_rev16v8hi = 3471,
+  CODE_FOR_aarch64_rev64v2si = 3472,
+  CODE_FOR_aarch64_rev32v2si = 3473,
+  CODE_FOR_aarch64_rev16v2si = 3474,
+  CODE_FOR_aarch64_rev64v4si = 3475,
+  CODE_FOR_aarch64_rev32v4si = 3476,
+  CODE_FOR_aarch64_rev16v4si = 3477,
+  CODE_FOR_aarch64_rev64v2di = 3478,
+  CODE_FOR_aarch64_rev32v2di = 3479,
+  CODE_FOR_aarch64_rev16v2di = 3480,
+  CODE_FOR_aarch64_rev64v4hf = 3481,
+  CODE_FOR_aarch64_rev32v4hf = 3482,
+  CODE_FOR_aarch64_rev16v4hf = 3483,
+  CODE_FOR_aarch64_rev64v8hf = 3484,
+  CODE_FOR_aarch64_rev32v8hf = 3485,
+  CODE_FOR_aarch64_rev16v8hf = 3486,
+  CODE_FOR_aarch64_rev64v2sf = 3487,
+  CODE_FOR_aarch64_rev32v2sf = 3488,
+  CODE_FOR_aarch64_rev16v2sf = 3489,
+  CODE_FOR_aarch64_rev64v4sf = 3490,
+  CODE_FOR_aarch64_rev32v4sf = 3491,
+  CODE_FOR_aarch64_rev16v4sf = 3492,
+  CODE_FOR_aarch64_rev64v2df = 3493,
+  CODE_FOR_aarch64_rev32v2df = 3494,
+  CODE_FOR_aarch64_rev16v2df = 3495,
+  CODE_FOR_aarch64_st2v8qi_dreg = 3496,
+  CODE_FOR_aarch64_st2v4hi_dreg = 3497,
+  CODE_FOR_aarch64_st2v4hf_dreg = 3498,
+  CODE_FOR_aarch64_st2v2si_dreg = 3499,
+  CODE_FOR_aarch64_st2v2sf_dreg = 3500,
+  CODE_FOR_aarch64_st2di_dreg = 3501,
+  CODE_FOR_aarch64_st2df_dreg = 3502,
+  CODE_FOR_aarch64_st3v8qi_dreg = 3503,
+  CODE_FOR_aarch64_st3v4hi_dreg = 3504,
+  CODE_FOR_aarch64_st3v4hf_dreg = 3505,
+  CODE_FOR_aarch64_st3v2si_dreg = 3506,
+  CODE_FOR_aarch64_st3v2sf_dreg = 3507,
+  CODE_FOR_aarch64_st3di_dreg = 3508,
+  CODE_FOR_aarch64_st3df_dreg = 3509,
+  CODE_FOR_aarch64_st4v8qi_dreg = 3510,
+  CODE_FOR_aarch64_st4v4hi_dreg = 3511,
+  CODE_FOR_aarch64_st4v4hf_dreg = 3512,
+  CODE_FOR_aarch64_st4v2si_dreg = 3513,
+  CODE_FOR_aarch64_st4v2sf_dreg = 3514,
+  CODE_FOR_aarch64_st4di_dreg = 3515,
+  CODE_FOR_aarch64_st4df_dreg = 3516,
+  CODE_FOR_aarch64_simd_ld1v16qi_x2 = 3529,
+  CODE_FOR_aarch64_simd_ld1v8hi_x2 = 3530,
+  CODE_FOR_aarch64_simd_ld1v4si_x2 = 3531,
+  CODE_FOR_aarch64_simd_ld1v2di_x2 = 3532,
+  CODE_FOR_aarch64_simd_ld1v8hf_x2 = 3533,
+  CODE_FOR_aarch64_simd_ld1v4sf_x2 = 3534,
+  CODE_FOR_aarch64_simd_ld1v2df_x2 = 3535,
+  CODE_FOR_aarch64_simd_ld1v8qi_x2 = 3536,
+  CODE_FOR_aarch64_simd_ld1v4hi_x2 = 3537,
+  CODE_FOR_aarch64_simd_ld1v4hf_x2 = 3538,
+  CODE_FOR_aarch64_simd_ld1v2si_x2 = 3539,
+  CODE_FOR_aarch64_simd_ld1v2sf_x2 = 3540,
+  CODE_FOR_aarch64_simd_ld1di_x2 = 3541,
+  CODE_FOR_aarch64_simd_ld1df_x2 = 3542,
+  CODE_FOR_aarch64_frecpev4hf = 3543,
+  CODE_FOR_aarch64_frecpev8hf = 3544,
+  CODE_FOR_aarch64_frecpev2sf = 3545,
+  CODE_FOR_aarch64_frecpev4sf = 3546,
+  CODE_FOR_aarch64_frecpev2df = 3547,
+  CODE_FOR_aarch64_frecpehf = 3548,
+  CODE_FOR_aarch64_frecpesf = 3549,
+  CODE_FOR_aarch64_frecpedf = 3550,
+  CODE_FOR_aarch64_frecpxhf = 3551,
+  CODE_FOR_aarch64_frecpxsf = 3552,
+  CODE_FOR_aarch64_frecpxdf = 3553,
+  CODE_FOR_aarch64_frecpsv4hf = 3554,
+  CODE_FOR_aarch64_frecpsv8hf = 3555,
+  CODE_FOR_aarch64_frecpsv2sf = 3556,
+  CODE_FOR_aarch64_frecpsv4sf = 3557,
+  CODE_FOR_aarch64_frecpsv2df = 3558,
+  CODE_FOR_aarch64_frecpshf = 3559,
+  CODE_FOR_aarch64_frecpssf = 3560,
+  CODE_FOR_aarch64_frecpsdf = 3561,
+  CODE_FOR_aarch64_urecpev2si = 3562,
+  CODE_FOR_aarch64_urecpev4si = 3563,
+  CODE_FOR_aarch64_crypto_aesev16qi = 3564,
+  CODE_FOR_aarch64_crypto_aesdv16qi = 3565,
+  CODE_FOR_aarch64_crypto_aesmcv16qi = 3570,
+  CODE_FOR_aarch64_crypto_aesimcv16qi = 3571,
+  CODE_FOR_aarch64_crypto_sha1hsi = 3574,
+  CODE_FOR_aarch64_crypto_sha1hv4si = 3575,
+  CODE_FOR_aarch64_be_crypto_sha1hv4si = 3576,
+  CODE_FOR_aarch64_crypto_sha1su1v4si = 3577,
+  CODE_FOR_aarch64_crypto_sha1cv4si = 3578,
+  CODE_FOR_aarch64_crypto_sha1mv4si = 3579,
+  CODE_FOR_aarch64_crypto_sha1pv4si = 3580,
+  CODE_FOR_aarch64_crypto_sha1su0v4si = 3581,
+  CODE_FOR_aarch64_crypto_sha256hv4si = 3582,
+  CODE_FOR_aarch64_crypto_sha256h2v4si = 3583,
+  CODE_FOR_aarch64_crypto_sha256su0v4si = 3584,
+  CODE_FOR_aarch64_crypto_sha256su1v4si = 3585,
+  CODE_FOR_aarch64_crypto_sha512hqv2di = 3586,
+  CODE_FOR_aarch64_crypto_sha512h2qv2di = 3587,
+  CODE_FOR_aarch64_crypto_sha512su0qv2di = 3588,
+  CODE_FOR_aarch64_crypto_sha512su1qv2di = 3589,
+  CODE_FOR_eor3qv16qi4 = 3590,
+  CODE_FOR_eor3qv8hi4 = 3591,
+  CODE_FOR_eor3qv4si4 = 3592,
+  CODE_FOR_eor3qv2di4 = 3593,
+  CODE_FOR_aarch64_rax1qv2di = 3594,
+  CODE_FOR_aarch64_xarqv2di = 3595,
+  CODE_FOR_bcaxqv16qi4 = 3596,
+  CODE_FOR_bcaxqv8hi4 = 3597,
+  CODE_FOR_bcaxqv4si4 = 3598,
+  CODE_FOR_bcaxqv2di4 = 3599,
+  CODE_FOR_aarch64_sm3ss1qv4si = 3600,
+  CODE_FOR_aarch64_sm3tt1aqv4si = 3601,
+  CODE_FOR_aarch64_sm3tt1bqv4si = 3602,
+  CODE_FOR_aarch64_sm3tt2aqv4si = 3603,
+  CODE_FOR_aarch64_sm3tt2bqv4si = 3604,
+  CODE_FOR_aarch64_sm3partw1qv4si = 3605,
+  CODE_FOR_aarch64_sm3partw2qv4si = 3606,
+  CODE_FOR_aarch64_sm4eqv4si = 3607,
+  CODE_FOR_aarch64_sm4ekeyqv4si = 3608,
+  CODE_FOR_aarch64_simd_fmlal_lowv2sf = 3609,
+  CODE_FOR_aarch64_simd_fmlalq_lowv4sf = 3610,
+  CODE_FOR_aarch64_simd_fmlsl_lowv2sf = 3611,
+  CODE_FOR_aarch64_simd_fmlslq_lowv4sf = 3612,
+  CODE_FOR_aarch64_simd_fmlal_highv2sf = 3613,
+  CODE_FOR_aarch64_simd_fmlalq_highv4sf = 3614,
+  CODE_FOR_aarch64_simd_fmlsl_highv2sf = 3615,
+  CODE_FOR_aarch64_simd_fmlslq_highv4sf = 3616,
+  CODE_FOR_aarch64_simd_fmlal_lane_lowv2sf = 3617,
+  CODE_FOR_aarch64_simd_fmlsl_lane_lowv2sf = 3618,
+  CODE_FOR_aarch64_simd_fmlal_lane_highv2sf = 3619,
+  CODE_FOR_aarch64_simd_fmlsl_lane_highv2sf = 3620,
+  CODE_FOR_aarch64_simd_fmlalq_laneq_lowv4sf = 3621,
+  CODE_FOR_aarch64_simd_fmlslq_laneq_lowv4sf = 3622,
+  CODE_FOR_aarch64_simd_fmlalq_laneq_highv4sf = 3623,
+  CODE_FOR_aarch64_simd_fmlslq_laneq_highv4sf = 3624,
+  CODE_FOR_aarch64_simd_fmlal_laneq_lowv2sf = 3625,
+  CODE_FOR_aarch64_simd_fmlsl_laneq_lowv2sf = 3626,
+  CODE_FOR_aarch64_simd_fmlal_laneq_highv2sf = 3627,
+  CODE_FOR_aarch64_simd_fmlsl_laneq_highv2sf = 3628,
+  CODE_FOR_aarch64_simd_fmlalq_lane_lowv4sf = 3629,
+  CODE_FOR_aarch64_simd_fmlslq_lane_lowv4sf = 3630,
+  CODE_FOR_aarch64_simd_fmlalq_lane_highv4sf = 3631,
+  CODE_FOR_aarch64_simd_fmlslq_lane_highv4sf = 3632,
+  CODE_FOR_aarch64_crypto_pmulldi = 3633,
+  CODE_FOR_aarch64_crypto_pmullv2di = 3634,
+  CODE_FOR_aarch64_compare_and_swapqi = 3635,
+  CODE_FOR_aarch64_compare_and_swaphi = 3636,
+  CODE_FOR_aarch64_compare_and_swapsi = 3637,
+  CODE_FOR_aarch64_compare_and_swapdi = 3638,
+  CODE_FOR_aarch64_compare_and_swapqi_lse = 3639,
+  CODE_FOR_aarch64_compare_and_swaphi_lse = 3640,
+  CODE_FOR_aarch64_compare_and_swapsi_lse = 3641,
+  CODE_FOR_aarch64_compare_and_swapdi_lse = 3642,
+  CODE_FOR_aarch64_atomic_exchangeqi = 3643,
+  CODE_FOR_aarch64_atomic_exchangehi = 3644,
+  CODE_FOR_aarch64_atomic_exchangesi = 3645,
+  CODE_FOR_aarch64_atomic_exchangedi = 3646,
+  CODE_FOR_aarch64_atomic_exchangeqi_lse = 3647,
+  CODE_FOR_aarch64_atomic_exchangehi_lse = 3648,
+  CODE_FOR_aarch64_atomic_exchangesi_lse = 3649,
+  CODE_FOR_aarch64_atomic_exchangedi_lse = 3650,
+  CODE_FOR_aarch64_atomic_addqi = 3651,
+  CODE_FOR_aarch64_atomic_subqi = 3652,
+  CODE_FOR_aarch64_atomic_orqi = 3653,
+  CODE_FOR_aarch64_atomic_xorqi = 3654,
+  CODE_FOR_aarch64_atomic_andqi = 3655,
+  CODE_FOR_aarch64_atomic_addhi = 3656,
+  CODE_FOR_aarch64_atomic_subhi = 3657,
+  CODE_FOR_aarch64_atomic_orhi = 3658,
+  CODE_FOR_aarch64_atomic_xorhi = 3659,
+  CODE_FOR_aarch64_atomic_andhi = 3660,
+  CODE_FOR_aarch64_atomic_addsi = 3661,
+  CODE_FOR_aarch64_atomic_subsi = 3662,
+  CODE_FOR_aarch64_atomic_orsi = 3663,
+  CODE_FOR_aarch64_atomic_xorsi = 3664,
+  CODE_FOR_aarch64_atomic_andsi = 3665,
+  CODE_FOR_aarch64_atomic_adddi = 3666,
+  CODE_FOR_aarch64_atomic_subdi = 3667,
+  CODE_FOR_aarch64_atomic_ordi = 3668,
+  CODE_FOR_aarch64_atomic_xordi = 3669,
+  CODE_FOR_aarch64_atomic_anddi = 3670,
+  CODE_FOR_aarch64_atomic_iorqi_lse = 3671,
+  CODE_FOR_aarch64_atomic_bicqi_lse = 3672,
+  CODE_FOR_aarch64_atomic_xorqi_lse = 3673,
+  CODE_FOR_aarch64_atomic_addqi_lse = 3674,
+  CODE_FOR_aarch64_atomic_iorhi_lse = 3675,
+  CODE_FOR_aarch64_atomic_bichi_lse = 3676,
+  CODE_FOR_aarch64_atomic_xorhi_lse = 3677,
+  CODE_FOR_aarch64_atomic_addhi_lse = 3678,
+  CODE_FOR_aarch64_atomic_iorsi_lse = 3679,
+  CODE_FOR_aarch64_atomic_bicsi_lse = 3680,
+  CODE_FOR_aarch64_atomic_xorsi_lse = 3681,
+  CODE_FOR_aarch64_atomic_addsi_lse = 3682,
+  CODE_FOR_aarch64_atomic_iordi_lse = 3683,
+  CODE_FOR_aarch64_atomic_bicdi_lse = 3684,
+  CODE_FOR_aarch64_atomic_xordi_lse = 3685,
+  CODE_FOR_aarch64_atomic_adddi_lse = 3686,
+  CODE_FOR_atomic_nandqi = 3687,
+  CODE_FOR_atomic_nandhi = 3688,
+  CODE_FOR_atomic_nandsi = 3689,
+  CODE_FOR_atomic_nanddi = 3690,
+  CODE_FOR_aarch64_atomic_fetch_addqi = 3691,
+  CODE_FOR_aarch64_atomic_fetch_subqi = 3692,
+  CODE_FOR_aarch64_atomic_fetch_orqi = 3693,
+  CODE_FOR_aarch64_atomic_fetch_xorqi = 3694,
+  CODE_FOR_aarch64_atomic_fetch_andqi = 3695,
+  CODE_FOR_aarch64_atomic_fetch_addhi = 3696,
+  CODE_FOR_aarch64_atomic_fetch_subhi = 3697,
+  CODE_FOR_aarch64_atomic_fetch_orhi = 3698,
+  CODE_FOR_aarch64_atomic_fetch_xorhi = 3699,
+  CODE_FOR_aarch64_atomic_fetch_andhi = 3700,
+  CODE_FOR_aarch64_atomic_fetch_addsi = 3701,
+  CODE_FOR_aarch64_atomic_fetch_subsi = 3702,
+  CODE_FOR_aarch64_atomic_fetch_orsi = 3703,
+  CODE_FOR_aarch64_atomic_fetch_xorsi = 3704,
+  CODE_FOR_aarch64_atomic_fetch_andsi = 3705,
+  CODE_FOR_aarch64_atomic_fetch_adddi = 3706,
+  CODE_FOR_aarch64_atomic_fetch_subdi = 3707,
+  CODE_FOR_aarch64_atomic_fetch_ordi = 3708,
+  CODE_FOR_aarch64_atomic_fetch_xordi = 3709,
+  CODE_FOR_aarch64_atomic_fetch_anddi = 3710,
+  CODE_FOR_aarch64_atomic_fetch_iorqi_lse = 3711,
+  CODE_FOR_aarch64_atomic_fetch_bicqi_lse = 3712,
+  CODE_FOR_aarch64_atomic_fetch_xorqi_lse = 3713,
+  CODE_FOR_aarch64_atomic_fetch_addqi_lse = 3714,
+  CODE_FOR_aarch64_atomic_fetch_iorhi_lse = 3715,
+  CODE_FOR_aarch64_atomic_fetch_bichi_lse = 3716,
+  CODE_FOR_aarch64_atomic_fetch_xorhi_lse = 3717,
+  CODE_FOR_aarch64_atomic_fetch_addhi_lse = 3718,
+  CODE_FOR_aarch64_atomic_fetch_iorsi_lse = 3719,
+  CODE_FOR_aarch64_atomic_fetch_bicsi_lse = 3720,
+  CODE_FOR_aarch64_atomic_fetch_xorsi_lse = 3721,
+  CODE_FOR_aarch64_atomic_fetch_addsi_lse = 3722,
+  CODE_FOR_aarch64_atomic_fetch_iordi_lse = 3723,
+  CODE_FOR_aarch64_atomic_fetch_bicdi_lse = 3724,
+  CODE_FOR_aarch64_atomic_fetch_xordi_lse = 3725,
+  CODE_FOR_aarch64_atomic_fetch_adddi_lse = 3726,
+  CODE_FOR_atomic_fetch_nandqi = 3727,
+  CODE_FOR_atomic_fetch_nandhi = 3728,
+  CODE_FOR_atomic_fetch_nandsi = 3729,
+  CODE_FOR_atomic_fetch_nanddi = 3730,
+  CODE_FOR_aarch64_atomic_add_fetchqi = 3731,
+  CODE_FOR_aarch64_atomic_sub_fetchqi = 3732,
+  CODE_FOR_aarch64_atomic_or_fetchqi = 3733,
+  CODE_FOR_aarch64_atomic_xor_fetchqi = 3734,
+  CODE_FOR_aarch64_atomic_and_fetchqi = 3735,
+  CODE_FOR_aarch64_atomic_add_fetchhi = 3736,
+  CODE_FOR_aarch64_atomic_sub_fetchhi = 3737,
+  CODE_FOR_aarch64_atomic_or_fetchhi = 3738,
+  CODE_FOR_aarch64_atomic_xor_fetchhi = 3739,
+  CODE_FOR_aarch64_atomic_and_fetchhi = 3740,
+  CODE_FOR_aarch64_atomic_add_fetchsi = 3741,
+  CODE_FOR_aarch64_atomic_sub_fetchsi = 3742,
+  CODE_FOR_aarch64_atomic_or_fetchsi = 3743,
+  CODE_FOR_aarch64_atomic_xor_fetchsi = 3744,
+  CODE_FOR_aarch64_atomic_and_fetchsi = 3745,
+  CODE_FOR_aarch64_atomic_add_fetchdi = 3746,
+  CODE_FOR_aarch64_atomic_sub_fetchdi = 3747,
+  CODE_FOR_aarch64_atomic_or_fetchdi = 3748,
+  CODE_FOR_aarch64_atomic_xor_fetchdi = 3749,
+  CODE_FOR_aarch64_atomic_and_fetchdi = 3750,
+  CODE_FOR_atomic_nand_fetchqi = 3751,
+  CODE_FOR_atomic_nand_fetchhi = 3752,
+  CODE_FOR_atomic_nand_fetchsi = 3753,
+  CODE_FOR_atomic_nand_fetchdi = 3754,
+  CODE_FOR_atomic_loadqi = 3755,
+  CODE_FOR_atomic_loadhi = 3756,
+  CODE_FOR_atomic_loadsi = 3757,
+  CODE_FOR_atomic_loaddi = 3758,
+  CODE_FOR_atomic_storeqi = 3759,
+  CODE_FOR_atomic_storehi = 3760,
+  CODE_FOR_atomic_storesi = 3761,
+  CODE_FOR_atomic_storedi = 3762,
+  CODE_FOR_aarch64_load_exclusiveqi = 3763,
+  CODE_FOR_aarch64_load_exclusivehi = 3764,
+  CODE_FOR_aarch64_load_exclusivesi = 3765,
+  CODE_FOR_aarch64_load_exclusivedi = 3766,
+  CODE_FOR_aarch64_store_exclusiveqi = 3767,
+  CODE_FOR_aarch64_store_exclusivehi = 3768,
+  CODE_FOR_aarch64_store_exclusivesi = 3769,
+  CODE_FOR_aarch64_store_exclusivedi = 3770,
+  CODE_FOR_aarch64_pred_movvnx16qi = 3793,
+  CODE_FOR_aarch64_pred_movvnx8hi = 3794,
+  CODE_FOR_aarch64_pred_movvnx4si = 3795,
+  CODE_FOR_aarch64_pred_movvnx2di = 3796,
+  CODE_FOR_aarch64_pred_movvnx8hf = 3797,
+  CODE_FOR_aarch64_pred_movvnx4sf = 3798,
+  CODE_FOR_aarch64_pred_movvnx2df = 3799,
+  CODE_FOR_maskloadvnx16qivnx16bi = 3800,
+  CODE_FOR_maskloadvnx8hivnx8bi = 3801,
+  CODE_FOR_maskloadvnx4sivnx4bi = 3802,
+  CODE_FOR_maskloadvnx2divnx2bi = 3803,
+  CODE_FOR_maskloadvnx8hfvnx8bi = 3804,
+  CODE_FOR_maskloadvnx4sfvnx4bi = 3805,
+  CODE_FOR_maskloadvnx2dfvnx2bi = 3806,
+  CODE_FOR_maskstorevnx16qivnx16bi = 3807,
+  CODE_FOR_maskstorevnx8hivnx8bi = 3808,
+  CODE_FOR_maskstorevnx4sivnx4bi = 3809,
+  CODE_FOR_maskstorevnx2divnx2bi = 3810,
+  CODE_FOR_maskstorevnx8hfvnx8bi = 3811,
+  CODE_FOR_maskstorevnx4sfvnx4bi = 3812,
+  CODE_FOR_maskstorevnx2dfvnx2bi = 3813,
+  CODE_FOR_mask_gather_loadvnx4si = 3814,
+  CODE_FOR_mask_gather_loadvnx4sf = 3815,
+  CODE_FOR_mask_gather_loadvnx2di = 3816,
+  CODE_FOR_mask_gather_loadvnx2df = 3817,
+  CODE_FOR_mask_scatter_storevnx4si = 3818,
+  CODE_FOR_mask_scatter_storevnx4sf = 3819,
+  CODE_FOR_mask_scatter_storevnx2di = 3820,
+  CODE_FOR_mask_scatter_storevnx2df = 3821,
+  CODE_FOR_aarch64_pred_movvnx32qi = 3864,
+  CODE_FOR_aarch64_pred_movvnx16hi = 3865,
+  CODE_FOR_aarch64_pred_movvnx8si = 3866,
+  CODE_FOR_aarch64_pred_movvnx4di = 3867,
+  CODE_FOR_aarch64_pred_movvnx16hf = 3868,
+  CODE_FOR_aarch64_pred_movvnx8sf = 3869,
+  CODE_FOR_aarch64_pred_movvnx4df = 3870,
+  CODE_FOR_aarch64_pred_movvnx48qi = 3871,
+  CODE_FOR_aarch64_pred_movvnx24hi = 3872,
+  CODE_FOR_aarch64_pred_movvnx12si = 3873,
+  CODE_FOR_aarch64_pred_movvnx6di = 3874,
+  CODE_FOR_aarch64_pred_movvnx24hf = 3875,
+  CODE_FOR_aarch64_pred_movvnx12sf = 3876,
+  CODE_FOR_aarch64_pred_movvnx6df = 3877,
+  CODE_FOR_aarch64_pred_movvnx64qi = 3878,
+  CODE_FOR_aarch64_pred_movvnx32hi = 3879,
+  CODE_FOR_aarch64_pred_movvnx16si = 3880,
+  CODE_FOR_aarch64_pred_movvnx8di = 3881,
+  CODE_FOR_aarch64_pred_movvnx32hf = 3882,
+  CODE_FOR_aarch64_pred_movvnx16sf = 3883,
+  CODE_FOR_aarch64_pred_movvnx8df = 3884,
+  CODE_FOR_extract_last_vnx16qi = 3917,
+  CODE_FOR_extract_last_vnx8hi = 3918,
+  CODE_FOR_extract_last_vnx4si = 3919,
+  CODE_FOR_extract_last_vnx2di = 3920,
+  CODE_FOR_extract_last_vnx8hf = 3921,
+  CODE_FOR_extract_last_vnx4sf = 3922,
+  CODE_FOR_extract_last_vnx2df = 3923,
+  CODE_FOR_sve_ld1rvnx16qi = 3931,
+  CODE_FOR_sve_ld1rvnx8hi = 3932,
+  CODE_FOR_sve_ld1rvnx4si = 3933,
+  CODE_FOR_sve_ld1rvnx2di = 3934,
+  CODE_FOR_sve_ld1rvnx8hf = 3935,
+  CODE_FOR_sve_ld1rvnx4sf = 3936,
+  CODE_FOR_sve_ld1rvnx2df = 3937,
+  CODE_FOR_vec_seriesvnx16qi = 3945,
+  CODE_FOR_vec_seriesvnx8hi = 3946,
+  CODE_FOR_vec_seriesvnx4si = 3947,
+  CODE_FOR_vec_seriesvnx2di = 3948,
+  CODE_FOR_vec_mask_load_lanesvnx32qivnx16qi = 3953,
+  CODE_FOR_vec_mask_load_lanesvnx16hivnx8hi = 3954,
+  CODE_FOR_vec_mask_load_lanesvnx8sivnx4si = 3955,
+  CODE_FOR_vec_mask_load_lanesvnx4divnx2di = 3956,
+  CODE_FOR_vec_mask_load_lanesvnx16hfvnx8hf = 3957,
+  CODE_FOR_vec_mask_load_lanesvnx8sfvnx4sf = 3958,
+  CODE_FOR_vec_mask_load_lanesvnx4dfvnx2df = 3959,
+  CODE_FOR_vec_mask_load_lanesvnx48qivnx16qi = 3960,
+  CODE_FOR_vec_mask_load_lanesvnx24hivnx8hi = 3961,
+  CODE_FOR_vec_mask_load_lanesvnx12sivnx4si = 3962,
+  CODE_FOR_vec_mask_load_lanesvnx6divnx2di = 3963,
+  CODE_FOR_vec_mask_load_lanesvnx24hfvnx8hf = 3964,
+  CODE_FOR_vec_mask_load_lanesvnx12sfvnx4sf = 3965,
+  CODE_FOR_vec_mask_load_lanesvnx6dfvnx2df = 3966,
+  CODE_FOR_vec_mask_load_lanesvnx64qivnx16qi = 3967,
+  CODE_FOR_vec_mask_load_lanesvnx32hivnx8hi = 3968,
+  CODE_FOR_vec_mask_load_lanesvnx16sivnx4si = 3969,
+  CODE_FOR_vec_mask_load_lanesvnx8divnx2di = 3970,
+  CODE_FOR_vec_mask_load_lanesvnx32hfvnx8hf = 3971,
+  CODE_FOR_vec_mask_load_lanesvnx16sfvnx4sf = 3972,
+  CODE_FOR_vec_mask_load_lanesvnx8dfvnx2df = 3973,
+  CODE_FOR_vec_mask_store_lanesvnx32qivnx16qi = 3974,
+  CODE_FOR_vec_mask_store_lanesvnx16hivnx8hi = 3975,
+  CODE_FOR_vec_mask_store_lanesvnx8sivnx4si = 3976,
+  CODE_FOR_vec_mask_store_lanesvnx4divnx2di = 3977,
+  CODE_FOR_vec_mask_store_lanesvnx16hfvnx8hf = 3978,
+  CODE_FOR_vec_mask_store_lanesvnx8sfvnx4sf = 3979,
+  CODE_FOR_vec_mask_store_lanesvnx4dfvnx2df = 3980,
+  CODE_FOR_vec_mask_store_lanesvnx48qivnx16qi = 3981,
+  CODE_FOR_vec_mask_store_lanesvnx24hivnx8hi = 3982,
+  CODE_FOR_vec_mask_store_lanesvnx12sivnx4si = 3983,
+  CODE_FOR_vec_mask_store_lanesvnx6divnx2di = 3984,
+  CODE_FOR_vec_mask_store_lanesvnx24hfvnx8hf = 3985,
+  CODE_FOR_vec_mask_store_lanesvnx12sfvnx4sf = 3986,
+  CODE_FOR_vec_mask_store_lanesvnx6dfvnx2df = 3987,
+  CODE_FOR_vec_mask_store_lanesvnx64qivnx16qi = 3988,
+  CODE_FOR_vec_mask_store_lanesvnx32hivnx8hi = 3989,
+  CODE_FOR_vec_mask_store_lanesvnx16sivnx4si = 3990,
+  CODE_FOR_vec_mask_store_lanesvnx8divnx2di = 3991,
+  CODE_FOR_vec_mask_store_lanesvnx32hfvnx8hf = 3992,
+  CODE_FOR_vec_mask_store_lanesvnx16sfvnx4sf = 3993,
+  CODE_FOR_vec_mask_store_lanesvnx8dfvnx2df = 3994,
+  CODE_FOR_aarch64_sve_zip1vnx16qi = 4026,
+  CODE_FOR_aarch64_sve_zip2vnx16qi = 4027,
+  CODE_FOR_aarch64_sve_trn1vnx16qi = 4028,
+  CODE_FOR_aarch64_sve_trn2vnx16qi = 4029,
+  CODE_FOR_aarch64_sve_uzp1vnx16qi = 4030,
+  CODE_FOR_aarch64_sve_uzp2vnx16qi = 4031,
+  CODE_FOR_aarch64_sve_zip1vnx8hi = 4032,
+  CODE_FOR_aarch64_sve_zip2vnx8hi = 4033,
+  CODE_FOR_aarch64_sve_trn1vnx8hi = 4034,
+  CODE_FOR_aarch64_sve_trn2vnx8hi = 4035,
+  CODE_FOR_aarch64_sve_uzp1vnx8hi = 4036,
+  CODE_FOR_aarch64_sve_uzp2vnx8hi = 4037,
+  CODE_FOR_aarch64_sve_zip1vnx4si = 4038,
+  CODE_FOR_aarch64_sve_zip2vnx4si = 4039,
+  CODE_FOR_aarch64_sve_trn1vnx4si = 4040,
+  CODE_FOR_aarch64_sve_trn2vnx4si = 4041,
+  CODE_FOR_aarch64_sve_uzp1vnx4si = 4042,
+  CODE_FOR_aarch64_sve_uzp2vnx4si = 4043,
+  CODE_FOR_aarch64_sve_zip1vnx2di = 4044,
+  CODE_FOR_aarch64_sve_zip2vnx2di = 4045,
+  CODE_FOR_aarch64_sve_trn1vnx2di = 4046,
+  CODE_FOR_aarch64_sve_trn2vnx2di = 4047,
+  CODE_FOR_aarch64_sve_uzp1vnx2di = 4048,
+  CODE_FOR_aarch64_sve_uzp2vnx2di = 4049,
+  CODE_FOR_aarch64_sve_zip1vnx8hf = 4050,
+  CODE_FOR_aarch64_sve_zip2vnx8hf = 4051,
+  CODE_FOR_aarch64_sve_trn1vnx8hf = 4052,
+  CODE_FOR_aarch64_sve_trn2vnx8hf = 4053,
+  CODE_FOR_aarch64_sve_uzp1vnx8hf = 4054,
+  CODE_FOR_aarch64_sve_uzp2vnx8hf = 4055,
+  CODE_FOR_aarch64_sve_zip1vnx4sf = 4056,
+  CODE_FOR_aarch64_sve_zip2vnx4sf = 4057,
+  CODE_FOR_aarch64_sve_trn1vnx4sf = 4058,
+  CODE_FOR_aarch64_sve_trn2vnx4sf = 4059,
+  CODE_FOR_aarch64_sve_uzp1vnx4sf = 4060,
+  CODE_FOR_aarch64_sve_uzp2vnx4sf = 4061,
+  CODE_FOR_aarch64_sve_zip1vnx2df = 4062,
+  CODE_FOR_aarch64_sve_zip2vnx2df = 4063,
+  CODE_FOR_aarch64_sve_trn1vnx2df = 4064,
+  CODE_FOR_aarch64_sve_trn2vnx2df = 4065,
+  CODE_FOR_aarch64_sve_uzp1vnx2df = 4066,
+  CODE_FOR_aarch64_sve_uzp2vnx2df = 4067,
+  CODE_FOR_addvnx16qi3 = 4098,
+  CODE_FOR_addvnx8hi3 = 4099,
+  CODE_FOR_addvnx4si3 = 4100,
+  CODE_FOR_addvnx2di3 = 4101,
+  CODE_FOR_subvnx16qi3 = 4102,
+  CODE_FOR_subvnx8hi3 = 4103,
+  CODE_FOR_subvnx4si3 = 4104,
+  CODE_FOR_subvnx2di3 = 4105,
+  CODE_FOR_andvnx16qi3 = 4150,
+  CODE_FOR_iorvnx16qi3 = 4151,
+  CODE_FOR_xorvnx16qi3 = 4152,
+  CODE_FOR_andvnx8hi3 = 4153,
+  CODE_FOR_iorvnx8hi3 = 4154,
+  CODE_FOR_xorvnx8hi3 = 4155,
+  CODE_FOR_andvnx4si3 = 4156,
+  CODE_FOR_iorvnx4si3 = 4157,
+  CODE_FOR_xorvnx4si3 = 4158,
+  CODE_FOR_andvnx2di3 = 4159,
+  CODE_FOR_iorvnx2di3 = 4160,
+  CODE_FOR_xorvnx2di3 = 4161,
+  CODE_FOR_bicvnx16qi3 = 4171,
+  CODE_FOR_bicvnx8hi3 = 4172,
+  CODE_FOR_bicvnx4si3 = 4173,
+  CODE_FOR_bicvnx2di3 = 4174,
+  CODE_FOR_andvnx16bi3 = 4175,
+  CODE_FOR_andvnx8bi3 = 4176,
+  CODE_FOR_andvnx4bi3 = 4177,
+  CODE_FOR_andvnx2bi3 = 4178,
+  CODE_FOR_pred_andvnx16bi3 = 4179,
+  CODE_FOR_pred_iorvnx16bi3 = 4180,
+  CODE_FOR_pred_xorvnx16bi3 = 4181,
+  CODE_FOR_pred_andvnx8bi3 = 4182,
+  CODE_FOR_pred_iorvnx8bi3 = 4183,
+  CODE_FOR_pred_xorvnx8bi3 = 4184,
+  CODE_FOR_pred_andvnx4bi3 = 4185,
+  CODE_FOR_pred_iorvnx4bi3 = 4186,
+  CODE_FOR_pred_xorvnx4bi3 = 4187,
+  CODE_FOR_pred_andvnx2bi3 = 4188,
+  CODE_FOR_pred_iorvnx2bi3 = 4189,
+  CODE_FOR_pred_xorvnx2bi3 = 4190,
+  CODE_FOR_ptest_ptruevnx16bi = 4247,
+  CODE_FOR_ptest_ptruevnx8bi = 4248,
+  CODE_FOR_ptest_ptruevnx4bi = 4249,
+  CODE_FOR_ptest_ptruevnx2bi = 4250,
+  CODE_FOR_while_ultsivnx16bi = 4251,
+  CODE_FOR_while_ultdivnx16bi = 4252,
+  CODE_FOR_while_ultsivnx8bi = 4253,
+  CODE_FOR_while_ultdivnx8bi = 4254,
+  CODE_FOR_while_ultsivnx4bi = 4255,
+  CODE_FOR_while_ultdivnx4bi = 4256,
+  CODE_FOR_while_ultsivnx2bi = 4257,
+  CODE_FOR_while_ultdivnx2bi = 4258,
+  CODE_FOR_while_ultsivnx16bi_cc = 4259,
+  CODE_FOR_while_ultdivnx16bi_cc = 4260,
+  CODE_FOR_while_ultsivnx8bi_cc = 4261,
+  CODE_FOR_while_ultdivnx8bi_cc = 4262,
+  CODE_FOR_while_ultsivnx4bi_cc = 4263,
+  CODE_FOR_while_ultdivnx4bi_cc = 4264,
+  CODE_FOR_while_ultsivnx2bi_cc = 4265,
+  CODE_FOR_while_ultdivnx2bi_cc = 4266,
+  CODE_FOR_vcond_mask_vnx16qivnx16bi = 4548,
+  CODE_FOR_vcond_mask_vnx8hivnx8bi = 4549,
+  CODE_FOR_vcond_mask_vnx4sivnx4bi = 4550,
+  CODE_FOR_vcond_mask_vnx2divnx2bi = 4551,
+  CODE_FOR_vcond_mask_vnx8hfvnx8bi = 4552,
+  CODE_FOR_vcond_mask_vnx4sfvnx4bi = 4553,
+  CODE_FOR_vcond_mask_vnx2dfvnx2bi = 4554,
+  CODE_FOR_aarch64_sve_dupvnx16qi_const = 4555,
+  CODE_FOR_aarch64_sve_dupvnx8hi_const = 4556,
+  CODE_FOR_aarch64_sve_dupvnx4si_const = 4557,
+  CODE_FOR_aarch64_sve_dupvnx2di_const = 4558,
+  CODE_FOR_fold_extract_last_vnx16qi = 4825,
+  CODE_FOR_fold_extract_last_vnx8hi = 4826,
+  CODE_FOR_fold_extract_last_vnx4si = 4827,
+  CODE_FOR_fold_extract_last_vnx2di = 4828,
+  CODE_FOR_fold_extract_last_vnx8hf = 4829,
+  CODE_FOR_fold_extract_last_vnx4sf = 4830,
+  CODE_FOR_fold_extract_last_vnx2df = 4831,
+  CODE_FOR_aarch64_sve_floatvnx4sivnx2df2 = 4972,
+  CODE_FOR_aarch64_sve_floatunsvnx4sivnx2df2 = 4973,
+  CODE_FOR_aarch64_sve_floatvnx2divnx2df2 = 4974,
+  CODE_FOR_aarch64_sve_floatunsvnx2divnx2df2 = 4975,
+  CODE_FOR_aarch64_sve_extendvnx8hfvnx4sf2 = 4978,
+  CODE_FOR_aarch64_sve_extendvnx4sfvnx2df2 = 4979,
+  CODE_FOR_aarch64_sve_punpklo_vnx16bi = 4980,
+  CODE_FOR_aarch64_sve_punpkhi_vnx16bi = 4981,
+  CODE_FOR_aarch64_sve_punpklo_vnx8bi = 4982,
+  CODE_FOR_aarch64_sve_punpkhi_vnx8bi = 4983,
+  CODE_FOR_aarch64_sve_punpklo_vnx4bi = 4984,
+  CODE_FOR_aarch64_sve_punpkhi_vnx4bi = 4985,
+  CODE_FOR_aarch64_sve_sunpkhi_vnx16qi = 4986,
+  CODE_FOR_aarch64_sve_uunpkhi_vnx16qi = 4987,
+  CODE_FOR_aarch64_sve_sunpklo_vnx16qi = 4988,
+  CODE_FOR_aarch64_sve_uunpklo_vnx16qi = 4989,
+  CODE_FOR_aarch64_sve_sunpkhi_vnx8hi = 4990,
+  CODE_FOR_aarch64_sve_uunpkhi_vnx8hi = 4991,
+  CODE_FOR_aarch64_sve_sunpklo_vnx8hi = 4992,
+  CODE_FOR_aarch64_sve_uunpklo_vnx8hi = 4993,
+  CODE_FOR_aarch64_sve_sunpkhi_vnx4si = 4994,
+  CODE_FOR_aarch64_sve_uunpkhi_vnx4si = 4995,
+  CODE_FOR_aarch64_sve_sunpklo_vnx4si = 4996,
+  CODE_FOR_aarch64_sve_uunpklo_vnx4si = 4997,
+  CODE_FOR_vec_pack_trunc_vnx8bi = 4998,
+  CODE_FOR_vec_pack_trunc_vnx4bi = 4999,
+  CODE_FOR_vec_pack_trunc_vnx2bi = 5000,
+  CODE_FOR_vec_pack_trunc_vnx8hi = 5001,
+  CODE_FOR_vec_pack_trunc_vnx4si = 5002,
+  CODE_FOR_vec_pack_trunc_vnx2di = 5003,
+  CODE_FOR_vec_shl_insert_vnx16qi = 5130,
+  CODE_FOR_vec_shl_insert_vnx8hi = 5131,
+  CODE_FOR_vec_shl_insert_vnx4si = 5132,
+  CODE_FOR_vec_shl_insert_vnx2di = 5133,
+  CODE_FOR_vec_shl_insert_vnx8hf = 5134,
+  CODE_FOR_vec_shl_insert_vnx4sf = 5135,
+  CODE_FOR_vec_shl_insert_vnx2df = 5136,
+  CODE_FOR_cbranchsi4 = 5137,
+  CODE_FOR_cbranchdi4 = 5138,
+  CODE_FOR_cbranchsf4 = 5139,
+  CODE_FOR_cbranchdf4 = 5140,
+  CODE_FOR_cbranchcc4 = 5141,
+  CODE_FOR_modsi3 = 5142,
+  CODE_FOR_moddi3 = 5143,
+  CODE_FOR_casesi = 5144,
+  CODE_FOR_casesi_dispatch = 5145,
+  CODE_FOR_prologue = 5146,
+  CODE_FOR_epilogue = 5147,
+  CODE_FOR_sibcall_epilogue = 5148,
+  CODE_FOR_return = 5149,
+  CODE_FOR_call = 5150,
+  CODE_FOR_call_value = 5151,
+  CODE_FOR_sibcall = 5152,
+  CODE_FOR_sibcall_value = 5153,
+  CODE_FOR_untyped_call = 5154,
+  CODE_FOR_movqi = 5155,
+  CODE_FOR_movhi = 5156,
+  CODE_FOR_movsi = 5157,
+  CODE_FOR_movdi = 5158,
+  CODE_FOR_movti = 5159,
+  CODE_FOR_movhf = 5160,
+  CODE_FOR_movsf = 5161,
+  CODE_FOR_movdf = 5162,
+  CODE_FOR_movtf = 5163,
+  CODE_FOR_movmemdi = 5164,
+  CODE_FOR_extendsidi2 = 5165,
+  CODE_FOR_zero_extendsidi2 = 5166,
+  CODE_FOR_extendqisi2 = 5167,
+  CODE_FOR_zero_extendqisi2 = 5168,
+  CODE_FOR_extendqidi2 = 5169,
+  CODE_FOR_zero_extendqidi2 = 5170,
+  CODE_FOR_extendhisi2 = 5171,
+  CODE_FOR_zero_extendhisi2 = 5172,
+  CODE_FOR_extendhidi2 = 5173,
+  CODE_FOR_zero_extendhidi2 = 5174,
+  CODE_FOR_extendqihi2 = 5175,
+  CODE_FOR_zero_extendqihi2 = 5176,
+  CODE_FOR_addsi3 = 5177,
+  CODE_FOR_adddi3 = 5178,
+  CODE_FOR_addvsi4 = 5179,
+  CODE_FOR_addvdi4 = 5180,
+  CODE_FOR_uaddvsi4 = 5181,
+  CODE_FOR_uaddvdi4 = 5182,
+  CODE_FOR_addti3 = 5183,
+  CODE_FOR_addvti4 = 5184,
+  CODE_FOR_uaddvti4 = 5185,
+  CODE_FOR_addsi3_carryin = 5186,
+  CODE_FOR_adddi3_carryin = 5187,
+  CODE_FOR_addsi3_carryinC = 5188,
+  CODE_FOR_adddi3_carryinC = 5189,
+  CODE_FOR_addsi3_carryinV = 5190,
+  CODE_FOR_adddi3_carryinV = 5191,
+  CODE_FOR_subvsi4 = 5192,
+  CODE_FOR_subvdi4 = 5193,
+  CODE_FOR_negvsi3 = 5194,
+  CODE_FOR_negvdi3 = 5195,
+  CODE_FOR_usubvsi4 = 5196,
+  CODE_FOR_usubvdi4 = 5197,
+  CODE_FOR_subti3 = 5198,
+  CODE_FOR_subvti4 = 5199,
+  CODE_FOR_usubvti4 = 5200,
+  CODE_FOR_negvti3 = 5201,
+  CODE_FOR_subsi3_carryin = 5202,
+  CODE_FOR_subdi3_carryin = 5203,
+  CODE_FOR_usubsi3_carryinC = 5204,
+  CODE_FOR_usubdi3_carryinC = 5205,
+  CODE_FOR_subsi3_carryinV = 5206,
+  CODE_FOR_subdi3_carryinV = 5207,
+  CODE_FOR_abssi2 = 5208,
+  CODE_FOR_absdi2 = 5209,
+  CODE_FOR_mulditi3 = 5210,
+  CODE_FOR_umulditi3 = 5211,
+  CODE_FOR_multi3 = 5212,
+  CODE_FOR_cstoresi4 = 5213,
+  CODE_FOR_cstoredi4 = 5214,
+  CODE_FOR_cstorecc4 = 5215,
+  CODE_FOR_cstoresf4 = 5216,
+  CODE_FOR_cstoredf4 = 5217,
+  CODE_FOR_cmovsi6 = 5218,
+  CODE_FOR_cmovdi6 = 5219,
+  CODE_FOR_cmovsf6 = 5220,
+  CODE_FOR_cmovdf6 = 5221,
+  CODE_FOR_movqicc = 5222,
+  CODE_FOR_movhicc = 5223,
+  CODE_FOR_movsicc = 5224,
+  CODE_FOR_movdicc = 5225,
+  CODE_FOR_movsfsicc = 5226,
+  CODE_FOR_movsfdicc = 5227,
+  CODE_FOR_movdfsicc = 5228,
+  CODE_FOR_movdfdicc = 5229,
+  CODE_FOR_movsfcc = 5230,
+  CODE_FOR_movdfcc = 5231,
+  CODE_FOR_negsicc = 5232,
+  CODE_FOR_notsicc = 5233,
+  CODE_FOR_negdicc = 5234,
+  CODE_FOR_notdicc = 5235,
+  CODE_FOR_umaxsi3 = 5236,
+  CODE_FOR_umaxdi3 = 5237,
+  CODE_FOR_ffssi2 = 5238,
+  CODE_FOR_ffsdi2 = 5239,
+  CODE_FOR_popcountsi2 = 5240,
+  CODE_FOR_popcountdi2 = 5241,
+  CODE_FOR_ashlsi3 = 5242,
+  CODE_FOR_ashrsi3 = 5243,
+  CODE_FOR_lshrsi3 = 5244,
+  CODE_FOR_ashldi3 = 5245,
+  CODE_FOR_ashrdi3 = 5246,
+  CODE_FOR_lshrdi3 = 5247,
+  CODE_FOR_ashlqi3 = 5248,
+  CODE_FOR_ashlhi3 = 5249,
+  CODE_FOR_rotrsi3 = 5250,
+  CODE_FOR_rotrdi3 = 5251,
+  CODE_FOR_rotlsi3 = 5252,
+  CODE_FOR_rotldi3 = 5253,
+  CODE_FOR_extv = 5254,
+  CODE_FOR_extzv = 5255,
+  CODE_FOR_insvsi = 5256,
+  CODE_FOR_insvdi = 5257,
+  CODE_FOR_fmahf4 = 5258,
+  CODE_FOR_fmasf4 = 5259,
+  CODE_FOR_fmadf4 = 5260,
+  CODE_FOR_fnmahf4 = 5261,
+  CODE_FOR_fnmasf4 = 5262,
+  CODE_FOR_fnmadf4 = 5263,
+  CODE_FOR_fmssf4 = 5264,
+  CODE_FOR_fmsdf4 = 5265,
+  CODE_FOR_fnmssf4 = 5266,
+  CODE_FOR_fnmsdf4 = 5267,
+  CODE_FOR_floatsihf2 = 5268,
+  CODE_FOR_floatunssihf2 = 5269,
+  CODE_FOR_floatdihf2 = 5270,
+  CODE_FOR_floatunsdihf2 = 5271,
+  CODE_FOR_divhf3 = 5272,
+  CODE_FOR_divsf3 = 5273,
+  CODE_FOR_divdf3 = 5274,
+  CODE_FOR_sqrthf2 = 5275,
+  CODE_FOR_sqrtsf2 = 5276,
+  CODE_FOR_sqrtdf2 = 5277,
+  CODE_FOR_lrintsfsi2 = 5278,
+  CODE_FOR_lrintsfdi2 = 5279,
+  CODE_FOR_lrintdfsi2 = 5280,
+  CODE_FOR_lrintdfdi2 = 5281,
+  CODE_FOR_copysignsf3 = 5282,
+  CODE_FOR_copysigndf3 = 5283,
+  CODE_FOR_xorsignsf3 = 5284,
+  CODE_FOR_xorsigndf3 = 5285,
+  CODE_FOR_aarch64_reload_movcpsfsi = 5286,
+  CODE_FOR_aarch64_reload_movcpsfdi = 5287,
+  CODE_FOR_aarch64_reload_movcpdfsi = 5288,
+  CODE_FOR_aarch64_reload_movcpdfdi = 5289,
+  CODE_FOR_aarch64_reload_movcptfsi = 5290,
+  CODE_FOR_aarch64_reload_movcptfdi = 5291,
+  CODE_FOR_aarch64_reload_movcpv8qisi = 5292,
+  CODE_FOR_aarch64_reload_movcpv16qisi = 5293,
+  CODE_FOR_aarch64_reload_movcpv4hisi = 5294,
+  CODE_FOR_aarch64_reload_movcpv8hisi = 5295,
+  CODE_FOR_aarch64_reload_movcpv2sisi = 5296,
+  CODE_FOR_aarch64_reload_movcpv4sisi = 5297,
+  CODE_FOR_aarch64_reload_movcpv2disi = 5298,
+  CODE_FOR_aarch64_reload_movcpv2sfsi = 5299,
+  CODE_FOR_aarch64_reload_movcpv4sfsi = 5300,
+  CODE_FOR_aarch64_reload_movcpv2dfsi = 5301,
+  CODE_FOR_aarch64_reload_movcpv8qidi = 5302,
+  CODE_FOR_aarch64_reload_movcpv16qidi = 5303,
+  CODE_FOR_aarch64_reload_movcpv4hidi = 5304,
+  CODE_FOR_aarch64_reload_movcpv8hidi = 5305,
+  CODE_FOR_aarch64_reload_movcpv2sidi = 5306,
+  CODE_FOR_aarch64_reload_movcpv4sidi = 5307,
+  CODE_FOR_aarch64_reload_movcpv2didi = 5308,
+  CODE_FOR_aarch64_reload_movcpv2sfdi = 5309,
+  CODE_FOR_aarch64_reload_movcpv4sfdi = 5310,
+  CODE_FOR_aarch64_reload_movcpv2dfdi = 5311,
+  CODE_FOR_aarch64_reload_movti = 5312,
+  CODE_FOR_aarch64_reload_movtf = 5313,
+  CODE_FOR_add_losym = 5314,
+  CODE_FOR_tlsgd_small_si = 5315,
+  CODE_FOR_tlsgd_small_di = 5316,
+  CODE_FOR_tlsdesc_small_si = 5317,
+  CODE_FOR_tlsdesc_small_di = 5318,
+  CODE_FOR_get_thread_pointerdi = 5319,
+  CODE_FOR_stack_protect_set = 5320,
+  CODE_FOR_stack_protect_test = 5321,
+  CODE_FOR_doloop_end = 5322,
+  CODE_FOR_set_clobber_cc = 5323,
+  CODE_FOR_despeculate_copyqi = 5324,
+  CODE_FOR_despeculate_copyhi = 5325,
+  CODE_FOR_despeculate_copysi = 5326,
+  CODE_FOR_despeculate_copydi = 5327,
+  CODE_FOR_despeculate_copyti = 5328,
+  CODE_FOR_movv8qi = 5329,
+  CODE_FOR_movv16qi = 5330,
+  CODE_FOR_movv4hi = 5331,
+  CODE_FOR_movv8hi = 5332,
+  CODE_FOR_movv2si = 5333,
+  CODE_FOR_movv4si = 5334,
+  CODE_FOR_movv2di = 5335,
+  CODE_FOR_movv4hf = 5336,
+  CODE_FOR_movv8hf = 5337,
+  CODE_FOR_movv2sf = 5338,
+  CODE_FOR_movv4sf = 5339,
+  CODE_FOR_movv2df = 5340,
+  CODE_FOR_movmisalignv8qi = 5341,
+  CODE_FOR_movmisalignv16qi = 5342,
+  CODE_FOR_movmisalignv4hi = 5343,
+  CODE_FOR_movmisalignv8hi = 5344,
+  CODE_FOR_movmisalignv2si = 5345,
+  CODE_FOR_movmisalignv4si = 5346,
+  CODE_FOR_movmisalignv2di = 5347,
+  CODE_FOR_movmisalignv2sf = 5348,
+  CODE_FOR_movmisalignv4sf = 5349,
+  CODE_FOR_movmisalignv2df = 5350,
+  CODE_FOR_aarch64_split_simd_movv16qi = 5351,
+  CODE_FOR_aarch64_split_simd_movv8hi = 5352,
+  CODE_FOR_aarch64_split_simd_movv4si = 5353,
+  CODE_FOR_aarch64_split_simd_movv2di = 5354,
+  CODE_FOR_aarch64_split_simd_movv8hf = 5355,
+  CODE_FOR_aarch64_split_simd_movv4sf = 5356,
+  CODE_FOR_aarch64_split_simd_movv2df = 5357,
+  CODE_FOR_ctzv2si2 = 5358,
+  CODE_FOR_ctzv4si2 = 5359,
+  CODE_FOR_xorsignv4hf3 = 5360,
+  CODE_FOR_xorsignv8hf3 = 5361,
+  CODE_FOR_xorsignv2sf3 = 5362,
+  CODE_FOR_xorsignv4sf3 = 5363,
+  CODE_FOR_xorsignv2df3 = 5364,
+  CODE_FOR_sdot_prodv8qi = 5365,
+  CODE_FOR_udot_prodv8qi = 5366,
+  CODE_FOR_sdot_prodv16qi = 5367,
+  CODE_FOR_udot_prodv16qi = 5368,
+  CODE_FOR_copysignv4hf3 = 5369,
+  CODE_FOR_copysignv8hf3 = 5370,
+  CODE_FOR_copysignv2sf3 = 5371,
+  CODE_FOR_copysignv4sf3 = 5372,
+  CODE_FOR_copysignv2df3 = 5373,
+  CODE_FOR_rsqrtv2sf2 = 5374,
+  CODE_FOR_rsqrtv4sf2 = 5375,
+  CODE_FOR_rsqrtv2df2 = 5376,
+  CODE_FOR_rsqrtsf2 = 5377,
+  CODE_FOR_rsqrtdf2 = 5378,
+  CODE_FOR_ssadv16qi = 5379,
+  CODE_FOR_usadv16qi = 5380,
+  CODE_FOR_ashlv8qi3 = 5381,
+  CODE_FOR_ashlv16qi3 = 5382,
+  CODE_FOR_ashlv4hi3 = 5383,
+  CODE_FOR_ashlv8hi3 = 5384,
+  CODE_FOR_ashlv2si3 = 5385,
+  CODE_FOR_ashlv4si3 = 5386,
+  CODE_FOR_ashlv2di3 = 5387,
+  CODE_FOR_lshrv8qi3 = 5388,
+  CODE_FOR_lshrv16qi3 = 5389,
+  CODE_FOR_lshrv4hi3 = 5390,
+  CODE_FOR_lshrv8hi3 = 5391,
+  CODE_FOR_lshrv2si3 = 5392,
+  CODE_FOR_lshrv4si3 = 5393,
+  CODE_FOR_lshrv2di3 = 5394,
+  CODE_FOR_ashrv8qi3 = 5395,
+  CODE_FOR_ashrv16qi3 = 5396,
+  CODE_FOR_ashrv4hi3 = 5397,
+  CODE_FOR_ashrv8hi3 = 5398,
+  CODE_FOR_ashrv2si3 = 5399,
+  CODE_FOR_ashrv4si3 = 5400,
+  CODE_FOR_ashrv2di3 = 5401,
+  CODE_FOR_vashlv8qi3 = 5402,
+  CODE_FOR_vashlv16qi3 = 5403,
+  CODE_FOR_vashlv4hi3 = 5404,
+  CODE_FOR_vashlv8hi3 = 5405,
+  CODE_FOR_vashlv2si3 = 5406,
+  CODE_FOR_vashlv4si3 = 5407,
+  CODE_FOR_vashlv2di3 = 5408,
+  CODE_FOR_vashrv8qi3 = 5409,
+  CODE_FOR_vashrv16qi3 = 5410,
+  CODE_FOR_vashrv4hi3 = 5411,
+  CODE_FOR_vashrv8hi3 = 5412,
+  CODE_FOR_vashrv2si3 = 5413,
+  CODE_FOR_vashrv4si3 = 5414,
+  CODE_FOR_aarch64_ashr_simddi = 5415,
+  CODE_FOR_vlshrv8qi3 = 5416,
+  CODE_FOR_vlshrv16qi3 = 5417,
+  CODE_FOR_vlshrv4hi3 = 5418,
+  CODE_FOR_vlshrv8hi3 = 5419,
+  CODE_FOR_vlshrv2si3 = 5420,
+  CODE_FOR_vlshrv4si3 = 5421,
+  CODE_FOR_aarch64_lshr_simddi = 5422,
+  CODE_FOR_vec_setv8qi = 5423,
+  CODE_FOR_vec_setv16qi = 5424,
+  CODE_FOR_vec_setv4hi = 5425,
+  CODE_FOR_vec_setv8hi = 5426,
+  CODE_FOR_vec_setv2si = 5427,
+  CODE_FOR_vec_setv4si = 5428,
+  CODE_FOR_vec_setv2di = 5429,
+  CODE_FOR_vec_setv4hf = 5430,
+  CODE_FOR_vec_setv8hf = 5431,
+  CODE_FOR_vec_setv2sf = 5432,
+  CODE_FOR_vec_setv4sf = 5433,
+  CODE_FOR_vec_setv2df = 5434,
+  CODE_FOR_smaxv2di3 = 5435,
+  CODE_FOR_sminv2di3 = 5436,
+  CODE_FOR_umaxv2di3 = 5437,
+  CODE_FOR_uminv2di3 = 5438,
+  CODE_FOR_move_lo_quad_v16qi = 5439,
+  CODE_FOR_move_lo_quad_v8hi = 5440,
+  CODE_FOR_move_lo_quad_v4si = 5441,
+  CODE_FOR_move_lo_quad_v2di = 5442,
+  CODE_FOR_move_lo_quad_v8hf = 5443,
+  CODE_FOR_move_lo_quad_v4sf = 5444,
+  CODE_FOR_move_lo_quad_v2df = 5445,
+  CODE_FOR_move_hi_quad_v16qi = 5446,
+  CODE_FOR_move_hi_quad_v8hi = 5447,
+  CODE_FOR_move_hi_quad_v4si = 5448,
+  CODE_FOR_move_hi_quad_v2di = 5449,
+  CODE_FOR_move_hi_quad_v8hf = 5450,
+  CODE_FOR_move_hi_quad_v4sf = 5451,
+  CODE_FOR_move_hi_quad_v2df = 5452,
+  CODE_FOR_vec_pack_trunc_v4hi = 5453,
+  CODE_FOR_vec_pack_trunc_v2si = 5454,
+  CODE_FOR_vec_pack_trunc_di = 5455,
+  CODE_FOR_vec_unpacks_hi_v16qi = 5456,
+  CODE_FOR_vec_unpacku_hi_v16qi = 5457,
+  CODE_FOR_vec_unpacks_hi_v8hi = 5458,
+  CODE_FOR_vec_unpacku_hi_v8hi = 5459,
+  CODE_FOR_vec_unpacks_hi_v4si = 5460,
+  CODE_FOR_vec_unpacku_hi_v4si = 5461,
+  CODE_FOR_vec_unpacks_lo_v16qi = 5462,
+  CODE_FOR_vec_unpacku_lo_v16qi = 5463,
+  CODE_FOR_vec_unpacks_lo_v8hi = 5464,
+  CODE_FOR_vec_unpacku_lo_v8hi = 5465,
+  CODE_FOR_vec_unpacks_lo_v4si = 5466,
+  CODE_FOR_vec_unpacku_lo_v4si = 5467,
+  CODE_FOR_vec_widen_smult_lo_v16qi = 5468,
+  CODE_FOR_vec_widen_umult_lo_v16qi = 5469,
+  CODE_FOR_vec_widen_smult_lo_v8hi = 5470,
+  CODE_FOR_vec_widen_umult_lo_v8hi = 5471,
+  CODE_FOR_vec_widen_smult_lo_v4si = 5472,
+  CODE_FOR_vec_widen_umult_lo_v4si = 5473,
+  CODE_FOR_vec_widen_smult_hi_v16qi = 5474,
+  CODE_FOR_vec_widen_umult_hi_v16qi = 5475,
+  CODE_FOR_vec_widen_smult_hi_v8hi = 5476,
+  CODE_FOR_vec_widen_umult_hi_v8hi = 5477,
+  CODE_FOR_vec_widen_smult_hi_v4si = 5478,
+  CODE_FOR_vec_widen_umult_hi_v4si = 5479,
+  CODE_FOR_divv4hf3 = 5480,
+  CODE_FOR_divv8hf3 = 5481,
+  CODE_FOR_divv2sf3 = 5482,
+  CODE_FOR_divv4sf3 = 5483,
+  CODE_FOR_divv2df3 = 5484,
+  CODE_FOR_fixv4hfv4hi2 = 5485,
+  CODE_FOR_fixunsv4hfv4hi2 = 5486,
+  CODE_FOR_fixv8hfv8hi2 = 5487,
+  CODE_FOR_fixunsv8hfv8hi2 = 5488,
+  CODE_FOR_fixv2sfv2si2 = 5489,
+  CODE_FOR_fixunsv2sfv2si2 = 5490,
+  CODE_FOR_fixv4sfv4si2 = 5491,
+  CODE_FOR_fixunsv4sfv4si2 = 5492,
+  CODE_FOR_fixv2dfv2di2 = 5493,
+  CODE_FOR_fixunsv2dfv2di2 = 5494,
+  CODE_FOR_fix_truncv4hfv4hi2 = 5495,
+  CODE_FOR_fixuns_truncv4hfv4hi2 = 5496,
+  CODE_FOR_fix_truncv8hfv8hi2 = 5497,
+  CODE_FOR_fixuns_truncv8hfv8hi2 = 5498,
+  CODE_FOR_fix_truncv2sfv2si2 = 5499,
+  CODE_FOR_fixuns_truncv2sfv2si2 = 5500,
+  CODE_FOR_fix_truncv4sfv4si2 = 5501,
+  CODE_FOR_fixuns_truncv4sfv4si2 = 5502,
+  CODE_FOR_fix_truncv2dfv2di2 = 5503,
+  CODE_FOR_fixuns_truncv2dfv2di2 = 5504,
+  CODE_FOR_ftruncv4hf2 = 5505,
+  CODE_FOR_ftruncv8hf2 = 5506,
+  CODE_FOR_ftruncv2sf2 = 5507,
+  CODE_FOR_ftruncv4sf2 = 5508,
+  CODE_FOR_ftruncv2df2 = 5509,
+  CODE_FOR_vec_unpacks_lo_v8hf = 5510,
+  CODE_FOR_vec_unpacks_lo_v4sf = 5511,
+  CODE_FOR_vec_unpacks_hi_v8hf = 5512,
+  CODE_FOR_vec_unpacks_hi_v4sf = 5513,
+  CODE_FOR_aarch64_float_truncate_hi_v4sf = 5514,
+  CODE_FOR_aarch64_float_truncate_hi_v8hf = 5515,
+  CODE_FOR_vec_pack_trunc_v2df = 5516,
+  CODE_FOR_vec_pack_trunc_df = 5517,
+  CODE_FOR_reduc_plus_scal_v8qi = 5518,
+  CODE_FOR_reduc_plus_scal_v16qi = 5519,
+  CODE_FOR_reduc_plus_scal_v4hi = 5520,
+  CODE_FOR_reduc_plus_scal_v8hi = 5521,
+  CODE_FOR_reduc_plus_scal_v2si = 5522,
+  CODE_FOR_reduc_plus_scal_v4si = 5523,
+  CODE_FOR_reduc_plus_scal_v2di = 5524,
+  CODE_FOR_reduc_plus_scal_v4sf = 5525,
+  CODE_FOR_reduc_smax_nan_scal_v4hf = 5526,
+  CODE_FOR_reduc_smin_nan_scal_v4hf = 5527,
+  CODE_FOR_reduc_smax_scal_v4hf = 5528,
+  CODE_FOR_reduc_smin_scal_v4hf = 5529,
+  CODE_FOR_reduc_smax_nan_scal_v8hf = 5530,
+  CODE_FOR_reduc_smin_nan_scal_v8hf = 5531,
+  CODE_FOR_reduc_smax_scal_v8hf = 5532,
+  CODE_FOR_reduc_smin_scal_v8hf = 5533,
+  CODE_FOR_reduc_smax_nan_scal_v2sf = 5534,
+  CODE_FOR_reduc_smin_nan_scal_v2sf = 5535,
+  CODE_FOR_reduc_smax_scal_v2sf = 5536,
+  CODE_FOR_reduc_smin_scal_v2sf = 5537,
+  CODE_FOR_reduc_smax_nan_scal_v4sf = 5538,
+  CODE_FOR_reduc_smin_nan_scal_v4sf = 5539,
+  CODE_FOR_reduc_smax_scal_v4sf = 5540,
+  CODE_FOR_reduc_smin_scal_v4sf = 5541,
+  CODE_FOR_reduc_smax_nan_scal_v2df = 5542,
+  CODE_FOR_reduc_smin_nan_scal_v2df = 5543,
+  CODE_FOR_reduc_smax_scal_v2df = 5544,
+  CODE_FOR_reduc_smin_scal_v2df = 5545,
+  CODE_FOR_reduc_umax_scal_v8qi = 5546,
+  CODE_FOR_reduc_umin_scal_v8qi = 5547,
+  CODE_FOR_reduc_smax_scal_v8qi = 5548,
+  CODE_FOR_reduc_smin_scal_v8qi = 5549,
+  CODE_FOR_reduc_umax_scal_v16qi = 5550,
+  CODE_FOR_reduc_umin_scal_v16qi = 5551,
+  CODE_FOR_reduc_smax_scal_v16qi = 5552,
+  CODE_FOR_reduc_smin_scal_v16qi = 5553,
+  CODE_FOR_reduc_umax_scal_v4hi = 5554,
+  CODE_FOR_reduc_umin_scal_v4hi = 5555,
+  CODE_FOR_reduc_smax_scal_v4hi = 5556,
+  CODE_FOR_reduc_smin_scal_v4hi = 5557,
+  CODE_FOR_reduc_umax_scal_v8hi = 5558,
+  CODE_FOR_reduc_umin_scal_v8hi = 5559,
+  CODE_FOR_reduc_smax_scal_v8hi = 5560,
+  CODE_FOR_reduc_smin_scal_v8hi = 5561,
+  CODE_FOR_reduc_umax_scal_v2si = 5562,
+  CODE_FOR_reduc_umin_scal_v2si = 5563,
+  CODE_FOR_reduc_smax_scal_v2si = 5564,
+  CODE_FOR_reduc_smin_scal_v2si = 5565,
+  CODE_FOR_reduc_umax_scal_v4si = 5566,
+  CODE_FOR_reduc_umin_scal_v4si = 5567,
+  CODE_FOR_reduc_smax_scal_v4si = 5568,
+  CODE_FOR_reduc_smin_scal_v4si = 5569,
+  CODE_FOR_aarch64_simd_bslv8qi = 5570,
+  CODE_FOR_aarch64_simd_bslv16qi = 5571,
+  CODE_FOR_aarch64_simd_bslv4hi = 5572,
+  CODE_FOR_aarch64_simd_bslv8hi = 5573,
+  CODE_FOR_aarch64_simd_bslv2si = 5574,
+  CODE_FOR_aarch64_simd_bslv4si = 5575,
+  CODE_FOR_aarch64_simd_bslv2di = 5576,
+  CODE_FOR_aarch64_simd_bslv4hf = 5577,
+  CODE_FOR_aarch64_simd_bslv8hf = 5578,
+  CODE_FOR_aarch64_simd_bslv2sf = 5579,
+  CODE_FOR_aarch64_simd_bslv4sf = 5580,
+  CODE_FOR_aarch64_simd_bslv2df = 5581,
+  CODE_FOR_aarch64_simd_bsldi = 5582,
+  CODE_FOR_aarch64_simd_bsldf = 5583,
+  CODE_FOR_vcond_mask_v8qiv8qi = 5584,
+  CODE_FOR_vcond_mask_v16qiv16qi = 5585,
+  CODE_FOR_vcond_mask_v4hiv4hi = 5586,
+  CODE_FOR_vcond_mask_v8hiv8hi = 5587,
+  CODE_FOR_vcond_mask_v2siv2si = 5588,
+  CODE_FOR_vcond_mask_v4siv4si = 5589,
+  CODE_FOR_vcond_mask_v2div2di = 5590,
+  CODE_FOR_vcond_mask_v2sfv2si = 5591,
+  CODE_FOR_vcond_mask_v4sfv4si = 5592,
+  CODE_FOR_vcond_mask_v2dfv2di = 5593,
+  CODE_FOR_vcond_mask_didi = 5594,
+  CODE_FOR_vec_cmpv8qiv8qi = 5595,
+  CODE_FOR_vec_cmpv16qiv16qi = 5596,
+  CODE_FOR_vec_cmpv4hiv4hi = 5597,
+  CODE_FOR_vec_cmpv8hiv8hi = 5598,
+  CODE_FOR_vec_cmpv2siv2si = 5599,
+  CODE_FOR_vec_cmpv4siv4si = 5600,
+  CODE_FOR_vec_cmpv2div2di = 5601,
+  CODE_FOR_vec_cmpdidi = 5602,
+  CODE_FOR_vec_cmpv2sfv2si = 5603,
+  CODE_FOR_vec_cmpv4sfv4si = 5604,
+  CODE_FOR_vec_cmpv2dfv2di = 5605,
+  CODE_FOR_vec_cmpuv8qiv8qi = 5606,
+  CODE_FOR_vec_cmpuv16qiv16qi = 5607,
+  CODE_FOR_vec_cmpuv4hiv4hi = 5608,
+  CODE_FOR_vec_cmpuv8hiv8hi = 5609,
+  CODE_FOR_vec_cmpuv2siv2si = 5610,
+  CODE_FOR_vec_cmpuv4siv4si = 5611,
+  CODE_FOR_vec_cmpuv2div2di = 5612,
+  CODE_FOR_vec_cmpudidi = 5613,
+  CODE_FOR_vcondv8qiv8qi = 5614,
+  CODE_FOR_vcondv16qiv16qi = 5615,
+  CODE_FOR_vcondv4hiv4hi = 5616,
+  CODE_FOR_vcondv8hiv8hi = 5617,
+  CODE_FOR_vcondv2siv2si = 5618,
+  CODE_FOR_vcondv4siv4si = 5619,
+  CODE_FOR_vcondv2div2di = 5620,
+  CODE_FOR_vcondv2sfv2sf = 5621,
+  CODE_FOR_vcondv4sfv4sf = 5622,
+  CODE_FOR_vcondv2dfv2df = 5623,
+  CODE_FOR_vconddidi = 5624,
+  CODE_FOR_vcondv2siv2sf = 5625,
+  CODE_FOR_vcondv2sfv2si = 5626,
+  CODE_FOR_vcondv4siv4sf = 5627,
+  CODE_FOR_vcondv4sfv4si = 5628,
+  CODE_FOR_vcondv2div2df = 5629,
+  CODE_FOR_vcondv2dfv2di = 5630,
+  CODE_FOR_vconduv8qiv8qi = 5631,
+  CODE_FOR_vconduv16qiv16qi = 5632,
+  CODE_FOR_vconduv4hiv4hi = 5633,
+  CODE_FOR_vconduv8hiv8hi = 5634,
+  CODE_FOR_vconduv2siv2si = 5635,
+  CODE_FOR_vconduv4siv4si = 5636,
+  CODE_FOR_vconduv2div2di = 5637,
+  CODE_FOR_vcondudidi = 5638,
+  CODE_FOR_vconduv2sfv2si = 5639,
+  CODE_FOR_vconduv4sfv4si = 5640,
+  CODE_FOR_vconduv2dfv2di = 5641,
+  CODE_FOR_aarch64_combinev8qi = 5642,
+  CODE_FOR_aarch64_combinev4hi = 5643,
+  CODE_FOR_aarch64_combinev4hf = 5644,
+  CODE_FOR_aarch64_combinev2si = 5645,
+  CODE_FOR_aarch64_combinev2sf = 5646,
+  CODE_FOR_aarch64_combinedi = 5647,
+  CODE_FOR_aarch64_combinedf = 5648,
+  CODE_FOR_aarch64_simd_combinev8qi = 5649,
+  CODE_FOR_aarch64_simd_combinev4hi = 5650,
+  CODE_FOR_aarch64_simd_combinev4hf = 5651,
+  CODE_FOR_aarch64_simd_combinev2si = 5652,
+  CODE_FOR_aarch64_simd_combinev2sf = 5653,
+  CODE_FOR_aarch64_simd_combinedi = 5654,
+  CODE_FOR_aarch64_simd_combinedf = 5655,
+  CODE_FOR_aarch64_saddl2v16qi = 5656,
+  CODE_FOR_aarch64_saddl2v8hi = 5657,
+  CODE_FOR_aarch64_saddl2v4si = 5658,
+  CODE_FOR_aarch64_uaddl2v16qi = 5659,
+  CODE_FOR_aarch64_uaddl2v8hi = 5660,
+  CODE_FOR_aarch64_uaddl2v4si = 5661,
+  CODE_FOR_aarch64_ssubl2v16qi = 5662,
+  CODE_FOR_aarch64_ssubl2v8hi = 5663,
+  CODE_FOR_aarch64_ssubl2v4si = 5664,
+  CODE_FOR_aarch64_usubl2v16qi = 5665,
+  CODE_FOR_aarch64_usubl2v8hi = 5666,
+  CODE_FOR_aarch64_usubl2v4si = 5667,
+  CODE_FOR_widen_ssumv16qi3 = 5668,
+  CODE_FOR_widen_ssumv8hi3 = 5669,
+  CODE_FOR_widen_ssumv4si3 = 5670,
+  CODE_FOR_widen_ssumv8qi3 = 5671,
+  CODE_FOR_widen_ssumv4hi3 = 5672,
+  CODE_FOR_widen_ssumv2si3 = 5673,
+  CODE_FOR_widen_usumv16qi3 = 5674,
+  CODE_FOR_widen_usumv8hi3 = 5675,
+  CODE_FOR_widen_usumv4si3 = 5676,
+  CODE_FOR_widen_usumv8qi3 = 5677,
+  CODE_FOR_widen_usumv4hi3 = 5678,
+  CODE_FOR_widen_usumv2si3 = 5679,
+  CODE_FOR_aarch64_saddw2v16qi = 5680,
+  CODE_FOR_aarch64_saddw2v8hi = 5681,
+  CODE_FOR_aarch64_saddw2v4si = 5682,
+  CODE_FOR_aarch64_uaddw2v16qi = 5683,
+  CODE_FOR_aarch64_uaddw2v8hi = 5684,
+  CODE_FOR_aarch64_uaddw2v4si = 5685,
+  CODE_FOR_aarch64_ssubw2v16qi = 5686,
+  CODE_FOR_aarch64_ssubw2v8hi = 5687,
+  CODE_FOR_aarch64_ssubw2v4si = 5688,
+  CODE_FOR_aarch64_usubw2v16qi = 5689,
+  CODE_FOR_aarch64_usubw2v8hi = 5690,
+  CODE_FOR_aarch64_usubw2v4si = 5691,
+  CODE_FOR_avgv8qi3_floor = 5692,
+  CODE_FOR_uavgv8qi3_floor = 5693,
+  CODE_FOR_avgv16qi3_floor = 5694,
+  CODE_FOR_uavgv16qi3_floor = 5695,
+  CODE_FOR_avgv4hi3_floor = 5696,
+  CODE_FOR_uavgv4hi3_floor = 5697,
+  CODE_FOR_avgv8hi3_floor = 5698,
+  CODE_FOR_uavgv8hi3_floor = 5699,
+  CODE_FOR_avgv2si3_floor = 5700,
+  CODE_FOR_uavgv2si3_floor = 5701,
+  CODE_FOR_avgv4si3_floor = 5702,
+  CODE_FOR_uavgv4si3_floor = 5703,
+  CODE_FOR_avgv8qi3_ceil = 5704,
+  CODE_FOR_uavgv8qi3_ceil = 5705,
+  CODE_FOR_avgv16qi3_ceil = 5706,
+  CODE_FOR_uavgv16qi3_ceil = 5707,
+  CODE_FOR_avgv4hi3_ceil = 5708,
+  CODE_FOR_uavgv4hi3_ceil = 5709,
+  CODE_FOR_avgv8hi3_ceil = 5710,
+  CODE_FOR_uavgv8hi3_ceil = 5711,
+  CODE_FOR_avgv2si3_ceil = 5712,
+  CODE_FOR_uavgv2si3_ceil = 5713,
+  CODE_FOR_avgv4si3_ceil = 5714,
+  CODE_FOR_uavgv4si3_ceil = 5715,
+  CODE_FOR_aarch64_sqdmlal2v8hi = 5716,
+  CODE_FOR_aarch64_sqdmlal2v4si = 5717,
+  CODE_FOR_aarch64_sqdmlsl2v8hi = 5718,
+  CODE_FOR_aarch64_sqdmlsl2v4si = 5719,
+  CODE_FOR_aarch64_sqdmlal2_lanev8hi = 5720,
+  CODE_FOR_aarch64_sqdmlal2_lanev4si = 5721,
+  CODE_FOR_aarch64_sqdmlal2_laneqv8hi = 5722,
+  CODE_FOR_aarch64_sqdmlal2_laneqv4si = 5723,
+  CODE_FOR_aarch64_sqdmlsl2_lanev8hi = 5724,
+  CODE_FOR_aarch64_sqdmlsl2_lanev4si = 5725,
+  CODE_FOR_aarch64_sqdmlsl2_laneqv8hi = 5726,
+  CODE_FOR_aarch64_sqdmlsl2_laneqv4si = 5727,
+  CODE_FOR_aarch64_sqdmlal2_nv8hi = 5728,
+  CODE_FOR_aarch64_sqdmlal2_nv4si = 5729,
+  CODE_FOR_aarch64_sqdmlsl2_nv8hi = 5730,
+  CODE_FOR_aarch64_sqdmlsl2_nv4si = 5731,
+  CODE_FOR_aarch64_sqdmull2v8hi = 5732,
+  CODE_FOR_aarch64_sqdmull2v4si = 5733,
+  CODE_FOR_aarch64_sqdmull2_lanev8hi = 5734,
+  CODE_FOR_aarch64_sqdmull2_lanev4si = 5735,
+  CODE_FOR_aarch64_sqdmull2_laneqv8hi = 5736,
+  CODE_FOR_aarch64_sqdmull2_laneqv4si = 5737,
+  CODE_FOR_aarch64_sqdmull2_nv8hi = 5738,
+  CODE_FOR_aarch64_sqdmull2_nv4si = 5739,
+  CODE_FOR_sqrtv4hf2 = 5740,
+  CODE_FOR_sqrtv8hf2 = 5741,
+  CODE_FOR_sqrtv2sf2 = 5742,
+  CODE_FOR_sqrtv4sf2 = 5743,
+  CODE_FOR_sqrtv2df2 = 5744,
+  CODE_FOR_vec_load_lanesoiv16qi = 5745,
+  CODE_FOR_vec_load_lanesoiv8hi = 5746,
+  CODE_FOR_vec_load_lanesoiv4si = 5747,
+  CODE_FOR_vec_load_lanesoiv2di = 5748,
+  CODE_FOR_vec_load_lanesoiv8hf = 5749,
+  CODE_FOR_vec_load_lanesoiv4sf = 5750,
+  CODE_FOR_vec_load_lanesoiv2df = 5751,
+  CODE_FOR_vec_store_lanesoiv16qi = 5752,
+  CODE_FOR_vec_store_lanesoiv8hi = 5753,
+  CODE_FOR_vec_store_lanesoiv4si = 5754,
+  CODE_FOR_vec_store_lanesoiv2di = 5755,
+  CODE_FOR_vec_store_lanesoiv8hf = 5756,
+  CODE_FOR_vec_store_lanesoiv4sf = 5757,
+  CODE_FOR_vec_store_lanesoiv2df = 5758,
+  CODE_FOR_vec_load_lanesciv16qi = 5759,
+  CODE_FOR_vec_load_lanesciv8hi = 5760,
+  CODE_FOR_vec_load_lanesciv4si = 5761,
+  CODE_FOR_vec_load_lanesciv2di = 5762,
+  CODE_FOR_vec_load_lanesciv8hf = 5763,
+  CODE_FOR_vec_load_lanesciv4sf = 5764,
+  CODE_FOR_vec_load_lanesciv2df = 5765,
+  CODE_FOR_vec_store_lanesciv16qi = 5766,
+  CODE_FOR_vec_store_lanesciv8hi = 5767,
+  CODE_FOR_vec_store_lanesciv4si = 5768,
+  CODE_FOR_vec_store_lanesciv2di = 5769,
+  CODE_FOR_vec_store_lanesciv8hf = 5770,
+  CODE_FOR_vec_store_lanesciv4sf = 5771,
+  CODE_FOR_vec_store_lanesciv2df = 5772,
+  CODE_FOR_vec_load_lanesxiv16qi = 5773,
+  CODE_FOR_vec_load_lanesxiv8hi = 5774,
+  CODE_FOR_vec_load_lanesxiv4si = 5775,
+  CODE_FOR_vec_load_lanesxiv2di = 5776,
+  CODE_FOR_vec_load_lanesxiv8hf = 5777,
+  CODE_FOR_vec_load_lanesxiv4sf = 5778,
+  CODE_FOR_vec_load_lanesxiv2df = 5779,
+  CODE_FOR_vec_store_lanesxiv16qi = 5780,
+  CODE_FOR_vec_store_lanesxiv8hi = 5781,
+  CODE_FOR_vec_store_lanesxiv4si = 5782,
+  CODE_FOR_vec_store_lanesxiv2di = 5783,
+  CODE_FOR_vec_store_lanesxiv8hf = 5784,
+  CODE_FOR_vec_store_lanesxiv4sf = 5785,
+  CODE_FOR_vec_store_lanesxiv2df = 5786,
+  CODE_FOR_movoi = 5787,
+  CODE_FOR_movci = 5788,
+  CODE_FOR_movxi = 5789,
+  CODE_FOR_aarch64_ld1x3v8qi = 5790,
+  CODE_FOR_aarch64_ld1x3v16qi = 5791,
+  CODE_FOR_aarch64_ld1x3v4hi = 5792,
+  CODE_FOR_aarch64_ld1x3v8hi = 5793,
+  CODE_FOR_aarch64_ld1x3v2si = 5794,
+  CODE_FOR_aarch64_ld1x3v4si = 5795,
+  CODE_FOR_aarch64_ld1x3v2di = 5796,
+  CODE_FOR_aarch64_ld1x3v4hf = 5797,
+  CODE_FOR_aarch64_ld1x3v8hf = 5798,
+  CODE_FOR_aarch64_ld1x3v2sf = 5799,
+  CODE_FOR_aarch64_ld1x3v4sf = 5800,
+  CODE_FOR_aarch64_ld1x3v2df = 5801,
+  CODE_FOR_aarch64_ld1x3di = 5802,
+  CODE_FOR_aarch64_ld1x3df = 5803,
+  CODE_FOR_aarch64_st1x2v8qi = 5804,
+  CODE_FOR_aarch64_st1x2v16qi = 5805,
+  CODE_FOR_aarch64_st1x2v4hi = 5806,
+  CODE_FOR_aarch64_st1x2v8hi = 5807,
+  CODE_FOR_aarch64_st1x2v2si = 5808,
+  CODE_FOR_aarch64_st1x2v4si = 5809,
+  CODE_FOR_aarch64_st1x2v2di = 5810,
+  CODE_FOR_aarch64_st1x2v4hf = 5811,
+  CODE_FOR_aarch64_st1x2v8hf = 5812,
+  CODE_FOR_aarch64_st1x2v2sf = 5813,
+  CODE_FOR_aarch64_st1x2v4sf = 5814,
+  CODE_FOR_aarch64_st1x2v2df = 5815,
+  CODE_FOR_aarch64_st1x2di = 5816,
+  CODE_FOR_aarch64_st1x2df = 5817,
+  CODE_FOR_aarch64_st1x3v8qi = 5818,
+  CODE_FOR_aarch64_st1x3v16qi = 5819,
+  CODE_FOR_aarch64_st1x3v4hi = 5820,
+  CODE_FOR_aarch64_st1x3v8hi = 5821,
+  CODE_FOR_aarch64_st1x3v2si = 5822,
+  CODE_FOR_aarch64_st1x3v4si = 5823,
+  CODE_FOR_aarch64_st1x3v2di = 5824,
+  CODE_FOR_aarch64_st1x3v4hf = 5825,
+  CODE_FOR_aarch64_st1x3v8hf = 5826,
+  CODE_FOR_aarch64_st1x3v2sf = 5827,
+  CODE_FOR_aarch64_st1x3v4sf = 5828,
+  CODE_FOR_aarch64_st1x3v2df = 5829,
+  CODE_FOR_aarch64_st1x3di = 5830,
+  CODE_FOR_aarch64_st1x3df = 5831,
+  CODE_FOR_aarch64_ld2rv8qi = 5832,
+  CODE_FOR_aarch64_ld2rv16qi = 5833,
+  CODE_FOR_aarch64_ld2rv4hi = 5834,
+  CODE_FOR_aarch64_ld2rv8hi = 5835,
+  CODE_FOR_aarch64_ld2rv2si = 5836,
+  CODE_FOR_aarch64_ld2rv4si = 5837,
+  CODE_FOR_aarch64_ld2rv2di = 5838,
+  CODE_FOR_aarch64_ld2rv4hf = 5839,
+  CODE_FOR_aarch64_ld2rv8hf = 5840,
+  CODE_FOR_aarch64_ld2rv2sf = 5841,
+  CODE_FOR_aarch64_ld2rv4sf = 5842,
+  CODE_FOR_aarch64_ld2rv2df = 5843,
+  CODE_FOR_aarch64_ld2rdi = 5844,
+  CODE_FOR_aarch64_ld2rdf = 5845,
+  CODE_FOR_aarch64_ld3rv8qi = 5846,
+  CODE_FOR_aarch64_ld3rv16qi = 5847,
+  CODE_FOR_aarch64_ld3rv4hi = 5848,
+  CODE_FOR_aarch64_ld3rv8hi = 5849,
+  CODE_FOR_aarch64_ld3rv2si = 5850,
+  CODE_FOR_aarch64_ld3rv4si = 5851,
+  CODE_FOR_aarch64_ld3rv2di = 5852,
+  CODE_FOR_aarch64_ld3rv4hf = 5853,
+  CODE_FOR_aarch64_ld3rv8hf = 5854,
+  CODE_FOR_aarch64_ld3rv2sf = 5855,
+  CODE_FOR_aarch64_ld3rv4sf = 5856,
+  CODE_FOR_aarch64_ld3rv2df = 5857,
+  CODE_FOR_aarch64_ld3rdi = 5858,
+  CODE_FOR_aarch64_ld3rdf = 5859,
+  CODE_FOR_aarch64_ld4rv8qi = 5860,
+  CODE_FOR_aarch64_ld4rv16qi = 5861,
+  CODE_FOR_aarch64_ld4rv4hi = 5862,
+  CODE_FOR_aarch64_ld4rv8hi = 5863,
+  CODE_FOR_aarch64_ld4rv2si = 5864,
+  CODE_FOR_aarch64_ld4rv4si = 5865,
+  CODE_FOR_aarch64_ld4rv2di = 5866,
+  CODE_FOR_aarch64_ld4rv4hf = 5867,
+  CODE_FOR_aarch64_ld4rv8hf = 5868,
+  CODE_FOR_aarch64_ld4rv2sf = 5869,
+  CODE_FOR_aarch64_ld4rv4sf = 5870,
+  CODE_FOR_aarch64_ld4rv2df = 5871,
+  CODE_FOR_aarch64_ld4rdi = 5872,
+  CODE_FOR_aarch64_ld4rdf = 5873,
+  CODE_FOR_aarch64_ld2v8qi = 5874,
+  CODE_FOR_aarch64_ld2v4hi = 5875,
+  CODE_FOR_aarch64_ld2v4hf = 5876,
+  CODE_FOR_aarch64_ld2v2si = 5877,
+  CODE_FOR_aarch64_ld2v2sf = 5878,
+  CODE_FOR_aarch64_ld2di = 5879,
+  CODE_FOR_aarch64_ld2df = 5880,
+  CODE_FOR_aarch64_ld3v8qi = 5881,
+  CODE_FOR_aarch64_ld3v4hi = 5882,
+  CODE_FOR_aarch64_ld3v4hf = 5883,
+  CODE_FOR_aarch64_ld3v2si = 5884,
+  CODE_FOR_aarch64_ld3v2sf = 5885,
+  CODE_FOR_aarch64_ld3di = 5886,
+  CODE_FOR_aarch64_ld3df = 5887,
+  CODE_FOR_aarch64_ld4v8qi = 5888,
+  CODE_FOR_aarch64_ld4v4hi = 5889,
+  CODE_FOR_aarch64_ld4v4hf = 5890,
+  CODE_FOR_aarch64_ld4v2si = 5891,
+  CODE_FOR_aarch64_ld4v2sf = 5892,
+  CODE_FOR_aarch64_ld4di = 5893,
+  CODE_FOR_aarch64_ld4df = 5894,
+  CODE_FOR_aarch64_ld1v8qi = 5895,
+  CODE_FOR_aarch64_ld1v16qi = 5896,
+  CODE_FOR_aarch64_ld1v4hi = 5897,
+  CODE_FOR_aarch64_ld1v8hi = 5898,
+  CODE_FOR_aarch64_ld1v2si = 5899,
+  CODE_FOR_aarch64_ld1v4si = 5900,
+  CODE_FOR_aarch64_ld1v2di = 5901,
+  CODE_FOR_aarch64_ld1v4hf = 5902,
+  CODE_FOR_aarch64_ld1v8hf = 5903,
+  CODE_FOR_aarch64_ld1v2sf = 5904,
+  CODE_FOR_aarch64_ld1v4sf = 5905,
+  CODE_FOR_aarch64_ld1v2df = 5906,
+  CODE_FOR_aarch64_ld2v16qi = 5907,
+  CODE_FOR_aarch64_ld2v8hi = 5908,
+  CODE_FOR_aarch64_ld2v4si = 5909,
+  CODE_FOR_aarch64_ld2v2di = 5910,
+  CODE_FOR_aarch64_ld2v8hf = 5911,
+  CODE_FOR_aarch64_ld2v4sf = 5912,
+  CODE_FOR_aarch64_ld2v2df = 5913,
+  CODE_FOR_aarch64_ld3v16qi = 5914,
+  CODE_FOR_aarch64_ld3v8hi = 5915,
+  CODE_FOR_aarch64_ld3v4si = 5916,
+  CODE_FOR_aarch64_ld3v2di = 5917,
+  CODE_FOR_aarch64_ld3v8hf = 5918,
+  CODE_FOR_aarch64_ld3v4sf = 5919,
+  CODE_FOR_aarch64_ld3v2df = 5920,
+  CODE_FOR_aarch64_ld4v16qi = 5921,
+  CODE_FOR_aarch64_ld4v8hi = 5922,
+  CODE_FOR_aarch64_ld4v4si = 5923,
+  CODE_FOR_aarch64_ld4v2di = 5924,
+  CODE_FOR_aarch64_ld4v8hf = 5925,
+  CODE_FOR_aarch64_ld4v4sf = 5926,
+  CODE_FOR_aarch64_ld4v2df = 5927,
+  CODE_FOR_aarch64_ld1x2v16qi = 5928,
+  CODE_FOR_aarch64_ld1x2v8hi = 5929,
+  CODE_FOR_aarch64_ld1x2v4si = 5930,
+  CODE_FOR_aarch64_ld1x2v2di = 5931,
+  CODE_FOR_aarch64_ld1x2v8hf = 5932,
+  CODE_FOR_aarch64_ld1x2v4sf = 5933,
+  CODE_FOR_aarch64_ld1x2v2df = 5934,
+  CODE_FOR_aarch64_ld1x2v8qi = 5935,
+  CODE_FOR_aarch64_ld1x2v4hi = 5936,
+  CODE_FOR_aarch64_ld1x2v4hf = 5937,
+  CODE_FOR_aarch64_ld1x2v2si = 5938,
+  CODE_FOR_aarch64_ld1x2v2sf = 5939,
+  CODE_FOR_aarch64_ld1x2di = 5940,
+  CODE_FOR_aarch64_ld1x2df = 5941,
+  CODE_FOR_aarch64_ld2_lanev8qi = 5942,
+  CODE_FOR_aarch64_ld2_lanev16qi = 5943,
+  CODE_FOR_aarch64_ld2_lanev4hi = 5944,
+  CODE_FOR_aarch64_ld2_lanev8hi = 5945,
+  CODE_FOR_aarch64_ld2_lanev2si = 5946,
+  CODE_FOR_aarch64_ld2_lanev4si = 5947,
+  CODE_FOR_aarch64_ld2_lanev2di = 5948,
+  CODE_FOR_aarch64_ld2_lanev4hf = 5949,
+  CODE_FOR_aarch64_ld2_lanev8hf = 5950,
+  CODE_FOR_aarch64_ld2_lanev2sf = 5951,
+  CODE_FOR_aarch64_ld2_lanev4sf = 5952,
+  CODE_FOR_aarch64_ld2_lanev2df = 5953,
+  CODE_FOR_aarch64_ld2_lanedi = 5954,
+  CODE_FOR_aarch64_ld2_lanedf = 5955,
+  CODE_FOR_aarch64_ld3_lanev8qi = 5956,
+  CODE_FOR_aarch64_ld3_lanev16qi = 5957,
+  CODE_FOR_aarch64_ld3_lanev4hi = 5958,
+  CODE_FOR_aarch64_ld3_lanev8hi = 5959,
+  CODE_FOR_aarch64_ld3_lanev2si = 5960,
+  CODE_FOR_aarch64_ld3_lanev4si = 5961,
+  CODE_FOR_aarch64_ld3_lanev2di = 5962,
+  CODE_FOR_aarch64_ld3_lanev4hf = 5963,
+  CODE_FOR_aarch64_ld3_lanev8hf = 5964,
+  CODE_FOR_aarch64_ld3_lanev2sf = 5965,
+  CODE_FOR_aarch64_ld3_lanev4sf = 5966,
+  CODE_FOR_aarch64_ld3_lanev2df = 5967,
+  CODE_FOR_aarch64_ld3_lanedi = 5968,
+  CODE_FOR_aarch64_ld3_lanedf = 5969,
+  CODE_FOR_aarch64_ld4_lanev8qi = 5970,
+  CODE_FOR_aarch64_ld4_lanev16qi = 5971,
+  CODE_FOR_aarch64_ld4_lanev4hi = 5972,
+  CODE_FOR_aarch64_ld4_lanev8hi = 5973,
+  CODE_FOR_aarch64_ld4_lanev2si = 5974,
+  CODE_FOR_aarch64_ld4_lanev4si = 5975,
+  CODE_FOR_aarch64_ld4_lanev2di = 5976,
+  CODE_FOR_aarch64_ld4_lanev4hf = 5977,
+  CODE_FOR_aarch64_ld4_lanev8hf = 5978,
+  CODE_FOR_aarch64_ld4_lanev2sf = 5979,
+  CODE_FOR_aarch64_ld4_lanev4sf = 5980,
+  CODE_FOR_aarch64_ld4_lanev2df = 5981,
+  CODE_FOR_aarch64_ld4_lanedi = 5982,
+  CODE_FOR_aarch64_ld4_lanedf = 5983,
+  CODE_FOR_aarch64_get_dregoiv8qi = 5984,
+  CODE_FOR_aarch64_get_dregoiv4hi = 5985,
+  CODE_FOR_aarch64_get_dregoiv4hf = 5986,
+  CODE_FOR_aarch64_get_dregoiv2si = 5987,
+  CODE_FOR_aarch64_get_dregoiv2sf = 5988,
+  CODE_FOR_aarch64_get_dregoidi = 5989,
+  CODE_FOR_aarch64_get_dregoidf = 5990,
+  CODE_FOR_aarch64_get_dregciv8qi = 5991,
+  CODE_FOR_aarch64_get_dregciv4hi = 5992,
+  CODE_FOR_aarch64_get_dregciv4hf = 5993,
+  CODE_FOR_aarch64_get_dregciv2si = 5994,
+  CODE_FOR_aarch64_get_dregciv2sf = 5995,
+  CODE_FOR_aarch64_get_dregcidi = 5996,
+  CODE_FOR_aarch64_get_dregcidf = 5997,
+  CODE_FOR_aarch64_get_dregxiv8qi = 5998,
+  CODE_FOR_aarch64_get_dregxiv4hi = 5999,
+  CODE_FOR_aarch64_get_dregxiv4hf = 6000,
+  CODE_FOR_aarch64_get_dregxiv2si = 6001,
+  CODE_FOR_aarch64_get_dregxiv2sf = 6002,
+  CODE_FOR_aarch64_get_dregxidi = 6003,
+  CODE_FOR_aarch64_get_dregxidf = 6004,
+  CODE_FOR_aarch64_get_qregoiv16qi = 6005,
+  CODE_FOR_aarch64_get_qregoiv8hi = 6006,
+  CODE_FOR_aarch64_get_qregoiv4si = 6007,
+  CODE_FOR_aarch64_get_qregoiv2di = 6008,
+  CODE_FOR_aarch64_get_qregoiv8hf = 6009,
+  CODE_FOR_aarch64_get_qregoiv4sf = 6010,
+  CODE_FOR_aarch64_get_qregoiv2df = 6011,
+  CODE_FOR_aarch64_get_qregciv16qi = 6012,
+  CODE_FOR_aarch64_get_qregciv8hi = 6013,
+  CODE_FOR_aarch64_get_qregciv4si = 6014,
+  CODE_FOR_aarch64_get_qregciv2di = 6015,
+  CODE_FOR_aarch64_get_qregciv8hf = 6016,
+  CODE_FOR_aarch64_get_qregciv4sf = 6017,
+  CODE_FOR_aarch64_get_qregciv2df = 6018,
+  CODE_FOR_aarch64_get_qregxiv16qi = 6019,
+  CODE_FOR_aarch64_get_qregxiv8hi = 6020,
+  CODE_FOR_aarch64_get_qregxiv4si = 6021,
+  CODE_FOR_aarch64_get_qregxiv2di = 6022,
+  CODE_FOR_aarch64_get_qregxiv8hf = 6023,
+  CODE_FOR_aarch64_get_qregxiv4sf = 6024,
+  CODE_FOR_aarch64_get_qregxiv2df = 6025,
+  CODE_FOR_vec_permv8qi = 6026,
+  CODE_FOR_vec_permv16qi = 6027,
+  CODE_FOR_aarch64_st2v8qi = 6028,
+  CODE_FOR_aarch64_st2v4hi = 6029,
+  CODE_FOR_aarch64_st2v4hf = 6030,
+  CODE_FOR_aarch64_st2v2si = 6031,
+  CODE_FOR_aarch64_st2v2sf = 6032,
+  CODE_FOR_aarch64_st2di = 6033,
+  CODE_FOR_aarch64_st2df = 6034,
+  CODE_FOR_aarch64_st3v8qi = 6035,
+  CODE_FOR_aarch64_st3v4hi = 6036,
+  CODE_FOR_aarch64_st3v4hf = 6037,
+  CODE_FOR_aarch64_st3v2si = 6038,
+  CODE_FOR_aarch64_st3v2sf = 6039,
+  CODE_FOR_aarch64_st3di = 6040,
+  CODE_FOR_aarch64_st3df = 6041,
+  CODE_FOR_aarch64_st4v8qi = 6042,
+  CODE_FOR_aarch64_st4v4hi = 6043,
+  CODE_FOR_aarch64_st4v4hf = 6044,
+  CODE_FOR_aarch64_st4v2si = 6045,
+  CODE_FOR_aarch64_st4v2sf = 6046,
+  CODE_FOR_aarch64_st4di = 6047,
+  CODE_FOR_aarch64_st4df = 6048,
+  CODE_FOR_aarch64_st2v16qi = 6049,
+  CODE_FOR_aarch64_st2v8hi = 6050,
+  CODE_FOR_aarch64_st2v4si = 6051,
+  CODE_FOR_aarch64_st2v2di = 6052,
+  CODE_FOR_aarch64_st2v8hf = 6053,
+  CODE_FOR_aarch64_st2v4sf = 6054,
+  CODE_FOR_aarch64_st2v2df = 6055,
+  CODE_FOR_aarch64_st3v16qi = 6056,
+  CODE_FOR_aarch64_st3v8hi = 6057,
+  CODE_FOR_aarch64_st3v4si = 6058,
+  CODE_FOR_aarch64_st3v2di = 6059,
+  CODE_FOR_aarch64_st3v8hf = 6060,
+  CODE_FOR_aarch64_st3v4sf = 6061,
+  CODE_FOR_aarch64_st3v2df = 6062,
+  CODE_FOR_aarch64_st4v16qi = 6063,
+  CODE_FOR_aarch64_st4v8hi = 6064,
+  CODE_FOR_aarch64_st4v4si = 6065,
+  CODE_FOR_aarch64_st4v2di = 6066,
+  CODE_FOR_aarch64_st4v8hf = 6067,
+  CODE_FOR_aarch64_st4v4sf = 6068,
+  CODE_FOR_aarch64_st4v2df = 6069,
+  CODE_FOR_aarch64_st2_lanev8qi = 6070,
+  CODE_FOR_aarch64_st2_lanev16qi = 6071,
+  CODE_FOR_aarch64_st2_lanev4hi = 6072,
+  CODE_FOR_aarch64_st2_lanev8hi = 6073,
+  CODE_FOR_aarch64_st2_lanev2si = 6074,
+  CODE_FOR_aarch64_st2_lanev4si = 6075,
+  CODE_FOR_aarch64_st2_lanev2di = 6076,
+  CODE_FOR_aarch64_st2_lanev4hf = 6077,
+  CODE_FOR_aarch64_st2_lanev8hf = 6078,
+  CODE_FOR_aarch64_st2_lanev2sf = 6079,
+  CODE_FOR_aarch64_st2_lanev4sf = 6080,
+  CODE_FOR_aarch64_st2_lanev2df = 6081,
+  CODE_FOR_aarch64_st2_lanedi = 6082,
+  CODE_FOR_aarch64_st2_lanedf = 6083,
+  CODE_FOR_aarch64_st3_lanev8qi = 6084,
+  CODE_FOR_aarch64_st3_lanev16qi = 6085,
+  CODE_FOR_aarch64_st3_lanev4hi = 6086,
+  CODE_FOR_aarch64_st3_lanev8hi = 6087,
+  CODE_FOR_aarch64_st3_lanev2si = 6088,
+  CODE_FOR_aarch64_st3_lanev4si = 6089,
+  CODE_FOR_aarch64_st3_lanev2di = 6090,
+  CODE_FOR_aarch64_st3_lanev4hf = 6091,
+  CODE_FOR_aarch64_st3_lanev8hf = 6092,
+  CODE_FOR_aarch64_st3_lanev2sf = 6093,
+  CODE_FOR_aarch64_st3_lanev4sf = 6094,
+  CODE_FOR_aarch64_st3_lanev2df = 6095,
+  CODE_FOR_aarch64_st3_lanedi = 6096,
+  CODE_FOR_aarch64_st3_lanedf = 6097,
+  CODE_FOR_aarch64_st4_lanev8qi = 6098,
+  CODE_FOR_aarch64_st4_lanev16qi = 6099,
+  CODE_FOR_aarch64_st4_lanev4hi = 6100,
+  CODE_FOR_aarch64_st4_lanev8hi = 6101,
+  CODE_FOR_aarch64_st4_lanev2si = 6102,
+  CODE_FOR_aarch64_st4_lanev4si = 6103,
+  CODE_FOR_aarch64_st4_lanev2di = 6104,
+  CODE_FOR_aarch64_st4_lanev4hf = 6105,
+  CODE_FOR_aarch64_st4_lanev8hf = 6106,
+  CODE_FOR_aarch64_st4_lanev2sf = 6107,
+  CODE_FOR_aarch64_st4_lanev4sf = 6108,
+  CODE_FOR_aarch64_st4_lanev2df = 6109,
+  CODE_FOR_aarch64_st4_lanedi = 6110,
+  CODE_FOR_aarch64_st4_lanedf = 6111,
+  CODE_FOR_aarch64_st1v8qi = 6112,
+  CODE_FOR_aarch64_st1v16qi = 6113,
+  CODE_FOR_aarch64_st1v4hi = 6114,
+  CODE_FOR_aarch64_st1v8hi = 6115,
+  CODE_FOR_aarch64_st1v2si = 6116,
+  CODE_FOR_aarch64_st1v4si = 6117,
+  CODE_FOR_aarch64_st1v2di = 6118,
+  CODE_FOR_aarch64_st1v4hf = 6119,
+  CODE_FOR_aarch64_st1v8hf = 6120,
+  CODE_FOR_aarch64_st1v2sf = 6121,
+  CODE_FOR_aarch64_st1v4sf = 6122,
+  CODE_FOR_aarch64_st1v2df = 6123,
+  CODE_FOR_aarch64_set_qregoiv16qi = 6124,
+  CODE_FOR_aarch64_set_qregoiv8hi = 6125,
+  CODE_FOR_aarch64_set_qregoiv4si = 6126,
+  CODE_FOR_aarch64_set_qregoiv2di = 6127,
+  CODE_FOR_aarch64_set_qregoiv8hf = 6128,
+  CODE_FOR_aarch64_set_qregoiv4sf = 6129,
+  CODE_FOR_aarch64_set_qregoiv2df = 6130,
+  CODE_FOR_aarch64_set_qregciv16qi = 6131,
+  CODE_FOR_aarch64_set_qregciv8hi = 6132,
+  CODE_FOR_aarch64_set_qregciv4si = 6133,
+  CODE_FOR_aarch64_set_qregciv2di = 6134,
+  CODE_FOR_aarch64_set_qregciv8hf = 6135,
+  CODE_FOR_aarch64_set_qregciv4sf = 6136,
+  CODE_FOR_aarch64_set_qregciv2df = 6137,
+  CODE_FOR_aarch64_set_qregxiv16qi = 6138,
+  CODE_FOR_aarch64_set_qregxiv8hi = 6139,
+  CODE_FOR_aarch64_set_qregxiv4si = 6140,
+  CODE_FOR_aarch64_set_qregxiv2di = 6141,
+  CODE_FOR_aarch64_set_qregxiv8hf = 6142,
+  CODE_FOR_aarch64_set_qregxiv4sf = 6143,
+  CODE_FOR_aarch64_set_qregxiv2df = 6144,
+  CODE_FOR_vec_initv8qiqi = 6145,
+  CODE_FOR_vec_initv16qiqi = 6146,
+  CODE_FOR_vec_initv4hihi = 6147,
+  CODE_FOR_vec_initv8hihi = 6148,
+  CODE_FOR_vec_initv2sisi = 6149,
+  CODE_FOR_vec_initv4sisi = 6150,
+  CODE_FOR_vec_initv2didi = 6151,
+  CODE_FOR_vec_initv4hfhf = 6152,
+  CODE_FOR_vec_initv8hfhf = 6153,
+  CODE_FOR_vec_initv2sfsf = 6154,
+  CODE_FOR_vec_initv4sfsf = 6155,
+  CODE_FOR_vec_initv2dfdf = 6156,
+  CODE_FOR_vec_extractv8qiqi = 6157,
+  CODE_FOR_vec_extractv16qiqi = 6158,
+  CODE_FOR_vec_extractv4hihi = 6159,
+  CODE_FOR_vec_extractv8hihi = 6160,
+  CODE_FOR_vec_extractv2sisi = 6161,
+  CODE_FOR_vec_extractv4sisi = 6162,
+  CODE_FOR_vec_extractv2didi = 6163,
+  CODE_FOR_vec_extractv4hfhf = 6164,
+  CODE_FOR_vec_extractv8hfhf = 6165,
+  CODE_FOR_vec_extractv2sfsf = 6166,
+  CODE_FOR_vec_extractv4sfsf = 6167,
+  CODE_FOR_vec_extractv2dfdf = 6168,
+  CODE_FOR_aarch64_fmlal_lowv2sf = 6169,
+  CODE_FOR_aarch64_fmlsl_lowv2sf = 6170,
+  CODE_FOR_aarch64_fmlalq_lowv4sf = 6171,
+  CODE_FOR_aarch64_fmlslq_lowv4sf = 6172,
+  CODE_FOR_aarch64_fmlal_highv2sf = 6173,
+  CODE_FOR_aarch64_fmlsl_highv2sf = 6174,
+  CODE_FOR_aarch64_fmlalq_highv4sf = 6175,
+  CODE_FOR_aarch64_fmlslq_highv4sf = 6176,
+  CODE_FOR_aarch64_fmlal_lane_lowv2sf = 6177,
+  CODE_FOR_aarch64_fmlsl_lane_lowv2sf = 6178,
+  CODE_FOR_aarch64_fmlal_lane_highv2sf = 6179,
+  CODE_FOR_aarch64_fmlsl_lane_highv2sf = 6180,
+  CODE_FOR_aarch64_fmlalq_laneq_lowv4sf = 6181,
+  CODE_FOR_aarch64_fmlslq_laneq_lowv4sf = 6182,
+  CODE_FOR_aarch64_fmlalq_laneq_highv4sf = 6183,
+  CODE_FOR_aarch64_fmlslq_laneq_highv4sf = 6184,
+  CODE_FOR_aarch64_fmlal_laneq_lowv2sf = 6185,
+  CODE_FOR_aarch64_fmlsl_laneq_lowv2sf = 6186,
+  CODE_FOR_aarch64_fmlal_laneq_highv2sf = 6187,
+  CODE_FOR_aarch64_fmlsl_laneq_highv2sf = 6188,
+  CODE_FOR_aarch64_fmlalq_lane_lowv4sf = 6189,
+  CODE_FOR_aarch64_fmlslq_lane_lowv4sf = 6190,
+  CODE_FOR_aarch64_fmlalq_lane_highv4sf = 6191,
+  CODE_FOR_aarch64_fmlslq_lane_highv4sf = 6192,
+  CODE_FOR_atomic_compare_and_swapqi = 6193,
+  CODE_FOR_atomic_compare_and_swaphi = 6194,
+  CODE_FOR_atomic_compare_and_swapsi = 6195,
+  CODE_FOR_atomic_compare_and_swapdi = 6196,
+  CODE_FOR_atomic_exchangeqi = 6197,
+  CODE_FOR_atomic_exchangehi = 6198,
+  CODE_FOR_atomic_exchangesi = 6199,
+  CODE_FOR_atomic_exchangedi = 6200,
+  CODE_FOR_atomic_addqi = 6201,
+  CODE_FOR_atomic_subqi = 6202,
+  CODE_FOR_atomic_orqi = 6203,
+  CODE_FOR_atomic_xorqi = 6204,
+  CODE_FOR_atomic_andqi = 6205,
+  CODE_FOR_atomic_addhi = 6206,
+  CODE_FOR_atomic_subhi = 6207,
+  CODE_FOR_atomic_orhi = 6208,
+  CODE_FOR_atomic_xorhi = 6209,
+  CODE_FOR_atomic_andhi = 6210,
+  CODE_FOR_atomic_addsi = 6211,
+  CODE_FOR_atomic_subsi = 6212,
+  CODE_FOR_atomic_orsi = 6213,
+  CODE_FOR_atomic_xorsi = 6214,
+  CODE_FOR_atomic_andsi = 6215,
+  CODE_FOR_atomic_adddi = 6216,
+  CODE_FOR_atomic_subdi = 6217,
+  CODE_FOR_atomic_ordi = 6218,
+  CODE_FOR_atomic_xordi = 6219,
+  CODE_FOR_atomic_anddi = 6220,
+  CODE_FOR_atomic_fetch_addqi = 6221,
+  CODE_FOR_atomic_fetch_subqi = 6222,
+  CODE_FOR_atomic_fetch_orqi = 6223,
+  CODE_FOR_atomic_fetch_xorqi = 6224,
+  CODE_FOR_atomic_fetch_andqi = 6225,
+  CODE_FOR_atomic_fetch_addhi = 6226,
+  CODE_FOR_atomic_fetch_subhi = 6227,
+  CODE_FOR_atomic_fetch_orhi = 6228,
+  CODE_FOR_atomic_fetch_xorhi = 6229,
+  CODE_FOR_atomic_fetch_andhi = 6230,
+  CODE_FOR_atomic_fetch_addsi = 6231,
+  CODE_FOR_atomic_fetch_subsi = 6232,
+  CODE_FOR_atomic_fetch_orsi = 6233,
+  CODE_FOR_atomic_fetch_xorsi = 6234,
+  CODE_FOR_atomic_fetch_andsi = 6235,
+  CODE_FOR_atomic_fetch_adddi = 6236,
+  CODE_FOR_atomic_fetch_subdi = 6237,
+  CODE_FOR_atomic_fetch_ordi = 6238,
+  CODE_FOR_atomic_fetch_xordi = 6239,
+  CODE_FOR_atomic_fetch_anddi = 6240,
+  CODE_FOR_atomic_add_fetchqi = 6241,
+  CODE_FOR_atomic_sub_fetchqi = 6242,
+  CODE_FOR_atomic_or_fetchqi = 6243,
+  CODE_FOR_atomic_xor_fetchqi = 6244,
+  CODE_FOR_atomic_and_fetchqi = 6245,
+  CODE_FOR_atomic_add_fetchhi = 6246,
+  CODE_FOR_atomic_sub_fetchhi = 6247,
+  CODE_FOR_atomic_or_fetchhi = 6248,
+  CODE_FOR_atomic_xor_fetchhi = 6249,
+  CODE_FOR_atomic_and_fetchhi = 6250,
+  CODE_FOR_atomic_add_fetchsi = 6251,
+  CODE_FOR_atomic_sub_fetchsi = 6252,
+  CODE_FOR_atomic_or_fetchsi = 6253,
+  CODE_FOR_atomic_xor_fetchsi = 6254,
+  CODE_FOR_atomic_and_fetchsi = 6255,
+  CODE_FOR_atomic_add_fetchdi = 6256,
+  CODE_FOR_atomic_sub_fetchdi = 6257,
+  CODE_FOR_atomic_or_fetchdi = 6258,
+  CODE_FOR_atomic_xor_fetchdi = 6259,
+  CODE_FOR_atomic_and_fetchdi = 6260,
+  CODE_FOR_mem_thread_fence = 6261,
+  CODE_FOR_dmb = 6262,
+  CODE_FOR_movvnx16qi = 6263,
+  CODE_FOR_movvnx8hi = 6264,
+  CODE_FOR_movvnx4si = 6265,
+  CODE_FOR_movvnx2di = 6266,
+  CODE_FOR_movvnx8hf = 6267,
+  CODE_FOR_movvnx4sf = 6268,
+  CODE_FOR_movvnx2df = 6269,
+  CODE_FOR_aarch64_sve_reload_be = 6270,
+  CODE_FOR_movmisalignvnx16qi = 6271,
+  CODE_FOR_movmisalignvnx8hi = 6272,
+  CODE_FOR_movmisalignvnx4si = 6273,
+  CODE_FOR_movmisalignvnx2di = 6274,
+  CODE_FOR_movmisalignvnx8hf = 6275,
+  CODE_FOR_movmisalignvnx4sf = 6276,
+  CODE_FOR_movmisalignvnx2df = 6277,
+  CODE_FOR_gather_loadvnx4si = 6278,
+  CODE_FOR_gather_loadvnx2di = 6279,
+  CODE_FOR_gather_loadvnx4sf = 6280,
+  CODE_FOR_gather_loadvnx2df = 6281,
+  CODE_FOR_scatter_storevnx4si = 6282,
+  CODE_FOR_scatter_storevnx2di = 6283,
+  CODE_FOR_scatter_storevnx4sf = 6284,
+  CODE_FOR_scatter_storevnx2df = 6285,
+  CODE_FOR_movvnx32qi = 6286,
+  CODE_FOR_movvnx16hi = 6287,
+  CODE_FOR_movvnx8si = 6288,
+  CODE_FOR_movvnx4di = 6289,
+  CODE_FOR_movvnx16hf = 6290,
+  CODE_FOR_movvnx8sf = 6291,
+  CODE_FOR_movvnx4df = 6292,
+  CODE_FOR_movvnx48qi = 6293,
+  CODE_FOR_movvnx24hi = 6294,
+  CODE_FOR_movvnx12si = 6295,
+  CODE_FOR_movvnx6di = 6296,
+  CODE_FOR_movvnx24hf = 6297,
+  CODE_FOR_movvnx12sf = 6298,
+  CODE_FOR_movvnx6df = 6299,
+  CODE_FOR_movvnx64qi = 6300,
+  CODE_FOR_movvnx32hi = 6301,
+  CODE_FOR_movvnx16si = 6302,
+  CODE_FOR_movvnx8di = 6303,
+  CODE_FOR_movvnx32hf = 6304,
+  CODE_FOR_movvnx16sf = 6305,
+  CODE_FOR_movvnx8df = 6306,
+  CODE_FOR_movvnx16bi = 6307,
+  CODE_FOR_movvnx8bi = 6308,
+  CODE_FOR_movvnx4bi = 6309,
+  CODE_FOR_movvnx2bi = 6310,
+  CODE_FOR_vec_extractvnx16biqi = 6311,
+  CODE_FOR_vec_extractvnx8bihi = 6312,
+  CODE_FOR_vec_extractvnx4bisi = 6313,
+  CODE_FOR_vec_extractvnx2bidi = 6314,
+  CODE_FOR_vec_extractvnx16qiqi = 6315,
+  CODE_FOR_vec_extractvnx8hihi = 6316,
+  CODE_FOR_vec_extractvnx4sisi = 6317,
+  CODE_FOR_vec_extractvnx2didi = 6318,
+  CODE_FOR_vec_extractvnx8hfhf = 6319,
+  CODE_FOR_vec_extractvnx4sfsf = 6320,
+  CODE_FOR_vec_extractvnx2dfdf = 6321,
+  CODE_FOR_vec_duplicatevnx16qi = 6322,
+  CODE_FOR_vec_duplicatevnx8hi = 6323,
+  CODE_FOR_vec_duplicatevnx4si = 6324,
+  CODE_FOR_vec_duplicatevnx2di = 6325,
+  CODE_FOR_vec_duplicatevnx8hf = 6326,
+  CODE_FOR_vec_duplicatevnx4sf = 6327,
+  CODE_FOR_vec_duplicatevnx2df = 6328,
+  CODE_FOR_vec_duplicatevnx16bi = 6329,
+  CODE_FOR_vec_duplicatevnx8bi = 6330,
+  CODE_FOR_vec_duplicatevnx4bi = 6331,
+  CODE_FOR_vec_duplicatevnx2bi = 6332,
+  CODE_FOR_vec_load_lanesvnx32qivnx16qi = 6333,
+  CODE_FOR_vec_load_lanesvnx16hivnx8hi = 6334,
+  CODE_FOR_vec_load_lanesvnx8sivnx4si = 6335,
+  CODE_FOR_vec_load_lanesvnx4divnx2di = 6336,
+  CODE_FOR_vec_load_lanesvnx16hfvnx8hf = 6337,
+  CODE_FOR_vec_load_lanesvnx8sfvnx4sf = 6338,
+  CODE_FOR_vec_load_lanesvnx4dfvnx2df = 6339,
+  CODE_FOR_vec_load_lanesvnx48qivnx16qi = 6340,
+  CODE_FOR_vec_load_lanesvnx24hivnx8hi = 6341,
+  CODE_FOR_vec_load_lanesvnx12sivnx4si = 6342,
+  CODE_FOR_vec_load_lanesvnx6divnx2di = 6343,
+  CODE_FOR_vec_load_lanesvnx24hfvnx8hf = 6344,
+  CODE_FOR_vec_load_lanesvnx12sfvnx4sf = 6345,
+  CODE_FOR_vec_load_lanesvnx6dfvnx2df = 6346,
+  CODE_FOR_vec_load_lanesvnx64qivnx16qi = 6347,
+  CODE_FOR_vec_load_lanesvnx32hivnx8hi = 6348,
+  CODE_FOR_vec_load_lanesvnx16sivnx4si = 6349,
+  CODE_FOR_vec_load_lanesvnx8divnx2di = 6350,
+  CODE_FOR_vec_load_lanesvnx32hfvnx8hf = 6351,
+  CODE_FOR_vec_load_lanesvnx16sfvnx4sf = 6352,
+  CODE_FOR_vec_load_lanesvnx8dfvnx2df = 6353,
+  CODE_FOR_vec_store_lanesvnx32qivnx16qi = 6354,
+  CODE_FOR_vec_store_lanesvnx16hivnx8hi = 6355,
+  CODE_FOR_vec_store_lanesvnx8sivnx4si = 6356,
+  CODE_FOR_vec_store_lanesvnx4divnx2di = 6357,
+  CODE_FOR_vec_store_lanesvnx16hfvnx8hf = 6358,
+  CODE_FOR_vec_store_lanesvnx8sfvnx4sf = 6359,
+  CODE_FOR_vec_store_lanesvnx4dfvnx2df = 6360,
+  CODE_FOR_vec_store_lanesvnx48qivnx16qi = 6361,
+  CODE_FOR_vec_store_lanesvnx24hivnx8hi = 6362,
+  CODE_FOR_vec_store_lanesvnx12sivnx4si = 6363,
+  CODE_FOR_vec_store_lanesvnx6divnx2di = 6364,
+  CODE_FOR_vec_store_lanesvnx24hfvnx8hf = 6365,
+  CODE_FOR_vec_store_lanesvnx12sfvnx4sf = 6366,
+  CODE_FOR_vec_store_lanesvnx6dfvnx2df = 6367,
+  CODE_FOR_vec_store_lanesvnx64qivnx16qi = 6368,
+  CODE_FOR_vec_store_lanesvnx32hivnx8hi = 6369,
+  CODE_FOR_vec_store_lanesvnx16sivnx4si = 6370,
+  CODE_FOR_vec_store_lanesvnx8divnx2di = 6371,
+  CODE_FOR_vec_store_lanesvnx32hfvnx8hf = 6372,
+  CODE_FOR_vec_store_lanesvnx16sfvnx4sf = 6373,
+  CODE_FOR_vec_store_lanesvnx8dfvnx2df = 6374,
+  CODE_FOR_vec_permvnx16qi = 6375,
+  CODE_FOR_vec_permvnx8hi = 6376,
+  CODE_FOR_vec_permvnx4si = 6377,
+  CODE_FOR_vec_permvnx2di = 6378,
+  CODE_FOR_vec_permvnx8hf = 6379,
+  CODE_FOR_vec_permvnx4sf = 6380,
+  CODE_FOR_vec_permvnx2df = 6381,
+  CODE_FOR_mulvnx16qi3 = 6382,
+  CODE_FOR_mulvnx8hi3 = 6383,
+  CODE_FOR_mulvnx4si3 = 6384,
+  CODE_FOR_mulvnx2di3 = 6385,
+  CODE_FOR_smulvnx16qi3_highpart = 6386,
+  CODE_FOR_umulvnx16qi3_highpart = 6387,
+  CODE_FOR_smulvnx8hi3_highpart = 6388,
+  CODE_FOR_umulvnx8hi3_highpart = 6389,
+  CODE_FOR_smulvnx4si3_highpart = 6390,
+  CODE_FOR_umulvnx4si3_highpart = 6391,
+  CODE_FOR_smulvnx2di3_highpart = 6392,
+  CODE_FOR_umulvnx2di3_highpart = 6393,
+  CODE_FOR_divvnx4si3 = 6394,
+  CODE_FOR_udivvnx4si3 = 6395,
+  CODE_FOR_divvnx2di3 = 6396,
+  CODE_FOR_udivvnx2di3 = 6397,
+  CODE_FOR_absvnx16qi2 = 6398,
+  CODE_FOR_negvnx16qi2 = 6399,
+  CODE_FOR_one_cmplvnx16qi2 = 6400,
+  CODE_FOR_popcountvnx16qi2 = 6401,
+  CODE_FOR_absvnx8hi2 = 6402,
+  CODE_FOR_negvnx8hi2 = 6403,
+  CODE_FOR_one_cmplvnx8hi2 = 6404,
+  CODE_FOR_popcountvnx8hi2 = 6405,
+  CODE_FOR_absvnx4si2 = 6406,
+  CODE_FOR_negvnx4si2 = 6407,
+  CODE_FOR_one_cmplvnx4si2 = 6408,
+  CODE_FOR_popcountvnx4si2 = 6409,
+  CODE_FOR_absvnx2di2 = 6410,
+  CODE_FOR_negvnx2di2 = 6411,
+  CODE_FOR_one_cmplvnx2di2 = 6412,
+  CODE_FOR_popcountvnx2di2 = 6413,
+  CODE_FOR_iorvnx16bi3 = 6414,
+  CODE_FOR_xorvnx16bi3 = 6415,
+  CODE_FOR_iorvnx8bi3 = 6416,
+  CODE_FOR_xorvnx8bi3 = 6417,
+  CODE_FOR_iorvnx4bi3 = 6418,
+  CODE_FOR_xorvnx4bi3 = 6419,
+  CODE_FOR_iorvnx2bi3 = 6420,
+  CODE_FOR_xorvnx2bi3 = 6421,
+  CODE_FOR_one_cmplvnx16bi2 = 6422,
+  CODE_FOR_one_cmplvnx8bi2 = 6423,
+  CODE_FOR_one_cmplvnx4bi2 = 6424,
+  CODE_FOR_one_cmplvnx2bi2 = 6425,
+  CODE_FOR_vashlvnx16qi3 = 6426,
+  CODE_FOR_vashrvnx16qi3 = 6427,
+  CODE_FOR_vlshrvnx16qi3 = 6428,
+  CODE_FOR_vashlvnx8hi3 = 6429,
+  CODE_FOR_vashrvnx8hi3 = 6430,
+  CODE_FOR_vlshrvnx8hi3 = 6431,
+  CODE_FOR_vashlvnx4si3 = 6432,
+  CODE_FOR_vashrvnx4si3 = 6433,
+  CODE_FOR_vlshrvnx4si3 = 6434,
+  CODE_FOR_vashlvnx2di3 = 6435,
+  CODE_FOR_vashrvnx2di3 = 6436,
+  CODE_FOR_vlshrvnx2di3 = 6437,
+  CODE_FOR_ashlvnx16qi3 = 6438,
+  CODE_FOR_ashrvnx16qi3 = 6439,
+  CODE_FOR_lshrvnx16qi3 = 6440,
+  CODE_FOR_ashlvnx8hi3 = 6441,
+  CODE_FOR_ashrvnx8hi3 = 6442,
+  CODE_FOR_lshrvnx8hi3 = 6443,
+  CODE_FOR_ashlvnx4si3 = 6444,
+  CODE_FOR_ashrvnx4si3 = 6445,
+  CODE_FOR_lshrvnx4si3 = 6446,
+  CODE_FOR_ashlvnx2di3 = 6447,
+  CODE_FOR_ashrvnx2di3 = 6448,
+  CODE_FOR_lshrvnx2di3 = 6449,
+  CODE_FOR_vcondvnx16qivnx16qi = 6450,
+  CODE_FOR_vcondvnx8hivnx8hi = 6451,
+  CODE_FOR_vcondvnx4sivnx4si = 6452,
+  CODE_FOR_vcondvnx2divnx2di = 6453,
+  CODE_FOR_vcondvnx8hfvnx8hi = 6454,
+  CODE_FOR_vcondvnx4sfvnx4si = 6455,
+  CODE_FOR_vcondvnx2dfvnx2di = 6456,
+  CODE_FOR_vconduvnx16qivnx16qi = 6457,
+  CODE_FOR_vconduvnx8hivnx8hi = 6458,
+  CODE_FOR_vconduvnx4sivnx4si = 6459,
+  CODE_FOR_vconduvnx2divnx2di = 6460,
+  CODE_FOR_vconduvnx8hfvnx8hi = 6461,
+  CODE_FOR_vconduvnx4sfvnx4si = 6462,
+  CODE_FOR_vconduvnx2dfvnx2di = 6463,
+  CODE_FOR_vcondvnx4sivnx4sf = 6464,
+  CODE_FOR_vcondvnx2divnx2df = 6465,
+  CODE_FOR_vcondvnx4sfvnx4sf = 6466,
+  CODE_FOR_vcondvnx2dfvnx2df = 6467,
+  CODE_FOR_vec_cmpvnx16qivnx16bi = 6468,
+  CODE_FOR_vec_cmpvnx8hivnx8bi = 6469,
+  CODE_FOR_vec_cmpvnx4sivnx4bi = 6470,
+  CODE_FOR_vec_cmpvnx2divnx2bi = 6471,
+  CODE_FOR_vec_cmpuvnx16qivnx16bi = 6472,
+  CODE_FOR_vec_cmpuvnx8hivnx8bi = 6473,
+  CODE_FOR_vec_cmpuvnx4sivnx4bi = 6474,
+  CODE_FOR_vec_cmpuvnx2divnx2bi = 6475,
+  CODE_FOR_vec_cmpvnx8hfvnx8bi = 6476,
+  CODE_FOR_vec_cmpvnx4sfvnx4bi = 6477,
+  CODE_FOR_vec_cmpvnx2dfvnx2bi = 6478,
+  CODE_FOR_cbranchvnx16bi4 = 6479,
+  CODE_FOR_cbranchvnx8bi4 = 6480,
+  CODE_FOR_cbranchvnx4bi4 = 6481,
+  CODE_FOR_cbranchvnx2bi4 = 6482,
+  CODE_FOR_smaxvnx16qi3 = 6483,
+  CODE_FOR_sminvnx16qi3 = 6484,
+  CODE_FOR_umaxvnx16qi3 = 6485,
+  CODE_FOR_uminvnx16qi3 = 6486,
+  CODE_FOR_smaxvnx8hi3 = 6487,
+  CODE_FOR_sminvnx8hi3 = 6488,
+  CODE_FOR_umaxvnx8hi3 = 6489,
+  CODE_FOR_uminvnx8hi3 = 6490,
+  CODE_FOR_smaxvnx4si3 = 6491,
+  CODE_FOR_sminvnx4si3 = 6492,
+  CODE_FOR_umaxvnx4si3 = 6493,
+  CODE_FOR_uminvnx4si3 = 6494,
+  CODE_FOR_smaxvnx2di3 = 6495,
+  CODE_FOR_sminvnx2di3 = 6496,
+  CODE_FOR_umaxvnx2di3 = 6497,
+  CODE_FOR_uminvnx2di3 = 6498,
+  CODE_FOR_smaxvnx8hf3 = 6499,
+  CODE_FOR_sminvnx8hf3 = 6500,
+  CODE_FOR_smaxvnx4sf3 = 6501,
+  CODE_FOR_sminvnx4sf3 = 6502,
+  CODE_FOR_smaxvnx2df3 = 6503,
+  CODE_FOR_sminvnx2df3 = 6504,
+  CODE_FOR_smax_nanvnx8hf3 = 6505,
+  CODE_FOR_smin_nanvnx8hf3 = 6506,
+  CODE_FOR_fmaxvnx8hf3 = 6507,
+  CODE_FOR_fminvnx8hf3 = 6508,
+  CODE_FOR_smax_nanvnx4sf3 = 6509,
+  CODE_FOR_smin_nanvnx4sf3 = 6510,
+  CODE_FOR_fmaxvnx4sf3 = 6511,
+  CODE_FOR_fminvnx4sf3 = 6512,
+  CODE_FOR_smax_nanvnx2df3 = 6513,
+  CODE_FOR_smin_nanvnx2df3 = 6514,
+  CODE_FOR_fmaxvnx2df3 = 6515,
+  CODE_FOR_fminvnx2df3 = 6516,
+  CODE_FOR_cond_addvnx16qi = 6517,
+  CODE_FOR_cond_subvnx16qi = 6518,
+  CODE_FOR_cond_mulvnx16qi = 6519,
+  CODE_FOR_cond_smaxvnx16qi = 6520,
+  CODE_FOR_cond_umaxvnx16qi = 6521,
+  CODE_FOR_cond_sminvnx16qi = 6522,
+  CODE_FOR_cond_uminvnx16qi = 6523,
+  CODE_FOR_cond_andvnx16qi = 6524,
+  CODE_FOR_cond_iorvnx16qi = 6525,
+  CODE_FOR_cond_xorvnx16qi = 6526,
+  CODE_FOR_cond_addvnx8hi = 6527,
+  CODE_FOR_cond_subvnx8hi = 6528,
+  CODE_FOR_cond_mulvnx8hi = 6529,
+  CODE_FOR_cond_smaxvnx8hi = 6530,
+  CODE_FOR_cond_umaxvnx8hi = 6531,
+  CODE_FOR_cond_sminvnx8hi = 6532,
+  CODE_FOR_cond_uminvnx8hi = 6533,
+  CODE_FOR_cond_andvnx8hi = 6534,
+  CODE_FOR_cond_iorvnx8hi = 6535,
+  CODE_FOR_cond_xorvnx8hi = 6536,
+  CODE_FOR_cond_addvnx4si = 6537,
+  CODE_FOR_cond_subvnx4si = 6538,
+  CODE_FOR_cond_mulvnx4si = 6539,
+  CODE_FOR_cond_smaxvnx4si = 6540,
+  CODE_FOR_cond_umaxvnx4si = 6541,
+  CODE_FOR_cond_sminvnx4si = 6542,
+  CODE_FOR_cond_uminvnx4si = 6543,
+  CODE_FOR_cond_andvnx4si = 6544,
+  CODE_FOR_cond_iorvnx4si = 6545,
+  CODE_FOR_cond_xorvnx4si = 6546,
+  CODE_FOR_cond_addvnx2di = 6547,
+  CODE_FOR_cond_subvnx2di = 6548,
+  CODE_FOR_cond_mulvnx2di = 6549,
+  CODE_FOR_cond_smaxvnx2di = 6550,
+  CODE_FOR_cond_umaxvnx2di = 6551,
+  CODE_FOR_cond_sminvnx2di = 6552,
+  CODE_FOR_cond_uminvnx2di = 6553,
+  CODE_FOR_cond_andvnx2di = 6554,
+  CODE_FOR_cond_iorvnx2di = 6555,
+  CODE_FOR_cond_xorvnx2di = 6556,
+  CODE_FOR_cond_divvnx4si = 6557,
+  CODE_FOR_cond_udivvnx4si = 6558,
+  CODE_FOR_cond_divvnx2di = 6559,
+  CODE_FOR_cond_udivvnx2di = 6560,
+  CODE_FOR_reduc_plus_scal_vnx16qi = 6561,
+  CODE_FOR_reduc_plus_scal_vnx8hi = 6562,
+  CODE_FOR_reduc_plus_scal_vnx4si = 6563,
+  CODE_FOR_reduc_plus_scal_vnx2di = 6564,
+  CODE_FOR_reduc_plus_scal_vnx8hf = 6565,
+  CODE_FOR_reduc_plus_scal_vnx4sf = 6566,
+  CODE_FOR_reduc_plus_scal_vnx2df = 6567,
+  CODE_FOR_reduc_umax_scal_vnx16qi = 6568,
+  CODE_FOR_reduc_umin_scal_vnx16qi = 6569,
+  CODE_FOR_reduc_smax_scal_vnx16qi = 6570,
+  CODE_FOR_reduc_smin_scal_vnx16qi = 6571,
+  CODE_FOR_reduc_umax_scal_vnx8hi = 6572,
+  CODE_FOR_reduc_umin_scal_vnx8hi = 6573,
+  CODE_FOR_reduc_smax_scal_vnx8hi = 6574,
+  CODE_FOR_reduc_smin_scal_vnx8hi = 6575,
+  CODE_FOR_reduc_umax_scal_vnx4si = 6576,
+  CODE_FOR_reduc_umin_scal_vnx4si = 6577,
+  CODE_FOR_reduc_smax_scal_vnx4si = 6578,
+  CODE_FOR_reduc_smin_scal_vnx4si = 6579,
+  CODE_FOR_reduc_umax_scal_vnx2di = 6580,
+  CODE_FOR_reduc_umin_scal_vnx2di = 6581,
+  CODE_FOR_reduc_smax_scal_vnx2di = 6582,
+  CODE_FOR_reduc_smin_scal_vnx2di = 6583,
+  CODE_FOR_reduc_smax_nan_scal_vnx8hf = 6584,
+  CODE_FOR_reduc_smin_nan_scal_vnx8hf = 6585,
+  CODE_FOR_reduc_smax_scal_vnx8hf = 6586,
+  CODE_FOR_reduc_smin_scal_vnx8hf = 6587,
+  CODE_FOR_reduc_smax_nan_scal_vnx4sf = 6588,
+  CODE_FOR_reduc_smin_nan_scal_vnx4sf = 6589,
+  CODE_FOR_reduc_smax_scal_vnx4sf = 6590,
+  CODE_FOR_reduc_smin_scal_vnx4sf = 6591,
+  CODE_FOR_reduc_smax_nan_scal_vnx2df = 6592,
+  CODE_FOR_reduc_smin_nan_scal_vnx2df = 6593,
+  CODE_FOR_reduc_smax_scal_vnx2df = 6594,
+  CODE_FOR_reduc_smin_scal_vnx2df = 6595,
+  CODE_FOR_reduc_and_scal_vnx16qi = 6596,
+  CODE_FOR_reduc_ior_scal_vnx16qi = 6597,
+  CODE_FOR_reduc_xor_scal_vnx16qi = 6598,
+  CODE_FOR_reduc_and_scal_vnx8hi = 6599,
+  CODE_FOR_reduc_ior_scal_vnx8hi = 6600,
+  CODE_FOR_reduc_xor_scal_vnx8hi = 6601,
+  CODE_FOR_reduc_and_scal_vnx4si = 6602,
+  CODE_FOR_reduc_ior_scal_vnx4si = 6603,
+  CODE_FOR_reduc_xor_scal_vnx4si = 6604,
+  CODE_FOR_reduc_and_scal_vnx2di = 6605,
+  CODE_FOR_reduc_ior_scal_vnx2di = 6606,
+  CODE_FOR_reduc_xor_scal_vnx2di = 6607,
+  CODE_FOR_fold_left_plus_vnx8hf = 6608,
+  CODE_FOR_fold_left_plus_vnx4sf = 6609,
+  CODE_FOR_fold_left_plus_vnx2df = 6610,
+  CODE_FOR_addvnx8hf3 = 6611,
+  CODE_FOR_addvnx4sf3 = 6612,
+  CODE_FOR_addvnx2df3 = 6613,
+  CODE_FOR_subvnx8hf3 = 6614,
+  CODE_FOR_subvnx4sf3 = 6615,
+  CODE_FOR_subvnx2df3 = 6616,
+  CODE_FOR_mulvnx8hf3 = 6617,
+  CODE_FOR_mulvnx4sf3 = 6618,
+  CODE_FOR_mulvnx2df3 = 6619,
+  CODE_FOR_fmavnx8hf4 = 6620,
+  CODE_FOR_fmavnx4sf4 = 6621,
+  CODE_FOR_fmavnx2df4 = 6622,
+  CODE_FOR_fnmavnx8hf4 = 6623,
+  CODE_FOR_fnmavnx4sf4 = 6624,
+  CODE_FOR_fnmavnx2df4 = 6625,
+  CODE_FOR_fmsvnx8hf4 = 6626,
+  CODE_FOR_fmsvnx4sf4 = 6627,
+  CODE_FOR_fmsvnx2df4 = 6628,
+  CODE_FOR_fnmsvnx8hf4 = 6629,
+  CODE_FOR_fnmsvnx4sf4 = 6630,
+  CODE_FOR_fnmsvnx2df4 = 6631,
+  CODE_FOR_divvnx8hf3 = 6632,
+  CODE_FOR_divvnx4sf3 = 6633,
+  CODE_FOR_divvnx2df3 = 6634,
+  CODE_FOR_absvnx8hf2 = 6635,
+  CODE_FOR_negvnx8hf2 = 6636,
+  CODE_FOR_sqrtvnx8hf2 = 6637,
+  CODE_FOR_absvnx4sf2 = 6638,
+  CODE_FOR_negvnx4sf2 = 6639,
+  CODE_FOR_sqrtvnx4sf2 = 6640,
+  CODE_FOR_absvnx2df2 = 6641,
+  CODE_FOR_negvnx2df2 = 6642,
+  CODE_FOR_sqrtvnx2df2 = 6643,
+  CODE_FOR_btruncvnx8hf2 = 6644,
+  CODE_FOR_ceilvnx8hf2 = 6645,
+  CODE_FOR_floorvnx8hf2 = 6646,
+  CODE_FOR_frintnvnx8hf2 = 6647,
+  CODE_FOR_nearbyintvnx8hf2 = 6648,
+  CODE_FOR_rintvnx8hf2 = 6649,
+  CODE_FOR_roundvnx8hf2 = 6650,
+  CODE_FOR_btruncvnx4sf2 = 6651,
+  CODE_FOR_ceilvnx4sf2 = 6652,
+  CODE_FOR_floorvnx4sf2 = 6653,
+  CODE_FOR_frintnvnx4sf2 = 6654,
+  CODE_FOR_nearbyintvnx4sf2 = 6655,
+  CODE_FOR_rintvnx4sf2 = 6656,
+  CODE_FOR_roundvnx4sf2 = 6657,
+  CODE_FOR_btruncvnx2df2 = 6658,
+  CODE_FOR_ceilvnx2df2 = 6659,
+  CODE_FOR_floorvnx2df2 = 6660,
+  CODE_FOR_frintnvnx2df2 = 6661,
+  CODE_FOR_nearbyintvnx2df2 = 6662,
+  CODE_FOR_rintvnx2df2 = 6663,
+  CODE_FOR_roundvnx2df2 = 6664,
+  CODE_FOR_fix_truncvnx8hfvnx8hi2 = 6665,
+  CODE_FOR_fixuns_truncvnx8hfvnx8hi2 = 6666,
+  CODE_FOR_fix_truncvnx4sfvnx4si2 = 6667,
+  CODE_FOR_fixuns_truncvnx4sfvnx4si2 = 6668,
+  CODE_FOR_fix_truncvnx2dfvnx2di2 = 6669,
+  CODE_FOR_fixuns_truncvnx2dfvnx2di2 = 6670,
+  CODE_FOR_floatvnx8hivnx8hf2 = 6671,
+  CODE_FOR_floatunsvnx8hivnx8hf2 = 6672,
+  CODE_FOR_floatvnx4sivnx4sf2 = 6673,
+  CODE_FOR_floatunsvnx4sivnx4sf2 = 6674,
+  CODE_FOR_floatvnx2divnx2df2 = 6675,
+  CODE_FOR_floatunsvnx2divnx2df2 = 6676,
+  CODE_FOR_vec_unpacks_hi_vnx16bi = 6677,
+  CODE_FOR_vec_unpacku_hi_vnx16bi = 6678,
+  CODE_FOR_vec_unpacks_lo_vnx16bi = 6679,
+  CODE_FOR_vec_unpacku_lo_vnx16bi = 6680,
+  CODE_FOR_vec_unpacks_hi_vnx8bi = 6681,
+  CODE_FOR_vec_unpacku_hi_vnx8bi = 6682,
+  CODE_FOR_vec_unpacks_lo_vnx8bi = 6683,
+  CODE_FOR_vec_unpacku_lo_vnx8bi = 6684,
+  CODE_FOR_vec_unpacks_hi_vnx4bi = 6685,
+  CODE_FOR_vec_unpacku_hi_vnx4bi = 6686,
+  CODE_FOR_vec_unpacks_lo_vnx4bi = 6687,
+  CODE_FOR_vec_unpacku_lo_vnx4bi = 6688,
+  CODE_FOR_vec_unpacks_hi_vnx16qi = 6689,
+  CODE_FOR_vec_unpacku_hi_vnx16qi = 6690,
+  CODE_FOR_vec_unpacks_lo_vnx16qi = 6691,
+  CODE_FOR_vec_unpacku_lo_vnx16qi = 6692,
+  CODE_FOR_vec_unpacks_hi_vnx8hi = 6693,
+  CODE_FOR_vec_unpacku_hi_vnx8hi = 6694,
+  CODE_FOR_vec_unpacks_lo_vnx8hi = 6695,
+  CODE_FOR_vec_unpacku_lo_vnx8hi = 6696,
+  CODE_FOR_vec_unpacks_hi_vnx4si = 6697,
+  CODE_FOR_vec_unpacku_hi_vnx4si = 6698,
+  CODE_FOR_vec_unpacks_lo_vnx4si = 6699,
+  CODE_FOR_vec_unpacku_lo_vnx4si = 6700,
+  CODE_FOR_vec_unpacks_lo_vnx8hf = 6701,
+  CODE_FOR_vec_unpacks_hi_vnx8hf = 6702,
+  CODE_FOR_vec_unpacks_lo_vnx4sf = 6703,
+  CODE_FOR_vec_unpacks_hi_vnx4sf = 6704,
+  CODE_FOR_vec_unpacks_float_lo_vnx4si = 6705,
+  CODE_FOR_vec_unpacks_float_hi_vnx4si = 6706,
+  CODE_FOR_vec_unpacku_float_lo_vnx4si = 6707,
+  CODE_FOR_vec_unpacku_float_hi_vnx4si = 6708,
+  CODE_FOR_vec_pack_trunc_vnx4sf = 6709,
+  CODE_FOR_vec_pack_trunc_vnx2df = 6710,
+  CODE_FOR_vec_pack_sfix_trunc_vnx2df = 6711,
+  CODE_FOR_vec_pack_ufix_trunc_vnx2df = 6712,
+  CODE_FOR_cond_addvnx8hf = 6713,
+  CODE_FOR_cond_subvnx8hf = 6714,
+  CODE_FOR_cond_mulvnx8hf = 6715,
+  CODE_FOR_cond_divvnx8hf = 6716,
+  CODE_FOR_cond_smaxvnx8hf = 6717,
+  CODE_FOR_cond_sminvnx8hf = 6718,
+  CODE_FOR_cond_addvnx4sf = 6719,
+  CODE_FOR_cond_subvnx4sf = 6720,
+  CODE_FOR_cond_mulvnx4sf = 6721,
+  CODE_FOR_cond_divvnx4sf = 6722,
+  CODE_FOR_cond_smaxvnx4sf = 6723,
+  CODE_FOR_cond_sminvnx4sf = 6724,
+  CODE_FOR_cond_addvnx2df = 6725,
+  CODE_FOR_cond_subvnx2df = 6726,
+  CODE_FOR_cond_mulvnx2df = 6727,
+  CODE_FOR_cond_divvnx2df = 6728,
+  CODE_FOR_cond_smaxvnx2df = 6729,
+  CODE_FOR_cond_sminvnx2df = 6730,
+  CODE_FOR_cond_fmavnx8hf = 6731,
+  CODE_FOR_cond_fnmavnx8hf = 6732,
+  CODE_FOR_cond_fnmsvnx8hf = 6733,
+  CODE_FOR_cond_fmsvnx8hf = 6734,
+  CODE_FOR_cond_fmavnx4sf = 6735,
+  CODE_FOR_cond_fnmavnx4sf = 6736,
+  CODE_FOR_cond_fnmsvnx4sf = 6737,
+  CODE_FOR_cond_fmsvnx4sf = 6738,
+  CODE_FOR_cond_fmavnx2df = 6739,
+  CODE_FOR_cond_fnmavnx2df = 6740,
+  CODE_FOR_cond_fnmsvnx2df = 6741,
+  CODE_FOR_cond_fmsvnx2df = 6742,
+  CODE_FOR_copysignvnx8hf3 = 6743,
+  CODE_FOR_copysignvnx4sf3 = 6744,
+  CODE_FOR_copysignvnx2df3 = 6745,
+  CODE_FOR_xorsignvnx8hf3 = 6746,
+  CODE_FOR_xorsignvnx4sf3 = 6747,
+  CODE_FOR_xorsignvnx2df3 = 6748
+};
+
+const unsigned int NUM_INSN_CODES = 6749;
+#endif /* GCC_INSN_CODES_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-constants.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-constants.h
new file mode 100644
index 0000000..767d4f5
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-constants.h
@@ -0,0 +1,407 @@
+/* Generated automatically by the program `genconstants'
+   from the machine description file `md'.  */
+
+#ifndef GCC_INSN_CONSTANTS_H
+#define GCC_INSN_CONSTANTS_H
+
+#define V24_REGNUM 56
+#define SP_REGNUM 31
+#define R5_REGNUM 5
+#define V6_REGNUM 38
+#define R8_REGNUM 8
+#define V2_REGNUM 34
+#define R12_REGNUM 12
+#define P4_REGNUM 72
+#define V12_REGNUM 44
+#define P7_REGNUM 75
+#define V15_REGNUM 47
+#define R24_REGNUM 24
+#define V27_REGNUM 59
+#define R0_REGNUM 0
+#define SPECULATION_SCRATCH_REGNUM 14
+#define IP0_REGNUM 16
+#define V5_REGNUM 37
+#define V8_REGNUM 40
+#define R15_REGNUM 15
+#define R26_REGNUM 26
+#define R14_REGNUM 14
+#define V18_REGNUM 50
+#define R27_REGNUM 27
+#define P11_REGNUM 79
+#define SFP_REGNUM 64
+#define EP0_REGNUM 12
+#define V31_REGNUM 63
+#define V0_REGNUM 32
+#define R3_REGNUM 3
+#define R18_REGNUM 18
+#define P2_REGNUM 70
+#define V10_REGNUM 42
+#define R22_REGNUM 22
+#define P14_REGNUM 82
+#define V22_REGNUM 54
+#define R19_REGNUM 19
+#define V25_REGNUM 57
+#define R6_REGNUM 6
+#define R9_REGNUM 9
+#define STACK_CLASH_SVE_CFA_REGNUM 11
+#define V3_REGNUM 35
+#define R10_REGNUM 10
+#define R13_REGNUM 13
+#define V13_REGNUM 45
+#define P8_REGNUM 76
+#define V16_REGNUM 48
+#define R25_REGNUM 25
+#define LAST_SAVED_REGNUM 63
+#define V26_REGNUM 58
+#define V20_REGNUM 52
+#define V28_REGNUM 60
+#define R17_REGNUM 17
+#define R1_REGNUM 1
+#define EP1_REGNUM 13
+#define IP1_REGNUM 17
+#define AP_REGNUM 65
+#define V9_REGNUM 41
+#define R16_REGNUM 16
+#define P0_REGNUM 68
+#define R28_REGNUM 28
+#define P12_REGNUM 80
+#define R30_REGNUM 30
+#define R4_REGNUM 4
+#define SPECULATION_TRACKER_REGNUM 15
+#define R7_REGNUM 7
+#define V1_REGNUM 33
+#define V19_REGNUM 51
+#define P3_REGNUM 71
+#define V11_REGNUM 43
+#define R20_REGNUM 20
+#define VG_REGNUM 67
+#define V14_REGNUM 46
+#define R23_REGNUM 23
+#define P15_REGNUM 83
+#define V23_REGNUM 55
+#define LR_REGNUM 30
+#define CC_REGNUM 66
+#define V4_REGNUM 36
+#define V7_REGNUM 39
+#define P6_REGNUM 74
+#define P9_REGNUM 77
+#define V17_REGNUM 49
+#define P10_REGNUM 78
+#define V29_REGNUM 61
+#define R2_REGNUM 2
+#define V30_REGNUM 62
+#define R11_REGNUM 11
+#define P1_REGNUM 69
+#define P5_REGNUM 73
+#define R21_REGNUM 21
+#define R29_REGNUM 29
+#define P13_REGNUM 81
+#define V21_REGNUM 53
+
+enum arches {
+  ARCHES_ANY = 0,
+  ARCHES_RCPC8_4 = 1,
+  ARCHES_FP = 2,
+  ARCHES_SIMD = 3,
+  ARCHES_SVE = 4,
+  ARCHES_FP16 = 5
+};
+#define NUM_ARCHES_VALUES 6
+extern const char *const arches_strings[];
+
+enum unspec {
+  UNSPEC_AUTI1716 = 0,
+  UNSPEC_AUTISP = 1,
+  UNSPEC_CASESI = 2,
+  UNSPEC_CRC32B = 3,
+  UNSPEC_CRC32CB = 4,
+  UNSPEC_CRC32CH = 5,
+  UNSPEC_CRC32CW = 6,
+  UNSPEC_CRC32CX = 7,
+  UNSPEC_CRC32H = 8,
+  UNSPEC_CRC32W = 9,
+  UNSPEC_CRC32X = 10,
+  UNSPEC_FCVTZS = 11,
+  UNSPEC_FCVTZU = 12,
+  UNSPEC_URECPE = 13,
+  UNSPEC_FRECPE = 14,
+  UNSPEC_FRECPS = 15,
+  UNSPEC_FRECPX = 16,
+  UNSPEC_FRINTA = 17,
+  UNSPEC_FRINTI = 18,
+  UNSPEC_FRINTM = 19,
+  UNSPEC_FRINTN = 20,
+  UNSPEC_FRINTP = 21,
+  UNSPEC_FRINTX = 22,
+  UNSPEC_FRINTZ = 23,
+  UNSPEC_GOTSMALLPIC = 24,
+  UNSPEC_GOTSMALLPIC28K = 25,
+  UNSPEC_GOTSMALLTLS = 26,
+  UNSPEC_GOTTINYPIC = 27,
+  UNSPEC_GOTTINYTLS = 28,
+  UNSPEC_LD1 = 29,
+  UNSPEC_LD2 = 30,
+  UNSPEC_LD2_DREG = 31,
+  UNSPEC_LD2_DUP = 32,
+  UNSPEC_LD3 = 33,
+  UNSPEC_LD3_DREG = 34,
+  UNSPEC_LD3_DUP = 35,
+  UNSPEC_LD4 = 36,
+  UNSPEC_LD4_DREG = 37,
+  UNSPEC_LD4_DUP = 38,
+  UNSPEC_LD2_LANE = 39,
+  UNSPEC_LD3_LANE = 40,
+  UNSPEC_LD4_LANE = 41,
+  UNSPEC_MB = 42,
+  UNSPEC_NOP = 43,
+  UNSPEC_PACI1716 = 44,
+  UNSPEC_PACISP = 45,
+  UNSPEC_PRLG_STK = 46,
+  UNSPEC_REV = 47,
+  UNSPEC_RBIT = 48,
+  UNSPEC_SABAL = 49,
+  UNSPEC_SABDL2 = 50,
+  UNSPEC_SADALP = 51,
+  UNSPEC_SCVTF = 52,
+  UNSPEC_SISD_NEG = 53,
+  UNSPEC_SISD_SSHL = 54,
+  UNSPEC_SISD_USHL = 55,
+  UNSPEC_SSHL_2S = 56,
+  UNSPEC_ST1 = 57,
+  UNSPEC_ST2 = 58,
+  UNSPEC_ST3 = 59,
+  UNSPEC_ST4 = 60,
+  UNSPEC_ST2_LANE = 61,
+  UNSPEC_ST3_LANE = 62,
+  UNSPEC_ST4_LANE = 63,
+  UNSPEC_TLS = 64,
+  UNSPEC_TLSDESC = 65,
+  UNSPEC_TLSLE12 = 66,
+  UNSPEC_TLSLE24 = 67,
+  UNSPEC_TLSLE32 = 68,
+  UNSPEC_TLSLE48 = 69,
+  UNSPEC_UABAL = 70,
+  UNSPEC_UABDL2 = 71,
+  UNSPEC_UADALP = 72,
+  UNSPEC_UCVTF = 73,
+  UNSPEC_USHL_2S = 74,
+  UNSPEC_VSTRUCTDUMMY = 75,
+  UNSPEC_SSP_SYSREG = 76,
+  UNSPEC_SP_SET = 77,
+  UNSPEC_SP_TEST = 78,
+  UNSPEC_RSQRT = 79,
+  UNSPEC_RSQRTE = 80,
+  UNSPEC_RSQRTS = 81,
+  UNSPEC_NZCV = 82,
+  UNSPEC_XPACLRI = 83,
+  UNSPEC_LD1_SVE = 84,
+  UNSPEC_ST1_SVE = 85,
+  UNSPEC_LD1RQ = 86,
+  UNSPEC_LD1_GATHER = 87,
+  UNSPEC_ST1_SCATTER = 88,
+  UNSPEC_MERGE_PTRUE = 89,
+  UNSPEC_PTEST_PTRUE = 90,
+  UNSPEC_UNPACKSHI = 91,
+  UNSPEC_UNPACKUHI = 92,
+  UNSPEC_UNPACKSLO = 93,
+  UNSPEC_UNPACKULO = 94,
+  UNSPEC_PACK = 95,
+  UNSPEC_FLOAT_CONVERT = 96,
+  UNSPEC_WHILE_LO = 97,
+  UNSPEC_LDN = 98,
+  UNSPEC_STN = 99,
+  UNSPEC_INSR = 100,
+  UNSPEC_CLASTB = 101,
+  UNSPEC_FADDA = 102,
+  UNSPEC_REV_SUBREG = 103,
+  UNSPEC_SPECULATION_TRACKER = 104,
+  UNSPEC_COPYSIGN = 105,
+  UNSPEC_ASHIFT_SIGNED = 106,
+  UNSPEC_ASHIFT_UNSIGNED = 107,
+  UNSPEC_ABS = 108,
+  UNSPEC_FMAX = 109,
+  UNSPEC_FMAXNMV = 110,
+  UNSPEC_FMAXV = 111,
+  UNSPEC_FMIN = 112,
+  UNSPEC_FMINNMV = 113,
+  UNSPEC_FMINV = 114,
+  UNSPEC_FADDV = 115,
+  UNSPEC_ADDV = 116,
+  UNSPEC_SMAXV = 117,
+  UNSPEC_SMINV = 118,
+  UNSPEC_UMAXV = 119,
+  UNSPEC_UMINV = 120,
+  UNSPEC_SHADD = 121,
+  UNSPEC_UHADD = 122,
+  UNSPEC_SRHADD = 123,
+  UNSPEC_URHADD = 124,
+  UNSPEC_SHSUB = 125,
+  UNSPEC_UHSUB = 126,
+  UNSPEC_SRHSUB = 127,
+  UNSPEC_URHSUB = 128,
+  UNSPEC_ADDHN = 129,
+  UNSPEC_RADDHN = 130,
+  UNSPEC_SUBHN = 131,
+  UNSPEC_RSUBHN = 132,
+  UNSPEC_ADDHN2 = 133,
+  UNSPEC_RADDHN2 = 134,
+  UNSPEC_SUBHN2 = 135,
+  UNSPEC_RSUBHN2 = 136,
+  UNSPEC_SQDMULH = 137,
+  UNSPEC_SQRDMULH = 138,
+  UNSPEC_PMUL = 139,
+  UNSPEC_FMULX = 140,
+  UNSPEC_USQADD = 141,
+  UNSPEC_SUQADD = 142,
+  UNSPEC_SQXTUN = 143,
+  UNSPEC_SQXTN = 144,
+  UNSPEC_UQXTN = 145,
+  UNSPEC_SSRA = 146,
+  UNSPEC_USRA = 147,
+  UNSPEC_SRSRA = 148,
+  UNSPEC_URSRA = 149,
+  UNSPEC_SRSHR = 150,
+  UNSPEC_URSHR = 151,
+  UNSPEC_SQSHLU = 152,
+  UNSPEC_SQSHL = 153,
+  UNSPEC_UQSHL = 154,
+  UNSPEC_SQSHRUN = 155,
+  UNSPEC_SQRSHRUN = 156,
+  UNSPEC_SQSHRN = 157,
+  UNSPEC_UQSHRN = 158,
+  UNSPEC_SQRSHRN = 159,
+  UNSPEC_UQRSHRN = 160,
+  UNSPEC_SSHL = 161,
+  UNSPEC_USHL = 162,
+  UNSPEC_SRSHL = 163,
+  UNSPEC_URSHL = 164,
+  UNSPEC_SQRSHL = 165,
+  UNSPEC_UQRSHL = 166,
+  UNSPEC_SSLI = 167,
+  UNSPEC_USLI = 168,
+  UNSPEC_SSRI = 169,
+  UNSPEC_USRI = 170,
+  UNSPEC_SSHLL = 171,
+  UNSPEC_USHLL = 172,
+  UNSPEC_ADDP = 173,
+  UNSPEC_TBL = 174,
+  UNSPEC_TBX = 175,
+  UNSPEC_CONCAT = 176,
+  UNSPEC_ZIP1 = 177,
+  UNSPEC_ZIP2 = 178,
+  UNSPEC_UZP1 = 179,
+  UNSPEC_UZP2 = 180,
+  UNSPEC_TRN1 = 181,
+  UNSPEC_TRN2 = 182,
+  UNSPEC_EXT = 183,
+  UNSPEC_REV64 = 184,
+  UNSPEC_REV32 = 185,
+  UNSPEC_REV16 = 186,
+  UNSPEC_AESE = 187,
+  UNSPEC_AESD = 188,
+  UNSPEC_AESMC = 189,
+  UNSPEC_AESIMC = 190,
+  UNSPEC_SHA1C = 191,
+  UNSPEC_SHA1M = 192,
+  UNSPEC_SHA1P = 193,
+  UNSPEC_SHA1H = 194,
+  UNSPEC_SHA1SU0 = 195,
+  UNSPEC_SHA1SU1 = 196,
+  UNSPEC_SHA256H = 197,
+  UNSPEC_SHA256H2 = 198,
+  UNSPEC_SHA256SU0 = 199,
+  UNSPEC_SHA256SU1 = 200,
+  UNSPEC_PMULL = 201,
+  UNSPEC_PMULL2 = 202,
+  UNSPEC_REV_REGLIST = 203,
+  UNSPEC_VEC_SHR = 204,
+  UNSPEC_SQRDMLAH = 205,
+  UNSPEC_SQRDMLSH = 206,
+  UNSPEC_FMAXNM = 207,
+  UNSPEC_FMINNM = 208,
+  UNSPEC_SDOT = 209,
+  UNSPEC_UDOT = 210,
+  UNSPEC_SM3SS1 = 211,
+  UNSPEC_SM3TT1A = 212,
+  UNSPEC_SM3TT1B = 213,
+  UNSPEC_SM3TT2A = 214,
+  UNSPEC_SM3TT2B = 215,
+  UNSPEC_SM3PARTW1 = 216,
+  UNSPEC_SM3PARTW2 = 217,
+  UNSPEC_SM4E = 218,
+  UNSPEC_SM4EKEY = 219,
+  UNSPEC_SHA512H = 220,
+  UNSPEC_SHA512H2 = 221,
+  UNSPEC_SHA512SU0 = 222,
+  UNSPEC_SHA512SU1 = 223,
+  UNSPEC_FMLAL = 224,
+  UNSPEC_FMLSL = 225,
+  UNSPEC_FMLAL2 = 226,
+  UNSPEC_FMLSL2 = 227,
+  UNSPEC_SEL = 228,
+  UNSPEC_ANDV = 229,
+  UNSPEC_IORV = 230,
+  UNSPEC_XORV = 231,
+  UNSPEC_ANDF = 232,
+  UNSPEC_IORF = 233,
+  UNSPEC_XORF = 234,
+  UNSPEC_SMUL_HIGHPART = 235,
+  UNSPEC_UMUL_HIGHPART = 236,
+  UNSPEC_COND_ADD = 237,
+  UNSPEC_COND_SUB = 238,
+  UNSPEC_COND_MUL = 239,
+  UNSPEC_COND_DIV = 240,
+  UNSPEC_COND_MAX = 241,
+  UNSPEC_COND_MIN = 242,
+  UNSPEC_COND_FMLA = 243,
+  UNSPEC_COND_FMLS = 244,
+  UNSPEC_COND_FNMLA = 245,
+  UNSPEC_COND_FNMLS = 246,
+  UNSPEC_COND_LT = 247,
+  UNSPEC_COND_LE = 248,
+  UNSPEC_COND_EQ = 249,
+  UNSPEC_COND_NE = 250,
+  UNSPEC_COND_GE = 251,
+  UNSPEC_COND_GT = 252,
+  UNSPEC_LASTB = 253,
+  UNSPEC_FCADD90 = 254,
+  UNSPEC_FCADD270 = 255,
+  UNSPEC_FCMLA = 256,
+  UNSPEC_FCMLA90 = 257,
+  UNSPEC_FCMLA180 = 258,
+  UNSPEC_FCMLA270 = 259
+};
+#define NUM_UNSPEC_VALUES 260
+extern const char *const unspec_strings[];
+
+enum unspecv {
+  UNSPECV_EH_RETURN = 0,
+  UNSPECV_GET_FPCR = 1,
+  UNSPECV_SET_FPCR = 2,
+  UNSPECV_GET_FPSR = 3,
+  UNSPECV_SET_FPSR = 4,
+  UNSPECV_BLOCKAGE = 5,
+  UNSPECV_PROBE_STACK_RANGE = 6,
+  UNSPECV_SPECULATION_BARRIER = 7,
+  UNSPECV_BTI_NOARG = 8,
+  UNSPECV_BTI_C = 9,
+  UNSPECV_BTI_J = 10,
+  UNSPECV_BTI_JC = 11,
+  UNSPECV_LX = 12,
+  UNSPECV_SX = 13,
+  UNSPECV_LDA = 14,
+  UNSPECV_STL = 15,
+  UNSPECV_ATOMIC_CMPSW = 16,
+  UNSPECV_ATOMIC_EXCHG = 17,
+  UNSPECV_ATOMIC_CAS = 18,
+  UNSPECV_ATOMIC_SWP = 19,
+  UNSPECV_ATOMIC_OP = 20,
+  UNSPECV_ATOMIC_LDOP_OR = 21,
+  UNSPECV_ATOMIC_LDOP_BIC = 22,
+  UNSPECV_ATOMIC_LDOP_XOR = 23,
+  UNSPECV_ATOMIC_LDOP_PLUS = 24
+};
+#define NUM_UNSPECV_VALUES 25
+extern const char *const unspecv_strings[];
+
+#endif /* GCC_INSN_CONSTANTS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-flags.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-flags.h
new file mode 100644
index 0000000..35e41e6
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-flags.h
@@ -0,0 +1,10211 @@
+/* Generated automatically by the program `genflags'
+   from the machine description file `md'.  */
+
+#ifndef GCC_INSN_FLAGS_H
+#define GCC_INSN_FLAGS_H
+
+#define HAVE_indirect_jump 1
+#define HAVE_jump 1
+#define HAVE_ccmpsi 1
+#define HAVE_ccmpdi 1
+#define HAVE_fccmpsf (TARGET_FLOAT)
+#define HAVE_fccmpdf (TARGET_FLOAT)
+#define HAVE_fccmpesf (TARGET_FLOAT)
+#define HAVE_fccmpedf (TARGET_FLOAT)
+#define HAVE_condjump 1
+#define HAVE_nop 1
+#define HAVE_prefetch 1
+#define HAVE_trap 1
+#define HAVE_simple_return (aarch64_use_simple_return_insn_p ())
+#define HAVE_insv_immsi (UINTVAL (operands[1]) < GET_MODE_BITSIZE (SImode) \
+   && UINTVAL (operands[1]) % 16 == 0)
+#define HAVE_insv_immdi (UINTVAL (operands[1]) < GET_MODE_BITSIZE (DImode) \
+   && UINTVAL (operands[1]) % 16 == 0)
+#define HAVE_load_pair_sw_sisi (rtx_equal_p (XEXP (operands[3], 0), \
+		 plus_constant (Pmode, \
+				XEXP (operands[1], 0), \
+				GET_MODE_SIZE (SImode))))
+#define HAVE_load_pair_sw_sfsi (rtx_equal_p (XEXP (operands[3], 0), \
+		 plus_constant (Pmode, \
+				XEXP (operands[1], 0), \
+				GET_MODE_SIZE (SFmode))))
+#define HAVE_load_pair_sw_sisf (rtx_equal_p (XEXP (operands[3], 0), \
+		 plus_constant (Pmode, \
+				XEXP (operands[1], 0), \
+				GET_MODE_SIZE (SImode))))
+#define HAVE_load_pair_sw_sfsf (rtx_equal_p (XEXP (operands[3], 0), \
+		 plus_constant (Pmode, \
+				XEXP (operands[1], 0), \
+				GET_MODE_SIZE (SFmode))))
+#define HAVE_load_pair_dw_didi (rtx_equal_p (XEXP (operands[3], 0), \
+		 plus_constant (Pmode, \
+				XEXP (operands[1], 0), \
+				GET_MODE_SIZE (DImode))))
+#define HAVE_load_pair_dw_didf (rtx_equal_p (XEXP (operands[3], 0), \
+		 plus_constant (Pmode, \
+				XEXP (operands[1], 0), \
+				GET_MODE_SIZE (DImode))))
+#define HAVE_load_pair_dw_dfdi (rtx_equal_p (XEXP (operands[3], 0), \
+		 plus_constant (Pmode, \
+				XEXP (operands[1], 0), \
+				GET_MODE_SIZE (DFmode))))
+#define HAVE_load_pair_dw_dfdf (rtx_equal_p (XEXP (operands[3], 0), \
+		 plus_constant (Pmode, \
+				XEXP (operands[1], 0), \
+				GET_MODE_SIZE (DFmode))))
+#define HAVE_load_pair_dw_tftf (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+				   XEXP (operands[1], 0), \
+				   GET_MODE_SIZE (TFmode))))
+#define HAVE_store_pair_sw_sisi (rtx_equal_p (XEXP (operands[2], 0), \
+		 plus_constant (Pmode, \
+				XEXP (operands[0], 0), \
+				GET_MODE_SIZE (SImode))))
+#define HAVE_store_pair_sw_sfsi (rtx_equal_p (XEXP (operands[2], 0), \
+		 plus_constant (Pmode, \
+				XEXP (operands[0], 0), \
+				GET_MODE_SIZE (SFmode))))
+#define HAVE_store_pair_sw_sisf (rtx_equal_p (XEXP (operands[2], 0), \
+		 plus_constant (Pmode, \
+				XEXP (operands[0], 0), \
+				GET_MODE_SIZE (SImode))))
+#define HAVE_store_pair_sw_sfsf (rtx_equal_p (XEXP (operands[2], 0), \
+		 plus_constant (Pmode, \
+				XEXP (operands[0], 0), \
+				GET_MODE_SIZE (SFmode))))
+#define HAVE_store_pair_dw_didi (rtx_equal_p (XEXP (operands[2], 0), \
+		 plus_constant (Pmode, \
+				XEXP (operands[0], 0), \
+				GET_MODE_SIZE (DImode))))
+#define HAVE_store_pair_dw_didf (rtx_equal_p (XEXP (operands[2], 0), \
+		 plus_constant (Pmode, \
+				XEXP (operands[0], 0), \
+				GET_MODE_SIZE (DImode))))
+#define HAVE_store_pair_dw_dfdi (rtx_equal_p (XEXP (operands[2], 0), \
+		 plus_constant (Pmode, \
+				XEXP (operands[0], 0), \
+				GET_MODE_SIZE (DFmode))))
+#define HAVE_store_pair_dw_dfdf (rtx_equal_p (XEXP (operands[2], 0), \
+		 plus_constant (Pmode, \
+				XEXP (operands[0], 0), \
+				GET_MODE_SIZE (DFmode))))
+#define HAVE_store_pair_dw_tftf (TARGET_SIMD && \
+    rtx_equal_p (XEXP (operands[2], 0), \
+		 plus_constant (Pmode, \
+				XEXP (operands[0], 0), \
+				GET_MODE_SIZE (TFmode))))
+#define HAVE_loadwb_pairsi_si ((INTVAL (operands[5]) == GET_MODE_SIZE (SImode)) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_loadwb_pairsi_di ((INTVAL (operands[5]) == GET_MODE_SIZE (SImode)) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_loadwb_pairdi_si ((INTVAL (operands[5]) == GET_MODE_SIZE (DImode)) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_loadwb_pairdi_di ((INTVAL (operands[5]) == GET_MODE_SIZE (DImode)) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_loadwb_pairsf_si ((INTVAL (operands[5]) == GET_MODE_SIZE (SFmode)) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_loadwb_pairsf_di ((INTVAL (operands[5]) == GET_MODE_SIZE (SFmode)) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_loadwb_pairdf_si ((INTVAL (operands[5]) == GET_MODE_SIZE (DFmode)) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_loadwb_pairdf_di ((INTVAL (operands[5]) == GET_MODE_SIZE (DFmode)) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_loadwb_pairti_si ((TARGET_SIMD && INTVAL (operands[5]) == GET_MODE_SIZE (TImode)) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_loadwb_pairti_di ((TARGET_SIMD && INTVAL (operands[5]) == GET_MODE_SIZE (TImode)) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_loadwb_pairtf_si ((TARGET_SIMD && INTVAL (operands[5]) == GET_MODE_SIZE (TFmode)) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_loadwb_pairtf_di ((TARGET_SIMD && INTVAL (operands[5]) == GET_MODE_SIZE (TFmode)) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_storewb_pairsi_si ((INTVAL (operands[5]) == INTVAL (operands[4]) + GET_MODE_SIZE (SImode)) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_storewb_pairsi_di ((INTVAL (operands[5]) == INTVAL (operands[4]) + GET_MODE_SIZE (SImode)) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_storewb_pairdi_si ((INTVAL (operands[5]) == INTVAL (operands[4]) + GET_MODE_SIZE (DImode)) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_storewb_pairdi_di ((INTVAL (operands[5]) == INTVAL (operands[4]) + GET_MODE_SIZE (DImode)) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_storewb_pairsf_si ((INTVAL (operands[5]) == INTVAL (operands[4]) + GET_MODE_SIZE (SFmode)) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_storewb_pairsf_di ((INTVAL (operands[5]) == INTVAL (operands[4]) + GET_MODE_SIZE (SFmode)) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_storewb_pairdf_si ((INTVAL (operands[5]) == INTVAL (operands[4]) + GET_MODE_SIZE (DFmode)) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_storewb_pairdf_di ((INTVAL (operands[5]) == INTVAL (operands[4]) + GET_MODE_SIZE (DFmode)) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_storewb_pairti_si ((TARGET_SIMD \
+   && INTVAL (operands[5]) \
+      == INTVAL (operands[4]) + GET_MODE_SIZE (TImode)) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_storewb_pairti_di ((TARGET_SIMD \
+   && INTVAL (operands[5]) \
+      == INTVAL (operands[4]) + GET_MODE_SIZE (TImode)) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_storewb_pairtf_si ((TARGET_SIMD \
+   && INTVAL (operands[5]) \
+      == INTVAL (operands[4]) + GET_MODE_SIZE (TFmode)) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_storewb_pairtf_di ((TARGET_SIMD \
+   && INTVAL (operands[5]) \
+      == INTVAL (operands[4]) + GET_MODE_SIZE (TFmode)) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_addsi3_compare0 1
+#define HAVE_adddi3_compare0 1
+#define HAVE_addsi3_compareC 1
+#define HAVE_adddi3_compareC 1
+#define HAVE_addsi3_compareV_imm 1
+#define HAVE_adddi3_compareV_imm 1
+#define HAVE_addsi3_compareV 1
+#define HAVE_adddi3_compareV 1
+#define HAVE_aarch64_subsi_compare0 1
+#define HAVE_aarch64_subdi_compare0 1
+#define HAVE_subsi3 1
+#define HAVE_subdi3 1
+#define HAVE_subvsi_insn 1
+#define HAVE_subvdi_insn 1
+#define HAVE_subvsi_imm 1
+#define HAVE_subvdi_imm 1
+#define HAVE_negvsi_insn 1
+#define HAVE_negvdi_insn 1
+#define HAVE_negvsi_cmp_only 1
+#define HAVE_negvdi_cmp_only 1
+#define HAVE_negdi_carryout 1
+#define HAVE_negvdi_carryinV 1
+#define HAVE_subsi3_compare1_imm (UINTVAL (operands[2]) == -UINTVAL (operands[3]))
+#define HAVE_subdi3_compare1_imm (UINTVAL (operands[2]) == -UINTVAL (operands[3]))
+#define HAVE_subsi3_compare1 1
+#define HAVE_subdi3_compare1 1
+#define HAVE_negsi2 1
+#define HAVE_negdi2 1
+#define HAVE_negsi2_compare0 1
+#define HAVE_negdi2_compare0 1
+#define HAVE_mulsi3 1
+#define HAVE_muldi3 1
+#define HAVE_maddsi 1
+#define HAVE_madddi 1
+#define HAVE_mulsidi3 1
+#define HAVE_umulsidi3 1
+#define HAVE_maddsidi4 1
+#define HAVE_umaddsidi4 1
+#define HAVE_msubsidi4 1
+#define HAVE_umsubsidi4 1
+#define HAVE_smuldi3_highpart 1
+#define HAVE_umuldi3_highpart 1
+#define HAVE_divsi3 1
+#define HAVE_udivsi3 1
+#define HAVE_divdi3 1
+#define HAVE_udivdi3 1
+#define HAVE_cmpsi 1
+#define HAVE_cmpdi 1
+#define HAVE_fcmpsf (TARGET_FLOAT)
+#define HAVE_fcmpdf (TARGET_FLOAT)
+#define HAVE_fcmpesf (TARGET_FLOAT)
+#define HAVE_fcmpedf (TARGET_FLOAT)
+#define HAVE_aarch64_cstoreqi 1
+#define HAVE_aarch64_cstorehi 1
+#define HAVE_aarch64_cstoresi 1
+#define HAVE_aarch64_cstoredi 1
+#define HAVE_cstoreqi_neg 1
+#define HAVE_cstorehi_neg 1
+#define HAVE_cstoresi_neg 1
+#define HAVE_cstoredi_neg 1
+#define HAVE_aarch64_crc32b (TARGET_CRC32)
+#define HAVE_aarch64_crc32h (TARGET_CRC32)
+#define HAVE_aarch64_crc32w (TARGET_CRC32)
+#define HAVE_aarch64_crc32x (TARGET_CRC32)
+#define HAVE_aarch64_crc32cb (TARGET_CRC32)
+#define HAVE_aarch64_crc32ch (TARGET_CRC32)
+#define HAVE_aarch64_crc32cw (TARGET_CRC32)
+#define HAVE_aarch64_crc32cx (TARGET_CRC32)
+#define HAVE_csinc3si_insn 1
+#define HAVE_csinc3di_insn 1
+#define HAVE_csneg3_uxtw_insn 1
+#define HAVE_csneg3si_insn 1
+#define HAVE_csneg3di_insn 1
+#define HAVE_aarch64_uqdecsi (TARGET_SVE)
+#define HAVE_aarch64_uqdecdi (TARGET_SVE)
+#define HAVE_andsi3 1
+#define HAVE_iorsi3 1
+#define HAVE_xorsi3 1
+#define HAVE_anddi3 1
+#define HAVE_iordi3 1
+#define HAVE_xordi3 1
+#define HAVE_one_cmplsi2 1
+#define HAVE_one_cmpldi2 1
+#define HAVE_and_one_cmpl_ashlsi3 1
+#define HAVE_ior_one_cmpl_ashlsi3 1
+#define HAVE_xor_one_cmpl_ashlsi3 1
+#define HAVE_and_one_cmpl_ashrsi3 1
+#define HAVE_ior_one_cmpl_ashrsi3 1
+#define HAVE_xor_one_cmpl_ashrsi3 1
+#define HAVE_and_one_cmpl_lshrsi3 1
+#define HAVE_ior_one_cmpl_lshrsi3 1
+#define HAVE_xor_one_cmpl_lshrsi3 1
+#define HAVE_and_one_cmpl_rotrsi3 1
+#define HAVE_ior_one_cmpl_rotrsi3 1
+#define HAVE_xor_one_cmpl_rotrsi3 1
+#define HAVE_and_one_cmpl_ashldi3 1
+#define HAVE_ior_one_cmpl_ashldi3 1
+#define HAVE_xor_one_cmpl_ashldi3 1
+#define HAVE_and_one_cmpl_ashrdi3 1
+#define HAVE_ior_one_cmpl_ashrdi3 1
+#define HAVE_xor_one_cmpl_ashrdi3 1
+#define HAVE_and_one_cmpl_lshrdi3 1
+#define HAVE_ior_one_cmpl_lshrdi3 1
+#define HAVE_xor_one_cmpl_lshrdi3 1
+#define HAVE_and_one_cmpl_rotrdi3 1
+#define HAVE_ior_one_cmpl_rotrdi3 1
+#define HAVE_xor_one_cmpl_rotrdi3 1
+#define HAVE_clzsi2 1
+#define HAVE_clzdi2 1
+#define HAVE_clrsbsi2 1
+#define HAVE_clrsbdi2 1
+#define HAVE_rbitsi2 1
+#define HAVE_rbitdi2 1
+#define HAVE_ctzsi2 1
+#define HAVE_ctzdi2 1
+#define HAVE_bswapsi2 1
+#define HAVE_bswapdi2 1
+#define HAVE_bswaphi2 1
+#define HAVE_rev16si2 (aarch_rev16_shleft_mask_imm_p (operands[3], SImode) \
+   && aarch_rev16_shright_mask_imm_p (operands[2], SImode))
+#define HAVE_rev16di2 (aarch_rev16_shleft_mask_imm_p (operands[3], DImode) \
+   && aarch_rev16_shright_mask_imm_p (operands[2], DImode))
+#define HAVE_rev16si2_alt (aarch_rev16_shleft_mask_imm_p (operands[3], SImode) \
+   && aarch_rev16_shright_mask_imm_p (operands[2], SImode))
+#define HAVE_rev16di2_alt (aarch_rev16_shleft_mask_imm_p (operands[3], DImode) \
+   && aarch_rev16_shright_mask_imm_p (operands[2], DImode))
+#define HAVE_btrunchf2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_ceilhf2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_floorhf2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_frintnhf2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_nearbyinthf2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_rinthf2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_roundhf2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_btruncsf2 (TARGET_FLOAT)
+#define HAVE_ceilsf2 (TARGET_FLOAT)
+#define HAVE_floorsf2 (TARGET_FLOAT)
+#define HAVE_frintnsf2 (TARGET_FLOAT)
+#define HAVE_nearbyintsf2 (TARGET_FLOAT)
+#define HAVE_rintsf2 (TARGET_FLOAT)
+#define HAVE_roundsf2 (TARGET_FLOAT)
+#define HAVE_btruncdf2 (TARGET_FLOAT)
+#define HAVE_ceildf2 (TARGET_FLOAT)
+#define HAVE_floordf2 (TARGET_FLOAT)
+#define HAVE_frintndf2 (TARGET_FLOAT)
+#define HAVE_nearbyintdf2 (TARGET_FLOAT)
+#define HAVE_rintdf2 (TARGET_FLOAT)
+#define HAVE_rounddf2 (TARGET_FLOAT)
+#define HAVE_lbtrunchfsi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lceilhfsi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lfloorhfsi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lroundhfsi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lfrintnhfsi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lbtruncuhfsi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lceiluhfsi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lflooruhfsi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lrounduhfsi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lfrintnuhfsi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lbtrunchfdi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lceilhfdi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lfloorhfdi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lroundhfdi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lfrintnhfdi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lbtruncuhfdi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lceiluhfdi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lflooruhfdi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lrounduhfdi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lfrintnuhfdi2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_lbtruncsfsi2 (TARGET_FLOAT)
+#define HAVE_lceilsfsi2 (TARGET_FLOAT)
+#define HAVE_lfloorsfsi2 (TARGET_FLOAT)
+#define HAVE_lroundsfsi2 (TARGET_FLOAT)
+#define HAVE_lfrintnsfsi2 (TARGET_FLOAT)
+#define HAVE_lbtruncusfsi2 (TARGET_FLOAT)
+#define HAVE_lceilusfsi2 (TARGET_FLOAT)
+#define HAVE_lfloorusfsi2 (TARGET_FLOAT)
+#define HAVE_lroundusfsi2 (TARGET_FLOAT)
+#define HAVE_lfrintnusfsi2 (TARGET_FLOAT)
+#define HAVE_lbtruncsfdi2 (TARGET_FLOAT)
+#define HAVE_lceilsfdi2 (TARGET_FLOAT)
+#define HAVE_lfloorsfdi2 (TARGET_FLOAT)
+#define HAVE_lroundsfdi2 (TARGET_FLOAT)
+#define HAVE_lfrintnsfdi2 (TARGET_FLOAT)
+#define HAVE_lbtruncusfdi2 (TARGET_FLOAT)
+#define HAVE_lceilusfdi2 (TARGET_FLOAT)
+#define HAVE_lfloorusfdi2 (TARGET_FLOAT)
+#define HAVE_lroundusfdi2 (TARGET_FLOAT)
+#define HAVE_lfrintnusfdi2 (TARGET_FLOAT)
+#define HAVE_lbtruncdfsi2 (TARGET_FLOAT)
+#define HAVE_lceildfsi2 (TARGET_FLOAT)
+#define HAVE_lfloordfsi2 (TARGET_FLOAT)
+#define HAVE_lrounddfsi2 (TARGET_FLOAT)
+#define HAVE_lfrintndfsi2 (TARGET_FLOAT)
+#define HAVE_lbtruncudfsi2 (TARGET_FLOAT)
+#define HAVE_lceiludfsi2 (TARGET_FLOAT)
+#define HAVE_lfloorudfsi2 (TARGET_FLOAT)
+#define HAVE_lroundudfsi2 (TARGET_FLOAT)
+#define HAVE_lfrintnudfsi2 (TARGET_FLOAT)
+#define HAVE_lbtruncdfdi2 (TARGET_FLOAT)
+#define HAVE_lceildfdi2 (TARGET_FLOAT)
+#define HAVE_lfloordfdi2 (TARGET_FLOAT)
+#define HAVE_lrounddfdi2 (TARGET_FLOAT)
+#define HAVE_lfrintndfdi2 (TARGET_FLOAT)
+#define HAVE_lbtruncudfdi2 (TARGET_FLOAT)
+#define HAVE_lceiludfdi2 (TARGET_FLOAT)
+#define HAVE_lfloorudfdi2 (TARGET_FLOAT)
+#define HAVE_lroundudfdi2 (TARGET_FLOAT)
+#define HAVE_lfrintnudfdi2 (TARGET_FLOAT)
+#define HAVE_extendsfdf2 (TARGET_FLOAT)
+#define HAVE_extendhfsf2 (TARGET_FLOAT)
+#define HAVE_extendhfdf2 (TARGET_FLOAT)
+#define HAVE_truncdfsf2 (TARGET_FLOAT)
+#define HAVE_truncsfhf2 (TARGET_FLOAT)
+#define HAVE_truncdfhf2 (TARGET_FLOAT)
+#define HAVE_fix_truncsfsi2 (TARGET_FLOAT)
+#define HAVE_fixuns_truncsfsi2 (TARGET_FLOAT)
+#define HAVE_fix_truncdfdi2 (TARGET_FLOAT)
+#define HAVE_fixuns_truncdfdi2 (TARGET_FLOAT)
+#define HAVE_fix_trunchfsi2 (TARGET_FP_F16INST)
+#define HAVE_fixuns_trunchfsi2 (TARGET_FP_F16INST)
+#define HAVE_fix_trunchfdi2 (TARGET_FP_F16INST)
+#define HAVE_fixuns_trunchfdi2 (TARGET_FP_F16INST)
+#define HAVE_fix_truncdfsi2 (TARGET_FLOAT)
+#define HAVE_fixuns_truncdfsi2 (TARGET_FLOAT)
+#define HAVE_fix_truncsfdi2 (TARGET_FLOAT)
+#define HAVE_fixuns_truncsfdi2 (TARGET_FLOAT)
+#define HAVE_floatsisf2 (TARGET_FLOAT)
+#define HAVE_floatunssisf2 (TARGET_FLOAT)
+#define HAVE_floatdidf2 (TARGET_FLOAT)
+#define HAVE_floatunsdidf2 (TARGET_FLOAT)
+#define HAVE_floatdisf2 (TARGET_FLOAT)
+#define HAVE_floatunsdisf2 (TARGET_FLOAT)
+#define HAVE_floatsidf2 (TARGET_FLOAT)
+#define HAVE_floatunssidf2 (TARGET_FLOAT)
+#define HAVE_aarch64_fp16_floatsihf2 (TARGET_FP_F16INST)
+#define HAVE_aarch64_fp16_floatunssihf2 (TARGET_FP_F16INST)
+#define HAVE_aarch64_fp16_floatdihf2 (TARGET_FP_F16INST)
+#define HAVE_aarch64_fp16_floatunsdihf2 (TARGET_FP_F16INST)
+#define HAVE_fcvtzssf3 1
+#define HAVE_fcvtzusf3 1
+#define HAVE_fcvtzsdf3 1
+#define HAVE_fcvtzudf3 1
+#define HAVE_scvtfsi3 1
+#define HAVE_ucvtfsi3 1
+#define HAVE_scvtfdi3 1
+#define HAVE_ucvtfdi3 1
+#define HAVE_fcvtzshfsi3 (TARGET_FP_F16INST)
+#define HAVE_fcvtzuhfsi3 (TARGET_FP_F16INST)
+#define HAVE_fcvtzshfdi3 (TARGET_FP_F16INST)
+#define HAVE_fcvtzuhfdi3 (TARGET_FP_F16INST)
+#define HAVE_scvtfsihf3 (TARGET_FP_F16INST)
+#define HAVE_ucvtfsihf3 (TARGET_FP_F16INST)
+#define HAVE_scvtfdihf3 (TARGET_FP_F16INST)
+#define HAVE_ucvtfdihf3 (TARGET_FP_F16INST)
+#define HAVE_fcvtzshf3 (TARGET_SIMD)
+#define HAVE_fcvtzuhf3 (TARGET_SIMD)
+#define HAVE_scvtfhi3 (TARGET_SIMD)
+#define HAVE_ucvtfhi3 (TARGET_SIMD)
+#define HAVE_addhf3 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_addsf3 (TARGET_FLOAT)
+#define HAVE_adddf3 (TARGET_FLOAT)
+#define HAVE_subhf3 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_subsf3 (TARGET_FLOAT)
+#define HAVE_subdf3 (TARGET_FLOAT)
+#define HAVE_mulhf3 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_mulsf3 (TARGET_FLOAT)
+#define HAVE_muldf3 (TARGET_FLOAT)
+#define HAVE_neghf2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_negsf2 (TARGET_FLOAT)
+#define HAVE_negdf2 (TARGET_FLOAT)
+#define HAVE_abshf2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_abssf2 (TARGET_FLOAT)
+#define HAVE_absdf2 (TARGET_FLOAT)
+#define HAVE_smaxsf3 (TARGET_FLOAT)
+#define HAVE_smaxdf3 (TARGET_FLOAT)
+#define HAVE_sminsf3 (TARGET_FLOAT)
+#define HAVE_smindf3 (TARGET_FLOAT)
+#define HAVE_smax_nanhf3 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_smin_nanhf3 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_fmaxhf3 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_fminhf3 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_smax_nansf3 (TARGET_FLOAT)
+#define HAVE_smin_nansf3 (TARGET_FLOAT)
+#define HAVE_fmaxsf3 (TARGET_FLOAT)
+#define HAVE_fminsf3 (TARGET_FLOAT)
+#define HAVE_smax_nandf3 (TARGET_FLOAT)
+#define HAVE_smin_nandf3 (TARGET_FLOAT)
+#define HAVE_fmaxdf3 (TARGET_FLOAT)
+#define HAVE_fmindf3 (TARGET_FLOAT)
+#define HAVE_copysignsf3_insn (TARGET_FLOAT && TARGET_SIMD)
+#define HAVE_copysigndf3_insn (TARGET_FLOAT && TARGET_SIMD)
+#define HAVE_aarch64_movdi_tilow (TARGET_FLOAT && (reload_completed || reload_in_progress))
+#define HAVE_aarch64_movdi_tflow (TARGET_FLOAT && (reload_completed || reload_in_progress))
+#define HAVE_aarch64_movdi_tihigh (TARGET_FLOAT && (reload_completed || reload_in_progress))
+#define HAVE_aarch64_movdi_tfhigh (TARGET_FLOAT && (reload_completed || reload_in_progress))
+#define HAVE_aarch64_movtihigh_di (TARGET_FLOAT && (reload_completed || reload_in_progress))
+#define HAVE_aarch64_movtfhigh_di (TARGET_FLOAT && (reload_completed || reload_in_progress))
+#define HAVE_aarch64_movtilow_di (TARGET_FLOAT && (reload_completed || reload_in_progress))
+#define HAVE_aarch64_movtflow_di (TARGET_FLOAT && (reload_completed || reload_in_progress))
+#define HAVE_aarch64_movtilow_tilow (TARGET_FLOAT && (reload_completed || reload_in_progress))
+#define HAVE_add_losym_si (ptr_mode == SImode || Pmode == SImode)
+#define HAVE_add_losym_di (ptr_mode == DImode || Pmode == DImode)
+#define HAVE_ldr_got_small_si (ptr_mode == SImode)
+#define HAVE_ldr_got_small_di (ptr_mode == DImode)
+#define HAVE_ldr_got_small_sidi (TARGET_ILP32)
+#define HAVE_ldr_got_small_28k_si (ptr_mode == SImode)
+#define HAVE_ldr_got_small_28k_di (ptr_mode == DImode)
+#define HAVE_ldr_got_small_28k_sidi (TARGET_ILP32)
+#define HAVE_ldr_got_tiny 1
+#define HAVE_aarch64_load_tp_hard 1
+#define HAVE_tlsie_small_si (ptr_mode == SImode)
+#define HAVE_tlsie_small_di (ptr_mode == DImode)
+#define HAVE_tlsie_small_sidi 1
+#define HAVE_tlsie_tiny_si (ptr_mode == SImode)
+#define HAVE_tlsie_tiny_di (ptr_mode == DImode)
+#define HAVE_tlsie_tiny_sidi 1
+#define HAVE_tlsle12_si (ptr_mode == SImode || Pmode == SImode)
+#define HAVE_tlsle12_di (ptr_mode == DImode || Pmode == DImode)
+#define HAVE_tlsle24_si (ptr_mode == SImode || Pmode == SImode)
+#define HAVE_tlsle24_di (ptr_mode == DImode || Pmode == DImode)
+#define HAVE_tlsle32_si (ptr_mode == SImode || Pmode == SImode)
+#define HAVE_tlsle32_di (ptr_mode == DImode || Pmode == DImode)
+#define HAVE_tlsle48_si (ptr_mode == SImode || Pmode == SImode)
+#define HAVE_tlsle48_di (ptr_mode == DImode || Pmode == DImode)
+#define HAVE_tlsdesc_small_advsimd_si ((TARGET_TLS_DESC && !TARGET_SVE) && (ptr_mode == SImode))
+#define HAVE_tlsdesc_small_advsimd_di ((TARGET_TLS_DESC && !TARGET_SVE) && (ptr_mode == DImode))
+#define HAVE_tlsdesc_small_sve_si ((TARGET_TLS_DESC && TARGET_SVE) && (ptr_mode == SImode))
+#define HAVE_tlsdesc_small_sve_di ((TARGET_TLS_DESC && TARGET_SVE) && (ptr_mode == DImode))
+#define HAVE_stack_tie 1
+#define HAVE_pacisp 1
+#define HAVE_autisp 1
+#define HAVE_paci1716 1
+#define HAVE_auti1716 1
+#define HAVE_xpaclri 1
+#define HAVE_blockage 1
+#define HAVE_probe_stack_range 1
+#define HAVE_probe_sve_stack_clash_si ((TARGET_SVE) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_probe_sve_stack_clash_di ((TARGET_SVE) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_reg_stack_protect_address_si ((aarch64_stack_protector_guard != SSP_GLOBAL) && (ptr_mode == SImode))
+#define HAVE_reg_stack_protect_address_di ((aarch64_stack_protector_guard != SSP_GLOBAL) && (ptr_mode == DImode))
+#define HAVE_stack_protect_set_si (ptr_mode == SImode)
+#define HAVE_stack_protect_set_di (ptr_mode == DImode)
+#define HAVE_stack_protect_test_si (ptr_mode == SImode)
+#define HAVE_stack_protect_test_di (ptr_mode == DImode)
+#define HAVE_set_fpcr 1
+#define HAVE_get_fpcr 1
+#define HAVE_set_fpsr 1
+#define HAVE_get_fpsr 1
+#define HAVE_speculation_tracker 1
+#define HAVE_bti_noarg 1
+#define HAVE_bti_c 1
+#define HAVE_bti_j 1
+#define HAVE_bti_jc 1
+#define HAVE_speculation_barrier 1
+#define HAVE_despeculate_simpleqi 1
+#define HAVE_despeculate_simplehi 1
+#define HAVE_despeculate_simplesi 1
+#define HAVE_despeculate_simpledi 1
+#define HAVE_despeculate_simpleti 1
+#define HAVE_aarch64_simd_dupv8qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_dupv16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_dupv4hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_dupv8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_dupv2si (TARGET_SIMD)
+#define HAVE_aarch64_simd_dupv4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_dupv2di (TARGET_SIMD)
+#define HAVE_aarch64_simd_dupv4hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_dupv8hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_dupv2sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_dupv4sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_dupv2df (TARGET_SIMD)
+#define HAVE_aarch64_dup_lanev8qi (TARGET_SIMD)
+#define HAVE_aarch64_dup_lanev16qi (TARGET_SIMD)
+#define HAVE_aarch64_dup_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_dup_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_dup_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_dup_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_dup_lanev2di (TARGET_SIMD)
+#define HAVE_aarch64_dup_lanev4hf (TARGET_SIMD)
+#define HAVE_aarch64_dup_lanev8hf (TARGET_SIMD)
+#define HAVE_aarch64_dup_lanev2sf (TARGET_SIMD)
+#define HAVE_aarch64_dup_lanev4sf (TARGET_SIMD)
+#define HAVE_aarch64_dup_lanev2df (TARGET_SIMD)
+#define HAVE_aarch64_dup_lane_to_128v8qi (TARGET_SIMD)
+#define HAVE_aarch64_dup_lane_to_64v16qi (TARGET_SIMD)
+#define HAVE_aarch64_dup_lane_to_128v4hi (TARGET_SIMD)
+#define HAVE_aarch64_dup_lane_to_64v8hi (TARGET_SIMD)
+#define HAVE_aarch64_dup_lane_to_128v2si (TARGET_SIMD)
+#define HAVE_aarch64_dup_lane_to_64v4si (TARGET_SIMD)
+#define HAVE_aarch64_dup_lane_to_128v4hf (TARGET_SIMD)
+#define HAVE_aarch64_dup_lane_to_64v8hf (TARGET_SIMD)
+#define HAVE_aarch64_dup_lane_to_128v2sf (TARGET_SIMD)
+#define HAVE_aarch64_dup_lane_to_64v4sf (TARGET_SIMD)
+#define HAVE_aarch64_store_lane0v8qi (TARGET_SIMD \
+   && ENDIAN_LANE_N (8, INTVAL (operands[2])) == 0)
+#define HAVE_aarch64_store_lane0v16qi (TARGET_SIMD \
+   && ENDIAN_LANE_N (16, INTVAL (operands[2])) == 0)
+#define HAVE_aarch64_store_lane0v4hi (TARGET_SIMD \
+   && ENDIAN_LANE_N (4, INTVAL (operands[2])) == 0)
+#define HAVE_aarch64_store_lane0v8hi (TARGET_SIMD \
+   && ENDIAN_LANE_N (8, INTVAL (operands[2])) == 0)
+#define HAVE_aarch64_store_lane0v2si (TARGET_SIMD \
+   && ENDIAN_LANE_N (2, INTVAL (operands[2])) == 0)
+#define HAVE_aarch64_store_lane0v4si (TARGET_SIMD \
+   && ENDIAN_LANE_N (4, INTVAL (operands[2])) == 0)
+#define HAVE_aarch64_store_lane0v2di (TARGET_SIMD \
+   && ENDIAN_LANE_N (2, INTVAL (operands[2])) == 0)
+#define HAVE_aarch64_store_lane0v4hf (TARGET_SIMD \
+   && ENDIAN_LANE_N (4, INTVAL (operands[2])) == 0)
+#define HAVE_aarch64_store_lane0v8hf (TARGET_SIMD \
+   && ENDIAN_LANE_N (8, INTVAL (operands[2])) == 0)
+#define HAVE_aarch64_store_lane0v2sf (TARGET_SIMD \
+   && ENDIAN_LANE_N (2, INTVAL (operands[2])) == 0)
+#define HAVE_aarch64_store_lane0v4sf (TARGET_SIMD \
+   && ENDIAN_LANE_N (4, INTVAL (operands[2])) == 0)
+#define HAVE_aarch64_store_lane0v2df (TARGET_SIMD \
+   && ENDIAN_LANE_N (2, INTVAL (operands[2])) == 0)
+#define HAVE_load_pairv8qiv8qi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V8QImode))))
+#define HAVE_load_pairv4hiv8qi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V4HImode))))
+#define HAVE_load_pairv4hfv8qi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V4HFmode))))
+#define HAVE_load_pairv2siv8qi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V2SImode))))
+#define HAVE_load_pairv2sfv8qi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V2SFmode))))
+#define HAVE_load_pairdfv8qi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (DFmode))))
+#define HAVE_load_pairv8qiv4hi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V8QImode))))
+#define HAVE_load_pairv4hiv4hi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V4HImode))))
+#define HAVE_load_pairv4hfv4hi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V4HFmode))))
+#define HAVE_load_pairv2siv4hi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V2SImode))))
+#define HAVE_load_pairv2sfv4hi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V2SFmode))))
+#define HAVE_load_pairdfv4hi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (DFmode))))
+#define HAVE_load_pairv8qiv4hf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V8QImode))))
+#define HAVE_load_pairv4hiv4hf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V4HImode))))
+#define HAVE_load_pairv4hfv4hf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V4HFmode))))
+#define HAVE_load_pairv2siv4hf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V2SImode))))
+#define HAVE_load_pairv2sfv4hf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V2SFmode))))
+#define HAVE_load_pairdfv4hf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (DFmode))))
+#define HAVE_load_pairv8qiv2si (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V8QImode))))
+#define HAVE_load_pairv4hiv2si (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V4HImode))))
+#define HAVE_load_pairv4hfv2si (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V4HFmode))))
+#define HAVE_load_pairv2siv2si (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V2SImode))))
+#define HAVE_load_pairv2sfv2si (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V2SFmode))))
+#define HAVE_load_pairdfv2si (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (DFmode))))
+#define HAVE_load_pairv8qiv2sf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V8QImode))))
+#define HAVE_load_pairv4hiv2sf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V4HImode))))
+#define HAVE_load_pairv4hfv2sf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V4HFmode))))
+#define HAVE_load_pairv2siv2sf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V2SImode))))
+#define HAVE_load_pairv2sfv2sf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V2SFmode))))
+#define HAVE_load_pairdfv2sf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (DFmode))))
+#define HAVE_load_pairv8qidf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V8QImode))))
+#define HAVE_load_pairv4hidf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V4HImode))))
+#define HAVE_load_pairv4hfdf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V4HFmode))))
+#define HAVE_load_pairv2sidf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V2SImode))))
+#define HAVE_load_pairv2sfdf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V2SFmode))))
+#define HAVE_load_pairdfdf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[3], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (DFmode))))
+#define HAVE_vec_store_pairv8qiv8qi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V8QImode))))
+#define HAVE_vec_store_pairv4hiv8qi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V4HImode))))
+#define HAVE_vec_store_pairv4hfv8qi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V4HFmode))))
+#define HAVE_vec_store_pairv2siv8qi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V2SImode))))
+#define HAVE_vec_store_pairv2sfv8qi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V2SFmode))))
+#define HAVE_vec_store_pairdfv8qi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (DFmode))))
+#define HAVE_vec_store_pairv8qiv4hi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V8QImode))))
+#define HAVE_vec_store_pairv4hiv4hi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V4HImode))))
+#define HAVE_vec_store_pairv4hfv4hi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V4HFmode))))
+#define HAVE_vec_store_pairv2siv4hi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V2SImode))))
+#define HAVE_vec_store_pairv2sfv4hi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V2SFmode))))
+#define HAVE_vec_store_pairdfv4hi (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (DFmode))))
+#define HAVE_vec_store_pairv8qiv4hf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V8QImode))))
+#define HAVE_vec_store_pairv4hiv4hf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V4HImode))))
+#define HAVE_vec_store_pairv4hfv4hf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V4HFmode))))
+#define HAVE_vec_store_pairv2siv4hf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V2SImode))))
+#define HAVE_vec_store_pairv2sfv4hf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V2SFmode))))
+#define HAVE_vec_store_pairdfv4hf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (DFmode))))
+#define HAVE_vec_store_pairv8qiv2si (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V8QImode))))
+#define HAVE_vec_store_pairv4hiv2si (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V4HImode))))
+#define HAVE_vec_store_pairv4hfv2si (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V4HFmode))))
+#define HAVE_vec_store_pairv2siv2si (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V2SImode))))
+#define HAVE_vec_store_pairv2sfv2si (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V2SFmode))))
+#define HAVE_vec_store_pairdfv2si (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (DFmode))))
+#define HAVE_vec_store_pairv8qiv2sf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V8QImode))))
+#define HAVE_vec_store_pairv4hiv2sf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V4HImode))))
+#define HAVE_vec_store_pairv4hfv2sf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V4HFmode))))
+#define HAVE_vec_store_pairv2siv2sf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V2SImode))))
+#define HAVE_vec_store_pairv2sfv2sf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V2SFmode))))
+#define HAVE_vec_store_pairdfv2sf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (DFmode))))
+#define HAVE_vec_store_pairv8qidf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V8QImode))))
+#define HAVE_vec_store_pairv4hidf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V4HImode))))
+#define HAVE_vec_store_pairv4hfdf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V4HFmode))))
+#define HAVE_vec_store_pairv2sidf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V2SImode))))
+#define HAVE_vec_store_pairv2sfdf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (V2SFmode))))
+#define HAVE_vec_store_pairdfdf (TARGET_SIMD \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[0], 0), \
+				  GET_MODE_SIZE (DFmode))))
+#define HAVE_load_pairv16qiv16qi (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V16QImode))))
+#define HAVE_load_pairv8hiv16qi (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V8HImode))))
+#define HAVE_load_pairv4siv16qi (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V4SImode))))
+#define HAVE_load_pairv2div16qi (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V2DImode))))
+#define HAVE_load_pairv8hfv16qi (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V8HFmode))))
+#define HAVE_load_pairv4sfv16qi (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V4SFmode))))
+#define HAVE_load_pairv2dfv16qi (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V2DFmode))))
+#define HAVE_load_pairv16qiv8hi (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V16QImode))))
+#define HAVE_load_pairv8hiv8hi (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V8HImode))))
+#define HAVE_load_pairv4siv8hi (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V4SImode))))
+#define HAVE_load_pairv2div8hi (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V2DImode))))
+#define HAVE_load_pairv8hfv8hi (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V8HFmode))))
+#define HAVE_load_pairv4sfv8hi (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V4SFmode))))
+#define HAVE_load_pairv2dfv8hi (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V2DFmode))))
+#define HAVE_load_pairv16qiv4si (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V16QImode))))
+#define HAVE_load_pairv8hiv4si (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V8HImode))))
+#define HAVE_load_pairv4siv4si (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V4SImode))))
+#define HAVE_load_pairv2div4si (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V2DImode))))
+#define HAVE_load_pairv8hfv4si (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V8HFmode))))
+#define HAVE_load_pairv4sfv4si (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V4SFmode))))
+#define HAVE_load_pairv2dfv4si (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V2DFmode))))
+#define HAVE_load_pairv16qiv2di (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V16QImode))))
+#define HAVE_load_pairv8hiv2di (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V8HImode))))
+#define HAVE_load_pairv4siv2di (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V4SImode))))
+#define HAVE_load_pairv2div2di (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V2DImode))))
+#define HAVE_load_pairv8hfv2di (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V8HFmode))))
+#define HAVE_load_pairv4sfv2di (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V4SFmode))))
+#define HAVE_load_pairv2dfv2di (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V2DFmode))))
+#define HAVE_load_pairv16qiv8hf (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V16QImode))))
+#define HAVE_load_pairv8hiv8hf (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V8HImode))))
+#define HAVE_load_pairv4siv8hf (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V4SImode))))
+#define HAVE_load_pairv2div8hf (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V2DImode))))
+#define HAVE_load_pairv8hfv8hf (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V8HFmode))))
+#define HAVE_load_pairv4sfv8hf (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V4SFmode))))
+#define HAVE_load_pairv2dfv8hf (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V2DFmode))))
+#define HAVE_load_pairv16qiv4sf (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V16QImode))))
+#define HAVE_load_pairv8hiv4sf (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V8HImode))))
+#define HAVE_load_pairv4siv4sf (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V4SImode))))
+#define HAVE_load_pairv2div4sf (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V2DImode))))
+#define HAVE_load_pairv8hfv4sf (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V8HFmode))))
+#define HAVE_load_pairv4sfv4sf (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V4SFmode))))
+#define HAVE_load_pairv2dfv4sf (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V2DFmode))))
+#define HAVE_load_pairv16qiv2df (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V16QImode))))
+#define HAVE_load_pairv8hiv2df (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V8HImode))))
+#define HAVE_load_pairv4siv2df (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V4SImode))))
+#define HAVE_load_pairv2div2df (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V2DImode))))
+#define HAVE_load_pairv8hfv2df (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V8HFmode))))
+#define HAVE_load_pairv4sfv2df (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V4SFmode))))
+#define HAVE_load_pairv2dfv2df (TARGET_SIMD \
+    && rtx_equal_p (XEXP (operands[3], 0), \
+		    plus_constant (Pmode, \
+			       XEXP (operands[1], 0), \
+			       GET_MODE_SIZE (V2DFmode))))
+#define HAVE_vec_store_pairv16qiv16qi (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V16QImode))))
+#define HAVE_vec_store_pairv8hiv16qi (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V8HImode))))
+#define HAVE_vec_store_pairv4siv16qi (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V4SImode))))
+#define HAVE_vec_store_pairv2div16qi (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V2DImode))))
+#define HAVE_vec_store_pairv8hfv16qi (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V8HFmode))))
+#define HAVE_vec_store_pairv4sfv16qi (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V4SFmode))))
+#define HAVE_vec_store_pairv2dfv16qi (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V2DFmode))))
+#define HAVE_vec_store_pairv16qiv8hi (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V16QImode))))
+#define HAVE_vec_store_pairv8hiv8hi (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V8HImode))))
+#define HAVE_vec_store_pairv4siv8hi (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V4SImode))))
+#define HAVE_vec_store_pairv2div8hi (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V2DImode))))
+#define HAVE_vec_store_pairv8hfv8hi (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V8HFmode))))
+#define HAVE_vec_store_pairv4sfv8hi (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V4SFmode))))
+#define HAVE_vec_store_pairv2dfv8hi (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V2DFmode))))
+#define HAVE_vec_store_pairv16qiv4si (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V16QImode))))
+#define HAVE_vec_store_pairv8hiv4si (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V8HImode))))
+#define HAVE_vec_store_pairv4siv4si (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V4SImode))))
+#define HAVE_vec_store_pairv2div4si (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V2DImode))))
+#define HAVE_vec_store_pairv8hfv4si (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V8HFmode))))
+#define HAVE_vec_store_pairv4sfv4si (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V4SFmode))))
+#define HAVE_vec_store_pairv2dfv4si (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V2DFmode))))
+#define HAVE_vec_store_pairv16qiv2di (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V16QImode))))
+#define HAVE_vec_store_pairv8hiv2di (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V8HImode))))
+#define HAVE_vec_store_pairv4siv2di (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V4SImode))))
+#define HAVE_vec_store_pairv2div2di (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V2DImode))))
+#define HAVE_vec_store_pairv8hfv2di (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V8HFmode))))
+#define HAVE_vec_store_pairv4sfv2di (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V4SFmode))))
+#define HAVE_vec_store_pairv2dfv2di (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V2DFmode))))
+#define HAVE_vec_store_pairv16qiv8hf (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V16QImode))))
+#define HAVE_vec_store_pairv8hiv8hf (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V8HImode))))
+#define HAVE_vec_store_pairv4siv8hf (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V4SImode))))
+#define HAVE_vec_store_pairv2div8hf (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V2DImode))))
+#define HAVE_vec_store_pairv8hfv8hf (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V8HFmode))))
+#define HAVE_vec_store_pairv4sfv8hf (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V4SFmode))))
+#define HAVE_vec_store_pairv2dfv8hf (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V2DFmode))))
+#define HAVE_vec_store_pairv16qiv4sf (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V16QImode))))
+#define HAVE_vec_store_pairv8hiv4sf (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V8HImode))))
+#define HAVE_vec_store_pairv4siv4sf (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V4SImode))))
+#define HAVE_vec_store_pairv2div4sf (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V2DImode))))
+#define HAVE_vec_store_pairv8hfv4sf (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V8HFmode))))
+#define HAVE_vec_store_pairv4sfv4sf (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V4SFmode))))
+#define HAVE_vec_store_pairv2dfv4sf (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V2DFmode))))
+#define HAVE_vec_store_pairv16qiv2df (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V16QImode))))
+#define HAVE_vec_store_pairv8hiv2df (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V8HImode))))
+#define HAVE_vec_store_pairv4siv2df (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V4SImode))))
+#define HAVE_vec_store_pairv2div2df (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V2DImode))))
+#define HAVE_vec_store_pairv8hfv2df (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V8HFmode))))
+#define HAVE_vec_store_pairv4sfv2df (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V4SFmode))))
+#define HAVE_vec_store_pairv2dfv2df (TARGET_SIMD && rtx_equal_p (XEXP (operands[2], 0), \
+		plus_constant (Pmode, \
+			       XEXP (operands[0], 0), \
+			       GET_MODE_SIZE (V2DFmode))))
+#define HAVE_aarch64_simd_mov_from_v16qilow (TARGET_SIMD && reload_completed)
+#define HAVE_aarch64_simd_mov_from_v8hilow (TARGET_SIMD && reload_completed)
+#define HAVE_aarch64_simd_mov_from_v4silow (TARGET_SIMD && reload_completed)
+#define HAVE_aarch64_simd_mov_from_v2dilow (TARGET_SIMD && reload_completed)
+#define HAVE_aarch64_simd_mov_from_v8hflow (TARGET_SIMD && reload_completed)
+#define HAVE_aarch64_simd_mov_from_v4sflow (TARGET_SIMD && reload_completed)
+#define HAVE_aarch64_simd_mov_from_v2dflow (TARGET_SIMD && reload_completed)
+#define HAVE_aarch64_simd_mov_from_v16qihigh (TARGET_SIMD && reload_completed)
+#define HAVE_aarch64_simd_mov_from_v8hihigh (TARGET_SIMD && reload_completed)
+#define HAVE_aarch64_simd_mov_from_v4sihigh (TARGET_SIMD && reload_completed)
+#define HAVE_aarch64_simd_mov_from_v2dihigh (TARGET_SIMD && reload_completed)
+#define HAVE_aarch64_simd_mov_from_v8hfhigh (TARGET_SIMD && reload_completed)
+#define HAVE_aarch64_simd_mov_from_v4sfhigh (TARGET_SIMD && reload_completed)
+#define HAVE_aarch64_simd_mov_from_v2dfhigh (TARGET_SIMD && reload_completed)
+#define HAVE_ornv8qi3 (TARGET_SIMD)
+#define HAVE_ornv16qi3 (TARGET_SIMD)
+#define HAVE_ornv4hi3 (TARGET_SIMD)
+#define HAVE_ornv8hi3 (TARGET_SIMD)
+#define HAVE_ornv2si3 (TARGET_SIMD)
+#define HAVE_ornv4si3 (TARGET_SIMD)
+#define HAVE_ornv2di3 (TARGET_SIMD)
+#define HAVE_bicv8qi3 (TARGET_SIMD)
+#define HAVE_bicv16qi3 (TARGET_SIMD)
+#define HAVE_bicv4hi3 (TARGET_SIMD)
+#define HAVE_bicv8hi3 (TARGET_SIMD)
+#define HAVE_bicv2si3 (TARGET_SIMD)
+#define HAVE_bicv4si3 (TARGET_SIMD)
+#define HAVE_bicv2di3 (TARGET_SIMD)
+#define HAVE_addv8qi3 (TARGET_SIMD)
+#define HAVE_addv16qi3 (TARGET_SIMD)
+#define HAVE_addv4hi3 (TARGET_SIMD)
+#define HAVE_addv8hi3 (TARGET_SIMD)
+#define HAVE_addv2si3 (TARGET_SIMD)
+#define HAVE_addv4si3 (TARGET_SIMD)
+#define HAVE_addv2di3 (TARGET_SIMD)
+#define HAVE_subv8qi3 (TARGET_SIMD)
+#define HAVE_subv16qi3 (TARGET_SIMD)
+#define HAVE_subv4hi3 (TARGET_SIMD)
+#define HAVE_subv8hi3 (TARGET_SIMD)
+#define HAVE_subv2si3 (TARGET_SIMD)
+#define HAVE_subv4si3 (TARGET_SIMD)
+#define HAVE_subv2di3 (TARGET_SIMD)
+#define HAVE_mulv8qi3 (TARGET_SIMD)
+#define HAVE_mulv16qi3 (TARGET_SIMD)
+#define HAVE_mulv4hi3 (TARGET_SIMD)
+#define HAVE_mulv8hi3 (TARGET_SIMD)
+#define HAVE_mulv2si3 (TARGET_SIMD)
+#define HAVE_mulv4si3 (TARGET_SIMD)
+#define HAVE_bswapv4hi2 (TARGET_SIMD)
+#define HAVE_bswapv8hi2 (TARGET_SIMD)
+#define HAVE_bswapv2si2 (TARGET_SIMD)
+#define HAVE_bswapv4si2 (TARGET_SIMD)
+#define HAVE_bswapv2di2 (TARGET_SIMD)
+#define HAVE_aarch64_rbitv8qi (TARGET_SIMD)
+#define HAVE_aarch64_rbitv16qi (TARGET_SIMD)
+#define HAVE_aarch64_fcadd90v4hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcadd270v4hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcadd90v8hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcadd270v8hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcadd90v2sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcadd270v2sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcadd90v4sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcadd270v4sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcadd90v2df (TARGET_COMPLEX)
+#define HAVE_aarch64_fcadd270v2df (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla0v4hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcmla90v4hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcmla180v4hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcmla270v4hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcmla0v8hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcmla90v8hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcmla180v8hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcmla270v8hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcmla0v2sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla90v2sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla180v2sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla270v2sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla0v4sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla90v4sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla180v4sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla270v4sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla0v2df (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla90v2df (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla180v2df (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla270v2df (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla_lane0v4hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcmla_lane90v4hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcmla_lane180v4hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcmla_lane270v4hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcmla_lane0v8hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcmla_lane90v8hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcmla_lane180v8hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcmla_lane270v8hf ((TARGET_COMPLEX) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fcmla_lane0v2sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla_lane90v2sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla_lane180v2sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla_lane270v2sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla_lane0v4sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla_lane90v4sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla_lane180v4sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla_lane270v4sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla_lane0v2df (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla_lane90v2df (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla_lane180v2df (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla_lane270v2df (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla_laneq0v4hf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla_laneq90v4hf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla_laneq180v4hf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmla_laneq270v4hf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmlaq_lane0v8hf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmlaq_lane90v8hf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmlaq_lane180v8hf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmlaq_lane270v8hf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmlaq_lane0v4sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmlaq_lane90v4sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmlaq_lane180v4sf (TARGET_COMPLEX)
+#define HAVE_aarch64_fcmlaq_lane270v4sf (TARGET_COMPLEX)
+#define HAVE_aarch64_sdotv8qi (TARGET_DOTPROD)
+#define HAVE_aarch64_udotv8qi (TARGET_DOTPROD)
+#define HAVE_aarch64_sdotv16qi (TARGET_DOTPROD)
+#define HAVE_aarch64_udotv16qi (TARGET_DOTPROD)
+#define HAVE_aarch64_sdot_lanev8qi (TARGET_DOTPROD)
+#define HAVE_aarch64_udot_lanev8qi (TARGET_DOTPROD)
+#define HAVE_aarch64_sdot_lanev16qi (TARGET_DOTPROD)
+#define HAVE_aarch64_udot_lanev16qi (TARGET_DOTPROD)
+#define HAVE_aarch64_sdot_laneqv8qi (TARGET_DOTPROD)
+#define HAVE_aarch64_udot_laneqv8qi (TARGET_DOTPROD)
+#define HAVE_aarch64_sdot_laneqv16qi (TARGET_DOTPROD)
+#define HAVE_aarch64_udot_laneqv16qi (TARGET_DOTPROD)
+#define HAVE_aarch64_rsqrtev4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_rsqrtev8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_rsqrtev2sf (TARGET_SIMD)
+#define HAVE_aarch64_rsqrtev4sf (TARGET_SIMD)
+#define HAVE_aarch64_rsqrtev2df (TARGET_SIMD)
+#define HAVE_aarch64_rsqrtehf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_rsqrtesf (TARGET_SIMD)
+#define HAVE_aarch64_rsqrtedf (TARGET_SIMD)
+#define HAVE_aarch64_rsqrtsv4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_rsqrtsv8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_rsqrtsv2sf (TARGET_SIMD)
+#define HAVE_aarch64_rsqrtsv4sf (TARGET_SIMD)
+#define HAVE_aarch64_rsqrtsv2df (TARGET_SIMD)
+#define HAVE_aarch64_rsqrtshf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_rsqrtssf (TARGET_SIMD)
+#define HAVE_aarch64_rsqrtsdf (TARGET_SIMD)
+#define HAVE_negv8qi2 (TARGET_SIMD)
+#define HAVE_negv16qi2 (TARGET_SIMD)
+#define HAVE_negv4hi2 (TARGET_SIMD)
+#define HAVE_negv8hi2 (TARGET_SIMD)
+#define HAVE_negv2si2 (TARGET_SIMD)
+#define HAVE_negv4si2 (TARGET_SIMD)
+#define HAVE_negv2di2 (TARGET_SIMD)
+#define HAVE_absv8qi2 (TARGET_SIMD)
+#define HAVE_absv16qi2 (TARGET_SIMD)
+#define HAVE_absv4hi2 (TARGET_SIMD)
+#define HAVE_absv8hi2 (TARGET_SIMD)
+#define HAVE_absv2si2 (TARGET_SIMD)
+#define HAVE_absv4si2 (TARGET_SIMD)
+#define HAVE_absv2di2 (TARGET_SIMD)
+#define HAVE_aarch64_absv8qi (TARGET_SIMD)
+#define HAVE_aarch64_absv16qi (TARGET_SIMD)
+#define HAVE_aarch64_absv4hi (TARGET_SIMD)
+#define HAVE_aarch64_absv8hi (TARGET_SIMD)
+#define HAVE_aarch64_absv2si (TARGET_SIMD)
+#define HAVE_aarch64_absv4si (TARGET_SIMD)
+#define HAVE_aarch64_absv2di (TARGET_SIMD)
+#define HAVE_aarch64_absdi (TARGET_SIMD)
+#define HAVE_aarch64_sabdl2v8qi_3 (TARGET_SIMD)
+#define HAVE_aarch64_uabdl2v8qi_3 (TARGET_SIMD)
+#define HAVE_aarch64_sabdl2v16qi_3 (TARGET_SIMD)
+#define HAVE_aarch64_uabdl2v16qi_3 (TARGET_SIMD)
+#define HAVE_aarch64_sabdl2v4hi_3 (TARGET_SIMD)
+#define HAVE_aarch64_uabdl2v4hi_3 (TARGET_SIMD)
+#define HAVE_aarch64_sabdl2v8hi_3 (TARGET_SIMD)
+#define HAVE_aarch64_uabdl2v8hi_3 (TARGET_SIMD)
+#define HAVE_aarch64_sabdl2v4si_3 (TARGET_SIMD)
+#define HAVE_aarch64_uabdl2v4si_3 (TARGET_SIMD)
+#define HAVE_aarch64_sabalv8qi_4 (TARGET_SIMD)
+#define HAVE_aarch64_uabalv8qi_4 (TARGET_SIMD)
+#define HAVE_aarch64_sabalv16qi_4 (TARGET_SIMD)
+#define HAVE_aarch64_uabalv16qi_4 (TARGET_SIMD)
+#define HAVE_aarch64_sabalv4hi_4 (TARGET_SIMD)
+#define HAVE_aarch64_uabalv4hi_4 (TARGET_SIMD)
+#define HAVE_aarch64_sabalv8hi_4 (TARGET_SIMD)
+#define HAVE_aarch64_uabalv8hi_4 (TARGET_SIMD)
+#define HAVE_aarch64_sabalv4si_4 (TARGET_SIMD)
+#define HAVE_aarch64_uabalv4si_4 (TARGET_SIMD)
+#define HAVE_aarch64_sadalpv8qi_3 (TARGET_SIMD)
+#define HAVE_aarch64_uadalpv8qi_3 (TARGET_SIMD)
+#define HAVE_aarch64_sadalpv16qi_3 (TARGET_SIMD)
+#define HAVE_aarch64_uadalpv16qi_3 (TARGET_SIMD)
+#define HAVE_aarch64_sadalpv4hi_3 (TARGET_SIMD)
+#define HAVE_aarch64_uadalpv4hi_3 (TARGET_SIMD)
+#define HAVE_aarch64_sadalpv8hi_3 (TARGET_SIMD)
+#define HAVE_aarch64_uadalpv8hi_3 (TARGET_SIMD)
+#define HAVE_aarch64_sadalpv4si_3 (TARGET_SIMD)
+#define HAVE_aarch64_uadalpv4si_3 (TARGET_SIMD)
+#define HAVE_abav8qi_3 (TARGET_SIMD)
+#define HAVE_abav16qi_3 (TARGET_SIMD)
+#define HAVE_abav4hi_3 (TARGET_SIMD)
+#define HAVE_abav8hi_3 (TARGET_SIMD)
+#define HAVE_abav2si_3 (TARGET_SIMD)
+#define HAVE_abav4si_3 (TARGET_SIMD)
+#define HAVE_fabdv4hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fabdv8hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fabdv2sf3 (TARGET_SIMD)
+#define HAVE_fabdv4sf3 (TARGET_SIMD)
+#define HAVE_fabdv2df3 (TARGET_SIMD)
+#define HAVE_fabdhf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fabdsf3 (TARGET_SIMD)
+#define HAVE_fabddf3 (TARGET_SIMD)
+#define HAVE_andv8qi3 (TARGET_SIMD)
+#define HAVE_andv16qi3 (TARGET_SIMD)
+#define HAVE_andv4hi3 (TARGET_SIMD)
+#define HAVE_andv8hi3 (TARGET_SIMD)
+#define HAVE_andv2si3 (TARGET_SIMD)
+#define HAVE_andv4si3 (TARGET_SIMD)
+#define HAVE_andv2di3 (TARGET_SIMD)
+#define HAVE_iorv8qi3 (TARGET_SIMD)
+#define HAVE_iorv16qi3 (TARGET_SIMD)
+#define HAVE_iorv4hi3 (TARGET_SIMD)
+#define HAVE_iorv8hi3 (TARGET_SIMD)
+#define HAVE_iorv2si3 (TARGET_SIMD)
+#define HAVE_iorv4si3 (TARGET_SIMD)
+#define HAVE_iorv2di3 (TARGET_SIMD)
+#define HAVE_xorv8qi3 (TARGET_SIMD)
+#define HAVE_xorv16qi3 (TARGET_SIMD)
+#define HAVE_xorv4hi3 (TARGET_SIMD)
+#define HAVE_xorv8hi3 (TARGET_SIMD)
+#define HAVE_xorv2si3 (TARGET_SIMD)
+#define HAVE_xorv4si3 (TARGET_SIMD)
+#define HAVE_xorv2di3 (TARGET_SIMD)
+#define HAVE_one_cmplv8qi2 (TARGET_SIMD)
+#define HAVE_one_cmplv16qi2 (TARGET_SIMD)
+#define HAVE_one_cmplv4hi2 (TARGET_SIMD)
+#define HAVE_one_cmplv8hi2 (TARGET_SIMD)
+#define HAVE_one_cmplv2si2 (TARGET_SIMD)
+#define HAVE_one_cmplv4si2 (TARGET_SIMD)
+#define HAVE_one_cmplv2di2 (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_setv8qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_setv16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_setv4hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_setv8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_setv2si (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_setv4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_setv2di (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_setv4hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_setv8hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_setv2sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_setv4sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_setv2df (TARGET_SIMD)
+#define HAVE_aarch64_simd_lshrv8qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_lshrv16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_lshrv4hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_lshrv8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_lshrv2si (TARGET_SIMD)
+#define HAVE_aarch64_simd_lshrv4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_lshrv2di (TARGET_SIMD)
+#define HAVE_aarch64_simd_ashrv8qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ashrv16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ashrv4hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ashrv8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ashrv2si (TARGET_SIMD)
+#define HAVE_aarch64_simd_ashrv4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_ashrv2di (TARGET_SIMD)
+#define HAVE_aarch64_simd_imm_shlv8qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_imm_shlv16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_imm_shlv4hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_imm_shlv8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_imm_shlv2si (TARGET_SIMD)
+#define HAVE_aarch64_simd_imm_shlv4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_imm_shlv2di (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_sshlv8qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_sshlv16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_sshlv4hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_sshlv8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_sshlv2si (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_sshlv4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_sshlv2di (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_shlv8qi_unsigned (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_shlv16qi_unsigned (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_shlv4hi_unsigned (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_shlv8hi_unsigned (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_shlv2si_unsigned (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_shlv4si_unsigned (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_shlv2di_unsigned (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_shlv8qi_signed (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_shlv16qi_signed (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_shlv4hi_signed (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_shlv8hi_signed (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_shlv2si_signed (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_shlv4si_signed (TARGET_SIMD)
+#define HAVE_aarch64_simd_reg_shlv2di_signed (TARGET_SIMD)
+#define HAVE_vec_shr_v8qi (TARGET_SIMD)
+#define HAVE_vec_shr_v4hi (TARGET_SIMD)
+#define HAVE_vec_shr_v4hf (TARGET_SIMD)
+#define HAVE_vec_shr_v2si (TARGET_SIMD)
+#define HAVE_vec_shr_v2sf (TARGET_SIMD)
+#define HAVE_aarch64_mlav8qi (TARGET_SIMD)
+#define HAVE_aarch64_mlav16qi (TARGET_SIMD)
+#define HAVE_aarch64_mlav4hi (TARGET_SIMD)
+#define HAVE_aarch64_mlav8hi (TARGET_SIMD)
+#define HAVE_aarch64_mlav2si (TARGET_SIMD)
+#define HAVE_aarch64_mlav4si (TARGET_SIMD)
+#define HAVE_aarch64_mlsv8qi (TARGET_SIMD)
+#define HAVE_aarch64_mlsv16qi (TARGET_SIMD)
+#define HAVE_aarch64_mlsv4hi (TARGET_SIMD)
+#define HAVE_aarch64_mlsv8hi (TARGET_SIMD)
+#define HAVE_aarch64_mlsv2si (TARGET_SIMD)
+#define HAVE_aarch64_mlsv4si (TARGET_SIMD)
+#define HAVE_smaxv8qi3 (TARGET_SIMD)
+#define HAVE_sminv8qi3 (TARGET_SIMD)
+#define HAVE_umaxv8qi3 (TARGET_SIMD)
+#define HAVE_uminv8qi3 (TARGET_SIMD)
+#define HAVE_smaxv16qi3 (TARGET_SIMD)
+#define HAVE_sminv16qi3 (TARGET_SIMD)
+#define HAVE_umaxv16qi3 (TARGET_SIMD)
+#define HAVE_uminv16qi3 (TARGET_SIMD)
+#define HAVE_smaxv4hi3 (TARGET_SIMD)
+#define HAVE_sminv4hi3 (TARGET_SIMD)
+#define HAVE_umaxv4hi3 (TARGET_SIMD)
+#define HAVE_uminv4hi3 (TARGET_SIMD)
+#define HAVE_smaxv8hi3 (TARGET_SIMD)
+#define HAVE_sminv8hi3 (TARGET_SIMD)
+#define HAVE_umaxv8hi3 (TARGET_SIMD)
+#define HAVE_uminv8hi3 (TARGET_SIMD)
+#define HAVE_smaxv2si3 (TARGET_SIMD)
+#define HAVE_sminv2si3 (TARGET_SIMD)
+#define HAVE_umaxv2si3 (TARGET_SIMD)
+#define HAVE_uminv2si3 (TARGET_SIMD)
+#define HAVE_smaxv4si3 (TARGET_SIMD)
+#define HAVE_sminv4si3 (TARGET_SIMD)
+#define HAVE_umaxv4si3 (TARGET_SIMD)
+#define HAVE_uminv4si3 (TARGET_SIMD)
+#define HAVE_aarch64_umaxpv8qi (TARGET_SIMD)
+#define HAVE_aarch64_uminpv8qi (TARGET_SIMD)
+#define HAVE_aarch64_smaxpv8qi (TARGET_SIMD)
+#define HAVE_aarch64_sminpv8qi (TARGET_SIMD)
+#define HAVE_aarch64_umaxpv16qi (TARGET_SIMD)
+#define HAVE_aarch64_uminpv16qi (TARGET_SIMD)
+#define HAVE_aarch64_smaxpv16qi (TARGET_SIMD)
+#define HAVE_aarch64_sminpv16qi (TARGET_SIMD)
+#define HAVE_aarch64_umaxpv4hi (TARGET_SIMD)
+#define HAVE_aarch64_uminpv4hi (TARGET_SIMD)
+#define HAVE_aarch64_smaxpv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sminpv4hi (TARGET_SIMD)
+#define HAVE_aarch64_umaxpv8hi (TARGET_SIMD)
+#define HAVE_aarch64_uminpv8hi (TARGET_SIMD)
+#define HAVE_aarch64_smaxpv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sminpv8hi (TARGET_SIMD)
+#define HAVE_aarch64_umaxpv2si (TARGET_SIMD)
+#define HAVE_aarch64_uminpv2si (TARGET_SIMD)
+#define HAVE_aarch64_smaxpv2si (TARGET_SIMD)
+#define HAVE_aarch64_sminpv2si (TARGET_SIMD)
+#define HAVE_aarch64_umaxpv4si (TARGET_SIMD)
+#define HAVE_aarch64_uminpv4si (TARGET_SIMD)
+#define HAVE_aarch64_smaxpv4si (TARGET_SIMD)
+#define HAVE_aarch64_sminpv4si (TARGET_SIMD)
+#define HAVE_aarch64_smax_nanpv4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_smin_nanpv4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_smaxpv4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_sminpv4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_smax_nanpv8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_smin_nanpv8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_smaxpv8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_sminpv8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_smax_nanpv2sf (TARGET_SIMD)
+#define HAVE_aarch64_smin_nanpv2sf (TARGET_SIMD)
+#define HAVE_aarch64_smaxpv2sf (TARGET_SIMD)
+#define HAVE_aarch64_sminpv2sf (TARGET_SIMD)
+#define HAVE_aarch64_smax_nanpv4sf (TARGET_SIMD)
+#define HAVE_aarch64_smin_nanpv4sf (TARGET_SIMD)
+#define HAVE_aarch64_smaxpv4sf (TARGET_SIMD)
+#define HAVE_aarch64_sminpv4sf (TARGET_SIMD)
+#define HAVE_aarch64_smax_nanpv2df (TARGET_SIMD)
+#define HAVE_aarch64_smin_nanpv2df (TARGET_SIMD)
+#define HAVE_aarch64_smaxpv2df (TARGET_SIMD)
+#define HAVE_aarch64_sminpv2df (TARGET_SIMD)
+#define HAVE_move_lo_quad_internal_v16qi (TARGET_SIMD && !BYTES_BIG_ENDIAN)
+#define HAVE_move_lo_quad_internal_v8hi (TARGET_SIMD && !BYTES_BIG_ENDIAN)
+#define HAVE_move_lo_quad_internal_v4si (TARGET_SIMD && !BYTES_BIG_ENDIAN)
+#define HAVE_move_lo_quad_internal_v8hf (TARGET_SIMD && !BYTES_BIG_ENDIAN)
+#define HAVE_move_lo_quad_internal_v4sf (TARGET_SIMD && !BYTES_BIG_ENDIAN)
+#define HAVE_move_lo_quad_internal_v2di (TARGET_SIMD && !BYTES_BIG_ENDIAN)
+#define HAVE_move_lo_quad_internal_v2df (TARGET_SIMD && !BYTES_BIG_ENDIAN)
+#define HAVE_move_lo_quad_internal_be_v16qi (TARGET_SIMD && BYTES_BIG_ENDIAN)
+#define HAVE_move_lo_quad_internal_be_v8hi (TARGET_SIMD && BYTES_BIG_ENDIAN)
+#define HAVE_move_lo_quad_internal_be_v4si (TARGET_SIMD && BYTES_BIG_ENDIAN)
+#define HAVE_move_lo_quad_internal_be_v8hf (TARGET_SIMD && BYTES_BIG_ENDIAN)
+#define HAVE_move_lo_quad_internal_be_v4sf (TARGET_SIMD && BYTES_BIG_ENDIAN)
+#define HAVE_move_lo_quad_internal_be_v2di (TARGET_SIMD && BYTES_BIG_ENDIAN)
+#define HAVE_move_lo_quad_internal_be_v2df (TARGET_SIMD && BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_simd_move_hi_quad_v16qi (TARGET_SIMD && !BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_simd_move_hi_quad_v8hi (TARGET_SIMD && !BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_simd_move_hi_quad_v4si (TARGET_SIMD && !BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_simd_move_hi_quad_v2di (TARGET_SIMD && !BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_simd_move_hi_quad_v8hf (TARGET_SIMD && !BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_simd_move_hi_quad_v4sf (TARGET_SIMD && !BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_simd_move_hi_quad_v2df (TARGET_SIMD && !BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_simd_move_hi_quad_be_v16qi (TARGET_SIMD && BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_simd_move_hi_quad_be_v8hi (TARGET_SIMD && BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_simd_move_hi_quad_be_v4si (TARGET_SIMD && BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_simd_move_hi_quad_be_v2di (TARGET_SIMD && BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_simd_move_hi_quad_be_v8hf (TARGET_SIMD && BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_simd_move_hi_quad_be_v4sf (TARGET_SIMD && BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_simd_move_hi_quad_be_v2df (TARGET_SIMD && BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_simd_vec_pack_trunc_v8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_pack_trunc_v4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_pack_trunc_v2di (TARGET_SIMD)
+#define HAVE_vec_pack_trunc_v8hi (TARGET_SIMD)
+#define HAVE_vec_pack_trunc_v4si (TARGET_SIMD)
+#define HAVE_vec_pack_trunc_v2di (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_unpacks_lo_v16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_unpacku_lo_v16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_unpacks_lo_v8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_unpacku_lo_v8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_unpacks_lo_v4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_unpacku_lo_v4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_unpacks_hi_v16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_unpacku_hi_v16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_unpacks_hi_v8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_unpacku_hi_v8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_unpacks_hi_v4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_unpacku_hi_v4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_smult_lo_v16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_umult_lo_v16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_smult_lo_v8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_umult_lo_v8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_smult_lo_v4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_umult_lo_v4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_smult_hi_v16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_umult_hi_v16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_smult_hi_v8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_umult_hi_v8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_smult_hi_v4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_umult_hi_v4si (TARGET_SIMD)
+#define HAVE_addv4hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_addv8hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_addv2sf3 (TARGET_SIMD)
+#define HAVE_addv4sf3 (TARGET_SIMD)
+#define HAVE_addv2df3 (TARGET_SIMD)
+#define HAVE_subv4hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_subv8hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_subv2sf3 (TARGET_SIMD)
+#define HAVE_subv4sf3 (TARGET_SIMD)
+#define HAVE_subv2df3 (TARGET_SIMD)
+#define HAVE_mulv4hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_mulv8hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_mulv2sf3 (TARGET_SIMD)
+#define HAVE_mulv4sf3 (TARGET_SIMD)
+#define HAVE_mulv2df3 (TARGET_SIMD)
+#define HAVE_negv4hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_negv8hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_negv2sf2 (TARGET_SIMD)
+#define HAVE_negv4sf2 (TARGET_SIMD)
+#define HAVE_negv2df2 (TARGET_SIMD)
+#define HAVE_absv4hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_absv8hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_absv2sf2 (TARGET_SIMD)
+#define HAVE_absv4sf2 (TARGET_SIMD)
+#define HAVE_absv2df2 (TARGET_SIMD)
+#define HAVE_fmav4hf4 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fmav8hf4 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fmav2sf4 (TARGET_SIMD)
+#define HAVE_fmav4sf4 (TARGET_SIMD)
+#define HAVE_fmav2df4 (TARGET_SIMD)
+#define HAVE_fnmav4hf4 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fnmav8hf4 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fnmav2sf4 (TARGET_SIMD)
+#define HAVE_fnmav4sf4 (TARGET_SIMD)
+#define HAVE_fnmav2df4 (TARGET_SIMD)
+#define HAVE_btruncv4hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_ceilv4hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_floorv4hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_frintnv4hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_nearbyintv4hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_rintv4hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_roundv4hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_btruncv8hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_ceilv8hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_floorv8hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_frintnv8hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_nearbyintv8hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_rintv8hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_roundv8hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_btruncv2sf2 (TARGET_SIMD)
+#define HAVE_ceilv2sf2 (TARGET_SIMD)
+#define HAVE_floorv2sf2 (TARGET_SIMD)
+#define HAVE_frintnv2sf2 (TARGET_SIMD)
+#define HAVE_nearbyintv2sf2 (TARGET_SIMD)
+#define HAVE_rintv2sf2 (TARGET_SIMD)
+#define HAVE_roundv2sf2 (TARGET_SIMD)
+#define HAVE_btruncv4sf2 (TARGET_SIMD)
+#define HAVE_ceilv4sf2 (TARGET_SIMD)
+#define HAVE_floorv4sf2 (TARGET_SIMD)
+#define HAVE_frintnv4sf2 (TARGET_SIMD)
+#define HAVE_nearbyintv4sf2 (TARGET_SIMD)
+#define HAVE_rintv4sf2 (TARGET_SIMD)
+#define HAVE_roundv4sf2 (TARGET_SIMD)
+#define HAVE_btruncv2df2 (TARGET_SIMD)
+#define HAVE_ceilv2df2 (TARGET_SIMD)
+#define HAVE_floorv2df2 (TARGET_SIMD)
+#define HAVE_frintnv2df2 (TARGET_SIMD)
+#define HAVE_nearbyintv2df2 (TARGET_SIMD)
+#define HAVE_rintv2df2 (TARGET_SIMD)
+#define HAVE_roundv2df2 (TARGET_SIMD)
+#define HAVE_lbtruncv4hfv4hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lceilv4hfv4hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lfloorv4hfv4hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lroundv4hfv4hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lfrintnv4hfv4hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lbtruncuv4hfv4hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lceiluv4hfv4hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lflooruv4hfv4hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lrounduv4hfv4hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lfrintnuv4hfv4hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lbtruncv8hfv8hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lceilv8hfv8hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lfloorv8hfv8hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lroundv8hfv8hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lfrintnv8hfv8hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lbtruncuv8hfv8hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lceiluv8hfv8hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lflooruv8hfv8hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lrounduv8hfv8hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lfrintnuv8hfv8hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_lbtruncv2sfv2si2 (TARGET_SIMD)
+#define HAVE_lceilv2sfv2si2 (TARGET_SIMD)
+#define HAVE_lfloorv2sfv2si2 (TARGET_SIMD)
+#define HAVE_lroundv2sfv2si2 (TARGET_SIMD)
+#define HAVE_lfrintnv2sfv2si2 (TARGET_SIMD)
+#define HAVE_lbtruncuv2sfv2si2 (TARGET_SIMD)
+#define HAVE_lceiluv2sfv2si2 (TARGET_SIMD)
+#define HAVE_lflooruv2sfv2si2 (TARGET_SIMD)
+#define HAVE_lrounduv2sfv2si2 (TARGET_SIMD)
+#define HAVE_lfrintnuv2sfv2si2 (TARGET_SIMD)
+#define HAVE_lbtruncv4sfv4si2 (TARGET_SIMD)
+#define HAVE_lceilv4sfv4si2 (TARGET_SIMD)
+#define HAVE_lfloorv4sfv4si2 (TARGET_SIMD)
+#define HAVE_lroundv4sfv4si2 (TARGET_SIMD)
+#define HAVE_lfrintnv4sfv4si2 (TARGET_SIMD)
+#define HAVE_lbtruncuv4sfv4si2 (TARGET_SIMD)
+#define HAVE_lceiluv4sfv4si2 (TARGET_SIMD)
+#define HAVE_lflooruv4sfv4si2 (TARGET_SIMD)
+#define HAVE_lrounduv4sfv4si2 (TARGET_SIMD)
+#define HAVE_lfrintnuv4sfv4si2 (TARGET_SIMD)
+#define HAVE_lbtruncv2dfv2di2 (TARGET_SIMD)
+#define HAVE_lceilv2dfv2di2 (TARGET_SIMD)
+#define HAVE_lfloorv2dfv2di2 (TARGET_SIMD)
+#define HAVE_lroundv2dfv2di2 (TARGET_SIMD)
+#define HAVE_lfrintnv2dfv2di2 (TARGET_SIMD)
+#define HAVE_lbtruncuv2dfv2di2 (TARGET_SIMD)
+#define HAVE_lceiluv2dfv2di2 (TARGET_SIMD)
+#define HAVE_lflooruv2dfv2di2 (TARGET_SIMD)
+#define HAVE_lrounduv2dfv2di2 (TARGET_SIMD)
+#define HAVE_lfrintnuv2dfv2di2 (TARGET_SIMD)
+#define HAVE_lbtrunchfhi2 (TARGET_SIMD_F16INST)
+#define HAVE_lceilhfhi2 (TARGET_SIMD_F16INST)
+#define HAVE_lfloorhfhi2 (TARGET_SIMD_F16INST)
+#define HAVE_lroundhfhi2 (TARGET_SIMD_F16INST)
+#define HAVE_lfrintnhfhi2 (TARGET_SIMD_F16INST)
+#define HAVE_lbtruncuhfhi2 (TARGET_SIMD_F16INST)
+#define HAVE_lceiluhfhi2 (TARGET_SIMD_F16INST)
+#define HAVE_lflooruhfhi2 (TARGET_SIMD_F16INST)
+#define HAVE_lrounduhfhi2 (TARGET_SIMD_F16INST)
+#define HAVE_lfrintnuhfhi2 (TARGET_SIMD_F16INST)
+#define HAVE_fix_trunchfhi2 (TARGET_SIMD_F16INST)
+#define HAVE_fixuns_trunchfhi2 (TARGET_SIMD_F16INST)
+#define HAVE_floathihf2 (TARGET_SIMD_F16INST)
+#define HAVE_floatunshihf2 (TARGET_SIMD_F16INST)
+#define HAVE_floatv4hiv4hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_floatunsv4hiv4hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_floatv8hiv8hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_floatunsv8hiv8hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_floatv2siv2sf2 (TARGET_SIMD)
+#define HAVE_floatunsv2siv2sf2 (TARGET_SIMD)
+#define HAVE_floatv4siv4sf2 (TARGET_SIMD)
+#define HAVE_floatunsv4siv4sf2 (TARGET_SIMD)
+#define HAVE_floatv2div2df2 (TARGET_SIMD)
+#define HAVE_floatunsv2div2df2 (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_unpacks_lo_v8hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_unpacks_lo_v4sf (TARGET_SIMD)
+#define HAVE_fcvtzsv4hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fcvtzuv4hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fcvtzsv8hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fcvtzuv8hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fcvtzsv2sf3 (TARGET_SIMD)
+#define HAVE_fcvtzuv2sf3 (TARGET_SIMD)
+#define HAVE_fcvtzsv4sf3 (TARGET_SIMD)
+#define HAVE_fcvtzuv4sf3 (TARGET_SIMD)
+#define HAVE_fcvtzsv2df3 (TARGET_SIMD)
+#define HAVE_fcvtzuv2df3 (TARGET_SIMD)
+#define HAVE_scvtfv4hi3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_ucvtfv4hi3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_scvtfv8hi3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_ucvtfv8hi3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_scvtfv2si3 (TARGET_SIMD)
+#define HAVE_ucvtfv2si3 (TARGET_SIMD)
+#define HAVE_scvtfv4si3 (TARGET_SIMD)
+#define HAVE_ucvtfv4si3 (TARGET_SIMD)
+#define HAVE_scvtfv2di3 (TARGET_SIMD)
+#define HAVE_ucvtfv2di3 (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_unpacks_hi_v8hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_vec_unpacks_hi_v4sf (TARGET_SIMD)
+#define HAVE_aarch64_float_extend_lo_v2df (TARGET_SIMD)
+#define HAVE_aarch64_float_extend_lo_v4sf (TARGET_SIMD)
+#define HAVE_aarch64_float_truncate_lo_v2sf (TARGET_SIMD)
+#define HAVE_aarch64_float_truncate_lo_v4hf (TARGET_SIMD)
+#define HAVE_aarch64_float_truncate_hi_v4sf_le (TARGET_SIMD && !BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_float_truncate_hi_v8hf_le (TARGET_SIMD && !BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_float_truncate_hi_v4sf_be (TARGET_SIMD && BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_float_truncate_hi_v8hf_be (TARGET_SIMD && BYTES_BIG_ENDIAN)
+#define HAVE_smaxv4hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_sminv4hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_smaxv8hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_sminv8hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_smaxv2sf3 (TARGET_SIMD)
+#define HAVE_sminv2sf3 (TARGET_SIMD)
+#define HAVE_smaxv4sf3 (TARGET_SIMD)
+#define HAVE_sminv4sf3 (TARGET_SIMD)
+#define HAVE_smaxv2df3 (TARGET_SIMD)
+#define HAVE_sminv2df3 (TARGET_SIMD)
+#define HAVE_smax_nanv4hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_smin_nanv4hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fmaxv4hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fminv4hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_smax_nanv8hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_smin_nanv8hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fmaxv8hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fminv8hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_smax_nanv2sf3 (TARGET_SIMD)
+#define HAVE_smin_nanv2sf3 (TARGET_SIMD)
+#define HAVE_fmaxv2sf3 (TARGET_SIMD)
+#define HAVE_fminv2sf3 (TARGET_SIMD)
+#define HAVE_smax_nanv4sf3 (TARGET_SIMD)
+#define HAVE_smin_nanv4sf3 (TARGET_SIMD)
+#define HAVE_fmaxv4sf3 (TARGET_SIMD)
+#define HAVE_fminv4sf3 (TARGET_SIMD)
+#define HAVE_smax_nanv2df3 (TARGET_SIMD)
+#define HAVE_smin_nanv2df3 (TARGET_SIMD)
+#define HAVE_fmaxv2df3 (TARGET_SIMD)
+#define HAVE_fminv2df3 (TARGET_SIMD)
+#define HAVE_aarch64_faddpv4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_faddpv8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_faddpv2sf (TARGET_SIMD)
+#define HAVE_aarch64_faddpv4sf (TARGET_SIMD)
+#define HAVE_aarch64_faddpv2df (TARGET_SIMD)
+#define HAVE_aarch64_reduc_plus_internalv8qi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_plus_internalv16qi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_plus_internalv4hi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_plus_internalv8hi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_plus_internalv4si (TARGET_SIMD)
+#define HAVE_aarch64_reduc_plus_internalv2di (TARGET_SIMD)
+#define HAVE_aarch64_reduc_plus_internalv2si (TARGET_SIMD)
+#define HAVE_reduc_plus_scal_v2sf (TARGET_SIMD)
+#define HAVE_reduc_plus_scal_v2df (TARGET_SIMD)
+#define HAVE_clrsbv8qi2 (TARGET_SIMD)
+#define HAVE_clrsbv16qi2 (TARGET_SIMD)
+#define HAVE_clrsbv4hi2 (TARGET_SIMD)
+#define HAVE_clrsbv8hi2 (TARGET_SIMD)
+#define HAVE_clrsbv2si2 (TARGET_SIMD)
+#define HAVE_clrsbv4si2 (TARGET_SIMD)
+#define HAVE_clzv8qi2 (TARGET_SIMD)
+#define HAVE_clzv16qi2 (TARGET_SIMD)
+#define HAVE_clzv4hi2 (TARGET_SIMD)
+#define HAVE_clzv8hi2 (TARGET_SIMD)
+#define HAVE_clzv2si2 (TARGET_SIMD)
+#define HAVE_clzv4si2 (TARGET_SIMD)
+#define HAVE_popcountv8qi2 (TARGET_SIMD)
+#define HAVE_popcountv16qi2 (TARGET_SIMD)
+#define HAVE_aarch64_reduc_umax_internalv8qi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_umin_internalv8qi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smax_internalv8qi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smin_internalv8qi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_umax_internalv16qi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_umin_internalv16qi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smax_internalv16qi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smin_internalv16qi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_umax_internalv4hi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_umin_internalv4hi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smax_internalv4hi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smin_internalv4hi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_umax_internalv8hi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_umin_internalv8hi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smax_internalv8hi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smin_internalv8hi (TARGET_SIMD)
+#define HAVE_aarch64_reduc_umax_internalv4si (TARGET_SIMD)
+#define HAVE_aarch64_reduc_umin_internalv4si (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smax_internalv4si (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smin_internalv4si (TARGET_SIMD)
+#define HAVE_aarch64_reduc_umax_internalv2si (TARGET_SIMD)
+#define HAVE_aarch64_reduc_umin_internalv2si (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smax_internalv2si (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smin_internalv2si (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smax_nan_internalv4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_reduc_smin_nan_internalv4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_reduc_smax_internalv4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_reduc_smin_internalv4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_reduc_smax_nan_internalv8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_reduc_smin_nan_internalv8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_reduc_smax_internalv8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_reduc_smin_internalv8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_reduc_smax_nan_internalv2sf (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smin_nan_internalv2sf (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smax_internalv2sf (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smin_internalv2sf (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smax_nan_internalv4sf (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smin_nan_internalv4sf (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smax_internalv4sf (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smin_internalv4sf (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smax_nan_internalv2df (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smin_nan_internalv2df (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smax_internalv2df (TARGET_SIMD)
+#define HAVE_aarch64_reduc_smin_internalv2df (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv8qi_internal (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv16qi_internal (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv4hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv2si_internal (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv2di_internal (TARGET_SIMD)
+#define HAVE_aarch64_simd_bsldi_internal (TARGET_SIMD)
+#define HAVE_aarch64_simd_bsldi_alt (TARGET_SIMD)
+#define HAVE_aarch64_get_lanev8qi (TARGET_SIMD)
+#define HAVE_aarch64_get_lanev16qi (TARGET_SIMD)
+#define HAVE_aarch64_get_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_get_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_get_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_get_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_get_lanev2di (TARGET_SIMD)
+#define HAVE_aarch64_get_lanev4hf (TARGET_SIMD)
+#define HAVE_aarch64_get_lanev8hf (TARGET_SIMD)
+#define HAVE_aarch64_get_lanev2sf (TARGET_SIMD)
+#define HAVE_aarch64_get_lanev4sf (TARGET_SIMD)
+#define HAVE_aarch64_get_lanev2df (TARGET_SIMD)
+#define HAVE_load_pair_lanesv8qi (TARGET_SIMD && !STRICT_ALIGNMENT \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V8QImode))))
+#define HAVE_load_pair_lanesv4hi (TARGET_SIMD && !STRICT_ALIGNMENT \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V4HImode))))
+#define HAVE_load_pair_lanesv4hf (TARGET_SIMD && !STRICT_ALIGNMENT \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V4HFmode))))
+#define HAVE_load_pair_lanesv2si (TARGET_SIMD && !STRICT_ALIGNMENT \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V2SImode))))
+#define HAVE_load_pair_lanesv2sf (TARGET_SIMD && !STRICT_ALIGNMENT \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (V2SFmode))))
+#define HAVE_load_pair_lanesdi (TARGET_SIMD && !STRICT_ALIGNMENT \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (DImode))))
+#define HAVE_load_pair_lanesdf (TARGET_SIMD && !STRICT_ALIGNMENT \
+   && rtx_equal_p (XEXP (operands[2], 0), \
+		   plus_constant (Pmode, \
+				  XEXP (operands[1], 0), \
+				  GET_MODE_SIZE (DFmode))))
+#define HAVE_store_pair_lanesv8qi (TARGET_SIMD)
+#define HAVE_store_pair_lanesv4hi (TARGET_SIMD)
+#define HAVE_store_pair_lanesv4hf (TARGET_SIMD)
+#define HAVE_store_pair_lanesv2si (TARGET_SIMD)
+#define HAVE_store_pair_lanesv2sf (TARGET_SIMD)
+#define HAVE_store_pair_lanesdi (TARGET_SIMD)
+#define HAVE_store_pair_lanesdf (TARGET_SIMD)
+#define HAVE_aarch64_saddlv16qi_hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_ssublv16qi_hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_uaddlv16qi_hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_usublv16qi_hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_saddlv8hi_hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_ssublv8hi_hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_uaddlv8hi_hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_usublv8hi_hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_saddlv4si_hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_ssublv4si_hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_uaddlv4si_hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_usublv4si_hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_saddlv16qi_lo_internal (TARGET_SIMD)
+#define HAVE_aarch64_ssublv16qi_lo_internal (TARGET_SIMD)
+#define HAVE_aarch64_uaddlv16qi_lo_internal (TARGET_SIMD)
+#define HAVE_aarch64_usublv16qi_lo_internal (TARGET_SIMD)
+#define HAVE_aarch64_saddlv8hi_lo_internal (TARGET_SIMD)
+#define HAVE_aarch64_ssublv8hi_lo_internal (TARGET_SIMD)
+#define HAVE_aarch64_uaddlv8hi_lo_internal (TARGET_SIMD)
+#define HAVE_aarch64_usublv8hi_lo_internal (TARGET_SIMD)
+#define HAVE_aarch64_saddlv4si_lo_internal (TARGET_SIMD)
+#define HAVE_aarch64_ssublv4si_lo_internal (TARGET_SIMD)
+#define HAVE_aarch64_uaddlv4si_lo_internal (TARGET_SIMD)
+#define HAVE_aarch64_usublv4si_lo_internal (TARGET_SIMD)
+#define HAVE_aarch64_saddlv8qi (TARGET_SIMD)
+#define HAVE_aarch64_ssublv8qi (TARGET_SIMD)
+#define HAVE_aarch64_uaddlv8qi (TARGET_SIMD)
+#define HAVE_aarch64_usublv8qi (TARGET_SIMD)
+#define HAVE_aarch64_saddlv4hi (TARGET_SIMD)
+#define HAVE_aarch64_ssublv4hi (TARGET_SIMD)
+#define HAVE_aarch64_uaddlv4hi (TARGET_SIMD)
+#define HAVE_aarch64_usublv4hi (TARGET_SIMD)
+#define HAVE_aarch64_saddlv2si (TARGET_SIMD)
+#define HAVE_aarch64_ssublv2si (TARGET_SIMD)
+#define HAVE_aarch64_uaddlv2si (TARGET_SIMD)
+#define HAVE_aarch64_usublv2si (TARGET_SIMD)
+#define HAVE_aarch64_ssubwv8qi (TARGET_SIMD)
+#define HAVE_aarch64_usubwv8qi (TARGET_SIMD)
+#define HAVE_aarch64_ssubwv4hi (TARGET_SIMD)
+#define HAVE_aarch64_usubwv4hi (TARGET_SIMD)
+#define HAVE_aarch64_ssubwv2si (TARGET_SIMD)
+#define HAVE_aarch64_usubwv2si (TARGET_SIMD)
+#define HAVE_aarch64_ssubwv16qi_internal (TARGET_SIMD)
+#define HAVE_aarch64_usubwv16qi_internal (TARGET_SIMD)
+#define HAVE_aarch64_ssubwv8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_usubwv8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_ssubwv4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_usubwv4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_ssubw2v16qi_internal (TARGET_SIMD)
+#define HAVE_aarch64_usubw2v16qi_internal (TARGET_SIMD)
+#define HAVE_aarch64_ssubw2v8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_usubw2v8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_ssubw2v4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_usubw2v4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_saddwv8qi (TARGET_SIMD)
+#define HAVE_aarch64_uaddwv8qi (TARGET_SIMD)
+#define HAVE_aarch64_saddwv4hi (TARGET_SIMD)
+#define HAVE_aarch64_uaddwv4hi (TARGET_SIMD)
+#define HAVE_aarch64_saddwv2si (TARGET_SIMD)
+#define HAVE_aarch64_uaddwv2si (TARGET_SIMD)
+#define HAVE_aarch64_saddwv16qi_internal (TARGET_SIMD)
+#define HAVE_aarch64_uaddwv16qi_internal (TARGET_SIMD)
+#define HAVE_aarch64_saddwv8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_uaddwv8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_saddwv4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_uaddwv4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_saddw2v16qi_internal (TARGET_SIMD)
+#define HAVE_aarch64_uaddw2v16qi_internal (TARGET_SIMD)
+#define HAVE_aarch64_saddw2v8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_uaddw2v8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_saddw2v4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_uaddw2v4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_shaddv8qi (TARGET_SIMD)
+#define HAVE_aarch64_uhaddv8qi (TARGET_SIMD)
+#define HAVE_aarch64_srhaddv8qi (TARGET_SIMD)
+#define HAVE_aarch64_urhaddv8qi (TARGET_SIMD)
+#define HAVE_aarch64_shsubv8qi (TARGET_SIMD)
+#define HAVE_aarch64_uhsubv8qi (TARGET_SIMD)
+#define HAVE_aarch64_srhsubv8qi (TARGET_SIMD)
+#define HAVE_aarch64_urhsubv8qi (TARGET_SIMD)
+#define HAVE_aarch64_shaddv16qi (TARGET_SIMD)
+#define HAVE_aarch64_uhaddv16qi (TARGET_SIMD)
+#define HAVE_aarch64_srhaddv16qi (TARGET_SIMD)
+#define HAVE_aarch64_urhaddv16qi (TARGET_SIMD)
+#define HAVE_aarch64_shsubv16qi (TARGET_SIMD)
+#define HAVE_aarch64_uhsubv16qi (TARGET_SIMD)
+#define HAVE_aarch64_srhsubv16qi (TARGET_SIMD)
+#define HAVE_aarch64_urhsubv16qi (TARGET_SIMD)
+#define HAVE_aarch64_shaddv4hi (TARGET_SIMD)
+#define HAVE_aarch64_uhaddv4hi (TARGET_SIMD)
+#define HAVE_aarch64_srhaddv4hi (TARGET_SIMD)
+#define HAVE_aarch64_urhaddv4hi (TARGET_SIMD)
+#define HAVE_aarch64_shsubv4hi (TARGET_SIMD)
+#define HAVE_aarch64_uhsubv4hi (TARGET_SIMD)
+#define HAVE_aarch64_srhsubv4hi (TARGET_SIMD)
+#define HAVE_aarch64_urhsubv4hi (TARGET_SIMD)
+#define HAVE_aarch64_shaddv8hi (TARGET_SIMD)
+#define HAVE_aarch64_uhaddv8hi (TARGET_SIMD)
+#define HAVE_aarch64_srhaddv8hi (TARGET_SIMD)
+#define HAVE_aarch64_urhaddv8hi (TARGET_SIMD)
+#define HAVE_aarch64_shsubv8hi (TARGET_SIMD)
+#define HAVE_aarch64_uhsubv8hi (TARGET_SIMD)
+#define HAVE_aarch64_srhsubv8hi (TARGET_SIMD)
+#define HAVE_aarch64_urhsubv8hi (TARGET_SIMD)
+#define HAVE_aarch64_shaddv2si (TARGET_SIMD)
+#define HAVE_aarch64_uhaddv2si (TARGET_SIMD)
+#define HAVE_aarch64_srhaddv2si (TARGET_SIMD)
+#define HAVE_aarch64_urhaddv2si (TARGET_SIMD)
+#define HAVE_aarch64_shsubv2si (TARGET_SIMD)
+#define HAVE_aarch64_uhsubv2si (TARGET_SIMD)
+#define HAVE_aarch64_srhsubv2si (TARGET_SIMD)
+#define HAVE_aarch64_urhsubv2si (TARGET_SIMD)
+#define HAVE_aarch64_shaddv4si (TARGET_SIMD)
+#define HAVE_aarch64_uhaddv4si (TARGET_SIMD)
+#define HAVE_aarch64_srhaddv4si (TARGET_SIMD)
+#define HAVE_aarch64_urhaddv4si (TARGET_SIMD)
+#define HAVE_aarch64_shsubv4si (TARGET_SIMD)
+#define HAVE_aarch64_uhsubv4si (TARGET_SIMD)
+#define HAVE_aarch64_srhsubv4si (TARGET_SIMD)
+#define HAVE_aarch64_urhsubv4si (TARGET_SIMD)
+#define HAVE_aarch64_addhnv8hi (TARGET_SIMD)
+#define HAVE_aarch64_raddhnv8hi (TARGET_SIMD)
+#define HAVE_aarch64_subhnv8hi (TARGET_SIMD)
+#define HAVE_aarch64_rsubhnv8hi (TARGET_SIMD)
+#define HAVE_aarch64_addhnv4si (TARGET_SIMD)
+#define HAVE_aarch64_raddhnv4si (TARGET_SIMD)
+#define HAVE_aarch64_subhnv4si (TARGET_SIMD)
+#define HAVE_aarch64_rsubhnv4si (TARGET_SIMD)
+#define HAVE_aarch64_addhnv2di (TARGET_SIMD)
+#define HAVE_aarch64_raddhnv2di (TARGET_SIMD)
+#define HAVE_aarch64_subhnv2di (TARGET_SIMD)
+#define HAVE_aarch64_rsubhnv2di (TARGET_SIMD)
+#define HAVE_aarch64_addhn2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_raddhn2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_subhn2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_rsubhn2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_addhn2v4si (TARGET_SIMD)
+#define HAVE_aarch64_raddhn2v4si (TARGET_SIMD)
+#define HAVE_aarch64_subhn2v4si (TARGET_SIMD)
+#define HAVE_aarch64_rsubhn2v4si (TARGET_SIMD)
+#define HAVE_aarch64_addhn2v2di (TARGET_SIMD)
+#define HAVE_aarch64_raddhn2v2di (TARGET_SIMD)
+#define HAVE_aarch64_subhn2v2di (TARGET_SIMD)
+#define HAVE_aarch64_rsubhn2v2di (TARGET_SIMD)
+#define HAVE_aarch64_pmulv8qi (TARGET_SIMD)
+#define HAVE_aarch64_pmulv16qi (TARGET_SIMD)
+#define HAVE_aarch64_fmulxv4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fmulxv8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fmulxv2sf (TARGET_SIMD)
+#define HAVE_aarch64_fmulxv4sf (TARGET_SIMD)
+#define HAVE_aarch64_fmulxv2df (TARGET_SIMD)
+#define HAVE_aarch64_fmulxhf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_fmulxsf (TARGET_SIMD)
+#define HAVE_aarch64_fmulxdf (TARGET_SIMD)
+#define HAVE_aarch64_sqaddv8qi (TARGET_SIMD)
+#define HAVE_aarch64_uqaddv8qi (TARGET_SIMD)
+#define HAVE_aarch64_sqsubv8qi (TARGET_SIMD)
+#define HAVE_aarch64_uqsubv8qi (TARGET_SIMD)
+#define HAVE_aarch64_sqaddv16qi (TARGET_SIMD)
+#define HAVE_aarch64_uqaddv16qi (TARGET_SIMD)
+#define HAVE_aarch64_sqsubv16qi (TARGET_SIMD)
+#define HAVE_aarch64_uqsubv16qi (TARGET_SIMD)
+#define HAVE_aarch64_sqaddv4hi (TARGET_SIMD)
+#define HAVE_aarch64_uqaddv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqsubv4hi (TARGET_SIMD)
+#define HAVE_aarch64_uqsubv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqaddv8hi (TARGET_SIMD)
+#define HAVE_aarch64_uqaddv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqsubv8hi (TARGET_SIMD)
+#define HAVE_aarch64_uqsubv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqaddv2si (TARGET_SIMD)
+#define HAVE_aarch64_uqaddv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqsubv2si (TARGET_SIMD)
+#define HAVE_aarch64_uqsubv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqaddv4si (TARGET_SIMD)
+#define HAVE_aarch64_uqaddv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqsubv4si (TARGET_SIMD)
+#define HAVE_aarch64_uqsubv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqaddv2di (TARGET_SIMD)
+#define HAVE_aarch64_uqaddv2di (TARGET_SIMD)
+#define HAVE_aarch64_sqsubv2di (TARGET_SIMD)
+#define HAVE_aarch64_uqsubv2di (TARGET_SIMD)
+#define HAVE_aarch64_sqaddqi (TARGET_SIMD)
+#define HAVE_aarch64_uqaddqi (TARGET_SIMD)
+#define HAVE_aarch64_sqsubqi (TARGET_SIMD)
+#define HAVE_aarch64_uqsubqi (TARGET_SIMD)
+#define HAVE_aarch64_sqaddhi (TARGET_SIMD)
+#define HAVE_aarch64_uqaddhi (TARGET_SIMD)
+#define HAVE_aarch64_sqsubhi (TARGET_SIMD)
+#define HAVE_aarch64_uqsubhi (TARGET_SIMD)
+#define HAVE_aarch64_sqaddsi (TARGET_SIMD)
+#define HAVE_aarch64_uqaddsi (TARGET_SIMD)
+#define HAVE_aarch64_sqsubsi (TARGET_SIMD)
+#define HAVE_aarch64_uqsubsi (TARGET_SIMD)
+#define HAVE_aarch64_sqadddi (TARGET_SIMD)
+#define HAVE_aarch64_uqadddi (TARGET_SIMD)
+#define HAVE_aarch64_sqsubdi (TARGET_SIMD)
+#define HAVE_aarch64_uqsubdi (TARGET_SIMD)
+#define HAVE_aarch64_suqaddv8qi (TARGET_SIMD)
+#define HAVE_aarch64_usqaddv8qi (TARGET_SIMD)
+#define HAVE_aarch64_suqaddv16qi (TARGET_SIMD)
+#define HAVE_aarch64_usqaddv16qi (TARGET_SIMD)
+#define HAVE_aarch64_suqaddv4hi (TARGET_SIMD)
+#define HAVE_aarch64_usqaddv4hi (TARGET_SIMD)
+#define HAVE_aarch64_suqaddv8hi (TARGET_SIMD)
+#define HAVE_aarch64_usqaddv8hi (TARGET_SIMD)
+#define HAVE_aarch64_suqaddv2si (TARGET_SIMD)
+#define HAVE_aarch64_usqaddv2si (TARGET_SIMD)
+#define HAVE_aarch64_suqaddv4si (TARGET_SIMD)
+#define HAVE_aarch64_usqaddv4si (TARGET_SIMD)
+#define HAVE_aarch64_suqaddv2di (TARGET_SIMD)
+#define HAVE_aarch64_usqaddv2di (TARGET_SIMD)
+#define HAVE_aarch64_suqaddqi (TARGET_SIMD)
+#define HAVE_aarch64_usqaddqi (TARGET_SIMD)
+#define HAVE_aarch64_suqaddhi (TARGET_SIMD)
+#define HAVE_aarch64_usqaddhi (TARGET_SIMD)
+#define HAVE_aarch64_suqaddsi (TARGET_SIMD)
+#define HAVE_aarch64_usqaddsi (TARGET_SIMD)
+#define HAVE_aarch64_suqadddi (TARGET_SIMD)
+#define HAVE_aarch64_usqadddi (TARGET_SIMD)
+#define HAVE_aarch64_sqmovunv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqmovunv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqmovunv2di (TARGET_SIMD)
+#define HAVE_aarch64_sqmovunhi (TARGET_SIMD)
+#define HAVE_aarch64_sqmovunsi (TARGET_SIMD)
+#define HAVE_aarch64_sqmovundi (TARGET_SIMD)
+#define HAVE_aarch64_sqmovnv8hi (TARGET_SIMD)
+#define HAVE_aarch64_uqmovnv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqmovnv4si (TARGET_SIMD)
+#define HAVE_aarch64_uqmovnv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqmovnv2di (TARGET_SIMD)
+#define HAVE_aarch64_uqmovnv2di (TARGET_SIMD)
+#define HAVE_aarch64_sqmovnhi (TARGET_SIMD)
+#define HAVE_aarch64_uqmovnhi (TARGET_SIMD)
+#define HAVE_aarch64_sqmovnsi (TARGET_SIMD)
+#define HAVE_aarch64_uqmovnsi (TARGET_SIMD)
+#define HAVE_aarch64_sqmovndi (TARGET_SIMD)
+#define HAVE_aarch64_uqmovndi (TARGET_SIMD)
+#define HAVE_aarch64_sqnegv8qi (TARGET_SIMD)
+#define HAVE_aarch64_sqabsv8qi (TARGET_SIMD)
+#define HAVE_aarch64_sqnegv16qi (TARGET_SIMD)
+#define HAVE_aarch64_sqabsv16qi (TARGET_SIMD)
+#define HAVE_aarch64_sqnegv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqabsv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqnegv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqabsv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqnegv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqabsv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqnegv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqabsv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqnegv2di (TARGET_SIMD)
+#define HAVE_aarch64_sqabsv2di (TARGET_SIMD)
+#define HAVE_aarch64_sqnegqi (TARGET_SIMD)
+#define HAVE_aarch64_sqabsqi (TARGET_SIMD)
+#define HAVE_aarch64_sqneghi (TARGET_SIMD)
+#define HAVE_aarch64_sqabshi (TARGET_SIMD)
+#define HAVE_aarch64_sqnegsi (TARGET_SIMD)
+#define HAVE_aarch64_sqabssi (TARGET_SIMD)
+#define HAVE_aarch64_sqnegdi (TARGET_SIMD)
+#define HAVE_aarch64_sqabsdi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulhv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulhv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulhv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulhv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulhv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulhv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulhv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulhv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulhhi (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulhhi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulhsi (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulhsi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulh_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulh_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulh_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulh_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulh_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulh_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulh_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulh_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulh_laneqv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulh_laneqv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulh_laneqv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulh_laneqv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulh_laneqv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulh_laneqv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulh_laneqv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulh_laneqv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulh_lanehi (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulh_lanehi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulh_lanesi (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulh_lanesi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulh_laneqhi (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulh_laneqhi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmulh_laneqsi (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmulh_laneqsi (TARGET_SIMD)
+#define HAVE_aarch64_sqrdmlahv4hi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlshv4hi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlahv8hi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlshv8hi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlahv2si (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlshv2si (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlahv4si (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlshv4si (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlahhi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlshhi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlahsi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlshsi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlah_lanev4hi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlsh_lanev4hi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlah_lanev8hi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlsh_lanev8hi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlah_lanev2si (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlsh_lanev2si (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlah_lanev4si (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlsh_lanev4si (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlah_lanehi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlsh_lanehi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlah_lanesi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlsh_lanesi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlah_laneqv4hi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlsh_laneqv4hi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlah_laneqv8hi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlsh_laneqv8hi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlah_laneqv2si (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlsh_laneqv2si (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlah_laneqv4si (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlsh_laneqv4si (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlah_laneqhi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlsh_laneqhi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlah_laneqsi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqrdmlsh_laneqsi (TARGET_SIMD_RDMA)
+#define HAVE_aarch64_sqdmlalv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlslv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlalv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlslv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlalhi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlslhi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlalsi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlslsi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal_laneqv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl_laneqv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal_laneqv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl_laneqv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal_lanehi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl_lanehi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal_lanesi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl_lanesi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal_laneqhi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl_laneqhi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal_laneqsi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl_laneqsi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal2v8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl2v8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal2v4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl2v4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal2_lanev8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl2_lanev8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal2_lanev4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl2_lanev4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal2_laneqv8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl2_laneqv8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal2_laneqv4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl2_laneqv4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal2_nv8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl2_nv8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal2_nv4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl2_nv4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmullv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmullv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmullhi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmullsi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull_laneqv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull_laneqv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull_lanehi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull_lanesi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull_laneqhi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull_laneqsi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull2v8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull2v4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull2_lanev8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull2_lanev4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull2_laneqv8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull2_laneqv4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull2_nv8hi_internal (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull2_nv4si_internal (TARGET_SIMD)
+#define HAVE_aarch64_sshlv8qi (TARGET_SIMD)
+#define HAVE_aarch64_ushlv8qi (TARGET_SIMD)
+#define HAVE_aarch64_srshlv8qi (TARGET_SIMD)
+#define HAVE_aarch64_urshlv8qi (TARGET_SIMD)
+#define HAVE_aarch64_sshlv16qi (TARGET_SIMD)
+#define HAVE_aarch64_ushlv16qi (TARGET_SIMD)
+#define HAVE_aarch64_srshlv16qi (TARGET_SIMD)
+#define HAVE_aarch64_urshlv16qi (TARGET_SIMD)
+#define HAVE_aarch64_sshlv4hi (TARGET_SIMD)
+#define HAVE_aarch64_ushlv4hi (TARGET_SIMD)
+#define HAVE_aarch64_srshlv4hi (TARGET_SIMD)
+#define HAVE_aarch64_urshlv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sshlv8hi (TARGET_SIMD)
+#define HAVE_aarch64_ushlv8hi (TARGET_SIMD)
+#define HAVE_aarch64_srshlv8hi (TARGET_SIMD)
+#define HAVE_aarch64_urshlv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sshlv2si (TARGET_SIMD)
+#define HAVE_aarch64_ushlv2si (TARGET_SIMD)
+#define HAVE_aarch64_srshlv2si (TARGET_SIMD)
+#define HAVE_aarch64_urshlv2si (TARGET_SIMD)
+#define HAVE_aarch64_sshlv4si (TARGET_SIMD)
+#define HAVE_aarch64_ushlv4si (TARGET_SIMD)
+#define HAVE_aarch64_srshlv4si (TARGET_SIMD)
+#define HAVE_aarch64_urshlv4si (TARGET_SIMD)
+#define HAVE_aarch64_sshlv2di (TARGET_SIMD)
+#define HAVE_aarch64_ushlv2di (TARGET_SIMD)
+#define HAVE_aarch64_srshlv2di (TARGET_SIMD)
+#define HAVE_aarch64_urshlv2di (TARGET_SIMD)
+#define HAVE_aarch64_sshldi (TARGET_SIMD)
+#define HAVE_aarch64_ushldi (TARGET_SIMD)
+#define HAVE_aarch64_srshldi (TARGET_SIMD)
+#define HAVE_aarch64_urshldi (TARGET_SIMD)
+#define HAVE_aarch64_sqshlv8qi (TARGET_SIMD)
+#define HAVE_aarch64_uqshlv8qi (TARGET_SIMD)
+#define HAVE_aarch64_sqrshlv8qi (TARGET_SIMD)
+#define HAVE_aarch64_uqrshlv8qi (TARGET_SIMD)
+#define HAVE_aarch64_sqshlv16qi (TARGET_SIMD)
+#define HAVE_aarch64_uqshlv16qi (TARGET_SIMD)
+#define HAVE_aarch64_sqrshlv16qi (TARGET_SIMD)
+#define HAVE_aarch64_uqrshlv16qi (TARGET_SIMD)
+#define HAVE_aarch64_sqshlv4hi (TARGET_SIMD)
+#define HAVE_aarch64_uqshlv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqrshlv4hi (TARGET_SIMD)
+#define HAVE_aarch64_uqrshlv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqshlv8hi (TARGET_SIMD)
+#define HAVE_aarch64_uqshlv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqrshlv8hi (TARGET_SIMD)
+#define HAVE_aarch64_uqrshlv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqshlv2si (TARGET_SIMD)
+#define HAVE_aarch64_uqshlv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqrshlv2si (TARGET_SIMD)
+#define HAVE_aarch64_uqrshlv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqshlv4si (TARGET_SIMD)
+#define HAVE_aarch64_uqshlv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqrshlv4si (TARGET_SIMD)
+#define HAVE_aarch64_uqrshlv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqshlv2di (TARGET_SIMD)
+#define HAVE_aarch64_uqshlv2di (TARGET_SIMD)
+#define HAVE_aarch64_sqrshlv2di (TARGET_SIMD)
+#define HAVE_aarch64_uqrshlv2di (TARGET_SIMD)
+#define HAVE_aarch64_sqshlqi (TARGET_SIMD)
+#define HAVE_aarch64_uqshlqi (TARGET_SIMD)
+#define HAVE_aarch64_sqrshlqi (TARGET_SIMD)
+#define HAVE_aarch64_uqrshlqi (TARGET_SIMD)
+#define HAVE_aarch64_sqshlhi (TARGET_SIMD)
+#define HAVE_aarch64_uqshlhi (TARGET_SIMD)
+#define HAVE_aarch64_sqrshlhi (TARGET_SIMD)
+#define HAVE_aarch64_uqrshlhi (TARGET_SIMD)
+#define HAVE_aarch64_sqshlsi (TARGET_SIMD)
+#define HAVE_aarch64_uqshlsi (TARGET_SIMD)
+#define HAVE_aarch64_sqrshlsi (TARGET_SIMD)
+#define HAVE_aarch64_uqrshlsi (TARGET_SIMD)
+#define HAVE_aarch64_sqshldi (TARGET_SIMD)
+#define HAVE_aarch64_uqshldi (TARGET_SIMD)
+#define HAVE_aarch64_sqrshldi (TARGET_SIMD)
+#define HAVE_aarch64_uqrshldi (TARGET_SIMD)
+#define HAVE_aarch64_sshll_nv8qi (TARGET_SIMD)
+#define HAVE_aarch64_ushll_nv8qi (TARGET_SIMD)
+#define HAVE_aarch64_sshll_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_ushll_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sshll_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_ushll_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_sshll2_nv16qi (TARGET_SIMD)
+#define HAVE_aarch64_ushll2_nv16qi (TARGET_SIMD)
+#define HAVE_aarch64_sshll2_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_ushll2_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sshll2_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_ushll2_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_srshr_nv8qi (TARGET_SIMD)
+#define HAVE_aarch64_urshr_nv8qi (TARGET_SIMD)
+#define HAVE_aarch64_srshr_nv16qi (TARGET_SIMD)
+#define HAVE_aarch64_urshr_nv16qi (TARGET_SIMD)
+#define HAVE_aarch64_srshr_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_urshr_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_srshr_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_urshr_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_srshr_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_urshr_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_srshr_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_urshr_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_srshr_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_urshr_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_srshr_ndi (TARGET_SIMD)
+#define HAVE_aarch64_urshr_ndi (TARGET_SIMD)
+#define HAVE_aarch64_ssra_nv8qi (TARGET_SIMD)
+#define HAVE_aarch64_usra_nv8qi (TARGET_SIMD)
+#define HAVE_aarch64_srsra_nv8qi (TARGET_SIMD)
+#define HAVE_aarch64_ursra_nv8qi (TARGET_SIMD)
+#define HAVE_aarch64_ssra_nv16qi (TARGET_SIMD)
+#define HAVE_aarch64_usra_nv16qi (TARGET_SIMD)
+#define HAVE_aarch64_srsra_nv16qi (TARGET_SIMD)
+#define HAVE_aarch64_ursra_nv16qi (TARGET_SIMD)
+#define HAVE_aarch64_ssra_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_usra_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_srsra_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_ursra_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_ssra_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_usra_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_srsra_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_ursra_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_ssra_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_usra_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_srsra_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_ursra_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_ssra_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_usra_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_srsra_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_ursra_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_ssra_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_usra_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_srsra_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_ursra_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_ssra_ndi (TARGET_SIMD)
+#define HAVE_aarch64_usra_ndi (TARGET_SIMD)
+#define HAVE_aarch64_srsra_ndi (TARGET_SIMD)
+#define HAVE_aarch64_ursra_ndi (TARGET_SIMD)
+#define HAVE_aarch64_ssli_nv8qi (TARGET_SIMD)
+#define HAVE_aarch64_usli_nv8qi (TARGET_SIMD)
+#define HAVE_aarch64_ssri_nv8qi (TARGET_SIMD)
+#define HAVE_aarch64_usri_nv8qi (TARGET_SIMD)
+#define HAVE_aarch64_ssli_nv16qi (TARGET_SIMD)
+#define HAVE_aarch64_usli_nv16qi (TARGET_SIMD)
+#define HAVE_aarch64_ssri_nv16qi (TARGET_SIMD)
+#define HAVE_aarch64_usri_nv16qi (TARGET_SIMD)
+#define HAVE_aarch64_ssli_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_usli_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_ssri_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_usri_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_ssli_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_usli_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_ssri_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_usri_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_ssli_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_usli_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_ssri_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_usri_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_ssli_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_usli_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_ssri_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_usri_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_ssli_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_usli_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_ssri_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_usri_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_ssli_ndi (TARGET_SIMD)
+#define HAVE_aarch64_usli_ndi (TARGET_SIMD)
+#define HAVE_aarch64_ssri_ndi (TARGET_SIMD)
+#define HAVE_aarch64_usri_ndi (TARGET_SIMD)
+#define HAVE_aarch64_sqshlu_nv8qi (TARGET_SIMD)
+#define HAVE_aarch64_sqshl_nv8qi (TARGET_SIMD)
+#define HAVE_aarch64_uqshl_nv8qi (TARGET_SIMD)
+#define HAVE_aarch64_sqshlu_nv16qi (TARGET_SIMD)
+#define HAVE_aarch64_sqshl_nv16qi (TARGET_SIMD)
+#define HAVE_aarch64_uqshl_nv16qi (TARGET_SIMD)
+#define HAVE_aarch64_sqshlu_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqshl_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_uqshl_nv4hi (TARGET_SIMD)
+#define HAVE_aarch64_sqshlu_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqshl_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_uqshl_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqshlu_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqshl_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_uqshl_nv2si (TARGET_SIMD)
+#define HAVE_aarch64_sqshlu_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqshl_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_uqshl_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqshlu_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_sqshl_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_uqshl_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_sqshlu_nqi (TARGET_SIMD)
+#define HAVE_aarch64_sqshl_nqi (TARGET_SIMD)
+#define HAVE_aarch64_uqshl_nqi (TARGET_SIMD)
+#define HAVE_aarch64_sqshlu_nhi (TARGET_SIMD)
+#define HAVE_aarch64_sqshl_nhi (TARGET_SIMD)
+#define HAVE_aarch64_uqshl_nhi (TARGET_SIMD)
+#define HAVE_aarch64_sqshlu_nsi (TARGET_SIMD)
+#define HAVE_aarch64_sqshl_nsi (TARGET_SIMD)
+#define HAVE_aarch64_uqshl_nsi (TARGET_SIMD)
+#define HAVE_aarch64_sqshlu_ndi (TARGET_SIMD)
+#define HAVE_aarch64_sqshl_ndi (TARGET_SIMD)
+#define HAVE_aarch64_uqshl_ndi (TARGET_SIMD)
+#define HAVE_aarch64_sqshrun_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqrshrun_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqshrn_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_uqshrn_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqrshrn_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_uqrshrn_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqshrun_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqrshrun_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqshrn_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_uqshrn_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqrshrn_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_uqrshrn_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqshrun_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_sqrshrun_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_sqshrn_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_uqshrn_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_sqrshrn_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_uqrshrn_nv2di (TARGET_SIMD)
+#define HAVE_aarch64_sqshrun_nhi (TARGET_SIMD)
+#define HAVE_aarch64_sqrshrun_nhi (TARGET_SIMD)
+#define HAVE_aarch64_sqshrn_nhi (TARGET_SIMD)
+#define HAVE_aarch64_uqshrn_nhi (TARGET_SIMD)
+#define HAVE_aarch64_sqrshrn_nhi (TARGET_SIMD)
+#define HAVE_aarch64_uqrshrn_nhi (TARGET_SIMD)
+#define HAVE_aarch64_sqshrun_nsi (TARGET_SIMD)
+#define HAVE_aarch64_sqrshrun_nsi (TARGET_SIMD)
+#define HAVE_aarch64_sqshrn_nsi (TARGET_SIMD)
+#define HAVE_aarch64_uqshrn_nsi (TARGET_SIMD)
+#define HAVE_aarch64_sqrshrn_nsi (TARGET_SIMD)
+#define HAVE_aarch64_uqrshrn_nsi (TARGET_SIMD)
+#define HAVE_aarch64_sqshrun_ndi (TARGET_SIMD)
+#define HAVE_aarch64_sqrshrun_ndi (TARGET_SIMD)
+#define HAVE_aarch64_sqshrn_ndi (TARGET_SIMD)
+#define HAVE_aarch64_uqshrn_ndi (TARGET_SIMD)
+#define HAVE_aarch64_sqrshrn_ndi (TARGET_SIMD)
+#define HAVE_aarch64_uqrshrn_ndi (TARGET_SIMD)
+#define HAVE_aarch64_cmltv8qi (TARGET_SIMD)
+#define HAVE_aarch64_cmlev8qi (TARGET_SIMD)
+#define HAVE_aarch64_cmeqv8qi (TARGET_SIMD)
+#define HAVE_aarch64_cmgev8qi (TARGET_SIMD)
+#define HAVE_aarch64_cmgtv8qi (TARGET_SIMD)
+#define HAVE_aarch64_cmltv16qi (TARGET_SIMD)
+#define HAVE_aarch64_cmlev16qi (TARGET_SIMD)
+#define HAVE_aarch64_cmeqv16qi (TARGET_SIMD)
+#define HAVE_aarch64_cmgev16qi (TARGET_SIMD)
+#define HAVE_aarch64_cmgtv16qi (TARGET_SIMD)
+#define HAVE_aarch64_cmltv4hi (TARGET_SIMD)
+#define HAVE_aarch64_cmlev4hi (TARGET_SIMD)
+#define HAVE_aarch64_cmeqv4hi (TARGET_SIMD)
+#define HAVE_aarch64_cmgev4hi (TARGET_SIMD)
+#define HAVE_aarch64_cmgtv4hi (TARGET_SIMD)
+#define HAVE_aarch64_cmltv8hi (TARGET_SIMD)
+#define HAVE_aarch64_cmlev8hi (TARGET_SIMD)
+#define HAVE_aarch64_cmeqv8hi (TARGET_SIMD)
+#define HAVE_aarch64_cmgev8hi (TARGET_SIMD)
+#define HAVE_aarch64_cmgtv8hi (TARGET_SIMD)
+#define HAVE_aarch64_cmltv2si (TARGET_SIMD)
+#define HAVE_aarch64_cmlev2si (TARGET_SIMD)
+#define HAVE_aarch64_cmeqv2si (TARGET_SIMD)
+#define HAVE_aarch64_cmgev2si (TARGET_SIMD)
+#define HAVE_aarch64_cmgtv2si (TARGET_SIMD)
+#define HAVE_aarch64_cmltv4si (TARGET_SIMD)
+#define HAVE_aarch64_cmlev4si (TARGET_SIMD)
+#define HAVE_aarch64_cmeqv4si (TARGET_SIMD)
+#define HAVE_aarch64_cmgev4si (TARGET_SIMD)
+#define HAVE_aarch64_cmgtv4si (TARGET_SIMD)
+#define HAVE_aarch64_cmltv2di (TARGET_SIMD)
+#define HAVE_aarch64_cmlev2di (TARGET_SIMD)
+#define HAVE_aarch64_cmeqv2di (TARGET_SIMD)
+#define HAVE_aarch64_cmgev2di (TARGET_SIMD)
+#define HAVE_aarch64_cmgtv2di (TARGET_SIMD)
+#define HAVE_aarch64_cmltdi (TARGET_SIMD)
+#define HAVE_aarch64_cmledi (TARGET_SIMD)
+#define HAVE_aarch64_cmeqdi (TARGET_SIMD)
+#define HAVE_aarch64_cmgedi (TARGET_SIMD)
+#define HAVE_aarch64_cmgtdi (TARGET_SIMD)
+#define HAVE_aarch64_cmltuv8qi (TARGET_SIMD)
+#define HAVE_aarch64_cmleuv8qi (TARGET_SIMD)
+#define HAVE_aarch64_cmgeuv8qi (TARGET_SIMD)
+#define HAVE_aarch64_cmgtuv8qi (TARGET_SIMD)
+#define HAVE_aarch64_cmltuv16qi (TARGET_SIMD)
+#define HAVE_aarch64_cmleuv16qi (TARGET_SIMD)
+#define HAVE_aarch64_cmgeuv16qi (TARGET_SIMD)
+#define HAVE_aarch64_cmgtuv16qi (TARGET_SIMD)
+#define HAVE_aarch64_cmltuv4hi (TARGET_SIMD)
+#define HAVE_aarch64_cmleuv4hi (TARGET_SIMD)
+#define HAVE_aarch64_cmgeuv4hi (TARGET_SIMD)
+#define HAVE_aarch64_cmgtuv4hi (TARGET_SIMD)
+#define HAVE_aarch64_cmltuv8hi (TARGET_SIMD)
+#define HAVE_aarch64_cmleuv8hi (TARGET_SIMD)
+#define HAVE_aarch64_cmgeuv8hi (TARGET_SIMD)
+#define HAVE_aarch64_cmgtuv8hi (TARGET_SIMD)
+#define HAVE_aarch64_cmltuv2si (TARGET_SIMD)
+#define HAVE_aarch64_cmleuv2si (TARGET_SIMD)
+#define HAVE_aarch64_cmgeuv2si (TARGET_SIMD)
+#define HAVE_aarch64_cmgtuv2si (TARGET_SIMD)
+#define HAVE_aarch64_cmltuv4si (TARGET_SIMD)
+#define HAVE_aarch64_cmleuv4si (TARGET_SIMD)
+#define HAVE_aarch64_cmgeuv4si (TARGET_SIMD)
+#define HAVE_aarch64_cmgtuv4si (TARGET_SIMD)
+#define HAVE_aarch64_cmltuv2di (TARGET_SIMD)
+#define HAVE_aarch64_cmleuv2di (TARGET_SIMD)
+#define HAVE_aarch64_cmgeuv2di (TARGET_SIMD)
+#define HAVE_aarch64_cmgtuv2di (TARGET_SIMD)
+#define HAVE_aarch64_cmltudi (TARGET_SIMD)
+#define HAVE_aarch64_cmleudi (TARGET_SIMD)
+#define HAVE_aarch64_cmgeudi (TARGET_SIMD)
+#define HAVE_aarch64_cmgtudi (TARGET_SIMD)
+#define HAVE_aarch64_cmtstv8qi (TARGET_SIMD)
+#define HAVE_aarch64_cmtstv16qi (TARGET_SIMD)
+#define HAVE_aarch64_cmtstv4hi (TARGET_SIMD)
+#define HAVE_aarch64_cmtstv8hi (TARGET_SIMD)
+#define HAVE_aarch64_cmtstv2si (TARGET_SIMD)
+#define HAVE_aarch64_cmtstv4si (TARGET_SIMD)
+#define HAVE_aarch64_cmtstv2di (TARGET_SIMD)
+#define HAVE_aarch64_cmtstdi (TARGET_SIMD)
+#define HAVE_aarch64_cmltv4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_cmlev4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_cmeqv4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_cmgev4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_cmgtv4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_cmltv8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_cmlev8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_cmeqv8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_cmgev8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_cmgtv8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_cmltv2sf (TARGET_SIMD)
+#define HAVE_aarch64_cmlev2sf (TARGET_SIMD)
+#define HAVE_aarch64_cmeqv2sf (TARGET_SIMD)
+#define HAVE_aarch64_cmgev2sf (TARGET_SIMD)
+#define HAVE_aarch64_cmgtv2sf (TARGET_SIMD)
+#define HAVE_aarch64_cmltv4sf (TARGET_SIMD)
+#define HAVE_aarch64_cmlev4sf (TARGET_SIMD)
+#define HAVE_aarch64_cmeqv4sf (TARGET_SIMD)
+#define HAVE_aarch64_cmgev4sf (TARGET_SIMD)
+#define HAVE_aarch64_cmgtv4sf (TARGET_SIMD)
+#define HAVE_aarch64_cmltv2df (TARGET_SIMD)
+#define HAVE_aarch64_cmlev2df (TARGET_SIMD)
+#define HAVE_aarch64_cmeqv2df (TARGET_SIMD)
+#define HAVE_aarch64_cmgev2df (TARGET_SIMD)
+#define HAVE_aarch64_cmgtv2df (TARGET_SIMD)
+#define HAVE_aarch64_cmlthf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_cmlehf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_cmeqhf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_cmgehf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_cmgthf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_cmltsf (TARGET_SIMD)
+#define HAVE_aarch64_cmlesf (TARGET_SIMD)
+#define HAVE_aarch64_cmeqsf (TARGET_SIMD)
+#define HAVE_aarch64_cmgesf (TARGET_SIMD)
+#define HAVE_aarch64_cmgtsf (TARGET_SIMD)
+#define HAVE_aarch64_cmltdf (TARGET_SIMD)
+#define HAVE_aarch64_cmledf (TARGET_SIMD)
+#define HAVE_aarch64_cmeqdf (TARGET_SIMD)
+#define HAVE_aarch64_cmgedf (TARGET_SIMD)
+#define HAVE_aarch64_cmgtdf (TARGET_SIMD)
+#define HAVE_aarch64_facltv4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_faclev4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_facgev4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_facgtv4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_facltv8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_faclev8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_facgev8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_facgtv8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_facltv2sf (TARGET_SIMD)
+#define HAVE_aarch64_faclev2sf (TARGET_SIMD)
+#define HAVE_aarch64_facgev2sf (TARGET_SIMD)
+#define HAVE_aarch64_facgtv2sf (TARGET_SIMD)
+#define HAVE_aarch64_facltv4sf (TARGET_SIMD)
+#define HAVE_aarch64_faclev4sf (TARGET_SIMD)
+#define HAVE_aarch64_facgev4sf (TARGET_SIMD)
+#define HAVE_aarch64_facgtv4sf (TARGET_SIMD)
+#define HAVE_aarch64_facltv2df (TARGET_SIMD)
+#define HAVE_aarch64_faclev2df (TARGET_SIMD)
+#define HAVE_aarch64_facgev2df (TARGET_SIMD)
+#define HAVE_aarch64_facgtv2df (TARGET_SIMD)
+#define HAVE_aarch64_faclthf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_faclehf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_facgehf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_facgthf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_facltsf (TARGET_SIMD)
+#define HAVE_aarch64_faclesf (TARGET_SIMD)
+#define HAVE_aarch64_facgesf (TARGET_SIMD)
+#define HAVE_aarch64_facgtsf (TARGET_SIMD)
+#define HAVE_aarch64_facltdf (TARGET_SIMD)
+#define HAVE_aarch64_facledf (TARGET_SIMD)
+#define HAVE_aarch64_facgedf (TARGET_SIMD)
+#define HAVE_aarch64_facgtdf (TARGET_SIMD)
+#define HAVE_aarch64_addpv8qi (TARGET_SIMD)
+#define HAVE_aarch64_addpv4hi (TARGET_SIMD)
+#define HAVE_aarch64_addpv2si (TARGET_SIMD)
+#define HAVE_aarch64_addpdi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2v4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2v2di (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2v8hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2v4sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2v2df (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2rv8qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2rv16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2rv4hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2rv8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2rv2si (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2rv4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2rv2di (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2rv4hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2rv8hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2rv2sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2rv4sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2rv2df (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2rdi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld2rdf (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesoi_lanev8qi (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesoi_lanev16qi (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesoi_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesoi_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesoi_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesoi_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesoi_lanev2di (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesoi_lanev4hf (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesoi_lanev8hf (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesoi_lanev2sf (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesoi_lanev4sf (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesoi_lanev2df (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesoi_lanedi (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesoi_lanedf (TARGET_SIMD)
+#define HAVE_aarch64_simd_st2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_st2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_st2v4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_st2v2di (TARGET_SIMD)
+#define HAVE_aarch64_simd_st2v8hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_st2v4sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_st2v2df (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesoi_lanev8qi (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesoi_lanev16qi (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesoi_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesoi_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesoi_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesoi_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesoi_lanev2di (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesoi_lanev4hf (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesoi_lanev8hf (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesoi_lanev2sf (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesoi_lanev4sf (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesoi_lanev2df (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesoi_lanedi (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesoi_lanedf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3v16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3v8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3v4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3v2di (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3v8hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3v4sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3v2df (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3rv8qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3rv16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3rv4hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3rv8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3rv2si (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3rv4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3rv2di (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3rv4hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3rv8hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3rv2sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3rv4sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3rv2df (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3rdi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld3rdf (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesci_lanev8qi (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesci_lanev16qi (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesci_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesci_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesci_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesci_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesci_lanev2di (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesci_lanev4hf (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesci_lanev8hf (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesci_lanev2sf (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesci_lanev4sf (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesci_lanev2df (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesci_lanedi (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesci_lanedf (TARGET_SIMD)
+#define HAVE_aarch64_simd_st3v16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_st3v8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_st3v4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_st3v2di (TARGET_SIMD)
+#define HAVE_aarch64_simd_st3v8hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_st3v4sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_st3v2df (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesci_lanev8qi (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesci_lanev16qi (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesci_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesci_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesci_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesci_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesci_lanev2di (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesci_lanev4hf (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesci_lanev8hf (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesci_lanev2sf (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesci_lanev4sf (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesci_lanev2df (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesci_lanedi (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesci_lanedf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4v16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4v8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4v4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4v2di (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4v8hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4v4sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4v2df (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4rv8qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4rv16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4rv4hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4rv8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4rv2si (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4rv4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4rv2di (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4rv4hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4rv8hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4rv2sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4rv4sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4rv2df (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4rdi (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld4rdf (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesxi_lanev8qi (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesxi_lanev16qi (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesxi_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesxi_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesxi_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesxi_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesxi_lanev2di (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesxi_lanev4hf (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesxi_lanev8hf (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesxi_lanev2sf (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesxi_lanev4sf (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesxi_lanev2df (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesxi_lanedi (TARGET_SIMD)
+#define HAVE_aarch64_vec_load_lanesxi_lanedf (TARGET_SIMD)
+#define HAVE_aarch64_simd_st4v16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_st4v8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_st4v4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_st4v2di (TARGET_SIMD)
+#define HAVE_aarch64_simd_st4v8hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_st4v4sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_st4v2df (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesxi_lanev8qi (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesxi_lanev16qi (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesxi_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesxi_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesxi_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesxi_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesxi_lanev2di (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesxi_lanev4hf (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesxi_lanev8hf (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesxi_lanev2sf (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesxi_lanev4sf (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesxi_lanev2df (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesxi_lanedi (TARGET_SIMD)
+#define HAVE_aarch64_vec_store_lanesxi_lanedf (TARGET_SIMD)
+#define HAVE_aarch64_rev_reglistoi (TARGET_SIMD)
+#define HAVE_aarch64_rev_reglistci (TARGET_SIMD)
+#define HAVE_aarch64_rev_reglistxi (TARGET_SIMD)
+#define HAVE_aarch64_ld1_x3_v8qi (TARGET_SIMD)
+#define HAVE_aarch64_ld1_x3_v16qi (TARGET_SIMD)
+#define HAVE_aarch64_ld1_x3_v4hi (TARGET_SIMD)
+#define HAVE_aarch64_ld1_x3_v8hi (TARGET_SIMD)
+#define HAVE_aarch64_ld1_x3_v2si (TARGET_SIMD)
+#define HAVE_aarch64_ld1_x3_v4si (TARGET_SIMD)
+#define HAVE_aarch64_ld1_x3_v2di (TARGET_SIMD)
+#define HAVE_aarch64_ld1_x3_v4hf (TARGET_SIMD)
+#define HAVE_aarch64_ld1_x3_v8hf (TARGET_SIMD)
+#define HAVE_aarch64_ld1_x3_v2sf (TARGET_SIMD)
+#define HAVE_aarch64_ld1_x3_v4sf (TARGET_SIMD)
+#define HAVE_aarch64_ld1_x3_v2df (TARGET_SIMD)
+#define HAVE_aarch64_ld1_x3_di (TARGET_SIMD)
+#define HAVE_aarch64_ld1_x3_df (TARGET_SIMD)
+#define HAVE_aarch64_st1_x2_v8qi (TARGET_SIMD)
+#define HAVE_aarch64_st1_x2_v16qi (TARGET_SIMD)
+#define HAVE_aarch64_st1_x2_v4hi (TARGET_SIMD)
+#define HAVE_aarch64_st1_x2_v8hi (TARGET_SIMD)
+#define HAVE_aarch64_st1_x2_v2si (TARGET_SIMD)
+#define HAVE_aarch64_st1_x2_v4si (TARGET_SIMD)
+#define HAVE_aarch64_st1_x2_v2di (TARGET_SIMD)
+#define HAVE_aarch64_st1_x2_v4hf (TARGET_SIMD)
+#define HAVE_aarch64_st1_x2_v8hf (TARGET_SIMD)
+#define HAVE_aarch64_st1_x2_v2sf (TARGET_SIMD)
+#define HAVE_aarch64_st1_x2_v4sf (TARGET_SIMD)
+#define HAVE_aarch64_st1_x2_v2df (TARGET_SIMD)
+#define HAVE_aarch64_st1_x2_di (TARGET_SIMD)
+#define HAVE_aarch64_st1_x2_df (TARGET_SIMD)
+#define HAVE_aarch64_st1_x3_v8qi (TARGET_SIMD)
+#define HAVE_aarch64_st1_x3_v16qi (TARGET_SIMD)
+#define HAVE_aarch64_st1_x3_v4hi (TARGET_SIMD)
+#define HAVE_aarch64_st1_x3_v8hi (TARGET_SIMD)
+#define HAVE_aarch64_st1_x3_v2si (TARGET_SIMD)
+#define HAVE_aarch64_st1_x3_v4si (TARGET_SIMD)
+#define HAVE_aarch64_st1_x3_v2di (TARGET_SIMD)
+#define HAVE_aarch64_st1_x3_v4hf (TARGET_SIMD)
+#define HAVE_aarch64_st1_x3_v8hf (TARGET_SIMD)
+#define HAVE_aarch64_st1_x3_v2sf (TARGET_SIMD)
+#define HAVE_aarch64_st1_x3_v4sf (TARGET_SIMD)
+#define HAVE_aarch64_st1_x3_v2df (TARGET_SIMD)
+#define HAVE_aarch64_st1_x3_di (TARGET_SIMD)
+#define HAVE_aarch64_st1_x3_df (TARGET_SIMD)
+#define HAVE_aarch64_be_ld1v8qi (TARGET_SIMD)
+#define HAVE_aarch64_be_ld1v16qi (TARGET_SIMD)
+#define HAVE_aarch64_be_ld1v4hi (TARGET_SIMD)
+#define HAVE_aarch64_be_ld1v8hi (TARGET_SIMD)
+#define HAVE_aarch64_be_ld1v2si (TARGET_SIMD)
+#define HAVE_aarch64_be_ld1v4si (TARGET_SIMD)
+#define HAVE_aarch64_be_ld1v2di (TARGET_SIMD)
+#define HAVE_aarch64_be_ld1v4hf (TARGET_SIMD)
+#define HAVE_aarch64_be_ld1v8hf (TARGET_SIMD)
+#define HAVE_aarch64_be_ld1v2sf (TARGET_SIMD)
+#define HAVE_aarch64_be_ld1v4sf (TARGET_SIMD)
+#define HAVE_aarch64_be_ld1v2df (TARGET_SIMD)
+#define HAVE_aarch64_be_ld1di (TARGET_SIMD)
+#define HAVE_aarch64_be_st1v8qi (TARGET_SIMD)
+#define HAVE_aarch64_be_st1v16qi (TARGET_SIMD)
+#define HAVE_aarch64_be_st1v4hi (TARGET_SIMD)
+#define HAVE_aarch64_be_st1v8hi (TARGET_SIMD)
+#define HAVE_aarch64_be_st1v2si (TARGET_SIMD)
+#define HAVE_aarch64_be_st1v4si (TARGET_SIMD)
+#define HAVE_aarch64_be_st1v2di (TARGET_SIMD)
+#define HAVE_aarch64_be_st1v4hf (TARGET_SIMD)
+#define HAVE_aarch64_be_st1v8hf (TARGET_SIMD)
+#define HAVE_aarch64_be_st1v2sf (TARGET_SIMD)
+#define HAVE_aarch64_be_st1v4sf (TARGET_SIMD)
+#define HAVE_aarch64_be_st1v2df (TARGET_SIMD)
+#define HAVE_aarch64_be_st1di (TARGET_SIMD)
+#define HAVE_aarch64_ld2v8qi_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld2v4hi_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld2v4hf_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld2v2si_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld2v2sf_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld2di_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld2df_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld3v8qi_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld3v4hi_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld3v4hf_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld3v2si_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld3v2sf_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld3di_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld3df_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld4v8qi_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld4v4hi_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld4v4hf_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld4v2si_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld4v2sf_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld4di_dreg (TARGET_SIMD)
+#define HAVE_aarch64_ld4df_dreg (TARGET_SIMD)
+#define HAVE_aarch64_tbl1v8qi (TARGET_SIMD)
+#define HAVE_aarch64_tbl1v16qi (TARGET_SIMD)
+#define HAVE_aarch64_tbl2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_tbl3v8qi (TARGET_SIMD)
+#define HAVE_aarch64_tbl3v16qi (TARGET_SIMD)
+#define HAVE_aarch64_tbx4v8qi (TARGET_SIMD)
+#define HAVE_aarch64_tbx4v16qi (TARGET_SIMD)
+#define HAVE_aarch64_qtbl3v8qi (TARGET_SIMD)
+#define HAVE_aarch64_qtbl3v16qi (TARGET_SIMD)
+#define HAVE_aarch64_qtbx3v8qi (TARGET_SIMD)
+#define HAVE_aarch64_qtbx3v16qi (TARGET_SIMD)
+#define HAVE_aarch64_qtbl4v8qi (TARGET_SIMD)
+#define HAVE_aarch64_qtbl4v16qi (TARGET_SIMD)
+#define HAVE_aarch64_qtbx4v8qi (TARGET_SIMD)
+#define HAVE_aarch64_qtbx4v16qi (TARGET_SIMD)
+#define HAVE_aarch64_combinev16qi (TARGET_SIMD)
+#define HAVE_aarch64_zip1v8qi (TARGET_SIMD)
+#define HAVE_aarch64_zip2v8qi (TARGET_SIMD)
+#define HAVE_aarch64_trn1v8qi (TARGET_SIMD)
+#define HAVE_aarch64_trn2v8qi (TARGET_SIMD)
+#define HAVE_aarch64_uzp1v8qi (TARGET_SIMD)
+#define HAVE_aarch64_uzp2v8qi (TARGET_SIMD)
+#define HAVE_aarch64_zip1v16qi (TARGET_SIMD)
+#define HAVE_aarch64_zip2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_trn1v16qi (TARGET_SIMD)
+#define HAVE_aarch64_trn2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_uzp1v16qi (TARGET_SIMD)
+#define HAVE_aarch64_uzp2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_zip1v4hi (TARGET_SIMD)
+#define HAVE_aarch64_zip2v4hi (TARGET_SIMD)
+#define HAVE_aarch64_trn1v4hi (TARGET_SIMD)
+#define HAVE_aarch64_trn2v4hi (TARGET_SIMD)
+#define HAVE_aarch64_uzp1v4hi (TARGET_SIMD)
+#define HAVE_aarch64_uzp2v4hi (TARGET_SIMD)
+#define HAVE_aarch64_zip1v8hi (TARGET_SIMD)
+#define HAVE_aarch64_zip2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_trn1v8hi (TARGET_SIMD)
+#define HAVE_aarch64_trn2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_uzp1v8hi (TARGET_SIMD)
+#define HAVE_aarch64_uzp2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_zip1v2si (TARGET_SIMD)
+#define HAVE_aarch64_zip2v2si (TARGET_SIMD)
+#define HAVE_aarch64_trn1v2si (TARGET_SIMD)
+#define HAVE_aarch64_trn2v2si (TARGET_SIMD)
+#define HAVE_aarch64_uzp1v2si (TARGET_SIMD)
+#define HAVE_aarch64_uzp2v2si (TARGET_SIMD)
+#define HAVE_aarch64_zip1v4si (TARGET_SIMD)
+#define HAVE_aarch64_zip2v4si (TARGET_SIMD)
+#define HAVE_aarch64_trn1v4si (TARGET_SIMD)
+#define HAVE_aarch64_trn2v4si (TARGET_SIMD)
+#define HAVE_aarch64_uzp1v4si (TARGET_SIMD)
+#define HAVE_aarch64_uzp2v4si (TARGET_SIMD)
+#define HAVE_aarch64_zip1v2di (TARGET_SIMD)
+#define HAVE_aarch64_zip2v2di (TARGET_SIMD)
+#define HAVE_aarch64_trn1v2di (TARGET_SIMD)
+#define HAVE_aarch64_trn2v2di (TARGET_SIMD)
+#define HAVE_aarch64_uzp1v2di (TARGET_SIMD)
+#define HAVE_aarch64_uzp2v2di (TARGET_SIMD)
+#define HAVE_aarch64_zip1v4hf (TARGET_SIMD)
+#define HAVE_aarch64_zip2v4hf (TARGET_SIMD)
+#define HAVE_aarch64_trn1v4hf (TARGET_SIMD)
+#define HAVE_aarch64_trn2v4hf (TARGET_SIMD)
+#define HAVE_aarch64_uzp1v4hf (TARGET_SIMD)
+#define HAVE_aarch64_uzp2v4hf (TARGET_SIMD)
+#define HAVE_aarch64_zip1v8hf (TARGET_SIMD)
+#define HAVE_aarch64_zip2v8hf (TARGET_SIMD)
+#define HAVE_aarch64_trn1v8hf (TARGET_SIMD)
+#define HAVE_aarch64_trn2v8hf (TARGET_SIMD)
+#define HAVE_aarch64_uzp1v8hf (TARGET_SIMD)
+#define HAVE_aarch64_uzp2v8hf (TARGET_SIMD)
+#define HAVE_aarch64_zip1v2sf (TARGET_SIMD)
+#define HAVE_aarch64_zip2v2sf (TARGET_SIMD)
+#define HAVE_aarch64_trn1v2sf (TARGET_SIMD)
+#define HAVE_aarch64_trn2v2sf (TARGET_SIMD)
+#define HAVE_aarch64_uzp1v2sf (TARGET_SIMD)
+#define HAVE_aarch64_uzp2v2sf (TARGET_SIMD)
+#define HAVE_aarch64_zip1v4sf (TARGET_SIMD)
+#define HAVE_aarch64_zip2v4sf (TARGET_SIMD)
+#define HAVE_aarch64_trn1v4sf (TARGET_SIMD)
+#define HAVE_aarch64_trn2v4sf (TARGET_SIMD)
+#define HAVE_aarch64_uzp1v4sf (TARGET_SIMD)
+#define HAVE_aarch64_uzp2v4sf (TARGET_SIMD)
+#define HAVE_aarch64_zip1v2df (TARGET_SIMD)
+#define HAVE_aarch64_zip2v2df (TARGET_SIMD)
+#define HAVE_aarch64_trn1v2df (TARGET_SIMD)
+#define HAVE_aarch64_trn2v2df (TARGET_SIMD)
+#define HAVE_aarch64_uzp1v2df (TARGET_SIMD)
+#define HAVE_aarch64_uzp2v2df (TARGET_SIMD)
+#define HAVE_aarch64_extv8qi (TARGET_SIMD)
+#define HAVE_aarch64_extv16qi (TARGET_SIMD)
+#define HAVE_aarch64_extv4hi (TARGET_SIMD)
+#define HAVE_aarch64_extv8hi (TARGET_SIMD)
+#define HAVE_aarch64_extv2si (TARGET_SIMD)
+#define HAVE_aarch64_extv4si (TARGET_SIMD)
+#define HAVE_aarch64_extv2di (TARGET_SIMD)
+#define HAVE_aarch64_extv4hf (TARGET_SIMD)
+#define HAVE_aarch64_extv8hf (TARGET_SIMD)
+#define HAVE_aarch64_extv2sf (TARGET_SIMD)
+#define HAVE_aarch64_extv4sf (TARGET_SIMD)
+#define HAVE_aarch64_extv2df (TARGET_SIMD)
+#define HAVE_aarch64_rev64v8qi (TARGET_SIMD)
+#define HAVE_aarch64_rev32v8qi (TARGET_SIMD)
+#define HAVE_aarch64_rev16v8qi (TARGET_SIMD)
+#define HAVE_aarch64_rev64v16qi (TARGET_SIMD)
+#define HAVE_aarch64_rev32v16qi (TARGET_SIMD)
+#define HAVE_aarch64_rev16v16qi (TARGET_SIMD)
+#define HAVE_aarch64_rev64v4hi (TARGET_SIMD)
+#define HAVE_aarch64_rev32v4hi (TARGET_SIMD)
+#define HAVE_aarch64_rev16v4hi (TARGET_SIMD)
+#define HAVE_aarch64_rev64v8hi (TARGET_SIMD)
+#define HAVE_aarch64_rev32v8hi (TARGET_SIMD)
+#define HAVE_aarch64_rev16v8hi (TARGET_SIMD)
+#define HAVE_aarch64_rev64v2si (TARGET_SIMD)
+#define HAVE_aarch64_rev32v2si (TARGET_SIMD)
+#define HAVE_aarch64_rev16v2si (TARGET_SIMD)
+#define HAVE_aarch64_rev64v4si (TARGET_SIMD)
+#define HAVE_aarch64_rev32v4si (TARGET_SIMD)
+#define HAVE_aarch64_rev16v4si (TARGET_SIMD)
+#define HAVE_aarch64_rev64v2di (TARGET_SIMD)
+#define HAVE_aarch64_rev32v2di (TARGET_SIMD)
+#define HAVE_aarch64_rev16v2di (TARGET_SIMD)
+#define HAVE_aarch64_rev64v4hf (TARGET_SIMD)
+#define HAVE_aarch64_rev32v4hf (TARGET_SIMD)
+#define HAVE_aarch64_rev16v4hf (TARGET_SIMD)
+#define HAVE_aarch64_rev64v8hf (TARGET_SIMD)
+#define HAVE_aarch64_rev32v8hf (TARGET_SIMD)
+#define HAVE_aarch64_rev16v8hf (TARGET_SIMD)
+#define HAVE_aarch64_rev64v2sf (TARGET_SIMD)
+#define HAVE_aarch64_rev32v2sf (TARGET_SIMD)
+#define HAVE_aarch64_rev16v2sf (TARGET_SIMD)
+#define HAVE_aarch64_rev64v4sf (TARGET_SIMD)
+#define HAVE_aarch64_rev32v4sf (TARGET_SIMD)
+#define HAVE_aarch64_rev16v4sf (TARGET_SIMD)
+#define HAVE_aarch64_rev64v2df (TARGET_SIMD)
+#define HAVE_aarch64_rev32v2df (TARGET_SIMD)
+#define HAVE_aarch64_rev16v2df (TARGET_SIMD)
+#define HAVE_aarch64_st2v8qi_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st2v4hi_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st2v4hf_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st2v2si_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st2v2sf_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st2di_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st2df_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st3v8qi_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st3v4hi_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st3v4hf_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st3v2si_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st3v2sf_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st3di_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st3df_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st4v8qi_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st4v4hi_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st4v4hf_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st4v2si_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st4v2sf_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st4di_dreg (TARGET_SIMD)
+#define HAVE_aarch64_st4df_dreg (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld1v16qi_x2 (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld1v8hi_x2 (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld1v4si_x2 (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld1v2di_x2 (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld1v8hf_x2 (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld1v4sf_x2 (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld1v2df_x2 (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld1v8qi_x2 (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld1v4hi_x2 (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld1v4hf_x2 (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld1v2si_x2 (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld1v2sf_x2 (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld1di_x2 (TARGET_SIMD)
+#define HAVE_aarch64_simd_ld1df_x2 (TARGET_SIMD)
+#define HAVE_aarch64_frecpev4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_frecpev8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_frecpev2sf (TARGET_SIMD)
+#define HAVE_aarch64_frecpev4sf (TARGET_SIMD)
+#define HAVE_aarch64_frecpev2df (TARGET_SIMD)
+#define HAVE_aarch64_frecpehf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_frecpesf (TARGET_SIMD)
+#define HAVE_aarch64_frecpedf (TARGET_SIMD)
+#define HAVE_aarch64_frecpxhf ((TARGET_SIMD) && (AARCH64_ISA_F16))
+#define HAVE_aarch64_frecpxsf (TARGET_SIMD)
+#define HAVE_aarch64_frecpxdf (TARGET_SIMD)
+#define HAVE_aarch64_frecpsv4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_frecpsv8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_frecpsv2sf (TARGET_SIMD)
+#define HAVE_aarch64_frecpsv4sf (TARGET_SIMD)
+#define HAVE_aarch64_frecpsv2df (TARGET_SIMD)
+#define HAVE_aarch64_frecpshf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_aarch64_frecpssf (TARGET_SIMD)
+#define HAVE_aarch64_frecpsdf (TARGET_SIMD)
+#define HAVE_aarch64_urecpev2si (TARGET_SIMD)
+#define HAVE_aarch64_urecpev4si (TARGET_SIMD)
+#define HAVE_aarch64_crypto_aesev16qi (TARGET_SIMD && TARGET_AES)
+#define HAVE_aarch64_crypto_aesdv16qi (TARGET_SIMD && TARGET_AES)
+#define HAVE_aarch64_crypto_aesmcv16qi (TARGET_SIMD && TARGET_AES)
+#define HAVE_aarch64_crypto_aesimcv16qi (TARGET_SIMD && TARGET_AES)
+#define HAVE_aarch64_crypto_sha1hsi (TARGET_SIMD && TARGET_SHA2)
+#define HAVE_aarch64_crypto_sha1hv4si (TARGET_SIMD && TARGET_SHA2 && !BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_be_crypto_sha1hv4si (TARGET_SIMD && TARGET_SHA2 && BYTES_BIG_ENDIAN)
+#define HAVE_aarch64_crypto_sha1su1v4si (TARGET_SIMD && TARGET_SHA2)
+#define HAVE_aarch64_crypto_sha1cv4si (TARGET_SIMD && TARGET_SHA2)
+#define HAVE_aarch64_crypto_sha1mv4si (TARGET_SIMD && TARGET_SHA2)
+#define HAVE_aarch64_crypto_sha1pv4si (TARGET_SIMD && TARGET_SHA2)
+#define HAVE_aarch64_crypto_sha1su0v4si (TARGET_SIMD && TARGET_SHA2)
+#define HAVE_aarch64_crypto_sha256hv4si (TARGET_SIMD && TARGET_SHA2)
+#define HAVE_aarch64_crypto_sha256h2v4si (TARGET_SIMD && TARGET_SHA2)
+#define HAVE_aarch64_crypto_sha256su0v4si (TARGET_SIMD && TARGET_SHA2)
+#define HAVE_aarch64_crypto_sha256su1v4si (TARGET_SIMD && TARGET_SHA2)
+#define HAVE_aarch64_crypto_sha512hqv2di (TARGET_SIMD && TARGET_SHA3)
+#define HAVE_aarch64_crypto_sha512h2qv2di (TARGET_SIMD && TARGET_SHA3)
+#define HAVE_aarch64_crypto_sha512su0qv2di (TARGET_SIMD && TARGET_SHA3)
+#define HAVE_aarch64_crypto_sha512su1qv2di (TARGET_SIMD && TARGET_SHA3)
+#define HAVE_eor3qv16qi4 (TARGET_SIMD && TARGET_SHA3)
+#define HAVE_eor3qv8hi4 (TARGET_SIMD && TARGET_SHA3)
+#define HAVE_eor3qv4si4 (TARGET_SIMD && TARGET_SHA3)
+#define HAVE_eor3qv2di4 (TARGET_SIMD && TARGET_SHA3)
+#define HAVE_aarch64_rax1qv2di (TARGET_SIMD && TARGET_SHA3)
+#define HAVE_aarch64_xarqv2di (TARGET_SIMD && TARGET_SHA3)
+#define HAVE_bcaxqv16qi4 (TARGET_SIMD && TARGET_SHA3)
+#define HAVE_bcaxqv8hi4 (TARGET_SIMD && TARGET_SHA3)
+#define HAVE_bcaxqv4si4 (TARGET_SIMD && TARGET_SHA3)
+#define HAVE_bcaxqv2di4 (TARGET_SIMD && TARGET_SHA3)
+#define HAVE_aarch64_sm3ss1qv4si (TARGET_SIMD && TARGET_SM4)
+#define HAVE_aarch64_sm3tt1aqv4si (TARGET_SIMD && TARGET_SM4)
+#define HAVE_aarch64_sm3tt1bqv4si (TARGET_SIMD && TARGET_SM4)
+#define HAVE_aarch64_sm3tt2aqv4si (TARGET_SIMD && TARGET_SM4)
+#define HAVE_aarch64_sm3tt2bqv4si (TARGET_SIMD && TARGET_SM4)
+#define HAVE_aarch64_sm3partw1qv4si (TARGET_SIMD && TARGET_SM4)
+#define HAVE_aarch64_sm3partw2qv4si (TARGET_SIMD && TARGET_SM4)
+#define HAVE_aarch64_sm4eqv4si (TARGET_SIMD && TARGET_SM4)
+#define HAVE_aarch64_sm4ekeyqv4si (TARGET_SIMD && TARGET_SM4)
+#define HAVE_aarch64_simd_fmlal_lowv2sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlalq_lowv4sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlsl_lowv2sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlslq_lowv4sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlal_highv2sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlalq_highv4sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlsl_highv2sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlslq_highv4sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlal_lane_lowv2sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlsl_lane_lowv2sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlal_lane_highv2sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlsl_lane_highv2sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlalq_laneq_lowv4sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlslq_laneq_lowv4sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlalq_laneq_highv4sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlslq_laneq_highv4sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlal_laneq_lowv2sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlsl_laneq_lowv2sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlal_laneq_highv2sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlsl_laneq_highv2sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlalq_lane_lowv4sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlslq_lane_lowv4sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlalq_lane_highv4sf (TARGET_F16FML)
+#define HAVE_aarch64_simd_fmlslq_lane_highv4sf (TARGET_F16FML)
+#define HAVE_aarch64_crypto_pmulldi (TARGET_SIMD && TARGET_AES)
+#define HAVE_aarch64_crypto_pmullv2di (TARGET_SIMD && TARGET_AES)
+#define HAVE_aarch64_compare_and_swapqi 1
+#define HAVE_aarch64_compare_and_swaphi 1
+#define HAVE_aarch64_compare_and_swapsi 1
+#define HAVE_aarch64_compare_and_swapdi 1
+#define HAVE_aarch64_compare_and_swapqi_lse (TARGET_LSE)
+#define HAVE_aarch64_compare_and_swaphi_lse (TARGET_LSE)
+#define HAVE_aarch64_compare_and_swapsi_lse (TARGET_LSE)
+#define HAVE_aarch64_compare_and_swapdi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_exchangeqi 1
+#define HAVE_aarch64_atomic_exchangehi 1
+#define HAVE_aarch64_atomic_exchangesi 1
+#define HAVE_aarch64_atomic_exchangedi 1
+#define HAVE_aarch64_atomic_exchangeqi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_exchangehi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_exchangesi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_exchangedi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_addqi 1
+#define HAVE_aarch64_atomic_subqi 1
+#define HAVE_aarch64_atomic_orqi 1
+#define HAVE_aarch64_atomic_xorqi 1
+#define HAVE_aarch64_atomic_andqi 1
+#define HAVE_aarch64_atomic_addhi 1
+#define HAVE_aarch64_atomic_subhi 1
+#define HAVE_aarch64_atomic_orhi 1
+#define HAVE_aarch64_atomic_xorhi 1
+#define HAVE_aarch64_atomic_andhi 1
+#define HAVE_aarch64_atomic_addsi 1
+#define HAVE_aarch64_atomic_subsi 1
+#define HAVE_aarch64_atomic_orsi 1
+#define HAVE_aarch64_atomic_xorsi 1
+#define HAVE_aarch64_atomic_andsi 1
+#define HAVE_aarch64_atomic_adddi 1
+#define HAVE_aarch64_atomic_subdi 1
+#define HAVE_aarch64_atomic_ordi 1
+#define HAVE_aarch64_atomic_xordi 1
+#define HAVE_aarch64_atomic_anddi 1
+#define HAVE_aarch64_atomic_iorqi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_bicqi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_xorqi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_addqi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_iorhi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_bichi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_xorhi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_addhi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_iorsi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_bicsi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_xorsi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_addsi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_iordi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_bicdi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_xordi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_adddi_lse (TARGET_LSE)
+#define HAVE_atomic_nandqi 1
+#define HAVE_atomic_nandhi 1
+#define HAVE_atomic_nandsi 1
+#define HAVE_atomic_nanddi 1
+#define HAVE_aarch64_atomic_fetch_addqi 1
+#define HAVE_aarch64_atomic_fetch_subqi 1
+#define HAVE_aarch64_atomic_fetch_orqi 1
+#define HAVE_aarch64_atomic_fetch_xorqi 1
+#define HAVE_aarch64_atomic_fetch_andqi 1
+#define HAVE_aarch64_atomic_fetch_addhi 1
+#define HAVE_aarch64_atomic_fetch_subhi 1
+#define HAVE_aarch64_atomic_fetch_orhi 1
+#define HAVE_aarch64_atomic_fetch_xorhi 1
+#define HAVE_aarch64_atomic_fetch_andhi 1
+#define HAVE_aarch64_atomic_fetch_addsi 1
+#define HAVE_aarch64_atomic_fetch_subsi 1
+#define HAVE_aarch64_atomic_fetch_orsi 1
+#define HAVE_aarch64_atomic_fetch_xorsi 1
+#define HAVE_aarch64_atomic_fetch_andsi 1
+#define HAVE_aarch64_atomic_fetch_adddi 1
+#define HAVE_aarch64_atomic_fetch_subdi 1
+#define HAVE_aarch64_atomic_fetch_ordi 1
+#define HAVE_aarch64_atomic_fetch_xordi 1
+#define HAVE_aarch64_atomic_fetch_anddi 1
+#define HAVE_aarch64_atomic_fetch_iorqi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_fetch_bicqi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_fetch_xorqi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_fetch_addqi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_fetch_iorhi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_fetch_bichi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_fetch_xorhi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_fetch_addhi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_fetch_iorsi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_fetch_bicsi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_fetch_xorsi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_fetch_addsi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_fetch_iordi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_fetch_bicdi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_fetch_xordi_lse (TARGET_LSE)
+#define HAVE_aarch64_atomic_fetch_adddi_lse (TARGET_LSE)
+#define HAVE_atomic_fetch_nandqi 1
+#define HAVE_atomic_fetch_nandhi 1
+#define HAVE_atomic_fetch_nandsi 1
+#define HAVE_atomic_fetch_nanddi 1
+#define HAVE_aarch64_atomic_add_fetchqi 1
+#define HAVE_aarch64_atomic_sub_fetchqi 1
+#define HAVE_aarch64_atomic_or_fetchqi 1
+#define HAVE_aarch64_atomic_xor_fetchqi 1
+#define HAVE_aarch64_atomic_and_fetchqi 1
+#define HAVE_aarch64_atomic_add_fetchhi 1
+#define HAVE_aarch64_atomic_sub_fetchhi 1
+#define HAVE_aarch64_atomic_or_fetchhi 1
+#define HAVE_aarch64_atomic_xor_fetchhi 1
+#define HAVE_aarch64_atomic_and_fetchhi 1
+#define HAVE_aarch64_atomic_add_fetchsi 1
+#define HAVE_aarch64_atomic_sub_fetchsi 1
+#define HAVE_aarch64_atomic_or_fetchsi 1
+#define HAVE_aarch64_atomic_xor_fetchsi 1
+#define HAVE_aarch64_atomic_and_fetchsi 1
+#define HAVE_aarch64_atomic_add_fetchdi 1
+#define HAVE_aarch64_atomic_sub_fetchdi 1
+#define HAVE_aarch64_atomic_or_fetchdi 1
+#define HAVE_aarch64_atomic_xor_fetchdi 1
+#define HAVE_aarch64_atomic_and_fetchdi 1
+#define HAVE_atomic_nand_fetchqi 1
+#define HAVE_atomic_nand_fetchhi 1
+#define HAVE_atomic_nand_fetchsi 1
+#define HAVE_atomic_nand_fetchdi 1
+#define HAVE_atomic_loadqi 1
+#define HAVE_atomic_loadhi 1
+#define HAVE_atomic_loadsi 1
+#define HAVE_atomic_loaddi 1
+#define HAVE_atomic_storeqi 1
+#define HAVE_atomic_storehi 1
+#define HAVE_atomic_storesi 1
+#define HAVE_atomic_storedi 1
+#define HAVE_aarch64_load_exclusiveqi 1
+#define HAVE_aarch64_load_exclusivehi 1
+#define HAVE_aarch64_load_exclusivesi 1
+#define HAVE_aarch64_load_exclusivedi 1
+#define HAVE_aarch64_store_exclusiveqi 1
+#define HAVE_aarch64_store_exclusivehi 1
+#define HAVE_aarch64_store_exclusivesi 1
+#define HAVE_aarch64_store_exclusivedi 1
+#define HAVE_aarch64_pred_movvnx16qi (TARGET_SVE \
+   && (register_operand (operands[0], VNx16QImode) \
+       || register_operand (operands[2], VNx16QImode)))
+#define HAVE_aarch64_pred_movvnx8hi (TARGET_SVE \
+   && (register_operand (operands[0], VNx8HImode) \
+       || register_operand (operands[2], VNx8HImode)))
+#define HAVE_aarch64_pred_movvnx4si (TARGET_SVE \
+   && (register_operand (operands[0], VNx4SImode) \
+       || register_operand (operands[2], VNx4SImode)))
+#define HAVE_aarch64_pred_movvnx2di (TARGET_SVE \
+   && (register_operand (operands[0], VNx2DImode) \
+       || register_operand (operands[2], VNx2DImode)))
+#define HAVE_aarch64_pred_movvnx8hf (TARGET_SVE \
+   && (register_operand (operands[0], VNx8HFmode) \
+       || register_operand (operands[2], VNx8HFmode)))
+#define HAVE_aarch64_pred_movvnx4sf (TARGET_SVE \
+   && (register_operand (operands[0], VNx4SFmode) \
+       || register_operand (operands[2], VNx4SFmode)))
+#define HAVE_aarch64_pred_movvnx2df (TARGET_SVE \
+   && (register_operand (operands[0], VNx2DFmode) \
+       || register_operand (operands[2], VNx2DFmode)))
+#define HAVE_maskloadvnx16qivnx16bi (TARGET_SVE)
+#define HAVE_maskloadvnx8hivnx8bi (TARGET_SVE)
+#define HAVE_maskloadvnx4sivnx4bi (TARGET_SVE)
+#define HAVE_maskloadvnx2divnx2bi (TARGET_SVE)
+#define HAVE_maskloadvnx8hfvnx8bi (TARGET_SVE)
+#define HAVE_maskloadvnx4sfvnx4bi (TARGET_SVE)
+#define HAVE_maskloadvnx2dfvnx2bi (TARGET_SVE)
+#define HAVE_maskstorevnx16qivnx16bi (TARGET_SVE)
+#define HAVE_maskstorevnx8hivnx8bi (TARGET_SVE)
+#define HAVE_maskstorevnx4sivnx4bi (TARGET_SVE)
+#define HAVE_maskstorevnx2divnx2bi (TARGET_SVE)
+#define HAVE_maskstorevnx8hfvnx8bi (TARGET_SVE)
+#define HAVE_maskstorevnx4sfvnx4bi (TARGET_SVE)
+#define HAVE_maskstorevnx2dfvnx2bi (TARGET_SVE)
+#define HAVE_mask_gather_loadvnx4si (TARGET_SVE)
+#define HAVE_mask_gather_loadvnx4sf (TARGET_SVE)
+#define HAVE_mask_gather_loadvnx2di (TARGET_SVE)
+#define HAVE_mask_gather_loadvnx2df (TARGET_SVE)
+#define HAVE_mask_scatter_storevnx4si (TARGET_SVE)
+#define HAVE_mask_scatter_storevnx4sf (TARGET_SVE)
+#define HAVE_mask_scatter_storevnx2di (TARGET_SVE)
+#define HAVE_mask_scatter_storevnx2df (TARGET_SVE)
+#define HAVE_aarch64_pred_movvnx32qi (TARGET_SVE \
+   && (register_operand (operands[0], VNx32QImode) \
+       || register_operand (operands[2], VNx32QImode)))
+#define HAVE_aarch64_pred_movvnx16hi (TARGET_SVE \
+   && (register_operand (operands[0], VNx16HImode) \
+       || register_operand (operands[2], VNx16HImode)))
+#define HAVE_aarch64_pred_movvnx8si (TARGET_SVE \
+   && (register_operand (operands[0], VNx8SImode) \
+       || register_operand (operands[2], VNx8SImode)))
+#define HAVE_aarch64_pred_movvnx4di (TARGET_SVE \
+   && (register_operand (operands[0], VNx4DImode) \
+       || register_operand (operands[2], VNx4DImode)))
+#define HAVE_aarch64_pred_movvnx16hf (TARGET_SVE \
+   && (register_operand (operands[0], VNx16HFmode) \
+       || register_operand (operands[2], VNx16HFmode)))
+#define HAVE_aarch64_pred_movvnx8sf (TARGET_SVE \
+   && (register_operand (operands[0], VNx8SFmode) \
+       || register_operand (operands[2], VNx8SFmode)))
+#define HAVE_aarch64_pred_movvnx4df (TARGET_SVE \
+   && (register_operand (operands[0], VNx4DFmode) \
+       || register_operand (operands[2], VNx4DFmode)))
+#define HAVE_aarch64_pred_movvnx48qi (TARGET_SVE \
+   && (register_operand (operands[0], VNx48QImode) \
+       || register_operand (operands[2], VNx48QImode)))
+#define HAVE_aarch64_pred_movvnx24hi (TARGET_SVE \
+   && (register_operand (operands[0], VNx24HImode) \
+       || register_operand (operands[2], VNx24HImode)))
+#define HAVE_aarch64_pred_movvnx12si (TARGET_SVE \
+   && (register_operand (operands[0], VNx12SImode) \
+       || register_operand (operands[2], VNx12SImode)))
+#define HAVE_aarch64_pred_movvnx6di (TARGET_SVE \
+   && (register_operand (operands[0], VNx6DImode) \
+       || register_operand (operands[2], VNx6DImode)))
+#define HAVE_aarch64_pred_movvnx24hf (TARGET_SVE \
+   && (register_operand (operands[0], VNx24HFmode) \
+       || register_operand (operands[2], VNx24HFmode)))
+#define HAVE_aarch64_pred_movvnx12sf (TARGET_SVE \
+   && (register_operand (operands[0], VNx12SFmode) \
+       || register_operand (operands[2], VNx12SFmode)))
+#define HAVE_aarch64_pred_movvnx6df (TARGET_SVE \
+   && (register_operand (operands[0], VNx6DFmode) \
+       || register_operand (operands[2], VNx6DFmode)))
+#define HAVE_aarch64_pred_movvnx64qi (TARGET_SVE \
+   && (register_operand (operands[0], VNx64QImode) \
+       || register_operand (operands[2], VNx64QImode)))
+#define HAVE_aarch64_pred_movvnx32hi (TARGET_SVE \
+   && (register_operand (operands[0], VNx32HImode) \
+       || register_operand (operands[2], VNx32HImode)))
+#define HAVE_aarch64_pred_movvnx16si (TARGET_SVE \
+   && (register_operand (operands[0], VNx16SImode) \
+       || register_operand (operands[2], VNx16SImode)))
+#define HAVE_aarch64_pred_movvnx8di (TARGET_SVE \
+   && (register_operand (operands[0], VNx8DImode) \
+       || register_operand (operands[2], VNx8DImode)))
+#define HAVE_aarch64_pred_movvnx32hf (TARGET_SVE \
+   && (register_operand (operands[0], VNx32HFmode) \
+       || register_operand (operands[2], VNx32HFmode)))
+#define HAVE_aarch64_pred_movvnx16sf (TARGET_SVE \
+   && (register_operand (operands[0], VNx16SFmode) \
+       || register_operand (operands[2], VNx16SFmode)))
+#define HAVE_aarch64_pred_movvnx8df (TARGET_SVE \
+   && (register_operand (operands[0], VNx8DFmode) \
+       || register_operand (operands[2], VNx8DFmode)))
+#define HAVE_extract_last_vnx16qi (TARGET_SVE)
+#define HAVE_extract_last_vnx8hi (TARGET_SVE)
+#define HAVE_extract_last_vnx4si (TARGET_SVE)
+#define HAVE_extract_last_vnx2di (TARGET_SVE)
+#define HAVE_extract_last_vnx8hf (TARGET_SVE)
+#define HAVE_extract_last_vnx4sf (TARGET_SVE)
+#define HAVE_extract_last_vnx2df (TARGET_SVE)
+#define HAVE_sve_ld1rvnx16qi (TARGET_SVE)
+#define HAVE_sve_ld1rvnx8hi (TARGET_SVE)
+#define HAVE_sve_ld1rvnx4si (TARGET_SVE)
+#define HAVE_sve_ld1rvnx2di (TARGET_SVE)
+#define HAVE_sve_ld1rvnx8hf (TARGET_SVE)
+#define HAVE_sve_ld1rvnx4sf (TARGET_SVE)
+#define HAVE_sve_ld1rvnx2df (TARGET_SVE)
+#define HAVE_vec_seriesvnx16qi (TARGET_SVE)
+#define HAVE_vec_seriesvnx8hi (TARGET_SVE)
+#define HAVE_vec_seriesvnx4si (TARGET_SVE)
+#define HAVE_vec_seriesvnx2di (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx32qivnx16qi (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx16hivnx8hi (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx8sivnx4si (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx4divnx2di (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx16hfvnx8hf (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx8sfvnx4sf (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx4dfvnx2df (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx48qivnx16qi (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx24hivnx8hi (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx12sivnx4si (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx6divnx2di (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx24hfvnx8hf (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx12sfvnx4sf (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx6dfvnx2df (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx64qivnx16qi (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx32hivnx8hi (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx16sivnx4si (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx8divnx2di (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx32hfvnx8hf (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx16sfvnx4sf (TARGET_SVE)
+#define HAVE_vec_mask_load_lanesvnx8dfvnx2df (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx32qivnx16qi (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx16hivnx8hi (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx8sivnx4si (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx4divnx2di (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx16hfvnx8hf (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx8sfvnx4sf (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx4dfvnx2df (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx48qivnx16qi (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx24hivnx8hi (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx12sivnx4si (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx6divnx2di (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx24hfvnx8hf (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx12sfvnx4sf (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx6dfvnx2df (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx64qivnx16qi (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx32hivnx8hi (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx16sivnx4si (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx8divnx2di (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx32hfvnx8hf (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx16sfvnx4sf (TARGET_SVE)
+#define HAVE_vec_mask_store_lanesvnx8dfvnx2df (TARGET_SVE)
+#define HAVE_aarch64_sve_zip1vnx16qi (TARGET_SVE)
+#define HAVE_aarch64_sve_zip2vnx16qi (TARGET_SVE)
+#define HAVE_aarch64_sve_trn1vnx16qi (TARGET_SVE)
+#define HAVE_aarch64_sve_trn2vnx16qi (TARGET_SVE)
+#define HAVE_aarch64_sve_uzp1vnx16qi (TARGET_SVE)
+#define HAVE_aarch64_sve_uzp2vnx16qi (TARGET_SVE)
+#define HAVE_aarch64_sve_zip1vnx8hi (TARGET_SVE)
+#define HAVE_aarch64_sve_zip2vnx8hi (TARGET_SVE)
+#define HAVE_aarch64_sve_trn1vnx8hi (TARGET_SVE)
+#define HAVE_aarch64_sve_trn2vnx8hi (TARGET_SVE)
+#define HAVE_aarch64_sve_uzp1vnx8hi (TARGET_SVE)
+#define HAVE_aarch64_sve_uzp2vnx8hi (TARGET_SVE)
+#define HAVE_aarch64_sve_zip1vnx4si (TARGET_SVE)
+#define HAVE_aarch64_sve_zip2vnx4si (TARGET_SVE)
+#define HAVE_aarch64_sve_trn1vnx4si (TARGET_SVE)
+#define HAVE_aarch64_sve_trn2vnx4si (TARGET_SVE)
+#define HAVE_aarch64_sve_uzp1vnx4si (TARGET_SVE)
+#define HAVE_aarch64_sve_uzp2vnx4si (TARGET_SVE)
+#define HAVE_aarch64_sve_zip1vnx2di (TARGET_SVE)
+#define HAVE_aarch64_sve_zip2vnx2di (TARGET_SVE)
+#define HAVE_aarch64_sve_trn1vnx2di (TARGET_SVE)
+#define HAVE_aarch64_sve_trn2vnx2di (TARGET_SVE)
+#define HAVE_aarch64_sve_uzp1vnx2di (TARGET_SVE)
+#define HAVE_aarch64_sve_uzp2vnx2di (TARGET_SVE)
+#define HAVE_aarch64_sve_zip1vnx8hf (TARGET_SVE)
+#define HAVE_aarch64_sve_zip2vnx8hf (TARGET_SVE)
+#define HAVE_aarch64_sve_trn1vnx8hf (TARGET_SVE)
+#define HAVE_aarch64_sve_trn2vnx8hf (TARGET_SVE)
+#define HAVE_aarch64_sve_uzp1vnx8hf (TARGET_SVE)
+#define HAVE_aarch64_sve_uzp2vnx8hf (TARGET_SVE)
+#define HAVE_aarch64_sve_zip1vnx4sf (TARGET_SVE)
+#define HAVE_aarch64_sve_zip2vnx4sf (TARGET_SVE)
+#define HAVE_aarch64_sve_trn1vnx4sf (TARGET_SVE)
+#define HAVE_aarch64_sve_trn2vnx4sf (TARGET_SVE)
+#define HAVE_aarch64_sve_uzp1vnx4sf (TARGET_SVE)
+#define HAVE_aarch64_sve_uzp2vnx4sf (TARGET_SVE)
+#define HAVE_aarch64_sve_zip1vnx2df (TARGET_SVE)
+#define HAVE_aarch64_sve_zip2vnx2df (TARGET_SVE)
+#define HAVE_aarch64_sve_trn1vnx2df (TARGET_SVE)
+#define HAVE_aarch64_sve_trn2vnx2df (TARGET_SVE)
+#define HAVE_aarch64_sve_uzp1vnx2df (TARGET_SVE)
+#define HAVE_aarch64_sve_uzp2vnx2df (TARGET_SVE)
+#define HAVE_addvnx16qi3 (TARGET_SVE)
+#define HAVE_addvnx8hi3 (TARGET_SVE)
+#define HAVE_addvnx4si3 (TARGET_SVE)
+#define HAVE_addvnx2di3 (TARGET_SVE)
+#define HAVE_subvnx16qi3 (TARGET_SVE)
+#define HAVE_subvnx8hi3 (TARGET_SVE)
+#define HAVE_subvnx4si3 (TARGET_SVE)
+#define HAVE_subvnx2di3 (TARGET_SVE)
+#define HAVE_andvnx16qi3 (TARGET_SVE)
+#define HAVE_iorvnx16qi3 (TARGET_SVE)
+#define HAVE_xorvnx16qi3 (TARGET_SVE)
+#define HAVE_andvnx8hi3 (TARGET_SVE)
+#define HAVE_iorvnx8hi3 (TARGET_SVE)
+#define HAVE_xorvnx8hi3 (TARGET_SVE)
+#define HAVE_andvnx4si3 (TARGET_SVE)
+#define HAVE_iorvnx4si3 (TARGET_SVE)
+#define HAVE_xorvnx4si3 (TARGET_SVE)
+#define HAVE_andvnx2di3 (TARGET_SVE)
+#define HAVE_iorvnx2di3 (TARGET_SVE)
+#define HAVE_xorvnx2di3 (TARGET_SVE)
+#define HAVE_bicvnx16qi3 (TARGET_SVE)
+#define HAVE_bicvnx8hi3 (TARGET_SVE)
+#define HAVE_bicvnx4si3 (TARGET_SVE)
+#define HAVE_bicvnx2di3 (TARGET_SVE)
+#define HAVE_andvnx16bi3 (TARGET_SVE)
+#define HAVE_andvnx8bi3 (TARGET_SVE)
+#define HAVE_andvnx4bi3 (TARGET_SVE)
+#define HAVE_andvnx2bi3 (TARGET_SVE)
+#define HAVE_pred_andvnx16bi3 (TARGET_SVE)
+#define HAVE_pred_iorvnx16bi3 (TARGET_SVE)
+#define HAVE_pred_xorvnx16bi3 (TARGET_SVE)
+#define HAVE_pred_andvnx8bi3 (TARGET_SVE)
+#define HAVE_pred_iorvnx8bi3 (TARGET_SVE)
+#define HAVE_pred_xorvnx8bi3 (TARGET_SVE)
+#define HAVE_pred_andvnx4bi3 (TARGET_SVE)
+#define HAVE_pred_iorvnx4bi3 (TARGET_SVE)
+#define HAVE_pred_xorvnx4bi3 (TARGET_SVE)
+#define HAVE_pred_andvnx2bi3 (TARGET_SVE)
+#define HAVE_pred_iorvnx2bi3 (TARGET_SVE)
+#define HAVE_pred_xorvnx2bi3 (TARGET_SVE)
+#define HAVE_ptest_ptruevnx16bi (TARGET_SVE)
+#define HAVE_ptest_ptruevnx8bi (TARGET_SVE)
+#define HAVE_ptest_ptruevnx4bi (TARGET_SVE)
+#define HAVE_ptest_ptruevnx2bi (TARGET_SVE)
+#define HAVE_while_ultsivnx16bi (TARGET_SVE)
+#define HAVE_while_ultdivnx16bi (TARGET_SVE)
+#define HAVE_while_ultsivnx8bi (TARGET_SVE)
+#define HAVE_while_ultdivnx8bi (TARGET_SVE)
+#define HAVE_while_ultsivnx4bi (TARGET_SVE)
+#define HAVE_while_ultdivnx4bi (TARGET_SVE)
+#define HAVE_while_ultsivnx2bi (TARGET_SVE)
+#define HAVE_while_ultdivnx2bi (TARGET_SVE)
+#define HAVE_while_ultsivnx16bi_cc (TARGET_SVE)
+#define HAVE_while_ultdivnx16bi_cc (TARGET_SVE)
+#define HAVE_while_ultsivnx8bi_cc (TARGET_SVE)
+#define HAVE_while_ultdivnx8bi_cc (TARGET_SVE)
+#define HAVE_while_ultsivnx4bi_cc (TARGET_SVE)
+#define HAVE_while_ultdivnx4bi_cc (TARGET_SVE)
+#define HAVE_while_ultsivnx2bi_cc (TARGET_SVE)
+#define HAVE_while_ultdivnx2bi_cc (TARGET_SVE)
+#define HAVE_vcond_mask_vnx16qivnx16bi (TARGET_SVE)
+#define HAVE_vcond_mask_vnx8hivnx8bi (TARGET_SVE)
+#define HAVE_vcond_mask_vnx4sivnx4bi (TARGET_SVE)
+#define HAVE_vcond_mask_vnx2divnx2bi (TARGET_SVE)
+#define HAVE_vcond_mask_vnx8hfvnx8bi (TARGET_SVE)
+#define HAVE_vcond_mask_vnx4sfvnx4bi (TARGET_SVE)
+#define HAVE_vcond_mask_vnx2dfvnx2bi (TARGET_SVE)
+#define HAVE_aarch64_sve_dupvnx16qi_const (TARGET_SVE)
+#define HAVE_aarch64_sve_dupvnx8hi_const (TARGET_SVE)
+#define HAVE_aarch64_sve_dupvnx4si_const (TARGET_SVE)
+#define HAVE_aarch64_sve_dupvnx2di_const (TARGET_SVE)
+#define HAVE_fold_extract_last_vnx16qi (TARGET_SVE)
+#define HAVE_fold_extract_last_vnx8hi (TARGET_SVE)
+#define HAVE_fold_extract_last_vnx4si (TARGET_SVE)
+#define HAVE_fold_extract_last_vnx2di (TARGET_SVE)
+#define HAVE_fold_extract_last_vnx8hf (TARGET_SVE)
+#define HAVE_fold_extract_last_vnx4sf (TARGET_SVE)
+#define HAVE_fold_extract_last_vnx2df (TARGET_SVE)
+#define HAVE_aarch64_sve_floatvnx4sivnx2df2 (TARGET_SVE)
+#define HAVE_aarch64_sve_floatunsvnx4sivnx2df2 (TARGET_SVE)
+#define HAVE_aarch64_sve_floatvnx2divnx2df2 (TARGET_SVE)
+#define HAVE_aarch64_sve_floatunsvnx2divnx2df2 (TARGET_SVE)
+#define HAVE_aarch64_sve_extendvnx8hfvnx4sf2 (TARGET_SVE)
+#define HAVE_aarch64_sve_extendvnx4sfvnx2df2 (TARGET_SVE)
+#define HAVE_aarch64_sve_punpklo_vnx16bi (TARGET_SVE)
+#define HAVE_aarch64_sve_punpkhi_vnx16bi (TARGET_SVE)
+#define HAVE_aarch64_sve_punpklo_vnx8bi (TARGET_SVE)
+#define HAVE_aarch64_sve_punpkhi_vnx8bi (TARGET_SVE)
+#define HAVE_aarch64_sve_punpklo_vnx4bi (TARGET_SVE)
+#define HAVE_aarch64_sve_punpkhi_vnx4bi (TARGET_SVE)
+#define HAVE_aarch64_sve_sunpkhi_vnx16qi (TARGET_SVE)
+#define HAVE_aarch64_sve_uunpkhi_vnx16qi (TARGET_SVE)
+#define HAVE_aarch64_sve_sunpklo_vnx16qi (TARGET_SVE)
+#define HAVE_aarch64_sve_uunpklo_vnx16qi (TARGET_SVE)
+#define HAVE_aarch64_sve_sunpkhi_vnx8hi (TARGET_SVE)
+#define HAVE_aarch64_sve_uunpkhi_vnx8hi (TARGET_SVE)
+#define HAVE_aarch64_sve_sunpklo_vnx8hi (TARGET_SVE)
+#define HAVE_aarch64_sve_uunpklo_vnx8hi (TARGET_SVE)
+#define HAVE_aarch64_sve_sunpkhi_vnx4si (TARGET_SVE)
+#define HAVE_aarch64_sve_uunpkhi_vnx4si (TARGET_SVE)
+#define HAVE_aarch64_sve_sunpklo_vnx4si (TARGET_SVE)
+#define HAVE_aarch64_sve_uunpklo_vnx4si (TARGET_SVE)
+#define HAVE_vec_pack_trunc_vnx8bi (TARGET_SVE)
+#define HAVE_vec_pack_trunc_vnx4bi (TARGET_SVE)
+#define HAVE_vec_pack_trunc_vnx2bi (TARGET_SVE)
+#define HAVE_vec_pack_trunc_vnx8hi (TARGET_SVE)
+#define HAVE_vec_pack_trunc_vnx4si (TARGET_SVE)
+#define HAVE_vec_pack_trunc_vnx2di (TARGET_SVE)
+#define HAVE_vec_shl_insert_vnx16qi (TARGET_SVE)
+#define HAVE_vec_shl_insert_vnx8hi (TARGET_SVE)
+#define HAVE_vec_shl_insert_vnx4si (TARGET_SVE)
+#define HAVE_vec_shl_insert_vnx2di (TARGET_SVE)
+#define HAVE_vec_shl_insert_vnx8hf (TARGET_SVE)
+#define HAVE_vec_shl_insert_vnx4sf (TARGET_SVE)
+#define HAVE_vec_shl_insert_vnx2df (TARGET_SVE)
+#define HAVE_cbranchsi4 1
+#define HAVE_cbranchdi4 1
+#define HAVE_cbranchsf4 1
+#define HAVE_cbranchdf4 1
+#define HAVE_cbranchcc4 1
+#define HAVE_modsi3 1
+#define HAVE_moddi3 1
+#define HAVE_casesi 1
+#define HAVE_casesi_dispatch 1
+#define HAVE_prologue 1
+#define HAVE_epilogue 1
+#define HAVE_sibcall_epilogue 1
+#define HAVE_return (aarch64_use_return_insn_p ())
+#define HAVE_call 1
+#define HAVE_call_value 1
+#define HAVE_sibcall 1
+#define HAVE_sibcall_value 1
+#define HAVE_untyped_call 1
+#define HAVE_movqi 1
+#define HAVE_movhi 1
+#define HAVE_movsi 1
+#define HAVE_movdi 1
+#define HAVE_movti 1
+#define HAVE_movhf 1
+#define HAVE_movsf 1
+#define HAVE_movdf 1
+#define HAVE_movtf 1
+#define HAVE_movmemdi (!STRICT_ALIGNMENT)
+#define HAVE_extendsidi2 1
+#define HAVE_zero_extendsidi2 1
+#define HAVE_extendqisi2 1
+#define HAVE_zero_extendqisi2 1
+#define HAVE_extendqidi2 1
+#define HAVE_zero_extendqidi2 1
+#define HAVE_extendhisi2 1
+#define HAVE_zero_extendhisi2 1
+#define HAVE_extendhidi2 1
+#define HAVE_zero_extendhidi2 1
+#define HAVE_extendqihi2 1
+#define HAVE_zero_extendqihi2 1
+#define HAVE_addsi3 1
+#define HAVE_adddi3 1
+#define HAVE_addvsi4 1
+#define HAVE_addvdi4 1
+#define HAVE_uaddvsi4 1
+#define HAVE_uaddvdi4 1
+#define HAVE_addti3 1
+#define HAVE_addvti4 1
+#define HAVE_uaddvti4 1
+#define HAVE_addsi3_carryin 1
+#define HAVE_adddi3_carryin 1
+#define HAVE_addsi3_carryinC 1
+#define HAVE_adddi3_carryinC 1
+#define HAVE_addsi3_carryinV 1
+#define HAVE_adddi3_carryinV 1
+#define HAVE_subvsi4 1
+#define HAVE_subvdi4 1
+#define HAVE_negvsi3 1
+#define HAVE_negvdi3 1
+#define HAVE_usubvsi4 1
+#define HAVE_usubvdi4 1
+#define HAVE_subti3 1
+#define HAVE_subvti4 1
+#define HAVE_usubvti4 1
+#define HAVE_negvti3 1
+#define HAVE_subsi3_carryin 1
+#define HAVE_subdi3_carryin 1
+#define HAVE_usubsi3_carryinC 1
+#define HAVE_usubdi3_carryinC 1
+#define HAVE_subsi3_carryinV 1
+#define HAVE_subdi3_carryinV 1
+#define HAVE_abssi2 1
+#define HAVE_absdi2 1
+#define HAVE_mulditi3 1
+#define HAVE_umulditi3 1
+#define HAVE_multi3 1
+#define HAVE_cstoresi4 1
+#define HAVE_cstoredi4 1
+#define HAVE_cstorecc4 1
+#define HAVE_cstoresf4 1
+#define HAVE_cstoredf4 1
+#define HAVE_cmovsi6 1
+#define HAVE_cmovdi6 1
+#define HAVE_cmovsf6 1
+#define HAVE_cmovdf6 1
+#define HAVE_movqicc 1
+#define HAVE_movhicc 1
+#define HAVE_movsicc 1
+#define HAVE_movdicc 1
+#define HAVE_movsfsicc 1
+#define HAVE_movsfdicc 1
+#define HAVE_movdfsicc 1
+#define HAVE_movdfdicc 1
+#define HAVE_movsfcc 1
+#define HAVE_movdfcc 1
+#define HAVE_negsicc 1
+#define HAVE_notsicc 1
+#define HAVE_negdicc 1
+#define HAVE_notdicc 1
+#define HAVE_umaxsi3 (TARGET_SVE)
+#define HAVE_umaxdi3 (TARGET_SVE)
+#define HAVE_ffssi2 1
+#define HAVE_ffsdi2 1
+#define HAVE_popcountsi2 (TARGET_SIMD)
+#define HAVE_popcountdi2 (TARGET_SIMD)
+#define HAVE_ashlsi3 1
+#define HAVE_ashrsi3 1
+#define HAVE_lshrsi3 1
+#define HAVE_ashldi3 1
+#define HAVE_ashrdi3 1
+#define HAVE_lshrdi3 1
+#define HAVE_ashlqi3 1
+#define HAVE_ashlhi3 1
+#define HAVE_rotrsi3 1
+#define HAVE_rotrdi3 1
+#define HAVE_rotlsi3 1
+#define HAVE_rotldi3 1
+#define HAVE_extv 1
+#define HAVE_extzv 1
+#define HAVE_insvsi 1
+#define HAVE_insvdi 1
+#define HAVE_fmahf4 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_fmasf4 (TARGET_FLOAT)
+#define HAVE_fmadf4 (TARGET_FLOAT)
+#define HAVE_fnmahf4 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_fnmasf4 (TARGET_FLOAT)
+#define HAVE_fnmadf4 (TARGET_FLOAT)
+#define HAVE_fmssf4 (TARGET_FLOAT)
+#define HAVE_fmsdf4 (TARGET_FLOAT)
+#define HAVE_fnmssf4 (TARGET_FLOAT)
+#define HAVE_fnmsdf4 (TARGET_FLOAT)
+#define HAVE_floatsihf2 (TARGET_FLOAT)
+#define HAVE_floatunssihf2 (TARGET_FLOAT)
+#define HAVE_floatdihf2 (TARGET_FLOAT && (TARGET_FP_F16INST || TARGET_SIMD))
+#define HAVE_floatunsdihf2 (TARGET_FLOAT && (TARGET_FP_F16INST || TARGET_SIMD))
+#define HAVE_divhf3 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_divsf3 (TARGET_FLOAT)
+#define HAVE_divdf3 (TARGET_FLOAT)
+#define HAVE_sqrthf2 ((TARGET_FLOAT) && (AARCH64_ISA_F16))
+#define HAVE_sqrtsf2 (TARGET_FLOAT)
+#define HAVE_sqrtdf2 (TARGET_FLOAT)
+#define HAVE_lrintsfsi2 (TARGET_FLOAT \
+   && ((GET_MODE_SIZE (SFmode) <= GET_MODE_SIZE (SImode)) \
+   || !flag_trapping_math || flag_fp_int_builtin_inexact))
+#define HAVE_lrintsfdi2 (TARGET_FLOAT \
+   && ((GET_MODE_SIZE (SFmode) <= GET_MODE_SIZE (DImode)) \
+   || !flag_trapping_math || flag_fp_int_builtin_inexact))
+#define HAVE_lrintdfsi2 (TARGET_FLOAT \
+   && ((GET_MODE_SIZE (DFmode) <= GET_MODE_SIZE (SImode)) \
+   || !flag_trapping_math || flag_fp_int_builtin_inexact))
+#define HAVE_lrintdfdi2 (TARGET_FLOAT \
+   && ((GET_MODE_SIZE (DFmode) <= GET_MODE_SIZE (DImode)) \
+   || !flag_trapping_math || flag_fp_int_builtin_inexact))
+#define HAVE_copysignsf3 (TARGET_FLOAT && TARGET_SIMD)
+#define HAVE_copysigndf3 (TARGET_FLOAT && TARGET_SIMD)
+#define HAVE_xorsignsf3 (TARGET_FLOAT && TARGET_SIMD)
+#define HAVE_xorsigndf3 (TARGET_FLOAT && TARGET_SIMD)
+#define HAVE_aarch64_reload_movcpsfsi ((TARGET_FLOAT) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_aarch64_reload_movcpsfdi ((TARGET_FLOAT) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_aarch64_reload_movcpdfsi ((TARGET_FLOAT) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_aarch64_reload_movcpdfdi ((TARGET_FLOAT) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_aarch64_reload_movcptfsi ((TARGET_FLOAT) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_aarch64_reload_movcptfdi ((TARGET_FLOAT) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_aarch64_reload_movcpv8qisi ((TARGET_FLOAT) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_aarch64_reload_movcpv16qisi ((TARGET_FLOAT) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_aarch64_reload_movcpv4hisi ((TARGET_FLOAT) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_aarch64_reload_movcpv8hisi ((TARGET_FLOAT) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_aarch64_reload_movcpv2sisi ((TARGET_FLOAT) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_aarch64_reload_movcpv4sisi ((TARGET_FLOAT) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_aarch64_reload_movcpv2disi ((TARGET_FLOAT) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_aarch64_reload_movcpv2sfsi ((TARGET_FLOAT) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_aarch64_reload_movcpv4sfsi ((TARGET_FLOAT) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_aarch64_reload_movcpv2dfsi ((TARGET_FLOAT) && (ptr_mode == SImode || Pmode == SImode))
+#define HAVE_aarch64_reload_movcpv8qidi ((TARGET_FLOAT) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_aarch64_reload_movcpv16qidi ((TARGET_FLOAT) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_aarch64_reload_movcpv4hidi ((TARGET_FLOAT) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_aarch64_reload_movcpv8hidi ((TARGET_FLOAT) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_aarch64_reload_movcpv2sidi ((TARGET_FLOAT) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_aarch64_reload_movcpv4sidi ((TARGET_FLOAT) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_aarch64_reload_movcpv2didi ((TARGET_FLOAT) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_aarch64_reload_movcpv2sfdi ((TARGET_FLOAT) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_aarch64_reload_movcpv4sfdi ((TARGET_FLOAT) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_aarch64_reload_movcpv2dfdi ((TARGET_FLOAT) && (ptr_mode == DImode || Pmode == DImode))
+#define HAVE_aarch64_reload_movti (TARGET_FLOAT)
+#define HAVE_aarch64_reload_movtf (TARGET_FLOAT)
+#define HAVE_add_losym 1
+#define HAVE_tlsgd_small_si (ptr_mode == SImode)
+#define HAVE_tlsgd_small_di (ptr_mode == DImode)
+#define HAVE_tlsdesc_small_si ((TARGET_TLS_DESC) && (ptr_mode == SImode))
+#define HAVE_tlsdesc_small_di ((TARGET_TLS_DESC) && (ptr_mode == DImode))
+#define HAVE_get_thread_pointerdi 1
+#define HAVE_stack_protect_set 1
+#define HAVE_stack_protect_test 1
+#define HAVE_doloop_end (optimize > 0 && flag_modulo_sched)
+#define HAVE_set_clobber_cc 1
+#define HAVE_despeculate_copyqi 1
+#define HAVE_despeculate_copyhi 1
+#define HAVE_despeculate_copysi 1
+#define HAVE_despeculate_copydi 1
+#define HAVE_despeculate_copyti 1
+#define HAVE_movv8qi (TARGET_SIMD)
+#define HAVE_movv16qi (TARGET_SIMD)
+#define HAVE_movv4hi (TARGET_SIMD)
+#define HAVE_movv8hi (TARGET_SIMD)
+#define HAVE_movv2si (TARGET_SIMD)
+#define HAVE_movv4si (TARGET_SIMD)
+#define HAVE_movv2di (TARGET_SIMD)
+#define HAVE_movv4hf (TARGET_SIMD)
+#define HAVE_movv8hf (TARGET_SIMD)
+#define HAVE_movv2sf (TARGET_SIMD)
+#define HAVE_movv4sf (TARGET_SIMD)
+#define HAVE_movv2df (TARGET_SIMD)
+#define HAVE_movmisalignv8qi (TARGET_SIMD)
+#define HAVE_movmisalignv16qi (TARGET_SIMD)
+#define HAVE_movmisalignv4hi (TARGET_SIMD)
+#define HAVE_movmisalignv8hi (TARGET_SIMD)
+#define HAVE_movmisalignv2si (TARGET_SIMD)
+#define HAVE_movmisalignv4si (TARGET_SIMD)
+#define HAVE_movmisalignv2di (TARGET_SIMD)
+#define HAVE_movmisalignv2sf (TARGET_SIMD)
+#define HAVE_movmisalignv4sf (TARGET_SIMD)
+#define HAVE_movmisalignv2df (TARGET_SIMD)
+#define HAVE_aarch64_split_simd_movv16qi (TARGET_SIMD)
+#define HAVE_aarch64_split_simd_movv8hi (TARGET_SIMD)
+#define HAVE_aarch64_split_simd_movv4si (TARGET_SIMD)
+#define HAVE_aarch64_split_simd_movv2di (TARGET_SIMD)
+#define HAVE_aarch64_split_simd_movv8hf (TARGET_SIMD)
+#define HAVE_aarch64_split_simd_movv4sf (TARGET_SIMD)
+#define HAVE_aarch64_split_simd_movv2df (TARGET_SIMD)
+#define HAVE_ctzv2si2 (TARGET_SIMD)
+#define HAVE_ctzv4si2 (TARGET_SIMD)
+#define HAVE_xorsignv4hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_xorsignv8hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_xorsignv2sf3 (TARGET_SIMD)
+#define HAVE_xorsignv4sf3 (TARGET_SIMD)
+#define HAVE_xorsignv2df3 (TARGET_SIMD)
+#define HAVE_sdot_prodv8qi (TARGET_DOTPROD)
+#define HAVE_udot_prodv8qi (TARGET_DOTPROD)
+#define HAVE_sdot_prodv16qi (TARGET_DOTPROD)
+#define HAVE_udot_prodv16qi (TARGET_DOTPROD)
+#define HAVE_copysignv4hf3 ((TARGET_FLOAT && TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_copysignv8hf3 ((TARGET_FLOAT && TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_copysignv2sf3 (TARGET_FLOAT && TARGET_SIMD)
+#define HAVE_copysignv4sf3 (TARGET_FLOAT && TARGET_SIMD)
+#define HAVE_copysignv2df3 (TARGET_FLOAT && TARGET_SIMD)
+#define HAVE_rsqrtv2sf2 (TARGET_SIMD)
+#define HAVE_rsqrtv4sf2 (TARGET_SIMD)
+#define HAVE_rsqrtv2df2 (TARGET_SIMD)
+#define HAVE_rsqrtsf2 (TARGET_SIMD)
+#define HAVE_rsqrtdf2 (TARGET_SIMD)
+#define HAVE_ssadv16qi (TARGET_SIMD)
+#define HAVE_usadv16qi (TARGET_SIMD)
+#define HAVE_ashlv8qi3 (TARGET_SIMD)
+#define HAVE_ashlv16qi3 (TARGET_SIMD)
+#define HAVE_ashlv4hi3 (TARGET_SIMD)
+#define HAVE_ashlv8hi3 (TARGET_SIMD)
+#define HAVE_ashlv2si3 (TARGET_SIMD)
+#define HAVE_ashlv4si3 (TARGET_SIMD)
+#define HAVE_ashlv2di3 (TARGET_SIMD)
+#define HAVE_lshrv8qi3 (TARGET_SIMD)
+#define HAVE_lshrv16qi3 (TARGET_SIMD)
+#define HAVE_lshrv4hi3 (TARGET_SIMD)
+#define HAVE_lshrv8hi3 (TARGET_SIMD)
+#define HAVE_lshrv2si3 (TARGET_SIMD)
+#define HAVE_lshrv4si3 (TARGET_SIMD)
+#define HAVE_lshrv2di3 (TARGET_SIMD)
+#define HAVE_ashrv8qi3 (TARGET_SIMD)
+#define HAVE_ashrv16qi3 (TARGET_SIMD)
+#define HAVE_ashrv4hi3 (TARGET_SIMD)
+#define HAVE_ashrv8hi3 (TARGET_SIMD)
+#define HAVE_ashrv2si3 (TARGET_SIMD)
+#define HAVE_ashrv4si3 (TARGET_SIMD)
+#define HAVE_ashrv2di3 (TARGET_SIMD)
+#define HAVE_vashlv8qi3 (TARGET_SIMD)
+#define HAVE_vashlv16qi3 (TARGET_SIMD)
+#define HAVE_vashlv4hi3 (TARGET_SIMD)
+#define HAVE_vashlv8hi3 (TARGET_SIMD)
+#define HAVE_vashlv2si3 (TARGET_SIMD)
+#define HAVE_vashlv4si3 (TARGET_SIMD)
+#define HAVE_vashlv2di3 (TARGET_SIMD)
+#define HAVE_vashrv8qi3 (TARGET_SIMD)
+#define HAVE_vashrv16qi3 (TARGET_SIMD)
+#define HAVE_vashrv4hi3 (TARGET_SIMD)
+#define HAVE_vashrv8hi3 (TARGET_SIMD)
+#define HAVE_vashrv2si3 (TARGET_SIMD)
+#define HAVE_vashrv4si3 (TARGET_SIMD)
+#define HAVE_aarch64_ashr_simddi (TARGET_SIMD)
+#define HAVE_vlshrv8qi3 (TARGET_SIMD)
+#define HAVE_vlshrv16qi3 (TARGET_SIMD)
+#define HAVE_vlshrv4hi3 (TARGET_SIMD)
+#define HAVE_vlshrv8hi3 (TARGET_SIMD)
+#define HAVE_vlshrv2si3 (TARGET_SIMD)
+#define HAVE_vlshrv4si3 (TARGET_SIMD)
+#define HAVE_aarch64_lshr_simddi (TARGET_SIMD)
+#define HAVE_vec_setv8qi (TARGET_SIMD)
+#define HAVE_vec_setv16qi (TARGET_SIMD)
+#define HAVE_vec_setv4hi (TARGET_SIMD)
+#define HAVE_vec_setv8hi (TARGET_SIMD)
+#define HAVE_vec_setv2si (TARGET_SIMD)
+#define HAVE_vec_setv4si (TARGET_SIMD)
+#define HAVE_vec_setv2di (TARGET_SIMD)
+#define HAVE_vec_setv4hf (TARGET_SIMD)
+#define HAVE_vec_setv8hf (TARGET_SIMD)
+#define HAVE_vec_setv2sf (TARGET_SIMD)
+#define HAVE_vec_setv4sf (TARGET_SIMD)
+#define HAVE_vec_setv2df (TARGET_SIMD)
+#define HAVE_smaxv2di3 (TARGET_SIMD)
+#define HAVE_sminv2di3 (TARGET_SIMD)
+#define HAVE_umaxv2di3 (TARGET_SIMD)
+#define HAVE_uminv2di3 (TARGET_SIMD)
+#define HAVE_move_lo_quad_v16qi (TARGET_SIMD)
+#define HAVE_move_lo_quad_v8hi (TARGET_SIMD)
+#define HAVE_move_lo_quad_v4si (TARGET_SIMD)
+#define HAVE_move_lo_quad_v2di (TARGET_SIMD)
+#define HAVE_move_lo_quad_v8hf (TARGET_SIMD)
+#define HAVE_move_lo_quad_v4sf (TARGET_SIMD)
+#define HAVE_move_lo_quad_v2df (TARGET_SIMD)
+#define HAVE_move_hi_quad_v16qi (TARGET_SIMD)
+#define HAVE_move_hi_quad_v8hi (TARGET_SIMD)
+#define HAVE_move_hi_quad_v4si (TARGET_SIMD)
+#define HAVE_move_hi_quad_v2di (TARGET_SIMD)
+#define HAVE_move_hi_quad_v8hf (TARGET_SIMD)
+#define HAVE_move_hi_quad_v4sf (TARGET_SIMD)
+#define HAVE_move_hi_quad_v2df (TARGET_SIMD)
+#define HAVE_vec_pack_trunc_v4hi (TARGET_SIMD)
+#define HAVE_vec_pack_trunc_v2si (TARGET_SIMD)
+#define HAVE_vec_pack_trunc_di (TARGET_SIMD)
+#define HAVE_vec_unpacks_hi_v16qi (TARGET_SIMD)
+#define HAVE_vec_unpacku_hi_v16qi (TARGET_SIMD)
+#define HAVE_vec_unpacks_hi_v8hi (TARGET_SIMD)
+#define HAVE_vec_unpacku_hi_v8hi (TARGET_SIMD)
+#define HAVE_vec_unpacks_hi_v4si (TARGET_SIMD)
+#define HAVE_vec_unpacku_hi_v4si (TARGET_SIMD)
+#define HAVE_vec_unpacks_lo_v16qi (TARGET_SIMD)
+#define HAVE_vec_unpacku_lo_v16qi (TARGET_SIMD)
+#define HAVE_vec_unpacks_lo_v8hi (TARGET_SIMD)
+#define HAVE_vec_unpacku_lo_v8hi (TARGET_SIMD)
+#define HAVE_vec_unpacks_lo_v4si (TARGET_SIMD)
+#define HAVE_vec_unpacku_lo_v4si (TARGET_SIMD)
+#define HAVE_vec_widen_smult_lo_v16qi (TARGET_SIMD)
+#define HAVE_vec_widen_umult_lo_v16qi (TARGET_SIMD)
+#define HAVE_vec_widen_smult_lo_v8hi (TARGET_SIMD)
+#define HAVE_vec_widen_umult_lo_v8hi (TARGET_SIMD)
+#define HAVE_vec_widen_smult_lo_v4si (TARGET_SIMD)
+#define HAVE_vec_widen_umult_lo_v4si (TARGET_SIMD)
+#define HAVE_vec_widen_smult_hi_v16qi (TARGET_SIMD)
+#define HAVE_vec_widen_umult_hi_v16qi (TARGET_SIMD)
+#define HAVE_vec_widen_smult_hi_v8hi (TARGET_SIMD)
+#define HAVE_vec_widen_umult_hi_v8hi (TARGET_SIMD)
+#define HAVE_vec_widen_smult_hi_v4si (TARGET_SIMD)
+#define HAVE_vec_widen_umult_hi_v4si (TARGET_SIMD)
+#define HAVE_divv4hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_divv8hf3 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_divv2sf3 (TARGET_SIMD)
+#define HAVE_divv4sf3 (TARGET_SIMD)
+#define HAVE_divv2df3 (TARGET_SIMD)
+#define HAVE_fixv4hfv4hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fixunsv4hfv4hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fixv8hfv8hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fixunsv8hfv8hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fixv2sfv2si2 (TARGET_SIMD)
+#define HAVE_fixunsv2sfv2si2 (TARGET_SIMD)
+#define HAVE_fixv4sfv4si2 (TARGET_SIMD)
+#define HAVE_fixunsv4sfv4si2 (TARGET_SIMD)
+#define HAVE_fixv2dfv2di2 (TARGET_SIMD)
+#define HAVE_fixunsv2dfv2di2 (TARGET_SIMD)
+#define HAVE_fix_truncv4hfv4hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fixuns_truncv4hfv4hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fix_truncv8hfv8hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fixuns_truncv8hfv8hi2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_fix_truncv2sfv2si2 (TARGET_SIMD)
+#define HAVE_fixuns_truncv2sfv2si2 (TARGET_SIMD)
+#define HAVE_fix_truncv4sfv4si2 (TARGET_SIMD)
+#define HAVE_fixuns_truncv4sfv4si2 (TARGET_SIMD)
+#define HAVE_fix_truncv2dfv2di2 (TARGET_SIMD)
+#define HAVE_fixuns_truncv2dfv2di2 (TARGET_SIMD)
+#define HAVE_ftruncv4hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_ftruncv8hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_ftruncv2sf2 (TARGET_SIMD)
+#define HAVE_ftruncv4sf2 (TARGET_SIMD)
+#define HAVE_ftruncv2df2 (TARGET_SIMD)
+#define HAVE_vec_unpacks_lo_v8hf (TARGET_SIMD)
+#define HAVE_vec_unpacks_lo_v4sf (TARGET_SIMD)
+#define HAVE_vec_unpacks_hi_v8hf (TARGET_SIMD)
+#define HAVE_vec_unpacks_hi_v4sf (TARGET_SIMD)
+#define HAVE_aarch64_float_truncate_hi_v4sf (TARGET_SIMD)
+#define HAVE_aarch64_float_truncate_hi_v8hf (TARGET_SIMD)
+#define HAVE_vec_pack_trunc_v2df (TARGET_SIMD)
+#define HAVE_vec_pack_trunc_df (TARGET_SIMD)
+#define HAVE_reduc_plus_scal_v8qi (TARGET_SIMD)
+#define HAVE_reduc_plus_scal_v16qi (TARGET_SIMD)
+#define HAVE_reduc_plus_scal_v4hi (TARGET_SIMD)
+#define HAVE_reduc_plus_scal_v8hi (TARGET_SIMD)
+#define HAVE_reduc_plus_scal_v2si (TARGET_SIMD)
+#define HAVE_reduc_plus_scal_v4si (TARGET_SIMD)
+#define HAVE_reduc_plus_scal_v2di (TARGET_SIMD)
+#define HAVE_reduc_plus_scal_v4sf (TARGET_SIMD)
+#define HAVE_reduc_smax_nan_scal_v4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_reduc_smin_nan_scal_v4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_reduc_smax_scal_v4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_reduc_smin_scal_v4hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_reduc_smax_nan_scal_v8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_reduc_smin_nan_scal_v8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_reduc_smax_scal_v8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_reduc_smin_scal_v8hf ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_reduc_smax_nan_scal_v2sf (TARGET_SIMD)
+#define HAVE_reduc_smin_nan_scal_v2sf (TARGET_SIMD)
+#define HAVE_reduc_smax_scal_v2sf (TARGET_SIMD)
+#define HAVE_reduc_smin_scal_v2sf (TARGET_SIMD)
+#define HAVE_reduc_smax_nan_scal_v4sf (TARGET_SIMD)
+#define HAVE_reduc_smin_nan_scal_v4sf (TARGET_SIMD)
+#define HAVE_reduc_smax_scal_v4sf (TARGET_SIMD)
+#define HAVE_reduc_smin_scal_v4sf (TARGET_SIMD)
+#define HAVE_reduc_smax_nan_scal_v2df (TARGET_SIMD)
+#define HAVE_reduc_smin_nan_scal_v2df (TARGET_SIMD)
+#define HAVE_reduc_smax_scal_v2df (TARGET_SIMD)
+#define HAVE_reduc_smin_scal_v2df (TARGET_SIMD)
+#define HAVE_reduc_umax_scal_v8qi (TARGET_SIMD)
+#define HAVE_reduc_umin_scal_v8qi (TARGET_SIMD)
+#define HAVE_reduc_smax_scal_v8qi (TARGET_SIMD)
+#define HAVE_reduc_smin_scal_v8qi (TARGET_SIMD)
+#define HAVE_reduc_umax_scal_v16qi (TARGET_SIMD)
+#define HAVE_reduc_umin_scal_v16qi (TARGET_SIMD)
+#define HAVE_reduc_smax_scal_v16qi (TARGET_SIMD)
+#define HAVE_reduc_smin_scal_v16qi (TARGET_SIMD)
+#define HAVE_reduc_umax_scal_v4hi (TARGET_SIMD)
+#define HAVE_reduc_umin_scal_v4hi (TARGET_SIMD)
+#define HAVE_reduc_smax_scal_v4hi (TARGET_SIMD)
+#define HAVE_reduc_smin_scal_v4hi (TARGET_SIMD)
+#define HAVE_reduc_umax_scal_v8hi (TARGET_SIMD)
+#define HAVE_reduc_umin_scal_v8hi (TARGET_SIMD)
+#define HAVE_reduc_smax_scal_v8hi (TARGET_SIMD)
+#define HAVE_reduc_smin_scal_v8hi (TARGET_SIMD)
+#define HAVE_reduc_umax_scal_v2si (TARGET_SIMD)
+#define HAVE_reduc_umin_scal_v2si (TARGET_SIMD)
+#define HAVE_reduc_smax_scal_v2si (TARGET_SIMD)
+#define HAVE_reduc_smin_scal_v2si (TARGET_SIMD)
+#define HAVE_reduc_umax_scal_v4si (TARGET_SIMD)
+#define HAVE_reduc_umin_scal_v4si (TARGET_SIMD)
+#define HAVE_reduc_smax_scal_v4si (TARGET_SIMD)
+#define HAVE_reduc_smin_scal_v4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv8qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv16qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv4hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv8hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv2si (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv4si (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv2di (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv4hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv8hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv2sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv4sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_bslv2df (TARGET_SIMD)
+#define HAVE_aarch64_simd_bsldi (TARGET_SIMD)
+#define HAVE_aarch64_simd_bsldf (TARGET_SIMD)
+#define HAVE_vcond_mask_v8qiv8qi (TARGET_SIMD)
+#define HAVE_vcond_mask_v16qiv16qi (TARGET_SIMD)
+#define HAVE_vcond_mask_v4hiv4hi (TARGET_SIMD)
+#define HAVE_vcond_mask_v8hiv8hi (TARGET_SIMD)
+#define HAVE_vcond_mask_v2siv2si (TARGET_SIMD)
+#define HAVE_vcond_mask_v4siv4si (TARGET_SIMD)
+#define HAVE_vcond_mask_v2div2di (TARGET_SIMD)
+#define HAVE_vcond_mask_v2sfv2si (TARGET_SIMD)
+#define HAVE_vcond_mask_v4sfv4si (TARGET_SIMD)
+#define HAVE_vcond_mask_v2dfv2di (TARGET_SIMD)
+#define HAVE_vcond_mask_didi (TARGET_SIMD)
+#define HAVE_vec_cmpv8qiv8qi (TARGET_SIMD)
+#define HAVE_vec_cmpv16qiv16qi (TARGET_SIMD)
+#define HAVE_vec_cmpv4hiv4hi (TARGET_SIMD)
+#define HAVE_vec_cmpv8hiv8hi (TARGET_SIMD)
+#define HAVE_vec_cmpv2siv2si (TARGET_SIMD)
+#define HAVE_vec_cmpv4siv4si (TARGET_SIMD)
+#define HAVE_vec_cmpv2div2di (TARGET_SIMD)
+#define HAVE_vec_cmpdidi (TARGET_SIMD)
+#define HAVE_vec_cmpv2sfv2si (TARGET_SIMD)
+#define HAVE_vec_cmpv4sfv4si (TARGET_SIMD)
+#define HAVE_vec_cmpv2dfv2di (TARGET_SIMD)
+#define HAVE_vec_cmpuv8qiv8qi (TARGET_SIMD)
+#define HAVE_vec_cmpuv16qiv16qi (TARGET_SIMD)
+#define HAVE_vec_cmpuv4hiv4hi (TARGET_SIMD)
+#define HAVE_vec_cmpuv8hiv8hi (TARGET_SIMD)
+#define HAVE_vec_cmpuv2siv2si (TARGET_SIMD)
+#define HAVE_vec_cmpuv4siv4si (TARGET_SIMD)
+#define HAVE_vec_cmpuv2div2di (TARGET_SIMD)
+#define HAVE_vec_cmpudidi (TARGET_SIMD)
+#define HAVE_vcondv8qiv8qi (TARGET_SIMD)
+#define HAVE_vcondv16qiv16qi (TARGET_SIMD)
+#define HAVE_vcondv4hiv4hi (TARGET_SIMD)
+#define HAVE_vcondv8hiv8hi (TARGET_SIMD)
+#define HAVE_vcondv2siv2si (TARGET_SIMD)
+#define HAVE_vcondv4siv4si (TARGET_SIMD)
+#define HAVE_vcondv2div2di (TARGET_SIMD)
+#define HAVE_vcondv2sfv2sf (TARGET_SIMD)
+#define HAVE_vcondv4sfv4sf (TARGET_SIMD)
+#define HAVE_vcondv2dfv2df (TARGET_SIMD)
+#define HAVE_vconddidi (TARGET_SIMD)
+#define HAVE_vcondv2siv2sf (TARGET_SIMD)
+#define HAVE_vcondv2sfv2si (TARGET_SIMD)
+#define HAVE_vcondv4siv4sf (TARGET_SIMD)
+#define HAVE_vcondv4sfv4si (TARGET_SIMD)
+#define HAVE_vcondv2div2df (TARGET_SIMD)
+#define HAVE_vcondv2dfv2di (TARGET_SIMD)
+#define HAVE_vconduv8qiv8qi (TARGET_SIMD)
+#define HAVE_vconduv16qiv16qi (TARGET_SIMD)
+#define HAVE_vconduv4hiv4hi (TARGET_SIMD)
+#define HAVE_vconduv8hiv8hi (TARGET_SIMD)
+#define HAVE_vconduv2siv2si (TARGET_SIMD)
+#define HAVE_vconduv4siv4si (TARGET_SIMD)
+#define HAVE_vconduv2div2di (TARGET_SIMD)
+#define HAVE_vcondudidi (TARGET_SIMD)
+#define HAVE_vconduv2sfv2si (TARGET_SIMD)
+#define HAVE_vconduv4sfv4si (TARGET_SIMD)
+#define HAVE_vconduv2dfv2di (TARGET_SIMD)
+#define HAVE_aarch64_combinev8qi (TARGET_SIMD)
+#define HAVE_aarch64_combinev4hi (TARGET_SIMD)
+#define HAVE_aarch64_combinev4hf (TARGET_SIMD)
+#define HAVE_aarch64_combinev2si (TARGET_SIMD)
+#define HAVE_aarch64_combinev2sf (TARGET_SIMD)
+#define HAVE_aarch64_combinedi (TARGET_SIMD)
+#define HAVE_aarch64_combinedf (TARGET_SIMD)
+#define HAVE_aarch64_simd_combinev8qi (TARGET_SIMD)
+#define HAVE_aarch64_simd_combinev4hi (TARGET_SIMD)
+#define HAVE_aarch64_simd_combinev4hf (TARGET_SIMD)
+#define HAVE_aarch64_simd_combinev2si (TARGET_SIMD)
+#define HAVE_aarch64_simd_combinev2sf (TARGET_SIMD)
+#define HAVE_aarch64_simd_combinedi (TARGET_SIMD)
+#define HAVE_aarch64_simd_combinedf (TARGET_SIMD)
+#define HAVE_aarch64_saddl2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_saddl2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_saddl2v4si (TARGET_SIMD)
+#define HAVE_aarch64_uaddl2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_uaddl2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_uaddl2v4si (TARGET_SIMD)
+#define HAVE_aarch64_ssubl2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_ssubl2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_ssubl2v4si (TARGET_SIMD)
+#define HAVE_aarch64_usubl2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_usubl2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_usubl2v4si (TARGET_SIMD)
+#define HAVE_widen_ssumv16qi3 (TARGET_SIMD)
+#define HAVE_widen_ssumv8hi3 (TARGET_SIMD)
+#define HAVE_widen_ssumv4si3 (TARGET_SIMD)
+#define HAVE_widen_ssumv8qi3 (TARGET_SIMD)
+#define HAVE_widen_ssumv4hi3 (TARGET_SIMD)
+#define HAVE_widen_ssumv2si3 (TARGET_SIMD)
+#define HAVE_widen_usumv16qi3 (TARGET_SIMD)
+#define HAVE_widen_usumv8hi3 (TARGET_SIMD)
+#define HAVE_widen_usumv4si3 (TARGET_SIMD)
+#define HAVE_widen_usumv8qi3 (TARGET_SIMD)
+#define HAVE_widen_usumv4hi3 (TARGET_SIMD)
+#define HAVE_widen_usumv2si3 (TARGET_SIMD)
+#define HAVE_aarch64_saddw2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_saddw2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_saddw2v4si (TARGET_SIMD)
+#define HAVE_aarch64_uaddw2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_uaddw2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_uaddw2v4si (TARGET_SIMD)
+#define HAVE_aarch64_ssubw2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_ssubw2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_ssubw2v4si (TARGET_SIMD)
+#define HAVE_aarch64_usubw2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_usubw2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_usubw2v4si (TARGET_SIMD)
+#define HAVE_avgv8qi3_floor (TARGET_SIMD)
+#define HAVE_uavgv8qi3_floor (TARGET_SIMD)
+#define HAVE_avgv16qi3_floor (TARGET_SIMD)
+#define HAVE_uavgv16qi3_floor (TARGET_SIMD)
+#define HAVE_avgv4hi3_floor (TARGET_SIMD)
+#define HAVE_uavgv4hi3_floor (TARGET_SIMD)
+#define HAVE_avgv8hi3_floor (TARGET_SIMD)
+#define HAVE_uavgv8hi3_floor (TARGET_SIMD)
+#define HAVE_avgv2si3_floor (TARGET_SIMD)
+#define HAVE_uavgv2si3_floor (TARGET_SIMD)
+#define HAVE_avgv4si3_floor (TARGET_SIMD)
+#define HAVE_uavgv4si3_floor (TARGET_SIMD)
+#define HAVE_avgv8qi3_ceil (TARGET_SIMD)
+#define HAVE_uavgv8qi3_ceil (TARGET_SIMD)
+#define HAVE_avgv16qi3_ceil (TARGET_SIMD)
+#define HAVE_uavgv16qi3_ceil (TARGET_SIMD)
+#define HAVE_avgv4hi3_ceil (TARGET_SIMD)
+#define HAVE_uavgv4hi3_ceil (TARGET_SIMD)
+#define HAVE_avgv8hi3_ceil (TARGET_SIMD)
+#define HAVE_uavgv8hi3_ceil (TARGET_SIMD)
+#define HAVE_avgv2si3_ceil (TARGET_SIMD)
+#define HAVE_uavgv2si3_ceil (TARGET_SIMD)
+#define HAVE_avgv4si3_ceil (TARGET_SIMD)
+#define HAVE_uavgv4si3_ceil (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal2v4si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl2v4si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal2_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal2_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal2_laneqv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal2_laneqv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl2_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl2_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl2_laneqv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl2_laneqv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal2_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlal2_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl2_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmlsl2_nv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull2v4si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull2_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull2_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull2_laneqv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull2_laneqv4si (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull2_nv8hi (TARGET_SIMD)
+#define HAVE_aarch64_sqdmull2_nv4si (TARGET_SIMD)
+#define HAVE_sqrtv4hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_sqrtv8hf2 ((TARGET_SIMD) && (TARGET_SIMD_F16INST))
+#define HAVE_sqrtv2sf2 (TARGET_SIMD)
+#define HAVE_sqrtv4sf2 (TARGET_SIMD)
+#define HAVE_sqrtv2df2 (TARGET_SIMD)
+#define HAVE_vec_load_lanesoiv16qi (TARGET_SIMD)
+#define HAVE_vec_load_lanesoiv8hi (TARGET_SIMD)
+#define HAVE_vec_load_lanesoiv4si (TARGET_SIMD)
+#define HAVE_vec_load_lanesoiv2di (TARGET_SIMD)
+#define HAVE_vec_load_lanesoiv8hf (TARGET_SIMD)
+#define HAVE_vec_load_lanesoiv4sf (TARGET_SIMD)
+#define HAVE_vec_load_lanesoiv2df (TARGET_SIMD)
+#define HAVE_vec_store_lanesoiv16qi (TARGET_SIMD)
+#define HAVE_vec_store_lanesoiv8hi (TARGET_SIMD)
+#define HAVE_vec_store_lanesoiv4si (TARGET_SIMD)
+#define HAVE_vec_store_lanesoiv2di (TARGET_SIMD)
+#define HAVE_vec_store_lanesoiv8hf (TARGET_SIMD)
+#define HAVE_vec_store_lanesoiv4sf (TARGET_SIMD)
+#define HAVE_vec_store_lanesoiv2df (TARGET_SIMD)
+#define HAVE_vec_load_lanesciv16qi (TARGET_SIMD)
+#define HAVE_vec_load_lanesciv8hi (TARGET_SIMD)
+#define HAVE_vec_load_lanesciv4si (TARGET_SIMD)
+#define HAVE_vec_load_lanesciv2di (TARGET_SIMD)
+#define HAVE_vec_load_lanesciv8hf (TARGET_SIMD)
+#define HAVE_vec_load_lanesciv4sf (TARGET_SIMD)
+#define HAVE_vec_load_lanesciv2df (TARGET_SIMD)
+#define HAVE_vec_store_lanesciv16qi (TARGET_SIMD)
+#define HAVE_vec_store_lanesciv8hi (TARGET_SIMD)
+#define HAVE_vec_store_lanesciv4si (TARGET_SIMD)
+#define HAVE_vec_store_lanesciv2di (TARGET_SIMD)
+#define HAVE_vec_store_lanesciv8hf (TARGET_SIMD)
+#define HAVE_vec_store_lanesciv4sf (TARGET_SIMD)
+#define HAVE_vec_store_lanesciv2df (TARGET_SIMD)
+#define HAVE_vec_load_lanesxiv16qi (TARGET_SIMD)
+#define HAVE_vec_load_lanesxiv8hi (TARGET_SIMD)
+#define HAVE_vec_load_lanesxiv4si (TARGET_SIMD)
+#define HAVE_vec_load_lanesxiv2di (TARGET_SIMD)
+#define HAVE_vec_load_lanesxiv8hf (TARGET_SIMD)
+#define HAVE_vec_load_lanesxiv4sf (TARGET_SIMD)
+#define HAVE_vec_load_lanesxiv2df (TARGET_SIMD)
+#define HAVE_vec_store_lanesxiv16qi (TARGET_SIMD)
+#define HAVE_vec_store_lanesxiv8hi (TARGET_SIMD)
+#define HAVE_vec_store_lanesxiv4si (TARGET_SIMD)
+#define HAVE_vec_store_lanesxiv2di (TARGET_SIMD)
+#define HAVE_vec_store_lanesxiv8hf (TARGET_SIMD)
+#define HAVE_vec_store_lanesxiv4sf (TARGET_SIMD)
+#define HAVE_vec_store_lanesxiv2df (TARGET_SIMD)
+#define HAVE_movoi (TARGET_SIMD)
+#define HAVE_movci (TARGET_SIMD)
+#define HAVE_movxi (TARGET_SIMD)
+#define HAVE_aarch64_ld1x3v8qi (TARGET_SIMD)
+#define HAVE_aarch64_ld1x3v16qi (TARGET_SIMD)
+#define HAVE_aarch64_ld1x3v4hi (TARGET_SIMD)
+#define HAVE_aarch64_ld1x3v8hi (TARGET_SIMD)
+#define HAVE_aarch64_ld1x3v2si (TARGET_SIMD)
+#define HAVE_aarch64_ld1x3v4si (TARGET_SIMD)
+#define HAVE_aarch64_ld1x3v2di (TARGET_SIMD)
+#define HAVE_aarch64_ld1x3v4hf (TARGET_SIMD)
+#define HAVE_aarch64_ld1x3v8hf (TARGET_SIMD)
+#define HAVE_aarch64_ld1x3v2sf (TARGET_SIMD)
+#define HAVE_aarch64_ld1x3v4sf (TARGET_SIMD)
+#define HAVE_aarch64_ld1x3v2df (TARGET_SIMD)
+#define HAVE_aarch64_ld1x3di (TARGET_SIMD)
+#define HAVE_aarch64_ld1x3df (TARGET_SIMD)
+#define HAVE_aarch64_st1x2v8qi (TARGET_SIMD)
+#define HAVE_aarch64_st1x2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_st1x2v4hi (TARGET_SIMD)
+#define HAVE_aarch64_st1x2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_st1x2v2si (TARGET_SIMD)
+#define HAVE_aarch64_st1x2v4si (TARGET_SIMD)
+#define HAVE_aarch64_st1x2v2di (TARGET_SIMD)
+#define HAVE_aarch64_st1x2v4hf (TARGET_SIMD)
+#define HAVE_aarch64_st1x2v8hf (TARGET_SIMD)
+#define HAVE_aarch64_st1x2v2sf (TARGET_SIMD)
+#define HAVE_aarch64_st1x2v4sf (TARGET_SIMD)
+#define HAVE_aarch64_st1x2v2df (TARGET_SIMD)
+#define HAVE_aarch64_st1x2di (TARGET_SIMD)
+#define HAVE_aarch64_st1x2df (TARGET_SIMD)
+#define HAVE_aarch64_st1x3v8qi (TARGET_SIMD)
+#define HAVE_aarch64_st1x3v16qi (TARGET_SIMD)
+#define HAVE_aarch64_st1x3v4hi (TARGET_SIMD)
+#define HAVE_aarch64_st1x3v8hi (TARGET_SIMD)
+#define HAVE_aarch64_st1x3v2si (TARGET_SIMD)
+#define HAVE_aarch64_st1x3v4si (TARGET_SIMD)
+#define HAVE_aarch64_st1x3v2di (TARGET_SIMD)
+#define HAVE_aarch64_st1x3v4hf (TARGET_SIMD)
+#define HAVE_aarch64_st1x3v8hf (TARGET_SIMD)
+#define HAVE_aarch64_st1x3v2sf (TARGET_SIMD)
+#define HAVE_aarch64_st1x3v4sf (TARGET_SIMD)
+#define HAVE_aarch64_st1x3v2df (TARGET_SIMD)
+#define HAVE_aarch64_st1x3di (TARGET_SIMD)
+#define HAVE_aarch64_st1x3df (TARGET_SIMD)
+#define HAVE_aarch64_ld2rv8qi (TARGET_SIMD)
+#define HAVE_aarch64_ld2rv16qi (TARGET_SIMD)
+#define HAVE_aarch64_ld2rv4hi (TARGET_SIMD)
+#define HAVE_aarch64_ld2rv8hi (TARGET_SIMD)
+#define HAVE_aarch64_ld2rv2si (TARGET_SIMD)
+#define HAVE_aarch64_ld2rv4si (TARGET_SIMD)
+#define HAVE_aarch64_ld2rv2di (TARGET_SIMD)
+#define HAVE_aarch64_ld2rv4hf (TARGET_SIMD)
+#define HAVE_aarch64_ld2rv8hf (TARGET_SIMD)
+#define HAVE_aarch64_ld2rv2sf (TARGET_SIMD)
+#define HAVE_aarch64_ld2rv4sf (TARGET_SIMD)
+#define HAVE_aarch64_ld2rv2df (TARGET_SIMD)
+#define HAVE_aarch64_ld2rdi (TARGET_SIMD)
+#define HAVE_aarch64_ld2rdf (TARGET_SIMD)
+#define HAVE_aarch64_ld3rv8qi (TARGET_SIMD)
+#define HAVE_aarch64_ld3rv16qi (TARGET_SIMD)
+#define HAVE_aarch64_ld3rv4hi (TARGET_SIMD)
+#define HAVE_aarch64_ld3rv8hi (TARGET_SIMD)
+#define HAVE_aarch64_ld3rv2si (TARGET_SIMD)
+#define HAVE_aarch64_ld3rv4si (TARGET_SIMD)
+#define HAVE_aarch64_ld3rv2di (TARGET_SIMD)
+#define HAVE_aarch64_ld3rv4hf (TARGET_SIMD)
+#define HAVE_aarch64_ld3rv8hf (TARGET_SIMD)
+#define HAVE_aarch64_ld3rv2sf (TARGET_SIMD)
+#define HAVE_aarch64_ld3rv4sf (TARGET_SIMD)
+#define HAVE_aarch64_ld3rv2df (TARGET_SIMD)
+#define HAVE_aarch64_ld3rdi (TARGET_SIMD)
+#define HAVE_aarch64_ld3rdf (TARGET_SIMD)
+#define HAVE_aarch64_ld4rv8qi (TARGET_SIMD)
+#define HAVE_aarch64_ld4rv16qi (TARGET_SIMD)
+#define HAVE_aarch64_ld4rv4hi (TARGET_SIMD)
+#define HAVE_aarch64_ld4rv8hi (TARGET_SIMD)
+#define HAVE_aarch64_ld4rv2si (TARGET_SIMD)
+#define HAVE_aarch64_ld4rv4si (TARGET_SIMD)
+#define HAVE_aarch64_ld4rv2di (TARGET_SIMD)
+#define HAVE_aarch64_ld4rv4hf (TARGET_SIMD)
+#define HAVE_aarch64_ld4rv8hf (TARGET_SIMD)
+#define HAVE_aarch64_ld4rv2sf (TARGET_SIMD)
+#define HAVE_aarch64_ld4rv4sf (TARGET_SIMD)
+#define HAVE_aarch64_ld4rv2df (TARGET_SIMD)
+#define HAVE_aarch64_ld4rdi (TARGET_SIMD)
+#define HAVE_aarch64_ld4rdf (TARGET_SIMD)
+#define HAVE_aarch64_ld2v8qi (TARGET_SIMD)
+#define HAVE_aarch64_ld2v4hi (TARGET_SIMD)
+#define HAVE_aarch64_ld2v4hf (TARGET_SIMD)
+#define HAVE_aarch64_ld2v2si (TARGET_SIMD)
+#define HAVE_aarch64_ld2v2sf (TARGET_SIMD)
+#define HAVE_aarch64_ld2di (TARGET_SIMD)
+#define HAVE_aarch64_ld2df (TARGET_SIMD)
+#define HAVE_aarch64_ld3v8qi (TARGET_SIMD)
+#define HAVE_aarch64_ld3v4hi (TARGET_SIMD)
+#define HAVE_aarch64_ld3v4hf (TARGET_SIMD)
+#define HAVE_aarch64_ld3v2si (TARGET_SIMD)
+#define HAVE_aarch64_ld3v2sf (TARGET_SIMD)
+#define HAVE_aarch64_ld3di (TARGET_SIMD)
+#define HAVE_aarch64_ld3df (TARGET_SIMD)
+#define HAVE_aarch64_ld4v8qi (TARGET_SIMD)
+#define HAVE_aarch64_ld4v4hi (TARGET_SIMD)
+#define HAVE_aarch64_ld4v4hf (TARGET_SIMD)
+#define HAVE_aarch64_ld4v2si (TARGET_SIMD)
+#define HAVE_aarch64_ld4v2sf (TARGET_SIMD)
+#define HAVE_aarch64_ld4di (TARGET_SIMD)
+#define HAVE_aarch64_ld4df (TARGET_SIMD)
+#define HAVE_aarch64_ld1v8qi (TARGET_SIMD)
+#define HAVE_aarch64_ld1v16qi (TARGET_SIMD)
+#define HAVE_aarch64_ld1v4hi (TARGET_SIMD)
+#define HAVE_aarch64_ld1v8hi (TARGET_SIMD)
+#define HAVE_aarch64_ld1v2si (TARGET_SIMD)
+#define HAVE_aarch64_ld1v4si (TARGET_SIMD)
+#define HAVE_aarch64_ld1v2di (TARGET_SIMD)
+#define HAVE_aarch64_ld1v4hf (TARGET_SIMD)
+#define HAVE_aarch64_ld1v8hf (TARGET_SIMD)
+#define HAVE_aarch64_ld1v2sf (TARGET_SIMD)
+#define HAVE_aarch64_ld1v4sf (TARGET_SIMD)
+#define HAVE_aarch64_ld1v2df (TARGET_SIMD)
+#define HAVE_aarch64_ld2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_ld2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_ld2v4si (TARGET_SIMD)
+#define HAVE_aarch64_ld2v2di (TARGET_SIMD)
+#define HAVE_aarch64_ld2v8hf (TARGET_SIMD)
+#define HAVE_aarch64_ld2v4sf (TARGET_SIMD)
+#define HAVE_aarch64_ld2v2df (TARGET_SIMD)
+#define HAVE_aarch64_ld3v16qi (TARGET_SIMD)
+#define HAVE_aarch64_ld3v8hi (TARGET_SIMD)
+#define HAVE_aarch64_ld3v4si (TARGET_SIMD)
+#define HAVE_aarch64_ld3v2di (TARGET_SIMD)
+#define HAVE_aarch64_ld3v8hf (TARGET_SIMD)
+#define HAVE_aarch64_ld3v4sf (TARGET_SIMD)
+#define HAVE_aarch64_ld3v2df (TARGET_SIMD)
+#define HAVE_aarch64_ld4v16qi (TARGET_SIMD)
+#define HAVE_aarch64_ld4v8hi (TARGET_SIMD)
+#define HAVE_aarch64_ld4v4si (TARGET_SIMD)
+#define HAVE_aarch64_ld4v2di (TARGET_SIMD)
+#define HAVE_aarch64_ld4v8hf (TARGET_SIMD)
+#define HAVE_aarch64_ld4v4sf (TARGET_SIMD)
+#define HAVE_aarch64_ld4v2df (TARGET_SIMD)
+#define HAVE_aarch64_ld1x2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_ld1x2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_ld1x2v4si (TARGET_SIMD)
+#define HAVE_aarch64_ld1x2v2di (TARGET_SIMD)
+#define HAVE_aarch64_ld1x2v8hf (TARGET_SIMD)
+#define HAVE_aarch64_ld1x2v4sf (TARGET_SIMD)
+#define HAVE_aarch64_ld1x2v2df (TARGET_SIMD)
+#define HAVE_aarch64_ld1x2v8qi (TARGET_SIMD)
+#define HAVE_aarch64_ld1x2v4hi (TARGET_SIMD)
+#define HAVE_aarch64_ld1x2v4hf (TARGET_SIMD)
+#define HAVE_aarch64_ld1x2v2si (TARGET_SIMD)
+#define HAVE_aarch64_ld1x2v2sf (TARGET_SIMD)
+#define HAVE_aarch64_ld1x2di (TARGET_SIMD)
+#define HAVE_aarch64_ld1x2df (TARGET_SIMD)
+#define HAVE_aarch64_ld2_lanev8qi (TARGET_SIMD)
+#define HAVE_aarch64_ld2_lanev16qi (TARGET_SIMD)
+#define HAVE_aarch64_ld2_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_ld2_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_ld2_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_ld2_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_ld2_lanev2di (TARGET_SIMD)
+#define HAVE_aarch64_ld2_lanev4hf (TARGET_SIMD)
+#define HAVE_aarch64_ld2_lanev8hf (TARGET_SIMD)
+#define HAVE_aarch64_ld2_lanev2sf (TARGET_SIMD)
+#define HAVE_aarch64_ld2_lanev4sf (TARGET_SIMD)
+#define HAVE_aarch64_ld2_lanev2df (TARGET_SIMD)
+#define HAVE_aarch64_ld2_lanedi (TARGET_SIMD)
+#define HAVE_aarch64_ld2_lanedf (TARGET_SIMD)
+#define HAVE_aarch64_ld3_lanev8qi (TARGET_SIMD)
+#define HAVE_aarch64_ld3_lanev16qi (TARGET_SIMD)
+#define HAVE_aarch64_ld3_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_ld3_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_ld3_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_ld3_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_ld3_lanev2di (TARGET_SIMD)
+#define HAVE_aarch64_ld3_lanev4hf (TARGET_SIMD)
+#define HAVE_aarch64_ld3_lanev8hf (TARGET_SIMD)
+#define HAVE_aarch64_ld3_lanev2sf (TARGET_SIMD)
+#define HAVE_aarch64_ld3_lanev4sf (TARGET_SIMD)
+#define HAVE_aarch64_ld3_lanev2df (TARGET_SIMD)
+#define HAVE_aarch64_ld3_lanedi (TARGET_SIMD)
+#define HAVE_aarch64_ld3_lanedf (TARGET_SIMD)
+#define HAVE_aarch64_ld4_lanev8qi (TARGET_SIMD)
+#define HAVE_aarch64_ld4_lanev16qi (TARGET_SIMD)
+#define HAVE_aarch64_ld4_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_ld4_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_ld4_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_ld4_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_ld4_lanev2di (TARGET_SIMD)
+#define HAVE_aarch64_ld4_lanev4hf (TARGET_SIMD)
+#define HAVE_aarch64_ld4_lanev8hf (TARGET_SIMD)
+#define HAVE_aarch64_ld4_lanev2sf (TARGET_SIMD)
+#define HAVE_aarch64_ld4_lanev4sf (TARGET_SIMD)
+#define HAVE_aarch64_ld4_lanev2df (TARGET_SIMD)
+#define HAVE_aarch64_ld4_lanedi (TARGET_SIMD)
+#define HAVE_aarch64_ld4_lanedf (TARGET_SIMD)
+#define HAVE_aarch64_get_dregoiv8qi (TARGET_SIMD)
+#define HAVE_aarch64_get_dregoiv4hi (TARGET_SIMD)
+#define HAVE_aarch64_get_dregoiv4hf (TARGET_SIMD)
+#define HAVE_aarch64_get_dregoiv2si (TARGET_SIMD)
+#define HAVE_aarch64_get_dregoiv2sf (TARGET_SIMD)
+#define HAVE_aarch64_get_dregoidi (TARGET_SIMD)
+#define HAVE_aarch64_get_dregoidf (TARGET_SIMD)
+#define HAVE_aarch64_get_dregciv8qi (TARGET_SIMD)
+#define HAVE_aarch64_get_dregciv4hi (TARGET_SIMD)
+#define HAVE_aarch64_get_dregciv4hf (TARGET_SIMD)
+#define HAVE_aarch64_get_dregciv2si (TARGET_SIMD)
+#define HAVE_aarch64_get_dregciv2sf (TARGET_SIMD)
+#define HAVE_aarch64_get_dregcidi (TARGET_SIMD)
+#define HAVE_aarch64_get_dregcidf (TARGET_SIMD)
+#define HAVE_aarch64_get_dregxiv8qi (TARGET_SIMD)
+#define HAVE_aarch64_get_dregxiv4hi (TARGET_SIMD)
+#define HAVE_aarch64_get_dregxiv4hf (TARGET_SIMD)
+#define HAVE_aarch64_get_dregxiv2si (TARGET_SIMD)
+#define HAVE_aarch64_get_dregxiv2sf (TARGET_SIMD)
+#define HAVE_aarch64_get_dregxidi (TARGET_SIMD)
+#define HAVE_aarch64_get_dregxidf (TARGET_SIMD)
+#define HAVE_aarch64_get_qregoiv16qi (TARGET_SIMD)
+#define HAVE_aarch64_get_qregoiv8hi (TARGET_SIMD)
+#define HAVE_aarch64_get_qregoiv4si (TARGET_SIMD)
+#define HAVE_aarch64_get_qregoiv2di (TARGET_SIMD)
+#define HAVE_aarch64_get_qregoiv8hf (TARGET_SIMD)
+#define HAVE_aarch64_get_qregoiv4sf (TARGET_SIMD)
+#define HAVE_aarch64_get_qregoiv2df (TARGET_SIMD)
+#define HAVE_aarch64_get_qregciv16qi (TARGET_SIMD)
+#define HAVE_aarch64_get_qregciv8hi (TARGET_SIMD)
+#define HAVE_aarch64_get_qregciv4si (TARGET_SIMD)
+#define HAVE_aarch64_get_qregciv2di (TARGET_SIMD)
+#define HAVE_aarch64_get_qregciv8hf (TARGET_SIMD)
+#define HAVE_aarch64_get_qregciv4sf (TARGET_SIMD)
+#define HAVE_aarch64_get_qregciv2df (TARGET_SIMD)
+#define HAVE_aarch64_get_qregxiv16qi (TARGET_SIMD)
+#define HAVE_aarch64_get_qregxiv8hi (TARGET_SIMD)
+#define HAVE_aarch64_get_qregxiv4si (TARGET_SIMD)
+#define HAVE_aarch64_get_qregxiv2di (TARGET_SIMD)
+#define HAVE_aarch64_get_qregxiv8hf (TARGET_SIMD)
+#define HAVE_aarch64_get_qregxiv4sf (TARGET_SIMD)
+#define HAVE_aarch64_get_qregxiv2df (TARGET_SIMD)
+#define HAVE_vec_permv8qi (TARGET_SIMD)
+#define HAVE_vec_permv16qi (TARGET_SIMD)
+#define HAVE_aarch64_st2v8qi (TARGET_SIMD)
+#define HAVE_aarch64_st2v4hi (TARGET_SIMD)
+#define HAVE_aarch64_st2v4hf (TARGET_SIMD)
+#define HAVE_aarch64_st2v2si (TARGET_SIMD)
+#define HAVE_aarch64_st2v2sf (TARGET_SIMD)
+#define HAVE_aarch64_st2di (TARGET_SIMD)
+#define HAVE_aarch64_st2df (TARGET_SIMD)
+#define HAVE_aarch64_st3v8qi (TARGET_SIMD)
+#define HAVE_aarch64_st3v4hi (TARGET_SIMD)
+#define HAVE_aarch64_st3v4hf (TARGET_SIMD)
+#define HAVE_aarch64_st3v2si (TARGET_SIMD)
+#define HAVE_aarch64_st3v2sf (TARGET_SIMD)
+#define HAVE_aarch64_st3di (TARGET_SIMD)
+#define HAVE_aarch64_st3df (TARGET_SIMD)
+#define HAVE_aarch64_st4v8qi (TARGET_SIMD)
+#define HAVE_aarch64_st4v4hi (TARGET_SIMD)
+#define HAVE_aarch64_st4v4hf (TARGET_SIMD)
+#define HAVE_aarch64_st4v2si (TARGET_SIMD)
+#define HAVE_aarch64_st4v2sf (TARGET_SIMD)
+#define HAVE_aarch64_st4di (TARGET_SIMD)
+#define HAVE_aarch64_st4df (TARGET_SIMD)
+#define HAVE_aarch64_st2v16qi (TARGET_SIMD)
+#define HAVE_aarch64_st2v8hi (TARGET_SIMD)
+#define HAVE_aarch64_st2v4si (TARGET_SIMD)
+#define HAVE_aarch64_st2v2di (TARGET_SIMD)
+#define HAVE_aarch64_st2v8hf (TARGET_SIMD)
+#define HAVE_aarch64_st2v4sf (TARGET_SIMD)
+#define HAVE_aarch64_st2v2df (TARGET_SIMD)
+#define HAVE_aarch64_st3v16qi (TARGET_SIMD)
+#define HAVE_aarch64_st3v8hi (TARGET_SIMD)
+#define HAVE_aarch64_st3v4si (TARGET_SIMD)
+#define HAVE_aarch64_st3v2di (TARGET_SIMD)
+#define HAVE_aarch64_st3v8hf (TARGET_SIMD)
+#define HAVE_aarch64_st3v4sf (TARGET_SIMD)
+#define HAVE_aarch64_st3v2df (TARGET_SIMD)
+#define HAVE_aarch64_st4v16qi (TARGET_SIMD)
+#define HAVE_aarch64_st4v8hi (TARGET_SIMD)
+#define HAVE_aarch64_st4v4si (TARGET_SIMD)
+#define HAVE_aarch64_st4v2di (TARGET_SIMD)
+#define HAVE_aarch64_st4v8hf (TARGET_SIMD)
+#define HAVE_aarch64_st4v4sf (TARGET_SIMD)
+#define HAVE_aarch64_st4v2df (TARGET_SIMD)
+#define HAVE_aarch64_st2_lanev8qi (TARGET_SIMD)
+#define HAVE_aarch64_st2_lanev16qi (TARGET_SIMD)
+#define HAVE_aarch64_st2_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_st2_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_st2_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_st2_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_st2_lanev2di (TARGET_SIMD)
+#define HAVE_aarch64_st2_lanev4hf (TARGET_SIMD)
+#define HAVE_aarch64_st2_lanev8hf (TARGET_SIMD)
+#define HAVE_aarch64_st2_lanev2sf (TARGET_SIMD)
+#define HAVE_aarch64_st2_lanev4sf (TARGET_SIMD)
+#define HAVE_aarch64_st2_lanev2df (TARGET_SIMD)
+#define HAVE_aarch64_st2_lanedi (TARGET_SIMD)
+#define HAVE_aarch64_st2_lanedf (TARGET_SIMD)
+#define HAVE_aarch64_st3_lanev8qi (TARGET_SIMD)
+#define HAVE_aarch64_st3_lanev16qi (TARGET_SIMD)
+#define HAVE_aarch64_st3_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_st3_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_st3_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_st3_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_st3_lanev2di (TARGET_SIMD)
+#define HAVE_aarch64_st3_lanev4hf (TARGET_SIMD)
+#define HAVE_aarch64_st3_lanev8hf (TARGET_SIMD)
+#define HAVE_aarch64_st3_lanev2sf (TARGET_SIMD)
+#define HAVE_aarch64_st3_lanev4sf (TARGET_SIMD)
+#define HAVE_aarch64_st3_lanev2df (TARGET_SIMD)
+#define HAVE_aarch64_st3_lanedi (TARGET_SIMD)
+#define HAVE_aarch64_st3_lanedf (TARGET_SIMD)
+#define HAVE_aarch64_st4_lanev8qi (TARGET_SIMD)
+#define HAVE_aarch64_st4_lanev16qi (TARGET_SIMD)
+#define HAVE_aarch64_st4_lanev4hi (TARGET_SIMD)
+#define HAVE_aarch64_st4_lanev8hi (TARGET_SIMD)
+#define HAVE_aarch64_st4_lanev2si (TARGET_SIMD)
+#define HAVE_aarch64_st4_lanev4si (TARGET_SIMD)
+#define HAVE_aarch64_st4_lanev2di (TARGET_SIMD)
+#define HAVE_aarch64_st4_lanev4hf (TARGET_SIMD)
+#define HAVE_aarch64_st4_lanev8hf (TARGET_SIMD)
+#define HAVE_aarch64_st4_lanev2sf (TARGET_SIMD)
+#define HAVE_aarch64_st4_lanev4sf (TARGET_SIMD)
+#define HAVE_aarch64_st4_lanev2df (TARGET_SIMD)
+#define HAVE_aarch64_st4_lanedi (TARGET_SIMD)
+#define HAVE_aarch64_st4_lanedf (TARGET_SIMD)
+#define HAVE_aarch64_st1v8qi (TARGET_SIMD)
+#define HAVE_aarch64_st1v16qi (TARGET_SIMD)
+#define HAVE_aarch64_st1v4hi (TARGET_SIMD)
+#define HAVE_aarch64_st1v8hi (TARGET_SIMD)
+#define HAVE_aarch64_st1v2si (TARGET_SIMD)
+#define HAVE_aarch64_st1v4si (TARGET_SIMD)
+#define HAVE_aarch64_st1v2di (TARGET_SIMD)
+#define HAVE_aarch64_st1v4hf (TARGET_SIMD)
+#define HAVE_aarch64_st1v8hf (TARGET_SIMD)
+#define HAVE_aarch64_st1v2sf (TARGET_SIMD)
+#define HAVE_aarch64_st1v4sf (TARGET_SIMD)
+#define HAVE_aarch64_st1v2df (TARGET_SIMD)
+#define HAVE_aarch64_set_qregoiv16qi (TARGET_SIMD)
+#define HAVE_aarch64_set_qregoiv8hi (TARGET_SIMD)
+#define HAVE_aarch64_set_qregoiv4si (TARGET_SIMD)
+#define HAVE_aarch64_set_qregoiv2di (TARGET_SIMD)
+#define HAVE_aarch64_set_qregoiv8hf (TARGET_SIMD)
+#define HAVE_aarch64_set_qregoiv4sf (TARGET_SIMD)
+#define HAVE_aarch64_set_qregoiv2df (TARGET_SIMD)
+#define HAVE_aarch64_set_qregciv16qi (TARGET_SIMD)
+#define HAVE_aarch64_set_qregciv8hi (TARGET_SIMD)
+#define HAVE_aarch64_set_qregciv4si (TARGET_SIMD)
+#define HAVE_aarch64_set_qregciv2di (TARGET_SIMD)
+#define HAVE_aarch64_set_qregciv8hf (TARGET_SIMD)
+#define HAVE_aarch64_set_qregciv4sf (TARGET_SIMD)
+#define HAVE_aarch64_set_qregciv2df (TARGET_SIMD)
+#define HAVE_aarch64_set_qregxiv16qi (TARGET_SIMD)
+#define HAVE_aarch64_set_qregxiv8hi (TARGET_SIMD)
+#define HAVE_aarch64_set_qregxiv4si (TARGET_SIMD)
+#define HAVE_aarch64_set_qregxiv2di (TARGET_SIMD)
+#define HAVE_aarch64_set_qregxiv8hf (TARGET_SIMD)
+#define HAVE_aarch64_set_qregxiv4sf (TARGET_SIMD)
+#define HAVE_aarch64_set_qregxiv2df (TARGET_SIMD)
+#define HAVE_vec_initv8qiqi (TARGET_SIMD)
+#define HAVE_vec_initv16qiqi (TARGET_SIMD)
+#define HAVE_vec_initv4hihi (TARGET_SIMD)
+#define HAVE_vec_initv8hihi (TARGET_SIMD)
+#define HAVE_vec_initv2sisi (TARGET_SIMD)
+#define HAVE_vec_initv4sisi (TARGET_SIMD)
+#define HAVE_vec_initv2didi (TARGET_SIMD)
+#define HAVE_vec_initv4hfhf (TARGET_SIMD)
+#define HAVE_vec_initv8hfhf (TARGET_SIMD)
+#define HAVE_vec_initv2sfsf (TARGET_SIMD)
+#define HAVE_vec_initv4sfsf (TARGET_SIMD)
+#define HAVE_vec_initv2dfdf (TARGET_SIMD)
+#define HAVE_vec_extractv8qiqi (TARGET_SIMD)
+#define HAVE_vec_extractv16qiqi (TARGET_SIMD)
+#define HAVE_vec_extractv4hihi (TARGET_SIMD)
+#define HAVE_vec_extractv8hihi (TARGET_SIMD)
+#define HAVE_vec_extractv2sisi (TARGET_SIMD)
+#define HAVE_vec_extractv4sisi (TARGET_SIMD)
+#define HAVE_vec_extractv2didi (TARGET_SIMD)
+#define HAVE_vec_extractv4hfhf (TARGET_SIMD)
+#define HAVE_vec_extractv8hfhf (TARGET_SIMD)
+#define HAVE_vec_extractv2sfsf (TARGET_SIMD)
+#define HAVE_vec_extractv4sfsf (TARGET_SIMD)
+#define HAVE_vec_extractv2dfdf (TARGET_SIMD)
+#define HAVE_aarch64_fmlal_lowv2sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlsl_lowv2sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlalq_lowv4sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlslq_lowv4sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlal_highv2sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlsl_highv2sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlalq_highv4sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlslq_highv4sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlal_lane_lowv2sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlsl_lane_lowv2sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlal_lane_highv2sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlsl_lane_highv2sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlalq_laneq_lowv4sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlslq_laneq_lowv4sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlalq_laneq_highv4sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlslq_laneq_highv4sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlal_laneq_lowv2sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlsl_laneq_lowv2sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlal_laneq_highv2sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlsl_laneq_highv2sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlalq_lane_lowv4sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlslq_lane_lowv4sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlalq_lane_highv4sf (TARGET_F16FML)
+#define HAVE_aarch64_fmlslq_lane_highv4sf (TARGET_F16FML)
+#define HAVE_atomic_compare_and_swapqi 1
+#define HAVE_atomic_compare_and_swaphi 1
+#define HAVE_atomic_compare_and_swapsi 1
+#define HAVE_atomic_compare_and_swapdi 1
+#define HAVE_atomic_exchangeqi 1
+#define HAVE_atomic_exchangehi 1
+#define HAVE_atomic_exchangesi 1
+#define HAVE_atomic_exchangedi 1
+#define HAVE_atomic_addqi 1
+#define HAVE_atomic_subqi 1
+#define HAVE_atomic_orqi 1
+#define HAVE_atomic_xorqi 1
+#define HAVE_atomic_andqi 1
+#define HAVE_atomic_addhi 1
+#define HAVE_atomic_subhi 1
+#define HAVE_atomic_orhi 1
+#define HAVE_atomic_xorhi 1
+#define HAVE_atomic_andhi 1
+#define HAVE_atomic_addsi 1
+#define HAVE_atomic_subsi 1
+#define HAVE_atomic_orsi 1
+#define HAVE_atomic_xorsi 1
+#define HAVE_atomic_andsi 1
+#define HAVE_atomic_adddi 1
+#define HAVE_atomic_subdi 1
+#define HAVE_atomic_ordi 1
+#define HAVE_atomic_xordi 1
+#define HAVE_atomic_anddi 1
+#define HAVE_atomic_fetch_addqi 1
+#define HAVE_atomic_fetch_subqi 1
+#define HAVE_atomic_fetch_orqi 1
+#define HAVE_atomic_fetch_xorqi 1
+#define HAVE_atomic_fetch_andqi 1
+#define HAVE_atomic_fetch_addhi 1
+#define HAVE_atomic_fetch_subhi 1
+#define HAVE_atomic_fetch_orhi 1
+#define HAVE_atomic_fetch_xorhi 1
+#define HAVE_atomic_fetch_andhi 1
+#define HAVE_atomic_fetch_addsi 1
+#define HAVE_atomic_fetch_subsi 1
+#define HAVE_atomic_fetch_orsi 1
+#define HAVE_atomic_fetch_xorsi 1
+#define HAVE_atomic_fetch_andsi 1
+#define HAVE_atomic_fetch_adddi 1
+#define HAVE_atomic_fetch_subdi 1
+#define HAVE_atomic_fetch_ordi 1
+#define HAVE_atomic_fetch_xordi 1
+#define HAVE_atomic_fetch_anddi 1
+#define HAVE_atomic_add_fetchqi 1
+#define HAVE_atomic_sub_fetchqi 1
+#define HAVE_atomic_or_fetchqi 1
+#define HAVE_atomic_xor_fetchqi 1
+#define HAVE_atomic_and_fetchqi 1
+#define HAVE_atomic_add_fetchhi 1
+#define HAVE_atomic_sub_fetchhi 1
+#define HAVE_atomic_or_fetchhi 1
+#define HAVE_atomic_xor_fetchhi 1
+#define HAVE_atomic_and_fetchhi 1
+#define HAVE_atomic_add_fetchsi 1
+#define HAVE_atomic_sub_fetchsi 1
+#define HAVE_atomic_or_fetchsi 1
+#define HAVE_atomic_xor_fetchsi 1
+#define HAVE_atomic_and_fetchsi 1
+#define HAVE_atomic_add_fetchdi 1
+#define HAVE_atomic_sub_fetchdi 1
+#define HAVE_atomic_or_fetchdi 1
+#define HAVE_atomic_xor_fetchdi 1
+#define HAVE_atomic_and_fetchdi 1
+#define HAVE_mem_thread_fence 1
+#define HAVE_dmb 1
+#define HAVE_movvnx16qi (TARGET_SVE)
+#define HAVE_movvnx8hi (TARGET_SVE)
+#define HAVE_movvnx4si (TARGET_SVE)
+#define HAVE_movvnx2di (TARGET_SVE)
+#define HAVE_movvnx8hf (TARGET_SVE)
+#define HAVE_movvnx4sf (TARGET_SVE)
+#define HAVE_movvnx2df (TARGET_SVE)
+#define HAVE_aarch64_sve_reload_be (TARGET_SVE && BYTES_BIG_ENDIAN)
+#define HAVE_movmisalignvnx16qi (TARGET_SVE)
+#define HAVE_movmisalignvnx8hi (TARGET_SVE)
+#define HAVE_movmisalignvnx4si (TARGET_SVE)
+#define HAVE_movmisalignvnx2di (TARGET_SVE)
+#define HAVE_movmisalignvnx8hf (TARGET_SVE)
+#define HAVE_movmisalignvnx4sf (TARGET_SVE)
+#define HAVE_movmisalignvnx2df (TARGET_SVE)
+#define HAVE_gather_loadvnx4si (TARGET_SVE)
+#define HAVE_gather_loadvnx2di (TARGET_SVE)
+#define HAVE_gather_loadvnx4sf (TARGET_SVE)
+#define HAVE_gather_loadvnx2df (TARGET_SVE)
+#define HAVE_scatter_storevnx4si (TARGET_SVE)
+#define HAVE_scatter_storevnx2di (TARGET_SVE)
+#define HAVE_scatter_storevnx4sf (TARGET_SVE)
+#define HAVE_scatter_storevnx2df (TARGET_SVE)
+#define HAVE_movvnx32qi (TARGET_SVE)
+#define HAVE_movvnx16hi (TARGET_SVE)
+#define HAVE_movvnx8si (TARGET_SVE)
+#define HAVE_movvnx4di (TARGET_SVE)
+#define HAVE_movvnx16hf (TARGET_SVE)
+#define HAVE_movvnx8sf (TARGET_SVE)
+#define HAVE_movvnx4df (TARGET_SVE)
+#define HAVE_movvnx48qi (TARGET_SVE)
+#define HAVE_movvnx24hi (TARGET_SVE)
+#define HAVE_movvnx12si (TARGET_SVE)
+#define HAVE_movvnx6di (TARGET_SVE)
+#define HAVE_movvnx24hf (TARGET_SVE)
+#define HAVE_movvnx12sf (TARGET_SVE)
+#define HAVE_movvnx6df (TARGET_SVE)
+#define HAVE_movvnx64qi (TARGET_SVE)
+#define HAVE_movvnx32hi (TARGET_SVE)
+#define HAVE_movvnx16si (TARGET_SVE)
+#define HAVE_movvnx8di (TARGET_SVE)
+#define HAVE_movvnx32hf (TARGET_SVE)
+#define HAVE_movvnx16sf (TARGET_SVE)
+#define HAVE_movvnx8df (TARGET_SVE)
+#define HAVE_movvnx16bi (TARGET_SVE)
+#define HAVE_movvnx8bi (TARGET_SVE)
+#define HAVE_movvnx4bi (TARGET_SVE)
+#define HAVE_movvnx2bi (TARGET_SVE)
+#define HAVE_vec_extractvnx16biqi (TARGET_SVE)
+#define HAVE_vec_extractvnx8bihi (TARGET_SVE)
+#define HAVE_vec_extractvnx4bisi (TARGET_SVE)
+#define HAVE_vec_extractvnx2bidi (TARGET_SVE)
+#define HAVE_vec_extractvnx16qiqi (TARGET_SVE)
+#define HAVE_vec_extractvnx8hihi (TARGET_SVE)
+#define HAVE_vec_extractvnx4sisi (TARGET_SVE)
+#define HAVE_vec_extractvnx2didi (TARGET_SVE)
+#define HAVE_vec_extractvnx8hfhf (TARGET_SVE)
+#define HAVE_vec_extractvnx4sfsf (TARGET_SVE)
+#define HAVE_vec_extractvnx2dfdf (TARGET_SVE)
+#define HAVE_vec_duplicatevnx16qi (TARGET_SVE)
+#define HAVE_vec_duplicatevnx8hi (TARGET_SVE)
+#define HAVE_vec_duplicatevnx4si (TARGET_SVE)
+#define HAVE_vec_duplicatevnx2di (TARGET_SVE)
+#define HAVE_vec_duplicatevnx8hf (TARGET_SVE)
+#define HAVE_vec_duplicatevnx4sf (TARGET_SVE)
+#define HAVE_vec_duplicatevnx2df (TARGET_SVE)
+#define HAVE_vec_duplicatevnx16bi (TARGET_SVE)
+#define HAVE_vec_duplicatevnx8bi (TARGET_SVE)
+#define HAVE_vec_duplicatevnx4bi (TARGET_SVE)
+#define HAVE_vec_duplicatevnx2bi (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx32qivnx16qi (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx16hivnx8hi (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx8sivnx4si (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx4divnx2di (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx16hfvnx8hf (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx8sfvnx4sf (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx4dfvnx2df (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx48qivnx16qi (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx24hivnx8hi (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx12sivnx4si (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx6divnx2di (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx24hfvnx8hf (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx12sfvnx4sf (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx6dfvnx2df (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx64qivnx16qi (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx32hivnx8hi (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx16sivnx4si (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx8divnx2di (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx32hfvnx8hf (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx16sfvnx4sf (TARGET_SVE)
+#define HAVE_vec_load_lanesvnx8dfvnx2df (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx32qivnx16qi (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx16hivnx8hi (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx8sivnx4si (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx4divnx2di (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx16hfvnx8hf (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx8sfvnx4sf (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx4dfvnx2df (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx48qivnx16qi (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx24hivnx8hi (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx12sivnx4si (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx6divnx2di (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx24hfvnx8hf (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx12sfvnx4sf (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx6dfvnx2df (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx64qivnx16qi (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx32hivnx8hi (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx16sivnx4si (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx8divnx2di (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx32hfvnx8hf (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx16sfvnx4sf (TARGET_SVE)
+#define HAVE_vec_store_lanesvnx8dfvnx2df (TARGET_SVE)
+#define HAVE_vec_permvnx16qi (TARGET_SVE && GET_MODE_NUNITS (VNx16QImode).is_constant ())
+#define HAVE_vec_permvnx8hi (TARGET_SVE && GET_MODE_NUNITS (VNx8HImode).is_constant ())
+#define HAVE_vec_permvnx4si (TARGET_SVE && GET_MODE_NUNITS (VNx4SImode).is_constant ())
+#define HAVE_vec_permvnx2di (TARGET_SVE && GET_MODE_NUNITS (VNx2DImode).is_constant ())
+#define HAVE_vec_permvnx8hf (TARGET_SVE && GET_MODE_NUNITS (VNx8HFmode).is_constant ())
+#define HAVE_vec_permvnx4sf (TARGET_SVE && GET_MODE_NUNITS (VNx4SFmode).is_constant ())
+#define HAVE_vec_permvnx2df (TARGET_SVE && GET_MODE_NUNITS (VNx2DFmode).is_constant ())
+#define HAVE_mulvnx16qi3 (TARGET_SVE)
+#define HAVE_mulvnx8hi3 (TARGET_SVE)
+#define HAVE_mulvnx4si3 (TARGET_SVE)
+#define HAVE_mulvnx2di3 (TARGET_SVE)
+#define HAVE_smulvnx16qi3_highpart (TARGET_SVE)
+#define HAVE_umulvnx16qi3_highpart (TARGET_SVE)
+#define HAVE_smulvnx8hi3_highpart (TARGET_SVE)
+#define HAVE_umulvnx8hi3_highpart (TARGET_SVE)
+#define HAVE_smulvnx4si3_highpart (TARGET_SVE)
+#define HAVE_umulvnx4si3_highpart (TARGET_SVE)
+#define HAVE_smulvnx2di3_highpart (TARGET_SVE)
+#define HAVE_umulvnx2di3_highpart (TARGET_SVE)
+#define HAVE_divvnx4si3 (TARGET_SVE)
+#define HAVE_udivvnx4si3 (TARGET_SVE)
+#define HAVE_divvnx2di3 (TARGET_SVE)
+#define HAVE_udivvnx2di3 (TARGET_SVE)
+#define HAVE_absvnx16qi2 (TARGET_SVE)
+#define HAVE_negvnx16qi2 (TARGET_SVE)
+#define HAVE_one_cmplvnx16qi2 (TARGET_SVE)
+#define HAVE_popcountvnx16qi2 (TARGET_SVE)
+#define HAVE_absvnx8hi2 (TARGET_SVE)
+#define HAVE_negvnx8hi2 (TARGET_SVE)
+#define HAVE_one_cmplvnx8hi2 (TARGET_SVE)
+#define HAVE_popcountvnx8hi2 (TARGET_SVE)
+#define HAVE_absvnx4si2 (TARGET_SVE)
+#define HAVE_negvnx4si2 (TARGET_SVE)
+#define HAVE_one_cmplvnx4si2 (TARGET_SVE)
+#define HAVE_popcountvnx4si2 (TARGET_SVE)
+#define HAVE_absvnx2di2 (TARGET_SVE)
+#define HAVE_negvnx2di2 (TARGET_SVE)
+#define HAVE_one_cmplvnx2di2 (TARGET_SVE)
+#define HAVE_popcountvnx2di2 (TARGET_SVE)
+#define HAVE_iorvnx16bi3 (TARGET_SVE)
+#define HAVE_xorvnx16bi3 (TARGET_SVE)
+#define HAVE_iorvnx8bi3 (TARGET_SVE)
+#define HAVE_xorvnx8bi3 (TARGET_SVE)
+#define HAVE_iorvnx4bi3 (TARGET_SVE)
+#define HAVE_xorvnx4bi3 (TARGET_SVE)
+#define HAVE_iorvnx2bi3 (TARGET_SVE)
+#define HAVE_xorvnx2bi3 (TARGET_SVE)
+#define HAVE_one_cmplvnx16bi2 (TARGET_SVE)
+#define HAVE_one_cmplvnx8bi2 (TARGET_SVE)
+#define HAVE_one_cmplvnx4bi2 (TARGET_SVE)
+#define HAVE_one_cmplvnx2bi2 (TARGET_SVE)
+#define HAVE_vashlvnx16qi3 (TARGET_SVE)
+#define HAVE_vashrvnx16qi3 (TARGET_SVE)
+#define HAVE_vlshrvnx16qi3 (TARGET_SVE)
+#define HAVE_vashlvnx8hi3 (TARGET_SVE)
+#define HAVE_vashrvnx8hi3 (TARGET_SVE)
+#define HAVE_vlshrvnx8hi3 (TARGET_SVE)
+#define HAVE_vashlvnx4si3 (TARGET_SVE)
+#define HAVE_vashrvnx4si3 (TARGET_SVE)
+#define HAVE_vlshrvnx4si3 (TARGET_SVE)
+#define HAVE_vashlvnx2di3 (TARGET_SVE)
+#define HAVE_vashrvnx2di3 (TARGET_SVE)
+#define HAVE_vlshrvnx2di3 (TARGET_SVE)
+#define HAVE_ashlvnx16qi3 (TARGET_SVE)
+#define HAVE_ashrvnx16qi3 (TARGET_SVE)
+#define HAVE_lshrvnx16qi3 (TARGET_SVE)
+#define HAVE_ashlvnx8hi3 (TARGET_SVE)
+#define HAVE_ashrvnx8hi3 (TARGET_SVE)
+#define HAVE_lshrvnx8hi3 (TARGET_SVE)
+#define HAVE_ashlvnx4si3 (TARGET_SVE)
+#define HAVE_ashrvnx4si3 (TARGET_SVE)
+#define HAVE_lshrvnx4si3 (TARGET_SVE)
+#define HAVE_ashlvnx2di3 (TARGET_SVE)
+#define HAVE_ashrvnx2di3 (TARGET_SVE)
+#define HAVE_lshrvnx2di3 (TARGET_SVE)
+#define HAVE_vcondvnx16qivnx16qi (TARGET_SVE)
+#define HAVE_vcondvnx8hivnx8hi (TARGET_SVE)
+#define HAVE_vcondvnx4sivnx4si (TARGET_SVE)
+#define HAVE_vcondvnx2divnx2di (TARGET_SVE)
+#define HAVE_vcondvnx8hfvnx8hi (TARGET_SVE)
+#define HAVE_vcondvnx4sfvnx4si (TARGET_SVE)
+#define HAVE_vcondvnx2dfvnx2di (TARGET_SVE)
+#define HAVE_vconduvnx16qivnx16qi (TARGET_SVE)
+#define HAVE_vconduvnx8hivnx8hi (TARGET_SVE)
+#define HAVE_vconduvnx4sivnx4si (TARGET_SVE)
+#define HAVE_vconduvnx2divnx2di (TARGET_SVE)
+#define HAVE_vconduvnx8hfvnx8hi (TARGET_SVE)
+#define HAVE_vconduvnx4sfvnx4si (TARGET_SVE)
+#define HAVE_vconduvnx2dfvnx2di (TARGET_SVE)
+#define HAVE_vcondvnx4sivnx4sf (TARGET_SVE)
+#define HAVE_vcondvnx2divnx2df (TARGET_SVE)
+#define HAVE_vcondvnx4sfvnx4sf (TARGET_SVE)
+#define HAVE_vcondvnx2dfvnx2df (TARGET_SVE)
+#define HAVE_vec_cmpvnx16qivnx16bi (TARGET_SVE)
+#define HAVE_vec_cmpvnx8hivnx8bi (TARGET_SVE)
+#define HAVE_vec_cmpvnx4sivnx4bi (TARGET_SVE)
+#define HAVE_vec_cmpvnx2divnx2bi (TARGET_SVE)
+#define HAVE_vec_cmpuvnx16qivnx16bi (TARGET_SVE)
+#define HAVE_vec_cmpuvnx8hivnx8bi (TARGET_SVE)
+#define HAVE_vec_cmpuvnx4sivnx4bi (TARGET_SVE)
+#define HAVE_vec_cmpuvnx2divnx2bi (TARGET_SVE)
+#define HAVE_vec_cmpvnx8hfvnx8bi (TARGET_SVE)
+#define HAVE_vec_cmpvnx4sfvnx4bi (TARGET_SVE)
+#define HAVE_vec_cmpvnx2dfvnx2bi (TARGET_SVE)
+#define HAVE_cbranchvnx16bi4 1
+#define HAVE_cbranchvnx8bi4 1
+#define HAVE_cbranchvnx4bi4 1
+#define HAVE_cbranchvnx2bi4 1
+#define HAVE_smaxvnx16qi3 (TARGET_SVE)
+#define HAVE_sminvnx16qi3 (TARGET_SVE)
+#define HAVE_umaxvnx16qi3 (TARGET_SVE)
+#define HAVE_uminvnx16qi3 (TARGET_SVE)
+#define HAVE_smaxvnx8hi3 (TARGET_SVE)
+#define HAVE_sminvnx8hi3 (TARGET_SVE)
+#define HAVE_umaxvnx8hi3 (TARGET_SVE)
+#define HAVE_uminvnx8hi3 (TARGET_SVE)
+#define HAVE_smaxvnx4si3 (TARGET_SVE)
+#define HAVE_sminvnx4si3 (TARGET_SVE)
+#define HAVE_umaxvnx4si3 (TARGET_SVE)
+#define HAVE_uminvnx4si3 (TARGET_SVE)
+#define HAVE_smaxvnx2di3 (TARGET_SVE)
+#define HAVE_sminvnx2di3 (TARGET_SVE)
+#define HAVE_umaxvnx2di3 (TARGET_SVE)
+#define HAVE_uminvnx2di3 (TARGET_SVE)
+#define HAVE_smaxvnx8hf3 (TARGET_SVE)
+#define HAVE_sminvnx8hf3 (TARGET_SVE)
+#define HAVE_smaxvnx4sf3 (TARGET_SVE)
+#define HAVE_sminvnx4sf3 (TARGET_SVE)
+#define HAVE_smaxvnx2df3 (TARGET_SVE)
+#define HAVE_sminvnx2df3 (TARGET_SVE)
+#define HAVE_smax_nanvnx8hf3 (TARGET_SVE)
+#define HAVE_smin_nanvnx8hf3 (TARGET_SVE)
+#define HAVE_fmaxvnx8hf3 (TARGET_SVE)
+#define HAVE_fminvnx8hf3 (TARGET_SVE)
+#define HAVE_smax_nanvnx4sf3 (TARGET_SVE)
+#define HAVE_smin_nanvnx4sf3 (TARGET_SVE)
+#define HAVE_fmaxvnx4sf3 (TARGET_SVE)
+#define HAVE_fminvnx4sf3 (TARGET_SVE)
+#define HAVE_smax_nanvnx2df3 (TARGET_SVE)
+#define HAVE_smin_nanvnx2df3 (TARGET_SVE)
+#define HAVE_fmaxvnx2df3 (TARGET_SVE)
+#define HAVE_fminvnx2df3 (TARGET_SVE)
+#define HAVE_cond_addvnx16qi (TARGET_SVE)
+#define HAVE_cond_subvnx16qi (TARGET_SVE)
+#define HAVE_cond_mulvnx16qi (TARGET_SVE)
+#define HAVE_cond_smaxvnx16qi (TARGET_SVE)
+#define HAVE_cond_umaxvnx16qi (TARGET_SVE)
+#define HAVE_cond_sminvnx16qi (TARGET_SVE)
+#define HAVE_cond_uminvnx16qi (TARGET_SVE)
+#define HAVE_cond_andvnx16qi (TARGET_SVE)
+#define HAVE_cond_iorvnx16qi (TARGET_SVE)
+#define HAVE_cond_xorvnx16qi (TARGET_SVE)
+#define HAVE_cond_addvnx8hi (TARGET_SVE)
+#define HAVE_cond_subvnx8hi (TARGET_SVE)
+#define HAVE_cond_mulvnx8hi (TARGET_SVE)
+#define HAVE_cond_smaxvnx8hi (TARGET_SVE)
+#define HAVE_cond_umaxvnx8hi (TARGET_SVE)
+#define HAVE_cond_sminvnx8hi (TARGET_SVE)
+#define HAVE_cond_uminvnx8hi (TARGET_SVE)
+#define HAVE_cond_andvnx8hi (TARGET_SVE)
+#define HAVE_cond_iorvnx8hi (TARGET_SVE)
+#define HAVE_cond_xorvnx8hi (TARGET_SVE)
+#define HAVE_cond_addvnx4si (TARGET_SVE)
+#define HAVE_cond_subvnx4si (TARGET_SVE)
+#define HAVE_cond_mulvnx4si (TARGET_SVE)
+#define HAVE_cond_smaxvnx4si (TARGET_SVE)
+#define HAVE_cond_umaxvnx4si (TARGET_SVE)
+#define HAVE_cond_sminvnx4si (TARGET_SVE)
+#define HAVE_cond_uminvnx4si (TARGET_SVE)
+#define HAVE_cond_andvnx4si (TARGET_SVE)
+#define HAVE_cond_iorvnx4si (TARGET_SVE)
+#define HAVE_cond_xorvnx4si (TARGET_SVE)
+#define HAVE_cond_addvnx2di (TARGET_SVE)
+#define HAVE_cond_subvnx2di (TARGET_SVE)
+#define HAVE_cond_mulvnx2di (TARGET_SVE)
+#define HAVE_cond_smaxvnx2di (TARGET_SVE)
+#define HAVE_cond_umaxvnx2di (TARGET_SVE)
+#define HAVE_cond_sminvnx2di (TARGET_SVE)
+#define HAVE_cond_uminvnx2di (TARGET_SVE)
+#define HAVE_cond_andvnx2di (TARGET_SVE)
+#define HAVE_cond_iorvnx2di (TARGET_SVE)
+#define HAVE_cond_xorvnx2di (TARGET_SVE)
+#define HAVE_cond_divvnx4si (TARGET_SVE)
+#define HAVE_cond_udivvnx4si (TARGET_SVE)
+#define HAVE_cond_divvnx2di (TARGET_SVE)
+#define HAVE_cond_udivvnx2di (TARGET_SVE)
+#define HAVE_reduc_plus_scal_vnx16qi (TARGET_SVE)
+#define HAVE_reduc_plus_scal_vnx8hi (TARGET_SVE)
+#define HAVE_reduc_plus_scal_vnx4si (TARGET_SVE)
+#define HAVE_reduc_plus_scal_vnx2di (TARGET_SVE)
+#define HAVE_reduc_plus_scal_vnx8hf (TARGET_SVE)
+#define HAVE_reduc_plus_scal_vnx4sf (TARGET_SVE)
+#define HAVE_reduc_plus_scal_vnx2df (TARGET_SVE)
+#define HAVE_reduc_umax_scal_vnx16qi (TARGET_SVE)
+#define HAVE_reduc_umin_scal_vnx16qi (TARGET_SVE)
+#define HAVE_reduc_smax_scal_vnx16qi (TARGET_SVE)
+#define HAVE_reduc_smin_scal_vnx16qi (TARGET_SVE)
+#define HAVE_reduc_umax_scal_vnx8hi (TARGET_SVE)
+#define HAVE_reduc_umin_scal_vnx8hi (TARGET_SVE)
+#define HAVE_reduc_smax_scal_vnx8hi (TARGET_SVE)
+#define HAVE_reduc_smin_scal_vnx8hi (TARGET_SVE)
+#define HAVE_reduc_umax_scal_vnx4si (TARGET_SVE)
+#define HAVE_reduc_umin_scal_vnx4si (TARGET_SVE)
+#define HAVE_reduc_smax_scal_vnx4si (TARGET_SVE)
+#define HAVE_reduc_smin_scal_vnx4si (TARGET_SVE)
+#define HAVE_reduc_umax_scal_vnx2di (TARGET_SVE)
+#define HAVE_reduc_umin_scal_vnx2di (TARGET_SVE)
+#define HAVE_reduc_smax_scal_vnx2di (TARGET_SVE)
+#define HAVE_reduc_smin_scal_vnx2di (TARGET_SVE)
+#define HAVE_reduc_smax_nan_scal_vnx8hf (TARGET_SVE)
+#define HAVE_reduc_smin_nan_scal_vnx8hf (TARGET_SVE)
+#define HAVE_reduc_smax_scal_vnx8hf (TARGET_SVE)
+#define HAVE_reduc_smin_scal_vnx8hf (TARGET_SVE)
+#define HAVE_reduc_smax_nan_scal_vnx4sf (TARGET_SVE)
+#define HAVE_reduc_smin_nan_scal_vnx4sf (TARGET_SVE)
+#define HAVE_reduc_smax_scal_vnx4sf (TARGET_SVE)
+#define HAVE_reduc_smin_scal_vnx4sf (TARGET_SVE)
+#define HAVE_reduc_smax_nan_scal_vnx2df (TARGET_SVE)
+#define HAVE_reduc_smin_nan_scal_vnx2df (TARGET_SVE)
+#define HAVE_reduc_smax_scal_vnx2df (TARGET_SVE)
+#define HAVE_reduc_smin_scal_vnx2df (TARGET_SVE)
+#define HAVE_reduc_and_scal_vnx16qi (TARGET_SVE)
+#define HAVE_reduc_ior_scal_vnx16qi (TARGET_SVE)
+#define HAVE_reduc_xor_scal_vnx16qi (TARGET_SVE)
+#define HAVE_reduc_and_scal_vnx8hi (TARGET_SVE)
+#define HAVE_reduc_ior_scal_vnx8hi (TARGET_SVE)
+#define HAVE_reduc_xor_scal_vnx8hi (TARGET_SVE)
+#define HAVE_reduc_and_scal_vnx4si (TARGET_SVE)
+#define HAVE_reduc_ior_scal_vnx4si (TARGET_SVE)
+#define HAVE_reduc_xor_scal_vnx4si (TARGET_SVE)
+#define HAVE_reduc_and_scal_vnx2di (TARGET_SVE)
+#define HAVE_reduc_ior_scal_vnx2di (TARGET_SVE)
+#define HAVE_reduc_xor_scal_vnx2di (TARGET_SVE)
+#define HAVE_fold_left_plus_vnx8hf (TARGET_SVE)
+#define HAVE_fold_left_plus_vnx4sf (TARGET_SVE)
+#define HAVE_fold_left_plus_vnx2df (TARGET_SVE)
+#define HAVE_addvnx8hf3 (TARGET_SVE)
+#define HAVE_addvnx4sf3 (TARGET_SVE)
+#define HAVE_addvnx2df3 (TARGET_SVE)
+#define HAVE_subvnx8hf3 (TARGET_SVE)
+#define HAVE_subvnx4sf3 (TARGET_SVE)
+#define HAVE_subvnx2df3 (TARGET_SVE)
+#define HAVE_mulvnx8hf3 (TARGET_SVE)
+#define HAVE_mulvnx4sf3 (TARGET_SVE)
+#define HAVE_mulvnx2df3 (TARGET_SVE)
+#define HAVE_fmavnx8hf4 (TARGET_SVE)
+#define HAVE_fmavnx4sf4 (TARGET_SVE)
+#define HAVE_fmavnx2df4 (TARGET_SVE)
+#define HAVE_fnmavnx8hf4 (TARGET_SVE)
+#define HAVE_fnmavnx4sf4 (TARGET_SVE)
+#define HAVE_fnmavnx2df4 (TARGET_SVE)
+#define HAVE_fmsvnx8hf4 (TARGET_SVE)
+#define HAVE_fmsvnx4sf4 (TARGET_SVE)
+#define HAVE_fmsvnx2df4 (TARGET_SVE)
+#define HAVE_fnmsvnx8hf4 (TARGET_SVE)
+#define HAVE_fnmsvnx4sf4 (TARGET_SVE)
+#define HAVE_fnmsvnx2df4 (TARGET_SVE)
+#define HAVE_divvnx8hf3 (TARGET_SVE)
+#define HAVE_divvnx4sf3 (TARGET_SVE)
+#define HAVE_divvnx2df3 (TARGET_SVE)
+#define HAVE_absvnx8hf2 (TARGET_SVE)
+#define HAVE_negvnx8hf2 (TARGET_SVE)
+#define HAVE_sqrtvnx8hf2 (TARGET_SVE)
+#define HAVE_absvnx4sf2 (TARGET_SVE)
+#define HAVE_negvnx4sf2 (TARGET_SVE)
+#define HAVE_sqrtvnx4sf2 (TARGET_SVE)
+#define HAVE_absvnx2df2 (TARGET_SVE)
+#define HAVE_negvnx2df2 (TARGET_SVE)
+#define HAVE_sqrtvnx2df2 (TARGET_SVE)
+#define HAVE_btruncvnx8hf2 (TARGET_SVE)
+#define HAVE_ceilvnx8hf2 (TARGET_SVE)
+#define HAVE_floorvnx8hf2 (TARGET_SVE)
+#define HAVE_frintnvnx8hf2 (TARGET_SVE)
+#define HAVE_nearbyintvnx8hf2 (TARGET_SVE)
+#define HAVE_rintvnx8hf2 (TARGET_SVE)
+#define HAVE_roundvnx8hf2 (TARGET_SVE)
+#define HAVE_btruncvnx4sf2 (TARGET_SVE)
+#define HAVE_ceilvnx4sf2 (TARGET_SVE)
+#define HAVE_floorvnx4sf2 (TARGET_SVE)
+#define HAVE_frintnvnx4sf2 (TARGET_SVE)
+#define HAVE_nearbyintvnx4sf2 (TARGET_SVE)
+#define HAVE_rintvnx4sf2 (TARGET_SVE)
+#define HAVE_roundvnx4sf2 (TARGET_SVE)
+#define HAVE_btruncvnx2df2 (TARGET_SVE)
+#define HAVE_ceilvnx2df2 (TARGET_SVE)
+#define HAVE_floorvnx2df2 (TARGET_SVE)
+#define HAVE_frintnvnx2df2 (TARGET_SVE)
+#define HAVE_nearbyintvnx2df2 (TARGET_SVE)
+#define HAVE_rintvnx2df2 (TARGET_SVE)
+#define HAVE_roundvnx2df2 (TARGET_SVE)
+#define HAVE_fix_truncvnx8hfvnx8hi2 (TARGET_SVE)
+#define HAVE_fixuns_truncvnx8hfvnx8hi2 (TARGET_SVE)
+#define HAVE_fix_truncvnx4sfvnx4si2 (TARGET_SVE)
+#define HAVE_fixuns_truncvnx4sfvnx4si2 (TARGET_SVE)
+#define HAVE_fix_truncvnx2dfvnx2di2 (TARGET_SVE)
+#define HAVE_fixuns_truncvnx2dfvnx2di2 (TARGET_SVE)
+#define HAVE_floatvnx8hivnx8hf2 (TARGET_SVE)
+#define HAVE_floatunsvnx8hivnx8hf2 (TARGET_SVE)
+#define HAVE_floatvnx4sivnx4sf2 (TARGET_SVE)
+#define HAVE_floatunsvnx4sivnx4sf2 (TARGET_SVE)
+#define HAVE_floatvnx2divnx2df2 (TARGET_SVE)
+#define HAVE_floatunsvnx2divnx2df2 (TARGET_SVE)
+#define HAVE_vec_unpacks_hi_vnx16bi (TARGET_SVE)
+#define HAVE_vec_unpacku_hi_vnx16bi (TARGET_SVE)
+#define HAVE_vec_unpacks_lo_vnx16bi (TARGET_SVE)
+#define HAVE_vec_unpacku_lo_vnx16bi (TARGET_SVE)
+#define HAVE_vec_unpacks_hi_vnx8bi (TARGET_SVE)
+#define HAVE_vec_unpacku_hi_vnx8bi (TARGET_SVE)
+#define HAVE_vec_unpacks_lo_vnx8bi (TARGET_SVE)
+#define HAVE_vec_unpacku_lo_vnx8bi (TARGET_SVE)
+#define HAVE_vec_unpacks_hi_vnx4bi (TARGET_SVE)
+#define HAVE_vec_unpacku_hi_vnx4bi (TARGET_SVE)
+#define HAVE_vec_unpacks_lo_vnx4bi (TARGET_SVE)
+#define HAVE_vec_unpacku_lo_vnx4bi (TARGET_SVE)
+#define HAVE_vec_unpacks_hi_vnx16qi (TARGET_SVE)
+#define HAVE_vec_unpacku_hi_vnx16qi (TARGET_SVE)
+#define HAVE_vec_unpacks_lo_vnx16qi (TARGET_SVE)
+#define HAVE_vec_unpacku_lo_vnx16qi (TARGET_SVE)
+#define HAVE_vec_unpacks_hi_vnx8hi (TARGET_SVE)
+#define HAVE_vec_unpacku_hi_vnx8hi (TARGET_SVE)
+#define HAVE_vec_unpacks_lo_vnx8hi (TARGET_SVE)
+#define HAVE_vec_unpacku_lo_vnx8hi (TARGET_SVE)
+#define HAVE_vec_unpacks_hi_vnx4si (TARGET_SVE)
+#define HAVE_vec_unpacku_hi_vnx4si (TARGET_SVE)
+#define HAVE_vec_unpacks_lo_vnx4si (TARGET_SVE)
+#define HAVE_vec_unpacku_lo_vnx4si (TARGET_SVE)
+#define HAVE_vec_unpacks_lo_vnx8hf (TARGET_SVE)
+#define HAVE_vec_unpacks_hi_vnx8hf (TARGET_SVE)
+#define HAVE_vec_unpacks_lo_vnx4sf (TARGET_SVE)
+#define HAVE_vec_unpacks_hi_vnx4sf (TARGET_SVE)
+#define HAVE_vec_unpacks_float_lo_vnx4si (TARGET_SVE)
+#define HAVE_vec_unpacks_float_hi_vnx4si (TARGET_SVE)
+#define HAVE_vec_unpacku_float_lo_vnx4si (TARGET_SVE)
+#define HAVE_vec_unpacku_float_hi_vnx4si (TARGET_SVE)
+#define HAVE_vec_pack_trunc_vnx4sf (TARGET_SVE)
+#define HAVE_vec_pack_trunc_vnx2df (TARGET_SVE)
+#define HAVE_vec_pack_sfix_trunc_vnx2df (TARGET_SVE)
+#define HAVE_vec_pack_ufix_trunc_vnx2df (TARGET_SVE)
+#define HAVE_cond_addvnx8hf (TARGET_SVE)
+#define HAVE_cond_subvnx8hf (TARGET_SVE)
+#define HAVE_cond_mulvnx8hf (TARGET_SVE)
+#define HAVE_cond_divvnx8hf (TARGET_SVE)
+#define HAVE_cond_smaxvnx8hf (TARGET_SVE)
+#define HAVE_cond_sminvnx8hf (TARGET_SVE)
+#define HAVE_cond_addvnx4sf (TARGET_SVE)
+#define HAVE_cond_subvnx4sf (TARGET_SVE)
+#define HAVE_cond_mulvnx4sf (TARGET_SVE)
+#define HAVE_cond_divvnx4sf (TARGET_SVE)
+#define HAVE_cond_smaxvnx4sf (TARGET_SVE)
+#define HAVE_cond_sminvnx4sf (TARGET_SVE)
+#define HAVE_cond_addvnx2df (TARGET_SVE)
+#define HAVE_cond_subvnx2df (TARGET_SVE)
+#define HAVE_cond_mulvnx2df (TARGET_SVE)
+#define HAVE_cond_divvnx2df (TARGET_SVE)
+#define HAVE_cond_smaxvnx2df (TARGET_SVE)
+#define HAVE_cond_sminvnx2df (TARGET_SVE)
+#define HAVE_cond_fmavnx8hf (TARGET_SVE)
+#define HAVE_cond_fnmavnx8hf (TARGET_SVE)
+#define HAVE_cond_fnmsvnx8hf (TARGET_SVE)
+#define HAVE_cond_fmsvnx8hf (TARGET_SVE)
+#define HAVE_cond_fmavnx4sf (TARGET_SVE)
+#define HAVE_cond_fnmavnx4sf (TARGET_SVE)
+#define HAVE_cond_fnmsvnx4sf (TARGET_SVE)
+#define HAVE_cond_fmsvnx4sf (TARGET_SVE)
+#define HAVE_cond_fmavnx2df (TARGET_SVE)
+#define HAVE_cond_fnmavnx2df (TARGET_SVE)
+#define HAVE_cond_fnmsvnx2df (TARGET_SVE)
+#define HAVE_cond_fmsvnx2df (TARGET_SVE)
+#define HAVE_copysignvnx8hf3 (TARGET_SVE)
+#define HAVE_copysignvnx4sf3 (TARGET_SVE)
+#define HAVE_copysignvnx2df3 (TARGET_SVE)
+#define HAVE_xorsignvnx8hf3 (TARGET_SVE)
+#define HAVE_xorsignvnx4sf3 (TARGET_SVE)
+#define HAVE_xorsignvnx2df3 (TARGET_SVE)
+extern rtx        gen_indirect_jump                       (rtx);
+extern rtx        gen_jump                                (rtx);
+extern rtx        gen_ccmpsi                              (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_ccmpdi                              (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_fccmpsf                             (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_fccmpdf                             (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_fccmpesf                            (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_fccmpedf                            (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_condjump                            (rtx, rtx, rtx);
+extern rtx        gen_nop                                 (void);
+extern rtx        gen_prefetch                            (rtx, rtx, rtx);
+extern rtx        gen_trap                                (void);
+extern rtx        gen_simple_return                       (void);
+extern rtx        gen_insv_immsi                          (rtx, rtx, rtx);
+extern rtx        gen_insv_immdi                          (rtx, rtx, rtx);
+extern rtx        gen_load_pair_sw_sisi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pair_sw_sfsi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pair_sw_sisf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pair_sw_sfsf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pair_dw_didi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pair_dw_didf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pair_dw_dfdi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pair_dw_dfdf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pair_dw_tftf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_store_pair_sw_sisi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_store_pair_sw_sfsi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_store_pair_sw_sisf                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_store_pair_sw_sfsf                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_store_pair_dw_didi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_store_pair_dw_didf                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_store_pair_dw_dfdi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_store_pair_dw_dfdf                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_store_pair_dw_tftf                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_loadwb_pairsi_si                    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_loadwb_pairsi_di                    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_loadwb_pairdi_si                    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_loadwb_pairdi_di                    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_loadwb_pairsf_si                    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_loadwb_pairsf_di                    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_loadwb_pairdf_si                    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_loadwb_pairdf_di                    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_loadwb_pairti_si                    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_loadwb_pairti_di                    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_loadwb_pairtf_si                    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_loadwb_pairtf_di                    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_storewb_pairsi_si                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_storewb_pairsi_di                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_storewb_pairdi_si                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_storewb_pairdi_di                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_storewb_pairsf_si                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_storewb_pairsf_di                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_storewb_pairdf_si                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_storewb_pairdf_di                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_storewb_pairti_si                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_storewb_pairti_di                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_storewb_pairtf_si                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_storewb_pairtf_di                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_addsi3_compare0                     (rtx, rtx, rtx);
+extern rtx        gen_adddi3_compare0                     (rtx, rtx, rtx);
+extern rtx        gen_addsi3_compareC                     (rtx, rtx, rtx);
+extern rtx        gen_adddi3_compareC                     (rtx, rtx, rtx);
+extern rtx        gen_addsi3_compareV_imm                 (rtx, rtx, rtx);
+extern rtx        gen_adddi3_compareV_imm                 (rtx, rtx, rtx);
+extern rtx        gen_addsi3_compareV                     (rtx, rtx, rtx);
+extern rtx        gen_adddi3_compareV                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_subsi_compare0              (rtx, rtx);
+extern rtx        gen_aarch64_subdi_compare0              (rtx, rtx);
+extern rtx        gen_subsi3                              (rtx, rtx, rtx);
+extern rtx        gen_subdi3                              (rtx, rtx, rtx);
+extern rtx        gen_subvsi_insn                         (rtx, rtx, rtx);
+extern rtx        gen_subvdi_insn                         (rtx, rtx, rtx);
+extern rtx        gen_subvsi_imm                          (rtx, rtx, rtx);
+extern rtx        gen_subvdi_imm                          (rtx, rtx, rtx);
+extern rtx        gen_negvsi_insn                         (rtx, rtx);
+extern rtx        gen_negvdi_insn                         (rtx, rtx);
+extern rtx        gen_negvsi_cmp_only                     (rtx);
+extern rtx        gen_negvdi_cmp_only                     (rtx);
+extern rtx        gen_negdi_carryout                      (rtx, rtx);
+extern rtx        gen_negvdi_carryinV                     (rtx, rtx);
+extern rtx        gen_subsi3_compare1_imm                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_subdi3_compare1_imm                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_subsi3_compare1                     (rtx, rtx, rtx);
+extern rtx        gen_subdi3_compare1                     (rtx, rtx, rtx);
+extern rtx        gen_negsi2                              (rtx, rtx);
+extern rtx        gen_negdi2                              (rtx, rtx);
+extern rtx        gen_negsi2_compare0                     (rtx, rtx);
+extern rtx        gen_negdi2_compare0                     (rtx, rtx);
+extern rtx        gen_mulsi3                              (rtx, rtx, rtx);
+extern rtx        gen_muldi3                              (rtx, rtx, rtx);
+extern rtx        gen_maddsi                              (rtx, rtx, rtx, rtx);
+extern rtx        gen_madddi                              (rtx, rtx, rtx, rtx);
+extern rtx        gen_mulsidi3                            (rtx, rtx, rtx);
+extern rtx        gen_umulsidi3                           (rtx, rtx, rtx);
+extern rtx        gen_maddsidi4                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_umaddsidi4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_msubsidi4                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_umsubsidi4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_smuldi3_highpart                    (rtx, rtx, rtx);
+extern rtx        gen_umuldi3_highpart                    (rtx, rtx, rtx);
+extern rtx        gen_divsi3                              (rtx, rtx, rtx);
+extern rtx        gen_udivsi3                             (rtx, rtx, rtx);
+extern rtx        gen_divdi3                              (rtx, rtx, rtx);
+extern rtx        gen_udivdi3                             (rtx, rtx, rtx);
+extern rtx        gen_cmpsi                               (rtx, rtx);
+extern rtx        gen_cmpdi                               (rtx, rtx);
+extern rtx        gen_fcmpsf                              (rtx, rtx);
+extern rtx        gen_fcmpdf                              (rtx, rtx);
+extern rtx        gen_fcmpesf                             (rtx, rtx);
+extern rtx        gen_fcmpedf                             (rtx, rtx);
+extern rtx        gen_aarch64_cstoreqi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cstorehi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cstoresi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cstoredi                    (rtx, rtx, rtx);
+extern rtx        gen_cstoreqi_neg                        (rtx, rtx, rtx);
+extern rtx        gen_cstorehi_neg                        (rtx, rtx, rtx);
+extern rtx        gen_cstoresi_neg                        (rtx, rtx, rtx);
+extern rtx        gen_cstoredi_neg                        (rtx, rtx, rtx);
+extern rtx        gen_aarch64_crc32b                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_crc32h                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_crc32w                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_crc32x                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_crc32cb                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_crc32ch                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_crc32cw                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_crc32cx                     (rtx, rtx, rtx);
+extern rtx        gen_csinc3si_insn                       (rtx, rtx, rtx, rtx);
+extern rtx        gen_csinc3di_insn                       (rtx, rtx, rtx, rtx);
+extern rtx        gen_csneg3_uxtw_insn                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_csneg3si_insn                       (rtx, rtx, rtx, rtx);
+extern rtx        gen_csneg3di_insn                       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqdecsi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqdecdi                     (rtx, rtx, rtx);
+extern rtx        gen_andsi3                              (rtx, rtx, rtx);
+extern rtx        gen_iorsi3                              (rtx, rtx, rtx);
+extern rtx        gen_xorsi3                              (rtx, rtx, rtx);
+extern rtx        gen_anddi3                              (rtx, rtx, rtx);
+extern rtx        gen_iordi3                              (rtx, rtx, rtx);
+extern rtx        gen_xordi3                              (rtx, rtx, rtx);
+extern rtx        gen_one_cmplsi2                         (rtx, rtx);
+extern rtx        gen_one_cmpldi2                         (rtx, rtx);
+extern rtx        gen_and_one_cmpl_ashlsi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_ior_one_cmpl_ashlsi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_xor_one_cmpl_ashlsi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_and_one_cmpl_ashrsi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_ior_one_cmpl_ashrsi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_xor_one_cmpl_ashrsi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_and_one_cmpl_lshrsi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_ior_one_cmpl_lshrsi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_xor_one_cmpl_lshrsi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_and_one_cmpl_rotrsi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_ior_one_cmpl_rotrsi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_xor_one_cmpl_rotrsi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_and_one_cmpl_ashldi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_ior_one_cmpl_ashldi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_xor_one_cmpl_ashldi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_and_one_cmpl_ashrdi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_ior_one_cmpl_ashrdi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_xor_one_cmpl_ashrdi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_and_one_cmpl_lshrdi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_ior_one_cmpl_lshrdi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_xor_one_cmpl_lshrdi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_and_one_cmpl_rotrdi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_ior_one_cmpl_rotrdi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_xor_one_cmpl_rotrdi3                (rtx, rtx, rtx, rtx);
+extern rtx        gen_clzsi2                              (rtx, rtx);
+extern rtx        gen_clzdi2                              (rtx, rtx);
+extern rtx        gen_clrsbsi2                            (rtx, rtx);
+extern rtx        gen_clrsbdi2                            (rtx, rtx);
+extern rtx        gen_rbitsi2                             (rtx, rtx);
+extern rtx        gen_rbitdi2                             (rtx, rtx);
+extern rtx        gen_ctzsi2                              (rtx, rtx);
+extern rtx        gen_ctzdi2                              (rtx, rtx);
+extern rtx        gen_bswapsi2                            (rtx, rtx);
+extern rtx        gen_bswapdi2                            (rtx, rtx);
+extern rtx        gen_bswaphi2                            (rtx, rtx);
+extern rtx        gen_rev16si2                            (rtx, rtx, rtx, rtx);
+extern rtx        gen_rev16di2                            (rtx, rtx, rtx, rtx);
+extern rtx        gen_rev16si2_alt                        (rtx, rtx, rtx, rtx);
+extern rtx        gen_rev16di2_alt                        (rtx, rtx, rtx, rtx);
+extern rtx        gen_btrunchf2                           (rtx, rtx);
+extern rtx        gen_ceilhf2                             (rtx, rtx);
+extern rtx        gen_floorhf2                            (rtx, rtx);
+extern rtx        gen_frintnhf2                           (rtx, rtx);
+extern rtx        gen_nearbyinthf2                        (rtx, rtx);
+extern rtx        gen_rinthf2                             (rtx, rtx);
+extern rtx        gen_roundhf2                            (rtx, rtx);
+extern rtx        gen_btruncsf2                           (rtx, rtx);
+extern rtx        gen_ceilsf2                             (rtx, rtx);
+extern rtx        gen_floorsf2                            (rtx, rtx);
+extern rtx        gen_frintnsf2                           (rtx, rtx);
+extern rtx        gen_nearbyintsf2                        (rtx, rtx);
+extern rtx        gen_rintsf2                             (rtx, rtx);
+extern rtx        gen_roundsf2                            (rtx, rtx);
+extern rtx        gen_btruncdf2                           (rtx, rtx);
+extern rtx        gen_ceildf2                             (rtx, rtx);
+extern rtx        gen_floordf2                            (rtx, rtx);
+extern rtx        gen_frintndf2                           (rtx, rtx);
+extern rtx        gen_nearbyintdf2                        (rtx, rtx);
+extern rtx        gen_rintdf2                             (rtx, rtx);
+extern rtx        gen_rounddf2                            (rtx, rtx);
+extern rtx        gen_lbtrunchfsi2                        (rtx, rtx);
+extern rtx        gen_lceilhfsi2                          (rtx, rtx);
+extern rtx        gen_lfloorhfsi2                         (rtx, rtx);
+extern rtx        gen_lroundhfsi2                         (rtx, rtx);
+extern rtx        gen_lfrintnhfsi2                        (rtx, rtx);
+extern rtx        gen_lbtruncuhfsi2                       (rtx, rtx);
+extern rtx        gen_lceiluhfsi2                         (rtx, rtx);
+extern rtx        gen_lflooruhfsi2                        (rtx, rtx);
+extern rtx        gen_lrounduhfsi2                        (rtx, rtx);
+extern rtx        gen_lfrintnuhfsi2                       (rtx, rtx);
+extern rtx        gen_lbtrunchfdi2                        (rtx, rtx);
+extern rtx        gen_lceilhfdi2                          (rtx, rtx);
+extern rtx        gen_lfloorhfdi2                         (rtx, rtx);
+extern rtx        gen_lroundhfdi2                         (rtx, rtx);
+extern rtx        gen_lfrintnhfdi2                        (rtx, rtx);
+extern rtx        gen_lbtruncuhfdi2                       (rtx, rtx);
+extern rtx        gen_lceiluhfdi2                         (rtx, rtx);
+extern rtx        gen_lflooruhfdi2                        (rtx, rtx);
+extern rtx        gen_lrounduhfdi2                        (rtx, rtx);
+extern rtx        gen_lfrintnuhfdi2                       (rtx, rtx);
+extern rtx        gen_lbtruncsfsi2                        (rtx, rtx);
+extern rtx        gen_lceilsfsi2                          (rtx, rtx);
+extern rtx        gen_lfloorsfsi2                         (rtx, rtx);
+extern rtx        gen_lroundsfsi2                         (rtx, rtx);
+extern rtx        gen_lfrintnsfsi2                        (rtx, rtx);
+extern rtx        gen_lbtruncusfsi2                       (rtx, rtx);
+extern rtx        gen_lceilusfsi2                         (rtx, rtx);
+extern rtx        gen_lfloorusfsi2                        (rtx, rtx);
+extern rtx        gen_lroundusfsi2                        (rtx, rtx);
+extern rtx        gen_lfrintnusfsi2                       (rtx, rtx);
+extern rtx        gen_lbtruncsfdi2                        (rtx, rtx);
+extern rtx        gen_lceilsfdi2                          (rtx, rtx);
+extern rtx        gen_lfloorsfdi2                         (rtx, rtx);
+extern rtx        gen_lroundsfdi2                         (rtx, rtx);
+extern rtx        gen_lfrintnsfdi2                        (rtx, rtx);
+extern rtx        gen_lbtruncusfdi2                       (rtx, rtx);
+extern rtx        gen_lceilusfdi2                         (rtx, rtx);
+extern rtx        gen_lfloorusfdi2                        (rtx, rtx);
+extern rtx        gen_lroundusfdi2                        (rtx, rtx);
+extern rtx        gen_lfrintnusfdi2                       (rtx, rtx);
+extern rtx        gen_lbtruncdfsi2                        (rtx, rtx);
+extern rtx        gen_lceildfsi2                          (rtx, rtx);
+extern rtx        gen_lfloordfsi2                         (rtx, rtx);
+extern rtx        gen_lrounddfsi2                         (rtx, rtx);
+extern rtx        gen_lfrintndfsi2                        (rtx, rtx);
+extern rtx        gen_lbtruncudfsi2                       (rtx, rtx);
+extern rtx        gen_lceiludfsi2                         (rtx, rtx);
+extern rtx        gen_lfloorudfsi2                        (rtx, rtx);
+extern rtx        gen_lroundudfsi2                        (rtx, rtx);
+extern rtx        gen_lfrintnudfsi2                       (rtx, rtx);
+extern rtx        gen_lbtruncdfdi2                        (rtx, rtx);
+extern rtx        gen_lceildfdi2                          (rtx, rtx);
+extern rtx        gen_lfloordfdi2                         (rtx, rtx);
+extern rtx        gen_lrounddfdi2                         (rtx, rtx);
+extern rtx        gen_lfrintndfdi2                        (rtx, rtx);
+extern rtx        gen_lbtruncudfdi2                       (rtx, rtx);
+extern rtx        gen_lceiludfdi2                         (rtx, rtx);
+extern rtx        gen_lfloorudfdi2                        (rtx, rtx);
+extern rtx        gen_lroundudfdi2                        (rtx, rtx);
+extern rtx        gen_lfrintnudfdi2                       (rtx, rtx);
+extern rtx        gen_extendsfdf2                         (rtx, rtx);
+extern rtx        gen_extendhfsf2                         (rtx, rtx);
+extern rtx        gen_extendhfdf2                         (rtx, rtx);
+extern rtx        gen_truncdfsf2                          (rtx, rtx);
+extern rtx        gen_truncsfhf2                          (rtx, rtx);
+extern rtx        gen_truncdfhf2                          (rtx, rtx);
+extern rtx        gen_fix_truncsfsi2                      (rtx, rtx);
+extern rtx        gen_fixuns_truncsfsi2                   (rtx, rtx);
+extern rtx        gen_fix_truncdfdi2                      (rtx, rtx);
+extern rtx        gen_fixuns_truncdfdi2                   (rtx, rtx);
+extern rtx        gen_fix_trunchfsi2                      (rtx, rtx);
+extern rtx        gen_fixuns_trunchfsi2                   (rtx, rtx);
+extern rtx        gen_fix_trunchfdi2                      (rtx, rtx);
+extern rtx        gen_fixuns_trunchfdi2                   (rtx, rtx);
+extern rtx        gen_fix_truncdfsi2                      (rtx, rtx);
+extern rtx        gen_fixuns_truncdfsi2                   (rtx, rtx);
+extern rtx        gen_fix_truncsfdi2                      (rtx, rtx);
+extern rtx        gen_fixuns_truncsfdi2                   (rtx, rtx);
+extern rtx        gen_floatsisf2                          (rtx, rtx);
+extern rtx        gen_floatunssisf2                       (rtx, rtx);
+extern rtx        gen_floatdidf2                          (rtx, rtx);
+extern rtx        gen_floatunsdidf2                       (rtx, rtx);
+extern rtx        gen_floatdisf2                          (rtx, rtx);
+extern rtx        gen_floatunsdisf2                       (rtx, rtx);
+extern rtx        gen_floatsidf2                          (rtx, rtx);
+extern rtx        gen_floatunssidf2                       (rtx, rtx);
+extern rtx        gen_aarch64_fp16_floatsihf2             (rtx, rtx);
+extern rtx        gen_aarch64_fp16_floatunssihf2          (rtx, rtx);
+extern rtx        gen_aarch64_fp16_floatdihf2             (rtx, rtx);
+extern rtx        gen_aarch64_fp16_floatunsdihf2          (rtx, rtx);
+extern rtx        gen_fcvtzssf3                           (rtx, rtx, rtx);
+extern rtx        gen_fcvtzusf3                           (rtx, rtx, rtx);
+extern rtx        gen_fcvtzsdf3                           (rtx, rtx, rtx);
+extern rtx        gen_fcvtzudf3                           (rtx, rtx, rtx);
+extern rtx        gen_scvtfsi3                            (rtx, rtx, rtx);
+extern rtx        gen_ucvtfsi3                            (rtx, rtx, rtx);
+extern rtx        gen_scvtfdi3                            (rtx, rtx, rtx);
+extern rtx        gen_ucvtfdi3                            (rtx, rtx, rtx);
+extern rtx        gen_fcvtzshfsi3                         (rtx, rtx, rtx);
+extern rtx        gen_fcvtzuhfsi3                         (rtx, rtx, rtx);
+extern rtx        gen_fcvtzshfdi3                         (rtx, rtx, rtx);
+extern rtx        gen_fcvtzuhfdi3                         (rtx, rtx, rtx);
+extern rtx        gen_scvtfsihf3                          (rtx, rtx, rtx);
+extern rtx        gen_ucvtfsihf3                          (rtx, rtx, rtx);
+extern rtx        gen_scvtfdihf3                          (rtx, rtx, rtx);
+extern rtx        gen_ucvtfdihf3                          (rtx, rtx, rtx);
+extern rtx        gen_fcvtzshf3                           (rtx, rtx, rtx);
+extern rtx        gen_fcvtzuhf3                           (rtx, rtx, rtx);
+extern rtx        gen_scvtfhi3                            (rtx, rtx, rtx);
+extern rtx        gen_ucvtfhi3                            (rtx, rtx, rtx);
+extern rtx        gen_addhf3                              (rtx, rtx, rtx);
+extern rtx        gen_addsf3                              (rtx, rtx, rtx);
+extern rtx        gen_adddf3                              (rtx, rtx, rtx);
+extern rtx        gen_subhf3                              (rtx, rtx, rtx);
+extern rtx        gen_subsf3                              (rtx, rtx, rtx);
+extern rtx        gen_subdf3                              (rtx, rtx, rtx);
+extern rtx        gen_mulhf3                              (rtx, rtx, rtx);
+extern rtx        gen_mulsf3                              (rtx, rtx, rtx);
+extern rtx        gen_muldf3                              (rtx, rtx, rtx);
+extern rtx        gen_neghf2                              (rtx, rtx);
+extern rtx        gen_negsf2                              (rtx, rtx);
+extern rtx        gen_negdf2                              (rtx, rtx);
+extern rtx        gen_abshf2                              (rtx, rtx);
+extern rtx        gen_abssf2                              (rtx, rtx);
+extern rtx        gen_absdf2                              (rtx, rtx);
+extern rtx        gen_smaxsf3                             (rtx, rtx, rtx);
+extern rtx        gen_smaxdf3                             (rtx, rtx, rtx);
+extern rtx        gen_sminsf3                             (rtx, rtx, rtx);
+extern rtx        gen_smindf3                             (rtx, rtx, rtx);
+extern rtx        gen_smax_nanhf3                         (rtx, rtx, rtx);
+extern rtx        gen_smin_nanhf3                         (rtx, rtx, rtx);
+extern rtx        gen_fmaxhf3                             (rtx, rtx, rtx);
+extern rtx        gen_fminhf3                             (rtx, rtx, rtx);
+extern rtx        gen_smax_nansf3                         (rtx, rtx, rtx);
+extern rtx        gen_smin_nansf3                         (rtx, rtx, rtx);
+extern rtx        gen_fmaxsf3                             (rtx, rtx, rtx);
+extern rtx        gen_fminsf3                             (rtx, rtx, rtx);
+extern rtx        gen_smax_nandf3                         (rtx, rtx, rtx);
+extern rtx        gen_smin_nandf3                         (rtx, rtx, rtx);
+extern rtx        gen_fmaxdf3                             (rtx, rtx, rtx);
+extern rtx        gen_fmindf3                             (rtx, rtx, rtx);
+extern rtx        gen_copysignsf3_insn                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_copysigndf3_insn                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_movdi_tilow                 (rtx, rtx);
+extern rtx        gen_aarch64_movdi_tflow                 (rtx, rtx);
+extern rtx        gen_aarch64_movdi_tihigh                (rtx, rtx);
+extern rtx        gen_aarch64_movdi_tfhigh                (rtx, rtx);
+extern rtx        gen_aarch64_movtihigh_di                (rtx, rtx);
+extern rtx        gen_aarch64_movtfhigh_di                (rtx, rtx);
+extern rtx        gen_aarch64_movtilow_di                 (rtx, rtx);
+extern rtx        gen_aarch64_movtflow_di                 (rtx, rtx);
+extern rtx        gen_aarch64_movtilow_tilow              (rtx, rtx);
+extern rtx        gen_add_losym_si                        (rtx, rtx, rtx);
+extern rtx        gen_add_losym_di                        (rtx, rtx, rtx);
+extern rtx        gen_ldr_got_small_si                    (rtx, rtx, rtx);
+extern rtx        gen_ldr_got_small_di                    (rtx, rtx, rtx);
+extern rtx        gen_ldr_got_small_sidi                  (rtx, rtx, rtx);
+extern rtx        gen_ldr_got_small_28k_si                (rtx, rtx, rtx);
+extern rtx        gen_ldr_got_small_28k_di                (rtx, rtx, rtx);
+extern rtx        gen_ldr_got_small_28k_sidi              (rtx, rtx, rtx);
+extern rtx        gen_ldr_got_tiny                        (rtx, rtx);
+extern rtx        gen_aarch64_load_tp_hard                (rtx);
+extern rtx        gen_tlsie_small_si                      (rtx, rtx);
+extern rtx        gen_tlsie_small_di                      (rtx, rtx);
+extern rtx        gen_tlsie_small_sidi                    (rtx, rtx);
+extern rtx        gen_tlsie_tiny_si                       (rtx, rtx, rtx);
+extern rtx        gen_tlsie_tiny_di                       (rtx, rtx, rtx);
+extern rtx        gen_tlsie_tiny_sidi                     (rtx, rtx, rtx);
+extern rtx        gen_tlsle12_si                          (rtx, rtx, rtx);
+extern rtx        gen_tlsle12_di                          (rtx, rtx, rtx);
+extern rtx        gen_tlsle24_si                          (rtx, rtx, rtx);
+extern rtx        gen_tlsle24_di                          (rtx, rtx, rtx);
+extern rtx        gen_tlsle32_si                          (rtx, rtx);
+extern rtx        gen_tlsle32_di                          (rtx, rtx);
+extern rtx        gen_tlsle48_si                          (rtx, rtx);
+extern rtx        gen_tlsle48_di                          (rtx, rtx);
+extern rtx        gen_tlsdesc_small_advsimd_si            (rtx);
+extern rtx        gen_tlsdesc_small_advsimd_di            (rtx);
+extern rtx        gen_tlsdesc_small_sve_si                (rtx);
+extern rtx        gen_tlsdesc_small_sve_di                (rtx);
+extern rtx        gen_stack_tie                           (rtx, rtx);
+extern rtx        gen_pacisp                              (void);
+extern rtx        gen_autisp                              (void);
+extern rtx        gen_paci1716                            (void);
+extern rtx        gen_auti1716                            (void);
+extern rtx        gen_xpaclri                             (void);
+extern rtx        gen_blockage                            (void);
+extern rtx        gen_probe_stack_range                   (rtx, rtx, rtx);
+extern rtx        gen_probe_sve_stack_clash_si            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_probe_sve_stack_clash_di            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_reg_stack_protect_address_si        (rtx);
+extern rtx        gen_reg_stack_protect_address_di        (rtx);
+extern rtx        gen_stack_protect_set_si                (rtx, rtx);
+extern rtx        gen_stack_protect_set_di                (rtx, rtx);
+extern rtx        gen_stack_protect_test_si               (rtx, rtx, rtx);
+extern rtx        gen_stack_protect_test_di               (rtx, rtx, rtx);
+extern rtx        gen_set_fpcr                            (rtx);
+extern rtx        gen_get_fpcr                            (rtx);
+extern rtx        gen_set_fpsr                            (rtx);
+extern rtx        gen_get_fpsr                            (rtx);
+extern rtx        gen_speculation_tracker                 (rtx);
+extern rtx        gen_bti_noarg                           (void);
+extern rtx        gen_bti_c                               (void);
+extern rtx        gen_bti_j                               (void);
+extern rtx        gen_bti_jc                              (void);
+extern rtx        gen_speculation_barrier                 (void);
+extern rtx        gen_despeculate_simpleqi                (rtx, rtx, rtx);
+extern rtx        gen_despeculate_simplehi                (rtx, rtx, rtx);
+extern rtx        gen_despeculate_simplesi                (rtx, rtx, rtx);
+extern rtx        gen_despeculate_simpledi                (rtx, rtx, rtx);
+extern rtx        gen_despeculate_simpleti                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_dupv8qi                (rtx, rtx);
+extern rtx        gen_aarch64_simd_dupv16qi               (rtx, rtx);
+extern rtx        gen_aarch64_simd_dupv4hi                (rtx, rtx);
+extern rtx        gen_aarch64_simd_dupv8hi                (rtx, rtx);
+extern rtx        gen_aarch64_simd_dupv2si                (rtx, rtx);
+extern rtx        gen_aarch64_simd_dupv4si                (rtx, rtx);
+extern rtx        gen_aarch64_simd_dupv2di                (rtx, rtx);
+extern rtx        gen_aarch64_simd_dupv4hf                (rtx, rtx);
+extern rtx        gen_aarch64_simd_dupv8hf                (rtx, rtx);
+extern rtx        gen_aarch64_simd_dupv2sf                (rtx, rtx);
+extern rtx        gen_aarch64_simd_dupv4sf                (rtx, rtx);
+extern rtx        gen_aarch64_simd_dupv2df                (rtx, rtx);
+extern rtx        gen_aarch64_dup_lanev8qi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lanev16qi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lanev4hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lanev8hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lanev2si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lanev4si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lanev2di                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lanev4hf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lanev8hf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lanev2sf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lanev4sf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lanev2df                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lane_to_128v8qi         (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lane_to_64v16qi         (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lane_to_128v4hi         (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lane_to_64v8hi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lane_to_128v2si         (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lane_to_64v4si          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lane_to_128v4hf         (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lane_to_64v8hf          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lane_to_128v2sf         (rtx, rtx, rtx);
+extern rtx        gen_aarch64_dup_lane_to_64v4sf          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_store_lane0v8qi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_store_lane0v16qi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_store_lane0v4hi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_store_lane0v8hi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_store_lane0v2si             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_store_lane0v4si             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_store_lane0v2di             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_store_lane0v4hf             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_store_lane0v8hf             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_store_lane0v2sf             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_store_lane0v4sf             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_store_lane0v2df             (rtx, rtx, rtx);
+extern rtx        gen_load_pairv8qiv8qi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4hiv8qi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4hfv8qi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2siv8qi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2sfv8qi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairdfv8qi                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8qiv4hi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4hiv4hi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4hfv4hi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2siv4hi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2sfv4hi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairdfv4hi                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8qiv4hf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4hiv4hf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4hfv4hf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2siv4hf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2sfv4hf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairdfv4hf                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8qiv2si                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4hiv2si                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4hfv2si                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2siv2si                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2sfv2si                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairdfv2si                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8qiv2sf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4hiv2sf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4hfv2sf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2siv2sf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2sfv2sf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairdfv2sf                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8qidf                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4hidf                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4hfdf                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2sidf                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2sfdf                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairdfdf                       (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8qiv8qi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4hiv8qi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4hfv8qi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2siv8qi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2sfv8qi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairdfv8qi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8qiv4hi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4hiv4hi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4hfv4hi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2siv4hi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2sfv4hi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairdfv4hi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8qiv4hf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4hiv4hf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4hfv4hf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2siv4hf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2sfv4hf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairdfv4hf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8qiv2si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4hiv2si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4hfv2si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2siv2si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2sfv2si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairdfv2si                (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8qiv2sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4hiv2sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4hfv2sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2siv2sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2sfv2sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairdfv2sf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8qidf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4hidf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4hfdf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2sidf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2sfdf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairdfdf                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv16qiv16qi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8hiv16qi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4siv16qi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2div16qi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8hfv16qi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4sfv16qi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2dfv16qi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv16qiv8hi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8hiv8hi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4siv8hi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2div8hi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8hfv8hi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4sfv8hi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2dfv8hi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv16qiv4si                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8hiv4si                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4siv4si                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2div4si                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8hfv4si                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4sfv4si                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2dfv4si                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv16qiv2di                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8hiv2di                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4siv2di                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2div2di                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8hfv2di                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4sfv2di                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2dfv2di                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv16qiv8hf                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8hiv8hf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4siv8hf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2div8hf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8hfv8hf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4sfv8hf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2dfv8hf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv16qiv4sf                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8hiv4sf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4siv4sf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2div4sf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8hfv4sf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4sfv4sf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2dfv4sf                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv16qiv2df                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8hiv2df                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4siv2df                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2div2df                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv8hfv2df                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv4sfv2df                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_load_pairv2dfv2df                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv16qiv16qi            (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8hiv16qi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4siv16qi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2div16qi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8hfv16qi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4sfv16qi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2dfv16qi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv16qiv8hi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8hiv8hi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4siv8hi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2div8hi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8hfv8hi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4sfv8hi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2dfv8hi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv16qiv4si             (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8hiv4si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4siv4si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2div4si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8hfv4si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4sfv4si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2dfv4si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv16qiv2di             (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8hiv2di              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4siv2di              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2div2di              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8hfv2di              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4sfv2di              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2dfv2di              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv16qiv8hf             (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8hiv8hf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4siv8hf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2div8hf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8hfv8hf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4sfv8hf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2dfv8hf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv16qiv4sf             (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8hiv4sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4siv4sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2div4sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8hfv4sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4sfv4sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2dfv4sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv16qiv2df             (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8hiv2df              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4siv2df              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2div2df              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv8hfv2df              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv4sfv2df              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_store_pairv2dfv2df              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_mov_from_v16qilow      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_mov_from_v8hilow       (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_mov_from_v4silow       (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_mov_from_v2dilow       (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_mov_from_v8hflow       (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_mov_from_v4sflow       (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_mov_from_v2dflow       (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_mov_from_v16qihigh     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_mov_from_v8hihigh      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_mov_from_v4sihigh      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_mov_from_v2dihigh      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_mov_from_v8hfhigh      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_mov_from_v4sfhigh      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_mov_from_v2dfhigh      (rtx, rtx, rtx);
+extern rtx        gen_ornv8qi3                            (rtx, rtx, rtx);
+extern rtx        gen_ornv16qi3                           (rtx, rtx, rtx);
+extern rtx        gen_ornv4hi3                            (rtx, rtx, rtx);
+extern rtx        gen_ornv8hi3                            (rtx, rtx, rtx);
+extern rtx        gen_ornv2si3                            (rtx, rtx, rtx);
+extern rtx        gen_ornv4si3                            (rtx, rtx, rtx);
+extern rtx        gen_ornv2di3                            (rtx, rtx, rtx);
+extern rtx        gen_bicv8qi3                            (rtx, rtx, rtx);
+extern rtx        gen_bicv16qi3                           (rtx, rtx, rtx);
+extern rtx        gen_bicv4hi3                            (rtx, rtx, rtx);
+extern rtx        gen_bicv8hi3                            (rtx, rtx, rtx);
+extern rtx        gen_bicv2si3                            (rtx, rtx, rtx);
+extern rtx        gen_bicv4si3                            (rtx, rtx, rtx);
+extern rtx        gen_bicv2di3                            (rtx, rtx, rtx);
+extern rtx        gen_addv8qi3                            (rtx, rtx, rtx);
+extern rtx        gen_addv16qi3                           (rtx, rtx, rtx);
+extern rtx        gen_addv4hi3                            (rtx, rtx, rtx);
+extern rtx        gen_addv8hi3                            (rtx, rtx, rtx);
+extern rtx        gen_addv2si3                            (rtx, rtx, rtx);
+extern rtx        gen_addv4si3                            (rtx, rtx, rtx);
+extern rtx        gen_addv2di3                            (rtx, rtx, rtx);
+extern rtx        gen_subv8qi3                            (rtx, rtx, rtx);
+extern rtx        gen_subv16qi3                           (rtx, rtx, rtx);
+extern rtx        gen_subv4hi3                            (rtx, rtx, rtx);
+extern rtx        gen_subv8hi3                            (rtx, rtx, rtx);
+extern rtx        gen_subv2si3                            (rtx, rtx, rtx);
+extern rtx        gen_subv4si3                            (rtx, rtx, rtx);
+extern rtx        gen_subv2di3                            (rtx, rtx, rtx);
+extern rtx        gen_mulv8qi3                            (rtx, rtx, rtx);
+extern rtx        gen_mulv16qi3                           (rtx, rtx, rtx);
+extern rtx        gen_mulv4hi3                            (rtx, rtx, rtx);
+extern rtx        gen_mulv8hi3                            (rtx, rtx, rtx);
+extern rtx        gen_mulv2si3                            (rtx, rtx, rtx);
+extern rtx        gen_mulv4si3                            (rtx, rtx, rtx);
+extern rtx        gen_bswapv4hi2                          (rtx, rtx);
+extern rtx        gen_bswapv8hi2                          (rtx, rtx);
+extern rtx        gen_bswapv2si2                          (rtx, rtx);
+extern rtx        gen_bswapv4si2                          (rtx, rtx);
+extern rtx        gen_bswapv2di2                          (rtx, rtx);
+extern rtx        gen_aarch64_rbitv8qi                    (rtx, rtx);
+extern rtx        gen_aarch64_rbitv16qi                   (rtx, rtx);
+extern rtx        gen_aarch64_fcadd90v4hf                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcadd270v4hf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcadd90v8hf                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcadd270v8hf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcadd90v2sf                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcadd270v2sf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcadd90v4sf                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcadd270v4sf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcadd90v2df                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcadd270v2df                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla0v4hf                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla90v4hf                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla180v4hf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla270v4hf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla0v8hf                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla90v8hf                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla180v8hf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla270v8hf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla0v2sf                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla90v2sf                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla180v2sf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla270v2sf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla0v4sf                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla90v4sf                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla180v4sf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla270v4sf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla0v2df                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla90v2df                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla180v2df                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla270v2df                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane0v4hf             (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane90v4hf            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane180v4hf           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane270v4hf           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane0v8hf             (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane90v8hf            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane180v8hf           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane270v8hf           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane0v2sf             (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane90v2sf            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane180v2sf           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane270v2sf           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane0v4sf             (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane90v4sf            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane180v4sf           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane270v4sf           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane0v2df             (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane90v2df            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane180v2df           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_lane270v2df           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_laneq0v4hf            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_laneq90v4hf           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_laneq180v4hf          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmla_laneq270v4hf          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmlaq_lane0v8hf            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmlaq_lane90v8hf           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmlaq_lane180v8hf          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmlaq_lane270v8hf          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmlaq_lane0v4sf            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmlaq_lane90v4sf           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmlaq_lane180v4sf          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fcmlaq_lane270v4sf          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sdotv8qi                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_udotv8qi                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sdotv16qi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_udotv16qi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sdot_lanev8qi               (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_udot_lanev8qi               (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sdot_lanev16qi              (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_udot_lanev16qi              (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sdot_laneqv8qi              (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_udot_laneqv8qi              (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sdot_laneqv16qi             (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_udot_laneqv16qi             (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_rsqrtev4hf                  (rtx, rtx);
+extern rtx        gen_aarch64_rsqrtev8hf                  (rtx, rtx);
+extern rtx        gen_aarch64_rsqrtev2sf                  (rtx, rtx);
+extern rtx        gen_aarch64_rsqrtev4sf                  (rtx, rtx);
+extern rtx        gen_aarch64_rsqrtev2df                  (rtx, rtx);
+extern rtx        gen_aarch64_rsqrtehf                    (rtx, rtx);
+extern rtx        gen_aarch64_rsqrtesf                    (rtx, rtx);
+extern rtx        gen_aarch64_rsqrtedf                    (rtx, rtx);
+extern rtx        gen_aarch64_rsqrtsv4hf                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_rsqrtsv8hf                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_rsqrtsv2sf                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_rsqrtsv4sf                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_rsqrtsv2df                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_rsqrtshf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_rsqrtssf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_rsqrtsdf                    (rtx, rtx, rtx);
+extern rtx        gen_negv8qi2                            (rtx, rtx);
+extern rtx        gen_negv16qi2                           (rtx, rtx);
+extern rtx        gen_negv4hi2                            (rtx, rtx);
+extern rtx        gen_negv8hi2                            (rtx, rtx);
+extern rtx        gen_negv2si2                            (rtx, rtx);
+extern rtx        gen_negv4si2                            (rtx, rtx);
+extern rtx        gen_negv2di2                            (rtx, rtx);
+extern rtx        gen_absv8qi2                            (rtx, rtx);
+extern rtx        gen_absv16qi2                           (rtx, rtx);
+extern rtx        gen_absv4hi2                            (rtx, rtx);
+extern rtx        gen_absv8hi2                            (rtx, rtx);
+extern rtx        gen_absv2si2                            (rtx, rtx);
+extern rtx        gen_absv4si2                            (rtx, rtx);
+extern rtx        gen_absv2di2                            (rtx, rtx);
+extern rtx        gen_aarch64_absv8qi                     (rtx, rtx);
+extern rtx        gen_aarch64_absv16qi                    (rtx, rtx);
+extern rtx        gen_aarch64_absv4hi                     (rtx, rtx);
+extern rtx        gen_aarch64_absv8hi                     (rtx, rtx);
+extern rtx        gen_aarch64_absv2si                     (rtx, rtx);
+extern rtx        gen_aarch64_absv4si                     (rtx, rtx);
+extern rtx        gen_aarch64_absv2di                     (rtx, rtx);
+extern rtx        gen_aarch64_absdi                       (rtx, rtx);
+extern rtx        gen_aarch64_sabdl2v8qi_3                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uabdl2v8qi_3                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sabdl2v16qi_3               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uabdl2v16qi_3               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sabdl2v4hi_3                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uabdl2v4hi_3                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sabdl2v8hi_3                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uabdl2v8hi_3                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sabdl2v4si_3                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uabdl2v4si_3                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sabalv8qi_4                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uabalv8qi_4                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sabalv16qi_4                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uabalv16qi_4                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sabalv4hi_4                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uabalv4hi_4                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sabalv8hi_4                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uabalv8hi_4                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sabalv4si_4                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uabalv4si_4                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sadalpv8qi_3                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uadalpv8qi_3                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sadalpv16qi_3               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uadalpv16qi_3               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sadalpv4hi_3                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uadalpv4hi_3                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sadalpv8hi_3                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uadalpv8hi_3                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sadalpv4si_3                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uadalpv4si_3                (rtx, rtx, rtx);
+extern rtx        gen_abav8qi_3                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_abav16qi_3                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_abav4hi_3                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_abav8hi_3                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_abav2si_3                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_abav4si_3                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_fabdv4hf3                           (rtx, rtx, rtx);
+extern rtx        gen_fabdv8hf3                           (rtx, rtx, rtx);
+extern rtx        gen_fabdv2sf3                           (rtx, rtx, rtx);
+extern rtx        gen_fabdv4sf3                           (rtx, rtx, rtx);
+extern rtx        gen_fabdv2df3                           (rtx, rtx, rtx);
+extern rtx        gen_fabdhf3                             (rtx, rtx, rtx);
+extern rtx        gen_fabdsf3                             (rtx, rtx, rtx);
+extern rtx        gen_fabddf3                             (rtx, rtx, rtx);
+extern rtx        gen_andv8qi3                            (rtx, rtx, rtx);
+extern rtx        gen_andv16qi3                           (rtx, rtx, rtx);
+extern rtx        gen_andv4hi3                            (rtx, rtx, rtx);
+extern rtx        gen_andv8hi3                            (rtx, rtx, rtx);
+extern rtx        gen_andv2si3                            (rtx, rtx, rtx);
+extern rtx        gen_andv4si3                            (rtx, rtx, rtx);
+extern rtx        gen_andv2di3                            (rtx, rtx, rtx);
+extern rtx        gen_iorv8qi3                            (rtx, rtx, rtx);
+extern rtx        gen_iorv16qi3                           (rtx, rtx, rtx);
+extern rtx        gen_iorv4hi3                            (rtx, rtx, rtx);
+extern rtx        gen_iorv8hi3                            (rtx, rtx, rtx);
+extern rtx        gen_iorv2si3                            (rtx, rtx, rtx);
+extern rtx        gen_iorv4si3                            (rtx, rtx, rtx);
+extern rtx        gen_iorv2di3                            (rtx, rtx, rtx);
+extern rtx        gen_xorv8qi3                            (rtx, rtx, rtx);
+extern rtx        gen_xorv16qi3                           (rtx, rtx, rtx);
+extern rtx        gen_xorv4hi3                            (rtx, rtx, rtx);
+extern rtx        gen_xorv8hi3                            (rtx, rtx, rtx);
+extern rtx        gen_xorv2si3                            (rtx, rtx, rtx);
+extern rtx        gen_xorv4si3                            (rtx, rtx, rtx);
+extern rtx        gen_xorv2di3                            (rtx, rtx, rtx);
+extern rtx        gen_one_cmplv8qi2                       (rtx, rtx);
+extern rtx        gen_one_cmplv16qi2                      (rtx, rtx);
+extern rtx        gen_one_cmplv4hi2                       (rtx, rtx);
+extern rtx        gen_one_cmplv8hi2                       (rtx, rtx);
+extern rtx        gen_one_cmplv2si2                       (rtx, rtx);
+extern rtx        gen_one_cmplv4si2                       (rtx, rtx);
+extern rtx        gen_one_cmplv2di2                       (rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_setv8qi            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_setv16qi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_setv4hi            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_setv8hi            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_setv2si            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_setv4si            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_setv2di            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_setv4hf            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_setv8hf            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_setv2sf            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_setv4sf            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_setv2df            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_lshrv8qi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_lshrv16qi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_lshrv4hi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_lshrv8hi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_lshrv2si               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_lshrv4si               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_lshrv2di               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_ashrv8qi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_ashrv16qi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_ashrv4hi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_ashrv8hi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_ashrv2si               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_ashrv4si               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_ashrv2di               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_imm_shlv8qi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_imm_shlv16qi           (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_imm_shlv4hi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_imm_shlv8hi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_imm_shlv2si            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_imm_shlv4si            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_imm_shlv2di            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_sshlv8qi           (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_sshlv16qi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_sshlv4hi           (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_sshlv8hi           (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_sshlv2si           (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_sshlv4si           (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_sshlv2di           (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_shlv8qi_unsigned   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_shlv16qi_unsigned  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_shlv4hi_unsigned   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_shlv8hi_unsigned   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_shlv2si_unsigned   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_shlv4si_unsigned   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_shlv2di_unsigned   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_shlv8qi_signed     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_shlv16qi_signed    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_shlv4hi_signed     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_shlv8hi_signed     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_shlv2si_signed     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_shlv4si_signed     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_reg_shlv2di_signed     (rtx, rtx, rtx);
+extern rtx        gen_vec_shr_v8qi                        (rtx, rtx, rtx);
+extern rtx        gen_vec_shr_v4hi                        (rtx, rtx, rtx);
+extern rtx        gen_vec_shr_v4hf                        (rtx, rtx, rtx);
+extern rtx        gen_vec_shr_v2si                        (rtx, rtx, rtx);
+extern rtx        gen_vec_shr_v2sf                        (rtx, rtx, rtx);
+extern rtx        gen_aarch64_mlav8qi                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_mlav16qi                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_mlav4hi                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_mlav8hi                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_mlav2si                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_mlav4si                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_mlsv8qi                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_mlsv16qi                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_mlsv4hi                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_mlsv8hi                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_mlsv2si                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_mlsv4si                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_smaxv8qi3                           (rtx, rtx, rtx);
+extern rtx        gen_sminv8qi3                           (rtx, rtx, rtx);
+extern rtx        gen_umaxv8qi3                           (rtx, rtx, rtx);
+extern rtx        gen_uminv8qi3                           (rtx, rtx, rtx);
+extern rtx        gen_smaxv16qi3                          (rtx, rtx, rtx);
+extern rtx        gen_sminv16qi3                          (rtx, rtx, rtx);
+extern rtx        gen_umaxv16qi3                          (rtx, rtx, rtx);
+extern rtx        gen_uminv16qi3                          (rtx, rtx, rtx);
+extern rtx        gen_smaxv4hi3                           (rtx, rtx, rtx);
+extern rtx        gen_sminv4hi3                           (rtx, rtx, rtx);
+extern rtx        gen_umaxv4hi3                           (rtx, rtx, rtx);
+extern rtx        gen_uminv4hi3                           (rtx, rtx, rtx);
+extern rtx        gen_smaxv8hi3                           (rtx, rtx, rtx);
+extern rtx        gen_sminv8hi3                           (rtx, rtx, rtx);
+extern rtx        gen_umaxv8hi3                           (rtx, rtx, rtx);
+extern rtx        gen_uminv8hi3                           (rtx, rtx, rtx);
+extern rtx        gen_smaxv2si3                           (rtx, rtx, rtx);
+extern rtx        gen_sminv2si3                           (rtx, rtx, rtx);
+extern rtx        gen_umaxv2si3                           (rtx, rtx, rtx);
+extern rtx        gen_uminv2si3                           (rtx, rtx, rtx);
+extern rtx        gen_smaxv4si3                           (rtx, rtx, rtx);
+extern rtx        gen_sminv4si3                           (rtx, rtx, rtx);
+extern rtx        gen_umaxv4si3                           (rtx, rtx, rtx);
+extern rtx        gen_uminv4si3                           (rtx, rtx, rtx);
+extern rtx        gen_aarch64_umaxpv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uminpv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smaxpv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sminpv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_umaxpv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uminpv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smaxpv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sminpv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_umaxpv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uminpv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smaxpv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sminpv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_umaxpv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uminpv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smaxpv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sminpv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_umaxpv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uminpv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smaxpv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sminpv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_umaxpv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uminpv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smaxpv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sminpv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smax_nanpv4hf               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smin_nanpv4hf               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smaxpv4hf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sminpv4hf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smax_nanpv8hf               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smin_nanpv8hf               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smaxpv8hf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sminpv8hf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smax_nanpv2sf               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smin_nanpv2sf               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smaxpv2sf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sminpv2sf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smax_nanpv4sf               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smin_nanpv4sf               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smaxpv4sf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sminpv4sf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smax_nanpv2df               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smin_nanpv2df               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_smaxpv2df                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sminpv2df                   (rtx, rtx, rtx);
+extern rtx        gen_move_lo_quad_internal_v16qi         (rtx, rtx);
+extern rtx        gen_move_lo_quad_internal_v8hi          (rtx, rtx);
+extern rtx        gen_move_lo_quad_internal_v4si          (rtx, rtx);
+extern rtx        gen_move_lo_quad_internal_v8hf          (rtx, rtx);
+extern rtx        gen_move_lo_quad_internal_v4sf          (rtx, rtx);
+extern rtx        gen_move_lo_quad_internal_v2di          (rtx, rtx);
+extern rtx        gen_move_lo_quad_internal_v2df          (rtx, rtx);
+extern rtx        gen_move_lo_quad_internal_be_v16qi      (rtx, rtx);
+extern rtx        gen_move_lo_quad_internal_be_v8hi       (rtx, rtx);
+extern rtx        gen_move_lo_quad_internal_be_v4si       (rtx, rtx);
+extern rtx        gen_move_lo_quad_internal_be_v8hf       (rtx, rtx);
+extern rtx        gen_move_lo_quad_internal_be_v4sf       (rtx, rtx);
+extern rtx        gen_move_lo_quad_internal_be_v2di       (rtx, rtx);
+extern rtx        gen_move_lo_quad_internal_be_v2df       (rtx, rtx);
+extern rtx        gen_aarch64_simd_move_hi_quad_v16qi     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_move_hi_quad_v8hi      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_move_hi_quad_v4si      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_move_hi_quad_v2di      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_move_hi_quad_v8hf      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_move_hi_quad_v4sf      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_move_hi_quad_v2df      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_move_hi_quad_be_v16qi  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_move_hi_quad_be_v8hi   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_move_hi_quad_be_v4si   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_move_hi_quad_be_v2di   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_move_hi_quad_be_v8hf   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_move_hi_quad_be_v4sf   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_move_hi_quad_be_v2df   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_pack_trunc_v8hi    (rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_pack_trunc_v4si    (rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_pack_trunc_v2di    (rtx, rtx);
+extern rtx        gen_vec_pack_trunc_v8hi                 (rtx, rtx, rtx);
+extern rtx        gen_vec_pack_trunc_v4si                 (rtx, rtx, rtx);
+extern rtx        gen_vec_pack_trunc_v2di                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_unpacks_lo_v16qi   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_unpacku_lo_v16qi   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_unpacks_lo_v8hi    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_unpacku_lo_v8hi    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_unpacks_lo_v4si    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_unpacku_lo_v4si    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_unpacks_hi_v16qi   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_unpacku_hi_v16qi   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_unpacks_hi_v8hi    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_unpacku_hi_v8hi    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_unpacks_hi_v4si    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_unpacku_hi_v4si    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_smult_lo_v16qi     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_umult_lo_v16qi     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_smult_lo_v8hi      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_umult_lo_v8hi      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_smult_lo_v4si      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_umult_lo_v4si      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_smult_hi_v16qi     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_umult_hi_v16qi     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_smult_hi_v8hi      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_umult_hi_v8hi      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_smult_hi_v4si      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_umult_hi_v4si      (rtx, rtx, rtx, rtx);
+extern rtx        gen_addv4hf3                            (rtx, rtx, rtx);
+extern rtx        gen_addv8hf3                            (rtx, rtx, rtx);
+extern rtx        gen_addv2sf3                            (rtx, rtx, rtx);
+extern rtx        gen_addv4sf3                            (rtx, rtx, rtx);
+extern rtx        gen_addv2df3                            (rtx, rtx, rtx);
+extern rtx        gen_subv4hf3                            (rtx, rtx, rtx);
+extern rtx        gen_subv8hf3                            (rtx, rtx, rtx);
+extern rtx        gen_subv2sf3                            (rtx, rtx, rtx);
+extern rtx        gen_subv4sf3                            (rtx, rtx, rtx);
+extern rtx        gen_subv2df3                            (rtx, rtx, rtx);
+extern rtx        gen_mulv4hf3                            (rtx, rtx, rtx);
+extern rtx        gen_mulv8hf3                            (rtx, rtx, rtx);
+extern rtx        gen_mulv2sf3                            (rtx, rtx, rtx);
+extern rtx        gen_mulv4sf3                            (rtx, rtx, rtx);
+extern rtx        gen_mulv2df3                            (rtx, rtx, rtx);
+extern rtx        gen_negv4hf2                            (rtx, rtx);
+extern rtx        gen_negv8hf2                            (rtx, rtx);
+extern rtx        gen_negv2sf2                            (rtx, rtx);
+extern rtx        gen_negv4sf2                            (rtx, rtx);
+extern rtx        gen_negv2df2                            (rtx, rtx);
+extern rtx        gen_absv4hf2                            (rtx, rtx);
+extern rtx        gen_absv8hf2                            (rtx, rtx);
+extern rtx        gen_absv2sf2                            (rtx, rtx);
+extern rtx        gen_absv4sf2                            (rtx, rtx);
+extern rtx        gen_absv2df2                            (rtx, rtx);
+extern rtx        gen_fmav4hf4                            (rtx, rtx, rtx, rtx);
+extern rtx        gen_fmav8hf4                            (rtx, rtx, rtx, rtx);
+extern rtx        gen_fmav2sf4                            (rtx, rtx, rtx, rtx);
+extern rtx        gen_fmav4sf4                            (rtx, rtx, rtx, rtx);
+extern rtx        gen_fmav2df4                            (rtx, rtx, rtx, rtx);
+extern rtx        gen_fnmav4hf4                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_fnmav8hf4                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_fnmav2sf4                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_fnmav4sf4                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_fnmav2df4                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_btruncv4hf2                         (rtx, rtx);
+extern rtx        gen_ceilv4hf2                           (rtx, rtx);
+extern rtx        gen_floorv4hf2                          (rtx, rtx);
+extern rtx        gen_frintnv4hf2                         (rtx, rtx);
+extern rtx        gen_nearbyintv4hf2                      (rtx, rtx);
+extern rtx        gen_rintv4hf2                           (rtx, rtx);
+extern rtx        gen_roundv4hf2                          (rtx, rtx);
+extern rtx        gen_btruncv8hf2                         (rtx, rtx);
+extern rtx        gen_ceilv8hf2                           (rtx, rtx);
+extern rtx        gen_floorv8hf2                          (rtx, rtx);
+extern rtx        gen_frintnv8hf2                         (rtx, rtx);
+extern rtx        gen_nearbyintv8hf2                      (rtx, rtx);
+extern rtx        gen_rintv8hf2                           (rtx, rtx);
+extern rtx        gen_roundv8hf2                          (rtx, rtx);
+extern rtx        gen_btruncv2sf2                         (rtx, rtx);
+extern rtx        gen_ceilv2sf2                           (rtx, rtx);
+extern rtx        gen_floorv2sf2                          (rtx, rtx);
+extern rtx        gen_frintnv2sf2                         (rtx, rtx);
+extern rtx        gen_nearbyintv2sf2                      (rtx, rtx);
+extern rtx        gen_rintv2sf2                           (rtx, rtx);
+extern rtx        gen_roundv2sf2                          (rtx, rtx);
+extern rtx        gen_btruncv4sf2                         (rtx, rtx);
+extern rtx        gen_ceilv4sf2                           (rtx, rtx);
+extern rtx        gen_floorv4sf2                          (rtx, rtx);
+extern rtx        gen_frintnv4sf2                         (rtx, rtx);
+extern rtx        gen_nearbyintv4sf2                      (rtx, rtx);
+extern rtx        gen_rintv4sf2                           (rtx, rtx);
+extern rtx        gen_roundv4sf2                          (rtx, rtx);
+extern rtx        gen_btruncv2df2                         (rtx, rtx);
+extern rtx        gen_ceilv2df2                           (rtx, rtx);
+extern rtx        gen_floorv2df2                          (rtx, rtx);
+extern rtx        gen_frintnv2df2                         (rtx, rtx);
+extern rtx        gen_nearbyintv2df2                      (rtx, rtx);
+extern rtx        gen_rintv2df2                           (rtx, rtx);
+extern rtx        gen_roundv2df2                          (rtx, rtx);
+extern rtx        gen_lbtruncv4hfv4hi2                    (rtx, rtx);
+extern rtx        gen_lceilv4hfv4hi2                      (rtx, rtx);
+extern rtx        gen_lfloorv4hfv4hi2                     (rtx, rtx);
+extern rtx        gen_lroundv4hfv4hi2                     (rtx, rtx);
+extern rtx        gen_lfrintnv4hfv4hi2                    (rtx, rtx);
+extern rtx        gen_lbtruncuv4hfv4hi2                   (rtx, rtx);
+extern rtx        gen_lceiluv4hfv4hi2                     (rtx, rtx);
+extern rtx        gen_lflooruv4hfv4hi2                    (rtx, rtx);
+extern rtx        gen_lrounduv4hfv4hi2                    (rtx, rtx);
+extern rtx        gen_lfrintnuv4hfv4hi2                   (rtx, rtx);
+extern rtx        gen_lbtruncv8hfv8hi2                    (rtx, rtx);
+extern rtx        gen_lceilv8hfv8hi2                      (rtx, rtx);
+extern rtx        gen_lfloorv8hfv8hi2                     (rtx, rtx);
+extern rtx        gen_lroundv8hfv8hi2                     (rtx, rtx);
+extern rtx        gen_lfrintnv8hfv8hi2                    (rtx, rtx);
+extern rtx        gen_lbtruncuv8hfv8hi2                   (rtx, rtx);
+extern rtx        gen_lceiluv8hfv8hi2                     (rtx, rtx);
+extern rtx        gen_lflooruv8hfv8hi2                    (rtx, rtx);
+extern rtx        gen_lrounduv8hfv8hi2                    (rtx, rtx);
+extern rtx        gen_lfrintnuv8hfv8hi2                   (rtx, rtx);
+extern rtx        gen_lbtruncv2sfv2si2                    (rtx, rtx);
+extern rtx        gen_lceilv2sfv2si2                      (rtx, rtx);
+extern rtx        gen_lfloorv2sfv2si2                     (rtx, rtx);
+extern rtx        gen_lroundv2sfv2si2                     (rtx, rtx);
+extern rtx        gen_lfrintnv2sfv2si2                    (rtx, rtx);
+extern rtx        gen_lbtruncuv2sfv2si2                   (rtx, rtx);
+extern rtx        gen_lceiluv2sfv2si2                     (rtx, rtx);
+extern rtx        gen_lflooruv2sfv2si2                    (rtx, rtx);
+extern rtx        gen_lrounduv2sfv2si2                    (rtx, rtx);
+extern rtx        gen_lfrintnuv2sfv2si2                   (rtx, rtx);
+extern rtx        gen_lbtruncv4sfv4si2                    (rtx, rtx);
+extern rtx        gen_lceilv4sfv4si2                      (rtx, rtx);
+extern rtx        gen_lfloorv4sfv4si2                     (rtx, rtx);
+extern rtx        gen_lroundv4sfv4si2                     (rtx, rtx);
+extern rtx        gen_lfrintnv4sfv4si2                    (rtx, rtx);
+extern rtx        gen_lbtruncuv4sfv4si2                   (rtx, rtx);
+extern rtx        gen_lceiluv4sfv4si2                     (rtx, rtx);
+extern rtx        gen_lflooruv4sfv4si2                    (rtx, rtx);
+extern rtx        gen_lrounduv4sfv4si2                    (rtx, rtx);
+extern rtx        gen_lfrintnuv4sfv4si2                   (rtx, rtx);
+extern rtx        gen_lbtruncv2dfv2di2                    (rtx, rtx);
+extern rtx        gen_lceilv2dfv2di2                      (rtx, rtx);
+extern rtx        gen_lfloorv2dfv2di2                     (rtx, rtx);
+extern rtx        gen_lroundv2dfv2di2                     (rtx, rtx);
+extern rtx        gen_lfrintnv2dfv2di2                    (rtx, rtx);
+extern rtx        gen_lbtruncuv2dfv2di2                   (rtx, rtx);
+extern rtx        gen_lceiluv2dfv2di2                     (rtx, rtx);
+extern rtx        gen_lflooruv2dfv2di2                    (rtx, rtx);
+extern rtx        gen_lrounduv2dfv2di2                    (rtx, rtx);
+extern rtx        gen_lfrintnuv2dfv2di2                   (rtx, rtx);
+extern rtx        gen_lbtrunchfhi2                        (rtx, rtx);
+extern rtx        gen_lceilhfhi2                          (rtx, rtx);
+extern rtx        gen_lfloorhfhi2                         (rtx, rtx);
+extern rtx        gen_lroundhfhi2                         (rtx, rtx);
+extern rtx        gen_lfrintnhfhi2                        (rtx, rtx);
+extern rtx        gen_lbtruncuhfhi2                       (rtx, rtx);
+extern rtx        gen_lceiluhfhi2                         (rtx, rtx);
+extern rtx        gen_lflooruhfhi2                        (rtx, rtx);
+extern rtx        gen_lrounduhfhi2                        (rtx, rtx);
+extern rtx        gen_lfrintnuhfhi2                       (rtx, rtx);
+extern rtx        gen_fix_trunchfhi2                      (rtx, rtx);
+extern rtx        gen_fixuns_trunchfhi2                   (rtx, rtx);
+extern rtx        gen_floathihf2                          (rtx, rtx);
+extern rtx        gen_floatunshihf2                       (rtx, rtx);
+extern rtx        gen_floatv4hiv4hf2                      (rtx, rtx);
+extern rtx        gen_floatunsv4hiv4hf2                   (rtx, rtx);
+extern rtx        gen_floatv8hiv8hf2                      (rtx, rtx);
+extern rtx        gen_floatunsv8hiv8hf2                   (rtx, rtx);
+extern rtx        gen_floatv2siv2sf2                      (rtx, rtx);
+extern rtx        gen_floatunsv2siv2sf2                   (rtx, rtx);
+extern rtx        gen_floatv4siv4sf2                      (rtx, rtx);
+extern rtx        gen_floatunsv4siv4sf2                   (rtx, rtx);
+extern rtx        gen_floatv2div2df2                      (rtx, rtx);
+extern rtx        gen_floatunsv2div2df2                   (rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_unpacks_lo_v8hf    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_unpacks_lo_v4sf    (rtx, rtx, rtx);
+extern rtx        gen_fcvtzsv4hf3                         (rtx, rtx, rtx);
+extern rtx        gen_fcvtzuv4hf3                         (rtx, rtx, rtx);
+extern rtx        gen_fcvtzsv8hf3                         (rtx, rtx, rtx);
+extern rtx        gen_fcvtzuv8hf3                         (rtx, rtx, rtx);
+extern rtx        gen_fcvtzsv2sf3                         (rtx, rtx, rtx);
+extern rtx        gen_fcvtzuv2sf3                         (rtx, rtx, rtx);
+extern rtx        gen_fcvtzsv4sf3                         (rtx, rtx, rtx);
+extern rtx        gen_fcvtzuv4sf3                         (rtx, rtx, rtx);
+extern rtx        gen_fcvtzsv2df3                         (rtx, rtx, rtx);
+extern rtx        gen_fcvtzuv2df3                         (rtx, rtx, rtx);
+extern rtx        gen_scvtfv4hi3                          (rtx, rtx, rtx);
+extern rtx        gen_ucvtfv4hi3                          (rtx, rtx, rtx);
+extern rtx        gen_scvtfv8hi3                          (rtx, rtx, rtx);
+extern rtx        gen_ucvtfv8hi3                          (rtx, rtx, rtx);
+extern rtx        gen_scvtfv2si3                          (rtx, rtx, rtx);
+extern rtx        gen_ucvtfv2si3                          (rtx, rtx, rtx);
+extern rtx        gen_scvtfv4si3                          (rtx, rtx, rtx);
+extern rtx        gen_ucvtfv4si3                          (rtx, rtx, rtx);
+extern rtx        gen_scvtfv2di3                          (rtx, rtx, rtx);
+extern rtx        gen_ucvtfv2di3                          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_unpacks_hi_v8hf    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_vec_unpacks_hi_v4sf    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_float_extend_lo_v2df        (rtx, rtx);
+extern rtx        gen_aarch64_float_extend_lo_v4sf        (rtx, rtx);
+extern rtx        gen_aarch64_float_truncate_lo_v2sf      (rtx, rtx);
+extern rtx        gen_aarch64_float_truncate_lo_v4hf      (rtx, rtx);
+extern rtx        gen_aarch64_float_truncate_hi_v4sf_le   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_float_truncate_hi_v8hf_le   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_float_truncate_hi_v4sf_be   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_float_truncate_hi_v8hf_be   (rtx, rtx, rtx);
+extern rtx        gen_smaxv4hf3                           (rtx, rtx, rtx);
+extern rtx        gen_sminv4hf3                           (rtx, rtx, rtx);
+extern rtx        gen_smaxv8hf3                           (rtx, rtx, rtx);
+extern rtx        gen_sminv8hf3                           (rtx, rtx, rtx);
+extern rtx        gen_smaxv2sf3                           (rtx, rtx, rtx);
+extern rtx        gen_sminv2sf3                           (rtx, rtx, rtx);
+extern rtx        gen_smaxv4sf3                           (rtx, rtx, rtx);
+extern rtx        gen_sminv4sf3                           (rtx, rtx, rtx);
+extern rtx        gen_smaxv2df3                           (rtx, rtx, rtx);
+extern rtx        gen_sminv2df3                           (rtx, rtx, rtx);
+extern rtx        gen_smax_nanv4hf3                       (rtx, rtx, rtx);
+extern rtx        gen_smin_nanv4hf3                       (rtx, rtx, rtx);
+extern rtx        gen_fmaxv4hf3                           (rtx, rtx, rtx);
+extern rtx        gen_fminv4hf3                           (rtx, rtx, rtx);
+extern rtx        gen_smax_nanv8hf3                       (rtx, rtx, rtx);
+extern rtx        gen_smin_nanv8hf3                       (rtx, rtx, rtx);
+extern rtx        gen_fmaxv8hf3                           (rtx, rtx, rtx);
+extern rtx        gen_fminv8hf3                           (rtx, rtx, rtx);
+extern rtx        gen_smax_nanv2sf3                       (rtx, rtx, rtx);
+extern rtx        gen_smin_nanv2sf3                       (rtx, rtx, rtx);
+extern rtx        gen_fmaxv2sf3                           (rtx, rtx, rtx);
+extern rtx        gen_fminv2sf3                           (rtx, rtx, rtx);
+extern rtx        gen_smax_nanv4sf3                       (rtx, rtx, rtx);
+extern rtx        gen_smin_nanv4sf3                       (rtx, rtx, rtx);
+extern rtx        gen_fmaxv4sf3                           (rtx, rtx, rtx);
+extern rtx        gen_fminv4sf3                           (rtx, rtx, rtx);
+extern rtx        gen_smax_nanv2df3                       (rtx, rtx, rtx);
+extern rtx        gen_smin_nanv2df3                       (rtx, rtx, rtx);
+extern rtx        gen_fmaxv2df3                           (rtx, rtx, rtx);
+extern rtx        gen_fminv2df3                           (rtx, rtx, rtx);
+extern rtx        gen_aarch64_faddpv4hf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_faddpv8hf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_faddpv2sf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_faddpv4sf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_faddpv2df                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reduc_plus_internalv8qi     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_plus_internalv16qi    (rtx, rtx);
+extern rtx        gen_aarch64_reduc_plus_internalv4hi     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_plus_internalv8hi     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_plus_internalv4si     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_plus_internalv2di     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_plus_internalv2si     (rtx, rtx);
+extern rtx        gen_reduc_plus_scal_v2sf                (rtx, rtx);
+extern rtx        gen_reduc_plus_scal_v2df                (rtx, rtx);
+extern rtx        gen_clrsbv8qi2                          (rtx, rtx);
+extern rtx        gen_clrsbv16qi2                         (rtx, rtx);
+extern rtx        gen_clrsbv4hi2                          (rtx, rtx);
+extern rtx        gen_clrsbv8hi2                          (rtx, rtx);
+extern rtx        gen_clrsbv2si2                          (rtx, rtx);
+extern rtx        gen_clrsbv4si2                          (rtx, rtx);
+extern rtx        gen_clzv8qi2                            (rtx, rtx);
+extern rtx        gen_clzv16qi2                           (rtx, rtx);
+extern rtx        gen_clzv4hi2                            (rtx, rtx);
+extern rtx        gen_clzv8hi2                            (rtx, rtx);
+extern rtx        gen_clzv2si2                            (rtx, rtx);
+extern rtx        gen_clzv4si2                            (rtx, rtx);
+extern rtx        gen_popcountv8qi2                       (rtx, rtx);
+extern rtx        gen_popcountv16qi2                      (rtx, rtx);
+extern rtx        gen_aarch64_reduc_umax_internalv8qi     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_umin_internalv8qi     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smax_internalv8qi     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smin_internalv8qi     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_umax_internalv16qi    (rtx, rtx);
+extern rtx        gen_aarch64_reduc_umin_internalv16qi    (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smax_internalv16qi    (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smin_internalv16qi    (rtx, rtx);
+extern rtx        gen_aarch64_reduc_umax_internalv4hi     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_umin_internalv4hi     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smax_internalv4hi     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smin_internalv4hi     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_umax_internalv8hi     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_umin_internalv8hi     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smax_internalv8hi     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smin_internalv8hi     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_umax_internalv4si     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_umin_internalv4si     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smax_internalv4si     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smin_internalv4si     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_umax_internalv2si     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_umin_internalv2si     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smax_internalv2si     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smin_internalv2si     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smax_nan_internalv4hf (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smin_nan_internalv4hf (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smax_internalv4hf     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smin_internalv4hf     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smax_nan_internalv8hf (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smin_nan_internalv8hf (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smax_internalv8hf     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smin_internalv8hf     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smax_nan_internalv2sf (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smin_nan_internalv2sf (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smax_internalv2sf     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smin_internalv2sf     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smax_nan_internalv4sf (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smin_nan_internalv4sf (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smax_internalv4sf     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smin_internalv4sf     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smax_nan_internalv2df (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smin_nan_internalv2df (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smax_internalv2df     (rtx, rtx);
+extern rtx        gen_aarch64_reduc_smin_internalv2df     (rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv8qi_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv16qi_internal      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv4hi_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv8hi_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv2si_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv4si_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv2di_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bsldi_internal         (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bsldi_alt              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_lanev8qi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_lanev16qi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_lanev4hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_lanev8hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_lanev2si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_lanev4si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_lanev2di                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_lanev4hf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_lanev8hf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_lanev2sf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_lanev4sf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_lanev2df                (rtx, rtx, rtx);
+extern rtx        gen_load_pair_lanesv8qi                 (rtx, rtx, rtx);
+extern rtx        gen_load_pair_lanesv4hi                 (rtx, rtx, rtx);
+extern rtx        gen_load_pair_lanesv4hf                 (rtx, rtx, rtx);
+extern rtx        gen_load_pair_lanesv2si                 (rtx, rtx, rtx);
+extern rtx        gen_load_pair_lanesv2sf                 (rtx, rtx, rtx);
+extern rtx        gen_load_pair_lanesdi                   (rtx, rtx, rtx);
+extern rtx        gen_load_pair_lanesdf                   (rtx, rtx, rtx);
+extern rtx        gen_store_pair_lanesv8qi                (rtx, rtx, rtx);
+extern rtx        gen_store_pair_lanesv4hi                (rtx, rtx, rtx);
+extern rtx        gen_store_pair_lanesv4hf                (rtx, rtx, rtx);
+extern rtx        gen_store_pair_lanesv2si                (rtx, rtx, rtx);
+extern rtx        gen_store_pair_lanesv2sf                (rtx, rtx, rtx);
+extern rtx        gen_store_pair_lanesdi                  (rtx, rtx, rtx);
+extern rtx        gen_store_pair_lanesdf                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddlv16qi_hi_internal      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssublv16qi_hi_internal      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddlv16qi_hi_internal      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usublv16qi_hi_internal      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddlv8hi_hi_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssublv8hi_hi_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddlv8hi_hi_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usublv8hi_hi_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddlv4si_hi_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssublv4si_hi_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddlv4si_hi_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usublv4si_hi_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddlv16qi_lo_internal      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssublv16qi_lo_internal      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddlv16qi_lo_internal      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usublv16qi_lo_internal      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddlv8hi_lo_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssublv8hi_lo_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddlv8hi_lo_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usublv8hi_lo_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddlv4si_lo_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssublv4si_lo_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddlv4si_lo_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usublv4si_lo_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddlv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssublv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddlv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usublv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddlv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssublv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddlv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usublv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddlv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssublv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddlv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usublv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssubwv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usubwv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssubwv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usubwv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssubwv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usubwv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssubwv16qi_internal         (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usubwv16qi_internal         (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssubwv8hi_internal          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usubwv8hi_internal          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssubwv4si_internal          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usubwv4si_internal          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssubw2v16qi_internal        (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usubw2v16qi_internal        (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssubw2v8hi_internal         (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usubw2v8hi_internal         (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssubw2v4si_internal         (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usubw2v4si_internal         (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddwv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddwv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddwv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddwv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddwv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddwv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddwv16qi_internal         (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddwv16qi_internal         (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddwv8hi_internal          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddwv8hi_internal          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddwv4si_internal          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddwv4si_internal          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddw2v16qi_internal        (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddw2v16qi_internal        (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddw2v8hi_internal         (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddw2v8hi_internal         (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddw2v4si_internal         (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddw2v4si_internal         (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_shaddv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uhaddv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srhaddv8qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urhaddv8qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_shsubv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uhsubv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srhsubv8qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urhsubv8qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_shaddv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uhaddv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srhaddv16qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urhaddv16qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_shsubv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uhsubv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srhsubv16qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urhsubv16qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_shaddv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uhaddv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srhaddv4hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urhaddv4hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_shsubv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uhsubv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srhsubv4hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urhsubv4hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_shaddv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uhaddv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srhaddv8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urhaddv8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_shsubv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uhsubv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srhsubv8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urhsubv8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_shaddv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uhaddv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srhaddv2si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urhaddv2si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_shsubv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uhsubv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srhsubv2si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urhsubv2si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_shaddv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uhaddv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srhaddv4si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urhaddv4si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_shsubv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uhsubv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srhsubv4si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urhsubv4si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_addhnv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_raddhnv8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_subhnv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_rsubhnv8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_addhnv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_raddhnv4si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_subhnv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_rsubhnv4si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_addhnv2di                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_raddhnv2di                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_subhnv2di                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_rsubhnv2di                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_addhn2v8hi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_raddhn2v8hi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_subhn2v8hi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_rsubhn2v8hi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_addhn2v4si                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_raddhn2v4si                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_subhn2v4si                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_rsubhn2v4si                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_addhn2v2di                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_raddhn2v2di                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_subhn2v2di                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_rsubhn2v2di                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_pmulv8qi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pmulv16qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmulxv4hf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmulxv8hf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmulxv2sf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmulxv4sf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmulxv2df                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmulxhf                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmulxsf                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmulxdf                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqaddv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqaddv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqsubv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqsubv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqaddv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqaddv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqsubv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqsubv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqaddv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqaddv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqsubv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqsubv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqaddv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqaddv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqsubv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqsubv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqaddv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqaddv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqsubv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqsubv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqaddv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqaddv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqsubv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqsubv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqaddv2di                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqaddv2di                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqsubv2di                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqsubv2di                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqaddqi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqaddqi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqsubqi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqsubqi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqaddhi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqaddhi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqsubhi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqsubhi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqaddsi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqaddsi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqsubsi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqsubsi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqadddi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqadddi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqsubdi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqsubdi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_suqaddv8qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usqaddv8qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_suqaddv16qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usqaddv16qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_suqaddv4hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usqaddv4hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_suqaddv8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usqaddv8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_suqaddv2si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usqaddv2si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_suqaddv4si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usqaddv4si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_suqaddv2di                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usqaddv2di                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_suqaddqi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usqaddqi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_suqaddhi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usqaddhi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_suqaddsi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usqaddsi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_suqadddi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usqadddi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqmovunv8hi                 (rtx, rtx);
+extern rtx        gen_aarch64_sqmovunv4si                 (rtx, rtx);
+extern rtx        gen_aarch64_sqmovunv2di                 (rtx, rtx);
+extern rtx        gen_aarch64_sqmovunhi                   (rtx, rtx);
+extern rtx        gen_aarch64_sqmovunsi                   (rtx, rtx);
+extern rtx        gen_aarch64_sqmovundi                   (rtx, rtx);
+extern rtx        gen_aarch64_sqmovnv8hi                  (rtx, rtx);
+extern rtx        gen_aarch64_uqmovnv8hi                  (rtx, rtx);
+extern rtx        gen_aarch64_sqmovnv4si                  (rtx, rtx);
+extern rtx        gen_aarch64_uqmovnv4si                  (rtx, rtx);
+extern rtx        gen_aarch64_sqmovnv2di                  (rtx, rtx);
+extern rtx        gen_aarch64_uqmovnv2di                  (rtx, rtx);
+extern rtx        gen_aarch64_sqmovnhi                    (rtx, rtx);
+extern rtx        gen_aarch64_uqmovnhi                    (rtx, rtx);
+extern rtx        gen_aarch64_sqmovnsi                    (rtx, rtx);
+extern rtx        gen_aarch64_uqmovnsi                    (rtx, rtx);
+extern rtx        gen_aarch64_sqmovndi                    (rtx, rtx);
+extern rtx        gen_aarch64_uqmovndi                    (rtx, rtx);
+extern rtx        gen_aarch64_sqnegv8qi                   (rtx, rtx);
+extern rtx        gen_aarch64_sqabsv8qi                   (rtx, rtx);
+extern rtx        gen_aarch64_sqnegv16qi                  (rtx, rtx);
+extern rtx        gen_aarch64_sqabsv16qi                  (rtx, rtx);
+extern rtx        gen_aarch64_sqnegv4hi                   (rtx, rtx);
+extern rtx        gen_aarch64_sqabsv4hi                   (rtx, rtx);
+extern rtx        gen_aarch64_sqnegv8hi                   (rtx, rtx);
+extern rtx        gen_aarch64_sqabsv8hi                   (rtx, rtx);
+extern rtx        gen_aarch64_sqnegv2si                   (rtx, rtx);
+extern rtx        gen_aarch64_sqabsv2si                   (rtx, rtx);
+extern rtx        gen_aarch64_sqnegv4si                   (rtx, rtx);
+extern rtx        gen_aarch64_sqabsv4si                   (rtx, rtx);
+extern rtx        gen_aarch64_sqnegv2di                   (rtx, rtx);
+extern rtx        gen_aarch64_sqabsv2di                   (rtx, rtx);
+extern rtx        gen_aarch64_sqnegqi                     (rtx, rtx);
+extern rtx        gen_aarch64_sqabsqi                     (rtx, rtx);
+extern rtx        gen_aarch64_sqneghi                     (rtx, rtx);
+extern rtx        gen_aarch64_sqabshi                     (rtx, rtx);
+extern rtx        gen_aarch64_sqnegsi                     (rtx, rtx);
+extern rtx        gen_aarch64_sqabssi                     (rtx, rtx);
+extern rtx        gen_aarch64_sqnegdi                     (rtx, rtx);
+extern rtx        gen_aarch64_sqabsdi                     (rtx, rtx);
+extern rtx        gen_aarch64_sqdmulhv4hi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulhv4hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmulhv8hi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulhv8hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmulhv2si                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulhv2si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmulhv4si                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulhv4si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmulhhi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulhhi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmulhsi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulhsi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmulh_lanev4hi            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulh_lanev4hi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmulh_lanev8hi            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulh_lanev8hi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmulh_lanev2si            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulh_lanev2si           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmulh_lanev4si            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulh_lanev4si           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmulh_laneqv4hi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulh_laneqv4hi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmulh_laneqv8hi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulh_laneqv8hi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmulh_laneqv2si           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulh_laneqv2si          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmulh_laneqv4si           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulh_laneqv4si          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmulh_lanehi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulh_lanehi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmulh_lanesi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulh_lanesi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmulh_laneqhi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulh_laneqhi            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmulh_laneqsi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmulh_laneqsi            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlahv4hi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlshv4hi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlahv8hi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlshv8hi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlahv2si                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlshv2si                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlahv4si                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlshv4si                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlahhi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlshhi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlahsi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlshsi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlah_lanev4hi           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlsh_lanev4hi           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlah_lanev8hi           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlsh_lanev8hi           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlah_lanev2si           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlsh_lanev2si           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlah_lanev4si           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlsh_lanev4si           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlah_lanehi             (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlsh_lanehi             (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlah_lanesi             (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlsh_lanesi             (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlah_laneqv4hi          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlsh_laneqv4hi          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlah_laneqv8hi          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlsh_laneqv8hi          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlah_laneqv2si          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlsh_laneqv2si          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlah_laneqv4si          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlsh_laneqv4si          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlah_laneqhi            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlsh_laneqhi            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlah_laneqsi            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrdmlsh_laneqsi            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlalv4hi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlslv4hi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlalv2si                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlslv2si                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlalhi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlslhi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlalsi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlslsi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal_lanev4hi            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl_lanev4hi            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal_lanev2si            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl_lanev2si            (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal_laneqv4hi           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl_laneqv4hi           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal_laneqv2si           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl_laneqv2si           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal_lanehi              (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl_lanehi              (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal_lanesi              (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl_lanesi              (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal_laneqhi             (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl_laneqhi             (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal_laneqsi             (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl_laneqsi             (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal_nv4hi               (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl_nv4hi               (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal_nv2si               (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl_nv2si               (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal2v8hi_internal       (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl2v8hi_internal       (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal2v4si_internal       (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl2v4si_internal       (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal2_lanev8hi_internal  (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl2_lanev8hi_internal  (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal2_lanev4si_internal  (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl2_lanev4si_internal  (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal2_laneqv8hi_internal (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl2_laneqv8hi_internal (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal2_laneqv4si_internal (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl2_laneqv4si_internal (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal2_nv8hi_internal     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl2_nv8hi_internal     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal2_nv4si_internal     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl2_nv4si_internal     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmullv4hi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmullv2si                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmullhi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmullsi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull_lanev4hi            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull_lanev2si            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull_laneqv4hi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull_laneqv2si           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull_lanehi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull_lanesi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull_laneqhi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull_laneqsi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull_nv4hi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull_nv2si               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull2v8hi_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull2v4si_internal       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull2_lanev8hi_internal  (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull2_lanev4si_internal  (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull2_laneqv8hi_internal (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull2_laneqv4si_internal (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull2_nv8hi_internal     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull2_nv4si_internal     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sshlv8qi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ushlv8qi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srshlv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urshlv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sshlv16qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ushlv16qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srshlv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urshlv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sshlv4hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ushlv4hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srshlv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urshlv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sshlv8hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ushlv8hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srshlv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urshlv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sshlv2si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ushlv2si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srshlv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urshlv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sshlv4si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ushlv4si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srshlv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urshlv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sshlv2di                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ushlv2di                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srshlv2di                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urshlv2di                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sshldi                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ushldi                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srshldi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urshldi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshlv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshlv8qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqrshlv8qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshlv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshlv16qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqrshlv16qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshlv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshlv4hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqrshlv4hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshlv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshlv8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqrshlv8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshlv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshlv2si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqrshlv2si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshlv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshlv4si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqrshlv4si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlv2di                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshlv2di                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshlv2di                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqrshlv2di                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlqi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshlqi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshlqi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqrshlqi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlhi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshlhi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshlhi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqrshlhi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlsi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshlsi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshlsi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqrshlsi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshldi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshldi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshldi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqrshldi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sshll_nv8qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ushll_nv8qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sshll_nv4hi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ushll_nv4hi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sshll_nv2si                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ushll_nv2si                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sshll2_nv16qi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ushll2_nv16qi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sshll2_nv8hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ushll2_nv8hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sshll2_nv4si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ushll2_nv4si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srshr_nv8qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urshr_nv8qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srshr_nv16qi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urshr_nv16qi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srshr_nv4hi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urshr_nv4hi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srshr_nv8hi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urshr_nv8hi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srshr_nv2si                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urshr_nv2si                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srshr_nv4si                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urshr_nv4si                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srshr_nv2di                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urshr_nv2di                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_srshr_ndi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urshr_ndi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssra_nv8qi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usra_nv8qi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_srsra_nv8qi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ursra_nv8qi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssra_nv16qi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usra_nv16qi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_srsra_nv16qi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ursra_nv16qi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssra_nv4hi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usra_nv4hi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_srsra_nv4hi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ursra_nv4hi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssra_nv8hi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usra_nv8hi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_srsra_nv8hi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ursra_nv8hi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssra_nv2si                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usra_nv2si                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_srsra_nv2si                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ursra_nv2si                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssra_nv4si                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usra_nv4si                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_srsra_nv4si                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ursra_nv4si                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssra_nv2di                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usra_nv2di                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_srsra_nv2di                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ursra_nv2di                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssra_ndi                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usra_ndi                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_srsra_ndi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ursra_ndi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssli_nv8qi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usli_nv8qi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssri_nv8qi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usri_nv8qi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssli_nv16qi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usli_nv16qi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssri_nv16qi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usri_nv16qi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssli_nv4hi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usli_nv4hi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssri_nv4hi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usri_nv4hi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssli_nv8hi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usli_nv8hi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssri_nv8hi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usri_nv8hi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssli_nv2si                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usli_nv2si                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssri_nv2si                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usri_nv2si                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssli_nv4si                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usli_nv4si                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssri_nv4si                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usri_nv4si                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssli_nv2di                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usli_nv2di                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssri_nv2di                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usri_nv2di                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssli_ndi                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usli_ndi                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssri_ndi                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_usri_ndi                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlu_nv8qi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshl_nv8qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshl_nv8qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlu_nv16qi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshl_nv16qi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshl_nv16qi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlu_nv4hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshl_nv4hi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshl_nv4hi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlu_nv8hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshl_nv8hi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshl_nv8hi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlu_nv2si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshl_nv2si                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshl_nv2si                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlu_nv4si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshl_nv4si                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshl_nv4si                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlu_nv2di                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshl_nv2di                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshl_nv2di                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlu_nqi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshl_nqi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshl_nqi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlu_nhi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshl_nhi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshl_nhi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlu_nsi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshl_nsi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshl_nsi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshlu_ndi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshl_ndi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshl_ndi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshrun_nv8hi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshrun_nv8hi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshrn_nv8hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshrn_nv8hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshrn_nv8hi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqrshrn_nv8hi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshrun_nv4si               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshrun_nv4si              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshrn_nv4si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshrn_nv4si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshrn_nv4si               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqrshrn_nv4si               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshrun_nv2di               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshrun_nv2di              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshrn_nv2di                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshrn_nv2di                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshrn_nv2di               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqrshrn_nv2di               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshrun_nhi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshrun_nhi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshrn_nhi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshrn_nhi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshrn_nhi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqrshrn_nhi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshrun_nsi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshrun_nsi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshrn_nsi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshrn_nsi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshrn_nsi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqrshrn_nsi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshrun_ndi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshrun_ndi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqshrn_ndi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqshrn_ndi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqrshrn_ndi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uqrshrn_ndi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltv8qi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmlev8qi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmeqv8qi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgev8qi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtv8qi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltv16qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmlev16qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmeqv16qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgev16qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtv16qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltv4hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmlev4hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmeqv4hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgev4hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtv4hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltv8hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmlev8hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmeqv8hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgev8hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtv8hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltv2si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmlev2si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmeqv2si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgev2si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtv2si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltv4si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmlev4si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmeqv4si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgev4si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtv4si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltv2di                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmlev2di                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmeqv2di                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgev2di                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtv2di                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltdi                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmledi                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmeqdi                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgedi                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtdi                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltuv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmleuv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgeuv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtuv8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltuv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmleuv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgeuv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtuv16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltuv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmleuv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgeuv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtuv4hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltuv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmleuv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgeuv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtuv8hi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltuv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmleuv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgeuv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtuv2si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltuv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmleuv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgeuv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtuv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltuv2di                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmleuv2di                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgeuv2di                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtuv2di                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltudi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmleudi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgeudi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtudi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmtstv8qi                   (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmtstv16qi                  (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmtstv4hi                   (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmtstv8hi                   (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmtstv2si                   (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmtstv4si                   (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmtstv2di                   (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmtstdi                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltv4hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmlev4hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmeqv4hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgev4hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtv4hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltv8hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmlev8hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmeqv8hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgev8hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtv8hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltv2sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmlev2sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmeqv2sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgev2sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtv2sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltv4sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmlev4sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmeqv4sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgev4sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtv4sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltv2df                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmlev2df                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmeqv2df                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgev2df                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtv2df                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmlthf                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmlehf                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmeqhf                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgehf                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgthf                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltsf                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmlesf                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmeqsf                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgesf                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtsf                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmltdf                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmledf                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmeqdf                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgedf                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_cmgtdf                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facltv4hf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_faclev4hf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facgev4hf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facgtv4hf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facltv8hf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_faclev8hf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facgev8hf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facgtv8hf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facltv2sf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_faclev2sf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facgev2sf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facgtv2sf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facltv4sf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_faclev4sf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facgev4sf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facgtv4sf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facltv2df                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_faclev2df                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facgev2df                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facgtv2df                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_faclthf                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_faclehf                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facgehf                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facgthf                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facltsf                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_faclesf                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facgesf                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facgtsf                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facltdf                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facledf                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facgedf                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_facgtdf                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_addpv8qi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_addpv4hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_addpv2si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_addpdi                      (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2v16qi               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2v8hi                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2v4si                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2v2di                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2v8hf                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2v4sf                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2v2df                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2rv8qi               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2rv16qi              (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2rv4hi               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2rv8hi               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2rv2si               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2rv4si               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2rv2di               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2rv4hf               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2rv8hf               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2rv2sf               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2rv4sf               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2rv2df               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2rdi                 (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld2rdf                 (rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesoi_lanev8qi   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesoi_lanev16qi  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesoi_lanev4hi   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesoi_lanev8hi   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesoi_lanev2si   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesoi_lanev4si   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesoi_lanev2di   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesoi_lanev4hf   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesoi_lanev8hf   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesoi_lanev2sf   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesoi_lanev4sf   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesoi_lanev2df   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesoi_lanedi     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesoi_lanedf     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_st2v16qi               (rtx, rtx);
+extern rtx        gen_aarch64_simd_st2v8hi                (rtx, rtx);
+extern rtx        gen_aarch64_simd_st2v4si                (rtx, rtx);
+extern rtx        gen_aarch64_simd_st2v2di                (rtx, rtx);
+extern rtx        gen_aarch64_simd_st2v8hf                (rtx, rtx);
+extern rtx        gen_aarch64_simd_st2v4sf                (rtx, rtx);
+extern rtx        gen_aarch64_simd_st2v2df                (rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesoi_lanev8qi  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesoi_lanev16qi (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesoi_lanev4hi  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesoi_lanev8hi  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesoi_lanev2si  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesoi_lanev4si  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesoi_lanev2di  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesoi_lanev4hf  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesoi_lanev8hf  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesoi_lanev2sf  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesoi_lanev4sf  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesoi_lanev2df  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesoi_lanedi    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesoi_lanedf    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3v16qi               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3v8hi                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3v4si                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3v2di                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3v8hf                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3v4sf                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3v2df                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3rv8qi               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3rv16qi              (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3rv4hi               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3rv8hi               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3rv2si               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3rv4si               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3rv2di               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3rv4hf               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3rv8hf               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3rv2sf               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3rv4sf               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3rv2df               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3rdi                 (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld3rdf                 (rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesci_lanev8qi   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesci_lanev16qi  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesci_lanev4hi   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesci_lanev8hi   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesci_lanev2si   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesci_lanev4si   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesci_lanev2di   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesci_lanev4hf   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesci_lanev8hf   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesci_lanev2sf   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesci_lanev4sf   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesci_lanev2df   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesci_lanedi     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesci_lanedf     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_st3v16qi               (rtx, rtx);
+extern rtx        gen_aarch64_simd_st3v8hi                (rtx, rtx);
+extern rtx        gen_aarch64_simd_st3v4si                (rtx, rtx);
+extern rtx        gen_aarch64_simd_st3v2di                (rtx, rtx);
+extern rtx        gen_aarch64_simd_st3v8hf                (rtx, rtx);
+extern rtx        gen_aarch64_simd_st3v4sf                (rtx, rtx);
+extern rtx        gen_aarch64_simd_st3v2df                (rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesci_lanev8qi  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesci_lanev16qi (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesci_lanev4hi  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesci_lanev8hi  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesci_lanev2si  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesci_lanev4si  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesci_lanev2di  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesci_lanev4hf  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesci_lanev8hf  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesci_lanev2sf  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesci_lanev4sf  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesci_lanev2df  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesci_lanedi    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesci_lanedf    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4v16qi               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4v8hi                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4v4si                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4v2di                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4v8hf                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4v4sf                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4v2df                (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4rv8qi               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4rv16qi              (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4rv4hi               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4rv8hi               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4rv2si               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4rv4si               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4rv2di               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4rv4hf               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4rv8hf               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4rv2sf               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4rv4sf               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4rv2df               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4rdi                 (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld4rdf                 (rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesxi_lanev8qi   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesxi_lanev16qi  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesxi_lanev4hi   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesxi_lanev8hi   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesxi_lanev2si   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesxi_lanev4si   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesxi_lanev2di   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesxi_lanev4hf   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesxi_lanev8hf   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesxi_lanev2sf   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesxi_lanev4sf   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesxi_lanev2df   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesxi_lanedi     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_load_lanesxi_lanedf     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_st4v16qi               (rtx, rtx);
+extern rtx        gen_aarch64_simd_st4v8hi                (rtx, rtx);
+extern rtx        gen_aarch64_simd_st4v4si                (rtx, rtx);
+extern rtx        gen_aarch64_simd_st4v2di                (rtx, rtx);
+extern rtx        gen_aarch64_simd_st4v8hf                (rtx, rtx);
+extern rtx        gen_aarch64_simd_st4v4sf                (rtx, rtx);
+extern rtx        gen_aarch64_simd_st4v2df                (rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesxi_lanev8qi  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesxi_lanev16qi (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesxi_lanev4hi  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesxi_lanev8hi  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesxi_lanev2si  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesxi_lanev4si  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesxi_lanev2di  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesxi_lanev4hf  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesxi_lanev8hf  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesxi_lanev2sf  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesxi_lanev4sf  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesxi_lanev2df  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesxi_lanedi    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_vec_store_lanesxi_lanedf    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_rev_reglistoi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_rev_reglistci               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_rev_reglistxi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld1_x3_v8qi                 (rtx, rtx);
+extern rtx        gen_aarch64_ld1_x3_v16qi                (rtx, rtx);
+extern rtx        gen_aarch64_ld1_x3_v4hi                 (rtx, rtx);
+extern rtx        gen_aarch64_ld1_x3_v8hi                 (rtx, rtx);
+extern rtx        gen_aarch64_ld1_x3_v2si                 (rtx, rtx);
+extern rtx        gen_aarch64_ld1_x3_v4si                 (rtx, rtx);
+extern rtx        gen_aarch64_ld1_x3_v2di                 (rtx, rtx);
+extern rtx        gen_aarch64_ld1_x3_v4hf                 (rtx, rtx);
+extern rtx        gen_aarch64_ld1_x3_v8hf                 (rtx, rtx);
+extern rtx        gen_aarch64_ld1_x3_v2sf                 (rtx, rtx);
+extern rtx        gen_aarch64_ld1_x3_v4sf                 (rtx, rtx);
+extern rtx        gen_aarch64_ld1_x3_v2df                 (rtx, rtx);
+extern rtx        gen_aarch64_ld1_x3_di                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1_x3_df                   (rtx, rtx);
+extern rtx        gen_aarch64_st1_x2_v8qi                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x2_v16qi                (rtx, rtx);
+extern rtx        gen_aarch64_st1_x2_v4hi                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x2_v8hi                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x2_v2si                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x2_v4si                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x2_v2di                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x2_v4hf                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x2_v8hf                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x2_v2sf                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x2_v4sf                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x2_v2df                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x2_di                   (rtx, rtx);
+extern rtx        gen_aarch64_st1_x2_df                   (rtx, rtx);
+extern rtx        gen_aarch64_st1_x3_v8qi                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x3_v16qi                (rtx, rtx);
+extern rtx        gen_aarch64_st1_x3_v4hi                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x3_v8hi                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x3_v2si                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x3_v4si                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x3_v2di                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x3_v4hf                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x3_v8hf                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x3_v2sf                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x3_v4sf                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x3_v2df                 (rtx, rtx);
+extern rtx        gen_aarch64_st1_x3_di                   (rtx, rtx);
+extern rtx        gen_aarch64_st1_x3_df                   (rtx, rtx);
+extern rtx        gen_aarch64_be_ld1v8qi                  (rtx, rtx);
+extern rtx        gen_aarch64_be_ld1v16qi                 (rtx, rtx);
+extern rtx        gen_aarch64_be_ld1v4hi                  (rtx, rtx);
+extern rtx        gen_aarch64_be_ld1v8hi                  (rtx, rtx);
+extern rtx        gen_aarch64_be_ld1v2si                  (rtx, rtx);
+extern rtx        gen_aarch64_be_ld1v4si                  (rtx, rtx);
+extern rtx        gen_aarch64_be_ld1v2di                  (rtx, rtx);
+extern rtx        gen_aarch64_be_ld1v4hf                  (rtx, rtx);
+extern rtx        gen_aarch64_be_ld1v8hf                  (rtx, rtx);
+extern rtx        gen_aarch64_be_ld1v2sf                  (rtx, rtx);
+extern rtx        gen_aarch64_be_ld1v4sf                  (rtx, rtx);
+extern rtx        gen_aarch64_be_ld1v2df                  (rtx, rtx);
+extern rtx        gen_aarch64_be_ld1di                    (rtx, rtx);
+extern rtx        gen_aarch64_be_st1v8qi                  (rtx, rtx);
+extern rtx        gen_aarch64_be_st1v16qi                 (rtx, rtx);
+extern rtx        gen_aarch64_be_st1v4hi                  (rtx, rtx);
+extern rtx        gen_aarch64_be_st1v8hi                  (rtx, rtx);
+extern rtx        gen_aarch64_be_st1v2si                  (rtx, rtx);
+extern rtx        gen_aarch64_be_st1v4si                  (rtx, rtx);
+extern rtx        gen_aarch64_be_st1v2di                  (rtx, rtx);
+extern rtx        gen_aarch64_be_st1v4hf                  (rtx, rtx);
+extern rtx        gen_aarch64_be_st1v8hf                  (rtx, rtx);
+extern rtx        gen_aarch64_be_st1v2sf                  (rtx, rtx);
+extern rtx        gen_aarch64_be_st1v4sf                  (rtx, rtx);
+extern rtx        gen_aarch64_be_st1v2df                  (rtx, rtx);
+extern rtx        gen_aarch64_be_st1di                    (rtx, rtx);
+extern rtx        gen_aarch64_ld2v8qi_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_ld2v4hi_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_ld2v4hf_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_ld2v2si_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_ld2v2sf_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_ld2di_dreg                  (rtx, rtx);
+extern rtx        gen_aarch64_ld2df_dreg                  (rtx, rtx);
+extern rtx        gen_aarch64_ld3v8qi_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_ld3v4hi_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_ld3v4hf_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_ld3v2si_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_ld3v2sf_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_ld3di_dreg                  (rtx, rtx);
+extern rtx        gen_aarch64_ld3df_dreg                  (rtx, rtx);
+extern rtx        gen_aarch64_ld4v8qi_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_ld4v4hi_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_ld4v4hf_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_ld4v2si_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_ld4v2sf_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_ld4di_dreg                  (rtx, rtx);
+extern rtx        gen_aarch64_ld4df_dreg                  (rtx, rtx);
+extern rtx        gen_aarch64_tbl1v8qi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_tbl1v16qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_tbl2v16qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_tbl3v8qi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_tbl3v16qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_tbx4v8qi                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_tbx4v16qi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_qtbl3v8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_qtbl3v16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_qtbx3v8qi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_qtbx3v16qi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_qtbl4v8qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_qtbl4v16qi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_qtbx4v8qi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_qtbx4v16qi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_combinev16qi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip1v8qi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip2v8qi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn1v8qi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn2v8qi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp1v8qi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp2v8qi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip1v16qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip2v16qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn1v16qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn2v16qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp1v16qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp2v16qi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip1v4hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip2v4hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn1v4hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn2v4hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp1v4hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp2v4hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip1v8hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip2v8hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn1v8hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn2v8hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp1v8hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp2v8hi                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip1v2si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip2v2si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn1v2si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn2v2si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp1v2si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp2v2si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip1v4si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip2v4si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn1v4si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn2v4si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp1v4si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp2v4si                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip1v2di                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip2v2di                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn1v2di                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn2v2di                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp1v2di                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp2v2di                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip1v4hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip2v4hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn1v4hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn2v4hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp1v4hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp2v4hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip1v8hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip2v8hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn1v8hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn2v8hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp1v8hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp2v8hf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip1v2sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip2v2sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn1v2sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn2v2sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp1v2sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp2v2sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip1v4sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip2v4sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn1v4sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn2v4sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp1v4sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp2v4sf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip1v2df                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_zip2v2df                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn1v2df                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_trn2v2df                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp1v2df                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uzp2v2df                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_extv8qi                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_extv16qi                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_extv4hi                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_extv8hi                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_extv2si                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_extv4si                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_extv2di                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_extv4hf                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_extv8hf                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_extv2sf                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_extv4sf                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_extv2df                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_rev64v8qi                   (rtx, rtx);
+extern rtx        gen_aarch64_rev32v8qi                   (rtx, rtx);
+extern rtx        gen_aarch64_rev16v8qi                   (rtx, rtx);
+extern rtx        gen_aarch64_rev64v16qi                  (rtx, rtx);
+extern rtx        gen_aarch64_rev32v16qi                  (rtx, rtx);
+extern rtx        gen_aarch64_rev16v16qi                  (rtx, rtx);
+extern rtx        gen_aarch64_rev64v4hi                   (rtx, rtx);
+extern rtx        gen_aarch64_rev32v4hi                   (rtx, rtx);
+extern rtx        gen_aarch64_rev16v4hi                   (rtx, rtx);
+extern rtx        gen_aarch64_rev64v8hi                   (rtx, rtx);
+extern rtx        gen_aarch64_rev32v8hi                   (rtx, rtx);
+extern rtx        gen_aarch64_rev16v8hi                   (rtx, rtx);
+extern rtx        gen_aarch64_rev64v2si                   (rtx, rtx);
+extern rtx        gen_aarch64_rev32v2si                   (rtx, rtx);
+extern rtx        gen_aarch64_rev16v2si                   (rtx, rtx);
+extern rtx        gen_aarch64_rev64v4si                   (rtx, rtx);
+extern rtx        gen_aarch64_rev32v4si                   (rtx, rtx);
+extern rtx        gen_aarch64_rev16v4si                   (rtx, rtx);
+extern rtx        gen_aarch64_rev64v2di                   (rtx, rtx);
+extern rtx        gen_aarch64_rev32v2di                   (rtx, rtx);
+extern rtx        gen_aarch64_rev16v2di                   (rtx, rtx);
+extern rtx        gen_aarch64_rev64v4hf                   (rtx, rtx);
+extern rtx        gen_aarch64_rev32v4hf                   (rtx, rtx);
+extern rtx        gen_aarch64_rev16v4hf                   (rtx, rtx);
+extern rtx        gen_aarch64_rev64v8hf                   (rtx, rtx);
+extern rtx        gen_aarch64_rev32v8hf                   (rtx, rtx);
+extern rtx        gen_aarch64_rev16v8hf                   (rtx, rtx);
+extern rtx        gen_aarch64_rev64v2sf                   (rtx, rtx);
+extern rtx        gen_aarch64_rev32v2sf                   (rtx, rtx);
+extern rtx        gen_aarch64_rev16v2sf                   (rtx, rtx);
+extern rtx        gen_aarch64_rev64v4sf                   (rtx, rtx);
+extern rtx        gen_aarch64_rev32v4sf                   (rtx, rtx);
+extern rtx        gen_aarch64_rev16v4sf                   (rtx, rtx);
+extern rtx        gen_aarch64_rev64v2df                   (rtx, rtx);
+extern rtx        gen_aarch64_rev32v2df                   (rtx, rtx);
+extern rtx        gen_aarch64_rev16v2df                   (rtx, rtx);
+extern rtx        gen_aarch64_st2v8qi_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_st2v4hi_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_st2v4hf_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_st2v2si_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_st2v2sf_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_st2di_dreg                  (rtx, rtx);
+extern rtx        gen_aarch64_st2df_dreg                  (rtx, rtx);
+extern rtx        gen_aarch64_st3v8qi_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_st3v4hi_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_st3v4hf_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_st3v2si_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_st3v2sf_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_st3di_dreg                  (rtx, rtx);
+extern rtx        gen_aarch64_st3df_dreg                  (rtx, rtx);
+extern rtx        gen_aarch64_st4v8qi_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_st4v4hi_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_st4v4hf_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_st4v2si_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_st4v2sf_dreg                (rtx, rtx);
+extern rtx        gen_aarch64_st4di_dreg                  (rtx, rtx);
+extern rtx        gen_aarch64_st4df_dreg                  (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld1v16qi_x2            (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld1v8hi_x2             (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld1v4si_x2             (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld1v2di_x2             (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld1v8hf_x2             (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld1v4sf_x2             (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld1v2df_x2             (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld1v8qi_x2             (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld1v4hi_x2             (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld1v4hf_x2             (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld1v2si_x2             (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld1v2sf_x2             (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld1di_x2               (rtx, rtx);
+extern rtx        gen_aarch64_simd_ld1df_x2               (rtx, rtx);
+extern rtx        gen_aarch64_frecpev4hf                  (rtx, rtx);
+extern rtx        gen_aarch64_frecpev8hf                  (rtx, rtx);
+extern rtx        gen_aarch64_frecpev2sf                  (rtx, rtx);
+extern rtx        gen_aarch64_frecpev4sf                  (rtx, rtx);
+extern rtx        gen_aarch64_frecpev2df                  (rtx, rtx);
+extern rtx        gen_aarch64_frecpehf                    (rtx, rtx);
+extern rtx        gen_aarch64_frecpesf                    (rtx, rtx);
+extern rtx        gen_aarch64_frecpedf                    (rtx, rtx);
+extern rtx        gen_aarch64_frecpxhf                    (rtx, rtx);
+extern rtx        gen_aarch64_frecpxsf                    (rtx, rtx);
+extern rtx        gen_aarch64_frecpxdf                    (rtx, rtx);
+extern rtx        gen_aarch64_frecpsv4hf                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_frecpsv8hf                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_frecpsv2sf                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_frecpsv4sf                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_frecpsv2df                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_frecpshf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_frecpssf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_frecpsdf                    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_urecpev2si                  (rtx, rtx);
+extern rtx        gen_aarch64_urecpev4si                  (rtx, rtx);
+extern rtx        gen_aarch64_crypto_aesev16qi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_crypto_aesdv16qi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_crypto_aesmcv16qi           (rtx, rtx);
+extern rtx        gen_aarch64_crypto_aesimcv16qi          (rtx, rtx);
+extern rtx        gen_aarch64_crypto_sha1hsi              (rtx, rtx);
+extern rtx        gen_aarch64_crypto_sha1hv4si            (rtx, rtx);
+extern rtx        gen_aarch64_be_crypto_sha1hv4si         (rtx, rtx);
+extern rtx        gen_aarch64_crypto_sha1su1v4si          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_crypto_sha1cv4si            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_crypto_sha1mv4si            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_crypto_sha1pv4si            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_crypto_sha1su0v4si          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_crypto_sha256hv4si          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_crypto_sha256h2v4si         (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_crypto_sha256su0v4si        (rtx, rtx, rtx);
+extern rtx        gen_aarch64_crypto_sha256su1v4si        (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_crypto_sha512hqv2di         (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_crypto_sha512h2qv2di        (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_crypto_sha512su0qv2di       (rtx, rtx, rtx);
+extern rtx        gen_aarch64_crypto_sha512su1qv2di       (rtx, rtx, rtx, rtx);
+extern rtx        gen_eor3qv16qi4                         (rtx, rtx, rtx, rtx);
+extern rtx        gen_eor3qv8hi4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_eor3qv4si4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_eor3qv2di4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_rax1qv2di                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_xarqv2di                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_bcaxqv16qi4                         (rtx, rtx, rtx, rtx);
+extern rtx        gen_bcaxqv8hi4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_bcaxqv4si4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_bcaxqv2di4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sm3ss1qv4si                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sm3tt1aqv4si                (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sm3tt1bqv4si                (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sm3tt2aqv4si                (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sm3tt2bqv4si                (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sm3partw1qv4si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sm3partw2qv4si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sm4eqv4si                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sm4ekeyqv4si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlal_lowv2sf          (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlalq_lowv4sf         (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlsl_lowv2sf          (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlslq_lowv4sf         (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlal_highv2sf         (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlalq_highv4sf        (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlsl_highv2sf         (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlslq_highv4sf        (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlal_lane_lowv2sf     (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlsl_lane_lowv2sf     (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlal_lane_highv2sf    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlsl_lane_highv2sf    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlalq_laneq_lowv4sf   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlslq_laneq_lowv4sf   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlalq_laneq_highv4sf  (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlslq_laneq_highv4sf  (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlal_laneq_lowv2sf    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlsl_laneq_lowv2sf    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlal_laneq_highv2sf   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlsl_laneq_highv2sf   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlalq_lane_lowv4sf    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlslq_lane_lowv4sf    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlalq_lane_highv4sf   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_fmlslq_lane_highv4sf   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_crypto_pmulldi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_crypto_pmullv2di            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_compare_and_swapqi          (rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_compare_and_swaphi          (rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_compare_and_swapsi          (rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_compare_and_swapdi          (rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_compare_and_swapqi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_compare_and_swaphi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_compare_and_swapsi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_compare_and_swapdi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_exchangeqi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_exchangehi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_exchangesi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_exchangedi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_exchangeqi_lse       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_exchangehi_lse       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_exchangesi_lse       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_exchangedi_lse       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_addqi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_subqi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_orqi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_xorqi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_andqi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_addhi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_subhi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_orhi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_xorhi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_andhi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_addsi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_subsi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_orsi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_xorsi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_andsi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_adddi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_subdi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_ordi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_xordi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_anddi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_iorqi_lse            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_bicqi_lse            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_xorqi_lse            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_addqi_lse            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_iorhi_lse            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_bichi_lse            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_xorhi_lse            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_addhi_lse            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_iorsi_lse            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_bicsi_lse            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_xorsi_lse            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_addsi_lse            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_iordi_lse            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_bicdi_lse            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_xordi_lse            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_adddi_lse            (rtx, rtx, rtx);
+extern rtx        gen_atomic_nandqi                       (rtx, rtx, rtx);
+extern rtx        gen_atomic_nandhi                       (rtx, rtx, rtx);
+extern rtx        gen_atomic_nandsi                       (rtx, rtx, rtx);
+extern rtx        gen_atomic_nanddi                       (rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_addqi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_subqi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_orqi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_xorqi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_andqi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_addhi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_subhi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_orhi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_xorhi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_andhi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_addsi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_subsi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_orsi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_xorsi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_andsi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_adddi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_subdi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_ordi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_xordi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_anddi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_iorqi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_bicqi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_xorqi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_addqi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_iorhi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_bichi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_xorhi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_addhi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_iorsi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_bicsi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_xorsi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_addsi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_iordi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_bicdi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_xordi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_fetch_adddi_lse      (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_nandqi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_nandhi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_nandsi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_nanddi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_add_fetchqi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_sub_fetchqi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_or_fetchqi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_xor_fetchqi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_and_fetchqi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_add_fetchhi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_sub_fetchhi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_or_fetchhi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_xor_fetchhi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_and_fetchhi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_add_fetchsi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_sub_fetchsi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_or_fetchsi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_xor_fetchsi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_and_fetchsi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_add_fetchdi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_sub_fetchdi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_or_fetchdi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_xor_fetchdi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_atomic_and_fetchdi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_nand_fetchqi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_nand_fetchhi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_nand_fetchsi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_nand_fetchdi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_loadqi                       (rtx, rtx, rtx);
+extern rtx        gen_atomic_loadhi                       (rtx, rtx, rtx);
+extern rtx        gen_atomic_loadsi                       (rtx, rtx, rtx);
+extern rtx        gen_atomic_loaddi                       (rtx, rtx, rtx);
+extern rtx        gen_atomic_storeqi                      (rtx, rtx, rtx);
+extern rtx        gen_atomic_storehi                      (rtx, rtx, rtx);
+extern rtx        gen_atomic_storesi                      (rtx, rtx, rtx);
+extern rtx        gen_atomic_storedi                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_load_exclusiveqi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_load_exclusivehi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_load_exclusivesi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_load_exclusivedi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_store_exclusiveqi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_store_exclusivehi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_store_exclusivesi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_store_exclusivedi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx16qi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx8hi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx4si              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx2di              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx8hf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx4sf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx2df              (rtx, rtx, rtx);
+extern rtx        gen_maskloadvnx16qivnx16bi              (rtx, rtx, rtx);
+extern rtx        gen_maskloadvnx8hivnx8bi                (rtx, rtx, rtx);
+extern rtx        gen_maskloadvnx4sivnx4bi                (rtx, rtx, rtx);
+extern rtx        gen_maskloadvnx2divnx2bi                (rtx, rtx, rtx);
+extern rtx        gen_maskloadvnx8hfvnx8bi                (rtx, rtx, rtx);
+extern rtx        gen_maskloadvnx4sfvnx4bi                (rtx, rtx, rtx);
+extern rtx        gen_maskloadvnx2dfvnx2bi                (rtx, rtx, rtx);
+extern rtx        gen_maskstorevnx16qivnx16bi             (rtx, rtx, rtx);
+extern rtx        gen_maskstorevnx8hivnx8bi               (rtx, rtx, rtx);
+extern rtx        gen_maskstorevnx4sivnx4bi               (rtx, rtx, rtx);
+extern rtx        gen_maskstorevnx2divnx2bi               (rtx, rtx, rtx);
+extern rtx        gen_maskstorevnx8hfvnx8bi               (rtx, rtx, rtx);
+extern rtx        gen_maskstorevnx4sfvnx4bi               (rtx, rtx, rtx);
+extern rtx        gen_maskstorevnx2dfvnx2bi               (rtx, rtx, rtx);
+extern rtx        gen_mask_gather_loadvnx4si              (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_mask_gather_loadvnx4sf              (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_mask_gather_loadvnx2di              (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_mask_gather_loadvnx2df              (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_mask_scatter_storevnx4si            (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_mask_scatter_storevnx4sf            (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_mask_scatter_storevnx2di            (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_mask_scatter_storevnx2df            (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx32qi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx16hi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx8si              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx4di              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx16hf             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx8sf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx4df              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx48qi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx24hi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx12si             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx6di              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx24hf             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx12sf             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx6df              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx64qi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx32hi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx16si             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx8di              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx32hf             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx16sf             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_pred_movvnx8df              (rtx, rtx, rtx);
+extern rtx        gen_extract_last_vnx16qi                (rtx, rtx, rtx);
+extern rtx        gen_extract_last_vnx8hi                 (rtx, rtx, rtx);
+extern rtx        gen_extract_last_vnx4si                 (rtx, rtx, rtx);
+extern rtx        gen_extract_last_vnx2di                 (rtx, rtx, rtx);
+extern rtx        gen_extract_last_vnx8hf                 (rtx, rtx, rtx);
+extern rtx        gen_extract_last_vnx4sf                 (rtx, rtx, rtx);
+extern rtx        gen_extract_last_vnx2df                 (rtx, rtx, rtx);
+extern rtx        gen_sve_ld1rvnx16qi                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_sve_ld1rvnx8hi                      (rtx, rtx, rtx, rtx);
+extern rtx        gen_sve_ld1rvnx4si                      (rtx, rtx, rtx, rtx);
+extern rtx        gen_sve_ld1rvnx2di                      (rtx, rtx, rtx, rtx);
+extern rtx        gen_sve_ld1rvnx8hf                      (rtx, rtx, rtx, rtx);
+extern rtx        gen_sve_ld1rvnx4sf                      (rtx, rtx, rtx, rtx);
+extern rtx        gen_sve_ld1rvnx2df                      (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_seriesvnx16qi                   (rtx, rtx, rtx);
+extern rtx        gen_vec_seriesvnx8hi                    (rtx, rtx, rtx);
+extern rtx        gen_vec_seriesvnx4si                    (rtx, rtx, rtx);
+extern rtx        gen_vec_seriesvnx2di                    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx32qivnx16qi   (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx16hivnx8hi    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx8sivnx4si     (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx4divnx2di     (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx16hfvnx8hf    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx8sfvnx4sf     (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx4dfvnx2df     (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx48qivnx16qi   (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx24hivnx8hi    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx12sivnx4si    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx6divnx2di     (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx24hfvnx8hf    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx12sfvnx4sf    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx6dfvnx2df     (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx64qivnx16qi   (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx32hivnx8hi    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx16sivnx4si    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx8divnx2di     (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx32hfvnx8hf    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx16sfvnx4sf    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_load_lanesvnx8dfvnx2df     (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx32qivnx16qi  (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx16hivnx8hi   (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx8sivnx4si    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx4divnx2di    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx16hfvnx8hf   (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx8sfvnx4sf    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx4dfvnx2df    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx48qivnx16qi  (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx24hivnx8hi   (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx12sivnx4si   (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx6divnx2di    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx24hfvnx8hf   (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx12sfvnx4sf   (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx6dfvnx2df    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx64qivnx16qi  (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx32hivnx8hi   (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx16sivnx4si   (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx8divnx2di    (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx32hfvnx8hf   (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx16sfvnx4sf   (rtx, rtx, rtx);
+extern rtx        gen_vec_mask_store_lanesvnx8dfvnx2df    (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_zip1vnx16qi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_zip2vnx16qi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_trn1vnx16qi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_trn2vnx16qi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_uzp1vnx16qi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_uzp2vnx16qi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_zip1vnx8hi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_zip2vnx8hi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_trn1vnx8hi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_trn2vnx8hi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_uzp1vnx8hi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_uzp2vnx8hi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_zip1vnx4si              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_zip2vnx4si              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_trn1vnx4si              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_trn2vnx4si              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_uzp1vnx4si              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_uzp2vnx4si              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_zip1vnx2di              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_zip2vnx2di              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_trn1vnx2di              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_trn2vnx2di              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_uzp1vnx2di              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_uzp2vnx2di              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_zip1vnx8hf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_zip2vnx8hf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_trn1vnx8hf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_trn2vnx8hf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_uzp1vnx8hf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_uzp2vnx8hf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_zip1vnx4sf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_zip2vnx4sf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_trn1vnx4sf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_trn2vnx4sf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_uzp1vnx4sf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_uzp2vnx4sf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_zip1vnx2df              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_zip2vnx2df              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_trn1vnx2df              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_trn2vnx2df              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_uzp1vnx2df              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_uzp2vnx2df              (rtx, rtx, rtx);
+extern rtx        gen_addvnx16qi3                         (rtx, rtx, rtx);
+extern rtx        gen_addvnx8hi3                          (rtx, rtx, rtx);
+extern rtx        gen_addvnx4si3                          (rtx, rtx, rtx);
+extern rtx        gen_addvnx2di3                          (rtx, rtx, rtx);
+extern rtx        gen_subvnx16qi3                         (rtx, rtx, rtx);
+extern rtx        gen_subvnx8hi3                          (rtx, rtx, rtx);
+extern rtx        gen_subvnx4si3                          (rtx, rtx, rtx);
+extern rtx        gen_subvnx2di3                          (rtx, rtx, rtx);
+extern rtx        gen_andvnx16qi3                         (rtx, rtx, rtx);
+extern rtx        gen_iorvnx16qi3                         (rtx, rtx, rtx);
+extern rtx        gen_xorvnx16qi3                         (rtx, rtx, rtx);
+extern rtx        gen_andvnx8hi3                          (rtx, rtx, rtx);
+extern rtx        gen_iorvnx8hi3                          (rtx, rtx, rtx);
+extern rtx        gen_xorvnx8hi3                          (rtx, rtx, rtx);
+extern rtx        gen_andvnx4si3                          (rtx, rtx, rtx);
+extern rtx        gen_iorvnx4si3                          (rtx, rtx, rtx);
+extern rtx        gen_xorvnx4si3                          (rtx, rtx, rtx);
+extern rtx        gen_andvnx2di3                          (rtx, rtx, rtx);
+extern rtx        gen_iorvnx2di3                          (rtx, rtx, rtx);
+extern rtx        gen_xorvnx2di3                          (rtx, rtx, rtx);
+extern rtx        gen_bicvnx16qi3                         (rtx, rtx, rtx);
+extern rtx        gen_bicvnx8hi3                          (rtx, rtx, rtx);
+extern rtx        gen_bicvnx4si3                          (rtx, rtx, rtx);
+extern rtx        gen_bicvnx2di3                          (rtx, rtx, rtx);
+extern rtx        gen_andvnx16bi3                         (rtx, rtx, rtx);
+extern rtx        gen_andvnx8bi3                          (rtx, rtx, rtx);
+extern rtx        gen_andvnx4bi3                          (rtx, rtx, rtx);
+extern rtx        gen_andvnx2bi3                          (rtx, rtx, rtx);
+extern rtx        gen_pred_andvnx16bi3                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_pred_iorvnx16bi3                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_pred_xorvnx16bi3                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_pred_andvnx8bi3                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_pred_iorvnx8bi3                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_pred_xorvnx8bi3                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_pred_andvnx4bi3                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_pred_iorvnx4bi3                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_pred_xorvnx4bi3                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_pred_andvnx2bi3                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_pred_iorvnx2bi3                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_pred_xorvnx2bi3                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_ptest_ptruevnx16bi                  (rtx, rtx);
+extern rtx        gen_ptest_ptruevnx8bi                   (rtx, rtx);
+extern rtx        gen_ptest_ptruevnx4bi                   (rtx, rtx);
+extern rtx        gen_ptest_ptruevnx2bi                   (rtx, rtx);
+extern rtx        gen_while_ultsivnx16bi                  (rtx, rtx, rtx);
+extern rtx        gen_while_ultdivnx16bi                  (rtx, rtx, rtx);
+extern rtx        gen_while_ultsivnx8bi                   (rtx, rtx, rtx);
+extern rtx        gen_while_ultdivnx8bi                   (rtx, rtx, rtx);
+extern rtx        gen_while_ultsivnx4bi                   (rtx, rtx, rtx);
+extern rtx        gen_while_ultdivnx4bi                   (rtx, rtx, rtx);
+extern rtx        gen_while_ultsivnx2bi                   (rtx, rtx, rtx);
+extern rtx        gen_while_ultdivnx2bi                   (rtx, rtx, rtx);
+extern rtx        gen_while_ultsivnx16bi_cc               (rtx, rtx, rtx, rtx);
+extern rtx        gen_while_ultdivnx16bi_cc               (rtx, rtx, rtx, rtx);
+extern rtx        gen_while_ultsivnx8bi_cc                (rtx, rtx, rtx, rtx);
+extern rtx        gen_while_ultdivnx8bi_cc                (rtx, rtx, rtx, rtx);
+extern rtx        gen_while_ultsivnx4bi_cc                (rtx, rtx, rtx, rtx);
+extern rtx        gen_while_ultdivnx4bi_cc                (rtx, rtx, rtx, rtx);
+extern rtx        gen_while_ultsivnx2bi_cc                (rtx, rtx, rtx, rtx);
+extern rtx        gen_while_ultdivnx2bi_cc                (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_vnx16qivnx16bi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_vnx8hivnx8bi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_vnx4sivnx4bi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_vnx2divnx2bi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_vnx8hfvnx8bi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_vnx4sfvnx4bi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_vnx2dfvnx2bi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_dupvnx16qi_const        (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_dupvnx8hi_const         (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_dupvnx4si_const         (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_dupvnx2di_const         (rtx, rtx, rtx, rtx);
+extern rtx        gen_fold_extract_last_vnx16qi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_fold_extract_last_vnx8hi            (rtx, rtx, rtx, rtx);
+extern rtx        gen_fold_extract_last_vnx4si            (rtx, rtx, rtx, rtx);
+extern rtx        gen_fold_extract_last_vnx2di            (rtx, rtx, rtx, rtx);
+extern rtx        gen_fold_extract_last_vnx8hf            (rtx, rtx, rtx, rtx);
+extern rtx        gen_fold_extract_last_vnx4sf            (rtx, rtx, rtx, rtx);
+extern rtx        gen_fold_extract_last_vnx2df            (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_floatvnx4sivnx2df2      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_floatunsvnx4sivnx2df2   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_floatvnx2divnx2df2      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_floatunsvnx2divnx2df2   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_extendvnx8hfvnx4sf2     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_extendvnx4sfvnx2df2     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sve_punpklo_vnx16bi         (rtx, rtx);
+extern rtx        gen_aarch64_sve_punpkhi_vnx16bi         (rtx, rtx);
+extern rtx        gen_aarch64_sve_punpklo_vnx8bi          (rtx, rtx);
+extern rtx        gen_aarch64_sve_punpkhi_vnx8bi          (rtx, rtx);
+extern rtx        gen_aarch64_sve_punpklo_vnx4bi          (rtx, rtx);
+extern rtx        gen_aarch64_sve_punpkhi_vnx4bi          (rtx, rtx);
+extern rtx        gen_aarch64_sve_sunpkhi_vnx16qi         (rtx, rtx);
+extern rtx        gen_aarch64_sve_uunpkhi_vnx16qi         (rtx, rtx);
+extern rtx        gen_aarch64_sve_sunpklo_vnx16qi         (rtx, rtx);
+extern rtx        gen_aarch64_sve_uunpklo_vnx16qi         (rtx, rtx);
+extern rtx        gen_aarch64_sve_sunpkhi_vnx8hi          (rtx, rtx);
+extern rtx        gen_aarch64_sve_uunpkhi_vnx8hi          (rtx, rtx);
+extern rtx        gen_aarch64_sve_sunpklo_vnx8hi          (rtx, rtx);
+extern rtx        gen_aarch64_sve_uunpklo_vnx8hi          (rtx, rtx);
+extern rtx        gen_aarch64_sve_sunpkhi_vnx4si          (rtx, rtx);
+extern rtx        gen_aarch64_sve_uunpkhi_vnx4si          (rtx, rtx);
+extern rtx        gen_aarch64_sve_sunpklo_vnx4si          (rtx, rtx);
+extern rtx        gen_aarch64_sve_uunpklo_vnx4si          (rtx, rtx);
+extern rtx        gen_vec_pack_trunc_vnx8bi               (rtx, rtx, rtx);
+extern rtx        gen_vec_pack_trunc_vnx4bi               (rtx, rtx, rtx);
+extern rtx        gen_vec_pack_trunc_vnx2bi               (rtx, rtx, rtx);
+extern rtx        gen_vec_pack_trunc_vnx8hi               (rtx, rtx, rtx);
+extern rtx        gen_vec_pack_trunc_vnx4si               (rtx, rtx, rtx);
+extern rtx        gen_vec_pack_trunc_vnx2di               (rtx, rtx, rtx);
+extern rtx        gen_vec_shl_insert_vnx16qi              (rtx, rtx, rtx);
+extern rtx        gen_vec_shl_insert_vnx8hi               (rtx, rtx, rtx);
+extern rtx        gen_vec_shl_insert_vnx4si               (rtx, rtx, rtx);
+extern rtx        gen_vec_shl_insert_vnx2di               (rtx, rtx, rtx);
+extern rtx        gen_vec_shl_insert_vnx8hf               (rtx, rtx, rtx);
+extern rtx        gen_vec_shl_insert_vnx4sf               (rtx, rtx, rtx);
+extern rtx        gen_vec_shl_insert_vnx2df               (rtx, rtx, rtx);
+extern rtx        gen_cbranchsi4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_cbranchdi4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_cbranchsf4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_cbranchdf4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_cbranchcc4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_modsi3                              (rtx, rtx, rtx);
+extern rtx        gen_moddi3                              (rtx, rtx, rtx);
+extern rtx        gen_casesi                              (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_casesi_dispatch                     (rtx, rtx);
+extern rtx        gen_prologue                            (void);
+extern rtx        gen_epilogue                            (void);
+extern rtx        gen_sibcall_epilogue                    (void);
+extern rtx        gen_return                              (void);
+extern rtx        gen_call                                (rtx, rtx, rtx);
+extern rtx        gen_call_value                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_sibcall                             (rtx, rtx, rtx);
+extern rtx        gen_sibcall_value                       (rtx, rtx, rtx, rtx);
+extern rtx        gen_untyped_call                        (rtx, rtx, rtx);
+extern rtx        gen_movqi                               (rtx, rtx);
+extern rtx        gen_movhi                               (rtx, rtx);
+extern rtx        gen_movsi                               (rtx, rtx);
+extern rtx        gen_movdi                               (rtx, rtx);
+extern rtx        gen_movti                               (rtx, rtx);
+extern rtx        gen_movhf                               (rtx, rtx);
+extern rtx        gen_movsf                               (rtx, rtx);
+extern rtx        gen_movdf                               (rtx, rtx);
+extern rtx        gen_movtf                               (rtx, rtx);
+extern rtx        gen_movmemdi                            (rtx, rtx, rtx, rtx);
+extern rtx        gen_extendsidi2                         (rtx, rtx);
+extern rtx        gen_zero_extendsidi2                    (rtx, rtx);
+extern rtx        gen_extendqisi2                         (rtx, rtx);
+extern rtx        gen_zero_extendqisi2                    (rtx, rtx);
+extern rtx        gen_extendqidi2                         (rtx, rtx);
+extern rtx        gen_zero_extendqidi2                    (rtx, rtx);
+extern rtx        gen_extendhisi2                         (rtx, rtx);
+extern rtx        gen_zero_extendhisi2                    (rtx, rtx);
+extern rtx        gen_extendhidi2                         (rtx, rtx);
+extern rtx        gen_zero_extendhidi2                    (rtx, rtx);
+extern rtx        gen_extendqihi2                         (rtx, rtx);
+extern rtx        gen_zero_extendqihi2                    (rtx, rtx);
+extern rtx        gen_addsi3                              (rtx, rtx, rtx);
+extern rtx        gen_adddi3                              (rtx, rtx, rtx);
+extern rtx        gen_addvsi4                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_addvdi4                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_uaddvsi4                            (rtx, rtx, rtx, rtx);
+extern rtx        gen_uaddvdi4                            (rtx, rtx, rtx, rtx);
+extern rtx        gen_addti3                              (rtx, rtx, rtx);
+extern rtx        gen_addvti4                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_uaddvti4                            (rtx, rtx, rtx, rtx);
+extern rtx        gen_addsi3_carryin                      (rtx, rtx, rtx);
+extern rtx        gen_adddi3_carryin                      (rtx, rtx, rtx);
+extern rtx        gen_addsi3_carryinC                     (rtx, rtx, rtx);
+extern rtx        gen_adddi3_carryinC                     (rtx, rtx, rtx);
+extern rtx        gen_addsi3_carryinV                     (rtx, rtx, rtx);
+extern rtx        gen_adddi3_carryinV                     (rtx, rtx, rtx);
+extern rtx        gen_subvsi4                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_subvdi4                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_negvsi3                             (rtx, rtx, rtx);
+extern rtx        gen_negvdi3                             (rtx, rtx, rtx);
+extern rtx        gen_usubvsi4                            (rtx, rtx, rtx, rtx);
+extern rtx        gen_usubvdi4                            (rtx, rtx, rtx, rtx);
+extern rtx        gen_subti3                              (rtx, rtx, rtx);
+extern rtx        gen_subvti4                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_usubvti4                            (rtx, rtx, rtx, rtx);
+extern rtx        gen_negvti3                             (rtx, rtx, rtx);
+extern rtx        gen_subsi3_carryin                      (rtx, rtx, rtx);
+extern rtx        gen_subdi3_carryin                      (rtx, rtx, rtx);
+extern rtx        gen_usubsi3_carryinC                    (rtx, rtx, rtx);
+extern rtx        gen_usubdi3_carryinC                    (rtx, rtx, rtx);
+extern rtx        gen_subsi3_carryinV                     (rtx, rtx, rtx);
+extern rtx        gen_subdi3_carryinV                     (rtx, rtx, rtx);
+extern rtx        gen_abssi2                              (rtx, rtx);
+extern rtx        gen_absdi2                              (rtx, rtx);
+extern rtx        gen_mulditi3                            (rtx, rtx, rtx);
+extern rtx        gen_umulditi3                           (rtx, rtx, rtx);
+extern rtx        gen_multi3                              (rtx, rtx, rtx);
+extern rtx        gen_cstoresi4                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_cstoredi4                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_cstorecc4                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_cstoresf4                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_cstoredf4                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_cmovsi6                             (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cmovdi6                             (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cmovsf6                             (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cmovdf6                             (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_movqicc                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_movhicc                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_movsicc                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_movdicc                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_movsfsicc                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_movsfdicc                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_movdfsicc                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_movdfdicc                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_movsfcc                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_movdfcc                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_negsicc                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_notsicc                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_negdicc                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_notdicc                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_umaxsi3                             (rtx, rtx, rtx);
+extern rtx        gen_umaxdi3                             (rtx, rtx, rtx);
+extern rtx        gen_ffssi2                              (rtx, rtx);
+extern rtx        gen_ffsdi2                              (rtx, rtx);
+extern rtx        gen_popcountsi2                         (rtx, rtx);
+extern rtx        gen_popcountdi2                         (rtx, rtx);
+extern rtx        gen_ashlsi3                             (rtx, rtx, rtx);
+extern rtx        gen_ashrsi3                             (rtx, rtx, rtx);
+extern rtx        gen_lshrsi3                             (rtx, rtx, rtx);
+extern rtx        gen_ashldi3                             (rtx, rtx, rtx);
+extern rtx        gen_ashrdi3                             (rtx, rtx, rtx);
+extern rtx        gen_lshrdi3                             (rtx, rtx, rtx);
+extern rtx        gen_ashlqi3                             (rtx, rtx, rtx);
+extern rtx        gen_ashlhi3                             (rtx, rtx, rtx);
+extern rtx        gen_rotrsi3                             (rtx, rtx, rtx);
+extern rtx        gen_rotrdi3                             (rtx, rtx, rtx);
+extern rtx        gen_rotlsi3                             (rtx, rtx, rtx);
+extern rtx        gen_rotldi3                             (rtx, rtx, rtx);
+extern rtx        gen_extv                                (rtx, rtx, rtx, rtx);
+extern rtx        gen_extzv                               (rtx, rtx, rtx, rtx);
+extern rtx        gen_insvsi                              (rtx, rtx, rtx, rtx);
+extern rtx        gen_insvdi                              (rtx, rtx, rtx, rtx);
+extern rtx        gen_fmahf4                              (rtx, rtx, rtx, rtx);
+extern rtx        gen_fmasf4                              (rtx, rtx, rtx, rtx);
+extern rtx        gen_fmadf4                              (rtx, rtx, rtx, rtx);
+extern rtx        gen_fnmahf4                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_fnmasf4                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_fnmadf4                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_fmssf4                              (rtx, rtx, rtx, rtx);
+extern rtx        gen_fmsdf4                              (rtx, rtx, rtx, rtx);
+extern rtx        gen_fnmssf4                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_fnmsdf4                             (rtx, rtx, rtx, rtx);
+extern rtx        gen_floatsihf2                          (rtx, rtx);
+extern rtx        gen_floatunssihf2                       (rtx, rtx);
+extern rtx        gen_floatdihf2                          (rtx, rtx);
+extern rtx        gen_floatunsdihf2                       (rtx, rtx);
+extern rtx        gen_divhf3                              (rtx, rtx, rtx);
+extern rtx        gen_divsf3                              (rtx, rtx, rtx);
+extern rtx        gen_divdf3                              (rtx, rtx, rtx);
+extern rtx        gen_sqrthf2                             (rtx, rtx);
+extern rtx        gen_sqrtsf2                             (rtx, rtx);
+extern rtx        gen_sqrtdf2                             (rtx, rtx);
+extern rtx        gen_lrintsfsi2                          (rtx, rtx);
+extern rtx        gen_lrintsfdi2                          (rtx, rtx);
+extern rtx        gen_lrintdfsi2                          (rtx, rtx);
+extern rtx        gen_lrintdfdi2                          (rtx, rtx);
+extern rtx        gen_copysignsf3                         (rtx, rtx, rtx);
+extern rtx        gen_copysigndf3                         (rtx, rtx, rtx);
+extern rtx        gen_xorsignsf3                          (rtx, rtx, rtx);
+extern rtx        gen_xorsigndf3                          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpsfsi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpsfdi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpdfsi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpdfdi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcptfsi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcptfdi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv8qisi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv16qisi         (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv4hisi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv8hisi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv2sisi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv4sisi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv2disi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv2sfsi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv4sfsi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv2dfsi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv8qidi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv16qidi         (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv4hidi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv8hidi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv2sidi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv4sidi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv2didi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv2sfdi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv4sfdi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movcpv2dfdi          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movti                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_reload_movtf                (rtx, rtx, rtx);
+extern rtx        gen_add_losym                           (rtx, rtx, rtx);
+extern rtx        gen_tlsgd_small_si                      (rtx, rtx);
+extern rtx        gen_tlsgd_small_di                      (rtx, rtx);
+extern rtx        gen_tlsdesc_small_si                    (rtx);
+extern rtx        gen_tlsdesc_small_di                    (rtx);
+extern rtx        gen_get_thread_pointerdi                (rtx);
+extern rtx        gen_stack_protect_set                   (rtx, rtx);
+extern rtx        gen_stack_protect_test                  (rtx, rtx, rtx);
+extern rtx        gen_doloop_end                          (rtx, rtx);
+extern rtx        gen_set_clobber_cc                      (rtx, rtx);
+extern rtx        gen_despeculate_copyqi                  (rtx, rtx, rtx);
+extern rtx        gen_despeculate_copyhi                  (rtx, rtx, rtx);
+extern rtx        gen_despeculate_copysi                  (rtx, rtx, rtx);
+extern rtx        gen_despeculate_copydi                  (rtx, rtx, rtx);
+extern rtx        gen_despeculate_copyti                  (rtx, rtx, rtx);
+extern rtx        gen_movv8qi                             (rtx, rtx);
+extern rtx        gen_movv16qi                            (rtx, rtx);
+extern rtx        gen_movv4hi                             (rtx, rtx);
+extern rtx        gen_movv8hi                             (rtx, rtx);
+extern rtx        gen_movv2si                             (rtx, rtx);
+extern rtx        gen_movv4si                             (rtx, rtx);
+extern rtx        gen_movv2di                             (rtx, rtx);
+extern rtx        gen_movv4hf                             (rtx, rtx);
+extern rtx        gen_movv8hf                             (rtx, rtx);
+extern rtx        gen_movv2sf                             (rtx, rtx);
+extern rtx        gen_movv4sf                             (rtx, rtx);
+extern rtx        gen_movv2df                             (rtx, rtx);
+extern rtx        gen_movmisalignv8qi                     (rtx, rtx);
+extern rtx        gen_movmisalignv16qi                    (rtx, rtx);
+extern rtx        gen_movmisalignv4hi                     (rtx, rtx);
+extern rtx        gen_movmisalignv8hi                     (rtx, rtx);
+extern rtx        gen_movmisalignv2si                     (rtx, rtx);
+extern rtx        gen_movmisalignv4si                     (rtx, rtx);
+extern rtx        gen_movmisalignv2di                     (rtx, rtx);
+extern rtx        gen_movmisalignv2sf                     (rtx, rtx);
+extern rtx        gen_movmisalignv4sf                     (rtx, rtx);
+extern rtx        gen_movmisalignv2df                     (rtx, rtx);
+extern rtx        gen_aarch64_split_simd_movv16qi         (rtx, rtx);
+extern rtx        gen_aarch64_split_simd_movv8hi          (rtx, rtx);
+extern rtx        gen_aarch64_split_simd_movv4si          (rtx, rtx);
+extern rtx        gen_aarch64_split_simd_movv2di          (rtx, rtx);
+extern rtx        gen_aarch64_split_simd_movv8hf          (rtx, rtx);
+extern rtx        gen_aarch64_split_simd_movv4sf          (rtx, rtx);
+extern rtx        gen_aarch64_split_simd_movv2df          (rtx, rtx);
+extern rtx        gen_ctzv2si2                            (rtx, rtx);
+extern rtx        gen_ctzv4si2                            (rtx, rtx);
+extern rtx        gen_xorsignv4hf3                        (rtx, rtx, rtx);
+extern rtx        gen_xorsignv8hf3                        (rtx, rtx, rtx);
+extern rtx        gen_xorsignv2sf3                        (rtx, rtx, rtx);
+extern rtx        gen_xorsignv4sf3                        (rtx, rtx, rtx);
+extern rtx        gen_xorsignv2df3                        (rtx, rtx, rtx);
+extern rtx        gen_sdot_prodv8qi                       (rtx, rtx, rtx, rtx);
+extern rtx        gen_udot_prodv8qi                       (rtx, rtx, rtx, rtx);
+extern rtx        gen_sdot_prodv16qi                      (rtx, rtx, rtx, rtx);
+extern rtx        gen_udot_prodv16qi                      (rtx, rtx, rtx, rtx);
+extern rtx        gen_copysignv4hf3                       (rtx, rtx, rtx);
+extern rtx        gen_copysignv8hf3                       (rtx, rtx, rtx);
+extern rtx        gen_copysignv2sf3                       (rtx, rtx, rtx);
+extern rtx        gen_copysignv4sf3                       (rtx, rtx, rtx);
+extern rtx        gen_copysignv2df3                       (rtx, rtx, rtx);
+extern rtx        gen_rsqrtv2sf2                          (rtx, rtx);
+extern rtx        gen_rsqrtv4sf2                          (rtx, rtx);
+extern rtx        gen_rsqrtv2df2                          (rtx, rtx);
+extern rtx        gen_rsqrtsf2                            (rtx, rtx);
+extern rtx        gen_rsqrtdf2                            (rtx, rtx);
+extern rtx        gen_ssadv16qi                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_usadv16qi                           (rtx, rtx, rtx, rtx);
+extern rtx        gen_ashlv8qi3                           (rtx, rtx, rtx);
+extern rtx        gen_ashlv16qi3                          (rtx, rtx, rtx);
+extern rtx        gen_ashlv4hi3                           (rtx, rtx, rtx);
+extern rtx        gen_ashlv8hi3                           (rtx, rtx, rtx);
+extern rtx        gen_ashlv2si3                           (rtx, rtx, rtx);
+extern rtx        gen_ashlv4si3                           (rtx, rtx, rtx);
+extern rtx        gen_ashlv2di3                           (rtx, rtx, rtx);
+extern rtx        gen_lshrv8qi3                           (rtx, rtx, rtx);
+extern rtx        gen_lshrv16qi3                          (rtx, rtx, rtx);
+extern rtx        gen_lshrv4hi3                           (rtx, rtx, rtx);
+extern rtx        gen_lshrv8hi3                           (rtx, rtx, rtx);
+extern rtx        gen_lshrv2si3                           (rtx, rtx, rtx);
+extern rtx        gen_lshrv4si3                           (rtx, rtx, rtx);
+extern rtx        gen_lshrv2di3                           (rtx, rtx, rtx);
+extern rtx        gen_ashrv8qi3                           (rtx, rtx, rtx);
+extern rtx        gen_ashrv16qi3                          (rtx, rtx, rtx);
+extern rtx        gen_ashrv4hi3                           (rtx, rtx, rtx);
+extern rtx        gen_ashrv8hi3                           (rtx, rtx, rtx);
+extern rtx        gen_ashrv2si3                           (rtx, rtx, rtx);
+extern rtx        gen_ashrv4si3                           (rtx, rtx, rtx);
+extern rtx        gen_ashrv2di3                           (rtx, rtx, rtx);
+extern rtx        gen_vashlv8qi3                          (rtx, rtx, rtx);
+extern rtx        gen_vashlv16qi3                         (rtx, rtx, rtx);
+extern rtx        gen_vashlv4hi3                          (rtx, rtx, rtx);
+extern rtx        gen_vashlv8hi3                          (rtx, rtx, rtx);
+extern rtx        gen_vashlv2si3                          (rtx, rtx, rtx);
+extern rtx        gen_vashlv4si3                          (rtx, rtx, rtx);
+extern rtx        gen_vashlv2di3                          (rtx, rtx, rtx);
+extern rtx        gen_vashrv8qi3                          (rtx, rtx, rtx);
+extern rtx        gen_vashrv16qi3                         (rtx, rtx, rtx);
+extern rtx        gen_vashrv4hi3                          (rtx, rtx, rtx);
+extern rtx        gen_vashrv8hi3                          (rtx, rtx, rtx);
+extern rtx        gen_vashrv2si3                          (rtx, rtx, rtx);
+extern rtx        gen_vashrv4si3                          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ashr_simddi                 (rtx, rtx, rtx);
+extern rtx        gen_vlshrv8qi3                          (rtx, rtx, rtx);
+extern rtx        gen_vlshrv16qi3                         (rtx, rtx, rtx);
+extern rtx        gen_vlshrv4hi3                          (rtx, rtx, rtx);
+extern rtx        gen_vlshrv8hi3                          (rtx, rtx, rtx);
+extern rtx        gen_vlshrv2si3                          (rtx, rtx, rtx);
+extern rtx        gen_vlshrv4si3                          (rtx, rtx, rtx);
+extern rtx        gen_aarch64_lshr_simddi                 (rtx, rtx, rtx);
+extern rtx        gen_vec_setv8qi                         (rtx, rtx, rtx);
+extern rtx        gen_vec_setv16qi                        (rtx, rtx, rtx);
+extern rtx        gen_vec_setv4hi                         (rtx, rtx, rtx);
+extern rtx        gen_vec_setv8hi                         (rtx, rtx, rtx);
+extern rtx        gen_vec_setv2si                         (rtx, rtx, rtx);
+extern rtx        gen_vec_setv4si                         (rtx, rtx, rtx);
+extern rtx        gen_vec_setv2di                         (rtx, rtx, rtx);
+extern rtx        gen_vec_setv4hf                         (rtx, rtx, rtx);
+extern rtx        gen_vec_setv8hf                         (rtx, rtx, rtx);
+extern rtx        gen_vec_setv2sf                         (rtx, rtx, rtx);
+extern rtx        gen_vec_setv4sf                         (rtx, rtx, rtx);
+extern rtx        gen_vec_setv2df                         (rtx, rtx, rtx);
+extern rtx        gen_smaxv2di3                           (rtx, rtx, rtx);
+extern rtx        gen_sminv2di3                           (rtx, rtx, rtx);
+extern rtx        gen_umaxv2di3                           (rtx, rtx, rtx);
+extern rtx        gen_uminv2di3                           (rtx, rtx, rtx);
+extern rtx        gen_move_lo_quad_v16qi                  (rtx, rtx);
+extern rtx        gen_move_lo_quad_v8hi                   (rtx, rtx);
+extern rtx        gen_move_lo_quad_v4si                   (rtx, rtx);
+extern rtx        gen_move_lo_quad_v2di                   (rtx, rtx);
+extern rtx        gen_move_lo_quad_v8hf                   (rtx, rtx);
+extern rtx        gen_move_lo_quad_v4sf                   (rtx, rtx);
+extern rtx        gen_move_lo_quad_v2df                   (rtx, rtx);
+extern rtx        gen_move_hi_quad_v16qi                  (rtx, rtx);
+extern rtx        gen_move_hi_quad_v8hi                   (rtx, rtx);
+extern rtx        gen_move_hi_quad_v4si                   (rtx, rtx);
+extern rtx        gen_move_hi_quad_v2di                   (rtx, rtx);
+extern rtx        gen_move_hi_quad_v8hf                   (rtx, rtx);
+extern rtx        gen_move_hi_quad_v4sf                   (rtx, rtx);
+extern rtx        gen_move_hi_quad_v2df                   (rtx, rtx);
+extern rtx        gen_vec_pack_trunc_v4hi                 (rtx, rtx, rtx);
+extern rtx        gen_vec_pack_trunc_v2si                 (rtx, rtx, rtx);
+extern rtx        gen_vec_pack_trunc_di                   (rtx, rtx, rtx);
+extern rtx        gen_vec_unpacks_hi_v16qi                (rtx, rtx);
+extern rtx        gen_vec_unpacku_hi_v16qi                (rtx, rtx);
+extern rtx        gen_vec_unpacks_hi_v8hi                 (rtx, rtx);
+extern rtx        gen_vec_unpacku_hi_v8hi                 (rtx, rtx);
+extern rtx        gen_vec_unpacks_hi_v4si                 (rtx, rtx);
+extern rtx        gen_vec_unpacku_hi_v4si                 (rtx, rtx);
+extern rtx        gen_vec_unpacks_lo_v16qi                (rtx, rtx);
+extern rtx        gen_vec_unpacku_lo_v16qi                (rtx, rtx);
+extern rtx        gen_vec_unpacks_lo_v8hi                 (rtx, rtx);
+extern rtx        gen_vec_unpacku_lo_v8hi                 (rtx, rtx);
+extern rtx        gen_vec_unpacks_lo_v4si                 (rtx, rtx);
+extern rtx        gen_vec_unpacku_lo_v4si                 (rtx, rtx);
+extern rtx        gen_vec_widen_smult_lo_v16qi            (rtx, rtx, rtx);
+extern rtx        gen_vec_widen_umult_lo_v16qi            (rtx, rtx, rtx);
+extern rtx        gen_vec_widen_smult_lo_v8hi             (rtx, rtx, rtx);
+extern rtx        gen_vec_widen_umult_lo_v8hi             (rtx, rtx, rtx);
+extern rtx        gen_vec_widen_smult_lo_v4si             (rtx, rtx, rtx);
+extern rtx        gen_vec_widen_umult_lo_v4si             (rtx, rtx, rtx);
+extern rtx        gen_vec_widen_smult_hi_v16qi            (rtx, rtx, rtx);
+extern rtx        gen_vec_widen_umult_hi_v16qi            (rtx, rtx, rtx);
+extern rtx        gen_vec_widen_smult_hi_v8hi             (rtx, rtx, rtx);
+extern rtx        gen_vec_widen_umult_hi_v8hi             (rtx, rtx, rtx);
+extern rtx        gen_vec_widen_smult_hi_v4si             (rtx, rtx, rtx);
+extern rtx        gen_vec_widen_umult_hi_v4si             (rtx, rtx, rtx);
+extern rtx        gen_divv4hf3                            (rtx, rtx, rtx);
+extern rtx        gen_divv8hf3                            (rtx, rtx, rtx);
+extern rtx        gen_divv2sf3                            (rtx, rtx, rtx);
+extern rtx        gen_divv4sf3                            (rtx, rtx, rtx);
+extern rtx        gen_divv2df3                            (rtx, rtx, rtx);
+extern rtx        gen_fixv4hfv4hi2                        (rtx, rtx);
+extern rtx        gen_fixunsv4hfv4hi2                     (rtx, rtx);
+extern rtx        gen_fixv8hfv8hi2                        (rtx, rtx);
+extern rtx        gen_fixunsv8hfv8hi2                     (rtx, rtx);
+extern rtx        gen_fixv2sfv2si2                        (rtx, rtx);
+extern rtx        gen_fixunsv2sfv2si2                     (rtx, rtx);
+extern rtx        gen_fixv4sfv4si2                        (rtx, rtx);
+extern rtx        gen_fixunsv4sfv4si2                     (rtx, rtx);
+extern rtx        gen_fixv2dfv2di2                        (rtx, rtx);
+extern rtx        gen_fixunsv2dfv2di2                     (rtx, rtx);
+extern rtx        gen_fix_truncv4hfv4hi2                  (rtx, rtx);
+extern rtx        gen_fixuns_truncv4hfv4hi2               (rtx, rtx);
+extern rtx        gen_fix_truncv8hfv8hi2                  (rtx, rtx);
+extern rtx        gen_fixuns_truncv8hfv8hi2               (rtx, rtx);
+extern rtx        gen_fix_truncv2sfv2si2                  (rtx, rtx);
+extern rtx        gen_fixuns_truncv2sfv2si2               (rtx, rtx);
+extern rtx        gen_fix_truncv4sfv4si2                  (rtx, rtx);
+extern rtx        gen_fixuns_truncv4sfv4si2               (rtx, rtx);
+extern rtx        gen_fix_truncv2dfv2di2                  (rtx, rtx);
+extern rtx        gen_fixuns_truncv2dfv2di2               (rtx, rtx);
+extern rtx        gen_ftruncv4hf2                         (rtx, rtx);
+extern rtx        gen_ftruncv8hf2                         (rtx, rtx);
+extern rtx        gen_ftruncv2sf2                         (rtx, rtx);
+extern rtx        gen_ftruncv4sf2                         (rtx, rtx);
+extern rtx        gen_ftruncv2df2                         (rtx, rtx);
+extern rtx        gen_vec_unpacks_lo_v8hf                 (rtx, rtx);
+extern rtx        gen_vec_unpacks_lo_v4sf                 (rtx, rtx);
+extern rtx        gen_vec_unpacks_hi_v8hf                 (rtx, rtx);
+extern rtx        gen_vec_unpacks_hi_v4sf                 (rtx, rtx);
+extern rtx        gen_aarch64_float_truncate_hi_v4sf      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_float_truncate_hi_v8hf      (rtx, rtx, rtx);
+extern rtx        gen_vec_pack_trunc_v2df                 (rtx, rtx, rtx);
+extern rtx        gen_vec_pack_trunc_df                   (rtx, rtx, rtx);
+extern rtx        gen_reduc_plus_scal_v8qi                (rtx, rtx);
+extern rtx        gen_reduc_plus_scal_v16qi               (rtx, rtx);
+extern rtx        gen_reduc_plus_scal_v4hi                (rtx, rtx);
+extern rtx        gen_reduc_plus_scal_v8hi                (rtx, rtx);
+extern rtx        gen_reduc_plus_scal_v2si                (rtx, rtx);
+extern rtx        gen_reduc_plus_scal_v4si                (rtx, rtx);
+extern rtx        gen_reduc_plus_scal_v2di                (rtx, rtx);
+extern rtx        gen_reduc_plus_scal_v4sf                (rtx, rtx);
+extern rtx        gen_reduc_smax_nan_scal_v4hf            (rtx, rtx);
+extern rtx        gen_reduc_smin_nan_scal_v4hf            (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_v4hf                (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_v4hf                (rtx, rtx);
+extern rtx        gen_reduc_smax_nan_scal_v8hf            (rtx, rtx);
+extern rtx        gen_reduc_smin_nan_scal_v8hf            (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_v8hf                (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_v8hf                (rtx, rtx);
+extern rtx        gen_reduc_smax_nan_scal_v2sf            (rtx, rtx);
+extern rtx        gen_reduc_smin_nan_scal_v2sf            (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_v2sf                (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_v2sf                (rtx, rtx);
+extern rtx        gen_reduc_smax_nan_scal_v4sf            (rtx, rtx);
+extern rtx        gen_reduc_smin_nan_scal_v4sf            (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_v4sf                (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_v4sf                (rtx, rtx);
+extern rtx        gen_reduc_smax_nan_scal_v2df            (rtx, rtx);
+extern rtx        gen_reduc_smin_nan_scal_v2df            (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_v2df                (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_v2df                (rtx, rtx);
+extern rtx        gen_reduc_umax_scal_v8qi                (rtx, rtx);
+extern rtx        gen_reduc_umin_scal_v8qi                (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_v8qi                (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_v8qi                (rtx, rtx);
+extern rtx        gen_reduc_umax_scal_v16qi               (rtx, rtx);
+extern rtx        gen_reduc_umin_scal_v16qi               (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_v16qi               (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_v16qi               (rtx, rtx);
+extern rtx        gen_reduc_umax_scal_v4hi                (rtx, rtx);
+extern rtx        gen_reduc_umin_scal_v4hi                (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_v4hi                (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_v4hi                (rtx, rtx);
+extern rtx        gen_reduc_umax_scal_v8hi                (rtx, rtx);
+extern rtx        gen_reduc_umin_scal_v8hi                (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_v8hi                (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_v8hi                (rtx, rtx);
+extern rtx        gen_reduc_umax_scal_v2si                (rtx, rtx);
+extern rtx        gen_reduc_umin_scal_v2si                (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_v2si                (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_v2si                (rtx, rtx);
+extern rtx        gen_reduc_umax_scal_v4si                (rtx, rtx);
+extern rtx        gen_reduc_umin_scal_v4si                (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_v4si                (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_v4si                (rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv8qi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv16qi               (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv4hi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv8hi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv2si                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv4si                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv2di                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv4hf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv8hf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv2sf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv4sf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bslv2df                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bsldi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_bsldf                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_v8qiv8qi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_v16qiv16qi               (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_v4hiv4hi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_v8hiv8hi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_v2siv2si                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_v4siv4si                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_v2div2di                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_v2sfv2si                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_v4sfv4si                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_v2dfv2di                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcond_mask_didi                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpv8qiv8qi                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpv16qiv16qi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpv4hiv4hi                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpv8hiv8hi                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpv2siv2si                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpv4siv4si                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpv2div2di                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpdidi                         (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpv2sfv2si                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpv4sfv4si                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpv2dfv2di                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpuv8qiv8qi                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpuv16qiv16qi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpuv4hiv4hi                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpuv8hiv8hi                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpuv2siv2si                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpuv4siv4si                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpuv2div2di                    (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpudidi                        (rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondv8qiv8qi                       (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondv16qiv16qi                     (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondv4hiv4hi                       (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondv8hiv8hi                       (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondv2siv2si                       (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondv4siv4si                       (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondv2div2di                       (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondv2sfv2sf                       (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondv4sfv4sf                       (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondv2dfv2df                       (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconddidi                           (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondv2siv2sf                       (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondv2sfv2si                       (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondv4siv4sf                       (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondv4sfv4si                       (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondv2div2df                       (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondv2dfv2di                       (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconduv8qiv8qi                      (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconduv16qiv16qi                    (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconduv4hiv4hi                      (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconduv8hiv8hi                      (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconduv2siv2si                      (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconduv4siv4si                      (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconduv2div2di                      (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondudidi                          (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconduv2sfv2si                      (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconduv4sfv4si                      (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconduv2dfv2di                      (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_combinev8qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_combinev4hi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_combinev4hf                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_combinev2si                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_combinev2sf                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_combinedi                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_combinedf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_combinev8qi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_combinev4hi            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_combinev4hf            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_combinev2si            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_combinev2sf            (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_combinedi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_simd_combinedf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddl2v16qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddl2v8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddl2v4si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddl2v16qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddl2v8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddl2v4si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssubl2v16qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssubl2v8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssubl2v4si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usubl2v16qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usubl2v8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usubl2v4si                  (rtx, rtx, rtx);
+extern rtx        gen_widen_ssumv16qi3                    (rtx, rtx, rtx);
+extern rtx        gen_widen_ssumv8hi3                     (rtx, rtx, rtx);
+extern rtx        gen_widen_ssumv4si3                     (rtx, rtx, rtx);
+extern rtx        gen_widen_ssumv8qi3                     (rtx, rtx, rtx);
+extern rtx        gen_widen_ssumv4hi3                     (rtx, rtx, rtx);
+extern rtx        gen_widen_ssumv2si3                     (rtx, rtx, rtx);
+extern rtx        gen_widen_usumv16qi3                    (rtx, rtx, rtx);
+extern rtx        gen_widen_usumv8hi3                     (rtx, rtx, rtx);
+extern rtx        gen_widen_usumv4si3                     (rtx, rtx, rtx);
+extern rtx        gen_widen_usumv8qi3                     (rtx, rtx, rtx);
+extern rtx        gen_widen_usumv4hi3                     (rtx, rtx, rtx);
+extern rtx        gen_widen_usumv2si3                     (rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddw2v16qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddw2v8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_saddw2v4si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddw2v16qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddw2v8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_uaddw2v4si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssubw2v16qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssubw2v8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_ssubw2v4si                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usubw2v16qi                 (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usubw2v8hi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_usubw2v4si                  (rtx, rtx, rtx);
+extern rtx        gen_avgv8qi3_floor                      (rtx, rtx, rtx);
+extern rtx        gen_uavgv8qi3_floor                     (rtx, rtx, rtx);
+extern rtx        gen_avgv16qi3_floor                     (rtx, rtx, rtx);
+extern rtx        gen_uavgv16qi3_floor                    (rtx, rtx, rtx);
+extern rtx        gen_avgv4hi3_floor                      (rtx, rtx, rtx);
+extern rtx        gen_uavgv4hi3_floor                     (rtx, rtx, rtx);
+extern rtx        gen_avgv8hi3_floor                      (rtx, rtx, rtx);
+extern rtx        gen_uavgv8hi3_floor                     (rtx, rtx, rtx);
+extern rtx        gen_avgv2si3_floor                      (rtx, rtx, rtx);
+extern rtx        gen_uavgv2si3_floor                     (rtx, rtx, rtx);
+extern rtx        gen_avgv4si3_floor                      (rtx, rtx, rtx);
+extern rtx        gen_uavgv4si3_floor                     (rtx, rtx, rtx);
+extern rtx        gen_avgv8qi3_ceil                       (rtx, rtx, rtx);
+extern rtx        gen_uavgv8qi3_ceil                      (rtx, rtx, rtx);
+extern rtx        gen_avgv16qi3_ceil                      (rtx, rtx, rtx);
+extern rtx        gen_uavgv16qi3_ceil                     (rtx, rtx, rtx);
+extern rtx        gen_avgv4hi3_ceil                       (rtx, rtx, rtx);
+extern rtx        gen_uavgv4hi3_ceil                      (rtx, rtx, rtx);
+extern rtx        gen_avgv8hi3_ceil                       (rtx, rtx, rtx);
+extern rtx        gen_uavgv8hi3_ceil                      (rtx, rtx, rtx);
+extern rtx        gen_avgv2si3_ceil                       (rtx, rtx, rtx);
+extern rtx        gen_uavgv2si3_ceil                      (rtx, rtx, rtx);
+extern rtx        gen_avgv4si3_ceil                       (rtx, rtx, rtx);
+extern rtx        gen_uavgv4si3_ceil                      (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal2v8hi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal2v4si                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl2v8hi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl2v4si                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal2_lanev8hi           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal2_lanev4si           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal2_laneqv8hi          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal2_laneqv4si          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl2_lanev8hi           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl2_lanev4si           (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl2_laneqv8hi          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl2_laneqv4si          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal2_nv8hi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlal2_nv4si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl2_nv8hi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmlsl2_nv4si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull2v8hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull2v4si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull2_lanev8hi           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull2_lanev4si           (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull2_laneqv8hi          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull2_laneqv4si          (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull2_nv8hi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_sqdmull2_nv4si              (rtx, rtx, rtx);
+extern rtx        gen_sqrtv4hf2                           (rtx, rtx);
+extern rtx        gen_sqrtv8hf2                           (rtx, rtx);
+extern rtx        gen_sqrtv2sf2                           (rtx, rtx);
+extern rtx        gen_sqrtv4sf2                           (rtx, rtx);
+extern rtx        gen_sqrtv2df2                           (rtx, rtx);
+extern rtx        gen_vec_load_lanesoiv16qi               (rtx, rtx);
+extern rtx        gen_vec_load_lanesoiv8hi                (rtx, rtx);
+extern rtx        gen_vec_load_lanesoiv4si                (rtx, rtx);
+extern rtx        gen_vec_load_lanesoiv2di                (rtx, rtx);
+extern rtx        gen_vec_load_lanesoiv8hf                (rtx, rtx);
+extern rtx        gen_vec_load_lanesoiv4sf                (rtx, rtx);
+extern rtx        gen_vec_load_lanesoiv2df                (rtx, rtx);
+extern rtx        gen_vec_store_lanesoiv16qi              (rtx, rtx);
+extern rtx        gen_vec_store_lanesoiv8hi               (rtx, rtx);
+extern rtx        gen_vec_store_lanesoiv4si               (rtx, rtx);
+extern rtx        gen_vec_store_lanesoiv2di               (rtx, rtx);
+extern rtx        gen_vec_store_lanesoiv8hf               (rtx, rtx);
+extern rtx        gen_vec_store_lanesoiv4sf               (rtx, rtx);
+extern rtx        gen_vec_store_lanesoiv2df               (rtx, rtx);
+extern rtx        gen_vec_load_lanesciv16qi               (rtx, rtx);
+extern rtx        gen_vec_load_lanesciv8hi                (rtx, rtx);
+extern rtx        gen_vec_load_lanesciv4si                (rtx, rtx);
+extern rtx        gen_vec_load_lanesciv2di                (rtx, rtx);
+extern rtx        gen_vec_load_lanesciv8hf                (rtx, rtx);
+extern rtx        gen_vec_load_lanesciv4sf                (rtx, rtx);
+extern rtx        gen_vec_load_lanesciv2df                (rtx, rtx);
+extern rtx        gen_vec_store_lanesciv16qi              (rtx, rtx);
+extern rtx        gen_vec_store_lanesciv8hi               (rtx, rtx);
+extern rtx        gen_vec_store_lanesciv4si               (rtx, rtx);
+extern rtx        gen_vec_store_lanesciv2di               (rtx, rtx);
+extern rtx        gen_vec_store_lanesciv8hf               (rtx, rtx);
+extern rtx        gen_vec_store_lanesciv4sf               (rtx, rtx);
+extern rtx        gen_vec_store_lanesciv2df               (rtx, rtx);
+extern rtx        gen_vec_load_lanesxiv16qi               (rtx, rtx);
+extern rtx        gen_vec_load_lanesxiv8hi                (rtx, rtx);
+extern rtx        gen_vec_load_lanesxiv4si                (rtx, rtx);
+extern rtx        gen_vec_load_lanesxiv2di                (rtx, rtx);
+extern rtx        gen_vec_load_lanesxiv8hf                (rtx, rtx);
+extern rtx        gen_vec_load_lanesxiv4sf                (rtx, rtx);
+extern rtx        gen_vec_load_lanesxiv2df                (rtx, rtx);
+extern rtx        gen_vec_store_lanesxiv16qi              (rtx, rtx);
+extern rtx        gen_vec_store_lanesxiv8hi               (rtx, rtx);
+extern rtx        gen_vec_store_lanesxiv4si               (rtx, rtx);
+extern rtx        gen_vec_store_lanesxiv2di               (rtx, rtx);
+extern rtx        gen_vec_store_lanesxiv8hf               (rtx, rtx);
+extern rtx        gen_vec_store_lanesxiv4sf               (rtx, rtx);
+extern rtx        gen_vec_store_lanesxiv2df               (rtx, rtx);
+extern rtx        gen_movoi                               (rtx, rtx);
+extern rtx        gen_movci                               (rtx, rtx);
+extern rtx        gen_movxi                               (rtx, rtx);
+extern rtx        gen_aarch64_ld1x3v8qi                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x3v16qi                  (rtx, rtx);
+extern rtx        gen_aarch64_ld1x3v4hi                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x3v8hi                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x3v2si                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x3v4si                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x3v2di                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x3v4hf                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x3v8hf                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x3v2sf                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x3v4sf                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x3v2df                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x3di                     (rtx, rtx);
+extern rtx        gen_aarch64_ld1x3df                     (rtx, rtx);
+extern rtx        gen_aarch64_st1x2v8qi                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x2v16qi                  (rtx, rtx);
+extern rtx        gen_aarch64_st1x2v4hi                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x2v8hi                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x2v2si                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x2v4si                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x2v2di                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x2v4hf                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x2v8hf                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x2v2sf                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x2v4sf                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x2v2df                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x2di                     (rtx, rtx);
+extern rtx        gen_aarch64_st1x2df                     (rtx, rtx);
+extern rtx        gen_aarch64_st1x3v8qi                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x3v16qi                  (rtx, rtx);
+extern rtx        gen_aarch64_st1x3v4hi                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x3v8hi                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x3v2si                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x3v4si                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x3v2di                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x3v4hf                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x3v8hf                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x3v2sf                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x3v4sf                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x3v2df                   (rtx, rtx);
+extern rtx        gen_aarch64_st1x3di                     (rtx, rtx);
+extern rtx        gen_aarch64_st1x3df                     (rtx, rtx);
+extern rtx        gen_aarch64_ld2rv8qi                    (rtx, rtx);
+extern rtx        gen_aarch64_ld2rv16qi                   (rtx, rtx);
+extern rtx        gen_aarch64_ld2rv4hi                    (rtx, rtx);
+extern rtx        gen_aarch64_ld2rv8hi                    (rtx, rtx);
+extern rtx        gen_aarch64_ld2rv2si                    (rtx, rtx);
+extern rtx        gen_aarch64_ld2rv4si                    (rtx, rtx);
+extern rtx        gen_aarch64_ld2rv2di                    (rtx, rtx);
+extern rtx        gen_aarch64_ld2rv4hf                    (rtx, rtx);
+extern rtx        gen_aarch64_ld2rv8hf                    (rtx, rtx);
+extern rtx        gen_aarch64_ld2rv2sf                    (rtx, rtx);
+extern rtx        gen_aarch64_ld2rv4sf                    (rtx, rtx);
+extern rtx        gen_aarch64_ld2rv2df                    (rtx, rtx);
+extern rtx        gen_aarch64_ld2rdi                      (rtx, rtx);
+extern rtx        gen_aarch64_ld2rdf                      (rtx, rtx);
+extern rtx        gen_aarch64_ld3rv8qi                    (rtx, rtx);
+extern rtx        gen_aarch64_ld3rv16qi                   (rtx, rtx);
+extern rtx        gen_aarch64_ld3rv4hi                    (rtx, rtx);
+extern rtx        gen_aarch64_ld3rv8hi                    (rtx, rtx);
+extern rtx        gen_aarch64_ld3rv2si                    (rtx, rtx);
+extern rtx        gen_aarch64_ld3rv4si                    (rtx, rtx);
+extern rtx        gen_aarch64_ld3rv2di                    (rtx, rtx);
+extern rtx        gen_aarch64_ld3rv4hf                    (rtx, rtx);
+extern rtx        gen_aarch64_ld3rv8hf                    (rtx, rtx);
+extern rtx        gen_aarch64_ld3rv2sf                    (rtx, rtx);
+extern rtx        gen_aarch64_ld3rv4sf                    (rtx, rtx);
+extern rtx        gen_aarch64_ld3rv2df                    (rtx, rtx);
+extern rtx        gen_aarch64_ld3rdi                      (rtx, rtx);
+extern rtx        gen_aarch64_ld3rdf                      (rtx, rtx);
+extern rtx        gen_aarch64_ld4rv8qi                    (rtx, rtx);
+extern rtx        gen_aarch64_ld4rv16qi                   (rtx, rtx);
+extern rtx        gen_aarch64_ld4rv4hi                    (rtx, rtx);
+extern rtx        gen_aarch64_ld4rv8hi                    (rtx, rtx);
+extern rtx        gen_aarch64_ld4rv2si                    (rtx, rtx);
+extern rtx        gen_aarch64_ld4rv4si                    (rtx, rtx);
+extern rtx        gen_aarch64_ld4rv2di                    (rtx, rtx);
+extern rtx        gen_aarch64_ld4rv4hf                    (rtx, rtx);
+extern rtx        gen_aarch64_ld4rv8hf                    (rtx, rtx);
+extern rtx        gen_aarch64_ld4rv2sf                    (rtx, rtx);
+extern rtx        gen_aarch64_ld4rv4sf                    (rtx, rtx);
+extern rtx        gen_aarch64_ld4rv2df                    (rtx, rtx);
+extern rtx        gen_aarch64_ld4rdi                      (rtx, rtx);
+extern rtx        gen_aarch64_ld4rdf                      (rtx, rtx);
+extern rtx        gen_aarch64_ld2v8qi                     (rtx, rtx);
+extern rtx        gen_aarch64_ld2v4hi                     (rtx, rtx);
+extern rtx        gen_aarch64_ld2v4hf                     (rtx, rtx);
+extern rtx        gen_aarch64_ld2v2si                     (rtx, rtx);
+extern rtx        gen_aarch64_ld2v2sf                     (rtx, rtx);
+extern rtx        gen_aarch64_ld2di                       (rtx, rtx);
+extern rtx        gen_aarch64_ld2df                       (rtx, rtx);
+extern rtx        gen_aarch64_ld3v8qi                     (rtx, rtx);
+extern rtx        gen_aarch64_ld3v4hi                     (rtx, rtx);
+extern rtx        gen_aarch64_ld3v4hf                     (rtx, rtx);
+extern rtx        gen_aarch64_ld3v2si                     (rtx, rtx);
+extern rtx        gen_aarch64_ld3v2sf                     (rtx, rtx);
+extern rtx        gen_aarch64_ld3di                       (rtx, rtx);
+extern rtx        gen_aarch64_ld3df                       (rtx, rtx);
+extern rtx        gen_aarch64_ld4v8qi                     (rtx, rtx);
+extern rtx        gen_aarch64_ld4v4hi                     (rtx, rtx);
+extern rtx        gen_aarch64_ld4v4hf                     (rtx, rtx);
+extern rtx        gen_aarch64_ld4v2si                     (rtx, rtx);
+extern rtx        gen_aarch64_ld4v2sf                     (rtx, rtx);
+extern rtx        gen_aarch64_ld4di                       (rtx, rtx);
+extern rtx        gen_aarch64_ld4df                       (rtx, rtx);
+extern rtx        gen_aarch64_ld1v8qi                     (rtx, rtx);
+extern rtx        gen_aarch64_ld1v16qi                    (rtx, rtx);
+extern rtx        gen_aarch64_ld1v4hi                     (rtx, rtx);
+extern rtx        gen_aarch64_ld1v8hi                     (rtx, rtx);
+extern rtx        gen_aarch64_ld1v2si                     (rtx, rtx);
+extern rtx        gen_aarch64_ld1v4si                     (rtx, rtx);
+extern rtx        gen_aarch64_ld1v2di                     (rtx, rtx);
+extern rtx        gen_aarch64_ld1v4hf                     (rtx, rtx);
+extern rtx        gen_aarch64_ld1v8hf                     (rtx, rtx);
+extern rtx        gen_aarch64_ld1v2sf                     (rtx, rtx);
+extern rtx        gen_aarch64_ld1v4sf                     (rtx, rtx);
+extern rtx        gen_aarch64_ld1v2df                     (rtx, rtx);
+extern rtx        gen_aarch64_ld2v16qi                    (rtx, rtx);
+extern rtx        gen_aarch64_ld2v8hi                     (rtx, rtx);
+extern rtx        gen_aarch64_ld2v4si                     (rtx, rtx);
+extern rtx        gen_aarch64_ld2v2di                     (rtx, rtx);
+extern rtx        gen_aarch64_ld2v8hf                     (rtx, rtx);
+extern rtx        gen_aarch64_ld2v4sf                     (rtx, rtx);
+extern rtx        gen_aarch64_ld2v2df                     (rtx, rtx);
+extern rtx        gen_aarch64_ld3v16qi                    (rtx, rtx);
+extern rtx        gen_aarch64_ld3v8hi                     (rtx, rtx);
+extern rtx        gen_aarch64_ld3v4si                     (rtx, rtx);
+extern rtx        gen_aarch64_ld3v2di                     (rtx, rtx);
+extern rtx        gen_aarch64_ld3v8hf                     (rtx, rtx);
+extern rtx        gen_aarch64_ld3v4sf                     (rtx, rtx);
+extern rtx        gen_aarch64_ld3v2df                     (rtx, rtx);
+extern rtx        gen_aarch64_ld4v16qi                    (rtx, rtx);
+extern rtx        gen_aarch64_ld4v8hi                     (rtx, rtx);
+extern rtx        gen_aarch64_ld4v4si                     (rtx, rtx);
+extern rtx        gen_aarch64_ld4v2di                     (rtx, rtx);
+extern rtx        gen_aarch64_ld4v8hf                     (rtx, rtx);
+extern rtx        gen_aarch64_ld4v4sf                     (rtx, rtx);
+extern rtx        gen_aarch64_ld4v2df                     (rtx, rtx);
+extern rtx        gen_aarch64_ld1x2v16qi                  (rtx, rtx);
+extern rtx        gen_aarch64_ld1x2v8hi                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x2v4si                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x2v2di                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x2v8hf                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x2v4sf                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x2v2df                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x2v8qi                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x2v4hi                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x2v4hf                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x2v2si                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x2v2sf                   (rtx, rtx);
+extern rtx        gen_aarch64_ld1x2di                     (rtx, rtx);
+extern rtx        gen_aarch64_ld1x2df                     (rtx, rtx);
+extern rtx        gen_aarch64_ld2_lanev8qi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld2_lanev16qi               (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld2_lanev4hi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld2_lanev8hi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld2_lanev2si                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld2_lanev4si                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld2_lanev2di                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld2_lanev4hf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld2_lanev8hf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld2_lanev2sf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld2_lanev4sf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld2_lanev2df                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld2_lanedi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld2_lanedf                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld3_lanev8qi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld3_lanev16qi               (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld3_lanev4hi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld3_lanev8hi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld3_lanev2si                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld3_lanev4si                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld3_lanev2di                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld3_lanev4hf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld3_lanev8hf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld3_lanev2sf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld3_lanev4sf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld3_lanev2df                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld3_lanedi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld3_lanedf                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld4_lanev8qi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld4_lanev16qi               (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld4_lanev4hi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld4_lanev8hi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld4_lanev2si                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld4_lanev4si                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld4_lanev2di                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld4_lanev4hf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld4_lanev8hf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld4_lanev2sf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld4_lanev4sf                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld4_lanev2df                (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld4_lanedi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_ld4_lanedf                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregoiv8qi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregoiv4hi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregoiv4hf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregoiv2si              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregoiv2sf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregoidi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregoidf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregciv8qi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregciv4hi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregciv4hf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregciv2si              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregciv2sf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregcidi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregcidf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregxiv8qi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregxiv4hi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregxiv4hf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregxiv2si              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregxiv2sf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregxidi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_dregxidf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregoiv16qi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregoiv8hi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregoiv4si              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregoiv2di              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregoiv8hf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregoiv4sf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregoiv2df              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregciv16qi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregciv8hi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregciv4si              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregciv2di              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregciv8hf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregciv4sf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregciv2df              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregxiv16qi             (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregxiv8hi              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregxiv4si              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregxiv2di              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregxiv8hf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregxiv4sf              (rtx, rtx, rtx);
+extern rtx        gen_aarch64_get_qregxiv2df              (rtx, rtx, rtx);
+extern rtx        gen_vec_permv8qi                        (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_permv16qi                       (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_st2v8qi                     (rtx, rtx);
+extern rtx        gen_aarch64_st2v4hi                     (rtx, rtx);
+extern rtx        gen_aarch64_st2v4hf                     (rtx, rtx);
+extern rtx        gen_aarch64_st2v2si                     (rtx, rtx);
+extern rtx        gen_aarch64_st2v2sf                     (rtx, rtx);
+extern rtx        gen_aarch64_st2di                       (rtx, rtx);
+extern rtx        gen_aarch64_st2df                       (rtx, rtx);
+extern rtx        gen_aarch64_st3v8qi                     (rtx, rtx);
+extern rtx        gen_aarch64_st3v4hi                     (rtx, rtx);
+extern rtx        gen_aarch64_st3v4hf                     (rtx, rtx);
+extern rtx        gen_aarch64_st3v2si                     (rtx, rtx);
+extern rtx        gen_aarch64_st3v2sf                     (rtx, rtx);
+extern rtx        gen_aarch64_st3di                       (rtx, rtx);
+extern rtx        gen_aarch64_st3df                       (rtx, rtx);
+extern rtx        gen_aarch64_st4v8qi                     (rtx, rtx);
+extern rtx        gen_aarch64_st4v4hi                     (rtx, rtx);
+extern rtx        gen_aarch64_st4v4hf                     (rtx, rtx);
+extern rtx        gen_aarch64_st4v2si                     (rtx, rtx);
+extern rtx        gen_aarch64_st4v2sf                     (rtx, rtx);
+extern rtx        gen_aarch64_st4di                       (rtx, rtx);
+extern rtx        gen_aarch64_st4df                       (rtx, rtx);
+extern rtx        gen_aarch64_st2v16qi                    (rtx, rtx);
+extern rtx        gen_aarch64_st2v8hi                     (rtx, rtx);
+extern rtx        gen_aarch64_st2v4si                     (rtx, rtx);
+extern rtx        gen_aarch64_st2v2di                     (rtx, rtx);
+extern rtx        gen_aarch64_st2v8hf                     (rtx, rtx);
+extern rtx        gen_aarch64_st2v4sf                     (rtx, rtx);
+extern rtx        gen_aarch64_st2v2df                     (rtx, rtx);
+extern rtx        gen_aarch64_st3v16qi                    (rtx, rtx);
+extern rtx        gen_aarch64_st3v8hi                     (rtx, rtx);
+extern rtx        gen_aarch64_st3v4si                     (rtx, rtx);
+extern rtx        gen_aarch64_st3v2di                     (rtx, rtx);
+extern rtx        gen_aarch64_st3v8hf                     (rtx, rtx);
+extern rtx        gen_aarch64_st3v4sf                     (rtx, rtx);
+extern rtx        gen_aarch64_st3v2df                     (rtx, rtx);
+extern rtx        gen_aarch64_st4v16qi                    (rtx, rtx);
+extern rtx        gen_aarch64_st4v8hi                     (rtx, rtx);
+extern rtx        gen_aarch64_st4v4si                     (rtx, rtx);
+extern rtx        gen_aarch64_st4v2di                     (rtx, rtx);
+extern rtx        gen_aarch64_st4v8hf                     (rtx, rtx);
+extern rtx        gen_aarch64_st4v4sf                     (rtx, rtx);
+extern rtx        gen_aarch64_st4v2df                     (rtx, rtx);
+extern rtx        gen_aarch64_st2_lanev8qi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st2_lanev16qi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st2_lanev4hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st2_lanev8hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st2_lanev2si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st2_lanev4si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st2_lanev2di                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st2_lanev4hf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st2_lanev8hf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st2_lanev2sf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st2_lanev4sf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st2_lanev2df                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st2_lanedi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st2_lanedf                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st3_lanev8qi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st3_lanev16qi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st3_lanev4hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st3_lanev8hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st3_lanev2si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st3_lanev4si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st3_lanev2di                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st3_lanev4hf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st3_lanev8hf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st3_lanev2sf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st3_lanev4sf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st3_lanev2df                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st3_lanedi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st3_lanedf                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st4_lanev8qi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st4_lanev16qi               (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st4_lanev4hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st4_lanev8hi                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st4_lanev2si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st4_lanev4si                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st4_lanev2di                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st4_lanev4hf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st4_lanev8hf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st4_lanev2sf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st4_lanev4sf                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st4_lanev2df                (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st4_lanedi                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st4_lanedf                  (rtx, rtx, rtx);
+extern rtx        gen_aarch64_st1v8qi                     (rtx, rtx);
+extern rtx        gen_aarch64_st1v16qi                    (rtx, rtx);
+extern rtx        gen_aarch64_st1v4hi                     (rtx, rtx);
+extern rtx        gen_aarch64_st1v8hi                     (rtx, rtx);
+extern rtx        gen_aarch64_st1v2si                     (rtx, rtx);
+extern rtx        gen_aarch64_st1v4si                     (rtx, rtx);
+extern rtx        gen_aarch64_st1v2di                     (rtx, rtx);
+extern rtx        gen_aarch64_st1v4hf                     (rtx, rtx);
+extern rtx        gen_aarch64_st1v8hf                     (rtx, rtx);
+extern rtx        gen_aarch64_st1v2sf                     (rtx, rtx);
+extern rtx        gen_aarch64_st1v4sf                     (rtx, rtx);
+extern rtx        gen_aarch64_st1v2df                     (rtx, rtx);
+extern rtx        gen_aarch64_set_qregoiv16qi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregoiv8hi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregoiv4si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregoiv2di              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregoiv8hf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregoiv4sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregoiv2df              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregciv16qi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregciv8hi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregciv4si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregciv2di              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregciv8hf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregciv4sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregciv2df              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregxiv16qi             (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregxiv8hi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregxiv4si              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregxiv2di              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregxiv8hf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregxiv4sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_set_qregxiv2df              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_initv8qiqi                      (rtx, rtx);
+extern rtx        gen_vec_initv16qiqi                     (rtx, rtx);
+extern rtx        gen_vec_initv4hihi                      (rtx, rtx);
+extern rtx        gen_vec_initv8hihi                      (rtx, rtx);
+extern rtx        gen_vec_initv2sisi                      (rtx, rtx);
+extern rtx        gen_vec_initv4sisi                      (rtx, rtx);
+extern rtx        gen_vec_initv2didi                      (rtx, rtx);
+extern rtx        gen_vec_initv4hfhf                      (rtx, rtx);
+extern rtx        gen_vec_initv8hfhf                      (rtx, rtx);
+extern rtx        gen_vec_initv2sfsf                      (rtx, rtx);
+extern rtx        gen_vec_initv4sfsf                      (rtx, rtx);
+extern rtx        gen_vec_initv2dfdf                      (rtx, rtx);
+extern rtx        gen_vec_extractv8qiqi                   (rtx, rtx, rtx);
+extern rtx        gen_vec_extractv16qiqi                  (rtx, rtx, rtx);
+extern rtx        gen_vec_extractv4hihi                   (rtx, rtx, rtx);
+extern rtx        gen_vec_extractv8hihi                   (rtx, rtx, rtx);
+extern rtx        gen_vec_extractv2sisi                   (rtx, rtx, rtx);
+extern rtx        gen_vec_extractv4sisi                   (rtx, rtx, rtx);
+extern rtx        gen_vec_extractv2didi                   (rtx, rtx, rtx);
+extern rtx        gen_vec_extractv4hfhf                   (rtx, rtx, rtx);
+extern rtx        gen_vec_extractv8hfhf                   (rtx, rtx, rtx);
+extern rtx        gen_vec_extractv2sfsf                   (rtx, rtx, rtx);
+extern rtx        gen_vec_extractv4sfsf                   (rtx, rtx, rtx);
+extern rtx        gen_vec_extractv2dfdf                   (rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlal_lowv2sf               (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlsl_lowv2sf               (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlalq_lowv4sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlslq_lowv4sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlal_highv2sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlsl_highv2sf              (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlalq_highv4sf             (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlslq_highv4sf             (rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlal_lane_lowv2sf          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlsl_lane_lowv2sf          (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlal_lane_highv2sf         (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlsl_lane_highv2sf         (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlalq_laneq_lowv4sf        (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlslq_laneq_lowv4sf        (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlalq_laneq_highv4sf       (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlslq_laneq_highv4sf       (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlal_laneq_lowv2sf         (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlsl_laneq_lowv2sf         (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlal_laneq_highv2sf        (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlsl_laneq_highv2sf        (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlalq_lane_lowv4sf         (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlslq_lane_lowv4sf         (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlalq_lane_highv4sf        (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_aarch64_fmlslq_lane_highv4sf        (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_compare_and_swapqi           (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_compare_and_swaphi           (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_compare_and_swapsi           (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_compare_and_swapdi           (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_exchangeqi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_exchangehi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_exchangesi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_exchangedi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_addqi                        (rtx, rtx, rtx);
+extern rtx        gen_atomic_subqi                        (rtx, rtx, rtx);
+extern rtx        gen_atomic_orqi                         (rtx, rtx, rtx);
+extern rtx        gen_atomic_xorqi                        (rtx, rtx, rtx);
+extern rtx        gen_atomic_andqi                        (rtx, rtx, rtx);
+extern rtx        gen_atomic_addhi                        (rtx, rtx, rtx);
+extern rtx        gen_atomic_subhi                        (rtx, rtx, rtx);
+extern rtx        gen_atomic_orhi                         (rtx, rtx, rtx);
+extern rtx        gen_atomic_xorhi                        (rtx, rtx, rtx);
+extern rtx        gen_atomic_andhi                        (rtx, rtx, rtx);
+extern rtx        gen_atomic_addsi                        (rtx, rtx, rtx);
+extern rtx        gen_atomic_subsi                        (rtx, rtx, rtx);
+extern rtx        gen_atomic_orsi                         (rtx, rtx, rtx);
+extern rtx        gen_atomic_xorsi                        (rtx, rtx, rtx);
+extern rtx        gen_atomic_andsi                        (rtx, rtx, rtx);
+extern rtx        gen_atomic_adddi                        (rtx, rtx, rtx);
+extern rtx        gen_atomic_subdi                        (rtx, rtx, rtx);
+extern rtx        gen_atomic_ordi                         (rtx, rtx, rtx);
+extern rtx        gen_atomic_xordi                        (rtx, rtx, rtx);
+extern rtx        gen_atomic_anddi                        (rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_addqi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_subqi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_orqi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_xorqi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_andqi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_addhi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_subhi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_orhi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_xorhi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_andhi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_addsi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_subsi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_orsi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_xorsi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_andsi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_adddi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_subdi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_ordi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_xordi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_fetch_anddi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_add_fetchqi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_sub_fetchqi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_or_fetchqi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_xor_fetchqi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_and_fetchqi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_add_fetchhi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_sub_fetchhi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_or_fetchhi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_xor_fetchhi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_and_fetchhi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_add_fetchsi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_sub_fetchsi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_or_fetchsi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_xor_fetchsi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_and_fetchsi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_add_fetchdi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_sub_fetchdi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_or_fetchdi                   (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_xor_fetchdi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_atomic_and_fetchdi                  (rtx, rtx, rtx, rtx);
+extern rtx        gen_mem_thread_fence                    (rtx);
+extern rtx        gen_dmb                                 (rtx);
+extern rtx        gen_movvnx16qi                          (rtx, rtx);
+extern rtx        gen_movvnx8hi                           (rtx, rtx);
+extern rtx        gen_movvnx4si                           (rtx, rtx);
+extern rtx        gen_movvnx2di                           (rtx, rtx);
+extern rtx        gen_movvnx8hf                           (rtx, rtx);
+extern rtx        gen_movvnx4sf                           (rtx, rtx);
+extern rtx        gen_movvnx2df                           (rtx, rtx);
+extern rtx        gen_aarch64_sve_reload_be               (rtx, rtx, rtx);
+extern rtx        gen_movmisalignvnx16qi                  (rtx, rtx);
+extern rtx        gen_movmisalignvnx8hi                   (rtx, rtx);
+extern rtx        gen_movmisalignvnx4si                   (rtx, rtx);
+extern rtx        gen_movmisalignvnx2di                   (rtx, rtx);
+extern rtx        gen_movmisalignvnx8hf                   (rtx, rtx);
+extern rtx        gen_movmisalignvnx4sf                   (rtx, rtx);
+extern rtx        gen_movmisalignvnx2df                   (rtx, rtx);
+extern rtx        gen_gather_loadvnx4si                   (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_gather_loadvnx2di                   (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_gather_loadvnx4sf                   (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_gather_loadvnx2df                   (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_scatter_storevnx4si                 (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_scatter_storevnx2di                 (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_scatter_storevnx4sf                 (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_scatter_storevnx2df                 (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_movvnx32qi                          (rtx, rtx);
+extern rtx        gen_movvnx16hi                          (rtx, rtx);
+extern rtx        gen_movvnx8si                           (rtx, rtx);
+extern rtx        gen_movvnx4di                           (rtx, rtx);
+extern rtx        gen_movvnx16hf                          (rtx, rtx);
+extern rtx        gen_movvnx8sf                           (rtx, rtx);
+extern rtx        gen_movvnx4df                           (rtx, rtx);
+extern rtx        gen_movvnx48qi                          (rtx, rtx);
+extern rtx        gen_movvnx24hi                          (rtx, rtx);
+extern rtx        gen_movvnx12si                          (rtx, rtx);
+extern rtx        gen_movvnx6di                           (rtx, rtx);
+extern rtx        gen_movvnx24hf                          (rtx, rtx);
+extern rtx        gen_movvnx12sf                          (rtx, rtx);
+extern rtx        gen_movvnx6df                           (rtx, rtx);
+extern rtx        gen_movvnx64qi                          (rtx, rtx);
+extern rtx        gen_movvnx32hi                          (rtx, rtx);
+extern rtx        gen_movvnx16si                          (rtx, rtx);
+extern rtx        gen_movvnx8di                           (rtx, rtx);
+extern rtx        gen_movvnx32hf                          (rtx, rtx);
+extern rtx        gen_movvnx16sf                          (rtx, rtx);
+extern rtx        gen_movvnx8df                           (rtx, rtx);
+extern rtx        gen_movvnx16bi                          (rtx, rtx);
+extern rtx        gen_movvnx8bi                           (rtx, rtx);
+extern rtx        gen_movvnx4bi                           (rtx, rtx);
+extern rtx        gen_movvnx2bi                           (rtx, rtx);
+extern rtx        gen_vec_extractvnx16biqi                (rtx, rtx, rtx);
+extern rtx        gen_vec_extractvnx8bihi                 (rtx, rtx, rtx);
+extern rtx        gen_vec_extractvnx4bisi                 (rtx, rtx, rtx);
+extern rtx        gen_vec_extractvnx2bidi                 (rtx, rtx, rtx);
+extern rtx        gen_vec_extractvnx16qiqi                (rtx, rtx, rtx);
+extern rtx        gen_vec_extractvnx8hihi                 (rtx, rtx, rtx);
+extern rtx        gen_vec_extractvnx4sisi                 (rtx, rtx, rtx);
+extern rtx        gen_vec_extractvnx2didi                 (rtx, rtx, rtx);
+extern rtx        gen_vec_extractvnx8hfhf                 (rtx, rtx, rtx);
+extern rtx        gen_vec_extractvnx4sfsf                 (rtx, rtx, rtx);
+extern rtx        gen_vec_extractvnx2dfdf                 (rtx, rtx, rtx);
+extern rtx        gen_vec_duplicatevnx16qi                (rtx, rtx);
+extern rtx        gen_vec_duplicatevnx8hi                 (rtx, rtx);
+extern rtx        gen_vec_duplicatevnx4si                 (rtx, rtx);
+extern rtx        gen_vec_duplicatevnx2di                 (rtx, rtx);
+extern rtx        gen_vec_duplicatevnx8hf                 (rtx, rtx);
+extern rtx        gen_vec_duplicatevnx4sf                 (rtx, rtx);
+extern rtx        gen_vec_duplicatevnx2df                 (rtx, rtx);
+extern rtx        gen_vec_duplicatevnx16bi                (rtx, rtx);
+extern rtx        gen_vec_duplicatevnx8bi                 (rtx, rtx);
+extern rtx        gen_vec_duplicatevnx4bi                 (rtx, rtx);
+extern rtx        gen_vec_duplicatevnx2bi                 (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx32qivnx16qi        (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx16hivnx8hi         (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx8sivnx4si          (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx4divnx2di          (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx16hfvnx8hf         (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx8sfvnx4sf          (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx4dfvnx2df          (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx48qivnx16qi        (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx24hivnx8hi         (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx12sivnx4si         (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx6divnx2di          (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx24hfvnx8hf         (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx12sfvnx4sf         (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx6dfvnx2df          (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx64qivnx16qi        (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx32hivnx8hi         (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx16sivnx4si         (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx8divnx2di          (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx32hfvnx8hf         (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx16sfvnx4sf         (rtx, rtx);
+extern rtx        gen_vec_load_lanesvnx8dfvnx2df          (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx32qivnx16qi       (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx16hivnx8hi        (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx8sivnx4si         (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx4divnx2di         (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx16hfvnx8hf        (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx8sfvnx4sf         (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx4dfvnx2df         (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx48qivnx16qi       (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx24hivnx8hi        (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx12sivnx4si        (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx6divnx2di         (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx24hfvnx8hf        (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx12sfvnx4sf        (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx6dfvnx2df         (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx64qivnx16qi       (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx32hivnx8hi        (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx16sivnx4si        (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx8divnx2di         (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx32hfvnx8hf        (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx16sfvnx4sf        (rtx, rtx);
+extern rtx        gen_vec_store_lanesvnx8dfvnx2df         (rtx, rtx);
+extern rtx        gen_vec_permvnx16qi                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_permvnx8hi                      (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_permvnx4si                      (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_permvnx2di                      (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_permvnx8hf                      (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_permvnx4sf                      (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_permvnx2df                      (rtx, rtx, rtx, rtx);
+extern rtx        gen_mulvnx16qi3                         (rtx, rtx, rtx);
+extern rtx        gen_mulvnx8hi3                          (rtx, rtx, rtx);
+extern rtx        gen_mulvnx4si3                          (rtx, rtx, rtx);
+extern rtx        gen_mulvnx2di3                          (rtx, rtx, rtx);
+extern rtx        gen_smulvnx16qi3_highpart               (rtx, rtx, rtx);
+extern rtx        gen_umulvnx16qi3_highpart               (rtx, rtx, rtx);
+extern rtx        gen_smulvnx8hi3_highpart                (rtx, rtx, rtx);
+extern rtx        gen_umulvnx8hi3_highpart                (rtx, rtx, rtx);
+extern rtx        gen_smulvnx4si3_highpart                (rtx, rtx, rtx);
+extern rtx        gen_umulvnx4si3_highpart                (rtx, rtx, rtx);
+extern rtx        gen_smulvnx2di3_highpart                (rtx, rtx, rtx);
+extern rtx        gen_umulvnx2di3_highpart                (rtx, rtx, rtx);
+extern rtx        gen_divvnx4si3                          (rtx, rtx, rtx);
+extern rtx        gen_udivvnx4si3                         (rtx, rtx, rtx);
+extern rtx        gen_divvnx2di3                          (rtx, rtx, rtx);
+extern rtx        gen_udivvnx2di3                         (rtx, rtx, rtx);
+extern rtx        gen_absvnx16qi2                         (rtx, rtx);
+extern rtx        gen_negvnx16qi2                         (rtx, rtx);
+extern rtx        gen_one_cmplvnx16qi2                    (rtx, rtx);
+extern rtx        gen_popcountvnx16qi2                    (rtx, rtx);
+extern rtx        gen_absvnx8hi2                          (rtx, rtx);
+extern rtx        gen_negvnx8hi2                          (rtx, rtx);
+extern rtx        gen_one_cmplvnx8hi2                     (rtx, rtx);
+extern rtx        gen_popcountvnx8hi2                     (rtx, rtx);
+extern rtx        gen_absvnx4si2                          (rtx, rtx);
+extern rtx        gen_negvnx4si2                          (rtx, rtx);
+extern rtx        gen_one_cmplvnx4si2                     (rtx, rtx);
+extern rtx        gen_popcountvnx4si2                     (rtx, rtx);
+extern rtx        gen_absvnx2di2                          (rtx, rtx);
+extern rtx        gen_negvnx2di2                          (rtx, rtx);
+extern rtx        gen_one_cmplvnx2di2                     (rtx, rtx);
+extern rtx        gen_popcountvnx2di2                     (rtx, rtx);
+extern rtx        gen_iorvnx16bi3                         (rtx, rtx, rtx);
+extern rtx        gen_xorvnx16bi3                         (rtx, rtx, rtx);
+extern rtx        gen_iorvnx8bi3                          (rtx, rtx, rtx);
+extern rtx        gen_xorvnx8bi3                          (rtx, rtx, rtx);
+extern rtx        gen_iorvnx4bi3                          (rtx, rtx, rtx);
+extern rtx        gen_xorvnx4bi3                          (rtx, rtx, rtx);
+extern rtx        gen_iorvnx2bi3                          (rtx, rtx, rtx);
+extern rtx        gen_xorvnx2bi3                          (rtx, rtx, rtx);
+extern rtx        gen_one_cmplvnx16bi2                    (rtx, rtx);
+extern rtx        gen_one_cmplvnx8bi2                     (rtx, rtx);
+extern rtx        gen_one_cmplvnx4bi2                     (rtx, rtx);
+extern rtx        gen_one_cmplvnx2bi2                     (rtx, rtx);
+extern rtx        gen_vashlvnx16qi3                       (rtx, rtx, rtx);
+extern rtx        gen_vashrvnx16qi3                       (rtx, rtx, rtx);
+extern rtx        gen_vlshrvnx16qi3                       (rtx, rtx, rtx);
+extern rtx        gen_vashlvnx8hi3                        (rtx, rtx, rtx);
+extern rtx        gen_vashrvnx8hi3                        (rtx, rtx, rtx);
+extern rtx        gen_vlshrvnx8hi3                        (rtx, rtx, rtx);
+extern rtx        gen_vashlvnx4si3                        (rtx, rtx, rtx);
+extern rtx        gen_vashrvnx4si3                        (rtx, rtx, rtx);
+extern rtx        gen_vlshrvnx4si3                        (rtx, rtx, rtx);
+extern rtx        gen_vashlvnx2di3                        (rtx, rtx, rtx);
+extern rtx        gen_vashrvnx2di3                        (rtx, rtx, rtx);
+extern rtx        gen_vlshrvnx2di3                        (rtx, rtx, rtx);
+extern rtx        gen_ashlvnx16qi3                        (rtx, rtx, rtx);
+extern rtx        gen_ashrvnx16qi3                        (rtx, rtx, rtx);
+extern rtx        gen_lshrvnx16qi3                        (rtx, rtx, rtx);
+extern rtx        gen_ashlvnx8hi3                         (rtx, rtx, rtx);
+extern rtx        gen_ashrvnx8hi3                         (rtx, rtx, rtx);
+extern rtx        gen_lshrvnx8hi3                         (rtx, rtx, rtx);
+extern rtx        gen_ashlvnx4si3                         (rtx, rtx, rtx);
+extern rtx        gen_ashrvnx4si3                         (rtx, rtx, rtx);
+extern rtx        gen_lshrvnx4si3                         (rtx, rtx, rtx);
+extern rtx        gen_ashlvnx2di3                         (rtx, rtx, rtx);
+extern rtx        gen_ashrvnx2di3                         (rtx, rtx, rtx);
+extern rtx        gen_lshrvnx2di3                         (rtx, rtx, rtx);
+extern rtx        gen_vcondvnx16qivnx16qi                 (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondvnx8hivnx8hi                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondvnx4sivnx4si                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondvnx2divnx2di                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondvnx8hfvnx8hi                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondvnx4sfvnx4si                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondvnx2dfvnx2di                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconduvnx16qivnx16qi                (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconduvnx8hivnx8hi                  (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconduvnx4sivnx4si                  (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconduvnx2divnx2di                  (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconduvnx8hfvnx8hi                  (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconduvnx4sfvnx4si                  (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vconduvnx2dfvnx2di                  (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondvnx4sivnx4sf                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondvnx2divnx2df                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondvnx4sfvnx4sf                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vcondvnx2dfvnx2df                   (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpvnx16qivnx16bi               (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpvnx8hivnx8bi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpvnx4sivnx4bi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpvnx2divnx2bi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpuvnx16qivnx16bi              (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpuvnx8hivnx8bi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpuvnx4sivnx4bi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpuvnx2divnx2bi                (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpvnx8hfvnx8bi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpvnx4sfvnx4bi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_vec_cmpvnx2dfvnx2bi                 (rtx, rtx, rtx, rtx);
+extern rtx        gen_cbranchvnx16bi4                     (rtx, rtx, rtx, rtx);
+extern rtx        gen_cbranchvnx8bi4                      (rtx, rtx, rtx, rtx);
+extern rtx        gen_cbranchvnx4bi4                      (rtx, rtx, rtx, rtx);
+extern rtx        gen_cbranchvnx2bi4                      (rtx, rtx, rtx, rtx);
+extern rtx        gen_smaxvnx16qi3                        (rtx, rtx, rtx);
+extern rtx        gen_sminvnx16qi3                        (rtx, rtx, rtx);
+extern rtx        gen_umaxvnx16qi3                        (rtx, rtx, rtx);
+extern rtx        gen_uminvnx16qi3                        (rtx, rtx, rtx);
+extern rtx        gen_smaxvnx8hi3                         (rtx, rtx, rtx);
+extern rtx        gen_sminvnx8hi3                         (rtx, rtx, rtx);
+extern rtx        gen_umaxvnx8hi3                         (rtx, rtx, rtx);
+extern rtx        gen_uminvnx8hi3                         (rtx, rtx, rtx);
+extern rtx        gen_smaxvnx4si3                         (rtx, rtx, rtx);
+extern rtx        gen_sminvnx4si3                         (rtx, rtx, rtx);
+extern rtx        gen_umaxvnx4si3                         (rtx, rtx, rtx);
+extern rtx        gen_uminvnx4si3                         (rtx, rtx, rtx);
+extern rtx        gen_smaxvnx2di3                         (rtx, rtx, rtx);
+extern rtx        gen_sminvnx2di3                         (rtx, rtx, rtx);
+extern rtx        gen_umaxvnx2di3                         (rtx, rtx, rtx);
+extern rtx        gen_uminvnx2di3                         (rtx, rtx, rtx);
+extern rtx        gen_smaxvnx8hf3                         (rtx, rtx, rtx);
+extern rtx        gen_sminvnx8hf3                         (rtx, rtx, rtx);
+extern rtx        gen_smaxvnx4sf3                         (rtx, rtx, rtx);
+extern rtx        gen_sminvnx4sf3                         (rtx, rtx, rtx);
+extern rtx        gen_smaxvnx2df3                         (rtx, rtx, rtx);
+extern rtx        gen_sminvnx2df3                         (rtx, rtx, rtx);
+extern rtx        gen_smax_nanvnx8hf3                     (rtx, rtx, rtx);
+extern rtx        gen_smin_nanvnx8hf3                     (rtx, rtx, rtx);
+extern rtx        gen_fmaxvnx8hf3                         (rtx, rtx, rtx);
+extern rtx        gen_fminvnx8hf3                         (rtx, rtx, rtx);
+extern rtx        gen_smax_nanvnx4sf3                     (rtx, rtx, rtx);
+extern rtx        gen_smin_nanvnx4sf3                     (rtx, rtx, rtx);
+extern rtx        gen_fmaxvnx4sf3                         (rtx, rtx, rtx);
+extern rtx        gen_fminvnx4sf3                         (rtx, rtx, rtx);
+extern rtx        gen_smax_nanvnx2df3                     (rtx, rtx, rtx);
+extern rtx        gen_smin_nanvnx2df3                     (rtx, rtx, rtx);
+extern rtx        gen_fmaxvnx2df3                         (rtx, rtx, rtx);
+extern rtx        gen_fminvnx2df3                         (rtx, rtx, rtx);
+extern rtx        gen_cond_addvnx16qi                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_subvnx16qi                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_mulvnx16qi                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_smaxvnx16qi                    (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_umaxvnx16qi                    (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_sminvnx16qi                    (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_uminvnx16qi                    (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_andvnx16qi                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_iorvnx16qi                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_xorvnx16qi                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_addvnx8hi                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_subvnx8hi                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_mulvnx8hi                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_smaxvnx8hi                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_umaxvnx8hi                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_sminvnx8hi                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_uminvnx8hi                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_andvnx8hi                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_iorvnx8hi                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_xorvnx8hi                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_addvnx4si                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_subvnx4si                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_mulvnx4si                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_smaxvnx4si                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_umaxvnx4si                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_sminvnx4si                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_uminvnx4si                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_andvnx4si                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_iorvnx4si                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_xorvnx4si                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_addvnx2di                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_subvnx2di                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_mulvnx2di                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_smaxvnx2di                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_umaxvnx2di                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_sminvnx2di                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_uminvnx2di                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_andvnx2di                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_iorvnx2di                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_xorvnx2di                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_divvnx4si                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_udivvnx4si                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_divvnx2di                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_udivvnx2di                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_reduc_plus_scal_vnx16qi             (rtx, rtx);
+extern rtx        gen_reduc_plus_scal_vnx8hi              (rtx, rtx);
+extern rtx        gen_reduc_plus_scal_vnx4si              (rtx, rtx);
+extern rtx        gen_reduc_plus_scal_vnx2di              (rtx, rtx);
+extern rtx        gen_reduc_plus_scal_vnx8hf              (rtx, rtx);
+extern rtx        gen_reduc_plus_scal_vnx4sf              (rtx, rtx);
+extern rtx        gen_reduc_plus_scal_vnx2df              (rtx, rtx);
+extern rtx        gen_reduc_umax_scal_vnx16qi             (rtx, rtx);
+extern rtx        gen_reduc_umin_scal_vnx16qi             (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_vnx16qi             (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_vnx16qi             (rtx, rtx);
+extern rtx        gen_reduc_umax_scal_vnx8hi              (rtx, rtx);
+extern rtx        gen_reduc_umin_scal_vnx8hi              (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_vnx8hi              (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_vnx8hi              (rtx, rtx);
+extern rtx        gen_reduc_umax_scal_vnx4si              (rtx, rtx);
+extern rtx        gen_reduc_umin_scal_vnx4si              (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_vnx4si              (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_vnx4si              (rtx, rtx);
+extern rtx        gen_reduc_umax_scal_vnx2di              (rtx, rtx);
+extern rtx        gen_reduc_umin_scal_vnx2di              (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_vnx2di              (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_vnx2di              (rtx, rtx);
+extern rtx        gen_reduc_smax_nan_scal_vnx8hf          (rtx, rtx);
+extern rtx        gen_reduc_smin_nan_scal_vnx8hf          (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_vnx8hf              (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_vnx8hf              (rtx, rtx);
+extern rtx        gen_reduc_smax_nan_scal_vnx4sf          (rtx, rtx);
+extern rtx        gen_reduc_smin_nan_scal_vnx4sf          (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_vnx4sf              (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_vnx4sf              (rtx, rtx);
+extern rtx        gen_reduc_smax_nan_scal_vnx2df          (rtx, rtx);
+extern rtx        gen_reduc_smin_nan_scal_vnx2df          (rtx, rtx);
+extern rtx        gen_reduc_smax_scal_vnx2df              (rtx, rtx);
+extern rtx        gen_reduc_smin_scal_vnx2df              (rtx, rtx);
+extern rtx        gen_reduc_and_scal_vnx16qi              (rtx, rtx);
+extern rtx        gen_reduc_ior_scal_vnx16qi              (rtx, rtx);
+extern rtx        gen_reduc_xor_scal_vnx16qi              (rtx, rtx);
+extern rtx        gen_reduc_and_scal_vnx8hi               (rtx, rtx);
+extern rtx        gen_reduc_ior_scal_vnx8hi               (rtx, rtx);
+extern rtx        gen_reduc_xor_scal_vnx8hi               (rtx, rtx);
+extern rtx        gen_reduc_and_scal_vnx4si               (rtx, rtx);
+extern rtx        gen_reduc_ior_scal_vnx4si               (rtx, rtx);
+extern rtx        gen_reduc_xor_scal_vnx4si               (rtx, rtx);
+extern rtx        gen_reduc_and_scal_vnx2di               (rtx, rtx);
+extern rtx        gen_reduc_ior_scal_vnx2di               (rtx, rtx);
+extern rtx        gen_reduc_xor_scal_vnx2di               (rtx, rtx);
+extern rtx        gen_fold_left_plus_vnx8hf               (rtx, rtx, rtx);
+extern rtx        gen_fold_left_plus_vnx4sf               (rtx, rtx, rtx);
+extern rtx        gen_fold_left_plus_vnx2df               (rtx, rtx, rtx);
+extern rtx        gen_addvnx8hf3                          (rtx, rtx, rtx);
+extern rtx        gen_addvnx4sf3                          (rtx, rtx, rtx);
+extern rtx        gen_addvnx2df3                          (rtx, rtx, rtx);
+extern rtx        gen_subvnx8hf3                          (rtx, rtx, rtx);
+extern rtx        gen_subvnx4sf3                          (rtx, rtx, rtx);
+extern rtx        gen_subvnx2df3                          (rtx, rtx, rtx);
+extern rtx        gen_mulvnx8hf3                          (rtx, rtx, rtx);
+extern rtx        gen_mulvnx4sf3                          (rtx, rtx, rtx);
+extern rtx        gen_mulvnx2df3                          (rtx, rtx, rtx);
+extern rtx        gen_fmavnx8hf4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_fmavnx4sf4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_fmavnx2df4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_fnmavnx8hf4                         (rtx, rtx, rtx, rtx);
+extern rtx        gen_fnmavnx4sf4                         (rtx, rtx, rtx, rtx);
+extern rtx        gen_fnmavnx2df4                         (rtx, rtx, rtx, rtx);
+extern rtx        gen_fmsvnx8hf4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_fmsvnx4sf4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_fmsvnx2df4                          (rtx, rtx, rtx, rtx);
+extern rtx        gen_fnmsvnx8hf4                         (rtx, rtx, rtx, rtx);
+extern rtx        gen_fnmsvnx4sf4                         (rtx, rtx, rtx, rtx);
+extern rtx        gen_fnmsvnx2df4                         (rtx, rtx, rtx, rtx);
+extern rtx        gen_divvnx8hf3                          (rtx, rtx, rtx);
+extern rtx        gen_divvnx4sf3                          (rtx, rtx, rtx);
+extern rtx        gen_divvnx2df3                          (rtx, rtx, rtx);
+extern rtx        gen_absvnx8hf2                          (rtx, rtx);
+extern rtx        gen_negvnx8hf2                          (rtx, rtx);
+extern rtx        gen_sqrtvnx8hf2                         (rtx, rtx);
+extern rtx        gen_absvnx4sf2                          (rtx, rtx);
+extern rtx        gen_negvnx4sf2                          (rtx, rtx);
+extern rtx        gen_sqrtvnx4sf2                         (rtx, rtx);
+extern rtx        gen_absvnx2df2                          (rtx, rtx);
+extern rtx        gen_negvnx2df2                          (rtx, rtx);
+extern rtx        gen_sqrtvnx2df2                         (rtx, rtx);
+extern rtx        gen_btruncvnx8hf2                       (rtx, rtx);
+extern rtx        gen_ceilvnx8hf2                         (rtx, rtx);
+extern rtx        gen_floorvnx8hf2                        (rtx, rtx);
+extern rtx        gen_frintnvnx8hf2                       (rtx, rtx);
+extern rtx        gen_nearbyintvnx8hf2                    (rtx, rtx);
+extern rtx        gen_rintvnx8hf2                         (rtx, rtx);
+extern rtx        gen_roundvnx8hf2                        (rtx, rtx);
+extern rtx        gen_btruncvnx4sf2                       (rtx, rtx);
+extern rtx        gen_ceilvnx4sf2                         (rtx, rtx);
+extern rtx        gen_floorvnx4sf2                        (rtx, rtx);
+extern rtx        gen_frintnvnx4sf2                       (rtx, rtx);
+extern rtx        gen_nearbyintvnx4sf2                    (rtx, rtx);
+extern rtx        gen_rintvnx4sf2                         (rtx, rtx);
+extern rtx        gen_roundvnx4sf2                        (rtx, rtx);
+extern rtx        gen_btruncvnx2df2                       (rtx, rtx);
+extern rtx        gen_ceilvnx2df2                         (rtx, rtx);
+extern rtx        gen_floorvnx2df2                        (rtx, rtx);
+extern rtx        gen_frintnvnx2df2                       (rtx, rtx);
+extern rtx        gen_nearbyintvnx2df2                    (rtx, rtx);
+extern rtx        gen_rintvnx2df2                         (rtx, rtx);
+extern rtx        gen_roundvnx2df2                        (rtx, rtx);
+extern rtx        gen_fix_truncvnx8hfvnx8hi2              (rtx, rtx);
+extern rtx        gen_fixuns_truncvnx8hfvnx8hi2           (rtx, rtx);
+extern rtx        gen_fix_truncvnx4sfvnx4si2              (rtx, rtx);
+extern rtx        gen_fixuns_truncvnx4sfvnx4si2           (rtx, rtx);
+extern rtx        gen_fix_truncvnx2dfvnx2di2              (rtx, rtx);
+extern rtx        gen_fixuns_truncvnx2dfvnx2di2           (rtx, rtx);
+extern rtx        gen_floatvnx8hivnx8hf2                  (rtx, rtx);
+extern rtx        gen_floatunsvnx8hivnx8hf2               (rtx, rtx);
+extern rtx        gen_floatvnx4sivnx4sf2                  (rtx, rtx);
+extern rtx        gen_floatunsvnx4sivnx4sf2               (rtx, rtx);
+extern rtx        gen_floatvnx2divnx2df2                  (rtx, rtx);
+extern rtx        gen_floatunsvnx2divnx2df2               (rtx, rtx);
+extern rtx        gen_vec_unpacks_hi_vnx16bi              (rtx, rtx);
+extern rtx        gen_vec_unpacku_hi_vnx16bi              (rtx, rtx);
+extern rtx        gen_vec_unpacks_lo_vnx16bi              (rtx, rtx);
+extern rtx        gen_vec_unpacku_lo_vnx16bi              (rtx, rtx);
+extern rtx        gen_vec_unpacks_hi_vnx8bi               (rtx, rtx);
+extern rtx        gen_vec_unpacku_hi_vnx8bi               (rtx, rtx);
+extern rtx        gen_vec_unpacks_lo_vnx8bi               (rtx, rtx);
+extern rtx        gen_vec_unpacku_lo_vnx8bi               (rtx, rtx);
+extern rtx        gen_vec_unpacks_hi_vnx4bi               (rtx, rtx);
+extern rtx        gen_vec_unpacku_hi_vnx4bi               (rtx, rtx);
+extern rtx        gen_vec_unpacks_lo_vnx4bi               (rtx, rtx);
+extern rtx        gen_vec_unpacku_lo_vnx4bi               (rtx, rtx);
+extern rtx        gen_vec_unpacks_hi_vnx16qi              (rtx, rtx);
+extern rtx        gen_vec_unpacku_hi_vnx16qi              (rtx, rtx);
+extern rtx        gen_vec_unpacks_lo_vnx16qi              (rtx, rtx);
+extern rtx        gen_vec_unpacku_lo_vnx16qi              (rtx, rtx);
+extern rtx        gen_vec_unpacks_hi_vnx8hi               (rtx, rtx);
+extern rtx        gen_vec_unpacku_hi_vnx8hi               (rtx, rtx);
+extern rtx        gen_vec_unpacks_lo_vnx8hi               (rtx, rtx);
+extern rtx        gen_vec_unpacku_lo_vnx8hi               (rtx, rtx);
+extern rtx        gen_vec_unpacks_hi_vnx4si               (rtx, rtx);
+extern rtx        gen_vec_unpacku_hi_vnx4si               (rtx, rtx);
+extern rtx        gen_vec_unpacks_lo_vnx4si               (rtx, rtx);
+extern rtx        gen_vec_unpacku_lo_vnx4si               (rtx, rtx);
+extern rtx        gen_vec_unpacks_lo_vnx8hf               (rtx, rtx);
+extern rtx        gen_vec_unpacks_hi_vnx8hf               (rtx, rtx);
+extern rtx        gen_vec_unpacks_lo_vnx4sf               (rtx, rtx);
+extern rtx        gen_vec_unpacks_hi_vnx4sf               (rtx, rtx);
+extern rtx        gen_vec_unpacks_float_lo_vnx4si         (rtx, rtx);
+extern rtx        gen_vec_unpacks_float_hi_vnx4si         (rtx, rtx);
+extern rtx        gen_vec_unpacku_float_lo_vnx4si         (rtx, rtx);
+extern rtx        gen_vec_unpacku_float_hi_vnx4si         (rtx, rtx);
+extern rtx        gen_vec_pack_trunc_vnx4sf               (rtx, rtx, rtx);
+extern rtx        gen_vec_pack_trunc_vnx2df               (rtx, rtx, rtx);
+extern rtx        gen_vec_pack_sfix_trunc_vnx2df          (rtx, rtx, rtx);
+extern rtx        gen_vec_pack_ufix_trunc_vnx2df          (rtx, rtx, rtx);
+extern rtx        gen_cond_addvnx8hf                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_subvnx8hf                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_mulvnx8hf                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_divvnx8hf                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_smaxvnx8hf                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_sminvnx8hf                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_addvnx4sf                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_subvnx4sf                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_mulvnx4sf                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_divvnx4sf                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_smaxvnx4sf                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_sminvnx4sf                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_addvnx2df                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_subvnx2df                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_mulvnx2df                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_divvnx2df                      (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_smaxvnx2df                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_sminvnx2df                     (rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_fmavnx8hf                      (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_fnmavnx8hf                     (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_fnmsvnx8hf                     (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_fmsvnx8hf                      (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_fmavnx4sf                      (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_fnmavnx4sf                     (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_fnmsvnx4sf                     (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_fmsvnx4sf                      (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_fmavnx2df                      (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_fnmavnx2df                     (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_fnmsvnx2df                     (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_cond_fmsvnx2df                      (rtx, rtx, rtx, rtx, rtx, rtx);
+extern rtx        gen_copysignvnx8hf3                     (rtx, rtx, rtx);
+extern rtx        gen_copysignvnx4sf3                     (rtx, rtx, rtx);
+extern rtx        gen_copysignvnx2df3                     (rtx, rtx, rtx);
+extern rtx        gen_xorsignvnx8hf3                      (rtx, rtx, rtx);
+extern rtx        gen_xorsignvnx4sf3                      (rtx, rtx, rtx);
+extern rtx        gen_xorsignvnx2df3                      (rtx, rtx, rtx);
+
+#endif /* GCC_INSN_FLAGS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-modes-inline.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-modes-inline.h
new file mode 100644
index 0000000..5abdbb4
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-modes-inline.h
@@ -0,0 +1,561 @@
+/* Generated automatically from machmode.def and config/aarch64/aarch64-modes.def
+   by genmodes.  */
+
+#ifndef GCC_INSN_MODES_INLINE_H
+#define GCC_INSN_MODES_INLINE_H
+
+#if !defined (USED_FOR_TARGET) && GCC_VERSION >= 4001
+
+#ifdef __cplusplus
+inline __attribute__((__always_inline__))
+#else
+extern __inline__ __attribute__((__always_inline__, __gnu_inline__))
+#endif
+poly_uint16
+mode_size_inline (machine_mode mode)
+{
+  extern poly_uint16_pod mode_size[NUM_MACHINE_MODES];
+  gcc_assert (mode >= 0 && mode < NUM_MACHINE_MODES);
+  switch (mode)
+    {
+    case E_VOIDmode: return 0;
+    case E_BLKmode: return 0;
+    case E_CCmode: return 4;
+    case E_CCFPmode: return 4;
+    case E_CCFPEmode: return 4;
+    case E_CC_SWPmode: return 4;
+    case E_CC_NZmode: return 4;
+    case E_CC_Zmode: return 4;
+    case E_CC_Cmode: return 4;
+    case E_CC_ADCmode: return 4;
+    case E_CC_Vmode: return 4;
+    case E_BImode: return 1;
+    case E_QImode: return 1;
+    case E_HImode: return 2;
+    case E_SImode: return 4;
+    case E_DImode: return 8;
+    case E_TImode: return 16;
+    case E_OImode: return 32;
+    case E_CImode: return 48;
+    case E_XImode: return 64;
+    case E_QQmode: return 1;
+    case E_HQmode: return 2;
+    case E_SQmode: return 4;
+    case E_DQmode: return 8;
+    case E_TQmode: return 16;
+    case E_UQQmode: return 1;
+    case E_UHQmode: return 2;
+    case E_USQmode: return 4;
+    case E_UDQmode: return 8;
+    case E_UTQmode: return 16;
+    case E_HAmode: return 2;
+    case E_SAmode: return 4;
+    case E_DAmode: return 8;
+    case E_TAmode: return 16;
+    case E_UHAmode: return 2;
+    case E_USAmode: return 4;
+    case E_UDAmode: return 8;
+    case E_UTAmode: return 16;
+    case E_HFmode: return 2;
+    case E_SFmode: return 4;
+    case E_DFmode: return 8;
+    case E_TFmode: return 16;
+    case E_SDmode: return 4;
+    case E_DDmode: return 8;
+    case E_TDmode: return 16;
+    case E_CQImode: return 2;
+    case E_CHImode: return 4;
+    case E_CSImode: return 8;
+    case E_CDImode: return 16;
+    case E_CTImode: return 32;
+    case E_COImode: return 64;
+    case E_CCImode: return 96;
+    case E_CXImode: return 128;
+    case E_HCmode: return 4;
+    case E_SCmode: return 8;
+    case E_DCmode: return 16;
+    case E_TCmode: return 32;
+    case E_V8QImode: return 8;
+    case E_V4HImode: return 8;
+    case E_V2SImode: return 8;
+    case E_V16QImode: return 16;
+    case E_V8HImode: return 16;
+    case E_V4SImode: return 16;
+    case E_V2DImode: return 16;
+    case E_VNx2TImode: return 32;
+    case E_VNx3TImode: return 48;
+    case E_VNx4TImode: return 64;
+    case E_VNx2OImode: return 64;
+    case E_V2HFmode: return 4;
+    case E_V4HFmode: return 8;
+    case E_V2SFmode: return 8;
+    case E_V1DFmode: return 8;
+    case E_V8HFmode: return 16;
+    case E_V4SFmode: return 16;
+    case E_V2DFmode: return 16;
+    default: return mode_size[mode];
+    }
+}
+
+#ifdef __cplusplus
+inline __attribute__((__always_inline__))
+#else
+extern __inline__ __attribute__((__always_inline__, __gnu_inline__))
+#endif
+poly_uint16
+mode_nunits_inline (machine_mode mode)
+{
+  extern poly_uint16_pod mode_nunits[NUM_MACHINE_MODES];
+  switch (mode)
+    {
+    case E_VOIDmode: return 0;
+    case E_BLKmode: return 0;
+    case E_CCmode: return 1;
+    case E_CCFPmode: return 1;
+    case E_CCFPEmode: return 1;
+    case E_CC_SWPmode: return 1;
+    case E_CC_NZmode: return 1;
+    case E_CC_Zmode: return 1;
+    case E_CC_Cmode: return 1;
+    case E_CC_ADCmode: return 1;
+    case E_CC_Vmode: return 1;
+    case E_BImode: return 1;
+    case E_QImode: return 1;
+    case E_HImode: return 1;
+    case E_SImode: return 1;
+    case E_DImode: return 1;
+    case E_TImode: return 1;
+    case E_OImode: return 1;
+    case E_CImode: return 1;
+    case E_XImode: return 1;
+    case E_QQmode: return 1;
+    case E_HQmode: return 1;
+    case E_SQmode: return 1;
+    case E_DQmode: return 1;
+    case E_TQmode: return 1;
+    case E_UQQmode: return 1;
+    case E_UHQmode: return 1;
+    case E_USQmode: return 1;
+    case E_UDQmode: return 1;
+    case E_UTQmode: return 1;
+    case E_HAmode: return 1;
+    case E_SAmode: return 1;
+    case E_DAmode: return 1;
+    case E_TAmode: return 1;
+    case E_UHAmode: return 1;
+    case E_USAmode: return 1;
+    case E_UDAmode: return 1;
+    case E_UTAmode: return 1;
+    case E_HFmode: return 1;
+    case E_SFmode: return 1;
+    case E_DFmode: return 1;
+    case E_TFmode: return 1;
+    case E_SDmode: return 1;
+    case E_DDmode: return 1;
+    case E_TDmode: return 1;
+    case E_CQImode: return 2;
+    case E_CHImode: return 2;
+    case E_CSImode: return 2;
+    case E_CDImode: return 2;
+    case E_CTImode: return 2;
+    case E_COImode: return 2;
+    case E_CCImode: return 2;
+    case E_CXImode: return 2;
+    case E_HCmode: return 2;
+    case E_SCmode: return 2;
+    case E_DCmode: return 2;
+    case E_TCmode: return 2;
+    case E_V8QImode: return 8;
+    case E_V4HImode: return 4;
+    case E_V2SImode: return 2;
+    case E_V16QImode: return 16;
+    case E_V8HImode: return 8;
+    case E_V4SImode: return 4;
+    case E_V2DImode: return 2;
+    case E_VNx2TImode: return 2;
+    case E_VNx3TImode: return 3;
+    case E_VNx4TImode: return 4;
+    case E_VNx2OImode: return 2;
+    case E_V2HFmode: return 2;
+    case E_V4HFmode: return 4;
+    case E_V2SFmode: return 2;
+    case E_V1DFmode: return 1;
+    case E_V8HFmode: return 8;
+    case E_V4SFmode: return 4;
+    case E_V2DFmode: return 2;
+    default: return mode_nunits[mode];
+    }
+}
+
+#ifdef __cplusplus
+inline __attribute__((__always_inline__))
+#else
+extern __inline__ __attribute__((__always_inline__, __gnu_inline__))
+#endif
+unsigned char
+mode_inner_inline (machine_mode mode)
+{
+  extern const unsigned char mode_inner[NUM_MACHINE_MODES];
+  gcc_assert (mode >= 0 && mode < NUM_MACHINE_MODES);
+  switch (mode)
+    {
+    case E_VOIDmode: return E_VOIDmode;
+    case E_BLKmode: return E_BLKmode;
+    case E_CCmode: return E_CCmode;
+    case E_CCFPmode: return E_CCFPmode;
+    case E_CCFPEmode: return E_CCFPEmode;
+    case E_CC_SWPmode: return E_CC_SWPmode;
+    case E_CC_NZmode: return E_CC_NZmode;
+    case E_CC_Zmode: return E_CC_Zmode;
+    case E_CC_Cmode: return E_CC_Cmode;
+    case E_CC_ADCmode: return E_CC_ADCmode;
+    case E_CC_Vmode: return E_CC_Vmode;
+    case E_BImode: return E_BImode;
+    case E_QImode: return E_QImode;
+    case E_HImode: return E_HImode;
+    case E_SImode: return E_SImode;
+    case E_DImode: return E_DImode;
+    case E_TImode: return E_TImode;
+    case E_OImode: return E_OImode;
+    case E_CImode: return E_CImode;
+    case E_XImode: return E_XImode;
+    case E_QQmode: return E_QQmode;
+    case E_HQmode: return E_HQmode;
+    case E_SQmode: return E_SQmode;
+    case E_DQmode: return E_DQmode;
+    case E_TQmode: return E_TQmode;
+    case E_UQQmode: return E_UQQmode;
+    case E_UHQmode: return E_UHQmode;
+    case E_USQmode: return E_USQmode;
+    case E_UDQmode: return E_UDQmode;
+    case E_UTQmode: return E_UTQmode;
+    case E_HAmode: return E_HAmode;
+    case E_SAmode: return E_SAmode;
+    case E_DAmode: return E_DAmode;
+    case E_TAmode: return E_TAmode;
+    case E_UHAmode: return E_UHAmode;
+    case E_USAmode: return E_USAmode;
+    case E_UDAmode: return E_UDAmode;
+    case E_UTAmode: return E_UTAmode;
+    case E_HFmode: return E_HFmode;
+    case E_SFmode: return E_SFmode;
+    case E_DFmode: return E_DFmode;
+    case E_TFmode: return E_TFmode;
+    case E_SDmode: return E_SDmode;
+    case E_DDmode: return E_DDmode;
+    case E_TDmode: return E_TDmode;
+    case E_CQImode: return E_QImode;
+    case E_CHImode: return E_HImode;
+    case E_CSImode: return E_SImode;
+    case E_CDImode: return E_DImode;
+    case E_CTImode: return E_TImode;
+    case E_COImode: return E_OImode;
+    case E_CCImode: return E_CImode;
+    case E_CXImode: return E_XImode;
+    case E_HCmode: return E_HFmode;
+    case E_SCmode: return E_SFmode;
+    case E_DCmode: return E_DFmode;
+    case E_TCmode: return E_TFmode;
+    case E_VNx16BImode: return E_BImode;
+    case E_VNx8BImode: return E_BImode;
+    case E_VNx4BImode: return E_BImode;
+    case E_VNx2BImode: return E_BImode;
+    case E_V8QImode: return E_QImode;
+    case E_V4HImode: return E_HImode;
+    case E_V2SImode: return E_SImode;
+    case E_V16QImode: return E_QImode;
+    case E_VNx16QImode: return E_QImode;
+    case E_V8HImode: return E_HImode;
+    case E_VNx8HImode: return E_HImode;
+    case E_V4SImode: return E_SImode;
+    case E_VNx4SImode: return E_SImode;
+    case E_V2DImode: return E_DImode;
+    case E_VNx2DImode: return E_DImode;
+    case E_VNx32QImode: return E_QImode;
+    case E_VNx16HImode: return E_HImode;
+    case E_VNx8SImode: return E_SImode;
+    case E_VNx4DImode: return E_DImode;
+    case E_VNx2TImode: return E_TImode;
+    case E_VNx48QImode: return E_QImode;
+    case E_VNx24HImode: return E_HImode;
+    case E_VNx12SImode: return E_SImode;
+    case E_VNx6DImode: return E_DImode;
+    case E_VNx3TImode: return E_TImode;
+    case E_VNx64QImode: return E_QImode;
+    case E_VNx32HImode: return E_HImode;
+    case E_VNx16SImode: return E_SImode;
+    case E_VNx8DImode: return E_DImode;
+    case E_VNx4TImode: return E_TImode;
+    case E_VNx2OImode: return E_OImode;
+    case E_V2HFmode: return E_HFmode;
+    case E_V4HFmode: return E_HFmode;
+    case E_V2SFmode: return E_SFmode;
+    case E_V1DFmode: return E_DFmode;
+    case E_V8HFmode: return E_HFmode;
+    case E_VNx8HFmode: return E_HFmode;
+    case E_V4SFmode: return E_SFmode;
+    case E_VNx4SFmode: return E_SFmode;
+    case E_V2DFmode: return E_DFmode;
+    case E_VNx2DFmode: return E_DFmode;
+    case E_VNx16HFmode: return E_HFmode;
+    case E_VNx8SFmode: return E_SFmode;
+    case E_VNx4DFmode: return E_DFmode;
+    case E_VNx24HFmode: return E_HFmode;
+    case E_VNx12SFmode: return E_SFmode;
+    case E_VNx6DFmode: return E_DFmode;
+    case E_VNx32HFmode: return E_HFmode;
+    case E_VNx16SFmode: return E_SFmode;
+    case E_VNx8DFmode: return E_DFmode;
+    default: return mode_inner[mode];
+    }
+}
+
+#ifdef __cplusplus
+inline __attribute__((__always_inline__))
+#else
+extern __inline__ __attribute__((__always_inline__, __gnu_inline__))
+#endif
+unsigned char
+mode_unit_size_inline (machine_mode mode)
+{
+  extern CONST_MODE_UNIT_SIZE unsigned char mode_unit_size[NUM_MACHINE_MODES];
+  gcc_assert (mode >= 0 && mode < NUM_MACHINE_MODES);
+  switch (mode)
+    {
+    case E_VOIDmode: return 0;
+    case E_BLKmode: return 0;
+    case E_CCmode: return 4;
+    case E_CCFPmode: return 4;
+    case E_CCFPEmode: return 4;
+    case E_CC_SWPmode: return 4;
+    case E_CC_NZmode: return 4;
+    case E_CC_Zmode: return 4;
+    case E_CC_Cmode: return 4;
+    case E_CC_ADCmode: return 4;
+    case E_CC_Vmode: return 4;
+    case E_BImode: return 1;
+    case E_QImode: return 1;
+    case E_HImode: return 2;
+    case E_SImode: return 4;
+    case E_DImode: return 8;
+    case E_TImode: return 16;
+    case E_OImode: return 32;
+    case E_CImode: return 48;
+    case E_XImode: return 64;
+    case E_QQmode: return 1;
+    case E_HQmode: return 2;
+    case E_SQmode: return 4;
+    case E_DQmode: return 8;
+    case E_TQmode: return 16;
+    case E_UQQmode: return 1;
+    case E_UHQmode: return 2;
+    case E_USQmode: return 4;
+    case E_UDQmode: return 8;
+    case E_UTQmode: return 16;
+    case E_HAmode: return 2;
+    case E_SAmode: return 4;
+    case E_DAmode: return 8;
+    case E_TAmode: return 16;
+    case E_UHAmode: return 2;
+    case E_USAmode: return 4;
+    case E_UDAmode: return 8;
+    case E_UTAmode: return 16;
+    case E_HFmode: return 2;
+    case E_SFmode: return 4;
+    case E_DFmode: return 8;
+    case E_TFmode: return 16;
+    case E_SDmode: return 4;
+    case E_DDmode: return 8;
+    case E_TDmode: return 16;
+    case E_CQImode: return 1;
+    case E_CHImode: return 2;
+    case E_CSImode: return 4;
+    case E_CDImode: return 8;
+    case E_CTImode: return 16;
+    case E_COImode: return 32;
+    case E_CCImode: return 48;
+    case E_CXImode: return 64;
+    case E_HCmode: return 2;
+    case E_SCmode: return 4;
+    case E_DCmode: return 8;
+    case E_TCmode: return 16;
+    case E_VNx16BImode: return 1;
+    case E_VNx8BImode: return 1;
+    case E_VNx4BImode: return 1;
+    case E_VNx2BImode: return 1;
+    case E_V8QImode: return 1;
+    case E_V4HImode: return 2;
+    case E_V2SImode: return 4;
+    case E_V16QImode: return 1;
+    case E_VNx16QImode: return 1;
+    case E_V8HImode: return 2;
+    case E_VNx8HImode: return 2;
+    case E_V4SImode: return 4;
+    case E_VNx4SImode: return 4;
+    case E_V2DImode: return 8;
+    case E_VNx2DImode: return 8;
+    case E_VNx32QImode: return 1;
+    case E_VNx16HImode: return 2;
+    case E_VNx8SImode: return 4;
+    case E_VNx4DImode: return 8;
+    case E_VNx2TImode: return 16;
+    case E_VNx48QImode: return 1;
+    case E_VNx24HImode: return 2;
+    case E_VNx12SImode: return 4;
+    case E_VNx6DImode: return 8;
+    case E_VNx3TImode: return 16;
+    case E_VNx64QImode: return 1;
+    case E_VNx32HImode: return 2;
+    case E_VNx16SImode: return 4;
+    case E_VNx8DImode: return 8;
+    case E_VNx4TImode: return 16;
+    case E_VNx2OImode: return 32;
+    case E_V2HFmode: return 2;
+    case E_V4HFmode: return 2;
+    case E_V2SFmode: return 4;
+    case E_V1DFmode: return 8;
+    case E_V8HFmode: return 2;
+    case E_VNx8HFmode: return 2;
+    case E_V4SFmode: return 4;
+    case E_VNx4SFmode: return 4;
+    case E_V2DFmode: return 8;
+    case E_VNx2DFmode: return 8;
+    case E_VNx16HFmode: return 2;
+    case E_VNx8SFmode: return 4;
+    case E_VNx4DFmode: return 8;
+    case E_VNx24HFmode: return 2;
+    case E_VNx12SFmode: return 4;
+    case E_VNx6DFmode: return 8;
+    case E_VNx32HFmode: return 2;
+    case E_VNx16SFmode: return 4;
+    case E_VNx8DFmode: return 8;
+    default: return mode_unit_size[mode];
+    }
+}
+
+#ifdef __cplusplus
+inline __attribute__((__always_inline__))
+#else
+extern __inline__ __attribute__((__always_inline__, __gnu_inline__))
+#endif
+unsigned short
+mode_unit_precision_inline (machine_mode mode)
+{
+  extern const unsigned short mode_unit_precision[NUM_MACHINE_MODES];
+  gcc_assert (mode >= 0 && mode < NUM_MACHINE_MODES);
+  switch (mode)
+    {
+    case E_VOIDmode: return 0;
+    case E_BLKmode: return 0;
+    case E_CCmode: return 4*BITS_PER_UNIT;
+    case E_CCFPmode: return 4*BITS_PER_UNIT;
+    case E_CCFPEmode: return 4*BITS_PER_UNIT;
+    case E_CC_SWPmode: return 4*BITS_PER_UNIT;
+    case E_CC_NZmode: return 4*BITS_PER_UNIT;
+    case E_CC_Zmode: return 4*BITS_PER_UNIT;
+    case E_CC_Cmode: return 4*BITS_PER_UNIT;
+    case E_CC_ADCmode: return 4*BITS_PER_UNIT;
+    case E_CC_Vmode: return 4*BITS_PER_UNIT;
+    case E_BImode: return 1;
+    case E_QImode: return 1*BITS_PER_UNIT;
+    case E_HImode: return 2*BITS_PER_UNIT;
+    case E_SImode: return 4*BITS_PER_UNIT;
+    case E_DImode: return 8*BITS_PER_UNIT;
+    case E_TImode: return 16*BITS_PER_UNIT;
+    case E_OImode: return 32*BITS_PER_UNIT;
+    case E_CImode: return 48*BITS_PER_UNIT;
+    case E_XImode: return 64*BITS_PER_UNIT;
+    case E_QQmode: return 1*BITS_PER_UNIT;
+    case E_HQmode: return 2*BITS_PER_UNIT;
+    case E_SQmode: return 4*BITS_PER_UNIT;
+    case E_DQmode: return 8*BITS_PER_UNIT;
+    case E_TQmode: return 16*BITS_PER_UNIT;
+    case E_UQQmode: return 1*BITS_PER_UNIT;
+    case E_UHQmode: return 2*BITS_PER_UNIT;
+    case E_USQmode: return 4*BITS_PER_UNIT;
+    case E_UDQmode: return 8*BITS_PER_UNIT;
+    case E_UTQmode: return 16*BITS_PER_UNIT;
+    case E_HAmode: return 2*BITS_PER_UNIT;
+    case E_SAmode: return 4*BITS_PER_UNIT;
+    case E_DAmode: return 8*BITS_PER_UNIT;
+    case E_TAmode: return 16*BITS_PER_UNIT;
+    case E_UHAmode: return 2*BITS_PER_UNIT;
+    case E_USAmode: return 4*BITS_PER_UNIT;
+    case E_UDAmode: return 8*BITS_PER_UNIT;
+    case E_UTAmode: return 16*BITS_PER_UNIT;
+    case E_HFmode: return 2*BITS_PER_UNIT;
+    case E_SFmode: return 4*BITS_PER_UNIT;
+    case E_DFmode: return 8*BITS_PER_UNIT;
+    case E_TFmode: return 16*BITS_PER_UNIT;
+    case E_SDmode: return 4*BITS_PER_UNIT;
+    case E_DDmode: return 8*BITS_PER_UNIT;
+    case E_TDmode: return 16*BITS_PER_UNIT;
+    case E_CQImode: return 1*BITS_PER_UNIT;
+    case E_CHImode: return 2*BITS_PER_UNIT;
+    case E_CSImode: return 4*BITS_PER_UNIT;
+    case E_CDImode: return 8*BITS_PER_UNIT;
+    case E_CTImode: return 16*BITS_PER_UNIT;
+    case E_COImode: return 32*BITS_PER_UNIT;
+    case E_CCImode: return 48*BITS_PER_UNIT;
+    case E_CXImode: return 64*BITS_PER_UNIT;
+    case E_HCmode: return 2*BITS_PER_UNIT;
+    case E_SCmode: return 4*BITS_PER_UNIT;
+    case E_DCmode: return 8*BITS_PER_UNIT;
+    case E_TCmode: return 16*BITS_PER_UNIT;
+    case E_VNx16BImode: return 1;
+    case E_VNx8BImode: return 1;
+    case E_VNx4BImode: return 1;
+    case E_VNx2BImode: return 1;
+    case E_V8QImode: return 1*BITS_PER_UNIT;
+    case E_V4HImode: return 2*BITS_PER_UNIT;
+    case E_V2SImode: return 4*BITS_PER_UNIT;
+    case E_V16QImode: return 1*BITS_PER_UNIT;
+    case E_VNx16QImode: return 1*BITS_PER_UNIT;
+    case E_V8HImode: return 2*BITS_PER_UNIT;
+    case E_VNx8HImode: return 2*BITS_PER_UNIT;
+    case E_V4SImode: return 4*BITS_PER_UNIT;
+    case E_VNx4SImode: return 4*BITS_PER_UNIT;
+    case E_V2DImode: return 8*BITS_PER_UNIT;
+    case E_VNx2DImode: return 8*BITS_PER_UNIT;
+    case E_VNx32QImode: return 1*BITS_PER_UNIT;
+    case E_VNx16HImode: return 2*BITS_PER_UNIT;
+    case E_VNx8SImode: return 4*BITS_PER_UNIT;
+    case E_VNx4DImode: return 8*BITS_PER_UNIT;
+    case E_VNx2TImode: return 16*BITS_PER_UNIT;
+    case E_VNx48QImode: return 1*BITS_PER_UNIT;
+    case E_VNx24HImode: return 2*BITS_PER_UNIT;
+    case E_VNx12SImode: return 4*BITS_PER_UNIT;
+    case E_VNx6DImode: return 8*BITS_PER_UNIT;
+    case E_VNx3TImode: return 16*BITS_PER_UNIT;
+    case E_VNx64QImode: return 1*BITS_PER_UNIT;
+    case E_VNx32HImode: return 2*BITS_PER_UNIT;
+    case E_VNx16SImode: return 4*BITS_PER_UNIT;
+    case E_VNx8DImode: return 8*BITS_PER_UNIT;
+    case E_VNx4TImode: return 16*BITS_PER_UNIT;
+    case E_VNx2OImode: return 32*BITS_PER_UNIT;
+    case E_V2HFmode: return 2*BITS_PER_UNIT;
+    case E_V4HFmode: return 2*BITS_PER_UNIT;
+    case E_V2SFmode: return 4*BITS_PER_UNIT;
+    case E_V1DFmode: return 8*BITS_PER_UNIT;
+    case E_V8HFmode: return 2*BITS_PER_UNIT;
+    case E_VNx8HFmode: return 2*BITS_PER_UNIT;
+    case E_V4SFmode: return 4*BITS_PER_UNIT;
+    case E_VNx4SFmode: return 4*BITS_PER_UNIT;
+    case E_V2DFmode: return 8*BITS_PER_UNIT;
+    case E_VNx2DFmode: return 8*BITS_PER_UNIT;
+    case E_VNx16HFmode: return 2*BITS_PER_UNIT;
+    case E_VNx8SFmode: return 4*BITS_PER_UNIT;
+    case E_VNx4DFmode: return 8*BITS_PER_UNIT;
+    case E_VNx24HFmode: return 2*BITS_PER_UNIT;
+    case E_VNx12SFmode: return 4*BITS_PER_UNIT;
+    case E_VNx6DFmode: return 8*BITS_PER_UNIT;
+    case E_VNx32HFmode: return 2*BITS_PER_UNIT;
+    case E_VNx16SFmode: return 4*BITS_PER_UNIT;
+    case E_VNx8DFmode: return 8*BITS_PER_UNIT;
+    default: return mode_unit_precision[mode];
+    }
+}
+
+#endif /* GCC_VERSION >= 4001 */
+
+#endif /* insn-modes-inline.h */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-modes.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-modes.h
new file mode 100644
index 0000000..40f902b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-modes.h
@@ -0,0 +1,834 @@
+/* Generated automatically from machmode.def and config/aarch64/aarch64-modes.def
+   by genmodes.  */
+
+#ifndef GCC_INSN_MODES_H
+#define GCC_INSN_MODES_H
+
+enum machine_mode
+{
+  E_VOIDmode,              /* machmode.def:189 */
+#define HAVE_VOIDmode
+#ifdef USE_ENUM_MODES
+#define VOIDmode E_VOIDmode
+#else
+#define VOIDmode ((void) 0, E_VOIDmode)
+#endif
+  E_BLKmode,               /* machmode.def:193 */
+#define HAVE_BLKmode
+#ifdef USE_ENUM_MODES
+#define BLKmode E_BLKmode
+#else
+#define BLKmode ((void) 0, E_BLKmode)
+#endif
+  E_CCmode,                /* machmode.def:231 */
+#define HAVE_CCmode
+#ifdef USE_ENUM_MODES
+#define CCmode E_CCmode
+#else
+#define CCmode ((void) 0, E_CCmode)
+#endif
+  E_CCFPmode,              /* config/aarch64/aarch64-modes.def:33 */
+#define HAVE_CCFPmode
+#ifdef USE_ENUM_MODES
+#define CCFPmode E_CCFPmode
+#else
+#define CCFPmode ((void) 0, E_CCFPmode)
+#endif
+  E_CCFPEmode,             /* config/aarch64/aarch64-modes.def:34 */
+#define HAVE_CCFPEmode
+#ifdef USE_ENUM_MODES
+#define CCFPEmode E_CCFPEmode
+#else
+#define CCFPEmode ((void) 0, E_CCFPEmode)
+#endif
+  E_CC_SWPmode,            /* config/aarch64/aarch64-modes.def:35 */
+#define HAVE_CC_SWPmode
+#ifdef USE_ENUM_MODES
+#define CC_SWPmode E_CC_SWPmode
+#else
+#define CC_SWPmode ((void) 0, E_CC_SWPmode)
+#endif
+  E_CC_NZmode,             /* config/aarch64/aarch64-modes.def:36 */
+#define HAVE_CC_NZmode
+#ifdef USE_ENUM_MODES
+#define CC_NZmode E_CC_NZmode
+#else
+#define CC_NZmode ((void) 0, E_CC_NZmode)
+#endif
+  E_CC_Zmode,              /* config/aarch64/aarch64-modes.def:37 */
+#define HAVE_CC_Zmode
+#ifdef USE_ENUM_MODES
+#define CC_Zmode E_CC_Zmode
+#else
+#define CC_Zmode ((void) 0, E_CC_Zmode)
+#endif
+  E_CC_Cmode,              /* config/aarch64/aarch64-modes.def:38 */
+#define HAVE_CC_Cmode
+#ifdef USE_ENUM_MODES
+#define CC_Cmode E_CC_Cmode
+#else
+#define CC_Cmode ((void) 0, E_CC_Cmode)
+#endif
+  E_CC_ADCmode,            /* config/aarch64/aarch64-modes.def:39 */
+#define HAVE_CC_ADCmode
+#ifdef USE_ENUM_MODES
+#define CC_ADCmode E_CC_ADCmode
+#else
+#define CC_ADCmode ((void) 0, E_CC_ADCmode)
+#endif
+  E_CC_Vmode,              /* config/aarch64/aarch64-modes.def:40 */
+#define HAVE_CC_Vmode
+#ifdef USE_ENUM_MODES
+#define CC_Vmode E_CC_Vmode
+#else
+#define CC_Vmode ((void) 0, E_CC_Vmode)
+#endif
+  E_BImode,                /* machmode.def:196 */
+#define HAVE_BImode
+#ifdef USE_ENUM_MODES
+#define BImode E_BImode
+#else
+#define BImode (scalar_int_mode ((scalar_int_mode::from_int) E_BImode))
+#endif
+  E_QImode,                /* machmode.def:204 */
+#define HAVE_QImode
+#ifdef USE_ENUM_MODES
+#define QImode E_QImode
+#else
+#define QImode (scalar_int_mode ((scalar_int_mode::from_int) E_QImode))
+#endif
+  E_HImode,                /* machmode.def:205 */
+#define HAVE_HImode
+#ifdef USE_ENUM_MODES
+#define HImode E_HImode
+#else
+#define HImode (scalar_int_mode ((scalar_int_mode::from_int) E_HImode))
+#endif
+  E_SImode,                /* machmode.def:206 */
+#define HAVE_SImode
+#ifdef USE_ENUM_MODES
+#define SImode E_SImode
+#else
+#define SImode (scalar_int_mode ((scalar_int_mode::from_int) E_SImode))
+#endif
+  E_DImode,                /* machmode.def:207 */
+#define HAVE_DImode
+#ifdef USE_ENUM_MODES
+#define DImode E_DImode
+#else
+#define DImode (scalar_int_mode ((scalar_int_mode::from_int) E_DImode))
+#endif
+  E_TImode,                /* machmode.def:208 */
+#define HAVE_TImode
+#ifdef USE_ENUM_MODES
+#define TImode E_TImode
+#else
+#define TImode (scalar_int_mode ((scalar_int_mode::from_int) E_TImode))
+#endif
+  E_OImode,                /* config/aarch64/aarch64-modes.def:71 */
+#define HAVE_OImode
+#ifdef USE_ENUM_MODES
+#define OImode E_OImode
+#else
+#define OImode (scalar_int_mode ((scalar_int_mode::from_int) E_OImode))
+#endif
+  E_CImode,                /* config/aarch64/aarch64-modes.def:75 */
+#define HAVE_CImode
+#ifdef USE_ENUM_MODES
+#define CImode E_CImode
+#else
+#define CImode (scalar_int_mode ((scalar_int_mode::from_int) E_CImode))
+#endif
+  E_XImode,                /* config/aarch64/aarch64-modes.def:76 */
+#define HAVE_XImode
+#ifdef USE_ENUM_MODES
+#define XImode E_XImode
+#else
+#define XImode (scalar_int_mode ((scalar_int_mode::from_int) E_XImode))
+#endif
+  E_QQmode,                /* machmode.def:234 */
+#define HAVE_QQmode
+#ifdef USE_ENUM_MODES
+#define QQmode E_QQmode
+#else
+#define QQmode (scalar_mode ((scalar_mode::from_int) E_QQmode))
+#endif
+  E_HQmode,                /* machmode.def:235 */
+#define HAVE_HQmode
+#ifdef USE_ENUM_MODES
+#define HQmode E_HQmode
+#else
+#define HQmode (scalar_mode ((scalar_mode::from_int) E_HQmode))
+#endif
+  E_SQmode,                /* machmode.def:236 */
+#define HAVE_SQmode
+#ifdef USE_ENUM_MODES
+#define SQmode E_SQmode
+#else
+#define SQmode (scalar_mode ((scalar_mode::from_int) E_SQmode))
+#endif
+  E_DQmode,                /* machmode.def:237 */
+#define HAVE_DQmode
+#ifdef USE_ENUM_MODES
+#define DQmode E_DQmode
+#else
+#define DQmode (scalar_mode ((scalar_mode::from_int) E_DQmode))
+#endif
+  E_TQmode,                /* machmode.def:238 */
+#define HAVE_TQmode
+#ifdef USE_ENUM_MODES
+#define TQmode E_TQmode
+#else
+#define TQmode (scalar_mode ((scalar_mode::from_int) E_TQmode))
+#endif
+  E_UQQmode,               /* machmode.def:240 */
+#define HAVE_UQQmode
+#ifdef USE_ENUM_MODES
+#define UQQmode E_UQQmode
+#else
+#define UQQmode (scalar_mode ((scalar_mode::from_int) E_UQQmode))
+#endif
+  E_UHQmode,               /* machmode.def:241 */
+#define HAVE_UHQmode
+#ifdef USE_ENUM_MODES
+#define UHQmode E_UHQmode
+#else
+#define UHQmode (scalar_mode ((scalar_mode::from_int) E_UHQmode))
+#endif
+  E_USQmode,               /* machmode.def:242 */
+#define HAVE_USQmode
+#ifdef USE_ENUM_MODES
+#define USQmode E_USQmode
+#else
+#define USQmode (scalar_mode ((scalar_mode::from_int) E_USQmode))
+#endif
+  E_UDQmode,               /* machmode.def:243 */
+#define HAVE_UDQmode
+#ifdef USE_ENUM_MODES
+#define UDQmode E_UDQmode
+#else
+#define UDQmode (scalar_mode ((scalar_mode::from_int) E_UDQmode))
+#endif
+  E_UTQmode,               /* machmode.def:244 */
+#define HAVE_UTQmode
+#ifdef USE_ENUM_MODES
+#define UTQmode E_UTQmode
+#else
+#define UTQmode (scalar_mode ((scalar_mode::from_int) E_UTQmode))
+#endif
+  E_HAmode,                /* machmode.def:246 */
+#define HAVE_HAmode
+#ifdef USE_ENUM_MODES
+#define HAmode E_HAmode
+#else
+#define HAmode (scalar_mode ((scalar_mode::from_int) E_HAmode))
+#endif
+  E_SAmode,                /* machmode.def:247 */
+#define HAVE_SAmode
+#ifdef USE_ENUM_MODES
+#define SAmode E_SAmode
+#else
+#define SAmode (scalar_mode ((scalar_mode::from_int) E_SAmode))
+#endif
+  E_DAmode,                /* machmode.def:248 */
+#define HAVE_DAmode
+#ifdef USE_ENUM_MODES
+#define DAmode E_DAmode
+#else
+#define DAmode (scalar_mode ((scalar_mode::from_int) E_DAmode))
+#endif
+  E_TAmode,                /* machmode.def:249 */
+#define HAVE_TAmode
+#ifdef USE_ENUM_MODES
+#define TAmode E_TAmode
+#else
+#define TAmode (scalar_mode ((scalar_mode::from_int) E_TAmode))
+#endif
+  E_UHAmode,               /* machmode.def:251 */
+#define HAVE_UHAmode
+#ifdef USE_ENUM_MODES
+#define UHAmode E_UHAmode
+#else
+#define UHAmode (scalar_mode ((scalar_mode::from_int) E_UHAmode))
+#endif
+  E_USAmode,               /* machmode.def:252 */
+#define HAVE_USAmode
+#ifdef USE_ENUM_MODES
+#define USAmode E_USAmode
+#else
+#define USAmode (scalar_mode ((scalar_mode::from_int) E_USAmode))
+#endif
+  E_UDAmode,               /* machmode.def:253 */
+#define HAVE_UDAmode
+#ifdef USE_ENUM_MODES
+#define UDAmode E_UDAmode
+#else
+#define UDAmode (scalar_mode ((scalar_mode::from_int) E_UDAmode))
+#endif
+  E_UTAmode,               /* machmode.def:254 */
+#define HAVE_UTAmode
+#ifdef USE_ENUM_MODES
+#define UTAmode E_UTAmode
+#else
+#define UTAmode (scalar_mode ((scalar_mode::from_int) E_UTAmode))
+#endif
+  E_HFmode,                /* config/aarch64/aarch64-modes.def:43 */
+#define HAVE_HFmode
+#ifdef USE_ENUM_MODES
+#define HFmode E_HFmode
+#else
+#define HFmode (scalar_float_mode ((scalar_float_mode::from_int) E_HFmode))
+#endif
+  E_SFmode,                /* machmode.def:226 */
+#define HAVE_SFmode
+#ifdef USE_ENUM_MODES
+#define SFmode E_SFmode
+#else
+#define SFmode (scalar_float_mode ((scalar_float_mode::from_int) E_SFmode))
+#endif
+  E_DFmode,                /* machmode.def:227 */
+#define HAVE_DFmode
+#ifdef USE_ENUM_MODES
+#define DFmode E_DFmode
+#else
+#define DFmode (scalar_float_mode ((scalar_float_mode::from_int) E_DFmode))
+#endif
+  E_TFmode,                /* config/aarch64/aarch64-modes.def:110 */
+#define HAVE_TFmode
+#ifdef USE_ENUM_MODES
+#define TFmode E_TFmode
+#else
+#define TFmode (scalar_float_mode ((scalar_float_mode::from_int) E_TFmode))
+#endif
+  E_SDmode,                /* machmode.def:267 */
+#define HAVE_SDmode
+#ifdef USE_ENUM_MODES
+#define SDmode E_SDmode
+#else
+#define SDmode (scalar_float_mode ((scalar_float_mode::from_int) E_SDmode))
+#endif
+  E_DDmode,                /* machmode.def:268 */
+#define HAVE_DDmode
+#ifdef USE_ENUM_MODES
+#define DDmode E_DDmode
+#else
+#define DDmode (scalar_float_mode ((scalar_float_mode::from_int) E_DDmode))
+#endif
+  E_TDmode,                /* machmode.def:269 */
+#define HAVE_TDmode
+#ifdef USE_ENUM_MODES
+#define TDmode E_TDmode
+#else
+#define TDmode (scalar_float_mode ((scalar_float_mode::from_int) E_TDmode))
+#endif
+  E_CQImode,               /* machmode.def:262 */
+#define HAVE_CQImode
+#ifdef USE_ENUM_MODES
+#define CQImode E_CQImode
+#else
+#define CQImode (complex_mode ((complex_mode::from_int) E_CQImode))
+#endif
+  E_CHImode,               /* machmode.def:262 */
+#define HAVE_CHImode
+#ifdef USE_ENUM_MODES
+#define CHImode E_CHImode
+#else
+#define CHImode (complex_mode ((complex_mode::from_int) E_CHImode))
+#endif
+  E_CSImode,               /* machmode.def:262 */
+#define HAVE_CSImode
+#ifdef USE_ENUM_MODES
+#define CSImode E_CSImode
+#else
+#define CSImode (complex_mode ((complex_mode::from_int) E_CSImode))
+#endif
+  E_CDImode,               /* machmode.def:262 */
+#define HAVE_CDImode
+#ifdef USE_ENUM_MODES
+#define CDImode E_CDImode
+#else
+#define CDImode (complex_mode ((complex_mode::from_int) E_CDImode))
+#endif
+  E_CTImode,               /* machmode.def:262 */
+#define HAVE_CTImode
+#ifdef USE_ENUM_MODES
+#define CTImode E_CTImode
+#else
+#define CTImode (complex_mode ((complex_mode::from_int) E_CTImode))
+#endif
+  E_COImode,               /* machmode.def:262 */
+#define HAVE_COImode
+#ifdef USE_ENUM_MODES
+#define COImode E_COImode
+#else
+#define COImode (complex_mode ((complex_mode::from_int) E_COImode))
+#endif
+  E_CCImode,               /* machmode.def:262 */
+#define HAVE_CCImode
+#ifdef USE_ENUM_MODES
+#define CCImode E_CCImode
+#else
+#define CCImode (complex_mode ((complex_mode::from_int) E_CCImode))
+#endif
+  E_CXImode,               /* machmode.def:262 */
+#define HAVE_CXImode
+#ifdef USE_ENUM_MODES
+#define CXImode E_CXImode
+#else
+#define CXImode (complex_mode ((complex_mode::from_int) E_CXImode))
+#endif
+  E_HCmode,                /* machmode.def:264 */
+#define HAVE_HCmode
+#ifdef USE_ENUM_MODES
+#define HCmode E_HCmode
+#else
+#define HCmode (complex_mode ((complex_mode::from_int) E_HCmode))
+#endif
+  E_SCmode,                /* machmode.def:264 */
+#define HAVE_SCmode
+#ifdef USE_ENUM_MODES
+#define SCmode E_SCmode
+#else
+#define SCmode (complex_mode ((complex_mode::from_int) E_SCmode))
+#endif
+  E_DCmode,                /* machmode.def:264 */
+#define HAVE_DCmode
+#ifdef USE_ENUM_MODES
+#define DCmode E_DCmode
+#else
+#define DCmode (complex_mode ((complex_mode::from_int) E_DCmode))
+#endif
+  E_TCmode,                /* machmode.def:264 */
+#define HAVE_TCmode
+#ifdef USE_ENUM_MODES
+#define TCmode E_TCmode
+#else
+#define TCmode (complex_mode ((complex_mode::from_int) E_TCmode))
+#endif
+  E_VNx16BImode,           /* config/aarch64/aarch64-modes.def:48 */
+#define HAVE_VNx16BImode
+#ifdef USE_ENUM_MODES
+#define VNx16BImode E_VNx16BImode
+#else
+#define VNx16BImode ((void) 0, E_VNx16BImode)
+#endif
+  E_VNx8BImode,            /* config/aarch64/aarch64-modes.def:49 */
+#define HAVE_VNx8BImode
+#ifdef USE_ENUM_MODES
+#define VNx8BImode E_VNx8BImode
+#else
+#define VNx8BImode ((void) 0, E_VNx8BImode)
+#endif
+  E_VNx4BImode,            /* config/aarch64/aarch64-modes.def:50 */
+#define HAVE_VNx4BImode
+#ifdef USE_ENUM_MODES
+#define VNx4BImode E_VNx4BImode
+#else
+#define VNx4BImode ((void) 0, E_VNx4BImode)
+#endif
+  E_VNx2BImode,            /* config/aarch64/aarch64-modes.def:51 */
+#define HAVE_VNx2BImode
+#ifdef USE_ENUM_MODES
+#define VNx2BImode E_VNx2BImode
+#else
+#define VNx2BImode ((void) 0, E_VNx2BImode)
+#endif
+  E_V8QImode,              /* config/aarch64/aarch64-modes.def:63 */
+#define HAVE_V8QImode
+#ifdef USE_ENUM_MODES
+#define V8QImode E_V8QImode
+#else
+#define V8QImode ((void) 0, E_V8QImode)
+#endif
+  E_V4HImode,              /* config/aarch64/aarch64-modes.def:63 */
+#define HAVE_V4HImode
+#ifdef USE_ENUM_MODES
+#define V4HImode E_V4HImode
+#else
+#define V4HImode ((void) 0, E_V4HImode)
+#endif
+  E_V2SImode,              /* config/aarch64/aarch64-modes.def:63 */
+#define HAVE_V2SImode
+#ifdef USE_ENUM_MODES
+#define V2SImode E_V2SImode
+#else
+#define V2SImode ((void) 0, E_V2SImode)
+#endif
+  E_V16QImode,             /* config/aarch64/aarch64-modes.def:64 */
+#define HAVE_V16QImode
+#ifdef USE_ENUM_MODES
+#define V16QImode E_V16QImode
+#else
+#define V16QImode ((void) 0, E_V16QImode)
+#endif
+  E_VNx16QImode,           /* config/aarch64/aarch64-modes.def:104 */
+#define HAVE_VNx16QImode
+#ifdef USE_ENUM_MODES
+#define VNx16QImode E_VNx16QImode
+#else
+#define VNx16QImode ((void) 0, E_VNx16QImode)
+#endif
+  E_V8HImode,              /* config/aarch64/aarch64-modes.def:64 */
+#define HAVE_V8HImode
+#ifdef USE_ENUM_MODES
+#define V8HImode E_V8HImode
+#else
+#define V8HImode ((void) 0, E_V8HImode)
+#endif
+  E_VNx8HImode,            /* config/aarch64/aarch64-modes.def:104 */
+#define HAVE_VNx8HImode
+#ifdef USE_ENUM_MODES
+#define VNx8HImode E_VNx8HImode
+#else
+#define VNx8HImode ((void) 0, E_VNx8HImode)
+#endif
+  E_V4SImode,              /* config/aarch64/aarch64-modes.def:64 */
+#define HAVE_V4SImode
+#ifdef USE_ENUM_MODES
+#define V4SImode E_V4SImode
+#else
+#define V4SImode ((void) 0, E_V4SImode)
+#endif
+  E_VNx4SImode,            /* config/aarch64/aarch64-modes.def:104 */
+#define HAVE_VNx4SImode
+#ifdef USE_ENUM_MODES
+#define VNx4SImode E_VNx4SImode
+#else
+#define VNx4SImode ((void) 0, E_VNx4SImode)
+#endif
+  E_V2DImode,              /* config/aarch64/aarch64-modes.def:64 */
+#define HAVE_V2DImode
+#ifdef USE_ENUM_MODES
+#define V2DImode E_V2DImode
+#else
+#define V2DImode ((void) 0, E_V2DImode)
+#endif
+  E_VNx2DImode,            /* config/aarch64/aarch64-modes.def:104 */
+#define HAVE_VNx2DImode
+#ifdef USE_ENUM_MODES
+#define VNx2DImode E_VNx2DImode
+#else
+#define VNx2DImode ((void) 0, E_VNx2DImode)
+#endif
+  E_VNx32QImode,           /* config/aarch64/aarch64-modes.def:105 */
+#define HAVE_VNx32QImode
+#ifdef USE_ENUM_MODES
+#define VNx32QImode E_VNx32QImode
+#else
+#define VNx32QImode ((void) 0, E_VNx32QImode)
+#endif
+  E_VNx16HImode,           /* config/aarch64/aarch64-modes.def:105 */
+#define HAVE_VNx16HImode
+#ifdef USE_ENUM_MODES
+#define VNx16HImode E_VNx16HImode
+#else
+#define VNx16HImode ((void) 0, E_VNx16HImode)
+#endif
+  E_VNx8SImode,            /* config/aarch64/aarch64-modes.def:105 */
+#define HAVE_VNx8SImode
+#ifdef USE_ENUM_MODES
+#define VNx8SImode E_VNx8SImode
+#else
+#define VNx8SImode ((void) 0, E_VNx8SImode)
+#endif
+  E_VNx4DImode,            /* config/aarch64/aarch64-modes.def:105 */
+#define HAVE_VNx4DImode
+#ifdef USE_ENUM_MODES
+#define VNx4DImode E_VNx4DImode
+#else
+#define VNx4DImode ((void) 0, E_VNx4DImode)
+#endif
+  E_VNx2TImode,            /* config/aarch64/aarch64-modes.def:105 */
+#define HAVE_VNx2TImode
+#ifdef USE_ENUM_MODES
+#define VNx2TImode E_VNx2TImode
+#else
+#define VNx2TImode ((void) 0, E_VNx2TImode)
+#endif
+  E_VNx48QImode,           /* config/aarch64/aarch64-modes.def:106 */
+#define HAVE_VNx48QImode
+#ifdef USE_ENUM_MODES
+#define VNx48QImode E_VNx48QImode
+#else
+#define VNx48QImode ((void) 0, E_VNx48QImode)
+#endif
+  E_VNx24HImode,           /* config/aarch64/aarch64-modes.def:106 */
+#define HAVE_VNx24HImode
+#ifdef USE_ENUM_MODES
+#define VNx24HImode E_VNx24HImode
+#else
+#define VNx24HImode ((void) 0, E_VNx24HImode)
+#endif
+  E_VNx12SImode,           /* config/aarch64/aarch64-modes.def:106 */
+#define HAVE_VNx12SImode
+#ifdef USE_ENUM_MODES
+#define VNx12SImode E_VNx12SImode
+#else
+#define VNx12SImode ((void) 0, E_VNx12SImode)
+#endif
+  E_VNx6DImode,            /* config/aarch64/aarch64-modes.def:106 */
+#define HAVE_VNx6DImode
+#ifdef USE_ENUM_MODES
+#define VNx6DImode E_VNx6DImode
+#else
+#define VNx6DImode ((void) 0, E_VNx6DImode)
+#endif
+  E_VNx3TImode,            /* config/aarch64/aarch64-modes.def:106 */
+#define HAVE_VNx3TImode
+#ifdef USE_ENUM_MODES
+#define VNx3TImode E_VNx3TImode
+#else
+#define VNx3TImode ((void) 0, E_VNx3TImode)
+#endif
+  E_VNx64QImode,           /* config/aarch64/aarch64-modes.def:107 */
+#define HAVE_VNx64QImode
+#ifdef USE_ENUM_MODES
+#define VNx64QImode E_VNx64QImode
+#else
+#define VNx64QImode ((void) 0, E_VNx64QImode)
+#endif
+  E_VNx32HImode,           /* config/aarch64/aarch64-modes.def:107 */
+#define HAVE_VNx32HImode
+#ifdef USE_ENUM_MODES
+#define VNx32HImode E_VNx32HImode
+#else
+#define VNx32HImode ((void) 0, E_VNx32HImode)
+#endif
+  E_VNx16SImode,           /* config/aarch64/aarch64-modes.def:107 */
+#define HAVE_VNx16SImode
+#ifdef USE_ENUM_MODES
+#define VNx16SImode E_VNx16SImode
+#else
+#define VNx16SImode ((void) 0, E_VNx16SImode)
+#endif
+  E_VNx8DImode,            /* config/aarch64/aarch64-modes.def:107 */
+#define HAVE_VNx8DImode
+#ifdef USE_ENUM_MODES
+#define VNx8DImode E_VNx8DImode
+#else
+#define VNx8DImode ((void) 0, E_VNx8DImode)
+#endif
+  E_VNx4TImode,            /* config/aarch64/aarch64-modes.def:107 */
+#define HAVE_VNx4TImode
+#ifdef USE_ENUM_MODES
+#define VNx4TImode E_VNx4TImode
+#else
+#define VNx4TImode ((void) 0, E_VNx4TImode)
+#endif
+  E_VNx2OImode,            /* config/aarch64/aarch64-modes.def:107 */
+#define HAVE_VNx2OImode
+#ifdef USE_ENUM_MODES
+#define VNx2OImode E_VNx2OImode
+#else
+#define VNx2OImode ((void) 0, E_VNx2OImode)
+#endif
+  E_V2HFmode,              /* config/aarch64/aarch64-modes.def:68 */
+#define HAVE_V2HFmode
+#ifdef USE_ENUM_MODES
+#define V2HFmode E_V2HFmode
+#else
+#define V2HFmode ((void) 0, E_V2HFmode)
+#endif
+  E_V4HFmode,              /* config/aarch64/aarch64-modes.def:65 */
+#define HAVE_V4HFmode
+#ifdef USE_ENUM_MODES
+#define V4HFmode E_V4HFmode
+#else
+#define V4HFmode ((void) 0, E_V4HFmode)
+#endif
+  E_V2SFmode,              /* config/aarch64/aarch64-modes.def:65 */
+#define HAVE_V2SFmode
+#ifdef USE_ENUM_MODES
+#define V2SFmode E_V2SFmode
+#else
+#define V2SFmode ((void) 0, E_V2SFmode)
+#endif
+  E_V1DFmode,              /* config/aarch64/aarch64-modes.def:67 */
+#define HAVE_V1DFmode
+#ifdef USE_ENUM_MODES
+#define V1DFmode E_V1DFmode
+#else
+#define V1DFmode ((void) 0, E_V1DFmode)
+#endif
+  E_V8HFmode,              /* config/aarch64/aarch64-modes.def:66 */
+#define HAVE_V8HFmode
+#ifdef USE_ENUM_MODES
+#define V8HFmode E_V8HFmode
+#else
+#define V8HFmode ((void) 0, E_V8HFmode)
+#endif
+  E_VNx8HFmode,            /* config/aarch64/aarch64-modes.def:104 */
+#define HAVE_VNx8HFmode
+#ifdef USE_ENUM_MODES
+#define VNx8HFmode E_VNx8HFmode
+#else
+#define VNx8HFmode ((void) 0, E_VNx8HFmode)
+#endif
+  E_V4SFmode,              /* config/aarch64/aarch64-modes.def:66 */
+#define HAVE_V4SFmode
+#ifdef USE_ENUM_MODES
+#define V4SFmode E_V4SFmode
+#else
+#define V4SFmode ((void) 0, E_V4SFmode)
+#endif
+  E_VNx4SFmode,            /* config/aarch64/aarch64-modes.def:104 */
+#define HAVE_VNx4SFmode
+#ifdef USE_ENUM_MODES
+#define VNx4SFmode E_VNx4SFmode
+#else
+#define VNx4SFmode ((void) 0, E_VNx4SFmode)
+#endif
+  E_V2DFmode,              /* config/aarch64/aarch64-modes.def:66 */
+#define HAVE_V2DFmode
+#ifdef USE_ENUM_MODES
+#define V2DFmode E_V2DFmode
+#else
+#define V2DFmode ((void) 0, E_V2DFmode)
+#endif
+  E_VNx2DFmode,            /* config/aarch64/aarch64-modes.def:104 */
+#define HAVE_VNx2DFmode
+#ifdef USE_ENUM_MODES
+#define VNx2DFmode E_VNx2DFmode
+#else
+#define VNx2DFmode ((void) 0, E_VNx2DFmode)
+#endif
+  E_VNx16HFmode,           /* config/aarch64/aarch64-modes.def:105 */
+#define HAVE_VNx16HFmode
+#ifdef USE_ENUM_MODES
+#define VNx16HFmode E_VNx16HFmode
+#else
+#define VNx16HFmode ((void) 0, E_VNx16HFmode)
+#endif
+  E_VNx8SFmode,            /* config/aarch64/aarch64-modes.def:105 */
+#define HAVE_VNx8SFmode
+#ifdef USE_ENUM_MODES
+#define VNx8SFmode E_VNx8SFmode
+#else
+#define VNx8SFmode ((void) 0, E_VNx8SFmode)
+#endif
+  E_VNx4DFmode,            /* config/aarch64/aarch64-modes.def:105 */
+#define HAVE_VNx4DFmode
+#ifdef USE_ENUM_MODES
+#define VNx4DFmode E_VNx4DFmode
+#else
+#define VNx4DFmode ((void) 0, E_VNx4DFmode)
+#endif
+  E_VNx24HFmode,           /* config/aarch64/aarch64-modes.def:106 */
+#define HAVE_VNx24HFmode
+#ifdef USE_ENUM_MODES
+#define VNx24HFmode E_VNx24HFmode
+#else
+#define VNx24HFmode ((void) 0, E_VNx24HFmode)
+#endif
+  E_VNx12SFmode,           /* config/aarch64/aarch64-modes.def:106 */
+#define HAVE_VNx12SFmode
+#ifdef USE_ENUM_MODES
+#define VNx12SFmode E_VNx12SFmode
+#else
+#define VNx12SFmode ((void) 0, E_VNx12SFmode)
+#endif
+  E_VNx6DFmode,            /* config/aarch64/aarch64-modes.def:106 */
+#define HAVE_VNx6DFmode
+#ifdef USE_ENUM_MODES
+#define VNx6DFmode E_VNx6DFmode
+#else
+#define VNx6DFmode ((void) 0, E_VNx6DFmode)
+#endif
+  E_VNx32HFmode,           /* config/aarch64/aarch64-modes.def:107 */
+#define HAVE_VNx32HFmode
+#ifdef USE_ENUM_MODES
+#define VNx32HFmode E_VNx32HFmode
+#else
+#define VNx32HFmode ((void) 0, E_VNx32HFmode)
+#endif
+  E_VNx16SFmode,           /* config/aarch64/aarch64-modes.def:107 */
+#define HAVE_VNx16SFmode
+#ifdef USE_ENUM_MODES
+#define VNx16SFmode E_VNx16SFmode
+#else
+#define VNx16SFmode ((void) 0, E_VNx16SFmode)
+#endif
+  E_VNx8DFmode,            /* config/aarch64/aarch64-modes.def:107 */
+#define HAVE_VNx8DFmode
+#ifdef USE_ENUM_MODES
+#define VNx8DFmode E_VNx8DFmode
+#else
+#define VNx8DFmode ((void) 0, E_VNx8DFmode)
+#endif
+  MAX_MACHINE_MODE,
+
+  MIN_MODE_RANDOM = E_VOIDmode,
+  MAX_MODE_RANDOM = E_BLKmode,
+
+  MIN_MODE_CC = E_CCmode,
+  MAX_MODE_CC = E_CC_Vmode,
+
+  MIN_MODE_INT = E_QImode,
+  MAX_MODE_INT = E_XImode,
+
+  MIN_MODE_PARTIAL_INT = E_VOIDmode,
+  MAX_MODE_PARTIAL_INT = E_VOIDmode,
+
+  MIN_MODE_FRACT = E_QQmode,
+  MAX_MODE_FRACT = E_TQmode,
+
+  MIN_MODE_UFRACT = E_UQQmode,
+  MAX_MODE_UFRACT = E_UTQmode,
+
+  MIN_MODE_ACCUM = E_HAmode,
+  MAX_MODE_ACCUM = E_TAmode,
+
+  MIN_MODE_UACCUM = E_UHAmode,
+  MAX_MODE_UACCUM = E_UTAmode,
+
+  MIN_MODE_FLOAT = E_HFmode,
+  MAX_MODE_FLOAT = E_TFmode,
+
+  MIN_MODE_DECIMAL_FLOAT = E_SDmode,
+  MAX_MODE_DECIMAL_FLOAT = E_TDmode,
+
+  MIN_MODE_COMPLEX_INT = E_CQImode,
+  MAX_MODE_COMPLEX_INT = E_CXImode,
+
+  MIN_MODE_COMPLEX_FLOAT = E_HCmode,
+  MAX_MODE_COMPLEX_FLOAT = E_TCmode,
+
+  MIN_MODE_VECTOR_BOOL = E_VNx16BImode,
+  MAX_MODE_VECTOR_BOOL = E_VNx2BImode,
+
+  MIN_MODE_VECTOR_INT = E_V8QImode,
+  MAX_MODE_VECTOR_INT = E_VNx2OImode,
+
+  MIN_MODE_VECTOR_FRACT = E_VOIDmode,
+  MAX_MODE_VECTOR_FRACT = E_VOIDmode,
+
+  MIN_MODE_VECTOR_UFRACT = E_VOIDmode,
+  MAX_MODE_VECTOR_UFRACT = E_VOIDmode,
+
+  MIN_MODE_VECTOR_ACCUM = E_VOIDmode,
+  MAX_MODE_VECTOR_ACCUM = E_VOIDmode,
+
+  MIN_MODE_VECTOR_UACCUM = E_VOIDmode,
+  MAX_MODE_VECTOR_UACCUM = E_VOIDmode,
+
+  MIN_MODE_VECTOR_FLOAT = E_V2HFmode,
+  MAX_MODE_VECTOR_FLOAT = E_VNx8DFmode,
+
+  NUM_MACHINE_MODES = MAX_MACHINE_MODE
+};
+
+#define CONST_MODE_NUNITS
+#define CONST_MODE_PRECISION
+#define CONST_MODE_SIZE
+#define CONST_MODE_UNIT_SIZE const
+#define CONST_MODE_BASE_ALIGN
+#define CONST_MODE_IBIT const
+#define CONST_MODE_FBIT const
+
+#define BITS_PER_UNIT (8)
+#define MAX_BITSIZE_MODE_ANY_INT (64*BITS_PER_UNIT)
+#define MAX_BITSIZE_MODE_ANY_MODE 8192
+#define NUM_INT_N_ENTS 1
+#define NUM_POLY_INT_COEFFS 2
+
+#endif /* insn-modes.h */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-notes.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-notes.def
new file mode 100644
index 0000000..337e9df
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/insn-notes.def
@@ -0,0 +1,98 @@
+/* Insn note definitions.
+   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* This file defines all the codes that may appear in the
+   NOTE_LINE_NUMBER field of a NOTE insn for kinds of notes that are
+   not line numbers.  Source files define DEF_INSN_NOTE appropriately
+   before including this file.
+
+   We are slowly removing the concept of insn-chain notes from the
+   compiler.  Adding new codes to this file is STRONGLY DISCOURAGED.
+   If you think you need one, look for other ways to express what you
+   mean, such as register notes or bits in the basic-block structure.  */
+
+/* Shorthand.  */
+#define INSN_NOTE(NAME) DEF_INSN_NOTE (NOTE_INSN_##NAME)
+
+/* This note is used to get rid of an insn when it isn't safe to patch
+   the insn out of the chain.  */
+INSN_NOTE (DELETED)
+
+/* Generated in place of user-declared labels when they are deleted.  */
+INSN_NOTE (DELETED_LABEL)
+/* Similarly, but for labels that have been present in debug stmts
+   earlier and thus will only appear with -g.  These must use different
+   label namespace.  */
+INSN_NOTE (DELETED_DEBUG_LABEL)
+
+/* These are used to mark the beginning and end of a lexical block.
+   See NOTE_BLOCK and reorder_blocks.  */
+INSN_NOTE (BLOCK_BEG)
+INSN_NOTE (BLOCK_END)
+
+/* This note indicates the start of the real body of the function,
+   i.e. the point just after all of the parms have been moved into
+   their homes, etc.  */
+INSN_NOTE (FUNCTION_BEG)
+
+/* This marks the point immediately after the last prologue insn.  */
+INSN_NOTE (PROLOGUE_END)
+
+/* This marks the point immediately prior to the first epilogue insn.  */
+INSN_NOTE (EPILOGUE_BEG)
+
+/* These note where exception handling regions begin and end.
+   Uses NOTE_EH_HANDLER to identify the region in question.  */
+INSN_NOTE (EH_REGION_BEG)
+INSN_NOTE (EH_REGION_END)
+
+/* The location of a variable.  */
+INSN_NOTE (VAR_LOCATION)
+
+/* The beginning of a statement.  */
+INSN_NOTE (BEGIN_STMT)
+
+/* The entry point for an inlined function.  Its NOTE_BLOCK references
+   the lexical block whose abstract origin is the inlined function.  */
+INSN_NOTE (INLINE_ENTRY)
+
+/* Record the struct for the following basic block.  Uses
+   NOTE_BASIC_BLOCK.  FIXME: Redundant with the basic block pointer
+   now included in every insn.  NOTE: If there's no CFG anymore, in other words,
+   if BLOCK_FOR_INSN () == NULL, NOTE_BASIC_BLOCK cannot be considered reliable
+   anymore.  */
+INSN_NOTE (BASIC_BLOCK)
+
+/* Mark the inflection point in the instruction stream where we switch
+   between hot and cold text sections.  */
+INSN_NOTE (SWITCH_TEXT_SECTIONS)
+
+/* When emitting dwarf2 frame information, contains a directive that
+   should be emitted.  */
+INSN_NOTE (CFI)
+
+/* When emitting dwarf2 frame information, contains the number of a debug
+   label that should be emitted.  */
+INSN_NOTE (CFI_LABEL)
+
+/* This note indicates that the function context must be updated if
+   the Setjmp/Longjmp exception mechanism is used.  */
+INSN_NOTE (UPDATE_SJLJ_CONTEXT)
+
+#undef INSN_NOTE
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/int-vector-builder.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/int-vector-builder.h
new file mode 100644
index 0000000..adf0904
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/int-vector-builder.h
@@ -0,0 +1,90 @@
+/* A class for building vector integer constants.
+   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_INT_VECTOR_BUILDER_H
+#define GCC_INT_VECTOR_BUILDER_H 1
+
+#include "vector-builder.h"
+
+/* This class is used to build vectors of integer type T using the same
+   encoding as tree and rtx constants.  See vector_builder for more
+   details.  */
+template<typename T>
+class int_vector_builder : public vector_builder<T, int_vector_builder<T> >
+{
+  typedef vector_builder<T, int_vector_builder> parent;
+  friend class vector_builder<T, int_vector_builder>;
+
+public:
+  int_vector_builder () {}
+  int_vector_builder (poly_uint64, unsigned int, unsigned int);
+
+  using parent::new_vector;
+
+private:
+  bool equal_p (T, T) const;
+  bool allow_steps_p () const { return true; }
+  bool integral_p (T) const { return true; }
+  T step (T, T) const;
+  T apply_step (T, unsigned int, T) const;
+  bool can_elide_p (T) const { return true; }
+  void note_representative (T *, T) {}
+};
+
+/* Create a new builder for a vector with FULL_NELTS elements.
+   Initially encode the value as NPATTERNS interleaved patterns with
+   NELTS_PER_PATTERN elements each.  */
+
+template<typename T>
+inline
+int_vector_builder<T>::int_vector_builder (poly_uint64 full_nelts,
+					   unsigned int npatterns,
+					   unsigned int nelts_per_pattern)
+{
+  new_vector (full_nelts, npatterns, nelts_per_pattern);
+}
+
+/* Return true if elements ELT1 and ELT2 are equal.  */
+
+template<typename T>
+inline bool
+int_vector_builder<T>::equal_p (T elt1, T elt2) const
+{
+  return known_eq (elt1, elt2);
+}
+
+/* Return the value of element ELT2 minus the value of element ELT1.  */
+
+template<typename T>
+inline T
+int_vector_builder<T>::step (T elt1, T elt2) const
+{
+  return elt2 - elt1;
+}
+
+/* Return a vector element with the value BASE + FACTOR * STEP.  */
+
+template<typename T>
+inline T
+int_vector_builder<T>::apply_step (T base, unsigned int factor, T step) const
+{
+  return base + factor * step;
+}
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/internal-fn.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/internal-fn.def
new file mode 100644
index 0000000..e370eaa
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/internal-fn.def
@@ -0,0 +1,356 @@
+/* Internal functions.
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* This file specifies a list of internal "functions".  These functions
+   differ from built-in functions in that they have no linkage and cannot
+   be called directly by the user.  They represent operations that are only
+   synthesised by GCC itself.
+
+   Internal functions are used instead of tree codes if the operation
+   and its operands are more naturally represented as a GIMPLE_CALL
+   than a GIMPLE_ASSIGN.
+
+   Each entry in this file has one of the forms:
+
+     DEF_INTERNAL_FN (NAME, FLAGS, FNSPEC)
+     DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
+     DEF_INTERNAL_SIGNED_OPTAB_FN (NAME, FLAGS, SELECTOR, SIGNED_OPTAB,
+				   UNSIGNED_OPTAB, TYPE)
+     DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE)
+     DEF_INTERNAL_INT_FN (NAME, FLAGS, OPTAB, TYPE)
+
+   where NAME is the name of the function, FLAGS is a set of
+   ECF_* flags and FNSPEC is a string describing functions fnspec.
+   
+   DEF_INTERNAL_OPTAB_FN defines an internal function that maps to a
+   direct optab.  The function should only be called with a given
+   set of types if the associated optab is available for the modes
+   of those types.  OPTAB says what optab to use (without the trailing
+   "_optab") and TYPE categorizes the optab based on its inputs and
+   outputs.  The possible types of optab are:
+
+   - mask_load: currently just maskload
+   - load_lanes: currently just vec_load_lanes
+   - mask_load_lanes: currently just vec_mask_load_lanes
+   - gather_load: used for {mask_,}gather_load
+
+   - mask_store: currently just maskstore
+   - store_lanes: currently just vec_store_lanes
+   - mask_store_lanes: currently just vec_mask_store_lanes
+   - scatter_store: used for {mask_,}scatter_store
+
+   - unary: a normal unary optab, such as vec_reverse_<mode>
+   - binary: a normal binary optab, such as vec_interleave_lo_<mode>
+   - ternary: a normal ternary optab, such as fma<mode>4
+
+   - cond_binary: a conditional binary optab, such as cond_add<mode>
+   - cond_ternary: a conditional ternary optab, such as cond_fma_rev<mode>
+
+   - fold_left: for scalar = FN (scalar, vector), keyed off the vector mode
+
+   DEF_INTERNAL_SIGNED_OPTAB_FN defines an internal function that
+   maps to one of two optabs, depending on the signedness of an input.
+   SIGNED_OPTAB and UNSIGNED_OPTAB are the optabs for signed and
+   unsigned inputs respectively, both without the trailing "_optab".
+   SELECTOR says which type in the tree_pair determines the signedness.
+
+   DEF_INTERNAL_FLT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition,
+   the function implements the computational part of a built-in math
+   function BUILT_IN_<NAME>{F,,L}.  Unlike some built-in functions,
+   these internal functions never set errno.
+
+   DEF_INTERNAL_INT_FN is like DEF_INTERNAL_OPTAB_FN, but in addition
+   says that the function extends the C-level BUILT_IN_<NAME>{,L,LL,IMAX}
+   group of functions to any integral mode (including vector modes).
+
+   Each entry must have a corresponding expander of the form:
+
+     void expand_NAME (gimple_call stmt)
+
+   where STMT is the statement that performs the call.  These are generated
+   automatically for optab functions and call out to a function or macro
+   called expand_<TYPE>_optab_fn.  */
+
+#ifndef DEF_INTERNAL_FN
+#define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC)
+#endif
+
+#ifndef DEF_INTERNAL_OPTAB_FN
+#define DEF_INTERNAL_OPTAB_FN(NAME, FLAGS, OPTAB, TYPE) \
+  DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL)
+#endif
+
+#ifndef DEF_INTERNAL_SIGNED_OPTAB_FN
+#define DEF_INTERNAL_SIGNED_OPTAB_FN(NAME, FLAGS, SELECTOR, SIGNED_OPTAB, \
+				     UNSIGNED_OPTAB, TYPE) \
+  DEF_INTERNAL_FN (NAME, FLAGS | ECF_LEAF, NULL)
+#endif
+
+#ifndef DEF_INTERNAL_FLT_FN
+#define DEF_INTERNAL_FLT_FN(NAME, FLAGS, OPTAB, TYPE) \
+  DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
+#endif
+
+#ifndef DEF_INTERNAL_FLT_FLOATN_FN
+#define DEF_INTERNAL_FLT_FLOATN_FN(NAME, FLAGS, OPTAB, TYPE) \
+  DEF_INTERNAL_FLT_FN (NAME, FLAGS, OPTAB, TYPE)
+#endif
+
+#ifndef DEF_INTERNAL_INT_FN
+#define DEF_INTERNAL_INT_FN(NAME, FLAGS, OPTAB, TYPE) \
+  DEF_INTERNAL_OPTAB_FN (NAME, FLAGS, OPTAB, TYPE)
+#endif
+
+DEF_INTERNAL_OPTAB_FN (MASK_LOAD, ECF_PURE, maskload, mask_load)
+DEF_INTERNAL_OPTAB_FN (LOAD_LANES, ECF_CONST, vec_load_lanes, load_lanes)
+DEF_INTERNAL_OPTAB_FN (MASK_LOAD_LANES, ECF_PURE,
+		       vec_mask_load_lanes, mask_load_lanes)
+
+DEF_INTERNAL_OPTAB_FN (GATHER_LOAD, ECF_PURE, gather_load, gather_load)
+DEF_INTERNAL_OPTAB_FN (MASK_GATHER_LOAD, ECF_PURE,
+		       mask_gather_load, gather_load)
+
+DEF_INTERNAL_OPTAB_FN (SCATTER_STORE, 0, scatter_store, scatter_store)
+DEF_INTERNAL_OPTAB_FN (MASK_SCATTER_STORE, 0,
+		       mask_scatter_store, scatter_store)
+
+DEF_INTERNAL_OPTAB_FN (MASK_STORE, 0, maskstore, mask_store)
+DEF_INTERNAL_OPTAB_FN (STORE_LANES, ECF_CONST, vec_store_lanes, store_lanes)
+DEF_INTERNAL_OPTAB_FN (MASK_STORE_LANES, 0,
+		       vec_mask_store_lanes, mask_store_lanes)
+
+DEF_INTERNAL_OPTAB_FN (WHILE_ULT, ECF_CONST | ECF_NOTHROW, while_ult, while)
+
+DEF_INTERNAL_OPTAB_FN (VEC_SHL_INSERT, ECF_CONST | ECF_NOTHROW,
+		       vec_shl_insert, binary)
+
+DEF_INTERNAL_OPTAB_FN (FMS, ECF_CONST, fms, ternary)
+DEF_INTERNAL_OPTAB_FN (FNMA, ECF_CONST, fnma, ternary)
+DEF_INTERNAL_OPTAB_FN (FNMS, ECF_CONST, fnms, ternary)
+
+DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_FLOOR, ECF_CONST | ECF_NOTHROW, first,
+			      savg_floor, uavg_floor, binary)
+DEF_INTERNAL_SIGNED_OPTAB_FN (AVG_CEIL, ECF_CONST | ECF_NOTHROW, first,
+			      savg_ceil, uavg_ceil, binary)
+
+DEF_INTERNAL_OPTAB_FN (COND_ADD, ECF_CONST, cond_add, cond_binary)
+DEF_INTERNAL_OPTAB_FN (COND_SUB, ECF_CONST, cond_sub, cond_binary)
+DEF_INTERNAL_OPTAB_FN (COND_MUL, ECF_CONST, cond_smul, cond_binary)
+DEF_INTERNAL_SIGNED_OPTAB_FN (COND_DIV, ECF_CONST, first,
+			      cond_sdiv, cond_udiv, cond_binary)
+DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MOD, ECF_CONST, first,
+			      cond_smod, cond_umod, cond_binary)
+DEF_INTERNAL_OPTAB_FN (COND_RDIV, ECF_CONST, cond_sdiv, cond_binary)
+DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MIN, ECF_CONST, first,
+			      cond_smin, cond_umin, cond_binary)
+DEF_INTERNAL_SIGNED_OPTAB_FN (COND_MAX, ECF_CONST, first,
+			      cond_smax, cond_umax, cond_binary)
+DEF_INTERNAL_OPTAB_FN (COND_AND, ECF_CONST | ECF_NOTHROW,
+		       cond_and, cond_binary)
+DEF_INTERNAL_OPTAB_FN (COND_IOR, ECF_CONST | ECF_NOTHROW,
+		       cond_ior, cond_binary)
+DEF_INTERNAL_OPTAB_FN (COND_XOR, ECF_CONST | ECF_NOTHROW,
+		       cond_xor, cond_binary)
+
+DEF_INTERNAL_OPTAB_FN (COND_FMA, ECF_CONST, cond_fma, cond_ternary)
+DEF_INTERNAL_OPTAB_FN (COND_FMS, ECF_CONST, cond_fms, cond_ternary)
+DEF_INTERNAL_OPTAB_FN (COND_FNMA, ECF_CONST, cond_fnma, cond_ternary)
+DEF_INTERNAL_OPTAB_FN (COND_FNMS, ECF_CONST, cond_fnms, cond_ternary)
+
+DEF_INTERNAL_OPTAB_FN (RSQRT, ECF_CONST, rsqrt, unary)
+
+DEF_INTERNAL_OPTAB_FN (REDUC_PLUS, ECF_CONST | ECF_NOTHROW,
+		       reduc_plus_scal, unary)
+DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MAX, ECF_CONST | ECF_NOTHROW, first,
+			      reduc_smax_scal, reduc_umax_scal, unary)
+DEF_INTERNAL_SIGNED_OPTAB_FN (REDUC_MIN, ECF_CONST | ECF_NOTHROW, first,
+			      reduc_smin_scal, reduc_umin_scal, unary)
+DEF_INTERNAL_OPTAB_FN (REDUC_AND, ECF_CONST | ECF_NOTHROW,
+		       reduc_and_scal, unary)
+DEF_INTERNAL_OPTAB_FN (REDUC_IOR, ECF_CONST | ECF_NOTHROW,
+		       reduc_ior_scal, unary)
+DEF_INTERNAL_OPTAB_FN (REDUC_XOR, ECF_CONST | ECF_NOTHROW,
+		       reduc_xor_scal, unary)
+
+/* Extract the last active element from a vector.  */
+DEF_INTERNAL_OPTAB_FN (EXTRACT_LAST, ECF_CONST | ECF_NOTHROW,
+		       extract_last, fold_left)
+
+/* Same, but return the first argument if no elements are active.  */
+DEF_INTERNAL_OPTAB_FN (FOLD_EXTRACT_LAST, ECF_CONST | ECF_NOTHROW,
+		       fold_extract_last, fold_extract)
+
+DEF_INTERNAL_OPTAB_FN (FOLD_LEFT_PLUS, ECF_CONST | ECF_NOTHROW,
+		       fold_left_plus, fold_left)
+
+/* Unary math functions.  */
+DEF_INTERNAL_FLT_FN (ACOS, ECF_CONST, acos, unary)
+DEF_INTERNAL_FLT_FN (ACOSH, ECF_CONST, acosh, unary)
+DEF_INTERNAL_FLT_FN (ASIN, ECF_CONST, asin, unary)
+DEF_INTERNAL_FLT_FN (ASINH, ECF_CONST, asinh, unary)
+DEF_INTERNAL_FLT_FN (ATAN, ECF_CONST, atan, unary)
+DEF_INTERNAL_FLT_FN (ATANH, ECF_CONST, atanh, unary)
+DEF_INTERNAL_FLT_FN (COS, ECF_CONST, cos, unary)
+DEF_INTERNAL_FLT_FN (COSH, ECF_CONST, cosh, unary)
+DEF_INTERNAL_FLT_FN (EXP, ECF_CONST, exp, unary)
+DEF_INTERNAL_FLT_FN (EXP10, ECF_CONST, exp10, unary)
+DEF_INTERNAL_FLT_FN (EXP2, ECF_CONST, exp2, unary)
+DEF_INTERNAL_FLT_FN (EXPM1, ECF_CONST, expm1, unary)
+DEF_INTERNAL_FLT_FN (LOG, ECF_CONST, log, unary)
+DEF_INTERNAL_FLT_FN (LOG10, ECF_CONST, log10, unary)
+DEF_INTERNAL_FLT_FN (LOG1P, ECF_CONST, log1p, unary)
+DEF_INTERNAL_FLT_FN (LOG2, ECF_CONST, log2, unary)
+DEF_INTERNAL_FLT_FN (LOGB, ECF_CONST, logb, unary)
+DEF_INTERNAL_FLT_FN (SIGNIFICAND, ECF_CONST, significand, unary)
+DEF_INTERNAL_FLT_FN (SIN, ECF_CONST, sin, unary)
+DEF_INTERNAL_FLT_FN (SINH, ECF_CONST, sinh, unary)
+DEF_INTERNAL_FLT_FLOATN_FN (SQRT, ECF_CONST, sqrt, unary)
+DEF_INTERNAL_FLT_FN (TAN, ECF_CONST, tan, unary)
+DEF_INTERNAL_FLT_FN (TANH, ECF_CONST, tanh, unary)
+
+/* FP rounding.  */
+DEF_INTERNAL_FLT_FLOATN_FN (CEIL, ECF_CONST, ceil, unary)
+DEF_INTERNAL_FLT_FLOATN_FN (FLOOR, ECF_CONST, floor, unary)
+DEF_INTERNAL_FLT_FLOATN_FN (NEARBYINT, ECF_CONST, nearbyint, unary)
+DEF_INTERNAL_FLT_FLOATN_FN (RINT, ECF_CONST, rint, unary)
+DEF_INTERNAL_FLT_FLOATN_FN (ROUND, ECF_CONST, round, unary)
+DEF_INTERNAL_FLT_FLOATN_FN (TRUNC, ECF_CONST, btrunc, unary)
+
+/* Binary math functions.  */
+DEF_INTERNAL_FLT_FN (ATAN2, ECF_CONST, atan2, binary)
+DEF_INTERNAL_FLT_FLOATN_FN (COPYSIGN, ECF_CONST, copysign, binary)
+DEF_INTERNAL_FLT_FN (FMOD, ECF_CONST, fmod, binary)
+DEF_INTERNAL_FLT_FN (HYPOT, ECF_CONST, hypot, binary)
+DEF_INTERNAL_FLT_FN (POW, ECF_CONST, pow, binary)
+DEF_INTERNAL_FLT_FN (REMAINDER, ECF_CONST, remainder, binary)
+DEF_INTERNAL_FLT_FN (SCALB, ECF_CONST, scalb, binary)
+DEF_INTERNAL_FLT_FLOATN_FN (FMIN, ECF_CONST, fmin, binary)
+DEF_INTERNAL_FLT_FLOATN_FN (FMAX, ECF_CONST, fmax, binary)
+DEF_INTERNAL_OPTAB_FN (XORSIGN, ECF_CONST, xorsign, binary)
+
+/* FP scales.  */
+DEF_INTERNAL_FLT_FN (LDEXP, ECF_CONST, ldexp, binary)
+
+/* Ternary math functions.  */
+DEF_INTERNAL_FLT_FLOATN_FN (FMA, ECF_CONST, fma, ternary)
+
+/* Unary integer ops.  */
+DEF_INTERNAL_INT_FN (CLRSB, ECF_CONST | ECF_NOTHROW, clrsb, unary)
+DEF_INTERNAL_INT_FN (CLZ, ECF_CONST | ECF_NOTHROW, clz, unary)
+DEF_INTERNAL_INT_FN (CTZ, ECF_CONST | ECF_NOTHROW, ctz, unary)
+DEF_INTERNAL_INT_FN (FFS, ECF_CONST | ECF_NOTHROW, ffs, unary)
+DEF_INTERNAL_INT_FN (PARITY, ECF_CONST | ECF_NOTHROW, parity, unary)
+DEF_INTERNAL_INT_FN (POPCOUNT, ECF_CONST | ECF_NOTHROW, popcount, unary)
+
+DEF_INTERNAL_FN (GOMP_USE_SIMT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (GOMP_SIMT_ENTER, ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (GOMP_SIMT_ENTER_ALLOC, ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (GOMP_SIMT_EXIT, ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (GOMP_SIMT_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (GOMP_SIMT_VF, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (GOMP_SIMT_LAST_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (GOMP_SIMT_ORDERED_PRED, ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (GOMP_SIMT_VOTE_ANY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (GOMP_SIMT_XCHG_BFLY, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (GOMP_SIMT_XCHG_IDX, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (GOMP_SIMD_LANE, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (GOMP_SIMD_VF, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (GOMP_SIMD_LAST_LANE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_START, ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (GOMP_SIMD_ORDERED_END, ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (LOOP_VECTORIZED, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (LOOP_DIST_ALIAS, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (ANNOTATE,  ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (UBSAN_NULL, ECF_LEAF | ECF_NOTHROW, ".R.")
+DEF_INTERNAL_FN (UBSAN_BOUNDS, ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (UBSAN_VPTR, ECF_LEAF | ECF_NOTHROW, ".RR..")
+DEF_INTERNAL_FN (UBSAN_CHECK_ADD, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (UBSAN_CHECK_SUB, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (UBSAN_CHECK_MUL, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (UBSAN_PTR, ECF_LEAF | ECF_NOTHROW, ".R.")
+DEF_INTERNAL_FN (UBSAN_OBJECT_SIZE, ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (ABNORMAL_DISPATCHER, ECF_NORETURN, NULL)
+DEF_INTERNAL_FN (BUILTIN_EXPECT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (ASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW, "..R..")
+DEF_INTERNAL_FN (ASAN_MARK, ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (ASAN_POISON, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
+DEF_INTERNAL_FN (ASAN_POISON_USE, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
+DEF_INTERNAL_FN (ADD_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (SUB_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (MUL_OVERFLOW, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (TSAN_FUNC_EXIT, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (VA_ARG, ECF_NOTHROW | ECF_LEAF, NULL)
+DEF_INTERNAL_FN (VEC_CONVERT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
+
+/* An unduplicable, uncombinable function.  Generally used to preserve
+   a CFG property in the face of jump threading, tail merging or
+   other such optimizations.  The first argument distinguishes
+   between uses.  See internal-fn.h for usage.  */
+DEF_INTERNAL_FN (UNIQUE, ECF_NOTHROW, NULL)
+DEF_INTERNAL_FN (PHI, 0, NULL)
+
+/* DIM_SIZE and DIM_POS return the size of a particular compute
+   dimension and the executing thread's position within that
+   dimension.  DIM_POS is pure (and not const) so that it isn't
+   thought to clobber memory and can be gcse'd within a single
+   parallel region, but not across FORK/JOIN boundaries.  They take a
+   single INTEGER_CST argument.  This might be overly conservative.  */
+DEF_INTERNAL_FN (GOACC_DIM_SIZE, ECF_CONST | ECF_NOTHROW | ECF_LEAF, ".")
+DEF_INTERNAL_FN (GOACC_DIM_POS, ECF_PURE | ECF_NOTHROW | ECF_LEAF, ".")
+
+/* OpenACC looping abstraction.  See internal-fn.h for usage.  */
+DEF_INTERNAL_FN (GOACC_LOOP, ECF_PURE | ECF_NOTHROW, NULL)
+
+/* OpenACC reduction abstraction.  See internal-fn.h  for usage.  */
+DEF_INTERNAL_FN (GOACC_REDUCTION, ECF_NOTHROW | ECF_LEAF, NULL)
+
+/* Openacc tile abstraction. Describes the spans of the element loop.
+   GOACC_TILE (num-loops, loop-no, tile-arg, tile-mask, element-mask).  */
+DEF_INTERNAL_FN (GOACC_TILE, ECF_NOTHROW | ECF_LEAF, NULL)
+
+/* Set errno to EDOM, if GCC knows how to do that directly for the
+   current target.  */
+DEF_INTERNAL_FN (SET_EDOM, ECF_LEAF | ECF_NOTHROW, NULL)
+
+/* Atomic functions.  These don't have ECF_NOTHROW because for
+   -fnon-call-exceptions they can throw, otherwise we set
+   gimple_call_nothrow_p on it.  */
+DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_SET, ECF_LEAF, NULL)
+DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_COMPLEMENT, ECF_LEAF, NULL)
+DEF_INTERNAL_FN (ATOMIC_BIT_TEST_AND_RESET, ECF_LEAF, NULL)
+DEF_INTERNAL_FN (ATOMIC_COMPARE_EXCHANGE, ECF_LEAF, NULL)
+
+/* To implement [[fallthrough]].  */
+DEF_INTERNAL_FN (FALLTHROUGH, ECF_LEAF | ECF_NOTHROW, NULL)
+
+/* To implement __builtin_launder.  */
+DEF_INTERNAL_FN (LAUNDER, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL)
+
+/* Divmod function.  */
+DEF_INTERNAL_FN (DIVMOD, ECF_CONST | ECF_LEAF, NULL)
+
+/* A NOP function with arbitrary arguments and return value.  */
+DEF_INTERNAL_FN (NOP, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL)
+
+#undef DEF_INTERNAL_INT_FN
+#undef DEF_INTERNAL_FLT_FN
+#undef DEF_INTERNAL_FLT_FLOATN_FN
+#undef DEF_INTERNAL_SIGNED_OPTAB_FN
+#undef DEF_INTERNAL_OPTAB_FN
+#undef DEF_INTERNAL_FN
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/internal-fn.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/internal-fn.h
new file mode 100644
index 0000000..7164ee5
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/internal-fn.h
@@ -0,0 +1,231 @@
+/* Internal functions.
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_INTERNAL_FN_H
+#define GCC_INTERNAL_FN_H
+
+/* INTEGER_CST values for IFN_UNIQUE function arg-0.
+
+   UNSPEC: Undifferentiated UNIQUE.
+
+   FORK and JOIN mark the points at which OpenACC partitioned
+   execution is entered or exited.
+      DEP_VAR = UNIQUE ({FORK,JOIN}, DEP_VAR, AXIS)
+
+   HEAD_MARK and TAIL_MARK are used to demark the sequence entering
+   or leaving partitioned execution.
+      DEP_VAR = UNIQUE ({HEAD,TAIL}_MARK, REMAINING_MARKS, ...PRIMARY_FLAGS)
+
+   The PRIMARY_FLAGS only occur on the first HEAD_MARK of a sequence.  */
+#define IFN_UNIQUE_CODES				  \
+  DEF(UNSPEC),	\
+    DEF(OACC_FORK), DEF(OACC_JOIN),		\
+    DEF(OACC_HEAD_MARK), DEF(OACC_TAIL_MARK)
+
+enum ifn_unique_kind {
+#define DEF(X) IFN_UNIQUE_##X
+  IFN_UNIQUE_CODES
+#undef DEF
+};
+
+/* INTEGER_CST values for IFN_GOACC_LOOP arg-0.  Allows the precise
+   stepping of the compute geometry over the loop iterations to be
+   deferred until it is known which compiler is generating the code.
+   The action is encoded in a constant first argument.
+
+     CHUNK_MAX = LOOP (CODE_CHUNKS, DIR, RANGE, STEP, CHUNK_SIZE, MASK)
+     STEP = LOOP (CODE_STEP, DIR, RANGE, STEP, CHUNK_SIZE, MASK)
+     OFFSET = LOOP (CODE_OFFSET, DIR, RANGE, STEP, CHUNK_SIZE, MASK, CHUNK_NO)
+     BOUND = LOOP (CODE_BOUND, DIR, RANGE, STEP, CHUNK_SIZE, MASK, OFFSET)
+
+     DIR - +1 for up loop, -1 for down loop
+     RANGE - Range of loop (END - BASE)
+     STEP - iteration step size
+     CHUNKING - size of chunking, (constant zero for no chunking)
+     CHUNK_NO - chunk number
+     MASK - partitioning mask.  */
+
+#define IFN_GOACC_LOOP_CODES \
+  DEF(CHUNKS), DEF(STEP), DEF(OFFSET), DEF(BOUND)
+enum ifn_goacc_loop_kind {
+#define DEF(X) IFN_GOACC_LOOP_##X
+  IFN_GOACC_LOOP_CODES
+#undef DEF
+};
+
+/* The GOACC_REDUCTION function defines a generic interface to support
+   gang, worker and vector reductions.  All calls are of the following
+   form:
+
+     V = REDUCTION (CODE, REF_TO_RES, LOCAL_VAR, LEVEL, OP, OFFSET)
+
+   REF_TO_RES - is a reference to the original reduction varl, may be NULL
+   LOCAL_VAR is the intermediate reduction variable
+   LEVEL corresponds to the GOMP_DIM of the reduction
+   OP is the tree code of the reduction operation
+   OFFSET may be used as an offset into a reduction array for the
+          reductions occuring at this level.
+   In general the return value is LOCAL_VAR, which creates a data
+   dependency between calls operating on the same reduction.  */
+
+#define IFN_GOACC_REDUCTION_CODES \
+  DEF(SETUP), DEF(INIT), DEF(FINI), DEF(TEARDOWN)
+enum ifn_goacc_reduction_kind {
+#define DEF(X) IFN_GOACC_REDUCTION_##X
+  IFN_GOACC_REDUCTION_CODES
+#undef DEF
+};
+
+/* Initialize internal function tables.  */
+
+extern void init_internal_fns ();
+
+/* Return the name of internal function FN.  The name is only meaningful
+   for dumps; it has no linkage.  */
+
+extern const char *const internal_fn_name_array[];
+
+static inline const char *
+internal_fn_name (enum internal_fn fn)
+{
+  return internal_fn_name_array[(int) fn];
+}
+
+extern internal_fn lookup_internal_fn (const char *);
+
+/* Return the ECF_* flags for function FN.  */
+
+extern const int internal_fn_flags_array[];
+
+static inline int
+internal_fn_flags (enum internal_fn fn)
+{
+  return internal_fn_flags_array[(int) fn];
+}
+
+/* Return fnspec for function FN.  */
+
+extern GTY(()) const_tree internal_fn_fnspec_array[IFN_LAST + 1];
+
+static inline const_tree
+internal_fn_fnspec (enum internal_fn fn)
+{
+  return internal_fn_fnspec_array[(int) fn];
+}
+
+/* Describes an internal function that maps directly to an optab.  */
+struct direct_internal_fn_info
+{
+  /* optabs can be parameterized by one or two modes.  These fields describe
+     how to select those modes from the types of the return value and
+     arguments.  A value of -1 says that the mode is determined by the
+     return type while a value N >= 0 says that the mode is determined by
+     the type of argument N.  A value of -2 says that this internal
+     function isn't directly mapped to an optab.  */
+  signed int type0 : 8;
+  signed int type1 : 8;
+  /* True if the function is pointwise, so that it can be vectorized by
+     converting the return type and all argument types to vectors of the
+     same number of elements.  E.g. we can vectorize an IFN_SQRT on
+     floats as an IFN_SQRT on vectors of N floats.
+
+     This only needs 1 bit, but occupies the full 16 to ensure a nice
+     layout.  */
+  unsigned int vectorizable : 16;
+};
+
+extern const direct_internal_fn_info direct_internal_fn_array[IFN_LAST + 1];
+
+/* Return true if FN is mapped directly to an optab.  */
+
+inline bool
+direct_internal_fn_p (internal_fn fn)
+{
+  return direct_internal_fn_array[fn].type0 >= -1;
+}
+
+/* Return true if FN is a direct internal function that can be vectorized by
+   converting the return type and all argument types to vectors of the same
+   number of elements.  E.g. we can vectorize an IFN_SQRT on floats as an
+   IFN_SQRT on vectors of N floats.  */
+
+inline bool
+vectorizable_internal_fn_p (internal_fn fn)
+{
+  return direct_internal_fn_array[fn].vectorizable;
+}
+
+/* Return optab information about internal function FN.  Only meaningful
+   if direct_internal_fn_p (FN).  */
+
+inline const direct_internal_fn_info &
+direct_internal_fn (internal_fn fn)
+{
+  gcc_checking_assert (direct_internal_fn_p (fn));
+  return direct_internal_fn_array[fn];
+}
+
+extern tree_pair direct_internal_fn_types (internal_fn, tree, tree *);
+extern tree_pair direct_internal_fn_types (internal_fn, gcall *);
+extern bool direct_internal_fn_supported_p (internal_fn, tree_pair,
+					    optimization_type);
+extern bool direct_internal_fn_supported_p (internal_fn, tree,
+					    optimization_type);
+extern bool direct_internal_fn_supported_p (gcall *, optimization_type);
+
+/* Return true if FN is supported for types TYPE0 and TYPE1 when the
+   optimization type is OPT_TYPE.  The types are those associated with
+   the "type0" and "type1" fields of FN's direct_internal_fn_info
+   structure.  */
+
+inline bool
+direct_internal_fn_supported_p (internal_fn fn, tree type0, tree type1,
+				optimization_type opt_type)
+{
+  return direct_internal_fn_supported_p (fn, tree_pair (type0, type1),
+					 opt_type);
+}
+
+extern int first_commutative_argument (internal_fn);
+
+extern bool set_edom_supported_p (void);
+
+extern internal_fn get_conditional_internal_fn (tree_code);
+extern internal_fn get_conditional_internal_fn (internal_fn);
+extern tree_code conditional_internal_fn_code (internal_fn);
+extern internal_fn get_unconditional_internal_fn (internal_fn);
+extern bool can_interpret_as_conditional_op_p (gimple *, tree *,
+					       tree_code *, tree (&)[3],
+					       tree *);
+
+extern bool internal_load_fn_p (internal_fn);
+extern bool internal_store_fn_p (internal_fn);
+extern bool internal_gather_scatter_fn_p (internal_fn);
+extern int internal_fn_mask_index (internal_fn);
+extern int internal_fn_stored_value_index (internal_fn);
+extern bool internal_gather_scatter_fn_supported_p (internal_fn, tree,
+						    tree, signop, int);
+
+extern void expand_internal_call (gcall *);
+extern void expand_internal_call (internal_fn, gcall *);
+extern void expand_PHI (internal_fn, gcall *);
+
+extern bool vectorized_internal_fn_supported_p (internal_fn, tree);
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/intl.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/intl.h
new file mode 100644
index 0000000..0baef54
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/intl.h
@@ -0,0 +1,69 @@
+/* intl.h - internationalization
+   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+
+   GCC is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_INTL_H
+#define GCC_INTL_H
+
+#ifdef HAVE_LOCALE_H
+# include <locale.h>
+#endif
+
+#ifndef HAVE_SETLOCALE
+# define setlocale(category, locale) (locale)
+#endif
+
+#ifdef ENABLE_NLS
+#include <libintl.h>
+extern void gcc_init_libintl (void);
+extern size_t gcc_gettext_width (const char *);
+#else
+/* Stubs.  */
+# undef textdomain
+# define textdomain(domain) (domain)
+# undef bindtextdomain
+# define bindtextdomain(domain, directory) (domain)
+# undef gettext
+# define gettext(msgid) (msgid)
+# define ngettext(singular,plural,n) fake_ngettext (singular, plural, n)
+# define gcc_init_libintl()	/* nothing */
+# define gcc_gettext_width(s) strlen (s)
+
+extern const char *fake_ngettext (const char *singular, const char *plural,
+				  unsigned long int n);
+
+#endif
+
+#ifndef _
+# define _(msgid) gettext (msgid)
+#endif
+
+#ifndef N_
+# define N_(msgid) msgid
+#endif
+
+#ifndef G_
+# define G_(gmsgid) gmsgid
+#endif
+
+extern char *get_spaces (const char *);
+
+extern const char *open_quote;
+extern const char *close_quote;
+extern const char *locale_encoding;
+extern bool locale_utf8;
+
+#endif /* intl.h */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-fnsummary.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-fnsummary.h
new file mode 100644
index 0000000..0f08e84
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-fnsummary.h
@@ -0,0 +1,295 @@
+/* IPA function body analysis.
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Contributed by Jan Hubicka
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_IPA_SUMMARY_H
+#define GCC_IPA_SUMMARY_H
+
+#include "sreal.h"
+#include "ipa-predicate.h"
+
+
+/* Hints are reasons why IPA heuristics should preffer specializing given
+   function.  They are represtented as bitmap of the following values.  */
+enum ipa_hints_vals {
+  /* When specialization turns indirect call into a direct call,
+     it is good idea to do so.  */
+  INLINE_HINT_indirect_call = 1,
+  /* Inlining may make loop iterations or loop stride known.  It is good idea
+     to do so because it enables loop optimizatoins.  */
+  INLINE_HINT_loop_iterations = 2,
+  INLINE_HINT_loop_stride = 4,
+  /* Inlining within same strongly connected component of callgraph is often
+     a loss due to increased stack frame usage and prologue setup costs.  */
+  INLINE_HINT_same_scc = 8,
+  /* Inlining functions in strongly connected component is not such a great
+     win.  */
+  INLINE_HINT_in_scc = 16,
+  /* If function is declared inline by user, it may be good idea to inline
+     it.  Set by simple_edge_hints in ipa-inline-analysis.c.  */
+  INLINE_HINT_declared_inline = 32,
+  /* Programs are usually still organized for non-LTO compilation and thus
+     if functions are in different modules, inlining may not be so important. 
+     Set by simple_edge_hints in ipa-inline-analysis.c.   */
+  INLINE_HINT_cross_module = 64,
+  /* If array indexes of loads/stores become known there may be room for
+     further optimization.  */
+  INLINE_HINT_array_index = 128,
+  /* We know that the callee is hot by profile.  */
+  INLINE_HINT_known_hot = 256
+};
+
+typedef int ipa_hints;
+
+/* Simple description of whether a memory load or a condition refers to a load
+   from an aggregate and if so, how and where from in the aggregate.
+   Individual fields have the same meaning like fields with the same name in
+   struct condition.  */
+
+struct agg_position_info
+{
+  HOST_WIDE_INT offset;
+  bool agg_contents;
+  bool by_ref;
+};
+
+/* Representation of function body size and time depending on the call
+   context.  We keep simple array of record, every containing of predicate
+   and time/size to account.  */
+struct GTY(()) size_time_entry
+{
+  /* Predicate for code to be executed.  */
+  predicate exec_predicate;
+  /* Predicate for value to be constant and optimized out in a specialized copy.
+     When deciding on specialization this makes it possible to see how much
+     the executed code paths will simplify.  */
+  predicate nonconst_predicate;
+  int size;
+  sreal GTY((skip)) time;
+};
+
+/* Function inlining information.  */
+struct GTY(()) ipa_fn_summary
+{
+  /* Keep all field empty so summary dumping works during its computation.
+     This is useful for debugging.  */
+  ipa_fn_summary ()
+    : estimated_self_stack_size (0), self_size (0), min_size (0),
+      inlinable (false), single_caller (false),
+      fp_expressions (false), estimated_stack_size (false),
+      stack_frame_offset (false), time (0), size (0), conds (NULL),
+      size_time_table (NULL), loop_iterations (NULL), loop_stride (NULL),
+      array_index (NULL), growth (0), scc_no (0)
+  {
+  }
+
+  /* Copy constructor.  */
+  ipa_fn_summary (const ipa_fn_summary &s)
+    : estimated_self_stack_size (s.estimated_self_stack_size),
+    self_size (s.self_size), min_size (s.min_size),
+    inlinable (s.inlinable), single_caller (s.single_caller),
+    fp_expressions (s.fp_expressions),
+    estimated_stack_size (s.estimated_stack_size),
+    stack_frame_offset (s.stack_frame_offset), time (s.time), size (s.size),
+    conds (s.conds), size_time_table (s.size_time_table),
+    loop_iterations (s.loop_iterations), loop_stride (s.loop_stride),
+    array_index (s.array_index), growth (s.growth), scc_no (s.scc_no)
+  {}
+
+  /* Default constructor.  */
+  ~ipa_fn_summary ();
+
+  /* Information about the function body itself.  */
+
+  /* Estimated stack frame consumption by the function.  */
+  HOST_WIDE_INT estimated_self_stack_size;
+  /* Size of the function body.  */
+  int self_size;
+  /* Minimal size increase after inlining.  */
+  int min_size;
+
+  /* False when there something makes inlining impossible (such as va_arg).  */
+  unsigned inlinable : 1;
+  /* True wen there is only one caller of the function before small function
+     inlining.  */
+  unsigned int single_caller : 1;
+  /* True if function contains any floating point expressions.  */
+  unsigned int fp_expressions : 1;
+
+  /* Information about function that will result after applying all the
+     inline decisions present in the callgraph.  Generally kept up to
+     date only for functions that are not inline clones. */
+
+  /* Estimated stack frame consumption by the function.  */
+  HOST_WIDE_INT estimated_stack_size;
+  /* Expected offset of the stack frame of function.  */
+  HOST_WIDE_INT stack_frame_offset;
+  /* Estimated size of the function after inlining.  */
+  sreal GTY((skip)) time;
+  int size;
+
+  /* Conditional size/time information.  The summaries are being
+     merged during inlining.  */
+  conditions conds;
+  vec<size_time_entry, va_gc> *size_time_table;
+
+  /* Predicate on when some loop in the function becomes to have known
+     bounds.   */
+  predicate * GTY((skip)) loop_iterations;
+  /* Predicate on when some loop in the function becomes to have known
+     stride.   */
+  predicate * GTY((skip)) loop_stride;
+  /* Predicate on when some array indexes become constants.  */
+  predicate * GTY((skip)) array_index;
+  /* Estimated growth for inlining all copies of the function before start
+     of small functions inlining.
+     This value will get out of date as the callers are duplicated, but
+     using up-to-date value in the badness metric mean a lot of extra
+     expenses.  */
+  int growth;
+  /* Number of SCC on the beginning of inlining process.  */
+  int scc_no;
+
+  /* Record time and size under given predicates.  */
+  void account_size_time (int, sreal, const predicate &, const predicate &);
+
+  /* We keep values scaled up, so fractional sizes can be accounted.  */
+  static const int size_scale = 2;
+};
+
+class GTY((user)) ipa_fn_summary_t:
+  public fast_function_summary <ipa_fn_summary *, va_gc>
+{
+public:
+  ipa_fn_summary_t (symbol_table *symtab):
+    fast_function_summary <ipa_fn_summary *, va_gc> (symtab) {}
+
+  static ipa_fn_summary_t *create_ggc (symbol_table *symtab)
+  {
+    struct ipa_fn_summary_t *summary = new (ggc_alloc <ipa_fn_summary_t> ())
+      ipa_fn_summary_t (symtab);
+    summary->disable_insertion_hook ();
+    return summary;
+  }
+
+  /* Remove ipa_fn_summary for all callees of NODE.  */
+  void remove_callees (cgraph_node *node);
+
+  virtual void insert (cgraph_node *, ipa_fn_summary *);
+  virtual void remove (cgraph_node *node, ipa_fn_summary *)
+  {
+    remove_callees (node);
+  }
+
+  virtual void duplicate (cgraph_node *src, cgraph_node *dst,
+			  ipa_fn_summary *src_data, ipa_fn_summary *dst_data);
+};
+
+extern GTY(()) fast_function_summary <ipa_fn_summary *, va_gc>
+  *ipa_fn_summaries;
+
+/* Information kept about callgraph edges.  */
+struct ipa_call_summary
+{
+  /* Keep all field empty so summary dumping works during its computation.
+     This is useful for debugging.  */
+  ipa_call_summary ()
+    : predicate (NULL), param (vNULL), call_stmt_size (0), call_stmt_time (0),
+      loop_depth (0), is_return_callee_uncaptured (false)
+    {
+    }
+
+  /* Copy constructor.  */
+  ipa_call_summary (const ipa_call_summary &s):
+    predicate (s.predicate), param (s.param), call_stmt_size (s.call_stmt_size),
+    call_stmt_time (s.call_stmt_time), loop_depth (s.loop_depth),
+    is_return_callee_uncaptured (s.is_return_callee_uncaptured)
+  {
+  }
+
+  /* Default destructor.  */
+  ~ipa_call_summary ();
+
+  class predicate *predicate;
+  /* Vector indexed by parameters.  */
+  vec<inline_param_summary> param;
+  /* Estimated size and time of the call statement.  */
+  int call_stmt_size;
+  int call_stmt_time;
+  /* Depth of loop nest, 0 means no nesting.  */
+  unsigned int loop_depth;
+  /* Indicates whether the caller returns the value of it's callee.  */
+  bool is_return_callee_uncaptured;
+};
+
+class ipa_call_summary_t: public fast_call_summary <ipa_call_summary *, va_heap>
+{
+public:
+  ipa_call_summary_t (symbol_table *symtab):
+    fast_call_summary <ipa_call_summary *, va_heap> (symtab) {}
+
+  /* Hook that is called by summary when an edge is duplicated.  */
+  virtual void duplicate (cgraph_edge *src, cgraph_edge *dst,
+			  ipa_call_summary *src_data,
+			  ipa_call_summary *dst_data);
+};
+
+extern fast_call_summary <ipa_call_summary *, va_heap> *ipa_call_summaries;
+
+/* In ipa-fnsummary.c  */
+void ipa_debug_fn_summary (struct cgraph_node *);
+void ipa_dump_fn_summaries (FILE *f);
+void ipa_dump_fn_summary (FILE *f, struct cgraph_node *node);
+void ipa_dump_hints (FILE *f, ipa_hints);
+void ipa_free_fn_summary (void);
+void inline_analyze_function (struct cgraph_node *node);
+void estimate_ipcp_clone_size_and_time (struct cgraph_node *,
+					vec<tree>,
+					vec<ipa_polymorphic_call_context>,
+					vec<ipa_agg_jump_function_p>,
+					int *, sreal *, sreal *,
+				        ipa_hints *);
+void ipa_merge_fn_summary_after_inlining (struct cgraph_edge *edge);
+void ipa_update_overall_fn_summary (struct cgraph_node *node);
+void compute_fn_summary (struct cgraph_node *, bool);
+
+
+void evaluate_properties_for_edge (struct cgraph_edge *e, bool inline_p,
+				   clause_t *clause_ptr,
+				   clause_t *nonspec_clause_ptr,
+				   vec<tree> *known_vals_ptr,
+				   vec<ipa_polymorphic_call_context>
+				   *known_contexts_ptr,
+				   vec<ipa_agg_jump_function_p> *);
+void estimate_node_size_and_time (struct cgraph_node *node,
+				  clause_t possible_truths,
+				  clause_t nonspec_possible_truths,
+				  vec<tree> known_vals,
+				  vec<ipa_polymorphic_call_context>,
+				  vec<ipa_agg_jump_function_p> known_aggs,
+				  int *ret_size, int *ret_min_size,
+				  sreal *ret_time,
+				  sreal *ret_nonspecialized_time,
+				  ipa_hints *ret_hints,
+				  vec<inline_param_summary>
+				  inline_param_summary);
+
+void ipa_fnsummary_c_finalize (void);
+
+#endif /* GCC_IPA_FNSUMMARY_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-icf-gimple.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-icf-gimple.h
new file mode 100644
index 0000000..0035db3
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-icf-gimple.h
@@ -0,0 +1,278 @@
+/* Interprocedural semantic function equality pass
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+   Contributed by Jan Hubicka <hubicka@ucw.cz> and Martin Liska <mliska@suse.cz>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Gimple identical code folding (class func_checker) is an infastructure
+   capable of comparing two given functions. The class compares every
+   gimple statement and uses many dictionaries to map source and target
+   SSA_NAMEs, declarations and other components.
+
+   To use the infrastructure, create an instanse of func_checker and call
+   a comparsion function based on type of gimple statement.  */
+
+/* Prints string STRING to a FILE with a given number of SPACE_COUNT.  */
+#define FPUTS_SPACES(file, space_count, string) \
+  fprintf (file, "%*s" string, space_count, " ");
+
+/* fprintf function wrapper that transforms given FORMAT to follow given
+   number for SPACE_COUNT and call fprintf for a FILE.  */
+#define FPRINTF_SPACES(file, space_count, format, ...) \
+  fprintf (file, "%*s" format, space_count, " ", ##__VA_ARGS__);
+
+/* Prints a MESSAGE to dump_file if exists. FUNC is name of function and
+   LINE is location in the source file.  */
+
+static inline void
+dump_message_1 (const char *message, const char *func, unsigned int line)
+{
+  if (dump_file && (dump_flags & TDF_DETAILS))
+    fprintf (dump_file, "  debug message: %s (%s:%u)\n", message, func, line);
+}
+
+/* Prints a MESSAGE to dump_file if exists.  */
+#define dump_message(message) dump_message_1 (message, __func__, __LINE__)
+
+/* Logs a MESSAGE to dump_file if exists and returns false. FUNC is name
+   of function and LINE is location in the source file.  */
+
+static inline bool
+return_false_with_message_1 (const char *message, const char *func,
+			     unsigned int line)
+{
+  if (dump_file && (dump_flags & TDF_DETAILS))
+    fprintf (dump_file, "  false returned: '%s' (%s:%u)\n", message, func, line);
+  return false;
+}
+
+/* Logs a MESSAGE to dump_file if exists and returns false.  */
+#define return_false_with_msg(message) \
+  return_false_with_message_1 (message, __func__, __LINE__)
+
+/* Return false and log that false value is returned.  */
+#define return_false() return_false_with_msg ("")
+
+/* Logs return value if RESULT is false. FUNC is name of function and LINE
+   is location in the source file.  */
+
+static inline bool
+return_with_result (bool result, const char *func, unsigned int line)
+{
+  if (!result && dump_file && (dump_flags & TDF_DETAILS))
+    fprintf (dump_file, "  false returned: (%s:%u)\n", func, line);
+
+  return result;
+}
+
+/* Logs return value if RESULT is false.  */
+#define return_with_debug(result) return_with_result (result, __func__, __LINE__)
+
+/* Verbose logging function logging statements S1 and S2 of a CODE.
+   FUNC is name of function and LINE is location in the source file.  */
+
+static inline bool
+return_different_stmts_1 (gimple *s1, gimple *s2, const char *code,
+			  const char *func, unsigned int line)
+{
+  if (dump_file && (dump_flags & TDF_DETAILS))
+    {
+      fprintf (dump_file, "  different statement for code: %s (%s:%u):\n",
+	       code, func, line);
+
+      print_gimple_stmt (dump_file, s1, 3, TDF_DETAILS);
+      print_gimple_stmt (dump_file, s2, 3, TDF_DETAILS);
+    }
+
+  return false;
+}
+
+/* Verbose logging function logging statements S1 and S2 of a CODE.  */
+#define return_different_stmts(s1, s2, code) \
+  return_different_stmts_1 (s1, s2, code, __func__, __LINE__)
+
+namespace ipa_icf_gimple {
+
+/* Basic block struct for semantic equality pass.  */
+class sem_bb
+{
+public:
+  sem_bb (basic_block bb_, unsigned nondbg_stmt_count_, unsigned edge_count_):
+    bb (bb_), nondbg_stmt_count (nondbg_stmt_count_), edge_count (edge_count_) {}
+
+  /* Basic block the structure belongs to.  */
+  basic_block bb;
+
+  /* Number of non-debug statements in the basic block.  */
+  unsigned nondbg_stmt_count;
+
+  /* Number of edges connected to the block.  */
+  unsigned edge_count;
+};
+
+/* A class aggregating all connections and semantic equivalents
+   for a given pair of semantic function candidates.  */
+class func_checker
+{
+public:
+  /* Initialize internal structures for a given SOURCE_FUNC_DECL and
+     TARGET_FUNC_DECL. Strict polymorphic comparison is processed if
+     an option COMPARE_POLYMORPHIC is true. For special cases, one can
+     set IGNORE_LABELS to skip label comparison.
+     Similarly, IGNORE_SOURCE_DECLS and IGNORE_TARGET_DECLS are sets
+     of declarations that can be skipped.  */
+  func_checker (tree source_func_decl, tree target_func_decl,
+		bool compare_polymorphic,
+		bool ignore_labels = false,
+		hash_set<symtab_node *> *ignored_source_nodes = NULL,
+		hash_set<symtab_node *> *ignored_target_nodes = NULL);
+
+  /* Memory release routine.  */
+  ~func_checker();
+
+  /* Function visits all gimple labels and creates corresponding
+     mapping between basic blocks and labels.  */
+  void parse_labels (sem_bb *bb);
+
+  /* Basic block equivalence comparison function that returns true if
+     basic blocks BB1 and BB2 correspond.  */
+  bool compare_bb (sem_bb *bb1, sem_bb *bb2);
+
+  /* Verifies that trees T1 and T2 are equivalent from perspective of ICF.  */
+  bool compare_ssa_name (tree t1, tree t2);
+
+  /* Verification function for edges E1 and E2.  */
+  bool compare_edge (edge e1, edge e2);
+
+  /* Verifies for given GIMPLEs S1 and S2 that
+     call statements are semantically equivalent.  */
+  bool compare_gimple_call (gcall *s1, gcall *s2);
+
+  /* Verifies for given GIMPLEs S1 and S2 that
+     assignment statements are semantically equivalent.  */
+  bool compare_gimple_assign (gimple *s1, gimple *s2);
+
+  /* Verifies for given GIMPLEs S1 and S2 that
+     condition statements are semantically equivalent.  */
+  bool compare_gimple_cond (gimple *s1, gimple *s2);
+
+  /* Verifies for given GIMPLE_LABEL stmts S1 and S2 that
+     label statements are semantically equivalent.  */
+  bool compare_gimple_label (const glabel *s1, const glabel *s2);
+
+  /* Verifies for given GIMPLE_SWITCH stmts S1 and S2 that
+     switch statements are semantically equivalent.  */
+  bool compare_gimple_switch (const gswitch *s1, const gswitch *s2);
+
+  /* Verifies for given GIMPLE_RETURN stmts S1 and S2 that
+     return statements are semantically equivalent.  */
+  bool compare_gimple_return (const greturn *s1, const greturn *s2);
+
+  /* Verifies for given GIMPLEs S1 and S2 that
+     goto statements are semantically equivalent.  */
+  bool compare_gimple_goto (gimple *s1, gimple *s2);
+
+  /* Verifies for given GIMPLE_RESX stmts S1 and S2 that
+     resx statements are semantically equivalent.  */
+  bool compare_gimple_resx (const gresx *s1, const gresx *s2);
+
+  /* Verifies for given GIMPLE_ASM stmts S1 and S2 that ASM statements
+     are equivalent.
+     For the beginning, the pass only supports equality for
+     '__asm__ __volatile__ ("", "", "", "memory")'.  */
+  bool compare_gimple_asm (const gasm *s1, const gasm *s2);
+
+  /* Verification function for declaration trees T1 and T2.  */
+  bool compare_decl (tree t1, tree t2);
+
+  /* Verifies that tree labels T1 and T2 correspond.  */
+  bool compare_tree_ssa_label (tree t1, tree t2);
+
+  /* Function compare for equality given memory operands T1 and T2.  */
+  bool compare_memory_operand (tree t1, tree t2);
+
+  /* Function compare for equality given trees T1 and T2 which
+     can be either a constant or a declaration type.  */
+  bool compare_cst_or_decl (tree t1, tree t2);
+
+  /* Function responsible for comparison of various operands T1 and T2.
+     If these components, from functions FUNC1 and FUNC2, are equal, true
+     is returned.  */
+  bool compare_operand (tree t1, tree t2);
+
+  /* Compares GIMPLE ASM inputs (or outputs) where we iterate tree chain
+     and compare both TREE_PURPOSEs and TREE_VALUEs.  */
+  bool compare_asm_inputs_outputs (tree t1, tree t2);
+
+  /* Verifies that trees T1 and T2, representing function declarations
+     are equivalent from perspective of ICF.  */
+  bool compare_function_decl (tree t1, tree t2);
+
+  /* Verifies that trees T1 and T2 do correspond.  */
+  bool compare_variable_decl (tree t1, tree t2);
+
+  /* Return true if types are compatible for polymorphic call analysis.
+     COMPARE_PTR indicates if polymorphic type comparsion should be
+     done for pointers, too.  */
+  static bool compatible_polymorphic_types_p (tree t1, tree t2,
+					      bool compare_ptr);
+
+  /* Return true if types are compatible from perspective of ICF.
+     FIRST_ARGUMENT indicates if the comparison is called for
+     first parameter of a function.  */
+  static bool compatible_types_p (tree t1, tree t2);
+
+
+private:
+  /* Vector mapping source SSA names to target ones.  */
+  vec <int> m_source_ssa_names;
+
+  /* Vector mapping target SSA names to source ones.  */
+  vec <int> m_target_ssa_names;
+
+  /* Source TREE function declaration.  */
+  tree m_source_func_decl;
+
+  /* Target TREE function declaration.  */
+  tree m_target_func_decl;
+
+  /* Source symbol nodes that should be skipped by
+     declaration comparison.  */
+  hash_set<symtab_node *> *m_ignored_source_nodes;
+
+  /* Target symbol nodes that should be skipped by
+     declaration comparison.  */
+  hash_set<symtab_node *> *m_ignored_target_nodes;
+
+  /* Source to target edge map.  */
+  hash_map <edge, edge> m_edge_map;
+
+  /* Source to target declaration map.  */
+  hash_map <tree, tree> m_decl_map;
+
+  /* Label to basic block index mapping.  */
+  hash_map <tree, int> m_label_bb_map;
+
+  /* Flag if polymorphic comparison should be executed.  */
+  bool m_compare_polymorphic;
+
+  /* Flag if ignore labels in comparison.  */
+  bool m_ignore_labels;
+};
+
+} // ipa_icf_gimple namespace
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-icf.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-icf.h
new file mode 100644
index 0000000..27d588c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-icf.h
@@ -0,0 +1,649 @@
+/* Interprocedural semantic function equality pass
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+   Contributed by Jan Hubicka <hubicka@ucw.cz> and Martin Liska <mliska@suse.cz>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+namespace ipa_icf {
+class sem_item;
+
+/* Congruence class encompasses a collection of either functions or
+   read-only variables. These items are considered to be equivalent
+   if not proved the oposite.  */
+class congruence_class
+{
+public:
+  /* Congruence class constructor for a new class with _ID.  */
+  congruence_class (unsigned int _id): in_worklist (false), id(_id)
+  {
+  }
+
+  /* Destructor.  */
+  ~congruence_class ()
+  {
+  }
+
+  /* Dump function prints all class members to a FILE with an INDENT.  */
+  void dump (FILE *file, unsigned int indent = 0) const;
+
+  /* Returns true if there's a member that is used from another group.  */
+  bool is_class_used (void);
+
+  /* Flag is used in case we want to remove a class from worklist and
+     delete operation is quite expensive for
+     the data structure (linked list).  */
+  bool in_worklist;
+
+  /* Vector of all group members.  */
+  auto_vec <sem_item *> members;
+
+  /* Global unique class identifier.  */
+  unsigned int id;
+};
+
+/* Semantic item type enum.  */
+enum sem_item_type
+{
+  FUNC,
+  VAR
+};
+
+/* Class is container for address references for a symtab_node.  */
+
+class symbol_compare_collection
+{
+public:
+  /* Constructor.  */
+  symbol_compare_collection (symtab_node *node);
+
+  /* Destructor.  */
+  ~symbol_compare_collection ()
+  {
+    m_references.release ();
+    m_interposables.release ();
+  }
+
+  /* Vector of address references.  */
+  vec<symtab_node *> m_references;
+
+  /* Vector of interposable references.  */
+  vec<symtab_node *> m_interposables;
+};
+
+/* Hash traits for symbol_compare_collection map.  */
+
+struct symbol_compare_hash : nofree_ptr_hash <symbol_compare_collection>
+{
+  static hashval_t
+  hash (value_type v)
+  {
+    inchash::hash hstate;
+    hstate.add_int (v->m_references.length ());
+
+    for (unsigned i = 0; i < v->m_references.length (); i++)
+      hstate.add_int (v->m_references[i]->ultimate_alias_target ()->order);
+
+    hstate.add_int (v->m_interposables.length ());
+
+    for (unsigned i = 0; i < v->m_interposables.length (); i++)
+      hstate.add_int (v->m_interposables[i]->ultimate_alias_target ()->order);
+
+    return hstate.end ();
+  }
+
+  static bool
+  equal (value_type a, value_type b)
+  {
+    if (a->m_references.length () != b->m_references.length ()
+	|| a->m_interposables.length () != b->m_interposables.length ())
+      return false;
+
+    for (unsigned i = 0; i < a->m_references.length (); i++)
+      if (a->m_references[i]->equal_address_to (b->m_references[i]) != 1)
+	return false;
+
+    for (unsigned i = 0; i < a->m_interposables.length (); i++)
+      if (!a->m_interposables[i]->semantically_equivalent_p
+	(b->m_interposables[i]))
+	return false;
+
+    return true;
+  }
+};
+
+
+/* Semantic item usage pair.  */
+class sem_usage_pair
+{
+public:
+  /* Constructor for key value pair, where _ITEM is key and _INDEX is a target.  */
+  sem_usage_pair (sem_item *_item, unsigned int _index);
+
+  /* Target semantic item where an item is used.  */
+  sem_item *item;
+
+  /* Index of usage of such an item.  */
+  unsigned int index;
+};
+
+typedef std::pair<symtab_node *, symtab_node *> symtab_pair;
+
+/* Semantic item is a base class that encapsulates all shared functionality
+   for both semantic function and variable items.  */
+class sem_item
+{
+public:
+  /* Semantic item constructor for a node of _TYPE, where STACK is used
+     for bitmap memory allocation.  */
+  sem_item (sem_item_type _type, bitmap_obstack *stack);
+
+  /* Semantic item constructor for a node of _TYPE, where STACK is used
+     for bitmap memory allocation.  The item is based on symtab node _NODE.  */
+  sem_item (sem_item_type _type, symtab_node *_node, bitmap_obstack *stack);
+
+  virtual ~sem_item ();
+
+  /* Dump function for debugging purpose.  */
+  DEBUG_FUNCTION void dump (void);
+
+  /* Initialize semantic item by info reachable during LTO WPA phase.  */
+  virtual void init_wpa (void) = 0;
+
+  /* Semantic item initialization function.  */
+  virtual void init (void) = 0;
+
+  /* Add reference to a semantic TARGET.  */
+  void add_reference (sem_item *target);
+
+  /* Fast equality function based on knowledge known in WPA.  */
+  virtual bool equals_wpa (sem_item *item,
+			   hash_map <symtab_node *, sem_item *> &ignored_nodes) = 0;
+
+  /* Returns true if the item equals to ITEM given as arguemnt.  */
+  virtual bool equals (sem_item *item,
+		       hash_map <symtab_node *, sem_item *> &ignored_nodes) = 0;
+
+  /* References independent hash function.  */
+  virtual hashval_t get_hash (void) = 0;
+
+  /* Set new hash value of the item.  */
+  void set_hash (hashval_t hash);
+
+  /* Merges instance with an ALIAS_ITEM, where alias, thunk or redirection can
+     be applied.  */
+  virtual bool merge (sem_item *alias_item) = 0;
+
+  /* Dump symbol to FILE.  */
+  virtual void dump_to_file (FILE *file) = 0;
+
+  /* Update hash by address sensitive references.  */
+  void update_hash_by_addr_refs (hash_map <symtab_node *,
+				 sem_item *> &m_symtab_node_map);
+
+  /* Update hash by computed local hash values taken from different
+     semantic items.  */
+  void update_hash_by_local_refs (hash_map <symtab_node *,
+				  sem_item *> &m_symtab_node_map);
+
+  /* Return base tree that can be used for compatible_types_p and
+     contains_polymorphic_type_p comparison.  */
+  static bool get_base_types (tree *t1, tree *t2);
+
+  /* Return true if target supports alias symbols.  */
+  bool target_supports_symbol_aliases_p (void);
+
+  /* Item type.  */
+  sem_item_type type;
+
+  /* Symtab node.  */
+  symtab_node *node;
+
+  /* Declaration tree node.  */
+  tree decl;
+
+  /* Semantic references used that generate congruence groups.  */
+  vec <sem_item *> refs;
+
+  /* Pointer to a congruence class the item belongs to.  */
+  congruence_class *cls;
+
+  /* Index of the item in a class belonging to.  */
+  unsigned int index_in_class;
+
+  /* List of semantic items where the instance is used.  */
+  vec <sem_usage_pair *> usages;
+
+  /* A bitmap with indices of all classes referencing this item.  */
+  bitmap usage_index_bitmap;
+
+  /* List of tree references (either FUNC_DECL or VAR_DECL).  */
+  vec <tree> tree_refs;
+
+  /* A set with symbol table references.  */
+  hash_set <symtab_node *> refs_set;
+
+  /* Temporary hash used where hash values of references are added.  */
+  hashval_t global_hash;
+protected:
+  /* Cached, once calculated hash for the item.  */
+
+  /* Accumulate to HSTATE a hash of expression EXP.  */
+  static void add_expr (const_tree exp, inchash::hash &hstate);
+  /* Accumulate to HSTATE a hash of type T.  */
+  static void add_type (const_tree t, inchash::hash &hstate);
+
+  /* Compare properties of symbol that does not affect semantics of symbol
+     itself but affects semantics of its references.
+     If ADDRESS is true, do extra checking needed for IPA_REF_ADDR.  */
+  static bool compare_referenced_symbol_properties (symtab_node *used_by,
+						    symtab_node *n1,
+					            symtab_node *n2,
+					            bool address);
+
+  /* Hash properties compared by compare_referenced_symbol_properties.  */
+  void hash_referenced_symbol_properties (symtab_node *ref,
+					  inchash::hash &hstate,
+					  bool address);
+
+  /* For a given symbol table nodes N1 and N2, we check that FUNCTION_DECLs
+     point to a same function. Comparison can be skipped if IGNORED_NODES
+     contains these nodes.  ADDRESS indicate if address is taken.  */
+  bool compare_symbol_references (hash_map <symtab_node *, sem_item *>
+				  &ignored_nodes,
+				  symtab_node *n1, symtab_node *n2,
+				  bool address);
+protected:
+  /* Hash of item.  */
+  hashval_t m_hash;
+
+  /* Indicated whether a hash value has been set or not.  */
+  bool m_hash_set;
+
+private:
+  /* Initialize internal data structures. Bitmap STACK is used for
+     bitmap memory allocation process.  */
+  void setup (bitmap_obstack *stack);
+
+  /* Because types can be arbitrarily large, avoid quadratic bottleneck.  */
+  static hash_map<const_tree, hashval_t> m_type_hash_cache;
+}; // class sem_item
+
+class sem_function: public sem_item
+{
+public:
+  /* Semantic function constructor that uses STACK as bitmap memory stack.  */
+  sem_function (bitmap_obstack *stack);
+
+  /*  Constructor based on callgraph node _NODE.
+      Bitmap STACK is used for memory allocation.  */
+  sem_function (cgraph_node *_node, bitmap_obstack *stack);
+
+  ~sem_function ();
+
+  inline virtual void init_wpa (void)
+  {
+  }
+
+  virtual void init (void);
+  virtual bool equals_wpa (sem_item *item,
+			   hash_map <symtab_node *, sem_item *> &ignored_nodes);
+  virtual hashval_t get_hash (void);
+  virtual bool equals (sem_item *item,
+		       hash_map <symtab_node *, sem_item *> &ignored_nodes);
+  virtual bool merge (sem_item *alias_item);
+
+  /* Dump symbol to FILE.  */
+  virtual void dump_to_file (FILE *file)
+  {
+    gcc_assert (file);
+    dump_function_to_file (decl, file, TDF_DETAILS);
+  }
+
+  /* Returns cgraph_node.  */
+  inline cgraph_node *get_node (void)
+  {
+    return dyn_cast <cgraph_node *> (node);
+  }
+
+  /* Improve accumulated hash for HSTATE based on a gimple statement STMT.  */
+  void hash_stmt (gimple *stmt, inchash::hash &inchash);
+
+  /* Return true if polymorphic comparison must be processed.  */
+  bool compare_polymorphic_p (void);
+
+  /* For a given call graph NODE, the function constructs new
+     semantic function item.  */
+  static sem_function *parse (cgraph_node *node, bitmap_obstack *stack);
+
+  /* Perform additional checks needed to match types of used function
+     paramters.  */
+  bool compatible_parm_types_p (tree, tree);
+
+  /* Exception handling region tree.  */
+  eh_region region_tree;
+
+  /* Number of function arguments.  */
+  unsigned int arg_count;
+
+  /* Total amount of edges in the function.  */
+  unsigned int edge_count;
+
+  /* Vector of sizes of all basic blocks.  */
+  vec <unsigned int> bb_sizes;
+
+  /* Control flow graph checksum.  */
+  hashval_t cfg_checksum;
+
+  /* GIMPLE codes hash value.  */
+  hashval_t gcode_hash;
+
+  /* Total number of SSA names used in the function.  */
+  unsigned ssa_names_size;
+
+  /* Array of structures for all basic blocks.  */
+  vec <ipa_icf_gimple::sem_bb *> bb_sorted;
+
+  /* Return true if parameter I may be used.  */
+  bool param_used_p (unsigned int i);
+
+private:
+  /* Calculates hash value based on a BASIC_BLOCK.  */
+  hashval_t get_bb_hash (const ipa_icf_gimple::sem_bb *basic_block);
+
+  /* For given basic blocks BB1 and BB2 (from functions FUNC1 and FUNC),
+     true value is returned if phi nodes are semantically
+     equivalent in these blocks .  */
+  bool compare_phi_node (basic_block bb1, basic_block bb2);
+
+  /* Basic blocks dictionary BB_DICT returns true if SOURCE index BB
+     corresponds to TARGET.  */
+  bool bb_dict_test (vec<int> *bb_dict, int source, int target);
+
+  /* If cgraph edges E1 and E2 are indirect calls, verify that
+     ICF flags are the same.  */
+  bool compare_edge_flags (cgraph_edge *e1, cgraph_edge *e2);
+
+  /* Processes function equality comparison.  */
+  bool equals_private (sem_item *item);
+
+  /* Returns true if tree T can be compared as a handled component.  */
+  static bool icf_handled_component_p (tree t);
+
+  /* Function checker stores binding between functions.   */
+  ipa_icf_gimple::func_checker *m_checker;
+
+  /* COMPARED_FUNC is a function that we compare to.  */
+  sem_function *m_compared_func;
+}; // class sem_function
+
+class sem_variable: public sem_item
+{
+public:
+  /* Semantic variable constructor that uses STACK as bitmap memory stack.  */
+  sem_variable (bitmap_obstack *stack);
+
+  /*  Constructor based on callgraph node _NODE.
+      Bitmap STACK is used for memory allocation.  */
+
+  sem_variable (varpool_node *_node, bitmap_obstack *stack);
+
+  inline virtual void init_wpa (void) {}
+
+  /* Semantic variable initialization function.  */
+  inline virtual void init (void)
+  {
+    decl = get_node ()->decl;
+  }
+
+  virtual hashval_t get_hash (void);
+  virtual bool merge (sem_item *alias_item);
+  virtual void dump_to_file (FILE *file);
+  virtual bool equals (sem_item *item,
+		       hash_map <symtab_node *, sem_item *> &ignored_nodes);
+
+  /* Fast equality variable based on knowledge known in WPA.  */
+  virtual bool equals_wpa (sem_item *item,
+			   hash_map <symtab_node *, sem_item *> &ignored_nodes);
+
+  /* Returns varpool_node.  */
+  inline varpool_node *get_node (void)
+  {
+    return dyn_cast <varpool_node *> (node);
+  }
+
+  /* Parser function that visits a varpool NODE.  */
+  static sem_variable *parse (varpool_node *node, bitmap_obstack *stack);
+
+private:
+  /* Compares trees T1 and T2 for semantic equality.  */
+  static bool equals (tree t1, tree t2);
+}; // class sem_variable
+
+class sem_item_optimizer;
+
+struct congruence_class_group
+{
+  hashval_t hash;
+  sem_item_type type;
+  vec <congruence_class *> classes;
+};
+
+/* Congruence class set structure.  */
+struct congruence_class_hash : nofree_ptr_hash <congruence_class_group>
+{
+  static inline hashval_t hash (const congruence_class_group *item)
+  {
+    return item->hash;
+  }
+
+  static inline int equal (const congruence_class_group *item1,
+			   const congruence_class_group *item2)
+  {
+    return item1->hash == item2->hash && item1->type == item2->type;
+  }
+};
+
+struct traverse_split_pair
+{
+  sem_item_optimizer *optimizer;
+  class congruence_class *cls;
+};
+
+/* Semantic item optimizer includes all top-level logic
+   related to semantic equality comparison.  */
+class sem_item_optimizer
+{
+public:
+  sem_item_optimizer ();
+  ~sem_item_optimizer ();
+
+  /* Function responsible for visiting all potential functions and
+     read-only variables that can be merged.  */
+  void parse_funcs_and_vars (void);
+
+  /* Optimizer entry point which returns true in case it processes
+     a merge operation. True is returned if there's a merge operation
+     processed.  */
+  bool execute (void);
+
+  /* Dump function. */
+  void dump (void);
+
+  /* Verify congruence classes if checking is enabled.  */
+  void checking_verify_classes (void);
+
+  /* Verify congruence classes.  */
+  void verify_classes (void);
+
+  /* Write IPA ICF summary for symbols.  */
+  void write_summary (void);
+
+  /* Read IPA ICF summary for symbols.  */
+  void read_summary (void);
+
+  /* Callgraph removal hook called for a NODE with a custom DATA.  */
+  static void cgraph_removal_hook (cgraph_node *node, void *data);
+
+  /* Varpool removal hook called for a NODE with a custom DATA.  */
+  static void varpool_removal_hook (varpool_node *node, void *data);
+
+  /* Worklist of congruence classes that can potentially
+     refine classes of congruence.  */
+  std::list<congruence_class *> worklist;
+
+  /* Remove semantic ITEM and release memory.  */
+  void remove_item (sem_item *item);
+
+  /* Remove symtab NODE triggered by symtab removal hooks.  */
+  void remove_symtab_node (symtab_node *node);
+
+  /* Register callgraph and varpool hooks.  */
+  void register_hooks (void);
+
+  /* Unregister callgraph and varpool hooks.  */
+  void unregister_hooks (void);
+
+  /* Adds a CLS to hashtable associated by hash value.  */
+  void add_class (congruence_class *cls);
+
+  /* Gets a congruence class group based on given HASH value and TYPE.  */
+  congruence_class_group *get_group_by_hash (hashval_t hash,
+      sem_item_type type);
+private:
+
+  /* For each semantic item, append hash values of references.  */
+  void update_hash_by_addr_refs ();
+
+  /* Congruence classes are built by hash value.  */
+  void build_hash_based_classes (void);
+
+  /* Semantic items in classes having more than one element and initialized.
+     In case of WPA, we load function body.  */
+  void parse_nonsingleton_classes (void);
+
+  /* Equality function for semantic items is used to subdivide existing
+     classes. If IN_WPA, fast equality function is invoked.  */
+  void subdivide_classes_by_equality (bool in_wpa = false);
+
+  /* Subdivide classes by address and interposable references
+     that members of the class reference.
+     Example can be a pair of functions that have an address
+     taken from a function. If these addresses are different the class
+     is split.  */
+  unsigned subdivide_classes_by_sensitive_refs();
+
+  /* Debug function prints all informations about congruence classes.  */
+  void dump_cong_classes (void);
+
+  /* Build references according to call graph.  */
+  void build_graph (void);
+
+  /* Iterative congruence reduction function.  */
+  void process_cong_reduction (void);
+
+  /* After reduction is done, we can declare all items in a group
+     to be equal. PREV_CLASS_COUNT is start number of classes
+     before reduction. True is returned if there's a merge operation
+     processed.  */
+  bool merge_classes (unsigned int prev_class_count);
+
+  /* Fixup points to analysis info.  */
+  void fixup_points_to_sets (void);
+
+  /* Fixup points to set PT.  */
+  void fixup_pt_set (struct pt_solution *pt);
+
+  /* Adds a newly created congruence class CLS to worklist.  */
+  void worklist_push (congruence_class *cls);
+
+  /* Pops a class from worklist. */
+  congruence_class *worklist_pop ();
+
+  /* Every usage of a congruence class CLS is a candidate that can split the
+     collection of classes. Bitmap stack BMSTACK is used for bitmap
+     allocation.  */
+  void do_congruence_step (congruence_class *cls);
+
+  /* Tests if a class CLS used as INDEXth splits any congruence classes.
+     Bitmap stack BMSTACK is used for bitmap allocation.  */
+  void do_congruence_step_for_index (congruence_class *cls, unsigned int index);
+
+  /* Makes pairing between a congruence class CLS and semantic ITEM.  */
+  static void add_item_to_class (congruence_class *cls, sem_item *item);
+
+  /* Disposes split map traverse function. CLS is congruence
+     class, BSLOT is bitmap slot we want to release. DATA is mandatory,
+     but unused argument.  */
+  static bool release_split_map (congruence_class * const &cls, bitmap const &b,
+				 traverse_split_pair *pair);
+
+  /* Process split operation for a cognruence class CLS,
+     where bitmap B splits congruence class members. DATA is used
+     as argument of split pair.  */
+  static bool traverse_congruence_split (congruence_class * const &cls,
+					 bitmap const &b,
+					 traverse_split_pair *pair);
+
+  /* Compare function for sorting pairs in do_congruence_step_f.  */
+  static int sort_congruence_split (const void *, const void *);
+
+  /* Reads a section from LTO stream file FILE_DATA. Input block for DATA
+     contains LEN bytes.  */
+  void read_section (lto_file_decl_data *file_data, const char *data,
+		     size_t len);
+
+  /* Removes all callgraph and varpool nodes that are marked by symtab
+     as deleted.  */
+  void filter_removed_items (void);
+
+  /* Vector of semantic items.  */
+  vec <sem_item *> m_items;
+
+  /* A set containing all items removed by hooks.  */
+  hash_set <symtab_node *> m_removed_items_set;
+
+  /* Hashtable of congruence classes.  */
+  hash_table <congruence_class_hash> m_classes;
+
+  /* Count of congruence classes.  */
+  unsigned int m_classes_count;
+
+  /* Map data structure maps symtab nodes to semantic items.  */
+  hash_map <symtab_node *, sem_item *> m_symtab_node_map;
+
+  /* Set to true if a splitter class is removed.  */
+  bool splitter_class_removed;
+
+  /* Global unique class id counter.  */
+  static unsigned int class_id;
+
+  /* Callgraph node removal hook holder.  */
+  cgraph_node_hook_list *m_cgraph_node_hooks;
+
+  /* Varpool node removal hook holder.  */
+  varpool_node_hook_list *m_varpool_node_hooks;
+
+  /* Bitmap stack.  */
+  bitmap_obstack m_bmstack;
+
+  /* Vector of merged variables.  Needed for fixup of points-to-analysis
+     info.  */
+  vec <symtab_pair> m_merged_variables;
+}; // class sem_item_optimizer
+
+} // ipa_icf namespace
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-inline.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-inline.h
new file mode 100644
index 0000000..f6eb677
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-inline.h
@@ -0,0 +1,120 @@
+/* Inlining decision heuristics.
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Contributed by Jan Hubicka
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_IPA_INLINE_H
+#define GCC_IPA_INLINE_H
+
+/* Data we cache about callgraph edges during inlining to avoid expensive
+   re-computations during the greedy algorithm.  */
+struct edge_growth_cache_entry
+{
+  sreal time, nonspec_time;
+  int size;
+  ipa_hints hints;
+
+  edge_growth_cache_entry()
+    : size (0), hints (0) {}
+
+  edge_growth_cache_entry(int64_t time, int64_t nonspec_time,
+			  int size, ipa_hints hints)
+    : time (time), nonspec_time (nonspec_time), size (size),
+      hints (hints) {}
+};
+
+extern call_summary<edge_growth_cache_entry *> *edge_growth_cache;
+
+/* In ipa-inline-analysis.c  */
+int estimate_size_after_inlining (struct cgraph_node *, struct cgraph_edge *);
+int estimate_growth (struct cgraph_node *);
+bool growth_likely_positive (struct cgraph_node *, int);
+int do_estimate_edge_size (struct cgraph_edge *edge);
+sreal do_estimate_edge_time (struct cgraph_edge *edge);
+ipa_hints do_estimate_edge_hints (struct cgraph_edge *edge);
+void free_growth_caches (void);
+
+/* In ipa-inline.c  */
+unsigned int early_inliner (function *fun);
+bool inline_account_function_p (struct cgraph_node *node);
+
+
+/* In ipa-inline-transform.c  */
+bool inline_call (struct cgraph_edge *, bool, vec<cgraph_edge *> *, int *, bool,
+		  bool *callee_removed = NULL);
+unsigned int inline_transform (struct cgraph_node *);
+void clone_inlined_nodes (struct cgraph_edge *e, bool, bool, int *);
+
+extern int ncalls_inlined;
+extern int nfunctions_inlined;
+
+/* Return estimated size of the inline sequence of EDGE.  */
+
+static inline int
+estimate_edge_size (struct cgraph_edge *edge)
+{
+  edge_growth_cache_entry *entry;
+  if (edge_growth_cache == NULL
+      || (entry = edge_growth_cache->get (edge)) == NULL
+      || entry->size == 0)
+    return do_estimate_edge_size (edge);
+  return entry->size - (entry->size > 0);
+}
+
+/* Return estimated callee growth after inlining EDGE.  */
+
+static inline int
+estimate_edge_growth (struct cgraph_edge *edge)
+{
+  ipa_call_summary *s = ipa_call_summaries->get (edge);
+  gcc_checking_assert (s->call_stmt_size || !edge->callee->analyzed);
+  return (estimate_edge_size (edge) - s->call_stmt_size);
+}
+
+/* Return estimated callee runtime increase after inlining
+   EDGE.  */
+
+static inline sreal
+estimate_edge_time (struct cgraph_edge *edge, sreal *nonspec_time = NULL)
+{
+  edge_growth_cache_entry *entry;
+  if (edge_growth_cache == NULL
+      || (entry = edge_growth_cache->get (edge)) == NULL
+      || entry->time == 0)
+    return do_estimate_edge_time (edge);
+  if (nonspec_time)
+    *nonspec_time = edge_growth_cache->get (edge)->nonspec_time;
+  return entry->time;
+}
+
+
+/* Return estimated callee runtime increase after inlining
+   EDGE.  */
+
+static inline ipa_hints
+estimate_edge_hints (struct cgraph_edge *edge)
+{
+  edge_growth_cache_entry *entry;
+  if (edge_growth_cache == NULL
+      || (entry = edge_growth_cache->get (edge)) == NULL
+      || entry->hints == 0)
+    return do_estimate_edge_hints (edge);
+  return entry->hints - 1;
+}
+
+#endif /* GCC_IPA_INLINE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-param-manipulation.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-param-manipulation.h
new file mode 100644
index 0000000..71fc4a2
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-param-manipulation.h
@@ -0,0 +1,116 @@
+/* Manipulation of formal and actual parameters of functions and function
+   calls.
+   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef IPA_PARAM_MANIPULATION_H
+#define IPA_PARAM_MANIPULATION_H
+
+/* Operation to be performed for the parameter in ipa_parm_adjustment
+   below.  */
+enum ipa_parm_op {
+  IPA_PARM_OP_NONE,
+
+  /* This describes a brand new parameter.
+
+     The field `type' should be set to the new type, `arg_prefix'
+     should be set to the string prefix for the new DECL_NAME, and
+     `new_decl' will ultimately hold the newly created argument.  */
+  IPA_PARM_OP_NEW,
+
+  /* This new parameter is an unmodified parameter at index base_index. */
+  IPA_PARM_OP_COPY,
+
+  /* This adjustment describes a parameter that is about to be removed
+     completely.  Most users will probably need to book keep those so that they
+     don't leave behinfd any non default def ssa names belonging to them.  */
+  IPA_PARM_OP_REMOVE
+};
+
+/* Structure to describe transformations of formal parameters and actual
+   arguments.  Each instance describes one new parameter and they are meant to
+   be stored in a vector.  Additionally, most users will probably want to store
+   adjustments about parameters that are being removed altogether so that SSA
+   names belonging to them can be replaced by SSA names of an artificial
+   variable.  */
+struct ipa_parm_adjustment
+{
+  /* The original PARM_DECL itself, helpful for processing of the body of the
+     function itself.  Intended for traversing function bodies.
+     ipa_modify_formal_parameters, ipa_modify_call_arguments and
+     ipa_combine_adjustments ignore this and use base_index.
+     ipa_modify_formal_parameters actually sets this.  */
+  tree base;
+
+  /* Type of the new parameter.  However, if by_ref is true, the real type will
+     be a pointer to this type.  */
+  tree type;
+
+  /* Alias refrerence type to be used in MEM_REFs when adjusting caller
+     arguments.  */
+  tree alias_ptr_type;
+
+  /* The new declaration when creating/replacing a parameter.  Created
+     by ipa_modify_formal_parameters, useful for functions modifying
+     the body accordingly.  For brand new arguments, this is the newly
+     created argument.  */
+  tree new_decl;
+
+  /* New declaration of a substitute variable that we may use to replace all
+     non-default-def ssa names when a parm decl is going away.  */
+  tree new_ssa_base;
+
+  /* This holds the prefix to be used for the new DECL_NAME.  */
+  const char *arg_prefix;
+
+  /* Offset into the original parameter (for the cases when the new parameter
+     is a component of an original one).  */
+  poly_int64_pod offset;
+
+  /* Zero based index of the original parameter this one is based on.  */
+  int base_index;
+
+  /* Whether this parameter is a new parameter, a copy of an old one,
+     or one about to be removed.  */
+  enum ipa_parm_op op;
+
+  /* Storage order of the original parameter (for the cases when the new
+     parameter is a component of an original one).  */
+  unsigned reverse : 1;
+
+  /* The parameter is to be passed by reference.  */
+  unsigned by_ref : 1;
+};
+
+typedef vec<ipa_parm_adjustment> ipa_parm_adjustment_vec;
+
+vec<tree> ipa_get_vector_of_formal_parms (tree fndecl);
+vec<tree> ipa_get_vector_of_formal_parm_types (tree fntype);
+void ipa_modify_formal_parameters (tree fndecl, ipa_parm_adjustment_vec);
+void ipa_modify_call_arguments (struct cgraph_edge *, gcall *,
+				ipa_parm_adjustment_vec);
+ipa_parm_adjustment_vec ipa_combine_adjustments (ipa_parm_adjustment_vec,
+						 ipa_parm_adjustment_vec);
+void ipa_dump_param_adjustments (FILE *, ipa_parm_adjustment_vec, tree);
+
+bool ipa_modify_expr (tree *, bool, ipa_parm_adjustment_vec);
+ipa_parm_adjustment *ipa_get_adjustment_candidate (tree **, bool *,
+						   ipa_parm_adjustment_vec,
+						   bool);
+
+#endif	/* IPA_PARAM_MANIPULATION_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-predicate.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-predicate.h
new file mode 100644
index 0000000..e97754c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-predicate.h
@@ -0,0 +1,232 @@
+/* IPA predicates.
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Contributed by Jan Hubicka
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Representation of inline parameters that do depend on context function is
+   inlined into (i.e. known constant values of function parameters.
+
+   Conditions that are interesting for function body are collected into CONDS
+   vector.  They are of simple for  function_param OP VAL, where VAL is
+   IPA invariant.  The conditions are then referred by predicates.  */
+
+struct GTY(()) condition
+{
+  /* If agg_contents is set, this is the offset from which the used data was
+     loaded.  */
+  HOST_WIDE_INT offset;
+  /* Size of the access reading the data (or the PARM_DECL SSA_NAME).  */
+  HOST_WIDE_INT size;
+  tree val;
+  int operand_num;
+  ENUM_BITFIELD(tree_code) code : 16;
+  /* Set if the used data were loaded from an aggregate parameter or from
+     data received by reference.  */
+  unsigned agg_contents : 1;
+  /* If agg_contents is set, this differentiates between loads from data
+     passed by reference and by value.  */
+  unsigned by_ref : 1;
+};
+
+/* Information kept about parameter of call site.  */
+struct inline_param_summary
+{
+  /* REG_BR_PROB_BASE based probability that parameter will change in between
+     two invocation of the calls.
+     I.e. loop invariant parameters
+     REG_BR_PROB_BASE/estimated_iterations and regular
+     parameters REG_BR_PROB_BASE.
+
+     Value 0 is reserved for compile time invariants. */
+  int change_prob;
+};
+
+typedef vec<condition, va_gc> *conditions;
+
+/* Predicates are used to repesent function parameters (such as runtime)
+   which depend on a context function is called in.
+
+   Predicates are logical formulas in conjunctive-disjunctive form consisting
+   of clauses which are bitmaps specifying a set of condition that must
+   be true for a clause to be satisfied. Physically they are represented as
+   array of clauses terminated by 0.
+
+   In order to make predicate (possibly) true, all of its clauses must
+   be (possibly) true. To make clause (possibly) true, one of conditions
+   it mentions must be (possibly) true.
+
+   There are fixed bounds on number of clauses and conditions and all the
+   manipulation functions are conservative in positive direction. I.e. we
+   may lose precision by thinking that predicate may be true even when it
+   is not.  */
+
+typedef uint32_t clause_t;
+class predicate
+{
+public:
+  enum predicate_conditions
+    {
+      false_condition = 0,
+      not_inlined_condition = 1,
+      first_dynamic_condition = 2
+    };
+
+  /* Maximal number of conditions predicate can reffer to.  This is limited
+     by using clause_t to be 32bit.  */
+  static const int num_conditions = 32;
+
+  /* Special condition code we use to represent test that operand is compile
+     time constant.  */
+  static const tree_code is_not_constant = ERROR_MARK;
+
+  /* Special condition code we use to represent test that operand is not changed
+     across invocation of the function.  When operand IS_NOT_CONSTANT it is
+     always CHANGED, however i.e. loop invariants can be NOT_CHANGED given
+     percentage of executions even when they are not compile time constants.  */
+  static const tree_code changed = IDENTIFIER_NODE;
+
+
+
+  /* Initialize predicate either to true of false depending on P.  */
+  inline predicate (bool p = true)
+    {
+      if (p)
+        /* True predicate.  */
+        m_clause[0] = 0;
+      else
+        /* False predicate. */
+        set_to_cond (false_condition);
+    }
+
+  /* Sanity check that we do not mix pointers to predicates with predicates.  */
+  inline predicate (predicate *)
+    {
+      gcc_unreachable ();
+    }
+
+  /* Return predicate testing condition I.  */
+  static inline predicate predicate_testing_cond (int i)
+    {
+      class predicate p;
+      p.set_to_cond (i + first_dynamic_condition);
+      return p;
+    }
+
+  /* Return predicate testing that function was not inlined.  */
+  static predicate not_inlined (void)
+    {
+      class predicate p;
+      p.set_to_cond (not_inlined_condition);
+      return p;
+    }
+
+  /* Compute logical and of predicates.  */
+  predicate & operator &= (const predicate &);
+  inline predicate operator &(const predicate &p) const
+    {
+      predicate ret = *this;
+      ret &= p;
+      return ret;
+    }
+
+  /* Compute logical or of predicates.  This is not operator because
+     extra parameter CONDITIONS is needed  */
+  predicate or_with (conditions, const predicate &) const;
+
+  /* Return true if predicates are known to be equal.  */
+  inline bool operator==(const predicate &p2) const
+    {
+      int i;
+      for (i = 0; m_clause[i]; i++)
+	{
+	  gcc_checking_assert (i < max_clauses);
+	  gcc_checking_assert (m_clause[i] > m_clause[i + 1]);
+	  gcc_checking_assert (!p2.m_clause[i]
+			       || p2.m_clause[i] > p2.m_clause[i + 1]);
+	  if (m_clause[i] != p2.m_clause[i])
+	    return false;
+	}
+      return !p2.m_clause[i];
+    }
+
+  /* Return true if predicates are known to be true or false depending
+     on COND.  */
+  inline bool operator==(const bool cond) const
+    {
+      if (cond)
+        return !m_clause[0];
+      if (m_clause[0] == (1 << false_condition))
+	{
+	  gcc_checking_assert (!m_clause[1]
+			       && m_clause[0] == 1
+				  << false_condition);
+	  return true;
+	}
+      return false;
+    }
+
+  inline bool operator!=(const predicate &p2) const
+    {
+      return !(*this == p2);
+    }
+
+  inline bool operator!=(const bool cond) const
+    {
+      return !(*this == cond);
+    }
+
+  /* Evaluate if predicate is known to be false given the clause of possible
+     truths.  */
+  bool evaluate (clause_t) const;
+
+  /* Estimate probability that predicate will be true in a given context.  */
+  int probability (conditions, clause_t, vec<inline_param_summary>) const;
+
+  /* Dump predicate to F. Output newline if nl.  */
+  void dump (FILE *f, conditions, bool nl=true) const;
+  void DEBUG_FUNCTION debug (conditions) const;
+
+  /* Return predicate equal to THIS after duplication.  */
+  predicate remap_after_duplication (clause_t);
+
+  /* Return predicate equal to THIS after inlining.  */
+  predicate remap_after_inlining (struct ipa_fn_summary *,
+			          struct ipa_fn_summary *,
+			          vec<int>, vec<int>, clause_t, const predicate &);
+
+  void stream_in (struct lto_input_block *);
+  void stream_out (struct output_block *);
+
+private:
+  static const int max_clauses = 8;
+  clause_t m_clause[max_clauses + 1];
+
+  /* Initialize predicate to one testing single condition number COND.  */
+  inline void set_to_cond (int cond)
+    {
+      m_clause[0] = 1 << cond;
+      m_clause[1] = 0;
+    }
+
+  void add_clause (conditions conditions, clause_t);
+};
+
+void dump_condition (FILE *f, conditions conditions, int cond);
+predicate add_condition (struct ipa_fn_summary *summary, int operand_num,
+			 HOST_WIDE_INT size, struct agg_position_info *aggpos,
+			 enum tree_code code, tree val);
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-prop.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-prop.h
new file mode 100644
index 0000000..7257a6d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-prop.h
@@ -0,0 +1,814 @@
+/* Interprocedural analyses.
+   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef IPA_PROP_H
+#define IPA_PROP_H
+
+/* The following definitions and interfaces are used by
+   interprocedural analyses or parameters.  */
+
+#define IPA_UNDESCRIBED_USE -1
+
+/* ipa-prop.c stuff (ipa-cp, indirect inlining):  */
+
+/* A jump function for a callsite represents the values passed as actual
+   arguments of the callsite.  They were originally proposed in a paper called
+   "Interprocedural Constant Propagation", by David Callahan, Keith D Cooper,
+   Ken Kennedy, Linda Torczon in Comp86, pg 152-161.  There are three main
+   types of values :
+
+   Pass-through - the caller's formal parameter is passed as an actual
+                  argument, possibly one simple operation performed on it.
+   Constant     - a constant (is_gimple_ip_invariant)is passed as an actual
+                  argument.
+   Unknown      - neither of the above.
+
+   IPA_JF_ANCESTOR is a special pass-through jump function, which means that
+   the result is an address of a part of the object pointed to by the formal
+   parameter to which the function refers.  It is mainly intended to represent
+   getting addresses of ancestor fields in C++
+   (e.g. &this_1(D)->D.1766.D.1756).  Note that if the original pointer is
+   NULL, ancestor jump function must behave like a simple pass-through.
+
+   Other pass-through functions can either simply pass on an unchanged formal
+   parameter or can apply one simple binary operation to it (such jump
+   functions are called polynomial).
+
+   Jump functions are computed in ipa-prop.c by function
+   update_call_notes_after_inlining.  Some information can be lost and jump
+   functions degraded accordingly when inlining, see
+   update_call_notes_after_inlining in the same file.  */
+
+enum jump_func_type
+{
+  IPA_JF_UNKNOWN = 0,  /* newly allocated and zeroed jump functions default */
+  IPA_JF_CONST,             /* represented by field costant */
+  IPA_JF_PASS_THROUGH,	    /* represented by field pass_through */
+  IPA_JF_ANCESTOR	    /* represented by field ancestor */
+};
+
+struct ipa_cst_ref_desc;
+
+/* Structure holding data required to describe a constant jump function.  */
+struct GTY(()) ipa_constant_data
+{
+  /* THe value of the constant.  */
+  tree value;
+  /* Pointer to the structure that describes the reference.  */
+  struct ipa_cst_ref_desc GTY((skip)) *rdesc;
+};
+
+/* Structure holding data required to describe a pass-through jump function.  */
+
+struct GTY(()) ipa_pass_through_data
+{
+  /* If an operation is to be performed on the original parameter, this is the
+     second (constant) operand.  */
+  tree operand;
+  /* Number of the caller's formal parameter being passed.  */
+  int formal_id;
+  /* Operation that is performed on the argument before it is passed on.
+     NOP_EXPR means no operation.  Otherwise oper must be a simple binary
+     arithmetic operation where the caller's parameter is the first operand and
+     operand field from this structure is the second one.  */
+  enum tree_code operation;
+  /* When the passed value is a pointer, it is set to true only when we are
+     certain that no write to the object it points to has occurred since the
+     caller functions started execution, except for changes noted in the
+     aggregate part of the jump function (see description of
+     ipa_agg_jump_function).  The flag is used only when the operation is
+     NOP_EXPR.  */
+  unsigned agg_preserved : 1;
+};
+
+/* Structure holding data required to describe an ancestor pass-through
+   jump function.  */
+
+struct GTY(()) ipa_ancestor_jf_data
+{
+  /* Offset of the field representing the ancestor.  */
+  HOST_WIDE_INT offset;
+  /* Number of the caller's formal parameter being passed.  */
+  int formal_id;
+  /* Flag with the same meaning like agg_preserve in ipa_pass_through_data.  */
+  unsigned agg_preserved : 1;
+};
+
+/* An element in an aggegate part of a jump function describing a known value
+   at a given offset.  When it is part of a pass-through jump function with
+   agg_preserved set or an ancestor jump function with agg_preserved set, all
+   unlisted positions are assumed to be preserved but the value can be a type
+   node, which means that the particular piece (starting at offset and having
+   the size of the type) is clobbered with an unknown value.  When
+   agg_preserved is false or the type of the containing jump function is
+   different, all unlisted parts are assumed to be unknown and all values must
+   fulfill is_gimple_ip_invariant.  */
+
+struct GTY(()) ipa_agg_jf_item
+{
+  /* The offset at which the known value is located within the aggregate.  */
+  HOST_WIDE_INT offset;
+
+  /* The known constant or type if this is a clobber.  */
+  tree value;
+};
+
+
+/* Aggregate jump function - i.e. description of contents of aggregates passed
+   either by reference or value.  */
+
+struct GTY(()) ipa_agg_jump_function
+{
+  /* Description of the individual items.  */
+  vec<ipa_agg_jf_item, va_gc> *items;
+  /* True if the data was passed by reference (as opposed to by value). */
+  bool by_ref;
+};
+
+typedef struct ipa_agg_jump_function *ipa_agg_jump_function_p;
+
+/* Information about zero/non-zero bits.  */
+struct GTY(()) ipa_bits
+{
+  /* The propagated value.  */
+  widest_int value;
+  /* Mask corresponding to the value.
+     Similar to ccp_lattice_t, if xth bit of mask is 0,
+     implies xth bit of value is constant.  */
+  widest_int mask;
+};
+
+/* Info about value ranges.  */
+
+struct GTY(()) ipa_vr
+{
+  /* The data fields below are valid only if known is true.  */
+  bool known;
+  enum value_range_kind type;
+  wide_int min;
+  wide_int max;
+};
+
+/* A jump function for a callsite represents the values passed as actual
+   arguments of the callsite. See enum jump_func_type for the various
+   types of jump functions supported.  */
+struct GTY (()) ipa_jump_func
+{
+  /* Aggregate contants description.  See struct ipa_agg_jump_function and its
+     description.  */
+  struct ipa_agg_jump_function agg;
+
+  /* Information about zero/non-zero bits.  The pointed to structure is shared
+     betweed different jump functions.  Use ipa_set_jfunc_bits to set this
+     field.  */
+  struct ipa_bits *bits;
+
+  /* Information about value range, containing valid data only when vr_known is
+     true.  The pointed to structure is shared betweed different jump
+     functions.  Use ipa_set_jfunc_vr to set this field.  */
+  struct value_range_base *m_vr;
+
+  enum jump_func_type type;
+  /* Represents a value of a jump function.  pass_through is used only in jump
+     function context.  constant represents the actual constant in constant jump
+     functions and member_cst holds constant c++ member functions.  */
+  union jump_func_value
+  {
+    struct ipa_constant_data GTY ((tag ("IPA_JF_CONST"))) constant;
+    struct ipa_pass_through_data GTY ((tag ("IPA_JF_PASS_THROUGH"))) pass_through;
+    struct ipa_ancestor_jf_data GTY ((tag ("IPA_JF_ANCESTOR"))) ancestor;
+  } GTY ((desc ("%1.type"))) value;
+};
+
+
+/* Return the constant stored in a constant jump functin JFUNC.  */
+
+static inline tree
+ipa_get_jf_constant (struct ipa_jump_func *jfunc)
+{
+  gcc_checking_assert (jfunc->type == IPA_JF_CONST);
+  return jfunc->value.constant.value;
+}
+
+static inline struct ipa_cst_ref_desc *
+ipa_get_jf_constant_rdesc (struct ipa_jump_func *jfunc)
+{
+  gcc_checking_assert (jfunc->type == IPA_JF_CONST);
+  return jfunc->value.constant.rdesc;
+}
+
+/* Return the operand of a pass through jmp function JFUNC.  */
+
+static inline tree
+ipa_get_jf_pass_through_operand (struct ipa_jump_func *jfunc)
+{
+  gcc_checking_assert (jfunc->type == IPA_JF_PASS_THROUGH);
+  return jfunc->value.pass_through.operand;
+}
+
+/* Return the number of the caller's formal parameter that a pass through jump
+   function JFUNC refers to.  */
+
+static inline int
+ipa_get_jf_pass_through_formal_id (struct ipa_jump_func *jfunc)
+{
+  gcc_checking_assert (jfunc->type == IPA_JF_PASS_THROUGH);
+  return jfunc->value.pass_through.formal_id;
+}
+
+/* Return operation of a pass through jump function JFUNC.  */
+
+static inline enum tree_code
+ipa_get_jf_pass_through_operation (struct ipa_jump_func *jfunc)
+{
+  gcc_checking_assert (jfunc->type == IPA_JF_PASS_THROUGH);
+  return jfunc->value.pass_through.operation;
+}
+
+/* Return the agg_preserved flag of a pass through jump function JFUNC.  */
+
+static inline bool
+ipa_get_jf_pass_through_agg_preserved (struct ipa_jump_func *jfunc)
+{
+  gcc_checking_assert (jfunc->type == IPA_JF_PASS_THROUGH);
+  return jfunc->value.pass_through.agg_preserved;
+}
+
+/* Return true if pass through jump function JFUNC preserves type
+   information.  */
+
+static inline bool
+ipa_get_jf_pass_through_type_preserved (struct ipa_jump_func *jfunc)
+{
+  gcc_checking_assert (jfunc->type == IPA_JF_PASS_THROUGH);
+  return jfunc->value.pass_through.agg_preserved;
+}
+
+/* Return the offset of an ancestor jump function JFUNC.  */
+
+static inline HOST_WIDE_INT
+ipa_get_jf_ancestor_offset (struct ipa_jump_func *jfunc)
+{
+  gcc_checking_assert (jfunc->type == IPA_JF_ANCESTOR);
+  return jfunc->value.ancestor.offset;
+}
+
+/* Return the number of the caller's formal parameter that an ancestor jump
+   function JFUNC refers to.  */
+
+static inline int
+ipa_get_jf_ancestor_formal_id (struct ipa_jump_func *jfunc)
+{
+  gcc_checking_assert (jfunc->type == IPA_JF_ANCESTOR);
+  return jfunc->value.ancestor.formal_id;
+}
+
+/* Return the agg_preserved flag of an ancestor jump function JFUNC.  */
+
+static inline bool
+ipa_get_jf_ancestor_agg_preserved (struct ipa_jump_func *jfunc)
+{
+  gcc_checking_assert (jfunc->type == IPA_JF_ANCESTOR);
+  return jfunc->value.ancestor.agg_preserved;
+}
+
+/* Return true if ancestor jump function JFUNC presrves type information.  */
+
+static inline bool
+ipa_get_jf_ancestor_type_preserved (struct ipa_jump_func *jfunc)
+{
+  gcc_checking_assert (jfunc->type == IPA_JF_ANCESTOR);
+  return jfunc->value.ancestor.agg_preserved;
+}
+
+/* Summary describing a single formal parameter.  */
+
+struct GTY(()) ipa_param_descriptor
+{
+  /* In analysis and modification phase, this is the PARAM_DECL of this
+     parameter, in IPA LTO phase, this is the type of the the described
+     parameter or NULL if not known.  Do not read this field directly but
+     through ipa_get_param and ipa_get_type as appropriate.  */
+  tree decl_or_type;
+  /* If all uses of the parameter are described by ipa-prop structures, this
+     says how many there are.  If any use could not be described by means of
+     ipa-prop structures, this is IPA_UNDESCRIBED_USE.  */
+  int controlled_uses;
+  unsigned int move_cost : 31;
+  /* The parameter is used.  */
+  unsigned used : 1;
+};
+
+/* ipa_node_params stores information related to formal parameters of functions
+   and some other information for interprocedural passes that operate on
+   parameters (such as ipa-cp).  */
+
+struct GTY((for_user)) ipa_node_params
+{
+  /* Default constructor.  */
+  ipa_node_params ();
+
+  /* Default destructor.  */
+  ~ipa_node_params ();
+
+  /* Information about individual formal parameters that are gathered when
+     summaries are generated. */
+  vec<ipa_param_descriptor, va_gc> *descriptors;
+  /* Pointer to an array of structures describing individual formal
+     parameters.  */
+  struct ipcp_param_lattices * GTY((skip)) lattices;
+  /* Only for versioned nodes this field would not be NULL,
+     it points to the node that IPA cp cloned from.  */
+  struct cgraph_node * GTY((skip)) ipcp_orig_node;
+  /* If this node is an ipa-cp clone, these are the known constants that
+     describe what it has been specialized for.  */
+  vec<tree> GTY((skip)) known_csts;
+  /* If this node is an ipa-cp clone, these are the known polymorphic contexts
+     that describe what it has been specialized for.  */
+  vec<ipa_polymorphic_call_context> GTY((skip)) known_contexts;
+  /* Whether the param uses analysis and jump function computation has already
+     been performed.  */
+  unsigned analysis_done : 1;
+  /* Whether the function is enqueued in ipa-cp propagation stack.  */
+  unsigned node_enqueued : 1;
+  /* Whether we should create a specialized version based on values that are
+     known to be constant in all contexts.  */
+  unsigned do_clone_for_all_contexts : 1;
+  /* Set if this is an IPA-CP clone for all contexts.  */
+  unsigned is_all_contexts_clone : 1;
+  /* Node has been completely replaced by clones and will be removed after
+     ipa-cp is finished.  */
+  unsigned node_dead : 1;
+  /* Node is involved in a recursion, potentionally indirect.  */
+  unsigned node_within_scc : 1;
+  /* Node is calling a private function called only once.  */
+  unsigned node_calling_single_call : 1;
+  /* False when there is something makes versioning impossible.  */
+  unsigned versionable : 1;
+};
+
+inline
+ipa_node_params::ipa_node_params ()
+: descriptors (NULL), lattices (NULL), ipcp_orig_node (NULL),
+  known_csts (vNULL), known_contexts (vNULL), analysis_done (0),
+  node_enqueued (0), do_clone_for_all_contexts (0), is_all_contexts_clone (0),
+  node_dead (0), node_within_scc (0), node_calling_single_call (0),
+  versionable (0)
+{
+}
+
+inline
+ipa_node_params::~ipa_node_params ()
+{
+  free (lattices);
+  known_csts.release ();
+  known_contexts.release ();
+}
+
+/* Intermediate information that we get from alias analysis about a particular
+   parameter in a particular basic_block.  When a parameter or the memory it
+   references is marked modified, we use that information in all dominated
+   blocks without consulting alias analysis oracle.  */
+
+struct ipa_param_aa_status
+{
+  /* Set when this structure contains meaningful information.  If not, the
+     structure describing a dominating BB should be used instead.  */
+  bool valid;
+
+  /* Whether we have seen something which might have modified the data in
+     question.  PARM is for the parameter itself, REF is for data it points to
+     but using the alias type of individual accesses and PT is the same thing
+     but for computing aggregate pass-through functions using a very inclusive
+     ao_ref.  */
+  bool parm_modified, ref_modified, pt_modified;
+};
+
+/* Information related to a given BB that used only when looking at function
+   body.  */
+
+struct ipa_bb_info
+{
+  /* Call graph edges going out of this BB.  */
+  vec<cgraph_edge *> cg_edges;
+  /* Alias analysis statuses of each formal parameter at this bb.  */
+  vec<ipa_param_aa_status> param_aa_statuses;
+};
+
+/* Structure with global information that is only used when looking at function
+   body. */
+
+struct ipa_func_body_info
+{
+  /* The node that is being analyzed.  */
+  cgraph_node *node;
+
+  /* Its info.  */
+  struct ipa_node_params *info;
+
+  /* Information about individual BBs. */
+  vec<ipa_bb_info> bb_infos;
+
+  /* Number of parameters.  */
+  int param_count;
+
+  /* Number of statements we are still allowed to walked by when analyzing this
+     function.  */
+  unsigned int aa_walk_budget;
+};
+
+/* ipa_node_params access functions.  Please use these to access fields that
+   are or will be shared among various passes.  */
+
+/* Return the number of formal parameters. */
+
+static inline int
+ipa_get_param_count (struct ipa_node_params *info)
+{
+  return vec_safe_length (info->descriptors);
+}
+
+/* Return the declaration of Ith formal parameter of the function corresponding
+   to INFO.  Note there is no setter function as this array is built just once
+   using ipa_initialize_node_params.  This function should not be called in
+   WPA.  */
+
+static inline tree
+ipa_get_param (struct ipa_node_params *info, int i)
+{
+  gcc_checking_assert (info->descriptors);
+  gcc_checking_assert (!flag_wpa);
+  tree t = (*info->descriptors)[i].decl_or_type;
+  gcc_checking_assert (TREE_CODE (t) == PARM_DECL);
+  return t;
+}
+
+/* Return the type of Ith formal parameter of the function corresponding
+   to INFO if it is known or NULL if not.  */
+
+static inline tree
+ipa_get_type (struct ipa_node_params *info, int i)
+{
+  if (vec_safe_length (info->descriptors) <= (unsigned) i)
+    return NULL;
+  tree t = (*info->descriptors)[i].decl_or_type;
+  if (!t)
+    return NULL;
+  if (TYPE_P (t))
+    return t;
+  gcc_checking_assert (TREE_CODE (t) == PARM_DECL);
+  return TREE_TYPE (t);
+}
+
+/* Return the move cost of Ith formal parameter of the function corresponding
+   to INFO.  */
+
+static inline int
+ipa_get_param_move_cost (struct ipa_node_params *info, int i)
+{
+  gcc_checking_assert (info->descriptors);
+  return (*info->descriptors)[i].move_cost;
+}
+
+/* Set the used flag corresponding to the Ith formal parameter of the function
+   associated with INFO to VAL.  */
+
+static inline void
+ipa_set_param_used (struct ipa_node_params *info, int i, bool val)
+{
+  gcc_checking_assert (info->descriptors);
+  (*info->descriptors)[i].used = val;
+}
+
+/* Return how many uses described by ipa-prop a parameter has or
+   IPA_UNDESCRIBED_USE if there is a use that is not described by these
+   structures.  */
+static inline int
+ipa_get_controlled_uses (struct ipa_node_params *info, int i)
+{
+  /* FIXME: introducing speculation causes out of bounds access here.  */
+  if (vec_safe_length (info->descriptors) > (unsigned)i)
+    return (*info->descriptors)[i].controlled_uses;
+  return IPA_UNDESCRIBED_USE;
+}
+
+/* Set the controlled counter of a given parameter.  */
+
+static inline void
+ipa_set_controlled_uses (struct ipa_node_params *info, int i, int val)
+{
+  gcc_checking_assert (info->descriptors);
+  (*info->descriptors)[i].controlled_uses = val;
+}
+
+/* Return the used flag corresponding to the Ith formal parameter of the
+   function associated with INFO.  */
+
+static inline bool
+ipa_is_param_used (struct ipa_node_params *info, int i)
+{
+  gcc_checking_assert (info->descriptors);
+  return (*info->descriptors)[i].used;
+}
+
+/* Information about replacements done in aggregates for a given node (each
+   node has its linked list).  */
+struct GTY(()) ipa_agg_replacement_value
+{
+  /* Next item in the linked list.  */
+  struct ipa_agg_replacement_value *next;
+  /* Offset within the aggregate.  */
+  HOST_WIDE_INT offset;
+  /* The constant value.  */
+  tree value;
+  /* The paramter index.  */
+  int index;
+  /* Whether the value was passed by reference.  */
+  bool by_ref;
+};
+
+/* Structure holding information for the transformation phase of IPA-CP.  */
+
+struct GTY(()) ipcp_transformation
+{
+  /* Linked list of known aggregate values.  */
+  ipa_agg_replacement_value *agg_values;
+  /* Known bits information.  */
+  vec<ipa_bits *, va_gc> *bits;
+  /* Value range information.  */
+  vec<ipa_vr, va_gc> *m_vr;
+};
+
+void ipa_set_node_agg_value_chain (struct cgraph_node *node,
+				   struct ipa_agg_replacement_value *aggvals);
+void ipcp_transformation_initialize (void);
+
+/* ipa_edge_args stores information related to a callsite and particularly its
+   arguments.  It can be accessed by the IPA_EDGE_REF macro.  */
+
+class GTY((for_user)) ipa_edge_args
+{
+ public:
+
+  /* Default constructor.  */
+  ipa_edge_args () : jump_functions (NULL), polymorphic_call_contexts (NULL)
+    {}
+
+  /* Destructor.  */
+  ~ipa_edge_args ()
+    {
+      vec_free (jump_functions);
+      vec_free (polymorphic_call_contexts);
+    }
+
+  /* Vectors of the callsite's jump function and polymorphic context
+     information of each parameter.  */
+  vec<ipa_jump_func, va_gc> *jump_functions;
+  vec<ipa_polymorphic_call_context, va_gc> *polymorphic_call_contexts;
+};
+
+/* ipa_edge_args access functions.  Please use these to access fields that
+   are or will be shared among various passes.  */
+
+/* Return the number of actual arguments. */
+
+static inline int
+ipa_get_cs_argument_count (struct ipa_edge_args *args)
+{
+  return vec_safe_length (args->jump_functions);
+}
+
+/* Returns a pointer to the jump function for the ith argument.  Please note
+   there is no setter function as jump functions are all set up in
+   ipa_compute_jump_functions. */
+
+static inline struct ipa_jump_func *
+ipa_get_ith_jump_func (struct ipa_edge_args *args, int i)
+{
+  return &(*args->jump_functions)[i];
+}
+
+/* Returns a pointer to the polymorphic call context for the ith argument.
+   NULL if contexts are not computed.  */
+static inline struct ipa_polymorphic_call_context *
+ipa_get_ith_polymorhic_call_context (struct ipa_edge_args *args, int i)
+{
+  if (!args->polymorphic_call_contexts)
+    return NULL;
+  return &(*args->polymorphic_call_contexts)[i];
+}
+
+/* Function summary for ipa_node_params.  */
+class GTY((user)) ipa_node_params_t: public function_summary <ipa_node_params *>
+{
+public:
+  ipa_node_params_t (symbol_table *table, bool ggc):
+    function_summary<ipa_node_params *> (table, ggc) { }
+
+  /* Hook that is called by summary when a node is duplicated.  */
+  virtual void duplicate (cgraph_node *node,
+			  cgraph_node *node2,
+			  ipa_node_params *data,
+			  ipa_node_params *data2);
+};
+
+/* Summary to manange ipa_edge_args structures.  */
+
+class GTY((user)) ipa_edge_args_sum_t : public call_summary <ipa_edge_args *>
+{
+ public:
+  ipa_edge_args_sum_t (symbol_table *table, bool ggc)
+    : call_summary<ipa_edge_args *> (table, ggc) { }
+
+  /* Hook that is called by summary when an edge is duplicated.  */
+  virtual void remove (cgraph_edge *cs, ipa_edge_args *args);
+  /* Hook that is called by summary when an edge is duplicated.  */
+  virtual void duplicate (cgraph_edge *src,
+			  cgraph_edge *dst,
+			  ipa_edge_args *old_args,
+			  ipa_edge_args *new_args);
+};
+
+/* Function summary where the parameter infos are actually stored. */
+extern GTY(()) ipa_node_params_t * ipa_node_params_sum;
+/* Call summary to store information about edges such as jump functions.  */
+extern GTY(()) ipa_edge_args_sum_t *ipa_edge_args_sum;
+
+/* Function summary for IPA-CP transformation.  */
+class ipcp_transformation_t
+: public function_summary<ipcp_transformation *>
+{
+public:
+  ipcp_transformation_t (symbol_table *table, bool ggc):
+    function_summary<ipcp_transformation *> (table, ggc) {}
+
+  ~ipcp_transformation_t () {}
+
+  static ipcp_transformation_t *create_ggc (symbol_table *symtab)
+  {
+    ipcp_transformation_t *summary
+      = new (ggc_cleared_alloc <ipcp_transformation_t> ())
+      ipcp_transformation_t (symtab, true);
+    return summary;
+  }
+};
+
+/* Function summary where the IPA CP transformations are actually stored.  */
+extern GTY(()) function_summary <ipcp_transformation *> *ipcp_transformation_sum;
+
+/* Return the associated parameter/argument info corresponding to the given
+   node/edge.  */
+#define IPA_NODE_REF(NODE) (ipa_node_params_sum->get_create (NODE))
+#define IPA_EDGE_REF(EDGE) (ipa_edge_args_sum->get_create (EDGE))
+/* This macro checks validity of index returned by
+   ipa_get_param_decl_index function.  */
+#define IS_VALID_JUMP_FUNC_INDEX(I) ((I) != -1)
+
+/* Creating and freeing ipa_node_params and ipa_edge_args.  */
+void ipa_create_all_node_params (void);
+void ipa_create_all_edge_args (void);
+void ipa_check_create_edge_args (void);
+void ipa_free_all_node_params (void);
+void ipa_free_all_edge_args (void);
+void ipa_free_all_structures_after_ipa_cp (void);
+void ipa_free_all_structures_after_iinln (void);
+
+void ipa_register_cgraph_hooks (void);
+int count_formal_params (tree fndecl);
+
+/* This function ensures the array of node param infos is big enough to
+   accommodate a structure for all nodes and reallocates it if not.  */
+
+static inline void
+ipa_check_create_node_params (void)
+{
+  if (!ipa_node_params_sum)
+    ipa_node_params_sum
+      = (new (ggc_cleared_alloc <ipa_node_params_t> ())
+	 ipa_node_params_t (symtab, true));
+}
+
+/* Returns true if edge summary contains a record for EDGE.  The main purpose
+   of this function is that debug dumping function can check info availability
+   without causing allocations.  */
+
+static inline bool
+ipa_edge_args_info_available_for_edge_p (struct cgraph_edge *edge)
+{
+  return ipa_edge_args_sum->exists (edge);
+}
+
+static inline ipcp_transformation *
+ipcp_get_transformation_summary (cgraph_node *node)
+{
+  if (ipcp_transformation_sum == NULL)
+    return NULL;
+
+  return ipcp_transformation_sum->get (node);
+}
+
+/* Return the aggregate replacements for NODE, if there are any.  */
+
+static inline struct ipa_agg_replacement_value *
+ipa_get_agg_replacements_for_node (cgraph_node *node)
+{
+  ipcp_transformation *ts = ipcp_get_transformation_summary (node);
+  return ts ? ts->agg_values : NULL;
+}
+
+/* Function formal parameters related computations.  */
+void ipa_initialize_node_params (struct cgraph_node *node);
+bool ipa_propagate_indirect_call_infos (struct cgraph_edge *cs,
+					vec<cgraph_edge *> *new_edges);
+
+/* Indirect edge and binfo processing.  */
+tree ipa_get_indirect_edge_target (struct cgraph_edge *ie,
+				   vec<tree> ,
+				   vec<ipa_polymorphic_call_context>,
+				   vec<ipa_agg_jump_function_p>,
+				   bool *);
+struct cgraph_edge *ipa_make_edge_direct_to_target (struct cgraph_edge *, tree,
+						    bool speculative = false);
+tree ipa_impossible_devirt_target (struct cgraph_edge *, tree);
+ipa_bits *ipa_get_ipa_bits_for_value (const widest_int &value,
+				      const widest_int &mask);
+
+
+/* Functions related to both.  */
+void ipa_analyze_node (struct cgraph_node *);
+
+/* Aggregate jump function related functions.  */
+tree ipa_find_agg_cst_for_param (struct ipa_agg_jump_function *agg, tree scalar,
+				 HOST_WIDE_INT offset, bool by_ref,
+				 bool *from_global_constant = NULL);
+bool ipa_load_from_parm_agg (struct ipa_func_body_info *fbi,
+			     vec<ipa_param_descriptor, va_gc> *descriptors,
+			     gimple *stmt, tree op, int *index_p,
+			     HOST_WIDE_INT *offset_p, HOST_WIDE_INT *size_p,
+			     bool *by_ref, bool *guaranteed_unmodified = NULL);
+
+/* Debugging interface.  */
+void ipa_print_node_params (FILE *, struct cgraph_node *node);
+void ipa_print_all_params (FILE *);
+void ipa_print_node_jump_functions (FILE *f, struct cgraph_node *node);
+void ipa_print_all_jump_functions (FILE * f);
+void ipcp_verify_propagated_values (void);
+
+template <typename value>
+class ipcp_value;
+
+extern object_allocator<ipcp_value<tree> > ipcp_cst_values_pool;
+extern object_allocator<ipcp_value<ipa_polymorphic_call_context> >
+  ipcp_poly_ctx_values_pool;
+
+template <typename valtype>
+class ipcp_value_source;
+
+extern object_allocator<ipcp_value_source<tree> > ipcp_sources_pool;
+
+class ipcp_agg_lattice;
+
+extern object_allocator<ipcp_agg_lattice> ipcp_agg_lattice_pool;
+
+void ipa_dump_agg_replacement_values (FILE *f,
+				      struct ipa_agg_replacement_value *av);
+void ipa_prop_write_jump_functions (void);
+void ipa_prop_read_jump_functions (void);
+void ipcp_write_transformation_summaries (void);
+void ipcp_read_transformation_summaries (void);
+int ipa_get_param_decl_index (struct ipa_node_params *, tree);
+tree ipa_value_from_jfunc (struct ipa_node_params *info,
+			   struct ipa_jump_func *jfunc, tree type);
+unsigned int ipcp_transform_function (struct cgraph_node *node);
+ipa_polymorphic_call_context ipa_context_from_jfunc (ipa_node_params *,
+						     cgraph_edge *,
+						     int,
+						     ipa_jump_func *);
+void ipa_dump_param (FILE *, struct ipa_node_params *info, int i);
+void ipa_release_body_info (struct ipa_func_body_info *);
+tree ipa_get_callee_param_type (struct cgraph_edge *e, int i);
+
+/* From tree-sra.c:  */
+tree build_ref_for_offset (location_t, tree, poly_int64, bool, tree,
+			   gimple_stmt_iterator *, bool);
+
+/* In ipa-cp.c  */
+void ipa_cp_c_finalize (void);
+
+#endif /* IPA_PROP_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-ref.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-ref.h
new file mode 100644
index 0000000..05e1058
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-ref.h
@@ -0,0 +1,137 @@
+/* IPA reference lists.
+   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Contributed by Jan Hubicka
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_IPA_REF_H
+#define GCC_IPA_REF_H
+
+struct cgraph_node;
+class varpool_node;
+class symtab_node;
+
+
+/* How the reference is done.  */
+enum GTY(()) ipa_ref_use
+{
+  IPA_REF_LOAD,
+  IPA_REF_STORE,
+  IPA_REF_ADDR,
+  IPA_REF_ALIAS
+};
+
+/* Record of reference in callgraph or varpool.  */
+struct GTY(()) ipa_ref
+{
+public:
+  /* Remove reference.  */
+  void remove_reference ();
+
+  /* Return true when execution of reference can lead to return from
+     function.  */
+  bool cannot_lead_to_return ();
+
+  /* Return true if refernece may be used in address compare.  */
+  bool address_matters_p ();
+
+  /* Return reference list this reference is in.  */
+  struct ipa_ref_list * referring_ref_list (void);
+
+  /* Return reference list this reference is in.  */
+  struct ipa_ref_list * referred_ref_list (void);
+
+  symtab_node *referring;
+  symtab_node *referred;
+  gimple *stmt;
+  unsigned int lto_stmt_uid;
+  unsigned int referred_index;
+  ENUM_BITFIELD (ipa_ref_use) use:3;
+  unsigned int speculative:1;
+};
+
+typedef struct ipa_ref ipa_ref_t;
+typedef struct ipa_ref *ipa_ref_ptr;
+
+
+/* List of references.  This is stored in both callgraph and varpool nodes.  */
+struct GTY(()) ipa_ref_list
+{
+public:
+  /* Return first reference in list or NULL if empty.  */
+  struct ipa_ref *first_reference (void)
+  {
+    if (!vec_safe_length (references))
+      return NULL;
+    return &(*references)[0];
+  }
+
+  /* Return first referring ref in list or NULL if empty.  */
+  struct ipa_ref *first_referring (void)
+  {
+    if (!referring.length ())
+      return NULL;
+    return referring[0];
+  }
+
+  /* Return first referring alias.  */
+  struct ipa_ref *first_alias (void)
+  {
+    struct ipa_ref *r = first_referring ();
+
+    return r && r->use == IPA_REF_ALIAS ? r : NULL;
+  }
+
+  /* Return last referring alias.  */
+  struct ipa_ref *last_alias (void)
+  {
+    unsigned int i = 0;
+
+    for(i = 0; i < referring.length (); i++)
+      if (referring[i]->use != IPA_REF_ALIAS)
+	break;
+
+    return i == 0 ? NULL : referring[i - 1];
+  }
+
+  /* Return true if the symbol has an alias.  */
+  bool inline has_aliases_p (void)
+  {
+    return first_alias ();
+  }
+
+  /* Clear reference list.  */
+  void clear (void)
+  {
+    referring.create (0);
+    references = NULL;
+  }
+
+  /* Return number of references.  */
+  unsigned int nreferences (void)
+  {
+    return vec_safe_length (references);
+  }
+
+  /* Store actual references in references vector.  */
+  vec<ipa_ref_t, va_gc> *references;
+  /* Referring is vector of pointers to references.  It must not live in GGC space
+     or GGC will try to mark middle of references vectors.  */
+  vec<ipa_ref_ptr>  GTY((skip)) referring;
+};
+
+#endif /* GCC_IPA_REF_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-reference.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-reference.h
new file mode 100644
index 0000000..3be02fb
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-reference.h
@@ -0,0 +1,36 @@
+/* IPA handling of references.
+   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Contributed by Kenneth Zadeck <zadeck@naturalbridge.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_IPA_REFERENCE_H
+#define GCC_IPA_REFERENCE_H
+
+/* In ipa-reference.c  */
+bitmap ipa_reference_get_not_read_global (struct cgraph_node *fn);
+bitmap ipa_reference_get_not_written_global (struct cgraph_node *fn);
+void ipa_reference_c_finalize (void);
+
+inline int
+ipa_reference_var_uid (tree t)
+{
+  return DECL_UID (symtab_node::get (t)->ultimate_alias_target (NULL)->decl);
+}
+
+#endif  /* GCC_IPA_REFERENCE_H  */
+
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-utils.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-utils.h
new file mode 100644
index 0000000..b70e8c5
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ipa-utils.h
@@ -0,0 +1,267 @@
+/* Utilities for ipa analysis.
+   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Contributed by Kenneth Zadeck <zadeck@naturalbridge.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_IPA_UTILS_H
+#define GCC_IPA_UTILS_H
+
+struct ipa_dfs_info {
+  int dfn_number;
+  int low_link;
+  /* This field will have the samy value for any two nodes in the same strongly
+     connected component.  */
+  int scc_no;
+  bool new_node;
+  bool on_stack;
+  struct cgraph_node* next_cycle;
+  PTR aux;
+};
+
+
+/* In ipa-utils.c  */
+void ipa_print_order (FILE*, const char *, struct cgraph_node**, int);
+int ipa_reduced_postorder (struct cgraph_node **, bool,
+			  bool (*ignore_edge) (struct cgraph_edge *));
+void ipa_free_postorder_info (void);
+vec<cgraph_node *> ipa_get_nodes_in_cycle (struct cgraph_node *);
+bool ipa_edge_within_scc (struct cgraph_edge *);
+int ipa_reverse_postorder (struct cgraph_node **);
+tree get_base_var (tree);
+void ipa_merge_profiles (struct cgraph_node *dst,
+			 struct cgraph_node *src, bool preserve_body = false);
+bool recursive_call_p (tree, tree);
+
+/* In ipa-profile.c  */
+bool ipa_propagate_frequency (struct cgraph_node *node);
+
+/* In ipa-devirt.c  */
+
+struct odr_type_d;
+typedef odr_type_d *odr_type;
+void build_type_inheritance_graph (void);
+void rebuild_type_inheritance_graph (void);
+void update_type_inheritance_graph (void);
+vec <cgraph_node *>
+possible_polymorphic_call_targets (tree, HOST_WIDE_INT,
+				   ipa_polymorphic_call_context,
+				   bool *copletep = NULL,
+				   void **cache_token = NULL,
+				   bool speuclative = false);
+odr_type get_odr_type (tree, bool insert = false);
+bool odr_type_p (const_tree);
+bool possible_polymorphic_call_target_p (tree ref, gimple *stmt, struct cgraph_node *n);
+void dump_possible_polymorphic_call_targets (FILE *, tree, HOST_WIDE_INT,
+					     const ipa_polymorphic_call_context &,
+					     bool verbose = true);
+bool possible_polymorphic_call_target_p (tree, HOST_WIDE_INT,
+				         const ipa_polymorphic_call_context &,
+					 struct cgraph_node *);
+tree polymorphic_ctor_dtor_p (tree, bool);
+tree inlined_polymorphic_ctor_dtor_block_p (tree, bool);
+bool decl_maybe_in_construction_p (tree, tree, gimple *, tree);
+tree vtable_pointer_value_to_binfo (const_tree);
+bool vtable_pointer_value_to_vtable (const_tree, tree *, unsigned HOST_WIDE_INT *);
+tree subbinfo_with_vtable_at_offset (tree, unsigned HOST_WIDE_INT, tree);
+void compare_virtual_tables (varpool_node *, varpool_node *);
+bool type_all_derivations_known_p (const_tree);
+bool type_known_to_have_no_derivations_p (tree);
+bool contains_polymorphic_type_p (const_tree);
+void register_odr_type (tree);
+bool types_must_be_same_for_odr (tree, tree);
+bool types_odr_comparable (tree, tree);
+cgraph_node *try_speculative_devirtualization (tree, HOST_WIDE_INT,
+					       ipa_polymorphic_call_context);
+void warn_types_mismatch (tree t1, tree t2, location_t loc1 = UNKNOWN_LOCATION,
+			  location_t loc2 = UNKNOWN_LOCATION);
+bool odr_or_derived_type_p (const_tree t);
+bool odr_types_equivalent_p (tree type1, tree type2);
+bool odr_type_violation_reported_p (tree type);
+
+/* Return vector containing possible targets of polymorphic call E.
+   If COMPLETEP is non-NULL, store true if the list is complete. 
+   CACHE_TOKEN (if non-NULL) will get stored to an unique ID of entry
+   in the target cache.  If user needs to visit every target list
+   just once, it can memoize them.
+
+   Returned vector is placed into cache.  It is NOT caller's responsibility
+   to free it.  The vector can be freed on cgraph_remove_node call if
+   the particular node is a virtual function present in the cache.  */
+
+inline vec <cgraph_node *>
+possible_polymorphic_call_targets (struct cgraph_edge *e,
+				   bool *completep = NULL,
+				   void **cache_token = NULL,
+				   bool speculative = false)
+{
+  ipa_polymorphic_call_context context(e);
+
+  return possible_polymorphic_call_targets (e->indirect_info->otr_type,
+					    e->indirect_info->otr_token,
+					    context,
+					    completep, cache_token,
+					    speculative);
+}
+
+/* Same as above but taking OBJ_TYPE_REF as an parameter.  */
+
+inline vec <cgraph_node *>
+possible_polymorphic_call_targets (tree ref,
+				   gimple *call,
+				   bool *completep = NULL,
+				   void **cache_token = NULL)
+{
+  ipa_polymorphic_call_context context (current_function_decl, ref, call);
+
+  return possible_polymorphic_call_targets (obj_type_ref_class (ref),
+					    tree_to_uhwi
+					      (OBJ_TYPE_REF_TOKEN (ref)),
+					    context,
+					    completep, cache_token);
+}
+
+/* Dump possible targets of a polymorphic call E into F.  */
+
+inline void
+dump_possible_polymorphic_call_targets (FILE *f, struct cgraph_edge *e,
+					bool verbose = true)
+{
+  ipa_polymorphic_call_context context(e);
+
+  dump_possible_polymorphic_call_targets (f, e->indirect_info->otr_type,
+					  e->indirect_info->otr_token,
+					  context, verbose);
+}
+
+/* Return true if N can be possibly target of a polymorphic call of
+   E.  */
+
+inline bool
+possible_polymorphic_call_target_p (struct cgraph_edge *e,
+				    struct cgraph_node *n)
+{
+  ipa_polymorphic_call_context context(e);
+
+  return possible_polymorphic_call_target_p (e->indirect_info->otr_type,
+					     e->indirect_info->otr_token,
+					     context, n);
+}
+
+/* Return true if BINFO corresponds to a type with virtual methods. 
+
+   Every type has several BINFOs.  One is the BINFO associated by the type
+   while other represents bases of derived types.  The BINFOs representing
+   bases do not have BINFO_VTABLE pointer set when this is the single
+   inheritance (because vtables are shared).  Look up the BINFO of type
+   and check presence of its vtable.  */
+
+inline bool
+polymorphic_type_binfo_p (const_tree binfo)
+{
+  return (BINFO_TYPE (binfo) && TYPE_BINFO (BINFO_TYPE (binfo))
+	  && BINFO_VTABLE (TYPE_BINFO (BINFO_TYPE (binfo))));
+}
+
+/* Return true if T is a type with linkage defined.  */
+
+inline bool
+type_with_linkage_p (const_tree t)
+{
+  gcc_checking_assert (TYPE_MAIN_VARIANT (t) == t);
+  if (!TYPE_NAME (t) || TREE_CODE (TYPE_NAME (t)) != TYPE_DECL)
+    return false;
+
+  /* To support -fno-lto-odr-type-merigng recognize types with vtables
+     to have linkage.  */
+  if (RECORD_OR_UNION_TYPE_P (t)
+      && TYPE_BINFO (t) && BINFO_VTABLE (TYPE_BINFO (t)))
+    return true;
+
+  /* After free_lang_data was run and -flto-odr-type-merging we can recongize
+     types with linkage by presence of mangled name.  */
+  if (DECL_ASSEMBLER_NAME_SET_P (TYPE_NAME (t)))
+    return true;
+
+  if (in_lto_p)
+    return false;
+  /* We used to check for TYPE_STUB_DECL but that is set to NULL for forward
+     declarations.  */
+
+  if (!RECORD_OR_UNION_TYPE_P (t) && TREE_CODE (t) != ENUMERAL_TYPE)
+    return false;
+
+  /* Builtin types do not define linkage, their TYPE_CONTEXT is NULL.  */
+  if (!TYPE_CONTEXT (t))
+    return false;
+
+  return true;
+}
+
+/* Return true if T is in anonymous namespace.
+   This works only on those C++ types with linkage defined.  */
+
+inline bool
+type_in_anonymous_namespace_p (const_tree t)
+{
+  gcc_checking_assert (type_with_linkage_p (t));
+
+  /* free_lang_data clears TYPE_STUB_DECL but sets assembler name to
+     "<anon>"  */
+  if (DECL_ASSEMBLER_NAME_SET_P (TYPE_NAME (t)))
+    return !strcmp ("<anon>",
+		    IDENTIFIER_POINTER
+		    (DECL_ASSEMBLER_NAME (TYPE_NAME (t))));
+  else if (!TYPE_STUB_DECL (t))
+    return false;
+  else
+    return !TREE_PUBLIC (TYPE_STUB_DECL (t));
+}
+
+/* Return true of T is type with One Definition Rule info attached. 
+   It means that either it is anonymous type or it has assembler name
+   set.  */
+
+inline bool
+odr_type_p (const_tree t)
+{
+  /* We do not have this information when not in LTO, but we do not need
+     to care, since it is used only for type merging.  */
+  gcc_checking_assert (in_lto_p || flag_lto);
+
+  if (!type_with_linkage_p (t))
+    return false;
+
+  /* To support -fno-lto-odr-type-merging consider types with vtables ODR.  */
+  if (type_in_anonymous_namespace_p (t))
+    return true;
+
+  if (TYPE_NAME (t) && DECL_ASSEMBLER_NAME_SET_P (TYPE_NAME (t)))
+    {
+      /* C++ FE uses magic <anon> as assembler names of anonymous types.
+ 	 verify that this match with type_in_anonymous_namespace_p.  */
+      gcc_checking_assert (strcmp ("<anon>",
+				   IDENTIFIER_POINTER
+				   (DECL_ASSEMBLER_NAME (TYPE_NAME (t)))));
+      return true;
+    }
+  return false;
+}
+
+#endif  /* GCC_IPA_UTILS_H  */
+
+
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ira-int.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ira-int.h
new file mode 100644
index 0000000..3c7fe4e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ira-int.h
@@ -0,0 +1,1511 @@
+/* Integrated Register Allocator (IRA) intercommunication header file.
+   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Contributed by Vladimir Makarov <vmakarov@redhat.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_IRA_INT_H
+#define GCC_IRA_INT_H
+
+#include "recog.h"
+
+/* To provide consistency in naming, all IRA external variables,
+   functions, common typedefs start with prefix ira_.  */
+
+#if CHECKING_P
+#define ENABLE_IRA_CHECKING
+#endif
+
+#ifdef ENABLE_IRA_CHECKING
+#define ira_assert(c) gcc_assert (c)
+#else
+/* Always define and include C, so that warnings for empty body in an
+  'if' statement and unused variable do not occur.  */
+#define ira_assert(c) ((void)(0 && (c)))
+#endif
+
+/* Compute register frequency from edge frequency FREQ.  It is
+   analogous to REG_FREQ_FROM_BB.  When optimizing for size, or
+   profile driven feedback is available and the function is never
+   executed, frequency is always equivalent.  Otherwise rescale the
+   edge frequency.  */
+#define REG_FREQ_FROM_EDGE_FREQ(freq)				   \
+  (optimize_function_for_size_p (cfun)				   \
+   ? REG_FREQ_MAX : (freq * REG_FREQ_MAX / BB_FREQ_MAX)		   \
+   ? (freq * REG_FREQ_MAX / BB_FREQ_MAX) : 1)
+
+/* A modified value of flag `-fira-verbose' used internally.  */
+extern int internal_flag_ira_verbose;
+
+/* Dump file of the allocator if it is not NULL.  */
+extern FILE *ira_dump_file;
+
+/* Typedefs for pointers to allocno live range, allocno, and copy of
+   allocnos.  */
+typedef struct live_range *live_range_t;
+typedef struct ira_allocno *ira_allocno_t;
+typedef struct ira_allocno_pref *ira_pref_t;
+typedef struct ira_allocno_copy *ira_copy_t;
+typedef struct ira_object *ira_object_t;
+
+/* Definition of vector of allocnos and copies.  */
+
+/* Typedef for pointer to the subsequent structure.  */
+typedef struct ira_loop_tree_node *ira_loop_tree_node_t;
+
+typedef unsigned short move_table[N_REG_CLASSES];
+
+/* In general case, IRA is a regional allocator.  The regions are
+   nested and form a tree.  Currently regions are natural loops.  The
+   following structure describes loop tree node (representing basic
+   block or loop).  We need such tree because the loop tree from
+   cfgloop.h is not convenient for the optimization: basic blocks are
+   not a part of the tree from cfgloop.h.  We also use the nodes for
+   storing additional information about basic blocks/loops for the
+   register allocation purposes.  */
+struct ira_loop_tree_node
+{
+  /* The node represents basic block if children == NULL.  */
+  basic_block bb;    /* NULL for loop.  */
+  /* NULL for BB or for loop tree root if we did not build CFG loop tree.  */
+  struct loop *loop;
+  /* NEXT/SUBLOOP_NEXT is the next node/loop-node of the same parent.
+     SUBLOOP_NEXT is always NULL for BBs.  */
+  ira_loop_tree_node_t subloop_next, next;
+  /* CHILDREN/SUBLOOPS is the first node/loop-node immediately inside
+     the node.  They are NULL for BBs.  */
+  ira_loop_tree_node_t subloops, children;
+  /* The node immediately containing given node.  */
+  ira_loop_tree_node_t parent;
+
+  /* Loop level in range [0, ira_loop_tree_height).  */
+  int level;
+
+  /* All the following members are defined only for nodes representing
+     loops.  */
+
+  /* The loop number from CFG loop tree.  The root number is 0.  */
+  int loop_num;
+
+  /* True if the loop was marked for removal from the register
+     allocation.  */
+  bool to_remove_p;
+
+  /* Allocnos in the loop corresponding to their regnos.  If it is
+     NULL the loop does not form a separate register allocation region
+     (e.g. because it has abnormal enter/exit edges and we cannot put
+     code for register shuffling on the edges if a different
+     allocation is used for a pseudo-register on different sides of
+     the edges).  Caps are not in the map (remember we can have more
+     one cap with the same regno in a region).  */
+  ira_allocno_t *regno_allocno_map;
+
+  /* True if there is an entry to given loop not from its parent (or
+     grandparent) basic block.  For example, it is possible for two
+     adjacent loops inside another loop.  */
+  bool entered_from_non_parent_p;
+
+  /* Maximal register pressure inside loop for given register class
+     (defined only for the pressure classes).  */
+  int reg_pressure[N_REG_CLASSES];
+
+  /* Numbers of allocnos referred or living in the loop node (except
+     for its subloops).  */
+  bitmap all_allocnos;
+
+  /* Numbers of allocnos living at the loop borders.  */
+  bitmap border_allocnos;
+
+  /* Regnos of pseudos modified in the loop node (including its
+     subloops).  */
+  bitmap modified_regnos;
+
+  /* Numbers of copies referred in the corresponding loop.  */
+  bitmap local_copies;
+};
+
+/* The root of the loop tree corresponding to the all function.  */
+extern ira_loop_tree_node_t ira_loop_tree_root;
+
+/* Height of the loop tree.  */
+extern int ira_loop_tree_height;
+
+/* All nodes representing basic blocks are referred through the
+   following array.  We cannot use basic block member `aux' for this
+   because it is used for insertion of insns on edges.  */
+extern ira_loop_tree_node_t ira_bb_nodes;
+
+/* Two access macros to the nodes representing basic blocks.  */
+#if defined ENABLE_IRA_CHECKING && (GCC_VERSION >= 2007)
+#define IRA_BB_NODE_BY_INDEX(index) __extension__			\
+(({ ira_loop_tree_node_t _node = (&ira_bb_nodes[index]);		\
+     if (_node->children != NULL || _node->loop != NULL || _node->bb == NULL)\
+       {								\
+         fprintf (stderr,						\
+                  "\n%s: %d: error in %s: it is not a block node\n",	\
+                  __FILE__, __LINE__, __FUNCTION__);			\
+         gcc_unreachable ();						\
+       }								\
+     _node; }))
+#else
+#define IRA_BB_NODE_BY_INDEX(index) (&ira_bb_nodes[index])
+#endif
+
+#define IRA_BB_NODE(bb) IRA_BB_NODE_BY_INDEX ((bb)->index)
+
+/* All nodes representing loops are referred through the following
+   array.  */
+extern ira_loop_tree_node_t ira_loop_nodes;
+
+/* Two access macros to the nodes representing loops.  */
+#if defined ENABLE_IRA_CHECKING && (GCC_VERSION >= 2007)
+#define IRA_LOOP_NODE_BY_INDEX(index) __extension__			\
+(({ ira_loop_tree_node_t const _node = (&ira_loop_nodes[index]);	\
+     if (_node->children == NULL || _node->bb != NULL			\
+         || (_node->loop == NULL && current_loops != NULL))		\
+       {								\
+         fprintf (stderr,						\
+                  "\n%s: %d: error in %s: it is not a loop node\n",	\
+                  __FILE__, __LINE__, __FUNCTION__);			\
+         gcc_unreachable ();						\
+       }								\
+     _node; }))
+#else
+#define IRA_LOOP_NODE_BY_INDEX(index) (&ira_loop_nodes[index])
+#endif
+
+#define IRA_LOOP_NODE(loop) IRA_LOOP_NODE_BY_INDEX ((loop)->num)
+
+
+/* The structure describes program points where a given allocno lives.
+   If the live ranges of two allocnos are intersected, the allocnos
+   are in conflict.  */
+struct live_range
+{
+  /* Object whose live range is described by given structure.  */
+  ira_object_t object;
+  /* Program point range.  */
+  int start, finish;
+  /* Next structure describing program points where the allocno
+     lives.  */
+  live_range_t next;
+  /* Pointer to structures with the same start/finish.  */
+  live_range_t start_next, finish_next;
+};
+
+/* Program points are enumerated by numbers from range
+   0..IRA_MAX_POINT-1.  There are approximately two times more program
+   points than insns.  Program points are places in the program where
+   liveness info can be changed.  In most general case (there are more
+   complicated cases too) some program points correspond to places
+   where input operand dies and other ones correspond to places where
+   output operands are born.  */
+extern int ira_max_point;
+
+/* Arrays of size IRA_MAX_POINT mapping a program point to the allocno
+   live ranges with given start/finish point.  */
+extern live_range_t *ira_start_point_ranges, *ira_finish_point_ranges;
+
+/* A structure representing conflict information for an allocno
+   (or one of its subwords).  */
+struct ira_object
+{
+  /* The allocno associated with this record.  */
+  ira_allocno_t allocno;
+  /* Vector of accumulated conflicting conflict_redords with NULL end
+     marker (if OBJECT_CONFLICT_VEC_P is true) or conflict bit vector
+     otherwise.  */
+  void *conflicts_array;
+  /* Pointer to structures describing at what program point the
+     object lives.  We always maintain the list in such way that *the
+     ranges in the list are not intersected and ordered by decreasing
+     their program points*.  */
+  live_range_t live_ranges;
+  /* The subword within ALLOCNO which is represented by this object.
+     Zero means the lowest-order subword (or the entire allocno in case
+     it is not being tracked in subwords).  */
+  int subword;
+  /* Allocated size of the conflicts array.  */
+  unsigned int conflicts_array_size;
+  /* A unique number for every instance of this structure, which is used
+     to represent it in conflict bit vectors.  */
+  int id;
+  /* Before building conflicts, MIN and MAX are initialized to
+     correspondingly minimal and maximal points of the accumulated
+     live ranges.  Afterwards, they hold the minimal and maximal ids
+     of other ira_objects that this one can conflict with.  */
+  int min, max;
+  /* Initial and accumulated hard registers conflicting with this
+     object and as a consequences cannot be assigned to the allocno.
+     All non-allocatable hard regs and hard regs of register classes
+     different from given allocno one are included in the sets.  */
+  HARD_REG_SET conflict_hard_regs, total_conflict_hard_regs;
+  /* Number of accumulated conflicts in the vector of conflicting
+     objects.  */
+  int num_accumulated_conflicts;
+  /* TRUE if conflicts are represented by a vector of pointers to
+     ira_object structures.  Otherwise, we use a bit vector indexed
+     by conflict ID numbers.  */
+  unsigned int conflict_vec_p : 1;
+};
+
+/* A structure representing an allocno (allocation entity).  Allocno
+   represents a pseudo-register in an allocation region.  If
+   pseudo-register does not live in a region but it lives in the
+   nested regions, it is represented in the region by special allocno
+   called *cap*.  There may be more one cap representing the same
+   pseudo-register in region.  It means that the corresponding
+   pseudo-register lives in more one non-intersected subregion.  */
+struct ira_allocno
+{
+  /* The allocno order number starting with 0.  Each allocno has an
+     unique number and the number is never changed for the
+     allocno.  */
+  int num;
+  /* Regno for allocno or cap.  */
+  int regno;
+  /* Mode of the allocno which is the mode of the corresponding
+     pseudo-register.  */
+  ENUM_BITFIELD (machine_mode) mode : 8;
+  /* Widest mode of the allocno which in at least one case could be
+     for paradoxical subregs where wmode > mode.  */
+  ENUM_BITFIELD (machine_mode) wmode : 8;
+  /* Register class which should be used for allocation for given
+     allocno.  NO_REGS means that we should use memory.  */
+  ENUM_BITFIELD (reg_class) aclass : 16;
+  /* During the reload, value TRUE means that we should not reassign a
+     hard register to the allocno got memory earlier.  It is set up
+     when we removed memory-memory move insn before each iteration of
+     the reload.  */
+  unsigned int dont_reassign_p : 1;
+#ifdef STACK_REGS
+  /* Set to TRUE if allocno can't be assigned to the stack hard
+     register correspondingly in this region and area including the
+     region and all its subregions recursively.  */
+  unsigned int no_stack_reg_p : 1, total_no_stack_reg_p : 1;
+#endif
+  /* TRUE value means that there is no sense to spill the allocno
+     during coloring because the spill will result in additional
+     reloads in reload pass.  */
+  unsigned int bad_spill_p : 1;
+  /* TRUE if a hard register or memory has been assigned to the
+     allocno.  */
+  unsigned int assigned_p : 1;
+  /* TRUE if conflicts for given allocno are represented by vector of
+     pointers to the conflicting allocnos.  Otherwise, we use a bit
+     vector where a bit with given index represents allocno with the
+     same number.  */
+  unsigned int conflict_vec_p : 1;
+  /* Hard register assigned to given allocno.  Negative value means
+     that memory was allocated to the allocno.  During the reload,
+     spilled allocno has value equal to the corresponding stack slot
+     number (0, ...) - 2.  Value -1 is used for allocnos spilled by the
+     reload (at this point pseudo-register has only one allocno) which
+     did not get stack slot yet.  */
+  signed int hard_regno : 16;
+  /* Allocnos with the same regno are linked by the following member.
+     Allocnos corresponding to inner loops are first in the list (it
+     corresponds to depth-first traverse of the loops).  */
+  ira_allocno_t next_regno_allocno;
+  /* There may be different allocnos with the same regno in different
+     regions.  Allocnos are bound to the corresponding loop tree node.
+     Pseudo-register may have only one regular allocno with given loop
+     tree node but more than one cap (see comments above).  */
+  ira_loop_tree_node_t loop_tree_node;
+  /* Accumulated usage references of the allocno.  Here and below,
+     word 'accumulated' means info for given region and all nested
+     subregions.  In this case, 'accumulated' means sum of references
+     of the corresponding pseudo-register in this region and in all
+     nested subregions recursively. */
+  int nrefs;
+  /* Accumulated frequency of usage of the allocno.  */
+  int freq;
+  /* Minimal accumulated and updated costs of usage register of the
+     allocno class.  */
+  int class_cost, updated_class_cost;
+  /* Minimal accumulated, and updated costs of memory for the allocno.
+     At the allocation start, the original and updated costs are
+     equal.  The updated cost may be changed after finishing
+     allocation in a region and starting allocation in a subregion.
+     The change reflects the cost of spill/restore code on the
+     subregion border if we assign memory to the pseudo in the
+     subregion.  */
+  int memory_cost, updated_memory_cost;
+  /* Accumulated number of points where the allocno lives and there is
+     excess pressure for its class.  Excess pressure for a register
+     class at some point means that there are more allocnos of given
+     register class living at the point than number of hard-registers
+     of the class available for the allocation.  */
+  int excess_pressure_points_num;
+  /* Allocno hard reg preferences.  */
+  ira_pref_t allocno_prefs;
+  /* Copies to other non-conflicting allocnos.  The copies can
+     represent move insn or potential move insn usually because of two
+     operand insn constraints.  */
+  ira_copy_t allocno_copies;
+  /* It is a allocno (cap) representing given allocno on upper loop tree
+     level.  */
+  ira_allocno_t cap;
+  /* It is a link to allocno (cap) on lower loop level represented by
+     given cap.  Null if given allocno is not a cap.  */
+  ira_allocno_t cap_member;
+  /* The number of objects tracked in the following array.  */
+  int num_objects;
+  /* An array of structures describing conflict information and live
+     ranges for each object associated with the allocno.  There may be
+     more than one such object in cases where the allocno represents a
+     multi-word register.  */
+  ira_object_t objects[2];
+  /* Accumulated frequency of calls which given allocno
+     intersects.  */
+  int call_freq;
+  /* Accumulated number of the intersected calls.  */
+  int calls_crossed_num;
+  /* The number of calls across which it is live, but which should not
+     affect register preferences.  */
+  int cheap_calls_crossed_num;
+  /* Registers clobbered by intersected calls.  */
+   HARD_REG_SET crossed_calls_clobbered_regs;
+  /* Array of usage costs (accumulated and the one updated during
+     coloring) for each hard register of the allocno class.  The
+     member value can be NULL if all costs are the same and equal to
+     CLASS_COST.  For example, the costs of two different hard
+     registers can be different if one hard register is callee-saved
+     and another one is callee-used and the allocno lives through
+     calls.  Another example can be case when for some insn the
+     corresponding pseudo-register value should be put in specific
+     register class (e.g. AREG for x86) which is a strict subset of
+     the allocno class (GENERAL_REGS for x86).  We have updated costs
+     to reflect the situation when the usage cost of a hard register
+     is decreased because the allocno is connected to another allocno
+     by a copy and the another allocno has been assigned to the hard
+     register.  */
+  int *hard_reg_costs, *updated_hard_reg_costs;
+  /* Array of decreasing costs (accumulated and the one updated during
+     coloring) for allocnos conflicting with given allocno for hard
+     regno of the allocno class.  The member value can be NULL if all
+     costs are the same.  These costs are used to reflect preferences
+     of other allocnos not assigned yet during assigning to given
+     allocno.  */
+  int *conflict_hard_reg_costs, *updated_conflict_hard_reg_costs;
+  /* Different additional data.  It is used to decrease size of
+     allocno data footprint.  */
+  void *add_data;
+};
+
+
+/* All members of the allocno structures should be accessed only
+   through the following macros.  */
+#define ALLOCNO_NUM(A) ((A)->num)
+#define ALLOCNO_REGNO(A) ((A)->regno)
+#define ALLOCNO_REG(A) ((A)->reg)
+#define ALLOCNO_NEXT_REGNO_ALLOCNO(A) ((A)->next_regno_allocno)
+#define ALLOCNO_LOOP_TREE_NODE(A) ((A)->loop_tree_node)
+#define ALLOCNO_CAP(A) ((A)->cap)
+#define ALLOCNO_CAP_MEMBER(A) ((A)->cap_member)
+#define ALLOCNO_NREFS(A) ((A)->nrefs)
+#define ALLOCNO_FREQ(A) ((A)->freq)
+#define ALLOCNO_HARD_REGNO(A) ((A)->hard_regno)
+#define ALLOCNO_CALL_FREQ(A) ((A)->call_freq)
+#define ALLOCNO_CALLS_CROSSED_NUM(A) ((A)->calls_crossed_num)
+#define ALLOCNO_CHEAP_CALLS_CROSSED_NUM(A) ((A)->cheap_calls_crossed_num)
+#define ALLOCNO_CROSSED_CALLS_CLOBBERED_REGS(A) \
+  ((A)->crossed_calls_clobbered_regs)
+#define ALLOCNO_MEM_OPTIMIZED_DEST(A) ((A)->mem_optimized_dest)
+#define ALLOCNO_MEM_OPTIMIZED_DEST_P(A) ((A)->mem_optimized_dest_p)
+#define ALLOCNO_SOMEWHERE_RENAMED_P(A) ((A)->somewhere_renamed_p)
+#define ALLOCNO_CHILD_RENAMED_P(A) ((A)->child_renamed_p)
+#define ALLOCNO_DONT_REASSIGN_P(A) ((A)->dont_reassign_p)
+#ifdef STACK_REGS
+#define ALLOCNO_NO_STACK_REG_P(A) ((A)->no_stack_reg_p)
+#define ALLOCNO_TOTAL_NO_STACK_REG_P(A) ((A)->total_no_stack_reg_p)
+#endif
+#define ALLOCNO_BAD_SPILL_P(A) ((A)->bad_spill_p)
+#define ALLOCNO_ASSIGNED_P(A) ((A)->assigned_p)
+#define ALLOCNO_MODE(A) ((A)->mode)
+#define ALLOCNO_WMODE(A) ((A)->wmode)
+#define ALLOCNO_PREFS(A) ((A)->allocno_prefs)
+#define ALLOCNO_COPIES(A) ((A)->allocno_copies)
+#define ALLOCNO_HARD_REG_COSTS(A) ((A)->hard_reg_costs)
+#define ALLOCNO_UPDATED_HARD_REG_COSTS(A) ((A)->updated_hard_reg_costs)
+#define ALLOCNO_CONFLICT_HARD_REG_COSTS(A) \
+  ((A)->conflict_hard_reg_costs)
+#define ALLOCNO_UPDATED_CONFLICT_HARD_REG_COSTS(A) \
+  ((A)->updated_conflict_hard_reg_costs)
+#define ALLOCNO_CLASS(A) ((A)->aclass)
+#define ALLOCNO_CLASS_COST(A) ((A)->class_cost)
+#define ALLOCNO_UPDATED_CLASS_COST(A) ((A)->updated_class_cost)
+#define ALLOCNO_MEMORY_COST(A) ((A)->memory_cost)
+#define ALLOCNO_UPDATED_MEMORY_COST(A) ((A)->updated_memory_cost)
+#define ALLOCNO_EXCESS_PRESSURE_POINTS_NUM(A) \
+  ((A)->excess_pressure_points_num)
+#define ALLOCNO_OBJECT(A,N) ((A)->objects[N])
+#define ALLOCNO_NUM_OBJECTS(A) ((A)->num_objects)
+#define ALLOCNO_ADD_DATA(A) ((A)->add_data)
+
+/* Typedef for pointer to the subsequent structure.  */
+typedef struct ira_emit_data *ira_emit_data_t;
+
+/* Allocno bound data used for emit pseudo live range split insns and
+   to flattening IR.  */
+struct ira_emit_data
+{
+  /* TRUE if the allocno assigned to memory was a destination of
+     removed move (see ira-emit.c) at loop exit because the value of
+     the corresponding pseudo-register is not changed inside the
+     loop.  */
+  unsigned int mem_optimized_dest_p : 1;
+  /* TRUE if the corresponding pseudo-register has disjoint live
+     ranges and the other allocnos of the pseudo-register except this
+     one changed REG.  */
+  unsigned int somewhere_renamed_p : 1;
+  /* TRUE if allocno with the same REGNO in a subregion has been
+     renamed, in other words, got a new pseudo-register.  */
+  unsigned int child_renamed_p : 1;
+  /* Final rtx representation of the allocno.  */
+  rtx reg;
+  /* Non NULL if we remove restoring value from given allocno to
+     MEM_OPTIMIZED_DEST at loop exit (see ira-emit.c) because the
+     allocno value is not changed inside the loop.  */
+  ira_allocno_t mem_optimized_dest;
+};
+
+#define ALLOCNO_EMIT_DATA(a) ((ira_emit_data_t) ALLOCNO_ADD_DATA (a))
+
+/* Data used to emit live range split insns and to flattening IR.  */
+extern ira_emit_data_t ira_allocno_emit_data;
+
+/* Abbreviation for frequent emit data access.  */
+static inline rtx
+allocno_emit_reg (ira_allocno_t a)
+{
+  return ALLOCNO_EMIT_DATA (a)->reg;
+}
+
+#define OBJECT_ALLOCNO(O) ((O)->allocno)
+#define OBJECT_SUBWORD(O) ((O)->subword)
+#define OBJECT_CONFLICT_ARRAY(O) ((O)->conflicts_array)
+#define OBJECT_CONFLICT_VEC(O) ((ira_object_t *)(O)->conflicts_array)
+#define OBJECT_CONFLICT_BITVEC(O) ((IRA_INT_TYPE *)(O)->conflicts_array)
+#define OBJECT_CONFLICT_ARRAY_SIZE(O) ((O)->conflicts_array_size)
+#define OBJECT_CONFLICT_VEC_P(O) ((O)->conflict_vec_p)
+#define OBJECT_NUM_CONFLICTS(O) ((O)->num_accumulated_conflicts)
+#define OBJECT_CONFLICT_HARD_REGS(O) ((O)->conflict_hard_regs)
+#define OBJECT_TOTAL_CONFLICT_HARD_REGS(O) ((O)->total_conflict_hard_regs)
+#define OBJECT_MIN(O) ((O)->min)
+#define OBJECT_MAX(O) ((O)->max)
+#define OBJECT_CONFLICT_ID(O) ((O)->id)
+#define OBJECT_LIVE_RANGES(O) ((O)->live_ranges)
+
+/* Map regno -> allocnos with given regno (see comments for
+   allocno member `next_regno_allocno').  */
+extern ira_allocno_t *ira_regno_allocno_map;
+
+/* Array of references to all allocnos.  The order number of the
+   allocno corresponds to the index in the array.  Removed allocnos
+   have NULL element value.  */
+extern ira_allocno_t *ira_allocnos;
+
+/* The size of the previous array.  */
+extern int ira_allocnos_num;
+
+/* Map a conflict id to its corresponding ira_object structure.  */
+extern ira_object_t *ira_object_id_map;
+
+/* The size of the previous array.  */
+extern int ira_objects_num;
+
+/* The following structure represents a hard register preference of
+   allocno.  The preference represent move insns or potential move
+   insns usually because of two operand insn constraints.  One move
+   operand is a hard register.  */
+struct ira_allocno_pref
+{
+  /* The unique order number of the preference node starting with 0.  */
+  int num;
+  /* Preferred hard register.  */
+  int hard_regno;
+  /* Accumulated execution frequency of insns from which the
+     preference created.  */
+  int freq;
+  /* Given allocno.  */
+  ira_allocno_t allocno;
+  /* All preferences with the same allocno are linked by the following
+     member.  */
+  ira_pref_t next_pref;
+};
+
+/* Array of references to all allocno preferences.  The order number
+   of the preference corresponds to the index in the array.  */
+extern ira_pref_t *ira_prefs;
+
+/* Size of the previous array.  */
+extern int ira_prefs_num;
+
+/* The following structure represents a copy of two allocnos.  The
+   copies represent move insns or potential move insns usually because
+   of two operand insn constraints.  To remove register shuffle, we
+   also create copies between allocno which is output of an insn and
+   allocno becoming dead in the insn.  */
+struct ira_allocno_copy
+{
+  /* The unique order number of the copy node starting with 0.  */
+  int num;
+  /* Allocnos connected by the copy.  The first allocno should have
+     smaller order number than the second one.  */
+  ira_allocno_t first, second;
+  /* Execution frequency of the copy.  */
+  int freq;
+  bool constraint_p;
+  /* It is a move insn which is an origin of the copy.  The member
+     value for the copy representing two operand insn constraints or
+     for the copy created to remove register shuffle is NULL.  In last
+     case the copy frequency is smaller than the corresponding insn
+     execution frequency.  */
+  rtx_insn *insn;
+  /* All copies with the same allocno as FIRST are linked by the two
+     following members.  */
+  ira_copy_t prev_first_allocno_copy, next_first_allocno_copy;
+  /* All copies with the same allocno as SECOND are linked by the two
+     following members.  */
+  ira_copy_t prev_second_allocno_copy, next_second_allocno_copy;
+  /* Region from which given copy is originated.  */
+  ira_loop_tree_node_t loop_tree_node;
+};
+
+/* Array of references to all copies.  The order number of the copy
+   corresponds to the index in the array.  Removed copies have NULL
+   element value.  */
+extern ira_copy_t *ira_copies;
+
+/* Size of the previous array.  */
+extern int ira_copies_num;
+
+/* The following structure describes a stack slot used for spilled
+   pseudo-registers.  */
+struct ira_spilled_reg_stack_slot
+{
+  /* pseudo-registers assigned to the stack slot.  */
+  bitmap_head spilled_regs;
+  /* RTL representation of the stack slot.  */
+  rtx mem;
+  /* Size of the stack slot.  */
+  poly_uint64_pod width;
+};
+
+/* The number of elements in the following array.  */
+extern int ira_spilled_reg_stack_slots_num;
+
+/* The following array contains info about spilled pseudo-registers
+   stack slots used in current function so far.  */
+extern struct ira_spilled_reg_stack_slot *ira_spilled_reg_stack_slots;
+
+/* Correspondingly overall cost of the allocation, cost of the
+   allocnos assigned to hard-registers, cost of the allocnos assigned
+   to memory, cost of loads, stores and register move insns generated
+   for pseudo-register live range splitting (see ira-emit.c).  */
+extern int64_t ira_overall_cost;
+extern int64_t ira_reg_cost, ira_mem_cost;
+extern int64_t ira_load_cost, ira_store_cost, ira_shuffle_cost;
+extern int ira_move_loops_num, ira_additional_jumps_num;
+
+
+/* This page contains a bitset implementation called 'min/max sets' used to
+   record conflicts in IRA.
+   They are named min/maxs set since we keep track of a minimum and a maximum
+   bit number for each set representing the bounds of valid elements.  Otherwise,
+   the implementation resembles sbitmaps in that we store an array of integers
+   whose bits directly represent the members of the set.  */
+
+/* The type used as elements in the array, and the number of bits in
+   this type.  */
+
+#define IRA_INT_BITS HOST_BITS_PER_WIDE_INT
+#define IRA_INT_TYPE HOST_WIDE_INT
+
+/* Set, clear or test bit number I in R, a bit vector of elements with
+   minimal index and maximal index equal correspondingly to MIN and
+   MAX.  */
+#if defined ENABLE_IRA_CHECKING && (GCC_VERSION >= 2007)
+
+#define SET_MINMAX_SET_BIT(R, I, MIN, MAX) __extension__	        \
+  (({ int _min = (MIN), _max = (MAX), _i = (I);				\
+     if (_i < _min || _i > _max)					\
+       {								\
+         fprintf (stderr,						\
+                  "\n%s: %d: error in %s: %d not in range [%d,%d]\n",   \
+                  __FILE__, __LINE__, __FUNCTION__, _i, _min, _max);	\
+         gcc_unreachable ();						\
+       }								\
+     ((R)[(unsigned) (_i - _min) / IRA_INT_BITS]			\
+      |= ((IRA_INT_TYPE) 1 << ((unsigned) (_i - _min) % IRA_INT_BITS))); }))
+
+
+#define CLEAR_MINMAX_SET_BIT(R, I, MIN, MAX) __extension__	        \
+  (({ int _min = (MIN), _max = (MAX), _i = (I);				\
+     if (_i < _min || _i > _max)					\
+       {								\
+         fprintf (stderr,						\
+                  "\n%s: %d: error in %s: %d not in range [%d,%d]\n",   \
+                  __FILE__, __LINE__, __FUNCTION__, _i, _min, _max);	\
+         gcc_unreachable ();						\
+       }								\
+     ((R)[(unsigned) (_i - _min) / IRA_INT_BITS]			\
+      &= ~((IRA_INT_TYPE) 1 << ((unsigned) (_i - _min) % IRA_INT_BITS))); }))
+
+#define TEST_MINMAX_SET_BIT(R, I, MIN, MAX) __extension__	        \
+  (({ int _min = (MIN), _max = (MAX), _i = (I);				\
+     if (_i < _min || _i > _max)					\
+       {								\
+         fprintf (stderr,						\
+                  "\n%s: %d: error in %s: %d not in range [%d,%d]\n",   \
+                  __FILE__, __LINE__, __FUNCTION__, _i, _min, _max);	\
+         gcc_unreachable ();						\
+       }								\
+     ((R)[(unsigned) (_i - _min) / IRA_INT_BITS]			\
+      & ((IRA_INT_TYPE) 1 << ((unsigned) (_i - _min) % IRA_INT_BITS))); }))
+
+#else
+
+#define SET_MINMAX_SET_BIT(R, I, MIN, MAX)			\
+  ((R)[(unsigned) ((I) - (MIN)) / IRA_INT_BITS]			\
+   |= ((IRA_INT_TYPE) 1 << ((unsigned) ((I) - (MIN)) % IRA_INT_BITS)))
+
+#define CLEAR_MINMAX_SET_BIT(R, I, MIN, MAX)			\
+  ((R)[(unsigned) ((I) - (MIN)) / IRA_INT_BITS]			\
+   &= ~((IRA_INT_TYPE) 1 << ((unsigned) ((I) - (MIN)) % IRA_INT_BITS)))
+
+#define TEST_MINMAX_SET_BIT(R, I, MIN, MAX)			\
+  ((R)[(unsigned) ((I) - (MIN)) / IRA_INT_BITS]			\
+   & ((IRA_INT_TYPE) 1 << ((unsigned) ((I) - (MIN)) % IRA_INT_BITS)))
+
+#endif
+
+/* The iterator for min/max sets.  */
+struct minmax_set_iterator {
+
+  /* Array containing the bit vector.  */
+  IRA_INT_TYPE *vec;
+
+  /* The number of the current element in the vector.  */
+  unsigned int word_num;
+
+  /* The number of bits in the bit vector.  */
+  unsigned int nel;
+
+  /* The current bit index of the bit vector.  */
+  unsigned int bit_num;
+
+  /* Index corresponding to the 1st bit of the bit vector.   */
+  int start_val;
+
+  /* The word of the bit vector currently visited.  */
+  unsigned IRA_INT_TYPE word;
+};
+
+/* Initialize the iterator I for bit vector VEC containing minimal and
+   maximal values MIN and MAX.  */
+static inline void
+minmax_set_iter_init (minmax_set_iterator *i, IRA_INT_TYPE *vec, int min,
+		      int max)
+{
+  i->vec = vec;
+  i->word_num = 0;
+  i->nel = max < min ? 0 : max - min + 1;
+  i->start_val = min;
+  i->bit_num = 0;
+  i->word = i->nel == 0 ? 0 : vec[0];
+}
+
+/* Return TRUE if we have more allocnos to visit, in which case *N is
+   set to the number of the element to be visited.  Otherwise, return
+   FALSE.  */
+static inline bool
+minmax_set_iter_cond (minmax_set_iterator *i, int *n)
+{
+  /* Skip words that are zeros.  */
+  for (; i->word == 0; i->word = i->vec[i->word_num])
+    {
+      i->word_num++;
+      i->bit_num = i->word_num * IRA_INT_BITS;
+
+      /* If we have reached the end, break.  */
+      if (i->bit_num >= i->nel)
+	return false;
+    }
+
+  /* Skip bits that are zero.  */
+  for (; (i->word & 1) == 0; i->word >>= 1)
+    i->bit_num++;
+
+  *n = (int) i->bit_num + i->start_val;
+
+  return true;
+}
+
+/* Advance to the next element in the set.  */
+static inline void
+minmax_set_iter_next (minmax_set_iterator *i)
+{
+  i->word >>= 1;
+  i->bit_num++;
+}
+
+/* Loop over all elements of a min/max set given by bit vector VEC and
+   their minimal and maximal values MIN and MAX.  In each iteration, N
+   is set to the number of next allocno.  ITER is an instance of
+   minmax_set_iterator used to iterate over the set.  */
+#define FOR_EACH_BIT_IN_MINMAX_SET(VEC, MIN, MAX, N, ITER)	\
+  for (minmax_set_iter_init (&(ITER), (VEC), (MIN), (MAX));	\
+       minmax_set_iter_cond (&(ITER), &(N));			\
+       minmax_set_iter_next (&(ITER)))
+
+struct target_ira_int {
+  ~target_ira_int ();
+
+  void free_ira_costs ();
+  void free_register_move_costs ();
+
+  /* Initialized once.  It is a maximal possible size of the allocated
+     struct costs.  */
+  size_t x_max_struct_costs_size;
+
+  /* Allocated and initialized once, and used to initialize cost values
+     for each insn.  */
+  struct costs *x_init_cost;
+
+  /* Allocated once, and used for temporary purposes.  */
+  struct costs *x_temp_costs;
+
+  /* Allocated once, and used for the cost calculation.  */
+  struct costs *x_op_costs[MAX_RECOG_OPERANDS];
+  struct costs *x_this_op_costs[MAX_RECOG_OPERANDS];
+
+  /* Hard registers that cannot be used for the register allocator for
+     all functions of the current compilation unit.  */
+  HARD_REG_SET x_no_unit_alloc_regs;
+
+  /* Map: hard regs X modes -> set of hard registers for storing value
+     of given mode starting with given hard register.  */
+  HARD_REG_SET (x_ira_reg_mode_hard_regset
+		[FIRST_PSEUDO_REGISTER][NUM_MACHINE_MODES]);
+
+  /* Maximum cost of moving from a register in one class to a register
+     in another class.  Based on TARGET_REGISTER_MOVE_COST.  */
+  move_table *x_ira_register_move_cost[MAX_MACHINE_MODE];
+
+  /* Similar, but here we don't have to move if the first index is a
+     subset of the second so in that case the cost is zero.  */
+  move_table *x_ira_may_move_in_cost[MAX_MACHINE_MODE];
+
+  /* Similar, but here we don't have to move if the first index is a
+     superset of the second so in that case the cost is zero.  */
+  move_table *x_ira_may_move_out_cost[MAX_MACHINE_MODE];
+
+  /* Keep track of the last mode we initialized move costs for.  */
+  int x_last_mode_for_init_move_cost;
+
+  /* Array analog of the macro MEMORY_MOVE_COST but they contain maximal
+     cost not minimal.  */
+  short int x_ira_max_memory_move_cost[MAX_MACHINE_MODE][N_REG_CLASSES][2];
+
+  /* Map class->true if class is a possible allocno class, false
+     otherwise. */
+  bool x_ira_reg_allocno_class_p[N_REG_CLASSES];
+
+  /* Map class->true if class is a pressure class, false otherwise. */
+  bool x_ira_reg_pressure_class_p[N_REG_CLASSES];
+
+  /* Array of the number of hard registers of given class which are
+     available for allocation.  The order is defined by the hard
+     register numbers.  */
+  short x_ira_non_ordered_class_hard_regs[N_REG_CLASSES][FIRST_PSEUDO_REGISTER];
+
+  /* Index (in ira_class_hard_regs; for given register class and hard
+     register (in general case a hard register can belong to several
+     register classes;.  The index is negative for hard registers
+     unavailable for the allocation.  */
+  short x_ira_class_hard_reg_index[N_REG_CLASSES][FIRST_PSEUDO_REGISTER];
+
+  /* Index [CL][M] contains R if R appears somewhere in a register of the form:
+
+         (reg:M R'), R' not in x_ira_prohibited_class_mode_regs[CL][M]
+
+     For example, if:
+
+     - (reg:M 2) is valid and occupies two registers;
+     - register 2 belongs to CL; and
+     - register 3 belongs to the same pressure class as CL
+
+     then (reg:M 2) contributes to [CL][M] and registers 2 and 3 will be
+     in the set.  */
+  HARD_REG_SET x_ira_useful_class_mode_regs[N_REG_CLASSES][NUM_MACHINE_MODES];
+
+  /* The value is number of elements in the subsequent array.  */
+  int x_ira_important_classes_num;
+
+  /* The array containing all non-empty classes.  Such classes is
+     important for calculation of the hard register usage costs.  */
+  enum reg_class x_ira_important_classes[N_REG_CLASSES];
+
+  /* The array containing indexes of important classes in the previous
+     array.  The array elements are defined only for important
+     classes.  */
+  int x_ira_important_class_nums[N_REG_CLASSES];
+
+  /* Map class->true if class is an uniform class, false otherwise.  */
+  bool x_ira_uniform_class_p[N_REG_CLASSES];
+
+  /* The biggest important class inside of intersection of the two
+     classes (that is calculated taking only hard registers available
+     for allocation into account;.  If the both classes contain no hard
+     registers available for allocation, the value is calculated with
+     taking all hard-registers including fixed ones into account.  */
+  enum reg_class x_ira_reg_class_intersect[N_REG_CLASSES][N_REG_CLASSES];
+
+  /* Classes with end marker LIM_REG_CLASSES which are intersected with
+     given class (the first index).  That includes given class itself.
+     This is calculated taking only hard registers available for
+     allocation into account.  */
+  enum reg_class x_ira_reg_class_super_classes[N_REG_CLASSES][N_REG_CLASSES];
+
+  /* The biggest (smallest) important class inside of (covering) union
+     of the two classes (that is calculated taking only hard registers
+     available for allocation into account).  If the both classes
+     contain no hard registers available for allocation, the value is
+     calculated with taking all hard-registers including fixed ones
+     into account.  In other words, the value is the corresponding
+     reg_class_subunion (reg_class_superunion) value.  */
+  enum reg_class x_ira_reg_class_subunion[N_REG_CLASSES][N_REG_CLASSES];
+  enum reg_class x_ira_reg_class_superunion[N_REG_CLASSES][N_REG_CLASSES];
+
+  /* For each reg class, table listing all the classes contained in it
+     (excluding the class itself.  Non-allocatable registers are
+     excluded from the consideration).  */
+  enum reg_class x_alloc_reg_class_subclasses[N_REG_CLASSES][N_REG_CLASSES];
+
+  /* Array whose values are hard regset of hard registers for which
+     move of the hard register in given mode into itself is
+     prohibited.  */
+  HARD_REG_SET x_ira_prohibited_mode_move_regs[NUM_MACHINE_MODES];
+
+  /* Flag of that the above array has been initialized.  */
+  bool x_ira_prohibited_mode_move_regs_initialized_p;
+};
+
+extern struct target_ira_int default_target_ira_int;
+#if SWITCHABLE_TARGET
+extern struct target_ira_int *this_target_ira_int;
+#else
+#define this_target_ira_int (&default_target_ira_int)
+#endif
+
+#define ira_reg_mode_hard_regset \
+  (this_target_ira_int->x_ira_reg_mode_hard_regset)
+#define ira_register_move_cost \
+  (this_target_ira_int->x_ira_register_move_cost)
+#define ira_max_memory_move_cost \
+  (this_target_ira_int->x_ira_max_memory_move_cost)
+#define ira_may_move_in_cost \
+  (this_target_ira_int->x_ira_may_move_in_cost)
+#define ira_may_move_out_cost \
+  (this_target_ira_int->x_ira_may_move_out_cost)
+#define ira_reg_allocno_class_p \
+  (this_target_ira_int->x_ira_reg_allocno_class_p)
+#define ira_reg_pressure_class_p \
+  (this_target_ira_int->x_ira_reg_pressure_class_p)
+#define ira_non_ordered_class_hard_regs \
+  (this_target_ira_int->x_ira_non_ordered_class_hard_regs)
+#define ira_class_hard_reg_index \
+  (this_target_ira_int->x_ira_class_hard_reg_index)
+#define ira_useful_class_mode_regs \
+  (this_target_ira_int->x_ira_useful_class_mode_regs)
+#define ira_important_classes_num \
+  (this_target_ira_int->x_ira_important_classes_num)
+#define ira_important_classes \
+  (this_target_ira_int->x_ira_important_classes)
+#define ira_important_class_nums \
+  (this_target_ira_int->x_ira_important_class_nums)
+#define ira_uniform_class_p \
+  (this_target_ira_int->x_ira_uniform_class_p)
+#define ira_reg_class_intersect \
+  (this_target_ira_int->x_ira_reg_class_intersect)
+#define ira_reg_class_super_classes \
+  (this_target_ira_int->x_ira_reg_class_super_classes)
+#define ira_reg_class_subunion \
+  (this_target_ira_int->x_ira_reg_class_subunion)
+#define ira_reg_class_superunion \
+  (this_target_ira_int->x_ira_reg_class_superunion)
+#define ira_prohibited_mode_move_regs \
+  (this_target_ira_int->x_ira_prohibited_mode_move_regs)
+
+/* ira.c: */
+
+extern void *ira_allocate (size_t);
+extern void ira_free (void *addr);
+extern bitmap ira_allocate_bitmap (void);
+extern void ira_free_bitmap (bitmap);
+extern void ira_print_disposition (FILE *);
+extern void ira_debug_disposition (void);
+extern void ira_debug_allocno_classes (void);
+extern void ira_init_register_move_cost (machine_mode);
+extern void ira_setup_alts (rtx_insn *insn, HARD_REG_SET &alts);
+extern int ira_get_dup_out_num (int op_num, HARD_REG_SET &alts);
+
+/* ira-build.c */
+
+/* The current loop tree node and its regno allocno map.  */
+extern ira_loop_tree_node_t ira_curr_loop_tree_node;
+extern ira_allocno_t *ira_curr_regno_allocno_map;
+
+extern void ira_debug_pref (ira_pref_t);
+extern void ira_debug_prefs (void);
+extern void ira_debug_allocno_prefs (ira_allocno_t);
+
+extern void ira_debug_copy (ira_copy_t);
+extern void debug (ira_allocno_copy &ref);
+extern void debug (ira_allocno_copy *ptr);
+
+extern void ira_debug_copies (void);
+extern void ira_debug_allocno_copies (ira_allocno_t);
+extern void debug (ira_allocno &ref);
+extern void debug (ira_allocno *ptr);
+
+extern void ira_traverse_loop_tree (bool, ira_loop_tree_node_t,
+				    void (*) (ira_loop_tree_node_t),
+				    void (*) (ira_loop_tree_node_t));
+extern ira_allocno_t ira_parent_allocno (ira_allocno_t);
+extern ira_allocno_t ira_parent_or_cap_allocno (ira_allocno_t);
+extern ira_allocno_t ira_create_allocno (int, bool, ira_loop_tree_node_t);
+extern void ira_create_allocno_objects (ira_allocno_t);
+extern void ira_set_allocno_class (ira_allocno_t, enum reg_class);
+extern bool ira_conflict_vector_profitable_p (ira_object_t, int);
+extern void ira_allocate_conflict_vec (ira_object_t, int);
+extern void ira_allocate_object_conflicts (ira_object_t, int);
+extern void ior_hard_reg_conflicts (ira_allocno_t, HARD_REG_SET *);
+extern void ira_print_expanded_allocno (ira_allocno_t);
+extern void ira_add_live_range_to_object (ira_object_t, int, int);
+extern live_range_t ira_create_live_range (ira_object_t, int, int,
+					   live_range_t);
+extern live_range_t ira_copy_live_range_list (live_range_t);
+extern live_range_t ira_merge_live_ranges (live_range_t, live_range_t);
+extern bool ira_live_ranges_intersect_p (live_range_t, live_range_t);
+extern void ira_finish_live_range (live_range_t);
+extern void ira_finish_live_range_list (live_range_t);
+extern void ira_free_allocno_updated_costs (ira_allocno_t);
+extern ira_pref_t ira_create_pref (ira_allocno_t, int, int);
+extern void ira_add_allocno_pref (ira_allocno_t, int, int);
+extern void ira_remove_pref (ira_pref_t);
+extern void ira_remove_allocno_prefs (ira_allocno_t);
+extern ira_copy_t ira_create_copy (ira_allocno_t, ira_allocno_t,
+				   int, bool, rtx_insn *,
+				   ira_loop_tree_node_t);
+extern ira_copy_t ira_add_allocno_copy (ira_allocno_t, ira_allocno_t, int,
+					bool, rtx_insn *,
+					ira_loop_tree_node_t);
+
+extern int *ira_allocate_cost_vector (reg_class_t);
+extern void ira_free_cost_vector (int *, reg_class_t);
+
+extern void ira_flattening (int, int);
+extern bool ira_build (void);
+extern void ira_destroy (void);
+
+/* ira-costs.c */
+extern void ira_init_costs_once (void);
+extern void ira_init_costs (void);
+extern void ira_costs (void);
+extern void ira_tune_allocno_costs (void);
+
+/* ira-lives.c */
+
+extern void ira_rebuild_start_finish_chains (void);
+extern void ira_print_live_range_list (FILE *, live_range_t);
+extern void debug (live_range &ref);
+extern void debug (live_range *ptr);
+extern void ira_debug_live_range_list (live_range_t);
+extern void ira_debug_allocno_live_ranges (ira_allocno_t);
+extern void ira_debug_live_ranges (void);
+extern void ira_create_allocno_live_ranges (void);
+extern void ira_compress_allocno_live_ranges (void);
+extern void ira_finish_allocno_live_ranges (void);
+extern void ira_implicitly_set_insn_hard_regs (HARD_REG_SET *,
+					       alternative_mask);
+
+/* ira-conflicts.c */
+extern void ira_debug_conflicts (bool);
+extern void ira_build_conflicts (void);
+
+/* ira-color.c */
+extern void ira_debug_hard_regs_forest (void);
+extern int ira_loop_edge_freq (ira_loop_tree_node_t, int, bool);
+extern void ira_reassign_conflict_allocnos (int);
+extern void ira_initiate_assign (void);
+extern void ira_finish_assign (void);
+extern void ira_color (void);
+
+/* ira-emit.c */
+extern void ira_initiate_emit_data (void);
+extern void ira_finish_emit_data (void);
+extern void ira_emit (bool);
+
+
+
+/* Return true if equivalence of pseudo REGNO is not a lvalue.  */
+static inline bool
+ira_equiv_no_lvalue_p (int regno)
+{
+  if (regno >= ira_reg_equiv_len)
+    return false;
+  return (ira_reg_equiv[regno].constant != NULL_RTX
+	  || ira_reg_equiv[regno].invariant != NULL_RTX
+	  || (ira_reg_equiv[regno].memory != NULL_RTX
+	      && MEM_READONLY_P (ira_reg_equiv[regno].memory)));
+}
+
+
+
+/* Initialize register costs for MODE if necessary.  */
+static inline void
+ira_init_register_move_cost_if_necessary (machine_mode mode)
+{
+  if (ira_register_move_cost[mode] == NULL)
+    ira_init_register_move_cost (mode);
+}
+
+
+
+/* The iterator for all allocnos.  */
+struct ira_allocno_iterator {
+  /* The number of the current element in IRA_ALLOCNOS.  */
+  int n;
+};
+
+/* Initialize the iterator I.  */
+static inline void
+ira_allocno_iter_init (ira_allocno_iterator *i)
+{
+  i->n = 0;
+}
+
+/* Return TRUE if we have more allocnos to visit, in which case *A is
+   set to the allocno to be visited.  Otherwise, return FALSE.  */
+static inline bool
+ira_allocno_iter_cond (ira_allocno_iterator *i, ira_allocno_t *a)
+{
+  int n;
+
+  for (n = i->n; n < ira_allocnos_num; n++)
+    if (ira_allocnos[n] != NULL)
+      {
+	*a = ira_allocnos[n];
+	i->n = n + 1;
+	return true;
+      }
+  return false;
+}
+
+/* Loop over all allocnos.  In each iteration, A is set to the next
+   allocno.  ITER is an instance of ira_allocno_iterator used to iterate
+   the allocnos.  */
+#define FOR_EACH_ALLOCNO(A, ITER)			\
+  for (ira_allocno_iter_init (&(ITER));			\
+       ira_allocno_iter_cond (&(ITER), &(A));)
+
+/* The iterator for all objects.  */
+struct ira_object_iterator {
+  /* The number of the current element in ira_object_id_map.  */
+  int n;
+};
+
+/* Initialize the iterator I.  */
+static inline void
+ira_object_iter_init (ira_object_iterator *i)
+{
+  i->n = 0;
+}
+
+/* Return TRUE if we have more objects to visit, in which case *OBJ is
+   set to the object to be visited.  Otherwise, return FALSE.  */
+static inline bool
+ira_object_iter_cond (ira_object_iterator *i, ira_object_t *obj)
+{
+  int n;
+
+  for (n = i->n; n < ira_objects_num; n++)
+    if (ira_object_id_map[n] != NULL)
+      {
+	*obj = ira_object_id_map[n];
+	i->n = n + 1;
+	return true;
+      }
+  return false;
+}
+
+/* Loop over all objects.  In each iteration, OBJ is set to the next
+   object.  ITER is an instance of ira_object_iterator used to iterate
+   the objects.  */
+#define FOR_EACH_OBJECT(OBJ, ITER)			\
+  for (ira_object_iter_init (&(ITER));			\
+       ira_object_iter_cond (&(ITER), &(OBJ));)
+
+/* The iterator for objects associated with an allocno.  */
+struct ira_allocno_object_iterator {
+  /* The number of the element the allocno's object array.  */
+  int n;
+};
+
+/* Initialize the iterator I.  */
+static inline void
+ira_allocno_object_iter_init (ira_allocno_object_iterator *i)
+{
+  i->n = 0;
+}
+
+/* Return TRUE if we have more objects to visit in allocno A, in which
+   case *O is set to the object to be visited.  Otherwise, return
+   FALSE.  */
+static inline bool
+ira_allocno_object_iter_cond (ira_allocno_object_iterator *i, ira_allocno_t a,
+			      ira_object_t *o)
+{
+  int n = i->n++;
+  if (n < ALLOCNO_NUM_OBJECTS (a))
+    {
+      *o = ALLOCNO_OBJECT (a, n);
+      return true;
+    }
+  return false;
+}
+
+/* Loop over all objects associated with allocno A.  In each
+   iteration, O is set to the next object.  ITER is an instance of
+   ira_allocno_object_iterator used to iterate the conflicts.  */
+#define FOR_EACH_ALLOCNO_OBJECT(A, O, ITER)			\
+  for (ira_allocno_object_iter_init (&(ITER));			\
+       ira_allocno_object_iter_cond (&(ITER), (A), &(O));)
+
+
+/* The iterator for prefs.  */
+struct ira_pref_iterator {
+  /* The number of the current element in IRA_PREFS.  */
+  int n;
+};
+
+/* Initialize the iterator I.  */
+static inline void
+ira_pref_iter_init (ira_pref_iterator *i)
+{
+  i->n = 0;
+}
+
+/* Return TRUE if we have more prefs to visit, in which case *PREF is
+   set to the pref to be visited.  Otherwise, return FALSE.  */
+static inline bool
+ira_pref_iter_cond (ira_pref_iterator *i, ira_pref_t *pref)
+{
+  int n;
+
+  for (n = i->n; n < ira_prefs_num; n++)
+    if (ira_prefs[n] != NULL)
+      {
+	*pref = ira_prefs[n];
+	i->n = n + 1;
+	return true;
+      }
+  return false;
+}
+
+/* Loop over all prefs.  In each iteration, P is set to the next
+   pref.  ITER is an instance of ira_pref_iterator used to iterate
+   the prefs.  */
+#define FOR_EACH_PREF(P, ITER)				\
+  for (ira_pref_iter_init (&(ITER));			\
+       ira_pref_iter_cond (&(ITER), &(P));)
+
+
+/* The iterator for copies.  */
+struct ira_copy_iterator {
+  /* The number of the current element in IRA_COPIES.  */
+  int n;
+};
+
+/* Initialize the iterator I.  */
+static inline void
+ira_copy_iter_init (ira_copy_iterator *i)
+{
+  i->n = 0;
+}
+
+/* Return TRUE if we have more copies to visit, in which case *CP is
+   set to the copy to be visited.  Otherwise, return FALSE.  */
+static inline bool
+ira_copy_iter_cond (ira_copy_iterator *i, ira_copy_t *cp)
+{
+  int n;
+
+  for (n = i->n; n < ira_copies_num; n++)
+    if (ira_copies[n] != NULL)
+      {
+	*cp = ira_copies[n];
+	i->n = n + 1;
+	return true;
+      }
+  return false;
+}
+
+/* Loop over all copies.  In each iteration, C is set to the next
+   copy.  ITER is an instance of ira_copy_iterator used to iterate
+   the copies.  */
+#define FOR_EACH_COPY(C, ITER)				\
+  for (ira_copy_iter_init (&(ITER));			\
+       ira_copy_iter_cond (&(ITER), &(C));)
+
+/* The iterator for object conflicts.  */
+struct ira_object_conflict_iterator {
+
+  /* TRUE if the conflicts are represented by vector of allocnos.  */
+  bool conflict_vec_p;
+
+  /* The conflict vector or conflict bit vector.  */
+  void *vec;
+
+  /* The number of the current element in the vector (of type
+     ira_object_t or IRA_INT_TYPE).  */
+  unsigned int word_num;
+
+  /* The bit vector size.  It is defined only if
+     OBJECT_CONFLICT_VEC_P is FALSE.  */
+  unsigned int size;
+
+  /* The current bit index of bit vector.  It is defined only if
+     OBJECT_CONFLICT_VEC_P is FALSE.  */
+  unsigned int bit_num;
+
+  /* The object id corresponding to the 1st bit of the bit vector.  It
+     is defined only if OBJECT_CONFLICT_VEC_P is FALSE.  */
+  int base_conflict_id;
+
+  /* The word of bit vector currently visited.  It is defined only if
+     OBJECT_CONFLICT_VEC_P is FALSE.  */
+  unsigned IRA_INT_TYPE word;
+};
+
+/* Initialize the iterator I with ALLOCNO conflicts.  */
+static inline void
+ira_object_conflict_iter_init (ira_object_conflict_iterator *i,
+			       ira_object_t obj)
+{
+  i->conflict_vec_p = OBJECT_CONFLICT_VEC_P (obj);
+  i->vec = OBJECT_CONFLICT_ARRAY (obj);
+  i->word_num = 0;
+  if (i->conflict_vec_p)
+    i->size = i->bit_num = i->base_conflict_id = i->word = 0;
+  else
+    {
+      if (OBJECT_MIN (obj) > OBJECT_MAX (obj))
+	i->size = 0;
+      else
+	i->size = ((OBJECT_MAX (obj) - OBJECT_MIN (obj)
+		    + IRA_INT_BITS)
+		   / IRA_INT_BITS) * sizeof (IRA_INT_TYPE);
+      i->bit_num = 0;
+      i->base_conflict_id = OBJECT_MIN (obj);
+      i->word = (i->size == 0 ? 0 : ((IRA_INT_TYPE *) i->vec)[0]);
+    }
+}
+
+/* Return TRUE if we have more conflicting allocnos to visit, in which
+   case *A is set to the allocno to be visited.  Otherwise, return
+   FALSE.  */
+static inline bool
+ira_object_conflict_iter_cond (ira_object_conflict_iterator *i,
+			       ira_object_t *pobj)
+{
+  ira_object_t obj;
+
+  if (i->conflict_vec_p)
+    {
+      obj = ((ira_object_t *) i->vec)[i->word_num++];
+      if (obj == NULL)
+	return false;
+    }
+  else
+    {
+      unsigned IRA_INT_TYPE word = i->word;
+      unsigned int bit_num = i->bit_num;
+
+      /* Skip words that are zeros.  */
+      for (; word == 0; word = ((IRA_INT_TYPE *) i->vec)[i->word_num])
+	{
+	  i->word_num++;
+
+	  /* If we have reached the end, break.  */
+	  if (i->word_num * sizeof (IRA_INT_TYPE) >= i->size)
+	    return false;
+
+	  bit_num = i->word_num * IRA_INT_BITS;
+	}
+
+      /* Skip bits that are zero.  */
+      for (; (word & 1) == 0; word >>= 1)
+	bit_num++;
+
+      obj = ira_object_id_map[bit_num + i->base_conflict_id];
+      i->bit_num = bit_num + 1;
+      i->word = word >> 1;
+    }
+
+  *pobj = obj;
+  return true;
+}
+
+/* Loop over all objects conflicting with OBJ.  In each iteration,
+   CONF is set to the next conflicting object.  ITER is an instance
+   of ira_object_conflict_iterator used to iterate the conflicts.  */
+#define FOR_EACH_OBJECT_CONFLICT(OBJ, CONF, ITER)			\
+  for (ira_object_conflict_iter_init (&(ITER), (OBJ));			\
+       ira_object_conflict_iter_cond (&(ITER), &(CONF));)
+
+
+
+/* The function returns TRUE if at least one hard register from ones
+   starting with HARD_REGNO and containing value of MODE are in set
+   HARD_REGSET.  */
+static inline bool
+ira_hard_reg_set_intersection_p (int hard_regno, machine_mode mode,
+				 HARD_REG_SET hard_regset)
+{
+  int i;
+
+  gcc_assert (hard_regno >= 0);
+  for (i = hard_regno_nregs (hard_regno, mode) - 1; i >= 0; i--)
+    if (TEST_HARD_REG_BIT (hard_regset, hard_regno + i))
+      return true;
+  return false;
+}
+
+/* Return number of hard registers in hard register SET.  */
+static inline int
+hard_reg_set_size (HARD_REG_SET set)
+{
+  int i, size;
+
+  for (size = i = 0; i < FIRST_PSEUDO_REGISTER; i++)
+    if (TEST_HARD_REG_BIT (set, i))
+      size++;
+  return size;
+}
+
+/* The function returns TRUE if hard registers starting with
+   HARD_REGNO and containing value of MODE are fully in set
+   HARD_REGSET.  */
+static inline bool
+ira_hard_reg_in_set_p (int hard_regno, machine_mode mode,
+		       HARD_REG_SET hard_regset)
+{
+  int i;
+
+  ira_assert (hard_regno >= 0);
+  for (i = hard_regno_nregs (hard_regno, mode) - 1; i >= 0; i--)
+    if (!TEST_HARD_REG_BIT (hard_regset, hard_regno + i))
+      return false;
+  return true;
+}
+
+
+
+/* To save memory we use a lazy approach for allocation and
+   initialization of the cost vectors.  We do this only when it is
+   really necessary.  */
+
+/* Allocate cost vector *VEC for hard registers of ACLASS and
+   initialize the elements by VAL if it is necessary */
+static inline void
+ira_allocate_and_set_costs (int **vec, reg_class_t aclass, int val)
+{
+  int i, *reg_costs;
+  int len;
+
+  if (*vec != NULL)
+    return;
+  *vec = reg_costs = ira_allocate_cost_vector (aclass);
+  len = ira_class_hard_regs_num[(int) aclass];
+  for (i = 0; i < len; i++)
+    reg_costs[i] = val;
+}
+
+/* Allocate cost vector *VEC for hard registers of ACLASS and copy
+   values of vector SRC into the vector if it is necessary */
+static inline void
+ira_allocate_and_copy_costs (int **vec, enum reg_class aclass, int *src)
+{
+  int len;
+
+  if (*vec != NULL || src == NULL)
+    return;
+  *vec = ira_allocate_cost_vector (aclass);
+  len = ira_class_hard_regs_num[aclass];
+  memcpy (*vec, src, sizeof (int) * len);
+}
+
+/* Allocate cost vector *VEC for hard registers of ACLASS and add
+   values of vector SRC into the vector if it is necessary */
+static inline void
+ira_allocate_and_accumulate_costs (int **vec, enum reg_class aclass, int *src)
+{
+  int i, len;
+
+  if (src == NULL)
+    return;
+  len = ira_class_hard_regs_num[aclass];
+  if (*vec == NULL)
+    {
+      *vec = ira_allocate_cost_vector (aclass);
+      memset (*vec, 0, sizeof (int) * len);
+    }
+  for (i = 0; i < len; i++)
+    (*vec)[i] += src[i];
+}
+
+/* Allocate cost vector *VEC for hard registers of ACLASS and copy
+   values of vector SRC into the vector or initialize it by VAL (if
+   SRC is null).  */
+static inline void
+ira_allocate_and_set_or_copy_costs (int **vec, enum reg_class aclass,
+				    int val, int *src)
+{
+  int i, *reg_costs;
+  int len;
+
+  if (*vec != NULL)
+    return;
+  *vec = reg_costs = ira_allocate_cost_vector (aclass);
+  len = ira_class_hard_regs_num[aclass];
+  if (src != NULL)
+    memcpy (reg_costs, src, sizeof (int) * len);
+  else
+    {
+      for (i = 0; i < len; i++)
+	reg_costs[i] = val;
+    }
+}
+
+extern rtx ira_create_new_reg (rtx);
+extern int first_moveable_pseudo, last_moveable_pseudo;
+
+#endif /* GCC_IRA_INT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ira.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ira.h
new file mode 100644
index 0000000..8e1d039
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ira.h
@@ -0,0 +1,227 @@
+/* Communication between the Integrated Register Allocator (IRA) and
+   the rest of the compiler.
+   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+   Contributed by Vladimir Makarov <vmakarov@redhat.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_IRA_H
+#define GCC_IRA_H
+
+#include "emit-rtl.h"
+
+/* True when we use LRA instead of reload pass for the current
+   function.  */
+extern bool ira_use_lra_p;
+
+/* True if we have allocno conflicts.  It is false for non-optimized
+   mode or when the conflict table is too big.  */
+extern bool ira_conflicts_p;
+
+struct target_ira
+{
+  /* Map: hard register number -> allocno class it belongs to.  If the
+     corresponding class is NO_REGS, the hard register is not available
+     for allocation.  */
+  enum reg_class x_ira_hard_regno_allocno_class[FIRST_PSEUDO_REGISTER];
+
+  /* Number of allocno classes.  Allocno classes are register classes
+     which can be used for allocations of allocnos.  */
+  int x_ira_allocno_classes_num;
+
+  /* The array containing allocno classes.  Only first
+     IRA_ALLOCNO_CLASSES_NUM elements are used for this.  */
+  enum reg_class x_ira_allocno_classes[N_REG_CLASSES];
+
+  /* Map of all register classes to corresponding allocno classes
+     containing the given class.  If given class is not a subset of an
+     allocno class, we translate it into the cheapest allocno class.  */
+  enum reg_class x_ira_allocno_class_translate[N_REG_CLASSES];
+
+  /* Number of pressure classes.  Pressure classes are register
+     classes for which we calculate register pressure.  */
+  int x_ira_pressure_classes_num;
+
+  /* The array containing pressure classes.  Only first
+     IRA_PRESSURE_CLASSES_NUM elements are used for this.  */
+  enum reg_class x_ira_pressure_classes[N_REG_CLASSES];
+
+  /* Map of all register classes to corresponding pressure classes
+     containing the given class.  If given class is not a subset of an
+     pressure class, we translate it into the cheapest pressure
+     class.  */
+  enum reg_class x_ira_pressure_class_translate[N_REG_CLASSES];
+
+  /* Biggest pressure register class containing stack registers.
+     NO_REGS if there are no stack registers.  */
+  enum reg_class x_ira_stack_reg_pressure_class;
+
+  /* Maps: register class x machine mode -> maximal/minimal number of
+     hard registers of given class needed to store value of given
+     mode.  */
+  unsigned char x_ira_reg_class_max_nregs[N_REG_CLASSES][MAX_MACHINE_MODE];
+  unsigned char x_ira_reg_class_min_nregs[N_REG_CLASSES][MAX_MACHINE_MODE];
+
+  /* Array analogous to target hook TARGET_MEMORY_MOVE_COST.  */
+  short x_ira_memory_move_cost[MAX_MACHINE_MODE][N_REG_CLASSES][2];
+
+  /* Array of number of hard registers of given class which are
+     available for the allocation.  The order is defined by the
+     allocation order.  */
+  short x_ira_class_hard_regs[N_REG_CLASSES][FIRST_PSEUDO_REGISTER];
+
+  /* The number of elements of the above array for given register
+     class.  */
+  int x_ira_class_hard_regs_num[N_REG_CLASSES];
+
+  /* Register class subset relation: TRUE if the first class is a subset
+     of the second one considering only hard registers available for the
+     allocation.  */
+  int x_ira_class_subset_p[N_REG_CLASSES][N_REG_CLASSES];
+
+  /* The biggest class inside of intersection of the two classes (that
+     is calculated taking only hard registers available for allocation
+     into account.  If the both classes contain no hard registers
+     available for allocation, the value is calculated with taking all
+     hard-registers including fixed ones into account.  */
+  enum reg_class x_ira_reg_class_subset[N_REG_CLASSES][N_REG_CLASSES];
+
+  /* True if the two classes (that is calculated taking only hard
+     registers available for allocation into account; are
+     intersected.  */
+  bool x_ira_reg_classes_intersect_p[N_REG_CLASSES][N_REG_CLASSES];
+
+  /* If class CL has a single allocatable register of mode M,
+     index [CL][M] gives the number of that register, otherwise it is -1.  */
+  short x_ira_class_singleton[N_REG_CLASSES][MAX_MACHINE_MODE];
+
+  /* Function specific hard registers cannot be used for the register
+     allocation.  */
+  HARD_REG_SET x_ira_no_alloc_regs;
+
+  /* Array whose values are hard regset of hard registers available for
+     the allocation of given register class whose targetm.hard_regno_mode_ok
+     values for given mode are false.  */
+  HARD_REG_SET x_ira_prohibited_class_mode_regs[N_REG_CLASSES][NUM_MACHINE_MODES];
+};
+
+extern struct target_ira default_target_ira;
+#if SWITCHABLE_TARGET
+extern struct target_ira *this_target_ira;
+#else
+#define this_target_ira (&default_target_ira)
+#endif
+
+#define ira_hard_regno_allocno_class \
+  (this_target_ira->x_ira_hard_regno_allocno_class)
+#define ira_allocno_classes_num \
+  (this_target_ira->x_ira_allocno_classes_num)
+#define ira_allocno_classes \
+  (this_target_ira->x_ira_allocno_classes)
+#define ira_allocno_class_translate \
+  (this_target_ira->x_ira_allocno_class_translate)
+#define ira_pressure_classes_num \
+  (this_target_ira->x_ira_pressure_classes_num)
+#define ira_pressure_classes \
+  (this_target_ira->x_ira_pressure_classes)
+#define ira_pressure_class_translate \
+  (this_target_ira->x_ira_pressure_class_translate)
+#define ira_stack_reg_pressure_class \
+  (this_target_ira->x_ira_stack_reg_pressure_class)
+#define ira_reg_class_max_nregs \
+  (this_target_ira->x_ira_reg_class_max_nregs)
+#define ira_reg_class_min_nregs \
+  (this_target_ira->x_ira_reg_class_min_nregs)
+#define ira_memory_move_cost \
+  (this_target_ira->x_ira_memory_move_cost)
+#define ira_class_hard_regs \
+  (this_target_ira->x_ira_class_hard_regs)
+#define ira_class_hard_regs_num \
+  (this_target_ira->x_ira_class_hard_regs_num)
+#define ira_class_subset_p \
+  (this_target_ira->x_ira_class_subset_p)
+#define ira_reg_class_subset \
+  (this_target_ira->x_ira_reg_class_subset)
+#define ira_reg_classes_intersect_p \
+  (this_target_ira->x_ira_reg_classes_intersect_p)
+#define ira_class_singleton \
+  (this_target_ira->x_ira_class_singleton)
+#define ira_no_alloc_regs \
+  (this_target_ira->x_ira_no_alloc_regs)
+#define ira_prohibited_class_mode_regs \
+  (this_target_ira->x_ira_prohibited_class_mode_regs)
+
+/* Major structure describing equivalence info for a pseudo.  */
+struct ira_reg_equiv_s
+{
+  /* True if we can use this equivalence.  */
+  bool defined_p;
+  /* True if the usage of the equivalence is profitable.  */
+  bool profitable_p;
+  /* Equiv. memory, constant, invariant, and initializing insns of
+     given pseudo-register or NULL_RTX.  */
+  rtx memory;
+  rtx constant;
+  rtx invariant;
+  /* Always NULL_RTX if defined_p is false.  */
+  rtx_insn_list *init_insns;
+};
+
+/* The length of the following array.  */
+extern int ira_reg_equiv_len;
+
+/* Info about equiv. info for each register.  */
+extern struct ira_reg_equiv_s *ira_reg_equiv;
+
+extern void ira_init_once (void);
+extern void ira_init (void);
+extern void ira_setup_eliminable_regset (void);
+extern rtx ira_eliminate_regs (rtx, machine_mode);
+extern void ira_set_pseudo_classes (bool, FILE *);
+extern void ira_expand_reg_equiv (void);
+extern void ira_update_equiv_info_by_shuffle_insn (int, int, rtx_insn *);
+
+extern void ira_sort_regnos_for_alter_reg (int *, int, machine_mode *);
+extern void ira_mark_allocation_change (int);
+extern void ira_mark_memory_move_deletion (int, int);
+extern bool ira_reassign_pseudos (int *, int, HARD_REG_SET, HARD_REG_SET *,
+				  HARD_REG_SET *, bitmap);
+extern rtx ira_reuse_stack_slot (int, poly_uint64, poly_uint64);
+extern void ira_mark_new_stack_slot (rtx, int, poly_uint64);
+extern bool ira_better_spill_reload_regno_p (int *, int *, rtx, rtx, rtx_insn *);
+extern bool ira_bad_reload_regno (int, rtx, rtx);
+
+extern void ira_adjust_equiv_reg_cost (unsigned, int);
+
+/* ira-costs.c */
+extern void ira_costs_c_finalize (void);
+
+/* ira-lives.c */
+extern rtx non_conflicting_reg_copy_p (rtx_insn *);
+
+/* Spilling static chain pseudo may result in generation of wrong
+   non-local goto code using frame-pointer to address saved stack
+   pointer value after restoring old frame pointer value.  The
+   function returns TRUE if REGNO is such a static chain pseudo.  */
+static inline bool
+non_spilled_static_chain_regno_p (int regno)
+{
+  return (cfun->static_chain_decl && crtl->has_nonlocal_goto
+	  && REG_EXPR (regno_reg_rtx[regno]) == cfun->static_chain_decl);
+}
+
+#endif /* GCC_IRA_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/is-a.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/is-a.h
new file mode 100644
index 0000000..f3533f6
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/is-a.h
@@ -0,0 +1,239 @@
+/* Dynamic testing for abstract is-a relationships.
+   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Contributed by Lawrence Crowl.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+/* This header generic type query and conversion functions.
+
+
+USING THE GENERIC TYPE FACILITY
+
+
+The user functions are:
+
+bool is_a <TYPE> (pointer)
+
+    Tests whether the pointer actually points to a more derived TYPE.
+
+    Suppose you have a symtab_node *ptr, AKA symtab_node *ptr.  You can test
+    whether it points to a 'derived' cgraph_node as follows.
+
+      if (is_a <cgraph_node *> (ptr))
+        ....
+
+
+TYPE as_a <TYPE> (pointer)
+
+    Converts pointer to a TYPE.
+
+    You can just assume that it is such a node.
+
+      do_something_with (as_a <cgraph_node *> *ptr);
+
+TYPE safe_as_a <TYPE> (pointer)
+
+    Like as_a <TYPE> (pointer), but where pointer could be NULL.  This
+    adds a check against NULL where the regular is_a_helper hook for TYPE
+    assumes non-NULL.
+
+      do_something_with (safe_as_a <cgraph_node *> *ptr);
+
+TYPE dyn_cast <TYPE> (pointer)
+
+    Converts pointer to TYPE if and only if "is_a <TYPE> pointer".  Otherwise,
+    returns NULL.  This function is essentially a checked down cast.
+
+    This functions reduce compile time and increase type safety when treating a
+    generic item as a more specific item.
+
+    You can test and obtain a pointer to the 'derived' type in one indivisible
+    operation.
+
+      if (cgraph_node *cptr = dyn_cast <cgraph_node *> (ptr))
+        ....
+
+    As an example, the code change is from
+
+      if (symtab_function_p (node))
+        {
+          struct cgraph_node *cnode = cgraph (node);
+          ....
+        }
+
+    to
+
+      if (cgraph_node *cnode = dyn_cast <cgraph_node *> (node))
+        {
+          ....
+        }
+
+    The necessary conditional test defines a variable that holds a known good
+    pointer to the specific item and avoids subsequent conversion calls and
+    the assertion checks that may come with them.
+
+    When, the property test is embedded within a larger condition, the
+    variable declaration gets pulled out of the condition.  (This approach
+    leaves some room for using the variable inappropriately.)
+
+      if (symtab_variable_p (node) && varpool (node)->finalized)
+        varpool_analyze_node (varpool (node));
+
+    becomes
+
+      varpool_node *vnode = dyn_cast <varpool_node *> (node);
+      if (vnode && vnode->finalized)
+        varpool_analyze_node (vnode);
+
+    Note that we have converted two sets of assertions in the calls to varpool
+    into safe and efficient use of a variable.
+
+TYPE safe_dyn_cast <TYPE> (pointer)
+
+    Like dyn_cast <TYPE> (pointer), except that it accepts null pointers
+    and returns null results for them.
+
+
+If you use these functions and get a 'inline function not defined' or a
+'missing symbol' error message for 'is_a_helper<....>::test', it means that
+the connection between the types has not been made.  See below.
+
+
+EXTENDING THE GENERIC TYPE FACILITY
+
+Each connection between types must be made by defining a specialization of the
+template member function 'test' of the template class 'is_a_helper'.  For
+example,
+
+  template <>
+  template <>
+  inline bool
+  is_a_helper <cgraph_node *>::test (symtab_node *p)
+  {
+    return p->type == SYMTAB_FUNCTION;
+  }
+
+If a simple reinterpret_cast between the pointer types is incorrect, then you
+must also specialize the template member function 'cast'.  Failure to do so
+when needed may result in a crash.  For example,
+
+  template <>
+  template <>
+  inline bool
+  is_a_helper <cgraph_node *>::cast (symtab_node *p)
+  {
+    return &p->x_function;
+  }
+
+*/
+
+#ifndef GCC_IS_A_H
+#define GCC_IS_A_H
+
+/* A generic type conversion internal helper class.  */
+
+template <typename T>
+struct is_a_helper
+{
+  template <typename U>
+  static inline bool test (U *p);
+  template <typename U>
+  static inline T cast (U *p);
+};
+
+/* Note that we deliberately do not define the 'test' member template.  Not
+   doing so will result in a build-time error for type relationships that have
+   not been defined, rather than a run-time error.  See the discussion above
+   for when to define this member.  */
+
+/* This is the generic implementation for casting from one type to another.
+   Do not use this routine directly; it is an internal function.  See the
+   discussion above for when to define this member.  */
+
+template <typename T>
+template <typename U>
+inline T
+is_a_helper <T>::cast (U *p)
+{
+  return reinterpret_cast <T> (p);
+}
+
+
+/* The public interface.  */
+
+/* A generic test for a type relationship.  See the discussion above for when
+   to use this function.  The question answered is "Is type T a derived type of
+   type U?".  */
+
+template <typename T, typename U>
+inline bool
+is_a (U *p)
+{
+  return is_a_helper<T>::test (p);
+}
+
+/* A generic conversion from a base type U to a derived type T.  See the
+   discussion above for when to use this function.  */
+
+template <typename T, typename U>
+inline T
+as_a (U *p)
+{
+  gcc_checking_assert (is_a <T> (p));
+  return is_a_helper <T>::cast (p);
+}
+
+/* Similar to as_a<>, but where the pointer can be NULL, even if
+   is_a_helper<T> doesn't check for NULL.  */
+
+template <typename T, typename U>
+inline T
+safe_as_a (U *p)
+{
+  if (p)
+    {
+      gcc_checking_assert (is_a <T> (p));
+      return is_a_helper <T>::cast (p);
+    }
+  else
+    return NULL;
+}
+
+/* A generic checked conversion from a base type U to a derived type T.  See
+   the discussion above for when to use this function.  */
+
+template <typename T, typename U>
+inline T
+dyn_cast (U *p)
+{
+  if (is_a <T> (p))
+    return is_a_helper <T>::cast (p);
+  else
+    return static_cast <T> (0);
+}
+
+/* Similar to dyn_cast, except that the pointer may be null.  */
+
+template <typename T, typename U>
+inline T
+safe_dyn_cast (U *p)
+{
+  return p ? dyn_cast <T> (p) : 0;
+}
+
+#endif  /* GCC_IS_A_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/json.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/json.h
new file mode 100644
index 0000000..0527a2f
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/json.h
@@ -0,0 +1,169 @@
+/* JSON trees
+   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Contributed by David Malcolm <dmalcolm@redhat.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_JSON_H
+#define GCC_JSON_H
+
+/* Implementation of JSON, a lightweight data-interchange format.
+
+   See http://www.json.org/
+   and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
+   and https://tools.ietf.org/html/rfc7159
+
+   Supports creating a DOM-like tree of json::value *, and then dumping
+   json::value * to text.  */
+
+namespace json
+{
+
+/* Forward decls of json::value and its subclasses (using indentation
+   to denote inheritance.  */
+
+class value;
+  class object;
+  class array;
+  class number;
+  class string;
+  class literal;
+
+/* An enum for discriminating the subclasses of json::value.  */
+
+enum kind
+{
+  /* class json::object.  */
+  JSON_OBJECT,
+
+  /* class json::array.  */
+  JSON_ARRAY,
+
+  /* class json::number.  */
+  JSON_NUMBER,
+
+  /* class json::string.  */
+  JSON_STRING,
+
+  /* class json::literal uses these three values to identify the
+     particular literal.  */
+  JSON_TRUE,
+  JSON_FALSE,
+  JSON_NULL
+};
+
+/* Base class of JSON value.  */
+
+class value
+{
+ public:
+  virtual ~value () {}
+  virtual enum kind get_kind () const = 0;
+  virtual void print (pretty_printer *pp) const = 0;
+
+  void dump (FILE *) const;
+};
+
+/* Subclass of value for objects: an unordered collection of
+   key/value pairs.  */
+
+class object : public value
+{
+ public:
+  ~object ();
+
+  enum kind get_kind () const FINAL OVERRIDE { return JSON_OBJECT; }
+  void print (pretty_printer *pp) const FINAL OVERRIDE;
+
+  void set (const char *key, value *v);
+
+ private:
+  typedef hash_map <char *, value *,
+    simple_hashmap_traits<nofree_string_hash, value *> > map_t;
+  map_t m_map;
+};
+
+/* Subclass of value for arrays.  */
+
+class array : public value
+{
+ public:
+  ~array ();
+
+  enum kind get_kind () const FINAL OVERRIDE { return JSON_ARRAY; }
+  void print (pretty_printer *pp) const FINAL OVERRIDE;
+
+  void append (value *v);
+
+ private:
+  auto_vec<value *> m_elements;
+};
+
+/* Subclass of value for numbers.  */
+
+class number : public value
+{
+ public:
+  number (double value) : m_value (value) {}
+
+  enum kind get_kind () const FINAL OVERRIDE { return JSON_NUMBER; }
+  void print (pretty_printer *pp) const FINAL OVERRIDE;
+
+  double get () const { return m_value; }
+
+ private:
+  double m_value;
+};
+
+/* Subclass of value for strings.  */
+
+class string : public value
+{
+ public:
+  string (const char *utf8);
+  ~string () { free (m_utf8); }
+
+  enum kind get_kind () const FINAL OVERRIDE { return JSON_STRING; }
+  void print (pretty_printer *pp) const FINAL OVERRIDE;
+
+  const char *get_string () const { return m_utf8; }
+
+ private:
+  char *m_utf8;
+};
+
+/* Subclass of value for the three JSON literals "true", "false",
+   and "null".  */
+
+class literal : public value
+{
+ public:
+  literal (enum kind kind) : m_kind (kind) {}
+
+  /* Construct literal for a boolean value.  */
+  literal (bool value): m_kind (value ? JSON_TRUE : JSON_FALSE) {}
+
+  enum kind get_kind () const FINAL OVERRIDE { return m_kind; }
+  void print (pretty_printer *pp) const FINAL OVERRIDE;
+
+ private:
+  enum kind m_kind;
+};
+
+} // namespace json
+
+#endif  /* GCC_JSON_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/langhooks-def.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/langhooks-def.h
new file mode 100644
index 0000000..a059841
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/langhooks-def.h
@@ -0,0 +1,355 @@
+/* Default macros to initialize the lang_hooks data structure.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Contributed by Alexandre Oliva  <aoliva@redhat.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_LANG_HOOKS_DEF_H
+#define GCC_LANG_HOOKS_DEF_H
+
+#include "hooks.h"
+
+struct diagnostic_info;
+class substring_loc;
+
+/* Note to creators of new hooks:
+
+   The macros in this file should NOT be surrounded by a
+   #ifdef...#endif pair, since this file declares the defaults.  Each
+   front end overrides any hooks it wishes to, in the file containing
+   its struct lang_hooks, AFTER including this file.  */
+
+/* See langhooks.h for the definition and documentation of each hook.  */
+
+extern void lhd_do_nothing (void);
+extern void lhd_do_nothing_t (tree);
+extern void lhd_do_nothing_f (struct function *);
+extern tree lhd_pass_through_t (tree);
+extern void lhd_register_dumps (gcc::dump_manager *);
+extern bool lhd_post_options (const char **);
+extern alias_set_type lhd_get_alias_set (tree);
+extern tree lhd_return_null_tree (tree);
+extern tree lhd_return_null_const_tree (const_tree);
+extern tree lhd_do_nothing_iii_return_null_tree (int, int, int);
+extern void lhd_print_tree_nothing (FILE *, tree, int);
+extern const char *lhd_decl_printable_name (tree, int);
+extern const char *lhd_dwarf_name (tree, int);
+extern int lhd_types_compatible_p (tree, tree);
+extern void lhd_print_error_function (diagnostic_context *,
+				      const char *, struct diagnostic_info *);
+extern void lhd_set_decl_assembler_name (tree decl);
+extern void lhd_overwrite_decl_assembler_name (tree decl, tree name);
+extern bool lhd_warn_unused_global_decl (const_tree);
+extern tree lhd_type_for_size (unsigned precision, int unsignedp);
+extern void lhd_incomplete_type_error (location_t, const_tree, const_tree);
+extern tree lhd_type_promotes_to (tree);
+extern void lhd_register_builtin_type (tree, const char *);
+extern bool lhd_decl_ok_for_sibcall (const_tree);
+extern size_t lhd_tree_size (enum tree_code);
+extern HOST_WIDE_INT lhd_to_target_charset (HOST_WIDE_INT);
+extern tree lhd_expr_to_decl (tree, bool *, bool *);
+extern tree lhd_builtin_function (tree);
+extern tree lhd_enum_underlying_base_type (const_tree);
+
+/* Declarations of default tree inlining hooks.  */
+extern void lhd_initialize_diagnostics (diagnostic_context *);
+extern void lhd_init_options (unsigned int,
+			      struct cl_decoded_option *);
+extern bool lhd_complain_wrong_lang_p (const struct cl_option *);
+extern bool lhd_handle_option (size_t, const char *, HOST_WIDE_INT, int,
+			       location_t, const struct cl_option_handlers *);
+
+
+/* Declarations for tree gimplification hooks.  */
+extern int lhd_gimplify_expr (tree *, gimple_seq *, gimple_seq *);
+extern enum omp_clause_default_kind lhd_omp_predetermined_sharing (tree);
+extern tree lhd_omp_assignment (tree, tree, tree);
+extern void lhd_omp_finish_clause (tree, gimple_seq *);
+struct gimplify_omp_ctx;
+extern void lhd_omp_firstprivatize_type_sizes (struct gimplify_omp_ctx *,
+					       tree);
+extern bool lhd_omp_mappable_type (tree);
+extern bool lhd_omp_scalar_p (tree);
+
+extern const char *lhd_get_substring_location (const substring_loc &,
+					       location_t *out_loc);
+extern int lhd_decl_dwarf_attribute (const_tree, int);
+extern int lhd_type_dwarf_attribute (const_tree, int);
+
+#define LANG_HOOKS_NAME			"GNU unknown"
+#define LANG_HOOKS_IDENTIFIER_SIZE	sizeof (struct lang_identifier)
+#define LANG_HOOKS_INIT			hook_bool_void_false
+#define LANG_HOOKS_FINISH		lhd_do_nothing
+#define LANG_HOOKS_PARSE_FILE		lhd_do_nothing
+#define LANG_HOOKS_OPTION_LANG_MASK	hook_uint_void_0
+#define LANG_HOOKS_INIT_OPTIONS_STRUCT	hook_void_gcc_optionsp
+#define LANG_HOOKS_INIT_OPTIONS		lhd_init_options
+#define LANG_HOOKS_INITIALIZE_DIAGNOSTICS lhd_initialize_diagnostics
+#define LANG_HOOKS_REGISTER_DUMPS	lhd_register_dumps
+#define LANG_HOOKS_COMPLAIN_WRONG_LANG_P lhd_complain_wrong_lang_p
+#define LANG_HOOKS_HANDLE_OPTION	lhd_handle_option
+#define LANG_HOOKS_POST_OPTIONS		lhd_post_options
+#define LANG_HOOKS_MISSING_NORETURN_OK_P hook_bool_tree_true
+#define LANG_HOOKS_GET_ALIAS_SET	lhd_get_alias_set
+#define LANG_HOOKS_FINISH_INCOMPLETE_DECL lhd_do_nothing_t
+#define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL lhd_do_nothing_t
+#define LANG_HOOKS_SET_DECL_ASSEMBLER_NAME lhd_set_decl_assembler_name
+#define LANG_HOOKS_OVERWRITE_DECL_ASSEMBLER_NAME lhd_overwrite_decl_assembler_name
+#define LANG_HOOKS_PRINT_STATISTICS	lhd_do_nothing
+#define LANG_HOOKS_PRINT_XNODE		lhd_print_tree_nothing
+#define LANG_HOOKS_PRINT_DECL		lhd_print_tree_nothing
+#define LANG_HOOKS_PRINT_TYPE		lhd_print_tree_nothing
+#define LANG_HOOKS_PRINT_IDENTIFIER	lhd_print_tree_nothing
+#define LANG_HOOKS_PRINT_ERROR_FUNCTION lhd_print_error_function
+#define LANG_HOOKS_DECL_PRINTABLE_NAME	lhd_decl_printable_name
+#define LANG_HOOKS_DWARF_NAME		lhd_dwarf_name
+#define LANG_HOOKS_FREE_LANG_DATA	lhd_do_nothing_t
+#define LANG_HOOKS_TREE_SIZE		lhd_tree_size
+#define LANG_HOOKS_TYPES_COMPATIBLE_P	lhd_types_compatible_p
+#define LANG_HOOKS_BUILTIN_FUNCTION	lhd_builtin_function
+#define LANG_HOOKS_BUILTIN_FUNCTION_EXT_SCOPE	LANG_HOOKS_BUILTIN_FUNCTION
+#define LANG_HOOKS_EXPR_TO_DECL		lhd_expr_to_decl
+#define LANG_HOOKS_TO_TARGET_CHARSET	lhd_to_target_charset
+#define LANG_HOOKS_INIT_TS		lhd_do_nothing
+#define LANG_HOOKS_EH_PERSONALITY	lhd_gcc_personality
+#define LANG_HOOKS_EH_RUNTIME_TYPE	lhd_pass_through_t
+#define LANG_HOOKS_EH_PROTECT_CLEANUP_ACTIONS	NULL
+#define LANG_HOOKS_BLOCK_MAY_FALLTHRU	hook_bool_const_tree_true
+#define LANG_HOOKS_EH_USE_CXA_END_CLEANUP	false
+#define LANG_HOOKS_DEEP_UNSHARING	false
+#define LANG_HOOKS_CUSTOM_FUNCTION_DESCRIPTORS	false
+#define LANG_HOOKS_EMITS_BEGIN_STMT	false
+#define LANG_HOOKS_RUN_LANG_SELFTESTS   lhd_do_nothing
+#define LANG_HOOKS_GET_SUBSTRING_LOCATION lhd_get_substring_location
+
+/* Attribute hooks.  */
+#define LANG_HOOKS_ATTRIBUTE_TABLE		NULL
+#define LANG_HOOKS_COMMON_ATTRIBUTE_TABLE	NULL
+#define LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE	NULL
+
+/* Tree inlining hooks.  */
+#define LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P \
+  hook_bool_tree_tree_false
+
+#define LANG_HOOKS_TREE_INLINING_INITIALIZER { \
+  LANG_HOOKS_TREE_INLINING_VAR_MOD_TYPE_P, \
+}
+
+/* Hooks for tree gimplification.  */
+#define LANG_HOOKS_GIMPLIFY_EXPR lhd_gimplify_expr
+
+/* Tree dump hooks.  */
+extern bool lhd_tree_dump_dump_tree (void *, tree);
+extern int lhd_tree_dump_type_quals (const_tree);
+extern tree lhd_make_node (enum tree_code);
+
+#define LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN lhd_tree_dump_dump_tree
+#define LANG_HOOKS_TREE_DUMP_TYPE_QUALS_FN lhd_tree_dump_type_quals
+
+#define LANG_HOOKS_TREE_DUMP_INITIALIZER { \
+  LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN, \
+  LANG_HOOKS_TREE_DUMP_TYPE_QUALS_FN \
+}
+
+/* Types hooks.  There are no reasonable defaults for most of them,
+   so we create a compile-time error instead.  */
+extern tree lhd_unit_size_without_reusable_padding (tree);
+
+#define LANG_HOOKS_MAKE_TYPE lhd_make_node
+#define LANG_HOOKS_CLASSIFY_RECORD	NULL
+#define LANG_HOOKS_TYPE_FOR_SIZE	lhd_type_for_size
+#define LANG_HOOKS_INCOMPLETE_TYPE_ERROR lhd_incomplete_type_error
+#define LANG_HOOKS_GENERIC_TYPE_P	hook_bool_const_tree_false
+#define LANG_HOOKS_GET_INNERMOST_GENERIC_PARMS hook_tree_const_tree_null
+#define LANG_HOOKS_GET_INNERMOST_GENERIC_ARGS hook_tree_const_tree_null
+#define LANG_HOOKS_FUNCTION_PARAMETER_PACK_P hook_bool_const_tree_false
+#define LANG_HOOKS_GET_ARGUMENT_PACK_ELEMS hook_tree_const_tree_null
+#define LANG_HOOKS_GENERIC_GENERIC_PARAMETER_DECL_P hook_bool_const_tree_false
+#define LANG_HOOKS_FUNCTION_PARM_EXPANDED_FROM_PACK_P \
+					hook_bool_tree_tree_false
+#define LANG_HOOKS_GET_GENERIC_FUNCTION_DECL hook_tree_const_tree_null
+#define LANG_HOOKS_TYPE_PROMOTES_TO lhd_type_promotes_to
+#define LANG_HOOKS_REGISTER_BUILTIN_TYPE lhd_register_builtin_type
+#define LANG_HOOKS_TYPE_MAX_SIZE	lhd_return_null_const_tree
+#define LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES \
+  lhd_omp_firstprivatize_type_sizes
+#define LANG_HOOKS_OMP_MAPPABLE_TYPE	lhd_omp_mappable_type
+#define LANG_HOOKS_TYPE_HASH_EQ		NULL
+#define LANG_HOOKS_COPY_LANG_QUALIFIERS NULL
+#define LANG_HOOKS_GET_ARRAY_DESCR_INFO	NULL
+#define LANG_HOOKS_GET_SUBRANGE_BOUNDS	NULL
+#define LANG_HOOKS_GET_TYPE_BIAS	NULL
+#define LANG_HOOKS_DESCRIPTIVE_TYPE	NULL
+#define LANG_HOOKS_RECONSTRUCT_COMPLEX_TYPE reconstruct_complex_type
+#define LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE lhd_enum_underlying_base_type
+#define LANG_HOOKS_GET_DEBUG_TYPE	NULL
+#define LANG_HOOKS_GET_FIXED_POINT_TYPE_INFO NULL
+#define LANG_HOOKS_TYPE_DWARF_ATTRIBUTE	lhd_type_dwarf_attribute
+#define LANG_HOOKS_UNIT_SIZE_WITHOUT_REUSABLE_PADDING lhd_unit_size_without_reusable_padding
+
+#define LANG_HOOKS_FOR_TYPES_INITIALIZER { \
+  LANG_HOOKS_MAKE_TYPE, \
+  LANG_HOOKS_CLASSIFY_RECORD, \
+  LANG_HOOKS_TYPE_FOR_MODE, \
+  LANG_HOOKS_TYPE_FOR_SIZE, \
+  LANG_HOOKS_GENERIC_TYPE_P, \
+  LANG_HOOKS_GET_ARGUMENT_PACK_ELEMS, \
+  LANG_HOOKS_TYPE_PROMOTES_TO, \
+  LANG_HOOKS_REGISTER_BUILTIN_TYPE, \
+  LANG_HOOKS_INCOMPLETE_TYPE_ERROR, \
+  LANG_HOOKS_TYPE_MAX_SIZE, \
+  LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES, \
+  LANG_HOOKS_OMP_MAPPABLE_TYPE, \
+  LANG_HOOKS_TYPE_HASH_EQ, \
+  LANG_HOOKS_COPY_LANG_QUALIFIERS, \
+  LANG_HOOKS_GET_ARRAY_DESCR_INFO, \
+  LANG_HOOKS_GET_SUBRANGE_BOUNDS, \
+  LANG_HOOKS_GET_TYPE_BIAS, \
+  LANG_HOOKS_DESCRIPTIVE_TYPE, \
+  LANG_HOOKS_RECONSTRUCT_COMPLEX_TYPE, \
+  LANG_HOOKS_ENUM_UNDERLYING_BASE_TYPE, \
+  LANG_HOOKS_GET_DEBUG_TYPE, \
+  LANG_HOOKS_GET_FIXED_POINT_TYPE_INFO, \
+  LANG_HOOKS_TYPE_DWARF_ATTRIBUTE, \
+  LANG_HOOKS_UNIT_SIZE_WITHOUT_REUSABLE_PADDING \
+}
+
+/* Declaration hooks.  */
+#define LANG_HOOKS_GLOBAL_BINDINGS_P global_bindings_p
+#define LANG_HOOKS_PUSHDECL	pushdecl
+#define LANG_HOOKS_GETDECLS	getdecls
+#define LANG_HOOKS_DECL_DWARF_ATTRIBUTE lhd_decl_dwarf_attribute
+#define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL lhd_warn_unused_global_decl
+#define LANG_HOOKS_POST_COMPILATION_PARSING_CLEANUPS NULL
+#define LANG_HOOKS_DECL_OK_FOR_SIBCALL	lhd_decl_ok_for_sibcall
+#define LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE hook_bool_const_tree_false
+#define LANG_HOOKS_OMP_PREDETERMINED_SHARING lhd_omp_predetermined_sharing
+#define LANG_HOOKS_OMP_REPORT_DECL lhd_pass_through_t
+#define LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR hook_bool_tree_bool_false
+#define LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE hook_bool_tree_bool_false
+#define LANG_HOOKS_OMP_PRIVATE_OUTER_REF hook_bool_tree_false
+#define LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR hook_tree_tree_tree_tree_null
+#define LANG_HOOKS_OMP_CLAUSE_COPY_CTOR lhd_omp_assignment
+#define LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP lhd_omp_assignment
+#define LANG_HOOKS_OMP_CLAUSE_LINEAR_CTOR NULL
+#define LANG_HOOKS_OMP_CLAUSE_DTOR hook_tree_tree_tree_null
+#define LANG_HOOKS_OMP_FINISH_CLAUSE lhd_omp_finish_clause
+#define LANG_HOOKS_OMP_SCALAR_P lhd_omp_scalar_p
+
+#define LANG_HOOKS_DECLS { \
+  LANG_HOOKS_GLOBAL_BINDINGS_P, \
+  LANG_HOOKS_PUSHDECL, \
+  LANG_HOOKS_GETDECLS, \
+  LANG_HOOKS_DECL_DWARF_ATTRIBUTE, \
+  LANG_HOOKS_GENERIC_GENERIC_PARAMETER_DECL_P, \
+  LANG_HOOKS_FUNCTION_PARM_EXPANDED_FROM_PACK_P, \
+  LANG_HOOKS_GET_GENERIC_FUNCTION_DECL, \
+  LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL, \
+  LANG_HOOKS_POST_COMPILATION_PARSING_CLEANUPS, \
+  LANG_HOOKS_DECL_OK_FOR_SIBCALL, \
+  LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE, \
+  LANG_HOOKS_OMP_PREDETERMINED_SHARING, \
+  LANG_HOOKS_OMP_REPORT_DECL, \
+  LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR, \
+  LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE, \
+  LANG_HOOKS_OMP_PRIVATE_OUTER_REF, \
+  LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR, \
+  LANG_HOOKS_OMP_CLAUSE_COPY_CTOR, \
+  LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP, \
+  LANG_HOOKS_OMP_CLAUSE_LINEAR_CTOR, \
+  LANG_HOOKS_OMP_CLAUSE_DTOR, \
+  LANG_HOOKS_OMP_FINISH_CLAUSE, \
+  LANG_HOOKS_OMP_SCALAR_P \
+}
+
+/* LTO hooks.  */
+extern void lhd_begin_section (const char *);
+extern void lhd_append_data (const void *, size_t, void *);
+extern void lhd_end_section (void);
+
+#define LANG_HOOKS_BEGIN_SECTION lhd_begin_section
+#define LANG_HOOKS_APPEND_DATA lhd_append_data
+#define LANG_HOOKS_END_SECTION lhd_end_section
+
+#define LANG_HOOKS_LTO { \
+  LANG_HOOKS_BEGIN_SECTION, \
+  LANG_HOOKS_APPEND_DATA, \
+  LANG_HOOKS_END_SECTION \
+}
+
+/* The whole thing.  The structure is defined in langhooks.h.  */
+#define LANG_HOOKS_INITIALIZER { \
+  LANG_HOOKS_NAME, \
+  LANG_HOOKS_IDENTIFIER_SIZE, \
+  LANG_HOOKS_FREE_LANG_DATA, \
+  LANG_HOOKS_TREE_SIZE, \
+  LANG_HOOKS_OPTION_LANG_MASK, \
+  LANG_HOOKS_INIT_OPTIONS_STRUCT, \
+  LANG_HOOKS_INIT_OPTIONS, \
+  LANG_HOOKS_INITIALIZE_DIAGNOSTICS, \
+  LANG_HOOKS_REGISTER_DUMPS, \
+  LANG_HOOKS_COMPLAIN_WRONG_LANG_P, \
+  LANG_HOOKS_HANDLE_OPTION, \
+  LANG_HOOKS_POST_OPTIONS, \
+  LANG_HOOKS_INIT, \
+  LANG_HOOKS_FINISH, \
+  LANG_HOOKS_PARSE_FILE, \
+  LANG_HOOKS_MISSING_NORETURN_OK_P, \
+  LANG_HOOKS_GET_ALIAS_SET, \
+  LANG_HOOKS_FINISH_INCOMPLETE_DECL, \
+  LANG_HOOKS_DUP_LANG_SPECIFIC_DECL, \
+  LANG_HOOKS_SET_DECL_ASSEMBLER_NAME, \
+  LANG_HOOKS_OVERWRITE_DECL_ASSEMBLER_NAME, \
+  LANG_HOOKS_PRINT_STATISTICS, \
+  LANG_HOOKS_PRINT_XNODE, \
+  LANG_HOOKS_PRINT_DECL, \
+  LANG_HOOKS_PRINT_TYPE, \
+  LANG_HOOKS_PRINT_IDENTIFIER, \
+  LANG_HOOKS_DECL_PRINTABLE_NAME, \
+  LANG_HOOKS_DWARF_NAME, \
+  LANG_HOOKS_TYPES_COMPATIBLE_P, \
+  LANG_HOOKS_PRINT_ERROR_FUNCTION, \
+  LANG_HOOKS_TO_TARGET_CHARSET, \
+  LANG_HOOKS_ATTRIBUTE_TABLE, \
+  LANG_HOOKS_COMMON_ATTRIBUTE_TABLE, \
+  LANG_HOOKS_FORMAT_ATTRIBUTE_TABLE, \
+  LANG_HOOKS_TREE_INLINING_INITIALIZER, \
+  LANG_HOOKS_TREE_DUMP_INITIALIZER, \
+  LANG_HOOKS_DECLS, \
+  LANG_HOOKS_FOR_TYPES_INITIALIZER, \
+  LANG_HOOKS_LTO, \
+  LANG_HOOKS_GET_INNERMOST_GENERIC_PARMS, \
+  LANG_HOOKS_GET_INNERMOST_GENERIC_ARGS, \
+  LANG_HOOKS_FUNCTION_PARAMETER_PACK_P, \
+  LANG_HOOKS_GIMPLIFY_EXPR, \
+  LANG_HOOKS_BUILTIN_FUNCTION, \
+  LANG_HOOKS_BUILTIN_FUNCTION_EXT_SCOPE, \
+  LANG_HOOKS_INIT_TS,          \
+  LANG_HOOKS_EXPR_TO_DECL, \
+  LANG_HOOKS_EH_PERSONALITY, \
+  LANG_HOOKS_EH_RUNTIME_TYPE, \
+  LANG_HOOKS_EH_PROTECT_CLEANUP_ACTIONS, \
+  LANG_HOOKS_BLOCK_MAY_FALLTHRU, \
+  LANG_HOOKS_EH_USE_CXA_END_CLEANUP, \
+  LANG_HOOKS_DEEP_UNSHARING, \
+  LANG_HOOKS_CUSTOM_FUNCTION_DESCRIPTORS, \
+  LANG_HOOKS_EMITS_BEGIN_STMT, \
+  LANG_HOOKS_RUN_LANG_SELFTESTS, \
+  LANG_HOOKS_GET_SUBSTRING_LOCATION \
+}
+
+#endif /* GCC_LANG_HOOKS_DEF_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/langhooks.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/langhooks.h
new file mode 100644
index 0000000..a45579b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/langhooks.h
@@ -0,0 +1,574 @@
+/* The lang_hooks data structure.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_LANG_HOOKS_H
+#define GCC_LANG_HOOKS_H
+
+/* FIXME: This file should be #include-d after tree.h (for enum tree_code).  */
+
+struct diagnostic_info;
+
+struct gimplify_omp_ctx;
+
+struct array_descr_info;
+
+/* A print hook for print_tree ().  */
+typedef void (*lang_print_tree_hook) (FILE *, tree, int indent);
+
+enum classify_record
+  { RECORD_IS_STRUCT, RECORD_IS_CLASS, RECORD_IS_INTERFACE };
+
+class substring_loc;
+
+/* The following hooks are documented in langhooks.c.  Must not be
+   NULL.  */
+
+struct lang_hooks_for_tree_inlining
+{
+  bool (*var_mod_type_p) (tree, tree);
+};
+
+/* The following hooks are used by tree-dump.c.  */
+
+struct lang_hooks_for_tree_dump
+{
+  /* Dump language-specific parts of tree nodes.  Returns nonzero if it
+     does not want the usual dumping of the second argument.  */
+  bool (*dump_tree) (void *, tree);
+
+  /* Determine type qualifiers in a language-specific way.  */
+  int (*type_quals) (const_tree);
+};
+
+/* Hooks related to types.  */
+
+struct lang_hooks_for_types
+{
+  /* Return a new type (with the indicated CODE), doing whatever
+     language-specific processing is required.  */
+  tree (*make_type) (enum tree_code);
+
+  /* Return what kind of RECORD_TYPE this is, mainly for purposes of
+     debug information.  If not defined, record types are assumed to
+     be structures.  */
+  enum classify_record (*classify_record) (tree);
+
+  /* Given MODE and UNSIGNEDP, return a suitable type-tree with that
+     mode.  */
+  tree (*type_for_mode) (machine_mode, int);
+
+  /* Given PRECISION and UNSIGNEDP, return a suitable type-tree for an
+     integer type with at least that precision.  */
+  tree (*type_for_size) (unsigned, int);
+
+  /* True if the type is an instantiation of a generic type,
+     e.g. C++ template implicit specializations.  */
+  bool (*generic_p) (const_tree);
+
+  /* Returns the TREE_VEC of elements of a given generic argument pack.  */
+  tree (*get_argument_pack_elems) (const_tree);
+
+  /* Given a type, apply default promotions to unnamed function
+     arguments and return the new type.  Return the same type if no
+     change.  Required by any language that supports variadic
+     arguments.  The default hook dies.  */
+  tree (*type_promotes_to) (tree);
+
+  /* Register TYPE as a builtin type with the indicated NAME.  The
+     TYPE is placed in the outermost lexical scope.  The semantics
+     should be analogous to:
+
+       typedef TYPE NAME;
+
+     in C.  The default hook ignores the declaration.  */
+  void (*register_builtin_type) (tree, const char *);
+
+  /* This routine is called in tree.c to print an error message for
+     invalid use of an incomplete type.  VALUE is the expression that
+     was used (or 0 if that isn't known) and TYPE is the type that was
+     invalid.  LOC is the location of the use.  */
+  void (*incomplete_type_error) (location_t loc, const_tree value,
+				 const_tree type);
+
+  /* Called from assign_temp to return the maximum size, if there is one,
+     for a type.  */
+  tree (*max_size) (const_tree);
+
+  /* Register language specific type size variables as potentially OpenMP
+     firstprivate variables.  */
+  void (*omp_firstprivatize_type_sizes) (struct gimplify_omp_ctx *, tree);
+
+  /* Return true if TYPE is a mappable type.  */
+  bool (*omp_mappable_type) (tree type);
+
+  /* Return TRUE if TYPE1 and TYPE2 are identical for type hashing purposes.
+     Called only after doing all language independent checks.
+     At present, this function is only called when both TYPE1 and TYPE2 are
+     FUNCTION_TYPE or METHOD_TYPE.  */
+  bool (*type_hash_eq) (const_tree, const_tree);
+
+  /* If non-NULL, return TYPE1 with any language-specific modifiers copied from
+     TYPE2.  */
+  tree (*copy_lang_qualifiers) (const_tree, const_tree);
+
+  /* Return TRUE if TYPE uses a hidden descriptor and fills in information
+     for the debugger about the array bounds, strides, etc.  */
+  bool (*get_array_descr_info) (const_tree, struct array_descr_info *);
+
+  /* Fill in information for the debugger about the bounds of TYPE.  */
+  void (*get_subrange_bounds) (const_tree, tree *, tree *);
+
+  /* Called on INTEGER_TYPEs.  Return NULL_TREE for non-biased types.  For
+     biased types, return as an INTEGER_CST node the value that is represented
+     by a physical zero.  */
+  tree (*get_type_bias) (const_tree);
+
+  /* A type descriptive of TYPE's complex layout generated to help the
+     debugger to decode variable-length or self-referential constructs.
+     This is only used for the AT_GNAT_descriptive_type DWARF attribute.  */
+  tree (*descriptive_type) (const_tree);
+
+  /* If we requested a pointer to a vector, build up the pointers that
+     we stripped off while looking for the inner type.  Similarly for
+     return values from functions.  The argument TYPE is the top of the
+     chain, and BOTTOM is the new type which we will point to.  */
+  tree (*reconstruct_complex_type) (tree, tree);
+
+  /* Returns the tree that represents the underlying data type used to
+     implement the enumeration.  The default implementation will just use
+     type_for_size.  Used in dwarf2out.c to add a DW_AT_type base type
+     reference to a DW_TAG_enumeration.  */
+  tree (*enum_underlying_base_type) (const_tree);
+
+  /* Return a type to use in the debug info instead of TYPE, or NULL_TREE to
+     keep TYPE.  This is useful to keep a single "source type" when the
+     middle-end uses specialized types, for instance constrained discriminated
+     types in Ada.  */
+  tree (*get_debug_type) (const_tree);
+
+  /* Return TRUE if TYPE implements a fixed point type and fills in information
+     for the debugger about scale factor, etc.  */
+  bool (*get_fixed_point_type_info) (const_tree,
+				     struct fixed_point_type_info *);
+
+  /* Returns -1 if dwarf ATTR shouldn't be added for TYPE, or the attribute
+     value otherwise.  */
+  int (*type_dwarf_attribute) (const_tree, int);
+
+  /* Returns a tree for the unit size of T excluding tail padding that
+     might be used by objects inheriting from T.  */
+  tree (*unit_size_without_reusable_padding) (tree);
+};
+
+/* Language hooks related to decls and the symbol table.  */
+
+struct lang_hooks_for_decls
+{
+  /* Return true if we are in the global binding level.  This hook is really
+     needed only if the language supports variable-sized types at the global
+     level, i.e. declared outside subprograms.  */
+  bool (*global_bindings_p) (void);
+
+  /* Function to add a decl to the current scope level.  Takes one
+     argument, a decl to add.  Returns that decl, or, if the same
+     symbol is already declared, may return a different decl for that
+     name.  */
+  tree (*pushdecl) (tree);
+
+  /* Returns the chain of decls so far in the current scope level.  */
+  tree (*getdecls) (void);
+
+  /* Returns -1 if dwarf ATTR shouldn't be added for DECL, or the attribute
+     value otherwise.  */
+  int (*decl_dwarf_attribute) (const_tree, int);
+
+  /* Returns True if the parameter is a generic parameter decl
+     of a generic type, e.g a template template parameter for the C++ FE.  */
+  bool (*generic_generic_parameter_decl_p) (const_tree);
+
+  /* Determine if a function parameter got expanded from a
+     function parameter pack.  */
+  bool (*function_parm_expanded_from_pack_p) (tree, tree);
+
+  /* Returns the generic declaration of a generic function instantiations.  */
+  tree (*get_generic_function_decl) (const_tree);
+
+  /* Returns true when we should warn for an unused global DECL.
+     We will already have checked that it has static binding.  */
+  bool (*warn_unused_global) (const_tree);
+
+  /* Perform any post compilation-proper parser cleanups and
+     processing.  This is currently only needed for the C++ parser,
+     which hopefully can be cleaned up so this hook is no longer
+     necessary.  */
+  void (*post_compilation_parsing_cleanups) (void);
+
+  /* True if this decl may be called via a sibcall.  */
+  bool (*ok_for_sibcall) (const_tree);
+
+  /* True if OpenMP should privatize what this DECL points to rather
+     than the DECL itself.  */
+  bool (*omp_privatize_by_reference) (const_tree);
+
+  /* Return sharing kind if OpenMP sharing attribute of DECL is
+     predetermined, OMP_CLAUSE_DEFAULT_UNSPECIFIED otherwise.  */
+  enum omp_clause_default_kind (*omp_predetermined_sharing) (tree);
+
+  /* Return decl that should be reported for DEFAULT(NONE) failure
+     diagnostics.  Usually the DECL passed in.  */
+  tree (*omp_report_decl) (tree);
+
+  /* Return true if DECL's DECL_VALUE_EXPR (if any) should be
+     disregarded in OpenMP construct, because it is going to be
+     remapped during OpenMP lowering.  SHARED is true if DECL
+     is going to be shared, false if it is going to be privatized.  */
+  bool (*omp_disregard_value_expr) (tree, bool);
+
+  /* Return true if DECL that is shared iff SHARED is true should
+     be put into OMP_CLAUSE_PRIVATE_DEBUG.  */
+  bool (*omp_private_debug_clause) (tree, bool);
+
+  /* Return true if DECL in private clause needs
+     OMP_CLAUSE_PRIVATE_OUTER_REF on the private clause.  */
+  bool (*omp_private_outer_ref) (tree);
+
+  /* Build and return code for a default constructor for DECL in
+     response to CLAUSE.  OUTER is corresponding outer region's
+     variable if needed.  Return NULL if nothing to be done.  */
+  tree (*omp_clause_default_ctor) (tree clause, tree decl, tree outer);
+
+  /* Build and return code for a copy constructor from SRC to DST.  */
+  tree (*omp_clause_copy_ctor) (tree clause, tree dst, tree src);
+
+  /* Similarly, except use an assignment operator instead.  */
+  tree (*omp_clause_assign_op) (tree clause, tree dst, tree src);
+
+  /* Build and return code for a constructor of DST that sets it to
+     SRC + ADD.  */
+  tree (*omp_clause_linear_ctor) (tree clause, tree dst, tree src, tree add);
+
+  /* Build and return code destructing DECL.  Return NULL if nothing
+     to be done.  */
+  tree (*omp_clause_dtor) (tree clause, tree decl);
+
+  /* Do language specific checking on an implicitly determined clause.  */
+  void (*omp_finish_clause) (tree clause, gimple_seq *pre_p);
+
+  /* Return true if DECL is a scalar variable (for the purpose of
+     implicit firstprivatization).  */
+  bool (*omp_scalar_p) (tree decl);
+};
+
+/* Language hooks related to LTO serialization.  */
+
+struct lang_hooks_for_lto
+{
+  /* Begin a new LTO section named NAME.  */
+  void (*begin_section) (const char *name);
+
+  /* Write DATA of length LEN to the currently open LTO section.  BLOCK is a
+     pointer to the dynamically allocated memory containing DATA.  The
+     append_data function is responsible for freeing it when it is no longer
+     needed.  */
+  void (*append_data) (const void *data, size_t len, void *block);
+
+  /* End the previously begun LTO section.  */
+  void (*end_section) (void);
+};
+
+/* Language-specific hooks.  See langhooks-def.h for defaults.  */
+
+struct lang_hooks
+{
+  /* String identifying the front end and optionally language standard
+     version, e.g. "GNU C++98".  */
+  const char *name;
+
+  /* sizeof (struct lang_identifier), so make_node () creates
+     identifier nodes long enough for the language-specific slots.  */
+  size_t identifier_size;
+
+  /* Remove any parts of the tree that are used only by the FE. */
+  void (*free_lang_data) (tree);
+
+  /* Determines the size of any language-specific tcc_constant,
+     tcc_exceptional or tcc_type nodes.  Since it is called from
+     make_node, the only information available is the tree code.
+     Expected to die on unrecognized codes.  */
+  size_t (*tree_size) (enum tree_code);
+
+  /* Return the language mask used for converting argv into a sequence
+     of options.  */
+  unsigned int (*option_lang_mask) (void);
+
+  /* Initialize variables in an options structure.  */
+  void (*init_options_struct) (struct gcc_options *opts);
+
+  /* After the initialize_diagnostics hook is called, do any simple
+     initialization needed before any calls to handle_option, other
+     than that done by the init_options_struct hook.  */
+  void (*init_options) (unsigned int decoded_options_count,
+			struct cl_decoded_option *decoded_options);
+
+  /* Callback used to perform language-specific initialization for the
+     global diagnostic context structure.  */
+  void (*initialize_diagnostics) (diagnostic_context *);
+
+  /* Register language-specific dumps.  */
+  void (*register_dumps) (gcc::dump_manager *);
+
+  /* Return true if a warning should be given about option OPTION,
+     which is for the wrong language, false if it should be quietly
+     ignored.  */
+  bool (*complain_wrong_lang_p) (const struct cl_option *option);
+
+  /* Handle the switch CODE, which has real type enum opt_code from
+     options.h.  If the switch takes an argument, it is passed in ARG
+     which points to permanent storage.  The handler is responsible for
+     checking whether ARG is NULL, which indicates that no argument
+     was in fact supplied.  For -f and -W switches, VALUE is 1 or 0
+     for the positive and negative forms respectively.  HANDLERS should
+     be passed to any recursive handle_option calls.  LOC is the
+     location of the option.
+
+     Return true if the switch is valid, false if invalid.  */
+  bool (*handle_option) (size_t code, const char *arg, HOST_WIDE_INT value,
+			 int kind, location_t loc,
+			 const struct cl_option_handlers *handlers);
+
+  /* Called when all command line options have been parsed to allow
+     further processing and initialization
+
+     Should return true to indicate that a compiler back-end is
+     not required, such as with the -E option.
+
+     If errorcount is nonzero after this call the compiler exits
+     immediately and the finish hook is not called.  */
+  bool (*post_options) (const char **);
+
+  /* Called after post_options to initialize the front end.  Return
+     false to indicate that no further compilation be performed, in
+     which case the finish hook is called immediately.  */
+  bool (*init) (void);
+
+  /* Called at the end of compilation, as a finalizer.  */
+  void (*finish) (void);
+
+  /* Parses the entire file.  */
+  void (*parse_file) (void);
+
+  /* Determines if it's ok for a function to have no noreturn attribute.  */
+  bool (*missing_noreturn_ok_p) (tree);
+
+  /* Called to obtain the alias set to be used for an expression or type.
+     Returns -1 if the language does nothing special for it.  */
+  alias_set_type (*get_alias_set) (tree);
+
+  /* Function to finish handling an incomplete decl at the end of
+     compilation.  Default hook is does nothing.  */
+  void (*finish_incomplete_decl) (tree);
+
+  /* Replace the DECL_LANG_SPECIFIC data, which may be NULL, of the
+     DECL_NODE with a newly GC-allocated copy.  */
+  void (*dup_lang_specific_decl) (tree);
+
+  /* Set the DECL_ASSEMBLER_NAME for a node.  If it is the sort of
+     thing that the assembler should talk about, set
+     DECL_ASSEMBLER_NAME to an appropriate IDENTIFIER_NODE.
+     Otherwise, set it to the ERROR_MARK_NODE to ensure that the
+     assembler does not talk about it.  */
+  void (*set_decl_assembler_name) (tree);
+
+  /* Overwrite the DECL_ASSEMBLER_NAME for a node.  The name is being
+     changed (including to or from NULL_TREE).  */
+  void (*overwrite_decl_assembler_name) (tree, tree);
+
+  /* The front end can add its own statistics to -fmem-report with
+     this hook.  It should output to stderr.  */
+  void (*print_statistics) (void);
+
+  /* Called by print_tree when there is a tree of class tcc_exceptional
+     that it doesn't know how to display.  */
+  lang_print_tree_hook print_xnode;
+
+  /* Called to print language-dependent parts of tcc_decl, tcc_type,
+     and IDENTIFIER_NODE nodes.  */
+  lang_print_tree_hook print_decl;
+  lang_print_tree_hook print_type;
+  lang_print_tree_hook print_identifier;
+
+  /* Computes the name to use to print a declaration.  DECL is the
+     non-NULL declaration in question.  VERBOSITY determines what
+     information will be printed: 0: DECL_NAME, demangled as
+     necessary.  1: and scope information.  2: and any other
+     information that might be interesting, such as function parameter
+     types in C++.  The name is in the internal character set and
+     needs to be converted to the locale character set of diagnostics,
+     or to the execution character set for strings such as
+     __PRETTY_FUNCTION__.  */
+  const char *(*decl_printable_name) (tree decl, int verbosity);
+
+  /* Computes the dwarf-2/3 name for a tree.  VERBOSITY determines what
+     information will be printed: 0: DECL_NAME, demangled as
+     necessary.  1: and scope information.  */
+  const char *(*dwarf_name) (tree, int verbosity);
+
+  /* This compares two types for equivalence ("compatible" in C-based languages).
+     This routine should only return 1 if it is sure.  It should not be used
+     in contexts where erroneously returning 0 causes problems.  */
+  int (*types_compatible_p) (tree x, tree y);
+
+  /* Called by report_error_function to print out function name.  */
+  void (*print_error_function) (diagnostic_context *, const char *,
+				struct diagnostic_info *);
+
+  /* Convert a character from the host's to the target's character
+     set.  The character should be in what C calls the "basic source
+     character set" (roughly, the set of characters defined by plain
+     old ASCII).  The default is to return the character unchanged,
+     which is correct in most circumstances.  Note that both argument
+     and result should be sign-extended under -fsigned-char,
+     zero-extended under -fno-signed-char.  */
+  HOST_WIDE_INT (*to_target_charset) (HOST_WIDE_INT);
+
+  /* Pointers to machine-independent attribute tables, for front ends
+     using attribs.c.  If one is NULL, it is ignored.  Respectively, a
+     table of attributes specific to the language, a table of
+     attributes common to two or more languages (to allow easy
+     sharing), and a table of attributes for checking formats.  */
+  const struct attribute_spec *attribute_table;
+  const struct attribute_spec *common_attribute_table;
+  const struct attribute_spec *format_attribute_table;
+
+  struct lang_hooks_for_tree_inlining tree_inlining;
+
+  struct lang_hooks_for_tree_dump tree_dump;
+
+  struct lang_hooks_for_decls decls;
+
+  struct lang_hooks_for_types types;
+  
+  struct lang_hooks_for_lto lto;
+
+  /* Returns a TREE_VEC of the generic parameters of an instantiation of
+     a generic type or decl, e.g. C++ template instantiation.  If
+     TREE_CHAIN of the return value is set, it is an INTEGER_CST
+     indicating how many of the elements are non-default.  */
+  tree (*get_innermost_generic_parms) (const_tree);
+
+  /* Returns the TREE_VEC of arguments of an instantiation
+     of a generic type of decl, e.g. C++ template instantiation.  */
+  tree (*get_innermost_generic_args) (const_tree);
+
+  /* Determine if a tree is a function parameter pack.  */
+  bool (*function_parameter_pack_p) (const_tree);
+
+  /* Perform language-specific gimplification on the argument.  Returns an
+     enum gimplify_status, though we can't see that type here.  */
+  int (*gimplify_expr) (tree *, gimple_seq *, gimple_seq *);
+
+  /* Do language specific processing in the builtin function DECL  */
+  tree (*builtin_function) (tree decl);
+
+  /* Like builtin_function, but make sure the scope is the external scope.
+     This is used to delay putting in back end builtin functions until the ISA
+     that defines the builtin is declared via function specific target options,
+     which can save memory for machines like the x86_64 that have multiple
+     ISAs.  If this points to the same function as builtin_function, the
+     backend must add all of the builtins at program initialization time.  */
+  tree (*builtin_function_ext_scope) (tree decl);
+
+  /* Used to set up the tree_contains_structure array for a frontend. */
+  void (*init_ts) (void);
+
+  /* Called by recompute_tree_invariant_for_addr_expr to go from EXPR
+     to a contained expression or DECL, possibly updating *TC or *SE
+     if in the process TREE_CONSTANT or TREE_SIDE_EFFECTS need updating.  */
+  tree (*expr_to_decl) (tree expr, bool *tc, bool *se);
+
+  /* The EH personality function decl.  */
+  tree (*eh_personality) (void);
+
+  /* Map a type to a runtime object to match type.  */
+  tree (*eh_runtime_type) (tree);
+
+  /* If non-NULL, this is a function that returns a function decl to be
+     executed if an unhandled exception is propagated out of a cleanup
+     region.  For example, in C++, an exception thrown by a destructor
+     during stack unwinding is required to result in a call to
+     `std::terminate', so the C++ version of this function returns a
+     FUNCTION_DECL for `std::terminate'.  */
+  tree (*eh_protect_cleanup_actions) (void);
+
+  /* Return true if a stmt can fallthru.  Used by block_may_fallthru
+     to possibly handle language trees.  */
+  bool (*block_may_fallthru) (const_tree);
+
+  /* True if this language uses __cxa_end_cleanup when the ARM EABI
+     is enabled.  */
+  bool eh_use_cxa_end_cleanup;
+
+  /* True if this language requires deep unsharing of tree nodes prior to
+     gimplification.  */
+  bool deep_unsharing;
+
+  /* True if this language may use custom descriptors for nested functions
+     instead of trampolines.  */
+  bool custom_function_descriptors;
+
+  /* True if this language emits begin stmt notes.  */
+  bool emits_begin_stmt;
+
+  /* Run all lang-specific selftests.  */
+  void (*run_lang_selftests) (void);
+
+  /* Attempt to determine the source location of the substring.
+     If successful, return NULL and write the source location to *OUT_LOC.
+     Otherwise return an error message.  Error messages are intended
+     for GCC developers (to help debugging) rather than for end-users.  */
+  const char *(*get_substring_location) (const substring_loc &,
+					 location_t *out_loc);
+
+  /* Whenever you add entries here, make sure you adjust langhooks-def.h
+     and langhooks.c accordingly.  */
+};
+
+/* Each front end provides its own.  */
+extern struct lang_hooks lang_hooks;
+
+extern tree add_builtin_function (const char *name, tree type,
+				  int function_code, enum built_in_class cl,
+				  const char *library_name,
+				  tree attrs);
+
+extern tree add_builtin_function_ext_scope (const char *name, tree type,
+					    int function_code,
+					    enum built_in_class cl,
+					    const char *library_name,
+					    tree attrs);
+extern tree add_builtin_type (const char *name, tree type);
+
+/* Language helper functions.  */
+
+extern bool lang_GNU_C (void);
+extern bool lang_GNU_CXX (void);
+extern bool lang_GNU_Fortran (void);
+extern bool lang_GNU_OBJC (void);
+
+#endif /* GCC_LANG_HOOKS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/lcm.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/lcm.h
new file mode 100644
index 0000000..72f8d0e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/lcm.h
@@ -0,0 +1,34 @@
+/* Generic partial redundancy elimination with lazy code motion header file.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_LCM_H
+#define GCC_LCM_H
+
+extern struct edge_list *pre_edge_lcm_avs (int, sbitmap *, sbitmap *,
+					   sbitmap *, sbitmap *, sbitmap *,
+					   sbitmap *, sbitmap **, sbitmap **);
+extern struct edge_list *pre_edge_lcm (int, sbitmap *, sbitmap *,
+				       sbitmap *, sbitmap *, sbitmap **,
+				       sbitmap **);
+extern void compute_available (sbitmap *, sbitmap *, sbitmap *, sbitmap *);
+extern struct edge_list *pre_edge_rev_lcm (int, sbitmap *,
+					   sbitmap *, sbitmap *,
+					   sbitmap *, sbitmap **,
+					   sbitmap **);
+#endif /* GCC_LCM_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/libfuncs.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/libfuncs.h
new file mode 100644
index 0000000..50d4a4a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/libfuncs.h
@@ -0,0 +1,84 @@
+/* Definitions for code generation pass of GNU compiler.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_LIBFUNCS_H
+#define GCC_LIBFUNCS_H
+
+
+/* Enumeration of indexes into libfunc_table.  */
+enum libfunc_index
+{
+  LTI_unwind_sjlj_register,
+  LTI_unwind_sjlj_unregister,
+  LTI_synchronize,
+  LTI_MAX
+};
+
+/* Information about an optab-related libfunc.  The op field is logically
+   an enum optab_d, and the mode fields are logically machine_mode.
+   However, in the absence of forward-declared enums, there's no practical
+   benefit of pulling in the defining headers.
+
+   We use the same hashtable for normal optabs and conversion optabs.  In
+   the first case mode2 is forced to VOIDmode.  */
+
+struct GTY((for_user)) libfunc_entry {
+  int op, mode1, mode2;
+  rtx libfunc;
+};
+
+/* Descriptor for libfunc_entry.  */
+
+struct libfunc_hasher : ggc_ptr_hash<libfunc_entry>
+{
+  static hashval_t hash (libfunc_entry *);
+  static bool equal (libfunc_entry *, libfunc_entry *);
+};
+
+/* Target-dependent globals.  */
+struct GTY(()) target_libfuncs {
+  /* SYMBOL_REF rtx's for the library functions that are called
+     implicitly and not via optabs.  */
+  rtx x_libfunc_table[LTI_MAX];
+
+  /* Hash table used to convert declarations into nodes.  */
+  hash_table<libfunc_hasher> *GTY(()) x_libfunc_hash;
+};
+
+extern GTY(()) struct target_libfuncs default_target_libfuncs;
+#if SWITCHABLE_TARGET
+extern struct target_libfuncs *this_target_libfuncs;
+#else
+#define this_target_libfuncs (&default_target_libfuncs)
+#endif
+
+#define libfunc_table \
+  (this_target_libfuncs->x_libfunc_table)
+
+/* Accessor macros for libfunc_table.  */
+
+#define unwind_sjlj_register_libfunc (libfunc_table[LTI_unwind_sjlj_register])
+#define unwind_sjlj_unregister_libfunc \
+  (libfunc_table[LTI_unwind_sjlj_unregister])
+#define synchronize_libfunc	(libfunc_table[LTI_synchronize])
+
+/* In explow.c */
+extern void set_stack_check_libfunc (const char *);
+
+#endif /* GCC_LIBFUNCS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/libiberty.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/libiberty.h
new file mode 100644
index 0000000..5747613
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/libiberty.h
@@ -0,0 +1,755 @@
+/* Function declarations for libiberty.
+
+   Copyright (C) 1997-2019 Free Software Foundation, Inc.
+   
+   Note - certain prototypes declared in this header file are for
+   functions whoes implementation copyright does not belong to the
+   FSF.  Those prototypes are present in this file for reference
+   purposes only and their presence in this file should not construed
+   as an indication of ownership by the FSF of the implementation of
+   those functions in any way or form whatsoever.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor,
+   Boston, MA 02110-1301, USA.
+   
+   Written by Cygnus Support, 1994.
+
+   The libiberty library provides a number of functions which are
+   missing on some operating systems.  We do not declare those here,
+   to avoid conflicts with the system header files on operating
+   systems that do support those functions.  In this file we only
+   declare those functions which are specific to libiberty.  */
+
+#ifndef LIBIBERTY_H
+#define LIBIBERTY_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ansidecl.h"
+
+/* Get a definition for size_t.  */
+#include <stddef.h>
+/* Get a definition for va_list.  */
+#include <stdarg.h>
+
+#include <stdio.h>
+
+/* If the OS supports it, ensure that the supplied stream is setup to
+   avoid any multi-threaded locking.  Otherwise leave the FILE pointer
+   unchanged.  If the stream is NULL do nothing.  */
+
+extern void unlock_stream (FILE *);
+
+/* If the OS supports it, ensure that the standard I/O streams, stdin,
+   stdout and stderr are setup to avoid any multi-threaded locking.
+   Otherwise do nothing.  */
+
+extern void unlock_std_streams (void);
+
+/* Open and return a FILE pointer.  If the OS supports it, ensure that
+   the stream is setup to avoid any multi-threaded locking.  Otherwise
+   return the FILE pointer unchanged.  */
+
+extern FILE *fopen_unlocked (const char *, const char *);
+extern FILE *fdopen_unlocked (int, const char *);
+extern FILE *freopen_unlocked (const char *, const char *, FILE *);
+
+/* Build an argument vector from a string.  Allocates memory using
+   malloc.  Use freeargv to free the vector.  */
+
+extern char **buildargv (const char *) ATTRIBUTE_MALLOC;
+
+/* Free a vector returned by buildargv.  */
+
+extern void freeargv (char **);
+
+/* Duplicate an argument vector. Allocates memory using malloc.  Use
+   freeargv to free the vector.  */
+
+extern char **dupargv (char * const *) ATTRIBUTE_MALLOC;
+
+/* Expand "@file" arguments in argv.  */
+
+extern void expandargv (int *, char ***);
+
+/* Write argv to an @-file, inserting necessary quoting.  */
+
+extern int writeargv (char * const *, FILE *);
+
+/* Return the number of elements in argv.  */
+
+extern int countargv (char * const *);
+
+/* Return the last component of a path name.  Note that we can't use a
+   prototype here because the parameter is declared inconsistently
+   across different systems, sometimes as "char *" and sometimes as
+   "const char *" */
+
+/* HAVE_DECL_* is a three-state macro: undefined, 0 or 1.  If it is
+   undefined, we haven't run the autoconf check so provide the
+   declaration without arguments.  If it is 0, we checked and failed
+   to find the declaration so provide a fully prototyped one.  If it
+   is 1, we found it so don't provide any declaration at all.  */
+#if !HAVE_DECL_BASENAME
+#if defined (__GNU_LIBRARY__ ) || defined (__linux__) \
+ || defined (__FreeBSD__) || defined (__OpenBSD__) || defined (__NetBSD__) \
+ || defined (__CYGWIN__) || defined (__CYGWIN32__) || defined (__MINGW32__) \
+ || defined (__DragonFly__) || defined (HAVE_DECL_BASENAME) 
+extern char *basename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1);
+#else
+/* Do not allow basename to be used if there is no prototype seen.  We
+   either need to use the above prototype or have one from
+   autoconf which would result in HAVE_DECL_BASENAME being set.  */
+#define basename basename_cannot_be_used_without_a_prototype
+#endif
+#endif
+
+/* A well-defined basename () that is always compiled in.  */
+
+extern const char *lbasename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1);
+
+/* Same, but assumes DOS semantics (drive name, backslash is also a
+   dir separator) regardless of host.  */
+
+extern const char *dos_lbasename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1);
+
+/* Same, but assumes Unix semantics (absolute paths always start with
+   a slash, only forward slash is accepted as dir separator)
+   regardless of host.  */
+
+extern const char *unix_lbasename (const char *) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1);
+
+/* A well-defined realpath () that is always compiled in.  */
+
+extern char *lrealpath (const char *);
+
+/* Concatenate an arbitrary number of strings.  You must pass NULL as
+   the last argument of this function, to terminate the list of
+   strings.  Allocates memory using xmalloc.  */
+
+extern char *concat (const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_SENTINEL;
+
+/* Concatenate an arbitrary number of strings.  You must pass NULL as
+   the last argument of this function, to terminate the list of
+   strings.  Allocates memory using xmalloc.  The first argument is
+   not one of the strings to be concatenated, but if not NULL is a
+   pointer to be freed after the new string is created, similar to the
+   way xrealloc works.  */
+
+extern char *reconcat (char *, const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_SENTINEL;
+
+/* Determine the length of concatenating an arbitrary number of
+   strings.  You must pass NULL as the last argument of this function,
+   to terminate the list of strings.  */
+
+extern unsigned long concat_length (const char *, ...) ATTRIBUTE_SENTINEL;
+
+/* Concatenate an arbitrary number of strings into a SUPPLIED area of
+   memory.  You must pass NULL as the last argument of this function,
+   to terminate the list of strings.  The supplied memory is assumed
+   to be large enough.  */
+
+extern char *concat_copy (char *, const char *, ...) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_NONNULL(1) ATTRIBUTE_SENTINEL;
+
+/* Concatenate an arbitrary number of strings into a GLOBAL area of
+   memory.  You must pass NULL as the last argument of this function,
+   to terminate the list of strings.  The supplied memory is assumed
+   to be large enough.  */
+
+extern char *concat_copy2 (const char *, ...) ATTRIBUTE_RETURNS_NONNULL ATTRIBUTE_SENTINEL;
+
+/* This is the global area used by concat_copy2.  */
+
+extern char *libiberty_concat_ptr;
+
+/* Concatenate an arbitrary number of strings.  You must pass NULL as
+   the last argument of this function, to terminate the list of
+   strings.  Allocates memory using alloca.  The arguments are
+   evaluated twice!  */
+#define ACONCAT(ACONCAT_PARAMS) \
+  (libiberty_concat_ptr = (char *) alloca (concat_length ACONCAT_PARAMS + 1), \
+   concat_copy2 ACONCAT_PARAMS)
+
+/* Check whether two file descriptors refer to the same file.  */
+
+extern int fdmatch (int fd1, int fd2);
+
+/* Return the position of the first bit set in the argument.  */
+/* Prototypes vary from system to system, so we only provide a
+   prototype on systems where we know that we need it.  */
+#if defined (HAVE_DECL_FFS) && !HAVE_DECL_FFS
+extern int ffs(int);
+#endif
+
+/* Get the working directory.  The result is cached, so don't call
+   chdir() between calls to getpwd().  */
+
+extern char * getpwd (void);
+
+/* Get the current time.  */
+/* Prototypes vary from system to system, so we only provide a
+   prototype on systems where we know that we need it.  */
+#ifdef __MINGW32__
+/* Forward declaration to avoid #include <sys/time.h>.   */
+struct timeval;
+extern int gettimeofday (struct timeval *, void *); 
+#endif
+
+/* Get the amount of time the process has run, in microseconds.  */
+
+extern long get_run_time (void);
+
+/* Generate a relocated path to some installation directory.  Allocates
+   return value using malloc.  */
+
+extern char *make_relative_prefix (const char *, const char *,
+                                   const char *) ATTRIBUTE_MALLOC;
+
+/* Generate a relocated path to some installation directory without
+   attempting to follow any soft links.  Allocates
+   return value using malloc.  */
+
+extern char *make_relative_prefix_ignore_links (const char *, const char *,
+						const char *) ATTRIBUTE_MALLOC;
+
+/* Returns a pointer to a directory path suitable for creating temporary
+   files in.  */
+
+extern const char *choose_tmpdir (void) ATTRIBUTE_RETURNS_NONNULL;
+
+/* Choose a temporary directory to use for scratch files.  */
+
+extern char *choose_temp_base (void) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
+
+/* Return a temporary file name or NULL if unable to create one.  */
+
+extern char *make_temp_file (const char *) ATTRIBUTE_MALLOC;
+
+/* Return a temporary file name with given PREFIX and SUFFIX
+   or NULL if unable to create one.  */
+
+extern char *make_temp_file_with_prefix (const char *, const char *) ATTRIBUTE_MALLOC;
+
+/* Remove a link to a file unless it is special. */
+
+extern int unlink_if_ordinary (const char *);
+
+/* Allocate memory filled with spaces.  Allocates using malloc.  */
+
+extern const char *spaces (int count);
+
+/* Return the maximum error number for which strerror will return a
+   string.  */
+
+extern int errno_max (void);
+
+/* Return the name of an errno value (e.g., strerrno (EINVAL) returns
+   "EINVAL").  */
+
+extern const char *strerrno (int);
+
+/* Given the name of an errno value, return the value.  */
+
+extern int strtoerrno (const char *);
+
+/* ANSI's strerror(), but more robust.  */
+
+extern char *xstrerror (int) ATTRIBUTE_RETURNS_NONNULL;
+
+/* Return the maximum signal number for which strsignal will return a
+   string.  */
+
+extern int signo_max (void);
+
+/* Return a signal message string for a signal number
+   (e.g., strsignal (SIGHUP) returns something like "Hangup").  */
+/* This is commented out as it can conflict with one in system headers.
+   We still document its existence though.  */
+
+/*extern const char *strsignal (int);*/
+
+/* Return the name of a signal number (e.g., strsigno (SIGHUP) returns
+   "SIGHUP").  */
+
+extern const char *strsigno (int);
+
+/* Given the name of a signal, return its number.  */
+
+extern int strtosigno (const char *);
+
+/* Register a function to be run by xexit.  Returns 0 on success.  */
+
+extern int xatexit (void (*fn) (void));
+
+/* Exit, calling all the functions registered with xatexit.  */
+
+extern void xexit (int status) ATTRIBUTE_NORETURN;
+
+/* Set the program name used by xmalloc.  */
+
+extern void xmalloc_set_program_name (const char *);
+
+/* Report an allocation failure.  */
+extern void xmalloc_failed (size_t) ATTRIBUTE_NORETURN;
+
+/* Allocate memory without fail.  If malloc fails, this will print a
+   message to stderr (using the name set by xmalloc_set_program_name,
+   if any) and then call xexit.  */
+
+extern void *xmalloc (size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
+
+/* Reallocate memory without fail.  This works like xmalloc.  Note,
+   realloc type functions are not suitable for attribute malloc since
+   they may return the same address across multiple calls. */
+
+extern void *xrealloc (void *, size_t) ATTRIBUTE_RETURNS_NONNULL;
+
+/* Allocate memory without fail and set it to zero.  This works like
+   xmalloc.  */
+
+extern void *xcalloc (size_t, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
+
+/* Copy a string into a memory buffer without fail.  */
+
+extern char *xstrdup (const char *) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
+
+/* Copy at most N characters from string into a buffer without fail.  */
+
+extern char *xstrndup (const char *, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
+
+/* Copy an existing memory buffer to a new memory buffer without fail.  */
+
+extern void *xmemdup (const void *, size_t, size_t) ATTRIBUTE_MALLOC ATTRIBUTE_RETURNS_NONNULL;
+
+/* Physical memory routines.  Return values are in BYTES.  */
+extern double physmem_total (void);
+extern double physmem_available (void);
+
+/* Compute the 32-bit CRC of a block of memory.  */
+extern unsigned int xcrc32 (const unsigned char *, int, unsigned int);
+
+/* These macros provide a K&R/C89/C++-friendly way of allocating structures
+   with nice encapsulation.  The XDELETE*() macros are technically
+   superfluous, but provided here for symmetry.  Using them consistently
+   makes it easier to update client code to use different allocators such
+   as new/delete and new[]/delete[].  */
+
+/* Scalar allocators.  */
+
+#define XALLOCA(T)		((T *) alloca (sizeof (T)))
+#define XNEW(T)			((T *) xmalloc (sizeof (T)))
+#define XCNEW(T)		((T *) xcalloc (1, sizeof (T)))
+#define XDUP(T, P)		((T *) xmemdup ((P), sizeof (T), sizeof (T)))
+#define XDELETE(P)		free ((void*) (P))
+
+/* Array allocators.  */
+
+#define XALLOCAVEC(T, N)	((T *) alloca (sizeof (T) * (N)))
+#define XNEWVEC(T, N)		((T *) xmalloc (sizeof (T) * (N)))
+#define XCNEWVEC(T, N)		((T *) xcalloc ((N), sizeof (T)))
+#define XDUPVEC(T, P, N)	((T *) xmemdup ((P), sizeof (T) * (N), sizeof (T) * (N)))
+#define XRESIZEVEC(T, P, N)	((T *) xrealloc ((void *) (P), sizeof (T) * (N)))
+#define XDELETEVEC(P)		free ((void*) (P))
+
+/* Allocators for variable-sized structures and raw buffers.  */
+
+#define XALLOCAVAR(T, S)	((T *) alloca ((S)))
+#define XNEWVAR(T, S)		((T *) xmalloc ((S)))
+#define XCNEWVAR(T, S)		((T *) xcalloc (1, (S)))
+#define XDUPVAR(T, P, S1, S2)	((T *) xmemdup ((P), (S1), (S2)))
+#define XRESIZEVAR(T, P, S)	((T *) xrealloc ((P), (S)))
+
+/* Type-safe obstack allocator.  */
+
+#define XOBNEW(O, T)		((T *) obstack_alloc ((O), sizeof (T)))
+#define XOBNEWVEC(O, T, N)	((T *) obstack_alloc ((O), sizeof (T) * (N)))
+#define XOBNEWVAR(O, T, S)	((T *) obstack_alloc ((O), (S)))
+#define XOBFINISH(O, T)         ((T) obstack_finish ((O)))
+
+/* hex character manipulation routines */
+
+#define _hex_array_size 256
+#define _hex_bad	99
+extern const unsigned char _hex_value[_hex_array_size];
+extern void hex_init (void);
+#define hex_p(c)	(hex_value (c) != _hex_bad)
+/* If you change this, note well: Some code relies on side effects in
+   the argument being performed exactly once.  */
+#define hex_value(c)	((unsigned int) _hex_value[(unsigned char) (c)])
+
+/* Flags for pex_init.  These are bits to be or'ed together.  */
+
+/* Record subprocess times, if possible.  */
+#define PEX_RECORD_TIMES	0x1
+
+/* Use pipes for communication between processes, if possible.  */
+#define PEX_USE_PIPES		0x2
+
+/* Save files used for communication between processes.  */
+#define PEX_SAVE_TEMPS		0x4
+
+/* Max number of alloca bytes per call before we must switch to malloc.
+
+   ?? Swiped from gnulib's regex_internal.h header.  Is this actually
+   the case?  This number seems arbitrary, though sane.
+
+   The OS usually guarantees only one guard page at the bottom of the stack,
+   and a page size can be as small as 4096 bytes.  So we cannot safely
+   allocate anything larger than 4096 bytes.  Also care for the possibility
+   of a few compiler-allocated temporary stack slots.  */
+#define MAX_ALLOCA_SIZE	4032
+
+/* Prepare to execute one or more programs, with standard output of
+   each program fed to standard input of the next.
+   FLAGS	As above.
+   PNAME	The name of the program to report in error messages.
+   TEMPBASE	A base name to use for temporary files; may be NULL to
+   		use a random name.
+   Returns NULL on error.  */
+
+extern struct pex_obj *pex_init (int flags, const char *pname,
+				 const char *tempbase) ATTRIBUTE_RETURNS_NONNULL;
+
+/* Flags for pex_run.  These are bits to be or'ed together.  */
+
+/* Last program in pipeline.  Standard output of program goes to
+   OUTNAME, or, if OUTNAME is NULL, to standard output of caller.  Do
+   not set this if you want to call pex_read_output.  After this is
+   set, pex_run may no longer be called with the same struct
+   pex_obj.  */
+#define PEX_LAST		0x1
+
+/* Search for program in executable search path.  */
+#define PEX_SEARCH		0x2
+
+/* OUTNAME is a suffix.  */
+#define PEX_SUFFIX		0x4
+
+/* Send program's standard error to standard output.  */
+#define PEX_STDERR_TO_STDOUT	0x8
+
+/* Input file should be opened in binary mode.  This flag is ignored
+   on Unix.  */
+#define PEX_BINARY_INPUT	0x10
+
+/* Output file should be opened in binary mode.  This flag is ignored
+   on Unix.  For proper behaviour PEX_BINARY_INPUT and
+   PEX_BINARY_OUTPUT have to match appropriately--i.e., a call using
+   PEX_BINARY_OUTPUT should be followed by a call using
+   PEX_BINARY_INPUT.  */
+#define PEX_BINARY_OUTPUT	0x20
+
+/* Capture stderr to a pipe.  The output can be read by
+   calling pex_read_err and reading from the returned
+   FILE object.  This flag may be specified only for
+   the last program in a pipeline.  
+
+   This flag is supported only on Unix and Windows.  */
+#define PEX_STDERR_TO_PIPE	0x40
+
+/* Capture stderr in binary mode.  This flag is ignored
+   on Unix.  */
+#define PEX_BINARY_ERROR	0x80
+
+/* Append stdout to existing file instead of truncating it.  */
+#define PEX_STDOUT_APPEND	0x100
+
+/* Thes same as PEX_STDOUT_APPEND, but for STDERR.  */
+#define PEX_STDERR_APPEND	0x200
+
+/* Execute one program.  Returns NULL on success.  On error returns an
+   error string (typically just the name of a system call); the error
+   string is statically allocated.
+
+   OBJ		Returned by pex_init.
+
+   FLAGS	As above.
+
+   EXECUTABLE	The program to execute.
+
+   ARGV		NULL terminated array of arguments to pass to the program.
+
+   OUTNAME	Sets the output file name as follows:
+
+		PEX_SUFFIX set (OUTNAME may not be NULL):
+		  TEMPBASE parameter to pex_init not NULL:
+		    Output file name is the concatenation of TEMPBASE
+		    and OUTNAME.
+		  TEMPBASE is NULL:
+		    Output file name is a random file name ending in
+		    OUTNAME.
+		PEX_SUFFIX not set:
+		  OUTNAME not NULL:
+		    Output file name is OUTNAME.
+		  OUTNAME NULL, TEMPBASE not NULL:
+		    Output file name is randomly chosen using
+		    TEMPBASE.
+		  OUTNAME NULL, TEMPBASE NULL:
+		    Output file name is randomly chosen.
+
+		If PEX_LAST is not set, the output file name is the
+   		name to use for a temporary file holding stdout, if
+   		any (there will not be a file if PEX_USE_PIPES is set
+   		and the system supports pipes).  If a file is used, it
+   		will be removed when no longer needed unless
+   		PEX_SAVE_TEMPS is set.
+
+		If PEX_LAST is set, and OUTNAME is not NULL, standard
+   		output is written to the output file name.  The file
+   		will not be removed.  If PEX_LAST and PEX_SUFFIX are
+   		both set, TEMPBASE may not be NULL.
+
+   ERRNAME	If not NULL, this is the name of a file to which
+		standard error is written.  If NULL, standard error of
+		the program is standard error of the caller.
+
+   ERR		On an error return, *ERR is set to an errno value, or
+   		to 0 if there is no relevant errno.
+*/
+
+extern const char *pex_run (struct pex_obj *obj, int flags,
+			    const char *executable, char * const *argv,
+			    const char *outname, const char *errname,
+			    int *err);
+
+/* As for pex_run (), but takes an extra parameter to enable the
+   environment for the child process to be specified.
+
+   ENV		The environment for the child process, specified as
+		an array of character pointers.  Each element of the
+		array should point to a string of the form VAR=VALUE,
+                with the exception of the last element which must be
+                a null pointer.
+*/
+
+extern const char *pex_run_in_environment (struct pex_obj *obj, int flags,
+			                   const char *executable,
+                                           char * const *argv,
+                                           char * const *env,
+              	          		   const char *outname,
+					   const char *errname, int *err);
+
+/* Return a stream for a temporary file to pass to the first program
+   in the pipeline as input.  The file name is chosen as for pex_run.
+   pex_run closes the file automatically; don't close it yourself.  */
+
+extern FILE *pex_input_file (struct pex_obj *obj, int flags,
+                             const char *in_name);
+
+/* Return a stream for a pipe connected to the standard input of the
+   first program in the pipeline.  You must have passed
+   `PEX_USE_PIPES' to `pex_init'.  Close the returned stream
+   yourself.  */
+
+extern FILE *pex_input_pipe (struct pex_obj *obj, int binary);
+
+/* Read the standard output of the last program to be executed.
+   pex_run cannot be called after this.  BINARY should be non-zero if
+   the file should be opened in binary mode; this is ignored on Unix.
+   Returns NULL on error.  Don't call fclose on the returned FILE; it
+   will be closed by pex_free.  */
+
+extern FILE *pex_read_output (struct pex_obj *, int binary);
+
+/* Read the standard error of the last program to be executed.
+   pex_run cannot be called after this.  BINARY should be non-zero if
+   the file should be opened in binary mode; this is ignored on Unix.
+   Returns NULL on error.  Don't call fclose on the returned FILE; it
+   will be closed by pex_free.  */
+
+extern FILE *pex_read_err (struct pex_obj *, int binary);
+
+/* Return exit status of all programs in VECTOR.  COUNT indicates the
+   size of VECTOR.  The status codes in the vector are in the order of
+   the calls to pex_run.  Returns 0 on error, 1 on success.  */
+
+extern int pex_get_status (struct pex_obj *, int count, int *vector);
+
+/* Return times of all programs in VECTOR.  COUNT indicates the size
+   of VECTOR.  struct pex_time is really just struct timeval, but that
+   is not portable to all systems.  Returns 0 on error, 1 on
+   success.  */
+
+struct pex_time
+{
+  unsigned long user_seconds;
+  unsigned long user_microseconds;
+  unsigned long system_seconds;
+  unsigned long system_microseconds;
+};
+
+extern int pex_get_times (struct pex_obj *, int count,
+			  struct pex_time *vector);
+
+/* Clean up a pex_obj.  If you have not called pex_get_times or
+   pex_get_status, this will try to kill the subprocesses.  */
+
+extern void pex_free (struct pex_obj *);
+
+/* Just execute one program.  Return value is as for pex_run.
+   FLAGS	Combination of PEX_SEARCH and PEX_STDERR_TO_STDOUT.
+   EXECUTABLE	As for pex_run.
+   ARGV		As for pex_run.
+   PNAME	As for pex_init.
+   OUTNAME	As for pex_run when PEX_LAST is set.
+   ERRNAME	As for pex_run.
+   STATUS	Set to exit status on success.
+   ERR		As for pex_run.
+*/
+
+extern const char *pex_one (int flags, const char *executable,
+			    char * const *argv, const char *pname,
+			    const char *outname, const char *errname,
+			    int *status, int *err);
+
+/* pexecute and pwait are the old pexecute interface, still here for
+   backward compatibility.  Don't use these for new code.  Instead,
+   use pex_init/pex_run/pex_get_status/pex_free, or pex_one.  */
+
+/* Definitions used by the pexecute routine.  */
+
+#define PEXECUTE_FIRST   1
+#define PEXECUTE_LAST    2
+#define PEXECUTE_ONE     (PEXECUTE_FIRST + PEXECUTE_LAST)
+#define PEXECUTE_SEARCH  4
+#define PEXECUTE_VERBOSE 8
+
+/* Execute a program.  */
+
+extern int pexecute (const char *, char * const *, const char *,
+                     const char *, char **, char **, int);
+
+/* Wait for pexecute to finish.  */
+
+extern int pwait (int, int *, int);
+
+#if defined(HAVE_DECL_ASPRINTF) && !HAVE_DECL_ASPRINTF
+/* Like sprintf but provides a pointer to malloc'd storage, which must
+   be freed by the caller.  */
+
+extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2;
+#endif
+
+/* Like asprintf but allocates memory without fail. This works like
+   xmalloc.  */
+
+extern char *xasprintf (const char *, ...) ATTRIBUTE_MALLOC ATTRIBUTE_PRINTF_1;
+
+#if !HAVE_DECL_VASPRINTF
+/* Like vsprintf but provides a pointer to malloc'd storage, which
+   must be freed by the caller.  */
+
+extern int vasprintf (char **, const char *, va_list) ATTRIBUTE_PRINTF(2,0);
+#endif
+
+/* Like vasprintf but allocates memory without fail. This works like
+   xmalloc.  */
+
+extern char *xvasprintf (const char *, va_list) ATTRIBUTE_MALLOC ATTRIBUTE_PRINTF(1,0);
+
+#if defined(HAVE_DECL_SNPRINTF) && !HAVE_DECL_SNPRINTF
+/* Like sprintf but prints at most N characters.  */
+extern int snprintf (char *, size_t, const char *, ...) ATTRIBUTE_PRINTF_3;
+#endif
+
+#if defined(HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF
+/* Like vsprintf but prints at most N characters.  */
+extern int vsnprintf (char *, size_t, const char *, va_list) ATTRIBUTE_PRINTF(3,0);
+#endif
+
+#if defined (HAVE_DECL_STRNLEN) && !HAVE_DECL_STRNLEN
+extern size_t strnlen (const char *, size_t);
+#endif
+
+#if defined(HAVE_DECL_STRVERSCMP) && !HAVE_DECL_STRVERSCMP
+/* Compare version strings.  */
+extern int strverscmp (const char *, const char *);
+#endif
+
+#if defined(HAVE_DECL_STRTOL) && !HAVE_DECL_STRTOL
+extern long int strtol (const char *nptr,
+                        char **endptr, int base);
+#endif
+
+#if defined(HAVE_DECL_STRTOUL) && !HAVE_DECL_STRTOUL
+extern unsigned long int strtoul (const char *nptr,
+                                  char **endptr, int base);
+#endif
+
+#if defined(HAVE_LONG_LONG) && defined(HAVE_DECL_STRTOLL) && !HAVE_DECL_STRTOLL
+__extension__
+extern long long int strtoll (const char *nptr,
+                              char **endptr, int base);
+#endif
+
+#if defined(HAVE_LONG_LONG) && defined(HAVE_DECL_STRTOULL) && !HAVE_DECL_STRTOULL
+__extension__
+extern unsigned long long int strtoull (const char *nptr,
+                                        char **endptr, int base);
+#endif
+
+#if defined(HAVE_DECL_STRVERSCMP) && !HAVE_DECL_STRVERSCMP
+/* Compare version strings.  */
+extern int strverscmp (const char *, const char *);
+#endif
+
+/* Set the title of a process */
+extern void setproctitle (const char *name, ...);
+
+/* Increase stack limit if possible.  */
+extern void stack_limit_increase (unsigned long);
+
+#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
+
+/* Drastically simplified alloca configurator.  If we're using GCC,
+   we use __builtin_alloca; otherwise we use the C alloca.  The C
+   alloca is always available.  You can override GCC by defining
+   USE_C_ALLOCA yourself.  The canonical autoconf macro C_ALLOCA is
+   also set/unset as it is often used to indicate whether code needs
+   to call alloca(0).  */
+extern void *C_alloca (size_t) ATTRIBUTE_MALLOC;
+#undef alloca
+#if GCC_VERSION >= 2000 && !defined USE_C_ALLOCA
+# define alloca(x) __builtin_alloca(x)
+# undef C_ALLOCA
+# define ASTRDUP(X) \
+  (__extension__ ({ const char *const libiberty_optr = (X); \
+   const unsigned long libiberty_len = strlen (libiberty_optr) + 1; \
+   char *const libiberty_nptr = (char *) alloca (libiberty_len); \
+   (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len); }))
+#else
+# define alloca(x) C_alloca(x)
+# undef USE_C_ALLOCA
+# define USE_C_ALLOCA 1
+# undef C_ALLOCA
+# define C_ALLOCA 1
+extern const char *libiberty_optr;
+extern char *libiberty_nptr;
+extern unsigned long libiberty_len;
+# define ASTRDUP(X) \
+  (libiberty_optr = (X), \
+   libiberty_len = strlen (libiberty_optr) + 1, \
+   libiberty_nptr = (char *) alloca (libiberty_len), \
+   (char *) memcpy (libiberty_nptr, libiberty_optr, libiberty_len))
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* ! defined (LIBIBERTY_H) */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/limitx.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/limitx.h
new file mode 100644
index 0000000..a472868
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/limitx.h
@@ -0,0 +1,35 @@
+/* Copyright (C) 1992-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+/* This administrivia gets added to the beginning of limits.h
+   if the system has its own version of limits.h.  */
+
+/* We use _GCC_LIMITS_H_ because we want this not to match
+   any macros that the system's limits.h uses for its own purposes.  */
+#ifndef _GCC_LIMITS_H_  /* Terminated in limity.h.  */
+#define _GCC_LIMITS_H_
+
+#ifndef _LIBC_LIMITS_H_
+/* Use "..." so that we find syslimits.h only in this same directory.  */
+#include "syslimits.h"
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/limity.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/limity.h
new file mode 100644
index 0000000..8bb398f
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/limity.h
@@ -0,0 +1,10 @@
+/* This administrivia gets added to the end of limits.h
+   if the system has its own version of limits.h.  */
+
+#else /* not _GCC_LIMITS_H_ */
+
+#ifdef _GCC_NEXT_LIMITS_H
+#include_next <limits.h>		/* recurse down to the real one */
+#endif
+
+#endif /* not _GCC_LIMITS_H_ */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/line-map.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/line-map.h
new file mode 100644
index 0000000..6c77c28
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/line-map.h
@@ -0,0 +1,2044 @@
+/* Map (unsigned int) keys to (source file, line, column) triples.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.
+
+ In other words, you are welcome to use, share and improve this program.
+ You are forbidden to forbid anyone else to use, share and improve
+ what you give them.   Help stamp out software-hoarding!  */
+
+#ifndef LIBCPP_LINE_MAP_H
+#define LIBCPP_LINE_MAP_H
+
+#ifndef GTY
+#define GTY(x) /* nothing */
+#endif
+
+/* Both gcc and emacs number source *lines* starting at 1, but
+   they have differing conventions for *columns*.
+
+   GCC uses a 1-based convention for source columns,
+   whereas Emacs's M-x column-number-mode uses a 0-based convention.
+
+   For example, an error in the initial, left-hand
+   column of source line 3 is reported by GCC as:
+
+      some-file.c:3:1: error: ...etc...
+
+   On navigating to the location of that error in Emacs
+   (e.g. via "next-error"),
+   the locus is reported in the Mode Line
+   (assuming M-x column-number-mode) as:
+
+     some-file.c   10%   (3, 0)
+
+   i.e. "3:1:" in GCC corresponds to "(3, 0)" in Emacs.  */
+
+/* The type of line numbers.  */
+typedef unsigned int linenum_type;
+
+/* A type for doing arithmetic on line numbers.  */
+typedef long long linenum_arith_t;
+
+/* A function for for use by qsort for comparing line numbers.  */
+
+inline int compare (linenum_type lhs, linenum_type rhs)
+{
+  /* Avoid truncation issues by using linenum_arith_t for the comparison,
+     and only consider the sign of the result.  */
+  linenum_arith_t diff = (linenum_arith_t)lhs - (linenum_arith_t)rhs;
+  if (diff)
+    return diff > 0 ? 1 : -1;
+  return 0;
+}
+
+/* Reason for creating a new line map with linemap_add.  */
+enum lc_reason
+{
+  LC_ENTER = 0,		/* Begin #include.  */
+  LC_LEAVE,		/* Return to including file.  */
+  LC_RENAME,		/* Other reason for name change.  */
+  LC_RENAME_VERBATIM,	/* Likewise, but "" != stdin.  */
+  LC_ENTER_MACRO,	/* Begin macro expansion.  */
+  /* FIXME: add support for stringize and paste.  */
+  LC_HWM /* High Water Mark.  */
+};
+
+/* The typedef "location_t" is a key within the location database,
+   identifying a source location or macro expansion, along with range
+   information, and (optionally) a pointer for use by gcc.
+
+   This key only has meaning in relation to a line_maps instance.  Within
+   gcc there is a single line_maps instance: "line_table", declared in
+   gcc/input.h and defined in gcc/input.c.
+
+   The values of the keys are intended to be internal to libcpp,
+   but for ease-of-understanding the implementation, they are currently
+   assigned as follows:
+
+  Actual     | Value                         | Meaning
+  -----------+-------------------------------+-------------------------------
+  0x00000000 | UNKNOWN_LOCATION (gcc/input.h)| Unknown/invalid location.
+  -----------+-------------------------------+-------------------------------
+  0x00000001 | BUILTINS_LOCATION             | The location for declarations
+             |   (gcc/input.h)               | in "<built-in>"
+  -----------+-------------------------------+-------------------------------
+  0x00000002 | RESERVED_LOCATION_COUNT       | The first location to be
+             | (also                         | handed out, and the
+             |  ordmap[0]->start_location)   | first line in ordmap 0
+  -----------+-------------------------------+-------------------------------
+             | ordmap[1]->start_location     | First line in ordmap 1
+             | ordmap[1]->start_location+32  | First column in that line
+             |   (assuming range_bits == 5)  |
+             | ordmap[1]->start_location+64  | 2nd column in that line
+             | ordmap[1]->start_location+4096| Second line in ordmap 1
+             |   (assuming column_bits == 12)
+             |
+             |   Subsequent lines are offset by (1 << column_bits),
+             |   e.g. 4096 for 12 bits, with a column value of 0 representing
+             |   "the whole line".
+             |
+             |   Within a line, the low "range_bits" (typically 5) are used for
+             |   storing short ranges, so that there's an offset of
+             |     (1 << range_bits) between individual columns within a line,
+             |   typically 32.
+             |   The low range_bits store the offset of the end point from the
+             |   start point, and the start point is found by masking away
+             |   the range bits.
+             |
+             |   For example:
+             |      ordmap[1]->start_location+64    "2nd column in that line"
+             |   above means a caret at that location, with a range
+             |   starting and finishing at the same place (the range bits
+             |   are 0), a range of length 1.
+             |
+             |   By contrast:
+             |      ordmap[1]->start_location+68
+             |   has range bits 0x4, meaning a caret with a range starting at
+             |   that location, but with endpoint 4 columns further on: a range
+             |   of length 5.
+             |
+             |   Ranges that have caret != start, or have an endpoint too
+             |   far away to fit in range_bits are instead stored as ad-hoc
+             |   locations.  Hence for range_bits == 5 we can compactly store
+             |   tokens of length <= 32 without needing to use the ad-hoc
+             |   table.
+             |
+             |   This packing scheme means we effectively have
+             |     (column_bits - range_bits)
+             |   of bits for the columns, typically (12 - 5) = 7, for 128
+             |   columns; longer line widths are accomodated by starting a
+             |   new ordmap with a higher column_bits.
+             |
+             | ordmap[2]->start_location-1   | Final location in ordmap 1
+  -----------+-------------------------------+-------------------------------
+             | ordmap[2]->start_location     | First line in ordmap 2
+             | ordmap[3]->start_location-1   | Final location in ordmap 2
+  -----------+-------------------------------+-------------------------------
+             |                               | (etc)
+  -----------+-------------------------------+-------------------------------
+             | ordmap[n-1]->start_location   | First line in final ord map
+             |                               | (etc)
+             | set->highest_location - 1     | Final location in that ordmap
+  -----------+-------------------------------+-------------------------------
+             | set->highest_location         | Location of the where the next
+             |                               | ordinary linemap would start
+  -----------+-------------------------------+-------------------------------
+             |                               |
+             |                  VVVVVVVVVVVVVVVVVVVVVVVVVVV
+             |                  Ordinary maps grow this way
+             |
+             |                    (unallocated integers)
+             |
+  0x60000000 | LINE_MAP_MAX_LOCATION_WITH_COLS
+             |   Beyond this point, ordinary linemaps have 0 bits per column:
+             |   each increment of the value corresponds to a new source line.
+             |
+  0x70000000 | LINE_MAP_MAX_LOCATION
+             |   Beyond the point, we give up on ordinary maps; attempts to
+             |   create locations in them lead to UNKNOWN_LOCATION (0).
+             |
+             |                    (unallocated integers)
+             |
+             |                   Macro maps grow this way
+             |                   ^^^^^^^^^^^^^^^^^^^^^^^^
+             |                               |
+  -----------+-------------------------------+-------------------------------
+             | LINEMAPS_MACRO_LOWEST_LOCATION| Locations within macro maps
+             | macromap[m-1]->start_location | Start of last macro map
+             |                               |
+  -----------+-------------------------------+-------------------------------
+             | macromap[m-2]->start_location | Start of penultimate macro map
+  -----------+-------------------------------+-------------------------------
+             | macromap[1]->start_location   | Start of macro map 1
+  -----------+-------------------------------+-------------------------------
+             | macromap[0]->start_location   | Start of macro map 0
+  0x7fffffff | MAX_LOCATION_T                | Also used as a mask for
+             |                               | accessing the ad-hoc data table
+  -----------+-------------------------------+-------------------------------
+  0x80000000 | Start of ad-hoc values; the lower 31 bits are used as an index
+  ...        | into the line_table->location_adhoc_data_map.data array.
+  0xffffffff | UINT_MAX                      |
+  -----------+-------------------------------+-------------------------------
+
+   Examples of location encoding.
+
+   Packed ranges
+   =============
+
+   Consider encoding the location of a token "foo", seen underlined here
+   on line 523, within an ordinary line_map that starts at line 500:
+
+                 11111111112
+        12345678901234567890
+     522
+     523   return foo + bar;
+                  ^~~
+     524
+
+   The location's caret and start are both at line 523, column 11; the
+   location's finish is on the same line, at column 13 (an offset of 2
+   columns, for length 3).
+
+   Line 523 is offset 23 from the starting line of the ordinary line_map.
+
+   caret == start, and the offset of the finish fits within 5 bits, so
+   this can be stored as a packed range.
+
+   This is encoded as:
+      ordmap->start
+         + (line_offset << ordmap->m_column_and_range_bits)
+         + (column << ordmap->m_range_bits)
+         + (range_offset);
+   i.e. (for line offset 23, column 11, range offset 2):
+      ordmap->start
+         + (23 << 12)
+         + (11 << 5)
+         + 2;
+   i.e.:
+      ordmap->start + 0x17162
+   assuming that the line_map uses the default of 7 bits for columns and
+   5 bits for packed range (giving 12 bits for m_column_and_range_bits).
+
+
+   "Pure" locations
+   ================
+
+   These are a special case of the above, where
+      caret == start == finish
+   They are stored as packed ranges with offset == 0.
+   For example, the location of the "f" of "foo" could be stored
+   as above, but with range offset 0, giving:
+      ordmap->start
+         + (23 << 12)
+         + (11 << 5)
+         + 0;
+   i.e.:
+      ordmap->start + 0x17160
+
+
+   Unoptimized ranges
+   ==================
+
+   Consider encoding the location of the binary expression
+   below:
+
+                 11111111112
+        12345678901234567890
+     522
+     523   return foo + bar;
+                  ~~~~^~~~~
+     524
+
+   The location's caret is at the "+", line 523 column 15, but starts
+   earlier, at the "f" of "foo" at column 11.  The finish is at the "r"
+   of "bar" at column 19.
+
+   This can't be stored as a packed range since start != caret.
+   Hence it is stored as an ad-hoc location e.g. 0x80000003.
+
+   Stripping off the top bit gives us an index into the ad-hoc
+   lookaside table:
+
+     line_table->location_adhoc_data_map.data[0x3]
+
+   from which the caret, start and finish can be looked up,
+   encoded as "pure" locations:
+
+     start  == ordmap->start + (23 << 12) + (11 << 5)
+            == ordmap->start + 0x17160  (as above; the "f" of "foo")
+
+     caret  == ordmap->start + (23 << 12) + (15 << 5)
+            == ordmap->start + 0x171e0
+
+     finish == ordmap->start + (23 << 12) + (19 << 5)
+            == ordmap->start + 0x17260
+
+   To further see how location_t works in practice, see the
+   worked example in libcpp/location-example.txt.  */
+typedef unsigned int location_t;
+
+/* Do not track column numbers higher than this one.  As a result, the
+   range of column_bits is [12, 18] (or 0 if column numbers are
+   disabled).  */
+const unsigned int LINE_MAP_MAX_COLUMN_NUMBER = (1U << 12);
+
+/* Do not pack ranges if locations get higher than this.
+   If you change this, update:
+     gcc.dg/plugin/location-overflow-test-*.c.  */
+const location_t LINE_MAP_MAX_LOCATION_WITH_PACKED_RANGES = 0x50000000;
+
+/* Do not track column numbers if locations get higher than this.
+   If you change this, update:
+     gcc.dg/plugin/location-overflow-test-*.c.  */
+const location_t LINE_MAP_MAX_LOCATION_WITH_COLS = 0x60000000;
+
+/* Highest possible source location encoded within an ordinary map.  */
+const location_t LINE_MAP_MAX_LOCATION = 0x70000000;
+
+/* A range of source locations.
+
+   Ranges are closed:
+   m_start is the first location within the range,
+   m_finish is the last location within the range.
+
+   We may need a more compact way to store these, but for now,
+   let's do it the simple way, as a pair.  */
+struct GTY(()) source_range
+{
+  location_t m_start;
+  location_t m_finish;
+
+  /* We avoid using constructors, since various structs that
+     don't yet have constructors will embed instances of
+     source_range.  */
+
+  /* Make a source_range from a location_t.  */
+  static source_range from_location (location_t loc)
+  {
+    source_range result;
+    result.m_start = loc;
+    result.m_finish = loc;
+    return result;
+  }
+
+  /* Make a source_range from a pair of location_t.  */
+  static source_range from_locations (location_t start,
+				      location_t finish)
+  {
+    source_range result;
+    result.m_start = start;
+    result.m_finish = finish;
+    return result;
+  }
+};
+
+/* Memory allocation function typedef.  Works like xrealloc.  */
+typedef void *(*line_map_realloc) (void *, size_t);
+
+/* Memory allocator function that returns the actual allocated size,
+   for a given requested allocation.  */
+typedef size_t (*line_map_round_alloc_size_func) (size_t);
+
+/* A line_map encodes a sequence of locations.
+   There are two kinds of maps. Ordinary maps and macro expansion
+   maps, a.k.a macro maps.
+
+   A macro map encodes source locations of tokens that are part of a
+   macro replacement-list, at a macro expansion point. E.g, in:
+
+            #define PLUS(A,B) A + B
+
+   No macro map is going to be created there, because we are not at a
+   macro expansion point. We are at a macro /definition/ point. So the
+   locations of the tokens of the macro replacement-list (i.e, A + B)
+   will be locations in an ordinary map, not a macro map.
+
+   On the other hand, if we later do:
+
+        int a = PLUS (1,2);
+
+   The invocation of PLUS here is a macro expansion. So we are at a
+   macro expansion point. The preprocessor expands PLUS (1,2) and
+   replaces it with the tokens of its replacement-list: 1 + 2. A macro
+   map is going to be created to hold (or rather to map, haha ...) the
+   locations of the tokens 1, + and 2. The macro map also records the
+   location of the expansion point of PLUS. That location is mapped in
+   the map that is active right before the location of the invocation
+   of PLUS.  */
+
+/* This contains GTY mark-up to support precompiled headers.
+   line_map is an abstract class, only derived objects exist.  */
+struct GTY((tag ("0"), desc ("MAP_ORDINARY_P (&%h) ? 1 : 2"))) line_map {
+  location_t start_location;
+
+  /* Size and alignment is (usually) 4 bytes.  */
+};
+
+/* An ordinary line map encodes physical source locations. Those
+   physical source locations are called "spelling locations".
+   
+   Physical source file TO_FILE at line TO_LINE at column 0 is represented
+   by the logical START_LOCATION.  TO_LINE+L at column C is represented by
+   START_LOCATION+(L*(1<<m_column_and_range_bits))+(C*1<<m_range_bits), as
+   long as C<(1<<effective range bits), and the result_location is less than
+   the next line_map's start_location.
+   (The top line is line 1 and the leftmost column is column 1; line/column 0
+   means "entire file/line" or "unknown line/column" or "not applicable".)
+
+   The highest possible source location is MAX_LOCATION_T.  */
+struct GTY((tag ("1"))) line_map_ordinary : public line_map {
+  /* Base class is 4 bytes.  */
+
+  /* 4 bytes of integers, each 1 byte for easy extraction/insertion.  */
+
+  /* The reason for creation of this line map.  */
+  ENUM_BITFIELD (lc_reason) reason : 8;
+
+  /* SYSP is one for a system header, two for a C system header file
+     that therefore needs to be extern "C" protected in C++, and zero
+     otherwise.  This field isn't really needed now that it's in
+     cpp_buffer.  */
+  unsigned char sysp;
+
+  /* Number of the low-order location_t bits used for column numbers
+     and ranges.  */
+  unsigned int m_column_and_range_bits : 8;
+
+  /* Number of the low-order "column" bits used for storing short ranges
+     inline, rather than in the ad-hoc table.
+     MSB                                                                 LSB
+     31                                                                    0
+     +-------------------------+-------------------------------------------+
+     |                         |<---map->column_and_range_bits (e.g. 12)-->|
+     +-------------------------+-----------------------+-------------------+
+     |                         | column_and_range_bits | map->range_bits   |
+     |                         |   - range_bits        |                   |
+     +-------------------------+-----------------------+-------------------+
+     | row bits                | effective column bits | short range bits  |
+     |                         |    (e.g. 7)           |   (e.g. 5)        |
+     +-------------------------+-----------------------+-------------------+ */
+  unsigned int m_range_bits : 8;
+
+  /* Pointer alignment boundary on both 32 and 64-bit systems.  */
+
+  const char *to_file;
+  linenum_type to_line;
+
+  /* Location from whence this line map was included.  For regular
+     #includes, this location will be the last location of a map.  For
+     outermost file, this is 0.  */
+  location_t included_from;
+
+  /* Size is 20 or 24 bytes, no padding  */
+};
+
+/* This is the highest possible source location encoded within an
+   ordinary or macro map.  */
+const location_t MAX_LOCATION_T = 0x7FFFFFFF;
+
+struct cpp_hashnode;
+
+/* A macro line map encodes location of tokens coming from a macro
+   expansion.
+   
+   The offset from START_LOCATION is used to index into
+   MACRO_LOCATIONS; this holds the original location of the token.  */
+struct GTY((tag ("2"))) line_map_macro : public line_map {
+  /* Base is 4 bytes.  */
+
+  /* The number of tokens inside the replacement-list of MACRO.  */
+  unsigned int n_tokens;
+
+  /* Pointer alignment boundary.  */
+
+  /* The cpp macro whose expansion gave birth to this macro map.  */
+  struct cpp_hashnode *
+    GTY ((nested_ptr (union tree_node,
+		      "%h ? CPP_HASHNODE (GCC_IDENT_TO_HT_IDENT (%h)) : NULL",
+		      "%h ? HT_IDENT_TO_GCC_IDENT (HT_NODE (%h)) : NULL")))
+    macro;
+
+  /* This array of location is actually an array of pairs of
+     locations. The elements inside it thus look like:
+
+           x0,y0, x1,y1, x2,y2, ...., xn,yn.
+
+     where n == n_tokens;
+
+     Remember that these xI,yI are collected when libcpp is about to
+     expand a given macro.
+
+     yI is the location in the macro definition, either of the token
+     itself or of a macro parameter that it replaces.
+
+     Imagine this:
+
+	#define PLUS(A, B) A + B  <--- #1
+
+	int a = PLUS (1,2); <--- #2
+
+     There is a macro map for the expansion of PLUS in #2.  PLUS is
+     expanded into its expansion-list.  The expansion-list is the
+     replacement-list of PLUS where the macro parameters are replaced
+     with their arguments.  So the replacement-list of PLUS is made of
+     the tokens:
+
+        A, +, B
+
+     and the expansion-list is made of the tokens:
+
+        1, +, 2
+
+     Let's consider the case of token "+".  Its y1 [yI for I == 1] is
+     its spelling location in #1.
+
+     y0 (thus for token "1") is the spelling location of A in #1.
+
+     And y2 (of token "2") is the spelling location of B in #1.
+
+     When the token is /not/ an argument for a macro, xI is the same
+     location as yI.  Otherwise, xI is the location of the token
+     outside this macro expansion.  If this macro was expanded from
+     another macro expansion, xI is a virtual location representing
+     the token in that macro expansion; otherwise, it is the spelling
+     location of the token.
+
+     Note that a virtual location is a location returned by
+     linemap_add_macro_token.  It encodes the relevant locations (x,y
+     pairs) of that token across the macro expansions from which it
+     (the token) might come from.
+
+     In the example above x1 (for token "+") is going to be the same
+     as y1.  x0 is the spelling location for the argument token "1",
+     and x2 is the spelling location for the argument token "2".  */
+  location_t * GTY((atomic)) macro_locations;
+
+  /* This is the location of the expansion point of the current macro
+     map.  It's the location of the macro name.  That location is held
+     by the map that was current right before the current one. It
+     could have been either a macro or an ordinary map, depending on
+     if we are in a nested expansion context not.  */
+  location_t expansion;
+
+  /* Size is 20 or 32 (4 bytes padding on 64-bit).  */
+};
+
+#if CHECKING_P && (GCC_VERSION >= 2007)
+
+/* Assertion macro to be used in line-map code.  */
+#define linemap_assert(EXPR)                  \
+  do {                                                \
+    if (! (EXPR))                             \
+      abort ();                                       \
+  } while (0)
+
+/* Assert that becomes a conditional expression when checking is disabled at
+   compilation time.  Use this for conditions that should not happen but if
+   they happen, it is better to handle them gracefully rather than crash
+   randomly later.
+   Usage:
+
+   if (linemap_assert_fails(EXPR)) handle_error(); */
+#define linemap_assert_fails(EXPR) __extension__ \
+  ({linemap_assert (EXPR); false;})
+
+#else
+/* Include EXPR, so that unused variable warnings do not occur.  */
+#define linemap_assert(EXPR) ((void)(0 && (EXPR)))
+#define linemap_assert_fails(EXPR) (! (EXPR))
+#endif
+
+/* Get whether location LOC is an ad-hoc, ordinary or macro location.  */
+
+inline bool
+IS_ORDINARY_LOC (location_t loc)
+{
+  return loc < LINE_MAP_MAX_LOCATION;
+}
+
+inline bool
+IS_ADHOC_LOC (location_t loc)
+{
+  return loc > MAX_LOCATION_T;
+}
+
+inline bool
+IS_MACRO_LOC (location_t loc)
+{
+  return !IS_ORDINARY_LOC (loc) && !IS_ADHOC_LOC (loc);
+}
+
+/* Categorize line map kinds.  */
+
+inline bool
+MAP_ORDINARY_P (const line_map *map)
+{
+  return IS_ORDINARY_LOC (map->start_location);
+}
+
+/* Return TRUE if MAP encodes locations coming from a macro
+   replacement-list at macro expansion point.  */
+bool
+linemap_macro_expansion_map_p (const struct line_map *);
+
+/* Assert that MAP encodes locations of tokens that are not part of
+   the replacement-list of a macro expansion, downcasting from
+   line_map * to line_map_ordinary *.  */
+
+inline line_map_ordinary *
+linemap_check_ordinary (struct line_map *map)
+{
+  linemap_assert (MAP_ORDINARY_P (map));
+  return (line_map_ordinary *)map;
+}
+
+/* Assert that MAP encodes locations of tokens that are not part of
+   the replacement-list of a macro expansion, downcasting from
+   const line_map * to const line_map_ordinary *.  */
+
+inline const line_map_ordinary *
+linemap_check_ordinary (const struct line_map *map)
+{
+  linemap_assert (MAP_ORDINARY_P (map));
+  return (const line_map_ordinary *)map;
+}
+
+/* Assert that MAP is a macro expansion and downcast to the appropriate
+   subclass.  */
+
+inline line_map_macro *linemap_check_macro (line_map *map)
+{
+  linemap_assert (!MAP_ORDINARY_P (map));
+  return (line_map_macro *)map;
+}
+
+/* Assert that MAP is a macro expansion and downcast to the appropriate
+   subclass.  */
+
+inline const line_map_macro *
+linemap_check_macro (const line_map *map)
+{
+  linemap_assert (!MAP_ORDINARY_P (map));
+  return (const line_map_macro *)map;
+}
+
+/* Read the start location of MAP.  */
+
+inline location_t
+MAP_START_LOCATION (const line_map *map)
+{
+  return map->start_location;
+}
+
+/* Get the starting line number of ordinary map MAP.  */
+
+inline linenum_type
+ORDINARY_MAP_STARTING_LINE_NUMBER (const line_map_ordinary *ord_map)
+{
+  return ord_map->to_line;
+}
+
+/* Return a positive value if map encodes locations from a system
+   header, 0 otherwise. Returns 1 if ordinary map MAP encodes locations
+   in a system header and 2 if it encodes locations in a C system header
+   that therefore needs to be extern "C" protected in C++.  */
+
+inline unsigned char
+ORDINARY_MAP_IN_SYSTEM_HEADER_P (const line_map_ordinary *ord_map)
+{
+  return ord_map->sysp;
+}
+
+/* Get the filename of ordinary map MAP.  */
+
+inline const char *
+ORDINARY_MAP_FILE_NAME (const line_map_ordinary *ord_map)
+{
+  return ord_map->to_file;
+}
+
+/* Get the cpp macro whose expansion gave birth to macro map MAP.  */
+
+inline cpp_hashnode *
+MACRO_MAP_MACRO (const line_map_macro *macro_map)
+{
+  return macro_map->macro;
+}
+
+/* Get the number of tokens inside the replacement-list of the macro
+   that led to macro map MAP.  */
+
+inline unsigned int
+MACRO_MAP_NUM_MACRO_TOKENS (const line_map_macro *macro_map)
+{
+  return macro_map->n_tokens;
+}
+
+/* Get the array of pairs of locations within macro map MAP.
+   See the declaration of line_map_macro for more information.  */
+
+inline location_t *
+MACRO_MAP_LOCATIONS (const line_map_macro *macro_map)
+{
+  return macro_map->macro_locations;
+}
+
+/* Get the location of the expansion point of the macro map MAP.  */
+
+inline location_t
+MACRO_MAP_EXPANSION_POINT_LOCATION (const line_map_macro *macro_map)
+{
+  return macro_map->expansion;
+}
+
+/* The abstraction of a set of location maps. There can be several
+   types of location maps. This abstraction contains the attributes
+   that are independent from the type of the map.
+
+   Essentially this is just a vector of T_linemap_subclass,
+   which can only ever grow in size.  */
+
+struct GTY(()) maps_info_ordinary {
+  /* This array contains the "ordinary" line maps, for all
+     events other than macro expansion
+     (e.g. when a new preprocessing unit starts or ends).  */
+  line_map_ordinary * GTY ((length ("%h.used"))) maps;
+
+  /* The total number of allocated maps.  */
+  unsigned int allocated;
+
+  /* The number of elements used in maps. This number is smaller
+     or equal to ALLOCATED.  */
+  unsigned int used;
+
+  unsigned int cache;
+};
+
+struct GTY(()) maps_info_macro {
+  /* This array contains the macro line maps.
+     A macro line map is created whenever a macro expansion occurs.  */
+  line_map_macro * GTY ((length ("%h.used"))) maps;
+
+  /* The total number of allocated maps.  */
+  unsigned int allocated;
+
+  /* The number of elements used in maps. This number is smaller
+     or equal to ALLOCATED.  */
+  unsigned int used;
+
+  unsigned int cache;
+};
+
+/* Data structure to associate a source_range together with an arbitrary
+   data pointer with a source location.  */
+struct GTY(()) location_adhoc_data {
+  location_t locus;
+  source_range src_range;
+  void * GTY((skip)) data;
+};
+
+struct htab;
+
+/* The following data structure encodes a location with some adhoc data
+   and maps it to a new unsigned integer (called an adhoc location)
+   that replaces the original location to represent the mapping.
+
+   The new adhoc_loc uses the highest bit as the enabling bit, i.e. if the
+   highest bit is 1, then the number is adhoc_loc. Otherwise, it serves as
+   the original location. Once identified as the adhoc_loc, the lower 31
+   bits of the integer is used to index the location_adhoc_data array,
+   in which the locus and associated data is stored.  */
+
+struct GTY(()) location_adhoc_data_map {
+  struct htab * GTY((skip)) htab;
+  location_t curr_loc;
+  unsigned int allocated;
+  struct location_adhoc_data GTY((length ("%h.allocated"))) *data;
+};
+
+/* A set of chronological line_map structures.  */
+struct GTY(()) line_maps {
+
+  ~line_maps ();
+  
+  maps_info_ordinary info_ordinary;
+
+  maps_info_macro info_macro;
+
+  /* Depth of the include stack, including the current file.  */
+  unsigned int depth;
+
+  /* If true, prints an include trace a la -H.  */
+  bool trace_includes;
+
+  /* Highest location_t "given out".  */
+  location_t highest_location;
+
+  /* Start of line of highest location_t "given out".  */
+  location_t highest_line;
+
+  /* The maximum column number we can quickly allocate.  Higher numbers
+     may require allocating a new line_map.  */
+  unsigned int max_column_hint;
+
+  /* The allocator to use when resizing 'maps', defaults to xrealloc.  */
+  line_map_realloc reallocator;
+
+  /* The allocators' function used to know the actual size it
+     allocated, for a certain allocation size requested.  */
+  line_map_round_alloc_size_func round_alloc_size;
+
+  struct location_adhoc_data_map location_adhoc_data_map;
+
+  /* The special location value that is used as spelling location for
+     built-in tokens.  */
+  location_t builtin_location;
+
+  /* True if we've seen a #line or # 44 "file" directive.  */
+  bool seen_line_directive;
+
+  /* The default value of range_bits in ordinary line maps.  */
+  unsigned int default_range_bits;
+
+  unsigned int num_optimized_ranges;
+  unsigned int num_unoptimized_ranges;
+};
+
+/* Returns the number of allocated maps so far. MAP_KIND shall be TRUE
+   if we are interested in macro maps, FALSE otherwise.  */
+inline unsigned int
+LINEMAPS_ALLOCATED (const line_maps *set, bool map_kind)
+{
+  if (map_kind)
+    return set->info_macro.allocated;
+  else
+    return set->info_ordinary.allocated;
+}
+
+/* As above, but by reference (e.g. as an lvalue).  */
+
+inline unsigned int &
+LINEMAPS_ALLOCATED (line_maps *set, bool map_kind)
+{
+  if (map_kind)
+    return set->info_macro.allocated;
+  else
+    return set->info_ordinary.allocated;
+}
+
+/* Returns the number of used maps so far. MAP_KIND shall be TRUE if
+   we are interested in macro maps, FALSE otherwise.*/
+inline unsigned int
+LINEMAPS_USED (const line_maps *set, bool map_kind)
+{
+  if (map_kind)
+    return set->info_macro.used;
+  else
+    return set->info_ordinary.used;
+}
+
+/* As above, but by reference (e.g. as an lvalue).  */
+
+inline unsigned int &
+LINEMAPS_USED (line_maps *set, bool map_kind)
+{
+  if (map_kind)
+    return set->info_macro.used;
+  else
+    return set->info_ordinary.used;
+}
+
+/* Returns the index of the last map that was looked up with
+   linemap_lookup. MAP_KIND shall be TRUE if we are interested in
+   macro maps, FALSE otherwise.  */
+inline unsigned int
+LINEMAPS_CACHE (const line_maps *set, bool map_kind)
+{
+  if (map_kind)
+    return set->info_macro.cache;
+  else
+    return set->info_ordinary.cache;
+}
+
+/* As above, but by reference (e.g. as an lvalue).  */
+
+inline unsigned int &
+LINEMAPS_CACHE (line_maps *set, bool map_kind)
+{
+  if (map_kind)
+    return set->info_macro.cache;
+  else
+    return set->info_ordinary.cache;
+}
+
+/* Return the map at a given index.  */
+inline line_map *
+LINEMAPS_MAP_AT (const line_maps *set, bool map_kind, int index)
+{
+  if (map_kind)
+    return &set->info_macro.maps[index];
+  else
+    return &set->info_ordinary.maps[index];
+}
+
+/* Returns the last map used in the line table SET. MAP_KIND
+   shall be TRUE if we are interested in macro maps, FALSE
+   otherwise.*/
+inline line_map *
+LINEMAPS_LAST_MAP (const line_maps *set, bool map_kind)
+{
+  return LINEMAPS_MAP_AT (set, map_kind,
+			  LINEMAPS_USED (set, map_kind) - 1);
+}
+
+/* Returns the last map that was allocated in the line table SET.
+   MAP_KIND shall be TRUE if we are interested in macro maps, FALSE
+   otherwise.*/
+inline line_map *
+LINEMAPS_LAST_ALLOCATED_MAP (const line_maps *set, bool map_kind)
+{
+  return LINEMAPS_MAP_AT (set, map_kind,
+			  LINEMAPS_ALLOCATED (set, map_kind) - 1);
+}
+
+/* Returns a pointer to the memory region where ordinary maps are
+   allocated in the line table SET.  */
+inline line_map_ordinary *
+LINEMAPS_ORDINARY_MAPS (const line_maps *set)
+{
+  return set->info_ordinary.maps;
+}
+
+/* Returns the INDEXth ordinary map.  */
+inline line_map_ordinary *
+LINEMAPS_ORDINARY_MAP_AT (const line_maps *set, int index)
+{
+  linemap_assert (index >= 0);
+  linemap_assert ((unsigned int)index < set->info_ordinary.used);
+  return &set->info_ordinary.maps[index];
+}
+
+/* Return the number of ordinary maps allocated in the line table
+   SET.  */
+inline unsigned int
+LINEMAPS_ORDINARY_ALLOCATED (const line_maps *set)
+{
+  return LINEMAPS_ALLOCATED (set, false);
+}
+
+/* Return the number of ordinary maps used in the line table SET.  */
+inline unsigned int
+LINEMAPS_ORDINARY_USED (const line_maps *set)
+{
+  return LINEMAPS_USED (set, false);
+}
+
+/* Return the index of the last ordinary map that was looked up with
+   linemap_lookup.  */
+inline unsigned int
+LINEMAPS_ORDINARY_CACHE (const line_maps *set)
+{
+  return LINEMAPS_CACHE (set, false);
+}
+
+/* As above, but by reference (e.g. as an lvalue).  */
+
+inline unsigned int &
+LINEMAPS_ORDINARY_CACHE (line_maps *set)
+{
+  return LINEMAPS_CACHE (set, false);
+}
+
+/* Returns a pointer to the last ordinary map used in the line table
+   SET.  */
+inline line_map_ordinary *
+LINEMAPS_LAST_ORDINARY_MAP (const line_maps *set)
+{
+  return (line_map_ordinary *)LINEMAPS_LAST_MAP (set, false);
+}
+
+/* Returns a pointer to the last ordinary map allocated the line table
+   SET.  */
+inline line_map_ordinary *
+LINEMAPS_LAST_ALLOCATED_ORDINARY_MAP (const line_maps *set)
+{
+  return (line_map_ordinary *)LINEMAPS_LAST_ALLOCATED_MAP (set, false);
+}
+
+/* Returns a pointer to the beginning of the region where macro maps
+   are allocated.  */
+inline line_map_macro *
+LINEMAPS_MACRO_MAPS (const line_maps *set)
+{
+  return set->info_macro.maps;
+}
+
+/* Returns the INDEXth macro map.  */
+inline line_map_macro *
+LINEMAPS_MACRO_MAP_AT (const line_maps *set, int index)
+{
+  linemap_assert (index >= 0);
+  linemap_assert ((unsigned int)index < set->info_macro.used);
+  return &set->info_macro.maps[index];
+}
+
+/* Returns the number of macro maps that were allocated in the line
+   table SET.  */
+inline unsigned int
+LINEMAPS_MACRO_ALLOCATED (const line_maps *set)
+{
+  return LINEMAPS_ALLOCATED (set, true);
+}
+
+/* Returns the number of macro maps used in the line table SET.  */
+inline unsigned int
+LINEMAPS_MACRO_USED (const line_maps *set)
+{
+  return LINEMAPS_USED (set, true);
+}
+
+/* Returns the index of the last macro map looked up with
+   linemap_lookup.  */
+inline unsigned int
+LINEMAPS_MACRO_CACHE (const line_maps *set)
+{
+  return LINEMAPS_CACHE (set, true);
+}
+
+/* As above, but by reference (e.g. as an lvalue).  */
+
+inline unsigned int &
+LINEMAPS_MACRO_CACHE (line_maps *set)
+{
+  return LINEMAPS_CACHE (set, true);
+}
+
+/* Returns the last macro map used in the line table SET.  */
+inline line_map_macro *
+LINEMAPS_LAST_MACRO_MAP (const line_maps *set)
+{
+  return (line_map_macro *)LINEMAPS_LAST_MAP (set, true);
+}
+
+/* Returns the lowest location [of a token resulting from macro
+   expansion] encoded in this line table.  */
+inline location_t
+LINEMAPS_MACRO_LOWEST_LOCATION (const line_maps *set)
+{
+  return LINEMAPS_MACRO_USED (set)
+         ? MAP_START_LOCATION (LINEMAPS_LAST_MACRO_MAP (set))
+         : MAX_LOCATION_T + 1;
+}
+
+/* Returns the last macro map allocated in the line table SET.  */
+inline line_map_macro *
+LINEMAPS_LAST_ALLOCATED_MACRO_MAP (const line_maps *set)
+{
+  return (line_map_macro *)LINEMAPS_LAST_ALLOCATED_MAP (set, true);
+}
+
+extern location_t get_combined_adhoc_loc (struct line_maps *,
+					       location_t,
+					       source_range,
+					       void *);
+extern void *get_data_from_adhoc_loc (struct line_maps *, location_t);
+extern location_t get_location_from_adhoc_loc (struct line_maps *,
+						    location_t);
+
+extern source_range get_range_from_loc (line_maps *set, location_t loc);
+
+/* Get whether location LOC is a "pure" location, or
+   whether it is an ad-hoc location, or embeds range information.  */
+
+bool
+pure_location_p (line_maps *set, location_t loc);
+
+/* Given location LOC within SET, strip away any packed range information
+   or ad-hoc information.  */
+
+extern location_t get_pure_location (line_maps *set,
+					  location_t loc);
+
+/* Combine LOC and BLOCK, giving a combined adhoc location.  */
+
+inline location_t
+COMBINE_LOCATION_DATA (struct line_maps *set,
+		       location_t loc,
+		       source_range src_range,
+		       void *block)
+{
+  return get_combined_adhoc_loc (set, loc, src_range, block);
+}
+
+extern void rebuild_location_adhoc_htab (struct line_maps *);
+
+/* Initialize a line map set.  SET is the line map set to initialize
+   and BUILTIN_LOCATION is the special location value to be used as
+   spelling location for built-in tokens.  This BUILTIN_LOCATION has
+   to be strictly less than RESERVED_LOCATION_COUNT.  */
+extern void linemap_init (struct line_maps *set,
+			  location_t builtin_location);
+
+/* Check for and warn about line_maps entered but not exited.  */
+
+extern void linemap_check_files_exited (struct line_maps *);
+
+/* Return a location_t for the start (i.e. column==0) of
+   (physical) line TO_LINE in the current source file (as in the
+   most recent linemap_add).   MAX_COLUMN_HINT is the highest column
+   number we expect to use in this line (but it does not change
+   the highest_location).  */
+
+extern location_t linemap_line_start
+(struct line_maps *set, linenum_type to_line,  unsigned int max_column_hint);
+
+/* Add a mapping of logical source line to physical source file and
+   line number. This function creates an "ordinary map", which is a
+   map that records locations of tokens that are not part of macro
+   replacement-lists present at a macro expansion point.
+
+   The text pointed to by TO_FILE must have a lifetime
+   at least as long as the lifetime of SET.  An empty
+   TO_FILE means standard input.  If reason is LC_LEAVE, and
+   TO_FILE is NULL, then TO_FILE, TO_LINE and SYSP are given their
+   natural values considering the file we are returning to.
+
+   A call to this function can relocate the previous set of
+   maps, so any stored line_map pointers should not be used.  */
+extern const struct line_map *linemap_add
+  (struct line_maps *, enum lc_reason, unsigned int sysp,
+   const char *to_file, linenum_type to_line);
+
+/* Given a logical source location, returns the map which the
+   corresponding (source file, line, column) triplet can be deduced
+   from. Since the set is built chronologically, the logical lines are
+   monotonic increasing, and so the list is sorted and we can use a
+   binary search. If no line map have been allocated yet, this
+   function returns NULL.  */
+extern const struct line_map *linemap_lookup
+  (struct line_maps *, location_t);
+
+/* Returns TRUE if the line table set tracks token locations across
+   macro expansion, FALSE otherwise.  */
+bool linemap_tracks_macro_expansion_locs_p (struct line_maps *);
+
+/* Return the name of the macro associated to MACRO_MAP.  */
+const char* linemap_map_get_macro_name (const line_map_macro *);
+
+/* Return a positive value if LOCATION is the locus of a token that is
+   located in a system header, O otherwise. It returns 1 if LOCATION
+   is the locus of a token that is located in a system header, and 2
+   if LOCATION is the locus of a token located in a C system header
+   that therefore needs to be extern "C" protected in C++.
+
+   Note that this function returns 1 if LOCATION belongs to a token
+   that is part of a macro replacement-list defined in a system
+   header, but expanded in a non-system file.  */
+int linemap_location_in_system_header_p (struct line_maps *,
+					 location_t);
+
+/* Return TRUE if LOCATION is a source code location of a token that is part of
+   a macro expansion, FALSE otherwise.  */
+bool linemap_location_from_macro_expansion_p (const struct line_maps *,
+					      location_t);
+
+/* TRUE if LOCATION is a source code location of a token that is part of the
+   definition of a macro, FALSE otherwise.  */
+bool linemap_location_from_macro_definition_p (struct line_maps *,
+					       location_t);
+
+/* With the precondition that LOCATION is the locus of a token that is
+   an argument of a function-like macro MACRO_MAP and appears in the
+   expansion of MACRO_MAP, return the locus of that argument in the
+   context of the caller of MACRO_MAP.  */
+
+extern location_t linemap_macro_map_loc_unwind_toward_spelling
+  (line_maps *set, const line_map_macro *macro_map, location_t location);
+
+/* location_t values from 0 to RESERVED_LOCATION_COUNT-1 will
+   be reserved for libcpp user as special values, no token from libcpp
+   will contain any of those locations.  */
+const location_t RESERVED_LOCATION_COUNT = 2;
+
+/* Converts a map and a location_t to source line.  */
+inline linenum_type
+SOURCE_LINE (const line_map_ordinary *ord_map, location_t loc)
+{
+  return ((loc - ord_map->start_location)
+	  >> ord_map->m_column_and_range_bits) + ord_map->to_line;
+}
+
+/* Convert a map and location_t to source column number.  */
+inline linenum_type
+SOURCE_COLUMN (const line_map_ordinary *ord_map, location_t loc)
+{
+  return ((loc - ord_map->start_location)
+	  & ((1 << ord_map->m_column_and_range_bits) - 1)) >> ord_map->m_range_bits;
+}
+
+
+inline location_t
+linemap_included_from (const line_map_ordinary *ord_map)
+{
+  return ord_map->included_from;
+}
+
+/* The linemap containing the included-from location of MAP.  */
+const line_map_ordinary *linemap_included_from_linemap
+  (line_maps *set, const line_map_ordinary *map);
+
+/* True if the map is at the bottom of the include stack.  */
+
+inline bool
+MAIN_FILE_P (const line_map_ordinary *ord_map)
+{
+  return ord_map->included_from == 0;
+}
+
+/* Encode and return a location_t from a column number. The
+   source line considered is the last source line used to call
+   linemap_line_start, i.e, the last source line which a location was
+   encoded from.  */
+extern location_t
+linemap_position_for_column (struct line_maps *, unsigned int);
+
+/* Encode and return a source location from a given line and
+   column.  */
+location_t
+linemap_position_for_line_and_column (line_maps *set,
+				      const line_map_ordinary *,
+				      linenum_type, unsigned int);
+
+/* Encode and return a location_t starting from location LOC and
+   shifting it by OFFSET columns.  This function does not support
+   virtual locations.  */
+location_t
+linemap_position_for_loc_and_offset (struct line_maps *set,
+				     location_t loc,
+				     unsigned int offset);
+
+/* Return the file this map is for.  */
+inline const char *
+LINEMAP_FILE (const line_map_ordinary *ord_map)
+{
+  return ord_map->to_file;
+}
+
+/* Return the line number this map started encoding location from.  */
+inline linenum_type
+LINEMAP_LINE (const line_map_ordinary *ord_map)
+{
+  return ord_map->to_line;
+}
+
+/* Return a positive value if map encodes locations from a system
+   header, 0 otherwise. Returns 1 if MAP encodes locations in a
+   system header and 2 if it encodes locations in a C system header
+   that therefore needs to be extern "C" protected in C++.  */
+inline unsigned char
+LINEMAP_SYSP (const line_map_ordinary *ord_map)
+{
+  return ord_map->sysp;
+}
+
+/* Return a positive value if PRE denotes the location of a token that
+   comes before the token of POST, 0 if PRE denotes the location of
+   the same token as the token for POST, and a negative value
+   otherwise.  */
+int linemap_compare_locations (struct line_maps *set,
+			       location_t   pre,
+			       location_t   post);
+
+/* Return TRUE if LOC_A denotes the location a token that comes
+   topogically before the token denoted by location LOC_B, or if they
+   are equal.  */
+inline bool
+linemap_location_before_p (struct line_maps *set,
+			   location_t loc_a,
+			   location_t loc_b)
+{
+  return linemap_compare_locations (set, loc_a, loc_b) >= 0;
+}
+
+typedef struct
+{
+  /* The name of the source file involved.  */
+  const char *file;
+
+  /* The line-location in the source file.  */
+  int line;
+
+  int column;
+
+  void *data;
+
+  /* In a system header?. */
+  bool sysp;
+} expanded_location;
+
+class range_label;
+
+/* A hint to diagnostic_show_locus on how to print a source range within a
+   rich_location.
+
+   Typically this is SHOW_RANGE_WITH_CARET for the 0th range, and
+   SHOW_RANGE_WITHOUT_CARET for subsequent ranges,
+   but the Fortran frontend uses SHOW_RANGE_WITH_CARET repeatedly for
+   printing things like:
+
+       x = x + y
+           1   2
+       Error: Shapes for operands at (1) and (2) are not conformable
+
+   where "1" and "2" are notionally carets.  */
+
+enum range_display_kind
+{
+  /* Show the pertinent source line(s), the caret, and underline(s).  */
+  SHOW_RANGE_WITH_CARET,
+
+  /* Show the pertinent source line(s) and underline(s), but don't
+     show the caret (just an underline).  */
+  SHOW_RANGE_WITHOUT_CARET,
+
+  /* Just show the source lines; don't show the range itself.
+     This is for use when displaying some line-insertion fix-it hints (for
+     showing the user context on the change, for when it doesn't make sense
+     to highlight the first column on the next line).  */
+  SHOW_LINES_WITHOUT_RANGE
+};
+
+/* A location within a rich_location: a caret&range, with
+   the caret potentially flagged for display, and an optional
+   label.  */
+
+struct location_range
+{
+  location_t m_loc;
+
+  enum range_display_kind m_range_display_kind;
+
+  /* If non-NULL, the label for this range.  */
+  const range_label *m_label;
+};
+
+/* A partially-embedded vec for use within rich_location for storing
+   ranges and fix-it hints.
+
+   Elements [0..NUM_EMBEDDED) are allocated within m_embed, after
+   that they are within the dynamically-allocated m_extra.
+
+   This allows for static allocation in the common case, whilst
+   supporting the rarer case of an arbitrary number of elements.
+
+   Dynamic allocation is not performed unless it's needed.  */
+
+template <typename T, int NUM_EMBEDDED>
+class semi_embedded_vec
+{
+ public:
+  semi_embedded_vec ();
+  ~semi_embedded_vec ();
+
+  unsigned int count () const { return m_num; }
+  T& operator[] (int idx);
+  const T& operator[] (int idx) const;
+
+  void push (const T&);
+  void truncate (int len);
+
+ private:
+  int m_num;
+  T m_embedded[NUM_EMBEDDED];
+  int m_alloc;
+  T *m_extra;
+};
+
+/* Constructor for semi_embedded_vec.  In particular, no dynamic allocation
+   is done.  */
+
+template <typename T, int NUM_EMBEDDED>
+semi_embedded_vec<T, NUM_EMBEDDED>::semi_embedded_vec ()
+: m_num (0), m_alloc (0), m_extra (NULL)
+{
+}
+
+/* semi_embedded_vec's dtor.  Release any dynamically-allocated memory.  */
+
+template <typename T, int NUM_EMBEDDED>
+semi_embedded_vec<T, NUM_EMBEDDED>::~semi_embedded_vec ()
+{
+  XDELETEVEC (m_extra);
+}
+
+/* Look up element IDX, mutably.  */
+
+template <typename T, int NUM_EMBEDDED>
+T&
+semi_embedded_vec<T, NUM_EMBEDDED>::operator[] (int idx)
+{
+  linemap_assert (idx < m_num);
+  if (idx < NUM_EMBEDDED)
+    return m_embedded[idx];
+  else
+    {
+      linemap_assert (m_extra != NULL);
+      return m_extra[idx - NUM_EMBEDDED];
+    }
+}
+
+/* Look up element IDX (const).  */
+
+template <typename T, int NUM_EMBEDDED>
+const T&
+semi_embedded_vec<T, NUM_EMBEDDED>::operator[] (int idx) const
+{
+  linemap_assert (idx < m_num);
+  if (idx < NUM_EMBEDDED)
+    return m_embedded[idx];
+  else
+    {
+      linemap_assert (m_extra != NULL);
+      return m_extra[idx - NUM_EMBEDDED];
+    }
+}
+
+/* Append VALUE to the end of the semi_embedded_vec.  */
+
+template <typename T, int NUM_EMBEDDED>
+void
+semi_embedded_vec<T, NUM_EMBEDDED>::push (const T& value)
+{
+  int idx = m_num++;
+  if (idx < NUM_EMBEDDED)
+    m_embedded[idx] = value;
+  else
+    {
+      /* Offset "idx" to be an index within m_extra.  */
+      idx -= NUM_EMBEDDED;
+      if (NULL == m_extra)
+	{
+	  linemap_assert (m_alloc == 0);
+	  m_alloc = 16;
+	  m_extra = XNEWVEC (T, m_alloc);
+	}
+      else if (idx >= m_alloc)
+	{
+	  linemap_assert (m_alloc > 0);
+	  m_alloc *= 2;
+	  m_extra = XRESIZEVEC (T, m_extra, m_alloc);
+	}
+      linemap_assert (m_extra);
+      linemap_assert (idx < m_alloc);
+      m_extra[idx] = value;
+    }
+}
+
+/* Truncate to length LEN.  No deallocation is performed.  */
+
+template <typename T, int NUM_EMBEDDED>
+void
+semi_embedded_vec<T, NUM_EMBEDDED>::truncate (int len)
+{
+  linemap_assert (len <= m_num);
+  m_num = len;
+}
+
+class fixit_hint;
+
+/* A "rich" source code location, for use when printing diagnostics.
+   A rich_location has one or more carets&ranges, where the carets
+   are optional.  These are referred to as "ranges" from here.
+   Typically the zeroth range has a caret; other ranges sometimes
+   have carets.
+
+   The "primary" location of a rich_location is the caret of range 0,
+   used for determining the line/column when printing diagnostic
+   text, such as:
+
+      some-file.c:3:1: error: ...etc...
+
+   Additional ranges may be added to help the user identify other
+   pertinent clauses in a diagnostic.
+
+   Ranges can (optionally) be given labels via class range_label.
+
+   rich_location instances are intended to be allocated on the stack
+   when generating diagnostics, and to be short-lived.
+
+   Examples of rich locations
+   --------------------------
+
+   Example A
+   *********
+      int i = "foo";
+              ^
+   This "rich" location is simply a single range (range 0), with
+   caret = start = finish at the given point.
+
+   Example B
+   *********
+      a = (foo && bar)
+          ~~~~~^~~~~~~
+   This rich location has a single range (range 0), with the caret
+   at the first "&", and the start/finish at the parentheses.
+   Compare with example C below.
+
+   Example C
+   *********
+      a = (foo && bar)
+           ~~~ ^~ ~~~
+   This rich location has three ranges:
+   - Range 0 has its caret and start location at the first "&" and
+     end at the second "&.
+   - Range 1 has its start and finish at the "f" and "o" of "foo";
+     the caret is not flagged for display, but is perhaps at the "f"
+     of "foo".
+   - Similarly, range 2 has its start and finish at the "b" and "r" of
+     "bar"; the caret is not flagged for display, but is perhaps at the
+     "b" of "bar".
+   Compare with example B above.
+
+   Example D (Fortran frontend)
+   ****************************
+       x = x + y
+           1   2
+   This rich location has range 0 at "1", and range 1 at "2".
+   Both are flagged for caret display.  Both ranges have start/finish
+   equal to their caret point.  The frontend overrides the diagnostic
+   context's default caret character for these ranges.
+
+   Example E (range labels)
+   ************************
+      printf ("arg0: %i  arg1: %s arg2: %i",
+                               ^~
+                               |
+                               const char *
+              100, 101, 102);
+                   ~~~
+                   |
+                   int
+   This rich location has two ranges:
+   - range 0 is at the "%s" with start = caret = "%" and finish at
+     the "s".  It has a range_label ("const char *").
+   - range 1 has start/finish covering the "101" and is not flagged for
+     caret printing.  The caret is at the start of "101", where its
+     range_label is printed ("int").
+
+   Fix-it hints
+   ------------
+
+   Rich locations can also contain "fix-it hints", giving suggestions
+   for the user on how to edit their code to fix a problem.  These
+   can be expressed as insertions, replacements, and removals of text.
+   The edits by default are relative to the zeroth range within the
+   rich_location, but optionally they can be expressed relative to
+   other locations (using various overloaded methods of the form
+   rich_location::add_fixit_*).
+
+   For example:
+
+   Example F: fix-it hint: insert_before
+   *************************************
+      ptr = arr[0];
+	    ^~~~~~
+	    &
+   This rich location has a single range (range 0) covering "arr[0]",
+   with the caret at the start.  The rich location has a single
+   insertion fix-it hint, inserted before range 0, added via
+     richloc.add_fixit_insert_before ("&");
+
+   Example G: multiple fix-it hints: insert_before and insert_after
+   ****************************************************************
+      #define FN(ARG0, ARG1, ARG2) fn(ARG0, ARG1, ARG2)
+				      ^~~~  ^~~~  ^~~~
+				      (   ) (   ) (   )
+   This rich location has three ranges, covering "arg0", "arg1",
+   and "arg2", all with caret-printing enabled.
+   The rich location has 6 insertion fix-it hints: each arg
+   has a pair of insertion fix-it hints, suggesting wrapping
+   them with parentheses: one a '(' inserted before,
+   the other a ')' inserted after, added via
+     richloc.add_fixit_insert_before (LOC, "(");
+   and
+     richloc.add_fixit_insert_after (LOC, ")");
+
+   Example H: fix-it hint: removal
+   *******************************
+     struct s {int i};;
+		      ^
+		      -
+   This rich location has a single range at the stray trailing
+   semicolon, along with a single removal fix-it hint, covering
+   the same range, added via:
+     richloc.add_fixit_remove ();
+
+   Example I: fix-it hint: replace
+   *******************************
+      c = s.colour;
+	    ^~~~~~
+	    color
+   This rich location has a single range (range 0) covering "colour",
+   and a single "replace" fix-it hint, covering the same range,
+   added via
+     richloc.add_fixit_replace ("color");
+
+   Example J: fix-it hint: line insertion
+   **************************************
+
+     3 | #include <stddef.h>
+     + |+#include <stdio.h>
+     4 | int the_next_line;
+
+   This rich location has a single range at line 4 column 1, marked
+   with SHOW_LINES_WITHOUT_RANGE (to avoid printing a meaningless caret
+   on the "i" of int).  It has a insertion fix-it hint of the string
+   "#include <stdio.h>\n".
+
+   Adding a fix-it hint can fail: for example, attempts to insert content
+   at the transition between two line maps may fail due to there being no
+   location_t value to express the new location.
+
+   Attempts to add a fix-it hint within a macro expansion will fail.
+
+   There is only limited support for newline characters in fix-it hints:
+   only hints with newlines which insert an entire new line are permitted,
+   inserting at the start of a line, and finishing with a newline
+   (with no interior newline characters).  Other attempts to add
+   fix-it hints containing newline characters will fail.
+   Similarly, attempts to delete or replace a range *affecting* multiple
+   lines will fail.
+
+   The rich_location API handles these failures gracefully, so that
+   diagnostics can attempt to add fix-it hints without each needing
+   extensive checking.
+
+   Fix-it hints within a rich_location are "atomic": if any hints can't
+   be applied, none of them will be (tracked by the m_seen_impossible_fixit
+   flag), and no fix-its hints will be displayed for that rich_location.
+   This implies that diagnostic messages need to be worded in such a way
+   that they make sense whether or not the fix-it hints are displayed,
+   or that richloc.seen_impossible_fixit_p () should be checked before
+   issuing the diagnostics.  */
+
+class rich_location
+{
+ public:
+  /* Constructors.  */
+
+  /* Constructing from a location.  */
+  rich_location (line_maps *set, location_t loc,
+		 const range_label *label = NULL);
+
+  /* Destructor.  */
+  ~rich_location ();
+
+  /* Accessors.  */
+  location_t get_loc () const { return get_loc (0); }
+  location_t get_loc (unsigned int idx) const;
+
+  void
+  add_range (location_t loc,
+	     enum range_display_kind range_display_kind
+	       = SHOW_RANGE_WITHOUT_CARET,
+	     const range_label *label = NULL);
+
+  void
+  set_range (unsigned int idx, location_t loc,
+	     enum range_display_kind range_display_kind);
+
+  unsigned int get_num_locations () const { return m_ranges.count (); }
+
+  const location_range *get_range (unsigned int idx) const;
+  location_range *get_range (unsigned int idx);
+
+  expanded_location get_expanded_location (unsigned int idx);
+
+  void
+  override_column (int column);
+
+  /* Fix-it hints.  */
+
+  /* Methods for adding insertion fix-it hints.  */
+
+  /* Suggest inserting NEW_CONTENT immediately before the primary
+     range's start.  */
+  void
+  add_fixit_insert_before (const char *new_content);
+
+  /* Suggest inserting NEW_CONTENT immediately before the start of WHERE.  */
+  void
+  add_fixit_insert_before (location_t where,
+			   const char *new_content);
+
+  /* Suggest inserting NEW_CONTENT immediately after the end of the primary
+     range.  */
+  void
+  add_fixit_insert_after (const char *new_content);
+
+  /* Suggest inserting NEW_CONTENT immediately after the end of WHERE.  */
+  void
+  add_fixit_insert_after (location_t where,
+			  const char *new_content);
+
+  /* Methods for adding removal fix-it hints.  */
+
+  /* Suggest removing the content covered by range 0.  */
+  void
+  add_fixit_remove ();
+
+  /* Suggest removing the content covered between the start and finish
+     of WHERE.  */
+  void
+  add_fixit_remove (location_t where);
+
+  /* Suggest removing the content covered by SRC_RANGE.  */
+  void
+  add_fixit_remove (source_range src_range);
+
+  /* Methods for adding "replace" fix-it hints.  */
+
+  /* Suggest replacing the content covered by range 0 with NEW_CONTENT.  */
+  void
+  add_fixit_replace (const char *new_content);
+
+  /* Suggest replacing the content between the start and finish of
+     WHERE with NEW_CONTENT.  */
+  void
+  add_fixit_replace (location_t where,
+		     const char *new_content);
+
+  /* Suggest replacing the content covered by SRC_RANGE with
+     NEW_CONTENT.  */
+  void
+  add_fixit_replace (source_range src_range,
+		     const char *new_content);
+
+  unsigned int get_num_fixit_hints () const { return m_fixit_hints.count (); }
+  fixit_hint *get_fixit_hint (int idx) const { return m_fixit_hints[idx]; }
+  fixit_hint *get_last_fixit_hint () const;
+  bool seen_impossible_fixit_p () const { return m_seen_impossible_fixit; }
+
+  /* Set this if the fix-it hints are not suitable to be
+     automatically applied.
+
+     For example, if you are suggesting more than one
+     mutually exclusive solution to a problem, then
+     it doesn't make sense to apply all of the solutions;
+     manual intervention is required.
+
+     If set, then the fix-it hints in the rich_location will
+     be printed, but will not be added to generated patches,
+     or affect the modified version of the file.  */
+  void fixits_cannot_be_auto_applied ()
+  {
+    m_fixits_cannot_be_auto_applied = true;
+  }
+
+  bool fixits_can_be_auto_applied_p () const
+  {
+    return !m_fixits_cannot_be_auto_applied;
+  }
+
+private:
+  bool reject_impossible_fixit (location_t where);
+  void stop_supporting_fixits ();
+  void maybe_add_fixit (location_t start,
+			location_t next_loc,
+			const char *new_content);
+
+public:
+  static const int STATICALLY_ALLOCATED_RANGES = 3;
+
+protected:
+  line_maps *m_line_table;
+  semi_embedded_vec <location_range, STATICALLY_ALLOCATED_RANGES> m_ranges;
+
+  int m_column_override;
+
+  bool m_have_expanded_location;
+  expanded_location m_expanded_location;
+
+  static const int MAX_STATIC_FIXIT_HINTS = 2;
+  semi_embedded_vec <fixit_hint *, MAX_STATIC_FIXIT_HINTS> m_fixit_hints;
+
+  bool m_seen_impossible_fixit;
+  bool m_fixits_cannot_be_auto_applied;
+};
+
+/* A struct for the result of range_label::get_text: a NUL-terminated buffer
+   of localized text, and a flag to determine if the caller should "free" the
+   buffer.  */
+
+struct label_text
+{
+  label_text ()
+  : m_buffer (NULL), m_caller_owned (false)
+  {}
+
+  label_text (char *buffer, bool caller_owned)
+  : m_buffer (buffer), m_caller_owned (caller_owned)
+  {}
+
+  void maybe_free ()
+  {
+    if (m_caller_owned)
+      free (m_buffer);
+  }
+
+  char *m_buffer;
+  bool m_caller_owned;
+};
+
+/* Abstract base class for labelling a range within a rich_location
+   (e.g. for labelling expressions with their type).
+
+   Generating the text could require non-trivial work, so this work
+   is delayed (via the "get_text" virtual function) until the diagnostic
+   printing code "knows" it needs it, thus avoiding doing it e.g. for
+   warnings that are filtered by command-line flags.  This virtual
+   function also isolates libcpp and the diagnostics subsystem from
+   the front-end and middle-end-specific code for generating the text
+   for the labels.
+
+   Like the rich_location instances they annotate, range_label instances
+   are intended to be allocated on the stack when generating diagnostics,
+   and to be short-lived.  */
+
+class range_label
+{
+ public:
+  virtual ~range_label () {}
+
+  /* Get localized text for the label.
+     The RANGE_IDX is provided, allowing for range_label instances to be
+     shared by multiple ranges if need be (the "flyweight" design pattern).  */
+  virtual label_text get_text (unsigned range_idx) const = 0;
+};
+
+/* A fix-it hint: a suggested insertion, replacement, or deletion of text.
+   We handle these three types of edit with one class, by representing
+   them as replacement of a half-open range:
+       [start, next_loc)
+   Insertions have start == next_loc: "replace" the empty string at the
+   start location with the new string.
+   Deletions are replacement with the empty string.
+
+   There is only limited support for newline characters in fix-it hints
+   as noted above in the comment for class rich_location.
+   A fixit_hint instance can have at most one newline character; if
+   present, the newline character must be the final character of
+   the content (preventing e.g. fix-its that split a pre-existing line).  */
+
+class fixit_hint
+{
+ public:
+  fixit_hint (location_t start,
+	      location_t next_loc,
+	      const char *new_content);
+  ~fixit_hint () { free (m_bytes); }
+
+  bool affects_line_p (const char *file, int line) const;
+  location_t get_start_loc () const { return m_start; }
+  location_t get_next_loc () const { return m_next_loc; }
+  bool maybe_append (location_t start,
+		     location_t next_loc,
+		     const char *new_content);
+
+  const char *get_string () const { return m_bytes; }
+  size_t get_length () const { return m_len; }
+
+  bool insertion_p () const { return m_start == m_next_loc; }
+
+  bool ends_with_newline_p () const;
+
+ private:
+  /* We don't use source_range here since, unlike most places,
+     this is a half-open/half-closed range:
+       [start, next_loc)
+     so that we can support insertion via start == next_loc.  */
+  location_t m_start;
+  location_t m_next_loc;
+  char *m_bytes;
+  size_t m_len;
+};
+
+
+/* This is enum is used by the function linemap_resolve_location
+   below.  The meaning of the values is explained in the comment of
+   that function.  */
+enum location_resolution_kind
+{
+  LRK_MACRO_EXPANSION_POINT,
+  LRK_SPELLING_LOCATION,
+  LRK_MACRO_DEFINITION_LOCATION
+};
+
+/* Resolve a virtual location into either a spelling location, an
+   expansion point location or a token argument replacement point
+   location.  Return the map that encodes the virtual location as well
+   as the resolved location.
+
+   If LOC is *NOT* the location of a token resulting from the
+   expansion of a macro, then the parameter LRK (which stands for
+   Location Resolution Kind) is ignored and the resulting location
+   just equals the one given in argument.
+
+   Now if LOC *IS* the location of a token resulting from the
+   expansion of a macro, this is what happens.
+
+   * If LRK is set to LRK_MACRO_EXPANSION_POINT
+   -------------------------------
+
+   The virtual location is resolved to the first macro expansion point
+   that led to this macro expansion.
+
+   * If LRK is set to LRK_SPELLING_LOCATION
+   -------------------------------------
+
+   The virtual location is resolved to the locus where the token has
+   been spelled in the source.   This can follow through all the macro
+   expansions that led to the token.
+
+   * If LRK is set to LRK_MACRO_DEFINITION_LOCATION
+   --------------------------------------
+
+   The virtual location is resolved to the locus of the token in the
+   context of the macro definition.
+
+   If LOC is the locus of a token that is an argument of a
+   function-like macro [replacing a parameter in the replacement list
+   of the macro] the virtual location is resolved to the locus of the
+   parameter that is replaced, in the context of the definition of the
+   macro.
+
+   If LOC is the locus of a token that is not an argument of a
+   function-like macro, then the function behaves as if LRK was set to
+   LRK_SPELLING_LOCATION.
+
+   If LOC_MAP is not NULL, *LOC_MAP is set to the map encoding the
+   returned location.  Note that if the returned location wasn't originally
+   encoded by a map, the *MAP is set to NULL.  This can happen if LOC
+   resolves to a location reserved for the client code, like
+   UNKNOWN_LOCATION or BUILTINS_LOCATION in GCC.  */
+
+location_t linemap_resolve_location (struct line_maps *,
+				     location_t loc,
+				     enum location_resolution_kind lrk,
+				     const line_map_ordinary **loc_map);
+
+/* Suppose that LOC is the virtual location of a token coming from the
+   expansion of a macro M.  This function then steps up to get the
+   location L of the point where M got expanded.  If L is a spelling
+   location inside a macro expansion M', then this function returns
+   the point where M' was expanded.  LOC_MAP is an output parameter.
+   When non-NULL, *LOC_MAP is set to the map of the returned
+   location.  */
+location_t linemap_unwind_toward_expansion (struct line_maps *,
+					    location_t loc,
+					    const struct line_map **loc_map);
+
+/* If LOC is the virtual location of a token coming from the expansion
+   of a macro M and if its spelling location is reserved (e.g, a
+   location for a built-in token), then this function unwinds (using
+   linemap_unwind_toward_expansion) the location until a location that
+   is not reserved and is not in a system header is reached.  In other
+   words, this unwinds the reserved location until a location that is
+   in real source code is reached.
+
+   Otherwise, if the spelling location for LOC is not reserved or if
+   LOC doesn't come from the expansion of a macro, the function
+   returns LOC as is and *MAP is not touched.
+
+   *MAP is set to the map of the returned location if the later is
+   different from LOC.  */
+location_t linemap_unwind_to_first_non_reserved_loc (struct line_maps *,
+						     location_t loc,
+						     const struct line_map **map);
+
+/* Expand source code location LOC and return a user readable source
+   code location.  LOC must be a spelling (non-virtual) location.  If
+   it's a location < RESERVED_LOCATION_COUNT a zeroed expanded source
+   location is returned.  */
+expanded_location linemap_expand_location (struct line_maps *,
+					   const struct line_map *,
+					   location_t loc);
+
+/* Statistics about maps allocation and usage as returned by
+   linemap_get_statistics.  */
+struct linemap_stats
+{
+  long num_ordinary_maps_allocated;
+  long num_ordinary_maps_used;
+  long ordinary_maps_allocated_size;
+  long ordinary_maps_used_size;
+  long num_expanded_macros;
+  long num_macro_tokens;
+  long num_macro_maps_used;
+  long macro_maps_allocated_size;
+  long macro_maps_used_size;
+  long macro_maps_locations_size;
+  long duplicated_macro_maps_locations_size;
+  long adhoc_table_size;
+  long adhoc_table_entries_used;
+};
+
+/* Return the highest location emitted for a given file for which
+   there is a line map in SET.  FILE_NAME is the file name to
+   consider.  If the function returns TRUE, *LOC is set to the highest
+   location emitted for that file.  */
+bool linemap_get_file_highest_location (struct line_maps * set,
+					const char *file_name,
+					location_t *loc);
+
+/* Compute and return statistics about the memory consumption of some
+   parts of the line table SET.  */
+void linemap_get_statistics (struct line_maps *, struct linemap_stats *);
+
+/* Dump debugging information about source location LOC into the file
+   stream STREAM. SET is the line map set LOC comes from.  */
+void linemap_dump_location (struct line_maps *, location_t, FILE *);
+
+/* Dump line map at index IX in line table SET to STREAM.  If STREAM
+   is NULL, use stderr.  IS_MACRO is true if the caller wants to
+   dump a macro map, false otherwise.  */
+void linemap_dump (FILE *, struct line_maps *, unsigned, bool);
+
+/* Dump line table SET to STREAM.  If STREAM is NULL, stderr is used.
+   NUM_ORDINARY specifies how many ordinary maps to dump.  NUM_MACRO
+   specifies how many macro maps to dump.  */
+void line_table_dump (FILE *, struct line_maps *, unsigned int, unsigned int);
+
+/* An enum for distinguishing the various parts within a location_t.  */
+
+enum location_aspect
+{
+  LOCATION_ASPECT_CARET,
+  LOCATION_ASPECT_START,
+  LOCATION_ASPECT_FINISH
+};
+
+/* The rich_location class requires a way to expand location_t instances.
+   We would directly use expand_location_to_spelling_point, which is
+   implemented in gcc/input.c, but we also need to use it for rich_location
+   within genmatch.c.
+   Hence we require client code of libcpp to implement the following
+   symbol.  */
+extern expanded_location
+linemap_client_expand_location_to_spelling_point (location_t,
+						  enum location_aspect);
+
+#endif /* !LIBCPP_LINE_MAP_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/loop-unroll.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/loop-unroll.h
new file mode 100644
index 0000000..f851ad4
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/loop-unroll.h
@@ -0,0 +1,27 @@
+/* Loop unrolling header file.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_LOOP_UNROLL_H
+#define GCC_LOOP_UNROLL_H
+
+extern void unroll_loops (int);
+extern basic_block split_edge_and_insert (edge, rtx_insn *);
+
+
+#endif /* GCC_LOOP_UNROLL_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/lower-subreg.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/lower-subreg.h
new file mode 100644
index 0000000..f05ef66
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/lower-subreg.h
@@ -0,0 +1,60 @@
+/* Target-dependent costs for lower-subreg.c.
+   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef LOWER_SUBREG_H
+#define LOWER_SUBREG_H 1
+
+/* Information about whether, and where, lower-subreg should be applied.  */
+struct lower_subreg_choices {
+  /* A boolean vector for move splitting that is indexed by mode and is
+     true for each mode that is to have its copies split.  */
+  bool move_modes_to_split[MAX_MACHINE_MODE];
+
+  /* True if zero-extensions from word_mode to twice_word_mode should
+     be split.  */
+  bool splitting_zext;
+
+  /* Index X is true if twice_word_mode shifts by X + BITS_PER_WORD
+     should be split.  */
+  bool splitting_ashift[MAX_BITS_PER_WORD];
+  bool splitting_lshiftrt[MAX_BITS_PER_WORD];
+  bool splitting_ashiftrt[MAX_BITS_PER_WORD];
+
+  /* True if there is at least one mode that is worth splitting.  */
+  bool something_to_do;
+};
+
+/* Target-specific information for the subreg lowering pass.  */
+struct target_lower_subreg {
+  /* An integer mode that is twice as wide as word_mode.  */
+  scalar_int_mode_pod x_twice_word_mode;
+
+  /* What we have decided to do when optimizing for size (index 0)
+     and speed (index 1).  */
+  struct lower_subreg_choices x_choices[2];
+};
+
+extern struct target_lower_subreg default_target_lower_subreg;
+#if SWITCHABLE_TARGET
+extern struct target_lower_subreg *this_target_lower_subreg;
+#else
+#define this_target_lower_subreg (&default_target_lower_subreg)
+#endif
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/lra-int.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/lra-int.h
new file mode 100644
index 0000000..d0a8fac
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/lra-int.h
@@ -0,0 +1,535 @@
+/* Local Register Allocator (LRA) intercommunication header file.
+   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Contributed by Vladimir Makarov <vmakarov@redhat.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.	If not see
+<http://www.gnu.org/licenses/>.	 */
+
+#ifndef GCC_LRA_INT_H
+#define GCC_LRA_INT_H
+
+#define lra_assert(c) gcc_checking_assert (c)
+
+/* The parameter used to prevent infinite reloading for an insn.  Each
+   insn operands might require a reload and, if it is a memory, its
+   base and index registers might require a reload too.	 */
+#define LRA_MAX_INSN_RELOADS (MAX_RECOG_OPERANDS * 3)
+
+typedef struct lra_live_range *lra_live_range_t;
+
+/* The structure describes program points where a given pseudo lives.
+   The live ranges can be used to find conflicts with other pseudos.
+   If the live ranges of two pseudos are intersected, the pseudos are
+   in conflict.	 */
+struct lra_live_range
+{
+  /* Pseudo regno whose live range is described by given
+     structure.	 */
+  int regno;
+  /* Program point range.  */
+  int start, finish;
+  /* Next structure describing program points where the pseudo
+     lives.  */
+  lra_live_range_t next;
+  /* Pointer to structures with the same start.	 */
+  lra_live_range_t start_next;
+};
+
+typedef struct lra_copy *lra_copy_t;
+
+/* Copy between pseudos which affects assigning hard registers.	 */
+struct lra_copy
+{
+  /* True if regno1 is the destination of the copy.  */
+  bool regno1_dest_p;
+  /* Execution frequency of the copy.  */
+  int freq;
+  /* Pseudos connected by the copy.  REGNO1 < REGNO2.  */
+  int regno1, regno2;
+  /* Next copy with correspondingly REGNO1 and REGNO2.	*/
+  lra_copy_t regno1_next, regno2_next;
+};
+
+/* Common info about a register (pseudo or hard register).  */
+struct lra_reg
+{
+  /* Bitmap of UIDs of insns (including debug insns) referring the
+     reg.  */
+  bitmap_head insn_bitmap;
+  /* The following fields are defined only for pseudos.	 */
+  /* Hard registers with which the pseudo conflicts.  */
+  HARD_REG_SET conflict_hard_regs;
+  /* Call used registers with which the pseudo conflicts, taking into account
+     the registers used by functions called from calls which cross the
+     pseudo.  */
+  HARD_REG_SET actual_call_used_reg_set;
+  /* We assign hard registers to reload pseudos which can occur in few
+     places.  So two hard register preferences are enough for them.
+     The following fields define the preferred hard registers.	If
+     there are no such hard registers the first field value is
+     negative.	If there is only one preferred hard register, the 2nd
+     field is negative.	 */
+  int preferred_hard_regno1, preferred_hard_regno2;
+  /* Profits to use the corresponding preferred hard registers.	 If
+     the both hard registers defined, the first hard register has not
+     less profit than the second one.  */
+  int preferred_hard_regno_profit1, preferred_hard_regno_profit2;
+#ifdef STACK_REGS
+  /* True if the pseudo should not be assigned to a stack register.  */
+  bool no_stack_p;
+#endif
+  /* Number of references and execution frequencies of the register in
+     *non-debug* insns.	 */
+  int nrefs, freq;
+  int last_reload;
+  /* rtx used to undo the inheritance.  It can be non-null only
+     between subsequent inheritance and undo inheritance passes.  */
+  rtx restore_rtx;
+  /* Value holding by register.	 If the pseudos have the same value
+     they do not conflict.  */
+  int val;
+  /* Offset from relative eliminate register to pesudo reg.  */
+  poly_int64 offset;
+  /* Call instruction, if any, that may affect this psuedo reg.  */
+  rtx_insn *call_insn;
+  /* These members are set up in lra-lives.c and updated in
+     lra-coalesce.c.  */
+  /* The biggest size mode in which each pseudo reg is referred in
+     whole function (possibly via subreg).  */
+  machine_mode biggest_mode;
+  /* Live ranges of the pseudo.	 */
+  lra_live_range_t live_ranges;
+  /* This member is set up in lra-lives.c for subsequent
+     assignments.  */
+  lra_copy_t copies;
+};
+
+/* References to the common info about each register.  */
+extern struct lra_reg *lra_reg_info;
+
+extern HARD_REG_SET hard_regs_spilled_into;
+
+/* Static info about each insn operand (common for all insns with the
+   same ICODE).	 Warning: if the structure definition is changed, the
+   initializer for debug_operand_data in lra.c should be changed
+   too.	 */
+struct lra_operand_data
+{
+  /* The machine description constraint string of the operand.	*/
+  const char *constraint;
+  /* Alternatives for which early_clobber can be true.  */
+  alternative_mask early_clobber_alts;
+  /* It is taken only from machine description (which is different
+     from recog_data.operand_mode) and can be of VOIDmode.  */
+  ENUM_BITFIELD(machine_mode) mode : 16;
+  /* The type of the operand (in/out/inout).  */
+  ENUM_BITFIELD (op_type) type : 8;
+  /* Through if accessed through STRICT_LOW.  */
+  unsigned int strict_low : 1;
+  /* True if the operand is an operator.  */
+  unsigned int is_operator : 1;
+  /* True if there is an early clobber alternative for this operand.
+     This field is set up every time when corresponding
+     operand_alternative in lra_static_insn_data is set up.  */
+  unsigned int early_clobber : 1;
+  /* True if the operand is an address.  */
+  unsigned int is_address : 1;
+};
+
+/* Info about register occurrence in an insn.  */
+struct lra_insn_reg
+{
+  /* Alternatives for which early_clobber can be true.  */
+  alternative_mask early_clobber_alts;
+  /* The biggest mode through which the insn refers to the register
+     occurrence (remember the register can be accessed through a
+     subreg in the insn).  */
+  ENUM_BITFIELD(machine_mode) biggest_mode : 16;
+  /* The type of the corresponding operand which is the register.  */
+  ENUM_BITFIELD (op_type) type : 8;
+  /* True if the reg is accessed through a subreg and the subreg is
+     just a part of the register.  */
+  unsigned int subreg_p : 1;
+  /* True if there is an early clobber alternative for this
+     operand.  */
+  unsigned int early_clobber : 1;
+  /* True if the reg is clobber highed by the operand.  */
+  unsigned int clobber_high : 1;
+  /* The corresponding regno of the register.  */
+  int regno;
+  /* Next reg info of the same insn.  */
+  struct lra_insn_reg *next;
+};
+
+/* Static part (common info for insns with the same ICODE) of LRA
+   internal insn info. It exists in at most one exemplar for each
+   non-negative ICODE. There is only one exception. Each asm insn has
+   own structure.  Warning: if the structure definition is changed,
+   the initializer for debug_insn_static_data in lra.c should be
+   changed too.  */
+struct lra_static_insn_data
+{
+  /* Static info about each insn operand.  */
+  struct lra_operand_data *operand;
+  /* Each duplication refers to the number of the corresponding
+     operand which is duplicated.  */
+  int *dup_num;
+  /* The number of an operand marked as commutative, -1 otherwise.  */
+  int commutative;
+  /* Number of operands, duplications, and alternatives of the
+     insn.  */
+  char n_operands;
+  char n_dups;
+  char n_alternatives;
+  /* Insns in machine description (or clobbers in asm) may contain
+     explicit hard regs which are not operands.	 The following list
+     describes such hard registers.  */
+  struct lra_insn_reg *hard_regs;
+  /* Array [n_alternatives][n_operand] of static constraint info for
+     given operand in given alternative.  This info can be changed if
+     the target reg info is changed.  */
+  const struct operand_alternative *operand_alternative;
+};
+
+/* Negative insn alternative numbers used for special cases.  */
+#define LRA_UNKNOWN_ALT -1
+#define LRA_NON_CLOBBERED_ALT -2
+
+/* LRA internal info about an insn (LRA internal insn
+   representation).  */
+struct lra_insn_recog_data
+{
+  /* The insn code.  */
+  int icode;
+  /* The alternative should be used for the insn, LRA_UNKNOWN_ALT if
+     unknown, or we should assume any alternative, or the insn is a
+     debug insn.  LRA_NON_CLOBBERED_ALT means ignoring any earlier
+     clobbers for the insn.  */
+  int used_insn_alternative;
+  /* SP offset before the insn relative to one at the func start.  */
+  poly_int64 sp_offset;
+  /* The insn itself.  */
+  rtx_insn *insn;
+  /* Common data for insns with the same ICODE.  Asm insns (their
+     ICODE is negative) do not share such structures.  */
+  struct lra_static_insn_data *insn_static_data;
+  /* Two arrays of size correspondingly equal to the operand and the
+     duplication numbers: */
+  rtx **operand_loc; /* The operand locations, NULL if no operands.  */
+  rtx **dup_loc; /* The dup locations, NULL if no dups.	 */
+  /* Number of hard registers implicitly used/clobbered in given call
+     insn.  The value can be NULL or points to array of the hard
+     register numbers ending with a negative value.  To differ
+     clobbered and used hard regs, clobbered hard regs are incremented
+     by FIRST_PSEUDO_REGISTER.  */
+  int *arg_hard_regs;
+  /* Cached value of get_preferred_alternatives.  */
+  alternative_mask preferred_alternatives;
+  /* The following member value is always NULL for a debug insn.  */
+  struct lra_insn_reg *regs;
+};
+
+typedef struct lra_insn_recog_data *lra_insn_recog_data_t;
+
+/* Whether the clobber is used temporary in LRA.  */
+#define LRA_TEMP_CLOBBER_P(x) \
+  (RTL_FLAG_CHECK1 ("TEMP_CLOBBER_P", (x), CLOBBER)->unchanging)
+
+/* Cost factor for each additional reload and maximal cost reject for
+   insn reloads.  One might ask about such strange numbers.  Their
+   values occurred historically from former reload pass.  */
+#define LRA_LOSER_COST_FACTOR 6
+#define LRA_MAX_REJECT 600
+
+/* Maximum allowed number of assignment pass iterations after the
+   latest spill pass when any former reload pseudo was spilled.  It is
+   for preventing LRA cycling in a bug case.  */
+#define LRA_MAX_ASSIGNMENT_ITERATION_NUMBER 30
+
+/* The maximal number of inheritance/split passes in LRA.  It should
+   be more 1 in order to perform caller saves transformations and much
+   less MAX_CONSTRAINT_ITERATION_NUMBER to prevent LRA to do as many
+   as permitted constraint passes in some complicated cases.  The
+   first inheritance/split pass has a biggest impact on generated code
+   quality.  Each subsequent affects generated code in less degree.
+   For example, the 3rd pass does not change generated SPEC2000 code
+   at all on x86-64.  */
+#define LRA_MAX_INHERITANCE_PASSES 2
+
+#if LRA_MAX_INHERITANCE_PASSES <= 0 \
+    || LRA_MAX_INHERITANCE_PASSES >= LRA_MAX_ASSIGNMENT_ITERATION_NUMBER - 8
+#error wrong LRA_MAX_INHERITANCE_PASSES value
+#endif
+
+/* Analogous macro to the above one but for rematerialization.  */
+#define LRA_MAX_REMATERIALIZATION_PASSES 2
+
+#if LRA_MAX_REMATERIALIZATION_PASSES <= 0 \
+    || LRA_MAX_REMATERIALIZATION_PASSES >= LRA_MAX_ASSIGNMENT_ITERATION_NUMBER - 8
+#error wrong LRA_MAX_REMATERIALIZATION_PASSES value
+#endif
+
+/* lra.c: */
+
+extern FILE *lra_dump_file;
+
+extern bool lra_asm_error_p;
+extern bool lra_reg_spill_p;
+
+extern HARD_REG_SET lra_no_alloc_regs;
+
+extern int lra_insn_recog_data_len;
+extern lra_insn_recog_data_t *lra_insn_recog_data;
+
+extern int lra_curr_reload_num;
+
+extern void lra_dump_bitmap_with_title (const char *, bitmap, int);
+extern hashval_t lra_rtx_hash (rtx x);
+extern void lra_push_insn (rtx_insn *);
+extern void lra_push_insn_by_uid (unsigned int);
+extern void lra_push_insn_and_update_insn_regno_info (rtx_insn *);
+extern rtx_insn *lra_pop_insn (void);
+extern unsigned int lra_insn_stack_length (void);
+
+extern rtx lra_create_new_reg_with_unique_value (machine_mode, rtx,
+						 enum reg_class, const char *);
+extern void lra_set_regno_unique_value (int);
+extern void lra_invalidate_insn_data (rtx_insn *);
+extern void lra_set_insn_deleted (rtx_insn *);
+extern void lra_delete_dead_insn (rtx_insn *);
+extern void lra_emit_add (rtx, rtx, rtx);
+extern void lra_emit_move (rtx, rtx);
+extern void lra_update_dups (lra_insn_recog_data_t, signed char *);
+
+extern void lra_process_new_insns (rtx_insn *, rtx_insn *, rtx_insn *,
+				   const char *);
+
+extern bool lra_substitute_pseudo (rtx *, int, rtx, bool, bool);
+extern bool lra_substitute_pseudo_within_insn (rtx_insn *, int, rtx, bool);
+
+extern lra_insn_recog_data_t lra_set_insn_recog_data (rtx_insn *);
+extern lra_insn_recog_data_t lra_update_insn_recog_data (rtx_insn *);
+extern void lra_set_used_insn_alternative (rtx_insn *, int);
+extern void lra_set_used_insn_alternative_by_uid (int, int);
+
+extern void lra_invalidate_insn_regno_info (rtx_insn *);
+extern void lra_update_insn_regno_info (rtx_insn *);
+extern struct lra_insn_reg *lra_get_insn_regs (int);
+
+extern void lra_free_copies (void);
+extern void lra_create_copy (int, int, int);
+extern lra_copy_t lra_get_copy (int);
+extern bool lra_former_scratch_p (int);
+extern bool lra_former_scratch_operand_p (rtx_insn *, int);
+extern void lra_register_new_scratch_op (rtx_insn *, int, int);
+
+extern int lra_new_regno_start;
+extern int lra_constraint_new_regno_start;
+extern int lra_bad_spill_regno_start;
+extern bitmap_head lra_inheritance_pseudos;
+extern bitmap_head lra_split_regs;
+extern bitmap_head lra_subreg_reload_pseudos;
+extern bitmap_head lra_optional_reload_pseudos;
+
+/* lra-constraints.c: */
+
+extern void lra_init_equiv (void);
+extern int lra_constraint_offset (int, machine_mode);
+
+extern int lra_constraint_iter;
+extern bool lra_risky_transformations_p;
+extern int lra_inheritance_iter;
+extern int lra_undo_inheritance_iter;
+extern bool lra_constrain_insn (rtx_insn *);
+extern bool lra_constraints (bool);
+extern void lra_constraints_init (void);
+extern void lra_constraints_finish (void);
+extern bool spill_hard_reg_in_range (int, enum reg_class, rtx_insn *, rtx_insn *);
+extern void lra_inheritance (void);
+extern bool lra_undo_inheritance (void);
+
+/* lra-lives.c: */
+
+extern int lra_live_max_point;
+extern int *lra_point_freq;
+
+extern int lra_hard_reg_usage[FIRST_PSEUDO_REGISTER];
+
+extern int lra_live_range_iter;
+extern void lra_create_live_ranges (bool, bool);
+extern lra_live_range_t lra_copy_live_range_list (lra_live_range_t);
+extern lra_live_range_t lra_merge_live_ranges (lra_live_range_t,
+					       lra_live_range_t);
+extern bool lra_intersected_live_ranges_p (lra_live_range_t,
+					   lra_live_range_t);
+extern void lra_print_live_range_list (FILE *, lra_live_range_t);
+extern void debug (lra_live_range &ref);
+extern void debug (lra_live_range *ptr);
+extern void lra_debug_live_range_list (lra_live_range_t);
+extern void lra_debug_pseudo_live_ranges (int);
+extern void lra_debug_live_ranges (void);
+extern void lra_clear_live_ranges (void);
+extern void lra_live_ranges_init (void);
+extern void lra_live_ranges_finish (void);
+extern void lra_setup_reload_pseudo_preferenced_hard_reg (int, int, int);
+
+/* lra-assigns.c: */
+
+extern int lra_assignment_iter;
+extern int lra_assignment_iter_after_spill;
+extern void lra_setup_reg_renumber (int, int, bool);
+extern bool lra_assign (bool &);
+extern bool lra_split_hard_reg_for (void);
+
+/* lra-coalesce.c: */
+
+extern int lra_coalesce_iter;
+extern bool lra_coalesce (void);
+
+/* lra-spills.c:  */
+
+extern bool lra_need_for_spills_p (void);
+extern void lra_spill (void);
+extern void lra_final_code_change (void);
+
+/* lra-remat.c:  */
+
+extern int lra_rematerialization_iter;
+extern bool lra_remat (void);
+
+/* lra-elimination.c: */
+
+extern void lra_debug_elim_table (void);
+extern int lra_get_elimination_hard_regno (int);
+extern rtx lra_eliminate_regs_1 (rtx_insn *, rtx, machine_mode,
+				 bool, bool, poly_int64, bool);
+extern void eliminate_regs_in_insn (rtx_insn *insn, bool, bool, poly_int64);
+extern void lra_eliminate (bool, bool);
+
+extern void lra_eliminate_reg_if_possible (rtx *);
+
+
+
+/* Return the hard register which given pseudo REGNO assigned to.
+   Negative value means that the register got memory or we don't know
+   allocation yet.  */
+static inline int
+lra_get_regno_hard_regno (int regno)
+{
+  resize_reg_info ();
+  return reg_renumber[regno];
+}
+
+/* Change class of pseudo REGNO to NEW_CLASS.  Print info about it
+   using TITLE.  Output a new line if NL_P.  */
+static void inline
+lra_change_class (int regno, enum reg_class new_class,
+		  const char *title, bool nl_p)
+{
+  lra_assert (regno >= FIRST_PSEUDO_REGISTER);
+  if (lra_dump_file != NULL)
+    fprintf (lra_dump_file, "%s class %s for r%d",
+	     title, reg_class_names[new_class], regno);
+  setup_reg_classes (regno, new_class, NO_REGS, new_class);
+  if (lra_dump_file != NULL && nl_p)
+    fprintf (lra_dump_file, "\n");
+}
+
+/* Update insn operands which are duplication of NOP operand.  The
+   insn is represented by its LRA internal representation ID.  */
+static inline void
+lra_update_dup (lra_insn_recog_data_t id, int nop)
+{
+  int i;
+  struct lra_static_insn_data *static_id = id->insn_static_data;
+
+  for (i = 0; i < static_id->n_dups; i++)
+    if (static_id->dup_num[i] == nop)
+      *id->dup_loc[i] = *id->operand_loc[nop];
+}
+
+/* Process operator duplications in insn with ID.  We do it after the
+   operands processing.	 Generally speaking, we could do this probably
+   simultaneously with operands processing because a common practice
+   is to enumerate the operators after their operands.	*/
+static inline void
+lra_update_operator_dups (lra_insn_recog_data_t id)
+{
+  int i;
+  struct lra_static_insn_data *static_id = id->insn_static_data;
+
+  for (i = 0; i < static_id->n_dups; i++)
+    {
+      int ndup = static_id->dup_num[i];
+
+      if (static_id->operand[ndup].is_operator)
+	*id->dup_loc[i] = *id->operand_loc[ndup];
+    }
+}
+
+/* Return info about INSN.  Set up the info if it is not done yet.  */
+static inline lra_insn_recog_data_t
+lra_get_insn_recog_data (rtx_insn *insn)
+{
+  lra_insn_recog_data_t data;
+  unsigned int uid = INSN_UID (insn);
+
+  if (lra_insn_recog_data_len > (int) uid
+      && (data = lra_insn_recog_data[uid]) != NULL)
+    {
+      /* Check that we did not change insn without updating the insn
+	 info.	*/
+      lra_assert (data->insn == insn
+		  && (INSN_CODE (insn) < 0
+		      || data->icode == INSN_CODE (insn)));
+      return data;
+    }
+  return lra_set_insn_recog_data (insn);
+}
+
+/* Update offset from pseudos with VAL by INCR.  */
+static inline void
+lra_update_reg_val_offset (int val, poly_int64 incr)
+{
+  int i;
+
+  for (i = FIRST_PSEUDO_REGISTER; i < max_reg_num (); i++)
+    {
+      if (lra_reg_info[i].val == val)
+        lra_reg_info[i].offset += incr;
+    }
+}
+
+/* Return true if register content is equal to VAL with OFFSET.  */
+static inline bool
+lra_reg_val_equal_p (int regno, int val, poly_int64 offset)
+{
+  if (lra_reg_info[regno].val == val
+      && known_eq (lra_reg_info[regno].offset, offset))
+    return true;
+
+  return false;
+}
+
+/* Assign value of register FROM to TO.  */
+static inline void
+lra_assign_reg_val (int from, int to)
+{
+  lra_reg_info[to].val = lra_reg_info[from].val;
+  lra_reg_info[to].offset = lra_reg_info[from].offset;
+}
+
+#endif /* GCC_LRA_INT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/lra.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/lra.h
new file mode 100644
index 0000000..76b3dcf
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/lra.h
@@ -0,0 +1,44 @@
+/* Communication between the Local Register Allocator (LRA) and
+   the rest of the compiler.
+   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Contributed by Vladimir Makarov <vmakarov@redhat.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.	If not see
+<http://www.gnu.org/licenses/>.	 */
+
+#ifndef GCC_LRA_H
+#define GCC_LRA_H
+
+extern bool lra_simple_p;
+
+/* Return the allocno reg class of REGNO.  If it is a reload pseudo,
+   the pseudo should finally get hard register of the allocno
+   class.  */
+static inline enum reg_class
+lra_get_allocno_class (int regno)
+{
+  resize_reg_info ();
+  return reg_allocno_class (regno);
+}
+
+extern rtx lra_create_new_reg (machine_mode, rtx, enum reg_class,
+			       const char *);
+extern rtx lra_eliminate_regs (rtx, machine_mode, rtx);
+extern void lra (FILE *);
+extern void lra_init_once (void);
+extern void lra_finish_once (void);
+
+#endif /* GCC_LRA_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/lto-compress.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/lto-compress.h
new file mode 100644
index 0000000..87f53f7
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/lto-compress.h
@@ -0,0 +1,42 @@
+/* LTO IL compression streams.
+
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Contributed by Simon Baldwin <simonb@google.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_LTO_COMPRESS_H
+#define GCC_LTO_COMPRESS_H
+
+struct lto_compression_stream;
+
+/* In lto-compress.c.  */
+extern struct lto_compression_stream
+  *lto_start_compression (void (*callback) (const char *, unsigned, void *),
+			  void *opaque);
+extern void lto_compress_block (struct lto_compression_stream *stream,
+				const char *base, size_t num_chars);
+extern void lto_end_compression (struct lto_compression_stream *stream);
+
+extern struct lto_compression_stream
+  *lto_start_uncompression (void (*callback) (const char *, unsigned, void *),
+			    void *opaque);
+extern void lto_uncompress_block (struct lto_compression_stream *stream,
+				  const char *base, size_t num_chars);
+extern void lto_end_uncompression (struct lto_compression_stream *stream);
+
+#endif /* GCC_LTO_COMPRESS_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/lto-section-names.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/lto-section-names.h
new file mode 100644
index 0000000..07f0f6b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/lto-section-names.h
@@ -0,0 +1,41 @@
+/* Definitions for LTO section names.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_LTO_SECTION_NAMES_H
+#define GCC_LTO_SECTION_NAMES_H
+
+/* The string that is the prefix on the section names we make for lto.
+   For decls the DECL_ASSEMBLER_NAME is appended to make the section
+   name for the functions and static_initializers.  For other types of
+   sections a '.' and the section type are appended.  */
+#define LTO_SECTION_NAME_PREFIX ".gnu.lto_"
+#define OFFLOAD_SECTION_NAME_PREFIX ".gnu.offload_lto_"
+
+/* Can be either OFFLOAD_SECTION_NAME_PREFIX when we stream IR for offload
+   compiler, or LTO_SECTION_NAME_PREFIX for LTO case.  */
+extern const char *section_name_prefix;
+
+/* Segment name for LTO sections.  This is only used for Mach-O.  */
+
+#define LTO_SEGMENT_NAME "__GNU_LTO"
+
+#define OFFLOAD_VAR_TABLE_SECTION_NAME ".gnu.offload_vars"
+#define OFFLOAD_FUNC_TABLE_SECTION_NAME ".gnu.offload_funcs"
+
+#endif /* GCC_LTO_SECTION_NAMES_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/lto-streamer.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/lto-streamer.h
new file mode 100644
index 0000000..5cd2a60
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/lto-streamer.h
@@ -0,0 +1,1228 @@
+/* Data structures and declarations used for reading and writing
+   GIMPLE to a file stream.
+
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Contributed by Doug Kwan <dougkwan@google.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_LTO_STREAMER_H
+#define GCC_LTO_STREAMER_H
+
+#include "plugin-api.h"
+#include "gcov-io.h"
+#include "diagnostic.h"
+
+/* The encoding for a function consists of the following sections:
+
+   1)    The header.
+   2)    FIELD_DECLS.
+   3)    FUNCTION_DECLS.
+   4)    global VAR_DECLS.
+   5)    type_decls
+   6)    types.
+   7)    Names for the labels that have names
+   8)    The SSA names.
+   9)    The control flow graph.
+   10-11)Gimple for local decls.
+   12)   Gimple for the function.
+   13)   Strings.
+
+   1) THE HEADER.
+   2-6) THE GLOBAL DECLS AND TYPES.
+
+      The global decls and types are encoded in the same way.  For each
+      entry, there is word with the offset within the section to the
+      entry.
+
+   7) THE LABEL NAMES.
+
+      Since most labels do not have names, this section my be of zero
+      length.  It consists of an array of string table references, one
+      per label.  In the lto code, the labels are given either
+      positive or negative indexes.  the positive ones have names and
+      the negative ones do not.  The positive index can be used to
+      find the name in this array.
+
+   9) THE CFG.
+
+   10) Index into the local decls.  Since local decls can have local
+      decls inside them, they must be read in randomly in order to
+      properly restore them.
+
+   11-12) GIMPLE FOR THE LOCAL DECLS AND THE FUNCTION BODY.
+
+     The gimple consists of a set of records.
+
+     THE FUNCTION
+
+     At the top level of (8) is the function. It consists of five
+     pieces:
+
+     LTO_function     - The tag.
+     eh tree          - This is all of the exception handling regions
+                        put out in a post order traversial of the
+                        tree.  Siblings are output as lists terminated
+			by a 0.  The set of fields matches the fields
+			defined in except.c.
+
+     last_basic_block - in uleb128 form.
+
+     basic blocks     - This is the set of basic blocks.
+
+     zero             - The termination of the basic blocks.
+
+     BASIC BLOCKS
+
+     There are two forms of basic blocks depending on if they are
+     empty or not.
+
+     The basic block consists of:
+
+     LTO_bb1 or LTO_bb0 - The tag.
+
+     bb->index          - the index in uleb128 form.
+
+     #succs             - The number of successors un uleb128 form.
+
+     the successors     - For each edge, a pair.  The first of the
+                          pair is the index of the successor in
+                          uleb128 form and the second are the flags in
+                          uleb128 form.
+
+     the statements     - A gimple tree, as described above.
+                          These are only present for LTO_BB1.
+                          Following each statement is an optional
+                          exception handling record LTO_eh_region
+			  which contains the region number (for
+			  regions >= 0).
+
+     zero               - This is only present for LTO_BB1 and is used
+			  to terminate the statements and exception
+			  regions within this block.
+
+   12) STRINGS
+
+     String are represented in the table as pairs, a length in ULEB128
+     form followed by the data for the string.  */
+
+#define LTO_major_version 8
+#define LTO_minor_version 0
+
+typedef unsigned char	lto_decl_flags_t;
+
+
+/* Tags representing the various IL objects written to the bytecode file
+   (GIMPLE statements, basic blocks, EH regions, tree nodes, etc).
+
+   NOTE, when adding new LTO tags, also update lto_tag_name.  */
+enum LTO_tags
+{
+  LTO_null = 0,
+
+  /* Special for streamer.  Reference to previously-streamed node.  */
+  LTO_tree_pickle_reference,
+
+  /* Reserve enough entries to fit all the tree and gimple codes handled
+     by the streamer.  This guarantees that:
+
+     1- Given a tree code C:
+     		enum LTO_tags tag == C + 1
+
+     2- Given a gimple code C:
+		enum LTO_tags tag == C + NUM_TREE_CODES + 1
+
+     Conversely, to map between LTO tags and tree/gimple codes, the
+     reverse operation must be applied.  */
+  LTO_bb0 = 1 + MAX_TREE_CODES + LAST_AND_UNUSED_GIMPLE_CODE,
+  LTO_bb1,
+
+  /* EH region holding the previous statement.  */
+  LTO_eh_region,
+
+  /* Shared INTEGER_CST node.  */
+  LTO_integer_cst,
+
+  /* Function body.  */
+  LTO_function,
+
+  /* EH table.  */
+  LTO_eh_table,
+
+  /* EH region types.  These mirror enum eh_region_type.  */
+  LTO_ert_cleanup,
+  LTO_ert_try,
+  LTO_ert_allowed_exceptions,
+  LTO_ert_must_not_throw,
+
+  /* EH landing pad.  */
+  LTO_eh_landing_pad,
+
+  /* EH try/catch node.  */
+  LTO_eh_catch,
+
+  /* Special for global streamer.  A blob of unnamed tree nodes.  */
+  LTO_tree_scc,
+
+  /* References to indexable tree nodes.  These objects are stored in
+     tables that are written separately from the function bodies that
+     reference them.  This way they can be instantiated even when the
+     referencing functions aren't (e.g., during WPA) and it also allows
+     functions to be copied from one file to another without having
+     to unpickle the body first (the references are location
+     independent).
+
+     NOTE, do not regroup these values as the grouping is exposed
+     in the range checks done in lto_input_tree.  */
+  LTO_field_decl_ref,			/* Do not change.  */
+  LTO_function_decl_ref,
+  LTO_label_decl_ref,
+  LTO_namespace_decl_ref,
+  LTO_result_decl_ref,
+  LTO_ssa_name_ref,
+  LTO_type_decl_ref,
+  LTO_type_ref,
+  LTO_const_decl_ref,
+  LTO_imported_decl_ref,
+  LTO_translation_unit_decl_ref,
+  LTO_global_decl_ref,
+  LTO_namelist_decl_ref,		/* Do not change.  */
+
+  /* This tag must always be last.  */
+  LTO_NUM_TAGS
+};
+
+
+/* Set of section types that are in an LTO file.  This list will grow
+   as the number of IPA passes grows since each IPA pass will need its
+   own section type to store its summary information.
+
+   When adding a new section type, you must also extend the
+   LTO_SECTION_NAME array in lto-section-in.c.  */
+enum lto_section_type
+{
+  LTO_section_decls = 0,
+  LTO_section_function_body,
+  LTO_section_static_initializer,
+  LTO_section_symtab,
+  LTO_section_refs,
+  LTO_section_asm,
+  LTO_section_jump_functions,
+  LTO_section_ipa_pure_const,
+  LTO_section_ipa_reference,
+  LTO_section_ipa_profile,
+  LTO_section_symtab_nodes,
+  LTO_section_opts,
+  LTO_section_cgraph_opt_sum,
+  LTO_section_ipa_fn_summary,
+  LTO_section_ipcp_transform,
+  LTO_section_ipa_icf,
+  LTO_section_offload_table,
+  LTO_section_mode_table,
+  LTO_section_ipa_hsa,
+  LTO_N_SECTION_TYPES		/* Must be last.  */
+};
+
+/* Indices to the various function, type and symbol streams. */
+enum lto_decl_stream_e_t
+{
+  LTO_DECL_STREAM_TYPE = 0,		/* Must be first. */
+  LTO_DECL_STREAM_FIELD_DECL,
+  LTO_DECL_STREAM_FN_DECL,
+  LTO_DECL_STREAM_VAR_DECL,
+  LTO_DECL_STREAM_TYPE_DECL,
+  LTO_DECL_STREAM_NAMESPACE_DECL,
+  LTO_DECL_STREAM_LABEL_DECL,
+  LTO_N_DECL_STREAMS
+};
+
+typedef enum ld_plugin_symbol_resolution ld_plugin_symbol_resolution_t;
+
+
+/* Macro to define convenience functions for type and decl streams
+   in lto_file_decl_data.  */
+#define DEFINE_DECL_STREAM_FUNCS(UPPER_NAME, name) \
+static inline tree \
+lto_file_decl_data_get_ ## name (struct lto_file_decl_data *data, \
+				 unsigned int idx) \
+{ \
+  struct lto_in_decl_state *state = data->current_decl_state; \
+   return (*state->streams[LTO_DECL_STREAM_## UPPER_NAME])[idx]; \
+} \
+\
+static inline unsigned int \
+lto_file_decl_data_num_ ## name ## s (struct lto_file_decl_data *data) \
+{ \
+  struct lto_in_decl_state *state = data->current_decl_state; \
+  return vec_safe_length (state->streams[LTO_DECL_STREAM_## UPPER_NAME]); \
+}
+
+
+/* Return a char pointer to the start of a data stream for an lto pass
+   or function.  The first parameter is the file data that contains
+   the information.  The second parameter is the type of information
+   to be obtained.  The third parameter is the name of the function
+   and is only used when finding a function body; otherwise it is
+   NULL.  The fourth parameter is the length of the data returned.  */
+typedef const char* (lto_get_section_data_f) (struct lto_file_decl_data *,
+					      enum lto_section_type,
+					      const char *,
+					      size_t *);
+
+/* Return the data found from the above call.  The first three
+   parameters are the same as above.  The fourth parameter is the data
+   itself and the fifth is the length of the data. */
+typedef void (lto_free_section_data_f) (struct lto_file_decl_data *,
+					enum lto_section_type,
+					const char *,
+					const char *,
+					size_t);
+
+/* The location cache holds expanded locations for streamed in trees.
+   This is done to reduce memory usage of libcpp linemap that strongly preffers
+   locations to be inserted in the soruce order.  */
+
+class lto_location_cache
+{
+public:
+  /* Apply all changes in location cache.  Add locations into linemap and patch
+     trees.  */
+  bool apply_location_cache ();
+  /* Tree merging did not suceed; mark all changes in the cache as accepted.  */
+  void accept_location_cache ();
+  /* Tree merging did suceed; throw away recent changes.  */
+  void revert_location_cache ();
+  void input_location (location_t *loc, struct bitpack_d *bp,
+		       struct data_in *data_in);
+  lto_location_cache ()
+     : loc_cache (), accepted_length (0), current_file (NULL), current_line (0),
+       current_col (0), current_sysp (false), current_loc (UNKNOWN_LOCATION)
+  {
+    gcc_assert (!current_cache);
+    current_cache = this;
+  }
+  ~lto_location_cache ()
+  {
+    apply_location_cache ();
+    gcc_assert (current_cache == this);
+    current_cache = NULL;
+  }
+
+  /* There can be at most one instance of location cache (combining multiple
+     would bring it out of sync with libcpp linemap); point to current
+     one.  */
+  static lto_location_cache *current_cache;
+  
+private:
+  static int cmp_loc (const void *pa, const void *pb);
+
+  struct cached_location
+  {
+    const char *file;
+    location_t *loc;
+    int line, col;
+    bool sysp;
+  };
+
+  /* The location cache.  */
+
+  auto_vec<cached_location> loc_cache;
+
+  /* Accepted entries are ones used by trees that are known to be not unified
+     by tree merging.  */
+
+  int accepted_length;
+
+  /* Bookkeeping to remember state in between calls to lto_apply_location_cache
+     When streaming gimple, the location cache is not used and thus
+     lto_apply_location_cache happens per location basis.  It is then
+     useful to avoid redundant calls of linemap API.  */
+
+  const char *current_file;
+  int current_line;
+  int current_col;
+  bool current_sysp;
+  location_t current_loc;
+};
+
+/* Structure used as buffer for reading an LTO file.  */
+class lto_input_block
+{
+public:
+  /* Special constructor for the string table, it abuses this to
+     do random access but use the uhwi decoder.  */
+  lto_input_block (const char *data_, unsigned int p_, unsigned int len_,
+		   const unsigned char *mode_table_)
+      : data (data_), mode_table (mode_table_), p (p_), len (len_) {}
+  lto_input_block (const char *data_, unsigned int len_,
+		   const unsigned char *mode_table_)
+      : data (data_), mode_table (mode_table_), p (0), len (len_) {}
+
+  const char *data;
+  const unsigned char *mode_table;
+  unsigned int p;
+  unsigned int len;
+};
+
+
+/* The is the first part of the record for a function or constructor
+   in the .o file.  */
+struct lto_header
+{
+  int16_t major_version;
+  int16_t minor_version;
+};
+
+/* The is the first part of the record in an LTO file for many of the
+   IPA passes.  */
+struct lto_simple_header : lto_header
+{
+  /* Size of main gimple body of function.  */
+  int32_t main_size;
+};
+
+struct lto_simple_header_with_strings : lto_simple_header
+{
+  /* Size of the string table.  */
+  int32_t string_size;
+};
+
+/* The header for a function body.  */
+struct lto_function_header : lto_simple_header_with_strings
+{
+  /* Size of the cfg.  */
+  int32_t cfg_size;
+};
+
+
+/* Structure describing a symbol section.  */
+struct lto_decl_header : lto_simple_header_with_strings
+{
+  /* Size of region for decl state. */
+  int32_t decl_state_size;
+
+  /* Number of nodes in globals stream.  */
+  int32_t num_nodes;
+};
+
+
+/* Statistics gathered during LTO, WPA and LTRANS.  */
+struct lto_stats_d
+{
+  unsigned HOST_WIDE_INT num_input_cgraph_nodes;
+  unsigned HOST_WIDE_INT num_output_symtab_nodes;
+  unsigned HOST_WIDE_INT num_input_files;
+  unsigned HOST_WIDE_INT num_output_files;
+  unsigned HOST_WIDE_INT num_cgraph_partitions;
+  unsigned HOST_WIDE_INT section_size[LTO_N_SECTION_TYPES];
+  unsigned HOST_WIDE_INT num_function_bodies;
+  unsigned HOST_WIDE_INT num_trees[NUM_TREE_CODES];
+  unsigned HOST_WIDE_INT num_output_il_bytes;
+  unsigned HOST_WIDE_INT num_compressed_il_bytes;
+  unsigned HOST_WIDE_INT num_input_il_bytes;
+  unsigned HOST_WIDE_INT num_uncompressed_il_bytes;
+  unsigned HOST_WIDE_INT num_tree_bodies_output;
+  unsigned HOST_WIDE_INT num_pickle_refs_output;
+};
+
+/* Entry of LTO symtab encoder.  */
+struct lto_encoder_entry
+{
+  symtab_node *node;
+  /* Is the node in this partition (i.e. ltrans of this partition will
+     be responsible for outputting it)? */
+  unsigned int in_partition:1;
+  /* Do we encode body in this partition?  */
+  unsigned int body:1;
+  /* Do we encode initializer in this partition?
+     For example the readonly variable initializers are encoded to aid
+     constant folding even if they are not in the partition.  */
+  unsigned int initializer:1;
+};
+
+
+/* Encoder data structure used to stream callgraph nodes.  */
+struct lto_symtab_encoder_d
+{
+  vec<lto_encoder_entry> nodes;
+  hash_map<symtab_node *, size_t> *map;
+};
+
+typedef struct lto_symtab_encoder_d *lto_symtab_encoder_t;
+
+/* Iterator structure for cgraph node sets.  */
+struct lto_symtab_encoder_iterator
+{
+  lto_symtab_encoder_t encoder;
+  unsigned index;
+};
+
+
+
+/* The lto_tree_ref_encoder struct is used to encode trees into indices. */
+
+struct lto_tree_ref_encoder
+{
+  hash_map<tree, unsigned> *tree_hash_table;	/* Maps pointers to indices. */
+  vec<tree> trees;			/* Maps indices to pointers. */
+};
+
+
+/* Structure to hold states of input scope.  */
+struct GTY((for_user)) lto_in_decl_state
+{
+  /* Array of lto_in_decl_buffers to store type and decls streams. */
+  vec<tree, va_gc> *streams[LTO_N_DECL_STREAMS];
+
+  /* If this in-decl state is associated with a function. FN_DECL
+     point to the FUNCTION_DECL. */
+  tree fn_decl;
+
+  /* True if decl state is compressed.  */
+  bool compressed;
+};
+
+typedef struct lto_in_decl_state *lto_in_decl_state_ptr;
+
+struct decl_state_hasher : ggc_ptr_hash<lto_in_decl_state>
+{
+  static hashval_t
+  hash (lto_in_decl_state *s)
+  {
+    return htab_hash_pointer (s->fn_decl);
+  }
+
+  static bool
+  equal (lto_in_decl_state *a, lto_in_decl_state *b)
+  {
+    return a->fn_decl == b->fn_decl;
+  }
+};
+
+/* The structure that holds all of the vectors of global types,
+   decls and cgraph nodes used in the serialization of this file.  */
+struct lto_out_decl_state
+{
+  /* The buffers contain the sets of decls of various kinds and types we have
+     seen so far and the indexes assigned to them.  */
+  struct lto_tree_ref_encoder streams[LTO_N_DECL_STREAMS];
+
+  /* Encoder for cgraph nodes.  */
+  lto_symtab_encoder_t symtab_node_encoder;
+
+  /* If this out-decl state belongs to a function, fn_decl points to that
+     function.  Otherwise, it is NULL. */
+  tree fn_decl;
+
+  /* True if decl state is compressed.  */
+  bool compressed;
+};
+
+typedef struct lto_out_decl_state *lto_out_decl_state_ptr;
+
+
+/* Compact representation of a index <-> resolution pair. Unpacked to an 
+   vector later. */
+struct res_pair 
+{
+  ld_plugin_symbol_resolution_t res;
+  unsigned index;
+};
+
+
+/* One of these is allocated for each object file that being compiled
+   by lto.  This structure contains the tables that are needed by the
+   serialized functions and ipa passes to connect themselves to the
+   global types and decls as they are reconstituted.  */
+struct GTY(()) lto_file_decl_data
+{
+  /* Decl state currently used. */
+  struct lto_in_decl_state *current_decl_state;
+
+  /* Decl state corresponding to regions outside of any functions
+     in the compilation unit. */
+  struct lto_in_decl_state *global_decl_state;
+
+  /* Table of cgraph nodes present in this file.  */
+  lto_symtab_encoder_t GTY((skip)) symtab_node_encoder;
+
+  /* Hash table maps lto-related section names to location in file.  */
+  hash_table<decl_state_hasher> *function_decl_states;
+
+  /* The .o file that these offsets relate to.  */
+  const char *GTY((skip)) file_name;
+
+  /* Hash table maps lto-related section names to location in file.  */
+  htab_t GTY((skip)) section_hash_table;
+
+  /* Hash new name of renamed global declaration to its original name.  */
+  htab_t GTY((skip)) renaming_hash_table;
+
+  /* Linked list used temporarily in reader */
+  struct lto_file_decl_data *next;
+
+  /* Sub ID for merged objects. */
+  unsigned HOST_WIDE_INT id;
+
+  /* Symbol resolutions for this file */
+  vec<res_pair>  GTY((skip)) respairs;
+  unsigned max_index;
+
+  gcov_summary GTY((skip)) profile_info;
+
+  /* Map assigning declarations their resolutions.  */
+  hash_map<tree, ld_plugin_symbol_resolution> * GTY((skip)) resolution_map;
+
+  /* Mode translation table.  */
+  const unsigned char *mode_table;
+};
+
+typedef struct lto_file_decl_data *lto_file_decl_data_ptr;
+
+struct lto_char_ptr_base
+{
+  char *ptr;
+};
+
+/* An incore byte stream to buffer the various parts of the function.
+   The entire structure should be zeroed when created.  The record
+   consists of a set of blocks.  The first sizeof (ptr) bytes are used
+   as a chain, and the rest store the bytes to be written.  */
+struct lto_output_stream
+{
+  /* The pointer to the first block in the stream.  */
+  struct lto_char_ptr_base * first_block;
+
+  /* The pointer to the last and current block in the stream.  */
+  struct lto_char_ptr_base * current_block;
+
+  /* The pointer to where the next char should be written.  */
+  char * current_pointer;
+
+  /* The number of characters left in the current block.  */
+  unsigned int left_in_block;
+
+  /* The block size of the last block allocated.  */
+  unsigned int block_size;
+
+  /* The total number of characters written.  */
+  unsigned int total_size;
+};
+
+/* A simple output block.  This can be used for simple IPA passes that
+   do not need more than one stream.  */
+struct lto_simple_output_block
+{
+  enum lto_section_type section_type;
+  struct lto_out_decl_state *decl_state;
+
+  /* The stream that the main tree codes are written to.  */
+  struct lto_output_stream *main_stream;
+};
+
+/* String hashing.  */
+
+struct string_slot
+{
+  const char *s;
+  int len;
+  unsigned int slot_num;
+};
+
+/* Hashtable helpers.  */
+
+struct string_slot_hasher : nofree_ptr_hash <string_slot>
+{
+  static inline hashval_t hash (const string_slot *);
+  static inline bool equal (const string_slot *, const string_slot *);
+};
+
+/* Returns a hash code for DS.  Adapted from libiberty's htab_hash_string
+   to support strings that may not end in '\0'.  */
+
+inline hashval_t
+string_slot_hasher::hash (const string_slot *ds)
+{
+  hashval_t r = ds->len;
+  int i;
+
+  for (i = 0; i < ds->len; i++)
+     r = r * 67 + (unsigned)ds->s[i] - 113;
+  return r;
+}
+
+/* Returns nonzero if DS1 and DS2 are equal.  */
+
+inline bool
+string_slot_hasher::equal (const string_slot *ds1, const string_slot *ds2)
+{
+  if (ds1->len == ds2->len)
+    return memcmp (ds1->s, ds2->s, ds1->len) == 0;
+
+  return 0;
+}
+
+/* Data structure holding all the data and descriptors used when writing
+   an LTO file.  */
+struct output_block
+{
+  enum lto_section_type section_type;
+  struct lto_out_decl_state *decl_state;
+
+  /* The stream that the main tree codes are written to.  */
+  struct lto_output_stream *main_stream;
+
+  /* The stream that contains the string table.  */
+  struct lto_output_stream *string_stream;
+
+  /* The stream that contains the cfg.  */
+  struct lto_output_stream *cfg_stream;
+
+  /* The hash table that contains the set of strings we have seen so
+     far and the indexes assigned to them.  */
+  hash_table<string_slot_hasher> *string_hash_table;
+
+  /* The current symbol that we are currently serializing.  Null
+     if we are serializing something else.  */
+  symtab_node *symbol;
+
+  /* These are the last file and line that were seen in the stream.
+     If the current node differs from these, it needs to insert
+     something into the stream and fix these up.  */
+  const char *current_file;
+  int current_line;
+  int current_col;
+  bool current_sysp;
+
+  /* Cache of nodes written in this section.  */
+  struct streamer_tree_cache_d *writer_cache;
+
+  /* All data persistent across whole duration of output block
+     can go here.  */
+  struct obstack obstack;
+};
+
+
+/* Data and descriptors used when reading from an LTO file.  */
+struct data_in
+{
+  /* The global decls and types.  */
+  struct lto_file_decl_data *file_data;
+
+  /* The string table.  */
+  const char *strings;
+
+  /* The length of the string table.  */
+  unsigned int strings_len;
+
+  /* Maps each reference number to the resolution done by the linker. */
+  vec<ld_plugin_symbol_resolution_t> globals_resolution;
+
+  /* Cache of pickled nodes.  */
+  struct streamer_tree_cache_d *reader_cache;
+
+  /* Cache of source code location.  */
+  lto_location_cache location_cache;
+};
+
+
+/* In lto-section-in.c  */
+extern struct lto_input_block * lto_create_simple_input_block (
+			       struct lto_file_decl_data *,
+			       enum lto_section_type, const char **, size_t *);
+extern void
+lto_destroy_simple_input_block (struct lto_file_decl_data *,
+				enum lto_section_type,
+				struct lto_input_block *, const char *, size_t);
+extern void lto_set_in_hooks (struct lto_file_decl_data **,
+			      lto_get_section_data_f *,
+			      lto_free_section_data_f *);
+extern struct lto_file_decl_data **lto_get_file_decl_data (void);
+extern const char *lto_get_section_data (struct lto_file_decl_data *,
+					 enum lto_section_type,
+					 const char *, size_t *,
+					 bool decompress = false);
+extern const char *lto_get_raw_section_data (struct lto_file_decl_data *,
+					     enum lto_section_type,
+					     const char *, size_t *);
+extern void lto_free_section_data (struct lto_file_decl_data *,
+			           enum lto_section_type,
+				   const char *, const char *, size_t,
+				   bool decompress = false);
+extern void lto_free_raw_section_data (struct lto_file_decl_data *,
+				       enum lto_section_type,
+				       const char *, const char *, size_t);
+extern htab_t lto_create_renaming_table (void);
+extern void lto_record_renamed_decl (struct lto_file_decl_data *,
+				     const char *, const char *);
+extern const char *lto_get_decl_name_mapping (struct lto_file_decl_data *,
+					      const char *);
+extern struct lto_in_decl_state *lto_new_in_decl_state (void);
+extern void lto_delete_in_decl_state (struct lto_in_decl_state *);
+extern struct lto_in_decl_state *lto_get_function_in_decl_state (
+				      struct lto_file_decl_data *, tree);
+extern void lto_free_function_in_decl_state (struct lto_in_decl_state *);
+extern void lto_free_function_in_decl_state_for_node (symtab_node *);
+extern void lto_section_overrun (struct lto_input_block *) ATTRIBUTE_NORETURN;
+extern void lto_value_range_error (const char *,
+				   HOST_WIDE_INT, HOST_WIDE_INT,
+				   HOST_WIDE_INT) ATTRIBUTE_NORETURN;
+
+/* In lto-section-out.c  */
+extern void lto_begin_section (const char *, bool);
+extern void lto_end_section (void);
+extern void lto_write_data (const void *, unsigned int);
+extern void lto_write_raw_data (const void *, unsigned int);
+extern void lto_write_stream (struct lto_output_stream *);
+extern bool lto_output_decl_index (struct lto_output_stream *,
+			    struct lto_tree_ref_encoder *,
+			    tree, unsigned int *);
+extern void lto_output_field_decl_index (struct lto_out_decl_state *,
+				  struct lto_output_stream *, tree);
+extern void lto_output_fn_decl_index (struct lto_out_decl_state *,
+			       struct lto_output_stream *, tree);
+extern void lto_output_namespace_decl_index (struct lto_out_decl_state *,
+				      struct lto_output_stream *, tree);
+extern void lto_output_var_decl_index (struct lto_out_decl_state *,
+				struct lto_output_stream *, tree);
+extern void lto_output_type_decl_index (struct lto_out_decl_state *,
+				 struct lto_output_stream *, tree);
+extern void lto_output_type_ref_index (struct lto_out_decl_state *,
+				struct lto_output_stream *, tree);
+extern struct lto_simple_output_block *lto_create_simple_output_block (
+				enum lto_section_type);
+extern void lto_destroy_simple_output_block (struct lto_simple_output_block *);
+extern struct lto_out_decl_state *lto_new_out_decl_state (void);
+extern void lto_delete_out_decl_state (struct lto_out_decl_state *);
+extern struct lto_out_decl_state *lto_get_out_decl_state (void);
+extern void lto_push_out_decl_state (struct lto_out_decl_state *);
+extern struct lto_out_decl_state *lto_pop_out_decl_state (void);
+extern void lto_record_function_out_decl_state (tree,
+						struct lto_out_decl_state *);
+extern void lto_append_block (struct lto_output_stream *);
+
+
+/* In lto-streamer.c.  */
+
+/* Set when streaming LTO for offloading compiler.  */
+extern bool lto_stream_offload_p;
+
+extern const char *lto_tag_name (enum LTO_tags);
+extern bitmap lto_bitmap_alloc (void);
+extern void lto_bitmap_free (bitmap);
+extern char *lto_get_section_name (int, const char *, struct lto_file_decl_data *);
+extern void print_lto_report (const char *);
+extern void lto_streamer_init (void);
+extern bool gate_lto_out (void);
+extern void lto_check_version (int, int, const char *);
+extern void lto_streamer_hooks_init (void);
+
+/* In lto-streamer-in.c */
+extern void lto_input_cgraph (struct lto_file_decl_data *, const char *);
+extern void lto_reader_init (void);
+extern void lto_input_function_body (struct lto_file_decl_data *,
+				     struct cgraph_node *,
+				     const char *);
+extern void lto_input_variable_constructor (struct lto_file_decl_data *,
+					    struct varpool_node *,
+					    const char *);
+extern void lto_input_constructors_and_inits (struct lto_file_decl_data *,
+					      const char *);
+extern void lto_input_toplevel_asms (struct lto_file_decl_data *, int);
+extern void lto_input_mode_table (struct lto_file_decl_data *);
+extern struct data_in *lto_data_in_create (struct lto_file_decl_data *,
+				    const char *, unsigned,
+				    vec<ld_plugin_symbol_resolution_t> );
+extern void lto_data_in_delete (struct data_in *);
+extern void lto_input_data_block (struct lto_input_block *, void *, size_t);
+void lto_input_location (location_t *, struct bitpack_d *, struct data_in *);
+location_t stream_input_location_now (struct bitpack_d *bp,
+				      struct data_in *data);
+tree lto_input_tree_ref (struct lto_input_block *, struct data_in *,
+			 struct function *, enum LTO_tags);
+void lto_tag_check_set (enum LTO_tags, int, ...);
+void lto_init_eh (void);
+hashval_t lto_input_scc (struct lto_input_block *, struct data_in *,
+			 unsigned *, unsigned *);
+tree lto_input_tree_1 (struct lto_input_block *, struct data_in *,
+		       enum LTO_tags, hashval_t hash);
+tree lto_input_tree (struct lto_input_block *, struct data_in *);
+
+
+/* In lto-streamer-out.c  */
+extern void lto_register_decl_definition (tree, struct lto_file_decl_data *);
+extern struct output_block *create_output_block (enum lto_section_type);
+extern void destroy_output_block (struct output_block *);
+extern void lto_output_tree (struct output_block *, tree, bool, bool);
+extern void lto_output_toplevel_asms (void);
+extern void produce_asm (struct output_block *ob, tree fn);
+extern void lto_output ();
+extern void produce_asm_for_decls ();
+void lto_output_decl_state_streams (struct output_block *,
+				    struct lto_out_decl_state *);
+void lto_output_decl_state_refs (struct output_block *,
+			         struct lto_output_stream *,
+			         struct lto_out_decl_state *);
+void lto_output_location (struct output_block *, struct bitpack_d *, location_t);
+void lto_output_init_mode_table (void);
+
+
+/* In lto-cgraph.c  */
+extern bool asm_nodes_output;
+lto_symtab_encoder_t lto_symtab_encoder_new (bool);
+int lto_symtab_encoder_encode (lto_symtab_encoder_t, symtab_node *);
+void lto_symtab_encoder_delete (lto_symtab_encoder_t);
+bool lto_symtab_encoder_delete_node (lto_symtab_encoder_t, symtab_node *);
+bool lto_symtab_encoder_encode_body_p (lto_symtab_encoder_t,
+				       struct cgraph_node *);
+bool lto_symtab_encoder_in_partition_p (lto_symtab_encoder_t,
+					symtab_node *);
+void lto_set_symtab_encoder_in_partition (lto_symtab_encoder_t,
+					  symtab_node *);
+
+bool lto_symtab_encoder_encode_initializer_p (lto_symtab_encoder_t,
+					      varpool_node *);
+void output_symtab (void);
+void input_symtab (void);
+void output_offload_tables (void);
+void input_offload_tables (bool);
+bool referenced_from_other_partition_p (struct ipa_ref_list *,
+				        lto_symtab_encoder_t);
+bool reachable_from_other_partition_p (struct cgraph_node *,
+				       lto_symtab_encoder_t);
+bool referenced_from_this_partition_p (symtab_node *,
+					lto_symtab_encoder_t);
+bool reachable_from_this_partition_p (struct cgraph_node *,
+				      lto_symtab_encoder_t);
+lto_symtab_encoder_t compute_ltrans_boundary (lto_symtab_encoder_t encoder);
+void select_what_to_stream (void);
+
+/* In options-save.c.  */
+void cl_target_option_stream_out (struct output_block *, struct bitpack_d *,
+				  struct cl_target_option *);
+
+void cl_target_option_stream_in (struct data_in *,
+				 struct bitpack_d *,
+				 struct cl_target_option *);
+
+void cl_optimization_stream_out (struct output_block *,
+				 struct bitpack_d *, struct cl_optimization *);
+
+void cl_optimization_stream_in (struct data_in *,
+				struct bitpack_d *, struct cl_optimization *);
+
+
+
+/* In lto-opts.c.  */
+extern void lto_write_options (void);
+
+
+/* Statistics gathered during LTO, WPA and LTRANS.  */
+extern struct lto_stats_d lto_stats;
+
+/* Section names corresponding to the values of enum lto_section_type.  */
+extern const char *lto_section_name[];
+
+/* Holds all the out decl states of functions output so far in the
+   current output file.  */
+extern vec<lto_out_decl_state_ptr> lto_function_decl_states;
+
+/* Return true if LTO tag TAG corresponds to a tree code.  */
+static inline bool
+lto_tag_is_tree_code_p (enum LTO_tags tag)
+{
+  return tag > LTO_tree_pickle_reference && (unsigned) tag <= MAX_TREE_CODES;
+}
+
+
+/* Return true if LTO tag TAG corresponds to a gimple code.  */
+static inline bool
+lto_tag_is_gimple_code_p (enum LTO_tags tag)
+{
+  return (unsigned) tag >= NUM_TREE_CODES + 2
+	 && (unsigned) tag < 2 + NUM_TREE_CODES + LAST_AND_UNUSED_GIMPLE_CODE;
+}
+
+
+/* Return the LTO tag corresponding to gimple code CODE.  See enum
+   LTO_tags for details on the conversion.  */
+static inline enum LTO_tags
+lto_gimple_code_to_tag (enum gimple_code code)
+{
+  return (enum LTO_tags) ((unsigned) code + NUM_TREE_CODES + 2);
+}
+
+
+/* Return the GIMPLE code corresponding to TAG.  See enum LTO_tags for
+   details on the conversion.  */
+static inline enum gimple_code
+lto_tag_to_gimple_code (enum LTO_tags tag)
+{
+  gcc_assert (lto_tag_is_gimple_code_p (tag));
+  return (enum gimple_code) ((unsigned) tag - NUM_TREE_CODES - 2);
+}
+
+
+/* Return the LTO tag corresponding to tree code CODE.  See enum
+   LTO_tags for details on the conversion.  */
+static inline enum LTO_tags
+lto_tree_code_to_tag (enum tree_code code)
+{
+  return (enum LTO_tags) ((unsigned) code + 2);
+}
+
+
+/* Return the tree code corresponding to TAG.  See enum LTO_tags for
+   details on the conversion.  */
+static inline enum tree_code
+lto_tag_to_tree_code (enum LTO_tags tag)
+{
+  gcc_assert (lto_tag_is_tree_code_p (tag));
+  return (enum tree_code) ((unsigned) tag - 2);
+}
+
+/* Check that tag ACTUAL == EXPECTED.  */
+static inline void
+lto_tag_check (enum LTO_tags actual, enum LTO_tags expected)
+{
+  if (actual != expected)
+    internal_error ("bytecode stream: expected tag %s instead of %s",
+		    lto_tag_name (expected), lto_tag_name (actual));
+}
+
+/* Check that tag ACTUAL is in the range [TAG1, TAG2].  */
+static inline void
+lto_tag_check_range (enum LTO_tags actual, enum LTO_tags tag1,
+		     enum LTO_tags tag2)
+{
+  if (actual < tag1 || actual > tag2)
+    internal_error ("bytecode stream: tag %s is not in the expected range "
+		    "[%s, %s]",
+		    lto_tag_name (actual),
+		    lto_tag_name (tag1),
+		    lto_tag_name (tag2));
+}
+
+/* Initialize an lto_out_decl_buffer ENCODER.  */
+static inline void
+lto_init_tree_ref_encoder (struct lto_tree_ref_encoder *encoder)
+{
+  encoder->tree_hash_table = new hash_map<tree, unsigned> (251);
+  encoder->trees.create (0);
+}
+
+
+/* Destroy an lto_tree_ref_encoder ENCODER by freeing its contents.  The
+   memory used by ENCODER is not freed by this function.  */
+static inline void
+lto_destroy_tree_ref_encoder (struct lto_tree_ref_encoder *encoder)
+{
+  /* Hash table may be delete already.  */
+  delete encoder->tree_hash_table;
+  encoder->tree_hash_table = NULL;
+  encoder->trees.release ();
+}
+
+/* Return the number of trees encoded in ENCODER. */
+static inline unsigned int
+lto_tree_ref_encoder_size (struct lto_tree_ref_encoder *encoder)
+{
+  return encoder->trees.length ();
+}
+
+/* Return the IDX-th tree in ENCODER. */
+static inline tree
+lto_tree_ref_encoder_get_tree (struct lto_tree_ref_encoder *encoder,
+			       unsigned int idx)
+{
+  return encoder->trees[idx];
+}
+
+/* Return number of encoded nodes in ENCODER.  */
+static inline int
+lto_symtab_encoder_size (lto_symtab_encoder_t encoder)
+{
+  return encoder->nodes.length ();
+}
+
+/* Value used to represent failure of lto_symtab_encoder_lookup.  */
+#define LCC_NOT_FOUND	(-1)
+
+/* Look up NODE in encoder.  Return NODE's reference if it has been encoded
+   or LCC_NOT_FOUND if it is not there.  */
+
+static inline int
+lto_symtab_encoder_lookup (lto_symtab_encoder_t encoder,
+			   symtab_node *node)
+{
+  size_t *slot = encoder->map->get (node);
+  return (slot && *slot ? *(slot) - 1 : LCC_NOT_FOUND);
+}
+
+/* Return true if iterator LSE points to nothing.  */
+static inline bool
+lsei_end_p (lto_symtab_encoder_iterator lsei)
+{
+  return lsei.index >= (unsigned)lto_symtab_encoder_size (lsei.encoder);
+}
+
+/* Advance iterator LSE.  */
+static inline void
+lsei_next (lto_symtab_encoder_iterator *lsei)
+{
+  lsei->index++;
+}
+
+/* Return the node pointed to by LSI.  */
+static inline symtab_node *
+lsei_node (lto_symtab_encoder_iterator lsei)
+{
+  return lsei.encoder->nodes[lsei.index].node;
+}
+
+/* Return the node pointed to by LSI.  */
+static inline struct cgraph_node *
+lsei_cgraph_node (lto_symtab_encoder_iterator lsei)
+{
+  return dyn_cast<cgraph_node *> (lsei.encoder->nodes[lsei.index].node);
+}
+
+/* Return the node pointed to by LSI.  */
+static inline varpool_node *
+lsei_varpool_node (lto_symtab_encoder_iterator lsei)
+{
+  return dyn_cast<varpool_node *> (lsei.encoder->nodes[lsei.index].node);
+}
+
+/* Return the cgraph node corresponding to REF using ENCODER.  */
+
+static inline symtab_node *
+lto_symtab_encoder_deref (lto_symtab_encoder_t encoder, int ref)
+{
+  if (ref == LCC_NOT_FOUND)
+    return NULL;
+
+  return encoder->nodes[ref].node;
+}
+
+/* Return an iterator to the first node in LSI.  */
+static inline lto_symtab_encoder_iterator
+lsei_start (lto_symtab_encoder_t encoder)
+{
+  lto_symtab_encoder_iterator lsei;
+
+  lsei.encoder = encoder;
+  lsei.index = 0;
+  return lsei;
+}
+
+/* Advance iterator LSE.  */
+static inline void
+lsei_next_in_partition (lto_symtab_encoder_iterator *lsei)
+{
+  lsei_next (lsei);
+  while (!lsei_end_p (*lsei)
+	 && !lto_symtab_encoder_in_partition_p (lsei->encoder, lsei_node (*lsei)))
+    lsei_next (lsei);
+}
+
+/* Return an iterator to the first node in LSI.  */
+static inline lto_symtab_encoder_iterator
+lsei_start_in_partition (lto_symtab_encoder_t encoder)
+{
+  lto_symtab_encoder_iterator lsei = lsei_start (encoder);
+
+  if (lsei_end_p (lsei))
+    return lsei;
+  if (!lto_symtab_encoder_in_partition_p (encoder, lsei_node (lsei)))
+    lsei_next_in_partition (&lsei);
+
+  return lsei;
+}
+
+/* Advance iterator LSE.  */
+static inline void
+lsei_next_function_in_partition (lto_symtab_encoder_iterator *lsei)
+{
+  lsei_next (lsei);
+  while (!lsei_end_p (*lsei)
+	 && (!is_a <cgraph_node *> (lsei_node (*lsei))
+	     || !lto_symtab_encoder_in_partition_p (lsei->encoder, lsei_node (*lsei))))
+    lsei_next (lsei);
+}
+
+/* Return an iterator to the first node in LSI.  */
+static inline lto_symtab_encoder_iterator
+lsei_start_function_in_partition (lto_symtab_encoder_t encoder)
+{
+  lto_symtab_encoder_iterator lsei = lsei_start (encoder);
+
+  if (lsei_end_p (lsei))
+    return lsei;
+  if (!is_a <cgraph_node *> (lsei_node (lsei))
+      || !lto_symtab_encoder_in_partition_p (encoder, lsei_node (lsei)))
+    lsei_next_function_in_partition (&lsei);
+
+  return lsei;
+}
+
+/* Advance iterator LSE.  */
+static inline void
+lsei_next_variable_in_partition (lto_symtab_encoder_iterator *lsei)
+{
+  lsei_next (lsei);
+  while (!lsei_end_p (*lsei)
+	 && (!is_a <varpool_node *> (lsei_node (*lsei))
+	     || !lto_symtab_encoder_in_partition_p (lsei->encoder, lsei_node (*lsei))))
+    lsei_next (lsei);
+}
+
+/* Return an iterator to the first node in LSI.  */
+static inline lto_symtab_encoder_iterator
+lsei_start_variable_in_partition (lto_symtab_encoder_t encoder)
+{
+  lto_symtab_encoder_iterator lsei = lsei_start (encoder);
+
+  if (lsei_end_p (lsei))
+    return lsei;
+  if (!is_a <varpool_node *> (lsei_node (lsei))
+      || !lto_symtab_encoder_in_partition_p (encoder, lsei_node (lsei)))
+    lsei_next_variable_in_partition (&lsei);
+
+  return lsei;
+}
+
+DEFINE_DECL_STREAM_FUNCS (TYPE, type)
+DEFINE_DECL_STREAM_FUNCS (FIELD_DECL, field_decl)
+DEFINE_DECL_STREAM_FUNCS (FN_DECL, fn_decl)
+DEFINE_DECL_STREAM_FUNCS (VAR_DECL, var_decl)
+DEFINE_DECL_STREAM_FUNCS (TYPE_DECL, type_decl)
+DEFINE_DECL_STREAM_FUNCS (NAMESPACE_DECL, namespace_decl)
+DEFINE_DECL_STREAM_FUNCS (LABEL_DECL, label_decl)
+
+/* Entry for the delayed registering of decl -> DIE references.  */
+struct dref_entry {
+    tree decl;
+    const char *sym;
+    unsigned HOST_WIDE_INT off;
+};
+
+extern vec<dref_entry> dref_queue;
+
+extern FILE *streamer_dump_file;
+
+#endif /* GCC_LTO_STREAMER_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/machmode.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/machmode.def
new file mode 100644
index 0000000..5f0b370
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/machmode.def
@@ -0,0 +1,279 @@
+/* This file contains the definitions and documentation for the
+   machine modes used in the GNU compiler.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+/* This file defines all the MACHINE MODES used by GCC.
+
+   A machine mode specifies a size and format of data
+   at the machine level.
+
+   Each RTL expression has a machine mode.
+
+   At the syntax tree level, each ..._TYPE and each ..._DECL node
+   has a machine mode which describes data of that type or the
+   data of the variable declared.  */
+
+/* This file is included by the genmodes program.  Its text is the
+   body of a function.  Do not rely on this, it will change in the
+   future.
+
+   The following statements can be used in this file -- all have
+   the form of a C macro call.  In their arguments:
+
+   A CLASS argument must be one of the constants defined in
+   mode-classes.def, less the leading MODE_ prefix; some statements
+   that take CLASS arguments have restrictions on which classes are
+   acceptable.  For instance, INT.
+
+   A MODE argument must be the printable name of a machine mode,
+   without quotation marks or trailing "mode".  For instance, SI.
+
+   A PRECISION, BYTESIZE, or COUNT argument must be a positive integer
+   constant.
+
+   A FORMAT argument must be one of the real_mode_format structures
+   declared in real.h, or else a literal 0.  Do not put a leading &
+   on the argument.
+
+   An EXPR argument must be a syntactically valid C expression.
+   If an EXPR contains commas, you may need to write an extra pair of
+   parentheses around it, so it appears to be a single argument to the
+   statement.
+
+   This file defines only those modes which are of use on almost all
+   machines.  Other modes can be defined in the target-specific
+   mode definition file, config/ARCH/ARCH-modes.def.
+
+   Order matters in this file in so far as statements which refer to
+   other modes must appear after the modes they refer to.  However,
+   statements which do not refer to other modes may appear in any
+   order.
+
+     RANDOM_MODE (MODE);
+        declares MODE to be of class RANDOM.
+
+     CC_MODE (MODE);
+        declares MODE to be of class CC.
+
+     INT_MODE (MODE, BYTESIZE);
+        declares MODE to be of class INT and BYTESIZE bytes wide.
+	All of the bits of its representation are significant.
+
+     FRACTIONAL_INT_MODE (MODE, PRECISION, BYTESIZE);
+        declares MODE to be of class INT, BYTESIZE bytes wide in
+	storage, but with only PRECISION significant bits.
+
+     FLOAT_MODE (MODE, BYTESIZE, FORMAT);
+        declares MODE to be of class FLOAT and BYTESIZE bytes wide,
+	using floating point format FORMAT.
+	All of the bits of its representation are significant.
+
+     FRACTIONAL_FLOAT_MODE (MODE, PRECISION, BYTESIZE, FORMAT);
+        declares MODE to be of class FLOAT, BYTESIZE bytes wide in
+	storage, but with only PRECISION significant bits, using
+	floating point format FORMAT.
+
+     DECIMAL_FLOAT_MODE (MODE, BYTESIZE, FORMAT);
+	declares MODE to be of class DECIMAL_FLOAT and BYTESIZE bytes
+	wide.  All of the bits of its representation are significant.
+
+     FRACTIONAL_DECIMAL_FLOAT_MODE (MODE, BYTESIZE, FORMAT);
+	declares MODE to be of class DECIMAL_FLOAT and BYTESIZE bytes
+	wide.  All of the bits of its representation are significant.
+
+     FRACT_MODE (MODE, BYTESIZE, FBIT);
+	declares MODE to be of class FRACT and BYTESIZE bytes wide
+	with FBIT fractional bits.  There may be padding bits.
+
+     UFRACT_MODE (MODE, BYTESIZE, FBIT);
+	declares MODE to be of class UFRACT and BYTESIZE bytes wide
+	with FBIT fractional bits.  There may be padding bits.
+
+     ACCUM_MODE (MODE, BYTESIZE, IBIT, FBIT);
+	declares MODE to be of class ACCUM and BYTESIZE bytes wide
+	with IBIT integral bits and FBIT fractional bits.
+	There may be padding bits.
+
+     UACCUM_MODE (MODE, BYTESIZE, IBIT, FBIT);
+	declares MODE to be of class UACCUM and BYTESIZE bytes wide
+	with IBIT integral bits and FBIT fractional bits.
+	There may be padding bits.
+
+     RESET_FLOAT_FORMAT (MODE, FORMAT);
+	changes the format of MODE, which must be class FLOAT,
+	to FORMAT.  Use in an ARCH-modes.def to reset the format
+	of one of the float modes defined in this file.
+
+     PARTIAL_INT_MODE (MODE, PRECISION, NAME);
+        declares a mode of class PARTIAL_INT with the same size as
+	MODE (which must be an INT mode) and precision PREC.
+	Optionally, NAME is the new name of the mode.  NAME is the
+	name of the mode.
+
+     VECTOR_MODE (CLASS, MODE, COUNT);
+        Declare a vector mode whose component mode is MODE (of class
+	CLASS) with COUNT components.  CLASS must be INT or FLOAT.
+	The name of the vector mode takes the form VnX where n is
+	COUNT in decimal and X is MODE.
+
+     VECTOR_MODES (CLASS, WIDTH);
+        For all modes presently declared in class CLASS, construct
+	corresponding vector modes having width WIDTH.  Modes whose
+	byte sizes do not evenly divide WIDTH are ignored, as are
+	modes that would produce vector modes with only one component,
+	and modes smaller than one byte (if CLASS is INT) or smaller
+	than two bytes (if CLASS is FLOAT).  CLASS must be INT or
+	FLOAT.  The names follow the same rule as VECTOR_MODE uses.
+
+     VECTOR_MODES_WITH_PREFIX (PREFIX, CLASS, WIDTH);
+	Like VECTOR_MODES, but start the mode names with PREFIX instead
+	of the usual "V".
+
+     VECTOR_BOOL_MODE (NAME, COUNT, BYTESIZE)
+        Create a vector mode called NAME that contains COUNT boolean
+        elements and occupies BYTESIZE bytes in total.  Each boolean
+        element occupies (COUNT * BITS_PER_UNIT) / BYTESIZE bits, with
+        the element at index 0 occupying the lsb of the first byte in
+        memory.  Only the lowest bit of each element is significant.
+
+     COMPLEX_MODES (CLASS);
+        For all modes presently declared in class CLASS, construct
+	corresponding complex modes.  Modes smaller than one byte
+	are ignored.  For FLOAT modes, the names are derived by
+	replacing the 'F' in the mode name with a 'C'.  (It is an
+	error if there is no 'F'.  For INT modes, the names are
+	derived by prefixing a C to the name.
+
+     ADJUST_BYTESIZE (MODE, EXPR);
+     ADJUST_ALIGNMENT (MODE, EXPR);
+     ADJUST_FLOAT_FORMAT (MODE, EXPR);
+     ADJUST_IBIT (MODE, EXPR);
+     ADJUST_FBIT (MODE, EXPR);
+	Arrange for the byte size, alignment, floating point format, ibit,
+	or fbit of MODE to be adjustable at run time.  EXPR will be executed
+	once after processing all command line options, and should
+	evaluate to the desired byte size, alignment, format, ibit or fbit.
+
+	Unlike a FORMAT argument, if you are adjusting a float format
+	you must put an & in front of the name of each format structure.
+
+     ADJUST_NUNITS (MODE, EXPR);
+	Like the above, but set the number of nunits of MODE to EXPR.
+	This changes the size and precision of the mode in proportion
+	to the change in the number of units; for example, doubling
+	the number of units doubles the size and precision as well.
+
+   Note: If a mode is ever made which is more than 255 bytes wide,
+   machmode.h and genmodes.c will have to be changed to allocate
+   more space for the mode_size and mode_alignment arrays.  */
+
+/* VOIDmode is used when no mode needs to be specified,
+   as for example on CONST_INT RTL expressions.  */
+RANDOM_MODE (VOID);
+
+/* BLKmode is used for structures, arrays, etc.
+   that fit no more specific mode.  */
+RANDOM_MODE (BLK);
+
+/* Single bit mode used for booleans.  */
+FRACTIONAL_INT_MODE (BI, 1, 1);
+
+/* Basic integer modes.  We go up to TI in generic code (128 bits).
+   TImode is needed here because the some front ends now genericly
+   support __int128.  If the front ends decide to generically support
+   larger types, then corresponding modes must be added here.  The
+   name OI is reserved for a 256-bit type (needed by some back ends).
+    */
+INT_MODE (QI, 1);
+INT_MODE (HI, 2);
+INT_MODE (SI, 4);
+INT_MODE (DI, 8);
+INT_MODE (TI, 16);
+
+/* No partial integer modes are defined by default.  */
+
+/* The target normally defines any target-specific __intN types and
+   their modes, but __int128 for TImode is fairly common so define it
+   here.  The type will not be created unless the target supports
+   TImode.  */
+
+INT_N (TI, 128);
+
+/* Basic floating point modes.  SF and DF are the only modes provided
+   by default.  The names QF, HF, XF, and TF are reserved for targets
+   that need 1-word, 2-word, 80-bit, or 128-bit float types respectively.
+
+   These are the IEEE mappings.  They can be overridden with
+   RESET_FLOAT_FORMAT or at runtime (in TARGET_OPTION_OVERRIDE).  */
+
+FLOAT_MODE (SF, 4, ieee_single_format);
+FLOAT_MODE (DF, 8, ieee_double_format);
+
+/* Basic CC modes.
+   FIXME define this only for targets that need it.  */
+CC_MODE (CC);
+
+/* Fixed-point modes.  */
+FRACT_MODE (QQ, 1, 7); /* s.7 */
+FRACT_MODE (HQ, 2, 15); /* s.15 */
+FRACT_MODE (SQ, 4, 31); /* s.31 */
+FRACT_MODE (DQ, 8, 63); /* s.63 */
+FRACT_MODE (TQ, 16, 127); /* s.127 */
+
+UFRACT_MODE (UQQ, 1, 8); /* .8 */
+UFRACT_MODE (UHQ, 2, 16); /* .16 */
+UFRACT_MODE (USQ, 4, 32); /* .32 */
+UFRACT_MODE (UDQ, 8, 64); /* .64 */
+UFRACT_MODE (UTQ, 16, 128); /* .128 */
+
+ACCUM_MODE (HA, 2, 8, 7); /* s8.7 */
+ACCUM_MODE (SA, 4, 16, 15); /* s16.15 */
+ACCUM_MODE (DA, 8, 32, 31); /* s32.31 */
+ACCUM_MODE (TA, 16, 64, 63); /* s64.63 */
+
+UACCUM_MODE (UHA, 2, 8, 8); /* 8.8 */
+UACCUM_MODE (USA, 4, 16, 16); /* 16.16 */
+UACCUM_MODE (UDA, 8, 32, 32); /* 32.32 */
+UACCUM_MODE (UTA, 16, 64, 64); /* 64.64 */
+
+/* Allow the target to specify additional modes of various kinds.  */
+#if HAVE_EXTRA_MODES
+# include EXTRA_MODES_FILE
+#endif
+
+/* Complex modes.  */
+COMPLEX_MODES (INT);
+COMPLEX_MODES (PARTIAL_INT);
+COMPLEX_MODES (FLOAT);
+
+/* Decimal floating point modes.  */
+DECIMAL_FLOAT_MODE (SD, 4, decimal_single_format);
+DECIMAL_FLOAT_MODE (DD, 8, decimal_double_format);
+DECIMAL_FLOAT_MODE (TD, 16, decimal_quad_format);
+
+/* The symbol Pmode stands for one of the above machine modes (usually SImode).
+   The tm.h file specifies which one.  It is not a distinct mode.  */
+
+/*
+Local variables:
+mode:c
+version-control: t
+End:
+*/
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/machmode.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/machmode.h
new file mode 100644
index 0000000..3a7cee8
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/machmode.h
@@ -0,0 +1,1171 @@
+/* Machine mode definitions for GCC; included by rtl.h and tree.h.
+   Copyright (C) 1991-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef HAVE_MACHINE_MODES
+#define HAVE_MACHINE_MODES
+
+typedef opt_mode<machine_mode> opt_machine_mode;
+
+extern CONST_MODE_SIZE poly_uint16_pod mode_size[NUM_MACHINE_MODES];
+extern CONST_MODE_PRECISION poly_uint16_pod mode_precision[NUM_MACHINE_MODES];
+extern const unsigned char mode_inner[NUM_MACHINE_MODES];
+extern CONST_MODE_NUNITS poly_uint16_pod mode_nunits[NUM_MACHINE_MODES];
+extern CONST_MODE_UNIT_SIZE unsigned char mode_unit_size[NUM_MACHINE_MODES];
+extern const unsigned short mode_unit_precision[NUM_MACHINE_MODES];
+extern const unsigned char mode_wider[NUM_MACHINE_MODES];
+extern const unsigned char mode_2xwider[NUM_MACHINE_MODES];
+
+template<typename T>
+struct mode_traits
+{
+  /* For use by the machmode support code only.
+
+     There are cases in which the machmode support code needs to forcibly
+     convert a machine_mode to a specific mode class T, and in which the
+     context guarantees that this is valid without the need for an assert.
+     This can be done using:
+
+       return typename mode_traits<T>::from_int (mode);
+
+     when returning a T and:
+
+       res = T (typename mode_traits<T>::from_int (mode));
+
+     when assigning to a value RES that must be assignment-compatible
+     with (but possibly not the same as) T.  */
+#ifdef USE_ENUM_MODES
+  /* Allow direct conversion of enums to specific mode classes only
+     when USE_ENUM_MODES is defined.  This is only intended for use
+     by gencondmd, so that it can tell more easily when .md conditions
+     are always false.  */
+  typedef machine_mode from_int;
+#else
+  /* Here we use an enum type distinct from machine_mode but with the
+     same range as machine_mode.  T should have a constructor that
+     accepts this enum type; it should not have a constructor that
+     accepts machine_mode.
+
+     We use this somewhat indirect approach to avoid too many constructor
+     calls when the compiler is built with -O0.  For example, even in
+     unoptimized code, the return statement above would construct the
+     returned T directly from the numerical value of MODE.  */
+  enum from_int { dummy = MAX_MACHINE_MODE };
+#endif
+};
+
+template<>
+struct mode_traits<machine_mode>
+{
+  /* machine_mode itself needs no conversion.  */
+  typedef machine_mode from_int;
+};
+
+/* Always treat machine modes as fixed-size while compiling code specific
+   to targets that have no variable-size modes.  */
+#if defined (IN_TARGET_CODE) && NUM_POLY_INT_COEFFS == 1
+#define ONLY_FIXED_SIZE_MODES 1
+#else
+#define ONLY_FIXED_SIZE_MODES 0
+#endif
+
+/* Get the name of mode MODE as a string.  */
+
+extern const char * const mode_name[NUM_MACHINE_MODES];
+#define GET_MODE_NAME(MODE)  mode_name[MODE]
+
+/* Mode classes.  */
+
+#include "mode-classes.def"
+#define DEF_MODE_CLASS(M) M
+enum mode_class { MODE_CLASSES, MAX_MODE_CLASS };
+#undef DEF_MODE_CLASS
+#undef MODE_CLASSES
+
+/* Get the general kind of object that mode MODE represents
+   (integer, floating, complex, etc.)  */
+
+extern const unsigned char mode_class[NUM_MACHINE_MODES];
+#define GET_MODE_CLASS(MODE)  ((enum mode_class) mode_class[MODE])
+
+/* Nonzero if MODE is an integral mode.  */
+#define INTEGRAL_MODE_P(MODE)			\
+  (GET_MODE_CLASS (MODE) == MODE_INT		\
+   || GET_MODE_CLASS (MODE) == MODE_PARTIAL_INT \
+   || GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT \
+   || GET_MODE_CLASS (MODE) == MODE_VECTOR_BOOL \
+   || GET_MODE_CLASS (MODE) == MODE_VECTOR_INT)
+
+/* Nonzero if MODE is a floating-point mode.  */
+#define FLOAT_MODE_P(MODE)		\
+  (GET_MODE_CLASS (MODE) == MODE_FLOAT	\
+   || GET_MODE_CLASS (MODE) == MODE_DECIMAL_FLOAT \
+   || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT \
+   || GET_MODE_CLASS (MODE) == MODE_VECTOR_FLOAT)
+
+/* Nonzero if MODE is a complex mode.  */
+#define COMPLEX_MODE_P(MODE)			\
+  (GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT	\
+   || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT)
+
+/* Nonzero if MODE is a vector mode.  */
+#define VECTOR_MODE_P(MODE)				\
+  (GET_MODE_CLASS (MODE) == MODE_VECTOR_BOOL		\
+   || GET_MODE_CLASS (MODE) == MODE_VECTOR_INT		\
+   || GET_MODE_CLASS (MODE) == MODE_VECTOR_FLOAT	\
+   || GET_MODE_CLASS (MODE) == MODE_VECTOR_FRACT	\
+   || GET_MODE_CLASS (MODE) == MODE_VECTOR_UFRACT	\
+   || GET_MODE_CLASS (MODE) == MODE_VECTOR_ACCUM	\
+   || GET_MODE_CLASS (MODE) == MODE_VECTOR_UACCUM)
+
+/* Nonzero if MODE is a scalar integral mode.  */
+#define SCALAR_INT_MODE_P(MODE)			\
+  (GET_MODE_CLASS (MODE) == MODE_INT		\
+   || GET_MODE_CLASS (MODE) == MODE_PARTIAL_INT)
+
+/* Nonzero if MODE is a scalar floating point mode.  */
+#define SCALAR_FLOAT_MODE_P(MODE)		\
+  (GET_MODE_CLASS (MODE) == MODE_FLOAT		\
+   || GET_MODE_CLASS (MODE) == MODE_DECIMAL_FLOAT)
+
+/* Nonzero if MODE is a decimal floating point mode.  */
+#define DECIMAL_FLOAT_MODE_P(MODE)		\
+  (GET_MODE_CLASS (MODE) == MODE_DECIMAL_FLOAT)
+
+/* Nonzero if MODE is a scalar fract mode.  */
+#define SCALAR_FRACT_MODE_P(MODE)	\
+  (GET_MODE_CLASS (MODE) == MODE_FRACT)
+
+/* Nonzero if MODE is a scalar ufract mode.  */
+#define SCALAR_UFRACT_MODE_P(MODE)	\
+  (GET_MODE_CLASS (MODE) == MODE_UFRACT)
+
+/* Nonzero if MODE is a scalar fract or ufract mode.  */
+#define ALL_SCALAR_FRACT_MODE_P(MODE)	\
+  (SCALAR_FRACT_MODE_P (MODE) || SCALAR_UFRACT_MODE_P (MODE))
+
+/* Nonzero if MODE is a scalar accum mode.  */
+#define SCALAR_ACCUM_MODE_P(MODE)	\
+  (GET_MODE_CLASS (MODE) == MODE_ACCUM)
+
+/* Nonzero if MODE is a scalar uaccum mode.  */
+#define SCALAR_UACCUM_MODE_P(MODE)	\
+  (GET_MODE_CLASS (MODE) == MODE_UACCUM)
+
+/* Nonzero if MODE is a scalar accum or uaccum mode.  */
+#define ALL_SCALAR_ACCUM_MODE_P(MODE)	\
+  (SCALAR_ACCUM_MODE_P (MODE) || SCALAR_UACCUM_MODE_P (MODE))
+
+/* Nonzero if MODE is a scalar fract or accum mode.  */
+#define SIGNED_SCALAR_FIXED_POINT_MODE_P(MODE)	\
+  (SCALAR_FRACT_MODE_P (MODE) || SCALAR_ACCUM_MODE_P (MODE))
+
+/* Nonzero if MODE is a scalar ufract or uaccum mode.  */
+#define UNSIGNED_SCALAR_FIXED_POINT_MODE_P(MODE)	\
+  (SCALAR_UFRACT_MODE_P (MODE) || SCALAR_UACCUM_MODE_P (MODE))
+
+/* Nonzero if MODE is a scalar fract, ufract, accum or uaccum mode.  */
+#define ALL_SCALAR_FIXED_POINT_MODE_P(MODE)	\
+  (SIGNED_SCALAR_FIXED_POINT_MODE_P (MODE)	\
+   || UNSIGNED_SCALAR_FIXED_POINT_MODE_P (MODE))
+
+/* Nonzero if MODE is a scalar/vector fract mode.  */
+#define FRACT_MODE_P(MODE)		\
+  (GET_MODE_CLASS (MODE) == MODE_FRACT	\
+   || GET_MODE_CLASS (MODE) == MODE_VECTOR_FRACT)
+
+/* Nonzero if MODE is a scalar/vector ufract mode.  */
+#define UFRACT_MODE_P(MODE)		\
+  (GET_MODE_CLASS (MODE) == MODE_UFRACT	\
+   || GET_MODE_CLASS (MODE) == MODE_VECTOR_UFRACT)
+
+/* Nonzero if MODE is a scalar/vector fract or ufract mode.  */
+#define ALL_FRACT_MODE_P(MODE)		\
+  (FRACT_MODE_P (MODE) || UFRACT_MODE_P (MODE))
+
+/* Nonzero if MODE is a scalar/vector accum mode.  */
+#define ACCUM_MODE_P(MODE)		\
+  (GET_MODE_CLASS (MODE) == MODE_ACCUM	\
+   || GET_MODE_CLASS (MODE) == MODE_VECTOR_ACCUM)
+
+/* Nonzero if MODE is a scalar/vector uaccum mode.  */
+#define UACCUM_MODE_P(MODE)		\
+  (GET_MODE_CLASS (MODE) == MODE_UACCUM	\
+   || GET_MODE_CLASS (MODE) == MODE_VECTOR_UACCUM)
+
+/* Nonzero if MODE is a scalar/vector accum or uaccum mode.  */
+#define ALL_ACCUM_MODE_P(MODE)		\
+  (ACCUM_MODE_P (MODE) || UACCUM_MODE_P (MODE))
+
+/* Nonzero if MODE is a scalar/vector fract or accum mode.  */
+#define SIGNED_FIXED_POINT_MODE_P(MODE)		\
+  (FRACT_MODE_P (MODE) || ACCUM_MODE_P (MODE))
+
+/* Nonzero if MODE is a scalar/vector ufract or uaccum mode.  */
+#define UNSIGNED_FIXED_POINT_MODE_P(MODE)	\
+  (UFRACT_MODE_P (MODE) || UACCUM_MODE_P (MODE))
+
+/* Nonzero if MODE is a scalar/vector fract, ufract, accum or uaccum mode.  */
+#define ALL_FIXED_POINT_MODE_P(MODE)		\
+  (SIGNED_FIXED_POINT_MODE_P (MODE)		\
+   || UNSIGNED_FIXED_POINT_MODE_P (MODE))
+
+/* Nonzero if CLASS modes can be widened.  */
+#define CLASS_HAS_WIDER_MODES_P(CLASS)         \
+  (CLASS == MODE_INT                           \
+   || CLASS == MODE_PARTIAL_INT                \
+   || CLASS == MODE_FLOAT                      \
+   || CLASS == MODE_DECIMAL_FLOAT              \
+   || CLASS == MODE_COMPLEX_FLOAT              \
+   || CLASS == MODE_FRACT                      \
+   || CLASS == MODE_UFRACT                     \
+   || CLASS == MODE_ACCUM                      \
+   || CLASS == MODE_UACCUM)
+
+/* An optional T (i.e. a T or nothing), where T is some form of mode class.  */
+template<typename T>
+class opt_mode
+{
+public:
+  enum from_int { dummy = MAX_MACHINE_MODE };
+
+  ALWAYS_INLINE opt_mode () : m_mode (E_VOIDmode) {}
+  ALWAYS_INLINE opt_mode (const T &m) : m_mode (m) {}
+  template<typename U>
+  ALWAYS_INLINE opt_mode (const U &m) : m_mode (T (m)) {}
+  ALWAYS_INLINE opt_mode (from_int m) : m_mode (machine_mode (m)) {}
+
+  machine_mode else_void () const;
+  machine_mode else_blk () const;
+  T require () const;
+
+  bool exists () const;
+  template<typename U> bool exists (U *) const;
+
+private:
+  machine_mode m_mode;
+};
+
+/* If the object contains a T, return its enum value, otherwise return
+   E_VOIDmode.  */
+
+template<typename T>
+ALWAYS_INLINE machine_mode
+opt_mode<T>::else_void () const
+{
+  return m_mode;
+}
+
+/* If the T exists, return its enum value, otherwise return E_BLKmode.  */
+
+template<typename T>
+inline machine_mode
+opt_mode<T>::else_blk () const
+{
+  return m_mode == E_VOIDmode ? E_BLKmode : m_mode;
+}
+
+/* Assert that the object contains a T and return it.  */
+
+template<typename T>
+inline T
+opt_mode<T>::require () const
+{
+  gcc_checking_assert (m_mode != E_VOIDmode);
+  return typename mode_traits<T>::from_int (m_mode);
+}
+
+/* Return true if the object contains a T rather than nothing.  */
+
+template<typename T>
+ALWAYS_INLINE bool
+opt_mode<T>::exists () const
+{
+  return m_mode != E_VOIDmode;
+}
+
+/* Return true if the object contains a T, storing it in *MODE if so.  */
+
+template<typename T>
+template<typename U>
+inline bool
+opt_mode<T>::exists (U *mode) const
+{
+  if (m_mode != E_VOIDmode)
+    {
+      *mode = T (typename mode_traits<T>::from_int (m_mode));
+      return true;
+    }
+  return false;
+}
+
+/* A POD version of mode class T.  */
+
+template<typename T>
+struct pod_mode
+{
+  typedef typename mode_traits<T>::from_int from_int;
+  typedef typename T::measurement_type measurement_type;
+
+  machine_mode m_mode;
+  ALWAYS_INLINE operator machine_mode () const { return m_mode; }
+  ALWAYS_INLINE operator T () const { return from_int (m_mode); }
+  ALWAYS_INLINE pod_mode &operator = (const T &m) { m_mode = m; return *this; }
+};
+
+/* Return true if mode M has type T.  */
+
+template<typename T>
+inline bool
+is_a (machine_mode m)
+{
+  return T::includes_p (m);
+}
+
+template<typename T, typename U>
+inline bool
+is_a (const opt_mode<U> &m)
+{
+  return T::includes_p (m.else_void ());
+}
+
+/* Assert that mode M has type T, and return it in that form.  */
+
+template<typename T>
+inline T
+as_a (machine_mode m)
+{
+  gcc_checking_assert (T::includes_p (m));
+  return typename mode_traits<T>::from_int (m);
+}
+
+template<typename T, typename U>
+inline T
+as_a (const opt_mode<U> &m)
+{
+  return as_a <T> (m.else_void ());
+}
+
+/* Convert M to an opt_mode<T>.  */
+
+template<typename T>
+inline opt_mode<T>
+dyn_cast (machine_mode m)
+{
+  if (T::includes_p (m))
+    return T (typename mode_traits<T>::from_int (m));
+  return opt_mode<T> ();
+}
+
+template<typename T, typename U>
+inline opt_mode<T>
+dyn_cast (const opt_mode<U> &m)
+{
+  return dyn_cast <T> (m.else_void ());
+}
+
+/* Return true if mode M has type T, storing it as a T in *RESULT
+   if so.  */
+
+template<typename T, typename U>
+inline bool
+is_a (machine_mode m, U *result)
+{
+  if (T::includes_p (m))
+    {
+      *result = T (typename mode_traits<T>::from_int (m));
+      return true;
+    }
+  return false;
+}
+
+/* Represents a machine mode that is known to be a SCALAR_INT_MODE_P.  */
+class scalar_int_mode
+{
+public:
+  typedef mode_traits<scalar_int_mode>::from_int from_int;
+  typedef unsigned short measurement_type;
+
+  ALWAYS_INLINE scalar_int_mode () {}
+  ALWAYS_INLINE scalar_int_mode (from_int m) : m_mode (machine_mode (m)) {}
+  ALWAYS_INLINE operator machine_mode () const { return m_mode; }
+
+  static bool includes_p (machine_mode);
+
+protected:
+  machine_mode m_mode;
+};
+
+/* Return true if M is a scalar_int_mode.  */
+
+inline bool
+scalar_int_mode::includes_p (machine_mode m)
+{
+  return SCALAR_INT_MODE_P (m);
+}
+
+/* Represents a machine mode that is known to be a SCALAR_FLOAT_MODE_P.  */
+class scalar_float_mode
+{
+public:
+  typedef mode_traits<scalar_float_mode>::from_int from_int;
+  typedef unsigned short measurement_type;
+
+  ALWAYS_INLINE scalar_float_mode () {}
+  ALWAYS_INLINE scalar_float_mode (from_int m) : m_mode (machine_mode (m)) {}
+  ALWAYS_INLINE operator machine_mode () const { return m_mode; }
+
+  static bool includes_p (machine_mode);
+
+protected:
+  machine_mode m_mode;
+};
+
+/* Return true if M is a scalar_float_mode.  */
+
+inline bool
+scalar_float_mode::includes_p (machine_mode m)
+{
+  return SCALAR_FLOAT_MODE_P (m);
+}
+
+/* Represents a machine mode that is known to be scalar.  */
+class scalar_mode
+{
+public:
+  typedef mode_traits<scalar_mode>::from_int from_int;
+  typedef unsigned short measurement_type;
+
+  ALWAYS_INLINE scalar_mode () {}
+  ALWAYS_INLINE scalar_mode (from_int m) : m_mode (machine_mode (m)) {}
+  ALWAYS_INLINE scalar_mode (const scalar_int_mode &m) : m_mode (m) {}
+  ALWAYS_INLINE scalar_mode (const scalar_float_mode &m) : m_mode (m) {}
+  ALWAYS_INLINE scalar_mode (const scalar_int_mode_pod &m) : m_mode (m) {}
+  ALWAYS_INLINE operator machine_mode () const { return m_mode; }
+
+  static bool includes_p (machine_mode);
+
+protected:
+  machine_mode m_mode;
+};
+
+/* Return true if M represents some kind of scalar value.  */
+
+inline bool
+scalar_mode::includes_p (machine_mode m)
+{
+  switch (GET_MODE_CLASS (m))
+    {
+    case MODE_INT:
+    case MODE_PARTIAL_INT:
+    case MODE_FRACT:
+    case MODE_UFRACT:
+    case MODE_ACCUM:
+    case MODE_UACCUM:
+    case MODE_FLOAT:
+    case MODE_DECIMAL_FLOAT:
+      return true;
+    default:
+      return false;
+    }
+}
+
+/* Represents a machine mode that is known to be a COMPLEX_MODE_P.  */
+class complex_mode
+{
+public:
+  typedef mode_traits<complex_mode>::from_int from_int;
+  typedef unsigned short measurement_type;
+
+  ALWAYS_INLINE complex_mode () {}
+  ALWAYS_INLINE complex_mode (from_int m) : m_mode (machine_mode (m)) {}
+  ALWAYS_INLINE operator machine_mode () const { return m_mode; }
+
+  static bool includes_p (machine_mode);
+
+protected:
+  machine_mode m_mode;
+};
+
+/* Return true if M is a complex_mode.  */
+
+inline bool
+complex_mode::includes_p (machine_mode m)
+{
+  return COMPLEX_MODE_P (m);
+}
+
+/* Return the base GET_MODE_SIZE value for MODE.  */
+
+ALWAYS_INLINE poly_uint16
+mode_to_bytes (machine_mode mode)
+{
+#if GCC_VERSION >= 4001
+  return (__builtin_constant_p (mode)
+	  ? mode_size_inline (mode) : mode_size[mode]);
+#else
+  return mode_size[mode];
+#endif
+}
+
+/* Return the base GET_MODE_BITSIZE value for MODE.  */
+
+ALWAYS_INLINE poly_uint16
+mode_to_bits (machine_mode mode)
+{
+  return mode_to_bytes (mode) * BITS_PER_UNIT;
+}
+
+/* Return the base GET_MODE_PRECISION value for MODE.  */
+
+ALWAYS_INLINE poly_uint16
+mode_to_precision (machine_mode mode)
+{
+  return mode_precision[mode];
+}
+
+/* Return the base GET_MODE_INNER value for MODE.  */
+
+ALWAYS_INLINE scalar_mode
+mode_to_inner (machine_mode mode)
+{
+#if GCC_VERSION >= 4001
+  return scalar_mode::from_int (__builtin_constant_p (mode)
+				? mode_inner_inline (mode)
+				: mode_inner[mode]);
+#else
+  return scalar_mode::from_int (mode_inner[mode]);
+#endif
+}
+
+/* Return the base GET_MODE_UNIT_SIZE value for MODE.  */
+
+ALWAYS_INLINE unsigned char
+mode_to_unit_size (machine_mode mode)
+{
+#if GCC_VERSION >= 4001
+  return (__builtin_constant_p (mode)
+	  ? mode_unit_size_inline (mode) : mode_unit_size[mode]);
+#else
+  return mode_unit_size[mode];
+#endif
+}
+
+/* Return the base GET_MODE_UNIT_PRECISION value for MODE.  */
+
+ALWAYS_INLINE unsigned short
+mode_to_unit_precision (machine_mode mode)
+{
+#if GCC_VERSION >= 4001
+  return (__builtin_constant_p (mode)
+	  ? mode_unit_precision_inline (mode) : mode_unit_precision[mode]);
+#else
+  return mode_unit_precision[mode];
+#endif
+}
+
+/* Return the base GET_MODE_NUNITS value for MODE.  */
+
+ALWAYS_INLINE poly_uint16
+mode_to_nunits (machine_mode mode)
+{
+#if GCC_VERSION >= 4001
+  return (__builtin_constant_p (mode)
+	  ? mode_nunits_inline (mode) : mode_nunits[mode]);
+#else
+  return mode_nunits[mode];
+#endif
+}
+
+/* Get the size in bytes of an object of mode MODE.  */
+
+#if ONLY_FIXED_SIZE_MODES
+#define GET_MODE_SIZE(MODE) ((unsigned short) mode_to_bytes (MODE).coeffs[0])
+#else
+ALWAYS_INLINE poly_uint16
+GET_MODE_SIZE (machine_mode mode)
+{
+  return mode_to_bytes (mode);
+}
+
+template<typename T>
+ALWAYS_INLINE typename if_poly<typename T::measurement_type>::type
+GET_MODE_SIZE (const T &mode)
+{
+  return mode_to_bytes (mode);
+}
+
+template<typename T>
+ALWAYS_INLINE typename if_nonpoly<typename T::measurement_type>::type
+GET_MODE_SIZE (const T &mode)
+{
+  return mode_to_bytes (mode).coeffs[0];
+}
+#endif
+
+/* Get the size in bits of an object of mode MODE.  */
+
+#if ONLY_FIXED_SIZE_MODES
+#define GET_MODE_BITSIZE(MODE) ((unsigned short) mode_to_bits (MODE).coeffs[0])
+#else
+ALWAYS_INLINE poly_uint16
+GET_MODE_BITSIZE (machine_mode mode)
+{
+  return mode_to_bits (mode);
+}
+
+template<typename T>
+ALWAYS_INLINE typename if_poly<typename T::measurement_type>::type
+GET_MODE_BITSIZE (const T &mode)
+{
+  return mode_to_bits (mode);
+}
+
+template<typename T>
+ALWAYS_INLINE typename if_nonpoly<typename T::measurement_type>::type
+GET_MODE_BITSIZE (const T &mode)
+{
+  return mode_to_bits (mode).coeffs[0];
+}
+#endif
+
+/* Get the number of value bits of an object of mode MODE.  */
+
+#if ONLY_FIXED_SIZE_MODES
+#define GET_MODE_PRECISION(MODE) \
+  ((unsigned short) mode_to_precision (MODE).coeffs[0])
+#else
+ALWAYS_INLINE poly_uint16
+GET_MODE_PRECISION (machine_mode mode)
+{
+  return mode_to_precision (mode);
+}
+
+template<typename T>
+ALWAYS_INLINE typename if_poly<typename T::measurement_type>::type
+GET_MODE_PRECISION (const T &mode)
+{
+  return mode_to_precision (mode);
+}
+
+template<typename T>
+ALWAYS_INLINE typename if_nonpoly<typename T::measurement_type>::type
+GET_MODE_PRECISION (const T &mode)
+{
+  return mode_to_precision (mode).coeffs[0];
+}
+#endif
+
+/* Get the number of integral bits of an object of mode MODE.  */
+extern CONST_MODE_IBIT unsigned char mode_ibit[NUM_MACHINE_MODES];
+#define GET_MODE_IBIT(MODE) mode_ibit[MODE]
+
+/* Get the number of fractional bits of an object of mode MODE.  */
+extern CONST_MODE_FBIT unsigned char mode_fbit[NUM_MACHINE_MODES];
+#define GET_MODE_FBIT(MODE) mode_fbit[MODE]
+
+/* Get a bitmask containing 1 for all bits in a word
+   that fit within mode MODE.  */
+
+extern const unsigned HOST_WIDE_INT mode_mask_array[NUM_MACHINE_MODES];
+
+#define GET_MODE_MASK(MODE) mode_mask_array[MODE]
+
+/* Return the mode of the basic parts of MODE.  For vector modes this is the
+   mode of the vector elements.  For complex modes it is the mode of the real
+   and imaginary parts.  For other modes it is MODE itself.  */
+
+#define GET_MODE_INNER(MODE) (mode_to_inner (MODE))
+
+/* Get the size in bytes or bits of the basic parts of an
+   object of mode MODE.  */
+
+#define GET_MODE_UNIT_SIZE(MODE) mode_to_unit_size (MODE)
+
+#define GET_MODE_UNIT_BITSIZE(MODE) \
+  ((unsigned short) (GET_MODE_UNIT_SIZE (MODE) * BITS_PER_UNIT))
+
+#define GET_MODE_UNIT_PRECISION(MODE) (mode_to_unit_precision (MODE))
+
+/* Get the number of units in an object of mode MODE.  This is 2 for
+   complex modes and the number of elements for vector modes.  */
+
+#if ONLY_FIXED_SIZE_MODES
+#define GET_MODE_NUNITS(MODE) (mode_to_nunits (MODE).coeffs[0])
+#else
+ALWAYS_INLINE poly_uint16
+GET_MODE_NUNITS (machine_mode mode)
+{
+  return mode_to_nunits (mode);
+}
+
+template<typename T>
+ALWAYS_INLINE typename if_poly<typename T::measurement_type>::type
+GET_MODE_NUNITS (const T &mode)
+{
+  return mode_to_nunits (mode);
+}
+
+template<typename T>
+ALWAYS_INLINE typename if_nonpoly<typename T::measurement_type>::type
+GET_MODE_NUNITS (const T &mode)
+{
+  return mode_to_nunits (mode).coeffs[0];
+}
+#endif
+
+/* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI).  */
+
+template<typename T>
+ALWAYS_INLINE opt_mode<T>
+GET_MODE_WIDER_MODE (const T &m)
+{
+  return typename opt_mode<T>::from_int (mode_wider[m]);
+}
+
+/* For scalars, this is a mode with twice the precision.  For vectors,
+   this is a mode with the same inner mode but with twice the elements.  */
+
+template<typename T>
+ALWAYS_INLINE opt_mode<T>
+GET_MODE_2XWIDER_MODE (const T &m)
+{
+  return typename opt_mode<T>::from_int (mode_2xwider[m]);
+}
+
+/* Get the complex mode from the component mode.  */
+extern const unsigned char mode_complex[NUM_MACHINE_MODES];
+#define GET_MODE_COMPLEX_MODE(MODE) ((machine_mode) mode_complex[MODE])
+
+/* Represents a machine mode that must have a fixed size.  The main
+   use of this class is to represent the modes of objects that always
+   have static storage duration, such as constant pool entries.
+   (No current target supports the concept of variable-size static data.)  */
+class fixed_size_mode
+{
+public:
+  typedef mode_traits<fixed_size_mode>::from_int from_int;
+  typedef unsigned short measurement_type;
+
+  ALWAYS_INLINE fixed_size_mode () {}
+  ALWAYS_INLINE fixed_size_mode (from_int m) : m_mode (machine_mode (m)) {}
+  ALWAYS_INLINE fixed_size_mode (const scalar_mode &m) : m_mode (m) {}
+  ALWAYS_INLINE fixed_size_mode (const scalar_int_mode &m) : m_mode (m) {}
+  ALWAYS_INLINE fixed_size_mode (const scalar_float_mode &m) : m_mode (m) {}
+  ALWAYS_INLINE fixed_size_mode (const scalar_mode_pod &m) : m_mode (m) {}
+  ALWAYS_INLINE fixed_size_mode (const scalar_int_mode_pod &m) : m_mode (m) {}
+  ALWAYS_INLINE fixed_size_mode (const complex_mode &m) : m_mode (m) {}
+  ALWAYS_INLINE operator machine_mode () const { return m_mode; }
+
+  static bool includes_p (machine_mode);
+
+protected:
+  machine_mode m_mode;
+};
+
+/* Return true if MODE has a fixed size.  */
+
+inline bool
+fixed_size_mode::includes_p (machine_mode mode)
+{
+  return mode_to_bytes (mode).is_constant ();
+}
+
+/* Wrapper for mode arguments to target macros, so that if a target
+   doesn't need polynomial-sized modes, its header file can continue
+   to treat everything as fixed_size_mode.  This should go away once
+   macros are moved to target hooks.  It shouldn't be used in other
+   contexts.  */
+#if NUM_POLY_INT_COEFFS == 1
+#define MACRO_MODE(MODE) (as_a <fixed_size_mode> (MODE))
+#else
+#define MACRO_MODE(MODE) (MODE)
+#endif
+
+extern opt_machine_mode mode_for_size (poly_uint64, enum mode_class, int);
+
+/* Return the machine mode to use for a MODE_INT of SIZE bits, if one
+   exists.  If LIMIT is nonzero, modes wider than MAX_FIXED_MODE_SIZE
+   will not be used.  */
+
+inline opt_scalar_int_mode
+int_mode_for_size (poly_uint64 size, int limit)
+{
+  return dyn_cast <scalar_int_mode> (mode_for_size (size, MODE_INT, limit));
+}
+
+/* Return the machine mode to use for a MODE_FLOAT of SIZE bits, if one
+   exists.  */
+
+inline opt_scalar_float_mode
+float_mode_for_size (poly_uint64 size)
+{
+  return dyn_cast <scalar_float_mode> (mode_for_size (size, MODE_FLOAT, 0));
+}
+
+/* Likewise for MODE_DECIMAL_FLOAT.  */
+
+inline opt_scalar_float_mode
+decimal_float_mode_for_size (unsigned int size)
+{
+  return dyn_cast <scalar_float_mode>
+    (mode_for_size (size, MODE_DECIMAL_FLOAT, 0));
+}
+
+extern machine_mode smallest_mode_for_size (poly_uint64, enum mode_class);
+
+/* Find the narrowest integer mode that contains at least SIZE bits.
+   Such a mode must exist.  */
+
+inline scalar_int_mode
+smallest_int_mode_for_size (poly_uint64 size)
+{
+  return as_a <scalar_int_mode> (smallest_mode_for_size (size, MODE_INT));
+}
+
+extern opt_scalar_int_mode int_mode_for_mode (machine_mode);
+extern opt_machine_mode bitwise_mode_for_mode (machine_mode);
+extern opt_machine_mode mode_for_vector (scalar_mode, poly_uint64);
+extern opt_machine_mode mode_for_int_vector (unsigned int, poly_uint64);
+
+/* Return the integer vector equivalent of MODE, if one exists.  In other
+   words, return the mode for an integer vector that has the same number
+   of bits as MODE and the same number of elements as MODE, with the
+   latter being 1 if MODE is scalar.  The returned mode can be either
+   an integer mode or a vector mode.  */
+
+inline opt_machine_mode
+mode_for_int_vector (machine_mode mode)
+{
+  return mode_for_int_vector (GET_MODE_UNIT_BITSIZE (mode),
+			      GET_MODE_NUNITS (mode));
+}
+
+/* A class for iterating through possible bitfield modes.  */
+class bit_field_mode_iterator
+{
+public:
+  bit_field_mode_iterator (HOST_WIDE_INT, HOST_WIDE_INT,
+			   poly_int64, poly_int64,
+			   unsigned int, bool);
+  bool next_mode (scalar_int_mode *);
+  bool prefer_smaller_modes ();
+
+private:
+  opt_scalar_int_mode m_mode;
+  /* We use signed values here because the bit position can be negative
+     for invalid input such as gcc.dg/pr48335-8.c.  */
+  HOST_WIDE_INT m_bitsize;
+  HOST_WIDE_INT m_bitpos;
+  poly_int64 m_bitregion_start;
+  poly_int64 m_bitregion_end;
+  unsigned int m_align;
+  bool m_volatilep;
+  int m_count;
+};
+
+/* Find the best mode to use to access a bit field.  */
+
+extern bool get_best_mode (int, int, poly_uint64, poly_uint64, unsigned int,
+			   unsigned HOST_WIDE_INT, bool, scalar_int_mode *);
+
+/* Determine alignment, 1<=result<=BIGGEST_ALIGNMENT.  */
+
+extern CONST_MODE_BASE_ALIGN unsigned short mode_base_align[NUM_MACHINE_MODES];
+
+extern unsigned get_mode_alignment (machine_mode);
+
+#define GET_MODE_ALIGNMENT(MODE) get_mode_alignment (MODE)
+
+/* For each class, get the narrowest mode in that class.  */
+
+extern const unsigned char class_narrowest_mode[MAX_MODE_CLASS];
+#define GET_CLASS_NARROWEST_MODE(CLASS) \
+  ((machine_mode) class_narrowest_mode[CLASS])
+
+/* The narrowest full integer mode available on the target.  */
+
+#define NARROWEST_INT_MODE \
+  (scalar_int_mode \
+   (scalar_int_mode::from_int (class_narrowest_mode[MODE_INT])))
+
+/* Return the narrowest mode in T's class.  */
+
+template<typename T>
+inline T
+get_narrowest_mode (T mode)
+{
+  return typename mode_traits<T>::from_int
+    (class_narrowest_mode[GET_MODE_CLASS (mode)]);
+}
+
+/* Define the integer modes whose sizes are BITS_PER_UNIT and BITS_PER_WORD
+   and the mode whose class is Pmode and whose size is POINTER_SIZE.  */
+
+extern scalar_int_mode byte_mode;
+extern scalar_int_mode word_mode;
+extern scalar_int_mode ptr_mode;
+
+/* Target-dependent machine mode initialization - in insn-modes.c.  */
+extern void init_adjust_machine_modes (void);
+
+#define TRULY_NOOP_TRUNCATION_MODES_P(MODE1, MODE2) \
+  (targetm.truly_noop_truncation (GET_MODE_PRECISION (MODE1), \
+				  GET_MODE_PRECISION (MODE2)))
+
+/* Return true if MODE is a scalar integer mode that fits in a
+   HOST_WIDE_INT.  */
+
+inline bool
+HWI_COMPUTABLE_MODE_P (machine_mode mode)
+{
+  machine_mode mme = mode;
+  return (SCALAR_INT_MODE_P (mme)
+	  && mode_to_precision (mme).coeffs[0] <= HOST_BITS_PER_WIDE_INT);
+}
+
+inline bool
+HWI_COMPUTABLE_MODE_P (scalar_int_mode mode)
+{
+  return GET_MODE_PRECISION (mode) <= HOST_BITS_PER_WIDE_INT;
+}
+
+struct int_n_data_t {
+  /* These parts are initailized by genmodes output */
+  unsigned int bitsize;
+  scalar_int_mode_pod m;
+  /* RID_* is RID_INTN_BASE + index into this array */
+};
+
+/* This is also in tree.h.  genmodes.c guarantees the're sorted from
+   smallest bitsize to largest bitsize. */
+extern bool int_n_enabled_p[NUM_INT_N_ENTS];
+extern const int_n_data_t int_n_data[NUM_INT_N_ENTS];
+
+/* Return true if MODE has class MODE_INT, storing it as a scalar_int_mode
+   in *INT_MODE if so.  */
+
+template<typename T>
+inline bool
+is_int_mode (machine_mode mode, T *int_mode)
+{
+  if (GET_MODE_CLASS (mode) == MODE_INT)
+    {
+      *int_mode = scalar_int_mode (scalar_int_mode::from_int (mode));
+      return true;
+    }
+  return false;
+}
+
+/* Return true if MODE has class MODE_FLOAT, storing it as a
+   scalar_float_mode in *FLOAT_MODE if so.  */
+
+template<typename T>
+inline bool
+is_float_mode (machine_mode mode, T *float_mode)
+{
+  if (GET_MODE_CLASS (mode) == MODE_FLOAT)
+    {
+      *float_mode = scalar_float_mode (scalar_float_mode::from_int (mode));
+      return true;
+    }
+  return false;
+}
+
+/* Return true if MODE has class MODE_COMPLEX_INT, storing it as
+   a complex_mode in *CMODE if so.  */
+
+template<typename T>
+inline bool
+is_complex_int_mode (machine_mode mode, T *cmode)
+{
+  if (GET_MODE_CLASS (mode) == MODE_COMPLEX_INT)
+    {
+      *cmode = complex_mode (complex_mode::from_int (mode));
+      return true;
+    }
+  return false;
+}
+
+/* Return true if MODE has class MODE_COMPLEX_FLOAT, storing it as
+   a complex_mode in *CMODE if so.  */
+
+template<typename T>
+inline bool
+is_complex_float_mode (machine_mode mode, T *cmode)
+{
+  if (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT)
+    {
+      *cmode = complex_mode (complex_mode::from_int (mode));
+      return true;
+    }
+  return false;
+}
+
+/* Return true if MODE is a scalar integer mode with a precision
+   smaller than LIMIT's precision.  */
+
+inline bool
+is_narrower_int_mode (machine_mode mode, scalar_int_mode limit)
+{
+  scalar_int_mode int_mode;
+  return (is_a <scalar_int_mode> (mode, &int_mode)
+	  && GET_MODE_PRECISION (int_mode) < GET_MODE_PRECISION (limit));
+}
+
+namespace mode_iterator
+{
+  /* Start mode iterator *ITER at the first mode in class MCLASS, if any.  */
+
+  template<typename T>
+  inline void
+  start (opt_mode<T> *iter, enum mode_class mclass)
+  {
+    if (GET_CLASS_NARROWEST_MODE (mclass) == E_VOIDmode)
+      *iter = opt_mode<T> ();
+    else
+      *iter = as_a<T> (GET_CLASS_NARROWEST_MODE (mclass));
+  }
+
+  inline void
+  start (machine_mode *iter, enum mode_class mclass)
+  {
+    *iter = GET_CLASS_NARROWEST_MODE (mclass);
+  }
+
+  /* Return true if mode iterator *ITER has not reached the end.  */
+
+  template<typename T>
+  inline bool
+  iterate_p (opt_mode<T> *iter)
+  {
+    return iter->exists ();
+  }
+
+  inline bool
+  iterate_p (machine_mode *iter)
+  {
+    return *iter != E_VOIDmode;
+  }
+
+  /* Set mode iterator *ITER to the next widest mode in the same class,
+     if any.  */
+
+  template<typename T>
+  inline void
+  get_wider (opt_mode<T> *iter)
+  {
+    *iter = GET_MODE_WIDER_MODE (iter->require ());
+  }
+
+  inline void
+  get_wider (machine_mode *iter)
+  {
+    *iter = GET_MODE_WIDER_MODE (*iter).else_void ();
+  }
+
+  /* Set mode iterator *ITER to the next widest mode in the same class.
+     Such a mode is known to exist.  */
+
+  template<typename T>
+  inline void
+  get_known_wider (T *iter)
+  {
+    *iter = GET_MODE_WIDER_MODE (*iter).require ();
+  }
+
+  /* Set mode iterator *ITER to the mode that is two times wider than the
+     current one, if such a mode exists.  */
+
+  template<typename T>
+  inline void
+  get_2xwider (opt_mode<T> *iter)
+  {
+    *iter = GET_MODE_2XWIDER_MODE (iter->require ());
+  }
+
+  inline void
+  get_2xwider (machine_mode *iter)
+  {
+    *iter = GET_MODE_2XWIDER_MODE (*iter).else_void ();
+  }
+}
+
+/* Make ITERATOR iterate over all the modes in mode class CLASS,
+   from narrowest to widest.  */
+#define FOR_EACH_MODE_IN_CLASS(ITERATOR, CLASS)  \
+  for (mode_iterator::start (&(ITERATOR), CLASS); \
+       mode_iterator::iterate_p (&(ITERATOR)); \
+       mode_iterator::get_wider (&(ITERATOR)))
+
+/* Make ITERATOR iterate over all the modes in the range [START, END),
+   in order of increasing width.  */
+#define FOR_EACH_MODE(ITERATOR, START, END) \
+  for ((ITERATOR) = (START); \
+       (ITERATOR) != (END); \
+       mode_iterator::get_known_wider (&(ITERATOR)))
+
+/* Make ITERATOR iterate over START and all wider modes in the same
+   class, in order of increasing width.  */
+#define FOR_EACH_MODE_FROM(ITERATOR, START) \
+  for ((ITERATOR) = (START); \
+       mode_iterator::iterate_p (&(ITERATOR)); \
+       mode_iterator::get_wider (&(ITERATOR)))
+
+/* Make ITERATOR iterate over modes in the range [NARROWEST, END)
+   in order of increasing width, where NARROWEST is the narrowest mode
+   in END's class.  */
+#define FOR_EACH_MODE_UNTIL(ITERATOR, END) \
+  FOR_EACH_MODE (ITERATOR, get_narrowest_mode (END), END)
+
+/* Make ITERATOR iterate over modes in the same class as MODE, in order
+   of increasing width.  Start at the first mode wider than START,
+   or don't iterate at all if there is no wider mode.  */
+#define FOR_EACH_WIDER_MODE(ITERATOR, START) \
+  for ((ITERATOR) = (START), mode_iterator::get_wider (&(ITERATOR)); \
+       mode_iterator::iterate_p (&(ITERATOR)); \
+       mode_iterator::get_wider (&(ITERATOR)))
+
+/* Make ITERATOR iterate over modes in the same class as MODE, in order
+   of increasing width, and with each mode being twice the width of the
+   previous mode.  Start at the mode that is two times wider than START,
+   or don't iterate at all if there is no such mode.  */
+#define FOR_EACH_2XWIDER_MODE(ITERATOR, START) \
+  for ((ITERATOR) = (START), mode_iterator::get_2xwider (&(ITERATOR)); \
+       mode_iterator::iterate_p (&(ITERATOR)); \
+       mode_iterator::get_2xwider (&(ITERATOR)))
+
+template<typename T>
+void
+gt_ggc_mx (pod_mode<T> *)
+{
+}
+
+template<typename T>
+void
+gt_pch_nx (pod_mode<T> *)
+{
+}
+
+template<typename T>
+void
+gt_pch_nx (pod_mode<T> *, void (*) (void *, void *), void *)
+{
+}
+
+#endif /* not HAVE_MACHINE_MODES */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/md5.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/md5.h
new file mode 100644
index 0000000..10f234c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/md5.h
@@ -0,0 +1,154 @@
+/* md5.h - Declaration of functions and data types used for MD5 sum
+   computing library functions.
+   Copyright (C) 1995-2019 Free Software Foundation, Inc.
+   NOTE: The canonical source of this file is maintained with the GNU C
+   Library.  Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 2, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifndef _MD5_H
+#define _MD5_H 1
+
+#include <stdio.h>
+
+#if defined HAVE_LIMITS_H || _LIBC
+# include <limits.h>
+#endif
+
+#include "ansidecl.h"
+
+/* The following contortions are an attempt to use the C preprocessor
+   to determine an unsigned integral type that is 32 bits wide.  An
+   alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
+   doing that would require that the configure script compile and *run*
+   the resulting executable.  Locally running cross-compiled executables
+   is usually not possible.  */
+
+#ifdef _LIBC
+# include <sys/types.h>
+typedef u_int32_t md5_uint32;
+typedef uintptr_t md5_uintptr;
+#elif defined (HAVE_SYS_TYPES_H) && defined (HAVE_STDINT_H)
+#include <stdint.h>
+#include <sys/types.h>
+typedef uint32_t md5_uint32;
+typedef uintptr_t md5_uintptr;
+#else
+#  define INT_MAX_32_BITS 2147483647
+
+/* If UINT_MAX isn't defined, assume it's a 32-bit type.
+   This should be valid for all systems GNU cares about because
+   that doesn't include 16-bit systems, and only modern systems
+   (that certainly have <limits.h>) have 64+-bit integral types.  */
+
+# ifndef INT_MAX
+#  define INT_MAX INT_MAX_32_BITS
+# endif
+
+# if INT_MAX == INT_MAX_32_BITS
+   typedef unsigned int md5_uint32;
+# else
+#  if SHRT_MAX == INT_MAX_32_BITS
+    typedef unsigned short md5_uint32;
+#  else
+#   if LONG_MAX == INT_MAX_32_BITS
+     typedef unsigned long md5_uint32;
+#   else
+     /* The following line is intended to evoke an error.
+        Using #error is not portable enough.  */
+     "Cannot determine unsigned 32-bit data type."
+#   endif
+#  endif
+# endif
+/* We have to make a guess about the integer type equivalent in size
+   to pointers which should always be correct.  */
+typedef unsigned long int md5_uintptr;
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Structure to save state of computation between the single steps.  */
+struct md5_ctx
+{
+  md5_uint32 A;
+  md5_uint32 B;
+  md5_uint32 C;
+  md5_uint32 D;
+
+  md5_uint32 total[2];
+  md5_uint32 buflen;
+  char buffer[128] ATTRIBUTE_ALIGNED_ALIGNOF(md5_uint32);
+};
+
+/*
+ * The following three functions are build up the low level used in
+ * the functions `md5_stream' and `md5_buffer'.
+ */
+
+/* Initialize structure containing state of computation.
+   (RFC 1321, 3.3: Step 3)  */
+extern void md5_init_ctx (struct md5_ctx *ctx);
+
+/* Starting with the result of former calls of this function (or the
+   initialization function update the context for the next LEN bytes
+   starting at BUFFER.
+   It is necessary that LEN is a multiple of 64!!! */
+extern void md5_process_block (const void *buffer, size_t len,
+                               struct md5_ctx *ctx);
+
+/* Starting with the result of former calls of this function (or the
+   initialization function update the context for the next LEN bytes
+   starting at BUFFER.
+   It is NOT required that LEN is a multiple of 64.  */
+extern void md5_process_bytes (const void *buffer, size_t len,
+                               struct md5_ctx *ctx);
+
+/* Process the remaining bytes in the buffer and put result from CTX
+   in first 16 bytes following RESBUF.  The result is always in little
+   endian byte order, so that a byte-wise output yields to the wanted
+   ASCII representation of the message digest.
+
+   IMPORTANT: On some systems it is required that RESBUF is correctly
+   aligned for a 32 bits value.  */
+extern void *md5_finish_ctx (struct md5_ctx *ctx, void *resbuf);
+
+
+/* Put result from CTX in first 16 bytes following RESBUF.  The result is
+   always in little endian byte order, so that a byte-wise output yields
+   to the wanted ASCII representation of the message digest.
+
+   IMPORTANT: On some systems it is required that RESBUF is correctly
+   aligned for a 32 bits value.  */
+extern void *md5_read_ctx (const struct md5_ctx *ctx, void *resbuf);
+
+
+/* Compute MD5 message digest for bytes read from STREAM.  The
+   resulting message digest number will be written into the 16 bytes
+   beginning at RESBLOCK.  */
+extern int md5_stream (FILE *stream, void *resblock);
+
+/* Compute MD5 message digest for LEN bytes beginning at BUFFER.  The
+   result is always in little endian byte order, so that a byte-wise
+   output yields to the wanted ASCII representation of the message
+   digest.  */
+extern void *md5_buffer (const char *buffer, size_t len, void *resblock);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/mem-stats-traits.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/mem-stats-traits.h
new file mode 100644
index 0000000..7e591e6
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/mem-stats-traits.h
@@ -0,0 +1,41 @@
+/* A memory statistics traits.
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+   Contributed by Martin Liska  <mliska@suse.cz>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_MEM_STATS_TRAITS_H
+#define GCC_MEM_STATS_TRAITS_H
+
+/* Memory allocation origin.  */
+enum mem_alloc_origin
+{
+  HASH_TABLE_ORIGIN,
+  HASH_MAP_ORIGIN,
+  HASH_SET_ORIGIN,
+  VEC_ORIGIN,
+  BITMAP_ORIGIN,
+  GGC_ORIGIN,
+  ALLOC_POOL_ORIGIN,
+  MEM_ALLOC_ORIGIN_LENGTH
+};
+
+/* Verbose names of the memory allocation origin.  */
+static const char * mem_alloc_origin_names[] = { "Hash tables", "Hash maps",
+  "Hash sets", "Heap vectors", "Bitmaps", "GGC memory", "Allocation pool" };
+
+#endif // GCC_MEM_STATS_TRAITS_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/mem-stats.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/mem-stats.h
new file mode 100644
index 0000000..63ce871
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/mem-stats.h
@@ -0,0 +1,665 @@
+/* A memory statistics tracking infrastructure.
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+   Contributed by Martin Liska  <mliska@suse.cz>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_MEM_STATS_H
+#define GCC_MEM_STATS_H
+
+/* Forward declaration.  */
+template<typename Key, typename Value,
+	 typename Traits = simple_hashmap_traits<default_hash_traits<Key>,
+						 Value> >
+class hash_map;
+
+#define LOCATION_LINE_EXTRA_SPACE 30
+#define LOCATION_LINE_WIDTH	  48
+
+/* Memory allocation location.  */
+struct mem_location
+{
+  /* Default constructor.  */
+  inline
+  mem_location () {}
+
+  /* Constructor.  */
+  inline
+  mem_location (mem_alloc_origin origin, bool ggc,
+		const char *filename = NULL, int line = 0,
+		const char *function = NULL):
+    m_filename (filename), m_function (function), m_line (line), m_origin
+    (origin), m_ggc (ggc) {}
+
+  /* Copy constructor.  */
+  inline
+  mem_location (mem_location &other): m_filename (other.m_filename),
+    m_function (other.m_function), m_line (other.m_line),
+    m_origin (other.m_origin), m_ggc (other.m_ggc) {}
+
+  /* Compute hash value based on file name, function name and line in
+     source code. As there is just a single pointer registered for every
+     constant that points to e.g. the same file name, we can use hash
+     of the pointer.  */
+  hashval_t
+  hash ()
+  {
+    inchash::hash hash;
+
+    hash.add_ptr (m_filename);
+    hash.add_ptr (m_function);
+    hash.add_int (m_line);
+
+    return hash.end ();
+  }
+
+  /* Return true if the memory location is equal to OTHER.  */
+  int
+  equal (mem_location &other)
+  {
+    return m_filename == other.m_filename && m_function == other.m_function
+      && m_line == other.m_line;
+  }
+
+  /* Return trimmed filename for the location.  */
+  inline const char *
+  get_trimmed_filename ()
+  {
+    const char *s1 = m_filename;
+    const char *s2;
+
+    while ((s2 = strstr (s1, "gcc/")))
+      s1 = s2 + 4;
+
+    return s1;
+  }
+
+  inline char *
+  to_string ()
+  {
+    unsigned l = strlen (get_trimmed_filename ()) + strlen (m_function)
+      + LOCATION_LINE_EXTRA_SPACE;
+
+    char *s = XNEWVEC (char, l);
+    sprintf (s, "%s:%i (%s)", get_trimmed_filename (),
+	     m_line, m_function);
+
+    s[MIN (LOCATION_LINE_WIDTH, l - 1)] = '\0';
+
+    return s;
+  }
+
+  /* Return display name associated to ORIGIN type.  */
+  static const char *
+  get_origin_name (mem_alloc_origin origin)
+  {
+    return mem_alloc_origin_names[(unsigned) origin];
+  }
+
+  /* File name of source code.  */
+  const char *m_filename;
+  /* Funcation name.  */
+  const char *m_function;
+  /* Line number in source code.  */
+  int m_line;
+  /* Origin type.  */
+  mem_alloc_origin m_origin;
+  /* Flag if used by GGC allocation.  */
+  bool m_ggc;
+};
+
+/* Memory usage register to a memory location.  */
+struct mem_usage
+{
+  /* Default constructor.  */
+  mem_usage (): m_allocated (0), m_times (0), m_peak (0), m_instances (1) {}
+
+  /* Constructor.  */
+  mem_usage (size_t allocated, size_t times, size_t peak, size_t instances = 0):
+    m_allocated (allocated), m_times (times), m_peak (peak),
+    m_instances (instances) {}
+
+  /* Register overhead of SIZE bytes.  */
+  inline void
+  register_overhead (size_t size)
+  {
+    m_allocated += size;
+    m_times++;
+
+    if (m_peak < m_allocated)
+      m_peak = m_allocated;
+  }
+
+  /* Release overhead of SIZE bytes.  */
+  inline void
+  release_overhead (size_t size)
+  {
+    gcc_assert (size <= m_allocated);
+
+    m_allocated -= size;
+  }
+
+  /* Sum the usage with SECOND usage.  */
+  mem_usage
+  operator+ (const mem_usage &second)
+  {
+    return mem_usage (m_allocated + second.m_allocated,
+		      m_times + second.m_times,
+		      m_peak + second.m_peak,
+		      m_instances + second.m_instances);
+  }
+
+  /* Equality operator.  */
+  inline bool
+  operator== (const mem_usage &second) const
+  {
+    return (m_allocated == second.m_allocated
+	    && m_peak == second.m_peak
+	    && m_times == second.m_times);
+  }
+
+  /* Comparison operator.  */
+  inline bool
+  operator< (const mem_usage &second) const
+  {
+    if (*this == second)
+      return false;
+
+    return (m_allocated == second.m_allocated ?
+	    (m_peak == second.m_peak ? m_times < second.m_times
+	     : m_peak < second.m_peak) : m_allocated < second.m_allocated);
+  }
+
+  /* Compare wrapper used by qsort method.  */
+  static int
+  compare (const void *first, const void *second)
+  {
+    typedef std::pair<mem_location *, mem_usage *> mem_pair_t;
+
+    const mem_pair_t f = *(const mem_pair_t *)first;
+    const mem_pair_t s = *(const mem_pair_t *)second;
+
+    if (*f.second == *s.second)
+      return 0;
+
+    return *f.second < *s.second ? 1 : -1;
+  }
+
+  /* Dump usage coupled to LOC location, where TOTAL is sum of all rows.  */
+  inline void
+  dump (mem_location *loc, mem_usage &total) const
+  {
+    char *location_string = loc->to_string ();
+
+    fprintf (stderr, "%-48s " PRsa (9) ":%5.1f%%"
+	     PRsa (9) PRsa (9) ":%5.1f%%%10s\n",
+	     location_string, SIZE_AMOUNT (m_allocated),
+	     get_percent (m_allocated, total.m_allocated),
+	     SIZE_AMOUNT (m_peak), SIZE_AMOUNT (m_times),
+	     get_percent (m_times, total.m_times), loc->m_ggc ? "ggc" : "heap");
+
+    free (location_string);
+  }
+
+  /* Dump footer.  */
+  inline void
+  dump_footer () const
+  {
+    fprintf (stderr, "%s" PRsa (53) PRsa (26) "\n", "Total",
+	     SIZE_AMOUNT (m_allocated), SIZE_AMOUNT (m_times));
+  }
+
+  /* Return fraction of NOMINATOR and DENOMINATOR in percent.  */
+  static inline float
+  get_percent (size_t nominator, size_t denominator)
+  {
+    return denominator == 0 ? 0.0f : nominator * 100.0 / denominator;
+  }
+
+  /* Print line made of dashes.  */
+  static inline void
+  print_dash_line (size_t count = 140)
+  {
+    while (count--)
+      fputc ('-', stderr);
+    fputc ('\n', stderr);
+  }
+
+  /* Dump header with NAME.  */
+  static inline void
+  dump_header (const char *name)
+  {
+    fprintf (stderr, "%-48s %11s%16s%10s%17s\n", name, "Leak", "Peak",
+	     "Times", "Type");
+  }
+
+  /* Current number of allocated bytes.  */
+  size_t m_allocated;
+  /* Number of allocations.  */
+  size_t m_times;
+  /* Peak allocation in bytes.  */
+  size_t m_peak;
+  /* Number of container instances.  */
+  size_t m_instances;
+};
+
+/* Memory usage pair that connectes memory usage and number
+   of allocated bytes.  */
+template <class T>
+struct mem_usage_pair
+{
+  mem_usage_pair (T *usage_, size_t allocated_): usage (usage_),
+  allocated (allocated_) {}
+
+  T *usage;
+  size_t allocated;
+};
+
+/* Memory allocation description.  */
+template <class T>
+class mem_alloc_description
+{
+public:
+  struct mem_location_hash : nofree_ptr_hash <mem_location>
+  {
+    static hashval_t
+    hash (value_type l)
+    {
+      inchash::hash hstate;
+
+      hstate.add_ptr ((const void *)l->m_filename);
+      hstate.add_ptr (l->m_function);
+      hstate.add_int (l->m_line);
+
+      return hstate.end ();
+    }
+
+    static bool
+    equal (value_type l1, value_type l2)
+    {
+      return (l1->m_filename == l2->m_filename
+	      && l1->m_function == l2->m_function
+	      && l1->m_line == l2->m_line);
+    }
+  };
+
+  /* Internal class type definitions.  */
+  typedef hash_map <mem_location_hash, T *> mem_map_t;
+  typedef hash_map <const void *, mem_usage_pair<T> > reverse_mem_map_t;
+  typedef hash_map <const void *, std::pair<T *, size_t> > reverse_object_map_t;
+  typedef std::pair <mem_location *, T *> mem_list_t;
+
+  /* Default contructor.  */
+  mem_alloc_description ();
+
+  /* Default destructor.  */
+  ~mem_alloc_description ();
+
+  /* Returns true if instance PTR is registered by the memory description.  */
+  bool contains_descriptor_for_instance (const void *ptr);
+
+  /* Return descriptor for instance PTR.  */
+  T *get_descriptor_for_instance (const void *ptr);
+
+  /* Register memory allocation descriptor for container PTR which is
+     described by a memory LOCATION.  */
+  T *register_descriptor (const void *ptr, mem_location *location);
+
+  /* Register memory allocation descriptor for container PTR.  ORIGIN identifies
+     type of container and GGC identifes if the allocation is handled in GGC
+     memory.  Each location is identified by file NAME, LINE in source code and
+     FUNCTION name.  */
+  T *register_descriptor (const void *ptr, mem_alloc_origin origin,
+			  bool ggc, const char *name, int line,
+			  const char *function);
+
+  /* Register instance overhead identified by PTR pointer. Allocation takes
+     SIZE bytes.  */
+  T *register_instance_overhead (size_t size, const void *ptr);
+
+  /* For containers (and GGC) where we want to track every instance object,
+     we register allocation of SIZE bytes, identified by PTR pointer, belonging
+     to USAGE descriptor.  */
+  void register_object_overhead (T *usage, size_t size, const void *ptr);
+
+  /* Release PTR pointer of SIZE bytes. If REMOVE_FROM_MAP is set to true,
+     remove the instance from reverse map.  Return memory usage that belongs
+     to this memory description.  */
+  T *release_instance_overhead (void *ptr, size_t size,
+				bool remove_from_map = false);
+
+  /* Release instance object identified by PTR pointer.  */
+  void release_object_overhead (void *ptr);
+
+  /* Unregister a memory allocation descriptor registered with
+     register_descriptor (remove from reverse map), unless it is
+     unregistered through release_instance_overhead with
+     REMOVE_FROM_MAP = true.  */
+  void unregister_descriptor (void *ptr);
+
+  /* Get sum value for ORIGIN type of allocation for the descriptor.  */
+  T get_sum (mem_alloc_origin origin);
+
+  /* Get all tracked instances registered by the description. Items
+     are filtered by ORIGIN type, LENGTH is return value where we register
+     the number of elements in the list. If we want to process custom order,
+     CMP comparator can be provided.  */
+  mem_list_t *get_list (mem_alloc_origin origin, unsigned *length,
+			int (*cmp) (const void *first,
+				    const void *second) = NULL);
+
+  /* Dump all tracked instances of type ORIGIN. If we want to process custom
+     order, CMP comparator can be provided.  */
+  void dump (mem_alloc_origin origin,
+	     int (*cmp) (const void *first, const void *second) = NULL);
+
+  /* Reverse object map used for every object allocation mapping.  */
+  reverse_object_map_t *m_reverse_object_map;
+
+private:
+  /* Register overhead of SIZE bytes of ORIGIN type. PTR pointer is allocated
+     in NAME source file, at LINE in source code, in FUNCTION.  */
+  T *register_overhead (size_t size, mem_alloc_origin origin, const char *name,
+			int line, const char *function, const void *ptr);
+
+  /* Allocation location coupled to the description.  */
+  mem_location m_location;
+
+  /* Location to usage mapping.  */
+  mem_map_t *m_map;
+
+  /* Reverse pointer to usage mapping.  */
+  reverse_mem_map_t *m_reverse_map;
+};
+
+/* Returns true if instance PTR is registered by the memory description.  */
+
+template <class T>
+inline bool
+mem_alloc_description<T>::contains_descriptor_for_instance (const void *ptr)
+{
+  return m_reverse_map->get (ptr);
+}
+
+/* Return descriptor for instance PTR.  */
+
+template <class T>
+inline T*
+mem_alloc_description<T>::get_descriptor_for_instance (const void *ptr)
+{
+  return m_reverse_map->get (ptr) ? (*m_reverse_map->get (ptr)).usage : NULL;
+}
+
+/* Register memory allocation descriptor for container PTR which is
+   described by a memory LOCATION.  */
+
+template <class T>
+inline T*
+mem_alloc_description<T>::register_descriptor (const void *ptr,
+					       mem_location *location)
+{
+  T *usage = NULL;
+
+  T **slot = m_map->get (location);
+  if (slot)
+    {
+      delete location;
+      usage = *slot;
+      usage->m_instances++;
+    }
+  else
+    {
+      usage = new T ();
+      m_map->put (location, usage);
+    }
+
+  if (!m_reverse_map->get (ptr))
+    m_reverse_map->put (ptr, mem_usage_pair<T> (usage, 0));
+
+  return usage;
+}
+
+/* Register memory allocation descriptor for container PTR.  ORIGIN identifies
+   type of container and GGC identifes if the allocation is handled in GGC
+   memory.  Each location is identified by file NAME, LINE in source code and
+   FUNCTION name.  */
+
+template <class T>
+inline T*
+mem_alloc_description<T>::register_descriptor (const void *ptr,
+					       mem_alloc_origin origin,
+					       bool ggc,
+					       const char *filename,
+					       int line,
+					       const char *function)
+{
+  mem_location *l = new mem_location (origin, ggc, filename, line, function);
+  return register_descriptor (ptr, l);
+}
+
+/* Register instance overhead identified by PTR pointer. Allocation takes
+   SIZE bytes.  */
+
+template <class T>
+inline T*
+mem_alloc_description<T>::register_instance_overhead (size_t size,
+						      const void *ptr)
+{
+  mem_usage_pair <T> *slot = m_reverse_map->get (ptr);
+  if (!slot)
+    {
+      /* Due to PCH, it can really happen.  */
+      return NULL;
+    }
+
+  T *usage = (*slot).usage;
+  usage->register_overhead (size);
+
+  return usage;
+}
+
+/* For containers (and GGC) where we want to track every instance object,
+   we register allocation of SIZE bytes, identified by PTR pointer, belonging
+   to USAGE descriptor.  */
+
+template <class T>
+void
+mem_alloc_description<T>::register_object_overhead (T *usage, size_t size,
+						    const void *ptr)
+{
+  /* In case of GGC, it is possible to have already occupied the memory
+     location.  */
+  m_reverse_object_map->put (ptr, std::pair<T *, size_t> (usage, size));
+}
+
+/* Register overhead of SIZE bytes of ORIGIN type. PTR pointer is allocated
+   in NAME source file, at LINE in source code, in FUNCTION.  */
+
+template <class T>
+inline T*
+mem_alloc_description<T>::register_overhead (size_t size,
+					     mem_alloc_origin origin,
+					     const char *filename,
+					     int line,
+					     const char *function,
+					     const void *ptr)
+{
+  T *usage = register_descriptor (ptr, origin, filename, line, function);
+  usage->register_overhead (size);
+
+  return usage;
+}
+
+/* Release PTR pointer of SIZE bytes.  */
+
+template <class T>
+inline T *
+mem_alloc_description<T>::release_instance_overhead (void *ptr, size_t size,
+						     bool remove_from_map)
+{
+  mem_usage_pair<T> *slot = m_reverse_map->get (ptr);
+
+  if (!slot)
+    {
+      /* Due to PCH, it can really happen.  */
+      return NULL;
+    }
+
+  T *usage = (*slot).usage;
+  usage->release_overhead (size);
+
+  if (remove_from_map)
+    m_reverse_map->remove (ptr);
+
+  return usage;
+}
+
+/* Release instance object identified by PTR pointer.  */
+
+template <class T>
+inline void
+mem_alloc_description<T>::release_object_overhead (void *ptr)
+{
+  std::pair <T *, size_t> *entry = m_reverse_object_map->get (ptr);
+  if (entry)
+    {
+      entry->first->release_overhead (entry->second);
+      m_reverse_object_map->remove (ptr);
+    }
+}
+
+/* Unregister a memory allocation descriptor registered with
+   register_descriptor (remove from reverse map), unless it is
+   unregistered through release_instance_overhead with
+   REMOVE_FROM_MAP = true.  */
+template <class T>
+inline void
+mem_alloc_description<T>::unregister_descriptor (void *ptr)
+{
+  m_reverse_map->remove (ptr);
+}
+
+/* Default contructor.  */
+
+template <class T>
+inline
+mem_alloc_description<T>::mem_alloc_description ()
+{
+  m_map = new mem_map_t (13, false, false);
+  m_reverse_map = new reverse_mem_map_t (13, false, false);
+  m_reverse_object_map = new reverse_object_map_t (13, false, false);
+}
+
+/* Default destructor.  */
+
+template <class T>
+inline
+mem_alloc_description<T>::~mem_alloc_description ()
+{
+  for (typename mem_map_t::iterator it = m_map->begin (); it != m_map->end ();
+       ++it)
+    {
+      delete (*it).first;
+      delete (*it).second;
+    }
+
+  delete m_map;
+  delete m_reverse_map;
+  delete m_reverse_object_map;
+}
+
+/* Get all tracked instances registered by the description. Items are filtered
+   by ORIGIN type, LENGTH is return value where we register the number of
+   elements in the list. If we want to process custom order, CMP comparator
+   can be provided.  */
+
+template <class T>
+inline
+typename mem_alloc_description<T>::mem_list_t *
+mem_alloc_description<T>::get_list (mem_alloc_origin origin, unsigned *length,
+				    int (*cmp) (const void *first,
+						const void *second))
+{
+  /* vec data structure is not used because all vectors generate memory
+     allocation info a it would create a cycle.  */
+  size_t element_size = sizeof (mem_list_t);
+  mem_list_t *list = XCNEWVEC (mem_list_t, m_map->elements ());
+  unsigned i = 0;
+
+  for (typename mem_map_t::iterator it = m_map->begin (); it != m_map->end ();
+       ++it)
+    if ((*it).first->m_origin == origin)
+      list[i++] = std::pair<mem_location*, T*> (*it);
+
+  qsort (list, i, element_size, cmp == NULL ? T::compare : cmp);
+  *length = i;
+
+  return list;
+}
+
+/* Get sum value for ORIGIN type of allocation for the descriptor.  */
+
+template <class T>
+inline T
+mem_alloc_description<T>::get_sum (mem_alloc_origin origin)
+{
+  unsigned length;
+  mem_list_t *list = get_list (origin, &length);
+  T sum;
+
+  for (unsigned i = 0; i < length; i++)
+    sum = sum + *list[i].second;
+
+  XDELETEVEC (list);
+
+  return sum;
+}
+
+/* Dump all tracked instances of type ORIGIN. If we want to process custom
+   order, CMP comparator can be provided.  */
+
+template <class T>
+inline void
+mem_alloc_description<T>::dump (mem_alloc_origin origin,
+				int (*cmp) (const void *first,
+					    const void *second))
+{
+  unsigned length;
+
+  fprintf (stderr, "\n");
+
+  mem_list_t *list = get_list (origin, &length, cmp);
+  T total = get_sum (origin);
+
+  T::print_dash_line ();
+  T::dump_header (mem_location::get_origin_name (origin));
+  T::print_dash_line ();
+  for (int i = length - 1; i >= 0; i--)
+    list[i].second->dump (list[i].first, total);
+  T::print_dash_line ();
+
+  T::dump_header (mem_location::get_origin_name (origin));
+  T::print_dash_line ();
+  total.dump_footer ();
+  T::print_dash_line ();
+
+  XDELETEVEC (list);
+
+  fprintf (stderr, "\n");
+}
+
+#endif // GCC_MEM_STATS_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/memmodel.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/memmodel.h
new file mode 100644
index 0000000..87c3529
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/memmodel.h
@@ -0,0 +1,116 @@
+/* Prototypes of memory model helper functions.
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_MEMMODEL_H
+#define GCC_MEMMODEL_H
+
+/* Suppose that higher bits are target dependent. */
+#define MEMMODEL_MASK ((1<<16)-1)
+
+/* Legacy sync operations set this upper flag in the memory model.  This allows
+   targets that need to do something stronger for sync operations to
+   differentiate with their target patterns and issue a more appropriate insn
+   sequence.  See bugzilla 65697 for background.  */
+#define MEMMODEL_SYNC (1<<15)
+
+/* Memory model without SYNC bit for targets/operations that do not care.  */
+#define MEMMODEL_BASE_MASK (MEMMODEL_SYNC-1)
+
+/* Memory model types for the __atomic* builtins.
+   This must match the order in libstdc++-v3/include/bits/atomic_base.h.  */
+enum memmodel
+{
+  MEMMODEL_RELAXED = 0,
+  MEMMODEL_CONSUME = 1,
+  MEMMODEL_ACQUIRE = 2,
+  MEMMODEL_RELEASE = 3,
+  MEMMODEL_ACQ_REL = 4,
+  MEMMODEL_SEQ_CST = 5,
+  MEMMODEL_LAST = 6,
+  MEMMODEL_SYNC_ACQUIRE = MEMMODEL_ACQUIRE | MEMMODEL_SYNC,
+  MEMMODEL_SYNC_RELEASE = MEMMODEL_RELEASE | MEMMODEL_SYNC,
+  MEMMODEL_SYNC_SEQ_CST = MEMMODEL_SEQ_CST | MEMMODEL_SYNC,
+  /* Say that all the higher bits are valid target extensions.  */
+  MEMMODEL_MAX = INTTYPE_MAXIMUM (int)
+};
+
+/* Return the memory model from a host integer.  */
+static inline enum memmodel
+memmodel_from_int (unsigned HOST_WIDE_INT val)
+{
+  return (enum memmodel) (val & MEMMODEL_MASK);
+}
+
+/* Return the base memory model from a host integer.  */
+static inline enum memmodel
+memmodel_base (unsigned HOST_WIDE_INT val)
+{
+  return (enum memmodel) (val & MEMMODEL_BASE_MASK);
+}
+
+/* Return TRUE if the memory model is RELAXED.  */
+static inline bool
+is_mm_relaxed (enum memmodel model)
+{
+  return (model & MEMMODEL_BASE_MASK) == MEMMODEL_RELAXED;
+}
+
+/* Return TRUE if the memory model is CONSUME.  */
+static inline bool
+is_mm_consume (enum memmodel model)
+{
+  return (model & MEMMODEL_BASE_MASK) == MEMMODEL_CONSUME;
+}
+
+/* Return TRUE if the memory model is ACQUIRE.  */
+static inline bool
+is_mm_acquire (enum memmodel model)
+{
+  return (model & MEMMODEL_BASE_MASK) == MEMMODEL_ACQUIRE;
+}
+
+/* Return TRUE if the memory model is RELEASE.  */
+static inline bool
+is_mm_release (enum memmodel model)
+{
+  return (model & MEMMODEL_BASE_MASK) == MEMMODEL_RELEASE;
+}
+
+/* Return TRUE if the memory model is ACQ_REL.  */
+static inline bool
+is_mm_acq_rel (enum memmodel model)
+{
+  return (model & MEMMODEL_BASE_MASK) == MEMMODEL_ACQ_REL;
+}
+
+/* Return TRUE if the memory model is SEQ_CST.  */
+static inline bool
+is_mm_seq_cst (enum memmodel model)
+{
+  return (model & MEMMODEL_BASE_MASK) == MEMMODEL_SEQ_CST;
+}
+
+/* Return TRUE if the memory model is a SYNC variant.  */
+static inline bool
+is_mm_sync (enum memmodel model)
+{
+  return (model & MEMMODEL_SYNC);
+}
+
+#endif  /* GCC_MEMMODEL_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/memory-block.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/memory-block.h
new file mode 100644
index 0000000..8ebeee0
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/memory-block.h
@@ -0,0 +1,81 @@
+/* Shared pool of memory blocks for pool allocators.
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+#ifndef MEMORY_BLOCK_H
+#define MEMORY_BLOCK_H
+
+/* Shared pool which allows other memory pools to reuse each others' allocated
+   memory blocks instead of calling free/malloc again.  */
+class memory_block_pool
+{
+public:
+  /* Blocks have fixed size.  This is necessary for sharing.  */
+  static const size_t block_size = 64 * 1024;
+
+  memory_block_pool ();
+
+  static inline void *allocate () ATTRIBUTE_MALLOC;
+  static inline void release (void *);
+  void clear_free_list ();
+
+private:
+  /* memory_block_pool singleton instance, defined in memory-block.cc.  */
+  static memory_block_pool instance;
+
+  struct block_list
+  {
+    block_list *m_next;
+  };
+
+  /* Free list.  */
+  block_list *m_blocks;
+};
+
+/* Allocate a single block.  Reuse a previously returned block, if possible.  */
+inline void *
+memory_block_pool::allocate ()
+{
+  if (instance.m_blocks == NULL)
+    return XNEWVEC (char, block_size);
+
+  void *result = instance.m_blocks;
+  instance.m_blocks = instance.m_blocks->m_next;
+  VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (result, block_size));
+  return result;
+}
+
+/* Return UNCAST_BLOCK to the pool.  */
+inline void
+memory_block_pool::release (void *uncast_block)
+{
+  block_list *block = new (uncast_block) block_list;
+  block->m_next = instance.m_blocks;
+  instance.m_blocks = block;
+
+  VALGRIND_DISCARD (VALGRIND_MAKE_MEM_NOACCESS ((char *)uncast_block
+						+ sizeof (block_list),
+						block_size
+						- sizeof (block_list)));
+}
+
+extern void *mempool_obstack_chunk_alloc (size_t) ATTRIBUTE_MALLOC;
+extern void mempool_obstack_chunk_free (void *);
+
+#endif /* MEMORY_BLOCK_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/mode-classes.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/mode-classes.def
new file mode 100644
index 0000000..a363998
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/mode-classes.def
@@ -0,0 +1,39 @@
+/* Machine mode class definitions for GCC.
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#define MODE_CLASSES							   \
+  DEF_MODE_CLASS (MODE_RANDOM),		/* other */			   \
+  DEF_MODE_CLASS (MODE_CC),		/* condition code in a register */ \
+  DEF_MODE_CLASS (MODE_INT),		/* integer */			   \
+  DEF_MODE_CLASS (MODE_PARTIAL_INT),	/* integer with padding bits */    \
+  DEF_MODE_CLASS (MODE_FRACT),		/* signed fractional number */	   \
+  DEF_MODE_CLASS (MODE_UFRACT),		/* unsigned fractional number */   \
+  DEF_MODE_CLASS (MODE_ACCUM),		/* signed accumulator */	   \
+  DEF_MODE_CLASS (MODE_UACCUM),		/* unsigned accumulator */	   \
+  DEF_MODE_CLASS (MODE_FLOAT),		/* floating point */		   \
+  DEF_MODE_CLASS (MODE_DECIMAL_FLOAT),	/* decimal floating point */	   \
+  DEF_MODE_CLASS (MODE_COMPLEX_INT), 	/* complex numbers */		   \
+  DEF_MODE_CLASS (MODE_COMPLEX_FLOAT),					   \
+  DEF_MODE_CLASS (MODE_VECTOR_BOOL),	/* vectors of single bits */	   \
+  DEF_MODE_CLASS (MODE_VECTOR_INT),	/* SIMD vectors */		   \
+  DEF_MODE_CLASS (MODE_VECTOR_FRACT),	/* SIMD vectors */		   \
+  DEF_MODE_CLASS (MODE_VECTOR_UFRACT),	/* SIMD vectors */		   \
+  DEF_MODE_CLASS (MODE_VECTOR_ACCUM),	/* SIMD vectors */		   \
+  DEF_MODE_CLASS (MODE_VECTOR_UACCUM),	/* SIMD vectors */		   \
+  DEF_MODE_CLASS (MODE_VECTOR_FLOAT)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/objc/objc-tree.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/objc/objc-tree.def
new file mode 100644
index 0000000..4512fdf
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/objc/objc-tree.def
@@ -0,0 +1,76 @@
+/* This file contains the definitions and documentation for the
+   additional tree codes used in the Objective C front end (see tree.def
+   for the standard codes).
+   Copyright (C) 1990-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+/* Objective-C types.  */
+DEFTREECODE (CLASS_INTERFACE_TYPE, "class_interface_type", tcc_type, 0)
+DEFTREECODE (CLASS_IMPLEMENTATION_TYPE, "class_implementation_type",
+	     tcc_type, 0)
+DEFTREECODE (CATEGORY_INTERFACE_TYPE, "category_interface_type", tcc_type, 0)
+DEFTREECODE (CATEGORY_IMPLEMENTATION_TYPE,"category_implementation_type",
+	     tcc_type, 0)
+DEFTREECODE (PROTOCOL_INTERFACE_TYPE, "protocol_interface_type", tcc_type, 0)
+
+/* Objective-C decls.  */
+DEFTREECODE (KEYWORD_DECL, "keyword_decl", tcc_declaration, 0)
+DEFTREECODE (INSTANCE_METHOD_DECL, "instance_method_decl", tcc_declaration, 0)
+DEFTREECODE (CLASS_METHOD_DECL, "class_method_decl", tcc_declaration, 0)
+DEFTREECODE (PROPERTY_DECL, "property_decl", tcc_declaration, 0)
+
+/* Objective-C expressions.  */
+DEFTREECODE (MESSAGE_SEND_EXPR, "message_send_expr", tcc_expression, 3)
+DEFTREECODE (CLASS_REFERENCE_EXPR, "class_reference_expr", tcc_expression, 1)
+
+/* This tree is used to represent the expression 'object.property',
+   where 'object' is an Objective-C object and 'property' is an
+   Objective-C property.  Operand 0 is the object (the tree
+   representing the expression), and Operand 1 is the property (the
+   PROPERTY_DECL).  Operand 2 is the 'getter' call, ready to be used;
+   we pregenerate it because it is hard to generate it properly later
+   on.  Operand 3 records whether using the 'getter' call should
+   generate a deprecation warning or not.
+
+   A PROPERTY_REF tree needs to be transformed into 'setter' and
+   'getter' calls at some point; at the moment this happens in two
+   places:
+
+     * if we detect that a modify expression is being applied to a
+       PROPERTY_REF, then we transform that into a 'getter' call (this
+       happens in build_modify_expr() or cp_build_modify_expr()).
+
+    * else, it will remain as a PROPERTY_REF until we get to
+      gimplification; at that point, we convert each PROPERTY_REF into
+      a 'getter' call during ObjC/ObjC++ gimplify.  At that point, it
+      is quite hard to build a 'getter' call, but we have already built
+      it and we just need to swap Operand 2 in, and emit the deprecation
+      warnings from Operand 3 if needed.
+
+  Please note that when the Objective-C 2.0 "dot-syntax" 'object.component'
+  is encountered, where 'component' is not a property but there are valid
+  setter/getter methods for it, an artificial PROPERTY_DECL is generated
+  and used in the PROPERTY_REF.  */
+DEFTREECODE (PROPERTY_REF, "property_ref", tcc_expression, 4)
+
+/*
+Local variables:
+mode:c
+End:
+*/
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/obstack.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/obstack.h
new file mode 100644
index 0000000..413228c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/obstack.h
@@ -0,0 +1,535 @@
+/* obstack.h - object stack macros
+   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Summary:
+
+   All the apparent functions defined here are macros. The idea
+   is that you would use these pre-tested macros to solve a
+   very specific set of problems, and they would run fast.
+   Caution: no side-effects in arguments please!! They may be
+   evaluated MANY times!!
+
+   These macros operate a stack of objects.  Each object starts life
+   small, and may grow to maturity.  (Consider building a word syllable
+   by syllable.)  An object can move while it is growing.  Once it has
+   been "finished" it never changes address again.  So the "top of the
+   stack" is typically an immature growing object, while the rest of the
+   stack is of mature, fixed size and fixed address objects.
+
+   These routines grab large chunks of memory, using a function you
+   supply, called 'obstack_chunk_alloc'.  On occasion, they free chunks,
+   by calling 'obstack_chunk_free'.  You must define them and declare
+   them before using any obstack macros.
+
+   Each independent stack is represented by a 'struct obstack'.
+   Each of the obstack macros expects a pointer to such a structure
+   as the first argument.
+
+   One motivation for this package is the problem of growing char strings
+   in symbol tables.  Unless you are "fascist pig with a read-only mind"
+   --Gosper's immortal quote from HAKMEM item 154, out of context--you
+   would not like to put any arbitrary upper limit on the length of your
+   symbols.
+
+   In practice this often means you will build many short symbols and a
+   few long symbols.  At the time you are reading a symbol you don't know
+   how long it is.  One traditional method is to read a symbol into a
+   buffer, realloc()ating the buffer every time you try to read a symbol
+   that is longer than the buffer.  This is beaut, but you still will
+   want to copy the symbol from the buffer to a more permanent
+   symbol-table entry say about half the time.
+
+   With obstacks, you can work differently.  Use one obstack for all symbol
+   names.  As you read a symbol, grow the name in the obstack gradually.
+   When the name is complete, finalize it.  Then, if the symbol exists already,
+   free the newly read name.
+
+   The way we do this is to take a large chunk, allocating memory from
+   low addresses.  When you want to build a symbol in the chunk you just
+   add chars above the current "high water mark" in the chunk.  When you
+   have finished adding chars, because you got to the end of the symbol,
+   you know how long the chars are, and you can create a new object.
+   Mostly the chars will not burst over the highest address of the chunk,
+   because you would typically expect a chunk to be (say) 100 times as
+   long as an average object.
+
+   In case that isn't clear, when we have enough chars to make up
+   the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed)
+   so we just point to it where it lies.  No moving of chars is
+   needed and this is the second win: potentially long strings need
+   never be explicitly shuffled. Once an object is formed, it does not
+   change its address during its lifetime.
+
+   When the chars burst over a chunk boundary, we allocate a larger
+   chunk, and then copy the partly formed object from the end of the old
+   chunk to the beginning of the new larger chunk.  We then carry on
+   accreting characters to the end of the object as we normally would.
+
+   A special macro is provided to add a single char at a time to a
+   growing object.  This allows the use of register variables, which
+   break the ordinary 'growth' macro.
+
+   Summary:
+        We allocate large chunks.
+        We carve out one object at a time from the current chunk.
+        Once carved, an object never moves.
+        We are free to append data of any size to the currently
+          growing object.
+        Exactly one object is growing in an obstack at any one time.
+        You can run one obstack per control block.
+        You may have as many control blocks as you dare.
+        Because of the way we do it, you can "unwind" an obstack
+          back to a previous state. (You may remove objects much
+          as you would with a stack.)
+ */
+
+
+/* Don't do the contents of this file more than once.  */
+
+#ifndef _OBSTACK_H
+#define _OBSTACK_H 1
+
+#ifndef _OBSTACK_INTERFACE_VERSION
+# define _OBSTACK_INTERFACE_VERSION 2
+#endif
+
+#include <stddef.h>             /* For size_t and ptrdiff_t.  */
+#include <string.h>             /* For __GNU_LIBRARY__, and memcpy.  */
+
+#if _OBSTACK_INTERFACE_VERSION == 1
+/* For binary compatibility with obstack version 1, which used "int"
+   and "long" for these two types.  */
+# define _OBSTACK_SIZE_T unsigned int
+# define _CHUNK_SIZE_T unsigned long
+# define _OBSTACK_CAST(type, expr) ((type) (expr))
+#else
+/* Version 2 with sane types, especially for 64-bit hosts.  */
+# define _OBSTACK_SIZE_T size_t
+# define _CHUNK_SIZE_T size_t
+# define _OBSTACK_CAST(type, expr) (expr)
+#endif
+
+/* If B is the base of an object addressed by P, return the result of
+   aligning P to the next multiple of A + 1.  B and P must be of type
+   char *.  A + 1 must be a power of 2.  */
+
+#define __BPTR_ALIGN(B, P, A) ((B) + (((P) - (B) + (A)) & ~(A)))
+
+/* Similar to __BPTR_ALIGN (B, P, A), except optimize the common case
+   where pointers can be converted to integers, aligned as integers,
+   and converted back again.  If ptrdiff_t is narrower than a
+   pointer (e.g., the AS/400), play it safe and compute the alignment
+   relative to B.  Otherwise, use the faster strategy of computing the
+   alignment relative to 0.  */
+
+#define __PTR_ALIGN(B, P, A)						      \
+  __BPTR_ALIGN (sizeof (ptrdiff_t) < sizeof (void *) ? (B) : (char *) 0,      \
+                P, A)
+
+#ifndef __attribute_pure__
+# if defined __GNUC_MINOR__ && __GNUC__ * 1000 + __GNUC_MINOR__ >= 2096
+#  define __attribute_pure__ __attribute__ ((__pure__))
+# else
+#  define __attribute_pure__
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct _obstack_chunk           /* Lives at front of each chunk. */
+{
+  char *limit;                  /* 1 past end of this chunk */
+  struct _obstack_chunk *prev;  /* address of prior chunk or NULL */
+  char contents[4];             /* objects begin here */
+};
+
+struct obstack          /* control current object in current chunk */
+{
+  _CHUNK_SIZE_T chunk_size;     /* preferred size to allocate chunks in */
+  struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */
+  char *object_base;            /* address of object we are building */
+  char *next_free;              /* where to add next char to current object */
+  char *chunk_limit;            /* address of char after current chunk */
+  union
+  {
+    _OBSTACK_SIZE_T i;
+    void *p;
+  } temp;                       /* Temporary for some macros.  */
+  _OBSTACK_SIZE_T alignment_mask;  /* Mask of alignment for each object. */
+
+  /* These prototypes vary based on 'use_extra_arg'.  */
+  union
+  {
+    void *(*plain) (size_t);
+    void *(*extra) (void *, size_t);
+  } chunkfun;
+  union
+  {
+    void (*plain) (void *);
+    void (*extra) (void *, void *);
+  } freefun;
+
+  void *extra_arg;              /* first arg for chunk alloc/dealloc funcs */
+  unsigned use_extra_arg : 1;     /* chunk alloc/dealloc funcs take extra arg */
+  unsigned maybe_empty_object : 1; /* There is a possibility that the current
+                                      chunk contains a zero-length object.  This
+                                      prevents freeing the chunk if we allocate
+                                      a bigger chunk to replace it. */
+  unsigned alloc_failed : 1;      /* No longer used, as we now call the failed
+                                     handler on error, but retained for binary
+                                     compatibility.  */
+};
+
+/* Declare the external functions we use; they are in obstack.c.  */
+
+extern void _obstack_newchunk (struct obstack *, _OBSTACK_SIZE_T);
+extern void _obstack_free (struct obstack *, void *);
+extern int _obstack_begin (struct obstack *,
+                           _OBSTACK_SIZE_T, _OBSTACK_SIZE_T,
+                           void *(*) (size_t), void (*) (void *));
+extern int _obstack_begin_1 (struct obstack *,
+                             _OBSTACK_SIZE_T, _OBSTACK_SIZE_T,
+                             void *(*) (void *, size_t),
+                             void (*) (void *, void *), void *);
+extern _OBSTACK_SIZE_T _obstack_memory_used (struct obstack *)
+  __attribute_pure__;
+
+
+/* Error handler called when 'obstack_chunk_alloc' failed to allocate
+   more memory.  This can be set to a user defined function which
+   should either abort gracefully or use longjump - but shouldn't
+   return.  The default action is to print a message and abort.  */
+extern void (*obstack_alloc_failed_handler) (void);
+
+/* Exit value used when 'print_and_abort' is used.  */
+extern int obstack_exit_failure;
+
+/* Pointer to beginning of object being allocated or to be allocated next.
+   Note that this might not be the final address of the object
+   because a new chunk might be needed to hold the final size.  */
+
+#define obstack_base(h) ((void *) (h)->object_base)
+
+/* Size for allocating ordinary chunks.  */
+
+#define obstack_chunk_size(h) ((h)->chunk_size)
+
+/* Pointer to next byte not yet allocated in current chunk.  */
+
+#define obstack_next_free(h) ((void *) (h)->next_free)
+
+/* Mask specifying low bits that should be clear in address of an object.  */
+
+#define obstack_alignment_mask(h) ((h)->alignment_mask)
+
+/* To prevent prototype warnings provide complete argument list.  */
+#define obstack_init(h)							      \
+  _obstack_begin ((h), 0, 0,						      \
+                  _OBSTACK_CAST (void *(*) (size_t), obstack_chunk_alloc),    \
+                  _OBSTACK_CAST (void (*) (void *), obstack_chunk_free))
+
+#define obstack_begin(h, size)						      \
+  _obstack_begin ((h), (size), 0,					      \
+                  _OBSTACK_CAST (void *(*) (size_t), obstack_chunk_alloc), \
+                  _OBSTACK_CAST (void (*) (void *), obstack_chunk_free))
+
+#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun)     \
+  _obstack_begin ((h), (size), (alignment),				      \
+                  _OBSTACK_CAST (void *(*) (size_t), chunkfun),		      \
+                  _OBSTACK_CAST (void (*) (void *), freefun))
+
+#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
+  _obstack_begin_1 ((h), (size), (alignment),				      \
+                    _OBSTACK_CAST (void *(*) (void *, size_t), chunkfun),     \
+                    _OBSTACK_CAST (void (*) (void *, void *), freefun), arg)
+
+#define obstack_chunkfun(h, newchunkfun)				      \
+  ((void) ((h)->chunkfun.extra = (void *(*) (void *, size_t)) (newchunkfun)))
+
+#define obstack_freefun(h, newfreefun)					      \
+  ((void) ((h)->freefun.extra = (void *(*) (void *, void *)) (newfreefun)))
+
+#define obstack_1grow_fast(h, achar) ((void) (*((h)->next_free)++ = (achar)))
+
+#define obstack_blank_fast(h, n) ((void) ((h)->next_free += (n)))
+
+#define obstack_memory_used(h) _obstack_memory_used (h)
+
+#if defined __GNUC__
+# if !defined __GNUC_MINOR__ || __GNUC__ * 1000 + __GNUC_MINOR__ < 2008
+#  define __extension__
+# endif
+
+/* For GNU C, if not -traditional,
+   we can define these macros to compute all args only once
+   without using a global variable.
+   Also, we can avoid using the 'temp' slot, to make faster code.  */
+
+# define obstack_object_size(OBSTACK)					      \
+  __extension__								      \
+    ({ struct obstack const *__o = (OBSTACK);				      \
+       (_OBSTACK_SIZE_T) (__o->next_free - __o->object_base); })
+
+/* The local variable is named __o1 to avoid a shadowed variable
+   warning when invoked from other obstack macros.  */
+# define obstack_room(OBSTACK)						      \
+  __extension__								      \
+    ({ struct obstack const *__o1 = (OBSTACK);				      \
+       (_OBSTACK_SIZE_T) (__o1->chunk_limit - __o1->next_free); })
+
+# define obstack_make_room(OBSTACK, length)				      \
+  __extension__								      \
+    ({ struct obstack *__o = (OBSTACK);					      \
+       _OBSTACK_SIZE_T __len = (length);				      \
+       if (obstack_room (__o) < __len)					      \
+         _obstack_newchunk (__o, __len);				      \
+       (void) 0; })
+
+# define obstack_empty_p(OBSTACK)					      \
+  __extension__								      \
+    ({ struct obstack const *__o = (OBSTACK);				      \
+       (__o->chunk->prev == 0						      \
+        && __o->next_free == __PTR_ALIGN ((char *) __o->chunk,		      \
+                                          __o->chunk->contents,		      \
+                                          __o->alignment_mask)); })
+
+# define obstack_grow(OBSTACK, where, length)				      \
+  __extension__								      \
+    ({ struct obstack *__o = (OBSTACK);					      \
+       _OBSTACK_SIZE_T __len = (length);				      \
+       if (obstack_room (__o) < __len)					      \
+         _obstack_newchunk (__o, __len);				      \
+       memcpy (__o->next_free, where, __len);				      \
+       __o->next_free += __len;						      \
+       (void) 0; })
+
+# define obstack_grow0(OBSTACK, where, length)				      \
+  __extension__								      \
+    ({ struct obstack *__o = (OBSTACK);					      \
+       _OBSTACK_SIZE_T __len = (length);				      \
+       if (obstack_room (__o) < __len + 1)				      \
+         _obstack_newchunk (__o, __len + 1);				      \
+       memcpy (__o->next_free, where, __len);				      \
+       __o->next_free += __len;						      \
+       *(__o->next_free)++ = 0;						      \
+       (void) 0; })
+
+# define obstack_1grow(OBSTACK, datum)					      \
+  __extension__								      \
+    ({ struct obstack *__o = (OBSTACK);					      \
+       if (obstack_room (__o) < 1)					      \
+         _obstack_newchunk (__o, 1);					      \
+       obstack_1grow_fast (__o, datum); })
+
+/* These assume that the obstack alignment is good enough for pointers
+   or ints, and that the data added so far to the current object
+   shares that much alignment.  */
+
+# define obstack_ptr_grow(OBSTACK, datum)				      \
+  __extension__								      \
+    ({ struct obstack *__o = (OBSTACK);					      \
+       if (obstack_room (__o) < sizeof (void *))			      \
+         _obstack_newchunk (__o, sizeof (void *));			      \
+       obstack_ptr_grow_fast (__o, datum); })
+
+# define obstack_int_grow(OBSTACK, datum)				      \
+  __extension__								      \
+    ({ struct obstack *__o = (OBSTACK);					      \
+       if (obstack_room (__o) < sizeof (int))				      \
+         _obstack_newchunk (__o, sizeof (int));				      \
+       obstack_int_grow_fast (__o, datum); })
+
+# define obstack_ptr_grow_fast(OBSTACK, aptr)				      \
+  __extension__								      \
+    ({ struct obstack *__o1 = (OBSTACK);				      \
+       void *__p1 = __o1->next_free;					      \
+       *(const void **) __p1 = (aptr);					      \
+       __o1->next_free += sizeof (const void *);			      \
+       (void) 0; })
+
+# define obstack_int_grow_fast(OBSTACK, aint)				      \
+  __extension__								      \
+    ({ struct obstack *__o1 = (OBSTACK);				      \
+       void *__p1 = __o1->next_free;					      \
+       *(int *) __p1 = (aint);						      \
+       __o1->next_free += sizeof (int);					      \
+       (void) 0; })
+
+# define obstack_blank(OBSTACK, length)					      \
+  __extension__								      \
+    ({ struct obstack *__o = (OBSTACK);					      \
+       _OBSTACK_SIZE_T __len = (length);				      \
+       if (obstack_room (__o) < __len)					      \
+         _obstack_newchunk (__o, __len);				      \
+       obstack_blank_fast (__o, __len); })
+
+# define obstack_alloc(OBSTACK, length)					      \
+  __extension__								      \
+    ({ struct obstack *__h = (OBSTACK);					      \
+       obstack_blank (__h, (length));					      \
+       obstack_finish (__h); })
+
+# define obstack_copy(OBSTACK, where, length)				      \
+  __extension__								      \
+    ({ struct obstack *__h = (OBSTACK);					      \
+       obstack_grow (__h, (where), (length));				      \
+       obstack_finish (__h); })
+
+# define obstack_copy0(OBSTACK, where, length)				      \
+  __extension__								      \
+    ({ struct obstack *__h = (OBSTACK);					      \
+       obstack_grow0 (__h, (where), (length));				      \
+       obstack_finish (__h); })
+
+/* The local variable is named __o1 to avoid a shadowed variable
+   warning when invoked from other obstack macros, typically obstack_free.  */
+# define obstack_finish(OBSTACK)					      \
+  __extension__								      \
+    ({ struct obstack *__o1 = (OBSTACK);				      \
+       void *__value = (void *) __o1->object_base;			      \
+       if (__o1->next_free == __value)					      \
+         __o1->maybe_empty_object = 1;					      \
+       __o1->next_free							      \
+         = __PTR_ALIGN (__o1->object_base, __o1->next_free,		      \
+                        __o1->alignment_mask);				      \
+       if ((size_t) (__o1->next_free - (char *) __o1->chunk)		      \
+           > (size_t) (__o1->chunk_limit - (char *) __o1->chunk))	      \
+         __o1->next_free = __o1->chunk_limit;				      \
+       __o1->object_base = __o1->next_free;				      \
+       __value; })
+
+# define obstack_free(OBSTACK, OBJ)					      \
+  __extension__								      \
+    ({ struct obstack *__o = (OBSTACK);					      \
+       void *__obj = (void *) (OBJ);					      \
+       if (__obj > (void *) __o->chunk && __obj < (void *) __o->chunk_limit)  \
+         __o->next_free = __o->object_base = (char *) __obj;		      \
+       else								      \
+         _obstack_free (__o, __obj); })
+
+#else /* not __GNUC__ */
+
+# define obstack_object_size(h)						      \
+  ((_OBSTACK_SIZE_T) ((h)->next_free - (h)->object_base))
+
+# define obstack_room(h)						      \
+  ((_OBSTACK_SIZE_T) ((h)->chunk_limit - (h)->next_free))
+
+# define obstack_empty_p(h)						      \
+  ((h)->chunk->prev == 0						      \
+   && (h)->next_free == __PTR_ALIGN ((char *) (h)->chunk,		      \
+                                     (h)->chunk->contents,		      \
+                                     (h)->alignment_mask))
+
+/* Note that the call to _obstack_newchunk is enclosed in (..., 0)
+   so that we can avoid having void expressions
+   in the arms of the conditional expression.
+   Casting the third operand to void was tried before,
+   but some compilers won't accept it.  */
+
+# define obstack_make_room(h, length)					      \
+  ((h)->temp.i = (length),						      \
+   ((obstack_room (h) < (h)->temp.i)					      \
+    ? (_obstack_newchunk (h, (h)->temp.i), 0) : 0),			      \
+   (void) 0)
+
+# define obstack_grow(h, where, length)					      \
+  ((h)->temp.i = (length),						      \
+   ((obstack_room (h) < (h)->temp.i)					      \
+   ? (_obstack_newchunk ((h), (h)->temp.i), 0) : 0),			      \
+   memcpy ((h)->next_free, where, (h)->temp.i),				      \
+   (h)->next_free += (h)->temp.i,					      \
+   (void) 0)
+
+# define obstack_grow0(h, where, length)				      \
+  ((h)->temp.i = (length),						      \
+   ((obstack_room (h) < (h)->temp.i + 1)				      \
+   ? (_obstack_newchunk ((h), (h)->temp.i + 1), 0) : 0),		      \
+   memcpy ((h)->next_free, where, (h)->temp.i),				      \
+   (h)->next_free += (h)->temp.i,					      \
+   *((h)->next_free)++ = 0,						      \
+   (void) 0)
+
+# define obstack_1grow(h, datum)					      \
+  (((obstack_room (h) < 1)						      \
+    ? (_obstack_newchunk ((h), 1), 0) : 0),				      \
+   obstack_1grow_fast (h, datum))
+
+# define obstack_ptr_grow(h, datum)					      \
+  (((obstack_room (h) < sizeof (char *))				      \
+    ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0),		      \
+   obstack_ptr_grow_fast (h, datum))
+
+# define obstack_int_grow(h, datum)					      \
+  (((obstack_room (h) < sizeof (int))					      \
+    ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0),			      \
+   obstack_int_grow_fast (h, datum))
+
+# define obstack_ptr_grow_fast(h, aptr)					      \
+  (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr),	      \
+   (void) 0)
+
+# define obstack_int_grow_fast(h, aint)					      \
+  (((int *) ((h)->next_free += sizeof (int)))[-1] = (aint),		      \
+   (void) 0)
+
+# define obstack_blank(h, length)					      \
+  ((h)->temp.i = (length),						      \
+   ((obstack_room (h) < (h)->temp.i)					      \
+   ? (_obstack_newchunk ((h), (h)->temp.i), 0) : 0),			      \
+   obstack_blank_fast (h, (h)->temp.i))
+
+# define obstack_alloc(h, length)					      \
+  (obstack_blank ((h), (length)), obstack_finish ((h)))
+
+# define obstack_copy(h, where, length)					      \
+  (obstack_grow ((h), (where), (length)), obstack_finish ((h)))
+
+# define obstack_copy0(h, where, length)				      \
+  (obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
+
+# define obstack_finish(h)						      \
+  (((h)->next_free == (h)->object_base					      \
+    ? (((h)->maybe_empty_object = 1), 0)				      \
+    : 0),								      \
+   (h)->temp.p = (h)->object_base,					      \
+   (h)->next_free							      \
+     = __PTR_ALIGN ((h)->object_base, (h)->next_free,			      \
+                    (h)->alignment_mask),				      \
+   (((size_t) ((h)->next_free - (char *) (h)->chunk)			      \
+     > (size_t) ((h)->chunk_limit - (char *) (h)->chunk))		      \
+   ? ((h)->next_free = (h)->chunk_limit) : 0),				      \
+   (h)->object_base = (h)->next_free,					      \
+   (h)->temp.p)
+
+# define obstack_free(h, obj)						      \
+  ((h)->temp.p = (void *) (obj),					      \
+   (((h)->temp.p > (void *) (h)->chunk					      \
+     && (h)->temp.p < (void *) (h)->chunk_limit)			      \
+    ? (void) ((h)->next_free = (h)->object_base = (char *) (h)->temp.p)       \
+    : _obstack_free ((h), (h)->temp.p)))
+
+#endif /* not __GNUC__ */
+
+#ifdef __cplusplus
+}       /* C++ */
+#endif
+
+#endif /* _OBSTACK_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-builtins.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-builtins.def
new file mode 100644
index 0000000..9961c28
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-builtins.def
@@ -0,0 +1,448 @@
+/* This file contains the definitions and documentation for the
+   Offloading and Multi Processing builtins used in the GNU compiler.
+   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Before including this file, you should define a macro:
+
+     DEF_GOACC_BUILTIN (ENUM, NAME, TYPE, ATTRS)
+     DEF_GOACC_BUILTIN_COMPILER (ENUM, NAME, TYPE, ATTRS)
+     DEF_GOMP_BUILTIN (ENUM, NAME, TYPE, ATTRS)
+
+   See builtins.def for details.  */
+
+/* The reason why they aren't in gcc/builtins.def is that the Fortran front end
+   doesn't source those.  */
+
+DEF_GOACC_BUILTIN (BUILT_IN_ACC_GET_DEVICE_TYPE, "acc_get_device_type",
+		   BT_FN_INT, ATTR_NOTHROW_LIST)
+DEF_GOACC_BUILTIN (BUILT_IN_GOACC_DATA_START, "GOACC_data_start",
+		   BT_FN_VOID_INT_SIZE_PTR_PTR_PTR, ATTR_NOTHROW_LIST)
+DEF_GOACC_BUILTIN (BUILT_IN_GOACC_DATA_END, "GOACC_data_end",
+		   BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOACC_BUILTIN (BUILT_IN_GOACC_ENTER_EXIT_DATA, "GOACC_enter_exit_data",
+		   BT_FN_VOID_INT_SIZE_PTR_PTR_PTR_INT_INT_VAR,
+		   ATTR_NOTHROW_LIST)
+DEF_GOACC_BUILTIN (BUILT_IN_GOACC_PARALLEL, "GOACC_parallel_keyed",
+		   BT_FN_VOID_INT_OMPFN_SIZE_PTR_PTR_PTR_VAR,
+		   ATTR_NOTHROW_LIST)
+DEF_GOACC_BUILTIN (BUILT_IN_GOACC_UPDATE, "GOACC_update",
+		   BT_FN_VOID_INT_SIZE_PTR_PTR_PTR_INT_INT_VAR,
+		   ATTR_NOTHROW_LIST)
+DEF_GOACC_BUILTIN (BUILT_IN_GOACC_WAIT, "GOACC_wait",
+		   BT_FN_VOID_INT_INT_VAR,
+		   ATTR_NOTHROW_LIST)
+
+DEF_GOACC_BUILTIN_COMPILER (BUILT_IN_ACC_ON_DEVICE, "acc_on_device",
+			    BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_GOACC_BUILTIN_ONLY (BUILT_IN_GOACC_PARLEVEL_ID, "goacc_parlevel_id",
+			BT_FN_INT_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOACC_BUILTIN_ONLY (BUILT_IN_GOACC_PARLEVEL_SIZE, "goacc_parlevel_size",
+			BT_FN_INT_INT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_GOMP_BUILTIN (BUILT_IN_OMP_GET_THREAD_NUM, "omp_get_thread_num",
+		  BT_FN_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_OMP_GET_NUM_THREADS, "omp_get_num_threads",
+		  BT_FN_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_OMP_GET_TEAM_NUM, "omp_get_team_num",
+		  BT_FN_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_OMP_GET_NUM_TEAMS, "omp_get_num_teams",
+		  BT_FN_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ATOMIC_START, "GOMP_atomic_start",
+		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ATOMIC_END, "GOMP_atomic_end",
+		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_BARRIER, "GOMP_barrier",
+		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_BARRIER_CANCEL, "GOMP_barrier_cancel",
+		  BT_FN_BOOL, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKWAIT, "GOMP_taskwait",
+		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKWAIT_DEPEND, "GOMP_taskwait_depend",
+		  BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKYIELD, "GOMP_taskyield",
+		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKGROUP_START, "GOMP_taskgroup_start",
+		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKGROUP_END, "GOMP_taskgroup_end",
+		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CANCEL, "GOMP_cancel",
+		  BT_FN_BOOL_INT_BOOL, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CANCELLATION_POINT, "GOMP_cancellation_point",
+		  BT_FN_BOOL_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_START, "GOMP_critical_start",
+		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_END, "GOMP_critical_end",
+		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_NAME_START,
+		  "GOMP_critical_name_start",
+		  BT_FN_VOID_PTRPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_NAME_END,
+		  "GOMP_critical_name_end",
+		  BT_FN_VOID_PTRPTR, ATTR_NOTHROW_LEAF_LIST)
+/* NOTE: Do not change the order of BUILT_IN_GOMP_LOOP_*_START.  They
+   are used in index arithmetic with enum omp_clause_schedule_kind
+   in omp-low.c.  */
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_START,
+		  "GOMP_loop_static_start",
+		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_DYNAMIC_START,
+		  "GOMP_loop_dynamic_start",
+		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_GUIDED_START,
+		  "GOMP_loop_guided_start",
+		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_RUNTIME_START,
+		  "GOMP_loop_runtime_start",
+		  BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_NONMONOTONIC_DYNAMIC_START,
+		  "GOMP_loop_nonmonotonic_dynamic_start",
+		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_NONMONOTONIC_GUIDED_START,
+		  "GOMP_loop_nonmonotonic_guided_start",
+		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_NONMONOTONIC_RUNTIME_START,
+		  "GOMP_loop_nonmonotonic_runtime_start",
+		  BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_MAYBE_NONMONOTONIC_RUNTIME_START,
+		  "GOMP_loop_maybe_nonmonotonic_runtime_start",
+		  BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_STATIC_START,
+		  "GOMP_loop_ordered_static_start",
+		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_START,
+		  "GOMP_loop_ordered_dynamic_start",
+		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_START,
+		  "GOMP_loop_ordered_guided_start",
+		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_START,
+		  "GOMP_loop_ordered_runtime_start",
+		  BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_DOACROSS_STATIC_START,
+		  "GOMP_loop_doacross_static_start",
+		  BT_FN_BOOL_UINT_LONGPTR_LONG_LONGPTR_LONGPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_DOACROSS_DYNAMIC_START,
+		  "GOMP_loop_doacross_dynamic_start",
+		  BT_FN_BOOL_UINT_LONGPTR_LONG_LONGPTR_LONGPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_DOACROSS_GUIDED_START,
+		  "GOMP_loop_doacross_guided_start",
+		  BT_FN_BOOL_UINT_LONGPTR_LONG_LONGPTR_LONGPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_DOACROSS_RUNTIME_START,
+		  "GOMP_loop_doacross_runtime_start",
+		  BT_FN_BOOL_UINT_LONGPTR_LONGPTR_LONGPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_START,
+		  "GOMP_loop_start",
+		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR_PTR_PTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_START,
+		  "GOMP_loop_ordered_start",
+		  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR_PTR_PTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_DOACROSS_START,
+		  "GOMP_loop_doacross_start",
+		  BT_FN_BOOL_UINT_LONGPTR_LONG_LONG_LONGPTR_LONGPTR_PTR_PTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_NEXT, "GOMP_loop_static_next",
+		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_DYNAMIC_NEXT, "GOMP_loop_dynamic_next",
+		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_GUIDED_NEXT, "GOMP_loop_guided_next",
+		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_RUNTIME_NEXT, "GOMP_loop_runtime_next",
+		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_NONMONOTONIC_DYNAMIC_NEXT,
+		  "GOMP_loop_nonmonotonic_dynamic_next",
+		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_NONMONOTONIC_GUIDED_NEXT,
+		  "GOMP_loop_nonmonotonic_guided_next",
+		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_NONMONOTONIC_RUNTIME_NEXT,
+		  "GOMP_loop_nonmonotonic_runtime_next",
+		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_MAYBE_NONMONOTONIC_RUNTIME_NEXT,
+		  "GOMP_loop_maybe_nonmonotonic_runtime_next",
+		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_STATIC_NEXT,
+		  "GOMP_loop_ordered_static_next",
+		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_NEXT,
+		  "GOMP_loop_ordered_dynamic_next",
+		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_NEXT,
+		  "GOMP_loop_ordered_guided_next",
+		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_NEXT,
+		  "GOMP_loop_ordered_runtime_next",
+		  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_STATIC_START,
+		  "GOMP_loop_ull_static_start",
+		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_DYNAMIC_START,
+		  "GOMP_loop_ull_dynamic_start",
+		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_GUIDED_START,
+		  "GOMP_loop_ull_guided_start",
+		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_RUNTIME_START,
+		  "GOMP_loop_ull_runtime_start",
+		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_NONMONOTONIC_DYNAMIC_START,
+		  "GOMP_loop_ull_nonmonotonic_dynamic_start",
+		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_NONMONOTONIC_GUIDED_START,
+		  "GOMP_loop_ull_nonmonotonic_guided_start",
+		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_NONMONOTONIC_RUNTIME_START,
+		  "GOMP_loop_ull_nonmonotonic_runtime_start",
+		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_MAYBE_NONMONOTONIC_RUNTIME_START,
+		  "GOMP_loop_ull_maybe_nonmonotonic_runtime_start",
+		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_STATIC_START,
+		  "GOMP_loop_ull_ordered_static_start",
+		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_DYNAMIC_START,
+		  "GOMP_loop_ull_ordered_dynamic_start",
+		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_GUIDED_START,
+		  "GOMP_loop_ull_ordered_guided_start",
+		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_RUNTIME_START,
+		  "GOMP_loop_ull_ordered_runtime_start",
+		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULLPTR_ULLPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_DOACROSS_STATIC_START,
+		  "GOMP_loop_ull_doacross_static_start",
+		  BT_FN_BOOL_UINT_ULLPTR_ULL_ULLPTR_ULLPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_DOACROSS_DYNAMIC_START,
+		  "GOMP_loop_ull_doacross_dynamic_start",
+		  BT_FN_BOOL_UINT_ULLPTR_ULL_ULLPTR_ULLPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_DOACROSS_GUIDED_START,
+		  "GOMP_loop_ull_doacross_guided_start",
+		  BT_FN_BOOL_UINT_ULLPTR_ULL_ULLPTR_ULLPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_DOACROSS_RUNTIME_START,
+		  "GOMP_loop_ull_doacross_runtime_start",
+		  BT_FN_BOOL_UINT_ULLPTR_ULLPTR_ULLPTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_START,
+		  "GOMP_loop_ull_start",
+		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_LONG_ULL_ULLPTR_ULLPTR_PTR_PTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_START,
+		  "GOMP_loop_ull_ordered_start",
+		  BT_FN_BOOL_BOOL_ULL_ULL_ULL_LONG_ULL_ULLPTR_ULLPTR_PTR_PTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_DOACROSS_START,
+		  "GOMP_loop_ull_doacross_start",
+		  BT_FN_BOOL_UINT_ULLPTR_LONG_ULL_ULLPTR_ULLPTR_PTR_PTR,
+		  ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_STATIC_NEXT,
+		  "GOMP_loop_ull_static_next",
+		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_DYNAMIC_NEXT,
+		  "GOMP_loop_ull_dynamic_next",
+		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_GUIDED_NEXT,
+		  "GOMP_loop_ull_guided_next",
+		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_RUNTIME_NEXT,
+		  "GOMP_loop_ull_runtime_next",
+		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_NONMONOTONIC_DYNAMIC_NEXT,
+		  "GOMP_loop_ull_nonmonotonic_dynamic_next",
+		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_NONMONOTONIC_GUIDED_NEXT,
+		  "GOMP_loop_ull_nonmonotonic_guided_next",
+		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_NONMONOTONIC_RUNTIME_NEXT,
+		  "GOMP_loop_ull_nonmonotonic_runtime_next",
+		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_MAYBE_NONMONOTONIC_RUNTIME_NEXT,
+		  "GOMP_loop_ull_maybe_nonmonotonic_runtime_next",
+		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_STATIC_NEXT,
+		  "GOMP_loop_ull_ordered_static_next",
+		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_DYNAMIC_NEXT,
+		  "GOMP_loop_ull_ordered_dynamic_next",
+		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_GUIDED_NEXT,
+		  "GOMP_loop_ull_ordered_guided_next",
+		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ULL_ORDERED_RUNTIME_NEXT,
+		  "GOMP_loop_ull_ordered_runtime_next",
+		  BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+/* NOTE: Do not change the order of BUILT_IN_GOMP_PARALLEL_LOOP_*.
+   They are used in index arithmetic with enum omp_clause_schedule_kind
+   in omp-low.c.  */
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_STATIC,
+		  "GOMP_parallel_loop_static",
+		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
+		  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_DYNAMIC,
+		  "GOMP_parallel_loop_dynamic",
+		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
+		  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_GUIDED,
+		  "GOMP_parallel_loop_guided",
+		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
+		  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_RUNTIME,
+		  "GOMP_parallel_loop_runtime",
+		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_UINT,
+		  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_NONMONOTONIC_DYNAMIC,
+		  "GOMP_parallel_loop_nonmonotonic_dynamic",
+		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
+		  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_NONMONOTONIC_GUIDED,
+		  "GOMP_parallel_loop_nonmonotonic_guided",
+		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
+		  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_NONMONOTONIC_RUNTIME,
+		  "GOMP_parallel_loop_nonmonotonic_runtime",
+		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_UINT,
+		  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_MAYBE_NONMONOTONIC_RUNTIME,
+		  "GOMP_parallel_loop_maybe_nonmonotonic_runtime",
+		  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_UINT,
+		  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_END, "GOMP_loop_end",
+		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_END_CANCEL, "GOMP_loop_end_cancel",
+		  BT_FN_BOOL, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_END_NOWAIT, "GOMP_loop_end_nowait",
+		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ORDERED_START, "GOMP_ordered_start",
+		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ORDERED_END, "GOMP_ordered_end",
+		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_DOACROSS_POST, "GOMP_doacross_post",
+		  BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_DOACROSS_WAIT, "GOMP_doacross_wait",
+		  BT_FN_VOID_LONG_VAR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_DOACROSS_ULL_POST, "GOMP_doacross_ull_post",
+		  BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_DOACROSS_ULL_WAIT, "GOMP_doacross_ull_wait",
+		  BT_FN_VOID_ULL_VAR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL, "GOMP_parallel",
+		  BT_FN_VOID_OMPFN_PTR_UINT_UINT, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_REDUCTIONS,
+		  "GOMP_parallel_reductions",
+		  BT_FN_UINT_OMPFN_PTR_UINT_UINT, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASK, "GOMP_task",
+		  BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR_INT,
+		  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKLOOP, "GOMP_taskloop",
+		  BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_UINT_LONG_INT_LONG_LONG_LONG,
+		  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKLOOP_ULL, "GOMP_taskloop_ull",
+		  BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_UINT_LONG_INT_ULL_ULL_ULL,
+		  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_START, "GOMP_sections_start",
+		  BT_FN_UINT_UINT, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS2_START, "GOMP_sections2_start",
+		  BT_FN_UINT_UINT_PTR_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_NEXT, "GOMP_sections_next",
+		  BT_FN_UINT, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_SECTIONS,
+		  "GOMP_parallel_sections",
+		  BT_FN_VOID_OMPFN_PTR_UINT_UINT_UINT, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_END, "GOMP_sections_end",
+		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_END_CANCEL,
+		  "GOMP_sections_end_cancel",
+		  BT_FN_BOOL, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_END_NOWAIT,
+		  "GOMP_sections_end_nowait",
+		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_START, "GOMP_single_start",
+		  BT_FN_BOOL, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_COPY_START, "GOMP_single_copy_start",
+		  BT_FN_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_COPY_END, "GOMP_single_copy_end",
+		  BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_OFFLOAD_REGISTER, "GOMP_offload_register_ver",
+		  BT_FN_VOID_UINT_PTR_INT_PTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_OFFLOAD_UNREGISTER,
+		  "GOMP_offload_unregister_ver",
+		  BT_FN_VOID_UINT_PTR_INT_PTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TARGET, "GOMP_target_ext",
+		  BT_FN_VOID_INT_OMPFN_SIZE_PTR_PTR_PTR_UINT_PTR_PTR,
+		  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TARGET_DATA, "GOMP_target_data_ext",
+		  BT_FN_VOID_INT_SIZE_PTR_PTR_PTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TARGET_END_DATA, "GOMP_target_end_data",
+		  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TARGET_UPDATE, "GOMP_target_update_ext",
+		  BT_FN_VOID_INT_SIZE_PTR_PTR_PTR_UINT_PTR,
+		  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TARGET_ENTER_EXIT_DATA,
+		  "GOMP_target_enter_exit_data",
+		  BT_FN_VOID_INT_SIZE_PTR_PTR_PTR_UINT_PTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TEAMS, "GOMP_teams",
+		  BT_FN_VOID_UINT_UINT, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TEAMS_REG, "GOMP_teams_reg",
+		  BT_FN_VOID_OMPFN_PTR_UINT_UINT_UINT, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKGROUP_REDUCTION_REGISTER,
+		  "GOMP_taskgroup_reduction_register",
+		  BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKGROUP_REDUCTION_UNREGISTER,
+		  "GOMP_taskgroup_reduction_unregister",
+		  BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASK_REDUCTION_REMAP,
+		  "GOMP_task_reduction_remap",
+		  BT_FN_VOID_SIZE_SIZE_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_WORKSHARE_TASK_REDUCTION_UNREGISTER,
+		  "GOMP_workshare_task_reduction_unregister",
+		  BT_FN_VOID_BOOL, ATTR_NOTHROW_LEAF_LIST)
+DEF_GOACC_BUILTIN (BUILT_IN_GOACC_DECLARE, "GOACC_declare",
+		   BT_FN_VOID_INT_SIZE_PTR_PTR_PTR, ATTR_NOTHROW_LIST)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-expand.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-expand.h
new file mode 100644
index 0000000..1bfc1e4
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-expand.h
@@ -0,0 +1,32 @@
+/* Expansion pass for OMP directives.  Outlines regions of certain OMP
+   directives to separate functions, converts others into explicit calls to the
+   runtime library (libgomp) and so forth
+
+Copyright (C) 2005-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_OMP_EXPAND_H
+#define GCC_OMP_EXPAND_H
+
+struct omp_region;
+extern void omp_expand_local (basic_block head);
+extern void omp_free_regions (void);
+extern bool omp_make_gimple_edges (basic_block bb, struct omp_region **region,
+				   int *region_idx);
+
+#endif /* GCC_OMP_EXPAND_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-general.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-general.h
new file mode 100644
index 0000000..60faa52
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-general.h
@@ -0,0 +1,105 @@
+/* General types and functions that are uselful for processing of OpenMP,
+   OpenACC and similar directivers at various stages of compilation.
+
+   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_OMP_GENERAL_H
+#define GCC_OMP_GENERAL_H
+
+#include "gomp-constants.h"
+
+/*  Flags for an OpenACC loop.  */
+
+enum oacc_loop_flags {
+  OLF_SEQ	= 1u << 0,  /* Explicitly sequential  */
+  OLF_AUTO	= 1u << 1,	/* Compiler chooses axes.  */
+  OLF_INDEPENDENT = 1u << 2,	/* Iterations are known independent.  */
+  OLF_GANG_STATIC = 1u << 3,	/* Gang partitioning is static (has op). */
+  OLF_TILE	= 1u << 4,	/* Tiled loop. */
+  
+  /* Explicitly specified loop axes.  */
+  OLF_DIM_BASE = 5,
+  OLF_DIM_GANG   = 1u << (OLF_DIM_BASE + GOMP_DIM_GANG),
+  OLF_DIM_WORKER = 1u << (OLF_DIM_BASE + GOMP_DIM_WORKER),
+  OLF_DIM_VECTOR = 1u << (OLF_DIM_BASE + GOMP_DIM_VECTOR),
+
+  OLF_MAX = OLF_DIM_BASE + GOMP_DIM_MAX
+};
+
+/* A structure holding the elements of:
+   for (V = N1; V cond N2; V += STEP) [...] */
+
+struct omp_for_data_loop
+{
+  tree v, n1, n2, step;
+  enum tree_code cond_code;
+};
+
+/* A structure describing the main elements of a parallel loop.  */
+
+struct omp_for_data
+{
+  struct omp_for_data_loop loop;
+  tree chunk_size;
+  gomp_for *for_stmt;
+  tree pre, iter_type;
+  tree tiling;  /* Tiling values (if non null).  */
+  int collapse;  /* Collapsed loops, 1 for a non-collapsed loop.  */
+  int ordered;
+  bool have_nowait, have_ordered, simd_schedule, have_reductemp;
+  unsigned char sched_modifiers;
+  enum omp_clause_schedule_kind sched_kind;
+  struct omp_for_data_loop *loops;
+};
+
+#define OACC_FN_ATTRIB "oacc function"
+
+extern tree omp_find_clause (tree clauses, enum omp_clause_code kind);
+extern bool omp_is_reference (tree decl);
+extern void omp_adjust_for_condition (location_t loc, enum tree_code *cond_code,
+				      tree *n2, tree v, tree step);
+extern tree omp_get_for_step_from_incr (location_t loc, tree incr);
+extern void omp_extract_for_data (gomp_for *for_stmt, struct omp_for_data *fd,
+				  struct omp_for_data_loop *loops);
+extern gimple *omp_build_barrier (tree lhs);
+extern poly_uint64 omp_max_vf (void);
+extern int omp_max_simt_vf (void);
+extern tree oacc_launch_pack (unsigned code, tree device, unsigned op);
+extern tree oacc_replace_fn_attrib_attr (tree attribs, tree dims);
+extern void oacc_replace_fn_attrib (tree fn, tree dims);
+extern void oacc_set_fn_attrib (tree fn, tree clauses, vec<tree> *args);
+extern tree oacc_build_routine_dims (tree clauses);
+extern tree oacc_get_fn_attrib (tree fn);
+extern bool offloading_function_p (tree fn);
+extern int oacc_get_fn_dim_size (tree fn, int axis);
+extern int oacc_get_ifn_dim_arg (const gimple *stmt);
+
+enum omp_requires {
+  OMP_REQUIRES_ATOMIC_DEFAULT_MEM_ORDER = 0xf,
+  OMP_REQUIRES_UNIFIED_ADDRESS = 0x10,
+  OMP_REQUIRES_UNIFIED_SHARED_MEMORY = 0x20,
+  OMP_REQUIRES_DYNAMIC_ALLOCATORS = 0x40,
+  OMP_REQUIRES_REVERSE_OFFLOAD = 0x80,
+  OMP_REQUIRES_ATOMIC_DEFAULT_MEM_ORDER_USED = 0x100,
+  OMP_REQUIRES_TARGET_USED = 0x200
+};
+
+extern GTY(()) enum omp_requires omp_requires_mask;
+
+#endif /* GCC_OMP_GENERAL_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-grid.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-grid.h
new file mode 100644
index 0000000..83ee055
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-grid.h
@@ -0,0 +1,27 @@
+/* Lowering and expansion of OpenMP directives for HSA GPU agents.
+
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_OMP_GRID_H
+#define GCC_OMP_GRID_H
+
+extern tree omp_grid_lastprivate_predicate (struct omp_for_data *fd);
+extern void omp_grid_gridify_all_targets (gimple_seq *body_p);
+
+#endif /* GCC_OMP_GRID_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-low.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-low.h
new file mode 100644
index 0000000..22dd5ed
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-low.h
@@ -0,0 +1,31 @@
+/* Header file for openMP lowering directives.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_OMP_LOW_H
+#define GCC_OMP_LOW_H
+
+extern tree omp_reduction_init_op (location_t, enum tree_code, tree);
+extern tree omp_reduction_init (tree, tree);
+extern tree omp_member_access_dummy_var (tree);
+extern tree omp_find_combined_for (gimple_stmt_iterator *gsi_p,
+				   bool *handled_ops_p,
+				   struct walk_stmt_info *wi);
+
+
+#endif /* GCC_OMP_LOW_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-offload.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-offload.h
new file mode 100644
index 0000000..21c9236
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-offload.h
@@ -0,0 +1,34 @@
+/* Bits of OpenMP and OpenACC handling that is specific to device offloading
+   and a lowering pass for OpenACC device directives.
+
+   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_OMP_DEVICE_H
+#define GCC_OMP_DEVICE_H
+
+extern int oacc_get_default_dim (int dim);
+extern int oacc_get_min_dim (int dim);
+extern int oacc_fn_attrib_level (tree attr);
+
+extern GTY(()) vec<tree, va_gc> *offload_funcs;
+extern GTY(()) vec<tree, va_gc> *offload_vars;
+
+extern void omp_finish_file (void);
+
+#endif /* GCC_OMP_DEVICE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-simd-clone.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-simd-clone.h
new file mode 100644
index 0000000..0f99fd7
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/omp-simd-clone.h
@@ -0,0 +1,26 @@
+/* OMP constructs' SIMD clone supporting code.
+
+   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_OMP_SIMD_CLONE_H
+#define GCC_OMP_SIMD_CLONE_H
+
+extern void expand_simd_clones (struct cgraph_node *);
+
+#endif /* GCC_OMP_SIMD_CLONE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/opt-problem.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/opt-problem.h
new file mode 100644
index 0000000..dc395d5
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/opt-problem.h
@@ -0,0 +1,289 @@
+/* Rich information on why an optimization wasn't possible.
+   Copyright (C) 2018-2019 Free Software Foundation, Inc.
+   Contributed by David Malcolm <dmalcolm@redhat.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_OPT_PROBLEM_H
+#define GCC_OPT_PROBLEM_H
+
+#include "diagnostic-core.h" /* for ATTRIBUTE_GCC_DIAG.  */
+#include "optinfo.h" /* for optinfo.  */
+
+/* This header declares a family of wrapper classes for tracking a
+   success/failure value, while optionally supporting propagating an
+   opt_problem * describing any failure back up the call stack.
+
+   For instance, at the deepest point of the callstack where the failure
+   happens, rather than:
+
+     if (!check_something ())
+       {
+         if (dump_enabled_p ())
+           dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+                            "foo is unsupported.\n");
+         return false;
+       }
+     // [...more checks...]
+
+     // All checks passed:
+     return true;
+
+   we can capture the cause of the failure via:
+
+     if (!check_something ())
+       return opt_result::failure_at (stmt, "foo is unsupported");
+     // [...more checks...]
+
+     // All checks passed:
+     return opt_result::success ();
+
+   which effectively returns true or false, whilst recording any problem.
+
+   opt_result::success and opt_result::failure return opt_result values
+   which "looks like" true/false respectively, via operator bool().
+   If dump_enabled_p, then opt_result::failure also creates an opt_problem *,
+   capturing the pertinent data (here, "foo is unsupported " and "stmt").
+   If dumps are disabled, then opt_problem instances aren't
+   created, and it's equivalent to just returning a bool.
+
+   The opt_problem can be propagated via opt_result values back up
+   the call stack to where it makes most sense to the user.
+   For instance, rather than:
+
+     bool ok = try_something_that_might_fail ();
+     if (!ok)
+       {
+         if (dump_enabled_p ())
+           dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+                            "some message.\n");
+         return false;
+       }
+
+   we can replace the bool with an opt_result, so if dump_enabled_p, we
+   assume that if try_something_that_might_fail, an opt_problem * will be
+   created, and we can propagate it up the call chain:
+
+     opt_result ok = try_something_that_might_fail ();
+     if (!ok)
+       {
+         if (dump_enabled_p ())
+           dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+                            "some message.\n");
+         return ok; // propagating the opt_result
+       }
+
+   opt_result is an opt_wrapper<bool>, where opt_wrapper<T> is a base
+   class for wrapping a T, optionally propagating an opt_problem in
+   case of failure_at (when dumps are enabled).  Similarly,
+   opt_pointer_wrapper<T> can be used to wrap pointer types (where non-NULL
+   signifies success, NULL signifies failure).
+
+   In all cases, opt_wrapper<T> acts as if the opt_problem were one of its
+   fields, but the opt_problem is actually stored in a global, so that when
+   compiled, an opt_wrapper<T> is effectively just a T, so that we're
+   still just passing e.g. a bool around; the opt_wrapper<T> classes
+   simply provide type-checking and an API to ensure that we provide
+   error-messages deep in the callstack at the places where problems
+   occur, and that we propagate them.  This also avoids having
+   to manage the ownership of the opt_problem instances.
+
+   Using opt_result and opt_wrapper<T> documents the intent of the code
+   for the places where we represent success values, and allows the C++ type
+   system to track where the deepest points in the callstack are where we
+   need to emit the failure messages from.  */
+
+/* A bundle of information about why an optimization failed (e.g.
+   vectorization), and the location in both the user's code and
+   in GCC itself where the problem occurred.
+
+   Instances are created by static member functions in opt_wrapper
+   subclasses, such as opt_result::failure.
+
+   Instances are only created when dump_enabled_p ().  */
+
+class opt_problem
+{
+ public:
+  static opt_problem *get_singleton () { return s_the_problem; }
+
+  opt_problem (const dump_location_t &loc,
+	       const char *fmt, va_list *ap)
+    ATTRIBUTE_GCC_DUMP_PRINTF (3, 0);
+
+  const dump_location_t &
+  get_dump_location () const { return m_optinfo.get_dump_location (); }
+
+  const optinfo & get_optinfo () const { return m_optinfo; }
+
+  void emit_and_clear ();
+
+ private:
+  optinfo m_optinfo;
+
+  static opt_problem *s_the_problem;
+};
+
+/* A base class for wrapper classes that track a success/failure value, while
+   optionally supporting propagating an opt_problem * describing any
+   failure back up the call stack.  */
+
+template <typename T>
+class opt_wrapper
+{
+ public:
+  typedef T wrapped_t;
+
+  /* Be accessible as the wrapped type.  */
+  operator wrapped_t () const { return m_result; }
+
+  /* No public ctor.  */
+
+  wrapped_t get_result () const { return m_result; }
+  opt_problem *get_problem () const { return opt_problem::get_singleton (); }
+
+ protected:
+  opt_wrapper (wrapped_t result, opt_problem */*problem*/)
+  : m_result (result)
+  {
+    /* "problem" is ignored: although it looks like a field, we
+       actually just use the opt_problem singleton, so that
+       opt_wrapper<T> in memory is just a T.  */
+  }
+
+ private:
+  wrapped_t m_result;
+};
+
+/* Subclass of opt_wrapper<T> for bool, where
+   - true signifies "success", and
+   - false signifies "failure"
+   whilst effectively propagating an opt_problem * describing any failure
+   back up the call stack.  */
+
+class opt_result : public opt_wrapper <bool>
+{
+ public:
+  /* Generate a "success" value: a wrapper around "true".  */
+
+  static opt_result success () { return opt_result (true, NULL); }
+
+  /* Generate a "failure" value: a wrapper around "false", and,
+     if dump_enabled_p, an opt_problem.  */
+
+  static opt_result failure_at (const dump_location_t &loc,
+				const char *fmt, ...)
+	  ATTRIBUTE_GCC_DUMP_PRINTF (2, 3)
+  {
+    opt_problem *problem = NULL;
+    if (dump_enabled_p ())
+      {
+	va_list ap;
+	va_start (ap, fmt);
+	problem = new opt_problem (loc, fmt, &ap);
+	va_end (ap);
+      }
+    return opt_result (false, problem);
+  }
+
+  /* Given a failure wrapper of some other kind, make an opt_result failure
+     object, for propagating the opt_problem up the call stack.  */
+
+  template <typename S>
+  static opt_result
+  propagate_failure (opt_wrapper <S> other)
+  {
+    return opt_result (false, other.get_problem ());
+  }
+
+ private:
+  /* Private ctor.  Instances should be created by the success and failure
+     static member functions.  */
+  opt_result (wrapped_t result, opt_problem *problem)
+  : opt_wrapper <bool> (result, problem)
+  {}
+};
+
+/* Subclass of opt_wrapper<T> where T is a pointer type, for tracking
+   success/failure, where:
+   - a non-NULL value signifies "success", and
+   - a NULL value signifies "failure",
+   whilst effectively propagating an opt_problem * describing any failure
+   back up the call stack.  */
+
+template <typename PtrType_t>
+class opt_pointer_wrapper : public opt_wrapper <PtrType_t>
+{
+ public:
+  typedef PtrType_t wrapped_pointer_t;
+
+  /* Given a non-NULL pointer, make a success object wrapping it.  */
+
+  static opt_pointer_wrapper <wrapped_pointer_t>
+  success (wrapped_pointer_t ptr)
+  {
+    return opt_pointer_wrapper <wrapped_pointer_t> (ptr, NULL);
+  }
+
+  /* Make a NULL pointer failure object, with the given message
+     (if dump_enabled_p).  */
+
+  static opt_pointer_wrapper <wrapped_pointer_t>
+  failure_at (const dump_location_t &loc,
+	      const char *fmt, ...)
+    ATTRIBUTE_GCC_DUMP_PRINTF (2, 3)
+  {
+    opt_problem *problem = NULL;
+    if (dump_enabled_p ())
+      {
+	va_list ap;
+	va_start (ap, fmt);
+	problem = new opt_problem (loc, fmt, &ap);
+	va_end (ap);
+      }
+    return opt_pointer_wrapper <wrapped_pointer_t> (NULL, problem);
+  }
+
+  /* Given a failure wrapper of some other kind, make a NULL pointer
+     failure object, propagating the problem.  */
+
+  template <typename S>
+  static opt_pointer_wrapper <wrapped_pointer_t>
+  propagate_failure (opt_wrapper <S> other)
+  {
+    return opt_pointer_wrapper <wrapped_pointer_t> (NULL,
+						    other.get_problem ());
+  }
+
+  /* Support accessing the underlying pointer via ->.  */
+
+  wrapped_pointer_t operator-> () const { return this->get_result (); }
+
+ private:
+  /* Private ctor.  Instances should be built using the static member
+     functions "success" and "failure".  */
+  opt_pointer_wrapper (wrapped_pointer_t result, opt_problem *problem)
+  : opt_wrapper<PtrType_t> (result, problem)
+  {}
+};
+
+/* A typedef for wrapping "tree" so that NULL_TREE can carry an
+   opt_problem describing the failure (if dump_enabled_p).  */
+
+typedef opt_pointer_wrapper<tree> opt_tree;
+
+#endif /* #ifndef GCC_OPT_PROBLEM_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/opt-suggestions.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/opt-suggestions.h
new file mode 100644
index 0000000..8d24833
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/opt-suggestions.h
@@ -0,0 +1,76 @@
+/* Provide suggestions to handle misspelled options, and implement the
+   --complete option for auto-completing options from a prefix.
+   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_OPT_PROPOSER_H
+#define GCC_OPT_PROPOSER_H
+
+/* Option proposer is class used by driver in order to provide hints
+   for wrong options provided.  And it's used by --complete option that's
+   intended to be invoked by BASH in order to provide better option
+   completion support.  */
+
+class option_proposer
+{
+public:
+  /* Default constructor.  */
+  option_proposer (): m_option_suggestions (NULL)
+  {}
+
+  /* Default destructor.  */
+  ~option_proposer ();
+
+  /* Helper function for driver::handle_unrecognized_options.
+
+     Given an unrecognized option BAD_OPT (without the leading dash),
+     locate the closest reasonable matching option (again, without the
+     leading dash), or NULL.
+
+     The returned string is owned by the option_proposer instance.  */
+  const char *suggest_option (const char *bad_opt);
+
+  /* Print on stdout a list of valid options that begin with OPTION_PREFIX,
+     one per line, suitable for use by Bash completion.
+
+     Implementation of the "-completion=" option.  */
+  void suggest_completion (const char *option_prefix);
+
+  /* Populate RESULTS with valid completions of options that begin
+     with OPTION_PREFIX.  */
+  void get_completions (const char *option_prefix, auto_string_vec &results);
+
+private:
+  /* Helper function for option_proposer::suggest_option.  Populate
+     m_option_suggestions with candidate strings for misspelled options.
+     The strings will be freed by the option_proposer's dtor.
+     PREFIX is used for bash completion suggestions, otherwise
+     it's set to NULL.  */
+  void build_option_suggestions (const char *prefix);
+
+  /* Find parameter completions for --param format with SEPARATOR.
+     Again, save the completions into results.  */
+  void find_param_completions (const char separator, const char *param_prefix,
+			       auto_string_vec &results);
+
+private:
+  /* Cache with all suggestions.  */
+  auto_string_vec *m_option_suggestions;
+};
+
+#endif  /* GCC_OPT_PROPOSER_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/optabs-libfuncs.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/optabs-libfuncs.h
new file mode 100644
index 0000000..85a1059
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/optabs-libfuncs.h
@@ -0,0 +1,79 @@
+/* Mapping from optabs to underlying library functions
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_OPTABS_LIBFUNCS_H
+#define GCC_OPTABS_LIBFUNCS_H
+
+#include "insn-opinit.h"
+
+rtx convert_optab_libfunc (convert_optab, machine_mode, machine_mode);
+rtx optab_libfunc (optab, machine_mode);
+
+void gen_int_libfunc (optab, const char *, char, machine_mode);
+void gen_fp_libfunc (optab, const char *, char, machine_mode);
+void gen_fixed_libfunc (optab, const char *, char, machine_mode);
+void gen_signed_fixed_libfunc (optab, const char *, char, machine_mode);
+void gen_unsigned_fixed_libfunc (optab, const char *, char, machine_mode);
+void gen_int_fp_libfunc (optab, const char *, char, machine_mode);
+void gen_intv_fp_libfunc (optab, const char *, char, machine_mode);
+void gen_int_fp_fixed_libfunc (optab, const char *, char, machine_mode);
+void gen_int_fp_signed_fixed_libfunc (optab, const char *, char, machine_mode);
+void gen_int_fixed_libfunc (optab, const char *, char, machine_mode);
+void gen_int_signed_fixed_libfunc (optab, const char *, char, machine_mode);
+void gen_int_unsigned_fixed_libfunc (optab, const char *, char, machine_mode);
+
+void gen_interclass_conv_libfunc (convert_optab, const char *,
+				  machine_mode, machine_mode);
+void gen_int_to_fp_conv_libfunc (convert_optab, const char *,
+				 machine_mode, machine_mode);
+void gen_ufloat_conv_libfunc (convert_optab, const char *,
+			      machine_mode, machine_mode);
+void gen_int_to_fp_nondecimal_conv_libfunc (convert_optab, const char *,
+					    machine_mode, machine_mode);
+void gen_fp_to_int_conv_libfunc (convert_optab, const char *,
+				 machine_mode, machine_mode);
+void gen_intraclass_conv_libfunc (convert_optab, const char *,
+				  machine_mode, machine_mode);
+void gen_trunc_conv_libfunc (convert_optab, const char *,
+			     machine_mode, machine_mode);
+void gen_extend_conv_libfunc (convert_optab, const char *,
+			      machine_mode, machine_mode);
+void gen_fract_conv_libfunc (convert_optab, const char *,
+			     machine_mode, machine_mode);
+void gen_fractuns_conv_libfunc (convert_optab, const char *,
+				machine_mode, machine_mode);
+void gen_satfract_conv_libfunc (convert_optab, const char *,
+				machine_mode, machine_mode);
+void gen_satfractuns_conv_libfunc (convert_optab, const char *,
+				   machine_mode, machine_mode);
+
+tree build_libfunc_function_visibility (const char *, symbol_visibility);
+tree build_libfunc_function (const char *);
+rtx init_one_libfunc_visibility (const char *, symbol_visibility);
+rtx init_one_libfunc (const char *);
+rtx set_user_assembler_libfunc (const char *, const char *);
+
+void set_optab_libfunc (optab, machine_mode, const char *);
+void set_conv_libfunc (convert_optab, machine_mode,
+		       machine_mode, const char *);
+
+void init_optabs (void);
+void init_sync_libfuncs (int max);
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/optabs-query.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/optabs-query.h
new file mode 100644
index 0000000..b0f50a9
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/optabs-query.h
@@ -0,0 +1,213 @@
+/* IR-agnostic target query functions relating to optabs
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_OPTABS_QUERY_H
+#define GCC_OPTABS_QUERY_H
+
+#include "insn-opinit.h"
+#include "target.h"
+
+/* Return true if OP is a conversion optab.  */
+
+inline bool
+convert_optab_p (optab op)
+{
+  return op > unknown_optab && op <= LAST_CONV_OPTAB;
+}
+
+/* Return the insn used to implement mode MODE of OP, or CODE_FOR_nothing
+   if the target does not have such an insn.  */
+
+inline enum insn_code
+optab_handler (optab op, machine_mode mode)
+{
+  unsigned scode = (op << 16) | mode;
+  gcc_assert (op > LAST_CONV_OPTAB);
+  return raw_optab_handler (scode);
+}
+
+/* Return the insn used to perform conversion OP from mode FROM_MODE
+   to mode TO_MODE; return CODE_FOR_nothing if the target does not have
+   such an insn.  */
+
+inline enum insn_code
+convert_optab_handler (convert_optab op, machine_mode to_mode,
+		       machine_mode from_mode)
+{
+  unsigned scode = (op << 16) | (from_mode << 8) | to_mode;
+  gcc_assert (convert_optab_p (op));
+  return raw_optab_handler (scode);
+}
+
+enum insn_code convert_optab_handler (convert_optab, machine_mode,
+				      machine_mode, optimization_type);
+
+/* Return the insn used to implement mode MODE of OP, or CODE_FOR_nothing
+   if the target does not have such an insn.  */
+
+inline enum insn_code
+direct_optab_handler (direct_optab op, machine_mode mode)
+{
+  return optab_handler (op, mode);
+}
+
+enum insn_code direct_optab_handler (convert_optab, machine_mode,
+				     optimization_type);
+
+/* Return true if UNOPTAB is for a trapping-on-overflow operation.  */
+
+inline bool
+trapv_unoptab_p (optab unoptab)
+{
+  return (unoptab == negv_optab
+	  || unoptab == absv_optab);
+}
+
+/* Return true if BINOPTAB is for a trapping-on-overflow operation.  */
+
+inline bool
+trapv_binoptab_p (optab binoptab)
+{
+  return (binoptab == addv_optab
+	  || binoptab == subv_optab
+	  || binoptab == smulv_optab);
+}
+
+/* Return insn code for a comparison operator with VMODE
+   resultin MASK_MODE, unsigned if UNS is true.  */
+
+static inline enum insn_code
+get_vec_cmp_icode (machine_mode vmode, machine_mode mask_mode, bool uns)
+{
+  optab tab = uns ? vec_cmpu_optab : vec_cmp_optab;
+  return convert_optab_handler (tab, vmode, mask_mode);
+}
+
+/* Return insn code for a comparison operator with VMODE
+   resultin MASK_MODE (only for EQ/NE).  */
+
+static inline enum insn_code
+get_vec_cmp_eq_icode (machine_mode vmode, machine_mode mask_mode)
+{
+  return convert_optab_handler (vec_cmpeq_optab, vmode, mask_mode);
+}
+
+/* Return insn code for a conditional operator with a comparison in
+   mode CMODE, unsigned if UNS is true, resulting in a value of mode VMODE.  */
+
+inline enum insn_code
+get_vcond_icode (machine_mode vmode, machine_mode cmode, bool uns)
+{
+  enum insn_code icode = CODE_FOR_nothing;
+  if (uns)
+    icode = convert_optab_handler (vcondu_optab, vmode, cmode);
+  else
+    icode = convert_optab_handler (vcond_optab, vmode, cmode);
+  return icode;
+}
+
+/* Return insn code for a conditional operator with a mask mode
+   MMODE resulting in a value of mode VMODE.  */
+
+static inline enum insn_code
+get_vcond_mask_icode (machine_mode vmode, machine_mode mmode)
+{
+  return convert_optab_handler (vcond_mask_optab, vmode, mmode);
+}
+
+/* Return insn code for a conditional operator with a comparison in
+   mode CMODE (only EQ/NE), resulting in a value of mode VMODE.  */
+
+static inline enum insn_code
+get_vcond_eq_icode (machine_mode vmode, machine_mode cmode)
+{
+  return convert_optab_handler (vcondeq_optab, vmode, cmode);
+}
+
+/* Enumerates the possible extraction_insn operations.  */
+enum extraction_pattern { EP_insv, EP_extv, EP_extzv };
+
+/* Describes an instruction that inserts or extracts a bitfield.  */
+struct extraction_insn
+{
+  /* The code of the instruction.  */
+  enum insn_code icode;
+
+  /* The mode that the structure operand should have.  This is byte_mode
+     when using the legacy insv, extv and extzv patterns to access memory.
+     If no mode is given, the structure is a BLKmode memory.  */
+  opt_scalar_int_mode struct_mode;
+
+  /* The mode of the field to be inserted or extracted, and by extension
+     the mode of the insertion or extraction itself.  */
+  scalar_int_mode field_mode;
+
+  /* The mode of the field's bit position.  This is only important
+     when the position is variable rather than constant.  */
+  scalar_int_mode pos_mode;
+};
+
+bool get_best_reg_extraction_insn (extraction_insn *,
+				   enum extraction_pattern,
+				   unsigned HOST_WIDE_INT, machine_mode);
+bool get_best_mem_extraction_insn (extraction_insn *,
+				   enum extraction_pattern,
+				   HOST_WIDE_INT, HOST_WIDE_INT, machine_mode);
+
+enum insn_code can_extend_p (machine_mode, machine_mode, int);
+enum insn_code can_float_p (machine_mode, machine_mode, int);
+enum insn_code can_fix_p (machine_mode, machine_mode, int, bool *);
+bool can_conditionally_move_p (machine_mode mode);
+opt_machine_mode qimode_for_vec_perm (machine_mode);
+bool selector_fits_mode_p (machine_mode, const vec_perm_indices &);
+bool can_vec_perm_var_p (machine_mode);
+bool can_vec_perm_const_p (machine_mode, const vec_perm_indices &,
+			   bool = true);
+/* Find a widening optab even if it doesn't widen as much as we want.  */
+#define find_widening_optab_handler(A, B, C) \
+  find_widening_optab_handler_and_mode (A, B, C, NULL)
+enum insn_code find_widening_optab_handler_and_mode (optab, machine_mode,
+						     machine_mode,
+						     machine_mode *);
+int can_mult_highpart_p (machine_mode, bool);
+bool can_vec_mask_load_store_p (machine_mode, machine_mode, bool);
+bool can_compare_and_swap_p (machine_mode, bool);
+bool can_atomic_exchange_p (machine_mode, bool);
+bool can_atomic_load_p (machine_mode);
+bool lshift_cheap_p (bool);
+bool supports_vec_gather_load_p ();
+bool supports_vec_scatter_store_p ();
+
+/* Version of find_widening_optab_handler_and_mode that operates on
+   specific mode types.  */
+
+template<typename T>
+inline enum insn_code
+find_widening_optab_handler_and_mode (optab op, const T &to_mode,
+				      const T &from_mode, T *found_mode)
+{
+  machine_mode tmp;
+  enum insn_code icode = find_widening_optab_handler_and_mode
+    (op, machine_mode (to_mode), machine_mode (from_mode), &tmp);
+  if (icode != CODE_FOR_nothing && found_mode)
+    *found_mode = as_a <T> (tmp);
+  return icode;
+}
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/optabs-tree.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/optabs-tree.h
new file mode 100644
index 0000000..5e48489
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/optabs-tree.h
@@ -0,0 +1,47 @@
+/* Tree-based target query functions relating to optabs
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_OPTABS_TREE_H
+#define GCC_OPTABS_TREE_H
+
+#include "optabs-query.h"
+
+/* An extra flag to control optab_for_tree_code's behavior.  This is needed to
+   distinguish between machines with a vector shift that takes a scalar for the
+   shift amount vs. machines that take a vector for the shift amount.  */
+enum optab_subtype
+{
+  optab_default,
+  optab_scalar,
+  optab_vector
+};
+
+/* Return the optab used for computing the given operation on the type given by
+   the second argument.  The third argument distinguishes between the types of
+   vector shifts and rotates.  */
+optab optab_for_tree_code (enum tree_code, const_tree, enum optab_subtype);
+bool supportable_convert_operation (enum tree_code, tree, tree, tree *,
+				    enum tree_code *);
+bool expand_vec_cmp_expr_p (tree, tree, enum tree_code);
+bool expand_vec_cond_expr_p (tree, tree, enum tree_code);
+void init_tree_optimization_optabs (tree);
+bool target_supports_op_p (tree, enum tree_code,
+			   enum optab_subtype = optab_default);
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/optabs.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/optabs.def
new file mode 100644
index 0000000..8af3a2f
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/optabs.def
@@ -0,0 +1,423 @@
+/* Definitions for operation tables, or "optabs".
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* The entries in optabs.def are categorized:
+     C: A "conversion" optab, which uses two modes; has libcall data.
+     N: A "normal" optab, which uses one mode; has libcall data.
+     D: A "direct" optab, which uses one mode; does not have libcall data.
+     V: An "oVerflow" optab.  Like N, but does not record its code in
+        code_to_optab.
+
+     CX, NX, VX: An extra pattern entry for a conversion or normal optab.
+
+   These patterns may be present in the MD file with names that contain
+   the mode(s) used and the name of the operation.  This array contains
+   a list of optabs that need to be initialized.  Within each name,
+   $a and $b are used to match a short mode name (the part of the mode
+   name not including `mode' and converted to lower-case).
+
+   $I means that only full integer modes should be considered for the
+   next mode, and $F means that only float modes should be considered.
+   $P means that both full and partial integer modes should be considered.
+   $Q means that only fixed-point modes should be considered.
+
+   The pattern may be NULL if the optab exists only for the libcalls
+   that we plan to attach to it, and there are no named patterns in
+   the md files.  */
+
+/* The extension libcalls are used for float extension.  */
+OPTAB_CL(sext_optab, "extend$b$a2", SIGN_EXTEND, "extend", gen_extend_conv_libfunc)
+OPTAB_CL(trunc_optab, "trunc$b$a2", TRUNCATE, "trunc", gen_trunc_conv_libfunc)
+OPTAB_CL(zext_optab, "zero_extend$b$a2", ZERO_EXTEND, NULL, NULL)
+
+OPTAB_CL(sfix_optab, "fix$F$b$I$a2", FIX, "fix", gen_fp_to_int_conv_libfunc)
+OPTAB_CL(ufix_optab, "fixuns$F$b$a2", UNSIGNED_FIX, "fixuns", gen_fp_to_int_conv_libfunc)
+OPTAB_CL(sfloat_optab, "float$I$b$F$a2", FLOAT, "float", gen_int_to_fp_conv_libfunc)
+OPTAB_CL(ufloat_optab, "floatuns$I$b$F$a2", UNSIGNED_FLOAT, NULL, gen_ufloat_conv_libfunc)
+
+OPTAB_CL(lrint_optab, "lrint$F$b$I$a2", UNKNOWN, "lrint", gen_int_to_fp_nondecimal_conv_libfunc)
+OPTAB_CL(lround_optab, "lround$F$b$I$a2", UNKNOWN, "lround", gen_int_to_fp_nondecimal_conv_libfunc)
+OPTAB_CL(lfloor_optab, "lfloor$F$b$I$a2", UNKNOWN, "lfloor", gen_int_to_fp_nondecimal_conv_libfunc)
+OPTAB_CL(lceil_optab, "lceil$F$b$I$a2", UNKNOWN, "lceil", gen_int_to_fp_nondecimal_conv_libfunc)
+
+/* Conversions for fixed-point modes and other modes.  */
+OPTAB_CL(fract_optab, "fract$b$a2", FRACT_CONVERT, "fract", gen_fract_conv_libfunc)
+OPTAB_CL(fractuns_optab, "fractuns$I$b$Q$a2", UNSIGNED_FRACT_CONVERT, "fractuns", gen_fractuns_conv_libfunc)
+OPTAB_CX(fractuns_optab, "fractuns$Q$b$I$a2")
+OPTAB_CL(satfract_optab, "satfract$b$Q$a2", SAT_FRACT, "satfract", gen_satfract_conv_libfunc)
+OPTAB_CL(satfractuns_optab, "satfractuns$I$b$Q$a2", UNSIGNED_SAT_FRACT, "satfractuns", gen_satfractuns_conv_libfunc)
+
+OPTAB_CD(sfixtrunc_optab, "fix_trunc$F$b$I$a2")
+OPTAB_CD(ufixtrunc_optab, "fixuns_trunc$F$b$I$a2")
+
+/* Misc optabs that use two modes; model them as "conversions".  */
+OPTAB_CD(smul_widen_optab, "mul$b$a3")
+OPTAB_CD(umul_widen_optab, "umul$b$a3")
+OPTAB_CD(usmul_widen_optab, "usmul$b$a3")
+OPTAB_CD(smadd_widen_optab, "madd$b$a4")
+OPTAB_CD(umadd_widen_optab, "umadd$b$a4")
+OPTAB_CD(ssmadd_widen_optab, "ssmadd$b$a4")
+OPTAB_CD(usmadd_widen_optab, "usmadd$b$a4")
+OPTAB_CD(smsub_widen_optab, "msub$b$a4")
+OPTAB_CD(umsub_widen_optab, "umsub$b$a4")
+OPTAB_CD(ssmsub_widen_optab, "ssmsub$b$a4")
+OPTAB_CD(usmsub_widen_optab, "usmsub$a$b4")
+OPTAB_CD(vec_load_lanes_optab, "vec_load_lanes$a$b")
+OPTAB_CD(vec_store_lanes_optab, "vec_store_lanes$a$b")
+OPTAB_CD(vec_mask_load_lanes_optab, "vec_mask_load_lanes$a$b")
+OPTAB_CD(vec_mask_store_lanes_optab, "vec_mask_store_lanes$a$b")
+OPTAB_CD(vcond_optab, "vcond$a$b")
+OPTAB_CD(vcondu_optab, "vcondu$a$b")
+OPTAB_CD(vcondeq_optab, "vcondeq$a$b")
+OPTAB_CD(vcond_mask_optab, "vcond_mask_$a$b")
+OPTAB_CD(vec_cmp_optab, "vec_cmp$a$b")
+OPTAB_CD(vec_cmpu_optab, "vec_cmpu$a$b")
+OPTAB_CD(vec_cmpeq_optab, "vec_cmpeq$a$b")
+OPTAB_CD(maskload_optab, "maskload$a$b")
+OPTAB_CD(maskstore_optab, "maskstore$a$b")
+OPTAB_CD(vec_extract_optab, "vec_extract$a$b")
+OPTAB_CD(vec_init_optab, "vec_init$a$b")
+
+OPTAB_CD (while_ult_optab, "while_ult$a$b")
+
+OPTAB_NL(add_optab, "add$P$a3", PLUS, "add", '3', gen_int_fp_fixed_libfunc)
+OPTAB_NX(add_optab, "add$F$a3")
+OPTAB_NX(add_optab, "add$Q$a3")
+OPTAB_VL(addv_optab, "addv$I$a3", PLUS, "add", '3', gen_intv_fp_libfunc)
+OPTAB_VX(addv_optab, "add$F$a3")
+OPTAB_NL(ssadd_optab, "ssadd$Q$a3", SS_PLUS, "ssadd", '3', gen_signed_fixed_libfunc)
+OPTAB_NL(usadd_optab, "usadd$Q$a3", US_PLUS, "usadd", '3', gen_unsigned_fixed_libfunc)
+OPTAB_NL(sub_optab, "sub$P$a3", MINUS, "sub", '3', gen_int_fp_fixed_libfunc)
+OPTAB_NX(sub_optab, "sub$F$a3")
+OPTAB_NX(sub_optab, "sub$Q$a3")
+OPTAB_VL(subv_optab, "subv$I$a3", MINUS, "sub", '3', gen_intv_fp_libfunc)
+OPTAB_VX(subv_optab, "sub$F$a3")
+OPTAB_NL(sssub_optab, "sssub$Q$a3", SS_MINUS, "sssub", '3', gen_signed_fixed_libfunc)
+OPTAB_NL(ussub_optab, "ussub$Q$a3", US_MINUS, "ussub", '3', gen_unsigned_fixed_libfunc)
+OPTAB_NL(smul_optab, "mul$Q$a3", MULT, "mul", '3', gen_int_fp_fixed_libfunc)
+OPTAB_NX(smul_optab, "mul$P$a3")
+OPTAB_NX(smul_optab, "mul$F$a3")
+OPTAB_VL(smulv_optab, "mulv$I$a3", MULT, "mul", '3', gen_intv_fp_libfunc)
+OPTAB_VX(smulv_optab, "mul$F$a3")
+OPTAB_NL(ssmul_optab, "ssmul$Q$a3", SS_MULT, "ssmul", '3', gen_signed_fixed_libfunc)
+OPTAB_NL(usmul_optab, "usmul$Q$a3", US_MULT, "usmul", '3', gen_unsigned_fixed_libfunc)
+OPTAB_NL(sdiv_optab, "div$a3", DIV, "div", '3', gen_int_fp_signed_fixed_libfunc)
+OPTAB_VL(sdivv_optab, "divv$I$a3", DIV, "divv", '3', gen_int_libfunc)
+OPTAB_VX(sdivv_optab, "div$F$a3")
+OPTAB_NL(ssdiv_optab, "ssdiv$Q$a3", SS_DIV, "ssdiv", '3', gen_signed_fixed_libfunc)
+OPTAB_NL(udiv_optab, "udiv$I$a3", UDIV, "udiv", '3', gen_int_unsigned_fixed_libfunc)
+OPTAB_NX(udiv_optab, "udiv$Q$a3")
+OPTAB_NL(usdiv_optab, "usdiv$Q$a3", US_DIV, "usdiv", '3', gen_unsigned_fixed_libfunc)
+OPTAB_NC(sdivmod_optab, "divmod$a4", UNKNOWN) 
+OPTAB_NC(udivmod_optab, "udivmod$a4", UNKNOWN)
+OPTAB_NL(smod_optab, "mod$a3", MOD, "mod", '3', gen_int_libfunc)
+OPTAB_NL(umod_optab, "umod$a3", UMOD, "umod", '3', gen_int_libfunc)
+OPTAB_NL(ftrunc_optab, "ftrunc$F$a2", UNKNOWN, "ftrunc", '2', gen_fp_libfunc)
+OPTAB_NL(and_optab, "and$a3", AND, "and", '3', gen_int_libfunc)
+OPTAB_NL(ior_optab, "ior$a3", IOR, "ior", '3', gen_int_libfunc)
+OPTAB_NL(xor_optab, "xor$a3", XOR, "xor", '3', gen_int_libfunc)
+OPTAB_NL(ashl_optab, "ashl$a3", ASHIFT, "ashl", '3', gen_int_fixed_libfunc)
+OPTAB_NL(ssashl_optab, "ssashl$Q$a3", SS_ASHIFT, "ssashl", '3', gen_signed_fixed_libfunc)
+OPTAB_NL(usashl_optab, "usashl$Q$a3", US_ASHIFT, "usashl", '3', gen_unsigned_fixed_libfunc)
+OPTAB_NL(ashr_optab, "ashr$a3", ASHIFTRT, "ashr", '3', gen_int_signed_fixed_libfunc)
+OPTAB_NL(lshr_optab, "lshr$a3", LSHIFTRT, "lshr", '3', gen_int_unsigned_fixed_libfunc)
+OPTAB_NC(rotl_optab, "rotl$a3", ROTATE)
+OPTAB_NC(rotr_optab, "rotr$a3", ROTATERT)
+OPTAB_VC(vashl_optab, "vashl$a3", ASHIFT)
+OPTAB_VC(vashr_optab, "vashr$a3", ASHIFTRT)
+OPTAB_VC(vlshr_optab, "vlshr$a3", LSHIFTRT)
+OPTAB_VC(vrotl_optab, "vrotl$a3", ROTATE)
+OPTAB_VC(vrotr_optab, "vrotr$a3", ROTATERT)
+OPTAB_NL(smin_optab, "smin$a3", SMIN, "min", '3', gen_int_fp_libfunc)
+OPTAB_NL(smax_optab, "smax$a3", SMAX, "max", '3', gen_int_fp_libfunc)
+OPTAB_NL(umin_optab, "umin$I$a3", UMIN, "umin", '3', gen_int_libfunc)
+OPTAB_NL(umax_optab, "umax$I$a3", UMAX, "umax", '3', gen_int_libfunc)
+
+OPTAB_NL(neg_optab, "neg$P$a2", NEG, "neg", '2', gen_int_fp_fixed_libfunc)
+OPTAB_NX(neg_optab, "neg$F$a2")
+OPTAB_NX(neg_optab, "neg$Q$a2")
+OPTAB_VL(negv_optab, "negv$I$a2", NEG, "neg", '2', gen_intv_fp_libfunc)
+OPTAB_VX(negv_optab, "neg$F$a2")
+OPTAB_NL(ssneg_optab, "ssneg$Q$a2", SS_NEG, "ssneg", '2', gen_signed_fixed_libfunc)
+OPTAB_NL(usneg_optab, "usneg$Q$a2", US_NEG, "usneg", '2', gen_unsigned_fixed_libfunc)
+OPTAB_NC(abs_optab, "abs$P$a2", ABS)
+OPTAB_NX(abs_optab, "abs$F$a2")
+OPTAB_VC(absv_optab, "absv$I$a2", ABS)
+OPTAB_VX(absv_optab, "abs$F$a2")
+OPTAB_NL(one_cmpl_optab, "one_cmpl$a2", NOT, "one_cmpl", '2', gen_int_libfunc)
+OPTAB_NC(bswap_optab, "bswap$a2", BSWAP)
+OPTAB_NL(ffs_optab, "ffs$a2", FFS, "ffs", '2', gen_int_libfunc)
+OPTAB_NL(clz_optab, "clz$a2", CLZ, "clz", '2', gen_int_libfunc)
+OPTAB_NL(ctz_optab, "ctz$a2", CTZ, "ctz", '2', gen_int_libfunc)
+OPTAB_NL(clrsb_optab, "clrsb$a2", CLRSB, "clrsb", '2', gen_int_libfunc)
+OPTAB_NL(popcount_optab, "popcount$a2", POPCOUNT, "popcount", '2', gen_int_libfunc)
+OPTAB_NL(parity_optab, "parity$a2", PARITY, "parity", '2', gen_int_libfunc)
+
+/* Comparison libcalls for integers MUST come in pairs, signed/unsigned.  */
+OPTAB_NL(cmp_optab, NULL, UNKNOWN, "cmp", '2', gen_int_fp_fixed_libfunc)
+OPTAB_NL(ucmp_optab, NULL, UNKNOWN, "ucmp", '2', gen_int_libfunc)
+
+/* EQ etc are floating point comparisons.  */
+OPTAB_NL(eq_optab, NULL, EQ, "eq", '2', gen_fp_libfunc)
+OPTAB_NL(ne_optab, NULL, NE, "ne", '2', gen_fp_libfunc)
+OPTAB_NL(gt_optab, NULL, GT, "gt", '2', gen_fp_libfunc)
+OPTAB_NL(ge_optab, NULL, GE, "ge", '2', gen_fp_libfunc)
+OPTAB_NL(lt_optab, NULL, LT, "lt", '2', gen_fp_libfunc)
+OPTAB_NL(le_optab, NULL, LE, "le", '2', gen_fp_libfunc)
+OPTAB_NL(unord_optab, NULL, UNORDERED, "unord", '2', gen_fp_libfunc)
+
+OPTAB_NL(powi_optab, NULL, UNKNOWN, "powi", '2', gen_fp_libfunc)
+
+/* These are all initialized individually, on a per-host basis.  */
+OPTAB_NC(sqrt_optab, "sqrt$a2", SQRT)
+OPTAB_NC(sync_old_add_optab, "sync_old_add$I$a", UNKNOWN)
+OPTAB_NC(sync_old_sub_optab, "sync_old_sub$I$a", UNKNOWN)
+OPTAB_NC(sync_old_ior_optab, "sync_old_ior$I$a", UNKNOWN)
+OPTAB_NC(sync_old_and_optab, "sync_old_and$I$a", UNKNOWN)
+OPTAB_NC(sync_old_xor_optab, "sync_old_xor$I$a", UNKNOWN)
+OPTAB_NC(sync_old_nand_optab, "sync_old_nand$I$a", UNKNOWN)
+OPTAB_NC(sync_new_add_optab, "sync_new_add$I$a", UNKNOWN)
+OPTAB_NC(sync_new_sub_optab, "sync_new_sub$I$a", UNKNOWN)
+OPTAB_NC(sync_new_ior_optab, "sync_new_ior$I$a", UNKNOWN)
+OPTAB_NC(sync_new_and_optab, "sync_new_and$I$a", UNKNOWN)
+OPTAB_NC(sync_new_xor_optab, "sync_new_xor$I$a", UNKNOWN)
+OPTAB_NC(sync_new_nand_optab, "sync_new_nand$I$a", UNKNOWN)
+OPTAB_NC(sync_compare_and_swap_optab, "sync_compare_and_swap$I$a", UNKNOWN)
+OPTAB_NC(sync_lock_test_and_set_optab, "sync_lock_test_and_set$I$a", UNKNOWN)
+
+OPTAB_DC(mov_optab, "mov$a", SET)
+OPTAB_DC(movstrict_optab, "movstrict$a", STRICT_LOW_PART)
+OPTAB_D (movmisalign_optab, "movmisalign$a")
+OPTAB_D (storent_optab, "storent$a")
+OPTAB_D (insv_optab, "insv$a")
+OPTAB_D (extv_optab, "extv$a")
+OPTAB_D (extzv_optab, "extzv$a")
+OPTAB_D (insvmisalign_optab, "insvmisalign$a")
+OPTAB_D (extvmisalign_optab, "extvmisalign$a")
+OPTAB_D (extzvmisalign_optab, "extzvmisalign$a")
+OPTAB_D (push_optab, "push$a1")
+OPTAB_D (reload_in_optab, "reload_in$a")
+OPTAB_D (reload_out_optab, "reload_out$a")
+
+OPTAB_DC(cbranch_optab, "cbranch$a4", COMPARE)
+OPTAB_D (addcc_optab, "add$acc")
+OPTAB_D (negcc_optab, "neg$acc")
+OPTAB_D (notcc_optab, "not$acc")
+OPTAB_D (movcc_optab, "mov$acc")
+OPTAB_D (cond_add_optab, "cond_add$a")
+OPTAB_D (cond_sub_optab, "cond_sub$a")
+OPTAB_D (cond_smul_optab, "cond_mul$a")
+OPTAB_D (cond_sdiv_optab, "cond_div$a")
+OPTAB_D (cond_smod_optab, "cond_mod$a")
+OPTAB_D (cond_udiv_optab, "cond_udiv$a")
+OPTAB_D (cond_umod_optab, "cond_umod$a")
+OPTAB_D (cond_and_optab, "cond_and$a")
+OPTAB_D (cond_ior_optab, "cond_ior$a")
+OPTAB_D (cond_xor_optab, "cond_xor$a")
+OPTAB_D (cond_smin_optab, "cond_smin$a")
+OPTAB_D (cond_smax_optab, "cond_smax$a")
+OPTAB_D (cond_umin_optab, "cond_umin$a")
+OPTAB_D (cond_umax_optab, "cond_umax$a")
+OPTAB_D (cond_fma_optab, "cond_fma$a")
+OPTAB_D (cond_fms_optab, "cond_fms$a")
+OPTAB_D (cond_fnma_optab, "cond_fnma$a")
+OPTAB_D (cond_fnms_optab, "cond_fnms$a")
+OPTAB_D (cmov_optab, "cmov$a6")
+OPTAB_D (cstore_optab, "cstore$a4")
+OPTAB_D (ctrap_optab, "ctrap$a4")
+OPTAB_D (addv4_optab, "addv$I$a4")
+OPTAB_D (subv4_optab, "subv$I$a4")
+OPTAB_D (mulv4_optab, "mulv$I$a4")
+OPTAB_D (uaddv4_optab, "uaddv$I$a4")
+OPTAB_D (usubv4_optab, "usubv$I$a4")
+OPTAB_D (umulv4_optab, "umulv$I$a4")
+OPTAB_D (negv3_optab, "negv$I$a3")
+OPTAB_D (addptr3_optab, "addptr$a3")
+
+OPTAB_D (smul_highpart_optab, "smul$a3_highpart")
+OPTAB_D (umul_highpart_optab, "umul$a3_highpart")
+
+OPTAB_D (cmpmem_optab, "cmpmem$a")
+OPTAB_D (cmpstr_optab, "cmpstr$a")
+OPTAB_D (cmpstrn_optab, "cmpstrn$a")
+OPTAB_D (movmem_optab, "movmem$a")
+OPTAB_D (setmem_optab, "setmem$a")
+OPTAB_D (strlen_optab, "strlen$a")
+
+OPTAB_DC(fma_optab, "fma$a4", FMA)
+OPTAB_D (fms_optab, "fms$a4")
+OPTAB_D (fnma_optab, "fnma$a4")
+OPTAB_D (fnms_optab, "fnms$a4")
+
+OPTAB_D (rint_optab, "rint$a2")
+OPTAB_D (round_optab, "round$a2")
+OPTAB_D (floor_optab, "floor$a2")
+OPTAB_D (ceil_optab, "ceil$a2")
+OPTAB_D (btrunc_optab, "btrunc$a2")
+OPTAB_D (nearbyint_optab, "nearbyint$a2")
+
+OPTAB_D (acos_optab, "acos$a2")
+OPTAB_D (acosh_optab, "acosh$a2")
+OPTAB_D (asin_optab, "asin$a2")
+OPTAB_D (asinh_optab, "asinh$a2")
+OPTAB_D (atan2_optab, "atan2$a3")
+OPTAB_D (atan_optab, "atan$a2")
+OPTAB_D (atanh_optab, "atanh$a2")
+OPTAB_D (copysign_optab, "copysign$F$a3")
+OPTAB_D (xorsign_optab, "xorsign$F$a3")
+OPTAB_D (cos_optab, "cos$a2")
+OPTAB_D (cosh_optab, "cosh$a2")
+OPTAB_D (exp10_optab, "exp10$a2")
+OPTAB_D (exp2_optab, "exp2$a2")
+OPTAB_D (exp_optab, "exp$a2")
+OPTAB_D (expm1_optab, "expm1$a2")
+OPTAB_D (fmod_optab, "fmod$a3")
+OPTAB_D (hypot_optab, "hypot$a3")
+OPTAB_D (ilogb_optab, "ilogb$a2")
+OPTAB_D (isinf_optab, "isinf$a2")
+OPTAB_D (ldexp_optab, "ldexp$a3")
+OPTAB_D (log10_optab, "log10$a2")
+OPTAB_D (log1p_optab, "log1p$a2")
+OPTAB_D (log2_optab, "log2$a2")
+OPTAB_D (log_optab, "log$a2")
+OPTAB_D (logb_optab, "logb$a2")
+OPTAB_D (pow_optab, "pow$a3")
+OPTAB_D (remainder_optab, "remainder$a3")
+OPTAB_D (rsqrt_optab, "rsqrt$a2")
+OPTAB_D (scalb_optab, "scalb$a3")
+OPTAB_D (signbit_optab, "signbit$F$a2")
+OPTAB_D (significand_optab, "significand$a2")
+OPTAB_D (sin_optab, "sin$a2")
+OPTAB_D (sincos_optab, "sincos$a3")
+OPTAB_D (sinh_optab, "sinh$a2")
+OPTAB_D (tan_optab, "tan$a2")
+OPTAB_D (tanh_optab, "tanh$a2")
+
+/* C99 implementations of fmax/fmin.  */
+OPTAB_D (fmax_optab, "fmax$a3")
+OPTAB_D (fmin_optab, "fmin$a3")
+
+/* Vector reduction to a scalar.  */
+OPTAB_D (reduc_smax_scal_optab, "reduc_smax_scal_$a")
+OPTAB_D (reduc_smin_scal_optab, "reduc_smin_scal_$a")
+OPTAB_D (reduc_plus_scal_optab, "reduc_plus_scal_$a")
+OPTAB_D (reduc_umax_scal_optab, "reduc_umax_scal_$a")
+OPTAB_D (reduc_umin_scal_optab, "reduc_umin_scal_$a")
+OPTAB_D (reduc_and_scal_optab,  "reduc_and_scal_$a")
+OPTAB_D (reduc_ior_scal_optab,  "reduc_ior_scal_$a")
+OPTAB_D (reduc_xor_scal_optab,  "reduc_xor_scal_$a")
+OPTAB_D (fold_left_plus_optab, "fold_left_plus_$a")
+
+OPTAB_D (extract_last_optab, "extract_last_$a")
+OPTAB_D (fold_extract_last_optab, "fold_extract_last_$a")
+
+OPTAB_D (savg_floor_optab, "avg$a3_floor")
+OPTAB_D (uavg_floor_optab, "uavg$a3_floor")
+OPTAB_D (savg_ceil_optab, "avg$a3_ceil")
+OPTAB_D (uavg_ceil_optab, "uavg$a3_ceil")
+OPTAB_D (sdot_prod_optab, "sdot_prod$I$a")
+OPTAB_D (ssum_widen_optab, "widen_ssum$I$a3")
+OPTAB_D (udot_prod_optab, "udot_prod$I$a")
+OPTAB_D (usum_widen_optab, "widen_usum$I$a3")
+OPTAB_D (usad_optab, "usad$I$a")
+OPTAB_D (ssad_optab, "ssad$I$a")
+OPTAB_D (vec_pack_sfix_trunc_optab, "vec_pack_sfix_trunc_$a")
+OPTAB_D (vec_pack_ssat_optab, "vec_pack_ssat_$a")
+OPTAB_D (vec_pack_trunc_optab, "vec_pack_trunc_$a")
+OPTAB_D (vec_pack_ufix_trunc_optab, "vec_pack_ufix_trunc_$a")
+OPTAB_D (vec_pack_sbool_trunc_optab, "vec_pack_sbool_trunc_$a")
+OPTAB_D (vec_pack_usat_optab, "vec_pack_usat_$a")
+OPTAB_D (vec_packs_float_optab, "vec_packs_float_$a")
+OPTAB_D (vec_packu_float_optab, "vec_packu_float_$a")
+OPTAB_D (vec_perm_optab, "vec_perm$a")
+OPTAB_D (vec_realign_load_optab, "vec_realign_load_$a")
+OPTAB_D (vec_set_optab, "vec_set$a")
+OPTAB_D (vec_shr_optab, "vec_shr_$a")
+OPTAB_D (vec_unpack_sfix_trunc_hi_optab, "vec_unpack_sfix_trunc_hi_$a")
+OPTAB_D (vec_unpack_sfix_trunc_lo_optab, "vec_unpack_sfix_trunc_lo_$a")
+OPTAB_D (vec_unpack_ufix_trunc_hi_optab, "vec_unpack_ufix_trunc_hi_$a")
+OPTAB_D (vec_unpack_ufix_trunc_lo_optab, "vec_unpack_ufix_trunc_lo_$a")
+OPTAB_D (vec_unpacks_float_hi_optab, "vec_unpacks_float_hi_$a")
+OPTAB_D (vec_unpacks_float_lo_optab, "vec_unpacks_float_lo_$a")
+OPTAB_D (vec_unpacks_hi_optab, "vec_unpacks_hi_$a")
+OPTAB_D (vec_unpacks_lo_optab, "vec_unpacks_lo_$a")
+OPTAB_D (vec_unpacks_sbool_hi_optab, "vec_unpacks_sbool_hi_$a")
+OPTAB_D (vec_unpacks_sbool_lo_optab, "vec_unpacks_sbool_lo_$a")
+OPTAB_D (vec_unpacku_float_hi_optab, "vec_unpacku_float_hi_$a")
+OPTAB_D (vec_unpacku_float_lo_optab, "vec_unpacku_float_lo_$a")
+OPTAB_D (vec_unpacku_hi_optab, "vec_unpacku_hi_$a")
+OPTAB_D (vec_unpacku_lo_optab, "vec_unpacku_lo_$a")
+OPTAB_D (vec_widen_smult_even_optab, "vec_widen_smult_even_$a")
+OPTAB_D (vec_widen_smult_hi_optab, "vec_widen_smult_hi_$a")
+OPTAB_D (vec_widen_smult_lo_optab, "vec_widen_smult_lo_$a")
+OPTAB_D (vec_widen_smult_odd_optab, "vec_widen_smult_odd_$a")
+OPTAB_D (vec_widen_sshiftl_hi_optab, "vec_widen_sshiftl_hi_$a")
+OPTAB_D (vec_widen_sshiftl_lo_optab, "vec_widen_sshiftl_lo_$a")
+OPTAB_D (vec_widen_umult_even_optab, "vec_widen_umult_even_$a")
+OPTAB_D (vec_widen_umult_hi_optab, "vec_widen_umult_hi_$a")
+OPTAB_D (vec_widen_umult_lo_optab, "vec_widen_umult_lo_$a")
+OPTAB_D (vec_widen_umult_odd_optab, "vec_widen_umult_odd_$a")
+OPTAB_D (vec_widen_ushiftl_hi_optab, "vec_widen_ushiftl_hi_$a")
+OPTAB_D (vec_widen_ushiftl_lo_optab, "vec_widen_ushiftl_lo_$a")
+
+OPTAB_D (sync_add_optab, "sync_add$I$a")
+OPTAB_D (sync_and_optab, "sync_and$I$a")
+OPTAB_D (sync_ior_optab, "sync_ior$I$a")
+OPTAB_D (sync_lock_release_optab, "sync_lock_release$I$a")
+OPTAB_D (sync_nand_optab, "sync_nand$I$a")
+OPTAB_D (sync_sub_optab, "sync_sub$I$a")
+OPTAB_D (sync_xor_optab, "sync_xor$I$a")
+
+OPTAB_D (atomic_add_fetch_optab, "atomic_add_fetch$I$a")
+OPTAB_D (atomic_add_optab, "atomic_add$I$a")
+OPTAB_D (atomic_and_fetch_optab, "atomic_and_fetch$I$a")
+OPTAB_D (atomic_and_optab, "atomic_and$I$a")
+OPTAB_D (atomic_bit_test_and_set_optab, "atomic_bit_test_and_set$I$a")
+OPTAB_D (atomic_bit_test_and_complement_optab, "atomic_bit_test_and_complement$I$a")
+OPTAB_D (atomic_bit_test_and_reset_optab, "atomic_bit_test_and_reset$I$a")
+OPTAB_D (atomic_compare_and_swap_optab, "atomic_compare_and_swap$I$a")
+OPTAB_D (atomic_exchange_optab,	 "atomic_exchange$I$a")
+OPTAB_D (atomic_fetch_add_optab, "atomic_fetch_add$I$a")
+OPTAB_D (atomic_fetch_and_optab, "atomic_fetch_and$I$a")
+OPTAB_D (atomic_fetch_nand_optab, "atomic_fetch_nand$I$a")
+OPTAB_D (atomic_fetch_or_optab, "atomic_fetch_or$I$a")
+OPTAB_D (atomic_fetch_sub_optab, "atomic_fetch_sub$I$a")
+OPTAB_D (atomic_fetch_xor_optab, "atomic_fetch_xor$I$a")
+OPTAB_D (atomic_load_optab, "atomic_load$I$a")
+OPTAB_D (atomic_nand_fetch_optab, "atomic_nand_fetch$I$a")
+OPTAB_D (atomic_nand_optab, "atomic_nand$I$a")
+OPTAB_D (atomic_or_fetch_optab, "atomic_or_fetch$I$a")
+OPTAB_D (atomic_or_optab, "atomic_or$I$a")
+OPTAB_D (atomic_store_optab, "atomic_store$I$a")
+OPTAB_D (atomic_sub_fetch_optab, "atomic_sub_fetch$I$a")
+OPTAB_D (atomic_sub_optab, "atomic_sub$I$a")
+OPTAB_D (atomic_xor_fetch_optab, "atomic_xor_fetch$I$a")
+OPTAB_D (atomic_xor_optab, "atomic_xor$I$a")
+
+OPTAB_D (get_thread_pointer_optab, "get_thread_pointer$I$a")
+OPTAB_D (set_thread_pointer_optab, "set_thread_pointer$I$a")
+
+OPTAB_D (gather_load_optab, "gather_load$a")
+OPTAB_D (mask_gather_load_optab, "mask_gather_load$a")
+OPTAB_D (scatter_store_optab, "scatter_store$a")
+OPTAB_D (mask_scatter_store_optab, "mask_scatter_store$a")
+
+OPTAB_DC (vec_duplicate_optab, "vec_duplicate$a", VEC_DUPLICATE)
+OPTAB_DC (vec_series_optab, "vec_series$a", VEC_SERIES)
+OPTAB_D (vec_shl_insert_optab, "vec_shl_insert_$a")
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/optabs.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/optabs.h
new file mode 100644
index 0000000..17b5dfb
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/optabs.h
@@ -0,0 +1,356 @@
+/* Definitions for code generation pass of GNU compiler.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_OPTABS_H
+#define GCC_OPTABS_H
+
+#include "optabs-query.h"
+#include "optabs-libfuncs.h"
+#include "vec-perm-indices.h"
+
+/* Generate code for a widening multiply.  */
+extern rtx expand_widening_mult (machine_mode, rtx, rtx, rtx, int, optab);
+
+/* Describes the type of an expand_operand.  Each value is associated
+   with a create_*_operand function; see the comments above those
+   functions for details.  */
+enum expand_operand_type {
+  EXPAND_FIXED,
+  EXPAND_OUTPUT,
+  EXPAND_INPUT,
+  EXPAND_CONVERT_TO,
+  EXPAND_CONVERT_FROM,
+  EXPAND_ADDRESS,
+  EXPAND_INTEGER
+};
+
+/* Information about an operand for instruction expansion.  */
+struct expand_operand {
+  /* The type of operand.  */
+  ENUM_BITFIELD (expand_operand_type) type : 8;
+
+  /* True if any conversion should treat VALUE as being unsigned
+     rather than signed.  Only meaningful for certain types.  */
+  unsigned int unsigned_p : 1;
+
+  /* Is the target operand.  */
+  unsigned int target : 1;
+
+  /* Unused; available for future use.  */
+  unsigned int unused : 6;
+
+  /* The mode passed to the convert_*_operand function.  It has a
+     type-dependent meaning.  */
+  ENUM_BITFIELD (machine_mode) mode : 16;
+
+  /* The value of the operand.  */
+  rtx value;
+
+  /* The value of an EXPAND_INTEGER operand.  */
+  poly_int64 int_value;
+};
+
+/* Initialize OP with the given fields.  Initialise the other fields
+   to their default values.  */
+
+static inline void
+create_expand_operand (struct expand_operand *op,
+		       enum expand_operand_type type,
+		       rtx value, machine_mode mode,
+		       bool unsigned_p, poly_int64 int_value = 0)
+{
+  op->type = type;
+  op->unsigned_p = unsigned_p;
+  op->unused = 0;
+  op->mode = mode;
+  op->value = value;
+  op->int_value = int_value;
+}
+
+/* Make OP describe an operand that must use rtx X, even if X is volatile.  */
+
+static inline void
+create_fixed_operand (struct expand_operand *op, rtx x)
+{
+  create_expand_operand (op, EXPAND_FIXED, x, VOIDmode, false);
+}
+
+/* Make OP describe an output operand that must have mode MODE.
+   X, if nonnull, is a suggestion for where the output should be stored.
+   It is OK for VALUE to be inconsistent with MODE, although it will just
+   be ignored in that case.  */
+
+static inline void
+create_output_operand (struct expand_operand *op, rtx x,
+		       machine_mode mode)
+{
+  create_expand_operand (op, EXPAND_OUTPUT, x, mode, false);
+}
+
+/* Make OP describe an input operand that must have mode MODE and
+   value VALUE; MODE cannot be VOIDmode.  The backend may request that
+   VALUE be copied into a different kind of rtx before being passed
+   as an operand.  */
+
+static inline void
+create_input_operand (struct expand_operand *op, rtx value,
+		      machine_mode mode)
+{
+  create_expand_operand (op, EXPAND_INPUT, value, mode, false);
+}
+
+/* Like create_input_operand, except that VALUE must first be converted
+   to mode MODE.  UNSIGNED_P says whether VALUE is unsigned.  */
+
+static inline void
+create_convert_operand_to (struct expand_operand *op, rtx value,
+			   machine_mode mode, bool unsigned_p)
+{
+  create_expand_operand (op, EXPAND_CONVERT_TO, value, mode, unsigned_p);
+}
+
+/* Make OP describe an input operand that should have the same value
+   as VALUE, after any mode conversion that the backend might request.
+   If VALUE is a CONST_INT, it should be treated as having mode MODE.
+   UNSIGNED_P says whether VALUE is unsigned.  */
+
+static inline void
+create_convert_operand_from (struct expand_operand *op, rtx value,
+			     machine_mode mode, bool unsigned_p)
+{
+  create_expand_operand (op, EXPAND_CONVERT_FROM, value, mode, unsigned_p);
+}
+
+
+/* Make OP describe an input Pmode address operand.  VALUE is the value
+   of the address, but it may need to be converted to Pmode first.  */
+
+static inline void
+create_address_operand (struct expand_operand *op, rtx value)
+{
+  create_expand_operand (op, EXPAND_ADDRESS, value, Pmode, false);
+}
+
+extern void create_integer_operand (struct expand_operand *, poly_int64);
+
+/* Passed to expand_simple_binop and expand_binop to say which options
+   to try to use if the requested operation can't be open-coded on the
+   requisite mode.  Either OPTAB_LIB or OPTAB_LIB_WIDEN says try using
+   a library call.  Either OPTAB_WIDEN or OPTAB_LIB_WIDEN says try
+   using a wider mode.  OPTAB_MUST_WIDEN says try widening and don't
+   try anything else.  */
+
+enum optab_methods
+{
+  OPTAB_DIRECT,
+  OPTAB_LIB,
+  OPTAB_WIDEN,
+  OPTAB_LIB_WIDEN,
+  OPTAB_MUST_WIDEN
+};
+
+extern rtx expand_widen_pattern_expr (struct separate_ops *, rtx , rtx , rtx,
+                                      rtx, int);
+extern rtx expand_ternary_op (machine_mode mode, optab ternary_optab,
+			      rtx op0, rtx op1, rtx op2, rtx target,
+			      int unsignedp);
+extern rtx simplify_expand_binop (machine_mode mode, optab binoptab,
+				  rtx op0, rtx op1, rtx target, int unsignedp,
+				  enum optab_methods methods);
+extern bool force_expand_binop (machine_mode, optab, rtx, rtx, rtx, int,
+				enum optab_methods);
+extern rtx expand_vector_broadcast (machine_mode, rtx);
+
+/* Generate code for a simple binary or unary operation.  "Simple" in
+   this case means "can be unambiguously described by a (mode, code)
+   pair and mapped to a single optab."  */
+extern rtx expand_simple_binop (machine_mode, enum rtx_code, rtx,
+				rtx, rtx, int, enum optab_methods);
+
+/* Expand a binary operation given optab and rtx operands.  */
+extern rtx expand_binop (machine_mode, optab, rtx, rtx, rtx, int,
+			 enum optab_methods);
+
+/* Expand a binary operation with both signed and unsigned forms.  */
+extern rtx sign_expand_binop (machine_mode, optab, optab, rtx, rtx,
+			      rtx, int, enum optab_methods);
+
+/* Generate code to perform an operation on one operand with two results.  */
+extern int expand_twoval_unop (optab, rtx, rtx, rtx, int);
+
+/* Generate code to perform an operation on two operands with two results.  */
+extern int expand_twoval_binop (optab, rtx, rtx, rtx, rtx, int);
+
+/* Generate code to perform an operation on two operands with two
+   results, using a library function.  */
+extern bool expand_twoval_binop_libfunc (optab, rtx, rtx, rtx, rtx,
+					 enum rtx_code);
+extern rtx expand_simple_unop (machine_mode, enum rtx_code, rtx, rtx,
+			       int);
+
+/* Expand a unary arithmetic operation given optab rtx operand.  */
+extern rtx expand_unop (machine_mode, optab, rtx, rtx, int);
+
+/* Expand the absolute value operation.  */
+extern rtx expand_abs_nojump (machine_mode, rtx, rtx, int);
+extern rtx expand_abs (machine_mode, rtx, rtx, int, int);
+
+/* Expand the one's complement absolute value operation.  */
+extern rtx expand_one_cmpl_abs_nojump (machine_mode, rtx, rtx);
+
+/* Expand the copysign operation.  */
+extern rtx expand_copysign (rtx, rtx, rtx);
+/* Generate an instruction with a given INSN_CODE with an output and
+   an input.  */
+extern bool maybe_emit_unop_insn (enum insn_code, rtx, rtx, enum rtx_code);
+extern void emit_unop_insn (enum insn_code, rtx, rtx, enum rtx_code);
+
+/* Emit code to make a call to a constant function or a library call.  */
+extern void emit_libcall_block (rtx_insn *, rtx, rtx, rtx);
+
+/* The various uses that a comparison can have; used by can_compare_p:
+   jumps, conditional moves, store flag operations.  */
+enum can_compare_purpose
+{
+  ccp_jump,
+  ccp_cmov,
+  ccp_store_flag
+};
+
+/* Nonzero if a compare of mode MODE can be done straightforwardly
+   (without splitting it into pieces).  */
+extern int can_compare_p (enum rtx_code, machine_mode,
+			  enum can_compare_purpose);
+extern rtx prepare_operand (enum insn_code, rtx, int, machine_mode,
+			    machine_mode, int);
+/* Emit a pair of rtl insns to compare two rtx's and to jump
+   to a label if the comparison is true.  */
+extern void emit_cmp_and_jump_insns (rtx, rtx, enum rtx_code, rtx,
+				     machine_mode, int, rtx,
+				     profile_probability prob
+					= profile_probability::uninitialized ());
+
+/* Generate code to indirectly jump to a location given in the rtx LOC.  */
+extern void emit_indirect_jump (rtx);
+
+#include "insn-config.h"
+
+#ifndef GCC_INSN_CONFIG_H
+#error "insn-config.h must be included before optabs.h"
+#endif
+
+/* Emit a conditional move operation.  */
+rtx emit_conditional_move (rtx, enum rtx_code, rtx, rtx, machine_mode,
+			   rtx, rtx, machine_mode, int);
+
+/* Emit a conditional negate or bitwise complement operation.  */
+rtx emit_conditional_neg_or_complement (rtx, rtx_code, machine_mode, rtx,
+					 rtx, rtx);
+
+rtx emit_conditional_add (rtx, enum rtx_code, rtx, rtx, machine_mode,
+			  rtx, rtx, machine_mode, int);
+
+/* Create but don't emit one rtl instruction to perform certain operations.
+   Modes must match; operands must meet the operation's predicates.
+   Likewise for subtraction and for just copying.  */
+extern rtx_insn *gen_add2_insn (rtx, rtx);
+extern rtx_insn *gen_add3_insn (rtx, rtx, rtx);
+extern int have_add2_insn (rtx, rtx);
+extern rtx_insn *gen_addptr3_insn (rtx, rtx, rtx);
+extern int have_addptr3_insn (rtx, rtx, rtx);
+extern rtx_insn *gen_sub2_insn (rtx, rtx);
+extern rtx_insn *gen_sub3_insn (rtx, rtx, rtx);
+extern int have_sub2_insn (rtx, rtx);
+
+/* Generate the body of an insn to extend Y (with mode MFROM)
+   into X (with mode MTO).  Do zero-extension if UNSIGNEDP is nonzero.  */
+extern rtx_insn *gen_extend_insn (rtx, rtx, machine_mode, machine_mode, int);
+
+/* Generate code for a FLOAT_EXPR.  */
+extern void expand_float (rtx, rtx, int);
+
+/* Generate code for a FIX_EXPR.  */
+extern void expand_fix (rtx, rtx, int);
+
+/* Generate code for a FIXED_CONVERT_EXPR.  */
+extern void expand_fixed_convert (rtx, rtx, int, int);
+
+/* Generate code for float to integral conversion.  */
+extern bool expand_sfix_optab (rtx, rtx, convert_optab);
+
+/* Report whether the machine description contains an insn which can
+   perform the operation described by CODE and MODE.  */
+extern int have_insn_for (enum rtx_code, machine_mode);
+
+/* Generate a conditional trap instruction.  */
+extern rtx_insn *gen_cond_trap (enum rtx_code, rtx, rtx, rtx);
+
+/* Generate code for VEC_PERM_EXPR.  */
+extern rtx expand_vec_perm_var (machine_mode, rtx, rtx, rtx, rtx);
+extern rtx expand_vec_perm_const (machine_mode, rtx, rtx,
+				  const vec_perm_builder &, machine_mode, rtx);
+
+/* Generate code for vector comparison.  */
+extern rtx expand_vec_cmp_expr (tree, tree, rtx);
+
+/* Generate code for VEC_COND_EXPR.  */
+extern rtx expand_vec_cond_expr (tree, tree, tree, tree, rtx);
+
+/* Generate code for VEC_SERIES_EXPR.  */
+extern rtx expand_vec_series_expr (machine_mode, rtx, rtx, rtx);
+
+/* Generate code for MULT_HIGHPART_EXPR.  */
+extern rtx expand_mult_highpart (machine_mode, rtx, rtx, rtx, bool);
+
+extern rtx expand_sync_lock_test_and_set (rtx, rtx, rtx);
+extern rtx expand_atomic_test_and_set (rtx, rtx, enum memmodel);
+extern rtx expand_atomic_exchange (rtx, rtx, rtx, enum memmodel);
+extern bool expand_atomic_compare_and_swap (rtx *, rtx *, rtx, rtx, rtx, bool,
+					    enum memmodel, enum memmodel);
+/* Generate memory barriers.  */
+extern void expand_mem_thread_fence (enum memmodel);
+extern void expand_mem_signal_fence (enum memmodel);
+
+rtx expand_atomic_load (rtx, rtx, enum memmodel);
+rtx expand_atomic_store (rtx, rtx, enum memmodel, bool);
+rtx expand_atomic_fetch_op (rtx, rtx, rtx, enum rtx_code, enum memmodel, 
+			      bool);
+
+extern bool insn_operand_matches (enum insn_code icode, unsigned int opno,
+				  rtx operand);
+extern bool valid_multiword_target_p (rtx);
+extern void create_convert_operand_from_type (struct expand_operand *op,
+					      rtx value, tree type);
+extern bool maybe_legitimize_operands (enum insn_code icode,
+				       unsigned int opno, unsigned int nops,
+				       struct expand_operand *ops);
+extern rtx_insn *maybe_gen_insn (enum insn_code icode, unsigned int nops,
+				 struct expand_operand *ops);
+extern bool maybe_expand_insn (enum insn_code icode, unsigned int nops,
+			       struct expand_operand *ops);
+extern bool maybe_expand_jump_insn (enum insn_code icode, unsigned int nops,
+				    struct expand_operand *ops);
+extern void expand_insn (enum insn_code icode, unsigned int nops,
+			 struct expand_operand *ops);
+extern void expand_jump_insn (enum insn_code icode, unsigned int nops,
+			      struct expand_operand *ops);
+
+extern enum rtx_code get_rtx_code (enum tree_code tcode, bool unsignedp);
+
+#endif /* GCC_OPTABS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/optinfo-emit-json.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/optinfo-emit-json.h
new file mode 100644
index 0000000..e1c01c5
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/optinfo-emit-json.h
@@ -0,0 +1,60 @@
+/* Emit optimization information as JSON files.
+   Copyright (C) 2018-2019 Free Software Foundation, Inc.
+   Contributed by David Malcolm <dmalcolm@redhat.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_OPTINFO_EMIT_JSON_H
+#define GCC_OPTINFO_EMIT_JSON_H
+
+#include "json.h"
+
+class optinfo;
+
+/* A class for writing out optimization records in JSON format.  */
+
+class optrecord_json_writer
+{
+public:
+  optrecord_json_writer ();
+  ~optrecord_json_writer ();
+  void write () const;
+  void add_record (const optinfo *optinfo);
+  void pop_scope ();
+
+  void add_record (json::object *obj);
+  json::object *impl_location_to_json (dump_impl_location_t loc);
+  json::object *location_to_json (location_t loc);
+  json::object *profile_count_to_json (profile_count count);
+  json::string *get_id_value_for_pass (opt_pass *pass);
+  json::object *pass_to_json (opt_pass *pass);
+  json::value *inlining_chain_to_json (location_t loc);
+  json::object *optinfo_to_json (const optinfo *optinfo);
+  void add_pass_list (json::array *arr, opt_pass *pass);
+
+ private:
+  /* The root value for the JSON file.
+     Currently the JSON values are stored in memory, and flushed when the
+     compiler exits.  It would probably be better to simply write out
+     the JSON as we go.  */
+  json::array *m_root_tuple;
+
+  /* The currently open scopes, for expressing nested optimization records.  */
+  auto_vec<json::array *> m_scopes;
+};
+
+#endif /* #ifndef GCC_OPTINFO_EMIT_JSON_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/optinfo.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/optinfo.h
new file mode 100644
index 0000000..670b09a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/optinfo.h
@@ -0,0 +1,170 @@
+/* Optimization information.
+   Copyright (C) 2018-2019 Free Software Foundation, Inc.
+   Contributed by David Malcolm <dmalcolm@redhat.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_OPTINFO_H
+#define GCC_OPTINFO_H
+
+/* An "optinfo" is a bundle of information describing part of an
+   optimization, which can be emitted to zero or more of several
+   destinations, such as:
+
+   * saved to a file as an "optimization record"
+
+   They are generated in response to calls to the "dump_*" API in
+   dumpfile.h; repeated calls to the "dump_*" API are consolidated
+   into a pending optinfo instance, with a "dump_*_loc" starting a new
+   optinfo instance.
+
+   The data sent to the dump calls are captured within the pending optinfo
+   instance as a sequence of optinfo_items.  For example, given:
+
+      if (dump_enabled_p ())
+        {
+          dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+                           "not vectorized: live stmt not supported: ");
+          dump_gimple_stmt (MSG_MISSED_OPTIMIZATION, TDF_SLIM, stmt, 0);
+        }
+
+   the "dump_printf_loc" call begins a new optinfo containing two items:
+   (1) a text item containing "not vectorized: live stmt not supported: "
+   (2) a gimple item for "stmt"
+
+   Dump destinations are thus able to access rich metadata about the
+   items when the optinfo is emitted to them, rather than just having plain
+   text.  For example, when saving the above optinfo to a file as an
+   "optimization record", the record could capture the source location of
+   "stmt" above, rather than just its textual form.
+
+   The currently pending optinfo is emitted and deleted:
+   * each time a "dump_*_loc" call occurs (which starts the next optinfo), or
+   * when the dump files are changed (at the end of a pass)
+
+   Dumping to an optinfo instance is non-trivial (due to building optinfo_item
+   instances), so all usage should be guarded by
+
+     if (optinfo_enabled_p ())
+
+   which is off by default.  */
+
+
+/* Forward decls.  */
+struct opt_pass;
+class optinfo_item;
+
+/* Return true if any of the active optinfo destinations make use
+   of inlining information.
+   (if true, then the information is preserved).  */
+
+extern bool optinfo_wants_inlining_info_p ();
+
+/* The various kinds of optinfo.  */
+
+enum optinfo_kind
+{
+  OPTINFO_KIND_SUCCESS,
+  OPTINFO_KIND_FAILURE,
+  OPTINFO_KIND_NOTE,
+  OPTINFO_KIND_SCOPE
+};
+
+extern const char *optinfo_kind_to_string (enum optinfo_kind kind);
+
+class dump_context;
+
+/* A bundle of information describing part of an optimization.  */
+
+class optinfo
+{
+  friend class dump_context;
+
+ public:
+  optinfo (const dump_location_t &loc,
+	   enum optinfo_kind kind,
+	   opt_pass *pass)
+  : m_loc (loc), m_kind (kind), m_pass (pass), m_items ()
+  {}
+  ~optinfo ();
+
+  const dump_location_t &
+  get_dump_location () const { return m_loc; }
+
+  const dump_user_location_t &
+  get_user_location () const { return m_loc.get_user_location (); }
+
+  const dump_impl_location_t &
+  get_impl_location () const { return m_loc.get_impl_location (); }
+
+  enum optinfo_kind get_kind () const { return m_kind; }
+  opt_pass *get_pass () const { return m_pass; }
+  unsigned int num_items () const { return m_items.length (); }
+  const optinfo_item *get_item (unsigned int i) const { return m_items[i]; }
+
+  location_t get_location_t () const { return m_loc.get_location_t (); }
+  profile_count get_count () const { return m_loc.get_count (); }
+
+  void add_item (optinfo_item *item);
+
+  void emit_for_opt_problem () const;
+
+ private:
+  /* Pre-canned ways of manipulating the optinfo, for use by friend class
+     dump_context.  */
+  void handle_dump_file_kind (dump_flags_t);
+
+ private:
+  dump_location_t m_loc;
+  enum optinfo_kind m_kind;
+  opt_pass *m_pass;
+  auto_vec <optinfo_item *> m_items;
+};
+
+/* An enum for discriminating between different kinds of optinfo_item.  */
+
+enum optinfo_item_kind
+{
+  OPTINFO_ITEM_KIND_TEXT,
+  OPTINFO_ITEM_KIND_TREE,
+  OPTINFO_ITEM_KIND_GIMPLE,
+  OPTINFO_ITEM_KIND_SYMTAB_NODE
+};
+
+/* An item within an optinfo.  */
+
+class optinfo_item
+{
+ public:
+  optinfo_item (enum optinfo_item_kind kind, location_t location,
+		char *text);
+  ~optinfo_item ();
+
+  enum optinfo_item_kind get_kind () const { return m_kind; }
+  location_t get_location () const { return m_location; }
+  const char *get_text () const { return m_text; }
+
+ private:
+  /* Metadata (e.g. for optimization records).  */
+  enum optinfo_item_kind m_kind;
+  location_t m_location;
+
+  /* The textual form of the item, owned by the item.  */
+  char *m_text;
+};
+
+#endif /* #ifndef GCC_OPTINFO_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/options.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/options.h
new file mode 100644
index 0000000..f615407
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/options.h
@@ -0,0 +1,7234 @@
+/* This file is auto-generated by opth-gen.awk.  */
+
+#ifndef OPTIONS_H
+#define OPTIONS_H
+
+#include "flag-types.h"
+
+#include "config/aarch64/aarch64-opts.h"
+
+#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS)
+#ifndef GENERATOR_FILE
+#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS)
+struct GTY(()) gcc_options
+#else
+struct gcc_options
+#endif
+{
+#endif
+#ifdef GENERATOR_FILE
+extern enum aarch64_arch explicit_arch;
+#else
+  enum aarch64_arch x_explicit_arch;
+#define explicit_arch global_options.x_explicit_arch
+#endif
+#ifdef GENERATOR_FILE
+extern enum aarch64_processor explicit_tune_core;
+#else
+  enum aarch64_processor x_explicit_tune_core;
+#define explicit_tune_core global_options.x_explicit_tune_core
+#endif
+#ifdef GENERATOR_FILE
+extern long aarch64_stack_protector_guard_offset;
+#else
+  long x_aarch64_stack_protector_guard_offset;
+#define aarch64_stack_protector_guard_offset global_options.x_aarch64_stack_protector_guard_offset
+#endif
+#ifdef GENERATOR_FILE
+extern unsigned aarch64_enable_bti;
+#else
+  unsigned x_aarch64_enable_bti;
+#define aarch64_enable_bti global_options.x_aarch64_enable_bti
+#endif
+#ifdef GENERATOR_FILE
+extern unsigned long aarch64_isa_flags;
+#else
+  unsigned long x_aarch64_isa_flags;
+#define aarch64_isa_flags global_options.x_aarch64_isa_flags
+#endif
+#ifdef GENERATOR_FILE
+extern HOST_WIDE_INT function_entry_patch_area_size;
+#else
+  HOST_WIDE_INT x_function_entry_patch_area_size;
+#define function_entry_patch_area_size global_options.x_function_entry_patch_area_size
+#endif
+#ifdef GENERATOR_FILE
+extern HOST_WIDE_INT function_entry_patch_area_start;
+#else
+  HOST_WIDE_INT x_function_entry_patch_area_start;
+#define function_entry_patch_area_start global_options.x_function_entry_patch_area_start
+#endif
+#ifdef GENERATOR_FILE
+extern bool dump_base_name_prefixed;
+#else
+  bool x_dump_base_name_prefixed;
+#define dump_base_name_prefixed global_options.x_dump_base_name_prefixed
+#endif
+#ifdef GENERATOR_FILE
+extern bool exit_after_options;
+#else
+  bool x_exit_after_options;
+#define exit_after_options global_options.x_exit_after_options
+#endif
+#ifdef GENERATOR_FILE
+extern bool flag_disable_hsa;
+#else
+  bool x_flag_disable_hsa;
+#define flag_disable_hsa global_options.x_flag_disable_hsa
+#endif
+#ifdef GENERATOR_FILE
+extern bool flag_dump_all_passed;
+#else
+  bool x_flag_dump_all_passed;
+#define flag_dump_all_passed global_options.x_flag_dump_all_passed
+#endif
+#ifdef GENERATOR_FILE
+extern bool flag_opts_finished;
+#else
+  bool x_flag_opts_finished;
+#define flag_opts_finished global_options.x_flag_opts_finished
+#endif
+#ifdef GENERATOR_FILE
+extern bool flag_stack_usage_info;
+#else
+  bool x_flag_stack_usage_info;
+#define flag_stack_usage_info global_options.x_flag_stack_usage_info
+#endif
+#ifdef GENERATOR_FILE
+extern bool flag_warn_unused_result;
+#else
+  bool x_flag_warn_unused_result;
+#define flag_warn_unused_result global_options.x_flag_warn_unused_result
+#endif
+#ifdef GENERATOR_FILE
+extern bool in_lto_p;
+#else
+  bool x_in_lto_p;
+#define in_lto_p global_options.x_in_lto_p
+#endif
+#ifdef GENERATOR_FILE
+extern bool use_gnu_debug_info_extensions;
+#else
+  bool x_use_gnu_debug_info_extensions;
+#define use_gnu_debug_info_extensions global_options.x_use_gnu_debug_info_extensions
+#endif
+#ifdef GENERATOR_FILE
+extern char *help_enum_printed;
+#else
+  char * x_help_enum_printed;
+#define help_enum_printed global_options.x_help_enum_printed
+#endif
+#ifdef GENERATOR_FILE
+extern char *help_printed;
+#else
+  char * x_help_printed;
+#define help_printed global_options.x_help_printed
+#endif
+#ifdef GENERATOR_FILE
+extern const char *main_input_basename;
+#else
+  const char * x_main_input_basename;
+#define main_input_basename global_options.x_main_input_basename
+#endif
+#ifdef GENERATOR_FILE
+extern const char *main_input_filename;
+#else
+  const char * x_main_input_filename;
+#define main_input_filename global_options.x_main_input_filename
+#endif
+#ifdef GENERATOR_FILE
+extern enum debug_info_levels debug_info_level;
+#else
+  enum debug_info_levels x_debug_info_level;
+#define debug_info_level global_options.x_debug_info_level
+#endif
+#ifdef GENERATOR_FILE
+extern enum debug_info_type write_symbols;
+#else
+  enum debug_info_type x_write_symbols;
+#define write_symbols global_options.x_write_symbols
+#endif
+#ifdef GENERATOR_FILE
+extern enum debug_struct_file debug_struct_generic[DINFO_USAGE_NUM_ENUMS];
+#else
+  enum debug_struct_file x_debug_struct_generic[DINFO_USAGE_NUM_ENUMS];
+#define debug_struct_generic global_options.x_debug_struct_generic
+#endif
+#ifdef GENERATOR_FILE
+extern enum debug_struct_file debug_struct_ordinary[DINFO_USAGE_NUM_ENUMS];
+#else
+  enum debug_struct_file x_debug_struct_ordinary[DINFO_USAGE_NUM_ENUMS];
+#define debug_struct_ordinary global_options.x_debug_struct_ordinary
+#endif
+#ifdef GENERATOR_FILE
+extern enum dwarf_gnat_encodings gnat_encodings;
+#else
+  enum dwarf_gnat_encodings x_gnat_encodings;
+#define gnat_encodings global_options.x_gnat_encodings
+#endif
+#ifdef GENERATOR_FILE
+extern enum incremental_link flag_incremental_link;
+#else
+  enum incremental_link x_flag_incremental_link;
+#define flag_incremental_link global_options.x_flag_incremental_link
+#endif
+#ifdef GENERATOR_FILE
+extern enum stack_check_type flag_stack_check;
+#else
+  enum stack_check_type x_flag_stack_check;
+#define flag_stack_check global_options.x_flag_stack_check
+#endif
+#ifdef GENERATOR_FILE
+extern int *param_values;
+#else
+  int * x_param_values;
+#define param_values global_options.x_param_values
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_complex_method;
+#else
+  int x_flag_complex_method;
+#define flag_complex_method global_options.x_flag_complex_method
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_debug_asm;
+#else
+  int x_flag_debug_asm;
+#define flag_debug_asm global_options.x_flag_debug_asm
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dump_rtl_in_asm;
+#else
+  int x_flag_dump_rtl_in_asm;
+#define flag_dump_rtl_in_asm global_options.x_flag_dump_rtl_in_asm
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_gen_aux_info;
+#else
+  int x_flag_gen_aux_info;
+#define flag_gen_aux_info global_options.x_flag_gen_aux_info
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_generate_lto;
+#else
+  int x_flag_generate_lto;
+#define flag_generate_lto global_options.x_flag_generate_lto
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_generate_offload;
+#else
+  int x_flag_generate_offload;
+#define flag_generate_offload global_options.x_flag_generate_offload
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_print_asm_name;
+#else
+  int x_flag_print_asm_name;
+#define flag_print_asm_name global_options.x_flag_print_asm_name
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_shlib;
+#else
+  int x_flag_shlib;
+#define flag_shlib global_options.x_flag_shlib
+#endif
+#ifdef GENERATOR_FILE
+extern int main_input_baselength;
+#else
+  int x_main_input_baselength;
+#define main_input_baselength global_options.x_main_input_baselength
+#endif
+#ifdef GENERATOR_FILE
+extern int optimize;
+#else
+  int x_optimize;
+#define optimize global_options.x_optimize
+#endif
+#ifdef GENERATOR_FILE
+extern int optimize_debug;
+#else
+  int x_optimize_debug;
+#define optimize_debug global_options.x_optimize_debug
+#endif
+#ifdef GENERATOR_FILE
+extern int optimize_fast;
+#else
+  int x_optimize_fast;
+#define optimize_fast global_options.x_optimize_fast
+#endif
+#ifdef GENERATOR_FILE
+extern int optimize_size;
+#else
+  int x_optimize_size;
+#define optimize_size global_options.x_optimize_size
+#endif
+#ifdef GENERATOR_FILE
+extern int rtl_dump_and_exit;
+#else
+  int x_rtl_dump_and_exit;
+#define rtl_dump_and_exit global_options.x_rtl_dump_and_exit
+#endif
+#ifdef GENERATOR_FILE
+extern int target_flags;
+#else
+  int x_target_flags;
+#define target_flags global_options.x_target_flags
+#endif
+#ifdef GENERATOR_FILE
+extern unsigned int flag_sanitize;
+#else
+  unsigned int x_flag_sanitize;
+#define flag_sanitize global_options.x_flag_sanitize
+#endif
+#ifdef GENERATOR_FILE
+extern unsigned int flag_sanitize_coverage;
+#else
+  unsigned int x_flag_sanitize_coverage;
+#define flag_sanitize_coverage global_options.x_flag_sanitize_coverage
+#endif
+#ifdef GENERATOR_FILE
+extern unsigned int flag_sanitize_recover;
+#else
+  unsigned int x_flag_sanitize_recover;
+#define flag_sanitize_recover global_options.x_flag_sanitize_recover
+#endif
+#ifdef GENERATOR_FILE
+extern unsigned int help_columns;
+#else
+  unsigned int x_help_columns;
+#define help_columns global_options.x_help_columns
+#endif
+#ifdef GENERATOR_FILE
+extern unsigned int initial_max_fld_align;
+#else
+  unsigned int x_initial_max_fld_align;
+#define initial_max_fld_align global_options.x_initial_max_fld_align
+#endif
+#ifdef GENERATOR_FILE
+extern void *flag_instrument_functions_exclude_files;
+#else
+  void * x_flag_instrument_functions_exclude_files;
+#define flag_instrument_functions_exclude_files global_options.x_flag_instrument_functions_exclude_files
+#endif
+#ifdef GENERATOR_FILE
+extern void *flag_instrument_functions_exclude_functions;
+#else
+  void * x_flag_instrument_functions_exclude_functions;
+#define flag_instrument_functions_exclude_functions global_options.x_flag_instrument_functions_exclude_functions
+#endif
+#ifdef GENERATOR_FILE
+extern int help_flag;
+#else
+  int x_help_flag;
+#define help_flag global_options.x_help_flag
+#endif
+#ifdef GENERATOR_FILE
+extern int no_sysroot_suffix;
+#else
+  int x_no_sysroot_suffix;
+#define no_sysroot_suffix global_options.x_no_sysroot_suffix
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_preprocess_only;
+#else
+  int x_flag_preprocess_only;
+#define flag_preprocess_only global_options.x_flag_preprocess_only
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_abi;
+#else
+  int x_warn_abi;
+#define warn_abi global_options.x_warn_abi
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_abi_tag;
+#else
+  int x_warn_abi_tag;
+#define warn_abi_tag global_options.x_warn_abi_tag
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_absolute_value;
+#else
+  int x_warn_absolute_value;
+#define warn_absolute_value global_options.x_warn_absolute_value
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_address;
+#else
+  int x_warn_address;
+#define warn_address global_options.x_warn_address
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_address_of_packed_member;
+#else
+  int x_warn_address_of_packed_member;
+#define warn_address_of_packed_member global_options.x_warn_address_of_packed_member
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_aggregate_return;
+#else
+  int x_warn_aggregate_return;
+#define warn_aggregate_return global_options.x_warn_aggregate_return
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_aggressive_loop_optimizations;
+#else
+  int x_warn_aggressive_loop_optimizations;
+#define warn_aggressive_loop_optimizations global_options.x_warn_aggressive_loop_optimizations
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_aliasing;
+#else
+  int x_warn_aliasing;
+#define warn_aliasing global_options.x_warn_aliasing
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_align_commons;
+#else
+  int x_warn_align_commons;
+#define warn_align_commons global_options.x_warn_align_commons
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_aligned_new;
+#else
+  int x_warn_aligned_new;
+#define warn_aligned_new global_options.x_warn_aligned_new
+#endif
+#ifdef GENERATOR_FILE
+extern HOST_WIDE_INT warn_alloc_size_limit;
+#else
+  HOST_WIDE_INT x_warn_alloc_size_limit;
+#define warn_alloc_size_limit global_options.x_warn_alloc_size_limit
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_alloc_zero;
+#else
+  int x_warn_alloc_zero;
+#define warn_alloc_zero global_options.x_warn_alloc_zero
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_alloca;
+#else
+  int x_warn_alloca;
+#define warn_alloca global_options.x_warn_alloca
+#endif
+#ifdef GENERATOR_FILE
+extern HOST_WIDE_INT warn_alloca_limit;
+#else
+  HOST_WIDE_INT x_warn_alloca_limit;
+#define warn_alloca_limit global_options.x_warn_alloca_limit
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_ampersand;
+#else
+  int x_warn_ampersand;
+#define warn_ampersand global_options.x_warn_ampersand
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_argument_mismatch;
+#else
+  int x_warn_argument_mismatch;
+#define warn_argument_mismatch global_options.x_warn_argument_mismatch
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_array_bounds;
+#else
+  int x_warn_array_bounds;
+#define warn_array_bounds global_options.x_warn_array_bounds
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_array_temporaries;
+#else
+  int x_warn_array_temporaries;
+#define warn_array_temporaries global_options.x_warn_array_temporaries
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_assign_intercept;
+#else
+  int x_warn_assign_intercept;
+#define warn_assign_intercept global_options.x_warn_assign_intercept
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_attribute_alias;
+#else
+  int x_warn_attribute_alias;
+#define warn_attribute_alias global_options.x_warn_attribute_alias
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_attribute_warning;
+#else
+  int x_warn_attribute_warning;
+#define warn_attribute_warning global_options.x_warn_attribute_warning
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_attributes;
+#else
+  int x_warn_attributes;
+#define warn_attributes global_options.x_warn_attributes
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_bad_function_cast;
+#else
+  int x_warn_bad_function_cast;
+#define warn_bad_function_cast global_options.x_warn_bad_function_cast
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_bool_compare;
+#else
+  int x_warn_bool_compare;
+#define warn_bool_compare global_options.x_warn_bool_compare
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_bool_op;
+#else
+  int x_warn_bool_op;
+#define warn_bool_op global_options.x_warn_bool_op
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_builtin_declaraion_mismatch;
+#else
+  int x_warn_builtin_declaraion_mismatch;
+#define warn_builtin_declaraion_mismatch global_options.x_warn_builtin_declaraion_mismatch
+#endif
+#ifdef GENERATOR_FILE
+extern int cpp_warn_builtin_macro_redefined;
+#else
+  int x_cpp_warn_builtin_macro_redefined;
+#define cpp_warn_builtin_macro_redefined global_options.x_cpp_warn_builtin_macro_redefined
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_cxx_compat;
+#else
+  int x_warn_cxx_compat;
+#define warn_cxx_compat global_options.x_warn_cxx_compat
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_cxx11_compat;
+#else
+  int x_warn_cxx11_compat;
+#define warn_cxx11_compat global_options.x_warn_cxx11_compat
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_cxx14_compat;
+#else
+  int x_warn_cxx14_compat;
+#define warn_cxx14_compat global_options.x_warn_cxx14_compat
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_cxx17_compat;
+#else
+  int x_warn_cxx17_compat;
+#define warn_cxx17_compat global_options.x_warn_cxx17_compat
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_c_binding_type;
+#else
+  int x_warn_c_binding_type;
+#define warn_c_binding_type global_options.x_warn_c_binding_type
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_c11_c2x_compat;
+#else
+  int x_warn_c11_c2x_compat;
+#define warn_c11_c2x_compat global_options.x_warn_c11_c2x_compat
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_c90_c99_compat;
+#else
+  int x_warn_c90_c99_compat;
+#define warn_c90_c99_compat global_options.x_warn_c90_c99_compat
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_c99_c11_compat;
+#else
+  int x_warn_c99_c11_compat;
+#define warn_c99_c11_compat global_options.x_warn_c99_c11_compat
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_cannot_profile;
+#else
+  int x_warn_cannot_profile;
+#define warn_cannot_profile global_options.x_warn_cannot_profile
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_cast_align;
+#else
+  int x_warn_cast_align;
+#define warn_cast_align global_options.x_warn_cast_align
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_cast_function_type;
+#else
+  int x_warn_cast_function_type;
+#define warn_cast_function_type global_options.x_warn_cast_function_type
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_cast_qual;
+#else
+  int x_warn_cast_qual;
+#define warn_cast_qual global_options.x_warn_cast_qual
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_cast_result;
+#else
+  int x_warn_cast_result;
+#define warn_cast_result global_options.x_warn_cast_result
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_catch_value;
+#else
+  int x_warn_catch_value;
+#define warn_catch_value global_options.x_warn_catch_value
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_char_subscripts;
+#else
+  int x_warn_char_subscripts;
+#define warn_char_subscripts global_options.x_warn_char_subscripts
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_character_truncation;
+#else
+  int x_warn_character_truncation;
+#define warn_character_truncation global_options.x_warn_character_truncation
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_class_conversion;
+#else
+  int x_warn_class_conversion;
+#define warn_class_conversion global_options.x_warn_class_conversion
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_class_memaccess;
+#else
+  int x_warn_class_memaccess;
+#define warn_class_memaccess global_options.x_warn_class_memaccess
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_clobbered;
+#else
+  int x_warn_clobbered;
+#define warn_clobbered global_options.x_warn_clobbered
+#endif
+#ifdef GENERATOR_FILE
+extern int cpp_warn_comment;
+#else
+  int x_cpp_warn_comment;
+#define cpp_warn_comment global_options.x_cpp_warn_comment
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_compare_reals;
+#else
+  int x_warn_compare_reals;
+#define warn_compare_reals global_options.x_warn_compare_reals
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_conditionally_supported;
+#else
+  int x_warn_conditionally_supported;
+#define warn_conditionally_supported global_options.x_warn_conditionally_supported
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_conversion;
+#else
+  int x_warn_conversion;
+#define warn_conversion global_options.x_warn_conversion
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_conversion_extra;
+#else
+  int x_warn_conversion_extra;
+#define warn_conversion_extra global_options.x_warn_conversion_extra
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_conversion_null;
+#else
+  int x_warn_conversion_null;
+#define warn_conversion_null global_options.x_warn_conversion_null
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_coverage_mismatch;
+#else
+  int x_warn_coverage_mismatch;
+#define warn_coverage_mismatch global_options.x_warn_coverage_mismatch
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_cpp;
+#else
+  int x_warn_cpp;
+#define warn_cpp global_options.x_warn_cpp
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_ctor_dtor_privacy;
+#else
+  int x_warn_ctor_dtor_privacy;
+#define warn_ctor_dtor_privacy global_options.x_warn_ctor_dtor_privacy
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_dangling_else;
+#else
+  int x_warn_dangling_else;
+#define warn_dangling_else global_options.x_warn_dangling_else
+#endif
+#ifdef GENERATOR_FILE
+extern int cpp_warn_date_time;
+#else
+  int x_cpp_warn_date_time;
+#define cpp_warn_date_time global_options.x_cpp_warn_date_time
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_declaration_after_statement;
+#else
+  int x_warn_declaration_after_statement;
+#define warn_declaration_after_statement global_options.x_warn_declaration_after_statement
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_delete_incomplete;
+#else
+  int x_warn_delete_incomplete;
+#define warn_delete_incomplete global_options.x_warn_delete_incomplete
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_delnonvdtor;
+#else
+  int x_warn_delnonvdtor;
+#define warn_delnonvdtor global_options.x_warn_delnonvdtor
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_deprecated;
+#else
+  int x_warn_deprecated;
+#define warn_deprecated global_options.x_warn_deprecated
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_deprecated_copy;
+#else
+  int x_warn_deprecated_copy;
+#define warn_deprecated_copy global_options.x_warn_deprecated_copy
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_deprecated_decl;
+#else
+  int x_warn_deprecated_decl;
+#define warn_deprecated_decl global_options.x_warn_deprecated_decl
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_designated_init;
+#else
+  int x_warn_designated_init;
+#define warn_designated_init global_options.x_warn_designated_init
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_disabled_optimization;
+#else
+  int x_warn_disabled_optimization;
+#define warn_disabled_optimization global_options.x_warn_disabled_optimization
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_discarded_array_qualifiers;
+#else
+  int x_warn_discarded_array_qualifiers;
+#define warn_discarded_array_qualifiers global_options.x_warn_discarded_array_qualifiers
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_discarded_qualifiers;
+#else
+  int x_warn_discarded_qualifiers;
+#define warn_discarded_qualifiers global_options.x_warn_discarded_qualifiers
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_div_by_zero;
+#else
+  int x_warn_div_by_zero;
+#define warn_div_by_zero global_options.x_warn_div_by_zero
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_do_subscript;
+#else
+  int x_warn_do_subscript;
+#define warn_do_subscript global_options.x_warn_do_subscript
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_double_promotion;
+#else
+  int x_warn_double_promotion;
+#define warn_double_promotion global_options.x_warn_double_promotion
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_duplicate_decl_specifier;
+#else
+  int x_warn_duplicate_decl_specifier;
+#define warn_duplicate_decl_specifier global_options.x_warn_duplicate_decl_specifier
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_duplicated_branches;
+#else
+  int x_warn_duplicated_branches;
+#define warn_duplicated_branches global_options.x_warn_duplicated_branches
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_duplicated_cond;
+#else
+  int x_warn_duplicated_cond;
+#define warn_duplicated_cond global_options.x_warn_duplicated_cond
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_ecpp;
+#else
+  int x_warn_ecpp;
+#define warn_ecpp global_options.x_warn_ecpp
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_empty_body;
+#else
+  int x_warn_empty_body;
+#define warn_empty_body global_options.x_warn_empty_body
+#endif
+#ifdef GENERATOR_FILE
+extern int cpp_warn_endif_labels;
+#else
+  int x_cpp_warn_endif_labels;
+#define cpp_warn_endif_labels global_options.x_cpp_warn_endif_labels
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_enum_compare;
+#else
+  int x_warn_enum_compare;
+#define warn_enum_compare global_options.x_warn_enum_compare
+#endif
+#ifdef GENERATOR_FILE
+extern int warnings_are_errors;
+#else
+  int x_warnings_are_errors;
+#define warnings_are_errors global_options.x_warnings_are_errors
+#endif
+#ifdef GENERATOR_FILE
+extern int cpp_warn_expansion_to_defined;
+#else
+  int x_cpp_warn_expansion_to_defined;
+#define cpp_warn_expansion_to_defined global_options.x_cpp_warn_expansion_to_defined
+#endif
+#ifdef GENERATOR_FILE
+extern int extra_warnings;
+#else
+  int x_extra_warnings;
+#define extra_warnings global_options.x_extra_warnings
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_extra_semi;
+#else
+  int x_warn_extra_semi;
+#define warn_extra_semi global_options.x_warn_extra_semi
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_fatal_errors;
+#else
+  int x_flag_fatal_errors;
+#define flag_fatal_errors global_options.x_flag_fatal_errors
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_float_conversion;
+#else
+  int x_warn_float_conversion;
+#define warn_float_conversion global_options.x_warn_float_conversion
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_float_equal;
+#else
+  int x_warn_float_equal;
+#define warn_float_equal global_options.x_warn_float_equal
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_format_contains_nul;
+#else
+  int x_warn_format_contains_nul;
+#define warn_format_contains_nul global_options.x_warn_format_contains_nul
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_format_extra_args;
+#else
+  int x_warn_format_extra_args;
+#define warn_format_extra_args global_options.x_warn_format_extra_args
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_format_nonliteral;
+#else
+  int x_warn_format_nonliteral;
+#define warn_format_nonliteral global_options.x_warn_format_nonliteral
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_format_overflow;
+#else
+  int x_warn_format_overflow;
+#define warn_format_overflow global_options.x_warn_format_overflow
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_format_security;
+#else
+  int x_warn_format_security;
+#define warn_format_security global_options.x_warn_format_security
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_format_signedness;
+#else
+  int x_warn_format_signedness;
+#define warn_format_signedness global_options.x_warn_format_signedness
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_format_trunc;
+#else
+  int x_warn_format_trunc;
+#define warn_format_trunc global_options.x_warn_format_trunc
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_format_y2k;
+#else
+  int x_warn_format_y2k;
+#define warn_format_y2k global_options.x_warn_format_y2k
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_format_zero_length;
+#else
+  int x_warn_format_zero_length;
+#define warn_format_zero_length global_options.x_warn_format_zero_length
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_format;
+#else
+  int x_warn_format;
+#define warn_format global_options.x_warn_format
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_frame_address;
+#else
+  int x_warn_frame_address;
+#define warn_frame_address global_options.x_warn_frame_address
+#endif
+#ifdef GENERATOR_FILE
+extern HOST_WIDE_INT warn_frame_larger_than_size;
+#else
+  HOST_WIDE_INT x_warn_frame_larger_than_size;
+#define warn_frame_larger_than_size global_options.x_warn_frame_larger_than_size
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_free_nonheap_object;
+#else
+  int x_warn_free_nonheap_object;
+#define warn_free_nonheap_object global_options.x_warn_free_nonheap_object
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_warn_frontend_loop_interchange;
+#else
+  int x_flag_warn_frontend_loop_interchange;
+#define flag_warn_frontend_loop_interchange global_options.x_flag_warn_frontend_loop_interchange
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_function_elimination;
+#else
+  int x_warn_function_elimination;
+#define warn_function_elimination global_options.x_warn_function_elimination
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_hsa;
+#else
+  int x_warn_hsa;
+#define warn_hsa global_options.x_warn_hsa
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_if_not_aligned;
+#else
+  int x_warn_if_not_aligned;
+#define warn_if_not_aligned global_options.x_warn_if_not_aligned
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_ignored_attributes;
+#else
+  int x_warn_ignored_attributes;
+#define warn_ignored_attributes global_options.x_warn_ignored_attributes
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_ignored_qualifiers;
+#else
+  int x_warn_ignored_qualifiers;
+#define warn_ignored_qualifiers global_options.x_warn_ignored_qualifiers
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_implicit;
+#else
+  int x_warn_implicit;
+#define warn_implicit global_options.x_warn_implicit
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_implicit_fallthrough;
+#else
+  int x_warn_implicit_fallthrough;
+#define warn_implicit_fallthrough global_options.x_warn_implicit_fallthrough
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_implicit_function_declaration;
+#else
+  int x_warn_implicit_function_declaration;
+#define warn_implicit_function_declaration global_options.x_warn_implicit_function_declaration
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_implicit_int;
+#else
+  int x_warn_implicit_int;
+#define warn_implicit_int global_options.x_warn_implicit_int
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_implicit_interface;
+#else
+  int x_warn_implicit_interface;
+#define warn_implicit_interface global_options.x_warn_implicit_interface
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_implicit_procedure;
+#else
+  int x_warn_implicit_procedure;
+#define warn_implicit_procedure global_options.x_warn_implicit_procedure
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_incompatible_pointer_types;
+#else
+  int x_warn_incompatible_pointer_types;
+#define warn_incompatible_pointer_types global_options.x_warn_incompatible_pointer_types
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_inh_var_ctor;
+#else
+  int x_warn_inh_var_ctor;
+#define warn_inh_var_ctor global_options.x_warn_inh_var_ctor
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_init_list;
+#else
+  int x_warn_init_list;
+#define warn_init_list global_options.x_warn_init_list
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_init_self;
+#else
+  int x_warn_init_self;
+#define warn_init_self global_options.x_warn_init_self
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_inline;
+#else
+  int x_warn_inline;
+#define warn_inline global_options.x_warn_inline
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_int_conversion;
+#else
+  int x_warn_int_conversion;
+#define warn_int_conversion global_options.x_warn_int_conversion
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_int_in_bool_context;
+#else
+  int x_warn_int_in_bool_context;
+#define warn_int_in_bool_context global_options.x_warn_int_in_bool_context
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_int_to_pointer_cast;
+#else
+  int x_warn_int_to_pointer_cast;
+#define warn_int_to_pointer_cast global_options.x_warn_int_to_pointer_cast
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_integer_division;
+#else
+  int x_warn_integer_division;
+#define warn_integer_division global_options.x_warn_integer_division
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_intrinsic_shadow;
+#else
+  int x_warn_intrinsic_shadow;
+#define warn_intrinsic_shadow global_options.x_warn_intrinsic_shadow
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_intrinsics_std;
+#else
+  int x_warn_intrinsics_std;
+#define warn_intrinsics_std global_options.x_warn_intrinsics_std
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_invalid_memory_model;
+#else
+  int x_warn_invalid_memory_model;
+#define warn_invalid_memory_model global_options.x_warn_invalid_memory_model
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_invalid_offsetof;
+#else
+  int x_warn_invalid_offsetof;
+#define warn_invalid_offsetof global_options.x_warn_invalid_offsetof
+#endif
+#ifdef GENERATOR_FILE
+extern int cpp_warn_invalid_pch;
+#else
+  int x_cpp_warn_invalid_pch;
+#define cpp_warn_invalid_pch global_options.x_cpp_warn_invalid_pch
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_jump_misses_init;
+#else
+  int x_warn_jump_misses_init;
+#define warn_jump_misses_init global_options.x_warn_jump_misses_init
+#endif
+#ifdef GENERATOR_FILE
+extern HOST_WIDE_INT warn_larger_than_size;
+#else
+  HOST_WIDE_INT x_warn_larger_than_size;
+#define warn_larger_than_size global_options.x_warn_larger_than_size
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_line_truncation;
+#else
+  int x_warn_line_truncation;
+#define warn_line_truncation global_options.x_warn_line_truncation
+#endif
+#ifdef GENERATOR_FILE
+extern int cpp_warn_literal_suffix;
+#else
+  int x_cpp_warn_literal_suffix;
+#define cpp_warn_literal_suffix global_options.x_cpp_warn_literal_suffix
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_logical_not_paren;
+#else
+  int x_warn_logical_not_paren;
+#define warn_logical_not_paren global_options.x_warn_logical_not_paren
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_logical_op;
+#else
+  int x_warn_logical_op;
+#define warn_logical_op global_options.x_warn_logical_op
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_long_long;
+#else
+  int x_warn_long_long;
+#define warn_long_long global_options.x_warn_long_long
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_lto_type_mismatch;
+#else
+  int x_warn_lto_type_mismatch;
+#define warn_lto_type_mismatch global_options.x_warn_lto_type_mismatch
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_main;
+#else
+  int x_warn_main;
+#define warn_main global_options.x_warn_main
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_maybe_uninitialized;
+#else
+  int x_warn_maybe_uninitialized;
+#define warn_maybe_uninitialized global_options.x_warn_maybe_uninitialized
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_memset_elt_size;
+#else
+  int x_warn_memset_elt_size;
+#define warn_memset_elt_size global_options.x_warn_memset_elt_size
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_memset_transposed_args;
+#else
+  int x_warn_memset_transposed_args;
+#define warn_memset_transposed_args global_options.x_warn_memset_transposed_args
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_misleading_indentation;
+#else
+  int x_warn_misleading_indentation;
+#define warn_misleading_indentation global_options.x_warn_misleading_indentation
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_missing_attributes;
+#else
+  int x_warn_missing_attributes;
+#define warn_missing_attributes global_options.x_warn_missing_attributes
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_missing_braces;
+#else
+  int x_warn_missing_braces;
+#define warn_missing_braces global_options.x_warn_missing_braces
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_missing_declarations;
+#else
+  int x_warn_missing_declarations;
+#define warn_missing_declarations global_options.x_warn_missing_declarations
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_missing_field_initializers;
+#else
+  int x_warn_missing_field_initializers;
+#define warn_missing_field_initializers global_options.x_warn_missing_field_initializers
+#endif
+#ifdef GENERATOR_FILE
+extern int cpp_warn_missing_include_dirs;
+#else
+  int x_cpp_warn_missing_include_dirs;
+#define cpp_warn_missing_include_dirs global_options.x_cpp_warn_missing_include_dirs
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_missing_parameter_type;
+#else
+  int x_warn_missing_parameter_type;
+#define warn_missing_parameter_type global_options.x_warn_missing_parameter_type
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_missing_profile;
+#else
+  int x_warn_missing_profile;
+#define warn_missing_profile global_options.x_warn_missing_profile
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_missing_prototypes;
+#else
+  int x_warn_missing_prototypes;
+#define warn_missing_prototypes global_options.x_warn_missing_prototypes
+#endif
+#ifdef GENERATOR_FILE
+extern int cpp_warn_multichar;
+#else
+  int x_cpp_warn_multichar;
+#define cpp_warn_multichar global_options.x_cpp_warn_multichar
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_multiple_inheritance;
+#else
+  int x_warn_multiple_inheritance;
+#define warn_multiple_inheritance global_options.x_warn_multiple_inheritance
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_multistatement_macros;
+#else
+  int x_warn_multistatement_macros;
+#define warn_multistatement_macros global_options.x_warn_multistatement_macros
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_namespaces;
+#else
+  int x_warn_namespaces;
+#define warn_namespaces global_options.x_warn_namespaces
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_narrowing;
+#else
+  int x_warn_narrowing;
+#define warn_narrowing global_options.x_warn_narrowing
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_nested_externs;
+#else
+  int x_warn_nested_externs;
+#define warn_nested_externs global_options.x_warn_nested_externs
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_noexcept;
+#else
+  int x_warn_noexcept;
+#define warn_noexcept global_options.x_warn_noexcept
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_noexcept_type;
+#else
+  int x_warn_noexcept_type;
+#define warn_noexcept_type global_options.x_warn_noexcept_type
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_nontemplate_friend;
+#else
+  int x_warn_nontemplate_friend;
+#define warn_nontemplate_friend global_options.x_warn_nontemplate_friend
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_nonvdtor;
+#else
+  int x_warn_nonvdtor;
+#define warn_nonvdtor global_options.x_warn_nonvdtor
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_nonnull;
+#else
+  int x_warn_nonnull;
+#define warn_nonnull global_options.x_warn_nonnull
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_nonnull_compare;
+#else
+  int x_warn_nonnull_compare;
+#define warn_nonnull_compare global_options.x_warn_nonnull_compare
+#endif
+#ifdef GENERATOR_FILE
+extern int cpp_warn_normalize;
+#else
+  int x_cpp_warn_normalize;
+#define cpp_warn_normalize global_options.x_cpp_warn_normalize
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_null_dereference;
+#else
+  int x_warn_null_dereference;
+#define warn_null_dereference global_options.x_warn_null_dereference
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_odr_violations;
+#else
+  int x_warn_odr_violations;
+#define warn_odr_violations global_options.x_warn_odr_violations
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_old_style_cast;
+#else
+  int x_warn_old_style_cast;
+#define warn_old_style_cast global_options.x_warn_old_style_cast
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_old_style_declaration;
+#else
+  int x_warn_old_style_declaration;
+#define warn_old_style_declaration global_options.x_warn_old_style_declaration
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_old_style_definition;
+#else
+  int x_warn_old_style_definition;
+#define warn_old_style_definition global_options.x_warn_old_style_definition
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_openmp_simd;
+#else
+  int x_warn_openmp_simd;
+#define warn_openmp_simd global_options.x_warn_openmp_simd
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_overflow;
+#else
+  int x_warn_overflow;
+#define warn_overflow global_options.x_warn_overflow
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_overlength_strings;
+#else
+  int x_warn_overlength_strings;
+#define warn_overlength_strings global_options.x_warn_overlength_strings
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_overloaded_virtual;
+#else
+  int x_warn_overloaded_virtual;
+#define warn_overloaded_virtual global_options.x_warn_overloaded_virtual
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_override_init;
+#else
+  int x_warn_override_init;
+#define warn_override_init global_options.x_warn_override_init
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_override_init_side_effects;
+#else
+  int x_warn_override_init_side_effects;
+#define warn_override_init_side_effects global_options.x_warn_override_init_side_effects
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_packed;
+#else
+  int x_warn_packed;
+#define warn_packed global_options.x_warn_packed
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_packed_bitfield_compat;
+#else
+  int x_warn_packed_bitfield_compat;
+#define warn_packed_bitfield_compat global_options.x_warn_packed_bitfield_compat
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_packed_not_aligned;
+#else
+  int x_warn_packed_not_aligned;
+#define warn_packed_not_aligned global_options.x_warn_packed_not_aligned
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_padded;
+#else
+  int x_warn_padded;
+#define warn_padded global_options.x_warn_padded
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_parentheses;
+#else
+  int x_warn_parentheses;
+#define warn_parentheses global_options.x_warn_parentheses
+#endif
+#ifdef GENERATOR_FILE
+extern int pedantic;
+#else
+  int x_pedantic;
+#define pedantic global_options.x_pedantic
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_pessimizing_move;
+#else
+  int x_warn_pessimizing_move;
+#define warn_pessimizing_move global_options.x_warn_pessimizing_move
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_placement_new;
+#else
+  int x_warn_placement_new;
+#define warn_placement_new global_options.x_warn_placement_new
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_pmf2ptr;
+#else
+  int x_warn_pmf2ptr;
+#define warn_pmf2ptr global_options.x_warn_pmf2ptr
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_pointer_arith;
+#else
+  int x_warn_pointer_arith;
+#define warn_pointer_arith global_options.x_warn_pointer_arith
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_pointer_compare;
+#else
+  int x_warn_pointer_compare;
+#define warn_pointer_compare global_options.x_warn_pointer_compare
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_pointer_sign;
+#else
+  int x_warn_pointer_sign;
+#define warn_pointer_sign global_options.x_warn_pointer_sign
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_pointer_to_int_cast;
+#else
+  int x_warn_pointer_to_int_cast;
+#define warn_pointer_to_int_cast global_options.x_warn_pointer_to_int_cast
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_pragmas;
+#else
+  int x_warn_pragmas;
+#define warn_pragmas global_options.x_warn_pragmas
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_prio_ctor_dtor;
+#else
+  int x_warn_prio_ctor_dtor;
+#define warn_prio_ctor_dtor global_options.x_warn_prio_ctor_dtor
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_property_assign_default;
+#else
+  int x_warn_property_assign_default;
+#define warn_property_assign_default global_options.x_warn_property_assign_default
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_protocol;
+#else
+  int x_warn_protocol;
+#define warn_protocol global_options.x_warn_protocol
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_psabi;
+#else
+  int x_warn_psabi;
+#define warn_psabi global_options.x_warn_psabi
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_real_q_constant;
+#else
+  int x_warn_real_q_constant;
+#define warn_real_q_constant global_options.x_warn_real_q_constant
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_realloc_lhs;
+#else
+  int x_warn_realloc_lhs;
+#define warn_realloc_lhs global_options.x_warn_realloc_lhs
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_realloc_lhs_all;
+#else
+  int x_warn_realloc_lhs_all;
+#define warn_realloc_lhs_all global_options.x_warn_realloc_lhs_all
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_redundant_decls;
+#else
+  int x_warn_redundant_decls;
+#define warn_redundant_decls global_options.x_warn_redundant_decls
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_redundant_move;
+#else
+  int x_warn_redundant_move;
+#define warn_redundant_move global_options.x_warn_redundant_move
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_register;
+#else
+  int x_warn_register;
+#define warn_register global_options.x_warn_register
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_reorder;
+#else
+  int x_warn_reorder;
+#define warn_reorder global_options.x_warn_reorder
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_restrict;
+#else
+  int x_warn_restrict;
+#define warn_restrict global_options.x_warn_restrict
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_return_local_addr;
+#else
+  int x_warn_return_local_addr;
+#define warn_return_local_addr global_options.x_warn_return_local_addr
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_return_type;
+#else
+  int x_warn_return_type;
+#define warn_return_type global_options.x_warn_return_type
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_selector;
+#else
+  int x_warn_selector;
+#define warn_selector global_options.x_warn_selector
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_sequence_point;
+#else
+  int x_warn_sequence_point;
+#define warn_sequence_point global_options.x_warn_sequence_point
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_shadow;
+#else
+  int x_warn_shadow;
+#define warn_shadow global_options.x_warn_shadow
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_shadow_ivar;
+#else
+  int x_warn_shadow_ivar;
+#define warn_shadow_ivar global_options.x_warn_shadow_ivar
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_shadow_compatible_local;
+#else
+  int x_warn_shadow_compatible_local;
+#define warn_shadow_compatible_local global_options.x_warn_shadow_compatible_local
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_shadow_local;
+#else
+  int x_warn_shadow_local;
+#define warn_shadow_local global_options.x_warn_shadow_local
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_shift_count_negative;
+#else
+  int x_warn_shift_count_negative;
+#define warn_shift_count_negative global_options.x_warn_shift_count_negative
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_shift_count_overflow;
+#else
+  int x_warn_shift_count_overflow;
+#define warn_shift_count_overflow global_options.x_warn_shift_count_overflow
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_shift_negative_value;
+#else
+  int x_warn_shift_negative_value;
+#define warn_shift_negative_value global_options.x_warn_shift_negative_value
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_shift_overflow;
+#else
+  int x_warn_shift_overflow;
+#define warn_shift_overflow global_options.x_warn_shift_overflow
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_sign_compare;
+#else
+  int x_warn_sign_compare;
+#define warn_sign_compare global_options.x_warn_sign_compare
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_sign_conversion;
+#else
+  int x_warn_sign_conversion;
+#define warn_sign_conversion global_options.x_warn_sign_conversion
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_sign_promo;
+#else
+  int x_warn_sign_promo;
+#define warn_sign_promo global_options.x_warn_sign_promo
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_sized_deallocation;
+#else
+  int x_warn_sized_deallocation;
+#define warn_sized_deallocation global_options.x_warn_sized_deallocation
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_sizeof_array_argument;
+#else
+  int x_warn_sizeof_array_argument;
+#define warn_sizeof_array_argument global_options.x_warn_sizeof_array_argument
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_sizeof_pointer_div;
+#else
+  int x_warn_sizeof_pointer_div;
+#define warn_sizeof_pointer_div global_options.x_warn_sizeof_pointer_div
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_sizeof_pointer_memaccess;
+#else
+  int x_warn_sizeof_pointer_memaccess;
+#define warn_sizeof_pointer_memaccess global_options.x_warn_sizeof_pointer_memaccess
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_stack_protect;
+#else
+  int x_warn_stack_protect;
+#define warn_stack_protect global_options.x_warn_stack_protect
+#endif
+#ifdef GENERATOR_FILE
+extern HOST_WIDE_INT warn_stack_usage;
+#else
+  HOST_WIDE_INT x_warn_stack_usage;
+#define warn_stack_usage global_options.x_warn_stack_usage
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_strict_aliasing;
+#else
+  int x_warn_strict_aliasing;
+#define warn_strict_aliasing global_options.x_warn_strict_aliasing
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_strict_null_sentinel;
+#else
+  int x_warn_strict_null_sentinel;
+#define warn_strict_null_sentinel global_options.x_warn_strict_null_sentinel
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_strict_overflow;
+#else
+  int x_warn_strict_overflow;
+#define warn_strict_overflow global_options.x_warn_strict_overflow
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_strict_prototypes;
+#else
+  int x_warn_strict_prototypes;
+#define warn_strict_prototypes global_options.x_warn_strict_prototypes
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_strict_selector_match;
+#else
+  int x_warn_strict_selector_match;
+#define warn_strict_selector_match global_options.x_warn_strict_selector_match
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_stringop_overflow;
+#else
+  int x_warn_stringop_overflow;
+#define warn_stringop_overflow global_options.x_warn_stringop_overflow
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_stringop_truncation;
+#else
+  int x_warn_stringop_truncation;
+#define warn_stringop_truncation global_options.x_warn_stringop_truncation
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_subobject_linkage;
+#else
+  int x_warn_subobject_linkage;
+#define warn_subobject_linkage global_options.x_warn_subobject_linkage
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_suggest_attribute_cold;
+#else
+  int x_warn_suggest_attribute_cold;
+#define warn_suggest_attribute_cold global_options.x_warn_suggest_attribute_cold
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_suggest_attribute_const;
+#else
+  int x_warn_suggest_attribute_const;
+#define warn_suggest_attribute_const global_options.x_warn_suggest_attribute_const
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_suggest_attribute_format;
+#else
+  int x_warn_suggest_attribute_format;
+#define warn_suggest_attribute_format global_options.x_warn_suggest_attribute_format
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_suggest_attribute_malloc;
+#else
+  int x_warn_suggest_attribute_malloc;
+#define warn_suggest_attribute_malloc global_options.x_warn_suggest_attribute_malloc
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_suggest_attribute_noreturn;
+#else
+  int x_warn_suggest_attribute_noreturn;
+#define warn_suggest_attribute_noreturn global_options.x_warn_suggest_attribute_noreturn
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_suggest_attribute_pure;
+#else
+  int x_warn_suggest_attribute_pure;
+#define warn_suggest_attribute_pure global_options.x_warn_suggest_attribute_pure
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_suggest_final_methods;
+#else
+  int x_warn_suggest_final_methods;
+#define warn_suggest_final_methods global_options.x_warn_suggest_final_methods
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_suggest_final_types;
+#else
+  int x_warn_suggest_final_types;
+#define warn_suggest_final_types global_options.x_warn_suggest_final_types
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_override;
+#else
+  int x_warn_override;
+#define warn_override global_options.x_warn_override
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_surprising;
+#else
+  int x_warn_surprising;
+#define warn_surprising global_options.x_warn_surprising
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_switch;
+#else
+  int x_warn_switch;
+#define warn_switch global_options.x_warn_switch
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_switch_bool;
+#else
+  int x_warn_switch_bool;
+#define warn_switch_bool global_options.x_warn_switch_bool
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_switch_default;
+#else
+  int x_warn_switch_default;
+#define warn_switch_default global_options.x_warn_switch_default
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_switch_enum;
+#else
+  int x_warn_switch_enum;
+#define warn_switch_enum global_options.x_warn_switch_enum
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_switch_unreachable;
+#else
+  int x_warn_switch_unreachable;
+#define warn_switch_unreachable global_options.x_warn_switch_unreachable
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_sync_nand;
+#else
+  int x_warn_sync_nand;
+#define warn_sync_nand global_options.x_warn_sync_nand
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_synth;
+#else
+  int x_warn_synth;
+#define warn_synth global_options.x_warn_synth
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_system_headers;
+#else
+  int x_warn_system_headers;
+#define warn_system_headers global_options.x_warn_system_headers
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_tabs;
+#else
+  int x_warn_tabs;
+#define warn_tabs global_options.x_warn_tabs
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_target_lifetime;
+#else
+  int x_warn_target_lifetime;
+#define warn_target_lifetime global_options.x_warn_target_lifetime
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_tautological_compare;
+#else
+  int x_warn_tautological_compare;
+#define warn_tautological_compare global_options.x_warn_tautological_compare
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_templates;
+#else
+  int x_warn_templates;
+#define warn_templates global_options.x_warn_templates
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_terminate;
+#else
+  int x_warn_terminate;
+#define warn_terminate global_options.x_warn_terminate
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_traditional;
+#else
+  int x_warn_traditional;
+#define warn_traditional global_options.x_warn_traditional
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_traditional_conversion;
+#else
+  int x_warn_traditional_conversion;
+#define warn_traditional_conversion global_options.x_warn_traditional_conversion
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_trampolines;
+#else
+  int x_warn_trampolines;
+#define warn_trampolines global_options.x_warn_trampolines
+#endif
+#ifdef GENERATOR_FILE
+extern int cpp_warn_trigraphs;
+#else
+  int x_cpp_warn_trigraphs;
+#define cpp_warn_trigraphs global_options.x_cpp_warn_trigraphs
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_type_limits;
+#else
+  int x_warn_type_limits;
+#define warn_type_limits global_options.x_warn_type_limits
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_undeclared_selector;
+#else
+  int x_warn_undeclared_selector;
+#define warn_undeclared_selector global_options.x_warn_undeclared_selector
+#endif
+#ifdef GENERATOR_FILE
+extern int cpp_warn_undef;
+#else
+  int x_cpp_warn_undef;
+#define cpp_warn_undef global_options.x_cpp_warn_undef
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_undefined_do_loop;
+#else
+  int x_warn_undefined_do_loop;
+#define warn_undefined_do_loop global_options.x_warn_undefined_do_loop
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_underflow;
+#else
+  int x_warn_underflow;
+#define warn_underflow global_options.x_warn_underflow
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_uninitialized;
+#else
+  int x_warn_uninitialized;
+#define warn_uninitialized global_options.x_warn_uninitialized
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_unknown_pragmas;
+#else
+  int x_warn_unknown_pragmas;
+#define warn_unknown_pragmas global_options.x_warn_unknown_pragmas
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_unsuffixed_float_constants;
+#else
+  int x_warn_unsuffixed_float_constants;
+#define warn_unsuffixed_float_constants global_options.x_warn_unsuffixed_float_constants
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_unused;
+#else
+  int x_warn_unused;
+#define warn_unused global_options.x_warn_unused
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_unused_but_set_parameter;
+#else
+  int x_warn_unused_but_set_parameter;
+#define warn_unused_but_set_parameter global_options.x_warn_unused_but_set_parameter
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_unused_but_set_variable;
+#else
+  int x_warn_unused_but_set_variable;
+#define warn_unused_but_set_variable global_options.x_warn_unused_but_set_variable
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_unused_const_variable;
+#else
+  int x_warn_unused_const_variable;
+#define warn_unused_const_variable global_options.x_warn_unused_const_variable
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_unused_dummy_argument;
+#else
+  int x_warn_unused_dummy_argument;
+#define warn_unused_dummy_argument global_options.x_warn_unused_dummy_argument
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_unused_function;
+#else
+  int x_warn_unused_function;
+#define warn_unused_function global_options.x_warn_unused_function
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_unused_label;
+#else
+  int x_warn_unused_label;
+#define warn_unused_label global_options.x_warn_unused_label
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_unused_local_typedefs;
+#else
+  int x_warn_unused_local_typedefs;
+#define warn_unused_local_typedefs global_options.x_warn_unused_local_typedefs
+#endif
+#ifdef GENERATOR_FILE
+extern int cpp_warn_unused_macros;
+#else
+  int x_cpp_warn_unused_macros;
+#define cpp_warn_unused_macros global_options.x_cpp_warn_unused_macros
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_unused_parameter;
+#else
+  int x_warn_unused_parameter;
+#define warn_unused_parameter global_options.x_warn_unused_parameter
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_unused_result;
+#else
+  int x_warn_unused_result;
+#define warn_unused_result global_options.x_warn_unused_result
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_unused_value;
+#else
+  int x_warn_unused_value;
+#define warn_unused_value global_options.x_warn_unused_value
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_unused_variable;
+#else
+  int x_warn_unused_variable;
+#define warn_unused_variable global_options.x_warn_unused_variable
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_use_without_only;
+#else
+  int x_warn_use_without_only;
+#define warn_use_without_only global_options.x_warn_use_without_only
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_useless_cast;
+#else
+  int x_warn_useless_cast;
+#define warn_useless_cast global_options.x_warn_useless_cast
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_varargs;
+#else
+  int x_warn_varargs;
+#define warn_varargs global_options.x_warn_varargs
+#endif
+#ifdef GENERATOR_FILE
+extern int cpp_warn_variadic_macros;
+#else
+  int x_cpp_warn_variadic_macros;
+#define cpp_warn_variadic_macros global_options.x_cpp_warn_variadic_macros
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_vector_operation_performance;
+#else
+  int x_warn_vector_operation_performance;
+#define warn_vector_operation_performance global_options.x_warn_vector_operation_performance
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_virtual_inheritance;
+#else
+  int x_warn_virtual_inheritance;
+#define warn_virtual_inheritance global_options.x_warn_virtual_inheritance
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_virtual_move_assign;
+#else
+  int x_warn_virtual_move_assign;
+#define warn_virtual_move_assign global_options.x_warn_virtual_move_assign
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_vla;
+#else
+  int x_warn_vla;
+#define warn_vla global_options.x_warn_vla
+#endif
+#ifdef GENERATOR_FILE
+extern HOST_WIDE_INT warn_vla_limit;
+#else
+  HOST_WIDE_INT x_warn_vla_limit;
+#define warn_vla_limit global_options.x_warn_vla_limit
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_volatile_register_var;
+#else
+  int x_warn_volatile_register_var;
+#define warn_volatile_register_var global_options.x_warn_volatile_register_var
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_write_strings;
+#else
+  int x_warn_write_strings;
+#define warn_write_strings global_options.x_warn_write_strings
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_zero_as_null_pointer_constant;
+#else
+  int x_warn_zero_as_null_pointer_constant;
+#define warn_zero_as_null_pointer_constant global_options.x_warn_zero_as_null_pointer_constant
+#endif
+#ifdef GENERATOR_FILE
+extern int warn_zerotrip;
+#else
+  int x_warn_zerotrip;
+#define warn_zerotrip global_options.x_warn_zerotrip
+#endif
+#ifdef GENERATOR_FILE
+extern const char *aux_info_file_name;
+#else
+  const char *x_aux_info_file_name;
+#define aux_info_file_name global_options.x_aux_info_file_name
+#endif
+#ifdef GENERATOR_FILE
+extern const char *aux_base_name;
+#else
+  const char *x_aux_base_name;
+#define aux_base_name global_options.x_aux_base_name
+#endif
+#ifdef GENERATOR_FILE
+extern const char *dump_base_name;
+#else
+  const char *x_dump_base_name;
+#define dump_base_name global_options.x_dump_base_name
+#endif
+#ifdef GENERATOR_FILE
+extern const char *dump_dir_name;
+#else
+  const char *x_dump_dir_name;
+#define dump_dir_name global_options.x_dump_dir_name
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_pic;
+#else
+  int x_flag_pic;
+#define flag_pic global_options.x_flag_pic
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_pie;
+#else
+  int x_flag_pie;
+#define flag_pie global_options.x_flag_pie
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_abi_compat_version;
+#else
+  int x_flag_abi_compat_version;
+#define flag_abi_compat_version global_options.x_flag_abi_compat_version
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_abi_version;
+#else
+  int x_flag_abi_version;
+#define flag_abi_version global_options.x_flag_abi_version
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_access_control;
+#else
+  int x_flag_access_control;
+#define flag_access_control global_options.x_flag_access_control
+#endif
+#ifdef GENERATOR_FILE
+extern const char *ada_specs_parent;
+#else
+  const char *x_ada_specs_parent;
+#define ada_specs_parent global_options.x_ada_specs_parent
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_aggressive_function_elimination;
+#else
+  int x_flag_aggressive_function_elimination;
+#define flag_aggressive_function_elimination global_options.x_flag_aggressive_function_elimination
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_aggressive_loop_optimizations;
+#else
+  int x_flag_aggressive_loop_optimizations;
+#define flag_aggressive_loop_optimizations global_options.x_flag_aggressive_loop_optimizations
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_align_commons;
+#else
+  int x_flag_align_commons;
+#define flag_align_commons global_options.x_flag_align_commons
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_align_functions;
+#else
+  int x_flag_align_functions;
+#define flag_align_functions global_options.x_flag_align_functions
+#endif
+#ifdef GENERATOR_FILE
+extern const char *str_align_functions;
+#else
+  const char *x_str_align_functions;
+#define str_align_functions global_options.x_str_align_functions
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_align_jumps;
+#else
+  int x_flag_align_jumps;
+#define flag_align_jumps global_options.x_flag_align_jumps
+#endif
+#ifdef GENERATOR_FILE
+extern const char *str_align_jumps;
+#else
+  const char *x_str_align_jumps;
+#define str_align_jumps global_options.x_str_align_jumps
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_align_labels;
+#else
+  int x_flag_align_labels;
+#define flag_align_labels global_options.x_flag_align_labels
+#endif
+#ifdef GENERATOR_FILE
+extern const char *str_align_labels;
+#else
+  const char *x_str_align_labels;
+#define str_align_labels global_options.x_str_align_labels
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_align_loops;
+#else
+  int x_flag_align_loops;
+#define flag_align_loops global_options.x_flag_align_loops
+#endif
+#ifdef GENERATOR_FILE
+extern const char *str_align_loops;
+#else
+  const char *x_str_align_loops;
+#define str_align_loops global_options.x_str_align_loops
+#endif
+#ifdef GENERATOR_FILE
+extern int aligned_new_threshold;
+#else
+  int x_aligned_new_threshold;
+#define aligned_new_threshold global_options.x_aligned_new_threshold
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_all_intrinsics;
+#else
+  int x_flag_all_intrinsics;
+#define flag_all_intrinsics global_options.x_flag_all_intrinsics
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_allow_leading_underscore;
+#else
+  int x_flag_allow_leading_underscore;
+#define flag_allow_leading_underscore global_options.x_flag_allow_leading_underscore
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_allow_parameterless_variadic_functions;
+#else
+  int x_flag_allow_parameterless_variadic_functions;
+#define flag_allow_parameterless_variadic_functions global_options.x_flag_allow_parameterless_variadic_functions
+#endif
+#ifdef GENERATOR_FILE
+extern void *common_deferred_options;
+#else
+  void *x_common_deferred_options;
+#define common_deferred_options global_options.x_common_deferred_options
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_no_asm;
+#else
+  int x_flag_no_asm;
+#define flag_no_asm global_options.x_flag_no_asm
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_assert;
+#else
+  int x_flag_assert;
+#define flag_assert global_options.x_flag_assert
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_associative_math;
+#else
+  int x_flag_associative_math;
+#define flag_associative_math global_options.x_flag_associative_math
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_assume_phsa;
+#else
+  int x_flag_assume_phsa;
+#define flag_assume_phsa global_options.x_flag_assume_phsa
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_asynchronous_unwind_tables;
+#else
+  int x_flag_asynchronous_unwind_tables;
+#define flag_asynchronous_unwind_tables global_options.x_flag_asynchronous_unwind_tables
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_auto_inc_dec;
+#else
+  int x_flag_auto_inc_dec;
+#define flag_auto_inc_dec global_options.x_flag_auto_inc_dec
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_auto_profile;
+#else
+  int x_flag_auto_profile;
+#define flag_auto_profile global_options.x_flag_auto_profile
+#endif
+#ifdef GENERATOR_FILE
+extern const char *auto_profile_file;
+#else
+  const char *x_auto_profile_file;
+#define auto_profile_file global_options.x_auto_profile_file
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_automatic;
+#else
+  int x_flag_automatic;
+#define flag_automatic global_options.x_flag_automatic
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_backslash;
+#else
+  int x_flag_backslash;
+#define flag_backslash global_options.x_flag_backslash
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_backtrace;
+#else
+  int x_flag_backtrace;
+#define flag_backtrace global_options.x_flag_backtrace
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_blas_matmul_limit;
+#else
+  int x_flag_blas_matmul_limit;
+#define flag_blas_matmul_limit global_options.x_flag_blas_matmul_limit
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_bounds_check;
+#else
+  int x_flag_bounds_check;
+#define flag_bounds_check global_options.x_flag_bounds_check
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_branch_on_count_reg;
+#else
+  int x_flag_branch_on_count_reg;
+#define flag_branch_on_count_reg global_options.x_flag_branch_on_count_reg
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_branch_probabilities;
+#else
+  int x_flag_branch_probabilities;
+#define flag_branch_probabilities global_options.x_flag_branch_probabilities
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_branch_target_load_optimize;
+#else
+  int x_flag_branch_target_load_optimize;
+#define flag_branch_target_load_optimize global_options.x_flag_branch_target_load_optimize
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_branch_target_load_optimize2;
+#else
+  int x_flag_branch_target_load_optimize2;
+#define flag_branch_target_load_optimize2 global_options.x_flag_branch_target_load_optimize2
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_btr_bb_exclusive;
+#else
+  int x_flag_btr_bb_exclusive;
+#define flag_btr_bb_exclusive global_options.x_flag_btr_bb_exclusive
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_building_libgcc;
+#else
+  int x_flag_building_libgcc;
+#define flag_building_libgcc global_options.x_flag_building_libgcc
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_building_libphobos_tests;
+#else
+  int x_flag_building_libphobos_tests;
+#define flag_building_libphobos_tests global_options.x_flag_building_libphobos_tests
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_no_builtin;
+#else
+  int x_flag_no_builtin;
+#define flag_no_builtin global_options.x_flag_no_builtin
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_c_prototypes;
+#else
+  int x_flag_c_prototypes;
+#define flag_c_prototypes global_options.x_flag_c_prototypes
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_caller_saves;
+#else
+  int x_flag_caller_saves;
+#define flag_caller_saves global_options.x_flag_caller_saves
+#endif
+#ifdef GENERATOR_FILE
+extern enum cf_protection_level flag_cf_protection;
+#else
+  enum cf_protection_level x_flag_cf_protection;
+#define flag_cf_protection global_options.x_flag_cf_protection
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_char8_t;
+#else
+  int x_flag_char8_t;
+#define flag_char8_t global_options.x_flag_char8_t
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_check_new;
+#else
+  int x_flag_check_new;
+#define flag_check_new global_options.x_flag_check_new
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_checking;
+#else
+  int x_flag_checking;
+#define flag_checking global_options.x_flag_checking
+#endif
+#ifdef GENERATOR_FILE
+extern enum gfc_fcoarray flag_coarray;
+#else
+  enum gfc_fcoarray x_flag_coarray;
+#define flag_coarray global_options.x_flag_coarray
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_code_hoisting;
+#else
+  int x_flag_code_hoisting;
+#define flag_code_hoisting global_options.x_flag_code_hoisting
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_combine_stack_adjustments;
+#else
+  int x_flag_combine_stack_adjustments;
+#define flag_combine_stack_adjustments global_options.x_flag_combine_stack_adjustments
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_no_common;
+#else
+  int x_flag_no_common;
+#define flag_no_common global_options.x_flag_no_common
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_compare_debug;
+#else
+  int x_flag_compare_debug;
+#define flag_compare_debug global_options.x_flag_compare_debug
+#endif
+#ifdef GENERATOR_FILE
+extern const char *flag_compare_debug_opt;
+#else
+  const char *x_flag_compare_debug_opt;
+#define flag_compare_debug_opt global_options.x_flag_compare_debug_opt
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_compare_elim_after_reload;
+#else
+  int x_flag_compare_elim_after_reload;
+#define flag_compare_elim_after_reload global_options.x_flag_compare_elim_after_reload
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_concepts;
+#else
+  int x_flag_concepts;
+#define flag_concepts global_options.x_flag_concepts
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_conserve_stack;
+#else
+  int x_flag_conserve_stack;
+#define flag_conserve_stack global_options.x_flag_conserve_stack
+#endif
+#ifdef GENERATOR_FILE
+extern int max_constexpr_depth;
+#else
+  int x_max_constexpr_depth;
+#define max_constexpr_depth global_options.x_max_constexpr_depth
+#endif
+#ifdef GENERATOR_FILE
+extern int constexpr_loop_limit;
+#else
+  int x_constexpr_loop_limit;
+#define constexpr_loop_limit global_options.x_constexpr_loop_limit
+#endif
+#ifdef GENERATOR_FILE
+extern HOST_WIDE_INT constexpr_ops_limit;
+#else
+  HOST_WIDE_INT x_constexpr_ops_limit;
+#define constexpr_ops_limit global_options.x_constexpr_ops_limit
+#endif
+#ifdef GENERATOR_FILE
+extern enum gfc_convert flag_convert;
+#else
+  enum gfc_convert x_flag_convert;
+#define flag_convert global_options.x_flag_convert
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_cprop_registers;
+#else
+  int x_flag_cprop_registers;
+#define flag_cprop_registers global_options.x_flag_cprop_registers
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_cray_pointer;
+#else
+  int x_flag_cray_pointer;
+#define flag_cray_pointer global_options.x_flag_cray_pointer
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_crossjumping;
+#else
+  int x_flag_crossjumping;
+#define flag_crossjumping global_options.x_flag_crossjumping
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_cse_follow_jumps;
+#else
+  int x_flag_cse_follow_jumps;
+#define flag_cse_follow_jumps global_options.x_flag_cse_follow_jumps
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_cx_fortran_rules;
+#else
+  int x_flag_cx_fortran_rules;
+#define flag_cx_fortran_rules global_options.x_flag_cx_fortran_rules
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_cx_limited_range;
+#else
+  int x_flag_cx_limited_range;
+#define flag_cx_limited_range global_options.x_flag_cx_limited_range
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_data_sections;
+#else
+  int x_flag_data_sections;
+#define flag_data_sections global_options.x_flag_data_sections
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dce;
+#else
+  int x_flag_dce;
+#define flag_dce global_options.x_flag_dce
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_debug_types_section;
+#else
+  int x_flag_debug_types_section;
+#define flag_debug_types_section global_options.x_flag_debug_types_section
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dec;
+#else
+  int x_flag_dec;
+#define flag_dec global_options.x_flag_dec
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dec_include;
+#else
+  int x_flag_dec_include;
+#define flag_dec_include global_options.x_flag_dec_include
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dec_intrinsic_ints;
+#else
+  int x_flag_dec_intrinsic_ints;
+#define flag_dec_intrinsic_ints global_options.x_flag_dec_intrinsic_ints
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dec_math;
+#else
+  int x_flag_dec_math;
+#define flag_dec_math global_options.x_flag_dec_math
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dec_static;
+#else
+  int x_flag_dec_static;
+#define flag_dec_static global_options.x_flag_dec_static
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dec_structure;
+#else
+  int x_flag_dec_structure;
+#define flag_dec_structure global_options.x_flag_dec_structure
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_declone_ctor_dtor;
+#else
+  int x_flag_declone_ctor_dtor;
+#define flag_declone_ctor_dtor global_options.x_flag_declone_ctor_dtor
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_deduce_init_list;
+#else
+  int x_flag_deduce_init_list;
+#define flag_deduce_init_list global_options.x_flag_deduce_init_list
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_default_double;
+#else
+  int x_flag_default_double;
+#define flag_default_double global_options.x_flag_default_double
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_default_integer;
+#else
+  int x_flag_default_integer;
+#define flag_default_integer global_options.x_flag_default_integer
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_default_real_10;
+#else
+  int x_flag_default_real_10;
+#define flag_default_real_10 global_options.x_flag_default_real_10
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_default_real_16;
+#else
+  int x_flag_default_real_16;
+#define flag_default_real_16 global_options.x_flag_default_real_16
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_default_real_8;
+#else
+  int x_flag_default_real_8;
+#define flag_default_real_8 global_options.x_flag_default_real_8
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_defer_pop;
+#else
+  int x_flag_defer_pop;
+#define flag_defer_pop global_options.x_flag_defer_pop
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_delayed_branch;
+#else
+  int x_flag_delayed_branch;
+#define flag_delayed_branch global_options.x_flag_delayed_branch
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_delete_dead_exceptions;
+#else
+  int x_flag_delete_dead_exceptions;
+#define flag_delete_dead_exceptions global_options.x_flag_delete_dead_exceptions
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_delete_null_pointer_checks;
+#else
+  int x_flag_delete_null_pointer_checks;
+#define flag_delete_null_pointer_checks global_options.x_flag_delete_null_pointer_checks
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_devirtualize;
+#else
+  int x_flag_devirtualize;
+#define flag_devirtualize global_options.x_flag_devirtualize
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ltrans_devirtualize;
+#else
+  int x_flag_ltrans_devirtualize;
+#define flag_ltrans_devirtualize global_options.x_flag_ltrans_devirtualize
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_devirtualize_speculatively;
+#else
+  int x_flag_devirtualize_speculatively;
+#define flag_devirtualize_speculatively global_options.x_flag_devirtualize_speculatively
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_diagnostics_show_color;
+#else
+  int x_flag_diagnostics_show_color;
+#define flag_diagnostics_show_color global_options.x_flag_diagnostics_show_color
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_diagnostics_generate_patch;
+#else
+  int x_flag_diagnostics_generate_patch;
+#define flag_diagnostics_generate_patch global_options.x_flag_diagnostics_generate_patch
+#endif
+#ifdef GENERATOR_FILE
+extern int diagnostics_minimum_margin_width;
+#else
+  int x_diagnostics_minimum_margin_width;
+#define diagnostics_minimum_margin_width global_options.x_diagnostics_minimum_margin_width
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_diagnostics_parseable_fixits;
+#else
+  int x_flag_diagnostics_parseable_fixits;
+#define flag_diagnostics_parseable_fixits global_options.x_flag_diagnostics_parseable_fixits
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_diagnostics_show_caret;
+#else
+  int x_flag_diagnostics_show_caret;
+#define flag_diagnostics_show_caret global_options.x_flag_diagnostics_show_caret
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_diagnostics_show_labels;
+#else
+  int x_flag_diagnostics_show_labels;
+#define flag_diagnostics_show_labels global_options.x_flag_diagnostics_show_labels
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_diagnostics_show_line_numbers;
+#else
+  int x_flag_diagnostics_show_line_numbers;
+#define flag_diagnostics_show_line_numbers global_options.x_flag_diagnostics_show_line_numbers
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_diagnostics_show_option;
+#else
+  int x_flag_diagnostics_show_option;
+#define flag_diagnostics_show_option global_options.x_flag_diagnostics_show_option
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_diagnostics_show_template_tree;
+#else
+  int x_flag_diagnostics_show_template_tree;
+#define flag_diagnostics_show_template_tree global_options.x_flag_diagnostics_show_template_tree
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dollar_ok;
+#else
+  int x_flag_dollar_ok;
+#define flag_dollar_ok global_options.x_flag_dollar_ok
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dse;
+#else
+  int x_flag_dse;
+#define flag_dse global_options.x_flag_dse
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dump_ada_spec;
+#else
+  int x_flag_dump_ada_spec;
+#define flag_dump_ada_spec global_options.x_flag_dump_ada_spec
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dump_ada_spec_slim;
+#else
+  int x_flag_dump_ada_spec_slim;
+#define flag_dump_ada_spec_slim global_options.x_flag_dump_ada_spec_slim
+#endif
+#ifdef GENERATOR_FILE
+extern const char *flag_dump_final_insns;
+#else
+  const char *x_flag_dump_final_insns;
+#define flag_dump_final_insns global_options.x_flag_dump_final_insns
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dump_fortran_optimized;
+#else
+  int x_flag_dump_fortran_optimized;
+#define flag_dump_fortran_optimized global_options.x_flag_dump_fortran_optimized
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dump_fortran_original;
+#else
+  int x_flag_dump_fortran_original;
+#define flag_dump_fortran_original global_options.x_flag_dump_fortran_original
+#endif
+#ifdef GENERATOR_FILE
+extern const char *flag_dump_go_spec;
+#else
+  const char *x_flag_dump_go_spec;
+#define flag_dump_go_spec global_options.x_flag_dump_go_spec
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dump_locations;
+#else
+  int x_flag_dump_locations;
+#define flag_dump_locations global_options.x_flag_dump_locations
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dump_noaddr;
+#else
+  int x_flag_dump_noaddr;
+#define flag_dump_noaddr global_options.x_flag_dump_noaddr
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dump_passes;
+#else
+  int x_flag_dump_passes;
+#define flag_dump_passes global_options.x_flag_dump_passes
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dump_unnumbered;
+#else
+  int x_flag_dump_unnumbered;
+#define flag_dump_unnumbered global_options.x_flag_dump_unnumbered
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dump_unnumbered_links;
+#else
+  int x_flag_dump_unnumbered_links;
+#define flag_dump_unnumbered_links global_options.x_flag_dump_unnumbered_links
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_dwarf2_cfi_asm;
+#else
+  int x_flag_dwarf2_cfi_asm;
+#define flag_dwarf2_cfi_asm global_options.x_flag_dwarf2_cfi_asm
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_early_inlining;
+#else
+  int x_flag_early_inlining;
+#define flag_early_inlining global_options.x_flag_early_inlining
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_elide_constructors;
+#else
+  int x_flag_elide_constructors;
+#define flag_elide_constructors global_options.x_flag_elide_constructors
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_elide_type;
+#else
+  int x_flag_elide_type;
+#define flag_elide_type global_options.x_flag_elide_type
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_debug_only_used_symbols;
+#else
+  int x_flag_debug_only_used_symbols;
+#define flag_debug_only_used_symbols global_options.x_flag_debug_only_used_symbols
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_eliminate_unused_debug_types;
+#else
+  int x_flag_eliminate_unused_debug_types;
+#define flag_eliminate_unused_debug_types global_options.x_flag_eliminate_unused_debug_types
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_emit_class_debug_always;
+#else
+  int x_flag_emit_class_debug_always;
+#define flag_emit_class_debug_always global_options.x_flag_emit_class_debug_always
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_enforce_eh_specs;
+#else
+  int x_flag_enforce_eh_specs;
+#define flag_enforce_eh_specs global_options.x_flag_enforce_eh_specs
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_exceptions;
+#else
+  int x_flag_exceptions;
+#define flag_exceptions global_options.x_flag_exceptions
+#endif
+#ifdef GENERATOR_FILE
+extern enum excess_precision flag_excess_precision_cmdline;
+#else
+  enum excess_precision x_flag_excess_precision_cmdline;
+#define flag_excess_precision_cmdline global_options.x_flag_excess_precision_cmdline
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_expensive_optimizations;
+#else
+  int x_flag_expensive_optimizations;
+#define flag_expensive_optimizations global_options.x_flag_expensive_optimizations
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ext_numeric_literals;
+#else
+  int x_flag_ext_numeric_literals;
+#define flag_ext_numeric_literals global_options.x_flag_ext_numeric_literals
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_extern_tls_init;
+#else
+  int x_flag_extern_tls_init;
+#define flag_extern_tls_init global_options.x_flag_extern_tls_init
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_external_blas;
+#else
+  int x_flag_external_blas;
+#define flag_external_blas global_options.x_flag_external_blas
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_f2c;
+#else
+  int x_flag_f2c;
+#define flag_f2c global_options.x_flag_f2c
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_fat_lto_objects;
+#else
+  int x_flag_fat_lto_objects;
+#define flag_fat_lto_objects global_options.x_flag_fat_lto_objects
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_finite_math_only;
+#else
+  int x_flag_finite_math_only;
+#define flag_finite_math_only global_options.x_flag_finite_math_only
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_fixed_line_length;
+#else
+  int x_flag_fixed_line_length;
+#define flag_fixed_line_length global_options.x_flag_fixed_line_length
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_float_store;
+#else
+  int x_flag_float_store;
+#define flag_float_store global_options.x_flag_float_store
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_forward_propagate;
+#else
+  int x_flag_forward_propagate;
+#define flag_forward_propagate global_options.x_flag_forward_propagate
+#endif
+#ifdef GENERATOR_FILE
+extern enum fp_contract_mode flag_fp_contract_mode;
+#else
+  enum fp_contract_mode x_flag_fp_contract_mode;
+#define flag_fp_contract_mode global_options.x_flag_fp_contract_mode
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_fp_int_builtin_inexact;
+#else
+  int x_flag_fp_int_builtin_inexact;
+#define flag_fp_int_builtin_inexact global_options.x_flag_fp_int_builtin_inexact
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_free_line_length;
+#else
+  int x_flag_free_line_length;
+#define flag_free_line_length global_options.x_flag_free_line_length
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_frontend_loop_interchange;
+#else
+  int x_flag_frontend_loop_interchange;
+#define flag_frontend_loop_interchange global_options.x_flag_frontend_loop_interchange
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_frontend_optimize;
+#else
+  int x_flag_frontend_optimize;
+#define flag_frontend_optimize global_options.x_flag_frontend_optimize
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_no_function_cse;
+#else
+  int x_flag_no_function_cse;
+#define flag_no_function_cse global_options.x_flag_no_function_cse
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_function_sections;
+#else
+  int x_flag_function_sections;
+#define flag_function_sections global_options.x_flag_function_sections
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_gcse;
+#else
+  int x_flag_gcse;
+#define flag_gcse global_options.x_flag_gcse
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_gcse_after_reload;
+#else
+  int x_flag_gcse_after_reload;
+#define flag_gcse_after_reload global_options.x_flag_gcse_after_reload
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_gcse_las;
+#else
+  int x_flag_gcse_las;
+#define flag_gcse_las global_options.x_flag_gcse_las
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_gcse_lm;
+#else
+  int x_flag_gcse_lm;
+#define flag_gcse_lm global_options.x_flag_gcse_lm
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_gcse_sm;
+#else
+  int x_flag_gcse_sm;
+#define flag_gcse_sm global_options.x_flag_gcse_sm
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_gimple;
+#else
+  int x_flag_gimple;
+#define flag_gimple global_options.x_flag_gimple
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_no_gnu_keywords;
+#else
+  int x_flag_no_gnu_keywords;
+#define flag_no_gnu_keywords global_options.x_flag_no_gnu_keywords
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_next_runtime;
+#else
+  int x_flag_next_runtime;
+#define flag_next_runtime global_options.x_flag_next_runtime
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tm;
+#else
+  int x_flag_tm;
+#define flag_tm global_options.x_flag_tm
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_gnu_unique;
+#else
+  int x_flag_gnu_unique;
+#define flag_gnu_unique global_options.x_flag_gnu_unique
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_gnu89_inline;
+#else
+  int x_flag_gnu89_inline;
+#define flag_gnu89_inline global_options.x_flag_gnu89_inline
+#endif
+#ifdef GENERATOR_FILE
+extern int go_check_divide_overflow;
+#else
+  int x_go_check_divide_overflow;
+#define go_check_divide_overflow global_options.x_go_check_divide_overflow
+#endif
+#ifdef GENERATOR_FILE
+extern int go_check_divide_zero;
+#else
+  int x_go_check_divide_zero;
+#define go_check_divide_zero global_options.x_go_check_divide_zero
+#endif
+#ifdef GENERATOR_FILE
+extern int go_compiling_runtime;
+#else
+  int x_go_compiling_runtime;
+#define go_compiling_runtime global_options.x_go_compiling_runtime
+#endif
+#ifdef GENERATOR_FILE
+extern int go_debug_escape_level;
+#else
+  int x_go_debug_escape_level;
+#define go_debug_escape_level global_options.x_go_debug_escape_level
+#endif
+#ifdef GENERATOR_FILE
+extern const char *go_debug_escape_hash;
+#else
+  const char *x_go_debug_escape_hash;
+#define go_debug_escape_hash global_options.x_go_debug_escape_hash
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_graphite;
+#else
+  int x_flag_graphite;
+#define flag_graphite global_options.x_flag_graphite
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_graphite_identity;
+#else
+  int x_flag_graphite_identity;
+#define flag_graphite_identity global_options.x_flag_graphite_identity
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_guess_branch_prob;
+#else
+  int x_flag_guess_branch_prob;
+#define flag_guess_branch_prob global_options.x_flag_guess_branch_prob
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_hoist_adjacent_loads;
+#else
+  int x_flag_hoist_adjacent_loads;
+#define flag_hoist_adjacent_loads global_options.x_flag_hoist_adjacent_loads
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_no_ident;
+#else
+  int x_flag_no_ident;
+#define flag_no_ident global_options.x_flag_no_ident
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_if_conversion;
+#else
+  int x_flag_if_conversion;
+#define flag_if_conversion global_options.x_flag_if_conversion
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_if_conversion2;
+#else
+  int x_flag_if_conversion2;
+#define flag_if_conversion2 global_options.x_flag_if_conversion2
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_implement_inlines;
+#else
+  int x_flag_implement_inlines;
+#define flag_implement_inlines global_options.x_flag_implement_inlines
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_implicit_inline_templates;
+#else
+  int x_flag_implicit_inline_templates;
+#define flag_implicit_inline_templates global_options.x_flag_implicit_inline_templates
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_implicit_none;
+#else
+  int x_flag_implicit_none;
+#define flag_implicit_none global_options.x_flag_implicit_none
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_implicit_templates;
+#else
+  int x_flag_implicit_templates;
+#define flag_implicit_templates global_options.x_flag_implicit_templates
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_indirect_inlining;
+#else
+  int x_flag_indirect_inlining;
+#define flag_indirect_inlining global_options.x_flag_indirect_inlining
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_inhibit_size_directive;
+#else
+  int x_flag_inhibit_size_directive;
+#define flag_inhibit_size_directive global_options.x_flag_inhibit_size_directive
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_init_derived;
+#else
+  int x_flag_init_derived;
+#define flag_init_derived global_options.x_flag_init_derived
+#endif
+#ifdef GENERATOR_FILE
+extern enum gfc_init_local_real flag_init_real;
+#else
+  enum gfc_init_local_real x_flag_init_real;
+#define flag_init_real global_options.x_flag_init_real
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_no_inline;
+#else
+  int x_flag_no_inline;
+#define flag_no_inline global_options.x_flag_no_inline
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_inline_atomics;
+#else
+  int x_flag_inline_atomics;
+#define flag_inline_atomics global_options.x_flag_inline_atomics
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_inline_functions;
+#else
+  int x_flag_inline_functions;
+#define flag_inline_functions global_options.x_flag_inline_functions
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_inline_functions_called_once;
+#else
+  int x_flag_inline_functions_called_once;
+#define flag_inline_functions_called_once global_options.x_flag_inline_functions_called_once
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_inline_matmul_limit;
+#else
+  int x_flag_inline_matmul_limit;
+#define flag_inline_matmul_limit global_options.x_flag_inline_matmul_limit
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_inline_small_functions;
+#else
+  int x_flag_inline_small_functions;
+#define flag_inline_small_functions global_options.x_flag_inline_small_functions
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_instrument_function_entry_exit;
+#else
+  int x_flag_instrument_function_entry_exit;
+#define flag_instrument_function_entry_exit global_options.x_flag_instrument_function_entry_exit
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_integer4_kind;
+#else
+  int x_flag_integer4_kind;
+#define flag_integer4_kind global_options.x_flag_integer4_kind
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_invariants;
+#else
+  int x_flag_invariants;
+#define flag_invariants global_options.x_flag_invariants
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ipa_bit_cp;
+#else
+  int x_flag_ipa_bit_cp;
+#define flag_ipa_bit_cp global_options.x_flag_ipa_bit_cp
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ipa_cp;
+#else
+  int x_flag_ipa_cp;
+#define flag_ipa_cp global_options.x_flag_ipa_cp
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ipa_cp_clone;
+#else
+  int x_flag_ipa_cp_clone;
+#define flag_ipa_cp_clone global_options.x_flag_ipa_cp_clone
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ipa_icf;
+#else
+  int x_flag_ipa_icf;
+#define flag_ipa_icf global_options.x_flag_ipa_icf
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ipa_icf_functions;
+#else
+  int x_flag_ipa_icf_functions;
+#define flag_ipa_icf_functions global_options.x_flag_ipa_icf_functions
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ipa_icf_variables;
+#else
+  int x_flag_ipa_icf_variables;
+#define flag_ipa_icf_variables global_options.x_flag_ipa_icf_variables
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ipa_profile;
+#else
+  int x_flag_ipa_profile;
+#define flag_ipa_profile global_options.x_flag_ipa_profile
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ipa_pta;
+#else
+  int x_flag_ipa_pta;
+#define flag_ipa_pta global_options.x_flag_ipa_pta
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ipa_pure_const;
+#else
+  int x_flag_ipa_pure_const;
+#define flag_ipa_pure_const global_options.x_flag_ipa_pure_const
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ipa_ra;
+#else
+  int x_flag_ipa_ra;
+#define flag_ipa_ra global_options.x_flag_ipa_ra
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ipa_reference;
+#else
+  int x_flag_ipa_reference;
+#define flag_ipa_reference global_options.x_flag_ipa_reference
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ipa_reference_addressable;
+#else
+  int x_flag_ipa_reference_addressable;
+#define flag_ipa_reference_addressable global_options.x_flag_ipa_reference_addressable
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ipa_sra;
+#else
+  int x_flag_ipa_sra;
+#define flag_ipa_sra global_options.x_flag_ipa_sra
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ipa_stack_alignment;
+#else
+  int x_flag_ipa_stack_alignment;
+#define flag_ipa_stack_alignment global_options.x_flag_ipa_stack_alignment
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ipa_vrp;
+#else
+  int x_flag_ipa_vrp;
+#define flag_ipa_vrp global_options.x_flag_ipa_vrp
+#endif
+#ifdef GENERATOR_FILE
+extern enum ira_algorithm flag_ira_algorithm;
+#else
+  enum ira_algorithm x_flag_ira_algorithm;
+#define flag_ira_algorithm global_options.x_flag_ira_algorithm
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ira_hoist_pressure;
+#else
+  int x_flag_ira_hoist_pressure;
+#define flag_ira_hoist_pressure global_options.x_flag_ira_hoist_pressure
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ira_loop_pressure;
+#else
+  int x_flag_ira_loop_pressure;
+#define flag_ira_loop_pressure global_options.x_flag_ira_loop_pressure
+#endif
+#ifdef GENERATOR_FILE
+extern enum ira_region flag_ira_region;
+#else
+  enum ira_region x_flag_ira_region;
+#define flag_ira_region global_options.x_flag_ira_region
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ira_share_save_slots;
+#else
+  int x_flag_ira_share_save_slots;
+#define flag_ira_share_save_slots global_options.x_flag_ira_share_save_slots
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ira_share_spill_slots;
+#else
+  int x_flag_ira_share_spill_slots;
+#define flag_ira_share_spill_slots global_options.x_flag_ira_share_spill_slots
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ira_verbose;
+#else
+  int x_flag_ira_verbose;
+#define flag_ira_verbose global_options.x_flag_ira_verbose
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_isolate_erroneous_paths_attribute;
+#else
+  int x_flag_isolate_erroneous_paths_attribute;
+#define flag_isolate_erroneous_paths_attribute global_options.x_flag_isolate_erroneous_paths_attribute
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_isolate_erroneous_paths_dereference;
+#else
+  int x_flag_isolate_erroneous_paths_dereference;
+#define flag_isolate_erroneous_paths_dereference global_options.x_flag_isolate_erroneous_paths_dereference
+#endif
+#ifdef GENERATOR_FILE
+extern enum ivar_visibility default_ivar_visibility;
+#else
+  enum ivar_visibility x_default_ivar_visibility;
+#define default_ivar_visibility global_options.x_default_ivar_visibility
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ivopts;
+#else
+  int x_flag_ivopts;
+#define flag_ivopts global_options.x_flag_ivopts
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_jump_tables;
+#else
+  int x_flag_jump_tables;
+#define flag_jump_tables global_options.x_flag_jump_tables
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_keep_gc_roots_live;
+#else
+  int x_flag_keep_gc_roots_live;
+#define flag_keep_gc_roots_live global_options.x_flag_keep_gc_roots_live
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_keep_inline_dllexport;
+#else
+  int x_flag_keep_inline_dllexport;
+#define flag_keep_inline_dllexport global_options.x_flag_keep_inline_dllexport
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_keep_inline_functions;
+#else
+  int x_flag_keep_inline_functions;
+#define flag_keep_inline_functions global_options.x_flag_keep_inline_functions
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_keep_static_consts;
+#else
+  int x_flag_keep_static_consts;
+#define flag_keep_static_consts global_options.x_flag_keep_static_consts
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_keep_static_functions;
+#else
+  int x_flag_keep_static_functions;
+#define flag_keep_static_functions global_options.x_flag_keep_static_functions
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_lax_vector_conversions;
+#else
+  int x_flag_lax_vector_conversions;
+#define flag_lax_vector_conversions global_options.x_flag_lax_vector_conversions
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_leading_underscore;
+#else
+  int x_flag_leading_underscore;
+#define flag_leading_underscore global_options.x_flag_leading_underscore
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_lifetime_dse;
+#else
+  int x_flag_lifetime_dse;
+#define flag_lifetime_dse global_options.x_flag_lifetime_dse
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_limit_function_alignment;
+#else
+  int x_flag_limit_function_alignment;
+#define flag_limit_function_alignment global_options.x_flag_limit_function_alignment
+#endif
+#ifdef GENERATOR_FILE
+extern enum lto_linker_output flag_lto_linker_output;
+#else
+  enum lto_linker_output x_flag_lto_linker_output;
+#define flag_lto_linker_output global_options.x_flag_lto_linker_output
+#endif
+#ifdef GENERATOR_FILE
+extern enum live_patching_level flag_live_patching;
+#else
+  enum live_patching_level x_flag_live_patching;
+#define flag_live_patching global_options.x_flag_live_patching
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_live_range_shrinkage;
+#else
+  int x_flag_live_range_shrinkage;
+#define flag_live_range_shrinkage global_options.x_flag_live_range_shrinkage
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_local_ivars;
+#else
+  int x_flag_local_ivars;
+#define flag_local_ivars global_options.x_flag_local_ivars
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_loop_interchange;
+#else
+  int x_flag_loop_interchange;
+#define flag_loop_interchange global_options.x_flag_loop_interchange
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_loop_nest_optimize;
+#else
+  int x_flag_loop_nest_optimize;
+#define flag_loop_nest_optimize global_options.x_flag_loop_nest_optimize
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_loop_parallelize_all;
+#else
+  int x_flag_loop_parallelize_all;
+#define flag_loop_parallelize_all global_options.x_flag_loop_parallelize_all
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_unroll_jam;
+#else
+  int x_flag_unroll_jam;
+#define flag_unroll_jam global_options.x_flag_unroll_jam
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_lra_remat;
+#else
+  int x_flag_lra_remat;
+#define flag_lra_remat global_options.x_flag_lra_remat
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_lto_compression_level;
+#else
+  int x_flag_lto_compression_level;
+#define flag_lto_compression_level global_options.x_flag_lto_compression_level
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_lto_odr_type_mering;
+#else
+  int x_flag_lto_odr_type_mering;
+#define flag_lto_odr_type_mering global_options.x_flag_lto_odr_type_mering
+#endif
+#ifdef GENERATOR_FILE
+extern enum lto_partition_model flag_lto_partition;
+#else
+  enum lto_partition_model x_flag_lto_partition;
+#define flag_lto_partition global_options.x_flag_lto_partition
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_lto_report;
+#else
+  int x_flag_lto_report;
+#define flag_lto_report global_options.x_flag_lto_report
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_lto_report_wpa;
+#else
+  int x_flag_lto_report_wpa;
+#define flag_lto_report_wpa global_options.x_flag_lto_report_wpa
+#endif
+#ifdef GENERATOR_FILE
+extern const char *flag_lto;
+#else
+  const char *x_flag_lto;
+#define flag_lto global_options.x_flag_lto
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ltrans;
+#else
+  int x_flag_ltrans;
+#define flag_ltrans global_options.x_flag_ltrans
+#endif
+#ifdef GENERATOR_FILE
+extern const char *ltrans_output_list;
+#else
+  const char *x_ltrans_output_list;
+#define ltrans_output_list global_options.x_ltrans_output_list
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_errno_math;
+#else
+  int x_flag_errno_math;
+#define flag_errno_math global_options.x_flag_errno_math
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_max_array_constructor;
+#else
+  int x_flag_max_array_constructor;
+#define flag_max_array_constructor global_options.x_flag_max_array_constructor
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_max_errors;
+#else
+  int x_flag_max_errors;
+#define flag_max_errors global_options.x_flag_max_errors
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_max_stack_var_size;
+#else
+  int x_flag_max_stack_var_size;
+#define flag_max_stack_var_size global_options.x_flag_max_stack_var_size
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_max_subrecord_length;
+#else
+  int x_flag_max_subrecord_length;
+#define flag_max_subrecord_length global_options.x_flag_max_subrecord_length
+#endif
+#ifdef GENERATOR_FILE
+extern int mem_report;
+#else
+  int x_mem_report;
+#define mem_report global_options.x_mem_report
+#endif
+#ifdef GENERATOR_FILE
+extern int mem_report_wpa;
+#else
+  int x_mem_report_wpa;
+#define mem_report_wpa global_options.x_mem_report_wpa
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_merge_constants;
+#else
+  int x_flag_merge_constants;
+#define flag_merge_constants global_options.x_flag_merge_constants
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_merge_debug_strings;
+#else
+  int x_flag_merge_debug_strings;
+#define flag_merge_debug_strings global_options.x_flag_merge_debug_strings
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_module_private;
+#else
+  int x_flag_module_private;
+#define flag_module_private global_options.x_flag_module_private
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_moduleinfo;
+#else
+  int x_flag_moduleinfo;
+#define flag_moduleinfo global_options.x_flag_moduleinfo
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_modulo_sched;
+#else
+  int x_flag_modulo_sched;
+#define flag_modulo_sched global_options.x_flag_modulo_sched
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_modulo_sched_allow_regmoves;
+#else
+  int x_flag_modulo_sched_allow_regmoves;
+#define flag_modulo_sched_allow_regmoves global_options.x_flag_modulo_sched_allow_regmoves
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_move_loop_invariants;
+#else
+  int x_flag_move_loop_invariants;
+#define flag_move_loop_invariants global_options.x_flag_move_loop_invariants
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ms_extensions;
+#else
+  int x_flag_ms_extensions;
+#define flag_ms_extensions global_options.x_flag_ms_extensions
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_new_inheriting_ctors;
+#else
+  int x_flag_new_inheriting_ctors;
+#define flag_new_inheriting_ctors global_options.x_flag_new_inheriting_ctors
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_new_ttp;
+#else
+  int x_flag_new_ttp;
+#define flag_new_ttp global_options.x_flag_new_ttp
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_nil_receivers;
+#else
+  int x_flag_nil_receivers;
+#define flag_nil_receivers global_options.x_flag_nil_receivers
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_non_call_exceptions;
+#else
+  int x_flag_non_call_exceptions;
+#define flag_non_call_exceptions global_options.x_flag_non_call_exceptions
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_no_nonansi_builtin;
+#else
+  int x_flag_no_nonansi_builtin;
+#define flag_no_nonansi_builtin global_options.x_flag_no_nonansi_builtin
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_nothrow_opt;
+#else
+  int x_flag_nothrow_opt;
+#define flag_nothrow_opt global_options.x_flag_nothrow_opt
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_objc_abi;
+#else
+  int x_flag_objc_abi;
+#define flag_objc_abi global_options.x_flag_objc_abi
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_objc_call_cxx_cdtors;
+#else
+  int x_flag_objc_call_cxx_cdtors;
+#define flag_objc_call_cxx_cdtors global_options.x_flag_objc_call_cxx_cdtors
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_objc_direct_dispatch;
+#else
+  int x_flag_objc_direct_dispatch;
+#define flag_objc_direct_dispatch global_options.x_flag_objc_direct_dispatch
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_objc_exceptions;
+#else
+  int x_flag_objc_exceptions;
+#define flag_objc_exceptions global_options.x_flag_objc_exceptions
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_objc_gc;
+#else
+  int x_flag_objc_gc;
+#define flag_objc_gc global_options.x_flag_objc_gc
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_objc_nilcheck;
+#else
+  int x_flag_objc_nilcheck;
+#define flag_objc_nilcheck global_options.x_flag_objc_nilcheck
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_objc_sjlj_exceptions;
+#else
+  int x_flag_objc_sjlj_exceptions;
+#define flag_objc_sjlj_exceptions global_options.x_flag_objc_sjlj_exceptions
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_objc1_only;
+#else
+  int x_flag_objc1_only;
+#define flag_objc1_only global_options.x_flag_objc1_only
+#endif
+#ifdef GENERATOR_FILE
+extern enum offload_abi flag_offload_abi;
+#else
+  enum offload_abi x_flag_offload_abi;
+#define flag_offload_abi global_options.x_flag_offload_abi
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_omit_frame_pointer;
+#else
+  int x_flag_omit_frame_pointer;
+#define flag_omit_frame_pointer global_options.x_flag_omit_frame_pointer
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_openacc;
+#else
+  int x_flag_openacc;
+#define flag_openacc global_options.x_flag_openacc
+#endif
+#ifdef GENERATOR_FILE
+extern const char *flag_openacc_dims;
+#else
+  const char *x_flag_openacc_dims;
+#define flag_openacc_dims global_options.x_flag_openacc_dims
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_openmp;
+#else
+  int x_flag_openmp;
+#define flag_openmp global_options.x_flag_openmp
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_openmp_simd;
+#else
+  int x_flag_openmp_simd;
+#define flag_openmp_simd global_options.x_flag_openmp_simd
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_opt_info;
+#else
+  int x_flag_opt_info;
+#define flag_opt_info global_options.x_flag_opt_info
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_optimize_sibling_calls;
+#else
+  int x_flag_optimize_sibling_calls;
+#define flag_optimize_sibling_calls global_options.x_flag_optimize_sibling_calls
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_optimize_strlen;
+#else
+  int x_flag_optimize_strlen;
+#define flag_optimize_strlen global_options.x_flag_optimize_strlen
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_pack_derived;
+#else
+  int x_flag_pack_derived;
+#define flag_pack_derived global_options.x_flag_pack_derived
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_pack_struct;
+#else
+  int x_flag_pack_struct;
+#define flag_pack_struct global_options.x_flag_pack_struct
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_pad_source;
+#else
+  int x_flag_pad_source;
+#define flag_pad_source global_options.x_flag_pad_source
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_partial_inlining;
+#else
+  int x_flag_partial_inlining;
+#define flag_partial_inlining global_options.x_flag_partial_inlining
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_pcc_struct_return;
+#else
+  int x_flag_pcc_struct_return;
+#define flag_pcc_struct_return global_options.x_flag_pcc_struct_return
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_peel_loops;
+#else
+  int x_flag_peel_loops;
+#define flag_peel_loops global_options.x_flag_peel_loops
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_no_peephole;
+#else
+  int x_flag_no_peephole;
+#define flag_no_peephole global_options.x_flag_no_peephole
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_peephole2;
+#else
+  int x_flag_peephole2;
+#define flag_peephole2 global_options.x_flag_peephole2
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_permissive;
+#else
+  int x_flag_permissive;
+#define flag_permissive global_options.x_flag_permissive
+#endif
+#ifdef GENERATOR_FILE
+extern enum permitted_flt_eval_methods flag_permitted_flt_eval_methods;
+#else
+  enum permitted_flt_eval_methods x_flag_permitted_flt_eval_methods;
+#define flag_permitted_flt_eval_methods global_options.x_flag_permitted_flt_eval_methods
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_plan9_extensions;
+#else
+  int x_flag_plan9_extensions;
+#define flag_plan9_extensions global_options.x_flag_plan9_extensions
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_plt;
+#else
+  int x_flag_plt;
+#define flag_plt global_options.x_flag_plt
+#endif
+#ifdef GENERATOR_FILE
+extern int post_ipa_mem_report;
+#else
+  int x_post_ipa_mem_report;
+#define post_ipa_mem_report global_options.x_post_ipa_mem_report
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_postconditions;
+#else
+  int x_flag_postconditions;
+#define flag_postconditions global_options.x_flag_postconditions
+#endif
+#ifdef GENERATOR_FILE
+extern const char *flag_pre_include;
+#else
+  const char *x_flag_pre_include;
+#define flag_pre_include global_options.x_flag_pre_include
+#endif
+#ifdef GENERATOR_FILE
+extern int pre_ipa_mem_report;
+#else
+  int x_pre_ipa_mem_report;
+#define pre_ipa_mem_report global_options.x_pre_ipa_mem_report
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_preconditions;
+#else
+  int x_flag_preconditions;
+#define flag_preconditions global_options.x_flag_preconditions
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_predictive_commoning;
+#else
+  int x_flag_predictive_commoning;
+#define flag_predictive_commoning global_options.x_flag_predictive_commoning
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_prefetch_loop_arrays;
+#else
+  int x_flag_prefetch_loop_arrays;
+#define flag_prefetch_loop_arrays global_options.x_flag_prefetch_loop_arrays
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_pretty_templates;
+#else
+  int x_flag_pretty_templates;
+#define flag_pretty_templates global_options.x_flag_pretty_templates
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_printf_return_value;
+#else
+  int x_flag_printf_return_value;
+#define flag_printf_return_value global_options.x_flag_printf_return_value
+#endif
+#ifdef GENERATOR_FILE
+extern int profile_flag;
+#else
+  int x_profile_flag;
+#define profile_flag global_options.x_profile_flag
+#endif
+#ifdef GENERATOR_FILE
+extern int profile_abs_path_flag;
+#else
+  int x_profile_abs_path_flag;
+#define profile_abs_path_flag global_options.x_profile_abs_path_flag
+#endif
+#ifdef GENERATOR_FILE
+extern int profile_arc_flag;
+#else
+  int x_profile_arc_flag;
+#define profile_arc_flag global_options.x_profile_arc_flag
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_profile_correction;
+#else
+  int x_flag_profile_correction;
+#define flag_profile_correction global_options.x_flag_profile_correction
+#endif
+#ifdef GENERATOR_FILE
+extern const char *profile_data_prefix;
+#else
+  const char *x_profile_data_prefix;
+#define profile_data_prefix global_options.x_profile_data_prefix
+#endif
+#ifdef GENERATOR_FILE
+extern const char *flag_profile_exclude_files;
+#else
+  const char *x_flag_profile_exclude_files;
+#define flag_profile_exclude_files global_options.x_flag_profile_exclude_files
+#endif
+#ifdef GENERATOR_FILE
+extern const char *flag_profile_filter_files;
+#else
+  const char *x_flag_profile_filter_files;
+#define flag_profile_filter_files global_options.x_flag_profile_filter_files
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_profile_reorder_functions;
+#else
+  int x_flag_profile_reorder_functions;
+#define flag_profile_reorder_functions global_options.x_flag_profile_reorder_functions
+#endif
+#ifdef GENERATOR_FILE
+extern int profile_report;
+#else
+  int x_profile_report;
+#define profile_report global_options.x_profile_report
+#endif
+#ifdef GENERATOR_FILE
+extern enum profile_update flag_profile_update;
+#else
+  enum profile_update x_flag_profile_update;
+#define flag_profile_update global_options.x_flag_profile_update
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_profile_use;
+#else
+  int x_flag_profile_use;
+#define flag_profile_use global_options.x_flag_profile_use
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_profile_values;
+#else
+  int x_flag_profile_values;
+#define flag_profile_values global_options.x_flag_profile_values
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_protect_parens;
+#else
+  int x_flag_protect_parens;
+#define flag_protect_parens global_options.x_flag_protect_parens
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_range_check;
+#else
+  int x_flag_range_check;
+#define flag_range_check global_options.x_flag_range_check
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_real4_kind;
+#else
+  int x_flag_real4_kind;
+#define flag_real4_kind global_options.x_flag_real4_kind
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_real8_kind;
+#else
+  int x_flag_real8_kind;
+#define flag_real8_kind global_options.x_flag_real8_kind
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_realloc_lhs;
+#else
+  int x_flag_realloc_lhs;
+#define flag_realloc_lhs global_options.x_flag_realloc_lhs
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_reciprocal_math;
+#else
+  int x_flag_reciprocal_math;
+#define flag_reciprocal_math global_options.x_flag_reciprocal_math
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_record_gcc_switches;
+#else
+  int x_flag_record_gcc_switches;
+#define flag_record_gcc_switches global_options.x_flag_record_gcc_switches
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_record_marker;
+#else
+  int x_flag_record_marker;
+#define flag_record_marker global_options.x_flag_record_marker
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_recursive;
+#else
+  int x_flag_recursive;
+#define flag_recursive global_options.x_flag_recursive
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ree;
+#else
+  int x_flag_ree;
+#define flag_ree global_options.x_flag_ree
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_rename_registers;
+#else
+  int x_flag_rename_registers;
+#define flag_rename_registers global_options.x_flag_rename_registers
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_reorder_blocks;
+#else
+  int x_flag_reorder_blocks;
+#define flag_reorder_blocks global_options.x_flag_reorder_blocks
+#endif
+#ifdef GENERATOR_FILE
+extern enum reorder_blocks_algorithm flag_reorder_blocks_algorithm;
+#else
+  enum reorder_blocks_algorithm x_flag_reorder_blocks_algorithm;
+#define flag_reorder_blocks_algorithm global_options.x_flag_reorder_blocks_algorithm
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_reorder_blocks_and_partition;
+#else
+  int x_flag_reorder_blocks_and_partition;
+#define flag_reorder_blocks_and_partition global_options.x_flag_reorder_blocks_and_partition
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_reorder_functions;
+#else
+  int x_flag_reorder_functions;
+#define flag_reorder_functions global_options.x_flag_reorder_functions
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_repack_arrays;
+#else
+  int x_flag_repack_arrays;
+#define flag_repack_arrays global_options.x_flag_repack_arrays
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_replace_objc_classes;
+#else
+  int x_flag_replace_objc_classes;
+#define flag_replace_objc_classes global_options.x_flag_replace_objc_classes
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_report_bug;
+#else
+  int x_flag_report_bug;
+#define flag_report_bug global_options.x_flag_report_bug
+#endif
+#ifdef GENERATOR_FILE
+extern int go_require_return_statement;
+#else
+  int x_go_require_return_statement;
+#define go_require_return_statement global_options.x_go_require_return_statement
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_rerun_cse_after_loop;
+#else
+  int x_flag_rerun_cse_after_loop;
+#define flag_rerun_cse_after_loop global_options.x_flag_rerun_cse_after_loop
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_resched_modulo_sched;
+#else
+  int x_flag_resched_modulo_sched;
+#define flag_resched_modulo_sched global_options.x_flag_resched_modulo_sched
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_rounding_math;
+#else
+  int x_flag_rounding_math;
+#define flag_rounding_math global_options.x_flag_rounding_math
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_rtti;
+#else
+  int x_flag_rtti;
+#define flag_rtti global_options.x_flag_rtti
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sanitize_address_use_after_scope;
+#else
+  int x_flag_sanitize_address_use_after_scope;
+#define flag_sanitize_address_use_after_scope global_options.x_flag_sanitize_address_use_after_scope
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sanitize_undefined_trap_on_error;
+#else
+  int x_flag_sanitize_undefined_trap_on_error;
+#define flag_sanitize_undefined_trap_on_error global_options.x_flag_sanitize_undefined_trap_on_error
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_save_optimization_record;
+#else
+  int x_flag_save_optimization_record;
+#define flag_save_optimization_record global_options.x_flag_save_optimization_record
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sched_critical_path_heuristic;
+#else
+  int x_flag_sched_critical_path_heuristic;
+#define flag_sched_critical_path_heuristic global_options.x_flag_sched_critical_path_heuristic
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sched_dep_count_heuristic;
+#else
+  int x_flag_sched_dep_count_heuristic;
+#define flag_sched_dep_count_heuristic global_options.x_flag_sched_dep_count_heuristic
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sched_group_heuristic;
+#else
+  int x_flag_sched_group_heuristic;
+#define flag_sched_group_heuristic global_options.x_flag_sched_group_heuristic
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_schedule_interblock;
+#else
+  int x_flag_schedule_interblock;
+#define flag_schedule_interblock global_options.x_flag_schedule_interblock
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sched_last_insn_heuristic;
+#else
+  int x_flag_sched_last_insn_heuristic;
+#define flag_sched_last_insn_heuristic global_options.x_flag_sched_last_insn_heuristic
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sched_pressure;
+#else
+  int x_flag_sched_pressure;
+#define flag_sched_pressure global_options.x_flag_sched_pressure
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sched_rank_heuristic;
+#else
+  int x_flag_sched_rank_heuristic;
+#define flag_sched_rank_heuristic global_options.x_flag_sched_rank_heuristic
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_schedule_speculative;
+#else
+  int x_flag_schedule_speculative;
+#define flag_schedule_speculative global_options.x_flag_schedule_speculative
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sched_spec_insn_heuristic;
+#else
+  int x_flag_sched_spec_insn_heuristic;
+#define flag_sched_spec_insn_heuristic global_options.x_flag_sched_spec_insn_heuristic
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_schedule_speculative_load;
+#else
+  int x_flag_schedule_speculative_load;
+#define flag_schedule_speculative_load global_options.x_flag_schedule_speculative_load
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_schedule_speculative_load_dangerous;
+#else
+  int x_flag_schedule_speculative_load_dangerous;
+#define flag_schedule_speculative_load_dangerous global_options.x_flag_schedule_speculative_load_dangerous
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sched_stalled_insns;
+#else
+  int x_flag_sched_stalled_insns;
+#define flag_sched_stalled_insns global_options.x_flag_sched_stalled_insns
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sched_stalled_insns_dep;
+#else
+  int x_flag_sched_stalled_insns_dep;
+#define flag_sched_stalled_insns_dep global_options.x_flag_sched_stalled_insns_dep
+#endif
+#ifdef GENERATOR_FILE
+extern int sched_verbose_param;
+#else
+  int x_sched_verbose_param;
+#define sched_verbose_param global_options.x_sched_verbose_param
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sched2_use_superblocks;
+#else
+  int x_flag_sched2_use_superblocks;
+#define flag_sched2_use_superblocks global_options.x_flag_sched2_use_superblocks
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_schedule_fusion;
+#else
+  int x_flag_schedule_fusion;
+#define flag_schedule_fusion global_options.x_flag_schedule_fusion
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_schedule_insns;
+#else
+  int x_flag_schedule_insns;
+#define flag_schedule_insns global_options.x_flag_schedule_insns
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_schedule_insns_after_reload;
+#else
+  int x_flag_schedule_insns_after_reload;
+#define flag_schedule_insns_after_reload global_options.x_flag_schedule_insns_after_reload
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_second_underscore;
+#else
+  int x_flag_second_underscore;
+#define flag_second_underscore global_options.x_flag_second_underscore
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_section_anchors;
+#else
+  int x_flag_section_anchors;
+#define flag_section_anchors global_options.x_flag_section_anchors
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sel_sched_pipelining;
+#else
+  int x_flag_sel_sched_pipelining;
+#define flag_sel_sched_pipelining global_options.x_flag_sel_sched_pipelining
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sel_sched_pipelining_outer_loops;
+#else
+  int x_flag_sel_sched_pipelining_outer_loops;
+#define flag_sel_sched_pipelining_outer_loops global_options.x_flag_sel_sched_pipelining_outer_loops
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sel_sched_reschedule_pipelined;
+#else
+  int x_flag_sel_sched_reschedule_pipelined;
+#define flag_sel_sched_reschedule_pipelined global_options.x_flag_sel_sched_reschedule_pipelined
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_selective_scheduling;
+#else
+  int x_flag_selective_scheduling;
+#define flag_selective_scheduling global_options.x_flag_selective_scheduling
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_selective_scheduling2;
+#else
+  int x_flag_selective_scheduling2;
+#define flag_selective_scheduling2 global_options.x_flag_selective_scheduling2
+#endif
+#ifdef GENERATOR_FILE
+extern const char *flag_self_test;
+#else
+  const char *x_flag_self_test;
+#define flag_self_test global_options.x_flag_self_test
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_semantic_interposition;
+#else
+  int x_flag_semantic_interposition;
+#define flag_semantic_interposition global_options.x_flag_semantic_interposition
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_short_enums;
+#else
+  int x_flag_short_enums;
+#define flag_short_enums global_options.x_flag_short_enums
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_short_wchar;
+#else
+  int x_flag_short_wchar;
+#define flag_short_wchar global_options.x_flag_short_wchar
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_show_column;
+#else
+  int x_flag_show_column;
+#define flag_show_column global_options.x_flag_show_column
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_shrink_wrap;
+#else
+  int x_flag_shrink_wrap;
+#define flag_shrink_wrap global_options.x_flag_shrink_wrap
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_shrink_wrap_separate;
+#else
+  int x_flag_shrink_wrap_separate;
+#define flag_shrink_wrap_separate global_options.x_flag_shrink_wrap_separate
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sign_zero;
+#else
+  int x_flag_sign_zero;
+#define flag_sign_zero global_options.x_flag_sign_zero
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_signaling_nans;
+#else
+  int x_flag_signaling_nans;
+#define flag_signaling_nans global_options.x_flag_signaling_nans
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_signed_bitfields;
+#else
+  int x_flag_signed_bitfields;
+#define flag_signed_bitfields global_options.x_flag_signed_bitfields
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_signed_char;
+#else
+  int x_flag_signed_char;
+#define flag_signed_char global_options.x_flag_signed_char
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_signed_zeros;
+#else
+  int x_flag_signed_zeros;
+#define flag_signed_zeros global_options.x_flag_signed_zeros
+#endif
+#ifdef GENERATOR_FILE
+extern enum vect_cost_model flag_simd_cost_model;
+#else
+  enum vect_cost_model x_flag_simd_cost_model;
+#define flag_simd_cost_model global_options.x_flag_simd_cost_model
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_single_precision_constant;
+#else
+  int x_flag_single_precision_constant;
+#define flag_single_precision_constant global_options.x_flag_single_precision_constant
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sized_deallocation;
+#else
+  int x_flag_sized_deallocation;
+#define flag_sized_deallocation global_options.x_flag_sized_deallocation
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_split_ivs_in_unroller;
+#else
+  int x_flag_split_ivs_in_unroller;
+#define flag_split_ivs_in_unroller global_options.x_flag_split_ivs_in_unroller
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_split_loops;
+#else
+  int x_flag_split_loops;
+#define flag_split_loops global_options.x_flag_split_loops
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_split_paths;
+#else
+  int x_flag_split_paths;
+#define flag_split_paths global_options.x_flag_split_paths
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_split_stack;
+#else
+  int x_flag_split_stack;
+#define flag_split_stack global_options.x_flag_split_stack
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_split_wide_types;
+#else
+  int x_flag_split_wide_types;
+#define flag_split_wide_types global_options.x_flag_split_wide_types
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ssa_backprop;
+#else
+  int x_flag_ssa_backprop;
+#define flag_ssa_backprop global_options.x_flag_ssa_backprop
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_ssa_phiopt;
+#else
+  int x_flag_ssa_phiopt;
+#define flag_ssa_phiopt global_options.x_flag_ssa_phiopt
+#endif
+#ifdef GENERATOR_FILE
+extern enum scalar_storage_order_kind default_sso;
+#else
+  enum scalar_storage_order_kind x_default_sso;
+#define default_sso global_options.x_default_sso
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_stack_arrays;
+#else
+  int x_flag_stack_arrays;
+#define flag_stack_arrays global_options.x_flag_stack_arrays
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_stack_clash_protection;
+#else
+  int x_flag_stack_clash_protection;
+#define flag_stack_clash_protection global_options.x_flag_stack_clash_protection
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_stack_protect;
+#else
+  int x_flag_stack_protect;
+#define flag_stack_protect global_options.x_flag_stack_protect
+#endif
+#ifdef GENERATOR_FILE
+extern enum stack_reuse_level flag_stack_reuse;
+#else
+  enum stack_reuse_level x_flag_stack_reuse;
+#define flag_stack_reuse global_options.x_flag_stack_reuse
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_stack_usage;
+#else
+  int x_flag_stack_usage;
+#define flag_stack_usage global_options.x_flag_stack_usage
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_detailed_statistics;
+#else
+  int x_flag_detailed_statistics;
+#define flag_detailed_statistics global_options.x_flag_detailed_statistics
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_stdarg_opt;
+#else
+  int x_flag_stdarg_opt;
+#define flag_stdarg_opt global_options.x_flag_stdarg_opt
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_store_merging;
+#else
+  int x_flag_store_merging;
+#define flag_store_merging global_options.x_flag_store_merging
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_strict_aliasing;
+#else
+  int x_flag_strict_aliasing;
+#define flag_strict_aliasing global_options.x_flag_strict_aliasing
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_strict_enums;
+#else
+  int x_flag_strict_enums;
+#define flag_strict_enums global_options.x_flag_strict_enums
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_strict_volatile_bitfields;
+#else
+  int x_flag_strict_volatile_bitfields;
+#define flag_strict_volatile_bitfields global_options.x_flag_strict_volatile_bitfields
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_strong_eval_order;
+#else
+  int x_flag_strong_eval_order;
+#define flag_strong_eval_order global_options.x_flag_strong_eval_order
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_switch_errors;
+#else
+  int x_flag_switch_errors;
+#define flag_switch_errors global_options.x_flag_switch_errors
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_sync_libcalls;
+#else
+  int x_flag_sync_libcalls;
+#define flag_sync_libcalls global_options.x_flag_sync_libcalls
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_syntax_only;
+#else
+  int x_flag_syntax_only;
+#define flag_syntax_only global_options.x_flag_syntax_only
+#endif
+#ifdef GENERATOR_FILE
+extern int template_backtrace_limit;
+#else
+  int x_template_backtrace_limit;
+#define template_backtrace_limit global_options.x_template_backtrace_limit
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_test_coverage;
+#else
+  int x_flag_test_coverage;
+#define flag_test_coverage global_options.x_flag_test_coverage
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_test_forall_temp;
+#else
+  int x_flag_test_forall_temp;
+#define flag_test_forall_temp global_options.x_flag_test_forall_temp
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_thread_jumps;
+#else
+  int x_flag_thread_jumps;
+#define flag_thread_jumps global_options.x_flag_thread_jumps
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_threadsafe_statics;
+#else
+  int x_flag_threadsafe_statics;
+#define flag_threadsafe_statics global_options.x_flag_threadsafe_statics
+#endif
+#ifdef GENERATOR_FILE
+extern int time_report;
+#else
+  int x_time_report;
+#define time_report global_options.x_time_report
+#endif
+#ifdef GENERATOR_FILE
+extern int time_report_details;
+#else
+  int x_time_report_details;
+#define time_report_details global_options.x_time_report_details
+#endif
+#ifdef GENERATOR_FILE
+extern enum tls_model flag_tls_default;
+#else
+  enum tls_model x_flag_tls_default;
+#define flag_tls_default global_options.x_flag_tls_default
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_toplevel_reorder;
+#else
+  int x_flag_toplevel_reorder;
+#define flag_toplevel_reorder global_options.x_flag_toplevel_reorder
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tracer;
+#else
+  int x_flag_tracer;
+#define flag_tracer global_options.x_flag_tracer
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_trampolines;
+#else
+  int x_flag_trampolines;
+#define flag_trampolines global_options.x_flag_trampolines
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_trapping_math;
+#else
+  int x_flag_trapping_math;
+#define flag_trapping_math global_options.x_flag_trapping_math
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_trapv;
+#else
+  int x_flag_trapv;
+#define flag_trapv global_options.x_flag_trapv
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_bit_ccp;
+#else
+  int x_flag_tree_bit_ccp;
+#define flag_tree_bit_ccp global_options.x_flag_tree_bit_ccp
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_builtin_call_dce;
+#else
+  int x_flag_tree_builtin_call_dce;
+#define flag_tree_builtin_call_dce global_options.x_flag_tree_builtin_call_dce
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_ccp;
+#else
+  int x_flag_tree_ccp;
+#define flag_tree_ccp global_options.x_flag_tree_ccp
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_ch;
+#else
+  int x_flag_tree_ch;
+#define flag_tree_ch global_options.x_flag_tree_ch
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_coalesce_vars;
+#else
+  int x_flag_tree_coalesce_vars;
+#define flag_tree_coalesce_vars global_options.x_flag_tree_coalesce_vars
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_copy_prop;
+#else
+  int x_flag_tree_copy_prop;
+#define flag_tree_copy_prop global_options.x_flag_tree_copy_prop
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_cselim;
+#else
+  int x_flag_tree_cselim;
+#define flag_tree_cselim global_options.x_flag_tree_cselim
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_dce;
+#else
+  int x_flag_tree_dce;
+#define flag_tree_dce global_options.x_flag_tree_dce
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_dom;
+#else
+  int x_flag_tree_dom;
+#define flag_tree_dom global_options.x_flag_tree_dom
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_dse;
+#else
+  int x_flag_tree_dse;
+#define flag_tree_dse global_options.x_flag_tree_dse
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_forwprop;
+#else
+  int x_flag_tree_forwprop;
+#define flag_tree_forwprop global_options.x_flag_tree_forwprop
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_fre;
+#else
+  int x_flag_tree_fre;
+#define flag_tree_fre global_options.x_flag_tree_fre
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_loop_distribute_patterns;
+#else
+  int x_flag_tree_loop_distribute_patterns;
+#define flag_tree_loop_distribute_patterns global_options.x_flag_tree_loop_distribute_patterns
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_loop_distribution;
+#else
+  int x_flag_tree_loop_distribution;
+#define flag_tree_loop_distribution global_options.x_flag_tree_loop_distribution
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_loop_if_convert;
+#else
+  int x_flag_tree_loop_if_convert;
+#define flag_tree_loop_if_convert global_options.x_flag_tree_loop_if_convert
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_loop_im;
+#else
+  int x_flag_tree_loop_im;
+#define flag_tree_loop_im global_options.x_flag_tree_loop_im
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_loop_ivcanon;
+#else
+  int x_flag_tree_loop_ivcanon;
+#define flag_tree_loop_ivcanon global_options.x_flag_tree_loop_ivcanon
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_loop_optimize;
+#else
+  int x_flag_tree_loop_optimize;
+#define flag_tree_loop_optimize global_options.x_flag_tree_loop_optimize
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_loop_vectorize;
+#else
+  int x_flag_tree_loop_vectorize;
+#define flag_tree_loop_vectorize global_options.x_flag_tree_loop_vectorize
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_live_range_split;
+#else
+  int x_flag_tree_live_range_split;
+#define flag_tree_live_range_split global_options.x_flag_tree_live_range_split
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_parallelize_loops;
+#else
+  int x_flag_tree_parallelize_loops;
+#define flag_tree_parallelize_loops global_options.x_flag_tree_parallelize_loops
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_partial_pre;
+#else
+  int x_flag_tree_partial_pre;
+#define flag_tree_partial_pre global_options.x_flag_tree_partial_pre
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_phiprop;
+#else
+  int x_flag_tree_phiprop;
+#define flag_tree_phiprop global_options.x_flag_tree_phiprop
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_pre;
+#else
+  int x_flag_tree_pre;
+#define flag_tree_pre global_options.x_flag_tree_pre
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_pta;
+#else
+  int x_flag_tree_pta;
+#define flag_tree_pta global_options.x_flag_tree_pta
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_reassoc;
+#else
+  int x_flag_tree_reassoc;
+#define flag_tree_reassoc global_options.x_flag_tree_reassoc
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_scev_cprop;
+#else
+  int x_flag_tree_scev_cprop;
+#define flag_tree_scev_cprop global_options.x_flag_tree_scev_cprop
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_sink;
+#else
+  int x_flag_tree_sink;
+#define flag_tree_sink global_options.x_flag_tree_sink
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_slp_vectorize;
+#else
+  int x_flag_tree_slp_vectorize;
+#define flag_tree_slp_vectorize global_options.x_flag_tree_slp_vectorize
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_slsr;
+#else
+  int x_flag_tree_slsr;
+#define flag_tree_slsr global_options.x_flag_tree_slsr
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_sra;
+#else
+  int x_flag_tree_sra;
+#define flag_tree_sra global_options.x_flag_tree_sra
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_switch_conversion;
+#else
+  int x_flag_tree_switch_conversion;
+#define flag_tree_switch_conversion global_options.x_flag_tree_switch_conversion
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_tail_merge;
+#else
+  int x_flag_tree_tail_merge;
+#define flag_tree_tail_merge global_options.x_flag_tree_tail_merge
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_ter;
+#else
+  int x_flag_tree_ter;
+#define flag_tree_ter global_options.x_flag_tree_ter
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_tree_vrp;
+#else
+  int x_flag_tree_vrp;
+#define flag_tree_vrp global_options.x_flag_tree_vrp
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_unconstrained_commons;
+#else
+  int x_flag_unconstrained_commons;
+#define flag_unconstrained_commons global_options.x_flag_unconstrained_commons
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_underscoring;
+#else
+  int x_flag_underscoring;
+#define flag_underscoring global_options.x_flag_underscoring
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_unit_at_a_time;
+#else
+  int x_flag_unit_at_a_time;
+#define flag_unit_at_a_time global_options.x_flag_unit_at_a_time
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_unroll_all_loops;
+#else
+  int x_flag_unroll_all_loops;
+#define flag_unroll_all_loops global_options.x_flag_unroll_all_loops
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_unroll_loops;
+#else
+  int x_flag_unroll_loops;
+#define flag_unroll_loops global_options.x_flag_unroll_loops
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_unsafe_math_optimizations;
+#else
+  int x_flag_unsafe_math_optimizations;
+#define flag_unsafe_math_optimizations global_options.x_flag_unsafe_math_optimizations
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_unswitch_loops;
+#else
+  int x_flag_unswitch_loops;
+#define flag_unswitch_loops global_options.x_flag_unswitch_loops
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_unwind_tables;
+#else
+  int x_flag_unwind_tables;
+#define flag_unwind_tables global_options.x_flag_unwind_tables
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_use_cxa_atexit;
+#else
+  int x_flag_use_cxa_atexit;
+#define flag_use_cxa_atexit global_options.x_flag_use_cxa_atexit
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_use_cxa_get_exception_ptr;
+#else
+  int x_flag_use_cxa_get_exception_ptr;
+#define flag_use_cxa_get_exception_ptr global_options.x_flag_use_cxa_get_exception_ptr
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_use_linker_plugin;
+#else
+  int x_flag_use_linker_plugin;
+#define flag_use_linker_plugin global_options.x_flag_use_linker_plugin
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_var_tracking;
+#else
+  int x_flag_var_tracking;
+#define flag_var_tracking global_options.x_flag_var_tracking
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_var_tracking_assignments;
+#else
+  int x_flag_var_tracking_assignments;
+#define flag_var_tracking_assignments global_options.x_flag_var_tracking_assignments
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_var_tracking_assignments_toggle;
+#else
+  int x_flag_var_tracking_assignments_toggle;
+#define flag_var_tracking_assignments_toggle global_options.x_flag_var_tracking_assignments_toggle
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_var_tracking_uninit;
+#else
+  int x_flag_var_tracking_uninit;
+#define flag_var_tracking_uninit global_options.x_flag_var_tracking_uninit
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_variable_expansion_in_unroller;
+#else
+  int x_flag_variable_expansion_in_unroller;
+#define flag_variable_expansion_in_unroller global_options.x_flag_variable_expansion_in_unroller
+#endif
+#ifdef GENERATOR_FILE
+extern enum vect_cost_model flag_vect_cost_model;
+#else
+  enum vect_cost_model x_flag_vect_cost_model;
+#define flag_vect_cost_model global_options.x_flag_vect_cost_model
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_verbose_asm;
+#else
+  int x_flag_verbose_asm;
+#define flag_verbose_asm global_options.x_flag_verbose_asm
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_version_loops_for_strides;
+#else
+  int x_flag_version_loops_for_strides;
+#define flag_version_loops_for_strides global_options.x_flag_version_loops_for_strides
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_visibility_ms_compat;
+#else
+  int x_flag_visibility_ms_compat;
+#define flag_visibility_ms_compat global_options.x_flag_visibility_ms_compat
+#endif
+#ifdef GENERATOR_FILE
+extern enum symbol_visibility default_visibility;
+#else
+  enum symbol_visibility x_default_visibility;
+#define default_visibility global_options.x_default_visibility
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_value_profile_transformations;
+#else
+  int x_flag_value_profile_transformations;
+#define flag_value_profile_transformations global_options.x_flag_value_profile_transformations
+#endif
+#ifdef GENERATOR_FILE
+extern enum vtv_priority flag_vtable_verify;
+#else
+  enum vtv_priority x_flag_vtable_verify;
+#define flag_vtable_verify global_options.x_flag_vtable_verify
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_vtv_counts;
+#else
+  int x_flag_vtv_counts;
+#define flag_vtv_counts global_options.x_flag_vtv_counts
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_vtv_debug;
+#else
+  int x_flag_vtv_debug;
+#define flag_vtv_debug global_options.x_flag_vtv_debug
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_weak;
+#else
+  int x_flag_weak;
+#define flag_weak global_options.x_flag_weak
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_web;
+#else
+  int x_flag_web;
+#define flag_web global_options.x_flag_web
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_whole_program;
+#else
+  int x_flag_whole_program;
+#define flag_whole_program global_options.x_flag_whole_program
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_working_directory;
+#else
+  int x_flag_working_directory;
+#define flag_working_directory global_options.x_flag_working_directory
+#endif
+#ifdef GENERATOR_FILE
+extern const char *flag_wpa;
+#else
+  const char *x_flag_wpa;
+#define flag_wpa global_options.x_flag_wpa
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_wrapv;
+#else
+  int x_flag_wrapv;
+#define flag_wrapv global_options.x_flag_wrapv
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_wrapv_pointer;
+#else
+  int x_flag_wrapv_pointer;
+#define flag_wrapv_pointer global_options.x_flag_wrapv_pointer
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_zero_initialized_in_bss;
+#else
+  int x_flag_zero_initialized_in_bss;
+#define flag_zero_initialized_in_bss global_options.x_flag_zero_initialized_in_bss
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_zero_link;
+#else
+  int x_flag_zero_link;
+#define flag_zero_link global_options.x_flag_zero_link
+#endif
+#ifdef GENERATOR_FILE
+extern int dwarf2out_as_loc_support;
+#else
+  int x_dwarf2out_as_loc_support;
+#define dwarf2out_as_loc_support global_options.x_dwarf2out_as_loc_support
+#endif
+#ifdef GENERATOR_FILE
+extern int dwarf2out_as_locview_support;
+#else
+  int x_dwarf2out_as_locview_support;
+#define dwarf2out_as_locview_support global_options.x_dwarf2out_as_locview_support
+#endif
+#ifdef GENERATOR_FILE
+extern int debug_column_info;
+#else
+  int x_debug_column_info;
+#define debug_column_info global_options.x_debug_column_info
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_describe_dies;
+#else
+  int x_flag_describe_dies;
+#define flag_describe_dies global_options.x_flag_describe_dies
+#endif
+#ifdef GENERATOR_FILE
+extern int dwarf_version;
+#else
+  int x_dwarf_version;
+#define dwarf_version global_options.x_dwarf_version
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_gen_declaration;
+#else
+  int x_flag_gen_declaration;
+#define flag_gen_declaration global_options.x_flag_gen_declaration
+#endif
+#ifdef GENERATOR_FILE
+extern int debug_generate_pub_sections;
+#else
+  int x_debug_generate_pub_sections;
+#define debug_generate_pub_sections global_options.x_debug_generate_pub_sections
+#endif
+#ifdef GENERATOR_FILE
+extern int debug_inline_points;
+#else
+  int x_debug_inline_points;
+#define debug_inline_points global_options.x_debug_inline_points
+#endif
+#ifdef GENERATOR_FILE
+extern int debug_internal_reset_location_views;
+#else
+  int x_debug_internal_reset_location_views;
+#define debug_internal_reset_location_views global_options.x_debug_internal_reset_location_views
+#endif
+#ifdef GENERATOR_FILE
+extern int dwarf_record_gcc_switches;
+#else
+  int x_dwarf_record_gcc_switches;
+#define dwarf_record_gcc_switches global_options.x_dwarf_record_gcc_switches
+#endif
+#ifdef GENERATOR_FILE
+extern int dwarf_split_debug_info;
+#else
+  int x_dwarf_split_debug_info;
+#define dwarf_split_debug_info global_options.x_dwarf_split_debug_info
+#endif
+#ifdef GENERATOR_FILE
+extern int debug_nonbind_markers_p;
+#else
+  int x_debug_nonbind_markers_p;
+#define debug_nonbind_markers_p global_options.x_debug_nonbind_markers_p
+#endif
+#ifdef GENERATOR_FILE
+extern int dwarf_strict;
+#else
+  int x_dwarf_strict;
+#define dwarf_strict global_options.x_dwarf_strict
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_gtoggle;
+#else
+  int x_flag_gtoggle;
+#define flag_gtoggle global_options.x_flag_gtoggle
+#endif
+#ifdef GENERATOR_FILE
+extern int debug_variable_location_views;
+#else
+  int x_debug_variable_location_views;
+#define debug_variable_location_views global_options.x_debug_variable_location_views
+#endif
+#ifdef GENERATOR_FILE
+extern const char *imultiarch;
+#else
+  const char *x_imultiarch;
+#define imultiarch global_options.x_imultiarch
+#endif
+#ifdef GENERATOR_FILE
+extern const char *plugindir_string;
+#else
+  const char *x_plugindir_string;
+#define plugindir_string global_options.x_plugindir_string
+#endif
+#ifdef GENERATOR_FILE
+extern int aarch64_abi;
+#else
+  int x_aarch64_abi;
+#define aarch64_abi global_options.x_aarch64_abi
+#endif
+#ifdef GENERATOR_FILE
+extern const char *aarch64_arch_string;
+#else
+  const char *x_aarch64_arch_string;
+#define aarch64_arch_string global_options.x_aarch64_arch_string
+#endif
+#ifdef GENERATOR_FILE
+extern const char *aarch64_branch_protection_string;
+#else
+  const char *x_aarch64_branch_protection_string;
+#define aarch64_branch_protection_string global_options.x_aarch64_branch_protection_string
+#endif
+#ifdef GENERATOR_FILE
+extern enum aarch64_code_model aarch64_cmodel_var;
+#else
+  enum aarch64_code_model x_aarch64_cmodel_var;
+#define aarch64_cmodel_var global_options.x_aarch64_cmodel_var
+#endif
+#ifdef GENERATOR_FILE
+extern const char *aarch64_cpu_string;
+#else
+  const char *x_aarch64_cpu_string;
+#define aarch64_cpu_string global_options.x_aarch64_cpu_string
+#endif
+#ifdef GENERATOR_FILE
+extern int aarch64_fix_a53_err835769;
+#else
+  int x_aarch64_fix_a53_err835769;
+#define aarch64_fix_a53_err835769 global_options.x_aarch64_fix_a53_err835769
+#endif
+#ifdef GENERATOR_FILE
+extern int aarch64_fix_a53_err843419;
+#else
+  int x_aarch64_fix_a53_err843419;
+#define aarch64_fix_a53_err843419 global_options.x_aarch64_fix_a53_err843419
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_mlow_precision_div;
+#else
+  int x_flag_mlow_precision_div;
+#define flag_mlow_precision_div global_options.x_flag_mlow_precision_div
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_mrecip_low_precision_sqrt;
+#else
+  int x_flag_mrecip_low_precision_sqrt;
+#define flag_mrecip_low_precision_sqrt global_options.x_flag_mrecip_low_precision_sqrt
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_mlow_precision_sqrt;
+#else
+  int x_flag_mlow_precision_sqrt;
+#define flag_mlow_precision_sqrt global_options.x_flag_mlow_precision_sqrt
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_omit_leaf_frame_pointer;
+#else
+  int x_flag_omit_leaf_frame_pointer;
+#define flag_omit_leaf_frame_pointer global_options.x_flag_omit_leaf_frame_pointer
+#endif
+#ifdef GENERATOR_FILE
+extern const char *aarch64_override_tune_string;
+#else
+  const char *x_aarch64_override_tune_string;
+#define aarch64_override_tune_string global_options.x_aarch64_override_tune_string
+#endif
+#ifdef GENERATOR_FILE
+extern int pcrelative_literal_loads;
+#else
+  int x_pcrelative_literal_loads;
+#define pcrelative_literal_loads global_options.x_pcrelative_literal_loads
+#endif
+#ifdef GENERATOR_FILE
+extern enum aarch64_function_type aarch64_ra_sign_scope;
+#else
+  enum aarch64_function_type x_aarch64_ra_sign_scope;
+#define aarch64_ra_sign_scope global_options.x_aarch64_ra_sign_scope
+#endif
+#ifdef GENERATOR_FILE
+extern const char *aarch64_stack_protector_guard_offset_str;
+#else
+  const char *x_aarch64_stack_protector_guard_offset_str;
+#define aarch64_stack_protector_guard_offset_str global_options.x_aarch64_stack_protector_guard_offset_str
+#endif
+#ifdef GENERATOR_FILE
+extern const char *aarch64_stack_protector_guard_reg_str;
+#else
+  const char *x_aarch64_stack_protector_guard_reg_str;
+#define aarch64_stack_protector_guard_reg_str global_options.x_aarch64_stack_protector_guard_reg_str
+#endif
+#ifdef GENERATOR_FILE
+extern enum stack_protector_guard aarch64_stack_protector_guard;
+#else
+  enum stack_protector_guard x_aarch64_stack_protector_guard;
+#define aarch64_stack_protector_guard global_options.x_aarch64_stack_protector_guard
+#endif
+#ifdef GENERATOR_FILE
+extern enum aarch64_sve_vector_bits_enum aarch64_sve_vector_bits;
+#else
+  enum aarch64_sve_vector_bits_enum x_aarch64_sve_vector_bits;
+#define aarch64_sve_vector_bits global_options.x_aarch64_sve_vector_bits
+#endif
+#ifdef GENERATOR_FILE
+extern enum aarch64_tls_type aarch64_tls_dialect;
+#else
+  enum aarch64_tls_type x_aarch64_tls_dialect;
+#define aarch64_tls_dialect global_options.x_aarch64_tls_dialect
+#endif
+#ifdef GENERATOR_FILE
+extern int aarch64_tls_size;
+#else
+  int x_aarch64_tls_size;
+#define aarch64_tls_size global_options.x_aarch64_tls_size
+#endif
+#ifdef GENERATOR_FILE
+extern int aarch64_track_speculation;
+#else
+  int x_aarch64_track_speculation;
+#define aarch64_track_speculation global_options.x_aarch64_track_speculation
+#endif
+#ifdef GENERATOR_FILE
+extern const char *aarch64_tune_string;
+#else
+  const char *x_aarch64_tune_string;
+#define aarch64_tune_string global_options.x_aarch64_tune_string
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_aarch64_verbose_cost;
+#else
+  int x_flag_aarch64_verbose_cost;
+#define flag_aarch64_verbose_cost global_options.x_flag_aarch64_verbose_cost
+#endif
+#ifdef GENERATOR_FILE
+extern const char *asm_file_name;
+#else
+  const char *x_asm_file_name;
+#define asm_file_name global_options.x_asm_file_name
+#endif
+#ifdef GENERATOR_FILE
+extern int pass_exit_codes;
+#else
+  int x_pass_exit_codes;
+#define pass_exit_codes global_options.x_pass_exit_codes
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_pedantic_errors;
+#else
+  int x_flag_pedantic_errors;
+#define flag_pedantic_errors global_options.x_flag_pedantic_errors
+#endif
+#ifdef GENERATOR_FILE
+extern int use_pipes;
+#else
+  int x_use_pipes;
+#define use_pipes global_options.x_use_pipes
+#endif
+#ifdef GENERATOR_FILE
+extern const char *print_file_name;
+#else
+  const char *x_print_file_name;
+#define print_file_name global_options.x_print_file_name
+#endif
+#ifdef GENERATOR_FILE
+extern int print_multi_directory;
+#else
+  int x_print_multi_directory;
+#define print_multi_directory global_options.x_print_multi_directory
+#endif
+#ifdef GENERATOR_FILE
+extern int print_multi_lib;
+#else
+  int x_print_multi_lib;
+#define print_multi_lib global_options.x_print_multi_lib
+#endif
+#ifdef GENERATOR_FILE
+extern int print_multi_os_directory;
+#else
+  int x_print_multi_os_directory;
+#define print_multi_os_directory global_options.x_print_multi_os_directory
+#endif
+#ifdef GENERATOR_FILE
+extern int print_multiarch;
+#else
+  int x_print_multiarch;
+#define print_multiarch global_options.x_print_multiarch
+#endif
+#ifdef GENERATOR_FILE
+extern const char *print_prog_name;
+#else
+  const char *x_print_prog_name;
+#define print_prog_name global_options.x_print_prog_name
+#endif
+#ifdef GENERATOR_FILE
+extern int print_search_dirs;
+#else
+  int x_print_search_dirs;
+#define print_search_dirs global_options.x_print_search_dirs
+#endif
+#ifdef GENERATOR_FILE
+extern int print_sysroot;
+#else
+  int x_print_sysroot;
+#define print_sysroot global_options.x_print_sysroot
+#endif
+#ifdef GENERATOR_FILE
+extern int print_sysroot_headers_suffix;
+#else
+  int x_print_sysroot_headers_suffix;
+#define print_sysroot_headers_suffix global_options.x_print_sysroot_headers_suffix
+#endif
+#ifdef GENERATOR_FILE
+extern int quiet_flag;
+#else
+  int x_quiet_flag;
+#define quiet_flag global_options.x_quiet_flag
+#endif
+#ifdef GENERATOR_FILE
+extern int report_times;
+#else
+  int x_report_times;
+#define report_times global_options.x_report_times
+#endif
+#ifdef GENERATOR_FILE
+extern int flag_undef;
+#else
+  int x_flag_undef;
+#define flag_undef global_options.x_flag_undef
+#endif
+#ifdef GENERATOR_FILE
+extern int verbose_flag;
+#else
+  int x_verbose_flag;
+#define verbose_flag global_options.x_verbose_flag
+#endif
+#ifdef GENERATOR_FILE
+extern int version_flag;
+#else
+  int x_version_flag;
+#define version_flag global_options.x_version_flag
+#endif
+#ifdef GENERATOR_FILE
+extern int inhibit_warnings;
+#else
+  int x_inhibit_warnings;
+#define inhibit_warnings global_options.x_inhibit_warnings
+#endif
+#ifdef GENERATOR_FILE
+extern const char *wrapper_string;
+#else
+  const char *x_wrapper_string;
+#define wrapper_string global_options.x_wrapper_string
+#endif
+#ifndef GENERATOR_FILE
+  bool frontend_set_flag_associative_math;
+#endif
+#ifndef GENERATOR_FILE
+  bool frontend_set_flag_cx_limited_range;
+#endif
+#ifndef GENERATOR_FILE
+  bool frontend_set_flag_excess_precision_cmdline;
+#endif
+#ifndef GENERATOR_FILE
+  bool frontend_set_flag_finite_math_only;
+#endif
+#ifndef GENERATOR_FILE
+  bool frontend_set_flag_errno_math;
+#endif
+#ifndef GENERATOR_FILE
+  bool frontend_set_flag_reciprocal_math;
+#endif
+#ifndef GENERATOR_FILE
+  bool frontend_set_flag_rounding_math;
+#endif
+#ifndef GENERATOR_FILE
+  bool frontend_set_flag_signaling_nans;
+#endif
+#ifndef GENERATOR_FILE
+  bool frontend_set_flag_signed_zeros;
+#endif
+#ifndef GENERATOR_FILE
+  bool frontend_set_flag_trapping_math;
+#endif
+#ifndef GENERATOR_FILE
+  bool frontend_set_flag_unsafe_math_optimizations;
+#endif
+#ifndef GENERATOR_FILE
+};
+extern struct gcc_options global_options;
+extern const struct gcc_options global_options_init;
+extern struct gcc_options global_options_set;
+#define target_flags_explicit global_options_set.x_target_flags
+#endif
+#endif
+
+#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS)
+
+/* Structure to save/restore optimization and target specific options.  */
+struct GTY(()) cl_optimization
+{
+  const char *x_str_align_functions;
+  const char *x_str_align_jumps;
+  const char *x_str_align_labels;
+  const char *x_str_align_loops;
+  int x_flag_sched_stalled_insns;
+  int x_flag_sched_stalled_insns_dep;
+  int x_flag_tree_parallelize_loops;
+  enum fp_contract_mode x_flag_fp_contract_mode;
+  enum ira_algorithm x_flag_ira_algorithm;
+  enum ira_region x_flag_ira_region;
+  enum live_patching_level x_flag_live_patching;
+  enum reorder_blocks_algorithm x_flag_reorder_blocks_algorithm;
+  enum vect_cost_model x_flag_simd_cost_model;
+  enum stack_reuse_level x_flag_stack_reuse;
+  enum vect_cost_model x_flag_vect_cost_model;
+  unsigned char x_optimize;
+  unsigned char x_optimize_size;
+  unsigned char x_optimize_debug;
+  unsigned char x_optimize_fast;
+  signed char x_flag_aggressive_loop_optimizations;
+  signed char x_flag_align_functions;
+  signed char x_flag_align_jumps;
+  signed char x_flag_align_labels;
+  signed char x_flag_align_loops;
+  signed char x_flag_associative_math;
+  signed char x_flag_assume_phsa;
+  signed char x_flag_asynchronous_unwind_tables;
+  signed char x_flag_auto_inc_dec;
+  signed char x_flag_branch_on_count_reg;
+  signed char x_flag_branch_probabilities;
+  signed char x_flag_branch_target_load_optimize;
+  signed char x_flag_branch_target_load_optimize2;
+  signed char x_flag_btr_bb_exclusive;
+  signed char x_flag_caller_saves;
+  signed char x_flag_code_hoisting;
+  signed char x_flag_combine_stack_adjustments;
+  signed char x_flag_compare_elim_after_reload;
+  signed char x_flag_conserve_stack;
+  signed char x_flag_cprop_registers;
+  signed char x_flag_crossjumping;
+  signed char x_flag_cse_follow_jumps;
+  signed char x_flag_cx_fortran_rules;
+  signed char x_flag_cx_limited_range;
+  signed char x_flag_dce;
+  signed char x_flag_defer_pop;
+  signed char x_flag_delayed_branch;
+  signed char x_flag_delete_dead_exceptions;
+  signed char x_flag_delete_null_pointer_checks;
+  signed char x_flag_devirtualize;
+  signed char x_flag_devirtualize_speculatively;
+  signed char x_flag_dse;
+  signed char x_flag_early_inlining;
+  signed char x_flag_exceptions;
+  signed char x_flag_expensive_optimizations;
+  signed char x_flag_finite_math_only;
+  signed char x_flag_float_store;
+  signed char x_flag_forward_propagate;
+  signed char x_flag_fp_int_builtin_inexact;
+  signed char x_flag_no_function_cse;
+  signed char x_flag_gcse;
+  signed char x_flag_gcse_after_reload;
+  signed char x_flag_gcse_las;
+  signed char x_flag_gcse_lm;
+  signed char x_flag_gcse_sm;
+  signed char x_flag_graphite;
+  signed char x_flag_graphite_identity;
+  signed char x_flag_guess_branch_prob;
+  signed char x_flag_hoist_adjacent_loads;
+  signed char x_flag_if_conversion;
+  signed char x_flag_if_conversion2;
+  signed char x_flag_indirect_inlining;
+  signed char x_flag_no_inline;
+  signed char x_flag_inline_atomics;
+  signed char x_flag_inline_functions;
+  signed char x_flag_inline_functions_called_once;
+  signed char x_flag_inline_small_functions;
+  signed char x_flag_ipa_bit_cp;
+  signed char x_flag_ipa_cp;
+  signed char x_flag_ipa_cp_clone;
+  signed char x_flag_ipa_icf;
+  signed char x_flag_ipa_icf_functions;
+  signed char x_flag_ipa_icf_variables;
+  signed char x_flag_ipa_profile;
+  signed char x_flag_ipa_pta;
+  signed char x_flag_ipa_pure_const;
+  signed char x_flag_ipa_ra;
+  signed char x_flag_ipa_reference;
+  signed char x_flag_ipa_reference_addressable;
+  signed char x_flag_ipa_sra;
+  signed char x_flag_ipa_stack_alignment;
+  signed char x_flag_ipa_vrp;
+  signed char x_flag_ira_hoist_pressure;
+  signed char x_flag_ira_loop_pressure;
+  signed char x_flag_ira_share_save_slots;
+  signed char x_flag_ira_share_spill_slots;
+  signed char x_flag_isolate_erroneous_paths_attribute;
+  signed char x_flag_isolate_erroneous_paths_dereference;
+  signed char x_flag_ivopts;
+  signed char x_flag_jump_tables;
+  signed char x_flag_keep_gc_roots_live;
+  signed char x_flag_lifetime_dse;
+  signed char x_flag_limit_function_alignment;
+  signed char x_flag_live_range_shrinkage;
+  signed char x_flag_loop_interchange;
+  signed char x_flag_loop_nest_optimize;
+  signed char x_flag_loop_parallelize_all;
+  signed char x_flag_unroll_jam;
+  signed char x_flag_lra_remat;
+  signed char x_flag_errno_math;
+  signed char x_flag_modulo_sched;
+  signed char x_flag_modulo_sched_allow_regmoves;
+  signed char x_flag_move_loop_invariants;
+  signed char x_flag_non_call_exceptions;
+  signed char x_flag_nothrow_opt;
+  signed char x_flag_omit_frame_pointer;
+  signed char x_flag_opt_info;
+  signed char x_flag_optimize_sibling_calls;
+  signed char x_flag_optimize_strlen;
+  signed char x_flag_pack_struct;
+  signed char x_flag_partial_inlining;
+  signed char x_flag_peel_loops;
+  signed char x_flag_no_peephole;
+  signed char x_flag_peephole2;
+  signed char x_flag_plt;
+  signed char x_flag_predictive_commoning;
+  signed char x_flag_prefetch_loop_arrays;
+  signed char x_flag_printf_return_value;
+  signed char x_flag_reciprocal_math;
+  signed char x_flag_pcc_struct_return;
+  signed char x_flag_rename_registers;
+  signed char x_flag_reorder_blocks;
+  signed char x_flag_reorder_blocks_and_partition;
+  signed char x_flag_reorder_functions;
+  signed char x_flag_rerun_cse_after_loop;
+  signed char x_flag_resched_modulo_sched;
+  signed char x_flag_rounding_math;
+  signed char x_flag_rtti;
+  signed char x_flag_save_optimization_record;
+  signed char x_flag_sched_critical_path_heuristic;
+  signed char x_flag_sched_dep_count_heuristic;
+  signed char x_flag_sched_group_heuristic;
+  signed char x_flag_schedule_interblock;
+  signed char x_flag_sched_last_insn_heuristic;
+  signed char x_flag_sched_pressure;
+  signed char x_flag_sched_rank_heuristic;
+  signed char x_flag_schedule_speculative;
+  signed char x_flag_sched_spec_insn_heuristic;
+  signed char x_flag_schedule_speculative_load;
+  signed char x_flag_schedule_speculative_load_dangerous;
+  signed char x_flag_sched2_use_superblocks;
+  signed char x_flag_schedule_fusion;
+  signed char x_flag_schedule_insns;
+  signed char x_flag_schedule_insns_after_reload;
+  signed char x_flag_section_anchors;
+  signed char x_flag_sel_sched_pipelining;
+  signed char x_flag_sel_sched_pipelining_outer_loops;
+  signed char x_flag_sel_sched_reschedule_pipelined;
+  signed char x_flag_selective_scheduling;
+  signed char x_flag_selective_scheduling2;
+  signed char x_flag_short_enums;
+  signed char x_flag_short_wchar;
+  signed char x_flag_shrink_wrap;
+  signed char x_flag_shrink_wrap_separate;
+  signed char x_flag_signaling_nans;
+  signed char x_flag_signed_zeros;
+  signed char x_flag_single_precision_constant;
+  signed char x_flag_split_ivs_in_unroller;
+  signed char x_flag_split_loops;
+  signed char x_flag_split_paths;
+  signed char x_flag_split_wide_types;
+  signed char x_flag_ssa_backprop;
+  signed char x_flag_ssa_phiopt;
+  signed char x_flag_stack_clash_protection;
+  signed char x_flag_stack_protect;
+  signed char x_flag_stdarg_opt;
+  signed char x_flag_store_merging;
+  signed char x_flag_strict_aliasing;
+  signed char x_flag_strict_enums;
+  signed char x_flag_strict_volatile_bitfields;
+  signed char x_flag_thread_jumps;
+  signed char x_flag_threadsafe_statics;
+  signed char x_flag_tracer;
+  signed char x_flag_trapping_math;
+  signed char x_flag_trapv;
+  signed char x_flag_tree_bit_ccp;
+  signed char x_flag_tree_builtin_call_dce;
+  signed char x_flag_tree_ccp;
+  signed char x_flag_tree_ch;
+  signed char x_flag_tree_coalesce_vars;
+  signed char x_flag_tree_copy_prop;
+  signed char x_flag_tree_cselim;
+  signed char x_flag_tree_dce;
+  signed char x_flag_tree_dom;
+  signed char x_flag_tree_dse;
+  signed char x_flag_tree_forwprop;
+  signed char x_flag_tree_fre;
+  signed char x_flag_tree_loop_distribute_patterns;
+  signed char x_flag_tree_loop_distribution;
+  signed char x_flag_tree_loop_if_convert;
+  signed char x_flag_tree_loop_im;
+  signed char x_flag_tree_loop_ivcanon;
+  signed char x_flag_tree_loop_optimize;
+  signed char x_flag_tree_loop_vectorize;
+  signed char x_flag_tree_live_range_split;
+  signed char x_flag_tree_partial_pre;
+  signed char x_flag_tree_phiprop;
+  signed char x_flag_tree_pre;
+  signed char x_flag_tree_pta;
+  signed char x_flag_tree_reassoc;
+  signed char x_flag_tree_scev_cprop;
+  signed char x_flag_tree_sink;
+  signed char x_flag_tree_slp_vectorize;
+  signed char x_flag_tree_slsr;
+  signed char x_flag_tree_sra;
+  signed char x_flag_tree_switch_conversion;
+  signed char x_flag_tree_tail_merge;
+  signed char x_flag_tree_ter;
+  signed char x_flag_tree_vrp;
+  signed char x_flag_unconstrained_commons;
+  signed char x_flag_unroll_all_loops;
+  signed char x_flag_unroll_loops;
+  signed char x_flag_unsafe_math_optimizations;
+  signed char x_flag_unswitch_loops;
+  signed char x_flag_unwind_tables;
+  signed char x_flag_var_tracking;
+  signed char x_flag_var_tracking_assignments;
+  signed char x_flag_var_tracking_assignments_toggle;
+  signed char x_flag_var_tracking_uninit;
+  signed char x_flag_variable_expansion_in_unroller;
+  signed char x_flag_version_loops_for_strides;
+  signed char x_flag_value_profile_transformations;
+  signed char x_flag_web;
+  signed char x_flag_wrapv;
+  signed char x_flag_wrapv_pointer;
+  signed char x_flag_mlow_precision_div;
+  signed char x_flag_mrecip_low_precision_sqrt;
+  signed char x_flag_mlow_precision_sqrt;
+};
+
+/* Structure to save/restore selected target specific options.  */
+struct GTY(()) cl_target_option
+{
+  const char *x_aarch64_override_tune_string;
+  long x_aarch64_stack_protector_guard_offset;
+  unsigned x_aarch64_enable_bti;
+  unsigned long x_aarch64_isa_flags;
+  const char *x_aarch64_branch_protection_string;
+  enum aarch64_code_model x_aarch64_cmodel_var;
+  /* - */ int x_target_flags;
+  enum aarch64_function_type x_aarch64_ra_sign_scope;
+  enum aarch64_tls_type x_aarch64_tls_dialect;
+  enum aarch64_arch x_explicit_arch;
+  enum aarch64_processor x_explicit_tune_core;
+  signed char x_aarch64_fix_a53_err835769;
+  signed char x_aarch64_fix_a53_err843419;
+  signed char x_flag_omit_leaf_frame_pointer;
+  signed char x_pcrelative_literal_loads;
+};
+
+
+/* Save optimization variables into a structure.  */
+extern void cl_optimization_save (struct cl_optimization *, struct gcc_options *);
+
+/* Restore optimization variables from a structure.  */
+extern void cl_optimization_restore (struct gcc_options *, struct cl_optimization *);
+
+/* Print optimization variables from a structure.  */
+extern void cl_optimization_print (FILE *, int, struct cl_optimization *);
+
+/* Print different optimization variables from structures provided as arguments.  */
+extern void cl_optimization_print_diff (FILE *, int, cl_optimization *ptr1, cl_optimization *ptr2);
+
+/* Save selected option variables into a structure.  */
+extern void cl_target_option_save (struct cl_target_option *, struct gcc_options *);
+
+/* Restore selected option variables from a structure.  */
+extern void cl_target_option_restore (struct gcc_options *, struct cl_target_option *);
+
+/* Print target option variables from a structure.  */
+extern void cl_target_option_print (FILE *, int, struct cl_target_option *);
+
+/* Print different target option variables from structures provided as arguments.  */
+extern void cl_target_option_print_diff (FILE *, int, cl_target_option *ptr1, cl_target_option *ptr2);
+
+/* Compare two target option variables from a structure.  */
+extern bool cl_target_option_eq (const struct cl_target_option *, const struct cl_target_option *);
+
+/* Hash option variables from a structure.  */
+extern hashval_t cl_target_option_hash (const struct cl_target_option *);
+
+/* Hash optimization from a structure.  */
+extern hashval_t cl_optimization_hash (const struct cl_optimization *);
+
+/* Compare two optimization options.  */
+extern bool cl_optimization_option_eq (cl_optimization const *ptr1, cl_optimization const *ptr2);
+
+/* Generator files may not have access to location_t, and don't need these.  */
+#if defined(UNKNOWN_LOCATION)
+bool                                                                  
+common_handle_option_auto (struct gcc_options *opts,                  
+                           struct gcc_options *opts_set,              
+                           const struct cl_decoded_option *decoded,   
+                           unsigned int lang_mask, int kind,          
+                           location_t loc,                            
+                           const struct cl_option_handlers *handlers, 
+                           diagnostic_context *dc);                   
+bool
+Ada_handle_option_auto (struct gcc_options *opts,
+                           struct gcc_options *opts_set,
+                           size_t scode, const char *arg,
+                           HOST_WIDE_INT value,
+                           unsigned int lang_mask, int kind,
+                           location_t loc,
+                           const struct cl_option_handlers *handlers,
+                           diagnostic_context *dc);
+bool
+AdaSCIL_handle_option_auto (struct gcc_options *opts,
+                           struct gcc_options *opts_set,
+                           size_t scode, const char *arg,
+                           HOST_WIDE_INT value,
+                           unsigned int lang_mask, int kind,
+                           location_t loc,
+                           const struct cl_option_handlers *handlers,
+                           diagnostic_context *dc);
+bool
+AdaWhy_handle_option_auto (struct gcc_options *opts,
+                           struct gcc_options *opts_set,
+                           size_t scode, const char *arg,
+                           HOST_WIDE_INT value,
+                           unsigned int lang_mask, int kind,
+                           location_t loc,
+                           const struct cl_option_handlers *handlers,
+                           diagnostic_context *dc);
+bool
+BRIG_handle_option_auto (struct gcc_options *opts,
+                           struct gcc_options *opts_set,
+                           size_t scode, const char *arg,
+                           HOST_WIDE_INT value,
+                           unsigned int lang_mask, int kind,
+                           location_t loc,
+                           const struct cl_option_handlers *handlers,
+                           diagnostic_context *dc);
+bool
+C_handle_option_auto (struct gcc_options *opts,
+                           struct gcc_options *opts_set,
+                           size_t scode, const char *arg,
+                           HOST_WIDE_INT value,
+                           unsigned int lang_mask, int kind,
+                           location_t loc,
+                           const struct cl_option_handlers *handlers,
+                           diagnostic_context *dc);
+bool
+CXX_handle_option_auto (struct gcc_options *opts,
+                           struct gcc_options *opts_set,
+                           size_t scode, const char *arg,
+                           HOST_WIDE_INT value,
+                           unsigned int lang_mask, int kind,
+                           location_t loc,
+                           const struct cl_option_handlers *handlers,
+                           diagnostic_context *dc);
+bool
+D_handle_option_auto (struct gcc_options *opts,
+                           struct gcc_options *opts_set,
+                           size_t scode, const char *arg,
+                           HOST_WIDE_INT value,
+                           unsigned int lang_mask, int kind,
+                           location_t loc,
+                           const struct cl_option_handlers *handlers,
+                           diagnostic_context *dc);
+bool
+Fortran_handle_option_auto (struct gcc_options *opts,
+                           struct gcc_options *opts_set,
+                           size_t scode, const char *arg,
+                           HOST_WIDE_INT value,
+                           unsigned int lang_mask, int kind,
+                           location_t loc,
+                           const struct cl_option_handlers *handlers,
+                           diagnostic_context *dc);
+bool
+Go_handle_option_auto (struct gcc_options *opts,
+                           struct gcc_options *opts_set,
+                           size_t scode, const char *arg,
+                           HOST_WIDE_INT value,
+                           unsigned int lang_mask, int kind,
+                           location_t loc,
+                           const struct cl_option_handlers *handlers,
+                           diagnostic_context *dc);
+bool
+LTO_handle_option_auto (struct gcc_options *opts,
+                           struct gcc_options *opts_set,
+                           size_t scode, const char *arg,
+                           HOST_WIDE_INT value,
+                           unsigned int lang_mask, int kind,
+                           location_t loc,
+                           const struct cl_option_handlers *handlers,
+                           diagnostic_context *dc);
+bool
+ObjC_handle_option_auto (struct gcc_options *opts,
+                           struct gcc_options *opts_set,
+                           size_t scode, const char *arg,
+                           HOST_WIDE_INT value,
+                           unsigned int lang_mask, int kind,
+                           location_t loc,
+                           const struct cl_option_handlers *handlers,
+                           diagnostic_context *dc);
+bool
+ObjCXX_handle_option_auto (struct gcc_options *opts,
+                           struct gcc_options *opts_set,
+                           size_t scode, const char *arg,
+                           HOST_WIDE_INT value,
+                           unsigned int lang_mask, int kind,
+                           location_t loc,
+                           const struct cl_option_handlers *handlers,
+                           diagnostic_context *dc);
+void cpp_handle_option_auto (const struct gcc_options * opts, size_t scode,
+                             struct cpp_options * cpp_opts);
+void init_global_opts_from_cpp(struct gcc_options * opts,      
+                               const struct cpp_options * cpp_opts);
+#endif
+#endif
+
+#define MASK_BIG_END (1U << 0)
+#define MASK_GENERAL_REGS_ONLY (1U << 1)
+#define MASK_STRICT_ALIGN (1U << 2)
+
+#define TARGET_BIG_END ((target_flags & MASK_BIG_END) != 0)
+#define TARGET_BIG_END_P(target_flags) (((target_flags) & MASK_BIG_END) != 0)
+#define TARGET_GENERAL_REGS_ONLY ((target_flags & MASK_GENERAL_REGS_ONLY) != 0)
+#define TARGET_GENERAL_REGS_ONLY_P(target_flags) (((target_flags) & MASK_GENERAL_REGS_ONLY) != 0)
+#define TARGET_STRICT_ALIGN ((target_flags & MASK_STRICT_ALIGN) != 0)
+#define TARGET_STRICT_ALIGN_P(target_flags) (((target_flags) & MASK_STRICT_ALIGN) != 0)
+
+
+#define CL_Ada        (1U << 0)
+#define CL_AdaSCIL    (1U << 1)
+#define CL_AdaWhy     (1U << 2)
+#define CL_BRIG       (1U << 3)
+#define CL_C          (1U << 4)
+#define CL_CXX        (1U << 5)
+#define CL_D          (1U << 6)
+#define CL_Fortran    (1U << 7)
+#define CL_Go         (1U << 8)
+#define CL_LTO        (1U << 9)
+#define CL_ObjC       (1U << 10)
+#define CL_ObjCXX     (1U << 11)
+#define CL_LANG_ALL   ((1U << 12) - 1)
+
+enum opt_code
+{
+  OPT____ = 0,                               /* -### */
+  /* OPT__all_warnings = 1, */               /* --all-warnings */
+  /* OPT__ansi = 2, */                       /* --ansi */
+  /* OPT__assemble = 3, */                   /* --assemble */
+  /* OPT__assert = 4, */                     /* --assert */
+  /* OPT__assert_ = 5, */                    /* --assert= */
+  /* OPT__comments = 6, */                   /* --comments */
+  /* OPT__comments_in_macros = 7, */         /* --comments-in-macros */
+  /* OPT__compile = 8, */                    /* --compile */
+  OPT__completion_ = 9,                      /* --completion= */
+  /* OPT__coverage = 10, */                  /* --coverage */
+  /* OPT__debug = 11, */                     /* --debug */
+  /* OPT__define_macro = 12, */              /* --define-macro */
+  /* OPT__define_macro_ = 13, */             /* --define-macro= */
+  /* OPT__dependencies = 14, */              /* --dependencies */
+  /* OPT__dump = 15, */                      /* --dump */
+  /* OPT__dump_ = 16, */                     /* --dump= */
+  /* OPT__dumpbase = 17, */                  /* --dumpbase */
+  /* OPT__dumpdir = 18, */                   /* --dumpdir */
+  /* OPT__entry = 19, */                     /* --entry */
+  /* OPT__entry_ = 20, */                    /* --entry= */
+  /* OPT__extra_warnings = 21, */            /* --extra-warnings */
+  /* OPT__for_assembler = 22, */             /* --for-assembler */
+  /* OPT__for_assembler_ = 23, */            /* --for-assembler= */
+  /* OPT__for_linker = 24, */                /* --for-linker */
+  /* OPT__for_linker_ = 25, */               /* --for-linker= */
+  /* OPT__force_link = 26, */                /* --force-link */
+  /* OPT__force_link_ = 27, */               /* --force-link= */
+  OPT__help = 28,                            /* --help */
+  OPT__help_ = 29,                           /* --help= */
+  /* OPT__imacros = 30, */                   /* --imacros */
+  /* OPT__imacros_ = 31, */                  /* --imacros= */
+  /* OPT__include = 32, */                   /* --include */
+  /* OPT__include_barrier = 33, */           /* --include-barrier */
+  /* OPT__include_directory = 34, */         /* --include-directory */
+  /* OPT__include_directory_after = 35, */   /* --include-directory-after */
+  /* OPT__include_directory_after_ = 36, */  /* --include-directory-after= */
+  /* OPT__include_directory_ = 37, */        /* --include-directory= */
+  /* OPT__include_prefix = 38, */            /* --include-prefix */
+  /* OPT__include_prefix_ = 39, */           /* --include-prefix= */
+  /* OPT__include_with_prefix = 40, */       /* --include-with-prefix */
+  /* OPT__include_with_prefix_after = 41, */ /* --include-with-prefix-after */
+  /* OPT__include_with_prefix_after_ = 42, *//* --include-with-prefix-after= */
+  /* OPT__include_with_prefix_before = 43, *//* --include-with-prefix-before */
+  /* OPT__include_with_prefix_before_ = 44, *//* --include-with-prefix-before= */
+  /* OPT__include_with_prefix_ = 45, */      /* --include-with-prefix= */
+  /* OPT__include_ = 46, */                  /* --include= */
+  /* OPT__language = 47, */                  /* --language */
+  /* OPT__language_ = 48, */                 /* --language= */
+  /* OPT__library_directory = 49, */         /* --library-directory */
+  /* OPT__library_directory_ = 50, */        /* --library-directory= */
+  /* OPT__no_canonical_prefixes = 51, */     /* --no-canonical-prefixes */
+  /* OPT__no_integrated_cpp = 52, */         /* --no-integrated-cpp */
+  /* OPT__no_line_commands = 53, */          /* --no-line-commands */
+  /* OPT__no_standard_includes = 54, */      /* --no-standard-includes */
+  /* OPT__no_standard_libraries = 55, */     /* --no-standard-libraries */
+  OPT__no_sysroot_suffix = 56,               /* --no-sysroot-suffix */
+  /* OPT__no_warnings = 57, */               /* --no-warnings */
+  /* OPT__optimize = 58, */                  /* --optimize */
+  /* OPT__output = 59, */                    /* --output */
+  OPT__output_pch_ = 60,                     /* --output-pch= */
+  /* OPT__output_ = 61, */                   /* --output= */
+  OPT__param = 62,                           /* --param */
+  /* OPT__param_ = 63, */                    /* --param= */
+  /* OPT__pass_exit_codes = 64, */           /* --pass-exit-codes */
+  /* OPT__pedantic = 65, */                  /* --pedantic */
+  /* OPT__pedantic_errors = 66, */           /* --pedantic-errors */
+  /* OPT__pie = 67, */                       /* --pie */
+  /* OPT__pipe = 68, */                      /* --pipe */
+  /* OPT__prefix = 69, */                    /* --prefix */
+  /* OPT__prefix_ = 70, */                   /* --prefix= */
+  /* OPT__preprocess = 71, */                /* --preprocess */
+  /* OPT__print_file_name = 72, */           /* --print-file-name */
+  /* OPT__print_file_name_ = 73, */          /* --print-file-name= */
+  /* OPT__print_libgcc_file_name = 74, */    /* --print-libgcc-file-name */
+  /* OPT__print_missing_file_dependencies = 75, *//* --print-missing-file-dependencies */
+  /* OPT__print_multi_directory = 76, */     /* --print-multi-directory */
+  /* OPT__print_multi_lib = 77, */           /* --print-multi-lib */
+  /* OPT__print_multi_os_directory = 78, */  /* --print-multi-os-directory */
+  /* OPT__print_multiarch = 79, */           /* --print-multiarch */
+  /* OPT__print_prog_name = 80, */           /* --print-prog-name */
+  /* OPT__print_prog_name_ = 81, */          /* --print-prog-name= */
+  /* OPT__print_search_dirs = 82, */         /* --print-search-dirs */
+  /* OPT__print_sysroot = 83, */             /* --print-sysroot */
+  /* OPT__print_sysroot_headers_suffix = 84, *//* --print-sysroot-headers-suffix */
+  /* OPT__profile = 85, */                   /* --profile */
+  /* OPT__save_temps = 86, */                /* --save-temps */
+  /* OPT__shared = 87, */                    /* --shared */
+  /* OPT__specs = 88, */                     /* --specs */
+  /* OPT__specs_ = 89, */                    /* --specs= */
+  /* OPT__static = 90, */                    /* --static */
+  /* OPT__static_pie = 91, */                /* --static-pie */
+  /* OPT__symbolic = 92, */                  /* --symbolic */
+  /* OPT__sysroot = 93, */                   /* --sysroot */
+  OPT__sysroot_ = 94,                        /* --sysroot= */
+  OPT__target_help = 95,                     /* --target-help */
+  /* OPT__time = 96, */                      /* --time */
+  /* OPT__trace_includes = 97, */            /* --trace-includes */
+  /* OPT__traditional = 98, */               /* --traditional */
+  /* OPT__traditional_cpp = 99, */           /* --traditional-cpp */
+  /* OPT__trigraphs = 100, */                /* --trigraphs */
+  /* OPT__undefine_macro = 101, */           /* --undefine-macro */
+  /* OPT__undefine_macro_ = 102, */          /* --undefine-macro= */
+  /* OPT__user_dependencies = 103, */        /* --user-dependencies */
+  /* OPT__verbose = 104, */                  /* --verbose */
+  OPT__version = 105,                        /* --version */
+  /* OPT__write_dependencies = 106, */       /* --write-dependencies */
+  /* OPT__write_user_dependencies = 107, */  /* --write-user-dependencies */
+  OPT_A = 108,                               /* -A */
+  OPT_B = 109,                               /* -B */
+  OPT_C = 110,                               /* -C */
+  OPT_CC = 111,                              /* -CC */
+  OPT_D = 112,                               /* -D */
+  OPT_E = 113,                               /* -E */
+  OPT_F = 114,                               /* -F */
+  OPT_H = 115,                               /* -H */
+  OPT_Hd = 116,                              /* -Hd */
+  OPT_Hf = 117,                              /* -Hf */
+  OPT_I = 118,                               /* -I */
+  OPT_J = 119,                               /* -J */
+  OPT_L = 120,                               /* -L */
+  OPT_M = 121,                               /* -M */
+  OPT_MD = 122,                              /* -MD */
+  OPT_MF = 123,                              /* -MF */
+  OPT_MG = 124,                              /* -MG */
+  OPT_MM = 125,                              /* -MM */
+  OPT_MMD = 126,                             /* -MMD */
+  OPT_MP = 127,                              /* -MP */
+  OPT_MQ = 128,                              /* -MQ */
+  OPT_MT = 129,                              /* -MT */
+  OPT_N = 130,                               /* -N */
+  OPT_O = 131,                               /* -O */
+  OPT_Ofast = 132,                           /* -Ofast */
+  OPT_Og = 133,                              /* -Og */
+  OPT_Os = 134,                              /* -Os */
+  OPT_P = 135,                               /* -P */
+  OPT_Q = 136,                               /* -Q */
+  OPT_Qn = 137,                              /* -Qn */
+  OPT_Qy = 138,                              /* -Qy */
+  OPT_R = 139,                               /* -R */
+  OPT_S = 140,                               /* -S */
+  OPT_T = 141,                               /* -T */
+  OPT_Tbss = 142,                            /* -Tbss */
+  OPT_Tbss_ = 143,                           /* -Tbss= */
+  OPT_Tdata = 144,                           /* -Tdata */
+  OPT_Tdata_ = 145,                          /* -Tdata= */
+  OPT_Ttext = 146,                           /* -Ttext */
+  OPT_Ttext_ = 147,                          /* -Ttext= */
+  OPT_U = 148,                               /* -U */
+  /* OPT_W = 149, */                         /* -W */
+  OPT_Wa_ = 150,                             /* -Wa, */
+  OPT_Wabi = 151,                            /* -Wabi */
+  OPT_Wabi_tag = 152,                        /* -Wabi-tag */
+  OPT_Wabi_ = 153,                           /* -Wabi= */
+  OPT_Wabsolute_value = 154,                 /* -Wabsolute-value */
+  OPT_Waddress = 155,                        /* -Waddress */
+  OPT_Waddress_of_packed_member = 156,       /* -Waddress-of-packed-member */
+  OPT_Waggregate_return = 157,               /* -Waggregate-return */
+  OPT_Waggressive_loop_optimizations = 158,  /* -Waggressive-loop-optimizations */
+  OPT_Waliasing = 159,                       /* -Waliasing */
+  OPT_Walign_commons = 160,                  /* -Walign-commons */
+  /* OPT_Waligned_new = 161, */              /* -Waligned-new */
+  OPT_Waligned_new_ = 162,                   /* -Waligned-new= */
+  OPT_Wall = 163,                            /* -Wall */
+  OPT_Walloc_size_larger_than_ = 164,        /* -Walloc-size-larger-than= */
+  OPT_Walloc_zero = 165,                     /* -Walloc-zero */
+  OPT_Walloca = 166,                         /* -Walloca */
+  OPT_Walloca_larger_than_ = 167,            /* -Walloca-larger-than= */
+  OPT_Wampersand = 168,                      /* -Wampersand */
+  OPT_Wargument_mismatch = 169,              /* -Wargument-mismatch */
+  OPT_Warray_bounds = 170,                   /* -Warray-bounds */
+  OPT_Warray_bounds_ = 171,                  /* -Warray-bounds= */
+  OPT_Warray_temporaries = 172,              /* -Warray-temporaries */
+  OPT_Wassign_intercept = 173,               /* -Wassign-intercept */
+  /* OPT_Wattribute_alias = 174, */          /* -Wattribute-alias */
+  OPT_Wattribute_alias_ = 175,               /* -Wattribute-alias= */
+  OPT_Wattribute_warning = 176,              /* -Wattribute-warning */
+  OPT_Wattributes = 177,                     /* -Wattributes */
+  OPT_Wbad_function_cast = 178,              /* -Wbad-function-cast */
+  OPT_Wbool_compare = 179,                   /* -Wbool-compare */
+  OPT_Wbool_operation = 180,                 /* -Wbool-operation */
+  OPT_Wbuiltin_declaration_mismatch = 181,   /* -Wbuiltin-declaration-mismatch */
+  OPT_Wbuiltin_macro_redefined = 182,        /* -Wbuiltin-macro-redefined */
+  OPT_Wc___compat = 183,                     /* -Wc++-compat */
+  /* OPT_Wc__0x_compat = 184, */             /* -Wc++0x-compat */
+  OPT_Wc__11_compat = 185,                   /* -Wc++11-compat */
+  OPT_Wc__14_compat = 186,                   /* -Wc++14-compat */
+  OPT_Wc__17_compat = 187,                   /* -Wc++17-compat */
+  /* OPT_Wc__1z_compat = 188, */             /* -Wc++1z-compat */
+  OPT_Wc_binding_type = 189,                 /* -Wc-binding-type */
+  OPT_Wc11_c2x_compat = 190,                 /* -Wc11-c2x-compat */
+  OPT_Wc90_c99_compat = 191,                 /* -Wc90-c99-compat */
+  OPT_Wc99_c11_compat = 192,                 /* -Wc99-c11-compat */
+  OPT_Wcannot_profile = 193,                 /* -Wcannot-profile */
+  OPT_Wcast_align = 194,                     /* -Wcast-align */
+  OPT_Wcast_align_strict = 195,              /* -Wcast-align=strict */
+  OPT_Wcast_function_type = 196,             /* -Wcast-function-type */
+  OPT_Wcast_qual = 197,                      /* -Wcast-qual */
+  OPT_Wcast_result = 198,                    /* -Wcast-result */
+  /* OPT_Wcatch_value = 199, */              /* -Wcatch-value */
+  OPT_Wcatch_value_ = 200,                   /* -Wcatch-value= */
+  OPT_Wchar_subscripts = 201,                /* -Wchar-subscripts */
+  OPT_Wcharacter_truncation = 202,           /* -Wcharacter-truncation */
+  OPT_Wchkp = 203,                           /* -Wchkp */
+  OPT_Wclass_conversion = 204,               /* -Wclass-conversion */
+  OPT_Wclass_memaccess = 205,                /* -Wclass-memaccess */
+  OPT_Wclobbered = 206,                      /* -Wclobbered */
+  OPT_Wcomment = 207,                        /* -Wcomment */
+  /* OPT_Wcomments = 208, */                 /* -Wcomments */
+  OPT_Wcompare_reals = 209,                  /* -Wcompare-reals */
+  OPT_Wconditionally_supported = 210,        /* -Wconditionally-supported */
+  OPT_Wconversion = 211,                     /* -Wconversion */
+  OPT_Wconversion_extra = 212,               /* -Wconversion-extra */
+  OPT_Wconversion_null = 213,                /* -Wconversion-null */
+  OPT_Wcoverage_mismatch = 214,              /* -Wcoverage-mismatch */
+  OPT_Wcpp = 215,                            /* -Wcpp */
+  OPT_Wctor_dtor_privacy = 216,              /* -Wctor-dtor-privacy */
+  OPT_Wdangling_else = 217,                  /* -Wdangling-else */
+  OPT_Wdate_time = 218,                      /* -Wdate-time */
+  OPT_Wdeclaration_after_statement = 219,    /* -Wdeclaration-after-statement */
+  OPT_Wdelete_incomplete = 220,              /* -Wdelete-incomplete */
+  OPT_Wdelete_non_virtual_dtor = 221,        /* -Wdelete-non-virtual-dtor */
+  OPT_Wdeprecated = 222,                     /* -Wdeprecated */
+  OPT_Wdeprecated_copy = 223,                /* -Wdeprecated-copy */
+  OPT_Wdeprecated_copy_dtor = 224,           /* -Wdeprecated-copy-dtor */
+  OPT_Wdeprecated_declarations = 225,        /* -Wdeprecated-declarations */
+  OPT_Wdesignated_init = 226,                /* -Wdesignated-init */
+  OPT_Wdisabled_optimization = 227,          /* -Wdisabled-optimization */
+  OPT_Wdiscarded_array_qualifiers = 228,     /* -Wdiscarded-array-qualifiers */
+  OPT_Wdiscarded_qualifiers = 229,           /* -Wdiscarded-qualifiers */
+  OPT_Wdiv_by_zero = 230,                    /* -Wdiv-by-zero */
+  OPT_Wdo_subscript = 231,                   /* -Wdo-subscript */
+  OPT_Wdouble_promotion = 232,               /* -Wdouble-promotion */
+  OPT_Wduplicate_decl_specifier = 233,       /* -Wduplicate-decl-specifier */
+  OPT_Wduplicated_branches = 234,            /* -Wduplicated-branches */
+  OPT_Wduplicated_cond = 235,                /* -Wduplicated-cond */
+  OPT_Weffc__ = 236,                         /* -Weffc++ */
+  OPT_Wempty_body = 237,                     /* -Wempty-body */
+  OPT_Wendif_labels = 238,                   /* -Wendif-labels */
+  OPT_Wenum_compare = 239,                   /* -Wenum-compare */
+  OPT_Werror = 240,                          /* -Werror */
+  /* OPT_Werror_implicit_function_declaration = 241, *//* -Werror-implicit-function-declaration */
+  OPT_Werror_ = 242,                         /* -Werror= */
+  OPT_Wexpansion_to_defined = 243,           /* -Wexpansion-to-defined */
+  OPT_Wextra = 244,                          /* -Wextra */
+  OPT_Wextra_semi = 245,                     /* -Wextra-semi */
+  OPT_Wfatal_errors = 246,                   /* -Wfatal-errors */
+  OPT_Wfloat_conversion = 247,               /* -Wfloat-conversion */
+  OPT_Wfloat_equal = 248,                    /* -Wfloat-equal */
+  /* OPT_Wformat = 249, */                   /* -Wformat */
+  OPT_Wformat_contains_nul = 250,            /* -Wformat-contains-nul */
+  OPT_Wformat_extra_args = 251,              /* -Wformat-extra-args */
+  OPT_Wformat_nonliteral = 252,              /* -Wformat-nonliteral */
+  /* OPT_Wformat_overflow = 253, */          /* -Wformat-overflow */
+  OPT_Wformat_overflow_ = 254,               /* -Wformat-overflow= */
+  OPT_Wformat_security = 255,                /* -Wformat-security */
+  OPT_Wformat_signedness = 256,              /* -Wformat-signedness */
+  /* OPT_Wformat_truncation = 257, */        /* -Wformat-truncation */
+  OPT_Wformat_truncation_ = 258,             /* -Wformat-truncation= */
+  OPT_Wformat_y2k = 259,                     /* -Wformat-y2k */
+  OPT_Wformat_zero_length = 260,             /* -Wformat-zero-length */
+  OPT_Wformat_ = 261,                        /* -Wformat= */
+  OPT_Wframe_address = 262,                  /* -Wframe-address */
+  OPT_Wframe_larger_than_ = 263,             /* -Wframe-larger-than= */
+  OPT_Wfree_nonheap_object = 264,            /* -Wfree-nonheap-object */
+  OPT_Wfrontend_loop_interchange = 265,      /* -Wfrontend-loop-interchange */
+  OPT_Wfunction_elimination = 266,           /* -Wfunction-elimination */
+  OPT_Whsa = 267,                            /* -Whsa */
+  OPT_Wif_not_aligned = 268,                 /* -Wif-not-aligned */
+  OPT_Wignored_attributes = 269,             /* -Wignored-attributes */
+  OPT_Wignored_qualifiers = 270,             /* -Wignored-qualifiers */
+  OPT_Wimplicit = 271,                       /* -Wimplicit */
+  /* OPT_Wimplicit_fallthrough = 272, */     /* -Wimplicit-fallthrough */
+  OPT_Wimplicit_fallthrough_ = 273,          /* -Wimplicit-fallthrough= */
+  OPT_Wimplicit_function_declaration = 274,  /* -Wimplicit-function-declaration */
+  OPT_Wimplicit_int = 275,                   /* -Wimplicit-int */
+  OPT_Wimplicit_interface = 276,             /* -Wimplicit-interface */
+  OPT_Wimplicit_procedure = 277,             /* -Wimplicit-procedure */
+  /* OPT_Wimport = 278, */                   /* -Wimport */
+  OPT_Wincompatible_pointer_types = 279,     /* -Wincompatible-pointer-types */
+  OPT_Winherited_variadic_ctor = 280,        /* -Winherited-variadic-ctor */
+  OPT_Winit_list_lifetime = 281,             /* -Winit-list-lifetime */
+  OPT_Winit_self = 282,                      /* -Winit-self */
+  OPT_Winline = 283,                         /* -Winline */
+  OPT_Wint_conversion = 284,                 /* -Wint-conversion */
+  OPT_Wint_in_bool_context = 285,            /* -Wint-in-bool-context */
+  OPT_Wint_to_pointer_cast = 286,            /* -Wint-to-pointer-cast */
+  OPT_Winteger_division = 287,               /* -Winteger-division */
+  OPT_Wintrinsic_shadow = 288,               /* -Wintrinsic-shadow */
+  OPT_Wintrinsics_std = 289,                 /* -Wintrinsics-std */
+  OPT_Winvalid_memory_model = 290,           /* -Winvalid-memory-model */
+  OPT_Winvalid_offsetof = 291,               /* -Winvalid-offsetof */
+  OPT_Winvalid_pch = 292,                    /* -Winvalid-pch */
+  OPT_Wjump_misses_init = 293,               /* -Wjump-misses-init */
+  OPT_Wl_ = 294,                             /* -Wl, */
+  /* OPT_Wlarger_than_ = 295, */             /* -Wlarger-than- */
+  OPT_Wlarger_than_ = 296,                   /* -Wlarger-than= */
+  OPT_Wline_truncation = 297,                /* -Wline-truncation */
+  OPT_Wliteral_suffix = 298,                 /* -Wliteral-suffix */
+  OPT_Wlogical_not_parentheses = 299,        /* -Wlogical-not-parentheses */
+  OPT_Wlogical_op = 300,                     /* -Wlogical-op */
+  OPT_Wlong_long = 301,                      /* -Wlong-long */
+  OPT_Wlto_type_mismatch = 302,              /* -Wlto-type-mismatch */
+  OPT_Wmain = 303,                           /* -Wmain */
+  OPT_Wmaybe_uninitialized = 304,            /* -Wmaybe-uninitialized */
+  OPT_Wmemset_elt_size = 305,                /* -Wmemset-elt-size */
+  OPT_Wmemset_transposed_args = 306,         /* -Wmemset-transposed-args */
+  OPT_Wmisleading_indentation = 307,         /* -Wmisleading-indentation */
+  OPT_Wmissing_attributes = 308,             /* -Wmissing-attributes */
+  OPT_Wmissing_braces = 309,                 /* -Wmissing-braces */
+  OPT_Wmissing_declarations = 310,           /* -Wmissing-declarations */
+  OPT_Wmissing_field_initializers = 311,     /* -Wmissing-field-initializers */
+  /* OPT_Wmissing_format_attribute = 312, */ /* -Wmissing-format-attribute */
+  OPT_Wmissing_include_dirs = 313,           /* -Wmissing-include-dirs */
+  /* OPT_Wmissing_noreturn = 314, */         /* -Wmissing-noreturn */
+  OPT_Wmissing_parameter_type = 315,         /* -Wmissing-parameter-type */
+  OPT_Wmissing_profile = 316,                /* -Wmissing-profile */
+  OPT_Wmissing_prototypes = 317,             /* -Wmissing-prototypes */
+  OPT_Wmudflap = 318,                        /* -Wmudflap */
+  OPT_Wmultichar = 319,                      /* -Wmultichar */
+  OPT_Wmultiple_inheritance = 320,           /* -Wmultiple-inheritance */
+  OPT_Wmultistatement_macros = 321,          /* -Wmultistatement-macros */
+  OPT_Wnamespaces = 322,                     /* -Wnamespaces */
+  OPT_Wnarrowing = 323,                      /* -Wnarrowing */
+  OPT_Wnested_externs = 324,                 /* -Wnested-externs */
+  /* OPT_Wno_alloc_size_larger_than = 325, *//* -Wno-alloc-size-larger-than */
+  /* OPT_Wno_alloca_larger_than = 326, */    /* -Wno-alloca-larger-than */
+  /* OPT_Wno_vla_larger_than = 327, */       /* -Wno-vla-larger-than */
+  OPT_Wnoexcept = 328,                       /* -Wnoexcept */
+  OPT_Wnoexcept_type = 329,                  /* -Wnoexcept-type */
+  OPT_Wnon_template_friend = 330,            /* -Wnon-template-friend */
+  OPT_Wnon_virtual_dtor = 331,               /* -Wnon-virtual-dtor */
+  OPT_Wnonnull = 332,                        /* -Wnonnull */
+  OPT_Wnonnull_compare = 333,                /* -Wnonnull-compare */
+  /* OPT_Wnormalized = 334, */               /* -Wnormalized */
+  OPT_Wnormalized_ = 335,                    /* -Wnormalized= */
+  OPT_Wnull_dereference = 336,               /* -Wnull-dereference */
+  OPT_Wodr = 337,                            /* -Wodr */
+  OPT_Wold_style_cast = 338,                 /* -Wold-style-cast */
+  OPT_Wold_style_declaration = 339,          /* -Wold-style-declaration */
+  OPT_Wold_style_definition = 340,           /* -Wold-style-definition */
+  OPT_Wopenmp_simd = 341,                    /* -Wopenmp-simd */
+  OPT_Woverflow = 342,                       /* -Woverflow */
+  OPT_Woverlength_strings = 343,             /* -Woverlength-strings */
+  OPT_Woverloaded_virtual = 344,             /* -Woverloaded-virtual */
+  OPT_Woverride_init = 345,                  /* -Woverride-init */
+  OPT_Woverride_init_side_effects = 346,     /* -Woverride-init-side-effects */
+  OPT_Wp_ = 347,                             /* -Wp, */
+  OPT_Wpacked = 348,                         /* -Wpacked */
+  OPT_Wpacked_bitfield_compat = 349,         /* -Wpacked-bitfield-compat */
+  OPT_Wpacked_not_aligned = 350,             /* -Wpacked-not-aligned */
+  OPT_Wpadded = 351,                         /* -Wpadded */
+  OPT_Wparentheses = 352,                    /* -Wparentheses */
+  OPT_Wpedantic = 353,                       /* -Wpedantic */
+  OPT_Wpessimizing_move = 354,               /* -Wpessimizing-move */
+  /* OPT_Wplacement_new = 355, */            /* -Wplacement-new */
+  OPT_Wplacement_new_ = 356,                 /* -Wplacement-new= */
+  OPT_Wpmf_conversions = 357,                /* -Wpmf-conversions */
+  OPT_Wpointer_arith = 358,                  /* -Wpointer-arith */
+  OPT_Wpointer_compare = 359,                /* -Wpointer-compare */
+  OPT_Wpointer_sign = 360,                   /* -Wpointer-sign */
+  OPT_Wpointer_to_int_cast = 361,            /* -Wpointer-to-int-cast */
+  OPT_Wpragmas = 362,                        /* -Wpragmas */
+  OPT_Wprio_ctor_dtor = 363,                 /* -Wprio-ctor-dtor */
+  OPT_Wproperty_assign_default = 364,        /* -Wproperty-assign-default */
+  OPT_Wprotocol = 365,                       /* -Wprotocol */
+  OPT_Wpsabi = 366,                          /* -Wpsabi */
+  OPT_Wreal_q_constant = 367,                /* -Wreal-q-constant */
+  OPT_Wrealloc_lhs = 368,                    /* -Wrealloc-lhs */
+  OPT_Wrealloc_lhs_all = 369,                /* -Wrealloc-lhs-all */
+  OPT_Wredundant_decls = 370,                /* -Wredundant-decls */
+  OPT_Wredundant_move = 371,                 /* -Wredundant-move */
+  OPT_Wregister = 372,                       /* -Wregister */
+  OPT_Wreorder = 373,                        /* -Wreorder */
+  OPT_Wrestrict = 374,                       /* -Wrestrict */
+  OPT_Wreturn_local_addr = 375,              /* -Wreturn-local-addr */
+  OPT_Wreturn_type = 376,                    /* -Wreturn-type */
+  OPT_Wscalar_storage_order = 377,           /* -Wscalar-storage-order */
+  OPT_Wselector = 378,                       /* -Wselector */
+  OPT_Wsequence_point = 379,                 /* -Wsequence-point */
+  OPT_Wshadow = 380,                         /* -Wshadow */
+  /* OPT_Wshadow_compatible_local = 381, */  /* -Wshadow-compatible-local */
+  OPT_Wshadow_ivar = 382,                    /* -Wshadow-ivar */
+  /* OPT_Wshadow_local = 383, */             /* -Wshadow-local */
+  OPT_Wshadow_compatible_local = 384,        /* -Wshadow=compatible-local */
+  /* OPT_Wshadow_global = 385, */            /* -Wshadow=global */
+  OPT_Wshadow_local = 386,                   /* -Wshadow=local */
+  OPT_Wshift_count_negative = 387,           /* -Wshift-count-negative */
+  OPT_Wshift_count_overflow = 388,           /* -Wshift-count-overflow */
+  OPT_Wshift_negative_value = 389,           /* -Wshift-negative-value */
+  /* OPT_Wshift_overflow = 390, */           /* -Wshift-overflow */
+  OPT_Wshift_overflow_ = 391,                /* -Wshift-overflow= */
+  OPT_Wsign_compare = 392,                   /* -Wsign-compare */
+  OPT_Wsign_conversion = 393,                /* -Wsign-conversion */
+  OPT_Wsign_promo = 394,                     /* -Wsign-promo */
+  OPT_Wsized_deallocation = 395,             /* -Wsized-deallocation */
+  OPT_Wsizeof_array_argument = 396,          /* -Wsizeof-array-argument */
+  OPT_Wsizeof_pointer_div = 397,             /* -Wsizeof-pointer-div */
+  OPT_Wsizeof_pointer_memaccess = 398,       /* -Wsizeof-pointer-memaccess */
+  OPT_Wspeculative = 399,                    /* -Wspeculative */
+  OPT_Wstack_protector = 400,                /* -Wstack-protector */
+  OPT_Wstack_usage_ = 401,                   /* -Wstack-usage= */
+  OPT_Wstrict_aliasing = 402,                /* -Wstrict-aliasing */
+  OPT_Wstrict_aliasing_ = 403,               /* -Wstrict-aliasing= */
+  OPT_Wstrict_null_sentinel = 404,           /* -Wstrict-null-sentinel */
+  OPT_Wstrict_overflow = 405,                /* -Wstrict-overflow */
+  OPT_Wstrict_overflow_ = 406,               /* -Wstrict-overflow= */
+  OPT_Wstrict_prototypes = 407,              /* -Wstrict-prototypes */
+  OPT_Wstrict_selector_match = 408,          /* -Wstrict-selector-match */
+  /* OPT_Wstringop_overflow = 409, */        /* -Wstringop-overflow */
+  OPT_Wstringop_overflow_ = 410,             /* -Wstringop-overflow= */
+  OPT_Wstringop_truncation = 411,            /* -Wstringop-truncation */
+  OPT_Wsubobject_linkage = 412,              /* -Wsubobject-linkage */
+  OPT_Wsuggest_attribute_cold = 413,         /* -Wsuggest-attribute=cold */
+  OPT_Wsuggest_attribute_const = 414,        /* -Wsuggest-attribute=const */
+  OPT_Wsuggest_attribute_format = 415,       /* -Wsuggest-attribute=format */
+  OPT_Wsuggest_attribute_malloc = 416,       /* -Wsuggest-attribute=malloc */
+  OPT_Wsuggest_attribute_noreturn = 417,     /* -Wsuggest-attribute=noreturn */
+  OPT_Wsuggest_attribute_pure = 418,         /* -Wsuggest-attribute=pure */
+  OPT_Wsuggest_final_methods = 419,          /* -Wsuggest-final-methods */
+  OPT_Wsuggest_final_types = 420,            /* -Wsuggest-final-types */
+  OPT_Wsuggest_override = 421,               /* -Wsuggest-override */
+  OPT_Wsurprising = 422,                     /* -Wsurprising */
+  OPT_Wswitch = 423,                         /* -Wswitch */
+  OPT_Wswitch_bool = 424,                    /* -Wswitch-bool */
+  OPT_Wswitch_default = 425,                 /* -Wswitch-default */
+  OPT_Wswitch_enum = 426,                    /* -Wswitch-enum */
+  OPT_Wswitch_unreachable = 427,             /* -Wswitch-unreachable */
+  OPT_Wsync_nand = 428,                      /* -Wsync-nand */
+  OPT_Wsynth = 429,                          /* -Wsynth */
+  OPT_Wsystem_headers = 430,                 /* -Wsystem-headers */
+  OPT_Wtabs = 431,                           /* -Wtabs */
+  OPT_Wtarget_lifetime = 432,                /* -Wtarget-lifetime */
+  OPT_Wtautological_compare = 433,           /* -Wtautological-compare */
+  OPT_Wtemplates = 434,                      /* -Wtemplates */
+  OPT_Wterminate = 435,                      /* -Wterminate */
+  OPT_Wtraditional = 436,                    /* -Wtraditional */
+  OPT_Wtraditional_conversion = 437,         /* -Wtraditional-conversion */
+  OPT_Wtrampolines = 438,                    /* -Wtrampolines */
+  OPT_Wtrigraphs = 439,                      /* -Wtrigraphs */
+  OPT_Wtype_limits = 440,                    /* -Wtype-limits */
+  OPT_Wundeclared_selector = 441,            /* -Wundeclared-selector */
+  OPT_Wundef = 442,                          /* -Wundef */
+  OPT_Wundefined_do_loop = 443,              /* -Wundefined-do-loop */
+  OPT_Wunderflow = 444,                      /* -Wunderflow */
+  OPT_Wuninitialized = 445,                  /* -Wuninitialized */
+  OPT_Wunknown_pragmas = 446,                /* -Wunknown-pragmas */
+  /* OPT_Wunreachable_code = 447, */         /* -Wunreachable-code */
+  /* OPT_Wunsafe_loop_optimizations = 448, *//* -Wunsafe-loop-optimizations */
+  OPT_Wunsuffixed_float_constants = 449,     /* -Wunsuffixed-float-constants */
+  OPT_Wunused = 450,                         /* -Wunused */
+  OPT_Wunused_but_set_parameter = 451,       /* -Wunused-but-set-parameter */
+  OPT_Wunused_but_set_variable = 452,        /* -Wunused-but-set-variable */
+  /* OPT_Wunused_const_variable = 453, */    /* -Wunused-const-variable */
+  OPT_Wunused_const_variable_ = 454,         /* -Wunused-const-variable= */
+  OPT_Wunused_dummy_argument = 455,          /* -Wunused-dummy-argument */
+  OPT_Wunused_function = 456,                /* -Wunused-function */
+  OPT_Wunused_label = 457,                   /* -Wunused-label */
+  OPT_Wunused_local_typedefs = 458,          /* -Wunused-local-typedefs */
+  OPT_Wunused_macros = 459,                  /* -Wunused-macros */
+  OPT_Wunused_parameter = 460,               /* -Wunused-parameter */
+  OPT_Wunused_result = 461,                  /* -Wunused-result */
+  OPT_Wunused_value = 462,                   /* -Wunused-value */
+  OPT_Wunused_variable = 463,                /* -Wunused-variable */
+  OPT_Wuse_without_only = 464,               /* -Wuse-without-only */
+  OPT_Wuseless_cast = 465,                   /* -Wuseless-cast */
+  OPT_Wvarargs = 466,                        /* -Wvarargs */
+  OPT_Wvariadic_macros = 467,                /* -Wvariadic-macros */
+  OPT_Wvector_operation_performance = 468,   /* -Wvector-operation-performance */
+  OPT_Wvirtual_inheritance = 469,            /* -Wvirtual-inheritance */
+  OPT_Wvirtual_move_assign = 470,            /* -Wvirtual-move-assign */
+  OPT_Wvla = 471,                            /* -Wvla */
+  OPT_Wvla_larger_than_ = 472,               /* -Wvla-larger-than= */
+  OPT_Wvolatile_register_var = 473,          /* -Wvolatile-register-var */
+  OPT_Wwrite_strings = 474,                  /* -Wwrite-strings */
+  OPT_Wzero_as_null_pointer_constant = 475,  /* -Wzero-as-null-pointer-constant */
+  OPT_Wzerotrip = 476,                       /* -Wzerotrip */
+  OPT_X = 477,                               /* -X */
+  OPT_Xassembler = 478,                      /* -Xassembler */
+  OPT_Xf = 479,                              /* -Xf */
+  OPT_Xlinker = 480,                         /* -Xlinker */
+  OPT_Xpreprocessor = 481,                   /* -Xpreprocessor */
+  OPT_Z = 482,                               /* -Z */
+  OPT_ansi = 483,                            /* -ansi */
+  OPT_aux_info = 484,                        /* -aux-info */
+  /* OPT_aux_info_ = 485, */                 /* -aux-info= */
+  OPT_auxbase = 486,                         /* -auxbase */
+  OPT_auxbase_strip = 487,                   /* -auxbase-strip */
+  OPT_c = 488,                               /* -c */
+  OPT_coverage = 489,                        /* -coverage */
+  OPT_cpp = 490,                             /* -cpp */
+  OPT_cpp_ = 491,                            /* -cpp= */
+  OPT_d = 492,                               /* -d */
+  OPT_debuglib_ = 493,                       /* -debuglib= */
+  OPT_defaultlib_ = 494,                     /* -defaultlib= */
+  OPT_dstartfiles = 495,                     /* -dstartfiles */
+  OPT_dumpbase = 496,                        /* -dumpbase */
+  OPT_dumpdir = 497,                         /* -dumpdir */
+  OPT_dumpfullversion = 498,                 /* -dumpfullversion */
+  OPT_dumpmachine = 499,                     /* -dumpmachine */
+  OPT_dumpspecs = 500,                       /* -dumpspecs */
+  OPT_dumpversion = 501,                     /* -dumpversion */
+  OPT_e = 502,                               /* -e */
+  OPT_export_dynamic = 503,                  /* -export-dynamic */
+  OPT_fPIC = 504,                            /* -fPIC */
+  OPT_fPIE = 505,                            /* -fPIE */
+  OPT_fRTS_ = 506,                           /* -fRTS= */
+  OPT_fabi_compat_version_ = 507,            /* -fabi-compat-version= */
+  OPT_fabi_version_ = 508,                   /* -fabi-version= */
+  OPT_faccess_control = 509,                 /* -faccess-control */
+  OPT_fada_spec_parent_ = 510,               /* -fada-spec-parent= */
+  OPT_faggressive_function_elimination = 511,/* -faggressive-function-elimination */
+  OPT_faggressive_loop_optimizations = 512,  /* -faggressive-loop-optimizations */
+  OPT_falign_commons = 513,                  /* -falign-commons */
+  OPT_falign_functions = 514,                /* -falign-functions */
+  OPT_falign_functions_ = 515,               /* -falign-functions= */
+  OPT_falign_jumps = 516,                    /* -falign-jumps */
+  OPT_falign_jumps_ = 517,                   /* -falign-jumps= */
+  OPT_falign_labels = 518,                   /* -falign-labels */
+  OPT_falign_labels_ = 519,                  /* -falign-labels= */
+  OPT_falign_loops = 520,                    /* -falign-loops */
+  OPT_falign_loops_ = 521,                   /* -falign-loops= */
+  /* OPT_faligned_new = 522, */              /* -faligned-new */
+  OPT_faligned_new_ = 523,                   /* -faligned-new= */
+  OPT_fall_instantiations = 524,             /* -fall-instantiations */
+  OPT_fall_intrinsics = 525,                 /* -fall-intrinsics */
+  OPT_fall_virtual = 526,                    /* -fall-virtual */
+  OPT_fallow_leading_underscore = 527,       /* -fallow-leading-underscore */
+  OPT_fallow_parameterless_variadic_functions = 528,/* -fallow-parameterless-variadic-functions */
+  OPT_falt_external_templates = 529,         /* -falt-external-templates */
+  /* OPT_fargument_alias = 530, */           /* -fargument-alias */
+  /* OPT_fargument_noalias = 531, */         /* -fargument-noalias */
+  /* OPT_fargument_noalias_anything = 532, *//* -fargument-noalias-anything */
+  /* OPT_fargument_noalias_global = 533, */  /* -fargument-noalias-global */
+  OPT_fasan_shadow_offset_ = 534,            /* -fasan-shadow-offset= */
+  OPT_fasm = 535,                            /* -fasm */
+  OPT_fassert = 536,                         /* -fassert */
+  OPT_fassociative_math = 537,               /* -fassociative-math */
+  OPT_fassume_phsa = 538,                    /* -fassume-phsa */
+  OPT_fasynchronous_unwind_tables = 539,     /* -fasynchronous-unwind-tables */
+  OPT_fauto_inc_dec = 540,                   /* -fauto-inc-dec */
+  OPT_fauto_profile = 541,                   /* -fauto-profile */
+  OPT_fauto_profile_ = 542,                  /* -fauto-profile= */
+  OPT_fautomatic = 543,                      /* -fautomatic */
+  OPT_fbackslash = 544,                      /* -fbackslash */
+  OPT_fbacktrace = 545,                      /* -fbacktrace */
+  OPT_fblas_matmul_limit_ = 546,             /* -fblas-matmul-limit= */
+  OPT_fbounds_check = 547,                   /* -fbounds-check */
+  OPT_fbounds_check_ = 548,                  /* -fbounds-check= */
+  OPT_fbranch_count_reg = 549,               /* -fbranch-count-reg */
+  OPT_fbranch_probabilities = 550,           /* -fbranch-probabilities */
+  OPT_fbranch_target_load_optimize = 551,    /* -fbranch-target-load-optimize */
+  OPT_fbranch_target_load_optimize2 = 552,   /* -fbranch-target-load-optimize2 */
+  OPT_fbtr_bb_exclusive = 553,               /* -fbtr-bb-exclusive */
+  OPT_fbuilding_libgcc = 554,                /* -fbuilding-libgcc */
+  OPT_fbuilding_libphobos_tests = 555,       /* -fbuilding-libphobos-tests */
+  OPT_fbuiltin = 556,                        /* -fbuiltin */
+  OPT_fbuiltin_ = 557,                       /* -fbuiltin- */
+  OPT_fbuiltin_printf = 558,                 /* -fbuiltin-printf */
+  OPT_fc_prototypes = 559,                   /* -fc-prototypes */
+  OPT_fcall_saved_ = 560,                    /* -fcall-saved- */
+  OPT_fcall_used_ = 561,                     /* -fcall-used- */
+  OPT_fcaller_saves = 562,                   /* -fcaller-saves */
+  OPT_fcanonical_system_headers = 563,       /* -fcanonical-system-headers */
+  /* OPT_fcf_protection = 564, */            /* -fcf-protection */
+  OPT_fcf_protection_ = 565,                 /* -fcf-protection= */
+  OPT_fchar8_t = 566,                        /* -fchar8_t */
+  OPT_fcheck_array_temporaries = 567,        /* -fcheck-array-temporaries */
+  /* OPT_fcheck_data_deps = 568, */          /* -fcheck-data-deps */
+  OPT_fcheck_new = 569,                      /* -fcheck-new */
+  OPT_fcheck_pointer_bounds = 570,           /* -fcheck-pointer-bounds */
+  OPT_fcheck_ = 571,                         /* -fcheck= */
+  OPT_fchecking = 572,                       /* -fchecking */
+  OPT_fchecking_ = 573,                      /* -fchecking= */
+  OPT_fchkp_check_incomplete_type = 574,     /* -fchkp-check-incomplete-type */
+  OPT_fchkp_check_read = 575,                /* -fchkp-check-read */
+  OPT_fchkp_check_write = 576,               /* -fchkp-check-write */
+  OPT_fchkp_first_field_has_own_bounds = 577,/* -fchkp-first-field-has-own-bounds */
+  OPT_fchkp_flexible_struct_trailing_arrays = 578,/* -fchkp-flexible-struct-trailing-arrays */
+  OPT_fchkp_instrument_calls = 579,          /* -fchkp-instrument-calls */
+  OPT_fchkp_instrument_marked_only = 580,    /* -fchkp-instrument-marked-only */
+  OPT_fchkp_narrow_bounds = 581,             /* -fchkp-narrow-bounds */
+  OPT_fchkp_narrow_to_innermost_array = 582, /* -fchkp-narrow-to-innermost-array */
+  OPT_fchkp_optimize = 583,                  /* -fchkp-optimize */
+  OPT_fchkp_store_bounds = 584,              /* -fchkp-store-bounds */
+  OPT_fchkp_treat_zero_dynamic_size_as_infinite = 585,/* -fchkp-treat-zero-dynamic-size-as-infinite */
+  OPT_fchkp_use_fast_string_functions = 586, /* -fchkp-use-fast-string-functions */
+  OPT_fchkp_use_nochk_string_functions = 587,/* -fchkp-use-nochk-string-functions */
+  OPT_fchkp_use_static_bounds = 588,         /* -fchkp-use-static-bounds */
+  OPT_fchkp_use_static_const_bounds = 589,   /* -fchkp-use-static-const-bounds */
+  OPT_fchkp_use_wrappers = 590,              /* -fchkp-use-wrappers */
+  OPT_fchkp_zero_input_bounds_for_main = 591,/* -fchkp-zero-input-bounds-for-main */
+  /* OPT_fcilkplus = 592, */                 /* -fcilkplus */
+  OPT_fcoarray_ = 593,                       /* -fcoarray= */
+  OPT_fcode_hoisting = 594,                  /* -fcode-hoisting */
+  OPT_fcombine_stack_adjustments = 595,      /* -fcombine-stack-adjustments */
+  OPT_fcommon = 596,                         /* -fcommon */
+  OPT_fcompare_debug = 597,                  /* -fcompare-debug */
+  OPT_fcompare_debug_second = 598,           /* -fcompare-debug-second */
+  OPT_fcompare_debug_ = 599,                 /* -fcompare-debug= */
+  OPT_fcompare_elim = 600,                   /* -fcompare-elim */
+  OPT_fconcepts = 601,                       /* -fconcepts */
+  OPT_fcond_mismatch = 602,                  /* -fcond-mismatch */
+  /* OPT_fconserve_space = 603, */           /* -fconserve-space */
+  OPT_fconserve_stack = 604,                 /* -fconserve-stack */
+  OPT_fconstant_string_class_ = 605,         /* -fconstant-string-class= */
+  OPT_fconstexpr_depth_ = 606,               /* -fconstexpr-depth= */
+  OPT_fconstexpr_loop_limit_ = 607,          /* -fconstexpr-loop-limit= */
+  OPT_fconstexpr_ops_limit_ = 608,           /* -fconstexpr-ops-limit= */
+  OPT_fconvert_ = 609,                       /* -fconvert= */
+  OPT_fcprop_registers = 610,                /* -fcprop-registers */
+  OPT_fcray_pointer = 611,                   /* -fcray-pointer */
+  OPT_fcrossjumping = 612,                   /* -fcrossjumping */
+  OPT_fcse_follow_jumps = 613,               /* -fcse-follow-jumps */
+  /* OPT_fcse_skip_blocks = 614, */          /* -fcse-skip-blocks */
+  OPT_fcx_fortran_rules = 615,               /* -fcx-fortran-rules */
+  OPT_fcx_limited_range = 616,               /* -fcx-limited-range */
+  OPT_fd_lines_as_code = 617,                /* -fd-lines-as-code */
+  OPT_fd_lines_as_comments = 618,            /* -fd-lines-as-comments */
+  OPT_fdata_sections = 619,                  /* -fdata-sections */
+  OPT_fdbg_cnt_list = 620,                   /* -fdbg-cnt-list */
+  OPT_fdbg_cnt_ = 621,                       /* -fdbg-cnt= */
+  OPT_fdce = 622,                            /* -fdce */
+  OPT_fdebug = 623,                          /* -fdebug */
+  OPT_fdebug_cpp = 624,                      /* -fdebug-cpp */
+  OPT_fdebug_prefix_map_ = 625,              /* -fdebug-prefix-map= */
+  OPT_fdebug_types_section = 626,            /* -fdebug-types-section */
+  OPT_fdebug_ = 627,                         /* -fdebug= */
+  OPT_fdec = 628,                            /* -fdec */
+  OPT_fdec_include = 629,                    /* -fdec-include */
+  OPT_fdec_intrinsic_ints = 630,             /* -fdec-intrinsic-ints */
+  OPT_fdec_math = 631,                       /* -fdec-math */
+  OPT_fdec_static = 632,                     /* -fdec-static */
+  OPT_fdec_structure = 633,                  /* -fdec-structure */
+  OPT_fdeclone_ctor_dtor = 634,              /* -fdeclone-ctor-dtor */
+  OPT_fdeduce_init_list = 635,               /* -fdeduce-init-list */
+  OPT_fdefault_double_8 = 636,               /* -fdefault-double-8 */
+  /* OPT_fdefault_inline = 637, */           /* -fdefault-inline */
+  OPT_fdefault_integer_8 = 638,              /* -fdefault-integer-8 */
+  OPT_fdefault_real_10 = 639,                /* -fdefault-real-10 */
+  OPT_fdefault_real_16 = 640,                /* -fdefault-real-16 */
+  OPT_fdefault_real_8 = 641,                 /* -fdefault-real-8 */
+  OPT_fdefer_pop = 642,                      /* -fdefer-pop */
+  OPT_fdelayed_branch = 643,                 /* -fdelayed-branch */
+  OPT_fdelete_dead_exceptions = 644,         /* -fdelete-dead-exceptions */
+  OPT_fdelete_null_pointer_checks = 645,     /* -fdelete-null-pointer-checks */
+  OPT_fdevirtualize = 646,                   /* -fdevirtualize */
+  OPT_fdevirtualize_at_ltrans = 647,         /* -fdevirtualize-at-ltrans */
+  OPT_fdevirtualize_speculatively = 648,     /* -fdevirtualize-speculatively */
+  /* OPT_fdiagnostics_color = 649, */        /* -fdiagnostics-color */
+  OPT_fdiagnostics_color_ = 650,             /* -fdiagnostics-color= */
+  OPT_fdiagnostics_format_ = 651,            /* -fdiagnostics-format= */
+  OPT_fdiagnostics_generate_patch = 652,     /* -fdiagnostics-generate-patch */
+  OPT_fdiagnostics_minimum_margin_width_ = 653,/* -fdiagnostics-minimum-margin-width= */
+  OPT_fdiagnostics_parseable_fixits = 654,   /* -fdiagnostics-parseable-fixits */
+  OPT_fdiagnostics_show_caret = 655,         /* -fdiagnostics-show-caret */
+  OPT_fdiagnostics_show_labels = 656,        /* -fdiagnostics-show-labels */
+  OPT_fdiagnostics_show_line_numbers = 657,  /* -fdiagnostics-show-line-numbers */
+  OPT_fdiagnostics_show_location_ = 658,     /* -fdiagnostics-show-location= */
+  OPT_fdiagnostics_show_option = 659,        /* -fdiagnostics-show-option */
+  OPT_fdiagnostics_show_template_tree = 660, /* -fdiagnostics-show-template-tree */
+  OPT_fdirectives_only = 661,                /* -fdirectives-only */
+  OPT_fdisable_ = 662,                       /* -fdisable- */
+  OPT_fdoc = 663,                            /* -fdoc */
+  OPT_fdoc_dir_ = 664,                       /* -fdoc-dir= */
+  OPT_fdoc_file_ = 665,                      /* -fdoc-file= */
+  OPT_fdoc_inc_ = 666,                       /* -fdoc-inc= */
+  OPT_fdollar_ok = 667,                      /* -fdollar-ok */
+  OPT_fdollars_in_identifiers = 668,         /* -fdollars-in-identifiers */
+  OPT_fdruntime = 669,                       /* -fdruntime */
+  OPT_fdse = 670,                            /* -fdse */
+  OPT_fdump_ = 671,                          /* -fdump- */
+  OPT_fdump_ada_spec = 672,                  /* -fdump-ada-spec */
+  OPT_fdump_ada_spec_slim = 673,             /* -fdump-ada-spec-slim */
+  /* OPT_fdump_core = 674, */                /* -fdump-core */
+  OPT_fdump_d_original = 675,                /* -fdump-d-original */
+  OPT_fdump_final_insns = 676,               /* -fdump-final-insns */
+  OPT_fdump_final_insns_ = 677,              /* -fdump-final-insns= */
+  OPT_fdump_fortran_optimized = 678,         /* -fdump-fortran-optimized */
+  OPT_fdump_fortran_original = 679,          /* -fdump-fortran-original */
+  OPT_fdump_go_spec_ = 680,                  /* -fdump-go-spec= */
+  OPT_fdump_internal_locations = 681,        /* -fdump-internal-locations */
+  OPT_fdump_noaddr = 682,                    /* -fdump-noaddr */
+  /* OPT_fdump_parse_tree = 683, */          /* -fdump-parse-tree */
+  OPT_fdump_passes = 684,                    /* -fdump-passes */
+  OPT_fdump_unnumbered = 685,                /* -fdump-unnumbered */
+  OPT_fdump_unnumbered_links = 686,          /* -fdump-unnumbered-links */
+  OPT_fdwarf2_cfi_asm = 687,                 /* -fdwarf2-cfi-asm */
+  OPT_fearly_inlining = 688,                 /* -fearly-inlining */
+  OPT_felide_constructors = 689,             /* -felide-constructors */
+  OPT_felide_type = 690,                     /* -felide-type */
+  /* OPT_feliminate_dwarf2_dups = 691, */    /* -feliminate-dwarf2-dups */
+  OPT_feliminate_unused_debug_symbols = 692, /* -feliminate-unused-debug-symbols */
+  OPT_feliminate_unused_debug_types = 693,   /* -feliminate-unused-debug-types */
+  OPT_femit_class_debug_always = 694,        /* -femit-class-debug-always */
+  OPT_femit_struct_debug_baseonly = 695,     /* -femit-struct-debug-baseonly */
+  OPT_femit_struct_debug_detailed_ = 696,    /* -femit-struct-debug-detailed= */
+  OPT_femit_struct_debug_reduced = 697,      /* -femit-struct-debug-reduced */
+  OPT_fenable_ = 698,                        /* -fenable- */
+  OPT_fenforce_eh_specs = 699,               /* -fenforce-eh-specs */
+  OPT_fenum_int_equiv = 700,                 /* -fenum-int-equiv */
+  OPT_fexceptions = 701,                     /* -fexceptions */
+  OPT_fexcess_precision_ = 702,              /* -fexcess-precision= */
+  OPT_fexec_charset_ = 703,                  /* -fexec-charset= */
+  OPT_fexpensive_optimizations = 704,        /* -fexpensive-optimizations */
+  OPT_fext_numeric_literals = 705,           /* -fext-numeric-literals */
+  OPT_fextended_identifiers = 706,           /* -fextended-identifiers */
+  OPT_fextern_tls_init = 707,                /* -fextern-tls-init */
+  OPT_fexternal_blas = 708,                  /* -fexternal-blas */
+  OPT_fexternal_templates = 709,             /* -fexternal-templates */
+  OPT_ff2c = 710,                            /* -ff2c */
+  OPT_ffast_math = 711,                      /* -ffast-math */
+  OPT_ffat_lto_objects = 712,                /* -ffat-lto-objects */
+  OPT_ffile_prefix_map_ = 713,               /* -ffile-prefix-map= */
+  OPT_ffinite_math_only = 714,               /* -ffinite-math-only */
+  OPT_ffixed_ = 715,                         /* -ffixed- */
+  OPT_ffixed_form = 716,                     /* -ffixed-form */
+  OPT_ffixed_line_length_ = 717,             /* -ffixed-line-length- */
+  OPT_ffixed_line_length_none = 718,         /* -ffixed-line-length-none */
+  OPT_ffloat_store = 719,                    /* -ffloat-store */
+  OPT_ffor_scope = 720,                      /* -ffor-scope */
+  /* OPT_fforce_addr = 721, */               /* -fforce-addr */
+  OPT_fforward_propagate = 722,              /* -fforward-propagate */
+  OPT_ffp_contract_ = 723,                   /* -ffp-contract= */
+  OPT_ffp_int_builtin_inexact = 724,         /* -ffp-int-builtin-inexact */
+  OPT_ffpe_summary_ = 725,                   /* -ffpe-summary= */
+  OPT_ffpe_trap_ = 726,                      /* -ffpe-trap= */
+  OPT_ffree_form = 727,                      /* -ffree-form */
+  OPT_ffree_line_length_ = 728,              /* -ffree-line-length- */
+  OPT_ffree_line_length_none = 729,          /* -ffree-line-length-none */
+  OPT_ffreestanding = 730,                   /* -ffreestanding */
+  OPT_ffriend_injection = 731,               /* -ffriend-injection */
+  OPT_ffrontend_loop_interchange = 732,      /* -ffrontend-loop-interchange */
+  OPT_ffrontend_optimize = 733,              /* -ffrontend-optimize */
+  OPT_ffunction_cse = 734,                   /* -ffunction-cse */
+  OPT_ffunction_sections = 735,              /* -ffunction-sections */
+  OPT_fgcse = 736,                           /* -fgcse */
+  OPT_fgcse_after_reload = 737,              /* -fgcse-after-reload */
+  OPT_fgcse_las = 738,                       /* -fgcse-las */
+  OPT_fgcse_lm = 739,                        /* -fgcse-lm */
+  OPT_fgcse_sm = 740,                        /* -fgcse-sm */
+  OPT_fgimple = 741,                         /* -fgimple */
+  OPT_fgnat_encodings_ = 742,                /* -fgnat-encodings= */
+  OPT_fgnu_keywords = 743,                   /* -fgnu-keywords */
+  OPT_fgnu_runtime = 744,                    /* -fgnu-runtime */
+  OPT_fgnu_tm = 745,                         /* -fgnu-tm */
+  OPT_fgnu_unique = 746,                     /* -fgnu-unique */
+  OPT_fgnu89_inline = 747,                   /* -fgnu89-inline */
+  OPT_fgo_c_header_ = 748,                   /* -fgo-c-header= */
+  OPT_fgo_check_divide_overflow = 749,       /* -fgo-check-divide-overflow */
+  OPT_fgo_check_divide_zero = 750,           /* -fgo-check-divide-zero */
+  OPT_fgo_compiling_runtime = 751,           /* -fgo-compiling-runtime */
+  OPT_fgo_debug_escape = 752,                /* -fgo-debug-escape */
+  OPT_fgo_debug_escape_hash_ = 753,          /* -fgo-debug-escape-hash= */
+  OPT_fgo_dump_ = 754,                       /* -fgo-dump- */
+  OPT_fgo_optimize_ = 755,                   /* -fgo-optimize- */
+  OPT_fgo_pkgpath_ = 756,                    /* -fgo-pkgpath= */
+  OPT_fgo_prefix_ = 757,                     /* -fgo-prefix= */
+  OPT_fgo_relative_import_path_ = 758,       /* -fgo-relative-import-path= */
+  OPT_fgraphite = 759,                       /* -fgraphite */
+  OPT_fgraphite_identity = 760,              /* -fgraphite-identity */
+  OPT_fguess_branch_probability = 761,       /* -fguess-branch-probability */
+  OPT_fguiding_decls = 762,                  /* -fguiding-decls */
+  /* OPT_fhandle_exceptions = 763, */        /* -fhandle-exceptions */
+  /* OPT_fhelp = 764, */                     /* -fhelp */
+  /* OPT_fhelp_ = 765, */                    /* -fhelp= */
+  OPT_fhoist_adjacent_loads = 766,           /* -fhoist-adjacent-loads */
+  OPT_fhonor_std = 767,                      /* -fhonor-std */
+  OPT_fhosted = 768,                         /* -fhosted */
+  OPT_fhuge_objects = 769,                   /* -fhuge-objects */
+  OPT_fident = 770,                          /* -fident */
+  OPT_fif_conversion = 771,                  /* -fif-conversion */
+  OPT_fif_conversion2 = 772,                 /* -fif-conversion2 */
+  OPT_fignore_unknown_pragmas = 773,         /* -fignore-unknown-pragmas */
+  OPT_fimplement_inlines = 774,              /* -fimplement-inlines */
+  OPT_fimplicit_inline_templates = 775,      /* -fimplicit-inline-templates */
+  OPT_fimplicit_none = 776,                  /* -fimplicit-none */
+  OPT_fimplicit_templates = 777,             /* -fimplicit-templates */
+  OPT_findirect_inlining = 778,              /* -findirect-inlining */
+  OPT_finhibit_size_directive = 779,         /* -finhibit-size-directive */
+  OPT_finit_character_ = 780,                /* -finit-character= */
+  OPT_finit_derived = 781,                   /* -finit-derived */
+  OPT_finit_integer_ = 782,                  /* -finit-integer= */
+  OPT_finit_local_zero = 783,                /* -finit-local-zero */
+  OPT_finit_logical_ = 784,                  /* -finit-logical= */
+  OPT_finit_real_ = 785,                     /* -finit-real= */
+  OPT_finline = 786,                         /* -finline */
+  OPT_finline_atomics = 787,                 /* -finline-atomics */
+  OPT_finline_functions = 788,               /* -finline-functions */
+  OPT_finline_functions_called_once = 789,   /* -finline-functions-called-once */
+  /* OPT_finline_limit_ = 790, */            /* -finline-limit- */
+  OPT_finline_limit_ = 791,                  /* -finline-limit= */
+  OPT_finline_matmul_limit_ = 792,           /* -finline-matmul-limit= */
+  OPT_finline_small_functions = 793,         /* -finline-small-functions */
+  OPT_finput_charset_ = 794,                 /* -finput-charset= */
+  OPT_finstrument_functions = 795,           /* -finstrument-functions */
+  OPT_finstrument_functions_exclude_file_list_ = 796,/* -finstrument-functions-exclude-file-list= */
+  OPT_finstrument_functions_exclude_function_list_ = 797,/* -finstrument-functions-exclude-function-list= */
+  OPT_finteger_4_integer_8 = 798,            /* -finteger-4-integer-8 */
+  OPT_fintrinsic_modules_path = 799,         /* -fintrinsic-modules-path */
+  OPT_fintrinsic_modules_path_ = 800,        /* -fintrinsic-modules-path= */
+  OPT_finvariants = 801,                     /* -finvariants */
+  OPT_fipa_bit_cp = 802,                     /* -fipa-bit-cp */
+  OPT_fipa_cp = 803,                         /* -fipa-cp */
+  /* OPT_fipa_cp_alignment = 804, */         /* -fipa-cp-alignment */
+  OPT_fipa_cp_clone = 805,                   /* -fipa-cp-clone */
+  OPT_fipa_icf = 806,                        /* -fipa-icf */
+  OPT_fipa_icf_functions = 807,              /* -fipa-icf-functions */
+  OPT_fipa_icf_variables = 808,              /* -fipa-icf-variables */
+  /* OPT_fipa_matrix_reorg = 809, */         /* -fipa-matrix-reorg */
+  OPT_fipa_profile = 810,                    /* -fipa-profile */
+  OPT_fipa_pta = 811,                        /* -fipa-pta */
+  OPT_fipa_pure_const = 812,                 /* -fipa-pure-const */
+  OPT_fipa_ra = 813,                         /* -fipa-ra */
+  OPT_fipa_reference = 814,                  /* -fipa-reference */
+  OPT_fipa_reference_addressable = 815,      /* -fipa-reference-addressable */
+  OPT_fipa_sra = 816,                        /* -fipa-sra */
+  OPT_fipa_stack_alignment = 817,            /* -fipa-stack-alignment */
+  /* OPT_fipa_struct_reorg = 818, */         /* -fipa-struct-reorg */
+  OPT_fipa_vrp = 819,                        /* -fipa-vrp */
+  OPT_fira_algorithm_ = 820,                 /* -fira-algorithm= */
+  OPT_fira_hoist_pressure = 821,             /* -fira-hoist-pressure */
+  OPT_fira_loop_pressure = 822,              /* -fira-loop-pressure */
+  OPT_fira_region_ = 823,                    /* -fira-region= */
+  OPT_fira_share_save_slots = 824,           /* -fira-share-save-slots */
+  OPT_fira_share_spill_slots = 825,          /* -fira-share-spill-slots */
+  OPT_fira_verbose_ = 826,                   /* -fira-verbose= */
+  OPT_fisolate_erroneous_paths_attribute = 827,/* -fisolate-erroneous-paths-attribute */
+  OPT_fisolate_erroneous_paths_dereference = 828,/* -fisolate-erroneous-paths-dereference */
+  OPT_fivar_visibility_ = 829,               /* -fivar-visibility= */
+  OPT_fivopts = 830,                         /* -fivopts */
+  OPT_fjump_tables = 831,                    /* -fjump-tables */
+  OPT_fkeep_gc_roots_live = 832,             /* -fkeep-gc-roots-live */
+  OPT_fkeep_inline_dllexport = 833,          /* -fkeep-inline-dllexport */
+  OPT_fkeep_inline_functions = 834,          /* -fkeep-inline-functions */
+  OPT_fkeep_static_consts = 835,             /* -fkeep-static-consts */
+  OPT_fkeep_static_functions = 836,          /* -fkeep-static-functions */
+  OPT_flabels_ok = 837,                      /* -flabels-ok */
+  OPT_flax_vector_conversions = 838,         /* -flax-vector-conversions */
+  OPT_fleading_underscore = 839,             /* -fleading-underscore */
+  OPT_flifetime_dse = 840,                   /* -flifetime-dse */
+  OPT_flifetime_dse_ = 841,                  /* -flifetime-dse= */
+  OPT_flimit_function_alignment = 842,       /* -flimit-function-alignment */
+  OPT_flinker_output_ = 843,                 /* -flinker-output= */
+  /* OPT_flive_patching = 844, */            /* -flive-patching */
+  OPT_flive_patching_ = 845,                 /* -flive-patching= */
+  OPT_flive_range_shrinkage = 846,           /* -flive-range-shrinkage */
+  OPT_flocal_ivars = 847,                    /* -flocal-ivars */
+  /* OPT_floop_block = 848, */               /* -floop-block */
+  /* OPT_floop_flatten = 849, */             /* -floop-flatten */
+  OPT_floop_interchange = 850,               /* -floop-interchange */
+  OPT_floop_nest_optimize = 851,             /* -floop-nest-optimize */
+  /* OPT_floop_optimize = 852, */            /* -floop-optimize */
+  OPT_floop_parallelize_all = 853,           /* -floop-parallelize-all */
+  /* OPT_floop_strip_mine = 854, */          /* -floop-strip-mine */
+  OPT_floop_unroll_and_jam = 855,            /* -floop-unroll-and-jam */
+  OPT_flra_remat = 856,                      /* -flra-remat */
+  OPT_flto = 857,                            /* -flto */
+  OPT_flto_compression_level_ = 858,         /* -flto-compression-level= */
+  OPT_flto_odr_type_merging = 859,           /* -flto-odr-type-merging */
+  OPT_flto_partition_ = 860,                 /* -flto-partition= */
+  OPT_flto_report = 861,                     /* -flto-report */
+  OPT_flto_report_wpa = 862,                 /* -flto-report-wpa */
+  OPT_flto_ = 863,                           /* -flto= */
+  OPT_fltrans = 864,                         /* -fltrans */
+  OPT_fltrans_output_list_ = 865,            /* -fltrans-output-list= */
+  OPT_fmacro_prefix_map_ = 866,              /* -fmacro-prefix-map= */
+  OPT_fmain = 867,                           /* -fmain */
+  OPT_fmath_errno = 868,                     /* -fmath-errno */
+  OPT_fmax_array_constructor_ = 869,         /* -fmax-array-constructor= */
+  OPT_fmax_errors_ = 870,                    /* -fmax-errors= */
+  OPT_fmax_identifier_length_ = 871,         /* -fmax-identifier-length= */
+  OPT_fmax_stack_var_size_ = 872,            /* -fmax-stack-var-size= */
+  OPT_fmax_subrecord_length_ = 873,          /* -fmax-subrecord-length= */
+  OPT_fmem_report = 874,                     /* -fmem-report */
+  OPT_fmem_report_wpa = 875,                 /* -fmem-report-wpa */
+  OPT_fmerge_all_constants = 876,            /* -fmerge-all-constants */
+  OPT_fmerge_constants = 877,                /* -fmerge-constants */
+  OPT_fmerge_debug_strings = 878,            /* -fmerge-debug-strings */
+  OPT_fmessage_length_ = 879,                /* -fmessage-length= */
+  OPT_fmodule_file_ = 880,                   /* -fmodule-file= */
+  OPT_fmodule_private = 881,                 /* -fmodule-private */
+  OPT_fmoduleinfo = 882,                     /* -fmoduleinfo */
+  OPT_fmodulo_sched = 883,                   /* -fmodulo-sched */
+  OPT_fmodulo_sched_allow_regmoves = 884,    /* -fmodulo-sched-allow-regmoves */
+  OPT_fmove_loop_invariants = 885,           /* -fmove-loop-invariants */
+  OPT_fms_extensions = 886,                  /* -fms-extensions */
+  OPT_fmudflap = 887,                        /* -fmudflap */
+  OPT_fmudflapir = 888,                      /* -fmudflapir */
+  OPT_fmudflapth = 889,                      /* -fmudflapth */
+  OPT_fname_mangling_version_ = 890,         /* -fname-mangling-version- */
+  OPT_fnew_abi = 891,                        /* -fnew-abi */
+  OPT_fnew_inheriting_ctors = 892,           /* -fnew-inheriting-ctors */
+  OPT_fnew_ttp_matching = 893,               /* -fnew-ttp-matching */
+  OPT_fnext_runtime = 894,                   /* -fnext-runtime */
+  OPT_fnil_receivers = 895,                  /* -fnil-receivers */
+  OPT_fnon_call_exceptions = 896,            /* -fnon-call-exceptions */
+  OPT_fnonansi_builtins = 897,               /* -fnonansi-builtins */
+  OPT_fnonnull_objects = 898,                /* -fnonnull-objects */
+  OPT_fnothrow_opt = 899,                    /* -fnothrow-opt */
+  OPT_fobjc_abi_version_ = 900,              /* -fobjc-abi-version= */
+  OPT_fobjc_call_cxx_cdtors = 901,           /* -fobjc-call-cxx-cdtors */
+  OPT_fobjc_direct_dispatch = 902,           /* -fobjc-direct-dispatch */
+  OPT_fobjc_exceptions = 903,                /* -fobjc-exceptions */
+  OPT_fobjc_gc = 904,                        /* -fobjc-gc */
+  OPT_fobjc_nilcheck = 905,                  /* -fobjc-nilcheck */
+  OPT_fobjc_sjlj_exceptions = 906,           /* -fobjc-sjlj-exceptions */
+  OPT_fobjc_std_objc1 = 907,                 /* -fobjc-std=objc1 */
+  OPT_foffload_abi_ = 908,                   /* -foffload-abi= */
+  OPT_foffload_ = 909,                       /* -foffload= */
+  OPT_fomit_frame_pointer = 910,             /* -fomit-frame-pointer */
+  OPT_fonly_ = 911,                          /* -fonly= */
+  OPT_fopenacc = 912,                        /* -fopenacc */
+  OPT_fopenacc_dim_ = 913,                   /* -fopenacc-dim= */
+  OPT_fopenmp = 914,                         /* -fopenmp */
+  OPT_fopenmp_simd = 915,                    /* -fopenmp-simd */
+  OPT_foperator_names = 916,                 /* -foperator-names */
+  OPT_fopt_info = 917,                       /* -fopt-info */
+  OPT_fopt_info_ = 918,                      /* -fopt-info- */
+  /* OPT_foptimize_register_move = 919, */   /* -foptimize-register-move */
+  OPT_foptimize_sibling_calls = 920,         /* -foptimize-sibling-calls */
+  OPT_foptimize_strlen = 921,                /* -foptimize-strlen */
+  /* OPT_foptional_diags = 922, */           /* -foptional-diags */
+  OPT_fpack_derived = 923,                   /* -fpack-derived */
+  OPT_fpack_struct = 924,                    /* -fpack-struct */
+  OPT_fpack_struct_ = 925,                   /* -fpack-struct= */
+  OPT_fpad_source = 926,                     /* -fpad-source */
+  OPT_fpartial_inlining = 927,               /* -fpartial-inlining */
+  OPT_fpatchable_function_entry_ = 928,      /* -fpatchable-function-entry= */
+  OPT_fpcc_struct_return = 929,              /* -fpcc-struct-return */
+  OPT_fpch_deps = 930,                       /* -fpch-deps */
+  OPT_fpch_preprocess = 931,                 /* -fpch-preprocess */
+  OPT_fpeel_loops = 932,                     /* -fpeel-loops */
+  OPT_fpeephole = 933,                       /* -fpeephole */
+  OPT_fpeephole2 = 934,                      /* -fpeephole2 */
+  OPT_fpermissive = 935,                     /* -fpermissive */
+  OPT_fpermitted_flt_eval_methods_ = 936,    /* -fpermitted-flt-eval-methods= */
+  OPT_fpic = 937,                            /* -fpic */
+  OPT_fpie = 938,                            /* -fpie */
+  OPT_fplan9_extensions = 939,               /* -fplan9-extensions */
+  OPT_fplt = 940,                            /* -fplt */
+  OPT_fplugin_arg_ = 941,                    /* -fplugin-arg- */
+  OPT_fplugin_ = 942,                        /* -fplugin= */
+  OPT_fpost_ipa_mem_report = 943,            /* -fpost-ipa-mem-report */
+  OPT_fpostconditions = 944,                 /* -fpostconditions */
+  OPT_fpre_include_ = 945,                   /* -fpre-include= */
+  OPT_fpre_ipa_mem_report = 946,             /* -fpre-ipa-mem-report */
+  OPT_fpreconditions = 947,                  /* -fpreconditions */
+  OPT_fpredictive_commoning = 948,           /* -fpredictive-commoning */
+  OPT_fprefetch_loop_arrays = 949,           /* -fprefetch-loop-arrays */
+  OPT_fpreprocessed = 950,                   /* -fpreprocessed */
+  OPT_fpretty_templates = 951,               /* -fpretty-templates */
+  OPT_fprintf_return_value = 952,            /* -fprintf-return-value */
+  OPT_fprofile = 953,                        /* -fprofile */
+  OPT_fprofile_abs_path = 954,               /* -fprofile-abs-path */
+  OPT_fprofile_arcs = 955,                   /* -fprofile-arcs */
+  OPT_fprofile_correction = 956,             /* -fprofile-correction */
+  OPT_fprofile_dir_ = 957,                   /* -fprofile-dir= */
+  OPT_fprofile_exclude_files_ = 958,         /* -fprofile-exclude-files= */
+  OPT_fprofile_filter_files_ = 959,          /* -fprofile-filter-files= */
+  OPT_fprofile_generate = 960,               /* -fprofile-generate */
+  OPT_fprofile_generate_ = 961,              /* -fprofile-generate= */
+  OPT_fprofile_reorder_functions = 962,      /* -fprofile-reorder-functions */
+  OPT_fprofile_report = 963,                 /* -fprofile-report */
+  OPT_fprofile_update_ = 964,                /* -fprofile-update= */
+  OPT_fprofile_use = 965,                    /* -fprofile-use */
+  OPT_fprofile_use_ = 966,                   /* -fprofile-use= */
+  OPT_fprofile_values = 967,                 /* -fprofile-values */
+  OPT_fprotect_parens = 968,                 /* -fprotect-parens */
+  OPT_frandom_seed = 969,                    /* -frandom-seed */
+  OPT_frandom_seed_ = 970,                   /* -frandom-seed= */
+  OPT_frange_check = 971,                    /* -frange-check */
+  OPT_freal_4_real_10 = 972,                 /* -freal-4-real-10 */
+  OPT_freal_4_real_16 = 973,                 /* -freal-4-real-16 */
+  OPT_freal_4_real_8 = 974,                  /* -freal-4-real-8 */
+  OPT_freal_8_real_10 = 975,                 /* -freal-8-real-10 */
+  OPT_freal_8_real_16 = 976,                 /* -freal-8-real-16 */
+  OPT_freal_8_real_4 = 977,                  /* -freal-8-real-4 */
+  OPT_frealloc_lhs = 978,                    /* -frealloc-lhs */
+  OPT_freciprocal_math = 979,                /* -freciprocal-math */
+  OPT_frecord_gcc_switches = 980,            /* -frecord-gcc-switches */
+  OPT_frecord_marker_4 = 981,                /* -frecord-marker=4 */
+  OPT_frecord_marker_8 = 982,                /* -frecord-marker=8 */
+  OPT_frecursive = 983,                      /* -frecursive */
+  OPT_free = 984,                            /* -free */
+  OPT_freg_struct_return = 985,              /* -freg-struct-return */
+  /* OPT_fregmove = 986, */                  /* -fregmove */
+  OPT_frelease = 987,                        /* -frelease */
+  OPT_frename_registers = 988,               /* -frename-registers */
+  OPT_freorder_blocks = 989,                 /* -freorder-blocks */
+  OPT_freorder_blocks_algorithm_ = 990,      /* -freorder-blocks-algorithm= */
+  OPT_freorder_blocks_and_partition = 991,   /* -freorder-blocks-and-partition */
+  OPT_freorder_functions = 992,              /* -freorder-functions */
+  OPT_frepack_arrays = 993,                  /* -frepack-arrays */
+  OPT_freplace_objc_classes = 994,           /* -freplace-objc-classes */
+  OPT_frepo = 995,                           /* -frepo */
+  OPT_freport_bug = 996,                     /* -freport-bug */
+  OPT_frequire_return_statement = 997,       /* -frequire-return-statement */
+  OPT_frerun_cse_after_loop = 998,           /* -frerun-cse-after-loop */
+  /* OPT_frerun_loop_opt = 999, */           /* -frerun-loop-opt */
+  OPT_freschedule_modulo_scheduled_loops = 1000,/* -freschedule-modulo-scheduled-loops */
+  OPT_fresolution_ = 1001,                   /* -fresolution= */
+  OPT_frounding_math = 1002,                 /* -frounding-math */
+  OPT_frtti = 1003,                          /* -frtti */
+  OPT_fsanitize_address_use_after_scope = 1004,/* -fsanitize-address-use-after-scope */
+  OPT_fsanitize_coverage_ = 1005,            /* -fsanitize-coverage= */
+  OPT_fsanitize_recover = 1006,              /* -fsanitize-recover */
+  OPT_fsanitize_recover_ = 1007,             /* -fsanitize-recover= */
+  OPT_fsanitize_sections_ = 1008,            /* -fsanitize-sections= */
+  OPT_fsanitize_undefined_trap_on_error = 1009,/* -fsanitize-undefined-trap-on-error */
+  OPT_fsanitize_ = 1010,                     /* -fsanitize= */
+  OPT_fsave_optimization_record = 1011,      /* -fsave-optimization-record */
+  OPT_fsched_critical_path_heuristic = 1012, /* -fsched-critical-path-heuristic */
+  OPT_fsched_dep_count_heuristic = 1013,     /* -fsched-dep-count-heuristic */
+  OPT_fsched_group_heuristic = 1014,         /* -fsched-group-heuristic */
+  OPT_fsched_interblock = 1015,              /* -fsched-interblock */
+  OPT_fsched_last_insn_heuristic = 1016,     /* -fsched-last-insn-heuristic */
+  OPT_fsched_pressure = 1017,                /* -fsched-pressure */
+  OPT_fsched_rank_heuristic = 1018,          /* -fsched-rank-heuristic */
+  OPT_fsched_spec = 1019,                    /* -fsched-spec */
+  OPT_fsched_spec_insn_heuristic = 1020,     /* -fsched-spec-insn-heuristic */
+  OPT_fsched_spec_load = 1021,               /* -fsched-spec-load */
+  OPT_fsched_spec_load_dangerous = 1022,     /* -fsched-spec-load-dangerous */
+  OPT_fsched_stalled_insns = 1023,           /* -fsched-stalled-insns */
+  OPT_fsched_stalled_insns_dep = 1024,       /* -fsched-stalled-insns-dep */
+  OPT_fsched_stalled_insns_dep_ = 1025,      /* -fsched-stalled-insns-dep= */
+  OPT_fsched_stalled_insns_ = 1026,          /* -fsched-stalled-insns= */
+  OPT_fsched_verbose_ = 1027,                /* -fsched-verbose= */
+  OPT_fsched2_use_superblocks = 1028,        /* -fsched2-use-superblocks */
+  /* OPT_fsched2_use_traces = 1029, */       /* -fsched2-use-traces */
+  OPT_fschedule_fusion = 1030,               /* -fschedule-fusion */
+  OPT_fschedule_insns = 1031,                /* -fschedule-insns */
+  OPT_fschedule_insns2 = 1032,               /* -fschedule-insns2 */
+  OPT_fsecond_underscore = 1033,             /* -fsecond-underscore */
+  OPT_fsection_anchors = 1034,               /* -fsection-anchors */
+  /* OPT_fsee = 1035, */                     /* -fsee */
+  OPT_fsel_sched_pipelining = 1036,          /* -fsel-sched-pipelining */
+  OPT_fsel_sched_pipelining_outer_loops = 1037,/* -fsel-sched-pipelining-outer-loops */
+  OPT_fsel_sched_reschedule_pipelined = 1038,/* -fsel-sched-reschedule-pipelined */
+  OPT_fselective_scheduling = 1039,          /* -fselective-scheduling */
+  OPT_fselective_scheduling2 = 1040,         /* -fselective-scheduling2 */
+  OPT_fself_test_ = 1041,                    /* -fself-test= */
+  OPT_fsemantic_interposition = 1042,        /* -fsemantic-interposition */
+  OPT_fshort_enums = 1043,                   /* -fshort-enums */
+  OPT_fshort_wchar = 1044,                   /* -fshort-wchar */
+  OPT_fshow_column = 1045,                   /* -fshow-column */
+  OPT_fshrink_wrap = 1046,                   /* -fshrink-wrap */
+  OPT_fshrink_wrap_separate = 1047,          /* -fshrink-wrap-separate */
+  OPT_fsign_zero = 1048,                     /* -fsign-zero */
+  OPT_fsignaling_nans = 1049,                /* -fsignaling-nans */
+  OPT_fsigned_bitfields = 1050,              /* -fsigned-bitfields */
+  OPT_fsigned_char = 1051,                   /* -fsigned-char */
+  OPT_fsigned_zeros = 1052,                  /* -fsigned-zeros */
+  OPT_fsimd_cost_model_ = 1053,              /* -fsimd-cost-model= */
+  OPT_fsingle_precision_constant = 1054,     /* -fsingle-precision-constant */
+  OPT_fsized_deallocation = 1055,            /* -fsized-deallocation */
+  OPT_fsplit_ivs_in_unroller = 1056,         /* -fsplit-ivs-in-unroller */
+  OPT_fsplit_loops = 1057,                   /* -fsplit-loops */
+  OPT_fsplit_paths = 1058,                   /* -fsplit-paths */
+  OPT_fsplit_stack = 1059,                   /* -fsplit-stack */
+  OPT_fsplit_wide_types = 1060,              /* -fsplit-wide-types */
+  OPT_fsquangle = 1061,                      /* -fsquangle */
+  OPT_fssa_backprop = 1062,                  /* -fssa-backprop */
+  OPT_fssa_phiopt = 1063,                    /* -fssa-phiopt */
+  OPT_fsso_struct_ = 1064,                   /* -fsso-struct= */
+  OPT_fstack_arrays = 1065,                  /* -fstack-arrays */
+  /* OPT_fstack_check = 1066, */             /* -fstack-check */
+  OPT_fstack_check_ = 1067,                  /* -fstack-check= */
+  OPT_fstack_clash_protection = 1068,        /* -fstack-clash-protection */
+  OPT_fstack_limit = 1069,                   /* -fstack-limit */
+  OPT_fstack_limit_register_ = 1070,         /* -fstack-limit-register= */
+  OPT_fstack_limit_symbol_ = 1071,           /* -fstack-limit-symbol= */
+  OPT_fstack_protector = 1072,               /* -fstack-protector */
+  OPT_fstack_protector_all = 1073,           /* -fstack-protector-all */
+  OPT_fstack_protector_explicit = 1074,      /* -fstack-protector-explicit */
+  OPT_fstack_protector_strong = 1075,        /* -fstack-protector-strong */
+  OPT_fstack_reuse_ = 1076,                  /* -fstack-reuse= */
+  OPT_fstack_usage = 1077,                   /* -fstack-usage */
+  OPT_fstats = 1078,                         /* -fstats */
+  OPT_fstdarg_opt = 1079,                    /* -fstdarg-opt */
+  OPT_fstore_merging = 1080,                 /* -fstore-merging */
+  /* OPT_fstrength_reduce = 1081, */         /* -fstrength-reduce */
+  OPT_fstrict_aliasing = 1082,               /* -fstrict-aliasing */
+  OPT_fstrict_enums = 1083,                  /* -fstrict-enums */
+  OPT_fstrict_overflow = 1084,               /* -fstrict-overflow */
+  OPT_fstrict_prototype = 1085,              /* -fstrict-prototype */
+  OPT_fstrict_volatile_bitfields = 1086,     /* -fstrict-volatile-bitfields */
+  /* OPT_fstrong_eval_order = 1087, */       /* -fstrong-eval-order */
+  OPT_fstrong_eval_order_ = 1088,            /* -fstrong-eval-order= */
+  OPT_fswitch_errors = 1089,                 /* -fswitch-errors */
+  OPT_fsync_libcalls = 1090,                 /* -fsync-libcalls */
+  OPT_fsyntax_only = 1091,                   /* -fsyntax-only */
+  OPT_ftabstop_ = 1092,                      /* -ftabstop= */
+  /* OPT_ftarget_help = 1093, */             /* -ftarget-help */
+  OPT_ftemplate_backtrace_limit_ = 1094,     /* -ftemplate-backtrace-limit= */
+  /* OPT_ftemplate_depth_ = 1095, */         /* -ftemplate-depth- */
+  OPT_ftemplate_depth_ = 1096,               /* -ftemplate-depth= */
+  OPT_ftest_coverage = 1097,                 /* -ftest-coverage */
+  OPT_ftest_forall_temp = 1098,              /* -ftest-forall-temp */
+  OPT_fthis_is_variable = 1099,              /* -fthis-is-variable */
+  OPT_fthread_jumps = 1100,                  /* -fthread-jumps */
+  OPT_fthreadsafe_statics = 1101,            /* -fthreadsafe-statics */
+  OPT_ftime_report = 1102,                   /* -ftime-report */
+  OPT_ftime_report_details = 1103,           /* -ftime-report-details */
+  OPT_ftls_model_ = 1104,                    /* -ftls-model= */
+  OPT_ftoplevel_reorder = 1105,              /* -ftoplevel-reorder */
+  OPT_ftracer = 1106,                        /* -ftracer */
+  OPT_ftrack_macro_expansion = 1107,         /* -ftrack-macro-expansion */
+  OPT_ftrack_macro_expansion_ = 1108,        /* -ftrack-macro-expansion= */
+  OPT_ftrampolines = 1109,                   /* -ftrampolines */
+  OPT_ftransition_all = 1110,                /* -ftransition=all */
+  OPT_ftransition_checkimports = 1111,       /* -ftransition=checkimports */
+  OPT_ftransition_complex = 1112,            /* -ftransition=complex */
+  OPT_ftransition_dip1000 = 1113,            /* -ftransition=dip1000 */
+  OPT_ftransition_dip25 = 1114,              /* -ftransition=dip25 */
+  OPT_ftransition_field = 1115,              /* -ftransition=field */
+  OPT_ftransition_import = 1116,             /* -ftransition=import */
+  OPT_ftransition_nogc = 1117,               /* -ftransition=nogc */
+  OPT_ftransition_tls = 1118,                /* -ftransition=tls */
+  OPT_ftrapping_math = 1119,                 /* -ftrapping-math */
+  OPT_ftrapv = 1120,                         /* -ftrapv */
+  OPT_ftree_bit_ccp = 1121,                  /* -ftree-bit-ccp */
+  OPT_ftree_builtin_call_dce = 1122,         /* -ftree-builtin-call-dce */
+  OPT_ftree_ccp = 1123,                      /* -ftree-ccp */
+  OPT_ftree_ch = 1124,                       /* -ftree-ch */
+  /* OPT_ftree_coalesce_inlined_vars = 1125, *//* -ftree-coalesce-inlined-vars */
+  OPT_ftree_coalesce_vars = 1126,            /* -ftree-coalesce-vars */
+  OPT_ftree_copy_prop = 1127,                /* -ftree-copy-prop */
+  /* OPT_ftree_copyrename = 1128, */         /* -ftree-copyrename */
+  OPT_ftree_cselim = 1129,                   /* -ftree-cselim */
+  OPT_ftree_dce = 1130,                      /* -ftree-dce */
+  OPT_ftree_dominator_opts = 1131,           /* -ftree-dominator-opts */
+  OPT_ftree_dse = 1132,                      /* -ftree-dse */
+  OPT_ftree_forwprop = 1133,                 /* -ftree-forwprop */
+  OPT_ftree_fre = 1134,                      /* -ftree-fre */
+  OPT_ftree_loop_distribute_patterns = 1135, /* -ftree-loop-distribute-patterns */
+  OPT_ftree_loop_distribution = 1136,        /* -ftree-loop-distribution */
+  OPT_ftree_loop_if_convert = 1137,          /* -ftree-loop-if-convert */
+  /* OPT_ftree_loop_if_convert_stores = 1138, *//* -ftree-loop-if-convert-stores */
+  OPT_ftree_loop_im = 1139,                  /* -ftree-loop-im */
+  OPT_ftree_loop_ivcanon = 1140,             /* -ftree-loop-ivcanon */
+  /* OPT_ftree_loop_linear = 1141, */        /* -ftree-loop-linear */
+  OPT_ftree_loop_optimize = 1142,            /* -ftree-loop-optimize */
+  OPT_ftree_loop_vectorize = 1143,           /* -ftree-loop-vectorize */
+  OPT_ftree_lrs = 1144,                      /* -ftree-lrs */
+  OPT_ftree_parallelize_loops_ = 1145,       /* -ftree-parallelize-loops= */
+  OPT_ftree_partial_pre = 1146,              /* -ftree-partial-pre */
+  OPT_ftree_phiprop = 1147,                  /* -ftree-phiprop */
+  OPT_ftree_pre = 1148,                      /* -ftree-pre */
+  OPT_ftree_pta = 1149,                      /* -ftree-pta */
+  OPT_ftree_reassoc = 1150,                  /* -ftree-reassoc */
+  /* OPT_ftree_salias = 1151, */             /* -ftree-salias */
+  OPT_ftree_scev_cprop = 1152,               /* -ftree-scev-cprop */
+  OPT_ftree_sink = 1153,                     /* -ftree-sink */
+  OPT_ftree_slp_vectorize = 1154,            /* -ftree-slp-vectorize */
+  OPT_ftree_slsr = 1155,                     /* -ftree-slsr */
+  OPT_ftree_sra = 1156,                      /* -ftree-sra */
+  /* OPT_ftree_store_ccp = 1157, */          /* -ftree-store-ccp */
+  /* OPT_ftree_store_copy_prop = 1158, */    /* -ftree-store-copy-prop */
+  OPT_ftree_switch_conversion = 1159,        /* -ftree-switch-conversion */
+  OPT_ftree_tail_merge = 1160,               /* -ftree-tail-merge */
+  OPT_ftree_ter = 1161,                      /* -ftree-ter */
+  /* OPT_ftree_vect_loop_version = 1162, */  /* -ftree-vect-loop-version */
+  OPT_ftree_vectorize = 1163,                /* -ftree-vectorize */
+  /* OPT_ftree_vectorizer_verbose_ = 1164, *//* -ftree-vectorizer-verbose= */
+  OPT_ftree_vrp = 1165,                      /* -ftree-vrp */
+  OPT_funconstrained_commons = 1166,         /* -funconstrained-commons */
+  OPT_funderscoring = 1167,                  /* -funderscoring */
+  OPT_funit_at_a_time = 1168,                /* -funit-at-a-time */
+  OPT_funittest = 1169,                      /* -funittest */
+  OPT_funroll_all_loops = 1170,              /* -funroll-all-loops */
+  OPT_funroll_loops = 1171,                  /* -funroll-loops */
+  /* OPT_funsafe_loop_optimizations = 1172, *//* -funsafe-loop-optimizations */
+  OPT_funsafe_math_optimizations = 1173,     /* -funsafe-math-optimizations */
+  OPT_funsigned_bitfields = 1174,            /* -funsigned-bitfields */
+  OPT_funsigned_char = 1175,                 /* -funsigned-char */
+  OPT_funswitch_loops = 1176,                /* -funswitch-loops */
+  OPT_funwind_tables = 1177,                 /* -funwind-tables */
+  OPT_fuse_cxa_atexit = 1178,                /* -fuse-cxa-atexit */
+  OPT_fuse_cxa_get_exception_ptr = 1179,     /* -fuse-cxa-get-exception-ptr */
+  OPT_fuse_ld_bfd = 1180,                    /* -fuse-ld=bfd */
+  OPT_fuse_ld_gold = 1181,                   /* -fuse-ld=gold */
+  OPT_fuse_ld_lld = 1182,                    /* -fuse-ld=lld */
+  OPT_fuse_linker_plugin = 1183,             /* -fuse-linker-plugin */
+  OPT_fvar_tracking = 1184,                  /* -fvar-tracking */
+  OPT_fvar_tracking_assignments = 1185,      /* -fvar-tracking-assignments */
+  OPT_fvar_tracking_assignments_toggle = 1186,/* -fvar-tracking-assignments-toggle */
+  OPT_fvar_tracking_uninit = 1187,           /* -fvar-tracking-uninit */
+  OPT_fvariable_expansion_in_unroller = 1188,/* -fvariable-expansion-in-unroller */
+  /* OPT_fvect_cost_model = 1189, */         /* -fvect-cost-model */
+  OPT_fvect_cost_model_ = 1190,              /* -fvect-cost-model= */
+  OPT_fverbose_asm = 1191,                   /* -fverbose-asm */
+  /* OPT_fversion = 1192, */                 /* -fversion */
+  OPT_fversion_loops_for_strides = 1193,     /* -fversion-loops-for-strides */
+  OPT_fversion_ = 1194,                      /* -fversion= */
+  OPT_fvisibility_inlines_hidden = 1195,     /* -fvisibility-inlines-hidden */
+  OPT_fvisibility_ms_compat = 1196,          /* -fvisibility-ms-compat */
+  OPT_fvisibility_ = 1197,                   /* -fvisibility= */
+  OPT_fvpt = 1198,                           /* -fvpt */
+  OPT_fvtable_gc = 1199,                     /* -fvtable-gc */
+  OPT_fvtable_thunks = 1200,                 /* -fvtable-thunks */
+  OPT_fvtable_verify_ = 1201,                /* -fvtable-verify= */
+  OPT_fvtv_counts = 1202,                    /* -fvtv-counts */
+  OPT_fvtv_debug = 1203,                     /* -fvtv-debug */
+  OPT_fweak = 1204,                          /* -fweak */
+  OPT_fweb = 1205,                           /* -fweb */
+  /* OPT_fwhole_file = 1206, */              /* -fwhole-file */
+  OPT_fwhole_program = 1207,                 /* -fwhole-program */
+  OPT_fwide_exec_charset_ = 1208,            /* -fwide-exec-charset= */
+  OPT_fworking_directory = 1209,             /* -fworking-directory */
+  OPT_fwpa = 1210,                           /* -fwpa */
+  OPT_fwpa_ = 1211,                          /* -fwpa= */
+  OPT_fwrapv = 1212,                         /* -fwrapv */
+  OPT_fwrapv_pointer = 1213,                 /* -fwrapv-pointer */
+  OPT_fxref = 1214,                          /* -fxref */
+  /* OPT_fzee = 1215, */                     /* -fzee */
+  OPT_fzero_initialized_in_bss = 1216,       /* -fzero-initialized-in-bss */
+  OPT_fzero_link = 1217,                     /* -fzero-link */
+  OPT_g = 1218,                              /* -g */
+  OPT_gant = 1219,                           /* -gant */
+  OPT_gas_loc_support = 1220,                /* -gas-loc-support */
+  OPT_gas_locview_support = 1221,            /* -gas-locview-support */
+  OPT_gcoff = 1222,                          /* -gcoff */
+  OPT_gcoff1 = 1223,                         /* -gcoff1 */
+  OPT_gcoff2 = 1224,                         /* -gcoff2 */
+  OPT_gcoff3 = 1225,                         /* -gcoff3 */
+  OPT_gcolumn_info = 1226,                   /* -gcolumn-info */
+  OPT_gdescribe_dies = 1227,                 /* -gdescribe-dies */
+  OPT_gdwarf = 1228,                         /* -gdwarf */
+  OPT_gdwarf_ = 1229,                        /* -gdwarf- */
+  OPT_gen_decls = 1230,                      /* -gen-decls */
+  OPT_ggdb = 1231,                           /* -ggdb */
+  OPT_ggnu_pubnames = 1232,                  /* -ggnu-pubnames */
+  OPT_ginline_points = 1233,                 /* -ginline-points */
+  OPT_ginternal_reset_location_views = 1234, /* -ginternal-reset-location-views */
+  OPT_gnat = 1235,                           /* -gnat */
+  OPT_gnatO = 1236,                          /* -gnatO */
+  OPT_gno_ = 1237,                           /* -gno- */
+  OPT_gno_pubnames = 1238,                   /* -gno-pubnames */
+  OPT_gpubnames = 1239,                      /* -gpubnames */
+  OPT_grecord_gcc_switches = 1240,           /* -grecord-gcc-switches */
+  OPT_gsplit_dwarf = 1241,                   /* -gsplit-dwarf */
+  OPT_gstabs = 1242,                         /* -gstabs */
+  OPT_gstabs_ = 1243,                        /* -gstabs+ */
+  OPT_gstatement_frontiers = 1244,           /* -gstatement-frontiers */
+  OPT_gstrict_dwarf = 1245,                  /* -gstrict-dwarf */
+  OPT_gtoggle = 1246,                        /* -gtoggle */
+  OPT_gvariable_location_views = 1247,       /* -gvariable-location-views */
+  OPT_gvariable_location_views_incompat5 = 1248,/* -gvariable-location-views=incompat5 */
+  OPT_gvms = 1249,                           /* -gvms */
+  OPT_gxcoff = 1250,                         /* -gxcoff */
+  OPT_gxcoff_ = 1251,                        /* -gxcoff+ */
+  OPT_gz = 1252,                             /* -gz */
+  OPT_gz_ = 1253,                            /* -gz= */
+  OPT_h = 1254,                              /* -h */
+  OPT_idirafter = 1255,                      /* -idirafter */
+  OPT_imacros = 1256,                        /* -imacros */
+  OPT_imultiarch = 1257,                     /* -imultiarch */
+  OPT_imultilib = 1258,                      /* -imultilib */
+  OPT_include = 1259,                        /* -include */
+  OPT_iplugindir_ = 1260,                    /* -iplugindir= */
+  OPT_iprefix = 1261,                        /* -iprefix */
+  OPT_iquote = 1262,                         /* -iquote */
+  OPT_isysroot = 1263,                       /* -isysroot */
+  OPT_isystem = 1264,                        /* -isystem */
+  OPT_iwithprefix = 1265,                    /* -iwithprefix */
+  OPT_iwithprefixbefore = 1266,              /* -iwithprefixbefore */
+  OPT_k8 = 1267,                             /* -k8 */
+  OPT_l = 1268,                              /* -l */
+  OPT_lang_asm = 1269,                       /* -lang-asm */
+  OPT_mabi_ = 1270,                          /* -mabi= */
+  OPT_march_ = 1271,                         /* -march= */
+  OPT_mbig_endian = 1272,                    /* -mbig-endian */
+  OPT_mbranch_protection_ = 1273,            /* -mbranch-protection= */
+  OPT_mcmodel_ = 1274,                       /* -mcmodel= */
+  OPT_mcpu_ = 1275,                          /* -mcpu= */
+  OPT_mfix_cortex_a53_835769 = 1276,         /* -mfix-cortex-a53-835769 */
+  OPT_mfix_cortex_a53_843419 = 1277,         /* -mfix-cortex-a53-843419 */
+  OPT_mgeneral_regs_only = 1278,             /* -mgeneral-regs-only */
+  OPT_mlittle_endian = 1279,                 /* -mlittle-endian */
+  OPT_mlow_precision_div = 1280,             /* -mlow-precision-div */
+  OPT_mlow_precision_recip_sqrt = 1281,      /* -mlow-precision-recip-sqrt */
+  OPT_mlow_precision_sqrt = 1282,            /* -mlow-precision-sqrt */
+  OPT_momit_leaf_frame_pointer = 1283,       /* -momit-leaf-frame-pointer */
+  OPT_moverride_ = 1284,                     /* -moverride= */
+  OPT_mpc_relative_literal_loads = 1285,     /* -mpc-relative-literal-loads */
+  OPT_msign_return_address_ = 1286,          /* -msign-return-address= */
+  OPT_mstack_protector_guard_offset_ = 1287, /* -mstack-protector-guard-offset= */
+  OPT_mstack_protector_guard_reg_ = 1288,    /* -mstack-protector-guard-reg= */
+  OPT_mstack_protector_guard_ = 1289,        /* -mstack-protector-guard= */
+  OPT_mstrict_align = 1290,                  /* -mstrict-align */
+  OPT_msve_vector_bits_ = 1291,              /* -msve-vector-bits= */
+  OPT_mtls_dialect_ = 1292,                  /* -mtls-dialect= */
+  OPT_mtls_size_ = 1293,                     /* -mtls-size= */
+  OPT_mtrack_speculation = 1294,             /* -mtrack-speculation */
+  OPT_mtune_ = 1295,                         /* -mtune= */
+  OPT_mverbose_cost_dump = 1296,             /* -mverbose-cost-dump */
+  OPT_n = 1297,                              /* -n */
+  OPT_no_canonical_prefixes = 1298,          /* -no-canonical-prefixes */
+  OPT_no_integrated_cpp = 1299,              /* -no-integrated-cpp */
+  OPT_no_pie = 1300,                         /* -no-pie */
+  OPT_nocpp = 1301,                          /* -nocpp */
+  OPT_nodefaultlibs = 1302,                  /* -nodefaultlibs */
+  OPT_nolibc = 1303,                         /* -nolibc */
+  OPT_nophoboslib = 1304,                    /* -nophoboslib */
+  OPT_nostartfiles = 1305,                   /* -nostartfiles */
+  OPT_nostdinc = 1306,                       /* -nostdinc */
+  OPT_nostdinc__ = 1307,                     /* -nostdinc++ */
+  OPT_nostdlib = 1308,                       /* -nostdlib */
+  OPT_o = 1309,                              /* -o */
+  OPT_p = 1310,                              /* -p */
+  OPT_pass_exit_codes = 1311,                /* -pass-exit-codes */
+  /* OPT_pedantic = 1312, */                 /* -pedantic */
+  OPT_pedantic_errors = 1313,                /* -pedantic-errors */
+  OPT_pg = 1314,                             /* -pg */
+  OPT_pie = 1315,                            /* -pie */
+  OPT_pipe = 1316,                           /* -pipe */
+  OPT_print_file_name_ = 1317,               /* -print-file-name= */
+  OPT_print_libgcc_file_name = 1318,         /* -print-libgcc-file-name */
+  OPT_print_multi_directory = 1319,          /* -print-multi-directory */
+  OPT_print_multi_lib = 1320,                /* -print-multi-lib */
+  OPT_print_multi_os_directory = 1321,       /* -print-multi-os-directory */
+  OPT_print_multiarch = 1322,                /* -print-multiarch */
+  OPT_print_objc_runtime_info = 1323,        /* -print-objc-runtime-info */
+  OPT_print_prog_name_ = 1324,               /* -print-prog-name= */
+  OPT_print_search_dirs = 1325,              /* -print-search-dirs */
+  OPT_print_sysroot = 1326,                  /* -print-sysroot */
+  OPT_print_sysroot_headers_suffix = 1327,   /* -print-sysroot-headers-suffix */
+  OPT_quiet = 1328,                          /* -quiet */
+  OPT_r = 1329,                              /* -r */
+  OPT_remap = 1330,                          /* -remap */
+  OPT_s = 1331,                              /* -s */
+  OPT_save_temps = 1332,                     /* -save-temps */
+  OPT_save_temps_ = 1333,                    /* -save-temps= */
+  OPT_shared = 1334,                         /* -shared */
+  OPT_shared_libgcc = 1335,                  /* -shared-libgcc */
+  OPT_shared_libphobos = 1336,               /* -shared-libphobos */
+  /* OPT_specs = 1337, */                    /* -specs */
+  OPT_specs_ = 1338,                         /* -specs= */
+  OPT_static = 1339,                         /* -static */
+  OPT_static_libasan = 1340,                 /* -static-libasan */
+  OPT_static_libgcc = 1341,                  /* -static-libgcc */
+  OPT_static_libgfortran = 1342,             /* -static-libgfortran */
+  OPT_static_libgo = 1343,                   /* -static-libgo */
+  OPT_static_liblsan = 1344,                 /* -static-liblsan */
+  OPT_static_libmpx = 1345,                  /* -static-libmpx */
+  OPT_static_libmpxwrappers = 1346,          /* -static-libmpxwrappers */
+  OPT_static_libphobos = 1347,               /* -static-libphobos */
+  OPT_static_libstdc__ = 1348,               /* -static-libstdc++ */
+  OPT_static_libtsan = 1349,                 /* -static-libtsan */
+  OPT_static_libubsan = 1350,                /* -static-libubsan */
+  OPT_static_pie = 1351,                     /* -static-pie */
+  /* OPT_std_c__03 = 1352, */                /* -std=c++03 */
+  /* OPT_std_c__0x = 1353, */                /* -std=c++0x */
+  OPT_std_c__11 = 1354,                      /* -std=c++11 */
+  OPT_std_c__14 = 1355,                      /* -std=c++14 */
+  OPT_std_c__17 = 1356,                      /* -std=c++17 */
+  /* OPT_std_c__1y = 1357, */                /* -std=c++1y */
+  /* OPT_std_c__1z = 1358, */                /* -std=c++1z */
+  OPT_std_c__2a = 1359,                      /* -std=c++2a */
+  OPT_std_c__98 = 1360,                      /* -std=c++98 */
+  OPT_std_c11 = 1361,                        /* -std=c11 */
+  OPT_std_c17 = 1362,                        /* -std=c17 */
+  /* OPT_std_c18 = 1363, */                  /* -std=c18 */
+  /* OPT_std_c1x = 1364, */                  /* -std=c1x */
+  OPT_std_c2x = 1365,                        /* -std=c2x */
+  /* OPT_std_c89 = 1366, */                  /* -std=c89 */
+  OPT_std_c90 = 1367,                        /* -std=c90 */
+  OPT_std_c99 = 1368,                        /* -std=c99 */
+  /* OPT_std_c9x = 1369, */                  /* -std=c9x */
+  OPT_std_f2003 = 1370,                      /* -std=f2003 */
+  OPT_std_f2008 = 1371,                      /* -std=f2008 */
+  OPT_std_f2008ts = 1372,                    /* -std=f2008ts */
+  OPT_std_f2018 = 1373,                      /* -std=f2018 */
+  OPT_std_f95 = 1374,                        /* -std=f95 */
+  OPT_std_gnu = 1375,                        /* -std=gnu */
+  /* OPT_std_gnu__03 = 1376, */              /* -std=gnu++03 */
+  /* OPT_std_gnu__0x = 1377, */              /* -std=gnu++0x */
+  OPT_std_gnu__11 = 1378,                    /* -std=gnu++11 */
+  OPT_std_gnu__14 = 1379,                    /* -std=gnu++14 */
+  OPT_std_gnu__17 = 1380,                    /* -std=gnu++17 */
+  /* OPT_std_gnu__1y = 1381, */              /* -std=gnu++1y */
+  /* OPT_std_gnu__1z = 1382, */              /* -std=gnu++1z */
+  OPT_std_gnu__2a = 1383,                    /* -std=gnu++2a */
+  OPT_std_gnu__98 = 1384,                    /* -std=gnu++98 */
+  OPT_std_gnu11 = 1385,                      /* -std=gnu11 */
+  OPT_std_gnu17 = 1386,                      /* -std=gnu17 */
+  /* OPT_std_gnu18 = 1387, */                /* -std=gnu18 */
+  /* OPT_std_gnu1x = 1388, */                /* -std=gnu1x */
+  OPT_std_gnu2x = 1389,                      /* -std=gnu2x */
+  /* OPT_std_gnu89 = 1390, */                /* -std=gnu89 */
+  OPT_std_gnu90 = 1391,                      /* -std=gnu90 */
+  OPT_std_gnu99 = 1392,                      /* -std=gnu99 */
+  /* OPT_std_gnu9x = 1393, */                /* -std=gnu9x */
+  /* OPT_std_iso9899_1990 = 1394, */         /* -std=iso9899:1990 */
+  OPT_std_iso9899_199409 = 1395,             /* -std=iso9899:199409 */
+  /* OPT_std_iso9899_1999 = 1396, */         /* -std=iso9899:1999 */
+  /* OPT_std_iso9899_199x = 1397, */         /* -std=iso9899:199x */
+  /* OPT_std_iso9899_2011 = 1398, */         /* -std=iso9899:2011 */
+  /* OPT_std_iso9899_2017 = 1399, */         /* -std=iso9899:2017 */
+  /* OPT_std_iso9899_2018 = 1400, */         /* -std=iso9899:2018 */
+  OPT_std_legacy = 1401,                     /* -std=legacy */
+  OPT_symbolic = 1402,                       /* -symbolic */
+  OPT_t = 1403,                              /* -t */
+  OPT_time = 1404,                           /* -time */
+  OPT_time_ = 1405,                          /* -time= */
+  OPT_traditional = 1406,                    /* -traditional */
+  OPT_traditional_cpp = 1407,                /* -traditional-cpp */
+  OPT_trigraphs = 1408,                      /* -trigraphs */
+  OPT_u = 1409,                              /* -u */
+  OPT_undef = 1410,                          /* -undef */
+  OPT_v = 1411,                              /* -v */
+  OPT_version = 1412,                        /* -version */
+  OPT_w = 1413,                              /* -w */
+  OPT_wrapper = 1414,                        /* -wrapper */
+  OPT_x = 1415,                              /* -x */
+  OPT_z = 1416,                              /* -z */
+  N_OPTS,
+  OPT_SPECIAL_unknown,
+  OPT_SPECIAL_ignore,
+  OPT_SPECIAL_deprecated,
+  OPT_SPECIAL_program_name,
+  OPT_SPECIAL_input_file
+};
+
+#ifdef GCC_C_COMMON_C
+/* Mapping from cpp message reasons to the options that enable them.  */
+#include <cpplib.h>
+struct cpp_reason_option_codes_t
+{
+  /* cpplib message reason.  */
+  const enum cpp_warning_reason reason;
+  /* gcc option that controls this message.  */
+  const int option_code;
+};
+
+static const struct cpp_reason_option_codes_t cpp_reason_option_codes[] = {
+  {CPP_W_BUILTIN_MACRO_REDEFINED,           OPT_Wbuiltin_macro_redefined},
+  {CPP_W_CXX_OPERATOR_NAMES,                OPT_Wc___compat},
+  {CPP_W_CXX11_COMPAT,                      OPT_Wc__11_compat},
+  {CPP_W_C90_C99_COMPAT,                    OPT_Wc90_c99_compat},
+  {CPP_W_COMMENTS,                          OPT_Wcomment},
+  {CPP_W_WARNING_DIRECTIVE,                 OPT_Wcpp},
+  {CPP_W_DATE_TIME,                         OPT_Wdate_time},
+  {CPP_W_DEPRECATED,                        OPT_Wdeprecated},
+  {CPP_W_ENDIF_LABELS,                      OPT_Wendif_labels},
+  {CPP_W_EXPANSION_TO_DEFINED,              OPT_Wexpansion_to_defined},
+  {CPP_W_INVALID_PCH,                       OPT_Winvalid_pch},
+  {CPP_W_LITERAL_SUFFIX,                    OPT_Wliteral_suffix},
+  {CPP_W_LONG_LONG,                         OPT_Wlong_long},
+  {CPP_W_MISSING_INCLUDE_DIRS,              OPT_Wmissing_include_dirs},
+  {CPP_W_MULTICHAR,                         OPT_Wmultichar},
+  {CPP_W_NORMALIZE,                         OPT_Wnormalized_},
+  {CPP_W_PEDANTIC,                          OPT_Wpedantic},
+  {CPP_W_TRADITIONAL,                       OPT_Wtraditional},
+  {CPP_W_TRIGRAPHS,                         OPT_Wtrigraphs},
+  {CPP_W_UNDEF,                             OPT_Wundef},
+  {CPP_W_UNUSED_MACROS,                     OPT_Wunused_macros},
+  {CPP_W_VARIADIC_MACROS,                   OPT_Wvariadic_macros},
+  {CPP_W_NONE,                              0},
+};
+#endif
+
+#endif /* OPTIONS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/opts-diagnostic.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/opts-diagnostic.h
new file mode 100644
index 0000000..08110af
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/opts-diagnostic.h
@@ -0,0 +1,25 @@
+/* Command line option handling.  Interactions with diagnostics code.
+   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_OPTS_DIAGNOSTIC_H
+#define GCC_OPTS_DIAGNOSTIC_H
+
+extern char *option_name (diagnostic_context *context, int option_index,
+			  diagnostic_t orig_diag_kind, diagnostic_t diag_kind);
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/opts.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/opts.h
new file mode 100644
index 0000000..f14d9bc
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/opts.h
@@ -0,0 +1,459 @@
+/* Command line option handling.
+   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_OPTS_H
+#define GCC_OPTS_H
+
+#include "obstack.h"
+
+/* Specifies how a switch's VAR_VALUE relates to its FLAG_VAR.  */
+enum cl_var_type {
+  /* The switch is enabled when FLAG_VAR is nonzero.  */
+  CLVC_BOOLEAN,
+
+  /* The switch is enabled when FLAG_VAR == VAR_VALUE.  */
+  CLVC_EQUAL,
+
+  /* The switch is enabled when VAR_VALUE is not set in FLAG_VAR.  */
+  CLVC_BIT_CLEAR,
+
+  /* The switch is enabled when VAR_VALUE is set in FLAG_VAR.  */
+  CLVC_BIT_SET,
+
+  /* The switch is enabled when FLAG_VAR is less than HOST_WIDE_INT_M1U.  */
+  CLVC_SIZE,
+
+  /* The switch takes a string argument and FLAG_VAR points to that
+     argument.  */
+  CLVC_STRING,
+
+  /* The switch takes an enumerated argument (VAR_ENUM says what
+     enumeration) and FLAG_VAR points to that argument.  */
+  CLVC_ENUM,
+
+  /* The switch should be stored in the VEC pointed to by FLAG_VAR for
+     later processing.  */
+  CLVC_DEFER
+};
+
+struct cl_option
+{
+  /* Text of the option, including initial '-'.  */
+  const char *opt_text;
+  /* Help text for --help, or NULL.  */
+  const char *help;
+  /* Error message for missing argument, or NULL.  */
+  const char *missing_argument_error;
+  /* Warning to give when this option is used, or NULL.  */
+  const char *warn_message;
+  /* Argument of alias target when positive option given, or NULL.  */
+  const char *alias_arg;
+  /* Argument of alias target when negative option given, or NULL.  */
+  const char *neg_alias_arg;
+  /* Alias target, or N_OPTS if not an alias.  */
+  unsigned short alias_target;
+  /* Previous option that is an initial substring of this one, or
+     N_OPTS if none.  */
+  unsigned short back_chain;
+  /* Option length, not including initial '-'.  */
+  unsigned char opt_len;
+  /* Next option in a sequence marked with Negative, or -1 if none.
+     For a single option with both a negative and a positve form
+     (such as -Wall and -Wno-all), NEG_IDX is equal to the option's
+     own index (i.e., cl_options[IDX].neg_idx == IDX holds).  */
+  int neg_index;
+  /* CL_* flags for this option.  */
+  unsigned int flags;
+  /* Disabled in this configuration.  */
+  BOOL_BITFIELD cl_disabled : 1;
+  /* Options marked with CL_SEPARATE take a number of separate
+     arguments (1 to 4) that is one more than the number in this
+     bit-field.  */
+  unsigned int cl_separate_nargs : 2;
+  /* Option is an alias when used with separate argument.  */
+  BOOL_BITFIELD cl_separate_alias : 1;
+  /* Alias to negative form of option.  */
+  BOOL_BITFIELD cl_negative_alias : 1;
+  /* Option takes no argument in the driver.  */
+  BOOL_BITFIELD cl_no_driver_arg : 1;
+  /* Reject this option in the driver.  */
+  BOOL_BITFIELD cl_reject_driver : 1;
+  /* Reject no- form.  */
+  BOOL_BITFIELD cl_reject_negative : 1;
+  /* Missing argument OK (joined).  */
+  BOOL_BITFIELD cl_missing_ok : 1;
+  /* Argument is an integer >=0.  */
+  BOOL_BITFIELD cl_uinteger : 1;
+  /* Argument is a HOST_WIDE_INT.  */
+  BOOL_BITFIELD cl_host_wide_int : 1;
+  /* Argument should be converted to lowercase.  */
+  BOOL_BITFIELD cl_tolower : 1;
+  /* Report argument with -fverbose-asm  */
+  BOOL_BITFIELD cl_report : 1;
+  /* Argument is an unsigned integer with an optional byte suffix.  */
+  BOOL_BITFIELD cl_byte_size: 1;
+  /* Offset of field for this option in struct gcc_options, or
+     (unsigned short) -1 if none.  */
+  unsigned short flag_var_offset;
+  /* Index in cl_enums of enum used for this option's arguments, for
+     CLVC_ENUM options.  */
+  unsigned short var_enum;
+  /* How this option's value is determined and sets a field.  */
+  enum cl_var_type var_type;
+  /* Value or bit-mask with which to set a field.  */
+  HOST_WIDE_INT var_value;
+  /* Range info minimum, or -1.  */
+  int range_min;
+  /* Range info maximum, or -1.  */
+  int range_max;
+};
+
+/* Records that the state of an option consists of SIZE bytes starting
+   at DATA.  DATA might point to CH in some cases.  */
+struct cl_option_state {
+  const void *data;
+  size_t size;
+  char ch;
+};
+
+extern const struct cl_option cl_options[];
+extern const unsigned int cl_options_count;
+extern const char *const lang_names[];
+extern const unsigned int cl_lang_count;
+
+#define CL_PARAMS               (1U << 16) /* Fake entry.  Used to display --param info with --help.  */
+#define CL_WARNING		(1U << 17) /* Enables an (optional) warning message.  */
+#define CL_OPTIMIZATION		(1U << 18) /* Enables an (optional) optimization.  */
+#define CL_DRIVER		(1U << 19) /* Driver option.  */
+#define CL_TARGET		(1U << 20) /* Target-specific option.  */
+#define CL_COMMON		(1U << 21) /* Language-independent.  */
+
+#define CL_MIN_OPTION_CLASS	CL_PARAMS
+#define CL_MAX_OPTION_CLASS	CL_COMMON
+
+/* From here on the bits describe attributes of the options.
+   Before this point the bits have described the class of the option.
+   This distinction is important because --help will not list options
+   which only have these higher bits set.  */
+
+#define CL_JOINED		(1U << 22) /* If takes joined argument.  */
+#define CL_SEPARATE		(1U << 23) /* If takes a separate argument.  */
+#define CL_UNDOCUMENTED		(1U << 24) /* Do not output with --help.  */
+#define CL_NO_DWARF_RECORD	(1U << 25) /* Do not add to producer string.  */
+#define CL_PCH_IGNORE		(1U << 26) /* Do compare state for pch.  */
+
+/* Flags for an enumerated option argument.  */
+#define CL_ENUM_CANONICAL	(1 << 0) /* Canonical for this value.  */
+#define CL_ENUM_DRIVER_ONLY	(1 << 1) /* Only accepted in the driver.  */
+
+/* Structure describing an enumerated option argument.  */
+
+struct cl_enum_arg
+{
+  /* The argument text, or NULL at the end of the array.  */
+  const char *arg;
+
+  /* The corresponding integer value.  */
+  int value;
+
+  /* Flags associated with this argument.  */
+  unsigned int flags;
+};
+
+/* Structure describing an enumerated set of option arguments.  */
+
+struct cl_enum
+{
+  /* Help text, or NULL if the values should not be listed in --help
+     output.  */
+  const char *help;
+
+  /* Error message for unknown arguments, or NULL to use a generic
+     error.  */
+  const char *unknown_error;
+
+  /* Array of possible values.  */
+  const struct cl_enum_arg *values;
+
+  /* The size of the type used to store a value.  */
+  size_t var_size;
+
+  /* Function to set a variable of this type.  */
+  void (*set) (void *var, int value);
+
+  /* Function to get the value of a variable of this type.  */
+  int (*get) (const void *var);
+};
+
+extern const struct cl_enum cl_enums[];
+extern const unsigned int cl_enums_count;
+
+/* Possible ways in which a command-line option may be erroneous.
+   These do not include not being known at all; an option index of
+   OPT_SPECIAL_unknown is used for that.  */
+
+#define CL_ERR_DISABLED		(1 << 0) /* Disabled in this configuration.  */
+#define CL_ERR_MISSING_ARG	(1 << 1) /* Argument required but missing.  */
+#define CL_ERR_WRONG_LANG	(1 << 2) /* Option for wrong language.  */
+#define CL_ERR_UINT_ARG		(1 << 3) /* Bad unsigned integer argument.  */
+#define CL_ERR_INT_RANGE_ARG	(1 << 4) /* Bad unsigned integer argument.  */
+#define CL_ERR_ENUM_ARG		(1 << 5) /* Bad enumerated argument.  */
+#define CL_ERR_NEGATIVE		(1 << 6) /* Negative form of option
+					    not permitted (together
+					    with OPT_SPECIAL_unknown).  */
+
+/* Structure describing the result of decoding an option.  */
+
+struct cl_decoded_option
+{
+  /* The index of this option, or an OPT_SPECIAL_* value for
+     non-options and unknown options.  */
+  size_t opt_index;
+
+  /* Any warning to give for use of this option, or NULL if none.  */
+  const char *warn_message;
+
+  /* The string argument, or NULL if none.  For OPT_SPECIAL_* cases,
+     the option or non-option command-line argument.  */
+  const char *arg;
+
+  /* The original text of option plus arguments, with separate argv
+     elements concatenated into one string with spaces separating
+     them.  This is for such uses as diagnostics and
+     -frecord-gcc-switches.  */
+  const char *orig_option_with_args_text;
+
+  /* The canonical form of the option and its argument, for when it is
+     necessary to reconstruct argv elements (in particular, for
+     processing specs and passing options to subprocesses from the
+     driver).  */
+  const char *canonical_option[4];
+
+  /* The number of elements in the canonical form of the option and
+     arguments; always at least 1.  */
+  size_t canonical_option_num_elements;
+
+  /* For a boolean option, 1 for the true case and 0 for the "no-"
+     case.  For an unsigned integer option, the value of the
+     argument.  1 in all other cases.  */
+  HOST_WIDE_INT value;
+
+  /* Any flags describing errors detected in this option.  */
+  int errors;
+};
+
+/* Structure describing an option deferred for handling after the main
+   option handlers.  */
+
+struct cl_deferred_option
+{
+  /* Elements from struct cl_decoded_option used for deferred
+     options.  */
+  size_t opt_index;
+  const char *arg;
+  int value;
+};
+
+/* Structure describing a single option-handling callback.  */
+
+struct cl_option_handler_func
+{
+  /* The function called to handle the option.  */
+  bool (*handler) (struct gcc_options *opts,
+		   struct gcc_options *opts_set,
+		   const struct cl_decoded_option *decoded,
+		   unsigned int lang_mask, int kind, location_t loc,
+		   const struct cl_option_handlers *handlers,
+		   diagnostic_context *dc,
+		   void (*target_option_override_hook) (void));
+
+  /* The mask that must have some bit in common with the flags for the
+     option for this particular handler to be used.  */
+  unsigned int mask;
+};
+
+/* Structure describing the callbacks used in handling options.  */
+
+struct cl_option_handlers
+{
+  /* Callback for an unknown option to determine whether to give an
+     error for it, and possibly store information to diagnose the
+     option at a later point.  Return true if an error should be
+     given, false otherwise.  */
+  bool (*unknown_option_callback) (const struct cl_decoded_option *decoded);
+
+  /* Callback to handle, and possibly diagnose, an option for another
+     language.  */
+  void (*wrong_lang_callback) (const struct cl_decoded_option *decoded,
+			       unsigned int lang_mask);
+
+  /* Target option override hook.  */
+  void (*target_option_override_hook) (void);
+
+  /* The number of individual handlers.  */
+  size_t num_handlers;
+
+  /* The handlers themselves.  */
+  struct cl_option_handler_func handlers[3];
+};
+
+/* Hold command-line options associated with stack limitation.  */
+extern const char *opt_fstack_limit_symbol_arg;
+extern int opt_fstack_limit_register_no;
+
+/* Input file names.  */
+
+extern const char **in_fnames;
+
+/* The count of input filenames.  */
+
+extern unsigned num_in_fnames;
+
+extern char *opts_concat (const char *first, ...);
+
+/* Obstack for option strings.  */
+
+extern struct obstack opts_obstack;
+
+size_t find_opt (const char *input, unsigned int lang_mask);
+extern HOST_WIDE_INT integral_argument (const char *arg, int * = NULL, bool = false);
+extern bool enum_value_to_arg (const struct cl_enum_arg *enum_args,
+			       const char **argp, int value,
+			       unsigned int lang_mask);
+extern void decode_cmdline_options_to_array (unsigned int argc,
+					     const char **argv, 
+					     unsigned int lang_mask,
+					     struct cl_decoded_option **decoded_options,
+					     unsigned int *decoded_options_count);
+extern void init_options_once (void);
+extern void init_options_struct (struct gcc_options *opts,
+				 struct gcc_options *opts_set);
+extern void init_opts_obstack (void);
+extern void finalize_options_struct (struct gcc_options *opts);
+extern void decode_cmdline_options_to_array_default_mask (unsigned int argc,
+							  const char **argv, 
+							  struct cl_decoded_option **decoded_options,
+							  unsigned int *decoded_options_count);
+extern void set_default_handlers (struct cl_option_handlers *handlers,
+				  void (*target_option_override_hook) (void));
+extern void decode_options (struct gcc_options *opts,
+			    struct gcc_options *opts_set,
+			    struct cl_decoded_option *decoded_options,
+			    unsigned int decoded_options_count,
+			    location_t loc,
+			    diagnostic_context *dc,
+			    void (*target_option_override_hook) (void));
+extern int option_enabled (int opt_idx, void *opts);
+extern bool get_option_state (struct gcc_options *, int,
+			      struct cl_option_state *);
+extern void set_option (struct gcc_options *opts,
+			struct gcc_options *opts_set,
+			int opt_index, HOST_WIDE_INT value, const char *arg,
+			int kind, location_t loc, diagnostic_context *dc);
+extern void *option_flag_var (int opt_index, struct gcc_options *opts);
+bool handle_generated_option (struct gcc_options *opts,
+			      struct gcc_options *opts_set,
+			      size_t opt_index, const char *arg,
+			      HOST_WIDE_INT value,
+			      unsigned int lang_mask, int kind, location_t loc,
+			      const struct cl_option_handlers *handlers,
+			      bool generated_p, diagnostic_context *dc);
+void generate_option (size_t opt_index, const char *arg, HOST_WIDE_INT value,
+		      unsigned int lang_mask,
+		      struct cl_decoded_option *decoded);
+void generate_option_input_file (const char *file,
+				 struct cl_decoded_option *decoded);
+extern void read_cmdline_option (struct gcc_options *opts,
+				 struct gcc_options *opts_set,
+				 struct cl_decoded_option *decoded,
+				 location_t loc,
+				 unsigned int lang_mask,
+				 const struct cl_option_handlers *handlers,
+				 diagnostic_context *dc);
+extern void control_warning_option (unsigned int opt_index, int kind,
+				    const char *arg, bool imply, location_t loc,
+				    unsigned int lang_mask,
+				    const struct cl_option_handlers *handlers,
+				    struct gcc_options *opts,
+				    struct gcc_options *opts_set,
+				    diagnostic_context *dc);
+extern char *write_langs (unsigned int mask);
+extern void print_ignored_options (void);
+extern void handle_common_deferred_options (void);
+unsigned int parse_sanitizer_options (const char *, location_t, int,
+				      unsigned int, int, bool);
+
+unsigned int parse_no_sanitize_attribute (char *value);
+extern bool common_handle_option (struct gcc_options *opts,
+				  struct gcc_options *opts_set,
+				  const struct cl_decoded_option *decoded,
+				  unsigned int lang_mask, int kind,
+				  location_t loc,
+				  const struct cl_option_handlers *handlers,
+				  diagnostic_context *dc,
+				  void (*target_option_override_hook) (void));
+extern bool target_handle_option (struct gcc_options *opts,
+				  struct gcc_options *opts_set,
+				  const struct cl_decoded_option *decoded,
+				  unsigned int lang_mask, int kind,
+				  location_t loc,
+				  const struct cl_option_handlers *handlers,
+				  diagnostic_context *dc,
+				  void (*target_option_override_hook) (void));
+extern void finish_options (struct gcc_options *opts,
+			    struct gcc_options *opts_set,
+			    location_t loc);
+extern void default_options_optimization (struct gcc_options *opts,
+					  struct gcc_options *opts_set,
+					  struct cl_decoded_option *decoded_options,
+					  unsigned int decoded_options_count,
+					  location_t loc,
+					  unsigned int lang_mask,
+					  const struct cl_option_handlers *handlers,
+					  diagnostic_context *dc);
+extern void set_struct_debug_option (struct gcc_options *opts,
+				     location_t loc,
+				     const char *value);
+extern bool opt_enum_arg_to_value (size_t opt_index, const char *arg,
+				   int *value,
+				   unsigned int lang_mask);
+
+extern const struct sanitizer_opts_s
+{
+  const char *const name;
+  unsigned int flag;
+  size_t len;
+  bool can_recover;
+} sanitizer_opts[];
+
+extern void add_misspelling_candidates (auto_vec<char *> *candidates,
+					const struct cl_option *option,
+					const char *base_option);
+extern const char *candidates_list_and_hint (const char *arg, char *&str,
+					     const auto_vec <const char *> &
+					     candidates);
+
+
+extern bool parse_and_check_align_values (const char *flag,
+					  const char *name,
+					  auto_vec<unsigned> &result_values,
+					  bool report_error,
+					  location_t loc);
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/output.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/output.h
new file mode 100644
index 0000000..835d635
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/output.h
@@ -0,0 +1,610 @@
+/* Declarations for insn-output.c and other code to write to asm_out_file.
+   These functions are defined in final.c, and varasm.c.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_OUTPUT_H
+#define GCC_OUTPUT_H
+
+/* Initialize data in final at the beginning of a compilation.  */
+extern void init_final (const char *);
+
+/* Enable APP processing of subsequent output.
+   Used before the output from an `asm' statement.  */
+extern void app_enable (void);
+
+/* Disable APP processing of subsequent output.
+   Called from varasm.c before most kinds of output.  */
+extern void app_disable (void);
+
+/* Return the number of slots filled in the current
+   delayed branch sequence (we don't count the insn needing the
+   delay slot).   Zero if not in a delayed branch sequence.  */
+extern int dbr_sequence_length (void);
+
+/* Indicate that branch shortening hasn't yet been done.  */
+extern void init_insn_lengths (void);
+
+/* Obtain the current length of an insn.  If branch shortening has been done,
+   get its actual length.  Otherwise, get its maximum length.  */
+extern int get_attr_length (rtx_insn *);
+
+/* Obtain the current length of an insn.  If branch shortening has been done,
+   get its actual length.  Otherwise, get its minimum length.  */
+extern int get_attr_min_length (rtx_insn *);
+
+/* Make a pass over all insns and compute their actual lengths by shortening
+   any branches of variable length if possible.  */
+extern void shorten_branches (rtx_insn *);
+
+const char *get_some_local_dynamic_name ();
+
+/* Output assembler code for the start of a function,
+   and initialize some of the variables in this file
+   for the new function.  The label for the function and associated
+   assembler pseudo-ops have already been output in
+   `assemble_start_function'.  */
+extern void final_start_function (rtx_insn *, FILE *, int);
+
+/* Output assembler code for the end of a function.
+   For clarity, args are same as those of `final_start_function'
+   even though not all of them are needed.  */
+extern void final_end_function (void);
+
+/* Output assembler code for some insns: all or part of a function.  */
+extern void final (rtx_insn *, FILE *, int);
+
+/* The final scan for one insn, INSN.  Args are same as in `final', except
+   that INSN is the insn being scanned.  Value returned is the next insn to
+   be scanned.  */
+extern rtx_insn *final_scan_insn (rtx_insn *, FILE *, int, int, int *);
+
+/* Replace a SUBREG with a REG or a MEM, based on the thing it is a
+   subreg of.  */
+extern rtx alter_subreg (rtx *, bool);
+
+/* Print an operand using machine-dependent assembler syntax.  */
+extern void output_operand (rtx, int);
+
+/* Report inconsistency between the assembler template and the operands.
+   In an `asm', it's the user's fault; otherwise, the compiler's fault.  */
+extern void output_operand_lossage (const char *, ...) ATTRIBUTE_PRINTF_1;
+
+/* Output a string of assembler code, substituting insn operands.
+   Defined in final.c.  */
+extern void output_asm_insn (const char *, rtx *);
+
+/* Compute a worst-case reference address of a branch so that it
+   can be safely used in the presence of aligned labels.
+   Defined in final.c.  */
+extern int insn_current_reference_address (rtx_insn *);
+
+/* Find the alignment associated with a CODE_LABEL.
+   Defined in final.c.  */
+extern align_flags label_to_alignment (rtx);
+
+/* Output a LABEL_REF, or a bare CODE_LABEL, as an assembler symbol.  */
+extern void output_asm_label (rtx);
+
+/* Marks SYMBOL_REFs in x as referenced through use of assemble_external.  */
+extern void mark_symbol_refs_as_used (rtx);
+
+/* Print a memory reference operand for address X with access mode MODE
+   using machine-dependent assembler syntax.  */
+extern void output_address (machine_mode, rtx);
+
+/* Print an integer constant expression in assembler syntax.
+   Addition and subtraction are the only arithmetic
+   that may appear in these expressions.  */
+extern void output_addr_const (FILE *, rtx);
+
+/* Output a string of assembler code, substituting numbers, strings
+   and fixed syntactic prefixes.  */
+#if GCC_VERSION >= 3004
+#define ATTRIBUTE_ASM_FPRINTF(m, n) __attribute__ ((__format__ (__asm_fprintf__, m, n))) ATTRIBUTE_NONNULL(m)
+#else
+#define ATTRIBUTE_ASM_FPRINTF(m, n) ATTRIBUTE_NONNULL(m)
+#endif
+
+extern void fprint_whex (FILE *, unsigned HOST_WIDE_INT);
+extern void fprint_ul (FILE *, unsigned long);
+extern int sprint_ul (char *, unsigned long);
+
+extern void asm_fprintf (FILE *file, const char *p, ...)
+     ATTRIBUTE_ASM_FPRINTF(2, 3);
+
+/* Return nonzero if this function has no function calls.  */
+extern int leaf_function_p (void);
+
+/* Return 1 if branch is a forward branch.
+   Uses insn_shuid array, so it works only in the final pass.  May be used by
+   output templates to add branch prediction hints, for example.  */
+extern int final_forward_branch_p (rtx_insn *);
+
+/* Return 1 if this function uses only the registers that can be
+   safely renumbered.  */
+extern int only_leaf_regs_used (void);
+
+/* Scan IN_RTX and its subexpressions, and renumber all regs into those
+   available in leaf functions.  */
+extern void leaf_renumber_regs_insn (rtx);
+
+/* Locate the proper template for the given insn-code.  */
+extern const char *get_insn_template (int, rtx_insn *);
+
+/* Functions in varasm.c.  */
+
+/* Emit any pending weak declarations.  */
+extern void weak_finish (void);
+
+/* Decode an `asm' spec for a declaration as a register name.
+   Return the register number, or -1 if nothing specified,
+   or -2 if the ASMSPEC is not `cc' or `memory' and is not recognized,
+   or -3 if ASMSPEC is `cc' and is not recognized,
+   or -4 if ASMSPEC is `memory' and is not recognized.
+   Accept an exact spelling or a decimal number.
+   Prefixes such as % are optional.  */
+extern int decode_reg_name (const char *);
+
+/* Similar to decode_reg_name, but takes an extra parameter that is a
+   pointer to the number of (internal) registers described by the
+   external name.  */
+extern int decode_reg_name_and_count (const char *, int *);
+
+extern void do_assemble_alias (tree, tree);
+
+extern void default_assemble_visibility (tree, int);
+
+/* Output a string of literal assembler code
+   for an `asm' keyword used between functions.  */
+extern void assemble_asm (tree);
+
+/* Get the function's name from a decl, as described by its RTL.  */
+extern const char *get_fnname_from_decl (tree);
+
+/* Output assembler code for the constant pool of a function and associated
+   with defining the name of the function.  DECL describes the function.
+   NAME is the function's name.  For the constant pool, we use the current
+   constant pool data.  */
+extern void assemble_start_function (tree, const char *);
+
+/* Output assembler code associated with defining the size of the
+   function.  DECL describes the function.  NAME is the function's name.  */
+extern void assemble_end_function (tree, const char *);
+
+/* Assemble everything that is needed for a variable or function declaration.
+   Not used for automatic variables, and not used for function definitions.
+   Should not be called for variables of incomplete structure type.
+
+   TOP_LEVEL is nonzero if this variable has file scope.
+   AT_END is nonzero if this is the special handling, at end of compilation,
+   to define things that have had only tentative definitions.
+   DONT_OUTPUT_DATA if nonzero means don't actually output the
+   initial value (that will be done by the caller).  */
+extern void assemble_variable (tree, int, int, int);
+
+/* Put the vtable verification constructor initialization function
+   into the preinit array.  */
+extern void assemble_vtv_preinit_initializer (tree);
+
+/* Assemble everything that is needed for a variable declaration that has
+   no definition in the current translation unit.  */
+extern void assemble_undefined_decl (tree);
+
+/* Compute the alignment of variable specified by DECL.
+   DONT_OUTPUT_DATA is from assemble_variable.  */
+extern void align_variable (tree decl, bool dont_output_data);
+
+/* Queue for outputting something to declare an external symbol to the
+   assembler.  (Most assemblers don't need this, so we normally output
+   nothing.)  Do nothing if DECL is not external.  */
+extern void assemble_external (tree);
+
+/* Assemble code to leave SIZE bytes of zeros.  */
+extern void assemble_zeros (unsigned HOST_WIDE_INT);
+
+/* Assemble an alignment pseudo op for an ALIGN-bit boundary.  */
+extern void assemble_align (unsigned int);
+
+/* Assemble a string constant with the specified C string as contents.  */
+extern void assemble_string (const char *, int);
+
+/* Similar, for calling a library function FUN.  */
+extern void assemble_external_libcall (rtx);
+
+/* Assemble a label named NAME.  */
+extern void assemble_label (FILE *, const char *);
+
+/* Output to FILE (an assembly file) a reference to NAME.  If NAME
+   starts with a *, the rest of NAME is output verbatim.  Otherwise
+   NAME is transformed in a target-specific way (usually by the
+   addition of an underscore).  */
+extern void assemble_name_raw (FILE *, const char *);
+
+/* Like assemble_name_raw, but should be used when NAME might refer to
+   an entity that is also represented as a tree (like a function or
+   variable).  If NAME does refer to such an entity, that entity will
+   be marked as referenced.  */
+extern void assemble_name (FILE *, const char *);
+
+/* Return the assembler directive for creating a given kind of integer
+   object.  SIZE is the number of bytes in the object and ALIGNED_P
+   indicates whether it is known to be aligned.  Return NULL if the
+   assembly dialect has no such directive.
+
+   The returned string should be printed at the start of a new line and
+   be followed immediately by the object's initial value.  */
+extern const char *integer_asm_op (int, int);
+
+/* Use directive OP to assemble an integer object X.  Print OP at the
+   start of the line, followed immediately by the value of X.  */
+extern void assemble_integer_with_op (const char *, rtx);
+
+/* The default implementation of the asm_out.integer target hook.  */
+extern bool default_assemble_integer (rtx, unsigned int, int);
+
+/* Assemble the integer constant X into an object of SIZE bytes.  ALIGN is
+   the alignment of the integer in bits.  Return 1 if we were able to output
+   the constant, otherwise 0.  If FORCE is nonzero the constant must
+   be outputable. */
+extern bool assemble_integer (rtx, unsigned, unsigned, int);
+
+/* Return section for TEXT_SECITON_NAME if DECL or DECL_SECTION_NAME (DECL)
+   is NULL.  */
+extern section *get_named_text_section (tree, const char *, const char *);
+
+/* An interface to assemble_integer for the common case in which a value is
+   fully aligned and must be printed.  VALUE is the value of the integer
+   object and SIZE is the number of bytes it contains.  */
+#define assemble_aligned_integer(SIZE, VALUE) \
+  assemble_integer (VALUE, SIZE, (SIZE) * BITS_PER_UNIT, 1)
+
+/* Assemble the floating-point constant D into an object of size MODE.  ALIGN
+   is the alignment of the constant in bits.  If REVERSE is true, D is output
+   in reverse storage order.  */
+extern void assemble_real (REAL_VALUE_TYPE, scalar_float_mode, unsigned,
+			   bool = false);
+
+/* Write the address of the entity given by SYMBOL to SEC.  */
+extern void assemble_addr_to_section (rtx, section *);
+
+/* Return TRUE if and only if the constant pool has no entries.  Note
+   that even entries we might end up choosing not to emit are counted
+   here, so there is the potential for missed optimizations.  */
+extern bool constant_pool_empty_p (void);
+
+extern rtx_insn *peephole (rtx_insn *);
+
+extern void output_shared_constant_pool (void);
+
+extern void output_object_blocks (void);
+
+extern void output_quoted_string (FILE *, const char *);
+
+/* When outputting delayed branch sequences, this rtx holds the
+   sequence being output.  It is null when no delayed branch
+   sequence is being output, so it can be used as a test in the
+   insn output code.
+
+   This variable is defined  in final.c.  */
+extern rtx_sequence *final_sequence;
+
+/* File in which assembler code is being written.  */
+
+#ifdef BUFSIZ
+extern FILE *asm_out_file;
+#endif
+
+/* The first global object in the file.  */
+extern const char *first_global_object_name;
+
+/* The first weak object in the file.  */
+extern const char *weak_global_object_name;
+
+/* Nonnull if the insn currently being emitted was a COND_EXEC pattern.  */
+extern rtx current_insn_predicate;
+
+/* Last insn processed by final_scan_insn.  */
+extern rtx_insn *current_output_insn;
+
+/* Nonzero while outputting an `asm' with operands.
+   This means that inconsistencies are the user's fault, so don't die.
+   The precise value is the insn being output, to pass to error_for_asm.  */
+extern const rtx_insn *this_is_asm_operands;
+
+/* Carry information from ASM_DECLARE_OBJECT_NAME
+   to ASM_FINISH_DECLARE_OBJECT.  */
+extern int size_directive_output;
+extern tree last_assemble_variable_decl;
+
+extern bool first_function_block_is_cold;
+
+/* Decide whether DECL needs to be in a writable section.
+   RELOC is the same as for SELECT_SECTION.  */
+extern bool decl_readonly_section (const_tree, int);
+
+/* This can be used to compute RELOC for the function above, when
+   given a constant expression.  */
+extern int compute_reloc_for_constant (tree);
+
+/* User label prefix in effect for this compilation.  */
+extern const char *user_label_prefix;
+
+/* Default target function prologue and epilogue assembler output.  */
+extern void default_function_pro_epilogue (FILE *);
+
+/* Default target function switched text sections.  */
+extern void default_function_switched_text_sections (FILE *, tree, bool);
+
+/* Default target hook that outputs nothing to a stream.  */
+extern void no_asm_to_stream (FILE *);
+
+/* Flags controlling properties of a section.  */
+#define SECTION_ENTSIZE	 0x000ff	/* entity size in section */
+#define SECTION_CODE	 0x00100	/* contains code */
+#define SECTION_WRITE	 0x00200	/* data is writable */
+#define SECTION_DEBUG	 0x00400	/* contains debug data */
+#define SECTION_LINKONCE 0x00800	/* is linkonce */
+#define SECTION_SMALL	 0x01000	/* contains "small data" */
+#define SECTION_BSS	 0x02000	/* contains zeros only */
+#define SECTION_FORGET	 0x04000	/* forget that we've entered the section */
+#define SECTION_MERGE	 0x08000	/* contains mergeable data */
+#define SECTION_STRINGS  0x10000	/* contains zero terminated strings without
+					   embedded zeros */
+#define SECTION_OVERRIDE 0x20000	/* allow override of default flags */
+#define SECTION_TLS	 0x40000	/* contains thread-local storage */
+#define SECTION_NOTYPE	 0x80000	/* don't output @progbits */
+#define SECTION_DECLARED 0x100000	/* section has been used */
+#define SECTION_STYLE_MASK 0x600000	/* bits used for SECTION_STYLE */
+#define SECTION_COMMON   0x800000	/* contains common data */
+#define SECTION_RELRO	 0x1000000	/* data is readonly after relocation processing */
+#define SECTION_EXCLUDE  0x2000000	/* discarded by the linker */
+#define SECTION_MACH_DEP 0x4000000	/* subsequent bits reserved for target */
+
+/* This SECTION_STYLE is used for unnamed sections that we can switch
+   to using a special assembler directive.  */
+#define SECTION_UNNAMED	 0x000000
+
+/* This SECTION_STYLE is used for named sections that we can switch
+   to using a general section directive.  */
+#define SECTION_NAMED	 0x200000
+
+/* This SECTION_STYLE is used for sections that we cannot switch to at
+   all.  The choice of section is implied by the directive that we use
+   to declare the object.  */
+#define SECTION_NOSWITCH 0x400000
+
+/* A helper function for default_elf_select_section and
+   default_elf_unique_section.  Categorizes the DECL.  */
+
+enum section_category
+{
+  SECCAT_TEXT,
+
+  SECCAT_RODATA,
+  SECCAT_RODATA_MERGE_STR,
+  SECCAT_RODATA_MERGE_STR_INIT,
+  SECCAT_RODATA_MERGE_CONST,
+  SECCAT_SRODATA,
+
+  SECCAT_DATA,
+
+  /* To optimize loading of shared programs, define following subsections
+     of data section:
+	_REL	Contains data that has relocations, so they get grouped
+		together and dynamic linker will visit fewer pages in memory.
+	_RO	Contains data that is otherwise read-only.  This is useful
+		with prelinking as most relocations won't be dynamically
+		linked and thus stay read only.
+	_LOCAL	Marks data containing relocations only to local objects.
+		These relocations will get fully resolved by prelinking.  */
+  SECCAT_DATA_REL,
+  SECCAT_DATA_REL_LOCAL,
+  SECCAT_DATA_REL_RO,
+  SECCAT_DATA_REL_RO_LOCAL,
+
+  SECCAT_SDATA,
+  SECCAT_TDATA,
+
+  SECCAT_BSS,
+  SECCAT_SBSS,
+  SECCAT_TBSS
+};
+
+/* Information that is provided by all instances of the section type.  */
+struct GTY(()) section_common {
+  /* The set of SECTION_* flags that apply to this section.  */
+  unsigned int flags;
+};
+
+/* Information about a SECTION_NAMED section.  */
+struct GTY(()) named_section {
+  struct section_common common;
+
+  /* The name of the section.  */
+  const char *name;
+
+  /* If nonnull, the VAR_DECL or FUNCTION_DECL with which the
+     section is associated.  */
+  tree decl;
+};
+
+/* A callback that writes the assembly code for switching to an unnamed
+   section.  The argument provides callback-specific data.  */
+typedef void (*unnamed_section_callback) (const void *);
+
+/* Information about a SECTION_UNNAMED section.  */
+struct GTY(()) unnamed_section {
+  struct section_common common;
+
+  /* The callback used to switch to the section, and the data that
+     should be passed to the callback.  */
+  unnamed_section_callback GTY ((skip)) callback;
+  const void *GTY ((skip)) data;
+
+  /* The next entry in the chain of unnamed sections.  */
+  section *next;
+};
+
+/* A callback that writes the assembly code for a decl in a
+   SECTION_NOSWITCH section.  DECL is the decl that should be assembled
+   and NAME is the name of its SYMBOL_REF.  SIZE is the size of the decl
+   in bytes and ROUNDED is that size rounded up to the next
+   BIGGEST_ALIGNMENT / BITS_PER_UNIT boundary.
+
+   Return true if the callback used DECL_ALIGN to set the object's
+   alignment.  A false return value implies that we are relying
+   on the rounded size to align the decl.  */
+typedef bool (*noswitch_section_callback) (tree decl, const char *name,
+					   unsigned HOST_WIDE_INT size,
+					   unsigned HOST_WIDE_INT rounded);
+
+/* Information about a SECTION_NOSWITCH section.  */
+struct GTY(()) noswitch_section {
+  struct section_common common;
+
+  /* The callback used to assemble decls in this section.  */
+  noswitch_section_callback GTY ((skip)) callback;
+};
+
+/* Information about a section, which may be named or unnamed.  */
+union GTY ((desc ("SECTION_STYLE (&(%h))"), for_user)) section {
+  struct section_common GTY ((skip)) common;
+  struct named_section GTY ((tag ("SECTION_NAMED"))) named;
+  struct unnamed_section GTY ((tag ("SECTION_UNNAMED"))) unnamed;
+  struct noswitch_section GTY ((tag ("SECTION_NOSWITCH"))) noswitch;
+};
+
+/* Return the style of section SECT.  */
+#define SECTION_STYLE(SECT) ((SECT)->common.flags & SECTION_STYLE_MASK)
+
+struct object_block;
+
+/* Special well-known sections.  */
+extern GTY(()) section *text_section;
+extern GTY(()) section *data_section;
+extern GTY(()) section *readonly_data_section;
+extern GTY(()) section *sdata_section;
+extern GTY(()) section *ctors_section;
+extern GTY(()) section *dtors_section;
+extern GTY(()) section *bss_section;
+extern GTY(()) section *sbss_section;
+extern GTY(()) section *exception_section;
+extern GTY(()) section *eh_frame_section;
+extern GTY(()) section *tls_comm_section;
+extern GTY(()) section *comm_section;
+extern GTY(()) section *lcomm_section;
+extern GTY(()) section *bss_noswitch_section;
+
+extern GTY(()) section *in_section;
+extern GTY(()) bool in_cold_section_p;
+
+extern section *get_unnamed_section (unsigned int, void (*) (const void *),
+				     const void *);
+extern section *get_section (const char *, unsigned int, tree);
+extern section *get_named_section (tree, const char *, int);
+extern section *get_variable_section (tree, bool);
+extern void place_block_symbol (rtx);
+extern rtx get_section_anchor (struct object_block *, HOST_WIDE_INT,
+			       enum tls_model);
+extern section *mergeable_constant_section (machine_mode,
+					    unsigned HOST_WIDE_INT,
+					    unsigned int);
+extern section *function_section (tree);
+extern section *unlikely_text_section (void);
+extern section *current_function_section (void);
+extern void switch_to_other_text_partition (void);
+
+/* Return the numbered .ctors.N (if CONSTRUCTOR_P) or .dtors.N (if
+   not) section for PRIORITY.  */
+extern section *get_cdtor_priority_section (int, bool);
+
+extern bool unlikely_text_section_p (section *);
+extern void switch_to_section (section *);
+extern void output_section_asm_op (const void *);
+
+extern void record_tm_clone_pair (tree, tree);
+extern void finish_tm_clone_pairs (void);
+extern tree get_tm_clone_pair (tree);
+
+extern void default_asm_output_source_filename (FILE *, const char *);
+extern void output_file_directive (FILE *, const char *);
+
+extern unsigned int default_section_type_flags (tree, const char *, int);
+
+extern bool have_global_bss_p (void);
+extern bool bss_initializer_p (const_tree, bool = false);
+
+extern void default_no_named_section (const char *, unsigned int, tree);
+extern void default_elf_asm_named_section (const char *, unsigned int, tree);
+extern enum section_category categorize_decl_for_section (const_tree, int);
+extern void default_coff_asm_named_section (const char *, unsigned int, tree);
+extern void default_pe_asm_named_section (const char *, unsigned int, tree);
+
+extern void default_named_section_asm_out_destructor (rtx, int);
+extern void default_dtor_section_asm_out_destructor (rtx, int);
+extern void default_named_section_asm_out_constructor (rtx, int);
+extern void default_ctor_section_asm_out_constructor (rtx, int);
+
+extern section *default_select_section (tree, int, unsigned HOST_WIDE_INT);
+extern section *default_elf_select_section (tree, int, unsigned HOST_WIDE_INT);
+extern void default_unique_section (tree, int);
+extern section *default_function_rodata_section (tree);
+extern section *default_no_function_rodata_section (tree);
+extern section *default_clone_table_section (void);
+extern section *default_select_rtx_section (machine_mode, rtx,
+					    unsigned HOST_WIDE_INT);
+extern section *default_elf_select_rtx_section (machine_mode, rtx,
+						unsigned HOST_WIDE_INT);
+extern void default_encode_section_info (tree, rtx, int);
+extern const char *default_strip_name_encoding (const char *);
+extern void default_asm_output_anchor (rtx);
+extern bool default_use_anchors_for_symbol_p (const_rtx);
+extern bool default_binds_local_p (const_tree);
+extern bool default_binds_local_p_1 (const_tree, int);
+extern bool default_binds_local_p_2 (const_tree);
+extern bool default_binds_local_p_3 (const_tree, bool, bool, bool, bool);
+extern void default_globalize_label (FILE *, const char *);
+extern void default_globalize_decl_name (FILE *, tree);
+extern void default_emit_unwind_label (FILE *, tree, int, int);
+extern void default_emit_except_table_label (FILE *);
+extern void default_generate_internal_label (char *, const char *,
+					     unsigned long);
+extern void default_internal_label (FILE *, const char *, unsigned long);
+extern void default_asm_declare_constant_name (FILE *, const char *,
+					       const_tree, HOST_WIDE_INT);
+extern void default_file_start (void);
+extern void file_end_indicate_exec_stack (void);
+extern void file_end_indicate_split_stack (void);
+
+extern void default_elf_asm_output_external (FILE *file, tree,
+					     const char *);
+extern void default_elf_asm_output_limited_string (FILE *, const char *);
+extern void default_elf_asm_output_ascii (FILE *, const char *, unsigned int);
+extern void default_elf_internal_label (FILE *, const char *, unsigned long);
+
+extern void default_elf_init_array_asm_out_constructor (rtx, int);
+extern void default_elf_fini_array_asm_out_destructor (rtx, int);
+extern int maybe_assemble_visibility (tree);
+
+extern int default_address_cost (rtx, machine_mode, addr_space_t, bool);
+
+/* Output stack usage information.  */
+extern void output_stack_usage (void);
+
+#endif /* ! GCC_OUTPUT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/params-enum.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/params-enum.h
new file mode 100644
index 0000000..3433550
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/params-enum.h
@@ -0,0 +1,39 @@
+/* params-enums.h - Run-time parameter enums.
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#define DEFPARAM(ENUM, OPTION, HELP, DEFAULT, MIN, MAX)
+#define DEFPARAMENUMNAME(ENUM) ENUM ## _KIND
+#define DEFPARAMENUMVAL(ENUM, V) ENUM ## _KIND_ ## V
+#define DEFPARAMENUMTERM(ENUM) ENUM ## _KIND_ ## LAST
+#define DEFPARAMENUM5(ENUM, OPTION, HELP, DEFAULT, V0, V1, V2, V3, V4)	\
+  enum DEFPARAMENUMNAME (ENUM)					\
+  {								\
+    DEFPARAMENUMVAL (ENUM, V0),					\
+    DEFPARAMENUMVAL (ENUM, V1),					\
+    DEFPARAMENUMVAL (ENUM, V2),					\
+    DEFPARAMENUMVAL (ENUM, V3),					\
+    DEFPARAMENUMVAL (ENUM, V4),					\
+    DEFPARAMENUMTERM (ENUM)					\
+  };
+#include "params.def"
+#undef DEFPARAMENUM5
+#undef DEFPARAMENUMTERM
+#undef DEFPARAMENUMVAL
+#undef DEFPARAMENUMNAME
+#undef DEFPARAM
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/params-list.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/params-list.h
new file mode 100644
index 0000000..6c0fbc7
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/params-list.h
@@ -0,0 +1,26 @@
+/* File used to generate params.list
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#define DEFPARAM(enumerator, option, nocmsgid, default, min, max) \
+  enumerator,
+#define DEFPARAMENUM5(enumerator, option, nocmsgid, default, \
+		      v0, v1, v2, v3, v4) enumerator,
+#include "params.def"
+#undef DEFPARAM
+#undef DEFPARAMENUM5
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/params-options.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/params-options.h
new file mode 100644
index 0000000..d2cb13d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/params-options.h
@@ -0,0 +1,27 @@
+/* File used to generate params.list
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#define DEFPARAM(enumerator, option, nocmsgid, default, min, max) \
+  option=default,min,max
+#define DEFPARAMENUM5(enumerator, option, nocmsgid, default, \
+		      v0, v1, v2, v3, v4) \
+  option=v0,v1,v2,v3,v4
+#include "params.def"
+#undef DEFPARAM
+#undef DEFPARAMENUM5
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/params.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/params.def
new file mode 100644
index 0000000..3c9c5fc
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/params.def
@@ -0,0 +1,1422 @@
+/* params.def - Run-time parameters.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Written by Mark Mitchell <mark@codesourcery.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* This file contains definitions for language-independent
+   parameters.  The DEFPARAM macro takes 6 arguments:
+
+     - The enumeral corresponding to this parameter.
+
+     - The name that can be used to set this parameter using the
+       command-line option `--param <name>=<value>'.
+
+     - A help string explaining how the parameter is used.
+
+     - A default value for the parameter.
+
+     - The minimum acceptable value for the parameter.
+
+     - The maximum acceptable value for the parameter (if greater than
+     the minimum).
+
+   The DEFPARAMENUM<N> macro is similar, but instead of the minumum and maximum
+   arguments, it contains a list of <N> allowed strings, corresponding to
+   integer values 0..<N>-1.  Note that the default argument needs to be
+   specified as one of the allowed strings, rather than an integer value.
+
+   Be sure to add an entry to invoke.texi summarizing the parameter.  */
+
+/* When branch is predicted to be taken with probability lower than this
+   threshold (in percent), then it is considered well predictable. */
+DEFPARAM (PARAM_PREDICTABLE_BRANCH_OUTCOME,
+	  "predictable-branch-outcome",
+	  "Maximal estimated outcome of branch considered predictable.",
+	  2, 0, 50)
+
+DEFPARAM (PARAM_INLINE_MIN_SPEEDUP,
+	  "inline-min-speedup",
+	  "The minimal estimated speedup allowing inliner to ignore inline-insns-single and inline-insns-auto.",
+	  15, 0, 0)
+
+/* The single function inlining limit. This is the maximum size
+   of a function counted in internal gcc instructions (not in
+   real machine instructions) that is eligible for inlining
+   by the tree inliner.
+   Only functions marked inline (or methods defined in the class
+   definition for C++) are affected by this.
+   There are more restrictions to inlining: If inlined functions
+   call other functions, the already inlined instructions are
+   counted and once the recursive inline limit (see
+   "max-inline-insns" parameter) is exceeded, the acceptable size
+   gets decreased.  */
+DEFPARAM (PARAM_MAX_INLINE_INSNS_SINGLE,
+	  "max-inline-insns-single",
+	  "The maximum number of instructions in a single function eligible for inlining.",
+	  200, 0, 0)
+
+/* The single function inlining limit for functions that are
+   inlined by virtue of -finline-functions (-O3).
+   This limit should be chosen to be below or equal to the limit
+   that is applied to functions marked inlined (or defined in the
+   class declaration in C++) given by the "max-inline-insns-single"
+   parameter.
+   The default value is 30.  */
+DEFPARAM (PARAM_MAX_INLINE_INSNS_AUTO,
+	  "max-inline-insns-auto",
+	  "The maximum number of instructions when automatically inlining.",
+	  30, 0, 0)
+
+DEFPARAM (PARAM_MAX_INLINE_INSNS_SMALL,
+	  "max-inline-insns-small",
+	  "The maximum number of instructions when automatically inlining small functions.",
+	  0, 0, 0)
+
+DEFPARAM (PARAM_MAX_INLINE_INSNS_SIZE,
+	  "max-inline-insns-size",
+	  "The maximum number of instructions when inlining for size.",
+	  0, 0, 0)
+
+DEFPARAM (PARAM_UNINLINED_FUNCTION_INSNS,
+	  "uninlined-function-insns",
+	  "Instruction accounted for function prologue, epilogue and other"
+	  " overhead.",
+	  2, 0, 1000000)
+
+DEFPARAM (PARAM_UNINLINED_FUNCTION_TIME,
+	  "uninlined-function-time",
+	  "Time accounted for function prologue, epilogue and other"
+	  " overhead.",
+	  0, 0, 1000000)
+
+DEFPARAM (PARAM_UNINLINED_FUNCTION_THUNK_INSNS,
+	  "uninlined-thunk-insns",
+	  "Instruction accounted for function thunk overhead.",
+	  2, 0, 1000000)
+
+DEFPARAM (PARAM_UNINLINED_FUNCTION_THUNK_TIME,
+	  "uninlined-thunk-time",
+	  "Time accounted for function thunk overhead.",
+	  2, 0, 1000000)
+
+DEFPARAM (PARAM_MAX_INLINE_INSNS_RECURSIVE,
+	  "max-inline-insns-recursive",
+	  "The maximum number of instructions inline function can grow to via recursive inlining.",
+	  450, 0, 0)
+
+DEFPARAM (PARAM_MAX_INLINE_INSNS_RECURSIVE_AUTO,
+	  "max-inline-insns-recursive-auto",
+	  "The maximum number of instructions non-inline function can grow to via recursive inlining.",
+	  450, 0, 0)
+
+DEFPARAM (PARAM_MAX_INLINE_RECURSIVE_DEPTH,
+	  "max-inline-recursive-depth",
+	  "The maximum depth of recursive inlining for inline functions.",
+	  8, 0, 0)
+
+DEFPARAM (PARAM_MAX_INLINE_RECURSIVE_DEPTH_AUTO,
+	  "max-inline-recursive-depth-auto",
+	  "The maximum depth of recursive inlining for non-inline functions.",
+	  8, 0, 0)
+
+DEFPARAM (PARAM_MIN_INLINE_RECURSIVE_PROBABILITY,
+	  "min-inline-recursive-probability",
+	  "Inline recursively only when the probability of call being executed exceeds the parameter.",
+	  10, 0, 0)
+
+/* Limit of iterations of early inliner.  This basically bounds number of
+   nested indirect calls early inliner can resolve.  Deeper chains are still
+   handled by late inlining.  */
+DEFPARAM (PARAM_EARLY_INLINER_MAX_ITERATIONS,
+	  "max-early-inliner-iterations",
+	  "The maximum number of nested indirect inlining performed by early inliner.",
+	  1, 0, 0)
+
+/* Limit on probability of entry BB.  */
+DEFPARAM (PARAM_COMDAT_SHARING_PROBABILITY,
+	  "comdat-sharing-probability",
+	  "Probability that COMDAT function will be shared with different compilation unit.",
+	  20, 0, 0)
+
+/* Limit on probability of entry BB.  */
+DEFPARAM (PARAM_PARTIAL_INLINING_ENTRY_PROBABILITY,
+	  "partial-inlining-entry-probability",
+	  "Maximum probability of the entry BB of split region (in percent relative to entry BB of the function) to make partial inlining happen.",
+	  70, 0, 100)
+
+/* Limit the number of expansions created by the variable expansion
+   optimization to avoid register pressure.  */
+DEFPARAM (PARAM_MAX_VARIABLE_EXPANSIONS,
+	  "max-variable-expansions-in-unroller",
+	  "If -fvariable-expansion-in-unroller is used, the maximum number of times that an individual variable will be expanded during loop unrolling.",
+          1, 0, 0)
+
+/* Limit loop autovectorization to loops with large enough iteration count.  */
+DEFPARAM (PARAM_MIN_VECT_LOOP_BOUND,
+	  "min-vect-loop-bound",
+	  "If -ftree-vectorize is used, the minimal loop bound of a loop to be considered for vectorization.",
+	  0, 0, 0)
+
+/* The maximum number of instructions to consider when looking for an
+   instruction to fill a delay slot.  If more than this arbitrary
+   number of instructions is searched, the time savings from filling
+   the delay slot will be minimal so stop searching.  Increasing
+   values mean more aggressive optimization, making the compile time
+   increase with probably small improvement in executable run time.  */
+DEFPARAM (PARAM_MAX_DELAY_SLOT_INSN_SEARCH,
+	  "max-delay-slot-insn-search",
+	  "The maximum number of instructions to consider to fill a delay slot.",
+	  100, 0, 0)
+
+/* When trying to fill delay slots, the maximum number of instructions
+   to consider when searching for a block with valid live register
+   information.  Increasing this arbitrarily chosen value means more
+   aggressive optimization, increasing the compile time.  This
+   parameter should be removed when the delay slot code is rewritten
+   to maintain the control-flow graph.  */
+DEFPARAM(PARAM_MAX_DELAY_SLOT_LIVE_SEARCH,
+	 "max-delay-slot-live-search",
+	 "The maximum number of instructions to consider to find accurate live register information.",
+	 333, 0, 0)
+
+/* This parameter limits the number of branch elements that the
+   scheduler will track anti-dependencies through without resetting
+   the tracking mechanism.  Large functions with few calls or barriers
+   can generate lists containing many 1000's of dependencies.  Generally
+   the compiler either uses all available memory, or runs for far too long.  */
+DEFPARAM(PARAM_MAX_PENDING_LIST_LENGTH,
+	 "max-pending-list-length",
+	 "The maximum length of scheduling's pending operations list.",
+	 32, 0, 0)
+
+/* This parameter limits the number of backtracking attempts when using the
+   haifa scheduler for modulo scheduling.  */
+DEFPARAM(PARAM_MAX_MODULO_BACKTRACK_ATTEMPTS,
+	 "max-modulo-backtrack-attempts",
+	 "The maximum number of backtrack attempts the scheduler should make when modulo scheduling a loop.",
+	 40, 0, 0)
+
+DEFPARAM(PARAM_LARGE_FUNCTION_INSNS,
+	 "large-function-insns",
+	 "The size of function body to be considered large.",
+	 2700, 0, 0)
+DEFPARAM(PARAM_LARGE_FUNCTION_GROWTH,
+	 "large-function-growth",
+	 "Maximal growth due to inlining of large function (in percent).",
+	 100, 0, 0)
+DEFPARAM(PARAM_LARGE_UNIT_INSNS,
+	 "large-unit-insns",
+	 "The size of translation unit to be considered large.",
+	 10000, 0, 0)
+DEFPARAM(PARAM_INLINE_UNIT_GROWTH,
+	 "inline-unit-growth",
+	 "How much can given compilation unit grow because of the inlining (in percent).",
+	 40, 0, 0)
+DEFPARAM(PARAM_IPCP_UNIT_GROWTH,
+	 "ipcp-unit-growth",
+	 "How much can given compilation unit grow because of the interprocedural constant propagation (in percent).",
+	 10, 0, 0)
+DEFPARAM(PARAM_EARLY_INLINING_INSNS,
+	 "early-inlining-insns",
+	 "Maximal estimated growth of function body caused by early inlining of single call.",
+	 14, 0, 0)
+DEFPARAM(PARAM_LARGE_STACK_FRAME,
+	 "large-stack-frame",
+	 "The size of stack frame to be considered large.",
+	 256, 0, 0)
+DEFPARAM(PARAM_STACK_FRAME_GROWTH,
+	 "large-stack-frame-growth",
+	 "Maximal stack frame growth due to inlining (in percent).",
+	 1000, 0, 0)
+
+/* Keep these up to date with those in configure.ac.  */
+DEFPARAM(PARAM_STACK_CLASH_PROTECTION_GUARD_SIZE,
+	 "stack-clash-protection-guard-size",
+	 "Size of the stack guard expressed as a power of two in bytes.",
+	 12, 12, 30)
+
+DEFPARAM(PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL,
+	 "stack-clash-protection-probe-interval",
+	 "Interval in which to probe the stack expressed as a power of two in bytes.",
+	 12, 10, 16)
+
+/* The GCSE optimization will be disabled if it would require
+   significantly more memory than this value.  */
+DEFPARAM(PARAM_MAX_GCSE_MEMORY,
+	 "max-gcse-memory",
+	 "The maximum amount of memory to be allocated by GCSE.",
+	 128 * 1024 * 1024, 0, 0)
+
+/* The GCSE optimization of an expression will avoided if the ratio of
+   insertions to deletions is greater than this value.  */
+DEFPARAM(PARAM_MAX_GCSE_INSERTION_RATIO,
+	 "max-gcse-insertion-ratio",
+	 "The maximum ratio of insertions to deletions of expressions in GCSE.",
+	 20, 0, 0)
+
+/* This is the threshold ratio when to perform partial redundancy
+   elimination after reload. We perform partial redundancy elimination
+   when the following holds:
+   (Redundant load execution count)
+   ------------------------------- >= GCSE_AFTER_RELOAD_PARTIAL_FRACTION
+   (Added loads execution count)					  */
+DEFPARAM(PARAM_GCSE_AFTER_RELOAD_PARTIAL_FRACTION,
+	"gcse-after-reload-partial-fraction",
+	"The threshold ratio for performing partial redundancy elimination after reload.",
+        3, 0, 0)
+/* This is the threshold ratio of the critical edges execution count compared to
+   the redundant loads execution count that permits performing the load
+   redundancy elimination in gcse after reload.  */
+DEFPARAM(PARAM_GCSE_AFTER_RELOAD_CRITICAL_FRACTION,
+	"gcse-after-reload-critical-fraction",
+	"The threshold ratio of critical edges execution count that permit performing redundancy elimination after reload.",
+        10, 0, 0)
+
+/* GCSE will use GCSE_COST_DISTANCE_RATION as a scaling factor
+   to calculate maximum distance for which an expression is allowed to move
+   from its rtx_cost.  */
+DEFPARAM(PARAM_GCSE_COST_DISTANCE_RATIO,
+	 "gcse-cost-distance-ratio",
+	 "Scaling factor in calculation of maximum distance an expression can be moved by GCSE optimizations.",
+	 10, 0, 0)
+/* GCSE won't restrict distance for which an expression with rtx_cost greater
+   than COSTS_N_INSN(GCSE_UNRESTRICTED_COST) is allowed to move.  */
+DEFPARAM(PARAM_GCSE_UNRESTRICTED_COST,
+	 "gcse-unrestricted-cost",
+	 "Cost at which GCSE optimizations will not constraint the distance an expression can travel.",
+	 3, 0, 0)
+
+/* How deep from a given basic block the dominator tree should be searched
+   for expressions to hoist to the block.  The value of 0 will avoid limiting
+   the search.  */
+DEFPARAM(PARAM_MAX_HOIST_DEPTH,
+	 "max-hoist-depth",
+	 "Maximum depth of search in the dominator tree for expressions to hoist.",
+	 30, 0, 0)
+
+
+/* When synthesizing expnonentiation by a real constant operations using square
+   roots, this controls how deep sqrt chains we are willing to generate.  */
+DEFPARAM(PARAM_MAX_POW_SQRT_DEPTH,
+	 "max-pow-sqrt-depth",
+	 "Maximum depth of sqrt chains to use when synthesizing exponentiation by a real constant.",
+	 5, 1, 32)
+
+/* This parameter limits the number of insns in a loop that will be unrolled,
+   and by how much the loop is unrolled.
+
+   This limit should be at most half of the peeling limits:  loop unroller
+   decides to not unroll loops that iterate fewer than 2*number of allowed
+   unrollings and thus we would have loops that are neither peeled or unrolled
+   otherwise.  */
+DEFPARAM(PARAM_MAX_UNROLLED_INSNS,
+	 "max-unrolled-insns",
+	 "The maximum number of instructions to consider to unroll in a loop.",
+	 200, 0, 0)
+/* This parameter limits how many times the loop is unrolled depending
+   on number of insns really executed in each iteration.  */
+DEFPARAM(PARAM_MAX_AVERAGE_UNROLLED_INSNS,
+	 "max-average-unrolled-insns",
+	 "The maximum number of instructions to consider to unroll in a loop on average.",
+	 80, 0, 0)
+/* The maximum number of unrollings of a single loop.  */
+DEFPARAM(PARAM_MAX_UNROLL_TIMES,
+	"max-unroll-times",
+	"The maximum number of unrollings of a single loop.",
+	8, 0, 0)
+/* The maximum number of insns of a peeled loop.  */
+DEFPARAM(PARAM_MAX_PEELED_INSNS,
+	"max-peeled-insns",
+	"The maximum number of insns of a peeled loop.",
+	100, 0, 0)
+/* The maximum number of peelings of a single loop.  */
+DEFPARAM(PARAM_MAX_PEEL_TIMES,
+	"max-peel-times",
+	"The maximum number of peelings of a single loop.",
+	16, 0, 0)
+/* The maximum number of peelings of a single loop that is peeled completely.  */
+DEFPARAM(PARAM_MAX_PEEL_BRANCHES,
+	"max-peel-branches",
+	"The maximum number of branches on the path through the peeled sequence.",
+	32, 0, 0)
+/* The maximum number of insns of a peeled loop.  */
+DEFPARAM(PARAM_MAX_COMPLETELY_PEELED_INSNS,
+	"max-completely-peeled-insns",
+	"The maximum number of insns of a completely peeled loop.",
+	200, 0, 0)
+/* The maximum number of peelings of a single loop that is peeled completely.  */
+DEFPARAM(PARAM_MAX_COMPLETELY_PEEL_TIMES,
+	"max-completely-peel-times",
+	"The maximum number of peelings of a single loop that is peeled completely.",
+	16, 0, 0)
+/* The maximum number of insns of a peeled loop that rolls only once.  */
+DEFPARAM(PARAM_MAX_ONCE_PEELED_INSNS,
+	"max-once-peeled-insns",
+	"The maximum number of insns of a peeled loop that rolls only once.",
+	400, 0, 0)
+/* The maximum depth of a loop nest we completely peel.  */
+DEFPARAM(PARAM_MAX_UNROLL_ITERATIONS,
+	 "max-completely-peel-loop-nest-depth",
+	 "The maximum depth of a loop nest we completely peel.",
+	 8, 0, 0)
+
+/* The maximum number of insns of an unswitched loop.  */
+DEFPARAM(PARAM_MAX_UNSWITCH_INSNS,
+	"max-unswitch-insns",
+	"The maximum number of insns of an unswitched loop.",
+	50, 0, 0)
+/* The maximum level of recursion in unswitch_single_loop.  */
+DEFPARAM(PARAM_MAX_UNSWITCH_LEVEL,
+	"max-unswitch-level",
+	"The maximum number of unswitchings in a single loop.",
+	3, 0, 0)
+
+/* The maximum number of insns in loop header duplicated by the copy loop
+   headers pass.  */
+DEFPARAM(PARAM_MAX_LOOP_HEADER_INSNS,
+	"max-loop-header-insns",
+	"The maximum number of insns in loop header duplicated by the copy loop headers pass.",
+	20, 0, 0)
+
+/* The maximum number of iterations of a loop the brute force algorithm
+   for analysis of # of iterations of the loop tries to evaluate.  */
+DEFPARAM(PARAM_MAX_ITERATIONS_TO_TRACK,
+	"max-iterations-to-track",
+	"Bound on the number of iterations the brute force # of iterations analysis algorithm evaluates.",
+	1000, 0, 0)
+/* A cutoff to avoid costly computations of the number of iterations in
+   the doloop transformation.  */
+DEFPARAM(PARAM_MAX_ITERATIONS_COMPUTATION_COST,
+	"max-iterations-computation-cost",
+	"Bound on the cost of an expression to compute the number of iterations.",
+	10, 0, 0)
+
+/* This parameter is used to tune SMS MAX II calculations.  */
+DEFPARAM(PARAM_SMS_MAX_II_FACTOR,
+	 "sms-max-ii-factor",
+	 "A factor for tuning the upper bound that swing modulo scheduler uses for scheduling a loop.",
+	 100, 0, 0)
+/* The minimum value of stage count that swing modulo scheduler will generate.  */
+DEFPARAM(PARAM_SMS_MIN_SC,
+        "sms-min-sc",
+        "The minimum value of stage count that swing modulo scheduler will generate.",
+        2, 1, 1)
+DEFPARAM(PARAM_SMS_DFA_HISTORY,
+	 "sms-dfa-history",
+	 "The number of cycles the swing modulo scheduler considers when checking conflicts using DFA.",
+	 0, 0, 0)
+DEFPARAM(PARAM_SMS_LOOP_AVERAGE_COUNT_THRESHOLD,
+	 "sms-loop-average-count-threshold",
+	 "A threshold on the average loop count considered by the swing modulo scheduler.",
+	 0, 0, 0)
+
+DEFPARAM(HOT_BB_COUNT_FRACTION,
+	 "hot-bb-count-fraction",
+	 "Select fraction of the maximal count of repetitions of basic block in program given basic "
+	 "block needs to have to be considered hot (used in non-LTO mode).",
+	 10000, 0, 0)
+DEFPARAM(HOT_BB_COUNT_WS_PERMILLE,
+	 "hot-bb-count-ws-permille",
+         "A basic block profile count is considered hot if it contributes to "
+         "the given permillage of the entire profiled execution (used in LTO mode).",
+	 990, 0, 1000)
+DEFPARAM(HOT_BB_FREQUENCY_FRACTION,
+	 "hot-bb-frequency-fraction",
+	 "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot.",
+	 1000, 0, 0)
+
+DEFPARAM(UNLIKELY_BB_COUNT_FRACTION,
+	 "unlikely-bb-count-fraction",
+         "The minimum fraction of profile runs a given basic block execution count must be not to be considered unlikely.",
+	 20, 1, 10000)
+
+DEFPARAM (PARAM_ALIGN_THRESHOLD,
+	  "align-threshold",
+	  "Select fraction of the maximal frequency of executions of basic block in function given basic block get alignment.",
+	  100, 1, 0)
+
+DEFPARAM (PARAM_ALIGN_LOOP_ITERATIONS,
+	  "align-loop-iterations",
+	  "Loops iterating at least selected number of iterations will get "
+	  "loop alignment.", 4, 0, 0)
+
+/* For guessed profiles, the loops having unknown number of iterations
+   are predicted to iterate relatively few (10) times at average.
+   For functions containing one loop with large known number of iterations
+   and other loops having unbounded loops we would end up predicting all
+   the other loops cold that is not usually the case.  So we need to artificially
+   flatten the profile.
+
+   We need to cut the maximal predicted iterations to large enough iterations
+   so the loop appears important, but safely within maximum hotness
+   range.  */
+
+DEFPARAM(PARAM_MAX_PREDICTED_ITERATIONS,
+	 "max-predicted-iterations",
+	 "The maximum number of loop iterations we predict statically.",
+	 100, 0, 0)
+
+/* This parameter controls the probability of builtin_expect. The default
+   value is 90%. This empirical value is obtained through the weighted
+   probability of FDO counters (with the FDO count value as the weight)
+   in some real world programs:
+   (1) Google performance test benchmarks: the probability is 0.9081.
+   (2) Linux 3.3 kernel running Google search workload: the probability
+   is 0.8717.  */
+
+DEFPARAM(BUILTIN_EXPECT_PROBABILITY,
+	 "builtin-expect-probability",
+	 "Set the estimated probability in percentage for builtin expect. The default value is 90% probability.",
+	 90, 0, 100)
+DEFPARAM(BUILTIN_STRING_CMP_INLINE_LENGTH,
+	 "builtin-string-cmp-inline-length",
+	 "The maximum length of a constant string for a builtin string cmp call eligible for inlining. The default value is 3.",
+	 3, 0, 100)
+DEFPARAM(TRACER_DYNAMIC_COVERAGE_FEEDBACK,
+	 "tracer-dynamic-coverage-feedback",
+	 "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available.",
+	 95, 0, 100)
+DEFPARAM(TRACER_DYNAMIC_COVERAGE,
+	 "tracer-dynamic-coverage",
+	 "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available.",
+	 75, 0, 100)
+DEFPARAM(TRACER_MAX_CODE_GROWTH,
+	 "tracer-max-code-growth",
+	 "Maximal code growth caused by tail duplication (in percent).",
+	 100, 0, 0)
+DEFPARAM(TRACER_MIN_BRANCH_RATIO,
+	 "tracer-min-branch-ratio",
+	 "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percent).",
+	 10, 0, 100)
+DEFPARAM(TRACER_MIN_BRANCH_PROBABILITY_FEEDBACK,
+	 "tracer-min-branch-probability-feedback",
+	 "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is available.",
+	 80, 0, 100)
+DEFPARAM(TRACER_MIN_BRANCH_PROBABILITY,
+	 "tracer-min-branch-probability",
+	 "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is not available.",
+	 50, 0, 100)
+
+/* The maximum number of incoming edges to consider for crossjumping.  */
+DEFPARAM(PARAM_MAX_CROSSJUMP_EDGES,
+	 "max-crossjump-edges",
+	 "The maximum number of incoming edges to consider for crossjumping.",
+	 100, 0, 0)
+
+/* The minimum number of matching instructions to consider for crossjumping.  */
+DEFPARAM(PARAM_MIN_CROSSJUMP_INSNS,
+     "min-crossjump-insns",
+     "The minimum number of matching instructions to consider for crossjumping.",
+     5, 1, 0)
+
+/* The maximum number expansion factor when copying basic blocks.  */
+DEFPARAM(PARAM_MAX_GROW_COPY_BB_INSNS,
+     "max-grow-copy-bb-insns",
+     "The maximum expansion factor when copying basic blocks.",
+     8, 0, 0)
+
+/* The maximum number of insns to duplicate when unfactoring computed gotos.  */
+DEFPARAM(PARAM_MAX_GOTO_DUPLICATION_INSNS,
+     "max-goto-duplication-insns",
+     "The maximum number of insns to duplicate when unfactoring computed gotos.",
+     8, 0, 0)
+
+/* The maximum length of path considered in cse.  */
+DEFPARAM(PARAM_MAX_CSE_PATH_LENGTH,
+	 "max-cse-path-length",
+	 "The maximum length of path considered in cse.",
+	 10, 1, 0)
+DEFPARAM(PARAM_MAX_CSE_INSNS,
+	 "max-cse-insns",
+	 "The maximum instructions CSE process before flushing.",
+	 1000, 0, 0)
+
+/* The cost of expression in loop invariant motion that is considered
+   expensive.  */
+DEFPARAM(PARAM_LIM_EXPENSIVE,
+	 "lim-expensive",
+	 "The minimum cost of an expensive expression in the loop invariant motion.",
+	 20, 0, 0)
+
+/* Bound on number of candidates for induction variables below that
+   all candidates are considered for each use in induction variable
+   optimizations.  */
+
+DEFPARAM(PARAM_IV_CONSIDER_ALL_CANDIDATES_BOUND,
+	 "iv-consider-all-candidates-bound",
+	 "Bound on number of candidates below that all candidates are considered in iv optimizations.",
+	 40, 0, 0)
+
+/* The induction variable optimizations give up on loops that contain more
+   induction variable uses.  */
+
+DEFPARAM(PARAM_IV_MAX_CONSIDERED_USES,
+	 "iv-max-considered-uses",
+	 "Bound on number of iv uses in loop optimized in iv optimizations.",
+	 250, 0, 0)
+
+/* If there are at most this number of ivs in the set, try removing unnecessary
+   ivs from the set always.  */
+
+DEFPARAM(PARAM_IV_ALWAYS_PRUNE_CAND_SET_BOUND,
+	 "iv-always-prune-cand-set-bound",
+	 "If number of candidates in the set is smaller, we always try to remove unused ivs during its optimization.",
+	 10, 0, 0)
+
+DEFPARAM(PARAM_AVG_LOOP_NITER,
+	 "avg-loop-niter",
+	 "Average number of iterations of a loop.",
+	 10, 1, 0)
+
+DEFPARAM(PARAM_DSE_MAX_OBJECT_SIZE,
+	 "dse-max-object-size",
+	 "Maximum size (in bytes) of objects tracked bytewise by dead store elimination.",
+	 256, 0, 0)
+
+DEFPARAM(PARAM_DSE_MAX_ALIAS_QUERIES_PER_STORE,
+	 "dse-max-alias-queries-per-store",
+	 "Maximum number of queries into the alias oracle per store.",
+	 256, 0, 0)
+
+DEFPARAM(PARAM_SCEV_MAX_EXPR_SIZE,
+ 	 "scev-max-expr-size",
+	 "Bound on size of expressions used in the scalar evolutions analyzer.",
+	 100, 0, 0)
+
+DEFPARAM(PARAM_SCEV_MAX_EXPR_COMPLEXITY,
+	 "scev-max-expr-complexity",
+	 "Bound on the complexity of the expressions in the scalar evolutions analyzer.",
+	 10, 0, 0)
+
+DEFPARAM (PARAM_MAX_TREE_IF_CONVERSION_PHI_ARGS,
+	  "max-tree-if-conversion-phi-args",
+	  "Maximum number of arguments in a PHI supported by TREE if-conversion "
+	  "unless the loop is marked with simd pragma.",
+	  4, 2, 0)
+
+DEFPARAM(PARAM_VECT_MAX_VERSION_FOR_ALIGNMENT_CHECKS,
+         "vect-max-version-for-alignment-checks",
+         "Bound on number of runtime checks inserted by the vectorizer's loop versioning for alignment check.",
+         6, 0, 0)
+
+DEFPARAM(PARAM_VECT_MAX_VERSION_FOR_ALIAS_CHECKS,
+         "vect-max-version-for-alias-checks",
+         "Bound on number of runtime checks inserted by the vectorizer's loop versioning for alias check.",
+         10, 0, 0)
+
+DEFPARAM(PARAM_VECT_MAX_PEELING_FOR_ALIGNMENT,
+         "vect-max-peeling-for-alignment",
+         "Maximum number of loop peels to enhance alignment of data references in a loop.",
+         -1, -1, 64)
+
+DEFPARAM(PARAM_MAX_CSELIB_MEMORY_LOCATIONS,
+	 "max-cselib-memory-locations",
+	 "The maximum memory locations recorded by cselib.",
+	 500, 0, 0)
+
+#ifdef ENABLE_GC_ALWAYS_COLLECT
+# define GGC_MIN_EXPAND_DEFAULT 0
+# define GGC_MIN_HEAPSIZE_DEFAULT 0
+#else
+# define GGC_MIN_EXPAND_DEFAULT 30
+# define GGC_MIN_HEAPSIZE_DEFAULT 4096
+#endif
+
+DEFPARAM(GGC_MIN_EXPAND,
+	 "ggc-min-expand",
+	 "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap.",
+	 GGC_MIN_EXPAND_DEFAULT, 0, 0)
+
+DEFPARAM(GGC_MIN_HEAPSIZE,
+	 "ggc-min-heapsize",
+	 "Minimum heap size before we start collecting garbage, in kilobytes.",
+	 GGC_MIN_HEAPSIZE_DEFAULT, 0, 0)
+
+#undef GGC_MIN_EXPAND_DEFAULT
+#undef GGC_MIN_HEAPSIZE_DEFAULT
+
+DEFPARAM(PARAM_MAX_RELOAD_SEARCH_INSNS,
+	 "max-reload-search-insns",
+	 "The maximum number of instructions to search backward when looking for equivalent reload.",
+	 100, 0, 0)
+
+DEFPARAM(PARAM_SINK_FREQUENCY_THRESHOLD,
+	 "sink-frequency-threshold",
+	 "Target block's relative execution frequency (as a percentage) required to sink a statement.",
+	 75, 0, 100)
+
+DEFPARAM(PARAM_MAX_SCHED_REGION_BLOCKS,
+	 "max-sched-region-blocks",
+	 "The maximum number of blocks in a region to be considered for interblock scheduling.",
+	 10, 0, 0)
+
+DEFPARAM(PARAM_MAX_SCHED_REGION_INSNS,
+	 "max-sched-region-insns",
+	 "The maximum number of insns in a region to be considered for interblock scheduling.",
+	 100, 0, 0)
+
+DEFPARAM(PARAM_MAX_PIPELINE_REGION_BLOCKS,
+	 "max-pipeline-region-blocks",
+	 "The maximum number of blocks in a region to be considered for interblock scheduling.",
+	 15, 0, 0)
+
+DEFPARAM(PARAM_MAX_PIPELINE_REGION_INSNS,
+	 "max-pipeline-region-insns",
+	 "The maximum number of insns in a region to be considered for interblock scheduling.",
+	 200, 0, 0)
+
+DEFPARAM(PARAM_MIN_SPEC_PROB,
+         "min-spec-prob",
+         "The minimum probability of reaching a source block for interblock speculative scheduling.",
+         40, 0, 0)
+
+DEFPARAM(PARAM_MAX_SCHED_EXTEND_REGIONS_ITERS,
+         "max-sched-extend-regions-iters",
+         "The maximum number of iterations through CFG to extend regions.",
+         0, 0, 0)
+
+DEFPARAM(PARAM_MAX_SCHED_INSN_CONFLICT_DELAY,
+         "max-sched-insn-conflict-delay",
+         "The maximum conflict delay for an insn to be considered for speculative motion.",
+         3, 1, 10)
+
+DEFPARAM(PARAM_SCHED_SPEC_PROB_CUTOFF,
+         "sched-spec-prob-cutoff",
+         "The minimal probability of speculation success (in percents), so that speculative insn will be scheduled.",
+         40, 0, 100)
+
+DEFPARAM(PARAM_SCHED_STATE_EDGE_PROB_CUTOFF,
+         "sched-state-edge-prob-cutoff",
+         "The minimum probability an edge must have for the scheduler to save its state across it.",
+         10, 0, 100)
+
+DEFPARAM(PARAM_SELSCHED_MAX_LOOKAHEAD,
+         "selsched-max-lookahead",
+         "The maximum size of the lookahead window of selective scheduling.",
+         50, 0, 0)
+
+DEFPARAM(PARAM_SELSCHED_MAX_SCHED_TIMES,
+         "selsched-max-sched-times",
+         "Maximum number of times that an insn could be scheduled.",
+         2, 1, 0)
+
+DEFPARAM(PARAM_SELSCHED_INSNS_TO_RENAME,
+         "selsched-insns-to-rename",
+         "Maximum number of instructions in the ready list that are considered eligible for renaming.",
+         2, 0, 0)
+
+DEFPARAM (PARAM_SCHED_MEM_TRUE_DEP_COST,
+	  "sched-mem-true-dep-cost",
+	  "Minimal distance between possibly conflicting store and load.",
+	  1, 0, 0)
+
+DEFPARAM (PARAM_SCHED_AUTOPREF_QUEUE_DEPTH,
+	  "sched-autopref-queue-depth",
+	  "Hardware autoprefetcher scheduler model control flag.  Number of lookahead cycles the model looks into; at '0' only enable instruction sorting heuristic.  Disabled by default.",
+	  -1, 0, 0)
+
+DEFPARAM(PARAM_MAX_LAST_VALUE_RTL,
+	 "max-last-value-rtl",
+	 "The maximum number of RTL nodes that can be recorded as combiner's last value.",
+	 10000, 0, 0)
+
+DEFPARAM(PARAM_MAX_COMBINE_INSNS,
+	 "max-combine-insns",
+	 "The maximum number of insns combine tries to combine.",
+	 4, 2, 4)
+
+/* INTEGER_CST nodes are shared for values [{-1,0} .. N) for
+   {signed,unsigned} integral types.  This determines N.
+   Experimentation shows 251 to be a good value that generates the
+   least amount of garbage for allocating the TREE_VEC storage.  */
+DEFPARAM (PARAM_INTEGER_SHARE_LIMIT,
+	  "integer-share-limit",
+	  "The upper bound for sharing integer constants.",
+	  251, 2, 2)
+
+DEFPARAM (PARAM_SSP_BUFFER_SIZE,
+	  "ssp-buffer-size",
+	  "The lower bound for a buffer to be considered for stack smashing protection.",
+	  8, 1, 0)
+
+DEFPARAM (PARAM_MIN_SIZE_FOR_STACK_SHARING,
+	  "min-size-for-stack-sharing",
+	  "The minimum size of variables taking part in stack slot sharing "
+	  "when not optimizing.",
+	  32, 0, 0)
+
+/* When we thread through a block we have to make copies of the
+   statements within the block.  Clearly for large blocks the code
+   duplication is bad.
+
+   PARAM_MAX_JUMP_THREAD_DUPLICATION_STMTS specifies the maximum number
+   of statements and PHI nodes allowed in a block which is going to
+   be duplicated for thread jumping purposes.
+
+   Some simple analysis showed that more than 99% of the jump
+   threading opportunities are for blocks with less than 15
+   statements.  So we can get the benefits of jump threading
+   without excessive code bloat for pathological cases with the
+   throttle set at 15 statements.  */
+DEFPARAM (PARAM_MAX_JUMP_THREAD_DUPLICATION_STMTS,
+	  "max-jump-thread-duplication-stmts",
+          "Maximum number of statements allowed in a block that needs to be duplicated when threading jumps.",
+	  15, 0, 0)
+
+/* This is the maximum number of fields a variable may have before the pointer analysis machinery
+   will stop trying to treat it in a field-sensitive manner.
+   There are programs out there with thousands of fields per structure, and handling them
+   field-sensitively is not worth the cost.  */
+DEFPARAM (PARAM_MAX_FIELDS_FOR_FIELD_SENSITIVE,
+          "max-fields-for-field-sensitive",
+	  "Maximum number of fields in a structure before pointer analysis treats the structure as a single variable.",
+	  0, 0, 0)
+
+DEFPARAM(PARAM_MAX_SCHED_READY_INSNS,
+	 "max-sched-ready-insns",
+	 "The maximum number of instructions ready to be issued to be considered by the scheduler during the first scheduling pass.",
+	 100, 1, 0)
+
+/* This is the maximum number of active local stores RTL DSE will consider.  */
+DEFPARAM (PARAM_MAX_DSE_ACTIVE_LOCAL_STORES,
+	  "max-dse-active-local-stores",
+	  "Maximum number of active local stores in RTL dead store elimination.",
+	  5000, 0, 0)
+
+/* Prefetching and cache-optimizations related parameters.  Default values are
+   usually set by machine description.  */
+
+/* The number of insns executed before prefetch is completed.  */
+
+DEFPARAM (PARAM_PREFETCH_LATENCY,
+	 "prefetch-latency",
+	 "The number of insns executed before prefetch is completed.",
+	 200, 0, 0)
+
+/* The number of prefetches that can run at the same time.  */
+
+DEFPARAM (PARAM_SIMULTANEOUS_PREFETCHES,
+	  "simultaneous-prefetches",
+	  "The number of prefetches that can run at the same time.",
+	  3, 0, 0)
+
+/* The size of L1 cache in kB.  */
+
+DEFPARAM (PARAM_L1_CACHE_SIZE,
+	  "l1-cache-size",
+	  "The size of L1 cache.",
+	  64, 0, 0)
+
+/* The size of L1 cache line in bytes.  */
+
+DEFPARAM (PARAM_L1_CACHE_LINE_SIZE,
+	  "l1-cache-line-size",
+	  "The size of L1 cache line.",
+	  32, 0, 0)
+
+/* The size of L2 cache in kB.  */
+
+DEFPARAM (PARAM_L2_CACHE_SIZE,
+	  "l2-cache-size",
+	  "The size of L2 cache.",
+	  512, 0, 0)
+
+/* Whether software prefetch hints should be issued for non-constant
+   strides.  */
+
+DEFPARAM (PARAM_PREFETCH_DYNAMIC_STRIDES,
+	  "prefetch-dynamic-strides",
+	  "Whether software prefetch hints should be issued for non-constant "
+	  "strides.",
+	  1, 0, 1)
+
+/* The minimum constant stride beyond which we should use prefetch hints
+   for.  */
+
+DEFPARAM (PARAM_PREFETCH_MINIMUM_STRIDE,
+	  "prefetch-minimum-stride",
+	  "The minimum constant stride beyond which we should use prefetch "
+	  "hints for.",
+	  -1, 0, 0)
+
+/* Maximum number of statements in loop nest for loop interchange.  */
+
+DEFPARAM (PARAM_LOOP_INTERCHANGE_MAX_NUM_STMTS,
+	  "loop-interchange-max-num-stmts",
+	  "The maximum number of stmts in loop nest for loop interchange.",
+	  64, 0, 0)
+
+/* Minimum stride ratio for loop interchange to be profitiable.  */
+
+DEFPARAM (PARAM_LOOP_INTERCHANGE_STRIDE_RATIO,
+	  "loop-interchange-stride-ratio",
+	  "The minimum stride ratio for loop interchange to be profitable.",
+	  2, 0, 0)
+
+/* Whether we should use canonical types rather than deep "structural"
+   type checking.  Setting this value to 1 (the default) improves
+   compilation performance in the C++ and Objective-C++ front end;
+   this value should only be set to zero to work around bugs in the
+   canonical type system by disabling it.  */
+
+DEFPARAM (PARAM_USE_CANONICAL_TYPES,
+	  "use-canonical-types",
+	  "Whether to use canonical types.",
+	  1, 0, 1)
+
+DEFPARAM (PARAM_MAX_PARTIAL_ANTIC_LENGTH,
+	  "max-partial-antic-length",
+	  "Maximum length of partial antic set when performing tree pre optimization.",
+	  100, 0, 0)
+
+/* The following is used as a stop-gap limit for cases where really deep
+   loop nests cause compile-time to blow up.  If we hit this limit,
+   FRE and PRE will value-number outer loops (but the outermost) in a
+   loop nest non-optimistically.  */
+
+DEFPARAM (PARAM_RPO_VN_MAX_LOOP_DEPTH,
+	  "rpo-vn-max-loop-depth",
+	  "Maximum depth of a loop nest to fully value-number optimistically.",
+	  7, 2, 0)
+
+/* The following is used as a stop-gap limit for cases where really huge
+   functions blow up compile-time use too much.  It limits the number of
+   alias-queries we do for finding common subexpressions for memory loads and
+   stores.  The number of alias-queries is otherwise limited by the number of
+   stores on paths to function entry.  */
+
+DEFPARAM (PARAM_SCCVN_MAX_ALIAS_QUERIES_PER_ACCESS,
+	  "sccvn-max-alias-queries-per-access",
+	  "Maximum number of disambiguations to perform per memory access.",
+	  1000, 0, 0)
+
+DEFPARAM (PARAM_IRA_MAX_LOOPS_NUM,
+	  "ira-max-loops-num",
+	  "Max loops number for regional RA.",
+	  100, 0, 0)
+
+DEFPARAM (PARAM_IRA_MAX_CONFLICT_TABLE_SIZE,
+	  "ira-max-conflict-table-size",
+	  "Max size of conflict table in MB.",
+	  1000, 0, 0)
+
+DEFPARAM (PARAM_IRA_LOOP_RESERVED_REGS,
+	  "ira-loop-reserved-regs",
+	  "The number of registers in each class kept unused by loop invariant motion.",
+	  2, 0, 0)
+
+DEFPARAM (PARAM_LRA_MAX_CONSIDERED_RELOAD_PSEUDOS,
+	  "lra-max-considered-reload-pseudos",
+	  "The max number of reload pseudos which are considered during spilling a non-reload pseudo.",
+	  500, 0, 0)
+
+DEFPARAM (PARAM_LRA_INHERITANCE_EBB_PROBABILITY_CUTOFF,
+	  "lra-inheritance-ebb-probability-cutoff",
+	  "Minimal fall-through edge probability in percentage used to add BB to inheritance EBB in LRA.",
+	  40, 0, 100)
+
+/* Switch initialization conversion will refuse to create arrays that are
+   bigger than this parameter times the number of switch branches.  */
+
+DEFPARAM (PARAM_SWITCH_CONVERSION_BRANCH_RATIO,
+	  "switch-conversion-max-branch-ratio",
+	  "The maximum ratio between array size and switch branches for "
+	  "a switch conversion to take place.",
+	  8, 1, 0)
+
+/* Size of tiles when doing loop blocking.  */
+
+DEFPARAM (PARAM_LOOP_BLOCK_TILE_SIZE,
+	  "loop-block-tile-size",
+	  "Size of tiles for loop blocking.",
+	  51, 0, 0)
+
+/* Maximal number of parameters that we allow in a SCoP.  */
+
+DEFPARAM (PARAM_GRAPHITE_MAX_NB_SCOP_PARAMS,
+	  "graphite-max-nb-scop-params",
+	  "Maximum number of parameters in a SCoP.",
+	  10, 0, 0)
+
+/* Maximal number of array references in a scop.  */
+
+DEFPARAM (PARAM_GRAPHITE_MAX_ARRAYS_PER_SCOP,
+	  "graphite-max-arrays-per-scop",
+	  "Maximum number of arrays per SCoP.",
+	  100, 0, 0)
+
+DEFPARAM (PARAM_MAX_ISL_OPERATIONS,
+	  "max-isl-operations",
+	  "Maximum number of isl operations, 0 means unlimited.",
+	  350000, 0, 0)
+
+/* For testsuite purposes allow to check for codegen error handling.  */
+DEFPARAM (PARAM_GRAPHITE_ALLOW_CODEGEN_ERRORS,
+	  "graphite-allow-codegen-errors",
+	  "Whether codegen errors should be ICEs when -fchecking.",
+	  0, 0, 1)
+
+/* Avoid data dependence analysis on very large loops.  */
+DEFPARAM (PARAM_LOOP_MAX_DATAREFS_FOR_DATADEPS,
+	  "loop-max-datarefs-for-datadeps",
+	  "Maximum number of datarefs in loop for building loop data dependencies.",
+	  1000, 0, 0)
+
+/* Avoid doing loop invariant motion on very large loops.  */
+
+DEFPARAM (PARAM_LOOP_INVARIANT_MAX_BBS_IN_LOOP,
+	  "loop-invariant-max-bbs-in-loop",
+	  "Max basic blocks number in loop for loop invariant motion.",
+	  10000, 0, 0)
+
+/* When the parameter is 1, use the internal function id
+   to look up for profile data. Otherwise, use a more stable
+   external id based on assembler name and source location. */
+DEFPARAM (PARAM_PROFILE_FUNC_INTERNAL_ID,
+	  "profile-func-internal-id",
+	  "Use internal function id in profile lookup.",
+	  0, 0, 1)
+
+/* When the parameter is 1, track the most frequent N target
+   addresses in indirect-call profile. This disables
+   indirect_call_profiler_v3 which tracks single target.  */
+DEFPARAM (PARAM_INDIR_CALL_TOPN_PROFILE,
+	  "indir-call-topn-profile",
+	  "Track top N target addresses in indirect-call profile.",
+	  0, 0, 1)
+
+/* Avoid SLP vectorization of large basic blocks.  */
+DEFPARAM (PARAM_SLP_MAX_INSNS_IN_BB,
+	  "slp-max-insns-in-bb",
+	  "Maximum number of instructions in basic block to be considered for "
+	  "SLP vectorization.", 1000, 0, 0)
+
+DEFPARAM (PARAM_MIN_INSN_TO_PREFETCH_RATIO,
+	  "min-insn-to-prefetch-ratio",
+	  "Min. ratio of insns to prefetches to enable prefetching for "
+          "a loop with an unknown trip count.",
+	  9, 0, 0)
+
+DEFPARAM (PARAM_PREFETCH_MIN_INSN_TO_MEM_RATIO,
+	  "prefetch-min-insn-to-mem-ratio",
+	  "Min. ratio of insns to mem ops to enable prefetching in a loop.",
+	  3, 0, 0)
+
+/* Set maximum hash table size for var tracking.  */
+
+DEFPARAM (PARAM_MAX_VARTRACK_SIZE,
+	  "max-vartrack-size",
+	  "Max. size of var tracking hash tables.",
+	  50000000, 0, 0)
+
+/* Set maximum recursion depth for var tracking expression expansion
+   and resolution.  */
+
+DEFPARAM (PARAM_MAX_VARTRACK_EXPR_DEPTH,
+	  "max-vartrack-expr-depth",
+	  "Max. recursion depth for expanding var tracking expressions.",
+	  12, 0, 0)
+
+/* Set maximum length of value location list for which var tracking
+   should add reverse operations.  */
+
+DEFPARAM (PARAM_MAX_VARTRACK_REVERSE_OP_SIZE,
+	  "max-vartrack-reverse-op-size",
+	  "Max. size of loc list for which reverse ops should be added.",
+	  50, 0, 0)
+
+/* Set a threshold to discard debug markers (e.g. debug begin stmt
+   markers) when expanding a function to RTL, or inlining it into
+   another function.  */
+
+DEFPARAM (PARAM_MAX_DEBUG_MARKER_COUNT,
+	  "max-debug-marker-count",
+	  "Max. count of debug markers to expand or inline.",
+	  100000, 0, 0)
+
+/* Set minimum insn uid for non-debug insns.  */
+
+DEFPARAM (PARAM_MIN_NONDEBUG_INSN_UID,
+	  "min-nondebug-insn-uid",
+	  "The minimum UID to be used for a nondebug insn.",
+	  0, 0, 0)
+
+DEFPARAM (PARAM_IPA_SRA_PTR_GROWTH_FACTOR,
+	  "ipa-sra-ptr-growth-factor",
+	  "Maximum allowed growth of number and total size of new parameters "
+	  "that ipa-sra replaces a pointer to an aggregate with.",
+	  2, 0, 0)
+
+DEFPARAM (PARAM_TM_MAX_AGGREGATE_SIZE,
+	  "tm-max-aggregate-size",
+	  "Size in bytes after which thread-local aggregates should be "
+	  "instrumented with the logging functions instead of save/restore "
+	  "pairs.",
+	  9, 0, 0)
+
+DEFPARAM (PARAM_SRA_MAX_SCALARIZATION_SIZE_SPEED,
+	  "sra-max-scalarization-size-Ospeed",
+	  "Maximum size, in storage units, of an aggregate which should be "
+	  "considered for scalarization when compiling for speed.",
+	  0, 0, 0)
+
+DEFPARAM (PARAM_SRA_MAX_SCALARIZATION_SIZE_SIZE,
+	  "sra-max-scalarization-size-Osize",
+	  "Maximum size, in storage units, of an aggregate which should be "
+	  "considered for scalarization when compiling for size.",
+	  0, 0, 0)
+
+DEFPARAM (PARAM_IPA_CP_VALUE_LIST_SIZE,
+	  "ipa-cp-value-list-size",
+	  "Maximum size of a list of values associated with each parameter for "
+	  "interprocedural constant propagation.",
+	  8, 0, 0)
+
+DEFPARAM (PARAM_IPA_CP_EVAL_THRESHOLD,
+	  "ipa-cp-eval-threshold",
+	  "Threshold ipa-cp opportunity evaluation that is still considered "
+	  "beneficial to clone.",
+	  500, 0, 0)
+
+DEFPARAM (PARAM_IPA_CP_RECURSION_PENALTY,
+	  "ipa-cp-recursion-penalty",
+	  "Percentage penalty the recursive functions will receive when they "
+	  "are evaluated for cloning.",
+	  40, 0, 100)
+
+DEFPARAM (PARAM_IPA_CP_SINGLE_CALL_PENALTY,
+	  "ipa-cp-single-call-penalty",
+	  "Percentage penalty functions containing a single call to another "
+	  "function will receive when they are evaluated for cloning.",
+	  15, 0, 100)
+
+DEFPARAM (PARAM_IPA_MAX_AGG_ITEMS,
+	  "ipa-max-agg-items",
+	  "Maximum number of aggregate content items for a parameter in "
+	  "jump functions and lattices.",
+	  16, 0, 0)
+
+DEFPARAM (PARAM_IPA_CP_LOOP_HINT_BONUS,
+	  "ipa-cp-loop-hint-bonus",
+	  "Compile-time bonus IPA-CP assigns to candidates which make loop "
+	  "bounds or strides known.",
+	  64, 0, 0)
+
+DEFPARAM (PARAM_IPA_CP_ARRAY_INDEX_HINT_BONUS,
+	  "ipa-cp-array-index-hint-bonus",
+	  "Compile-time bonus IPA-CP assigns to candidates which make an array "
+	  "index known.",
+	  48, 0, 0)
+
+DEFPARAM (PARAM_IPA_MAX_AA_STEPS,
+	  "ipa-max-aa-steps",
+	  "Maximum number of statements that will be visited by IPA formal "
+	  "parameter analysis based on alias analysis in any given function.",
+	  25000, 0, 0)
+
+/* WHOPR partitioning configuration.  */
+
+DEFPARAM (PARAM_LTO_PARTITIONS,
+	  "lto-partitions",
+	  "Number of partitions the program should be split to.",
+	  128, 1, 0)
+
+DEFPARAM (MIN_PARTITION_SIZE,
+	  "lto-min-partition",
+	  "Minimal size of a partition for LTO (in estimated instructions).",
+	  10000, 0, 0)
+
+DEFPARAM (MAX_PARTITION_SIZE,
+	  "lto-max-partition",
+	  "Maximal size of a partition for LTO (in estimated instructions).",
+	  1000000, 0, INT_MAX)
+
+DEFPARAM (PARAM_MAX_LTO_STREAMING_PARALLELISM,
+	  "lto-max-streaming-parallelism",
+	  "maximal number of LTO partitions streamed in parallel.",
+	  32, 1, 0)
+
+/* Diagnostic parameters.  */
+
+DEFPARAM (CXX_MAX_NAMESPACES_FOR_DIAGNOSTIC_HELP,
+	  "cxx-max-namespaces-for-diagnostic-help",
+	  "Maximum number of namespaces to search for alternatives when "
+	  "name lookup fails.",
+	  1000, 0, 0)
+
+/* Maximum number of conditional store pairs that can be sunk.  */
+DEFPARAM (PARAM_MAX_STORES_TO_SINK,
+          "max-stores-to-sink",
+          "Maximum number of conditional store pairs that can be sunk.",
+          2, 0, 0)
+
+/* Override CASE_VALUES_THRESHOLD of when to switch from doing switch
+   statements via if statements to using a table jump operation.  If the value
+   is 0, the default CASE_VALUES_THRESHOLD will be used.  */
+DEFPARAM (PARAM_CASE_VALUES_THRESHOLD,
+          "case-values-threshold",
+          "The smallest number of different values for which it is best to "
+	  "use a jump-table instead of a tree of conditional branches, "
+	  "if 0, use the default for the machine.",
+          0, 0, 0)
+
+/* Data race flags for C++0x memory model compliance.  */
+DEFPARAM (PARAM_ALLOW_STORE_DATA_RACES,
+	  "allow-store-data-races",
+	  "Allow new data races on stores to be introduced.",
+	  0, 0, 1)
+
+/* Reassociation width to be used by tree reassoc optimization.  */
+DEFPARAM (PARAM_TREE_REASSOC_WIDTH,
+	  "tree-reassoc-width",
+	  "Set the maximum number of instructions executed in parallel in "
+	  "reassociated tree.  If 0, use the target dependent heuristic.",
+	  0, 0, 0)
+
+DEFPARAM (PARAM_MAX_TAIL_MERGE_COMPARISONS,
+          "max-tail-merge-comparisons",
+          "Maximum amount of similar bbs to compare a bb with.",
+          10, 0, 0)
+
+DEFPARAM (PARAM_STORE_MERGING_ALLOW_UNALIGNED,
+	  "store-merging-allow-unaligned",
+	  "Allow the store merging pass to introduce unaligned stores "
+	  "if it is legal to do so.",
+	  1, 0, 1)
+
+DEFPARAM (PARAM_MAX_STORES_TO_MERGE,
+	  "max-stores-to-merge",
+	  "Maximum number of constant stores to merge in the "
+	  "store merging pass.",
+	  64, 2, 0)
+
+DEFPARAM (PARAM_MAX_TAIL_MERGE_ITERATIONS,
+          "max-tail-merge-iterations",
+          "Maximum amount of iterations of the pass over a function.",
+          2, 0, 0)
+
+/* Maximum number of strings for which strlen optimization pass will
+   track string lenths.  */
+DEFPARAM (PARAM_MAX_TRACKED_STRLENS,
+	  "max-tracked-strlens",
+	  "Maximum number of strings for which strlen optimization pass will "
+	  "track string lengths.",
+	  10000, 0, 0)
+
+/* Keep this in sync with the sched_pressure_algorithm enum.  */
+DEFPARAM (PARAM_SCHED_PRESSURE_ALGORITHM,
+	  "sched-pressure-algorithm",
+	  "Which -fsched-pressure algorithm to apply.",
+	  1, 1, 2)
+
+/* Maximum length of candidate scans in straight-line strength reduction.  */
+DEFPARAM (PARAM_MAX_SLSR_CANDIDATE_SCAN,
+	  "max-slsr-cand-scan",
+	  "Maximum length of candidate scans for straight-line "
+	  "strength reduction.",
+	  50, 1, 999999)
+
+/* ASan stands for AddressSanitizer: https://github.com/google/sanitizers.  */
+
+DEFPARAM (PARAM_ASAN_STACK,
+         "asan-stack",
+         "Enable asan stack protection.",
+         1, 0, 1)
+
+DEFPARAM (PARAM_ASAN_PROTECT_ALLOCAS,
+	"asan-instrument-allocas",
+	"Enable asan allocas/VLAs protection.",
+	1, 0, 1)
+
+DEFPARAM (PARAM_ASAN_GLOBALS,
+         "asan-globals",
+         "Enable asan globals protection.",
+         1, 0, 1)
+
+DEFPARAM (PARAM_ASAN_INSTRUMENT_WRITES,
+         "asan-instrument-writes",
+         "Enable asan store operations protection.",
+         1, 0, 1)
+
+DEFPARAM (PARAM_ASAN_INSTRUMENT_READS,
+         "asan-instrument-reads",
+         "Enable asan load operations protection.",
+         1, 0, 1)
+
+DEFPARAM (PARAM_ASAN_MEMINTRIN,
+         "asan-memintrin",
+         "Enable asan builtin functions protection.",
+         1, 0, 1)
+
+DEFPARAM (PARAM_ASAN_USE_AFTER_RETURN,
+         "asan-use-after-return",
+         "Enable asan detection of use-after-return bugs.",
+         1, 0, 1)
+
+DEFPARAM (PARAM_ASAN_INSTRUMENTATION_WITH_CALL_THRESHOLD,
+         "asan-instrumentation-with-call-threshold",
+         "Use callbacks instead of inline code if number of accesses "
+         "in function becomes greater or equal to this number.",
+         7000, 0, INT_MAX)
+
+DEFPARAM (PARAM_USE_AFTER_SCOPE_DIRECT_EMISSION_THRESHOLD,
+	 "use-after-scope-direct-emission-threshold",
+	 "Use direct poisoning/unpoisoning instructions for variables "
+	 "smaller or equal to this number.",
+	 256, 0, INT_MAX)
+
+DEFPARAM (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS,
+	  "uninit-control-dep-attempts",
+	  "Maximum number of nested calls to search for control dependencies "
+	  "during uninitialized variable analysis.",
+	  1000, 1, 0)
+
+DEFPARAM (PARAM_FSM_SCALE_PATH_STMTS,
+	  "fsm-scale-path-stmts",
+	  "Scale factor to apply to the number of statements in a threading path when comparing to the number of (scaled) blocks.",
+	  2, 1, 10)
+
+DEFPARAM (PARAM_FSM_MAXIMUM_PHI_ARGUMENTS,
+	  "fsm-maximum-phi-arguments",
+	  "Maximum number of arguments a PHI may have before the FSM threader will not try to thread through its block.",
+	  100, 1, 999999)
+
+DEFPARAM (PARAM_FSM_SCALE_PATH_BLOCKS,
+	  "fsm-scale-path-blocks",
+	  "Scale factor to apply to the number of blocks in a threading path when comparing to the number of (scaled) statements.",
+	  3, 1, 10)
+
+DEFPARAM (PARAM_MAX_FSM_THREAD_PATH_INSNS,
+	  "max-fsm-thread-path-insns",
+	  "Maximum number of instructions to copy when duplicating blocks on a finite state automaton jump thread path.",
+	  100, 1, 999999)
+
+DEFPARAM (PARAM_MAX_FSM_THREAD_LENGTH,
+	  "max-fsm-thread-length",
+	  "Maximum number of basic blocks on a finite state automaton jump thread path.",
+	  10, 1, 999999)
+
+DEFPARAM (PARAM_MAX_FSM_THREAD_PATHS,
+	  "max-fsm-thread-paths",
+	  "Maximum number of new jump thread paths to create for a finite state automaton.",
+	  50, 1, 999999)
+
+DEFPARAM (PARAM_PARLOOPS_CHUNK_SIZE,
+	  "parloops-chunk-size",
+	  "Chunk size of omp schedule for loops parallelized by parloops.",
+	  0, 0, 0)
+
+DEFPARAMENUM5 (PARAM_PARLOOPS_SCHEDULE,
+	       "parloops-schedule",
+	       "Schedule type of omp schedule for loops parallelized by "
+	       "parloops (static, dynamic, guided, auto, runtime).",
+	       static,
+	       static, dynamic, guided, auto, runtime)
+
+DEFPARAM (PARAM_PARLOOPS_MIN_PER_THREAD,
+	  "parloops-min-per-thread",
+	  "Minimum number of iterations per thread of an innermost "
+	  "parallelized loop.",
+	  100, 2, 0)
+
+DEFPARAM (PARAM_MAX_SSA_NAME_QUERY_DEPTH,
+	  "max-ssa-name-query-depth",
+	  "Maximum recursion depth allowed when querying a property of an"
+	  " SSA name.",
+	  3, 1, 10)
+
+DEFPARAM (PARAM_MAX_RTL_IF_CONVERSION_INSNS,
+	  "max-rtl-if-conversion-insns",
+	  "Maximum number of insns in a basic block to consider for RTL "
+	  "if-conversion.",
+	  10, 0, 99)
+
+DEFPARAM (PARAM_MAX_RTL_IF_CONVERSION_PREDICTABLE_COST,
+	  "max-rtl-if-conversion-predictable-cost",
+	  "Maximum permissible cost for the sequence that would be "
+	  "generated by the RTL if-conversion pass for a branch that "
+	  "is considered predictable.",
+	  20, 0, 200)
+
+DEFPARAM (PARAM_MAX_RTL_IF_CONVERSION_UNPREDICTABLE_COST,
+	  "max-rtl-if-conversion-unpredictable-cost",
+	  "Maximum permissible cost for the sequence that would be "
+	  "generated by the RTL if-conversion pass for a branch that "
+	  "is considered unpredictable.",
+	  40, 0, 200)
+
+DEFPARAM (PARAM_HSA_GEN_DEBUG_STORES,
+	  "hsa-gen-debug-stores",
+	  "Level of hsa debug stores verbosity.",
+	  0, 0, 1)
+
+DEFPARAM (PARAM_MAX_SPECULATIVE_DEVIRT_MAYDEFS,
+	  "max-speculative-devirt-maydefs",
+	  "Maximum number of may-defs visited when devirtualizing "
+	  "speculatively.", 50, 0, 0)
+
+DEFPARAM (PARAM_MAX_VRP_SWITCH_ASSERTIONS,
+	  "max-vrp-switch-assertions",
+	  "Maximum number of assertions to add along the default "
+	  "edge of a switch statement during VRP.",
+	  10, 0, 0)
+
+DEFPARAM (PARAM_VECT_EPILOGUES_NOMASK,
+	  "vect-epilogues-nomask",
+	  "Enable loop epilogue vectorization using smaller vector size.",
+	  0, 0, 1)
+
+DEFPARAM(PARAM_UNROLL_JAM_MIN_PERCENT,
+	 "unroll-jam-min-percent",
+	 "Minimum percentage of memrefs that must go away for unroll-and-jam to be considered profitable.",
+	 1, 0, 100)
+
+DEFPARAM(PARAM_UNROLL_JAM_MAX_UNROLL,
+	 "unroll-jam-max-unroll",
+	 "Maximum unroll factor for the unroll-and-jam transformation.",
+	 4, 0, 0)
+
+DEFPARAM(PARAM_AVOID_FMA_MAX_BITS,
+	 "avoid-fma-max-bits",
+	 "Maximum number of bits for which we avoid creating FMAs.",
+	 0, 0, 512)
+
+DEFPARAM(PARAM_LOGICAL_OP_NON_SHORT_CIRCUIT,
+	 "logical-op-non-short-circuit",
+	 "True if a non-short-circuit operation is optimal.",
+	 -1, -1, 1)
+
+DEFPARAM(PARAM_LOOP_VERSIONING_MAX_INNER_INSNS,
+	 "loop-versioning-max-inner-insns",
+	 "The maximum number of instructions in an inner loop that is being"
+	 " considered for versioning.",
+	 200, 0, 0)
+
+DEFPARAM(PARAM_LOOP_VERSIONING_MAX_OUTER_INSNS,
+	 "loop-versioning-max-outer-insns",
+	 "The maximum number of instructions in an outer loop that is being"
+	 " considered for versioning, on top of the instructions in inner"
+	 " loops.",
+	 100, 0, 0)
+
+/*
+
+Local variables:
+mode:c
+End:
+*/
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/params.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/params.h
new file mode 100644
index 0000000..26f1236
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/params.h
@@ -0,0 +1,256 @@
+/* params.h - Run-time parameters.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Written by Mark Mitchell <mark@codesourcery.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* This module provides a means for setting integral parameters
+   dynamically.  Instead of encoding magic numbers in various places,
+   use this module to organize all the magic numbers in a single
+   place.  The values of the parameters can be set on the
+   command-line, thereby providing a way to control the amount of
+   effort spent on particular optimization passes, or otherwise tune
+   the behavior of the compiler.
+
+   Since their values can be set on the command-line, these parameters
+   should not be used for non-dynamic memory allocation.  */
+
+#ifndef GCC_PARAMS_H
+#define GCC_PARAMS_H
+
+/* No parameter shall have this value.  */
+
+#define INVALID_PARAM_VAL (-1)
+
+/* The information associated with each parameter.  */
+
+struct param_info
+{
+  /* The name used with the `--param <name>=<value>' switch to set this
+     value.  */
+  const char *option;
+
+  /* The default value.  */
+  int default_value;
+
+  /* Minimum acceptable value.  */
+  int min_value;
+
+  /* Maximum acceptable value, if greater than minimum  */
+  int max_value;
+
+  /* A short description of the option.  */
+  const char *help;
+
+  /* The optional names corresponding to the values.  */
+  const char **value_names;
+};
+
+/* An array containing the compiler parameters and their current
+   values.  */
+
+extern param_info *compiler_params;
+
+/* Returns the number of entries in the table, for the use by plugins.  */
+extern size_t get_num_compiler_params (void);
+
+/* Add the N PARAMS to the current list of compiler parameters.  */
+
+extern void add_params (const param_info params[], size_t n);
+
+/* Set the VALUE associated with the parameter given by NAME in the
+   table PARAMS using PARAMS_SET to indicate which have been
+   explicitly set.  */
+
+extern void set_param_value (const char *name, int value,
+			     int *params, int *params_set);
+
+
+/* The parameters in use by language-independent code.  */
+
+enum compiler_param
+{
+#include "params.list"
+  LAST_PARAM
+};
+
+extern bool find_param (const char *, enum compiler_param *);
+extern const char *find_param_fuzzy (const char *name);
+extern bool param_string_value_p (enum compiler_param, const char *, int *);
+
+/* The value of the parameter given by ENUM.  Not an lvalue.  */
+#define PARAM_VALUE(ENUM) \
+  ((int) global_options.x_param_values[(int) ENUM])
+
+/* Set the value of the parameter given by NUM to VALUE, implicitly,
+   if it has not been set explicitly by the user, in the table PARAMS
+   using PARAMS_SET to indicate which have been explicitly set.  */
+
+extern void maybe_set_param_value (compiler_param num, int value,
+				   int *params, int *params_set);
+
+/* Set the default value of a parameter given by NUM to VALUE, before
+   option processing.  */
+
+extern void set_default_param_value (compiler_param num, int value);
+
+/* Add all parameters and default values that can be set in both the
+   driver and the compiler proper.  */
+
+extern void global_init_params (void);
+
+/* Note that all parameters have been added and all default values
+   set.  */
+extern void finish_params (void);
+
+/* Reset all state in params.c  */
+
+extern void params_c_finalize (void);
+
+/* Return the default value of parameter NUM.  */
+
+extern int default_param_value (compiler_param num);
+
+/* Initialize an array PARAMS with default values of the
+   parameters.  */
+extern void init_param_values (int *params);
+
+/* Macros for the various parameters.  */
+#define MAX_INLINE_INSNS_SINGLE \
+  PARAM_VALUE (PARAM_MAX_INLINE_INSNS_SINGLE)
+#define MAX_INLINE_INSNS \
+  PARAM_VALUE (PARAM_MAX_INLINE_INSNS)
+#define MAX_INLINE_SLOPE \
+  PARAM_VALUE (PARAM_MAX_INLINE_SLOPE)
+#define MIN_INLINE_INSNS \
+  PARAM_VALUE (PARAM_MIN_INLINE_INSNS)
+#define MAX_INLINE_INSNS_AUTO \
+  PARAM_VALUE (PARAM_MAX_INLINE_INSNS_AUTO)
+#define MAX_VARIABLE_EXPANSIONS \
+  PARAM_VALUE (PARAM_MAX_VARIABLE_EXPANSIONS)
+#define MIN_VECT_LOOP_BOUND \
+  PARAM_VALUE (PARAM_MIN_VECT_LOOP_BOUND)
+#define MAX_DELAY_SLOT_INSN_SEARCH \
+  PARAM_VALUE (PARAM_MAX_DELAY_SLOT_INSN_SEARCH)
+#define MAX_DELAY_SLOT_LIVE_SEARCH \
+  PARAM_VALUE (PARAM_MAX_DELAY_SLOT_LIVE_SEARCH)
+#define MAX_PENDING_LIST_LENGTH \
+  PARAM_VALUE (PARAM_MAX_PENDING_LIST_LENGTH)
+#define MAX_GCSE_MEMORY \
+  ((size_t) PARAM_VALUE (PARAM_MAX_GCSE_MEMORY))
+#define MAX_GCSE_INSERTION_RATIO \
+  ((size_t) PARAM_VALUE (PARAM_MAX_GCSE_INSERTION_RATIO))
+#define GCSE_AFTER_RELOAD_PARTIAL_FRACTION \
+  PARAM_VALUE (PARAM_GCSE_AFTER_RELOAD_PARTIAL_FRACTION)
+#define GCSE_AFTER_RELOAD_CRITICAL_FRACTION \
+  PARAM_VALUE (PARAM_GCSE_AFTER_RELOAD_CRITICAL_FRACTION)
+#define GCSE_COST_DISTANCE_RATIO \
+  PARAM_VALUE (PARAM_GCSE_COST_DISTANCE_RATIO)
+#define GCSE_UNRESTRICTED_COST \
+  PARAM_VALUE (PARAM_GCSE_UNRESTRICTED_COST)
+#define MAX_HOIST_DEPTH \
+  PARAM_VALUE (PARAM_MAX_HOIST_DEPTH)
+#define MAX_UNROLLED_INSNS \
+  PARAM_VALUE (PARAM_MAX_UNROLLED_INSNS)
+#define MAX_SMS_LOOP_NUMBER \
+  PARAM_VALUE (PARAM_MAX_SMS_LOOP_NUMBER)
+#define SMS_MAX_II_FACTOR \
+  PARAM_VALUE (PARAM_SMS_MAX_II_FACTOR)
+#define SMS_DFA_HISTORY \
+  PARAM_VALUE (PARAM_SMS_DFA_HISTORY)
+#define SMS_LOOP_AVERAGE_COUNT_THRESHOLD \
+  PARAM_VALUE (PARAM_SMS_LOOP_AVERAGE_COUNT_THRESHOLD)
+#define INTEGER_SHARE_LIMIT \
+  PARAM_VALUE (PARAM_INTEGER_SHARE_LIMIT)
+#define MAX_LAST_VALUE_RTL \
+  PARAM_VALUE (PARAM_MAX_LAST_VALUE_RTL)
+#define MIN_VIRTUAL_MAPPINGS \
+  PARAM_VALUE (PARAM_MIN_VIRTUAL_MAPPINGS)
+#define VIRTUAL_MAPPINGS_TO_SYMS_RATIO \
+  PARAM_VALUE (PARAM_VIRTUAL_MAPPINGS_TO_SYMS_RATIO)
+#define MAX_FIELDS_FOR_FIELD_SENSITIVE \
+  ((size_t) PARAM_VALUE (PARAM_MAX_FIELDS_FOR_FIELD_SENSITIVE))
+#define MAX_SCHED_READY_INSNS \
+  PARAM_VALUE (PARAM_MAX_SCHED_READY_INSNS)
+#define PREFETCH_LATENCY \
+  PARAM_VALUE (PARAM_PREFETCH_LATENCY)
+#define SIMULTANEOUS_PREFETCHES \
+  PARAM_VALUE (PARAM_SIMULTANEOUS_PREFETCHES)
+#define L1_CACHE_SIZE \
+  PARAM_VALUE (PARAM_L1_CACHE_SIZE)
+#define L1_CACHE_LINE_SIZE \
+  PARAM_VALUE (PARAM_L1_CACHE_LINE_SIZE)
+#define L2_CACHE_SIZE \
+  PARAM_VALUE (PARAM_L2_CACHE_SIZE)
+#define PREFETCH_DYNAMIC_STRIDES \
+  PARAM_VALUE (PARAM_PREFETCH_DYNAMIC_STRIDES)
+#define PREFETCH_MINIMUM_STRIDE \
+  PARAM_VALUE (PARAM_PREFETCH_MINIMUM_STRIDE)
+#define USE_CANONICAL_TYPES \
+  PARAM_VALUE (PARAM_USE_CANONICAL_TYPES)
+#define IRA_MAX_LOOPS_NUM \
+  PARAM_VALUE (PARAM_IRA_MAX_LOOPS_NUM)
+#define IRA_MAX_CONFLICT_TABLE_SIZE \
+  PARAM_VALUE (PARAM_IRA_MAX_CONFLICT_TABLE_SIZE)
+#define IRA_LOOP_RESERVED_REGS \
+  PARAM_VALUE (PARAM_IRA_LOOP_RESERVED_REGS)
+#define LRA_MAX_CONSIDERED_RELOAD_PSEUDOS \
+  PARAM_VALUE (PARAM_LRA_MAX_CONSIDERED_RELOAD_PSEUDOS)
+#define LRA_INHERITANCE_EBB_PROBABILITY_CUTOFF \
+  PARAM_VALUE (PARAM_LRA_INHERITANCE_EBB_PROBABILITY_CUTOFF)
+#define SWITCH_CONVERSION_BRANCH_RATIO \
+  PARAM_VALUE (PARAM_SWITCH_CONVERSION_BRANCH_RATIO)
+#define LOOP_INVARIANT_MAX_BBS_IN_LOOP \
+  PARAM_VALUE (PARAM_LOOP_INVARIANT_MAX_BBS_IN_LOOP)
+#define SLP_MAX_INSNS_IN_BB \
+  PARAM_VALUE (PARAM_SLP_MAX_INSNS_IN_BB)
+#define MIN_INSN_TO_PREFETCH_RATIO \
+  PARAM_VALUE (PARAM_MIN_INSN_TO_PREFETCH_RATIO)
+#define PREFETCH_MIN_INSN_TO_MEM_RATIO \
+  PARAM_VALUE (PARAM_PREFETCH_MIN_INSN_TO_MEM_RATIO)
+#define MIN_NONDEBUG_INSN_UID \
+  PARAM_VALUE (PARAM_MIN_NONDEBUG_INSN_UID)
+#define MAX_STORES_TO_SINK \
+  PARAM_VALUE (PARAM_MAX_STORES_TO_SINK)
+#define ALLOW_LOAD_DATA_RACES \
+  PARAM_VALUE (PARAM_ALLOW_LOAD_DATA_RACES)
+#define ALLOW_STORE_DATA_RACES \
+  PARAM_VALUE (PARAM_ALLOW_STORE_DATA_RACES)
+#define ALLOW_PACKED_LOAD_DATA_RACES \
+  PARAM_VALUE (PARAM_ALLOW_PACKED_LOAD_DATA_RACES)
+#define ALLOW_PACKED_STORE_DATA_RACES \
+  PARAM_VALUE (PARAM_ALLOW_PACKED_STORE_DATA_RACES)
+#define ASAN_STACK \
+  PARAM_VALUE (PARAM_ASAN_STACK)
+#define ASAN_PROTECT_ALLOCAS \
+  PARAM_VALUE (PARAM_ASAN_PROTECT_ALLOCAS)
+#define ASAN_GLOBALS \
+  PARAM_VALUE (PARAM_ASAN_GLOBALS)
+#define ASAN_INSTRUMENT_READS \
+  PARAM_VALUE (PARAM_ASAN_INSTRUMENT_READS)
+#define ASAN_INSTRUMENT_WRITES \
+  PARAM_VALUE (PARAM_ASAN_INSTRUMENT_WRITES)
+#define ASAN_MEMINTRIN \
+  PARAM_VALUE (PARAM_ASAN_MEMINTRIN)
+#define ASAN_USE_AFTER_RETURN \
+  PARAM_VALUE (PARAM_ASAN_USE_AFTER_RETURN)
+#define ASAN_INSTRUMENTATION_WITH_CALL_THRESHOLD \
+  PARAM_VALUE (PARAM_ASAN_INSTRUMENTATION_WITH_CALL_THRESHOLD)
+#define ASAN_PARAM_USE_AFTER_SCOPE_DIRECT_EMISSION_THRESHOLD \
+  ((unsigned) PARAM_VALUE (PARAM_USE_AFTER_SCOPE_DIRECT_EMISSION_THRESHOLD))
+
+#endif /* ! GCC_PARAMS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/params.list b/lib/gcc/aarch64-elf/9.1.1/plugin/include/params.list
new file mode 100644
index 0000000..47dbe9b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/params.list
@@ -0,0 +1,220 @@
+PARAM_PREDICTABLE_BRANCH_OUTCOME,
+PARAM_INLINE_MIN_SPEEDUP,
+PARAM_MAX_INLINE_INSNS_SINGLE,
+PARAM_MAX_INLINE_INSNS_AUTO,
+PARAM_MAX_INLINE_INSNS_SMALL,
+PARAM_MAX_INLINE_INSNS_SIZE,
+PARAM_UNINLINED_FUNCTION_INSNS,
+PARAM_UNINLINED_FUNCTION_TIME,
+PARAM_UNINLINED_FUNCTION_THUNK_INSNS,
+PARAM_UNINLINED_FUNCTION_THUNK_TIME,
+PARAM_MAX_INLINE_INSNS_RECURSIVE,
+PARAM_MAX_INLINE_INSNS_RECURSIVE_AUTO,
+PARAM_MAX_INLINE_RECURSIVE_DEPTH,
+PARAM_MAX_INLINE_RECURSIVE_DEPTH_AUTO,
+PARAM_MIN_INLINE_RECURSIVE_PROBABILITY,
+PARAM_EARLY_INLINER_MAX_ITERATIONS,
+PARAM_COMDAT_SHARING_PROBABILITY,
+PARAM_PARTIAL_INLINING_ENTRY_PROBABILITY,
+PARAM_MAX_VARIABLE_EXPANSIONS,
+PARAM_MIN_VECT_LOOP_BOUND,
+PARAM_MAX_DELAY_SLOT_INSN_SEARCH,
+PARAM_MAX_DELAY_SLOT_LIVE_SEARCH,
+PARAM_MAX_PENDING_LIST_LENGTH,
+PARAM_MAX_MODULO_BACKTRACK_ATTEMPTS,
+PARAM_LARGE_FUNCTION_INSNS,
+PARAM_LARGE_FUNCTION_GROWTH,
+PARAM_LARGE_UNIT_INSNS,
+PARAM_INLINE_UNIT_GROWTH,
+PARAM_IPCP_UNIT_GROWTH,
+PARAM_EARLY_INLINING_INSNS,
+PARAM_LARGE_STACK_FRAME,
+PARAM_STACK_FRAME_GROWTH,
+PARAM_STACK_CLASH_PROTECTION_GUARD_SIZE,
+PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL,
+PARAM_MAX_GCSE_MEMORY,
+PARAM_MAX_GCSE_INSERTION_RATIO,
+PARAM_GCSE_AFTER_RELOAD_PARTIAL_FRACTION,
+PARAM_GCSE_AFTER_RELOAD_CRITICAL_FRACTION,
+PARAM_GCSE_COST_DISTANCE_RATIO,
+PARAM_GCSE_UNRESTRICTED_COST,
+PARAM_MAX_HOIST_DEPTH,
+PARAM_MAX_POW_SQRT_DEPTH,
+PARAM_MAX_UNROLLED_INSNS,
+PARAM_MAX_AVERAGE_UNROLLED_INSNS,
+PARAM_MAX_UNROLL_TIMES,
+PARAM_MAX_PEELED_INSNS,
+PARAM_MAX_PEEL_TIMES,
+PARAM_MAX_PEEL_BRANCHES,
+PARAM_MAX_COMPLETELY_PEELED_INSNS,
+PARAM_MAX_COMPLETELY_PEEL_TIMES,
+PARAM_MAX_ONCE_PEELED_INSNS,
+PARAM_MAX_UNROLL_ITERATIONS,
+PARAM_MAX_UNSWITCH_INSNS,
+PARAM_MAX_UNSWITCH_LEVEL,
+PARAM_MAX_LOOP_HEADER_INSNS,
+PARAM_MAX_ITERATIONS_TO_TRACK,
+PARAM_MAX_ITERATIONS_COMPUTATION_COST,
+PARAM_SMS_MAX_II_FACTOR,
+PARAM_SMS_MIN_SC,
+PARAM_SMS_DFA_HISTORY,
+PARAM_SMS_LOOP_AVERAGE_COUNT_THRESHOLD,
+HOT_BB_COUNT_FRACTION,
+HOT_BB_COUNT_WS_PERMILLE,
+HOT_BB_FREQUENCY_FRACTION,
+UNLIKELY_BB_COUNT_FRACTION,
+PARAM_ALIGN_THRESHOLD,
+PARAM_ALIGN_LOOP_ITERATIONS,
+PARAM_MAX_PREDICTED_ITERATIONS,
+BUILTIN_EXPECT_PROBABILITY,
+BUILTIN_STRING_CMP_INLINE_LENGTH,
+TRACER_DYNAMIC_COVERAGE_FEEDBACK,
+TRACER_DYNAMIC_COVERAGE,
+TRACER_MAX_CODE_GROWTH,
+TRACER_MIN_BRANCH_RATIO,
+TRACER_MIN_BRANCH_PROBABILITY_FEEDBACK,
+TRACER_MIN_BRANCH_PROBABILITY,
+PARAM_MAX_CROSSJUMP_EDGES,
+PARAM_MIN_CROSSJUMP_INSNS,
+PARAM_MAX_GROW_COPY_BB_INSNS,
+PARAM_MAX_GOTO_DUPLICATION_INSNS,
+PARAM_MAX_CSE_PATH_LENGTH,
+PARAM_MAX_CSE_INSNS,
+PARAM_LIM_EXPENSIVE,
+PARAM_IV_CONSIDER_ALL_CANDIDATES_BOUND,
+PARAM_IV_MAX_CONSIDERED_USES,
+PARAM_IV_ALWAYS_PRUNE_CAND_SET_BOUND,
+PARAM_AVG_LOOP_NITER,
+PARAM_DSE_MAX_OBJECT_SIZE,
+PARAM_DSE_MAX_ALIAS_QUERIES_PER_STORE,
+PARAM_SCEV_MAX_EXPR_SIZE,
+PARAM_SCEV_MAX_EXPR_COMPLEXITY,
+PARAM_MAX_TREE_IF_CONVERSION_PHI_ARGS,
+PARAM_VECT_MAX_VERSION_FOR_ALIGNMENT_CHECKS,
+PARAM_VECT_MAX_VERSION_FOR_ALIAS_CHECKS,
+PARAM_VECT_MAX_PEELING_FOR_ALIGNMENT,
+PARAM_MAX_CSELIB_MEMORY_LOCATIONS,
+GGC_MIN_EXPAND,
+GGC_MIN_HEAPSIZE,
+PARAM_MAX_RELOAD_SEARCH_INSNS,
+PARAM_SINK_FREQUENCY_THRESHOLD,
+PARAM_MAX_SCHED_REGION_BLOCKS,
+PARAM_MAX_SCHED_REGION_INSNS,
+PARAM_MAX_PIPELINE_REGION_BLOCKS,
+PARAM_MAX_PIPELINE_REGION_INSNS,
+PARAM_MIN_SPEC_PROB,
+PARAM_MAX_SCHED_EXTEND_REGIONS_ITERS,
+PARAM_MAX_SCHED_INSN_CONFLICT_DELAY,
+PARAM_SCHED_SPEC_PROB_CUTOFF,
+PARAM_SCHED_STATE_EDGE_PROB_CUTOFF,
+PARAM_SELSCHED_MAX_LOOKAHEAD,
+PARAM_SELSCHED_MAX_SCHED_TIMES,
+PARAM_SELSCHED_INSNS_TO_RENAME,
+PARAM_SCHED_MEM_TRUE_DEP_COST,
+PARAM_SCHED_AUTOPREF_QUEUE_DEPTH,
+PARAM_MAX_LAST_VALUE_RTL,
+PARAM_MAX_COMBINE_INSNS,
+PARAM_INTEGER_SHARE_LIMIT,
+PARAM_SSP_BUFFER_SIZE,
+PARAM_MIN_SIZE_FOR_STACK_SHARING,
+PARAM_MAX_JUMP_THREAD_DUPLICATION_STMTS,
+PARAM_MAX_FIELDS_FOR_FIELD_SENSITIVE,
+PARAM_MAX_SCHED_READY_INSNS,
+PARAM_MAX_DSE_ACTIVE_LOCAL_STORES,
+PARAM_PREFETCH_LATENCY,
+PARAM_SIMULTANEOUS_PREFETCHES,
+PARAM_L1_CACHE_SIZE,
+PARAM_L1_CACHE_LINE_SIZE,
+PARAM_L2_CACHE_SIZE,
+PARAM_PREFETCH_DYNAMIC_STRIDES,
+PARAM_PREFETCH_MINIMUM_STRIDE,
+PARAM_LOOP_INTERCHANGE_MAX_NUM_STMTS,
+PARAM_LOOP_INTERCHANGE_STRIDE_RATIO,
+PARAM_USE_CANONICAL_TYPES,
+PARAM_MAX_PARTIAL_ANTIC_LENGTH,
+PARAM_RPO_VN_MAX_LOOP_DEPTH,
+PARAM_SCCVN_MAX_ALIAS_QUERIES_PER_ACCESS,
+PARAM_IRA_MAX_LOOPS_NUM,
+PARAM_IRA_MAX_CONFLICT_TABLE_SIZE,
+PARAM_IRA_LOOP_RESERVED_REGS,
+PARAM_LRA_MAX_CONSIDERED_RELOAD_PSEUDOS,
+PARAM_LRA_INHERITANCE_EBB_PROBABILITY_CUTOFF,
+PARAM_SWITCH_CONVERSION_BRANCH_RATIO,
+PARAM_LOOP_BLOCK_TILE_SIZE,
+PARAM_GRAPHITE_MAX_NB_SCOP_PARAMS,
+PARAM_GRAPHITE_MAX_ARRAYS_PER_SCOP,
+PARAM_MAX_ISL_OPERATIONS,
+PARAM_GRAPHITE_ALLOW_CODEGEN_ERRORS,
+PARAM_LOOP_MAX_DATAREFS_FOR_DATADEPS,
+PARAM_LOOP_INVARIANT_MAX_BBS_IN_LOOP,
+PARAM_PROFILE_FUNC_INTERNAL_ID,
+PARAM_INDIR_CALL_TOPN_PROFILE,
+PARAM_SLP_MAX_INSNS_IN_BB,
+PARAM_MIN_INSN_TO_PREFETCH_RATIO,
+PARAM_PREFETCH_MIN_INSN_TO_MEM_RATIO,
+PARAM_MAX_VARTRACK_SIZE,
+PARAM_MAX_VARTRACK_EXPR_DEPTH,
+PARAM_MAX_VARTRACK_REVERSE_OP_SIZE,
+PARAM_MAX_DEBUG_MARKER_COUNT,
+PARAM_MIN_NONDEBUG_INSN_UID,
+PARAM_IPA_SRA_PTR_GROWTH_FACTOR,
+PARAM_TM_MAX_AGGREGATE_SIZE,
+PARAM_SRA_MAX_SCALARIZATION_SIZE_SPEED,
+PARAM_SRA_MAX_SCALARIZATION_SIZE_SIZE,
+PARAM_IPA_CP_VALUE_LIST_SIZE,
+PARAM_IPA_CP_EVAL_THRESHOLD,
+PARAM_IPA_CP_RECURSION_PENALTY,
+PARAM_IPA_CP_SINGLE_CALL_PENALTY,
+PARAM_IPA_MAX_AGG_ITEMS,
+PARAM_IPA_CP_LOOP_HINT_BONUS,
+PARAM_IPA_CP_ARRAY_INDEX_HINT_BONUS,
+PARAM_IPA_MAX_AA_STEPS,
+PARAM_LTO_PARTITIONS,
+MIN_PARTITION_SIZE,
+MAX_PARTITION_SIZE,
+PARAM_MAX_LTO_STREAMING_PARALLELISM,
+CXX_MAX_NAMESPACES_FOR_DIAGNOSTIC_HELP,
+PARAM_MAX_STORES_TO_SINK,
+PARAM_CASE_VALUES_THRESHOLD,
+PARAM_ALLOW_STORE_DATA_RACES,
+PARAM_TREE_REASSOC_WIDTH,
+PARAM_MAX_TAIL_MERGE_COMPARISONS,
+PARAM_STORE_MERGING_ALLOW_UNALIGNED,
+PARAM_MAX_STORES_TO_MERGE,
+PARAM_MAX_TAIL_MERGE_ITERATIONS,
+PARAM_MAX_TRACKED_STRLENS,
+PARAM_SCHED_PRESSURE_ALGORITHM,
+PARAM_MAX_SLSR_CANDIDATE_SCAN,
+PARAM_ASAN_STACK,
+PARAM_ASAN_PROTECT_ALLOCAS,
+PARAM_ASAN_GLOBALS,
+PARAM_ASAN_INSTRUMENT_WRITES,
+PARAM_ASAN_INSTRUMENT_READS,
+PARAM_ASAN_MEMINTRIN,
+PARAM_ASAN_USE_AFTER_RETURN,
+PARAM_ASAN_INSTRUMENTATION_WITH_CALL_THRESHOLD,
+PARAM_USE_AFTER_SCOPE_DIRECT_EMISSION_THRESHOLD,
+PARAM_UNINIT_CONTROL_DEP_ATTEMPTS,
+PARAM_FSM_SCALE_PATH_STMTS,
+PARAM_FSM_MAXIMUM_PHI_ARGUMENTS,
+PARAM_FSM_SCALE_PATH_BLOCKS,
+PARAM_MAX_FSM_THREAD_PATH_INSNS,
+PARAM_MAX_FSM_THREAD_LENGTH,
+PARAM_MAX_FSM_THREAD_PATHS,
+PARAM_PARLOOPS_CHUNK_SIZE,
+PARAM_PARLOOPS_SCHEDULE,
+PARAM_PARLOOPS_MIN_PER_THREAD,
+PARAM_MAX_SSA_NAME_QUERY_DEPTH,
+PARAM_MAX_RTL_IF_CONVERSION_INSNS,
+PARAM_MAX_RTL_IF_CONVERSION_PREDICTABLE_COST,
+PARAM_MAX_RTL_IF_CONVERSION_UNPREDICTABLE_COST,
+PARAM_HSA_GEN_DEBUG_STORES,
+PARAM_MAX_SPECULATIVE_DEVIRT_MAYDEFS,
+PARAM_MAX_VRP_SWITCH_ASSERTIONS,
+PARAM_VECT_EPILOGUES_NOMASK,
+PARAM_UNROLL_JAM_MIN_PERCENT,
+PARAM_UNROLL_JAM_MAX_UNROLL,
+PARAM_AVOID_FMA_MAX_BITS,
+PARAM_LOGICAL_OP_NON_SHORT_CIRCUIT,
+PARAM_LOOP_VERSIONING_MAX_INNER_INSNS,
+PARAM_LOOP_VERSIONING_MAX_OUTER_INSNS,
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/pass-instances.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/pass-instances.def
new file mode 100644
index 0000000..881d7c7
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/pass-instances.def
@@ -0,0 +1,526 @@
+/* This file is auto-generated by gen-pass-instances.awk
+   from passes.def.  */
+/* Description of pass structure
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/*
+ Macros that should be defined when using this file:
+   INSERT_PASSES_AFTER (PASS)
+   PUSH_INSERT_PASSES_WITHIN (PASS)
+   POP_INSERT_PASSES ()
+   NEXT_PASS (PASS, 1)
+   TERMINATE_PASS_LIST (PASS)
+ */
+
+ /* All passes needed to lower the function into shape optimizers can
+    operate on.  These passes are always run first on the function, but
+    backend might produce already lowered functions that are not processed
+    by these passes.  */
+  INSERT_PASSES_AFTER (all_lowering_passes)
+  NEXT_PASS (pass_warn_unused_result, 1);
+  NEXT_PASS (pass_diagnose_omp_blocks, 1);
+  NEXT_PASS (pass_diagnose_tm_blocks, 1);
+  NEXT_PASS (pass_lower_omp, 1);
+  NEXT_PASS (pass_lower_cf, 1);
+  NEXT_PASS (pass_lower_tm, 1);
+  NEXT_PASS (pass_refactor_eh, 1);
+  NEXT_PASS (pass_lower_eh, 1);
+  NEXT_PASS (pass_build_cfg, 1);
+  NEXT_PASS (pass_warn_function_return, 1);
+  NEXT_PASS (pass_expand_omp, 1);
+  NEXT_PASS_WITH_ARG (pass_sprintf_length, 1, false);
+  NEXT_PASS_WITH_ARG (pass_walloca, 1, /*strict_mode_p=*/true);
+  NEXT_PASS (pass_build_cgraph_edges, 1);
+  TERMINATE_PASS_LIST (all_lowering_passes)
+
+  /* Interprocedural optimization passes.  */
+  INSERT_PASSES_AFTER (all_small_ipa_passes)
+  NEXT_PASS (pass_ipa_free_lang_data, 1);
+  NEXT_PASS (pass_ipa_function_and_variable_visibility, 1);
+  NEXT_PASS (pass_build_ssa_passes, 1);
+  PUSH_INSERT_PASSES_WITHIN (pass_build_ssa_passes)
+      NEXT_PASS (pass_fixup_cfg, 1);
+      NEXT_PASS (pass_build_ssa, 1);
+      NEXT_PASS (pass_warn_nonnull_compare, 1);
+      NEXT_PASS (pass_early_warn_uninitialized, 1);
+      NEXT_PASS (pass_ubsan, 1);
+      NEXT_PASS (pass_nothrow, 1);
+      NEXT_PASS (pass_rebuild_cgraph_edges, 1);
+  POP_INSERT_PASSES ()
+
+  NEXT_PASS (pass_local_optimization_passes, 1);
+  PUSH_INSERT_PASSES_WITHIN (pass_local_optimization_passes)
+      NEXT_PASS (pass_fixup_cfg, 2);
+      NEXT_PASS (pass_rebuild_cgraph_edges, 2);
+      NEXT_PASS (pass_local_fn_summary, 1);
+      NEXT_PASS (pass_early_inline, 1);
+      NEXT_PASS (pass_all_early_optimizations, 1);
+      PUSH_INSERT_PASSES_WITHIN (pass_all_early_optimizations)
+	  NEXT_PASS (pass_remove_cgraph_callee_edges, 1);
+	  NEXT_PASS_WITH_ARG (pass_object_sizes, 1, true /* insert_min_max_p */);
+	  /* Don't record nonzero bits before IPA to avoid
+	     using too much memory.  */
+	  NEXT_PASS_WITH_ARG (pass_ccp, 1, false /* nonzero_p */);
+	  /* After CCP we rewrite no longer addressed locals into SSA
+	     form if possible.  */
+	  NEXT_PASS (pass_forwprop, 1);
+          NEXT_PASS (pass_early_thread_jumps, 1);
+	  NEXT_PASS (pass_sra_early, 1);
+	  /* pass_build_ealias is a dummy pass that ensures that we
+	     execute TODO_rebuild_alias at this point.  */
+	  NEXT_PASS (pass_build_ealias, 1);
+	  NEXT_PASS (pass_fre, 1);
+	  NEXT_PASS (pass_early_vrp, 1);
+	  NEXT_PASS (pass_merge_phi, 1);
+          NEXT_PASS (pass_dse, 1);
+	  NEXT_PASS (pass_cd_dce, 1);
+	  NEXT_PASS_WITH_ARG (pass_phiopt, 1, true /* early_p */);
+	  NEXT_PASS (pass_early_ipa_sra, 1);
+	  NEXT_PASS (pass_tail_recursion, 1);
+	  NEXT_PASS (pass_convert_switch, 1);
+	  NEXT_PASS (pass_cleanup_eh, 1);
+	  NEXT_PASS (pass_profile, 1);
+	  NEXT_PASS (pass_local_pure_const, 1);
+	  /* Split functions creates parts that are not run through
+	     early optimizations again.  It is thus good idea to do this
+	      late.  */
+	  NEXT_PASS (pass_split_functions, 1);
+	  NEXT_PASS_WITH_ARG (pass_strip_predict_hints, 1, true /* early_p */);
+      POP_INSERT_PASSES ()
+      NEXT_PASS (pass_release_ssa_names, 1);
+      NEXT_PASS (pass_rebuild_cgraph_edges, 3);
+      NEXT_PASS (pass_local_fn_summary, 2);
+  POP_INSERT_PASSES ()
+
+  NEXT_PASS (pass_ipa_remove_symbols, 1);
+  NEXT_PASS (pass_ipa_oacc, 1);
+  PUSH_INSERT_PASSES_WITHIN (pass_ipa_oacc)
+      NEXT_PASS (pass_ipa_pta, 1);
+      /* Pass group that runs when the function is an offloaded function
+	 containing oacc kernels loops.	 */
+      NEXT_PASS (pass_ipa_oacc_kernels, 1);
+      PUSH_INSERT_PASSES_WITHIN (pass_ipa_oacc_kernels)
+	  NEXT_PASS (pass_oacc_kernels, 1);
+	  PUSH_INSERT_PASSES_WITHIN (pass_oacc_kernels)
+	      NEXT_PASS (pass_ch, 1);
+	      NEXT_PASS (pass_fre, 2);
+	      /* We use pass_lim to rewrite in-memory iteration and reduction
+		 variable accesses in loops into local variables accesses.  */
+	      NEXT_PASS (pass_lim, 1);
+	      NEXT_PASS_WITH_ARG (pass_dominator, 1, false /* may_peel_loop_headers_p */);
+	      NEXT_PASS (pass_dce, 1);
+	      NEXT_PASS_WITH_ARG (pass_parallelize_loops, 1, true /* oacc_kernels_p */);
+	      NEXT_PASS (pass_expand_omp_ssa, 1);
+	      NEXT_PASS (pass_rebuild_cgraph_edges, 4);
+	  POP_INSERT_PASSES ()
+      POP_INSERT_PASSES ()
+  POP_INSERT_PASSES ()
+
+  NEXT_PASS (pass_target_clone, 1);
+  NEXT_PASS (pass_ipa_auto_profile, 1);
+  NEXT_PASS (pass_ipa_tree_profile, 1);
+  PUSH_INSERT_PASSES_WITHIN (pass_ipa_tree_profile)
+      NEXT_PASS (pass_feedback_split_functions, 1);
+  POP_INSERT_PASSES ()
+  NEXT_PASS_WITH_ARG (pass_ipa_free_fn_summary, 1, true /* small_p */);
+  NEXT_PASS (pass_ipa_increase_alignment, 1);
+  NEXT_PASS (pass_ipa_tm, 1);
+  NEXT_PASS (pass_ipa_lower_emutls, 1);
+  TERMINATE_PASS_LIST (all_small_ipa_passes)
+
+  INSERT_PASSES_AFTER (all_regular_ipa_passes)
+  NEXT_PASS (pass_ipa_whole_program_visibility, 1);
+  NEXT_PASS (pass_ipa_profile, 1);
+  NEXT_PASS (pass_ipa_icf, 1);
+  NEXT_PASS (pass_ipa_devirt, 1);
+  NEXT_PASS (pass_ipa_cp, 1);
+  NEXT_PASS (pass_ipa_cdtor_merge, 1);
+  NEXT_PASS (pass_ipa_hsa, 1);
+  NEXT_PASS (pass_ipa_fn_summary, 1);
+  NEXT_PASS (pass_ipa_inline, 1);
+  NEXT_PASS (pass_ipa_pure_const, 1);
+  NEXT_PASS_WITH_ARG (pass_ipa_free_fn_summary, 2, false /* small_p */);
+  NEXT_PASS (pass_ipa_reference, 1);
+  /* This pass needs to be scheduled after any IP code duplication.   */
+  NEXT_PASS (pass_ipa_single_use, 1);
+  /* Comdat privatization come last, as direct references to comdat local
+     symbols are not allowed outside of the comdat group.  Privatizing early
+     would result in missed optimizations due to this restriction.  */
+  NEXT_PASS (pass_ipa_comdats, 1);
+  TERMINATE_PASS_LIST (all_regular_ipa_passes)
+
+  /* Simple IPA passes executed after the regular passes.  In WHOPR mode the
+     passes are executed after partitioning and thus see just parts of the
+     compiled unit.  */
+  INSERT_PASSES_AFTER (all_late_ipa_passes)
+  NEXT_PASS (pass_materialize_all_clones, 1);
+  NEXT_PASS (pass_ipa_pta, 2);
+  NEXT_PASS (pass_omp_simd_clone, 1);
+  TERMINATE_PASS_LIST (all_late_ipa_passes)
+
+  /* These passes are run after IPA passes on every function that is being
+     output to the assembler file.  */
+  INSERT_PASSES_AFTER (all_passes)
+  NEXT_PASS (pass_fixup_cfg, 3);
+  NEXT_PASS (pass_lower_eh_dispatch, 1);
+  NEXT_PASS (pass_oacc_device_lower, 1);
+  NEXT_PASS (pass_omp_device_lower, 1);
+  NEXT_PASS (pass_omp_target_link, 1);
+  NEXT_PASS (pass_all_optimizations, 1);
+  PUSH_INSERT_PASSES_WITHIN (pass_all_optimizations)
+      NEXT_PASS (pass_remove_cgraph_callee_edges, 2);
+      /* Initial scalar cleanups before alias computation.
+	 They ensure memory accesses are not indirect wherever possible.  */
+      NEXT_PASS_WITH_ARG (pass_strip_predict_hints, 2, false /* early_p */);
+      NEXT_PASS_WITH_ARG (pass_ccp, 2, true /* nonzero_p */);
+      NEXT_PASS (pass_post_ipa_warn, 1);
+      /* After CCP we rewrite no longer addressed locals into SSA
+	 form if possible.  */
+      NEXT_PASS (pass_complete_unrolli, 1);
+      NEXT_PASS (pass_backprop, 1);
+      NEXT_PASS (pass_phiprop, 1);
+      NEXT_PASS (pass_forwprop, 2);
+      NEXT_PASS_WITH_ARG (pass_object_sizes, 2, false /* insert_min_max_p */);
+      /* pass_build_alias is a dummy pass that ensures that we
+	 execute TODO_rebuild_alias at this point.  */
+      NEXT_PASS (pass_build_alias, 1);
+      NEXT_PASS (pass_return_slot, 1);
+      NEXT_PASS (pass_fre, 3);
+      NEXT_PASS (pass_merge_phi, 2);
+      NEXT_PASS (pass_thread_jumps, 1);
+      NEXT_PASS_WITH_ARG (pass_vrp, 1, true /* warn_array_bounds_p */);
+      NEXT_PASS (pass_dce, 2);
+      NEXT_PASS (pass_stdarg, 1);
+      NEXT_PASS (pass_call_cdce, 1);
+      NEXT_PASS (pass_cselim, 1);
+      NEXT_PASS (pass_copy_prop, 1);
+      NEXT_PASS (pass_tree_ifcombine, 1);
+      NEXT_PASS (pass_merge_phi, 3);
+      NEXT_PASS_WITH_ARG (pass_phiopt, 2, false /* early_p */);
+      NEXT_PASS (pass_tail_recursion, 2);
+      NEXT_PASS (pass_ch, 2);
+      NEXT_PASS (pass_lower_complex, 1);
+      NEXT_PASS (pass_sra, 1);
+      /* The dom pass will also resolve all __builtin_constant_p calls
+         that are still there to 0.  This has to be done after some
+	 propagations have already run, but before some more dead code
+	 is removed, and this place fits nicely.  Remember this when
+	 trying to move or duplicate pass_dominator somewhere earlier.  */
+      NEXT_PASS (pass_thread_jumps, 2);
+      NEXT_PASS_WITH_ARG (pass_dominator, 2, true /* may_peel_loop_headers_p */);
+      /* Threading can leave many const/copy propagations in the IL.
+	 Clean them up.  Failure to do so well can lead to false
+	 positives from warnings for erroneous code.  */
+      NEXT_PASS (pass_copy_prop, 2);
+      /* Identify paths that should never be executed in a conforming
+	 program and isolate those paths.  */
+      NEXT_PASS (pass_isolate_erroneous_paths, 1);
+      NEXT_PASS (pass_dse, 2);
+      NEXT_PASS_WITH_ARG (pass_reassoc, 1, true /* insert_powi_p */);
+      NEXT_PASS (pass_dce, 3);
+      NEXT_PASS (pass_forwprop, 3);
+      NEXT_PASS_WITH_ARG (pass_phiopt, 3, false /* early_p */);
+      NEXT_PASS_WITH_ARG (pass_ccp, 3, true /* nonzero_p */);
+      /* After CCP we rewrite no longer addressed locals into SSA
+	 form if possible.  */
+      NEXT_PASS (pass_cse_sincos, 1);
+      NEXT_PASS (pass_optimize_bswap, 1);
+      NEXT_PASS (pass_laddress, 1);
+      NEXT_PASS (pass_lim, 2);
+      NEXT_PASS_WITH_ARG (pass_walloca, 2, false);
+      NEXT_PASS (pass_pre, 1);
+      NEXT_PASS (pass_sink_code, 1);
+      NEXT_PASS (pass_sancov, 1);
+      NEXT_PASS (pass_asan, 1);
+      NEXT_PASS (pass_tsan, 1);
+      NEXT_PASS (pass_dce, 4);
+      /* Pass group that runs when 1) enabled, 2) there are loops
+	 in the function.  Make sure to run pass_fix_loops before
+	 to discover/remove loops before running the gate function
+	 of pass_tree_loop.  */
+      NEXT_PASS (pass_fix_loops, 1);
+      NEXT_PASS (pass_tree_loop, 1);
+      PUSH_INSERT_PASSES_WITHIN (pass_tree_loop)
+	  NEXT_PASS (pass_tree_loop_init, 1);
+	  NEXT_PASS (pass_tree_unswitch, 1);
+	  NEXT_PASS (pass_scev_cprop, 1);
+	  NEXT_PASS (pass_loop_split, 1);
+	  NEXT_PASS (pass_loop_versioning, 1);
+	  NEXT_PASS (pass_loop_jam, 1);
+	  /* All unswitching, final value replacement and splitting can expose
+	     empty loops.  Remove them now.  */
+	  NEXT_PASS (pass_cd_dce, 2);
+	  NEXT_PASS (pass_iv_canon, 1);
+	  NEXT_PASS (pass_loop_distribution, 1);
+	  NEXT_PASS (pass_linterchange, 1);
+	  NEXT_PASS (pass_copy_prop, 3);
+	  NEXT_PASS (pass_graphite, 1);
+	  PUSH_INSERT_PASSES_WITHIN (pass_graphite)
+	      NEXT_PASS (pass_graphite_transforms, 1);
+	      NEXT_PASS (pass_lim, 3);
+	      NEXT_PASS (pass_copy_prop, 4);
+	      NEXT_PASS (pass_dce, 5);
+	  POP_INSERT_PASSES ()
+	  NEXT_PASS_WITH_ARG (pass_parallelize_loops, 2, false /* oacc_kernels_p */);
+	  NEXT_PASS (pass_expand_omp_ssa, 2);
+	  NEXT_PASS (pass_ch_vect, 1);
+	  NEXT_PASS (pass_if_conversion, 1);
+	  /* pass_vectorize must immediately follow pass_if_conversion.
+	     Please do not add any other passes in between.  */
+	  NEXT_PASS (pass_vectorize, 1);
+          PUSH_INSERT_PASSES_WITHIN (pass_vectorize)
+	      NEXT_PASS (pass_dce, 6);
+          POP_INSERT_PASSES ()
+          NEXT_PASS (pass_predcom, 1);
+	  NEXT_PASS (pass_complete_unroll, 1);
+	  NEXT_PASS (pass_slp_vectorize, 1);
+	  NEXT_PASS (pass_loop_prefetch, 1);
+	  /* Run IVOPTs after the last pass that uses data-reference analysis
+	     as that doesn't handle TARGET_MEM_REFs.  */
+	  NEXT_PASS (pass_iv_optimize, 1);
+	  NEXT_PASS (pass_lim, 4);
+	  NEXT_PASS (pass_tree_loop_done, 1);
+      POP_INSERT_PASSES ()
+      /* Pass group that runs when pass_tree_loop is disabled or there
+         are no loops in the function.  */
+      NEXT_PASS (pass_tree_no_loop, 1);
+      PUSH_INSERT_PASSES_WITHIN (pass_tree_no_loop)
+	  NEXT_PASS (pass_slp_vectorize, 2);
+      POP_INSERT_PASSES ()
+      NEXT_PASS (pass_simduid_cleanup, 1);
+      NEXT_PASS (pass_lower_vector_ssa, 1);
+      NEXT_PASS (pass_lower_switch, 1);
+      NEXT_PASS (pass_cse_reciprocals, 1);
+      NEXT_PASS_WITH_ARG (pass_sprintf_length, 2, true);
+      NEXT_PASS_WITH_ARG (pass_reassoc, 2, false /* insert_powi_p */);
+      NEXT_PASS (pass_strength_reduction, 1);
+      NEXT_PASS (pass_split_paths, 1);
+      NEXT_PASS (pass_tracer, 1);
+      NEXT_PASS (pass_thread_jumps, 3);
+      NEXT_PASS_WITH_ARG (pass_dominator, 3, false /* may_peel_loop_headers_p */);
+      NEXT_PASS (pass_strlen, 1);
+      NEXT_PASS (pass_thread_jumps, 4);
+      NEXT_PASS_WITH_ARG (pass_vrp, 2, false /* warn_array_bounds_p */);
+      NEXT_PASS (pass_warn_restrict, 1);
+      /* Threading can leave many const/copy propagations in the IL.
+	 Clean them up.  */
+      NEXT_PASS (pass_copy_prop, 5);
+      NEXT_PASS (pass_dse, 3);
+      NEXT_PASS (pass_cd_dce, 3);
+      NEXT_PASS (pass_forwprop, 4);
+      NEXT_PASS_WITH_ARG (pass_phiopt, 4, false /* early_p */);
+      NEXT_PASS (pass_fold_builtins, 1);
+      NEXT_PASS (pass_optimize_widening_mul, 1);
+      NEXT_PASS (pass_store_merging, 1);
+      NEXT_PASS (pass_tail_calls, 1);
+      /* If DCE is not run before checking for uninitialized uses,
+	 we may get false warnings (e.g., testsuite/gcc.dg/uninit-5.c).
+	 However, this also causes us to misdiagnose cases that should be
+	 real warnings (e.g., testsuite/gcc.dg/pr18501.c).  */
+      NEXT_PASS (pass_dce, 7);
+      /* Split critical edges before late uninit warning to reduce the
+         number of false positives from it.  */
+      NEXT_PASS (pass_split_crit_edges, 1);
+      NEXT_PASS (pass_late_warn_uninitialized, 1);
+      NEXT_PASS (pass_uncprop, 1);
+      NEXT_PASS (pass_local_pure_const, 2);
+  POP_INSERT_PASSES ()
+  NEXT_PASS (pass_all_optimizations_g, 1);
+  PUSH_INSERT_PASSES_WITHIN (pass_all_optimizations_g)
+      NEXT_PASS (pass_remove_cgraph_callee_edges, 3);
+      NEXT_PASS_WITH_ARG (pass_strip_predict_hints, 3, false /* early_p */);
+      /* Lower remaining pieces of GIMPLE.  */
+      NEXT_PASS (pass_lower_complex, 2);
+      NEXT_PASS (pass_lower_vector_ssa, 2);
+      NEXT_PASS (pass_lower_switch, 2);
+      /* Perform simple scalar cleanup which is constant/copy propagation.  */
+      NEXT_PASS_WITH_ARG (pass_ccp, 4, true /* nonzero_p */);
+      NEXT_PASS (pass_post_ipa_warn, 2);
+      NEXT_PASS (pass_object_sizes, 3);
+      /* Fold remaining builtins.  */
+      NEXT_PASS (pass_fold_builtins, 2);
+      NEXT_PASS_WITH_ARG (pass_sprintf_length, 3, true);
+      /* Copy propagation also copy-propagates constants, this is necessary
+         to forward object-size and builtin folding results properly.  */
+      NEXT_PASS (pass_copy_prop, 6);
+      NEXT_PASS (pass_dce, 8);
+      NEXT_PASS (pass_sancov, 2);
+      NEXT_PASS (pass_asan, 2);
+      NEXT_PASS (pass_tsan, 2);
+      /* ???  We do want some kind of loop invariant motion, but we possibly
+         need to adjust LIM to be more friendly towards preserving accurate
+	 debug information here.  */
+      /* Split critical edges before late uninit warning to reduce the
+         number of false positives from it.  */
+      NEXT_PASS (pass_split_crit_edges, 2);
+      NEXT_PASS (pass_late_warn_uninitialized, 2);
+      NEXT_PASS (pass_uncprop, 2);
+      NEXT_PASS (pass_local_pure_const, 3);
+  POP_INSERT_PASSES ()
+  NEXT_PASS (pass_tm_init, 1);
+  PUSH_INSERT_PASSES_WITHIN (pass_tm_init)
+      NEXT_PASS (pass_tm_mark, 1);
+      NEXT_PASS (pass_tm_memopt, 1);
+      NEXT_PASS (pass_tm_edges, 1);
+  POP_INSERT_PASSES ()
+  NEXT_PASS (pass_simduid_cleanup, 2);
+  NEXT_PASS (pass_vtable_verify, 1);
+  NEXT_PASS (pass_lower_vaarg, 1);
+  NEXT_PASS (pass_lower_vector, 1);
+  NEXT_PASS (pass_lower_complex_O0, 1);
+  NEXT_PASS (pass_sancov_O0, 1);
+  NEXT_PASS (pass_lower_switch_O0, 1);
+  NEXT_PASS (pass_asan_O0, 1);
+  NEXT_PASS (pass_tsan_O0, 1);
+  NEXT_PASS (pass_sanopt, 1);
+  NEXT_PASS (pass_cleanup_eh, 2);
+  NEXT_PASS (pass_lower_resx, 1);
+  NEXT_PASS (pass_nrv, 1);
+  NEXT_PASS (pass_cleanup_cfg_post_optimizing, 1);
+  NEXT_PASS (pass_warn_function_noreturn, 1);
+  NEXT_PASS (pass_gen_hsail, 1);
+
+  NEXT_PASS (pass_expand, 1);
+
+  NEXT_PASS (pass_rest_of_compilation, 1);
+  PUSH_INSERT_PASSES_WITHIN (pass_rest_of_compilation)
+      NEXT_PASS (pass_instantiate_virtual_regs, 1);
+      NEXT_PASS (pass_into_cfg_layout_mode, 1);
+      NEXT_PASS (pass_jump, 1);
+      NEXT_PASS (pass_lower_subreg, 1);
+      NEXT_PASS (pass_df_initialize_opt, 1);
+      NEXT_PASS (pass_cse, 1);
+      NEXT_PASS (pass_rtl_fwprop, 1);
+      NEXT_PASS (pass_rtl_cprop, 1);
+      NEXT_PASS (pass_rtl_pre, 1);
+      NEXT_PASS (pass_rtl_hoist, 1);
+      NEXT_PASS (pass_rtl_cprop, 2);
+      NEXT_PASS (pass_rtl_store_motion, 1);
+      NEXT_PASS (pass_cse_after_global_opts, 1);
+      NEXT_PASS (pass_rtl_ifcvt, 1);
+      NEXT_PASS (pass_reginfo_init, 1);
+      /* Perform loop optimizations.  It might be better to do them a bit
+	 sooner, but we want the profile feedback to work more
+	 efficiently.  */
+      NEXT_PASS (pass_loop2, 1);
+      PUSH_INSERT_PASSES_WITHIN (pass_loop2)
+	  NEXT_PASS (pass_rtl_loop_init, 1);
+	  NEXT_PASS (pass_rtl_move_loop_invariants, 1);
+	  NEXT_PASS (pass_rtl_unroll_loops, 1);
+	  NEXT_PASS (pass_rtl_doloop, 1);
+	  NEXT_PASS (pass_rtl_loop_done, 1);
+      POP_INSERT_PASSES ()
+      NEXT_PASS (pass_web, 1);
+      NEXT_PASS (pass_rtl_cprop, 3);
+      NEXT_PASS (pass_cse2, 1);
+      NEXT_PASS (pass_rtl_dse1, 1);
+      NEXT_PASS (pass_rtl_fwprop_addr, 1);
+      NEXT_PASS (pass_inc_dec, 1);
+      NEXT_PASS (pass_initialize_regs, 1);
+      NEXT_PASS (pass_ud_rtl_dce, 1);
+      NEXT_PASS (pass_combine, 1);
+      NEXT_PASS (pass_if_after_combine, 1);
+      NEXT_PASS (pass_partition_blocks, 1);
+      NEXT_PASS (pass_outof_cfg_layout_mode, 1);
+      NEXT_PASS (pass_split_all_insns, 1);
+      NEXT_PASS (pass_lower_subreg2, 1);
+      NEXT_PASS (pass_df_initialize_no_opt, 1);
+      NEXT_PASS (pass_stack_ptr_mod, 1);
+      NEXT_PASS (pass_mode_switching, 1);
+      NEXT_PASS (pass_match_asm_constraints, 1);
+      NEXT_PASS (pass_sms, 1);
+      NEXT_PASS (pass_live_range_shrinkage, 1);
+      NEXT_PASS (pass_sched, 1);
+      NEXT_PASS (pass_early_remat, 1);
+      NEXT_PASS (pass_ira, 1);
+      NEXT_PASS (pass_reload, 1);
+      NEXT_PASS (pass_postreload, 1);
+      PUSH_INSERT_PASSES_WITHIN (pass_postreload)
+	  NEXT_PASS (pass_postreload_jump, 1);
+	  NEXT_PASS (pass_postreload_cse, 1);
+	  NEXT_PASS (pass_gcse2, 1);
+	  NEXT_PASS (pass_split_after_reload, 1);
+	  NEXT_PASS (pass_ree, 1);
+	  NEXT_PASS (pass_compare_elim_after_reload, 1);
+	  NEXT_PASS (pass_branch_target_load_optimize1, 1);
+	  NEXT_PASS (pass_thread_prologue_and_epilogue, 1);
+	  NEXT_PASS (pass_rtl_dse2, 1);
+	  NEXT_PASS (pass_stack_adjustments, 1);
+	  NEXT_PASS (pass_jump2, 1);
+	  NEXT_PASS (pass_duplicate_computed_gotos, 1);
+	  NEXT_PASS (pass_sched_fusion, 1);
+	  NEXT_PASS (pass_peephole2, 1);
+	  NEXT_PASS (pass_if_after_reload, 1);
+	  NEXT_PASS (pass_regrename, 1);
+NEXT_PASS (pass_fma_steering, 1);
+	  NEXT_PASS (pass_cprop_hardreg, 1);
+	  NEXT_PASS (pass_fast_rtl_dce, 1);
+NEXT_PASS (pass_track_speculation, 1);
+	  NEXT_PASS (pass_reorder_blocks, 1);
+	  NEXT_PASS (pass_branch_target_load_optimize2, 1);
+	  NEXT_PASS (pass_leaf_regs, 1);
+	  NEXT_PASS (pass_split_before_sched2, 1);
+	  NEXT_PASS (pass_sched2, 1);
+	  NEXT_PASS (pass_stack_regs, 1);
+	  PUSH_INSERT_PASSES_WITHIN (pass_stack_regs)
+	      NEXT_PASS (pass_split_before_regstack, 1);
+	      NEXT_PASS (pass_stack_regs_run, 1);
+	  POP_INSERT_PASSES ()
+      POP_INSERT_PASSES ()
+      NEXT_PASS (pass_late_compilation, 1);
+      PUSH_INSERT_PASSES_WITHIN (pass_late_compilation)
+	  NEXT_PASS (pass_compute_alignments, 1);
+	  NEXT_PASS (pass_variable_tracking, 1);
+	  NEXT_PASS (pass_free_cfg, 1);
+	  NEXT_PASS (pass_machine_reorg, 1);
+NEXT_PASS (pass_tag_collision_avoidance, 1);
+	  NEXT_PASS (pass_cleanup_barriers, 1);
+	  NEXT_PASS (pass_delay_slots, 1);
+	  NEXT_PASS (pass_split_for_shorten_branches, 1);
+	  NEXT_PASS (pass_convert_to_eh_region_ranges, 1);
+NEXT_PASS (pass_insert_bti, 1);
+	  NEXT_PASS (pass_shorten_branches, 1);
+	  NEXT_PASS (pass_set_nothrow_function_flags, 1);
+	  NEXT_PASS (pass_dwarf2_frame, 1);
+	  NEXT_PASS (pass_final, 1);
+      POP_INSERT_PASSES ()
+      NEXT_PASS (pass_df_finish, 1);
+  POP_INSERT_PASSES ()
+  NEXT_PASS (pass_clean_state, 1);
+  TERMINATE_PASS_LIST (all_passes)
+/* AArch64-specific passes declarations.
+   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+   Contributed by ARM Ltd.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/pass_manager.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/pass_manager.h
new file mode 100644
index 0000000..8c7d272
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/pass_manager.h
@@ -0,0 +1,149 @@
+/* pass_manager.h - The pipeline of optimization passes
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_PASS_MANAGER_H
+#define GCC_PASS_MANAGER_H
+
+class opt_pass;
+struct register_pass_info;
+
+/* Define a list of pass lists so that both passes.c and plugins can easily
+   find all the pass lists.  */
+#define GCC_PASS_LISTS \
+  DEF_PASS_LIST (all_lowering_passes) \
+  DEF_PASS_LIST (all_small_ipa_passes) \
+  DEF_PASS_LIST (all_regular_ipa_passes) \
+  DEF_PASS_LIST (all_late_ipa_passes) \
+  DEF_PASS_LIST (all_passes)
+
+#define DEF_PASS_LIST(LIST) PASS_LIST_NO_##LIST,
+enum pass_list
+{
+  GCC_PASS_LISTS
+  PASS_LIST_NUM
+};
+#undef DEF_PASS_LIST
+
+namespace gcc {
+
+class context;
+
+class pass_manager
+{
+public:
+  pass_manager (context *ctxt);
+  ~pass_manager ();
+
+  void register_pass (struct register_pass_info *pass_info);
+  void register_one_dump_file (opt_pass *pass);
+
+  opt_pass *get_pass_for_id (int id) const;
+
+  void dump_passes () const;
+
+  void dump_profile_report () const;
+
+  void finish_optimization_passes ();
+
+  /* Access to specific passes, so that the majority can be private.  */
+  void execute_early_local_passes ();
+  unsigned int execute_pass_mode_switching ();
+
+  /* Various passes are manually cloned by epiphany. */
+  opt_pass *get_pass_split_all_insns () const {
+    return pass_split_all_insns_1;
+  }
+  opt_pass *get_pass_mode_switching () const {
+    return pass_mode_switching_1;
+  }
+  opt_pass *get_pass_peephole2 () const { return pass_peephole2_1; }
+  opt_pass *get_pass_profile () const { return pass_profile_1; }
+
+  void register_pass_name (opt_pass *pass, const char *name);
+
+  opt_pass *get_pass_by_name (const char *name);
+
+  opt_pass *get_rest_of_compilation () const
+  {
+    return pass_rest_of_compilation_1;
+  }
+  opt_pass *get_clean_slate () const { return pass_clean_state_1; }
+
+public:
+  /* The root of the compilation pass tree, once constructed.  */
+  opt_pass *all_passes;
+  opt_pass *all_small_ipa_passes;
+  opt_pass *all_lowering_passes;
+  opt_pass *all_regular_ipa_passes;
+  opt_pass *all_late_ipa_passes;
+
+  /* A map from static pass id to optimization pass.  */
+  opt_pass **passes_by_id;
+  int passes_by_id_size;
+
+  opt_pass **pass_lists[PASS_LIST_NUM];
+
+private:
+  void set_pass_for_id (int id, opt_pass *pass);
+  void register_dump_files (opt_pass *pass);
+  void create_pass_tab () const;
+
+private:
+  context *m_ctxt;
+  hash_map<nofree_string_hash, opt_pass *> *m_name_to_pass_map;
+
+  /* References to all of the individual passes.
+     These fields are generated via macro expansion.
+
+     For example:
+         NEXT_PASS (pass_build_cfg, 1);
+     within pass-instances.def means that there is a field:
+         opt_pass *pass_build_cfg_1;
+
+     Similarly, the various:
+        NEXT_PASS (pass_copy_prop, 1);
+        ...
+        NEXT_PASS (pass_copy_prop, 8);
+     in pass-instances.def lead to fields:
+        opt_pass *pass_copy_prop_1;
+        ...
+        opt_pass *pass_copy_prop_8;  */
+
+#define INSERT_PASSES_AFTER(PASS)
+#define PUSH_INSERT_PASSES_WITHIN(PASS)
+#define POP_INSERT_PASSES()
+#define NEXT_PASS(PASS, NUM) opt_pass *PASS ## _ ## NUM
+#define NEXT_PASS_WITH_ARG(PASS, NUM, ARG) NEXT_PASS (PASS, NUM)
+#define TERMINATE_PASS_LIST(PASS)
+
+#include "pass-instances.def"
+
+#undef INSERT_PASSES_AFTER
+#undef PUSH_INSERT_PASSES_WITHIN
+#undef POP_INSERT_PASSES
+#undef NEXT_PASS
+#undef NEXT_PASS_WITH_ARG
+#undef TERMINATE_PASS_LIST
+
+}; // class pass_manager
+
+} // namespace gcc
+
+#endif /* ! GCC_PASS_MANAGER_H */
+
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/passes.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/passes.def
new file mode 100644
index 0000000..bc147c4
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/passes.def
@@ -0,0 +1,500 @@
+/* Description of pass structure
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/*
+ Macros that should be defined when using this file:
+   INSERT_PASSES_AFTER (PASS)
+   PUSH_INSERT_PASSES_WITHIN (PASS)
+   POP_INSERT_PASSES ()
+   NEXT_PASS (PASS)
+   TERMINATE_PASS_LIST (PASS)
+ */
+
+ /* All passes needed to lower the function into shape optimizers can
+    operate on.  These passes are always run first on the function, but
+    backend might produce already lowered functions that are not processed
+    by these passes.  */
+  INSERT_PASSES_AFTER (all_lowering_passes)
+  NEXT_PASS (pass_warn_unused_result);
+  NEXT_PASS (pass_diagnose_omp_blocks);
+  NEXT_PASS (pass_diagnose_tm_blocks);
+  NEXT_PASS (pass_lower_omp);
+  NEXT_PASS (pass_lower_cf);
+  NEXT_PASS (pass_lower_tm);
+  NEXT_PASS (pass_refactor_eh);
+  NEXT_PASS (pass_lower_eh);
+  NEXT_PASS (pass_build_cfg);
+  NEXT_PASS (pass_warn_function_return);
+  NEXT_PASS (pass_expand_omp);
+  NEXT_PASS (pass_sprintf_length, false);
+  NEXT_PASS (pass_walloca, /*strict_mode_p=*/true);
+  NEXT_PASS (pass_build_cgraph_edges);
+  TERMINATE_PASS_LIST (all_lowering_passes)
+
+  /* Interprocedural optimization passes.  */
+  INSERT_PASSES_AFTER (all_small_ipa_passes)
+  NEXT_PASS (pass_ipa_free_lang_data);
+  NEXT_PASS (pass_ipa_function_and_variable_visibility);
+  NEXT_PASS (pass_build_ssa_passes);
+  PUSH_INSERT_PASSES_WITHIN (pass_build_ssa_passes)
+      NEXT_PASS (pass_fixup_cfg);
+      NEXT_PASS (pass_build_ssa);
+      NEXT_PASS (pass_warn_nonnull_compare);
+      NEXT_PASS (pass_early_warn_uninitialized);
+      NEXT_PASS (pass_ubsan);
+      NEXT_PASS (pass_nothrow);
+      NEXT_PASS (pass_rebuild_cgraph_edges);
+  POP_INSERT_PASSES ()
+
+  NEXT_PASS (pass_local_optimization_passes);
+  PUSH_INSERT_PASSES_WITHIN (pass_local_optimization_passes)
+      NEXT_PASS (pass_fixup_cfg);
+      NEXT_PASS (pass_rebuild_cgraph_edges);
+      NEXT_PASS (pass_local_fn_summary);
+      NEXT_PASS (pass_early_inline);
+      NEXT_PASS (pass_all_early_optimizations);
+      PUSH_INSERT_PASSES_WITHIN (pass_all_early_optimizations)
+	  NEXT_PASS (pass_remove_cgraph_callee_edges);
+	  NEXT_PASS (pass_object_sizes, true /* insert_min_max_p */);
+	  /* Don't record nonzero bits before IPA to avoid
+	     using too much memory.  */
+	  NEXT_PASS (pass_ccp, false /* nonzero_p */);
+	  /* After CCP we rewrite no longer addressed locals into SSA
+	     form if possible.  */
+	  NEXT_PASS (pass_forwprop);
+          NEXT_PASS (pass_early_thread_jumps);
+	  NEXT_PASS (pass_sra_early);
+	  /* pass_build_ealias is a dummy pass that ensures that we
+	     execute TODO_rebuild_alias at this point.  */
+	  NEXT_PASS (pass_build_ealias);
+	  NEXT_PASS (pass_fre);
+	  NEXT_PASS (pass_early_vrp);
+	  NEXT_PASS (pass_merge_phi);
+          NEXT_PASS (pass_dse);
+	  NEXT_PASS (pass_cd_dce);
+	  NEXT_PASS (pass_phiopt, true /* early_p */);
+	  NEXT_PASS (pass_early_ipa_sra);
+	  NEXT_PASS (pass_tail_recursion);
+	  NEXT_PASS (pass_convert_switch);
+	  NEXT_PASS (pass_cleanup_eh);
+	  NEXT_PASS (pass_profile);
+	  NEXT_PASS (pass_local_pure_const);
+	  /* Split functions creates parts that are not run through
+	     early optimizations again.  It is thus good idea to do this
+	      late.  */
+	  NEXT_PASS (pass_split_functions);
+	  NEXT_PASS (pass_strip_predict_hints, true /* early_p */);
+      POP_INSERT_PASSES ()
+      NEXT_PASS (pass_release_ssa_names);
+      NEXT_PASS (pass_rebuild_cgraph_edges);
+      NEXT_PASS (pass_local_fn_summary);
+  POP_INSERT_PASSES ()
+
+  NEXT_PASS (pass_ipa_remove_symbols);
+  NEXT_PASS (pass_ipa_oacc);
+  PUSH_INSERT_PASSES_WITHIN (pass_ipa_oacc)
+      NEXT_PASS (pass_ipa_pta);
+      /* Pass group that runs when the function is an offloaded function
+	 containing oacc kernels loops.	 */
+      NEXT_PASS (pass_ipa_oacc_kernels);
+      PUSH_INSERT_PASSES_WITHIN (pass_ipa_oacc_kernels)
+	  NEXT_PASS (pass_oacc_kernels);
+	  PUSH_INSERT_PASSES_WITHIN (pass_oacc_kernels)
+	      NEXT_PASS (pass_ch);
+	      NEXT_PASS (pass_fre);
+	      /* We use pass_lim to rewrite in-memory iteration and reduction
+		 variable accesses in loops into local variables accesses.  */
+	      NEXT_PASS (pass_lim);
+	      NEXT_PASS (pass_dominator, false /* may_peel_loop_headers_p */);
+	      NEXT_PASS (pass_dce);
+	      NEXT_PASS (pass_parallelize_loops, true /* oacc_kernels_p */);
+	      NEXT_PASS (pass_expand_omp_ssa);
+	      NEXT_PASS (pass_rebuild_cgraph_edges);
+	  POP_INSERT_PASSES ()
+      POP_INSERT_PASSES ()
+  POP_INSERT_PASSES ()
+
+  NEXT_PASS (pass_target_clone);
+  NEXT_PASS (pass_ipa_auto_profile);
+  NEXT_PASS (pass_ipa_tree_profile);
+  PUSH_INSERT_PASSES_WITHIN (pass_ipa_tree_profile)
+      NEXT_PASS (pass_feedback_split_functions);
+  POP_INSERT_PASSES ()
+  NEXT_PASS (pass_ipa_free_fn_summary, true /* small_p */);
+  NEXT_PASS (pass_ipa_increase_alignment);
+  NEXT_PASS (pass_ipa_tm);
+  NEXT_PASS (pass_ipa_lower_emutls);
+  TERMINATE_PASS_LIST (all_small_ipa_passes)
+
+  INSERT_PASSES_AFTER (all_regular_ipa_passes)
+  NEXT_PASS (pass_ipa_whole_program_visibility);
+  NEXT_PASS (pass_ipa_profile);
+  NEXT_PASS (pass_ipa_icf);
+  NEXT_PASS (pass_ipa_devirt);
+  NEXT_PASS (pass_ipa_cp);
+  NEXT_PASS (pass_ipa_cdtor_merge);
+  NEXT_PASS (pass_ipa_hsa);
+  NEXT_PASS (pass_ipa_fn_summary);
+  NEXT_PASS (pass_ipa_inline);
+  NEXT_PASS (pass_ipa_pure_const);
+  NEXT_PASS (pass_ipa_free_fn_summary, false /* small_p */);
+  NEXT_PASS (pass_ipa_reference);
+  /* This pass needs to be scheduled after any IP code duplication.   */
+  NEXT_PASS (pass_ipa_single_use);
+  /* Comdat privatization come last, as direct references to comdat local
+     symbols are not allowed outside of the comdat group.  Privatizing early
+     would result in missed optimizations due to this restriction.  */
+  NEXT_PASS (pass_ipa_comdats);
+  TERMINATE_PASS_LIST (all_regular_ipa_passes)
+
+  /* Simple IPA passes executed after the regular passes.  In WHOPR mode the
+     passes are executed after partitioning and thus see just parts of the
+     compiled unit.  */
+  INSERT_PASSES_AFTER (all_late_ipa_passes)
+  NEXT_PASS (pass_materialize_all_clones);
+  NEXT_PASS (pass_ipa_pta);
+  NEXT_PASS (pass_omp_simd_clone);
+  TERMINATE_PASS_LIST (all_late_ipa_passes)
+
+  /* These passes are run after IPA passes on every function that is being
+     output to the assembler file.  */
+  INSERT_PASSES_AFTER (all_passes)
+  NEXT_PASS (pass_fixup_cfg);
+  NEXT_PASS (pass_lower_eh_dispatch);
+  NEXT_PASS (pass_oacc_device_lower);
+  NEXT_PASS (pass_omp_device_lower);
+  NEXT_PASS (pass_omp_target_link);
+  NEXT_PASS (pass_all_optimizations);
+  PUSH_INSERT_PASSES_WITHIN (pass_all_optimizations)
+      NEXT_PASS (pass_remove_cgraph_callee_edges);
+      /* Initial scalar cleanups before alias computation.
+	 They ensure memory accesses are not indirect wherever possible.  */
+      NEXT_PASS (pass_strip_predict_hints, false /* early_p */);
+      NEXT_PASS (pass_ccp, true /* nonzero_p */);
+      NEXT_PASS (pass_post_ipa_warn);
+      /* After CCP we rewrite no longer addressed locals into SSA
+	 form if possible.  */
+      NEXT_PASS (pass_complete_unrolli);
+      NEXT_PASS (pass_backprop);
+      NEXT_PASS (pass_phiprop);
+      NEXT_PASS (pass_forwprop);
+      NEXT_PASS (pass_object_sizes, false /* insert_min_max_p */);
+      /* pass_build_alias is a dummy pass that ensures that we
+	 execute TODO_rebuild_alias at this point.  */
+      NEXT_PASS (pass_build_alias);
+      NEXT_PASS (pass_return_slot);
+      NEXT_PASS (pass_fre);
+      NEXT_PASS (pass_merge_phi);
+      NEXT_PASS (pass_thread_jumps);
+      NEXT_PASS (pass_vrp, true /* warn_array_bounds_p */);
+      NEXT_PASS (pass_dce);
+      NEXT_PASS (pass_stdarg);
+      NEXT_PASS (pass_call_cdce);
+      NEXT_PASS (pass_cselim);
+      NEXT_PASS (pass_copy_prop);
+      NEXT_PASS (pass_tree_ifcombine);
+      NEXT_PASS (pass_merge_phi);
+      NEXT_PASS (pass_phiopt, false /* early_p */);
+      NEXT_PASS (pass_tail_recursion);
+      NEXT_PASS (pass_ch);
+      NEXT_PASS (pass_lower_complex);
+      NEXT_PASS (pass_sra);
+      /* The dom pass will also resolve all __builtin_constant_p calls
+         that are still there to 0.  This has to be done after some
+	 propagations have already run, but before some more dead code
+	 is removed, and this place fits nicely.  Remember this when
+	 trying to move or duplicate pass_dominator somewhere earlier.  */
+      NEXT_PASS (pass_thread_jumps);
+      NEXT_PASS (pass_dominator, true /* may_peel_loop_headers_p */);
+      /* Threading can leave many const/copy propagations in the IL.
+	 Clean them up.  Failure to do so well can lead to false
+	 positives from warnings for erroneous code.  */
+      NEXT_PASS (pass_copy_prop);
+      /* Identify paths that should never be executed in a conforming
+	 program and isolate those paths.  */
+      NEXT_PASS (pass_isolate_erroneous_paths);
+      NEXT_PASS (pass_dse);
+      NEXT_PASS (pass_reassoc, true /* insert_powi_p */);
+      NEXT_PASS (pass_dce);
+      NEXT_PASS (pass_forwprop);
+      NEXT_PASS (pass_phiopt, false /* early_p */);
+      NEXT_PASS (pass_ccp, true /* nonzero_p */);
+      /* After CCP we rewrite no longer addressed locals into SSA
+	 form if possible.  */
+      NEXT_PASS (pass_cse_sincos);
+      NEXT_PASS (pass_optimize_bswap);
+      NEXT_PASS (pass_laddress);
+      NEXT_PASS (pass_lim);
+      NEXT_PASS (pass_walloca, false);
+      NEXT_PASS (pass_pre);
+      NEXT_PASS (pass_sink_code);
+      NEXT_PASS (pass_sancov);
+      NEXT_PASS (pass_asan);
+      NEXT_PASS (pass_tsan);
+      NEXT_PASS (pass_dce);
+      /* Pass group that runs when 1) enabled, 2) there are loops
+	 in the function.  Make sure to run pass_fix_loops before
+	 to discover/remove loops before running the gate function
+	 of pass_tree_loop.  */
+      NEXT_PASS (pass_fix_loops);
+      NEXT_PASS (pass_tree_loop);
+      PUSH_INSERT_PASSES_WITHIN (pass_tree_loop)
+	  NEXT_PASS (pass_tree_loop_init);
+	  NEXT_PASS (pass_tree_unswitch);
+	  NEXT_PASS (pass_scev_cprop);
+	  NEXT_PASS (pass_loop_split);
+	  NEXT_PASS (pass_loop_versioning);
+	  NEXT_PASS (pass_loop_jam);
+	  /* All unswitching, final value replacement and splitting can expose
+	     empty loops.  Remove them now.  */
+	  NEXT_PASS (pass_cd_dce);
+	  NEXT_PASS (pass_iv_canon);
+	  NEXT_PASS (pass_loop_distribution);
+	  NEXT_PASS (pass_linterchange);
+	  NEXT_PASS (pass_copy_prop);
+	  NEXT_PASS (pass_graphite);
+	  PUSH_INSERT_PASSES_WITHIN (pass_graphite)
+	      NEXT_PASS (pass_graphite_transforms);
+	      NEXT_PASS (pass_lim);
+	      NEXT_PASS (pass_copy_prop);
+	      NEXT_PASS (pass_dce);
+	  POP_INSERT_PASSES ()
+	  NEXT_PASS (pass_parallelize_loops, false /* oacc_kernels_p */);
+	  NEXT_PASS (pass_expand_omp_ssa);
+	  NEXT_PASS (pass_ch_vect);
+	  NEXT_PASS (pass_if_conversion);
+	  /* pass_vectorize must immediately follow pass_if_conversion.
+	     Please do not add any other passes in between.  */
+	  NEXT_PASS (pass_vectorize);
+          PUSH_INSERT_PASSES_WITHIN (pass_vectorize)
+	      NEXT_PASS (pass_dce);
+          POP_INSERT_PASSES ()
+          NEXT_PASS (pass_predcom);
+	  NEXT_PASS (pass_complete_unroll);
+	  NEXT_PASS (pass_slp_vectorize);
+	  NEXT_PASS (pass_loop_prefetch);
+	  /* Run IVOPTs after the last pass that uses data-reference analysis
+	     as that doesn't handle TARGET_MEM_REFs.  */
+	  NEXT_PASS (pass_iv_optimize);
+	  NEXT_PASS (pass_lim);
+	  NEXT_PASS (pass_tree_loop_done);
+      POP_INSERT_PASSES ()
+      /* Pass group that runs when pass_tree_loop is disabled or there
+         are no loops in the function.  */
+      NEXT_PASS (pass_tree_no_loop);
+      PUSH_INSERT_PASSES_WITHIN (pass_tree_no_loop)
+	  NEXT_PASS (pass_slp_vectorize);
+      POP_INSERT_PASSES ()
+      NEXT_PASS (pass_simduid_cleanup);
+      NEXT_PASS (pass_lower_vector_ssa);
+      NEXT_PASS (pass_lower_switch);
+      NEXT_PASS (pass_cse_reciprocals);
+      NEXT_PASS (pass_sprintf_length, true);
+      NEXT_PASS (pass_reassoc, false /* insert_powi_p */);
+      NEXT_PASS (pass_strength_reduction);
+      NEXT_PASS (pass_split_paths);
+      NEXT_PASS (pass_tracer);
+      NEXT_PASS (pass_thread_jumps);
+      NEXT_PASS (pass_dominator, false /* may_peel_loop_headers_p */);
+      NEXT_PASS (pass_strlen);
+      NEXT_PASS (pass_thread_jumps);
+      NEXT_PASS (pass_vrp, false /* warn_array_bounds_p */);
+      NEXT_PASS (pass_warn_restrict);
+      /* Threading can leave many const/copy propagations in the IL.
+	 Clean them up.  */
+      NEXT_PASS (pass_copy_prop);
+      NEXT_PASS (pass_dse);
+      NEXT_PASS (pass_cd_dce);
+      NEXT_PASS (pass_forwprop);
+      NEXT_PASS (pass_phiopt, false /* early_p */);
+      NEXT_PASS (pass_fold_builtins);
+      NEXT_PASS (pass_optimize_widening_mul);
+      NEXT_PASS (pass_store_merging);
+      NEXT_PASS (pass_tail_calls);
+      /* If DCE is not run before checking for uninitialized uses,
+	 we may get false warnings (e.g., testsuite/gcc.dg/uninit-5.c).
+	 However, this also causes us to misdiagnose cases that should be
+	 real warnings (e.g., testsuite/gcc.dg/pr18501.c).  */
+      NEXT_PASS (pass_dce);
+      /* Split critical edges before late uninit warning to reduce the
+         number of false positives from it.  */
+      NEXT_PASS (pass_split_crit_edges);
+      NEXT_PASS (pass_late_warn_uninitialized);
+      NEXT_PASS (pass_uncprop);
+      NEXT_PASS (pass_local_pure_const);
+  POP_INSERT_PASSES ()
+  NEXT_PASS (pass_all_optimizations_g);
+  PUSH_INSERT_PASSES_WITHIN (pass_all_optimizations_g)
+      NEXT_PASS (pass_remove_cgraph_callee_edges);
+      NEXT_PASS (pass_strip_predict_hints, false /* early_p */);
+      /* Lower remaining pieces of GIMPLE.  */
+      NEXT_PASS (pass_lower_complex);
+      NEXT_PASS (pass_lower_vector_ssa);
+      NEXT_PASS (pass_lower_switch);
+      /* Perform simple scalar cleanup which is constant/copy propagation.  */
+      NEXT_PASS (pass_ccp, true /* nonzero_p */);
+      NEXT_PASS (pass_post_ipa_warn);
+      NEXT_PASS (pass_object_sizes);
+      /* Fold remaining builtins.  */
+      NEXT_PASS (pass_fold_builtins);
+      NEXT_PASS (pass_sprintf_length, true);
+      /* Copy propagation also copy-propagates constants, this is necessary
+         to forward object-size and builtin folding results properly.  */
+      NEXT_PASS (pass_copy_prop);
+      NEXT_PASS (pass_dce);
+      NEXT_PASS (pass_sancov);
+      NEXT_PASS (pass_asan);
+      NEXT_PASS (pass_tsan);
+      /* ???  We do want some kind of loop invariant motion, but we possibly
+         need to adjust LIM to be more friendly towards preserving accurate
+	 debug information here.  */
+      /* Split critical edges before late uninit warning to reduce the
+         number of false positives from it.  */
+      NEXT_PASS (pass_split_crit_edges);
+      NEXT_PASS (pass_late_warn_uninitialized);
+      NEXT_PASS (pass_uncprop);
+      NEXT_PASS (pass_local_pure_const);
+  POP_INSERT_PASSES ()
+  NEXT_PASS (pass_tm_init);
+  PUSH_INSERT_PASSES_WITHIN (pass_tm_init)
+      NEXT_PASS (pass_tm_mark);
+      NEXT_PASS (pass_tm_memopt);
+      NEXT_PASS (pass_tm_edges);
+  POP_INSERT_PASSES ()
+  NEXT_PASS (pass_simduid_cleanup);
+  NEXT_PASS (pass_vtable_verify);
+  NEXT_PASS (pass_lower_vaarg);
+  NEXT_PASS (pass_lower_vector);
+  NEXT_PASS (pass_lower_complex_O0);
+  NEXT_PASS (pass_sancov_O0);
+  NEXT_PASS (pass_lower_switch_O0);
+  NEXT_PASS (pass_asan_O0);
+  NEXT_PASS (pass_tsan_O0);
+  NEXT_PASS (pass_sanopt);
+  NEXT_PASS (pass_cleanup_eh);
+  NEXT_PASS (pass_lower_resx);
+  NEXT_PASS (pass_nrv);
+  NEXT_PASS (pass_cleanup_cfg_post_optimizing);
+  NEXT_PASS (pass_warn_function_noreturn);
+  NEXT_PASS (pass_gen_hsail);
+
+  NEXT_PASS (pass_expand);
+
+  NEXT_PASS (pass_rest_of_compilation);
+  PUSH_INSERT_PASSES_WITHIN (pass_rest_of_compilation)
+      NEXT_PASS (pass_instantiate_virtual_regs);
+      NEXT_PASS (pass_into_cfg_layout_mode);
+      NEXT_PASS (pass_jump);
+      NEXT_PASS (pass_lower_subreg);
+      NEXT_PASS (pass_df_initialize_opt);
+      NEXT_PASS (pass_cse);
+      NEXT_PASS (pass_rtl_fwprop);
+      NEXT_PASS (pass_rtl_cprop);
+      NEXT_PASS (pass_rtl_pre);
+      NEXT_PASS (pass_rtl_hoist);
+      NEXT_PASS (pass_rtl_cprop);
+      NEXT_PASS (pass_rtl_store_motion);
+      NEXT_PASS (pass_cse_after_global_opts);
+      NEXT_PASS (pass_rtl_ifcvt);
+      NEXT_PASS (pass_reginfo_init);
+      /* Perform loop optimizations.  It might be better to do them a bit
+	 sooner, but we want the profile feedback to work more
+	 efficiently.  */
+      NEXT_PASS (pass_loop2);
+      PUSH_INSERT_PASSES_WITHIN (pass_loop2)
+	  NEXT_PASS (pass_rtl_loop_init);
+	  NEXT_PASS (pass_rtl_move_loop_invariants);
+	  NEXT_PASS (pass_rtl_unroll_loops);
+	  NEXT_PASS (pass_rtl_doloop);
+	  NEXT_PASS (pass_rtl_loop_done);
+      POP_INSERT_PASSES ()
+      NEXT_PASS (pass_web);
+      NEXT_PASS (pass_rtl_cprop);
+      NEXT_PASS (pass_cse2);
+      NEXT_PASS (pass_rtl_dse1);
+      NEXT_PASS (pass_rtl_fwprop_addr);
+      NEXT_PASS (pass_inc_dec);
+      NEXT_PASS (pass_initialize_regs);
+      NEXT_PASS (pass_ud_rtl_dce);
+      NEXT_PASS (pass_combine);
+      NEXT_PASS (pass_if_after_combine);
+      NEXT_PASS (pass_partition_blocks);
+      NEXT_PASS (pass_outof_cfg_layout_mode);
+      NEXT_PASS (pass_split_all_insns);
+      NEXT_PASS (pass_lower_subreg2);
+      NEXT_PASS (pass_df_initialize_no_opt);
+      NEXT_PASS (pass_stack_ptr_mod);
+      NEXT_PASS (pass_mode_switching);
+      NEXT_PASS (pass_match_asm_constraints);
+      NEXT_PASS (pass_sms);
+      NEXT_PASS (pass_live_range_shrinkage);
+      NEXT_PASS (pass_sched);
+      NEXT_PASS (pass_early_remat);
+      NEXT_PASS (pass_ira);
+      NEXT_PASS (pass_reload);
+      NEXT_PASS (pass_postreload);
+      PUSH_INSERT_PASSES_WITHIN (pass_postreload)
+	  NEXT_PASS (pass_postreload_jump);
+	  NEXT_PASS (pass_postreload_cse);
+	  NEXT_PASS (pass_gcse2);
+	  NEXT_PASS (pass_split_after_reload);
+	  NEXT_PASS (pass_ree);
+	  NEXT_PASS (pass_compare_elim_after_reload);
+	  NEXT_PASS (pass_branch_target_load_optimize1);
+	  NEXT_PASS (pass_thread_prologue_and_epilogue);
+	  NEXT_PASS (pass_rtl_dse2);
+	  NEXT_PASS (pass_stack_adjustments);
+	  NEXT_PASS (pass_jump2);
+	  NEXT_PASS (pass_duplicate_computed_gotos);
+	  NEXT_PASS (pass_sched_fusion);
+	  NEXT_PASS (pass_peephole2);
+	  NEXT_PASS (pass_if_after_reload);
+	  NEXT_PASS (pass_regrename);
+	  NEXT_PASS (pass_cprop_hardreg);
+	  NEXT_PASS (pass_fast_rtl_dce);
+	  NEXT_PASS (pass_reorder_blocks);
+	  NEXT_PASS (pass_branch_target_load_optimize2);
+	  NEXT_PASS (pass_leaf_regs);
+	  NEXT_PASS (pass_split_before_sched2);
+	  NEXT_PASS (pass_sched2);
+	  NEXT_PASS (pass_stack_regs);
+	  PUSH_INSERT_PASSES_WITHIN (pass_stack_regs)
+	      NEXT_PASS (pass_split_before_regstack);
+	      NEXT_PASS (pass_stack_regs_run);
+	  POP_INSERT_PASSES ()
+      POP_INSERT_PASSES ()
+      NEXT_PASS (pass_late_compilation);
+      PUSH_INSERT_PASSES_WITHIN (pass_late_compilation)
+	  NEXT_PASS (pass_compute_alignments);
+	  NEXT_PASS (pass_variable_tracking);
+	  NEXT_PASS (pass_free_cfg);
+	  NEXT_PASS (pass_machine_reorg);
+	  NEXT_PASS (pass_cleanup_barriers);
+	  NEXT_PASS (pass_delay_slots);
+	  NEXT_PASS (pass_split_for_shorten_branches);
+	  NEXT_PASS (pass_convert_to_eh_region_ranges);
+	  NEXT_PASS (pass_shorten_branches);
+	  NEXT_PASS (pass_set_nothrow_function_flags);
+	  NEXT_PASS (pass_dwarf2_frame);
+	  NEXT_PASS (pass_final);
+      POP_INSERT_PASSES ()
+      NEXT_PASS (pass_df_finish);
+  POP_INSERT_PASSES ()
+  NEXT_PASS (pass_clean_state);
+  TERMINATE_PASS_LIST (all_passes)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/plugin-api.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/plugin-api.h
new file mode 100644
index 0000000..2076bda
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/plugin-api.h
@@ -0,0 +1,483 @@
+/* plugin-api.h -- External linker plugin API.  */
+
+/* Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Written by Cary Coutant <ccoutant@google.com>.
+
+   This file is part of binutils.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+/* This file defines the interface for writing a linker plugin, which is
+   described at < http://gcc.gnu.org/wiki/whopr/driver >.  */
+
+#ifndef PLUGIN_API_H
+#define PLUGIN_API_H
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#elif defined(HAVE_INTTYPES_H)
+#include <inttypes.h>
+#endif
+#include <sys/types.h>
+#if !defined(HAVE_STDINT_H) && !defined(HAVE_INTTYPES_H) && \
+    !defined(UINT64_MAX) && !defined(uint64_t)
+#error cannot find uint64_t type
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* Status code returned by most API routines.  */
+
+enum ld_plugin_status
+{
+  LDPS_OK = 0,
+  LDPS_NO_SYMS,         /* Attempt to get symbols that haven't been added. */
+  LDPS_BAD_HANDLE,      /* No claimed object associated with given handle. */
+  LDPS_ERR
+  /* Additional Error codes TBD.  */
+};
+
+/* The version of the API specification.  */
+
+enum ld_plugin_api_version
+{
+  LD_PLUGIN_API_VERSION = 1
+};
+
+/* The type of output file being generated by the linker.  */
+
+enum ld_plugin_output_file_type
+{
+  LDPO_REL,
+  LDPO_EXEC,
+  LDPO_DYN,
+  LDPO_PIE
+};
+
+/* An input file managed by the plugin library.  */
+
+struct ld_plugin_input_file
+{
+  const char *name;
+  int fd;
+  off_t offset;
+  off_t filesize;
+  void *handle;
+};
+
+/* A symbol belonging to an input file managed by the plugin library.  */
+
+struct ld_plugin_symbol
+{
+  char *name;
+  char *version;
+  int def;
+  int visibility;
+  uint64_t size;
+  char *comdat_key;
+  int resolution;
+};
+
+/* An object's section.  */
+
+struct ld_plugin_section
+{
+  const void* handle;
+  unsigned int shndx;
+};
+
+/* Whether the symbol is a definition, reference, or common, weak or not.  */
+
+enum ld_plugin_symbol_kind
+{
+  LDPK_DEF,
+  LDPK_WEAKDEF,
+  LDPK_UNDEF,
+  LDPK_WEAKUNDEF,
+  LDPK_COMMON
+};
+
+/* The visibility of the symbol.  */
+
+enum ld_plugin_symbol_visibility
+{
+  LDPV_DEFAULT,
+  LDPV_PROTECTED,
+  LDPV_INTERNAL,
+  LDPV_HIDDEN
+};
+
+/* How a symbol is resolved.  */
+
+enum ld_plugin_symbol_resolution
+{
+  LDPR_UNKNOWN = 0,
+
+  /* Symbol is still undefined at this point.  */
+  LDPR_UNDEF,
+
+  /* This is the prevailing definition of the symbol, with references from
+     regular object code.  */
+  LDPR_PREVAILING_DEF,
+
+  /* This is the prevailing definition of the symbol, with no
+     references from regular objects.  It is only referenced from IR
+     code.  */
+  LDPR_PREVAILING_DEF_IRONLY,
+
+  /* This definition was pre-empted by a definition in a regular
+     object file.  */
+  LDPR_PREEMPTED_REG,
+
+  /* This definition was pre-empted by a definition in another IR file.  */
+  LDPR_PREEMPTED_IR,
+
+  /* This symbol was resolved by a definition in another IR file.  */
+  LDPR_RESOLVED_IR,
+
+  /* This symbol was resolved by a definition in a regular object
+     linked into the main executable.  */
+  LDPR_RESOLVED_EXEC,
+
+  /* This symbol was resolved by a definition in a shared object.  */
+  LDPR_RESOLVED_DYN,
+
+  /* This is the prevailing definition of the symbol, with no
+     references from regular objects.  It is only referenced from IR
+     code, but the symbol is exported and may be referenced from
+     a dynamic object (not seen at link time).  */
+  LDPR_PREVAILING_DEF_IRONLY_EXP
+};
+
+/* The plugin library's "claim file" handler.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_claim_file_handler) (
+  const struct ld_plugin_input_file *file, int *claimed);
+
+/* The plugin library's "all symbols read" handler.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_all_symbols_read_handler) (void);
+
+/* The plugin library's cleanup handler.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_cleanup_handler) (void);
+
+/* The linker's interface for registering the "claim file" handler.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_register_claim_file) (ld_plugin_claim_file_handler handler);
+
+/* The linker's interface for registering the "all symbols read" handler.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_register_all_symbols_read) (
+  ld_plugin_all_symbols_read_handler handler);
+
+/* The linker's interface for registering the cleanup handler.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_register_cleanup) (ld_plugin_cleanup_handler handler);
+
+/* The linker's interface for adding symbols from a claimed input file.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_add_symbols) (void *handle, int nsyms,
+                          const struct ld_plugin_symbol *syms);
+
+/* The linker's interface for getting the input file information with
+   an open (possibly re-opened) file descriptor.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_input_file) (const void *handle,
+                             struct ld_plugin_input_file *file);
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_view) (const void *handle, const void **viewp);
+
+/* The linker's interface for releasing the input file.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_release_input_file) (const void *handle);
+
+/* The linker's interface for retrieving symbol resolution information.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_symbols) (const void *handle, int nsyms,
+                          struct ld_plugin_symbol *syms);
+
+/* The linker's interface for adding a compiled input file.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_add_input_file) (const char *pathname);
+
+/* The linker's interface for adding a library that should be searched.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_add_input_library) (const char *libname);
+
+/* The linker's interface for adding a library path that should be searched.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_set_extra_library_path) (const char *path);
+
+/* The linker's interface for issuing a warning or error message.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_message) (int level, const char *format, ...);
+
+/* The linker's interface for retrieving the number of sections in an object.
+   The handle is obtained in the claim_file handler.  This interface should
+   only be invoked in the claim_file handler.   This function sets *COUNT to
+   the number of sections in the object.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_input_section_count) (const void* handle, unsigned int *count);
+
+/* The linker's interface for retrieving the section type of a specific
+   section in an object.  This interface should only be invoked in the
+   claim_file handler.  This function sets *TYPE to an ELF SHT_xxx value.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_input_section_type) (const struct ld_plugin_section section,
+                                     unsigned int *type);
+
+/* The linker's interface for retrieving the name of a specific section in
+   an object. This interface should only be invoked in the claim_file handler.
+   This function sets *SECTION_NAME_PTR to a null-terminated buffer allocated
+   by malloc.  The plugin must free *SECTION_NAME_PTR.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_input_section_name) (const struct ld_plugin_section section,
+                                     char **section_name_ptr);
+
+/* The linker's interface for retrieving the contents of a specific section
+   in an object.  This interface should only be invoked in the claim_file
+   handler.  This function sets *SECTION_CONTENTS to point to a buffer that is
+   valid until clam_file handler returns.  It sets *LEN to the size of the
+   buffer.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_input_section_contents) (const struct ld_plugin_section section,
+                                         const unsigned char **section_contents,
+                                         size_t* len);
+
+/* The linker's interface for specifying the desired order of sections.
+   The sections should be specifed using the array SECTION_LIST in the
+   order in which they should appear in the final layout.  NUM_SECTIONS
+   specifies the number of entries in each array.  This should be invoked
+   in the all_symbols_read handler.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_update_section_order) (const struct ld_plugin_section *section_list,
+				   unsigned int num_sections);
+
+/* The linker's interface for specifying that reordering of sections is
+   desired so that the linker can prepare for it.  This should be invoked
+   before update_section_order, preferably in the claim_file handler.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_allow_section_ordering) (void);
+
+/* The linker's interface for specifying that a subset of sections is
+   to be mapped to a unique segment.  If the plugin wants to call
+   unique_segment_for_sections, it must call this function from a
+   claim_file_handler or when it is first loaded.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_allow_unique_segment_for_sections) (void);
+
+/* The linker's interface for specifying that a specific set of sections
+   must be mapped to a unique segment.  ELF segments do not have names
+   and the NAME is used as the name of the newly created output section
+   that is then placed in the unique PT_LOAD segment.  FLAGS is used to
+   specify if any additional segment flags need to be set.  For instance,
+   a specific segment flag can be set to identify this segment.  Unsetting
+   segment flags that would be set by default is not possible.  The
+   parameter SEGMENT_ALIGNMENT when non-zero will override the default.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_unique_segment_for_sections) (
+    const char* segment_name,
+    uint64_t segment_flags,
+    uint64_t segment_alignment,
+    const struct ld_plugin_section * section_list,
+    unsigned int num_sections);
+
+/* The linker's interface for retrieving the section alignment requirement
+   of a specific section in an object.  This interface should only be invoked in the
+   claim_file handler.  This function sets *ADDRALIGN to the ELF sh_addralign
+   value of the input section.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_input_section_alignment) (const struct ld_plugin_section section,
+                                          unsigned int *addralign);
+
+/* The linker's interface for retrieving the section size of a specific section
+   in an object.  This interface should only be invoked in the claim_file handler.
+   This function sets *SECSIZE to the ELF sh_size
+   value of the input section.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_input_section_size) (const struct ld_plugin_section section,
+                                     uint64_t *secsize);
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_new_input_handler) (const struct ld_plugin_input_file *file);
+
+/* The linker's interface for registering the "new_input" handler. This handler
+   will be notified when a new input file has been added after the
+   all_symbols_read event, allowing the plugin to, for example, set a unique
+   segment for sections in plugin-generated input files. */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_register_new_input) (ld_plugin_new_input_handler handler);
+
+/* The linker's interface for getting the list of wrapped symbols using the
+   --wrap option. This sets *NUM_SYMBOLS to number of wrapped symbols and
+   *WRAP_SYMBOL_LIST to the list of wrapped symbols. */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_get_wrap_symbols) (uint64_t *num_symbols,
+                               const char ***wrap_symbol_list);
+
+enum ld_plugin_level
+{
+  LDPL_INFO,
+  LDPL_WARNING,
+  LDPL_ERROR,
+  LDPL_FATAL
+};
+
+/* Values for the tv_tag field of the transfer vector.  */
+
+enum ld_plugin_tag
+{
+  LDPT_NULL = 0,
+  LDPT_API_VERSION = 1,
+  LDPT_GOLD_VERSION = 2,
+  LDPT_LINKER_OUTPUT = 3,
+  LDPT_OPTION = 4,
+  LDPT_REGISTER_CLAIM_FILE_HOOK = 5,
+  LDPT_REGISTER_ALL_SYMBOLS_READ_HOOK = 6,
+  LDPT_REGISTER_CLEANUP_HOOK = 7,
+  LDPT_ADD_SYMBOLS = 8,
+  LDPT_GET_SYMBOLS = 9,
+  LDPT_ADD_INPUT_FILE = 10,
+  LDPT_MESSAGE = 11,
+  LDPT_GET_INPUT_FILE = 12,
+  LDPT_RELEASE_INPUT_FILE = 13,
+  LDPT_ADD_INPUT_LIBRARY = 14,
+  LDPT_OUTPUT_NAME = 15,
+  LDPT_SET_EXTRA_LIBRARY_PATH = 16,
+  LDPT_GNU_LD_VERSION = 17,
+  LDPT_GET_VIEW = 18,
+  LDPT_GET_INPUT_SECTION_COUNT = 19,
+  LDPT_GET_INPUT_SECTION_TYPE = 20,
+  LDPT_GET_INPUT_SECTION_NAME = 21,
+  LDPT_GET_INPUT_SECTION_CONTENTS = 22,
+  LDPT_UPDATE_SECTION_ORDER = 23,
+  LDPT_ALLOW_SECTION_ORDERING = 24,
+  LDPT_GET_SYMBOLS_V2 = 25,
+  LDPT_ALLOW_UNIQUE_SEGMENT_FOR_SECTIONS = 26,
+  LDPT_UNIQUE_SEGMENT_FOR_SECTIONS = 27,
+  LDPT_GET_SYMBOLS_V3 = 28,
+  LDPT_GET_INPUT_SECTION_ALIGNMENT = 29,
+  LDPT_GET_INPUT_SECTION_SIZE = 30,
+  LDPT_REGISTER_NEW_INPUT_HOOK = 31,
+  LDPT_GET_WRAP_SYMBOLS = 32
+};
+
+/* The plugin transfer vector.  */
+
+struct ld_plugin_tv
+{
+  enum ld_plugin_tag tv_tag;
+  union
+  {
+    int tv_val;
+    const char *tv_string;
+    ld_plugin_register_claim_file tv_register_claim_file;
+    ld_plugin_register_all_symbols_read tv_register_all_symbols_read;
+    ld_plugin_register_cleanup tv_register_cleanup;
+    ld_plugin_add_symbols tv_add_symbols;
+    ld_plugin_get_symbols tv_get_symbols;
+    ld_plugin_add_input_file tv_add_input_file;
+    ld_plugin_message tv_message;
+    ld_plugin_get_input_file tv_get_input_file;
+    ld_plugin_get_view tv_get_view;
+    ld_plugin_release_input_file tv_release_input_file;
+    ld_plugin_add_input_library tv_add_input_library;
+    ld_plugin_set_extra_library_path tv_set_extra_library_path;
+    ld_plugin_get_input_section_count tv_get_input_section_count;
+    ld_plugin_get_input_section_type tv_get_input_section_type;
+    ld_plugin_get_input_section_name tv_get_input_section_name;
+    ld_plugin_get_input_section_contents tv_get_input_section_contents;
+    ld_plugin_update_section_order tv_update_section_order;
+    ld_plugin_allow_section_ordering tv_allow_section_ordering;
+    ld_plugin_allow_unique_segment_for_sections tv_allow_unique_segment_for_sections; 
+    ld_plugin_unique_segment_for_sections tv_unique_segment_for_sections;
+    ld_plugin_get_input_section_alignment tv_get_input_section_alignment;
+    ld_plugin_get_input_section_size tv_get_input_section_size;
+    ld_plugin_register_new_input tv_register_new_input;
+    ld_plugin_get_wrap_symbols tv_get_wrap_symbols;
+  } tv_u;
+};
+
+/* The plugin library's "onload" entry point.  */
+
+typedef
+enum ld_plugin_status
+(*ld_plugin_onload) (struct ld_plugin_tv *tv);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(PLUGIN_API_H) */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/plugin-version.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/plugin-version.h
new file mode 100644
index 0000000..2abe0ff
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/plugin-version.h
@@ -0,0 +1,18 @@
+#include "configargs.h"
+
+#define GCCPLUGIN_VERSION_MAJOR   9
+#define GCCPLUGIN_VERSION_MINOR   1
+#define GCCPLUGIN_VERSION_PATCHLEVEL   1
+#define GCCPLUGIN_VERSION  (GCCPLUGIN_VERSION_MAJOR*1000 + GCCPLUGIN_VERSION_MINOR)
+
+static char basever[] = "9.1.1";
+static char datestamp[] = "20190503";
+static char devphase[] = "";
+static char revision[] = "";
+
+/* FIXME plugins: We should make the version information more precise.
+   One way to do is to add a checksum. */
+
+static struct plugin_gcc_version gcc_version = {basever, datestamp,
+						devphase, revision,
+						configuration_arguments};
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/plugin.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/plugin.def
new file mode 100644
index 0000000..eb31f1a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/plugin.def
@@ -0,0 +1,108 @@
+/* This file contains the definitions for plugin events in GCC.
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Called before parsing the body of a function.  */
+DEFEVENT (PLUGIN_START_PARSE_FUNCTION)
+
+/* After finishing parsing a function. */
+DEFEVENT (PLUGIN_FINISH_PARSE_FUNCTION)
+
+/* To hook into pass manager.  */
+DEFEVENT (PLUGIN_PASS_MANAGER_SETUP)
+
+/* After finishing parsing a type.  */
+DEFEVENT (PLUGIN_FINISH_TYPE)
+
+/* After finishing parsing a declaration. */
+DEFEVENT (PLUGIN_FINISH_DECL)
+
+/* Useful for summary processing.  */
+DEFEVENT (PLUGIN_FINISH_UNIT)
+
+/* Allows to see low level AST in C and C++ frontends. */
+DEFEVENT (PLUGIN_PRE_GENERICIZE)
+
+/* Called before GCC exits.  */
+DEFEVENT (PLUGIN_FINISH)
+
+/* Information about the plugin. */
+DEFEVENT (PLUGIN_INFO)
+
+/* Called at start of GCC Garbage Collection. */
+DEFEVENT (PLUGIN_GGC_START)
+
+/* Extend the GGC marking. */
+DEFEVENT (PLUGIN_GGC_MARKING)
+
+/* Called at end of GGC. */
+DEFEVENT (PLUGIN_GGC_END)
+
+/* Register an extra GGC root table. */
+DEFEVENT (PLUGIN_REGISTER_GGC_ROOTS)
+
+/* Called during attribute registration.  */
+DEFEVENT (PLUGIN_ATTRIBUTES)
+
+/* Called before processing a translation unit.  */
+DEFEVENT (PLUGIN_START_UNIT)
+
+/* Called during pragma registration.  */
+DEFEVENT (PLUGIN_PRAGMAS)
+
+/* Called before first pass from all_passes.  */
+DEFEVENT (PLUGIN_ALL_PASSES_START)
+
+/* Called after last pass from all_passes.  */
+DEFEVENT (PLUGIN_ALL_PASSES_END)
+
+/* Called before first ipa pass.  */
+DEFEVENT (PLUGIN_ALL_IPA_PASSES_START)
+
+/* Called after last ipa pass.  */
+DEFEVENT (PLUGIN_ALL_IPA_PASSES_END)
+
+/* Allows to override pass gate decision for current_pass.  */
+DEFEVENT (PLUGIN_OVERRIDE_GATE)
+
+/* Called before executing a pass.  */
+DEFEVENT (PLUGIN_PASS_EXECUTION)
+
+/* Called before executing subpasses of a GIMPLE_PASS in
+   execute_ipa_pass_list.  */
+DEFEVENT (PLUGIN_EARLY_GIMPLE_PASSES_START)
+
+/* Called after executing subpasses of a GIMPLE_PASS in
+   execute_ipa_pass_list.  */
+DEFEVENT (PLUGIN_EARLY_GIMPLE_PASSES_END)
+
+/* Called when a pass is first instantiated.  */
+DEFEVENT (PLUGIN_NEW_PASS)
+
+/* Called when a file is #include-d or given via the #line directive.
+   this could happen many times.  The event data is the included file path,
+   as a const char* pointer.  */
+DEFEVENT (PLUGIN_INCLUDE_FILE)
+
+/* When adding a new hard-coded plugin event, don't forget to edit in
+   file plugin.c the functions register_callback and
+   invoke_plugin_callbacks_full accordingly!  */
+
+/* After the hard-coded events above, plugins can dynamically allocate events
+   at run time.
+   PLUGIN_EVENT_FIRST_DYNAMIC only appears as last enum element.  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/plugin.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/plugin.h
new file mode 100644
index 0000000..ab3e83f
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/plugin.h
@@ -0,0 +1,203 @@
+/* Header file for internal GCC plugin mechanism.
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef PLUGIN_H
+#define PLUGIN_H
+
+#include "highlev-plugin-common.h"
+
+/* Event names.  */
+enum plugin_event
+{
+# define DEFEVENT(NAME) NAME,
+# include "plugin.def"
+# undef DEFEVENT
+  PLUGIN_EVENT_FIRST_DYNAMIC
+};
+
+/* All globals declared here have C linkage to reduce link compatibility
+   issues with implementation language choice and mangling.  */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const char **plugin_event_name;
+
+struct plugin_argument
+{
+  char *key;    /* key of the argument.  */
+  char *value;  /* value is optional and can be NULL.  */
+};
+
+/* Additional information about the plugin. Used by --help and --version. */
+
+struct plugin_info
+{
+  const char *version;
+  const char *help;
+};
+
+/* Represents the gcc version. Used to avoid using an incompatible plugin. */
+
+struct plugin_gcc_version
+{
+  const char *basever;
+  const char *datestamp;
+  const char *devphase;
+  const char *revision;
+  const char *configuration_arguments;
+};
+
+/* Object that keeps track of the plugin name and its arguments. */
+struct plugin_name_args
+{
+  char *base_name;              /* Short name of the plugin (filename without
+                                   .so suffix). */
+  const char *full_name;        /* Path to the plugin as specified with
+                                   -fplugin=. */
+  int argc;                     /* Number of arguments specified with
+                                   -fplugin-arg-... */
+  struct plugin_argument *argv; /* Array of ARGC key-value pairs. */
+  const char *version;          /* Version string provided by plugin. */
+  const char *help;             /* Help string provided by plugin. */
+};
+
+/* The default version check. Compares every field in VERSION. */
+
+extern bool plugin_default_version_check (struct plugin_gcc_version *,
+					  struct plugin_gcc_version *);
+
+/* Function type for the plugin initialization routine. Each plugin module
+   should define this as an externally-visible function with name
+   "plugin_init."
+
+   PLUGIN_INFO - plugin invocation information.
+   VERSION     - the plugin_gcc_version symbol of GCC.
+
+   Returns 0 if initialization finishes successfully.  */
+
+typedef int (*plugin_init_func) (struct plugin_name_args *plugin_info,
+                                 struct plugin_gcc_version *version);
+
+/* Declaration for "plugin_init" function so that it doesn't need to be
+   duplicated in every plugin.  */
+extern int plugin_init (struct plugin_name_args *plugin_info,
+                        struct plugin_gcc_version *version);
+
+/* Function type for a plugin callback routine.
+
+   GCC_DATA  - event-specific data provided by GCC
+   USER_DATA - plugin-specific data provided by the plugin  */
+
+typedef void (*plugin_callback_func) (void *gcc_data, void *user_data);
+
+/* Called from the plugin's initialization code. Register a single callback.
+   This function can be called multiple times.
+
+   PLUGIN_NAME - display name for this plugin
+   EVENT       - which event the callback is for
+   CALLBACK    - the callback to be called at the event
+   USER_DATA   - plugin-provided data.
+*/
+
+/* Number of event ids / names registered so far.  */
+
+extern int get_event_last (void);
+
+int get_named_event_id (const char *name, enum insert_option insert);
+
+/* This is also called without a callback routine for the
+   PLUGIN_PASS_MANAGER_SETUP, PLUGIN_INFO and PLUGIN_REGISTER_GGC_ROOTS
+   pseudo-events, with a specific user_data.
+  */
+
+extern void register_callback (const char *plugin_name,
+			       int event,
+                               plugin_callback_func callback,
+                               void *user_data);
+
+extern int unregister_callback (const char *plugin_name, int event);
+
+
+/* Retrieve the plugin directory name, as returned by the
+   -fprint-file-name=plugin argument to the gcc program, which is the
+   -iplugindir program argument to cc1.  */
+extern const char* default_plugin_dir_name (void);
+
+#ifdef __cplusplus
+}
+#endif
+
+/* In case the C++ compiler does name mangling for globals, declare
+   plugin_is_GPL_compatible extern "C" so that a later definition
+   in a plugin file will have this linkage.  */
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern int plugin_is_GPL_compatible;
+#ifdef __cplusplus
+}
+#endif
+
+
+struct attribute_spec;
+struct scoped_attributes;
+
+extern void add_new_plugin (const char *);
+extern void parse_plugin_arg_opt (const char *);
+extern int invoke_plugin_callbacks_full (int, void *);
+extern void initialize_plugins (void);
+extern bool plugins_active_p (void);
+extern void dump_active_plugins (FILE *);
+extern void debug_active_plugins (void);
+extern void warn_if_plugins (void);
+extern void print_plugins_versions (FILE *file, const char *indent);
+extern void print_plugins_help (FILE *file, const char *indent);
+extern void finalize_plugins (void);
+
+extern bool flag_plugin_added;
+
+/* Called from inside GCC.  Invoke all plugin callbacks registered with
+   the specified event.
+   Return PLUGEVT_SUCCESS if at least one callback was called,
+   PLUGEVT_NO_CALLBACK if there was no callback.
+
+   EVENT    - the event identifier
+   GCC_DATA - event-specific data provided by the compiler  */
+
+static inline int
+invoke_plugin_callbacks (int event ATTRIBUTE_UNUSED,
+			 void *gcc_data ATTRIBUTE_UNUSED)
+{
+#ifdef ENABLE_PLUGIN
+  /* True iff at least one plugin has been added.  */
+  if (flag_plugin_added)
+    return invoke_plugin_callbacks_full (event, gcc_data);
+#endif
+
+  return PLUGEVT_NO_CALLBACK;
+}
+
+/* In attribs.c.  */
+
+extern void register_attribute (const struct attribute_spec *attr);
+extern struct scoped_attributes* register_scoped_attributes (const struct attribute_spec *,
+							     const char *);
+
+#endif /* PLUGIN_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/poly-int-types.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/poly-int-types.h
new file mode 100644
index 0000000..c3adf37
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/poly-int-types.h
@@ -0,0 +1,95 @@
+/* Typedefs for polynomial integers used in GCC.
+   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef HAVE_POLY_INT_TYPES_H
+#define HAVE_POLY_INT_TYPES_H
+
+typedef poly_int_pod<NUM_POLY_INT_COEFFS, unsigned short> poly_uint16_pod;
+typedef poly_int_pod<NUM_POLY_INT_COEFFS, HOST_WIDE_INT> poly_int64_pod;
+typedef poly_int_pod<NUM_POLY_INT_COEFFS,
+		     unsigned HOST_WIDE_INT> poly_uint64_pod;
+typedef poly_int_pod<NUM_POLY_INT_COEFFS, offset_int> poly_offset_int_pod;
+typedef poly_int_pod<NUM_POLY_INT_COEFFS, wide_int> poly_wide_int_pod;
+typedef poly_int_pod<NUM_POLY_INT_COEFFS, widest_int> poly_widest_int_pod;
+
+typedef poly_int<NUM_POLY_INT_COEFFS, unsigned short> poly_uint16;
+typedef poly_int<NUM_POLY_INT_COEFFS, HOST_WIDE_INT> poly_int64;
+typedef poly_int<NUM_POLY_INT_COEFFS, unsigned HOST_WIDE_INT> poly_uint64;
+typedef poly_int<NUM_POLY_INT_COEFFS, offset_int> poly_offset_int;
+typedef poly_int<NUM_POLY_INT_COEFFS, wide_int> poly_wide_int;
+typedef poly_int<NUM_POLY_INT_COEFFS, wide_int_ref> poly_wide_int_ref;
+typedef poly_int<NUM_POLY_INT_COEFFS, widest_int> poly_widest_int;
+
+/* Divide bit quantity X by BITS_PER_UNIT and round down (towards -Inf).
+   If X is a bit size, this gives the number of whole bytes spanned by X.
+
+   This is safe because non-constant mode sizes must be a whole number
+   of bytes in size.  */
+#define bits_to_bytes_round_down(X) force_align_down_and_div (X, BITS_PER_UNIT)
+
+/* Divide bit quantity X by BITS_PER_UNIT and round up (towards +Inf).
+   If X is a bit size, this gives the number of whole or partial bytes
+   spanned by X.
+
+   This is safe because non-constant mode sizes must be a whole number
+   of bytes in size.  */
+#define bits_to_bytes_round_up(X) force_align_up_and_div (X, BITS_PER_UNIT)
+
+/* Return the number of bits in bit quantity X that do not belong to
+   whole bytes.  This is equivalent to:
+
+       X - bits_to_bytes_round_down (X) * BITS_PER_UNIT
+
+   This is safe because non-constant mode sizes must be a whole number
+   of bytes in size.  */
+#define num_trailing_bits(X) force_get_misalignment (X, BITS_PER_UNIT)
+
+/* Round bit quantity X down to the nearest byte boundary.
+
+   This is safe because non-constant mode sizes must be a whole number
+   of bytes in size.  */
+#define round_down_to_byte_boundary(X) force_align_down (X, BITS_PER_UNIT)
+
+/* Round bit quantity X up the nearest byte boundary.
+
+   This is safe because non-constant mode sizes must be a whole number
+   of bytes in size.  */
+#define round_up_to_byte_boundary(X) force_align_up (X, BITS_PER_UNIT)
+
+/* Return the size of an element in a vector of size SIZE, given that
+   the vector has NELTS elements.  The return value is in the same units
+   as SIZE (either bits or bytes).
+
+   to_constant () is safe in this situation because vector elements are
+   always constant-sized scalars.  */
+#define vector_element_size(SIZE, NELTS) \
+  (exact_div (SIZE, NELTS).to_constant ())
+
+/* Wrapper for poly_int arguments to target macros, so that if a target
+   doesn't need polynomial-sized modes, its header file can continue to
+   treat the argument as a normal constant.  This should go away once
+   macros are moved to target hooks.  It shouldn't be used in other
+   contexts.  */
+#if NUM_POLY_INT_COEFFS == 1
+#define MACRO_INT(X) ((X).to_constant ())
+#else
+#define MACRO_INT(X) (X)
+#endif
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/poly-int.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/poly-int.h
new file mode 100644
index 0000000..d68a652
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/poly-int.h
@@ -0,0 +1,2655 @@
+/* Polynomial integer classes.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* This file provides a representation of sizes and offsets whose exact
+   values depend on certain runtime properties.  The motivating example
+   is the Arm SVE ISA, in which the number of vector elements is only
+   known at runtime.  See doc/poly-int.texi for more details.
+
+   Tests for poly-int.h are located in testsuite/gcc.dg/plugin,
+   since they are too expensive (in terms of binary size) to be
+   included as selftests.  */
+
+#ifndef HAVE_POLY_INT_H
+#define HAVE_POLY_INT_H
+
+template<unsigned int N, typename T> class poly_int_pod;
+template<unsigned int N, typename T> class poly_int;
+
+/* poly_coeff_traiits<T> describes the properties of a poly_int
+   coefficient type T:
+
+   - poly_coeff_traits<T1>::rank is less than poly_coeff_traits<T2>::rank
+     if T1 can promote to T2.  For C-like types the rank is:
+
+       (2 * number of bytes) + (unsigned ? 1 : 0)
+
+     wide_ints don't have a normal rank and so use a value of INT_MAX.
+     Any fixed-width integer should be promoted to wide_int if possible
+     and lead to an error otherwise.
+
+   - poly_coeff_traits<T>::int_type is the type to which an integer
+     literal should be cast before comparing it with T.
+
+   - poly_coeff_traits<T>::precision is the number of bits that T can hold.
+
+   - poly_coeff_traits<T>::signedness is:
+	0 if T is unsigned
+	1 if T is signed
+       -1 if T has no inherent sign (as for wide_int).
+
+   - poly_coeff_traits<T>::max_value, if defined, is the maximum value of T.
+
+   - poly_coeff_traits<T>::result is a type that can hold results of
+     operations on T.  This is different from T itself in cases where T
+     is the result of an accessor like wi::to_offset.  */
+template<typename T, wi::precision_type = wi::int_traits<T>::precision_type>
+struct poly_coeff_traits;
+
+template<typename T>
+struct poly_coeff_traits<T, wi::FLEXIBLE_PRECISION>
+{
+  typedef T result;
+  typedef T int_type;
+  static const int signedness = (T (0) >= T (-1));
+  static const int precision = sizeof (T) * CHAR_BIT;
+  static const T max_value = (signedness
+			      ? ((T (1) << (precision - 2))
+				 + ((T (1) << (precision - 2)) - 1))
+			      : T (-1));
+  static const int rank = sizeof (T) * 2 + !signedness;
+};
+
+template<typename T>
+struct poly_coeff_traits<T, wi::VAR_PRECISION>
+{
+  typedef T result;
+  typedef int int_type;
+  static const int signedness = -1;
+  static const int precision = WIDE_INT_MAX_PRECISION;
+  static const int rank = INT_MAX;
+};
+
+template<typename T>
+struct poly_coeff_traits<T, wi::CONST_PRECISION>
+{
+  typedef WI_UNARY_RESULT (T) result;
+  typedef int int_type;
+  /* These types are always signed.  */
+  static const int signedness = 1;
+  static const int precision = wi::int_traits<T>::precision;
+  static const int rank = precision * 2 / CHAR_BIT;
+};
+
+/* Information about a pair of coefficient types.  */
+template<typename T1, typename T2>
+struct poly_coeff_pair_traits
+{
+  /* True if T1 can represent all the values of T2.
+
+     Either:
+
+     - T1 should be a type with the same signedness as T2 and no less
+       precision.  This allows things like int16_t -> int16_t and
+       uint32_t -> uint64_t.
+
+     - T1 should be signed, T2 should be unsigned, and T1 should be
+       wider than T2.  This allows things like uint16_t -> int32_t.
+
+     This rules out cases in which T1 has less precision than T2 or where
+     the conversion would reinterpret the top bit.  E.g. int16_t -> uint32_t
+     can be dangerous and should have an explicit cast if deliberate.  */
+  static const bool lossless_p = (poly_coeff_traits<T1>::signedness
+				  == poly_coeff_traits<T2>::signedness
+				  ? (poly_coeff_traits<T1>::precision
+				     >= poly_coeff_traits<T2>::precision)
+				  : (poly_coeff_traits<T1>::signedness == 1
+				     && poly_coeff_traits<T2>::signedness == 0
+				     && (poly_coeff_traits<T1>::precision
+					 > poly_coeff_traits<T2>::precision)));
+
+  /* 0 if T1 op T2 should promote to HOST_WIDE_INT,
+     1 if T1 op T2 should promote to unsigned HOST_WIDE_INT,
+     2 if T1 op T2 should use wide-int rules.  */
+#define RANK(X) poly_coeff_traits<X>::rank
+  static const int result_kind
+    = ((RANK (T1) <= RANK (HOST_WIDE_INT)
+	&& RANK (T2) <= RANK (HOST_WIDE_INT))
+       ? 0
+       : (RANK (T1) <= RANK (unsigned HOST_WIDE_INT)
+	  && RANK (T2) <= RANK (unsigned HOST_WIDE_INT))
+       ? 1 : 2);
+#undef RANK
+};
+
+/* SFINAE class that makes T3 available as "type" if T2 can represent all the
+   values in T1.  */
+template<typename T1, typename T2, typename T3,
+	 bool lossless_p = poly_coeff_pair_traits<T1, T2>::lossless_p>
+struct if_lossless;
+template<typename T1, typename T2, typename T3>
+struct if_lossless<T1, T2, T3, true>
+{
+  typedef T3 type;
+};
+
+/* poly_int_traits<T> describes an integer type T that might be polynomial
+   or non-polynomial:
+
+   - poly_int_traits<T>::is_poly is true if T is a poly_int-based type
+     and false otherwise.
+
+   - poly_int_traits<T>::num_coeffs gives the number of coefficients in T
+     if T is a poly_int and 1 otherwise.
+
+   - poly_int_traits<T>::coeff_type gives the coefficent type of T if T
+     is a poly_int and T itself otherwise
+
+   - poly_int_traits<T>::int_type is a shorthand for
+     typename poly_coeff_traits<coeff_type>::int_type.  */
+template<typename T>
+struct poly_int_traits
+{
+  static const bool is_poly = false;
+  static const unsigned int num_coeffs = 1;
+  typedef T coeff_type;
+  typedef typename poly_coeff_traits<T>::int_type int_type;
+};
+template<unsigned int N, typename C>
+struct poly_int_traits<poly_int_pod<N, C> >
+{
+  static const bool is_poly = true;
+  static const unsigned int num_coeffs = N;
+  typedef C coeff_type;
+  typedef typename poly_coeff_traits<C>::int_type int_type;
+};
+template<unsigned int N, typename C>
+struct poly_int_traits<poly_int<N, C> > : poly_int_traits<poly_int_pod<N, C> >
+{
+};
+
+/* SFINAE class that makes T2 available as "type" if T1 is a non-polynomial
+   type.  */
+template<typename T1, typename T2 = T1,
+	 bool is_poly = poly_int_traits<T1>::is_poly>
+struct if_nonpoly {};
+template<typename T1, typename T2>
+struct if_nonpoly<T1, T2, false>
+{
+  typedef T2 type;
+};
+
+/* SFINAE class that makes T3 available as "type" if both T1 and T2 are
+   non-polynomial types.  */
+template<typename T1, typename T2, typename T3,
+	 bool is_poly1 = poly_int_traits<T1>::is_poly,
+	 bool is_poly2 = poly_int_traits<T2>::is_poly>
+struct if_nonpoly2 {};
+template<typename T1, typename T2, typename T3>
+struct if_nonpoly2<T1, T2, T3, false, false>
+{
+  typedef T3 type;
+};
+
+/* SFINAE class that makes T2 available as "type" if T1 is a polynomial
+   type.  */
+template<typename T1, typename T2 = T1,
+	 bool is_poly = poly_int_traits<T1>::is_poly>
+struct if_poly {};
+template<typename T1, typename T2>
+struct if_poly<T1, T2, true>
+{
+  typedef T2 type;
+};
+
+/* poly_result<T1, T2> describes the result of an operation on two
+   types T1 and T2, where at least one of the types is polynomial:
+
+   - poly_result<T1, T2>::type gives the result type for the operation.
+     The intention is to provide normal C-like rules for integer ranks,
+     except that everything smaller than HOST_WIDE_INT promotes to
+     HOST_WIDE_INT.
+
+   - poly_result<T1, T2>::cast is the type to which an operand of type
+     T1 should be cast before doing the operation, to ensure that
+     the operation is done at the right precision.  Casting to
+     poly_result<T1, T2>::type would also work, but casting to this
+     type is more efficient.  */
+template<typename T1, typename T2 = T1,
+	 int result_kind = poly_coeff_pair_traits<T1, T2>::result_kind>
+struct poly_result;
+
+/* Promote pair to HOST_WIDE_INT.  */
+template<typename T1, typename T2>
+struct poly_result<T1, T2, 0>
+{
+  typedef HOST_WIDE_INT type;
+  /* T1 and T2 are primitive types, so cast values to T before operating
+     on them.  */
+  typedef type cast;
+};
+
+/* Promote pair to unsigned HOST_WIDE_INT.  */
+template<typename T1, typename T2>
+struct poly_result<T1, T2, 1>
+{
+  typedef unsigned HOST_WIDE_INT type;
+  /* T1 and T2 are primitive types, so cast values to T before operating
+     on them.  */
+  typedef type cast;
+};
+
+/* Use normal wide-int rules.  */
+template<typename T1, typename T2>
+struct poly_result<T1, T2, 2>
+{
+  typedef WI_BINARY_RESULT (T1, T2) type;
+  /* Don't cast values before operating on them; leave the wi:: routines
+     to handle promotion as necessary.  */
+  typedef const T1 &cast;
+};
+
+/* The coefficient type for the result of a binary operation on two
+   poly_ints, the first of which has coefficients of type C1 and the
+   second of which has coefficients of type C2.  */
+#define POLY_POLY_COEFF(C1, C2) typename poly_result<C1, C2>::type
+
+/* Enforce that T2 is non-polynomial and provide the cofficient type of
+   the result of a binary operation in which the first operand is a
+   poly_int with coefficients of type C1 and the second operand is
+   a constant of type T2.  */
+#define POLY_CONST_COEFF(C1, T2) \
+  POLY_POLY_COEFF (C1, typename if_nonpoly<T2>::type)
+
+/* Likewise in reverse.  */
+#define CONST_POLY_COEFF(T1, C2) \
+  POLY_POLY_COEFF (typename if_nonpoly<T1>::type, C2)
+
+/* The result type for a binary operation on poly_int<N, C1> and
+   poly_int<N, C2>.  */
+#define POLY_POLY_RESULT(N, C1, C2) poly_int<N, POLY_POLY_COEFF (C1, C2)>
+
+/* Enforce that T2 is non-polynomial and provide the result type
+   for a binary operation on poly_int<N, C1> and T2.  */
+#define POLY_CONST_RESULT(N, C1, T2) poly_int<N, POLY_CONST_COEFF (C1, T2)>
+
+/* Enforce that T1 is non-polynomial and provide the result type
+   for a binary operation on T1 and poly_int<N, C2>.  */
+#define CONST_POLY_RESULT(N, T1, C2) poly_int<N, CONST_POLY_COEFF (T1, C2)>
+
+/* Enforce that T1 and T2 are non-polynomial and provide the result type
+   for a binary operation on T1 and T2.  */
+#define CONST_CONST_RESULT(N, T1, T2) \
+  POLY_POLY_COEFF (typename if_nonpoly<T1>::type, \
+		   typename if_nonpoly<T2>::type)
+
+/* The type to which a coefficient of type C1 should be cast before
+   using it in a binary operation with a coefficient of type C2.  */
+#define POLY_CAST(C1, C2) typename poly_result<C1, C2>::cast
+
+/* Provide the coefficient type for the result of T1 op T2, where T1
+   and T2 can be polynomial or non-polynomial.  */
+#define POLY_BINARY_COEFF(T1, T2) \
+  typename poly_result<typename poly_int_traits<T1>::coeff_type, \
+		       typename poly_int_traits<T2>::coeff_type>::type
+
+/* The type to which an integer constant should be cast before
+   comparing it with T.  */
+#define POLY_INT_TYPE(T) typename poly_int_traits<T>::int_type
+
+/* RES is a poly_int result that has coefficients of type C and that
+   is being built up a coefficient at a time.  Set coefficient number I
+   to VALUE in the most efficient way possible.
+
+   For primitive C it is better to assign directly, since it avoids
+   any further calls and so is more efficient when the compiler is
+   built at -O0.  But for wide-int based C it is better to construct
+   the value in-place.  This means that calls out to a wide-int.cc
+   routine can take the address of RES rather than the address of
+   a temporary.
+
+   The dummy comparison against a null C * is just a way of checking
+   that C gives the right type.  */
+#define POLY_SET_COEFF(C, RES, I, VALUE) \
+  ((void) (&(RES).coeffs[0] == (C *) 0), \
+   wi::int_traits<C>::precision_type == wi::FLEXIBLE_PRECISION \
+   ? (void) ((RES).coeffs[I] = VALUE) \
+   : (void) ((RES).coeffs[I].~C (), new (&(RES).coeffs[I]) C (VALUE)))
+
+/* A base POD class for polynomial integers.  The polynomial has N
+   coefficients of type C.  */
+template<unsigned int N, typename C>
+class poly_int_pod
+{
+public:
+  template<typename Ca>
+  poly_int_pod &operator = (const poly_int_pod<N, Ca> &);
+  template<typename Ca>
+  typename if_nonpoly<Ca, poly_int_pod>::type &operator = (const Ca &);
+
+  template<typename Ca>
+  poly_int_pod &operator += (const poly_int_pod<N, Ca> &);
+  template<typename Ca>
+  typename if_nonpoly<Ca, poly_int_pod>::type &operator += (const Ca &);
+
+  template<typename Ca>
+  poly_int_pod &operator -= (const poly_int_pod<N, Ca> &);
+  template<typename Ca>
+  typename if_nonpoly<Ca, poly_int_pod>::type &operator -= (const Ca &);
+
+  template<typename Ca>
+  typename if_nonpoly<Ca, poly_int_pod>::type &operator *= (const Ca &);
+
+  poly_int_pod &operator <<= (unsigned int);
+
+  bool is_constant () const;
+
+  template<typename T>
+  typename if_lossless<T, C, bool>::type is_constant (T *) const;
+
+  C to_constant () const;
+
+  template<typename Ca>
+  static poly_int<N, C> from (const poly_int_pod<N, Ca> &, unsigned int,
+			      signop);
+  template<typename Ca>
+  static poly_int<N, C> from (const poly_int_pod<N, Ca> &, signop);
+
+  bool to_shwi (poly_int_pod<N, HOST_WIDE_INT> *) const;
+  bool to_uhwi (poly_int_pod<N, unsigned HOST_WIDE_INT> *) const;
+  poly_int<N, HOST_WIDE_INT> force_shwi () const;
+  poly_int<N, unsigned HOST_WIDE_INT> force_uhwi () const;
+
+#if POLY_INT_CONVERSION
+  operator C () const;
+#endif
+
+  C coeffs[N];
+};
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline poly_int_pod<N, C>&
+poly_int_pod<N, C>::operator = (const poly_int_pod<N, Ca> &a)
+{
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, *this, i, a.coeffs[i]);
+  return *this;
+}
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline typename if_nonpoly<Ca, poly_int_pod<N, C> >::type &
+poly_int_pod<N, C>::operator = (const Ca &a)
+{
+  POLY_SET_COEFF (C, *this, 0, a);
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      POLY_SET_COEFF (C, *this, i, wi::ints_for<C>::zero (this->coeffs[0]));
+  return *this;
+}
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline poly_int_pod<N, C>&
+poly_int_pod<N, C>::operator += (const poly_int_pod<N, Ca> &a)
+{
+  for (unsigned int i = 0; i < N; i++)
+    this->coeffs[i] += a.coeffs[i];
+  return *this;
+}
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline typename if_nonpoly<Ca, poly_int_pod<N, C> >::type &
+poly_int_pod<N, C>::operator += (const Ca &a)
+{
+  this->coeffs[0] += a;
+  return *this;
+}
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline poly_int_pod<N, C>&
+poly_int_pod<N, C>::operator -= (const poly_int_pod<N, Ca> &a)
+{
+  for (unsigned int i = 0; i < N; i++)
+    this->coeffs[i] -= a.coeffs[i];
+  return *this;
+}
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline typename if_nonpoly<Ca, poly_int_pod<N, C> >::type &
+poly_int_pod<N, C>::operator -= (const Ca &a)
+{
+  this->coeffs[0] -= a;
+  return *this;
+}
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline typename if_nonpoly<Ca, poly_int_pod<N, C> >::type &
+poly_int_pod<N, C>::operator *= (const Ca &a)
+{
+  for (unsigned int i = 0; i < N; i++)
+    this->coeffs[i] *= a;
+  return *this;
+}
+
+template<unsigned int N, typename C>
+inline poly_int_pod<N, C>&
+poly_int_pod<N, C>::operator <<= (unsigned int a)
+{
+  for (unsigned int i = 0; i < N; i++)
+    this->coeffs[i] <<= a;
+  return *this;
+}
+
+/* Return true if the polynomial value is a compile-time constant.  */
+
+template<unsigned int N, typename C>
+inline bool
+poly_int_pod<N, C>::is_constant () const
+{
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      if (this->coeffs[i] != 0)
+	return false;
+  return true;
+}
+
+/* Return true if the polynomial value is a compile-time constant,
+   storing its value in CONST_VALUE if so.  */
+
+template<unsigned int N, typename C>
+template<typename T>
+inline typename if_lossless<T, C, bool>::type
+poly_int_pod<N, C>::is_constant (T *const_value) const
+{
+  if (is_constant ())
+    {
+      *const_value = this->coeffs[0];
+      return true;
+    }
+  return false;
+}
+
+/* Return the value of a polynomial that is already known to be a
+   compile-time constant.
+
+   NOTE: When using this function, please add a comment above the call
+   explaining why we know the value is constant in that context.  */
+
+template<unsigned int N, typename C>
+inline C
+poly_int_pod<N, C>::to_constant () const
+{
+  gcc_checking_assert (is_constant ());
+  return this->coeffs[0];
+}
+
+/* Convert X to a wide_int-based polynomial in which each coefficient
+   has BITSIZE bits.  If X's coefficients are smaller than BITSIZE,
+   extend them according to SGN.  */
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline poly_int<N, C>
+poly_int_pod<N, C>::from (const poly_int_pod<N, Ca> &a,
+			  unsigned int bitsize, signop sgn)
+{
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, C::from (a.coeffs[i], bitsize, sgn));
+  return r;
+}
+
+/* Convert X to a fixed_wide_int-based polynomial, extending according
+   to SGN.  */
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline poly_int<N, C>
+poly_int_pod<N, C>::from (const poly_int_pod<N, Ca> &a, signop sgn)
+{
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, C::from (a.coeffs[i], sgn));
+  return r;
+}
+
+/* Return true if the coefficients of this generic_wide_int-based
+   polynomial can be represented as signed HOST_WIDE_INTs without loss
+   of precision.  Store the HOST_WIDE_INT representation in *R if so.  */
+
+template<unsigned int N, typename C>
+inline bool
+poly_int_pod<N, C>::to_shwi (poly_int_pod<N, HOST_WIDE_INT> *r) const
+{
+  for (unsigned int i = 0; i < N; i++)
+    if (!wi::fits_shwi_p (this->coeffs[i]))
+      return false;
+  for (unsigned int i = 0; i < N; i++)
+    r->coeffs[i] = this->coeffs[i].to_shwi ();
+  return true;
+}
+
+/* Return true if the coefficients of this generic_wide_int-based
+   polynomial can be represented as unsigned HOST_WIDE_INTs without
+   loss of precision.  Store the unsigned HOST_WIDE_INT representation
+   in *R if so.  */
+
+template<unsigned int N, typename C>
+inline bool
+poly_int_pod<N, C>::to_uhwi (poly_int_pod<N, unsigned HOST_WIDE_INT> *r) const
+{
+  for (unsigned int i = 0; i < N; i++)
+    if (!wi::fits_uhwi_p (this->coeffs[i]))
+      return false;
+  for (unsigned int i = 0; i < N; i++)
+    r->coeffs[i] = this->coeffs[i].to_uhwi ();
+  return true;
+}
+
+/* Force a generic_wide_int-based constant to HOST_WIDE_INT precision,
+   truncating if necessary.  */
+
+template<unsigned int N, typename C>
+inline poly_int<N, HOST_WIDE_INT>
+poly_int_pod<N, C>::force_shwi () const
+{
+  poly_int_pod<N, HOST_WIDE_INT> r;
+  for (unsigned int i = 0; i < N; i++)
+    r.coeffs[i] = this->coeffs[i].to_shwi ();
+  return r;
+}
+
+/* Force a generic_wide_int-based constant to unsigned HOST_WIDE_INT precision,
+   truncating if necessary.  */
+
+template<unsigned int N, typename C>
+inline poly_int<N, unsigned HOST_WIDE_INT>
+poly_int_pod<N, C>::force_uhwi () const
+{
+  poly_int_pod<N, unsigned HOST_WIDE_INT> r;
+  for (unsigned int i = 0; i < N; i++)
+    r.coeffs[i] = this->coeffs[i].to_uhwi ();
+  return r;
+}
+
+#if POLY_INT_CONVERSION
+/* Provide a conversion operator to constants.  */
+
+template<unsigned int N, typename C>
+inline
+poly_int_pod<N, C>::operator C () const
+{
+  gcc_checking_assert (this->is_constant ());
+  return this->coeffs[0];
+}
+#endif
+
+/* The main class for polynomial integers.  The class provides
+   constructors that are necessarily missing from the POD base.  */
+template<unsigned int N, typename C>
+class poly_int : public poly_int_pod<N, C>
+{
+public:
+  poly_int () {}
+
+  template<typename Ca>
+  poly_int (const poly_int<N, Ca> &);
+  template<typename Ca>
+  poly_int (const poly_int_pod<N, Ca> &);
+  template<typename C0>
+  poly_int (const C0 &);
+  template<typename C0, typename C1>
+  poly_int (const C0 &, const C1 &);
+
+  template<typename Ca>
+  poly_int &operator = (const poly_int_pod<N, Ca> &);
+  template<typename Ca>
+  typename if_nonpoly<Ca, poly_int>::type &operator = (const Ca &);
+
+  template<typename Ca>
+  poly_int &operator += (const poly_int_pod<N, Ca> &);
+  template<typename Ca>
+  typename if_nonpoly<Ca, poly_int>::type &operator += (const Ca &);
+
+  template<typename Ca>
+  poly_int &operator -= (const poly_int_pod<N, Ca> &);
+  template<typename Ca>
+  typename if_nonpoly<Ca, poly_int>::type &operator -= (const Ca &);
+
+  template<typename Ca>
+  typename if_nonpoly<Ca, poly_int>::type &operator *= (const Ca &);
+
+  poly_int &operator <<= (unsigned int);
+};
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline
+poly_int<N, C>::poly_int (const poly_int<N, Ca> &a)
+{
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, *this, i, a.coeffs[i]);
+}
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline
+poly_int<N, C>::poly_int (const poly_int_pod<N, Ca> &a)
+{
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, *this, i, a.coeffs[i]);
+}
+
+template<unsigned int N, typename C>
+template<typename C0>
+inline
+poly_int<N, C>::poly_int (const C0 &c0)
+{
+  POLY_SET_COEFF (C, *this, 0, c0);
+  for (unsigned int i = 1; i < N; i++)
+    POLY_SET_COEFF (C, *this, i, wi::ints_for<C>::zero (this->coeffs[0]));
+}
+
+template<unsigned int N, typename C>
+template<typename C0, typename C1>
+inline
+poly_int<N, C>::poly_int (const C0 &c0, const C1 &c1)
+{
+  STATIC_ASSERT (N >= 2);
+  POLY_SET_COEFF (C, *this, 0, c0);
+  POLY_SET_COEFF (C, *this, 1, c1);
+  for (unsigned int i = 2; i < N; i++)
+    POLY_SET_COEFF (C, *this, i, wi::ints_for<C>::zero (this->coeffs[0]));
+}
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline poly_int<N, C>&
+poly_int<N, C>::operator = (const poly_int_pod<N, Ca> &a)
+{
+  for (unsigned int i = 0; i < N; i++)
+    this->coeffs[i] = a.coeffs[i];
+  return *this;
+}
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline typename if_nonpoly<Ca, poly_int<N, C> >::type &
+poly_int<N, C>::operator = (const Ca &a)
+{
+  this->coeffs[0] = a;
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      this->coeffs[i] = wi::ints_for<C>::zero (this->coeffs[0]);
+  return *this;
+}
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline poly_int<N, C>&
+poly_int<N, C>::operator += (const poly_int_pod<N, Ca> &a)
+{
+  for (unsigned int i = 0; i < N; i++)
+    this->coeffs[i] += a.coeffs[i];
+  return *this;
+}
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline typename if_nonpoly<Ca, poly_int<N, C> >::type &
+poly_int<N, C>::operator += (const Ca &a)
+{
+  this->coeffs[0] += a;
+  return *this;
+}
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline poly_int<N, C>&
+poly_int<N, C>::operator -= (const poly_int_pod<N, Ca> &a)
+{
+  for (unsigned int i = 0; i < N; i++)
+    this->coeffs[i] -= a.coeffs[i];
+  return *this;
+}
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline typename if_nonpoly<Ca, poly_int<N, C> >::type &
+poly_int<N, C>::operator -= (const Ca &a)
+{
+  this->coeffs[0] -= a;
+  return *this;
+}
+
+template<unsigned int N, typename C>
+template<typename Ca>
+inline typename if_nonpoly<Ca, poly_int<N, C> >::type &
+poly_int<N, C>::operator *= (const Ca &a)
+{
+  for (unsigned int i = 0; i < N; i++)
+    this->coeffs[i] *= a;
+  return *this;
+}
+
+template<unsigned int N, typename C>
+inline poly_int<N, C>&
+poly_int<N, C>::operator <<= (unsigned int a)
+{
+  for (unsigned int i = 0; i < N; i++)
+    this->coeffs[i] <<= a;
+  return *this;
+}
+
+/* Return true if every coefficient of A is in the inclusive range [B, C].  */
+
+template<typename Ca, typename Cb, typename Cc>
+inline typename if_nonpoly<Ca, bool>::type
+coeffs_in_range_p (const Ca &a, const Cb &b, const Cc &c)
+{
+  return a >= b && a <= c;
+}
+
+template<unsigned int N, typename Ca, typename Cb, typename Cc>
+inline typename if_nonpoly<Ca, bool>::type
+coeffs_in_range_p (const poly_int_pod<N, Ca> &a, const Cb &b, const Cc &c)
+{
+  for (unsigned int i = 0; i < N; i++)
+    if (a.coeffs[i] < b || a.coeffs[i] > c)
+      return false;
+  return true;
+}
+
+namespace wi {
+/* Poly version of wi::shwi, with the same interface.  */
+
+template<unsigned int N>
+inline poly_int<N, hwi_with_prec>
+shwi (const poly_int_pod<N, HOST_WIDE_INT> &a, unsigned int precision)
+{
+  poly_int<N, hwi_with_prec> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (hwi_with_prec, r, i, wi::shwi (a.coeffs[i], precision));
+  return r;
+}
+
+/* Poly version of wi::uhwi, with the same interface.  */
+
+template<unsigned int N>
+inline poly_int<N, hwi_with_prec>
+uhwi (const poly_int_pod<N, unsigned HOST_WIDE_INT> &a, unsigned int precision)
+{
+  poly_int<N, hwi_with_prec> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (hwi_with_prec, r, i, wi::uhwi (a.coeffs[i], precision));
+  return r;
+}
+
+/* Poly version of wi::sext, with the same interface.  */
+
+template<unsigned int N, typename Ca>
+inline POLY_POLY_RESULT (N, Ca, Ca)
+sext (const poly_int_pod<N, Ca> &a, unsigned int precision)
+{
+  typedef POLY_POLY_COEFF (Ca, Ca) C;
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, wi::sext (a.coeffs[i], precision));
+  return r;
+}
+
+/* Poly version of wi::zext, with the same interface.  */
+
+template<unsigned int N, typename Ca>
+inline POLY_POLY_RESULT (N, Ca, Ca)
+zext (const poly_int_pod<N, Ca> &a, unsigned int precision)
+{
+  typedef POLY_POLY_COEFF (Ca, Ca) C;
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, wi::zext (a.coeffs[i], precision));
+  return r;
+}
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline POLY_POLY_RESULT (N, Ca, Cb)
+operator + (const poly_int_pod<N, Ca> &a, const poly_int_pod<N, Cb> &b)
+{
+  typedef POLY_CAST (Ca, Cb) NCa;
+  typedef POLY_POLY_COEFF (Ca, Cb) C;
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, NCa (a.coeffs[i]) + b.coeffs[i]);
+  return r;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline POLY_CONST_RESULT (N, Ca, Cb)
+operator + (const poly_int_pod<N, Ca> &a, const Cb &b)
+{
+  typedef POLY_CAST (Ca, Cb) NCa;
+  typedef POLY_CONST_COEFF (Ca, Cb) C;
+  poly_int<N, C> r;
+  POLY_SET_COEFF (C, r, 0, NCa (a.coeffs[0]) + b);
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      POLY_SET_COEFF (C, r, i, NCa (a.coeffs[i]));
+  return r;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline CONST_POLY_RESULT (N, Ca, Cb)
+operator + (const Ca &a, const poly_int_pod<N, Cb> &b)
+{
+  typedef POLY_CAST (Cb, Ca) NCb;
+  typedef CONST_POLY_COEFF (Ca, Cb) C;
+  poly_int<N, C> r;
+  POLY_SET_COEFF (C, r, 0, a + NCb (b.coeffs[0]));
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      POLY_SET_COEFF (C, r, i, NCb (b.coeffs[i]));
+  return r;
+}
+
+namespace wi {
+/* Poly versions of wi::add, with the same interface.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, WI_BINARY_RESULT (Ca, Cb)>
+add (const poly_int_pod<N, Ca> &a, const poly_int_pod<N, Cb> &b)
+{
+  typedef WI_BINARY_RESULT (Ca, Cb) C;
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, wi::add (a.coeffs[i], b.coeffs[i]));
+  return r;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, WI_BINARY_RESULT (Ca, Cb)>
+add (const poly_int_pod<N, Ca> &a, const Cb &b)
+{
+  typedef WI_BINARY_RESULT (Ca, Cb) C;
+  poly_int<N, C> r;
+  POLY_SET_COEFF (C, r, 0, wi::add (a.coeffs[0], b));
+  for (unsigned int i = 1; i < N; i++)
+    POLY_SET_COEFF (C, r, i, wi::add (a.coeffs[i],
+				      wi::ints_for<Cb>::zero (b)));
+  return r;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, WI_BINARY_RESULT (Ca, Cb)>
+add (const Ca &a, const poly_int_pod<N, Cb> &b)
+{
+  typedef WI_BINARY_RESULT (Ca, Cb) C;
+  poly_int<N, C> r;
+  POLY_SET_COEFF (C, r, 0, wi::add (a, b.coeffs[0]));
+  for (unsigned int i = 1; i < N; i++)
+    POLY_SET_COEFF (C, r, i, wi::add (wi::ints_for<Ca>::zero (a),
+				      b.coeffs[i]));
+  return r;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, WI_BINARY_RESULT (Ca, Cb)>
+add (const poly_int_pod<N, Ca> &a, const poly_int_pod<N, Cb> &b,
+     signop sgn, wi::overflow_type *overflow)
+{
+  typedef WI_BINARY_RESULT (Ca, Cb) C;
+  poly_int<N, C> r;
+  POLY_SET_COEFF (C, r, 0, wi::add (a.coeffs[0], b.coeffs[0], sgn, overflow));
+  for (unsigned int i = 1; i < N; i++)
+    {
+      wi::overflow_type suboverflow;
+      POLY_SET_COEFF (C, r, i, wi::add (a.coeffs[i], b.coeffs[i], sgn,
+					&suboverflow));
+      wi::accumulate_overflow (*overflow, suboverflow);
+    }
+  return r;
+}
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline POLY_POLY_RESULT (N, Ca, Cb)
+operator - (const poly_int_pod<N, Ca> &a, const poly_int_pod<N, Cb> &b)
+{
+  typedef POLY_CAST (Ca, Cb) NCa;
+  typedef POLY_POLY_COEFF (Ca, Cb) C;
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, NCa (a.coeffs[i]) - b.coeffs[i]);
+  return r;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline POLY_CONST_RESULT (N, Ca, Cb)
+operator - (const poly_int_pod<N, Ca> &a, const Cb &b)
+{
+  typedef POLY_CAST (Ca, Cb) NCa;
+  typedef POLY_CONST_COEFF (Ca, Cb) C;
+  poly_int<N, C> r;
+  POLY_SET_COEFF (C, r, 0, NCa (a.coeffs[0]) - b);
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      POLY_SET_COEFF (C, r, i, NCa (a.coeffs[i]));
+  return r;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline CONST_POLY_RESULT (N, Ca, Cb)
+operator - (const Ca &a, const poly_int_pod<N, Cb> &b)
+{
+  typedef POLY_CAST (Cb, Ca) NCb;
+  typedef CONST_POLY_COEFF (Ca, Cb) C;
+  poly_int<N, C> r;
+  POLY_SET_COEFF (C, r, 0, a - NCb (b.coeffs[0]));
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      POLY_SET_COEFF (C, r, i, -NCb (b.coeffs[i]));
+  return r;
+}
+
+namespace wi {
+/* Poly versions of wi::sub, with the same interface.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, WI_BINARY_RESULT (Ca, Cb)>
+sub (const poly_int_pod<N, Ca> &a, const poly_int_pod<N, Cb> &b)
+{
+  typedef WI_BINARY_RESULT (Ca, Cb) C;
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, wi::sub (a.coeffs[i], b.coeffs[i]));
+  return r;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, WI_BINARY_RESULT (Ca, Cb)>
+sub (const poly_int_pod<N, Ca> &a, const Cb &b)
+{
+  typedef WI_BINARY_RESULT (Ca, Cb) C;
+  poly_int<N, C> r;
+  POLY_SET_COEFF (C, r, 0, wi::sub (a.coeffs[0], b));
+  for (unsigned int i = 1; i < N; i++)
+    POLY_SET_COEFF (C, r, i, wi::sub (a.coeffs[i],
+				      wi::ints_for<Cb>::zero (b)));
+  return r;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, WI_BINARY_RESULT (Ca, Cb)>
+sub (const Ca &a, const poly_int_pod<N, Cb> &b)
+{
+  typedef WI_BINARY_RESULT (Ca, Cb) C;
+  poly_int<N, C> r;
+  POLY_SET_COEFF (C, r, 0, wi::sub (a, b.coeffs[0]));
+  for (unsigned int i = 1; i < N; i++)
+    POLY_SET_COEFF (C, r, i, wi::sub (wi::ints_for<Ca>::zero (a),
+				      b.coeffs[i]));
+  return r;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, WI_BINARY_RESULT (Ca, Cb)>
+sub (const poly_int_pod<N, Ca> &a, const poly_int_pod<N, Cb> &b,
+     signop sgn, wi::overflow_type *overflow)
+{
+  typedef WI_BINARY_RESULT (Ca, Cb) C;
+  poly_int<N, C> r;
+  POLY_SET_COEFF (C, r, 0, wi::sub (a.coeffs[0], b.coeffs[0], sgn, overflow));
+  for (unsigned int i = 1; i < N; i++)
+    {
+      wi::overflow_type suboverflow;
+      POLY_SET_COEFF (C, r, i, wi::sub (a.coeffs[i], b.coeffs[i], sgn,
+					&suboverflow));
+      wi::accumulate_overflow (*overflow, suboverflow);
+    }
+  return r;
+}
+}
+
+template<unsigned int N, typename Ca>
+inline POLY_POLY_RESULT (N, Ca, Ca)
+operator - (const poly_int_pod<N, Ca> &a)
+{
+  typedef POLY_CAST (Ca, Ca) NCa;
+  typedef POLY_POLY_COEFF (Ca, Ca) C;
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, -NCa (a.coeffs[i]));
+  return r;
+}
+
+namespace wi {
+/* Poly version of wi::neg, with the same interface.  */
+
+template<unsigned int N, typename Ca>
+inline poly_int<N, WI_UNARY_RESULT (Ca)>
+neg (const poly_int_pod<N, Ca> &a)
+{
+  typedef WI_UNARY_RESULT (Ca) C;
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, wi::neg (a.coeffs[i]));
+  return r;
+}
+
+template<unsigned int N, typename Ca>
+inline poly_int<N, WI_UNARY_RESULT (Ca)>
+neg (const poly_int_pod<N, Ca> &a, wi::overflow_type *overflow)
+{
+  typedef WI_UNARY_RESULT (Ca) C;
+  poly_int<N, C> r;
+  POLY_SET_COEFF (C, r, 0, wi::neg (a.coeffs[0], overflow));
+  for (unsigned int i = 1; i < N; i++)
+    {
+      wi::overflow_type suboverflow;
+      POLY_SET_COEFF (C, r, i, wi::neg (a.coeffs[i], &suboverflow));
+      wi::accumulate_overflow (*overflow, suboverflow);
+    }
+  return r;
+}
+}
+
+template<unsigned int N, typename Ca>
+inline POLY_POLY_RESULT (N, Ca, Ca)
+operator ~ (const poly_int_pod<N, Ca> &a)
+{
+  if (N >= 2)
+    return -1 - a;
+  return ~a.coeffs[0];
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline POLY_CONST_RESULT (N, Ca, Cb)
+operator * (const poly_int_pod<N, Ca> &a, const Cb &b)
+{
+  typedef POLY_CAST (Ca, Cb) NCa;
+  typedef POLY_CONST_COEFF (Ca, Cb) C;
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, NCa (a.coeffs[i]) * b);
+  return r;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline CONST_POLY_RESULT (N, Ca, Cb)
+operator * (const Ca &a, const poly_int_pod<N, Cb> &b)
+{
+  typedef POLY_CAST (Ca, Cb) NCa;
+  typedef CONST_POLY_COEFF (Ca, Cb) C;
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, NCa (a) * b.coeffs[i]);
+  return r;
+}
+
+namespace wi {
+/* Poly versions of wi::mul, with the same interface.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, WI_BINARY_RESULT (Ca, Cb)>
+mul (const poly_int_pod<N, Ca> &a, const Cb &b)
+{
+  typedef WI_BINARY_RESULT (Ca, Cb) C;
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, wi::mul (a.coeffs[i], b));
+  return r;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, WI_BINARY_RESULT (Ca, Cb)>
+mul (const Ca &a, const poly_int_pod<N, Cb> &b)
+{
+  typedef WI_BINARY_RESULT (Ca, Cb) C;
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, wi::mul (a, b.coeffs[i]));
+  return r;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, WI_BINARY_RESULT (Ca, Cb)>
+mul (const poly_int_pod<N, Ca> &a, const Cb &b,
+     signop sgn, wi::overflow_type *overflow)
+{
+  typedef WI_BINARY_RESULT (Ca, Cb) C;
+  poly_int<N, C> r;
+  POLY_SET_COEFF (C, r, 0, wi::mul (a.coeffs[0], b, sgn, overflow));
+  for (unsigned int i = 1; i < N; i++)
+    {
+      wi::overflow_type suboverflow;
+      POLY_SET_COEFF (C, r, i, wi::mul (a.coeffs[i], b, sgn, &suboverflow));
+      wi::accumulate_overflow (*overflow, suboverflow);
+    }
+  return r;
+}
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline POLY_POLY_RESULT (N, Ca, Ca)
+operator << (const poly_int_pod<N, Ca> &a, const Cb &b)
+{
+  typedef POLY_CAST (Ca, Ca) NCa;
+  typedef POLY_POLY_COEFF (Ca, Ca) C;
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, NCa (a.coeffs[i]) << b);
+  return r;
+}
+
+namespace wi {
+/* Poly version of wi::lshift, with the same interface.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, WI_BINARY_RESULT (Ca, Ca)>
+lshift (const poly_int_pod<N, Ca> &a, const Cb &b)
+{
+  typedef WI_BINARY_RESULT (Ca, Ca) C;
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, wi::lshift (a.coeffs[i], b));
+  return r;
+}
+}
+
+/* Return true if a0 + a1 * x might equal b0 + b1 * x for some nonnegative
+   integer x.  */
+
+template<typename Ca, typename Cb>
+inline bool
+maybe_eq_2 (const Ca &a0, const Ca &a1, const Cb &b0, const Cb &b1)
+{
+  if (a1 != b1)
+     /*      a0 + a1 * x == b0 + b1 * x
+       ==> (a1 - b1) * x == b0 - a0
+       ==>             x == (b0 - a0) / (a1 - b1)
+
+       We need to test whether that's a valid value of x.
+       (b0 - a0) and (a1 - b1) must not have opposite signs
+       and the result must be integral.  */
+    return (a1 < b1
+	    ? b0 <= a0 && (a0 - b0) % (b1 - a1) == 0
+	    : b0 >= a0 && (b0 - a0) % (a1 - b1) == 0);
+  return a0 == b0;
+}
+
+/* Return true if a0 + a1 * x might equal b for some nonnegative
+   integer x.  */
+
+template<typename Ca, typename Cb>
+inline bool
+maybe_eq_2 (const Ca &a0, const Ca &a1, const Cb &b)
+{
+  if (a1 != 0)
+     /*      a0 + a1 * x == b
+       ==>             x == (b - a0) / a1
+
+       We need to test whether that's a valid value of x.
+       (b - a0) and a1 must not have opposite signs and the
+       result must be integral.  */
+    return (a1 < 0
+	    ? b <= a0 && (a0 - b) % a1 == 0
+	    : b >= a0 && (b - a0) % a1 == 0);
+  return a0 == b;
+}
+
+/* Return true if A might equal B for some indeterminate values.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline bool
+maybe_eq (const poly_int_pod<N, Ca> &a, const poly_int_pod<N, Cb> &b)
+{
+  STATIC_ASSERT (N <= 2);
+  if (N == 2)
+    return maybe_eq_2 (a.coeffs[0], a.coeffs[1], b.coeffs[0], b.coeffs[1]);
+  return a.coeffs[0] == b.coeffs[0];
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline typename if_nonpoly<Cb, bool>::type
+maybe_eq (const poly_int_pod<N, Ca> &a, const Cb &b)
+{
+  STATIC_ASSERT (N <= 2);
+  if (N == 2)
+    return maybe_eq_2 (a.coeffs[0], a.coeffs[1], b);
+  return a.coeffs[0] == b;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline typename if_nonpoly<Ca, bool>::type
+maybe_eq (const Ca &a, const poly_int_pod<N, Cb> &b)
+{
+  STATIC_ASSERT (N <= 2);
+  if (N == 2)
+    return maybe_eq_2 (b.coeffs[0], b.coeffs[1], a);
+  return a == b.coeffs[0];
+}
+
+template<typename Ca, typename Cb>
+inline typename if_nonpoly2<Ca, Cb, bool>::type
+maybe_eq (const Ca &a, const Cb &b)
+{
+  return a == b;
+}
+
+/* Return true if A might not equal B for some indeterminate values.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline bool
+maybe_ne (const poly_int_pod<N, Ca> &a, const poly_int_pod<N, Cb> &b)
+{
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      if (a.coeffs[i] != b.coeffs[i])
+	return true;
+  return a.coeffs[0] != b.coeffs[0];
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline typename if_nonpoly<Cb, bool>::type
+maybe_ne (const poly_int_pod<N, Ca> &a, const Cb &b)
+{
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      if (a.coeffs[i] != 0)
+	return true;
+  return a.coeffs[0] != b;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline typename if_nonpoly<Ca, bool>::type
+maybe_ne (const Ca &a, const poly_int_pod<N, Cb> &b)
+{
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      if (b.coeffs[i] != 0)
+	return true;
+  return a != b.coeffs[0];
+}
+
+template<typename Ca, typename Cb>
+inline typename if_nonpoly2<Ca, Cb, bool>::type
+maybe_ne (const Ca &a, const Cb &b)
+{
+  return a != b;
+}
+
+/* Return true if A is known to be equal to B.  */
+#define known_eq(A, B) (!maybe_ne (A, B))
+
+/* Return true if A is known to be unequal to B.  */
+#define known_ne(A, B) (!maybe_eq (A, B))
+
+/* Return true if A might be less than or equal to B for some
+   indeterminate values.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline bool
+maybe_le (const poly_int_pod<N, Ca> &a, const poly_int_pod<N, Cb> &b)
+{
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      if (a.coeffs[i] < b.coeffs[i])
+	return true;
+  return a.coeffs[0] <= b.coeffs[0];
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline typename if_nonpoly<Cb, bool>::type
+maybe_le (const poly_int_pod<N, Ca> &a, const Cb &b)
+{
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      if (a.coeffs[i] < 0)
+	return true;
+  return a.coeffs[0] <= b;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline typename if_nonpoly<Ca, bool>::type
+maybe_le (const Ca &a, const poly_int_pod<N, Cb> &b)
+{
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      if (b.coeffs[i] > 0)
+	return true;
+  return a <= b.coeffs[0];
+}
+
+template<typename Ca, typename Cb>
+inline typename if_nonpoly2<Ca, Cb, bool>::type
+maybe_le (const Ca &a, const Cb &b)
+{
+  return a <= b;
+}
+
+/* Return true if A might be less than B for some indeterminate values.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline bool
+maybe_lt (const poly_int_pod<N, Ca> &a, const poly_int_pod<N, Cb> &b)
+{
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      if (a.coeffs[i] < b.coeffs[i])
+	return true;
+  return a.coeffs[0] < b.coeffs[0];
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline typename if_nonpoly<Cb, bool>::type
+maybe_lt (const poly_int_pod<N, Ca> &a, const Cb &b)
+{
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      if (a.coeffs[i] < 0)
+	return true;
+  return a.coeffs[0] < b;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline typename if_nonpoly<Ca, bool>::type
+maybe_lt (const Ca &a, const poly_int_pod<N, Cb> &b)
+{
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      if (b.coeffs[i] > 0)
+	return true;
+  return a < b.coeffs[0];
+}
+
+template<typename Ca, typename Cb>
+inline typename if_nonpoly2<Ca, Cb, bool>::type
+maybe_lt (const Ca &a, const Cb &b)
+{
+  return a < b;
+}
+
+/* Return true if A may be greater than or equal to B.  */
+#define maybe_ge(A, B) maybe_le (B, A)
+
+/* Return true if A may be greater than B.  */
+#define maybe_gt(A, B) maybe_lt (B, A)
+
+/* Return true if A is known to be less than or equal to B.  */
+#define known_le(A, B) (!maybe_gt (A, B))
+
+/* Return true if A is known to be less than B.  */
+#define known_lt(A, B) (!maybe_ge (A, B))
+
+/* Return true if A is known to be greater than B.  */
+#define known_gt(A, B) (!maybe_le (A, B))
+
+/* Return true if A is known to be greater than or equal to B.  */
+#define known_ge(A, B) (!maybe_lt (A, B))
+
+/* Return true if A and B are ordered by the partial ordering known_le.  */
+
+template<typename T1, typename T2>
+inline bool
+ordered_p (const T1 &a, const T2 &b)
+{
+  return ((poly_int_traits<T1>::num_coeffs == 1
+	   && poly_int_traits<T2>::num_coeffs == 1)
+	  || known_le (a, b)
+	  || known_le (b, a));
+}
+
+/* Assert that A and B are known to be ordered and return the minimum
+   of the two.
+
+   NOTE: When using this function, please add a comment above the call
+   explaining why we know the values are ordered in that context.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline POLY_POLY_RESULT (N, Ca, Cb)
+ordered_min (const poly_int_pod<N, Ca> &a, const poly_int_pod<N, Cb> &b)
+{
+  if (known_le (a, b))
+    return a;
+  else
+    {
+      if (N > 1)
+	gcc_checking_assert (known_le (b, a));
+      return b;
+    }
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline CONST_POLY_RESULT (N, Ca, Cb)
+ordered_min (const Ca &a, const poly_int_pod<N, Cb> &b)
+{
+  if (known_le (a, b))
+    return a;
+  else
+    {
+      if (N > 1)
+	gcc_checking_assert (known_le (b, a));
+      return b;
+    }
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline POLY_CONST_RESULT (N, Ca, Cb)
+ordered_min (const poly_int_pod<N, Ca> &a, const Cb &b)
+{
+  if (known_le (a, b))
+    return a;
+  else
+    {
+      if (N > 1)
+	gcc_checking_assert (known_le (b, a));
+      return b;
+    }
+}
+
+/* Assert that A and B are known to be ordered and return the maximum
+   of the two.
+
+   NOTE: When using this function, please add a comment above the call
+   explaining why we know the values are ordered in that context.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline POLY_POLY_RESULT (N, Ca, Cb)
+ordered_max (const poly_int_pod<N, Ca> &a, const poly_int_pod<N, Cb> &b)
+{
+  if (known_le (a, b))
+    return b;
+  else
+    {
+      if (N > 1)
+	gcc_checking_assert (known_le (b, a));
+      return a;
+    }
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline CONST_POLY_RESULT (N, Ca, Cb)
+ordered_max (const Ca &a, const poly_int_pod<N, Cb> &b)
+{
+  if (known_le (a, b))
+    return b;
+  else
+    {
+      if (N > 1)
+	gcc_checking_assert (known_le (b, a));
+      return a;
+    }
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline POLY_CONST_RESULT (N, Ca, Cb)
+ordered_max (const poly_int_pod<N, Ca> &a, const Cb &b)
+{
+  if (known_le (a, b))
+    return b;
+  else
+    {
+      if (N > 1)
+	gcc_checking_assert (known_le (b, a));
+      return a;
+    }
+}
+
+/* Return a constant lower bound on the value of A, which is known
+   to be nonnegative.  */
+
+template<unsigned int N, typename Ca>
+inline Ca
+constant_lower_bound (const poly_int_pod<N, Ca> &a)
+{
+  gcc_checking_assert (known_ge (a, POLY_INT_TYPE (Ca) (0)));
+  return a.coeffs[0];
+}
+
+/* Return a value that is known to be no greater than A and B.  This
+   will be the greatest lower bound for some indeterminate values but
+   not necessarily for all.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline POLY_CONST_RESULT (N, Ca, Cb)
+lower_bound (const poly_int_pod<N, Ca> &a, const Cb &b)
+{
+  typedef POLY_CAST (Ca, Cb) NCa;
+  typedef POLY_CAST (Cb, Ca) NCb;
+  typedef POLY_INT_TYPE (Cb) ICb;
+  typedef POLY_CONST_COEFF (Ca, Cb) C;
+
+  poly_int<N, C> r;
+  POLY_SET_COEFF (C, r, 0, MIN (NCa (a.coeffs[0]), NCb (b)));
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      POLY_SET_COEFF (C, r, i, MIN (NCa (a.coeffs[i]), ICb (0)));
+  return r;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline CONST_POLY_RESULT (N, Ca, Cb)
+lower_bound (const Ca &a, const poly_int_pod<N, Cb> &b)
+{
+  return lower_bound (b, a);
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline POLY_POLY_RESULT (N, Ca, Cb)
+lower_bound (const poly_int_pod<N, Ca> &a, const poly_int_pod<N, Cb> &b)
+{
+  typedef POLY_CAST (Ca, Cb) NCa;
+  typedef POLY_CAST (Cb, Ca) NCb;
+  typedef POLY_POLY_COEFF (Ca, Cb) C;
+
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, MIN (NCa (a.coeffs[i]), NCb (b.coeffs[i])));
+  return r;
+}
+
+template<typename Ca, typename Cb>
+inline CONST_CONST_RESULT (N, Ca, Cb)
+lower_bound (const Ca &a, const Cb &b)
+{
+  return a < b ? a : b;
+}
+
+/* Return a value that is known to be no less than A and B.  This will
+   be the least upper bound for some indeterminate values but not
+   necessarily for all.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline POLY_CONST_RESULT (N, Ca, Cb)
+upper_bound (const poly_int_pod<N, Ca> &a, const Cb &b)
+{
+  typedef POLY_CAST (Ca, Cb) NCa;
+  typedef POLY_CAST (Cb, Ca) NCb;
+  typedef POLY_INT_TYPE (Cb) ICb;
+  typedef POLY_CONST_COEFF (Ca, Cb) C;
+
+  poly_int<N, C> r;
+  POLY_SET_COEFF (C, r, 0, MAX (NCa (a.coeffs[0]), NCb (b)));
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      POLY_SET_COEFF (C, r, i, MAX (NCa (a.coeffs[i]), ICb (0)));
+  return r;
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline CONST_POLY_RESULT (N, Ca, Cb)
+upper_bound (const Ca &a, const poly_int_pod<N, Cb> &b)
+{
+  return upper_bound (b, a);
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline POLY_POLY_RESULT (N, Ca, Cb)
+upper_bound (const poly_int_pod<N, Ca> &a, const poly_int_pod<N, Cb> &b)
+{
+  typedef POLY_CAST (Ca, Cb) NCa;
+  typedef POLY_CAST (Cb, Ca) NCb;
+  typedef POLY_POLY_COEFF (Ca, Cb) C;
+
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (C, r, i, MAX (NCa (a.coeffs[i]), NCb (b.coeffs[i])));
+  return r;
+}
+
+/* Return the greatest common divisor of all nonzero coefficients, or zero
+   if all coefficients are zero.  */
+
+template<unsigned int N, typename Ca>
+inline POLY_BINARY_COEFF (Ca, Ca)
+coeff_gcd (const poly_int_pod<N, Ca> &a)
+{
+  /* Find the first nonzero coefficient, stopping at 0 whatever happens.  */
+  unsigned int i;
+  for (i = N - 1; i > 0; --i)
+    if (a.coeffs[i] != 0)
+      break;
+  typedef POLY_BINARY_COEFF (Ca, Ca) C;
+  C r = a.coeffs[i];
+  for (unsigned int j = 0; j < i; ++j)
+    if (a.coeffs[j] != 0)
+      r = gcd (r, C (a.coeffs[j]));
+  return r;
+}
+
+/* Return a value that is a multiple of both A and B.  This will be the
+   least common multiple for some indeterminate values but necessarily
+   for all.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+POLY_CONST_RESULT (N, Ca, Cb)
+common_multiple (const poly_int_pod<N, Ca> &a, Cb b)
+{
+  POLY_BINARY_COEFF (Ca, Ca) xgcd = coeff_gcd (a);
+  return a * (least_common_multiple (xgcd, b) / xgcd);
+}
+
+template<unsigned int N, typename Ca, typename Cb>
+inline CONST_POLY_RESULT (N, Ca, Cb)
+common_multiple (const Ca &a, const poly_int_pod<N, Cb> &b)
+{
+  return common_multiple (b, a);
+}
+
+/* Return a value that is a multiple of both A and B, asserting that
+   such a value exists.  The result will be the least common multiple
+   for some indeterminate values but necessarily for all.
+
+   NOTE: When using this function, please add a comment above the call
+   explaining why we know the values have a common multiple (which might
+   for example be because we know A / B is rational).  */
+
+template<unsigned int N, typename Ca, typename Cb>
+POLY_POLY_RESULT (N, Ca, Cb)
+force_common_multiple (const poly_int_pod<N, Ca> &a,
+		       const poly_int_pod<N, Cb> &b)
+{
+  if (b.is_constant ())
+    return common_multiple (a, b.coeffs[0]);
+  if (a.is_constant ())
+    return common_multiple (a.coeffs[0], b);
+
+  typedef POLY_CAST (Ca, Cb) NCa;
+  typedef POLY_CAST (Cb, Ca) NCb;
+  typedef POLY_BINARY_COEFF (Ca, Cb) C;
+  typedef POLY_INT_TYPE (Ca) ICa;
+
+  for (unsigned int i = 1; i < N; ++i)
+    if (a.coeffs[i] != ICa (0))
+      {
+	C lcm = least_common_multiple (NCa (a.coeffs[i]), NCb (b.coeffs[i]));
+	C amul = lcm / a.coeffs[i];
+	C bmul = lcm / b.coeffs[i];
+	for (unsigned int j = 0; j < N; ++j)
+	  gcc_checking_assert (a.coeffs[j] * amul == b.coeffs[j] * bmul);
+	return a * amul;
+      }
+  gcc_unreachable ();
+}
+
+/* Compare A and B for sorting purposes, returning -1 if A should come
+   before B, 0 if A and B are identical, and 1 if A should come after B.
+   This is a lexicographical compare of the coefficients in reverse order.
+
+   A consequence of this is that all constant sizes come before all
+   non-constant ones, regardless of magnitude (since a size is never
+   negative).  This is what most callers want.  For example, when laying
+   data out on the stack, it's better to keep all the constant-sized
+   data together so that it can be accessed as a constant offset from a
+   single base.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline int
+compare_sizes_for_sort (const poly_int_pod<N, Ca> &a,
+			const poly_int_pod<N, Cb> &b)
+{
+  for (unsigned int i = N; i-- > 0; )
+    if (a.coeffs[i] != b.coeffs[i])
+      return a.coeffs[i] < b.coeffs[i] ? -1 : 1;
+  return 0;
+}
+
+/* Return true if we can calculate VALUE & (ALIGN - 1) at compile time.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline bool
+can_align_p (const poly_int_pod<N, Ca> &value, Cb align)
+{
+  for (unsigned int i = 1; i < N; i++)
+    if ((value.coeffs[i] & (align - 1)) != 0)
+      return false;
+  return true;
+}
+
+/* Return true if we can align VALUE up to the smallest multiple of
+   ALIGN that is >= VALUE.  Store the aligned value in *ALIGNED if so.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline bool
+can_align_up (const poly_int_pod<N, Ca> &value, Cb align,
+	      poly_int_pod<N, Ca> *aligned)
+{
+  if (!can_align_p (value, align))
+    return false;
+  *aligned = value + (-value.coeffs[0] & (align - 1));
+  return true;
+}
+
+/* Return true if we can align VALUE down to the largest multiple of
+   ALIGN that is <= VALUE.  Store the aligned value in *ALIGNED if so.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline bool
+can_align_down (const poly_int_pod<N, Ca> &value, Cb align,
+		poly_int_pod<N, Ca> *aligned)
+{
+  if (!can_align_p (value, align))
+    return false;
+  *aligned = value - (value.coeffs[0] & (align - 1));
+  return true;
+}
+
+/* Return true if we can align A and B up to the smallest multiples of
+   ALIGN that are >= A and B respectively, and if doing so gives the
+   same value.  */
+
+template<unsigned int N, typename Ca, typename Cb, typename Cc>
+inline bool
+known_equal_after_align_up (const poly_int_pod<N, Ca> &a,
+			    const poly_int_pod<N, Cb> &b,
+			    Cc align)
+{
+  poly_int<N, Ca> aligned_a;
+  poly_int<N, Cb> aligned_b;
+  return (can_align_up (a, align, &aligned_a)
+	  && can_align_up (b, align, &aligned_b)
+	  && known_eq (aligned_a, aligned_b));
+}
+
+/* Return true if we can align A and B down to the largest multiples of
+   ALIGN that are <= A and B respectively, and if doing so gives the
+   same value.  */
+
+template<unsigned int N, typename Ca, typename Cb, typename Cc>
+inline bool
+known_equal_after_align_down (const poly_int_pod<N, Ca> &a,
+			      const poly_int_pod<N, Cb> &b,
+			      Cc align)
+{
+  poly_int<N, Ca> aligned_a;
+  poly_int<N, Cb> aligned_b;
+  return (can_align_down (a, align, &aligned_a)
+	  && can_align_down (b, align, &aligned_b)
+	  && known_eq (aligned_a, aligned_b));
+}
+
+/* Assert that we can align VALUE to ALIGN at compile time and return
+   the smallest multiple of ALIGN that is >= VALUE.
+
+   NOTE: When using this function, please add a comment above the call
+   explaining why we know the non-constant coefficients must already
+   be a multiple of ALIGN.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, Ca>
+force_align_up (const poly_int_pod<N, Ca> &value, Cb align)
+{
+  gcc_checking_assert (can_align_p (value, align));
+  return value + (-value.coeffs[0] & (align - 1));
+}
+
+/* Assert that we can align VALUE to ALIGN at compile time and return
+   the largest multiple of ALIGN that is <= VALUE.
+
+   NOTE: When using this function, please add a comment above the call
+   explaining why we know the non-constant coefficients must already
+   be a multiple of ALIGN.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, Ca>
+force_align_down (const poly_int_pod<N, Ca> &value, Cb align)
+{
+  gcc_checking_assert (can_align_p (value, align));
+  return value - (value.coeffs[0] & (align - 1));
+}
+
+/* Return a value <= VALUE that is a multiple of ALIGN.  It will be the
+   greatest such value for some indeterminate values but not necessarily
+   for all.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, Ca>
+aligned_lower_bound (const poly_int_pod<N, Ca> &value, Cb align)
+{
+  poly_int<N, Ca> r;
+  for (unsigned int i = 0; i < N; i++)
+    /* This form copes correctly with more type combinations than
+       value.coeffs[i] & -align would.  */
+    POLY_SET_COEFF (Ca, r, i, (value.coeffs[i]
+			       - (value.coeffs[i] & (align - 1))));
+  return r;
+}
+
+/* Return a value >= VALUE that is a multiple of ALIGN.  It will be the
+   least such value for some indeterminate values but not necessarily
+   for all.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, Ca>
+aligned_upper_bound (const poly_int_pod<N, Ca> &value, Cb align)
+{
+  poly_int<N, Ca> r;
+  for (unsigned int i = 0; i < N; i++)
+    POLY_SET_COEFF (Ca, r, i, (value.coeffs[i]
+			       + (-value.coeffs[i] & (align - 1))));
+  return r;
+}
+
+/* Assert that we can align VALUE to ALIGN at compile time.  Align VALUE
+   down to the largest multiple of ALIGN that is <= VALUE, then divide by
+   ALIGN.
+
+   NOTE: When using this function, please add a comment above the call
+   explaining why we know the non-constant coefficients must already
+   be a multiple of ALIGN.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, Ca>
+force_align_down_and_div (const poly_int_pod<N, Ca> &value, Cb align)
+{
+  gcc_checking_assert (can_align_p (value, align));
+
+  poly_int<N, Ca> r;
+  POLY_SET_COEFF (Ca, r, 0, ((value.coeffs[0]
+			      - (value.coeffs[0] & (align - 1)))
+			     / align));
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      POLY_SET_COEFF (Ca, r, i, value.coeffs[i] / align);
+  return r;
+}
+
+/* Assert that we can align VALUE to ALIGN at compile time.  Align VALUE
+   up to the smallest multiple of ALIGN that is >= VALUE, then divide by
+   ALIGN.
+
+   NOTE: When using this function, please add a comment above the call
+   explaining why we know the non-constant coefficients must already
+   be a multiple of ALIGN.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline poly_int<N, Ca>
+force_align_up_and_div (const poly_int_pod<N, Ca> &value, Cb align)
+{
+  gcc_checking_assert (can_align_p (value, align));
+
+  poly_int<N, Ca> r;
+  POLY_SET_COEFF (Ca, r, 0, ((value.coeffs[0]
+			      + (-value.coeffs[0] & (align - 1)))
+			     / align));
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      POLY_SET_COEFF (Ca, r, i, value.coeffs[i] / align);
+  return r;
+}
+
+/* Return true if we know at compile time the difference between VALUE
+   and the equal or preceding multiple of ALIGN.  Store the value in
+   *MISALIGN if so.  */
+
+template<unsigned int N, typename Ca, typename Cb, typename Cm>
+inline bool
+known_misalignment (const poly_int_pod<N, Ca> &value, Cb align, Cm *misalign)
+{
+  gcc_checking_assert (align != 0);
+  if (!can_align_p (value, align))
+    return false;
+  *misalign = value.coeffs[0] & (align - 1);
+  return true;
+}
+
+/* Return X & (Y - 1), asserting that this value is known.  Please add
+   an a comment above callers to this function to explain why the condition
+   is known to hold.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline POLY_BINARY_COEFF (Ca, Ca)
+force_get_misalignment (const poly_int_pod<N, Ca> &a, Cb align)
+{
+  gcc_checking_assert (can_align_p (a, align));
+  return a.coeffs[0] & (align - 1);
+}
+
+/* Return the maximum alignment that A is known to have.  Return 0
+   if A is known to be zero.  */
+
+template<unsigned int N, typename Ca>
+inline POLY_BINARY_COEFF (Ca, Ca)
+known_alignment (const poly_int_pod<N, Ca> &a)
+{
+  typedef POLY_BINARY_COEFF (Ca, Ca) C;
+  C r = a.coeffs[0];
+  for (unsigned int i = 1; i < N; ++i)
+    r |= a.coeffs[i];
+  return r & -r;
+}
+
+/* Return true if we can compute A | B at compile time, storing the
+   result in RES if so.  */
+
+template<unsigned int N, typename Ca, typename Cb, typename Cr>
+inline typename if_nonpoly<Cb, bool>::type
+can_ior_p (const poly_int_pod<N, Ca> &a, Cb b, Cr *result)
+{
+  /* Coefficients 1 and above must be a multiple of something greater
+     than B.  */
+  typedef POLY_INT_TYPE (Ca) int_type;
+  if (N >= 2)
+    for (unsigned int i = 1; i < N; i++)
+      if ((-(a.coeffs[i] & -a.coeffs[i]) & b) != int_type (0))
+	return false;
+  *result = a;
+  result->coeffs[0] |= b;
+  return true;
+}
+
+/* Return true if A is a constant multiple of B, storing the
+   multiple in *MULTIPLE if so.  */
+
+template<unsigned int N, typename Ca, typename Cb, typename Cm>
+inline typename if_nonpoly<Cb, bool>::type
+constant_multiple_p (const poly_int_pod<N, Ca> &a, Cb b, Cm *multiple)
+{
+  typedef POLY_CAST (Ca, Cb) NCa;
+  typedef POLY_CAST (Cb, Ca) NCb;
+
+  /* Do the modulus before the constant check, to catch divide by
+     zero errors.  */
+  if (NCa (a.coeffs[0]) % NCb (b) != 0 || !a.is_constant ())
+    return false;
+  *multiple = NCa (a.coeffs[0]) / NCb (b);
+  return true;
+}
+
+template<unsigned int N, typename Ca, typename Cb, typename Cm>
+inline typename if_nonpoly<Ca, bool>::type
+constant_multiple_p (Ca a, const poly_int_pod<N, Cb> &b, Cm *multiple)
+{
+  typedef POLY_CAST (Ca, Cb) NCa;
+  typedef POLY_CAST (Cb, Ca) NCb;
+  typedef POLY_INT_TYPE (Ca) int_type;
+
+  /* Do the modulus before the constant check, to catch divide by
+     zero errors.  */
+  if (NCa (a) % NCb (b.coeffs[0]) != 0
+      || (a != int_type (0) && !b.is_constant ()))
+    return false;
+  *multiple = NCa (a) / NCb (b.coeffs[0]);
+  return true;
+}
+
+template<unsigned int N, typename Ca, typename Cb, typename Cm>
+inline bool
+constant_multiple_p (const poly_int_pod<N, Ca> &a,
+		     const poly_int_pod<N, Cb> &b, Cm *multiple)
+{
+  typedef POLY_CAST (Ca, Cb) NCa;
+  typedef POLY_CAST (Cb, Ca) NCb;
+  typedef POLY_INT_TYPE (Ca) ICa;
+  typedef POLY_INT_TYPE (Cb) ICb;
+  typedef POLY_BINARY_COEFF (Ca, Cb) C;
+
+  if (NCa (a.coeffs[0]) % NCb (b.coeffs[0]) != 0)
+    return false;
+
+  C r = NCa (a.coeffs[0]) / NCb (b.coeffs[0]);
+  for (unsigned int i = 1; i < N; ++i)
+    if (b.coeffs[i] == ICb (0)
+	? a.coeffs[i] != ICa (0)
+	: (NCa (a.coeffs[i]) % NCb (b.coeffs[i]) != 0
+	   || NCa (a.coeffs[i]) / NCb (b.coeffs[i]) != r))
+      return false;
+
+  *multiple = r;
+  return true;
+}
+
+/* Return true if A is a multiple of B.  */
+
+template<typename Ca, typename Cb>
+inline typename if_nonpoly2<Ca, Cb, bool>::type
+multiple_p (Ca a, Cb b)
+{
+  return a % b == 0;
+}
+
+/* Return true if A is a (polynomial) multiple of B.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline typename if_nonpoly<Cb, bool>::type
+multiple_p (const poly_int_pod<N, Ca> &a, Cb b)
+{
+  for (unsigned int i = 0; i < N; ++i)
+    if (a.coeffs[i] % b != 0)
+      return false;
+  return true;
+}
+
+/* Return true if A is a (constant) multiple of B.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline typename if_nonpoly<Ca, bool>::type
+multiple_p (Ca a, const poly_int_pod<N, Cb> &b)
+{
+  typedef POLY_INT_TYPE (Ca) int_type;
+
+  /* Do the modulus before the constant check, to catch divide by
+     potential zeros.  */
+  return a % b.coeffs[0] == 0 && (a == int_type (0) || b.is_constant ());
+}
+
+/* Return true if A is a (polynomial) multiple of B.  This handles cases
+   where either B is constant or the multiple is constant.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline bool
+multiple_p (const poly_int_pod<N, Ca> &a, const poly_int_pod<N, Cb> &b)
+{
+  if (b.is_constant ())
+    return multiple_p (a, b.coeffs[0]);
+  POLY_BINARY_COEFF (Ca, Ca) tmp;
+  return constant_multiple_p (a, b, &tmp);
+}
+
+/* Return true if A is a (constant) multiple of B, storing the
+   multiple in *MULTIPLE if so.  */
+
+template<typename Ca, typename Cb, typename Cm>
+inline typename if_nonpoly2<Ca, Cb, bool>::type
+multiple_p (Ca a, Cb b, Cm *multiple)
+{
+  if (a % b != 0)
+    return false;
+  *multiple = a / b;
+  return true;
+}
+
+/* Return true if A is a (polynomial) multiple of B, storing the
+   multiple in *MULTIPLE if so.  */
+
+template<unsigned int N, typename Ca, typename Cb, typename Cm>
+inline typename if_nonpoly<Cb, bool>::type
+multiple_p (const poly_int_pod<N, Ca> &a, Cb b, poly_int_pod<N, Cm> *multiple)
+{
+  if (!multiple_p (a, b))
+    return false;
+  for (unsigned int i = 0; i < N; ++i)
+    multiple->coeffs[i] = a.coeffs[i] / b;
+  return true;
+}
+
+/* Return true if B is a constant and A is a (constant) multiple of B,
+   storing the multiple in *MULTIPLE if so.  */
+
+template<unsigned int N, typename Ca, typename Cb, typename Cm>
+inline typename if_nonpoly<Ca, bool>::type
+multiple_p (Ca a, const poly_int_pod<N, Cb> &b, Cm *multiple)
+{
+  typedef POLY_CAST (Ca, Cb) NCa;
+
+  /* Do the modulus before the constant check, to catch divide by
+     potential zeros.  */
+  if (a % b.coeffs[0] != 0 || (NCa (a) != 0 && !b.is_constant ()))
+    return false;
+  *multiple = a / b.coeffs[0];
+  return true;
+}
+
+/* Return true if A is a (polynomial) multiple of B, storing the
+   multiple in *MULTIPLE if so.  This handles cases where either
+   B is constant or the multiple is constant.  */
+
+template<unsigned int N, typename Ca, typename Cb, typename Cm>
+inline bool
+multiple_p (const poly_int_pod<N, Ca> &a, const poly_int_pod<N, Cb> &b,
+	    poly_int_pod<N, Cm> *multiple)
+{
+  if (b.is_constant ())
+    return multiple_p (a, b.coeffs[0], multiple);
+  return constant_multiple_p (a, b, multiple);
+}
+
+/* Return A / B, given that A is known to be a multiple of B.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline POLY_CONST_RESULT (N, Ca, Cb)
+exact_div (const poly_int_pod<N, Ca> &a, Cb b)
+{
+  typedef POLY_CONST_COEFF (Ca, Cb) C;
+  poly_int<N, C> r;
+  for (unsigned int i = 0; i < N; i++)
+    {
+      gcc_checking_assert (a.coeffs[i] % b == 0);
+      POLY_SET_COEFF (C, r, i, a.coeffs[i] / b);
+    }
+  return r;
+}
+
+/* Return A / B, given that A is known to be a multiple of B.  */
+
+template<unsigned int N, typename Ca, typename Cb>
+inline POLY_POLY_RESULT (N, Ca, Cb)
+exact_div (const poly_int_pod<N, Ca> &a, const poly_int_pod<N, Cb> &b)
+{
+  if (b.is_constant ())
+    return exact_div (a, b.coeffs[0]);
+
+  typedef POLY_CAST (Ca, Cb) NCa;
+  typedef POLY_CAST (Cb, Ca) NCb;
+  typedef POLY_BINARY_COEFF (Ca, Cb) C;
+  typedef POLY_INT_TYPE (Cb) int_type;
+
+  gcc_checking_assert (a.coeffs[0] % b.coeffs[0] == 0);
+  C r = NCa (a.coeffs[0]) / NCb (b.coeffs[0]);
+  for (unsigned int i = 1; i < N; ++i)
+    gcc_checking_assert (b.coeffs[i] == int_type (0)
+			 ? a.coeffs[i] == int_type (0)
+			 : (a.coeffs[i] % b.coeffs[i] == 0
+			    && NCa (a.coeffs[i]) / NCb (b.coeffs[i]) == r));
+
+  return r;
+}
+
+/* Return true if there is some constant Q and polynomial r such that:
+
+     (1) a = b * Q + r
+     (2) |b * Q| <= |a|
+     (3) |r| < |b|
+
+   Store the value Q in *QUOTIENT if so.  */
+
+template<unsigned int N, typename Ca, typename Cb, typename Cq>
+inline typename if_nonpoly2<Cb, Cq, bool>::type
+can_div_trunc_p (const poly_int_pod<N, Ca> &a, Cb b, Cq *quotient)
+{
+  typedef POLY_CAST (Ca, Cb) NCa;
+  typedef POLY_CAST (Cb, Ca) NCb;
+
+  /* Do the division before the constant check, to catch divide by
+     zero errors.  */
+  Cq q = NCa (a.coeffs[0]) / NCb (b);
+  if (!a.is_constant ())
+    return false;
+  *quotient = q;
+  return true;
+}
+
+template<unsigned int N, typename Ca, typename Cb, typename Cq>
+inline typename if_nonpoly<Cq, bool>::type
+can_div_trunc_p (const poly_int_pod<N, Ca> &a,
+		 const poly_int_pod<N, Cb> &b,
+		 Cq *quotient)
+{
+  /* We can calculate Q from the case in which the indeterminates
+     are zero.  */
+  typedef POLY_CAST (Ca, Cb) NCa;
+  typedef POLY_CAST (Cb, Ca) NCb;
+  typedef POLY_INT_TYPE (Ca) ICa;
+  typedef POLY_INT_TYPE (Cb) ICb;
+  typedef POLY_BINARY_COEFF (Ca, Cb) C;
+  C q = NCa (a.coeffs[0]) / NCb (b.coeffs[0]);
+
+  /* Check the other coefficients and record whether the division is exact.
+     The only difficult case is when it isn't.  If we require a and b to
+     ordered wrt zero, there can be no two coefficients of the same value
+     that have opposite signs.  This means that:
+
+	 |a| = |a0| + |a1 * x1| + |a2 * x2| + ...
+	 |b| = |b0| + |b1 * x1| + |b2 * x2| + ...
+
+      The Q we've just calculated guarantees:
+
+	 |b0 * Q| <= |a0|
+	 |a0 - b0 * Q| < |b0|
+
+      and so:
+
+	 (2) |b * Q| <= |a|
+
+      is satisfied if:
+
+	 |bi * xi * Q| <= |ai * xi|
+
+      for each i in [1, N].  This is trivially true when xi is zero.
+      When it isn't we need:
+
+	 (2') |bi * Q| <= |ai|
+
+      r is calculated as:
+
+	 r = r0 + r1 * x1 + r2 * x2 + ...
+	 where ri = ai - bi * Q
+
+      Restricting to ordered a and b also guarantees that no two ris
+      have opposite signs, so we have:
+
+	 |r| = |r0| + |r1 * x1| + |r2 * x2| + ...
+
+      We know from the calculation of Q that |r0| < |b0|, so:
+
+	 (3) |r| < |b|
+
+      is satisfied if:
+
+	 (3') |ai - bi * Q| <= |bi|
+
+      for each i in [1, N].  */
+  bool rem_p = NCa (a.coeffs[0]) % NCb (b.coeffs[0]) != 0;
+  for (unsigned int i = 1; i < N; ++i)
+    {
+      if (b.coeffs[i] == ICb (0))
+	{
+	  /* For bi == 0 we simply need: (3') |ai| == 0.  */
+	  if (a.coeffs[i] != ICa (0))
+	    return false;
+	}
+      else
+	{
+	  if (q == 0)
+	    {
+	      /* For Q == 0 we simply need: (3') |ai| <= |bi|.  */
+	      if (a.coeffs[i] != ICa (0))
+		{
+		  /* Use negative absolute to avoid overflow, i.e.
+		     -|ai| >= -|bi|.  */
+		  C neg_abs_a = (a.coeffs[i] < 0 ? a.coeffs[i] : -a.coeffs[i]);
+		  C neg_abs_b = (b.coeffs[i] < 0 ? b.coeffs[i] : -b.coeffs[i]);
+		  if (neg_abs_a < neg_abs_b)
+		    return false;
+		  rem_p = true;
+		}
+	    }
+	  else
+	    {
+	      /* Otherwise just check for the case in which ai / bi == Q.  */
+	      if (NCa (a.coeffs[i]) / NCb (b.coeffs[i]) != q)
+		return false;
+	      if (NCa (a.coeffs[i]) % NCb (b.coeffs[i]) != 0)
+		rem_p = true;
+	    }
+	}
+    }
+
+  /* If the division isn't exact, require both values to be ordered wrt 0,
+     so that we can guarantee conditions (2) and (3) for all indeterminate
+     values.  */
+  if (rem_p && (!ordered_p (a, ICa (0)) || !ordered_p (b, ICb (0))))
+    return false;
+
+  *quotient = q;
+  return true;
+}
+
+/* Likewise, but also store r in *REMAINDER.  */
+
+template<unsigned int N, typename Ca, typename Cb, typename Cq, typename Cr>
+inline typename if_nonpoly<Cq, bool>::type
+can_div_trunc_p (const poly_int_pod<N, Ca> &a,
+		 const poly_int_pod<N, Cb> &b,
+		 Cq *quotient, Cr *remainder)
+{
+  if (!can_div_trunc_p (a, b, quotient))
+    return false;
+  *remainder = a - *quotient * b;
+  return true;
+}
+
+/* Return true if there is some polynomial q and constant R such that:
+
+     (1) a = B * q + R
+     (2) |B * q| <= |a|
+     (3) |R| < |B|
+
+   Store the value q in *QUOTIENT if so.  */
+
+template<unsigned int N, typename Ca, typename Cb, typename Cq>
+inline typename if_nonpoly<Cb, bool>::type
+can_div_trunc_p (const poly_int_pod<N, Ca> &a, Cb b,
+		 poly_int_pod<N, Cq> *quotient)
+{
+  /* The remainder must be constant.  */
+  for (unsigned int i = 1; i < N; ++i)
+    if (a.coeffs[i] % b != 0)
+      return false;
+  for (unsigned int i = 0; i < N; ++i)
+    quotient->coeffs[i] = a.coeffs[i] / b;
+  return true;
+}
+
+/* Likewise, but also store R in *REMAINDER.  */
+
+template<unsigned int N, typename Ca, typename Cb, typename Cq, typename Cr>
+inline typename if_nonpoly<Cb, bool>::type
+can_div_trunc_p (const poly_int_pod<N, Ca> &a, Cb b,
+		 poly_int_pod<N, Cq> *quotient, Cr *remainder)
+{
+  if (!can_div_trunc_p (a, b, quotient))
+    return false;
+  *remainder = a.coeffs[0] % b;
+  return true;
+}
+
+/* Return true if we can compute A / B at compile time, rounding towards zero.
+   Store the result in QUOTIENT if so.
+
+   This handles cases in which either B is constant or the result is
+   constant.  */
+
+template<unsigned int N, typename Ca, typename Cb, typename Cq>
+inline bool
+can_div_trunc_p (const poly_int_pod<N, Ca> &a,
+		 const poly_int_pod<N, Cb> &b,
+		 poly_int_pod<N, Cq> *quotient)
+{
+  if (b.is_constant ())
+    return can_div_trunc_p (a, b.coeffs[0], quotient);
+  if (!can_div_trunc_p (a, b, &quotient->coeffs[0]))
+    return false;
+  for (unsigned int i = 1; i < N; ++i)
+    quotient->coeffs[i] = 0;
+  return true;
+}
+
+/* Return true if there is some constant Q and polynomial r such that:
+
+     (1) a = b * Q + r
+     (2) |a| <= |b * Q|
+     (3) |r| < |b|
+
+   Store the value Q in *QUOTIENT if so.  */
+
+template<unsigned int N, typename Ca, typename Cb, typename Cq>
+inline typename if_nonpoly<Cq, bool>::type
+can_div_away_from_zero_p (const poly_int_pod<N, Ca> &a,
+			  const poly_int_pod<N, Cb> &b,
+			  Cq *quotient)
+{
+  if (!can_div_trunc_p (a, b, quotient))
+    return false;
+  if (maybe_ne (*quotient * b, a))
+    *quotient += (*quotient < 0 ? -1 : 1);
+  return true;
+}
+
+/* Use print_dec to print VALUE to FILE, where SGN is the sign
+   of the values.  */
+
+template<unsigned int N, typename C>
+void
+print_dec (const poly_int_pod<N, C> &value, FILE *file, signop sgn)
+{
+  if (value.is_constant ())
+    print_dec (value.coeffs[0], file, sgn);
+  else
+    {
+      fprintf (file, "[");
+      for (unsigned int i = 0; i < N; ++i)
+	{
+	  print_dec (value.coeffs[i], file, sgn);
+	  fputc (i == N - 1 ? ']' : ',', file);
+	}
+    }
+}
+
+/* Likewise without the signop argument, for coefficients that have an
+   inherent signedness.  */
+
+template<unsigned int N, typename C>
+void
+print_dec (const poly_int_pod<N, C> &value, FILE *file)
+{
+  STATIC_ASSERT (poly_coeff_traits<C>::signedness >= 0);
+  print_dec (value, file,
+	     poly_coeff_traits<C>::signedness ? SIGNED : UNSIGNED);
+}
+
+/* Use print_hex to print VALUE to FILE.  */
+
+template<unsigned int N, typename C>
+void
+print_hex (const poly_int_pod<N, C> &value, FILE *file)
+{
+  if (value.is_constant ())
+    print_hex (value.coeffs[0], file);
+  else
+    {
+      fprintf (file, "[");
+      for (unsigned int i = 0; i < N; ++i)
+	{
+	  print_hex (value.coeffs[i], file);
+	  fputc (i == N - 1 ? ']' : ',', file);
+	}
+    }
+}
+
+/* Helper for calculating the distance between two points P1 and P2,
+   in cases where known_le (P1, P2).  T1 and T2 are the types of the
+   two positions, in either order.  The coefficients of P2 - P1 have
+   type unsigned HOST_WIDE_INT if the coefficients of both T1 and T2
+   have C++ primitive type, otherwise P2 - P1 has its usual
+   wide-int-based type.
+
+   The actual subtraction should look something like this:
+
+     typedef poly_span_traits<T1, T2> span_traits;
+     span_traits::cast (P2) - span_traits::cast (P1)
+
+   Applying the cast before the subtraction avoids undefined overflow
+   for signed T1 and T2.
+
+   The implementation of the cast tries to avoid unnecessary arithmetic
+   or copying.  */
+template<typename T1, typename T2,
+	 typename Res = POLY_BINARY_COEFF (POLY_BINARY_COEFF (T1, T2),
+					   unsigned HOST_WIDE_INT)>
+struct poly_span_traits
+{
+  template<typename T>
+  static const T &cast (const T &x) { return x; }
+};
+
+template<typename T1, typename T2>
+struct poly_span_traits<T1, T2, unsigned HOST_WIDE_INT>
+{
+  template<typename T>
+  static typename if_nonpoly<T, unsigned HOST_WIDE_INT>::type
+  cast (const T &x) { return x; }
+
+  template<unsigned int N, typename T>
+  static poly_int<N, unsigned HOST_WIDE_INT>
+  cast (const poly_int_pod<N, T> &x) { return x; }
+};
+
+/* Return true if SIZE represents a known size, assuming that all-ones
+   indicates an unknown size.  */
+
+template<typename T>
+inline bool
+known_size_p (const T &a)
+{
+  return maybe_ne (a, POLY_INT_TYPE (T) (-1));
+}
+
+/* Return true if range [POS, POS + SIZE) might include VAL.
+   SIZE can be the special value -1, in which case the range is
+   open-ended.  */
+
+template<typename T1, typename T2, typename T3>
+inline bool
+maybe_in_range_p (const T1 &val, const T2 &pos, const T3 &size)
+{
+  typedef poly_span_traits<T1, T2> start_span;
+  typedef poly_span_traits<T3, T3> size_span;
+  if (known_lt (val, pos))
+    return false;
+  if (!known_size_p (size))
+    return true;
+  if ((poly_int_traits<T1>::num_coeffs > 1
+       || poly_int_traits<T2>::num_coeffs > 1)
+      && maybe_lt (val, pos))
+    /* In this case we don't know whether VAL >= POS is true at compile
+       time, so we can't prove that VAL >= POS + SIZE.  */
+    return true;
+  return maybe_lt (start_span::cast (val) - start_span::cast (pos),
+		   size_span::cast (size));
+}
+
+/* Return true if range [POS, POS + SIZE) is known to include VAL.
+   SIZE can be the special value -1, in which case the range is
+   open-ended.  */
+
+template<typename T1, typename T2, typename T3>
+inline bool
+known_in_range_p (const T1 &val, const T2 &pos, const T3 &size)
+{
+  typedef poly_span_traits<T1, T2> start_span;
+  typedef poly_span_traits<T3, T3> size_span;
+  return (known_size_p (size)
+	  && known_ge (val, pos)
+	  && known_lt (start_span::cast (val) - start_span::cast (pos),
+		       size_span::cast (size)));
+}
+
+/* Return true if the two ranges [POS1, POS1 + SIZE1) and [POS2, POS2 + SIZE2)
+   might overlap.  SIZE1 and/or SIZE2 can be the special value -1, in which
+   case the range is open-ended.  */
+
+template<typename T1, typename T2, typename T3, typename T4>
+inline bool
+ranges_maybe_overlap_p (const T1 &pos1, const T2 &size1,
+			const T3 &pos2, const T4 &size2)
+{
+  if (maybe_in_range_p (pos2, pos1, size1))
+    return maybe_ne (size2, POLY_INT_TYPE (T4) (0));
+  if (maybe_in_range_p (pos1, pos2, size2))
+    return maybe_ne (size1, POLY_INT_TYPE (T2) (0));
+  return false;
+}
+
+/* Return true if the two ranges [POS1, POS1 + SIZE1) and [POS2, POS2 + SIZE2)
+   are known to overlap.  SIZE1 and/or SIZE2 can be the special value -1,
+   in which case the range is open-ended.  */
+
+template<typename T1, typename T2, typename T3, typename T4>
+inline bool
+ranges_known_overlap_p (const T1 &pos1, const T2 &size1,
+			const T3 &pos2, const T4 &size2)
+{
+  typedef poly_span_traits<T1, T3> start_span;
+  typedef poly_span_traits<T2, T2> size1_span;
+  typedef poly_span_traits<T4, T4> size2_span;
+  /* known_gt (POS1 + SIZE1, POS2)                         [infinite precision]
+     --> known_gt (SIZE1, POS2 - POS1)                     [infinite precision]
+     --> known_gt (SIZE1, POS2 - lower_bound (POS1, POS2)) [infinite precision]
+                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ always nonnegative
+     --> known_gt (SIZE1, span1::cast (POS2 - lower_bound (POS1, POS2))).
+
+     Using the saturating subtraction enforces that SIZE1 must be
+     nonzero, since known_gt (0, x) is false for all nonnegative x.
+     If POS2.coeff[I] < POS1.coeff[I] for some I > 0, increasing
+     indeterminate number I makes the unsaturated condition easier to
+     satisfy, so using a saturated coefficient of zero tests the case in
+     which the indeterminate is zero (the minimum value).  */
+  return (known_size_p (size1)
+	  && known_size_p (size2)
+	  && known_lt (start_span::cast (pos2)
+		       - start_span::cast (lower_bound (pos1, pos2)),
+		       size1_span::cast (size1))
+	  && known_lt (start_span::cast (pos1)
+		       - start_span::cast (lower_bound (pos1, pos2)),
+		       size2_span::cast (size2)));
+}
+
+/* Return true if range [POS1, POS1 + SIZE1) is known to be a subrange of
+   [POS2, POS2 + SIZE2).  SIZE1 and/or SIZE2 can be the special value -1,
+   in which case the range is open-ended.  */
+
+template<typename T1, typename T2, typename T3, typename T4>
+inline bool
+known_subrange_p (const T1 &pos1, const T2 &size1,
+		  const T3 &pos2, const T4 &size2)
+{
+  typedef typename poly_int_traits<T2>::coeff_type C2;
+  typedef poly_span_traits<T1, T3> start_span;
+  typedef poly_span_traits<T2, T4> size_span;
+  return (known_gt (size1, POLY_INT_TYPE (T2) (0))
+	  && (poly_coeff_traits<C2>::signedness > 0
+	      || known_size_p (size1))
+	  && known_size_p (size2)
+	  && known_ge (pos1, pos2)
+	  && known_le (size1, size2)
+	  && known_le (start_span::cast (pos1) - start_span::cast (pos2),
+		       size_span::cast (size2) - size_span::cast (size1)));
+}
+
+/* Return true if the endpoint of the range [POS, POS + SIZE) can be
+   stored in a T, or if SIZE is the special value -1, which makes the
+   range open-ended.  */
+
+template<typename T>
+inline typename if_nonpoly<T, bool>::type
+endpoint_representable_p (const T &pos, const T &size)
+{
+  return (!known_size_p (size)
+	  || pos <= poly_coeff_traits<T>::max_value - size);
+}
+
+template<unsigned int N, typename C>
+inline bool
+endpoint_representable_p (const poly_int_pod<N, C> &pos,
+			  const poly_int_pod<N, C> &size)
+{
+  if (known_size_p (size))
+    for (unsigned int i = 0; i < N; ++i)
+      if (pos.coeffs[i] > poly_coeff_traits<C>::max_value - size.coeffs[i])
+	return false;
+  return true;
+}
+
+template<unsigned int N, typename C>
+void
+gt_ggc_mx (poly_int_pod<N, C> *)
+{
+}
+
+template<unsigned int N, typename C>
+void
+gt_pch_nx (poly_int_pod<N, C> *)
+{
+}
+
+template<unsigned int N, typename C>
+void
+gt_pch_nx (poly_int_pod<N, C> *, void (*) (void *, void *), void *)
+{
+}
+
+#undef POLY_SET_COEFF
+#undef POLY_INT_TYPE
+#undef POLY_BINARY_COEFF
+#undef CONST_CONST_RESULT
+#undef POLY_CONST_RESULT
+#undef CONST_POLY_RESULT
+#undef POLY_POLY_RESULT
+#undef POLY_CONST_COEFF
+#undef CONST_POLY_COEFF
+#undef POLY_POLY_COEFF
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/predict.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/predict.def
new file mode 100644
index 0000000..53b39ab
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/predict.def
@@ -0,0 +1,231 @@
+/* Definitions for the branch prediction routines in the GNU compiler.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Before including this file, you should define a macro:
+
+     DEF_PREDICTOR (ENUM, NAME, HITRATE)
+
+   This macro will be called once for each predictor.  The ENUM will
+   be of type `enum br_predictor', and will enumerate all supported
+   predictors.  The order of DEF_PREDICTOR calls is important, as
+   in the first match combining heuristics, the predictor appearing
+   first in this file will win.
+
+   NAME is used in the debugging output to determine predictor type.
+
+   HITRATE is the probability that edge predicted by predictor as taken
+   will be really taken (so it should be always above
+   REG_BR_PROB_BASE / 2).  */
+
+
+/* A value used as final outcome of all heuristics.  */
+DEF_PREDICTOR (PRED_COMBINED, "combined", PROB_ALWAYS, 0)
+
+/* An outcome estimated by Dempster-Shaffer theory.  */
+DEF_PREDICTOR (PRED_DS_THEORY, "DS theory", PROB_ALWAYS, 0)
+
+/* A combined heuristics using probability determined by first
+   matching heuristics from this list.  */
+DEF_PREDICTOR (PRED_FIRST_MATCH, "first match", PROB_ALWAYS, 0)
+
+/* Heuristic applying when no heuristic below applies.  */
+DEF_PREDICTOR (PRED_NO_PREDICTION, "no prediction", PROB_ALWAYS, 0)
+
+/* Mark unconditional jump as taken.  */
+DEF_PREDICTOR (PRED_UNCONDITIONAL, "unconditional jump", PROB_ALWAYS,
+	       PRED_FLAG_FIRST_MATCH)
+
+/* Return value of malloc function is almost always non-null.  */
+DEF_PREDICTOR (PRED_MALLOC_NONNULL, "malloc returned non-NULL", \
+	       PROB_VERY_LIKELY, PRED_FLAG_FIRST_MATCH)
+
+/* Use number of loop iterations determined by # of iterations
+   analysis to set probability.  We don't want to use Dempster-Shaffer
+   theory here, as the predictions is exact.  */
+DEF_PREDICTOR (PRED_LOOP_ITERATIONS, "loop iterations", PROB_UNINITIALIZED,
+	       PRED_FLAG_FIRST_MATCH)
+
+/* Assume that any given atomic operation has low contention,
+   and thus the compare-and-swap operation succeeds. */
+DEF_PREDICTOR (PRED_COMPARE_AND_SWAP, "compare and swap", PROB_VERY_LIKELY,
+	       PRED_FLAG_FIRST_MATCH)
+
+/* Hints dropped by user via __builtin_expect feature.  Note: the
+   probability of PROB_VERY_LIKELY is now overwritten by param
+   builtin_expect_probability with a default value of HITRATE(90).
+   Refer to param.def for details.  */
+DEF_PREDICTOR (PRED_BUILTIN_EXPECT, "__builtin_expect", PROB_VERY_LIKELY,
+	       PRED_FLAG_FIRST_MATCH)
+
+/* Hints provided by user via __builtin_expect_with_probability.  */
+DEF_PREDICTOR (PRED_BUILTIN_EXPECT_WITH_PROBABILITY,
+	       "__builtin_expect_with_probability", PROB_UNINITIALIZED,
+	       PRED_FLAG_FIRST_MATCH)
+
+/* Branches to hot labels are likely.  */
+DEF_PREDICTOR (PRED_HOT_LABEL, "hot label", HITRATE (90),
+	       PRED_FLAG_FIRST_MATCH)
+
+/* Branches to cold labels are extremely unlikely.  */
+DEF_PREDICTOR (PRED_COLD_LABEL, "cold label", HITRATE (90),
+	       PRED_FLAG_FIRST_MATCH)
+
+/* Use number of loop iterations guessed by the contents of the loop.  */
+DEF_PREDICTOR (PRED_LOOP_ITERATIONS_GUESSED, "guessed loop iterations",
+	       PROB_UNINITIALIZED, PRED_FLAG_FIRST_MATCH)
+
+/* Use number of loop iterations guessed by the contents of the loop.  */
+DEF_PREDICTOR (PRED_LOOP_ITERATIONS_MAX, "guessed loop iterations",
+	       PROB_UNINITIALIZED, PRED_FLAG_FIRST_MATCH)
+
+/* Branch containing goto is probably not taken.  */
+DEF_PREDICTOR (PRED_CONTINUE, "continue", HITRATE (67), 0)
+
+/* Branch to basic block containing call marked by noreturn attribute.  */
+DEF_PREDICTOR (PRED_NORETURN, "noreturn call", PROB_VERY_LIKELY,
+	       PRED_FLAG_FIRST_MATCH)
+
+/* Branch to basic block containing call marked by cold function attribute.  */
+DEF_PREDICTOR (PRED_COLD_FUNCTION, "cold function call", PROB_VERY_LIKELY,
+	       PRED_FLAG_FIRST_MATCH)
+
+/* Edge causing loop to terminate is probably not taken.  */
+DEF_PREDICTOR (PRED_LOOP_EXIT, "loop exit", HITRATE (89),
+	       PRED_FLAG_FIRST_MATCH)
+
+/* Same as LOOP_EXIT but for loops containing recursive call.  */
+DEF_PREDICTOR (PRED_LOOP_EXIT_WITH_RECURSION, "loop exit with recursion",
+	       HITRATE (78), PRED_FLAG_FIRST_MATCH)
+
+/* Edge causing loop to terminate by computing value used by later
+   conditional.  */
+DEF_PREDICTOR (PRED_LOOP_EXTRA_EXIT, "extra loop exit", HITRATE (67),
+	       PRED_FLAG_FIRST_MATCH)
+
+/* Pointers are usually not NULL.  */
+DEF_PREDICTOR (PRED_POINTER, "pointer", HITRATE (70), 0)
+DEF_PREDICTOR (PRED_TREE_POINTER, "pointer (on trees)", HITRATE (70), 0)
+
+/* NE is probable, EQ not etc...  */
+DEF_PREDICTOR (PRED_OPCODE_POSITIVE, "opcode values positive", HITRATE (59), 0)
+DEF_PREDICTOR (PRED_OPCODE_NONEQUAL, "opcode values nonequal", HITRATE (66), 0)
+DEF_PREDICTOR (PRED_FPOPCODE, "fp_opcode", HITRATE (90), 0)
+DEF_PREDICTOR (PRED_TREE_OPCODE_POSITIVE, "opcode values positive (on trees)",
+	       HITRATE (59), 0)
+DEF_PREDICTOR (PRED_TREE_OPCODE_NONEQUAL, "opcode values nonequal (on trees)",
+	       HITRATE (66), 0)
+DEF_PREDICTOR (PRED_TREE_FPOPCODE, "fp_opcode (on trees)", HITRATE (90), 0)
+
+/* Branch guarding call is probably taken.  */
+DEF_PREDICTOR (PRED_CALL, "call", HITRATE (67), 0)
+
+/* Call predictors are for now ignored, lets leave the predictor
+   to measure its benefit.  */
+DEF_PREDICTOR (PRED_INDIR_CALL, "indirect call", PROB_EVEN, 0)
+DEF_PREDICTOR (PRED_POLYMORPHIC_CALL, "polymorphic call", PROB_EVEN, 0)
+DEF_PREDICTOR (PRED_RECURSIVE_CALL, "recursive call", PROB_EVEN, 0)
+
+/* Branch causing function to terminate is probably not taken.  */
+DEF_PREDICTOR (PRED_TREE_EARLY_RETURN, "early return (on trees)", HITRATE (66),
+	       0)
+
+/* Branch containing goto is probably not taken.  */
+DEF_PREDICTOR (PRED_GOTO, "goto", HITRATE (66), 0)
+
+/* Branch ending with return constant is probably not taken.  */
+DEF_PREDICTOR (PRED_CONST_RETURN, "const return", HITRATE (65), 0)
+
+/* Branch ending with return negative constant is probably not taken.  */
+DEF_PREDICTOR (PRED_NEGATIVE_RETURN, "negative return", HITRATE (98), 0)
+
+/* Branch ending with return; is probably not taken */
+DEF_PREDICTOR (PRED_NULL_RETURN, "null return", HITRATE (71), 0)
+
+/* Branches to compare induction variable to a loop bound is
+   extremely likely.  */
+DEF_PREDICTOR (PRED_LOOP_IV_COMPARE_GUESS, "guess loop iv compare",
+	       HITRATE (64), 0)
+
+/* Use number of loop iterations determined by # of iterations analysis
+   to set probability of branches that compares IV to loop bound variable.  */
+DEF_PREDICTOR (PRED_LOOP_IV_COMPARE, "loop iv compare", PROB_UNINITIALIZED,
+	       PRED_FLAG_FIRST_MATCH)
+
+/* In the following code
+   for (loop1)
+     if (cond)
+       for (loop2)
+	 body;
+   guess that cond is unlikely.  */
+DEF_PREDICTOR (PRED_LOOP_GUARD, "loop guard", HITRATE (73), 0)
+
+/* Same but for loops containing recursion.  */
+DEF_PREDICTOR (PRED_LOOP_GUARD_WITH_RECURSION, "loop guard with recursion",
+	       HITRATE (85), 0)
+
+/* The following predictors are used in Fortran. */
+
+/* Branch leading to an integer overflow are extremely unlikely.  */
+DEF_PREDICTOR (PRED_FORTRAN_OVERFLOW, "Fortran overflow", PROB_ALWAYS,
+	       PRED_FLAG_FIRST_MATCH)
+
+/* Branch leading to a failure status are unlikely.  This can occur for out
+   of memory.  This predictor only occurs when the user explicitly asked
+   for a return status.  By default, the code aborts,
+   which is handled via PRED_NORETURN.  */
+DEF_PREDICTOR (PRED_FORTRAN_FAIL_ALLOC, "Fortran fail alloc",
+	       PROB_VERY_LIKELY, 0)
+
+/* Predictor is used for an allocation of an already allocated memory or
+   deallocating an already deallocated allocatable.  */
+DEF_PREDICTOR (PRED_FORTRAN_REALLOC, "Fortran repeated allocation/deallocation",
+	       PROB_LIKELY, 0)
+
+/* Branch leading to an I/O failure status are unlikely.  This predictor is
+   used for I/O failures such as for invalid unit numbers.  This predictor
+   only occurs when the user explicitly asked for a return status.  By default,
+   the code aborts, which is handled via PRED_NORETURN.  */
+DEF_PREDICTOR (PRED_FORTRAN_FAIL_IO, "Fortran fail IO", HITRATE (85), 0)
+
+/* Branch leading to a run-time warning message which is printed only once
+   are unlikely.  The print-warning branch itself can be likely or unlikely.  */
+DEF_PREDICTOR (PRED_FORTRAN_WARN_ONCE, "Fortran warn once", HITRATE (75), 0)
+
+/* Branch belonging to a zero-sized array.  */
+DEF_PREDICTOR (PRED_FORTRAN_SIZE_ZERO, "Fortran zero-sized array", \
+	       HITRATE (99), 0)
+
+/* Branch belonging to an invalid bound index, in a context where it is
+   standard conform and well defined but rather pointless and, hence, rather
+   unlikely to occur.  */
+DEF_PREDICTOR (PRED_FORTRAN_INVALID_BOUND, "Fortran invalid bound", \
+	       HITRATE (90), 0)
+
+/* Branch belonging to the handling of absent optional arguments.  This
+   predictor is used when an optional dummy argument, associated with an
+   absent argument, is passed on as actual argument to another procedure,
+   which in turn has an optional argument.  */
+DEF_PREDICTOR (PRED_FORTRAN_ABSENT_DUMMY, "Fortran absent dummy", \
+	       HITRATE (60), 0)
+
+/* Fortran DO statement generates a pre-header guard:
+   empty = (step > 0 ? to < from : to > from), which can be predicted
+   to be very likely.  */
+DEF_PREDICTOR (PRED_FORTRAN_LOOP_PREHEADER, "Fortran loop preheader", \
+	       HITRATE (99), 0)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/predict.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/predict.h
new file mode 100644
index 0000000..c1f2f03
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/predict.h
@@ -0,0 +1,109 @@
+/* Definitions for branch prediction routines in the GNU compiler.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_PREDICT_H
+#define GCC_PREDICT_H
+
+#include "profile-count.h"
+
+/* Random guesstimation given names.
+   PROB_VERY_UNLIKELY should be small enough so basic block predicted
+   by it gets below HOT_BB_FREQUENCY_FRACTION.  */
+#define PROB_VERY_UNLIKELY	(REG_BR_PROB_BASE / 2000 - 1)
+#define PROB_EVEN		(REG_BR_PROB_BASE / 2)
+#define PROB_VERY_LIKELY	(REG_BR_PROB_BASE - PROB_VERY_UNLIKELY)
+#define PROB_ALWAYS		(REG_BR_PROB_BASE)
+#define PROB_UNLIKELY           (REG_BR_PROB_BASE / 5 - 1)
+#define PROB_LIKELY             (REG_BR_PROB_BASE - PROB_UNLIKELY)
+#define PROB_UNINITIALIZED      (-1)
+
+#define DEF_PREDICTOR(ENUM, NAME, HITRATE, FLAGS) ENUM,
+enum br_predictor
+{
+#include "predict.def"
+
+  /* Upper bound on non-language-specific builtins.  */
+  END_PREDICTORS
+};
+#undef DEF_PREDICTOR
+enum prediction
+{
+   NOT_TAKEN,
+   TAKEN
+};
+
+/* In emit-rtl.c.  */
+extern profile_probability split_branch_probability;
+
+extern gcov_type get_hot_bb_threshold (void);
+extern void set_hot_bb_threshold (gcov_type);
+extern bool maybe_hot_count_p (struct function *, profile_count);
+extern bool maybe_hot_bb_p (struct function *, const_basic_block);
+extern bool maybe_hot_edge_p (edge);
+extern bool probably_never_executed_bb_p (struct function *, const_basic_block);
+extern bool probably_never_executed_edge_p (struct function *, edge);
+extern bool optimize_function_for_size_p (struct function *);
+extern bool optimize_function_for_speed_p (struct function *);
+extern optimization_type function_optimization_type (struct function *);
+extern bool optimize_bb_for_size_p (const_basic_block);
+extern bool optimize_bb_for_speed_p (const_basic_block);
+extern optimization_type bb_optimization_type (const_basic_block);
+extern bool optimize_edge_for_size_p (edge);
+extern bool optimize_edge_for_speed_p (edge);
+extern bool optimize_insn_for_size_p (void);
+extern bool optimize_insn_for_speed_p (void);
+extern bool optimize_loop_for_size_p (struct loop *);
+extern bool optimize_loop_for_speed_p (struct loop *);
+extern bool optimize_loop_nest_for_speed_p (struct loop *);
+extern bool optimize_loop_nest_for_size_p (struct loop *);
+extern bool predictable_edge_p (edge);
+extern void rtl_profile_for_bb (basic_block);
+extern void rtl_profile_for_edge (edge);
+extern void default_rtl_profile (void);
+extern bool rtl_predicted_by_p (const_basic_block, enum br_predictor);
+extern bool gimple_predicted_by_p (const_basic_block, enum br_predictor);
+extern bool edge_probability_reliable_p (const_edge);
+extern bool br_prob_note_reliable_p (const_rtx);
+extern void predict_insn_def (rtx_insn *, enum br_predictor, enum prediction);
+extern void rtl_predict_edge (edge, enum br_predictor, int);
+extern void gimple_predict_edge (edge, enum br_predictor, int);
+extern void remove_predictions_associated_with_edge (edge);
+extern void predict_edge_def (edge, enum br_predictor, enum prediction);
+extern void invert_br_probabilities (rtx);
+extern void guess_outgoing_edge_probabilities (basic_block);
+extern void tree_guess_outgoing_edge_probabilities (basic_block);
+extern void tree_estimate_probability (bool);
+extern void handle_missing_profiles (void);
+extern bool update_max_bb_count (void);
+extern bool expensive_function_p (int);
+extern void estimate_bb_frequencies (bool);
+extern void compute_function_frequency (void);
+extern tree build_predict_expr (enum br_predictor, enum prediction);
+extern const char *predictor_name (enum br_predictor);
+extern void rebuild_frequencies (void);
+extern void report_predictor_hitrates (void);
+extern void force_edge_cold (edge, bool);
+extern void propagate_unlikely_bbs_forward (void);
+
+extern void add_reg_br_prob_note (rtx_insn *, profile_probability);
+
+/* In ipa-pure-const.c   */
+extern void warn_function_cold (tree);
+
+#endif  /* GCC_PREDICT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/prefix.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/prefix.h
new file mode 100644
index 0000000..9e33500
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/prefix.h
@@ -0,0 +1,40 @@
+/* Provide prototypes for functions exported from prefix.c.
+   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU Library General Public License as published by
+the Free Software Foundation; either version 3 of the License, or (at
+your option) any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+#ifndef GCC_PREFIX_H
+#define GCC_PREFIX_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* These functions are called by the Ada frontend with C convention.  */
+
+/* Update PATH using KEY if PATH starts with PREFIX.  The returned
+   string is always malloc-ed, and the caller is responsible for
+   freeing it.  */
+extern char *update_path (const char *path, const char *key);
+extern void set_std_prefix (const char *, int);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ! GCC_PREFIX_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/pretty-print.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/pretty-print.h
new file mode 100644
index 0000000..e4df659
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/pretty-print.h
@@ -0,0 +1,420 @@
+/* Various declarations for language-independent pretty-print subroutines.
+   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+   Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_PRETTY_PRINT_H
+#define GCC_PRETTY_PRINT_H
+
+#include "obstack.h"
+
+/* Maximum number of format string arguments.  */
+#define PP_NL_ARGMAX   30
+
+/* The type of a text to be formatted according a format specification
+   along with a list of things.  */
+struct text_info
+{
+  const char *format_spec;
+  va_list *args_ptr;
+  int err_no;  /* for %m */
+  void **x_data;
+  rich_location *m_richloc;
+
+  void set_location (unsigned int idx, location_t loc,
+		     enum range_display_kind range_display_kind);
+  location_t get_location (unsigned int index_of_location) const;
+};
+
+/* How often diagnostics are prefixed by their locations:
+   o DIAGNOSTICS_SHOW_PREFIX_NEVER: never - not yet supported;
+   o DIAGNOSTICS_SHOW_PREFIX_ONCE: emit only once;
+   o DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE: emit each time a physical
+   line is started.  */
+enum diagnostic_prefixing_rule_t
+{
+  DIAGNOSTICS_SHOW_PREFIX_ONCE       = 0x0,
+  DIAGNOSTICS_SHOW_PREFIX_NEVER      = 0x1,
+  DIAGNOSTICS_SHOW_PREFIX_EVERY_LINE = 0x2
+};
+
+/* The chunk_info data structure forms a stack of the results from the
+   first phase of formatting (pp_format) which have not yet been
+   output (pp_output_formatted_text).  A stack is necessary because
+   the diagnostic starter may decide to generate its own output by way
+   of the formatter.  */
+struct chunk_info
+{
+  /* Pointer to previous chunk on the stack.  */
+  struct chunk_info *prev;
+
+  /* Array of chunks to output.  Each chunk is a NUL-terminated string.
+     In the first phase of formatting, even-numbered chunks are
+     to be output verbatim, odd-numbered chunks are format specifiers.
+     The second phase replaces all odd-numbered chunks with formatted
+     text, and the third phase simply emits all the chunks in sequence
+     with appropriate line-wrapping.  */
+  const char *args[PP_NL_ARGMAX * 2];
+};
+
+/* The output buffer datatype.  This is best seen as an abstract datatype
+   whose fields should not be accessed directly by clients.  */
+struct output_buffer
+{
+  output_buffer ();
+  ~output_buffer ();
+
+  /* Obstack where the text is built up.  */
+  struct obstack formatted_obstack;
+
+  /* Obstack containing a chunked representation of the format
+     specification plus arguments.  */
+  struct obstack chunk_obstack;
+
+  /* Currently active obstack: one of the above two.  This is used so
+     that the text formatters don't need to know which phase we're in.  */
+  struct obstack *obstack;
+
+  /* Stack of chunk arrays.  These come from the chunk_obstack.  */
+  struct chunk_info *cur_chunk_array;
+
+  /* Where to output formatted text.  */
+  FILE *stream;
+
+  /* The amount of characters output so far.  */
+  int line_length;
+
+  /* This must be large enough to hold any printed integer or
+     floating-point value.  */
+  char digit_buffer[128];
+
+  /* Nonzero means that text should be flushed when
+     appropriate. Otherwise, text is buffered until either
+     pp_really_flush or pp_clear_output_area are called.  */
+  bool flush_p;
+};
+
+/* Finishes constructing a NULL-terminated character string representing
+   the buffered text.  */
+static inline const char *
+output_buffer_formatted_text (output_buffer *buff)
+{
+  obstack_1grow (buff->obstack, '\0');
+  return (const char *) obstack_base (buff->obstack);
+}
+
+/* Append to the output buffer a string specified by its
+   STARTing character and LENGTH.  */
+static inline void
+output_buffer_append_r (output_buffer *buff, const char *start, int length)
+{
+  gcc_checking_assert (start);
+  obstack_grow (buff->obstack, start, length);
+  for (int i = 0; i < length; i++)
+    if (start[i] == '\n')
+      buff->line_length = 0;
+    else
+      buff->line_length++;
+}
+
+/*  Return a pointer to the last character emitted in the
+    output_buffer.  A NULL pointer means no character available.  */
+static inline const char *
+output_buffer_last_position_in_text (const output_buffer *buff)
+{
+  const char *p = NULL;
+  struct obstack *text = buff->obstack;
+
+  if (obstack_base (text) != obstack_next_free (text))
+    p = ((const char *) obstack_next_free (text)) - 1;
+  return p;
+}
+
+
+/* The type of pretty-printer flags passed to clients.  */
+typedef unsigned int pp_flags;
+
+enum pp_padding
+{
+  pp_none, pp_before, pp_after
+};
+
+/* Structure for switching in and out of verbatim mode in a convenient
+   manner.  */
+struct pp_wrapping_mode_t
+{
+  /* Current prefixing rule.  */
+  diagnostic_prefixing_rule_t rule;
+
+  /* The ideal upper bound of number of characters per line, as suggested
+     by front-end.  */
+  int line_cutoff;
+};
+
+/* Maximum characters per line in automatic line wrapping mode.
+   Zero means don't wrap lines.  */
+#define pp_line_cutoff(PP)  (PP)->wrapping.line_cutoff
+
+/* Prefixing rule used in formatting a diagnostic message.  */
+#define pp_prefixing_rule(PP)  (PP)->wrapping.rule
+
+/* Get or set the wrapping mode as a single entity.  */
+#define pp_wrapping_mode(PP) (PP)->wrapping
+
+/* The type of a hook that formats client-specific data onto a pretty_printer.
+   A client-supplied formatter returns true if everything goes well,
+   otherwise it returns false.  */
+typedef bool (*printer_fn) (pretty_printer *, text_info *, const char *,
+			    int, bool, bool, bool, bool *, const char **);
+
+/* Client supplied function used to decode formats.  */
+#define pp_format_decoder(PP) (PP)->format_decoder
+
+/* Base class for an optional client-supplied object for doing additional
+   processing between stages 2 and 3 of formatted printing.  */
+class format_postprocessor
+{
+ public:
+  virtual ~format_postprocessor () {}
+  virtual void handle (pretty_printer *) = 0;
+};
+
+/* TRUE if a newline character needs to be added before further
+   formatting.  */
+#define pp_needs_newline(PP)  (PP)->need_newline
+
+/* True if PRETTY-PRINTER is in line-wrapping mode.  */
+#define pp_is_wrapping_line(PP) (pp_line_cutoff (PP) > 0)
+
+/* The amount of whitespace to be emitted when starting a new line.  */
+#define pp_indentation(PP) (PP)->indent_skip
+
+/* True if identifiers are translated to the locale character set on
+   output.  */
+#define pp_translate_identifiers(PP) (PP)->translate_identifiers
+
+/* True if colors should be shown.  */
+#define pp_show_color(PP) (PP)->show_color
+
+/* The data structure that contains the bare minimum required to do
+   proper pretty-printing.  Clients may derived from this structure
+   and add additional fields they need.  */
+struct pretty_printer
+{
+  /* Default construct a pretty printer with specified
+     maximum line length cut off limit.  */
+  explicit pretty_printer (int = 0);
+
+  virtual ~pretty_printer ();
+
+  /* Where we print external representation of ENTITY.  */
+  output_buffer *buffer;
+
+  /* The prefix for each new line.  If non-NULL, this is "owned" by the
+     pretty_printer, and will eventually be free-ed.  */
+  char *prefix;
+
+  /* Where to put whitespace around the entity being formatted.  */
+  pp_padding padding;
+
+  /* The real upper bound of number of characters per line, taking into
+     account the case of a very very looong prefix.  */
+  int maximum_length;
+
+  /* Indentation count.  */
+  int indent_skip;
+
+  /* Current wrapping mode.  */
+  pp_wrapping_mode_t wrapping;
+
+  /* If non-NULL, this function formats a TEXT into the BUFFER.  When called,
+     TEXT->format_spec points to a format code.  FORMAT_DECODER should call
+     pp_string (and related functions) to add data to the BUFFER.
+     FORMAT_DECODER can read arguments from *TEXT->args_pts using VA_ARG.
+     If the BUFFER needs additional characters from the format string, it
+     should advance the TEXT->format_spec as it goes.  When FORMAT_DECODER
+     returns, TEXT->format_spec should point to the last character processed.
+     The QUOTE and BUFFER_PTR are passed in, to allow for deferring-handling
+     of format codes (e.g. %H and %I in the C++ frontend).  */
+  printer_fn format_decoder;
+
+  /* If non-NULL, this is called by pp_format once after all format codes
+     have been processed, to allow for client-specific postprocessing.
+     This is used by the C++ frontend for handling the %H and %I
+     format codes (which interract with each other).  */
+  format_postprocessor *m_format_postprocessor;
+
+  /* Nonzero if current PREFIX was emitted at least once.  */
+  bool emitted_prefix;
+
+  /* Nonzero means one should emit a newline before outputting anything.  */
+  bool need_newline;
+
+  /* Nonzero means identifiers are translated to the locale character
+     set on output.  */
+  bool translate_identifiers;
+
+  /* Nonzero means that text should be colorized.  */
+  bool show_color;
+};
+
+static inline const char *
+pp_get_prefix (const pretty_printer *pp) { return pp->prefix; }
+
+#define pp_space(PP)            pp_character (PP, ' ')
+#define pp_left_paren(PP)       pp_character (PP, '(')
+#define pp_right_paren(PP)      pp_character (PP, ')')
+#define pp_left_bracket(PP)     pp_character (PP, '[')
+#define pp_right_bracket(PP)    pp_character (PP, ']')
+#define pp_left_brace(PP)       pp_character (PP, '{')
+#define pp_right_brace(PP)      pp_character (PP, '}')
+#define pp_semicolon(PP)        pp_character (PP, ';')
+#define pp_comma(PP)            pp_character (PP, ',')
+#define pp_dot(PP)              pp_character (PP, '.')
+#define pp_colon(PP)            pp_character (PP, ':')
+#define pp_colon_colon(PP)      pp_string (PP, "::")
+#define pp_arrow(PP)            pp_string (PP, "->")
+#define pp_equal(PP)            pp_character (PP, '=')
+#define pp_question(PP)         pp_character (PP, '?')
+#define pp_bar(PP)              pp_character (PP, '|')
+#define pp_bar_bar(PP)          pp_string (PP, "||")
+#define pp_carret(PP)           pp_character (PP, '^')
+#define pp_ampersand(PP)        pp_character (PP, '&')
+#define pp_ampersand_ampersand(PP) pp_string (PP, "&&")
+#define pp_less(PP)             pp_character (PP, '<')
+#define pp_less_equal(PP)       pp_string (PP, "<=")
+#define pp_greater(PP)          pp_character (PP, '>')
+#define pp_greater_equal(PP)    pp_string (PP, ">=")
+#define pp_plus(PP)             pp_character (PP, '+')
+#define pp_minus(PP)            pp_character (PP, '-')
+#define pp_star(PP)             pp_character (PP, '*')
+#define pp_slash(PP)            pp_character (PP, '/')
+#define pp_modulo(PP)           pp_character (PP, '%')
+#define pp_exclamation(PP)      pp_character (PP, '!')
+#define pp_complement(PP)       pp_character (PP, '~')
+#define pp_quote(PP)            pp_character (PP, '\'')
+#define pp_backquote(PP)        pp_character (PP, '`')
+#define pp_doublequote(PP)      pp_character (PP, '"')
+#define pp_underscore(PP)       pp_character (PP, '_')
+#define pp_maybe_newline_and_indent(PP, N) \
+  if (pp_needs_newline (PP)) pp_newline_and_indent (PP, N)
+#define pp_scalar(PP, FORMAT, SCALAR)	                      \
+  do					        	      \
+    {			         			      \
+      sprintf (pp_buffer (PP)->digit_buffer, FORMAT, SCALAR); \
+      pp_string (PP, pp_buffer (PP)->digit_buffer);           \
+    }						              \
+  while (0)
+#define pp_decimal_int(PP, I)  pp_scalar (PP, "%d", I)
+#define pp_unsigned_wide_integer(PP, I) \
+   pp_scalar (PP, HOST_WIDE_INT_PRINT_UNSIGNED, (unsigned HOST_WIDE_INT) I)
+#define pp_wide_int(PP, W, SGN)					\
+  do								\
+    {								\
+      print_dec (W, pp_buffer (PP)->digit_buffer, SGN);		\
+      pp_string (PP, pp_buffer (PP)->digit_buffer);		\
+    }								\
+  while (0)
+#define pp_double(PP, F)       pp_scalar (PP, "%f", F)
+#define pp_pointer(PP, P)      pp_scalar (PP, "%p", P)
+
+#define pp_identifier(PP, ID)  pp_string (PP, (pp_translate_identifiers (PP) \
+					  ? identifier_to_locale (ID)	\
+					  : (ID)))
+
+
+#define pp_buffer(PP) (PP)->buffer
+
+extern void pp_set_line_maximum_length (pretty_printer *, int);
+extern void pp_set_prefix (pretty_printer *, char *);
+extern char *pp_take_prefix (pretty_printer *);
+extern void pp_destroy_prefix (pretty_printer *);
+extern int pp_remaining_character_count_for_line (pretty_printer *);
+extern void pp_clear_output_area (pretty_printer *);
+extern const char *pp_formatted_text (pretty_printer *);
+extern const char *pp_last_position_in_text (const pretty_printer *);
+extern void pp_emit_prefix (pretty_printer *);
+extern void pp_append_text (pretty_printer *, const char *, const char *);
+extern void pp_newline_and_flush (pretty_printer *);
+extern void pp_newline_and_indent (pretty_printer *, int);
+extern void pp_separate_with (pretty_printer *, char);
+
+/* If we haven't already defined a front-end-specific diagnostics
+   style, use the generic one.  */
+#ifdef GCC_DIAG_STYLE
+#define GCC_PPDIAG_STYLE GCC_DIAG_STYLE
+#else
+#define GCC_PPDIAG_STYLE __gcc_diag__
+#endif
+
+/* This header may be included before diagnostics-core.h, hence the duplicate
+   definitions to allow for GCC-specific formats.  */
+#if GCC_VERSION >= 3005
+#define ATTRIBUTE_GCC_PPDIAG(m, n) __attribute__ ((__format__ (GCC_PPDIAG_STYLE, m ,n))) ATTRIBUTE_NONNULL(m)
+#else
+#define ATTRIBUTE_GCC_PPDIAG(m, n) ATTRIBUTE_NONNULL(m)
+#endif
+extern void pp_printf (pretty_printer *, const char *, ...)
+     ATTRIBUTE_GCC_PPDIAG(2,3);
+
+extern void pp_verbatim (pretty_printer *, const char *, ...)
+     ATTRIBUTE_GCC_PPDIAG(2,3);
+extern void pp_flush (pretty_printer *);
+extern void pp_really_flush (pretty_printer *);
+extern void pp_format (pretty_printer *, text_info *);
+extern void pp_output_formatted_text (pretty_printer *);
+extern void pp_format_verbatim (pretty_printer *, text_info *);
+
+extern void pp_indent (pretty_printer *);
+extern void pp_newline (pretty_printer *);
+extern void pp_character (pretty_printer *, int);
+extern void pp_string (pretty_printer *, const char *);
+extern void pp_write_text_to_stream (pretty_printer *);
+extern void pp_write_text_as_dot_label_to_stream (pretty_printer *, bool);
+extern void pp_maybe_space (pretty_printer *);
+
+extern void pp_begin_quote (pretty_printer *, bool);
+extern void pp_end_quote (pretty_printer *, bool);
+
+/* Switch into verbatim mode and return the old mode.  */
+static inline pp_wrapping_mode_t
+pp_set_verbatim_wrapping_ (pretty_printer *pp)
+{
+  pp_wrapping_mode_t oldmode = pp_wrapping_mode (pp);
+  pp_line_cutoff (pp) = 0;
+  pp_prefixing_rule (pp) = DIAGNOSTICS_SHOW_PREFIX_NEVER;
+  return oldmode;
+}
+#define pp_set_verbatim_wrapping(PP) pp_set_verbatim_wrapping_ (PP)
+
+extern const char *identifier_to_locale (const char *);
+extern void *(*identifier_to_locale_alloc) (size_t);
+extern void (*identifier_to_locale_free) (void *);
+
+/* Print I to PP in decimal.  */
+
+inline void
+pp_wide_integer (pretty_printer *pp, HOST_WIDE_INT i)
+{
+  pp_scalar (pp, HOST_WIDE_INT_PRINT_DEC, i);
+}
+
+template<unsigned int N, typename T>
+void pp_wide_integer (pretty_printer *pp, const poly_int_pod<N, T> &);
+
+#endif /* GCC_PRETTY_PRINT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/print-rtl.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/print-rtl.h
new file mode 100644
index 0000000..84808a2
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/print-rtl.h
@@ -0,0 +1,162 @@
+/* Print RTL for GCC.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_PRINT_RTL_H
+#define GCC_PRINT_RTL_H
+
+#ifndef GENERATOR_FILE
+#include "bitmap.h"
+#endif /* #ifndef GENERATOR_FILE */
+
+class rtx_reuse_manager;
+
+/* A class for writing rtx to a FILE *.  */
+
+class rtx_writer
+{
+ public:
+  rtx_writer (FILE *outfile, int ind, bool simple, bool compact,
+	      rtx_reuse_manager *reuse_manager);
+
+  void print_rtx (const_rtx in_rtx);
+  void print_rtl (const_rtx rtx_first);
+  int print_rtl_single_with_indent (const_rtx x, int ind);
+
+  void finish_directive ();
+
+ private:
+  void print_rtx_operand_code_0 (const_rtx in_rtx, int idx);
+  void print_rtx_operand_code_e (const_rtx in_rtx, int idx);
+  void print_rtx_operand_codes_E_and_V (const_rtx in_rtx, int idx);
+  void print_rtx_operand_code_i (const_rtx in_rtx, int idx);
+  void print_rtx_operand_code_r (const_rtx in_rtx);
+  void print_rtx_operand_code_u (const_rtx in_rtx, int idx);
+  void print_rtx_operand (const_rtx in_rtx, int idx);
+  bool operand_has_default_value_p (const_rtx in_rtx, int idx);
+
+ private:
+  FILE *m_outfile;
+  int m_sawclose;
+  int m_indent;
+  bool m_in_call_function_usage;
+
+  /* True means use simplified format without flags, modes, etc.  */
+  bool m_simple;
+
+  /* If true, use compact dump format:
+     - PREV/NEXT_INSN UIDs are omitted
+     - INSN_CODEs are omitted,
+     - register numbers are omitted for hard and virtual regs, and
+       non-virtual pseudos are offset relative to the first such reg, and
+       printed with a '%' sigil e.g. "%0" for (LAST_VIRTUAL_REGISTER + 1),
+     - insn names are prefixed with "c" (e.g. "cinsn", "cnote", etc).  */
+  bool m_compact;
+
+  /* An optional instance of rtx_reuse_manager.  */
+  rtx_reuse_manager *m_rtx_reuse_manager;
+};
+
+#ifdef BUFSIZ
+extern void print_rtl (FILE *, const_rtx);
+#endif
+extern void print_rtx_insn_vec (FILE *file, const vec<rtx_insn *> &vec);
+
+extern void dump_value_slim (FILE *, const_rtx, int);
+extern void dump_insn_slim (FILE *, const rtx_insn *);
+extern void dump_rtl_slim (FILE *, const rtx_insn *, const rtx_insn *,
+			   int, int);
+extern void print_value (pretty_printer *, const_rtx, int);
+extern void print_pattern (pretty_printer *, const_rtx, int);
+extern void print_insn (pretty_printer *pp, const rtx_insn *x, int verbose);
+
+extern void rtl_dump_bb_for_graph (pretty_printer *, basic_block);
+extern const char *str_pattern_slim (const_rtx);
+
+extern void print_rtx_function (FILE *file, function *fn, bool compact);
+
+#ifndef GENERATOR_FILE
+
+/* For some rtx codes (such as SCRATCH), instances are defined to only be
+   equal for pointer equality: two distinct SCRATCH instances are non-equal.
+   copy_rtx preserves this equality by reusing the SCRATCH instance.
+
+   For example, in this x86 instruction:
+
+      (cinsn (set (mem/v:BLK (scratch:DI) [0  A8])
+                    (unspec:BLK [
+                            (mem/v:BLK (scratch:DI) [0  A8])
+                        ] UNSPEC_MEMORY_BLOCKAGE)) "test.c":2
+                 (nil))
+
+   the two instances of "(scratch:DI)" are actually the same underlying
+   rtx pointer (and thus "equal"), and the insn will only be recognized
+   (as "*memory_blockage") if this pointer-equality is preserved.
+
+   To be able to preserve this pointer-equality when round-tripping
+   through dumping/loading the rtl, we need some syntax.  The first
+   time a reused rtx is encountered in the dump, we prefix it with
+   a reuse ID:
+
+      (0|scratch:DI)
+
+   Subsequent references to the rtx in the dump can be expressed using
+   "reuse_rtx" e.g.:
+
+      (reuse_rtx 0)
+
+   This class is responsible for tracking a set of reuse IDs during a dump.
+
+   Dumping with reuse-support is done in two passes:
+
+   (a) a first pass in which "preprocess" is called on each top-level rtx
+       to be seen in the dump.  This traverses the rtx and its descendents,
+       identifying rtx that will be seen more than once in the actual dump,
+       and assigning them reuse IDs.
+
+   (b) the actual dump, via print_rtx etc.  print_rtx detect the presence
+       of a live rtx_reuse_manager and uses it if there is one.  Any rtx
+       that were assigned reuse IDs will be printed with it the first time
+       that they are seen, and then printed as "(reuse_rtx ID)" subsequently.
+
+   The first phase is needed since otherwise there would be no way to tell
+   if an rtx will be reused when first encountering it.  */
+
+class rtx_reuse_manager
+{
+ public:
+  rtx_reuse_manager ();
+
+  /* The first pass.  */
+  void preprocess (const_rtx x);
+
+  /* The second pass (within print_rtx).  */
+  bool has_reuse_id (const_rtx x, int *out);
+  bool seen_def_p (int reuse_id);
+  void set_seen_def (int reuse_id);
+
+ private:
+  hash_map<const_rtx, int> m_rtx_occurrence_count;
+  hash_map<const_rtx, int> m_rtx_reuse_ids;
+  auto_bitmap m_defs_seen;
+  int m_next_id;
+};
+
+#endif /* #ifndef GENERATOR_FILE */
+
+#endif  // GCC_PRINT_RTL_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/print-tree.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/print-tree.h
new file mode 100644
index 0000000..1d4fe6e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/print-tree.h
@@ -0,0 +1,46 @@
+/* Declarations for printing trees in human readable form
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_PRINT_TREE_H
+#define GCC_PRINT_TREE_H
+
+extern void debug_tree (tree);
+extern void debug_raw (const tree_node &ref);
+extern void debug_raw (const tree_node *ptr);
+extern void debug (const tree_node &ref);
+extern void debug (const tree_node *ptr);
+extern void debug_verbose (const tree_node &ref);
+extern void debug_verbose (const tree_node *ptr);
+extern void debug_head (const tree_node &ref);
+extern void debug_head (const tree_node *ptr);
+extern void debug_body (const tree_node &ref);
+extern void debug_body (const tree_node *ptr);
+extern void debug (vec<tree, va_gc> &ref);
+extern void debug (vec<tree, va_gc> *ptr);
+extern void debug_raw (vec<tree, va_gc> &ref);
+extern void debug_raw (vec<tree, va_gc> *ptr);
+#ifdef BUFSIZ
+extern void dump_addr (FILE*, const char *, const void *);
+extern void print_node (FILE *, const char *, tree, int,
+			bool brief_for_visited = true);
+extern void print_node_brief (FILE *, const char *, const_tree, int);
+extern void indent_to (FILE *, int);
+#endif
+
+#endif  // GCC_PRINT_TREE_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/profile-count.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/profile-count.h
new file mode 100644
index 0000000..d6de61f
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/profile-count.h
@@ -0,0 +1,1146 @@
+/* Profile counter container type.
+   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+   Contributed by Jan Hubicka
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_PROFILE_COUNT_H
+#define GCC_PROFILE_COUNT_H
+
+struct function;
+class profile_count;
+
+/* Quality of the profile count.  Because gengtype does not support enums
+   inside of classes, this is in global namespace.  */
+enum profile_quality {
+  /* Uninitialized value.  */
+  profile_uninitialized,
+  /* Profile is based on static branch prediction heuristics and may
+     or may not match reality.  It is local to function and cannot be compared
+     inter-procedurally.  Never used by probabilities (they are always local).
+   */
+  profile_guessed_local,
+  /* Profile was read by feedback and was 0, we used local heuristics to guess
+     better.  This is the case of functions not run in profile fedback.
+     Never used by probabilities.  */
+  profile_guessed_global0,
+
+  /* Same as profile_guessed_global0 but global count is adjusted 0.  */
+  profile_guessed_global0adjusted,
+
+  /* Profile is based on static branch prediction heuristics.  It may or may
+     not reflect the reality but it can be compared interprocedurally
+     (for example, we inlined function w/o profile feedback into function
+      with feedback and propagated from that).
+     Never used by probablities.  */
+  profile_guessed,
+  /* Profile was determined by autofdo.  */
+  profile_afdo,
+  /* Profile was originally based on feedback but it was adjusted
+     by code duplicating optimization.  It may not precisely reflect the
+     particular code path.  */
+  profile_adjusted,
+  /* Profile was read from profile feedback or determined by accurate static
+     method.  */
+  profile_precise
+};
+
+extern const char *profile_quality_as_string (enum profile_quality);
+
+/* The base value for branch probability notes and edge probabilities.  */
+#define REG_BR_PROB_BASE  10000
+
+#define RDIV(X,Y) (((X) + (Y) / 2) / (Y))
+
+bool slow_safe_scale_64bit (uint64_t a, uint64_t b, uint64_t c, uint64_t *res);
+
+/* Compute RES=(a*b + c/2)/c capping and return false if overflow happened.  */
+
+inline bool
+safe_scale_64bit (uint64_t a, uint64_t b, uint64_t c, uint64_t *res)
+{
+#if (GCC_VERSION >= 5000)
+  uint64_t tmp;
+  if (!__builtin_mul_overflow (a, b, &tmp)
+      && !__builtin_add_overflow (tmp, c/2, &tmp))
+    {
+      *res = tmp / c;
+      return true;
+    }
+  if (c == 1)
+    {
+      *res = (uint64_t) -1;
+      return false;
+    }
+#else
+  if (a < ((uint64_t)1 << 31)
+      && b < ((uint64_t)1 << 31)
+      && c < ((uint64_t)1 << 31))
+    {
+      *res = (a * b + (c / 2)) / c;
+      return true;
+    }
+#endif
+  return slow_safe_scale_64bit (a, b, c, res);
+}
+
+/* Data type to hold probabilities.  It implements fixed point arithmetics
+   with capping so probability is always in range [0,1] and scaling requiring
+   values greater than 1 needs to be represented otherwise.
+
+   In addition to actual value the quality of profile is tracked and propagated
+   through all operations.  Special value UNINITIALIZED is used for probabilities
+   that has not been determined yet (for example bacause of
+   -fno-guess-branch-probability)
+
+   Typically probabilities are derived from profile feedback (via
+   probability_in_gcov_type), autoFDO or guessed statically and then propagated
+   thorough the compilation.
+
+   Named probabilities are available:
+     - never           (0 probability)
+     - guessed_never
+     - very_unlikely   (1/2000 probability)
+     - unlikely        (1/5 probablity)
+     - even            (1/2 probability)
+     - likely          (4/5 probability)
+     - very_likely     (1999/2000 probability)
+     - guessed_always
+     - always
+
+   Named probabilities except for never/always are assumed to be statically
+   guessed and thus not necessarily accurate.  The difference between never
+   and guessed_never is that the first one should be used only in case that
+   well behaving program will very likely not execute the "never" path.
+   For example if the path is going to abort () call or it exception handling.
+
+   Always and guessed_always probabilities are symmetric.
+
+   For legacy code we support conversion to/from REG_BR_PROB_BASE based fixpoint
+   integer arithmetics. Once the code is converted to branch probabilities,
+   these conversions will probably go away because they are lossy.
+*/
+
+class GTY((user)) profile_probability
+{
+  static const int n_bits = 29;
+  /* We can technically use ((uint32_t) 1 << (n_bits - 1)) - 2 but that
+     will lead to harder multiplication sequences.  */
+  static const uint32_t max_probability = (uint32_t) 1 << (n_bits - 2);
+  static const uint32_t uninitialized_probability
+		 = ((uint32_t) 1 << (n_bits - 1)) - 1;
+
+  uint32_t m_val : 29;
+  enum profile_quality m_quality : 3;
+
+  friend class profile_count;
+public:
+
+  /* Named probabilities.  */
+  static profile_probability never ()
+    {
+      profile_probability ret;
+      ret.m_val = 0;
+      ret.m_quality = profile_precise;
+      return ret;
+    }
+  static profile_probability guessed_never ()
+    {
+      profile_probability ret;
+      ret.m_val = 0;
+      ret.m_quality = profile_guessed;
+      return ret;
+    }
+  static profile_probability very_unlikely ()
+    {
+      /* Be consistent with PROB_VERY_UNLIKELY in predict.h.  */
+      profile_probability r
+	 = profile_probability::guessed_always ().apply_scale (1, 2000);
+      r.m_val--;
+      return r;
+    }
+  static profile_probability unlikely ()
+    {
+      /* Be consistent with PROB_VERY_LIKELY in predict.h.  */
+      profile_probability r
+	 = profile_probability::guessed_always ().apply_scale (1, 5);
+      r.m_val--;
+      return r;
+    }
+  static profile_probability even ()
+    {
+      return profile_probability::guessed_always ().apply_scale (1, 2);
+    }
+  static profile_probability very_likely ()
+    {
+      return profile_probability::always () - very_unlikely ();
+    }
+  static profile_probability likely ()
+    {
+      return profile_probability::always () - unlikely ();
+    }
+  static profile_probability guessed_always ()
+    {
+      profile_probability ret;
+      ret.m_val = max_probability;
+      ret.m_quality = profile_guessed;
+      return ret;
+    }
+  static profile_probability always ()
+    {
+      profile_probability ret;
+      ret.m_val = max_probability;
+      ret.m_quality = profile_precise;
+      return ret;
+    }
+  /* Probabilities which has not been initialized. Either because
+     initialization did not happen yet or because profile is unknown.  */
+  static profile_probability uninitialized ()
+    {
+      profile_probability c;
+      c.m_val = uninitialized_probability;
+      c.m_quality = profile_guessed;
+      return c;
+    }
+
+
+  /* Return true if value has been initialized.  */
+  bool initialized_p () const
+    {
+      return m_val != uninitialized_probability;
+    }
+  /* Return true if value can be trusted.  */
+  bool reliable_p () const
+    {
+      return m_quality >= profile_adjusted;
+    }
+
+  /* Conversion from and to REG_BR_PROB_BASE integer fixpoint arithmetics.
+     this is mostly to support legacy code and should go away.  */
+  static profile_probability from_reg_br_prob_base (int v)
+    {
+      profile_probability ret;
+      gcc_checking_assert (v >= 0 && v <= REG_BR_PROB_BASE);
+      ret.m_val = RDIV (v * (uint64_t) max_probability, REG_BR_PROB_BASE);
+      ret.m_quality = profile_guessed;
+      return ret;
+    }
+  int to_reg_br_prob_base () const
+    {
+      gcc_checking_assert (initialized_p ());
+      return RDIV (m_val * (uint64_t) REG_BR_PROB_BASE, max_probability);
+    }
+
+  /* Conversion to and from RTL representation of profile probabilities.  */
+  static profile_probability from_reg_br_prob_note (int v)
+    {
+      profile_probability ret;
+      ret.m_val = ((unsigned int)v) / 8;
+      ret.m_quality = (enum profile_quality)(v & 7);
+      return ret;
+    }
+  int to_reg_br_prob_note () const
+    {
+      gcc_checking_assert (initialized_p ());
+      int ret = m_val * 8 + m_quality;
+      gcc_checking_assert (profile_probability::from_reg_br_prob_note (ret)
+			   == *this);
+      return ret;
+    }
+
+  /* Return VAL1/VAL2.  */
+  static profile_probability probability_in_gcov_type
+				 (gcov_type val1, gcov_type val2)
+    {
+      profile_probability ret;
+      gcc_checking_assert (val1 >= 0 && val2 > 0);
+      if (val1 > val2)
+	ret.m_val = max_probability;
+      else
+	{
+	  uint64_t tmp;
+	  safe_scale_64bit (val1, max_probability, val2, &tmp);
+	  gcc_checking_assert (tmp <= max_probability);
+	  ret.m_val = tmp;
+	}
+      ret.m_quality = profile_precise;
+      return ret;
+    }
+
+  /* Basic operations.  */
+  bool operator== (const profile_probability &other) const
+    {
+      return m_val == other.m_val && m_quality == other.m_quality;
+    }
+  profile_probability operator+ (const profile_probability &other) const
+    {
+      if (other == profile_probability::never ())
+	return *this;
+      if (*this == profile_probability::never ())
+	return other;
+      if (!initialized_p () || !other.initialized_p ())
+	return profile_probability::uninitialized ();
+
+      profile_probability ret;
+      ret.m_val = MIN ((uint32_t)(m_val + other.m_val), max_probability);
+      ret.m_quality = MIN (m_quality, other.m_quality);
+      return ret;
+    }
+  profile_probability &operator+= (const profile_probability &other)
+    {
+      if (other == profile_probability::never ())
+	return *this;
+      if (*this == profile_probability::never ())
+	{
+	  *this = other;
+	  return *this;
+	}
+      if (!initialized_p () || !other.initialized_p ())
+	return *this = profile_probability::uninitialized ();
+      else
+	{
+	  m_val = MIN ((uint32_t)(m_val + other.m_val), max_probability);
+	  m_quality = MIN (m_quality, other.m_quality);
+	}
+      return *this;
+    }
+  profile_probability operator- (const profile_probability &other) const
+    {
+      if (*this == profile_probability::never ()
+	  || other == profile_probability::never ())
+	return *this;
+      if (!initialized_p () || !other.initialized_p ())
+	return profile_probability::uninitialized ();
+      profile_probability ret;
+      ret.m_val = m_val >= other.m_val ? m_val - other.m_val : 0;
+      ret.m_quality = MIN (m_quality, other.m_quality);
+      return ret;
+    }
+  profile_probability &operator-= (const profile_probability &other)
+    {
+      if (*this == profile_probability::never ()
+	  || other == profile_probability::never ())
+	return *this;
+      if (!initialized_p () || !other.initialized_p ())
+	return *this = profile_probability::uninitialized ();
+      else
+	{
+	  m_val = m_val >= other.m_val ? m_val - other.m_val : 0;
+	  m_quality = MIN (m_quality, other.m_quality);
+	}
+      return *this;
+    }
+  profile_probability operator* (const profile_probability &other) const
+    {
+      if (*this == profile_probability::never ()
+	  || other == profile_probability::never ())
+	return profile_probability::never ();
+      if (!initialized_p () || !other.initialized_p ())
+	return profile_probability::uninitialized ();
+      profile_probability ret;
+      ret.m_val = RDIV ((uint64_t)m_val * other.m_val, max_probability);
+      ret.m_quality = MIN (MIN (m_quality, other.m_quality), profile_adjusted);
+      return ret;
+    }
+  profile_probability &operator*= (const profile_probability &other)
+    {
+      if (*this == profile_probability::never ()
+	  || other == profile_probability::never ())
+	return *this = profile_probability::never ();
+      if (!initialized_p () || !other.initialized_p ())
+	return *this = profile_probability::uninitialized ();
+      else
+	{
+	  m_val = RDIV ((uint64_t)m_val * other.m_val, max_probability);
+	  m_quality = MIN (MIN (m_quality, other.m_quality), profile_adjusted);
+	}
+      return *this;
+    }
+  profile_probability operator/ (const profile_probability &other) const
+    {
+      if (*this == profile_probability::never ())
+	return profile_probability::never ();
+      if (!initialized_p () || !other.initialized_p ())
+	return profile_probability::uninitialized ();
+      profile_probability ret;
+      /* If we get probability above 1, mark it as unreliable and return 1. */
+      if (m_val >= other.m_val)
+	{
+	  ret.m_val = max_probability;
+          ret.m_quality = MIN (MIN (m_quality, other.m_quality),
+			       profile_guessed);
+	  return ret;
+	}
+      else if (!m_val)
+	ret.m_val = 0;
+      else
+	{
+	  gcc_checking_assert (other.m_val);
+	  ret.m_val = MIN (RDIV ((uint64_t)m_val * max_probability,
+				 other.m_val),
+			   max_probability);
+	}
+      ret.m_quality = MIN (MIN (m_quality, other.m_quality), profile_adjusted);
+      return ret;
+    }
+  profile_probability &operator/= (const profile_probability &other)
+    {
+      if (*this == profile_probability::never ())
+	return *this = profile_probability::never ();
+      if (!initialized_p () || !other.initialized_p ())
+	return *this = profile_probability::uninitialized ();
+      else
+	{
+          /* If we get probability above 1, mark it as unreliable
+	     and return 1. */
+	  if (m_val > other.m_val)
+	    {
+	      m_val = max_probability;
+              m_quality = MIN (MIN (m_quality, other.m_quality),
+			       profile_guessed);
+	      return *this;
+	    }
+	  else if (!m_val)
+	    ;
+	  else
+	    {
+	      gcc_checking_assert (other.m_val);
+	      m_val = MIN (RDIV ((uint64_t)m_val * max_probability,
+				 other.m_val),
+			   max_probability);
+	    }
+	  m_quality = MIN (MIN (m_quality, other.m_quality), profile_adjusted);
+	}
+      return *this;
+    }
+
+  /* Split *THIS (ORIG) probability into 2 probabilities, such that
+     the returned one (FIRST) is *THIS * CPROB and *THIS is
+     adjusted (SECOND) so that FIRST + FIRST.invert () * SECOND
+     == ORIG.  This is useful e.g. when splitting a conditional
+     branch like:
+     if (cond)
+       goto lab; // ORIG probability
+     into
+     if (cond1)
+       goto lab; // FIRST = ORIG * CPROB probability
+     if (cond2)
+       goto lab; // SECOND probability
+     such that the overall probability of jumping to lab remains
+     the same.  CPROB gives the relative probability between the
+     branches.  */
+  profile_probability split (const profile_probability &cprob)
+    {
+      profile_probability ret = *this * cprob;
+      /* The following is equivalent to:
+         *this = cprob.invert () * *this / ret.invert ();
+	 Avoid scaling when overall outcome is supposed to be always.
+	 Without knowing that one is inverse of toher, the result would be
+	 conservative.  */
+      if (!(*this == profile_probability::always ()))
+        *this = (*this - ret) / ret.invert ();
+      return ret;
+    }
+
+  gcov_type apply (gcov_type val) const
+    {
+      if (*this == profile_probability::uninitialized ())
+	return val / 2;
+      return RDIV (val * m_val, max_probability);
+    }
+
+  /* Return 1-*THIS.  */
+  profile_probability invert () const
+    {
+      return profile_probability::always() - *this;
+    }
+
+  /* Return THIS with quality dropped to GUESSED.  */
+  profile_probability guessed () const
+    {
+      profile_probability ret = *this;
+      ret.m_quality = profile_guessed;
+      return ret;
+    }
+
+  /* Return THIS with quality dropped to AFDO.  */
+  profile_probability afdo () const
+    {
+      profile_probability ret = *this;
+      ret.m_quality = profile_afdo;
+      return ret;
+    }
+
+  /* Return *THIS * NUM / DEN.  */
+  profile_probability apply_scale (int64_t num, int64_t den) const
+    {
+      if (*this == profile_probability::never ())
+	return *this;
+      if (!initialized_p ())
+	return profile_probability::uninitialized ();
+      profile_probability ret;
+      uint64_t tmp;
+      safe_scale_64bit (m_val, num, den, &tmp);
+      ret.m_val = MIN (tmp, max_probability);
+      ret.m_quality = MIN (m_quality, profile_adjusted);
+      return ret;
+    }
+
+  /* Return true when the probability of edge is reliable.
+
+     The profile guessing code is good at predicting branch outcome (ie.
+     taken/not taken), that is predicted right slightly over 75% of time.
+     It is however notoriously poor on predicting the probability itself.
+     In general the profile appear a lot flatter (with probabilities closer
+     to 50%) than the reality so it is bad idea to use it to drive optimization
+     such as those disabling dynamic branch prediction for well predictable
+     branches.
+
+     There are two exceptions - edges leading to noreturn edges and edges
+     predicted by number of iterations heuristics are predicted well.  This macro
+     should be able to distinguish those, but at the moment it simply check for
+     noreturn heuristic that is only one giving probability over 99% or bellow
+     1%.  In future we might want to propagate reliability information across the
+     CFG if we find this information useful on multiple places.   */
+
+  bool probably_reliable_p () const
+    {
+      if (m_quality >= profile_adjusted)
+	return true;
+      if (!initialized_p ())
+	return false;
+      return m_val < max_probability / 100
+	     || m_val > max_probability - max_probability / 100;
+    }
+
+  /* Return false if profile_probability is bogus.  */
+  bool verify () const
+    {
+      gcc_checking_assert (m_quality != profile_uninitialized);
+      if (m_val == uninitialized_probability)
+	return m_quality == profile_guessed;
+      else if (m_quality < profile_guessed)
+	return false;
+      return m_val <= max_probability;
+    }
+
+  /* Comparsions are three-state and conservative.  False is returned if
+     the inequality cannot be decided.  */
+  bool operator< (const profile_probability &other) const
+    {
+      return initialized_p () && other.initialized_p () && m_val < other.m_val;
+    }
+  bool operator> (const profile_probability &other) const
+    {
+      return initialized_p () && other.initialized_p () && m_val > other.m_val;
+    }
+
+  bool operator<= (const profile_probability &other) const
+    {
+      return initialized_p () && other.initialized_p () && m_val <= other.m_val;
+    }
+  bool operator>= (const profile_probability &other) const
+    {
+      return initialized_p () && other.initialized_p () && m_val >= other.m_val;
+    }
+
+  /* Output THIS to F.  */
+  void dump (FILE *f) const;
+
+  /* Print THIS to stderr.  */
+  void debug () const;
+
+  /* Return true if THIS is known to differ significantly from OTHER.  */
+  bool differs_from_p (profile_probability other) const;
+  /* Return if difference is greater than 50%.  */
+  bool differs_lot_from_p (profile_probability other) const;
+  /* COUNT1 times event happens with *THIS probability, COUNT2 times OTHER
+     happens with COUNT2 probablity. Return probablity that either *THIS or
+     OTHER happens.  */
+  profile_probability combine_with_count (profile_count count1,
+					  profile_probability other,
+					  profile_count count2) const;
+
+  /* LTO streaming support.  */
+  static profile_probability stream_in (struct lto_input_block *);
+  void stream_out (struct output_block *);
+  void stream_out (struct lto_output_stream *);
+};
+
+/* Main data type to hold profile counters in GCC. Profile counts originate
+   either from profile feedback, static profile estimation or both.  We do not
+   perform whole program profile propagation and thus profile estimation
+   counters are often local to function, while counters from profile feedback
+   (or special cases of profile estimation) can be used inter-procedurally.
+
+   There are 3 basic types
+     1) local counters which are result of intra-procedural static profile
+        estimation.
+     2) ipa counters which are result of profile feedback or special case
+        of static profile estimation (such as in function main).
+     3) counters which counts as 0 inter-procedurally (beause given function
+        was never run in train feedback) but they hold local static profile
+        estimate.
+
+   Counters of type 1 and 3 cannot be mixed with counters of different type
+   within operation (because whole function should use one type of counter)
+   with exception that global zero mix in most operations where outcome is
+   well defined.
+
+   To take local counter and use it inter-procedurally use ipa member function
+   which strips information irelevant at the inter-procedural level.
+
+   Counters are 61bit integers representing number of executions during the
+   train run or normalized frequency within the function.
+
+   As the profile is maintained during the compilation, many adjustments are
+   made.  Not all transformations can be made precisely, most importantly
+   when code is being duplicated.  It also may happen that part of CFG has
+   profile counts known while other do not - for example when LTO optimizing
+   partly profiled program or when profile was lost due to COMDAT merging.
+
+   For this reason profile_count tracks more information than
+   just unsigned integer and it is also ready for profile mismatches.
+   The API of this data type represent operations that are natural
+   on profile counts - sum, difference and operation with scales and
+   probabilities.  All operations are safe by never getting negative counts
+   and they do end up in uninitialized scale if any of the parameters is
+   uninitialized.
+
+   All comparsions that are three state and handling of probabilities.  Thus
+   a < b is not equal to !(a >= b).
+
+   The following pre-defined counts are available:
+
+   profile_count::zero ()  for code that is known to execute zero times at
+      runtime (this can be detected statically i.e. for paths leading to
+      abort ();
+   profile_count::one () for code that is known to execute once (such as
+      main () function
+   profile_count::uninitialized ()  for unknown execution count.
+
+ */
+
+class sreal;
+
+class GTY(()) profile_count
+{
+public:
+  /* Use 62bit to hold basic block counters.  Should be at least
+     64bit.  Although a counter cannot be negative, we use a signed
+     type to hold various extra stages.  */
+
+  static const int n_bits = 61;
+  static const uint64_t max_count = ((uint64_t) 1 << n_bits) - 2;
+private:
+  static const uint64_t uninitialized_count = ((uint64_t) 1 << n_bits) - 1;
+
+#if defined (__arm__) && (__GNUC__ >= 6 && __GNUC__ <= 8)
+  /* Work-around for PR88469.  A bug in the gcc-6/7/8 PCS layout code
+     incorrectly detects the alignment of a structure where the only
+     64-bit aligned object is a bit-field.  We force the alignment of
+     the entire field to mitigate this.  */
+#define UINT64_BIT_FIELD_ALIGN __attribute__ ((aligned(8)))
+#else
+#define UINT64_BIT_FIELD_ALIGN
+#endif
+  uint64_t UINT64_BIT_FIELD_ALIGN m_val : n_bits;
+#undef UINT64_BIT_FIELD_ALIGN
+  enum profile_quality m_quality : 3;
+
+  /* Return true if both values can meaningfully appear in single function
+     body.  We have either all counters in function local or global, otherwise
+     operations between them are not really defined well.  */
+  bool compatible_p (const profile_count other) const
+    {
+      if (!initialized_p () || !other.initialized_p ())
+	return true;
+      if (*this == profile_count::zero ()
+	  || other == profile_count::zero ())
+	return true;
+      return ipa_p () == other.ipa_p ();
+    }
+public:
+
+  /* Used for counters which are expected to be never executed.  */
+  static profile_count zero ()
+    {
+      return from_gcov_type (0);
+    }
+  static profile_count adjusted_zero ()
+    {
+      profile_count c;
+      c.m_val = 0;
+      c.m_quality = profile_adjusted;
+      return c;
+    }
+  static profile_count guessed_zero ()
+    {
+      profile_count c;
+      c.m_val = 0;
+      c.m_quality = profile_guessed;
+      return c;
+    }
+  static profile_count one ()
+    {
+      return from_gcov_type (1);
+    }
+  /* Value of counters which has not been initialized. Either because
+     initialization did not happen yet or because profile is unknown.  */
+  static profile_count uninitialized ()
+    {
+      profile_count c;
+      c.m_val = uninitialized_count;
+      c.m_quality = profile_guessed_local;
+      return c;
+    }
+
+  /* Conversion to gcov_type is lossy.  */
+  gcov_type to_gcov_type () const
+    {
+      gcc_checking_assert (initialized_p ());
+      return m_val;
+    }
+
+  /* Return true if value has been initialized.  */
+  bool initialized_p () const
+    {
+      return m_val != uninitialized_count;
+    }
+  /* Return true if value can be trusted.  */
+  bool reliable_p () const
+    {
+      return m_quality >= profile_adjusted;
+    }
+  /* Return true if vlaue can be operated inter-procedurally.  */
+  bool ipa_p () const
+    {
+      return !initialized_p () || m_quality >= profile_guessed_global0;
+    }
+  /* Return true if quality of profile is precise.  */
+  bool precise_p () const
+    {
+      return m_quality == profile_precise;
+    }
+
+  /* Get the quality of the count.  */
+  enum profile_quality quality () const { return m_quality; }
+
+  /* When merging basic blocks, the two different profile counts are unified.
+     Return true if this can be done without losing info about profile.
+     The only case we care about here is when first BB contains something
+     that makes it terminate in a way not visible in CFG.  */
+  bool ok_for_merging (profile_count other) const
+    {
+      if (m_quality < profile_adjusted
+	  || other.m_quality < profile_adjusted)
+	return true;
+      return !(other < *this);
+    }
+
+  /* When merging two BBs with different counts, pick common count that looks
+     most representative.  */
+  profile_count merge (profile_count other) const
+    {
+      if (*this == other || !other.initialized_p ()
+	  || m_quality > other.m_quality)
+	return *this;
+      if (other.m_quality > m_quality
+	  || other > *this)
+	return other;
+      return *this;
+    }
+
+  /* Basic operations.  */
+  bool operator== (const profile_count &other) const
+    {
+      return m_val == other.m_val && m_quality == other.m_quality;
+    }
+  profile_count operator+ (const profile_count &other) const
+    {
+      if (other == profile_count::zero ())
+	return *this;
+      if (*this == profile_count::zero ())
+	return other;
+      if (!initialized_p () || !other.initialized_p ())
+	return profile_count::uninitialized ();
+
+      profile_count ret;
+      gcc_checking_assert (compatible_p (other));
+      ret.m_val = m_val + other.m_val;
+      ret.m_quality = MIN (m_quality, other.m_quality);
+      return ret;
+    }
+  profile_count &operator+= (const profile_count &other)
+    {
+      if (other == profile_count::zero ())
+	return *this;
+      if (*this == profile_count::zero ())
+	{
+	  *this = other;
+	  return *this;
+	}
+      if (!initialized_p () || !other.initialized_p ())
+	return *this = profile_count::uninitialized ();
+      else
+	{
+          gcc_checking_assert (compatible_p (other));
+	  m_val += other.m_val;
+	  m_quality = MIN (m_quality, other.m_quality);
+	}
+      return *this;
+    }
+  profile_count operator- (const profile_count &other) const
+    {
+      if (*this == profile_count::zero () || other == profile_count::zero ())
+	return *this;
+      if (!initialized_p () || !other.initialized_p ())
+	return profile_count::uninitialized ();
+      gcc_checking_assert (compatible_p (other));
+      profile_count ret;
+      ret.m_val = m_val >= other.m_val ? m_val - other.m_val : 0;
+      ret.m_quality = MIN (m_quality, other.m_quality);
+      return ret;
+    }
+  profile_count &operator-= (const profile_count &other)
+    {
+      if (*this == profile_count::zero () || other == profile_count::zero ())
+	return *this;
+      if (!initialized_p () || !other.initialized_p ())
+	return *this = profile_count::uninitialized ();
+      else
+	{
+          gcc_checking_assert (compatible_p (other));
+	  m_val = m_val >= other.m_val ? m_val - other.m_val: 0;
+	  m_quality = MIN (m_quality, other.m_quality);
+	}
+      return *this;
+    }
+
+  /* Return false if profile_count is bogus.  */
+  bool verify () const
+    {
+      gcc_checking_assert (m_quality != profile_uninitialized);
+      return m_val != uninitialized_count || m_quality == profile_guessed_local;
+    }
+
+  /* Comparsions are three-state and conservative.  False is returned if
+     the inequality cannot be decided.  */
+  bool operator< (const profile_count &other) const
+    {
+      if (!initialized_p () || !other.initialized_p ())
+	return false;
+      if (*this == profile_count::zero ())
+	return !(other == profile_count::zero ());
+      if (other == profile_count::zero ())
+	return false;
+      gcc_checking_assert (compatible_p (other));
+      return m_val < other.m_val;
+    }
+  bool operator> (const profile_count &other) const
+    {
+      if (!initialized_p () || !other.initialized_p ())
+	return false;
+      if (*this  == profile_count::zero ())
+	return false;
+      if (other == profile_count::zero ())
+	return !(*this == profile_count::zero ());
+      gcc_checking_assert (compatible_p (other));
+      return initialized_p () && other.initialized_p () && m_val > other.m_val;
+    }
+  bool operator< (const gcov_type other) const
+    {
+      gcc_checking_assert (ipa_p ());
+      gcc_checking_assert (other >= 0);
+      return initialized_p () && m_val < (uint64_t) other;
+    }
+  bool operator> (const gcov_type other) const
+    {
+      gcc_checking_assert (ipa_p ());
+      gcc_checking_assert (other >= 0);
+      return initialized_p () && m_val > (uint64_t) other;
+    }
+
+  bool operator<= (const profile_count &other) const
+    {
+      if (!initialized_p () || !other.initialized_p ())
+	return false;
+      if (*this == profile_count::zero ())
+	return true;
+      if (other == profile_count::zero ())
+	return (*this == profile_count::zero ());
+      gcc_checking_assert (compatible_p (other));
+      return m_val <= other.m_val;
+    }
+  bool operator>= (const profile_count &other) const
+    {
+      if (!initialized_p () || !other.initialized_p ())
+	return false;
+      if (other == profile_count::zero ())
+	return true;
+      if (*this == profile_count::zero ())
+	return (other == profile_count::zero ());
+      gcc_checking_assert (compatible_p (other));
+      return m_val >= other.m_val;
+    }
+  bool operator<= (const gcov_type other) const
+    {
+      gcc_checking_assert (ipa_p ());
+      gcc_checking_assert (other >= 0);
+      return initialized_p () && m_val <= (uint64_t) other;
+    }
+  bool operator>= (const gcov_type other) const
+    {
+      gcc_checking_assert (ipa_p ());
+      gcc_checking_assert (other >= 0);
+      return initialized_p () && m_val >= (uint64_t) other;
+    }
+  /* Return true when value is not zero and can be used for scaling. 
+     This is different from *this > 0 because that requires counter to
+     be IPA.  */
+  bool nonzero_p () const
+    {
+      return initialized_p () && m_val != 0;
+    }
+
+  /* Make counter forcingly nonzero.  */
+  profile_count force_nonzero () const
+    {
+      if (!initialized_p ())
+	return *this;
+      profile_count ret = *this;
+      if (ret.m_val == 0)
+	{
+	  ret.m_val = 1;
+          ret.m_quality = MIN (m_quality, profile_adjusted);
+	}
+      return ret;
+    }
+
+  profile_count max (profile_count other) const
+    {
+      if (!initialized_p ())
+	return other;
+      if (!other.initialized_p ())
+	return *this;
+      if (*this == profile_count::zero ())
+	return other;
+      if (other == profile_count::zero ())
+	return *this;
+      gcc_checking_assert (compatible_p (other));
+      if (m_val < other.m_val || (m_val == other.m_val
+				  && m_quality < other.m_quality))
+	return other;
+      return *this;
+    }
+
+  /* PROB is a probability in scale 0...REG_BR_PROB_BASE.  Scale counter
+     accordingly.  */
+  profile_count apply_probability (int prob) const
+    {
+      gcc_checking_assert (prob >= 0 && prob <= REG_BR_PROB_BASE);
+      if (m_val == 0)
+	return *this;
+      if (!initialized_p ())
+	return profile_count::uninitialized ();
+      profile_count ret;
+      ret.m_val = RDIV (m_val * prob, REG_BR_PROB_BASE);
+      ret.m_quality = MIN (m_quality, profile_adjusted);
+      return ret;
+    }
+
+  /* Scale counter according to PROB.  */
+  profile_count apply_probability (profile_probability prob) const
+    {
+      if (*this == profile_count::zero ())
+	return *this;
+      if (prob == profile_probability::never ())
+	return profile_count::zero ();
+      if (!initialized_p ())
+	return profile_count::uninitialized ();
+      profile_count ret;
+      uint64_t tmp;
+      safe_scale_64bit (m_val, prob.m_val, profile_probability::max_probability,
+			&tmp);
+      ret.m_val = tmp;
+      ret.m_quality = MIN (m_quality, prob.m_quality);
+      return ret;
+    }
+  /* Return *THIS * NUM / DEN.  */
+  profile_count apply_scale (int64_t num, int64_t den) const
+    {
+      if (m_val == 0)
+	return *this;
+      if (!initialized_p ())
+	return profile_count::uninitialized ();
+      profile_count ret;
+      uint64_t tmp;
+
+      gcc_checking_assert (num >= 0 && den > 0);
+      safe_scale_64bit (m_val, num, den, &tmp);
+      ret.m_val = MIN (tmp, max_count);
+      ret.m_quality = MIN (m_quality, profile_adjusted);
+      return ret;
+    }
+  profile_count apply_scale (profile_count num, profile_count den) const
+    {
+      if (*this == profile_count::zero ())
+	return *this;
+      if (num == profile_count::zero ())
+	return num;
+      if (!initialized_p () || !num.initialized_p () || !den.initialized_p ())
+	return profile_count::uninitialized ();
+      if (num == den)
+	return *this;
+      gcc_checking_assert (den.m_val);
+
+      profile_count ret;
+      uint64_t val;
+      safe_scale_64bit (m_val, num.m_val, den.m_val, &val);
+      ret.m_val = MIN (val, max_count);
+      ret.m_quality = MIN (MIN (MIN (m_quality, profile_adjusted),
+			        num.m_quality), den.m_quality);
+      if (num.ipa_p () && !ret.ipa_p ())
+	ret.m_quality = MIN (num.m_quality, profile_guessed);
+      return ret;
+    }
+
+  /* Return THIS with quality dropped to GUESSED_LOCAL.  */
+  profile_count guessed_local () const
+    {
+      profile_count ret = *this;
+      if (!initialized_p ())
+	return *this;
+      ret.m_quality = profile_guessed_local;
+      return ret;
+    }
+
+  /* We know that profile is globally 0 but keep local profile if present.  */
+  profile_count global0 () const
+    {
+      profile_count ret = *this;
+      if (!initialized_p ())
+	return *this;
+      ret.m_quality = profile_guessed_global0;
+      return ret;
+    }
+
+  /* We know that profile is globally adjusted 0 but keep local profile
+     if present.  */
+  profile_count global0adjusted () const
+    {
+      profile_count ret = *this;
+      if (!initialized_p ())
+	return *this;
+      ret.m_quality = profile_guessed_global0adjusted;
+      return ret;
+    }
+
+  /* Return THIS with quality dropped to GUESSED.  */
+  profile_count guessed () const
+    {
+      profile_count ret = *this;
+      ret.m_quality = MIN (ret.m_quality, profile_guessed);
+      return ret;
+    }
+
+  /* Return variant of profile counte which is always safe to compare
+     acorss functions.  */
+  profile_count ipa () const
+    {
+      if (m_quality > profile_guessed_global0adjusted)
+	return *this;
+      if (m_quality == profile_guessed_global0)
+	return profile_count::zero ();
+      if (m_quality == profile_guessed_global0adjusted)
+	return profile_count::adjusted_zero ();
+      return profile_count::uninitialized ();
+    }
+
+  /* Return THIS with quality dropped to AFDO.  */
+  profile_count afdo () const
+    {
+      profile_count ret = *this;
+      ret.m_quality = profile_afdo;
+      return ret;
+    }
+
+  /* Return probability of event with counter THIS within event with counter
+     OVERALL.  */
+  profile_probability probability_in (const profile_count overall) const
+    {
+      if (*this == profile_count::zero ()
+	  && !(overall == profile_count::zero ()))
+	return profile_probability::never ();
+      if (!initialized_p () || !overall.initialized_p ()
+	  || !overall.m_val)
+	return profile_probability::uninitialized ();
+      if (*this == overall && m_quality == profile_precise)
+	return profile_probability::always ();
+      profile_probability ret;
+      gcc_checking_assert (compatible_p (overall));
+
+      if (overall.m_val < m_val)
+	{
+	  ret.m_val = profile_probability::max_probability;
+	  ret.m_quality = profile_guessed;
+	  return ret;
+	}
+      else
+	ret.m_val = RDIV (m_val * profile_probability::max_probability,
+			  overall.m_val);
+      ret.m_quality = MIN (MAX (MIN (m_quality, overall.m_quality),
+				profile_guessed), profile_adjusted);
+      return ret;
+    }
+
+  int to_frequency (struct function *fun) const;
+  int to_cgraph_frequency (profile_count entry_bb_count) const;
+  sreal to_sreal_scale (profile_count in, bool *known = NULL) const;
+
+  /* Output THIS to F.  */
+  void dump (FILE *f) const;
+
+  /* Print THIS to stderr.  */
+  void debug () const;
+
+  /* Return true if THIS is known to differ significantly from OTHER.  */
+  bool differs_from_p (profile_count other) const;
+
+  /* We want to scale profile across function boundary from NUM to DEN.
+     Take care of the side case when NUM and DEN are zeros of incompatible
+     kinds.  */
+  static void adjust_for_ipa_scaling (profile_count *num, profile_count *den);
+
+  /* THIS is a count of bb which is known to be executed IPA times.
+     Combine this information into bb counter.  This means returning IPA
+     if it is nonzero, not changing anything if IPA is uninitialized
+     and if IPA is zero, turning THIS into corresponding local profile with
+     global0.  */
+  profile_count combine_with_ipa_count (profile_count ipa);
+
+  /* The profiling runtime uses gcov_type, which is usually 64bit integer.
+     Conversions back and forth are used to read the coverage and get it
+     into internal representation.  */
+  static profile_count from_gcov_type (gcov_type v);
+
+  /* LTO streaming support.  */
+  static profile_count stream_in (struct lto_input_block *);
+  void stream_out (struct output_block *);
+  void stream_out (struct lto_output_stream *);
+};
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/profile.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/profile.h
new file mode 100644
index 0000000..e30630d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/profile.h
@@ -0,0 +1,80 @@
+/* Header file for minimum-cost maximal flow routines used to smooth basic
+   block and edge frequency counts.
+   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Contributed by Paul Yuan (yingbo.com@gmail.com)
+       and Vinodha Ramasamy (vinodha@google.com).
+
+This file is part of GCC.
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef PROFILE_H
+#define PROFILE_H
+
+/* Additional information about edges. */
+struct edge_profile_info
+{
+  unsigned int count_valid:1;
+
+  /* Is on the spanning tree.  */
+  unsigned int on_tree:1;
+
+  /* Pretend this edge does not exist (it is abnormal and we've
+     inserted a fake to compensate).  */
+  unsigned int ignore:1;
+};
+
+#define EDGE_INFO(e)  ((struct edge_profile_info *) (e)->aux)
+
+/* Helpers annotating edges/basic blocks to GCOV counts.  */
+
+extern vec<gcov_type> bb_gcov_counts;
+extern hash_map<edge,gcov_type> *edge_gcov_counts;
+
+inline gcov_type &
+edge_gcov_count (edge e)
+{
+  bool existed;
+  gcov_type &c = edge_gcov_counts->get_or_insert (e, &existed);
+  if (!existed)
+    c = 0;
+  return c;
+}
+
+inline gcov_type &
+bb_gcov_count (basic_block bb)
+{
+  return bb_gcov_counts[bb->index];
+}
+
+typedef struct gcov_working_set_info gcov_working_set_t;
+extern gcov_working_set_t *find_working_set (unsigned pct_times_10);
+extern void add_working_set (gcov_working_set_t *);
+
+/* Smoothes the initial assigned basic block and edge counts using
+   a minimum cost flow algorithm. */
+extern void mcf_smooth_cfg (void);
+
+extern gcov_type sum_edge_counts (vec<edge, va_gc> *edges);
+
+extern void init_node_map (bool);
+extern void del_node_map (void);
+
+extern void get_working_sets (void);
+
+/* Counter summary from the last set of coverage counts read by
+   profile.c.  */
+extern struct gcov_summary *profile_info;
+
+#endif /* PROFILE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/read-md.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/read-md.h
new file mode 100644
index 0000000..18426f7
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/read-md.h
@@ -0,0 +1,399 @@
+/* MD reader definitions.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_READ_MD_H
+#define GCC_READ_MD_H
+
+#include "obstack.h"
+
+/* Records a position in the file.  */
+struct file_location {
+  file_location () {}
+  file_location (const char *, int, int);
+
+  const char *filename;
+  int lineno;
+  int colno;
+};
+
+inline file_location::file_location (const char *filename_in, int lineno_in, int colno_in)
+: filename (filename_in), lineno (lineno_in), colno (colno_in) {}
+
+/* Holds one symbol or number in the .md file.  */
+struct md_name {
+  /* The name as it appeared in the .md file.  Names are syntactically
+     limited to the length of this buffer.  */
+  char buffer[256];
+
+  /* The name that should actually be used by the generator programs.
+     This is an expansion of NAME, after things like constant substitution.  */
+  char *string;
+};
+
+/* This structure represents a constant defined by define_constant,
+   define_enum, or such-like.  */
+struct md_constant {
+  /* The name of the constant.  */
+  char *name;
+
+  /* The string to which the constants expands.  */
+  char *value;
+
+  /* If the constant is associated with a enumeration, this field
+     points to that enumeration, otherwise it is null.  */
+  struct enum_type *parent_enum;
+};
+
+/* This structure represents one value in an enum_type.  */
+struct enum_value {
+  /* The next value in the enum, or null if this is the last.  */
+  struct enum_value *next;
+
+  /* The name of the value as it appears in the .md file.  */
+  char *name;
+
+  /* The definition of the related C value.  */
+  struct md_constant *def;
+};
+
+/* This structure represents an enum defined by define_enum or the like.  */
+struct enum_type {
+  /* The C name of the enumeration.  */
+  char *name;
+
+  /* True if this is an md-style enum (DEFINE_ENUM) rather than
+     a C-style enum (DEFINE_C_ENUM).  */
+  bool md_p;
+
+  /* The values of the enumeration.  There is always at least one.  */
+  struct enum_value *values;
+
+  /* A pointer to the null terminator in VALUES.  */
+  struct enum_value **tail_ptr;
+
+  /* The number of enumeration values.  */
+  unsigned int num_values;
+};
+
+/* Describes one instance of an overloaded_name.  */
+struct overloaded_instance {
+  /* The next instance in the chain, or null if none.  */
+  overloaded_instance *next;
+
+  /* The values that the overloaded_name arguments should have for this
+     instance to be chosen.  Each value is a C token.  */
+  vec<const char *> arg_values;
+
+  /* The full (non-overloaded) name of the pattern.  */
+  const char *name;
+
+  /* The corresponding define_expand or define_insn.  */
+  rtx insn;
+};
+
+/* Describes a define_expand or define_insn whose name was preceded by '@'.
+   Overloads are uniquely determined by their name and the types of their
+   arguments; it's possible to have overloads with the same name but
+   different argument types.  */
+struct overloaded_name {
+  /* The next overloaded name in the chain.  */
+  overloaded_name *next;
+
+  /* The overloaded name (i.e. the name with "@" character and
+     "<...>" placeholders removed).  */
+  const char *name;
+
+  /* The C types of the iterators that determine the underlying pattern,
+     in the same order as in the pattern name.  E.g. "<mode>" in the
+     pattern name would give a "machine_mode" argument here.  */
+  vec<const char *> arg_types;
+
+  /* The first instance associated with this overloaded_name.  */
+  overloaded_instance *first_instance;
+
+  /* Where to chain new overloaded_instances.  */
+  overloaded_instance **next_instance_ptr;
+};
+
+struct mapping;
+
+/* A class for reading .md files and RTL dump files.
+
+   Implemented in read-md.c.
+
+   This class has responsibility for reading chars from input files, and
+   for certain common top-level directives including the "include"
+   directive.
+
+   It does not handle parsing the hierarchically-nested expressions of
+   rtl.def; for that see the rtx_reader subclass below (implemented in
+   read-rtl.c).  */
+
+class md_reader
+{
+ public:
+  md_reader (bool compact);
+  virtual ~md_reader ();
+
+  bool read_md_files (int, const char **, bool (*) (const char *));
+  bool read_file (const char *filename);
+  bool read_file_fragment (const char *filename,
+			   int first_line,
+			   int last_line);
+
+  /* A hook that handles a single .md-file directive, up to but not
+     including the closing ')'.  It takes two arguments: the file position
+     at which the directive started, and the name of the directive.  The next
+     unread character is the optional space after the directive name.  */
+  virtual void handle_unknown_directive (file_location, const char *) = 0;
+
+  file_location get_current_location () const;
+
+  bool is_compact () const { return m_compact; }
+
+  /* Defined in read-md.c.  */
+  int read_char (void);
+  void unread_char (int ch);
+  file_location read_name (struct md_name *name);
+  file_location read_name_or_nil (struct md_name *);
+  void read_escape ();
+  char *read_quoted_string ();
+  char *read_braced_string ();
+  char *read_string (int star_if_braced);
+  void read_skip_construct (int depth, file_location loc);
+  void require_char (char expected);
+  void require_char_ws (char expected);
+  void require_word_ws (const char *expected);
+  int peek_char (void);
+
+  void set_md_ptr_loc (const void *ptr, const char *filename, int lineno);
+  const struct ptr_loc *get_md_ptr_loc (const void *ptr);
+  void copy_md_ptr_loc (const void *new_ptr, const void *old_ptr);
+  void fprint_md_ptr_loc (FILE *outf, const void *ptr);
+  void print_md_ptr_loc (const void *ptr);
+
+  struct enum_type *lookup_enum_type (const char *name);
+  void traverse_enum_types (htab_trav callback, void *info);
+
+  void handle_constants ();
+  void traverse_md_constants (htab_trav callback, void *info);
+  void handle_enum (file_location loc, bool md_p);
+
+  const char *join_c_conditions (const char *cond1, const char *cond2);
+  void fprint_c_condition (FILE *outf, const char *cond);
+  void print_c_condition (const char *cond);
+
+  /* Defined in read-rtl.c.  */
+  const char *apply_iterator_to_string (const char *string);
+  rtx copy_rtx_for_iterators (rtx original);
+  void read_conditions ();
+  void record_potential_iterator_use (struct iterator_group *group,
+				      rtx x, unsigned int index,
+				      const char *name);
+  struct mapping *read_mapping (struct iterator_group *group, htab_t table);
+  overloaded_name *handle_overloaded_name (rtx, vec<mapping *> *);
+
+  const char *get_top_level_filename () const { return m_toplevel_fname; }
+  const char *get_filename () const { return m_read_md_filename; }
+  int get_lineno () const { return m_read_md_lineno; }
+  int get_colno () const { return m_read_md_colno; }
+
+  struct obstack *get_string_obstack () { return &m_string_obstack; }
+  htab_t get_md_constants () { return m_md_constants; }
+
+  overloaded_name *get_overloads () const { return m_first_overload; }
+
+ private:
+  /* A singly-linked list of filenames.  */
+  struct file_name_list {
+    struct file_name_list *next;
+    const char *fname;
+  };
+
+ private:
+  void handle_file ();
+  void handle_toplevel_file ();
+  void handle_include (file_location loc);
+  void add_include_path (const char *arg);
+
+  bool read_name_1 (struct md_name *name, file_location *out_loc);
+
+ private:
+  /* Are we reading a compact dump?  */
+  bool m_compact;
+
+  /* The name of the toplevel file that indirectly included
+     m_read_md_file.  */
+  const char *m_toplevel_fname;
+
+  /* The directory part of m_toplevel_fname
+     NULL if m_toplevel_fname is a bare filename.  */
+  char *m_base_dir;
+
+  /* The file we are reading.  */
+  FILE *m_read_md_file;
+
+  /* The filename of m_read_md_file.  */
+  const char *m_read_md_filename;
+
+  /* The current line number in m_read_md_file.  */
+  int m_read_md_lineno;
+
+  /* The current column number in m_read_md_file.  */
+  int m_read_md_colno;
+
+  /* The column number before the last newline, so that
+     we can handle unread_char ('\n') at least once whilst
+     retaining column information.  */
+  int m_last_line_colno;
+
+  /* The first directory to search.  */
+  file_name_list *m_first_dir_md_include;
+
+  /* A pointer to the null terminator of the md include chain.  */
+  file_name_list **m_last_dir_md_include_ptr;
+
+  /* Obstack used for allocating MD strings.  */
+  struct obstack m_string_obstack;
+
+  /* A table of ptr_locs, hashed on the PTR field.  */
+  htab_t m_ptr_locs;
+
+  /* An obstack for the above.  Plain xmalloc is a bit heavyweight for a
+     small structure like ptr_loc.  */
+  struct obstack m_ptr_loc_obstack;
+
+  /* A hash table of triples (A, B, C), where each of A, B and C is a condition
+     and A is equivalent to "B && C".  This is used to keep track of the source
+     of conditions that are made up of separate MD strings (such as the split
+     condition of a define_insn_and_split).  */
+  htab_t m_joined_conditions;
+
+  /* An obstack for allocating joined_conditions entries.  */
+  struct obstack m_joined_conditions_obstack;
+
+  /* A table of md_constant structures, hashed by name.  Null if no
+     constant expansion should occur.  */
+  htab_t m_md_constants;
+
+  /* A table of enum_type structures, hashed by name.  */
+  htab_t m_enum_types;
+
+  /* If non-zero, filter the input to just this subset of lines.  */
+  int m_first_line;
+  int m_last_line;
+
+  /* The first overloaded_name.  */
+  overloaded_name *m_first_overload;
+
+  /* Where to chain further overloaded_names,  */
+  overloaded_name **m_next_overload_ptr;
+
+  /* A hash table of overloaded_names, keyed off their name and the types of
+     their arguments.  */
+  htab_t m_overloads_htab;
+};
+
+/* Global singleton; constrast with rtx_reader_ptr below.  */
+extern md_reader *md_reader_ptr;
+
+/* An md_reader subclass which skips unknown directives, for
+   the gen* tools that purely use read-md.o.  */
+
+class noop_reader : public md_reader
+{
+ public:
+  noop_reader () : md_reader (false) {}
+
+  /* A dummy implementation which skips unknown directives.  */
+  void handle_unknown_directive (file_location, const char *);
+};
+
+/* An md_reader subclass that actually handles full hierarchical
+   rtx expressions.
+
+   Implemented in read-rtl.c.  */
+
+class rtx_reader : public md_reader
+{
+ public:
+  rtx_reader (bool compact);
+  ~rtx_reader ();
+
+  bool read_rtx (const char *rtx_name, vec<rtx> *rtxen);
+  rtx read_rtx_code (const char *code_name);
+  virtual rtx read_rtx_operand (rtx return_rtx, int idx);
+  rtx read_nested_rtx ();
+  rtx read_rtx_variadic (rtx form);
+  char *read_until (const char *terminator_chars, bool consume_terminator);
+
+  virtual void handle_any_trailing_information (rtx) {}
+  virtual rtx postprocess (rtx x) { return x; }
+
+  /* Hook to allow function_reader subclass to put STRINGBUF into gc-managed
+     memory, rather than within an obstack.
+     This base class implementation is a no-op.  */
+  virtual const char *finalize_string (char *stringbuf) { return stringbuf; }
+
+ protected:
+  /* Analogous to rtx_writer's m_in_call_function_usage.  */
+  bool m_in_call_function_usage;
+
+  /* Support for "reuse_rtx" directives.  */
+  auto_vec<rtx> m_reuse_rtx_by_id;
+};
+
+/* Global singleton; constrast with md_reader_ptr above.  */
+extern rtx_reader *rtx_reader_ptr;
+
+extern void (*include_callback) (const char *);
+
+/* Read the next character from the MD file.  */
+
+static inline int
+read_char (void)
+{
+  return md_reader_ptr->read_char ();
+}
+
+/* Put back CH, which was the last character read from the MD file.  */
+
+static inline void
+unread_char (int ch)
+{
+  md_reader_ptr->unread_char (ch);
+}
+
+extern hashval_t leading_string_hash (const void *);
+extern int leading_string_eq_p (const void *, const void *);
+extern const char *join_c_conditions (const char *, const char *);
+extern void message_at (file_location, const char *, ...) ATTRIBUTE_PRINTF_2;
+extern void error_at (file_location, const char *, ...) ATTRIBUTE_PRINTF_2;
+extern void fatal_at (file_location, const char *, ...) ATTRIBUTE_PRINTF_2;
+extern void fatal_with_file_and_line (const char *, ...)
+  ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN;
+extern void fatal_expected_char (int, int) ATTRIBUTE_NORETURN;
+extern int read_skip_spaces (void);
+extern int n_comma_elts (const char *);
+extern const char *scan_comma_elt (const char **);
+extern void upcase_string (char *);
+extern void traverse_enum_types (htab_trav, void *);
+extern struct enum_type *lookup_enum_type (const char *);
+
+#endif /* GCC_READ_MD_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/read-rtl-function.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/read-rtl-function.h
new file mode 100644
index 0000000..19a3d2a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/read-rtl-function.h
@@ -0,0 +1,28 @@
+/* read-rtl-function.h - Reader for RTL function dumps
+   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_READ_RTL_FUNCTION_H
+#define GCC_READ_RTL_FUNCTION_H
+
+extern bool read_rtl_function_body (const char *path);
+
+extern bool read_rtl_function_body_from_file_range (location_t start_loc,
+						    location_t end_loc);
+
+#endif /* GCC_READ_RTL_FUNCTION_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/real.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/real.h
new file mode 100644
index 0000000..95b9db8
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/real.h
@@ -0,0 +1,531 @@
+/* Definitions of floating-point access for GNU compiler.
+   Copyright (C) 1989-2019 Free Software Foundation, Inc.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it under
+   the terms of the GNU General Public License as published by the Free
+   Software Foundation; either version 3, or (at your option) any later
+   version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or
+   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+   for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_REAL_H
+#define GCC_REAL_H
+
+/* An expanded form of the represented number.  */
+
+/* Enumerate the special cases of numbers that we encounter.  */
+enum real_value_class {
+  rvc_zero,
+  rvc_normal,
+  rvc_inf,
+  rvc_nan
+};
+
+#define SIGNIFICAND_BITS	(128 + HOST_BITS_PER_LONG)
+#define EXP_BITS		(32 - 6)
+#define MAX_EXP			((1 << (EXP_BITS - 1)) - 1)
+#define SIGSZ			(SIGNIFICAND_BITS / HOST_BITS_PER_LONG)
+#define SIG_MSB			((unsigned long)1 << (HOST_BITS_PER_LONG - 1))
+
+struct GTY(()) real_value {
+  /* Use the same underlying type for all bit-fields, so as to make
+     sure they're packed together, otherwise REAL_VALUE_TYPE_SIZE will
+     be miscomputed.  */
+  unsigned int /* ENUM_BITFIELD (real_value_class) */ cl : 2;
+  unsigned int decimal : 1;
+  unsigned int sign : 1;
+  unsigned int signalling : 1;
+  unsigned int canonical : 1;
+  unsigned int uexp : EXP_BITS;
+  unsigned long sig[SIGSZ];
+};
+
+#define REAL_EXP(REAL) \
+  ((int)((REAL)->uexp ^ (unsigned int)(1 << (EXP_BITS - 1))) \
+   - (1 << (EXP_BITS - 1)))
+#define SET_REAL_EXP(REAL, EXP) \
+  ((REAL)->uexp = ((unsigned int)(EXP) & (unsigned int)((1 << EXP_BITS) - 1)))
+
+/* Various headers condition prototypes on #ifdef REAL_VALUE_TYPE, so it
+   needs to be a macro.  We do need to continue to have a structure tag
+   so that other headers can forward declare it.  */
+#define REAL_VALUE_TYPE struct real_value
+
+/* We store a REAL_VALUE_TYPE into an rtx, and we do this by putting it in
+   consecutive "w" slots.  Moreover, we've got to compute the number of "w"
+   slots at preprocessor time, which means we can't use sizeof.  Guess.  */
+
+#define REAL_VALUE_TYPE_SIZE (SIGNIFICAND_BITS + 32)
+#define REAL_WIDTH \
+  (REAL_VALUE_TYPE_SIZE/HOST_BITS_PER_WIDE_INT \
+   + (REAL_VALUE_TYPE_SIZE%HOST_BITS_PER_WIDE_INT ? 1 : 0)) /* round up */
+
+/* Verify the guess.  */
+extern char test_real_width
+  [sizeof (REAL_VALUE_TYPE) <= REAL_WIDTH * sizeof (HOST_WIDE_INT) ? 1 : -1];
+
+/* Calculate the format for CONST_DOUBLE.  We need as many slots as
+   are necessary to overlay a REAL_VALUE_TYPE on them.  This could be
+   as many as four (32-bit HOST_WIDE_INT, 128-bit REAL_VALUE_TYPE).
+
+   A number of places assume that there are always at least two 'w'
+   slots in a CONST_DOUBLE, so we provide them even if one would suffice.  */
+
+#if REAL_WIDTH == 1
+# define CONST_DOUBLE_FORMAT	 "ww"
+#else
+# if REAL_WIDTH == 2
+#  define CONST_DOUBLE_FORMAT	 "ww"
+# else
+#  if REAL_WIDTH == 3
+#   define CONST_DOUBLE_FORMAT	 "www"
+#  else
+#   if REAL_WIDTH == 4
+#    define CONST_DOUBLE_FORMAT	 "wwww"
+#   else
+#    if REAL_WIDTH == 5
+#     define CONST_DOUBLE_FORMAT "wwwww"
+#    else
+#     if REAL_WIDTH == 6
+#      define CONST_DOUBLE_FORMAT "wwwwww"
+#     else
+       #error "REAL_WIDTH > 6 not supported"
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+
+/* Describes the properties of the specific target format in use.  */
+struct real_format
+{
+  /* Move to and from the target bytes.  */
+  void (*encode) (const struct real_format *, long *,
+		  const REAL_VALUE_TYPE *);
+  void (*decode) (const struct real_format *, REAL_VALUE_TYPE *,
+		  const long *);
+
+  /* The radix of the exponent and digits of the significand.  */
+  int b;
+
+  /* Size of the significand in digits of radix B.  */
+  int p;
+
+  /* Size of the significant of a NaN, in digits of radix B.  */
+  int pnan;
+
+  /* The minimum negative integer, x, such that b**(x-1) is normalized.  */
+  int emin;
+
+  /* The maximum integer, x, such that b**(x-1) is representable.  */
+  int emax;
+
+  /* The bit position of the sign bit, for determining whether a value
+     is positive/negative, or -1 for a complex encoding.  */
+  int signbit_ro;
+
+  /* The bit position of the sign bit, for changing the sign of a number,
+     or -1 for a complex encoding.  */
+  int signbit_rw;
+
+  /* If this is an IEEE interchange format, the number of bits in the
+     format; otherwise, if it is an IEEE extended format, one more
+     than the greatest number of bits in an interchange format it
+     extends; otherwise 0.  Formats need not follow the IEEE 754-2008
+     recommended practice regarding how signaling NaNs are identified,
+     and may vary in the choice of default NaN, but must follow other
+     IEEE practice regarding having NaNs, infinities and subnormal
+     values, and the relation of minimum and maximum exponents, and,
+     for interchange formats, the details of the encoding.  */
+  int ieee_bits;
+
+  /* Default rounding mode for operations on this format.  */
+  bool round_towards_zero;
+  bool has_sign_dependent_rounding;
+
+  /* Properties of the format.  */
+  bool has_nans;
+  bool has_inf;
+  bool has_denorm;
+  bool has_signed_zero;
+  bool qnan_msb_set;
+  bool canonical_nan_lsbs_set;
+  const char *name;
+};
+
+
+/* The target format used for each floating point mode.
+   Float modes are followed by decimal float modes, with entries for
+   float modes indexed by (MODE - first float mode), and entries for
+   decimal float modes indexed by (MODE - first decimal float mode) +
+   the number of float modes.  */
+extern const struct real_format *
+  real_format_for_mode[MAX_MODE_FLOAT - MIN_MODE_FLOAT + 1
+		       + MAX_MODE_DECIMAL_FLOAT - MIN_MODE_DECIMAL_FLOAT + 1];
+
+#define REAL_MODE_FORMAT(MODE)						\
+  (real_format_for_mode[DECIMAL_FLOAT_MODE_P (MODE)			\
+			? (((MODE) - MIN_MODE_DECIMAL_FLOAT)		\
+			   + (MAX_MODE_FLOAT - MIN_MODE_FLOAT + 1))	\
+			: GET_MODE_CLASS (MODE) == MODE_FLOAT		\
+			? ((MODE) - MIN_MODE_FLOAT)			\
+			: (gcc_unreachable (), 0)])
+
+#define FLOAT_MODE_FORMAT(MODE) \
+  (REAL_MODE_FORMAT (as_a <scalar_float_mode> (GET_MODE_INNER (MODE))))
+
+/* The following macro determines whether the floating point format is
+   composite, i.e. may contain non-consecutive mantissa bits, in which
+   case compile-time FP overflow may not model run-time overflow.  */
+#define MODE_COMPOSITE_P(MODE) \
+  (FLOAT_MODE_P (MODE) \
+   && FLOAT_MODE_FORMAT (MODE)->pnan < FLOAT_MODE_FORMAT (MODE)->p)
+
+/* Accessor macros for format properties.  */
+#define MODE_HAS_NANS(MODE) \
+  (FLOAT_MODE_P (MODE) && FLOAT_MODE_FORMAT (MODE)->has_nans)
+#define MODE_HAS_INFINITIES(MODE) \
+  (FLOAT_MODE_P (MODE) && FLOAT_MODE_FORMAT (MODE)->has_inf)
+#define MODE_HAS_SIGNED_ZEROS(MODE) \
+  (FLOAT_MODE_P (MODE) && FLOAT_MODE_FORMAT (MODE)->has_signed_zero)
+#define MODE_HAS_SIGN_DEPENDENT_ROUNDING(MODE) \
+  (FLOAT_MODE_P (MODE) \
+   && FLOAT_MODE_FORMAT (MODE)->has_sign_dependent_rounding)
+
+/* This class allows functions in this file to accept a floating-point
+   format as either a mode or an explicit real_format pointer.  In the
+   former case the mode must be VOIDmode (which means "no particular
+   format") or must satisfy SCALAR_FLOAT_MODE_P.  */
+class format_helper
+{
+public:
+  format_helper (const real_format *format) : m_format (format) {}
+  template<typename T> format_helper (const T &);
+  const real_format *operator-> () const { return m_format; }
+  operator const real_format *() const { return m_format; }
+
+  bool decimal_p () const { return m_format && m_format->b == 10; }
+  bool can_represent_integral_type_p (tree type) const;
+
+private:
+  const real_format *m_format;
+};
+
+template<typename T>
+inline format_helper::format_helper (const T &m)
+  : m_format (m == VOIDmode ? 0 : REAL_MODE_FORMAT (m))
+{}
+
+/* Declare functions in real.c.  */
+
+/* True if the given mode has a NaN representation and the treatment of
+   NaN operands is important.  Certain optimizations, such as folding
+   x * 0 into 0, are not correct for NaN operands, and are normally
+   disabled for modes with NaNs.  The user can ask for them to be
+   done anyway using the -funsafe-math-optimizations switch.  */
+extern bool HONOR_NANS (machine_mode);
+extern bool HONOR_NANS (const_tree);
+extern bool HONOR_NANS (const_rtx);
+
+/* Like HONOR_NANs, but true if we honor signaling NaNs (or sNaNs).  */
+extern bool HONOR_SNANS (machine_mode);
+extern bool HONOR_SNANS (const_tree);
+extern bool HONOR_SNANS (const_rtx);
+
+/* As for HONOR_NANS, but true if the mode can represent infinity and
+   the treatment of infinite values is important.  */
+extern bool HONOR_INFINITIES (machine_mode);
+extern bool HONOR_INFINITIES (const_tree);
+extern bool HONOR_INFINITIES (const_rtx);
+
+/* Like HONOR_NANS, but true if the given mode distinguishes between
+   positive and negative zero, and the sign of zero is important.  */
+extern bool HONOR_SIGNED_ZEROS (machine_mode);
+extern bool HONOR_SIGNED_ZEROS (const_tree);
+extern bool HONOR_SIGNED_ZEROS (const_rtx);
+
+/* Like HONOR_NANS, but true if given mode supports sign-dependent rounding,
+   and the rounding mode is important.  */
+extern bool HONOR_SIGN_DEPENDENT_ROUNDING (machine_mode);
+extern bool HONOR_SIGN_DEPENDENT_ROUNDING (const_tree);
+extern bool HONOR_SIGN_DEPENDENT_ROUNDING (const_rtx);
+
+/* Binary or unary arithmetic on tree_code.  */
+extern bool real_arithmetic (REAL_VALUE_TYPE *, int, const REAL_VALUE_TYPE *,
+			     const REAL_VALUE_TYPE *);
+
+/* Compare reals by tree_code.  */
+extern bool real_compare (int, const REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *);
+
+/* Determine whether a floating-point value X is infinite.  */
+extern bool real_isinf (const REAL_VALUE_TYPE *);
+
+/* Determine whether a floating-point value X is a NaN.  */
+extern bool real_isnan (const REAL_VALUE_TYPE *);
+
+/* Determine whether a floating-point value X is a signaling NaN.  */
+extern bool real_issignaling_nan (const REAL_VALUE_TYPE *);
+
+/* Determine whether a floating-point value X is finite.  */
+extern bool real_isfinite (const REAL_VALUE_TYPE *);
+
+/* Determine whether a floating-point value X is negative.  */
+extern bool real_isneg (const REAL_VALUE_TYPE *);
+
+/* Determine whether a floating-point value X is minus zero.  */
+extern bool real_isnegzero (const REAL_VALUE_TYPE *);
+
+/* Test relationships between reals.  */
+extern bool real_identical (const REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *);
+extern bool real_equal (const REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *);
+extern bool real_less (const REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *);
+
+/* Extend or truncate to a new format.  */
+extern void real_convert (REAL_VALUE_TYPE *, format_helper,
+			  const REAL_VALUE_TYPE *);
+
+/* Return true if truncating to NEW is exact.  */
+extern bool exact_real_truncate (format_helper, const REAL_VALUE_TYPE *);
+
+/* Render R as a decimal floating point constant.  */
+extern void real_to_decimal (char *, const REAL_VALUE_TYPE *, size_t,
+			     size_t, int);
+
+/* Render R as a decimal floating point constant, rounded so as to be
+   parsed back to the same value when interpreted in mode MODE.  */
+extern void real_to_decimal_for_mode (char *, const REAL_VALUE_TYPE *, size_t,
+				      size_t, int, machine_mode);
+
+/* Render R as a hexadecimal floating point constant.  */
+extern void real_to_hexadecimal (char *, const REAL_VALUE_TYPE *,
+				 size_t, size_t, int);
+
+/* Render R as an integer.  */
+extern HOST_WIDE_INT real_to_integer (const REAL_VALUE_TYPE *);
+
+/* Initialize R from a decimal or hexadecimal string.  Return -1 if
+   the value underflows, +1 if overflows, and 0 otherwise.  */
+extern int real_from_string (REAL_VALUE_TYPE *, const char *);
+/* Wrapper to allow different internal representation for decimal floats. */
+extern void real_from_string3 (REAL_VALUE_TYPE *, const char *, format_helper);
+
+extern long real_to_target (long *, const REAL_VALUE_TYPE *, format_helper);
+
+extern void real_from_target (REAL_VALUE_TYPE *, const long *,
+			      format_helper);
+
+extern void real_inf (REAL_VALUE_TYPE *);
+
+extern bool real_nan (REAL_VALUE_TYPE *, const char *, int, format_helper);
+
+extern void real_maxval (REAL_VALUE_TYPE *, int, machine_mode);
+
+extern void real_2expN (REAL_VALUE_TYPE *, int, format_helper);
+
+extern unsigned int real_hash (const REAL_VALUE_TYPE *);
+
+
+/* Target formats defined in real.c.  */
+extern const struct real_format ieee_single_format;
+extern const struct real_format mips_single_format;
+extern const struct real_format motorola_single_format;
+extern const struct real_format spu_single_format;
+extern const struct real_format ieee_double_format;
+extern const struct real_format mips_double_format;
+extern const struct real_format motorola_double_format;
+extern const struct real_format ieee_extended_motorola_format;
+extern const struct real_format ieee_extended_intel_96_format;
+extern const struct real_format ieee_extended_intel_96_round_53_format;
+extern const struct real_format ieee_extended_intel_128_format;
+extern const struct real_format ibm_extended_format;
+extern const struct real_format mips_extended_format;
+extern const struct real_format ieee_quad_format;
+extern const struct real_format mips_quad_format;
+extern const struct real_format vax_f_format;
+extern const struct real_format vax_d_format;
+extern const struct real_format vax_g_format;
+extern const struct real_format real_internal_format;
+extern const struct real_format decimal_single_format;
+extern const struct real_format decimal_double_format;
+extern const struct real_format decimal_quad_format;
+extern const struct real_format ieee_half_format;
+extern const struct real_format arm_half_format;
+
+
+/* ====================================================================== */
+/* Crap.  */
+
+/* Determine whether a floating-point value X is infinite.  */
+#define REAL_VALUE_ISINF(x)		real_isinf (&(x))
+
+/* Determine whether a floating-point value X is a NaN.  */
+#define REAL_VALUE_ISNAN(x)		real_isnan (&(x))
+
+/* Determine whether a floating-point value X is a signaling NaN.  */ 
+#define REAL_VALUE_ISSIGNALING_NAN(x)  real_issignaling_nan (&(x))
+
+/* Determine whether a floating-point value X is negative.  */
+#define REAL_VALUE_NEGATIVE(x)		real_isneg (&(x))
+
+/* Determine whether a floating-point value X is minus zero.  */
+#define REAL_VALUE_MINUS_ZERO(x)	real_isnegzero (&(x))
+
+/* IN is a REAL_VALUE_TYPE.  OUT is an array of longs.  */
+#define REAL_VALUE_TO_TARGET_LONG_DOUBLE(IN, OUT)			\
+  real_to_target (OUT, &(IN),						\
+		  float_mode_for_size (LONG_DOUBLE_TYPE_SIZE).require ())
+
+#define REAL_VALUE_TO_TARGET_DOUBLE(IN, OUT) \
+  real_to_target (OUT, &(IN), float_mode_for_size (64).require ())
+
+/* IN is a REAL_VALUE_TYPE.  OUT is a long.  */
+#define REAL_VALUE_TO_TARGET_SINGLE(IN, OUT) \
+  ((OUT) = real_to_target (NULL, &(IN), float_mode_for_size (32).require ()))
+
+/* Real values to IEEE 754 decimal floats.  */
+
+/* IN is a REAL_VALUE_TYPE.  OUT is an array of longs.  */
+#define REAL_VALUE_TO_TARGET_DECIMAL128(IN, OUT) \
+  real_to_target (OUT, &(IN), decimal_float_mode_for_size (128).require ())
+
+#define REAL_VALUE_TO_TARGET_DECIMAL64(IN, OUT) \
+  real_to_target (OUT, &(IN), decimal_float_mode_for_size (64).require ())
+
+/* IN is a REAL_VALUE_TYPE.  OUT is a long.  */
+#define REAL_VALUE_TO_TARGET_DECIMAL32(IN, OUT) \
+  ((OUT) = real_to_target (NULL, &(IN), \
+			   decimal_float_mode_for_size (32).require ()))
+
+extern REAL_VALUE_TYPE real_value_truncate (format_helper, REAL_VALUE_TYPE);
+
+extern REAL_VALUE_TYPE real_value_negate (const REAL_VALUE_TYPE *);
+extern REAL_VALUE_TYPE real_value_abs (const REAL_VALUE_TYPE *);
+
+extern int significand_size (format_helper);
+
+extern REAL_VALUE_TYPE real_from_string2 (const char *, format_helper);
+
+#define REAL_VALUE_ATOF(s, m) \
+  real_from_string2 (s, m)
+
+#define CONST_DOUBLE_ATOF(s, m) \
+  const_double_from_real_value (real_from_string2 (s, m), m)
+
+#define REAL_VALUE_FIX(r) \
+  real_to_integer (&(r))
+
+/* ??? Not quite right.  */
+#define REAL_VALUE_UNSIGNED_FIX(r) \
+  real_to_integer (&(r))
+
+/* ??? These were added for Paranoia support.  */
+
+/* Return floor log2(R).  */
+extern int real_exponent (const REAL_VALUE_TYPE *);
+
+/* R = A * 2**EXP.  */
+extern void real_ldexp (REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *, int);
+
+/* **** End of software floating point emulator interface macros **** */
+
+/* Constant real values 0, 1, 2, -1 and 0.5.  */
+
+extern REAL_VALUE_TYPE dconst0;
+extern REAL_VALUE_TYPE dconst1;
+extern REAL_VALUE_TYPE dconst2;
+extern REAL_VALUE_TYPE dconstm1;
+extern REAL_VALUE_TYPE dconsthalf;
+
+#define dconst_e() (*dconst_e_ptr ())
+#define dconst_third() (*dconst_third_ptr ())
+#define dconst_quarter() (*dconst_quarter_ptr ())
+#define dconst_sixth() (*dconst_sixth_ptr ())
+#define dconst_ninth() (*dconst_ninth_ptr ())
+#define dconst_sqrt2() (*dconst_sqrt2_ptr ())
+
+/* Function to return the real value special constant 'e'.  */
+extern const REAL_VALUE_TYPE * dconst_e_ptr (void);
+
+/* Returns a cached REAL_VALUE_TYPE corresponding to 1/n, for various n.  */
+extern const REAL_VALUE_TYPE *dconst_third_ptr (void);
+extern const REAL_VALUE_TYPE *dconst_quarter_ptr (void);
+extern const REAL_VALUE_TYPE *dconst_sixth_ptr (void);
+extern const REAL_VALUE_TYPE *dconst_ninth_ptr (void);
+
+/* Returns the special REAL_VALUE_TYPE corresponding to sqrt(2).  */
+extern const REAL_VALUE_TYPE * dconst_sqrt2_ptr (void);
+
+/* Function to return a real value (not a tree node)
+   from a given integer constant.  */
+REAL_VALUE_TYPE real_value_from_int_cst (const_tree, const_tree);
+
+/* Return a CONST_DOUBLE with value R and mode M.  */
+extern rtx const_double_from_real_value (REAL_VALUE_TYPE, machine_mode);
+
+/* Replace R by 1/R in the given format, if the result is exact.  */
+extern bool exact_real_inverse (format_helper, REAL_VALUE_TYPE *);
+
+/* Return true if arithmetic on values in IMODE that were promoted
+   from values in TMODE is equivalent to direct arithmetic on values
+   in TMODE.  */
+bool real_can_shorten_arithmetic (machine_mode, machine_mode);
+
+/* In tree.c: wrap up a REAL_VALUE_TYPE in a tree node.  */
+extern tree build_real (tree, REAL_VALUE_TYPE);
+
+/* Likewise, but first truncate the value to the type.  */
+extern tree build_real_truncate (tree, REAL_VALUE_TYPE);
+
+/* Calculate R as X raised to the integer exponent N in format FMT.  */
+extern bool real_powi (REAL_VALUE_TYPE *, format_helper,
+		       const REAL_VALUE_TYPE *, HOST_WIDE_INT);
+
+/* Standard round to integer value functions.  */
+extern void real_trunc (REAL_VALUE_TYPE *, format_helper,
+			const REAL_VALUE_TYPE *);
+extern void real_floor (REAL_VALUE_TYPE *, format_helper,
+			const REAL_VALUE_TYPE *);
+extern void real_ceil (REAL_VALUE_TYPE *, format_helper,
+		       const REAL_VALUE_TYPE *);
+extern void real_round (REAL_VALUE_TYPE *, format_helper,
+			const REAL_VALUE_TYPE *);
+
+/* Set the sign of R to the sign of X.  */
+extern void real_copysign (REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *);
+
+/* Check whether the real constant value given is an integer.  */
+extern bool real_isinteger (const REAL_VALUE_TYPE *, format_helper);
+extern bool real_isinteger (const REAL_VALUE_TYPE *, HOST_WIDE_INT *);
+
+/* Calculate nextafter (X, Y) in format FMT.  */
+extern bool real_nextafter (REAL_VALUE_TYPE *, format_helper,
+			    const REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *);
+
+/* Write into BUF the maximum representable finite floating-point
+   number, (1 - b**-p) * b**emax for a given FP format FMT as a hex
+   float string.  BUF must be large enough to contain the result.  */
+extern void get_max_float (const struct real_format *, char *, size_t);
+
+#ifndef GENERATOR_FILE
+/* real related routines.  */
+extern wide_int real_to_integer (const REAL_VALUE_TYPE *, bool *, int);
+extern void real_from_integer (REAL_VALUE_TYPE *, format_helper,
+			       const wide_int_ref &, signop);
+#endif
+
+/* Fills r with the largest value such that 1 + r*r won't overflow.
+   This is used in both sin (atan (x)) and cos (atan(x)) optimizations. */
+extern void build_sinatan_real (REAL_VALUE_TYPE *, tree); 
+
+#endif /* ! GCC_REAL_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/realmpfr.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/realmpfr.h
new file mode 100644
index 0000000..bfea86d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/realmpfr.h
@@ -0,0 +1,41 @@
+/* Definitions of floating-point conversion from compiler
+   internal format to MPFR.
+   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it under
+   the terms of the GNU General Public License as published by the Free
+   Software Foundation; either version 3, or (at your option) any later
+   version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or
+   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+   for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_REALGMP_H
+#define GCC_REALGMP_H
+
+#include <mpfr.h>
+#include <mpc.h>
+
+/* Convert between MPFR and REAL_VALUE_TYPE.  The caller is
+   responsible for initializing and clearing the MPFR parameter.  */
+
+extern void real_from_mpfr (REAL_VALUE_TYPE *, mpfr_srcptr, tree, mp_rnd_t);
+extern void real_from_mpfr (REAL_VALUE_TYPE *, mpfr_srcptr,
+			    const real_format *, mp_rnd_t);
+extern void mpfr_from_real (mpfr_ptr, const REAL_VALUE_TYPE *, mp_rnd_t);
+
+#if (GCC_VERSION >= 3000)
+  /* For compatibility with mpfr 2.4 and earlier, we want to only use
+     GMP_RND*.  */
+  #pragma GCC poison MPFR_RNDN MPFR_RNDZ MPFR_RNDU MPFR_RNDD
+#endif
+
+#endif /* ! GCC_REALGMP_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/recog.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/recog.h
new file mode 100644
index 0000000..75cbbdc
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/recog.h
@@ -0,0 +1,415 @@
+/* Declarations for interface to insn recognizer and insn-output.c.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_RECOG_H
+#define GCC_RECOG_H
+
+/* Random number that should be large enough for all purposes.  Also define
+   a type that has at least MAX_RECOG_ALTERNATIVES + 1 bits, with the extra
+   bit giving an invalid value that can be used to mean "uninitialized".  */
+#define MAX_RECOG_ALTERNATIVES 35
+typedef uint64_t alternative_mask;  /* Keep in sync with genattrtab.c.  */
+
+/* A mask of all alternatives.  */
+#define ALL_ALTERNATIVES ((alternative_mask) -1)
+
+/* A mask containing just alternative X.  */
+#define ALTERNATIVE_BIT(X) ((alternative_mask) 1 << (X))
+
+/* Types of operands.  */
+enum op_type {
+  OP_IN,
+  OP_OUT,
+  OP_INOUT
+};
+
+struct operand_alternative
+{
+  /* Pointer to the beginning of the constraint string for this alternative,
+     for easier access by alternative number.  */
+  const char *constraint;
+
+  /* The register class valid for this alternative (possibly NO_REGS).  */
+  ENUM_BITFIELD (reg_class) cl : 16;
+
+  /* "Badness" of this alternative, computed from number of '?' and '!'
+     characters in the constraint string.  */
+  unsigned int reject : 16;
+
+  /* -1 if no matching constraint was found, or an operand number.  */
+  int matches : 8;
+  /* The same information, but reversed: -1 if this operand is not
+     matched by any other, or the operand number of the operand that
+     matches this one.  */
+  int matched : 8;
+
+  /* Nonzero if '&' was found in the constraint string.  */
+  unsigned int earlyclobber : 1;
+  /* Nonzero if TARGET_MEM_CONSTRAINT was found in the constraint
+     string.  */
+  unsigned int memory_ok : 1;
+  /* Nonzero if 'p' was found in the constraint string.  */
+  unsigned int is_address : 1;
+  /* Nonzero if 'X' was found in the constraint string, or if the constraint
+     string for this alternative was empty.  */
+  unsigned int anything_ok : 1;
+
+  unsigned int unused : 12;
+};
+
+/* Return the class for operand I of alternative ALT, taking matching
+   constraints into account.  */
+
+static inline enum reg_class
+alternative_class (const operand_alternative *alt, int i)
+{
+  return alt[i].matches >= 0 ? alt[alt[i].matches].cl : alt[i].cl;
+}
+
+extern void init_recog (void);
+extern void init_recog_no_volatile (void);
+extern int check_asm_operands (rtx);
+extern int asm_operand_ok (rtx, const char *, const char **);
+extern bool validate_change (rtx, rtx *, rtx, bool);
+extern bool validate_unshare_change (rtx, rtx *, rtx, bool);
+extern bool canonicalize_change_group (rtx_insn *insn, rtx x);
+extern int insn_invalid_p (rtx_insn *, bool);
+extern int verify_changes (int);
+extern void confirm_change_group (void);
+extern int apply_change_group (void);
+extern int num_validated_changes (void);
+extern void cancel_changes (int);
+extern int constrain_operands (int, alternative_mask);
+extern int constrain_operands_cached (rtx_insn *, int);
+extern int memory_address_addr_space_p (machine_mode, rtx, addr_space_t);
+#define memory_address_p(mode,addr) \
+	memory_address_addr_space_p ((mode), (addr), ADDR_SPACE_GENERIC)
+extern int strict_memory_address_addr_space_p (machine_mode, rtx,
+					       addr_space_t);
+#define strict_memory_address_p(mode,addr) \
+	strict_memory_address_addr_space_p ((mode), (addr), ADDR_SPACE_GENERIC)
+extern int validate_replace_rtx_subexp (rtx, rtx, rtx_insn *, rtx *);
+extern int validate_replace_rtx (rtx, rtx, rtx_insn *);
+extern int validate_replace_rtx_part (rtx, rtx, rtx *, rtx_insn *);
+extern int validate_replace_rtx_part_nosimplify (rtx, rtx, rtx *, rtx_insn *);
+extern void validate_replace_rtx_group (rtx, rtx, rtx_insn *);
+extern void validate_replace_src_group (rtx, rtx, rtx_insn *);
+extern bool validate_simplify_insn (rtx_insn *insn);
+extern int num_changes_pending (void);
+extern int next_insn_tests_no_inequality (rtx_insn *);
+extern bool reg_fits_class_p (const_rtx, reg_class_t, int, machine_mode);
+
+extern int offsettable_memref_p (rtx);
+extern int offsettable_nonstrict_memref_p (rtx);
+extern int offsettable_address_addr_space_p (int, machine_mode, rtx,
+					     addr_space_t);
+#define offsettable_address_p(strict,mode,addr) \
+	offsettable_address_addr_space_p ((strict), (mode), (addr), \
+					  ADDR_SPACE_GENERIC)
+extern bool mode_dependent_address_p (rtx, addr_space_t);
+
+extern int recog (rtx, rtx_insn *, int *);
+#ifndef GENERATOR_FILE
+static inline int recog_memoized (rtx_insn *insn);
+#endif
+extern void add_clobbers (rtx, int);
+extern int added_clobbers_hard_reg_p (int);
+extern void insn_extract (rtx_insn *);
+extern void extract_insn (rtx_insn *);
+extern void extract_constrain_insn (rtx_insn *insn);
+extern void extract_constrain_insn_cached (rtx_insn *);
+extern void extract_insn_cached (rtx_insn *);
+extern void preprocess_constraints (int, int, const char **,
+				    operand_alternative *, rtx **);
+extern const operand_alternative *preprocess_insn_constraints (unsigned int);
+extern void preprocess_constraints (rtx_insn *);
+extern rtx_insn *peep2_next_insn (int);
+extern int peep2_regno_dead_p (int, int);
+extern int peep2_reg_dead_p (int, rtx);
+#ifdef CLEAR_HARD_REG_SET
+extern rtx peep2_find_free_register (int, int, const char *,
+				     machine_mode, HARD_REG_SET *);
+#endif
+extern rtx_insn *peephole2_insns (rtx, rtx_insn *, int *);
+
+extern int store_data_bypass_p (rtx_insn *, rtx_insn *);
+extern int if_test_bypass_p (rtx_insn *, rtx_insn *);
+
+#ifndef GENERATOR_FILE
+/* Try recognizing the instruction INSN,
+   and return the code number that results.
+   Remember the code so that repeated calls do not
+   need to spend the time for actual rerecognition.
+
+   This function is the normal interface to instruction recognition.
+   The automatically-generated function `recog' is normally called
+   through this one.  */
+
+static inline int
+recog_memoized (rtx_insn *insn)
+{
+  if (INSN_CODE (insn) < 0)
+    INSN_CODE (insn) = recog (PATTERN (insn), insn, 0);
+  return INSN_CODE (insn);
+}
+#endif
+
+/* Skip chars until the next ',' or the end of the string.  This is
+   useful to skip alternatives in a constraint string.  */
+static inline const char *
+skip_alternative (const char *p)
+{
+  const char *r = p;
+  while (*r != '\0' && *r != ',')
+    r++;
+  if (*r == ',')
+    r++;
+  return r;
+}
+
+/* Nonzero means volatile operands are recognized.  */
+extern int volatile_ok;
+
+/* Set by constrain_operands to the number of the alternative that
+   matched.  */
+extern int which_alternative;
+
+/* The following vectors hold the results from insn_extract.  */
+
+struct recog_data_d
+{
+  /* It is very tempting to make the 5 operand related arrays into a
+     structure and index on that.  However, to be source compatible
+     with all of the existing md file insn constraints and output
+     templates, we need `operand' as a flat array.  Without that
+     member, making an array for the rest seems pointless.  */
+
+  /* Gives value of operand N.  */
+  rtx operand[MAX_RECOG_OPERANDS];
+
+  /* Gives location where operand N was found.  */
+  rtx *operand_loc[MAX_RECOG_OPERANDS];
+
+  /* Gives the constraint string for operand N.  */
+  const char *constraints[MAX_RECOG_OPERANDS];
+
+  /* Nonzero if operand N is a match_operator or a match_parallel.  */
+  char is_operator[MAX_RECOG_OPERANDS];
+
+  /* Gives the mode of operand N.  */
+  machine_mode operand_mode[MAX_RECOG_OPERANDS];
+
+  /* Gives the type (in, out, inout) for operand N.  */
+  enum op_type operand_type[MAX_RECOG_OPERANDS];
+
+  /* Gives location where the Nth duplicate-appearance of an operand
+     was found.  This is something that matched MATCH_DUP.  */
+  rtx *dup_loc[MAX_DUP_OPERANDS];
+
+  /* Gives the operand number that was duplicated in the Nth
+     duplicate-appearance of an operand.  */
+  char dup_num[MAX_DUP_OPERANDS];
+
+  /* ??? Note that these are `char' instead of `unsigned char' to (try to)
+     avoid certain lossage from K&R C, wherein `unsigned char' default
+     promotes to `unsigned int' instead of `int' as in ISO C.  As of 1999,
+     the most common places to bootstrap from K&R C are SunOS and HPUX,
+     both of which have signed characters by default.  The only other
+     supported natives that have both K&R C and unsigned characters are
+     ROMP and Irix 3, and neither have been seen for a while, but do
+     continue to consider unsignedness when performing arithmetic inside
+     a comparison.  */
+
+  /* The number of operands of the insn.  */
+  char n_operands;
+
+  /* The number of MATCH_DUPs in the insn.  */
+  char n_dups;
+
+  /* The number of alternatives in the constraints for the insn.  */
+  char n_alternatives;
+
+  /* True if insn is ASM_OPERANDS.  */
+  bool is_asm;
+
+  /* In case we are caching, hold insn data was generated for.  */
+  rtx_insn *insn;
+};
+
+extern struct recog_data_d recog_data;
+
+extern const operand_alternative *recog_op_alt;
+
+/* Return a pointer to an array in which index OP describes the constraints
+   on operand OP of the current instruction alternative (which_alternative).
+   Only valid after calling preprocess_constraints and constrain_operands.  */
+
+inline static const operand_alternative *
+which_op_alt ()
+{
+  gcc_checking_assert (IN_RANGE (which_alternative, 0,
+				 recog_data.n_alternatives - 1));
+  return &recog_op_alt[which_alternative * recog_data.n_operands];
+}
+
+/* A table defined in insn-output.c that give information about
+   each insn-code value.  */
+
+typedef int (*insn_operand_predicate_fn) (rtx, machine_mode);
+typedef const char * (*insn_output_fn) (rtx *, rtx_insn *);
+
+struct insn_gen_fn
+{
+  typedef rtx_insn * (*f0) (void);
+  typedef rtx_insn * (*f1) (rtx);
+  typedef rtx_insn * (*f2) (rtx, rtx);
+  typedef rtx_insn * (*f3) (rtx, rtx, rtx);
+  typedef rtx_insn * (*f4) (rtx, rtx, rtx, rtx);
+  typedef rtx_insn * (*f5) (rtx, rtx, rtx, rtx, rtx);
+  typedef rtx_insn * (*f6) (rtx, rtx, rtx, rtx, rtx, rtx);
+  typedef rtx_insn * (*f7) (rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+  typedef rtx_insn * (*f8) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+  typedef rtx_insn * (*f9) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+  typedef rtx_insn * (*f10) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+  typedef rtx_insn * (*f11) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+  typedef rtx_insn * (*f12) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+  typedef rtx_insn * (*f13) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+  typedef rtx_insn * (*f14) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+  typedef rtx_insn * (*f15) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+  typedef rtx_insn * (*f16) (rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx, rtx);
+
+  typedef void (*stored_funcptr) (void);
+
+  rtx_insn * operator () (void) const { return ((f0)func) (); }
+  rtx_insn * operator () (rtx a0) const { return ((f1)func) (a0); }
+  rtx_insn * operator () (rtx a0, rtx a1) const { return ((f2)func) (a0, a1); }
+  rtx_insn * operator () (rtx a0, rtx a1, rtx a2) const { return ((f3)func) (a0, a1, a2); }
+  rtx_insn * operator () (rtx a0, rtx a1, rtx a2, rtx a3) const { return ((f4)func) (a0, a1, a2, a3); }
+  rtx_insn * operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4) const { return ((f5)func) (a0, a1, a2, a3, a4); }
+  rtx_insn * operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5) const { return ((f6)func) (a0, a1, a2, a3, a4, a5); }
+  rtx_insn * operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6) const { return ((f7)func) (a0, a1, a2, a3, a4, a5, a6); }
+  rtx_insn * operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, rtx a7) const { return ((f8)func) (a0, a1, a2, a3, a4, a5, a6, a7); }
+  rtx_insn * operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, rtx a7, rtx a8) const { return ((f9)func) (a0, a1, a2, a3, a4, a5, a6, a7, a8); }
+  rtx_insn * operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, rtx a7, rtx a8, rtx a9) const { return ((f10)func) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9); }
+  rtx_insn * operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, rtx a7, rtx a8, rtx a9, rtx a10) const { return ((f11)func) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); }
+  rtx_insn * operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, rtx a7, rtx a8, rtx a9, rtx a10, rtx a11) const { return ((f12)func) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11); }
+  rtx_insn * operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, rtx a7, rtx a8, rtx a9, rtx a10, rtx a11, rtx a12) const { return ((f13)func) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); }
+  rtx_insn * operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, rtx a7, rtx a8, rtx a9, rtx a10, rtx a11, rtx a12, rtx a13) const { return ((f14)func) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13); }
+  rtx_insn * operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, rtx a7, rtx a8, rtx a9, rtx a10, rtx a11, rtx a12, rtx a13, rtx a14) const { return ((f15)func) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14); }
+  rtx_insn * operator () (rtx a0, rtx a1, rtx a2, rtx a3, rtx a4, rtx a5, rtx a6, rtx a7, rtx a8, rtx a9, rtx a10, rtx a11, rtx a12, rtx a13, rtx a14, rtx a15) const { return ((f16)func) (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15); }
+
+  // This is for compatibility of code that invokes functions like
+  //   (*funcptr) (arg)
+  insn_gen_fn operator * (void) const { return *this; }
+
+  // The wrapped function pointer must be public and there must not be any
+  // constructors.  Otherwise the insn_data_d struct initializers generated
+  // by genoutput.c will result in static initializer functions, which defeats
+  // the purpose of the generated insn_data_d array.
+  stored_funcptr func;
+};
+
+struct insn_operand_data
+{
+  const insn_operand_predicate_fn predicate;
+
+  const char *const constraint;
+
+  ENUM_BITFIELD(machine_mode) const mode : 16;
+
+  const char strict_low;
+
+  const char is_operator;
+
+  const char eliminable;
+
+  const char allows_mem;
+};
+
+/* Legal values for insn_data.output_format.  Indicate what type of data
+   is stored in insn_data.output.  */
+#define INSN_OUTPUT_FORMAT_NONE		0	/* abort */
+#define INSN_OUTPUT_FORMAT_SINGLE	1	/* const char * */
+#define INSN_OUTPUT_FORMAT_MULTI	2	/* const char * const * */
+#define INSN_OUTPUT_FORMAT_FUNCTION	3	/* const char * (*)(...) */
+
+struct insn_data_d
+{
+  const char *const name;
+#if HAVE_DESIGNATED_UNION_INITIALIZERS
+  union {
+    const char *single;
+    const char *const *multi;
+    insn_output_fn function;
+  } output;
+#else
+  struct {
+    const char *single;
+    const char *const *multi;
+    insn_output_fn function;
+  } output;
+#endif
+  const insn_gen_fn genfun;
+  const struct insn_operand_data *const operand;
+
+  const char n_generator_args;
+  const char n_operands;
+  const char n_dups;
+  const char n_alternatives;
+  const char output_format;
+};
+
+extern const struct insn_data_d insn_data[];
+extern int peep2_current_count;
+
+#ifndef GENERATOR_FILE
+#include "insn-codes.h"
+
+/* An enum of boolean attributes that may only depend on the current
+   subtarget, not on things like operands or compiler phase.  */
+enum bool_attr {
+  BA_ENABLED,
+  BA_PREFERRED_FOR_SPEED,
+  BA_PREFERRED_FOR_SIZE,
+  BA_LAST = BA_PREFERRED_FOR_SIZE
+};
+
+/* Target-dependent globals.  */
+struct target_recog {
+  bool x_initialized;
+  alternative_mask x_bool_attr_masks[NUM_INSN_CODES][BA_LAST + 1];
+  operand_alternative *x_op_alt[NUM_INSN_CODES];
+};
+
+extern struct target_recog default_target_recog;
+#if SWITCHABLE_TARGET
+extern struct target_recog *this_target_recog;
+#else
+#define this_target_recog (&default_target_recog)
+#endif
+
+alternative_mask get_enabled_alternatives (rtx_insn *);
+alternative_mask get_preferred_alternatives (rtx_insn *);
+alternative_mask get_preferred_alternatives (rtx_insn *, basic_block);
+bool check_bool_attrs (rtx_insn *);
+
+void recog_init ();
+#endif
+
+#endif /* GCC_RECOG_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/reg-notes.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/reg-notes.def
new file mode 100644
index 0000000..9acbd48
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/reg-notes.def
@@ -0,0 +1,244 @@
+/* Register note definitions.
+   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* This file defines all the codes that may appear on individual
+   EXPR_LIST, INSN_LIST and INT_LIST rtxes in the REG_NOTES chain of an insn.
+   The codes are stored in the mode field of the rtx.  Source files
+   define DEF_REG_NOTE appropriately before including this file.
+
+   CFA related notes meant for RTX_FRAME_RELATED_P instructions
+   should be declared with REG_CFA_NOTE macro instead of REG_NOTE.  */
+
+/* Shorthand.  */
+#define REG_NOTE(NAME) DEF_REG_NOTE (REG_##NAME)
+#ifndef REG_CFA_NOTE
+# define REG_CFA_NOTE(NAME) REG_NOTE (NAME)
+#endif
+
+/* REG_DEP_TRUE is used in scheduler dependencies lists to represent a
+   read-after-write dependency (i.e. a true data dependency).  This is
+   here, not grouped with REG_DEP_ANTI and REG_DEP_OUTPUT, because some
+   passes use a literal 0 for it.  */
+REG_NOTE (DEP_TRUE)
+
+/* The value in REG dies in this insn (i.e., it is not needed past
+   this insn).  If REG is set in this insn, the REG_DEAD note may,
+   but need not, be omitted.  */
+REG_NOTE (DEAD)
+
+/* The REG is autoincremented or autodecremented in this insn.  */
+REG_NOTE (INC)
+
+/* Describes the insn as a whole; it says that the insn sets a
+   register to a constant value or to be equivalent to a memory
+   address.  If the register is spilled to the stack then the constant
+   value should be substituted for it.  The contents of the REG_EQUIV
+   is the constant value or memory address, which may be different
+   from the source of the SET although it has the same value.  A
+   REG_EQUIV note may also appear on an insn which copies a register
+   parameter to a pseudo-register, if there is a memory address which
+   could be used to hold that pseudo-register throughout the function.  */
+REG_NOTE (EQUIV)
+
+/* Like REG_EQUIV except that the destination is only momentarily
+   equal to the specified rtx.  Therefore, it cannot be used for
+   substitution; but it can be used for cse.  */
+REG_NOTE (EQUAL)
+
+/* The register is always nonnegative during the containing loop.
+   This is used in branches so that decrement and branch instructions
+   terminating on zero can be matched.  There must be an insn pattern
+   in the md file named `decrement_and_branch_until_zero' or else this
+   will never be added to any instructions.  */
+REG_NOTE (NONNEG)
+
+/* Identifies a register set in this insn and never used.  */
+REG_NOTE (UNUSED)
+
+/* REG_CC_SETTER and REG_CC_USER link a pair of insns that set and use
+   CC0, respectively.  Normally, these are required to be consecutive
+   insns, but we permit putting a cc0-setting insn in the delay slot
+   of a branch as long as only one copy of the insn exists.  In that
+   case, these notes point from one to the other to allow code
+   generation to determine what any require information and to
+   properly update CC_STATUS.  These notes are INSN_LISTs.  */
+REG_NOTE (CC_SETTER)
+REG_NOTE (CC_USER)
+
+/* Points to a CODE_LABEL.  Used by JUMP_INSNs to say that the CODE_LABEL
+   contained in the REG_LABEL_TARGET note is a possible jump target of
+   this insn.  This note is an INSN_LIST.  */
+REG_NOTE (LABEL_TARGET)
+
+/* Points to a CODE_LABEL.  Used by any insn to say that the CODE_LABEL
+   contained in the REG_LABEL_OPERAND note is used by the insn, but as an
+   operand, not as a jump target (though it may indirectly be a jump
+   target for a later jump insn).  This note is an INSN_LIST.  */
+REG_NOTE (LABEL_OPERAND)
+
+/* REG_DEP_OUTPUT and REG_DEP_ANTI are used in scheduler dependencies lists
+   to represent write-after-write and write-after-read dependencies
+   respectively.  */
+REG_NOTE (DEP_OUTPUT)
+REG_NOTE (DEP_ANTI)
+REG_NOTE (DEP_CONTROL)
+
+/* REG_BR_PROB is attached to JUMP_INSNs.  It has an
+   integer value (in an INT_LIST).  For jumps, it is the probability
+   that this is a taken branch. The integer represents a value of
+   profile_probability type. Use to_reg_br_prob_note and from_reg_br_prob_note
+   to extract the actual value.  */
+REG_NOTE (BR_PROB)
+
+/* Attached to a call insn; indicates that the call is malloc-like and
+   that the pointer returned cannot alias anything else.  */
+REG_NOTE (NOALIAS)
+
+/* REG_BR_PRED is attached to JUMP_INSNs.  It contains
+   CONCAT of two integer value.  First specifies the branch predictor
+   that added the note, second specifies the predicted hitrate of
+   branch in a fixed point arithmetic based on REG_BR_PROB_BASE.  */
+REG_NOTE (BR_PRED)
+
+/* Attached to insns that are RTX_FRAME_RELATED_P, but are too complex
+   for DWARF to interpret what they imply.  The attached rtx is used
+   instead of intuition.  */
+REG_CFA_NOTE (FRAME_RELATED_EXPR)
+
+/* Attached to insns that are RTX_FRAME_RELATED_P, but are too complex
+   for FRAME_RELATED_EXPR intuition.  The insn's first pattern must be
+   a SET, and the destination must be the CFA register.  The attached
+   rtx is an expression that defines the CFA.  In the simplest case, the
+   rtx could be just the stack_pointer_rtx; more common would be a PLUS
+   with a base register and a constant offset.  In the most complicated
+   cases, this will result in a DW_CFA_def_cfa_expression with the rtx
+   expression rendered in a dwarf location expression.  */
+REG_CFA_NOTE (CFA_DEF_CFA)
+
+/* Attached to insns that are RTX_FRAME_RELATED_P, but are too complex
+   for FRAME_RELATED_EXPR intuition.  This note adjusts the expression
+   from which the CFA is computed.  The attached rtx defines a new CFA
+   expression, relative to the old CFA expression.  This rtx must be of
+   the form (SET new-cfa-reg (PLUS old-cfa-reg const_int)).  If the note
+   rtx is NULL, we use the first SET of the insn.  */
+REG_CFA_NOTE (CFA_ADJUST_CFA)
+
+/* Similar to FRAME_RELATED_EXPR, with the additional information that
+   this is a save to memory, i.e. will result in DW_CFA_offset or the
+   like.  The pattern or the insn should be a simple store relative to
+   the CFA.  */
+REG_CFA_NOTE (CFA_OFFSET)
+
+/* Similar to FRAME_RELATED_EXPR, with the additional information that this
+   is a save to a register, i.e. will result in DW_CFA_register.  The insn
+   or the pattern should be simple reg-reg move.  */
+REG_CFA_NOTE (CFA_REGISTER)
+
+/* Attached to insns that are RTX_FRAME_RELATED_P, but are too complex
+   for FRAME_RELATED_EXPR intuition.  This is a save to memory, i.e. will
+   result in a DW_CFA_expression.  The pattern or the insn should be a
+   store of a register to an arbitrary (non-validated) memory address.  */
+REG_CFA_NOTE (CFA_EXPRESSION)
+
+/* Attached to insns that are RTX_FRAME_RELATED_P, but are too complex
+   for FRAME_RELATED_EXPR intuition.  The DWARF expression computes the value of
+   the given register.  */
+REG_CFA_NOTE (CFA_VAL_EXPRESSION)
+
+/* Attached to insns that are RTX_FRAME_RELATED_P, with the information
+   that this is a restore operation, i.e. will result in DW_CFA_restore
+   or the like.  Either the attached rtx, or the destination of the insn's
+   first pattern is the register to be restored.  */
+REG_CFA_NOTE (CFA_RESTORE)
+
+/* Attached to insns that are RTX_FRAME_RELATED_P, marks insn that sets
+   vDRAP from DRAP.  If vDRAP is a register, vdrap_reg is initalized
+   to the argument, if it is a MEM, it is ignored.  */
+REG_CFA_NOTE (CFA_SET_VDRAP)
+
+/* Attached to insns that are RTX_FRAME_RELATED_P, indicating a window
+   save operation, i.e. will result in a DW_CFA_GNU_window_save.
+   The argument is ignored.  */
+REG_CFA_NOTE (CFA_WINDOW_SAVE)
+
+/* Attached to insns that are RTX_FRAME_RELATED_P, marks the insn as
+   requiring that all queued information should be flushed *before* insn,
+   regardless of what is visible in the rtl.  The argument is ignored.
+   This is normally used for a call instruction which is not exposed to
+   the rest of the compiler as a CALL_INSN.  */
+REG_CFA_NOTE (CFA_FLUSH_QUEUE)
+
+/* Attached to insns that are RTX_FRAME_RELATED_P, toggling the mangling status
+   of return address.  Currently it's only used by AArch64.  The argument is
+   ignored.  */
+REG_CFA_NOTE (CFA_TOGGLE_RA_MANGLE)
+
+/* Indicates what exception region an INSN belongs in.  This is used
+   to indicate what region to which a call may throw.  REGION 0
+   indicates that a call cannot throw at all.  REGION -1 indicates
+   that it cannot throw, nor will it execute a non-local goto.  */
+REG_NOTE (EH_REGION)
+
+/* Used by haifa-sched to save NOTE_INSN notes across scheduling.  */
+REG_NOTE (SAVE_NOTE)
+
+/* Indicates that a call does not return.  */
+REG_NOTE (NORETURN)
+
+/* Indicates that an indirect jump is a non-local goto instead of a
+   computed goto.  */
+REG_NOTE (NON_LOCAL_GOTO)
+
+/* This kind of note is generated at each to `setjmp', and similar
+   functions that can return twice.  */
+REG_NOTE (SETJMP)
+
+/* This kind of note is generated at each transactional memory
+   builtin, to indicate we need to generate transaction restart
+   edges for this insn.  */
+REG_NOTE (TM)
+
+/* Indicates the cumulative offset of the stack pointer accounting
+   for pushed arguments.  This will only be generated when
+   ACCUMULATE_OUTGOING_ARGS is false.  */
+REG_NOTE (ARGS_SIZE)
+
+/* Used for communication between IRA and caller-save.c, indicates
+   that the return value of a call can be used to reinitialize a
+   pseudo reg.  */
+REG_NOTE (RETURNED)
+
+/* Indicates the instruction is a stack check probe that should not
+   be combined with other stack adjustments.  */
+REG_NOTE (STACK_CHECK)
+
+/* Used to mark a call with the function decl called by the call.
+   The decl might not be available in the call due to splitting of the call
+   insn.  This note is a SYMBOL_REF.  */
+REG_NOTE (CALL_DECL)
+
+/* Indicate that a call should not be verified for control-flow consistency.
+   The target address of the call is assumed as a valid address and no check
+   to validate a branch to the target address is needed.  The call is marked
+   when a called function has a 'notrack' attribute.  This note is used by the
+   compiler when the option -fcf-protection=branch is specified.  */
+REG_NOTE (CALL_NOCF_CHECK)
+
+/* The values passed to callee, for debuginfo purposes.  */
+REG_NOTE (CALL_ARG_LOCATION)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/regcprop.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/regcprop.h
new file mode 100644
index 0000000..96992d1
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/regcprop.h
@@ -0,0 +1,25 @@
+/* Copy propagation on hard registers.
+   Copyright (C) 1989-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_REGCPROP_H
+#define GCC_REGCPROP_H
+
+extern void copyprop_hardreg_forward_bb_without_debug_insn (basic_block bb);
+
+#endif  /* GCC_REGCPROP_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/regrename.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/regrename.h
new file mode 100644
index 0000000..37f5e39
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/regrename.h
@@ -0,0 +1,107 @@
+/* This file contains definitions for the register renamer.
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_REGRENAME_H
+#define GCC_REGRENAME_H
+
+/* We keep linked lists of DU_HEAD structures, each of which describes
+   a chain of occurrences of a reg.  */
+struct du_head
+{
+  /* The next chain.  */
+  struct du_head *next_chain;
+  /* The first and last elements of this chain.  */
+  struct du_chain *first, *last;
+  /* The chain that this chain is tied to.  */
+  struct du_head *tied_chain;
+  /* Describes the register being tracked.  */
+  unsigned regno;
+  int nregs;
+
+  /* A unique id to be used as an index into the conflicts bitmaps.  */
+  unsigned id;
+  /* A bitmap to record conflicts with other chains.  */
+  bitmap_head conflicts;
+  /* Conflicts with untracked hard registers.  */
+  HARD_REG_SET hard_conflicts;
+
+  /* Nonzero if the chain crosses a call.  */
+  unsigned int need_caller_save_reg:1;
+  /* Nonzero if the register is used in a way that prevents renaming,
+     such as the SET_DEST of a CALL_INSN or an asm operand that used
+     to be a hard register.  */
+  unsigned int cannot_rename:1;
+  /* Nonzero if the chain has already been renamed.  */
+  unsigned int renamed:1;
+
+  /* Fields for use by target code.  */
+  unsigned int target_data_1;
+  unsigned int target_data_2;
+};
+
+typedef struct du_head *du_head_p;
+
+/* This struct describes a single occurrence of a register.  */
+struct du_chain
+{
+  /* Links to the next occurrence of the register.  */
+  struct du_chain *next_use;
+
+  /* The insn where the register appears.  */
+  rtx_insn *insn;
+  /* The location inside the insn.  */
+  rtx *loc;
+  /* The register class required by the insn at this location.  */
+  ENUM_BITFIELD(reg_class) cl : 16;
+};
+
+/* This struct describes data gathered during regrename_analyze about
+   a single operand of an insn.  */
+struct operand_rr_info
+{
+  /* The number of chains recorded for this operand.  */
+  short n_chains;
+  bool failed;
+  /* Holds either the chain for the operand itself, or for the registers in
+     a memory operand.  */
+  struct du_chain *chains[MAX_REGS_PER_ADDRESS];
+  struct du_head *heads[MAX_REGS_PER_ADDRESS];
+};
+
+/* A struct to hold a vector of operand_rr_info structures describing the
+   operands of an insn.  */
+struct insn_rr_info
+{
+  operand_rr_info *op_info;
+};
+
+
+extern vec<insn_rr_info> insn_rr;
+
+extern void regrename_init (bool);
+extern void regrename_finish (void);
+extern void regrename_analyze (bitmap);
+extern du_head_p regrename_chain_from_id (unsigned int);
+extern int find_rename_reg (du_head_p, enum reg_class, HARD_REG_SET *, int,
+			    bool);
+extern bool regrename_do_replace (du_head_p, int);
+extern reg_class regrename_find_superclass (du_head_p, int *,
+					    HARD_REG_SET *);
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/regs.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/regs.h
new file mode 100644
index 0000000..48b2e70
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/regs.h
@@ -0,0 +1,390 @@
+/* Define per-register tables for data flow info and register allocation.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_REGS_H
+#define GCC_REGS_H
+
+#define REG_BYTES(R) mode_size[(int) GET_MODE (R)]
+
+/* When you only have the mode of a pseudo register before it has a hard
+   register chosen for it, this reports the size of each hard register
+   a pseudo in such a mode would get allocated to.  A target may
+   override this.  */
+
+#ifndef REGMODE_NATURAL_SIZE
+#define REGMODE_NATURAL_SIZE(MODE)	UNITS_PER_WORD
+#endif
+
+/* Maximum register number used in this function, plus one.  */
+
+extern int max_regno;
+
+/* REG_N_REFS and REG_N_SETS are initialized by a call to
+   regstat_init_n_sets_and_refs from the current values of
+   DF_REG_DEF_COUNT and DF_REG_USE_COUNT.  REG_N_REFS and REG_N_SETS
+   should only be used if a pass need to change these values in some
+   magical way or the pass needs to have accurate values for these
+   and is not using incremental df scanning.
+
+   At the end of a pass that uses REG_N_REFS and REG_N_SETS, a call
+   should be made to regstat_free_n_sets_and_refs.
+
+   Local alloc seems to play pretty loose with these values.
+   REG_N_REFS is set to 0 if the register is used in an asm.
+   Furthermore, local_alloc calls regclass to hack both REG_N_REFS and
+   REG_N_SETS for three address insns.  Other passes seem to have
+   other special values.  */
+
+
+
+/* Structure to hold values for REG_N_SETS (i) and REG_N_REFS (i). */
+
+struct regstat_n_sets_and_refs_t
+{
+  int sets;			/* # of times (REG n) is set */
+  int refs;			/* # of times (REG n) is used or set */
+};
+
+extern struct regstat_n_sets_and_refs_t *regstat_n_sets_and_refs;
+
+/* Indexed by n, gives number of times (REG n) is used or set.  */
+static inline int
+REG_N_REFS (int regno)
+{
+  return regstat_n_sets_and_refs[regno].refs;
+}
+
+/* Indexed by n, gives number of times (REG n) is used or set.  */
+#define SET_REG_N_REFS(N,V) (regstat_n_sets_and_refs[N].refs = V)
+#define INC_REG_N_REFS(N,V) (regstat_n_sets_and_refs[N].refs += V)
+
+/* Indexed by n, gives number of times (REG n) is set.  */
+static inline int
+REG_N_SETS (int regno)
+{
+  return regstat_n_sets_and_refs[regno].sets;
+}
+
+/* Indexed by n, gives number of times (REG n) is set.  */
+#define SET_REG_N_SETS(N,V) (regstat_n_sets_and_refs[N].sets = V)
+#define INC_REG_N_SETS(N,V) (regstat_n_sets_and_refs[N].sets += V)
+
+/* Given a REG, return TRUE if the reg is a PARM_DECL, FALSE otherwise.  */
+extern bool reg_is_parm_p (rtx);
+
+/* Functions defined in regstat.c.  */
+extern void regstat_init_n_sets_and_refs (void);
+extern void regstat_free_n_sets_and_refs (void);
+extern void regstat_compute_ri (void);
+extern void regstat_free_ri (void);
+extern bitmap regstat_get_setjmp_crosses (void);
+extern void regstat_compute_calls_crossed (void);
+extern void regstat_free_calls_crossed (void);
+extern void dump_reg_info (FILE *);
+
+/* Register information indexed by register number.  This structure is
+   initialized by calling regstat_compute_ri and is destroyed by
+   calling regstat_free_ri.  */
+struct reg_info_t
+{
+  int freq;			/* # estimated frequency (REG n) is used or set */
+  int deaths;			/* # of times (REG n) dies */
+  int calls_crossed;		/* # of calls (REG n) is live across */
+  int basic_block;		/* # of basic blocks (REG n) is used in */
+};
+
+extern struct reg_info_t *reg_info_p;
+
+/* The number allocated elements of reg_info_p.  */
+extern size_t reg_info_p_size;
+
+/* Estimate frequency of references to register N.  */
+
+#define REG_FREQ(N) (reg_info_p[N].freq)
+
+/* The weights for each insn varies from 0 to REG_FREQ_BASE.
+   This constant does not need to be high, as in infrequently executed
+   regions we want to count instructions equivalently to optimize for
+   size instead of speed.  */
+#define REG_FREQ_MAX 1000
+
+/* Compute register frequency from the BB frequency.  When optimizing for size,
+   or profile driven feedback is available and the function is never executed,
+   frequency is always equivalent.  Otherwise rescale the basic block
+   frequency.  */
+#define REG_FREQ_FROM_BB(bb) (optimize_function_for_size_p (cfun)	      \
+			      ? REG_FREQ_MAX				      \
+			      : ((bb)->count.to_frequency (cfun)	      \
+				* REG_FREQ_MAX / BB_FREQ_MAX)		      \
+			      ? ((bb)->count.to_frequency (cfun)	      \
+				 * REG_FREQ_MAX / BB_FREQ_MAX)		      \
+			      : 1)
+
+/* Indexed by N, gives number of insns in which register N dies.
+   Note that if register N is live around loops, it can die
+   in transitions between basic blocks, and that is not counted here.
+   So this is only a reliable indicator of how many regions of life there are
+   for registers that are contained in one basic block.  */
+
+#define REG_N_DEATHS(N) (reg_info_p[N].deaths)
+
+/* Get the number of consecutive words required to hold pseudo-reg N.  */
+
+#define PSEUDO_REGNO_SIZE(N) \
+  ((GET_MODE_SIZE (PSEUDO_REGNO_MODE (N)) + UNITS_PER_WORD - 1)		\
+   / UNITS_PER_WORD)
+
+/* Get the number of bytes required to hold pseudo-reg N.  */
+
+#define PSEUDO_REGNO_BYTES(N) \
+  GET_MODE_SIZE (PSEUDO_REGNO_MODE (N))
+
+/* Get the machine mode of pseudo-reg N.  */
+
+#define PSEUDO_REGNO_MODE(N) GET_MODE (regno_reg_rtx[N])
+
+/* Indexed by N, gives number of CALL_INSNS across which (REG n) is live.  */
+
+#define REG_N_CALLS_CROSSED(N)  (reg_info_p[N].calls_crossed)
+
+/* Indexed by n, gives number of basic block that  (REG n) is used in.
+   If the value is REG_BLOCK_GLOBAL (-1),
+   it means (REG n) is used in more than one basic block.
+   REG_BLOCK_UNKNOWN (0) means it hasn't been seen yet so we don't know.
+   This information remains valid for the rest of the compilation
+   of the current function; it is used to control register allocation.  */
+
+#define REG_BLOCK_UNKNOWN 0
+#define REG_BLOCK_GLOBAL -1
+
+#define REG_BASIC_BLOCK(N) (reg_info_p[N].basic_block)
+
+/* Vector of substitutions of register numbers,
+   used to map pseudo regs into hardware regs.
+
+   This can't be folded into reg_n_info without changing all of the
+   machine dependent directories, since the reload functions
+   in the machine dependent files access it.  */
+
+extern short *reg_renumber;
+
+/* Flag set by local-alloc or global-alloc if they decide to allocate
+   something in a call-clobbered register.  */
+
+extern int caller_save_needed;
+
+/* Select a register mode required for caller save of hard regno REGNO.  */
+#ifndef HARD_REGNO_CALLER_SAVE_MODE
+#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \
+  choose_hard_reg_mode (REGNO, NREGS, false)
+#endif
+
+/* Target-dependent globals.  */
+struct target_regs {
+  /* For each starting hard register, the number of consecutive hard
+     registers that a given machine mode occupies.  */
+  unsigned char x_hard_regno_nregs[FIRST_PSEUDO_REGISTER][MAX_MACHINE_MODE];
+
+  /* For each hard register, the widest mode object that it can contain.
+     This will be a MODE_INT mode if the register can hold integers.  Otherwise
+     it will be a MODE_FLOAT or a MODE_CC mode, whichever is valid for the
+     register.  */
+  machine_mode x_reg_raw_mode[FIRST_PSEUDO_REGISTER];
+
+  /* Vector indexed by machine mode saying whether there are regs of
+     that mode.  */
+  bool x_have_regs_of_mode[MAX_MACHINE_MODE];
+
+  /* 1 if the corresponding class contains a register of the given mode.  */
+  char x_contains_reg_of_mode[N_REG_CLASSES][MAX_MACHINE_MODE];
+
+  /* 1 if the corresponding class contains a register of the given mode
+     which is not global and can therefore be allocated.  */
+  char x_contains_allocatable_reg_of_mode[N_REG_CLASSES][MAX_MACHINE_MODE];
+
+  /* Record for each mode whether we can move a register directly to or
+     from an object of that mode in memory.  If we can't, we won't try
+     to use that mode directly when accessing a field of that mode.  */
+  char x_direct_load[NUM_MACHINE_MODES];
+  char x_direct_store[NUM_MACHINE_MODES];
+
+  /* Record for each mode whether we can float-extend from memory.  */
+  bool x_float_extend_from_mem[NUM_MACHINE_MODES][NUM_MACHINE_MODES];
+};
+
+extern struct target_regs default_target_regs;
+#if SWITCHABLE_TARGET
+extern struct target_regs *this_target_regs;
+#else
+#define this_target_regs (&default_target_regs)
+#endif
+#define reg_raw_mode \
+  (this_target_regs->x_reg_raw_mode)
+#define have_regs_of_mode \
+  (this_target_regs->x_have_regs_of_mode)
+#define contains_reg_of_mode \
+  (this_target_regs->x_contains_reg_of_mode)
+#define contains_allocatable_reg_of_mode \
+  (this_target_regs->x_contains_allocatable_reg_of_mode)
+#define direct_load \
+  (this_target_regs->x_direct_load)
+#define direct_store \
+  (this_target_regs->x_direct_store)
+#define float_extend_from_mem \
+  (this_target_regs->x_float_extend_from_mem)
+
+/* Return the number of hard registers in (reg:MODE REGNO).  */
+
+ALWAYS_INLINE unsigned char
+hard_regno_nregs (unsigned int regno, machine_mode mode)
+{
+  return this_target_regs->x_hard_regno_nregs[regno][mode];
+}
+
+/* Return an exclusive upper bound on the registers occupied by hard
+   register (reg:MODE REGNO).  */
+
+static inline unsigned int
+end_hard_regno (machine_mode mode, unsigned int regno)
+{
+  return regno + hard_regno_nregs (regno, mode);
+}
+
+/* Add to REGS all the registers required to store a value of mode MODE
+   in register REGNO.  */
+
+static inline void
+add_to_hard_reg_set (HARD_REG_SET *regs, machine_mode mode,
+		     unsigned int regno)
+{
+  unsigned int end_regno;
+
+  end_regno = end_hard_regno (mode, regno);
+  do
+    SET_HARD_REG_BIT (*regs, regno);
+  while (++regno < end_regno);
+}
+
+/* Likewise, but remove the registers.  */
+
+static inline void
+remove_from_hard_reg_set (HARD_REG_SET *regs, machine_mode mode,
+			  unsigned int regno)
+{
+  unsigned int end_regno;
+
+  end_regno = end_hard_regno (mode, regno);
+  do
+    CLEAR_HARD_REG_BIT (*regs, regno);
+  while (++regno < end_regno);
+}
+
+/* Return true if REGS contains the whole of (reg:MODE REGNO).  */
+
+static inline bool
+in_hard_reg_set_p (const HARD_REG_SET regs, machine_mode mode,
+		   unsigned int regno)
+{
+  unsigned int end_regno;
+
+  gcc_assert (HARD_REGISTER_NUM_P (regno));
+  
+  if (!TEST_HARD_REG_BIT (regs, regno))
+    return false;
+
+  end_regno = end_hard_regno (mode, regno);
+
+  if (!HARD_REGISTER_NUM_P (end_regno - 1))
+    return false;
+
+  while (++regno < end_regno)
+    if (!TEST_HARD_REG_BIT (regs, regno))
+      return false;
+
+  return true;
+}
+
+/* Return true if (reg:MODE REGNO) includes an element of REGS.  */
+
+static inline bool
+overlaps_hard_reg_set_p (const HARD_REG_SET regs, machine_mode mode,
+			 unsigned int regno)
+{
+  unsigned int end_regno;
+
+  if (TEST_HARD_REG_BIT (regs, regno))
+    return true;
+
+  end_regno = end_hard_regno (mode, regno);
+  while (++regno < end_regno)
+    if (TEST_HARD_REG_BIT (regs, regno))
+      return true;
+
+  return false;
+}
+
+/* Like add_to_hard_reg_set, but use a REGNO/NREGS range instead of
+   REGNO and MODE.  */
+
+static inline void
+add_range_to_hard_reg_set (HARD_REG_SET *regs, unsigned int regno,
+			   int nregs)
+{
+  while (nregs-- > 0)
+    SET_HARD_REG_BIT (*regs, regno + nregs);
+}
+
+/* Likewise, but remove the registers.  */
+
+static inline void
+remove_range_from_hard_reg_set (HARD_REG_SET *regs, unsigned int regno,
+				int nregs)
+{
+  while (nregs-- > 0)
+    CLEAR_HARD_REG_BIT (*regs, regno + nregs);
+}
+
+/* Like overlaps_hard_reg_set_p, but use a REGNO/NREGS range instead of
+   REGNO and MODE.  */
+static inline bool
+range_overlaps_hard_reg_set_p (const HARD_REG_SET set, unsigned regno,
+			       int nregs)
+{
+  while (nregs-- > 0)
+    if (TEST_HARD_REG_BIT (set, regno + nregs))
+      return true;
+  return false;
+}
+
+/* Like in_hard_reg_set_p, but use a REGNO/NREGS range instead of
+   REGNO and MODE.  */
+static inline bool
+range_in_hard_reg_set_p (const HARD_REG_SET set, unsigned regno, int nregs)
+{
+  while (nregs-- > 0)
+    if (!TEST_HARD_REG_BIT (set, regno + nregs))
+      return false;
+  return true;
+}
+
+/* Get registers used by given function call instruction.  */
+extern bool get_call_reg_set_usage (rtx_insn *insn, HARD_REG_SET *reg_set,
+				    HARD_REG_SET default_set);
+
+#endif /* GCC_REGS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/regset.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/regset.h
new file mode 100644
index 0000000..34a9eb4
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/regset.h
@@ -0,0 +1,124 @@
+/* Define regsets.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_REGSET_H
+#define GCC_REGSET_H
+
+/* TODO: regset is just a bitmap in its implementation.  The compiler does
+   not consistently use one or the other, i.e. sometimes variables are
+   declared as bitmap but they are actually regsets and regset accessors
+   are used, and vice versa, or mixed (see e.g. spilled_regs in IRA).
+
+   This should be cleaned up, either by just dropping the regset type, or
+   by changing all bitmaps that are really regsets to the regset type.  For
+   the latter option, a good start would be to change everything allocated
+   on the reg_obstack to regset.  */
+
+
+/* Head of register set linked list.  */
+typedef bitmap_head regset_head;
+
+/* A pointer to a regset_head.  */
+typedef bitmap regset;
+
+/* Allocate a register set with oballoc.  */
+#define ALLOC_REG_SET(OBSTACK) BITMAP_ALLOC (OBSTACK)
+
+/* Do any cleanup needed on a regset when it is no longer used.  */
+#define FREE_REG_SET(REGSET) BITMAP_FREE (REGSET)
+
+/* Initialize a new regset.  */
+#define INIT_REG_SET(HEAD) bitmap_initialize (HEAD, &reg_obstack)
+
+/* Clear a register set by freeing up the linked list.  */
+#define CLEAR_REG_SET(HEAD) bitmap_clear (HEAD)
+
+/* Copy a register set to another register set.  */
+#define COPY_REG_SET(TO, FROM) bitmap_copy (TO, FROM)
+
+/* Compare two register sets.  */
+#define REG_SET_EQUAL_P(A, B) bitmap_equal_p (A, B)
+
+/* `and' a register set with a second register set.  */
+#define AND_REG_SET(TO, FROM) bitmap_and_into (TO, FROM)
+
+/* `and' the complement of a register set with a register set.  */
+#define AND_COMPL_REG_SET(TO, FROM) bitmap_and_compl_into (TO, FROM)
+
+/* Inclusive or a register set with a second register set.  */
+#define IOR_REG_SET(TO, FROM) bitmap_ior_into (TO, FROM)
+
+/* Exclusive or a register set with a second register set.  */
+#define XOR_REG_SET(TO, FROM) bitmap_xor_into (TO, FROM)
+
+/* Or into TO the register set FROM1 `and'ed with the complement of FROM2.  */
+#define IOR_AND_COMPL_REG_SET(TO, FROM1, FROM2) \
+  bitmap_ior_and_compl_into (TO, FROM1, FROM2)
+
+/* Clear a single register in a register set.  */
+#define CLEAR_REGNO_REG_SET(HEAD, REG) bitmap_clear_bit (HEAD, REG)
+
+/* Set a single register in a register set.  */
+#define SET_REGNO_REG_SET(HEAD, REG) bitmap_set_bit (HEAD, REG)
+
+/* Return true if a register is set in a register set.  */
+#define REGNO_REG_SET_P(TO, REG) bitmap_bit_p (TO, REG)
+
+/* Copy the hard registers in a register set to the hard register set.  */
+extern void reg_set_to_hard_reg_set (HARD_REG_SET *, const_bitmap);
+#define REG_SET_TO_HARD_REG_SET(TO, FROM)				\
+do {									\
+  CLEAR_HARD_REG_SET (TO);						\
+  reg_set_to_hard_reg_set (&TO, FROM);					\
+} while (0)
+
+typedef bitmap_iterator reg_set_iterator;
+
+/* Loop over all registers in REGSET, starting with MIN, setting REGNUM to the
+   register number and executing CODE for all registers that are set.  */
+#define EXECUTE_IF_SET_IN_REG_SET(REGSET, MIN, REGNUM, RSI)	\
+  EXECUTE_IF_SET_IN_BITMAP (REGSET, MIN, REGNUM, RSI)
+
+/* Loop over all registers in REGSET1 and REGSET2, starting with MIN, setting
+   REGNUM to the register number and executing CODE for all registers that are
+   set in the first regset and not set in the second.  */
+#define EXECUTE_IF_AND_COMPL_IN_REG_SET(REGSET1, REGSET2, MIN, REGNUM, RSI) \
+  EXECUTE_IF_AND_COMPL_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, RSI)
+
+/* Loop over all registers in REGSET1 and REGSET2, starting with MIN, setting
+   REGNUM to the register number and executing CODE for all registers that are
+   set in both regsets.  */
+#define EXECUTE_IF_AND_IN_REG_SET(REGSET1, REGSET2, MIN, REGNUM, RSI) \
+  EXECUTE_IF_AND_IN_BITMAP (REGSET1, REGSET2, MIN, REGNUM, RSI)	\
+
+/* Same information as REGS_INVALIDATED_BY_CALL but in regset form to be used
+   in dataflow more conveniently.  */
+
+extern regset regs_invalidated_by_call_regset;
+
+/* Same information as FIXED_REG_SET but in regset form.  */
+extern regset fixed_reg_set_regset;
+
+/* An obstack for regsets.  */
+extern bitmap_obstack reg_obstack;
+
+/* In df-core.c (which should use regset consistently instead of bitmap...)  */
+extern void dump_regset (regset, FILE *);
+
+#endif /* GCC_REGSET_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/reload.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/reload.h
new file mode 100644
index 0000000..813075b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/reload.h
@@ -0,0 +1,465 @@
+/* Communication between reload.c, reload1.c and the rest of compiler.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_RELOAD_H
+#define GCC_RELOAD_H
+
+/* If secondary reloads are the same for inputs and outputs, define those
+   macros here.  */
+
+#ifdef SECONDARY_RELOAD_CLASS
+#define SECONDARY_INPUT_RELOAD_CLASS(CLASS, MODE, X) \
+  SECONDARY_RELOAD_CLASS (CLASS, MODE, X)
+#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS, MODE, X) \
+  SECONDARY_RELOAD_CLASS (CLASS, MODE, X)
+#endif
+
+extern int register_move_cost (machine_mode, reg_class_t, reg_class_t);
+extern int memory_move_cost (machine_mode, reg_class_t, bool);
+extern int memory_move_secondary_cost (machine_mode, reg_class_t, bool);
+
+/* Maximum number of reloads we can need.  */
+#define MAX_RELOADS (2 * MAX_RECOG_OPERANDS * (MAX_REGS_PER_ADDRESS + 1))
+
+/* Encode the usage of a reload.  The following codes are supported:
+
+   RELOAD_FOR_INPUT		reload of an input operand
+   RELOAD_FOR_OUTPUT		likewise, for output
+   RELOAD_FOR_INSN		a reload that must not conflict with anything
+				used in the insn, but may conflict with
+				something used before or after the insn
+   RELOAD_FOR_INPUT_ADDRESS	reload for parts of the address of an object
+				that is an input reload
+   RELOAD_FOR_INPADDR_ADDRESS	reload needed for RELOAD_FOR_INPUT_ADDRESS
+   RELOAD_FOR_OUTPUT_ADDRESS	like RELOAD_FOR INPUT_ADDRESS, for output
+   RELOAD_FOR_OUTADDR_ADDRESS	reload needed for RELOAD_FOR_OUTPUT_ADDRESS
+   RELOAD_FOR_OPERAND_ADDRESS	reload for the address of a non-reloaded
+				operand; these don't conflict with
+				any other addresses.
+   RELOAD_FOR_OPADDR_ADDR	reload needed for RELOAD_FOR_OPERAND_ADDRESS
+                                reloads; usually secondary reloads
+   RELOAD_OTHER			none of the above, usually multiple uses
+   RELOAD_FOR_OTHER_ADDRESS     reload for part of the address of an input
+				that is marked RELOAD_OTHER.
+
+   This used to be "enum reload_when_needed" but some debuggers have trouble
+   with an enum tag and variable of the same name.  */
+
+enum reload_type
+{
+  RELOAD_FOR_INPUT, RELOAD_FOR_OUTPUT, RELOAD_FOR_INSN,
+  RELOAD_FOR_INPUT_ADDRESS, RELOAD_FOR_INPADDR_ADDRESS,
+  RELOAD_FOR_OUTPUT_ADDRESS, RELOAD_FOR_OUTADDR_ADDRESS,
+  RELOAD_FOR_OPERAND_ADDRESS, RELOAD_FOR_OPADDR_ADDR,
+  RELOAD_OTHER, RELOAD_FOR_OTHER_ADDRESS
+};
+
+#ifdef GCC_INSN_CODES_H
+/* Each reload is recorded with a structure like this.  */
+struct reload
+{
+  /* The value to reload from */
+  rtx in;
+  /* Where to store reload-reg afterward if nec (often the same as
+     reload_in)  */
+  rtx out;
+
+  /* The class of registers to reload into.  */
+  enum reg_class rclass;
+
+  /* The mode this operand should have when reloaded, on input.  */
+  machine_mode inmode;
+  /* The mode this operand should have when reloaded, on output.  */
+  machine_mode outmode;
+
+  /* The mode of the reload register.  */
+  machine_mode mode;
+
+  /* the largest number of registers this reload will require.  */
+  unsigned int nregs;
+
+  /* Positive amount to increment or decrement by if
+     reload_in is a PRE_DEC, PRE_INC, POST_DEC, POST_INC.
+     Ignored otherwise (don't assume it is zero).  */
+  poly_int64_pod inc;
+  /* A reg for which reload_in is the equivalent.
+     If reload_in is a symbol_ref which came from
+     reg_equiv_constant, then this is the pseudo
+     which has that symbol_ref as equivalent.  */
+  rtx in_reg;
+  rtx out_reg;
+
+  /* Used in find_reload_regs to record the allocated register.  */
+  int regno;
+  /* This is the register to reload into.  If it is zero when `find_reloads'
+     returns, you must find a suitable register in the class specified by
+     reload_reg_class, and store here an rtx for that register with mode from
+     reload_inmode or reload_outmode.  */
+  rtx reg_rtx;
+  /* The operand number being reloaded.  This is used to group related reloads
+     and need not always be equal to the actual operand number in the insn,
+     though it current will be; for in-out operands, it is one of the two
+     operand numbers.  */
+  int opnum;
+
+  /* Gives the reload number of a secondary input reload, when needed;
+     otherwise -1.  */
+  int secondary_in_reload;
+  /* Gives the reload number of a secondary output reload, when needed;
+     otherwise -1.  */
+  int secondary_out_reload;
+  /* If a secondary input reload is required, gives the INSN_CODE that uses the
+     secondary reload as a scratch register, or CODE_FOR_nothing if the
+     secondary reload register is to be an intermediate register.  */
+  enum insn_code secondary_in_icode;
+  /* Likewise, for a secondary output reload.  */
+  enum insn_code secondary_out_icode;
+
+  /* Classifies reload as needed either for addressing an input reload,
+     addressing an output, for addressing a non-reloaded mem ref, or for
+     unspecified purposes (i.e., more than one of the above).  */
+  enum reload_type when_needed;
+
+  /* Nonzero for an optional reload.  Optional reloads are ignored unless the
+     value is already sitting in a register.  */
+  unsigned int optional:1;
+  /* nonzero if this reload shouldn't be combined with another reload.  */
+  unsigned int nocombine:1;
+  /* Nonzero if this is a secondary register for one or more reloads.  */
+  unsigned int secondary_p:1;
+  /* Nonzero if this reload must use a register not already allocated to a
+     group.  */
+  unsigned int nongroup:1;
+};
+
+extern struct reload rld[MAX_RELOADS];
+extern int n_reloads;
+#endif
+
+/* Target-dependent globals.  */
+struct target_reload {
+  /* Nonzero if indirect addressing is supported when the innermost MEM is
+     of the form (MEM (SYMBOL_REF sym)).  It is assumed that the level to
+     which these are valid is the same as spill_indirect_levels, above.  */
+  bool x_indirect_symref_ok;
+
+  /* Nonzero if indirect addressing is supported on the machine; this means
+     that spilling (REG n) does not require reloading it into a register in
+     order to do (MEM (REG n)) or (MEM (PLUS (REG n) (CONST_INT c))).  The
+     value indicates the level of indirect addressing supported, e.g., two
+     means that (MEM (MEM (REG n))) is also valid if (REG n) does not get
+     a hard register.  */
+  unsigned char x_spill_indirect_levels;
+
+  /* True if caller-save has been reinitialized.  */
+  bool x_caller_save_initialized_p;
+
+  /* Modes for each hard register that we can save.  The smallest mode is wide
+     enough to save the entire contents of the register.  When saving the
+     register because it is live we first try to save in multi-register modes.
+     If that is not possible the save is done one register at a time.  */
+  machine_mode (x_regno_save_mode
+		     [FIRST_PSEUDO_REGISTER]
+		     [MAX_MOVE_MAX / MIN_UNITS_PER_WORD + 1]);
+
+  /* Nonzero if an address (plus (reg frame_pointer) (reg ...)) is valid
+     in the given mode.  */
+  bool x_double_reg_address_ok[MAX_MACHINE_MODE];
+
+  /* We will only make a register eligible for caller-save if it can be
+     saved in its widest mode with a simple SET insn as long as the memory
+     address is valid.  We record the INSN_CODE is those insns here since
+     when we emit them, the addresses might not be valid, so they might not
+     be recognized.  */
+  int x_cached_reg_save_code[FIRST_PSEUDO_REGISTER][MAX_MACHINE_MODE];
+  int x_cached_reg_restore_code[FIRST_PSEUDO_REGISTER][MAX_MACHINE_MODE];
+};
+
+extern struct target_reload default_target_reload;
+#if SWITCHABLE_TARGET
+extern struct target_reload *this_target_reload;
+#else
+#define this_target_reload (&default_target_reload)
+#endif
+
+#define indirect_symref_ok \
+  (this_target_reload->x_indirect_symref_ok)
+#define double_reg_address_ok \
+  (this_target_reload->x_double_reg_address_ok)
+#define caller_save_initialized_p \
+  (this_target_reload->x_caller_save_initialized_p)
+
+/* Register equivalences.  Indexed by register number.  */
+struct reg_equivs_t
+{
+  /* The constant value to which pseudo reg N is equivalent,
+     or zero if pseudo reg N is not equivalent to a constant.
+     find_reloads looks at this in order to replace pseudo reg N
+     with the constant it stands for.  */
+  rtx constant;
+
+  /* An invariant value to which pseudo reg N is equivalent.
+     eliminate_regs_in_insn uses this to replace pseudos in particular
+     contexts.  */
+  rtx invariant;
+
+  /* A memory location to which pseudo reg N is equivalent,
+     prior to any register elimination (such as frame pointer to stack
+     pointer).  Depending on whether or not it is a valid address, this value
+     is transferred to either equiv_address or equiv_mem.  */
+  rtx memory_loc;
+
+  /* The address of stack slot to which pseudo reg N is equivalent.
+     This is used when the address is not valid as a memory address
+     (because its displacement is too big for the machine.)  */
+  rtx address;
+
+  /* The memory slot to which pseudo reg N is equivalent,
+     or zero if pseudo reg N is not equivalent to a memory slot.  */
+  rtx mem;
+
+  /* An EXPR_LIST of REG_EQUIVs containing MEMs with
+     alternate representations of the location of pseudo reg N.  */
+  rtx_expr_list *alt_mem_list;
+
+  /* The list of insns that initialized reg N from its equivalent
+     constant or memory slot.  */
+  rtx_insn_list *init;
+};
+
+#define reg_equiv_constant(ELT) \
+  (*reg_equivs)[(ELT)].constant
+#define reg_equiv_invariant(ELT) \
+  (*reg_equivs)[(ELT)].invariant
+#define reg_equiv_memory_loc(ELT) \
+  (*reg_equivs)[(ELT)].memory_loc
+#define reg_equiv_address(ELT) \
+  (*reg_equivs)[(ELT)].address
+#define reg_equiv_mem(ELT) \
+  (*reg_equivs)[(ELT)].mem
+#define reg_equiv_alt_mem_list(ELT) \
+  (*reg_equivs)[(ELT)].alt_mem_list
+#define reg_equiv_init(ELT) \
+  (*reg_equivs)[(ELT)].init
+
+extern vec<reg_equivs_t, va_gc> *reg_equivs;
+
+/* All the "earlyclobber" operands of the current insn
+   are recorded here.  */
+extern int n_earlyclobbers;
+extern rtx reload_earlyclobbers[MAX_RECOG_OPERANDS];
+
+/* Save the number of operands.  */
+extern int reload_n_operands;
+
+/* First uid used by insns created by reload in this function.
+   Used in find_equiv_reg.  */
+extern int reload_first_uid;
+
+extern int num_not_at_initial_offset;
+
+#if defined SET_HARD_REG_BIT && defined CLEAR_REG_SET
+/* This structure describes instructions which are relevant for reload.
+   Apart from all regular insns, this also includes CODE_LABELs, since they
+   must be examined for register elimination.  */
+struct insn_chain
+{
+  /* Links to the neighbor instructions.  */
+  struct insn_chain *next, *prev;
+
+  /* Link through a chains set up by calculate_needs_all_insns, containing
+     all insns that need reloading.  */
+  struct insn_chain *next_need_reload;
+
+  /* The rtx of the insn.  */
+  rtx_insn *insn;
+
+  /* The basic block this insn is in.  */
+  int block;
+
+  /* Nonzero if find_reloads said the insn requires reloading.  */
+  unsigned int need_reload:1;
+  /* Nonzero if find_reloads needs to be run during reload_as_needed to
+     perform modifications on any operands.  */
+  unsigned int need_operand_change:1;
+  /* Nonzero if eliminate_regs_in_insn said it requires eliminations.  */
+  unsigned int need_elim:1;
+  /* Nonzero if this insn was inserted by perform_caller_saves.  */
+  unsigned int is_caller_save_insn:1;
+
+  /* Register life information: record all live hard registers, and
+     all live pseudos that have a hard register.  This set also
+     contains pseudos spilled by IRA.  */
+  bitmap_head live_throughout;
+  bitmap_head dead_or_set;
+
+  /* Copies of the global variables computed by find_reloads.  */
+  struct reload *rld;
+  int n_reloads;
+
+  /* Indicates which registers have already been used for spills.  */
+  HARD_REG_SET used_spill_regs;
+};
+
+/* A chain of insn_chain structures to describe all non-note insns in
+   a function.  */
+extern struct insn_chain *reload_insn_chain;
+
+/* Allocate a new insn_chain structure.  */
+extern struct insn_chain *new_insn_chain (void);
+#endif
+
+#if defined SET_HARD_REG_BIT
+extern void compute_use_by_pseudos (HARD_REG_SET *, bitmap);
+#endif
+
+/* Functions from reload.c:  */
+
+extern reg_class_t secondary_reload_class (bool, reg_class_t,
+					   machine_mode, rtx);
+
+#ifdef GCC_INSN_CODES_H
+extern enum reg_class scratch_reload_class (enum insn_code);
+#endif
+
+/* Return a memory location that will be used to copy X in mode MODE.
+   If we haven't already made a location for this mode in this insn,
+   call find_reloads_address on the location being returned.  */
+extern rtx get_secondary_mem (rtx, machine_mode, int, enum reload_type);
+
+/* Clear any secondary memory locations we've made.  */
+extern void clear_secondary_mem (void);
+
+/* Transfer all replacements that used to be in reload FROM to be in
+   reload TO.  */
+extern void transfer_replacements (int, int);
+
+/* IN_RTX is the value loaded by a reload that we now decided to inherit,
+   or a subpart of it.  If we have any replacements registered for IN_RTX,
+   cancel the reloads that were supposed to load them.
+   Return nonzero if we canceled any reloads.  */
+extern int remove_address_replacements (rtx in_rtx);
+
+/* Like rtx_equal_p except that it allows a REG and a SUBREG to match
+   if they are the same hard reg, and has special hacks for
+   autoincrement and autodecrement.  */
+extern int operands_match_p (rtx, rtx);
+
+/* Return 1 if altering OP will not modify the value of CLOBBER.  */
+extern int safe_from_earlyclobber (rtx, rtx);
+
+/* Search the body of INSN for values that need reloading and record them
+   with push_reload.  REPLACE nonzero means record also where the values occur
+   so that subst_reloads can be used.  */
+extern int find_reloads (rtx_insn *, int, int, int, short *);
+
+/* Compute the sum of X and Y, making canonicalizations assumed in an
+   address, namely: sum constant integers, surround the sum of two
+   constants with a CONST, put the constant as the second operand, and
+   group the constant on the outermost sum.  */
+extern rtx form_sum (machine_mode, rtx, rtx);
+
+/* Substitute into the current INSN the registers into which we have reloaded
+   the things that need reloading.  */
+extern void subst_reloads (rtx_insn *);
+
+/* Make a copy of any replacements being done into X and move those copies
+   to locations in Y, a copy of X.  We only look at the highest level of
+   the RTL.  */
+extern void copy_replacements (rtx, rtx);
+
+/* Change any replacements being done to *X to be done to *Y */
+extern void move_replacements (rtx *x, rtx *y);
+
+/* If LOC was scheduled to be replaced by something, return the replacement.
+   Otherwise, return *LOC.  */
+extern rtx find_replacement (rtx *);
+
+/* Nonzero if modifying X will affect IN.  */
+extern int reg_overlap_mentioned_for_reload_p (rtx, rtx);
+
+/* Check the insns before INSN to see if there is a suitable register
+   containing the same value as GOAL.  */
+extern rtx find_equiv_reg (rtx, rtx_insn *, enum reg_class, int, short *,
+			   int, machine_mode);
+
+/* Return 1 if register REGNO is the subject of a clobber in insn INSN.  */
+extern int regno_clobbered_p (unsigned int, rtx_insn *, machine_mode, int);
+
+/* Return 1 if X is an operand of an insn that is being earlyclobbered.  */
+extern int earlyclobber_operand_p (rtx);
+
+/* Record one reload that needs to be performed.  */
+extern int push_reload (rtx, rtx, rtx *, rtx *, enum reg_class,
+			machine_mode, machine_mode,
+			int, int, int, enum reload_type);
+
+/* Functions in reload1.c:  */
+
+/* Initialize the reload pass once per compilation.  */
+extern void init_reload (void);
+
+/* The reload pass itself.  */
+extern bool reload (rtx_insn *, int);
+
+/* Mark the slots in regs_ever_live for the hard regs
+   used by pseudo-reg number REGNO.  */
+extern void mark_home_live (int);
+
+/* Scan X and replace any eliminable registers (such as fp) with a
+   replacement (such as sp), plus an offset.  */
+extern rtx eliminate_regs (rtx, machine_mode, rtx);
+extern bool elimination_target_reg_p (rtx);
+
+/* Called from the register allocator to estimate costs of eliminating
+   invariant registers.  */
+extern void calculate_elim_costs_all_insns (void);
+
+/* Deallocate the reload register used by reload number R.  */
+extern void deallocate_reload_reg (int r);
+
+/* Functions in caller-save.c:  */
+
+/* Initialize for caller-save.  */
+extern void init_caller_save (void);
+
+/* Initialize save areas by showing that we haven't allocated any yet.  */
+extern void init_save_areas (void);
+
+/* Allocate save areas for any hard registers that might need saving.  */
+extern void setup_save_areas (void);
+
+/* Find the places where hard regs are live across calls and save them.  */
+extern void save_call_clobbered_regs (void);
+
+/* Replace (subreg (reg)) with the appropriate (reg) for any operands.  */
+extern void cleanup_subreg_operands (rtx_insn *);
+
+/* Debugging support.  */
+extern void debug_reload_to_stream (FILE *);
+extern void debug_reload (void);
+
+/* Compute the actual register we should reload to, in case we're
+   reloading to/from a register that is wider than a word.  */
+extern rtx reload_adjust_reg_for_mode (rtx, machine_mode);
+
+/* Allocate or grow the reg_equiv tables, initializing new entries to 0.  */
+extern void grow_reg_equivs (void);
+
+#endif /* GCC_RELOAD_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/resource.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/resource.h
new file mode 100644
index 0000000..7916344
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/resource.h
@@ -0,0 +1,54 @@
+/* Definitions for computing resource usage of specific insns.
+   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_RESOURCE_H
+#define GCC_RESOURCE_H
+
+/* Macro to clear all resources.  */
+#define CLEAR_RESOURCE(RES)	\
+ do { (RES)->memory = (RES)->volatil = (RES)->cc = 0; \
+      CLEAR_HARD_REG_SET ((RES)->regs); } while (0)
+
+/* The resources used by a given insn.  */
+struct resources
+{
+  char memory;		/* Insn sets or needs a memory location.  */
+  char volatil;		/* Insn sets or needs a volatile memory loc.  */
+  char cc;		/* Insn sets or needs the condition codes.  */
+  HARD_REG_SET regs;	/* Which registers are set or needed.  */
+};
+
+/* The kinds of rtl mark_*_resources will consider */
+enum mark_resource_type
+{
+  MARK_SRC_DEST = 0,
+  MARK_SRC_DEST_CALL = 1
+};
+
+extern void mark_target_live_regs (rtx_insn *, rtx, struct resources *);
+extern void mark_set_resources (rtx, struct resources *, int,
+				enum mark_resource_type);
+extern void mark_referenced_resources (rtx, struct resources *, bool);
+extern void clear_hashed_info_for_insn (rtx_insn *);
+extern void incr_ticks_for_insn (rtx_insn *);
+extern void mark_end_of_function_resources (rtx, bool);
+extern void init_resource_info (rtx_insn *);
+extern void free_resource_info (void);
+
+#endif /* GCC_RESOURCE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtl-error.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtl-error.h
new file mode 100644
index 0000000..1b3658f
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtl-error.h
@@ -0,0 +1,31 @@
+/* RTL specific diagnostic subroutines for GCC
+   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_RTL_ERROR_H
+#define GCC_RTL_ERROR_H
+
+#include "rtl.h"
+#include "diagnostic-core.h"
+
+extern void error_for_asm (const rtx_insn *, const char *,
+			   ...) ATTRIBUTE_GCC_DIAG(2,3);
+extern void warning_for_asm (const rtx_insn *, const char *,
+			     ...) ATTRIBUTE_GCC_DIAG(2,3);
+
+#endif /* GCC_RTL_ERROR_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtl-iter.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtl-iter.h
new file mode 100644
index 0000000..e48ae4f
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtl-iter.h
@@ -0,0 +1,291 @@
+/* RTL iterators
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* This structure describes the subrtxes of an rtx as follows:
+
+   - if the rtx has no subrtxes, START and COUNT are both 0.
+
+   - if all the subrtxes of an rtx are stored in a contiguous block
+     of XEXPs ("e"s), START is the index of the first XEXP and COUNT
+     is the number of them.
+
+   - otherwise START is arbitrary and COUNT is UCHAR_MAX.
+
+   rtx_all_subrtx_bounds applies to all codes.  rtx_nonconst_subrtx_bounds
+   is like rtx_all_subrtx_bounds except that all constant rtxes are treated
+   as having no subrtxes.  */
+struct rtx_subrtx_bound_info {
+  unsigned char start;
+  unsigned char count;
+};
+extern rtx_subrtx_bound_info rtx_all_subrtx_bounds[];
+extern rtx_subrtx_bound_info rtx_nonconst_subrtx_bounds[];
+
+/* Return true if CODE has no subrtxes.  */
+
+static inline bool
+leaf_code_p (enum rtx_code code)
+{
+  return rtx_all_subrtx_bounds[code].count == 0;
+}
+
+/* Used to iterate over subrtxes of an rtx.  T abstracts the type of
+   access.  */
+template <typename T>
+class generic_subrtx_iterator
+{
+  static const size_t LOCAL_ELEMS = 16;
+  typedef typename T::value_type value_type;
+  typedef typename T::rtx_type rtx_type;
+  typedef typename T::rtunion_type rtunion_type;
+
+public:
+  struct array_type
+  {
+    array_type ();
+    ~array_type ();
+    value_type stack[LOCAL_ELEMS];
+    vec <value_type, va_heap, vl_embed> *heap;
+  };
+  generic_subrtx_iterator (array_type &, value_type,
+			   const rtx_subrtx_bound_info *);
+
+  value_type operator * () const;
+  bool at_end () const;
+  void next ();
+  void skip_subrtxes ();
+  void substitute (value_type);
+
+private:
+  /* The bounds to use for iterating over subrtxes.  */
+  const rtx_subrtx_bound_info *m_bounds;
+
+  /* The storage used for the worklist.  */
+  array_type &m_array;
+
+  /* The current rtx.  */
+  value_type m_current;
+
+  /* The base of the current worklist.  */
+  value_type *m_base;
+
+  /* The number of subrtxes in M_BASE.  */
+  size_t m_end;
+
+  /* The following booleans shouldn't end up in registers or memory
+     but just direct control flow.  */
+
+  /* True if the iteration is over.  */
+  bool m_done;
+
+  /* True if we should skip the subrtxes of M_CURRENT.  */
+  bool m_skip;
+
+  /* True if M_CURRENT has been replaced with a different rtx.  */
+  bool m_substitute;
+
+  static void free_array (array_type &);
+  static size_t add_subrtxes_to_queue (array_type &, value_type *, size_t,
+				       rtx_type);
+  static value_type *add_single_to_queue (array_type &, value_type *, size_t,
+					  value_type);
+};
+
+template <typename T>
+inline generic_subrtx_iterator <T>::array_type::array_type () : heap (0) {}
+
+template <typename T>
+inline generic_subrtx_iterator <T>::array_type::~array_type ()
+{
+  if (__builtin_expect (heap != 0, false))
+    free_array (*this);
+}
+
+/* Iterate over X and its subrtxes, in arbitrary order.  Use ARRAY to
+   store the worklist.  We use an external array in order to avoid
+   capturing the fields of this structure when taking the address of
+   the array.  Use BOUNDS to find the bounds of simple "e"-string codes.  */
+
+template <typename T>
+inline generic_subrtx_iterator <T>::
+generic_subrtx_iterator (array_type &array, value_type x,
+			 const rtx_subrtx_bound_info *bounds)
+  : m_bounds (bounds),
+    m_array (array),
+    m_current (x),
+    m_base (m_array.stack),
+    m_end (0),
+    m_done (false),
+    m_skip (false),
+    m_substitute (false)
+{
+}
+
+/* Return the current subrtx.  */
+
+template <typename T>
+inline typename T::value_type
+generic_subrtx_iterator <T>::operator * () const
+{
+  return m_current;
+}
+
+/* Return true if the iteration has finished.  */
+
+template <typename T>
+inline bool
+generic_subrtx_iterator <T>::at_end () const
+{
+  return m_done;
+}
+
+/* Move on to the next subrtx.  */
+
+template <typename T>
+inline void
+generic_subrtx_iterator <T>::next ()
+{
+  if (m_substitute)
+    {
+      m_substitute = false;
+      m_skip = false;
+      return;
+    }
+  if (!m_skip)
+    {
+      /* Add the subrtxes of M_CURRENT.  */
+      rtx_type x = T::get_rtx (m_current);
+      if (__builtin_expect (x != 0, true))
+	{
+	  enum rtx_code code = GET_CODE (x);
+	  ssize_t count = m_bounds[code].count;
+	  if (count > 0)
+	    {
+	      /* Handle the simple case of a single "e" block that is known
+		 to fit into the current array.  */
+	      if (__builtin_expect (m_end + count <= LOCAL_ELEMS + 1, true))
+		{
+		  /* Set M_CURRENT to the first subrtx and queue the rest.  */
+		  ssize_t start = m_bounds[code].start;
+		  rtunion_type *src = &x->u.fld[start];
+		  if (__builtin_expect (count > 2, false))
+		    m_base[m_end++] = T::get_value (src[2].rt_rtx);
+		  if (count > 1)
+		    m_base[m_end++] = T::get_value (src[1].rt_rtx);
+		  m_current = T::get_value (src[0].rt_rtx);
+		  return;
+		}
+	      /* Handle cases which aren't simple "e" sequences or where
+		 the sequence might overrun M_BASE.  */
+	      count = add_subrtxes_to_queue (m_array, m_base, m_end, x);
+	      if (count > 0)
+		{
+		  m_end += count;
+		  if (m_end > LOCAL_ELEMS)
+		    m_base = m_array.heap->address ();
+		  m_current = m_base[--m_end];
+		  return;
+		}
+	    }
+	}
+    }
+  else
+    m_skip = false;
+  if (m_end == 0)
+    m_done = true;
+  else
+    m_current = m_base[--m_end];
+}
+
+/* Skip the subrtxes of the current rtx.  */
+
+template <typename T>
+inline void
+generic_subrtx_iterator <T>::skip_subrtxes ()
+{
+  m_skip = true;
+}
+
+/* Ignore the subrtxes of the current rtx and look at X instead.  */
+
+template <typename T>
+inline void
+generic_subrtx_iterator <T>::substitute (value_type x)
+{
+  m_substitute = true;
+  m_current = x;
+}
+
+/* Iterators for const_rtx.  */
+struct const_rtx_accessor
+{
+  typedef const_rtx value_type;
+  typedef const_rtx rtx_type;
+  typedef const rtunion rtunion_type;
+  static rtx_type get_rtx (value_type x) { return x; }
+  static value_type get_value (rtx_type x) { return x; }
+};
+typedef generic_subrtx_iterator <const_rtx_accessor> subrtx_iterator;
+
+/* Iterators for non-constant rtx.  */
+struct rtx_var_accessor
+{
+  typedef rtx value_type;
+  typedef rtx rtx_type;
+  typedef rtunion rtunion_type;
+  static rtx_type get_rtx (value_type x) { return x; }
+  static value_type get_value (rtx_type x) { return x; }
+};
+typedef generic_subrtx_iterator <rtx_var_accessor> subrtx_var_iterator;
+
+/* Iterators for rtx *.  */
+struct rtx_ptr_accessor
+{
+  typedef rtx *value_type;
+  typedef rtx rtx_type;
+  typedef rtunion rtunion_type;
+  static rtx_type get_rtx (value_type ptr) { return *ptr; }
+  static value_type get_value (rtx_type &x) { return &x; }
+};
+typedef generic_subrtx_iterator <rtx_ptr_accessor> subrtx_ptr_iterator;
+
+#define ALL_BOUNDS rtx_all_subrtx_bounds
+#define NONCONST_BOUNDS rtx_nonconst_subrtx_bounds
+
+/* Use ITER to iterate over const_rtx X and its recursive subrtxes,
+   using subrtx_iterator::array ARRAY as the storage for the worklist.
+   ARRAY can be reused for multiple consecutive iterations but shouldn't
+   be shared by two concurrent iterations.  TYPE is ALL if all subrtxes
+   are of interest or NONCONST if it is safe to ignore subrtxes of
+   constants.  */
+#define FOR_EACH_SUBRTX(ITER, ARRAY, X, TYPE) \
+  for (subrtx_iterator ITER (ARRAY, X, TYPE##_BOUNDS); !ITER.at_end (); \
+       ITER.next ())
+
+/* Like FOR_EACH_SUBRTX, but iterate over subrtxes of an rtx X.  */
+#define FOR_EACH_SUBRTX_VAR(ITER, ARRAY, X, TYPE) \
+  for (subrtx_var_iterator ITER (ARRAY, X, TYPE##_BOUNDS); !ITER.at_end (); \
+       ITER.next ())
+
+/* Like FOR_EACH_SUBRTX, but iterate over subrtx pointers of rtx pointer X.
+   For example, if X is &PATTERN (insn) and the pattern is a SET, iterate
+   over &PATTERN (insn), &SET_DEST (PATTERN (insn)), etc.  */
+#define FOR_EACH_SUBRTX_PTR(ITER, ARRAY, X, TYPE) \
+  for (subrtx_ptr_iterator ITER (ARRAY, X, TYPE##_BOUNDS); !ITER.at_end (); \
+       ITER.next ())
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtl.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtl.def
new file mode 100644
index 0000000..f4c9d94
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtl.def
@@ -0,0 +1,1371 @@
+/* This file contains the definitions and documentation for the
+   Register Transfer Expressions (rtx's) that make up the
+   Register Transfer Language (rtl) used in the Back End of the GNU compiler.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+/* Expression definitions and descriptions for all targets are in this file.
+   Some will not be used for some targets.
+
+   The fields in the cpp macro call "DEF_RTL_EXPR()"
+   are used to create declarations in the C source of the compiler.
+
+   The fields are:
+
+   1.  The internal name of the rtx used in the C source.
+   It is a tag in the enumeration "enum rtx_code" defined in "rtl.h".
+   By convention these are in UPPER_CASE.
+
+   2.  The name of the rtx in the external ASCII format read by
+   read_rtx(), and printed by print_rtx().
+   These names are stored in rtx_name[].
+   By convention these are the internal (field 1) names in lower_case.
+
+   3.  The print format, and type of each rtx->u.fld[] (field) in this rtx.
+   These formats are stored in rtx_format[].
+   The meaning of the formats is documented in front of this array in rtl.c
+
+   4.  The class of the rtx.  These are stored in rtx_class and are accessed
+   via the GET_RTX_CLASS macro.  They are defined as follows:
+
+     RTX_CONST_OBJ
+         an rtx code that can be used to represent a constant object
+         (e.g, CONST_INT)
+     RTX_OBJ
+         an rtx code that can be used to represent an object (e.g, REG, MEM)
+     RTX_COMPARE
+         an rtx code for a comparison (e.g, LT, GT)
+     RTX_COMM_COMPARE
+         an rtx code for a commutative comparison (e.g, EQ, NE, ORDERED)
+     RTX_UNARY
+         an rtx code for a unary arithmetic expression (e.g, NEG, NOT)
+     RTX_COMM_ARITH
+         an rtx code for a commutative binary operation (e.g,, PLUS, MULT)
+     RTX_TERNARY
+         an rtx code for a non-bitfield three input operation (IF_THEN_ELSE)
+     RTX_BIN_ARITH
+         an rtx code for a non-commutative binary operation (e.g., MINUS, DIV)
+     RTX_BITFIELD_OPS
+         an rtx code for a bit-field operation (ZERO_EXTRACT, SIGN_EXTRACT)
+     RTX_INSN
+         an rtx code for a machine insn (INSN, JUMP_INSN, CALL_INSN) or
+	 data that will be output as assembly pseudo-ops (DEBUG_INSN)
+     RTX_MATCH
+         an rtx code for something that matches in insns (e.g, MATCH_DUP)
+     RTX_AUTOINC
+         an rtx code for autoincrement addressing modes (e.g. POST_DEC)
+     RTX_EXTRA
+         everything else
+
+   All of the expressions that appear only in machine descriptions,
+   not in RTL used by the compiler itself, are at the end of the file.  */
+
+/* Unknown, or no such operation; the enumeration constant should have
+   value zero.  */
+DEF_RTL_EXPR(UNKNOWN, "UnKnown", "*", RTX_EXTRA)
+
+/* Used in the cselib routines to describe a value.  Objects of this
+   kind are only allocated in cselib.c, in an alloc pool instead of in
+   GC memory.  The only operand of a VALUE is a cselib_val.
+   var-tracking requires this to have a distinct integral value from
+   DECL codes in trees.  */
+DEF_RTL_EXPR(VALUE, "value", "0", RTX_OBJ)
+
+/* The RTL generated for a DEBUG_EXPR_DECL.  It links back to the
+   DEBUG_EXPR_DECL in the first operand.  */
+DEF_RTL_EXPR(DEBUG_EXPR, "debug_expr", "0", RTX_OBJ)
+
+/* ---------------------------------------------------------------------
+   Expressions used in constructing lists.
+   --------------------------------------------------------------------- */
+
+/* A linked list of expressions.  */
+DEF_RTL_EXPR(EXPR_LIST, "expr_list", "ee", RTX_EXTRA)
+
+/* A linked list of instructions.
+   The insns are represented in print by their uids.  */
+DEF_RTL_EXPR(INSN_LIST, "insn_list", "ue", RTX_EXTRA)
+
+/* A linked list of integers.  */
+DEF_RTL_EXPR(INT_LIST, "int_list", "ie", RTX_EXTRA)
+
+/* SEQUENCE is used in late passes of the compiler to group insns for
+   one reason or another.
+
+   For example, after delay slot filling, branch instructions with filled
+   delay slots are represented as a SEQUENCE of length 1 + n_delay_slots,
+   with the branch instruction in XEXPVEC(seq, 0, 0) and the instructions
+   occupying the delay slots in the remaining XEXPVEC slots.
+
+   Another place where a SEQUENCE may appear, is in REG_FRAME_RELATED_EXPR
+   notes, to express complex operations that are not obvious from the insn
+   to which the REG_FRAME_RELATED_EXPR note is attached.  In this usage of
+   SEQUENCE, the sequence vector slots do not hold real instructions but
+   only pseudo-instructions that can be translated to DWARF CFA expressions.
+
+   Some back ends also use SEQUENCE to group insns in bundles.
+
+   Much of the compiler infrastructure is not prepared to handle SEQUENCE
+   objects.  Only passes after pass_free_cfg are expected to handle them.  */
+DEF_RTL_EXPR(SEQUENCE, "sequence", "E", RTX_EXTRA)
+
+/* Represents a non-global base address.  This is only used in alias.c.  */
+DEF_RTL_EXPR(ADDRESS, "address", "i", RTX_EXTRA)
+
+/* ----------------------------------------------------------------------
+   Expression types used for things in the instruction chain.
+
+   All formats must start with "uu" to handle the chain.
+   Each insn expression holds an rtl instruction and its semantics
+   during back-end processing.
+   See macros in "rtl.h" for the meaning of each rtx->u.fld[].
+
+   ---------------------------------------------------------------------- */
+
+/* An annotation for variable assignment tracking.  */
+DEF_RTL_EXPR(DEBUG_INSN, "debug_insn", "uuBeiie", RTX_INSN)
+
+/* An instruction that cannot jump.  */
+DEF_RTL_EXPR(INSN, "insn", "uuBeiie", RTX_INSN)
+
+/* An instruction that can possibly jump.
+   Fields ( rtx->u.fld[] ) have exact same meaning as INSN's.  */
+DEF_RTL_EXPR(JUMP_INSN, "jump_insn", "uuBeiie0", RTX_INSN)
+
+/* An instruction that can possibly call a subroutine
+   but which will not change which instruction comes next
+   in the current function.
+   Field ( rtx->u.fld[8] ) is CALL_INSN_FUNCTION_USAGE.
+   All other fields ( rtx->u.fld[] ) have exact same meaning as INSN's.  */
+DEF_RTL_EXPR(CALL_INSN, "call_insn", "uuBeiiee", RTX_INSN)
+
+/* Placeholder for tablejump JUMP_INSNs.  The pattern of this kind
+   of rtx is always either an ADDR_VEC or an ADDR_DIFF_VEC.  These
+   placeholders do not appear as real instructions inside a basic
+   block, but are considered active_insn_p instructions for historical
+   reasons, when jump table data was represented with JUMP_INSNs.  */
+DEF_RTL_EXPR(JUMP_TABLE_DATA, "jump_table_data", "uuBe0000", RTX_INSN)
+
+/* A marker that indicates that control will not flow through.  */
+DEF_RTL_EXPR(BARRIER, "barrier", "uu00000", RTX_EXTRA)
+
+/* Holds a label that is followed by instructions.
+   Operand:
+   3: is used in jump.c for the use-count of the label.
+   4: is used in the sh backend.
+   5: is a number that is unique in the entire compilation.
+   6: is the user-given name of the label, if any.  */
+DEF_RTL_EXPR(CODE_LABEL, "code_label", "uuB00is", RTX_EXTRA)
+
+/* Say where in the code a source line starts, for symbol table's sake.
+   Operand:
+   3: note-specific data
+   4: enum insn_note
+   5: unique number if insn_note == note_insn_deleted_label.  */
+DEF_RTL_EXPR(NOTE, "note", "uuB0ni", RTX_EXTRA)
+
+/* ----------------------------------------------------------------------
+   Top level constituents of INSN, JUMP_INSN and CALL_INSN.
+   ---------------------------------------------------------------------- */
+
+/* Conditionally execute code.
+   Operand 0 is the condition that if true, the code is executed.
+   Operand 1 is the code to be executed (typically a SET).
+
+   Semantics are that there are no side effects if the condition
+   is false.  This pattern is created automatically by the if_convert
+   pass run after reload or by target-specific splitters.  */
+DEF_RTL_EXPR(COND_EXEC, "cond_exec", "ee", RTX_EXTRA)
+
+/* Several operations to be done in parallel (perhaps under COND_EXEC).  */
+DEF_RTL_EXPR(PARALLEL, "parallel", "E", RTX_EXTRA)
+
+/* A string that is passed through to the assembler as input.
+     One can obviously pass comments through by using the
+     assembler comment syntax.
+     These occur in an insn all by themselves as the PATTERN.
+     They also appear inside an ASM_OPERANDS
+     as a convenient way to hold a string.  */
+DEF_RTL_EXPR(ASM_INPUT, "asm_input", "si", RTX_EXTRA)
+
+/* An assembler instruction with operands.
+   1st operand is the instruction template.
+   2nd operand is the constraint for the output.
+   3rd operand is the number of the output this expression refers to.
+     When an insn stores more than one value, a separate ASM_OPERANDS
+     is made for each output; this integer distinguishes them.
+   4th is a vector of values of input operands.
+   5th is a vector of modes and constraints for the input operands.
+     Each element is an ASM_INPUT containing a constraint string
+     and whose mode indicates the mode of the input operand.
+   6th is a vector of labels that may be branched to by the asm.
+   7th is the source line number.  */
+DEF_RTL_EXPR(ASM_OPERANDS, "asm_operands", "ssiEEEi", RTX_EXTRA)
+
+/* A machine-specific operation.
+   1st operand is a vector of operands being used by the operation so that
+     any needed reloads can be done.
+   2nd operand is a unique value saying which of a number of machine-specific
+     operations is to be performed.
+   (Note that the vector must be the first operand because of the way that
+   genrecog.c record positions within an insn.)
+
+   UNSPEC can occur all by itself in a PATTERN, as a component of a PARALLEL,
+   or inside an expression.
+   UNSPEC by itself or as a component of a PARALLEL
+   is currently considered not deletable.
+
+   FIXME: Replace all uses of UNSPEC that appears by itself or as a component
+   of a PARALLEL with USE.
+   */
+DEF_RTL_EXPR(UNSPEC, "unspec", "Ei", RTX_EXTRA)
+
+/* Similar, but a volatile operation and one which may trap.  */
+DEF_RTL_EXPR(UNSPEC_VOLATILE, "unspec_volatile", "Ei", RTX_EXTRA)
+
+/* ----------------------------------------------------------------------
+   Table jump addresses.
+   ---------------------------------------------------------------------- */
+
+/* Vector of addresses, stored as full words.
+   Each element is a LABEL_REF to a CODE_LABEL whose address we want.  */
+DEF_RTL_EXPR(ADDR_VEC, "addr_vec", "E", RTX_EXTRA)
+
+/* Vector of address differences X0 - BASE, X1 - BASE, ...
+   First operand is BASE; the vector contains the X's.
+   The machine mode of this rtx says how much space to leave
+   for each difference and is adjusted by branch shortening if
+   CASE_VECTOR_SHORTEN_MODE is defined.
+   The third and fourth operands store the target labels with the
+   minimum and maximum addresses respectively.
+   The fifth operand stores flags for use by branch shortening.
+  Set at the start of shorten_branches:
+   min_align: the minimum alignment for any of the target labels.
+   base_after_vec: true iff BASE is after the ADDR_DIFF_VEC.
+   min_after_vec: true iff minimum addr target label is after the ADDR_DIFF_VEC.
+   max_after_vec: true iff maximum addr target label is after the ADDR_DIFF_VEC.
+   min_after_base: true iff minimum address target label is after BASE.
+   max_after_base: true iff maximum address target label is after BASE.
+  Set by the actual branch shortening process:
+   offset_unsigned: true iff offsets have to be treated as unsigned.
+   scale: scaling that is necessary to make offsets fit into the mode.
+
+   The third, fourth and fifth operands are only valid when
+   CASE_VECTOR_SHORTEN_MODE is defined, and only in an optimizing
+   compilation.  */
+DEF_RTL_EXPR(ADDR_DIFF_VEC, "addr_diff_vec", "eEee0", RTX_EXTRA)
+
+/* Memory prefetch, with attributes supported on some targets.
+   Operand 1 is the address of the memory to fetch.
+   Operand 2 is 1 for a write access, 0 otherwise.
+   Operand 3 is the level of temporal locality; 0 means there is no
+   temporal locality and 1, 2, and 3 are for increasing levels of temporal
+   locality.
+
+   The attributes specified by operands 2 and 3 are ignored for targets
+   whose prefetch instructions do not support them.  */
+DEF_RTL_EXPR(PREFETCH, "prefetch", "eee", RTX_EXTRA)
+
+/* ----------------------------------------------------------------------
+   At the top level of an instruction (perhaps under PARALLEL).
+   ---------------------------------------------------------------------- */
+
+/* Assignment.
+   Operand 1 is the location (REG, MEM, PC, CC0 or whatever) assigned to.
+   Operand 2 is the value stored there.
+   ALL assignment must use SET.
+   Instructions that do multiple assignments must use multiple SET,
+   under PARALLEL.  */
+DEF_RTL_EXPR(SET, "set", "ee", RTX_EXTRA)
+
+/* Indicate something is used in a way that we don't want to explain.
+   For example, subroutine calls will use the register
+   in which the static chain is passed.
+
+   USE cannot appear as an operand of other rtx except for PARALLEL.
+   USE is not deletable, as it indicates that the operand
+   is used in some unknown way.  */
+DEF_RTL_EXPR(USE, "use", "e", RTX_EXTRA)
+
+/* Indicate something is clobbered in a way that we don't want to explain.
+   For example, subroutine calls will clobber some physical registers
+   (the ones that are by convention not saved).
+
+   CLOBBER cannot appear as an operand of other rtx except for PARALLEL.
+   CLOBBER of a hard register appearing by itself (not within PARALLEL)
+   is considered undeletable before reload.  */
+DEF_RTL_EXPR(CLOBBER, "clobber", "e", RTX_EXTRA)
+
+/* Indicate that the upper parts of something are clobbered in a way that we
+   don't want to explain.  The MODE references the lower bits that will be
+   preserved.  Anything above that size will be clobbered.
+
+   CLOBBER_HIGH only occurs as the operand of a PARALLEL rtx.  It cannot appear
+   in other contexts, and unlike CLOBBER, it cannot appear on its own.
+   CLOBBER_HIGH can only be used with fixed register rtxes.  */
+
+DEF_RTL_EXPR(CLOBBER_HIGH, "clobber_high", "e", RTX_EXTRA)
+
+/* Call a subroutine.
+   Operand 1 is the address to call.
+   Operand 2 is the number of arguments.  */
+
+DEF_RTL_EXPR(CALL, "call", "ee", RTX_EXTRA)
+
+/* Return from a subroutine.  */
+
+DEF_RTL_EXPR(RETURN, "return", "", RTX_EXTRA)
+
+/* Like RETURN, but truly represents only a function return, while
+   RETURN may represent an insn that also performs other functions
+   of the function epilogue.  Like RETURN, this may also occur in
+   conditional jumps.  */
+DEF_RTL_EXPR(SIMPLE_RETURN, "simple_return", "", RTX_EXTRA)
+
+/* Special for EH return from subroutine.  */
+
+DEF_RTL_EXPR(EH_RETURN, "eh_return", "", RTX_EXTRA)
+
+/* Conditional trap.
+   Operand 1 is the condition.
+   Operand 2 is the trap code.
+   For an unconditional trap, make the condition (const_int 1).  */
+DEF_RTL_EXPR(TRAP_IF, "trap_if", "ee", RTX_EXTRA)
+
+/* ----------------------------------------------------------------------
+   Primitive values for use in expressions.
+   ---------------------------------------------------------------------- */
+
+/* numeric integer constant */
+DEF_RTL_EXPR(CONST_INT, "const_int", "w", RTX_CONST_OBJ)
+
+/* numeric integer constant */
+DEF_RTL_EXPR(CONST_WIDE_INT, "const_wide_int", "", RTX_CONST_OBJ)
+
+/* An rtx representation of a poly_wide_int.  */
+DEF_RTL_EXPR(CONST_POLY_INT, "const_poly_int", "", RTX_CONST_OBJ)
+
+/* fixed-point constant */
+DEF_RTL_EXPR(CONST_FIXED, "const_fixed", "www", RTX_CONST_OBJ)
+
+/* numeric floating point or integer constant.  If the mode is
+   VOIDmode it is an int otherwise it has a floating point mode and a
+   floating point value.  Operands hold the value.  They are all 'w'
+   and there may be from 2 to 6; see real.h.  */
+DEF_RTL_EXPR(CONST_DOUBLE, "const_double", CONST_DOUBLE_FORMAT, RTX_CONST_OBJ)
+
+/* Describes a vector constant.  */
+DEF_RTL_EXPR(CONST_VECTOR, "const_vector", "E", RTX_CONST_OBJ)
+
+/* String constant.  Used for attributes in machine descriptions and
+   for special cases in DWARF2 debug output.  NOT used for source-
+   language string constants.  */
+DEF_RTL_EXPR(CONST_STRING, "const_string", "s", RTX_OBJ)
+
+/* This is used to encapsulate an expression whose value is constant
+   (such as the sum of a SYMBOL_REF and a CONST_INT) so that it will be
+   recognized as a constant operand rather than by arithmetic instructions.  */
+
+DEF_RTL_EXPR(CONST, "const", "e", RTX_CONST_OBJ)
+
+/* program counter.  Ordinary jumps are represented
+   by a SET whose first operand is (PC).  */
+DEF_RTL_EXPR(PC, "pc", "", RTX_OBJ)
+
+/* A register.  The "operand" is the register number, accessed with
+   the REGNO macro.  If this number is less than FIRST_PSEUDO_REGISTER
+   than a hardware register is being referred to.  The second operand
+   points to a reg_attrs structure.
+   This rtx needs to have as many (or more) fields as a MEM, since we
+   can change REG rtx's into MEMs during reload.  */
+DEF_RTL_EXPR(REG, "reg", "r", RTX_OBJ)
+
+/* A scratch register.  This represents a register used only within a
+   single insn.  It will be replaced by a REG during register allocation
+   or reload unless the constraint indicates that the register won't be
+   needed, in which case it can remain a SCRATCH.  */
+DEF_RTL_EXPR(SCRATCH, "scratch", "", RTX_OBJ)
+
+/* A reference to a part of another value.  The first operand is the
+   complete value and the second is the byte offset of the selected part.   */
+DEF_RTL_EXPR(SUBREG, "subreg", "ep", RTX_EXTRA)
+
+/* This one-argument rtx is used for move instructions
+   that are guaranteed to alter only the low part of a destination.
+   Thus, (SET (SUBREG:HI (REG...)) (MEM:HI ...))
+   has an unspecified effect on the high part of REG,
+   but (SET (STRICT_LOW_PART (SUBREG:HI (REG...))) (MEM:HI ...))
+   is guaranteed to alter only the bits of REG that are in HImode.
+
+   The actual instruction used is probably the same in both cases,
+   but the register constraints may be tighter when STRICT_LOW_PART
+   is in use.  */
+
+DEF_RTL_EXPR(STRICT_LOW_PART, "strict_low_part", "e", RTX_EXTRA)
+
+/* (CONCAT a b) represents the virtual concatenation of a and b
+   to make a value that has as many bits as a and b put together.
+   This is used for complex values.  Normally it appears only
+   in DECL_RTLs and during RTL generation, but not in the insn chain.  */
+DEF_RTL_EXPR(CONCAT, "concat", "ee", RTX_OBJ)
+
+/* (CONCATN [a1 a2 ... an]) represents the virtual concatenation of
+   all An to make a value.  This is an extension of CONCAT to larger
+   number of components.  Like CONCAT, it should not appear in the
+   insn chain.  Every element of the CONCATN is the same size.  */
+DEF_RTL_EXPR(CONCATN, "concatn", "E", RTX_OBJ)
+
+/* A memory location; operand is the address.  The second operand is the
+   alias set to which this MEM belongs.  We use `0' instead of `w' for this
+   field so that the field need not be specified in machine descriptions.  */
+DEF_RTL_EXPR(MEM, "mem", "e0", RTX_OBJ)
+
+/* Reference to an assembler label in the code for this function.
+   The operand is a CODE_LABEL found in the insn chain.  */
+DEF_RTL_EXPR(LABEL_REF, "label_ref", "u", RTX_CONST_OBJ)
+
+/* Reference to a named label:
+   Operand 0: label name
+   Operand 1: tree from which this symbol is derived, or null.
+   This is either a DECL node, or some kind of constant.  */
+DEF_RTL_EXPR(SYMBOL_REF, "symbol_ref", "s0", RTX_CONST_OBJ)
+
+/* The condition code register is represented, in our imagination,
+   as a register holding a value that can be compared to zero.
+   In fact, the machine has already compared them and recorded the
+   results; but instructions that look at the condition code
+   pretend to be looking at the entire value and comparing it.  */
+DEF_RTL_EXPR(CC0, "cc0", "", RTX_OBJ)
+
+/* ----------------------------------------------------------------------
+   Expressions for operators in an rtl pattern
+   ---------------------------------------------------------------------- */
+
+/* if_then_else.  This is used in representing ordinary
+   conditional jump instructions.
+     Operand:
+     0:  condition
+     1:  then expr
+     2:  else expr */
+DEF_RTL_EXPR(IF_THEN_ELSE, "if_then_else", "eee", RTX_TERNARY)
+
+/* Comparison, produces a condition code result.  */
+DEF_RTL_EXPR(COMPARE, "compare", "ee", RTX_BIN_ARITH)
+
+/* plus */
+DEF_RTL_EXPR(PLUS, "plus", "ee", RTX_COMM_ARITH)
+
+/* Operand 0 minus operand 1.  */
+DEF_RTL_EXPR(MINUS, "minus", "ee", RTX_BIN_ARITH)
+
+/* Minus operand 0.  */
+DEF_RTL_EXPR(NEG, "neg", "e", RTX_UNARY)
+
+DEF_RTL_EXPR(MULT, "mult", "ee", RTX_COMM_ARITH)
+
+/* Multiplication with signed saturation */
+DEF_RTL_EXPR(SS_MULT, "ss_mult", "ee", RTX_COMM_ARITH)
+/* Multiplication with unsigned saturation */
+DEF_RTL_EXPR(US_MULT, "us_mult", "ee", RTX_COMM_ARITH)
+
+/* Operand 0 divided by operand 1.  */
+DEF_RTL_EXPR(DIV, "div", "ee", RTX_BIN_ARITH)
+/* Division with signed saturation */
+DEF_RTL_EXPR(SS_DIV, "ss_div", "ee", RTX_BIN_ARITH)
+/* Division with unsigned saturation */
+DEF_RTL_EXPR(US_DIV, "us_div", "ee", RTX_BIN_ARITH)
+
+/* Remainder of operand 0 divided by operand 1.  */
+DEF_RTL_EXPR(MOD, "mod", "ee", RTX_BIN_ARITH)
+
+/* Unsigned divide and remainder.  */
+DEF_RTL_EXPR(UDIV, "udiv", "ee", RTX_BIN_ARITH)
+DEF_RTL_EXPR(UMOD, "umod", "ee", RTX_BIN_ARITH)
+
+/* Bitwise operations.  */
+DEF_RTL_EXPR(AND, "and", "ee", RTX_COMM_ARITH)
+DEF_RTL_EXPR(IOR, "ior", "ee", RTX_COMM_ARITH)
+DEF_RTL_EXPR(XOR, "xor", "ee", RTX_COMM_ARITH)
+DEF_RTL_EXPR(NOT, "not", "e", RTX_UNARY)
+
+/* Operand:
+     0:  value to be shifted.
+     1:  number of bits.  */
+DEF_RTL_EXPR(ASHIFT, "ashift", "ee", RTX_BIN_ARITH) /* shift left */
+DEF_RTL_EXPR(ROTATE, "rotate", "ee", RTX_BIN_ARITH) /* rotate left */
+DEF_RTL_EXPR(ASHIFTRT, "ashiftrt", "ee", RTX_BIN_ARITH) /* arithmetic shift right */
+DEF_RTL_EXPR(LSHIFTRT, "lshiftrt", "ee", RTX_BIN_ARITH) /* logical shift right */
+DEF_RTL_EXPR(ROTATERT, "rotatert", "ee", RTX_BIN_ARITH) /* rotate right */
+
+/* Minimum and maximum values of two operands.  We need both signed and
+   unsigned forms.  (We cannot use MIN for SMIN because it conflicts
+   with a macro of the same name.)   The signed variants should be used
+   with floating point.  Further, if both operands are zeros, or if either
+   operand is NaN, then it is unspecified which of the two operands is
+   returned as the result.  */
+
+DEF_RTL_EXPR(SMIN, "smin", "ee", RTX_COMM_ARITH)
+DEF_RTL_EXPR(SMAX, "smax", "ee", RTX_COMM_ARITH)
+DEF_RTL_EXPR(UMIN, "umin", "ee", RTX_COMM_ARITH)
+DEF_RTL_EXPR(UMAX, "umax", "ee", RTX_COMM_ARITH)
+
+/* These unary operations are used to represent incrementation
+   and decrementation as they occur in memory addresses.
+   The amount of increment or decrement are not represented
+   because they can be understood from the machine-mode of the
+   containing MEM.  These operations exist in only two cases:
+   1. pushes onto the stack.
+   2. created automatically by the auto-inc-dec pass.  */
+DEF_RTL_EXPR(PRE_DEC, "pre_dec", "e", RTX_AUTOINC)
+DEF_RTL_EXPR(PRE_INC, "pre_inc", "e", RTX_AUTOINC)
+DEF_RTL_EXPR(POST_DEC, "post_dec", "e", RTX_AUTOINC)
+DEF_RTL_EXPR(POST_INC, "post_inc", "e", RTX_AUTOINC)
+
+/* These binary operations are used to represent generic address
+   side-effects in memory addresses, except for simple incrementation
+   or decrementation which use the above operations.  They are
+   created automatically by the life_analysis pass in flow.c.
+   The first operand is a REG which is used as the address.
+   The second operand is an expression that is assigned to the
+   register, either before (PRE_MODIFY) or after (POST_MODIFY)
+   evaluating the address.
+   Currently, the compiler can only handle second operands of the
+   form (plus (reg) (reg)) and (plus (reg) (const_int)), where
+   the first operand of the PLUS has to be the same register as
+   the first operand of the *_MODIFY.  */
+DEF_RTL_EXPR(PRE_MODIFY, "pre_modify", "ee", RTX_AUTOINC)
+DEF_RTL_EXPR(POST_MODIFY, "post_modify", "ee", RTX_AUTOINC)
+
+/* Comparison operations.  The ordered comparisons exist in two
+   flavors, signed and unsigned.  */
+DEF_RTL_EXPR(NE, "ne", "ee", RTX_COMM_COMPARE)
+DEF_RTL_EXPR(EQ, "eq", "ee", RTX_COMM_COMPARE)
+DEF_RTL_EXPR(GE, "ge", "ee", RTX_COMPARE)
+DEF_RTL_EXPR(GT, "gt", "ee", RTX_COMPARE)
+DEF_RTL_EXPR(LE, "le", "ee", RTX_COMPARE)
+DEF_RTL_EXPR(LT, "lt", "ee", RTX_COMPARE)
+DEF_RTL_EXPR(GEU, "geu", "ee", RTX_COMPARE)
+DEF_RTL_EXPR(GTU, "gtu", "ee", RTX_COMPARE)
+DEF_RTL_EXPR(LEU, "leu", "ee", RTX_COMPARE)
+DEF_RTL_EXPR(LTU, "ltu", "ee", RTX_COMPARE)
+
+/* Additional floating point unordered comparison flavors.  */
+DEF_RTL_EXPR(UNORDERED, "unordered", "ee", RTX_COMM_COMPARE)
+DEF_RTL_EXPR(ORDERED, "ordered", "ee", RTX_COMM_COMPARE)
+
+/* These are equivalent to unordered or ...  */
+DEF_RTL_EXPR(UNEQ, "uneq", "ee", RTX_COMM_COMPARE)
+DEF_RTL_EXPR(UNGE, "unge", "ee", RTX_COMPARE)
+DEF_RTL_EXPR(UNGT, "ungt", "ee", RTX_COMPARE)
+DEF_RTL_EXPR(UNLE, "unle", "ee", RTX_COMPARE)
+DEF_RTL_EXPR(UNLT, "unlt", "ee", RTX_COMPARE)
+
+/* This is an ordered NE, ie !UNEQ, ie false for NaN.  */
+DEF_RTL_EXPR(LTGT, "ltgt", "ee", RTX_COMM_COMPARE)
+
+/* Represents the result of sign-extending the sole operand.
+   The machine modes of the operand and of the SIGN_EXTEND expression
+   determine how much sign-extension is going on.  */
+DEF_RTL_EXPR(SIGN_EXTEND, "sign_extend", "e", RTX_UNARY)
+
+/* Similar for zero-extension (such as unsigned short to int).  */
+DEF_RTL_EXPR(ZERO_EXTEND, "zero_extend", "e", RTX_UNARY)
+
+/* Similar but here the operand has a wider mode.  */
+DEF_RTL_EXPR(TRUNCATE, "truncate", "e", RTX_UNARY)
+
+/* Similar for extending floating-point values (such as SFmode to DFmode).  */
+DEF_RTL_EXPR(FLOAT_EXTEND, "float_extend", "e", RTX_UNARY)
+DEF_RTL_EXPR(FLOAT_TRUNCATE, "float_truncate", "e", RTX_UNARY)
+
+/* Conversion of fixed point operand to floating point value.  */
+DEF_RTL_EXPR(FLOAT, "float", "e", RTX_UNARY)
+
+/* With fixed-point machine mode:
+   Conversion of floating point operand to fixed point value.
+   Value is defined only when the operand's value is an integer.
+   With floating-point machine mode (and operand with same mode):
+   Operand is rounded toward zero to produce an integer value
+   represented in floating point.  */
+DEF_RTL_EXPR(FIX, "fix", "e", RTX_UNARY)
+
+/* Conversion of unsigned fixed point operand to floating point value.  */
+DEF_RTL_EXPR(UNSIGNED_FLOAT, "unsigned_float", "e", RTX_UNARY)
+
+/* With fixed-point machine mode:
+   Conversion of floating point operand to *unsigned* fixed point value.
+   Value is defined only when the operand's value is an integer.  */
+DEF_RTL_EXPR(UNSIGNED_FIX, "unsigned_fix", "e", RTX_UNARY)
+
+/* Conversions involving fractional fixed-point types without saturation,
+   including:
+     fractional to fractional (of different precision),
+     signed integer to fractional,
+     fractional to signed integer,
+     floating point to fractional,
+     fractional to floating point.
+   NOTE: fractional can be either signed or unsigned for conversions.  */
+DEF_RTL_EXPR(FRACT_CONVERT, "fract_convert", "e", RTX_UNARY)
+
+/* Conversions involving fractional fixed-point types and unsigned integer
+   without saturation, including:
+     unsigned integer to fractional,
+     fractional to unsigned integer.
+   NOTE: fractional can be either signed or unsigned for conversions.  */
+DEF_RTL_EXPR(UNSIGNED_FRACT_CONVERT, "unsigned_fract_convert", "e", RTX_UNARY)
+
+/* Conversions involving fractional fixed-point types with saturation,
+   including:
+     fractional to fractional (of different precision),
+     signed integer to fractional,
+     floating point to fractional.
+   NOTE: fractional can be either signed or unsigned for conversions.  */
+DEF_RTL_EXPR(SAT_FRACT, "sat_fract", "e", RTX_UNARY)
+
+/* Conversions involving fractional fixed-point types and unsigned integer
+   with saturation, including:
+     unsigned integer to fractional.
+   NOTE: fractional can be either signed or unsigned for conversions.  */
+DEF_RTL_EXPR(UNSIGNED_SAT_FRACT, "unsigned_sat_fract", "e", RTX_UNARY)
+
+/* Absolute value */
+DEF_RTL_EXPR(ABS, "abs", "e", RTX_UNARY)
+
+/* Square root */
+DEF_RTL_EXPR(SQRT, "sqrt", "e", RTX_UNARY)
+
+/* Swap bytes.  */
+DEF_RTL_EXPR(BSWAP, "bswap", "e", RTX_UNARY)
+
+/* Find first bit that is set.
+   Value is 1 + number of trailing zeros in the arg.,
+   or 0 if arg is 0.  */
+DEF_RTL_EXPR(FFS, "ffs", "e", RTX_UNARY)
+
+/* Count number of leading redundant sign bits (number of leading
+   sign bits minus one).  */
+DEF_RTL_EXPR(CLRSB, "clrsb", "e", RTX_UNARY)
+
+/* Count leading zeros.  */
+DEF_RTL_EXPR(CLZ, "clz", "e", RTX_UNARY)
+
+/* Count trailing zeros.  */
+DEF_RTL_EXPR(CTZ, "ctz", "e", RTX_UNARY)
+
+/* Population count (number of 1 bits).  */
+DEF_RTL_EXPR(POPCOUNT, "popcount", "e", RTX_UNARY)
+
+/* Population parity (number of 1 bits modulo 2).  */
+DEF_RTL_EXPR(PARITY, "parity", "e", RTX_UNARY)
+
+/* Reference to a signed bit-field of specified size and position.
+   Operand 0 is the memory unit (usually SImode or QImode) which
+   contains the field's first bit.  Operand 1 is the width, in bits.
+   Operand 2 is the number of bits in the memory unit before the
+   first bit of this field.
+   If BITS_BIG_ENDIAN is defined, the first bit is the msb and
+   operand 2 counts from the msb of the memory unit.
+   Otherwise, the first bit is the lsb and operand 2 counts from
+   the lsb of the memory unit.
+   This kind of expression cannot appear as an lvalue in RTL.  */
+DEF_RTL_EXPR(SIGN_EXTRACT, "sign_extract", "eee", RTX_BITFIELD_OPS)
+
+/* Similar for unsigned bit-field.
+   But note!  This kind of expression _can_ appear as an lvalue.  */
+DEF_RTL_EXPR(ZERO_EXTRACT, "zero_extract", "eee", RTX_BITFIELD_OPS)
+
+/* For RISC machines.  These save memory when splitting insns.  */
+
+/* HIGH are the high-order bits of a constant expression.  */
+DEF_RTL_EXPR(HIGH, "high", "e", RTX_CONST_OBJ)
+
+/* LO_SUM is the sum of a register and the low-order bits
+   of a constant expression.  */
+DEF_RTL_EXPR(LO_SUM, "lo_sum", "ee", RTX_OBJ)
+
+/* Describes a merge operation between two vector values.
+   Operands 0 and 1 are the vectors to be merged, operand 2 is a bitmask
+   that specifies where the parts of the result are taken from.  Set bits
+   indicate operand 0, clear bits indicate operand 1.  The parts are defined
+   by the mode of the vectors.  */
+DEF_RTL_EXPR(VEC_MERGE, "vec_merge", "eee", RTX_TERNARY)
+
+/* Describes an operation that selects parts of a vector.
+   Operands 0 is the source vector, operand 1 is a PARALLEL that contains
+   a CONST_INT for each of the subparts of the result vector, giving the
+   number of the source subpart that should be stored into it.  */
+DEF_RTL_EXPR(VEC_SELECT, "vec_select", "ee", RTX_BIN_ARITH)
+
+/* Describes a vector concat operation.  Operands 0 and 1 are the source
+   vectors, the result is a vector that is as long as operands 0 and 1
+   combined and is the concatenation of the two source vectors.  */
+DEF_RTL_EXPR(VEC_CONCAT, "vec_concat", "ee", RTX_BIN_ARITH)
+
+/* Describes an operation that converts a small vector into a larger one by
+   duplicating the input values.  The output vector mode must have the same
+   submodes as the input vector mode, and the number of output parts must be
+   an integer multiple of the number of input parts.  */
+DEF_RTL_EXPR(VEC_DUPLICATE, "vec_duplicate", "e", RTX_UNARY)
+
+/* Creation of a vector in which element I has the value BASE + I * STEP,
+   where BASE is the first operand and STEP is the second.  The result
+   must have a vector integer mode.  */
+DEF_RTL_EXPR(VEC_SERIES, "vec_series", "ee", RTX_BIN_ARITH)
+
+/* Addition with signed saturation */
+DEF_RTL_EXPR(SS_PLUS, "ss_plus", "ee", RTX_COMM_ARITH)
+
+/* Addition with unsigned saturation */
+DEF_RTL_EXPR(US_PLUS, "us_plus", "ee", RTX_COMM_ARITH)
+
+/* Operand 0 minus operand 1, with signed saturation.  */
+DEF_RTL_EXPR(SS_MINUS, "ss_minus", "ee", RTX_BIN_ARITH)
+
+/* Negation with signed saturation.  */
+DEF_RTL_EXPR(SS_NEG, "ss_neg", "e", RTX_UNARY)
+/* Negation with unsigned saturation.  */
+DEF_RTL_EXPR(US_NEG, "us_neg", "e", RTX_UNARY)
+
+/* Absolute value with signed saturation.  */
+DEF_RTL_EXPR(SS_ABS, "ss_abs", "e", RTX_UNARY)
+
+/* Shift left with signed saturation.  */
+DEF_RTL_EXPR(SS_ASHIFT, "ss_ashift", "ee", RTX_BIN_ARITH)
+
+/* Shift left with unsigned saturation.  */
+DEF_RTL_EXPR(US_ASHIFT, "us_ashift", "ee", RTX_BIN_ARITH)
+
+/* Operand 0 minus operand 1, with unsigned saturation.  */
+DEF_RTL_EXPR(US_MINUS, "us_minus", "ee", RTX_BIN_ARITH)
+
+/* Signed saturating truncate.  */
+DEF_RTL_EXPR(SS_TRUNCATE, "ss_truncate", "e", RTX_UNARY)
+
+/* Unsigned saturating truncate.  */
+DEF_RTL_EXPR(US_TRUNCATE, "us_truncate", "e", RTX_UNARY)
+
+/* Floating point multiply/add combined instruction.  */
+DEF_RTL_EXPR(FMA, "fma", "eee", RTX_TERNARY)
+
+/* Information about the variable and its location.  */
+DEF_RTL_EXPR(VAR_LOCATION, "var_location", "te", RTX_EXTRA)
+
+/* Used in VAR_LOCATION for a pointer to a decl that is no longer
+   addressable.  */
+DEF_RTL_EXPR(DEBUG_IMPLICIT_PTR, "debug_implicit_ptr", "t", RTX_OBJ)
+
+/* Represents value that argument had on function entry.  The
+   single argument is the DECL_INCOMING_RTL of the corresponding
+   parameter.  */
+DEF_RTL_EXPR(ENTRY_VALUE, "entry_value", "0", RTX_OBJ)
+
+/* Used in VAR_LOCATION for a reference to a parameter that has
+   been optimized away completely.  */
+DEF_RTL_EXPR(DEBUG_PARAMETER_REF, "debug_parameter_ref", "t", RTX_OBJ)
+
+/* Used in marker DEBUG_INSNs to avoid being recognized as an insn.  */
+DEF_RTL_EXPR(DEBUG_MARKER, "debug_marker", "", RTX_EXTRA)
+
+/* All expressions from this point forward appear only in machine
+   descriptions.  */
+#ifdef GENERATOR_FILE
+
+/* Pattern-matching operators:  */
+
+/* Use the function named by the second arg (the string)
+   as a predicate; if matched, store the structure that was matched
+   in the operand table at index specified by the first arg (the integer).
+   If the second arg is the null string, the structure is just stored.
+
+   A third string argument indicates to the register allocator restrictions
+   on where the operand can be allocated.
+
+   If the target needs no restriction on any instruction this field should
+   be the null string.
+
+   The string is prepended by:
+   '=' to indicate the operand is only written to.
+   '+' to indicate the operand is both read and written to.
+
+   Each character in the string represents an allocable class for an operand.
+   'g' indicates the operand can be any valid class.
+   'i' indicates the operand can be immediate (in the instruction) data.
+   'r' indicates the operand can be in a register.
+   'm' indicates the operand can be in memory.
+   'o' a subset of the 'm' class.  Those memory addressing modes that
+       can be offset at compile time (have a constant added to them).
+
+   Other characters indicate target dependent operand classes and
+   are described in each target's machine description.
+
+   For instructions with more than one operand, sets of classes can be
+   separated by a comma to indicate the appropriate multi-operand constraints.
+   There must be a 1 to 1 correspondence between these sets of classes in
+   all operands for an instruction.
+   */
+DEF_RTL_EXPR(MATCH_OPERAND, "match_operand", "iss", RTX_MATCH)
+
+/* Match a SCRATCH or a register.  When used to generate rtl, a
+   SCRATCH is generated.  As for MATCH_OPERAND, the mode specifies
+   the desired mode and the first argument is the operand number.
+   The second argument is the constraint.  */
+DEF_RTL_EXPR(MATCH_SCRATCH, "match_scratch", "is", RTX_MATCH)
+
+/* Apply a predicate, AND match recursively the operands of the rtx.
+   Operand 0 is the operand-number, as in match_operand.
+   Operand 1 is a predicate to apply (as a string, a function name).
+   Operand 2 is a vector of expressions, each of which must match
+   one subexpression of the rtx this construct is matching.  */
+DEF_RTL_EXPR(MATCH_OPERATOR, "match_operator", "isE", RTX_MATCH)
+
+/* Match a PARALLEL of arbitrary length.  The predicate is applied
+   to the PARALLEL and the initial expressions in the PARALLEL are matched.
+   Operand 0 is the operand-number, as in match_operand.
+   Operand 1 is a predicate to apply to the PARALLEL.
+   Operand 2 is a vector of expressions, each of which must match the
+   corresponding element in the PARALLEL.  */
+DEF_RTL_EXPR(MATCH_PARALLEL, "match_parallel", "isE", RTX_MATCH)
+
+/* Match only something equal to what is stored in the operand table
+   at the index specified by the argument.  Use with MATCH_OPERAND.  */
+DEF_RTL_EXPR(MATCH_DUP, "match_dup", "i", RTX_MATCH)
+
+/* Match only something equal to what is stored in the operand table
+   at the index specified by the argument.  Use with MATCH_OPERATOR.  */
+DEF_RTL_EXPR(MATCH_OP_DUP, "match_op_dup", "iE", RTX_MATCH)
+
+/* Match only something equal to what is stored in the operand table
+   at the index specified by the argument.  Use with MATCH_PARALLEL.  */
+DEF_RTL_EXPR(MATCH_PAR_DUP, "match_par_dup", "iE", RTX_MATCH)
+
+/* Appears only in define_predicate/define_special_predicate
+   expressions.  Evaluates true only if the operand has an RTX code
+   from the set given by the argument (a comma-separated list).  If the
+   second argument is present and nonempty, it is a sequence of digits
+   and/or letters which indicates the subexpression to test, using the
+   same syntax as genextract/genrecog's location strings: 0-9 for
+   XEXP (op, n), a-z for XVECEXP (op, 0, n); each character applies to
+   the result of the one before it.  */
+DEF_RTL_EXPR(MATCH_CODE, "match_code", "ss", RTX_MATCH)
+
+/* Used to inject a C conditional expression into an .md file.  It can
+   appear in a predicate definition or an attribute expression.  */
+DEF_RTL_EXPR(MATCH_TEST, "match_test", "s", RTX_MATCH)
+
+/* Insn (and related) definitions.  */
+
+/* Definition of the pattern for one kind of instruction.
+   Operand:
+   0: names this instruction.
+      If the name is the null string, the instruction is in the
+      machine description just to be recognized, and will never be emitted by
+      the tree to rtl expander.
+   1: is the pattern.
+   2: is a string which is a C expression
+      giving an additional condition for recognizing this pattern.
+      A null string means no extra condition.
+   3: is the action to execute if this pattern is matched.
+      If this assembler code template starts with a * then it is a fragment of
+      C code to run to decide on a template to use.  Otherwise, it is the
+      template to use.
+   4: optionally, a vector of attributes for this insn.
+     */
+DEF_RTL_EXPR(DEFINE_INSN, "define_insn", "sEsTV", RTX_EXTRA)
+
+/* Definition of a peephole optimization.
+   1st operand: vector of insn patterns to match
+   2nd operand: C expression that must be true
+   3rd operand: template or C code to produce assembler output.
+   4: optionally, a vector of attributes for this insn.
+
+   This form is deprecated; use define_peephole2 instead.  */
+DEF_RTL_EXPR(DEFINE_PEEPHOLE, "define_peephole", "EsTV", RTX_EXTRA)
+
+/* Definition of a split operation.
+   1st operand: insn pattern to match
+   2nd operand: C expression that must be true
+   3rd operand: vector of insn patterns to place into a SEQUENCE
+   4th operand: optionally, some C code to execute before generating the
+	insns.  This might, for example, create some RTX's and store them in
+	elements of `recog_data.operand' for use by the vector of
+	insn-patterns.
+	(`operands' is an alias here for `recog_data.operand').  */
+DEF_RTL_EXPR(DEFINE_SPLIT, "define_split", "EsES", RTX_EXTRA)
+
+/* Definition of an insn and associated split.
+   This is the concatenation, with a few modifications, of a define_insn
+   and a define_split which share the same pattern.
+   Operand:
+   0: names this instruction.
+      If the name is the null string, the instruction is in the
+      machine description just to be recognized, and will never be emitted by
+      the tree to rtl expander.
+   1: is the pattern.
+   2: is a string which is a C expression
+      giving an additional condition for recognizing this pattern.
+      A null string means no extra condition.
+   3: is the action to execute if this pattern is matched.
+      If this assembler code template starts with a * then it is a fragment of
+      C code to run to decide on a template to use.  Otherwise, it is the
+      template to use.
+   4: C expression that must be true for split.  This may start with "&&"
+      in which case the split condition is the logical and of the insn
+      condition and what follows the "&&" of this operand.
+   5: vector of insn patterns to place into a SEQUENCE
+   6: optionally, some C code to execute before generating the
+	insns.  This might, for example, create some RTX's and store them in
+	elements of `recog_data.operand' for use by the vector of
+	insn-patterns.
+	(`operands' is an alias here for `recog_data.operand').
+   7: optionally, a vector of attributes for this insn.  */
+DEF_RTL_EXPR(DEFINE_INSN_AND_SPLIT, "define_insn_and_split", "sEsTsESV", RTX_EXTRA)
+
+/* Definition of an RTL peephole operation.
+   Follows the same arguments as define_split.  */
+DEF_RTL_EXPR(DEFINE_PEEPHOLE2, "define_peephole2", "EsES", RTX_EXTRA)
+
+/* Define how to generate multiple insns for a standard insn name.
+   1st operand: the insn name.
+   2nd operand: vector of insn-patterns.
+	Use match_operand to substitute an element of `recog_data.operand'.
+   3rd operand: C expression that must be true for this to be available.
+	This may not test any operands.
+   4th operand: Extra C code to execute before generating the insns.
+	This might, for example, create some RTX's and store them in
+	elements of `recog_data.operand' for use by the vector of
+	insn-patterns.
+	(`operands' is an alias here for `recog_data.operand').
+   5th: optionally, a vector of attributes for this expand.  */
+DEF_RTL_EXPR(DEFINE_EXPAND, "define_expand", "sEssV", RTX_EXTRA)
+
+/* Define a requirement for delay slots.
+   1st operand: Condition involving insn attributes that, if true,
+	        indicates that the insn requires the number of delay slots
+		shown.
+   2nd operand: Vector whose length is the three times the number of delay
+		slots required.
+	        Each entry gives three conditions, each involving attributes.
+		The first must be true for an insn to occupy that delay slot
+		location.  The second is true for all insns that can be
+		annulled if the branch is true and the third is true for all
+		insns that can be annulled if the branch is false.
+
+   Multiple DEFINE_DELAYs may be present.  They indicate differing
+   requirements for delay slots.  */
+DEF_RTL_EXPR(DEFINE_DELAY, "define_delay", "eE", RTX_EXTRA)
+
+/* Define attribute computation for `asm' instructions.  */
+DEF_RTL_EXPR(DEFINE_ASM_ATTRIBUTES, "define_asm_attributes", "V", RTX_EXTRA)
+
+/* Definition of a conditional execution meta operation.  Automatically
+   generates new instances of DEFINE_INSN, selected by having attribute
+   "predicable" true.  The new pattern will contain a COND_EXEC and the
+   predicate at top-level.
+
+   Operand:
+   0: The predicate pattern.  The top-level form should match a
+      relational operator.  Operands should have only one alternative.
+   1: A C expression giving an additional condition for recognizing
+      the generated pattern.
+   2: A template or C code to produce assembler output.
+   3: A vector of attributes to append to the resulting cond_exec insn.  */
+DEF_RTL_EXPR(DEFINE_COND_EXEC, "define_cond_exec", "EssV", RTX_EXTRA)
+
+/* Definition of an operand predicate.  The difference between
+   DEFINE_PREDICATE and DEFINE_SPECIAL_PREDICATE is that genrecog will
+   not warn about a match_operand with no mode if it has a predicate
+   defined with DEFINE_SPECIAL_PREDICATE.
+
+   Operand:
+   0: The name of the predicate.
+   1: A boolean expression which computes whether or not the predicate
+      matches.  This expression can use IOR, AND, NOT, MATCH_OPERAND,
+      MATCH_CODE, and MATCH_TEST.  It must be specific enough that genrecog
+      can calculate the set of RTX codes that can possibly match.
+   2: A C function body which must return true for the predicate to match.
+      Optional.  Use this when the test is too complicated to fit into a
+      match_test expression.  */
+DEF_RTL_EXPR(DEFINE_PREDICATE, "define_predicate", "ses", RTX_EXTRA)
+DEF_RTL_EXPR(DEFINE_SPECIAL_PREDICATE, "define_special_predicate", "ses", RTX_EXTRA)
+
+/* Definition of a register operand constraint.  This simply maps the
+   constraint string to a register class.
+
+   Operand:
+   0: The name of the constraint (often, but not always, a single letter).
+   1: A C expression which evaluates to the appropriate register class for
+      this constraint.  If this is not just a constant, it should look only
+      at -m switches and the like.
+   2: A docstring for this constraint, in Texinfo syntax; not currently
+      used, in future will be incorporated into the manual's list of
+      machine-specific operand constraints.  */
+DEF_RTL_EXPR(DEFINE_REGISTER_CONSTRAINT, "define_register_constraint", "sss", RTX_EXTRA)
+
+/* Definition of a non-register operand constraint.  These look at the
+   operand and decide whether it fits the constraint.
+
+   DEFINE_CONSTRAINT gets no special treatment if it fails to match.
+   It is appropriate for constant-only constraints, and most others.
+
+   DEFINE_MEMORY_CONSTRAINT tells reload that this constraint can be made
+   to match, if it doesn't already, by converting the operand to the form
+   (mem (reg X)) where X is a base register.  It is suitable for constraints
+   that describe a subset of all memory references.
+
+   DEFINE_ADDRESS_CONSTRAINT tells reload that this constraint can be made
+   to match, if it doesn't already, by converting the operand to the form
+   (reg X) where X is a base register.  It is suitable for constraints that
+   describe a subset of all address references.
+
+   When in doubt, use plain DEFINE_CONSTRAINT.
+
+   Operand:
+   0: The name of the constraint (often, but not always, a single letter).
+   1: A docstring for this constraint, in Texinfo syntax; not currently
+      used, in future will be incorporated into the manual's list of
+      machine-specific operand constraints.
+   2: A boolean expression which computes whether or not the constraint
+      matches.  It should follow the same rules as a define_predicate
+      expression, including the bit about specifying the set of RTX codes
+      that could possibly match.  MATCH_TEST subexpressions may make use of
+      these variables:
+        `op'    - the RTL object defining the operand.
+        `mode'  - the mode of `op'.
+	`ival'  - INTVAL(op), if op is a CONST_INT.
+        `hval'  - CONST_DOUBLE_HIGH(op), if op is an integer CONST_DOUBLE.
+        `lval'  - CONST_DOUBLE_LOW(op), if op is an integer CONST_DOUBLE.
+        `rval'  - CONST_DOUBLE_REAL_VALUE(op), if op is a floating-point
+                  CONST_DOUBLE.
+      Do not use ival/hval/lval/rval if op is not the appropriate kind of
+      RTL object.  */
+DEF_RTL_EXPR(DEFINE_CONSTRAINT, "define_constraint", "sse", RTX_EXTRA)
+DEF_RTL_EXPR(DEFINE_MEMORY_CONSTRAINT, "define_memory_constraint", "sse", RTX_EXTRA)
+DEF_RTL_EXPR(DEFINE_SPECIAL_MEMORY_CONSTRAINT, "define_special_memory_constraint", "sse", RTX_EXTRA)
+DEF_RTL_EXPR(DEFINE_ADDRESS_CONSTRAINT, "define_address_constraint", "sse", RTX_EXTRA)
+
+
+/* Constructions for CPU pipeline description described by NDFAs.  */
+
+/* (define_cpu_unit string [string]) describes cpu functional
+   units (separated by comma).
+
+   1st operand: Names of cpu functional units.
+   2nd operand: Name of automaton (see comments for DEFINE_AUTOMATON).
+
+   All define_reservations, define_cpu_units, and
+   define_query_cpu_units should have unique names which may not be
+   "nothing".  */
+DEF_RTL_EXPR(DEFINE_CPU_UNIT, "define_cpu_unit", "sS", RTX_EXTRA)
+
+/* (define_query_cpu_unit string [string]) describes cpu functional
+   units analogously to define_cpu_unit.  The reservation of such
+   units can be queried for automaton state.  */
+DEF_RTL_EXPR(DEFINE_QUERY_CPU_UNIT, "define_query_cpu_unit", "sS", RTX_EXTRA)
+
+/* (exclusion_set string string) means that each CPU functional unit
+   in the first string cannot be reserved simultaneously with any
+   unit whose name is in the second string and vise versa.  CPU units
+   in the string are separated by commas.  For example, it is useful
+   for description CPU with fully pipelined floating point functional
+   unit which can execute simultaneously only single floating point
+   insns or only double floating point insns.  All CPU functional
+   units in a set should belong to the same automaton.  */
+DEF_RTL_EXPR(EXCLUSION_SET, "exclusion_set", "ss", RTX_EXTRA)
+
+/* (presence_set string string) means that each CPU functional unit in
+   the first string cannot be reserved unless at least one of pattern
+   of units whose names are in the second string is reserved.  This is
+   an asymmetric relation.  CPU units or unit patterns in the strings
+   are separated by commas.  Pattern is one unit name or unit names
+   separated by white-spaces.
+
+   For example, it is useful for description that slot1 is reserved
+   after slot0 reservation for a VLIW processor.  We could describe it
+   by the following construction
+
+      (presence_set "slot1" "slot0")
+
+   Or slot1 is reserved only after slot0 and unit b0 reservation.  In
+   this case we could write
+
+      (presence_set "slot1" "slot0 b0")
+
+   All CPU functional units in a set should belong to the same
+   automaton.  */
+DEF_RTL_EXPR(PRESENCE_SET, "presence_set", "ss", RTX_EXTRA)
+
+/* (final_presence_set string string) is analogous to `presence_set'.
+   The difference between them is when checking is done.  When an
+   instruction is issued in given automaton state reflecting all
+   current and planned unit reservations, the automaton state is
+   changed.  The first state is a source state, the second one is a
+   result state.  Checking for `presence_set' is done on the source
+   state reservation, checking for `final_presence_set' is done on the
+   result reservation.  This construction is useful to describe a
+   reservation which is actually two subsequent reservations.  For
+   example, if we use
+
+      (presence_set "slot1" "slot0")
+
+   the following insn will be never issued (because slot1 requires
+   slot0 which is absent in the source state).
+
+      (define_reservation "insn_and_nop" "slot0 + slot1")
+
+   but it can be issued if we use analogous `final_presence_set'.  */
+DEF_RTL_EXPR(FINAL_PRESENCE_SET, "final_presence_set", "ss", RTX_EXTRA)
+
+/* (absence_set string string) means that each CPU functional unit in
+   the first string can be reserved only if each pattern of units
+   whose names are in the second string is not reserved.  This is an
+   asymmetric relation (actually exclusion set is analogous to this
+   one but it is symmetric).  CPU units or unit patterns in the string
+   are separated by commas.  Pattern is one unit name or unit names
+   separated by white-spaces.
+
+   For example, it is useful for description that slot0 cannot be
+   reserved after slot1 or slot2 reservation for a VLIW processor.  We
+   could describe it by the following construction
+
+      (absence_set "slot2" "slot0, slot1")
+
+   Or slot2 cannot be reserved if slot0 and unit b0 are reserved or
+   slot1 and unit b1 are reserved .  In this case we could write
+
+      (absence_set "slot2" "slot0 b0, slot1 b1")
+
+   All CPU functional units in a set should to belong the same
+   automaton.  */
+DEF_RTL_EXPR(ABSENCE_SET, "absence_set", "ss", RTX_EXTRA)
+
+/* (final_absence_set string string) is analogous to `absence_set' but
+   checking is done on the result (state) reservation.  See comments
+   for `final_presence_set'.  */
+DEF_RTL_EXPR(FINAL_ABSENCE_SET, "final_absence_set", "ss", RTX_EXTRA)
+
+/* (define_bypass number out_insn_names in_insn_names) names bypass
+   with given latency (the first number) from insns given by the first
+   string (see define_insn_reservation) into insns given by the second
+   string.  Insn names in the strings are separated by commas.  The
+   third operand is optional name of function which is additional
+   guard for the bypass.  The function will get the two insns as
+   parameters.  If the function returns zero the bypass will be
+   ignored for this case.  Additional guard is necessary to recognize
+   complicated bypasses, e.g. when consumer is load address.  If there
+   are more one bypass with the same output and input insns, the
+   chosen bypass is the first bypass with a guard in description whose
+   guard function returns nonzero.  If there is no such bypass, then
+   bypass without the guard function is chosen.  */
+DEF_RTL_EXPR(DEFINE_BYPASS, "define_bypass", "issS", RTX_EXTRA)
+
+/* (define_automaton string) describes names of automata generated and
+   used for pipeline hazards recognition.  The names are separated by
+   comma.  Actually it is possibly to generate the single automaton
+   but unfortunately it can be very large.  If we use more one
+   automata, the summary size of the automata usually is less than the
+   single one.  The automaton name is used in define_cpu_unit and
+   define_query_cpu_unit.  All automata should have unique names.  */
+DEF_RTL_EXPR(DEFINE_AUTOMATON, "define_automaton", "s", RTX_EXTRA)
+
+/* (automata_option string) describes option for generation of
+   automata.  Currently there are the following options:
+
+   o "no-minimization" which makes no minimization of automata.  This
+     is only worth to do when we are debugging the description and
+     need to look more accurately at reservations of states.
+
+   o "time" which means printing additional time statistics about
+      generation of automata.
+
+   o "v" which means generation of file describing the result
+     automata.  The file has suffix `.dfa' and can be used for the
+     description verification and debugging.
+
+   o "w" which means generation of warning instead of error for
+     non-critical errors.
+
+   o "ndfa" which makes nondeterministic finite state automata.
+
+   o "progress" which means output of a progress bar showing how many
+     states were generated so far for automaton being processed.  */
+DEF_RTL_EXPR(AUTOMATA_OPTION, "automata_option", "s", RTX_EXTRA)
+
+/* (define_reservation string string) names reservation (the first
+   string) of cpu functional units (the 2nd string).  Sometimes unit
+   reservations for different insns contain common parts.  In such
+   case, you can describe common part and use its name (the 1st
+   parameter) in regular expression in define_insn_reservation.  All
+   define_reservations, define_cpu_units, and define_query_cpu_units
+   should have unique names which may not be "nothing".  */
+DEF_RTL_EXPR(DEFINE_RESERVATION, "define_reservation", "ss", RTX_EXTRA)
+
+/* (define_insn_reservation name default_latency condition regexpr)
+   describes reservation of cpu functional units (the 3nd operand) for
+   instruction which is selected by the condition (the 2nd parameter).
+   The first parameter is used for output of debugging information.
+   The reservations are described by a regular expression according
+   the following syntax:
+
+       regexp = regexp "," oneof
+              | oneof
+
+       oneof = oneof "|" allof
+             | allof
+
+       allof = allof "+" repeat
+             | repeat
+
+       repeat = element "*" number
+              | element
+
+       element = cpu_function_unit_name
+               | reservation_name
+               | result_name
+               | "nothing"
+               | "(" regexp ")"
+
+       1. "," is used for describing start of the next cycle in
+       reservation.
+
+       2. "|" is used for describing the reservation described by the
+       first regular expression *or* the reservation described by the
+       second regular expression *or* etc.
+
+       3. "+" is used for describing the reservation described by the
+       first regular expression *and* the reservation described by the
+       second regular expression *and* etc.
+
+       4. "*" is used for convenience and simply means sequence in
+       which the regular expression are repeated NUMBER times with
+       cycle advancing (see ",").
+
+       5. cpu functional unit name which means its reservation.
+
+       6. reservation name -- see define_reservation.
+
+       7. string "nothing" means no units reservation.  */
+
+DEF_RTL_EXPR(DEFINE_INSN_RESERVATION, "define_insn_reservation", "sies", RTX_EXTRA)
+
+/* Expressions used for insn attributes.  */
+
+/* Definition of an insn attribute.
+   1st operand: name of the attribute
+   2nd operand: comma-separated list of possible attribute values
+   3rd operand: expression for the default value of the attribute.  */
+DEF_RTL_EXPR(DEFINE_ATTR, "define_attr", "sse", RTX_EXTRA)
+
+/* Definition of an insn attribute that uses an existing enumerated type.
+   1st operand: name of the attribute
+   2nd operand: the name of the enumerated type
+   3rd operand: expression for the default value of the attribute.  */
+DEF_RTL_EXPR(DEFINE_ENUM_ATTR, "define_enum_attr", "sse", RTX_EXTRA)
+
+/* Marker for the name of an attribute.  */
+DEF_RTL_EXPR(ATTR, "attr", "s", RTX_EXTRA)
+
+/* For use in the last (optional) operand of DEFINE_INSN or DEFINE_PEEPHOLE and
+   in DEFINE_ASM_INSN to specify an attribute to assign to insns matching that
+   pattern.
+
+   (set_attr "name" "value") is equivalent to
+   (set (attr "name") (const_string "value"))  */
+DEF_RTL_EXPR(SET_ATTR, "set_attr", "ss", RTX_EXTRA)
+
+/* In the last operand of DEFINE_INSN and DEFINE_PEEPHOLE, this can be used to
+   specify that attribute values are to be assigned according to the
+   alternative matched.
+
+   The following three expressions are equivalent:
+
+   (set (attr "att") (cond [(eq_attrq "alternative" "1") (const_string "a1")
+			    (eq_attrq "alternative" "2") (const_string "a2")]
+			   (const_string "a3")))
+   (set_attr_alternative "att" [(const_string "a1") (const_string "a2")
+				 (const_string "a3")])
+   (set_attr "att" "a1,a2,a3")
+ */
+DEF_RTL_EXPR(SET_ATTR_ALTERNATIVE, "set_attr_alternative", "sE", RTX_EXTRA)
+
+/* A conditional expression true if the value of the specified attribute of
+   the current insn equals the specified value.  The first operand is the
+   attribute name and the second is the comparison value.  */
+DEF_RTL_EXPR(EQ_ATTR, "eq_attr", "ss", RTX_EXTRA)
+
+/* A special case of the above representing a set of alternatives.  The first
+   operand is bitmap of the set, the second one is the default value.  */
+DEF_RTL_EXPR(EQ_ATTR_ALT, "eq_attr_alt", "ww", RTX_EXTRA)
+
+/* A conditional expression which is true if the specified flag is
+   true for the insn being scheduled in reorg.
+
+   genattr.c defines the following flags which can be tested by
+   (attr_flag "foo") expressions in eligible_for_delay: forward, backward.  */
+
+DEF_RTL_EXPR (ATTR_FLAG, "attr_flag", "s", RTX_EXTRA)
+
+/* General conditional. The first operand is a vector composed of pairs of
+   expressions.  The first element of each pair is evaluated, in turn.
+   The value of the conditional is the second expression of the first pair
+   whose first expression evaluates nonzero.  If none of the expressions is
+   true, the second operand will be used as the value of the conditional.  */
+DEF_RTL_EXPR(COND, "cond", "Ee", RTX_EXTRA)
+
+/* Definition of a pattern substitution meta operation on a DEFINE_EXPAND
+   or a DEFINE_INSN.  Automatically generates new instances of DEFINE_INSNs
+   that match the substitution pattern.
+
+   Operand:
+   0: The name of the substitition template.
+   1: Input template to match to see if a substitution is applicable.
+   2: A C expression giving an additional condition for the generated
+      new define_expand or define_insn.
+   3: Output tempalate to generate via substitution.
+
+   Within a DEFINE_SUBST template, the meaning of some RTL expressions is
+   different from their usual interpretation: a MATCH_OPERAND matches any
+   expression tree with matching machine mode or with VOIDmode.  Likewise,
+   MATCH_OP_DUP and MATCH_DUP match more liberally in a DEFINE_SUBST than
+   in other RTL expressions.  MATCH_OPERATOR matches all common operators
+   but also UNSPEC, UNSPEC_VOLATILE, and MATCH_OPERATORS from the input
+   DEFINE_EXPAND or DEFINE_INSN.  */
+DEF_RTL_EXPR(DEFINE_SUBST, "define_subst", "sEsE", RTX_EXTRA)
+
+/* Substitution attribute to apply a DEFINE_SUBST to a pattern.
+
+   Operand:
+   0: The name of the subst-attribute.
+   1: The name of the DEFINE_SUBST to be applied for this attribute.
+   2: String to substitute for the subst-attribute name in the pattern
+      name, for the case that the DEFINE_SUBST is not applied (i.e. the
+      unmodified version of the pattern).
+   3: String to substitute for the subst-attribute name in the pattern
+      name, for the case that the DEFINE_SUBST is applied to the patten.
+      
+   The use of DEFINE_SUBST and DEFINE_SUBST_ATTR is explained in the
+   GCC internals manual, under "RTL Templates Transformations".  */
+DEF_RTL_EXPR(DEFINE_SUBST_ATTR, "define_subst_attr", "ssss", RTX_EXTRA)
+
+#endif /* GENERATOR_FILE */
+
+/*
+Local variables:
+mode:c
+End:
+*/
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtl.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtl.h
new file mode 100644
index 0000000..b4a906f
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtl.h
@@ -0,0 +1,4420 @@
+/* Register Transfer Language (RTL) definitions for GCC
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_RTL_H
+#define GCC_RTL_H
+
+/* This file is occasionally included by generator files which expect
+   machmode.h and other files to exist and would not normally have been
+   included by coretypes.h.  */
+#ifdef GENERATOR_FILE
+#include "real.h"
+#include "fixed-value.h"
+#include "statistics.h"
+#include "vec.h"
+#include "hash-table.h"
+#include "hash-set.h"
+#include "input.h"
+#include "is-a.h"
+#endif  /* GENERATOR_FILE */
+
+#include "hard-reg-set.h"
+
+/* Value used by some passes to "recognize" noop moves as valid
+ instructions.  */
+#define NOOP_MOVE_INSN_CODE	INT_MAX
+
+/* Register Transfer Language EXPRESSIONS CODES */
+
+#define RTX_CODE	enum rtx_code
+enum rtx_code  {
+
+#define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   ENUM ,
+#include "rtl.def"		/* rtl expressions are documented here */
+#undef DEF_RTL_EXPR
+
+  LAST_AND_UNUSED_RTX_CODE};	/* A convenient way to get a value for
+				   NUM_RTX_CODE.
+				   Assumes default enum value assignment.  */
+
+/* The cast here, saves many elsewhere.  */
+#define NUM_RTX_CODE ((int) LAST_AND_UNUSED_RTX_CODE)
+
+/* Similar, but since generator files get more entries... */
+#ifdef GENERATOR_FILE
+# define NON_GENERATOR_NUM_RTX_CODE ((int) MATCH_OPERAND)
+#endif
+
+/* Register Transfer Language EXPRESSIONS CODE CLASSES */
+
+enum rtx_class  {
+  /* We check bit 0-1 of some rtx class codes in the predicates below.  */
+
+  /* Bit 0 = comparison if 0, arithmetic is 1
+     Bit 1 = 1 if commutative.  */
+  RTX_COMPARE,		/* 0 */
+  RTX_COMM_COMPARE,
+  RTX_BIN_ARITH,
+  RTX_COMM_ARITH,
+
+  /* Must follow the four preceding values.  */
+  RTX_UNARY,		/* 4 */
+
+  RTX_EXTRA,
+  RTX_MATCH,
+  RTX_INSN,
+
+  /* Bit 0 = 1 if constant.  */
+  RTX_OBJ,		/* 8 */
+  RTX_CONST_OBJ,
+
+  RTX_TERNARY,
+  RTX_BITFIELD_OPS,
+  RTX_AUTOINC
+};
+
+#define RTX_OBJ_MASK (~1)
+#define RTX_OBJ_RESULT (RTX_OBJ & RTX_OBJ_MASK)
+#define RTX_COMPARE_MASK (~1)
+#define RTX_COMPARE_RESULT (RTX_COMPARE & RTX_COMPARE_MASK)
+#define RTX_ARITHMETIC_MASK (~1)
+#define RTX_ARITHMETIC_RESULT (RTX_COMM_ARITH & RTX_ARITHMETIC_MASK)
+#define RTX_BINARY_MASK (~3)
+#define RTX_BINARY_RESULT (RTX_COMPARE & RTX_BINARY_MASK)
+#define RTX_COMMUTATIVE_MASK (~2)
+#define RTX_COMMUTATIVE_RESULT (RTX_COMM_COMPARE & RTX_COMMUTATIVE_MASK)
+#define RTX_NON_COMMUTATIVE_RESULT (RTX_COMPARE & RTX_COMMUTATIVE_MASK)
+
+extern const unsigned char rtx_length[NUM_RTX_CODE];
+#define GET_RTX_LENGTH(CODE)		(rtx_length[(int) (CODE)])
+
+extern const char * const rtx_name[NUM_RTX_CODE];
+#define GET_RTX_NAME(CODE)		(rtx_name[(int) (CODE)])
+
+extern const char * const rtx_format[NUM_RTX_CODE];
+#define GET_RTX_FORMAT(CODE)		(rtx_format[(int) (CODE)])
+
+extern const enum rtx_class rtx_class[NUM_RTX_CODE];
+#define GET_RTX_CLASS(CODE)		(rtx_class[(int) (CODE)])
+
+/* True if CODE is part of the insn chain (i.e. has INSN_UID, PREV_INSN
+   and NEXT_INSN fields).  */
+#define INSN_CHAIN_CODE_P(CODE) IN_RANGE (CODE, DEBUG_INSN, NOTE)
+
+extern const unsigned char rtx_code_size[NUM_RTX_CODE];
+extern const unsigned char rtx_next[NUM_RTX_CODE];
+
+/* The flags and bitfields of an ADDR_DIFF_VEC.  BASE is the base label
+   relative to which the offsets are calculated, as explained in rtl.def.  */
+struct addr_diff_vec_flags
+{
+  /* Set at the start of shorten_branches - ONLY WHEN OPTIMIZING - : */
+  unsigned min_align: 8;
+  /* Flags: */
+  unsigned base_after_vec: 1; /* BASE is after the ADDR_DIFF_VEC.  */
+  unsigned min_after_vec: 1;  /* minimum address target label is
+				 after the ADDR_DIFF_VEC.  */
+  unsigned max_after_vec: 1;  /* maximum address target label is
+				 after the ADDR_DIFF_VEC.  */
+  unsigned min_after_base: 1; /* minimum address target label is
+				 after BASE.  */
+  unsigned max_after_base: 1; /* maximum address target label is
+				 after BASE.  */
+  /* Set by the actual branch shortening process - ONLY WHEN OPTIMIZING - : */
+  unsigned offset_unsigned: 1; /* offsets have to be treated as unsigned.  */
+  unsigned : 2;
+  unsigned scale : 8;
+};
+
+/* Structure used to describe the attributes of a MEM.  These are hashed
+   so MEMs that the same attributes share a data structure.  This means
+   they cannot be modified in place.  */
+struct GTY(()) mem_attrs
+{
+  mem_attrs ();
+
+  /* The expression that the MEM accesses, or null if not known.
+     This expression might be larger than the memory reference itself.
+     (In other words, the MEM might access only part of the object.)  */
+  tree expr;
+
+  /* The offset of the memory reference from the start of EXPR.
+     Only valid if OFFSET_KNOWN_P.  */
+  poly_int64 offset;
+
+  /* The size of the memory reference in bytes.  Only valid if
+     SIZE_KNOWN_P.  */
+  poly_int64 size;
+
+  /* The alias set of the memory reference.  */
+  alias_set_type alias;
+
+  /* The alignment of the reference in bits.  Always a multiple of
+     BITS_PER_UNIT.  Note that EXPR may have a stricter alignment
+     than the memory reference itself.  */
+  unsigned int align;
+
+  /* The address space that the memory reference uses.  */
+  unsigned char addrspace;
+
+  /* True if OFFSET is known.  */
+  bool offset_known_p;
+
+  /* True if SIZE is known.  */
+  bool size_known_p;
+};
+
+/* Structure used to describe the attributes of a REG in similar way as
+   mem_attrs does for MEM above.  Note that the OFFSET field is calculated
+   in the same way as for mem_attrs, rather than in the same way as a
+   SUBREG_BYTE.  For example, if a big-endian target stores a byte
+   object in the low part of a 4-byte register, the OFFSET field
+   will be -3 rather than 0.  */
+
+struct GTY((for_user)) reg_attrs {
+  tree decl;			/* decl corresponding to REG.  */
+  poly_int64 offset;		/* Offset from start of DECL.  */
+};
+
+/* Common union for an element of an rtx.  */
+
+union rtunion
+{
+  int rt_int;
+  unsigned int rt_uint;
+  poly_uint16_pod rt_subreg;
+  const char *rt_str;
+  rtx rt_rtx;
+  rtvec rt_rtvec;
+  machine_mode rt_type;
+  addr_diff_vec_flags rt_addr_diff_vec_flags;
+  struct cselib_val *rt_cselib;
+  tree rt_tree;
+  basic_block rt_bb;
+  mem_attrs *rt_mem;
+  struct constant_descriptor_rtx *rt_constant;
+  struct dw_cfi_node *rt_cfi;
+};
+
+/* Describes the properties of a REG.  */
+struct GTY(()) reg_info {
+  /* The value of REGNO.  */
+  unsigned int regno;
+
+  /* The value of REG_NREGS.  */
+  unsigned int nregs : 8;
+  unsigned int unused : 24;
+
+  /* The value of REG_ATTRS.  */
+  reg_attrs *attrs;
+};
+
+/* This structure remembers the position of a SYMBOL_REF within an
+   object_block structure.  A SYMBOL_REF only provides this information
+   if SYMBOL_REF_HAS_BLOCK_INFO_P is true.  */
+struct GTY(()) block_symbol {
+  /* The usual SYMBOL_REF fields.  */
+  rtunion GTY ((skip)) fld[2];
+
+  /* The block that contains this object.  */
+  struct object_block *block;
+
+  /* The offset of this object from the start of its block.  It is negative
+     if the symbol has not yet been assigned an offset.  */
+  HOST_WIDE_INT offset;
+};
+
+/* Describes a group of objects that are to be placed together in such
+   a way that their relative positions are known.  */
+struct GTY((for_user)) object_block {
+  /* The section in which these objects should be placed.  */
+  section *sect;
+
+  /* The alignment of the first object, measured in bits.  */
+  unsigned int alignment;
+
+  /* The total size of the objects, measured in bytes.  */
+  HOST_WIDE_INT size;
+
+  /* The SYMBOL_REFs for each object.  The vector is sorted in
+     order of increasing offset and the following conditions will
+     hold for each element X:
+
+	 SYMBOL_REF_HAS_BLOCK_INFO_P (X)
+	 !SYMBOL_REF_ANCHOR_P (X)
+	 SYMBOL_REF_BLOCK (X) == [address of this structure]
+	 SYMBOL_REF_BLOCK_OFFSET (X) >= 0.  */
+  vec<rtx, va_gc> *objects;
+
+  /* All the anchor SYMBOL_REFs used to address these objects, sorted
+     in order of increasing offset, and then increasing TLS model.
+     The following conditions will hold for each element X in this vector:
+
+	 SYMBOL_REF_HAS_BLOCK_INFO_P (X)
+	 SYMBOL_REF_ANCHOR_P (X)
+	 SYMBOL_REF_BLOCK (X) == [address of this structure]
+	 SYMBOL_REF_BLOCK_OFFSET (X) >= 0.  */
+  vec<rtx, va_gc> *anchors;
+};
+
+struct GTY((variable_size)) hwivec_def {
+  HOST_WIDE_INT elem[1];
+};
+
+/* Number of elements of the HWIVEC if RTX is a CONST_WIDE_INT.  */
+#define CWI_GET_NUM_ELEM(RTX)					\
+  ((int)RTL_FLAG_CHECK1("CWI_GET_NUM_ELEM", (RTX), CONST_WIDE_INT)->u2.num_elem)
+#define CWI_PUT_NUM_ELEM(RTX, NUM)					\
+  (RTL_FLAG_CHECK1("CWI_PUT_NUM_ELEM", (RTX), CONST_WIDE_INT)->u2.num_elem = (NUM))
+
+struct GTY((variable_size)) const_poly_int_def {
+  trailing_wide_ints<NUM_POLY_INT_COEFFS> coeffs;
+};
+
+/* RTL expression ("rtx").  */
+
+/* The GTY "desc" and "tag" options below are a kludge: we need a desc
+   field for gengtype to recognize that inheritance is occurring,
+   so that all subclasses are redirected to the traversal hook for the
+   base class.
+   However, all of the fields are in the base class, and special-casing
+   is at work.  Hence we use desc and tag of 0, generating a switch
+   statement of the form:
+     switch (0)
+       {
+       case 0: // all the work happens here
+      }
+   in order to work with the existing special-casing in gengtype.  */
+
+struct GTY((desc("0"), tag("0"),
+	    chain_next ("RTX_NEXT (&%h)"),
+	    chain_prev ("RTX_PREV (&%h)"))) rtx_def {
+  /* The kind of expression this is.  */
+  ENUM_BITFIELD(rtx_code) code: 16;
+
+  /* The kind of value the expression has.  */
+  ENUM_BITFIELD(machine_mode) mode : 8;
+
+  /* 1 in a MEM if we should keep the alias set for this mem unchanged
+     when we access a component.
+     1 in a JUMP_INSN if it is a crossing jump.
+     1 in a CALL_INSN if it is a sibling call.
+     1 in a SET that is for a return.
+     In a CODE_LABEL, part of the two-bit alternate entry field.
+     1 in a CONCAT is VAL_EXPR_IS_COPIED in var-tracking.c.
+     1 in a VALUE is SP_BASED_VALUE_P in cselib.c.
+     1 in a SUBREG generated by LRA for reload insns.
+     1 in a REG if this is a static chain register.
+     Dumped as "/j" in RTL dumps.  */
+  unsigned int jump : 1;
+  /* In a CODE_LABEL, part of the two-bit alternate entry field.
+     1 in a MEM if it cannot trap.
+     1 in a CALL_INSN logically equivalent to
+       ECF_LOOPING_CONST_OR_PURE and DECL_LOOPING_CONST_OR_PURE_P.
+     Dumped as "/c" in RTL dumps.  */
+  unsigned int call : 1;
+  /* 1 in a REG, MEM, or CONCAT if the value is set at most once, anywhere.
+     1 in a SUBREG used for SUBREG_PROMOTED_UNSIGNED_P.
+     1 in a SYMBOL_REF if it addresses something in the per-function
+     constants pool.
+     1 in a CALL_INSN logically equivalent to ECF_CONST and TREE_READONLY.
+     1 in a NOTE, or EXPR_LIST for a const call.
+     1 in a JUMP_INSN of an annulling branch.
+     1 in a CONCAT is VAL_EXPR_IS_CLOBBERED in var-tracking.c.
+     1 in a preserved VALUE is PRESERVED_VALUE_P in cselib.c.
+     1 in a clobber temporarily created for LRA.
+     Dumped as "/u" in RTL dumps.  */
+  unsigned int unchanging : 1;
+  /* 1 in a MEM or ASM_OPERANDS expression if the memory reference is volatile.
+     1 in an INSN, CALL_INSN, JUMP_INSN, CODE_LABEL, BARRIER, or NOTE
+     if it has been deleted.
+     1 in a REG expression if corresponds to a variable declared by the user,
+     0 for an internally generated temporary.
+     1 in a SUBREG used for SUBREG_PROMOTED_UNSIGNED_P.
+     1 in a LABEL_REF, REG_LABEL_TARGET or REG_LABEL_OPERAND note for a
+     non-local label.
+     In a SYMBOL_REF, this flag is used for machine-specific purposes.
+     In a PREFETCH, this flag indicates that it should be considered a
+     scheduling barrier.
+     1 in a CONCAT is VAL_NEEDS_RESOLUTION in var-tracking.c.
+     Dumped as "/v" in RTL dumps.  */
+  unsigned int volatil : 1;
+  /* 1 in a REG if the register is used only in exit code a loop.
+     1 in a SUBREG expression if was generated from a variable with a
+     promoted mode.
+     1 in a CODE_LABEL if the label is used for nonlocal gotos
+     and must not be deleted even if its count is zero.
+     1 in an INSN, JUMP_INSN or CALL_INSN if this insn must be scheduled
+     together with the preceding insn.  Valid only within sched.
+     1 in an INSN, JUMP_INSN, or CALL_INSN if insn is in a delay slot and
+     from the target of a branch.  Valid from reorg until end of compilation;
+     cleared before used.
+
+     The name of the field is historical.  It used to be used in MEMs
+     to record whether the MEM accessed part of a structure.
+     Dumped as "/s" in RTL dumps.  */
+  unsigned int in_struct : 1;
+  /* At the end of RTL generation, 1 if this rtx is used.  This is used for
+     copying shared structure.  See `unshare_all_rtl'.
+     In a REG, this is not needed for that purpose, and used instead
+     in `leaf_renumber_regs_insn'.
+     1 in a SYMBOL_REF, means that emit_library_call
+     has used it as the function.
+     1 in a CONCAT is VAL_HOLDS_TRACK_EXPR in var-tracking.c.
+     1 in a VALUE or DEBUG_EXPR is VALUE_RECURSED_INTO in var-tracking.c.  */
+  unsigned int used : 1;
+  /* 1 in an INSN or a SET if this rtx is related to the call frame,
+     either changing how we compute the frame address or saving and
+     restoring registers in the prologue and epilogue.
+     1 in a REG or MEM if it is a pointer.
+     1 in a SYMBOL_REF if it addresses something in the per-function
+     constant string pool.
+     1 in a VALUE is VALUE_CHANGED in var-tracking.c.
+     Dumped as "/f" in RTL dumps.  */
+  unsigned frame_related : 1;
+  /* 1 in a REG or PARALLEL that is the current function's return value.
+     1 in a SYMBOL_REF for a weak symbol.
+     1 in a CALL_INSN logically equivalent to ECF_PURE and DECL_PURE_P.
+     1 in a CONCAT is VAL_EXPR_HAS_REVERSE in var-tracking.c.
+     1 in a VALUE or DEBUG_EXPR is NO_LOC_P in var-tracking.c.
+     Dumped as "/i" in RTL dumps.  */
+  unsigned return_val : 1;
+
+  union {
+    /* The final union field is aligned to 64 bits on LP64 hosts,
+       giving a 32-bit gap after the fields above.  We optimize the
+       layout for that case and use the gap for extra code-specific
+       information.  */
+
+    /* The ORIGINAL_REGNO of a REG.  */
+    unsigned int original_regno;
+
+    /* The INSN_UID of an RTX_INSN-class code.  */
+    int insn_uid;
+
+    /* The SYMBOL_REF_FLAGS of a SYMBOL_REF.  */
+    unsigned int symbol_ref_flags;
+
+    /* The PAT_VAR_LOCATION_STATUS of a VAR_LOCATION.  */
+    enum var_init_status var_location_status;
+
+    /* In a CONST_WIDE_INT (aka hwivec_def), this is the number of
+       HOST_WIDE_INTs in the hwivec_def.  */
+    unsigned int num_elem;
+
+    /* Information about a CONST_VECTOR.  */
+    struct
+    {
+      /* The value of CONST_VECTOR_NPATTERNS.  */
+      unsigned int npatterns : 16;
+
+      /* The value of CONST_VECTOR_NELTS_PER_PATTERN.  */
+      unsigned int nelts_per_pattern : 8;
+
+      /* For future expansion.  */
+      unsigned int unused : 8;
+    } const_vector;
+  } GTY ((skip)) u2;
+
+  /* The first element of the operands of this rtx.
+     The number of operands and their types are controlled
+     by the `code' field, according to rtl.def.  */
+  union u {
+    rtunion fld[1];
+    HOST_WIDE_INT hwint[1];
+    struct reg_info reg;
+    struct block_symbol block_sym;
+    struct real_value rv;
+    struct fixed_value fv;
+    struct hwivec_def hwiv;
+    struct const_poly_int_def cpi;
+  } GTY ((special ("rtx_def"), desc ("GET_CODE (&%0)"))) u;
+};
+
+/* A node for constructing singly-linked lists of rtx.  */
+
+class GTY(()) rtx_expr_list : public rtx_def
+{
+  /* No extra fields, but adds invariant: (GET_CODE (X) == EXPR_LIST).  */
+
+public:
+  /* Get next in list.  */
+  rtx_expr_list *next () const;
+
+  /* Get at the underlying rtx.  */
+  rtx element () const;
+};
+
+template <>
+template <>
+inline bool
+is_a_helper <rtx_expr_list *>::test (rtx rt)
+{
+  return rt->code == EXPR_LIST;
+}
+
+class GTY(()) rtx_insn_list : public rtx_def
+{
+  /* No extra fields, but adds invariant: (GET_CODE (X) == INSN_LIST).
+
+     This is an instance of:
+
+       DEF_RTL_EXPR(INSN_LIST, "insn_list", "ue", RTX_EXTRA)
+
+     i.e. a node for constructing singly-linked lists of rtx_insn *, where
+     the list is "external" to the insn (as opposed to the doubly-linked
+     list embedded within rtx_insn itself).  */
+
+public:
+  /* Get next in list.  */
+  rtx_insn_list *next () const;
+
+  /* Get at the underlying instruction.  */
+  rtx_insn *insn () const;
+
+};
+
+template <>
+template <>
+inline bool
+is_a_helper <rtx_insn_list *>::test (rtx rt)
+{
+  return rt->code == INSN_LIST;
+}
+
+/* A node with invariant GET_CODE (X) == SEQUENCE i.e. a vector of rtx,
+   typically (but not always) of rtx_insn *, used in the late passes.  */
+
+class GTY(()) rtx_sequence : public rtx_def
+{
+  /* No extra fields, but adds invariant: (GET_CODE (X) == SEQUENCE).  */
+
+public:
+  /* Get number of elements in sequence.  */
+  int len () const;
+
+  /* Get i-th element of the sequence.  */
+  rtx element (int index) const;
+
+  /* Get i-th element of the sequence, with a checked cast to
+     rtx_insn *.  */
+  rtx_insn *insn (int index) const;
+};
+
+template <>
+template <>
+inline bool
+is_a_helper <rtx_sequence *>::test (rtx rt)
+{
+  return rt->code == SEQUENCE;
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const rtx_sequence *>::test (const_rtx rt)
+{
+  return rt->code == SEQUENCE;
+}
+
+class GTY(()) rtx_insn : public rtx_def
+{
+public:
+  /* No extra fields, but adds the invariant:
+
+     (INSN_P (X)
+      || NOTE_P (X)
+      || JUMP_TABLE_DATA_P (X)
+      || BARRIER_P (X)
+      || LABEL_P (X))
+
+     i.e. that we must be able to use the following:
+      INSN_UID ()
+      NEXT_INSN ()
+      PREV_INSN ()
+    i.e. we have an rtx that has an INSN_UID field and can be part of
+    a linked list of insns.
+  */
+
+  /* Returns true if this insn has been deleted.  */
+
+  bool deleted () const { return volatil; }
+
+  /* Mark this insn as deleted.  */
+
+  void set_deleted () { volatil = true; }
+
+  /* Mark this insn as not deleted.  */
+
+  void set_undeleted () { volatil = false; }
+};
+
+/* Subclasses of rtx_insn.  */
+
+class GTY(()) rtx_debug_insn : public rtx_insn
+{
+  /* No extra fields, but adds the invariant:
+       DEBUG_INSN_P (X) aka (GET_CODE (X) == DEBUG_INSN)
+     i.e. an annotation for tracking variable assignments.
+
+     This is an instance of:
+       DEF_RTL_EXPR(DEBUG_INSN, "debug_insn", "uuBeiie", RTX_INSN)
+     from rtl.def.  */
+};
+
+class GTY(()) rtx_nonjump_insn : public rtx_insn
+{
+  /* No extra fields, but adds the invariant:
+       NONJUMP_INSN_P (X) aka (GET_CODE (X) == INSN)
+     i.e an instruction that cannot jump.
+
+     This is an instance of:
+       DEF_RTL_EXPR(INSN, "insn", "uuBeiie", RTX_INSN)
+     from rtl.def.  */
+};
+
+class GTY(()) rtx_jump_insn : public rtx_insn
+{
+public:
+  /* No extra fields, but adds the invariant:
+       JUMP_P (X) aka (GET_CODE (X) == JUMP_INSN)
+     i.e. an instruction that can possibly jump.
+
+     This is an instance of:
+       DEF_RTL_EXPR(JUMP_INSN, "jump_insn", "uuBeiie0", RTX_INSN)
+     from rtl.def.  */
+
+  /* Returns jump target of this instruction.  The returned value is not
+     necessarily a code label: it may also be a RETURN or SIMPLE_RETURN
+     expression.  Also, when the code label is marked "deleted", it is
+     replaced by a NOTE.  In some cases the value is NULL_RTX.  */
+
+  inline rtx jump_label () const;
+
+  /* Returns jump target cast to rtx_code_label *.  */
+
+  inline rtx_code_label *jump_target () const;
+
+  /* Set jump target.  */
+
+  inline void set_jump_target (rtx_code_label *);
+};
+
+class GTY(()) rtx_call_insn : public rtx_insn
+{
+  /* No extra fields, but adds the invariant:
+       CALL_P (X) aka (GET_CODE (X) == CALL_INSN)
+     i.e. an instruction that can possibly call a subroutine
+     but which will not change which instruction comes next
+     in the current function.
+
+     This is an instance of:
+       DEF_RTL_EXPR(CALL_INSN, "call_insn", "uuBeiiee", RTX_INSN)
+     from rtl.def.  */
+};
+
+class GTY(()) rtx_jump_table_data : public rtx_insn
+{
+  /* No extra fields, but adds the invariant:
+       JUMP_TABLE_DATA_P (X) aka (GET_CODE (INSN) == JUMP_TABLE_DATA)
+     i.e. a data for a jump table, considered an instruction for
+     historical reasons.
+
+     This is an instance of:
+       DEF_RTL_EXPR(JUMP_TABLE_DATA, "jump_table_data", "uuBe0000", RTX_INSN)
+     from rtl.def.  */
+
+public:
+
+  /* This can be either:
+
+       (a) a table of absolute jumps, in which case PATTERN (this) is an
+           ADDR_VEC with arg 0 a vector of labels, or
+
+       (b) a table of relative jumps (e.g. for -fPIC), in which case
+           PATTERN (this) is an ADDR_DIFF_VEC, with arg 0 a LABEL_REF and
+	   arg 1 the vector of labels.
+
+     This method gets the underlying vec.  */
+
+  inline rtvec get_labels () const;
+  inline scalar_int_mode get_data_mode () const;
+};
+
+class GTY(()) rtx_barrier : public rtx_insn
+{
+  /* No extra fields, but adds the invariant:
+       BARRIER_P (X) aka (GET_CODE (X) == BARRIER)
+     i.e. a marker that indicates that control will not flow through.
+
+     This is an instance of:
+       DEF_RTL_EXPR(BARRIER, "barrier", "uu00000", RTX_EXTRA)
+     from rtl.def.  */
+};
+
+class GTY(()) rtx_code_label : public rtx_insn
+{
+  /* No extra fields, but adds the invariant:
+       LABEL_P (X) aka (GET_CODE (X) == CODE_LABEL)
+     i.e. a label in the assembler.
+
+     This is an instance of:
+       DEF_RTL_EXPR(CODE_LABEL, "code_label", "uuB00is", RTX_EXTRA)
+     from rtl.def.  */
+};
+
+class GTY(()) rtx_note : public rtx_insn
+{
+  /* No extra fields, but adds the invariant:
+       NOTE_P(X) aka (GET_CODE (X) == NOTE)
+     i.e. a note about the corresponding source code.
+
+     This is an instance of:
+       DEF_RTL_EXPR(NOTE, "note", "uuB0ni", RTX_EXTRA)
+     from rtl.def.  */
+};
+
+/* The size in bytes of an rtx header (code, mode and flags).  */
+#define RTX_HDR_SIZE offsetof (struct rtx_def, u)
+
+/* The size in bytes of an rtx with code CODE.  */
+#define RTX_CODE_SIZE(CODE) rtx_code_size[CODE]
+
+#define NULL_RTX (rtx) 0
+
+/* The "next" and "previous" RTX, relative to this one.  */
+
+#define RTX_NEXT(X) (rtx_next[GET_CODE (X)] == 0 ? NULL			\
+		     : *(rtx *)(((char *)X) + rtx_next[GET_CODE (X)]))
+
+/* FIXME: the "NEXT_INSN (PREV_INSN (X)) == X" condition shouldn't be needed.
+ */
+#define RTX_PREV(X) ((INSN_P (X)       			\
+                      || NOTE_P (X)       		\
+                      || JUMP_TABLE_DATA_P (X)		\
+                      || BARRIER_P (X)        		\
+                      || LABEL_P (X))    		\
+		     && PREV_INSN (as_a <rtx_insn *> (X)) != NULL	\
+                     && NEXT_INSN (PREV_INSN (as_a <rtx_insn *> (X))) == X \
+                     ? PREV_INSN (as_a <rtx_insn *> (X)) : NULL)
+
+/* Define macros to access the `code' field of the rtx.  */
+
+#define GET_CODE(RTX)	    ((enum rtx_code) (RTX)->code)
+#define PUT_CODE(RTX, CODE) ((RTX)->code = (CODE))
+
+#define GET_MODE(RTX)		((machine_mode) (RTX)->mode)
+#define PUT_MODE_RAW(RTX, MODE)	((RTX)->mode = (MODE))
+
+/* RTL vector.  These appear inside RTX's when there is a need
+   for a variable number of things.  The principle use is inside
+   PARALLEL expressions.  */
+
+struct GTY(()) rtvec_def {
+  int num_elem;		/* number of elements */
+  rtx GTY ((length ("%h.num_elem"))) elem[1];
+};
+
+#define NULL_RTVEC (rtvec) 0
+
+#define GET_NUM_ELEM(RTVEC)		((RTVEC)->num_elem)
+#define PUT_NUM_ELEM(RTVEC, NUM)	((RTVEC)->num_elem = (NUM))
+
+/* Predicate yielding nonzero iff X is an rtx for a register.  */
+#define REG_P(X) (GET_CODE (X) == REG)
+
+/* Predicate yielding nonzero iff X is an rtx for a memory location.  */
+#define MEM_P(X) (GET_CODE (X) == MEM)
+
+#if TARGET_SUPPORTS_WIDE_INT
+
+/* Match CONST_*s that can represent compile-time constant integers.  */
+#define CASE_CONST_SCALAR_INT \
+   case CONST_INT: \
+   case CONST_WIDE_INT
+
+/* Match CONST_*s for which pointer equality corresponds to value
+   equality.  */
+#define CASE_CONST_UNIQUE \
+   case CONST_INT: \
+   case CONST_WIDE_INT: \
+   case CONST_POLY_INT: \
+   case CONST_DOUBLE: \
+   case CONST_FIXED
+
+/* Match all CONST_* rtxes.  */
+#define CASE_CONST_ANY \
+   case CONST_INT: \
+   case CONST_WIDE_INT: \
+   case CONST_POLY_INT: \
+   case CONST_DOUBLE: \
+   case CONST_FIXED: \
+   case CONST_VECTOR
+
+#else
+
+/* Match CONST_*s that can represent compile-time constant integers.  */
+#define CASE_CONST_SCALAR_INT \
+   case CONST_INT: \
+   case CONST_DOUBLE
+
+/* Match CONST_*s for which pointer equality corresponds to value
+   equality.  */
+#define CASE_CONST_UNIQUE \
+   case CONST_INT: \
+   case CONST_DOUBLE: \
+   case CONST_FIXED
+
+/* Match all CONST_* rtxes.  */
+#define CASE_CONST_ANY \
+   case CONST_INT: \
+   case CONST_DOUBLE: \
+   case CONST_FIXED: \
+   case CONST_VECTOR
+#endif
+
+/* Predicate yielding nonzero iff X is an rtx for a constant integer.  */
+#define CONST_INT_P(X) (GET_CODE (X) == CONST_INT)
+
+/* Predicate yielding nonzero iff X is an rtx for a constant integer.  */
+#define CONST_WIDE_INT_P(X) (GET_CODE (X) == CONST_WIDE_INT)
+
+/* Predicate yielding nonzero iff X is an rtx for a polynomial constant
+   integer.  */
+#define CONST_POLY_INT_P(X) \
+  (NUM_POLY_INT_COEFFS > 1 && GET_CODE (X) == CONST_POLY_INT)
+
+/* Predicate yielding nonzero iff X is an rtx for a constant fixed-point.  */
+#define CONST_FIXED_P(X) (GET_CODE (X) == CONST_FIXED)
+
+/* Predicate yielding true iff X is an rtx for a double-int
+   or floating point constant.  */
+#define CONST_DOUBLE_P(X) (GET_CODE (X) == CONST_DOUBLE)
+
+/* Predicate yielding true iff X is an rtx for a double-int.  */
+#define CONST_DOUBLE_AS_INT_P(X) \
+  (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) == VOIDmode)
+
+/* Predicate yielding true iff X is an rtx for a integer const.  */
+#if TARGET_SUPPORTS_WIDE_INT
+#define CONST_SCALAR_INT_P(X) \
+  (CONST_INT_P (X) || CONST_WIDE_INT_P (X))
+#else
+#define CONST_SCALAR_INT_P(X) \
+  (CONST_INT_P (X) || CONST_DOUBLE_AS_INT_P (X))
+#endif
+
+/* Predicate yielding true iff X is an rtx for a double-int.  */
+#define CONST_DOUBLE_AS_FLOAT_P(X) \
+  (GET_CODE (X) == CONST_DOUBLE && GET_MODE (X) != VOIDmode)
+
+/* Predicate yielding nonzero iff X is a label insn.  */
+#define LABEL_P(X) (GET_CODE (X) == CODE_LABEL)
+
+/* Predicate yielding nonzero iff X is a jump insn.  */
+#define JUMP_P(X) (GET_CODE (X) == JUMP_INSN)
+
+/* Predicate yielding nonzero iff X is a call insn.  */
+#define CALL_P(X) (GET_CODE (X) == CALL_INSN)
+
+/* Predicate yielding nonzero iff X is an insn that cannot jump.  */
+#define NONJUMP_INSN_P(X) (GET_CODE (X) == INSN)
+
+/* Predicate yielding nonzero iff X is a debug note/insn.  */
+#define DEBUG_INSN_P(X) (GET_CODE (X) == DEBUG_INSN)
+
+/* Predicate yielding nonzero iff X is an insn that is not a debug insn.  */
+#define NONDEBUG_INSN_P(X) (NONJUMP_INSN_P (X) || JUMP_P (X) || CALL_P (X))
+
+/* Nonzero if DEBUG_MARKER_INSN_P may possibly hold.  */
+#define MAY_HAVE_DEBUG_MARKER_INSNS debug_nonbind_markers_p
+/* Nonzero if DEBUG_BIND_INSN_P may possibly hold.  */
+#define MAY_HAVE_DEBUG_BIND_INSNS flag_var_tracking_assignments
+/* Nonzero if DEBUG_INSN_P may possibly hold.  */
+#define MAY_HAVE_DEBUG_INSNS					\
+  (MAY_HAVE_DEBUG_MARKER_INSNS || MAY_HAVE_DEBUG_BIND_INSNS)
+
+/* Predicate yielding nonzero iff X is a real insn.  */
+#define INSN_P(X) (NONDEBUG_INSN_P (X) || DEBUG_INSN_P (X))
+
+/* Predicate yielding nonzero iff X is a note insn.  */
+#define NOTE_P(X) (GET_CODE (X) == NOTE)
+
+/* Predicate yielding nonzero iff X is a barrier insn.  */
+#define BARRIER_P(X) (GET_CODE (X) == BARRIER)
+
+/* Predicate yielding nonzero iff X is a data for a jump table.  */
+#define JUMP_TABLE_DATA_P(INSN) (GET_CODE (INSN) == JUMP_TABLE_DATA)
+
+/* Predicate yielding nonzero iff RTX is a subreg.  */
+#define SUBREG_P(RTX) (GET_CODE (RTX) == SUBREG)
+
+/* Predicate yielding true iff RTX is a symbol ref.  */
+#define SYMBOL_REF_P(RTX) (GET_CODE (RTX) == SYMBOL_REF)
+
+template <>
+template <>
+inline bool
+is_a_helper <rtx_insn *>::test (rtx rt)
+{
+  return (INSN_P (rt)
+	  || NOTE_P (rt)
+	  || JUMP_TABLE_DATA_P (rt)
+	  || BARRIER_P (rt)
+	  || LABEL_P (rt));
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <const rtx_insn *>::test (const_rtx rt)
+{
+  return (INSN_P (rt)
+	  || NOTE_P (rt)
+	  || JUMP_TABLE_DATA_P (rt)
+	  || BARRIER_P (rt)
+	  || LABEL_P (rt));
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <rtx_debug_insn *>::test (rtx rt)
+{
+  return DEBUG_INSN_P (rt);
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <rtx_nonjump_insn *>::test (rtx rt)
+{
+  return NONJUMP_INSN_P (rt);
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <rtx_jump_insn *>::test (rtx rt)
+{
+  return JUMP_P (rt);
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <rtx_jump_insn *>::test (rtx_insn *insn)
+{
+  return JUMP_P (insn);
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <rtx_call_insn *>::test (rtx rt)
+{
+  return CALL_P (rt);
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <rtx_call_insn *>::test (rtx_insn *insn)
+{
+  return CALL_P (insn);
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <rtx_jump_table_data *>::test (rtx rt)
+{
+  return JUMP_TABLE_DATA_P (rt);
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <rtx_jump_table_data *>::test (rtx_insn *insn)
+{
+  return JUMP_TABLE_DATA_P (insn);
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <rtx_barrier *>::test (rtx rt)
+{
+  return BARRIER_P (rt);
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <rtx_code_label *>::test (rtx rt)
+{
+  return LABEL_P (rt);
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <rtx_code_label *>::test (rtx_insn *insn)
+{
+  return LABEL_P (insn);
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <rtx_note *>::test (rtx rt)
+{
+  return NOTE_P (rt);
+}
+
+template <>
+template <>
+inline bool
+is_a_helper <rtx_note *>::test (rtx_insn *insn)
+{
+  return NOTE_P (insn);
+}
+
+/* Predicate yielding nonzero iff X is a return or simple_return.  */
+#define ANY_RETURN_P(X) \
+  (GET_CODE (X) == RETURN || GET_CODE (X) == SIMPLE_RETURN)
+
+/* 1 if X is a unary operator.  */
+
+#define UNARY_P(X)   \
+  (GET_RTX_CLASS (GET_CODE (X)) == RTX_UNARY)
+
+/* 1 if X is a binary operator.  */
+
+#define BINARY_P(X)   \
+  ((GET_RTX_CLASS (GET_CODE (X)) & RTX_BINARY_MASK) == RTX_BINARY_RESULT)
+
+/* 1 if X is an arithmetic operator.  */
+
+#define ARITHMETIC_P(X)   \
+  ((GET_RTX_CLASS (GET_CODE (X)) & RTX_ARITHMETIC_MASK)			\
+    == RTX_ARITHMETIC_RESULT)
+
+/* 1 if X is an arithmetic operator.  */
+
+#define COMMUTATIVE_ARITH_P(X)   \
+  (GET_RTX_CLASS (GET_CODE (X)) == RTX_COMM_ARITH)
+
+/* 1 if X is a commutative arithmetic operator or a comparison operator.
+   These two are sometimes selected together because it is possible to
+   swap the two operands.  */
+
+#define SWAPPABLE_OPERANDS_P(X)   \
+  ((1 << GET_RTX_CLASS (GET_CODE (X)))					\
+    & ((1 << RTX_COMM_ARITH) | (1 << RTX_COMM_COMPARE)			\
+       | (1 << RTX_COMPARE)))
+
+/* 1 if X is a non-commutative operator.  */
+
+#define NON_COMMUTATIVE_P(X)   \
+  ((GET_RTX_CLASS (GET_CODE (X)) & RTX_COMMUTATIVE_MASK)		\
+    == RTX_NON_COMMUTATIVE_RESULT)
+
+/* 1 if X is a commutative operator on integers.  */
+
+#define COMMUTATIVE_P(X)   \
+  ((GET_RTX_CLASS (GET_CODE (X)) & RTX_COMMUTATIVE_MASK)		\
+    == RTX_COMMUTATIVE_RESULT)
+
+/* 1 if X is a relational operator.  */
+
+#define COMPARISON_P(X)   \
+  ((GET_RTX_CLASS (GET_CODE (X)) & RTX_COMPARE_MASK) == RTX_COMPARE_RESULT)
+
+/* 1 if X is a constant value that is an integer.  */
+
+#define CONSTANT_P(X)   \
+  (GET_RTX_CLASS (GET_CODE (X)) == RTX_CONST_OBJ)
+
+/* 1 if X can be used to represent an object.  */
+#define OBJECT_P(X)							\
+  ((GET_RTX_CLASS (GET_CODE (X)) & RTX_OBJ_MASK) == RTX_OBJ_RESULT)
+
+/* General accessor macros for accessing the fields of an rtx.  */
+
+#if defined ENABLE_RTL_CHECKING && (GCC_VERSION >= 2007)
+/* The bit with a star outside the statement expr and an & inside is
+   so that N can be evaluated only once.  */
+#define RTL_CHECK1(RTX, N, C1) __extension__				\
+(*({ __typeof (RTX) const _rtx = (RTX); const int _n = (N);		\
+     const enum rtx_code _code = GET_CODE (_rtx);			\
+     if (_n < 0 || _n >= GET_RTX_LENGTH (_code))			\
+       rtl_check_failed_bounds (_rtx, _n, __FILE__, __LINE__,		\
+				__FUNCTION__);				\
+     if (GET_RTX_FORMAT (_code)[_n] != C1)				\
+       rtl_check_failed_type1 (_rtx, _n, C1, __FILE__, __LINE__,	\
+			       __FUNCTION__);				\
+     &_rtx->u.fld[_n]; }))
+
+#define RTL_CHECK2(RTX, N, C1, C2) __extension__			\
+(*({ __typeof (RTX) const _rtx = (RTX); const int _n = (N);		\
+     const enum rtx_code _code = GET_CODE (_rtx);			\
+     if (_n < 0 || _n >= GET_RTX_LENGTH (_code))			\
+       rtl_check_failed_bounds (_rtx, _n, __FILE__, __LINE__,		\
+				__FUNCTION__);				\
+     if (GET_RTX_FORMAT (_code)[_n] != C1				\
+	 && GET_RTX_FORMAT (_code)[_n] != C2)				\
+       rtl_check_failed_type2 (_rtx, _n, C1, C2, __FILE__, __LINE__,	\
+			       __FUNCTION__);				\
+     &_rtx->u.fld[_n]; }))
+
+#define RTL_CHECKC1(RTX, N, C) __extension__				\
+(*({ __typeof (RTX) const _rtx = (RTX); const int _n = (N);		\
+     if (GET_CODE (_rtx) != (C))					\
+       rtl_check_failed_code1 (_rtx, (C), __FILE__, __LINE__,		\
+			       __FUNCTION__);				\
+     &_rtx->u.fld[_n]; }))
+
+#define RTL_CHECKC2(RTX, N, C1, C2) __extension__			\
+(*({ __typeof (RTX) const _rtx = (RTX); const int _n = (N);		\
+     const enum rtx_code _code = GET_CODE (_rtx);			\
+     if (_code != (C1) && _code != (C2))				\
+       rtl_check_failed_code2 (_rtx, (C1), (C2), __FILE__, __LINE__,	\
+			       __FUNCTION__); \
+     &_rtx->u.fld[_n]; }))
+
+#define RTL_CHECKC3(RTX, N, C1, C2, C3) __extension__			\
+(*({ __typeof (RTX) const _rtx = (RTX); const int _n = (N);		\
+     const enum rtx_code _code = GET_CODE (_rtx);			\
+     if (_code != (C1) && _code != (C2) && _code != (C3))		\
+       rtl_check_failed_code3 (_rtx, (C1), (C2), (C3), __FILE__,	\
+			       __LINE__, __FUNCTION__);			\
+     &_rtx->u.fld[_n]; }))
+
+#define RTVEC_ELT(RTVEC, I) __extension__				\
+(*({ __typeof (RTVEC) const _rtvec = (RTVEC); const int _i = (I);	\
+     if (_i < 0 || _i >= GET_NUM_ELEM (_rtvec))				\
+       rtvec_check_failed_bounds (_rtvec, _i, __FILE__, __LINE__,	\
+				  __FUNCTION__);			\
+     &_rtvec->elem[_i]; }))
+
+#define XWINT(RTX, N) __extension__					\
+(*({ __typeof (RTX) const _rtx = (RTX); const int _n = (N);		\
+     const enum rtx_code _code = GET_CODE (_rtx);			\
+     if (_n < 0 || _n >= GET_RTX_LENGTH (_code))			\
+       rtl_check_failed_bounds (_rtx, _n, __FILE__, __LINE__,		\
+				__FUNCTION__);				\
+     if (GET_RTX_FORMAT (_code)[_n] != 'w')				\
+       rtl_check_failed_type1 (_rtx, _n, 'w', __FILE__, __LINE__,	\
+			       __FUNCTION__);				\
+     &_rtx->u.hwint[_n]; }))
+
+#define CWI_ELT(RTX, I) __extension__					\
+(*({ __typeof (RTX) const _cwi = (RTX);					\
+     int _max = CWI_GET_NUM_ELEM (_cwi);				\
+     const int _i = (I);						\
+     if (_i < 0 || _i >= _max)						\
+       cwi_check_failed_bounds (_cwi, _i, __FILE__, __LINE__,		\
+				__FUNCTION__);				\
+     &_cwi->u.hwiv.elem[_i]; }))
+
+#define XCWINT(RTX, N, C) __extension__					\
+(*({ __typeof (RTX) const _rtx = (RTX);					\
+     if (GET_CODE (_rtx) != (C))					\
+       rtl_check_failed_code1 (_rtx, (C), __FILE__, __LINE__,		\
+			       __FUNCTION__);				\
+     &_rtx->u.hwint[N]; }))
+
+#define XCMWINT(RTX, N, C, M) __extension__				\
+(*({ __typeof (RTX) const _rtx = (RTX);					\
+     if (GET_CODE (_rtx) != (C) || GET_MODE (_rtx) != (M))		\
+       rtl_check_failed_code_mode (_rtx, (C), (M), false, __FILE__,	\
+				   __LINE__, __FUNCTION__);		\
+     &_rtx->u.hwint[N]; }))
+
+#define XCNMPRV(RTX, C, M) __extension__				\
+({ __typeof (RTX) const _rtx = (RTX);					\
+   if (GET_CODE (_rtx) != (C) || GET_MODE (_rtx) == (M))		\
+     rtl_check_failed_code_mode (_rtx, (C), (M), true, __FILE__,	\
+				 __LINE__, __FUNCTION__);		\
+   &_rtx->u.rv; })
+
+#define XCNMPFV(RTX, C, M) __extension__				\
+({ __typeof (RTX) const _rtx = (RTX);					\
+   if (GET_CODE (_rtx) != (C) || GET_MODE (_rtx) == (M))		\
+     rtl_check_failed_code_mode (_rtx, (C), (M), true, __FILE__,	\
+				 __LINE__, __FUNCTION__);		\
+   &_rtx->u.fv; })
+
+#define REG_CHECK(RTX) __extension__					\
+({ __typeof (RTX) const _rtx = (RTX);					\
+   if (GET_CODE (_rtx) != REG)						\
+     rtl_check_failed_code1 (_rtx, REG,  __FILE__, __LINE__,		\
+			     __FUNCTION__);				\
+   &_rtx->u.reg; })
+
+#define BLOCK_SYMBOL_CHECK(RTX) __extension__				\
+({ __typeof (RTX) const _symbol = (RTX);				\
+   const unsigned int flags = SYMBOL_REF_FLAGS (_symbol);		\
+   if ((flags & SYMBOL_FLAG_HAS_BLOCK_INFO) == 0)			\
+     rtl_check_failed_block_symbol (__FILE__, __LINE__,			\
+				    __FUNCTION__);			\
+   &_symbol->u.block_sym; })
+
+#define HWIVEC_CHECK(RTX,C) __extension__				\
+({ __typeof (RTX) const _symbol = (RTX);				\
+   RTL_CHECKC1 (_symbol, 0, C);						\
+   &_symbol->u.hwiv; })
+
+extern void rtl_check_failed_bounds (const_rtx, int, const char *, int,
+				     const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void rtl_check_failed_type1 (const_rtx, int, int, const char *, int,
+				    const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void rtl_check_failed_type2 (const_rtx, int, int, int, const char *,
+				    int, const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void rtl_check_failed_code1 (const_rtx, enum rtx_code, const char *,
+				    int, const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void rtl_check_failed_code2 (const_rtx, enum rtx_code, enum rtx_code,
+				    const char *, int, const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void rtl_check_failed_code3 (const_rtx, enum rtx_code, enum rtx_code,
+				    enum rtx_code, const char *, int,
+				    const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void rtl_check_failed_code_mode (const_rtx, enum rtx_code, machine_mode,
+					bool, const char *, int, const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void rtl_check_failed_block_symbol (const char *, int, const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void cwi_check_failed_bounds (const_rtx, int, const char *, int,
+				     const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void rtvec_check_failed_bounds (const_rtvec, int, const char *, int,
+				       const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+
+#else   /* not ENABLE_RTL_CHECKING */
+
+#define RTL_CHECK1(RTX, N, C1)      ((RTX)->u.fld[N])
+#define RTL_CHECK2(RTX, N, C1, C2)  ((RTX)->u.fld[N])
+#define RTL_CHECKC1(RTX, N, C)	    ((RTX)->u.fld[N])
+#define RTL_CHECKC2(RTX, N, C1, C2) ((RTX)->u.fld[N])
+#define RTL_CHECKC3(RTX, N, C1, C2, C3) ((RTX)->u.fld[N])
+#define RTVEC_ELT(RTVEC, I)	    ((RTVEC)->elem[I])
+#define XWINT(RTX, N)		    ((RTX)->u.hwint[N])
+#define CWI_ELT(RTX, I)		    ((RTX)->u.hwiv.elem[I])
+#define XCWINT(RTX, N, C)	    ((RTX)->u.hwint[N])
+#define XCMWINT(RTX, N, C, M)	    ((RTX)->u.hwint[N])
+#define XCNMWINT(RTX, N, C, M)	    ((RTX)->u.hwint[N])
+#define XCNMPRV(RTX, C, M)	    (&(RTX)->u.rv)
+#define XCNMPFV(RTX, C, M)	    (&(RTX)->u.fv)
+#define REG_CHECK(RTX)		    (&(RTX)->u.reg)
+#define BLOCK_SYMBOL_CHECK(RTX)	    (&(RTX)->u.block_sym)
+#define HWIVEC_CHECK(RTX,C)	    (&(RTX)->u.hwiv)
+
+#endif
+
+/* General accessor macros for accessing the flags of an rtx.  */
+
+/* Access an individual rtx flag, with no checking of any kind.  */
+#define RTX_FLAG(RTX, FLAG)	((RTX)->FLAG)
+
+#if defined ENABLE_RTL_FLAG_CHECKING && (GCC_VERSION >= 2007)
+#define RTL_FLAG_CHECK1(NAME, RTX, C1) __extension__			\
+({ __typeof (RTX) const _rtx = (RTX);					\
+   if (GET_CODE (_rtx) != C1)						\
+     rtl_check_failed_flag  (NAME, _rtx, __FILE__, __LINE__,		\
+			     __FUNCTION__);				\
+   _rtx; })
+
+#define RTL_FLAG_CHECK2(NAME, RTX, C1, C2) __extension__		\
+({ __typeof (RTX) const _rtx = (RTX);					\
+   if (GET_CODE (_rtx) != C1 && GET_CODE(_rtx) != C2)			\
+     rtl_check_failed_flag  (NAME,_rtx, __FILE__, __LINE__,		\
+			      __FUNCTION__);				\
+   _rtx; })
+
+#define RTL_FLAG_CHECK3(NAME, RTX, C1, C2, C3) __extension__		\
+({ __typeof (RTX) const _rtx = (RTX);					\
+   if (GET_CODE (_rtx) != C1 && GET_CODE(_rtx) != C2			\
+       && GET_CODE (_rtx) != C3)					\
+     rtl_check_failed_flag  (NAME, _rtx, __FILE__, __LINE__,		\
+			     __FUNCTION__);				\
+   _rtx; })
+
+#define RTL_FLAG_CHECK4(NAME, RTX, C1, C2, C3, C4) __extension__	\
+({ __typeof (RTX) const _rtx = (RTX);					\
+   if (GET_CODE (_rtx) != C1 && GET_CODE(_rtx) != C2			\
+       && GET_CODE (_rtx) != C3 && GET_CODE(_rtx) != C4)		\
+     rtl_check_failed_flag  (NAME, _rtx, __FILE__, __LINE__,		\
+			      __FUNCTION__);				\
+   _rtx; })
+
+#define RTL_FLAG_CHECK5(NAME, RTX, C1, C2, C3, C4, C5) __extension__	\
+({ __typeof (RTX) const _rtx = (RTX);					\
+   if (GET_CODE (_rtx) != C1 && GET_CODE (_rtx) != C2			\
+       && GET_CODE (_rtx) != C3 && GET_CODE (_rtx) != C4		\
+       && GET_CODE (_rtx) != C5)					\
+     rtl_check_failed_flag  (NAME, _rtx, __FILE__, __LINE__,		\
+			     __FUNCTION__);				\
+   _rtx; })
+
+#define RTL_FLAG_CHECK6(NAME, RTX, C1, C2, C3, C4, C5, C6)		\
+  __extension__								\
+({ __typeof (RTX) const _rtx = (RTX);					\
+   if (GET_CODE (_rtx) != C1 && GET_CODE (_rtx) != C2			\
+       && GET_CODE (_rtx) != C3 && GET_CODE (_rtx) != C4		\
+       && GET_CODE (_rtx) != C5 && GET_CODE (_rtx) != C6)		\
+     rtl_check_failed_flag  (NAME,_rtx, __FILE__, __LINE__,		\
+			     __FUNCTION__);				\
+   _rtx; })
+
+#define RTL_FLAG_CHECK7(NAME, RTX, C1, C2, C3, C4, C5, C6, C7)		\
+  __extension__								\
+({ __typeof (RTX) const _rtx = (RTX);					\
+   if (GET_CODE (_rtx) != C1 && GET_CODE (_rtx) != C2			\
+       && GET_CODE (_rtx) != C3 && GET_CODE (_rtx) != C4		\
+       && GET_CODE (_rtx) != C5 && GET_CODE (_rtx) != C6		\
+       && GET_CODE (_rtx) != C7)					\
+     rtl_check_failed_flag  (NAME, _rtx, __FILE__, __LINE__,		\
+			     __FUNCTION__);				\
+   _rtx; })
+
+#define RTL_INSN_CHAIN_FLAG_CHECK(NAME, RTX) 				\
+  __extension__								\
+({ __typeof (RTX) const _rtx = (RTX);					\
+   if (!INSN_CHAIN_CODE_P (GET_CODE (_rtx)))				\
+     rtl_check_failed_flag (NAME, _rtx, __FILE__, __LINE__,		\
+			    __FUNCTION__);				\
+   _rtx; })
+
+extern void rtl_check_failed_flag (const char *, const_rtx, const char *,
+				   int, const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD
+    ;
+
+#else	/* not ENABLE_RTL_FLAG_CHECKING */
+
+#define RTL_FLAG_CHECK1(NAME, RTX, C1)					(RTX)
+#define RTL_FLAG_CHECK2(NAME, RTX, C1, C2)				(RTX)
+#define RTL_FLAG_CHECK3(NAME, RTX, C1, C2, C3)				(RTX)
+#define RTL_FLAG_CHECK4(NAME, RTX, C1, C2, C3, C4)			(RTX)
+#define RTL_FLAG_CHECK5(NAME, RTX, C1, C2, C3, C4, C5)			(RTX)
+#define RTL_FLAG_CHECK6(NAME, RTX, C1, C2, C3, C4, C5, C6)		(RTX)
+#define RTL_FLAG_CHECK7(NAME, RTX, C1, C2, C3, C4, C5, C6, C7)		(RTX)
+#define RTL_INSN_CHAIN_FLAG_CHECK(NAME, RTX) 				(RTX)
+#endif
+
+#define XINT(RTX, N)	(RTL_CHECK2 (RTX, N, 'i', 'n').rt_int)
+#define XUINT(RTX, N)   (RTL_CHECK2 (RTX, N, 'i', 'n').rt_uint)
+#define XSTR(RTX, N)	(RTL_CHECK2 (RTX, N, 's', 'S').rt_str)
+#define XEXP(RTX, N)	(RTL_CHECK2 (RTX, N, 'e', 'u').rt_rtx)
+#define XVEC(RTX, N)	(RTL_CHECK2 (RTX, N, 'E', 'V').rt_rtvec)
+#define XMODE(RTX, N)	(RTL_CHECK1 (RTX, N, 'M').rt_type)
+#define XTREE(RTX, N)   (RTL_CHECK1 (RTX, N, 't').rt_tree)
+#define XBBDEF(RTX, N)	(RTL_CHECK1 (RTX, N, 'B').rt_bb)
+#define XTMPL(RTX, N)	(RTL_CHECK1 (RTX, N, 'T').rt_str)
+#define XCFI(RTX, N)	(RTL_CHECK1 (RTX, N, 'C').rt_cfi)
+
+#define XVECEXP(RTX, N, M)	RTVEC_ELT (XVEC (RTX, N), M)
+#define XVECLEN(RTX, N)		GET_NUM_ELEM (XVEC (RTX, N))
+
+/* These are like XINT, etc. except that they expect a '0' field instead
+   of the normal type code.  */
+
+#define X0INT(RTX, N)	   (RTL_CHECK1 (RTX, N, '0').rt_int)
+#define X0UINT(RTX, N)	   (RTL_CHECK1 (RTX, N, '0').rt_uint)
+#define X0STR(RTX, N)	   (RTL_CHECK1 (RTX, N, '0').rt_str)
+#define X0EXP(RTX, N)	   (RTL_CHECK1 (RTX, N, '0').rt_rtx)
+#define X0VEC(RTX, N)	   (RTL_CHECK1 (RTX, N, '0').rt_rtvec)
+#define X0MODE(RTX, N)	   (RTL_CHECK1 (RTX, N, '0').rt_type)
+#define X0TREE(RTX, N)	   (RTL_CHECK1 (RTX, N, '0').rt_tree)
+#define X0BBDEF(RTX, N)	   (RTL_CHECK1 (RTX, N, '0').rt_bb)
+#define X0ADVFLAGS(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_addr_diff_vec_flags)
+#define X0CSELIB(RTX, N)   (RTL_CHECK1 (RTX, N, '0').rt_cselib)
+#define X0MEMATTR(RTX, N)  (RTL_CHECKC1 (RTX, N, MEM).rt_mem)
+#define X0CONSTANT(RTX, N) (RTL_CHECK1 (RTX, N, '0').rt_constant)
+
+/* Access a '0' field with any type.  */
+#define X0ANY(RTX, N)	   RTL_CHECK1 (RTX, N, '0')
+
+#define XCINT(RTX, N, C)      (RTL_CHECKC1 (RTX, N, C).rt_int)
+#define XCUINT(RTX, N, C)     (RTL_CHECKC1 (RTX, N, C).rt_uint)
+#define XCSUBREG(RTX, N, C)   (RTL_CHECKC1 (RTX, N, C).rt_subreg)
+#define XCSTR(RTX, N, C)      (RTL_CHECKC1 (RTX, N, C).rt_str)
+#define XCEXP(RTX, N, C)      (RTL_CHECKC1 (RTX, N, C).rt_rtx)
+#define XCVEC(RTX, N, C)      (RTL_CHECKC1 (RTX, N, C).rt_rtvec)
+#define XCMODE(RTX, N, C)     (RTL_CHECKC1 (RTX, N, C).rt_type)
+#define XCTREE(RTX, N, C)     (RTL_CHECKC1 (RTX, N, C).rt_tree)
+#define XCBBDEF(RTX, N, C)    (RTL_CHECKC1 (RTX, N, C).rt_bb)
+#define XCCFI(RTX, N, C)      (RTL_CHECKC1 (RTX, N, C).rt_cfi)
+#define XCCSELIB(RTX, N, C)   (RTL_CHECKC1 (RTX, N, C).rt_cselib)
+
+#define XCVECEXP(RTX, N, M, C)	RTVEC_ELT (XCVEC (RTX, N, C), M)
+#define XCVECLEN(RTX, N, C)	GET_NUM_ELEM (XCVEC (RTX, N, C))
+
+#define XC2EXP(RTX, N, C1, C2)      (RTL_CHECKC2 (RTX, N, C1, C2).rt_rtx)
+#define XC3EXP(RTX, N, C1, C2, C3)  (RTL_CHECKC3 (RTX, N, C1, C2, C3).rt_rtx)
+
+
+/* Methods of rtx_expr_list.  */
+
+inline rtx_expr_list *rtx_expr_list::next () const
+{
+  rtx tmp = XEXP (this, 1);
+  return safe_as_a <rtx_expr_list *> (tmp);
+}
+
+inline rtx rtx_expr_list::element () const
+{
+  return XEXP (this, 0);
+}
+
+/* Methods of rtx_insn_list.  */
+
+inline rtx_insn_list *rtx_insn_list::next () const
+{
+  rtx tmp = XEXP (this, 1);
+  return safe_as_a <rtx_insn_list *> (tmp);
+}
+
+inline rtx_insn *rtx_insn_list::insn () const
+{
+  rtx tmp = XEXP (this, 0);
+  return safe_as_a <rtx_insn *> (tmp);
+}
+
+/* Methods of rtx_sequence.  */
+
+inline int rtx_sequence::len () const
+{
+  return XVECLEN (this, 0);
+}
+
+inline rtx rtx_sequence::element (int index) const
+{
+  return XVECEXP (this, 0, index);
+}
+
+inline rtx_insn *rtx_sequence::insn (int index) const
+{
+  return as_a <rtx_insn *> (XVECEXP (this, 0, index));
+}
+
+/* ACCESS MACROS for particular fields of insns.  */
+
+/* Holds a unique number for each insn.
+   These are not necessarily sequentially increasing.  */
+inline int INSN_UID (const_rtx insn)
+{
+  return RTL_INSN_CHAIN_FLAG_CHECK ("INSN_UID",
+				    (insn))->u2.insn_uid;
+}
+inline int& INSN_UID (rtx insn)
+{
+  return RTL_INSN_CHAIN_FLAG_CHECK ("INSN_UID",
+				    (insn))->u2.insn_uid;
+}
+
+/* Chain insns together in sequence.  */
+
+/* For now these are split in two: an rvalue form:
+     PREV_INSN/NEXT_INSN
+   and an lvalue form:
+     SET_NEXT_INSN/SET_PREV_INSN.  */
+
+inline rtx_insn *PREV_INSN (const rtx_insn *insn)
+{
+  rtx prev = XEXP (insn, 0);
+  return safe_as_a <rtx_insn *> (prev);
+}
+
+inline rtx& SET_PREV_INSN (rtx_insn *insn)
+{
+  return XEXP (insn, 0);
+}
+
+inline rtx_insn *NEXT_INSN (const rtx_insn *insn)
+{
+  rtx next = XEXP (insn, 1);
+  return safe_as_a <rtx_insn *> (next);
+}
+
+inline rtx& SET_NEXT_INSN (rtx_insn *insn)
+{
+  return XEXP (insn, 1);
+}
+
+inline basic_block BLOCK_FOR_INSN (const_rtx insn)
+{
+  return XBBDEF (insn, 2);
+}
+
+inline basic_block& BLOCK_FOR_INSN (rtx insn)
+{
+  return XBBDEF (insn, 2);
+}
+
+inline void set_block_for_insn (rtx_insn *insn, basic_block bb)
+{
+  BLOCK_FOR_INSN (insn) = bb;
+}
+
+/* The body of an insn.  */
+inline rtx PATTERN (const_rtx insn)
+{
+  return XEXP (insn, 3);
+}
+
+inline rtx& PATTERN (rtx insn)
+{
+  return XEXP (insn, 3);
+}
+
+inline unsigned int INSN_LOCATION (const rtx_insn *insn)
+{
+  return XUINT (insn, 4);
+}
+
+inline unsigned int& INSN_LOCATION (rtx_insn *insn)
+{
+  return XUINT (insn, 4);
+}
+
+inline bool INSN_HAS_LOCATION (const rtx_insn *insn)
+{
+  return LOCATION_LOCUS (INSN_LOCATION (insn)) != UNKNOWN_LOCATION;
+}
+
+/* LOCATION of an RTX if relevant.  */
+#define RTL_LOCATION(X) (INSN_P (X) ? \
+			 INSN_LOCATION (as_a <rtx_insn *> (X)) \
+			 : UNKNOWN_LOCATION)
+
+/* Code number of instruction, from when it was recognized.
+   -1 means this instruction has not been recognized yet.  */
+#define INSN_CODE(INSN) XINT (INSN, 5)
+
+inline rtvec rtx_jump_table_data::get_labels () const
+{
+  rtx pat = PATTERN (this);
+  if (GET_CODE (pat) == ADDR_VEC)
+    return XVEC (pat, 0);
+  else
+    return XVEC (pat, 1); /* presumably an ADDR_DIFF_VEC */
+}
+
+/* Return the mode of the data in the table, which is always a scalar
+   integer.  */
+
+inline scalar_int_mode
+rtx_jump_table_data::get_data_mode () const
+{
+  return as_a <scalar_int_mode> (GET_MODE (PATTERN (this)));
+}
+
+/* If LABEL is followed by a jump table, return the table, otherwise
+   return null.  */
+
+inline rtx_jump_table_data *
+jump_table_for_label (const rtx_code_label *label)
+{
+  return safe_dyn_cast <rtx_jump_table_data *> (NEXT_INSN (label));
+}
+
+#define RTX_FRAME_RELATED_P(RTX)					\
+  (RTL_FLAG_CHECK6 ("RTX_FRAME_RELATED_P", (RTX), DEBUG_INSN, INSN,	\
+		    CALL_INSN, JUMP_INSN, BARRIER, SET)->frame_related)
+
+/* 1 if JUMP RTX is a crossing jump.  */
+#define CROSSING_JUMP_P(RTX) \
+  (RTL_FLAG_CHECK1 ("CROSSING_JUMP_P", (RTX), JUMP_INSN)->jump)
+
+/* 1 if RTX is a call to a const function.  Built from ECF_CONST and
+   TREE_READONLY.  */
+#define RTL_CONST_CALL_P(RTX)					\
+  (RTL_FLAG_CHECK1 ("RTL_CONST_CALL_P", (RTX), CALL_INSN)->unchanging)
+
+/* 1 if RTX is a call to a pure function.  Built from ECF_PURE and
+   DECL_PURE_P.  */
+#define RTL_PURE_CALL_P(RTX)					\
+  (RTL_FLAG_CHECK1 ("RTL_PURE_CALL_P", (RTX), CALL_INSN)->return_val)
+
+/* 1 if RTX is a call to a const or pure function.  */
+#define RTL_CONST_OR_PURE_CALL_P(RTX) \
+  (RTL_CONST_CALL_P (RTX) || RTL_PURE_CALL_P (RTX))
+
+/* 1 if RTX is a call to a looping const or pure function.  Built from
+   ECF_LOOPING_CONST_OR_PURE and DECL_LOOPING_CONST_OR_PURE_P.  */
+#define RTL_LOOPING_CONST_OR_PURE_CALL_P(RTX)				\
+  (RTL_FLAG_CHECK1 ("CONST_OR_PURE_CALL_P", (RTX), CALL_INSN)->call)
+
+/* 1 if RTX is a call_insn for a sibling call.  */
+#define SIBLING_CALL_P(RTX)						\
+  (RTL_FLAG_CHECK1 ("SIBLING_CALL_P", (RTX), CALL_INSN)->jump)
+
+/* 1 if RTX is a jump_insn, call_insn, or insn that is an annulling branch.  */
+#define INSN_ANNULLED_BRANCH_P(RTX)					\
+  (RTL_FLAG_CHECK1 ("INSN_ANNULLED_BRANCH_P", (RTX), JUMP_INSN)->unchanging)
+
+/* 1 if RTX is an insn in a delay slot and is from the target of the branch.
+   If the branch insn has INSN_ANNULLED_BRANCH_P set, this insn should only be
+   executed if the branch is taken.  For annulled branches with this bit
+   clear, the insn should be executed only if the branch is not taken.  */
+#define INSN_FROM_TARGET_P(RTX)						\
+  (RTL_FLAG_CHECK3 ("INSN_FROM_TARGET_P", (RTX), INSN, JUMP_INSN, \
+		    CALL_INSN)->in_struct)
+
+/* In an ADDR_DIFF_VEC, the flags for RTX for use by branch shortening.
+   See the comments for ADDR_DIFF_VEC in rtl.def.  */
+#define ADDR_DIFF_VEC_FLAGS(RTX) X0ADVFLAGS (RTX, 4)
+
+/* In a VALUE, the value cselib has assigned to RTX.
+   This is a "struct cselib_val", see cselib.h.  */
+#define CSELIB_VAL_PTR(RTX) X0CSELIB (RTX, 0)
+
+/* Holds a list of notes on what this insn does to various REGs.
+   It is a chain of EXPR_LIST rtx's, where the second operand is the
+   chain pointer and the first operand is the REG being described.
+   The mode field of the EXPR_LIST contains not a real machine mode
+   but a value from enum reg_note.  */
+#define REG_NOTES(INSN)	XEXP(INSN, 6)
+
+/* In an ENTRY_VALUE this is the DECL_INCOMING_RTL of the argument in
+   question.  */
+#define ENTRY_VALUE_EXP(RTX) (RTL_CHECKC1 (RTX, 0, ENTRY_VALUE).rt_rtx)
+
+enum reg_note
+{
+#define DEF_REG_NOTE(NAME) NAME,
+#include "reg-notes.def"
+#undef DEF_REG_NOTE
+  REG_NOTE_MAX
+};
+
+/* Define macros to extract and insert the reg-note kind in an EXPR_LIST.  */
+#define REG_NOTE_KIND(LINK) ((enum reg_note) GET_MODE (LINK))
+#define PUT_REG_NOTE_KIND(LINK, KIND) \
+  PUT_MODE_RAW (LINK, (machine_mode) (KIND))
+
+/* Names for REG_NOTE's in EXPR_LIST insn's.  */
+
+extern const char * const reg_note_name[];
+#define GET_REG_NOTE_NAME(MODE) (reg_note_name[(int) (MODE)])
+
+/* This field is only present on CALL_INSNs.  It holds a chain of EXPR_LIST of
+   USE and CLOBBER expressions.
+     USE expressions list the registers filled with arguments that
+   are passed to the function.
+     CLOBBER expressions document the registers explicitly clobbered
+   by this CALL_INSN.
+     Pseudo registers cannot be mentioned in this list.  */
+#define CALL_INSN_FUNCTION_USAGE(INSN)	XEXP(INSN, 7)
+
+/* The label-number of a code-label.  The assembler label
+   is made from `L' and the label-number printed in decimal.
+   Label numbers are unique in a compilation.  */
+#define CODE_LABEL_NUMBER(INSN)	XINT (INSN, 5)
+
+/* In a NOTE that is a line number, this is a string for the file name that the
+   line is in.  We use the same field to record block numbers temporarily in
+   NOTE_INSN_BLOCK_BEG and NOTE_INSN_BLOCK_END notes.  (We avoid lots of casts
+   between ints and pointers if we use a different macro for the block number.)
+   */
+
+/* Opaque data.  */
+#define NOTE_DATA(INSN)	        RTL_CHECKC1 (INSN, 3, NOTE)
+#define NOTE_DELETED_LABEL_NAME(INSN) XCSTR (INSN, 3, NOTE)
+#define SET_INSN_DELETED(INSN) set_insn_deleted (INSN);
+#define NOTE_BLOCK(INSN)	XCTREE (INSN, 3, NOTE)
+#define NOTE_EH_HANDLER(INSN)	XCINT (INSN, 3, NOTE)
+#define NOTE_BASIC_BLOCK(INSN)	XCBBDEF (INSN, 3, NOTE)
+#define NOTE_VAR_LOCATION(INSN)	XCEXP (INSN, 3, NOTE)
+#define NOTE_MARKER_LOCATION(INSN) XCUINT (INSN, 3, NOTE)
+#define NOTE_CFI(INSN)		XCCFI (INSN, 3, NOTE)
+#define NOTE_LABEL_NUMBER(INSN)	XCINT (INSN, 3, NOTE)
+
+/* In a NOTE that is a line number, this is the line number.
+   Other kinds of NOTEs are identified by negative numbers here.  */
+#define NOTE_KIND(INSN) XCINT (INSN, 4, NOTE)
+
+/* Nonzero if INSN is a note marking the beginning of a basic block.  */
+#define NOTE_INSN_BASIC_BLOCK_P(INSN) \
+  (NOTE_P (INSN) && NOTE_KIND (INSN) == NOTE_INSN_BASIC_BLOCK)
+
+/* Nonzero if INSN is a debug nonbind marker note,
+   for which NOTE_MARKER_LOCATION can be used.  */
+#define NOTE_MARKER_P(INSN)				\
+  (NOTE_P (INSN) &&					\
+   (NOTE_KIND (INSN) == NOTE_INSN_BEGIN_STMT		\
+    || NOTE_KIND (INSN) == NOTE_INSN_INLINE_ENTRY))
+
+/* Variable declaration and the location of a variable.  */
+#define PAT_VAR_LOCATION_DECL(PAT) (XCTREE ((PAT), 0, VAR_LOCATION))
+#define PAT_VAR_LOCATION_LOC(PAT) (XCEXP ((PAT), 1, VAR_LOCATION))
+
+/* Initialization status of the variable in the location.  Status
+   can be unknown, uninitialized or initialized.  See enumeration
+   type below.  */
+#define PAT_VAR_LOCATION_STATUS(PAT) \
+  (RTL_FLAG_CHECK1 ("PAT_VAR_LOCATION_STATUS", PAT, VAR_LOCATION) \
+   ->u2.var_location_status)
+
+/* Accessors for a NOTE_INSN_VAR_LOCATION.  */
+#define NOTE_VAR_LOCATION_DECL(NOTE) \
+  PAT_VAR_LOCATION_DECL (NOTE_VAR_LOCATION (NOTE))
+#define NOTE_VAR_LOCATION_LOC(NOTE) \
+  PAT_VAR_LOCATION_LOC (NOTE_VAR_LOCATION (NOTE))
+#define NOTE_VAR_LOCATION_STATUS(NOTE) \
+  PAT_VAR_LOCATION_STATUS (NOTE_VAR_LOCATION (NOTE))
+
+/* Evaluate to TRUE if INSN is a debug insn that denotes a variable
+   location/value tracking annotation.  */
+#define DEBUG_BIND_INSN_P(INSN)			\
+  (DEBUG_INSN_P (INSN)				\
+   && (GET_CODE (PATTERN (INSN))		\
+       == VAR_LOCATION))
+/* Evaluate to TRUE if INSN is a debug insn that denotes a program
+   source location marker.  */
+#define DEBUG_MARKER_INSN_P(INSN)		\
+  (DEBUG_INSN_P (INSN)				\
+   && (GET_CODE (PATTERN (INSN))		\
+       != VAR_LOCATION))
+/* Evaluate to the marker kind.  */
+#define INSN_DEBUG_MARKER_KIND(INSN)		  \
+  (GET_CODE (PATTERN (INSN)) == DEBUG_MARKER	  \
+   ? (GET_MODE (PATTERN (INSN)) == VOIDmode	  \
+      ? NOTE_INSN_BEGIN_STMT			  \
+      : GET_MODE (PATTERN (INSN)) == BLKmode	  \
+      ? NOTE_INSN_INLINE_ENTRY			  \
+      : (enum insn_note)-1) 			  \
+   : (enum insn_note)-1)
+/* Create patterns for debug markers.  These and the above abstract
+   the representation, so that it's easier to get rid of the abuse of
+   the mode to hold the marker kind.  Other marker types are
+   envisioned, so a single bit flag won't do; maybe separate RTL codes
+   wouldn't be a problem.  */
+#define GEN_RTX_DEBUG_MARKER_BEGIN_STMT_PAT() \
+  gen_rtx_DEBUG_MARKER (VOIDmode)
+#define GEN_RTX_DEBUG_MARKER_INLINE_ENTRY_PAT() \
+  gen_rtx_DEBUG_MARKER (BLKmode)
+
+/* The VAR_LOCATION rtx in a DEBUG_INSN.  */
+#define INSN_VAR_LOCATION(INSN) \
+  (RTL_FLAG_CHECK1 ("INSN_VAR_LOCATION", PATTERN (INSN), VAR_LOCATION))
+/* A pointer to the VAR_LOCATION rtx in a DEBUG_INSN.  */
+#define INSN_VAR_LOCATION_PTR(INSN) \
+  (&PATTERN (INSN))
+
+/* Accessors for a tree-expanded var location debug insn.  */
+#define INSN_VAR_LOCATION_DECL(INSN) \
+  PAT_VAR_LOCATION_DECL (INSN_VAR_LOCATION (INSN))
+#define INSN_VAR_LOCATION_LOC(INSN) \
+  PAT_VAR_LOCATION_LOC (INSN_VAR_LOCATION (INSN))
+#define INSN_VAR_LOCATION_STATUS(INSN) \
+  PAT_VAR_LOCATION_STATUS (INSN_VAR_LOCATION (INSN))
+
+/* Expand to the RTL that denotes an unknown variable location in a
+   DEBUG_INSN.  */
+#define gen_rtx_UNKNOWN_VAR_LOC() (gen_rtx_CLOBBER (VOIDmode, const0_rtx))
+
+/* Determine whether X is such an unknown location.  */
+#define VAR_LOC_UNKNOWN_P(X) \
+  (GET_CODE (X) == CLOBBER && XEXP ((X), 0) == const0_rtx)
+
+/* 1 if RTX is emitted after a call, but it should take effect before
+   the call returns.  */
+#define NOTE_DURING_CALL_P(RTX)				\
+  (RTL_FLAG_CHECK1 ("NOTE_VAR_LOCATION_DURING_CALL_P", (RTX), NOTE)->call)
+
+/* DEBUG_EXPR_DECL corresponding to a DEBUG_EXPR RTX.  */
+#define DEBUG_EXPR_TREE_DECL(RTX) XCTREE (RTX, 0, DEBUG_EXPR)
+
+/* VAR_DECL/PARM_DECL DEBUG_IMPLICIT_PTR takes address of.  */
+#define DEBUG_IMPLICIT_PTR_DECL(RTX) XCTREE (RTX, 0, DEBUG_IMPLICIT_PTR)
+
+/* PARM_DECL DEBUG_PARAMETER_REF references.  */
+#define DEBUG_PARAMETER_REF_DECL(RTX) XCTREE (RTX, 0, DEBUG_PARAMETER_REF)
+
+/* Codes that appear in the NOTE_KIND field for kinds of notes
+   that are not line numbers.  These codes are all negative.
+
+   Notice that we do not try to use zero here for any of
+   the special note codes because sometimes the source line
+   actually can be zero!  This happens (for example) when we
+   are generating code for the per-translation-unit constructor
+   and destructor routines for some C++ translation unit.  */
+
+enum insn_note
+{
+#define DEF_INSN_NOTE(NAME) NAME,
+#include "insn-notes.def"
+#undef DEF_INSN_NOTE
+
+  NOTE_INSN_MAX
+};
+
+/* Names for NOTE insn's other than line numbers.  */
+
+extern const char * const note_insn_name[NOTE_INSN_MAX];
+#define GET_NOTE_INSN_NAME(NOTE_CODE) \
+  (note_insn_name[(NOTE_CODE)])
+
+/* The name of a label, in case it corresponds to an explicit label
+   in the input source code.  */
+#define LABEL_NAME(RTX) XCSTR (RTX, 6, CODE_LABEL)
+
+/* In jump.c, each label contains a count of the number
+   of LABEL_REFs that point at it, so unused labels can be deleted.  */
+#define LABEL_NUSES(RTX) XCINT (RTX, 4, CODE_LABEL)
+
+/* Labels carry a two-bit field composed of the ->jump and ->call
+   bits.  This field indicates whether the label is an alternate
+   entry point, and if so, what kind.  */
+enum label_kind
+{
+  LABEL_NORMAL = 0,	/* ordinary label */
+  LABEL_STATIC_ENTRY,	/* alternate entry point, not exported */
+  LABEL_GLOBAL_ENTRY,	/* alternate entry point, exported */
+  LABEL_WEAK_ENTRY	/* alternate entry point, exported as weak symbol */
+};
+
+#if defined ENABLE_RTL_FLAG_CHECKING && (GCC_VERSION > 2007)
+
+/* Retrieve the kind of LABEL.  */
+#define LABEL_KIND(LABEL) __extension__					\
+({ __typeof (LABEL) const _label = (LABEL);				\
+   if (! LABEL_P (_label))						\
+     rtl_check_failed_flag ("LABEL_KIND", _label, __FILE__, __LINE__,	\
+			    __FUNCTION__);				\
+   (enum label_kind) ((_label->jump << 1) | _label->call); })
+
+/* Set the kind of LABEL.  */
+#define SET_LABEL_KIND(LABEL, KIND) do {				\
+   __typeof (LABEL) const _label = (LABEL);				\
+   const unsigned int _kind = (KIND);					\
+   if (! LABEL_P (_label))						\
+     rtl_check_failed_flag ("SET_LABEL_KIND", _label, __FILE__, __LINE__, \
+			    __FUNCTION__);				\
+   _label->jump = ((_kind >> 1) & 1);					\
+   _label->call = (_kind & 1);						\
+} while (0)
+
+#else
+
+/* Retrieve the kind of LABEL.  */
+#define LABEL_KIND(LABEL) \
+   ((enum label_kind) (((LABEL)->jump << 1) | (LABEL)->call))
+
+/* Set the kind of LABEL.  */
+#define SET_LABEL_KIND(LABEL, KIND) do {				\
+   rtx const _label = (LABEL);						\
+   const unsigned int _kind = (KIND);					\
+   _label->jump = ((_kind >> 1) & 1);					\
+   _label->call = (_kind & 1);						\
+} while (0)
+
+#endif /* rtl flag checking */
+
+#define LABEL_ALT_ENTRY_P(LABEL) (LABEL_KIND (LABEL) != LABEL_NORMAL)
+
+/* In jump.c, each JUMP_INSN can point to a label that it can jump to,
+   so that if the JUMP_INSN is deleted, the label's LABEL_NUSES can
+   be decremented and possibly the label can be deleted.  */
+#define JUMP_LABEL(INSN)   XCEXP (INSN, 7, JUMP_INSN)
+
+inline rtx_insn *JUMP_LABEL_AS_INSN (const rtx_insn *insn)
+{
+  return safe_as_a <rtx_insn *> (JUMP_LABEL (insn));
+}
+
+/* Methods of rtx_jump_insn.  */
+
+inline rtx rtx_jump_insn::jump_label () const
+{
+  return JUMP_LABEL (this);
+}
+
+inline rtx_code_label *rtx_jump_insn::jump_target () const
+{
+  return safe_as_a <rtx_code_label *> (JUMP_LABEL (this));
+}
+
+inline void rtx_jump_insn::set_jump_target (rtx_code_label *target)
+{
+  JUMP_LABEL (this) = target;
+}
+
+/* Once basic blocks are found, each CODE_LABEL starts a chain that
+   goes through all the LABEL_REFs that jump to that label.  The chain
+   eventually winds up at the CODE_LABEL: it is circular.  */
+#define LABEL_REFS(LABEL) XCEXP (LABEL, 3, CODE_LABEL)
+
+/* Get the label that a LABEL_REF references.  */
+static inline rtx_insn *
+label_ref_label (const_rtx ref)
+{
+  return as_a<rtx_insn *> (XCEXP (ref, 0, LABEL_REF));
+}
+
+/* Set the label that LABEL_REF ref refers to.  */
+
+static inline void
+set_label_ref_label (rtx ref, rtx_insn *label)
+{
+  XCEXP (ref, 0, LABEL_REF) = label;
+}
+
+/* For a REG rtx, REGNO extracts the register number.  REGNO can only
+   be used on RHS.  Use SET_REGNO to change the value.  */
+#define REGNO(RTX) (rhs_regno(RTX))
+#define SET_REGNO(RTX, N) (df_ref_change_reg_with_loc (RTX, N))
+
+/* Return the number of consecutive registers in a REG.  This is always
+   1 for pseudo registers and is determined by TARGET_HARD_REGNO_NREGS for
+   hard registers.  */
+#define REG_NREGS(RTX) (REG_CHECK (RTX)->nregs)
+
+/* ORIGINAL_REGNO holds the number the register originally had; for a
+   pseudo register turned into a hard reg this will hold the old pseudo
+   register number.  */
+#define ORIGINAL_REGNO(RTX) \
+  (RTL_FLAG_CHECK1 ("ORIGINAL_REGNO", (RTX), REG)->u2.original_regno)
+
+/* Force the REGNO macro to only be used on the lhs.  */
+static inline unsigned int
+rhs_regno (const_rtx x)
+{
+  return REG_CHECK (x)->regno;
+}
+
+/* Return the final register in REG X plus one.  */
+static inline unsigned int
+END_REGNO (const_rtx x)
+{
+  return REGNO (x) + REG_NREGS (x);
+}
+
+/* Change the REGNO and REG_NREGS of REG X to the specified values,
+   bypassing the df machinery.  */
+static inline void
+set_regno_raw (rtx x, unsigned int regno, unsigned int nregs)
+{
+  reg_info *reg = REG_CHECK (x);
+  reg->regno = regno;
+  reg->nregs = nregs;
+}
+
+/* 1 if RTX is a reg or parallel that is the current function's return
+   value.  */
+#define REG_FUNCTION_VALUE_P(RTX)					\
+  (RTL_FLAG_CHECK2 ("REG_FUNCTION_VALUE_P", (RTX), REG, PARALLEL)->return_val)
+
+/* 1 if RTX is a reg that corresponds to a variable declared by the user.  */
+#define REG_USERVAR_P(RTX)						\
+  (RTL_FLAG_CHECK1 ("REG_USERVAR_P", (RTX), REG)->volatil)
+
+/* 1 if RTX is a reg that holds a pointer value.  */
+#define REG_POINTER(RTX)						\
+  (RTL_FLAG_CHECK1 ("REG_POINTER", (RTX), REG)->frame_related)
+
+/* 1 if RTX is a mem that holds a pointer value.  */
+#define MEM_POINTER(RTX)						\
+  (RTL_FLAG_CHECK1 ("MEM_POINTER", (RTX), MEM)->frame_related)
+
+/* 1 if the given register REG corresponds to a hard register.  */
+#define HARD_REGISTER_P(REG) (HARD_REGISTER_NUM_P (REGNO (REG)))
+
+/* 1 if the given register number REG_NO corresponds to a hard register.  */
+#define HARD_REGISTER_NUM_P(REG_NO) ((REG_NO) < FIRST_PSEUDO_REGISTER)
+
+/* For a CONST_INT rtx, INTVAL extracts the integer.  */
+#define INTVAL(RTX) XCWINT (RTX, 0, CONST_INT)
+#define UINTVAL(RTX) ((unsigned HOST_WIDE_INT) INTVAL (RTX))
+
+/* For a CONST_WIDE_INT, CONST_WIDE_INT_NUNITS is the number of
+   elements actually needed to represent the constant.
+   CONST_WIDE_INT_ELT gets one of the elements.  0 is the least
+   significant HOST_WIDE_INT.  */
+#define CONST_WIDE_INT_VEC(RTX) HWIVEC_CHECK (RTX, CONST_WIDE_INT)
+#define CONST_WIDE_INT_NUNITS(RTX) CWI_GET_NUM_ELEM (RTX)
+#define CONST_WIDE_INT_ELT(RTX, N) CWI_ELT (RTX, N)
+
+/* For a CONST_POLY_INT, CONST_POLY_INT_COEFFS gives access to the
+   individual coefficients, in the form of a trailing_wide_ints structure.  */
+#define CONST_POLY_INT_COEFFS(RTX) \
+  (RTL_FLAG_CHECK1("CONST_POLY_INT_COEFFS", (RTX), \
+		   CONST_POLY_INT)->u.cpi.coeffs)
+
+/* For a CONST_DOUBLE:
+#if TARGET_SUPPORTS_WIDE_INT == 0
+   For a VOIDmode, there are two integers CONST_DOUBLE_LOW is the
+     low-order word and ..._HIGH the high-order.
+#endif
+   For a float, there is a REAL_VALUE_TYPE structure, and
+     CONST_DOUBLE_REAL_VALUE(r) is a pointer to it.  */
+#define CONST_DOUBLE_LOW(r) XCMWINT (r, 0, CONST_DOUBLE, VOIDmode)
+#define CONST_DOUBLE_HIGH(r) XCMWINT (r, 1, CONST_DOUBLE, VOIDmode)
+#define CONST_DOUBLE_REAL_VALUE(r) \
+  ((const struct real_value *) XCNMPRV (r, CONST_DOUBLE, VOIDmode))
+
+#define CONST_FIXED_VALUE(r) \
+  ((const struct fixed_value *) XCNMPFV (r, CONST_FIXED, VOIDmode))
+#define CONST_FIXED_VALUE_HIGH(r) \
+  ((HOST_WIDE_INT) (CONST_FIXED_VALUE (r)->data.high))
+#define CONST_FIXED_VALUE_LOW(r) \
+  ((HOST_WIDE_INT) (CONST_FIXED_VALUE (r)->data.low))
+
+/* For a CONST_VECTOR, return element #n.  */
+#define CONST_VECTOR_ELT(RTX, N) const_vector_elt (RTX, N)
+
+/* See rtl.texi for a description of these macros.  */
+#define CONST_VECTOR_NPATTERNS(RTX) \
+ (RTL_FLAG_CHECK1 ("CONST_VECTOR_NPATTERNS", (RTX), CONST_VECTOR) \
+  ->u2.const_vector.npatterns)
+
+#define CONST_VECTOR_NELTS_PER_PATTERN(RTX) \
+ (RTL_FLAG_CHECK1 ("CONST_VECTOR_NELTS_PER_PATTERN", (RTX), CONST_VECTOR) \
+  ->u2.const_vector.nelts_per_pattern)
+
+#define CONST_VECTOR_DUPLICATE_P(RTX) \
+  (CONST_VECTOR_NELTS_PER_PATTERN (RTX) == 1)
+
+#define CONST_VECTOR_STEPPED_P(RTX) \
+  (CONST_VECTOR_NELTS_PER_PATTERN (RTX) == 3)
+
+#define CONST_VECTOR_ENCODED_ELT(RTX, N) XCVECEXP (RTX, 0, N, CONST_VECTOR)
+
+/* Return the number of elements encoded directly in a CONST_VECTOR.  */
+
+inline unsigned int
+const_vector_encoded_nelts (const_rtx x)
+{
+  return CONST_VECTOR_NPATTERNS (x) * CONST_VECTOR_NELTS_PER_PATTERN (x);
+}
+
+/* For a CONST_VECTOR, return the number of elements in a vector.  */
+#define CONST_VECTOR_NUNITS(RTX) GET_MODE_NUNITS (GET_MODE (RTX))
+
+/* For a SUBREG rtx, SUBREG_REG extracts the value we want a subreg of.
+   SUBREG_BYTE extracts the byte-number.  */
+
+#define SUBREG_REG(RTX) XCEXP (RTX, 0, SUBREG)
+#define SUBREG_BYTE(RTX) XCSUBREG (RTX, 1, SUBREG)
+
+/* in rtlanal.c */
+/* Return the right cost to give to an operation
+   to make the cost of the corresponding register-to-register instruction
+   N times that of a fast register-to-register instruction.  */
+#define COSTS_N_INSNS(N) ((N) * 4)
+
+/* Maximum cost of an rtl expression.  This value has the special meaning
+   not to use an rtx with this cost under any circumstances.  */
+#define MAX_COST INT_MAX
+
+/* Return true if CODE always has VOIDmode.  */
+
+static inline bool
+always_void_p (enum rtx_code code)
+{
+  return code == SET;
+}
+
+/* A structure to hold all available cost information about an rtl
+   expression.  */
+struct full_rtx_costs
+{
+  int speed;
+  int size;
+};
+
+/* Initialize a full_rtx_costs structure C to the maximum cost.  */
+static inline void
+init_costs_to_max (struct full_rtx_costs *c)
+{
+  c->speed = MAX_COST;
+  c->size = MAX_COST;
+}
+
+/* Initialize a full_rtx_costs structure C to zero cost.  */
+static inline void
+init_costs_to_zero (struct full_rtx_costs *c)
+{
+  c->speed = 0;
+  c->size = 0;
+}
+
+/* Compare two full_rtx_costs structures A and B, returning true
+   if A < B when optimizing for speed.  */
+static inline bool
+costs_lt_p (struct full_rtx_costs *a, struct full_rtx_costs *b,
+	    bool speed)
+{
+  if (speed)
+    return (a->speed < b->speed
+	    || (a->speed == b->speed && a->size < b->size));
+  else
+    return (a->size < b->size
+	    || (a->size == b->size && a->speed < b->speed));
+}
+
+/* Increase both members of the full_rtx_costs structure C by the
+   cost of N insns.  */
+static inline void
+costs_add_n_insns (struct full_rtx_costs *c, int n)
+{
+  c->speed += COSTS_N_INSNS (n);
+  c->size += COSTS_N_INSNS (n);
+}
+
+/* Describes the shape of a subreg:
+
+   inner_mode == the mode of the SUBREG_REG
+   offset     == the SUBREG_BYTE
+   outer_mode == the mode of the SUBREG itself.  */
+struct subreg_shape {
+  subreg_shape (machine_mode, poly_uint16, machine_mode);
+  bool operator == (const subreg_shape &) const;
+  bool operator != (const subreg_shape &) const;
+  unsigned HOST_WIDE_INT unique_id () const;
+
+  machine_mode inner_mode;
+  poly_uint16 offset;
+  machine_mode outer_mode;
+};
+
+inline
+subreg_shape::subreg_shape (machine_mode inner_mode_in,
+			    poly_uint16 offset_in,
+			    machine_mode outer_mode_in)
+  : inner_mode (inner_mode_in), offset (offset_in), outer_mode (outer_mode_in)
+{}
+
+inline bool
+subreg_shape::operator == (const subreg_shape &other) const
+{
+  return (inner_mode == other.inner_mode
+	  && known_eq (offset, other.offset)
+	  && outer_mode == other.outer_mode);
+}
+
+inline bool
+subreg_shape::operator != (const subreg_shape &other) const
+{
+  return !operator == (other);
+}
+
+/* Return an integer that uniquely identifies this shape.  Structures
+   like rtx_def assume that a mode can fit in an 8-bit bitfield and no
+   current mode is anywhere near being 65536 bytes in size, so the
+   id comfortably fits in an int.  */
+
+inline unsigned HOST_WIDE_INT
+subreg_shape::unique_id () const
+{
+  { STATIC_ASSERT (MAX_MACHINE_MODE <= 256); }
+  { STATIC_ASSERT (NUM_POLY_INT_COEFFS <= 3); }
+  { STATIC_ASSERT (sizeof (offset.coeffs[0]) <= 2); }
+  int res = (int) inner_mode + ((int) outer_mode << 8);
+  for (int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
+    res += (HOST_WIDE_INT) offset.coeffs[i] << ((1 + i) * 16);
+  return res;
+}
+
+/* Return the shape of a SUBREG rtx.  */
+
+static inline subreg_shape
+shape_of_subreg (const_rtx x)
+{
+  return subreg_shape (GET_MODE (SUBREG_REG (x)),
+		       SUBREG_BYTE (x), GET_MODE (x));
+}
+
+/* Information about an address.  This structure is supposed to be able
+   to represent all supported target addresses.  Please extend it if it
+   is not yet general enough.  */
+struct address_info {
+  /* The mode of the value being addressed, or VOIDmode if this is
+     a load-address operation with no known address mode.  */
+  machine_mode mode;
+
+  /* The address space.  */
+  addr_space_t as;
+
+  /* True if this is an RTX_AUTOINC address.  */
+  bool autoinc_p;
+
+  /* A pointer to the top-level address.  */
+  rtx *outer;
+
+  /* A pointer to the inner address, after all address mutations
+     have been stripped from the top-level address.  It can be one
+     of the following:
+
+     - A {PRE,POST}_{INC,DEC} of *BASE.  SEGMENT, INDEX and DISP are null.
+
+     - A {PRE,POST}_MODIFY of *BASE.  In this case either INDEX or DISP
+       points to the step value, depending on whether the step is variable
+       or constant respectively.  SEGMENT is null.
+
+     - A plain sum of the form SEGMENT + BASE + INDEX + DISP,
+       with null fields evaluating to 0.  */
+  rtx *inner;
+
+  /* Components that make up *INNER.  Each one may be null or nonnull.
+     When nonnull, their meanings are as follows:
+
+     - *SEGMENT is the "segment" of memory to which the address refers.
+       This value is entirely target-specific and is only called a "segment"
+       because that's its most typical use.  It contains exactly one UNSPEC,
+       pointed to by SEGMENT_TERM.  The contents of *SEGMENT do not need
+       reloading.
+
+     - *BASE is a variable expression representing a base address.
+       It contains exactly one REG, SUBREG or MEM, pointed to by BASE_TERM.
+
+     - *INDEX is a variable expression representing an index value.
+       It may be a scaled expression, such as a MULT.  It has exactly
+       one REG, SUBREG or MEM, pointed to by INDEX_TERM.
+
+     - *DISP is a constant, possibly mutated.  DISP_TERM points to the
+       unmutated RTX_CONST_OBJ.  */
+  rtx *segment;
+  rtx *base;
+  rtx *index;
+  rtx *disp;
+
+  rtx *segment_term;
+  rtx *base_term;
+  rtx *index_term;
+  rtx *disp_term;
+
+  /* In a {PRE,POST}_MODIFY address, this points to a second copy
+     of BASE_TERM, otherwise it is null.  */
+  rtx *base_term2;
+
+  /* ADDRESS if this structure describes an address operand, MEM if
+     it describes a MEM address.  */
+  enum rtx_code addr_outer_code;
+
+  /* If BASE is nonnull, this is the code of the rtx that contains it.  */
+  enum rtx_code base_outer_code;
+};
+
+/* This is used to bundle an rtx and a mode together so that the pair
+   can be used with the wi:: routines.  If we ever put modes into rtx
+   integer constants, this should go away and then just pass an rtx in.  */
+typedef std::pair <rtx, machine_mode> rtx_mode_t;
+
+namespace wi
+{
+  template <>
+  struct int_traits <rtx_mode_t>
+  {
+    static const enum precision_type precision_type = VAR_PRECISION;
+    static const bool host_dependent_precision = false;
+    /* This ought to be true, except for the special case that BImode
+       is canonicalized to STORE_FLAG_VALUE, which might be 1.  */
+    static const bool is_sign_extended = false;
+    static unsigned int get_precision (const rtx_mode_t &);
+    static wi::storage_ref decompose (HOST_WIDE_INT *, unsigned int,
+				      const rtx_mode_t &);
+  };
+}
+
+inline unsigned int
+wi::int_traits <rtx_mode_t>::get_precision (const rtx_mode_t &x)
+{
+  return GET_MODE_PRECISION (as_a <scalar_mode> (x.second));
+}
+
+inline wi::storage_ref
+wi::int_traits <rtx_mode_t>::decompose (HOST_WIDE_INT *,
+					unsigned int precision,
+					const rtx_mode_t &x)
+{
+  gcc_checking_assert (precision == get_precision (x));
+  switch (GET_CODE (x.first))
+    {
+    case CONST_INT:
+      if (precision < HOST_BITS_PER_WIDE_INT)
+	/* Nonzero BImodes are stored as STORE_FLAG_VALUE, which on many
+	   targets is 1 rather than -1.  */
+	gcc_checking_assert (INTVAL (x.first)
+			     == sext_hwi (INTVAL (x.first), precision)
+			     || (x.second == BImode && INTVAL (x.first) == 1));
+
+      return wi::storage_ref (&INTVAL (x.first), 1, precision);
+
+    case CONST_WIDE_INT:
+      return wi::storage_ref (&CONST_WIDE_INT_ELT (x.first, 0),
+			      CONST_WIDE_INT_NUNITS (x.first), precision);
+
+#if TARGET_SUPPORTS_WIDE_INT == 0
+    case CONST_DOUBLE:
+      return wi::storage_ref (&CONST_DOUBLE_LOW (x.first), 2, precision);
+#endif
+
+    default:
+      gcc_unreachable ();
+    }
+}
+
+namespace wi
+{
+  hwi_with_prec shwi (HOST_WIDE_INT, machine_mode mode);
+  wide_int min_value (machine_mode, signop);
+  wide_int max_value (machine_mode, signop);
+}
+
+inline wi::hwi_with_prec
+wi::shwi (HOST_WIDE_INT val, machine_mode mode)
+{
+  return shwi (val, GET_MODE_PRECISION (as_a <scalar_mode> (mode)));
+}
+
+/* Produce the smallest number that is represented in MODE.  The precision
+   is taken from MODE and the sign from SGN.  */
+inline wide_int
+wi::min_value (machine_mode mode, signop sgn)
+{
+  return min_value (GET_MODE_PRECISION (as_a <scalar_mode> (mode)), sgn);
+}
+
+/* Produce the largest number that is represented in MODE.  The precision
+   is taken from MODE and the sign from SGN.  */
+inline wide_int
+wi::max_value (machine_mode mode, signop sgn)
+{
+  return max_value (GET_MODE_PRECISION (as_a <scalar_mode> (mode)), sgn);
+}
+
+namespace wi
+{
+  typedef poly_int<NUM_POLY_INT_COEFFS,
+		   generic_wide_int <wide_int_ref_storage <false, false> > >
+    rtx_to_poly_wide_ref;
+  rtx_to_poly_wide_ref to_poly_wide (const_rtx, machine_mode);
+}
+
+/* Return the value of a CONST_POLY_INT in its native precision.  */
+
+inline wi::rtx_to_poly_wide_ref
+const_poly_int_value (const_rtx x)
+{
+  poly_int<NUM_POLY_INT_COEFFS, WIDE_INT_REF_FOR (wide_int)> res;
+  for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
+    res.coeffs[i] = CONST_POLY_INT_COEFFS (x)[i];
+  return res;
+}
+
+/* Return true if X is a scalar integer or a CONST_POLY_INT.  The value
+   can then be extracted using wi::to_poly_wide.  */
+
+inline bool
+poly_int_rtx_p (const_rtx x)
+{
+  return CONST_SCALAR_INT_P (x) || CONST_POLY_INT_P (x);
+}
+
+/* Access X (which satisfies poly_int_rtx_p) as a poly_wide_int.
+   MODE is the mode of X.  */
+
+inline wi::rtx_to_poly_wide_ref
+wi::to_poly_wide (const_rtx x, machine_mode mode)
+{
+  if (CONST_POLY_INT_P (x))
+    return const_poly_int_value (x);
+  return rtx_mode_t (const_cast<rtx> (x), mode);
+}
+
+/* Return the value of X as a poly_int64.  */
+
+inline poly_int64
+rtx_to_poly_int64 (const_rtx x)
+{
+  if (CONST_POLY_INT_P (x))
+    {
+      poly_int64 res;
+      for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
+	res.coeffs[i] = CONST_POLY_INT_COEFFS (x)[i].to_shwi ();
+      return res;
+    }
+  return INTVAL (x);
+}
+
+/* Return true if arbitrary value X is an integer constant that can
+   be represented as a poly_int64.  Store the value in *RES if so,
+   otherwise leave it unmodified.  */
+
+inline bool
+poly_int_rtx_p (const_rtx x, poly_int64_pod *res)
+{
+  if (CONST_INT_P (x))
+    {
+      *res = INTVAL (x);
+      return true;
+    }
+  if (CONST_POLY_INT_P (x))
+    {
+      for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
+	if (!wi::fits_shwi_p (CONST_POLY_INT_COEFFS (x)[i]))
+	  return false;
+      for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
+	res->coeffs[i] = CONST_POLY_INT_COEFFS (x)[i].to_shwi ();
+      return true;
+    }
+  return false;
+}
+
+extern void init_rtlanal (void);
+extern int rtx_cost (rtx, machine_mode, enum rtx_code, int, bool);
+extern int address_cost (rtx, machine_mode, addr_space_t, bool);
+extern void get_full_rtx_cost (rtx, machine_mode, enum rtx_code, int,
+			       struct full_rtx_costs *);
+extern poly_uint64 subreg_lsb (const_rtx);
+extern poly_uint64 subreg_lsb_1 (machine_mode, machine_mode, poly_uint64);
+extern poly_uint64 subreg_size_offset_from_lsb (poly_uint64, poly_uint64,
+						poly_uint64);
+extern bool read_modify_subreg_p (const_rtx);
+
+/* Return the subreg byte offset for a subreg whose outer mode is
+   OUTER_MODE, whose inner mode is INNER_MODE, and where there are
+   LSB_SHIFT *bits* between the lsb of the outer value and the lsb of
+   the inner value.  This is the inverse of subreg_lsb_1 (which converts
+   byte offsets to bit shifts).  */
+
+inline poly_uint64
+subreg_offset_from_lsb (machine_mode outer_mode,
+			machine_mode inner_mode,
+			poly_uint64 lsb_shift)
+{
+  return subreg_size_offset_from_lsb (GET_MODE_SIZE (outer_mode),
+				      GET_MODE_SIZE (inner_mode), lsb_shift);
+}
+
+extern unsigned int subreg_regno_offset (unsigned int, machine_mode,
+					 poly_uint64, machine_mode);
+extern bool subreg_offset_representable_p (unsigned int, machine_mode,
+					   poly_uint64, machine_mode);
+extern unsigned int subreg_regno (const_rtx);
+extern int simplify_subreg_regno (unsigned int, machine_mode,
+				  poly_uint64, machine_mode);
+extern unsigned int subreg_nregs (const_rtx);
+extern unsigned int subreg_nregs_with_regno (unsigned int, const_rtx);
+extern unsigned HOST_WIDE_INT nonzero_bits (const_rtx, machine_mode);
+extern unsigned int num_sign_bit_copies (const_rtx, machine_mode);
+extern bool constant_pool_constant_p (rtx);
+extern bool truncated_to_mode (machine_mode, const_rtx);
+extern int low_bitmask_len (machine_mode, unsigned HOST_WIDE_INT);
+extern void split_double (rtx, rtx *, rtx *);
+extern rtx *strip_address_mutations (rtx *, enum rtx_code * = 0);
+extern void decompose_address (struct address_info *, rtx *,
+			       machine_mode, addr_space_t, enum rtx_code);
+extern void decompose_lea_address (struct address_info *, rtx *);
+extern void decompose_mem_address (struct address_info *, rtx);
+extern void update_address (struct address_info *);
+extern HOST_WIDE_INT get_index_scale (const struct address_info *);
+extern enum rtx_code get_index_code (const struct address_info *);
+
+/* 1 if RTX is a subreg containing a reg that is already known to be
+   sign- or zero-extended from the mode of the subreg to the mode of
+   the reg.  SUBREG_PROMOTED_UNSIGNED_P gives the signedness of the
+   extension.
+
+   When used as a LHS, is means that this extension must be done
+   when assigning to SUBREG_REG.  */
+
+#define SUBREG_PROMOTED_VAR_P(RTX)					\
+  (RTL_FLAG_CHECK1 ("SUBREG_PROMOTED", (RTX), SUBREG)->in_struct)
+
+/* Valid for subregs which are SUBREG_PROMOTED_VAR_P().  In that case
+   this gives the necessary extensions:
+   0  - signed (SPR_SIGNED)
+   1  - normal unsigned (SPR_UNSIGNED)
+   2  - value is both sign and unsign extended for mode
+	(SPR_SIGNED_AND_UNSIGNED).
+   -1 - pointer unsigned, which most often can be handled like unsigned
+        extension, except for generating instructions where we need to
+	emit special code (ptr_extend insns) on some architectures
+	(SPR_POINTER). */
+
+const int SRP_POINTER = -1;
+const int SRP_SIGNED = 0;
+const int SRP_UNSIGNED = 1;
+const int SRP_SIGNED_AND_UNSIGNED = 2;
+
+/* Sets promoted mode for SUBREG_PROMOTED_VAR_P().  */
+#define SUBREG_PROMOTED_SET(RTX, VAL)		                        \
+do {								        \
+  rtx const _rtx = RTL_FLAG_CHECK1 ("SUBREG_PROMOTED_SET",		\
+                                    (RTX), SUBREG);			\
+  switch (VAL)								\
+  {									\
+    case SRP_POINTER:							\
+      _rtx->volatil = 0;						\
+      _rtx->unchanging = 0;						\
+      break;								\
+    case SRP_SIGNED:							\
+      _rtx->volatil = 0;						\
+      _rtx->unchanging = 1;						\
+      break;								\
+    case SRP_UNSIGNED:							\
+      _rtx->volatil = 1;						\
+      _rtx->unchanging = 0;						\
+      break;								\
+    case SRP_SIGNED_AND_UNSIGNED:					\
+      _rtx->volatil = 1;						\
+      _rtx->unchanging = 1;						\
+      break;								\
+  }									\
+} while (0)
+
+/* Gets the value stored in promoted mode for SUBREG_PROMOTED_VAR_P(),
+   including SRP_SIGNED_AND_UNSIGNED if promoted for
+   both signed and unsigned.  */
+#define SUBREG_PROMOTED_GET(RTX)	\
+  (2 * (RTL_FLAG_CHECK1 ("SUBREG_PROMOTED_GET", (RTX), SUBREG)->volatil)\
+   + (RTX)->unchanging - 1)
+
+/* Returns sign of promoted mode for SUBREG_PROMOTED_VAR_P().  */
+#define SUBREG_PROMOTED_SIGN(RTX)	\
+  ((RTL_FLAG_CHECK1 ("SUBREG_PROMOTED_SIGN", (RTX), SUBREG)->volatil) ? 1\
+   : (RTX)->unchanging - 1)
+
+/* Predicate to check if RTX of SUBREG_PROMOTED_VAR_P() is promoted
+   for SIGNED type.  */
+#define SUBREG_PROMOTED_SIGNED_P(RTX)	\
+  (RTL_FLAG_CHECK1 ("SUBREG_PROMOTED_SIGNED_P", (RTX), SUBREG)->unchanging)
+
+/* Predicate to check if RTX of SUBREG_PROMOTED_VAR_P() is promoted
+   for UNSIGNED type.  */
+#define SUBREG_PROMOTED_UNSIGNED_P(RTX)	\
+  (RTL_FLAG_CHECK1 ("SUBREG_PROMOTED_UNSIGNED_P", (RTX), SUBREG)->volatil)
+
+/* Checks if RTX of SUBREG_PROMOTED_VAR_P() is promoted for given SIGN.  */
+#define SUBREG_CHECK_PROMOTED_SIGN(RTX, SIGN)	\
+((SIGN) == SRP_POINTER ? SUBREG_PROMOTED_GET (RTX) == SRP_POINTER	\
+ : (SIGN) == SRP_SIGNED ? SUBREG_PROMOTED_SIGNED_P (RTX)		\
+ : SUBREG_PROMOTED_UNSIGNED_P (RTX))
+
+/* True if the REG is the static chain register for some CALL_INSN.  */
+#define STATIC_CHAIN_REG_P(RTX)	\
+  (RTL_FLAG_CHECK1 ("STATIC_CHAIN_REG_P", (RTX), REG)->jump)
+
+/* True if the subreg was generated by LRA for reload insns.  Such
+   subregs are valid only during LRA.  */
+#define LRA_SUBREG_P(RTX)	\
+  (RTL_FLAG_CHECK1 ("LRA_SUBREG_P", (RTX), SUBREG)->jump)
+
+/* Access various components of an ASM_OPERANDS rtx.  */
+
+#define ASM_OPERANDS_TEMPLATE(RTX) XCSTR (RTX, 0, ASM_OPERANDS)
+#define ASM_OPERANDS_OUTPUT_CONSTRAINT(RTX) XCSTR (RTX, 1, ASM_OPERANDS)
+#define ASM_OPERANDS_OUTPUT_IDX(RTX) XCINT (RTX, 2, ASM_OPERANDS)
+#define ASM_OPERANDS_INPUT_VEC(RTX) XCVEC (RTX, 3, ASM_OPERANDS)
+#define ASM_OPERANDS_INPUT_CONSTRAINT_VEC(RTX) XCVEC (RTX, 4, ASM_OPERANDS)
+#define ASM_OPERANDS_INPUT(RTX, N) XCVECEXP (RTX, 3, N, ASM_OPERANDS)
+#define ASM_OPERANDS_INPUT_LENGTH(RTX) XCVECLEN (RTX, 3, ASM_OPERANDS)
+#define ASM_OPERANDS_INPUT_CONSTRAINT_EXP(RTX, N) \
+  XCVECEXP (RTX, 4, N, ASM_OPERANDS)
+#define ASM_OPERANDS_INPUT_CONSTRAINT(RTX, N) \
+  XSTR (XCVECEXP (RTX, 4, N, ASM_OPERANDS), 0)
+#define ASM_OPERANDS_INPUT_MODE(RTX, N)  \
+  GET_MODE (XCVECEXP (RTX, 4, N, ASM_OPERANDS))
+#define ASM_OPERANDS_LABEL_VEC(RTX) XCVEC (RTX, 5, ASM_OPERANDS)
+#define ASM_OPERANDS_LABEL_LENGTH(RTX) XCVECLEN (RTX, 5, ASM_OPERANDS)
+#define ASM_OPERANDS_LABEL(RTX, N) XCVECEXP (RTX, 5, N, ASM_OPERANDS)
+#define ASM_OPERANDS_SOURCE_LOCATION(RTX) XCUINT (RTX, 6, ASM_OPERANDS)
+#define ASM_INPUT_SOURCE_LOCATION(RTX) XCUINT (RTX, 1, ASM_INPUT)
+
+/* 1 if RTX is a mem that is statically allocated in read-only memory.  */
+#define MEM_READONLY_P(RTX) \
+  (RTL_FLAG_CHECK1 ("MEM_READONLY_P", (RTX), MEM)->unchanging)
+
+/* 1 if RTX is a mem and we should keep the alias set for this mem
+   unchanged when we access a component.  Set to 1, or example, when we
+   are already in a non-addressable component of an aggregate.  */
+#define MEM_KEEP_ALIAS_SET_P(RTX)					\
+  (RTL_FLAG_CHECK1 ("MEM_KEEP_ALIAS_SET_P", (RTX), MEM)->jump)
+
+/* 1 if RTX is a mem or asm_operand for a volatile reference.  */
+#define MEM_VOLATILE_P(RTX)						\
+  (RTL_FLAG_CHECK3 ("MEM_VOLATILE_P", (RTX), MEM, ASM_OPERANDS,		\
+		    ASM_INPUT)->volatil)
+
+/* 1 if RTX is a mem that cannot trap.  */
+#define MEM_NOTRAP_P(RTX) \
+  (RTL_FLAG_CHECK1 ("MEM_NOTRAP_P", (RTX), MEM)->call)
+
+/* The memory attribute block.  We provide access macros for each value
+   in the block and provide defaults if none specified.  */
+#define MEM_ATTRS(RTX) X0MEMATTR (RTX, 1)
+
+/* The register attribute block.  We provide access macros for each value
+   in the block and provide defaults if none specified.  */
+#define REG_ATTRS(RTX) (REG_CHECK (RTX)->attrs)
+
+#ifndef GENERATOR_FILE
+/* For a MEM rtx, the alias set.  If 0, this MEM is not in any alias
+   set, and may alias anything.  Otherwise, the MEM can only alias
+   MEMs in a conflicting alias set.  This value is set in a
+   language-dependent manner in the front-end, and should not be
+   altered in the back-end.  These set numbers are tested with
+   alias_sets_conflict_p.  */
+#define MEM_ALIAS_SET(RTX) (get_mem_attrs (RTX)->alias)
+
+/* For a MEM rtx, the decl it is known to refer to, if it is known to
+   refer to part of a DECL.  It may also be a COMPONENT_REF.  */
+#define MEM_EXPR(RTX) (get_mem_attrs (RTX)->expr)
+
+/* For a MEM rtx, true if its MEM_OFFSET is known.  */
+#define MEM_OFFSET_KNOWN_P(RTX) (get_mem_attrs (RTX)->offset_known_p)
+
+/* For a MEM rtx, the offset from the start of MEM_EXPR.  */
+#define MEM_OFFSET(RTX) (get_mem_attrs (RTX)->offset)
+
+/* For a MEM rtx, the address space.  */
+#define MEM_ADDR_SPACE(RTX) (get_mem_attrs (RTX)->addrspace)
+
+/* For a MEM rtx, true if its MEM_SIZE is known.  */
+#define MEM_SIZE_KNOWN_P(RTX) (get_mem_attrs (RTX)->size_known_p)
+
+/* For a MEM rtx, the size in bytes of the MEM.  */
+#define MEM_SIZE(RTX) (get_mem_attrs (RTX)->size)
+
+/* For a MEM rtx, the alignment in bits.  We can use the alignment of the
+   mode as a default when STRICT_ALIGNMENT, but not if not.  */
+#define MEM_ALIGN(RTX) (get_mem_attrs (RTX)->align)
+#else
+#define MEM_ADDR_SPACE(RTX) ADDR_SPACE_GENERIC
+#endif
+
+/* For a REG rtx, the decl it is known to refer to, if it is known to
+   refer to part of a DECL.  */
+#define REG_EXPR(RTX) (REG_ATTRS (RTX) == 0 ? 0 : REG_ATTRS (RTX)->decl)
+
+/* For a REG rtx, the offset from the start of REG_EXPR, if known, as an
+   HOST_WIDE_INT.  */
+#define REG_OFFSET(RTX) (REG_ATTRS (RTX) == 0 ? 0 : REG_ATTRS (RTX)->offset)
+
+/* Copy the attributes that apply to memory locations from RHS to LHS.  */
+#define MEM_COPY_ATTRIBUTES(LHS, RHS)				\
+  (MEM_VOLATILE_P (LHS) = MEM_VOLATILE_P (RHS),			\
+   MEM_NOTRAP_P (LHS) = MEM_NOTRAP_P (RHS),			\
+   MEM_READONLY_P (LHS) = MEM_READONLY_P (RHS),			\
+   MEM_KEEP_ALIAS_SET_P (LHS) = MEM_KEEP_ALIAS_SET_P (RHS),	\
+   MEM_POINTER (LHS) = MEM_POINTER (RHS),			\
+   MEM_ATTRS (LHS) = MEM_ATTRS (RHS))
+
+/* 1 if RTX is a label_ref for a nonlocal label.  */
+/* Likewise in an expr_list for a REG_LABEL_OPERAND or
+   REG_LABEL_TARGET note.  */
+#define LABEL_REF_NONLOCAL_P(RTX)					\
+  (RTL_FLAG_CHECK1 ("LABEL_REF_NONLOCAL_P", (RTX), LABEL_REF)->volatil)
+
+/* 1 if RTX is a code_label that should always be considered to be needed.  */
+#define LABEL_PRESERVE_P(RTX)						\
+  (RTL_FLAG_CHECK2 ("LABEL_PRESERVE_P", (RTX), CODE_LABEL, NOTE)->in_struct)
+
+/* During sched, 1 if RTX is an insn that must be scheduled together
+   with the preceding insn.  */
+#define SCHED_GROUP_P(RTX)						\
+  (RTL_FLAG_CHECK4 ("SCHED_GROUP_P", (RTX), DEBUG_INSN, INSN,		\
+		    JUMP_INSN, CALL_INSN)->in_struct)
+
+/* For a SET rtx, SET_DEST is the place that is set
+   and SET_SRC is the value it is set to.  */
+#define SET_DEST(RTX) XC3EXP (RTX, 0, SET, CLOBBER, CLOBBER_HIGH)
+#define SET_SRC(RTX) XCEXP (RTX, 1, SET)
+#define SET_IS_RETURN_P(RTX)						\
+  (RTL_FLAG_CHECK1 ("SET_IS_RETURN_P", (RTX), SET)->jump)
+
+/* For a TRAP_IF rtx, TRAP_CONDITION is an expression.  */
+#define TRAP_CONDITION(RTX) XCEXP (RTX, 0, TRAP_IF)
+#define TRAP_CODE(RTX) XCEXP (RTX, 1, TRAP_IF)
+
+/* For a COND_EXEC rtx, COND_EXEC_TEST is the condition to base
+   conditionally executing the code on, COND_EXEC_CODE is the code
+   to execute if the condition is true.  */
+#define COND_EXEC_TEST(RTX) XCEXP (RTX, 0, COND_EXEC)
+#define COND_EXEC_CODE(RTX) XCEXP (RTX, 1, COND_EXEC)
+
+/* 1 if RTX is a symbol_ref that addresses this function's rtl
+   constants pool.  */
+#define CONSTANT_POOL_ADDRESS_P(RTX)					\
+  (RTL_FLAG_CHECK1 ("CONSTANT_POOL_ADDRESS_P", (RTX), SYMBOL_REF)->unchanging)
+
+/* 1 if RTX is a symbol_ref that addresses a value in the file's
+   tree constant pool.  This information is private to varasm.c.  */
+#define TREE_CONSTANT_POOL_ADDRESS_P(RTX)				\
+  (RTL_FLAG_CHECK1 ("TREE_CONSTANT_POOL_ADDRESS_P",			\
+		    (RTX), SYMBOL_REF)->frame_related)
+
+/* Used if RTX is a symbol_ref, for machine-specific purposes.  */
+#define SYMBOL_REF_FLAG(RTX)						\
+  (RTL_FLAG_CHECK1 ("SYMBOL_REF_FLAG", (RTX), SYMBOL_REF)->volatil)
+
+/* 1 if RTX is a symbol_ref that has been the library function in
+   emit_library_call.  */
+#define SYMBOL_REF_USED(RTX)						\
+  (RTL_FLAG_CHECK1 ("SYMBOL_REF_USED", (RTX), SYMBOL_REF)->used)
+
+/* 1 if RTX is a symbol_ref for a weak symbol.  */
+#define SYMBOL_REF_WEAK(RTX)						\
+  (RTL_FLAG_CHECK1 ("SYMBOL_REF_WEAK", (RTX), SYMBOL_REF)->return_val)
+
+/* A pointer attached to the SYMBOL_REF; either SYMBOL_REF_DECL or
+   SYMBOL_REF_CONSTANT.  */
+#define SYMBOL_REF_DATA(RTX) X0ANY ((RTX), 1)
+
+/* Set RTX's SYMBOL_REF_DECL to DECL.  RTX must not be a constant
+   pool symbol.  */
+#define SET_SYMBOL_REF_DECL(RTX, DECL) \
+  (gcc_assert (!CONSTANT_POOL_ADDRESS_P (RTX)), X0TREE ((RTX), 1) = (DECL))
+
+/* The tree (decl or constant) associated with the symbol, or null.  */
+#define SYMBOL_REF_DECL(RTX) \
+  (CONSTANT_POOL_ADDRESS_P (RTX) ? NULL : X0TREE ((RTX), 1))
+
+/* Set RTX's SYMBOL_REF_CONSTANT to C.  RTX must be a constant pool symbol.  */
+#define SET_SYMBOL_REF_CONSTANT(RTX, C) \
+  (gcc_assert (CONSTANT_POOL_ADDRESS_P (RTX)), X0CONSTANT ((RTX), 1) = (C))
+
+/* The rtx constant pool entry for a symbol, or null.  */
+#define SYMBOL_REF_CONSTANT(RTX) \
+  (CONSTANT_POOL_ADDRESS_P (RTX) ? X0CONSTANT ((RTX), 1) : NULL)
+
+/* A set of flags on a symbol_ref that are, in some respects, redundant with
+   information derivable from the tree decl associated with this symbol.
+   Except that we build a *lot* of SYMBOL_REFs that aren't associated with a
+   decl.  In some cases this is a bug.  But beyond that, it's nice to cache
+   this information to avoid recomputing it.  Finally, this allows space for
+   the target to store more than one bit of information, as with
+   SYMBOL_REF_FLAG.  */
+#define SYMBOL_REF_FLAGS(RTX) \
+  (RTL_FLAG_CHECK1 ("SYMBOL_REF_FLAGS", (RTX), SYMBOL_REF) \
+   ->u2.symbol_ref_flags)
+
+/* These flags are common enough to be defined for all targets.  They
+   are computed by the default version of targetm.encode_section_info.  */
+
+/* Set if this symbol is a function.  */
+#define SYMBOL_FLAG_FUNCTION	(1 << 0)
+#define SYMBOL_REF_FUNCTION_P(RTX) \
+  ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_FUNCTION) != 0)
+/* Set if targetm.binds_local_p is true.  */
+#define SYMBOL_FLAG_LOCAL	(1 << 1)
+#define SYMBOL_REF_LOCAL_P(RTX) \
+  ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_LOCAL) != 0)
+/* Set if targetm.in_small_data_p is true.  */
+#define SYMBOL_FLAG_SMALL	(1 << 2)
+#define SYMBOL_REF_SMALL_P(RTX) \
+  ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_SMALL) != 0)
+/* The three-bit field at [5:3] is true for TLS variables; use
+   SYMBOL_REF_TLS_MODEL to extract the field as an enum tls_model.  */
+#define SYMBOL_FLAG_TLS_SHIFT	3
+#define SYMBOL_REF_TLS_MODEL(RTX) \
+  ((enum tls_model) ((SYMBOL_REF_FLAGS (RTX) >> SYMBOL_FLAG_TLS_SHIFT) & 7))
+/* Set if this symbol is not defined in this translation unit.  */
+#define SYMBOL_FLAG_EXTERNAL	(1 << 6)
+#define SYMBOL_REF_EXTERNAL_P(RTX) \
+  ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_EXTERNAL) != 0)
+/* Set if this symbol has a block_symbol structure associated with it.  */
+#define SYMBOL_FLAG_HAS_BLOCK_INFO (1 << 7)
+#define SYMBOL_REF_HAS_BLOCK_INFO_P(RTX) \
+  ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_HAS_BLOCK_INFO) != 0)
+/* Set if this symbol is a section anchor.  SYMBOL_REF_ANCHOR_P implies
+   SYMBOL_REF_HAS_BLOCK_INFO_P.  */
+#define SYMBOL_FLAG_ANCHOR	(1 << 8)
+#define SYMBOL_REF_ANCHOR_P(RTX) \
+  ((SYMBOL_REF_FLAGS (RTX) & SYMBOL_FLAG_ANCHOR) != 0)
+
+/* Subsequent bits are available for the target to use.  */
+#define SYMBOL_FLAG_MACH_DEP_SHIFT	9
+#define SYMBOL_FLAG_MACH_DEP		(1 << SYMBOL_FLAG_MACH_DEP_SHIFT)
+
+/* If SYMBOL_REF_HAS_BLOCK_INFO_P (RTX), this is the object_block
+   structure to which the symbol belongs, or NULL if it has not been
+   assigned a block.  */
+#define SYMBOL_REF_BLOCK(RTX) (BLOCK_SYMBOL_CHECK (RTX)->block)
+
+/* If SYMBOL_REF_HAS_BLOCK_INFO_P (RTX), this is the offset of RTX from
+   the first object in SYMBOL_REF_BLOCK (RTX).  The value is negative if
+   RTX has not yet been assigned to a block, or it has not been given an
+   offset within that block.  */
+#define SYMBOL_REF_BLOCK_OFFSET(RTX) (BLOCK_SYMBOL_CHECK (RTX)->offset)
+
+/* True if RTX is flagged to be a scheduling barrier.  */
+#define PREFETCH_SCHEDULE_BARRIER_P(RTX)					\
+  (RTL_FLAG_CHECK1 ("PREFETCH_SCHEDULE_BARRIER_P", (RTX), PREFETCH)->volatil)
+
+/* Indicate whether the machine has any sort of auto increment addressing.
+   If not, we can avoid checking for REG_INC notes.  */
+
+#if (defined (HAVE_PRE_INCREMENT) || defined (HAVE_PRE_DECREMENT) \
+     || defined (HAVE_POST_INCREMENT) || defined (HAVE_POST_DECREMENT) \
+     || defined (HAVE_PRE_MODIFY_DISP) || defined (HAVE_POST_MODIFY_DISP) \
+     || defined (HAVE_PRE_MODIFY_REG) || defined (HAVE_POST_MODIFY_REG))
+#define AUTO_INC_DEC 1
+#else
+#define AUTO_INC_DEC 0
+#endif
+
+/* Define a macro to look for REG_INC notes,
+   but save time on machines where they never exist.  */
+
+#if AUTO_INC_DEC
+#define FIND_REG_INC_NOTE(INSN, REG)			\
+  ((REG) != NULL_RTX && REG_P ((REG))			\
+   ? find_regno_note ((INSN), REG_INC, REGNO (REG))	\
+   : find_reg_note ((INSN), REG_INC, (REG)))
+#else
+#define FIND_REG_INC_NOTE(INSN, REG) 0
+#endif
+
+#ifndef HAVE_PRE_INCREMENT
+#define HAVE_PRE_INCREMENT 0
+#endif
+
+#ifndef HAVE_PRE_DECREMENT
+#define HAVE_PRE_DECREMENT 0
+#endif
+
+#ifndef HAVE_POST_INCREMENT
+#define HAVE_POST_INCREMENT 0
+#endif
+
+#ifndef HAVE_POST_DECREMENT
+#define HAVE_POST_DECREMENT 0
+#endif
+
+#ifndef HAVE_POST_MODIFY_DISP
+#define HAVE_POST_MODIFY_DISP 0
+#endif
+
+#ifndef HAVE_POST_MODIFY_REG
+#define HAVE_POST_MODIFY_REG 0
+#endif
+
+#ifndef HAVE_PRE_MODIFY_DISP
+#define HAVE_PRE_MODIFY_DISP 0
+#endif
+
+#ifndef HAVE_PRE_MODIFY_REG
+#define HAVE_PRE_MODIFY_REG 0
+#endif
+
+
+/* Some architectures do not have complete pre/post increment/decrement
+   instruction sets, or only move some modes efficiently.  These macros
+   allow us to tune autoincrement generation.  */
+
+#ifndef USE_LOAD_POST_INCREMENT
+#define USE_LOAD_POST_INCREMENT(MODE)   HAVE_POST_INCREMENT
+#endif
+
+#ifndef USE_LOAD_POST_DECREMENT
+#define USE_LOAD_POST_DECREMENT(MODE)   HAVE_POST_DECREMENT
+#endif
+
+#ifndef USE_LOAD_PRE_INCREMENT
+#define USE_LOAD_PRE_INCREMENT(MODE)    HAVE_PRE_INCREMENT
+#endif
+
+#ifndef USE_LOAD_PRE_DECREMENT
+#define USE_LOAD_PRE_DECREMENT(MODE)    HAVE_PRE_DECREMENT
+#endif
+
+#ifndef USE_STORE_POST_INCREMENT
+#define USE_STORE_POST_INCREMENT(MODE)  HAVE_POST_INCREMENT
+#endif
+
+#ifndef USE_STORE_POST_DECREMENT
+#define USE_STORE_POST_DECREMENT(MODE)  HAVE_POST_DECREMENT
+#endif
+
+#ifndef USE_STORE_PRE_INCREMENT
+#define USE_STORE_PRE_INCREMENT(MODE)   HAVE_PRE_INCREMENT
+#endif
+
+#ifndef USE_STORE_PRE_DECREMENT
+#define USE_STORE_PRE_DECREMENT(MODE)   HAVE_PRE_DECREMENT
+#endif
+
+/* Nonzero when we are generating CONCATs.  */
+extern int generating_concat_p;
+
+/* Nonzero when we are expanding trees to RTL.  */
+extern int currently_expanding_to_rtl;
+
+/* Generally useful functions.  */
+
+#ifndef GENERATOR_FILE
+/* Return the cost of SET X.  SPEED_P is true if optimizing for speed
+   rather than size.  */
+
+static inline int
+set_rtx_cost (rtx x, bool speed_p)
+{
+  return rtx_cost (x, VOIDmode, INSN, 4, speed_p);
+}
+
+/* Like set_rtx_cost, but return both the speed and size costs in C.  */
+
+static inline void
+get_full_set_rtx_cost (rtx x, struct full_rtx_costs *c)
+{
+  get_full_rtx_cost (x, VOIDmode, INSN, 4, c);
+}
+
+/* Return the cost of moving X into a register, relative to the cost
+   of a register move.  SPEED_P is true if optimizing for speed rather
+   than size.  */
+
+static inline int
+set_src_cost (rtx x, machine_mode mode, bool speed_p)
+{
+  return rtx_cost (x, mode, SET, 1, speed_p);
+}
+
+/* Like set_src_cost, but return both the speed and size costs in C.  */
+
+static inline void
+get_full_set_src_cost (rtx x, machine_mode mode, struct full_rtx_costs *c)
+{
+  get_full_rtx_cost (x, mode, SET, 1, c);
+}
+#endif
+
+/* A convenience macro to validate the arguments of a zero_extract
+   expression.  It determines whether SIZE lies inclusively within
+   [1, RANGE], POS lies inclusively within between [0, RANGE - 1]
+   and the sum lies inclusively within [1, RANGE].  RANGE must be
+   >= 1, but SIZE and POS may be negative.  */
+#define EXTRACT_ARGS_IN_RANGE(SIZE, POS, RANGE) \
+  (IN_RANGE ((POS), 0, (unsigned HOST_WIDE_INT) (RANGE) - 1) \
+   && IN_RANGE ((SIZE), 1, (unsigned HOST_WIDE_INT) (RANGE) \
+			   - (unsigned HOST_WIDE_INT)(POS)))
+
+/* In explow.c */
+extern HOST_WIDE_INT trunc_int_for_mode	(HOST_WIDE_INT, machine_mode);
+extern poly_int64 trunc_int_for_mode (poly_int64, machine_mode);
+extern rtx plus_constant (machine_mode, rtx, poly_int64, bool = false);
+extern HOST_WIDE_INT get_stack_check_protect (void);
+
+/* In rtl.c */
+extern rtx rtx_alloc (RTX_CODE CXX_MEM_STAT_INFO);
+extern rtx rtx_alloc_stat_v (RTX_CODE MEM_STAT_DECL, int);
+#define rtx_alloc_v(c, SZ) rtx_alloc_stat_v (c MEM_STAT_INFO, SZ)
+#define const_wide_int_alloc(NWORDS)				\
+  rtx_alloc_v (CONST_WIDE_INT,					\
+	       (sizeof (struct hwivec_def)			\
+		+ ((NWORDS)-1) * sizeof (HOST_WIDE_INT)))	\
+
+extern rtvec rtvec_alloc (int);
+extern rtvec shallow_copy_rtvec (rtvec);
+extern bool shared_const_p (const_rtx);
+extern rtx copy_rtx (rtx);
+extern enum rtx_code classify_insn (rtx);
+extern void dump_rtx_statistics (void);
+
+/* In emit-rtl.c */
+extern rtx copy_rtx_if_shared (rtx);
+
+/* In rtl.c */
+extern unsigned int rtx_size (const_rtx);
+extern rtx shallow_copy_rtx (const_rtx CXX_MEM_STAT_INFO);
+extern int rtx_equal_p (const_rtx, const_rtx);
+extern bool rtvec_all_equal_p (const_rtvec);
+
+/* Return true if X is a vector constant with a duplicated element value.  */
+
+inline bool
+const_vec_duplicate_p (const_rtx x)
+{
+  return (GET_CODE (x) == CONST_VECTOR
+	  && CONST_VECTOR_NPATTERNS (x) == 1
+	  && CONST_VECTOR_DUPLICATE_P (x));
+}
+
+/* Return true if X is a vector constant with a duplicated element value.
+   Store the duplicated element in *ELT if so.  */
+
+template <typename T>
+inline bool
+const_vec_duplicate_p (T x, T *elt)
+{
+  if (const_vec_duplicate_p (x))
+    {
+      *elt = CONST_VECTOR_ENCODED_ELT (x, 0);
+      return true;
+    }
+  return false;
+}
+
+/* Return true if X is a vector with a duplicated element value, either
+   constant or nonconstant.  Store the duplicated element in *ELT if so.  */
+
+template <typename T>
+inline bool
+vec_duplicate_p (T x, T *elt)
+{
+  if (GET_CODE (x) == VEC_DUPLICATE
+      && !VECTOR_MODE_P (GET_MODE (XEXP (x, 0))))
+    {
+      *elt = XEXP (x, 0);
+      return true;
+    }
+  return const_vec_duplicate_p (x, elt);
+}
+
+/* If X is a vector constant with a duplicated element value, return that
+   element value, otherwise return X.  */
+
+template <typename T>
+inline T
+unwrap_const_vec_duplicate (T x)
+{
+  if (const_vec_duplicate_p (x))
+    x = CONST_VECTOR_ELT (x, 0);
+  return x;
+}
+
+/* In emit-rtl.c.  */
+extern wide_int const_vector_int_elt (const_rtx, unsigned int);
+extern rtx const_vector_elt (const_rtx, unsigned int);
+extern bool const_vec_series_p_1 (const_rtx, rtx *, rtx *);
+
+/* Return true if X is an integer constant vector that contains a linear
+   series of the form:
+
+   { B, B + S, B + 2 * S, B + 3 * S, ... }
+
+   for a nonzero S.  Store B and S in *BASE_OUT and *STEP_OUT on sucess.  */
+
+inline bool
+const_vec_series_p (const_rtx x, rtx *base_out, rtx *step_out)
+{
+  if (GET_CODE (x) == CONST_VECTOR
+      && CONST_VECTOR_NPATTERNS (x) == 1
+      && !CONST_VECTOR_DUPLICATE_P (x))
+    return const_vec_series_p_1 (x, base_out, step_out);
+  return false;
+}
+
+/* Return true if X is a vector that contains a linear series of the
+   form:
+
+   { B, B + S, B + 2 * S, B + 3 * S, ... }
+
+   where B and S are constant or nonconstant.  Store B and S in
+   *BASE_OUT and *STEP_OUT on sucess.  */
+
+inline bool
+vec_series_p (const_rtx x, rtx *base_out, rtx *step_out)
+{
+  if (GET_CODE (x) == VEC_SERIES)
+    {
+      *base_out = XEXP (x, 0);
+      *step_out = XEXP (x, 1);
+      return true;
+    }
+  return const_vec_series_p (x, base_out, step_out);
+}
+
+/* Return the unpromoted (outer) mode of SUBREG_PROMOTED_VAR_P subreg X.  */
+
+inline scalar_int_mode
+subreg_unpromoted_mode (rtx x)
+{
+  gcc_checking_assert (SUBREG_PROMOTED_VAR_P (x));
+  return as_a <scalar_int_mode> (GET_MODE (x));
+}
+
+/* Return the promoted (inner) mode of SUBREG_PROMOTED_VAR_P subreg X.  */
+
+inline scalar_int_mode
+subreg_promoted_mode (rtx x)
+{
+  gcc_checking_assert (SUBREG_PROMOTED_VAR_P (x));
+  return as_a <scalar_int_mode> (GET_MODE (SUBREG_REG (x)));
+}
+
+/* In emit-rtl.c */
+extern rtvec gen_rtvec_v (int, rtx *);
+extern rtvec gen_rtvec_v (int, rtx_insn **);
+extern rtx gen_reg_rtx (machine_mode);
+extern rtx gen_rtx_REG_offset (rtx, machine_mode, unsigned int, poly_int64);
+extern rtx gen_reg_rtx_offset (rtx, machine_mode, int);
+extern rtx gen_reg_rtx_and_attrs (rtx);
+extern rtx_code_label *gen_label_rtx (void);
+extern rtx gen_lowpart_common (machine_mode, rtx);
+
+/* In cse.c */
+extern rtx gen_lowpart_if_possible (machine_mode, rtx);
+
+/* In emit-rtl.c */
+extern rtx gen_highpart (machine_mode, rtx);
+extern rtx gen_highpart_mode (machine_mode, machine_mode, rtx);
+extern rtx operand_subword (rtx, poly_uint64, int, machine_mode);
+
+/* In emit-rtl.c */
+extern rtx operand_subword_force (rtx, poly_uint64, machine_mode);
+extern int subreg_lowpart_p (const_rtx);
+extern poly_uint64 subreg_size_lowpart_offset (poly_uint64, poly_uint64);
+
+/* Return true if a subreg of mode OUTERMODE would only access part of
+   an inner register with mode INNERMODE.  The other bits of the inner
+   register would then be "don't care" on read.  The behavior for writes
+   depends on REGMODE_NATURAL_SIZE; bits in the same REGMODE_NATURAL_SIZE-d
+   chunk would be clobbered but other bits would be preserved.  */
+
+inline bool
+partial_subreg_p (machine_mode outermode, machine_mode innermode)
+{
+  /* Modes involved in a subreg must be ordered.  In particular, we must
+     always know at compile time whether the subreg is paradoxical.  */
+  poly_int64 outer_prec = GET_MODE_PRECISION (outermode);
+  poly_int64 inner_prec = GET_MODE_PRECISION (innermode);
+  gcc_checking_assert (ordered_p (outer_prec, inner_prec));
+  return maybe_lt (outer_prec, inner_prec);
+}
+
+/* Likewise return true if X is a subreg that is smaller than the inner
+   register.  Use read_modify_subreg_p to test whether writing to such
+   a subreg preserves any part of the inner register.  */
+
+inline bool
+partial_subreg_p (const_rtx x)
+{
+  if (GET_CODE (x) != SUBREG)
+    return false;
+  return partial_subreg_p (GET_MODE (x), GET_MODE (SUBREG_REG (x)));
+}
+
+/* Return true if a subreg with the given outer and inner modes is
+   paradoxical.  */
+
+inline bool
+paradoxical_subreg_p (machine_mode outermode, machine_mode innermode)
+{
+  /* Modes involved in a subreg must be ordered.  In particular, we must
+     always know at compile time whether the subreg is paradoxical.  */
+  poly_int64 outer_prec = GET_MODE_PRECISION (outermode);
+  poly_int64 inner_prec = GET_MODE_PRECISION (innermode);
+  gcc_checking_assert (ordered_p (outer_prec, inner_prec));
+  return maybe_gt (outer_prec, inner_prec);
+}
+
+/* Return true if X is a paradoxical subreg, false otherwise.  */
+
+inline bool
+paradoxical_subreg_p (const_rtx x)
+{
+  if (GET_CODE (x) != SUBREG)
+    return false;
+  return paradoxical_subreg_p (GET_MODE (x), GET_MODE (SUBREG_REG (x)));
+}
+
+/* Return the SUBREG_BYTE for an OUTERMODE lowpart of an INNERMODE value.  */
+
+inline poly_uint64
+subreg_lowpart_offset (machine_mode outermode, machine_mode innermode)
+{
+  return subreg_size_lowpart_offset (GET_MODE_SIZE (outermode),
+				     GET_MODE_SIZE (innermode));
+}
+
+/* Given that a subreg has outer mode OUTERMODE and inner mode INNERMODE,
+   return the smaller of the two modes if they are different sizes,
+   otherwise return the outer mode.  */
+
+inline machine_mode
+narrower_subreg_mode (machine_mode outermode, machine_mode innermode)
+{
+  return paradoxical_subreg_p (outermode, innermode) ? innermode : outermode;
+}
+
+/* Given that a subreg has outer mode OUTERMODE and inner mode INNERMODE,
+   return the mode that is big enough to hold both the outer and inner
+   values.  Prefer the outer mode in the event of a tie.  */
+
+inline machine_mode
+wider_subreg_mode (machine_mode outermode, machine_mode innermode)
+{
+  return partial_subreg_p (outermode, innermode) ? innermode : outermode;
+}
+
+/* Likewise for subreg X.  */
+
+inline machine_mode
+wider_subreg_mode (const_rtx x)
+{
+  return wider_subreg_mode (GET_MODE (x), GET_MODE (SUBREG_REG (x)));
+}
+
+extern poly_uint64 subreg_size_highpart_offset (poly_uint64, poly_uint64);
+
+/* Return the SUBREG_BYTE for an OUTERMODE highpart of an INNERMODE value.  */
+
+inline poly_uint64
+subreg_highpart_offset (machine_mode outermode, machine_mode innermode)
+{
+  return subreg_size_highpart_offset (GET_MODE_SIZE (outermode),
+				      GET_MODE_SIZE (innermode));
+}
+
+extern poly_int64 byte_lowpart_offset (machine_mode, machine_mode);
+extern poly_int64 subreg_memory_offset (machine_mode, machine_mode,
+					poly_uint64);
+extern poly_int64 subreg_memory_offset (const_rtx);
+extern rtx make_safe_from (rtx, rtx);
+extern rtx convert_memory_address_addr_space_1 (scalar_int_mode, rtx,
+						addr_space_t, bool, bool);
+extern rtx convert_memory_address_addr_space (scalar_int_mode, rtx,
+					      addr_space_t);
+#define convert_memory_address(to_mode,x) \
+	convert_memory_address_addr_space ((to_mode), (x), ADDR_SPACE_GENERIC)
+extern const char *get_insn_name (int);
+extern rtx_insn *get_last_insn_anywhere (void);
+extern rtx_insn *get_first_nonnote_insn (void);
+extern rtx_insn *get_last_nonnote_insn (void);
+extern void start_sequence (void);
+extern void push_to_sequence (rtx_insn *);
+extern void push_to_sequence2 (rtx_insn *, rtx_insn *);
+extern void end_sequence (void);
+#if TARGET_SUPPORTS_WIDE_INT == 0
+extern double_int rtx_to_double_int (const_rtx);
+#endif
+extern void cwi_output_hex (FILE *, const_rtx);
+#if TARGET_SUPPORTS_WIDE_INT == 0
+extern rtx immed_double_const (HOST_WIDE_INT, HOST_WIDE_INT,
+			       machine_mode);
+#endif
+extern rtx immed_wide_int_const (const poly_wide_int_ref &, machine_mode);
+
+/* In varasm.c  */
+extern rtx force_const_mem (machine_mode, rtx);
+
+/* In varasm.c  */
+
+struct function;
+extern rtx get_pool_constant (const_rtx);
+extern rtx get_pool_constant_mark (rtx, bool *);
+extern fixed_size_mode get_pool_mode (const_rtx);
+extern rtx simplify_subtraction (rtx);
+extern void decide_function_section (tree);
+
+/* In emit-rtl.c */
+extern rtx_insn *emit_insn_before (rtx, rtx_insn *);
+extern rtx_insn *emit_insn_before_noloc (rtx, rtx_insn *, basic_block);
+extern rtx_insn *emit_insn_before_setloc (rtx, rtx_insn *, location_t);
+extern rtx_jump_insn *emit_jump_insn_before (rtx, rtx_insn *);
+extern rtx_jump_insn *emit_jump_insn_before_noloc (rtx, rtx_insn *);
+extern rtx_jump_insn *emit_jump_insn_before_setloc (rtx, rtx_insn *,
+						    location_t);
+extern rtx_insn *emit_call_insn_before (rtx, rtx_insn *);
+extern rtx_insn *emit_call_insn_before_noloc (rtx, rtx_insn *);
+extern rtx_insn *emit_call_insn_before_setloc (rtx, rtx_insn *, location_t);
+extern rtx_insn *emit_debug_insn_before (rtx, rtx_insn *);
+extern rtx_insn *emit_debug_insn_before_noloc (rtx, rtx_insn *);
+extern rtx_insn *emit_debug_insn_before_setloc (rtx, rtx_insn *, location_t);
+extern rtx_barrier *emit_barrier_before (rtx_insn *);
+extern rtx_code_label *emit_label_before (rtx_code_label *, rtx_insn *);
+extern rtx_note *emit_note_before (enum insn_note, rtx_insn *);
+extern rtx_insn *emit_insn_after (rtx, rtx_insn *);
+extern rtx_insn *emit_insn_after_noloc (rtx, rtx_insn *, basic_block);
+extern rtx_insn *emit_insn_after_setloc (rtx, rtx_insn *, location_t);
+extern rtx_jump_insn *emit_jump_insn_after (rtx, rtx_insn *);
+extern rtx_jump_insn *emit_jump_insn_after_noloc (rtx, rtx_insn *);
+extern rtx_jump_insn *emit_jump_insn_after_setloc (rtx, rtx_insn *, location_t);
+extern rtx_insn *emit_call_insn_after (rtx, rtx_insn *);
+extern rtx_insn *emit_call_insn_after_noloc (rtx, rtx_insn *);
+extern rtx_insn *emit_call_insn_after_setloc (rtx, rtx_insn *, location_t);
+extern rtx_insn *emit_debug_insn_after (rtx, rtx_insn *);
+extern rtx_insn *emit_debug_insn_after_noloc (rtx, rtx_insn *);
+extern rtx_insn *emit_debug_insn_after_setloc (rtx, rtx_insn *, location_t);
+extern rtx_barrier *emit_barrier_after (rtx_insn *);
+extern rtx_insn *emit_label_after (rtx_insn *, rtx_insn *);
+extern rtx_note *emit_note_after (enum insn_note, rtx_insn *);
+extern rtx_insn *emit_insn (rtx);
+extern rtx_insn *emit_debug_insn (rtx);
+extern rtx_insn *emit_jump_insn (rtx);
+extern rtx_insn *emit_call_insn (rtx);
+extern rtx_code_label *emit_label (rtx);
+extern rtx_jump_table_data *emit_jump_table_data (rtx);
+extern rtx_barrier *emit_barrier (void);
+extern rtx_note *emit_note (enum insn_note);
+extern rtx_note *emit_note_copy (rtx_note *);
+extern rtx_insn *gen_clobber (rtx);
+extern rtx_insn *emit_clobber (rtx);
+extern rtx_insn *gen_use (rtx);
+extern rtx_insn *emit_use (rtx);
+extern rtx_insn *make_insn_raw (rtx);
+extern void add_function_usage_to (rtx, rtx);
+extern rtx_call_insn *last_call_insn (void);
+extern rtx_insn *previous_insn (rtx_insn *);
+extern rtx_insn *next_insn (rtx_insn *);
+extern rtx_insn *prev_nonnote_insn (rtx_insn *);
+extern rtx_insn *next_nonnote_insn (rtx_insn *);
+extern rtx_insn *prev_nondebug_insn (rtx_insn *);
+extern rtx_insn *next_nondebug_insn (rtx_insn *);
+extern rtx_insn *prev_nonnote_nondebug_insn (rtx_insn *);
+extern rtx_insn *prev_nonnote_nondebug_insn_bb (rtx_insn *);
+extern rtx_insn *next_nonnote_nondebug_insn (rtx_insn *);
+extern rtx_insn *next_nonnote_nondebug_insn_bb (rtx_insn *);
+extern rtx_insn *prev_real_insn (rtx_insn *);
+extern rtx_insn *next_real_insn (rtx_insn *);
+extern rtx_insn *prev_real_nondebug_insn (rtx_insn *);
+extern rtx_insn *next_real_nondebug_insn (rtx);
+extern rtx_insn *prev_active_insn (rtx_insn *);
+extern rtx_insn *next_active_insn (rtx_insn *);
+extern int active_insn_p (const rtx_insn *);
+extern rtx_insn *next_cc0_user (rtx_insn *);
+extern rtx_insn *prev_cc0_setter (rtx_insn *);
+
+/* In emit-rtl.c  */
+extern int insn_line (const rtx_insn *);
+extern const char * insn_file (const rtx_insn *);
+extern tree insn_scope (const rtx_insn *);
+extern expanded_location insn_location (const rtx_insn *);
+extern location_t prologue_location, epilogue_location;
+
+/* In jump.c */
+extern enum rtx_code reverse_condition (enum rtx_code);
+extern enum rtx_code reverse_condition_maybe_unordered (enum rtx_code);
+extern enum rtx_code swap_condition (enum rtx_code);
+extern enum rtx_code unsigned_condition (enum rtx_code);
+extern enum rtx_code signed_condition (enum rtx_code);
+extern void mark_jump_label (rtx, rtx_insn *, int);
+
+/* Return true if integer comparison operator CODE interprets its operands
+   as unsigned.  */
+
+inline bool
+unsigned_condition_p (enum rtx_code code)
+{
+  return unsigned_condition (code) == code;
+}
+
+/* In jump.c */
+extern rtx_insn *delete_related_insns (rtx);
+
+/* In recog.c  */
+extern rtx *find_constant_term_loc (rtx *);
+
+/* In emit-rtl.c  */
+extern rtx_insn *try_split (rtx, rtx_insn *, int);
+
+/* In insn-recog.c (generated by genrecog).  */
+extern rtx_insn *split_insns (rtx, rtx_insn *);
+
+/* In simplify-rtx.c  */
+extern rtx simplify_const_unary_operation (enum rtx_code, machine_mode,
+					   rtx, machine_mode);
+extern rtx simplify_unary_operation (enum rtx_code, machine_mode, rtx,
+				     machine_mode);
+extern rtx simplify_const_binary_operation (enum rtx_code, machine_mode,
+					    rtx, rtx);
+extern rtx simplify_binary_operation (enum rtx_code, machine_mode, rtx,
+				      rtx);
+extern rtx simplify_ternary_operation (enum rtx_code, machine_mode,
+				       machine_mode, rtx, rtx, rtx);
+extern rtx simplify_const_relational_operation (enum rtx_code,
+						machine_mode, rtx, rtx);
+extern rtx simplify_relational_operation (enum rtx_code, machine_mode,
+					  machine_mode, rtx, rtx);
+extern rtx simplify_gen_binary (enum rtx_code, machine_mode, rtx, rtx);
+extern rtx simplify_gen_unary (enum rtx_code, machine_mode, rtx,
+			       machine_mode);
+extern rtx simplify_gen_ternary (enum rtx_code, machine_mode,
+				 machine_mode, rtx, rtx, rtx);
+extern rtx simplify_gen_relational (enum rtx_code, machine_mode,
+				    machine_mode, rtx, rtx);
+extern rtx simplify_subreg (machine_mode, rtx, machine_mode, poly_uint64);
+extern rtx simplify_gen_subreg (machine_mode, rtx, machine_mode, poly_uint64);
+extern rtx lowpart_subreg (machine_mode, rtx, machine_mode);
+extern rtx simplify_replace_fn_rtx (rtx, const_rtx,
+				    rtx (*fn) (rtx, const_rtx, void *), void *);
+extern rtx simplify_replace_rtx (rtx, const_rtx, rtx);
+extern rtx simplify_rtx (const_rtx);
+extern rtx avoid_constant_pool_reference (rtx);
+extern rtx delegitimize_mem_from_attrs (rtx);
+extern bool mode_signbit_p (machine_mode, const_rtx);
+extern bool val_signbit_p (machine_mode, unsigned HOST_WIDE_INT);
+extern bool val_signbit_known_set_p (machine_mode,
+				     unsigned HOST_WIDE_INT);
+extern bool val_signbit_known_clear_p (machine_mode,
+				       unsigned HOST_WIDE_INT);
+
+/* In reginfo.c  */
+extern machine_mode choose_hard_reg_mode (unsigned int, unsigned int,
+					       bool);
+extern const HARD_REG_SET &simplifiable_subregs (const subreg_shape &);
+
+/* In emit-rtl.c  */
+extern rtx set_for_reg_notes (rtx);
+extern rtx set_unique_reg_note (rtx, enum reg_note, rtx);
+extern rtx set_dst_reg_note (rtx, enum reg_note, rtx, rtx);
+extern void set_insn_deleted (rtx_insn *);
+
+/* Functions in rtlanal.c */
+
+extern rtx single_set_2 (const rtx_insn *, const_rtx);
+extern bool contains_symbol_ref_p (const_rtx);
+extern bool contains_symbolic_reference_p (const_rtx);
+extern bool contains_constant_pool_address_p (const_rtx);
+
+/* Handle the cheap and common cases inline for performance.  */
+
+inline rtx single_set (const rtx_insn *insn)
+{
+  if (!INSN_P (insn))
+    return NULL_RTX;
+
+  if (GET_CODE (PATTERN (insn)) == SET)
+    return PATTERN (insn);
+
+  /* Defer to the more expensive case.  */
+  return single_set_2 (insn, PATTERN (insn));
+}
+
+extern scalar_int_mode get_address_mode (rtx mem);
+extern int rtx_addr_can_trap_p (const_rtx);
+extern bool nonzero_address_p (const_rtx);
+extern int rtx_unstable_p (const_rtx);
+extern bool rtx_varies_p (const_rtx, bool);
+extern bool rtx_addr_varies_p (const_rtx, bool);
+extern rtx get_call_rtx_from (rtx);
+extern HOST_WIDE_INT get_integer_term (const_rtx);
+extern rtx get_related_value (const_rtx);
+extern bool offset_within_block_p (const_rtx, HOST_WIDE_INT);
+extern void split_const (rtx, rtx *, rtx *);
+extern rtx strip_offset (rtx, poly_int64_pod *);
+extern poly_int64 get_args_size (const_rtx);
+extern bool unsigned_reg_p (rtx);
+extern int reg_mentioned_p (const_rtx, const_rtx);
+extern int count_occurrences (const_rtx, const_rtx, int);
+extern int reg_referenced_p (const_rtx, const_rtx);
+extern int reg_used_between_p (const_rtx, const rtx_insn *, const rtx_insn *);
+extern int reg_set_between_p (const_rtx, const rtx_insn *, const rtx_insn *);
+extern int commutative_operand_precedence (rtx);
+extern bool swap_commutative_operands_p (rtx, rtx);
+extern int modified_between_p (const_rtx, const rtx_insn *, const rtx_insn *);
+extern int no_labels_between_p (const rtx_insn *, const rtx_insn *);
+extern int modified_in_p (const_rtx, const_rtx);
+extern int reg_set_p (const_rtx, const_rtx);
+extern int multiple_sets (const_rtx);
+extern int set_noop_p (const_rtx);
+extern int noop_move_p (const rtx_insn *);
+extern bool refers_to_regno_p (unsigned int, unsigned int, const_rtx, rtx *);
+extern int reg_overlap_mentioned_p (const_rtx, const_rtx);
+extern const_rtx set_of (const_rtx, const_rtx);
+extern void record_hard_reg_sets (rtx, const_rtx, void *);
+extern void record_hard_reg_uses (rtx *, void *);
+extern void find_all_hard_regs (const_rtx, HARD_REG_SET *);
+extern void find_all_hard_reg_sets (const rtx_insn *, HARD_REG_SET *, bool);
+extern void note_stores (const_rtx, void (*) (rtx, const_rtx, void *), void *);
+extern void note_uses (rtx *, void (*) (rtx *, void *), void *);
+extern int dead_or_set_p (const rtx_insn *, const_rtx);
+extern int dead_or_set_regno_p (const rtx_insn *, unsigned int);
+extern rtx find_reg_note (const_rtx, enum reg_note, const_rtx);
+extern rtx find_regno_note (const_rtx, enum reg_note, unsigned int);
+extern rtx find_reg_equal_equiv_note (const_rtx);
+extern rtx find_constant_src (const rtx_insn *);
+extern int find_reg_fusage (const_rtx, enum rtx_code, const_rtx);
+extern int find_regno_fusage (const_rtx, enum rtx_code, unsigned int);
+extern rtx alloc_reg_note (enum reg_note, rtx, rtx);
+extern void add_reg_note (rtx, enum reg_note, rtx);
+extern void add_int_reg_note (rtx_insn *, enum reg_note, int);
+extern void add_args_size_note (rtx_insn *, poly_int64);
+extern void add_shallow_copy_of_reg_note (rtx_insn *, rtx);
+extern rtx duplicate_reg_note (rtx);
+extern void remove_note (rtx_insn *, const_rtx);
+extern bool remove_reg_equal_equiv_notes (rtx_insn *);
+extern void remove_reg_equal_equiv_notes_for_regno (unsigned int);
+extern int side_effects_p (const_rtx);
+extern int volatile_refs_p (const_rtx);
+extern int volatile_insn_p (const_rtx);
+extern int may_trap_p_1 (const_rtx, unsigned);
+extern int may_trap_p (const_rtx);
+extern int may_trap_or_fault_p (const_rtx);
+extern bool can_throw_internal (const_rtx);
+extern bool can_throw_external (const_rtx);
+extern bool insn_could_throw_p (const_rtx);
+extern bool insn_nothrow_p (const_rtx);
+extern bool can_nonlocal_goto (const rtx_insn *);
+extern void copy_reg_eh_region_note_forward (rtx, rtx_insn *, rtx);
+extern void copy_reg_eh_region_note_backward (rtx, rtx_insn *, rtx);
+extern int inequality_comparisons_p (const_rtx);
+extern rtx replace_rtx (rtx, rtx, rtx, bool = false);
+extern void replace_label (rtx *, rtx, rtx, bool);
+extern void replace_label_in_insn (rtx_insn *, rtx_insn *, rtx_insn *, bool);
+extern bool rtx_referenced_p (const_rtx, const_rtx);
+extern bool tablejump_p (const rtx_insn *, rtx_insn **, rtx_jump_table_data **);
+extern int computed_jump_p (const rtx_insn *);
+extern bool tls_referenced_p (const_rtx);
+extern bool contains_mem_rtx_p (rtx x);
+extern bool reg_is_clobbered_by_clobber_high (unsigned int, machine_mode,
+					      const_rtx);
+
+/* Convenient wrapper for reg_is_clobbered_by_clobber_high.  */
+inline bool
+reg_is_clobbered_by_clobber_high (const_rtx x, const_rtx clobber_high_op)
+{
+  return reg_is_clobbered_by_clobber_high (REGNO (x), GET_MODE (x),
+					   clobber_high_op);
+}
+
+/* Overload for refers_to_regno_p for checking a single register.  */
+inline bool
+refers_to_regno_p (unsigned int regnum, const_rtx x, rtx* loc = NULL)
+{
+  return refers_to_regno_p (regnum, regnum + 1, x, loc);
+}
+
+/* Callback for for_each_inc_dec, to process the autoinc operation OP
+   within MEM that sets DEST to SRC + SRCOFF, or SRC if SRCOFF is
+   NULL.  The callback is passed the same opaque ARG passed to
+   for_each_inc_dec.  Return zero to continue looking for other
+   autoinc operations or any other value to interrupt the traversal and
+   return that value to the caller of for_each_inc_dec.  */
+typedef int (*for_each_inc_dec_fn) (rtx mem, rtx op, rtx dest, rtx src,
+				    rtx srcoff, void *arg);
+extern int for_each_inc_dec (rtx, for_each_inc_dec_fn, void *arg);
+
+typedef int (*rtx_equal_p_callback_function) (const_rtx *, const_rtx *,
+                                              rtx *, rtx *);
+extern int rtx_equal_p_cb (const_rtx, const_rtx,
+                           rtx_equal_p_callback_function);
+
+typedef int (*hash_rtx_callback_function) (const_rtx, machine_mode, rtx *,
+                                           machine_mode *);
+extern unsigned hash_rtx_cb (const_rtx, machine_mode, int *, int *,
+                             bool, hash_rtx_callback_function);
+
+extern rtx regno_use_in (unsigned int, rtx);
+extern int auto_inc_p (const_rtx);
+extern bool in_insn_list_p (const rtx_insn_list *, const rtx_insn *);
+extern void remove_node_from_expr_list (const_rtx, rtx_expr_list **);
+extern void remove_node_from_insn_list (const rtx_insn *, rtx_insn_list **);
+extern int loc_mentioned_in_p (rtx *, const_rtx);
+extern rtx_insn *find_first_parameter_load (rtx_insn *, rtx_insn *);
+extern bool keep_with_call_p (const rtx_insn *);
+extern bool label_is_jump_target_p (const_rtx, const rtx_insn *);
+extern int pattern_cost (rtx, bool);
+extern int insn_cost (rtx_insn *, bool);
+extern unsigned seq_cost (const rtx_insn *, bool);
+
+/* Given an insn and condition, return a canonical description of
+   the test being made.  */
+extern rtx canonicalize_condition (rtx_insn *, rtx, int, rtx_insn **, rtx,
+				   int, int);
+
+/* Given a JUMP_INSN, return a canonical description of the test
+   being made.  */
+extern rtx get_condition (rtx_insn *, rtx_insn **, int, int);
+
+/* Information about a subreg of a hard register.  */
+struct subreg_info
+{
+  /* Offset of first hard register involved in the subreg.  */
+  int offset;
+  /* Number of hard registers involved in the subreg.  In the case of
+     a paradoxical subreg, this is the number of registers that would
+     be modified by writing to the subreg; some of them may be don't-care
+     when reading from the subreg.  */
+  int nregs;
+  /* Whether this subreg can be represented as a hard reg with the new
+     mode (by adding OFFSET to the original hard register).  */
+  bool representable_p;
+};
+
+extern void subreg_get_info (unsigned int, machine_mode,
+			     poly_uint64, machine_mode,
+			     struct subreg_info *);
+
+/* lists.c */
+
+extern void free_EXPR_LIST_list (rtx_expr_list **);
+extern void free_INSN_LIST_list (rtx_insn_list **);
+extern void free_EXPR_LIST_node (rtx);
+extern void free_INSN_LIST_node (rtx);
+extern rtx_insn_list *alloc_INSN_LIST (rtx, rtx);
+extern rtx_insn_list *copy_INSN_LIST (rtx_insn_list *);
+extern rtx_insn_list *concat_INSN_LIST (rtx_insn_list *, rtx_insn_list *);
+extern rtx_expr_list *alloc_EXPR_LIST (int, rtx, rtx);
+extern void remove_free_INSN_LIST_elem (rtx_insn *, rtx_insn_list **);
+extern rtx remove_list_elem (rtx, rtx *);
+extern rtx_insn *remove_free_INSN_LIST_node (rtx_insn_list **);
+extern rtx remove_free_EXPR_LIST_node (rtx_expr_list **);
+
+
+/* reginfo.c */
+
+/* Resize reg info.  */
+extern bool resize_reg_info (void);
+/* Free up register info memory.  */
+extern void free_reg_info (void);
+extern void init_subregs_of_mode (void);
+extern void finish_subregs_of_mode (void);
+
+/* recog.c */
+extern rtx extract_asm_operands (rtx);
+extern int asm_noperands (const_rtx);
+extern const char *decode_asm_operands (rtx, rtx *, rtx **, const char **,
+					machine_mode *, location_t *);
+extern void get_referenced_operands (const char *, bool *, unsigned int);
+
+extern enum reg_class reg_preferred_class (int);
+extern enum reg_class reg_alternate_class (int);
+extern enum reg_class reg_allocno_class (int);
+extern void setup_reg_classes (int, enum reg_class, enum reg_class,
+			       enum reg_class);
+
+extern void split_all_insns (void);
+extern unsigned int split_all_insns_noflow (void);
+
+#define MAX_SAVED_CONST_INT 64
+extern GTY(()) rtx const_int_rtx[MAX_SAVED_CONST_INT * 2 + 1];
+
+#define const0_rtx	(const_int_rtx[MAX_SAVED_CONST_INT])
+#define const1_rtx	(const_int_rtx[MAX_SAVED_CONST_INT+1])
+#define const2_rtx	(const_int_rtx[MAX_SAVED_CONST_INT+2])
+#define constm1_rtx	(const_int_rtx[MAX_SAVED_CONST_INT-1])
+extern GTY(()) rtx const_true_rtx;
+
+extern GTY(()) rtx const_tiny_rtx[4][(int) MAX_MACHINE_MODE];
+
+/* Returns a constant 0 rtx in mode MODE.  Integer modes are treated the
+   same as VOIDmode.  */
+
+#define CONST0_RTX(MODE) (const_tiny_rtx[0][(int) (MODE)])
+
+/* Likewise, for the constants 1 and 2 and -1.  */
+
+#define CONST1_RTX(MODE) (const_tiny_rtx[1][(int) (MODE)])
+#define CONST2_RTX(MODE) (const_tiny_rtx[2][(int) (MODE)])
+#define CONSTM1_RTX(MODE) (const_tiny_rtx[3][(int) (MODE)])
+
+extern GTY(()) rtx pc_rtx;
+extern GTY(()) rtx cc0_rtx;
+extern GTY(()) rtx ret_rtx;
+extern GTY(()) rtx simple_return_rtx;
+extern GTY(()) rtx_insn *invalid_insn_rtx;
+
+/* If HARD_FRAME_POINTER_REGNUM is defined, then a special dummy reg
+   is used to represent the frame pointer.  This is because the
+   hard frame pointer and the automatic variables are separated by an amount
+   that cannot be determined until after register allocation.  We can assume
+   that in this case ELIMINABLE_REGS will be defined, one action of which
+   will be to eliminate FRAME_POINTER_REGNUM into HARD_FRAME_POINTER_REGNUM.  */
+#ifndef HARD_FRAME_POINTER_REGNUM
+#define HARD_FRAME_POINTER_REGNUM FRAME_POINTER_REGNUM
+#endif
+
+#ifndef HARD_FRAME_POINTER_IS_FRAME_POINTER
+#define HARD_FRAME_POINTER_IS_FRAME_POINTER \
+  (HARD_FRAME_POINTER_REGNUM == FRAME_POINTER_REGNUM)
+#endif
+
+#ifndef HARD_FRAME_POINTER_IS_ARG_POINTER
+#define HARD_FRAME_POINTER_IS_ARG_POINTER \
+  (HARD_FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM)
+#endif
+
+/* Index labels for global_rtl.  */
+enum global_rtl_index
+{
+  GR_STACK_POINTER,
+  GR_FRAME_POINTER,
+/* For register elimination to work properly these hard_frame_pointer_rtx,
+   frame_pointer_rtx, and arg_pointer_rtx must be the same if they refer to
+   the same register.  */
+#if FRAME_POINTER_REGNUM == ARG_POINTER_REGNUM
+  GR_ARG_POINTER = GR_FRAME_POINTER,
+#endif
+#if HARD_FRAME_POINTER_IS_FRAME_POINTER
+  GR_HARD_FRAME_POINTER = GR_FRAME_POINTER,
+#else
+  GR_HARD_FRAME_POINTER,
+#endif
+#if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
+#if HARD_FRAME_POINTER_IS_ARG_POINTER
+  GR_ARG_POINTER = GR_HARD_FRAME_POINTER,
+#else
+  GR_ARG_POINTER,
+#endif
+#endif
+  GR_VIRTUAL_INCOMING_ARGS,
+  GR_VIRTUAL_STACK_ARGS,
+  GR_VIRTUAL_STACK_DYNAMIC,
+  GR_VIRTUAL_OUTGOING_ARGS,
+  GR_VIRTUAL_CFA,
+  GR_VIRTUAL_PREFERRED_STACK_BOUNDARY,
+
+  GR_MAX
+};
+
+/* Target-dependent globals.  */
+struct GTY(()) target_rtl {
+  /* All references to the hard registers in global_rtl_index go through
+     these unique rtl objects.  On machines where the frame-pointer and
+     arg-pointer are the same register, they use the same unique object.
+
+     After register allocation, other rtl objects which used to be pseudo-regs
+     may be clobbered to refer to the frame-pointer register.
+     But references that were originally to the frame-pointer can be
+     distinguished from the others because they contain frame_pointer_rtx.
+
+     When to use frame_pointer_rtx and hard_frame_pointer_rtx is a little
+     tricky: until register elimination has taken place hard_frame_pointer_rtx
+     should be used if it is being set, and frame_pointer_rtx otherwise.  After
+     register elimination hard_frame_pointer_rtx should always be used.
+     On machines where the two registers are same (most) then these are the
+     same.  */
+  rtx x_global_rtl[GR_MAX];
+
+  /* A unique representation of (REG:Pmode PIC_OFFSET_TABLE_REGNUM).  */
+  rtx x_pic_offset_table_rtx;
+
+  /* A unique representation of (REG:Pmode RETURN_ADDRESS_POINTER_REGNUM).
+     This is used to implement __builtin_return_address for some machines;
+     see for instance the MIPS port.  */
+  rtx x_return_address_pointer_rtx;
+
+  /* Commonly used RTL for hard registers.  These objects are not
+     necessarily unique, so we allocate them separately from global_rtl.
+     They are initialized once per compilation unit, then copied into
+     regno_reg_rtx at the beginning of each function.  */
+  rtx x_initial_regno_reg_rtx[FIRST_PSEUDO_REGISTER];
+
+  /* A sample (mem:M stack_pointer_rtx) rtx for each mode M.  */
+  rtx x_top_of_stack[MAX_MACHINE_MODE];
+
+  /* Static hunks of RTL used by the aliasing code; these are treated
+     as persistent to avoid unnecessary RTL allocations.  */
+  rtx x_static_reg_base_value[FIRST_PSEUDO_REGISTER];
+
+  /* The default memory attributes for each mode.  */
+  struct mem_attrs *x_mode_mem_attrs[(int) MAX_MACHINE_MODE];
+
+  /* Track if RTL has been initialized.  */
+  bool target_specific_initialized;
+};
+
+extern GTY(()) struct target_rtl default_target_rtl;
+#if SWITCHABLE_TARGET
+extern struct target_rtl *this_target_rtl;
+#else
+#define this_target_rtl (&default_target_rtl)
+#endif
+
+#define global_rtl				\
+  (this_target_rtl->x_global_rtl)
+#define pic_offset_table_rtx \
+  (this_target_rtl->x_pic_offset_table_rtx)
+#define return_address_pointer_rtx \
+  (this_target_rtl->x_return_address_pointer_rtx)
+#define top_of_stack \
+  (this_target_rtl->x_top_of_stack)
+#define mode_mem_attrs \
+  (this_target_rtl->x_mode_mem_attrs)
+
+/* All references to certain hard regs, except those created
+   by allocating pseudo regs into them (when that's possible),
+   go through these unique rtx objects.  */
+#define stack_pointer_rtx       (global_rtl[GR_STACK_POINTER])
+#define frame_pointer_rtx       (global_rtl[GR_FRAME_POINTER])
+#define hard_frame_pointer_rtx	(global_rtl[GR_HARD_FRAME_POINTER])
+#define arg_pointer_rtx		(global_rtl[GR_ARG_POINTER])
+
+#ifndef GENERATOR_FILE
+/* Return the attributes of a MEM rtx.  */
+static inline const struct mem_attrs *
+get_mem_attrs (const_rtx x)
+{
+  struct mem_attrs *attrs;
+
+  attrs = MEM_ATTRS (x);
+  if (!attrs)
+    attrs = mode_mem_attrs[(int) GET_MODE (x)];
+  return attrs;
+}
+#endif
+
+/* Include the RTL generation functions.  */
+
+#ifndef GENERATOR_FILE
+#include "genrtl.h"
+#undef gen_rtx_ASM_INPUT
+#define gen_rtx_ASM_INPUT(MODE, ARG0)				\
+  gen_rtx_fmt_si (ASM_INPUT, (MODE), (ARG0), 0)
+#define gen_rtx_ASM_INPUT_loc(MODE, ARG0, LOC)			\
+  gen_rtx_fmt_si (ASM_INPUT, (MODE), (ARG0), (LOC))
+#endif
+
+/* There are some RTL codes that require special attention; the
+   generation functions included above do the raw handling.  If you
+   add to this list, modify special_rtx in gengenrtl.c as well.  */
+
+extern rtx_expr_list *gen_rtx_EXPR_LIST (machine_mode, rtx, rtx);
+extern rtx_insn_list *gen_rtx_INSN_LIST (machine_mode, rtx, rtx);
+extern rtx_insn *
+gen_rtx_INSN (machine_mode mode, rtx_insn *prev_insn, rtx_insn *next_insn,
+	      basic_block bb, rtx pattern, int location, int code,
+	      rtx reg_notes);
+extern rtx gen_rtx_CONST_INT (machine_mode, HOST_WIDE_INT);
+extern rtx gen_rtx_CONST_VECTOR (machine_mode, rtvec);
+extern void set_mode_and_regno (rtx, machine_mode, unsigned int);
+extern rtx gen_raw_REG (machine_mode, unsigned int);
+extern rtx gen_rtx_REG (machine_mode, unsigned int);
+extern rtx gen_rtx_SUBREG (machine_mode, rtx, poly_uint64);
+extern rtx gen_rtx_MEM (machine_mode, rtx);
+extern rtx gen_rtx_VAR_LOCATION (machine_mode, tree, rtx,
+				 enum var_init_status);
+
+#ifdef GENERATOR_FILE
+#define PUT_MODE(RTX, MODE) PUT_MODE_RAW (RTX, MODE)
+#else
+static inline void
+PUT_MODE (rtx x, machine_mode mode)
+{
+  if (REG_P (x))
+    set_mode_and_regno (x, mode, REGNO (x));
+  else
+    PUT_MODE_RAW (x, mode);
+}
+#endif
+
+#define GEN_INT(N)  gen_rtx_CONST_INT (VOIDmode, (N))
+
+/* Virtual registers are used during RTL generation to refer to locations into
+   the stack frame when the actual location isn't known until RTL generation
+   is complete.  The routine instantiate_virtual_regs replaces these with
+   the proper value, which is normally {frame,arg,stack}_pointer_rtx plus
+   a constant.  */
+
+#define FIRST_VIRTUAL_REGISTER	(FIRST_PSEUDO_REGISTER)
+
+/* This points to the first word of the incoming arguments passed on the stack,
+   either by the caller or by the callee when pretending it was passed by the
+   caller.  */
+
+#define virtual_incoming_args_rtx       (global_rtl[GR_VIRTUAL_INCOMING_ARGS])
+
+#define VIRTUAL_INCOMING_ARGS_REGNUM	(FIRST_VIRTUAL_REGISTER)
+
+/* If FRAME_GROWS_DOWNWARD, this points to immediately above the first
+   variable on the stack.  Otherwise, it points to the first variable on
+   the stack.  */
+
+#define virtual_stack_vars_rtx	        (global_rtl[GR_VIRTUAL_STACK_ARGS])
+
+#define VIRTUAL_STACK_VARS_REGNUM	((FIRST_VIRTUAL_REGISTER) + 1)
+
+/* This points to the location of dynamically-allocated memory on the stack
+   immediately after the stack pointer has been adjusted by the amount
+   desired.  */
+
+#define virtual_stack_dynamic_rtx	(global_rtl[GR_VIRTUAL_STACK_DYNAMIC])
+
+#define VIRTUAL_STACK_DYNAMIC_REGNUM	((FIRST_VIRTUAL_REGISTER) + 2)
+
+/* This points to the location in the stack at which outgoing arguments should
+   be written when the stack is pre-pushed (arguments pushed using push
+   insns always use sp).  */
+
+#define virtual_outgoing_args_rtx	(global_rtl[GR_VIRTUAL_OUTGOING_ARGS])
+
+#define VIRTUAL_OUTGOING_ARGS_REGNUM	((FIRST_VIRTUAL_REGISTER) + 3)
+
+/* This points to the Canonical Frame Address of the function.  This
+   should correspond to the CFA produced by INCOMING_FRAME_SP_OFFSET,
+   but is calculated relative to the arg pointer for simplicity; the
+   frame pointer nor stack pointer are necessarily fixed relative to
+   the CFA until after reload.  */
+
+#define virtual_cfa_rtx			(global_rtl[GR_VIRTUAL_CFA])
+
+#define VIRTUAL_CFA_REGNUM		((FIRST_VIRTUAL_REGISTER) + 4)
+
+#define LAST_VIRTUAL_POINTER_REGISTER	((FIRST_VIRTUAL_REGISTER) + 4)
+
+/* This is replaced by crtl->preferred_stack_boundary / BITS_PER_UNIT
+   when finalized.  */
+
+#define virtual_preferred_stack_boundary_rtx \
+	(global_rtl[GR_VIRTUAL_PREFERRED_STACK_BOUNDARY])
+
+#define VIRTUAL_PREFERRED_STACK_BOUNDARY_REGNUM \
+					((FIRST_VIRTUAL_REGISTER) + 5)
+
+#define LAST_VIRTUAL_REGISTER		((FIRST_VIRTUAL_REGISTER) + 5)
+
+/* Nonzero if REGNUM is a pointer into the stack frame.  */
+#define REGNO_PTR_FRAME_P(REGNUM)		\
+  ((REGNUM) == STACK_POINTER_REGNUM		\
+   || (REGNUM) == FRAME_POINTER_REGNUM		\
+   || (REGNUM) == HARD_FRAME_POINTER_REGNUM	\
+   || (REGNUM) == ARG_POINTER_REGNUM		\
+   || ((REGNUM) >= FIRST_VIRTUAL_REGISTER	\
+       && (REGNUM) <= LAST_VIRTUAL_POINTER_REGISTER))
+
+/* REGNUM never really appearing in the INSN stream.  */
+#define INVALID_REGNUM			(~(unsigned int) 0)
+
+/* REGNUM for which no debug information can be generated.  */
+#define IGNORED_DWARF_REGNUM            (INVALID_REGNUM - 1)
+
+extern rtx output_constant_def (tree, int);
+extern rtx lookup_constant_def (tree);
+
+/* Nonzero after end of reload pass.
+   Set to 1 or 0 by reload1.c.  */
+
+extern int reload_completed;
+
+/* Nonzero after thread_prologue_and_epilogue_insns has run.  */
+extern int epilogue_completed;
+
+/* Set to 1 while reload_as_needed is operating.
+   Required by some machines to handle any generated moves differently.  */
+
+extern int reload_in_progress;
+
+/* Set to 1 while in lra.  */
+extern int lra_in_progress;
+
+/* This macro indicates whether you may create a new
+   pseudo-register.  */
+
+#define can_create_pseudo_p() (!reload_in_progress && !reload_completed)
+
+#ifdef STACK_REGS
+/* Nonzero after end of regstack pass.
+   Set to 1 or 0 by reg-stack.c.  */
+extern int regstack_completed;
+#endif
+
+/* If this is nonzero, we do not bother generating VOLATILE
+   around volatile memory references, and we are willing to
+   output indirect addresses.  If cse is to follow, we reject
+   indirect addresses so a useful potential cse is generated;
+   if it is used only once, instruction combination will produce
+   the same indirect address eventually.  */
+extern int cse_not_expected;
+
+/* Translates rtx code to tree code, for those codes needed by
+   real_arithmetic.  The function returns an int because the caller may not
+   know what `enum tree_code' means.  */
+
+extern int rtx_to_tree_code (enum rtx_code);
+
+/* In cse.c */
+extern int delete_trivially_dead_insns (rtx_insn *, int);
+extern int exp_equiv_p (const_rtx, const_rtx, int, bool);
+extern unsigned hash_rtx (const_rtx x, machine_mode, int *, int *, bool);
+
+/* In dse.c */
+extern bool check_for_inc_dec (rtx_insn *insn);
+
+/* In jump.c */
+extern int comparison_dominates_p (enum rtx_code, enum rtx_code);
+extern bool jump_to_label_p (const rtx_insn *);
+extern int condjump_p (const rtx_insn *);
+extern int any_condjump_p (const rtx_insn *);
+extern int any_uncondjump_p (const rtx_insn *);
+extern rtx pc_set (const rtx_insn *);
+extern rtx condjump_label (const rtx_insn *);
+extern int simplejump_p (const rtx_insn *);
+extern int returnjump_p (const rtx_insn *);
+extern int eh_returnjump_p (rtx_insn *);
+extern int onlyjump_p (const rtx_insn *);
+extern int only_sets_cc0_p (const_rtx);
+extern int sets_cc0_p (const_rtx);
+extern int invert_jump_1 (rtx_jump_insn *, rtx);
+extern int invert_jump (rtx_jump_insn *, rtx, int);
+extern int rtx_renumbered_equal_p (const_rtx, const_rtx);
+extern int true_regnum (const_rtx);
+extern unsigned int reg_or_subregno (const_rtx);
+extern int redirect_jump_1 (rtx_insn *, rtx);
+extern void redirect_jump_2 (rtx_jump_insn *, rtx, rtx, int, int);
+extern int redirect_jump (rtx_jump_insn *, rtx, int);
+extern void rebuild_jump_labels (rtx_insn *);
+extern void rebuild_jump_labels_chain (rtx_insn *);
+extern rtx reversed_comparison (const_rtx, machine_mode);
+extern enum rtx_code reversed_comparison_code (const_rtx, const rtx_insn *);
+extern enum rtx_code reversed_comparison_code_parts (enum rtx_code, const_rtx,
+						     const_rtx, const rtx_insn *);
+extern void delete_for_peephole (rtx_insn *, rtx_insn *);
+extern int condjump_in_parallel_p (const rtx_insn *);
+
+/* In emit-rtl.c.  */
+extern int max_reg_num (void);
+extern int max_label_num (void);
+extern int get_first_label_num (void);
+extern void maybe_set_first_label_num (rtx_code_label *);
+extern void delete_insns_since (rtx_insn *);
+extern void mark_reg_pointer (rtx, int);
+extern void mark_user_reg (rtx);
+extern void reset_used_flags (rtx);
+extern void set_used_flags (rtx);
+extern void reorder_insns (rtx_insn *, rtx_insn *, rtx_insn *);
+extern void reorder_insns_nobb (rtx_insn *, rtx_insn *, rtx_insn *);
+extern int get_max_insn_count (void);
+extern int in_sequence_p (void);
+extern void init_emit (void);
+extern void init_emit_regs (void);
+extern void init_derived_machine_modes (void);
+extern void init_emit_once (void);
+extern void push_topmost_sequence (void);
+extern void pop_topmost_sequence (void);
+extern void set_new_first_and_last_insn (rtx_insn *, rtx_insn *);
+extern unsigned int unshare_all_rtl (void);
+extern void unshare_all_rtl_again (rtx_insn *);
+extern void unshare_all_rtl_in_chain (rtx_insn *);
+extern void verify_rtl_sharing (void);
+extern void add_insn (rtx_insn *);
+extern void add_insn_before (rtx_insn *, rtx_insn *, basic_block);
+extern void add_insn_after (rtx_insn *, rtx_insn *, basic_block);
+extern void remove_insn (rtx_insn *);
+extern rtx_insn *emit (rtx, bool = true);
+extern void emit_insn_at_entry (rtx);
+extern rtx gen_lowpart_SUBREG (machine_mode, rtx);
+extern rtx gen_const_mem (machine_mode, rtx);
+extern rtx gen_frame_mem (machine_mode, rtx);
+extern rtx gen_tmp_stack_mem (machine_mode, rtx);
+extern bool validate_subreg (machine_mode, machine_mode,
+			     const_rtx, poly_uint64);
+
+/* In combine.c  */
+extern unsigned int extended_count (const_rtx, machine_mode, int);
+extern rtx remove_death (unsigned int, rtx_insn *);
+extern void dump_combine_stats (FILE *);
+extern void dump_combine_total_stats (FILE *);
+extern rtx make_compound_operation (rtx, enum rtx_code);
+
+/* In sched-rgn.c.  */
+extern void schedule_insns (void);
+
+/* In sched-ebb.c.  */
+extern void schedule_ebbs (void);
+
+/* In sel-sched-dump.c.  */
+extern void sel_sched_fix_param (const char *param, const char *val);
+
+/* In print-rtl.c */
+extern const char *print_rtx_head;
+extern void debug (const rtx_def &ref);
+extern void debug (const rtx_def *ptr);
+extern void debug_rtx (const_rtx);
+extern void debug_rtx_list (const rtx_insn *, int);
+extern void debug_rtx_range (const rtx_insn *, const rtx_insn *);
+extern const rtx_insn *debug_rtx_find (const rtx_insn *, int);
+extern void print_mem_expr (FILE *, const_tree);
+extern void print_rtl (FILE *, const_rtx);
+extern void print_simple_rtl (FILE *, const_rtx);
+extern int print_rtl_single (FILE *, const_rtx);
+extern int print_rtl_single_with_indent (FILE *, const_rtx, int);
+extern void print_inline_rtx (FILE *, const_rtx, int);
+
+/* In stmt.c */
+extern void expand_null_return (void);
+extern void expand_naked_return (void);
+extern void emit_jump (rtx);
+
+/* Memory operation built-ins differ by return value.  Mapping
+   of the enum values is following:
+   - RETURN_BEGIN - return destination, e.g. memcpy
+   - RETURN_END - return destination + n, e.g. mempcpy
+   - RETURN_END_MINUS_ONE - return a pointer to the terminating
+    null byte of the string, e.g. strcpy
+*/
+
+enum memop_ret
+{
+  RETURN_BEGIN,
+  RETURN_END,
+  RETURN_END_MINUS_ONE
+};
+
+/* In expr.c */
+extern rtx move_by_pieces (rtx, rtx, unsigned HOST_WIDE_INT,
+			   unsigned int, memop_ret);
+extern poly_int64 find_args_size_adjust (rtx_insn *);
+extern poly_int64 fixup_args_size_notes (rtx_insn *, rtx_insn *, poly_int64);
+
+/* In expmed.c */
+extern void init_expmed (void);
+extern void expand_inc (rtx, rtx);
+extern void expand_dec (rtx, rtx);
+
+/* In lower-subreg.c */
+extern void init_lower_subreg (void);
+
+/* In gcse.c */
+extern bool can_copy_p (machine_mode);
+extern bool can_assign_to_reg_without_clobbers_p (rtx, machine_mode);
+extern rtx_insn *prepare_copy_insn (rtx, rtx);
+
+/* In cprop.c */
+extern rtx fis_get_condition (rtx_insn *);
+
+/* In ira.c */
+extern HARD_REG_SET eliminable_regset;
+extern void mark_elimination (int, int);
+
+/* In reginfo.c */
+extern int reg_classes_intersect_p (reg_class_t, reg_class_t);
+extern int reg_class_subset_p (reg_class_t, reg_class_t);
+extern void globalize_reg (tree, int);
+extern void init_reg_modes_target (void);
+extern void init_regs (void);
+extern void reinit_regs (void);
+extern void init_fake_stack_mems (void);
+extern void save_register_info (void);
+extern void init_reg_sets (void);
+extern void regclass (rtx, int);
+extern void reg_scan (rtx_insn *, unsigned int);
+extern void fix_register (const char *, int, int);
+extern const HARD_REG_SET *valid_mode_changes_for_regno (unsigned int);
+
+/* In reload1.c */
+extern int function_invariant_p (const_rtx);
+
+/* In calls.c */
+enum libcall_type
+{
+  LCT_NORMAL = 0,
+  LCT_CONST = 1,
+  LCT_PURE = 2,
+  LCT_NORETURN = 3,
+  LCT_THROW = 4,
+  LCT_RETURNS_TWICE = 5
+};
+
+extern rtx emit_library_call_value_1 (int, rtx, rtx, enum libcall_type,
+				      machine_mode, int, rtx_mode_t *);
+
+/* Output a library call and discard the returned value.  FUN is the
+   address of the function, as a SYMBOL_REF rtx, and OUTMODE is the mode
+   of the (discarded) return value.  FN_TYPE is LCT_NORMAL for `normal'
+   calls, LCT_CONST for `const' calls, LCT_PURE for `pure' calls, or
+   another LCT_ value for other types of library calls.
+
+   There are different overloads of this function for different numbers
+   of arguments.  In each case the argument value is followed by its mode.  */
+
+inline void
+emit_library_call (rtx fun, libcall_type fn_type, machine_mode outmode)
+{
+  emit_library_call_value_1 (0, fun, NULL_RTX, fn_type, outmode, 0, NULL);
+}
+
+inline void
+emit_library_call (rtx fun, libcall_type fn_type, machine_mode outmode,
+		   rtx arg1, machine_mode arg1_mode)
+{
+  rtx_mode_t args[] = { rtx_mode_t (arg1, arg1_mode) };
+  emit_library_call_value_1 (0, fun, NULL_RTX, fn_type, outmode, 1, args);
+}
+
+inline void
+emit_library_call (rtx fun, libcall_type fn_type, machine_mode outmode,
+		   rtx arg1, machine_mode arg1_mode,
+		   rtx arg2, machine_mode arg2_mode)
+{
+  rtx_mode_t args[] = {
+    rtx_mode_t (arg1, arg1_mode),
+    rtx_mode_t (arg2, arg2_mode)
+  };
+  emit_library_call_value_1 (0, fun, NULL_RTX, fn_type, outmode, 2, args);
+}
+
+inline void
+emit_library_call (rtx fun, libcall_type fn_type, machine_mode outmode,
+		   rtx arg1, machine_mode arg1_mode,
+		   rtx arg2, machine_mode arg2_mode,
+		   rtx arg3, machine_mode arg3_mode)
+{
+  rtx_mode_t args[] = {
+    rtx_mode_t (arg1, arg1_mode),
+    rtx_mode_t (arg2, arg2_mode),
+    rtx_mode_t (arg3, arg3_mode)
+  };
+  emit_library_call_value_1 (0, fun, NULL_RTX, fn_type, outmode, 3, args);
+}
+
+inline void
+emit_library_call (rtx fun, libcall_type fn_type, machine_mode outmode,
+		   rtx arg1, machine_mode arg1_mode,
+		   rtx arg2, machine_mode arg2_mode,
+		   rtx arg3, machine_mode arg3_mode,
+		   rtx arg4, machine_mode arg4_mode)
+{
+  rtx_mode_t args[] = {
+    rtx_mode_t (arg1, arg1_mode),
+    rtx_mode_t (arg2, arg2_mode),
+    rtx_mode_t (arg3, arg3_mode),
+    rtx_mode_t (arg4, arg4_mode)
+  };
+  emit_library_call_value_1 (0, fun, NULL_RTX, fn_type, outmode, 4, args);
+}
+
+/* Like emit_library_call, but return the value produced by the call.
+   Use VALUE to store the result if it is nonnull, otherwise pick a
+   convenient location.  */
+
+inline rtx
+emit_library_call_value (rtx fun, rtx value, libcall_type fn_type,
+			 machine_mode outmode)
+{
+  return emit_library_call_value_1 (1, fun, value, fn_type, outmode, 0, NULL);
+}
+
+inline rtx
+emit_library_call_value (rtx fun, rtx value, libcall_type fn_type,
+			 machine_mode outmode,
+			 rtx arg1, machine_mode arg1_mode)
+{
+  rtx_mode_t args[] = { rtx_mode_t (arg1, arg1_mode) };
+  return emit_library_call_value_1 (1, fun, value, fn_type, outmode, 1, args);
+}
+
+inline rtx
+emit_library_call_value (rtx fun, rtx value, libcall_type fn_type,
+			 machine_mode outmode,
+			 rtx arg1, machine_mode arg1_mode,
+			 rtx arg2, machine_mode arg2_mode)
+{
+  rtx_mode_t args[] = {
+    rtx_mode_t (arg1, arg1_mode),
+    rtx_mode_t (arg2, arg2_mode)
+  };
+  return emit_library_call_value_1 (1, fun, value, fn_type, outmode, 2, args);
+}
+
+inline rtx
+emit_library_call_value (rtx fun, rtx value, libcall_type fn_type,
+			 machine_mode outmode,
+			 rtx arg1, machine_mode arg1_mode,
+			 rtx arg2, machine_mode arg2_mode,
+			 rtx arg3, machine_mode arg3_mode)
+{
+  rtx_mode_t args[] = {
+    rtx_mode_t (arg1, arg1_mode),
+    rtx_mode_t (arg2, arg2_mode),
+    rtx_mode_t (arg3, arg3_mode)
+  };
+  return emit_library_call_value_1 (1, fun, value, fn_type, outmode, 3, args);
+}
+
+inline rtx
+emit_library_call_value (rtx fun, rtx value, libcall_type fn_type,
+			 machine_mode outmode,
+			 rtx arg1, machine_mode arg1_mode,
+			 rtx arg2, machine_mode arg2_mode,
+			 rtx arg3, machine_mode arg3_mode,
+			 rtx arg4, machine_mode arg4_mode)
+{
+  rtx_mode_t args[] = {
+    rtx_mode_t (arg1, arg1_mode),
+    rtx_mode_t (arg2, arg2_mode),
+    rtx_mode_t (arg3, arg3_mode),
+    rtx_mode_t (arg4, arg4_mode)
+  };
+  return emit_library_call_value_1 (1, fun, value, fn_type, outmode, 4, args);
+}
+
+/* In varasm.c */
+extern void init_varasm_once (void);
+
+extern rtx make_debug_expr_from_rtl (const_rtx);
+
+/* In read-rtl.c */
+#ifdef GENERATOR_FILE
+extern bool read_rtx (const char *, vec<rtx> *);
+#endif
+
+/* In alias.c */
+extern rtx canon_rtx (rtx);
+extern int true_dependence (const_rtx, machine_mode, const_rtx);
+extern rtx get_addr (rtx);
+extern int canon_true_dependence (const_rtx, machine_mode, rtx,
+				  const_rtx, rtx);
+extern int read_dependence (const_rtx, const_rtx);
+extern int anti_dependence (const_rtx, const_rtx);
+extern int canon_anti_dependence (const_rtx, bool,
+				  const_rtx, machine_mode, rtx);
+extern int output_dependence (const_rtx, const_rtx);
+extern int canon_output_dependence (const_rtx, bool,
+				    const_rtx, machine_mode, rtx);
+extern int may_alias_p (const_rtx, const_rtx);
+extern void init_alias_target (void);
+extern void init_alias_analysis (void);
+extern void end_alias_analysis (void);
+extern void vt_equate_reg_base_value (const_rtx, const_rtx);
+extern bool memory_modified_in_insn_p (const_rtx, const_rtx);
+extern bool may_be_sp_based_p (rtx);
+extern rtx gen_hard_reg_clobber (machine_mode, unsigned int);
+extern rtx gen_hard_reg_clobber_high (machine_mode, unsigned int);
+extern rtx get_reg_known_value (unsigned int);
+extern bool get_reg_known_equiv_p (unsigned int);
+extern rtx get_reg_base_value (unsigned int);
+
+#ifdef STACK_REGS
+extern int stack_regs_mentioned (const_rtx insn);
+#endif
+
+/* In toplev.c */
+extern GTY(()) rtx stack_limit_rtx;
+
+/* In var-tracking.c */
+extern unsigned int variable_tracking_main (void);
+extern void delete_vta_debug_insns (bool);
+
+/* In stor-layout.c.  */
+extern void get_mode_bounds (scalar_int_mode, int,
+			     scalar_int_mode, rtx *, rtx *);
+
+/* In loop-iv.c  */
+extern rtx canon_condition (rtx);
+extern void simplify_using_condition (rtx, rtx *, bitmap);
+
+/* In final.c  */
+extern unsigned int compute_alignments (void);
+extern void update_alignments (vec<rtx> &);
+extern int asm_str_count (const char *templ);
+
+struct rtl_hooks
+{
+  rtx (*gen_lowpart) (machine_mode, rtx);
+  rtx (*gen_lowpart_no_emit) (machine_mode, rtx);
+  rtx (*reg_nonzero_bits) (const_rtx, scalar_int_mode, scalar_int_mode,
+			   unsigned HOST_WIDE_INT *);
+  rtx (*reg_num_sign_bit_copies) (const_rtx, scalar_int_mode, scalar_int_mode,
+				  unsigned int *);
+  bool (*reg_truncated_to_mode) (machine_mode, const_rtx);
+
+  /* Whenever you add entries here, make sure you adjust rtlhooks-def.h.  */
+};
+
+/* Each pass can provide its own.  */
+extern struct rtl_hooks rtl_hooks;
+
+/* ... but then it has to restore these.  */
+extern const struct rtl_hooks general_rtl_hooks;
+
+/* Keep this for the nonce.  */
+#define gen_lowpart rtl_hooks.gen_lowpart
+
+extern void insn_locations_init (void);
+extern void insn_locations_finalize (void);
+extern void set_curr_insn_location (location_t);
+extern location_t curr_insn_location (void);
+
+/* rtl-error.c */
+extern void _fatal_insn_not_found (const_rtx, const char *, int, const char *)
+     ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void _fatal_insn (const char *, const_rtx, const char *, int, const char *)
+     ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+
+#define fatal_insn(msgid, insn) \
+	_fatal_insn (msgid, insn, __FILE__, __LINE__, __FUNCTION__)
+#define fatal_insn_not_found(insn) \
+	_fatal_insn_not_found (insn, __FILE__, __LINE__, __FUNCTION__)
+
+/* reginfo.c */
+extern tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
+
+/* Information about the function that is propagated by the RTL backend.
+   Available only for functions that has been already assembled.  */
+
+struct GTY(()) cgraph_rtl_info {
+   unsigned int preferred_incoming_stack_boundary;
+
+  /* Call unsaved hard registers really used by the corresponding
+     function (including ones used by functions called by the
+     function).  */
+  HARD_REG_SET function_used_regs;
+  /* Set if function_used_regs is valid.  */
+  unsigned function_used_regs_valid: 1;
+};
+
+/* If loads from memories of mode MODE always sign or zero extend,
+   return SIGN_EXTEND or ZERO_EXTEND as appropriate.  Return UNKNOWN
+   otherwise.  */
+
+inline rtx_code
+load_extend_op (machine_mode mode)
+{
+  scalar_int_mode int_mode;
+  if (is_a <scalar_int_mode> (mode, &int_mode)
+      && GET_MODE_PRECISION (int_mode) < BITS_PER_WORD)
+    return LOAD_EXTEND_OP (int_mode);
+  return UNKNOWN;
+}
+
+/* If X is a PLUS of a base and a constant offset, add the constant to *OFFSET
+   and return the base.  Return X otherwise.  */
+
+inline rtx
+strip_offset_and_add (rtx x, poly_int64_pod *offset)
+{
+  if (GET_CODE (x) == PLUS)
+    {
+      poly_int64 suboffset;
+      x = strip_offset (x, &suboffset);
+      *offset = poly_uint64 (*offset) + suboffset;
+    }
+  return x;
+}
+
+/* Return true if X is an operation that always operates on the full
+   registers for WORD_REGISTER_OPERATIONS architectures.  */
+
+inline bool
+word_register_operation_p (const_rtx x)
+{
+  switch (GET_CODE (x))
+    {
+    case CONST_INT:
+    case ROTATE:
+    case ROTATERT:
+    case SIGN_EXTRACT:
+    case ZERO_EXTRACT:
+      return false;
+    
+    default:
+      return true;
+    }
+}
+    
+/* gtype-desc.c.  */
+extern void gt_ggc_mx (rtx &);
+extern void gt_pch_nx (rtx &);
+extern void gt_pch_nx (rtx &, gt_pointer_operator, void *);
+
+#endif /* ! GCC_RTL_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtlhash.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtlhash.h
new file mode 100644
index 0000000..125ccc2
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtlhash.h
@@ -0,0 +1,31 @@
+/* Register Transfer Language (RTL) hash functions.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef RTL_HASH_H
+#define RTL_HASH_H 1
+
+
+namespace inchash
+{
+
+extern void add_rtx (const_rtx, hash &);
+
+}
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtlhooks-def.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtlhooks-def.h
new file mode 100644
index 0000000..4e3bb7e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtlhooks-def.h
@@ -0,0 +1,48 @@
+/* Default macros to initialize an rtl_hooks data structure.
+   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_RTL_HOOKS_DEF_H
+#define GCC_RTL_HOOKS_DEF_H
+
+#include "rtl.h"
+
+#define RTL_HOOKS_GEN_LOWPART gen_lowpart_general
+#define RTL_HOOKS_GEN_LOWPART_NO_EMIT gen_lowpart_if_possible
+#define RTL_HOOKS_REG_NONZERO_REG_BITS reg_nonzero_bits_general
+#define RTL_HOOKS_REG_NUM_SIGN_BIT_COPIES reg_num_sign_bit_copies_general
+#define RTL_HOOKS_REG_TRUNCATED_TO_MODE reg_truncated_to_mode_general
+
+/* The structure is defined in rtl.h.  */
+#define RTL_HOOKS_INITIALIZER {			\
+  RTL_HOOKS_GEN_LOWPART,			\
+  RTL_HOOKS_GEN_LOWPART_NO_EMIT,		\
+  RTL_HOOKS_REG_NONZERO_REG_BITS,		\
+  RTL_HOOKS_REG_NUM_SIGN_BIT_COPIES,		\
+  RTL_HOOKS_REG_TRUNCATED_TO_MODE		\
+}
+
+extern rtx gen_lowpart_general (machine_mode, rtx);
+extern rtx reg_nonzero_bits_general (const_rtx, scalar_int_mode,
+				     scalar_int_mode,
+				     unsigned HOST_WIDE_INT *);
+extern rtx reg_num_sign_bit_copies_general (const_rtx, scalar_int_mode,
+					    scalar_int_mode, unsigned int *);
+extern bool reg_truncated_to_mode_general (machine_mode, const_rtx);
+
+#endif /* GCC_RTL_HOOKS_DEF_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtx-vector-builder.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtx-vector-builder.h
new file mode 100644
index 0000000..d5950e2
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/rtx-vector-builder.h
@@ -0,0 +1,115 @@
+/* A class for building vector rtx constants.
+   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_RTX_VECTOR_BUILDER_H
+#define GCC_RTX_VECTOR_BUILDER_H
+
+#include "vector-builder.h"
+
+/* This class is used to build VECTOR_CSTs from a sequence of elements.
+   See vector_builder for more details.  */
+class rtx_vector_builder : public vector_builder<rtx, rtx_vector_builder>
+{
+  typedef vector_builder<rtx, rtx_vector_builder> parent;
+  friend class vector_builder<rtx, rtx_vector_builder>;
+
+public:
+  rtx_vector_builder () : m_mode (VOIDmode) {}
+  rtx_vector_builder (machine_mode, unsigned int, unsigned int);
+  rtx build (rtvec);
+  rtx build ();
+
+  machine_mode mode () const { return m_mode; }
+
+  void new_vector (machine_mode, unsigned int, unsigned int);
+
+private:
+  bool equal_p (rtx, rtx) const;
+  bool allow_steps_p () const;
+  bool integral_p (rtx) const;
+  wide_int step (rtx, rtx) const;
+  rtx apply_step (rtx, unsigned int, const wide_int &) const;
+  bool can_elide_p (rtx) const { return true; }
+  void note_representative (rtx *, rtx) {}
+
+  rtx find_cached_value ();
+
+  machine_mode m_mode;
+};
+
+/* Create a new builder for a vector of mode MODE.  Initially encode the
+   value as NPATTERNS interleaved patterns with NELTS_PER_PATTERN elements
+   each.  */
+
+inline
+rtx_vector_builder::rtx_vector_builder (machine_mode mode,
+					unsigned int npatterns,
+					unsigned int nelts_per_pattern)
+{
+  new_vector (mode, npatterns, nelts_per_pattern);
+}
+
+/* Start building a new vector of mode MODE.  Initially encode the value
+   as NPATTERNS interleaved patterns with NELTS_PER_PATTERN elements each.  */
+
+inline void
+rtx_vector_builder::new_vector (machine_mode mode, unsigned int npatterns,
+				unsigned int nelts_per_pattern)
+{
+  m_mode = mode;
+  parent::new_vector (GET_MODE_NUNITS (mode), npatterns, nelts_per_pattern);
+}
+
+/* Return true if elements ELT1 and ELT2 are equal.  */
+
+inline bool
+rtx_vector_builder::equal_p (rtx elt1, rtx elt2) const
+{
+  return rtx_equal_p (elt1, elt2);
+}
+
+/* Return true if a stepped representation is OK.  We don't allow
+   linear series for anything other than integers, to avoid problems
+   with rounding.  */
+
+inline bool
+rtx_vector_builder::allow_steps_p () const
+{
+  return is_a <scalar_int_mode> (GET_MODE_INNER (m_mode));
+}
+
+/* Return true if element ELT can be interpreted as an integer.  */
+
+inline bool
+rtx_vector_builder::integral_p (rtx elt) const
+{
+  return CONST_SCALAR_INT_P (elt);
+}
+
+/* Return the value of element ELT2 minus the value of element ELT1.
+   Both elements are known to be CONST_SCALAR_INT_Ps.  */
+
+inline wide_int
+rtx_vector_builder::step (rtx elt1, rtx elt2) const
+{
+  return wi::sub (rtx_mode_t (elt2, GET_MODE_INNER (m_mode)),
+		  rtx_mode_t (elt1, GET_MODE_INNER (m_mode)));
+}
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/run-rtl-passes.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/run-rtl-passes.h
new file mode 100644
index 0000000..b38196d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/run-rtl-passes.h
@@ -0,0 +1,25 @@
+/* run-rtl-passes.h - Run a subset of the RTL passes
+   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_RUN_RTL_PASSES_H
+#define GCC_RUN_RTL_PASSES_H
+
+extern void run_rtl_passes (char *initial_pass_name);
+
+#endif /* GCC_RUN_RTL_PASSES_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/safe-ctype.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/safe-ctype.h
new file mode 100644
index 0000000..b6d585c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/safe-ctype.h
@@ -0,0 +1,150 @@
+/* <ctype.h> replacement macros.
+
+   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Contributed by Zack Weinberg <zackw@stanford.edu>.
+
+This file is part of the libiberty library.
+Libiberty is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+Libiberty is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with libiberty; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+Boston, MA 02110-1301, USA.  */
+
+/* This is a compatible replacement of the standard C library's <ctype.h>
+   with the following properties:
+
+   - Implements all isxxx() macros required by C99.
+   - Also implements some character classes useful when
+     parsing C-like languages.
+   - Does not change behavior depending on the current locale.
+   - Behaves properly for all values in the range of a signed or
+     unsigned char.
+
+   To avoid conflicts, this header defines the isxxx functions in upper
+   case, e.g. ISALPHA not isalpha.  */
+
+#ifndef SAFE_CTYPE_H
+#define SAFE_CTYPE_H
+
+/* Determine host character set.  */
+#define HOST_CHARSET_UNKNOWN 0
+#define HOST_CHARSET_ASCII   1
+#define HOST_CHARSET_EBCDIC  2
+
+#if  '\n' == 0x0A && ' ' == 0x20 && '0' == 0x30 \
+   && 'A' == 0x41 && 'a' == 0x61 && '!' == 0x21
+#  define HOST_CHARSET HOST_CHARSET_ASCII
+#else
+# if '\n' == 0x15 && ' ' == 0x40 && '0' == 0xF0 \
+   && 'A' == 0xC1 && 'a' == 0x81 && '!' == 0x5A
+#  define HOST_CHARSET HOST_CHARSET_EBCDIC
+# else
+#  define HOST_CHARSET HOST_CHARSET_UNKNOWN
+# endif
+#endif
+
+/* Categories.  */
+
+enum {
+  /* In C99 */
+  _sch_isblank  = 0x0001,	/* space \t */
+  _sch_iscntrl  = 0x0002,	/* nonprinting characters */
+  _sch_isdigit  = 0x0004,	/* 0-9 */
+  _sch_islower  = 0x0008,	/* a-z */
+  _sch_isprint  = 0x0010,	/* any printing character including ' ' */
+  _sch_ispunct  = 0x0020,	/* all punctuation */
+  _sch_isspace  = 0x0040,	/* space \t \n \r \f \v */
+  _sch_isupper  = 0x0080,	/* A-Z */
+  _sch_isxdigit = 0x0100,	/* 0-9A-Fa-f */
+
+  /* Extra categories useful to cpplib.  */
+  _sch_isidst	= 0x0200,	/* A-Za-z_ */
+  _sch_isvsp    = 0x0400,	/* \n \r */
+  _sch_isnvsp   = 0x0800,	/* space \t \f \v \0 */
+
+  /* Combinations of the above.  */
+  _sch_isalpha  = _sch_isupper|_sch_islower,	/* A-Za-z */
+  _sch_isalnum  = _sch_isalpha|_sch_isdigit,	/* A-Za-z0-9 */
+  _sch_isidnum  = _sch_isidst|_sch_isdigit,	/* A-Za-z0-9_ */
+  _sch_isgraph  = _sch_isalnum|_sch_ispunct,	/* isprint and not space */
+  _sch_iscppsp  = _sch_isvsp|_sch_isnvsp,	/* isspace + \0 */
+  _sch_isbasic  = _sch_isprint|_sch_iscppsp     /* basic charset of ISO C
+						   (plus ` and @)  */
+};
+
+/* Character classification.  */
+extern const unsigned short _sch_istable[256];
+
+#define _sch_test(c, bit) (_sch_istable[(c) & 0xff] & (unsigned short)(bit))
+
+#define ISALPHA(c)  _sch_test(c, _sch_isalpha)
+#define ISALNUM(c)  _sch_test(c, _sch_isalnum)
+#define ISBLANK(c)  _sch_test(c, _sch_isblank)
+#define ISCNTRL(c)  _sch_test(c, _sch_iscntrl)
+#define ISDIGIT(c)  _sch_test(c, _sch_isdigit)
+#define ISGRAPH(c)  _sch_test(c, _sch_isgraph)
+#define ISLOWER(c)  _sch_test(c, _sch_islower)
+#define ISPRINT(c)  _sch_test(c, _sch_isprint)
+#define ISPUNCT(c)  _sch_test(c, _sch_ispunct)
+#define ISSPACE(c)  _sch_test(c, _sch_isspace)
+#define ISUPPER(c)  _sch_test(c, _sch_isupper)
+#define ISXDIGIT(c) _sch_test(c, _sch_isxdigit)
+
+#define ISIDNUM(c)	_sch_test(c, _sch_isidnum)
+#define ISIDST(c)	_sch_test(c, _sch_isidst)
+#define IS_ISOBASIC(c)	_sch_test(c, _sch_isbasic)
+#define IS_VSPACE(c)	_sch_test(c, _sch_isvsp)
+#define IS_NVSPACE(c)	_sch_test(c, _sch_isnvsp)
+#define IS_SPACE_OR_NUL(c)	_sch_test(c, _sch_iscppsp)
+
+/* Character transformation.  */
+extern const unsigned char  _sch_toupper[256];
+extern const unsigned char  _sch_tolower[256];
+#define TOUPPER(c) _sch_toupper[(c) & 0xff]
+#define TOLOWER(c) _sch_tolower[(c) & 0xff]
+
+/* Prevent the users of safe-ctype.h from accidently using the routines
+   from ctype.h.  Initially, the approach was to produce an error when
+   detecting that ctype.h has been included.  But this was causing
+   trouble as ctype.h might get indirectly included as a result of
+   including another system header (for instance gnulib's stdint.h).
+   So we include ctype.h here and then immediately redefine its macros.  */
+
+#include <ctype.h>
+#undef isalpha
+#define isalpha(c) do_not_use_isalpha_with_safe_ctype
+#undef isalnum
+#define isalnum(c) do_not_use_isalnum_with_safe_ctype
+#undef iscntrl
+#define iscntrl(c) do_not_use_iscntrl_with_safe_ctype
+#undef isdigit
+#define isdigit(c) do_not_use_isdigit_with_safe_ctype
+#undef isgraph
+#define isgraph(c) do_not_use_isgraph_with_safe_ctype
+#undef islower
+#define islower(c) do_not_use_islower_with_safe_ctype
+#undef isprint
+#define isprint(c) do_not_use_isprint_with_safe_ctype
+#undef ispunct
+#define ispunct(c) do_not_use_ispunct_with_safe_ctype
+#undef isspace
+#define isspace(c) do_not_use_isspace_with_safe_ctype
+#undef isupper
+#define isupper(c) do_not_use_isupper_with_safe_ctype
+#undef isxdigit
+#define isxdigit(c) do_not_use_isxdigit_with_safe_ctype
+#undef toupper
+#define toupper(c) do_not_use_toupper_with_safe_ctype
+#undef tolower
+#define tolower(c) do_not_use_tolower_with_safe_ctype
+
+#endif /* SAFE_CTYPE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/sanitizer.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sanitizer.def
new file mode 100644
index 0000000..374d150
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sanitizer.def
@@ -0,0 +1,587 @@
+/* This file contains the definitions and documentation for the
+   Address Sanitizer and Thread Sanitizer builtins used in the GNU compiler.
+   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Before including this file, you should define a macro:
+
+     DEF_BUILTIN_STUB(ENUM, NAME)
+     DEF_SANITIZER_BUILTIN (ENUM, NAME, TYPE, ATTRS)
+
+   See builtins.def for details.
+   The builtins are created by the C-family of FEs in c-family/c-common.c,
+   for other FEs by asan.c.  */
+
+/* This has to come before all the sanitizer builtins.  */
+DEF_BUILTIN_STUB(BEGIN_SANITIZER_BUILTINS, (const char *)0)
+
+/* Address Sanitizer */
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_INIT, "__asan_init",
+		      BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_VERSION_MISMATCH_CHECK,
+		      "__asan_version_mismatch_check_v8",
+		      BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+/* Do not reorder the BUILT_IN_ASAN_{REPORT,CHECK}* builtins, e.g. cfgcleanup.c
+   relies on this order.  */
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD1, "__asan_report_load1",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD2, "__asan_report_load2",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD4, "__asan_report_load4",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD8, "__asan_report_load8",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD16, "__asan_report_load16",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD_N, "__asan_report_load_n",
+		      BT_FN_VOID_PTR_PTRMODE,
+		      ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE1, "__asan_report_store1",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE2, "__asan_report_store2",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE4, "__asan_report_store4",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE8, "__asan_report_store8",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE16, "__asan_report_store16",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE_N, "__asan_report_store_n",
+		      BT_FN_VOID_PTR_PTRMODE,
+		      ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD1_NOABORT,
+		      "__asan_report_load1_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD2_NOABORT,
+		      "__asan_report_load2_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD4_NOABORT,
+		      "__asan_report_load4_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD8_NOABORT,
+		      "__asan_report_load8_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD16_NOABORT,
+		      "__asan_report_load16_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_LOAD_N_NOABORT,
+		      "__asan_report_load_n_noabort",
+		      BT_FN_VOID_PTR_PTRMODE,
+		      ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE1_NOABORT,
+		      "__asan_report_store1_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE2_NOABORT,
+		      "__asan_report_store2_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE4_NOABORT,
+		      "__asan_report_store4_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE8_NOABORT,
+		      "__asan_report_store8_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE16_NOABORT,
+		      "__asan_report_store16_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REPORT_STORE_N_NOABORT,
+		      "__asan_report_store_n_noabort",
+		      BT_FN_VOID_PTR_PTRMODE,
+		      ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD1, "__asan_load1",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD2, "__asan_load2",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD4, "__asan_load4",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD8, "__asan_load8",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD16, "__asan_load16",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOADN, "__asan_loadN",
+		      BT_FN_VOID_PTR_PTRMODE, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE1, "__asan_store1",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE2, "__asan_store2",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE4, "__asan_store4",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE8, "__asan_store8",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE16, "__asan_store16",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STOREN, "__asan_storeN",
+		      BT_FN_VOID_PTR_PTRMODE, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD1_NOABORT, "__asan_load1_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD2_NOABORT, "__asan_load2_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD4_NOABORT, "__asan_load4_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD8_NOABORT, "__asan_load8_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOAD16_NOABORT, "__asan_load16_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_LOADN_NOABORT, "__asan_loadN_noabort",
+		      BT_FN_VOID_PTR_PTRMODE, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE1_NOABORT, "__asan_store1_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE2_NOABORT, "__asan_store2_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE4_NOABORT, "__asan_store4_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE8_NOABORT, "__asan_store8_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STORE16_NOABORT, "__asan_store16_noabort",
+		      BT_FN_VOID_PTR, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_STOREN_NOABORT, "__asan_storeN_noabort",
+		      BT_FN_VOID_PTR_PTRMODE, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REGISTER_GLOBALS,
+		      "__asan_register_globals",
+		      BT_FN_VOID_PTR_PTRMODE, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_UNREGISTER_GLOBALS,
+		      "__asan_unregister_globals",
+		      BT_FN_VOID_PTR_PTRMODE, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_HANDLE_NO_RETURN,
+		      "__asan_handle_no_return",
+		      BT_FN_VOID, ATTR_TMPURE_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_BEFORE_DYNAMIC_INIT,
+		      "__asan_before_dynamic_init",
+		      BT_FN_VOID_CONST_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_AFTER_DYNAMIC_INIT,
+		      "__asan_after_dynamic_init",
+		      BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_POISON_STACK_MEMORY,
+		      "__asan_poison_stack_memory",
+		      BT_FN_VOID_PTR_PTRMODE, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_UNPOISON_STACK_MEMORY,
+		      "__asan_unpoison_stack_memory",
+		      BT_FN_VOID_PTR_PTRMODE, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_ALLOCA_POISON, "__asan_alloca_poison",
+		      BT_FN_VOID_PTR_PTRMODE, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_ALLOCAS_UNPOISON, "__asan_allocas_unpoison",
+		      BT_FN_VOID_PTR_PTRMODE, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_POINTER_COMPARE, "__sanitizer_ptr_cmp",
+		      BT_FN_VOID_PTR_PTRMODE, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_POINTER_SUBTRACT, "__sanitizer_ptr_sub",
+		      BT_FN_VOID_PTR_PTRMODE, ATTR_NOTHROW_LEAF_LIST)
+
+/* Thread Sanitizer */
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_INIT, "__tsan_init", 
+		      BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_FUNC_ENTRY, "__tsan_func_entry",
+		      BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_FUNC_EXIT, "__tsan_func_exit",
+		      BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_VPTR_UPDATE, "__tsan_vptr_update",
+		      BT_FN_VOID_PTR_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ1, "__tsan_read1",
+		      BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ2, "__tsan_read2",
+		      BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ4, "__tsan_read4",
+		      BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ8, "__tsan_read8",
+		      BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ16, "__tsan_read16",
+		      BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE1, "__tsan_write1",
+		      BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE2, "__tsan_write2",
+		      BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE4, "__tsan_write4",
+		      BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE8, "__tsan_write8",
+		      BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE16, "__tsan_write16",
+		      BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_READ_RANGE, "__tsan_read_range",
+		      BT_FN_VOID_PTR_PTRMODE, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_WRITE_RANGE, "__tsan_write_range",
+		      BT_FN_VOID_PTR_PTRMODE, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_LOAD,
+		      "__tsan_atomic8_load",
+		      BT_FN_I1_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_LOAD,
+		      "__tsan_atomic16_load",
+		      BT_FN_I2_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_LOAD,
+		      "__tsan_atomic32_load",
+		      BT_FN_I4_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_LOAD,
+		      "__tsan_atomic64_load",
+		      BT_FN_I8_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_LOAD,
+		      "__tsan_atomic128_load",
+		      BT_FN_I16_CONST_VPTR_INT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_STORE,
+		      "__tsan_atomic8_store",
+		      BT_FN_VOID_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_STORE,
+		      "__tsan_atomic16_store",
+		      BT_FN_VOID_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_STORE,
+		      "__tsan_atomic32_store",
+		      BT_FN_VOID_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_STORE,
+		      "__tsan_atomic64_store",
+		      BT_FN_VOID_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_STORE,
+		      "__tsan_atomic128_store",
+		      BT_FN_VOID_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_EXCHANGE,
+		      "__tsan_atomic8_exchange",
+		      BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_EXCHANGE,
+		      "__tsan_atomic16_exchange",
+		      BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_EXCHANGE,
+		      "__tsan_atomic32_exchange",
+		      BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_EXCHANGE,
+		      "__tsan_atomic64_exchange",
+		      BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_EXCHANGE,
+		      "__tsan_atomic128_exchange",
+		      BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_ADD,
+		      "__tsan_atomic8_fetch_add",
+		      BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_ADD,
+		      "__tsan_atomic16_fetch_add",
+		      BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_ADD,
+		      "__tsan_atomic32_fetch_add",
+		      BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_ADD,
+		      "__tsan_atomic64_fetch_add",
+		      BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_ADD,
+		      "__tsan_atomic128_fetch_add",
+		      BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_SUB,
+		      "__tsan_atomic8_fetch_sub",
+		      BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_SUB,
+		      "__tsan_atomic16_fetch_sub",
+		      BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_SUB,
+		      "__tsan_atomic32_fetch_sub",
+		      BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_SUB,
+		      "__tsan_atomic64_fetch_sub",
+		      BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_SUB,
+		      "__tsan_atomic128_fetch_sub",
+		      BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_AND,
+		      "__tsan_atomic8_fetch_and",
+		      BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_AND,
+		      "__tsan_atomic16_fetch_and",
+		      BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_AND,
+		      "__tsan_atomic32_fetch_and",
+		      BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_AND,
+		      "__tsan_atomic64_fetch_and",
+		      BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_AND,
+		      "__tsan_atomic128_fetch_and",
+		      BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_OR,
+		      "__tsan_atomic8_fetch_or",
+		      BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_OR,
+		      "__tsan_atomic16_fetch_or",
+		      BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_OR,
+		      "__tsan_atomic32_fetch_or",
+		      BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_OR,
+		      "__tsan_atomic64_fetch_or",
+		      BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_OR,
+		      "__tsan_atomic128_fetch_or",
+		      BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_XOR,
+		      "__tsan_atomic8_fetch_xor",
+		      BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_XOR,
+		      "__tsan_atomic16_fetch_xor",
+		      BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_XOR,
+		      "__tsan_atomic32_fetch_xor",
+		      BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_XOR,
+		      "__tsan_atomic64_fetch_xor",
+		      BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_XOR,
+		      "__tsan_atomic128_fetch_xor",
+		      BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_FETCH_NAND,
+		      "__tsan_atomic8_fetch_nand",
+		      BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_FETCH_NAND,
+		      "__tsan_atomic16_fetch_nand",
+		      BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_FETCH_NAND,
+		      "__tsan_atomic32_fetch_nand",
+		      BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_FETCH_NAND,
+		      "__tsan_atomic64_fetch_nand",
+		      BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_FETCH_NAND,
+		      "__tsan_atomic128_fetch_nand",
+		      BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_COMPARE_EXCHANGE_STRONG,
+		      "__tsan_atomic8_compare_exchange_strong",
+		      BT_FN_BOOL_VPTR_PTR_I1_INT_INT,
+		      ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_COMPARE_EXCHANGE_STRONG,
+		      "__tsan_atomic16_compare_exchange_strong",
+		      BT_FN_BOOL_VPTR_PTR_I2_INT_INT,
+		      ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_COMPARE_EXCHANGE_STRONG,
+		      "__tsan_atomic32_compare_exchange_strong",
+		      BT_FN_BOOL_VPTR_PTR_I4_INT_INT,
+		      ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_COMPARE_EXCHANGE_STRONG,
+		      "__tsan_atomic64_compare_exchange_strong",
+		      BT_FN_BOOL_VPTR_PTR_I8_INT_INT,
+		      ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_COMPARE_EXCHANGE_STRONG,
+		      "__tsan_atomic128_compare_exchange_strong",
+		      BT_FN_BOOL_VPTR_PTR_I16_INT_INT,
+		      ATTR_NOTHROW_LEAF_LIST)
+
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC8_COMPARE_EXCHANGE_WEAK,
+		      "__tsan_atomic8_compare_exchange_weak",
+		      BT_FN_BOOL_VPTR_PTR_I1_INT_INT,
+		      ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC16_COMPARE_EXCHANGE_WEAK,
+		      "__tsan_atomic16_compare_exchange_weak",
+		      BT_FN_BOOL_VPTR_PTR_I2_INT_INT,
+		      ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC32_COMPARE_EXCHANGE_WEAK,
+		      "__tsan_atomic32_compare_exchange_weak",
+		      BT_FN_BOOL_VPTR_PTR_I4_INT_INT,
+		      ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC64_COMPARE_EXCHANGE_WEAK,
+		      "__tsan_atomic64_compare_exchange_weak",
+		      BT_FN_BOOL_VPTR_PTR_I8_INT_INT,
+		      ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC128_COMPARE_EXCHANGE_WEAK,
+		      "__tsan_atomic128_compare_exchange_weak",
+		      BT_FN_BOOL_VPTR_PTR_I16_INT_INT,
+		      ATTR_NOTHROW_LEAF_LIST)
+
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC_THREAD_FENCE,
+		      "__tsan_atomic_thread_fence",
+		      BT_FN_VOID_INT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_ATOMIC_SIGNAL_FENCE,
+		      "__tsan_atomic_signal_fence",
+		      BT_FN_VOID_INT, ATTR_NOTHROW_LEAF_LIST)
+
+/* Undefined Behavior Sanitizer */
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_DIVREM_OVERFLOW,
+		      "__ubsan_handle_divrem_overflow",
+		      BT_FN_VOID_PTR_PTR_PTR,
+		      ATTR_COLD_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_SHIFT_OUT_OF_BOUNDS,
+		      "__ubsan_handle_shift_out_of_bounds",
+		      BT_FN_VOID_PTR_PTR_PTR,
+		      ATTR_COLD_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_BUILTIN_UNREACHABLE,
+		      "__ubsan_handle_builtin_unreachable",
+		      BT_FN_VOID_PTR,
+		      ATTR_COLD_CONST_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_MISSING_RETURN,
+		      "__ubsan_handle_missing_return",
+		      BT_FN_VOID_PTR,
+		      ATTR_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_VLA_BOUND_NOT_POSITIVE,
+		      "__ubsan_handle_vla_bound_not_positive",
+		      BT_FN_VOID_PTR_PTR,
+		      ATTR_COLD_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_TYPE_MISMATCH_V1,
+		      "__ubsan_handle_type_mismatch_v1",
+		      BT_FN_VOID_PTR_PTR,
+		      ATTR_COLD_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_ADD_OVERFLOW,
+		      "__ubsan_handle_add_overflow",
+		      BT_FN_VOID_PTR_PTR_PTR,
+		      ATTR_COLD_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_SUB_OVERFLOW,
+		      "__ubsan_handle_sub_overflow",
+		      BT_FN_VOID_PTR_PTR_PTR,
+		      ATTR_COLD_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_MUL_OVERFLOW,
+		      "__ubsan_handle_mul_overflow",
+		      BT_FN_VOID_PTR_PTR_PTR,
+		      ATTR_COLD_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_NEGATE_OVERFLOW,
+		      "__ubsan_handle_negate_overflow",
+		      BT_FN_VOID_PTR_PTR,
+		      ATTR_COLD_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_LOAD_INVALID_VALUE,
+		      "__ubsan_handle_load_invalid_value",
+		      BT_FN_VOID_PTR_PTR,
+		      ATTR_COLD_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_POINTER_OVERFLOW,
+		      "__ubsan_handle_pointer_overflow",
+		      BT_FN_VOID_PTR_PTR_PTR,
+		      ATTR_COLD_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_DIVREM_OVERFLOW_ABORT,
+		      "__ubsan_handle_divrem_overflow_abort",
+		      BT_FN_VOID_PTR_PTR_PTR,
+		      ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_SHIFT_OUT_OF_BOUNDS_ABORT,
+		      "__ubsan_handle_shift_out_of_bounds_abort",
+		      BT_FN_VOID_PTR_PTR_PTR,
+		      ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_VLA_BOUND_NOT_POSITIVE_ABORT,
+		      "__ubsan_handle_vla_bound_not_positive_abort",
+		      BT_FN_VOID_PTR_PTR,
+		      ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_TYPE_MISMATCH_V1_ABORT,
+		      "__ubsan_handle_type_mismatch_v1_abort",
+		      BT_FN_VOID_PTR_PTR,
+		      ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_ADD_OVERFLOW_ABORT,
+		      "__ubsan_handle_add_overflow_abort",
+		      BT_FN_VOID_PTR_PTR_PTR,
+		      ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_SUB_OVERFLOW_ABORT,
+		      "__ubsan_handle_sub_overflow_abort",
+		      BT_FN_VOID_PTR_PTR_PTR,
+		      ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_MUL_OVERFLOW_ABORT,
+		      "__ubsan_handle_mul_overflow_abort",
+		      BT_FN_VOID_PTR_PTR_PTR,
+		      ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_NEGATE_OVERFLOW_ABORT,
+		      "__ubsan_handle_negate_overflow_abort",
+		      BT_FN_VOID_PTR_PTR,
+		      ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_LOAD_INVALID_VALUE_ABORT,
+		      "__ubsan_handle_load_invalid_value_abort",
+		      BT_FN_VOID_PTR_PTR,
+		      ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_POINTER_OVERFLOW_ABORT,
+		      "__ubsan_handle_pointer_overflow_abort",
+		      BT_FN_VOID_PTR_PTR_PTR,
+		      ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_FLOAT_CAST_OVERFLOW,
+		      "__ubsan_handle_float_cast_overflow",
+		      BT_FN_VOID_PTR_PTR,
+		      ATTR_COLD_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_FLOAT_CAST_OVERFLOW_ABORT,
+		      "__ubsan_handle_float_cast_overflow_abort",
+		      BT_FN_VOID_PTR_PTR,
+		      ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_OUT_OF_BOUNDS,
+		      "__ubsan_handle_out_of_bounds",
+		      BT_FN_VOID_PTR_PTR,
+		      ATTR_COLD_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_OUT_OF_BOUNDS_ABORT,
+		      "__ubsan_handle_out_of_bounds_abort",
+		      BT_FN_VOID_PTR_PTR,
+		      ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_NONNULL_ARG,
+		      "__ubsan_handle_nonnull_arg",
+		      BT_FN_VOID_PTR,
+		      ATTR_COLD_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_NONNULL_ARG_ABORT,
+		      "__ubsan_handle_nonnull_arg_abort",
+		      BT_FN_VOID_PTR,
+		      ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_NONNULL_RETURN_V1,
+		      "__ubsan_handle_nonnull_return_v1",
+		      BT_FN_VOID_PTR_PTR,
+		      ATTR_COLD_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_NONNULL_RETURN_V1_ABORT,
+		      "__ubsan_handle_nonnull_return_v1_abort",
+		      BT_FN_VOID_PTR_PTR,
+		      ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_INVALID_BUILTIN,
+		      "__ubsan_handle_invalid_builtin",
+		      BT_FN_VOID_PTR,
+		      ATTR_COLD_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_INVALID_BUILTIN_ABORT,
+		      "__ubsan_handle_invalid_builtin_abort",
+		      BT_FN_VOID_PTR,
+		      ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_DYNAMIC_TYPE_CACHE_MISS,
+		      "__ubsan_handle_dynamic_type_cache_miss",
+		      BT_FN_VOID_PTR_PTR_PTR,
+		      ATTR_COLD_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_DYNAMIC_TYPE_CACHE_MISS_ABORT,
+		      "__ubsan_handle_dynamic_type_cache_miss_abort",
+		      BT_FN_VOID_PTR_PTR_PTR,
+		      ATTR_COLD_NOTHROW_LEAF_LIST)
+
+/* Sanitizer coverage */
+DEF_SANITIZER_BUILTIN(BUILT_IN_SANITIZER_COV_TRACE_PC,
+		      "__sanitizer_cov_trace_pc",
+		      BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_SANITIZER_COV_TRACE_CMP1,
+		      "__sanitizer_cov_trace_cmp1",
+		      BT_FN_VOID_UINT8_UINT8, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_SANITIZER_COV_TRACE_CMP2,
+		      "__sanitizer_cov_trace_cmp2",
+		      BT_FN_VOID_UINT16_UINT16, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_SANITIZER_COV_TRACE_CMP4,
+		      "__sanitizer_cov_trace_cmp4",
+		      BT_FN_VOID_UINT32_UINT32, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_SANITIZER_COV_TRACE_CMP8,
+		      "__sanitizer_cov_trace_cmp8",
+		      BT_FN_VOID_UINT64_UINT64, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_SANITIZER_COV_TRACE_CONST_CMP1,
+		      "__sanitizer_cov_trace_const_cmp1",
+		      BT_FN_VOID_UINT8_UINT8, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_SANITIZER_COV_TRACE_CONST_CMP2,
+		      "__sanitizer_cov_trace_const_cmp2",
+		      BT_FN_VOID_UINT16_UINT16, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_SANITIZER_COV_TRACE_CONST_CMP4,
+		      "__sanitizer_cov_trace_const_cmp4",
+		      BT_FN_VOID_UINT32_UINT32, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_SANITIZER_COV_TRACE_CONST_CMP8,
+		      "__sanitizer_cov_trace_const_cmp8",
+		      BT_FN_VOID_UINT64_UINT64, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_SANITIZER_COV_TRACE_CMPF,
+		      "__sanitizer_cov_trace_cmpf",
+		      BT_FN_VOID_FLOAT_FLOAT, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_SANITIZER_COV_TRACE_CMPD,
+		      "__sanitizer_cov_trace_cmpd",
+		      BT_FN_VOID_DOUBLE_DOUBLE, ATTR_NOTHROW_LEAF_LIST)
+DEF_SANITIZER_BUILTIN(BUILT_IN_SANITIZER_COV_TRACE_SWITCH,
+		      "__sanitizer_cov_trace_switch",
+		      BT_FN_VOID_UINT64_PTR, ATTR_NOTHROW_LEAF_LIST)
+
+/* This has to come after all the sanitizer builtins.  */
+DEF_BUILTIN_STUB(END_SANITIZER_BUILTINS, (const char *)0)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/sbitmap.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sbitmap.h
new file mode 100644
index 0000000..a33175d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sbitmap.h
@@ -0,0 +1,312 @@
+/* Simple bitmaps.
+   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SBITMAP_H
+#define GCC_SBITMAP_H
+
+/* Implementation of sets using simple bitmap vectors.
+
+   This set representation is suitable for non-sparse sets with a known
+   (a priori) universe.  The set is represented as a simple array of the
+   host's fastest unsigned integer.  For a given member I in the set:
+     - the element for I will be at sbitmap[I / (bits per element)]
+     - the position for I within element is I % (bits per element)
+
+   This representation is very space-efficient for large non-sparse sets
+   with random access patterns.
+
+   The following operations can be performed in O(1) time:
+
+     * set_size			: SBITMAP_SIZE
+     * member_p			: bitmap_bit_p
+     * add_member		: bitmap_set_bit
+     * remove_member		: bitmap_clear_bit
+
+   Most other operations on this set representation are O(U) where U is
+   the size of the set universe:
+
+     * clear			: bitmap_clear
+     * choose_one		: bitmap_first_set_bit /
+				  bitmap_last_set_bit
+     * forall			: EXECUTE_IF_SET_IN_BITMAP
+     * set_copy			: bitmap_copy
+     * set_intersection		: bitmap_and
+     * set_union		: bitmap_ior
+     * set_difference		: bitmap_and_compl
+     * set_disjuction		: (not implemented)
+     * set_compare		: bitmap_equal_p
+     * bit_in_range_p		: bitmap_bit_in_range_p
+
+   Some operations on 3 sets that occur frequently in data flow problems
+   are also implemented:
+
+      * A | (B & C)		: bitmap_or_and
+      * A | (B & ~C)		: bitmap_ior_and_compl
+      * A & (B | C)		: bitmap_and_or
+
+   Most of the set functions have two variants: One that returns non-zero
+   if members were added or removed from the target set, and one that just
+   performs the operation without feedback.  The former operations are a
+   bit more expensive but the result can often be used to avoid iterations
+   on other sets.
+
+   Allocating a bitmap is done with sbitmap_alloc, and resizing is
+   performed with sbitmap_resize.
+
+   The storage requirements for simple bitmap sets is O(U) where U is the
+   size of the set universe (colloquially the number of bits in the bitmap).
+
+   This set representation works well for relatively small data flow problems
+   (there are special routines for that, see sbitmap_vector_*).  The set
+   operations can be vectorized and there is almost no computating overhead,
+   so that even sparse simple bitmap sets outperform dedicated sparse set
+   representations like linked-list bitmaps.  For larger problems, the size
+   overhead of simple bitmap sets gets too high and other set representations
+   have to be used.  */
+
+#define SBITMAP_ELT_BITS (HOST_BITS_PER_WIDEST_FAST_INT * 1u)
+#define SBITMAP_ELT_TYPE unsigned HOST_WIDEST_FAST_INT
+
+struct simple_bitmap_def
+{
+  unsigned int n_bits;		/* Number of bits.  */
+  unsigned int size;		/* Size in elements.  */
+  SBITMAP_ELT_TYPE elms[1];	/* The elements.  */
+};
+
+/* Return the set size needed for N elements.  */
+#define SBITMAP_SET_SIZE(N) (((N) + SBITMAP_ELT_BITS - 1) / SBITMAP_ELT_BITS)
+
+/* Return the number of bits in BITMAP.  */
+#define SBITMAP_SIZE(BITMAP) ((BITMAP)->n_bits)
+
+/* Verify that access at INDEX in bitmap MAP is valid.  */ 
+
+static inline void
+bitmap_check_index (const_sbitmap map, int index)
+{
+  gcc_checking_assert (index >= 0);
+  gcc_checking_assert ((unsigned int)index < map->n_bits);
+}
+
+/* Verify that bitmaps A and B have same size.  */ 
+
+static inline void
+bitmap_check_sizes (const_sbitmap a, const_sbitmap b)
+{
+  gcc_checking_assert (a->n_bits == b->n_bits);
+}
+
+/* Test if bit number bitno in the bitmap is set.  */
+static inline SBITMAP_ELT_TYPE
+bitmap_bit_p (const_sbitmap map, int bitno)
+{
+  bitmap_check_index (map, bitno);
+
+  size_t i = bitno / SBITMAP_ELT_BITS;
+  unsigned int s = bitno % SBITMAP_ELT_BITS;
+  return (map->elms[i] >> s) & (SBITMAP_ELT_TYPE) 1;
+}
+
+/* Set bit number BITNO in the sbitmap MAP.  */
+
+static inline void
+bitmap_set_bit (sbitmap map, int bitno)
+{
+  bitmap_check_index (map, bitno);
+
+  map->elms[bitno / SBITMAP_ELT_BITS]
+    |= (SBITMAP_ELT_TYPE) 1 << (bitno) % SBITMAP_ELT_BITS;
+}
+
+/* Reset bit number BITNO in the sbitmap MAP.  */
+
+static inline void
+bitmap_clear_bit (sbitmap map, int bitno)
+{
+  bitmap_check_index (map, bitno);
+
+  map->elms[bitno / SBITMAP_ELT_BITS]
+    &= ~((SBITMAP_ELT_TYPE) 1 << (bitno) % SBITMAP_ELT_BITS);
+}
+
+/* The iterator for sbitmap.  */
+struct sbitmap_iterator {
+  /* The pointer to the first word of the bitmap.  */
+  const SBITMAP_ELT_TYPE *ptr;
+
+  /* The size of the bitmap.  */
+  unsigned int size;
+
+  /* The current word index.  */
+  unsigned int word_num;
+
+  /* The current bit index (not modulo SBITMAP_ELT_BITS).  */
+  unsigned int bit_num;
+
+  /* The words currently visited.  */
+  SBITMAP_ELT_TYPE word;
+};
+
+/* Initialize the iterator I with sbitmap BMP and the initial index
+   MIN.  */
+
+static inline void
+bmp_iter_set_init (sbitmap_iterator *i, const_sbitmap bmp,
+		   unsigned int min, unsigned *bit_no ATTRIBUTE_UNUSED)
+{
+  i->word_num = min / (unsigned int) SBITMAP_ELT_BITS;
+  i->bit_num = min;
+  i->size = bmp->size;
+  i->ptr = bmp->elms;
+
+  if (i->word_num >= i->size)
+    i->word = 0;
+  else
+    i->word = (i->ptr[i->word_num]
+	       >> (i->bit_num % (unsigned int) SBITMAP_ELT_BITS));
+}
+
+/* Return true if we have more bits to visit, in which case *N is set
+   to the index of the bit to be visited.  Otherwise, return
+   false.  */
+
+static inline bool
+bmp_iter_set (sbitmap_iterator *i, unsigned int *n)
+{
+  /* Skip words that are zeros.  */
+  for (; i->word == 0; i->word = i->ptr[i->word_num])
+    {
+      i->word_num++;
+
+      /* If we have reached the end, break.  */
+      if (i->word_num >= i->size)
+	return false;
+
+      i->bit_num = i->word_num * SBITMAP_ELT_BITS;
+    }
+
+  /* Skip bits that are zero.  */
+  for (; (i->word & 1) == 0; i->word >>= 1)
+    i->bit_num++;
+
+  *n = i->bit_num;
+
+  return true;
+}
+
+/* Advance to the next bit.  */
+
+static inline void
+bmp_iter_next (sbitmap_iterator *i, unsigned *bit_no ATTRIBUTE_UNUSED)
+{
+  i->word >>= 1;
+  i->bit_num++;
+}
+
+/* Loop over all elements of SBITMAP, starting with MIN.  In each
+   iteration, N is set to the index of the bit being visited.  ITER is
+   an instance of sbitmap_iterator used to iterate the bitmap.  */
+
+#ifndef EXECUTE_IF_SET_IN_BITMAP
+/* See bitmap.h for the other definition of EXECUTE_IF_SET_IN_BITMAP.  */
+#define EXECUTE_IF_SET_IN_BITMAP(BITMAP, MIN, BITNUM, ITER)	\
+  for (bmp_iter_set_init (&(ITER), (BITMAP), (MIN), &(BITNUM));	\
+       bmp_iter_set (&(ITER), &(BITNUM));			\
+       bmp_iter_next (&(ITER), &(BITNUM)))
+#endif
+
+inline void sbitmap_free (sbitmap map)
+{
+  free (map);
+}
+
+inline void sbitmap_vector_free (sbitmap * vec)
+{
+  free (vec);
+}
+
+extern void dump_bitmap (FILE *, const_sbitmap);
+extern void debug_raw (const simple_bitmap_def &ref);
+extern void debug_raw (const simple_bitmap_def *ptr);
+extern void dump_bitmap_file (FILE *, const_sbitmap);
+extern void debug (const simple_bitmap_def &ref);
+extern void debug (const simple_bitmap_def *ptr);
+extern void dump_bitmap_vector (FILE *, const char *, const char *, sbitmap *,
+				 int);
+extern sbitmap sbitmap_alloc (unsigned int);
+extern sbitmap *sbitmap_vector_alloc (unsigned int, unsigned int);
+extern sbitmap sbitmap_resize (sbitmap, unsigned int, int);
+extern void bitmap_copy (sbitmap, const_sbitmap);
+extern int bitmap_equal_p (const_sbitmap, const_sbitmap);
+extern unsigned int bitmap_count_bits (const_sbitmap);
+extern bool bitmap_empty_p (const_sbitmap);
+extern void bitmap_clear (sbitmap);
+extern void bitmap_clear_range (sbitmap, unsigned, unsigned);
+extern void bitmap_set_range (sbitmap, unsigned, unsigned);
+extern void bitmap_ones (sbitmap);
+extern void bitmap_vector_clear (sbitmap *, unsigned int);
+extern void bitmap_vector_ones (sbitmap *, unsigned int);
+
+extern bool bitmap_ior_and_compl (sbitmap, const_sbitmap,
+				      const_sbitmap, const_sbitmap);
+extern void bitmap_and_compl (sbitmap, const_sbitmap, const_sbitmap);
+extern void bitmap_not (sbitmap, const_sbitmap);
+extern bool bitmap_or_and (sbitmap, const_sbitmap,
+				     const_sbitmap, const_sbitmap);
+extern bool bitmap_and_or (sbitmap, const_sbitmap,
+				     const_sbitmap, const_sbitmap);
+extern bool bitmap_intersect_p (const_sbitmap, const_sbitmap);
+extern bool bitmap_and (sbitmap, const_sbitmap, const_sbitmap);
+extern bool bitmap_ior (sbitmap, const_sbitmap, const_sbitmap);
+extern bool bitmap_xor (sbitmap, const_sbitmap, const_sbitmap);
+extern bool bitmap_subset_p (const_sbitmap, const_sbitmap);
+extern bool bitmap_bit_in_range_p (const_sbitmap, unsigned int, unsigned int);
+
+extern int bitmap_first_set_bit (const_sbitmap);
+extern int bitmap_last_set_bit (const_sbitmap);
+
+extern void debug_bitmap (const_sbitmap);
+extern sbitmap sbitmap_realloc (sbitmap, unsigned int);
+
+/* a class that ties the lifetime of a sbitmap to its scope.  */
+class auto_sbitmap
+{
+public:
+  explicit auto_sbitmap (unsigned int size) :
+    m_bitmap (sbitmap_alloc (size)) {}
+  ~auto_sbitmap () { sbitmap_free (m_bitmap); }
+
+  /* Allow calling sbitmap functions on our bitmap.  */
+  operator sbitmap () { return m_bitmap; }
+
+private:
+  /* Prevent making a copy that refers to our sbitmap.  */
+  auto_sbitmap (const auto_sbitmap &);
+  auto_sbitmap &operator = (const auto_sbitmap &);
+#if __cplusplus >= 201103L
+  auto_sbitmap (auto_sbitmap &&);
+  auto_sbitmap &operator = (auto_sbitmap &&);
+#endif
+
+  /* The bitmap we are managing.  */
+  sbitmap m_bitmap;
+};
+
+#endif /* ! GCC_SBITMAP_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/sched-int.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sched-int.h
new file mode 100644
index 0000000..3ca5e26
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sched-int.h
@@ -0,0 +1,1684 @@
+/* Instruction scheduling pass.  This file contains definitions used
+   internally in the scheduler.
+   Copyright (C) 1992-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SCHED_INT_H
+#define GCC_SCHED_INT_H
+
+#ifdef INSN_SCHEDULING
+
+/* Identificator of a scheduler pass.  */
+enum sched_pass_id_t { SCHED_PASS_UNKNOWN, SCHED_RGN_PASS, SCHED_EBB_PASS,
+		       SCHED_SMS_PASS, SCHED_SEL_PASS };
+
+/* The algorithm used to implement -fsched-pressure.  */
+enum sched_pressure_algorithm
+{
+  SCHED_PRESSURE_NONE,
+  SCHED_PRESSURE_WEIGHTED,
+  SCHED_PRESSURE_MODEL
+};
+
+typedef vec<basic_block> bb_vec_t;
+typedef vec<rtx_insn *> insn_vec_t;
+typedef vec<rtx_insn *> rtx_vec_t;
+
+extern void sched_init_bbs (void);
+
+extern void sched_extend_luids (void);
+extern void sched_init_insn_luid (rtx_insn *);
+extern void sched_init_luids (bb_vec_t);
+extern void sched_finish_luids (void);
+
+extern void sched_extend_target (void);
+
+extern void haifa_init_h_i_d (bb_vec_t);
+extern void haifa_finish_h_i_d (void);
+
+/* Hooks that are common to all the schedulers.  */
+struct common_sched_info_def
+{
+  /* Called after blocks were rearranged due to movement of jump instruction.
+     The first parameter - index of basic block, in which jump currently is.
+     The second parameter - index of basic block, in which jump used
+     to be.
+     The third parameter - index of basic block, that follows the second
+     parameter.  */
+  void (*fix_recovery_cfg) (int, int, int);
+
+  /* Called to notify frontend, that new basic block is being added.
+     The first parameter - new basic block.
+     The second parameter - block, after which new basic block is being added,
+     or the exit block, if recovery block is being added,
+     or NULL, if standalone block is being added.  */
+  void (*add_block) (basic_block, basic_block);
+
+  /* Estimate number of insns in the basic block.  */
+  int (*estimate_number_of_insns) (basic_block);
+
+  /* Given a non-insn (!INSN_P (x)) return
+     -1 - if this rtx don't need a luid.
+     0 - if it should have the same luid as the previous insn.
+     1 - if it needs a separate luid.  */
+  int (*luid_for_non_insn) (rtx);
+
+  /* Scheduler pass identifier.  It is preferably used in assertions.  */
+  enum sched_pass_id_t sched_pass_id;
+};
+
+extern struct common_sched_info_def *common_sched_info;
+
+extern const struct common_sched_info_def haifa_common_sched_info;
+
+/* Return true if selective scheduling pass is working.  */
+static inline bool
+sel_sched_p (void)
+{
+  return common_sched_info->sched_pass_id == SCHED_SEL_PASS;
+}
+
+/* Returns maximum priority that an insn was assigned to.  */
+extern int get_rgn_sched_max_insns_priority (void);
+
+/* Increases effective priority for INSN by AMOUNT.  */
+extern void sel_add_to_insn_priority (rtx, int);
+
+/* True if during selective scheduling we need to emulate some of haifa
+   scheduler behavior.  */
+extern int sched_emulate_haifa_p;
+
+/* Mapping from INSN_UID to INSN_LUID.  In the end all other per insn data
+   structures should be indexed by luid.  */
+extern vec<int> sched_luids;
+#define INSN_LUID(INSN) (sched_luids[INSN_UID (INSN)])
+#define LUID_BY_UID(UID) (sched_luids[UID])
+
+#define SET_INSN_LUID(INSN, LUID) \
+(sched_luids[INSN_UID (INSN)] = (LUID))
+
+/* The highest INSN_LUID.  */
+extern int sched_max_luid;
+
+extern int insn_luid (rtx);
+
+/* This list holds ripped off notes from the current block.  These notes will
+   be attached to the beginning of the block when its scheduling is
+   finished.  */
+extern rtx_insn *note_list;
+
+extern void remove_notes (rtx_insn *, rtx_insn *);
+extern rtx_insn *restore_other_notes (rtx_insn *, basic_block);
+extern void sched_insns_init (rtx);
+extern void sched_insns_finish (void);
+
+extern void *xrecalloc (void *, size_t, size_t, size_t);
+
+extern void reemit_notes (rtx_insn *);
+
+/* Functions in haifa-sched.c.  */
+extern int haifa_classify_insn (const_rtx);
+
+/* Functions in sel-sched-ir.c.  */
+extern void sel_find_rgns (void);
+extern void sel_mark_hard_insn (rtx);
+
+extern size_t dfa_state_size;
+
+extern void advance_state (state_t);
+
+extern void setup_sched_dump (void);
+extern void sched_init (void);
+extern void sched_finish (void);
+
+extern bool sel_insn_is_speculation_check (rtx);
+
+/* Describe the ready list of the scheduler.
+   VEC holds space enough for all insns in the current region.  VECLEN
+   says how many exactly.
+   FIRST is the index of the element with the highest priority; i.e. the
+   last one in the ready list, since elements are ordered by ascending
+   priority.
+   N_READY determines how many insns are on the ready list.
+   N_DEBUG determines how many debug insns are on the ready list.  */
+struct ready_list
+{
+  rtx_insn **vec;
+  int veclen;
+  int first;
+  int n_ready;
+  int n_debug;
+};
+
+extern signed char *ready_try;
+extern struct ready_list ready;
+
+extern int max_issue (struct ready_list *, int, state_t, bool, int *);
+
+extern void ebb_compute_jump_reg_dependencies (rtx, regset);
+
+extern edge find_fallthru_edge_from (basic_block);
+
+extern void (* sched_init_only_bb) (basic_block, basic_block);
+extern basic_block (* sched_split_block) (basic_block, rtx);
+extern basic_block sched_split_block_1 (basic_block, rtx);
+extern basic_block (* sched_create_empty_bb) (basic_block);
+extern basic_block sched_create_empty_bb_1 (basic_block);
+
+extern basic_block sched_create_recovery_block (basic_block *);
+extern void sched_create_recovery_edges (basic_block, basic_block,
+					 basic_block);
+
+/* Pointer to data describing the current DFA state.  */
+extern state_t curr_state;
+
+/* Type to represent status of a dependence.  */
+typedef unsigned int ds_t;
+#define BITS_PER_DEP_STATUS HOST_BITS_PER_INT
+
+/* Type to represent weakness of speculative dependence.  */
+typedef unsigned int dw_t;
+
+extern enum reg_note ds_to_dk (ds_t);
+extern ds_t dk_to_ds (enum reg_note);
+
+/* Describe a dependency that can be broken by making a replacement
+   in one of the patterns.  LOC is the location, ORIG and NEWVAL the
+   two alternative contents, and INSN the instruction that must be
+   changed.  */
+struct dep_replacement
+{
+  rtx *loc;
+  rtx orig;
+  rtx newval;
+  rtx_insn *insn;
+};
+
+/* Information about the dependency.  */
+struct _dep
+{
+  /* Producer.  */
+  rtx_insn *pro;
+
+  /* Consumer.  */
+  rtx_insn *con;
+
+  /* If nonnull, holds a pointer to information about how to break the
+     dependency by making a replacement in one of the insns.  There is
+     only one such dependency for each insn that must be modified in
+     order to break such a dependency.  */
+  struct dep_replacement *replace;
+
+  /* Dependency status.  This field holds all dependency types and additional
+     information for speculative dependencies.  */
+  ds_t status;
+
+  /* Dependency major type.  This field is superseded by STATUS above.
+     Though, it is still in place because some targets use it.  */
+  ENUM_BITFIELD(reg_note) type:6;
+
+  unsigned nonreg:1;
+  unsigned multiple:1;
+
+  /* Cached cost of the dependency.  Make sure to update UNKNOWN_DEP_COST
+     when changing the size of this field.  */
+  int cost:20;
+};
+
+#define UNKNOWN_DEP_COST ((int) ((unsigned int) -1 << 19))
+
+typedef struct _dep dep_def;
+typedef dep_def *dep_t;
+
+#define DEP_PRO(D) ((D)->pro)
+#define DEP_CON(D) ((D)->con)
+#define DEP_TYPE(D) ((D)->type)
+#define DEP_STATUS(D) ((D)->status)
+#define DEP_COST(D) ((D)->cost)
+#define DEP_NONREG(D) ((D)->nonreg)
+#define DEP_MULTIPLE(D) ((D)->multiple)
+#define DEP_REPLACE(D) ((D)->replace)
+
+/* Functions to work with dep.  */
+
+extern void init_dep_1 (dep_t, rtx_insn *, rtx_insn *, enum reg_note, ds_t);
+extern void init_dep (dep_t, rtx_insn *, rtx_insn *, enum reg_note);
+
+extern void sd_debug_dep (dep_t);
+
+/* Definition of this struct resides below.  */
+struct _dep_node;
+typedef struct _dep_node *dep_node_t;
+
+/* A link in the dependency list.  This is essentially an equivalent of a
+   single {INSN, DEPS}_LIST rtx.  */
+struct _dep_link
+{
+  /* Dep node with all the data.  */
+  dep_node_t node;
+
+  /* Next link in the list. For the last one it is NULL.  */
+  struct _dep_link *next;
+
+  /* Pointer to the next field of the previous link in the list.
+     For the first link this points to the deps_list->first.
+
+     With help of this field it is easy to remove and insert links to the
+     list.  */
+  struct _dep_link **prev_nextp;
+};
+typedef struct _dep_link *dep_link_t;
+
+#define DEP_LINK_NODE(N) ((N)->node)
+#define DEP_LINK_NEXT(N) ((N)->next)
+#define DEP_LINK_PREV_NEXTP(N) ((N)->prev_nextp)
+
+/* Macros to work dep_link.  For most usecases only part of the dependency
+   information is need.  These macros conveniently provide that piece of
+   information.  */
+
+#define DEP_LINK_DEP(N) (DEP_NODE_DEP (DEP_LINK_NODE (N)))
+#define DEP_LINK_PRO(N) (DEP_PRO (DEP_LINK_DEP (N)))
+#define DEP_LINK_CON(N) (DEP_CON (DEP_LINK_DEP (N)))
+#define DEP_LINK_TYPE(N) (DEP_TYPE (DEP_LINK_DEP (N)))
+#define DEP_LINK_STATUS(N) (DEP_STATUS (DEP_LINK_DEP (N)))
+
+/* A list of dep_links.  */
+struct _deps_list
+{
+  /* First element.  */
+  dep_link_t first;
+
+  /* Total number of elements in the list.  */
+  int n_links;
+};
+typedef struct _deps_list *deps_list_t;
+
+#define DEPS_LIST_FIRST(L) ((L)->first)
+#define DEPS_LIST_N_LINKS(L) ((L)->n_links)
+
+/* Suppose we have a dependence Y between insn pro1 and con1, where pro1 has
+   additional dependents con0 and con2, and con1 is dependent on additional
+   insns pro0 and pro1:
+
+   .con0      pro0
+   . ^         |
+   . |         |
+   . |         |
+   . X         A
+   . |         |
+   . |         |
+   . |         V
+   .pro1--Y-->con1
+   . |         ^
+   . |         |
+   . |         |
+   . Z         B
+   . |         |
+   . |         |
+   . V         |
+   .con2      pro2
+
+   This is represented using a "dep_node" for each dependence arc, which are
+   connected as follows (diagram is centered around Y which is fully shown;
+   other dep_nodes shown partially):
+
+   .          +------------+    +--------------+    +------------+
+   .          : dep_node X :    |  dep_node Y  |    : dep_node Z :
+   .          :            :    |              |    :            :
+   .          :            :    |              |    :            :
+   .          : forw       :    |  forw        |    : forw       :
+   .          : +--------+ :    |  +--------+  |    : +--------+ :
+   forw_deps  : |dep_link| :    |  |dep_link|  |    : |dep_link| :
+   +-----+    : | +----+ | :    |  | +----+ |  |    : | +----+ | :
+   |first|----->| |next|-+------+->| |next|-+--+----->| |next|-+--->NULL
+   +-----+    : | +----+ | :    |  | +----+ |  |    : | +----+ | :
+   . ^  ^     : |     ^  | :    |  |     ^  |  |    : |        | :
+   . |  |     : |     |  | :    |  |     |  |  |    : |        | :
+   . |  +--<----+--+  +--+---<--+--+--+  +--+--+--<---+--+     | :
+   . |        : |  |     | :    |  |  |     |  |    : |  |     | :
+   . |        : | +----+ | :    |  | +----+ |  |    : | +----+ | :
+   . |        : | |prev| | :    |  | |prev| |  |    : | |prev| | :
+   . |        : | |next| | :    |  | |next| |  |    : | |next| | :
+   . |        : | +----+ | :    |  | +----+ |  |    : | +----+ | :
+   . |        : |        | :<-+ |  |        |  |<-+ : |        | :<-+
+   . |        : | +----+ | :  | |  | +----+ |  |  | : | +----+ | :  |
+   . |        : | |node|-+----+ |  | |node|-+--+--+ : | |node|-+----+
+   . |        : | +----+ | :    |  | +----+ |  |    : | +----+ | :
+   . |        : |        | :    |  |        |  |    : |        | :
+   . |        : +--------+ :    |  +--------+  |    : +--------+ :
+   . |        :            :    |              |    :            :
+   . |        :  SAME pro1 :    |  +--------+  |    :  SAME pro1 :
+   . |        :  DIFF con0 :    |  |dep     |  |    :  DIFF con2 :
+   . |        :            :    |  |        |  |    :            :
+   . |                          |  | +----+ |  |
+   .RTX<------------------------+--+-|pro1| |  |
+   .pro1                        |  | +----+ |  |
+   .                            |  |        |  |
+   .                            |  | +----+ |  |
+   .RTX<------------------------+--+-|con1| |  |
+   .con1                        |  | +----+ |  |
+   . |                          |  |        |  |
+   . |                          |  | +----+ |  |
+   . |                          |  | |kind| |  |
+   . |                          |  | +----+ |  |
+   . |        :            :    |  | |stat| |  |    :            :
+   . |        :  DIFF pro0 :    |  | +----+ |  |    :  DIFF pro2 :
+   . |        :  SAME con1 :    |  |        |  |    :  SAME con1 :
+   . |        :            :    |  +--------+  |    :            :
+   . |        :            :    |              |    :            :
+   . |        : back       :    |  back        |    : back       :
+   . v        : +--------+ :    |  +--------+  |    : +--------+ :
+   back_deps  : |dep_link| :    |  |dep_link|  |    : |dep_link| :
+   +-----+    : | +----+ | :    |  | +----+ |  |    : | +----+ | :
+   |first|----->| |next|-+------+->| |next|-+--+----->| |next|-+--->NULL
+   +-----+    : | +----+ | :    |  | +----+ |  |    : | +----+ | :
+   .    ^     : |     ^  | :    |  |     ^  |  |    : |        | :
+   .    |     : |     |  | :    |  |     |  |  |    : |        | :
+   .    +--<----+--+  +--+---<--+--+--+  +--+--+--<---+--+     | :
+   .          : |  |     | :    |  |  |     |  |    : |  |     | :
+   .          : | +----+ | :    |  | +----+ |  |    : | +----+ | :
+   .          : | |prev| | :    |  | |prev| |  |    : | |prev| | :
+   .          : | |next| | :    |  | |next| |  |    : | |next| | :
+   .          : | +----+ | :    |  | +----+ |  |    : | +----+ | :
+   .          : |        | :<-+ |  |        |  |<-+ : |        | :<-+
+   .          : | +----+ | :  | |  | +----+ |  |  | : | +----+ | :  |
+   .          : | |node|-+----+ |  | |node|-+--+--+ : | |node|-+----+
+   .          : | +----+ | :    |  | +----+ |  |    : | +----+ | :
+   .          : |        | :    |  |        |  |    : |        | :
+   .          : +--------+ :    |  +--------+  |    : +--------+ :
+   .          :            :    |              |    :            :
+   .          : dep_node A :    |  dep_node Y  |    : dep_node B :
+   .          +------------+    +--------------+    +------------+
+*/
+
+struct _dep_node
+{
+  /* Backward link.  */
+  struct _dep_link back;
+
+  /* The dep.  */
+  struct _dep dep;
+
+  /* Forward link.  */
+  struct _dep_link forw;
+};
+
+#define DEP_NODE_BACK(N) (&(N)->back)
+#define DEP_NODE_DEP(N) (&(N)->dep)
+#define DEP_NODE_FORW(N) (&(N)->forw)
+
+/* The following enumeration values tell us what dependencies we
+   should use to implement the barrier.  We use true-dependencies for
+   TRUE_BARRIER and anti-dependencies for MOVE_BARRIER.  */
+enum reg_pending_barrier_mode
+{
+  NOT_A_BARRIER = 0,
+  MOVE_BARRIER,
+  TRUE_BARRIER
+};
+
+/* Whether a register movement is associated with a call.  */
+enum post_call_group
+{
+  not_post_call,
+  post_call,
+  post_call_initial
+};
+
+/* Insns which affect pseudo-registers.  */
+struct deps_reg
+{
+  rtx_insn_list *uses;
+  rtx_insn_list *sets;
+  rtx_insn_list *implicit_sets;
+  rtx_insn_list *control_uses;
+  rtx_insn_list *clobbers;
+  int uses_length;
+  int clobbers_length;
+};
+
+/* Describe state of dependencies used during sched_analyze phase.  */
+struct deps_desc
+{
+  /* The *_insns and *_mems are paired lists.  Each pending memory operation
+     will have a pointer to the MEM rtx on one list and a pointer to the
+     containing insn on the other list in the same place in the list.  */
+
+  /* We can't use add_dependence like the old code did, because a single insn
+     may have multiple memory accesses, and hence needs to be on the list
+     once for each memory access.  Add_dependence won't let you add an insn
+     to a list more than once.  */
+
+  /* An INSN_LIST containing all insns with pending read operations.  */
+  rtx_insn_list *pending_read_insns;
+
+  /* An EXPR_LIST containing all MEM rtx's which are pending reads.  */
+  rtx_expr_list *pending_read_mems;
+
+  /* An INSN_LIST containing all insns with pending write operations.  */
+  rtx_insn_list *pending_write_insns;
+
+  /* An EXPR_LIST containing all MEM rtx's which are pending writes.  */
+  rtx_expr_list *pending_write_mems;
+
+  /* An INSN_LIST containing all jump insns.  */
+  rtx_insn_list *pending_jump_insns;
+
+  /* We must prevent the above lists from ever growing too large since
+     the number of dependencies produced is at least O(N*N),
+     and execution time is at least O(4*N*N), as a function of the
+     length of these pending lists.  */
+
+  /* Indicates the length of the pending_read list.  */
+  int pending_read_list_length;
+
+  /* Indicates the length of the pending_write list.  */
+  int pending_write_list_length;
+
+  /* Length of the pending memory flush list plus the length of the pending
+     jump insn list.  Large functions with no calls may build up extremely
+     large lists.  */
+  int pending_flush_length;
+
+  /* The last insn upon which all memory references must depend.
+     This is an insn which flushed the pending lists, creating a dependency
+     between it and all previously pending memory references.  This creates
+     a barrier (or a checkpoint) which no memory reference is allowed to cross.
+
+     This includes all non constant CALL_INSNs.  When we do interprocedural
+     alias analysis, this restriction can be relaxed.
+     This may also be an INSN that writes memory if the pending lists grow
+     too large.  */
+  rtx_insn_list *last_pending_memory_flush;
+
+  /* A list of the last function calls we have seen.  We use a list to
+     represent last function calls from multiple predecessor blocks.
+     Used to prevent register lifetimes from expanding unnecessarily.  */
+  rtx_insn_list *last_function_call;
+
+  /* A list of the last function calls that may not return normally
+     we have seen.  We use a list to represent last function calls from
+     multiple predecessor blocks.  Used to prevent moving trapping insns
+     across such calls.  */
+  rtx_insn_list *last_function_call_may_noreturn;
+
+  /* A list of insns which use a pseudo register that does not already
+     cross a call.  We create dependencies between each of those insn
+     and the next call insn, to ensure that they won't cross a call after
+     scheduling is done.  */
+  rtx_insn_list *sched_before_next_call;
+
+  /* Similarly, a list of insns which should not cross a branch.  */
+  rtx_insn_list *sched_before_next_jump;
+
+  /* Used to keep post-call pseudo/hard reg movements together with
+     the call.  */
+  enum post_call_group in_post_call_group_p;
+
+  /* The last debug insn we've seen.  */
+  rtx_insn *last_debug_insn;
+
+  /* The last insn bearing REG_ARGS_SIZE that we've seen.  */
+  rtx_insn *last_args_size;
+
+  /* A list of all prologue insns we have seen without intervening epilogue
+     insns, and one of all epilogue insns we have seen without intervening
+     prologue insns.  This is used to prevent mixing prologue and epilogue
+     insns.  See PR78029.  */
+  rtx_insn_list *last_prologue;
+  rtx_insn_list *last_epilogue;
+
+  /* Whether the last *logue insn was an epilogue insn or a prologue insn
+     instead.  */
+  bool last_logue_was_epilogue;
+
+  /* The maximum register number for the following arrays.  Before reload
+     this is max_reg_num; after reload it is FIRST_PSEUDO_REGISTER.  */
+  int max_reg;
+
+  /* Element N is the next insn that sets (hard or pseudo) register
+     N within the current basic block; or zero, if there is no
+     such insn.  Needed for new registers which may be introduced
+     by splitting insns.  */
+  struct deps_reg *reg_last;
+
+  /* Element N is set for each register that has any nonzero element
+     in reg_last[N].{uses,sets,clobbers}.  */
+  regset_head reg_last_in_use;
+
+  /* Shows the last value of reg_pending_barrier associated with the insn.  */
+  enum reg_pending_barrier_mode last_reg_pending_barrier;
+
+  /* True when this context should be treated as a readonly by
+     the analysis.  */
+  BOOL_BITFIELD readonly : 1;
+};
+
+typedef struct deps_desc *deps_t;
+
+/* This structure holds some state of the current scheduling pass, and
+   contains some function pointers that abstract out some of the non-generic
+   functionality from functions such as schedule_block or schedule_insn.
+   There is one global variable, current_sched_info, which points to the
+   sched_info structure currently in use.  */
+struct haifa_sched_info
+{
+  /* Add all insns that are initially ready to the ready list.  Called once
+     before scheduling a set of insns.  */
+  void (*init_ready_list) (void);
+  /* Called after taking an insn from the ready list.  Returns nonzero if
+     this insn can be scheduled, nonzero if we should silently discard it.  */
+  int (*can_schedule_ready_p) (rtx_insn *);
+  /* Return nonzero if there are more insns that should be scheduled.  */
+  int (*schedule_more_p) (void);
+  /* Called after an insn has all its hard dependencies resolved.
+     Adjusts status of instruction (which is passed through second parameter)
+     to indicate if instruction should be moved to the ready list or the
+     queue, or if it should silently discard it (until next resolved
+     dependence).  */
+  ds_t (*new_ready) (rtx_insn *, ds_t);
+  /* Compare priority of two insns.  Return a positive number if the second
+     insn is to be preferred for scheduling, and a negative one if the first
+     is to be preferred.  Zero if they are equally good.  */
+  int (*rank) (rtx_insn *, rtx_insn *);
+  /* Return a string that contains the insn uid and optionally anything else
+     necessary to identify this insn in an output.  It's valid to use a
+     static buffer for this.  The ALIGNED parameter should cause the string
+     to be formatted so that multiple output lines will line up nicely.  */
+  const char *(*print_insn) (const rtx_insn *, int);
+  /* Return nonzero if an insn should be included in priority
+     calculations.  */
+  int (*contributes_to_priority) (rtx_insn *, rtx_insn *);
+
+  /* Return true if scheduling insn (passed as the parameter) will trigger
+     finish of scheduling current block.  */
+  bool (*insn_finishes_block_p) (rtx_insn *);
+
+  /* The boundaries of the set of insns to be scheduled.  */
+  rtx_insn *prev_head, *next_tail;
+
+  /* Filled in after the schedule is finished; the first and last scheduled
+     insns.  */
+  rtx_insn *head, *tail;
+
+  /* If nonzero, enables an additional sanity check in schedule_block.  */
+  unsigned int queue_must_finish_empty:1;
+
+  /* Maximum priority that has been assigned to an insn.  */
+  int sched_max_insns_priority;
+
+  /* Hooks to support speculative scheduling.  */
+
+  /* Called to notify frontend that instruction is being added (second
+     parameter == 0) or removed (second parameter == 1).  */
+  void (*add_remove_insn) (rtx_insn *, int);
+
+  /* Called to notify the frontend that instruction INSN is being
+     scheduled.  */
+  void (*begin_schedule_ready) (rtx_insn *insn);
+
+  /* Called to notify the frontend that an instruction INSN is about to be
+     moved to its correct place in the final schedule.  This is done for all
+     insns in order of the schedule.  LAST indicates the last scheduled
+     instruction.  */
+  void (*begin_move_insn) (rtx_insn *insn, rtx_insn *last);
+
+  /* If the second parameter is not NULL, return nonnull value, if the
+     basic block should be advanced.
+     If the second parameter is NULL, return the next basic block in EBB.
+     The first parameter is the current basic block in EBB.  */
+  basic_block (*advance_target_bb) (basic_block, rtx_insn *);
+
+  /* Allocate memory, store the frontend scheduler state in it, and
+     return it.  */
+  void *(*save_state) (void);
+  /* Restore frontend scheduler state from the argument, and free the
+     memory.  */
+  void (*restore_state) (void *);
+
+  /* ??? FIXME: should use straight bitfields inside sched_info instead of
+     this flag field.  */
+  unsigned int flags;
+};
+
+/* This structure holds description of the properties for speculative
+   scheduling.  */
+struct spec_info_def
+{
+  /* Holds types of allowed speculations: BEGIN_{DATA|CONTROL},
+     BE_IN_{DATA_CONTROL}.  */
+  int mask;
+
+  /* A dump file for additional information on speculative scheduling.  */
+  FILE *dump;
+
+  /* Minimal cumulative weakness of speculative instruction's
+     dependencies, so that insn will be scheduled.  */
+  dw_t data_weakness_cutoff;
+
+  /* Minimal usefulness of speculative instruction to be considered for
+     scheduling.  */
+  int control_weakness_cutoff;
+
+  /* Flags from the enum SPEC_SCHED_FLAGS.  */
+  int flags;
+};
+typedef struct spec_info_def *spec_info_t;
+
+extern spec_info_t spec_info;
+
+extern struct haifa_sched_info *current_sched_info;
+
+/* Do register pressure sensitive insn scheduling if the flag is set
+   up.  */
+extern enum sched_pressure_algorithm sched_pressure;
+
+/* Map regno -> its pressure class.  The map defined only when
+   SCHED_PRESSURE_P is true.  */
+extern enum reg_class *sched_regno_pressure_class;
+
+/* Indexed by INSN_UID, the collection of all data associated with
+   a single instruction.  */
+
+struct _haifa_deps_insn_data
+{
+  /* The number of incoming edges in the forward dependency graph.
+     As scheduling proceeds, counts are decreased.  An insn moves to
+     the ready queue when its counter reaches zero.  */
+  int dep_count;
+
+  /* Nonzero if instruction has internal dependence
+     (e.g. add_dependence was invoked with (insn == elem)).  */
+  unsigned int has_internal_dep;
+
+  /* NB: We can't place 'struct _deps_list' here instead of deps_list_t into
+     h_i_d because when h_i_d extends, addresses of the deps_list->first
+     change without updating deps_list->first->next->prev_nextp.  Thus
+     BACK_DEPS and RESOLVED_BACK_DEPS are allocated on the heap and FORW_DEPS
+     list is allocated on the obstack.  */
+
+  /* A list of hard backward dependencies.  The insn is a consumer of all the
+     deps mentioned here.  */
+  deps_list_t hard_back_deps;
+
+  /* A list of speculative (weak) dependencies.  The insn is a consumer of all
+     the deps mentioned here.  */
+  deps_list_t spec_back_deps;
+
+  /* A list of insns which depend on the instruction.  Unlike 'back_deps',
+     it represents forward dependencies.  */
+  deps_list_t forw_deps;
+
+  /* A list of scheduled producers of the instruction.  Links are being moved
+     from 'back_deps' to 'resolved_back_deps' while scheduling.  */
+  deps_list_t resolved_back_deps;
+
+  /* A list of scheduled consumers of the instruction.  Links are being moved
+     from 'forw_deps' to 'resolved_forw_deps' while scheduling to fasten the
+     search in 'forw_deps'.  */
+  deps_list_t resolved_forw_deps;
+
+  /* If the insn is conditional (either through COND_EXEC, or because
+     it is a conditional branch), this records the condition.  NULL
+     for insns that haven't been seen yet or don't have a condition;
+     const_true_rtx to mark an insn without a condition, or with a
+     condition that has been clobbered by a subsequent insn.  */
+  rtx cond;
+
+  /* For a conditional insn, a list of insns that could set the condition
+     register.  Used when generating control dependencies.  */
+  rtx_insn_list *cond_deps;
+
+  /* True if the condition in 'cond' should be reversed to get the actual
+     condition.  */
+  unsigned int reverse_cond : 1;
+
+  /* Some insns (e.g. call) are not allowed to move across blocks.  */
+  unsigned int cant_move : 1;
+};
+
+
+/* Bits used for storing values of the fields in the following
+   structure.  */
+#define INCREASE_BITS 8
+
+/* The structure describes how the corresponding insn increases the
+   register pressure for each pressure class.  */
+struct reg_pressure_data
+{
+  /* Pressure increase for given class because of clobber.  */
+  unsigned int clobber_increase : INCREASE_BITS;
+  /* Increase in register pressure for given class because of register
+     sets. */
+  unsigned int set_increase : INCREASE_BITS;
+  /* Pressure increase for given class because of unused register
+     set.  */
+  unsigned int unused_set_increase : INCREASE_BITS;
+  /* Pressure change: #sets - #deaths.  */
+  int change : INCREASE_BITS;
+};
+
+/* The following structure describes usage of registers by insns.  */
+struct reg_use_data
+{
+  /* Regno used in the insn.  */
+  int regno;
+  /* Insn using the regno.  */
+  rtx_insn *insn;
+  /* Cyclic list of elements with the same regno.  */
+  struct reg_use_data *next_regno_use;
+  /* List of elements with the same insn.  */
+  struct reg_use_data *next_insn_use;
+};
+
+/* The following structure describes used sets of registers by insns.
+   Registers are pseudos whose pressure class is not NO_REGS or hard
+   registers available for allocations.  */
+struct reg_set_data
+{
+  /* Regno used in the insn.  */
+  int regno;
+  /* Insn setting the regno.  */
+  rtx insn;
+  /* List of elements with the same insn.  */
+  struct reg_set_data *next_insn_set;
+};
+
+enum autopref_multipass_data_status {
+  /* Entry is irrelevant for auto-prefetcher.  */
+  AUTOPREF_MULTIPASS_DATA_IRRELEVANT = -2,
+  /* Entry is uninitialized.  */
+  AUTOPREF_MULTIPASS_DATA_UNINITIALIZED = -1,
+  /* Entry is relevant for auto-prefetcher and insn can be delayed
+     to allow another insn through.  */
+  AUTOPREF_MULTIPASS_DATA_NORMAL = 0,
+  /* Entry is relevant for auto-prefetcher, but insn should not be
+     delayed as that will break scheduling.  */
+  AUTOPREF_MULTIPASS_DATA_DONT_DELAY = 1
+};
+
+/* Data for modeling cache auto-prefetcher.  */
+struct autopref_multipass_data_
+{
+  /* Base part of memory address.  */
+  rtx base;
+
+  /* Memory offsets from the base.  */
+  int offset;
+
+  /* Entry status.  */
+  enum autopref_multipass_data_status status;
+};
+typedef struct autopref_multipass_data_ autopref_multipass_data_def;
+typedef autopref_multipass_data_def *autopref_multipass_data_t;
+
+struct _haifa_insn_data
+{
+  /* We can't place 'struct _deps_list' into h_i_d instead of deps_list_t
+     because when h_i_d extends, addresses of the deps_list->first
+     change without updating deps_list->first->next->prev_nextp.  */
+
+  /* Logical uid gives the original ordering of the insns.  */
+  int luid;
+
+  /* A priority for each insn.  */
+  int priority;
+
+  /* The fusion priority for each insn.  */
+  int fusion_priority;
+
+  /* The minimum clock tick at which the insn becomes ready.  This is
+     used to note timing constraints for the insns in the pending list.  */
+  int tick;
+
+  /* For insns that are scheduled at a fixed difference from another,
+     this records the tick in which they must be ready.  */
+  int exact_tick;
+
+  /* INTER_TICK is used to adjust INSN_TICKs of instructions from the
+     subsequent blocks in a region.  */
+  int inter_tick;
+
+  /* Used temporarily to estimate an INSN_TICK value for an insn given
+     current knowledge.  */
+  int tick_estimate;
+
+  /* See comment on QUEUE_INDEX macro in haifa-sched.c.  */
+  int queue_index;
+
+  short cost;
+
+  /* '> 0' if priority is valid,
+     '== 0' if priority was not yet computed,
+     '< 0' if priority in invalid and should be recomputed.  */
+  signed char priority_status;
+
+  /* Set if there's DEF-USE dependence between some speculatively
+     moved load insn and this one.  */
+  unsigned int fed_by_spec_load : 1;
+  unsigned int is_load_insn : 1;
+  /* Nonzero if this insn has negative-cost forward dependencies against
+     an already scheduled insn.  */
+  unsigned int feeds_backtrack_insn : 1;
+
+  /* Nonzero if this insn is a shadow of another, scheduled after a fixed
+     delay.  We only emit shadows at the end of a cycle, with no other
+     real insns following them.  */
+  unsigned int shadow_p : 1;
+
+  /* Used internally in unschedule_insns_until to mark insns that must have
+     their TODO_SPEC recomputed.  */
+  unsigned int must_recompute_spec : 1;
+
+  /* What speculations are necessary to apply to schedule the instruction.  */
+  ds_t todo_spec;
+
+  /* What speculations were already applied.  */
+  ds_t done_spec;
+
+  /* What speculations are checked by this instruction.  */
+  ds_t check_spec;
+
+  /* Recovery block for speculation checks.  */
+  basic_block recovery_block;
+
+  /* Original pattern of the instruction.  */
+  rtx orig_pat;
+
+  /* For insns with DEP_CONTROL dependencies, the predicated pattern if it
+     was ever successfully constructed.  */
+  rtx predicated_pat;
+
+  /* The following array contains info how the insn increases register
+     pressure.  There is an element for each cover class of pseudos
+     referenced in insns.  */
+  struct reg_pressure_data *reg_pressure;
+  /* The following array contains maximal reg pressure between last
+     scheduled insn and given insn.  There is an element for each
+     pressure class of pseudos referenced in insns.  This info updated
+     after scheduling each insn for each insn between the two
+     mentioned insns.  */
+  int *max_reg_pressure;
+  /* The following list contains info about used pseudos and hard
+     registers available for allocation.  */
+  struct reg_use_data *reg_use_list;
+  /* The following list contains info about set pseudos and hard
+     registers available for allocation.  */
+  struct reg_set_data *reg_set_list;
+  /* Info about how scheduling the insn changes cost of register
+     pressure excess (between source and target).  */
+  int reg_pressure_excess_cost_change;
+  int model_index;
+
+  /* Original order of insns in the ready list.  */
+  int rfs_debug_orig_order;
+
+  /* The deciding reason for INSN's place in the ready list.  */
+  int last_rfs_win;
+
+  /* Two entries for cache auto-prefetcher model: one for mem reads,
+     and one for mem writes.  */
+  autopref_multipass_data_def autopref_multipass_data[2];
+};
+
+typedef struct _haifa_insn_data haifa_insn_data_def;
+typedef haifa_insn_data_def *haifa_insn_data_t;
+
+
+extern vec<haifa_insn_data_def> h_i_d;
+
+#define HID(INSN) (&h_i_d[INSN_UID (INSN)])
+
+/* Accessor macros for h_i_d.  There are more in haifa-sched.c and
+   sched-rgn.c.  */
+#define INSN_PRIORITY(INSN) (HID (INSN)->priority)
+#define INSN_FUSION_PRIORITY(INSN) (HID (INSN)->fusion_priority)
+#define INSN_REG_PRESSURE(INSN) (HID (INSN)->reg_pressure)
+#define INSN_MAX_REG_PRESSURE(INSN) (HID (INSN)->max_reg_pressure)
+#define INSN_REG_USE_LIST(INSN) (HID (INSN)->reg_use_list)
+#define INSN_REG_SET_LIST(INSN) (HID (INSN)->reg_set_list)
+#define INSN_REG_PRESSURE_EXCESS_COST_CHANGE(INSN) \
+  (HID (INSN)->reg_pressure_excess_cost_change)
+#define INSN_PRIORITY_STATUS(INSN) (HID (INSN)->priority_status)
+#define INSN_MODEL_INDEX(INSN) (HID (INSN)->model_index)
+#define INSN_AUTOPREF_MULTIPASS_DATA(INSN) \
+  (HID (INSN)->autopref_multipass_data)
+
+typedef struct _haifa_deps_insn_data haifa_deps_insn_data_def;
+typedef haifa_deps_insn_data_def *haifa_deps_insn_data_t;
+
+
+extern vec<haifa_deps_insn_data_def> h_d_i_d;
+
+#define HDID(INSN) (&h_d_i_d[INSN_LUID (INSN)])
+#define INSN_DEP_COUNT(INSN)	(HDID (INSN)->dep_count)
+#define HAS_INTERNAL_DEP(INSN)  (HDID (INSN)->has_internal_dep)
+#define INSN_FORW_DEPS(INSN) (HDID (INSN)->forw_deps)
+#define INSN_RESOLVED_BACK_DEPS(INSN) (HDID (INSN)->resolved_back_deps)
+#define INSN_RESOLVED_FORW_DEPS(INSN) (HDID (INSN)->resolved_forw_deps)
+#define INSN_HARD_BACK_DEPS(INSN) (HDID (INSN)->hard_back_deps)
+#define INSN_SPEC_BACK_DEPS(INSN) (HDID (INSN)->spec_back_deps)
+#define INSN_CACHED_COND(INSN)	(HDID (INSN)->cond)
+#define INSN_REVERSE_COND(INSN) (HDID (INSN)->reverse_cond)
+#define INSN_COND_DEPS(INSN)	(HDID (INSN)->cond_deps)
+#define CANT_MOVE(INSN)	(HDID (INSN)->cant_move)
+#define CANT_MOVE_BY_LUID(LUID)	(h_d_i_d[LUID].cant_move)
+
+
+#define INSN_PRIORITY(INSN)	(HID (INSN)->priority)
+#define INSN_PRIORITY_STATUS(INSN) (HID (INSN)->priority_status)
+#define INSN_PRIORITY_KNOWN(INSN) (INSN_PRIORITY_STATUS (INSN) > 0)
+#define TODO_SPEC(INSN) (HID (INSN)->todo_spec)
+#define DONE_SPEC(INSN) (HID (INSN)->done_spec)
+#define CHECK_SPEC(INSN) (HID (INSN)->check_spec)
+#define RECOVERY_BLOCK(INSN) (HID (INSN)->recovery_block)
+#define ORIG_PAT(INSN) (HID (INSN)->orig_pat)
+#define PREDICATED_PAT(INSN) (HID (INSN)->predicated_pat)
+
+/* INSN is either a simple or a branchy speculation check.  */
+#define IS_SPECULATION_CHECK_P(INSN) \
+  (sel_sched_p () ? sel_insn_is_speculation_check (INSN) : RECOVERY_BLOCK (INSN) != NULL)
+
+/* INSN is a speculation check that will simply reexecute the speculatively
+   scheduled instruction if the speculation fails.  */
+#define IS_SPECULATION_SIMPLE_CHECK_P(INSN) \
+  (RECOVERY_BLOCK (INSN) == EXIT_BLOCK_PTR_FOR_FN (cfun))
+
+/* INSN is a speculation check that will branch to RECOVERY_BLOCK if the
+   speculation fails.  Insns in that block will reexecute the speculatively
+   scheduled code and then will return immediately after INSN thus preserving
+   semantics of the program.  */
+#define IS_SPECULATION_BRANCHY_CHECK_P(INSN) \
+  (RECOVERY_BLOCK (INSN) != NULL             \
+   && RECOVERY_BLOCK (INSN) != EXIT_BLOCK_PTR_FOR_FN (cfun))
+
+
+/* Dep status (aka ds_t) of the link encapsulates all information for a given
+   dependency, including everything that is needed for speculative scheduling.
+
+   The lay-out of a ds_t is as follows:
+
+   1. Integers corresponding to the probability of the dependence to *not*
+      exist.  This is the probability that overcoming this dependence will
+      not be followed by execution of the recovery code.  Note that however
+      high this probability is, the recovery code should still always be
+      generated to preserve semantics of the program.
+
+      The probability values can be set or retrieved using the functions
+      the set_dep_weak() and get_dep_weak() in sched-deps.c.  The values
+      are always in the range [0, MAX_DEP_WEAK].
+
+	BEGIN_DATA	: BITS_PER_DEP_WEAK
+	BE_IN_DATA	: BITS_PER_DEP_WEAK
+	BEGIN_CONTROL	: BITS_PER_DEP_WEAK
+	BE_IN_CONTROL	: BITS_PER_DEP_WEAK
+
+      The basic type of DS_T is a host int.  For a 32-bits int, the values
+      will each take 6 bits.
+
+   2. The type of dependence.  This supercedes the old-style REG_NOTE_KIND
+      values.  TODO: Use this field instead of DEP_TYPE, or make DEP_TYPE
+      extract the dependence type from here.
+
+	dep_type	:  4 => DEP_{TRUE|OUTPUT|ANTI|CONTROL}
+
+   3. Various flags:
+
+	HARD_DEP	:  1 =>	Set if an instruction has a non-speculative
+				dependence.  This is an instruction property
+				so this bit can only appear in the TODO_SPEC
+				field of an instruction.
+	DEP_POSTPONED	:  1 =>	Like HARD_DEP, but the hard dependence may
+				still be broken by adjusting the instruction.
+	DEP_CANCELLED	:  1 =>	Set if a dependency has been broken using
+				some form of speculation.
+	RESERVED	:  1 => Reserved for use in the delay slot scheduler.
+
+   See also: check_dep_status () in sched-deps.c .  */
+
+/* The number of bits per weakness probability.  There are 4 weakness types
+   and we need 8 bits for other data in a DS_T.  */
+#define BITS_PER_DEP_WEAK ((BITS_PER_DEP_STATUS - 8) / 4)
+
+/* Mask of speculative weakness in dep_status.  */
+#define DEP_WEAK_MASK ((1 << BITS_PER_DEP_WEAK) - 1)
+
+/* This constant means that dependence is fake with 99.999...% probability.
+   This is the maximum value, that can appear in dep_status.
+   Note, that we don't want MAX_DEP_WEAK to be the same as DEP_WEAK_MASK for
+   debugging reasons.  Though, it can be set to DEP_WEAK_MASK, and, when
+   done so, we'll get fast (mul for)/(div by) NO_DEP_WEAK.  */
+#define MAX_DEP_WEAK (DEP_WEAK_MASK - 1)
+
+/* This constant means that dependence is 99.999...% real and it is a really
+   bad idea to overcome it (though this can be done, preserving program
+   semantics).  */
+#define MIN_DEP_WEAK 1
+
+/* This constant represents 100% probability.
+   E.g. it is used to represent weakness of dependence, that doesn't exist.
+   This value never appears in a ds_t, it is only used for computing the
+   weakness of a dependence.  */
+#define NO_DEP_WEAK (MAX_DEP_WEAK + MIN_DEP_WEAK)
+
+/* Default weakness of speculative dependence.  Used when we can't say
+   neither bad nor good about the dependence.  */
+#define UNCERTAIN_DEP_WEAK (MAX_DEP_WEAK - MAX_DEP_WEAK / 4)
+
+/* Offset for speculative weaknesses in dep_status.  */
+enum SPEC_TYPES_OFFSETS {
+  BEGIN_DATA_BITS_OFFSET = 0,
+  BE_IN_DATA_BITS_OFFSET = BEGIN_DATA_BITS_OFFSET + BITS_PER_DEP_WEAK,
+  BEGIN_CONTROL_BITS_OFFSET = BE_IN_DATA_BITS_OFFSET + BITS_PER_DEP_WEAK,
+  BE_IN_CONTROL_BITS_OFFSET = BEGIN_CONTROL_BITS_OFFSET + BITS_PER_DEP_WEAK
+};
+
+/* The following defines provide numerous constants used to distinguish
+   between different types of speculative dependencies.  They are also
+   used as masks to clear/preserve the bits corresponding to the type
+   of dependency weakness.  */
+
+/* Dependence can be overcome with generation of new data speculative
+   instruction.  */
+#define BEGIN_DATA (((ds_t) DEP_WEAK_MASK) << BEGIN_DATA_BITS_OFFSET)
+
+/* This dependence is to the instruction in the recovery block, that was
+   formed to recover after data-speculation failure.
+   Thus, this dependence can overcome with generating of the copy of
+   this instruction in the recovery block.  */
+#define BE_IN_DATA (((ds_t) DEP_WEAK_MASK) << BE_IN_DATA_BITS_OFFSET)
+
+/* Dependence can be overcome with generation of new control speculative
+   instruction.  */
+#define BEGIN_CONTROL (((ds_t) DEP_WEAK_MASK) << BEGIN_CONTROL_BITS_OFFSET)
+
+/* This dependence is to the instruction in the recovery block, that was
+   formed to recover after control-speculation failure.
+   Thus, this dependence can be overcome with generating of the copy of
+   this instruction in the recovery block.  */
+#define BE_IN_CONTROL (((ds_t) DEP_WEAK_MASK) << BE_IN_CONTROL_BITS_OFFSET)
+
+/* A few convenient combinations.  */
+#define BEGIN_SPEC (BEGIN_DATA | BEGIN_CONTROL)
+#define DATA_SPEC (BEGIN_DATA | BE_IN_DATA)
+#define CONTROL_SPEC (BEGIN_CONTROL | BE_IN_CONTROL)
+#define SPECULATIVE (DATA_SPEC | CONTROL_SPEC)
+#define BE_IN_SPEC (BE_IN_DATA | BE_IN_CONTROL)
+
+/* Constants, that are helpful in iterating through dep_status.  */
+#define FIRST_SPEC_TYPE BEGIN_DATA
+#define LAST_SPEC_TYPE BE_IN_CONTROL
+#define SPEC_TYPE_SHIFT BITS_PER_DEP_WEAK
+
+/* Dependence on instruction can be of multiple types
+   (e.g. true and output). This fields enhance REG_NOTE_KIND information
+   of the dependence.  */
+#define DEP_TRUE (((ds_t) 1) << (BE_IN_CONTROL_BITS_OFFSET + BITS_PER_DEP_WEAK))
+#define DEP_OUTPUT (DEP_TRUE << 1)
+#define DEP_ANTI (DEP_OUTPUT << 1)
+#define DEP_CONTROL (DEP_ANTI << 1)
+
+#define DEP_TYPES (DEP_TRUE | DEP_OUTPUT | DEP_ANTI | DEP_CONTROL)
+
+/* Instruction has non-speculative dependence.  This bit represents the
+   property of an instruction - not the one of a dependence.
+   Therefore, it can appear only in the TODO_SPEC field of an instruction.  */
+#define HARD_DEP (DEP_CONTROL << 1)
+
+/* Like HARD_DEP, but dependencies can perhaps be broken by modifying
+   the instructions.  This is used for example to change:
+
+   rn++		=>	rm=[rn + 4]
+   rm=[rn]		rn++
+
+   For instructions that have this bit set, one of the dependencies of
+   the instructions will have a non-NULL REPLACE field in its DEP_T.
+   Just like HARD_DEP, this bit is only ever set in TODO_SPEC.  */
+#define DEP_POSTPONED (HARD_DEP << 1)
+
+/* Set if a dependency is cancelled via speculation.  */
+#define DEP_CANCELLED (DEP_POSTPONED << 1)
+
+
+/* This represents the results of calling sched-deps.c functions,
+   which modify dependencies.  */
+enum DEPS_ADJUST_RESULT {
+  /* No dependence needed (e.g. producer == consumer).  */
+  DEP_NODEP,
+  /* Dependence is already present and wasn't modified.  */
+  DEP_PRESENT,
+  /* Existing dependence was modified to include additional information.  */
+  DEP_CHANGED,
+  /* New dependence has been created.  */
+  DEP_CREATED
+};
+
+/* Represents the bits that can be set in the flags field of the
+   sched_info structure.  */
+enum SCHED_FLAGS {
+  /* If set, generate links between instruction as DEPS_LIST.
+     Otherwise, generate usual INSN_LIST links.  */
+  USE_DEPS_LIST = 1,
+  /* Perform data or control (or both) speculation.
+     Results in generation of data and control speculative dependencies.
+     Requires USE_DEPS_LIST set.  */
+  DO_SPECULATION = USE_DEPS_LIST << 1,
+  DO_BACKTRACKING = DO_SPECULATION << 1,
+  DO_PREDICATION = DO_BACKTRACKING << 1,
+  DONT_BREAK_DEPENDENCIES = DO_PREDICATION << 1,
+  SCHED_RGN = DONT_BREAK_DEPENDENCIES << 1,
+  SCHED_EBB = SCHED_RGN << 1,
+  /* Scheduler can possibly create new basic blocks.  Used for assertions.  */
+  NEW_BBS = SCHED_EBB << 1,
+  SEL_SCHED = NEW_BBS << 1
+};
+
+enum SPEC_SCHED_FLAGS {
+  COUNT_SPEC_IN_CRITICAL_PATH = 1,
+  SEL_SCHED_SPEC_DONT_CHECK_CONTROL = COUNT_SPEC_IN_CRITICAL_PATH << 1
+};
+
+#define NOTE_NOT_BB_P(NOTE) (NOTE_P (NOTE) && (NOTE_KIND (NOTE)	\
+					       != NOTE_INSN_BASIC_BLOCK))
+
+extern FILE *sched_dump;
+extern int sched_verbose;
+
+extern spec_info_t spec_info;
+extern bool haifa_recovery_bb_ever_added_p;
+
+/* Exception Free Loads:
+
+   We define five classes of speculative loads: IFREE, IRISKY,
+   PFREE, PRISKY, and MFREE.
+
+   IFREE loads are loads that are proved to be exception-free, just
+   by examining the load insn.  Examples for such loads are loads
+   from TOC and loads of global data.
+
+   IRISKY loads are loads that are proved to be exception-risky,
+   just by examining the load insn.  Examples for such loads are
+   volatile loads and loads from shared memory.
+
+   PFREE loads are loads for which we can prove, by examining other
+   insns, that they are exception-free.  Currently, this class consists
+   of loads for which we are able to find a "similar load", either in
+   the target block, or, if only one split-block exists, in that split
+   block.  Load2 is similar to load1 if both have same single base
+   register.  We identify only part of the similar loads, by finding
+   an insn upon which both load1 and load2 have a DEF-USE dependence.
+
+   PRISKY loads are loads for which we can prove, by examining other
+   insns, that they are exception-risky.  Currently we have two proofs for
+   such loads.  The first proof detects loads that are probably guarded by a
+   test on the memory address.  This proof is based on the
+   backward and forward data dependence information for the region.
+   Let load-insn be the examined load.
+   Load-insn is PRISKY iff ALL the following hold:
+
+   - insn1 is not in the same block as load-insn
+   - there is a DEF-USE dependence chain (insn1, ..., load-insn)
+   - test-insn is either a compare or a branch, not in the same block
+     as load-insn
+   - load-insn is reachable from test-insn
+   - there is a DEF-USE dependence chain (insn1, ..., test-insn)
+
+   This proof might fail when the compare and the load are fed
+   by an insn not in the region.  To solve this, we will add to this
+   group all loads that have no input DEF-USE dependence.
+
+   The second proof detects loads that are directly or indirectly
+   fed by a speculative load.  This proof is affected by the
+   scheduling process.  We will use the flag  fed_by_spec_load.
+   Initially, all insns have this flag reset.  After a speculative
+   motion of an insn, if insn is either a load, or marked as
+   fed_by_spec_load, we will also mark as fed_by_spec_load every
+   insn1 for which a DEF-USE dependence (insn, insn1) exists.  A
+   load which is fed_by_spec_load is also PRISKY.
+
+   MFREE (maybe-free) loads are all the remaining loads. They may be
+   exception-free, but we cannot prove it.
+
+   Now, all loads in IFREE and PFREE classes are considered
+   exception-free, while all loads in IRISKY and PRISKY classes are
+   considered exception-risky.  As for loads in the MFREE class,
+   these are considered either exception-free or exception-risky,
+   depending on whether we are pessimistic or optimistic.  We have
+   to take the pessimistic approach to assure the safety of
+   speculative scheduling, but we can take the optimistic approach
+   by invoking the -fsched_spec_load_dangerous option.  */
+
+enum INSN_TRAP_CLASS
+{
+  TRAP_FREE = 0, IFREE = 1, PFREE_CANDIDATE = 2,
+  PRISKY_CANDIDATE = 3, IRISKY = 4, TRAP_RISKY = 5
+};
+
+#define WORST_CLASS(class1, class2) \
+((class1 > class2) ? class1 : class2)
+
+#ifndef __GNUC__
+#define __inline
+#endif
+
+#ifndef HAIFA_INLINE
+#define HAIFA_INLINE __inline
+#endif
+
+struct sched_deps_info_def
+{
+  /* Called when computing dependencies for a JUMP_INSN.  This function
+     should store the set of registers that must be considered as set by
+     the jump in the regset.  */
+  void (*compute_jump_reg_dependencies) (rtx, regset);
+
+  /* Start analyzing insn.  */
+  void (*start_insn) (rtx_insn *);
+
+  /* Finish analyzing insn.  */
+  void (*finish_insn) (void);
+
+  /* Start analyzing insn LHS (Left Hand Side).  */
+  void (*start_lhs) (rtx);
+
+  /* Finish analyzing insn LHS.  */
+  void (*finish_lhs) (void);
+
+  /* Start analyzing insn RHS (Right Hand Side).  */
+  void (*start_rhs) (rtx);
+
+  /* Finish analyzing insn RHS.  */
+  void (*finish_rhs) (void);
+
+  /* Note set of the register.  */
+  void (*note_reg_set) (int);
+
+  /* Note clobber of the register.  */
+  void (*note_reg_clobber) (int);
+
+  /* Note use of the register.  */
+  void (*note_reg_use) (int);
+
+  /* Note memory dependence of type DS between MEM1 and MEM2 (which is
+     in the INSN2).  */
+  void (*note_mem_dep) (rtx mem1, rtx mem2, rtx_insn *insn2, ds_t ds);
+
+  /* Note a dependence of type DS from the INSN.  */
+  void (*note_dep) (rtx_insn *, ds_t ds);
+
+  /* Nonzero if we should use cselib for better alias analysis.  This
+     must be 0 if the dependency information is used after sched_analyze
+     has completed, e.g. if we're using it to initialize state for successor
+     blocks in region scheduling.  */
+  unsigned int use_cselib : 1;
+
+  /* If set, generate links between instruction as DEPS_LIST.
+     Otherwise, generate usual INSN_LIST links.  */
+  unsigned int use_deps_list : 1;
+
+  /* Generate data and control speculative dependencies.
+     Requires USE_DEPS_LIST set.  */
+  unsigned int generate_spec_deps : 1;
+};
+
+extern struct sched_deps_info_def *sched_deps_info;
+
+
+/* Functions in sched-deps.c.  */
+extern rtx sched_get_reverse_condition_uncached (const rtx_insn *);
+extern bool sched_insns_conditions_mutex_p (const rtx_insn *,
+					    const rtx_insn *);
+extern bool sched_insn_is_legitimate_for_speculation_p (const rtx_insn *, ds_t);
+extern void add_dependence (rtx_insn *, rtx_insn *, enum reg_note);
+extern void sched_analyze (struct deps_desc *, rtx_insn *, rtx_insn *);
+extern void init_deps (struct deps_desc *, bool);
+extern void init_deps_reg_last (struct deps_desc *);
+extern void free_deps (struct deps_desc *);
+extern void init_deps_global (void);
+extern void finish_deps_global (void);
+extern void deps_analyze_insn (struct deps_desc *, rtx_insn *);
+extern void remove_from_deps (struct deps_desc *, rtx_insn *);
+extern void init_insn_reg_pressure_info (rtx_insn *);
+extern void get_implicit_reg_pending_clobbers (HARD_REG_SET *, rtx_insn *);
+
+extern dw_t get_dep_weak (ds_t, ds_t);
+extern ds_t set_dep_weak (ds_t, ds_t, dw_t);
+extern dw_t estimate_dep_weak (rtx, rtx);
+extern ds_t ds_merge (ds_t, ds_t);
+extern ds_t ds_full_merge (ds_t, ds_t, rtx, rtx);
+extern ds_t ds_max_merge (ds_t, ds_t);
+extern dw_t ds_weak (ds_t);
+extern ds_t ds_get_speculation_types (ds_t);
+extern ds_t ds_get_max_dep_weak (ds_t);
+
+extern void sched_deps_init (bool);
+extern void sched_deps_finish (void);
+
+extern void haifa_note_reg_set (int);
+extern void haifa_note_reg_clobber (int);
+extern void haifa_note_reg_use (int);
+
+extern void maybe_extend_reg_info_p (void);
+
+extern void deps_start_bb (struct deps_desc *, rtx_insn *);
+extern enum reg_note ds_to_dt (ds_t);
+
+extern bool deps_pools_are_empty_p (void);
+extern void sched_free_deps (rtx_insn *, rtx_insn *, bool);
+extern void extend_dependency_caches (int, bool);
+
+extern void debug_ds (ds_t);
+
+
+/* Functions in haifa-sched.c.  */
+extern void initialize_live_range_shrinkage (void);
+extern void finish_live_range_shrinkage (void);
+extern void sched_init_region_reg_pressure_info (void);
+extern void free_global_sched_pressure_data (void);
+extern int haifa_classify_insn (const_rtx);
+extern void get_ebb_head_tail (basic_block, basic_block,
+			       rtx_insn **, rtx_insn **);
+extern int no_real_insns_p (const rtx_insn *, const rtx_insn *);
+
+extern int insn_sched_cost (rtx_insn *);
+extern int dep_cost_1 (dep_t, dw_t);
+extern int dep_cost (dep_t);
+extern int set_priorities (rtx_insn *, rtx_insn *);
+
+extern void sched_setup_bb_reg_pressure_info (basic_block, rtx_insn *);
+extern bool schedule_block (basic_block *, state_t);
+
+extern int cycle_issued_insns;
+extern int issue_rate;
+extern int dfa_lookahead;
+
+extern int autopref_multipass_dfa_lookahead_guard (rtx_insn *, int);
+
+extern rtx_insn *ready_element (struct ready_list *, int);
+extern rtx_insn **ready_lastpos (struct ready_list *);
+
+extern int try_ready (rtx_insn *);
+extern void sched_extend_ready_list (int);
+extern void sched_finish_ready_list (void);
+extern void sched_change_pattern (rtx, rtx);
+extern int sched_speculate_insn (rtx_insn *, ds_t, rtx *);
+extern void unlink_bb_notes (basic_block, basic_block);
+extern void add_block (basic_block, basic_block);
+extern rtx_note *bb_note (basic_block);
+extern void concat_note_lists (rtx_insn *, rtx_insn **);
+extern rtx_insn *sched_emit_insn (rtx);
+extern rtx_insn *get_ready_element (int);
+extern int number_in_ready (void);
+
+/* Types and functions in sched-ebb.c.  */
+
+extern basic_block schedule_ebb (rtx_insn *, rtx_insn *, bool);
+extern void schedule_ebbs_init (void);
+extern void schedule_ebbs_finish (void);
+
+/* Types and functions in sched-rgn.c.  */
+
+/* A region is the main entity for interblock scheduling: insns
+   are allowed to move between blocks in the same region, along
+   control flow graph edges, in the 'up' direction.  */
+struct region
+{
+  /* Number of extended basic blocks in region.  */
+  int rgn_nr_blocks;
+  /* cblocks in the region (actually index in rgn_bb_table).  */
+  int rgn_blocks;
+  /* Dependencies for this region are already computed.  Basically, indicates,
+     that this is a recovery block.  */
+  unsigned int dont_calc_deps : 1;
+  /* This region has at least one non-trivial ebb.  */
+  unsigned int has_real_ebb : 1;
+};
+
+extern int nr_regions;
+extern region *rgn_table;
+extern int *rgn_bb_table;
+extern int *block_to_bb;
+extern int *containing_rgn;
+
+/* Often used short-hand in the scheduler.  The rest of the compiler uses
+   BLOCK_FOR_INSN(INSN) and an indirect reference to get the basic block
+   number ("index").  For historical reasons, the scheduler does not.  */
+#define BLOCK_NUM(INSN)	      (BLOCK_FOR_INSN (INSN)->index + 0)
+
+#define RGN_NR_BLOCKS(rgn) (rgn_table[rgn].rgn_nr_blocks)
+#define RGN_BLOCKS(rgn) (rgn_table[rgn].rgn_blocks)
+#define RGN_DONT_CALC_DEPS(rgn) (rgn_table[rgn].dont_calc_deps)
+#define RGN_HAS_REAL_EBB(rgn) (rgn_table[rgn].has_real_ebb)
+#define BLOCK_TO_BB(block) (block_to_bb[block])
+#define CONTAINING_RGN(block) (containing_rgn[block])
+
+/* The mapping from ebb to block.  */
+extern int *ebb_head;
+#define BB_TO_BLOCK(ebb) (rgn_bb_table[ebb_head[ebb]])
+#define EBB_FIRST_BB(ebb) BASIC_BLOCK_FOR_FN (cfun, BB_TO_BLOCK (ebb))
+#define EBB_LAST_BB(ebb) \
+  BASIC_BLOCK_FOR_FN (cfun, rgn_bb_table[ebb_head[ebb + 1] - 1])
+#define INSN_BB(INSN) (BLOCK_TO_BB (BLOCK_NUM (INSN)))
+
+extern int current_nr_blocks;
+extern int current_blocks;
+extern int target_bb;
+extern bool sched_no_dce;
+
+extern void set_modulo_params (int, int, int, int);
+extern void record_delay_slot_pair (rtx_insn *, rtx_insn *, int, int);
+extern rtx_insn *real_insn_for_shadow (rtx_insn *);
+extern void discard_delay_pairs_above (int);
+extern void free_delay_pairs (void);
+extern void add_delay_dependencies (rtx_insn *);
+extern bool sched_is_disabled_for_current_region_p (void);
+extern void sched_rgn_init (bool);
+extern void sched_rgn_finish (void);
+extern void rgn_setup_region (int);
+extern void sched_rgn_compute_dependencies (int);
+extern void sched_rgn_local_init (int);
+extern void sched_rgn_local_finish (void);
+extern void sched_rgn_local_free (void);
+extern void extend_regions (void);
+extern void rgn_make_new_region_out_of_new_block (basic_block);
+
+extern void compute_priorities (void);
+extern void increase_insn_priority (rtx_insn *, int);
+extern void debug_rgn_dependencies (int);
+extern void debug_dependencies (rtx_insn *, rtx_insn *);
+extern void dump_rgn_dependencies_dot (FILE *);
+extern void dump_rgn_dependencies_dot (const char *);
+
+extern void free_rgn_deps (void);
+extern int contributes_to_priority (rtx_insn *, rtx_insn *);
+extern void extend_rgns (int *, int *, sbitmap, int *);
+extern void deps_join (struct deps_desc *, struct deps_desc *);
+
+extern void rgn_setup_common_sched_info (void);
+extern void rgn_setup_sched_infos (void);
+
+extern void debug_regions (void);
+extern void debug_region (int);
+extern void dump_region_dot (FILE *, int);
+extern void dump_region_dot_file (const char *, int);
+
+extern void haifa_sched_init (void);
+extern void haifa_sched_finish (void);
+
+extern void find_modifiable_mems (rtx_insn *, rtx_insn *);
+
+/* sched-deps.c interface to walk, add, search, update, resolve, delete
+   and debug instruction dependencies.  */
+
+/* Constants defining dependences lists.  */
+
+/* No list.  */
+#define SD_LIST_NONE (0)
+
+/* hard_back_deps.  */
+#define SD_LIST_HARD_BACK (1)
+
+/* spec_back_deps.  */
+#define SD_LIST_SPEC_BACK (2)
+
+/* forw_deps.  */
+#define SD_LIST_FORW (4)
+
+/* resolved_back_deps.  */
+#define SD_LIST_RES_BACK (8)
+
+/* resolved_forw_deps.  */
+#define SD_LIST_RES_FORW (16)
+
+#define SD_LIST_BACK (SD_LIST_HARD_BACK | SD_LIST_SPEC_BACK)
+
+/* A type to hold above flags.  */
+typedef int sd_list_types_def;
+
+extern void sd_next_list (const_rtx, sd_list_types_def *, deps_list_t *, bool *);
+
+/* Iterator to walk through, resolve and delete dependencies.  */
+struct _sd_iterator
+{
+  /* What lists to walk.  Can be any combination of SD_LIST_* flags.  */
+  sd_list_types_def types;
+
+  /* Instruction dependencies lists of which will be walked.  */
+  rtx insn;
+
+  /* Pointer to the next field of the previous element.  This is not
+     simply a pointer to the next element to allow easy deletion from the
+     list.  When a dep is being removed from the list the iterator
+     will automatically advance because the value in *linkp will start
+     referring to the next element.  */
+  dep_link_t *linkp;
+
+  /* True if the current list is a resolved one.  */
+  bool resolved_p;
+};
+
+typedef struct _sd_iterator sd_iterator_def;
+
+/* ??? We can move some definitions that are used in below inline functions
+   out of sched-int.h to sched-deps.c provided that the below functions will
+   become global externals.
+   These definitions include:
+   * struct _deps_list: opaque pointer is needed at global scope.
+   * struct _dep_link: opaque pointer is needed at scope of sd_iterator_def.
+   * struct _dep_node: opaque pointer is needed at scope of
+   struct _deps_link.  */
+
+/* Return initialized iterator.  */
+static inline sd_iterator_def
+sd_iterator_start (rtx insn, sd_list_types_def types)
+{
+  /* Some dep_link a pointer to which will return NULL.  */
+  static dep_link_t null_link = NULL;
+
+  sd_iterator_def i;
+
+  i.types = types;
+  i.insn = insn;
+  i.linkp = &null_link;
+
+  /* Avoid 'uninitialized warning'.  */
+  i.resolved_p = false;
+
+  return i;
+}
+
+/* Return the current element.  */
+static inline bool
+sd_iterator_cond (sd_iterator_def *it_ptr, dep_t *dep_ptr)
+{
+  while (true)
+    {
+      dep_link_t link = *it_ptr->linkp;
+
+      if (link != NULL)
+	{
+	  *dep_ptr = DEP_LINK_DEP (link);
+	  return true;
+	}
+      else
+	{
+	  sd_list_types_def types = it_ptr->types;
+
+	  if (types != SD_LIST_NONE)
+	    /* Switch to next list.  */
+	    {
+	      deps_list_t list;
+
+	      sd_next_list (it_ptr->insn,
+			    &it_ptr->types, &list, &it_ptr->resolved_p);
+
+	      if (list)
+		{
+		  it_ptr->linkp = &DEPS_LIST_FIRST (list);
+		  continue;
+		}
+	    }
+
+	  *dep_ptr = NULL;
+	  return false;
+	}
+   }
+}
+
+/* Advance iterator.  */
+static inline void
+sd_iterator_next (sd_iterator_def *it_ptr)
+{
+  it_ptr->linkp = &DEP_LINK_NEXT (*it_ptr->linkp);
+}
+
+/* A cycle wrapper.  */
+#define FOR_EACH_DEP(INSN, LIST_TYPES, ITER, DEP)		\
+  for ((ITER) = sd_iterator_start ((INSN), (LIST_TYPES));	\
+       sd_iterator_cond (&(ITER), &(DEP));			\
+       sd_iterator_next (&(ITER)))
+
+#define IS_DISPATCH_ON 1
+#define IS_CMP 2
+#define DISPATCH_VIOLATION 3
+#define FITS_DISPATCH_WINDOW 4
+#define DISPATCH_INIT 5
+#define ADD_TO_DISPATCH_WINDOW 6
+
+extern int sd_lists_size (const_rtx, sd_list_types_def);
+extern bool sd_lists_empty_p (const_rtx, sd_list_types_def);
+extern void sd_init_insn (rtx_insn *);
+extern void sd_finish_insn (rtx_insn *);
+extern dep_t sd_find_dep_between (rtx, rtx, bool);
+extern void sd_add_dep (dep_t, bool);
+extern enum DEPS_ADJUST_RESULT sd_add_or_update_dep (dep_t, bool);
+extern void sd_resolve_dep (sd_iterator_def);
+extern void sd_unresolve_dep (sd_iterator_def);
+extern void sd_copy_back_deps (rtx_insn *, rtx_insn *, bool);
+extern void sd_delete_dep (sd_iterator_def);
+extern void sd_debug_lists (rtx, sd_list_types_def);
+
+/* Macros and declarations for scheduling fusion.  */
+#define FUSION_MAX_PRIORITY (INT_MAX)
+extern bool sched_fusion;
+
+#endif /* INSN_SCHEDULING */
+
+#endif /* GCC_SCHED_INT_H */
+
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/sel-sched-dump.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sel-sched-dump.h
new file mode 100644
index 0000000..d4f2456
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sel-sched-dump.h
@@ -0,0 +1,233 @@
+/* Instruction scheduling pass.  Log dumping infrastructure.
+   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+#ifndef GCC_SEL_SCHED_DUMP_H
+#define GCC_SEL_SCHED_DUMP_H
+
+
+
+/* These values control the dumping of control flow graph to the .dot file.  */
+enum sel_dump_cfg_def
+  {
+    /* Dump only current region.  */
+    SEL_DUMP_CFG_CURRENT_REGION = 2,
+
+    /* Dump note_list for this bb.  */
+    SEL_DUMP_CFG_BB_NOTES_LIST = 4,
+
+    /* Dump availability set from the bb header.  */
+    SEL_DUMP_CFG_AV_SET = 8,
+
+    /* Dump liveness set from the bb header.  */
+    SEL_DUMP_CFG_LV_SET = 16,
+
+    /* Dump insns of the given block.  */
+    SEL_DUMP_CFG_BB_INSNS = 32,
+
+    /* Show current fences when dumping cfg.  */
+    SEL_DUMP_CFG_FENCES = 64,
+
+    /* Show insn's seqnos when dumping cfg.  */
+    SEL_DUMP_CFG_INSN_SEQNO = 128,
+
+    /* Dump function name when dumping cfg.  */
+    SEL_DUMP_CFG_FUNCTION_NAME = 256,
+
+    /* Dump loop father number of the given bb.  */
+    SEL_DUMP_CFG_BB_LOOP = 512,
+
+    /* The default flags for cfg dumping.  */
+    SEL_DUMP_CFG_FLAGS = (SEL_DUMP_CFG_CURRENT_REGION
+                          | SEL_DUMP_CFG_BB_NOTES_LIST
+                          | SEL_DUMP_CFG_AV_SET
+                          | SEL_DUMP_CFG_LV_SET
+                          | SEL_DUMP_CFG_BB_INSNS
+                          | SEL_DUMP_CFG_FENCES
+                          | SEL_DUMP_CFG_INSN_SEQNO
+                          | SEL_DUMP_CFG_BB_LOOP)
+  };
+
+/* These values control the dumping of insns containing in expressions.  */
+enum dump_insn_rtx_def
+  {
+    /* Dump insn's UID.  */
+    DUMP_INSN_RTX_UID = 2,
+
+    /* Dump insn's pattern.  */
+    DUMP_INSN_RTX_PATTERN = 4,
+
+    /* Dump insn's basic block number.  */
+    DUMP_INSN_RTX_BBN = 8,
+
+    /* Dump all of the above.  */
+    DUMP_INSN_RTX_ALL = (DUMP_INSN_RTX_UID | DUMP_INSN_RTX_PATTERN
+			 | DUMP_INSN_RTX_BBN)
+  };
+
+extern void dump_insn_rtx_1 (rtx, int);
+extern void dump_insn_rtx (rtx);
+extern void debug_insn_rtx (rtx);
+
+/* These values control dumping of vinsns.  The meaning of different fields
+   of a vinsn is explained in sel-sched-ir.h.  */
+enum dump_vinsn_def
+  {
+    /* Dump the insn behind this vinsn.  */
+    DUMP_VINSN_INSN_RTX = 2,
+
+    /* Dump vinsn's type.  */
+    DUMP_VINSN_TYPE = 4,
+
+    /* Dump vinsn's count.  */
+    DUMP_VINSN_COUNT = 8,
+
+    /* Dump the cost (default latency) of the insn behind this vinsn.  */
+    DUMP_VINSN_COST = 16,
+
+    /* Dump all of the above.  */
+    DUMP_VINSN_ALL = (DUMP_VINSN_INSN_RTX | DUMP_VINSN_TYPE | DUMP_VINSN_COUNT
+		      | DUMP_VINSN_COST)
+  };
+
+extern void dump_vinsn_1 (vinsn_t, int);
+extern void dump_vinsn (vinsn_t);
+extern void debug_vinsn (vinsn_t);
+
+extern void debug (vinsn_def &ref);
+extern void debug (vinsn_def *ptr);
+extern void debug_verbose (vinsn_def &ref);
+extern void debug_verbose (vinsn_def *ptr);
+
+
+/* These values control dumping of expressions.  The meaning of the fields
+   is explained in sel-sched-ir.h.  */
+enum dump_expr_def
+  {
+    /* Dump the vinsn behind this expression.  */
+    DUMP_EXPR_VINSN = 2,
+
+    /* Dump expression's SPEC parameter.  */
+    DUMP_EXPR_SPEC = 4,
+
+    /* Dump expression's priority.  */
+    DUMP_EXPR_PRIORITY = 8,
+
+    /* Dump the number of times this expression was scheduled.  */
+    DUMP_EXPR_SCHED_TIMES = 16,
+
+    /* Dump speculative status of the expression.  */
+    DUMP_EXPR_SPEC_DONE_DS = 32,
+
+    /* Dump the basic block number which originated this expression.  */
+    DUMP_EXPR_ORIG_BB = 64,
+
+    /* Dump expression's usefulness.  */
+    DUMP_EXPR_USEFULNESS = 128,
+
+    /* Dump all of the above.  */
+    DUMP_EXPR_ALL = (DUMP_EXPR_VINSN | DUMP_EXPR_SPEC | DUMP_EXPR_PRIORITY
+		     | DUMP_EXPR_SCHED_TIMES | DUMP_EXPR_SPEC_DONE_DS
+		     | DUMP_EXPR_ORIG_BB | DUMP_EXPR_USEFULNESS)
+  };
+
+extern void dump_expr_1 (expr_t, int);
+extern void dump_expr (expr_t);
+extern void debug_expr (expr_t);
+
+extern void debug (expr_def &ref);
+extern void debug (expr_def *ptr);
+extern void debug_verbose (expr_def &ref);
+extern void debug_verbose (expr_def *ptr);
+
+
+/* A enumeration for dumping flags of an insn.  The difference from
+   dump_insn_rtx_def is that these fields are for insns in stream only.  */
+enum dump_insn_def
+{
+  /* Dump expression of this insn.  */
+  DUMP_INSN_EXPR = 2,
+
+  /* Dump insn's seqno.  */
+  DUMP_INSN_SEQNO = 4,
+
+  /* Dump the cycle on which insn was scheduled.  */
+  DUMP_INSN_SCHED_CYCLE = 8,
+
+  /* Dump insn's UID.  */
+  DUMP_INSN_UID = 16,
+
+  /* Dump insn's pattern.  */
+  DUMP_INSN_PATTERN = 32,
+
+  /* Dump insn's basic block number.  */
+  DUMP_INSN_BBN = 64,
+
+  /* Dump all of the above.  */
+  DUMP_INSN_ALL = (DUMP_INSN_EXPR | DUMP_INSN_SEQNO | DUMP_INSN_BBN
+		   | DUMP_INSN_SCHED_CYCLE | DUMP_INSN_UID | DUMP_INSN_PATTERN)
+};
+
+extern void dump_insn_1 (insn_t, int);
+extern void dump_insn (insn_t);
+extern void debug_insn (insn_t);
+
+/* When this flag is on, we are dumping to the .dot file.
+   When it is off, we are dumping to log.  */
+extern bool sched_dump_to_dot_p;
+
+
+/* Functions from sel-sched-dump.c.  */
+extern void sel_print (const char *fmt, ...) ATTRIBUTE_PRINTF_1;
+extern const char * sel_print_insn (const rtx_insn *, int);
+extern void free_sel_dump_data (void);
+
+extern void block_start (void);
+extern void block_finish (void);
+extern int get_print_blocks_num (void);
+extern void line_start (void);
+extern void line_finish (void);
+
+extern void sel_print_rtl (rtx x);
+extern void dump_insn_1 (insn_t, int);
+extern void dump_insn (insn_t);
+extern void dump_insn_vector (rtx_vec_t);
+extern void dump_expr (expr_t);
+extern void dump_used_regs (bitmap);
+extern void dump_av_set (av_set_t);
+extern void dump_lv_set (regset);
+extern void dump_blist (blist_t);
+extern void dump_flist (flist_t);
+extern void dump_hard_reg_set (const char *, HARD_REG_SET);
+extern void sel_debug_cfg_1 (int);
+extern void sel_debug_cfg (void);
+extern void setup_dump_cfg_params (void);
+
+/* Debug functions.  */
+extern void debug_expr (expr_t);
+extern void debug_av_set (av_set_t);
+extern void debug_lv_set (regset);
+extern void debug_ilist (ilist_t);
+extern void debug_blist (blist_t);
+extern void debug (vec<rtx> &ref);
+extern void debug (vec<rtx> *ptr);
+extern void debug_insn_vector (rtx_vec_t);
+extern void debug_hard_reg_set (HARD_REG_SET);
+extern rtx debug_mem_addr_value (rtx);
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/sel-sched-ir.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sel-sched-ir.h
new file mode 100644
index 0000000..5dd273f
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sel-sched-ir.h
@@ -0,0 +1,1675 @@
+/* Instruction scheduling pass.  This file contains definitions used
+   internally in the scheduler.
+   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SEL_SCHED_IR_H
+#define GCC_SEL_SCHED_IR_H
+
+/* For state_t.  */
+/* For reg_note.  */
+
+/* tc_t is a short for target context.  This is a state of the target
+   backend.  */
+typedef void *tc_t;
+
+/* List data types used for av sets, fences, paths, and boundaries.  */
+
+/* Forward declarations for types that are part of some list nodes.  */
+struct _list_node;
+
+/* List backend.  */
+typedef struct _list_node *_list_t;
+#define _LIST_NEXT(L) ((L)->next)
+
+/* Instruction data that is part of vinsn type.  */
+struct idata_def;
+typedef struct idata_def *idata_t;
+
+/* A virtual instruction, i.e. an instruction as seen by the scheduler.  */
+struct vinsn_def;
+typedef struct vinsn_def *vinsn_t;
+
+/* RTX list.
+   This type is the backend for ilist.  */
+typedef _list_t _xlist_t;
+#define _XLIST_X(L) ((L)->u.x)
+#define _XLIST_NEXT(L) (_LIST_NEXT (L))
+
+/* Instruction.  */
+typedef rtx_insn *insn_t;
+
+/* List of insns.  */
+typedef _list_t ilist_t;
+#define ILIST_INSN(L) ((L)->u.insn)
+#define ILIST_NEXT(L) (_LIST_NEXT (L))
+
+/* This lists possible transformations that done locally, i.e. in
+   moveup_expr.  */
+enum local_trans_type
+  {
+    TRANS_SUBSTITUTION,
+    TRANS_SPECULATION
+  };
+
+/* This struct is used to record the history of expression's
+   transformations.  */
+struct expr_history_def_1
+{
+  /* UID of the insn.  */
+  unsigned uid;
+
+  /* How the expression looked like.  */
+  vinsn_t old_expr_vinsn;
+
+  /* How the expression looks after the transformation.  */
+  vinsn_t new_expr_vinsn;
+
+  /* And its speculative status.  */
+  ds_t spec_ds;
+
+  /* Type of the transformation.  */
+  enum local_trans_type type;
+};
+
+typedef struct expr_history_def_1 expr_history_def;
+
+
+/* Expression information.  */
+struct _expr
+{
+  /* Insn description.  */
+  vinsn_t vinsn;
+
+  /* SPEC is the degree of speculativeness.
+     FIXME: now spec is increased when an rhs is moved through a
+     conditional, thus showing only control speculativeness.  In the
+     future we'd like to count data spec separately to allow a better
+     control on scheduling.  */
+  int spec;
+
+  /* Degree of speculativeness measured as probability of executing
+     instruction's original basic block given relative to
+     the current scheduling point.  */
+  int usefulness;
+
+  /* A priority of this expression.  */
+  int priority;
+
+  /* A priority adjustment of this expression.  */
+  int priority_adj;
+
+  /* Number of times the insn was scheduled.  */
+  int sched_times;
+
+  /* A basic block index this was originated from.  Zero when there is
+     more than one originator.  */
+  int orig_bb_index;
+
+  /* Instruction should be of SPEC_DONE_DS type in order to be moved to this
+     point.  */
+  ds_t spec_done_ds;
+
+  /* SPEC_TO_CHECK_DS hold speculation types that should be checked
+     (used only during move_op ()).  */
+  ds_t spec_to_check_ds;
+
+  /* Cycle on which original insn was scheduled.  Zero when it has not yet
+     been scheduled or more than one originator.  */
+  int orig_sched_cycle;
+
+  /* This vector contains the history of insn's transformations.  */
+  vec<expr_history_def> history_of_changes;
+
+  /* True (1) when original target (register or memory) of this instruction
+     is available for scheduling, false otherwise.  -1 means we're not sure;
+     please run find_used_regs to clarify.  */
+  signed char target_available;
+
+  /* True when this expression needs a speculation check to be scheduled.
+     This is used during find_used_regs.  */
+  BOOL_BITFIELD needs_spec_check_p : 1;
+
+  /* True when the expression was substituted.  Used for statistical
+     purposes.  */
+  BOOL_BITFIELD was_substituted : 1;
+
+  /* True when the expression was renamed.  */
+  BOOL_BITFIELD was_renamed : 1;
+
+  /* True when expression can't be moved.  */
+  BOOL_BITFIELD cant_move : 1;
+};
+
+typedef struct _expr expr_def;
+typedef expr_def *expr_t;
+
+#define EXPR_VINSN(EXPR) ((EXPR)->vinsn)
+#define EXPR_INSN_RTX(EXPR) (VINSN_INSN_RTX (EXPR_VINSN (EXPR)))
+#define EXPR_PATTERN(EXPR) (VINSN_PATTERN (EXPR_VINSN (EXPR)))
+#define EXPR_LHS(EXPR) (VINSN_LHS (EXPR_VINSN (EXPR)))
+#define EXPR_RHS(EXPR) (VINSN_RHS (EXPR_VINSN (EXPR)))
+#define EXPR_TYPE(EXPR) (VINSN_TYPE (EXPR_VINSN (EXPR)))
+#define EXPR_SEPARABLE_P(EXPR) (VINSN_SEPARABLE_P (EXPR_VINSN (EXPR)))
+
+#define EXPR_SPEC(EXPR) ((EXPR)->spec)
+#define EXPR_USEFULNESS(EXPR) ((EXPR)->usefulness)
+#define EXPR_PRIORITY(EXPR) ((EXPR)->priority)
+#define EXPR_PRIORITY_ADJ(EXPR) ((EXPR)->priority_adj)
+#define EXPR_SCHED_TIMES(EXPR) ((EXPR)->sched_times)
+#define EXPR_ORIG_BB_INDEX(EXPR) ((EXPR)->orig_bb_index)
+#define EXPR_ORIG_SCHED_CYCLE(EXPR) ((EXPR)->orig_sched_cycle)
+#define EXPR_SPEC_DONE_DS(EXPR) ((EXPR)->spec_done_ds)
+#define EXPR_SPEC_TO_CHECK_DS(EXPR) ((EXPR)->spec_to_check_ds)
+#define EXPR_HISTORY_OF_CHANGES(EXPR) ((EXPR)->history_of_changes)
+#define EXPR_TARGET_AVAILABLE(EXPR) ((EXPR)->target_available)
+#define EXPR_NEEDS_SPEC_CHECK_P(EXPR) ((EXPR)->needs_spec_check_p)
+#define EXPR_WAS_SUBSTITUTED(EXPR) ((EXPR)->was_substituted)
+#define EXPR_WAS_RENAMED(EXPR) ((EXPR)->was_renamed)
+#define EXPR_CANT_MOVE(EXPR) ((EXPR)->cant_move)
+
+/* Insn definition for list of original insns in find_used_regs.  */
+struct _def
+{
+  insn_t orig_insn;
+
+  /* FIXME: Get rid of CROSSES_CALL in each def, since if we're moving up
+     rhs from two different places, but only one of the code motion paths
+     crosses a call, we can't use any of the call_used_regs, no matter which
+     path or whether all paths crosses a call.  Thus we should move CROSSES_CALL
+     to static params.  */
+  bool crosses_call;
+};
+typedef struct _def *def_t;
+
+
+/* Availability sets are sets of expressions we're scheduling.  */
+typedef _list_t av_set_t;
+#define _AV_SET_EXPR(L) (&(L)->u.expr)
+#define _AV_SET_NEXT(L) (_LIST_NEXT (L))
+
+
+/* Boundary of the current fence group.  */
+struct _bnd
+{
+  /* The actual boundary instruction.  */
+  insn_t to;
+
+  /* Its path to the fence.  */
+  ilist_t ptr;
+
+  /* Availability set at the boundary.  */
+  av_set_t av;
+
+  /* This set moved to the fence.  */
+  av_set_t av1;
+
+  /* Deps context at this boundary.  As long as we have one boundary per fence,
+     this is just a pointer to the same deps context as in the corresponding
+     fence.  */
+  deps_t dc;
+};
+typedef struct _bnd *bnd_t;
+#define BND_TO(B) ((B)->to)
+
+/* PTR stands not for pointer as you might think, but as a Path To Root of the
+   current instruction group from boundary B.  */
+#define BND_PTR(B) ((B)->ptr)
+#define BND_AV(B) ((B)->av)
+#define BND_AV1(B) ((B)->av1)
+#define BND_DC(B) ((B)->dc)
+
+/* List of boundaries.  */
+typedef _list_t blist_t;
+#define BLIST_BND(L) (&(L)->u.bnd)
+#define BLIST_NEXT(L) (_LIST_NEXT (L))
+
+
+/* Fence information.  A fence represents current scheduling point and also
+   blocks code motion through it when pipelining.  */
+struct _fence
+{
+  /* Insn before which we gather an instruction group.*/
+  insn_t insn;
+
+  /* Modeled state of the processor pipeline.  */
+  state_t state;
+
+  /* Current cycle that is being scheduled on this fence.  */
+  int cycle;
+
+  /* Number of insns that were scheduled on the current cycle.
+     This information has to be local to a fence.  */
+  int cycle_issued_insns;
+
+  /* At the end of fill_insns () this field holds the list of the instructions
+     that are inner boundaries of the scheduled parallel group.  */
+  ilist_t bnds;
+
+  /* Deps context at this fence.  It is used to model dependencies at the
+     fence so that insn ticks can be properly evaluated.  */
+  deps_t dc;
+
+  /* Target context at this fence.  Used to save and load any local target
+     scheduling information when changing fences.  */
+  tc_t tc;
+
+  /* A vector of insns that are scheduled but not yet completed.  */
+  vec<rtx_insn *, va_gc> *executing_insns;
+
+  /* A vector indexed by UIDs that caches the earliest cycle on which
+     an insn can be scheduled on this fence.  */
+  int *ready_ticks;
+
+  /* Its size.  */
+  int ready_ticks_size;
+
+  /* Insn, which has been scheduled last on this fence.  */
+  rtx_insn *last_scheduled_insn;
+
+  /* The last value of can_issue_more variable on this fence.  */
+  int issue_more;
+
+  /* If non-NULL force the next scheduled insn to be SCHED_NEXT.  */
+  rtx_insn *sched_next;
+
+  /* True if fill_insns processed this fence.  */
+  BOOL_BITFIELD processed_p : 1;
+
+  /* True if fill_insns actually scheduled something on this fence.  */
+  BOOL_BITFIELD scheduled_p : 1;
+
+  /* True when the next insn scheduled here would start a cycle.  */
+  BOOL_BITFIELD starts_cycle_p : 1;
+
+  /* True when the next insn scheduled here would be scheduled after a stall.  */
+  BOOL_BITFIELD after_stall_p : 1;
+};
+typedef struct _fence *fence_t;
+
+#define FENCE_INSN(F) ((F)->insn)
+#define FENCE_STATE(F) ((F)->state)
+#define FENCE_BNDS(F) ((F)->bnds)
+#define FENCE_PROCESSED_P(F) ((F)->processed_p)
+#define FENCE_SCHEDULED_P(F) ((F)->scheduled_p)
+#define FENCE_ISSUED_INSNS(F) ((F)->cycle_issued_insns)
+#define FENCE_CYCLE(F) ((F)->cycle)
+#define FENCE_STARTS_CYCLE_P(F) ((F)->starts_cycle_p)
+#define FENCE_AFTER_STALL_P(F) ((F)->after_stall_p)
+#define FENCE_DC(F) ((F)->dc)
+#define FENCE_TC(F) ((F)->tc)
+#define FENCE_LAST_SCHEDULED_INSN(F) ((F)->last_scheduled_insn)
+#define FENCE_ISSUE_MORE(F) ((F)->issue_more)
+#define FENCE_EXECUTING_INSNS(F) ((F)->executing_insns)
+#define FENCE_READY_TICKS(F) ((F)->ready_ticks)
+#define FENCE_READY_TICKS_SIZE(F) ((F)->ready_ticks_size)
+#define FENCE_SCHED_NEXT(F) ((F)->sched_next)
+
+/* List of fences.  */
+typedef _list_t flist_t;
+#define FLIST_FENCE(L) (&(L)->u.fence)
+#define FLIST_NEXT(L) (_LIST_NEXT (L))
+
+/* List of fences with pointer to the tail node.  */
+struct flist_tail_def
+{
+  flist_t head;
+  flist_t *tailp;
+};
+
+typedef struct flist_tail_def *flist_tail_t;
+#define FLIST_TAIL_HEAD(L) ((L)->head)
+#define FLIST_TAIL_TAILP(L) ((L)->tailp)
+
+/* List node information.  A list node can be any of the types above.  */
+struct _list_node
+{
+  _list_t next;
+
+  union
+  {
+    rtx x;
+    insn_t insn;
+    struct _bnd bnd;
+    expr_def expr;
+    struct _fence fence;
+    struct _def def;
+    void *data;
+  } u;
+};
+
+
+/* _list_t functions.
+   All of _*list_* functions are used through accessor macros, thus
+   we can't move them in sel-sched-ir.c.  */
+extern object_allocator<_list_node> sched_lists_pool;
+
+static inline _list_t
+_list_alloc (void)
+{
+  return sched_lists_pool.allocate ();
+}
+
+static inline void
+_list_add (_list_t *lp)
+{
+  _list_t l = _list_alloc ();
+
+  _LIST_NEXT (l) = *lp;
+  *lp = l;
+}
+
+static inline void
+_list_remove_nofree (_list_t *lp)
+{
+  _list_t n = *lp;
+
+  *lp = _LIST_NEXT (n);
+}
+
+static inline void
+_list_remove (_list_t *lp)
+{
+  _list_t n = *lp;
+
+  *lp = _LIST_NEXT (n);
+  sched_lists_pool.remove (n);
+}
+
+static inline void
+_list_clear (_list_t *l)
+{
+  while (*l)
+    _list_remove (l);
+}
+
+
+/* List iterator backend.  */
+struct _list_iterator
+{
+  /* The list we're iterating.  */
+  _list_t *lp;
+
+  /* True when this iterator supprts removing.  */
+  bool can_remove_p;
+
+  /* True when we've actually removed something.  */
+  bool removed_p;
+};
+
+static inline void
+_list_iter_start (_list_iterator *ip, _list_t *lp, bool can_remove_p)
+{
+  ip->lp = lp;
+  ip->can_remove_p = can_remove_p;
+  ip->removed_p = false;
+}
+
+static inline void
+_list_iter_next (_list_iterator *ip)
+{
+  if (!ip->removed_p)
+    ip->lp = &_LIST_NEXT (*ip->lp);
+  else
+    ip->removed_p = false;
+}
+
+static inline void
+_list_iter_remove (_list_iterator *ip)
+{
+  gcc_assert (!ip->removed_p && ip->can_remove_p);
+  _list_remove (ip->lp);
+  ip->removed_p = true;
+}
+
+static inline void
+_list_iter_remove_nofree (_list_iterator *ip)
+{
+  gcc_assert (!ip->removed_p && ip->can_remove_p);
+  _list_remove_nofree (ip->lp);
+  ip->removed_p = true;
+}
+
+/* General macros to traverse a list.  FOR_EACH_* interfaces are
+   implemented using these.  */
+#define _FOR_EACH(TYPE, ELEM, I, L)				\
+  for (_list_iter_start (&(I), &(L), false);			\
+       _list_iter_cond_##TYPE (*(I).lp, &(ELEM));		\
+       _list_iter_next (&(I)))
+
+#define _FOR_EACH_1(TYPE, ELEM, I, LP)                              \
+  for (_list_iter_start (&(I), (LP), true);                         \
+       _list_iter_cond_##TYPE (*(I).lp, &(ELEM));                   \
+       _list_iter_next (&(I)))
+
+
+/* _xlist_t functions.  */
+
+static inline void
+_xlist_add (_xlist_t *lp, rtx x)
+{
+  _list_add (lp);
+  _XLIST_X (*lp) = x;
+}
+
+#define _xlist_remove(LP) (_list_remove (LP))
+#define _xlist_clear(LP) (_list_clear (LP))
+
+static inline bool
+_xlist_is_in_p (_xlist_t l, rtx x)
+{
+  while (l)
+    {
+      if (_XLIST_X (l) == x)
+        return true;
+      l = _XLIST_NEXT (l);
+    }
+
+  return false;
+}
+
+/* Used through _FOR_EACH.  */
+static inline bool
+_list_iter_cond_x (_xlist_t l, rtx *xp)
+{
+  if (l)
+    {
+      *xp = _XLIST_X (l);
+      return true;
+    }
+
+  return false;
+}
+
+#define _xlist_iter_remove(IP) (_list_iter_remove (IP))
+
+typedef _list_iterator _xlist_iterator;
+#define _FOR_EACH_X(X, I, L) _FOR_EACH (x, (X), (I), (L))
+#define _FOR_EACH_X_1(X, I, LP) _FOR_EACH_1 (x, (X), (I), (LP))
+
+
+/* ilist_t functions.  */
+
+static inline void
+ilist_add (ilist_t *lp, insn_t insn)
+{
+  _list_add (lp);
+  ILIST_INSN (*lp) = insn;
+}
+#define ilist_remove(LP) (_list_remove (LP))
+#define ilist_clear(LP) (_list_clear (LP))
+
+static inline bool
+ilist_is_in_p (ilist_t l, insn_t insn)
+{
+  while (l)
+    {
+      if (ILIST_INSN (l) == insn)
+        return true;
+      l = ILIST_NEXT (l);
+    }
+
+  return false;
+}
+
+/* Used through _FOR_EACH.  */
+static inline bool
+_list_iter_cond_insn (ilist_t l, insn_t *ip)
+{
+  if (l)
+    {
+      *ip = ILIST_INSN (l);
+      return true;
+    }
+
+  return false;
+}
+
+#define ilist_iter_remove(IP) (_list_iter_remove (IP))
+
+typedef _list_iterator ilist_iterator;
+#define FOR_EACH_INSN(INSN, I, L) _FOR_EACH (insn, (INSN), (I), (L))
+#define FOR_EACH_INSN_1(INSN, I, LP) _FOR_EACH_1 (insn, (INSN), (I), (LP))
+
+
+/* Av set iterators.  */
+typedef _list_iterator av_set_iterator;
+#define FOR_EACH_EXPR(EXPR, I, AV) _FOR_EACH (expr, (EXPR), (I), (AV))
+#define FOR_EACH_EXPR_1(EXPR, I, AV) _FOR_EACH_1 (expr, (EXPR), (I), (AV))
+
+inline bool
+_list_iter_cond_expr (av_set_t av, expr_t *exprp)
+{
+  if (av)
+    {
+      *exprp = _AV_SET_EXPR (av);
+      return true;
+    }
+
+  return false;
+}
+
+
+/* Def list iterators.  */
+typedef _list_t def_list_t;
+typedef _list_iterator def_list_iterator;
+
+#define DEF_LIST_NEXT(L) (_LIST_NEXT (L))
+#define DEF_LIST_DEF(L) (&(L)->u.def)
+
+#define FOR_EACH_DEF(DEF, I, DEF_LIST) _FOR_EACH (def, (DEF), (I), (DEF_LIST))
+
+static inline bool
+_list_iter_cond_def (def_list_t def_list, def_t *def)
+{
+  if (def_list)
+    {
+      *def = DEF_LIST_DEF (def_list);
+      return true;
+    }
+
+  return false;
+}
+
+
+/* InstructionData.  Contains information about insn pattern.  */
+struct idata_def
+{
+  /* Type of the insn.
+     o CALL_INSN - Call insn
+     o JUMP_INSN - Jump insn
+     o INSN - INSN that cannot be cloned
+     o USE - INSN that can be cloned
+     o SET - INSN that can be cloned and separable into lhs and rhs
+     o PC - simplejump.  Insns that simply redirect control flow should not
+     have any dependencies.  Sched-deps.c, though, might consider them as
+     producers or consumers of certain registers.  To avoid that we handle
+     dependency for simple jumps ourselves.  */
+  int type;
+
+  /* If insn is a SET, this is its left hand side.  */
+  rtx lhs;
+
+  /* If insn is a SET, this is its right hand side.  */
+  rtx rhs;
+
+  /* Registers that are set/used by this insn.  This info is now gathered
+     via sched-deps.c.  The downside of this is that we also use live info
+     from flow that is accumulated in the basic blocks.  These two infos
+     can be slightly inconsistent, hence in the beginning we make a pass
+     through CFG and calculating the conservative solution for the info in
+     basic blocks.  When this scheduler will be switched to use dataflow,
+     this can be unified as df gives us both per basic block and per
+     instruction info.  Actually, we don't do that pass and just hope
+     for the best.  */
+  regset reg_sets;
+
+  regset reg_clobbers;
+
+  regset reg_uses;
+};
+
+#define IDATA_TYPE(ID) ((ID)->type)
+#define IDATA_LHS(ID) ((ID)->lhs)
+#define IDATA_RHS(ID) ((ID)->rhs)
+#define IDATA_REG_SETS(ID) ((ID)->reg_sets)
+#define IDATA_REG_USES(ID) ((ID)->reg_uses)
+#define IDATA_REG_CLOBBERS(ID) ((ID)->reg_clobbers)
+
+/* Type to represent all needed info to emit an insn.
+   This is a virtual equivalent of the insn.
+   Every insn in the stream has an associated vinsn.  This is used
+   to reduce memory consumption basing on the fact that many insns
+   don't change through the scheduler.
+
+   vinsn can be either normal or unique.
+   * Normal vinsn is the one, that can be cloned multiple times and typically
+   corresponds to normal instruction.
+
+   * Unique vinsn derivates from CALL, ASM, JUMP (for a while) and other
+   unusual stuff.  Such a vinsn is described by its INSN field, which is a
+   reference to the original instruction.  */
+struct vinsn_def
+{
+  /* Associated insn.  */
+  rtx_insn *insn_rtx;
+
+  /* Its description.  */
+  struct idata_def id;
+
+  /* Hash of vinsn.  It is computed either from pattern or from rhs using
+     hash_rtx.  It is not placed in ID for faster compares.  */
+  unsigned hash;
+
+  /* Hash of the insn_rtx pattern.  */
+  unsigned hash_rtx;
+
+  /* Smart pointer counter.  */
+  int count;
+
+  /* Cached cost of the vinsn.  To access it please use vinsn_cost ().  */
+  int cost;
+
+  /* Mark insns that may trap so we don't move them through jumps.  */
+  bool may_trap_p;
+};
+
+#define VINSN_INSN_RTX(VI) ((VI)->insn_rtx)
+#define VINSN_PATTERN(VI) (PATTERN (VINSN_INSN_RTX (VI)))
+
+#define VINSN_ID(VI) (&((VI)->id))
+#define VINSN_HASH(VI) ((VI)->hash)
+#define VINSN_HASH_RTX(VI) ((VI)->hash_rtx)
+#define VINSN_TYPE(VI) (IDATA_TYPE (VINSN_ID (VI)))
+#define VINSN_SEPARABLE_P(VI) (VINSN_TYPE (VI) == SET)
+#define VINSN_CLONABLE_P(VI) (VINSN_SEPARABLE_P (VI) || VINSN_TYPE (VI) == USE)
+#define VINSN_UNIQUE_P(VI) (!VINSN_CLONABLE_P (VI))
+#define VINSN_LHS(VI) (IDATA_LHS (VINSN_ID (VI)))
+#define VINSN_RHS(VI) (IDATA_RHS (VINSN_ID (VI)))
+#define VINSN_REG_SETS(VI) (IDATA_REG_SETS (VINSN_ID (VI)))
+#define VINSN_REG_USES(VI) (IDATA_REG_USES (VINSN_ID (VI)))
+#define VINSN_REG_CLOBBERS(VI) (IDATA_REG_CLOBBERS (VINSN_ID (VI)))
+#define VINSN_COUNT(VI) ((VI)->count)
+#define VINSN_MAY_TRAP_P(VI) ((VI)->may_trap_p)
+
+
+/* An entry of the hashtable describing transformations happened when
+   moving up through an insn.  */
+struct transformed_insns
+{
+  /* Previous vinsn.  Used to find the proper element.  */
+  vinsn_t vinsn_old;
+
+  /* A new vinsn.  */
+  vinsn_t vinsn_new;
+
+  /* Speculative status.  */
+  ds_t ds;
+
+  /* Type of transformation happened.  */
+  enum local_trans_type type;
+
+  /* Whether a conflict on the target register happened.  */
+  BOOL_BITFIELD was_target_conflict : 1;
+
+  /* Whether a check was needed.  */
+  BOOL_BITFIELD needs_check : 1;
+};
+
+/* Indexed by INSN_LUID, the collection of all data associated with
+   a single instruction that is in the stream.  */
+struct _sel_insn_data
+{
+  /* The expression that contains vinsn for this insn and some
+     flow-sensitive data like priority.  */
+  expr_def expr;
+
+  /* If (WS_LEVEL == GLOBAL_LEVEL) then AV is empty.  */
+  int ws_level;
+
+  /* A number that helps in defining a traversing order for a region.  */
+  int seqno;
+
+  /* A liveness data computed above this insn.  */
+  regset live;
+
+  /* An INSN_UID bit is set when deps analysis result is already known.  */
+  bitmap analyzed_deps;
+
+  /* An INSN_UID bit is set when a hard dep was found, not set when
+     no dependence is found.  This is meaningful only when the analyzed_deps
+     bitmap has its bit set.  */
+  bitmap found_deps;
+
+  /* An INSN_UID bit is set when this is a bookkeeping insn generated from
+     a parent with this uid.  If a parent is a bookkeeping copy, all its
+     originators are transitively included in this set.  */
+  bitmap originators;
+
+  /* A hashtable caching the result of insn transformations through this one.  */
+  htab_t transformed_insns;
+
+  /* A context incapsulating this insn.  */
+  struct deps_desc deps_context;
+
+  /* This field is initialized at the beginning of scheduling and is used
+     to handle sched group instructions.  If it is non-null, then it points
+     to the instruction, which should be forced to schedule next.  Such
+     instructions are unique.  */
+  insn_t sched_next;
+
+  /* Cycle at which insn was scheduled.  It is greater than zero if insn was
+     scheduled.  This is used for bundling.  */
+  int sched_cycle;
+
+  /* Cycle at which insn's data will be fully ready.  */
+  int ready_cycle;
+
+  /* Speculations that are being checked by this insn.  */
+  ds_t spec_checked_ds;
+
+  /* Whether the live set valid or not.  */
+  BOOL_BITFIELD live_valid_p : 1;
+  /* Insn is an ASM.  */
+  BOOL_BITFIELD asm_p : 1;
+
+  /* True when an insn is scheduled after we've determined that a stall is
+     required.
+     This is used when emulating the Haifa scheduler for bundling.  */
+  BOOL_BITFIELD after_stall_p : 1;
+};
+
+typedef struct _sel_insn_data sel_insn_data_def;
+typedef sel_insn_data_def *sel_insn_data_t;
+
+extern vec<sel_insn_data_def> s_i_d;
+
+/* Accessor macros for s_i_d.  */
+#define SID(INSN) (&s_i_d[INSN_LUID (INSN)])
+#define SID_BY_UID(UID) (&s_i_d[LUID_BY_UID (UID)])
+
+extern sel_insn_data_def insn_sid (insn_t);
+
+#define INSN_ASM_P(INSN) (SID (INSN)->asm_p)
+#define INSN_SCHED_NEXT(INSN) (SID (INSN)->sched_next)
+#define INSN_ANALYZED_DEPS(INSN) (SID (INSN)->analyzed_deps)
+#define INSN_FOUND_DEPS(INSN) (SID (INSN)->found_deps)
+#define INSN_DEPS_CONTEXT(INSN) (SID (INSN)->deps_context)
+#define INSN_ORIGINATORS(INSN) (SID (INSN)->originators)
+#define INSN_ORIGINATORS_BY_UID(UID) (SID_BY_UID (UID)->originators)
+#define INSN_TRANSFORMED_INSNS(INSN) (SID (INSN)->transformed_insns)
+
+#define INSN_EXPR(INSN) (&SID (INSN)->expr)
+#define INSN_LIVE(INSN) (SID (INSN)->live)
+#define INSN_LIVE_VALID_P(INSN) (SID (INSN)->live_valid_p)
+#define INSN_VINSN(INSN) (EXPR_VINSN (INSN_EXPR (INSN)))
+#define INSN_TYPE(INSN) (VINSN_TYPE (INSN_VINSN (INSN)))
+#define INSN_SIMPLEJUMP_P(INSN) (INSN_TYPE (INSN) == PC)
+#define INSN_LHS(INSN) (VINSN_LHS (INSN_VINSN (INSN)))
+#define INSN_RHS(INSN) (VINSN_RHS (INSN_VINSN (INSN)))
+#define INSN_REG_SETS(INSN) (VINSN_REG_SETS (INSN_VINSN (INSN)))
+#define INSN_REG_CLOBBERS(INSN) (VINSN_REG_CLOBBERS (INSN_VINSN (INSN)))
+#define INSN_REG_USES(INSN) (VINSN_REG_USES (INSN_VINSN (INSN)))
+#define INSN_SCHED_TIMES(INSN) (EXPR_SCHED_TIMES (INSN_EXPR (INSN)))
+#define INSN_SEQNO(INSN) (SID (INSN)->seqno)
+#define INSN_AFTER_STALL_P(INSN) (SID (INSN)->after_stall_p)
+#define INSN_SCHED_CYCLE(INSN) (SID (INSN)->sched_cycle)
+#define INSN_READY_CYCLE(INSN) (SID (INSN)->ready_cycle)
+#define INSN_SPEC_CHECKED_DS(INSN) (SID (INSN)->spec_checked_ds)
+
+/* A global level shows whether an insn is valid or not.  */
+extern int global_level;
+
+#define INSN_WS_LEVEL(INSN) (SID (INSN)->ws_level)
+
+extern av_set_t get_av_set (insn_t);
+extern int get_av_level (insn_t);
+
+#define AV_SET(INSN) (get_av_set (INSN))
+#define AV_LEVEL(INSN) (get_av_level (INSN))
+#define AV_SET_VALID_P(INSN) (AV_LEVEL (INSN) == global_level)
+
+/* A list of fences currently in the works.  */
+extern flist_t fences;
+
+/* A NOP pattern used as a placeholder for real insns.  */
+extern rtx nop_pattern;
+
+/* An insn that 'contained' in EXIT block.  */
+extern rtx_insn *exit_insn;
+
+/* Provide a separate luid for the insn.  */
+#define INSN_INIT_TODO_LUID (1)
+
+/* Initialize s_s_i_d.  */
+#define INSN_INIT_TODO_SSID (2)
+
+/* Initialize data for simplejump.  */
+#define INSN_INIT_TODO_SIMPLEJUMP (4)
+
+/* Return true if INSN is a local NOP.  The nop is local in the sense that
+   it was emitted by the scheduler as a temporary insn and will soon be
+   deleted.  These nops are identified by their pattern.  */
+#define INSN_NOP_P(INSN) (PATTERN (INSN) == nop_pattern)
+
+/* Return true if INSN is linked into instruction stream.
+   NB: It is impossible for INSN to have one field null and the other not
+   null: gcc_assert ((PREV_INSN (INSN) == NULL_RTX)
+   == (NEXT_INSN (INSN) == NULL_RTX)) is valid.  */
+#define INSN_IN_STREAM_P(INSN) (PREV_INSN (INSN) && NEXT_INSN (INSN))
+
+/* Return true if INSN is in current fence.  */
+#define IN_CURRENT_FENCE_P(INSN) (flist_lookup (fences, INSN) != NULL)
+
+/* Marks loop as being considered for pipelining.  */
+#define MARK_LOOP_FOR_PIPELINING(LOOP) ((LOOP)->aux = (void *)(size_t)(1))
+#define LOOP_MARKED_FOR_PIPELINING_P(LOOP) ((size_t)((LOOP)->aux))
+
+/* Saved loop preheader to transfer when scheduling the loop.  */
+#define LOOP_PREHEADER_BLOCKS(LOOP) ((size_t)((LOOP)->aux) == 1         \
+                                     ? NULL                             \
+                                     : ((vec<basic_block> *) (LOOP)->aux))
+#define SET_LOOP_PREHEADER_BLOCKS(LOOP,BLOCKS) ((LOOP)->aux             \
+                                                = (BLOCKS != NULL       \
+                                                   ? BLOCKS             \
+                                                   : (LOOP)->aux))
+
+extern bitmap blocks_to_reschedule;
+
+
+/* A variable to track which part of rtx we are scanning in
+   sched-deps.c: sched_analyze_insn ().  */
+enum deps_where_t
+{
+  DEPS_IN_INSN,
+  DEPS_IN_LHS,
+  DEPS_IN_RHS,
+  DEPS_IN_NOWHERE
+};
+
+
+/* Per basic block data for the whole CFG.  */
+struct sel_global_bb_info_def
+{
+  /* For each bb header this field contains a set of live registers.
+     For all other insns this field has a NULL.
+     We also need to know LV sets for the instructions, that are immediately
+     after the border of the region.  */
+  regset lv_set;
+
+  /* Status of LV_SET.
+     true - block has usable LV_SET.
+     false - block's LV_SET should be recomputed.  */
+  bool lv_set_valid_p;
+};
+
+typedef sel_global_bb_info_def *sel_global_bb_info_t;
+
+
+/* Per basic block data.  This array is indexed by basic block index.  */
+extern vec<sel_global_bb_info_def> sel_global_bb_info;
+
+extern void sel_extend_global_bb_info (void);
+extern void sel_finish_global_bb_info (void);
+
+/* Get data for BB.  */
+#define SEL_GLOBAL_BB_INFO(BB)					\
+  (&sel_global_bb_info[(BB)->index])
+
+/* Access macros.  */
+#define BB_LV_SET(BB) (SEL_GLOBAL_BB_INFO (BB)->lv_set)
+#define BB_LV_SET_VALID_P(BB) (SEL_GLOBAL_BB_INFO (BB)->lv_set_valid_p)
+
+/* Per basic block data for the region.  */
+struct sel_region_bb_info_def
+{
+  /* This insn stream is constructed in such a way that it should be
+     traversed by PREV_INSN field - (*not* NEXT_INSN).  */
+  rtx_insn *note_list;
+
+  /* Cached availability set at the beginning of a block.
+     See also AV_LEVEL () for conditions when this av_set can be used.  */
+  av_set_t av_set;
+
+  /* If (AV_LEVEL == GLOBAL_LEVEL) then AV is valid.  */
+  int av_level;
+};
+
+typedef sel_region_bb_info_def *sel_region_bb_info_t;
+
+
+/* Per basic block data.  This array is indexed by basic block index.  */
+extern vec<sel_region_bb_info_def> sel_region_bb_info;
+
+/* Get data for BB.  */
+#define SEL_REGION_BB_INFO(BB) (&sel_region_bb_info[(BB)->index])
+
+/* Get BB's note_list.
+   A note_list is a list of various notes that was scattered across BB
+   before scheduling, and will be appended at the beginning of BB after
+   scheduling is finished.  */
+#define BB_NOTE_LIST(BB) (SEL_REGION_BB_INFO (BB)->note_list)
+
+#define BB_AV_SET(BB) (SEL_REGION_BB_INFO (BB)->av_set)
+#define BB_AV_LEVEL(BB) (SEL_REGION_BB_INFO (BB)->av_level)
+#define BB_AV_SET_VALID_P(BB) (BB_AV_LEVEL (BB) == global_level)
+
+/* Used in bb_in_ebb_p.  */
+extern bitmap_head *forced_ebb_heads;
+
+/* The loop nest being pipelined.  */
+extern struct loop *current_loop_nest;
+
+/* Saves pipelined blocks.  Bitmap is indexed by bb->index.  */
+extern sbitmap bbs_pipelined;
+
+/* Various flags.  */
+extern bool enable_moveup_set_path_p;
+extern bool pipelining_p;
+extern bool bookkeeping_p;
+extern int max_insns_to_rename;
+extern bool preheader_removed;
+
+/* Software lookahead window size.
+   According to the results in Nakatani and Ebcioglu [1993], window size of 16
+   is enough to extract most ILP in integer code.  */
+#define MAX_WS (PARAM_VALUE (PARAM_SELSCHED_MAX_LOOKAHEAD))
+
+extern regset sel_all_regs;
+
+
+/* Successor iterator backend.  */
+struct succ_iterator
+{
+  /* True if we're at BB end.  */
+  bool bb_end;
+
+  /* An edge on which we're iterating.  */
+  edge e1;
+
+  /* The previous edge saved after skipping empty blocks.  */
+  edge e2;
+
+  /* Edge iterator used when there are successors in other basic blocks.  */
+  edge_iterator ei;
+
+  /* Successor block we're traversing.  */
+  basic_block bb;
+
+  /* Flags that are passed to the iterator.  We return only successors
+     that comply to these flags.  */
+  short flags;
+
+  /* When flags include SUCCS_ALL, this will be set to the exact type
+     of the successor we're traversing now.  */
+  short current_flags;
+
+  /* If skip to loop exits, save here information about loop exits.  */
+  int current_exit;
+  vec<edge> loop_exits;
+};
+
+/* A structure returning all successor's information.  */
+struct succs_info
+{
+  /* Flags that these succcessors were computed with.  */
+  short flags;
+
+  /* Successors that correspond to the flags.  */
+  insn_vec_t succs_ok;
+
+  /* Their probabilities.  As of now, we don't need this for other
+     successors.  */
+  vec<int> probs_ok;
+
+  /* Other successors.  */
+  insn_vec_t succs_other;
+
+  /* Probability of all successors.  */
+  int all_prob;
+
+  /* The number of all successors.  */
+  int all_succs_n;
+
+  /* The number of good successors.  */
+  int succs_ok_n;
+};
+
+/* Some needed definitions.  */
+extern basic_block after_recovery;
+
+extern rtx_insn *sel_bb_head (basic_block);
+extern rtx_insn *sel_bb_end (basic_block);
+extern bool sel_bb_empty_p (basic_block);
+extern bool in_current_region_p (basic_block);
+
+/* True when BB is a header of the inner loop.  */
+static inline bool
+inner_loop_header_p (basic_block bb)
+{
+  struct loop *inner_loop;
+
+  if (!current_loop_nest)
+    return false;
+
+  if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun))
+    return false;
+
+  inner_loop = bb->loop_father;
+  if (inner_loop == current_loop_nest)
+    return false;
+
+  /* If successor belongs to another loop.  */
+  if (bb == inner_loop->header
+      && flow_bb_inside_loop_p (current_loop_nest, bb))
+    {
+      /* Could be '=' here because of wrong loop depths.  */
+      gcc_assert (loop_depth (inner_loop) >= loop_depth (current_loop_nest));
+      return true;
+    }
+
+  return false;
+}
+
+/* Return exit edges of LOOP, filtering out edges with the same dest bb.  */
+static inline vec<edge> 
+get_loop_exit_edges_unique_dests (const struct loop *loop)
+{
+  vec<edge> edges = vNULL;
+  struct loop_exit *exit;
+
+  gcc_assert (loop->latch != EXIT_BLOCK_PTR_FOR_FN (cfun)
+              && current_loops->state & LOOPS_HAVE_RECORDED_EXITS);
+
+  for (exit = loop->exits->next; exit->e; exit = exit->next)
+    {
+      int i;
+      edge e;
+      bool was_dest = false;
+
+      for (i = 0; edges.iterate (i, &e); i++)
+        if (e->dest == exit->e->dest)
+          {
+            was_dest = true;
+            break;
+          }
+
+      if (!was_dest)
+        edges.safe_push (exit->e);
+    }
+  return edges;
+}
+
+static bool
+sel_bb_empty_or_nop_p (basic_block bb)
+{
+  insn_t first = sel_bb_head (bb), last;
+
+  if (first == NULL_RTX)
+    return true;
+
+  if (!INSN_NOP_P (first))
+    return false;
+
+  if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun))
+    return false;
+
+  last = sel_bb_end (bb);
+  if (first != last)
+    return false;
+
+  return true;
+}
+
+/* Collect all loop exits recursively, skipping empty BBs between them.
+   E.g. if BB is a loop header which has several loop exits,
+   traverse all of them and if any of them turns out to be another loop header
+   (after skipping empty BBs), add its loop exits to the resulting vector
+   as well.  */
+static inline vec<edge> 
+get_all_loop_exits (basic_block bb)
+{
+  vec<edge> exits = vNULL;
+
+  /* If bb is empty, and we're skipping to loop exits, then
+     consider bb as a possible gate to the inner loop now.  */
+  while (sel_bb_empty_or_nop_p (bb)
+	 && in_current_region_p (bb)
+	 && EDGE_COUNT (bb->succs) > 0)
+    {
+      bb = single_succ (bb);
+
+      /* This empty block could only lead outside the region.  */
+      gcc_assert (! in_current_region_p (bb));
+    }
+
+  /* And now check whether we should skip over inner loop.  */
+  if (inner_loop_header_p (bb))
+    {
+      struct loop *this_loop;
+      struct loop *pred_loop = NULL;
+      int i;
+      unsigned this_depth;
+      edge e;
+
+      for (this_loop = bb->loop_father;
+           this_loop && this_loop != current_loop_nest;
+           this_loop = loop_outer (this_loop))
+        pred_loop = this_loop;
+
+      this_loop = pred_loop;
+      gcc_assert (this_loop != NULL);
+
+      exits = get_loop_exit_edges_unique_dests (this_loop);
+      this_depth = loop_depth (this_loop);
+
+      /* Traverse all loop headers.  Be careful not to go back
+	 to the outer loop's header (see PR 84206).  */
+      for (i = 0; exits.iterate (i, &e); i++)
+	if ((in_current_region_p (e->dest)
+	     || (inner_loop_header_p (e->dest)))
+	    && loop_depth (e->dest->loop_father) >= this_depth)
+	  {
+	    vec<edge> next_exits = get_all_loop_exits (e->dest);
+
+	    if (next_exits.exists ())
+	      {
+		int j;
+		edge ne;
+
+		/* Add all loop exits for the current edge into the
+		   resulting vector.  */
+		for (j = 0; next_exits.iterate (j, &ne); j++)
+		  exits.safe_push (ne);
+
+		/* Remove the original edge.  */
+		exits.ordered_remove (i);
+
+		/*  Decrease the loop counter so we won't skip anything.  */
+		i--;
+		continue;
+	      }
+	  }
+    }
+
+  return exits;
+}
+
+/* Flags to pass to compute_succs_info and FOR_EACH_SUCC.
+   Any successor will fall into exactly one category.   */
+
+/* Include normal successors.  */
+#define SUCCS_NORMAL (1)
+
+/* Include back-edge successors.  */
+#define SUCCS_BACK (2)
+
+/* Include successors that are outside of the current region.  */
+#define SUCCS_OUT (4)
+
+/* When pipelining of the outer loops is enabled, skip innermost loops
+   to their exits.  */
+#define SUCCS_SKIP_TO_LOOP_EXITS (8)
+
+/* Include all successors.  */
+#define SUCCS_ALL (SUCCS_NORMAL | SUCCS_BACK | SUCCS_OUT)
+
+/* We need to return a succ_iterator to avoid 'unitialized' warning
+   during bootstrap.  */
+static inline succ_iterator
+_succ_iter_start (insn_t *succp, insn_t insn, int flags)
+{
+  succ_iterator i;
+
+  basic_block bb = BLOCK_FOR_INSN (insn);
+
+  gcc_assert (INSN_P (insn) || NOTE_INSN_BASIC_BLOCK_P (insn));
+
+  i.flags = flags;
+
+  /* Avoid 'uninitialized' warning.  */
+  *succp = NULL;
+  i.e1 = NULL;
+  i.e2 = NULL;
+  i.bb = bb;
+  i.current_flags = 0;
+  i.current_exit = -1;
+  i.loop_exits.create (0);
+
+  if (bb != EXIT_BLOCK_PTR_FOR_FN (cfun) && BB_END (bb) != insn)
+    {
+      i.bb_end = false;
+
+      /* Avoid 'uninitialized' warning.  */
+      i.ei.index = 0;
+      i.ei.container = 0;
+    }
+  else
+    {
+      i.ei = ei_start (bb->succs);
+      i.bb_end = true;
+    }
+
+  return i;
+}
+
+static inline bool
+_succ_iter_cond (succ_iterator *ip, insn_t *succp, insn_t insn,
+                 bool check (edge, succ_iterator *))
+{
+  if (!ip->bb_end)
+    {
+      /* When we're in a middle of a basic block, return
+         the next insn immediately, but only when SUCCS_NORMAL is set.  */
+      if (*succp != NULL || (ip->flags & SUCCS_NORMAL) == 0)
+        return false;
+
+      *succp = NEXT_INSN (insn);
+      ip->current_flags = SUCCS_NORMAL;
+      return true;
+    }
+  else
+    {
+      while (1)
+        {
+          edge e_tmp = NULL;
+
+          /* First, try loop exits, if we have them.  */
+          if (ip->loop_exits.exists ())
+            {
+              do
+                {
+                  ip->loop_exits.iterate (ip->current_exit, &e_tmp);
+                  ip->current_exit++;
+                }
+	      while (e_tmp && !check (e_tmp, ip));
+
+              if (!e_tmp)
+                ip->loop_exits.release ();
+            }
+
+          /* If we have found a successor, then great.  */
+          if (e_tmp)
+            {
+              ip->e1 = e_tmp;
+              break;
+            }
+
+          /* If not, then try the next edge.  */
+          while (ei_cond (ip->ei, &(ip->e1)))
+            {
+              basic_block bb = ip->e1->dest;
+
+              /* Consider bb as a possible loop header.  */
+              if ((ip->flags & SUCCS_SKIP_TO_LOOP_EXITS)
+                  && flag_sel_sched_pipelining_outer_loops
+		  && (!in_current_region_p (bb)
+		      || BLOCK_TO_BB (ip->bb->index)
+			 < BLOCK_TO_BB (bb->index)))
+                {
+		  /* Get all loop exits recursively.  */
+		  ip->loop_exits = get_all_loop_exits (bb);
+
+		  if (ip->loop_exits.exists ())
+		    {
+  		      ip->current_exit = 0;
+		      /* Move the iterator now, because we won't do
+			 succ_iter_next until loop exits will end.  */
+		      ei_next (&(ip->ei));
+		      break;
+		    }
+                }
+
+              /* bb is not a loop header, check as usual.  */
+              if (check (ip->e1, ip))
+                break;
+
+              ei_next (&(ip->ei));
+            }
+
+          /* If loop_exits are non null, we have found an inner loop;
+	     do one more iteration to fetch an edge from these exits.  */
+          if (ip->loop_exits.exists ())
+            continue;
+
+          /* Otherwise, we've found an edge in a usual way.  Break now.  */
+          break;
+        }
+
+      if (ip->e1)
+	{
+	  basic_block bb = ip->e2->dest;
+
+	  if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun) || bb == after_recovery)
+	    *succp = exit_insn;
+	  else
+	    {
+              *succp = sel_bb_head (bb);
+
+              gcc_assert (ip->flags != SUCCS_NORMAL
+                          || *succp == NEXT_INSN (bb_note (bb)));
+	      gcc_assert (BLOCK_FOR_INSN (*succp) == bb);
+	    }
+
+	  return true;
+	}
+      else
+	return false;
+    }
+}
+
+static inline void
+_succ_iter_next (succ_iterator *ip)
+{
+  gcc_assert (!ip->e2 || ip->e1);
+
+  if (ip->bb_end && ip->e1 && !ip->loop_exits.exists ())
+    ei_next (&(ip->ei));
+}
+
+/* Returns true when E1 is an eligible successor edge, possibly skipping
+   empty blocks.  When E2P is not null, the resulting edge is written there.
+   FLAGS are used to specify whether back edges and out-of-region edges
+   should be considered.  */
+static inline bool
+_eligible_successor_edge_p (edge e1, succ_iterator *ip)
+{
+  edge e2 = e1;
+  basic_block bb;
+  int flags = ip->flags;
+  bool src_outside_rgn = !in_current_region_p (e1->src);
+
+  gcc_assert (flags != 0);
+
+  if (src_outside_rgn)
+    {
+      /* Any successor of the block that is outside current region is
+         ineligible, except when we're skipping to loop exits.  */
+      gcc_assert (flags & (SUCCS_OUT | SUCCS_SKIP_TO_LOOP_EXITS));
+
+      if (flags & SUCCS_OUT)
+	return false;
+    }
+
+  bb = e2->dest;
+
+  /* Skip empty blocks, but be careful not to leave the region.  */
+  while (1)
+    {
+      if (!sel_bb_empty_p (bb))
+	{
+	  edge ne;
+	  basic_block nbb;
+
+	  if (!sel_bb_empty_or_nop_p (bb))
+	    break;
+
+	  ne = EDGE_SUCC (bb, 0);
+	  nbb = ne->dest;
+
+	  if (!in_current_region_p (nbb)
+	      && !(flags & SUCCS_OUT))
+	    break;
+
+	  e2 = ne;
+	  bb = nbb;
+	  continue;
+	}
+
+      if (!in_current_region_p (bb)
+          && !(flags & SUCCS_OUT))
+        return false;
+
+      if (EDGE_COUNT (bb->succs) == 0)
+	return false;
+
+      e2 = EDGE_SUCC (bb, 0);
+      bb = e2->dest;
+    }
+
+  /* Save the second edge for later checks.  */
+  ip->e2 = e2;
+
+  if (in_current_region_p (bb))
+    {
+      /* BLOCK_TO_BB sets topological order of the region here.
+         It is important to use real predecessor here, which is ip->bb,
+         as we may well have e1->src outside current region,
+         when skipping to loop exits.  */
+      bool succeeds_in_top_order = (BLOCK_TO_BB (ip->bb->index)
+				    < BLOCK_TO_BB (bb->index));
+
+      /* This is true for the all cases except the last one.  */
+      ip->current_flags = SUCCS_NORMAL;
+
+      /* We are advancing forward in the region, as usual.  */
+      if (succeeds_in_top_order)
+        {
+          /* We are skipping to loop exits here.  */
+          gcc_assert (!src_outside_rgn
+                      || flag_sel_sched_pipelining_outer_loops);
+          return !!(flags & SUCCS_NORMAL);
+        }
+
+      /* This is a back edge.  During pipelining we ignore back edges,
+         but only when it leads to the same loop.  It can lead to the header
+         of the outer loop, which will also be the preheader of
+         the current loop.  */
+      if (pipelining_p
+           && e1->src->loop_father == bb->loop_father)
+        return !!(flags & SUCCS_NORMAL);
+
+      /* A back edge should be requested explicitly.  */
+      ip->current_flags = SUCCS_BACK;
+      return !!(flags & SUCCS_BACK);
+    }
+
+  ip->current_flags = SUCCS_OUT;
+  return !!(flags & SUCCS_OUT);
+}
+
+#define FOR_EACH_SUCC_1(SUCC, ITER, INSN, FLAGS)                        \
+  for ((ITER) = _succ_iter_start (&(SUCC), (INSN), (FLAGS));            \
+       _succ_iter_cond (&(ITER), &(SUCC), (INSN), _eligible_successor_edge_p); \
+       _succ_iter_next (&(ITER)))
+
+#define FOR_EACH_SUCC(SUCC, ITER, INSN)                 \
+  FOR_EACH_SUCC_1 (SUCC, ITER, INSN, SUCCS_NORMAL)
+
+/* Return the current edge along which a successor was built.  */
+#define SUCC_ITER_EDGE(ITER) ((ITER)->e1)
+
+/* Return the next block of BB not running into inconsistencies.  */
+static inline basic_block
+bb_next_bb (basic_block bb)
+{
+  switch (EDGE_COUNT (bb->succs))
+    {
+    case 0:
+      return bb->next_bb;
+
+    case 1:
+      return single_succ (bb);
+
+    case 2:
+      return FALLTHRU_EDGE (bb)->dest;
+
+    default:
+      return bb->next_bb;
+    }
+
+  gcc_unreachable ();
+}
+
+
+
+/* Functions that are used in sel-sched.c.  */
+
+/* List functions.  */
+extern ilist_t ilist_copy (ilist_t);
+extern ilist_t ilist_invert (ilist_t);
+extern void blist_add (blist_t *, insn_t, ilist_t, deps_t);
+extern void blist_remove (blist_t *);
+extern void flist_tail_init (flist_tail_t);
+
+extern fence_t flist_lookup (flist_t, insn_t);
+extern void flist_clear (flist_t *);
+extern void def_list_add (def_list_t *, insn_t, bool);
+
+/* Target context functions.  */
+extern tc_t create_target_context (bool);
+extern void set_target_context (tc_t);
+extern void reset_target_context (tc_t, bool);
+
+/* Deps context functions.  */
+extern void advance_deps_context (deps_t, insn_t);
+
+/* Fences functions.  */
+extern void init_fences (insn_t);
+extern void add_clean_fence_to_fences (flist_tail_t, insn_t, fence_t);
+extern void add_dirty_fence_to_fences (flist_tail_t, insn_t, fence_t);
+extern void move_fence_to_fences (flist_t, flist_tail_t);
+
+/* Pool functions.  */
+extern regset get_regset_from_pool (void);
+extern regset get_clear_regset_from_pool (void);
+extern void return_regset_to_pool (regset);
+extern void free_regset_pool (void);
+
+extern insn_t get_nop_from_pool (insn_t);
+extern void return_nop_to_pool (insn_t, bool);
+extern void free_nop_pool (void);
+
+/* Vinsns functions.  */
+extern bool vinsn_separable_p (vinsn_t);
+extern bool vinsn_cond_branch_p (vinsn_t);
+extern void recompute_vinsn_lhs_rhs (vinsn_t);
+extern int sel_vinsn_cost (vinsn_t);
+extern insn_t sel_gen_insn_from_rtx_after (rtx, expr_t, int, insn_t);
+extern insn_t sel_gen_recovery_insn_from_rtx_after (rtx, expr_t, int, insn_t);
+extern insn_t sel_gen_insn_from_expr_after (expr_t, vinsn_t, int, insn_t);
+extern insn_t  sel_move_insn (expr_t, int, insn_t);
+extern void vinsn_attach (vinsn_t);
+extern void vinsn_detach (vinsn_t);
+extern vinsn_t vinsn_copy (vinsn_t, bool);
+extern bool vinsn_equal_p (vinsn_t, vinsn_t);
+
+/* EXPR functions.  */
+extern void copy_expr (expr_t, expr_t);
+extern void copy_expr_onside (expr_t, expr_t);
+extern void merge_expr_data (expr_t, expr_t, insn_t);
+extern void merge_expr (expr_t, expr_t, insn_t);
+extern void clear_expr (expr_t);
+extern unsigned expr_dest_regno (expr_t);
+extern rtx expr_dest_reg (expr_t);
+extern int find_in_history_vect (vec<expr_history_def> ,
+                                 rtx, vinsn_t, bool);
+extern void insert_in_history_vect (vec<expr_history_def> *,
+                                    unsigned, enum local_trans_type,
+                                    vinsn_t, vinsn_t, ds_t);
+extern void mark_unavailable_targets (av_set_t, av_set_t, regset);
+extern int speculate_expr (expr_t, ds_t);
+
+/* Av set functions.  */
+extern void av_set_add (av_set_t *, expr_t);
+extern void av_set_iter_remove (av_set_iterator *);
+extern expr_t av_set_lookup (av_set_t, vinsn_t);
+extern expr_t merge_with_other_exprs (av_set_t *, av_set_iterator *, expr_t);
+extern bool av_set_is_in_p (av_set_t, vinsn_t);
+extern av_set_t av_set_copy (av_set_t);
+extern void av_set_union_and_clear (av_set_t *, av_set_t *, insn_t);
+extern void av_set_union_and_live (av_set_t *, av_set_t *, regset, regset, insn_t);
+extern void av_set_clear (av_set_t *);
+extern void av_set_leave_one_nonspec (av_set_t *);
+extern expr_t av_set_element (av_set_t, int);
+extern void av_set_substract_cond_branches (av_set_t *);
+extern void av_set_split_usefulness (av_set_t, int, int);
+extern void av_set_code_motion_filter (av_set_t *, av_set_t);
+
+extern void sel_save_haifa_priorities (void);
+
+extern void sel_init_global_and_expr (bb_vec_t);
+extern void sel_finish_global_and_expr (void);
+
+extern regset compute_live (insn_t);
+extern bool register_unavailable_p (regset, rtx);
+
+/* Dependence analysis functions.  */
+extern void sel_clear_has_dependence (void);
+extern ds_t has_dependence_p (expr_t, insn_t, ds_t **);
+
+extern int tick_check_p (expr_t, deps_t, fence_t);
+
+/* Functions to work with insns.  */
+extern bool lhs_of_insn_equals_to_dest_p (insn_t, rtx);
+extern bool insn_eligible_for_subst_p (insn_t);
+extern void get_dest_and_mode (rtx, rtx *, machine_mode *);
+
+extern bool bookkeeping_can_be_created_if_moved_through_p (insn_t);
+extern bool sel_remove_insn (insn_t, bool, bool);
+extern bool bb_header_p (insn_t);
+extern void sel_init_invalid_data_sets (insn_t);
+extern bool insn_at_boundary_p (insn_t);
+
+/* Basic block and CFG functions.  */
+
+extern rtx_insn *sel_bb_head (basic_block);
+extern bool sel_bb_head_p (insn_t);
+extern rtx_insn *sel_bb_end (basic_block);
+extern bool sel_bb_end_p (insn_t);
+extern bool sel_bb_empty_p (basic_block);
+
+extern bool in_current_region_p (basic_block);
+extern basic_block fallthru_bb_of_jump (const rtx_insn *);
+
+extern void sel_init_bbs (bb_vec_t);
+extern void sel_finish_bbs (void);
+
+extern struct succs_info * compute_succs_info (insn_t, short);
+extern void free_succs_info (struct succs_info *);
+extern bool sel_insn_has_single_succ_p (insn_t, int);
+extern bool sel_num_cfg_preds_gt_1 (insn_t);
+extern int get_seqno_by_preds (rtx_insn *);
+
+extern bool bb_ends_ebb_p (basic_block);
+extern bool in_same_ebb_p (insn_t, insn_t);
+
+extern bool tidy_control_flow (basic_block, bool);
+extern void free_bb_note_pool (void);
+
+extern void purge_empty_blocks (void);
+extern basic_block sel_split_edge (edge);
+extern basic_block sel_create_recovery_block (insn_t);
+extern bool sel_redirect_edge_and_branch (edge, basic_block);
+extern void sel_redirect_edge_and_branch_force (edge, basic_block);
+extern void sel_init_pipelining (void);
+extern void sel_finish_pipelining (void);
+extern void sel_sched_region (int);
+extern loop_p get_loop_nest_for_rgn (unsigned int);
+extern bool considered_for_pipelining_p (struct loop *);
+extern void make_region_from_loop_preheader (vec<basic_block> *&);
+extern void sel_add_loop_preheaders (bb_vec_t *);
+extern bool sel_is_loop_preheader_p (basic_block);
+extern void clear_outdated_rtx_info (basic_block);
+extern void free_data_sets (basic_block);
+extern void exchange_data_sets (basic_block, basic_block);
+extern void copy_data_sets (basic_block, basic_block);
+
+extern void sel_register_cfg_hooks (void);
+extern void sel_unregister_cfg_hooks (void);
+
+/* Expression transformation routines.  */
+extern rtx_insn *create_insn_rtx_from_pattern (rtx, rtx);
+extern vinsn_t create_vinsn_from_insn_rtx (rtx_insn *, bool);
+extern rtx_insn *create_copy_of_insn_rtx (rtx);
+extern void change_vinsn_in_expr (expr_t, vinsn_t);
+
+/* Various initialization functions.  */
+extern void init_lv_sets (void);
+extern void free_lv_sets (void);
+extern void setup_nop_and_exit_insns (void);
+extern void free_nop_and_exit_insns (void);
+extern void free_data_for_scheduled_insn (insn_t);
+extern void setup_nop_vinsn (void);
+extern void free_nop_vinsn (void);
+extern void sel_set_sched_flags (void);
+extern void sel_setup_sched_infos (void);
+extern void alloc_sched_pools (void);
+extern void free_sched_pools (void);
+
+#endif /* GCC_SEL_SCHED_IR_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/sel-sched.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sel-sched.h
new file mode 100644
index 0000000..144a21d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sel-sched.h
@@ -0,0 +1,27 @@
+/* Instruction scheduling pass.
+   Copyright (C) 2006-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SEL_SCHED_H
+#define GCC_SEL_SCHED_H
+
+/* The main entry point.  */
+extern void run_selective_scheduling (void);
+extern bool maybe_skip_selective_scheduling (void);
+
+#endif /* GCC_SEL_SCHED_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/selftest-diagnostic.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/selftest-diagnostic.h
new file mode 100644
index 0000000..388fe38
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/selftest-diagnostic.h
@@ -0,0 +1,49 @@
+/* Selftest support for diagnostics.
+   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SELFTEST_DIAGNOSTIC_H
+#define GCC_SELFTEST_DIAGNOSTIC_H
+
+/* The selftest code should entirely disappear in a production
+   configuration, hence we guard all of it with #if CHECKING_P.  */
+
+#if CHECKING_P
+
+namespace selftest {
+
+/* Convenience subclass of diagnostic_context for testing
+   the diagnostic subsystem.  */
+
+class test_diagnostic_context : public diagnostic_context
+{
+ public:
+  test_diagnostic_context ();
+  ~test_diagnostic_context ();
+
+  /* Implementation of diagnostic_start_span_fn, hiding the
+     real filename (to avoid printing the names of tempfiles).  */
+  static void
+  start_span_cb (diagnostic_context *context, expanded_location exploc);
+};
+
+} // namespace selftest
+
+#endif /* #if CHECKING_P */
+
+#endif /* GCC_SELFTEST_DIAGNOSTIC_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/selftest-rtl.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/selftest-rtl.h
new file mode 100644
index 0000000..8d743a8
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/selftest-rtl.h
@@ -0,0 +1,100 @@
+/* A self-testing framework, for use by -fself-test.
+   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SELFTEST_RTL_H
+#define GCC_SELFTEST_RTL_H
+
+/* The selftest code should entirely disappear in a production
+   configuration, hence we guard all of it with #if CHECKING_P.  */
+
+#if CHECKING_P
+
+class rtx_reuse_manager;
+
+namespace selftest {
+
+/* Verify that X is dumped as EXPECTED_DUMP, using compact mode.
+   Use LOC as the effective location when reporting errors.  */
+
+extern void
+assert_rtl_dump_eq (const location &loc, const char *expected_dump, rtx x,
+		    rtx_reuse_manager *reuse_manager);
+
+/* Verify that RTX is dumped as EXPECTED_DUMP, using compact mode.  */
+
+#define ASSERT_RTL_DUMP_EQ(EXPECTED_DUMP, RTX) \
+  assert_rtl_dump_eq (SELFTEST_LOCATION, (EXPECTED_DUMP), (RTX), NULL)
+
+/* As above, but using REUSE_MANAGER when dumping.  */
+
+#define ASSERT_RTL_DUMP_EQ_WITH_REUSE(EXPECTED_DUMP, RTX, REUSE_MANAGER) \
+  assert_rtl_dump_eq (SELFTEST_LOCATION, (EXPECTED_DUMP), (RTX), \
+		      (REUSE_MANAGER))
+
+#define ASSERT_RTX_EQ(EXPECTED, ACTUAL) 				\
+  SELFTEST_BEGIN_STMT							\
+  const char *desc_ = "ASSERT_RTX_EQ (" #EXPECTED ", " #ACTUAL ")";	\
+  ::selftest::assert_rtx_eq_at (SELFTEST_LOCATION, desc_, (EXPECTED),	\
+				(ACTUAL));				\
+  SELFTEST_END_STMT
+
+extern void assert_rtx_eq_at (const location &, const char *, rtx, rtx);
+
+/* Evaluate rtx EXPECTED and ACTUAL and compare them with ==
+   (i.e. pointer equality), calling ::selftest::pass if they are
+   equal, aborting if they are non-equal.  */
+
+#define ASSERT_RTX_PTR_EQ(EXPECTED, ACTUAL) \
+  SELFTEST_BEGIN_STMT							\
+  const char *desc_ = "ASSERT_RTX_PTR_EQ (" #EXPECTED ", " #ACTUAL ")";  \
+  ::selftest::assert_rtx_ptr_eq_at (SELFTEST_LOCATION, desc_, (EXPECTED), \
+				    (ACTUAL));				\
+  SELFTEST_END_STMT
+
+/* Compare rtx EXPECTED and ACTUAL by pointer equality, calling
+   ::selftest::pass if they are equal, aborting if they are non-equal.
+   LOC is the effective location of the assertion, MSG describes it.  */
+
+extern void assert_rtx_ptr_eq_at (const location &loc, const char *msg,
+				  rtx expected, rtx actual);
+
+/* A class for testing RTL function dumps.  */
+
+class rtl_dump_test
+{
+ public:
+  /* Takes ownership of PATH.  */
+  rtl_dump_test (const location &loc, char *path);
+  ~rtl_dump_test ();
+
+ private:
+  char *m_path;
+};
+
+/* Get the insn with the given uid, or NULL if not found.  */
+
+extern rtx_insn *get_insn_by_uid (int uid);
+
+extern void verify_three_block_rtl_cfg (function *fun);
+
+} /* end of namespace selftest.  */
+
+#endif /* #if CHECKING_P */
+
+#endif /* GCC_SELFTEST_RTL_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/selftest.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/selftest.h
new file mode 100644
index 0000000..3e00e75
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/selftest.h
@@ -0,0 +1,477 @@
+/* A self-testing framework, for use by -fself-test.
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SELFTEST_H
+#define GCC_SELFTEST_H
+
+/* The selftest code should entirely disappear in a production
+   configuration, hence we guard all of it with #if CHECKING_P.  */
+
+#if CHECKING_P
+
+namespace selftest {
+
+/* A struct describing the source-location of a selftest, to make it
+   easier to track down failing tests.  */
+
+struct location
+{
+  location (const char *file, int line, const char *function)
+    : m_file (file), m_line (line), m_function (function) {}
+
+  const char *m_file;
+  int m_line;
+  const char *m_function;
+};
+
+/* A macro for use in selftests and by the ASSERT_ macros below,
+   constructing a selftest::location for the current source location.  */
+
+#define SELFTEST_LOCATION \
+  (::selftest::location (__FILE__, __LINE__, __FUNCTION__))
+
+/* The entrypoint for running all tests.  */
+
+extern void run_tests ();
+
+/* Record the successful outcome of some aspect of the test.  */
+
+extern void pass (const location &loc, const char *msg);
+
+/* Report the failed outcome of some aspect of the test and abort.  */
+
+extern void fail (const location &loc, const char *msg)
+  ATTRIBUTE_NORETURN;
+
+/* As "fail", but using printf-style formatted output.  */
+
+extern void fail_formatted (const location &loc, const char *fmt, ...)
+  ATTRIBUTE_PRINTF_2 ATTRIBUTE_NORETURN;
+
+/* Implementation detail of ASSERT_STREQ.  */
+
+extern void assert_streq (const location &loc,
+			  const char *desc_val1, const char *desc_val2,
+			  const char *val1, const char *val2);
+
+/* Implementation detail of ASSERT_STR_CONTAINS.  */
+
+extern void assert_str_contains (const location &loc,
+				 const char *desc_haystack,
+				 const char *desc_needle,
+				 const char *val_haystack,
+				 const char *val_needle);
+
+/* Implementation detail of ASSERT_STR_STARTSWITH.  */
+
+extern void assert_str_startswith (const location &loc,
+				   const char *desc_str,
+				   const char *desc_prefix,
+				   const char *val_str,
+				   const char *val_prefix);
+
+
+/* A named temporary file for use in selftests.
+   Usable for writing out files, and as the base class for
+   temp_source_file.
+   The file is unlinked in the destructor.  */
+
+class named_temp_file
+{
+ public:
+  named_temp_file (const char *suffix);
+  ~named_temp_file ();
+  const char *get_filename () const { return m_filename; }
+
+ private:
+  char *m_filename;
+};
+
+/* A class for writing out a temporary sourcefile for use in selftests
+   of input handling.  */
+
+class temp_source_file : public named_temp_file
+{
+ public:
+  temp_source_file (const location &loc, const char *suffix,
+		    const char *content);
+};
+
+/* RAII-style class for avoiding introducing locale-specific differences
+   in strings containing localized quote marks, by temporarily overriding
+   the "open_quote" and "close_quote" globals to something hardcoded.
+
+   Specifically, the C locale's values are used:
+   - open_quote becomes "`"
+   - close_quote becomes "'"
+   for the lifetime of the object.  */
+
+class auto_fix_quotes
+{
+ public:
+  auto_fix_quotes ();
+  ~auto_fix_quotes ();
+
+ private:
+  const char *m_saved_open_quote;
+  const char *m_saved_close_quote;
+};
+
+/* Various selftests involving location-handling require constructing a
+   line table and one or more line maps within it.
+
+   For maximum test coverage we want to run these tests with a variety
+   of situations:
+   - line_table->default_range_bits: some frontends use a non-zero value
+   and others use zero
+   - the fallback modes within line-map.c: there are various threshold
+   values for location_t beyond line-map.c changes
+   behavior (disabling of the range-packing optimization, disabling
+   of column-tracking).  We can exercise these by starting the line_table
+   at interesting values at or near these thresholds.
+
+   The following struct describes a particular case within our test
+   matrix.  */
+
+struct line_table_case;
+
+/* A class for overriding the global "line_table" within a selftest,
+   restoring its value afterwards.  At most one instance of this
+   class can exist at once, due to the need to keep the old value
+   of line_table as a GC root.  */
+
+class line_table_test
+{
+ public:
+  /* Default constructor.  Override "line_table", using sane defaults
+     for the temporary line_table.  */
+  line_table_test ();
+
+  /* Constructor.  Override "line_table", using the case described by C.  */
+  line_table_test (const line_table_case &c);
+
+  /* Destructor.  Restore the saved line_table.  */
+  ~line_table_test ();
+};
+
+/* Run TESTCASE multiple times, once for each case in our test matrix.  */
+
+extern void
+for_each_line_table_case (void (*testcase) (const line_table_case &));
+
+/* Read the contents of PATH into memory, returning a 0-terminated buffer
+   that must be freed by the caller.
+   Fail (and abort) if there are any problems, with LOC as the reported
+   location of the failure.  */
+
+extern char *read_file (const location &loc, const char *path);
+
+/* A helper function for writing tests that interact with the
+   garbage collector.  */
+
+extern void forcibly_ggc_collect ();
+
+/* Convert a path relative to SRCDIR/gcc/testsuite/selftests
+   to a real path (either absolute, or relative to pwd).
+   The result should be freed by the caller.  */
+
+extern char *locate_file (const char *path);
+
+/* The path of SRCDIR/testsuite/selftests.  */
+
+extern const char *path_to_selftest_files;
+
+/* selftest::test_runner is an implementation detail of selftest::run_tests,
+   exposed here to allow plugins to run their own suites of tests.  */
+
+class test_runner
+{
+ public:
+  test_runner (const char *name);
+  ~test_runner ();
+
+ private:
+  const char *m_name;
+  long m_start_time;
+};
+
+/* Declarations for specific families of tests (by source file), in
+   alphabetical order.  */
+extern void attribute_c_tests ();
+extern void bitmap_c_tests ();
+extern void cgraph_c_tests ();
+extern void convert_c_tests ();
+extern void diagnostic_c_tests ();
+extern void diagnostic_show_locus_c_tests ();
+extern void dumpfile_c_tests ();
+extern void edit_context_c_tests ();
+extern void et_forest_c_tests ();
+extern void fibonacci_heap_c_tests ();
+extern void fold_const_c_tests ();
+extern void function_tests_c_tests ();
+extern void ggc_tests_c_tests ();
+extern void gimple_c_tests ();
+extern void hash_map_tests_c_tests ();
+extern void hash_set_tests_c_tests ();
+extern void input_c_tests ();
+extern void json_cc_tests ();
+extern void opt_problem_cc_tests ();
+extern void optinfo_emit_json_cc_tests ();
+extern void predict_c_tests ();
+extern void pretty_print_c_tests ();
+extern void read_rtl_function_c_tests ();
+extern void rtl_tests_c_tests ();
+extern void sbitmap_c_tests ();
+extern void selftest_c_tests ();
+extern void simplify_rtx_c_tests ();
+extern void spellcheck_c_tests ();
+extern void spellcheck_tree_c_tests ();
+extern void sreal_c_tests ();
+extern void store_merging_c_tests ();
+extern void tree_c_tests ();
+extern void tree_cfg_c_tests ();
+extern void typed_splay_tree_c_tests ();
+extern void unique_ptr_tests_cc_tests ();
+extern void vec_c_tests ();
+extern void vec_perm_indices_c_tests ();
+extern void wide_int_cc_tests ();
+extern void opt_proposer_c_tests ();
+
+extern int num_passes;
+
+} /* end of namespace selftest.  */
+
+/* Macros for writing tests.  */
+
+/* Evaluate EXPR and coerce to bool, calling
+   ::selftest::pass if it is true,
+   ::selftest::fail if it false.  */
+
+#define ASSERT_TRUE(EXPR)				\
+  ASSERT_TRUE_AT (SELFTEST_LOCATION, (EXPR))
+
+/* Like ASSERT_TRUE, but treat LOC as the effective location of the
+   selftest.  */
+
+#define ASSERT_TRUE_AT(LOC, EXPR)			\
+  SELFTEST_BEGIN_STMT					\
+  const char *desc_ = "ASSERT_TRUE (" #EXPR ")";	\
+  bool actual_ = (EXPR);				\
+  if (actual_)						\
+    ::selftest::pass ((LOC), desc_);			\
+  else							\
+    ::selftest::fail ((LOC), desc_);			\
+  SELFTEST_END_STMT
+
+/* Evaluate EXPR and coerce to bool, calling
+   ::selftest::pass if it is false,
+   ::selftest::fail if it true.  */
+
+#define ASSERT_FALSE(EXPR)					\
+  ASSERT_FALSE_AT (SELFTEST_LOCATION, (EXPR))
+
+/* Like ASSERT_FALSE, but treat LOC as the effective location of the
+   selftest.  */
+
+#define ASSERT_FALSE_AT(LOC, EXPR)				\
+  SELFTEST_BEGIN_STMT						\
+  const char *desc_ = "ASSERT_FALSE (" #EXPR ")";		\
+  bool actual_ = (EXPR);					\
+  if (actual_)							\
+    ::selftest::fail ((LOC), desc_);				\
+  else								\
+    ::selftest::pass ((LOC), desc_);				\
+  SELFTEST_END_STMT
+
+/* Evaluate VAL1 and VAL2 and compare them with ==, calling
+   ::selftest::pass if they are equal,
+   ::selftest::fail if they are non-equal.  */
+
+#define ASSERT_EQ(VAL1, VAL2) \
+  ASSERT_EQ_AT ((SELFTEST_LOCATION), (VAL1), (VAL2))
+
+/* Like ASSERT_EQ, but treat LOC as the effective location of the
+   selftest.  */
+
+#define ASSERT_EQ_AT(LOC, VAL1, VAL2)		       \
+  SELFTEST_BEGIN_STMT					       \
+  const char *desc_ = "ASSERT_EQ (" #VAL1 ", " #VAL2 ")"; \
+  if ((VAL1) == (VAL2))				       \
+    ::selftest::pass ((LOC), desc_);			       \
+  else							       \
+    ::selftest::fail ((LOC), desc_);			       \
+  SELFTEST_END_STMT
+
+/* Evaluate VAL1 and VAL2 and compare them with known_eq, calling
+   ::selftest::pass if they are always equal,
+   ::selftest::fail if they might be non-equal.  */
+
+#define ASSERT_KNOWN_EQ(VAL1, VAL2) \
+  ASSERT_KNOWN_EQ_AT ((SELFTEST_LOCATION), (VAL1), (VAL2))
+
+/* Like ASSERT_KNOWN_EQ, but treat LOC as the effective location of the
+   selftest.  */
+
+#define ASSERT_KNOWN_EQ_AT(LOC, VAL1, VAL2)			\
+  SELFTEST_BEGIN_STMT							\
+  const char *desc = "ASSERT_KNOWN_EQ (" #VAL1 ", " #VAL2 ")";	\
+  if (known_eq (VAL1, VAL2))					\
+    ::selftest::pass ((LOC), desc);					\
+  else									\
+    ::selftest::fail ((LOC), desc);					\
+  SELFTEST_END_STMT
+
+/* Evaluate VAL1 and VAL2 and compare them with !=, calling
+   ::selftest::pass if they are non-equal,
+   ::selftest::fail if they are equal.  */
+
+#define ASSERT_NE(VAL1, VAL2)			       \
+  SELFTEST_BEGIN_STMT					       \
+  const char *desc_ = "ASSERT_NE (" #VAL1 ", " #VAL2 ")"; \
+  if ((VAL1) != (VAL2))				       \
+    ::selftest::pass (SELFTEST_LOCATION, desc_);	       \
+  else							       \
+    ::selftest::fail (SELFTEST_LOCATION, desc_);	       \
+  SELFTEST_END_STMT
+
+/* Evaluate VAL1 and VAL2 and compare them with maybe_ne, calling
+   ::selftest::pass if they might be non-equal,
+   ::selftest::fail if they are known to be equal.  */
+
+#define ASSERT_MAYBE_NE(VAL1, VAL2) \
+  ASSERT_MAYBE_NE_AT ((SELFTEST_LOCATION), (VAL1), (VAL2))
+
+/* Like ASSERT_MAYBE_NE, but treat LOC as the effective location of the
+   selftest.  */
+
+#define ASSERT_MAYBE_NE_AT(LOC, VAL1, VAL2)			\
+  SELFTEST_BEGIN_STMT							\
+  const char *desc = "ASSERT_MAYBE_NE (" #VAL1 ", " #VAL2 ")";	\
+  if (maybe_ne (VAL1, VAL2))					\
+    ::selftest::pass ((LOC), desc);					\
+  else									\
+    ::selftest::fail ((LOC), desc);					\
+  SELFTEST_END_STMT
+
+/* Evaluate LHS and RHS and compare them with >, calling
+   ::selftest::pass if LHS > RHS,
+   ::selftest::fail otherwise.  */
+
+#define ASSERT_GT(LHS, RHS)				\
+  ASSERT_GT_AT ((SELFTEST_LOCATION), (LHS), (RHS))
+
+/* Like ASSERT_GT, but treat LOC as the effective location of the
+   selftest.  */
+
+#define ASSERT_GT_AT(LOC, LHS, RHS)		       \
+  SELFTEST_BEGIN_STMT					       \
+  const char *desc_ = "ASSERT_GT (" #LHS ", " #RHS ")";	       \
+  if ((LHS) > (RHS))					       \
+    ::selftest::pass ((LOC), desc_);			       \
+  else							       \
+    ::selftest::fail ((LOC), desc_);			       \
+  SELFTEST_END_STMT
+
+/* Evaluate LHS and RHS and compare them with <, calling
+   ::selftest::pass if LHS < RHS,
+   ::selftest::fail otherwise.  */
+
+#define ASSERT_LT(LHS, RHS)				\
+  ASSERT_LT_AT ((SELFTEST_LOCATION), (LHS), (RHS))
+
+/* Like ASSERT_LT, but treat LOC as the effective location of the
+   selftest.  */
+
+#define ASSERT_LT_AT(LOC, LHS, RHS)		       \
+  SELFTEST_BEGIN_STMT					       \
+  const char *desc_ = "ASSERT_LT (" #LHS ", " #RHS ")";	       \
+  if ((LHS) < (RHS))					       \
+    ::selftest::pass ((LOC), desc_);			       \
+  else							       \
+    ::selftest::fail ((LOC), desc_);			       \
+  SELFTEST_END_STMT
+
+/* Evaluate VAL1 and VAL2 and compare them with strcmp, calling
+   ::selftest::pass if they are equal (and both are non-NULL),
+   ::selftest::fail if they are non-equal, or are both NULL.  */
+
+#define ASSERT_STREQ(VAL1, VAL2)				    \
+  SELFTEST_BEGIN_STMT						    \
+  ::selftest::assert_streq (SELFTEST_LOCATION, #VAL1, #VAL2, \
+			    (VAL1), (VAL2));		    \
+  SELFTEST_END_STMT
+
+/* Like ASSERT_STREQ, but treat LOC as the effective location of the
+   selftest.  */
+
+#define ASSERT_STREQ_AT(LOC, VAL1, VAL2)			    \
+  SELFTEST_BEGIN_STMT						    \
+  ::selftest::assert_streq ((LOC), #VAL1, #VAL2,		    \
+			    (VAL1), (VAL2));		    \
+  SELFTEST_END_STMT
+
+/* Evaluate HAYSTACK and NEEDLE and use strstr to determine if NEEDLE
+   is within HAYSTACK.
+   ::selftest::pass if NEEDLE is found.
+   ::selftest::fail if it is not found.  */
+
+#define ASSERT_STR_CONTAINS(HAYSTACK, NEEDLE)				\
+  SELFTEST_BEGIN_STMT							\
+  ::selftest::assert_str_contains (SELFTEST_LOCATION, #HAYSTACK, #NEEDLE, \
+				   (HAYSTACK), (NEEDLE));		\
+  SELFTEST_END_STMT
+
+/* Like ASSERT_STR_CONTAINS, but treat LOC as the effective location of the
+   selftest.  */
+
+#define ASSERT_STR_CONTAINS_AT(LOC, HAYSTACK, NEEDLE)			\
+  SELFTEST_BEGIN_STMT							\
+  ::selftest::assert_str_contains (LOC, #HAYSTACK, #NEEDLE,		\
+				   (HAYSTACK), (NEEDLE));		\
+  SELFTEST_END_STMT
+
+/* Evaluate STR and PREFIX and determine if STR starts with PREFIX.
+     ::selftest::pass if STR does start with PREFIX.
+     ::selftest::fail if does not, or either is NULL.  */
+
+#define ASSERT_STR_STARTSWITH(STR, PREFIX)				    \
+  SELFTEST_BEGIN_STMT							    \
+  ::selftest::assert_str_startswith (SELFTEST_LOCATION, #STR, #PREFIX,	    \
+				     (STR), (PREFIX));			    \
+  SELFTEST_END_STMT
+
+/* Evaluate PRED1 (VAL1), calling ::selftest::pass if it is true,
+   ::selftest::fail if it is false.  */
+
+#define ASSERT_PRED1(PRED1, VAL1)				\
+  SELFTEST_BEGIN_STMT						\
+  const char *desc_ = "ASSERT_PRED1 (" #PRED1 ", " #VAL1 ")";	\
+  bool actual_ = (PRED1) (VAL1);				\
+  if (actual_)							\
+    ::selftest::pass (SELFTEST_LOCATION, desc_);		\
+  else								\
+    ::selftest::fail (SELFTEST_LOCATION, desc_);		\
+  SELFTEST_END_STMT
+
+#define SELFTEST_BEGIN_STMT do {
+#define SELFTEST_END_STMT   } while (0)
+
+#endif /* #if CHECKING_P */
+
+#endif /* GCC_SELFTEST_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/sese.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sese.h
new file mode 100644
index 0000000..8931b28
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sese.h
@@ -0,0 +1,308 @@
+/* Single entry single exit control flow regions.
+   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Contributed by Jan Sjodin <jan.sjodin@amd.com> and
+   Sebastian Pop <sebastian.pop@amd.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SESE_H
+#define GCC_SESE_H
+
+typedef struct ifsese_s *ifsese;
+
+/* A Single Entry, Single Exit region is a part of the CFG delimited
+   by two edges.  */
+struct sese_l
+{
+  sese_l (edge e, edge x) : entry (e), exit (x) {}
+
+  operator bool () const { return entry && exit; }
+
+  edge entry;
+  edge exit;
+};
+
+void print_edge (FILE *file, const_edge e);
+void print_sese (FILE *file, const sese_l &s);
+void dump_edge (const_edge e);
+void dump_sese (const sese_l &);
+
+/* Get the entry of an sese S.  */
+
+static inline basic_block
+get_entry_bb (sese_l &s)
+{
+  return s.entry->dest;
+}
+
+/* Get the exit of an sese S.  */
+
+static inline basic_block
+get_exit_bb (sese_l &s)
+{
+  return s.exit->src;
+}
+
+/* Returns the index of V where ELEM can be found. -1 Otherwise.  */
+template<typename T>
+int
+vec_find (const vec<T> &v, const T &elem)
+{
+  int i;
+  T t;
+  FOR_EACH_VEC_ELT (v, i, t)
+    if (elem == t)
+      return i;
+  return -1;
+}
+
+/* A helper structure for bookkeeping information about a scop in graphite.  */
+typedef struct sese_info_t
+{
+  /* The SESE region.  */
+  sese_l region;
+
+  /* Liveout vars.  */
+  bitmap liveout;
+
+  /* Liveout in debug stmts.  */
+  bitmap debug_liveout;
+
+  /* Parameters used within the SCOP.  */
+  vec<tree> params;
+
+  /* Maps an old name to a new decl.  */
+  hash_map<tree, tree> *rename_map;
+
+  /* Basic blocks contained in this SESE.  */
+  vec<basic_block> bbs;
+
+  /* The condition region generated for this sese.  */
+  ifsese if_region;
+
+} *sese_info_p;
+
+extern sese_info_p new_sese_info (edge, edge);
+extern void free_sese_info (sese_info_p);
+extern void sese_insert_phis_for_liveouts (sese_info_p, basic_block, edge, edge);
+extern struct loop *outermost_loop_in_sese (sese_l &, basic_block);
+extern tree scalar_evolution_in_region (const sese_l &, loop_p, tree);
+extern bool scev_analyzable_p (tree, sese_l &);
+extern bool invariant_in_sese_p_rec (tree, const sese_l &, bool *);
+extern void sese_build_liveouts (sese_info_p);
+extern bool sese_trivially_empty_bb_p (basic_block);
+
+/* The number of parameters in REGION. */
+
+static inline unsigned
+sese_nb_params (sese_info_p region)
+{
+  return region->params.length ();
+}
+
+/* Checks whether BB is contained in the region delimited by ENTRY and
+   EXIT blocks.  */
+
+static inline bool
+bb_in_region (const_basic_block bb, const_basic_block entry, const_basic_block exit)
+{
+  return dominated_by_p (CDI_DOMINATORS, bb, entry)
+	 && !(dominated_by_p (CDI_DOMINATORS, bb, exit)
+	      && !dominated_by_p (CDI_DOMINATORS, entry, exit));
+}
+
+/* Checks whether BB is contained in the region delimited by ENTRY and
+   EXIT blocks.  */
+
+static inline bool
+bb_in_sese_p (basic_block bb, const sese_l &r)
+{
+  return bb_in_region (bb, r.entry->dest, r.exit->dest);
+}
+
+/* Returns true when STMT is defined in REGION.  */
+
+static inline bool
+stmt_in_sese_p (gimple *stmt, const sese_l &r)
+{
+  basic_block bb = gimple_bb (stmt);
+  return bb && bb_in_sese_p (bb, r);
+}
+
+/* Returns true when NAME is defined in REGION.  */
+
+static inline bool
+defined_in_sese_p (tree name, const sese_l &r)
+{
+  return stmt_in_sese_p (SSA_NAME_DEF_STMT (name), r);
+}
+
+/* Returns true when LOOP is in REGION.  */
+
+static inline bool
+loop_in_sese_p (struct loop *loop, const sese_l &region)
+{
+  return (bb_in_sese_p (loop->header, region)
+	  && bb_in_sese_p (loop->latch, region));
+}
+
+/* Returns the loop depth of LOOP in REGION.  The loop depth
+   is the same as the normal loop depth, but limited by a region.
+
+   Example:
+
+   loop_0
+     loop_1
+       {
+         S0
+            <- region start
+         S1
+
+         loop_2
+           S2
+
+         S3
+            <- region end
+       }
+
+    loop_0 does not exist in the region -> invalid
+    loop_1 exists, but is not completely contained in the region -> depth 0
+    loop_2 is completely contained -> depth 1  */
+
+static inline unsigned int
+sese_loop_depth (const sese_l &region, loop_p loop)
+{
+  unsigned int depth = 0;
+
+  while (loop_in_sese_p (loop, region))
+    {
+      depth++;
+      loop = loop_outer (loop);
+    }
+
+  return depth;
+}
+
+/* A single entry single exit specialized for conditions.  */
+
+typedef struct ifsese_s {
+  sese_info_p region;
+  sese_info_p true_region;
+  sese_info_p false_region;
+} *ifsese;
+
+extern ifsese move_sese_in_condition (sese_info_p);
+extern void set_ifsese_condition (ifsese, tree);
+extern edge get_true_edge_from_guard_bb (basic_block);
+extern edge get_false_edge_from_guard_bb (basic_block);
+
+static inline edge
+if_region_entry (ifsese if_region)
+{
+  return if_region->region->region.entry;
+}
+
+static inline edge
+if_region_exit (ifsese if_region)
+{
+  return if_region->region->region.exit;
+}
+
+static inline basic_block
+if_region_get_condition_block (ifsese if_region)
+{
+  return if_region_entry (if_region)->dest;
+}
+
+typedef std::pair <gimple *, tree> scalar_use;
+
+typedef struct gimple_poly_bb
+{
+  basic_block bb;
+  struct poly_bb *pbb;
+
+  /* Lists containing the restrictions of the conditional statements
+     dominating this bb.  This bb can only be executed, if all conditions
+     are true.
+
+     Example:
+
+     for (i = 0; i <= 20; i++)
+     {
+       A
+
+       if (2i <= 8)
+         B
+     }
+
+     So for B there is an additional condition (2i <= 8).
+
+     List of COND_EXPR and SWITCH_EXPR.  A COND_EXPR is true only if the
+     corresponding element in CONDITION_CASES is not NULL_TREE.  For a
+     SWITCH_EXPR the corresponding element in CONDITION_CASES is a
+     CASE_LABEL_EXPR.  */
+  vec<gimple *> conditions;
+  vec<gimple *> condition_cases;
+  vec<data_reference_p> data_refs;
+  vec<scalar_use> read_scalar_refs;
+  vec<tree> write_scalar_refs;
+} *gimple_poly_bb_p;
+
+#define GBB_BB(GBB) (GBB)->bb
+#define GBB_PBB(GBB) (GBB)->pbb
+#define GBB_DATA_REFS(GBB) (GBB)->data_refs
+#define GBB_CONDITIONS(GBB) (GBB)->conditions
+#define GBB_CONDITION_CASES(GBB) (GBB)->condition_cases
+
+/* Return the innermost loop that contains the basic block GBB.  */
+
+static inline struct loop *
+gbb_loop (gimple_poly_bb_p gbb)
+{
+  return GBB_BB (gbb)->loop_father;
+}
+
+/* Returns the gimple loop, that corresponds to the loop_iterator_INDEX.
+   If there is no corresponding gimple loop, we return NULL.  */
+
+static inline loop_p
+gbb_loop_at_index (gimple_poly_bb_p gbb, sese_l &region, int index)
+{
+  loop_p loop = gbb_loop (gbb);
+  int depth = sese_loop_depth (region, loop);
+
+  while (--depth > index)
+    loop = loop_outer (loop);
+
+  gcc_assert (loop_in_sese_p (loop, region));
+
+  return loop;
+}
+
+/* The number of common loops in REGION for GBB1 and GBB2.  */
+
+static inline int
+nb_common_loops (sese_l &region, gimple_poly_bb_p gbb1, gimple_poly_bb_p gbb2)
+{
+  loop_p l1 = gbb_loop (gbb1);
+  loop_p l2 = gbb_loop (gbb2);
+  loop_p common = find_common_loop (l1, l2);
+
+  return sese_loop_depth (region, common);
+}
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/shrink-wrap.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/shrink-wrap.h
new file mode 100644
index 0000000..afe8999
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/shrink-wrap.h
@@ -0,0 +1,34 @@
+/* Shrink-wrapping related functions.
+   Copyright (C) 1989-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SHRINK_WRAP_H
+#define GCC_SHRINK_WRAP_H
+
+#include "function.h"
+
+/* In shrink-wrap.c.  */
+extern bool requires_stack_frame_p (rtx_insn *, HARD_REG_SET, HARD_REG_SET);
+extern void try_shrink_wrapping (edge *entry_edge, rtx_insn *prologue_seq);
+extern void try_shrink_wrapping_separate (basic_block first_bb);
+#define SHRINK_WRAPPING_ENABLED \
+  (flag_shrink_wrap && targetm.have_simple_return ())
+
+#endif  /* GCC_SHRINK_WRAP_H  */
+
+
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/signop.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/signop.h
new file mode 100644
index 0000000..50747fa
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/signop.h
@@ -0,0 +1,33 @@
+/* Operations with SIGNED and UNSIGNED.  -*- C++ -*-
+   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef SIGNOP_H
+#define SIGNOP_H
+
+/* This type is used for the large number of functions that produce
+   different results depending on if the operands are signed types or
+   unsigned types.  The signedness of a tree type can be found by
+   using the TYPE_SIGN macro.  */
+
+enum signop {
+  SIGNED,
+  UNSIGNED
+};
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/sparseset.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sparseset.h
new file mode 100644
index 0000000..6d884a2
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sparseset.h
@@ -0,0 +1,219 @@
+/* SparseSet implementation.
+   Copyright (C) 2007-2019 Free Software Foundation, Inc.
+   Contributed by Peter Bergner <bergner@vnet.ibm.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SPARSESET_H
+#define GCC_SPARSESET_H
+
+/* Implementation of the Briggs and Torczon sparse set representation.
+   The sparse set representation was first published in:
+
+   "An Efficient Representation for Sparse Sets",
+   ACM LOPLAS, Vol. 2, Nos. 1-4, March-December 1993, Pages 59-69.
+
+   The sparse set representation is suitable for integer sets with a
+   fixed-size universe.  Two vectors are used to store the members of
+   the set.  If an element I is in the set, then sparse[I] is the
+   index of I in the dense vector, and dense[sparse[I]] == I.  The dense
+   vector works like a stack.  The size of the stack is the cardinality
+   of the set.
+
+   The following operations can be performed in O(1) time:
+
+     * clear			: sparseset_clear
+     * cardinality		: sparseset_cardinality
+     * set_size			: sparseset_size
+     * member_p			: sparseset_bit_p
+     * add_member		: sparseset_set_bit
+     * remove_member		: sparseset_clear_bit
+     * choose_one		: sparseset_pop
+
+   Additionally, the sparse set representation supports enumeration of
+   the members in O(N) time, where n is the number of members in the set.
+   The members of the set are stored cache-friendly in the dense vector.
+   This makes it a competitive choice for iterating over relatively sparse
+   sets requiring operations:
+
+     * forall			: EXECUTE_IF_SET_IN_SPARSESET
+     * set_copy			: sparseset_copy
+     * set_intersection		: sparseset_and
+     * set_union		: sparseset_ior
+     * set_difference		: sparseset_and_compl
+     * set_disjuction		: (not implemented)
+     * set_compare		: sparseset_equal_p
+
+   NB: It is OK to use remove_member during EXECUTE_IF_SET_IN_SPARSESET.
+   The iterator is updated for it.
+
+   Based on the efficiency of these operations, this representation of
+   sparse sets will often be superior to alternatives such as simple
+   bitmaps, linked-list bitmaps, array bitmaps, balanced binary trees,
+   hash tables, linked lists, etc., if the set is sufficiently sparse.
+   In the LOPLAS paper the cut-off point where sparse sets became faster
+   than simple bitmaps (see sbitmap.h) when N / U < 64 (where U is the
+   size of the universe of the set).
+
+   Because the set universe is fixed, the set cannot be resized.  For
+   sparse sets with initially unknown size, linked-list bitmaps are a
+   better choice, see bitmap.h.
+
+   Sparse sets storage requirements are relatively large: O(U) with a
+   larger constant than sbitmaps (if the storage requirement for an
+   sbitmap with universe U is S, then the storage required for a sparse
+   set for the same universe are 2*HOST_BITS_PER_WIDEST_FAST_INT * S).
+   Accessing the sparse vector is not very cache-friendly, but iterating
+   over the members in the set is cache-friendly because only the dense
+   vector is used.  */
+
+/* Data Structure used for the SparseSet representation.  */
+
+#define SPARSESET_ELT_BITS ((unsigned) HOST_BITS_PER_WIDEST_FAST_INT)
+#define SPARSESET_ELT_TYPE unsigned HOST_WIDEST_FAST_INT
+
+typedef struct sparseset_def
+{
+  SPARSESET_ELT_TYPE *dense;	/* Dense array.  */
+  SPARSESET_ELT_TYPE *sparse;	/* Sparse array.  */
+  SPARSESET_ELT_TYPE members;	/* Number of elements.  */
+  SPARSESET_ELT_TYPE size;	/* Maximum number of elements.  */
+  SPARSESET_ELT_TYPE iter;	/* Iterator index.  */
+  unsigned char iter_inc;	/* Iteration increment amount.  */
+  bool iterating;
+  SPARSESET_ELT_TYPE elms[2];   /* Combined dense and sparse arrays.  */
+} *sparseset;
+
+#define sparseset_free(MAP)  free(MAP)
+extern sparseset sparseset_alloc (SPARSESET_ELT_TYPE n_elms);
+extern void sparseset_clear_bit (sparseset, SPARSESET_ELT_TYPE);
+extern void sparseset_copy (sparseset, sparseset);
+extern void sparseset_and (sparseset, sparseset, sparseset);
+extern void sparseset_and_compl (sparseset, sparseset, sparseset);
+extern void sparseset_ior (sparseset, sparseset, sparseset);
+extern bool sparseset_equal_p (sparseset, sparseset);
+
+/* Operation: S = {}
+   Clear the set of all elements.  */
+
+static inline void
+sparseset_clear (sparseset s)
+{
+  s->members = 0;
+  s->iterating = false;
+}
+
+/* Return the number of elements currently in the set.  */
+
+static inline SPARSESET_ELT_TYPE
+sparseset_cardinality (sparseset s)
+{
+  return s->members;
+}
+
+/* Return the maximum number of elements this set can hold.  */
+
+static inline SPARSESET_ELT_TYPE
+sparseset_size (sparseset s)
+{
+  return s->size;
+}
+
+/* Return true if e is a member of the set S, otherwise return false.  */
+
+static inline bool
+sparseset_bit_p (sparseset s, SPARSESET_ELT_TYPE e)
+{
+  SPARSESET_ELT_TYPE idx;
+
+  gcc_checking_assert (e < s->size);
+
+  idx = s->sparse[e];
+
+  return idx < s->members && s->dense[idx] == e;
+}
+
+/* Low level insertion routine not meant for use outside of sparseset.[ch].
+   Assumes E is valid and not already a member of the set S.  */
+
+static inline void
+sparseset_insert_bit (sparseset s, SPARSESET_ELT_TYPE e, SPARSESET_ELT_TYPE idx)
+{
+  s->sparse[e] = idx;
+  s->dense[idx] = e;
+}
+
+/* Operation: S = S + {e}
+   Insert E into the set S, if it isn't already a member.  */
+
+static inline void
+sparseset_set_bit (sparseset s, SPARSESET_ELT_TYPE e)
+{
+  if (!sparseset_bit_p (s, e))
+    sparseset_insert_bit (s, e, s->members++);
+}
+
+/* Return and remove the last member added to the set S.  */
+
+static inline SPARSESET_ELT_TYPE
+sparseset_pop (sparseset s)
+{
+  SPARSESET_ELT_TYPE mem = s->members;
+
+  gcc_checking_assert (mem != 0);
+
+  s->members = mem - 1;
+  return s->dense[s->members];
+}
+
+static inline void
+sparseset_iter_init (sparseset s)
+{
+  s->iter = 0;
+  s->iter_inc = 1;
+  s->iterating = true;
+}
+
+static inline bool
+sparseset_iter_p (sparseset s)
+{
+  if (s->iterating && s->iter < s->members)
+    return true;
+  else
+    return s->iterating = false;
+}
+
+static inline SPARSESET_ELT_TYPE
+sparseset_iter_elm (sparseset s)
+{
+  return s->dense[s->iter];
+}
+
+static inline void
+sparseset_iter_next (sparseset s)
+{
+  s->iter += s->iter_inc;
+  s->iter_inc = 1;
+}
+
+#define EXECUTE_IF_SET_IN_SPARSESET(SPARSESET, ITER)			\
+  for (sparseset_iter_init (SPARSESET);					\
+       sparseset_iter_p (SPARSESET)					\
+       && (((ITER) = sparseset_iter_elm (SPARSESET)) || 1);		\
+       sparseset_iter_next (SPARSESET))
+
+#endif /* GCC_SPARSESET_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/spellcheck-tree.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/spellcheck-tree.h
new file mode 100644
index 0000000..255ff31
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/spellcheck-tree.h
@@ -0,0 +1,51 @@
+/* Find near-matches for identifiers.
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SPELLCHECK_TREE_H
+#define GCC_SPELLCHECK_TREE_H
+
+#include "spellcheck.h"
+
+/* spellcheck-tree.c  */
+
+extern edit_distance_t
+get_edit_distance (tree ident_s, tree ident_t);
+
+extern tree
+find_closest_identifier (tree target, const auto_vec<tree> *candidates);
+
+/* Specialization of edit_distance_traits for identifiers.  */
+
+template <>
+struct edit_distance_traits<tree>
+{
+  static size_t get_length (tree id)
+  {
+    gcc_assert (TREE_CODE (id) == IDENTIFIER_NODE);
+    return IDENTIFIER_LENGTH (id);
+  }
+
+  static const char *get_string (tree id)
+  {
+    gcc_assert (TREE_CODE (id) == IDENTIFIER_NODE);
+    return IDENTIFIER_POINTER (id);
+  }
+};
+
+#endif  /* GCC_SPELLCHECK_TREE_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/spellcheck.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/spellcheck.h
new file mode 100644
index 0000000..3d48e3e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/spellcheck.h
@@ -0,0 +1,210 @@
+/* Find near-matches for strings and identifiers.
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SPELLCHECK_H
+#define GCC_SPELLCHECK_H
+
+typedef unsigned int edit_distance_t;
+const edit_distance_t MAX_EDIT_DISTANCE = UINT_MAX;
+
+/* spellcheck.c  */
+extern edit_distance_t
+get_edit_distance (const char *s, int len_s,
+		   const char *t, int len_t);
+
+extern edit_distance_t
+get_edit_distance (const char *s, const char *t);
+
+extern const char *
+find_closest_string (const char *target,
+		     const auto_vec<const char *> *candidates);
+
+/* A traits class for describing a string-like type usable by
+   class best_match.
+   Specializations should provide the implementations of the following:
+
+     static size_t get_length (TYPE);
+     static const char *get_string (TYPE);
+
+   get_string should return a non-NULL ptr, which does not need to be
+   0-terminated.  */
+
+template <typename TYPE>
+struct edit_distance_traits {};
+
+/* Specialization of edit_distance_traits for C-style strings.  */
+
+template <>
+struct edit_distance_traits<const char *>
+{
+  static size_t get_length (const char *str)
+  {
+    gcc_assert (str);
+    return strlen (str);
+  }
+
+  static const char *get_string (const char *str)
+  {
+    gcc_assert (str);
+    return str;
+  }
+};
+
+extern edit_distance_t get_edit_distance_cutoff (size_t goal_len,
+						 size_t candidate_len);
+
+/* A type for use when determining the best match against a string,
+   expressed as a template so that we can match against various
+   string-like types (const char *, frontend identifiers, and preprocessor
+   macros).
+
+   This type accumulates the best possible match against GOAL_TYPE for
+   a sequence of elements of CANDIDATE_TYPE, whilst minimizing the
+   number of calls to get_edit_distance and to
+   edit_distance_traits<T>::get_length.  */
+
+template <typename GOAL_TYPE, typename CANDIDATE_TYPE>
+class best_match
+{
+ public:
+  typedef GOAL_TYPE goal_t;
+  typedef CANDIDATE_TYPE candidate_t;
+  typedef edit_distance_traits<goal_t> goal_traits;
+  typedef edit_distance_traits<candidate_t> candidate_traits;
+
+  /* Constructor.  */
+
+  best_match (GOAL_TYPE goal,
+	      edit_distance_t best_distance_so_far = MAX_EDIT_DISTANCE)
+  : m_goal (goal_traits::get_string (goal)),
+    m_goal_len (goal_traits::get_length (goal)),
+    m_best_candidate (NULL),
+    m_best_distance (best_distance_so_far)
+  {}
+
+  /* Compare the edit distance between CANDIDATE and m_goal,
+     and if it's the best so far, record it.  */
+
+  void consider (candidate_t candidate)
+  {
+    size_t candidate_len = candidate_traits::get_length (candidate);
+
+    /* Calculate a lower bound on the candidate's distance to the goal,
+       based on the difference in lengths; it will require at least
+       this many insertions/deletions.  */
+    edit_distance_t min_candidate_distance
+      = abs ((ssize_t)candidate_len - (ssize_t)m_goal_len);
+
+    /* If the candidate's length is sufficiently different to that
+       of the goal string, then the number of insertions/deletions
+       may be >= the best distance so far.  If so, we can reject
+       the candidate immediately without needing to compute
+       the exact distance, since it won't be an improvement.  */
+    if (min_candidate_distance >= m_best_distance)
+      return;
+
+    /* If the candidate will be unable to beat the criterion in
+       get_best_meaningful_candidate, reject it without computing
+       the exact distance.  */
+    edit_distance_t cutoff = get_cutoff (candidate_len);
+    if (min_candidate_distance > cutoff)
+      return;
+
+    /* Otherwise, compute the distance and see if the candidate
+       has beaten the previous best value.  */
+    edit_distance_t dist
+      = get_edit_distance (m_goal, m_goal_len,
+			   candidate_traits::get_string (candidate),
+			   candidate_len);
+    if (dist < m_best_distance)
+      {
+	m_best_distance = dist;
+	m_best_candidate = candidate;
+	m_best_candidate_len = candidate_len;
+      }
+  }
+
+  /* Assuming that BEST_CANDIDATE is known to be better than
+     m_best_candidate, update (without recomputing the edit distance to
+     the goal).  */
+
+  void set_best_so_far (CANDIDATE_TYPE best_candidate,
+			edit_distance_t best_distance,
+			size_t best_candidate_len)
+  {
+    gcc_assert (best_distance < m_best_distance);
+    m_best_candidate = best_candidate;
+    m_best_distance = best_distance;
+    m_best_candidate_len = best_candidate_len;
+  }
+
+  /* Generate the maximum edit distance for which we consider a suggestion
+     to be meaningful, given a candidate of length CANDIDATE_LEN.  */
+
+  edit_distance_t get_cutoff (size_t candidate_len) const
+  {
+    return ::get_edit_distance_cutoff (m_goal_len, candidate_len);
+  }
+
+  /* Get the best candidate so far, but applying a filter to ensure
+     that we return NULL if none of the candidates are close to the goal,
+     to avoid offering nonsensical suggestions to the user.  */
+
+  candidate_t get_best_meaningful_candidate () const
+  {
+    /* If the edit distance is too high, the suggestion is likely to be
+       meaningless.  */
+    if (m_best_candidate)
+      {
+	edit_distance_t cutoff = get_cutoff (m_best_candidate_len);
+	if (m_best_distance > cutoff)
+	  return NULL;
+    }
+
+    /* If the goal string somehow makes it into the candidate list, offering
+       it as a suggestion will be nonsensical e.g.
+         'constexpr' does not name a type; did you mean 'constexpr'?
+       Ultimately such suggestions are due to bugs in constructing the
+       candidate list, but as a band-aid, do not offer suggestions for
+       distance == 0 (where candidate == goal).  */
+    if (m_best_distance == 0)
+      return NULL;
+
+    return m_best_candidate;
+  }
+
+  /* Get the closest candidate so far, without applying any filtering.  */
+
+  candidate_t blithely_get_best_candidate () const
+  {
+    return m_best_candidate;
+  }
+
+  edit_distance_t get_best_distance () const { return m_best_distance; }
+  size_t get_best_candidate_length () const { return m_best_candidate_len; }
+
+ private:
+  const char *m_goal;
+  size_t m_goal_len;
+  candidate_t m_best_candidate;
+  edit_distance_t m_best_distance;
+  size_t m_best_candidate_len;
+};
+
+#endif  /* GCC_SPELLCHECK_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/splay-tree.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/splay-tree.h
new file mode 100644
index 0000000..da533de
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/splay-tree.h
@@ -0,0 +1,165 @@
+/* A splay-tree datatype.  
+   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+   Contributed by Mark Mitchell (mark@markmitchell.com).
+
+   This file is part of GCC.
+   
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING.  If not, write to
+   the Free Software Foundation, 51 Franklin Street - Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* For an easily readable description of splay-trees, see:
+
+     Lewis, Harry R. and Denenberg, Larry.  Data Structures and Their
+     Algorithms.  Harper-Collins, Inc.  1991.  
+
+   The major feature of splay trees is that all basic tree operations
+   are amortized O(log n) time for a tree with n nodes.  */
+
+#ifndef _SPLAY_TREE_H
+#define _SPLAY_TREE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "ansidecl.h"
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+
+/* Use typedefs for the key and data types to facilitate changing
+   these types, if necessary.  These types should be sufficiently wide
+   that any pointer or scalar can be cast to these types, and then
+   cast back, without loss of precision.  */
+typedef uintptr_t splay_tree_key;
+typedef uintptr_t splay_tree_value;
+
+/* Forward declaration for a node in the tree.  */
+typedef struct splay_tree_node_s *splay_tree_node;
+
+/* The type of a function which compares two splay-tree keys.  The
+   function should return values as for qsort.  */
+typedef int (*splay_tree_compare_fn) (splay_tree_key, splay_tree_key);
+
+/* The type of a function used to deallocate any resources associated
+   with the key.  If you provide this function, the splay tree
+   will take the ownership of the memory of the splay_tree_key arg
+   of splay_tree_insert.  This function is called to release the keys
+   present in the tree when calling splay_tree_delete or splay_tree_remove.
+   If splay_tree_insert is called with a key equal to a key already
+   present in the tree, the old key and old value will be released.  */
+typedef void (*splay_tree_delete_key_fn) (splay_tree_key);
+
+/* The type of a function used to deallocate any resources associated
+   with the value.  If you provide this function, the memory of the
+   splay_tree_value arg of splay_tree_insert is managed similarly to
+   the splay_tree_key memory: see splay_tree_delete_key_fn.  */
+typedef void (*splay_tree_delete_value_fn) (splay_tree_value);
+
+/* The type of a function used to iterate over the tree.  */
+typedef int (*splay_tree_foreach_fn) (splay_tree_node, void*);
+
+/* The type of a function used to allocate memory for tree root and
+   node structures.  The first argument is the number of bytes needed;
+   the second is a data pointer the splay tree functions pass through
+   to the allocator.  This function must never return zero.  */
+typedef void *(*splay_tree_allocate_fn) (int, void *);
+
+/* The type of a function used to free memory allocated using the
+   corresponding splay_tree_allocate_fn.  The first argument is the
+   memory to be freed; the latter is a data pointer the splay tree
+   functions pass through to the freer.  */
+typedef void (*splay_tree_deallocate_fn) (void *, void *);
+
+/* The nodes in the splay tree.  */
+struct splay_tree_node_s {
+  /* The key.  */
+  splay_tree_key key;
+
+  /* The value.  */
+  splay_tree_value value;
+
+  /* The left and right children, respectively.  */
+  splay_tree_node left;
+  splay_tree_node right;
+};
+
+/* The splay tree itself.  */
+struct splay_tree_s {
+  /* The root of the tree.  */
+  splay_tree_node root;
+
+  /* The comparision function.  */
+  splay_tree_compare_fn comp;
+
+  /* The deallocate-key function.  NULL if no cleanup is necessary.  */
+  splay_tree_delete_key_fn delete_key;
+
+  /* The deallocate-value function.  NULL if no cleanup is necessary.  */
+  splay_tree_delete_value_fn delete_value;
+
+  /* Node allocate function.  Takes allocate_data as a parameter. */
+  splay_tree_allocate_fn allocate;
+
+  /* Free function for nodes and trees.  Takes allocate_data as a parameter.  */
+  splay_tree_deallocate_fn deallocate;
+
+  /* Parameter for allocate/free functions.  */
+  void *allocate_data;
+};
+
+typedef struct splay_tree_s *splay_tree;
+
+extern splay_tree splay_tree_new (splay_tree_compare_fn,
+				  splay_tree_delete_key_fn,
+				  splay_tree_delete_value_fn);
+extern splay_tree splay_tree_new_with_allocator (splay_tree_compare_fn,
+						 splay_tree_delete_key_fn,
+						 splay_tree_delete_value_fn,
+						 splay_tree_allocate_fn,
+						 splay_tree_deallocate_fn,
+						 void *);
+extern splay_tree splay_tree_new_typed_alloc (splay_tree_compare_fn,
+					      splay_tree_delete_key_fn,
+					      splay_tree_delete_value_fn,
+					      splay_tree_allocate_fn,
+					      splay_tree_allocate_fn,
+					      splay_tree_deallocate_fn,
+					      void *);
+extern void splay_tree_delete (splay_tree);
+extern splay_tree_node splay_tree_insert (splay_tree,
+					  splay_tree_key,
+					  splay_tree_value);
+extern void splay_tree_remove	(splay_tree, splay_tree_key);
+extern splay_tree_node splay_tree_lookup (splay_tree, splay_tree_key);
+extern splay_tree_node splay_tree_predecessor (splay_tree, splay_tree_key);
+extern splay_tree_node splay_tree_successor (splay_tree, splay_tree_key);
+extern splay_tree_node splay_tree_max (splay_tree);
+extern splay_tree_node splay_tree_min (splay_tree);
+extern int splay_tree_foreach (splay_tree, splay_tree_foreach_fn, void*);
+extern int splay_tree_compare_ints (splay_tree_key, splay_tree_key);
+extern int splay_tree_compare_pointers (splay_tree_key, splay_tree_key);
+extern int splay_tree_compare_strings (splay_tree_key, splay_tree_key);
+extern void splay_tree_delete_pointers (splay_tree_value);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _SPLAY_TREE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/sreal.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sreal.h
new file mode 100644
index 0000000..aa3327b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sreal.h
@@ -0,0 +1,285 @@
+/* Definitions for simple data type for real numbers.
+   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SREAL_H
+#define GCC_SREAL_H
+
+#define SREAL_PART_BITS 31
+
+#define UINT64_BITS	64
+
+#define SREAL_MIN_SIG ((int64_t) 1 << (SREAL_PART_BITS - 2))
+#define SREAL_MAX_SIG (((int64_t) 1 << (SREAL_PART_BITS - 1)) - 1)
+#define SREAL_MAX_EXP (INT_MAX / 4)
+
+#define SREAL_BITS SREAL_PART_BITS
+
+#define SREAL_SIGN(v) (v < 0 ? -1: 1)
+#define SREAL_ABS(v) (v < 0 ? -v: v)
+
+struct output_block;
+struct lto_input_block;
+
+/* Structure for holding a simple real number.  */
+class sreal
+{
+public:
+  /* Construct an uninitialized sreal.  */
+  sreal () : m_sig (-1), m_exp (-1) {}
+
+  /* Construct a sreal.  */
+  sreal (int64_t sig, int exp = 0)
+  {
+    normalize (sig, exp);
+  }
+
+  void dump (FILE *) const;
+  int64_t to_int () const;
+  double to_double () const;
+  void stream_out (struct output_block *);
+  static sreal stream_in (struct lto_input_block *);
+  sreal operator+ (const sreal &other) const;
+  sreal operator- (const sreal &other) const;
+  sreal operator* (const sreal &other) const;
+  sreal operator/ (const sreal &other) const;
+
+  bool operator< (const sreal &other) const
+  {
+    if (m_exp == other.m_exp)
+      return m_sig < other.m_sig;
+    else
+    {
+      bool negative = m_sig < 0;
+      bool other_negative = other.m_sig < 0;
+
+      if (negative != other_negative)
+        return negative > other_negative;
+
+      bool r = m_exp < other.m_exp;
+      return negative ? !r : r;
+    }
+  }
+
+  bool operator== (const sreal &other) const
+  {
+    return m_exp == other.m_exp && m_sig == other.m_sig;
+  }
+
+  sreal operator- () const
+  {
+    sreal tmp = *this;
+    tmp.m_sig *= -1;
+
+    return tmp;
+  }
+
+  sreal shift (int s) const
+  {
+    /* Zero needs no shifting.  */
+    if (!m_sig)
+      return *this;
+    gcc_checking_assert (s <= SREAL_MAX_EXP);
+    gcc_checking_assert (s >= -SREAL_MAX_EXP);
+
+    /* Overflows/drop to 0 could be handled gracefully, but hopefully we do not
+       need to do so.  */
+    gcc_checking_assert (m_exp + s <= SREAL_MAX_EXP);
+    gcc_checking_assert (m_exp + s >= -SREAL_MAX_EXP);
+
+    sreal tmp = *this;
+    tmp.m_exp += s;
+
+    return tmp;
+  }
+
+  /* Global minimum sreal can hold.  */
+  inline static sreal min ()
+  {
+    sreal min;
+    /* This never needs normalization.  */
+    min.m_sig = -SREAL_MAX_SIG;
+    min.m_exp = SREAL_MAX_EXP;
+    return min;
+  }
+
+  /* Global minimum sreal can hold.  */
+  inline static sreal max ()
+  {
+    sreal max;
+    /* This never needs normalization.  */
+    max.m_sig = SREAL_MAX_SIG;
+    max.m_exp = SREAL_MAX_EXP;
+    return max;
+  }
+
+private:
+  inline void normalize (int64_t new_sig, signed int new_exp);
+  inline void normalize_up (int64_t new_sig, signed int new_exp);
+  inline void normalize_down (int64_t new_sig, signed int new_exp);
+  void shift_right (int amount);
+  static sreal signedless_plus (const sreal &a, const sreal &b, bool negative);
+  static sreal signedless_minus (const sreal &a, const sreal &b, bool negative);
+
+  int32_t m_sig;			/* Significant.  */
+  signed int m_exp;			/* Exponent.  */
+};
+
+extern void debug (const sreal &ref);
+extern void debug (const sreal *ptr);
+
+inline sreal &operator+= (sreal &a, const sreal &b)
+{
+  return a = a + b;
+}
+
+inline sreal &operator-= (sreal &a, const sreal &b)
+{
+  return a = a - b;
+}
+
+inline sreal &operator/= (sreal &a, const sreal &b)
+{
+  return a = a / b;
+}
+
+inline sreal &operator*= (sreal &a, const sreal &b)
+{
+  return a = a  * b;
+}
+
+inline bool operator!= (const sreal &a, const sreal &b)
+{
+  return !(a == b);
+}
+
+inline bool operator> (const sreal &a, const sreal &b)
+{
+  return !(a == b || a < b);
+}
+
+inline bool operator<= (const sreal &a, const sreal &b)
+{
+  return a < b || a == b;
+}
+
+inline bool operator>= (const sreal &a, const sreal &b)
+{
+  return a == b || a > b;
+}
+
+inline sreal operator<< (const sreal &a, int exp)
+{
+  return a.shift (exp);
+}
+
+inline sreal operator>> (const sreal &a, int exp)
+{
+  return a.shift (-exp);
+}
+
+/* Make significant to be >= SREAL_MIN_SIG.
+
+   Make this separate method so inliner can handle hot path better.  */
+
+inline void
+sreal::normalize_up (int64_t new_sig, signed int new_exp)
+{
+  unsigned HOST_WIDE_INT sig = absu_hwi (new_sig);
+  int shift = SREAL_PART_BITS - 2 - floor_log2 (sig);
+
+  gcc_checking_assert (shift > 0);
+  sig <<= shift;
+  new_exp -= shift;
+  gcc_checking_assert (sig <= SREAL_MAX_SIG && sig >= SREAL_MIN_SIG);
+
+  /* Check underflow.  */
+  if (new_exp < -SREAL_MAX_EXP)
+    {
+      new_exp = -SREAL_MAX_EXP;
+      sig = 0;
+    }
+  m_exp = new_exp;
+  if (SREAL_SIGN (new_sig) == -1)
+    m_sig = -sig;
+  else
+    m_sig = sig;
+}
+
+/* Make significant to be <= SREAL_MAX_SIG.
+
+   Make this separate method so inliner can handle hot path better.  */
+
+inline void
+sreal::normalize_down (int64_t new_sig, signed int new_exp)
+{
+  int last_bit;
+  unsigned HOST_WIDE_INT sig = absu_hwi (new_sig);
+  int shift = floor_log2 (sig) - SREAL_PART_BITS + 2;
+
+  gcc_checking_assert (shift > 0);
+  last_bit = (sig >> (shift-1)) & 1;
+  sig >>= shift;
+  new_exp += shift;
+  gcc_checking_assert (sig <= SREAL_MAX_SIG && sig >= SREAL_MIN_SIG);
+
+  /* Round the number.  */
+  sig += last_bit;
+  if (sig > SREAL_MAX_SIG)
+    {
+      sig >>= 1;
+      new_exp++;
+    }
+
+  /* Check overflow.  */
+  if (new_exp > SREAL_MAX_EXP)
+    {
+      new_exp = SREAL_MAX_EXP;
+      sig = SREAL_MAX_SIG;
+    }
+  m_exp = new_exp;
+  if (SREAL_SIGN (new_sig) == -1)
+    m_sig = -sig;
+  else
+    m_sig = sig;
+}
+
+/* Normalize *this; the hot path.  */
+
+inline void
+sreal::normalize (int64_t new_sig, signed int new_exp)
+{
+  unsigned HOST_WIDE_INT sig = absu_hwi (new_sig);
+
+  if (sig == 0)
+    {
+      m_sig = 0;
+      m_exp = -SREAL_MAX_EXP;
+    }
+  else if (sig > SREAL_MAX_SIG)
+    normalize_down (new_sig, new_exp);
+  else if (sig < SREAL_MIN_SIG)
+    normalize_up (new_sig, new_exp);
+  else
+    {
+      m_sig = new_sig;
+      m_exp = new_exp;
+    }
+}
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ssa-iterators.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ssa-iterators.h
new file mode 100644
index 0000000..1462699
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ssa-iterators.h
@@ -0,0 +1,1010 @@
+/* Header file for SSA iterators.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SSA_ITERATORS_H
+#define GCC_SSA_ITERATORS_H
+
+/* Immediate use lists are used to directly access all uses for an SSA
+   name and get pointers to the statement for each use.
+
+   The structure ssa_use_operand_t consists of PREV and NEXT pointers
+   to maintain the list.  A USE pointer, which points to address where
+   the use is located and a LOC pointer which can point to the
+   statement where the use is located, or, in the case of the root
+   node, it points to the SSA name itself.
+
+   The list is anchored by an occurrence of ssa_operand_d *in* the
+   ssa_name node itself (named 'imm_uses').  This node is uniquely
+   identified by having a NULL USE pointer. and the LOC pointer
+   pointing back to the ssa_name node itself.  This node forms the
+   base for a circular list, and initially this is the only node in
+   the list.
+
+   Fast iteration allows each use to be examined, but does not allow
+   any modifications to the uses or stmts.
+
+   Normal iteration allows insertion, deletion, and modification. the
+   iterator manages this by inserting a marker node into the list
+   immediately before the node currently being examined in the list.
+   this marker node is uniquely identified by having null stmt *and* a
+   null use pointer.
+
+   When iterating to the next use, the iteration routines check to see
+   if the node after the marker has changed. if it has, then the node
+   following the marker is now the next one to be visited. if not, the
+   marker node is moved past that node in the list (visualize it as
+   bumping the marker node through the list).  this continues until
+   the marker node is moved to the original anchor position. the
+   marker node is then removed from the list.
+
+   If iteration is halted early, the marker node must be removed from
+   the list before continuing.  */
+struct imm_use_iterator
+{
+  /* This is the current use the iterator is processing.  */
+  ssa_use_operand_t *imm_use;
+  /* This marks the last use in the list (use node from SSA_NAME)  */
+  ssa_use_operand_t *end_p;
+  /* This node is inserted and used to mark the end of the uses for a stmt.  */
+  ssa_use_operand_t iter_node;
+  /* This is the next ssa_name to visit.  IMM_USE may get removed before
+     the next one is traversed to, so it must be cached early.  */
+  ssa_use_operand_t *next_imm_name;
+};
+
+
+/* Use this iterator when simply looking at stmts.  Adding, deleting or
+   modifying stmts will cause this iterator to malfunction.  */
+
+#define FOR_EACH_IMM_USE_FAST(DEST, ITER, SSAVAR)		\
+  for ((DEST) = first_readonly_imm_use (&(ITER), (SSAVAR));	\
+       !end_readonly_imm_use_p (&(ITER));			\
+       (void) ((DEST) = next_readonly_imm_use (&(ITER))))
+
+/* Use this iterator to visit each stmt which has a use of SSAVAR.  */
+
+#define FOR_EACH_IMM_USE_STMT(STMT, ITER, SSAVAR)		\
+  for ((STMT) = first_imm_use_stmt (&(ITER), (SSAVAR));		\
+       !end_imm_use_stmt_p (&(ITER));				\
+       (void) ((STMT) = next_imm_use_stmt (&(ITER))))
+
+/* Use this to terminate the FOR_EACH_IMM_USE_STMT loop early.  Failure to
+   do so will result in leaving a iterator marker node in the immediate
+   use list, and nothing good will come from that.   */
+#define BREAK_FROM_IMM_USE_STMT(ITER)				\
+   {								\
+     end_imm_use_stmt_traverse (&(ITER));			\
+     break;							\
+   }
+
+/* Similarly for return.  */
+#define RETURN_FROM_IMM_USE_STMT(ITER, VAL)			\
+  {								\
+    end_imm_use_stmt_traverse (&(ITER));			\
+    return (VAL);						\
+  }
+
+/* Use this iterator in combination with FOR_EACH_IMM_USE_STMT to
+   get access to each occurrence of ssavar on the stmt returned by
+   that iterator..  for instance:
+
+     FOR_EACH_IMM_USE_STMT (stmt, iter, ssavar)
+       {
+         FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
+	   {
+	     SET_USE (use_p, blah);
+	   }
+	 update_stmt (stmt);
+       }							 */
+
+#define FOR_EACH_IMM_USE_ON_STMT(DEST, ITER)			\
+  for ((DEST) = first_imm_use_on_stmt (&(ITER));		\
+       !end_imm_use_on_stmt_p (&(ITER));			\
+       (void) ((DEST) = next_imm_use_on_stmt (&(ITER))))
+
+
+
+extern bool single_imm_use_1 (const ssa_use_operand_t *head,
+			      use_operand_p *use_p, gimple **stmt);
+
+
+enum ssa_op_iter_type {
+  ssa_op_iter_none = 0,
+  ssa_op_iter_tree,
+  ssa_op_iter_use,
+  ssa_op_iter_def
+};
+
+/* This structure is used in the operand iterator loops.  It contains the
+   items required to determine which operand is retrieved next.  During
+   optimization, this structure is scalarized, and any unused fields are
+   optimized away, resulting in little overhead.  */
+
+struct ssa_op_iter
+{
+  enum ssa_op_iter_type iter_type;
+  bool done;
+  int flags;
+  unsigned i;
+  unsigned numops;
+  use_optype_p uses;
+  gimple *stmt;
+};
+
+/* NOTE: Keep these in sync with doc/tree-ssa.texi.  */
+/* These flags are used to determine which operands are returned during
+   execution of the loop.  */
+#define SSA_OP_USE		0x01	/* Real USE operands.  */
+#define SSA_OP_DEF		0x02	/* Real DEF operands.  */
+#define SSA_OP_VUSE		0x04	/* VUSE operands.  */
+#define SSA_OP_VDEF		0x08	/* VDEF operands.  */
+/* These are commonly grouped operand flags.  */
+#define SSA_OP_VIRTUAL_USES	(SSA_OP_VUSE)
+#define SSA_OP_VIRTUAL_DEFS	(SSA_OP_VDEF)
+#define SSA_OP_ALL_VIRTUALS     (SSA_OP_VIRTUAL_USES | SSA_OP_VIRTUAL_DEFS)
+#define SSA_OP_ALL_USES		(SSA_OP_VIRTUAL_USES | SSA_OP_USE)
+#define SSA_OP_ALL_DEFS		(SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF)
+#define SSA_OP_ALL_OPERANDS	(SSA_OP_ALL_USES | SSA_OP_ALL_DEFS)
+
+/* This macro executes a loop over the operands of STMT specified in FLAG,
+   returning each operand as a 'tree' in the variable TREEVAR.  ITER is an
+   ssa_op_iter structure used to control the loop.  */
+#define FOR_EACH_SSA_TREE_OPERAND(TREEVAR, STMT, ITER, FLAGS)	\
+  for (TREEVAR = op_iter_init_tree (&(ITER), STMT, FLAGS);	\
+       !op_iter_done (&(ITER));					\
+       (void) (TREEVAR = op_iter_next_tree (&(ITER))))
+
+/* This macro executes a loop over the operands of STMT specified in FLAG,
+   returning each operand as a 'use_operand_p' in the variable USEVAR.
+   ITER is an ssa_op_iter structure used to control the loop.  */
+#define FOR_EACH_SSA_USE_OPERAND(USEVAR, STMT, ITER, FLAGS)	\
+  for (USEVAR = op_iter_init_use (&(ITER), STMT, FLAGS);	\
+       !op_iter_done (&(ITER));					\
+       USEVAR = op_iter_next_use (&(ITER)))
+
+/* This macro executes a loop over the operands of STMT specified in FLAG,
+   returning each operand as a 'def_operand_p' in the variable DEFVAR.
+   ITER is an ssa_op_iter structure used to control the loop.  */
+#define FOR_EACH_SSA_DEF_OPERAND(DEFVAR, STMT, ITER, FLAGS)	\
+  for (DEFVAR = op_iter_init_def (&(ITER), STMT, FLAGS);	\
+       !op_iter_done (&(ITER));					\
+       DEFVAR = op_iter_next_def (&(ITER)))
+
+/* This macro will execute a loop over all the arguments of a PHI which
+   match FLAGS.   A use_operand_p is always returned via USEVAR.  FLAGS
+   can be either SSA_OP_USE or SSA_OP_VIRTUAL_USES or SSA_OP_ALL_USES.  */
+#define FOR_EACH_PHI_ARG(USEVAR, STMT, ITER, FLAGS)		\
+  for ((USEVAR) = op_iter_init_phiuse (&(ITER), STMT, FLAGS);	\
+       !op_iter_done (&(ITER));					\
+       (USEVAR) = op_iter_next_use (&(ITER)))
+
+
+/* This macro will execute a loop over a stmt, regardless of whether it is
+   a real stmt or a PHI node, looking at the USE nodes matching FLAGS.  */
+#define FOR_EACH_PHI_OR_STMT_USE(USEVAR, STMT, ITER, FLAGS)	\
+  for ((USEVAR) = (gimple_code (STMT) == GIMPLE_PHI 		\
+		   ? op_iter_init_phiuse (&(ITER),              \
+					  as_a <gphi *> (STMT), \
+					  FLAGS)		\
+		   : op_iter_init_use (&(ITER), STMT, FLAGS));	\
+       !op_iter_done (&(ITER));					\
+       (USEVAR) = op_iter_next_use (&(ITER)))
+
+/* This macro will execute a loop over a stmt, regardless of whether it is
+   a real stmt or a PHI node, looking at the DEF nodes matching FLAGS.  */
+#define FOR_EACH_PHI_OR_STMT_DEF(DEFVAR, STMT, ITER, FLAGS)	\
+  for ((DEFVAR) = (gimple_code (STMT) == GIMPLE_PHI 		\
+		   ? op_iter_init_phidef (&(ITER),		\
+					  as_a <gphi *> (STMT), \
+					  FLAGS)		\
+		   : op_iter_init_def (&(ITER), STMT, FLAGS));	\
+       !op_iter_done (&(ITER));					\
+       (DEFVAR) = op_iter_next_def (&(ITER)))
+
+/* This macro returns an operand in STMT as a tree if it is the ONLY
+   operand matching FLAGS.  If there are 0 or more than 1 operand matching
+   FLAGS, then NULL_TREE is returned.  */
+#define SINGLE_SSA_TREE_OPERAND(STMT, FLAGS)			\
+  single_ssa_tree_operand (STMT, FLAGS)
+
+/* This macro returns an operand in STMT as a use_operand_p if it is the ONLY
+   operand matching FLAGS.  If there are 0 or more than 1 operand matching
+   FLAGS, then NULL_USE_OPERAND_P is returned.  */
+#define SINGLE_SSA_USE_OPERAND(STMT, FLAGS)			\
+  single_ssa_use_operand (STMT, FLAGS)
+
+/* This macro returns an operand in STMT as a def_operand_p if it is the ONLY
+   operand matching FLAGS.  If there are 0 or more than 1 operand matching
+   FLAGS, then NULL_DEF_OPERAND_P is returned.  */
+#define SINGLE_SSA_DEF_OPERAND(STMT, FLAGS)			\
+  single_ssa_def_operand (STMT, FLAGS)
+
+/* This macro returns TRUE if there are no operands matching FLAGS in STMT.  */
+#define ZERO_SSA_OPERANDS(STMT, FLAGS) 	zero_ssa_operands (STMT, FLAGS)
+
+/* This macro counts the number of operands in STMT matching FLAGS.  */
+#define NUM_SSA_OPERANDS(STMT, FLAGS)	num_ssa_operands (STMT, FLAGS)
+
+
+/* Delink an immediate_uses node from its chain.  */
+static inline void
+delink_imm_use (ssa_use_operand_t *linknode)
+{
+  /* Return if this node is not in a list.  */
+  if (linknode->prev == NULL)
+    return;
+
+  linknode->prev->next = linknode->next;
+  linknode->next->prev = linknode->prev;
+  linknode->prev = NULL;
+  linknode->next = NULL;
+}
+
+/* Link ssa_imm_use node LINKNODE into the chain for LIST.  */
+static inline void
+link_imm_use_to_list (ssa_use_operand_t *linknode, ssa_use_operand_t *list)
+{
+  /* Link the new node at the head of the list.  If we are in the process of
+     traversing the list, we won't visit any new nodes added to it.  */
+  linknode->prev = list;
+  linknode->next = list->next;
+  list->next->prev = linknode;
+  list->next = linknode;
+}
+
+/* Link ssa_imm_use node LINKNODE into the chain for DEF.  */
+static inline void
+link_imm_use (ssa_use_operand_t *linknode, tree def)
+{
+  ssa_use_operand_t *root;
+
+  if (!def || TREE_CODE (def) != SSA_NAME)
+    linknode->prev = NULL;
+  else
+    {
+      root = &(SSA_NAME_IMM_USE_NODE (def));
+      if (linknode->use)
+        gcc_checking_assert (*(linknode->use) == def);
+      link_imm_use_to_list (linknode, root);
+    }
+}
+
+/* Set the value of a use pointed to by USE to VAL.  */
+static inline void
+set_ssa_use_from_ptr (use_operand_p use, tree val)
+{
+  delink_imm_use (use);
+  *(use->use) = val;
+  link_imm_use (use, val);
+}
+
+/* Link ssa_imm_use node LINKNODE into the chain for DEF, with use occurring
+   in STMT.  */
+static inline void
+link_imm_use_stmt (ssa_use_operand_t *linknode, tree def, gimple *stmt)
+{
+  if (stmt)
+    link_imm_use (linknode, def);
+  else
+    link_imm_use (linknode, NULL);
+  linknode->loc.stmt = stmt;
+}
+
+/* Relink a new node in place of an old node in the list.  */
+static inline void
+relink_imm_use (ssa_use_operand_t *node, ssa_use_operand_t *old)
+{
+  /* The node one had better be in the same list.  */
+  gcc_checking_assert (*(old->use) == *(node->use));
+  node->prev = old->prev;
+  node->next = old->next;
+  if (old->prev)
+    {
+      old->prev->next = node;
+      old->next->prev = node;
+      /* Remove the old node from the list.  */
+      old->prev = NULL;
+    }
+}
+
+/* Relink ssa_imm_use node LINKNODE into the chain for OLD, with use occurring
+   in STMT.  */
+static inline void
+relink_imm_use_stmt (ssa_use_operand_t *linknode, ssa_use_operand_t *old,
+		     gimple *stmt)
+{
+  if (stmt)
+    relink_imm_use (linknode, old);
+  else
+    link_imm_use (linknode, NULL);
+  linknode->loc.stmt = stmt;
+}
+
+
+/* Return true is IMM has reached the end of the immediate use list.  */
+static inline bool
+end_readonly_imm_use_p (const imm_use_iterator *imm)
+{
+  return (imm->imm_use == imm->end_p);
+}
+
+/* Initialize iterator IMM to process the list for VAR.  */
+static inline use_operand_p
+first_readonly_imm_use (imm_use_iterator *imm, tree var)
+{
+  imm->end_p = &(SSA_NAME_IMM_USE_NODE (var));
+  imm->imm_use = imm->end_p->next;
+  imm->iter_node.next = imm->imm_use->next;
+  if (end_readonly_imm_use_p (imm))
+    return NULL_USE_OPERAND_P;
+  return imm->imm_use;
+}
+
+/* Bump IMM to the next use in the list.  */
+static inline use_operand_p
+next_readonly_imm_use (imm_use_iterator *imm)
+{
+  use_operand_p old = imm->imm_use;
+
+  /* If this assertion fails, it indicates the 'next' pointer has changed
+     since the last bump.  This indicates that the list is being modified
+     via stmt changes, or SET_USE, or somesuch thing, and you need to be
+     using the SAFE version of the iterator.  */
+  if (flag_checking)
+    {
+      gcc_assert (imm->iter_node.next == old->next);
+      imm->iter_node.next = old->next->next;
+    }
+
+  imm->imm_use = old->next;
+  if (end_readonly_imm_use_p (imm))
+    return NULL_USE_OPERAND_P;
+  return imm->imm_use;
+}
+
+
+/* Return true if VAR has no nondebug uses.  */
+static inline bool
+has_zero_uses (const_tree var)
+{
+  const ssa_use_operand_t *const head = &(SSA_NAME_IMM_USE_NODE (var));
+  const ssa_use_operand_t *ptr;
+
+  for (ptr = head->next; ptr != head; ptr = ptr->next)
+    if (USE_STMT (ptr) && !is_gimple_debug (USE_STMT (ptr)))
+      return false;
+
+  return true;
+}
+
+/* Return true if VAR has a single nondebug use.  */
+static inline bool
+has_single_use (const_tree var)
+{
+  const ssa_use_operand_t *const head = &(SSA_NAME_IMM_USE_NODE (var));
+  const ssa_use_operand_t *ptr;
+  bool single = false;
+   
+  for (ptr = head->next; ptr != head; ptr = ptr->next)
+    if (USE_STMT(ptr) && !is_gimple_debug (USE_STMT (ptr)))
+      {
+	if (single)
+	  return false;
+	else 
+	  single = true;
+      }
+
+  return single;
+}
+    
+/* If VAR has only a single immediate nondebug use, return true, and
+   set USE_P and STMT to the use pointer and stmt of occurrence.  */
+static inline bool
+single_imm_use (const_tree var, use_operand_p *use_p, gimple **stmt)
+{
+  const ssa_use_operand_t *const ptr = &(SSA_NAME_IMM_USE_NODE (var));
+
+  /* If there aren't any uses whatsoever, we're done.  */
+  if (ptr == ptr->next)
+    {
+    return_false:
+      *use_p = NULL_USE_OPERAND_P;
+      *stmt = NULL;
+      return false;
+    }
+
+  /* If there's a single use, check that it's not a debug stmt.  */
+  if (ptr == ptr->next->next)
+    {
+      if (USE_STMT (ptr->next) && !is_gimple_debug (USE_STMT (ptr->next)))
+	{
+	  *use_p = ptr->next;
+	  *stmt = ptr->next->loc.stmt;
+	  return true;
+	}
+      else
+	goto return_false;
+    }
+
+  return single_imm_use_1 (ptr, use_p, stmt);
+}
+
+/* Return the number of nondebug immediate uses of VAR.  */
+static inline unsigned int
+num_imm_uses (const_tree var)
+{
+  const ssa_use_operand_t *const start = &(SSA_NAME_IMM_USE_NODE (var));
+  const ssa_use_operand_t *ptr;
+  unsigned int num = 0;
+
+  if (!MAY_HAVE_DEBUG_BIND_STMTS)
+    {
+      for (ptr = start->next; ptr != start; ptr = ptr->next)
+	if (USE_STMT (ptr))
+	  num++;
+    }
+  else
+    for (ptr = start->next; ptr != start; ptr = ptr->next)
+      if (USE_STMT (ptr) && !is_gimple_debug (USE_STMT (ptr)))
+	num++;
+
+  return num;
+}
+
+/*  -----------------------------------------------------------------------  */
+
+/* The following set of routines are used to iterator over various type of
+   SSA operands.  */
+
+/* Return true if PTR is finished iterating.  */
+static inline bool
+op_iter_done (const ssa_op_iter *ptr)
+{
+  return ptr->done;
+}
+
+/* Get the next iterator use value for PTR.  */
+static inline use_operand_p
+op_iter_next_use (ssa_op_iter *ptr)
+{
+  use_operand_p use_p;
+  gcc_checking_assert (ptr->iter_type == ssa_op_iter_use);
+  if (ptr->uses)
+    {
+      use_p = USE_OP_PTR (ptr->uses);
+      ptr->uses = ptr->uses->next;
+      return use_p;
+    }
+  if (ptr->i < ptr->numops)
+    {
+      return PHI_ARG_DEF_PTR (ptr->stmt, (ptr->i)++);
+    }
+  ptr->done = true;
+  return NULL_USE_OPERAND_P;
+}
+
+/* Get the next iterator def value for PTR.  */
+static inline def_operand_p
+op_iter_next_def (ssa_op_iter *ptr)
+{
+  gcc_checking_assert (ptr->iter_type == ssa_op_iter_def);
+  if (ptr->flags & SSA_OP_VDEF)
+    {
+      tree *p;
+      ptr->flags &= ~SSA_OP_VDEF;
+      p = gimple_vdef_ptr (ptr->stmt);
+      if (p && *p)
+	return p;
+    }
+  if (ptr->flags & SSA_OP_DEF)
+    {
+      while (ptr->i < ptr->numops)
+	{
+	  tree *val = gimple_op_ptr (ptr->stmt, ptr->i);
+	  ptr->i++;
+	  if (*val)
+	    {
+	      if (TREE_CODE (*val) == TREE_LIST)
+		val = &TREE_VALUE (*val);
+	      if (TREE_CODE (*val) == SSA_NAME
+		  || is_gimple_reg (*val))
+		return val;
+	    }
+	}
+      ptr->flags &= ~SSA_OP_DEF;
+    }
+
+  ptr->done = true;
+  return NULL_DEF_OPERAND_P;
+}
+
+/* Get the next iterator tree value for PTR.  */
+static inline tree
+op_iter_next_tree (ssa_op_iter *ptr)
+{
+  tree val;
+  gcc_checking_assert (ptr->iter_type == ssa_op_iter_tree);
+  if (ptr->uses)
+    {
+      val = USE_OP (ptr->uses);
+      ptr->uses = ptr->uses->next;
+      return val;
+    }
+  if (ptr->flags & SSA_OP_VDEF)
+    {
+      ptr->flags &= ~SSA_OP_VDEF;
+      if ((val = gimple_vdef (ptr->stmt)))
+	return val;
+    }
+  if (ptr->flags & SSA_OP_DEF)
+    {
+      while (ptr->i < ptr->numops)
+	{
+	  val = gimple_op (ptr->stmt, ptr->i);
+	  ptr->i++;
+	  if (val)
+	    {
+	      if (TREE_CODE (val) == TREE_LIST)
+		val = TREE_VALUE (val);
+	      if (TREE_CODE (val) == SSA_NAME
+		  || is_gimple_reg (val))
+		return val;
+	    }
+	}
+      ptr->flags &= ~SSA_OP_DEF;
+    }
+
+  ptr->done = true;
+  return NULL_TREE;
+}
+
+
+/* This functions clears the iterator PTR, and marks it done.  This is normally
+   used to prevent warnings in the compile about might be uninitialized
+   components.  */
+
+static inline void
+clear_and_done_ssa_iter (ssa_op_iter *ptr)
+{
+  ptr->i = 0;
+  ptr->numops = 0;
+  ptr->uses = NULL;
+  ptr->iter_type = ssa_op_iter_none;
+  ptr->stmt = NULL;
+  ptr->done = true;
+  ptr->flags = 0;
+}
+
+/* Initialize the iterator PTR to the virtual defs in STMT.  */
+static inline void
+op_iter_init (ssa_op_iter *ptr, gimple *stmt, int flags)
+{
+  /* PHI nodes require a different iterator initialization path.  We
+     do not support iterating over virtual defs or uses without
+     iterating over defs or uses at the same time.  */
+  gcc_checking_assert (gimple_code (stmt) != GIMPLE_PHI
+		       && (!(flags & SSA_OP_VDEF) || (flags & SSA_OP_DEF))
+		       && (!(flags & SSA_OP_VUSE) || (flags & SSA_OP_USE)));
+  ptr->numops = 0;
+  if (flags & (SSA_OP_DEF | SSA_OP_VDEF))
+    {
+      switch (gimple_code (stmt))
+	{
+	  case GIMPLE_ASSIGN:
+	  case GIMPLE_CALL:
+	    ptr->numops = 1;
+	    break;
+	  case GIMPLE_ASM:
+	    ptr->numops = gimple_asm_noutputs (as_a <gasm *> (stmt));
+	    break;
+	  case GIMPLE_TRANSACTION:
+	    ptr->numops = 0;
+	    flags &= ~SSA_OP_DEF;
+	    break;
+	  default:
+	    ptr->numops = 0;
+	    flags &= ~(SSA_OP_DEF | SSA_OP_VDEF);
+	    break;
+	}
+    }
+  ptr->uses = (flags & (SSA_OP_USE|SSA_OP_VUSE)) ? gimple_use_ops (stmt) : NULL;
+  if (!(flags & SSA_OP_VUSE)
+      && ptr->uses
+      && gimple_vuse (stmt) != NULL_TREE)
+    ptr->uses = ptr->uses->next;
+  ptr->done = false;
+  ptr->i = 0;
+
+  ptr->stmt = stmt;
+  ptr->flags = flags;
+}
+
+/* Initialize iterator PTR to the use operands in STMT based on FLAGS. Return
+   the first use.  */
+static inline use_operand_p
+op_iter_init_use (ssa_op_iter *ptr, gimple *stmt, int flags)
+{
+  gcc_checking_assert ((flags & SSA_OP_ALL_DEFS) == 0
+		       && (flags & SSA_OP_USE));
+  op_iter_init (ptr, stmt, flags);
+  ptr->iter_type = ssa_op_iter_use;
+  return op_iter_next_use (ptr);
+}
+
+/* Initialize iterator PTR to the def operands in STMT based on FLAGS. Return
+   the first def.  */
+static inline def_operand_p
+op_iter_init_def (ssa_op_iter *ptr, gimple *stmt, int flags)
+{
+  gcc_checking_assert ((flags & SSA_OP_ALL_USES) == 0
+		       && (flags & SSA_OP_DEF));
+  op_iter_init (ptr, stmt, flags);
+  ptr->iter_type = ssa_op_iter_def;
+  return op_iter_next_def (ptr);
+}
+
+/* Initialize iterator PTR to the operands in STMT based on FLAGS. Return
+   the first operand as a tree.  */
+static inline tree
+op_iter_init_tree (ssa_op_iter *ptr, gimple *stmt, int flags)
+{
+  op_iter_init (ptr, stmt, flags);
+  ptr->iter_type = ssa_op_iter_tree;
+  return op_iter_next_tree (ptr);
+}
+
+
+/* If there is a single operand in STMT matching FLAGS, return it.  Otherwise
+   return NULL.  */
+static inline tree
+single_ssa_tree_operand (gimple *stmt, int flags)
+{
+  tree var;
+  ssa_op_iter iter;
+
+  var = op_iter_init_tree (&iter, stmt, flags);
+  if (op_iter_done (&iter))
+    return NULL_TREE;
+  op_iter_next_tree (&iter);
+  if (op_iter_done (&iter))
+    return var;
+  return NULL_TREE;
+}
+
+
+/* If there is a single operand in STMT matching FLAGS, return it.  Otherwise
+   return NULL.  */
+static inline use_operand_p
+single_ssa_use_operand (gimple *stmt, int flags)
+{
+  use_operand_p var;
+  ssa_op_iter iter;
+
+  var = op_iter_init_use (&iter, stmt, flags);
+  if (op_iter_done (&iter))
+    return NULL_USE_OPERAND_P;
+  op_iter_next_use (&iter);
+  if (op_iter_done (&iter))
+    return var;
+  return NULL_USE_OPERAND_P;
+}
+
+/* Return the single virtual use operand in STMT if present.  Otherwise
+   return NULL.  */
+static inline use_operand_p
+ssa_vuse_operand (gimple *stmt)
+{
+  if (! gimple_vuse (stmt))
+    return NULL_USE_OPERAND_P;
+  return USE_OP_PTR (gimple_use_ops (stmt));
+}
+
+
+/* If there is a single operand in STMT matching FLAGS, return it.  Otherwise
+   return NULL.  */
+static inline def_operand_p
+single_ssa_def_operand (gimple *stmt, int flags)
+{
+  def_operand_p var;
+  ssa_op_iter iter;
+
+  var = op_iter_init_def (&iter, stmt, flags);
+  if (op_iter_done (&iter))
+    return NULL_DEF_OPERAND_P;
+  op_iter_next_def (&iter);
+  if (op_iter_done (&iter))
+    return var;
+  return NULL_DEF_OPERAND_P;
+}
+
+
+/* Return true if there are zero operands in STMT matching the type
+   given in FLAGS.  */
+static inline bool
+zero_ssa_operands (gimple *stmt, int flags)
+{
+  ssa_op_iter iter;
+
+  op_iter_init_tree (&iter, stmt, flags);
+  return op_iter_done (&iter);
+}
+
+
+/* Return the number of operands matching FLAGS in STMT.  */
+static inline int
+num_ssa_operands (gimple *stmt, int flags)
+{
+  ssa_op_iter iter;
+  tree t;
+  int num = 0;
+
+  gcc_checking_assert (gimple_code (stmt) != GIMPLE_PHI);
+  FOR_EACH_SSA_TREE_OPERAND (t, stmt, iter, flags)
+    num++;
+  return num;
+}
+
+/* If there is a single DEF in the PHI node which matches FLAG, return it.
+   Otherwise return NULL_DEF_OPERAND_P.  */
+static inline tree
+single_phi_def (gphi *stmt, int flags)
+{
+  tree def = PHI_RESULT (stmt);
+  if ((flags & SSA_OP_DEF) && is_gimple_reg (def))
+    return def;
+  if ((flags & SSA_OP_VIRTUAL_DEFS) && !is_gimple_reg (def))
+    return def;
+  return NULL_TREE;
+}
+
+/* Initialize the iterator PTR for uses matching FLAGS in PHI.  FLAGS should
+   be either SSA_OP_USES or SSA_OP_VIRTUAL_USES.  */
+static inline use_operand_p
+op_iter_init_phiuse (ssa_op_iter *ptr, gphi *phi, int flags)
+{
+  tree phi_def = gimple_phi_result (phi);
+  int comp;
+
+  clear_and_done_ssa_iter (ptr);
+  ptr->done = false;
+
+  gcc_checking_assert ((flags & (SSA_OP_USE | SSA_OP_VIRTUAL_USES)) != 0);
+
+  comp = (is_gimple_reg (phi_def) ? SSA_OP_USE : SSA_OP_VIRTUAL_USES);
+
+  /* If the PHI node doesn't the operand type we care about, we're done.  */
+  if ((flags & comp) == 0)
+    {
+      ptr->done = true;
+      return NULL_USE_OPERAND_P;
+    }
+
+  ptr->stmt = phi;
+  ptr->numops = gimple_phi_num_args (phi);
+  ptr->iter_type = ssa_op_iter_use;
+  ptr->flags = flags;
+  return op_iter_next_use (ptr);
+}
+
+
+/* Start an iterator for a PHI definition.  */
+
+static inline def_operand_p
+op_iter_init_phidef (ssa_op_iter *ptr, gphi *phi, int flags)
+{
+  tree phi_def = PHI_RESULT (phi);
+  int comp;
+
+  clear_and_done_ssa_iter (ptr);
+  ptr->done = false;
+
+  gcc_checking_assert ((flags & (SSA_OP_DEF | SSA_OP_VIRTUAL_DEFS)) != 0);
+
+  comp = (is_gimple_reg (phi_def) ? SSA_OP_DEF : SSA_OP_VIRTUAL_DEFS);
+
+  /* If the PHI node doesn't have the operand type we care about,
+     we're done.  */
+  if ((flags & comp) == 0)
+    {
+      ptr->done = true;
+      return NULL_DEF_OPERAND_P;
+    }
+
+  ptr->iter_type = ssa_op_iter_def;
+  /* The first call to op_iter_next_def will terminate the iterator since
+     all the fields are NULL.  Simply return the result here as the first and
+     therefore only result.  */
+  return PHI_RESULT_PTR (phi);
+}
+
+/* Return true is IMM has reached the end of the immediate use stmt list.  */
+
+static inline bool
+end_imm_use_stmt_p (const imm_use_iterator *imm)
+{
+  return (imm->imm_use == imm->end_p);
+}
+
+/* Finished the traverse of an immediate use stmt list IMM by removing the
+   placeholder node from the list.  */
+
+static inline void
+end_imm_use_stmt_traverse (imm_use_iterator *imm)
+{
+  delink_imm_use (&(imm->iter_node));
+}
+
+/* Immediate use traversal of uses within a stmt require that all the
+   uses on a stmt be sequentially listed.  This routine is used to build up
+   this sequential list by adding USE_P to the end of the current list
+   currently delimited by HEAD and LAST_P.  The new LAST_P value is
+   returned.  */
+
+static inline use_operand_p
+move_use_after_head (use_operand_p use_p, use_operand_p head,
+		      use_operand_p last_p)
+{
+  gcc_checking_assert (USE_FROM_PTR (use_p) == USE_FROM_PTR (head));
+  /* Skip head when we find it.  */
+  if (use_p != head)
+    {
+      /* If use_p is already linked in after last_p, continue.  */
+      if (last_p->next == use_p)
+	last_p = use_p;
+      else
+	{
+	  /* Delink from current location, and link in at last_p.  */
+	  delink_imm_use (use_p);
+	  link_imm_use_to_list (use_p, last_p);
+	  last_p = use_p;
+	}
+    }
+  return last_p;
+}
+
+
+/* This routine will relink all uses with the same stmt as HEAD into the list
+   immediately following HEAD for iterator IMM.  */
+
+static inline void
+link_use_stmts_after (use_operand_p head, imm_use_iterator *imm)
+{
+  use_operand_p use_p;
+  use_operand_p last_p = head;
+  gimple *head_stmt = USE_STMT (head);
+  tree use = USE_FROM_PTR (head);
+  ssa_op_iter op_iter;
+  int flag;
+
+  /* Only look at virtual or real uses, depending on the type of HEAD.  */
+  flag = (is_gimple_reg (use) ? SSA_OP_USE : SSA_OP_VIRTUAL_USES);
+
+  if (gphi *phi = dyn_cast <gphi *> (head_stmt))
+    {
+      FOR_EACH_PHI_ARG (use_p, phi, op_iter, flag)
+	if (USE_FROM_PTR (use_p) == use)
+	  last_p = move_use_after_head (use_p, head, last_p);
+    }
+  else
+    {
+      if (flag == SSA_OP_USE)
+	{
+	  FOR_EACH_SSA_USE_OPERAND (use_p, head_stmt, op_iter, flag)
+	    if (USE_FROM_PTR (use_p) == use)
+	      last_p = move_use_after_head (use_p, head, last_p);
+	}
+      else if ((use_p = gimple_vuse_op (head_stmt)) != NULL_USE_OPERAND_P)
+	{
+	  if (USE_FROM_PTR (use_p) == use)
+	    last_p = move_use_after_head (use_p, head, last_p);
+	}
+    }
+  /* Link iter node in after last_p.  */
+  if (imm->iter_node.prev != NULL)
+    delink_imm_use (&imm->iter_node);
+  link_imm_use_to_list (&(imm->iter_node), last_p);
+}
+
+/* Initialize IMM to traverse over uses of VAR.  Return the first statement.  */
+static inline gimple *
+first_imm_use_stmt (imm_use_iterator *imm, tree var)
+{
+  imm->end_p = &(SSA_NAME_IMM_USE_NODE (var));
+  imm->imm_use = imm->end_p->next;
+  imm->next_imm_name = NULL_USE_OPERAND_P;
+
+  /* iter_node is used as a marker within the immediate use list to indicate
+     where the end of the current stmt's uses are.  Initialize it to NULL
+     stmt and use, which indicates a marker node.  */
+  imm->iter_node.prev = NULL_USE_OPERAND_P;
+  imm->iter_node.next = NULL_USE_OPERAND_P;
+  imm->iter_node.loc.stmt = NULL;
+  imm->iter_node.use = NULL;
+
+  if (end_imm_use_stmt_p (imm))
+    return NULL;
+
+  link_use_stmts_after (imm->imm_use, imm);
+
+  return USE_STMT (imm->imm_use);
+}
+
+/* Bump IMM to the next stmt which has a use of var.  */
+
+static inline gimple *
+next_imm_use_stmt (imm_use_iterator *imm)
+{
+  imm->imm_use = imm->iter_node.next;
+  if (end_imm_use_stmt_p (imm))
+    {
+      if (imm->iter_node.prev != NULL)
+	delink_imm_use (&imm->iter_node);
+      return NULL;
+    }
+
+  link_use_stmts_after (imm->imm_use, imm);
+  return USE_STMT (imm->imm_use);
+}
+
+/* This routine will return the first use on the stmt IMM currently refers
+   to.  */
+
+static inline use_operand_p
+first_imm_use_on_stmt (imm_use_iterator *imm)
+{
+  imm->next_imm_name = imm->imm_use->next;
+  return imm->imm_use;
+}
+
+/*  Return TRUE if the last use on the stmt IMM refers to has been visited.  */
+
+static inline bool
+end_imm_use_on_stmt_p (const imm_use_iterator *imm)
+{
+  return (imm->imm_use == &(imm->iter_node));
+}
+
+/* Bump to the next use on the stmt IMM refers to, return NULL if done.  */
+
+static inline use_operand_p
+next_imm_use_on_stmt (imm_use_iterator *imm)
+{
+  imm->imm_use = imm->next_imm_name;
+  if (end_imm_use_on_stmt_p (imm))
+    return NULL_USE_OPERAND_P;
+  else
+    {
+      imm->next_imm_name = imm->imm_use->next;
+      return imm->imm_use;
+    }
+}
+
+/* Delink all immediate_use information for STMT.  */
+static inline void
+delink_stmt_imm_use (gimple *stmt)
+{
+   ssa_op_iter iter;
+   use_operand_p use_p;
+
+   if (ssa_operands_active (cfun))
+     FOR_EACH_PHI_OR_STMT_USE (use_p, stmt, iter, SSA_OP_ALL_USES)
+       delink_imm_use (use_p);
+}
+
+#endif /* GCC_TREE_SSA_ITERATORS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ssa.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ssa.h
new file mode 100644
index 0000000..56a8d10
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ssa.h
@@ -0,0 +1,33 @@
+/* Common SSA files
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SSA_H
+#define GCC_SSA_H
+
+/* This is an aggregation header file. This means it should contain only
+   other include files.  */
+
+#include "stringpool.h"
+#include "gimple-ssa.h"
+#include "tree-vrp.h"
+#include "tree-ssanames.h"
+#include "tree-phinodes.h"
+#include "ssa-iterators.h" 
+
+#endif  /* GCC_SSA_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/stab.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/stab.def
new file mode 100644
index 0000000..5739ed3
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/stab.def
@@ -0,0 +1,239 @@
+/* Table of DBX symbol codes for the GNU system.
+   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 3 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING3.  If
+   not see <http://www.gnu.org/licenses/>.  */
+
+/* This contains contribution from Cygnus Support.  */
+
+/* Global variable.  Only the name is significant.
+   To find the address, look in the corresponding external symbol.  */
+__define_stab (N_GSYM, 0x20, "GSYM")
+
+/* Function name for BSD Fortran.  Only the name is significant.
+   To find the address, look in the corresponding external symbol.  */
+__define_stab (N_FNAME, 0x22, "FNAME")
+
+/* Function name or text-segment variable for C.  Value is its address.
+   Desc is supposedly starting line number, but GCC doesn't set it
+   and DBX seems not to miss it.  */
+__define_stab (N_FUN, 0x24, "FUN")
+
+/* Data-segment variable with internal linkage.  Value is its address.
+   "Static Sym".  */
+__define_stab (N_STSYM, 0x26, "STSYM")
+
+/* BSS-segment variable with internal linkage.  Value is its address.  */
+__define_stab (N_LCSYM, 0x28, "LCSYM")
+
+/* Begin function marker.  */
+__define_stab (N_BNSYM, 0x2e, "BNSYM")
+
+/* End function marker.  */
+__define_stab (N_ENSYM, 0x4e, "ENSYM")
+
+/* Name of main routine.  Only the name is significant.
+   This is not used in C.  */
+__define_stab (N_MAIN, 0x2a, "MAIN")
+
+/* Global symbol in Pascal.
+   Supposedly the value is its line number; I'm skeptical.  */
+__define_stab (N_PC, 0x30, "PC")
+
+/* Number of symbols:  0, files,,funcs,lines according to Ultrix V4.0.  */
+__define_stab (N_NSYMS, 0x32, "NSYMS")
+
+/* "No DST map for sym: name, ,0,type,ignored"  according to Ultrix V4.0.  */
+__define_stab (N_NOMAP, 0x34, "NOMAP")
+
+/* New stab from Solaris.  I don't know what it means, but it
+   don't seem to contain useful information.  */
+__define_stab (N_OBJ, 0x38, "OBJ")
+
+/* New stab from Solaris.  I don't know what it means, but it
+   don't seem to contain useful information.  Possibly related to the
+   optimization flags used in this module.  */
+__define_stab (N_OPT, 0x3c, "OPT")
+
+/* Register variable.  Value is number of register.  */
+__define_stab (N_RSYM, 0x40, "RSYM")
+
+/* Modula-2 compilation unit.  Can someone say what info it contains?  */
+__define_stab (N_M2C, 0x42, "M2C")
+
+/* Line number in text segment.  Desc is the line number;
+   value is corresponding address.  */
+__define_stab (N_SLINE, 0x44, "SLINE")
+
+/* Similar, for data segment.  */
+__define_stab (N_DSLINE, 0x46, "DSLINE")
+
+/* Similar, for bss segment.  */
+__define_stab (N_BSLINE, 0x48, "BSLINE")
+
+/* Sun's source-code browser stabs.  ?? Don't know what the fields are.
+   Supposedly the field is "path to associated .cb file".  THIS VALUE
+   OVERLAPS WITH N_BSLINE!  */
+__define_stab (N_BROWS, 0x48, "BROWS")
+
+/* GNU Modula-2 definition module dependency.  Value is the modification time
+   of the definition file.  Other is nonzero if it is imported with the
+   GNU M2 keyword %INITIALIZE.  Perhaps N_M2C can be used if there
+   are enough empty fields? */
+__define_stab(N_DEFD, 0x4a, "DEFD")
+
+/* THE FOLLOWING TWO STAB VALUES CONFLICT.  Happily, one is for Modula-2
+   and one is for C++.   Still,...  */
+/* GNU C++ exception variable.  Name is variable name.  */
+__define_stab (N_EHDECL, 0x50, "EHDECL")
+/* Modula2 info "for imc":  name,,0,0,0  according to Ultrix V4.0.  */
+__define_stab (N_MOD2, 0x50, "MOD2")
+
+/* GNU C++ `catch' clause.  Value is its address.  Desc is nonzero if
+   this entry is immediately followed by a CAUGHT stab saying what exception
+   was caught.  Multiple CAUGHT stabs means that multiple exceptions
+   can be caught here.  If Desc is 0, it means all exceptions are caught
+   here.  */
+__define_stab (N_CATCH, 0x54, "CATCH")
+
+/* Structure or union element.  Value is offset in the structure.  */
+__define_stab (N_SSYM, 0x60, "SSYM")
+
+/* Name of main source file.
+   Value is starting text address of the compilation.  */
+__define_stab (N_SO, 0x64, "SO")
+
+/* Automatic variable in the stack.  Value is offset from frame pointer.
+   Also used for type descriptions.  */
+__define_stab (N_LSYM, 0x80, "LSYM")
+
+/* Beginning of an include file.  Only Sun uses this.
+   In an object file, only the name is significant.
+   The Sun linker puts data into some of the other fields.  */
+__define_stab (N_BINCL, 0x82, "BINCL")
+
+/* Name of sub-source file (#include file).
+   Value is starting text address of the compilation.  */
+__define_stab (N_SOL, 0x84, "SOL")
+
+/* Parameter variable.  Value is offset from argument pointer.
+   (On most machines the argument pointer is the same as the frame pointer.  */
+__define_stab (N_PSYM, 0xa0, "PSYM")
+
+/* End of an include file.  No name.
+   This and N_BINCL act as brackets around the file's output.
+   In an object file, there is no significant data in this entry.
+   The Sun linker puts data into some of the fields.  */
+__define_stab (N_EINCL, 0xa2, "EINCL")
+
+/* Alternate entry point.  Value is its address.  */
+__define_stab (N_ENTRY, 0xa4, "ENTRY")
+
+/* Beginning of lexical block.
+   The desc is the nesting level in lexical blocks.
+   The value is the address of the start of the text for the block.
+   The variables declared inside the block *precede* the N_LBRAC symbol.  */
+__define_stab (N_LBRAC, 0xc0, "LBRAC")
+
+/* Place holder for deleted include file.  Replaces a N_BINCL and everything
+   up to the corresponding N_EINCL.  The Sun linker generates these when
+   it finds multiple identical copies of the symbols from an include file.
+   This appears only in output from the Sun linker.  */
+__define_stab (N_EXCL, 0xc2, "EXCL")
+
+/* Modula-2 scope information.  Can someone say what info it contains?  */
+__define_stab (N_SCOPE, 0xc4, "SCOPE")
+
+/* End of a lexical block.  Desc matches the N_LBRAC's desc.
+   The value is the address of the end of the text for the block.  */
+__define_stab (N_RBRAC, 0xe0, "RBRAC")
+
+/* Begin named common block.  Only the name is significant.  */
+__define_stab (N_BCOMM, 0xe2, "BCOMM")
+
+/* End named common block.  Only the name is significant
+   (and it should match the N_BCOMM).  */
+__define_stab (N_ECOMM, 0xe4, "ECOMM")
+
+/* End common (local name): value is address.
+   I'm not sure how this is used.  */
+__define_stab (N_ECOML, 0xe8, "ECOML")
+
+/* These STAB's are used on Gould systems for Non-Base register symbols
+   or something like that.  FIXME.  I have assigned the values at random
+   since I don't have a Gould here.  Fixups from Gould folk welcome...  */
+__define_stab (N_NBTEXT, 0xF0, "NBTEXT")
+__define_stab (N_NBDATA, 0xF2, "NBDATA")
+__define_stab (N_NBBSS,  0xF4, "NBBSS")
+__define_stab (N_NBSTS,  0xF6, "NBSTS")
+__define_stab (N_NBLCS,  0xF8, "NBLCS")
+
+/* Second symbol entry containing a length-value for the preceding entry.
+   The value is the length.  */
+__define_stab (N_LENG, 0xfe, "LENG")
+
+/* The above information, in matrix format.
+
+			STAB MATRIX
+	_________________________________________________
+	| 00 - 1F are not dbx stab symbols		|
+	| In most cases, the low bit is the EXTernal bit|
+
+	| 00 UNDEF  | 02 ABS	| 04 TEXT   | 06 DATA	|
+	| 01  |EXT  | 03  |EXT	| 05  |EXT  | 07  |EXT	|
+
+	| 08 BSS    | 0A INDR	| 0C FN_SEQ | 0E   	|
+	| 09  |EXT  | 0B 	| 0D	    | 0F	|
+
+	| 10 	    | 12 COMM	| 14 SETA   | 16 SETT	|
+	| 11	    | 13	| 15 	    | 17	|
+
+	| 18 SETD   | 1A SETB	| 1C SETV   | 1E WARNING|
+	| 19	    | 1B	| 1D 	    | 1F FN	|
+
+	|_______________________________________________|
+	| Debug entries with bit 01 set are unused.	|
+	| 20 GSYM   | 22 FNAME	| 24 FUN    | 26 STSYM	|
+	| 28 LCSYM  | 2A MAIN	| 2C	    | 2E BNSYM	|
+	| 30 PC	    | 32 NSYMS	| 34 NOMAP  | 36	|
+	| 38 OBJ    | 3A	| 3C OPT    | 3E	|
+	| 40 RSYM   | 42 M2C	| 44 SLINE  | 46 DSLINE |
+	| 48 BSLINE*| 4A DEFD	| 4C        | 4E ENSYM	|
+	| 50 EHDECL*| 52	| 54 CATCH  | 56        |
+	| 58        | 5A        | 5C        | 5E	|
+	| 60 SSYM   | 62	| 64 SO	    | 66 	|
+	| 68 	    | 6A	| 6C	    | 6E	|
+	| 70	    | 72	| 74	    | 76	|
+	| 78	    | 7A	| 7C	    | 7E	|
+	| 80 LSYM   | 82 BINCL	| 84 SOL    | 86	|
+	| 88	    | 8A	| 8C	    | 8E	|
+	| 90	    | 92	| 94	    | 96	|
+	| 98	    | 9A	| 9C	    | 9E	|
+	| A0 PSYM   | A2 EINCL	| A4 ENTRY  | A6	|
+	| A8	    | AA	| AC	    | AE	|
+	| B0	    | B2	| B4	    | B6	|
+	| B8	    | BA	| BC	    | BE	|
+	| C0 LBRAC  | C2 EXCL	| C4 SCOPE  | C6	|
+	| C8	    | CA	| CC	    | CE	|
+	| D0	    | D2	| D4	    | D6	|
+	| D8	    | DA	| DC	    | DE	|
+	| E0 RBRAC  | E2 BCOMM	| E4 ECOMM  | E6	|
+	| E8 ECOML  | EA	| EC	    | EE	|
+	| F0	    | F2	| F4	    | F6	|
+	| F8	    | FA	| FC	    | FE LENG	|
+	+-----------------------------------------------+
+ * 50 EHDECL is also MOD2.
+ * 48 BSLINE is also BROWS.
+ */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/statistics.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/statistics.h
new file mode 100644
index 0000000..39422c7
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/statistics.h
@@ -0,0 +1,71 @@
+/* Memory and optimization statistics helpers.
+   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Contributed by Cygnus Solutions.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_STATISTICS
+#define GCC_STATISTICS
+
+#if ! defined GATHER_STATISTICS
+#error GATHER_STATISTICS must be defined
+#endif
+
+#define GCC_MEM_STAT_ARGUMENTS const char * ARG_UNUSED (_loc_name), int ARG_UNUSED (_loc_line), const char * ARG_UNUSED (_loc_function)
+#if GATHER_STATISTICS
+#define ALONE_MEM_STAT_DECL GCC_MEM_STAT_ARGUMENTS
+#define ALONE_FINAL_MEM_STAT_DECL ALONE_MEM_STAT_DECL
+#define ALONE_PASS_MEM_STAT _loc_name, _loc_line,  _loc_function
+#define ALONE_FINAL_PASS_MEM_STAT ALONE_PASS_MEM_STAT
+#define ALONE_MEM_STAT_INFO __FILE__, __LINE__, __FUNCTION__
+#define MEM_STAT_DECL , ALONE_MEM_STAT_DECL
+#define FINAL_MEM_STAT_DECL , ALONE_FINAL_MEM_STAT_DECL
+#define PASS_MEM_STAT , ALONE_PASS_MEM_STAT
+#define FINAL_PASS_MEM_STAT , ALONE_FINAL_PASS_MEM_STAT
+#define MEM_STAT_INFO , ALONE_MEM_STAT_INFO
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
+#define ALONE_CXX_MEM_STAT_INFO const char * _loc_name = __builtin_FILE (), int _loc_line = __builtin_LINE (), const char * _loc_function = __builtin_FUNCTION ()
+#else
+#define ALONE_CXX_MEM_STAT_INFO const char * _loc_name = __FILE__, int _loc_line = __LINE__, const char * _loc_function = NULL
+#endif
+#define CXX_MEM_STAT_INFO , ALONE_CXX_MEM_STAT_INFO
+#else
+#define ALONE_MEM_STAT_DECL void
+#define ALONE_FINAL_MEM_STAT_DECL GCC_MEM_STAT_ARGUMENTS
+#define ALONE_PASS_MEM_STAT
+#define ALONE_FINAL_PASS_MEM_STAT 0,0,0
+#define ALONE_MEM_STAT_INFO
+#define MEM_STAT_DECL
+#define FINAL_MEM_STAT_DECL , ALONE_FINAL_MEM_STAT_DECL
+#define PASS_MEM_STAT
+#define FINAL_PASS_MEM_STAT , ALONE_FINAL_PASS_MEM_STAT
+#define MEM_STAT_INFO ALONE_MEM_STAT_INFO
+#define ALONE_CXX_MEM_STAT_INFO
+#define CXX_MEM_STAT_INFO
+#endif
+
+struct function;
+
+/* In statistics.c */
+extern void statistics_early_init (void);
+extern void statistics_init (void);
+extern void statistics_fini (void);
+extern void statistics_fini_pass (void);
+extern void statistics_counter_event (struct function *, const char *, int);
+extern void statistics_histogram_event (struct function *, const char *, int);
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/stmt.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/stmt.h
new file mode 100644
index 0000000..d0fe98c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/stmt.h
@@ -0,0 +1,53 @@
+/* Declarations and data structures for stmt.c.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_STMT_H
+#define GCC_STMT_H
+
+extern void expand_label (tree);
+extern bool parse_output_constraint (const char **, int, int, int,
+				     bool *, bool *, bool *);
+extern bool parse_input_constraint (const char **, int, int, int, int,
+				    const char * const *, bool *, bool *);
+extern tree resolve_asm_operand_names (tree, tree, tree, tree);
+#ifdef HARD_CONST
+/* Silly ifdef to avoid having all includers depend on hard-reg-set.h.  */
+extern tree tree_overlaps_hard_reg_set (tree, HARD_REG_SET *);
+#endif
+
+/* Return the CODE_LABEL rtx for a LABEL_DECL, creating it if necessary.
+   If label was deleted, the corresponding note
+   (NOTE_INSN_DELETED{_DEBUG,}_LABEL) insn will be returned.  */
+extern rtx_insn *label_rtx (tree);
+
+/* As label_rtx, but additionally the label is placed on the forced label
+   list of its containing function (i.e. it is treated as reachable even
+   if how is not obvious).  */
+extern rtx_insn *force_label_rtx (tree);
+
+/* As label_rtx, but checks that label was not deleted.  */
+extern rtx_code_label *jump_target_rtx (tree);
+
+/* Expand a GIMPLE_SWITCH statement.  */
+extern void expand_case (gswitch *);
+
+/* Like expand_case but special-case for SJLJ exception dispatching.  */
+extern void expand_sjlj_dispatch_table (rtx, vec<tree> );
+
+#endif  // GCC_STMT_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/stor-layout.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/stor-layout.h
new file mode 100644
index 0000000..038bbae
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/stor-layout.h
@@ -0,0 +1,117 @@
+/* Definitions and declarations for stor-layout.c.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_STOR_LAYOUT_H
+#define GCC_STOR_LAYOUT_H
+
+extern void set_min_and_max_values_for_integral_type (tree, int, signop);
+extern void fixup_signed_type (tree);
+extern unsigned int update_alignment_for_field (record_layout_info, tree,
+                                                unsigned int);
+extern record_layout_info start_record_layout (tree);
+extern tree bit_from_pos (tree, tree);
+extern tree byte_from_pos (tree, tree);
+extern void pos_from_bit (tree *, tree *, unsigned int, tree);
+extern void normalize_offset (tree *, tree *, unsigned int);
+extern tree rli_size_unit_so_far (record_layout_info);
+extern tree rli_size_so_far (record_layout_info);
+extern void normalize_rli (record_layout_info);
+extern void place_field (record_layout_info, tree);
+extern void compute_record_mode (tree);
+extern void finish_bitfield_layout (tree);
+extern void finish_record_layout (record_layout_info, int);
+extern unsigned int element_precision (const_tree);
+extern void finalize_size_functions (void);
+extern void fixup_unsigned_type (tree);
+extern void initialize_sizetypes (void);
+
+/* Finish up a builtin RECORD_TYPE. Give it a name and provide its
+   fields. Optionally specify an alignment, and then lay it out.  */
+extern void finish_builtin_struct (tree, const char *, tree, tree);
+
+/* Given a VAR_DECL, PARM_DECL, RESULT_DECL or FIELD_DECL node,
+   calculates the DECL_SIZE, DECL_SIZE_UNIT, DECL_ALIGN and DECL_MODE
+   fields.  Call this only once for any given decl node.
+
+   Second argument is the boundary that this field can be assumed to
+   be starting at (in bits).  Zero means it can be assumed aligned
+   on any boundary that may be needed.  */
+extern void layout_decl (tree, unsigned);
+
+/* Given a ..._TYPE node, calculate the TYPE_SIZE, TYPE_SIZE_UNIT,
+   TYPE_ALIGN and TYPE_MODE fields.  If called more than once on one
+   node, does nothing except for the first time.  */
+extern void layout_type (tree);
+
+/* Return the least alignment in bytes required for type TYPE.  */
+extern unsigned int min_align_of_type (tree);
+
+/* Construct various nodes representing fract or accum data types.  */
+extern tree make_fract_type (int, int, int);
+extern tree make_accum_type (int, int, int);
+
+#define make_signed_fract_type(P) make_fract_type (P, 0, 0)
+#define make_unsigned_fract_type(P) make_fract_type (P, 1, 0)
+#define make_sat_signed_fract_type(P) make_fract_type (P, 0, 1)
+#define make_sat_unsigned_fract_type(P) make_fract_type (P, 1, 1)
+#define make_signed_accum_type(P) make_accum_type (P, 0, 0)
+#define make_unsigned_accum_type(P) make_accum_type (P, 1, 0)
+#define make_sat_signed_accum_type(P) make_accum_type (P, 0, 1)
+#define make_sat_unsigned_accum_type(P) make_accum_type (P, 1, 1)
+
+#define make_or_reuse_signed_fract_type(P) \
+		make_or_reuse_fract_type (P, 0, 0)
+#define make_or_reuse_unsigned_fract_type(P) \
+		make_or_reuse_fract_type (P, 1, 0)
+#define make_or_reuse_sat_signed_fract_type(P) \
+		make_or_reuse_fract_type (P, 0, 1)
+#define make_or_reuse_sat_unsigned_fract_type(P) \
+		make_or_reuse_fract_type (P, 1, 1)
+#define make_or_reuse_signed_accum_type(P) \
+		make_or_reuse_accum_type (P, 0, 0)
+#define make_or_reuse_unsigned_accum_type(P) \
+		make_or_reuse_accum_type (P, 1, 0)
+#define make_or_reuse_sat_signed_accum_type(P) \
+		make_or_reuse_accum_type (P, 0, 1)
+#define make_or_reuse_sat_unsigned_accum_type(P) \
+		make_or_reuse_accum_type (P, 1, 1)
+
+extern tree make_signed_type (int);
+extern tree make_unsigned_type (int);
+
+/* Return the mode for data of a given size SIZE and mode class CLASS.
+   If LIMIT is nonzero, then don't use modes bigger than MAX_FIXED_MODE_SIZE.
+   The value is BLKmode if no other mode is found.  This is like
+   mode_for_size, but is passed a tree.  */
+extern opt_machine_mode mode_for_size_tree (const_tree, enum mode_class, int);
+
+extern tree bitwise_type_for_mode (machine_mode);
+
+/* Given a VAR_DECL, PARM_DECL or RESULT_DECL, clears the results of
+   a previous call to layout_decl and calls it again.  */
+extern void relayout_decl (tree);
+
+/* variable_size (EXP) is like save_expr (EXP) except that it
+   is for the special case of something that is part of a
+   variable size for a data type.  It makes special arrangements
+   to compute the value at the right time when the data type
+   belongs to a function parameter.  */
+extern tree variable_size (tree);
+
+#endif  // GCC_STOR_LAYOUT_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/streamer-hooks.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/streamer-hooks.h
new file mode 100644
index 0000000..2a45513
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/streamer-hooks.h
@@ -0,0 +1,82 @@
+/* Streamer hooks.  Support for adding streamer-specific callbacks to
+   generic streaming routines.
+
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Contributed by Diego Novillo <dnovillo@google.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_STREAMER_HOOKS_H
+#define GCC_STREAMER_HOOKS_H
+
+/* Forward declarations to avoid including unnecessary headers.  */
+struct output_block;
+struct lto_input_block;
+struct data_in;
+
+/* Streamer hooks.  These functions do additional processing as
+   needed by the module.  There are two types of callbacks, those that
+   replace the default behavior and those that supplement it.
+
+   Hooks marked [REQ] are required to be set.  Those marked [OPT] may
+   be NULL, if the streamer does not need to implement them.  */
+struct streamer_hooks {
+  /* [REQ] Called by every tree streaming routine that needs to write
+     a tree node.  The arguments are: output_block where to write the
+     node, the tree node to write and a boolean flag that should be true
+     if the caller wants to write a reference to the tree, instead of the
+     tree itself.  The second boolean parameter specifies this for
+     the tree itself, the first for all siblings that are streamed.
+     The referencing mechanism is up to each streamer to implement.  */
+  void (*write_tree) (struct output_block *, tree, bool, bool);
+
+  /* [REQ] Called by every tree streaming routine that needs to read
+     a tree node.  It takes two arguments: an lto_input_block pointing
+     to the buffer where to read from and a data_in instance with tables
+     and descriptors needed by the unpickling routines.  It returns the
+     tree instantiated from the stream.  */
+  tree (*read_tree) (struct lto_input_block *, struct data_in *);
+
+  /* [REQ] Called by every streaming routine that needs to read a location.  */
+  void (*input_location) (location_t *, struct bitpack_d *, struct data_in *);
+
+  /* [REQ] Called by every streaming routine that needs to write a location.  */
+  void (*output_location) (struct output_block *, struct bitpack_d *, location_t);
+};
+
+#define stream_write_tree(OB, EXPR, REF_P) \
+    streamer_hooks.write_tree (OB, EXPR, REF_P, REF_P)
+
+#define stream_write_tree_shallow_non_ref(OB, EXPR, REF_P) \
+    streamer_hooks.write_tree (OB, EXPR, REF_P, false)
+
+#define stream_read_tree(IB, DATA_IN) \
+    streamer_hooks.read_tree (IB, DATA_IN)
+
+#define stream_input_location(LOCPTR, BP, DATA_IN) \
+    streamer_hooks.input_location (LOCPTR, BP, DATA_IN)
+
+#define stream_output_location(OB, BP, LOC) \
+    streamer_hooks.output_location (OB, BP, LOC)
+
+/* Streamer hooks.  */
+extern struct streamer_hooks streamer_hooks;
+
+/* In streamer-hooks.c.  */
+void streamer_hooks_init (void);
+
+#endif  /* GCC_STREAMER_HOOKS_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/stringpool.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/stringpool.h
new file mode 100644
index 0000000..6f7401e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/stringpool.h
@@ -0,0 +1,43 @@
+/* Declarations and definitons for stringpool.c.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_STRINGPOOL_H
+#define GCC_STRINGPOOL_H
+
+/* Return the (unique) IDENTIFIER_NODE node for a given name.
+   The name is supplied as a char *.  */
+extern tree get_identifier (const char *);
+
+/* If an identifier with the name TEXT (a null-terminated string) has
+   previously been referred to, return that node; otherwise return
+   NULL_TREE.  */
+extern tree maybe_get_identifier (const char *);
+
+/* Identical to get_identifier, except that the length is assumed
+   known.  */
+extern tree get_identifier_with_length (const char *, size_t);
+
+#if GCC_VERSION >= 3000
+#define get_identifier(str) \
+  (__builtin_constant_p (str)				\
+    ? get_identifier_with_length ((str), strlen (str))  \
+    : get_identifier (str))
+#endif
+
+#endif  // GCC_STRINGPOOL_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/substring-locations.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/substring-locations.h
new file mode 100644
index 0000000..98cefd1
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/substring-locations.h
@@ -0,0 +1,126 @@
+/* Source locations within string literals.
+   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SUBSTRING_LOCATIONS_H
+#define GCC_SUBSTRING_LOCATIONS_H
+
+/* The substring_loc class encapsulates information on the source location
+   of a range of characters within a STRING_CST.
+
+   If needed by a diagnostic, the actual location_t of the substring_loc
+   can be calculated by calling its get_location method.  This calls a
+   langhook, since this is inherently frontend-specific.  For the C family
+   of frontends, it calls back into libcpp to reparse the strings.  This
+   gets the location information "on demand", rather than storing the
+   location information in the initial lex for every string.  Thus the
+   substring_loc can also be thought of as a deferred call into libcpp,
+   to allow the non-trivial work of reparsing the string to be delayed
+   until we actually need it (to emit a diagnostic for a particular range
+   of characters).
+
+   substring_loc::get_location returns NULL if it succeeds, or an
+   error message if it fails.  Error messages are intended for GCC
+   developers (to help debugging) rather than for end-users.
+
+   The easiest way to use a substring_loc is via the format_warning_* APIs,
+   which gracefully handle failure of substring_loc::get_location by using
+   the location of the string as a whole if substring-information is
+   unavailable.  */
+
+class substring_loc
+{
+ public:
+  /* Constructor.  FMT_STRING_LOC is the location of the string as
+     a whole.  STRING_TYPE is the type of the string.  It should be an
+     ARRAY_TYPE of INTEGER_TYPE, or a POINTER_TYPE to such an ARRAY_TYPE.
+     CARET_IDX, START_IDX, and END_IDX are offsets from the start
+     of the string data.  */
+  substring_loc (location_t fmt_string_loc, tree string_type,
+		 int caret_idx, int start_idx, int end_idx)
+  : m_fmt_string_loc (fmt_string_loc), m_string_type (string_type),
+    m_caret_idx (caret_idx), m_start_idx (start_idx), m_end_idx (end_idx) {}
+
+  void set_caret_index (int caret_idx) { m_caret_idx = caret_idx; }
+
+  const char *get_location (location_t *out_loc) const;
+
+  location_t get_fmt_string_loc () const { return m_fmt_string_loc; }
+  tree get_string_type () const { return m_string_type; }
+  int get_caret_idx () const { return m_caret_idx; }
+  int get_start_idx () const { return m_start_idx; }
+  int get_end_idx () const { return m_end_idx; }
+
+ private:
+  location_t m_fmt_string_loc;
+  tree m_string_type;
+  int m_caret_idx;
+  int m_start_idx;
+  int m_end_idx;
+};
+
+/* A bundle of state for emitting a diagnostic relating to a format string.  */
+
+class format_string_diagnostic_t
+{
+ public:
+  format_string_diagnostic_t (const substring_loc &fmt_loc,
+			      const range_label *fmt_label,
+			      location_t param_loc,
+			      const range_label *param_label,
+			      const char *corrected_substring);
+
+  /* Functions for emitting a warning about a format string.  */
+
+  bool emit_warning_va (int opt, const char *gmsgid, va_list *ap) const
+    ATTRIBUTE_GCC_DIAG (3, 0);
+
+  bool emit_warning_n_va (int opt, unsigned HOST_WIDE_INT n,
+			  const char *singular_gmsgid,
+			  const char *plural_gmsgid, va_list *ap) const
+  ATTRIBUTE_GCC_DIAG (4, 0) ATTRIBUTE_GCC_DIAG (5, 0);
+
+  bool emit_warning (int opt, const char *gmsgid, ...) const
+    ATTRIBUTE_GCC_DIAG (3, 4);
+
+  bool emit_warning_n (int opt, unsigned HOST_WIDE_INT n,
+		       const char *singular_gmsgid,
+		       const char *plural_gmsgid, ...) const
+  ATTRIBUTE_GCC_DIAG (4, 6) ATTRIBUTE_GCC_DIAG (5, 6);
+
+ private:
+  const substring_loc &m_fmt_loc;
+  const range_label *m_fmt_label;
+  location_t m_param_loc;
+  const range_label *m_param_label;
+  const char *m_corrected_substring;
+};
+
+
+/* Implementation detail, for use when implementing
+   LANG_HOOKS_GET_SUBSTRING_LOCATION.  */
+
+extern const char *get_location_within_string (cpp_reader *pfile,
+					       string_concat_db *concats,
+					       location_t strloc,
+					       enum cpp_ttype type,
+					       int caret_idx,
+					       int start_idx, int end_idx,
+					       location_t *out_loc);
+
+#endif /* ! GCC_SUBSTRING_LOCATIONS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/symbol-summary.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/symbol-summary.h
new file mode 100644
index 0000000..0219f3a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/symbol-summary.h
@@ -0,0 +1,1011 @@
+/* Callgraph summary data structure.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+   Contributed by Martin Liska
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_SYMBOL_SUMMARY_H
+#define GCC_SYMBOL_SUMMARY_H
+
+/* Base class for function_summary and fast_function_summary classes.  */
+
+template <class T>
+class function_summary_base
+{
+public:
+  /* Default construction takes SYMTAB as an argument.  */
+  function_summary_base (symbol_table *symtab): m_symtab (symtab),
+  m_insertion_enabled (true), m_released (false)
+  {}
+
+  /* Basic implementation of insert operation.  */
+  virtual void insert (cgraph_node *, T *) {}
+
+  /* Basic implementation of removal operation.  */
+  virtual void remove (cgraph_node *, T *) {}
+
+  /* Basic implementation of duplication operation.  */
+  virtual void duplicate (cgraph_node *, cgraph_node *, T *, T *) {}
+
+  /* Enable insertion hook invocation.  */
+  void enable_insertion_hook ()
+  {
+    m_insertion_enabled = true;
+  }
+
+  /* Enable insertion hook invocation.  */
+  void disable_insertion_hook ()
+  {
+    m_insertion_enabled = false;
+  }
+
+protected:
+  /* Allocates new data that are stored within map.  */
+  T* allocate_new ()
+  {
+    /* Call gcc_internal_because we do not want to call finalizer for
+       a type T.  We call dtor explicitly.  */
+    return is_ggc () ? new (ggc_internal_alloc (sizeof (T))) T () : new T () ;
+  }
+
+  /* Release an item that is stored within map.  */
+  void release (T *item)
+  {
+    if (is_ggc ())
+      {
+	item->~T ();
+	ggc_free (item);
+      }
+    else
+      delete item;
+  }
+
+  /* Unregister all call-graph hooks.  */
+  void unregister_hooks ();
+
+  /* Internal summary insertion hook pointer.  */
+  cgraph_node_hook_list *m_symtab_insertion_hook;
+  /* Internal summary removal hook pointer.  */
+  cgraph_node_hook_list *m_symtab_removal_hook;
+  /* Internal summary duplication hook pointer.  */
+  cgraph_2node_hook_list *m_symtab_duplication_hook;
+  /* Symbol table the summary is registered to.  */
+  symbol_table *m_symtab;
+
+  /* Indicates if insertion hook is enabled.  */
+  bool m_insertion_enabled;
+  /* Indicates if the summary is released.  */
+  bool m_released;
+
+private:
+  /* Return true when the summary uses GGC memory for allocation.  */
+  virtual bool is_ggc () = 0;
+};
+
+template <typename T>
+void
+function_summary_base<T>::unregister_hooks ()
+{
+  m_symtab->remove_cgraph_insertion_hook (m_symtab_insertion_hook);
+  m_symtab->remove_cgraph_removal_hook (m_symtab_removal_hook);
+  m_symtab->remove_cgraph_duplication_hook (m_symtab_duplication_hook);
+}
+
+/* We want to pass just pointer types as argument for function_summary
+   template class.  */
+
+template <class T>
+class function_summary
+{
+private:
+  function_summary();
+};
+
+/* Function summary is a helper class that is used to associate a data structure
+   related to a callgraph node.  Typical usage can be seen in IPA passes which
+   create a temporary pass-related structures.  The summary class registers
+   hooks that are triggered when a new node is inserted, duplicated and deleted.
+   A user of a summary class can ovewrite virtual methods than are triggered by
+   the summary if such hook is triggered.  Apart from a callgraph node, the user
+   is given a data structure tied to the node.
+
+   The function summary class can work both with a heap-allocated memory and
+   a memory gained by garbage collected memory.  */
+
+template <class T>
+class GTY((user)) function_summary <T *>: public function_summary_base<T>
+{
+public:
+  /* Default construction takes SYMTAB as an argument.  */
+  function_summary (symbol_table *symtab, bool ggc = false);
+
+  /* Destructor.  */
+  virtual ~function_summary ()
+  {
+    release ();
+  }
+
+  /* Destruction method that can be called for GGC purpose.  */
+  using function_summary_base<T>::release;
+  void release ();
+
+  /* Traverses all summarys with a function F called with
+     ARG as argument.  */
+  template<typename Arg, bool (*f)(const T &, Arg)>
+  void traverse (Arg a) const
+  {
+    m_map.traverse <f> (a);
+  }
+
+  /* Getter for summary callgraph node pointer.  If a summary for a node
+     does not exist it will be created.  */
+  T* get_create (cgraph_node *node)
+  {
+    bool existed;
+    T **v = &m_map.get_or_insert (node->get_uid (), &existed);
+    if (!existed)
+      *v = this->allocate_new ();
+
+    return *v;
+  }
+
+  /* Getter for summary callgraph node pointer.  */
+  T* get (cgraph_node *node) ATTRIBUTE_PURE
+  {
+    T **v = m_map.get (node->get_uid ());
+    return v == NULL ? NULL : *v;
+  }
+
+  /* Remove node from summary.  */
+  using function_summary_base<T>::remove;
+  void remove (cgraph_node *node)
+  {
+    int uid = node->get_uid ();
+    T **v = m_map.get (uid);
+    if (v)
+      {
+	m_map.remove (uid);
+	this->release (*v);
+      }
+  }
+
+  /* Return true if a summary for the given NODE already exists.  */
+  bool exists (cgraph_node *node)
+  {
+    return m_map.get (node->get_uid ()) != NULL;
+  }
+
+  /* Symbol insertion hook that is registered to symbol table.  */
+  static void symtab_insertion (cgraph_node *node, void *data);
+
+  /* Symbol removal hook that is registered to symbol table.  */
+  static void symtab_removal (cgraph_node *node, void *data);
+
+  /* Symbol duplication hook that is registered to symbol table.  */
+  static void symtab_duplication (cgraph_node *node, cgraph_node *node2,
+				  void *data);
+
+protected:
+  /* Indication if we use ggc summary.  */
+  bool m_ggc;
+
+private:
+  /* Indication if we use ggc summary.  */
+  virtual bool is_ggc ()
+  {
+    return m_ggc;
+  }
+
+  typedef int_hash <int, 0, -1> map_hash;
+
+  /* Main summary store, where summary ID is used as key.  */
+  hash_map <map_hash, T *> m_map;
+
+  template <typename U> friend void gt_ggc_mx (function_summary <U *> * const &);
+  template <typename U> friend void gt_pch_nx (function_summary <U *> * const &);
+  template <typename U> friend void gt_pch_nx (function_summary <U *> * const &,
+      gt_pointer_operator, void *);
+};
+
+template <typename T>
+function_summary<T *>::function_summary (symbol_table *symtab, bool ggc):
+  function_summary_base<T> (symtab), m_ggc (ggc), m_map (13, ggc)
+{
+  this->m_symtab_insertion_hook
+    = this->m_symtab->add_cgraph_insertion_hook (function_summary::symtab_insertion,
+						 this);
+  this->m_symtab_removal_hook
+    = this->m_symtab->add_cgraph_removal_hook (function_summary::symtab_removal,
+					       this);
+  this->m_symtab_duplication_hook
+    = this->m_symtab->add_cgraph_duplication_hook (function_summary::symtab_duplication,
+						   this);
+}
+
+template <typename T>
+void
+function_summary<T *>::release ()
+{
+  if (this->m_released)
+    return;
+
+  this->unregister_hooks ();
+
+  /* Release all summaries.  */
+  typedef typename hash_map <map_hash, T *>::iterator map_iterator;
+  for (map_iterator it = m_map.begin (); it != m_map.end (); ++it)
+    this->release ((*it).second);
+
+  this->m_released = true;
+}
+
+template <typename T>
+void
+function_summary<T *>::symtab_insertion (cgraph_node *node, void *data)
+{
+  gcc_checking_assert (node->get_uid ());
+  function_summary *summary = (function_summary <T *> *) (data);
+
+  if (summary->m_insertion_enabled)
+    summary->insert (node, summary->get_create (node));
+}
+
+template <typename T>
+void
+function_summary<T *>::symtab_removal (cgraph_node *node, void *data)
+{
+  gcc_checking_assert (node->get_uid ());
+  function_summary *summary = (function_summary <T *> *) (data);
+  summary->remove (node);
+}
+
+template <typename T>
+void
+function_summary<T *>::symtab_duplication (cgraph_node *node,
+					   cgraph_node *node2, void *data)
+{
+  function_summary *summary = (function_summary <T *> *) (data);
+  T *v = summary->get (node);
+
+  if (v)
+    summary->duplicate (node, node2, v, summary->get_create (node2));
+}
+
+template <typename T>
+void
+gt_ggc_mx(function_summary<T *>* const &summary)
+{
+  gcc_checking_assert (summary->m_ggc);
+  gt_ggc_mx (&summary->m_map);
+}
+
+template <typename T>
+void
+gt_pch_nx(function_summary<T *>* const &summary)
+{
+  gcc_checking_assert (summary->m_ggc);
+  gt_pch_nx (&summary->m_map);
+}
+
+template <typename T>
+void
+gt_pch_nx(function_summary<T *>* const& summary, gt_pointer_operator op,
+	  void *cookie)
+{
+  gcc_checking_assert (summary->m_ggc);
+  gt_pch_nx (&summary->m_map, op, cookie);
+}
+
+/* Help template from std c++11.  */
+
+template<typename T, typename U>
+struct is_same
+{
+    static const bool value = false;
+};
+
+template<typename T>
+struct is_same<T,T>  //specialization
+{
+   static const bool value = true;
+};
+
+/* We want to pass just pointer types as argument for fast_function_summary
+   template class.  */
+
+template <class T, class V>
+class fast_function_summary
+{
+private:
+  fast_function_summary ();
+};
+
+/* Function vector summary is a fast implementation of function_summary that
+   utilizes vector as primary storage of summaries.  */
+
+template <class T, class V>
+class GTY((user)) fast_function_summary <T *, V>
+  : public function_summary_base<T>
+{
+public:
+  /* Default construction takes SYMTAB as an argument.  */
+  fast_function_summary (symbol_table *symtab);
+
+  /* Destructor.  */
+  virtual ~fast_function_summary ()
+  {
+    release ();
+  }
+
+  /* Destruction method that can be called for GGC purpose.  */
+  using function_summary_base<T>::release;
+  void release ();
+
+  /* Traverses all summarys with a function F called with
+     ARG as argument.  */
+  template<typename Arg, bool (*f)(const T &, Arg)>
+  void traverse (Arg a) const
+  {
+    for (unsigned i = 0; i < m_vector->length (); i++)
+      if ((*m_vector[i]) != NULL)
+	f ((*m_vector)[i]);
+  }
+
+  /* Getter for summary callgraph node pointer.  If a summary for a node
+     does not exist it will be created.  */
+  T* get_create (cgraph_node *node)
+  {
+    int id = node->get_summary_id ();
+    if (id == -1)
+      id = this->m_symtab->assign_summary_id (node);
+
+    if ((unsigned int)id >= m_vector->length ())
+      vec_safe_grow_cleared (m_vector,
+			     this->m_symtab->cgraph_max_summary_id);
+
+    if ((*m_vector)[id] == NULL)
+      (*m_vector)[id] = this->allocate_new ();
+
+    return (*m_vector)[id];
+  }
+
+  /* Getter for summary callgraph node pointer.  */
+  T* get (cgraph_node *node) ATTRIBUTE_PURE
+  {
+    return exists (node) ? (*m_vector)[node->get_summary_id ()] : NULL;
+  }
+
+  using function_summary_base<T>::remove;
+  void remove (cgraph_node *node)
+  {
+    if (exists (node))
+      {
+	int id = node->get_summary_id ();
+	this->release ((*m_vector)[id]);
+	(*m_vector)[id] = NULL;
+      }
+  }
+
+  /* Return true if a summary for the given NODE already exists.  */
+  bool exists (cgraph_node *node)
+  {
+    int id = node->get_summary_id ();
+    return (id != -1
+	    && (unsigned int)id < m_vector->length ()
+	    && (*m_vector)[id] != NULL);
+  }
+
+  /* Symbol insertion hook that is registered to symbol table.  */
+  static void symtab_insertion (cgraph_node *node, void *data);
+
+  /* Symbol removal hook that is registered to symbol table.  */
+  static void symtab_removal (cgraph_node *node, void *data);
+
+  /* Symbol duplication hook that is registered to symbol table.  */
+  static void symtab_duplication (cgraph_node *node, cgraph_node *node2,
+				  void *data);
+
+private:
+  virtual bool is_ggc ();
+
+  /* Summary is stored in the vector.  */
+  vec <T *, V> *m_vector;
+
+  template <typename U> friend void gt_ggc_mx (fast_function_summary <U *, va_gc> * const &);
+  template <typename U> friend void gt_pch_nx (fast_function_summary <U *, va_gc> * const &);
+  template <typename U> friend void gt_pch_nx (fast_function_summary <U *, va_gc> * const &,
+      gt_pointer_operator, void *);
+};
+
+template <typename T, typename V>
+fast_function_summary<T *, V>::fast_function_summary (symbol_table *symtab):
+  function_summary_base<T> (symtab), m_vector (NULL)
+{
+  vec_alloc (m_vector, 13);
+  this->m_symtab_insertion_hook
+    = this->m_symtab->add_cgraph_insertion_hook (fast_function_summary::symtab_insertion,
+						 this);
+  this->m_symtab_removal_hook
+    = this->m_symtab->add_cgraph_removal_hook (fast_function_summary::symtab_removal,
+					       this);
+  this->m_symtab_duplication_hook
+    = this->m_symtab->add_cgraph_duplication_hook (fast_function_summary::symtab_duplication,
+						   this);
+}
+
+template <typename T, typename V>
+void
+fast_function_summary<T *, V>::release ()
+{
+  if (this->m_released)
+    return;
+
+  this->unregister_hooks ();
+
+  /* Release all summaries.  */
+  for (unsigned i = 0; i < m_vector->length (); i++)
+    if ((*m_vector)[i] != NULL)
+      this->release ((*m_vector)[i]);
+
+  this->m_released = true;
+}
+
+template <typename T, typename V>
+void
+fast_function_summary<T *, V>::symtab_insertion (cgraph_node *node, void *data)
+{
+  gcc_checking_assert (node->get_uid ());
+  fast_function_summary *summary = (fast_function_summary <T *, V> *) (data);
+
+  if (summary->m_insertion_enabled)
+    summary->insert (node, summary->get_create (node));
+}
+
+template <typename T, typename V>
+void
+fast_function_summary<T *, V>::symtab_removal (cgraph_node *node, void *data)
+{
+  gcc_checking_assert (node->get_uid ());
+  fast_function_summary *summary = (fast_function_summary <T *, V> *) (data);
+
+  if (summary->exists (node))
+    summary->remove (node);
+}
+
+template <typename T, typename V>
+void
+fast_function_summary<T *, V>::symtab_duplication (cgraph_node *node,
+						   cgraph_node *node2,
+						   void *data)
+{
+  fast_function_summary *summary = (fast_function_summary <T *, V> *) (data);
+  T *v = summary->get (node);
+
+  if (v)
+    {
+      T *duplicate = summary->get_create (node2);
+      summary->duplicate (node, node2, v, duplicate);
+    }
+}
+
+template <typename T, typename V>
+inline bool
+fast_function_summary<T *, V>::is_ggc ()
+{
+  return is_same<V, va_gc>::value;
+}
+
+template <typename T>
+void
+gt_ggc_mx (fast_function_summary<T *, va_heap>* const &)
+{
+}
+
+template <typename T>
+void
+gt_pch_nx (fast_function_summary<T *, va_heap>* const &)
+{
+}
+
+template <typename T>
+void
+gt_pch_nx (fast_function_summary<T *, va_heap>* const&, gt_pointer_operator,
+	   void *)
+{
+}
+
+template <typename T>
+void
+gt_ggc_mx (fast_function_summary<T *, va_gc>* const &summary)
+{
+  ggc_test_and_set_mark (summary->m_vector);
+  gt_ggc_mx (summary->m_vector);
+}
+
+template <typename T>
+void
+gt_pch_nx (fast_function_summary<T *, va_gc>* const &summary)
+{
+  gt_pch_nx (summary->m_vector);
+}
+
+template <typename T>
+void
+gt_pch_nx (fast_function_summary<T *, va_gc>* const& summary,
+	   gt_pointer_operator op,
+	   void *cookie)
+{
+  gt_pch_nx (summary->m_vector, op, cookie);
+}
+
+/* Base class for call_summary and fast_call_summary classes.  */
+
+template <class T>
+class call_summary_base
+{
+public:
+  /* Default construction takes SYMTAB as an argument.  */
+  call_summary_base (symbol_table *symtab): m_symtab (symtab),
+  m_initialize_when_cloning (true), m_released (false)
+  {}
+
+  /* Basic implementation of removal operation.  */
+  virtual void remove (cgraph_edge *, T *) {}
+
+  /* Basic implementation of duplication operation.  */
+  virtual void duplicate (cgraph_edge *, cgraph_edge *, T *, T *) {}
+
+protected:
+  /* Allocates new data that are stored within map.  */
+  T* allocate_new ()
+  {
+    /* Call gcc_internal_because we do not want to call finalizer for
+       a type T.  We call dtor explicitly.  */
+    return is_ggc () ? new (ggc_internal_alloc (sizeof (T))) T () : new T () ;
+  }
+
+  /* Release an item that is stored within map.  */
+  void release (T *item)
+  {
+    if (is_ggc ())
+      {
+	item->~T ();
+	ggc_free (item);
+      }
+    else
+      delete item;
+  }
+
+  /* Unregister all call-graph hooks.  */
+  void unregister_hooks ();
+
+  /* Symbol table the summary is registered to.  */
+  symbol_table *m_symtab;
+
+  /* Internal summary removal hook pointer.  */
+  cgraph_edge_hook_list *m_symtab_removal_hook;
+  /* Internal summary duplication hook pointer.  */
+  cgraph_2edge_hook_list *m_symtab_duplication_hook;
+  /* Initialize summary for an edge that is cloned.  */
+  bool m_initialize_when_cloning;
+  /* Indicates if the summary is released.  */
+  bool m_released;
+
+private:
+  /* Return true when the summary uses GGC memory for allocation.  */
+  virtual bool is_ggc () = 0;
+};
+
+template <typename T>
+void
+call_summary_base<T>::unregister_hooks ()
+{
+  m_symtab->remove_edge_removal_hook (m_symtab_removal_hook);
+  m_symtab->remove_edge_duplication_hook (m_symtab_duplication_hook);
+}
+
+/* An impossible class templated by non-pointers so, which makes sure that only
+   summaries gathering pointers can be created.  */
+
+template <class T>
+class call_summary
+{
+private:
+  call_summary ();
+};
+
+/* Class to store auxiliary information about call graph edges.  */
+
+template <class T>
+class GTY((user)) call_summary <T *>: public call_summary_base<T>
+{
+public:
+  /* Default construction takes SYMTAB as an argument.  */
+  call_summary (symbol_table *symtab, bool ggc = false)
+  : call_summary_base<T> (symtab), m_ggc (ggc), m_map (13, ggc)
+  {
+    this->m_symtab_removal_hook
+      = this->m_symtab->add_edge_removal_hook (call_summary::symtab_removal,
+					       this);
+    this->m_symtab_duplication_hook
+      = this->m_symtab->add_edge_duplication_hook (call_summary::symtab_duplication,
+						   this);
+  }
+
+  /* Destructor.  */
+  virtual ~call_summary ()
+  {
+    release ();
+  }
+
+  /* Destruction method that can be called for GGC purpose.  */
+  using call_summary_base<T>::release;
+  void release ();
+
+  /* Traverses all summarys with an edge E called with
+     ARG as argument.  */
+  template<typename Arg, bool (*f)(const T &, Arg)>
+  void traverse (Arg a) const
+  {
+    m_map.traverse <f> (a);
+  }
+
+  /* Getter for summary callgraph edge pointer.
+     If a summary for an edge does not exist, it will be created.  */
+  T* get_create (cgraph_edge *edge)
+  {
+    bool existed;
+    T **v = &m_map.get_or_insert (edge->get_uid (), &existed);
+    if (!existed)
+      *v = this->allocate_new ();
+
+    return *v;
+  }
+
+  /* Getter for summary callgraph edge pointer.  */
+  T* get (cgraph_edge *edge) ATTRIBUTE_PURE
+  {
+    T **v = m_map.get (edge->get_uid ());
+    return v == NULL ? NULL : *v;
+  }
+
+  /* Remove edge from summary.  */
+  using call_summary_base<T>::remove;
+  void remove (cgraph_edge *edge)
+  {
+    int uid = edge->get_uid ();
+    T **v = m_map.get (uid);
+    if (v)
+      {
+	m_map.remove (uid);
+	this->release (*v);
+      }
+  }
+
+  /* Return true if a summary for the given EDGE already exists.  */
+  bool exists (cgraph_edge *edge)
+  {
+    return m_map.get (edge->get_uid ()) != NULL;
+  }
+
+  /* Symbol removal hook that is registered to symbol table.  */
+  static void symtab_removal (cgraph_edge *edge, void *data);
+
+  /* Symbol duplication hook that is registered to symbol table.  */
+  static void symtab_duplication (cgraph_edge *edge1, cgraph_edge *edge2,
+				  void *data);
+
+protected:
+  /* Indication if we use ggc summary.  */
+  bool m_ggc;
+
+private:
+  /* Indication if we use ggc summary.  */
+  virtual bool is_ggc ()
+  {
+    return m_ggc;
+  }
+
+  typedef int_hash <int, 0, -1> map_hash;
+
+  /* Main summary store, where summary ID is used as key.  */
+  hash_map <map_hash, T *> m_map;
+
+  template <typename U> friend void gt_ggc_mx (call_summary <U *> * const &);
+  template <typename U> friend void gt_pch_nx (call_summary <U *> * const &);
+  template <typename U> friend void gt_pch_nx (call_summary <U *> * const &,
+      gt_pointer_operator, void *);
+};
+
+template <typename T>
+void
+call_summary<T *>::release ()
+{
+  if (this->m_released)
+    return;
+
+  this->unregister_hooks ();
+
+  /* Release all summaries.  */
+  typedef typename hash_map <map_hash, T *>::iterator map_iterator;
+  for (map_iterator it = m_map.begin (); it != m_map.end (); ++it)
+    this->release ((*it).second);
+
+  this->m_released = true;
+}
+
+template <typename T>
+void
+call_summary<T *>::symtab_removal (cgraph_edge *edge, void *data)
+{
+  call_summary *summary = (call_summary <T *> *) (data);
+  summary->remove (edge);
+}
+
+template <typename T>
+void
+call_summary<T *>::symtab_duplication (cgraph_edge *edge1,
+				       cgraph_edge *edge2, void *data)
+{
+  call_summary *summary = (call_summary <T *> *) (data);
+  T *edge1_summary = NULL;
+
+  if (summary->m_initialize_when_cloning)
+    edge1_summary = summary->get_create (edge1);
+  else
+    edge1_summary = summary->get (edge1);
+
+  if (edge1_summary)
+    summary->duplicate (edge1, edge2, edge1_summary,
+			summary->get_create (edge2));
+}
+
+template <typename T>
+void
+gt_ggc_mx(call_summary<T *>* const &summary)
+{
+  gcc_checking_assert (summary->m_ggc);
+  gt_ggc_mx (&summary->m_map);
+}
+
+template <typename T>
+void
+gt_pch_nx(call_summary<T *>* const &summary)
+{
+  gcc_checking_assert (summary->m_ggc);
+  gt_pch_nx (&summary->m_map);
+}
+
+template <typename T>
+void
+gt_pch_nx(call_summary<T *>* const& summary, gt_pointer_operator op,
+	  void *cookie)
+{
+  gcc_checking_assert (summary->m_ggc);
+  gt_pch_nx (&summary->m_map, op, cookie);
+}
+
+/* We want to pass just pointer types as argument for fast_call_summary
+   template class.  */
+
+template <class T, class V>
+class fast_call_summary
+{
+private:
+  fast_call_summary ();
+};
+
+/* Call vector summary is a fast implementation of call_summary that
+   utilizes vector as primary storage of summaries.  */
+
+template <class T, class V>
+class GTY((user)) fast_call_summary <T *, V>: public call_summary_base<T>
+{
+public:
+  /* Default construction takes SYMTAB as an argument.  */
+  fast_call_summary (symbol_table *symtab)
+  : call_summary_base<T> (symtab), m_vector (NULL)
+  {
+    vec_alloc (m_vector, 13);
+    this->m_symtab_removal_hook
+      = this->m_symtab->add_edge_removal_hook (fast_call_summary::symtab_removal,
+					       this);
+    this->m_symtab_duplication_hook
+      = this->m_symtab->add_edge_duplication_hook (fast_call_summary::symtab_duplication,
+						   this);
+  }
+
+  /* Destructor.  */
+  virtual ~fast_call_summary ()
+  {
+    release ();
+  }
+
+  /* Destruction method that can be called for GGC purpose.  */
+  using call_summary_base<T>::release;
+  void release ();
+
+  /* Traverses all summarys with an edge F called with
+     ARG as argument.  */
+  template<typename Arg, bool (*f)(const T &, Arg)>
+  void traverse (Arg a) const
+  {
+    for (unsigned i = 0; i < m_vector->length (); i++)
+      if ((*m_vector[i]) != NULL)
+	f ((*m_vector)[i]);
+  }
+
+  /* Getter for summary callgraph edge pointer.
+     If a summary for an edge does not exist, it will be created.  */
+  T* get_create (cgraph_edge *edge)
+  {
+    int id = edge->get_summary_id ();
+    if (id == -1)
+      id = this->m_symtab->assign_summary_id (edge);
+
+    if ((unsigned)id >= m_vector->length ())
+      vec_safe_grow_cleared (m_vector, this->m_symtab->edges_max_summary_id);
+
+    if ((*m_vector)[id] == NULL)
+      (*m_vector)[id] = this->allocate_new ();
+
+    return (*m_vector)[id];
+  }
+
+  /* Getter for summary callgraph edge pointer.  */
+  T* get (cgraph_edge *edge) ATTRIBUTE_PURE
+  {
+    return exists (edge) ? (*m_vector)[edge->get_summary_id ()] : NULL;
+  }
+
+  /* Remove edge from summary.  */
+  using call_summary_base<T>::remove;
+  void remove (cgraph_edge *edge)
+  {
+    if (exists (edge))
+      {
+	int id = edge->get_summary_id ();
+	this->release ((*m_vector)[id]);
+	(*m_vector)[id] = NULL;
+      }
+  }
+
+  /* Return true if a summary for the given EDGE already exists.  */
+  bool exists (cgraph_edge *edge)
+  {
+    int id = edge->get_summary_id ();
+    return (id != -1
+	    && (unsigned)id < m_vector->length ()
+	    && (*m_vector)[id] != NULL);
+  }
+
+  /* Symbol removal hook that is registered to symbol table.  */
+  static void symtab_removal (cgraph_edge *edge, void *data);
+
+  /* Symbol duplication hook that is registered to symbol table.  */
+  static void symtab_duplication (cgraph_edge *edge1, cgraph_edge *edge2,
+				  void *data);
+
+private:
+  virtual bool is_ggc ();
+
+  /* Summary is stored in the vector.  */
+  vec <T *, V> *m_vector;
+
+  template <typename U> friend void gt_ggc_mx (fast_call_summary <U *, va_gc> * const &);
+  template <typename U> friend void gt_pch_nx (fast_call_summary <U *, va_gc> * const &);
+  template <typename U> friend void gt_pch_nx (fast_call_summary <U *, va_gc> * const &,
+      gt_pointer_operator, void *);
+};
+
+template <typename T, typename V>
+void
+fast_call_summary<T *, V>::release ()
+{
+  if (this->m_released)
+    return;
+
+  this->unregister_hooks ();
+
+  /* Release all summaries.  */
+  for (unsigned i = 0; i < m_vector->length (); i++)
+    if ((*m_vector)[i] != NULL)
+      this->release ((*m_vector)[i]);
+
+  this->m_released = true;
+}
+
+template <typename T, typename V>
+void
+fast_call_summary<T *, V>::symtab_removal (cgraph_edge *edge, void *data)
+{
+  fast_call_summary *summary = (fast_call_summary <T *, V> *) (data);
+  summary->remove (edge);
+}
+
+template <typename T, typename V>
+void
+fast_call_summary<T *, V>::symtab_duplication (cgraph_edge *edge1,
+						 cgraph_edge *edge2, void *data)
+{
+  fast_call_summary *summary = (fast_call_summary <T *, V> *) (data);
+  T *edge1_summary = NULL;
+
+  if (summary->m_initialize_when_cloning)
+    edge1_summary = summary->get_create (edge1);
+  else
+    edge1_summary = summary->get (edge1);
+
+  if (edge1_summary)
+    {
+      T *duplicate = summary->get_create (edge2);
+      summary->duplicate (edge1, edge2, edge1_summary, duplicate);
+    }
+}
+
+template <typename T, typename V>
+inline bool
+fast_call_summary<T *, V>::is_ggc ()
+{
+  return is_same<V, va_gc>::value;
+}
+
+template <typename T>
+void
+gt_ggc_mx (fast_call_summary<T *, va_heap>* const &summary)
+{
+}
+
+template <typename T>
+void
+gt_pch_nx (fast_call_summary<T *, va_heap>* const &summary)
+{
+}
+
+template <typename T>
+void
+gt_pch_nx (fast_call_summary<T *, va_heap>* const& summary,
+	   gt_pointer_operator op,
+	   void *cookie)
+{
+}
+
+template <typename T>
+void
+gt_ggc_mx (fast_call_summary<T *, va_gc>* const &summary)
+{
+  ggc_test_and_set_mark (summary->m_vector);
+  gt_ggc_mx (&summary->m_vector);
+}
+
+template <typename T>
+void
+gt_pch_nx (fast_call_summary<T *, va_gc>* const &summary)
+{
+  gt_pch_nx (&summary->m_vector);
+}
+
+template <typename T>
+void
+gt_pch_nx (fast_call_summary<T *, va_gc>* const& summary,
+	   gt_pointer_operator op,
+	   void *cookie)
+{
+  gt_pch_nx (&summary->m_vector, op, cookie);
+}
+
+#endif  /* GCC_SYMBOL_SUMMARY_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/symtab.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/symtab.h
new file mode 100644
index 0000000..34d6bdc
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/symtab.h
@@ -0,0 +1,103 @@
+/* Hash tables.
+   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef LIBCPP_SYMTAB_H
+#define LIBCPP_SYMTAB_H
+
+#include "obstack.h"
+
+#ifndef GTY
+#define GTY(x) /* nothing */
+#endif
+
+/* This is what each hash table entry points to.  It may be embedded
+   deeply within another object.  */
+typedef struct ht_identifier ht_identifier;
+typedef struct ht_identifier *ht_identifier_ptr;
+struct GTY(()) ht_identifier {
+  const unsigned char *str;
+  unsigned int len;
+  unsigned int hash_value;
+};
+
+#define HT_LEN(NODE) ((NODE)->len)
+#define HT_STR(NODE) ((NODE)->str)
+
+typedef struct ht cpp_hash_table;
+typedef struct ht_identifier *hashnode;
+
+enum ht_lookup_option {HT_NO_INSERT = 0, HT_ALLOC};
+
+/* An identifier hash table for cpplib and the front ends.  */
+struct ht
+{
+  /* Identifiers are allocated from here.  */
+  struct obstack stack;
+
+  hashnode *entries;
+  /* Call back, allocate a node.  */
+  hashnode (*alloc_node) (cpp_hash_table *);
+  /* Call back, allocate something that hangs off a node like a cpp_macro.  
+     NULL means use the usual allocator.  */
+  void * (*alloc_subobject) (size_t);
+
+  unsigned int nslots;		/* Total slots in the entries array.  */
+  unsigned int nelements;	/* Number of live elements.  */
+
+  /* Link to reader, if any.  For the benefit of cpplib.  */
+  struct cpp_reader *pfile;
+
+  /* Table usage statistics.  */
+  unsigned int searches;
+  unsigned int collisions;
+
+  /* Should 'entries' be freed when it is no longer needed?  */
+  bool entries_owned;
+};
+
+/* Initialize the hashtable with 2 ^ order entries.  */
+extern cpp_hash_table *ht_create (unsigned int order);
+
+/* Frees all memory associated with a hash table.  */
+extern void ht_destroy (cpp_hash_table *);
+
+extern hashnode ht_lookup (cpp_hash_table *, const unsigned char *,
+			   size_t, enum ht_lookup_option);
+extern hashnode ht_lookup_with_hash (cpp_hash_table *, const unsigned char *,
+                                     size_t, unsigned int,
+                                     enum ht_lookup_option);
+#define HT_HASHSTEP(r, c) ((r) * 67 + ((c) - 113));
+#define HT_HASHFINISH(r, len) ((r) + (len))
+
+/* For all nodes in TABLE, make a callback.  The callback takes
+   TABLE->PFILE, the node, and a PTR, and the callback sequence stops
+   if the callback returns zero.  */
+typedef int (*ht_cb) (struct cpp_reader *, hashnode, const void *);
+extern void ht_forall (cpp_hash_table *, ht_cb, const void *);
+
+/* For all nodes in TABLE, call the callback.  If the callback returns
+   a nonzero value, the node is removed from the table.  */
+extern void ht_purge (cpp_hash_table *, ht_cb, const void *);
+
+/* Restore the hash table.  */
+extern void ht_load (cpp_hash_table *ht, hashnode *entries,
+		     unsigned int nslots, unsigned int nelements, bool own);
+
+/* Dump allocation statistics to stderr.  */
+extern void ht_dump_statistics (cpp_hash_table *);
+
+#endif /* LIBCPP_SYMTAB_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/sync-builtins.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sync-builtins.def
new file mode 100644
index 0000000..d9e362a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/sync-builtins.def
@@ -0,0 +1,614 @@
+/* This file contains the definitions and documentation for the
+   synchronization builtins used in the GNU compiler.
+   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Before including this file, you should define a macro:
+
+     DEF_SYNC_BUILTIN (ENUM, NAME, TYPE, ATTRS)
+
+   See builtins.def for details.  */
+
+/* Synchronization Primitives.  The "_N" version is the one that the user
+   is supposed to be using.  It's overloaded, and is resolved to one of the
+   "_1" through "_16" versions, plus some extra casts.  */
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_N, "__sync_fetch_and_add",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_1, "__sync_fetch_and_add_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_2, "__sync_fetch_and_add_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_4, "__sync_fetch_and_add_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_8, "__sync_fetch_and_add_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_16, "__sync_fetch_and_add_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_N, "__sync_fetch_and_sub",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_1, "__sync_fetch_and_sub_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_2, "__sync_fetch_and_sub_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_4, "__sync_fetch_and_sub_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_8, "__sync_fetch_and_sub_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_16, "__sync_fetch_and_sub_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_N, "__sync_fetch_and_or",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_1, "__sync_fetch_and_or_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_2, "__sync_fetch_and_or_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_4, "__sync_fetch_and_or_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_8, "__sync_fetch_and_or_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_16, "__sync_fetch_and_or_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_N, "__sync_fetch_and_and",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_1, "__sync_fetch_and_and_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_2, "__sync_fetch_and_and_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_4, "__sync_fetch_and_and_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_8, "__sync_fetch_and_and_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_16, "__sync_fetch_and_and_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_N, "__sync_fetch_and_xor",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_1, "__sync_fetch_and_xor_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_2, "__sync_fetch_and_xor_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_4, "__sync_fetch_and_xor_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_8, "__sync_fetch_and_xor_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_16, "__sync_fetch_and_xor_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_N, "__sync_fetch_and_nand",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_1, "__sync_fetch_and_nand_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_2, "__sync_fetch_and_nand_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_4, "__sync_fetch_and_nand_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_8, "__sync_fetch_and_nand_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_16, "__sync_fetch_and_nand_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_N, "__sync_add_and_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_1, "__sync_add_and_fetch_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_2, "__sync_add_and_fetch_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_4, "__sync_add_and_fetch_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_8, "__sync_add_and_fetch_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_16, "__sync_add_and_fetch_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_N, "__sync_sub_and_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_1, "__sync_sub_and_fetch_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_2, "__sync_sub_and_fetch_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_4, "__sync_sub_and_fetch_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_8, "__sync_sub_and_fetch_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_16, "__sync_sub_and_fetch_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_N, "__sync_or_and_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_1, "__sync_or_and_fetch_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_2, "__sync_or_and_fetch_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_4, "__sync_or_and_fetch_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_8, "__sync_or_and_fetch_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_16, "__sync_or_and_fetch_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_N, "__sync_and_and_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_1, "__sync_and_and_fetch_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_2, "__sync_and_and_fetch_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_4, "__sync_and_and_fetch_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_8, "__sync_and_and_fetch_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_16, "__sync_and_and_fetch_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_N, "__sync_xor_and_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_1, "__sync_xor_and_fetch_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_2, "__sync_xor_and_fetch_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_4, "__sync_xor_and_fetch_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_8, "__sync_xor_and_fetch_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_16, "__sync_xor_and_fetch_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_N, "__sync_nand_and_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_1, "__sync_nand_and_fetch_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_2, "__sync_nand_and_fetch_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_4, "__sync_nand_and_fetch_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_8, "__sync_nand_and_fetch_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_16, "__sync_nand_and_fetch_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_N,
+		  "__sync_bool_compare_and_swap",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_1,
+		  "__sync_bool_compare_and_swap_1",
+		  BT_FN_BOOL_VPTR_I1_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_2,
+		  "__sync_bool_compare_and_swap_2",
+		  BT_FN_BOOL_VPTR_I2_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_4,
+		  "__sync_bool_compare_and_swap_4",
+		  BT_FN_BOOL_VPTR_I4_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_8,
+		  "__sync_bool_compare_and_swap_8",
+		  BT_FN_BOOL_VPTR_I8_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_16,
+		  "__sync_bool_compare_and_swap_16",
+		  BT_FN_BOOL_VPTR_I16_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_N,
+		  "__sync_val_compare_and_swap",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_1,
+		  "__sync_val_compare_and_swap_1",
+		  BT_FN_I1_VPTR_I1_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_2,
+		  "__sync_val_compare_and_swap_2",
+		  BT_FN_I2_VPTR_I2_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_4,
+		  "__sync_val_compare_and_swap_4",
+		  BT_FN_I4_VPTR_I4_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_8,
+		  "__sync_val_compare_and_swap_8",
+		  BT_FN_I8_VPTR_I8_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_16,
+		  "__sync_val_compare_and_swap_16",
+		  BT_FN_I16_VPTR_I16_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_N,
+		  "__sync_lock_test_and_set",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_1,
+		  "__sync_lock_test_and_set_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_2,
+		  "__sync_lock_test_and_set_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_4,
+		  "__sync_lock_test_and_set_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_8,
+		  "__sync_lock_test_and_set_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_16,
+		  "__sync_lock_test_and_set_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_N, "__sync_lock_release",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_1, "__sync_lock_release_1",
+		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_2, "__sync_lock_release_2",
+		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_4, "__sync_lock_release_4",
+		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_8, "__sync_lock_release_8",
+		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_16, "__sync_lock_release_16",
+		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SYNCHRONIZE, "__sync_synchronize",
+		  BT_FN_VOID, ATTR_NOTHROWCALL_LEAF_LIST)
+
+/* __sync* builtins for the C++ memory model.  */
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_TEST_AND_SET, "__atomic_test_and_set",
+		  BT_FN_BOOL_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_CLEAR, "__atomic_clear", BT_FN_VOID_VPTR_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE,
+		  "__atomic_exchange",
+		  BT_FN_VOID_SIZE_VPTR_PTR_PTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_N,
+		  "__atomic_exchange_n",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_1,
+		  "__atomic_exchange_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_2,
+		  "__atomic_exchange_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_4,
+		  "__atomic_exchange_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_8,
+		  "__atomic_exchange_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_16,
+		  "__atomic_exchange_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD,
+		  "__atomic_load",
+		  BT_FN_VOID_SIZE_CONST_VPTR_PTR_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_N,
+		  "__atomic_load_n",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_1,
+		  "__atomic_load_1",
+		  BT_FN_I1_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_2,
+		  "__atomic_load_2",
+		  BT_FN_I2_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_4,
+		  "__atomic_load_4",
+		  BT_FN_I4_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_8,
+		  "__atomic_load_8",
+		  BT_FN_I8_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_16,
+		  "__atomic_load_16",
+		  BT_FN_I16_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE,
+		  "__atomic_compare_exchange",
+		  BT_FN_BOOL_SIZE_VPTR_PTR_PTR_INT_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_N,
+		  "__atomic_compare_exchange_n",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1,
+		  "__atomic_compare_exchange_1",
+		  BT_FN_BOOL_VPTR_PTR_I1_BOOL_INT_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2,
+		  "__atomic_compare_exchange_2",
+		  BT_FN_BOOL_VPTR_PTR_I2_BOOL_INT_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4,
+		  "__atomic_compare_exchange_4",
+		  BT_FN_BOOL_VPTR_PTR_I4_BOOL_INT_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8,
+		  "__atomic_compare_exchange_8",
+		  BT_FN_BOOL_VPTR_PTR_I8_BOOL_INT_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_16,
+		  "__atomic_compare_exchange_16",
+		  BT_FN_BOOL_VPTR_PTR_I16_BOOL_INT_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE,
+		  "__atomic_store",
+		  BT_FN_VOID_SIZE_VPTR_PTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_N,
+		  "__atomic_store_n",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_1,
+		  "__atomic_store_1",
+		  BT_FN_VOID_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_2,
+		  "__atomic_store_2",
+		  BT_FN_VOID_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_4,
+		  "__atomic_store_4",
+		  BT_FN_VOID_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_8,
+		  "__atomic_store_8",
+		  BT_FN_VOID_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_16,
+		  "__atomic_store_16",
+		  BT_FN_VOID_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_N,
+		  "__atomic_add_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_1,
+		  "__atomic_add_fetch_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_2,
+		  "__atomic_add_fetch_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_4,
+		  "__atomic_add_fetch_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_8,
+		  "__atomic_add_fetch_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_16,
+		  "__atomic_add_fetch_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_N,
+		  "__atomic_sub_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_1,
+		  "__atomic_sub_fetch_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_2,
+		  "__atomic_sub_fetch_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_4,
+		  "__atomic_sub_fetch_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_8,
+		  "__atomic_sub_fetch_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_16,
+		  "__atomic_sub_fetch_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_N,
+		  "__atomic_and_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_1,
+		  "__atomic_and_fetch_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_2,
+		  "__atomic_and_fetch_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_4,
+		  "__atomic_and_fetch_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_8,
+		  "__atomic_and_fetch_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_16,
+		  "__atomic_and_fetch_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_N,
+		  "__atomic_nand_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_1,
+		  "__atomic_nand_fetch_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_2,
+		  "__atomic_nand_fetch_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_4,
+		  "__atomic_nand_fetch_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_8,
+		  "__atomic_nand_fetch_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_16,
+		  "__atomic_nand_fetch_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_N,
+		  "__atomic_xor_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_1,
+		  "__atomic_xor_fetch_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_2,
+		  "__atomic_xor_fetch_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_4,
+		  "__atomic_xor_fetch_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_8,
+		  "__atomic_xor_fetch_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_16,
+		  "__atomic_xor_fetch_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_N,
+		  "__atomic_or_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_1,
+		  "__atomic_or_fetch_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_2,
+		  "__atomic_or_fetch_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_4,
+		  "__atomic_or_fetch_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_8,
+		  "__atomic_or_fetch_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_16,
+		  "__atomic_or_fetch_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_N,
+		  "__atomic_fetch_add",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_1,
+		  "__atomic_fetch_add_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_2,
+		  "__atomic_fetch_add_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_4,
+		  "__atomic_fetch_add_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_8,
+		  "__atomic_fetch_add_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_16,
+		  "__atomic_fetch_add_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_N,
+		  "__atomic_fetch_sub",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_1,
+		  "__atomic_fetch_sub_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_2,
+		  "__atomic_fetch_sub_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_4,
+		  "__atomic_fetch_sub_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_8,
+		  "__atomic_fetch_sub_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_16,
+		  "__atomic_fetch_sub_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_N,
+		  "__atomic_fetch_and",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_1,
+		  "__atomic_fetch_and_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_2,
+		  "__atomic_fetch_and_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_4,
+		  "__atomic_fetch_and_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_8,
+		  "__atomic_fetch_and_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_16,
+		  "__atomic_fetch_and_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_N,
+		  "__atomic_fetch_nand",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_1,
+		  "__atomic_fetch_nand_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_2,
+		  "__atomic_fetch_nand_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_4,
+		  "__atomic_fetch_nand_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_8,
+		  "__atomic_fetch_nand_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_16,
+		  "__atomic_fetch_nand_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_N,
+		  "__atomic_fetch_xor",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_1,
+		  "__atomic_fetch_xor_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_2,
+		  "__atomic_fetch_xor_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_4,
+		  "__atomic_fetch_xor_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_8,
+		  "__atomic_fetch_xor_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_16,
+		  "__atomic_fetch_xor_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_N,
+		  "__atomic_fetch_or",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_1,
+		  "__atomic_fetch_or_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_2,
+		  "__atomic_fetch_or_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_4,
+		  "__atomic_fetch_or_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_8,
+		  "__atomic_fetch_or_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_16,
+		  "__atomic_fetch_or_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ALWAYS_LOCK_FREE,
+		  "__atomic_always_lock_free",
+		  BT_FN_BOOL_SIZE_CONST_VPTR, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_IS_LOCK_FREE,
+		  "__atomic_is_lock_free",
+		  BT_FN_BOOL_SIZE_CONST_VPTR, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_THREAD_FENCE,
+		  "__atomic_thread_fence",
+		  BT_FN_VOID_INT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SIGNAL_FENCE,
+		  "__atomic_signal_fence",
+		  BT_FN_VOID_INT, ATTR_NOTHROW_LEAF_LIST)
+
+/* This one is actually a function in libatomic and not expected to be
+   inlined, declared here for convenience of targets generating calls
+   to it.  */
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FERAISEEXCEPT,
+		  "__atomic_feraiseexcept",
+		  BT_FN_VOID_INT, ATTR_LEAF_LIST)
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/system.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/system.h
new file mode 100644
index 0000000..d04f8fd
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/system.h
@@ -0,0 +1,1240 @@
+/* Get common system includes and various definitions and declarations based
+   on autoconf macros.
+   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+#ifndef GCC_SYSTEM_H
+#define GCC_SYSTEM_H
+
+/* Define this so that inttypes.h defines the PRI?64 macros even
+   when compiling with a C++ compiler.  Define it here so in the
+   event inttypes.h gets pulled in by another header it is already
+   defined.  */
+#define __STDC_FORMAT_MACROS
+
+/* We must include stdarg.h before stdio.h.  */
+#include <stdarg.h>
+
+#ifndef va_copy
+# ifdef __va_copy
+#   define va_copy(d,s)  __va_copy (d, s)
+# else
+#   define va_copy(d,s)  ((d) = (s))
+# endif
+#endif
+
+#ifdef HAVE_STDDEF_H
+# include <stddef.h>
+#endif
+
+#include <stdio.h>
+
+/* Define a generic NULL if one hasn't already been defined.  */
+#ifndef NULL
+#define NULL 0
+#endif
+
+/* Use the unlocked open routines from libiberty.  */
+
+/* Some of these are #define on some systems, e.g. on AIX to redirect
+   the names to 64bit capable functions for LARGE_FILES support. These
+   redefs are pointless here so we can override them.  */
+
+#undef fopen 
+#undef freopen 
+
+#define fopen(PATH, MODE) fopen_unlocked (PATH, MODE)
+#define fdopen(FILDES, MODE) fdopen_unlocked (FILDES, MODE)
+#define freopen(PATH, MODE, STREAM) freopen_unlocked (PATH, MODE, STREAM)
+
+/* The compiler is not a multi-threaded application and therefore we
+   do not have to use the locking functions.  In fact, using the locking
+   functions can cause the compiler to be significantly slower under
+   I/O bound conditions (such as -g -O0 on very large source files).
+
+   HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio
+   code is multi-thread safe by default.  If it is set to 0, then do
+   not worry about using the _unlocked functions.
+
+   fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are
+   extensions and need to be prototyped by hand (since we do not
+   define _GNU_SOURCE).  */
+
+#if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED
+
+# ifdef HAVE_PUTC_UNLOCKED
+#  undef putc
+#  define putc(C, Stream) putc_unlocked (C, Stream)
+# endif
+# ifdef HAVE_PUTCHAR_UNLOCKED
+#  undef putchar
+#  define putchar(C) putchar_unlocked (C)
+# endif
+# ifdef HAVE_GETC_UNLOCKED
+#  undef getc
+#  define getc(Stream) getc_unlocked (Stream)
+# endif
+# ifdef HAVE_GETCHAR_UNLOCKED
+#  undef getchar
+#  define getchar() getchar_unlocked ()
+# endif
+# ifdef HAVE_FPUTC_UNLOCKED
+#  undef fputc
+#  define fputc(C, Stream) fputc_unlocked (C, Stream)
+# endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+# ifdef HAVE_CLEARERR_UNLOCKED
+#  undef clearerr
+#  define clearerr(Stream) clearerr_unlocked (Stream)
+#  if defined (HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED
+extern void clearerr_unlocked (FILE *);
+#  endif
+# endif
+# ifdef HAVE_FEOF_UNLOCKED
+#  undef feof
+#  define feof(Stream) feof_unlocked (Stream)
+#  if defined (HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED
+extern int feof_unlocked (FILE *);
+#  endif
+# endif
+# ifdef HAVE_FILENO_UNLOCKED
+#  undef fileno
+#  define fileno(Stream) fileno_unlocked (Stream)
+#  if defined (HAVE_DECL_FILENO_UNLOCKED) && !HAVE_DECL_FILENO_UNLOCKED
+extern int fileno_unlocked (FILE *);
+#  endif
+# endif
+# ifdef HAVE_FFLUSH_UNLOCKED
+#  undef fflush
+#  define fflush(Stream) fflush_unlocked (Stream)
+#  if defined (HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED
+extern int fflush_unlocked (FILE *);
+#  endif
+# endif
+# ifdef HAVE_FGETC_UNLOCKED
+#  undef fgetc
+#  define fgetc(Stream) fgetc_unlocked (Stream)
+#  if defined (HAVE_DECL_FGETC_UNLOCKED) && !HAVE_DECL_FGETC_UNLOCKED
+extern int fgetc_unlocked (FILE *);
+#  endif
+# endif
+# ifdef HAVE_FGETS_UNLOCKED
+#  undef fgets
+#  define fgets(S, n, Stream) fgets_unlocked (S, n, Stream)
+#  if defined (HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED
+extern char *fgets_unlocked (char *, int, FILE *);
+#  endif
+# endif
+# ifdef HAVE_FPUTS_UNLOCKED
+#  undef fputs
+#  define fputs(String, Stream) fputs_unlocked (String, Stream)
+#  if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED
+extern int fputs_unlocked (const char *, FILE *);
+#  endif
+# endif
+# ifdef HAVE_FERROR_UNLOCKED
+#  undef ferror
+#  define ferror(Stream) ferror_unlocked (Stream)
+#  if defined (HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED
+extern int ferror_unlocked (FILE *);
+#  endif
+# endif
+# ifdef HAVE_FREAD_UNLOCKED
+#  undef fread
+#  define fread(Ptr, Size, N, Stream) fread_unlocked (Ptr, Size, N, Stream)
+#  if defined (HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKED
+extern size_t fread_unlocked (void *, size_t, size_t, FILE *);
+#  endif
+# endif
+# ifdef HAVE_FWRITE_UNLOCKED
+#  undef fwrite
+#  define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream)
+#  if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED
+extern size_t fwrite_unlocked (const void *, size_t, size_t, FILE *);
+#  endif
+# endif
+# ifdef HAVE_FPRINTF_UNLOCKED
+#  undef fprintf
+/* We can't use a function-like macro here because we don't know if
+   we have varargs macros.  */
+#  define fprintf fprintf_unlocked
+#  if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED
+extern int fprintf_unlocked (FILE *, const char *, ...);
+#  endif
+# endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/* ??? Glibc's fwrite/fread_unlocked macros cause
+   "warning: signed and unsigned type in conditional expression".  */
+#undef fread_unlocked
+#undef fwrite_unlocked
+
+/* Include <string> before "safe-ctype.h" to avoid GCC poisoning
+   the ctype macros through safe-ctype.h */
+
+#ifdef __cplusplus
+#ifdef INCLUDE_STRING
+# include <string>
+#endif
+#endif
+
+/* There are an extraordinary number of issues with <ctype.h>.
+   The last straw is that it varies with the locale.  Use libiberty's
+   replacement instead.  */
+#include "safe-ctype.h"
+
+#include <sys/types.h>
+
+#include <errno.h>
+
+#if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO
+extern int errno;
+#endif
+
+#ifdef __cplusplus
+#if defined (INCLUDE_ALGORITHM) || !defined (HAVE_SWAP_IN_UTILITY)
+# include <algorithm>
+#endif
+#ifdef INCLUDE_LIST
+# include <list>
+#endif
+#ifdef INCLUDE_MAP
+# include <map>
+#endif
+#ifdef INCLUDE_SET
+# include <set>
+#endif
+#ifdef INCLUDE_VECTOR
+# include <vector>
+#endif
+# include <cstring>
+# include <new>
+# include <utility>
+#endif
+
+/* Some of glibc's string inlines cause warnings.  Plus we'd rather
+   rely on (and therefore test) GCC's string builtins.  */
+#define __NO_STRING_INLINES
+
+#ifdef STRING_WITH_STRINGS
+# include <string.h>
+# include <strings.h>
+#else
+# ifdef HAVE_STRING_H
+#  include <string.h>
+# else
+#  ifdef HAVE_STRINGS_H
+#   include <strings.h>
+#  endif
+# endif
+#endif
+
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+/* When compiling C++ we need to include <cstdlib> as well as <stdlib.h> so
+   that it is processed before we poison "malloc"; otherwise, if a source
+   file uses a standard library header that includes <cstdlib>, we will get
+   an error about 'using std::malloc'.  */
+#ifdef __cplusplus
+#include <cstdlib>
+#endif
+
+/* Undef vec_free from AIX stdlib.h header which conflicts with vec.h.  */
+#undef vec_free
+
+/* If we don't have an overriding definition, set SUCCESS_EXIT_CODE and
+   FATAL_EXIT_CODE to EXIT_SUCCESS and EXIT_FAILURE respectively,
+   or 0 and 1 if those macros are not defined.  */
+#ifndef SUCCESS_EXIT_CODE
+# ifdef EXIT_SUCCESS
+#  define SUCCESS_EXIT_CODE EXIT_SUCCESS
+# else
+#  define SUCCESS_EXIT_CODE 0
+# endif
+#endif
+
+#ifndef FATAL_EXIT_CODE
+# ifdef EXIT_FAILURE
+#  define FATAL_EXIT_CODE EXIT_FAILURE
+# else
+#  define FATAL_EXIT_CODE 1
+# endif
+#endif
+
+#define ICE_EXIT_CODE 4
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+/* We use these identifiers later and they appear in some vendor param.h's.  */
+# undef PREFETCH
+# undef m_slot
+#endif
+
+#if HAVE_LIMITS_H
+# include <limits.h>
+#endif
+
+/* A macro to determine whether a VALUE lies inclusively within a
+   certain range without evaluating the VALUE more than once.  This
+   macro won't warn if the VALUE is unsigned and the LOWER bound is
+   zero, as it would e.g. with "VALUE >= 0 && ...".  Note the LOWER
+   bound *is* evaluated twice, and LOWER must not be greater than
+   UPPER.  However the bounds themselves can be either positive or
+   negative.  */
+#define IN_RANGE(VALUE, LOWER, UPPER) \
+  ((unsigned HOST_WIDE_INT) (VALUE) - (unsigned HOST_WIDE_INT) (LOWER) \
+   <= (unsigned HOST_WIDE_INT) (UPPER) - (unsigned HOST_WIDE_INT) (LOWER))
+
+/* Infrastructure for defining missing _MAX and _MIN macros.  Note that
+   macros defined with these cannot be used in #if.  */
+
+/* The extra casts work around common compiler bugs.  */
+#define INTTYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+/* The outer cast is needed to work around a bug in Cray C 5.0.3.0.
+   It is necessary at least when t == time_t.  */
+#define INTTYPE_MINIMUM(t) ((t) (INTTYPE_SIGNED (t) \
+			    ? (t) 1 << (sizeof (t) * CHAR_BIT - 1) : (t) 0))
+#define INTTYPE_MAXIMUM(t) ((t) (~ (t) 0 - INTTYPE_MINIMUM (t)))
+
+/* Use that infrastructure to provide a few constants.  */
+#ifndef UCHAR_MAX
+# define UCHAR_MAX INTTYPE_MAXIMUM (unsigned char)
+#endif
+
+#ifdef TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  ifdef HAVE_TIME_H
+#   include <time.h>
+#  endif
+# endif
+#endif
+
+#ifdef HAVE_FCNTL_H
+# include <fcntl.h>
+#else
+# ifdef HAVE_SYS_FILE_H
+#  include <sys/file.h>
+# endif
+#endif
+
+#ifndef SEEK_SET
+# define SEEK_SET 0
+# define SEEK_CUR 1
+# define SEEK_END 2
+#endif
+#ifndef F_OK
+# define F_OK 0
+# define X_OK 1
+# define W_OK 2
+# define R_OK 4
+#endif
+#ifndef O_RDONLY
+# define O_RDONLY 0
+#endif
+#ifndef O_WRONLY
+# define O_WRONLY 1
+#endif
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+/* Some systems define these in, e.g., param.h.  We undefine these names
+   here to avoid the warnings.  We prefer to use our definitions since we
+   know they are correct.  */
+
+#undef MIN
+#undef MAX
+#define MIN(X,Y) ((X) < (Y) ? (X) : (Y))
+#define MAX(X,Y) ((X) > (Y) ? (X) : (Y))
+
+/* Returns the least number N such that N * Y >= X.  */
+#define CEIL(x,y) (((x) + (y) - 1) / (y))
+
+/* This macro rounds x up to the y boundary.  */
+#define ROUND_UP(x,y) (((x) + (y) - 1) & ~((y) - 1))
+
+/* This macro rounds x down to the y boundary.  */
+#define ROUND_DOWN(x,y) ((x) & ~((y) - 1))
+ 	
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+
+#ifndef WIFSIGNALED
+#define WIFSIGNALED(S) (((S) & 0xff) != 0 && ((S) & 0xff) != 0x7f)
+#endif
+#ifndef WTERMSIG
+#define WTERMSIG(S) ((S) & 0x7f)
+#endif
+#ifndef WIFEXITED
+#define WIFEXITED(S) (((S) & 0xff) == 0)
+#endif
+#ifndef WEXITSTATUS
+#define WEXITSTATUS(S) (((S) & 0xff00) >> 8)
+#endif
+#ifndef WSTOPSIG
+#define WSTOPSIG WEXITSTATUS
+#endif
+#ifndef WCOREDUMP
+#define WCOREDUMP(S) ((S) & WCOREFLG)
+#endif
+#ifndef WCOREFLG
+#define WCOREFLG 0200
+#endif
+
+#include <signal.h>
+#if !defined (SIGCHLD) && defined (SIGCLD)
+# define SIGCHLD SIGCLD
+#endif
+
+#ifdef HAVE_SYS_MMAN_H
+# include <sys/mman.h>
+#endif
+
+#ifndef MAP_FAILED
+# define MAP_FAILED ((void *)-1)
+#endif
+
+#if !defined (MAP_ANONYMOUS) && defined (MAP_ANON)
+# define MAP_ANONYMOUS MAP_ANON
+#endif
+
+#ifdef HAVE_SYS_RESOURCE_H
+# include <sys/resource.h>
+#endif
+
+#ifdef HAVE_SYS_TIMES_H
+# include <sys/times.h>
+#endif
+
+/* The HAVE_DECL_* macros are three-state, undefined, 0 or 1.  If they
+   are defined to 0 then we must provide the relevant declaration
+   here.  These checks will be in the undefined state while configure
+   is running so be careful to test "defined (HAVE_DECL_*)".  */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined (HAVE_DECL_ATOF) && !HAVE_DECL_ATOF
+extern double atof (const char *);
+#endif
+
+#if defined (HAVE_DECL_ATOL) && !HAVE_DECL_ATOL
+extern long atol (const char *);
+#endif
+
+#if defined (HAVE_DECL_FREE) && !HAVE_DECL_FREE
+extern void free (void *);
+#endif
+
+#if defined (HAVE_DECL_GETCWD) && !HAVE_DECL_GETCWD
+extern char *getcwd (char *, size_t);
+#endif
+
+#if defined (HAVE_DECL_GETENV) && !HAVE_DECL_GETENV
+extern char *getenv (const char *);
+#endif
+
+#if defined (HAVE_DECL_GETOPT) && !HAVE_DECL_GETOPT
+extern int getopt (int, char * const *, const char *);
+#endif
+
+#if defined (HAVE_DECL_GETPAGESIZE) && !HAVE_DECL_GETPAGESIZE
+extern int getpagesize (void);
+#endif
+
+#if defined (HAVE_DECL_GETWD) && !HAVE_DECL_GETWD
+extern char *getwd (char *);
+#endif
+
+#if defined (HAVE_DECL_SBRK) && !HAVE_DECL_SBRK
+extern void *sbrk (int);
+#endif
+
+#if defined (HAVE_DECL_SETENV) && !HAVE_DECL_SETENV
+int setenv(const char *, const char *, int);
+#endif
+
+#if defined (HAVE_DECL_STRSTR) && !HAVE_DECL_STRSTR
+extern char *strstr (const char *, const char *);
+#endif
+
+#if defined (HAVE_DECL_STPCPY) && !HAVE_DECL_STPCPY
+extern char *stpcpy (char *, const char *);
+#endif
+
+#if defined (HAVE_DECL_UNSETENV) && !HAVE_DECL_UNSETENV
+int unsetenv(const char *);
+#endif
+
+#if defined (HAVE_DECL_MALLOC) && !HAVE_DECL_MALLOC
+extern void *malloc (size_t);
+#endif
+
+#if defined (HAVE_DECL_CALLOC) && !HAVE_DECL_CALLOC
+extern void *calloc (size_t, size_t);
+#endif
+
+#if defined (HAVE_DECL_REALLOC) && !HAVE_DECL_REALLOC
+extern void *realloc (void *, size_t);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* If the system doesn't provide strsignal, we get it defined in
+   libiberty but no declaration is supplied.  */
+#if !defined (HAVE_STRSIGNAL) \
+    || (defined (HAVE_DECL_STRSIGNAL) && !HAVE_DECL_STRSIGNAL)
+# ifndef strsignal
+extern const char *strsignal (int);
+# endif
+#endif
+
+#ifdef HAVE_GETRLIMIT
+# if defined (HAVE_DECL_GETRLIMIT) && !HAVE_DECL_GETRLIMIT
+#  ifndef getrlimit
+struct rlimit;
+extern int getrlimit (int, struct rlimit *);
+#  endif
+# endif
+#endif
+
+#ifdef HAVE_SETRLIMIT
+# if defined (HAVE_DECL_SETRLIMIT) && !HAVE_DECL_SETRLIMIT
+#  ifndef setrlimit
+struct rlimit;
+extern int setrlimit (int, const struct rlimit *);
+#  endif
+# endif
+#endif
+
+#if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORT
+extern void abort (void);
+#endif
+
+#if defined (HAVE_DECL_SNPRINTF) && !HAVE_DECL_SNPRINTF
+extern int snprintf (char *, size_t, const char *, ...);
+#endif
+
+#if defined (HAVE_DECL_VSNPRINTF) && !HAVE_DECL_VSNPRINTF
+extern int vsnprintf (char *, size_t, const char *, va_list);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+/* 1 if we have C99 designated initializers.  */
+#if !defined(HAVE_DESIGNATED_INITIALIZERS)
+#ifdef __cplusplus
+#define HAVE_DESIGNATED_INITIALIZERS 0
+#else
+#define HAVE_DESIGNATED_INITIALIZERS \
+  ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L))
+#endif
+#endif
+
+#if !defined(HAVE_DESIGNATED_UNION_INITIALIZERS)
+#ifdef __cplusplus
+#define HAVE_DESIGNATED_UNION_INITIALIZERS (GCC_VERSION >= 4007)
+#else
+#define HAVE_DESIGNATED_UNION_INITIALIZERS \
+  ((GCC_VERSION >= 2007) || (__STDC_VERSION__ >= 199901L))
+#endif
+#endif
+
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+
+/* Test if something is a normal file.  */
+#ifndef S_ISREG
+#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+#endif
+
+/* Test if something is a directory.  */
+#ifndef S_ISDIR
+#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#endif
+
+/* Test if something is a character special file.  */
+#ifndef S_ISCHR
+#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
+#endif
+
+/* Test if something is a block special file.  */
+#ifndef S_ISBLK
+#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
+#endif
+
+/* Test if something is a socket.  */
+#ifndef S_ISSOCK
+# ifdef S_IFSOCK
+#   define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
+# else
+#   define S_ISSOCK(m) 0
+# endif
+#endif
+
+/* Test if something is a FIFO.  */
+#ifndef S_ISFIFO
+# ifdef S_IFIFO
+#  define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
+# else
+#  define S_ISFIFO(m) 0
+# endif
+#endif
+
+/* Define well known filenos if the system does not define them.  */
+#ifndef STDIN_FILENO
+# define STDIN_FILENO   0
+#endif
+#ifndef STDOUT_FILENO
+# define STDOUT_FILENO  1
+#endif
+#ifndef STDERR_FILENO
+# define STDERR_FILENO  2
+#endif
+
+/* Some systems have mkdir that takes a single argument.  */
+#ifdef MKDIR_TAKES_ONE_ARG
+# define mkdir(a,b) mkdir (a)
+#endif
+
+#ifndef HAVE_KILL
+# define kill(p,s) raise (s)
+#endif
+
+/* Provide a way to print an address via printf.  */
+#ifndef HOST_PTR_PRINTF
+#define HOST_PTR_PRINTF "%p"
+#endif /* ! HOST_PTR_PRINTF */
+
+/* By default, colon separates directories in a path.  */
+#ifndef PATH_SEPARATOR
+#define PATH_SEPARATOR ':'
+#endif
+
+/* Filename handling macros.  */
+#include "filenames.h"
+
+/* These should be phased out in favor of IS_DIR_SEPARATOR, where possible.  */
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# ifdef HAVE_DOS_BASED_FILE_SYSTEM
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+#endif
+
+#if defined (ENABLE_PLUGIN) && defined (HAVE_DLFCN_H)
+/* If plugin support is enabled, we could use libdl.  */
+#include <dlfcn.h>
+#endif
+
+/* Do not introduce a gmp.h dependency on the build system.  */
+#ifndef GENERATOR_FILE
+#include <gmp.h>
+#endif
+
+/* Get libiberty declarations.  */
+#include "libiberty.h"
+
+#undef FFS  /* Some systems predefine this symbol; don't let it interfere.  */
+#undef FLOAT /* Likewise.  */
+#undef ABS /* Likewise.  */
+#undef PC /* Likewise.  */
+
+/* Provide a default for the HOST_BIT_BUCKET.
+   This suffices for POSIX-like hosts.  */
+
+#ifndef HOST_BIT_BUCKET
+#define HOST_BIT_BUCKET "/dev/null"
+#endif
+
+#ifndef offsetof
+#define offsetof(TYPE, MEMBER)	((size_t) &((TYPE *) 0)->MEMBER)
+#endif
+
+/* Various error reporting routines want to use __FUNCTION__.  */
+#if (GCC_VERSION < 2007)
+#ifndef __FUNCTION__
+#define __FUNCTION__ "?"
+#endif /* ! __FUNCTION__ */
+#endif
+
+/* __builtin_expect(A, B) evaluates to A, but notifies the compiler that
+   the most likely value of A is B.  This feature was added at some point
+   between 2.95 and 3.0.  Let's use 3.0 as the lower bound for now.  */
+#if (GCC_VERSION < 3000)
+#define __builtin_expect(a, b) (a)
+#endif
+
+/* Some of the headers included by <memory> can use "abort" within a
+   namespace, e.g. "_VSTD::abort();", which fails after we use the
+   preprocessor to redefine "abort" as "fancy_abort" below.
+   Given that unique-ptr.h can use "free", we need to do this after "free"
+   is declared but before "abort" is overridden.  */
+
+#ifdef INCLUDE_UNIQUE_PTR
+# include "unique-ptr.h"
+#endif
+
+/* Redefine abort to report an internal error w/o coredump, and
+   reporting the location of the error in the source file.  */
+extern void fancy_abort (const char *, int, const char *)
+					 ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+#define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__)
+
+/* Use gcc_assert(EXPR) to test invariants.  */
+#if ENABLE_ASSERT_CHECKING
+#define gcc_assert(EXPR) 						\
+   ((void)(!(EXPR) ? fancy_abort (__FILE__, __LINE__, __FUNCTION__), 0 : 0))
+#elif (GCC_VERSION >= 4005)
+#define gcc_assert(EXPR) 						\
+  ((void)(__builtin_expect (!(EXPR), 0) ? __builtin_unreachable (), 0 : 0))
+#else
+/* Include EXPR, so that unused variable warnings do not occur.  */
+#define gcc_assert(EXPR) ((void)(0 && (EXPR)))
+#endif
+
+#if CHECKING_P
+#define gcc_checking_assert(EXPR) gcc_assert (EXPR)
+#else
+/* N.B.: in release build EXPR is not evaluated.  */
+#define gcc_checking_assert(EXPR) ((void)(0 && (EXPR)))
+#endif
+
+#if GCC_VERSION >= 4000
+#define ALWAYS_INLINE inline __attribute__ ((always_inline))
+#else
+#define ALWAYS_INLINE inline
+#endif
+
+/* Use gcc_unreachable() to mark unreachable locations (like an
+   unreachable default case of a switch.  Do not use gcc_assert(0).  */
+#if (GCC_VERSION >= 4005) && !ENABLE_ASSERT_CHECKING
+#define gcc_unreachable() __builtin_unreachable ()
+#else
+#define gcc_unreachable() (fancy_abort (__FILE__, __LINE__, __FUNCTION__))
+#endif
+
+#if GCC_VERSION >= 7000 && defined(__has_attribute)
+# if __has_attribute(fallthrough)
+#  define gcc_fallthrough() __attribute__((fallthrough))
+# else
+#  define gcc_fallthrough()
+# endif
+#else
+# define gcc_fallthrough()
+#endif
+
+#if GCC_VERSION >= 3001
+#define STATIC_CONSTANT_P(X) (__builtin_constant_p (X) && (X))
+#else
+#define STATIC_CONSTANT_P(X) (false && (X))
+#endif
+
+/* static_assert (COND, MESSAGE) is available in C++11 onwards.  */
+#if __cplusplus >= 201103L
+#define STATIC_ASSERT(X) \
+  static_assert ((X), #X)
+#else
+#define STATIC_ASSERT(X) \
+  typedef int assertion1[(X) ? 1 : -1] ATTRIBUTE_UNUSED
+#endif
+
+/* Provide a fake boolean type.  We make no attempt to use the
+   C99 _Bool, as it may not be available in the bootstrap compiler,
+   and even if it is, it is liable to be buggy.
+   This must be after all inclusion of system headers, as some of
+   them will mess us up.  */
+
+#undef TRUE
+#undef FALSE
+
+#ifdef __cplusplus
+  /* Obsolete.  */
+# define TRUE true
+# define FALSE false
+#else /* !__cplusplus */
+# undef bool
+# undef true
+# undef false
+
+# define bool unsigned char
+# define true 1
+# define false 0
+
+  /* Obsolete.  */
+# define TRUE true
+# define FALSE false
+#endif /* !__cplusplus */
+
+/* Some compilers do not allow the use of unsigned char in bitfields.  */
+#define BOOL_BITFIELD unsigned int
+
+/* GCC older than 4.4 have broken C++ value initialization handling, see
+   PR11309, PR30111, PR33916, PR82939 and PR84405 for more details.  */
+#if GCC_VERSION > 0 && GCC_VERSION < 4004 && !defined(__clang__)
+# define BROKEN_VALUE_INITIALIZATION
+#endif
+
+/* As the last action in this file, we poison the identifiers that
+   shouldn't be used.  Note, luckily gcc-3.0's token-based integrated
+   preprocessor won't trip on poisoned identifiers that arrive from
+   the expansion of macros.  E.g. #define strrchr rindex, won't error
+   if rindex is poisoned after this directive is issued and later on
+   strrchr is called.
+
+   Note: We define bypass macros for the few cases where we really
+   want to use the libc memory allocation routines.  Otherwise we
+   insist you use the "x" versions from libiberty.  */
+
+#define really_call_malloc malloc
+#define really_call_calloc calloc
+#define really_call_realloc realloc
+
+#if defined(FLEX_SCANNER) || defined(YYBISON) || defined(YYBYACC)
+/* Flex and bison use malloc and realloc.  Yuk.  Note that this means
+   really_call_* cannot be used in a .l or .y file.  */
+#define malloc xmalloc
+#define realloc xrealloc
+#endif
+
+#if (GCC_VERSION >= 3000)
+
+/* Note autoconf checks for prototype declarations and includes
+   system.h while doing so.  Only poison these tokens if actually
+   compiling gcc, so that the autoconf declaration tests for malloc
+   etc don't spuriously fail.  */
+#ifdef IN_GCC
+
+#ifndef USES_ISL
+#undef calloc
+#undef strdup
+#undef strndup
+ #pragma GCC poison calloc strdup strndup
+#endif
+
+#if !defined(FLEX_SCANNER) && !defined(YYBISON)
+#undef malloc
+#undef realloc
+ #pragma GCC poison malloc realloc
+#endif
+
+/* The %m format should be used when GCC's main diagnostic functions
+   supporting %m are available, and xstrerror from libiberty
+   otherwise.  */
+#undef strerror
+ #pragma GCC poison strerror
+
+/* loc_t is defined on some systems and too inviting for some
+   programmers to avoid.  */
+#undef loc_t
+ #pragma GCC poison loc_t
+
+/* Old target macros that have moved to the target hooks structure.  */
+ #pragma GCC poison ASM_OPEN_PAREN ASM_CLOSE_PAREN			\
+	FUNCTION_PROLOGUE FUNCTION_EPILOGUE				\
+	FUNCTION_END_PROLOGUE FUNCTION_BEGIN_EPILOGUE			\
+	DECL_MACHINE_ATTRIBUTES COMP_TYPE_ATTRIBUTES INSERT_ATTRIBUTES	\
+	VALID_MACHINE_DECL_ATTRIBUTE VALID_MACHINE_TYPE_ATTRIBUTE	\
+	SET_DEFAULT_TYPE_ATTRIBUTES SET_DEFAULT_DECL_ATTRIBUTES		\
+	MERGE_MACHINE_TYPE_ATTRIBUTES MERGE_MACHINE_DECL_ATTRIBUTES	\
+	MD_INIT_BUILTINS MD_EXPAND_BUILTIN ASM_OUTPUT_CONSTRUCTOR	\
+	ASM_OUTPUT_DESTRUCTOR SIGNED_CHAR_SPEC MAX_CHAR_TYPE_SIZE	\
+	WCHAR_UNSIGNED UNIQUE_SECTION SELECT_SECTION SELECT_RTX_SECTION	\
+	ENCODE_SECTION_INFO STRIP_NAME_ENCODING ASM_GLOBALIZE_LABEL	\
+	ASM_OUTPUT_MI_THUNK CONST_COSTS RTX_COSTS DEFAULT_RTX_COSTS	\
+	ADDRESS_COST MACHINE_DEPENDENT_REORG ASM_FILE_START ASM_FILE_END \
+	ASM_SIMPLIFY_DWARF_ADDR INIT_TARGET_OPTABS INIT_SUBTARGET_OPTABS \
+	INIT_GOFAST_OPTABS MULSI3_LIBCALL MULDI3_LIBCALL DIVSI3_LIBCALL \
+	DIVDI3_LIBCALL UDIVSI3_LIBCALL UDIVDI3_LIBCALL MODSI3_LIBCALL	\
+	MODDI3_LIBCALL UMODSI3_LIBCALL UMODDI3_LIBCALL BUILD_VA_LIST_TYPE \
+	PRETEND_OUTGOING_VARARGS_NAMED STRUCT_VALUE_INCOMING_REGNUM	\
+	ASM_OUTPUT_SECTION_NAME PROMOTE_FUNCTION_ARGS PROMOTE_FUNCTION_MODE \
+	STRUCT_VALUE_INCOMING STRICT_ARGUMENT_NAMING			\
+	PROMOTE_FUNCTION_RETURN PROMOTE_PROTOTYPES STRUCT_VALUE_REGNUM	\
+	SETUP_INCOMING_VARARGS EXPAND_BUILTIN_SAVEREGS			\
+	DEFAULT_SHORT_ENUMS SPLIT_COMPLEX_ARGS MD_ASM_CLOBBERS		\
+	HANDLE_PRAGMA_REDEFINE_EXTNAME HANDLE_PRAGMA_EXTERN_PREFIX	\
+	MUST_PASS_IN_STACK FUNCTION_ARG_PASS_BY_REFERENCE               \
+        VECTOR_MODE_SUPPORTED_P TARGET_SUPPORTS_HIDDEN 			\
+	FUNCTION_ARG_PARTIAL_NREGS ASM_OUTPUT_DWARF_DTPREL		\
+	ALLOCATE_INITIAL_VALUE LEGITIMIZE_ADDRESS FRAME_POINTER_REQUIRED \
+	CAN_ELIMINATE TRAMPOLINE_TEMPLATE INITIALIZE_TRAMPOLINE		\
+	TRAMPOLINE_ADJUST_ADDRESS STATIC_CHAIN STATIC_CHAIN_INCOMING	\
+	RETURN_POPS_ARGS UNITS_PER_SIMD_WORD OVERRIDE_OPTIONS		\
+	OPTIMIZATION_OPTIONS CLASS_LIKELY_SPILLED_P			\
+	USING_SJLJ_EXCEPTIONS TARGET_UNWIND_INFO			\
+	CAN_DEBUG_WITHOUT_FP UNLIKELY_EXECUTED_TEXT_SECTION_NAME	\
+	HOT_TEXT_SECTION_NAME LEGITIMATE_CONSTANT_P ALWAYS_STRIP_DOTDOT	\
+	OUTPUT_ADDR_CONST_EXTRA SMALL_REGISTER_CLASSES ASM_OUTPUT_IDENT	\
+	ASM_BYTE_OP MEMBER_TYPE_FORCES_BLK LIBGCC2_HAS_SF_MODE		\
+	LIBGCC2_HAS_DF_MODE LIBGCC2_HAS_XF_MODE LIBGCC2_HAS_TF_MODE	\
+	CLEAR_BY_PIECES_P MOVE_BY_PIECES_P SET_BY_PIECES_P		\
+	STORE_BY_PIECES_P TARGET_FLT_EVAL_METHOD			\
+	HARD_REGNO_CALL_PART_CLOBBERED HARD_REGNO_MODE_OK		\
+	MODES_TIEABLE_P FUNCTION_ARG_PADDING SLOW_UNALIGNED_ACCESS	\
+	HARD_REGNO_NREGS SECONDARY_MEMORY_NEEDED_MODE			\
+	SECONDARY_MEMORY_NEEDED CANNOT_CHANGE_MODE_CLASS		\
+	TRULY_NOOP_TRUNCATION FUNCTION_ARG_OFFSET CONSTANT_ALIGNMENT	\
+	STARTING_FRAME_OFFSET
+
+/* Target macros only used for code built for the target, that have
+   moved to libgcc-tm.h or have never been present elsewhere.  */
+ #pragma GCC poison DECLARE_LIBRARY_RENAMES LIBGCC2_GNU_PREFIX		\
+	MD_UNWIND_SUPPORT MD_FROB_UPDATE_CONTEXT ENABLE_EXECUTE_STACK	\
+	REG_VALUE_IN_UNWIND_CONTEXT ASSUME_EXTENDED_UNWIND_CONTEXT
+
+/* Other obsolete target macros, or macros that used to be in target
+   headers and were not used, and may be obsolete or may never have
+   been used.  */
+ #pragma GCC poison INT_ASM_OP ASM_OUTPUT_EH_REGION_BEG CPP_PREDEFINES	   \
+	ASM_OUTPUT_EH_REGION_END ASM_OUTPUT_LABELREF_AS_INT SMALL_STACK    \
+	DOESNT_NEED_UNWINDER EH_TABLE_LOOKUP OBJC_SELECTORS_WITHOUT_LABELS \
+	OMIT_EH_TABLE EASY_DIV_EXPR IMPLICIT_FIX_EXPR			   \
+	LONGJMP_RESTORE_FROM_STACK MAX_INT_TYPE_SIZE ASM_IDENTIFY_GCC	   \
+	STDC_VALUE TRAMPOLINE_ALIGN ASM_IDENTIFY_GCC_AFTER_SOURCE	   \
+	SLOW_ZERO_EXTEND SUBREG_REGNO_OFFSET DWARF_LINE_MIN_INSTR_LENGTH   \
+	TRADITIONAL_RETURN_FLOAT NO_BUILTIN_SIZE_TYPE			   \
+	NO_BUILTIN_PTRDIFF_TYPE NO_BUILTIN_WCHAR_TYPE NO_BUILTIN_WINT_TYPE \
+	BLOCK_PROFILER BLOCK_PROFILER_CODE FUNCTION_BLOCK_PROFILER	   \
+	FUNCTION_BLOCK_PROFILER_EXIT MACHINE_STATE_SAVE			   \
+	MACHINE_STATE_RESTORE SCCS_DIRECTIVE SECTION_ASM_OP BYTEORDER	   \
+	ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL HOST_WORDS_BIG_ENDIAN	   \
+	OBJC_PROLOGUE ALLOCATE_TRAMPOLINE HANDLE_PRAGMA ROUND_TYPE_SIZE	   \
+	ROUND_TYPE_SIZE_UNIT CONST_SECTION_ASM_OP CRT_GET_RFIB_TEXT	   \
+	DBX_LBRAC_FIRST DBX_OUTPUT_ENUM DBX_OUTPUT_SOURCE_FILENAME	   \
+	DBX_WORKING_DIRECTORY INSN_CACHE_DEPTH INSN_CACHE_SIZE		   \
+	INSN_CACHE_LINE_WIDTH INIT_SECTION_PREAMBLE NEED_ATEXIT ON_EXIT	   \
+	EXIT_BODY OBJECT_FORMAT_ROSE MULTIBYTE_CHARS MAP_CHARACTER	   \
+	LIBGCC_NEEDS_DOUBLE FINAL_PRESCAN_LABEL DEFAULT_CALLER_SAVES	   \
+	LOAD_ARGS_REVERSED MAX_INTEGER_COMPUTATION_MODE			   \
+	CONVERT_HARD_REGISTER_TO_SSA_P ASM_OUTPUT_MAIN_SOURCE_FILENAME	   \
+	FIRST_INSN_ADDRESS TEXT_SECTION SHARED_BSS_SECTION_ASM_OP	   \
+	PROMOTED_MODE EXPAND_BUILTIN_VA_END				   \
+	LINKER_DOES_NOT_WORK_WITH_DWARF2 FUNCTION_ARG_KEEP_AS_REFERENCE	   \
+	GIV_SORT_CRITERION MAX_LONG_TYPE_SIZE MAX_LONG_DOUBLE_TYPE_SIZE	   \
+	MAX_WCHAR_TYPE_SIZE SHARED_SECTION_ASM_OP INTEGRATE_THRESHOLD      \
+	FINAL_REG_PARM_STACK_SPACE MAYBE_REG_PARM_STACK_SPACE		   \
+	TRADITIONAL_PIPELINE_INTERFACE DFA_PIPELINE_INTERFACE		   \
+	DBX_OUTPUT_STANDARD_TYPES BUILTIN_SETJMP_FRAME_VALUE		   \
+	SUNOS4_SHARED_LIBRARIES PROMOTE_FOR_CALL_ONLY			   \
+	SPACE_AFTER_L_OPTION NO_RECURSIVE_FUNCTION_CSE			   \
+	DEFAULT_MAIN_RETURN TARGET_MEM_FUNCTIONS EXPAND_BUILTIN_VA_ARG	   \
+	COLLECT_PARSE_FLAG DWARF2_GENERATE_TEXT_SECTION_LABEL WINNING_GDB  \
+	ASM_OUTPUT_FILENAME ASM_OUTPUT_SOURCE_LINE FILE_NAME_JOINER	   \
+	GDB_INV_REF_REGPARM_STABS_LETTER DBX_MEMPARM_STABS_LETTER	   \
+	PUT_SDB_SRC_FILE STABS_GCC_MARKER DBX_OUTPUT_FUNCTION_END	   \
+	DBX_OUTPUT_GCC_MARKER DBX_FINISH_SYMBOL SDB_GENERATE_FAKE	   \
+	NON_SAVING_SETJMP TARGET_LATE_RTL_PROLOGUE_EPILOGUE		   \
+	CASE_DROPS_THROUGH TARGET_BELL TARGET_BS TARGET_CR TARGET_DIGIT0   \
+        TARGET_ESC TARGET_FF TARGET_NEWLINE TARGET_TAB TARGET_VT	   \
+        LINK_LIBGCC_SPECIAL DONT_ACCESS_GBLS_AFTER_EPILOGUE		   \
+	TARGET_OPTIONS TARGET_SWITCHES EXTRA_CC_MODES FINALIZE_PIC	   \
+	PREDICATE_CODES SPECIAL_MODE_PREDICATES	UNALIGNED_WORD_ASM_OP	   \
+	EXTRA_SECTIONS EXTRA_SECTION_FUNCTIONS READONLY_DATA_SECTION	   \
+	TARGET_ASM_EXCEPTION_SECTION TARGET_ASM_EH_FRAME_SECTION	   \
+	SMALL_ARG_MAX ASM_OUTPUT_SHARED_BSS ASM_OUTPUT_SHARED_COMMON	   \
+	ASM_OUTPUT_SHARED_LOCAL ASM_MAKE_LABEL_LINKONCE			   \
+	STACK_CHECK_PROBE_INTERVAL STACK_CHECK_PROBE_LOAD		   \
+	ORDER_REGS_FOR_LOCAL_ALLOC FUNCTION_OUTGOING_VALUE		   \
+	ASM_DECLARE_CONSTANT_NAME MODIFY_TARGET_NAME SWITCHES_NEED_SPACES  \
+	SWITCH_CURTAILS_COMPILATION SWITCH_TAKES_ARG WORD_SWITCH_TAKES_ARG \
+	TARGET_OPTION_TRANSLATE_TABLE HANDLE_PRAGMA_PACK_PUSH_POP	   \
+	HANDLE_SYSV_PRAGMA HANDLE_PRAGMA_WEAK CONDITIONAL_REGISTER_USAGE   \
+	FUNCTION_ARG_BOUNDARY MUST_USE_SJLJ_EXCEPTIONS US_SOFTWARE_GOFAST  \
+	USING_SVR4_H SVR4_ASM_SPEC FUNCTION_ARG FUNCTION_ARG_ADVANCE	   \
+	FUNCTION_INCOMING_ARG IRA_COVER_CLASSES TARGET_VERSION		   \
+	MACHINE_TYPE TARGET_HAS_TARGETCM ASM_OUTPUT_BSS			   \
+	SETJMP_VIA_SAVE_AREA FORBIDDEN_INC_DEC_CLASSES			   \
+	PREFERRED_OUTPUT_RELOAD_CLASS SYSTEM_INCLUDE_DIR		   \
+	STANDARD_INCLUDE_DIR STANDARD_INCLUDE_COMPONENT			   \
+	LINK_ELIMINATE_DUPLICATE_LDIRECTORIES MIPS_DEBUGGING_INFO	   \
+	IDENT_ASM_OP ALL_COP_ADDITIONAL_REGISTER_NAMES DBX_OUTPUT_LBRAC	   \
+	DBX_OUTPUT_NFUN DBX_OUTPUT_RBRAC RANGE_TEST_NON_SHORT_CIRCUIT	   \
+	REAL_VALUE_TRUNCATE REVERSE_CONDEXEC_PREDICATES_P		   \
+	TARGET_ALIGN_ANON_BITFIELDS TARGET_NARROW_VOLATILE_BITFIELDS	   \
+	IDENT_ASM_OP UNALIGNED_SHORT_ASM_OP UNALIGNED_INT_ASM_OP	   \
+	UNALIGNED_LONG_ASM_OP UNALIGNED_DOUBLE_INT_ASM_OP		   \
+	USE_COMMON_FOR_ONE_ONLY IFCVT_EXTRA_FIELDS IFCVT_INIT_EXTRA_FIELDS \
+	CASE_USE_BIT_TESTS FIXUNS_TRUNC_LIKE_FIX_TRUNC                     \
+        GO_IF_MODE_DEPENDENT_ADDRESS DELAY_SLOTS_FOR_EPILOGUE              \
+        ELIGIBLE_FOR_EPILOGUE_DELAY TARGET_C99_FUNCTIONS TARGET_HAS_SINCOS \
+	REG_CLASS_FROM_LETTER CONST_OK_FOR_LETTER_P			   \
+	CONST_DOUBLE_OK_FOR_LETTER_P EXTRA_CONSTRAINT			   \
+	REG_CLASS_FROM_CONSTRAINT REG_CLASS_FOR_CONSTRAINT		   \
+	EXTRA_CONSTRAINT_STR EXTRA_MEMORY_CONSTRAINT			   \
+	EXTRA_ADDRESS_CONSTRAINT CONST_DOUBLE_OK_FOR_CONSTRAINT_P	   \
+	CALLER_SAVE_PROFITABLE LARGEST_EXPONENT_IS_NORMAL		   \
+	ROUND_TOWARDS_ZERO SF_SIZE DF_SIZE XF_SIZE TF_SIZE LIBGCC2_TF_CEXT \
+	LIBGCC2_LONG_DOUBLE_TYPE_SIZE STRUCT_VALUE			   \
+	EH_FRAME_IN_DATA_SECTION TARGET_FLT_EVAL_METHOD_NON_DEFAULT	   \
+	JCR_SECTION_NAME TARGET_USE_JCR_SECTION SDB_DEBUGGING_INFO	   \
+	SDB_DEBUG NO_IMPLICIT_EXTERN_C
+
+/* Hooks that are no longer used.  */
+ #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE	\
+	LANG_HOOKS_MARK_TREE LANG_HOOKS_INSERT_DEFAULT_ATTRIBUTES \
+	LANG_HOOKS_TREE_INLINING_ESTIMATE_NUM_INSNS \
+	LANG_HOOKS_PUSHLEVEL LANG_HOOKS_SET_BLOCK \
+	LANG_HOOKS_MAYBE_BUILD_CLEANUP LANG_HOOKS_UPDATE_DECL_AFTER_SAVING \
+	LANG_HOOKS_POPLEVEL LANG_HOOKS_TRUTHVALUE_CONVERSION \
+	TARGET_PROMOTE_FUNCTION_ARGS TARGET_PROMOTE_FUNCTION_RETURN \
+	LANG_HOOKS_MISSING_ARGUMENT LANG_HOOKS_HASH_TYPES \
+	TARGET_HANDLE_OFAST TARGET_OPTION_OPTIMIZATION \
+	TARGET_IRA_COVER_CLASSES TARGET_HELP \
+	TARGET_HANDLE_PRAGMA_EXTERN_PREFIX \
+	TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN \
+	TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD \
+	TARGET_MD_ASM_CLOBBERS TARGET_RELAXED_ORDERING \
+	EXTENDED_SDB_BASIC_TYPES TARGET_INVALID_PARAMETER_TYPE \
+	TARGET_INVALID_RETURN_TYPE
+
+/* Arrays that were deleted in favor of a functional interface.  */
+ #pragma GCC poison built_in_decls implicit_built_in_decls
+
+/* Hooks into libgcc2.  */
+ #pragma GCC poison LIBGCC2_DOUBLE_TYPE_SIZE LIBGCC2_WORDS_BIG_ENDIAN \
+   LIBGCC2_FLOAT_WORDS_BIG_ENDIAN
+
+/* Miscellaneous macros that are no longer used.  */
+ #pragma GCC poison USE_MAPPED_LOCATION GET_ENVIRONMENT
+
+/* Libiberty macros that are no longer used in GCC.  */
+#undef ANSI_PROTOTYPES
+#undef PTR_CONST
+#undef LONG_DOUBLE
+#undef VPARAMS
+#undef VA_OPEN
+#undef VA_FIXEDARG
+#undef VA_CLOSE
+#undef VA_START
+ #pragma GCC poison ANSI_PROTOTYPES PTR_CONST LONG_DOUBLE VPARAMS VA_OPEN \
+  VA_FIXEDARG VA_CLOSE VA_START
+#endif /* IN_GCC */
+
+/* Front ends should never have to include middle-end headers.  Enforce
+   this by poisoning the header double-include protection defines.  */
+#ifdef IN_GCC_FRONTEND
+#pragma GCC poison GCC_RTL_H GCC_EXCEPT_H GCC_EXPR_H
+#endif
+
+/* Note: not all uses of the `index' token (e.g. variable names and
+   structure members) have been eliminated.  */
+#undef bcopy
+#undef bzero
+#undef bcmp
+#undef rindex
+ #pragma GCC poison bcopy bzero bcmp rindex
+
+/* Poison ENABLE_CHECKING macro that should be replaced with
+   'if (flag_checking)', or with CHECKING_P macro.  */
+#pragma GCC poison ENABLE_CHECKING
+
+#endif /* GCC >= 3.0 */
+
+/* This macro allows casting away const-ness to pass -Wcast-qual
+   warnings.  DO NOT USE THIS UNLESS YOU REALLY HAVE TO!  It should
+   only be used in certain specific cases.  One valid case is where
+   the C standard definitions or prototypes force you to.  E.g. if you
+   need to free a const object, or if you pass a const string to
+   execv, et al.  Another valid use would be in an allocation function
+   that creates const objects that need to be initialized.  In some
+   cases we have non-const functions that return the argument
+   (e.g. next_nonnote_insn).  Rather than create const shadow
+   functions, we can cast away const-ness in calling these interfaces
+   if we're careful to verify that the called function does indeed not
+   modify its argument and the return value is only used in a const
+   context.  (This can be somewhat dangerous as these assumptions can
+   change after the fact).  Beyond these uses, most other cases of
+   using this macro should be viewed with extreme caution.  */
+
+#ifdef __cplusplus
+#define CONST_CAST2(TOTYPE,FROMTYPE,X) (const_cast<TOTYPE> (X))
+#else
+#if defined(__GNUC__) && GCC_VERSION > 4000
+/* GCC 4.0.x has a bug where it may ICE on this expression,
+   so does GCC 3.4.x (PR17436).  */
+#define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; TOTYPE _nq;})(X))._nq)
+#elif defined(__GNUC__)
+static inline char *
+helper_const_non_const_cast (const char *p)
+{
+  union {
+    const char *const_c;
+    char *c;
+  } val;
+  val.const_c = p;
+  return val.c;
+}
+
+#define CONST_CAST2(TOTYPE,FROMTYPE,X) \
+	((TOTYPE) helper_const_non_const_cast ((const char *) (FROMTYPE) (X)))
+#else
+#define CONST_CAST2(TOTYPE,FROMTYPE,X) ((TOTYPE)(FROMTYPE)(X))
+#endif
+#endif
+#define CONST_CAST(TYPE,X) CONST_CAST2 (TYPE, const TYPE, (X))
+#define CONST_CAST_TREE(X) CONST_CAST (union tree_node *, (X))
+#define CONST_CAST_RTX(X) CONST_CAST (struct rtx_def *, (X))
+#define CONST_CAST_RTX_INSN(X) CONST_CAST (struct rtx_insn *, (X))
+#define CONST_CAST_BB(X) CONST_CAST (struct basic_block_def *, (X))
+#define CONST_CAST_GIMPLE(X) CONST_CAST (gimple *, (X))
+
+/* Activate certain diagnostics as warnings (not errors via the
+   -Werror flag).  */
+#if GCC_VERSION >= 4003
+/* If asserts are disabled, activate -Wuninitialized as a warning (not
+   an error/-Werror).  */
+#ifndef ENABLE_ASSERT_CHECKING
+#pragma GCC diagnostic warning "-Wuninitialized"
+#endif
+#endif
+
+#ifdef ENABLE_VALGRIND_ANNOTATIONS
+# ifdef HAVE_VALGRIND_MEMCHECK_H
+#  include <valgrind/memcheck.h>
+# elif defined HAVE_MEMCHECK_H
+#  include <memcheck.h>
+# else
+#  include <valgrind.h>
+# endif
+/* Compatibility macros to let valgrind 3.1 work.  */
+# ifndef VALGRIND_MAKE_MEM_NOACCESS
+#  define VALGRIND_MAKE_MEM_NOACCESS VALGRIND_MAKE_NOACCESS
+# endif
+# ifndef VALGRIND_MAKE_MEM_DEFINED
+#  define VALGRIND_MAKE_MEM_DEFINED VALGRIND_MAKE_READABLE
+# endif
+# ifndef VALGRIND_MAKE_MEM_UNDEFINED
+#  define VALGRIND_MAKE_MEM_UNDEFINED VALGRIND_MAKE_WRITABLE
+# endif
+#else
+/* Avoid #ifdef:s when we can help it.  */
+#define VALGRIND_DISCARD(x)
+#define VALGRIND_MALLOCLIKE_BLOCK(w,x,y,z)
+#define VALGRIND_FREELIKE_BLOCK(x,y)
+#endif
+
+/* Macros to temporarily ignore some warnings.  */
+#if GCC_VERSION >= 6000
+#define GCC_DIAGNOSTIC_STRINGIFY(x) #x
+#define GCC_DIAGNOSTIC_PUSH_IGNORED(x) \
+  _Pragma ("GCC diagnostic push") \
+  _Pragma (GCC_DIAGNOSTIC_STRINGIFY (GCC diagnostic ignored #x))
+#define GCC_DIAGNOSTIC_POP _Pragma ("GCC diagnostic pop")
+#else
+#define GCC_DIAGNOSTIC_PUSH_IGNORED(x)
+#define GCC_DIAGNOSTIC_POP
+#endif
+
+/* In LTO -fwhole-program build we still want to keep the debug functions available
+   for debugger.  Mark them as used to prevent removal.  */
+#if (GCC_VERSION > 4000)
+#define DEBUG_FUNCTION __attribute__ ((__used__))
+#define DEBUG_VARIABLE __attribute__ ((__used__))
+#else
+#define DEBUG_FUNCTION
+#define DEBUG_VARIABLE
+#endif
+
+/* General macro to extract bit Y of X.  */
+#define TEST_BIT(X, Y) (((X) >> (Y)) & 1)
+
+/* Get definitions of HOST_WIDE_INT.  */
+#include "hwint.h"
+
+/* GCC qsort API-compatible functions: except in release-checking compilers,
+   redirect 4-argument qsort calls to gcc_qsort; keep 1-argument invocations
+   corresponding to vec::qsort (cmp): they use C qsort internally anyway.  */
+void qsort_chk (void *, size_t, size_t, int (*)(const void *, const void *));
+void gcc_qsort (void *, size_t, size_t, int (*)(const void *, const void *));
+void gcc_stablesort (void *, size_t, size_t,
+		     int (*)(const void *, const void *));
+#define PP_5th(a1, a2, a3, a4, a5, ...) a5
+#undef qsort
+#define qsort(...) PP_5th (__VA_ARGS__, gcc_qsort, 3, 2, qsort, 0) (__VA_ARGS__)
+
+#define ONE_K 1024
+#define ONE_M (ONE_K * ONE_K)
+
+/* Display a number as an integer multiple of either:
+   - 1024, if said integer is >= to 10 K (in base 2)
+   - 1024 * 1024, if said integer is >= 10 M in (base 2)
+ */
+#define SIZE_SCALE(x) (((x) < 10 * ONE_K \
+			? (x) \
+			: ((x) < 10 * ONE_M \
+			   ? (x) / ONE_K \
+			   : (x) / ONE_M)))
+
+/* For a given integer, display either:
+   - the character 'k', if the number is higher than 10 K (in base 2)
+     but strictly lower than 10 M (in base 2)
+   - the character 'M' if the number is higher than 10 M (in base2)
+   - the charcter ' ' if the number is strictly lower  than 10 K  */
+#define SIZE_LABEL(x) ((x) < 10 * ONE_K ? ' ' : ((x) < 10 * ONE_M ? 'k' : 'M'))
+
+/* Display an integer amount as multiple of 1K or 1M (in base 2).
+   Display the correct unit (either k, M, or ' ') after the amount, as
+   well.  */
+#define SIZE_AMOUNT(size) (uint64_t)SIZE_SCALE (size), SIZE_LABEL (size)
+
+/* Format string particle for printing a SIZE_AMOUNT with N being the width
+   of the number.  */
+#define PRsa(n) "%" #n PRIu64 "%c"
+
+#endif /* ! GCC_SYSTEM_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/target-def.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/target-def.h
new file mode 100644
index 0000000..9919978
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/target-def.h
@@ -0,0 +1,125 @@
+/* Default initializers for a generic GCC target.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.
+
+   In other words, you are welcome to use, share and improve this program.
+   You are forbidden to forbid anyone else to use, share and improve
+   what you give them.   Help stamp out software-hoarding!  */
+
+/* See target.def for a description of what this file contains and how to
+   use it.
+
+   We want to have non-NULL default definitions of all hook functions,
+   even if they do nothing.  */
+
+/* Note that if one of these macros must be defined in an OS .h file
+   rather than the .c file, then we need to wrap the default
+   definition in a #ifndef, since files include tm.h before this one.  */
+
+#define TARGET_ASM_ALIGNED_HI_OP "\t.short\t"
+#define TARGET_ASM_ALIGNED_SI_OP "\t.long\t"
+#define TARGET_ASM_ALIGNED_DI_OP NULL
+#define TARGET_ASM_ALIGNED_TI_OP NULL
+
+/* GAS and SYSV4 assemblers accept these.  */
+#if defined (OBJECT_FORMAT_ELF)
+#define TARGET_ASM_UNALIGNED_HI_OP "\t.2byte\t"
+#define TARGET_ASM_UNALIGNED_SI_OP "\t.4byte\t"
+#define TARGET_ASM_UNALIGNED_DI_OP "\t.8byte\t"
+#define TARGET_ASM_UNALIGNED_TI_OP NULL
+#else
+#define TARGET_ASM_UNALIGNED_HI_OP NULL
+#define TARGET_ASM_UNALIGNED_SI_OP NULL
+#define TARGET_ASM_UNALIGNED_DI_OP NULL
+#define TARGET_ASM_UNALIGNED_TI_OP NULL
+#endif /* OBJECT_FORMAT_ELF */
+
+/* There is no standard way to handle P{S,D,T}Imode, targets must implement them
+   if required.  */
+#define TARGET_ASM_ALIGNED_PSI_OP NULL
+#define TARGET_ASM_UNALIGNED_PSI_OP NULL
+#define TARGET_ASM_ALIGNED_PDI_OP NULL
+#define TARGET_ASM_UNALIGNED_PDI_OP NULL
+#define TARGET_ASM_ALIGNED_PTI_OP NULL
+#define TARGET_ASM_UNALIGNED_PTI_OP NULL
+
+#if !defined(TARGET_ASM_CONSTRUCTOR) && !defined(USE_COLLECT2)
+# ifdef CTORS_SECTION_ASM_OP
+#  define TARGET_ASM_CONSTRUCTOR default_ctor_section_asm_out_constructor
+# else
+#  ifdef TARGET_ASM_NAMED_SECTION
+#   define TARGET_ASM_CONSTRUCTOR default_named_section_asm_out_constructor
+#  else
+#   define TARGET_ASM_CONSTRUCTOR default_stabs_asm_out_constructor
+#  endif
+# endif
+#endif
+
+#if !defined(TARGET_ASM_DESTRUCTOR) && !defined(USE_COLLECT2)
+# ifdef DTORS_SECTION_ASM_OP
+#  define TARGET_ASM_DESTRUCTOR default_dtor_section_asm_out_destructor
+# else
+#  ifdef TARGET_ASM_NAMED_SECTION
+#   define TARGET_ASM_DESTRUCTOR default_named_section_asm_out_destructor
+#  else
+#   define TARGET_ASM_DESTRUCTOR default_stabs_asm_out_destructor
+#  endif
+# endif
+#endif
+
+#if !defined(TARGET_HAVE_CTORS_DTORS)
+# if defined(TARGET_ASM_CONSTRUCTOR) && defined(TARGET_ASM_DESTRUCTOR)
+# define TARGET_HAVE_CTORS_DTORS true
+# endif
+#endif
+
+#ifndef TARGET_TERMINATE_DW2_EH_FRAME_INFO
+#ifdef EH_FRAME_SECTION_NAME
+#define TARGET_TERMINATE_DW2_EH_FRAME_INFO false
+#endif
+#endif
+
+#if !defined(TARGET_ASM_OUTPUT_ANCHOR) && !defined(ASM_OUTPUT_DEF)
+#define TARGET_ASM_OUTPUT_ANCHOR NULL
+#endif
+
+#define TARGET_ASM_ALIGNED_INT_OP				\
+		       {TARGET_ASM_ALIGNED_HI_OP,		\
+			TARGET_ASM_ALIGNED_PSI_OP,		\
+			TARGET_ASM_ALIGNED_SI_OP,		\
+			TARGET_ASM_ALIGNED_PDI_OP,		\
+			TARGET_ASM_ALIGNED_DI_OP,		\
+			TARGET_ASM_ALIGNED_PTI_OP,		\
+			TARGET_ASM_ALIGNED_TI_OP}
+
+#define TARGET_ASM_UNALIGNED_INT_OP				\
+		       {TARGET_ASM_UNALIGNED_HI_OP,		\
+			TARGET_ASM_UNALIGNED_PSI_OP,		\
+			TARGET_ASM_UNALIGNED_SI_OP,		\
+			TARGET_ASM_UNALIGNED_PDI_OP,		\
+			TARGET_ASM_UNALIGNED_DI_OP,		\
+			TARGET_ASM_UNALIGNED_PTI_OP,		\
+			TARGET_ASM_UNALIGNED_TI_OP}
+
+#if !defined (TARGET_FUNCTION_INCOMING_ARG)
+#define TARGET_FUNCTION_INCOMING_ARG TARGET_FUNCTION_ARG
+#endif
+
+#include "target-hooks-def.h"
+
+#include "hooks.h"
+#include "targhooks.h"
+#include "insn-target-def.h"
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/target-globals.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/target-globals.h
new file mode 100644
index 0000000..5af846c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/target-globals.h
@@ -0,0 +1,91 @@
+/* Target-dependent globals.
+   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef TARGET_GLOBALS_H
+#define TARGET_GLOBALS_H 1
+
+#if SWITCHABLE_TARGET
+extern struct target_flag_state *this_target_flag_state;
+extern struct target_regs *this_target_regs;
+extern struct target_rtl *this_target_rtl;
+extern struct target_recog *this_target_recog;
+extern struct target_hard_regs *this_target_hard_regs;
+extern struct target_reload *this_target_reload;
+extern struct target_expmed *this_target_expmed;
+extern struct target_optabs *this_target_optabs;
+extern struct target_libfuncs *this_target_libfuncs;
+extern struct target_cfgloop *this_target_cfgloop;
+extern struct target_ira *this_target_ira;
+extern struct target_ira_int *this_target_ira_int;
+extern struct target_builtins *this_target_builtins;
+extern struct target_gcse *this_target_gcse;
+extern struct target_bb_reorder *this_target_bb_reorder;
+extern struct target_lower_subreg *this_target_lower_subreg;
+#endif
+
+struct GTY(()) target_globals {
+  ~target_globals ();
+
+  struct target_flag_state *GTY((skip)) flag_state;
+  struct target_regs *GTY((skip)) regs;
+  struct target_rtl *rtl;
+  struct target_recog *GTY((skip)) recog;
+  struct target_hard_regs *GTY((skip)) hard_regs;
+  struct target_reload *GTY((skip)) reload;
+  struct target_expmed *GTY((skip)) expmed;
+  struct target_optabs *GTY((skip)) optabs;
+  struct target_libfuncs *libfuncs;
+  struct target_cfgloop *GTY((skip)) cfgloop;
+  struct target_ira *GTY((skip)) ira;
+  struct target_ira_int *GTY((skip)) ira_int;
+  struct target_builtins *GTY((skip)) builtins;
+  struct target_gcse *GTY((skip)) gcse;
+  struct target_bb_reorder *GTY((skip)) bb_reorder;
+  struct target_lower_subreg *GTY((skip)) lower_subreg;
+};
+
+#if SWITCHABLE_TARGET
+extern struct target_globals default_target_globals;
+
+extern struct target_globals *save_target_globals (void);
+extern struct target_globals *save_target_globals_default_opts (void);
+
+static inline void
+restore_target_globals (struct target_globals *g)
+{
+  this_target_flag_state = g->flag_state;
+  this_target_regs = g->regs;
+  this_target_rtl = g->rtl;
+  this_target_recog = g->recog;
+  this_target_hard_regs = g->hard_regs;
+  this_target_reload = g->reload;
+  this_target_expmed = g->expmed;
+  this_target_optabs = g->optabs;
+  this_target_libfuncs = g->libfuncs;
+  this_target_cfgloop = g->cfgloop;
+  this_target_ira = g->ira;
+  this_target_ira_int = g->ira_int;
+  this_target_builtins = g->builtins;
+  this_target_gcse = g->gcse;
+  this_target_bb_reorder = g->bb_reorder;
+  this_target_lower_subreg = g->lower_subreg;
+}
+#endif
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/target-hooks-macros.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/target-hooks-macros.h
new file mode 100644
index 0000000..5523f38
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/target-hooks-macros.h
@@ -0,0 +1,80 @@
+/* Common macros for target hook definitions.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+/* The following macros should be provided by the including file:
+
+   DEFHOOK(NAME, DOC, TYPE, PARAMS, INIT): Define a function-valued hook.
+   DEFHOOKPOD(NAME, DOC, TYPE, INIT): Define a piece-of-data 'hook'.  */
+
+/* Defaults for optional macros:
+   DEFHOOKPODX(NAME, TYPE, INIT): Like DEFHOOKPOD, but share documentation
+   with the previous 'hook'.  */
+#ifndef DEFHOOKPODX
+#define DEFHOOKPODX(NAME, TYPE, INIT) DEFHOOKPOD (NAME, 0, TYPE, INIT)
+#endif
+   
+/* HOOKSTRUCT(FRAGMENT): Declarator fragments to encapsulate all the
+   members into a struct gcc_target, which in turn contains several
+   sub-structs.  */
+#ifndef HOOKSTRUCT
+#define HOOKSTRUCT(FRAGMENT)
+#endif
+/* HOOK_VECTOR: Start a struct declaration, which then gets its own initializer.
+   HOOK_VECTOR_END: Close a struct declaration, providing a member declarator
+                    name for nested use.  */
+#ifndef HOOK_VECTOR_1
+#define HOOK_VECTOR_1(NAME, FRAGMENT) HOOKSTRUCT (FRAGMENT)
+#endif
+#define HOOK_VECTOR(INIT_NAME, SNAME) HOOK_VECTOR_1 (INIT_NAME, struct SNAME {)
+#define HOOK_VECTOR_END(DECL_NAME) HOOK_VECTOR_1(,} DECL_NAME ;)
+
+/* FIXME: For pre-existing hooks, we can't place the documentation in the
+   documentation field here till we get permission from the FSF to include
+   it in GPLed software - the target hook documentation is so far only
+   available under the GFDL.  */
+
+/* A hook should generally be documented by a string in the DOC parameter,
+   which should contain texinfo markup.  If the documentation is only available
+   under the GPL, but not under the GFDL, put it in a comment above the hook
+   definition.  If the function declaration is available both under GPL and
+   GFDL, but the documentation is only available under the GFDL, put the
+   documentaton in tm.texi.in, heading with @hook <hookname> and closing
+   the paragraph with @end deftypefn / deftypevr as appropriate, and marking
+   the next autogenerated hook with @hook <hookname>.
+   In both these cases, leave the DOC string empty, i.e. "".
+   Sometimes, for some historic reason the function declaration 
+   has to be documented differently
+   than what it is.  In that case, use DEFHOOK_UNDOC to suppress auto-generation
+   of documentation.  DEFHOOK_UNDOC takes a DOC string which it ignores, so
+   you can put GPLed documentation string there if you have hopes that you
+   can clear the declaration & documentation for GFDL distribution later,
+   in which case you can then simply change the DEFHOOK_UNDOC to DEFHOOK
+   to turn on the autogeneration of the documentation.
+
+    A documentation string of "*" means not to emit any documentation at all,
+   and is mainly used internally for DEFHOOK_UNDOC.  It should generally not
+   be used otherwise, but it has its use for exceptional cases where automatic
+   documentation is not wanted, and the real documentation is elsewere, like
+   for TARGET_ASM_{,UN}ALIGNED_INT_OP, which are hooks only for implementation
+   purposes; they refer to structs, the components of which are documented as
+   separate hooks TARGET_ASM_{,UN}ALIGNED_[HSDT]I_OP.
+   A DOC string of 0 is for internal use of DEFHOOKPODX and special table
+   entries only.  */
+
+/* Empty macro arguments are undefined in C90, so use an empty macro
+   to close top-level hook structures.  */
+#define C90_EMPTY_HACK
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/target-insns.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/target-insns.def
new file mode 100644
index 0000000..8801b8a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/target-insns.def
@@ -0,0 +1,108 @@
+/* Target instruction definitions.
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This file has one entry for each public pattern name that the target
+   can provide.  It is only used if no distinction between operand modes
+   is necessary.  If separate patterns are needed for different modes
+   (so as to distinguish addition of QImode values from addition of
+   HImode values, for example) then an optab should be used instead.
+
+   Each entry has the form:
+
+     DEF_TARGET_INSN (name, prototype)
+
+   where NAME is the name of the pattern and PROTOTYPE is its C prototype.
+   The prototype should use parameter names of the form "x0", "x1", etc.
+   for the operands that the .md pattern is required to have, followed by
+   parameter names of the form "optN" for operands that the .md pattern
+   may choose to ignore.  Patterns that never take operands should have
+   a prototype "(void)".
+
+   Pattern names should be documented in md.texi rather than here.  */
+DEF_TARGET_INSN (allocate_stack, (rtx x0, rtx x1))
+DEF_TARGET_INSN (atomic_test_and_set, (rtx x0, rtx x1, rtx x2))
+DEF_TARGET_INSN (builtin_longjmp, (rtx x0))
+DEF_TARGET_INSN (builtin_setjmp_receiver, (rtx x0))
+DEF_TARGET_INSN (builtin_setjmp_setup, (rtx x0))
+DEF_TARGET_INSN (canonicalize_funcptr_for_compare, (rtx x0, rtx x1))
+DEF_TARGET_INSN (call, (rtx x0, rtx opt1, rtx opt2, rtx opt3))
+DEF_TARGET_INSN (call_pop, (rtx x0, rtx opt1, rtx opt2, rtx opt3))
+DEF_TARGET_INSN (call_value, (rtx x0, rtx x1, rtx opt2, rtx opt3, rtx opt4))
+DEF_TARGET_INSN (call_value_pop, (rtx x0, rtx x1, rtx opt2, rtx opt3,
+				  rtx opt4))
+DEF_TARGET_INSN (casesi, (rtx x0, rtx x1, rtx x2, rtx x3, rtx x4))
+DEF_TARGET_INSN (check_stack, (rtx x0))
+DEF_TARGET_INSN (clear_cache, (rtx x0, rtx x1))
+DEF_TARGET_INSN (doloop_begin, (rtx x0, rtx x1))
+DEF_TARGET_INSN (doloop_end, (rtx x0, rtx x1))
+DEF_TARGET_INSN (eh_return, (rtx x0))
+DEF_TARGET_INSN (epilogue, (void))
+DEF_TARGET_INSN (exception_receiver, (void))
+DEF_TARGET_INSN (extv, (rtx x0, rtx x1, rtx x2, rtx x3))
+DEF_TARGET_INSN (extzv, (rtx x0, rtx x1, rtx x2, rtx x3))
+DEF_TARGET_INSN (indirect_jump, (rtx x0))
+DEF_TARGET_INSN (insv, (rtx x0, rtx x1, rtx x2, rtx x3))
+DEF_TARGET_INSN (jump, (rtx x0))
+DEF_TARGET_INSN (load_multiple, (rtx x0, rtx x1, rtx x2))
+DEF_TARGET_INSN (mem_thread_fence, (rtx x0))
+DEF_TARGET_INSN (memory_barrier, (void))
+DEF_TARGET_INSN (memory_blockage, (void))
+DEF_TARGET_INSN (movstr, (rtx x0, rtx x1, rtx x2))
+DEF_TARGET_INSN (nonlocal_goto, (rtx x0, rtx x1, rtx x2, rtx x3))
+DEF_TARGET_INSN (nonlocal_goto_receiver, (void))
+DEF_TARGET_INSN (oacc_dim_pos, (rtx x0, rtx x1))
+DEF_TARGET_INSN (oacc_dim_size, (rtx x0, rtx x1))
+DEF_TARGET_INSN (oacc_fork, (rtx x0, rtx x1, rtx x2))
+DEF_TARGET_INSN (oacc_join, (rtx x0, rtx x1, rtx x2))
+DEF_TARGET_INSN (omp_simt_enter, (rtx x0, rtx x1, rtx x2))
+DEF_TARGET_INSN (omp_simt_exit, (rtx x0))
+DEF_TARGET_INSN (omp_simt_lane, (rtx x0))
+DEF_TARGET_INSN (omp_simt_last_lane, (rtx x0, rtx x1))
+DEF_TARGET_INSN (omp_simt_ordered, (rtx x0, rtx x1))
+DEF_TARGET_INSN (omp_simt_vote_any, (rtx x0, rtx x1))
+DEF_TARGET_INSN (omp_simt_xchg_bfly, (rtx x0, rtx x1, rtx x2))
+DEF_TARGET_INSN (omp_simt_xchg_idx, (rtx x0, rtx x1, rtx x2))
+DEF_TARGET_INSN (prefetch, (rtx x0, rtx x1, rtx x2))
+DEF_TARGET_INSN (probe_stack, (rtx x0))
+DEF_TARGET_INSN (probe_stack_address, (rtx x0))
+DEF_TARGET_INSN (prologue, (void))
+DEF_TARGET_INSN (ptr_extend, (rtx x0, rtx x1))
+DEF_TARGET_INSN (reload_load_address, (rtx x0, rtx x1))
+DEF_TARGET_INSN (restore_stack_block, (rtx x0, rtx x1))
+DEF_TARGET_INSN (restore_stack_function, (rtx x0, rtx x1))
+DEF_TARGET_INSN (restore_stack_nonlocal, (rtx x0, rtx x1))
+DEF_TARGET_INSN (return, (void))
+DEF_TARGET_INSN (save_stack_block, (rtx x0, rtx x1))
+DEF_TARGET_INSN (save_stack_function, (rtx x0, rtx x1))
+DEF_TARGET_INSN (save_stack_nonlocal, (rtx x0, rtx x1))
+DEF_TARGET_INSN (sibcall, (rtx x0, rtx opt1, rtx opt2, rtx opt3))
+DEF_TARGET_INSN (sibcall_epilogue, (void))
+DEF_TARGET_INSN (sibcall_value, (rtx x0, rtx x1, rtx opt2, rtx opt3,
+				 rtx opt4))
+DEF_TARGET_INSN (simple_return, (void))
+DEF_TARGET_INSN (split_stack_prologue, (void))
+DEF_TARGET_INSN (split_stack_space_check, (rtx x0, rtx x1))
+DEF_TARGET_INSN (stack_protect_combined_set, (rtx x0, rtx x1))
+DEF_TARGET_INSN (stack_protect_set, (rtx x0, rtx x1))
+DEF_TARGET_INSN (stack_protect_combined_test, (rtx x0, rtx x1, rtx x2))
+DEF_TARGET_INSN (stack_protect_test, (rtx x0, rtx x1, rtx x2))
+DEF_TARGET_INSN (store_multiple, (rtx x0, rtx x1, rtx x2))
+DEF_TARGET_INSN (tablejump, (rtx x0, rtx x1))
+DEF_TARGET_INSN (trap, (void))
+DEF_TARGET_INSN (unique, (void))
+DEF_TARGET_INSN (untyped_call, (rtx x0, rtx x1, rtx x2))
+DEF_TARGET_INSN (untyped_return, (rtx x0, rtx x1))
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/target.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/target.def
new file mode 100644
index 0000000..66cee07
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/target.def
@@ -0,0 +1,6724 @@
+/* Target hook definitions.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.
+
+   In other words, you are welcome to use, share and improve this program.
+   You are forbidden to forbid anyone else to use, share and improve
+   what you give them.   Help stamp out software-hoarding!  */
+
+/* See target-hooks-macros.h for details of macros that should be
+   provided by the including file, and how to use them here.  */
+#include "target-hooks-macros.h"
+
+#undef HOOK_TYPE
+#define HOOK_TYPE "Target Hook"
+
+HOOK_VECTOR (TARGET_INITIALIZER, gcc_target)
+
+/* Functions that output assembler for the target.  */
+#define HOOK_PREFIX "TARGET_ASM_"
+HOOK_VECTOR (TARGET_ASM_OUT, asm_out)
+
+/* Opening and closing parentheses for asm expression grouping.  */
+DEFHOOKPOD
+(open_paren,
+ "These target hooks are C string constants, describing the syntax in the\n\
+assembler for grouping arithmetic expressions.  If not overridden, they\n\
+default to normal parentheses, which is correct for most assemblers.",
+ const char *, "(")
+DEFHOOKPODX (close_paren, const char *, ")")
+
+/* Assembler instructions for creating various kinds of integer object.  */
+DEFHOOKPOD
+(byte_op,
+ "@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_HI_OP\n\
+@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_PSI_OP\n\
+@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_SI_OP\n\
+@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_PDI_OP\n\
+@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_DI_OP\n\
+@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_PTI_OP\n\
+@deftypevrx {Target Hook} {const char *} TARGET_ASM_ALIGNED_TI_OP\n\
+@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_HI_OP\n\
+@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_PSI_OP\n\
+@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_SI_OP\n\
+@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_PDI_OP\n\
+@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_DI_OP\n\
+@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_PTI_OP\n\
+@deftypevrx {Target Hook} {const char *} TARGET_ASM_UNALIGNED_TI_OP\n\
+These hooks specify assembly directives for creating certain kinds\n\
+of integer object.  The @code{TARGET_ASM_BYTE_OP} directive creates a\n\
+byte-sized object, the @code{TARGET_ASM_ALIGNED_HI_OP} one creates an\n\
+aligned two-byte object, and so on.  Any of the hooks may be\n\
+@code{NULL}, indicating that no suitable directive is available.\n\
+\n\
+The compiler will print these strings at the start of a new line,\n\
+followed immediately by the object's initial value.  In most cases,\n\
+the string should contain a tab, a pseudo-op, and then another tab.",
+ const char *, "\t.byte\t")
+DEFHOOKPOD (aligned_op, "*", struct asm_int_op, TARGET_ASM_ALIGNED_INT_OP)
+DEFHOOKPOD (unaligned_op, "*", struct asm_int_op, TARGET_ASM_UNALIGNED_INT_OP)
+
+/* Try to output the assembler code for an integer object whose
+   value is given by X.  SIZE is the size of the object in bytes and
+   ALIGNED_P indicates whether it is aligned.  Return true if
+   successful.  Only handles cases for which BYTE_OP, ALIGNED_OP
+   and UNALIGNED_OP are NULL.  */
+DEFHOOK
+(integer,
+ "The @code{assemble_integer} function uses this hook to output an\n\
+integer object.  @var{x} is the object's value, @var{size} is its size\n\
+in bytes and @var{aligned_p} indicates whether it is aligned.  The\n\
+function should return @code{true} if it was able to output the\n\
+object.  If it returns false, @code{assemble_integer} will try to\n\
+split the object into smaller parts.\n\
+\n\
+The default implementation of this hook will use the\n\
+@code{TARGET_ASM_BYTE_OP} family of strings, returning @code{false}\n\
+when the relevant string is @code{NULL}.",
+ /* Only handles cases for which BYTE_OP, ALIGNED_OP and UNALIGNED_OP are
+    NULL.  */
+ bool, (rtx x, unsigned int size, int aligned_p),
+ default_assemble_integer)
+
+/* Assembly strings required after the .cfi_startproc label.  */
+DEFHOOK
+(post_cfi_startproc,
+  "This target hook is used to emit assembly strings required by the target\n\
+after the .cfi_startproc directive.  The first argument is the file stream to\n\
+write the strings to and the second argument is the function\'s declaration.  The\n\
+expected use is to add more .cfi_* directives.\n\
+\n\
+The default is to not output any assembly strings.",
+  void, (FILE *, tree),
+  hook_void_FILEptr_tree)
+
+/* Notify the backend that we have completed emitting the data for a
+   decl.  */
+DEFHOOK
+(decl_end,
+ "Define this hook if the target assembler requires a special marker to\n\
+terminate an initialized variable declaration.",
+ void, (void),
+ hook_void_void)
+
+/* Output code that will globalize a label.  */
+DEFHOOK
+(globalize_label,
+ "This target hook is a function to output to the stdio stream\n\
+@var{stream} some commands that will make the label @var{name} global;\n\
+that is, available for reference from other files.\n\
+\n\
+The default implementation relies on a proper definition of\n\
+@code{GLOBAL_ASM_OP}.",
+ void, (FILE *stream, const char *name),
+ default_globalize_label)
+
+/* Output code that will globalize a declaration.  */
+DEFHOOK
+(globalize_decl_name,
+ "This target hook is a function to output to the stdio stream\n\
+@var{stream} some commands that will make the name associated with @var{decl}\n\
+global; that is, available for reference from other files.\n\
+\n\
+The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL target hook.",
+ void, (FILE *stream, tree decl), default_globalize_decl_name)
+
+/* Output code that will declare an external variable.  */
+DEFHOOK
+(assemble_undefined_decl,
+ "This target hook is a function to output to the stdio stream\n\
+@var{stream} some commands that will declare the name associated with\n\
+@var{decl} which is not defined in the current translation unit.  Most\n\
+assemblers do not require anything to be output in this case.",
+ void, (FILE *stream, const char *name, const_tree decl),
+ hook_void_FILEptr_constcharptr_const_tree)
+
+/* Output code that will emit a label for unwind info, if this
+   target requires such labels.  Second argument is the decl the
+   unwind info is associated with, third is a boolean: true if
+   this is for exception handling, fourth is a boolean: true if
+   this is only a placeholder for an omitted FDE.  */
+DEFHOOK
+(emit_unwind_label,
+ "This target hook emits a label at the beginning of each FDE@.  It\n\
+should be defined on targets where FDEs need special labels, and it\n\
+should write the appropriate label, for the FDE associated with the\n\
+function declaration @var{decl}, to the stdio stream @var{stream}.\n\
+The third argument, @var{for_eh}, is a boolean: true if this is for an\n\
+exception table.  The fourth argument, @var{empty}, is a boolean:\n\
+true if this is a placeholder label for an omitted FDE@.\n\
+\n\
+The default is that FDEs are not given nonlocal labels.",
+ void, (FILE *stream, tree decl, int for_eh, int empty),
+ default_emit_unwind_label)
+
+/* Output code that will emit a label to divide up the exception table.  */
+DEFHOOK
+(emit_except_table_label,
+ "This target hook emits a label at the beginning of the exception table.\n\
+It should be defined on targets where it is desirable for the table\n\
+to be broken up according to function.\n\
+\n\
+The default is that no label is emitted.",
+ void, (FILE *stream),
+ default_emit_except_table_label)
+
+/* Emit a directive for setting the personality for the function.  */
+DEFHOOK
+(emit_except_personality,
+ "If the target implements @code{TARGET_ASM_UNWIND_EMIT}, this hook may be\
+ used to emit a directive to install a personality hook into the unwind\
+ info.  This hook should not be used if dwarf2 unwind info is used.",
+ void, (rtx personality),
+ NULL)
+
+/* Emit any directives required to unwind this instruction.  */
+DEFHOOK
+(unwind_emit,
+ "This target hook emits assembly directives required to unwind the\n\
+given instruction.  This is only used when @code{TARGET_EXCEPT_UNWIND_INFO}\n\
+returns @code{UI_TARGET}.",
+ void, (FILE *stream, rtx_insn *insn),
+ NULL)
+
+DEFHOOKPOD
+(unwind_emit_before_insn,
+ "True if the @code{TARGET_ASM_UNWIND_EMIT} hook should be called before\
+ the assembly for @var{insn} has been emitted, false if the hook should\
+ be called afterward.",
+ bool, true)
+
+/* Generate an internal label.
+   For now this is just a wrapper for ASM_GENERATE_INTERNAL_LABEL.  */
+DEFHOOK_UNDOC
+(generate_internal_label,
+ "",
+ void, (char *buf, const char *prefix, unsigned long labelno),
+ default_generate_internal_label)
+
+/* Output an internal label.  */
+DEFHOOK
+(internal_label,
+ "A function to output to the stdio stream @var{stream} a label whose\n\
+name is made from the string @var{prefix} and the number @var{labelno}.\n\
+\n\
+It is absolutely essential that these labels be distinct from the labels\n\
+used for user-level functions and variables.  Otherwise, certain programs\n\
+will have name conflicts with internal labels.\n\
+\n\
+It is desirable to exclude internal labels from the symbol table of the\n\
+object file.  Most assemblers have a naming convention for labels that\n\
+should be excluded; on many systems, the letter @samp{L} at the\n\
+beginning of a label has this effect.  You should find out what\n\
+convention your system uses, and follow it.\n\
+\n\
+The default version of this function utilizes @code{ASM_GENERATE_INTERNAL_LABEL}.",
+ void, (FILE *stream, const char *prefix, unsigned long labelno),
+ default_internal_label)
+
+/* Output label for the constant.  */
+DEFHOOK
+(declare_constant_name,
+ "A target hook to output to the stdio stream @var{file} any text necessary\n\
+for declaring the name @var{name} of a constant which is being defined.  This\n\
+target hook is responsible for outputting the label definition (perhaps using\n\
+@code{assemble_label}).  The argument @var{exp} is the value of the constant,\n\
+and @var{size} is the size of the constant in bytes.  The @var{name}\n\
+will be an internal label.\n\
+\n\
+The default version of this target hook, define the @var{name} in the\n\
+usual manner as a label (by means of @code{assemble_label}).\n\
+\n\
+You may wish to use @code{ASM_OUTPUT_TYPE_DIRECTIVE} in this target hook.",
+ void, (FILE *file, const char *name, const_tree expr, HOST_WIDE_INT size),
+ default_asm_declare_constant_name)
+
+/* Emit a ttype table reference to a typeinfo object.  */
+DEFHOOK
+(ttype,
+ "This hook is used to output a reference from a frame unwinding table to\n\
+the type_info object identified by @var{sym}.  It should return @code{true}\n\
+if the reference was output.  Returning @code{false} will cause the\n\
+reference to be output using the normal Dwarf2 routines.",
+ bool, (rtx sym),
+ hook_bool_rtx_false)
+
+/* Emit an assembler directive to set visibility for the symbol
+   associated with the tree decl.  */
+DEFHOOK
+(assemble_visibility,
+ "This target hook is a function to output to @var{asm_out_file} some\n\
+commands that will make the symbol(s) associated with @var{decl} have\n\
+hidden, protected or internal visibility as specified by @var{visibility}.",
+ void, (tree decl, int visibility),
+ default_assemble_visibility)
+
+DEFHOOK
+(print_patchable_function_entry,
+ "Generate a patchable area at the function start, consisting of\n\
+@var{patch_area_size} NOP instructions.  If the target supports named\n\
+sections and if @var{record_p} is true, insert a pointer to the current\n\
+location in the table of patchable functions.  The default implementation\n\
+of the hook places the table of pointers in the special section named\n\
+@code{__patchable_function_entries}.",
+ void, (FILE *file, unsigned HOST_WIDE_INT patch_area_size, bool record_p),
+ default_print_patchable_function_entry)
+
+/* Output the assembler code for entry to a function.  */
+DEFHOOK
+(function_prologue,
+ "If defined, a function that outputs the assembler code for entry to a\n\
+function.  The prologue is responsible for setting up the stack frame,\n\
+initializing the frame pointer register, saving registers that must be\n\
+saved, and allocating @var{size} additional bytes of storage for the\n\
+local variables.  @var{file} is a stdio stream to which the assembler\n\
+code should be output.\n\
+\n\
+The label for the beginning of the function need not be output by this\n\
+macro.  That has already been done when the macro is run.\n\
+\n\
+@findex regs_ever_live\n\
+To determine which registers to save, the macro can refer to the array\n\
+@code{regs_ever_live}: element @var{r} is nonzero if hard register\n\
+@var{r} is used anywhere within the function.  This implies the function\n\
+prologue should save register @var{r}, provided it is not one of the\n\
+call-used registers.  (@code{TARGET_ASM_FUNCTION_EPILOGUE} must likewise use\n\
+@code{regs_ever_live}.)\n\
+\n\
+On machines that have ``register windows'', the function entry code does\n\
+not save on the stack the registers that are in the windows, even if\n\
+they are supposed to be preserved by function calls; instead it takes\n\
+appropriate steps to ``push'' the register stack, if any non-call-used\n\
+registers are used in the function.\n\
+\n\
+@findex frame_pointer_needed\n\
+On machines where functions may or may not have frame-pointers, the\n\
+function entry code must vary accordingly; it must set up the frame\n\
+pointer if one is wanted, and not otherwise.  To determine whether a\n\
+frame pointer is in wanted, the macro can refer to the variable\n\
+@code{frame_pointer_needed}.  The variable's value will be 1 at run\n\
+time in a function that needs a frame pointer.  @xref{Elimination}.\n\
+\n\
+The function entry code is responsible for allocating any stack space\n\
+required for the function.  This stack space consists of the regions\n\
+listed below.  In most cases, these regions are allocated in the\n\
+order listed, with the last listed region closest to the top of the\n\
+stack (the lowest address if @code{STACK_GROWS_DOWNWARD} is defined, and\n\
+the highest address if it is not defined).  You can use a different order\n\
+for a machine if doing so is more convenient or required for\n\
+compatibility reasons.  Except in cases where required by standard\n\
+or by a debugger, there is no reason why the stack layout used by GCC\n\
+need agree with that used by other compilers for a machine.",
+ void, (FILE *file),
+ default_function_pro_epilogue)
+
+/* Output the assembler code for end of prologue.  */
+DEFHOOK
+(function_end_prologue,
+ "If defined, a function that outputs assembler code at the end of a\n\
+prologue.  This should be used when the function prologue is being\n\
+emitted as RTL, and you have some extra assembler that needs to be\n\
+emitted.  @xref{prologue instruction pattern}.",
+ void, (FILE *file),
+ no_asm_to_stream)
+
+/* Output the assembler code for start of epilogue.  */
+DEFHOOK
+(function_begin_epilogue,
+ "If defined, a function that outputs assembler code at the start of an\n\
+epilogue.  This should be used when the function epilogue is being\n\
+emitted as RTL, and you have some extra assembler that needs to be\n\
+emitted.  @xref{epilogue instruction pattern}.",
+ void, (FILE *file),
+ no_asm_to_stream)
+
+/* Output the assembler code for function exit.  */
+DEFHOOK
+(function_epilogue,
+ "If defined, a function that outputs the assembler code for exit from a\n\
+function.  The epilogue is responsible for restoring the saved\n\
+registers and stack pointer to their values when the function was\n\
+called, and returning control to the caller.  This macro takes the\n\
+same argument as the macro @code{TARGET_ASM_FUNCTION_PROLOGUE}, and the\n\
+registers to restore are determined from @code{regs_ever_live} and\n\
+@code{CALL_USED_REGISTERS} in the same way.\n\
+\n\
+On some machines, there is a single instruction that does all the work\n\
+of returning from the function.  On these machines, give that\n\
+instruction the name @samp{return} and do not define the macro\n\
+@code{TARGET_ASM_FUNCTION_EPILOGUE} at all.\n\
+\n\
+Do not define a pattern named @samp{return} if you want the\n\
+@code{TARGET_ASM_FUNCTION_EPILOGUE} to be used.  If you want the target\n\
+switches to control whether return instructions or epilogues are used,\n\
+define a @samp{return} pattern with a validity condition that tests the\n\
+target switches appropriately.  If the @samp{return} pattern's validity\n\
+condition is false, epilogues will be used.\n\
+\n\
+On machines where functions may or may not have frame-pointers, the\n\
+function exit code must vary accordingly.  Sometimes the code for these\n\
+two cases is completely different.  To determine whether a frame pointer\n\
+is wanted, the macro can refer to the variable\n\
+@code{frame_pointer_needed}.  The variable's value will be 1 when compiling\n\
+a function that needs a frame pointer.\n\
+\n\
+Normally, @code{TARGET_ASM_FUNCTION_PROLOGUE} and\n\
+@code{TARGET_ASM_FUNCTION_EPILOGUE} must treat leaf functions specially.\n\
+The C variable @code{current_function_is_leaf} is nonzero for such a\n\
+function.  @xref{Leaf Functions}.\n\
+\n\
+On some machines, some functions pop their arguments on exit while\n\
+others leave that for the caller to do.  For example, the 68020 when\n\
+given @option{-mrtd} pops arguments in functions that take a fixed\n\
+number of arguments.\n\
+\n\
+@findex pops_args\n\
+@findex crtl->args.pops_args\n\
+Your definition of the macro @code{RETURN_POPS_ARGS} decides which\n\
+functions pop their own arguments.  @code{TARGET_ASM_FUNCTION_EPILOGUE}\n\
+needs to know what was decided.  The number of bytes of the current\n\
+function's arguments that this function should pop is available in\n\
+@code{crtl->args.pops_args}.  @xref{Scalar Return}.",
+ void, (FILE *file),
+ default_function_pro_epilogue)
+
+/* Initialize target-specific sections.  */
+DEFHOOK
+(init_sections,
+ "Define this hook if you need to do something special to set up the\n\
+@file{varasm.c} sections, or if your target has some special sections\n\
+of its own that you need to create.\n\
+\n\
+GCC calls this hook after processing the command line, but before writing\n\
+any assembly code, and before calling any of the section-returning hooks\n\
+described below.",
+ void, (void),
+ hook_void_void)
+
+/* Tell assembler to change to section NAME with attributes FLAGS.
+   If DECL is non-NULL, it is the VAR_DECL or FUNCTION_DECL with
+   which this section is associated.  */
+DEFHOOK
+(named_section,
+ "Output assembly directives to switch to section @var{name}.  The section\n\
+should have attributes as specified by @var{flags}, which is a bit mask\n\
+of the @code{SECTION_*} flags defined in @file{output.h}.  If @var{decl}\n\
+is non-NULL, it is the @code{VAR_DECL} or @code{FUNCTION_DECL} with which\n\
+this section is associated.",
+ void, (const char *name, unsigned int flags, tree decl),
+ default_no_named_section)
+
+/* Tell assembler what section attributes to assign this elf section
+   declaration, using their numerical value.  */
+DEFHOOK
+(elf_flags_numeric,
+ "This hook can be used to encode ELF section flags for which no letter\n\
+code has been defined in the assembler.  It is called by\n\
+@code{default_asm_named_section} whenever the section flags need to be\n\
+emitted in the assembler output.  If the hook returns true, then the\n\
+numerical value for ELF section flags should be calculated from\n\
+@var{flags} and saved in @var{*num}; the value is printed out instead of the\n\
+normal sequence of letter codes.  If the hook is not defined, or if it\n\
+returns false, then @var{num} is ignored and the traditional letter sequence\n\
+is emitted.",
+ bool, (unsigned int flags, unsigned int *num),
+ hook_bool_uint_uintp_false)
+
+/* Return preferred text (sub)section for function DECL.
+   Main purpose of this function is to separate cold, normal and hot
+   functions. STARTUP is true when function is known to be used only 
+   at startup (from static constructors or it is main()).
+   EXIT is true when function is known to be used only at exit
+   (from static destructors).
+   Return NULL if function should go to default text section.  */
+DEFHOOK
+(function_section,
+ "Return preferred text (sub)section for function @var{decl}.\n\
+Main purpose of this function is to separate cold, normal and hot\n\
+functions. @var{startup} is true when function is known to be used only\n\
+at startup (from static constructors or it is @code{main()}).\n\
+@var{exit} is true when function is known to be used only at exit\n\
+(from static destructors).\n\
+Return NULL if function should go to default text section.",
+ section *, (tree decl, enum node_frequency freq, bool startup, bool exit),
+ default_function_section)
+
+/* Output the assembler code for function exit.  */
+DEFHOOK
+(function_switched_text_sections,
+ "Used by the target to emit any assembler directives or additional\
+  labels needed when a function is partitioned between different\
+  sections.  Output should be written to @var{file}.  The function\
+  decl is available as @var{decl} and the new section is `cold' if\
+  @var{new_is_cold} is @code{true}.",
+ void, (FILE *file, tree decl, bool new_is_cold),
+ default_function_switched_text_sections)
+
+/* Return a mask describing how relocations should be treated when
+   selecting sections.  Bit 1 should be set if global relocations
+   should be placed in a read-write section; bit 0 should be set if
+   local relocations should be placed in a read-write section.  */
+DEFHOOK
+(reloc_rw_mask,
+ "Return a mask describing how relocations should be treated when\n\
+selecting sections.  Bit 1 should be set if global relocations\n\
+should be placed in a read-write section; bit 0 should be set if\n\
+local relocations should be placed in a read-write section.\n\
+\n\
+The default version of this function returns 3 when @option{-fpic}\n\
+is in effect, and 0 otherwise.  The hook is typically redefined\n\
+when the target cannot support (some kinds of) dynamic relocations\n\
+in read-only sections even in executables.",
+ int, (void),
+ default_reloc_rw_mask)
+
+ /* Return a flag for either generating ADDR_DIF_VEC table
+ or ADDR_VEC table for jumps in case of -fPIC/-fPIE.  */
+DEFHOOK
+(generate_pic_addr_diff_vec,
+"Return true to generate ADDR_DIF_VEC table\n\
+or false to generate ADDR_VEC table for jumps in case of -fPIC.\n\
+\n\
+The default version of this function returns true if flag_pic\n\
+equals true and false otherwise",
+ bool, (void),
+ default_generate_pic_addr_diff_vec)
+
+ /* Return a section for EXP.  It may be a DECL or a constant.  RELOC
+    is nonzero if runtime relocations must be applied; bit 1 will be
+    set if the runtime relocations require non-local name resolution.
+    ALIGN is the required alignment of the data.  */
+DEFHOOK
+(select_section,
+ "Return the section into which @var{exp} should be placed.  You can\n\
+assume that @var{exp} is either a @code{VAR_DECL} node or a constant of\n\
+some sort.  @var{reloc} indicates whether the initial value of @var{exp}\n\
+requires link-time relocations.  Bit 0 is set when variable contains\n\
+local relocations only, while bit 1 is set for global relocations.\n\
+@var{align} is the constant alignment in bits.\n\
+\n\
+The default version of this function takes care of putting read-only\n\
+variables in @code{readonly_data_section}.\n\
+\n\
+See also @var{USE_SELECT_SECTION_FOR_FUNCTIONS}.",
+ section *, (tree exp, int reloc, unsigned HOST_WIDE_INT align),
+ default_select_section)
+
+/* Return a section for X.  MODE is X's mode and ALIGN is its
+   alignment in bits.  */
+DEFHOOK
+(select_rtx_section,
+ "Return the section into which a constant @var{x}, of mode @var{mode},\n\
+should be placed.  You can assume that @var{x} is some kind of\n\
+constant in RTL@.  The argument @var{mode} is redundant except in the\n\
+case of a @code{const_int} rtx.  @var{align} is the constant alignment\n\
+in bits.\n\
+\n\
+The default version of this function takes care of putting symbolic\n\
+constants in @code{flag_pic} mode in @code{data_section} and everything\n\
+else in @code{readonly_data_section}.",
+ section *, (machine_mode mode, rtx x, unsigned HOST_WIDE_INT align),
+ default_select_rtx_section)
+
+/* Select a unique section name for DECL.  RELOC is the same as
+   for SELECT_SECTION.  */
+DEFHOOK
+(unique_section,
+ "Build up a unique section name, expressed as a @code{STRING_CST} node,\n\
+and assign it to @samp{DECL_SECTION_NAME (@var{decl})}.\n\
+As with @code{TARGET_ASM_SELECT_SECTION}, @var{reloc} indicates whether\n\
+the initial value of @var{exp} requires link-time relocations.\n\
+\n\
+The default version of this function appends the symbol name to the\n\
+ELF section name that would normally be used for the symbol.  For\n\
+example, the function @code{foo} would be placed in @code{.text.foo}.\n\
+Whatever the actual target object format, this is often good enough.",
+ void, (tree decl, int reloc),
+ default_unique_section)
+
+/* Return the readonly data section associated with function DECL.  */
+DEFHOOK
+(function_rodata_section,
+ "Return the readonly data section associated with\n\
+@samp{DECL_SECTION_NAME (@var{decl})}.\n\
+The default version of this function selects @code{.gnu.linkonce.r.name} if\n\
+the function's section is @code{.gnu.linkonce.t.name}, @code{.rodata.name}\n\
+if function is in @code{.text.name}, and the normal readonly-data section\n\
+otherwise.",
+ section *, (tree decl),
+ default_function_rodata_section)
+
+/* Nonnull if the target wants to override the default ".rodata" prefix
+   for mergeable data sections.  */
+DEFHOOKPOD
+(mergeable_rodata_prefix,
+ "Usually, the compiler uses the prefix @code{\".rodata\"} to construct\n\
+section names for mergeable constant data.  Define this macro to override\n\
+the string if a different section name should be used.",
+ const char *, ".rodata")
+
+/* Return the section to be used for transactional memory clone tables.  */
+DEFHOOK
+(tm_clone_table_section,
+ "Return the section that should be used for transactional memory clone\
+  tables.",
+ section *, (void), default_clone_table_section)
+
+/* Output a constructor for a symbol with a given priority.  */
+DEFHOOK
+(constructor,
+ "If defined, a function that outputs assembler code to arrange to call\n\
+the function referenced by @var{symbol} at initialization time.\n\
+\n\
+Assume that @var{symbol} is a @code{SYMBOL_REF} for a function taking\n\
+no arguments and with no return value.  If the target supports initialization\n\
+priorities, @var{priority} is a value between 0 and @code{MAX_INIT_PRIORITY};\n\
+otherwise it must be @code{DEFAULT_INIT_PRIORITY}.\n\
+\n\
+If this macro is not defined by the target, a suitable default will\n\
+be chosen if (1) the target supports arbitrary section names, (2) the\n\
+target defines @code{CTORS_SECTION_ASM_OP}, or (3) @code{USE_COLLECT2}\n\
+is not defined.",
+ void, (rtx symbol, int priority), NULL)
+
+/* Output a destructor for a symbol with a given priority.  */
+DEFHOOK
+(destructor,
+ "This is like @code{TARGET_ASM_CONSTRUCTOR} but used for termination\n\
+functions rather than initialization functions.",
+ void, (rtx symbol, int priority), NULL)
+
+/* Output the assembler code for a thunk function.  THUNK_DECL is the
+   declaration for the thunk function itself, FUNCTION is the decl for
+   the target function.  DELTA is an immediate constant offset to be
+   added to THIS.  If VCALL_OFFSET is nonzero, the word at
+   *(*this + vcall_offset) should be added to THIS.  */
+DEFHOOK
+(output_mi_thunk,
+ "A function that outputs the assembler code for a thunk\n\
+function, used to implement C++ virtual function calls with multiple\n\
+inheritance.  The thunk acts as a wrapper around a virtual function,\n\
+adjusting the implicit object parameter before handing control off to\n\
+the real function.\n\
+\n\
+First, emit code to add the integer @var{delta} to the location that\n\
+contains the incoming first argument.  Assume that this argument\n\
+contains a pointer, and is the one used to pass the @code{this} pointer\n\
+in C++.  This is the incoming argument @emph{before} the function prologue,\n\
+e.g.@: @samp{%o0} on a sparc.  The addition must preserve the values of\n\
+all other incoming arguments.\n\
+\n\
+Then, if @var{vcall_offset} is nonzero, an additional adjustment should be\n\
+made after adding @code{delta}.  In particular, if @var{p} is the\n\
+adjusted pointer, the following adjustment should be made:\n\
+\n\
+@smallexample\n\
+p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)]\n\
+@end smallexample\n\
+\n\
+After the additions, emit code to jump to @var{function}, which is a\n\
+@code{FUNCTION_DECL}.  This is a direct pure jump, not a call, and does\n\
+not touch the return address.  Hence returning from @var{FUNCTION} will\n\
+return to whoever called the current @samp{thunk}.\n\
+\n\
+The effect must be as if @var{function} had been called directly with\n\
+the adjusted first argument.  This macro is responsible for emitting all\n\
+of the code for a thunk function; @code{TARGET_ASM_FUNCTION_PROLOGUE}\n\
+and @code{TARGET_ASM_FUNCTION_EPILOGUE} are not invoked.\n\
+\n\
+The @var{thunk_fndecl} is redundant.  (@var{delta} and @var{function}\n\
+have already been extracted from it.)  It might possibly be useful on\n\
+some targets, but probably not.\n\
+\n\
+If you do not define this macro, the target-independent code in the C++\n\
+front end will generate a less efficient heavyweight thunk that calls\n\
+@var{function} instead of jumping to it.  The generic approach does\n\
+not support varargs.",
+ void, (FILE *file, tree thunk_fndecl, HOST_WIDE_INT delta,
+	HOST_WIDE_INT vcall_offset, tree function),
+ NULL)
+
+/* Determine whether output_mi_thunk would succeed.  */
+/* ??? Ideally, this hook would not exist, and success or failure
+   would be returned from output_mi_thunk directly.  But there's
+   too much undo-able setup involved in invoking output_mi_thunk.
+   Could be fixed by making output_mi_thunk emit rtl instead of
+   text to the output file.  */
+DEFHOOK
+(can_output_mi_thunk,
+ "A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would be able\n\
+to output the assembler code for the thunk function specified by the\n\
+arguments it is passed, and false otherwise.  In the latter case, the\n\
+generic approach will be used by the C++ front end, with the limitations\n\
+previously exposed.",
+ bool, (const_tree thunk_fndecl, HOST_WIDE_INT delta,
+	HOST_WIDE_INT vcall_offset, const_tree function),
+ hook_bool_const_tree_hwi_hwi_const_tree_false)
+
+/* Output any boilerplate text needed at the beginning of a
+   translation unit.  */
+DEFHOOK
+(file_start,
+ "Output to @code{asm_out_file} any text which the assembler expects to\n\
+find at the beginning of a file.  The default behavior is controlled\n\
+by two flags, documented below.  Unless your target's assembler is\n\
+quite unusual, if you override the default, you should call\n\
+@code{default_file_start} at some point in your target hook.  This\n\
+lets other target files rely on these variables.",
+ void, (void),
+ default_file_start)
+
+/* Output any boilerplate text needed at the end of a translation unit.  */
+DEFHOOK
+(file_end,
+ "Output to @code{asm_out_file} any text which the assembler expects\n\
+to find at the end of a file.  The default is to output nothing.",
+ void, (void),
+ hook_void_void)
+
+/* Output any boilerplate text needed at the beginning of an
+   LTO output stream.  */
+DEFHOOK
+(lto_start,
+ "Output to @code{asm_out_file} any text which the assembler expects\n\
+to find at the start of an LTO section.  The default is to output\n\
+nothing.",
+ void, (void),
+ hook_void_void)
+
+/* Output any boilerplate text needed at the end of an
+   LTO output stream.  */
+DEFHOOK
+(lto_end,
+ "Output to @code{asm_out_file} any text which the assembler expects\n\
+to find at the end of an LTO section.  The default is to output\n\
+nothing.",
+ void, (void),
+ hook_void_void)
+
+/* Output any boilerplace text needed at the end of a
+   translation unit before debug and unwind info is emitted.  */
+DEFHOOK
+(code_end,
+ "Output to @code{asm_out_file} any text which is needed before emitting\n\
+unwind info and debug info at the end of a file.  Some targets emit\n\
+here PIC setup thunks that cannot be emitted at the end of file,\n\
+because they couldn't have unwind info then.  The default is to output\n\
+nothing.",
+ void, (void),
+ hook_void_void)
+
+/* Output an assembler pseudo-op to declare a library function name
+   external.  */
+DEFHOOK
+(external_libcall,
+ "This target hook is a function to output to @var{asm_out_file} an assembler\n\
+pseudo-op to declare a library function name external.  The name of the\n\
+library function is given by @var{symref}, which is a @code{symbol_ref}.",
+ void, (rtx symref),
+ default_external_libcall)
+
+/* Output an assembler directive to mark decl live. This instructs
+   linker to not dead code strip this symbol.  */
+DEFHOOK
+(mark_decl_preserved,
+ "This target hook is a function to output to @var{asm_out_file} an assembler\n\
+directive to annotate @var{symbol} as used.  The Darwin target uses the\n\
+.no_dead_code_strip directive.",
+ void, (const char *symbol),
+ hook_void_constcharptr)
+
+/* Output a record of the command line switches that have been passed.  */
+DEFHOOK
+(record_gcc_switches,
+ "Provides the target with the ability to record the gcc command line\n\
+switches that have been passed to the compiler, and options that are\n\
+enabled.  The @var{type} argument specifies what is being recorded.\n\
+It can take the following values:\n\
+\n\
+@table @gcctabopt\n\
+@item SWITCH_TYPE_PASSED\n\
+@var{text} is a command line switch that has been set by the user.\n\
+\n\
+@item SWITCH_TYPE_ENABLED\n\
+@var{text} is an option which has been enabled.  This might be as a\n\
+direct result of a command line switch, or because it is enabled by\n\
+default or because it has been enabled as a side effect of a different\n\
+command line switch.  For example, the @option{-O2} switch enables\n\
+various different individual optimization passes.\n\
+\n\
+@item SWITCH_TYPE_DESCRIPTIVE\n\
+@var{text} is either NULL or some descriptive text which should be\n\
+ignored.  If @var{text} is NULL then it is being used to warn the\n\
+target hook that either recording is starting or ending.  The first\n\
+time @var{type} is SWITCH_TYPE_DESCRIPTIVE and @var{text} is NULL, the\n\
+warning is for start up and the second time the warning is for\n\
+wind down.  This feature is to allow the target hook to make any\n\
+necessary preparations before it starts to record switches and to\n\
+perform any necessary tidying up after it has finished recording\n\
+switches.\n\
+\n\
+@item SWITCH_TYPE_LINE_START\n\
+This option can be ignored by this target hook.\n\
+\n\
+@item  SWITCH_TYPE_LINE_END\n\
+This option can be ignored by this target hook.\n\
+@end table\n\
+\n\
+The hook's return value must be zero.  Other return values may be\n\
+supported in the future.\n\
+\n\
+By default this hook is set to NULL, but an example implementation is\n\
+provided for ELF based targets.  Called @var{elf_record_gcc_switches},\n\
+it records the switches as ASCII text inside a new, string mergeable\n\
+section in the assembler output file.  The name of the new section is\n\
+provided by the @code{TARGET_ASM_RECORD_GCC_SWITCHES_SECTION} target\n\
+hook.",
+ int, (print_switch_type type, const char *text),
+ NULL)
+
+/* The name of the section that the example ELF implementation of
+   record_gcc_switches will use to store the information.  Target
+   specific versions of record_gcc_switches may or may not use
+   this information.  */
+DEFHOOKPOD
+(record_gcc_switches_section,
+ "This is the name of the section that will be created by the example\n\
+ELF implementation of the @code{TARGET_ASM_RECORD_GCC_SWITCHES} target\n\
+hook.",
+ const char *, ".GCC.command.line")
+
+/* Output the definition of a section anchor.  */
+DEFHOOK
+(output_anchor,
+ "Write the assembly code to define section anchor @var{x}, which is a\n\
+@code{SYMBOL_REF} for which @samp{SYMBOL_REF_ANCHOR_P (@var{x})} is true.\n\
+The hook is called with the assembly output position set to the beginning\n\
+of @code{SYMBOL_REF_BLOCK (@var{x})}.\n\
+\n\
+If @code{ASM_OUTPUT_DEF} is available, the hook's default definition uses\n\
+it to define the symbol as @samp{. + SYMBOL_REF_BLOCK_OFFSET (@var{x})}.\n\
+If @code{ASM_OUTPUT_DEF} is not available, the hook's default definition\n\
+is @code{NULL}, which disables the use of section anchors altogether.",
+ void, (rtx x),
+ default_asm_output_anchor)
+
+DEFHOOK
+(output_ident,
+ "Output a string based on @var{name}, suitable for the @samp{#ident} \
+ directive, or the equivalent directive or pragma in non-C-family languages. \
+ If this hook is not defined, nothing is output for the @samp{#ident} \
+ directive.",
+ void, (const char *name),
+ hook_void_constcharptr)
+
+/* Output a DTP-relative reference to a TLS symbol.  */
+DEFHOOK
+(output_dwarf_dtprel,
+ "If defined, this target hook is a function which outputs a DTP-relative\n\
+reference to the given TLS symbol of the specified size.",
+ void, (FILE *file, int size, rtx x),
+ NULL)
+
+/* Some target machines need to postscan each insn after it is output.  */
+DEFHOOK
+(final_postscan_insn,
+ "If defined, this target hook is a function which is executed just after the\n\
+output of assembler code for @var{insn}, to change the mode of the assembler\n\
+if necessary.\n\
+\n\
+Here the argument @var{opvec} is the vector containing the operands\n\
+extracted from @var{insn}, and @var{noperands} is the number of\n\
+elements of the vector which contain meaningful data for this insn.\n\
+The contents of this vector are what was used to convert the insn\n\
+template into assembler code, so you can change the assembler mode\n\
+by checking the contents of the vector.",
+ void, (FILE *file, rtx_insn *insn, rtx *opvec, int noperands),
+ NULL)
+
+/* Emit the trampoline template.  This hook may be NULL.  */
+DEFHOOK
+(trampoline_template,
+ "This hook is called by @code{assemble_trampoline_template} to output,\n\
+on the stream @var{f}, assembler code for a block of data that contains\n\
+the constant parts of a trampoline.  This code should not include a\n\
+label---the label is taken care of automatically.\n\
+\n\
+If you do not define this hook, it means no template is needed\n\
+for the target.  Do not define this hook on systems where the block move\n\
+code to copy the trampoline into place would be larger than the code\n\
+to generate it on the spot.",
+ void, (FILE *f),
+ NULL)
+
+DEFHOOK
+(output_source_filename,
+ "Output DWARF debugging information which indicates that filename\
+ @var{name} is the current source file to the stdio stream @var{file}.\n\
+ \n\
+ This target hook need not be defined if the standard form of output\
+ for the file format in use is appropriate.",
+ void ,(FILE *file, const char *name),
+ default_asm_output_source_filename)
+
+DEFHOOK
+(output_addr_const_extra,
+ "A target hook to recognize @var{rtx} patterns that @code{output_addr_const}\n\
+can't deal with, and output assembly code to @var{file} corresponding to\n\
+the pattern @var{x}.  This may be used to allow machine-dependent\n\
+@code{UNSPEC}s to appear within constants.\n\
+\n\
+If target hook fails to recognize a pattern, it must return @code{false},\n\
+so that a standard error message is printed.  If it prints an error message\n\
+itself, by calling, for example, @code{output_operand_lossage}, it may just\n\
+return @code{true}.",
+ bool, (FILE *file, rtx x),
+ hook_bool_FILEptr_rtx_false)
+
+/* ??? The TARGET_PRINT_OPERAND* hooks are part of the asm_out struct,
+   even though that is not reflected in the macro name to override their
+   initializers.  */
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_"
+
+/* Emit a machine-specific insn operand.  */
+/* ??? tm.texi only documents the old macro PRINT_OPERAND,
+   not this  hook, and uses a different name for the argument FILE.  */
+DEFHOOK_UNDOC
+(print_operand,
+ "",
+ void, (FILE *file, rtx x, int code),
+ default_print_operand)
+
+/* Emit a machine-specific memory address.  */
+/* ??? tm.texi only documents the old macro PRINT_OPERAND_ADDRESS,
+   not this  hook, and uses different argument names.  */
+DEFHOOK_UNDOC
+(print_operand_address,
+ "",
+ void, (FILE *file, machine_mode mode, rtx addr),
+ default_print_operand_address)
+
+/* Determine whether CODE is a valid punctuation character for the
+   `print_operand' hook.  */
+/* ??? tm.texi only documents the old macro PRINT_OPERAND_PUNCT_VALID_P,
+   not this  hook.  */
+DEFHOOK_UNDOC
+(print_operand_punct_valid_p,
+ "",
+ bool ,(unsigned char code),
+ default_print_operand_punct_valid_p)
+
+/* Given a symbol name, perform same mangling as assemble_name and
+   ASM_OUTPUT_LABELREF, returning result as an IDENTIFIER_NODE.  */
+DEFHOOK
+(mangle_assembler_name,
+ "Given a symbol @var{name}, perform same mangling as @code{varasm.c}'s\
+ @code{assemble_name}, but in memory rather than to a file stream, returning\
+ result as an @code{IDENTIFIER_NODE}.  Required for correct LTO symtabs.  The\
+ default implementation calls the @code{TARGET_STRIP_NAME_ENCODING} hook and\
+ then prepends the @code{USER_LABEL_PREFIX}, if any.",
+ tree, (const char *name),
+ default_mangle_assembler_name)
+
+HOOK_VECTOR_END (asm_out)
+
+/* Functions relating to instruction scheduling.  All of these
+   default to null pointers, which haifa-sched.c looks for and handles.  */
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_SCHED_"
+HOOK_VECTOR (TARGET_SCHED, sched)
+
+/* Given the current cost, COST, of an insn, INSN, calculate and
+   return a new cost based on its relationship to DEP_INSN through
+   the dependence LINK.  The default is to make no adjustment.  */
+DEFHOOK
+(adjust_cost,
+ "This function corrects the value of @var{cost} based on the\n\
+relationship between @var{insn} and @var{dep_insn} through a\n\
+dependence of type dep_type, and strength @var{dw}.  It should return the new\n\
+value.  The default is to make no adjustment to @var{cost}.  This can be\n\
+used for example to specify to the scheduler using the traditional pipeline\n\
+description that an output- or anti-dependence does not incur the same cost\n\
+as a data-dependence.  If the scheduler using the automaton based pipeline\n\
+description, the cost of anti-dependence is zero and the cost of\n\
+output-dependence is maximum of one and the difference of latency\n\
+times of the first and the second insns.  If these values are not\n\
+acceptable, you could use the hook to modify them too.  See also\n\
+@pxref{Processor pipeline description}.",
+ int, (rtx_insn *insn, int dep_type1, rtx_insn *dep_insn, int cost,
+       unsigned int dw),
+ NULL)
+
+/* Adjust the priority of an insn as you see fit.  Returns the new priority.  */
+DEFHOOK
+(adjust_priority,
+ "This hook adjusts the integer scheduling priority @var{priority} of\n\
+@var{insn}.  It should return the new priority.  Increase the priority to\n\
+execute @var{insn} earlier, reduce the priority to execute @var{insn}\n\
+later.  Do not define this hook if you do not need to adjust the\n\
+scheduling priorities of insns.",
+ int, (rtx_insn *insn, int priority), NULL)
+
+/* Function which returns the maximum number of insns that can be
+   scheduled in the same machine cycle.  This must be constant
+   over an entire compilation.  The default is 1.  */
+DEFHOOK
+(issue_rate,
+ "This hook returns the maximum number of instructions that can ever\n\
+issue at the same time on the target machine.  The default is one.\n\
+Although the insn scheduler can define itself the possibility of issue\n\
+an insn on the same cycle, the value can serve as an additional\n\
+constraint to issue insns on the same simulated processor cycle (see\n\
+hooks @samp{TARGET_SCHED_REORDER} and @samp{TARGET_SCHED_REORDER2}).\n\
+This value must be constant over the entire compilation.  If you need\n\
+it to vary depending on what the instructions are, you must use\n\
+@samp{TARGET_SCHED_VARIABLE_ISSUE}.",
+ int, (void), NULL)
+
+/* Calculate how much this insn affects how many more insns we
+   can emit this cycle.  Default is they all cost the same.  */
+DEFHOOK
+(variable_issue,
+ "This hook is executed by the scheduler after it has scheduled an insn\n\
+from the ready list.  It should return the number of insns which can\n\
+still be issued in the current cycle.  The default is\n\
+@samp{@w{@var{more} - 1}} for insns other than @code{CLOBBER} and\n\
+@code{USE}, which normally are not counted against the issue rate.\n\
+You should define this hook if some insns take more machine resources\n\
+than others, so that fewer insns can follow them in the same cycle.\n\
+@var{file} is either a null pointer, or a stdio stream to write any\n\
+debug output to.  @var{verbose} is the verbose level provided by\n\
+@option{-fsched-verbose-@var{n}}.  @var{insn} is the instruction that\n\
+was scheduled.",
+ int, (FILE *file, int verbose, rtx_insn *insn, int more), NULL)
+
+/* Initialize machine-dependent scheduling code.  */
+DEFHOOK
+(init,
+ "This hook is executed by the scheduler at the beginning of each block of\n\
+instructions that are to be scheduled.  @var{file} is either a null\n\
+pointer, or a stdio stream to write any debug output to.  @var{verbose}\n\
+is the verbose level provided by @option{-fsched-verbose-@var{n}}.\n\
+@var{max_ready} is the maximum number of insns in the current scheduling\n\
+region that can be live at the same time.  This can be used to allocate\n\
+scratch space if it is needed, e.g.@: by @samp{TARGET_SCHED_REORDER}.",
+ void, (FILE *file, int verbose, int max_ready), NULL)
+
+/* Finalize machine-dependent scheduling code.  */
+DEFHOOK
+(finish,
+ "This hook is executed by the scheduler at the end of each block of\n\
+instructions that are to be scheduled.  It can be used to perform\n\
+cleanup of any actions done by the other scheduling hooks.  @var{file}\n\
+is either a null pointer, or a stdio stream to write any debug output\n\
+to.  @var{verbose} is the verbose level provided by\n\
+@option{-fsched-verbose-@var{n}}.",
+ void, (FILE *file, int verbose), NULL)
+
+ /* Initialize machine-dependent function wide scheduling code.  */
+DEFHOOK
+(init_global,
+ "This hook is executed by the scheduler after function level initializations.\n\
+@var{file} is either a null pointer, or a stdio stream to write any debug output to.\n\
+@var{verbose} is the verbose level provided by @option{-fsched-verbose-@var{n}}.\n\
+@var{old_max_uid} is the maximum insn uid when scheduling begins.",
+ void, (FILE *file, int verbose, int old_max_uid), NULL)
+
+/* Finalize machine-dependent function wide scheduling code.  */
+DEFHOOK
+(finish_global,
+ "This is the cleanup hook corresponding to @code{TARGET_SCHED_INIT_GLOBAL}.\n\
+@var{file} is either a null pointer, or a stdio stream to write any debug output to.\n\
+@var{verbose} is the verbose level provided by @option{-fsched-verbose-@var{n}}.",
+ void, (FILE *file, int verbose), NULL)
+
+/* Reorder insns in a machine-dependent fashion, in two different
+       places.  Default does nothing.  */
+DEFHOOK
+(reorder,
+ "This hook is executed by the scheduler after it has scheduled the ready\n\
+list, to allow the machine description to reorder it (for example to\n\
+combine two small instructions together on @samp{VLIW} machines).\n\
+@var{file} is either a null pointer, or a stdio stream to write any\n\
+debug output to.  @var{verbose} is the verbose level provided by\n\
+@option{-fsched-verbose-@var{n}}.  @var{ready} is a pointer to the ready\n\
+list of instructions that are ready to be scheduled.  @var{n_readyp} is\n\
+a pointer to the number of elements in the ready list.  The scheduler\n\
+reads the ready list in reverse order, starting with\n\
+@var{ready}[@var{*n_readyp} @minus{} 1] and going to @var{ready}[0].  @var{clock}\n\
+is the timer tick of the scheduler.  You may modify the ready list and\n\
+the number of ready insns.  The return value is the number of insns that\n\
+can issue this cycle; normally this is just @code{issue_rate}.  See also\n\
+@samp{TARGET_SCHED_REORDER2}.",
+ int, (FILE *file, int verbose, rtx_insn **ready, int *n_readyp, int clock), NULL)
+
+DEFHOOK
+(reorder2,
+ "Like @samp{TARGET_SCHED_REORDER}, but called at a different time.  That\n\
+function is called whenever the scheduler starts a new cycle.  This one\n\
+is called once per iteration over a cycle, immediately after\n\
+@samp{TARGET_SCHED_VARIABLE_ISSUE}; it can reorder the ready list and\n\
+return the number of insns to be scheduled in the same cycle.  Defining\n\
+this hook can be useful if there are frequent situations where\n\
+scheduling one insn causes other insns to become ready in the same\n\
+cycle.  These other insns can then be taken into account properly.",
+ int, (FILE *file, int verbose, rtx_insn **ready, int *n_readyp, int clock), NULL)
+
+DEFHOOK
+(macro_fusion_p,
+ "This hook is used to check whether target platform supports macro fusion.",
+ bool, (void), NULL)
+
+DEFHOOK
+(macro_fusion_pair_p,
+ "This hook is used to check whether two insns should be macro fused for\n\
+a target microarchitecture. If this hook returns true for the given insn pair\n\
+(@var{prev} and @var{curr}), the scheduler will put them into a sched\n\
+group, and they will not be scheduled apart.  The two insns will be either\n\
+two SET insns or a compare and a conditional jump and this hook should\n\
+validate any dependencies needed to fuse the two insns together.",
+ bool, (rtx_insn *prev, rtx_insn *curr), NULL)
+
+/* The following member value is a pointer to a function called
+   after evaluation forward dependencies of insns in chain given
+   by two parameter values (head and tail correspondingly).  */
+DEFHOOK
+(dependencies_evaluation_hook,
+ "This hook is called after evaluation forward dependencies of insns in\n\
+chain given by two parameter values (@var{head} and @var{tail}\n\
+correspondingly) but before insns scheduling of the insn chain.  For\n\
+example, it can be used for better insn classification if it requires\n\
+analysis of dependencies.  This hook can use backward and forward\n\
+dependencies of the insn scheduler because they are already\n\
+calculated.",
+ void, (rtx_insn *head, rtx_insn *tail), NULL)
+
+/* The values of the following four members are pointers to functions
+   used to simplify the automaton descriptions.  dfa_pre_cycle_insn and
+   dfa_post_cycle_insn give functions returning insns which are used to
+   change the pipeline hazard recognizer state when the new simulated
+   processor cycle correspondingly starts and finishes.  The function
+   defined by init_dfa_pre_cycle_insn and init_dfa_post_cycle_insn are
+   used to initialize the corresponding insns.  The default values of
+   the members result in not changing the automaton state when the
+   new simulated processor cycle correspondingly starts and finishes.  */
+
+DEFHOOK
+(init_dfa_pre_cycle_insn,
+ "The hook can be used to initialize data used by the previous hook.",
+ void, (void), NULL)
+
+DEFHOOK
+(dfa_pre_cycle_insn,
+ "The hook returns an RTL insn.  The automaton state used in the\n\
+pipeline hazard recognizer is changed as if the insn were scheduled\n\
+when the new simulated processor cycle starts.  Usage of the hook may\n\
+simplify the automaton pipeline description for some @acronym{VLIW}\n\
+processors.  If the hook is defined, it is used only for the automaton\n\
+based pipeline description.  The default is not to change the state\n\
+when the new simulated processor cycle starts.",
+ rtx, (void), NULL)
+
+DEFHOOK
+(init_dfa_post_cycle_insn,
+ "The hook is analogous to @samp{TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN} but\n\
+used to initialize data used by the previous hook.",
+ void, (void), NULL)
+
+DEFHOOK
+(dfa_post_cycle_insn,
+ "The hook is analogous to @samp{TARGET_SCHED_DFA_PRE_CYCLE_INSN} but used\n\
+to changed the state as if the insn were scheduled when the new\n\
+simulated processor cycle finishes.",
+ rtx_insn *, (void), NULL)
+
+/* The values of the following two members are pointers to
+   functions used to simplify the automaton descriptions.
+   dfa_pre_advance_cycle and dfa_post_advance_cycle are getting called
+   immediately before and after cycle is advanced.  */
+
+DEFHOOK
+(dfa_pre_advance_cycle,
+ "The hook to notify target that the current simulated cycle is about to finish.\n\
+The hook is analogous to @samp{TARGET_SCHED_DFA_PRE_CYCLE_INSN} but used\n\
+to change the state in more complicated situations - e.g., when advancing\n\
+state on a single insn is not enough.",
+ void, (void), NULL)
+
+DEFHOOK
+(dfa_post_advance_cycle,
+ "The hook to notify target that new simulated cycle has just started.\n\
+The hook is analogous to @samp{TARGET_SCHED_DFA_POST_CYCLE_INSN} but used\n\
+to change the state in more complicated situations - e.g., when advancing\n\
+state on a single insn is not enough.",
+ void, (void), NULL)
+
+/* The following member value is a pointer to a function returning value
+   which defines how many insns in queue `ready' will we try for
+   multi-pass scheduling.  If the member value is nonzero and the
+   function returns positive value, the DFA based scheduler will make
+   multi-pass scheduling for the first cycle.  In other words, we will
+   try to choose ready insn which permits to start maximum number of
+   insns on the same cycle.  */
+DEFHOOK
+(first_cycle_multipass_dfa_lookahead,
+ "This hook controls better choosing an insn from the ready insn queue\n\
+for the @acronym{DFA}-based insn scheduler.  Usually the scheduler\n\
+chooses the first insn from the queue.  If the hook returns a positive\n\
+value, an additional scheduler code tries all permutations of\n\
+@samp{TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD ()}\n\
+subsequent ready insns to choose an insn whose issue will result in\n\
+maximal number of issued insns on the same cycle.  For the\n\
+@acronym{VLIW} processor, the code could actually solve the problem of\n\
+packing simple insns into the @acronym{VLIW} insn.  Of course, if the\n\
+rules of @acronym{VLIW} packing are described in the automaton.\n\
+\n\
+This code also could be used for superscalar @acronym{RISC}\n\
+processors.  Let us consider a superscalar @acronym{RISC} processor\n\
+with 3 pipelines.  Some insns can be executed in pipelines @var{A} or\n\
+@var{B}, some insns can be executed only in pipelines @var{B} or\n\
+@var{C}, and one insn can be executed in pipeline @var{B}.  The\n\
+processor may issue the 1st insn into @var{A} and the 2nd one into\n\
+@var{B}.  In this case, the 3rd insn will wait for freeing @var{B}\n\
+until the next cycle.  If the scheduler issues the 3rd insn the first,\n\
+the processor could issue all 3 insns per cycle.\n\
+\n\
+Actually this code demonstrates advantages of the automaton based\n\
+pipeline hazard recognizer.  We try quickly and easy many insn\n\
+schedules to choose the best one.\n\
+\n\
+The default is no multipass scheduling.",
+ int, (void), NULL)
+
+/* The following member value is pointer to a function controlling
+   what insns from the ready insn queue will be considered for the
+   multipass insn scheduling.  If the hook returns zero for insn
+   passed as the parameter, the insn will be not chosen to be issued.  */
+DEFHOOK
+(first_cycle_multipass_dfa_lookahead_guard,
+ "\n\
+This hook controls what insns from the ready insn queue will be\n\
+considered for the multipass insn scheduling.  If the hook returns\n\
+zero for @var{insn}, the insn will be considered in multipass scheduling.\n\
+Positive return values will remove @var{insn} from consideration on\n\
+the current round of multipass scheduling.\n\
+Negative return values will remove @var{insn} from consideration for given\n\
+number of cycles.\n\
+Backends should be careful about returning non-zero for highest priority\n\
+instruction at position 0 in the ready list.  @var{ready_index} is passed\n\
+to allow backends make correct judgements.\n\
+\n\
+The default is that any ready insns can be chosen to be issued.",
+ int, (rtx_insn *insn, int ready_index), NULL)
+
+/* This hook prepares the target for a new round of multipass
+   scheduling.
+   DATA is a pointer to target-specific data used for multipass scheduling.
+   READY_TRY and N_READY represent the current state of search in the
+   optimization space.  The target can filter out instructions that
+   should not be tried during current round by setting corresponding
+   elements in READY_TRY to non-zero.
+   FIRST_CYCLE_INSN_P is true if this is the first round of multipass
+   scheduling on current cycle.  */
+DEFHOOK
+(first_cycle_multipass_begin,
+ "This hook prepares the target backend for a new round of multipass\n\
+scheduling.",
+ void, (void *data, signed char *ready_try, int n_ready, bool first_cycle_insn_p),
+ NULL)
+
+/* This hook is called when multipass scheduling evaluates instruction INSN.
+   DATA is a pointer to target-specific data that can be used to record effects
+   of INSN on CPU that are not described in DFA.
+   READY_TRY and N_READY represent the current state of search in the
+   optimization space.  The target can filter out instructions that
+   should not be tried after issuing INSN by setting corresponding
+   elements in READY_TRY to non-zero.
+   INSN is the instruction being evaluated.
+   PREV_DATA is a pointer to target-specific data corresponding
+   to a state before issuing INSN.  */
+DEFHOOK
+(first_cycle_multipass_issue,
+ "This hook is called when multipass scheduling evaluates instruction INSN.",
+ void, (void *data, signed char *ready_try, int n_ready, rtx_insn *insn,
+	const void *prev_data), NULL)
+
+/* This hook is called when multipass scheduling backtracks from evaluation of
+   instruction corresponding to DATA.
+   DATA is a pointer to target-specific data that stores the effects
+   of instruction from which the algorithm backtracks on CPU that are not
+   described in DFA.
+   READY_TRY and N_READY represent the current state of search in the
+   optimization space.  The target can filter out instructions that
+   should not be tried after issuing INSN by setting corresponding
+   elements in READY_TRY to non-zero.  */
+DEFHOOK
+(first_cycle_multipass_backtrack,
+ "This is called when multipass scheduling backtracks from evaluation of\n\
+an instruction.",
+ void, (const void *data, signed char *ready_try, int n_ready), NULL)
+
+/* This hook notifies the target about the result of the concluded current
+   round of multipass scheduling.
+   DATA is a pointer.
+   If DATA is non-NULL it points to target-specific data used for multipass
+   scheduling which corresponds to instruction at the start of the chain of
+   the winning solution.  DATA is NULL when multipass scheduling cannot find
+   a good enough solution on current cycle and decides to retry later,
+   usually after advancing the cycle count.  */
+DEFHOOK
+(first_cycle_multipass_end,
+ "This hook notifies the target about the result of the concluded current\n\
+round of multipass scheduling.",
+ void, (const void *data), NULL)
+
+/* This hook is called to initialize target-specific data for multipass
+   scheduling after it has been allocated.
+   DATA is a pointer to target-specific data that stores the effects
+   of instruction from which the algorithm backtracks on CPU that are not
+   described in DFA.  */
+DEFHOOK
+(first_cycle_multipass_init,
+ "This hook initializes target-specific data used in multipass scheduling.",
+ void, (void *data), NULL)
+
+/* This hook is called to finalize target-specific data for multipass
+   scheduling before it is deallocated.
+   DATA is a pointer to target-specific data that stores the effects
+   of instruction from which the algorithm backtracks on CPU that are not
+   described in DFA.  */
+DEFHOOK
+(first_cycle_multipass_fini,
+ "This hook finalizes target-specific data used in multipass scheduling.",
+ void, (void *data), NULL)
+
+/* The following member value is pointer to a function called by
+   the insn scheduler before issuing insn passed as the third
+   parameter on given cycle.  If the hook returns nonzero, the
+   insn is not issued on given processors cycle.  Instead of that,
+   the processor cycle is advanced.  If the value passed through
+   the last parameter is zero, the insn ready queue is not sorted
+   on the new cycle start as usually.  The first parameter passes
+   file for debugging output.  The second one passes the scheduler
+   verbose level of the debugging output.  The forth and the fifth
+   parameter values are correspondingly processor cycle on which
+   the previous insn has been issued and the current processor cycle.  */
+DEFHOOK
+(dfa_new_cycle,
+ "This hook is called by the insn scheduler before issuing @var{insn}\n\
+on cycle @var{clock}.  If the hook returns nonzero,\n\
+@var{insn} is not issued on this processor cycle.  Instead,\n\
+the processor cycle is advanced.  If *@var{sort_p}\n\
+is zero, the insn ready queue is not sorted on the new cycle\n\
+start as usually.  @var{dump} and @var{verbose} specify the file and\n\
+verbosity level to use for debugging output.\n\
+@var{last_clock} and @var{clock} are, respectively, the\n\
+processor cycle on which the previous insn has been issued,\n\
+and the current processor cycle.",
+ int, (FILE *dump, int verbose, rtx_insn *insn, int last_clock,
+       int clock, int *sort_p),
+ NULL)
+
+/* The following member value is a pointer to a function called by the
+   insn scheduler.  It should return true if there exists a dependence
+   which is considered costly by the target, between the insn
+   DEP_PRO (&_DEP), and the insn DEP_CON (&_DEP).  The first parameter is
+   the dep that represents the dependence between the two insns.  The
+   second argument is the cost of the dependence as estimated by
+   the scheduler.  The last argument is the distance in cycles
+   between the already scheduled insn (first parameter) and the
+   second insn (second parameter).  */
+DEFHOOK
+(is_costly_dependence,
+ "This hook is used to define which dependences are considered costly by\n\
+the target, so costly that it is not advisable to schedule the insns that\n\
+are involved in the dependence too close to one another.  The parameters\n\
+to this hook are as follows:  The first parameter @var{_dep} is the dependence\n\
+being evaluated.  The second parameter @var{cost} is the cost of the\n\
+dependence as estimated by the scheduler, and the third\n\
+parameter @var{distance} is the distance in cycles between the two insns.\n\
+The hook returns @code{true} if considering the distance between the two\n\
+insns the dependence between them is considered costly by the target,\n\
+and @code{false} otherwise.\n\
+\n\
+Defining this hook can be useful in multiple-issue out-of-order machines,\n\
+where (a) it's practically hopeless to predict the actual data/resource\n\
+delays, however: (b) there's a better chance to predict the actual grouping\n\
+that will be formed, and (c) correctly emulating the grouping can be very\n\
+important.  In such targets one may want to allow issuing dependent insns\n\
+closer to one another---i.e., closer than the dependence distance;  however,\n\
+not in cases of ``costly dependences'', which this hooks allows to define.",
+ bool, (struct _dep *_dep, int cost, int distance), NULL)
+
+/* The following member value is a pointer to a function called
+   by the insn scheduler. This hook is called to notify the backend
+   that new instructions were emitted.  */
+DEFHOOK
+(h_i_d_extended,
+ "This hook is called by the insn scheduler after emitting a new instruction to\n\
+the instruction stream.  The hook notifies a target backend to extend its\n\
+per instruction data structures.",
+ void, (void), NULL)
+
+/* Next 5 functions are for multi-point scheduling.  */
+
+/* Allocate memory for scheduler context.  */
+DEFHOOK
+(alloc_sched_context,
+ "Return a pointer to a store large enough to hold target scheduling context.",
+ void *, (void), NULL)
+
+/* Fills the context from the local machine scheduler context.  */
+DEFHOOK
+(init_sched_context,
+ "Initialize store pointed to by @var{tc} to hold target scheduling context.\n\
+It @var{clean_p} is true then initialize @var{tc} as if scheduler is at the\n\
+beginning of the block.  Otherwise, copy the current context into @var{tc}.",
+ void, (void *tc, bool clean_p), NULL)
+
+/* Sets local machine scheduler context to a saved value.  */
+DEFHOOK
+(set_sched_context,
+ "Copy target scheduling context pointed to by @var{tc} to the current context.",
+ void, (void *tc), NULL)
+
+/* Clears a scheduler context so it becomes like after init.  */
+DEFHOOK
+(clear_sched_context,
+ "Deallocate internal data in target scheduling context pointed to by @var{tc}.",
+ void, (void *tc), NULL)
+
+/* Frees the scheduler context.  */
+DEFHOOK
+(free_sched_context,
+ "Deallocate a store for target scheduling context pointed to by @var{tc}.",
+ void, (void *tc), NULL)
+
+/* The following member value is a pointer to a function called
+   by the insn scheduler.
+   The first parameter is an instruction, the second parameter is the type
+   of the requested speculation, and the third parameter is a pointer to the
+   speculative pattern of the corresponding type (set if return value == 1).
+   It should return
+   -1, if there is no pattern, that will satisfy the requested speculation type,
+   0, if current pattern satisfies the requested speculation type,
+   1, if pattern of the instruction should be changed to the newly
+   generated one.  */
+DEFHOOK
+(speculate_insn,
+ "This hook is called by the insn scheduler when @var{insn} has only\n\
+speculative dependencies and therefore can be scheduled speculatively.\n\
+The hook is used to check if the pattern of @var{insn} has a speculative\n\
+version and, in case of successful check, to generate that speculative\n\
+pattern.  The hook should return 1, if the instruction has a speculative form,\n\
+or @minus{}1, if it doesn't.  @var{request} describes the type of requested\n\
+speculation.  If the return value equals 1 then @var{new_pat} is assigned\n\
+the generated speculative pattern.",
+ int, (rtx_insn *insn, unsigned int dep_status, rtx *new_pat), NULL)
+
+/* The following member value is a pointer to a function called
+   by the insn scheduler.  It should return true if the check instruction
+   passed as the parameter needs a recovery block.  */
+DEFHOOK
+(needs_block_p,
+ "This hook is called by the insn scheduler during generation of recovery code\n\
+for @var{insn}.  It should return @code{true}, if the corresponding check\n\
+instruction should branch to recovery code, or @code{false} otherwise.",
+ bool, (unsigned int dep_status), NULL)
+
+/* The following member value is a pointer to a function called
+   by the insn scheduler.  It should return a pattern for the check
+   instruction.
+   The first parameter is a speculative instruction, the second parameter
+   is the label of the corresponding recovery block (or null, if it is a
+   simple check).  The third parameter is the kind of speculation that
+   is being performed.  */
+DEFHOOK
+(gen_spec_check,
+ "This hook is called by the insn scheduler to generate a pattern for recovery\n\
+check instruction.  If @var{mutate_p} is zero, then @var{insn} is a\n\
+speculative instruction for which the check should be generated.\n\
+@var{label} is either a label of a basic block, where recovery code should\n\
+be emitted, or a null pointer, when requested check doesn't branch to\n\
+recovery code (a simple check).  If @var{mutate_p} is nonzero, then\n\
+a pattern for a branchy check corresponding to a simple check denoted by\n\
+@var{insn} should be generated.  In this case @var{label} can't be null.",
+ rtx, (rtx_insn *insn, rtx_insn *label, unsigned int ds), NULL)
+
+/* The following member value is a pointer to a function that provides
+   information about the speculation capabilities of the target.
+   The parameter is a pointer to spec_info variable.  */
+DEFHOOK
+(set_sched_flags,
+ "This hook is used by the insn scheduler to find out what features should be\n\
+enabled/used.\n\
+The structure *@var{spec_info} should be filled in by the target.\n\
+The structure describes speculation types that can be used in the scheduler.",
+ void, (struct spec_info_def *spec_info), NULL)
+
+DEFHOOK_UNDOC
+(get_insn_spec_ds,
+ "Return speculation types of instruction @var{insn}.",
+ unsigned int, (rtx_insn *insn), NULL)
+
+DEFHOOK_UNDOC
+(get_insn_checked_ds,
+ "Return speculation types that are checked for instruction @var{insn}",
+ unsigned int, (rtx_insn *insn), NULL)
+
+DEFHOOK
+(can_speculate_insn,
+ "Some instructions should never be speculated by the schedulers, usually\n\
+ because the instruction is too expensive to get this wrong.  Often such\n\
+ instructions have long latency, and often they are not fully modeled in the\n\
+ pipeline descriptions.  This hook should return @code{false} if @var{insn}\n\
+ should not be speculated.",
+ bool, (rtx_insn *insn), hook_bool_rtx_insn_true)
+
+DEFHOOK_UNDOC
+(skip_rtx_p,
+ "Return bool if rtx scanning should just skip current layer and\
+ advance to the inner rtxes.",
+ bool, (const_rtx x), NULL)
+
+/* The following member value is a pointer to a function that provides
+   information about the target resource-based lower bound which is
+   used by the swing modulo scheduler.  The parameter is a pointer
+   to ddg variable.  */
+DEFHOOK
+(sms_res_mii,
+ "This hook is called by the swing modulo scheduler to calculate a\n\
+resource-based lower bound which is based on the resources available in\n\
+the machine and the resources required by each instruction.  The target\n\
+backend can use @var{g} to calculate such bound.  A very simple lower\n\
+bound will be used in case this hook is not implemented: the total number\n\
+of instructions divided by the issue rate.",
+ int, (struct ddg *g), NULL)
+
+/* The following member value is a function that initializes dispatch
+   schedling and adds instructions to dispatch window according to its
+   parameters.  */
+DEFHOOK
+(dispatch_do,
+"This hook is called by Haifa Scheduler.  It performs the operation specified\n\
+in its second parameter.",
+void, (rtx_insn *insn, int x),
+hook_void_rtx_insn_int)
+
+/* The following member value is a a function that returns true is
+   dispatch schedling is supported in hardware and condition passed
+   as the second parameter is true.  */
+DEFHOOK
+(dispatch,
+"This hook is called by Haifa Scheduler.  It returns true if dispatch scheduling\n\
+is supported in hardware and the condition specified in the parameter is true.",
+bool, (rtx_insn *insn, int x),
+hook_bool_rtx_insn_int_false)
+
+DEFHOOKPOD
+(exposed_pipeline,
+"True if the processor has an exposed pipeline, which means that not just\n\
+the order of instructions is important for correctness when scheduling, but\n\
+also the latencies of operations.",
+bool, false)
+
+/* The following member value is a function that returns number
+   of operations reassociator should try to put in parallel for
+   statements of the given type.  By default 1 is used.  */
+DEFHOOK
+(reassociation_width,
+"This hook is called by tree reassociator to determine a level of\n\
+parallelism required in output calculations chain.",
+int, (unsigned int opc, machine_mode mode),
+hook_int_uint_mode_1)
+
+/* The following member value is a function that returns priority for
+   fusion of each instruction via pointer parameters.  */
+DEFHOOK
+(fusion_priority,
+"This hook is called by scheduling fusion pass.  It calculates fusion\n\
+priorities for each instruction passed in by parameter.  The priorities\n\
+are returned via pointer parameters.\n\
+\n\
+@var{insn} is the instruction whose priorities need to be calculated.\n\
+@var{max_pri} is the maximum priority can be returned in any cases.\n\
+@var{fusion_pri} is the pointer parameter through which @var{insn}'s\n\
+fusion priority should be calculated and returned.\n\
+@var{pri} is the pointer parameter through which @var{insn}'s priority\n\
+should be calculated and returned.\n\
+\n\
+Same @var{fusion_pri} should be returned for instructions which should\n\
+be scheduled together.  Different @var{pri} should be returned for\n\
+instructions with same @var{fusion_pri}.  @var{fusion_pri} is the major\n\
+sort key, @var{pri} is the minor sort key.  All instructions will be\n\
+scheduled according to the two priorities.  All priorities calculated\n\
+should be between 0 (exclusive) and @var{max_pri} (inclusive).  To avoid\n\
+false dependencies, @var{fusion_pri} of instructions which need to be\n\
+scheduled together should be smaller than @var{fusion_pri} of irrelevant\n\
+instructions.\n\
+\n\
+Given below example:\n\
+\n\
+@smallexample\n\
+    ldr r10, [r1, 4]\n\
+    add r4, r4, r10\n\
+    ldr r15, [r2, 8]\n\
+    sub r5, r5, r15\n\
+    ldr r11, [r1, 0]\n\
+    add r4, r4, r11\n\
+    ldr r16, [r2, 12]\n\
+    sub r5, r5, r16\n\
+@end smallexample\n\
+\n\
+On targets like ARM/AArch64, the two pairs of consecutive loads should be\n\
+merged.  Since peephole2 pass can't help in this case unless consecutive\n\
+loads are actually next to each other in instruction flow.  That's where\n\
+this scheduling fusion pass works.  This hook calculates priority for each\n\
+instruction based on its fustion type, like:\n\
+\n\
+@smallexample\n\
+    ldr r10, [r1, 4]  ; fusion_pri=99,  pri=96\n\
+    add r4, r4, r10   ; fusion_pri=100, pri=100\n\
+    ldr r15, [r2, 8]  ; fusion_pri=98,  pri=92\n\
+    sub r5, r5, r15   ; fusion_pri=100, pri=100\n\
+    ldr r11, [r1, 0]  ; fusion_pri=99,  pri=100\n\
+    add r4, r4, r11   ; fusion_pri=100, pri=100\n\
+    ldr r16, [r2, 12] ; fusion_pri=98,  pri=88\n\
+    sub r5, r5, r16   ; fusion_pri=100, pri=100\n\
+@end smallexample\n\
+\n\
+Scheduling fusion pass then sorts all ready to issue instructions according\n\
+to the priorities.  As a result, instructions of same fusion type will be\n\
+pushed together in instruction flow, like:\n\
+\n\
+@smallexample\n\
+    ldr r11, [r1, 0]\n\
+    ldr r10, [r1, 4]\n\
+    ldr r15, [r2, 8]\n\
+    ldr r16, [r2, 12]\n\
+    add r4, r4, r10\n\
+    sub r5, r5, r15\n\
+    add r4, r4, r11\n\
+    sub r5, r5, r16\n\
+@end smallexample\n\
+\n\
+Now peephole2 pass can simply merge the two pairs of loads.\n\
+\n\
+Since scheduling fusion pass relies on peephole2 to do real fusion\n\
+work, it is only enabled by default when peephole2 is in effect.\n\
+\n\
+This is firstly introduced on ARM/AArch64 targets, please refer to\n\
+the hook implementation for how different fusion types are supported.",
+void, (rtx_insn *insn, int max_pri, int *fusion_pri, int *pri), NULL)
+
+HOOK_VECTOR_END (sched)
+
+/* Functions relating to OpenMP SIMD and __attribute__((simd)) clones.  */
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_SIMD_CLONE_"
+HOOK_VECTOR (TARGET_SIMD_CLONE, simd_clone)
+
+DEFHOOK
+(compute_vecsize_and_simdlen,
+"This hook should set @var{vecsize_mangle}, @var{vecsize_int}, @var{vecsize_float}\n\
+fields in @var{simd_clone} structure pointed by @var{clone_info} argument and also\n\
+@var{simdlen} field if it was previously 0.\n\
+The hook should return 0 if SIMD clones shouldn't be emitted,\n\
+or number of @var{vecsize_mangle} variants that should be emitted.",
+int, (struct cgraph_node *, struct cgraph_simd_clone *, tree, int), NULL)
+
+DEFHOOK
+(adjust,
+"This hook should add implicit @code{attribute(target(\"...\"))} attribute\n\
+to SIMD clone @var{node} if needed.",
+void, (struct cgraph_node *), NULL)
+
+DEFHOOK
+(usable,
+"This hook should return -1 if SIMD clone @var{node} shouldn't be used\n\
+in vectorized loops in current function, or non-negative number if it is\n\
+usable.  In that case, the smaller the number is, the more desirable it is\n\
+to use it.",
+int, (struct cgraph_node *), NULL)
+
+HOOK_VECTOR_END (simd_clone)
+
+/* Functions relating to OpenMP SIMT vectorization transform.  */
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_SIMT_"
+HOOK_VECTOR (TARGET_SIMT, simt)
+
+DEFHOOK
+(vf,
+"Return number of threads in SIMT thread group on the target.",
+int, (void), NULL)
+
+HOOK_VECTOR_END (simt)
+
+/* Functions relating to openacc.  */
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_GOACC_"
+HOOK_VECTOR (TARGET_GOACC, goacc)
+
+DEFHOOK
+(validate_dims,
+"This hook should check the launch dimensions provided for an OpenACC\n\
+compute region, or routine.  Defaulted values are represented as -1\n\
+and non-constant values as 0.  The @var{fn_level} is negative for the\n\
+function corresponding to the compute region.  For a routine is is the\n\
+outermost level at which partitioned execution may be spawned.  The hook\n\
+should verify non-default values.  If DECL is NULL, global defaults\n\
+are being validated and unspecified defaults should be filled in.\n\
+Diagnostics should be issued as appropriate.  Return\n\
+true, if changes have been made.  You must override this hook to\n\
+provide dimensions larger than 1.",
+bool, (tree decl, int *dims, int fn_level, unsigned used),
+default_goacc_validate_dims)
+
+DEFHOOK
+(dim_limit,
+"This hook should return the maximum size of a particular dimension,\n\
+or zero if unbounded.",
+int, (int axis),
+default_goacc_dim_limit)
+
+DEFHOOK
+(fork_join,
+"This hook can be used to convert IFN_GOACC_FORK and IFN_GOACC_JOIN\n\
+function calls to target-specific gimple, or indicate whether they\n\
+should be retained.  It is executed during the oacc_device_lower pass.\n\
+It should return true, if the call should be retained.  It should\n\
+return false, if it is to be deleted (either because target-specific\n\
+gimple has been inserted before it, or there is no need for it).\n\
+The default hook returns false, if there are no RTL expanders for them.",
+bool, (gcall *call, const int *dims, bool is_fork),
+default_goacc_fork_join)
+
+DEFHOOK
+(reduction,
+"This hook is used by the oacc_transform pass to expand calls to the\n\
+@var{GOACC_REDUCTION} internal function, into a sequence of gimple\n\
+instructions.  @var{call} is gimple statement containing the call to\n\
+the function.  This hook removes statement @var{call} after the\n\
+expanded sequence has been inserted.  This hook is also responsible\n\
+for allocating any storage for reductions when necessary.",
+void, (gcall *call),
+default_goacc_reduction)
+
+HOOK_VECTOR_END (goacc)
+
+/* Functions relating to vectorization.  */
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_VECTORIZE_"
+HOOK_VECTOR (TARGET_VECTORIZE, vectorize)
+
+/* The following member value is a pointer to a function called
+   by the vectorizer, and return the decl of the target builtin
+   function.  */
+DEFHOOK
+(builtin_mask_for_load,
+ "This hook should return the DECL of a function @var{f} that given an\n\
+address @var{addr} as an argument returns a mask @var{m} that can be\n\
+used to extract from two vectors the relevant data that resides in\n\
+@var{addr} in case @var{addr} is not properly aligned.\n\
+\n\
+The autovectorizer, when vectorizing a load operation from an address\n\
+@var{addr} that may be unaligned, will generate two vector loads from\n\
+the two aligned addresses around @var{addr}. It then generates a\n\
+@code{REALIGN_LOAD} operation to extract the relevant data from the\n\
+two loaded vectors. The first two arguments to @code{REALIGN_LOAD},\n\
+@var{v1} and @var{v2}, are the two vectors, each of size @var{VS}, and\n\
+the third argument, @var{OFF}, defines how the data will be extracted\n\
+from these two vectors: if @var{OFF} is 0, then the returned vector is\n\
+@var{v2}; otherwise, the returned vector is composed from the last\n\
+@var{VS}-@var{OFF} elements of @var{v1} concatenated to the first\n\
+@var{OFF} elements of @var{v2}.\n\
+\n\
+If this hook is defined, the autovectorizer will generate a call\n\
+to @var{f} (using the DECL tree that this hook returns) and will\n\
+use the return value of @var{f} as the argument @var{OFF} to\n\
+@code{REALIGN_LOAD}. Therefore, the mask @var{m} returned by @var{f}\n\
+should comply with the semantics expected by @code{REALIGN_LOAD}\n\
+described above.\n\
+If this hook is not defined, then @var{addr} will be used as\n\
+the argument @var{OFF} to @code{REALIGN_LOAD}, in which case the low\n\
+log2(@var{VS}) @minus{} 1 bits of @var{addr} will be considered.",
+ tree, (void), NULL)
+
+/* Returns a built-in function that realizes the vectorized version of
+   a target-independent function, or NULL_TREE if not available.  */
+DEFHOOK
+(builtin_vectorized_function,
+ "This hook should return the decl of a function that implements the\n\
+vectorized variant of the function with the @code{combined_fn} code\n\
+@var{code} or @code{NULL_TREE} if such a function is not available.\n\
+The return type of the vectorized function shall be of vector type\n\
+@var{vec_type_out} and the argument types should be @var{vec_type_in}.",
+ tree, (unsigned code, tree vec_type_out, tree vec_type_in),
+ default_builtin_vectorized_function)
+
+/* Returns a built-in function that realizes the vectorized version of
+   a target-specific function, or NULL_TREE if not available.  */
+DEFHOOK
+(builtin_md_vectorized_function,
+ "This hook should return the decl of a function that implements the\n\
+vectorized variant of target built-in function @code{fndecl}.  The\n\
+return type of the vectorized function shall be of vector type\n\
+@var{vec_type_out} and the argument types should be @var{vec_type_in}.",
+ tree, (tree fndecl, tree vec_type_out, tree vec_type_in),
+ default_builtin_md_vectorized_function)
+
+/* Returns a function declaration for a builtin that realizes the
+   vector conversion, or NULL_TREE if not available.  */
+DEFHOOK
+(builtin_conversion,
+ "This hook should return the DECL of a function that implements conversion of the\n\
+input vector of type @var{src_type} to type @var{dest_type}.\n\
+The value of @var{code} is one of the enumerators in @code{enum tree_code} and\n\
+specifies how the conversion is to be applied\n\
+(truncation, rounding, etc.).\n\
+\n\
+If this hook is defined, the autovectorizer will use the\n\
+@code{TARGET_VECTORIZE_BUILTIN_CONVERSION} target hook when vectorizing\n\
+conversion. Otherwise, it will return @code{NULL_TREE}.",
+ tree, (unsigned code, tree dest_type, tree src_type),
+ default_builtin_vectorized_conversion)
+
+/* Cost of different vector/scalar statements in vectorization cost
+   model. In case of misaligned vector loads and stores the cost depends
+   on the data type and misalignment value.  */
+DEFHOOK
+(builtin_vectorization_cost,
+ "Returns cost of different scalar or vector statements for vectorization cost model.\n\
+For vector memory operations the cost may depend on type (@var{vectype}) and\n\
+misalignment value (@var{misalign}).",
+ int, (enum vect_cost_for_stmt type_of_cost, tree vectype, int misalign),
+ default_builtin_vectorization_cost)
+
+DEFHOOK
+(preferred_vector_alignment,
+ "This hook returns the preferred alignment in bits for accesses to\n\
+vectors of type @var{type} in vectorized code.  This might be less than\n\
+or greater than the ABI-defined value returned by\n\
+@code{TARGET_VECTOR_ALIGNMENT}.  It can be equal to the alignment of\n\
+a single element, in which case the vectorizer will not try to optimize\n\
+for alignment.\n\
+\n\
+The default hook returns @code{TYPE_ALIGN (@var{type})}, which is\n\
+correct for most targets.",
+ poly_uint64, (const_tree type),
+ default_preferred_vector_alignment)
+
+/* Return true if vector alignment is reachable (by peeling N
+   iterations) for the given scalar type.  */
+DEFHOOK
+(vector_alignment_reachable,
+ "Return true if vector alignment is reachable (by peeling N iterations) for the given scalar type @var{type}.  @var{is_packed} is false if the scalar access using @var{type} is known to be naturally aligned.",
+ bool, (const_tree type, bool is_packed),
+ default_builtin_vector_alignment_reachable)
+
+DEFHOOK
+(vec_perm_const,
+ "This hook is used to test whether the target can permute up to two\n\
+vectors of mode @var{mode} using the permutation vector @code{sel}, and\n\
+also to emit such a permutation.  In the former case @var{in0}, @var{in1}\n\
+and @var{out} are all null.  In the latter case @var{in0} and @var{in1} are\n\
+the source vectors and @var{out} is the destination vector; all three are\n\
+registers of mode @var{mode}.  @var{in1} is the same as @var{in0} if\n\
+@var{sel} describes a permutation on one vector instead of two.\n\
+\n\
+Return true if the operation is possible, emitting instructions for it\n\
+if rtxes are provided.\n\
+\n\
+@cindex @code{vec_perm@var{m}} instruction pattern\n\
+If the hook returns false for a mode with multibyte elements, GCC will\n\
+try the equivalent byte operation.  If that also fails, it will try forcing\n\
+the selector into a register and using the @var{vec_perm@var{mode}}\n\
+instruction pattern.  There is no need for the hook to handle these two\n\
+implementation approaches itself.",
+ bool, (machine_mode mode, rtx output, rtx in0, rtx in1,
+	const vec_perm_indices &sel),
+ NULL)
+
+/* Return true if the target supports misaligned store/load of a
+   specific factor denoted in the third parameter.  The last parameter
+   is true if the access is defined in a packed struct.  */
+DEFHOOK
+(support_vector_misalignment,
+ "This hook should return true if the target supports misaligned vector\n\
+store/load of a specific factor denoted in the @var{misalignment}\n\
+parameter.  The vector store/load should be of machine mode @var{mode} and\n\
+the elements in the vectors should be of type @var{type}.  @var{is_packed}\n\
+parameter is true if the memory access is defined in a packed struct.",
+ bool,
+ (machine_mode mode, const_tree type, int misalignment, bool is_packed),
+ default_builtin_support_vector_misalignment)
+
+/* Returns the preferred mode for SIMD operations for the specified
+   scalar mode.  */
+DEFHOOK
+(preferred_simd_mode,
+ "This hook should return the preferred mode for vectorizing scalar\n\
+mode @var{mode}.  The default is\n\
+equal to @code{word_mode}, because the vectorizer can do some\n\
+transformations even in absence of specialized @acronym{SIMD} hardware.",
+ machine_mode,
+ (scalar_mode mode),
+ default_preferred_simd_mode)
+
+/* Returns the preferred mode for splitting SIMD reductions to.  */
+DEFHOOK
+(split_reduction,
+ "This hook should return the preferred mode to split the final reduction\n\
+step on @var{mode} to.  The reduction is then carried out reducing upper\n\
+against lower halves of vectors recursively until the specified mode is\n\
+reached.  The default is @var{mode} which means no splitting.",
+  machine_mode,
+  (machine_mode),
+  default_split_reduction)
+
+/* Returns a mask of vector sizes to iterate over when auto-vectorizing
+   after processing the preferred one derived from preferred_simd_mode.  */
+DEFHOOK
+(autovectorize_vector_sizes,
+ "If the mode returned by @code{TARGET_VECTORIZE_PREFERRED_SIMD_MODE} is not\n\
+the only one that is worth considering, this hook should add all suitable\n\
+vector sizes to @var{sizes}, in order of decreasing preference.  The first\n\
+one should be the size of @code{TARGET_VECTORIZE_PREFERRED_SIMD_MODE}.\n\
+\n\
+The hook does not need to do anything if the vector returned by\n\
+@code{TARGET_VECTORIZE_PREFERRED_SIMD_MODE} is the only one relevant\n\
+for autovectorization.  The default implementation does nothing.",
+ void,
+ (vector_sizes *sizes),
+ default_autovectorize_vector_sizes)
+
+/* Function to get a target mode for a vector mask.  */
+DEFHOOK
+(get_mask_mode,
+ "A vector mask is a value that holds one boolean result for every element\n\
+in a vector.  This hook returns the machine mode that should be used to\n\
+represent such a mask when the vector in question is @var{length} bytes\n\
+long and contains @var{nunits} elements.  The hook returns an empty\n\
+@code{opt_machine_mode} if no such mode exists.\n\
+\n\
+The default implementation returns the mode of an integer vector that\n\
+is @var{length} bytes long and that contains @var{nunits} elements,\n\
+if such a mode exists.",
+ opt_machine_mode,
+ (poly_uint64 nunits, poly_uint64 length),
+ default_get_mask_mode)
+
+/* Function to say whether a masked operation is expensive when the
+   mask is all zeros.  */
+DEFHOOK
+(empty_mask_is_expensive,
+ "This hook returns true if masked internal function @var{ifn} (really of\n\
+type @code{internal_fn}) should be considered expensive when the mask is\n\
+all zeros.  GCC can then try to branch around the instruction instead.",
+ bool,
+ (unsigned ifn),
+ default_empty_mask_is_expensive)
+
+/* Target builtin that implements vector gather operation.  */
+DEFHOOK
+(builtin_gather,
+ "Target builtin that implements vector gather operation.  @var{mem_vectype}\n\
+is the vector type of the load and @var{index_type} is scalar type of\n\
+the index, scaled by @var{scale}.\n\
+The default is @code{NULL_TREE} which means to not vectorize gather\n\
+loads.",
+ tree,
+ (const_tree mem_vectype, const_tree index_type, int scale),
+ NULL)
+
+/* Target builtin that implements vector scatter operation.  */
+DEFHOOK
+(builtin_scatter,
+"Target builtin that implements vector scatter operation.  @var{vectype}\n\
+is the vector type of the store and @var{index_type} is scalar type of\n\
+the index, scaled by @var{scale}.\n\
+The default is @code{NULL_TREE} which means to not vectorize scatter\n\
+stores.",
+ tree,
+ (const_tree vectype, const_tree index_type, int scale),
+ NULL)
+
+/* Target function to initialize the cost model for a loop or block.  */
+DEFHOOK
+(init_cost,
+ "This hook should initialize target-specific data structures in preparation "
+ "for modeling the costs of vectorizing a loop or basic block.  The default "
+ "allocates three unsigned integers for accumulating costs for the prologue, "
+ "body, and epilogue of the loop or basic block.  If @var{loop_info} is "
+ "non-NULL, it identifies the loop being vectorized; otherwise a single block "
+ "is being vectorized.",
+ void *,
+ (struct loop *loop_info),
+ default_init_cost)
+
+/* Target function to record N statements of the given kind using the
+   given vector type within the cost model data for the current loop or
+    block.  */
+DEFHOOK
+(add_stmt_cost,
+ "This hook should update the target-specific @var{data} in response to "
+ "adding @var{count} copies of the given @var{kind} of statement to a "
+ "loop or basic block.  The default adds the builtin vectorizer cost for "
+ "the copies of the statement to the accumulator specified by @var{where}, "
+ "(the prologue, body, or epilogue) and returns the amount added.  The "
+ "return value should be viewed as a tentative cost that may later be "
+ "revised.",
+ unsigned,
+ (void *data, int count, enum vect_cost_for_stmt kind,
+  struct _stmt_vec_info *stmt_info, int misalign,
+  enum vect_cost_model_location where),
+ default_add_stmt_cost)
+
+/* Target function to calculate the total cost of the current vectorized
+   loop or block.  */
+DEFHOOK
+(finish_cost,
+ "This hook should complete calculations of the cost of vectorizing a loop "
+ "or basic block based on @var{data}, and return the prologue, body, and "
+ "epilogue costs as unsigned integers.  The default returns the value of "
+ "the three accumulators.",
+ void,
+ (void *data, unsigned *prologue_cost, unsigned *body_cost,
+  unsigned *epilogue_cost),
+ default_finish_cost)
+
+/* Function to delete target-specific cost modeling data.  */
+DEFHOOK
+(destroy_cost_data,
+ "This hook should release @var{data} and any related data structures "
+ "allocated by TARGET_VECTORIZE_INIT_COST.  The default releases the "
+ "accumulator.",
+ void,
+ (void *data),
+ default_destroy_cost_data)
+
+HOOK_VECTOR_END (vectorize)
+
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_"
+
+DEFHOOK
+(preferred_else_value,
+ "This hook returns the target's preferred final argument for a call\n\
+to conditional internal function @var{ifn} (really of type\n\
+@code{internal_fn}).  @var{type} specifies the return type of the\n\
+function and @var{ops} are the operands to the conditional operation,\n\
+of which there are @var{nops}.\n\
+\n\
+For example, if @var{ifn} is @code{IFN_COND_ADD}, the hook returns\n\
+a value of type @var{type} that should be used when @samp{@var{ops}[0]}\n\
+and @samp{@var{ops}[1]} are conditionally added together.\n\
+\n\
+This hook is only relevant if the target supports conditional patterns\n\
+like @code{cond_add@var{m}}.  The default implementation returns a zero\n\
+constant of type @var{type}.",
+ tree,
+ (unsigned ifn, tree type, unsigned nops, tree *ops),
+ default_preferred_else_value)
+
+DEFHOOK
+(record_offload_symbol,
+ "Used when offloaded functions are seen in the compilation unit and no named\n\
+sections are available.  It is called once for each symbol that must be\n\
+recorded in the offload function and variable table.",
+ void, (tree),
+ hook_void_tree)
+
+DEFHOOKPOD
+(absolute_biggest_alignment,
+ "If defined, this target hook specifies the absolute biggest alignment\n\
+that a type or variable can have on this machine, otherwise,\n\
+@code{BIGGEST_ALIGNMENT} is used.",
+ HOST_WIDE_INT, BIGGEST_ALIGNMENT)
+
+/* Allow target specific overriding of option settings after options have
+  been changed by an attribute or pragma or when it is reset at the
+  end of the code affected by an attribute or pragma.  */
+DEFHOOK
+(override_options_after_change,
+ "This target function is similar to the hook @code{TARGET_OPTION_OVERRIDE}\n\
+but is called when the optimize level is changed via an attribute or\n\
+pragma or when it is reset at the end of the code affected by the\n\
+attribute or pragma.  It is not called at the beginning of compilation\n\
+when @code{TARGET_OPTION_OVERRIDE} is called so if you want to perform these\n\
+actions then, you should have @code{TARGET_OPTION_OVERRIDE} call\n\
+@code{TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE}.",
+ void, (void),
+ hook_void_void)
+
+DEFHOOK
+(offload_options,
+ "Used when writing out the list of options into an LTO file.  It should\n\
+translate any relevant target-specific options (such as the ABI in use)\n\
+into one of the @option{-foffload} options that exist as a common interface\n\
+to express such options.  It should return a string containing these options,\n\
+separated by spaces, which the caller will free.\n",
+char *, (void), hook_charptr_void_null)
+
+DEFHOOK_UNDOC
+(eh_return_filter_mode,
+ "Return machine mode for filter value.",
+ scalar_int_mode, (void),
+ default_eh_return_filter_mode)
+
+/* Return machine mode for libgcc expanded cmp instructions.  */
+DEFHOOK
+(libgcc_cmp_return_mode,
+ "This target hook should return the mode to be used for the return value\n\
+of compare instructions expanded to libgcc calls.  If not defined\n\
+@code{word_mode} is returned which is the right choice for a majority of\n\
+targets.",
+ scalar_int_mode, (void),
+ default_libgcc_cmp_return_mode)
+
+/* Return machine mode for libgcc expanded shift instructions.  */
+DEFHOOK
+(libgcc_shift_count_mode,
+ "This target hook should return the mode to be used for the shift count operand\n\
+of shift instructions expanded to libgcc calls.  If not defined\n\
+@code{word_mode} is returned which is the right choice for a majority of\n\
+targets.",
+ scalar_int_mode, (void),
+ default_libgcc_shift_count_mode)
+
+/* Return machine mode to be used for _Unwind_Word type.  */
+DEFHOOK
+(unwind_word_mode,
+ "Return machine mode to be used for @code{_Unwind_Word} type.\n\
+The default is to use @code{word_mode}.",
+ scalar_int_mode, (void),
+ default_unwind_word_mode)
+
+/* Given two decls, merge their attributes and return the result.  */
+DEFHOOK
+(merge_decl_attributes,
+ "Define this target hook if the merging of decl attributes needs special\n\
+handling.  If defined, the result is a list of the combined\n\
+@code{DECL_ATTRIBUTES} of @var{olddecl} and @var{newdecl}.\n\
+@var{newdecl} is a duplicate declaration of @var{olddecl}.  Examples of\n\
+when this is needed are when one attribute overrides another, or when an\n\
+attribute is nullified by a subsequent definition.  This function may\n\
+call @code{merge_attributes} to handle machine-independent merging.\n\
+\n\
+@findex TARGET_DLLIMPORT_DECL_ATTRIBUTES\n\
+If the only target-specific handling you require is @samp{dllimport}\n\
+for Microsoft Windows targets, you should define the macro\n\
+@code{TARGET_DLLIMPORT_DECL_ATTRIBUTES} to @code{1}.  The compiler\n\
+will then define a function called\n\
+@code{merge_dllimport_decl_attributes} which can then be defined as\n\
+the expansion of @code{TARGET_MERGE_DECL_ATTRIBUTES}.  You can also\n\
+add @code{handle_dll_attribute} in the attribute table for your port\n\
+to perform initial processing of the @samp{dllimport} and\n\
+@samp{dllexport} attributes.  This is done in @file{i386/cygwin.h} and\n\
+@file{i386/i386.c}, for example.",
+ tree, (tree olddecl, tree newdecl),
+ merge_decl_attributes)
+
+/* Given two types, merge their attributes and return the result.  */
+DEFHOOK
+(merge_type_attributes,
+ "Define this target hook if the merging of type attributes needs special\n\
+handling.  If defined, the result is a list of the combined\n\
+@code{TYPE_ATTRIBUTES} of @var{type1} and @var{type2}.  It is assumed\n\
+that @code{comptypes} has already been called and returned 1.  This\n\
+function may call @code{merge_attributes} to handle machine-independent\n\
+merging.",
+ tree, (tree type1, tree type2),
+ merge_type_attributes)
+
+/* Table of machine attributes and functions to handle them.
+   Ignored if NULL.  */
+DEFHOOKPOD
+(attribute_table,
+ "If defined, this target hook points to an array of @samp{struct\n\
+attribute_spec} (defined in @file{tree-core.h}) specifying the machine\n\
+specific attributes for this target and some of the restrictions on the\n\
+entities to which these attributes are applied and the arguments they\n\
+take.",
+ const struct attribute_spec *, NULL)
+
+/* Return true iff attribute NAME expects a plain identifier as its first
+   argument.  */
+DEFHOOK
+(attribute_takes_identifier_p,
+ "If defined, this target hook is a function which returns true if the\n\
+machine-specific attribute named @var{name} expects an identifier\n\
+given as its first argument to be passed on as a plain identifier, not\n\
+subjected to name lookup.  If this is not defined, the default is\n\
+false for all machine-specific attributes.",
+ bool, (const_tree name),
+ hook_bool_const_tree_false)
+
+/* Return zero if the attributes on TYPE1 and TYPE2 are incompatible,
+   one if they are compatible and two if they are nearly compatible
+   (which causes a warning to be generated).  */
+DEFHOOK
+(comp_type_attributes,
+ "If defined, this target hook is a function which returns zero if the attributes on\n\
+@var{type1} and @var{type2} are incompatible, one if they are compatible,\n\
+and two if they are nearly compatible (which causes a warning to be\n\
+generated).  If this is not defined, machine-specific attributes are\n\
+supposed always to be compatible.",
+ int, (const_tree type1, const_tree type2),
+ hook_int_const_tree_const_tree_1)
+
+/* Assign default attributes to the newly defined TYPE.  */
+DEFHOOK
+(set_default_type_attributes,
+ "If defined, this target hook is a function which assigns default attributes to\n\
+the newly defined @var{type}.",
+ void, (tree type),
+ hook_void_tree)
+
+/* Insert attributes on the newly created DECL.  */
+DEFHOOK
+(insert_attributes,
+ "Define this target hook if you want to be able to add attributes to a decl\n\
+when it is being created.  This is normally useful for back ends which\n\
+wish to implement a pragma by using the attributes which correspond to\n\
+the pragma's effect.  The @var{node} argument is the decl which is being\n\
+created.  The @var{attr_ptr} argument is a pointer to the attribute list\n\
+for this decl.  The list itself should not be modified, since it may be\n\
+shared with other decls, but attributes may be chained on the head of\n\
+the list and @code{*@var{attr_ptr}} modified to point to the new\n\
+attributes, or a copy of the list may be made if further changes are\n\
+needed.",
+ void, (tree node, tree *attr_ptr),
+ hook_void_tree_treeptr)
+
+/* Return true if FNDECL (which has at least one machine attribute)
+   can be inlined despite its machine attributes, false otherwise.  */
+DEFHOOK
+(function_attribute_inlinable_p,
+ "@cindex inlining\n\
+This target hook returns @code{true} if it is OK to inline @var{fndecl}\n\
+into the current function, despite its having target-specific\n\
+attributes, @code{false} otherwise.  By default, if a function has a\n\
+target specific attribute attached to it, it will not be inlined.",
+ bool, (const_tree fndecl),
+ hook_bool_const_tree_false)
+
+/* Return true if bitfields in RECORD_TYPE should follow the
+   Microsoft Visual C++ bitfield layout rules.  */
+DEFHOOK
+(ms_bitfield_layout_p,
+ "This target hook returns @code{true} if bit-fields in the given\n\
+@var{record_type} are to be laid out following the rules of Microsoft\n\
+Visual C/C++, namely: (i) a bit-field won't share the same storage\n\
+unit with the previous bit-field if their underlying types have\n\
+different sizes, and the bit-field will be aligned to the highest\n\
+alignment of the underlying types of itself and of the previous\n\
+bit-field; (ii) a zero-sized bit-field will affect the alignment of\n\
+the whole enclosing structure, even if it is unnamed; except that\n\
+(iii) a zero-sized bit-field will be disregarded unless it follows\n\
+another bit-field of nonzero size.  If this hook returns @code{true},\n\
+other macros that control bit-field layout are ignored.\n\
+\n\
+When a bit-field is inserted into a packed record, the whole size\n\
+of the underlying type is used by one or more same-size adjacent\n\
+bit-fields (that is, if its long:3, 32 bits is used in the record,\n\
+and any additional adjacent long bit-fields are packed into the same\n\
+chunk of 32 bits.  However, if the size changes, a new field of that\n\
+size is allocated).  In an unpacked record, this is the same as using\n\
+alignment, but not equivalent when packing.\n\
+\n\
+If both MS bit-fields and @samp{__attribute__((packed))} are used,\n\
+the latter will take precedence.  If @samp{__attribute__((packed))} is\n\
+used on a single field when MS bit-fields are in use, it will take\n\
+precedence for that field, but the alignment of the rest of the structure\n\
+may affect its placement.",
+ bool, (const_tree record_type),
+ hook_bool_const_tree_false)
+
+/* For now this is only an interface to WORDS_BIG_ENDIAN for
+   target-independent code like the front ends, need performance testing
+   before switching completely to the target hook.  */
+DEFHOOK_UNDOC
+(words_big_endian,
+ "",
+ bool, (void),
+ targhook_words_big_endian)
+
+/* Likewise for FLOAT_WORDS_BIG_ENDIAN.  */
+DEFHOOK_UNDOC
+(float_words_big_endian,
+ "",
+ bool, (void),
+ targhook_float_words_big_endian)
+
+DEFHOOK
+(float_exceptions_rounding_supported_p,
+ "Returns true if the target supports IEEE 754 floating-point exceptions\
+ and rounding modes, false otherwise.  This is intended to relate to the\
+ @code{float} and @code{double} types, but not necessarily @code{long double}.\
+ By default, returns true if the @code{adddf3} instruction pattern is\
+ available and false otherwise, on the assumption that hardware floating\
+ point supports exceptions and rounding modes but software floating point\
+ does not.",
+ bool, (void),
+ default_float_exceptions_rounding_supported_p)
+
+/* True if the target supports decimal floating point.  */
+DEFHOOK
+(decimal_float_supported_p,
+ "Returns true if the target supports decimal floating point.",
+ bool, (void),
+ default_decimal_float_supported_p)
+
+/* True if the target supports fixed-point.  */
+DEFHOOK
+(fixed_point_supported_p,
+ "Returns true if the target supports fixed-point arithmetic.",
+ bool, (void),
+ default_fixed_point_supported_p)
+
+/* Return true if anonymous bitfields affect structure alignment.  */
+DEFHOOK
+(align_anon_bitfield,
+ "When @code{PCC_BITFIELD_TYPE_MATTERS} is true this hook will determine\n\
+whether unnamed bitfields affect the alignment of the containing\n\
+structure.  The hook should return true if the structure should inherit\n\
+the alignment requirements of an unnamed bitfield's type.",
+ bool, (void),
+ hook_bool_void_false)
+
+/* Return true if volatile bitfields should use the narrowest type possible.
+   Return false if they should use the container type.  */
+DEFHOOK
+(narrow_volatile_bitfield,
+ "This target hook should return @code{true} if accesses to volatile bitfields\n\
+should use the narrowest mode possible.  It should return @code{false} if\n\
+these accesses should use the bitfield container type.\n\
+\n\
+The default is @code{false}.",
+ bool, (void),
+ hook_bool_void_false)
+
+/* Set up target-specific built-in functions.  */
+DEFHOOK
+(init_builtins,
+ "Define this hook if you have any machine-specific built-in functions\n\
+that need to be defined.  It should be a function that performs the\n\
+necessary setup.\n\
+\n\
+Machine specific built-in functions can be useful to expand special machine\n\
+instructions that would otherwise not normally be generated because\n\
+they have no equivalent in the source language (for example, SIMD vector\n\
+instructions or prefetch instructions).\n\
+\n\
+To create a built-in function, call the function\n\
+@code{lang_hooks.builtin_function}\n\
+which is defined by the language front end.  You can use any type nodes set\n\
+up by @code{build_common_tree_nodes};\n\
+only language front ends that use those two functions will call\n\
+@samp{TARGET_INIT_BUILTINS}.",
+ void, (void),
+ hook_void_void)
+
+/* Initialize (if INITIALIZE_P is true) and return the target-specific
+   built-in function decl for CODE.
+   Return NULL if that is not possible.  Return error_mark_node if CODE
+   is outside of the range of valid target builtin function codes.  */
+DEFHOOK
+(builtin_decl,
+ "Define this hook if you have any machine-specific built-in functions\n\
+that need to be defined.  It should be a function that returns the\n\
+builtin function declaration for the builtin function code @var{code}.\n\
+If there is no such builtin and it cannot be initialized at this time\n\
+if @var{initialize_p} is true the function should return @code{NULL_TREE}.\n\
+If @var{code} is out of range the function should return\n\
+@code{error_mark_node}.",
+ tree, (unsigned code, bool initialize_p), NULL)
+
+/* Expand a target-specific builtin.  */
+DEFHOOK
+(expand_builtin,
+ "\n\
+Expand a call to a machine specific built-in function that was set up by\n\
+@samp{TARGET_INIT_BUILTINS}.  @var{exp} is the expression for the\n\
+function call; the result should go to @var{target} if that is\n\
+convenient, and have mode @var{mode} if that is convenient.\n\
+@var{subtarget} may be used as the target for computing one of\n\
+@var{exp}'s operands.  @var{ignore} is nonzero if the value is to be\n\
+ignored.  This function should return the result of the call to the\n\
+built-in function.",
+ rtx,
+ (tree exp, rtx target, rtx subtarget, machine_mode mode, int ignore),
+ default_expand_builtin)
+
+/* Select a replacement for a target-specific builtin.  This is done
+   *before* regular type checking, and so allows the target to
+   implement a crude form of function overloading.  The result is a
+   complete expression that implements the operation.  PARAMS really
+   has type VEC(tree,gc)*, but we don't want to include tree.h here.  */
+DEFHOOK
+(resolve_overloaded_builtin,
+ "Select a replacement for a machine specific built-in function that\n\
+was set up by @samp{TARGET_INIT_BUILTINS}.  This is done\n\
+@emph{before} regular type checking, and so allows the target to\n\
+implement a crude form of function overloading.  @var{fndecl} is the\n\
+declaration of the built-in function.  @var{arglist} is the list of\n\
+arguments passed to the built-in function.  The result is a\n\
+complete expression that implements the operation, usually\n\
+another @code{CALL_EXPR}.\n\
+@var{arglist} really has type @samp{VEC(tree,gc)*}",
+ tree, (unsigned int /*location_t*/ loc, tree fndecl, void *arglist), NULL)
+
+/* Fold a target-specific builtin to a tree valid for both GIMPLE
+   and GENERIC.  */
+DEFHOOK
+(fold_builtin,
+ "Fold a call to a machine specific built-in function that was set up by\n\
+@samp{TARGET_INIT_BUILTINS}.  @var{fndecl} is the declaration of the\n\
+built-in function.  @var{n_args} is the number of arguments passed to\n\
+the function; the arguments themselves are pointed to by @var{argp}.\n\
+The result is another tree, valid for both GIMPLE and GENERIC,\n\
+containing a simplified expression for the call's result.  If\n\
+@var{ignore} is true the value will be ignored.",
+ tree, (tree fndecl, int n_args, tree *argp, bool ignore),
+ hook_tree_tree_int_treep_bool_null)
+
+/* Fold a target-specific builtin to a valid GIMPLE tree.  */
+DEFHOOK
+(gimple_fold_builtin,
+ "Fold a call to a machine specific built-in function that was set up\n\
+by @samp{TARGET_INIT_BUILTINS}.  @var{gsi} points to the gimple\n\
+statement holding the function call.  Returns true if any change\n\
+was made to the GIMPLE stream.",
+ bool, (gimple_stmt_iterator *gsi),
+ hook_bool_gsiptr_false)
+
+/* Target hook is used to compare the target attributes in two functions to
+   determine which function's features get higher priority.  This is used
+   during function multi-versioning to figure out the order in which two
+   versions must be dispatched.  A function version with a higher priority
+   is checked for dispatching earlier.  DECL1 and DECL2 are
+   the two function decls that will be compared. It returns positive value
+   if DECL1 is higher priority,  negative value if DECL2 is higher priority
+   and 0 if they are the same. */
+DEFHOOK
+(compare_version_priority,
+ "This hook is used to compare the target attributes in two functions to\n\
+determine which function's features get higher priority.  This is used\n\
+during function multi-versioning to figure out the order in which two\n\
+versions must be dispatched.  A function version with a higher priority\n\
+is checked for dispatching earlier.  @var{decl1} and @var{decl2} are\n\
+ the two function decls that will be compared.",
+ int, (tree decl1, tree decl2), NULL)
+
+/*  Target hook is used to generate the dispatcher logic to invoke the right
+    function version at run-time for a given set of function versions.
+    ARG points to the callgraph node of the dispatcher function whose body
+    must be generated.  */
+DEFHOOK
+(generate_version_dispatcher_body,
+ "This hook is used to generate the dispatcher logic to invoke the right\n\
+function version at run-time for a given set of function versions.\n\
+@var{arg} points to the callgraph node of the dispatcher function whose\n\
+body must be generated.",
+ tree, (void *arg), NULL) 
+
+/* Target hook is used to get the dispatcher function for a set of function
+   versions.  The dispatcher function is called to invoke the right function
+   version at run-time.  DECL is one version from a set of semantically
+   identical versions.  */
+DEFHOOK
+(get_function_versions_dispatcher,
+ "This hook is used to get the dispatcher function for a set of function\n\
+versions.  The dispatcher function is called to invoke the right function\n\
+version at run-time. @var{decl} is one version from a set of semantically\n\
+identical versions.",
+ tree, (void *decl), NULL)
+
+/* Returns a code for a target-specific builtin that implements
+   reciprocal of a target-specific function, or NULL_TREE if not available.  */
+DEFHOOK
+(builtin_reciprocal,
+ "This hook should return the DECL of a function that implements the\n\
+reciprocal of the machine-specific builtin function @var{fndecl}, or\n\
+@code{NULL_TREE} if such a function is not available.",
+ tree, (tree fndecl),
+ default_builtin_reciprocal)
+
+/* For a vendor-specific TYPE, return a pointer to a statically-allocated
+   string containing the C++ mangling for TYPE.  In all other cases, return
+   NULL.  */
+DEFHOOK
+(mangle_type,
+ "If your target defines any fundamental types, or any types your target\n\
+uses should be mangled differently from the default, define this hook\n\
+to return the appropriate encoding for these types as part of a C++\n\
+mangled name.  The @var{type} argument is the tree structure representing\n\
+the type to be mangled.  The hook may be applied to trees which are\n\
+not target-specific fundamental types; it should return @code{NULL}\n\
+for all such types, as well as arguments it does not recognize.  If the\n\
+return value is not @code{NULL}, it must point to a statically-allocated\n\
+string constant.\n\
+\n\
+Target-specific fundamental types might be new fundamental types or\n\
+qualified versions of ordinary fundamental types.  Encode new\n\
+fundamental types as @samp{@w{u @var{n} @var{name}}}, where @var{name}\n\
+is the name used for the type in source code, and @var{n} is the\n\
+length of @var{name} in decimal.  Encode qualified versions of\n\
+ordinary types as @samp{@w{U @var{n} @var{name} @var{code}}}, where\n\
+@var{name} is the name used for the type qualifier in source code,\n\
+@var{n} is the length of @var{name} as above, and @var{code} is the\n\
+code used to represent the unqualified version of this type.  (See\n\
+@code{write_builtin_type} in @file{cp/mangle.c} for the list of\n\
+codes.)  In both cases the spaces are for clarity; do not include any\n\
+spaces in your string.\n\
+\n\
+This hook is applied to types prior to typedef resolution.  If the mangled\n\
+name for a particular type depends only on that type's main variant, you\n\
+can perform typedef resolution yourself using @code{TYPE_MAIN_VARIANT}\n\
+before mangling.\n\
+\n\
+The default version of this hook always returns @code{NULL}, which is\n\
+appropriate for a target that does not define any new fundamental\n\
+types.",
+ const char *, (const_tree type),
+ hook_constcharptr_const_tree_null)
+
+/* Make any adjustments to libfunc names needed for this target.  */
+DEFHOOK
+(init_libfuncs,
+ "This hook should declare additional library routines or rename\n\
+existing ones, using the functions @code{set_optab_libfunc} and\n\
+@code{init_one_libfunc} defined in @file{optabs.c}.\n\
+@code{init_optabs} calls this macro after initializing all the normal\n\
+library routines.\n\
+\n\
+The default is to do nothing.  Most ports don't need to define this hook.",
+ void, (void),
+ hook_void_void)
+
+ /* Add a __gnu_ prefix to library functions rather than just __.  */
+DEFHOOKPOD
+(libfunc_gnu_prefix,
+ "If false (the default), internal library routines start with two\n\
+underscores.  If set to true, these routines start with @code{__gnu_}\n\
+instead.  E.g., @code{__muldi3} changes to @code{__gnu_muldi3}.  This\n\
+currently only affects functions defined in @file{libgcc2.c}.  If this\n\
+is set to true, the @file{tm.h} file must also\n\
+@code{#define LIBGCC2_GNU_PREFIX}.",
+  bool, false)
+
+/* Given a decl, a section name, and whether the decl initializer
+   has relocs, choose attributes for the section.  */
+/* ??? Should be merged with SELECT_SECTION and UNIQUE_SECTION.  */
+DEFHOOK
+(section_type_flags,
+ "Choose a set of section attributes for use by @code{TARGET_ASM_NAMED_SECTION}\n\
+based on a variable or function decl, a section name, and whether or not the\n\
+declaration's initializer may contain runtime relocations.  @var{decl} may be\n\
+null, in which case read-write data should be assumed.\n\
+\n\
+The default version of this function handles choosing code vs data,\n\
+read-only vs read-write data, and @code{flag_pic}.  You should only\n\
+need to override this if your target has special flags that might be\n\
+set via @code{__attribute__}.",
+ unsigned int, (tree decl, const char *name, int reloc),
+ default_section_type_flags)
+
+DEFHOOK
+(libc_has_function,
+ "This hook determines whether a function from a class of functions\n\
+@var{fn_class} is present at the runtime.",
+ bool, (enum function_class fn_class),
+ default_libc_has_function)
+
+/* True if new jumps cannot be created, to replace existing ones or
+   not, at the current point in the compilation.  */
+DEFHOOK
+(cannot_modify_jumps_p,
+ "This target hook returns @code{true} past the point in which new jump\n\
+instructions could be created.  On machines that require a register for\n\
+every jump such as the SHmedia ISA of SH5, this point would typically be\n\
+reload, so this target hook should be defined to a function such as:\n\
+\n\
+@smallexample\n\
+static bool\n\
+cannot_modify_jumps_past_reload_p ()\n\
+@{\n\
+  return (reload_completed || reload_in_progress);\n\
+@}\n\
+@end smallexample",
+ bool, (void),
+ hook_bool_void_false)
+
+/* True if FOLLOWER may be modified to follow FOLLOWEE.  */
+DEFHOOK
+(can_follow_jump,
+ "FOLLOWER and FOLLOWEE are JUMP_INSN instructions;\
+  return true if FOLLOWER may be modified to follow FOLLOWEE;\
+  false, if it can't.\
+  For example, on some targets, certain kinds of branches can't be made to\
+  follow through a hot/cold partitioning.",
+ bool, (const rtx_insn *follower, const rtx_insn *followee),
+ hook_bool_const_rtx_insn_const_rtx_insn_true)
+
+/* Return a register class for which branch target register
+   optimizations should be applied.  */
+DEFHOOK
+(branch_target_register_class,
+ "This target hook returns a register class for which branch target register\n\
+optimizations should be applied.  All registers in this class should be\n\
+usable interchangeably.  After reload, registers in this class will be\n\
+re-allocated and loads will be hoisted out of loops and be subjected\n\
+to inter-block scheduling.",
+ reg_class_t, (void),
+ default_branch_target_register_class)
+
+/* Return true if branch target register optimizations should include
+   callee-saved registers that are not already live during the current
+   function.  AFTER_PE_GEN is true if prologues and epilogues have
+   already been generated.  */
+DEFHOOK
+(branch_target_register_callee_saved,
+ "Branch target register optimization will by default exclude callee-saved\n\
+registers\n\
+that are not already live during the current function; if this target hook\n\
+returns true, they will be included.  The target code must than make sure\n\
+that all target registers in the class returned by\n\
+@samp{TARGET_BRANCH_TARGET_REGISTER_CLASS} that might need saving are\n\
+saved.  @var{after_prologue_epilogue_gen} indicates if prologues and\n\
+epilogues have already been generated.  Note, even if you only return\n\
+true when @var{after_prologue_epilogue_gen} is false, you still are likely\n\
+to have to make special provisions in @code{INITIAL_ELIMINATION_OFFSET}\n\
+to reserve space for caller-saved target registers.",
+ bool, (bool after_prologue_epilogue_gen),
+ hook_bool_bool_false)
+
+/* Return true if the target supports conditional execution.  */
+DEFHOOK
+(have_conditional_execution,
+ "This target hook returns true if the target supports conditional execution.\n\
+This target hook is required only when the target has several different\n\
+modes and they have different conditional execution capability, such as ARM.",
+ bool, (void),
+ default_have_conditional_execution)
+
+DEFHOOK
+(gen_ccmp_first,
+ "This function prepares to emit a comparison insn for the first compare in a\n\
+ sequence of conditional comparisions.  It returns an appropriate comparison\n\
+ with @code{CC} for passing to @code{gen_ccmp_next} or @code{cbranch_optab}.\n\
+ The insns to prepare the compare are saved in @var{prep_seq} and the compare\n\
+ insns are saved in @var{gen_seq}.  They will be emitted when all the\n\
+ compares in the the conditional comparision are generated without error.\n\
+ @var{code} is the @code{rtx_code} of the compare for @var{op0} and @var{op1}.",
+ rtx, (rtx_insn **prep_seq, rtx_insn **gen_seq, int code, tree op0, tree op1),
+ NULL)
+
+DEFHOOK
+(gen_ccmp_next,
+ "This function prepares to emit a conditional comparison within a sequence\n\
+ of conditional comparisons.  It returns an appropriate comparison with\n\
+ @code{CC} for passing to @code{gen_ccmp_next} or @code{cbranch_optab}.\n\
+ The insns to prepare the compare are saved in @var{prep_seq} and the compare\n\
+ insns are saved in @var{gen_seq}.  They will be emitted when all the\n\
+ compares in the conditional comparision are generated without error.  The\n\
+ @var{prev} expression is the result of a prior call to @code{gen_ccmp_first}\n\
+ or @code{gen_ccmp_next}.  It may return @code{NULL} if the combination of\n\
+ @var{prev} and this comparison is not supported, otherwise the result must\n\
+ be appropriate for passing to @code{gen_ccmp_next} or @code{cbranch_optab}.\n\
+ @var{code} is the @code{rtx_code} of the compare for @var{op0} and @var{op1}.\n\
+ @var{bit_code} is @code{AND} or @code{IOR}, which is the op on the compares.",
+ rtx, (rtx_insn **prep_seq, rtx_insn **gen_seq, rtx prev, int cmp_code, tree op0, tree op1, int bit_code),
+ NULL)
+
+/* Return a new value for loop unroll size.  */
+DEFHOOK
+(loop_unroll_adjust,
+ "This target hook returns a new value for the number of times @var{loop}\n\
+should be unrolled. The parameter @var{nunroll} is the number of times\n\
+the loop is to be unrolled. The parameter @var{loop} is a pointer to\n\
+the loop, which is going to be checked for unrolling. This target hook\n\
+is required only when the target has special constraints like maximum\n\
+number of memory accesses.",
+ unsigned, (unsigned nunroll, struct loop *loop),
+ NULL)
+
+/* True if X is a legitimate MODE-mode immediate operand.  */
+DEFHOOK
+(legitimate_constant_p,
+ "This hook returns true if @var{x} is a legitimate constant for a\n\
+@var{mode}-mode immediate operand on the target machine.  You can assume that\n\
+@var{x} satisfies @code{CONSTANT_P}, so you need not check this.\n\
+\n\
+The default definition returns true.",
+ bool, (machine_mode mode, rtx x),
+ hook_bool_mode_rtx_true)
+
+/* True if the constant X cannot be placed in the constant pool.  */
+DEFHOOK
+(cannot_force_const_mem,
+ "This hook should return true if @var{x} is of a form that cannot (or\n\
+should not) be spilled to the constant pool.  @var{mode} is the mode\n\
+of @var{x}.\n\
+\n\
+The default version of this hook returns false.\n\
+\n\
+The primary reason to define this hook is to prevent reload from\n\
+deciding that a non-legitimate constant would be better reloaded\n\
+from the constant pool instead of spilling and reloading a register\n\
+holding the constant.  This restriction is often true of addresses\n\
+of TLS symbols for various targets.",
+ bool, (machine_mode mode, rtx x),
+ hook_bool_mode_rtx_false)
+
+DEFHOOK_UNDOC
+(cannot_copy_insn_p,
+ "True if the insn @var{x} cannot be duplicated.",
+ bool, (rtx_insn *), NULL)
+
+/* True if X is considered to be commutative.  */
+DEFHOOK
+(commutative_p,
+ "This target hook returns @code{true} if @var{x} is considered to be commutative.\n\
+Usually, this is just COMMUTATIVE_P (@var{x}), but the HP PA doesn't consider\n\
+PLUS to be commutative inside a MEM@.  @var{outer_code} is the rtx code\n\
+of the enclosing rtl, if known, otherwise it is UNKNOWN.",
+ bool, (const_rtx x, int outer_code),
+ hook_bool_const_rtx_commutative_p)
+
+/* True if ADDR is an address-expression whose effect depends
+   on the mode of the memory reference it is used in.  */
+DEFHOOK
+(mode_dependent_address_p,
+ "This hook returns @code{true} if memory address @var{addr} in address\n\
+space @var{addrspace} can have\n\
+different meanings depending on the machine mode of the memory\n\
+reference it is used for or if the address is valid for some modes\n\
+but not others.\n\
+\n\
+Autoincrement and autodecrement addresses typically have mode-dependent\n\
+effects because the amount of the increment or decrement is the size\n\
+of the operand being addressed.  Some machines have other mode-dependent\n\
+addresses.  Many RISC machines have no mode-dependent addresses.\n\
+\n\
+You may assume that @var{addr} is a valid address for the machine.\n\
+\n\
+The default version of this hook returns @code{false}.",
+ bool, (const_rtx addr, addr_space_t addrspace),
+ default_mode_dependent_address_p)
+
+/* Given an invalid address X for a given machine mode, try machine-specific
+   ways to make it legitimate.  Return X or an invalid address on failure.  */
+DEFHOOK
+(legitimize_address,
+ "This hook is given an invalid memory address @var{x} for an\n\
+operand of mode @var{mode} and should try to return a valid memory\n\
+address.\n\
+\n\
+@findex break_out_memory_refs\n\
+@var{x} will always be the result of a call to @code{break_out_memory_refs},\n\
+and @var{oldx} will be the operand that was given to that function to produce\n\
+@var{x}.\n\
+\n\
+The code of the hook should not alter the substructure of\n\
+@var{x}.  If it transforms @var{x} into a more legitimate form, it\n\
+should return the new @var{x}.\n\
+\n\
+It is not necessary for this hook to come up with a legitimate address,\n\
+with the exception of native TLS addresses (@pxref{Emulated TLS}).\n\
+The compiler has standard ways of doing so in all cases.  In fact, if\n\
+the target supports only emulated TLS, it\n\
+is safe to omit this hook or make it return @var{x} if it cannot find\n\
+a valid way to legitimize the address.  But often a machine-dependent\n\
+strategy can generate better code.",
+ rtx, (rtx x, rtx oldx, machine_mode mode),
+ default_legitimize_address)
+
+/* Given an address RTX, undo the effects of LEGITIMIZE_ADDRESS.  */
+DEFHOOK
+(delegitimize_address,
+ "This hook is used to undo the possibly obfuscating effects of the\n\
+@code{LEGITIMIZE_ADDRESS} and @code{LEGITIMIZE_RELOAD_ADDRESS} target\n\
+macros.  Some backend implementations of these macros wrap symbol\n\
+references inside an @code{UNSPEC} rtx to represent PIC or similar\n\
+addressing modes.  This target hook allows GCC's optimizers to understand\n\
+the semantics of these opaque @code{UNSPEC}s by converting them back\n\
+into their original form.",
+ rtx, (rtx x),
+ delegitimize_mem_from_attrs)
+
+/* Given an RTX, return true if it is not ok to emit it into debug info
+   section.  */
+DEFHOOK
+(const_not_ok_for_debug_p,
+ "This hook should return true if @var{x} should not be emitted into\n\
+debug sections.",
+ bool, (rtx x),
+ default_const_not_ok_for_debug_p)
+
+/* Given an address RTX, say whether it is valid.  */
+DEFHOOK
+(legitimate_address_p,
+ "A function that returns whether @var{x} (an RTX) is a legitimate memory\n\
+address on the target machine for a memory operand of mode @var{mode}.\n\
+\n\
+Legitimate addresses are defined in two variants: a strict variant and a\n\
+non-strict one.  The @var{strict} parameter chooses which variant is\n\
+desired by the caller.\n\
+\n\
+The strict variant is used in the reload pass.  It must be defined so\n\
+that any pseudo-register that has not been allocated a hard register is\n\
+considered a memory reference.  This is because in contexts where some\n\
+kind of register is required, a pseudo-register with no hard register\n\
+must be rejected.  For non-hard registers, the strict variant should look\n\
+up the @code{reg_renumber} array; it should then proceed using the hard\n\
+register number in the array, or treat the pseudo as a memory reference\n\
+if the array holds @code{-1}.\n\
+\n\
+The non-strict variant is used in other passes.  It must be defined to\n\
+accept all pseudo-registers in every context where some kind of\n\
+register is required.\n\
+\n\
+Normally, constant addresses which are the sum of a @code{symbol_ref}\n\
+and an integer are stored inside a @code{const} RTX to mark them as\n\
+constant.  Therefore, there is no need to recognize such sums\n\
+specifically as legitimate addresses.  Normally you would simply\n\
+recognize any @code{const} as legitimate.\n\
+\n\
+Usually @code{PRINT_OPERAND_ADDRESS} is not prepared to handle constant\n\
+sums that are not marked with  @code{const}.  It assumes that a naked\n\
+@code{plus} indicates indexing.  If so, then you @emph{must} reject such\n\
+naked constant sums as illegitimate addresses, so that none of them will\n\
+be given to @code{PRINT_OPERAND_ADDRESS}.\n\
+\n\
+@cindex @code{TARGET_ENCODE_SECTION_INFO} and address validation\n\
+On some machines, whether a symbolic address is legitimate depends on\n\
+the section that the address refers to.  On these machines, define the\n\
+target hook @code{TARGET_ENCODE_SECTION_INFO} to store the information\n\
+into the @code{symbol_ref}, and then check for it here.  When you see a\n\
+@code{const}, you will have to look inside it to find the\n\
+@code{symbol_ref} in order to determine the section.  @xref{Assembler\n\
+Format}.\n\
+\n\
+@cindex @code{GO_IF_LEGITIMATE_ADDRESS}\n\
+Some ports are still using a deprecated legacy substitute for\n\
+this hook, the @code{GO_IF_LEGITIMATE_ADDRESS} macro.  This macro\n\
+has this syntax:\n\
+\n\
+@example\n\
+#define GO_IF_LEGITIMATE_ADDRESS (@var{mode}, @var{x}, @var{label})\n\
+@end example\n\
+\n\
+@noindent\n\
+and should @code{goto @var{label}} if the address @var{x} is a valid\n\
+address on the target machine for a memory operand of mode @var{mode}.\n\
+\n\
+@findex REG_OK_STRICT\n\
+Compiler source files that want to use the strict variant of this\n\
+macro define the macro @code{REG_OK_STRICT}.  You should use an\n\
+@code{#ifdef REG_OK_STRICT} conditional to define the strict variant in\n\
+that case and the non-strict variant otherwise.\n\
+\n\
+Using the hook is usually simpler because it limits the number of\n\
+files that are recompiled when changes are made.",
+ bool, (machine_mode mode, rtx x, bool strict),
+ default_legitimate_address_p)
+
+/* True if the given constant can be put into an object_block.  */
+DEFHOOK
+(use_blocks_for_constant_p,
+ "This hook should return true if pool entries for constant @var{x} can\n\
+be placed in an @code{object_block} structure.  @var{mode} is the mode\n\
+of @var{x}.\n\
+\n\
+The default version returns false for all constants.",
+ bool, (machine_mode mode, const_rtx x),
+ hook_bool_mode_const_rtx_false)
+
+/* True if the given decl can be put into an object_block.  */
+DEFHOOK
+(use_blocks_for_decl_p,
+ "This hook should return true if pool entries for @var{decl} should\n\
+be placed in an @code{object_block} structure.\n\
+\n\
+The default version returns true for all decls.",
+ bool, (const_tree decl),
+ hook_bool_const_tree_true)
+
+/* The minimum and maximum byte offsets for anchored addresses.  */
+DEFHOOKPOD
+(min_anchor_offset,
+ "The minimum offset that should be applied to a section anchor.\n\
+On most targets, it should be the smallest offset that can be\n\
+applied to a base register while still giving a legitimate address\n\
+for every mode.  The default value is 0.",
+ HOST_WIDE_INT, 0)
+
+DEFHOOKPOD
+(max_anchor_offset,
+ "Like @code{TARGET_MIN_ANCHOR_OFFSET}, but the maximum (inclusive)\n\
+offset that should be applied to section anchors.  The default\n\
+value is 0.",
+ HOST_WIDE_INT, 0)
+
+/* True if section anchors can be used to access the given symbol.  */
+DEFHOOK
+(use_anchors_for_symbol_p,
+ "Return true if GCC should attempt to use anchors to access @code{SYMBOL_REF}\n\
+@var{x}.  You can assume @samp{SYMBOL_REF_HAS_BLOCK_INFO_P (@var{x})} and\n\
+@samp{!SYMBOL_REF_ANCHOR_P (@var{x})}.\n\
+\n\
+The default version is correct for most targets, but you might need to\n\
+intercept this hook to handle things like target-specific attributes\n\
+or target-specific sections.",
+ bool, (const_rtx x),
+ default_use_anchors_for_symbol_p)
+
+/* True if target supports indirect functions.  */
+DEFHOOK
+(has_ifunc_p,
+ "It returns true if the target supports GNU indirect functions.\n\
+The support includes the assembler, linker and dynamic linker.\n\
+The default value of this hook is based on target's libc.",
+ bool, (void),
+ default_has_ifunc_p)
+
+/* True if it is OK to do sibling call optimization for the specified
+   call expression EXP.  DECL will be the called function, or NULL if
+   this is an indirect call.  */
+DEFHOOK
+(function_ok_for_sibcall,
+ "True if it is OK to do sibling call optimization for the specified\n\
+call expression @var{exp}.  @var{decl} will be the called function,\n\
+or @code{NULL} if this is an indirect call.\n\
+\n\
+It is not uncommon for limitations of calling conventions to prevent\n\
+tail calls to functions outside the current unit of translation, or\n\
+during PIC compilation.  The hook is used to enforce these restrictions,\n\
+as the @code{sibcall} md pattern cannot fail, or fall over to a\n\
+``normal'' call.  The criteria for successful sibling call optimization\n\
+may vary greatly between different architectures.",
+ bool, (tree decl, tree exp),
+ hook_bool_tree_tree_false)
+
+/* Establish appropriate back-end context for processing the function
+   FNDECL.  The argument might be NULL to indicate processing at top
+   level, outside of any function scope.  */
+DEFHOOK
+(set_current_function,
+ "The compiler invokes this hook whenever it changes its current function\n\
+context (@code{cfun}).  You can define this function if\n\
+the back end needs to perform any initialization or reset actions on a\n\
+per-function basis.  For example, it may be used to implement function\n\
+attributes that affect register usage or code generation patterns.\n\
+The argument @var{decl} is the declaration for the new function context,\n\
+and may be null to indicate that the compiler has left a function context\n\
+and is returning to processing at the top level.\n\
+The default hook function does nothing.\n\
+\n\
+GCC sets @code{cfun} to a dummy function context during initialization of\n\
+some parts of the back end.  The hook function is not invoked in this\n\
+situation; you need not worry about the hook being invoked recursively,\n\
+or when the back end is in a partially-initialized state.\n\
+@code{cfun} might be @code{NULL} to indicate processing at top level,\n\
+outside of any function scope.",
+ void, (tree decl), hook_void_tree)
+
+/* True if EXP should be placed in a "small data" section.  */
+DEFHOOK
+(in_small_data_p,
+ "Returns true if @var{exp} should be placed into a ``small data'' section.\n\
+The default version of this hook always returns false.",
+ bool, (const_tree exp),
+ hook_bool_const_tree_false)
+
+/* True if EXP names an object for which name resolution must resolve
+   to the current executable or shared library.  */
+DEFHOOK
+(binds_local_p,
+ "Returns true if @var{exp} names an object for which name resolution\n\
+rules must resolve to the current ``module'' (dynamic shared library\n\
+or executable image).\n\
+\n\
+The default version of this hook implements the name resolution rules\n\
+for ELF, which has a looser model of global name binding than other\n\
+currently supported object file formats.",
+ bool, (const_tree exp),
+ default_binds_local_p)
+
+/* Check if profiling code is before or after prologue.  */
+DEFHOOK
+(profile_before_prologue,
+ "It returns true if target wants profile code emitted before prologue.\n\n\
+The default version of this hook use the target macro\n\
+@code{PROFILE_BEFORE_PROLOGUE}.",
+ bool, (void),
+ default_profile_before_prologue)
+
+/* Return true if a leaf function should stay leaf even with profiling
+   enabled.  */
+DEFHOOK
+(keep_leaf_when_profiled,
+ "This target hook returns true if the target wants the leaf flag for\
+ the current function to stay true even if it calls mcount.  This might\
+ make sense for targets using the leaf flag only to determine whether a\
+ stack frame needs to be generated or not and for which the call to\
+ mcount is generated before the function prologue.",
+ bool, (void),
+ default_keep_leaf_when_profiled)
+
+/* Modify and return the identifier of a DECL's external name,
+   originally identified by ID, as required by the target,
+   (eg, append @nn to windows32 stdcall function names).
+   The default is to return ID without modification. */
+DEFHOOK
+(mangle_decl_assembler_name,
+ "Define this hook if you need to postprocess the assembler name generated\n\
+by target-independent code.  The @var{id} provided to this hook will be\n\
+the computed name (e.g., the macro @code{DECL_NAME} of the @var{decl} in C,\n\
+or the mangled name of the @var{decl} in C++).  The return value of the\n\
+hook is an @code{IDENTIFIER_NODE} for the appropriate mangled name on\n\
+your target system.  The default implementation of this hook just\n\
+returns the @var{id} provided.",
+ tree, (tree decl, tree  id),
+ default_mangle_decl_assembler_name)
+
+/* Do something target-specific to record properties of the DECL into
+   the associated SYMBOL_REF.  */
+DEFHOOK
+(encode_section_info,
+ "Define this hook if references to a symbol or a constant must be\n\
+treated differently depending on something about the variable or\n\
+function named by the symbol (such as what section it is in).\n\
+\n\
+The hook is executed immediately after rtl has been created for\n\
+@var{decl}, which may be a variable or function declaration or\n\
+an entry in the constant pool.  In either case, @var{rtl} is the\n\
+rtl in question.  Do @emph{not} use @code{DECL_RTL (@var{decl})}\n\
+in this hook; that field may not have been initialized yet.\n\
+\n\
+In the case of a constant, it is safe to assume that the rtl is\n\
+a @code{mem} whose address is a @code{symbol_ref}.  Most decls\n\
+will also have this form, but that is not guaranteed.  Global\n\
+register variables, for instance, will have a @code{reg} for their\n\
+rtl.  (Normally the right thing to do with such unusual rtl is\n\
+leave it alone.)\n\
+\n\
+The @var{new_decl_p} argument will be true if this is the first time\n\
+that @code{TARGET_ENCODE_SECTION_INFO} has been invoked on this decl.  It will\n\
+be false for subsequent invocations, which will happen for duplicate\n\
+declarations.  Whether or not anything must be done for the duplicate\n\
+declaration depends on whether the hook examines @code{DECL_ATTRIBUTES}.\n\
+@var{new_decl_p} is always true when the hook is called for a constant.\n\
+\n\
+@cindex @code{SYMBOL_REF_FLAG}, in @code{TARGET_ENCODE_SECTION_INFO}\n\
+The usual thing for this hook to do is to record flags in the\n\
+@code{symbol_ref}, using @code{SYMBOL_REF_FLAG} or @code{SYMBOL_REF_FLAGS}.\n\
+Historically, the name string was modified if it was necessary to\n\
+encode more than one bit of information, but this practice is now\n\
+discouraged; use @code{SYMBOL_REF_FLAGS}.\n\
+\n\
+The default definition of this hook, @code{default_encode_section_info}\n\
+in @file{varasm.c}, sets a number of commonly-useful bits in\n\
+@code{SYMBOL_REF_FLAGS}.  Check whether the default does what you need\n\
+before overriding it.",
+ void, (tree decl, rtx rtl, int new_decl_p),
+ default_encode_section_info)
+
+/* Undo the effects of encode_section_info on the symbol string.  */
+DEFHOOK
+(strip_name_encoding,
+ "Decode @var{name} and return the real name part, sans\n\
+the characters that @code{TARGET_ENCODE_SECTION_INFO}\n\
+may have added.",
+ const char *, (const char *name),
+ default_strip_name_encoding)
+
+/* If shift optabs for MODE are known to always truncate the shift count,
+   return the mask that they apply.  Return 0 otherwise.  */
+DEFHOOK
+(shift_truncation_mask,
+ "This function describes how the standard shift patterns for @var{mode}\n\
+deal with shifts by negative amounts or by more than the width of the mode.\n\
+@xref{shift patterns}.\n\
+\n\
+On many machines, the shift patterns will apply a mask @var{m} to the\n\
+shift count, meaning that a fixed-width shift of @var{x} by @var{y} is\n\
+equivalent to an arbitrary-width shift of @var{x} by @var{y & m}.  If\n\
+this is true for mode @var{mode}, the function should return @var{m},\n\
+otherwise it should return 0.  A return value of 0 indicates that no\n\
+particular behavior is guaranteed.\n\
+\n\
+Note that, unlike @code{SHIFT_COUNT_TRUNCATED}, this function does\n\
+@emph{not} apply to general shift rtxes; it applies only to instructions\n\
+that are generated by the named shift patterns.\n\
+\n\
+The default implementation of this function returns\n\
+@code{GET_MODE_BITSIZE (@var{mode}) - 1} if @code{SHIFT_COUNT_TRUNCATED}\n\
+and 0 otherwise.  This definition is always safe, but if\n\
+@code{SHIFT_COUNT_TRUNCATED} is false, and some shift patterns\n\
+nevertheless truncate the shift count, you may get better code\n\
+by overriding it.",
+ unsigned HOST_WIDE_INT, (machine_mode mode),
+ default_shift_truncation_mask)
+
+/* Return the number of divisions in the given MODE that should be present,
+   so that it is profitable to turn the division into a multiplication by
+   the reciprocal.  */
+DEFHOOK
+(min_divisions_for_recip_mul,
+ "When @option{-ffast-math} is in effect, GCC tries to optimize\n\
+divisions by the same divisor, by turning them into multiplications by\n\
+the reciprocal.  This target hook specifies the minimum number of divisions\n\
+that should be there for GCC to perform the optimization for a variable\n\
+of mode @var{mode}.  The default implementation returns 3 if the machine\n\
+has an instruction for the division, and 2 if it does not.",
+ unsigned int, (machine_mode mode),
+ default_min_divisions_for_recip_mul)
+
+DEFHOOK
+(truly_noop_truncation,
+ "This hook returns true if it is safe to ``convert'' a value of\n\
+@var{inprec} bits to one of @var{outprec} bits (where @var{outprec} is\n\
+smaller than @var{inprec}) by merely operating on it as if it had only\n\
+@var{outprec} bits.  The default returns true unconditionally, which\n\
+is correct for most machines.\n\
+\n\
+If @code{TARGET_MODES_TIEABLE_P} returns false for a pair of modes,\n\
+suboptimal code can result if this hook returns true for the corresponding\n\
+mode sizes.  Making this hook return false in such cases may improve things.",
+ bool, (poly_uint64 outprec, poly_uint64 inprec),
+ hook_bool_puint64_puint64_true)
+
+/* If the representation of integral MODE is such that values are
+   always sign-extended to a wider mode MODE_REP then return
+   SIGN_EXTEND.  Return UNKNOWN otherwise.  */
+/* Note that the return type ought to be RTX_CODE, but that's not
+   necessarily defined at this point.  */
+DEFHOOK
+(mode_rep_extended,
+ "The representation of an integral mode can be such that the values\n\
+are always extended to a wider integral mode.  Return\n\
+@code{SIGN_EXTEND} if values of @var{mode} are represented in\n\
+sign-extended form to @var{rep_mode}.  Return @code{UNKNOWN}\n\
+otherwise.  (Currently, none of the targets use zero-extended\n\
+representation this way so unlike @code{LOAD_EXTEND_OP},\n\
+@code{TARGET_MODE_REP_EXTENDED} is expected to return either\n\
+@code{SIGN_EXTEND} or @code{UNKNOWN}.  Also no target extends\n\
+@var{mode} to @var{rep_mode} so that @var{rep_mode} is not the next\n\
+widest integral mode and currently we take advantage of this fact.)\n\
+\n\
+Similarly to @code{LOAD_EXTEND_OP} you may return a non-@code{UNKNOWN}\n\
+value even if the extension is not performed on certain hard registers\n\
+as long as for the @code{REGNO_REG_CLASS} of these hard registers\n\
+@code{TARGET_CAN_CHANGE_MODE_CLASS} returns false.\n\
+\n\
+Note that @code{TARGET_MODE_REP_EXTENDED} and @code{LOAD_EXTEND_OP}\n\
+describe two related properties.  If you define\n\
+@code{TARGET_MODE_REP_EXTENDED (mode, word_mode)} you probably also want\n\
+to define @code{LOAD_EXTEND_OP (mode)} to return the same type of\n\
+extension.\n\
+\n\
+In order to enforce the representation of @code{mode},\n\
+@code{TARGET_TRULY_NOOP_TRUNCATION} should return false when truncating to\n\
+@code{mode}.",
+ int, (scalar_int_mode mode, scalar_int_mode rep_mode),
+ default_mode_rep_extended)
+
+ DEFHOOK
+(setjmp_preserves_nonvolatile_regs_p,
+ "On some targets, it is assumed that the compiler will spill all pseudos\n\
+  that are live across a call to @code{setjmp}, while other targets treat\n\
+  @code{setjmp} calls as normal function calls.\n\
+  \n\
+  This hook returns false if @code{setjmp} calls do not preserve all\n\
+  non-volatile registers so that gcc that must spill all pseudos that are\n\
+  live across @code{setjmp} calls.  Define this to return true if the\n\
+  target does not need to spill all pseudos live across @code{setjmp} calls.\n\
+  The default implementation conservatively assumes all pseudos must be\n\
+  spilled across @code{setjmp} calls.",
+ bool, (void),
+ hook_bool_void_false)
+
+/* True if MODE is valid for a pointer in __attribute__((mode("MODE"))).  */
+DEFHOOK
+(valid_pointer_mode,
+ "Define this to return nonzero if the port can handle pointers\n\
+with machine mode @var{mode}.  The default version of this\n\
+hook returns true for both @code{ptr_mode} and @code{Pmode}.",
+ bool, (scalar_int_mode mode),
+ default_valid_pointer_mode)
+
+/* Disambiguate with errno.  */
+DEFHOOK
+(ref_may_alias_errno,
+ "Define this to return nonzero if the memory reference @var{ref}\
+  may alias with the system C library errno location.  The default\
+  version of this hook assumes the system C library errno location\
+  is either a declaration of type int or accessed by dereferencing\
+  a pointer to int.",
+ bool, (struct ao_ref *ref),
+ default_ref_may_alias_errno)
+
+/* Support for named address spaces.  */
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_ADDR_SPACE_"
+HOOK_VECTOR (TARGET_ADDR_SPACE_HOOKS, addr_space)
+
+/* MODE to use for a pointer into another address space.  */
+DEFHOOK
+(pointer_mode,
+ "Define this to return the machine mode to use for pointers to\n\
+@var{address_space} if the target supports named address spaces.\n\
+The default version of this hook returns @code{ptr_mode}.",
+ scalar_int_mode, (addr_space_t address_space),
+ default_addr_space_pointer_mode)
+
+/* MODE to use for an address in another address space.  */
+DEFHOOK
+(address_mode,
+ "Define this to return the machine mode to use for addresses in\n\
+@var{address_space} if the target supports named address spaces.\n\
+The default version of this hook returns @code{Pmode}.",
+ scalar_int_mode, (addr_space_t address_space),
+ default_addr_space_address_mode)
+
+/* True if MODE is valid for a pointer in __attribute__((mode("MODE")))
+   in another address space.  */
+DEFHOOK
+(valid_pointer_mode,
+ "Define this to return nonzero if the port can handle pointers\n\
+with machine mode @var{mode} to address space @var{as}.  This target\n\
+hook is the same as the @code{TARGET_VALID_POINTER_MODE} target hook,\n\
+except that it includes explicit named address space support.  The default\n\
+version of this hook returns true for the modes returned by either the\n\
+@code{TARGET_ADDR_SPACE_POINTER_MODE} or @code{TARGET_ADDR_SPACE_ADDRESS_MODE}\n\
+target hooks for the given address space.",
+ bool, (scalar_int_mode mode, addr_space_t as),
+ default_addr_space_valid_pointer_mode)
+
+/* True if an address is a valid memory address to a given named address
+   space for a given mode.  */
+DEFHOOK
+(legitimate_address_p,
+ "Define this to return true if @var{exp} is a valid address for mode\n\
+@var{mode} in the named address space @var{as}.  The @var{strict}\n\
+parameter says whether strict addressing is in effect after reload has\n\
+finished.  This target hook is the same as the\n\
+@code{TARGET_LEGITIMATE_ADDRESS_P} target hook, except that it includes\n\
+explicit named address space support.",
+ bool, (machine_mode mode, rtx exp, bool strict, addr_space_t as),
+ default_addr_space_legitimate_address_p)
+
+/* Return an updated address to convert an invalid pointer to a named
+   address space to a valid one.  If NULL_RTX is returned use machine
+   independent methods to make the address valid.  */
+DEFHOOK
+(legitimize_address,
+ "Define this to modify an invalid address @var{x} to be a valid address\n\
+with mode @var{mode} in the named address space @var{as}.  This target\n\
+hook is the same as the @code{TARGET_LEGITIMIZE_ADDRESS} target hook,\n\
+except that it includes explicit named address space support.",
+ rtx, (rtx x, rtx oldx, machine_mode mode, addr_space_t as),
+ default_addr_space_legitimize_address)
+
+/* True if one named address space is a subset of another named address. */
+DEFHOOK
+(subset_p,
+ "Define this to return whether the @var{subset} named address space is\n\
+contained within the @var{superset} named address space.  Pointers to\n\
+a named address space that is a subset of another named address space\n\
+will be converted automatically without a cast if used together in\n\
+arithmetic operations.  Pointers to a superset address space can be\n\
+converted to pointers to a subset address space via explicit casts.",
+ bool, (addr_space_t subset, addr_space_t superset),
+ default_addr_space_subset_p)
+
+/* True if 0 is a valid address in the address space, or false if
+   0 is a NULL in the address space.  */
+DEFHOOK
+(zero_address_valid,
+ "Define this to modify the default handling of address 0 for the\n\
+address space.  Return true if 0 should be considered a valid address.",
+ bool, (addr_space_t as),
+ default_addr_space_zero_address_valid)
+
+/* Function to convert an rtl expression from one address space to another.  */
+DEFHOOK
+(convert,
+ "Define this to convert the pointer expression represented by the RTL\n\
+@var{op} with type @var{from_type} that points to a named address\n\
+space to a new pointer expression with type @var{to_type} that points\n\
+to a different named address space.  When this hook it called, it is\n\
+guaranteed that one of the two address spaces is a subset of the other,\n\
+as determined by the @code{TARGET_ADDR_SPACE_SUBSET_P} target hook.",
+ rtx, (rtx op, tree from_type, tree to_type),
+ default_addr_space_convert)
+
+/* Function to encode an address space into dwarf.  */
+DEFHOOK
+(debug,
+ "Define this to define how the address space is encoded in dwarf.\n\
+The result is the value to be used with @code{DW_AT_address_class}.",
+ int, (addr_space_t as),
+ default_addr_space_debug)
+
+/* Function to emit custom diagnostic if an address space is used.  */
+DEFHOOK
+(diagnose_usage,
+ "Define this hook if the availability of an address space depends on\n\
+command line options and some diagnostics should be printed when the\n\
+address space is used.  This hook is called during parsing and allows\n\
+to emit a better diagnostic compared to the case where the address space\n\
+was not registered with @code{c_register_addr_space}.  @var{as} is\n\
+the address space as registered with @code{c_register_addr_space}.\n\
+@var{loc} is the location of the address space qualifier token.\n\
+The default implementation does nothing.",
+ void, (addr_space_t as, location_t loc),
+ default_addr_space_diagnose_usage)
+
+HOOK_VECTOR_END (addr_space)
+
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_"
+
+DEFHOOK
+(static_rtx_alignment,
+ "This hook returns the preferred alignment in bits for a\n\
+statically-allocated rtx, such as a constant pool entry.  @var{mode}\n\
+is the mode of the rtx.  The default implementation returns\n\
+@samp{GET_MODE_ALIGNMENT (@var{mode})}.",
+ HOST_WIDE_INT, (machine_mode mode),
+ default_static_rtx_alignment)
+
+DEFHOOK
+(constant_alignment,
+ "This hook returns the alignment in bits of a constant that is being\n\
+placed in memory.  @var{constant} is the constant and @var{basic_align}\n\
+is the alignment that the object would ordinarily have.\n\
+\n\
+The default definition just returns @var{basic_align}.\n\
+\n\
+The typical use of this hook is to increase alignment for string\n\
+constants to be word aligned so that @code{strcpy} calls that copy\n\
+constants can be done inline.  The function\n\
+@code{constant_alignment_word_strings} provides such a definition.",
+ HOST_WIDE_INT, (const_tree constant, HOST_WIDE_INT basic_align),
+ default_constant_alignment)
+
+DEFHOOK
+(translate_mode_attribute,
+ "Define this hook if during mode attribute processing, the port should\n\
+translate machine_mode @var{mode} to another mode.  For example, rs6000's\n\
+@code{KFmode}, when it is the same as @code{TFmode}.\n\
+\n\
+The default version of the hook returns that mode that was passed in.",
+ machine_mode, (machine_mode mode),
+ default_translate_mode_attribute)
+
+/* True if MODE is valid for the target.  By "valid", we mean able to
+   be manipulated in non-trivial ways.  In particular, this means all
+   the arithmetic is supported.  */
+DEFHOOK
+(scalar_mode_supported_p,
+ "Define this to return nonzero if the port is prepared to handle\n\
+insns involving scalar mode @var{mode}.  For a scalar mode to be\n\
+considered supported, all the basic arithmetic and comparisons\n\
+must work.\n\
+\n\
+The default version of this hook returns true for any mode\n\
+required to handle the basic C types (as defined by the port).\n\
+Included here are the double-word arithmetic supported by the\n\
+code in @file{optabs.c}.",
+ bool, (scalar_mode mode),
+ default_scalar_mode_supported_p)
+
+/* Similarly for vector modes.  "Supported" here is less strict.  At
+   least some operations are supported; need to check optabs or builtins
+   for further details.  */
+DEFHOOK
+(vector_mode_supported_p,
+ "Define this to return nonzero if the port is prepared to handle\n\
+insns involving vector mode @var{mode}.  At the very least, it\n\
+must have move patterns for this mode.",
+ bool, (machine_mode mode),
+ hook_bool_mode_false)
+
+DEFHOOK
+(vector_alignment,
+ "This hook can be used to define the alignment for a vector of type\n\
+@var{type}, in order to comply with a platform ABI.  The default is to\n\
+require natural alignment for vector types.  The alignment returned by\n\
+this hook must be a power-of-two multiple of the default alignment of\n\
+the vector element type.",
+ HOST_WIDE_INT, (const_tree type),
+ default_vector_alignment)
+
+DEFHOOK
+(array_mode,
+ "Return the mode that GCC should use for an array that has\n\
+@var{nelems} elements, with each element having mode @var{mode}.\n\
+Return no mode if the target has no special requirements.  In the\n\
+latter case, GCC looks for an integer mode of the appropriate size\n\
+if available and uses BLKmode otherwise.  Usually the search for the\n\
+integer mode is limited to @code{MAX_FIXED_MODE_SIZE}, but the\n\
+@code{TARGET_ARRAY_MODE_SUPPORTED_P} hook allows a larger mode to be\n\
+used in specific cases.\n\
+\n\
+The main use of this hook is to specify that an array of vectors should\n\
+also have a vector mode.  The default implementation returns no mode.",
+ opt_machine_mode, (machine_mode mode, unsigned HOST_WIDE_INT nelems),
+ hook_optmode_mode_uhwi_none)
+
+/* True if we should try to use a scalar mode to represent an array,
+   overriding the usual MAX_FIXED_MODE limit.  */
+DEFHOOK
+(array_mode_supported_p,
+ "Return true if GCC should try to use a scalar mode to store an array\n\
+of @var{nelems} elements, given that each element has mode @var{mode}.\n\
+Returning true here overrides the usual @code{MAX_FIXED_MODE} limit\n\
+and allows GCC to use any defined integer mode.\n\
+\n\
+One use of this hook is to support vector load and store operations\n\
+that operate on several homogeneous vectors.  For example, ARM NEON\n\
+has operations like:\n\
+\n\
+@smallexample\n\
+int8x8x3_t vld3_s8 (const int8_t *)\n\
+@end smallexample\n\
+\n\
+where the return type is defined as:\n\
+\n\
+@smallexample\n\
+typedef struct int8x8x3_t\n\
+@{\n\
+  int8x8_t val[3];\n\
+@} int8x8x3_t;\n\
+@end smallexample\n\
+\n\
+If this hook allows @code{val} to have a scalar mode, then\n\
+@code{int8x8x3_t} can have the same mode.  GCC can then store\n\
+@code{int8x8x3_t}s in registers rather than forcing them onto the stack.",
+ bool, (machine_mode mode, unsigned HOST_WIDE_INT nelems),
+ hook_bool_mode_uhwi_false)
+
+DEFHOOK
+(libgcc_floating_mode_supported_p,
+ "Define this to return nonzero if libgcc provides support for the \n\
+floating-point mode @var{mode}, which is known to pass \n\
+@code{TARGET_SCALAR_MODE_SUPPORTED_P}.  The default version of this \n\
+hook returns true for all of @code{SFmode}, @code{DFmode}, \n\
+@code{XFmode} and @code{TFmode}, if such modes exist.",
+ bool, (scalar_float_mode mode),
+ default_libgcc_floating_mode_supported_p)
+
+DEFHOOK
+(floatn_mode,
+ "Define this to return the machine mode to use for the type \n\
+@code{_Float@var{n}}, if @var{extended} is false, or the type \n\
+@code{_Float@var{n}x}, if @var{extended} is true.  If such a type is not\n\
+supported, return @code{opt_scalar_float_mode ()}.  The default version of\n\
+this hook returns @code{SFmode} for @code{_Float32}, @code{DFmode} for\n\
+@code{_Float64} and @code{_Float32x} and @code{TFmode} for \n\
+@code{_Float128}, if those modes exist and satisfy the requirements for \n\
+those types and pass @code{TARGET_SCALAR_MODE_SUPPORTED_P} and \n\
+@code{TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P}; for @code{_Float64x}, it \n\
+returns the first of @code{XFmode} and @code{TFmode} that exists and \n\
+satisfies the same requirements; for other types, it returns \n\
+@code{opt_scalar_float_mode ()}.  The hook is only called for values\n\
+of @var{n} and @var{extended} that are valid according to\n\
+ISO/IEC TS 18661-3:2015; that is, @var{n} is one of 32, 64, 128, or,\n\
+if @var{extended} is false, 16 or greater than 128 and a multiple of 32.",
+ opt_scalar_float_mode, (int n, bool extended),
+ default_floatn_mode)
+
+DEFHOOK
+(floatn_builtin_p,
+  "Define this to return true if the @code{_Float@var{n}} and\n\
+@code{_Float@var{n}x} built-in functions should implicitly enable the\n\
+built-in function without the @code{__builtin_} prefix in addition to the\n\
+normal built-in function with the @code{__builtin_} prefix.  The default is\n\
+to only enable built-in functions without the @code{__builtin_} prefix for\n\
+the GNU C langauge.  In strict ANSI/ISO mode, the built-in function without\n\
+the @code{__builtin_} prefix is not enabled.  The argument @code{FUNC} is the\n\
+@code{enum built_in_function} id of the function to be enabled.",
+ bool, (int func),
+ default_floatn_builtin_p)
+
+/* Compute cost of moving data from a register of class FROM to one of
+   TO, using MODE.  */
+DEFHOOK
+(register_move_cost,
+ "This target hook should return the cost of moving data of mode @var{mode}\n\
+from a register in class @var{from} to one in class @var{to}.  The classes\n\
+are expressed using the enumeration values such as @code{GENERAL_REGS}.\n\
+A value of 2 is the default; other values are interpreted relative to\n\
+that.\n\
+\n\
+It is not required that the cost always equal 2 when @var{from} is the\n\
+same as @var{to}; on some machines it is expensive to move between\n\
+registers if they are not general registers.\n\
+\n\
+If reload sees an insn consisting of a single @code{set} between two\n\
+hard registers, and if @code{TARGET_REGISTER_MOVE_COST} applied to their\n\
+classes returns a value of 2, reload does not check to ensure that the\n\
+constraints of the insn are met.  Setting a cost of other than 2 will\n\
+allow reload to verify that the constraints are met.  You should do this\n\
+if the @samp{mov@var{m}} pattern's constraints do not allow such copying.\n\
+\n\
+The default version of this function returns 2.",
+ int, (machine_mode mode, reg_class_t from, reg_class_t to),
+ default_register_move_cost)
+
+/* Compute cost of moving registers to/from memory.  */
+/* ??? Documenting the argument types for this hook requires a GFDL
+   license grant.  Also, the documentation uses a different name for RCLASS.  */
+DEFHOOK
+(memory_move_cost,
+ "This target hook should return the cost of moving data of mode @var{mode}\n\
+between a register of class @var{rclass} and memory; @var{in} is @code{false}\n\
+if the value is to be written to memory, @code{true} if it is to be read in.\n\
+This cost is relative to those in @code{TARGET_REGISTER_MOVE_COST}.\n\
+If moving between registers and memory is more expensive than between two\n\
+registers, you should add this target hook to express the relative cost.\n\
+\n\
+If you do not add this target hook, GCC uses a default cost of 4 plus\n\
+the cost of copying via a secondary reload register, if one is\n\
+needed.  If your machine requires a secondary reload register to copy\n\
+between memory and a register of @var{rclass} but the reload mechanism is\n\
+more complex than copying via an intermediate, use this target hook to\n\
+reflect the actual cost of the move.\n\
+\n\
+GCC defines the function @code{memory_move_secondary_cost} if\n\
+secondary reloads are needed.  It computes the costs due to copying via\n\
+a secondary register.  If your machine copies from memory using a\n\
+secondary register in the conventional way but the default base value of\n\
+4 is not correct for your machine, use this target hook to add some other\n\
+value to the result of that function.  The arguments to that function\n\
+are the same as to this target hook.",
+ int, (machine_mode mode, reg_class_t rclass, bool in),
+ default_memory_move_cost)
+
+DEFHOOK
+(use_by_pieces_infrastructure_p,
+ "GCC will attempt several strategies when asked to copy between\n\
+two areas of memory, or to set, clear or store to memory, for example\n\
+when copying a @code{struct}. The @code{by_pieces} infrastructure\n\
+implements such memory operations as a sequence of load, store or move\n\
+insns.  Alternate strategies are to expand the\n\
+@code{movmem} or @code{setmem} optabs, to emit a library call, or to emit\n\
+unit-by-unit, loop-based operations.\n\
+\n\
+This target hook should return true if, for a memory operation with a\n\
+given @var{size} and @var{alignment}, using the @code{by_pieces}\n\
+infrastructure is expected to result in better code generation.\n\
+Both @var{size} and @var{alignment} are measured in terms of storage\n\
+units.\n\
+\n\
+The parameter @var{op} is one of: @code{CLEAR_BY_PIECES},\n\
+@code{MOVE_BY_PIECES}, @code{SET_BY_PIECES}, @code{STORE_BY_PIECES} or\n\
+@code{COMPARE_BY_PIECES}.  These describe the type of memory operation\n\
+under consideration.\n\
+\n\
+The parameter @var{speed_p} is true if the code is currently being\n\
+optimized for speed rather than size.\n\
+\n\
+Returning true for higher values of @var{size} can improve code generation\n\
+for speed if the target does not provide an implementation of the\n\
+@code{movmem} or @code{setmem} standard names, if the @code{movmem} or\n\
+@code{setmem} implementation would be more expensive than a sequence of\n\
+insns, or if the overhead of a library call would dominate that of\n\
+the body of the memory operation.\n\
+\n\
+Returning true for higher values of @code{size} may also cause an increase\n\
+in code size, for example where the number of insns emitted to perform a\n\
+move would be greater than that of a library call.",
+ bool, (unsigned HOST_WIDE_INT size, unsigned int alignment,
+        enum by_pieces_operation op, bool speed_p),
+ default_use_by_pieces_infrastructure_p)
+
+DEFHOOK
+(compare_by_pieces_branch_ratio,
+ "When expanding a block comparison in MODE, gcc can try to reduce the\n\
+number of branches at the expense of more memory operations.  This hook\n\
+allows the target to override the default choice.  It should return the\n\
+factor by which branches should be reduced over the plain expansion with\n\
+one comparison per @var{mode}-sized piece.  A port can also prevent a\n\
+particular mode from being used for block comparisons by returning a\n\
+negative number from this hook.",
+ int, (machine_mode mode),
+ default_compare_by_pieces_branch_ratio)
+
+DEFHOOK
+(slow_unaligned_access,
+ "This hook returns true if memory accesses described by the\n\
+@var{mode} and @var{alignment} parameters have a cost many times greater\n\
+than aligned accesses, for example if they are emulated in a trap handler.\n\
+This hook is invoked only for unaligned accesses, i.e.@: when\n\
+@code{@var{alignment} < GET_MODE_ALIGNMENT (@var{mode})}.\n\
+\n\
+When this hook returns true, the compiler will act as if\n\
+@code{STRICT_ALIGNMENT} were true when generating code for block\n\
+moves.  This can cause significantly more instructions to be produced.\n\
+Therefore, do not make this hook return true if unaligned accesses only\n\
+add a cycle or two to the time for a memory access.\n\
+\n\
+The hook must return true whenever @code{STRICT_ALIGNMENT} is true.\n\
+The default implementation returns @code{STRICT_ALIGNMENT}.",
+ bool, (machine_mode mode, unsigned int align),
+ default_slow_unaligned_access)
+
+DEFHOOK
+(optab_supported_p,
+ "Return true if the optimizers should use optab @var{op} with\n\
+modes @var{mode1} and @var{mode2} for optimization type @var{opt_type}.\n\
+The optab is known to have an associated @file{.md} instruction\n\
+whose C condition is true.  @var{mode2} is only meaningful for conversion\n\
+optabs; for direct optabs it is a copy of @var{mode1}.\n\
+\n\
+For example, when called with @var{op} equal to @code{rint_optab} and\n\
+@var{mode1} equal to @code{DFmode}, the hook should say whether the\n\
+optimizers should use optab @code{rintdf2}.\n\
+\n\
+The default hook returns true for all inputs.",
+ bool, (int op, machine_mode mode1, machine_mode mode2,
+	optimization_type opt_type),
+ default_optab_supported_p)
+
+/* True for MODE if the target expects that registers in this mode will
+   be allocated to registers in a small register class.  The compiler is
+   allowed to use registers explicitly used in the rtl as spill registers
+   but it should prevent extending the lifetime of these registers.  */
+DEFHOOK
+(small_register_classes_for_mode_p,
+ "Define this to return nonzero for machine modes for which the port has\n\
+small register classes.  If this target hook returns nonzero for a given\n\
+@var{mode}, the compiler will try to minimize the lifetime of registers\n\
+in @var{mode}.  The hook may be called with @code{VOIDmode} as argument.\n\
+In this case, the hook is expected to return nonzero if it returns nonzero\n\
+for any mode.\n\
+\n\
+On some machines, it is risky to let hard registers live across arbitrary\n\
+insns.  Typically, these machines have instructions that require values\n\
+to be in specific registers (like an accumulator), and reload will fail\n\
+if the required hard register is used for another purpose across such an\n\
+insn.\n\
+\n\
+Passes before reload do not know which hard registers will be used\n\
+in an instruction, but the machine modes of the registers set or used in\n\
+the instruction are already known.  And for some machines, register\n\
+classes are small for, say, integer registers but not for floating point\n\
+registers.  For example, the AMD x86-64 architecture requires specific\n\
+registers for the legacy x86 integer instructions, but there are many\n\
+SSE registers for floating point operations.  On such targets, a good\n\
+strategy may be to return nonzero from this hook for @code{INTEGRAL_MODE_P}\n\
+machine modes but zero for the SSE register classes.\n\
+\n\
+The default version of this hook returns false for any mode.  It is always\n\
+safe to redefine this hook to return with a nonzero value.  But if you\n\
+unnecessarily define it, you will reduce the amount of optimizations\n\
+that can be performed in some cases.  If you do not define this hook\n\
+to return a nonzero value when it is required, the compiler will run out\n\
+of spill registers and print a fatal error message.",
+ bool, (machine_mode mode),
+ hook_bool_mode_false)
+
+/* Register number for a flags register.  Only needs to be defined if the
+   target is constrainted to use post-reload comparison elimination.  */
+DEFHOOKPOD
+(flags_regnum,
+ "If the target has a dedicated flags register, and it needs to use the\
+ post-reload comparison elimination pass, then this value should be set\
+ appropriately.",
+ unsigned int, INVALID_REGNUM)
+
+/* Compute a (partial) cost for rtx X.  Return true if the complete
+   cost has been computed, and false if subexpressions should be
+   scanned.  In either case, *TOTAL contains the cost result.  */
+/* Note that OUTER_CODE ought to be RTX_CODE, but that's
+   not necessarily defined at this point.  */
+DEFHOOK
+(rtx_costs,
+ "This target hook describes the relative costs of RTL expressions.\n\
+\n\
+The cost may depend on the precise form of the expression, which is\n\
+available for examination in @var{x}, and the fact that @var{x} appears\n\
+as operand @var{opno} of an expression with rtx code @var{outer_code}.\n\
+That is, the hook can assume that there is some rtx @var{y} such\n\
+that @samp{GET_CODE (@var{y}) == @var{outer_code}} and such that\n\
+either (a) @samp{XEXP (@var{y}, @var{opno}) == @var{x}} or\n\
+(b) @samp{XVEC (@var{y}, @var{opno})} contains @var{x}.\n\
+\n\
+@var{mode} is @var{x}'s machine mode, or for cases like @code{const_int} that\n\
+do not have a mode, the mode in which @var{x} is used.\n\
+\n\
+In implementing this hook, you can use the construct\n\
+@code{COSTS_N_INSNS (@var{n})} to specify a cost equal to @var{n} fast\n\
+instructions.\n\
+\n\
+On entry to the hook, @code{*@var{total}} contains a default estimate\n\
+for the cost of the expression.  The hook should modify this value as\n\
+necessary.  Traditionally, the default costs are @code{COSTS_N_INSNS (5)}\n\
+for multiplications, @code{COSTS_N_INSNS (7)} for division and modulus\n\
+operations, and @code{COSTS_N_INSNS (1)} for all other operations.\n\
+\n\
+When optimizing for code size, i.e.@: when @code{speed} is\n\
+false, this target hook should be used to estimate the relative\n\
+size cost of an expression, again relative to @code{COSTS_N_INSNS}.\n\
+\n\
+The hook returns true when all subexpressions of @var{x} have been\n\
+processed, and false when @code{rtx_cost} should recurse.",
+ bool, (rtx x, machine_mode mode, int outer_code, int opno, int *total, bool speed),
+ hook_bool_rtx_mode_int_int_intp_bool_false)
+
+/* Compute the cost of X, used as an address.  Never called with
+   invalid addresses.  */
+DEFHOOK
+(address_cost,
+ "This hook computes the cost of an addressing mode that contains\n\
+@var{address}.  If not defined, the cost is computed from\n\
+the @var{address} expression and the @code{TARGET_RTX_COST} hook.\n\
+\n\
+For most CISC machines, the default cost is a good approximation of the\n\
+true cost of the addressing mode.  However, on RISC machines, all\n\
+instructions normally have the same length and execution time.  Hence\n\
+all addresses will have equal costs.\n\
+\n\
+In cases where more than one form of an address is known, the form with\n\
+the lowest cost will be used.  If multiple forms have the same, lowest,\n\
+cost, the one that is the most complex will be used.\n\
+\n\
+For example, suppose an address that is equal to the sum of a register\n\
+and a constant is used twice in the same basic block.  When this macro\n\
+is not defined, the address will be computed in a register and memory\n\
+references will be indirect through that register.  On machines where\n\
+the cost of the addressing mode containing the sum is no higher than\n\
+that of a simple indirect reference, this will produce an additional\n\
+instruction and possibly require an additional register.  Proper\n\
+specification of this macro eliminates this overhead for such machines.\n\
+\n\
+This hook is never called with an invalid address.\n\
+\n\
+On machines where an address involving more than one register is as\n\
+cheap as an address computation involving only one register, defining\n\
+@code{TARGET_ADDRESS_COST} to reflect this can cause two registers to\n\
+be live over a region of code where only one would have been if\n\
+@code{TARGET_ADDRESS_COST} were not defined in that manner.  This effect\n\
+should be considered in the definition of this macro.  Equivalent costs\n\
+should probably only be given to addresses with different numbers of\n\
+registers on machines with lots of registers.",
+ int, (rtx address, machine_mode mode, addr_space_t as, bool speed),
+ default_address_cost)
+
+/* Compute a cost for INSN.  */
+DEFHOOK
+(insn_cost,
+ "This target hook describes the relative costs of RTL instructions.\n\
+\n\
+In implementing this hook, you can use the construct\n\
+@code{COSTS_N_INSNS (@var{n})} to specify a cost equal to @var{n} fast\n\
+instructions.\n\
+\n\
+When optimizing for code size, i.e.@: when @code{speed} is\n\
+false, this target hook should be used to estimate the relative\n\
+size cost of an expression, again relative to @code{COSTS_N_INSNS}.",
+ int, (rtx_insn *insn, bool speed), NULL)
+
+/* Give a cost, in RTX Costs units, for an edge.  Like BRANCH_COST, but with
+   well defined units.  */
+DEFHOOK
+(max_noce_ifcvt_seq_cost,
+ "This hook returns a value in the same units as @code{TARGET_RTX_COSTS},\n\
+giving the maximum acceptable cost for a sequence generated by the RTL\n\
+if-conversion pass when conditional execution is not available.\n\
+The RTL if-conversion pass attempts to convert conditional operations\n\
+that would require a branch to a series of unconditional operations and\n\
+@code{mov@var{mode}cc} insns.  This hook returns the maximum cost of the\n\
+unconditional instructions and the @code{mov@var{mode}cc} insns.\n\
+RTL if-conversion is cancelled if the cost of the converted sequence\n\
+is greater than the value returned by this hook.\n\
+\n\
+@code{e} is the edge between the basic block containing the conditional\n\
+branch to the basic block which would be executed if the condition\n\
+were true.\n\
+\n\
+The default implementation of this hook uses the\n\
+@code{max-rtl-if-conversion-[un]predictable} parameters if they are set,\n\
+and uses a multiple of @code{BRANCH_COST} otherwise.",
+unsigned int, (edge e),
+default_max_noce_ifcvt_seq_cost)
+
+/* Return true if the given instruction sequence is a good candidate
+   as a replacement for the if-convertible sequence.  */
+DEFHOOK
+(noce_conversion_profitable_p,
+ "This hook returns true if the instruction sequence @code{seq} is a good\n\
+candidate as a replacement for the if-convertible sequence described in\n\
+@code{if_info}.",
+bool, (rtx_insn *seq, struct noce_if_info *if_info),
+default_noce_conversion_profitable_p)
+
+DEFHOOK
+(estimated_poly_value,
+ "Return an estimate of the runtime value of @var{val}, for use in\n\
+things like cost calculations or profiling frequencies.  The default\n\
+implementation returns the lowest possible value of @var{val}.",
+ HOST_WIDE_INT, (poly_int64 val),
+ default_estimated_poly_value)
+
+/* Permit speculative instructions in delay slots during delayed-branch 
+   scheduling.  */
+DEFHOOK
+(no_speculation_in_delay_slots_p,
+ "This predicate controls the use of the eager delay slot filler to disallow\n\
+speculatively executed instructions being placed in delay slots.  Targets\n\
+such as certain MIPS architectures possess both branches with and without\n\
+delay slots.  As the eager delay slot filler can decrease performance,\n\
+disabling it is beneficial when ordinary branches are available.  Use of\n\
+delay slot branches filled using the basic filler is often still desirable\n\
+as the delay slot can hide a pipeline bubble.", bool, (void),
+  hook_bool_void_false)
+
+/* Return where to allocate pseudo for a given hard register initial value.  */
+DEFHOOK
+(allocate_initial_value,
+ "\n\
+When the initial value of a hard register has been copied in a pseudo\n\
+register, it is often not necessary to actually allocate another register\n\
+to this pseudo register, because the original hard register or a stack slot\n\
+it has been saved into can be used.  @code{TARGET_ALLOCATE_INITIAL_VALUE}\n\
+is called at the start of register allocation once for each hard register\n\
+that had its initial value copied by using\n\
+@code{get_func_hard_reg_initial_val} or @code{get_hard_reg_initial_val}.\n\
+Possible values are @code{NULL_RTX}, if you don't want\n\
+to do any special allocation, a @code{REG} rtx---that would typically be\n\
+the hard register itself, if it is known not to be clobbered---or a\n\
+@code{MEM}.\n\
+If you are returning a @code{MEM}, this is only a hint for the allocator;\n\
+it might decide to use another register anyways.\n\
+You may use @code{current_function_is_leaf} or \n\
+@code{REG_N_SETS} in the hook to determine if the hard\n\
+register in question will not be clobbered.\n\
+The default value of this hook is @code{NULL}, which disables any special\n\
+allocation.",
+ rtx, (rtx hard_reg), NULL)
+
+/* Return nonzero if evaluating UNSPEC X might cause a trap.
+   FLAGS has the same meaning as in rtlanal.c: may_trap_p_1.  */
+DEFHOOK
+(unspec_may_trap_p,
+ "This target hook returns nonzero if @var{x}, an @code{unspec} or\n\
+@code{unspec_volatile} operation, might cause a trap.  Targets can use\n\
+this hook to enhance precision of analysis for @code{unspec} and\n\
+@code{unspec_volatile} operations.  You may call @code{may_trap_p_1}\n\
+to analyze inner elements of @var{x} in which case @var{flags} should be\n\
+passed along.",
+ int, (const_rtx x, unsigned flags),
+ default_unspec_may_trap_p)
+
+/* Given a register, this hook should return a parallel of registers
+   to represent where to find the register pieces.  Define this hook
+   if the register and its mode are represented in Dwarf in
+   non-contiguous locations, or if the register should be
+   represented in more than one register in Dwarf.  Otherwise, this
+   hook should return NULL_RTX.  */
+DEFHOOK
+(dwarf_register_span,
+ "Given a register, this hook should return a parallel of registers to\n\
+represent where to find the register pieces.  Define this hook if the\n\
+register and its mode are represented in Dwarf in non-contiguous\n\
+locations, or if the register should be represented in more than one\n\
+register in Dwarf.  Otherwise, this hook should return @code{NULL_RTX}.\n\
+If not defined, the default is to return @code{NULL_RTX}.",
+ rtx, (rtx reg),
+ hook_rtx_rtx_null)
+
+/* Given a register return the mode of the corresponding DWARF frame
+   register.  */
+DEFHOOK
+(dwarf_frame_reg_mode,
+ "Given a register, this hook should return the mode which the\n\
+corresponding Dwarf frame register should have.  This is normally\n\
+used to return a smaller mode than the raw mode to prevent call\n\
+clobbered parts of a register altering the frame register size",
+ machine_mode, (int regno),
+ default_dwarf_frame_reg_mode)
+
+/* If expand_builtin_init_dwarf_reg_sizes needs to fill in table
+   entries not corresponding directly to registers below
+   FIRST_PSEUDO_REGISTER, this hook should generate the necessary
+   code, given the address of the table.  */
+DEFHOOK
+(init_dwarf_reg_sizes_extra,
+ "If some registers are represented in Dwarf-2 unwind information in\n\
+multiple pieces, define this hook to fill in information about the\n\
+sizes of those pieces in the table used by the unwinder at runtime.\n\
+It will be called by @code{expand_builtin_init_dwarf_reg_sizes} after\n\
+filling in a single size corresponding to each hard register;\n\
+@var{address} is the address of the table.",
+ void, (tree address),
+ hook_void_tree)
+
+/* Fetch the fixed register(s) which hold condition codes, for
+   targets where it makes sense to look for duplicate assignments to
+   the condition codes.  This should return true if there is such a
+   register, false otherwise.  The arguments should be set to the
+   fixed register numbers.  Up to two condition code registers are
+   supported.  If there is only one for this target, the int pointed
+   at by the second argument should be set to -1.  */
+DEFHOOK
+(fixed_condition_code_regs,
+ "On targets which do not use @code{(cc0)}, and which use a hard\n\
+register rather than a pseudo-register to hold condition codes, the\n\
+regular CSE passes are often not able to identify cases in which the\n\
+hard register is set to a common value.  Use this hook to enable a\n\
+small pass which optimizes such cases.  This hook should return true\n\
+to enable this pass, and it should set the integers to which its\n\
+arguments point to the hard register numbers used for condition codes.\n\
+When there is only one such register, as is true on most systems, the\n\
+integer pointed to by @var{p2} should be set to\n\
+@code{INVALID_REGNUM}.\n\
+\n\
+The default version of this hook returns false.",
+ bool, (unsigned int *p1, unsigned int *p2),
+ hook_bool_uintp_uintp_false)
+
+/* If two condition code modes are compatible, return a condition
+     code mode which is compatible with both, such that a comparison
+     done in the returned mode will work for both of the original
+     modes.  If the condition code modes are not compatible, return
+     VOIDmode.  */
+DEFHOOK
+(cc_modes_compatible,
+ "On targets which use multiple condition code modes in class\n\
+@code{MODE_CC}, it is sometimes the case that a comparison can be\n\
+validly done in more than one mode.  On such a system, define this\n\
+target hook to take two mode arguments and to return a mode in which\n\
+both comparisons may be validly done.  If there is no such mode,\n\
+return @code{VOIDmode}.\n\
+\n\
+The default version of this hook checks whether the modes are the\n\
+same.  If they are, it returns that mode.  If they are different, it\n\
+returns @code{VOIDmode}.",
+ machine_mode, (machine_mode m1, machine_mode m2),
+ default_cc_modes_compatible)
+
+/* Do machine-dependent code transformations.  Called just before
+     delayed-branch scheduling.  */
+DEFHOOK
+(machine_dependent_reorg,
+ "If non-null, this hook performs a target-specific pass over the\n\
+instruction stream.  The compiler will run it at all optimization levels,\n\
+just before the point at which it normally does delayed-branch scheduling.\n\
+\n\
+The exact purpose of the hook varies from target to target.  Some use\n\
+it to do transformations that are necessary for correctness, such as\n\
+laying out in-function constant pools or avoiding hardware hazards.\n\
+Others use it as an opportunity to do some machine-dependent optimizations.\n\
+\n\
+You need not implement the hook if it has nothing to do.  The default\n\
+definition is null.",
+ void, (void), NULL)
+
+/* Create the __builtin_va_list type.  */
+DEFHOOK
+(build_builtin_va_list,
+ "This hook returns a type node for @code{va_list} for the target.\n\
+The default version of the hook returns @code{void*}.",
+ tree, (void),
+ std_build_builtin_va_list)
+
+/* Enumerate the va list variants.  */
+DEFHOOK
+(enum_va_list_p,
+ "This target hook is used in function @code{c_common_nodes_and_builtins}\n\
+to iterate through the target specific builtin types for va_list. The\n\
+variable @var{idx} is used as iterator. @var{pname} has to be a pointer\n\
+to a @code{const char *} and @var{ptree} a pointer to a @code{tree} typed\n\
+variable.\n\
+The arguments @var{pname} and @var{ptree} are used to store the result of\n\
+this macro and are set to the name of the va_list builtin type and its\n\
+internal type.\n\
+If the return value of this macro is zero, then there is no more element.\n\
+Otherwise the @var{IDX} should be increased for the next call of this\n\
+macro to iterate through all types.",
+ int, (int idx, const char **pname, tree *ptree),
+ NULL)
+
+/* Get the cfun/fndecl calling abi __builtin_va_list type.  */
+DEFHOOK
+(fn_abi_va_list,
+ "This hook returns the va_list type of the calling convention specified by\n\
+@var{fndecl}.\n\
+The default version of this hook returns @code{va_list_type_node}.",
+ tree, (tree fndecl),
+ std_fn_abi_va_list)
+
+/* Get the __builtin_va_list type dependent on input type.  */
+DEFHOOK
+(canonical_va_list_type,
+ "This hook returns the va_list type of the calling convention specified by the\n\
+type of @var{type}. If @var{type} is not a valid va_list type, it returns\n\
+@code{NULL_TREE}.",
+ tree, (tree type),
+ std_canonical_va_list_type)
+
+/* ??? Documenting this hook requires a GFDL license grant.  */
+DEFHOOK_UNDOC
+(expand_builtin_va_start,
+"Expand the @code{__builtin_va_start} builtin.",
+ void, (tree valist, rtx nextarg), NULL)
+
+/* Gimplifies a VA_ARG_EXPR.  */
+DEFHOOK
+(gimplify_va_arg_expr,
+ "This hook performs target-specific gimplification of\n\
+@code{VA_ARG_EXPR}.  The first two parameters correspond to the\n\
+arguments to @code{va_arg}; the latter two are as in\n\
+@code{gimplify.c:gimplify_expr}.",
+ tree, (tree valist, tree type, gimple_seq *pre_p, gimple_seq *post_p),
+ std_gimplify_va_arg_expr)
+
+/* Validity-checking routines for PCH files, target-specific.
+   get_pch_validity returns a pointer to the data to be stored,
+   and stores the size in its argument.  pch_valid_p gets the same
+   information back and returns NULL if the PCH is valid,
+   or an error message if not.  */
+DEFHOOK
+(get_pch_validity,
+ "This hook returns a pointer to the data needed by\n\
+@code{TARGET_PCH_VALID_P} and sets\n\
+@samp{*@var{sz}} to the size of the data in bytes.",
+ void *, (size_t *sz),
+ default_get_pch_validity)
+
+DEFHOOK
+(pch_valid_p,
+ "This hook checks whether the options used to create a PCH file are\n\
+compatible with the current settings.  It returns @code{NULL}\n\
+if so and a suitable error message if not.  Error messages will\n\
+be presented to the user and must be localized using @samp{_(@var{msg})}.\n\
+\n\
+@var{data} is the data that was returned by @code{TARGET_GET_PCH_VALIDITY}\n\
+when the PCH file was created and @var{sz} is the size of that data in bytes.\n\
+It's safe to assume that the data was created by the same version of the\n\
+compiler, so no format checking is needed.\n\
+\n\
+The default definition of @code{default_pch_valid_p} should be\n\
+suitable for most targets.",
+ const char *, (const void *data, size_t sz),
+ default_pch_valid_p)
+
+DEFHOOK
+(prepare_pch_save,
+ "Called before writing out a PCH file.  If the target has some\n\
+garbage-collected data that needs to be in a particular state on PCH loads,\n\
+it can use this hook to enforce that state.  Very few targets need\n\
+to do anything here.",
+ void, (void),
+ hook_void_void)
+
+/* If nonnull, this function checks whether a PCH file with the
+   given set of target flags can be used.  It returns NULL if so,
+   otherwise it returns an error message.  */
+DEFHOOK
+(check_pch_target_flags,
+ "If this hook is nonnull, the default implementation of\n\
+@code{TARGET_PCH_VALID_P} will use it to check for compatible values\n\
+of @code{target_flags}.  @var{pch_flags} specifies the value that\n\
+@code{target_flags} had when the PCH file was created.  The return\n\
+value is the same as for @code{TARGET_PCH_VALID_P}.",
+ const char *, (int pch_flags), NULL)
+
+/* True if the compiler should give an enum type only as many
+   bytes as it takes to represent the range of possible values of
+   that type.  */
+DEFHOOK
+(default_short_enums,
+ "This target hook should return true if the compiler should give an\n\
+@code{enum} type only as many bytes as it takes to represent the range\n\
+of possible values of that type.  It should return false if all\n\
+@code{enum} types should be allocated like @code{int}.\n\
+\n\
+The default is to return false.",
+ bool, (void),
+ hook_bool_void_false)
+
+/* This target hook returns an rtx that is used to store the address
+   of the current frame into the built-in setjmp buffer.  */
+DEFHOOK
+(builtin_setjmp_frame_value,
+ "This target hook should return an rtx that is used to store\n\
+the address of the current frame into the built in @code{setjmp} buffer.\n\
+The default value, @code{virtual_stack_vars_rtx}, is correct for most\n\
+machines.  One reason you may need to define this target hook is if\n\
+@code{hard_frame_pointer_rtx} is the appropriate value on your machine.",
+ rtx, (void),
+ default_builtin_setjmp_frame_value)
+
+/* This target hook should manipulate the outputs, inputs, constraints,
+   and clobbers the port wishes for pre-processing the asm.  */
+DEFHOOK
+(md_asm_adjust,
+ "This target hook may add @dfn{clobbers} to @var{clobbers} and\n\
+@var{clobbered_regs} for any hard regs the port wishes to automatically\n\
+clobber for an asm.  The @var{outputs} and @var{inputs} may be inspected\n\
+to avoid clobbering a register that is already used by the asm.\n\
+\n\
+It may modify the @var{outputs}, @var{inputs}, and @var{constraints}\n\
+as necessary for other pre-processing.  In this case the return value is\n\
+a sequence of insns to emit after the asm.",
+ rtx_insn *,
+ (vec<rtx>& outputs, vec<rtx>& inputs, vec<const char *>& constraints,
+  vec<rtx>& clobbers, HARD_REG_SET& clobbered_regs),
+ NULL)
+
+/* This target hook allows the backend to specify a calling convention
+   in the debug information.  This function actually returns an
+   enum dwarf_calling_convention, but because of forward declarations
+   and not wanting to include dwarf2.h everywhere target.h is included
+   the function is being declared as an int.  */
+DEFHOOK
+(dwarf_calling_convention,
+ "Define this to enable the dwarf attribute @code{DW_AT_calling_convention} to\n\
+be emitted for each function.  Instead of an integer return the enum\n\
+value for the @code{DW_CC_} tag.",
+ int, (const_tree function),
+ hook_int_const_tree_0)
+
+/* This target hook allows the backend to emit frame-related insns that
+   contain UNSPECs or UNSPEC_VOLATILEs.  The call frame debugging info
+   engine will invoke it on insns of the form
+     (set (reg) (unspec [...] UNSPEC_INDEX))
+   and
+     (set (reg) (unspec_volatile [...] UNSPECV_INDEX))
+   to let the backend emit the call frame instructions.  */
+DEFHOOK
+(dwarf_handle_frame_unspec,
+ "This target hook allows the backend to emit frame-related insns that\n\
+contain UNSPECs or UNSPEC_VOLATILEs.  The DWARF 2 call frame debugging\n\
+info engine will invoke it on insns of the form\n\
+@smallexample\n\
+(set (reg) (unspec [@dots{}] UNSPEC_INDEX))\n\
+@end smallexample\n\
+and\n\
+@smallexample\n\
+(set (reg) (unspec_volatile [@dots{}] UNSPECV_INDEX)).\n\
+@end smallexample\n\
+to let the backend emit the call frame instructions.  @var{label} is\n\
+the CFI label attached to the insn, @var{pattern} is the pattern of\n\
+the insn and @var{index} is @code{UNSPEC_INDEX} or @code{UNSPECV_INDEX}.",
+ void, (const char *label, rtx pattern, int index), NULL)
+
+DEFHOOK
+(dwarf_poly_indeterminate_value,
+ "Express the value of @code{poly_int} indeterminate @var{i} as a DWARF\n\
+expression, with @var{i} counting from 1.  Return the number of a DWARF\n\
+register @var{R} and set @samp{*@var{factor}} and @samp{*@var{offset}} such\n\
+that the value of the indeterminate is:\n\
+@smallexample\n\
+value_of(@var{R}) / @var{factor} - @var{offset}\n\
+@end smallexample\n\
+\n\
+A target only needs to define this hook if it sets\n\
+@samp{NUM_POLY_INT_COEFFS} to a value greater than 1.",
+ unsigned int, (unsigned int i, unsigned int *factor, int *offset),
+ default_dwarf_poly_indeterminate_value)
+
+/* ??? Documenting this hook requires a GFDL license grant.  */
+DEFHOOK_UNDOC
+(stdarg_optimize_hook,
+"Perform architecture specific checking of statements gimplified\
+ from @code{VA_ARG_EXPR}.  @var{stmt} is the statement.  Returns true if\
+ the statement doesn't need to be checked for @code{va_list} references.",
+ bool, (struct stdarg_info *ai, const gimple *stmt), NULL)
+
+/* This target hook allows the operating system to override the DECL
+   that represents the external variable that contains the stack
+   protection guard variable.  The type of this DECL is ptr_type_node.  */
+DEFHOOK
+(stack_protect_guard,
+ "This hook returns a @code{DECL} node for the external variable to use\n\
+for the stack protection guard.  This variable is initialized by the\n\
+runtime to some random value and is used to initialize the guard value\n\
+that is placed at the top of the local stack frame.  The type of this\n\
+variable must be @code{ptr_type_node}.\n\
+\n\
+The default version of this hook creates a variable called\n\
+@samp{__stack_chk_guard}, which is normally defined in @file{libgcc2.c}.",
+ tree, (void),
+ default_stack_protect_guard)
+
+/* This target hook allows the operating system to override the CALL_EXPR
+   that is invoked when a check vs the guard variable fails.  */
+DEFHOOK
+(stack_protect_fail,
+ "This hook returns a @code{CALL_EXPR} that alerts the runtime that the\n\
+stack protect guard variable has been modified.  This expression should\n\
+involve a call to a @code{noreturn} function.\n\
+\n\
+The default version of this hook invokes a function called\n\
+@samp{__stack_chk_fail}, taking no arguments.  This function is\n\
+normally defined in @file{libgcc2.c}.",
+ tree, (void),
+ default_external_stack_protect_fail)
+
+/* This target hook allows the operating system to disable the default stack
+   protector runtime support.  */
+DEFHOOK
+(stack_protect_runtime_enabled_p,
+ "Returns true if the target wants GCC's default stack protect runtime support,\
+ otherwise return false.  The default implementation always returns true.",
+ bool, (void),
+ hook_bool_void_true)
+
+DEFHOOK
+(have_speculation_safe_value,
+"This hook is used to determine the level of target support for\n\
+ @code{__builtin_speculation_safe_value}.  If called with an argument\n\
+ of false, it returns true if the target has been modified to support\n\
+ this builtin.  If called with an argument of true, it returns true\n\
+ if the target requires active mitigation execution might be speculative.\n\
+ \n\
+ The default implementation returns false if the target does not define\n\
+ a pattern named @code{speculation_barrier}.  Else it returns true\n\
+ for the first case and whether the pattern is enabled for the current\n\
+ compilation for the second case.\n\
+ \n\
+ For targets that have no processors that can execute instructions\n\
+ speculatively an alternative implemenation of this hook is available:\n\
+ simply redefine this hook to @code{speculation_safe_value_not_needed}\n\
+ along with your other target hooks.",
+bool, (bool active), default_have_speculation_safe_value)
+
+DEFHOOK
+(speculation_safe_value,
+"This target hook can be used to generate a target-specific code\n\
+ sequence that implements the @code{__builtin_speculation_safe_value}\n\
+ built-in function.  The function must always return @var{val} in\n\
+ @var{result} in mode @var{mode} when the cpu is not executing\n\
+ speculatively, but must never return that when speculating until it\n\
+ is known that the speculation will not be unwound.  The hook supports\n\
+ two primary mechanisms for implementing the requirements.  The first\n\
+ is to emit a speculation barrier which forces the processor to wait\n\
+ until all prior speculative operations have been resolved; the second\n\
+ is to use a target-specific mechanism that can track the speculation\n\
+ state and to return @var{failval} if it can determine that\n\
+ speculation must be unwound at a later time.\n\
+ \n\
+ The default implementation simply copies @var{val} to @var{result} and\n\
+ emits a @code{speculation_barrier} instruction if that is defined.",
+rtx, (machine_mode mode, rtx result, rtx val, rtx failval),
+ default_speculation_safe_value)
+ 
+
+DEFHOOK
+(can_use_doloop_p,
+ "Return true if it is possible to use low-overhead loops (@code{doloop_end}\n\
+and @code{doloop_begin}) for a particular loop.  @var{iterations} gives the\n\
+exact number of iterations, or 0 if not known.  @var{iterations_max} gives\n\
+the maximum number of iterations, or 0 if not known.  @var{loop_depth} is\n\
+the nesting depth of the loop, with 1 for innermost loops, 2 for loops that\n\
+contain innermost loops, and so on.  @var{entered_at_top} is true if the\n\
+loop is only entered from the top.\n\
+\n\
+This hook is only used if @code{doloop_end} is available.  The default\n\
+implementation returns true.  You can use @code{can_use_doloop_if_innermost}\n\
+if the loop must be the innermost, and if there are no other restrictions.",
+ bool, (const widest_int &iterations, const widest_int &iterations_max,
+	unsigned int loop_depth, bool entered_at_top),
+ hook_bool_wint_wint_uint_bool_true)
+
+/* Returns NULL if target supports the insn within a doloop block,
+   otherwise it returns an error message.  */
+DEFHOOK
+(invalid_within_doloop,
+ "\n\
+Take an instruction in @var{insn} and return NULL if it is valid within a\n\
+low-overhead loop, otherwise return a string explaining why doloop\n\
+could not be applied.\n\
+\n\
+Many targets use special registers for low-overhead looping. For any\n\
+instruction that clobbers these this function should return a string indicating\n\
+the reason why the doloop could not be applied.\n\
+By default, the RTL loop optimizer does not use a present doloop pattern for\n\
+loops containing function calls or branch on table instructions.",
+ const char *, (const rtx_insn *insn),
+ default_invalid_within_doloop)
+
+/* Returns true for a legitimate combined insn.  */
+DEFHOOK
+(legitimate_combined_insn,
+"Take an instruction in @var{insn} and return @code{false} if the instruction\
+ is not appropriate as a combination of two or more instructions.  The\
+ default is to accept all instructions.",
+ bool, (rtx_insn *insn),
+ hook_bool_rtx_insn_true)
+
+DEFHOOK
+(valid_dllimport_attribute_p,
+"@var{decl} is a variable or function with @code{__attribute__((dllimport))}\
+ specified.  Use this hook if the target needs to add extra validation\
+ checks to @code{handle_dll_attribute}.",
+ bool, (const_tree decl),
+ hook_bool_const_tree_true)
+
+/* If non-zero, align constant anchors in CSE to a multiple of this
+   value.  */
+DEFHOOKPOD
+(const_anchor,
+ "On some architectures it can take multiple instructions to synthesize\n\
+a constant.  If there is another constant already in a register that\n\
+is close enough in value then it is preferable that the new constant\n\
+is computed from this register using immediate addition or\n\
+subtraction.  We accomplish this through CSE.  Besides the value of\n\
+the constant we also add a lower and an upper constant anchor to the\n\
+available expressions.  These are then queried when encountering new\n\
+constants.  The anchors are computed by rounding the constant up and\n\
+down to a multiple of the value of @code{TARGET_CONST_ANCHOR}.\n\
+@code{TARGET_CONST_ANCHOR} should be the maximum positive value\n\
+accepted by immediate-add plus one.  We currently assume that the\n\
+value of @code{TARGET_CONST_ANCHOR} is a power of 2.  For example, on\n\
+MIPS, where add-immediate takes a 16-bit signed value,\n\
+@code{TARGET_CONST_ANCHOR} is set to @samp{0x8000}.  The default value\n\
+is zero, which disables this optimization.",
+ unsigned HOST_WIDE_INT, 0)
+
+/* Defines, which target-dependent bits (upper 16) are used by port  */
+DEFHOOK
+(memmodel_check,
+ "Validate target specific memory model mask bits. When NULL no target specific\n\
+memory model bits are allowed.",
+ unsigned HOST_WIDE_INT, (unsigned HOST_WIDE_INT val), NULL)
+
+/* Defines an offset bitwise ored into shifted address to get corresponding
+   Address Sanitizer shadow address, or -1 if Address Sanitizer is not
+   supported by the target.  */
+DEFHOOK
+(asan_shadow_offset,
+ "Return the offset bitwise ored into shifted address to get corresponding\n\
+Address Sanitizer shadow memory address.  NULL if Address Sanitizer is not\n\
+supported by the target.",
+ unsigned HOST_WIDE_INT, (void),
+ NULL)
+
+/* Functions relating to calls - argument passing, returns, etc.  */
+/* Members of struct call have no special macro prefix.  */
+HOOK_VECTOR (TARGET_CALLS, calls)
+
+DEFHOOK
+(promote_function_mode,
+ "Like @code{PROMOTE_MODE}, but it is applied to outgoing function arguments or\n\
+function return values.  The target hook should return the new mode\n\
+and possibly change @code{*@var{punsignedp}} if the promotion should\n\
+change signedness.  This function is called only for scalar @emph{or\n\
+pointer} types.\n\
+\n\
+@var{for_return} allows to distinguish the promotion of arguments and\n\
+return values.  If it is @code{1}, a return value is being promoted and\n\
+@code{TARGET_FUNCTION_VALUE} must perform the same promotions done here.\n\
+If it is @code{2}, the returned mode should be that of the register in\n\
+which an incoming parameter is copied, or the outgoing result is computed;\n\
+then the hook should return the same mode as @code{promote_mode}, though\n\
+the signedness may be different.\n\
+\n\
+@var{type} can be NULL when promoting function arguments of libcalls.\n\
+\n\
+The default is to not promote arguments and return values.  You can\n\
+also define the hook to @code{default_promote_function_mode_always_promote}\n\
+if you would like to apply the same rules given by @code{PROMOTE_MODE}.",
+ machine_mode, (const_tree type, machine_mode mode, int *punsignedp,
+		     const_tree funtype, int for_return),
+ default_promote_function_mode)
+
+DEFHOOK
+(promote_prototypes,
+ "This target hook returns @code{true} if an argument declared in a\n\
+prototype as an integral type smaller than @code{int} should actually be\n\
+passed as an @code{int}.  In addition to avoiding errors in certain\n\
+cases of mismatch, it also makes for better code on certain machines.\n\
+The default is to not promote prototypes.",
+ bool, (const_tree fntype),
+ hook_bool_const_tree_false)
+
+DEFHOOK
+(struct_value_rtx,
+ "This target hook should return the location of the structure value\n\
+address (normally a @code{mem} or @code{reg}), or 0 if the address is\n\
+passed as an ``invisible'' first argument.  Note that @var{fndecl} may\n\
+be @code{NULL}, for libcalls.  You do not need to define this target\n\
+hook if the address is always passed as an ``invisible'' first\n\
+argument.\n\
+\n\
+On some architectures the place where the structure value address\n\
+is found by the called function is not the same place that the\n\
+caller put it.  This can be due to register windows, or it could\n\
+be because the function prologue moves it to a different place.\n\
+@var{incoming} is @code{1} or @code{2} when the location is needed in\n\
+the context of the called function, and @code{0} in the context of\n\
+the caller.\n\
+\n\
+If @var{incoming} is nonzero and the address is to be found on the\n\
+stack, return a @code{mem} which refers to the frame pointer. If\n\
+@var{incoming} is @code{2}, the result is being used to fetch the\n\
+structure value address at the beginning of a function.  If you need\n\
+to emit adjusting code, you should do it at this point.",
+ rtx, (tree fndecl, int incoming),
+ hook_rtx_tree_int_null)
+
+DEFHOOKPOD
+(omit_struct_return_reg,
+ "Normally, when a function returns a structure by memory, the address\n\
+is passed as an invisible pointer argument, but the compiler also\n\
+arranges to return the address from the function like it would a normal\n\
+pointer return value.  Define this to true if that behavior is\n\
+undesirable on your target.",
+ bool, false)
+
+DEFHOOK
+(return_in_memory,
+ "This target hook should return a nonzero value to say to return the\n\
+function value in memory, just as large structures are always returned.\n\
+Here @var{type} will be the data type of the value, and @var{fntype}\n\
+will be the type of the function doing the returning, or @code{NULL} for\n\
+libcalls.\n\
+\n\
+Note that values of mode @code{BLKmode} must be explicitly handled\n\
+by this function.  Also, the option @option{-fpcc-struct-return}\n\
+takes effect regardless of this macro.  On most systems, it is\n\
+possible to leave the hook undefined; this causes a default\n\
+definition to be used, whose value is the constant 1 for @code{BLKmode}\n\
+values, and 0 otherwise.\n\
+\n\
+Do not use this hook to indicate that structures and unions should always\n\
+be returned in memory.  You should instead use @code{DEFAULT_PCC_STRUCT_RETURN}\n\
+to indicate this.",
+ bool, (const_tree type, const_tree fntype),
+ default_return_in_memory)
+
+DEFHOOK
+(return_in_msb,
+ "This hook should return true if values of type @var{type} are returned\n\
+at the most significant end of a register (in other words, if they are\n\
+padded at the least significant end).  You can assume that @var{type}\n\
+is returned in a register; the caller is required to check this.\n\
+\n\
+Note that the register provided by @code{TARGET_FUNCTION_VALUE} must\n\
+be able to hold the complete return value.  For example, if a 1-, 2-\n\
+or 3-byte structure is returned at the most significant end of a\n\
+4-byte register, @code{TARGET_FUNCTION_VALUE} should provide an\n\
+@code{SImode} rtx.",
+ bool, (const_tree type),
+ hook_bool_const_tree_false)
+
+/* Return true if a parameter must be passed by reference.  TYPE may
+   be null if this is a libcall.  CA may be null if this query is
+   from __builtin_va_arg.  */
+DEFHOOK
+(pass_by_reference,
+ "This target hook should return @code{true} if an argument at the\n\
+position indicated by @var{cum} should be passed by reference.  This\n\
+predicate is queried after target independent reasons for being\n\
+passed by reference, such as @code{TREE_ADDRESSABLE (type)}.\n\
+\n\
+If the hook returns true, a copy of that argument is made in memory and a\n\
+pointer to the argument is passed instead of the argument itself.\n\
+The pointer is passed in whatever way is appropriate for passing a pointer\n\
+to that type.",
+ bool,
+ (cumulative_args_t cum, machine_mode mode, const_tree type, bool named),
+ hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false)
+
+DEFHOOK
+(expand_builtin_saveregs,
+ "If defined, this hook produces the machine-specific code for a call to\n\
+@code{__builtin_saveregs}.  This code will be moved to the very\n\
+beginning of the function, before any parameter access are made.  The\n\
+return value of this function should be an RTX that contains the value\n\
+to use as the return of @code{__builtin_saveregs}.",
+ rtx, (void),
+ default_expand_builtin_saveregs)
+
+/* Returns pretend_argument_size.  */
+DEFHOOK
+(setup_incoming_varargs,
+ "This target hook offers an alternative to using\n\
+@code{__builtin_saveregs} and defining the hook\n\
+@code{TARGET_EXPAND_BUILTIN_SAVEREGS}.  Use it to store the anonymous\n\
+register arguments into the stack so that all the arguments appear to\n\
+have been passed consecutively on the stack.  Once this is done, you can\n\
+use the standard implementation of varargs that works for machines that\n\
+pass all their arguments on the stack.\n\
+\n\
+The argument @var{args_so_far} points to the @code{CUMULATIVE_ARGS} data\n\
+structure, containing the values that are obtained after processing the\n\
+named arguments.  The arguments @var{mode} and @var{type} describe the\n\
+last named argument---its machine mode and its data type as a tree node.\n\
+\n\
+The target hook should do two things: first, push onto the stack all the\n\
+argument registers @emph{not} used for the named arguments, and second,\n\
+store the size of the data thus pushed into the @code{int}-valued\n\
+variable pointed to by @var{pretend_args_size}.  The value that you\n\
+store here will serve as additional offset for setting up the stack\n\
+frame.\n\
+\n\
+Because you must generate code to push the anonymous arguments at\n\
+compile time without knowing their data types,\n\
+@code{TARGET_SETUP_INCOMING_VARARGS} is only useful on machines that\n\
+have just a single category of argument register and use it uniformly\n\
+for all data types.\n\
+\n\
+If the argument @var{second_time} is nonzero, it means that the\n\
+arguments of the function are being analyzed for the second time.  This\n\
+happens for an inline function, which is not actually compiled until the\n\
+end of the source file.  The hook @code{TARGET_SETUP_INCOMING_VARARGS} should\n\
+not generate any instructions in this case.",
+ void, (cumulative_args_t args_so_far, machine_mode mode, tree type,
+	int *pretend_args_size, int second_time),
+ default_setup_incoming_varargs)
+
+DEFHOOK
+(load_bounds_for_arg,
+ "This hook is used by expand pass to emit insn to load bounds of\n\
+@var{arg} passed in @var{slot}.  Expand pass uses this hook in case\n\
+bounds of @var{arg} are not passed in register.  If @var{slot} is a\n\
+memory, then bounds are loaded as for regular pointer loaded from\n\
+memory.  If @var{slot} is not a memory then @var{slot_no} is an integer\n\
+constant holding number of the target dependent special slot which\n\
+should be used to obtain bounds.  Hook returns RTX holding loaded bounds.",
+ rtx, (rtx slot, rtx arg, rtx slot_no),
+ default_load_bounds_for_arg)
+
+DEFHOOK
+(store_bounds_for_arg,
+ "This hook is used by expand pass to emit insns to store @var{bounds} of\n\
+@var{arg} passed in @var{slot}.  Expand pass uses this hook in case\n\
+@var{bounds} of @var{arg} are not passed in register.  If @var{slot} is a\n\
+memory, then @var{bounds} are stored as for regular pointer stored in\n\
+memory.  If @var{slot} is not a memory then @var{slot_no} is an integer\n\
+constant holding number of the target dependent special slot which\n\
+should be used to store @var{bounds}.",
+ void, (rtx arg, rtx slot, rtx bounds, rtx slot_no),
+ default_store_bounds_for_arg)
+
+DEFHOOK
+(load_returned_bounds,
+ "This hook is used by expand pass to emit insn to load bounds\n\
+returned by function call in @var{slot}.  Hook returns RTX holding\n\
+loaded bounds.",
+ rtx, (rtx slot),
+ default_load_returned_bounds)
+
+DEFHOOK
+(store_returned_bounds,
+ "This hook is used by expand pass to emit insn to store @var{bounds}\n\
+returned by function call into @var{slot}.",
+ void, (rtx slot, rtx bounds),
+ default_store_returned_bounds)
+
+DEFHOOK
+(setup_incoming_vararg_bounds,
+ "Use it to store bounds for anonymous register arguments stored\n\
+into the stack.  Arguments meaning is similar to\n\
+@code{TARGET_SETUP_INCOMING_VARARGS}.",
+ void, (cumulative_args_t args_so_far, machine_mode mode, tree type,
+	int *pretend_args_size, int second_time),
+ default_setup_incoming_vararg_bounds)
+
+DEFHOOK
+(call_args,
+ "While generating RTL for a function call, this target hook is invoked once\n\
+for each argument passed to the function, either a register returned by\n\
+@code{TARGET_FUNCTION_ARG} or a memory location.  It is called just\n\
+before the point where argument registers are stored.  The type of the\n\
+function to be called is also passed as the second argument; it is\n\
+@code{NULL_TREE} for libcalls.  The @code{TARGET_END_CALL_ARGS} hook is\n\
+invoked just after the code to copy the return reg has been emitted.\n\
+This functionality can be used to perform special setup of call argument\n\
+registers if a target needs it.\n\
+For functions without arguments, the hook is called once with @code{pc_rtx}\n\
+passed instead of an argument register.\n\
+Most ports do not need to implement anything for this hook.",
+ void, (rtx, tree),
+ hook_void_rtx_tree)
+
+DEFHOOK
+(end_call_args,
+ "This target hook is invoked while generating RTL for a function call,\n\
+just after the point where the return reg is copied into a pseudo.  It\n\
+signals that all the call argument and return registers for the just\n\
+emitted call are now no longer in use.\n\
+Most ports do not need to implement anything for this hook.",
+ void, (void),
+ hook_void_void)
+
+DEFHOOK
+(strict_argument_naming,
+ "Define this hook to return @code{true} if the location where a function\n\
+argument is passed depends on whether or not it is a named argument.\n\
+\n\
+This hook controls how the @var{named} argument to @code{TARGET_FUNCTION_ARG}\n\
+is set for varargs and stdarg functions.  If this hook returns\n\
+@code{true}, the @var{named} argument is always true for named\n\
+arguments, and false for unnamed arguments.  If it returns @code{false},\n\
+but @code{TARGET_PRETEND_OUTGOING_VARARGS_NAMED} returns @code{true},\n\
+then all arguments are treated as named.  Otherwise, all named arguments\n\
+except the last are treated as named.\n\
+\n\
+You need not define this hook if it always returns @code{false}.",
+ bool, (cumulative_args_t ca),
+ hook_bool_CUMULATIVE_ARGS_false)
+
+/* Returns true if we should use
+   targetm.calls.setup_incoming_varargs() and/or
+   targetm.calls.strict_argument_naming().  */
+DEFHOOK
+(pretend_outgoing_varargs_named,
+ "If you need to conditionally change ABIs so that one works with\n\
+@code{TARGET_SETUP_INCOMING_VARARGS}, but the other works like neither\n\
+@code{TARGET_SETUP_INCOMING_VARARGS} nor @code{TARGET_STRICT_ARGUMENT_NAMING} was\n\
+defined, then define this hook to return @code{true} if\n\
+@code{TARGET_SETUP_INCOMING_VARARGS} is used, @code{false} otherwise.\n\
+Otherwise, you should not define this hook.",
+ bool, (cumulative_args_t ca),
+ default_pretend_outgoing_varargs_named)
+
+/* Given a complex type T, return true if a parameter of type T
+   should be passed as two scalars.  */
+DEFHOOK
+(split_complex_arg,
+ "This hook should return true if parameter of type @var{type} are passed\n\
+as two scalar parameters.  By default, GCC will attempt to pack complex\n\
+arguments into the target's word size.  Some ABIs require complex arguments\n\
+to be split and treated as their individual components.  For example, on\n\
+AIX64, complex floats should be passed in a pair of floating point\n\
+registers, even though a complex float would fit in one 64-bit floating\n\
+point register.\n\
+\n\
+The default value of this hook is @code{NULL}, which is treated as always\n\
+false.",
+ bool, (const_tree type), NULL)
+
+/* Return true if type T, mode MODE, may not be passed in registers,
+   but must be passed on the stack.  */
+/* ??? This predicate should be applied strictly after pass-by-reference.
+   Need audit to verify that this is the case.  */
+DEFHOOK
+(must_pass_in_stack,
+ "This target hook should return @code{true} if we should not pass @var{type}\n\
+solely in registers.  The file @file{expr.h} defines a\n\
+definition that is usually appropriate, refer to @file{expr.h} for additional\n\
+documentation.",
+ bool, (machine_mode mode, const_tree type),
+ must_pass_in_stack_var_size_or_pad)
+
+/* Return true if type TYPE, mode MODE, which is passed by reference,
+   should have the object copy generated by the callee rather than
+   the caller.  It is never called for TYPE requiring constructors.  */
+DEFHOOK
+(callee_copies,
+ "The function argument described by the parameters to this hook is\n\
+known to be passed by reference.  The hook should return true if the\n\
+function argument should be copied by the callee instead of copied\n\
+by the caller.\n\
+\n\
+For any argument for which the hook returns true, if it can be\n\
+determined that the argument is not modified, then a copy need\n\
+not be generated.\n\
+\n\
+The default version of this hook always returns false.",
+ bool,
+ (cumulative_args_t cum, machine_mode mode, const_tree type, bool named),
+ hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false)
+
+/* Return zero for arguments passed entirely on the stack or entirely
+   in registers.  If passed in both, return the number of bytes passed
+   in registers; the balance is therefore passed on the stack.  */
+DEFHOOK
+(arg_partial_bytes,
+ "This target hook returns the number of bytes at the beginning of an\n\
+argument that must be put in registers.  The value must be zero for\n\
+arguments that are passed entirely in registers or that are entirely\n\
+pushed on the stack.\n\
+\n\
+On some machines, certain arguments must be passed partially in\n\
+registers and partially in memory.  On these machines, typically the\n\
+first few words of arguments are passed in registers, and the rest\n\
+on the stack.  If a multi-word argument (a @code{double} or a\n\
+structure) crosses that boundary, its first few words must be passed\n\
+in registers and the rest must be pushed.  This macro tells the\n\
+compiler when this occurs, and how many bytes should go in registers.\n\
+\n\
+@code{TARGET_FUNCTION_ARG} for these arguments should return the first\n\
+register to be used by the caller for this argument; likewise\n\
+@code{TARGET_FUNCTION_INCOMING_ARG}, for the called function.",
+ int, (cumulative_args_t cum, machine_mode mode, tree type, bool named),
+ hook_int_CUMULATIVE_ARGS_mode_tree_bool_0)
+
+/* Update the state in CA to advance past an argument in the
+   argument list.  The values MODE, TYPE, and NAMED describe that
+   argument.  */
+DEFHOOK
+(function_arg_advance,
+ "This hook updates the summarizer variable pointed to by @var{ca} to\n\
+advance past an argument in the argument list.  The values @var{mode},\n\
+@var{type} and @var{named} describe that argument.  Once this is done,\n\
+the variable @var{cum} is suitable for analyzing the @emph{following}\n\
+argument with @code{TARGET_FUNCTION_ARG}, etc.\n\
+\n\
+This hook need not do anything if the argument in question was passed\n\
+on the stack.  The compiler knows how to track the amount of stack space\n\
+used for arguments without any special help.",
+ void,
+ (cumulative_args_t ca, machine_mode mode, const_tree type, bool named),
+ default_function_arg_advance)
+
+DEFHOOK
+(function_arg_offset,
+ "This hook returns the number of bytes to add to the offset of an\n\
+argument of type @var{type} and mode @var{mode} when passed in memory.\n\
+This is needed for the SPU, which passes @code{char} and @code{short}\n\
+arguments in the preferred slot that is in the middle of the quad word\n\
+instead of starting at the top.  The default implementation returns 0.",
+ HOST_WIDE_INT, (machine_mode mode, const_tree type),
+ default_function_arg_offset)
+
+DEFHOOK
+(function_arg_padding,
+ "This hook determines whether, and in which direction, to pad out\n\
+an argument of mode @var{mode} and type @var{type}.  It returns\n\
+@code{PAD_UPWARD} to insert padding above the argument, @code{PAD_DOWNWARD}\n\
+to insert padding below the argument, or @code{PAD_NONE} to inhibit padding.\n\
+\n\
+The @emph{amount} of padding is not controlled by this hook, but by\n\
+@code{TARGET_FUNCTION_ARG_ROUND_BOUNDARY}.  It is always just enough\n\
+to reach the next multiple of that boundary.\n\
+\n\
+This hook has a default definition that is right for most systems.\n\
+For little-endian machines, the default is to pad upward.  For\n\
+big-endian machines, the default is to pad downward for an argument of\n\
+constant size shorter than an @code{int}, and upward otherwise.",
+ pad_direction, (machine_mode mode, const_tree type),
+ default_function_arg_padding)
+
+/* Return zero if the argument described by the state of CA should
+   be placed on a stack, or a hard register in which to store the
+   argument.  The values MODE, TYPE, and NAMED describe that
+   argument.  */
+DEFHOOK
+(function_arg,
+ "Return an RTX indicating whether a function argument is passed in a\n\
+register and if so, which register.\n\
+\n\
+The arguments are @var{ca}, which summarizes all the previous\n\
+arguments; @var{mode}, the machine mode of the argument; @var{type},\n\
+the data type of the argument as a tree node or 0 if that is not known\n\
+(which happens for C support library functions); and @var{named},\n\
+which is @code{true} for an ordinary argument and @code{false} for\n\
+nameless arguments that correspond to @samp{@dots{}} in the called\n\
+function's prototype.  @var{type} can be an incomplete type if a\n\
+syntax error has previously occurred.\n\
+\n\
+The return value is usually either a @code{reg} RTX for the hard\n\
+register in which to pass the argument, or zero to pass the argument\n\
+on the stack.\n\
+\n\
+The return value can be a @code{const_int} which means argument is\n\
+passed in a target specific slot with specified number.  Target hooks\n\
+should be used to store or load argument in such case.  See\n\
+@code{TARGET_STORE_BOUNDS_FOR_ARG} and @code{TARGET_LOAD_BOUNDS_FOR_ARG}\n\
+for more information.\n\
+\n\
+The value of the expression can also be a @code{parallel} RTX@.  This is\n\
+used when an argument is passed in multiple locations.  The mode of the\n\
+@code{parallel} should be the mode of the entire argument.  The\n\
+@code{parallel} holds any number of @code{expr_list} pairs; each one\n\
+describes where part of the argument is passed.  In each\n\
+@code{expr_list} the first operand must be a @code{reg} RTX for the hard\n\
+register in which to pass this part of the argument, and the mode of the\n\
+register RTX indicates how large this part of the argument is.  The\n\
+second operand of the @code{expr_list} is a @code{const_int} which gives\n\
+the offset in bytes into the entire argument of where this part starts.\n\
+As a special exception the first @code{expr_list} in the @code{parallel}\n\
+RTX may have a first operand of zero.  This indicates that the entire\n\
+argument is also stored on the stack.\n\
+\n\
+The last time this hook is called, it is called with @code{MODE ==\n\
+VOIDmode}, and its result is passed to the @code{call} or @code{call_value}\n\
+pattern as operands 2 and 3 respectively.\n\
+\n\
+@cindex @file{stdarg.h} and register arguments\n\
+The usual way to make the ISO library @file{stdarg.h} work on a\n\
+machine where some arguments are usually passed in registers, is to\n\
+cause nameless arguments to be passed on the stack instead.  This is\n\
+done by making @code{TARGET_FUNCTION_ARG} return 0 whenever\n\
+@var{named} is @code{false}.\n\
+\n\
+@cindex @code{TARGET_MUST_PASS_IN_STACK}, and @code{TARGET_FUNCTION_ARG}\n\
+@cindex @code{REG_PARM_STACK_SPACE}, and @code{TARGET_FUNCTION_ARG}\n\
+You may use the hook @code{targetm.calls.must_pass_in_stack}\n\
+in the definition of this macro to determine if this argument is of a\n\
+type that must be passed in the stack.  If @code{REG_PARM_STACK_SPACE}\n\
+is not defined and @code{TARGET_FUNCTION_ARG} returns nonzero for such an\n\
+argument, the compiler will abort.  If @code{REG_PARM_STACK_SPACE} is\n\
+defined, the argument will be computed in the stack and then loaded into\n\
+a register.",
+ rtx, (cumulative_args_t ca, machine_mode mode, const_tree type,
+       bool named),
+ default_function_arg)
+
+DEFHOOK
+(function_incoming_arg,
+ "Define this hook if the caller and callee on the target have different\n\
+views of where arguments are passed.  Also define this hook if there are\n\
+functions that are never directly called, but are invoked by the hardware\n\
+and which have nonstandard calling conventions.\n\
+\n\
+In this case @code{TARGET_FUNCTION_ARG} computes the register in\n\
+which the caller passes the value, and\n\
+@code{TARGET_FUNCTION_INCOMING_ARG} should be defined in a similar\n\
+fashion to tell the function being called where the arguments will\n\
+arrive.\n\
+\n\
+@code{TARGET_FUNCTION_INCOMING_ARG} can also return arbitrary address\n\
+computation using hard register, which can be forced into a register,\n\
+so that it can be used to pass special arguments.\n\
+\n\
+If @code{TARGET_FUNCTION_INCOMING_ARG} is not defined,\n\
+@code{TARGET_FUNCTION_ARG} serves both purposes.",
+ rtx, (cumulative_args_t ca, machine_mode mode, const_tree type,
+       bool named),
+ default_function_incoming_arg)
+
+DEFHOOK
+(function_arg_boundary,
+ "This hook returns the alignment boundary, in bits, of an argument\n\
+with the specified mode and type.  The default hook returns\n\
+@code{PARM_BOUNDARY} for all arguments.",
+ unsigned int, (machine_mode mode, const_tree type),
+ default_function_arg_boundary)
+
+DEFHOOK
+(function_arg_round_boundary,
+ "Normally, the size of an argument is rounded up to @code{PARM_BOUNDARY},\n\
+which is the default value for this hook.  You can define this hook to\n\
+return a different value if an argument size must be rounded to a larger\n\
+value.",
+ unsigned int, (machine_mode mode, const_tree type),
+ default_function_arg_round_boundary)
+
+/* Return the diagnostic message string if function without a prototype
+   is not allowed for this 'val' argument; NULL otherwise. */
+DEFHOOK
+(invalid_arg_for_unprototyped_fn,
+ "If defined, this macro returns the diagnostic message when it is\n\
+illegal to pass argument @var{val} to function @var{funcdecl}\n\
+with prototype @var{typelist}.",
+ const char *, (const_tree typelist, const_tree funcdecl, const_tree val),
+ hook_invalid_arg_for_unprototyped_fn)
+
+/* Return an rtx for the return value location of the function
+   specified by FN_DECL_OR_TYPE with a return type of RET_TYPE.  */
+DEFHOOK
+(function_value,
+ "\n\
+Define this to return an RTX representing the place where a function\n\
+returns or receives a value of data type @var{ret_type}, a tree node\n\
+representing a data type.  @var{fn_decl_or_type} is a tree node\n\
+representing @code{FUNCTION_DECL} or @code{FUNCTION_TYPE} of a\n\
+function being called.  If @var{outgoing} is false, the hook should\n\
+compute the register in which the caller will see the return value.\n\
+Otherwise, the hook should return an RTX representing the place where\n\
+a function returns a value.\n\
+\n\
+On many machines, only @code{TYPE_MODE (@var{ret_type})} is relevant.\n\
+(Actually, on most machines, scalar values are returned in the same\n\
+place regardless of mode.)  The value of the expression is usually a\n\
+@code{reg} RTX for the hard register where the return value is stored.\n\
+The value can also be a @code{parallel} RTX, if the return value is in\n\
+multiple places.  See @code{TARGET_FUNCTION_ARG} for an explanation of the\n\
+@code{parallel} form.   Note that the callee will populate every\n\
+location specified in the @code{parallel}, but if the first element of\n\
+the @code{parallel} contains the whole return value, callers will use\n\
+that element as the canonical location and ignore the others.  The m68k\n\
+port uses this type of @code{parallel} to return pointers in both\n\
+@samp{%a0} (the canonical location) and @samp{%d0}.\n\
+\n\
+If @code{TARGET_PROMOTE_FUNCTION_RETURN} returns true, you must apply\n\
+the same promotion rules specified in @code{PROMOTE_MODE} if\n\
+@var{valtype} is a scalar type.\n\
+\n\
+If the precise function being called is known, @var{func} is a tree\n\
+node (@code{FUNCTION_DECL}) for it; otherwise, @var{func} is a null\n\
+pointer.  This makes it possible to use a different value-returning\n\
+convention for specific functions when all their calls are\n\
+known.\n\
+\n\
+Some target machines have ``register windows'' so that the register in\n\
+which a function returns its value is not the same as the one in which\n\
+the caller sees the value.  For such machines, you should return\n\
+different RTX depending on @var{outgoing}.\n\
+\n\
+@code{TARGET_FUNCTION_VALUE} is not used for return values with\n\
+aggregate data types, because these are returned in another way.  See\n\
+@code{TARGET_STRUCT_VALUE_RTX} and related macros, below.",
+ rtx, (const_tree ret_type, const_tree fn_decl_or_type, bool outgoing),
+ default_function_value)
+
+/* Return the rtx for the result of a libcall of mode MODE,
+   calling the function FN_NAME.  */
+DEFHOOK
+(libcall_value,
+ "Define this hook if the back-end needs to know the name of the libcall\n\
+function in order to determine where the result should be returned.\n\
+\n\
+The mode of the result is given by @var{mode} and the name of the called\n\
+library function is given by @var{fun}.  The hook should return an RTX\n\
+representing the place where the library function result will be returned.\n\
+\n\
+If this hook is not defined, then LIBCALL_VALUE will be used.",
+ rtx, (machine_mode mode, const_rtx fun),
+ default_libcall_value)
+
+/* Return true if REGNO is a possible register number for
+   a function value as seen by the caller.  */
+DEFHOOK
+(function_value_regno_p,
+ "A target hook that return @code{true} if @var{regno} is the number of a hard\n\
+register in which the values of called function may come back.\n\
+\n\
+A register whose use for returning values is limited to serving as the\n\
+second of a pair (for a value of type @code{double}, say) need not be\n\
+recognized by this target hook.\n\
+\n\
+If the machine has register windows, so that the caller and the called\n\
+function use different registers for the return value, this target hook\n\
+should recognize only the caller's register numbers.\n\
+\n\
+If this hook is not defined, then FUNCTION_VALUE_REGNO_P will be used.",
+ bool, (const unsigned int regno),
+ default_function_value_regno_p)
+
+/* ??? Documenting this hook requires a GFDL license grant.  */
+DEFHOOK_UNDOC
+(internal_arg_pointer,
+"Return an rtx for the argument pointer incoming to the\
+ current function.",
+ rtx, (void),
+ default_internal_arg_pointer)
+
+/* Update the current function stack boundary if needed.  */
+DEFHOOK
+(update_stack_boundary,
+ "Define this macro to update the current function stack boundary if\n\
+necessary.",
+ void, (void), NULL)
+
+/* Handle stack alignment and return an rtx for Dynamic Realign
+   Argument Pointer if necessary.  */
+DEFHOOK
+(get_drap_rtx,
+ "This hook should return an rtx for Dynamic Realign Argument Pointer (DRAP) if a\n\
+different argument pointer register is needed to access the function's\n\
+argument list due to stack realignment.  Return @code{NULL} if no DRAP\n\
+is needed.",
+ rtx, (void), NULL)
+
+/* Return true if all function parameters should be spilled to the
+   stack.  */
+DEFHOOK
+(allocate_stack_slots_for_args,
+ "When optimization is disabled, this hook indicates whether or not\n\
+arguments should be allocated to stack slots.  Normally, GCC allocates\n\
+stacks slots for arguments when not optimizing in order to make\n\
+debugging easier.  However, when a function is declared with\n\
+@code{__attribute__((naked))}, there is no stack frame, and the compiler\n\
+cannot safely move arguments from the registers in which they are passed\n\
+to the stack.  Therefore, this hook should return true in general, but\n\
+false for naked functions.  The default implementation always returns true.",
+ bool, (void),
+ hook_bool_void_true)
+
+/* Return an rtx for the static chain for FNDECL_OR_TYPE.  If INCOMING_P
+   is true, then it should be for the callee; otherwise for the caller.  */
+DEFHOOK
+(static_chain,
+ "This hook replaces the use of @code{STATIC_CHAIN_REGNUM} et al for\n\
+targets that may use different static chain locations for different\n\
+nested functions.  This may be required if the target has function\n\
+attributes that affect the calling conventions of the function and\n\
+those calling conventions use different static chain locations.\n\
+\n\
+The default version of this hook uses @code{STATIC_CHAIN_REGNUM} et al.\n\
+\n\
+If the static chain is passed in memory, this hook should be used to\n\
+provide rtx giving @code{mem} expressions that denote where they are stored.\n\
+Often the @code{mem} expression as seen by the caller will be at an offset\n\
+from the stack pointer and the @code{mem} expression as seen by the callee\n\
+will be at an offset from the frame pointer.\n\
+@findex stack_pointer_rtx\n\
+@findex frame_pointer_rtx\n\
+@findex arg_pointer_rtx\n\
+The variables @code{stack_pointer_rtx}, @code{frame_pointer_rtx}, and\n\
+@code{arg_pointer_rtx} will have been initialized and should be used\n\
+to refer to those items.",
+ rtx, (const_tree fndecl_or_type, bool incoming_p),
+ default_static_chain)
+
+/* Fill in the trampoline at MEM with a call to FNDECL and a
+   static chain value of CHAIN.  */
+DEFHOOK
+(trampoline_init,
+ "This hook is called to initialize a trampoline.\n\
+@var{m_tramp} is an RTX for the memory block for the trampoline; @var{fndecl}\n\
+is the @code{FUNCTION_DECL} for the nested function; @var{static_chain} is an\n\
+RTX for the static chain value that should be passed to the function\n\
+when it is called.\n\
+\n\
+If the target defines @code{TARGET_ASM_TRAMPOLINE_TEMPLATE}, then the\n\
+first thing this hook should do is emit a block move into @var{m_tramp}\n\
+from the memory block returned by @code{assemble_trampoline_template}.\n\
+Note that the block move need only cover the constant parts of the\n\
+trampoline.  If the target isolates the variable parts of the trampoline\n\
+to the end, not all @code{TRAMPOLINE_SIZE} bytes need be copied.\n\
+\n\
+If the target requires any other actions, such as flushing caches or\n\
+enabling stack execution, these actions should be performed after\n\
+initializing the trampoline proper.",
+ void, (rtx m_tramp, tree fndecl, rtx static_chain),
+ default_trampoline_init)
+
+/* Adjust the address of the trampoline in a target-specific way.  */
+DEFHOOK
+(trampoline_adjust_address,
+ "This hook should perform any machine-specific adjustment in\n\
+the address of the trampoline.  Its argument contains the address of the\n\
+memory block that was passed to @code{TARGET_TRAMPOLINE_INIT}.  In case\n\
+the address to be used for a function call should be different from the\n\
+address at which the template was stored, the different address should\n\
+be returned; otherwise @var{addr} should be returned unchanged.\n\
+If this hook is not defined, @var{addr} will be used for function calls.",
+ rtx, (rtx addr), NULL)
+
+DEFHOOKPOD
+(custom_function_descriptors,
+ "If the target can use GCC's generic descriptor mechanism for nested\n\
+functions, define this hook to a power of 2 representing an unused bit\n\
+in function pointers which can be used to differentiate descriptors at\n\
+run time.  This value gives the number of bytes by which descriptor\n\
+pointers are misaligned compared to function pointers.  For example, on\n\
+targets that require functions to be aligned to a 4-byte boundary, a\n\
+value of either 1 or 2 is appropriate unless the architecture already\n\
+reserves the bit for another purpose, such as on ARM.\n\
+\n\
+Define this hook to 0 if the target implements ABI support for\n\
+function descriptors in its standard calling sequence, like for example\n\
+HPPA or IA-64.\n\
+\n\
+Using descriptors for nested functions\n\
+eliminates the need for trampolines that reside on the stack and require\n\
+it to be made executable.",\
+ int, -1)
+
+/* Return the number of bytes of its own arguments that a function
+   pops on returning, or 0 if the function pops no arguments and the
+   caller must therefore pop them all after the function returns.  */
+/* ??? tm.texi has no types for the parameters.  */
+DEFHOOK
+(return_pops_args,
+ "This target hook returns the number of bytes of its own arguments that\n\
+a function pops on returning, or 0 if the function pops no arguments\n\
+and the caller must therefore pop them all after the function returns.\n\
+\n\
+@var{fundecl} is a C variable whose value is a tree node that describes\n\
+the function in question.  Normally it is a node of type\n\
+@code{FUNCTION_DECL} that describes the declaration of the function.\n\
+From this you can obtain the @code{DECL_ATTRIBUTES} of the function.\n\
+\n\
+@var{funtype} is a C variable whose value is a tree node that\n\
+describes the function in question.  Normally it is a node of type\n\
+@code{FUNCTION_TYPE} that describes the data type of the function.\n\
+From this it is possible to obtain the data types of the value and\n\
+arguments (if known).\n\
+\n\
+When a call to a library function is being considered, @var{fundecl}\n\
+will contain an identifier node for the library function.  Thus, if\n\
+you need to distinguish among various library functions, you can do so\n\
+by their names.  Note that ``library function'' in this context means\n\
+a function used to perform arithmetic, whose name is known specially\n\
+in the compiler and was not mentioned in the C code being compiled.\n\
+\n\
+@var{size} is the number of bytes of arguments passed on the\n\
+stack.  If a variable number of bytes is passed, it is zero, and\n\
+argument popping will always be the responsibility of the calling function.\n\
+\n\
+On the VAX, all functions always pop their arguments, so the definition\n\
+of this macro is @var{size}.  On the 68000, using the standard\n\
+calling convention, no functions pop their arguments, so the value of\n\
+the macro is always 0 in this case.  But an alternative calling\n\
+convention is available in which functions that take a fixed number of\n\
+arguments pop them but other functions (such as @code{printf}) pop\n\
+nothing (the caller pops all).  When this convention is in use,\n\
+@var{funtype} is examined to determine whether a function takes a fixed\n\
+number of arguments.",
+ poly_int64, (tree fundecl, tree funtype, poly_int64 size),
+ default_return_pops_args)
+
+/* Return a mode wide enough to copy any function value that might be
+   returned.  */
+DEFHOOK
+(get_raw_result_mode,
+ "This target hook returns the mode to be used when accessing raw return\
+ registers in @code{__builtin_return}.  Define this macro if the value\
+ in @var{reg_raw_mode} is not correct.",
+ fixed_size_mode, (int regno),
+ default_get_reg_raw_mode)
+
+/* Return a mode wide enough to copy any argument value that might be
+   passed.  */
+DEFHOOK
+(get_raw_arg_mode,
+ "This target hook returns the mode to be used when accessing raw argument\
+ registers in @code{__builtin_apply_args}.  Define this macro if the value\
+ in @var{reg_raw_mode} is not correct.",
+ fixed_size_mode, (int regno),
+ default_get_reg_raw_mode)
+
+/* Return true if a type is an empty record.  */
+DEFHOOK
+(empty_record_p,
+ "This target hook returns true if the type is an empty record.  The default\n\
+is to return @code{false}.",
+ bool, (const_tree type),
+ hook_bool_const_tree_false)
+
+/* Warn about the change in empty class parameter passing ABI.  */
+DEFHOOK
+(warn_parameter_passing_abi,
+ "This target hook warns about the change in empty class parameter passing\n\
+ABI.",
+ void, (cumulative_args_t ca, tree type),
+ hook_void_CUMULATIVE_ARGS_tree)
+
+HOOK_VECTOR_END (calls)
+
+DEFHOOK
+(use_pseudo_pic_reg,
+ "This hook should return 1 in case pseudo register should be created\n\
+for pic_offset_table_rtx during function expand.",
+ bool, (void),
+ hook_bool_void_false)
+
+DEFHOOK
+(init_pic_reg,
+ "Perform a target dependent initialization of pic_offset_table_rtx.\n\
+This hook is called at the start of register allocation.",
+ void, (void),
+ hook_void_void)
+
+/* Return the diagnostic message string if conversion from FROMTYPE
+   to TOTYPE is not allowed, NULL otherwise.  */
+DEFHOOK
+(invalid_conversion,
+ "If defined, this macro returns the diagnostic message when it is\n\
+invalid to convert from @var{fromtype} to @var{totype}, or @code{NULL}\n\
+if validity should be determined by the front end.",
+ const char *, (const_tree fromtype, const_tree totype),
+ hook_constcharptr_const_tree_const_tree_null)
+
+/* Return the diagnostic message string if the unary operation OP is
+   not permitted on TYPE, NULL otherwise.  */
+DEFHOOK
+(invalid_unary_op,
+ "If defined, this macro returns the diagnostic message when it is\n\
+invalid to apply operation @var{op} (where unary plus is denoted by\n\
+@code{CONVERT_EXPR}) to an operand of type @var{type}, or @code{NULL}\n\
+if validity should be determined by the front end.",
+ const char *, (int op, const_tree type),
+ hook_constcharptr_int_const_tree_null)
+
+/* Return the diagnostic message string if the binary operation OP
+   is not permitted on TYPE1 and TYPE2, NULL otherwise.  */
+DEFHOOK
+(invalid_binary_op,
+ "If defined, this macro returns the diagnostic message when it is\n\
+invalid to apply operation @var{op} to operands of types @var{type1}\n\
+and @var{type2}, or @code{NULL} if validity should be determined by\n\
+the front end.",
+ const char *, (int op, const_tree type1, const_tree type2),
+ hook_constcharptr_int_const_tree_const_tree_null)
+
+/* If values of TYPE are promoted to some other type when used in
+   expressions (analogous to the integer promotions), return that type,
+   or NULL_TREE otherwise.  */
+DEFHOOK
+(promoted_type,
+ "If defined, this target hook returns the type to which values of\n\
+@var{type} should be promoted when they appear in expressions,\n\
+analogous to the integer promotions, or @code{NULL_TREE} to use the\n\
+front end's normal promotion rules.  This hook is useful when there are\n\
+target-specific types with special promotion rules.\n\
+This is currently used only by the C and C++ front ends.",
+ tree, (const_tree type),
+ hook_tree_const_tree_null)
+
+/* Convert EXPR to TYPE, if target-specific types with special conversion
+   rules are involved.  Return the converted expression, or NULL to apply
+   the standard conversion rules.  */
+DEFHOOK
+(convert_to_type,
+ "If defined, this hook returns the result of converting @var{expr} to\n\
+@var{type}.  It should return the converted expression,\n\
+or @code{NULL_TREE} to apply the front end's normal conversion rules.\n\
+This hook is useful when there are target-specific types with special\n\
+conversion rules.\n\
+This is currently used only by the C and C++ front ends.",
+ tree, (tree type, tree expr),
+ hook_tree_tree_tree_null)
+
+DEFHOOK
+(can_change_mode_class,
+ "This hook returns true if it is possible to bitcast values held in\n\
+registers of class @var{rclass} from mode @var{from} to mode @var{to}\n\
+and if doing so preserves the low-order bits that are common to both modes.\n\
+The result is only meaningful if @var{rclass} has registers that can hold\n\
+both @code{from} and @code{to}.  The default implementation returns true.\n\
+\n\
+As an example of when such bitcasting is invalid, loading 32-bit integer or\n\
+floating-point objects into floating-point registers on Alpha extends them\n\
+to 64 bits.  Therefore loading a 64-bit object and then storing it as a\n\
+32-bit object does not store the low-order 32 bits, as would be the case\n\
+for a normal register.  Therefore, @file{alpha.h} defines\n\
+@code{TARGET_CAN_CHANGE_MODE_CLASS} to return:\n\
+\n\
+@smallexample\n\
+(GET_MODE_SIZE (from) == GET_MODE_SIZE (to)\n\
+ || !reg_classes_intersect_p (FLOAT_REGS, rclass))\n\
+@end smallexample\n\
+\n\
+Even if storing from a register in mode @var{to} would be valid,\n\
+if both @var{from} and @code{raw_reg_mode} for @var{rclass} are wider\n\
+than @code{word_mode}, then we must prevent @var{to} narrowing the\n\
+mode.  This happens when the middle-end assumes that it can load\n\
+or store pieces of an @var{N}-word pseudo, and that the pseudo will\n\
+eventually be allocated to @var{N} @code{word_mode} hard registers.\n\
+Failure to prevent this kind of mode change will result in the\n\
+entire @code{raw_reg_mode} being modified instead of the partial\n\
+value that the middle-end intended.",
+ bool, (machine_mode from, machine_mode to, reg_class_t rclass),
+ hook_bool_mode_mode_reg_class_t_true)
+
+/* Change pseudo allocno class calculated by IRA.  */
+DEFHOOK
+(ira_change_pseudo_allocno_class,
+ "A target hook which can change allocno class for given pseudo from\n\
+  allocno and best class calculated by IRA.\n\
+  \n\
+  The default version of this target hook always returns given class.",
+ reg_class_t, (int, reg_class_t, reg_class_t),
+ default_ira_change_pseudo_allocno_class)
+
+/* Return true if we use LRA instead of reload.  */
+DEFHOOK
+(lra_p,
+ "A target hook which returns true if we use LRA instead of reload pass.\
+  \
+  The default version of this target hook returns true.  New ports\
+  should use LRA, and existing ports are encouraged to convert.",
+ bool, (void),
+ default_lra_p)
+
+/* Return register priority of given hard regno for the current target.  */
+DEFHOOK
+(register_priority,
+ "A target hook which returns the register priority number to which the\
+  register @var{hard_regno} belongs to.  The bigger the number, the\
+  more preferable the hard register usage (when all other conditions are\
+  the same).  This hook can be used to prefer some hard register over\
+  others in LRA.  For example, some x86-64 register usage needs\
+  additional prefix which makes instructions longer.  The hook can\
+  return lower priority number for such registers make them less favorable\
+  and as result making the generated code smaller.\
+  \
+  The default version of this target hook returns always zero.",
+ int, (int),
+ default_register_priority)
+
+/* Return true if we need register usage leveling.  */
+DEFHOOK
+(register_usage_leveling_p,
+ "A target hook which returns true if we need register usage leveling.\
+  That means if a few hard registers are equally good for the\
+  assignment, we choose the least used hard register.  The register\
+  usage leveling may be profitable for some targets.  Don't use the\
+  usage leveling for targets with conditional execution or targets\
+  with big register files as it hurts if-conversion and cross-jumping\
+  optimizations.\
+  \
+  The default version of this target hook returns always false.",
+ bool, (void),
+ default_register_usage_leveling_p)
+
+/* Return true if maximal address displacement can be different.  */
+DEFHOOK
+(different_addr_displacement_p,
+ "A target hook which returns true if an address with the same structure\
+  can have different maximal legitimate displacement.  For example, the\
+  displacement can depend on memory mode or on operand combinations in\
+  the insn.\
+  \
+  The default version of this target hook returns always false.",
+ bool, (void),
+ default_different_addr_displacement_p)
+
+/* Determine class for spilling pseudos of given mode into registers
+   instead of memory.  */
+DEFHOOK
+(spill_class,
+ "This hook defines a class of registers which could be used for spilling\
+  pseudos of the given mode and class, or @code{NO_REGS} if only memory\
+  should be used.  Not defining this hook is equivalent to returning\
+  @code{NO_REGS} for all inputs.",
+ reg_class_t, (reg_class_t, machine_mode),
+ NULL)
+
+/* Determine an additional allocno class.  */
+DEFHOOK
+(additional_allocno_class_p,
+ "This hook should return @code{true} if given class of registers should\
+  be an allocno class in any way.  Usually RA uses only one register\
+  class from all classes containing the same register set.  In some\
+  complicated cases, you need to have two or more such classes as\
+  allocno ones for RA correct work.  Not defining this hook is\
+  equivalent to returning @code{false} for all inputs.",
+ bool, (reg_class_t),
+ hook_bool_reg_class_t_false)
+
+DEFHOOK
+(cstore_mode,
+ "This hook defines the machine mode to use for the boolean result of\
+  conditional store patterns.  The ICODE argument is the instruction code\
+  for the cstore being performed.  Not definiting this hook is the same\
+  as accepting the mode encoded into operand 0 of the cstore expander\
+  patterns.",
+  scalar_int_mode, (enum insn_code icode),
+  default_cstore_mode)
+
+/* This target hook allows the backend to compute the register pressure
+   classes to use.  */
+DEFHOOK
+(compute_pressure_classes,
+ "A target hook which lets a backend compute the set of pressure classes to\
+  be used by those optimization passes which take register pressure into\
+  account, as opposed to letting IRA compute them.  It returns the number of\
+  register classes stored in the array @var{pressure_classes}.",
+ int, (enum reg_class *pressure_classes), NULL)
+
+/* True if a structure, union or array with MODE containing FIELD should
+   be accessed using BLKmode.  */
+DEFHOOK
+(member_type_forces_blk,
+ "Return true if a structure, union or array containing @var{field} should\n\
+be accessed using @code{BLKMODE}.\n\
+\n\
+If @var{field} is the only field in the structure, @var{mode} is its\n\
+mode, otherwise @var{mode} is VOIDmode.  @var{mode} is provided in the\n\
+case where structures of one field would require the structure's mode to\n\
+retain the field's mode.\n\
+\n\
+Normally, this is not needed.",
+ bool, (const_tree field, machine_mode mode),
+ default_member_type_forces_blk)
+
+/* See tree-ssa-math-opts.c:divmod_candidate_p for conditions
+   that gate the divod transform.  */
+DEFHOOK
+(expand_divmod_libfunc,
+ "Define this hook for enabling divmod transform if the port does not have\n\
+hardware divmod insn but defines target-specific divmod libfuncs.", 
+ void, (rtx libfunc, machine_mode mode, rtx op0, rtx op1, rtx *quot, rtx *rem),
+ NULL)
+
+/* Return the class for a secondary reload, and fill in extra information.  */
+DEFHOOK
+(secondary_reload,
+ "Many machines have some registers that cannot be copied directly to or\n\
+from memory or even from other types of registers.  An example is the\n\
+@samp{MQ} register, which on most machines, can only be copied to or\n\
+from general registers, but not memory.  Below, we shall be using the\n\
+term 'intermediate register' when a move operation cannot be performed\n\
+directly, but has to be done by copying the source into the intermediate\n\
+register first, and then copying the intermediate register to the\n\
+destination.  An intermediate register always has the same mode as\n\
+source and destination.  Since it holds the actual value being copied,\n\
+reload might apply optimizations to re-use an intermediate register\n\
+and eliding the copy from the source when it can determine that the\n\
+intermediate register still holds the required value.\n\
+\n\
+Another kind of secondary reload is required on some machines which\n\
+allow copying all registers to and from memory, but require a scratch\n\
+register for stores to some memory locations (e.g., those with symbolic\n\
+address on the RT, and those with certain symbolic address on the SPARC\n\
+when compiling PIC)@.  Scratch registers need not have the same mode\n\
+as the value being copied, and usually hold a different value than\n\
+that being copied.  Special patterns in the md file are needed to\n\
+describe how the copy is performed with the help of the scratch register;\n\
+these patterns also describe the number, register class(es) and mode(s)\n\
+of the scratch register(s).\n\
+\n\
+In some cases, both an intermediate and a scratch register are required.\n\
+\n\
+For input reloads, this target hook is called with nonzero @var{in_p},\n\
+and @var{x} is an rtx that needs to be copied to a register of class\n\
+@var{reload_class} in @var{reload_mode}.  For output reloads, this target\n\
+hook is called with zero @var{in_p}, and a register of class @var{reload_class}\n\
+needs to be copied to rtx @var{x} in @var{reload_mode}.\n\
+\n\
+If copying a register of @var{reload_class} from/to @var{x} requires\n\
+an intermediate register, the hook @code{secondary_reload} should\n\
+return the register class required for this intermediate register.\n\
+If no intermediate register is required, it should return NO_REGS.\n\
+If more than one intermediate register is required, describe the one\n\
+that is closest in the copy chain to the reload register.\n\
+\n\
+If scratch registers are needed, you also have to describe how to\n\
+perform the copy from/to the reload register to/from this\n\
+closest intermediate register.  Or if no intermediate register is\n\
+required, but still a scratch register is needed, describe the\n\
+copy  from/to the reload register to/from the reload operand @var{x}.\n\
+\n\
+You do this by setting @code{sri->icode} to the instruction code of a pattern\n\
+in the md file which performs the move.  Operands 0 and 1 are the output\n\
+and input of this copy, respectively.  Operands from operand 2 onward are\n\
+for scratch operands.  These scratch operands must have a mode, and a\n\
+single-register-class\n\
+@c [later: or memory]\n\
+output constraint.\n\
+\n\
+When an intermediate register is used, the @code{secondary_reload}\n\
+hook will be called again to determine how to copy the intermediate\n\
+register to/from the reload operand @var{x}, so your hook must also\n\
+have code to handle the register class of the intermediate operand.\n\
+\n\
+@c [For later: maybe we'll allow multi-alternative reload patterns -\n\
+@c   the port maintainer could name a mov<mode> pattern that has clobbers -\n\
+@c   and match the constraints of input and output to determine the required\n\
+@c   alternative.  A restriction would be that constraints used to match\n\
+@c   against reloads registers would have to be written as register class\n\
+@c   constraints, or we need a new target macro / hook that tells us if an\n\
+@c   arbitrary constraint can match an unknown register of a given class.\n\
+@c   Such a macro / hook would also be useful in other places.]\n\
+\n\
+\n\
+@var{x} might be a pseudo-register or a @code{subreg} of a\n\
+pseudo-register, which could either be in a hard register or in memory.\n\
+Use @code{true_regnum} to find out; it will return @minus{}1 if the pseudo is\n\
+in memory and the hard register number if it is in a register.\n\
+\n\
+Scratch operands in memory (constraint @code{\"=m\"} / @code{\"=&m\"}) are\n\
+currently not supported.  For the time being, you will have to continue\n\
+to use @code{TARGET_SECONDARY_MEMORY_NEEDED} for that purpose.\n\
+\n\
+@code{copy_cost} also uses this target hook to find out how values are\n\
+copied.  If you want it to include some extra cost for the need to allocate\n\
+(a) scratch register(s), set @code{sri->extra_cost} to the additional cost.\n\
+Or if two dependent moves are supposed to have a lower cost than the sum\n\
+of the individual moves due to expected fortuitous scheduling and/or special\n\
+forwarding logic, you can set @code{sri->extra_cost} to a negative amount.",
+ reg_class_t,
+ (bool in_p, rtx x, reg_class_t reload_class, machine_mode reload_mode,
+  secondary_reload_info *sri),
+ default_secondary_reload)
+
+DEFHOOK
+(secondary_memory_needed,
+ "Certain machines have the property that some registers cannot be copied\n\
+to some other registers without using memory.  Define this hook on\n\
+those machines to return true if objects of mode @var{m} in registers\n\
+of @var{class1} can only be copied to registers of class @var{class2} by\n\
+ storing a register of @var{class1} into memory and loading that memory\n\
+location into a register of @var{class2}.  The default definition returns\n\
+false for all inputs.",
+ bool, (machine_mode mode, reg_class_t class1, reg_class_t class2),
+ hook_bool_mode_reg_class_t_reg_class_t_false)
+
+DEFHOOK
+(secondary_memory_needed_mode,
+ "If @code{TARGET_SECONDARY_MEMORY_NEEDED} tells the compiler to use memory\n\
+when moving between two particular registers of mode @var{mode},\n\
+this hook specifies the mode that the memory should have.\n\
+\n\
+The default depends on @code{TARGET_LRA_P}.  Without LRA, the default\n\
+is to use a word-sized mode for integral modes that are smaller than a\n\
+a word.  This is right thing to do on most machines because it ensures\n\
+that all bits of the register are copied and prevents accesses to the\n\
+registers in a narrower mode, which some machines prohibit for\n\
+floating-point registers.\n\
+\n\
+However, this default behavior is not correct on some machines, such as\n\
+the DEC Alpha, that store short integers in floating-point registers\n\
+differently than in integer registers.  On those machines, the default\n\
+widening will not work correctly and you must define this hook to\n\
+suppress that widening in some cases.  See the file @file{alpha.c} for\n\
+details.\n\
+\n\
+With LRA, the default is to use @var{mode} unmodified.",
+ machine_mode, (machine_mode mode),
+ default_secondary_memory_needed_mode)
+
+/* Given an rtx X being reloaded into a reg required to be in class CLASS,
+   return the class of reg to actually use.  */
+DEFHOOK
+(preferred_reload_class,
+ "A target hook that places additional restrictions on the register class\n\
+to use when it is necessary to copy value @var{x} into a register in class\n\
+@var{rclass}.  The value is a register class; perhaps @var{rclass}, or perhaps\n\
+another, smaller class.\n\
+\n\
+The default version of this hook always returns value of @code{rclass} argument.\n\
+\n\
+Sometimes returning a more restrictive class makes better code.  For\n\
+example, on the 68000, when @var{x} is an integer constant that is in range\n\
+for a @samp{moveq} instruction, the value of this macro is always\n\
+@code{DATA_REGS} as long as @var{rclass} includes the data registers.\n\
+Requiring a data register guarantees that a @samp{moveq} will be used.\n\
+\n\
+One case where @code{TARGET_PREFERRED_RELOAD_CLASS} must not return\n\
+@var{rclass} is if @var{x} is a legitimate constant which cannot be\n\
+loaded into some register class.  By returning @code{NO_REGS} you can\n\
+force @var{x} into a memory location.  For example, rs6000 can load\n\
+immediate values into general-purpose registers, but does not have an\n\
+instruction for loading an immediate value into a floating-point\n\
+register, so @code{TARGET_PREFERRED_RELOAD_CLASS} returns @code{NO_REGS} when\n\
+@var{x} is a floating-point constant.  If the constant can't be loaded\n\
+into any kind of register, code generation will be better if\n\
+@code{TARGET_LEGITIMATE_CONSTANT_P} makes the constant illegitimate instead\n\
+of using @code{TARGET_PREFERRED_RELOAD_CLASS}.\n\
+\n\
+If an insn has pseudos in it after register allocation, reload will go\n\
+through the alternatives and call repeatedly @code{TARGET_PREFERRED_RELOAD_CLASS}\n\
+to find the best one.  Returning @code{NO_REGS}, in this case, makes\n\
+reload add a @code{!} in front of the constraint: the x86 back-end uses\n\
+this feature to discourage usage of 387 registers when math is done in\n\
+the SSE registers (and vice versa).",
+ reg_class_t,
+ (rtx x, reg_class_t rclass),
+ default_preferred_reload_class)
+
+/* Like TARGET_PREFERRED_RELOAD_CLASS, but for output reloads instead of
+   input reloads.  */
+DEFHOOK
+(preferred_output_reload_class,
+ "Like @code{TARGET_PREFERRED_RELOAD_CLASS}, but for output reloads instead of\n\
+input reloads.\n\
+\n\
+The default version of this hook always returns value of @code{rclass}\n\
+argument.\n\
+\n\
+You can also use @code{TARGET_PREFERRED_OUTPUT_RELOAD_CLASS} to discourage\n\
+reload from using some alternatives, like @code{TARGET_PREFERRED_RELOAD_CLASS}.",
+ reg_class_t,
+ (rtx x, reg_class_t rclass),
+ default_preferred_output_reload_class)
+
+DEFHOOK
+(select_early_remat_modes,
+ "On some targets, certain modes cannot be held in registers around a\n\
+standard ABI call and are relatively expensive to spill to the stack.\n\
+The early rematerialization pass can help in such cases by aggressively\n\
+recomputing values after calls, so that they don't need to be spilled.\n\
+\n\
+This hook returns the set of such modes by setting the associated bits\n\
+in @var{modes}.  The default implementation selects no modes, which has\n\
+the effect of disabling the early rematerialization pass.",
+ void, (sbitmap modes),
+ default_select_early_remat_modes)
+
+DEFHOOK
+(class_likely_spilled_p,
+ "A target hook which returns @code{true} if pseudos that have been assigned\n\
+to registers of class @var{rclass} would likely be spilled because\n\
+registers of @var{rclass} are needed for spill registers.\n\
+\n\
+The default version of this target hook returns @code{true} if @var{rclass}\n\
+has exactly one register and @code{false} otherwise.  On most machines, this\n\
+default should be used.  For generally register-starved machines, such as\n\
+i386, or machines with right register constraints, such as SH, this hook\n\
+can be used to avoid excessive spilling.\n\
+\n\
+This hook is also used by some of the global intra-procedural code\n\
+transformations to throtle code motion, to avoid increasing register\n\
+pressure.",
+ bool, (reg_class_t rclass),
+ default_class_likely_spilled_p)
+
+/* Return the maximum number of consecutive registers
+   needed to represent mode MODE in a register of class RCLASS.  */
+DEFHOOK
+(class_max_nregs,
+ "A target hook returns the maximum number of consecutive registers\n\
+of class @var{rclass} needed to hold a value of mode @var{mode}.\n\
+\n\
+This is closely related to the macro @code{TARGET_HARD_REGNO_NREGS}.\n\
+In fact, the value returned by @code{TARGET_CLASS_MAX_NREGS (@var{rclass},\n\
+@var{mode})} target hook should be the maximum value of\n\
+@code{TARGET_HARD_REGNO_NREGS (@var{regno}, @var{mode})} for all @var{regno}\n\
+values in the class @var{rclass}.\n\
+\n\
+This target hook helps control the handling of multiple-word values\n\
+in the reload pass.\n\
+\n\
+The default version of this target hook returns the size of @var{mode}\n\
+in words.",
+ unsigned char, (reg_class_t rclass, machine_mode mode),
+ default_class_max_nregs)
+
+DEFHOOK
+(preferred_rename_class,
+ "A target hook that places additional preference on the register\
+ class to use when it is necessary to rename a register in class\
+ @var{rclass} to another class, or perhaps @var{NO_REGS}, if no\
+ preferred register class is found or hook @code{preferred_rename_class}\
+ is not implemented.\
+ Sometimes returning a more restrictive class makes better code.  For\
+ example, on ARM, thumb-2 instructions using @code{LO_REGS} may be\
+ smaller than instructions using @code{GENERIC_REGS}.  By returning\
+ @code{LO_REGS} from @code{preferred_rename_class}, code size can\
+ be reduced.",
+ reg_class_t, (reg_class_t rclass),
+ default_preferred_rename_class)
+
+/* This target hook allows the backend to avoid unsafe substitution
+   during register allocation.  */
+DEFHOOK
+(cannot_substitute_mem_equiv_p,
+ "A target hook which returns @code{true} if @var{subst} can't\n\
+substitute safely pseudos with equivalent memory values during\n\
+register allocation.\n\
+The default version of this target hook returns @code{false}.\n\
+On most machines, this default should be used.  For generally\n\
+machines with non orthogonal register usage for addressing, such\n\
+as SH, this hook can be used to avoid excessive spilling.",
+ bool, (rtx subst),
+ hook_bool_rtx_false)
+
+/* This target hook allows the backend to legitimize base plus
+   displacement addressing.  */
+DEFHOOK
+(legitimize_address_displacement,
+ "This hook tries to split address offset @var{orig_offset} into\n\
+two parts: one that should be added to the base address to create\n\
+a local anchor point, and an additional offset that can be applied\n\
+to the anchor to address a value of mode @var{mode}.  The idea is that\n\
+the local anchor could be shared by other accesses to nearby locations.\n\
+\n\
+The hook returns true if it succeeds, storing the offset of the\n\
+anchor from the base in @var{offset1} and the offset of the final address\n\
+from the anchor in @var{offset2}.  The default implementation returns false.",
+ bool, (rtx *offset1, rtx *offset2, poly_int64 orig_offset, machine_mode mode),
+ default_legitimize_address_displacement)
+
+/* This target hook allows the backend to perform additional
+   processing while initializing for variable expansion.  */
+DEFHOOK
+(expand_to_rtl_hook,
+ "This hook is called just before expansion into rtl, allowing the target\n\
+to perform additional initializations or analysis before the expansion.\n\
+For example, the rs6000 port uses it to allocate a scratch stack slot\n\
+for use in copying SDmode values between memory and floating point\n\
+registers whenever the function being expanded has any SDmode\n\
+usage.",
+ void, (void),
+ hook_void_void)
+
+/* This target hook allows the backend to perform additional
+   instantiations on rtx that are not actually in insns yet,
+   but will be later.  */
+DEFHOOK
+(instantiate_decls,
+ "This hook allows the backend to perform additional instantiations on rtl\n\
+that are not actually in any insns yet, but will be later.",
+ void, (void),
+ hook_void_void)
+
+DEFHOOK
+(hard_regno_nregs,
+ "This hook returns the number of consecutive hard registers, starting\n\
+at register number @var{regno}, required to hold a value of mode\n\
+@var{mode}.  This hook must never return zero, even if a register\n\
+cannot hold the requested mode - indicate that with\n\
+@code{TARGET_HARD_REGNO_MODE_OK} and/or\n\
+@code{TARGET_CAN_CHANGE_MODE_CLASS} instead.\n\
+\n\
+The default definition returns the number of words in @var{mode}.",
+ unsigned int, (unsigned int regno, machine_mode mode),
+ default_hard_regno_nregs)
+
+DEFHOOK
+(hard_regno_mode_ok,
+ "This hook returns true if it is permissible to store a value\n\
+of mode @var{mode} in hard register number @var{regno} (or in several\n\
+registers starting with that one).  The default definition returns true\n\
+unconditionally.\n\
+\n\
+You need not include code to check for the numbers of fixed registers,\n\
+because the allocation mechanism considers them to be always occupied.\n\
+\n\
+@cindex register pairs\n\
+On some machines, double-precision values must be kept in even/odd\n\
+register pairs.  You can implement that by defining this hook to reject\n\
+odd register numbers for such modes.\n\
+\n\
+The minimum requirement for a mode to be OK in a register is that the\n\
+@samp{mov@var{mode}} instruction pattern support moves between the\n\
+register and other hard register in the same class and that moving a\n\
+value into the register and back out not alter it.\n\
+\n\
+Since the same instruction used to move @code{word_mode} will work for\n\
+all narrower integer modes, it is not necessary on any machine for\n\
+this hook to distinguish between these modes, provided you define\n\
+patterns @samp{movhi}, etc., to take advantage of this.  This is\n\
+useful because of the interaction between @code{TARGET_HARD_REGNO_MODE_OK}\n\
+and @code{TARGET_MODES_TIEABLE_P}; it is very desirable for all integer\n\
+modes to be tieable.\n\
+\n\
+Many machines have special registers for floating point arithmetic.\n\
+Often people assume that floating point machine modes are allowed only\n\
+in floating point registers.  This is not true.  Any registers that\n\
+can hold integers can safely @emph{hold} a floating point machine\n\
+mode, whether or not floating arithmetic can be done on it in those\n\
+registers.  Integer move instructions can be used to move the values.\n\
+\n\
+On some machines, though, the converse is true: fixed-point machine\n\
+modes may not go in floating registers.  This is true if the floating\n\
+registers normalize any value stored in them, because storing a\n\
+non-floating value there would garble it.  In this case,\n\
+@code{TARGET_HARD_REGNO_MODE_OK} should reject fixed-point machine modes in\n\
+floating registers.  But if the floating registers do not automatically\n\
+normalize, if you can store any bit pattern in one and retrieve it\n\
+unchanged without a trap, then any machine mode may go in a floating\n\
+register, so you can define this hook to say so.\n\
+\n\
+The primary significance of special floating registers is rather that\n\
+they are the registers acceptable in floating point arithmetic\n\
+instructions.  However, this is of no concern to\n\
+@code{TARGET_HARD_REGNO_MODE_OK}.  You handle it by writing the proper\n\
+constraints for those instructions.\n\
+\n\
+On some machines, the floating registers are especially slow to access,\n\
+so that it is better to store a value in a stack frame than in such a\n\
+register if floating point arithmetic is not being done.  As long as the\n\
+floating registers are not in class @code{GENERAL_REGS}, they will not\n\
+be used unless some pattern's constraint asks for one.",
+ bool, (unsigned int regno, machine_mode mode),
+ hook_bool_uint_mode_true)
+
+DEFHOOK
+(modes_tieable_p,
+ "This hook returns true if a value of mode @var{mode1} is accessible\n\
+in mode @var{mode2} without copying.\n\
+\n\
+If @code{TARGET_HARD_REGNO_MODE_OK (@var{r}, @var{mode1})} and\n\
+@code{TARGET_HARD_REGNO_MODE_OK (@var{r}, @var{mode2})} are always\n\
+the same for any @var{r}, then\n\
+@code{TARGET_MODES_TIEABLE_P (@var{mode1}, @var{mode2})}\n\
+should be true.  If they differ for any @var{r}, you should define\n\
+this hook to return false unless some other mechanism ensures the\n\
+accessibility of the value in a narrower mode.\n\
+\n\
+You should define this hook to return true in as many cases as\n\
+possible since doing so will allow GCC to perform better register\n\
+allocation.  The default definition returns true unconditionally.",
+ bool, (machine_mode mode1, machine_mode mode2),
+ hook_bool_mode_mode_true)
+
+/* Return true if is OK to use a hard register REGNO as scratch register
+   in peephole2.  */
+DEFHOOK
+(hard_regno_scratch_ok,
+ "This target hook should return @code{true} if it is OK to use a hard register\n\
+@var{regno} as scratch reg in peephole2.\n\
+\n\
+One common use of this macro is to prevent using of a register that\n\
+is not saved by a prologue in an interrupt handler.\n\
+\n\
+The default version of this hook always returns @code{true}.",
+ bool, (unsigned int regno),
+ default_hard_regno_scratch_ok)
+
+DEFHOOK
+(hard_regno_call_part_clobbered,
+ "This hook should return true if @var{regno} is partly call-saved and\n\
+partly call-clobbered, and if a value of mode @var{mode} would be partly\n\
+clobbered by call instruction @var{insn}.  If @var{insn} is NULL then it\n\
+should return true if any call could partly clobber the register.\n\
+For example, if the low 32 bits of @var{regno} are preserved across a call\n\
+but higher bits are clobbered, this hook should return true for a 64-bit\n\
+mode but false for a 32-bit mode.\n\
+\n\
+The default implementation returns false, which is correct\n\
+for targets that don't have partly call-clobbered registers.",
+ bool, (rtx_insn *insn, unsigned int regno, machine_mode mode),
+ hook_bool_insn_uint_mode_false)
+
+DEFHOOK
+(return_call_with_max_clobbers,
+ "This hook returns a pointer to the call that partially clobbers the\n\
+most registers.  If a platform supports multiple ABIs where the registers\n\
+that are partially clobbered may vary, this function compares two\n\
+calls and returns a pointer to the one that clobbers the most registers.\n\
+If both calls clobber the same registers, @var{call_1} must be returned.\n\
+\n\
+The registers clobbered in different ABIs must be a proper subset or\n\
+superset of all other ABIs.  @var{call_1} must always be a call insn,\n\
+call_2 may be NULL or a call insn.",
+ rtx_insn *, (rtx_insn *call_1, rtx_insn *call_2),
+ NULL)
+
+DEFHOOK
+(get_multilib_abi_name,
+ "This hook returns name of multilib ABI name.",
+ const char *, (void),
+ hook_constcharptr_void_null)
+
+DEFHOOK
+(remove_extra_call_preserved_regs,
+ "This hook removes registers from the set of call-clobbered registers\n\
+ in @var{used_regs} if, contrary to the default rules, something guarantees\n\
+ that @samp{insn} preserves those registers.  For example, some targets\n\
+ support variant ABIs in which functions preserve more registers than\n\
+ normal functions would.  Removing those extra registers from @var{used_regs}\n\
+ can lead to better register allocation.\n\
+ \n\
+ The default implementation does nothing, which is always safe.\n\
+ Defining the hook is purely an optimization.",
+ void, (rtx_insn *insn, HARD_REG_SET *used_regs),
+ default_remove_extra_call_preserved_regs)
+
+/* Return the smallest number of different values for which it is best to
+   use a jump-table instead of a tree of conditional branches.  */
+DEFHOOK
+(case_values_threshold,
+ "This function return the smallest number of different values for which it\n\
+is best to use a jump-table instead of a tree of conditional branches.\n\
+The default is four for machines with a @code{casesi} instruction and\n\
+five otherwise.  This is best for most machines.",
+ unsigned int, (void),
+ default_case_values_threshold)
+
+DEFHOOK
+(starting_frame_offset,
+ "This hook returns the offset from the frame pointer to the first local\n\
+variable slot to be allocated.  If @code{FRAME_GROWS_DOWNWARD}, it is the\n\
+offset to @emph{end} of the first slot allocated, otherwise it is the\n\
+offset to @emph{beginning} of the first slot allocated.  The default\n\
+implementation returns 0.",
+ HOST_WIDE_INT, (void),
+ hook_hwi_void_0)
+
+/* Optional callback to advise the target to compute the frame layout.  */
+DEFHOOK
+(compute_frame_layout,
+ "This target hook is called once each time the frame layout needs to be\n\
+recalculated.  The calculations can be cached by the target and can then\n\
+be used by @code{INITIAL_ELIMINATION_OFFSET} instead of re-computing the\n\
+layout on every invocation of that hook.  This is particularly useful\n\
+for targets that have an expensive frame layout function.  Implementing\n\
+this callback is optional.",
+ void, (void),
+ hook_void_void)
+
+/* Return true if a function must have and use a frame pointer.  */
+DEFHOOK
+(frame_pointer_required,
+ "This target hook should return @code{true} if a function must have and use\n\
+a frame pointer.  This target hook is called in the reload pass.  If its return\n\
+value is @code{true} the function will have a frame pointer.\n\
+\n\
+This target hook can in principle examine the current function and decide\n\
+according to the facts, but on most machines the constant @code{false} or the\n\
+constant @code{true} suffices.  Use @code{false} when the machine allows code\n\
+to be generated with no frame pointer, and doing so saves some time or space.\n\
+Use @code{true} when there is no possible advantage to avoiding a frame\n\
+pointer.\n\
+\n\
+In certain cases, the compiler does not know how to produce valid code\n\
+without a frame pointer.  The compiler recognizes those cases and\n\
+automatically gives the function a frame pointer regardless of what\n\
+@code{targetm.frame_pointer_required} returns.  You don't need to worry about\n\
+them.\n\
+\n\
+In a function that does not require a frame pointer, the frame pointer\n\
+register can be allocated for ordinary usage, unless you mark it as a\n\
+fixed register.  See @code{FIXED_REGISTERS} for more information.\n\
+\n\
+Default return value is @code{false}.",
+ bool, (void),
+ hook_bool_void_false)
+
+/* Returns true if the compiler is allowed to try to replace register number
+   from-reg with register number to-reg.  */
+DEFHOOK
+(can_eliminate,
+ "This target hook should return @code{true} if the compiler is allowed to\n\
+try to replace register number @var{from_reg} with register number\n\
+@var{to_reg}.  This target hook will usually be @code{true}, since most of the\n\
+cases preventing register elimination are things that the compiler already\n\
+knows about.\n\
+\n\
+Default return value is @code{true}.",
+ bool, (const int from_reg, const int to_reg),
+ hook_bool_const_int_const_int_true)
+
+/* Modify any or all of fixed_regs, call_used_regs, global_regs,
+   reg_names, and reg_class_contents to account of the vagaries of the
+   target.  */
+DEFHOOK
+(conditional_register_usage,
+ "This hook may conditionally modify five variables\n\
+@code{fixed_regs}, @code{call_used_regs}, @code{global_regs},\n\
+@code{reg_names}, and @code{reg_class_contents}, to take into account\n\
+any dependence of these register sets on target flags.  The first three\n\
+of these are of type @code{char []} (interpreted as boolean vectors).\n\
+@code{global_regs} is a @code{const char *[]}, and\n\
+@code{reg_class_contents} is a @code{HARD_REG_SET}.  Before the macro is\n\
+called, @code{fixed_regs}, @code{call_used_regs},\n\
+@code{reg_class_contents}, and @code{reg_names} have been initialized\n\
+from @code{FIXED_REGISTERS}, @code{CALL_USED_REGISTERS},\n\
+@code{REG_CLASS_CONTENTS}, and @code{REGISTER_NAMES}, respectively.\n\
+@code{global_regs} has been cleared, and any @option{-ffixed-@var{reg}},\n\
+@option{-fcall-used-@var{reg}} and @option{-fcall-saved-@var{reg}}\n\
+command options have been applied.\n\
+\n\
+@cindex disabling certain registers\n\
+@cindex controlling register usage\n\
+If the usage of an entire class of registers depends on the target\n\
+flags, you may indicate this to GCC by using this macro to modify\n\
+@code{fixed_regs} and @code{call_used_regs} to 1 for each of the\n\
+registers in the classes which should not be used by GCC@.  Also make\n\
+@code{define_register_constraint}s return @code{NO_REGS} for constraints\n\
+that shouldn't be used.\n\
+\n\
+(However, if this class is not included in @code{GENERAL_REGS} and all\n\
+of the insn patterns whose constraints permit this class are\n\
+controlled by target switches, then GCC will automatically avoid using\n\
+these registers when the target switches are opposed to them.)",
+ void, (void),
+ hook_void_void)
+
+DEFHOOK
+(stack_clash_protection_alloca_probe_range,
+ "Some targets have an ABI defined interval for which no probing needs to be done.\n\
+When a probe does need to be done this same interval is used as the probe distance \
+up when doing stack clash protection for alloca.\n\
+On such targets this value can be set to override the default probing up interval.\n\
+Define this variable to return nonzero if such a probe range is required or zero otherwise.  \
+Defining this hook also requires your functions which make use of alloca to have at least 8 byes\
+of outgoing arguments.  If this is not the case the stack will be corrupted.\n\
+You need not define this macro if it would always have the value zero.",
+ HOST_WIDE_INT, (void),
+ default_stack_clash_protection_alloca_probe_range)
+
+
+/* Functions specific to the C family of frontends.  */
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_C_"
+HOOK_VECTOR (TARGET_C, c)
+
+/* ??? Documenting this hook requires a GFDL license grant.  */
+DEFHOOK_UNDOC
+(mode_for_suffix,
+"Return machine mode for non-standard constant literal suffix @var{c},\
+ or VOIDmode if non-standard suffixes are unsupported.",
+ machine_mode, (char c),
+ default_mode_for_suffix)
+
+DEFHOOK
+(excess_precision,
+ "Return a value, with the same meaning as the C99 macro\
+ @code{FLT_EVAL_METHOD} that describes which excess precision should be\
+ applied.  @var{type} is either @code{EXCESS_PRECISION_TYPE_IMPLICIT},\
+ @code{EXCESS_PRECISION_TYPE_FAST}, or\
+ @code{EXCESS_PRECISION_TYPE_STANDARD}.  For\
+ @code{EXCESS_PRECISION_TYPE_IMPLICIT}, the target should return which\
+ precision and range operations will be implictly evaluated in regardless\
+ of the excess precision explicitly added.  For\
+ @code{EXCESS_PRECISION_TYPE_STANDARD} and\
+ @code{EXCESS_PRECISION_TYPE_FAST}, the target should return the\
+ explicit excess precision that should be added depending on the\
+ value set for @option{-fexcess-precision=@r{[}standard@r{|}fast@r{]}}.\
+ Note that unpredictable explicit excess precision does not make sense,\
+ so a target should never return @code{FLT_EVAL_METHOD_UNPREDICTABLE}\
+ when @var{type} is @code{EXCESS_PRECISION_TYPE_STANDARD} or\
+ @code{EXCESS_PRECISION_TYPE_FAST}.",
+ enum flt_eval_method, (enum excess_precision_type type),
+ default_excess_precision)
+
+HOOK_VECTOR_END (c)
+
+/* Functions specific to the C++ frontend.  */
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_CXX_"
+HOOK_VECTOR (TARGET_CXX, cxx)
+
+/* Return the integer type used for guard variables.  */
+DEFHOOK
+(guard_type,
+ "Define this hook to override the integer type used for guard variables.\n\
+These are used to implement one-time construction of static objects.  The\n\
+default is long_long_integer_type_node.",
+ tree, (void),
+ default_cxx_guard_type)
+
+/* Return true if only the low bit of the guard should be tested.  */
+DEFHOOK
+(guard_mask_bit,
+ "This hook determines how guard variables are used.  It should return\n\
+@code{false} (the default) if the first byte should be used.  A return value of\n\
+@code{true} indicates that only the least significant bit should be used.",
+ bool, (void),
+ hook_bool_void_false)
+
+/* Returns the size of the array cookie for an array of type.  */
+DEFHOOK
+(get_cookie_size,
+ "This hook returns the size of the cookie to use when allocating an array\n\
+whose elements have the indicated @var{type}.  Assumes that it is already\n\
+known that a cookie is needed.  The default is\n\
+@code{max(sizeof (size_t), alignof(type))}, as defined in section 2.7 of the\n\
+IA64/Generic C++ ABI@.",
+ tree, (tree type),
+ default_cxx_get_cookie_size)
+
+/* Returns true if the element size should be stored in the array cookie.  */
+DEFHOOK
+(cookie_has_size,
+ "This hook should return @code{true} if the element size should be stored in\n\
+array cookies.  The default is to return @code{false}.",
+ bool, (void),
+ hook_bool_void_false)
+
+/* Allows backends to perform additional processing when
+   deciding if a class should be exported or imported.  */
+DEFHOOK
+(import_export_class,
+ "If defined by a backend this hook allows the decision made to export\n\
+class @var{type} to be overruled.  Upon entry @var{import_export}\n\
+will contain 1 if the class is going to be exported, @minus{}1 if it is going\n\
+to be imported and 0 otherwise.  This function should return the\n\
+modified value and perform any other actions necessary to support the\n\
+backend's targeted operating system.",
+ int, (tree type, int import_export), NULL)
+
+/* Returns true if constructors and destructors return "this".  */
+DEFHOOK
+(cdtor_returns_this,
+ "This hook should return @code{true} if constructors and destructors return\n\
+the address of the object created/destroyed.  The default is to return\n\
+@code{false}.",
+ bool, (void),
+ hook_bool_void_false)
+
+/* Returns true if the key method for a class can be an inline
+   function, so long as it is not declared inline in the class
+   itself.  Returning true is the behavior required by the Itanium C++ ABI.  */
+DEFHOOK
+(key_method_may_be_inline,
+ "This hook returns true if the key method for a class (i.e., the method\n\
+which, if defined in the current translation unit, causes the virtual\n\
+table to be emitted) may be an inline function.  Under the standard\n\
+Itanium C++ ABI the key method may be an inline function so long as\n\
+the function is not declared inline in the class definition.  Under\n\
+some variants of the ABI, an inline function can never be the key\n\
+method.  The default is to return @code{true}.",
+ bool, (void),
+ hook_bool_void_true)
+
+DEFHOOK
+(determine_class_data_visibility,
+"@var{decl} is a virtual table, virtual table table, typeinfo object,\
+ or other similar implicit class data object that will be emitted with\
+ external linkage in this translation unit.  No ELF visibility has been\
+ explicitly specified.  If the target needs to specify a visibility\
+ other than that of the containing class, use this hook to set\
+ @code{DECL_VISIBILITY} and @code{DECL_VISIBILITY_SPECIFIED}.",
+ void, (tree decl),
+ hook_void_tree)
+
+/* Returns true (the default) if virtual tables and other
+   similar implicit class data objects are always COMDAT if they
+   have external linkage.  If this hook returns false, then
+   class data for classes whose virtual table will be emitted in
+   only one translation unit will not be COMDAT.  */
+DEFHOOK
+(class_data_always_comdat,
+ "This hook returns true (the default) if virtual tables and other\n\
+similar implicit class data objects are always COMDAT if they have\n\
+external linkage.  If this hook returns false, then class data for\n\
+classes whose virtual table will be emitted in only one translation\n\
+unit will not be COMDAT.",
+ bool, (void),
+ hook_bool_void_true)
+
+/* Returns true (the default) if the RTTI for the basic types,
+   which is always defined in the C++ runtime, should be COMDAT;
+   false if it should not be COMDAT.  */
+DEFHOOK
+(library_rtti_comdat,
+ "This hook returns true (the default) if the RTTI information for\n\
+the basic types which is defined in the C++ runtime should always\n\
+be COMDAT, false if it should not be COMDAT.",
+ bool, (void),
+ hook_bool_void_true)
+
+/* Returns true if __aeabi_atexit should be used to register static
+   destructors.  */
+DEFHOOK
+(use_aeabi_atexit,
+ "This hook returns true if @code{__aeabi_atexit} (as defined by the ARM EABI)\n\
+should be used to register static destructors when @option{-fuse-cxa-atexit}\n\
+is in effect.  The default is to return false to use @code{__cxa_atexit}.",
+ bool, (void),
+ hook_bool_void_false)
+
+/* Returns true if target may use atexit in the same manner as
+   __cxa_atexit  to register static destructors.  */
+DEFHOOK
+(use_atexit_for_cxa_atexit,
+ "This hook returns true if the target @code{atexit} function can be used\n\
+in the same manner as @code{__cxa_atexit} to register C++ static\n\
+destructors. This requires that @code{atexit}-registered functions in\n\
+shared libraries are run in the correct order when the libraries are\n\
+unloaded. The default is to return false.",
+ bool, (void),
+ hook_bool_void_false)
+
+DEFHOOK
+(adjust_class_at_definition,
+"@var{type} is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has just\
+ been defined.  Use this hook to make adjustments to the class (eg, tweak\
+ visibility or perform any other required target modifications).",
+ void, (tree type),
+ hook_void_tree)
+
+DEFHOOK
+(decl_mangling_context,
+ "Return target-specific mangling context of @var{decl} or @code{NULL_TREE}.",
+ tree, (const_tree decl),
+ hook_tree_const_tree_null)
+
+HOOK_VECTOR_END (cxx)
+
+/* Functions and data for emulated TLS support.  */
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_EMUTLS_"
+HOOK_VECTOR (TARGET_EMUTLS, emutls)
+
+/* Name of the address and common functions.  */
+DEFHOOKPOD
+(get_address,
+ "Contains the name of the helper function that uses a TLS control\n\
+object to locate a TLS instance.  The default causes libgcc's\n\
+emulated TLS helper function to be used.",
+ const char *, "__builtin___emutls_get_address")
+
+DEFHOOKPOD
+(register_common,
+ "Contains the name of the helper function that should be used at\n\
+program startup to register TLS objects that are implicitly\n\
+initialized to zero.  If this is @code{NULL}, all TLS objects will\n\
+have explicit initializers.  The default causes libgcc's emulated TLS\n\
+registration function to be used.",
+ const char *, "__builtin___emutls_register_common")
+
+/* Prefixes for proxy variable and template.  */
+DEFHOOKPOD
+(var_section,
+ "Contains the name of the section in which TLS control variables should\n\
+be placed.  The default of @code{NULL} allows these to be placed in\n\
+any section.",
+ const char *, NULL)
+
+DEFHOOKPOD
+(tmpl_section,
+ "Contains the name of the section in which TLS initializers should be\n\
+placed.  The default of @code{NULL} allows these to be placed in any\n\
+section.",
+ const char *, NULL)
+
+/* Prefixes for proxy variable and template.  */
+DEFHOOKPOD
+(var_prefix,
+ "Contains the prefix to be prepended to TLS control variable names.\n\
+The default of @code{NULL} uses a target-specific prefix.",
+ const char *, NULL)
+
+DEFHOOKPOD
+(tmpl_prefix,
+ "Contains the prefix to be prepended to TLS initializer objects.  The\n\
+default of @code{NULL} uses a target-specific prefix.",
+ const char *, NULL)
+
+/* Function to generate field definitions of the proxy variable.  */
+DEFHOOK
+(var_fields,
+ "Specifies a function that generates the FIELD_DECLs for a TLS control\n\
+object type.  @var{type} is the RECORD_TYPE the fields are for and\n\
+@var{name} should be filled with the structure tag, if the default of\n\
+@code{__emutls_object} is unsuitable.  The default creates a type suitable\n\
+for libgcc's emulated TLS function.",
+ tree, (tree type, tree *name),
+ default_emutls_var_fields)
+
+/* Function to initialize a proxy variable.  */
+DEFHOOK
+(var_init,
+ "Specifies a function that generates the CONSTRUCTOR to initialize a\n\
+TLS control object.  @var{var} is the TLS control object, @var{decl}\n\
+is the TLS object and @var{tmpl_addr} is the address of the\n\
+initializer.  The default initializes libgcc's emulated TLS control object.",
+ tree, (tree var, tree decl, tree tmpl_addr),
+ default_emutls_var_init)
+
+/* Whether we are allowed to alter the usual alignment of the
+   proxy variable.  */
+DEFHOOKPOD
+(var_align_fixed,
+ "Specifies whether the alignment of TLS control variable objects is\n\
+fixed and should not be increased as some backends may do to optimize\n\
+single objects.  The default is false.",
+ bool, false)
+
+/* Whether we can emit debug information for TLS vars.  */
+DEFHOOKPOD
+(debug_form_tls_address,
+ "Specifies whether a DWARF @code{DW_OP_form_tls_address} location descriptor\n\
+may be used to describe emulated TLS control objects.",
+ bool, false)
+
+HOOK_VECTOR_END (emutls)
+
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_OPTION_"
+HOOK_VECTOR (TARGET_OPTION_HOOKS, target_option_hooks)
+
+/* Function to validate the attribute((target(...))) strings.  If
+   the option is validated, the hook should also fill in
+   DECL_FUNCTION_SPECIFIC_TARGET in the function decl node.  */
+DEFHOOK
+(valid_attribute_p,
+ "This hook is called to parse @code{attribute(target(\"...\"))}, which\n\
+allows setting target-specific options on individual functions.\n\
+These function-specific options may differ\n\
+from the options specified on the command line.  The hook should return\n\
+@code{true} if the options are valid.\n\
+\n\
+The hook should set the @code{DECL_FUNCTION_SPECIFIC_TARGET} field in\n\
+the function declaration to hold a pointer to a target-specific\n\
+@code{struct cl_target_option} structure.",
+ bool, (tree fndecl, tree name, tree args, int flags),
+ default_target_option_valid_attribute_p)
+
+/* Function to save any extra target state in the target options structure.  */
+DEFHOOK
+(save,
+ "This hook is called to save any additional target-specific information\n\
+in the @code{struct cl_target_option} structure for function-specific\n\
+options from the @code{struct gcc_options} structure.\n\
+@xref{Option file format}.",
+ void, (struct cl_target_option *ptr, struct gcc_options *opts), NULL)
+
+/* Function to restore any extra target state from the target options
+   structure.  */
+DEFHOOK
+(restore,
+ "This hook is called to restore any additional target-specific\n\
+information in the @code{struct cl_target_option} structure for\n\
+function-specific options to the @code{struct gcc_options} structure.",
+ void, (struct gcc_options *opts, struct cl_target_option *ptr), NULL)
+
+/* Function to update target-specific option information after being
+   streamed in.  */
+DEFHOOK
+(post_stream_in,
+ "This hook is called to update target-specific information in the\n\
+@code{struct cl_target_option} structure after it is streamed in from\n\
+LTO bytecode.",
+ void, (struct cl_target_option *ptr), NULL)
+
+/* Function to print any extra target state from the target options
+   structure.  */
+DEFHOOK
+(print,
+ "This hook is called to print any additional target-specific\n\
+information in the @code{struct cl_target_option} structure for\n\
+function-specific options.",
+ void, (FILE *file, int indent, struct cl_target_option *ptr), NULL)
+
+/* Function to parse arguments to be validated for #pragma target, and to
+   change the state if the options are valid.  If the first argument is
+   NULL, the second argument specifies the default options to use.  Return
+   true if the options are valid, and set the current state.  */
+DEFHOOK
+(pragma_parse,
+ "This target hook parses the options for @code{#pragma GCC target}, which\n\
+sets the target-specific options for functions that occur later in the\n\
+input stream.  The options accepted should be the same as those handled by the\n\
+@code{TARGET_OPTION_VALID_ATTRIBUTE_P} hook.",
+ bool, (tree args, tree pop_target),
+ default_target_option_pragma_parse)
+
+/* Do option overrides for the target.  */
+DEFHOOK
+(override,
+ "Sometimes certain combinations of command options do not make sense on\n\
+a particular target machine.  You can override the hook\n\
+@code{TARGET_OPTION_OVERRIDE} to take account of this.  This hooks is called\n\
+once just after all the command options have been parsed.\n\
+\n\
+Don't use this hook to turn on various extra optimizations for\n\
+@option{-O}.  That is what @code{TARGET_OPTION_OPTIMIZATION} is for.\n\
+\n\
+If you need to do something whenever the optimization level is\n\
+changed via the optimize attribute or pragma, see\n\
+@code{TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE}",
+ void, (void),
+ hook_void_void)
+
+/* This function returns true if DECL1 and DECL2 are versions of the same
+   function.  DECL1 and DECL2 are function versions if and only if they
+   have the same function signature and different target specific attributes,
+   that is, they are compiled for different target machines.  */
+DEFHOOK
+(function_versions,
+ "This target hook returns @code{true} if @var{DECL1} and @var{DECL2} are\n\
+versions of the same function.  @var{DECL1} and @var{DECL2} are function\n\
+versions if and only if they have the same function signature and\n\
+different target specific attributes, that is, they are compiled for\n\
+different target machines.",
+ bool, (tree decl1, tree decl2),
+ hook_bool_tree_tree_false)
+
+/* Function to determine if one function can inline another function.  */
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_"
+DEFHOOK
+(can_inline_p,
+ "This target hook returns @code{false} if the @var{caller} function\n\
+cannot inline @var{callee}, based on target specific information.  By\n\
+default, inlining is not allowed if the callee function has function\n\
+specific target options and the caller does not use the same options.",
+ bool, (tree caller, tree callee),
+ default_target_can_inline_p)
+
+DEFHOOK
+(relayout_function,
+"This target hook fixes function @var{fndecl} after attributes are processed. Default does nothing. On ARM, the default function's alignment is updated with the attribute target.",
+ void, (tree fndecl),
+ hook_void_tree)
+
+HOOK_VECTOR_END (target_option)
+
+/* For targets that need to mark extra registers as live on entry to
+   the function, they should define this target hook and set their
+   bits in the bitmap passed in. */
+DEFHOOK
+(extra_live_on_entry,
+ "Add any hard registers to @var{regs} that are live on entry to the\n\
+function.  This hook only needs to be defined to provide registers that\n\
+cannot be found by examination of FUNCTION_ARG_REGNO_P, the callee saved\n\
+registers, STATIC_CHAIN_INCOMING_REGNUM, STATIC_CHAIN_REGNUM,\n\
+TARGET_STRUCT_VALUE_RTX, FRAME_POINTER_REGNUM, EH_USES,\n\
+FRAME_POINTER_REGNUM, ARG_POINTER_REGNUM, and the PIC_OFFSET_TABLE_REGNUM.",
+ void, (bitmap regs),
+ hook_void_bitmap)
+
+/* Targets should define this target hook to mark that non-callee clobbers are
+   present in CALL_INSN_FUNCTION_USAGE for all the calls that bind to a local
+   definition.  */
+DEFHOOKPOD
+(call_fusage_contains_non_callee_clobbers,
+ "Set to true if each call that binds to a local definition explicitly\n\
+clobbers or sets all non-fixed registers modified by performing the call.\n\
+That is, by the call pattern itself, or by code that might be inserted by the\n\
+linker (e.g.@: stubs, veneers, branch islands), but not including those\n\
+modifiable by the callee.  The affected registers may be mentioned explicitly\n\
+in the call pattern, or included as clobbers in CALL_INSN_FUNCTION_USAGE.\n\
+The default version of this hook is set to false.  The purpose of this hook\n\
+is to enable the fipa-ra optimization.",
+ bool, 
+ false)
+
+/* Fill in additional registers set up by prologue into a regset.  */
+DEFHOOK
+(set_up_by_prologue,
+ "This hook should add additional registers that are computed by the prologue\
+ to the hard regset for shrink-wrapping optimization purposes.",
+ void, (struct hard_reg_set_container *),
+ NULL)
+
+/* For targets that have attributes that can affect whether a
+   function's return statements need checking.  For instance a 'naked'
+   function attribute.  */
+DEFHOOK
+(warn_func_return,
+ "True if a function's return statements should be checked for matching the function's return type.  This includes checking for falling off the end of a non-void function.  Return false if no such check should be made.",
+ bool, (tree),
+ hook_bool_tree_true)
+
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_SHRINK_WRAP_"
+HOOK_VECTOR (TARGET_SHRINK_WRAP_HOOKS, shrink_wrap)
+
+DEFHOOK
+(get_separate_components,
+ "This hook should return an @code{sbitmap} with the bits set for those\n\
+components that can be separately shrink-wrapped in the current function.\n\
+Return @code{NULL} if the current function should not get any separate\n\
+shrink-wrapping.\n\
+Don't define this hook if it would always return @code{NULL}.\n\
+If it is defined, the other hooks in this group have to be defined as well.",
+ sbitmap, (void),
+ NULL)
+
+DEFHOOK
+(components_for_bb,
+ "This hook should return an @code{sbitmap} with the bits set for those\n\
+components where either the prologue component has to be executed before\n\
+the @code{basic_block}, or the epilogue component after it, or both.",
+ sbitmap, (basic_block),
+ NULL)
+
+DEFHOOK
+(disqualify_components,
+ "This hook should clear the bits in the @var{components} bitmap for those\n\
+components in @var{edge_components} that the target cannot handle on edge\n\
+@var{e}, where @var{is_prologue} says if this is for a prologue or an\n\
+epilogue instead.",
+ void, (sbitmap components, edge e, sbitmap edge_components, bool is_prologue),
+ NULL)
+
+DEFHOOK
+(emit_prologue_components,
+ "Emit prologue insns for the components indicated by the parameter.",
+ void, (sbitmap),
+ NULL)
+
+DEFHOOK
+(emit_epilogue_components,
+ "Emit epilogue insns for the components indicated by the parameter.",
+ void, (sbitmap),
+ NULL)
+
+DEFHOOK
+(set_handled_components,
+ "Mark the components in the parameter as handled, so that the\n\
+@code{prologue} and @code{epilogue} named patterns know to ignore those\n\
+components.  The target code should not hang on to the @code{sbitmap}, it\n\
+will be deleted after this call.",
+ void, (sbitmap),
+ NULL)
+
+HOOK_VECTOR_END (shrink_wrap)
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_"
+
+/* Determine the type of unwind info to emit for debugging.  */
+DEFHOOK
+(debug_unwind_info,
+ "This hook defines the mechanism that will be used for describing frame\n\
+unwind information to the debugger.  Normally the hook will return\n\
+@code{UI_DWARF2} if DWARF 2 debug information is enabled, and\n\
+return @code{UI_NONE} otherwise.\n\
+\n\
+A target may return @code{UI_DWARF2} even when DWARF 2 debug information\n\
+is disabled in order to always output DWARF 2 frame information.\n\
+\n\
+A target may return @code{UI_TARGET} if it has ABI specified unwind tables.\n\
+This will suppress generation of the normal debug frame unwind information.",
+ enum unwind_info_type, (void),
+ default_debug_unwind_info)
+
+DEFHOOK
+(reset_location_view, "\
+This hook, if defined, enables -ginternal-reset-location-views, and\n\
+uses its result to override cases in which the estimated min insn\n\
+length might be nonzero even when a PC advance (i.e., a view reset)\n\
+cannot be taken for granted.\n\
+\n\
+If the hook is defined, it must return a positive value to indicate\n\
+the insn definitely advances the PC, and so the view number can be\n\
+safely assumed to be reset; a negative value to mean the insn\n\
+definitely does not advance the PC, and os the view number must not\n\
+be reset; or zero to decide based on the estimated insn length.\n\
+\n\
+If insn length is to be regarded as reliable, set the hook to\n\
+@code{hook_int_rtx_insn_0}.",
+ int, (rtx_insn *), NULL)
+
+/* The code parameter should be of type enum rtx_code but this is not
+   defined at this time.  */
+DEFHOOK
+(canonicalize_comparison,
+ "On some machines not all possible comparisons are defined, but you can\n\
+convert an invalid comparison into a valid one.  For example, the Alpha\n\
+does not have a @code{GT} comparison, but you can use an @code{LT}\n\
+comparison instead and swap the order of the operands.\n\
+\n\
+On such machines, implement this hook to do any required conversions.\n\
+@var{code} is the initial comparison code and @var{op0} and @var{op1}\n\
+are the left and right operands of the comparison, respectively.  If\n\
+@var{op0_preserve_value} is @code{true} the implementation is not\n\
+allowed to change the value of @var{op0} since the value might be used\n\
+in RTXs which aren't comparisons.  E.g. the implementation is not\n\
+allowed to swap operands in that case.\n\
+\n\
+GCC will not assume that the comparison resulting from this macro is\n\
+valid but will see if the resulting insn matches a pattern in the\n\
+@file{md} file.\n\
+\n\
+You need not to implement this hook if it would never change the\n\
+comparison code or operands.",
+ void, (int *code, rtx *op0, rtx *op1, bool op0_preserve_value),
+ default_canonicalize_comparison)
+
+DEFHOOK
+(min_arithmetic_precision,
+ "On some RISC architectures with 64-bit registers, the processor also\n\
+maintains 32-bit condition codes that make it possible to do real 32-bit\n\
+arithmetic, although the operations are performed on the full registers.\n\
+\n\
+On such architectures, defining this hook to 32 tells the compiler to try\n\
+using 32-bit arithmetical operations setting the condition codes instead\n\
+of doing full 64-bit arithmetic.\n\
+\n\
+More generally, define this hook on RISC architectures if you want the\n\
+compiler to try using arithmetical operations setting the condition codes\n\
+with a precision lower than the word precision.\n\
+\n\
+You need not define this hook if @code{WORD_REGISTER_OPERATIONS} is not\n\
+defined to 1.",
+ unsigned int, (void), default_min_arithmetic_precision)
+
+DEFHOOKPOD
+(atomic_test_and_set_trueval,
+ "This value should be set if the result written by\
+ @code{atomic_test_and_set} is not exactly 1, i.e.@: the\
+ @code{bool} @code{true}.",
+ unsigned char, 1)
+
+/* Return an unsigned int representing the alignment (in bits) of the atomic
+   type which maps to machine MODE.  This allows alignment to be overridden
+   as needed.  */
+DEFHOOK
+(atomic_align_for_mode,
+"If defined, this function returns an appropriate alignment in bits for an\
+ atomic object of machine_mode @var{mode}.  If 0 is returned then the\
+ default alignment for the specified mode is used. ",
+ unsigned int, (machine_mode mode),
+ hook_uint_mode_0)
+
+DEFHOOK
+(atomic_assign_expand_fenv,
+"ISO C11 requires atomic compound assignments that may raise floating-point\
+ exceptions to raise exceptions corresponding to the arithmetic operation\
+ whose result was successfully stored in a compare-and-exchange sequence. \
+ This requires code equivalent to calls to @code{feholdexcept},\
+ @code{feclearexcept} and @code{feupdateenv} to be generated at\
+ appropriate points in the compare-and-exchange sequence.  This hook should\
+ set @code{*@var{hold}} to an expression equivalent to the call to\
+ @code{feholdexcept}, @code{*@var{clear}} to an expression equivalent to\
+ the call to @code{feclearexcept} and @code{*@var{update}} to an expression\
+ equivalent to the call to @code{feupdateenv}.  The three expressions are\
+ @code{NULL_TREE} on entry to the hook and may be left as @code{NULL_TREE}\
+ if no code is required in a particular place.  The default implementation\
+ leaves all three expressions as @code{NULL_TREE}.  The\
+ @code{__atomic_feraiseexcept} function from @code{libatomic} may be of use\
+ as part of the code generated in @code{*@var{update}}.",
+ void, (tree *hold, tree *clear, tree *update),
+ default_atomic_assign_expand_fenv)
+
+/* Leave the boolean fields at the end.  */
+
+/* True if we can create zeroed data by switching to a BSS section
+   and then using ASM_OUTPUT_SKIP to allocate the space.  */
+DEFHOOKPOD
+(have_switchable_bss_sections,
+ "This flag is true if we can create zeroed data by switching to a BSS\n\
+section and then using @code{ASM_OUTPUT_SKIP} to allocate the space.\n\
+This is true on most ELF targets.",
+ bool, false)
+
+/* True if "native" constructors and destructors are supported,
+   false if we're using collect2 for the job.  */
+DEFHOOKPOD
+(have_ctors_dtors,
+ "This value is true if the target supports some ``native'' method of\n\
+collecting constructors and destructors to be run at startup and exit.\n\
+It is false if we must use @command{collect2}.",
+ bool, false)
+
+/* True if thread-local storage is supported.  */
+DEFHOOKPOD
+(have_tls,
+ "Contains the value true if the target supports thread-local storage.\n\
+The default value is false.",
+ bool, false)
+
+/* True if a small readonly data section is supported.  */
+DEFHOOKPOD
+(have_srodata_section,
+ "Contains the value true if the target places read-only\n\
+``small data'' into a separate section.  The default value is false.",
+ bool, false)
+
+/* True if EH frame info sections should be zero-terminated.  */
+DEFHOOKPOD
+(terminate_dw2_eh_frame_info,
+ "Contains the value true if the target should add a zero word onto the\n\
+end of a Dwarf-2 frame info section when used for exception handling.\n\
+Default value is false if @code{EH_FRAME_SECTION_NAME} is defined, and\n\
+true otherwise.",
+ bool, true)
+
+/* True if #NO_APP should be emitted at the beginning of assembly output.  */
+DEFHOOKPOD
+(asm_file_start_app_off,
+ "If this flag is true, the text of the macro @code{ASM_APP_OFF} will be\n\
+printed as the very first line in the assembly file, unless\n\
+@option{-fverbose-asm} is in effect.  (If that macro has been defined\n\
+to the empty string, this variable has no effect.)  With the normal\n\
+definition of @code{ASM_APP_OFF}, the effect is to notify the GNU\n\
+assembler that it need not bother stripping comments or extra\n\
+whitespace from its input.  This allows it to work a bit faster.\n\
+\n\
+The default is false.  You should not set it to true unless you have\n\
+verified that your port does not generate any extra whitespace or\n\
+comments that will cause GAS to issue errors in NO_APP mode.",
+ bool, false)
+
+/* True if output_file_directive should be called for main_input_filename
+   at the beginning of assembly output.  */
+DEFHOOKPOD
+(asm_file_start_file_directive,
+ "If this flag is true, @code{output_file_directive} will be called\n\
+for the primary source file, immediately after printing\n\
+@code{ASM_APP_OFF} (if that is enabled).  Most ELF assemblers expect\n\
+this to be done.  The default is false.",
+ bool, false)
+
+/* Returns true if we should generate exception tables for use with the
+   ARM EABI.  The effects the encoding of function exception specifications.  */
+DEFHOOKPOD
+(arm_eabi_unwinder,
+ "This flag should be set to @code{true} on targets that use an ARM EABI\n\
+based unwinding library, and @code{false} on other targets.  This effects\n\
+the format of unwinding tables, and how the unwinder in entered after\n\
+running a cleanup.  The default is @code{false}.",
+ bool, false)
+
+DEFHOOKPOD
+(want_debug_pub_sections,
+ "True if the @code{.debug_pubtypes} and @code{.debug_pubnames} sections\
+ should be emitted.  These sections are not used on most platforms, and\
+ in particular GDB does not use them.",
+ bool, false)
+
+DEFHOOKPOD
+(delay_sched2, "True if sched2 is not to be run at its normal place.\n\
+This usually means it will be run as part of machine-specific reorg.",
+bool, false)
+
+DEFHOOKPOD
+(delay_vartrack, "True if vartrack is not to be run at its normal place.\n\
+This usually means it will be run as part of machine-specific reorg.",
+bool, false)
+
+DEFHOOKPOD
+(no_register_allocation, "True if register allocation and the passes\n\
+following it should not be run.  Usually true only for virtual assembler\n\
+targets.",
+bool, false)
+
+/* Leave the boolean fields at the end.  */
+
+/* Functions related to mode switching.  */
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_MODE_"
+HOOK_VECTOR (TARGET_TOGGLE_, mode_switching)
+
+DEFHOOK
+(emit,
+ "Generate one or more insns to set @var{entity} to @var{mode}. @var{hard_reg_live} is the set of hard registers live at the point where the insn(s) are to be inserted. @var{prev_moxde} indicates the mode to switch from. Sets of a lower numbered entity will be emitted before sets of a higher numbered entity to a mode of the same or lower priority.",
+ void, (int entity, int mode, int prev_mode, HARD_REG_SET regs_live), NULL)
+
+DEFHOOK
+(needed,
+ "@var{entity} is an integer specifying a mode-switched entity.  If @code{OPTIMIZE_MODE_SWITCHING} is defined, you must define this macro to return an integer value not larger than the corresponding element in @code{NUM_MODES_FOR_MODE_SWITCHING}, to denote the mode that @var{entity} must be switched into prior to the execution of @var{insn}.",
+ int, (int entity, rtx_insn *insn), NULL)
+
+DEFHOOK
+(after,
+ "@var{entity} is an integer specifying a mode-switched entity.  If this macro is defined, it is evaluated for every @var{insn} during mode switching.  It determines the mode that an insn results in (if different from the incoming mode).",
+ int, (int entity, int mode, rtx_insn *insn), NULL)
+
+DEFHOOK
+(entry,
+ "If this macro is defined, it is evaluated for every @var{entity} that needs mode switching.  It should evaluate to an integer, which is a mode that @var{entity} is assumed to be switched to at function entry.  If @code{TARGET_MODE_ENTRY} is defined then @code{TARGET_MODE_EXIT} must be defined.",
+ int, (int entity), NULL)
+
+DEFHOOK
+(exit,
+ "If this macro is defined, it is evaluated for every @var{entity} that needs mode switching.  It should evaluate to an integer, which is a mode that @var{entity} is assumed to be switched to at function exit.  If @code{TARGET_MODE_EXIT} is defined then @code{TARGET_MODE_ENTRY} must be defined.",
+ int, (int entity), NULL)
+
+DEFHOOK
+(priority,
+ "This macro specifies the order in which modes for @var{entity} are processed. 0 is the highest priority, @code{NUM_MODES_FOR_MODE_SWITCHING[@var{entity}] - 1} the lowest.  The value of the macro should be an integer designating a mode for @var{entity}.  For any fixed @var{entity}, @code{mode_priority} (@var{entity}, @var{n}) shall be a bijection in 0 @dots{} @code{num_modes_for_mode_switching[@var{entity}] - 1}.",
+ int, (int entity, int n), NULL)
+
+HOOK_VECTOR_END (mode_switching)
+
+#undef HOOK_PREFIX
+#define HOOK_PREFIX "TARGET_"
+
+#define DEF_TARGET_INSN(NAME, PROTO) \
+  DEFHOOK_UNDOC (have_##NAME, "", bool, (void), false)
+#include "target-insns.def"
+#undef DEF_TARGET_INSN
+
+#define DEF_TARGET_INSN(NAME, PROTO) \
+  DEFHOOK_UNDOC (gen_##NAME, "", rtx_insn *, PROTO, NULL)
+#include "target-insns.def"
+#undef DEF_TARGET_INSN
+
+#define DEF_TARGET_INSN(NAME, PROTO) \
+  DEFHOOKPOD (code_for_##NAME, "*", enum insn_code, CODE_FOR_nothing)
+#include "target-insns.def"
+#undef DEF_TARGET_INSN
+
+DEFHOOK
+(run_target_selftests,
+ "If selftests are enabled, run any selftests for this target.",
+ void, (void),
+ NULL)
+
+/* Close the 'struct gcc_target' definition.  */
+HOOK_VECTOR_END (C90_EMPTY_HACK)
+
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/target.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/target.h
new file mode 100644
index 0000000..008932b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/target.h
@@ -0,0 +1,261 @@
+/* Data structure definitions for a generic GCC target.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by the
+   Free Software Foundation; either version 3, or (at your option) any
+   later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.
+
+   In other words, you are welcome to use, share and improve this program.
+   You are forbidden to forbid anyone else to use, share and improve
+   what you give them.   Help stamp out software-hoarding!  */
+
+
+/* This file contains a data structure that describes a GCC target.
+   At present it is incomplete, but in future it should grow to
+   contain most or all target machine and target O/S specific
+   information.
+
+   This structure has its initializer declared in target-def.h in the
+   form of large macro TARGET_INITIALIZER that expands to many smaller
+   macros.
+
+   The smaller macros each initialize one component of the structure,
+   and each has a default.  Each target should have a file that
+   includes target.h and target-def.h, and overrides any inappropriate
+   defaults by undefining the relevant macro and defining a suitable
+   replacement.  That file should then contain the definition of
+   "targetm" like so:
+
+   struct gcc_target targetm = TARGET_INITIALIZER;
+
+   Doing things this way allows us to bring together everything that
+   defines a GCC target.  By supplying a default that is appropriate
+   to most targets, we can easily add new items without needing to
+   edit dozens of target configuration files.  It should also allow us
+   to gradually reduce the amount of conditional compilation that is
+   scattered throughout GCC.  */
+
+#ifndef GCC_TARGET_H
+#define GCC_TARGET_H
+
+#include "insn-codes.h"
+#include "tm.h"
+#include "hard-reg-set.h"
+
+#if CHECKING_P
+
+struct cumulative_args_t { void *magic; void *p; };
+
+#else /* !CHECKING_P */
+
+/* When using a GCC build compiler, we could use
+   __attribute__((transparent_union)) to get cumulative_args_t function
+   arguments passed like scalars where the ABI would mandate a less
+   efficient way of argument passing otherwise.  However, that would come
+   at the cost of less type-safe !CHECKING_P compilation.  */
+
+union cumulative_args_t { void *p; };
+
+#endif /* !CHECKING_P */
+
+/* Types used by the record_gcc_switches() target function.  */
+enum print_switch_type
+{
+  SWITCH_TYPE_PASSED,		/* A switch passed on the command line.  */
+  SWITCH_TYPE_ENABLED,		/* An option that is currently enabled.  */
+  SWITCH_TYPE_DESCRIPTIVE,	/* Descriptive text, not a switch or option.  */
+  SWITCH_TYPE_LINE_START,	/* Please emit any necessary text at the start of a line.  */
+  SWITCH_TYPE_LINE_END		/* Please emit a line terminator.  */
+};
+
+/* Types of memory operation understood by the "by_pieces" infrastructure.
+   Used by the TARGET_USE_BY_PIECES_INFRASTRUCTURE_P target hook and
+   internally by the functions in expr.c.  */
+
+enum by_pieces_operation
+{
+  CLEAR_BY_PIECES,
+  MOVE_BY_PIECES,
+  SET_BY_PIECES,
+  STORE_BY_PIECES,
+  COMPARE_BY_PIECES
+};
+
+extern unsigned HOST_WIDE_INT by_pieces_ninsns (unsigned HOST_WIDE_INT,
+						unsigned int,
+						unsigned int,
+						by_pieces_operation);
+
+typedef int (* print_switch_fn_type) (print_switch_type, const char *);
+
+/* An example implementation for ELF targets.  Defined in varasm.c  */
+extern int elf_record_gcc_switches (print_switch_type type, const char *);
+
+/* Some places still assume that all pointer or address modes are the
+   standard Pmode and ptr_mode.  These optimizations become invalid if
+   the target actually supports multiple different modes.  For now,
+   we disable such optimizations on such targets, using this function.  */
+extern bool target_default_pointer_address_modes_p (void);
+
+/* For hooks which use the MOVE_RATIO macro, this gives the legacy default
+   behavior.  */
+extern unsigned int get_move_ratio (bool);
+
+struct stdarg_info;
+struct spec_info_def;
+struct hard_reg_set_container;
+struct cgraph_node;
+struct cgraph_simd_clone;
+
+/* The struct used by the secondary_reload target hook.  */
+struct secondary_reload_info
+{
+  /* icode is actually an enum insn_code, but we don't want to force every
+     file that includes target.h to include optabs.h .  */
+  int icode;
+  int extra_cost; /* Cost for using (a) scratch register(s) to be taken
+		     into account by copy_cost.  */
+  /* The next two members are for the use of the backward
+     compatibility hook.  */
+  struct secondary_reload_info *prev_sri;
+  int t_icode; /* Actually an enum insn_code - see above.  */
+};
+
+/* This is defined in sched-int.h .  */
+struct _dep;
+
+/* This is defined in ddg.h .  */
+struct ddg;
+
+/* This is defined in cfgloop.h .  */
+struct loop;
+
+/* This is defined in ifcvt.h.  */
+struct noce_if_info;
+
+/* This is defined in tree-ssa-alias.h.  */
+struct ao_ref;
+
+/* This is defined in tree-vectorizer.h.  */
+struct _stmt_vec_info;
+
+/* These are defined in tree-vect-stmts.c.  */
+extern tree stmt_vectype (struct _stmt_vec_info *);
+extern bool stmt_in_inner_loop_p (struct _stmt_vec_info *);
+
+/* Assembler instructions for creating various kinds of integer object.  */
+
+struct asm_int_op
+{
+  const char *hi;
+  const char *psi;
+  const char *si;
+  const char *pdi;
+  const char *di;
+  const char *pti;
+  const char *ti;
+};
+
+/* Types of costs for vectorizer cost model.  */
+enum vect_cost_for_stmt
+{
+  scalar_stmt,
+  scalar_load,
+  scalar_store,
+  vector_stmt,
+  vector_load,
+  vector_gather_load,
+  unaligned_load,
+  unaligned_store,
+  vector_store,
+  vector_scatter_store,
+  vec_to_scalar,
+  scalar_to_vec,
+  cond_branch_not_taken,
+  cond_branch_taken,
+  vec_perm,
+  vec_promote_demote,
+  vec_construct
+};
+
+/* Separate locations for which the vectorizer cost model should
+   track costs.  */
+enum vect_cost_model_location {
+  vect_prologue = 0,
+  vect_body = 1,
+  vect_epilogue = 2
+};
+
+class vec_perm_indices;
+
+/* The type to use for lists of vector sizes.  */
+typedef vec<poly_uint64> vector_sizes;
+
+/* Same, but can be used to construct local lists that are
+   automatically freed.  */
+typedef auto_vec<poly_uint64, 8> auto_vector_sizes;
+
+/* The target structure.  This holds all the backend hooks.  */
+#define DEFHOOKPOD(NAME, DOC, TYPE, INIT) TYPE NAME;
+#define DEFHOOK(NAME, DOC, TYPE, PARAMS, INIT) TYPE (* NAME) PARAMS;
+#define DEFHOOK_UNDOC DEFHOOK
+#define HOOKSTRUCT(FRAGMENT) FRAGMENT
+
+#include "target.def"
+
+extern struct gcc_target targetm;
+
+/* Return an estimate of the runtime value of X, for use in things
+   like cost calculations or profiling frequencies.  Note that this
+   function should never be used in situations where the actual
+   runtime value is needed for correctness, since the function only
+   provides a rough guess.  */
+
+static inline HOST_WIDE_INT
+estimated_poly_value (poly_int64 x)
+{
+  if (NUM_POLY_INT_COEFFS == 1)
+    return x.coeffs[0];
+  else
+    return targetm.estimated_poly_value (x);
+}
+
+#ifdef GCC_TM_H
+
+#ifndef CUMULATIVE_ARGS_MAGIC
+#define CUMULATIVE_ARGS_MAGIC ((void *) &targetm.calls)
+#endif
+
+static inline CUMULATIVE_ARGS *
+get_cumulative_args (cumulative_args_t arg)
+{
+#if CHECKING_P
+  gcc_assert (arg.magic == CUMULATIVE_ARGS_MAGIC);
+#endif /* CHECKING_P */
+  return (CUMULATIVE_ARGS *) arg.p;
+}
+
+static inline cumulative_args_t
+pack_cumulative_args (CUMULATIVE_ARGS *arg)
+{
+  cumulative_args_t ret;
+
+#if CHECKING_P
+  ret.magic = CUMULATIVE_ARGS_MAGIC;
+#endif /* CHECKING_P */
+  ret.p = (void *) arg;
+  return ret;
+}
+#endif /* GCC_TM_H */
+
+#endif /* GCC_TARGET_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/targhooks.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/targhooks.h
new file mode 100644
index 0000000..5943627
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/targhooks.h
@@ -0,0 +1,290 @@
+/* Default target hook functions.
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TARGHOOKS_H
+#define GCC_TARGHOOKS_H
+
+extern bool default_legitimate_address_p (machine_mode, rtx, bool);
+
+extern void default_external_libcall (rtx);
+extern rtx default_legitimize_address (rtx, rtx, machine_mode);
+extern bool default_legitimize_address_displacement (rtx *, rtx *,
+						     poly_int64, machine_mode);
+extern bool default_const_not_ok_for_debug_p (rtx);
+
+extern int default_unspec_may_trap_p (const_rtx, unsigned);
+extern machine_mode default_promote_function_mode (const_tree, machine_mode,
+							int *, const_tree, int);
+extern machine_mode default_promote_function_mode_always_promote
+			(const_tree, machine_mode, int *, const_tree, int);
+
+extern machine_mode default_cc_modes_compatible (machine_mode,
+						      machine_mode);
+
+extern bool default_return_in_memory (const_tree, const_tree);
+
+extern rtx default_expand_builtin_saveregs (void);
+extern void default_setup_incoming_varargs (cumulative_args_t, machine_mode, tree, int *, int);
+extern rtx default_builtin_setjmp_frame_value (void);
+extern bool default_pretend_outgoing_varargs_named (cumulative_args_t);
+
+extern scalar_int_mode default_eh_return_filter_mode (void);
+extern scalar_int_mode default_libgcc_cmp_return_mode (void);
+extern scalar_int_mode default_libgcc_shift_count_mode (void);
+extern scalar_int_mode default_unwind_word_mode (void);
+extern unsigned HOST_WIDE_INT default_shift_truncation_mask
+  (machine_mode);
+extern unsigned int default_min_divisions_for_recip_mul (machine_mode);
+extern int default_mode_rep_extended (scalar_int_mode, scalar_int_mode);
+
+extern tree default_stack_protect_guard (void);
+extern tree default_external_stack_protect_fail (void);
+extern tree default_hidden_stack_protect_fail (void);
+
+extern machine_mode default_mode_for_suffix (char);
+
+extern tree default_cxx_guard_type (void);
+extern tree default_cxx_get_cookie_size (tree);
+
+extern bool hook_pass_by_reference_must_pass_in_stack
+  (cumulative_args_t, machine_mode mode, const_tree, bool);
+extern bool hook_callee_copies_named
+  (cumulative_args_t ca, machine_mode, const_tree, bool);
+
+extern void default_print_operand (FILE *, rtx, int);
+extern void default_print_operand_address (FILE *, machine_mode, rtx);
+extern bool default_print_operand_punct_valid_p (unsigned char);
+extern tree default_mangle_assembler_name (const char *);
+
+extern machine_mode default_translate_mode_attribute (machine_mode);
+extern bool default_scalar_mode_supported_p (scalar_mode);
+extern bool default_libgcc_floating_mode_supported_p (scalar_float_mode);
+extern opt_scalar_float_mode default_floatn_mode (int, bool);
+extern bool default_floatn_builtin_p (int);
+extern bool targhook_words_big_endian (void);
+extern bool targhook_float_words_big_endian (void);
+extern bool default_float_exceptions_rounding_supported_p (void);
+extern bool default_decimal_float_supported_p (void);
+extern bool default_fixed_point_supported_p (void);
+
+extern bool default_has_ifunc_p (void);
+
+extern const char * default_invalid_within_doloop (const rtx_insn *);
+
+extern tree default_builtin_vectorized_function (unsigned int, tree, tree);
+extern tree default_builtin_md_vectorized_function (tree, tree, tree);
+
+extern tree default_builtin_vectorized_conversion (unsigned int, tree, tree);
+
+extern int default_builtin_vectorization_cost (enum vect_cost_for_stmt, tree, int);
+
+extern tree default_builtin_reciprocal (tree);
+
+extern HOST_WIDE_INT default_static_rtx_alignment (machine_mode);
+extern HOST_WIDE_INT default_constant_alignment (const_tree, HOST_WIDE_INT);
+extern HOST_WIDE_INT constant_alignment_word_strings (const_tree,
+						      HOST_WIDE_INT);
+extern HOST_WIDE_INT default_vector_alignment (const_tree);
+
+extern poly_uint64 default_preferred_vector_alignment (const_tree);
+extern bool default_builtin_vector_alignment_reachable (const_tree, bool);
+extern bool
+default_builtin_support_vector_misalignment (machine_mode mode,
+					     const_tree,
+					     int, bool);
+extern machine_mode default_preferred_simd_mode (scalar_mode mode);
+extern machine_mode default_split_reduction (machine_mode);
+extern void default_autovectorize_vector_sizes (vector_sizes *);
+extern opt_machine_mode default_get_mask_mode (poly_uint64, poly_uint64);
+extern bool default_empty_mask_is_expensive (unsigned);
+extern void *default_init_cost (struct loop *);
+extern unsigned default_add_stmt_cost (void *, int, enum vect_cost_for_stmt,
+				       struct _stmt_vec_info *, int,
+				       enum vect_cost_model_location);
+extern void default_finish_cost (void *, unsigned *, unsigned *, unsigned *);
+extern void default_destroy_cost_data (void *);
+
+/* OpenACC hooks.  */
+extern bool default_goacc_validate_dims (tree, int [], int, unsigned);
+extern int default_goacc_dim_limit (int);
+extern bool default_goacc_fork_join (gcall *, const int [], bool);
+extern void default_goacc_reduction (gcall *);
+
+/* These are here, and not in hooks.[ch], because not all users of
+   hooks.h include tm.h, and thus we don't have CUMULATIVE_ARGS.  */
+
+extern bool hook_bool_CUMULATIVE_ARGS_false (cumulative_args_t);
+extern bool hook_bool_CUMULATIVE_ARGS_true (cumulative_args_t);
+
+extern bool hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false
+  (cumulative_args_t, machine_mode, const_tree, bool);
+extern bool hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true
+  (cumulative_args_t, machine_mode, const_tree, bool);
+extern int hook_int_CUMULATIVE_ARGS_mode_tree_bool_0
+  (cumulative_args_t, machine_mode, tree, bool);
+extern void hook_void_CUMULATIVE_ARGS_tree
+  (cumulative_args_t, tree);
+extern const char *hook_invalid_arg_for_unprototyped_fn
+  (const_tree, const_tree, const_tree);
+extern void default_function_arg_advance
+  (cumulative_args_t, machine_mode, const_tree, bool);
+extern HOST_WIDE_INT default_function_arg_offset (machine_mode, const_tree);
+extern pad_direction default_function_arg_padding (machine_mode, const_tree);
+extern rtx default_function_arg
+  (cumulative_args_t, machine_mode, const_tree, bool);
+extern rtx default_function_incoming_arg
+  (cumulative_args_t, machine_mode, const_tree, bool);
+extern unsigned int default_function_arg_boundary (machine_mode,
+						   const_tree);
+extern unsigned int default_function_arg_round_boundary (machine_mode,
+							 const_tree);
+extern bool hook_bool_const_rtx_commutative_p (const_rtx, int);
+extern rtx default_function_value (const_tree, const_tree, bool);
+extern rtx default_libcall_value (machine_mode, const_rtx);
+extern bool default_function_value_regno_p (const unsigned int);
+extern rtx default_internal_arg_pointer (void);
+extern rtx default_static_chain (const_tree, bool);
+extern void default_trampoline_init (rtx, tree, rtx);
+extern poly_int64 default_return_pops_args (tree, tree, poly_int64);
+extern reg_class_t default_branch_target_register_class (void);
+extern reg_class_t default_ira_change_pseudo_allocno_class (int, reg_class_t,
+							    reg_class_t);
+extern bool default_lra_p (void);
+extern int default_register_priority (int);
+extern bool default_register_usage_leveling_p (void);
+extern bool default_different_addr_displacement_p (void);
+extern reg_class_t default_secondary_reload (bool, rtx, reg_class_t,
+					     machine_mode,
+					     secondary_reload_info *);
+extern machine_mode default_secondary_memory_needed_mode (machine_mode);
+extern void default_target_option_override (void);
+extern void hook_void_bitmap (bitmap);
+extern int default_reloc_rw_mask (void);
+extern bool default_generate_pic_addr_diff_vec (void);
+extern tree default_mangle_decl_assembler_name (tree, tree);
+extern tree default_emutls_var_fields (tree, tree *);
+extern tree default_emutls_var_init (tree, tree, tree);
+extern unsigned int default_hard_regno_nregs (unsigned int, machine_mode);
+extern bool default_hard_regno_scratch_ok (unsigned int);
+extern bool default_mode_dependent_address_p (const_rtx, addr_space_t);
+extern bool default_target_option_valid_attribute_p (tree, tree, tree, int);
+extern bool default_target_option_pragma_parse (tree, tree);
+extern bool default_target_can_inline_p (tree, tree);
+extern bool default_valid_pointer_mode (scalar_int_mode);
+extern bool default_ref_may_alias_errno (struct ao_ref *);
+extern scalar_int_mode default_addr_space_pointer_mode (addr_space_t);
+extern scalar_int_mode default_addr_space_address_mode (addr_space_t);
+extern bool default_addr_space_valid_pointer_mode (scalar_int_mode,
+						   addr_space_t);
+extern bool default_addr_space_legitimate_address_p (machine_mode, rtx,
+						     bool, addr_space_t);
+extern rtx default_addr_space_legitimize_address (rtx, rtx, machine_mode,
+						  addr_space_t);
+extern bool default_addr_space_subset_p (addr_space_t, addr_space_t);
+extern bool default_addr_space_zero_address_valid (addr_space_t);
+extern int default_addr_space_debug (addr_space_t);
+extern void default_addr_space_diagnose_usage (addr_space_t, location_t);
+extern rtx default_addr_space_convert (rtx, tree, tree);
+extern unsigned int default_case_values_threshold (void);
+extern bool default_have_conditional_execution (void);
+
+extern bool default_libc_has_function (enum function_class);
+extern bool no_c99_libc_has_function (enum function_class);
+extern bool gnu_libc_has_function (enum function_class);
+
+extern tree default_builtin_tm_load_store (tree);
+
+extern int default_memory_move_cost (machine_mode, reg_class_t, bool);
+extern int default_register_move_cost (machine_mode, reg_class_t,
+				       reg_class_t);
+extern bool default_slow_unaligned_access (machine_mode, unsigned int);
+extern HOST_WIDE_INT default_estimated_poly_value (poly_int64);
+
+extern bool default_use_by_pieces_infrastructure_p (unsigned HOST_WIDE_INT,
+						    unsigned int,
+						    enum by_pieces_operation,
+						    bool);
+extern int default_compare_by_pieces_branch_ratio (machine_mode);
+
+extern void default_print_patchable_function_entry (FILE *,
+						    unsigned HOST_WIDE_INT,
+						    bool);
+extern bool default_profile_before_prologue (void);
+extern reg_class_t default_preferred_reload_class (rtx, reg_class_t);
+extern reg_class_t default_preferred_output_reload_class (rtx, reg_class_t);
+extern reg_class_t default_preferred_rename_class (reg_class_t rclass);
+extern bool default_class_likely_spilled_p (reg_class_t);
+extern unsigned char default_class_max_nregs (reg_class_t, machine_mode);
+
+extern enum unwind_info_type default_debug_unwind_info (void);
+
+extern void default_canonicalize_comparison (int *, rtx *, rtx *, bool);
+
+extern section * default_function_section(tree decl, enum node_frequency freq,
+					  bool startup, bool exit);
+extern unsigned int default_dwarf_poly_indeterminate_value (unsigned int,
+							    unsigned int *,
+							    int *);
+extern machine_mode default_dwarf_frame_reg_mode (int);
+extern fixed_size_mode default_get_reg_raw_mode (int);
+extern bool default_keep_leaf_when_profiled ();
+
+extern void *default_get_pch_validity (size_t *);
+extern const char *default_pch_valid_p (const void *, size_t);
+
+extern void default_asm_output_ident_directive (const char*);
+
+extern scalar_int_mode default_cstore_mode (enum insn_code);
+extern bool default_member_type_forces_blk (const_tree, machine_mode);
+extern void default_atomic_assign_expand_fenv (tree *, tree *, tree *);
+extern tree build_va_arg_indirect_ref (tree);
+extern tree std_gimplify_va_arg_expr (tree, tree, gimple_seq *, gimple_seq *);
+extern bool can_use_doloop_if_innermost (const widest_int &,
+					 const widest_int &,
+					 unsigned int, bool);
+
+extern rtx default_load_bounds_for_arg (rtx, rtx, rtx);
+extern void default_store_bounds_for_arg (rtx, rtx, rtx, rtx);
+extern rtx default_load_returned_bounds (rtx);
+extern void default_store_returned_bounds (rtx,rtx);
+extern void default_setup_incoming_vararg_bounds (cumulative_args_t ca ATTRIBUTE_UNUSED,
+						  machine_mode mode ATTRIBUTE_UNUSED,
+						  tree type ATTRIBUTE_UNUSED,
+						  int *pretend_arg_size ATTRIBUTE_UNUSED,
+						  int second_time ATTRIBUTE_UNUSED);
+extern bool default_optab_supported_p (int, machine_mode, machine_mode,
+				       optimization_type);
+extern unsigned int default_max_noce_ifcvt_seq_cost (edge);
+extern bool default_noce_conversion_profitable_p (rtx_insn *,
+						  struct noce_if_info *);
+extern unsigned int default_min_arithmetic_precision (void);
+
+extern enum flt_eval_method
+default_excess_precision (enum excess_precision_type ATTRIBUTE_UNUSED);
+extern HOST_WIDE_INT default_stack_clash_protection_alloca_probe_range (void);
+extern void default_select_early_remat_modes (sbitmap);
+extern tree default_preferred_else_value (unsigned, tree, unsigned, tree *);
+
+extern bool default_have_speculation_safe_value (bool);
+extern bool speculation_safe_value_not_needed (bool);
+extern rtx default_speculation_safe_value (machine_mode, rtx, rtx, rtx);
+extern void default_remove_extra_call_preserved_regs (rtx_insn *,
+						      HARD_REG_SET *);
+
+#endif /* GCC_TARGHOOKS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/timevar.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/timevar.def
new file mode 100644
index 0000000..13cb470
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/timevar.def
@@ -0,0 +1,321 @@
+/* This file contains the definitions for timing variables used to
+   measure run-time performance of the compiler.
+   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Contributed by Alex Samuel <samuel@codesourcery.com>
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This file contains timing variable definitions, used by timevar.h
+   and timevar.c.
+
+   Syntax:
+
+     DEFTIMEVAR (id, name)
+
+   where ID is the enumeral value used to identify the timing
+   variable, and NAME is a character string describing its purpose.  */
+
+/* The total execution time.  */
+DEFTIMEVAR (TV_TOTAL                 , "total time")
+/* The compiler phases.
+
+   These must be mutually exclusive, and the NAME field must begin
+   with "phase".
+
+   Also, their sum must be within a millionth of the total time (see
+   validate_phases).  */
+DEFTIMEVAR (TV_PHASE_SETUP           , "phase setup")
+DEFTIMEVAR (TV_PHASE_PARSING         , "phase parsing")
+DEFTIMEVAR (TV_PHASE_DEFERRED        , "phase lang. deferred")
+DEFTIMEVAR (TV_PHASE_LATE_PARSING_CLEANUPS, "phase late parsing cleanups")
+DEFTIMEVAR (TV_PHASE_OPT_GEN         , "phase opt and generate")
+DEFTIMEVAR (TV_PHASE_LATE_ASM        , "phase last asm")
+DEFTIMEVAR (TV_PHASE_STREAM_IN       , "phase stream in")
+DEFTIMEVAR (TV_PHASE_STREAM_OUT      , "phase stream out")
+DEFTIMEVAR (TV_PHASE_FINALIZE        , "phase finalize")
+
+/* Concurrent timers, indicated by "|".  */
+DEFTIMEVAR (TV_NAME_LOOKUP           , "|name lookup")
+DEFTIMEVAR (TV_OVERLOAD              , "|overload resolution")
+
+/* Time spent garbage-collecting.  */
+DEFTIMEVAR (TV_GC                    , "garbage collection")
+
+/* Time spent generating dump files.  */
+DEFTIMEVAR (TV_DUMP                  , "dump files")
+
+/* Time spent saving/restoring PCH state.  */
+DEFTIMEVAR (TV_PCH_SAVE              , "PCH main state save")
+DEFTIMEVAR (TV_PCH_CPP_SAVE          , "PCH preprocessor state save")
+DEFTIMEVAR (TV_PCH_PTR_REALLOC       , "PCH pointer reallocation")
+DEFTIMEVAR (TV_PCH_PTR_SORT          , "PCH pointer sort")
+DEFTIMEVAR (TV_PCH_RESTORE           , "PCH main state restore")
+DEFTIMEVAR (TV_PCH_CPP_RESTORE       , "PCH preprocessor state restore")
+
+DEFTIMEVAR (TV_CGRAPH                , "callgraph construction")
+DEFTIMEVAR (TV_CGRAPHOPT             , "callgraph optimization")
+DEFTIMEVAR (TV_IPA_FNSUMMARY         , "ipa function summary")
+DEFTIMEVAR (TV_IPA_UNREACHABLE       , "ipa dead code removal")
+DEFTIMEVAR (TV_IPA_INHERITANCE       , "ipa inheritance graph")
+DEFTIMEVAR (TV_IPA_VIRTUAL_CALL      , "ipa virtual call target")
+DEFTIMEVAR (TV_IPA_DEVIRT	     , "ipa devirtualization")
+DEFTIMEVAR (TV_IPA_CONSTANT_PROP     , "ipa cp")
+DEFTIMEVAR (TV_IPA_INLINING          , "ipa inlining heuristics")
+DEFTIMEVAR (TV_IPA_FNSPLIT           , "ipa function splitting")
+DEFTIMEVAR (TV_IPA_COMDATS	     , "ipa comdats")
+DEFTIMEVAR (TV_IPA_OPT		     , "ipa various optimizations")
+DEFTIMEVAR (TV_IPA_LTO_DECOMPRESS    , "lto stream inflate")
+DEFTIMEVAR (TV_IPA_LTO_COMPRESS      , "lto stream deflate")
+DEFTIMEVAR (TV_IPA_LTO_OUTPUT        , "lto stream output")
+DEFTIMEVAR (TV_IPA_LTO_GIMPLE_IN     , "ipa lto gimple in")
+DEFTIMEVAR (TV_IPA_LTO_GIMPLE_OUT    , "ipa lto gimple out")
+DEFTIMEVAR (TV_IPA_LTO_DECL_IN       , "ipa lto decl in")
+DEFTIMEVAR (TV_IPA_LTO_DECL_OUT      , "ipa lto decl out")
+DEFTIMEVAR (TV_IPA_LTO_CTORS_IN      , "ipa lto constructors in")
+DEFTIMEVAR (TV_IPA_LTO_CTORS_OUT     , "ipa lto constructors out")
+DEFTIMEVAR (TV_IPA_LTO_CGRAPH_IO     , "ipa lto cgraph I/O")
+DEFTIMEVAR (TV_IPA_LTO_DECL_MERGE    , "ipa lto decl merge")
+DEFTIMEVAR (TV_IPA_LTO_CGRAPH_MERGE  , "ipa lto cgraph merge")
+DEFTIMEVAR (TV_LTO                   , "lto")
+DEFTIMEVAR (TV_WHOPR_WPA             , "whopr wpa")
+DEFTIMEVAR (TV_WHOPR_WPA_IO          , "whopr wpa I/O")
+DEFTIMEVAR (TV_WHOPR_PARTITIONING    , "whopr partitioning")
+DEFTIMEVAR (TV_WHOPR_LTRANS          , "whopr ltrans")
+DEFTIMEVAR (TV_IPA_REFERENCE         , "ipa reference")
+DEFTIMEVAR (TV_IPA_HSA		     , "ipa HSA")
+DEFTIMEVAR (TV_IPA_PROFILE           , "ipa profile")
+DEFTIMEVAR (TV_IPA_AUTOFDO           , "auto profile")
+DEFTIMEVAR (TV_IPA_PURE_CONST        , "ipa pure const")
+DEFTIMEVAR (TV_IPA_ICF		     , "ipa icf")
+DEFTIMEVAR (TV_IPA_PTA               , "ipa points-to")
+DEFTIMEVAR (TV_IPA_SRA               , "ipa SRA")
+DEFTIMEVAR (TV_IPA_FREE_LANG_DATA    , "ipa free lang data")
+DEFTIMEVAR (TV_IPA_FREE_INLINE_SUMMARY, "ipa free inline summary")
+/* Time spent by constructing CFG.  */
+DEFTIMEVAR (TV_CFG                   , "cfg construction")
+/* Time spent by cleaning up CFG.  */
+DEFTIMEVAR (TV_CLEANUP_CFG           , "cfg cleanup")
+DEFTIMEVAR (TV_CFG_VERIFY            , "CFG verifier")
+DEFTIMEVAR (TV_DELETE_TRIVIALLY_DEAD , "trivially dead code")
+
+/* Time spent in dataflow problems.  */
+DEFTIMEVAR (TV_DF_SCAN		     , "df scan insns")
+DEFTIMEVAR (TV_DF_MD		     , "df multiple defs")
+DEFTIMEVAR (TV_DF_RD		     , "df reaching defs")
+DEFTIMEVAR (TV_DF_LR		     , "df live regs")
+DEFTIMEVAR (TV_DF_LIVE		     , "df live&initialized regs")
+DEFTIMEVAR (TV_DF_MIR		     , "df must-initialized regs")
+DEFTIMEVAR (TV_DF_CHAIN		     , "df use-def / def-use chains")
+DEFTIMEVAR (TV_DF_WORD_LR	     , "df live reg subwords")
+DEFTIMEVAR (TV_DF_NOTE		     , "df reg dead/unused notes")
+DEFTIMEVAR (TV_REG_STATS	     , "register information")
+
+DEFTIMEVAR (TV_ALIAS_ANALYSIS	     , "alias analysis")
+DEFTIMEVAR (TV_ALIAS_STMT_WALK	     , "alias stmt walking")
+DEFTIMEVAR (TV_REG_SCAN		     , "register scan")
+DEFTIMEVAR (TV_REBUILD_JUMP	     , "rebuild jump labels")
+/* Timing in various stages of the compiler.  */
+DEFTIMEVAR (TV_CPP		     , "preprocessing")
+DEFTIMEVAR (TV_LEX		     , "lexical analysis")
+DEFTIMEVAR (TV_PARSE_GLOBAL          , "parser (global)")
+DEFTIMEVAR (TV_PARSE_STRUCT          , "parser struct body")
+DEFTIMEVAR (TV_PARSE_ENUM            , "parser enumerator list")
+DEFTIMEVAR (TV_PARSE_FUNC            , "parser function body")
+DEFTIMEVAR (TV_PARSE_INLINE          , "parser inl. func. body")
+DEFTIMEVAR (TV_PARSE_INMETH          , "parser inl. meth. body")
+DEFTIMEVAR (TV_TEMPLATE_INST         , "template instantiation")
+DEFTIMEVAR (TV_CONSTEXPR	     , "constant expression evaluation")
+DEFTIMEVAR (TV_CONSTRAINT_SAT        , "constraint satisfaction")
+DEFTIMEVAR (TV_CONSTRAINT_SUB        , "constraint subsumption")
+DEFTIMEVAR (TV_FLATTEN_INLINING      , "flatten inlining")
+DEFTIMEVAR (TV_EARLY_INLINING        , "early inlining heuristics")
+DEFTIMEVAR (TV_INLINE_PARAMETERS     , "inline parameters")
+DEFTIMEVAR (TV_INTEGRATION           , "integration")
+DEFTIMEVAR (TV_TREE_GIMPLIFY	     , "tree gimplify")
+DEFTIMEVAR (TV_TREE_EH		     , "tree eh")
+DEFTIMEVAR (TV_TREE_CFG		     , "tree CFG construction")
+DEFTIMEVAR (TV_TREE_CLEANUP_CFG	     , "tree CFG cleanup")
+DEFTIMEVAR (TV_TREE_TAIL_MERGE       , "tree tail merge")
+DEFTIMEVAR (TV_TREE_VRP              , "tree VRP")
+DEFTIMEVAR (TV_TREE_EARLY_VRP        , "tree Early VRP")
+DEFTIMEVAR (TV_TREE_COPY_PROP        , "tree copy propagation")
+DEFTIMEVAR (TV_FIND_REFERENCED_VARS  , "tree find ref. vars")
+DEFTIMEVAR (TV_TREE_PTA		     , "tree PTA")
+DEFTIMEVAR (TV_TREE_INSERT_PHI_NODES , "tree PHI insertion")
+DEFTIMEVAR (TV_TREE_SSA_REWRITE_BLOCKS, "tree SSA rewrite")
+DEFTIMEVAR (TV_TREE_SSA_OTHER	     , "tree SSA other")
+DEFTIMEVAR (TV_TREE_SSA_INCREMENTAL  , "tree SSA incremental")
+DEFTIMEVAR (TV_TREE_OPS	             , "tree operand scan")
+DEFTIMEVAR (TV_TREE_SSA_DOMINATOR_OPTS   , "dominator optimization")
+DEFTIMEVAR (TV_TREE_SSA_THREAD_JUMPS , "backwards jump threading")
+DEFTIMEVAR (TV_TREE_SRA              , "tree SRA")
+DEFTIMEVAR (TV_ISOLATE_ERRONEOUS_PATHS    , "isolate eroneous paths")
+DEFTIMEVAR (TV_TREE_CCP		     , "tree CCP")
+DEFTIMEVAR (TV_TREE_SPLIT_EDGES      , "tree split crit edges")
+DEFTIMEVAR (TV_TREE_REASSOC          , "tree reassociation")
+DEFTIMEVAR (TV_TREE_PRE		     , "tree PRE")
+DEFTIMEVAR (TV_TREE_FRE		     , "tree FRE")
+DEFTIMEVAR (TV_TREE_SINK             , "tree code sinking")
+DEFTIMEVAR (TV_TREE_PHIOPT	     , "tree linearize phis")
+DEFTIMEVAR (TV_TREE_BACKPROP	     , "tree backward propagate")
+DEFTIMEVAR (TV_TREE_FORWPROP	     , "tree forward propagate")
+DEFTIMEVAR (TV_TREE_PHIPROP	     , "tree phiprop")
+DEFTIMEVAR (TV_TREE_DCE		     , "tree conservative DCE")
+DEFTIMEVAR (TV_TREE_CD_DCE	     , "tree aggressive DCE")
+DEFTIMEVAR (TV_TREE_CALL_CDCE	     , "tree buildin call DCE")
+DEFTIMEVAR (TV_TREE_DSE		     , "tree DSE")
+DEFTIMEVAR (TV_TREE_MERGE_PHI	     , "PHI merge")
+DEFTIMEVAR (TV_TREE_LOOP	     , "tree loop optimization")
+DEFTIMEVAR (TV_TREE_NOLOOP           , "loopless fn")
+DEFTIMEVAR (TV_TREE_LOOP_BOUNDS	     , "tree loop bounds")
+DEFTIMEVAR (TV_LIM                   , "tree loop invariant motion")
+DEFTIMEVAR (TV_LINTERCHANGE          , "tree loop interchange")
+DEFTIMEVAR (TV_TREE_LOOP_IVCANON     , "tree canonical iv")
+DEFTIMEVAR (TV_SCEV_CONST            , "scev constant prop")
+DEFTIMEVAR (TV_TREE_LOOP_UNSWITCH    , "tree loop unswitching")
+DEFTIMEVAR (TV_LOOP_SPLIT            , "loop splitting")
+DEFTIMEVAR (TV_LOOP_JAM              , "unroll and jam")
+DEFTIMEVAR (TV_COMPLETE_UNROLL       , "complete unrolling")
+DEFTIMEVAR (TV_TREE_PARALLELIZE_LOOPS, "tree parallelize loops")
+DEFTIMEVAR (TV_TREE_VECTORIZATION    , "tree vectorization")
+DEFTIMEVAR (TV_TREE_SLP_VECTORIZATION, "tree slp vectorization")
+DEFTIMEVAR (TV_GRAPHITE              , "Graphite")
+DEFTIMEVAR (TV_GRAPHITE_TRANSFORMS   , "Graphite loop transforms")
+DEFTIMEVAR (TV_GRAPHITE_DATA_DEPS    , "Graphite data dep analysis")
+DEFTIMEVAR (TV_GRAPHITE_CODE_GEN     , "Graphite code generation")
+DEFTIMEVAR (TV_TREE_LOOP_DISTRIBUTION, "tree loop distribution")
+DEFTIMEVAR (TV_CHECK_DATA_DEPS       , "tree check data dependences")
+DEFTIMEVAR (TV_TREE_PREFETCH	     , "tree prefetching")
+DEFTIMEVAR (TV_TREE_LOOP_IVOPTS	     , "tree iv optimization")
+DEFTIMEVAR (TV_PREDCOM		     , "predictive commoning")
+DEFTIMEVAR (TV_TREE_CH		     , "tree copy headers")
+DEFTIMEVAR (TV_TREE_SSA_UNCPROP	     , "tree SSA uncprop")
+DEFTIMEVAR (TV_TREE_NRV		     , "tree NRV optimization")
+DEFTIMEVAR (TV_TREE_COPY_RENAME	     , "tree rename SSA copies")
+DEFTIMEVAR (TV_TREE_SSA_VERIFY       , "tree SSA verifier")
+DEFTIMEVAR (TV_TREE_STMT_VERIFY      , "tree STMT verifier")
+DEFTIMEVAR (TV_TREE_SWITCH_CONVERSION, "tree switch conversion")
+DEFTIMEVAR (TV_TREE_SWITCH_LOWERING,   "tree switch lowering")
+DEFTIMEVAR (TV_TREE_RECIP            , "gimple CSE reciprocals")
+DEFTIMEVAR (TV_TREE_SINCOS           , "gimple CSE sin/cos")
+DEFTIMEVAR (TV_TREE_WIDEN_MUL        , "gimple widening/fma detection")
+DEFTIMEVAR (TV_TRANS_MEM             , "transactional memory")
+DEFTIMEVAR (TV_TREE_STRLEN           , "tree strlen optimization")
+DEFTIMEVAR (TV_CGRAPH_VERIFY         , "callgraph verifier")
+DEFTIMEVAR (TV_DOM_FRONTIERS         , "dominance frontiers")
+DEFTIMEVAR (TV_DOMINANCE             , "dominance computation")
+DEFTIMEVAR (TV_CONTROL_DEPENDENCES   , "control dependences")
+DEFTIMEVAR (TV_OUT_OF_SSA	     , "out of ssa")
+DEFTIMEVAR (TV_VAR_EXPAND	     , "expand vars")
+DEFTIMEVAR (TV_EXPAND		     , "expand")
+DEFTIMEVAR (TV_POST_EXPAND	     , "post expand cleanups")
+DEFTIMEVAR (TV_VARCONST              , "varconst")
+DEFTIMEVAR (TV_LOWER_SUBREG	     , "lower subreg")
+DEFTIMEVAR (TV_JUMP                  , "jump")
+DEFTIMEVAR (TV_FWPROP                , "forward prop")
+DEFTIMEVAR (TV_CSE                   , "CSE")
+DEFTIMEVAR (TV_DCE                   , "dead code elimination")
+DEFTIMEVAR (TV_DSE1                  , "dead store elim1")
+DEFTIMEVAR (TV_DSE2                  , "dead store elim2")
+DEFTIMEVAR (TV_LOOP                  , "loop analysis")
+DEFTIMEVAR (TV_LOOP_INIT	     , "loop init")
+DEFTIMEVAR (TV_LOOP_VERSIONING	     , "loop versioning")
+DEFTIMEVAR (TV_LOOP_MOVE_INVARIANTS  , "loop invariant motion")
+DEFTIMEVAR (TV_LOOP_UNROLL           , "loop unrolling")
+DEFTIMEVAR (TV_LOOP_DOLOOP           , "loop doloop")
+DEFTIMEVAR (TV_LOOP_FINI	     , "loop fini")
+DEFTIMEVAR (TV_CPROP                 , "CPROP")
+DEFTIMEVAR (TV_PRE                   , "PRE")
+DEFTIMEVAR (TV_HOIST                 , "code hoisting")
+DEFTIMEVAR (TV_LSM                   , "LSM")
+DEFTIMEVAR (TV_TRACER                , "tracer")
+DEFTIMEVAR (TV_WEB                   , "web")
+DEFTIMEVAR (TV_AUTO_INC_DEC          , "auto inc dec")
+DEFTIMEVAR (TV_CSE2                  , "CSE 2")
+DEFTIMEVAR (TV_BRANCH_PROB           , "branch prediction")
+DEFTIMEVAR (TV_COMBINE               , "combiner")
+DEFTIMEVAR (TV_IFCVT		     , "if-conversion")
+DEFTIMEVAR (TV_MODE_SWITCH           , "mode switching")
+DEFTIMEVAR (TV_SMS		     , "sms modulo scheduling")
+DEFTIMEVAR (TV_LIVE_RANGE_SHRINKAGE  , "live range shrinkage")
+DEFTIMEVAR (TV_SCHED                 , "scheduling")
+DEFTIMEVAR (TV_EARLY_REMAT           , "early rematerialization")
+DEFTIMEVAR (TV_IRA		     , "integrated RA")
+DEFTIMEVAR (TV_LRA		     , "LRA non-specific")
+DEFTIMEVAR (TV_LRA_ELIMINATE	     , "LRA virtuals elimination")
+DEFTIMEVAR (TV_LRA_INHERITANCE	     , "LRA reload inheritance")
+DEFTIMEVAR (TV_LRA_CREATE_LIVE_RANGES, "LRA create live ranges")
+DEFTIMEVAR (TV_LRA_ASSIGN	     , "LRA hard reg assignment")
+DEFTIMEVAR (TV_LRA_COALESCE	     , "LRA coalesce pseudo regs")
+DEFTIMEVAR (TV_LRA_REMAT	     , "LRA rematerialization")
+DEFTIMEVAR (TV_RELOAD		     , "reload")
+DEFTIMEVAR (TV_RELOAD_CSE_REGS       , "reload CSE regs")
+DEFTIMEVAR (TV_GCSE_AFTER_RELOAD     , "load CSE after reload")
+DEFTIMEVAR (TV_REE		     , "ree")
+DEFTIMEVAR (TV_THREAD_PROLOGUE_AND_EPILOGUE, "thread pro- & epilogue")
+DEFTIMEVAR (TV_IFCVT2		     , "if-conversion 2")
+DEFTIMEVAR (TV_SPLIT_PATHS	     , "split paths")
+DEFTIMEVAR (TV_COMBINE_STACK_ADJUST  , "combine stack adjustments")
+DEFTIMEVAR (TV_PEEPHOLE2             , "peephole 2")
+DEFTIMEVAR (TV_RENAME_REGISTERS      , "rename registers")
+DEFTIMEVAR (TV_SCHED_FUSION          , "scheduling fusion")
+DEFTIMEVAR (TV_CPROP_REGISTERS       , "hard reg cprop")
+DEFTIMEVAR (TV_SCHED2                , "scheduling 2")
+DEFTIMEVAR (TV_MACH_DEP              , "machine dep reorg")
+DEFTIMEVAR (TV_DBR_SCHED             , "delay branch sched")
+DEFTIMEVAR (TV_REORDER_BLOCKS        , "reorder blocks")
+DEFTIMEVAR (TV_SHORTEN_BRANCH        , "shorten branches")
+DEFTIMEVAR (TV_REG_STACK             , "reg stack")
+DEFTIMEVAR (TV_FINAL                 , "final")
+DEFTIMEVAR (TV_VAROUT                , "variable output")
+DEFTIMEVAR (TV_SYMOUT                , "symout")
+DEFTIMEVAR (TV_VAR_TRACKING          , "variable tracking")
+DEFTIMEVAR (TV_VAR_TRACKING_DATAFLOW , "var-tracking dataflow")
+DEFTIMEVAR (TV_VAR_TRACKING_EMIT     , "var-tracking emit")
+DEFTIMEVAR (TV_TREE_IFCOMBINE        , "tree if-combine")
+DEFTIMEVAR (TV_TREE_UNINIT           , "uninit var analysis")
+DEFTIMEVAR (TV_PLUGIN_INIT           , "plugin initialization")
+DEFTIMEVAR (TV_PLUGIN_RUN            , "plugin execution")
+DEFTIMEVAR (TV_GIMPLE_SLSR           , "straight-line strength reduction")
+DEFTIMEVAR (TV_GIMPLE_STORE_MERGING  , "store merging")
+DEFTIMEVAR (TV_VTABLE_VERIFICATION   , "vtable verification")
+DEFTIMEVAR (TV_TREE_UBSAN            , "tree ubsan")
+DEFTIMEVAR (TV_INITIALIZE_RTL        , "initialize rtl")
+DEFTIMEVAR (TV_GIMPLE_LADDRESS       , "address lowering")
+DEFTIMEVAR (TV_TREE_LOOP_IFCVT       , "tree loop if-conversion")
+
+/* Everything else in rest_of_compilation not included above.  */
+DEFTIMEVAR (TV_EARLY_LOCAL	     , "early local passes")
+DEFTIMEVAR (TV_OPTIMIZE		     , "unaccounted optimizations")
+DEFTIMEVAR (TV_REST_OF_COMPILATION   , "rest of compilation")
+DEFTIMEVAR (TV_POSTRELOAD	     , "unaccounted post reload")
+DEFTIMEVAR (TV_LATE_COMPILATION	     , "unaccounted late compilation")
+DEFTIMEVAR (TV_REMOVE_UNUSED	     , "remove unused locals")
+DEFTIMEVAR (TV_ADDRESS_TAKEN	     , "address taken")
+DEFTIMEVAR (TV_TODO		     , "unaccounted todo")
+DEFTIMEVAR (TV_VERIFY_LOOP_CLOSED    , "verify loop closed")
+DEFTIMEVAR (TV_VERIFY_RTL_SHARING    , "verify RTL sharing")
+DEFTIMEVAR (TV_REBUILD_FREQUENCIES   , "rebuild frequencies")
+DEFTIMEVAR (TV_REPAIR_LOOPS	     , "repair loop structures")
+
+/* Stuff used by libgccjit.so.  */
+DEFTIMEVAR (TV_JIT_REPLAY	     , "replay of JIT client activity")
+DEFTIMEVAR (TV_ASSEMBLE	     , "assemble JIT code")
+DEFTIMEVAR (TV_LINK		     , "link JIT code")
+DEFTIMEVAR (TV_LOAD		     , "load JIT result")
+DEFTIMEVAR (TV_JIT_ACQUIRING_MUTEX   , "acquiring JIT mutex")
+DEFTIMEVAR (TV_JIT_CLIENT_CODE   , "JIT client code")
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/timevar.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/timevar.h
new file mode 100644
index 0000000..ef404d0
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/timevar.h
@@ -0,0 +1,261 @@
+/* Timing variables for measuring compiler performance.
+   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+   Contributed by Alex Samuel <samuel@codesourcery.com>
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TIMEVAR_H
+#define GCC_TIMEVAR_H
+
+/* Timing variables are used to measure elapsed time in various
+   portions of the compiler.  Each measures elapsed user, system, and
+   wall-clock time, as appropriate to and supported by the host
+   system.
+
+   Timing variables are defined using the DEFTIMEVAR macro in
+   timevar.def.  Each has an enumeral identifier, used when referring
+   to the timing variable in code, and a character string name.
+
+   Timing variables can be used in two ways:
+
+     - On the timing stack, using timevar_push and timevar_pop.
+       Timing variables may be pushed onto the stack; elapsed time is
+       attributed to the topmost timing variable on the stack.  When
+       another variable is pushed on, the previous topmost variable is
+       `paused' until the pushed variable is popped back off.
+
+     - As a standalone timer, using timevar_start and timevar_stop.
+       All time elapsed between the two calls is attributed to the
+       variable.
+*/
+
+/* This structure stores the various varieties of time that can be
+   measured.  Times are stored in seconds.  The time may be an
+   absolute time or a time difference; in the former case, the time
+   base is undefined, except that the difference between two times
+   produces a valid time difference.  */
+
+struct timevar_time_def
+{
+  /* User time in this process.  */
+  double user;
+
+  /* System time (if applicable for this host platform) in this
+     process.  */
+  double sys;
+
+  /* Wall clock time.  */
+  double wall;
+
+  /* Garbage collector memory.  */
+  size_t ggc_mem;
+};
+
+/* An enumeration of timing variable identifiers.  Constructed from
+   the contents of timevar.def.  */
+
+#define DEFTIMEVAR(identifier__, name__) \
+    identifier__,
+typedef enum
+{
+  TV_NONE,
+#include "timevar.def"
+  TIMEVAR_LAST
+}
+timevar_id_t;
+#undef DEFTIMEVAR
+
+/* A class to hold all state relating to timing.  */
+
+class timer;
+
+/* The singleton instance of timing state.
+
+   This is non-NULL if timevars should be used.  In GCC, this happens with
+   the -ftime-report flag.  Hence this is NULL for the common,
+   needs-to-be-fast case, with an early reject happening for this being
+   NULL.  */
+extern timer *g_timer;
+
+/* Total amount of memory allocated by garbage collector.  */
+extern size_t timevar_ggc_mem_total;
+
+extern void timevar_init (void);
+extern void timevar_start (timevar_id_t);
+extern void timevar_stop (timevar_id_t);
+extern bool timevar_cond_start (timevar_id_t);
+extern void timevar_cond_stop (timevar_id_t, bool);
+
+/* The public (within GCC) interface for timing.  */
+
+class timer
+{
+ public:
+  timer ();
+  ~timer ();
+
+  void start (timevar_id_t tv);
+  void stop (timevar_id_t tv);
+  void push (timevar_id_t tv);
+  void pop (timevar_id_t tv);
+  bool cond_start (timevar_id_t tv);
+  void cond_stop (timevar_id_t tv);
+
+  void push_client_item (const char *item_name);
+  void pop_client_item ();
+
+  void print (FILE *fp);
+
+  const char *get_topmost_item_name () const;
+
+ private:
+  /* Private member functions.  */
+  void validate_phases (FILE *fp) const;
+
+  struct timevar_def;
+  void push_internal (struct timevar_def *tv);
+  void pop_internal ();
+  static void print_row (FILE *fp,
+			 const timevar_time_def *total,
+			 const char *name, const timevar_time_def &elapsed);
+  static bool all_zero (const timevar_time_def &elapsed);
+
+ private:
+  typedef hash_map<timevar_def *, timevar_time_def> child_map_t;
+
+  /* Private type: a timing variable.  */
+  struct timevar_def
+  {
+    /* Elapsed time for this variable.  */
+    struct timevar_time_def elapsed;
+
+    /* If this variable is timed independently of the timing stack,
+       using timevar_start, this contains the start time.  */
+    struct timevar_time_def start_time;
+
+    /* The name of this timing variable.  */
+    const char *name;
+
+    /* Nonzero if this timing variable is running as a standalone
+       timer.  */
+    unsigned standalone : 1;
+
+    /* Nonzero if this timing variable was ever started or pushed onto
+       the timing stack.  */
+    unsigned used : 1;
+
+    child_map_t *children;
+  };
+
+  /* Private type: an element on the timing stack
+     Elapsed time is attributed to the topmost timing variable on the
+     stack.  */
+  struct timevar_stack_def
+  {
+    /* The timing variable at this stack level.  */
+    struct timevar_def *timevar;
+
+    /* The next lower timing variable context in the stack.  */
+    struct timevar_stack_def *next;
+  };
+
+  /* A class for managing a collection of named timing items, for use
+     e.g. by libgccjit for timing client code.  This class is declared
+     inside timevar.c to avoid everything using timevar.h
+     from needing vec and hash_map.  */
+  class named_items;
+
+ private:
+
+  /* Data members (all private).  */
+
+  /* Declared timing variables.  Constructed from the contents of
+     timevar.def.  */
+  timevar_def m_timevars[TIMEVAR_LAST];
+
+  /* The top of the timing stack.  */
+  timevar_stack_def *m_stack;
+
+  /* A list of unused (i.e. allocated and subsequently popped)
+     timevar_stack_def instances.  */
+  timevar_stack_def *m_unused_stack_instances;
+
+  /* The time at which the topmost element on the timing stack was
+     pushed.  Time elapsed since then is attributed to the topmost
+     element.  */
+  timevar_time_def m_start_time;
+
+  /* If non-NULL, for use when timing libgccjit's client code.  */
+  named_items *m_jit_client_items;
+
+  friend class named_items;
+};
+
+/* Provided for backward compatibility.  */
+static inline void
+timevar_push (timevar_id_t tv)
+{
+  if (g_timer)
+    g_timer->push (tv);
+}
+
+static inline void
+timevar_pop (timevar_id_t tv)
+{
+  if (g_timer)
+    g_timer->pop (tv);
+}
+
+// This is a simple timevar wrapper class that pushes a timevar in its
+// constructor and pops the timevar in its destructor.
+class auto_timevar
+{
+ public:
+  auto_timevar (timer *t, timevar_id_t tv)
+    : m_timer (t),
+      m_tv (tv)
+  {
+    if (m_timer)
+      m_timer->push (m_tv);
+  }
+
+  explicit auto_timevar (timevar_id_t tv)
+    : m_timer (g_timer)
+    , m_tv (tv)
+  {
+    if (m_timer)
+      m_timer->push (m_tv);
+  }
+
+  ~auto_timevar ()
+  {
+    if (m_timer)
+      m_timer->pop (m_tv);
+  }
+
+ private:
+
+  // Private to disallow copies.
+  auto_timevar (const auto_timevar &);
+
+  timer *m_timer;
+  timevar_id_t m_tv;
+};
+
+extern void print_time (const char *, long);
+
+#endif /* ! GCC_TIMEVAR_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tm-preds.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tm-preds.h
new file mode 100644
index 0000000..fbef72a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tm-preds.h
@@ -0,0 +1,366 @@
+/* Generated automatically by the program 'build/genpreds'
+   from the machine description file '../../linaro/gcc/config/aarch64/aarch64.md'.  */
+
+#ifndef GCC_TM_PREDS_H
+#define GCC_TM_PREDS_H
+
+#ifdef HAVE_MACHINE_MODES
+extern int general_operand (rtx, machine_mode);
+extern int address_operand (rtx, machine_mode);
+extern int register_operand (rtx, machine_mode);
+extern int pmode_register_operand (rtx, machine_mode);
+extern int scratch_operand (rtx, machine_mode);
+extern int immediate_operand (rtx, machine_mode);
+extern int const_int_operand (rtx, machine_mode);
+extern int const_scalar_int_operand (rtx, machine_mode);
+extern int const_double_operand (rtx, machine_mode);
+extern int nonimmediate_operand (rtx, machine_mode);
+extern int nonmemory_operand (rtx, machine_mode);
+extern int push_operand (rtx, machine_mode);
+extern int pop_operand (rtx, machine_mode);
+extern int memory_operand (rtx, machine_mode);
+extern int indirect_operand (rtx, machine_mode);
+extern int ordered_comparison_operator (rtx, machine_mode);
+extern int comparison_operator (rtx, machine_mode);
+extern int cc_register (rtx, machine_mode);
+extern int aarch64_call_insn_operand (rtx, machine_mode);
+extern int aarch64_general_reg (rtx, machine_mode);
+extern int const0_operand (rtx, machine_mode);
+extern int subreg_lowpart_operator (rtx, machine_mode);
+extern int aarch64_ccmp_immediate (rtx, machine_mode);
+extern int aarch64_ccmp_operand (rtx, machine_mode);
+extern int aarch64_simd_register (rtx, machine_mode);
+extern int aarch64_reg_or_zero (rtx, machine_mode);
+extern int aarch64_reg_or_fp_zero (rtx, machine_mode);
+extern int aarch64_reg_zero_or_fp_zero (rtx, machine_mode);
+extern int aarch64_reg_zero_or_m1_or_1 (rtx, machine_mode);
+extern int aarch64_reg_or_orr_imm (rtx, machine_mode);
+extern int aarch64_reg_or_bic_imm (rtx, machine_mode);
+extern int aarch64_fp_compare_operand (rtx, machine_mode);
+extern int aarch64_fp_pow2 (rtx, machine_mode);
+extern int aarch64_fp_vec_pow2 (rtx, machine_mode);
+extern int aarch64_sve_cnt_immediate (rtx, machine_mode);
+extern int aarch64_sub_immediate (rtx, machine_mode);
+extern int aarch64_plus_immediate (rtx, machine_mode);
+extern int aarch64_plus_operand (rtx, machine_mode);
+extern int aarch64_plushi_immediate (rtx, machine_mode);
+extern int aarch64_plushi_operand (rtx, machine_mode);
+extern int aarch64_pluslong_immediate (rtx, machine_mode);
+extern int aarch64_pluslong_strict_immedate (rtx, machine_mode);
+extern int aarch64_sve_addvl_addpl_immediate (rtx, machine_mode);
+extern int aarch64_split_add_offset_immediate (rtx, machine_mode);
+extern int aarch64_pluslong_operand (rtx, machine_mode);
+extern int aarch64_pluslong_or_poly_operand (rtx, machine_mode);
+extern int aarch64_logical_immediate (rtx, machine_mode);
+extern int aarch64_logical_operand (rtx, machine_mode);
+extern int aarch64_mov_imm_operand (rtx, machine_mode);
+extern int aarch64_logical_and_immediate (rtx, machine_mode);
+extern int aarch64_shift_imm_si (rtx, machine_mode);
+extern int aarch64_shift_imm_di (rtx, machine_mode);
+extern int aarch64_shift_imm64_di (rtx, machine_mode);
+extern int aarch64_reg_or_shift_imm_si (rtx, machine_mode);
+extern int aarch64_reg_or_shift_imm_di (rtx, machine_mode);
+extern int aarch64_imm3 (rtx, machine_mode);
+extern int aarch64_imm2 (rtx, machine_mode);
+extern int aarch64_lane_imm3 (rtx, machine_mode);
+extern int aarch64_imm24 (rtx, machine_mode);
+extern int aarch64_pwr_imm3 (rtx, machine_mode);
+extern int aarch64_pwr_2_si (rtx, machine_mode);
+extern int aarch64_pwr_2_di (rtx, machine_mode);
+extern int aarch64_mem_pair_offset (rtx, machine_mode);
+extern int aarch64_mem_pair_operand (rtx, machine_mode);
+extern int aarch64_mem_pair_lanes_operand (rtx, machine_mode);
+extern int aarch64_prefetch_operand (rtx, machine_mode);
+extern int aarch64_valid_symref (rtx, machine_mode);
+extern int aarch64_tls_ie_symref (rtx, machine_mode);
+extern int aarch64_tls_le_symref (rtx, machine_mode);
+extern int aarch64_mov_operand (rtx, machine_mode);
+extern int aarch64_nonmemory_operand (rtx, machine_mode);
+extern int aarch64_movti_operand (rtx, machine_mode);
+extern int aarch64_reg_or_imm (rtx, machine_mode);
+extern int aarch64_smin (rtx, machine_mode);
+extern int aarch64_umin (rtx, machine_mode);
+extern int aarch64_comparison_operator (rtx, machine_mode);
+extern int aarch64_comparison_operator_mode (rtx, machine_mode);
+extern int aarch64_comparison_operation (rtx, machine_mode);
+extern int aarch64_equality_operator (rtx, machine_mode);
+extern int aarch64_carry_operation (rtx, machine_mode);
+extern int aarch64_borrow_operation (rtx, machine_mode);
+extern int aarch64_sync_memory_operand (rtx, machine_mode);
+extern int aarch64_9bit_offset_memory_operand (rtx, machine_mode);
+extern int aarch64_rcpc_memory_operand (rtx, machine_mode);
+extern int vect_par_cnst_hi_half (rtx, machine_mode);
+extern int vect_par_cnst_lo_half (rtx, machine_mode);
+extern int aarch64_simd_lshift_imm (rtx, machine_mode);
+extern int aarch64_simd_rshift_imm (rtx, machine_mode);
+extern int aarch64_simd_imm_zero (rtx, machine_mode);
+extern int aarch64_simd_or_scalar_imm_zero (rtx, machine_mode);
+extern int aarch64_simd_imm_minus_one (rtx, machine_mode);
+extern int aarch64_simd_reg_or_zero (rtx, machine_mode);
+extern int aarch64_simd_struct_operand (rtx, machine_mode);
+extern int aarch64_simd_general_operand (rtx, machine_mode);
+extern int aarch64_simd_nonimmediate_operand (rtx, machine_mode);
+extern int aarch64_simd_shift_imm_qi (rtx, machine_mode);
+extern int aarch64_simd_shift_imm_hi (rtx, machine_mode);
+extern int aarch64_simd_shift_imm_si (rtx, machine_mode);
+extern int aarch64_simd_shift_imm_di (rtx, machine_mode);
+extern int aarch64_simd_shift_imm_offset_qi (rtx, machine_mode);
+extern int aarch64_simd_shift_imm_offset_hi (rtx, machine_mode);
+extern int aarch64_simd_shift_imm_offset_si (rtx, machine_mode);
+extern int aarch64_simd_shift_imm_offset_di (rtx, machine_mode);
+extern int aarch64_simd_shift_imm_bitsize_qi (rtx, machine_mode);
+extern int aarch64_simd_shift_imm_bitsize_hi (rtx, machine_mode);
+extern int aarch64_simd_shift_imm_bitsize_si (rtx, machine_mode);
+extern int aarch64_simd_shift_imm_bitsize_di (rtx, machine_mode);
+extern int aarch64_constant_pool_symref (rtx, machine_mode);
+extern int aarch64_constant_vector_operand (rtx, machine_mode);
+extern int aarch64_sve_ld1r_operand (rtx, machine_mode);
+extern int aarch64_sve_ldr_operand (rtx, machine_mode);
+extern int aarch64_sve_nonimmediate_operand (rtx, machine_mode);
+extern int aarch64_sve_general_operand (rtx, machine_mode);
+extern int aarch64_sve_struct_memory_operand (rtx, machine_mode);
+extern int aarch64_sve_struct_nonimmediate_operand (rtx, machine_mode);
+extern int aarch64_sve_dup_operand (rtx, machine_mode);
+extern int aarch64_sve_arith_immediate (rtx, machine_mode);
+extern int aarch64_sve_sub_arith_immediate (rtx, machine_mode);
+extern int aarch64_sve_inc_dec_immediate (rtx, machine_mode);
+extern int aarch64_sve_logical_immediate (rtx, machine_mode);
+extern int aarch64_sve_mul_immediate (rtx, machine_mode);
+extern int aarch64_sve_dup_immediate (rtx, machine_mode);
+extern int aarch64_sve_cmp_vsc_immediate (rtx, machine_mode);
+extern int aarch64_sve_cmp_vsd_immediate (rtx, machine_mode);
+extern int aarch64_sve_index_immediate (rtx, machine_mode);
+extern int aarch64_sve_float_arith_immediate (rtx, machine_mode);
+extern int aarch64_sve_float_arith_with_sub_immediate (rtx, machine_mode);
+extern int aarch64_sve_float_mul_immediate (rtx, machine_mode);
+extern int aarch64_sve_arith_operand (rtx, machine_mode);
+extern int aarch64_sve_add_operand (rtx, machine_mode);
+extern int aarch64_sve_logical_operand (rtx, machine_mode);
+extern int aarch64_sve_lshift_operand (rtx, machine_mode);
+extern int aarch64_sve_rshift_operand (rtx, machine_mode);
+extern int aarch64_sve_mul_operand (rtx, machine_mode);
+extern int aarch64_sve_cmp_vsc_operand (rtx, machine_mode);
+extern int aarch64_sve_cmp_vsd_operand (rtx, machine_mode);
+extern int aarch64_sve_index_operand (rtx, machine_mode);
+extern int aarch64_sve_float_arith_operand (rtx, machine_mode);
+extern int aarch64_sve_float_arith_with_sub_operand (rtx, machine_mode);
+extern int aarch64_sve_float_mul_operand (rtx, machine_mode);
+extern int aarch64_sve_vec_perm_operand (rtx, machine_mode);
+extern int aarch64_gather_scale_operand_w (rtx, machine_mode);
+extern int aarch64_gather_scale_operand_d (rtx, machine_mode);
+extern int aarch64_any_register_operand (rtx, machine_mode);
+extern int aarch64_sve_any_binary_operator (rtx, machine_mode);
+#endif /* HAVE_MACHINE_MODES */
+
+#define CONSTRAINT_NUM_DEFINED_P 1
+enum constraint_num
+{
+  CONSTRAINT__UNKNOWN = 0,
+  CONSTRAINT_r,
+  CONSTRAINT_k,
+  CONSTRAINT_Ucs,
+  CONSTRAINT_w,
+  CONSTRAINT_Upa,
+  CONSTRAINT_Upl,
+  CONSTRAINT_x,
+  CONSTRAINT_I,
+  CONSTRAINT_J,
+  CONSTRAINT_K,
+  CONSTRAINT_L,
+  CONSTRAINT_M,
+  CONSTRAINT_N,
+  CONSTRAINT_m,
+  CONSTRAINT_o,
+  CONSTRAINT_Q,
+  CONSTRAINT_Ust,
+  CONSTRAINT_Ump,
+  CONSTRAINT_Umn,
+  CONSTRAINT_Utr,
+  CONSTRAINT_Utv,
+  CONSTRAINT_Utq,
+  CONSTRAINT_Uty,
+  CONSTRAINT_Utx,
+  CONSTRAINT_p,
+  CONSTRAINT_Dp,
+  CONSTRAINT_Uaa,
+  CONSTRAINT_Uav,
+  CONSTRAINT_Uat,
+  CONSTRAINT_Uti,
+  CONSTRAINT_UsO,
+  CONSTRAINT_UsP,
+  CONSTRAINT_S,
+  CONSTRAINT_Y,
+  CONSTRAINT_Ush,
+  CONSTRAINT_Usa,
+  CONSTRAINT_Uss,
+  CONSTRAINT_Usn,
+  CONSTRAINT_Usd,
+  CONSTRAINT_Usf,
+  CONSTRAINT_Usg,
+  CONSTRAINT_Usj,
+  CONSTRAINT_Ulc,
+  CONSTRAINT_Usv,
+  CONSTRAINT_Usi,
+  CONSTRAINT_Ui2,
+  CONSTRAINT_Ui3,
+  CONSTRAINT_Ui7,
+  CONSTRAINT_Up3,
+  CONSTRAINT_Ufc,
+  CONSTRAINT_Uvi,
+  CONSTRAINT_Do,
+  CONSTRAINT_Db,
+  CONSTRAINT_Dn,
+  CONSTRAINT_Dh,
+  CONSTRAINT_Dq,
+  CONSTRAINT_Dl,
+  CONSTRAINT_Dr,
+  CONSTRAINT_Dz,
+  CONSTRAINT_Dm,
+  CONSTRAINT_Dd,
+  CONSTRAINT_Ds,
+  CONSTRAINT_vsa,
+  CONSTRAINT_vsc,
+  CONSTRAINT_vsd,
+  CONSTRAINT_vsi,
+  CONSTRAINT_vsn,
+  CONSTRAINT_vsl,
+  CONSTRAINT_vsm,
+  CONSTRAINT_vsA,
+  CONSTRAINT_vsM,
+  CONSTRAINT_vsN,
+  CONSTRAINT_V,
+  CONSTRAINT__l,
+  CONSTRAINT__g,
+  CONSTRAINT_i,
+  CONSTRAINT_s,
+  CONSTRAINT_n,
+  CONSTRAINT_E,
+  CONSTRAINT_F,
+  CONSTRAINT_X,
+  CONSTRAINT_Z,
+  CONSTRAINT_UsM,
+  CONSTRAINT_Ui1,
+  CONSTRAINT__LIMIT
+};
+
+extern enum constraint_num lookup_constraint_1 (const char *);
+extern const unsigned char lookup_constraint_array[];
+
+/* Return the constraint at the beginning of P, or CONSTRAINT__UNKNOWN if it
+   isn't recognized.  */
+
+static inline enum constraint_num
+lookup_constraint (const char *p)
+{
+  unsigned int index = lookup_constraint_array[(unsigned char) *p];
+  return (index == UCHAR_MAX
+          ? lookup_constraint_1 (p)
+          : (enum constraint_num) index);
+}
+
+extern bool (*constraint_satisfied_p_array[]) (rtx);
+
+/* Return true if X satisfies constraint C.  */
+
+static inline bool
+constraint_satisfied_p (rtx x, enum constraint_num c)
+{
+  int i = (int) c - (int) CONSTRAINT_I;
+  return i >= 0 && constraint_satisfied_p_array[i] (x);
+}
+
+static inline bool
+insn_extra_register_constraint (enum constraint_num c)
+{
+  return c >= CONSTRAINT_r && c <= CONSTRAINT_x;
+}
+
+static inline bool
+insn_extra_memory_constraint (enum constraint_num c)
+{
+  return c >= CONSTRAINT_m && c <= CONSTRAINT_Utx;
+}
+
+static inline bool
+insn_extra_special_memory_constraint (enum constraint_num)
+{
+  return false;
+}
+
+static inline bool
+insn_extra_address_constraint (enum constraint_num c)
+{
+  return c >= CONSTRAINT_p && c <= CONSTRAINT_Dp;
+}
+
+static inline void
+insn_extra_constraint_allows_reg_mem (enum constraint_num c,
+				      bool *allows_reg, bool *allows_mem)
+{
+  if (c >= CONSTRAINT_Uaa && c <= CONSTRAINT_vsN)
+    return;
+  if (c >= CONSTRAINT_V && c <= CONSTRAINT__g)
+    {
+      *allows_mem = true;
+      return;
+    }
+  (void) c;
+  *allows_reg = true;
+  *allows_mem = true;
+}
+
+static inline size_t
+insn_constraint_len (char fc, const char *str ATTRIBUTE_UNUSED)
+{
+  switch (fc)
+    {
+    case 'D': return 2;
+    case 'U': return 3;
+    case 'v': return 3;
+    default: break;
+    }
+  return 1;
+}
+
+#define CONSTRAINT_LEN(c_,s_) insn_constraint_len (c_,s_)
+
+extern enum reg_class reg_class_for_constraint_1 (enum constraint_num);
+
+static inline enum reg_class
+reg_class_for_constraint (enum constraint_num c)
+{
+  if (insn_extra_register_constraint (c))
+    return reg_class_for_constraint_1 (c);
+  return NO_REGS;
+}
+
+extern bool insn_const_int_ok_for_constraint (HOST_WIDE_INT, enum constraint_num);
+#define CONST_OK_FOR_CONSTRAINT_P(v_,c_,s_) \
+    insn_const_int_ok_for_constraint (v_, lookup_constraint (s_))
+
+enum constraint_type
+{
+  CT_REGISTER,
+  CT_CONST_INT,
+  CT_MEMORY,
+  CT_SPECIAL_MEMORY,
+  CT_ADDRESS,
+  CT_FIXED_FORM
+};
+
+static inline enum constraint_type
+get_constraint_type (enum constraint_num c)
+{
+  if (c >= CONSTRAINT_p)
+    {
+      if (c >= CONSTRAINT_Uaa)
+        return CT_FIXED_FORM;
+      return CT_ADDRESS;
+    }
+  if (c >= CONSTRAINT_m)
+    return CT_MEMORY;
+  if (c >= CONSTRAINT_I)
+    return CT_CONST_INT;
+  return CT_REGISTER;
+}
+#endif /* tm-preds.h */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tm.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tm.h
new file mode 100644
index 0000000..4f89a81
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tm.h
@@ -0,0 +1,34 @@
+#ifndef GCC_TM_H
+#define GCC_TM_H
+#ifndef LIBC_GLIBC
+# define LIBC_GLIBC 1
+#endif
+#ifndef LIBC_UCLIBC
+# define LIBC_UCLIBC 2
+#endif
+#ifndef LIBC_BIONIC
+# define LIBC_BIONIC 3
+#endif
+#ifndef LIBC_MUSL
+# define LIBC_MUSL 4
+#endif
+#ifdef IN_GCC
+# include "options.h"
+# include "insn-constants.h"
+# include "config/aarch64/biarchlp64.h"
+# include "config/aarch64/aarch64.h"
+# include "config/dbxelf.h"
+# include "config/elfos.h"
+# include "config/newlib-stdint.h"
+# include "config/aarch64/aarch64-elf.h"
+# include "config/aarch64/aarch64-elf-raw.h"
+# include "config/initfini-array.h"
+#endif
+#if defined IN_GCC && !defined GENERATOR_FILE && !defined USED_FOR_TARGET
+# include "insn-flags.h"
+#endif
+#if defined IN_GCC && !defined GENERATOR_FILE
+# include "insn-modes.h"
+#endif
+# include "defaults.h"
+#endif /* GCC_TM_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tm_p.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tm_p.h
new file mode 100644
index 0000000..0977957
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tm_p.h
@@ -0,0 +1,8 @@
+#ifndef GCC_TM_P_H
+#define GCC_TM_P_H
+#ifdef IN_GCC
+# include "config/aarch64/aarch64-protos.h"
+# include "config/arm/aarch-common-protos.h"
+# include "tm-preds.h"
+#endif
+#endif /* GCC_TM_P_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/toplev.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/toplev.h
new file mode 100644
index 0000000..48cb10c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/toplev.h
@@ -0,0 +1,105 @@
+/* toplev.h - Various declarations for functions found in toplev.c
+   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TOPLEV_H
+#define GCC_TOPLEV_H
+
+/* Decoded options, and number of such options.  */
+extern struct cl_decoded_option *save_decoded_options;
+extern unsigned int save_decoded_options_count;
+
+class timer;
+
+/* Invoking the compiler.  */
+class toplev
+{
+public:
+  toplev (timer *external_timer,
+	  bool init_signals);
+  ~toplev ();
+
+  int main (int argc, char **argv);
+
+  void finalize ();
+
+private:
+
+  void start_timevars ();
+
+  void run_self_tests ();
+
+  bool m_use_TV_TOTAL;
+  bool m_init_signals;
+};
+
+extern void rest_of_decl_compilation (tree, int, int);
+extern void rest_of_type_compilation (tree, int);
+extern void init_optimization_passes (void);
+extern bool enable_rtl_dump_file (void);
+
+/* In except.c.  Initialize exception handling.  This is used by the Ada
+   and LTO front ends to initialize EH "on demand".  See lto-streamer-in.c
+   and ada/gcc-interface/misc.c.  */
+extern void init_eh (void);
+
+extern void announce_function (tree);
+
+extern void wrapup_global_declaration_1 (tree);
+extern bool wrapup_global_declaration_2 (tree);
+extern bool wrapup_global_declarations (tree *, int);
+
+extern void global_decl_processing (void);
+
+extern void dump_memory_report (bool);
+extern void dump_profile_report (void);
+
+extern void target_reinit (void);
+
+/* A unique local time stamp, might be zero if none is available.  */
+extern unsigned local_tick;
+
+/* See toplev.c.  */
+extern int flag_rerun_cse_after_global_opts;
+
+extern void print_version (FILE *, const char *, bool);
+
+/* The hashtable, so that the C front ends can pass it to cpplib.  */
+extern struct ht *ident_hash;
+
+/* Functions used to get and set GCC's notion of in what directory
+   compilation was started.  */
+
+extern const char *get_src_pwd	       (void);
+extern bool set_src_pwd		       (const char *);
+
+/* Functions used to manipulate the random seed.  */
+
+extern HOST_WIDE_INT get_random_seed (bool);
+extern void set_random_seed (const char *);
+
+extern unsigned int min_align_loops_log;
+extern unsigned int min_align_jumps_log;
+extern unsigned int min_align_labels_log;
+extern unsigned int min_align_functions_log;
+
+extern void parse_alignment_opts (void);
+
+extern void initialize_rtl (void);
+
+#endif /* ! GCC_TOPLEV_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tracer.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tracer.h
new file mode 100644
index 0000000..fb136cd
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tracer.h
@@ -0,0 +1,26 @@
+/* Header file for Tracer.
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TRACER_H
+#define GCC_TRACER_H
+
+extern basic_block transform_duplicate (basic_block bb, basic_block bb2);
+extern bool ignore_bb_p (const_basic_block bb);
+
+#endif /* GCC_TRACER_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/trans-mem.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/trans-mem.h
new file mode 100644
index 0000000..4091df3
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/trans-mem.h
@@ -0,0 +1,52 @@
+/* Miscellaneous transactional memory support definitions.
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+   Contributed by Richard Henderson <rth@redhat.com>
+   and Aldy Hernandez <aldyh@redhat.com>.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it under
+   the terms of the GNU General Public License as published by the Free
+   Software Foundation; either version 3, or (at your option) any later
+   version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or
+   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+   for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TRANS_MEM_H
+#define GCC_TRANS_MEM_H
+
+/* These defines must match the enumerations in libitm.h.  */
+#define PR_INSTRUMENTEDCODE	0x0001
+#define PR_UNINSTRUMENTEDCODE	0x0002
+#define PR_MULTIWAYCODE		(PR_INSTRUMENTEDCODE | PR_UNINSTRUMENTEDCODE)
+#define PR_HASNOXMMUPDATE	0x0004
+#define PR_HASNOABORT		0x0008
+#define PR_HASNOIRREVOCABLE	0x0020
+#define PR_DOESGOIRREVOCABLE	0x0040
+#define PR_HASNOSIMPLEREADS	0x0080
+#define PR_AWBARRIERSOMITTED	0x0100
+#define PR_RARBARRIERSOMITTED	0x0200
+#define PR_UNDOLOGCODE		0x0400
+#define PR_PREFERUNINSTRUMENTED	0x0800
+#define PR_EXCEPTIONBLOCK	0x1000
+#define PR_HASELSE		0x2000
+#define PR_READONLY		0x4000
+
+extern void compute_transaction_bits (void);
+extern bool is_tm_ending (gimple *);
+extern tree build_tm_abort_call (location_t, bool);
+extern bool is_tm_safe (const_tree);
+extern bool is_tm_pure (const_tree);
+extern bool is_tm_may_cancel_outer (tree);
+extern bool is_tm_ending_fndecl (tree);
+extern void record_tm_replacement (tree, tree);
+extern void tm_malloc_replacement (tree);
+
+#endif  // GCC_TRANS_MEM_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-affine.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-affine.h
new file mode 100644
index 0000000..257e8f6
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-affine.h
@@ -0,0 +1,127 @@
+/* Operations with affine combinations of trees.
+   Copyright (C) 2005-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Affine combination of trees.  We keep track of at most MAX_AFF_ELTS elements
+   to make things simpler; this is sufficient in most cases.  */
+
+#ifndef GCC_TREE_AFFINE_H
+#define GCC_TREE_AFFINE_H
+
+
+#define MAX_AFF_ELTS 8
+
+/* Element of an affine combination.  */
+
+struct aff_comb_elt
+{
+  /* The value of the element.  */
+  tree val;
+
+  /* Its coefficient in the combination.  */
+  widest_int coef;
+};
+
+struct aff_tree
+{
+  /* Type of the result of the combination.  */
+  tree type;
+
+  /* Constant offset.  */
+  poly_widest_int offset;
+
+  /* Number of elements of the combination.  */
+  unsigned n;
+
+  /* Elements and their coefficients.  Type of elements may be different from
+     TYPE, but their sizes must be the same (STRIP_NOPS is applied to the
+     elements).
+
+     The coefficients are always sign extended from the precision of TYPE
+     (regardless of signedness of TYPE).  */
+  struct aff_comb_elt elts[MAX_AFF_ELTS];
+
+  /* Remainder of the expression.  Usually NULL, used only if there are more
+     than MAX_AFF_ELTS elements.  Type of REST will be either sizetype for
+     TYPE of POINTER_TYPEs or TYPE.  */
+  tree rest;
+};
+
+struct name_expansion;
+
+void aff_combination_const (aff_tree *, tree, const poly_widest_int &);
+void aff_combination_elt (aff_tree *, tree, tree);
+void aff_combination_scale (aff_tree *, const widest_int &);
+void aff_combination_mult (aff_tree *, aff_tree *, aff_tree *);
+void aff_combination_add (aff_tree *, aff_tree *);
+void aff_combination_add_elt (aff_tree *, tree, const widest_int &);
+void aff_combination_remove_elt (aff_tree *, unsigned);
+void aff_combination_convert (aff_tree *, tree);
+void tree_to_aff_combination (tree, tree, aff_tree *);
+tree aff_combination_to_tree (aff_tree *);
+void unshare_aff_combination (aff_tree *);
+bool aff_combination_constant_multiple_p (aff_tree *, aff_tree *,
+					  poly_widest_int *);
+void aff_combination_expand (aff_tree *, hash_map<tree, name_expansion *> **);
+void tree_to_aff_combination_expand (tree, tree, aff_tree *,
+				     hash_map<tree, name_expansion *> **);
+tree get_inner_reference_aff (tree, aff_tree *, poly_widest_int *);
+void free_affine_expand_cache (hash_map<tree, name_expansion *> **);
+bool aff_comb_cannot_overlap_p (aff_tree *, const poly_widest_int &,
+				const poly_widest_int &);
+
+/* Debugging functions.  */
+void debug_aff (aff_tree *);
+
+/* Return AFF's type.  */
+inline tree
+aff_combination_type (aff_tree *aff)
+{
+  return aff->type;
+}
+
+/* Return true if AFF is actually ZERO.  */
+inline bool
+aff_combination_zero_p (aff_tree *aff)
+{
+  if (!aff)
+    return true;
+
+  if (aff->n == 0 && known_eq (aff->offset, 0))
+    return true;
+
+  return false;
+}
+
+/* Return true if AFF is actually const.  */
+inline bool
+aff_combination_const_p (aff_tree *aff)
+{
+  return (aff == NULL || aff->n == 0);
+}
+
+/* Return true iff AFF contains one (negated) singleton variable.  Users need
+   to make sure AFF points to a valid combination.  */
+inline bool
+aff_combination_singleton_var_p (aff_tree *aff)
+{
+  return (aff->n == 1
+	  && known_eq (aff->offset, 0)
+	  && (aff->elts[0].coef == 1 || aff->elts[0].coef == -1));
+}
+#endif /* GCC_TREE_AFFINE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-cfg.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-cfg.h
new file mode 100644
index 0000000..212f5ff
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-cfg.h
@@ -0,0 +1,131 @@
+/* Data and Control Flow Analysis for Trees.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Contributed by Diego Novillo <dnovillo@redhat.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef _TREE_CFG_H
+#define _TREE_CFG_H
+
+/* Location to track pending stmt for edge insertion.  */
+#define PENDING_STMT(e)	((e)->insns.g)
+
+/* Garbage collection and PCH support for edge_def.  */
+extern void gt_ggc_mx (edge_def *e);
+extern void gt_pch_nx (edge_def *e);
+extern void gt_pch_nx (edge_def *e, gt_pointer_operator, void *);
+
+extern void init_empty_tree_cfg_for_function (struct function *);
+extern void init_empty_tree_cfg (void);
+extern void start_recording_case_labels (void);
+extern void end_recording_case_labels (void);
+extern basic_block label_to_block (struct function *, tree);
+extern void cleanup_dead_labels (void);
+extern bool group_case_labels_stmt (gswitch *);
+extern bool group_case_labels (void);
+extern void replace_uses_by (tree, tree);
+extern basic_block single_noncomplex_succ (basic_block bb);
+extern void notice_special_calls (gcall *);
+extern void clear_special_calls (void);
+extern edge find_taken_edge (basic_block, tree);
+extern void gimple_debug_bb (basic_block);
+extern basic_block gimple_debug_bb_n (int);
+extern void gimple_debug_cfg (int);
+extern void gimple_dump_cfg (FILE *, dump_flags_t);
+extern void dump_cfg_stats (FILE *);
+extern void debug_cfg_stats (void);
+extern bool computed_goto_p (gimple *);
+extern bool stmt_can_make_abnormal_goto (gimple *);
+extern basic_block get_abnormal_succ_dispatcher (basic_block);
+extern bool is_ctrl_stmt (gimple *);
+extern bool is_ctrl_altering_stmt (gimple *);
+extern bool simple_goto_p (gimple *);
+extern bool stmt_ends_bb_p (gimple *);
+extern bool gimple_seq_unreachable_p (gimple_seq);
+extern bool assert_unreachable_fallthru_edge_p (edge);
+extern void delete_tree_cfg_annotations (function *);
+extern gphi *get_virtual_phi (basic_block);
+extern gimple *first_stmt (basic_block);
+extern gimple *last_stmt (basic_block);
+extern gimple *last_and_only_stmt (basic_block);
+extern void verify_gimple_in_seq (gimple_seq);
+extern void verify_gimple_in_cfg (struct function *, bool);
+extern tree gimple_block_label (basic_block);
+extern void add_phi_args_after_copy_bb (basic_block);
+extern void add_phi_args_after_copy (basic_block *, unsigned, edge);
+extern basic_block split_edge_bb_loc (edge);
+extern bool gimple_duplicate_sese_region (edge, edge, basic_block *, unsigned,
+					basic_block *, bool);
+extern bool gimple_duplicate_sese_tail (edge, edge, basic_block *, unsigned,
+				      basic_block *);
+extern void gather_blocks_in_sese_region (basic_block entry, basic_block exit,
+					  vec<basic_block> *bbs_p);
+extern void verify_sese (basic_block, basic_block, vec<basic_block> *);
+extern bool gather_ssa_name_hash_map_from (tree const &, tree const &, void *);
+extern void fold_loop_internal_call (gimple *, tree);
+extern basic_block move_sese_region_to_fn (struct function *, basic_block,
+				           basic_block, tree);
+extern void dump_function_to_file (tree, FILE *, dump_flags_t);
+extern void debug_function (tree, dump_flags_t);
+extern void print_loops_bb (FILE *, basic_block, int, int);
+extern void print_loops (FILE *, int);
+extern void debug (struct loop &ref);
+extern void debug (struct loop *ptr);
+extern void debug_verbose (struct loop &ref);
+extern void debug_verbose (struct loop *ptr);
+extern void debug_loops (int);
+extern void debug_loop (struct loop *, int);
+extern void debug_loop_num (unsigned, int);
+extern void remove_edge_and_dominated_blocks (edge);
+extern bool gimple_purge_dead_eh_edges (basic_block);
+extern bool gimple_purge_all_dead_eh_edges (const_bitmap);
+extern bool gimple_purge_dead_abnormal_call_edges (basic_block);
+extern bool gimple_purge_all_dead_abnormal_call_edges (const_bitmap);
+extern tree gimplify_build3 (gimple_stmt_iterator *, enum tree_code,
+			     tree, tree, tree, tree);
+extern tree gimplify_build2 (gimple_stmt_iterator *, enum tree_code,
+			     tree, tree, tree);
+extern tree gimplify_build1 (gimple_stmt_iterator *, enum tree_code,
+			     tree, tree);
+extern void extract_true_false_edges_from_block (basic_block, edge *, edge *);
+extern tree find_case_label_for_value (const gswitch *switch_stmt, tree val);
+extern edge find_taken_edge_switch_expr (const gswitch *switch_stmt, tree val);
+extern unsigned int execute_fixup_cfg (void);
+extern unsigned int split_critical_edges (void);
+extern basic_block insert_cond_bb (basic_block, gimple *, gimple *,
+				   profile_probability);
+extern bool gimple_find_sub_bbs (gimple_seq, gimple_stmt_iterator *);
+extern bool extract_true_false_controlled_edges (basic_block, basic_block,
+						 edge *, edge *);
+extern void generate_range_test (basic_block bb, tree index, tree low,
+				 tree high, tree *lhs, tree *rhs);
+extern basic_block gimple_switch_label_bb (function *, gswitch *, unsigned);
+extern basic_block gimple_switch_default_bb (function *, gswitch *);
+extern edge gimple_switch_edge (function *, gswitch *, unsigned);
+extern edge gimple_switch_default_edge (function *, gswitch *);
+
+/* Return true if the LHS of a call should be removed.  */
+
+inline bool
+should_remove_lhs_p (tree lhs)
+{
+  return (lhs
+	  && TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (lhs))) == INTEGER_CST
+	  && !TREE_ADDRESSABLE (TREE_TYPE (lhs)));
+}
+
+#endif /* _TREE_CFG_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-cfgcleanup.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-cfgcleanup.h
new file mode 100644
index 0000000..d69b6f5
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-cfgcleanup.h
@@ -0,0 +1,30 @@
+/* Header file for CFG cleanup for trees.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_CFGCLEANUP_H
+#define GCC_TREE_CFGCLEANUP_H
+
+/* In tree-cfgcleanup.c  */
+extern bitmap cfgcleanup_altered_bbs;
+extern bool cleanup_tree_cfg (unsigned = 0);
+extern bool fixup_noreturn_call (gimple *stmt);
+extern bool delete_unreachable_blocks_update_callgraph (cgraph_node *dst_node,
+							bool update_clones);
+
+#endif /* GCC_TREE_CFGCLEANUP_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-check.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-check.h
new file mode 100644
index 0000000..9135ede
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-check.h
@@ -0,0 +1,359 @@
+/* This file is generated using gencheck. Do not edit. */
+
+#ifndef GCC_TREE_CHECK_H
+#define GCC_TREE_CHECK_H
+
+#define ERROR_MARK_CHECK(t)	TREE_CHECK (t, ERROR_MARK)
+#define IDENTIFIER_NODE_CHECK(t)	TREE_CHECK (t, IDENTIFIER_NODE)
+#define TREE_LIST_CHECK(t)	TREE_CHECK (t, TREE_LIST)
+#define TREE_VEC_CHECK(t)	TREE_CHECK (t, TREE_VEC)
+#define BLOCK_CHECK(t)	TREE_CHECK (t, BLOCK)
+#define OFFSET_TYPE_CHECK(t)	TREE_CHECK (t, OFFSET_TYPE)
+#define ENUMERAL_TYPE_CHECK(t)	TREE_CHECK (t, ENUMERAL_TYPE)
+#define BOOLEAN_TYPE_CHECK(t)	TREE_CHECK (t, BOOLEAN_TYPE)
+#define INTEGER_TYPE_CHECK(t)	TREE_CHECK (t, INTEGER_TYPE)
+#define REAL_TYPE_CHECK(t)	TREE_CHECK (t, REAL_TYPE)
+#define POINTER_TYPE_CHECK(t)	TREE_CHECK (t, POINTER_TYPE)
+#define REFERENCE_TYPE_CHECK(t)	TREE_CHECK (t, REFERENCE_TYPE)
+#define NULLPTR_TYPE_CHECK(t)	TREE_CHECK (t, NULLPTR_TYPE)
+#define FIXED_POINT_TYPE_CHECK(t)	TREE_CHECK (t, FIXED_POINT_TYPE)
+#define COMPLEX_TYPE_CHECK(t)	TREE_CHECK (t, COMPLEX_TYPE)
+#define VECTOR_TYPE_CHECK(t)	TREE_CHECK (t, VECTOR_TYPE)
+#define ARRAY_TYPE_CHECK(t)	TREE_CHECK (t, ARRAY_TYPE)
+#define RECORD_TYPE_CHECK(t)	TREE_CHECK (t, RECORD_TYPE)
+#define UNION_TYPE_CHECK(t)	TREE_CHECK (t, UNION_TYPE)
+#define QUAL_UNION_TYPE_CHECK(t)	TREE_CHECK (t, QUAL_UNION_TYPE)
+#define VOID_TYPE_CHECK(t)	TREE_CHECK (t, VOID_TYPE)
+#define FUNCTION_TYPE_CHECK(t)	TREE_CHECK (t, FUNCTION_TYPE)
+#define METHOD_TYPE_CHECK(t)	TREE_CHECK (t, METHOD_TYPE)
+#define LANG_TYPE_CHECK(t)	TREE_CHECK (t, LANG_TYPE)
+#define VOID_CST_CHECK(t)	TREE_CHECK (t, VOID_CST)
+#define INTEGER_CST_CHECK(t)	TREE_CHECK (t, INTEGER_CST)
+#define POLY_INT_CST_CHECK(t)	TREE_CHECK (t, POLY_INT_CST)
+#define REAL_CST_CHECK(t)	TREE_CHECK (t, REAL_CST)
+#define FIXED_CST_CHECK(t)	TREE_CHECK (t, FIXED_CST)
+#define COMPLEX_CST_CHECK(t)	TREE_CHECK (t, COMPLEX_CST)
+#define VECTOR_CST_CHECK(t)	TREE_CHECK (t, VECTOR_CST)
+#define STRING_CST_CHECK(t)	TREE_CHECK (t, STRING_CST)
+#define FUNCTION_DECL_CHECK(t)	TREE_CHECK (t, FUNCTION_DECL)
+#define LABEL_DECL_CHECK(t)	TREE_CHECK (t, LABEL_DECL)
+#define FIELD_DECL_CHECK(t)	TREE_CHECK (t, FIELD_DECL)
+#define VAR_DECL_CHECK(t)	TREE_CHECK (t, VAR_DECL)
+#define CONST_DECL_CHECK(t)	TREE_CHECK (t, CONST_DECL)
+#define PARM_DECL_CHECK(t)	TREE_CHECK (t, PARM_DECL)
+#define TYPE_DECL_CHECK(t)	TREE_CHECK (t, TYPE_DECL)
+#define RESULT_DECL_CHECK(t)	TREE_CHECK (t, RESULT_DECL)
+#define DEBUG_EXPR_DECL_CHECK(t)	TREE_CHECK (t, DEBUG_EXPR_DECL)
+#define DEBUG_BEGIN_STMT_CHECK(t)	TREE_CHECK (t, DEBUG_BEGIN_STMT)
+#define NAMESPACE_DECL_CHECK(t)	TREE_CHECK (t, NAMESPACE_DECL)
+#define IMPORTED_DECL_CHECK(t)	TREE_CHECK (t, IMPORTED_DECL)
+#define NAMELIST_DECL_CHECK(t)	TREE_CHECK (t, NAMELIST_DECL)
+#define TRANSLATION_UNIT_DECL_CHECK(t)	TREE_CHECK (t, TRANSLATION_UNIT_DECL)
+#define COMPONENT_REF_CHECK(t)	TREE_CHECK (t, COMPONENT_REF)
+#define BIT_FIELD_REF_CHECK(t)	TREE_CHECK (t, BIT_FIELD_REF)
+#define ARRAY_REF_CHECK(t)	TREE_CHECK (t, ARRAY_REF)
+#define ARRAY_RANGE_REF_CHECK(t)	TREE_CHECK (t, ARRAY_RANGE_REF)
+#define REALPART_EXPR_CHECK(t)	TREE_CHECK (t, REALPART_EXPR)
+#define IMAGPART_EXPR_CHECK(t)	TREE_CHECK (t, IMAGPART_EXPR)
+#define VIEW_CONVERT_EXPR_CHECK(t)	TREE_CHECK (t, VIEW_CONVERT_EXPR)
+#define INDIRECT_REF_CHECK(t)	TREE_CHECK (t, INDIRECT_REF)
+#define OBJ_TYPE_REF_CHECK(t)	TREE_CHECK (t, OBJ_TYPE_REF)
+#define CONSTRUCTOR_CHECK(t)	TREE_CHECK (t, CONSTRUCTOR)
+#define COMPOUND_EXPR_CHECK(t)	TREE_CHECK (t, COMPOUND_EXPR)
+#define MODIFY_EXPR_CHECK(t)	TREE_CHECK (t, MODIFY_EXPR)
+#define INIT_EXPR_CHECK(t)	TREE_CHECK (t, INIT_EXPR)
+#define TARGET_EXPR_CHECK(t)	TREE_CHECK (t, TARGET_EXPR)
+#define COND_EXPR_CHECK(t)	TREE_CHECK (t, COND_EXPR)
+#define VEC_DUPLICATE_EXPR_CHECK(t)	TREE_CHECK (t, VEC_DUPLICATE_EXPR)
+#define VEC_SERIES_EXPR_CHECK(t)	TREE_CHECK (t, VEC_SERIES_EXPR)
+#define VEC_COND_EXPR_CHECK(t)	TREE_CHECK (t, VEC_COND_EXPR)
+#define VEC_PERM_EXPR_CHECK(t)	TREE_CHECK (t, VEC_PERM_EXPR)
+#define BIND_EXPR_CHECK(t)	TREE_CHECK (t, BIND_EXPR)
+#define CALL_EXPR_CHECK(t)	TREE_CHECK (t, CALL_EXPR)
+#define WITH_CLEANUP_EXPR_CHECK(t)	TREE_CHECK (t, WITH_CLEANUP_EXPR)
+#define CLEANUP_POINT_EXPR_CHECK(t)	TREE_CHECK (t, CLEANUP_POINT_EXPR)
+#define PLACEHOLDER_EXPR_CHECK(t)	TREE_CHECK (t, PLACEHOLDER_EXPR)
+#define PLUS_EXPR_CHECK(t)	TREE_CHECK (t, PLUS_EXPR)
+#define MINUS_EXPR_CHECK(t)	TREE_CHECK (t, MINUS_EXPR)
+#define MULT_EXPR_CHECK(t)	TREE_CHECK (t, MULT_EXPR)
+#define POINTER_PLUS_EXPR_CHECK(t)	TREE_CHECK (t, POINTER_PLUS_EXPR)
+#define POINTER_DIFF_EXPR_CHECK(t)	TREE_CHECK (t, POINTER_DIFF_EXPR)
+#define MULT_HIGHPART_EXPR_CHECK(t)	TREE_CHECK (t, MULT_HIGHPART_EXPR)
+#define TRUNC_DIV_EXPR_CHECK(t)	TREE_CHECK (t, TRUNC_DIV_EXPR)
+#define CEIL_DIV_EXPR_CHECK(t)	TREE_CHECK (t, CEIL_DIV_EXPR)
+#define FLOOR_DIV_EXPR_CHECK(t)	TREE_CHECK (t, FLOOR_DIV_EXPR)
+#define ROUND_DIV_EXPR_CHECK(t)	TREE_CHECK (t, ROUND_DIV_EXPR)
+#define TRUNC_MOD_EXPR_CHECK(t)	TREE_CHECK (t, TRUNC_MOD_EXPR)
+#define CEIL_MOD_EXPR_CHECK(t)	TREE_CHECK (t, CEIL_MOD_EXPR)
+#define FLOOR_MOD_EXPR_CHECK(t)	TREE_CHECK (t, FLOOR_MOD_EXPR)
+#define ROUND_MOD_EXPR_CHECK(t)	TREE_CHECK (t, ROUND_MOD_EXPR)
+#define RDIV_EXPR_CHECK(t)	TREE_CHECK (t, RDIV_EXPR)
+#define EXACT_DIV_EXPR_CHECK(t)	TREE_CHECK (t, EXACT_DIV_EXPR)
+#define FIX_TRUNC_EXPR_CHECK(t)	TREE_CHECK (t, FIX_TRUNC_EXPR)
+#define FLOAT_EXPR_CHECK(t)	TREE_CHECK (t, FLOAT_EXPR)
+#define NEGATE_EXPR_CHECK(t)	TREE_CHECK (t, NEGATE_EXPR)
+#define MIN_EXPR_CHECK(t)	TREE_CHECK (t, MIN_EXPR)
+#define MAX_EXPR_CHECK(t)	TREE_CHECK (t, MAX_EXPR)
+#define ABS_EXPR_CHECK(t)	TREE_CHECK (t, ABS_EXPR)
+#define ABSU_EXPR_CHECK(t)	TREE_CHECK (t, ABSU_EXPR)
+#define LSHIFT_EXPR_CHECK(t)	TREE_CHECK (t, LSHIFT_EXPR)
+#define RSHIFT_EXPR_CHECK(t)	TREE_CHECK (t, RSHIFT_EXPR)
+#define LROTATE_EXPR_CHECK(t)	TREE_CHECK (t, LROTATE_EXPR)
+#define RROTATE_EXPR_CHECK(t)	TREE_CHECK (t, RROTATE_EXPR)
+#define BIT_IOR_EXPR_CHECK(t)	TREE_CHECK (t, BIT_IOR_EXPR)
+#define BIT_XOR_EXPR_CHECK(t)	TREE_CHECK (t, BIT_XOR_EXPR)
+#define BIT_AND_EXPR_CHECK(t)	TREE_CHECK (t, BIT_AND_EXPR)
+#define BIT_NOT_EXPR_CHECK(t)	TREE_CHECK (t, BIT_NOT_EXPR)
+#define TRUTH_ANDIF_EXPR_CHECK(t)	TREE_CHECK (t, TRUTH_ANDIF_EXPR)
+#define TRUTH_ORIF_EXPR_CHECK(t)	TREE_CHECK (t, TRUTH_ORIF_EXPR)
+#define TRUTH_AND_EXPR_CHECK(t)	TREE_CHECK (t, TRUTH_AND_EXPR)
+#define TRUTH_OR_EXPR_CHECK(t)	TREE_CHECK (t, TRUTH_OR_EXPR)
+#define TRUTH_XOR_EXPR_CHECK(t)	TREE_CHECK (t, TRUTH_XOR_EXPR)
+#define TRUTH_NOT_EXPR_CHECK(t)	TREE_CHECK (t, TRUTH_NOT_EXPR)
+#define LT_EXPR_CHECK(t)	TREE_CHECK (t, LT_EXPR)
+#define LE_EXPR_CHECK(t)	TREE_CHECK (t, LE_EXPR)
+#define GT_EXPR_CHECK(t)	TREE_CHECK (t, GT_EXPR)
+#define GE_EXPR_CHECK(t)	TREE_CHECK (t, GE_EXPR)
+#define EQ_EXPR_CHECK(t)	TREE_CHECK (t, EQ_EXPR)
+#define NE_EXPR_CHECK(t)	TREE_CHECK (t, NE_EXPR)
+#define UNORDERED_EXPR_CHECK(t)	TREE_CHECK (t, UNORDERED_EXPR)
+#define ORDERED_EXPR_CHECK(t)	TREE_CHECK (t, ORDERED_EXPR)
+#define UNLT_EXPR_CHECK(t)	TREE_CHECK (t, UNLT_EXPR)
+#define UNLE_EXPR_CHECK(t)	TREE_CHECK (t, UNLE_EXPR)
+#define UNGT_EXPR_CHECK(t)	TREE_CHECK (t, UNGT_EXPR)
+#define UNGE_EXPR_CHECK(t)	TREE_CHECK (t, UNGE_EXPR)
+#define UNEQ_EXPR_CHECK(t)	TREE_CHECK (t, UNEQ_EXPR)
+#define LTGT_EXPR_CHECK(t)	TREE_CHECK (t, LTGT_EXPR)
+#define RANGE_EXPR_CHECK(t)	TREE_CHECK (t, RANGE_EXPR)
+#define PAREN_EXPR_CHECK(t)	TREE_CHECK (t, PAREN_EXPR)
+#define CONVERT_EXPR_CHECK(t)	TREE_CHECK (t, CONVERT_EXPR)
+#define ADDR_SPACE_CONVERT_EXPR_CHECK(t)	TREE_CHECK (t, ADDR_SPACE_CONVERT_EXPR)
+#define FIXED_CONVERT_EXPR_CHECK(t)	TREE_CHECK (t, FIXED_CONVERT_EXPR)
+#define NOP_EXPR_CHECK(t)	TREE_CHECK (t, NOP_EXPR)
+#define NON_LVALUE_EXPR_CHECK(t)	TREE_CHECK (t, NON_LVALUE_EXPR)
+#define COMPOUND_LITERAL_EXPR_CHECK(t)	TREE_CHECK (t, COMPOUND_LITERAL_EXPR)
+#define SAVE_EXPR_CHECK(t)	TREE_CHECK (t, SAVE_EXPR)
+#define ADDR_EXPR_CHECK(t)	TREE_CHECK (t, ADDR_EXPR)
+#define FDESC_EXPR_CHECK(t)	TREE_CHECK (t, FDESC_EXPR)
+#define BIT_INSERT_EXPR_CHECK(t)	TREE_CHECK (t, BIT_INSERT_EXPR)
+#define COMPLEX_EXPR_CHECK(t)	TREE_CHECK (t, COMPLEX_EXPR)
+#define CONJ_EXPR_CHECK(t)	TREE_CHECK (t, CONJ_EXPR)
+#define PREDECREMENT_EXPR_CHECK(t)	TREE_CHECK (t, PREDECREMENT_EXPR)
+#define PREINCREMENT_EXPR_CHECK(t)	TREE_CHECK (t, PREINCREMENT_EXPR)
+#define POSTDECREMENT_EXPR_CHECK(t)	TREE_CHECK (t, POSTDECREMENT_EXPR)
+#define POSTINCREMENT_EXPR_CHECK(t)	TREE_CHECK (t, POSTINCREMENT_EXPR)
+#define VA_ARG_EXPR_CHECK(t)	TREE_CHECK (t, VA_ARG_EXPR)
+#define TRY_CATCH_EXPR_CHECK(t)	TREE_CHECK (t, TRY_CATCH_EXPR)
+#define TRY_FINALLY_EXPR_CHECK(t)	TREE_CHECK (t, TRY_FINALLY_EXPR)
+#define DECL_EXPR_CHECK(t)	TREE_CHECK (t, DECL_EXPR)
+#define LABEL_EXPR_CHECK(t)	TREE_CHECK (t, LABEL_EXPR)
+#define GOTO_EXPR_CHECK(t)	TREE_CHECK (t, GOTO_EXPR)
+#define RETURN_EXPR_CHECK(t)	TREE_CHECK (t, RETURN_EXPR)
+#define EXIT_EXPR_CHECK(t)	TREE_CHECK (t, EXIT_EXPR)
+#define LOOP_EXPR_CHECK(t)	TREE_CHECK (t, LOOP_EXPR)
+#define SWITCH_EXPR_CHECK(t)	TREE_CHECK (t, SWITCH_EXPR)
+#define CASE_LABEL_EXPR_CHECK(t)	TREE_CHECK (t, CASE_LABEL_EXPR)
+#define ASM_EXPR_CHECK(t)	TREE_CHECK (t, ASM_EXPR)
+#define SSA_NAME_CHECK(t)	TREE_CHECK (t, SSA_NAME)
+#define CATCH_EXPR_CHECK(t)	TREE_CHECK (t, CATCH_EXPR)
+#define EH_FILTER_EXPR_CHECK(t)	TREE_CHECK (t, EH_FILTER_EXPR)
+#define SCEV_KNOWN_CHECK(t)	TREE_CHECK (t, SCEV_KNOWN)
+#define SCEV_NOT_KNOWN_CHECK(t)	TREE_CHECK (t, SCEV_NOT_KNOWN)
+#define POLYNOMIAL_CHREC_CHECK(t)	TREE_CHECK (t, POLYNOMIAL_CHREC)
+#define STATEMENT_LIST_CHECK(t)	TREE_CHECK (t, STATEMENT_LIST)
+#define ASSERT_EXPR_CHECK(t)	TREE_CHECK (t, ASSERT_EXPR)
+#define TREE_BINFO_CHECK(t)	TREE_CHECK (t, TREE_BINFO)
+#define WITH_SIZE_EXPR_CHECK(t)	TREE_CHECK (t, WITH_SIZE_EXPR)
+#define REALIGN_LOAD_EXPR_CHECK(t)	TREE_CHECK (t, REALIGN_LOAD_EXPR)
+#define TARGET_MEM_REF_CHECK(t)	TREE_CHECK (t, TARGET_MEM_REF)
+#define MEM_REF_CHECK(t)	TREE_CHECK (t, MEM_REF)
+#define OACC_PARALLEL_CHECK(t)	TREE_CHECK (t, OACC_PARALLEL)
+#define OACC_KERNELS_CHECK(t)	TREE_CHECK (t, OACC_KERNELS)
+#define OACC_DATA_CHECK(t)	TREE_CHECK (t, OACC_DATA)
+#define OACC_HOST_DATA_CHECK(t)	TREE_CHECK (t, OACC_HOST_DATA)
+#define OMP_PARALLEL_CHECK(t)	TREE_CHECK (t, OMP_PARALLEL)
+#define OMP_TASK_CHECK(t)	TREE_CHECK (t, OMP_TASK)
+#define OMP_FOR_CHECK(t)	TREE_CHECK (t, OMP_FOR)
+#define OMP_SIMD_CHECK(t)	TREE_CHECK (t, OMP_SIMD)
+#define OMP_DISTRIBUTE_CHECK(t)	TREE_CHECK (t, OMP_DISTRIBUTE)
+#define OMP_TASKLOOP_CHECK(t)	TREE_CHECK (t, OMP_TASKLOOP)
+#define OACC_LOOP_CHECK(t)	TREE_CHECK (t, OACC_LOOP)
+#define OMP_TEAMS_CHECK(t)	TREE_CHECK (t, OMP_TEAMS)
+#define OMP_TARGET_DATA_CHECK(t)	TREE_CHECK (t, OMP_TARGET_DATA)
+#define OMP_TARGET_CHECK(t)	TREE_CHECK (t, OMP_TARGET)
+#define OMP_SECTIONS_CHECK(t)	TREE_CHECK (t, OMP_SECTIONS)
+#define OMP_ORDERED_CHECK(t)	TREE_CHECK (t, OMP_ORDERED)
+#define OMP_CRITICAL_CHECK(t)	TREE_CHECK (t, OMP_CRITICAL)
+#define OMP_SINGLE_CHECK(t)	TREE_CHECK (t, OMP_SINGLE)
+#define OMP_TASKGROUP_CHECK(t)	TREE_CHECK (t, OMP_TASKGROUP)
+#define OMP_SECTION_CHECK(t)	TREE_CHECK (t, OMP_SECTION)
+#define OMP_MASTER_CHECK(t)	TREE_CHECK (t, OMP_MASTER)
+#define OACC_CACHE_CHECK(t)	TREE_CHECK (t, OACC_CACHE)
+#define OACC_DECLARE_CHECK(t)	TREE_CHECK (t, OACC_DECLARE)
+#define OACC_ENTER_DATA_CHECK(t)	TREE_CHECK (t, OACC_ENTER_DATA)
+#define OACC_EXIT_DATA_CHECK(t)	TREE_CHECK (t, OACC_EXIT_DATA)
+#define OACC_UPDATE_CHECK(t)	TREE_CHECK (t, OACC_UPDATE)
+#define OMP_TARGET_UPDATE_CHECK(t)	TREE_CHECK (t, OMP_TARGET_UPDATE)
+#define OMP_TARGET_ENTER_DATA_CHECK(t)	TREE_CHECK (t, OMP_TARGET_ENTER_DATA)
+#define OMP_TARGET_EXIT_DATA_CHECK(t)	TREE_CHECK (t, OMP_TARGET_EXIT_DATA)
+#define OMP_ATOMIC_CHECK(t)	TREE_CHECK (t, OMP_ATOMIC)
+#define OMP_ATOMIC_READ_CHECK(t)	TREE_CHECK (t, OMP_ATOMIC_READ)
+#define OMP_ATOMIC_CAPTURE_OLD_CHECK(t)	TREE_CHECK (t, OMP_ATOMIC_CAPTURE_OLD)
+#define OMP_ATOMIC_CAPTURE_NEW_CHECK(t)	TREE_CHECK (t, OMP_ATOMIC_CAPTURE_NEW)
+#define OMP_CLAUSE_CHECK(t)	TREE_CHECK (t, OMP_CLAUSE)
+#define TRANSACTION_EXPR_CHECK(t)	TREE_CHECK (t, TRANSACTION_EXPR)
+#define DOT_PROD_EXPR_CHECK(t)	TREE_CHECK (t, DOT_PROD_EXPR)
+#define WIDEN_SUM_EXPR_CHECK(t)	TREE_CHECK (t, WIDEN_SUM_EXPR)
+#define SAD_EXPR_CHECK(t)	TREE_CHECK (t, SAD_EXPR)
+#define WIDEN_MULT_EXPR_CHECK(t)	TREE_CHECK (t, WIDEN_MULT_EXPR)
+#define WIDEN_MULT_PLUS_EXPR_CHECK(t)	TREE_CHECK (t, WIDEN_MULT_PLUS_EXPR)
+#define WIDEN_MULT_MINUS_EXPR_CHECK(t)	TREE_CHECK (t, WIDEN_MULT_MINUS_EXPR)
+#define WIDEN_LSHIFT_EXPR_CHECK(t)	TREE_CHECK (t, WIDEN_LSHIFT_EXPR)
+#define VEC_WIDEN_MULT_HI_EXPR_CHECK(t)	TREE_CHECK (t, VEC_WIDEN_MULT_HI_EXPR)
+#define VEC_WIDEN_MULT_LO_EXPR_CHECK(t)	TREE_CHECK (t, VEC_WIDEN_MULT_LO_EXPR)
+#define VEC_WIDEN_MULT_EVEN_EXPR_CHECK(t)	TREE_CHECK (t, VEC_WIDEN_MULT_EVEN_EXPR)
+#define VEC_WIDEN_MULT_ODD_EXPR_CHECK(t)	TREE_CHECK (t, VEC_WIDEN_MULT_ODD_EXPR)
+#define VEC_UNPACK_HI_EXPR_CHECK(t)	TREE_CHECK (t, VEC_UNPACK_HI_EXPR)
+#define VEC_UNPACK_LO_EXPR_CHECK(t)	TREE_CHECK (t, VEC_UNPACK_LO_EXPR)
+#define VEC_UNPACK_FLOAT_HI_EXPR_CHECK(t)	TREE_CHECK (t, VEC_UNPACK_FLOAT_HI_EXPR)
+#define VEC_UNPACK_FLOAT_LO_EXPR_CHECK(t)	TREE_CHECK (t, VEC_UNPACK_FLOAT_LO_EXPR)
+#define VEC_UNPACK_FIX_TRUNC_HI_EXPR_CHECK(t)	TREE_CHECK (t, VEC_UNPACK_FIX_TRUNC_HI_EXPR)
+#define VEC_UNPACK_FIX_TRUNC_LO_EXPR_CHECK(t)	TREE_CHECK (t, VEC_UNPACK_FIX_TRUNC_LO_EXPR)
+#define VEC_PACK_TRUNC_EXPR_CHECK(t)	TREE_CHECK (t, VEC_PACK_TRUNC_EXPR)
+#define VEC_PACK_SAT_EXPR_CHECK(t)	TREE_CHECK (t, VEC_PACK_SAT_EXPR)
+#define VEC_PACK_FIX_TRUNC_EXPR_CHECK(t)	TREE_CHECK (t, VEC_PACK_FIX_TRUNC_EXPR)
+#define VEC_PACK_FLOAT_EXPR_CHECK(t)	TREE_CHECK (t, VEC_PACK_FLOAT_EXPR)
+#define VEC_WIDEN_LSHIFT_HI_EXPR_CHECK(t)	TREE_CHECK (t, VEC_WIDEN_LSHIFT_HI_EXPR)
+#define VEC_WIDEN_LSHIFT_LO_EXPR_CHECK(t)	TREE_CHECK (t, VEC_WIDEN_LSHIFT_LO_EXPR)
+#define PREDICT_EXPR_CHECK(t)	TREE_CHECK (t, PREDICT_EXPR)
+#define OPTIMIZATION_NODE_CHECK(t)	TREE_CHECK (t, OPTIMIZATION_NODE)
+#define TARGET_OPTION_NODE_CHECK(t)	TREE_CHECK (t, TARGET_OPTION_NODE)
+#define ANNOTATE_EXPR_CHECK(t)	TREE_CHECK (t, ANNOTATE_EXPR)
+#define C_MAYBE_CONST_EXPR_CHECK(t)	TREE_CHECK (t, C_MAYBE_CONST_EXPR)
+#define EXCESS_PRECISION_EXPR_CHECK(t)	TREE_CHECK (t, EXCESS_PRECISION_EXPR)
+#define USERDEF_LITERAL_CHECK(t)	TREE_CHECK (t, USERDEF_LITERAL)
+#define SIZEOF_EXPR_CHECK(t)	TREE_CHECK (t, SIZEOF_EXPR)
+#define UNCONSTRAINED_ARRAY_TYPE_CHECK(t)	TREE_CHECK (t, UNCONSTRAINED_ARRAY_TYPE)
+#define UNCONSTRAINED_ARRAY_REF_CHECK(t)	TREE_CHECK (t, UNCONSTRAINED_ARRAY_REF)
+#define NULL_EXPR_CHECK(t)	TREE_CHECK (t, NULL_EXPR)
+#define PLUS_NOMOD_EXPR_CHECK(t)	TREE_CHECK (t, PLUS_NOMOD_EXPR)
+#define MINUS_NOMOD_EXPR_CHECK(t)	TREE_CHECK (t, MINUS_NOMOD_EXPR)
+#define POWER_EXPR_CHECK(t)	TREE_CHECK (t, POWER_EXPR)
+#define ATTR_ADDR_EXPR_CHECK(t)	TREE_CHECK (t, ATTR_ADDR_EXPR)
+#define STMT_STMT_CHECK(t)	TREE_CHECK (t, STMT_STMT)
+#define LOOP_STMT_CHECK(t)	TREE_CHECK (t, LOOP_STMT)
+#define EXIT_STMT_CHECK(t)	TREE_CHECK (t, EXIT_STMT)
+#define OFFSET_REF_CHECK(t)	TREE_CHECK (t, OFFSET_REF)
+#define PTRMEM_CST_CHECK(t)	TREE_CHECK (t, PTRMEM_CST)
+#define NEW_EXPR_CHECK(t)	TREE_CHECK (t, NEW_EXPR)
+#define VEC_NEW_EXPR_CHECK(t)	TREE_CHECK (t, VEC_NEW_EXPR)
+#define DELETE_EXPR_CHECK(t)	TREE_CHECK (t, DELETE_EXPR)
+#define VEC_DELETE_EXPR_CHECK(t)	TREE_CHECK (t, VEC_DELETE_EXPR)
+#define SCOPE_REF_CHECK(t)	TREE_CHECK (t, SCOPE_REF)
+#define MEMBER_REF_CHECK(t)	TREE_CHECK (t, MEMBER_REF)
+#define TYPE_EXPR_CHECK(t)	TREE_CHECK (t, TYPE_EXPR)
+#define AGGR_INIT_EXPR_CHECK(t)	TREE_CHECK (t, AGGR_INIT_EXPR)
+#define VEC_INIT_EXPR_CHECK(t)	TREE_CHECK (t, VEC_INIT_EXPR)
+#define THROW_EXPR_CHECK(t)	TREE_CHECK (t, THROW_EXPR)
+#define EMPTY_CLASS_EXPR_CHECK(t)	TREE_CHECK (t, EMPTY_CLASS_EXPR)
+#define BASELINK_CHECK(t)	TREE_CHECK (t, BASELINK)
+#define TEMPLATE_DECL_CHECK(t)	TREE_CHECK (t, TEMPLATE_DECL)
+#define TEMPLATE_PARM_INDEX_CHECK(t)	TREE_CHECK (t, TEMPLATE_PARM_INDEX)
+#define TEMPLATE_TEMPLATE_PARM_CHECK(t)	TREE_CHECK (t, TEMPLATE_TEMPLATE_PARM)
+#define TEMPLATE_TYPE_PARM_CHECK(t)	TREE_CHECK (t, TEMPLATE_TYPE_PARM)
+#define TYPENAME_TYPE_CHECK(t)	TREE_CHECK (t, TYPENAME_TYPE)
+#define TYPEOF_TYPE_CHECK(t)	TREE_CHECK (t, TYPEOF_TYPE)
+#define BOUND_TEMPLATE_TEMPLATE_PARM_CHECK(t)	TREE_CHECK (t, BOUND_TEMPLATE_TEMPLATE_PARM)
+#define UNBOUND_CLASS_TEMPLATE_CHECK(t)	TREE_CHECK (t, UNBOUND_CLASS_TEMPLATE)
+#define USING_DECL_CHECK(t)	TREE_CHECK (t, USING_DECL)
+#define USING_STMT_CHECK(t)	TREE_CHECK (t, USING_STMT)
+#define DEFAULT_ARG_CHECK(t)	TREE_CHECK (t, DEFAULT_ARG)
+#define DEFERRED_NOEXCEPT_CHECK(t)	TREE_CHECK (t, DEFERRED_NOEXCEPT)
+#define TEMPLATE_ID_EXPR_CHECK(t)	TREE_CHECK (t, TEMPLATE_ID_EXPR)
+#define OVERLOAD_CHECK(t)	TREE_CHECK (t, OVERLOAD)
+#define PSEUDO_DTOR_EXPR_CHECK(t)	TREE_CHECK (t, PSEUDO_DTOR_EXPR)
+#define MODOP_EXPR_CHECK(t)	TREE_CHECK (t, MODOP_EXPR)
+#define CAST_EXPR_CHECK(t)	TREE_CHECK (t, CAST_EXPR)
+#define REINTERPRET_CAST_EXPR_CHECK(t)	TREE_CHECK (t, REINTERPRET_CAST_EXPR)
+#define CONST_CAST_EXPR_CHECK(t)	TREE_CHECK (t, CONST_CAST_EXPR)
+#define STATIC_CAST_EXPR_CHECK(t)	TREE_CHECK (t, STATIC_CAST_EXPR)
+#define DYNAMIC_CAST_EXPR_CHECK(t)	TREE_CHECK (t, DYNAMIC_CAST_EXPR)
+#define IMPLICIT_CONV_EXPR_CHECK(t)	TREE_CHECK (t, IMPLICIT_CONV_EXPR)
+#define DOTSTAR_EXPR_CHECK(t)	TREE_CHECK (t, DOTSTAR_EXPR)
+#define TYPEID_EXPR_CHECK(t)	TREE_CHECK (t, TYPEID_EXPR)
+#define NOEXCEPT_EXPR_CHECK(t)	TREE_CHECK (t, NOEXCEPT_EXPR)
+#define NON_DEPENDENT_EXPR_CHECK(t)	TREE_CHECK (t, NON_DEPENDENT_EXPR)
+#define CTOR_INITIALIZER_CHECK(t)	TREE_CHECK (t, CTOR_INITIALIZER)
+#define TRY_BLOCK_CHECK(t)	TREE_CHECK (t, TRY_BLOCK)
+#define EH_SPEC_BLOCK_CHECK(t)	TREE_CHECK (t, EH_SPEC_BLOCK)
+#define HANDLER_CHECK(t)	TREE_CHECK (t, HANDLER)
+#define MUST_NOT_THROW_EXPR_CHECK(t)	TREE_CHECK (t, MUST_NOT_THROW_EXPR)
+#define CLEANUP_STMT_CHECK(t)	TREE_CHECK (t, CLEANUP_STMT)
+#define IF_STMT_CHECK(t)	TREE_CHECK (t, IF_STMT)
+#define FOR_STMT_CHECK(t)	TREE_CHECK (t, FOR_STMT)
+#define RANGE_FOR_STMT_CHECK(t)	TREE_CHECK (t, RANGE_FOR_STMT)
+#define WHILE_STMT_CHECK(t)	TREE_CHECK (t, WHILE_STMT)
+#define DO_STMT_CHECK(t)	TREE_CHECK (t, DO_STMT)
+#define BREAK_STMT_CHECK(t)	TREE_CHECK (t, BREAK_STMT)
+#define CONTINUE_STMT_CHECK(t)	TREE_CHECK (t, CONTINUE_STMT)
+#define SWITCH_STMT_CHECK(t)	TREE_CHECK (t, SWITCH_STMT)
+#define EXPR_STMT_CHECK(t)	TREE_CHECK (t, EXPR_STMT)
+#define TAG_DEFN_CHECK(t)	TREE_CHECK (t, TAG_DEFN)
+#define OFFSETOF_EXPR_CHECK(t)	TREE_CHECK (t, OFFSETOF_EXPR)
+#define ADDRESSOF_EXPR_CHECK(t)	TREE_CHECK (t, ADDRESSOF_EXPR)
+#define ARROW_EXPR_CHECK(t)	TREE_CHECK (t, ARROW_EXPR)
+#define ALIGNOF_EXPR_CHECK(t)	TREE_CHECK (t, ALIGNOF_EXPR)
+#define AT_ENCODE_EXPR_CHECK(t)	TREE_CHECK (t, AT_ENCODE_EXPR)
+#define STMT_EXPR_CHECK(t)	TREE_CHECK (t, STMT_EXPR)
+#define UNARY_PLUS_EXPR_CHECK(t)	TREE_CHECK (t, UNARY_PLUS_EXPR)
+#define STATIC_ASSERT_CHECK(t)	TREE_CHECK (t, STATIC_ASSERT)
+#define TYPE_ARGUMENT_PACK_CHECK(t)	TREE_CHECK (t, TYPE_ARGUMENT_PACK)
+#define NONTYPE_ARGUMENT_PACK_CHECK(t)	TREE_CHECK (t, NONTYPE_ARGUMENT_PACK)
+#define TYPE_PACK_EXPANSION_CHECK(t)	TREE_CHECK (t, TYPE_PACK_EXPANSION)
+#define EXPR_PACK_EXPANSION_CHECK(t)	TREE_CHECK (t, EXPR_PACK_EXPANSION)
+#define ARGUMENT_PACK_SELECT_CHECK(t)	TREE_CHECK (t, ARGUMENT_PACK_SELECT)
+#define UNARY_LEFT_FOLD_EXPR_CHECK(t)	TREE_CHECK (t, UNARY_LEFT_FOLD_EXPR)
+#define UNARY_RIGHT_FOLD_EXPR_CHECK(t)	TREE_CHECK (t, UNARY_RIGHT_FOLD_EXPR)
+#define BINARY_LEFT_FOLD_EXPR_CHECK(t)	TREE_CHECK (t, BINARY_LEFT_FOLD_EXPR)
+#define BINARY_RIGHT_FOLD_EXPR_CHECK(t)	TREE_CHECK (t, BINARY_RIGHT_FOLD_EXPR)
+#define TRAIT_EXPR_CHECK(t)	TREE_CHECK (t, TRAIT_EXPR)
+#define LAMBDA_EXPR_CHECK(t)	TREE_CHECK (t, LAMBDA_EXPR)
+#define DECLTYPE_TYPE_CHECK(t)	TREE_CHECK (t, DECLTYPE_TYPE)
+#define UNDERLYING_TYPE_CHECK(t)	TREE_CHECK (t, UNDERLYING_TYPE)
+#define BASES_CHECK(t)	TREE_CHECK (t, BASES)
+#define TEMPLATE_INFO_CHECK(t)	TREE_CHECK (t, TEMPLATE_INFO)
+#define OMP_DEPOBJ_CHECK(t)	TREE_CHECK (t, OMP_DEPOBJ)
+#define CONSTRAINT_INFO_CHECK(t)	TREE_CHECK (t, CONSTRAINT_INFO)
+#define WILDCARD_DECL_CHECK(t)	TREE_CHECK (t, WILDCARD_DECL)
+#define REQUIRES_EXPR_CHECK(t)	TREE_CHECK (t, REQUIRES_EXPR)
+#define SIMPLE_REQ_CHECK(t)	TREE_CHECK (t, SIMPLE_REQ)
+#define TYPE_REQ_CHECK(t)	TREE_CHECK (t, TYPE_REQ)
+#define COMPOUND_REQ_CHECK(t)	TREE_CHECK (t, COMPOUND_REQ)
+#define NESTED_REQ_CHECK(t)	TREE_CHECK (t, NESTED_REQ)
+#define PRED_CONSTR_CHECK(t)	TREE_CHECK (t, PRED_CONSTR)
+#define CHECK_CONSTR_CHECK(t)	TREE_CHECK (t, CHECK_CONSTR)
+#define EXPR_CONSTR_CHECK(t)	TREE_CHECK (t, EXPR_CONSTR)
+#define TYPE_CONSTR_CHECK(t)	TREE_CHECK (t, TYPE_CONSTR)
+#define ICONV_CONSTR_CHECK(t)	TREE_CHECK (t, ICONV_CONSTR)
+#define DEDUCT_CONSTR_CHECK(t)	TREE_CHECK (t, DEDUCT_CONSTR)
+#define EXCEPT_CONSTR_CHECK(t)	TREE_CHECK (t, EXCEPT_CONSTR)
+#define PARM_CONSTR_CHECK(t)	TREE_CHECK (t, PARM_CONSTR)
+#define CONJ_CONSTR_CHECK(t)	TREE_CHECK (t, CONJ_CONSTR)
+#define DISJ_CONSTR_CHECK(t)	TREE_CHECK (t, DISJ_CONSTR)
+#define UNSIGNED_RSHIFT_EXPR_CHECK(t)	TREE_CHECK (t, UNSIGNED_RSHIFT_EXPR)
+#define FLOAT_MOD_EXPR_CHECK(t)	TREE_CHECK (t, FLOAT_MOD_EXPR)
+#define FUNCFRAME_INFO_CHECK(t)	TREE_CHECK (t, FUNCFRAME_INFO)
+#define CLASS_INTERFACE_TYPE_CHECK(t)	TREE_CHECK (t, CLASS_INTERFACE_TYPE)
+#define CLASS_IMPLEMENTATION_TYPE_CHECK(t)	TREE_CHECK (t, CLASS_IMPLEMENTATION_TYPE)
+#define CATEGORY_INTERFACE_TYPE_CHECK(t)	TREE_CHECK (t, CATEGORY_INTERFACE_TYPE)
+#define CATEGORY_IMPLEMENTATION_TYPE_CHECK(t)	TREE_CHECK (t, CATEGORY_IMPLEMENTATION_TYPE)
+#define PROTOCOL_INTERFACE_TYPE_CHECK(t)	TREE_CHECK (t, PROTOCOL_INTERFACE_TYPE)
+#define KEYWORD_DECL_CHECK(t)	TREE_CHECK (t, KEYWORD_DECL)
+#define INSTANCE_METHOD_DECL_CHECK(t)	TREE_CHECK (t, INSTANCE_METHOD_DECL)
+#define CLASS_METHOD_DECL_CHECK(t)	TREE_CHECK (t, CLASS_METHOD_DECL)
+#define PROPERTY_DECL_CHECK(t)	TREE_CHECK (t, PROPERTY_DECL)
+#define MESSAGE_SEND_EXPR_CHECK(t)	TREE_CHECK (t, MESSAGE_SEND_EXPR)
+#define CLASS_REFERENCE_EXPR_CHECK(t)	TREE_CHECK (t, CLASS_REFERENCE_EXPR)
+#define PROPERTY_REF_CHECK(t)	TREE_CHECK (t, PROPERTY_REF)
+
+#endif /* GCC_TREE_CHECK_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-chrec.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-chrec.h
new file mode 100644
index 0000000..dbbc1b1
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-chrec.h
@@ -0,0 +1,250 @@
+/* Chains of recurrences.
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Contributed by Sebastian Pop <pop@cri.ensmp.fr>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_CHREC_H
+#define GCC_TREE_CHREC_H
+
+/* The following trees are unique elements.  Thus the comparison of another
+   element to these elements should be done on the pointer to these trees,
+   and not on their value.  */
+
+extern tree chrec_not_analyzed_yet;
+extern GTY(()) tree chrec_dont_know;
+extern GTY(()) tree chrec_known;
+
+/* After having added an automatically generated element, please
+   include it in the following function.  */
+
+static inline bool
+automatically_generated_chrec_p (const_tree chrec)
+{
+  return (chrec == chrec_dont_know
+	  || chrec == chrec_known);
+}
+
+/* The tree nodes aka. CHRECs.  */
+
+static inline bool
+tree_is_chrec (const_tree expr)
+{
+  if (TREE_CODE (expr) == POLYNOMIAL_CHREC
+      || automatically_generated_chrec_p (expr))
+    return true;
+  else
+    return false;
+}
+
+
+enum ev_direction {EV_DIR_GROWS, EV_DIR_DECREASES, EV_DIR_UNKNOWN};
+enum ev_direction scev_direction (const_tree);
+
+/* Chrec folding functions.  */
+extern tree chrec_fold_plus (tree, tree, tree);
+extern tree chrec_fold_minus (tree, tree, tree);
+extern tree chrec_fold_multiply (tree, tree, tree);
+extern tree chrec_convert (tree, tree, gimple *, bool = true, tree = NULL);
+extern tree chrec_convert_rhs (tree, tree, gimple *);
+extern tree chrec_convert_aggressive (tree, tree, bool *);
+
+/* Operations.  */
+extern tree chrec_apply (unsigned, tree, tree);
+extern tree chrec_apply_map (tree, vec<tree> );
+extern tree chrec_replace_initial_condition (tree, tree);
+extern tree initial_condition (tree);
+extern tree initial_condition_in_loop_num (tree, unsigned);
+extern tree evolution_part_in_loop_num (tree, unsigned);
+extern tree hide_evolution_in_other_loops_than_loop (tree, unsigned);
+extern tree reset_evolution_in_loop (unsigned, tree, tree);
+extern tree chrec_merge (tree, tree);
+extern void for_each_scev_op (tree *, bool (*) (tree *, void *), void *);
+extern bool convert_affine_scev (struct loop *, tree, tree *, tree *, gimple *,
+				 bool, tree = NULL);
+
+/* Observers.  */
+extern bool eq_evolutions_p (const_tree, const_tree);
+extern bool is_multivariate_chrec (const_tree);
+extern bool chrec_contains_symbols (const_tree, struct loop * = NULL);
+extern bool chrec_contains_symbols_defined_in_loop (const_tree, unsigned);
+extern bool chrec_contains_undetermined (const_tree);
+extern bool tree_contains_chrecs (const_tree, int *);
+extern bool evolution_function_is_affine_multivariate_p (const_tree, int);
+extern bool evolution_function_is_univariate_p (const_tree, int = 0);
+extern unsigned nb_vars_in_chrec (tree);
+extern bool evolution_function_is_invariant_p (tree, int);
+extern bool scev_is_linear_expression (tree);
+extern bool evolution_function_right_is_integer_cst (const_tree);
+
+/* Determines whether CHREC is equal to zero.  */
+
+static inline bool
+chrec_zerop (const_tree chrec)
+{
+  if (chrec == NULL_TREE)
+    return false;
+
+  if (TREE_CODE (chrec) == INTEGER_CST)
+    return integer_zerop (chrec);
+
+  return false;
+}
+
+/* Determines whether CHREC is a loop invariant with respect to LOOP_NUM.
+   Set the result in RES and return true when the property can be computed.  */
+
+static inline bool
+no_evolution_in_loop_p (tree chrec, unsigned loop_num, bool *res)
+{
+  tree scev;
+
+  if (chrec == chrec_not_analyzed_yet
+      || chrec == chrec_dont_know
+      || chrec_contains_symbols_defined_in_loop (chrec, loop_num))
+    return false;
+
+  STRIP_NOPS (chrec);
+  scev = hide_evolution_in_other_loops_than_loop (chrec, loop_num);
+  *res = !tree_contains_chrecs (scev, NULL);
+  return true;
+}
+
+/* Build a polynomial chain of recurrence.  */
+
+static inline tree
+build_polynomial_chrec (unsigned loop_num,
+			tree left,
+			tree right)
+{
+  bool val;
+
+  if (left == chrec_dont_know
+      || right == chrec_dont_know)
+    return chrec_dont_know;
+
+  if (!no_evolution_in_loop_p (left, loop_num, &val)
+      || !val)
+    return chrec_dont_know;
+
+  /* Types of left and right sides of a chrec should be compatible, but
+     pointer CHRECs are special in that the evolution is of ptroff type.  */
+  if (POINTER_TYPE_P (TREE_TYPE (left)))
+    gcc_checking_assert (ptrofftype_p (TREE_TYPE (right)));
+  else
+    {
+      /* Pointer types should occur only on the left hand side, i.e. in
+	 the base of the chrec, and not in the step.  */
+      gcc_checking_assert (!POINTER_TYPE_P (TREE_TYPE (right))
+			   && types_compatible_p (TREE_TYPE (left),
+						  TREE_TYPE (right)));
+    }
+
+  if (chrec_zerop (right))
+    return left;
+
+  tree chrec = build2 (POLYNOMIAL_CHREC, TREE_TYPE (left), left, right);
+  CHREC_VARIABLE (chrec) = loop_num;
+  return chrec;
+}
+
+/* Determines whether the expression CHREC is a constant.  */
+
+static inline bool
+evolution_function_is_constant_p (const_tree chrec)
+{
+  if (chrec == NULL_TREE)
+    return false;
+
+  return is_gimple_min_invariant (chrec);
+}
+
+/* Determine whether CHREC is an affine evolution function in LOOPNUM.  */
+
+static inline bool
+evolution_function_is_affine_in_loop (const_tree chrec, int loopnum)
+{
+  if (chrec == NULL_TREE)
+    return false;
+
+  switch (TREE_CODE (chrec))
+    {
+    case POLYNOMIAL_CHREC:
+      if (evolution_function_is_invariant_p (CHREC_LEFT (chrec), loopnum)
+	  && evolution_function_is_invariant_p (CHREC_RIGHT (chrec), loopnum))
+	return true;
+      else
+	return false;
+
+    default:
+      return false;
+    }
+}
+
+/* Determine whether CHREC is an affine evolution function or not.  */
+
+static inline bool
+evolution_function_is_affine_p (const_tree chrec)
+{
+  return chrec
+    && TREE_CODE (chrec) == POLYNOMIAL_CHREC
+    && evolution_function_is_invariant_p (CHREC_RIGHT (chrec),
+					  CHREC_VARIABLE (chrec))
+    && (TREE_CODE (CHREC_RIGHT (chrec)) != POLYNOMIAL_CHREC
+	|| evolution_function_is_affine_p (CHREC_RIGHT (chrec)));
+}
+
+/* Determines whether EXPR does not contains chrec expressions.  */
+
+static inline bool
+tree_does_not_contain_chrecs (const_tree expr)
+{
+  return !tree_contains_chrecs (expr, NULL);
+}
+
+/* Returns the type of the chrec.  */
+
+static inline tree
+chrec_type (const_tree chrec)
+{
+  if (automatically_generated_chrec_p (chrec))
+    return NULL_TREE;
+
+  return TREE_TYPE (chrec);
+}
+
+static inline tree
+chrec_fold_op (enum tree_code code, tree type, tree op0, tree op1)
+{
+  switch (code)
+    {
+    case PLUS_EXPR:
+      return chrec_fold_plus (type, op0, op1);
+
+    case MINUS_EXPR:
+      return chrec_fold_minus (type, op0, op1);
+
+    case MULT_EXPR:
+      return chrec_fold_multiply (type, op0, op1);
+
+    default:
+      gcc_unreachable ();
+    }
+
+}
+
+#endif  /* GCC_TREE_CHREC_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-core.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-core.h
new file mode 100644
index 0000000..552196b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-core.h
@@ -0,0 +1,2191 @@
+/* Core data structures for the 'tree' type.
+   Copyright (C) 1989-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_CORE_H
+#define GCC_TREE_CORE_H
+
+#include "symtab.h"
+
+/* This file contains all the data structures that define the 'tree' type.
+   There are no accessor macros nor functions in this file. Only the
+   basic data structures, extern declarations and type definitions.  */
+
+/*---------------------------------------------------------------------------
+   Forward type declarations.  Mostly to avoid including unnecessary headers
+---------------------------------------------------------------------------*/
+struct function;
+struct real_value;
+struct fixed_value;
+struct ptr_info_def;
+struct range_info_def;
+struct die_struct;
+
+
+/*---------------------------------------------------------------------------
+                              #defined constants
+---------------------------------------------------------------------------*/
+/* Nonzero if this is a call to a function whose return value depends
+   solely on its arguments, has no side effects, and does not read
+   global memory.  This corresponds to TREE_READONLY for function
+   decls.  */
+#define ECF_CONST		  (1 << 0)
+
+/* Nonzero if this is a call to "pure" function (like const function,
+   but may read memory.  This corresponds to DECL_PURE_P for function
+   decls.  */
+#define ECF_PURE		  (1 << 1)
+
+/* Nonzero if this is ECF_CONST or ECF_PURE but cannot be proven to no
+   infinite loop.  This corresponds to DECL_LOOPING_CONST_OR_PURE_P
+   for function decls.*/
+#define ECF_LOOPING_CONST_OR_PURE (1 << 2)
+
+/* Nonzero if this call will never return.  */
+#define ECF_NORETURN		  (1 << 3)
+
+/* Nonzero if this is a call to malloc or a related function.  */
+#define ECF_MALLOC		  (1 << 4)
+
+/* Nonzero if it is plausible that this is a call to alloca.  */
+#define ECF_MAY_BE_ALLOCA	  (1 << 5)
+
+/* Nonzero if this is a call to a function that won't throw an exception.  */
+#define ECF_NOTHROW		  (1 << 6)
+
+/* Nonzero if this is a call to setjmp or a related function.  */
+#define ECF_RETURNS_TWICE	  (1 << 7)
+
+/* Nonzero if this call replaces the current stack frame.  */
+#define ECF_SIBCALL		  (1 << 8)
+
+/* Function does not read or write memory (but may have side effects, so
+   it does not necessarily fit ECF_CONST).  */
+#define ECF_NOVOPS		  (1 << 9)
+
+/* The function does not lead to calls within current function unit.  */
+#define ECF_LEAF		  (1 << 10)
+
+/* Nonzero if this call returns its first argument.  */
+#define ECF_RET1		  (1 << 11)
+
+/* Nonzero if this call does not affect transactions.  */
+#define ECF_TM_PURE		  (1 << 12)
+
+/* Nonzero if this call is into the transaction runtime library.  */
+#define ECF_TM_BUILTIN		  (1 << 13)
+
+/* Nonzero if this is an indirect call by descriptor.  */
+#define ECF_BY_DESCRIPTOR	  (1 << 14)
+
+/* Nonzero if this is a cold function.  */
+#define ECF_COLD		  (1 << 15)
+
+/* Call argument flags.  */
+/* Nonzero if the argument is not dereferenced recursively, thus only
+   directly reachable memory is read or written.  */
+#define EAF_DIRECT		(1 << 0)
+
+/* Nonzero if memory reached by the argument is not clobbered.  */
+#define EAF_NOCLOBBER		(1 << 1)
+
+/* Nonzero if the argument does not escape.  */
+#define EAF_NOESCAPE		(1 << 2)
+
+/* Nonzero if the argument is not used by the function.  */
+#define EAF_UNUSED		(1 << 3)
+
+/* Call return flags.  */
+/* Mask for the argument number that is returned.  Lower two bits of
+   the return flags, encodes argument slots zero to three.  */
+#define ERF_RETURN_ARG_MASK	(3)
+
+/* Nonzero if the return value is equal to the argument number
+   flags & ERF_RETURN_ARG_MASK.  */
+#define ERF_RETURNS_ARG		(1 << 2)
+
+/* Nonzero if the return value does not alias with anything.  Functions
+   with the malloc attribute have this set on their return value.  */
+#define ERF_NOALIAS		(1 << 3)
+
+
+/*---------------------------------------------------------------------------
+                                  Enumerations
+---------------------------------------------------------------------------*/
+/* Codes of tree nodes.  */
+#define DEFTREECODE(SYM, STRING, TYPE, NARGS)   SYM,
+#define END_OF_BASE_TREE_CODES LAST_AND_UNUSED_TREE_CODE,
+
+enum tree_code {
+#include "all-tree.def"
+MAX_TREE_CODES
+};
+
+#undef DEFTREECODE
+#undef END_OF_BASE_TREE_CODES
+
+/* Number of language-independent tree codes.  */
+#define NUM_TREE_CODES \
+  ((int) LAST_AND_UNUSED_TREE_CODE)
+
+#define CODE_CONTAINS_STRUCT(CODE, STRUCT) \
+  (tree_contains_struct[(CODE)][(STRUCT)])
+
+
+/* Classify which part of the compiler has defined a given builtin function.
+   Note that we assume below that this is no more than two bits.  */
+enum built_in_class {
+  NOT_BUILT_IN = 0,
+  BUILT_IN_FRONTEND,
+  BUILT_IN_MD,
+  BUILT_IN_NORMAL
+};
+
+/* Last marker used for LTO stremaing of built_in_class.  We cannot add it
+   to the enum since we need the enumb to fit in 2 bits.  */
+#define BUILT_IN_LAST (BUILT_IN_NORMAL + 1)
+
+/* Codes that identify the various built in functions
+   so that expand_call can identify them quickly.  */
+#define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) ENUM,
+enum built_in_function {
+#include "builtins.def"
+  /* Complex division routines in libgcc.  These are done via builtins
+     because emit_library_call_value can't handle complex values.  */
+  BUILT_IN_COMPLEX_MUL_MIN,
+  BUILT_IN_COMPLEX_MUL_MAX
+    = BUILT_IN_COMPLEX_MUL_MIN
+      + MAX_MODE_COMPLEX_FLOAT
+      - MIN_MODE_COMPLEX_FLOAT,
+
+  BUILT_IN_COMPLEX_DIV_MIN,
+  BUILT_IN_COMPLEX_DIV_MAX
+    = BUILT_IN_COMPLEX_DIV_MIN
+      + MAX_MODE_COMPLEX_FLOAT
+      - MIN_MODE_COMPLEX_FLOAT,
+
+  /* Upper bound on non-language-specific builtins.  */
+  END_BUILTINS
+};
+
+/* Internal functions.  */
+enum internal_fn {
+#define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC) IFN_##CODE,
+#include "internal-fn.def"
+  IFN_LAST
+};
+
+/* An enum that combines target-independent built-in functions with
+   internal functions, so that they can be treated in a similar way.
+   The numbers for built-in functions are the same as for the
+   built_in_function enum.  The numbers for internal functions
+   start at END_BUITLINS.  */
+enum combined_fn {
+#define DEF_BUILTIN(ENUM, N, C, T, LT, B, F, NA, AT, IM, COND) \
+  CFN_##ENUM = int (ENUM),
+#include "builtins.def"
+
+
+#define DEF_INTERNAL_FN(CODE, FLAGS, FNSPEC) \
+  CFN_##CODE = int (END_BUILTINS) + int (IFN_##CODE),
+#include "internal-fn.def"
+
+  CFN_LAST
+};
+
+/* Tree code classes.  Each tree_code has an associated code class
+   represented by a TREE_CODE_CLASS.  */
+enum tree_code_class {
+  tcc_exceptional, /* An exceptional code (fits no category).  */
+  tcc_constant,    /* A constant.  */
+  /* Order of tcc_type and tcc_declaration is important.  */
+  tcc_type,        /* A type object code.  */
+  tcc_declaration, /* A declaration (also serving as variable refs).  */
+  tcc_reference,   /* A reference to storage.  */
+  tcc_comparison,  /* A comparison expression.  */
+  tcc_unary,       /* A unary arithmetic expression.  */
+  tcc_binary,      /* A binary arithmetic expression.  */
+  tcc_statement,   /* A statement expression, which have side effects
+		      but usually no interesting value.  */
+  tcc_vl_exp,      /* A function call or other expression with a
+		      variable-length operand vector.  */
+  tcc_expression   /* Any other expression.  */
+};
+
+/* OMP_CLAUSE codes.  Do not reorder, as this is used to index into
+   the tables omp_clause_num_ops and omp_clause_code_name.  */
+enum omp_clause_code {
+  /* Clause zero is special-cased inside the parser
+     (c_parser_omp_variable_list).  */
+  OMP_CLAUSE_ERROR = 0,
+
+  /* OpenACC/OpenMP clause: private (variable_list).  */
+  OMP_CLAUSE_PRIVATE,
+
+  /* OpenMP clause: shared (variable_list).  */
+  OMP_CLAUSE_SHARED,
+
+  /* OpenACC/OpenMP clause: firstprivate (variable_list).  */
+  OMP_CLAUSE_FIRSTPRIVATE,
+
+  /* OpenMP clause: lastprivate (variable_list).  */
+  OMP_CLAUSE_LASTPRIVATE,
+
+  /* OpenACC/OpenMP clause: reduction (operator:variable_list).
+     OMP_CLAUSE_REDUCTION_CODE: The tree_code of the operator.
+     Operand 1: OMP_CLAUSE_REDUCTION_INIT: Stmt-list to initialize the var.
+     Operand 2: OMP_CLAUSE_REDUCTION_MERGE: Stmt-list to merge private var
+                into the shared one.
+     Operand 3: OMP_CLAUSE_REDUCTION_PLACEHOLDER: A dummy VAR_DECL
+                placeholder used in OMP_CLAUSE_REDUCTION_{INIT,MERGE}.
+     Operand 4: OMP_CLAUSE_REDUCTION_DECL_PLACEHOLDER: Another dummy
+		VAR_DECL placeholder, used like the above for C/C++ array
+		reductions.  */
+  OMP_CLAUSE_REDUCTION,
+
+  /* OpenMP clause: task_reduction (operator:variable_list).  */
+  OMP_CLAUSE_TASK_REDUCTION,
+
+  /* OpenMP clause: in_reduction (operator:variable_list).  */
+  OMP_CLAUSE_IN_REDUCTION,
+
+  /* OpenMP clause: copyin (variable_list).  */
+  OMP_CLAUSE_COPYIN,
+
+  /* OpenMP clause: copyprivate (variable_list).  */
+  OMP_CLAUSE_COPYPRIVATE,
+
+  /* OpenMP clause: linear (variable-list[:linear-step]).  */
+  OMP_CLAUSE_LINEAR,
+
+  /* OpenMP clause: aligned (variable-list[:alignment]).  */
+  OMP_CLAUSE_ALIGNED,
+
+  /* OpenMP clause: depend ({in,out,inout}:variable-list).  */
+  OMP_CLAUSE_DEPEND,
+
+  /* OpenMP clause: nontemporal (variable-list).  */
+  OMP_CLAUSE_NONTEMPORAL,
+
+  /* OpenMP clause: uniform (argument-list).  */
+  OMP_CLAUSE_UNIFORM,
+
+  /* OpenMP clause: to (extended-list).
+     Only when it appears in declare target.  */
+  OMP_CLAUSE_TO_DECLARE,
+
+  /* OpenMP clause: link (variable-list).  */
+  OMP_CLAUSE_LINK,
+
+  /* OpenMP clause: from (variable-list).  */
+  OMP_CLAUSE_FROM,
+
+  /* OpenMP clause: to (variable-list).  */
+  OMP_CLAUSE_TO,
+
+  /* OpenACC clauses: {copy, copyin, copyout, create, delete, deviceptr,
+     device, host (self), present, present_or_copy (pcopy), present_or_copyin
+     (pcopyin), present_or_copyout (pcopyout), present_or_create (pcreate)}
+     (variable-list).
+
+     OpenMP clause: map ({alloc:,to:,from:,tofrom:,}variable-list).  */
+  OMP_CLAUSE_MAP,
+
+  /* OpenACC clause: use_device (variable_list).
+     OpenMP clause: use_device_ptr (variable-list).  */
+  OMP_CLAUSE_USE_DEVICE_PTR,
+
+  /* OpenMP clause: is_device_ptr (variable-list).  */
+  OMP_CLAUSE_IS_DEVICE_PTR,
+
+  /* Internal structure to hold OpenACC cache directive's variable-list.
+     #pragma acc cache (variable-list).  */
+  OMP_CLAUSE__CACHE_,
+
+  /* OpenACC clause: gang [(gang-argument-list)].
+     Where
+      gang-argument-list: [gang-argument-list, ] gang-argument
+      gang-argument: [num:] integer-expression
+                   | static: size-expression
+      size-expression: * | integer-expression.  */
+  OMP_CLAUSE_GANG,
+
+  /* OpenACC clause: async [(integer-expression)].  */
+  OMP_CLAUSE_ASYNC,
+
+  /* OpenACC clause: wait [(integer-expression-list)].  */
+  OMP_CLAUSE_WAIT,
+
+  /* OpenACC clause: auto.  */
+  OMP_CLAUSE_AUTO,
+
+  /* OpenACC clause: seq.  */
+  OMP_CLAUSE_SEQ,
+
+  /* Internal clause: temporary for combined loops expansion.  */
+  OMP_CLAUSE__LOOPTEMP_,
+
+  /* Internal clause: temporary for task reductions.  */
+  OMP_CLAUSE__REDUCTEMP_,
+
+  /* OpenACC/OpenMP clause: if (scalar-expression).  */
+  OMP_CLAUSE_IF,
+
+  /* OpenMP clause: num_threads (integer-expression).  */
+  OMP_CLAUSE_NUM_THREADS,
+
+  /* OpenMP clause: schedule.  */
+  OMP_CLAUSE_SCHEDULE,
+
+  /* OpenMP clause: nowait.  */
+  OMP_CLAUSE_NOWAIT,
+
+  /* OpenMP clause: ordered [(constant-integer-expression)].  */
+  OMP_CLAUSE_ORDERED,
+
+  /* OpenACC/OpenMP clause: default.  */
+  OMP_CLAUSE_DEFAULT,
+
+  /* OpenACC/OpenMP clause: collapse (constant-integer-expression).  */
+  OMP_CLAUSE_COLLAPSE,
+
+  /* OpenMP clause: untied.  */
+  OMP_CLAUSE_UNTIED,
+
+  /* OpenMP clause: final (scalar-expression).  */
+  OMP_CLAUSE_FINAL,
+
+  /* OpenMP clause: mergeable.  */
+  OMP_CLAUSE_MERGEABLE,
+
+  /* OpenMP clause: device (integer-expression).  */
+  OMP_CLAUSE_DEVICE,
+
+  /* OpenMP clause: dist_schedule (static[:chunk-size]).  */
+  OMP_CLAUSE_DIST_SCHEDULE,
+
+  /* OpenMP clause: inbranch.  */
+  OMP_CLAUSE_INBRANCH,
+
+  /* OpenMP clause: notinbranch.  */
+  OMP_CLAUSE_NOTINBRANCH,
+
+  /* OpenMP clause: num_teams(integer-expression).  */
+  OMP_CLAUSE_NUM_TEAMS,
+
+  /* OpenMP clause: thread_limit(integer-expression).  */
+  OMP_CLAUSE_THREAD_LIMIT,
+
+  /* OpenMP clause: proc_bind ({master,close,spread}).  */
+  OMP_CLAUSE_PROC_BIND,
+
+  /* OpenMP clause: safelen (constant-integer-expression).  */
+  OMP_CLAUSE_SAFELEN,
+
+  /* OpenMP clause: simdlen (constant-integer-expression).  */
+  OMP_CLAUSE_SIMDLEN,
+
+  /* OpenMP clause: for.  */
+  OMP_CLAUSE_FOR,
+
+  /* OpenMP clause: parallel.  */
+  OMP_CLAUSE_PARALLEL,
+
+  /* OpenMP clause: sections.  */
+  OMP_CLAUSE_SECTIONS,
+
+  /* OpenMP clause: taskgroup.  */
+  OMP_CLAUSE_TASKGROUP,
+
+  /* OpenMP clause: priority (integer-expression).  */
+  OMP_CLAUSE_PRIORITY,
+
+  /* OpenMP clause: grainsize (integer-expression).  */
+  OMP_CLAUSE_GRAINSIZE,
+
+  /* OpenMP clause: num_tasks (integer-expression).  */
+  OMP_CLAUSE_NUM_TASKS,
+
+  /* OpenMP clause: nogroup.  */
+  OMP_CLAUSE_NOGROUP,
+
+  /* OpenMP clause: threads.  */
+  OMP_CLAUSE_THREADS,
+
+  /* OpenMP clause: simd.  */
+  OMP_CLAUSE_SIMD,
+
+  /* OpenMP clause: hint (integer-expression).  */
+  OMP_CLAUSE_HINT,
+
+  /* OpenMP clause: defaultmap (tofrom: scalar).  */
+  OMP_CLAUSE_DEFAULTMAP,
+
+  /* Internally used only clause, holding SIMD uid.  */
+  OMP_CLAUSE__SIMDUID_,
+
+  /* Internally used only clause, flag whether this is SIMT simd
+     loop or not.  */
+  OMP_CLAUSE__SIMT_,
+
+  /* OpenACC clause: independent.  */
+  OMP_CLAUSE_INDEPENDENT,
+
+  /* OpenACC clause: worker [( [num:] integer-expression)].  */
+  OMP_CLAUSE_WORKER,
+
+  /* OpenACC clause: vector [( [length:] integer-expression)].  */
+  OMP_CLAUSE_VECTOR,
+
+  /* OpenACC clause: num_gangs (integer-expression).  */
+  OMP_CLAUSE_NUM_GANGS,
+
+  /* OpenACC clause: num_workers (integer-expression).  */
+  OMP_CLAUSE_NUM_WORKERS,
+
+  /* OpenACC clause: vector_length (integer-expression).  */
+  OMP_CLAUSE_VECTOR_LENGTH,
+
+  /* OpenACC clause: tile ( size-expr-list ).  */
+  OMP_CLAUSE_TILE,
+
+  /* OpenMP internal-only clause to specify grid dimensions of a gridified
+     kernel.  */
+  OMP_CLAUSE__GRIDDIM_,
+
+  /* OpenACC clause: if_present.  */
+  OMP_CLAUSE_IF_PRESENT,
+
+  /* OpenACC clause: finalize.  */
+  OMP_CLAUSE_FINALIZE
+};
+
+#undef DEFTREESTRUCT
+#define DEFTREESTRUCT(ENUM, NAME) ENUM,
+enum tree_node_structure_enum {
+#include "treestruct.def"
+  LAST_TS_ENUM
+};
+#undef DEFTREESTRUCT
+
+enum omp_clause_schedule_kind {
+  OMP_CLAUSE_SCHEDULE_STATIC,
+  OMP_CLAUSE_SCHEDULE_DYNAMIC,
+  OMP_CLAUSE_SCHEDULE_GUIDED,
+  OMP_CLAUSE_SCHEDULE_AUTO,
+  OMP_CLAUSE_SCHEDULE_RUNTIME,
+  OMP_CLAUSE_SCHEDULE_MASK = (1 << 3) - 1,
+  OMP_CLAUSE_SCHEDULE_MONOTONIC = (1 << 3),
+  OMP_CLAUSE_SCHEDULE_NONMONOTONIC = (1 << 4),
+  OMP_CLAUSE_SCHEDULE_LAST = 2 * OMP_CLAUSE_SCHEDULE_NONMONOTONIC - 1
+};
+
+enum omp_clause_default_kind {
+  OMP_CLAUSE_DEFAULT_UNSPECIFIED,
+  OMP_CLAUSE_DEFAULT_SHARED,
+  OMP_CLAUSE_DEFAULT_NONE,
+  OMP_CLAUSE_DEFAULT_PRIVATE,
+  OMP_CLAUSE_DEFAULT_FIRSTPRIVATE,
+  OMP_CLAUSE_DEFAULT_PRESENT,
+  OMP_CLAUSE_DEFAULT_LAST
+};
+
+enum omp_clause_defaultmap_kind {
+  OMP_CLAUSE_DEFAULTMAP_CATEGORY_UNSPECIFIED,
+  OMP_CLAUSE_DEFAULTMAP_CATEGORY_SCALAR,
+  OMP_CLAUSE_DEFAULTMAP_CATEGORY_AGGREGATE,
+  OMP_CLAUSE_DEFAULTMAP_CATEGORY_ALLOCATABLE,
+  OMP_CLAUSE_DEFAULTMAP_CATEGORY_POINTER,
+  OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK = 7,
+  OMP_CLAUSE_DEFAULTMAP_ALLOC = 1 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
+  OMP_CLAUSE_DEFAULTMAP_TO = 2 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
+  OMP_CLAUSE_DEFAULTMAP_FROM = 3 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
+  OMP_CLAUSE_DEFAULTMAP_TOFROM = 4 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
+  OMP_CLAUSE_DEFAULTMAP_FIRSTPRIVATE
+    = 5 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
+  OMP_CLAUSE_DEFAULTMAP_NONE = 6 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
+  OMP_CLAUSE_DEFAULTMAP_DEFAULT
+    = 7 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1),
+  OMP_CLAUSE_DEFAULTMAP_MASK = 7 * (OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK + 1)
+};
+
+/* memory-order-clause on OpenMP atomic/flush constructs or
+   argument of atomic_default_mem_order clause.  */
+enum omp_memory_order {
+  OMP_MEMORY_ORDER_UNSPECIFIED,
+  OMP_MEMORY_ORDER_RELAXED,
+  OMP_MEMORY_ORDER_ACQUIRE,
+  OMP_MEMORY_ORDER_RELEASE,
+  OMP_MEMORY_ORDER_ACQ_REL,
+  OMP_MEMORY_ORDER_SEQ_CST
+};
+
+/* There is a TYPE_QUAL value for each type qualifier.  They can be
+   combined by bitwise-or to form the complete set of qualifiers for a
+   type.  */
+enum cv_qualifier {
+  TYPE_UNQUALIFIED   = 0x0,
+  TYPE_QUAL_CONST    = 0x1,
+  TYPE_QUAL_VOLATILE = 0x2,
+  TYPE_QUAL_RESTRICT = 0x4,
+  TYPE_QUAL_ATOMIC   = 0x8
+};
+
+/* Standard named or nameless data types of the C compiler.  */
+enum tree_index {
+  TI_ERROR_MARK,
+  TI_INTQI_TYPE,
+  TI_INTHI_TYPE,
+  TI_INTSI_TYPE,
+  TI_INTDI_TYPE,
+  TI_INTTI_TYPE,
+
+  TI_UINTQI_TYPE,
+  TI_UINTHI_TYPE,
+  TI_UINTSI_TYPE,
+  TI_UINTDI_TYPE,
+  TI_UINTTI_TYPE,
+
+  TI_ATOMICQI_TYPE,
+  TI_ATOMICHI_TYPE,
+  TI_ATOMICSI_TYPE,
+  TI_ATOMICDI_TYPE,
+  TI_ATOMICTI_TYPE,
+
+  TI_UINT16_TYPE,
+  TI_UINT32_TYPE,
+  TI_UINT64_TYPE,
+
+  TI_VOID,
+
+  TI_INTEGER_ZERO,
+  TI_INTEGER_ONE,
+  TI_INTEGER_THREE,
+  TI_INTEGER_MINUS_ONE,
+  TI_NULL_POINTER,
+
+  TI_SIZE_ZERO,
+  TI_SIZE_ONE,
+
+  TI_BITSIZE_ZERO,
+  TI_BITSIZE_ONE,
+  TI_BITSIZE_UNIT,
+
+  TI_PUBLIC,
+  TI_PROTECTED,
+  TI_PRIVATE,
+
+  TI_BOOLEAN_FALSE,
+  TI_BOOLEAN_TRUE,
+
+  TI_FLOAT_TYPE,
+  TI_DOUBLE_TYPE,
+  TI_LONG_DOUBLE_TYPE,
+
+  /* The _FloatN and _FloatNx types must be consecutive, and in the
+     same sequence as the corresponding complex types, which must also
+     be consecutive; _FloatN must come before _FloatNx; the order must
+     also be the same as in the floatn_nx_types array and the RID_*
+     values in c-common.h.  This is so that iterations over these
+     types work as intended.  */
+  TI_FLOAT16_TYPE,
+  TI_FLOATN_TYPE_FIRST = TI_FLOAT16_TYPE,
+  TI_FLOATN_NX_TYPE_FIRST = TI_FLOAT16_TYPE,
+  TI_FLOAT32_TYPE,
+  TI_FLOAT64_TYPE,
+  TI_FLOAT128_TYPE,
+  TI_FLOATN_TYPE_LAST = TI_FLOAT128_TYPE,
+#define NUM_FLOATN_TYPES (TI_FLOATN_TYPE_LAST - TI_FLOATN_TYPE_FIRST + 1)
+  TI_FLOAT32X_TYPE,
+  TI_FLOATNX_TYPE_FIRST = TI_FLOAT32X_TYPE,
+  TI_FLOAT64X_TYPE,
+  TI_FLOAT128X_TYPE,
+  TI_FLOATNX_TYPE_LAST = TI_FLOAT128X_TYPE,
+  TI_FLOATN_NX_TYPE_LAST = TI_FLOAT128X_TYPE,
+#define NUM_FLOATNX_TYPES (TI_FLOATNX_TYPE_LAST - TI_FLOATNX_TYPE_FIRST + 1)
+#define NUM_FLOATN_NX_TYPES (TI_FLOATN_NX_TYPE_LAST		\
+			     - TI_FLOATN_NX_TYPE_FIRST		\
+			     + 1)
+
+  /* Put the complex types after their component types, so that in (sequential)
+     tree streaming we can assert that their component types have already been
+     handled (see tree-streamer.c:record_common_node).  */
+  TI_COMPLEX_INTEGER_TYPE,
+  TI_COMPLEX_FLOAT_TYPE,
+  TI_COMPLEX_DOUBLE_TYPE,
+  TI_COMPLEX_LONG_DOUBLE_TYPE,
+
+  TI_COMPLEX_FLOAT16_TYPE,
+  TI_COMPLEX_FLOATN_NX_TYPE_FIRST = TI_COMPLEX_FLOAT16_TYPE,
+  TI_COMPLEX_FLOAT32_TYPE,
+  TI_COMPLEX_FLOAT64_TYPE,
+  TI_COMPLEX_FLOAT128_TYPE,
+  TI_COMPLEX_FLOAT32X_TYPE,
+  TI_COMPLEX_FLOAT64X_TYPE,
+  TI_COMPLEX_FLOAT128X_TYPE,
+
+  TI_FLOAT_PTR_TYPE,
+  TI_DOUBLE_PTR_TYPE,
+  TI_LONG_DOUBLE_PTR_TYPE,
+  TI_INTEGER_PTR_TYPE,
+
+  TI_VOID_TYPE,
+  TI_PTR_TYPE,
+  TI_CONST_PTR_TYPE,
+  TI_SIZE_TYPE,
+  TI_PID_TYPE,
+  TI_PTRDIFF_TYPE,
+  TI_VA_LIST_TYPE,
+  TI_VA_LIST_GPR_COUNTER_FIELD,
+  TI_VA_LIST_FPR_COUNTER_FIELD,
+  TI_BOOLEAN_TYPE,
+  TI_FILEPTR_TYPE,
+  TI_CONST_TM_PTR_TYPE,
+  TI_FENV_T_PTR_TYPE,
+  TI_CONST_FENV_T_PTR_TYPE,
+  TI_FEXCEPT_T_PTR_TYPE,
+  TI_CONST_FEXCEPT_T_PTR_TYPE,
+  TI_POINTER_SIZED_TYPE,
+
+  TI_DFLOAT32_TYPE,
+  TI_DFLOAT64_TYPE,
+  TI_DFLOAT128_TYPE,
+  TI_DFLOAT32_PTR_TYPE,
+  TI_DFLOAT64_PTR_TYPE,
+  TI_DFLOAT128_PTR_TYPE,
+
+  TI_VOID_LIST_NODE,
+
+  TI_MAIN_IDENTIFIER,
+
+  TI_SAT_SFRACT_TYPE,
+  TI_SAT_FRACT_TYPE,
+  TI_SAT_LFRACT_TYPE,
+  TI_SAT_LLFRACT_TYPE,
+  TI_SAT_USFRACT_TYPE,
+  TI_SAT_UFRACT_TYPE,
+  TI_SAT_ULFRACT_TYPE,
+  TI_SAT_ULLFRACT_TYPE,
+  TI_SFRACT_TYPE,
+  TI_FRACT_TYPE,
+  TI_LFRACT_TYPE,
+  TI_LLFRACT_TYPE,
+  TI_USFRACT_TYPE,
+  TI_UFRACT_TYPE,
+  TI_ULFRACT_TYPE,
+  TI_ULLFRACT_TYPE,
+  TI_SAT_SACCUM_TYPE,
+  TI_SAT_ACCUM_TYPE,
+  TI_SAT_LACCUM_TYPE,
+  TI_SAT_LLACCUM_TYPE,
+  TI_SAT_USACCUM_TYPE,
+  TI_SAT_UACCUM_TYPE,
+  TI_SAT_ULACCUM_TYPE,
+  TI_SAT_ULLACCUM_TYPE,
+  TI_SACCUM_TYPE,
+  TI_ACCUM_TYPE,
+  TI_LACCUM_TYPE,
+  TI_LLACCUM_TYPE,
+  TI_USACCUM_TYPE,
+  TI_UACCUM_TYPE,
+  TI_ULACCUM_TYPE,
+  TI_ULLACCUM_TYPE,
+  TI_QQ_TYPE,
+  TI_HQ_TYPE,
+  TI_SQ_TYPE,
+  TI_DQ_TYPE,
+  TI_TQ_TYPE,
+  TI_UQQ_TYPE,
+  TI_UHQ_TYPE,
+  TI_USQ_TYPE,
+  TI_UDQ_TYPE,
+  TI_UTQ_TYPE,
+  TI_SAT_QQ_TYPE,
+  TI_SAT_HQ_TYPE,
+  TI_SAT_SQ_TYPE,
+  TI_SAT_DQ_TYPE,
+  TI_SAT_TQ_TYPE,
+  TI_SAT_UQQ_TYPE,
+  TI_SAT_UHQ_TYPE,
+  TI_SAT_USQ_TYPE,
+  TI_SAT_UDQ_TYPE,
+  TI_SAT_UTQ_TYPE,
+  TI_HA_TYPE,
+  TI_SA_TYPE,
+  TI_DA_TYPE,
+  TI_TA_TYPE,
+  TI_UHA_TYPE,
+  TI_USA_TYPE,
+  TI_UDA_TYPE,
+  TI_UTA_TYPE,
+  TI_SAT_HA_TYPE,
+  TI_SAT_SA_TYPE,
+  TI_SAT_DA_TYPE,
+  TI_SAT_TA_TYPE,
+  TI_SAT_UHA_TYPE,
+  TI_SAT_USA_TYPE,
+  TI_SAT_UDA_TYPE,
+  TI_SAT_UTA_TYPE,
+
+  TI_OPTIMIZATION_DEFAULT,
+  TI_OPTIMIZATION_CURRENT,
+  TI_TARGET_OPTION_DEFAULT,
+  TI_TARGET_OPTION_CURRENT,
+  TI_CURRENT_TARGET_PRAGMA,
+  TI_CURRENT_OPTIMIZE_PRAGMA,
+
+  TI_MAX
+};
+
+/* An enumeration of the standard C integer types.  These must be
+   ordered so that shorter types appear before longer ones, and so
+   that signed types appear before unsigned ones, for the correct
+   functioning of interpret_integer() in c-lex.c.  */
+enum integer_type_kind {
+  itk_char,
+  itk_signed_char,
+  itk_unsigned_char,
+  itk_short,
+  itk_unsigned_short,
+  itk_int,
+  itk_unsigned_int,
+  itk_long,
+  itk_unsigned_long,
+  itk_long_long,
+  itk_unsigned_long_long,
+
+  itk_intN_0,
+  itk_unsigned_intN_0,
+  itk_intN_1,
+  itk_unsigned_intN_1,
+  itk_intN_2,
+  itk_unsigned_intN_2,
+  itk_intN_3,
+  itk_unsigned_intN_3,
+
+  itk_none
+};
+
+/* A pointer-to-function member type looks like:
+
+     struct {
+       __P __pfn;
+       ptrdiff_t __delta;
+     };
+
+   If __pfn is NULL, it is a NULL pointer-to-member-function.
+
+   (Because the vtable is always the first thing in the object, we
+   don't need its offset.)  If the function is virtual, then PFN is
+   one plus twice the index into the vtable; otherwise, it is just a
+   pointer to the function.
+
+   Unfortunately, using the lowest bit of PFN doesn't work in
+   architectures that don't impose alignment requirements on function
+   addresses, or that use the lowest bit to tell one ISA from another,
+   for example.  For such architectures, we use the lowest bit of
+   DELTA instead of the lowest bit of the PFN, and DELTA will be
+   multiplied by 2.  */
+enum ptrmemfunc_vbit_where_t {
+  ptrmemfunc_vbit_in_pfn,
+  ptrmemfunc_vbit_in_delta
+};
+
+/* Flags that may be passed in the third argument of decl_attributes, and
+   to handler functions for attributes.  */
+enum attribute_flags {
+  /* The type passed in is the type of a DECL, and any attributes that
+     should be passed in again to be applied to the DECL rather than the
+     type should be returned.  */
+  ATTR_FLAG_DECL_NEXT = 1,
+  /* The type passed in is a function return type, and any attributes that
+     should be passed in again to be applied to the function type rather
+     than the return type should be returned.  */
+  ATTR_FLAG_FUNCTION_NEXT = 2,
+  /* The type passed in is an array element type, and any attributes that
+     should be passed in again to be applied to the array type rather
+     than the element type should be returned.  */
+  ATTR_FLAG_ARRAY_NEXT = 4,
+  /* The type passed in is a structure, union or enumeration type being
+     created, and should be modified in place.  */
+  ATTR_FLAG_TYPE_IN_PLACE = 8,
+  /* The attributes are being applied by default to a library function whose
+     name indicates known behavior, and should be silently ignored if they
+     are not in fact compatible with the function type.  */
+  ATTR_FLAG_BUILT_IN = 16,
+  /* A given attribute has been parsed as a C++-11 attribute.  */
+  ATTR_FLAG_CXX11 = 32
+};
+
+/* Types used to represent sizes.  */
+enum size_type_kind {
+  stk_sizetype,		/* Normal representation of sizes in bytes.  */
+  stk_ssizetype,	/* Signed representation of sizes in bytes.  */
+  stk_bitsizetype,	/* Normal representation of sizes in bits.  */
+  stk_sbitsizetype,	/* Signed representation of sizes in bits.  */
+  stk_type_kind_last
+};
+
+enum operand_equal_flag {
+  OEP_ONLY_CONST = 1,
+  OEP_PURE_SAME = 2,
+  OEP_MATCH_SIDE_EFFECTS = 4,
+  OEP_ADDRESS_OF = 8,
+  /* Internal within operand_equal_p:  */
+  OEP_NO_HASH_CHECK = 16,
+  /* Internal within inchash::add_expr:  */
+  OEP_HASH_CHECK = 32,
+  /* Makes operand_equal_p handle more expressions:  */
+  OEP_LEXICOGRAPHIC = 64
+};
+
+/* Enum and arrays used for tree allocation stats.
+   Keep in sync with tree.c:tree_node_kind_names.  */
+enum tree_node_kind {
+  d_kind,
+  t_kind,
+  b_kind,
+  s_kind,
+  r_kind,
+  e_kind,
+  c_kind,
+  id_kind,
+  vec_kind,
+  binfo_kind,
+  ssa_name_kind,
+  constr_kind,
+  x_kind,
+  lang_decl,
+  lang_type,
+  omp_clause_kind,
+  all_kinds
+};
+
+enum annot_expr_kind {
+  annot_expr_ivdep_kind,
+  annot_expr_unroll_kind,
+  annot_expr_no_vector_kind,
+  annot_expr_vector_kind,
+  annot_expr_parallel_kind,
+  annot_expr_kind_last
+};
+
+/*---------------------------------------------------------------------------
+                                Type definitions
+---------------------------------------------------------------------------*/
+/* When processing aliases at the symbol table level, we need the
+   declaration of target. For this reason we need to queue aliases and
+   process them after all declarations has been produced.  */
+struct GTY(()) alias_pair {
+  tree decl;
+  tree target;
+};
+
+/* An initialization priority.  */
+typedef unsigned short priority_type;
+
+/* The type of a callback function for walking over tree structure.  */
+typedef tree (*walk_tree_fn) (tree *, int *, void *);
+
+/* The type of a callback function that represents a custom walk_tree.  */
+typedef tree (*walk_tree_lh) (tree *, int *, tree (*) (tree *, int *, void *),
+			      void *, hash_set<tree> *);
+
+
+/*---------------------------------------------------------------------------
+                              Main data structures
+---------------------------------------------------------------------------*/
+/* A tree node can represent a data type, a variable, an expression
+   or a statement.  Each node has a TREE_CODE which says what kind of
+   thing it represents.  Some common codes are:
+   INTEGER_TYPE -- represents a type of integers.
+   ARRAY_TYPE -- represents a type of pointer.
+   VAR_DECL -- represents a declared variable.
+   INTEGER_CST -- represents a constant integer value.
+   PLUS_EXPR -- represents a sum (an expression).
+
+   As for the contents of a tree node: there are some fields
+   that all nodes share.  Each TREE_CODE has various special-purpose
+   fields as well.  The fields of a node are never accessed directly,
+   always through accessor macros.  */
+
+/* Every kind of tree node starts with this structure,
+   so all nodes have these fields.
+
+   See the accessor macros, defined below, for documentation of the
+   fields, and the table below which connects the fields and the
+   accessor macros.  */
+
+struct GTY(()) tree_base {
+  ENUM_BITFIELD(tree_code) code : 16;
+
+  unsigned side_effects_flag : 1;
+  unsigned constant_flag : 1;
+  unsigned addressable_flag : 1;
+  unsigned volatile_flag : 1;
+  unsigned readonly_flag : 1;
+  unsigned asm_written_flag: 1;
+  unsigned nowarning_flag : 1;
+  unsigned visited : 1;
+
+  unsigned used_flag : 1;
+  unsigned nothrow_flag : 1;
+  unsigned static_flag : 1;
+  unsigned public_flag : 1;
+  unsigned private_flag : 1;
+  unsigned protected_flag : 1;
+  unsigned deprecated_flag : 1;
+  unsigned default_def_flag : 1;
+
+  union {
+    /* The bits in the following structure should only be used with
+       accessor macros that constrain inputs with tree checking.  */
+    struct {
+      unsigned lang_flag_0 : 1;
+      unsigned lang_flag_1 : 1;
+      unsigned lang_flag_2 : 1;
+      unsigned lang_flag_3 : 1;
+      unsigned lang_flag_4 : 1;
+      unsigned lang_flag_5 : 1;
+      unsigned lang_flag_6 : 1;
+      unsigned saturating_flag : 1;
+
+      unsigned unsigned_flag : 1;
+      unsigned packed_flag : 1;
+      unsigned user_align : 1;
+      unsigned nameless_flag : 1;
+      unsigned atomic_flag : 1;
+      unsigned spare0 : 3;
+
+      unsigned spare1 : 8;
+
+      /* This field is only used with TREE_TYPE nodes; the only reason it is
+	 present in tree_base instead of tree_type is to save space.  The size
+	 of the field must be large enough to hold addr_space_t values.  */
+      unsigned address_space : 8;
+    } bits;
+
+    /* The following fields are present in tree_base to save space.  The
+       nodes using them do not require any of the flags above and so can
+       make better use of the 4-byte sized word.  */
+
+    /* The number of HOST_WIDE_INTs in an INTEGER_CST.  */
+    struct {
+      /* The number of HOST_WIDE_INTs if the INTEGER_CST is accessed in
+	 its native precision.  */
+      unsigned char unextended;
+
+      /* The number of HOST_WIDE_INTs if the INTEGER_CST is extended to
+	 wider precisions based on its TYPE_SIGN.  */
+      unsigned char extended;
+
+      /* The number of HOST_WIDE_INTs if the INTEGER_CST is accessed in
+	 offset_int precision, with smaller integers being extended
+	 according to their TYPE_SIGN.  This is equal to one of the two
+	 fields above but is cached for speed.  */
+      unsigned char offset;
+    } int_length;
+
+    /* VEC length.  This field is only used with TREE_VEC.  */
+    int length;
+
+    /* This field is only used with VECTOR_CST.  */
+    struct {
+      /* The value of VECTOR_CST_LOG2_NPATTERNS.  */
+      unsigned int log2_npatterns : 8;
+
+      /* The value of VECTOR_CST_NELTS_PER_PATTERN.  */
+      unsigned int nelts_per_pattern : 8;
+
+      /* For future expansion.  */
+      unsigned int unused : 16;
+    } vector_cst;
+
+    /* SSA version number.  This field is only used with SSA_NAME.  */
+    unsigned int version;
+
+    /* CHREC_VARIABLE.  This field is only used with POLYNOMIAL_CHREC.  */
+    unsigned int chrec_var;
+
+    /* Internal function code.  */
+    enum internal_fn ifn;
+
+    /* OMP_ATOMIC* memory order.  */
+    enum omp_memory_order omp_atomic_memory_order;
+
+    /* The following two fields are used for MEM_REF and TARGET_MEM_REF
+       expression trees and specify known data non-dependences.  For
+       two memory references in a function they are known to not
+       alias if dependence_info.clique are equal and dependence_info.base
+       are distinct.  Clique number zero means there is no information,
+       clique number one is populated from function global information
+       and thus needs no remapping on transforms like loop unrolling.  */
+    struct {
+      unsigned short clique;
+      unsigned short base;
+    } dependence_info;
+  } GTY((skip(""))) u;
+};
+
+/* The following table lists the uses of each of the above flags and
+   for which types of nodes they are defined.
+
+   addressable_flag:
+
+       TREE_ADDRESSABLE in
+           VAR_DECL, PARM_DECL, RESULT_DECL, FUNCTION_DECL, LABEL_DECL
+           SSA_NAME
+           all types
+           CONSTRUCTOR, IDENTIFIER_NODE
+           STMT_EXPR
+
+       CALL_EXPR_TAILCALL in
+           CALL_EXPR
+
+       CASE_LOW_SEEN in
+           CASE_LABEL_EXPR
+
+       PREDICT_EXPR_OUTCOME in
+	   PREDICT_EXPR
+
+   static_flag:
+
+       TREE_STATIC in
+           VAR_DECL, FUNCTION_DECL
+           CONSTRUCTOR
+
+       TREE_NO_TRAMPOLINE in
+           ADDR_EXPR
+
+       BINFO_VIRTUAL_P in
+           TREE_BINFO
+
+       TREE_SYMBOL_REFERENCED in
+           IDENTIFIER_NODE
+
+       CLEANUP_EH_ONLY in
+           TARGET_EXPR, WITH_CLEANUP_EXPR
+
+       TRY_CATCH_IS_CLEANUP in
+           TRY_CATCH_EXPR
+
+       ASM_INPUT_P in
+           ASM_EXPR
+
+       TYPE_REF_CAN_ALIAS_ALL in
+           POINTER_TYPE, REFERENCE_TYPE
+
+       CASE_HIGH_SEEN in
+           CASE_LABEL_EXPR
+
+       ENUM_IS_SCOPED in
+	   ENUMERAL_TYPE
+
+       TRANSACTION_EXPR_OUTER in
+	   TRANSACTION_EXPR
+
+       SSA_NAME_ANTI_RANGE_P in
+	   SSA_NAME
+
+       MUST_TAIL_CALL in
+	   CALL_EXPR
+
+   public_flag:
+
+       TREE_OVERFLOW in
+           INTEGER_CST, REAL_CST, COMPLEX_CST, VECTOR_CST
+
+       TREE_PUBLIC in
+           VAR_DECL, FUNCTION_DECL
+           IDENTIFIER_NODE
+
+       CONSTRUCTOR_NO_CLEARING in
+           CONSTRUCTOR
+
+       ASM_VOLATILE_P in
+           ASM_EXPR
+
+       CALL_EXPR_VA_ARG_PACK in
+           CALL_EXPR
+
+       TYPE_CACHED_VALUES_P in
+           all types
+
+       SAVE_EXPR_RESOLVED_P in
+           SAVE_EXPR
+
+       OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE in
+           OMP_CLAUSE_LASTPRIVATE
+
+       OMP_CLAUSE_PRIVATE_DEBUG in
+           OMP_CLAUSE_PRIVATE
+
+       OMP_CLAUSE_LINEAR_NO_COPYIN in
+	   OMP_CLAUSE_LINEAR
+
+       OMP_CLAUSE_MAP_ZERO_BIAS_ARRAY_SECTION in
+	   OMP_CLAUSE_MAP
+
+       OMP_CLAUSE_REDUCTION_OMP_ORIG_REF in
+	   OMP_CLAUSE_{,TASK_,IN_}REDUCTION
+
+       TRANSACTION_EXPR_RELAXED in
+	   TRANSACTION_EXPR
+
+       FALLTHROUGH_LABEL_P in
+	   LABEL_DECL
+
+       SSA_NAME_IS_VIRTUAL_OPERAND in
+	   SSA_NAME
+
+       EXPR_LOCATION_WRAPPER_P in
+	   NON_LVALUE_EXPR, VIEW_CONVERT_EXPR
+
+   private_flag:
+
+       TREE_PRIVATE in
+           all decls
+
+       CALL_EXPR_RETURN_SLOT_OPT in
+           CALL_EXPR
+
+       OMP_SECTION_LAST in
+           OMP_SECTION
+
+       OMP_PARALLEL_COMBINED in
+           OMP_PARALLEL
+
+       OMP_CLAUSE_PRIVATE_OUTER_REF in
+	   OMP_CLAUSE_PRIVATE
+
+       OMP_CLAUSE_LINEAR_NO_COPYOUT in
+	   OMP_CLAUSE_LINEAR
+
+       TYPE_REF_IS_RVALUE in
+	   REFERENCE_TYPE
+
+       ENUM_IS_OPAQUE in
+	   ENUMERAL_TYPE
+
+   protected_flag:
+
+       TREE_PROTECTED in
+           BLOCK
+           all decls
+
+       CALL_FROM_THUNK_P and
+       CALL_ALLOCA_FOR_VAR_P in
+           CALL_EXPR
+
+       OMP_CLAUSE_LINEAR_VARIABLE_STRIDE in
+	   OMP_CLAUSE_LINEAR
+
+       ASM_INLINE_P in
+	   ASM_EXPR
+
+   side_effects_flag:
+
+       TREE_SIDE_EFFECTS in
+           all expressions
+           all decls
+           all constants
+
+       FORCED_LABEL in
+           LABEL_DECL
+
+   volatile_flag:
+
+       TREE_THIS_VOLATILE in
+           all expressions
+           all decls
+
+       TYPE_VOLATILE in
+           all types
+
+   readonly_flag:
+
+       TREE_READONLY in
+           all expressions
+           all decls
+
+       TYPE_READONLY in
+           all types
+
+   constant_flag:
+
+       TREE_CONSTANT in
+           all expressions
+           all decls
+           all constants
+
+       TYPE_SIZES_GIMPLIFIED in
+           all types
+
+   unsigned_flag:
+
+       TYPE_UNSIGNED in
+           all types
+
+       DECL_UNSIGNED in
+           all decls
+
+   asm_written_flag:
+
+       TREE_ASM_WRITTEN in
+           VAR_DECL, FUNCTION_DECL, TYPE_DECL
+           RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE
+           BLOCK, STRING_CST
+
+       SSA_NAME_OCCURS_IN_ABNORMAL_PHI in
+           SSA_NAME
+
+   used_flag:
+
+       TREE_USED in
+           all expressions
+           all decls
+           IDENTIFIER_NODE
+
+   nothrow_flag:
+
+       TREE_NOTHROW in
+           CALL_EXPR
+           FUNCTION_DECL
+
+       TREE_THIS_NOTRAP in
+          INDIRECT_REF, MEM_REF, TARGET_MEM_REF, ARRAY_REF, ARRAY_RANGE_REF
+
+       SSA_NAME_IN_FREE_LIST in
+          SSA_NAME
+
+       DECL_NONALIASED in
+	  VAR_DECL
+
+   deprecated_flag:
+
+       TREE_DEPRECATED in
+           all decls
+	   all types
+
+       IDENTIFIER_TRANSPARENT_ALIAS in
+           IDENTIFIER_NODE
+
+       SSA_NAME_POINTS_TO_READONLY_MEMORY in
+	   SSA_NAME
+
+   visited:
+
+       TREE_VISITED in
+           all trees (used liberally by many passes)
+
+   saturating_flag:
+
+       TYPE_REVERSE_STORAGE_ORDER in
+           RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE, ARRAY_TYPE
+
+       TYPE_SATURATING in
+           other types
+
+       VAR_DECL_IS_VIRTUAL_OPERAND in
+	   VAR_DECL
+
+   nowarning_flag:
+
+       TREE_NO_WARNING in
+           all expressions
+           all decls
+
+       TYPE_ARTIFICIAL in
+           all types
+
+   default_def_flag:
+
+       TYPE_FINAL_P in
+	   RECORD_TYPE, UNION_TYPE and QUAL_UNION_TYPE
+
+       TYPE_VECTOR_OPAQUE in
+	   VECTOR_TYPE
+
+       SSA_NAME_IS_DEFAULT_DEF in
+           SSA_NAME
+
+       DECL_NONLOCAL_FRAME in
+	   VAR_DECL
+
+       REF_REVERSE_STORAGE_ORDER in
+           BIT_FIELD_REF, MEM_REF
+
+       FUNC_ADDR_BY_DESCRIPTOR in
+           ADDR_EXPR
+
+       CALL_EXPR_BY_DESCRIPTOR in
+           CALL_EXPR
+*/
+
+struct GTY(()) tree_typed {
+  struct tree_base base;
+  tree type;
+};
+
+struct GTY(()) tree_common {
+  struct tree_typed typed;
+  tree chain;
+};
+
+struct GTY(()) tree_int_cst {
+  struct tree_typed typed;
+  HOST_WIDE_INT val[1];
+};
+
+
+struct GTY(()) tree_real_cst {
+  struct tree_typed typed;
+  struct real_value * real_cst_ptr;
+};
+
+struct GTY(()) tree_fixed_cst {
+  struct tree_typed typed;
+  struct fixed_value * fixed_cst_ptr;
+};
+
+struct GTY(()) tree_string {
+  struct tree_typed typed;
+  int length;
+  char str[1];
+};
+
+struct GTY(()) tree_complex {
+  struct tree_typed typed;
+  tree real;
+  tree imag;
+};
+
+struct GTY(()) tree_vector {
+  struct tree_typed typed;
+  tree GTY ((length ("vector_cst_encoded_nelts ((tree) &%h)"))) elts[1];
+};
+
+struct GTY(()) tree_poly_int_cst {
+  struct tree_typed typed;
+  tree coeffs[NUM_POLY_INT_COEFFS];
+};
+
+struct GTY(()) tree_identifier {
+  struct tree_common common;
+  struct ht_identifier id;
+};
+
+struct GTY(()) tree_list {
+  struct tree_common common;
+  tree purpose;
+  tree value;
+};
+
+struct GTY(()) tree_vec {
+  struct tree_common common;
+  tree GTY ((length ("TREE_VEC_LENGTH ((tree)&%h)"))) a[1];
+};
+
+/* A single element of a CONSTRUCTOR. VALUE holds the actual value of the
+   element. INDEX can optionally design the position of VALUE: in arrays,
+   it is the index where VALUE has to be placed; in structures, it is the
+   FIELD_DECL of the member.  */
+struct GTY(()) constructor_elt {
+  tree index;
+  tree value;
+};
+
+struct GTY(()) tree_constructor {
+  struct tree_typed typed;
+  vec<constructor_elt, va_gc> *elts;
+};
+
+enum omp_clause_depend_kind
+{
+  OMP_CLAUSE_DEPEND_IN,
+  OMP_CLAUSE_DEPEND_OUT,
+  OMP_CLAUSE_DEPEND_INOUT,
+  OMP_CLAUSE_DEPEND_MUTEXINOUTSET,
+  OMP_CLAUSE_DEPEND_SOURCE,
+  OMP_CLAUSE_DEPEND_SINK,
+  OMP_CLAUSE_DEPEND_DEPOBJ,
+  OMP_CLAUSE_DEPEND_LAST
+};
+
+enum omp_clause_proc_bind_kind
+{
+  /* Numbers should match omp_proc_bind_t enum in omp.h.  */
+  OMP_CLAUSE_PROC_BIND_FALSE = 0,
+  OMP_CLAUSE_PROC_BIND_TRUE = 1,
+  OMP_CLAUSE_PROC_BIND_MASTER = 2,
+  OMP_CLAUSE_PROC_BIND_CLOSE = 3,
+  OMP_CLAUSE_PROC_BIND_SPREAD = 4,
+  OMP_CLAUSE_PROC_BIND_LAST
+};
+
+enum omp_clause_linear_kind
+{
+  OMP_CLAUSE_LINEAR_DEFAULT,
+  OMP_CLAUSE_LINEAR_REF,
+  OMP_CLAUSE_LINEAR_VAL,
+  OMP_CLAUSE_LINEAR_UVAL
+};
+
+struct GTY(()) tree_exp {
+  struct tree_typed typed;
+  location_t locus;
+  tree GTY ((special ("tree_exp"),
+	     desc ("TREE_CODE ((tree) &%0)")))
+    operands[1];
+};
+
+/* Immediate use linking structure.  This structure is used for maintaining
+   a doubly linked list of uses of an SSA_NAME.  */
+struct GTY(()) ssa_use_operand_t {
+  struct ssa_use_operand_t* GTY((skip(""))) prev;
+  struct ssa_use_operand_t* GTY((skip(""))) next;
+  /* Immediate uses for a given SSA name are maintained as a cyclic
+     list.  To recognize the root of this list, the location field
+     needs to point to the original SSA name.  Since statements and
+     SSA names are of different data types, we need this union.  See
+     the explanation in struct imm_use_iterator.  */
+  union { gimple *stmt; tree ssa_name; } GTY((skip(""))) loc;
+  tree *GTY((skip(""))) use;
+};
+
+struct GTY(()) tree_ssa_name {
+  struct tree_typed typed;
+
+  /* _DECL wrapped by this SSA name.  */
+  tree var;
+
+  /* Statement that defines this SSA name.  */
+  gimple *def_stmt;
+
+  /* Value range information.  */
+  union ssa_name_info_type {
+    /* Pointer attributes used for alias analysis.  */
+    struct GTY ((tag ("0"))) ptr_info_def *ptr_info;
+    /* Value range attributes used for zero/sign extension elimination.  */
+    struct GTY ((tag ("1"))) range_info_def *range_info;
+  } GTY ((desc ("%1.typed.type ?" \
+		"!POINTER_TYPE_P (TREE_TYPE ((tree)&%1)) : 2"))) info;
+
+  /* Immediate uses list for this SSA_NAME.  */
+  struct ssa_use_operand_t imm_uses;
+};
+
+struct GTY(()) phi_arg_d {
+  /* imm_use MUST be the first element in struct because we do some
+     pointer arithmetic with it.  See phi_arg_index_from_use.  */
+  struct ssa_use_operand_t imm_use;
+  tree def;
+  location_t locus;
+};
+
+struct GTY(()) tree_omp_clause {
+  struct tree_common common;
+  location_t locus;
+  enum omp_clause_code code;
+  union omp_clause_subcode {
+    enum omp_clause_default_kind   default_kind;
+    enum omp_clause_schedule_kind  schedule_kind;
+    enum omp_clause_depend_kind    depend_kind;
+    /* See include/gomp-constants.h for enum gomp_map_kind's values.  */
+    unsigned int		   map_kind;
+    enum omp_clause_proc_bind_kind proc_bind_kind;
+    enum tree_code                 reduction_code;
+    enum omp_clause_linear_kind    linear_kind;
+    enum tree_code                 if_modifier;
+    enum omp_clause_defaultmap_kind defaultmap_kind;
+    /* The dimension a OMP_CLAUSE__GRIDDIM_ clause of a gridified target
+       construct describes.  */
+    unsigned int		   dimension;
+  } GTY ((skip)) subcode;
+
+  /* The gimplification of OMP_CLAUSE_REDUCTION_{INIT,MERGE} for omp-low's
+     usage.  */
+  gimple_seq gimple_reduction_init;
+  gimple_seq gimple_reduction_merge;
+
+  tree GTY ((length ("omp_clause_num_ops[OMP_CLAUSE_CODE ((tree)&%h)]")))
+    ops[1];
+};
+
+struct GTY(()) tree_block {
+  struct tree_base base;
+  tree chain;
+
+  unsigned block_num;
+
+  location_t locus;
+  location_t end_locus;
+
+  tree vars;
+  vec<tree, va_gc> *nonlocalized_vars;
+
+  tree subblocks;
+  tree supercontext;
+  tree abstract_origin;
+  tree fragment_origin;
+  tree fragment_chain;
+
+  /* Pointer to the DWARF lexical block.  */
+  struct die_struct *die;
+};
+
+struct GTY(()) tree_type_common {
+  struct tree_common common;
+  tree size;
+  tree size_unit;
+  tree attributes;
+  unsigned int uid;
+
+  unsigned int precision : 10;
+  unsigned no_force_blk_flag : 1;
+  unsigned needs_constructing_flag : 1;
+  unsigned transparent_aggr_flag : 1;
+  unsigned restrict_flag : 1;
+  unsigned contains_placeholder_bits : 2;
+
+  ENUM_BITFIELD(machine_mode) mode : 8;
+
+  unsigned string_flag : 1;
+  unsigned lang_flag_0 : 1;
+  unsigned lang_flag_1 : 1;
+  unsigned lang_flag_2 : 1;
+  unsigned lang_flag_3 : 1;
+  unsigned lang_flag_4 : 1;
+  unsigned lang_flag_5 : 1;
+  unsigned lang_flag_6 : 1;
+  unsigned lang_flag_7 : 1;
+
+  /* TYPE_ALIGN in log2; this has to be large enough to hold values
+     of the maximum of BIGGEST_ALIGNMENT and MAX_OFILE_ALIGNMENT,
+     the latter being usually the larger.  For ELF it is 8<<28,
+     so we need to store the value 32 (not 31, as we need the zero
+     as well), hence six bits.  */
+  unsigned align : 6;
+  unsigned warn_if_not_align : 6;
+  unsigned typeless_storage : 1;
+  unsigned empty_flag : 1;
+  unsigned spare : 17;
+
+  alias_set_type alias_set;
+  tree pointer_to;
+  tree reference_to;
+  union tree_type_symtab {
+    int GTY ((tag ("TYPE_SYMTAB_IS_ADDRESS"))) address;
+    struct die_struct * GTY ((tag ("TYPE_SYMTAB_IS_DIE"))) die;
+  } GTY ((desc ("debug_hooks->tree_type_symtab_field"))) symtab;
+  tree canonical;
+  tree next_variant;
+  tree main_variant;
+  tree context;
+  tree name;
+};
+
+struct GTY(()) tree_type_with_lang_specific {
+  struct tree_type_common common;
+  /* Points to a structure whose details depend on the language in use.  */
+  struct lang_type *lang_specific;
+};
+
+struct GTY(()) tree_type_non_common {
+  struct tree_type_with_lang_specific with_lang_specific;
+  tree values;
+  tree minval;
+  tree maxval;
+  tree lang_1;
+};
+
+struct GTY (()) tree_binfo {
+  struct tree_common common;
+
+  tree offset;
+  tree vtable;
+  tree virtuals;
+  tree vptr_field;
+  vec<tree, va_gc> *base_accesses;
+  tree inheritance;
+
+  tree vtt_subvtt;
+  tree vtt_vptr;
+
+  vec<tree, va_gc> base_binfos;
+};
+
+struct GTY(()) tree_decl_minimal {
+  struct tree_common common;
+  location_t locus;
+  unsigned int uid;
+  tree name;
+  tree context;
+};
+
+struct GTY(()) tree_decl_common {
+  struct tree_decl_minimal common;
+  tree size;
+
+  ENUM_BITFIELD(machine_mode) mode : 8;
+
+  unsigned nonlocal_flag : 1;
+  unsigned virtual_flag : 1;
+  unsigned ignored_flag : 1;
+  unsigned abstract_flag : 1;
+  unsigned artificial_flag : 1;
+  unsigned preserve_flag: 1;
+  unsigned debug_expr_is_from : 1;
+
+  unsigned lang_flag_0 : 1;
+  unsigned lang_flag_1 : 1;
+  unsigned lang_flag_2 : 1;
+  unsigned lang_flag_3 : 1;
+  unsigned lang_flag_4 : 1;
+  unsigned lang_flag_5 : 1;
+  unsigned lang_flag_6 : 1;
+  unsigned lang_flag_7 : 1;
+  unsigned lang_flag_8 : 1;
+
+  /* In VAR_DECL and PARM_DECL, this is DECL_REGISTER
+     IN TRANSLATION_UNIT_DECL, this is TRANSLATION_UNIT_WARN_EMPTY_P.  */
+  unsigned decl_flag_0 : 1;
+  /* In FIELD_DECL, this is DECL_BIT_FIELD
+     In VAR_DECL and FUNCTION_DECL, this is DECL_EXTERNAL.
+     In TYPE_DECL, this is TYPE_DECL_SUPPRESS_DEBUG.  */
+  unsigned decl_flag_1 : 1;
+  /* In FIELD_DECL, this is DECL_NONADDRESSABLE_P
+     In VAR_DECL, PARM_DECL and RESULT_DECL, this is
+     DECL_HAS_VALUE_EXPR_P.  */
+  unsigned decl_flag_2 : 1;
+  /* In FIELD_DECL, this is DECL_PADDING_P.  */
+  unsigned decl_flag_3 : 1;
+  /* Logically, these two would go in a theoretical base shared by var and
+     parm decl. */
+  unsigned gimple_reg_flag : 1;
+  /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_BY_REFERENCE.  */
+  unsigned decl_by_reference_flag : 1;
+  /* In a VAR_DECL and PARM_DECL, this is DECL_READ_P.  */
+  unsigned decl_read_flag : 1;
+  /* In a VAR_DECL or RESULT_DECL, this is DECL_NONSHAREABLE.  */
+  unsigned decl_nonshareable_flag : 1;
+
+  /* DECL_OFFSET_ALIGN, used only for FIELD_DECLs.  */
+  unsigned int off_align : 6;
+
+  /* DECL_ALIGN.  It should have the same size as TYPE_ALIGN.  */
+  unsigned int align : 6;
+
+  /* DECL_WARN_IF_NOT_ALIGN.  It should have the same size as
+     TYPE_WARN_IF_NOT_ALIGN.  */
+  unsigned int warn_if_not_align : 6;
+
+  /* 14 bits unused.  */
+
+  /* UID for points-to sets, stable over copying from inlining.  */
+  unsigned int pt_uid;
+
+  tree size_unit;
+  tree initial;
+  tree attributes;
+  tree abstract_origin;
+
+  /* Points to a structure whose details depend on the language in use.  */
+  struct lang_decl *lang_specific;
+};
+
+struct GTY(()) tree_decl_with_rtl {
+  struct tree_decl_common common;
+  rtx rtl;
+};
+
+struct GTY(()) tree_field_decl {
+  struct tree_decl_common common;
+
+  tree offset;
+  tree bit_field_type;
+  tree qualifier;
+  tree bit_offset;
+  tree fcontext;
+};
+
+struct GTY(()) tree_label_decl {
+  struct tree_decl_with_rtl common;
+  int label_decl_uid;
+  int eh_landing_pad_nr;
+};
+
+struct GTY(()) tree_result_decl {
+  struct tree_decl_with_rtl common;
+};
+
+struct GTY(()) tree_const_decl {
+  struct tree_decl_common common;
+};
+
+struct GTY(()) tree_parm_decl {
+  struct tree_decl_with_rtl common;
+  rtx incoming_rtl;
+};
+
+struct GTY(()) tree_decl_with_vis {
+ struct tree_decl_with_rtl common;
+ tree assembler_name;
+ struct symtab_node *symtab_node;
+
+ /* Belong to VAR_DECL exclusively.  */
+ unsigned defer_output : 1;
+ unsigned hard_register : 1;
+ unsigned common_flag : 1;
+ unsigned in_text_section : 1;
+ unsigned in_constant_pool : 1;
+ unsigned dllimport_flag : 1;
+ /* Don't belong to VAR_DECL exclusively.  */
+ unsigned weak_flag : 1;
+
+ unsigned seen_in_bind_expr : 1;
+ unsigned comdat_flag : 1;
+ /* Used for FUNCTION_DECL, VAR_DECL and in C++ for TYPE_DECL.  */
+ ENUM_BITFIELD(symbol_visibility) visibility : 2;
+ unsigned visibility_specified : 1;
+
+ /* Belong to FUNCTION_DECL exclusively.  */
+ unsigned init_priority_p : 1;
+ /* Used by C++ only.  Might become a generic decl flag.  */
+ unsigned shadowed_for_var_p : 1;
+ /* Belong to FUNCTION_DECL exclusively.  */
+ unsigned cxx_constructor : 1;
+ /* Belong to FUNCTION_DECL exclusively.  */
+ unsigned cxx_destructor : 1;
+ /* Belong to FUNCTION_DECL exclusively.  */
+ unsigned final : 1;
+ /* Belong to FUNCTION_DECL exclusively.  */
+ unsigned regdecl_flag : 1;
+ /* 14 unused bits. */
+};
+
+struct GTY(()) tree_var_decl {
+  struct tree_decl_with_vis common;
+};
+
+struct GTY(()) tree_decl_non_common {
+  struct tree_decl_with_vis common;
+  /* Almost all FE's use this.  */
+  tree result;
+};
+
+/* FUNCTION_DECL inherits from DECL_NON_COMMON because of the use of the
+   arguments/result/saved_tree fields by front ends.   It was either inherit
+   FUNCTION_DECL from non_common, or inherit non_common from FUNCTION_DECL,
+   which seemed a bit strange.  */
+
+struct GTY(()) tree_function_decl {
+  struct tree_decl_non_common common;
+
+  struct function *f;
+
+  /* Arguments of the function.  */
+  tree arguments;
+  /* The personality function. Used for stack unwinding. */
+  tree personality;
+
+  /* Function specific options that are used by this function.  */
+  tree function_specific_target;	/* target options */
+  tree function_specific_optimization;	/* optimization options */
+
+  /* Generic function body.  */
+  tree saved_tree;
+  /* Index within a virtual table.  */
+  tree vindex;
+
+  /* In a FUNCTION_DECL for which DECL_BUILT_IN holds, this is
+     DECL_FUNCTION_CODE.  Otherwise unused.
+     ???  The bitfield needs to be able to hold all target function
+	  codes as well.  */
+  ENUM_BITFIELD(built_in_function) function_code : 12;
+  ENUM_BITFIELD(built_in_class) built_in_class : 2;
+
+  unsigned static_ctor_flag : 1;
+  unsigned static_dtor_flag : 1;
+
+  unsigned uninlinable : 1;
+  unsigned possibly_inlined : 1;
+  unsigned novops_flag : 1;
+  unsigned returns_twice_flag : 1;
+  unsigned malloc_flag : 1;
+  unsigned operator_new_flag : 1;
+  unsigned declared_inline_flag : 1;
+  unsigned no_inline_warning_flag : 1;
+
+  unsigned no_instrument_function_entry_exit : 1;
+  unsigned no_limit_stack : 1;
+  unsigned disregard_inline_limits : 1;
+  unsigned pure_flag : 1;
+  unsigned looping_const_or_pure_flag : 1;
+  unsigned has_debug_args_flag : 1;
+  unsigned versioned_function : 1;
+  unsigned lambda_function: 1;
+  /* No bits left.  */
+};
+
+struct GTY(()) tree_translation_unit_decl {
+  struct tree_decl_common common;
+  /* Source language of this translation unit.  Used for DWARF output.  */
+  const char * GTY((skip(""))) language;
+  /* TODO: Non-optimization used to build this translation unit.  */
+  /* TODO: Root of a partial DWARF tree for global types and decls.  */
+};
+
+struct GTY(()) tree_type_decl {
+  struct tree_decl_non_common common;
+
+};
+
+struct GTY ((chain_next ("%h.next"), chain_prev ("%h.prev"))) tree_statement_list_node
+ {
+  struct tree_statement_list_node *prev;
+  struct tree_statement_list_node *next;
+  tree stmt;
+};
+
+struct GTY(()) tree_statement_list
+ {
+  struct tree_typed typed;
+  struct tree_statement_list_node *head;
+  struct tree_statement_list_node *tail;
+};
+
+
+/* Optimization options used by a function.  */
+
+struct GTY(()) tree_optimization_option {
+  struct tree_base base;
+
+  /* The optimization options used by the user.  */
+  struct cl_optimization *opts;
+
+  /* Target optabs for this set of optimization options.  This is of
+     type `struct target_optabs *'.  */
+  void *GTY ((atomic)) optabs;
+
+  /* The value of this_target_optabs against which the optabs above were
+     generated.  */
+  struct target_optabs *GTY ((skip)) base_optabs;
+};
+
+/* Forward declaration, defined in target-globals.h.  */
+
+struct GTY(()) target_globals;
+
+/* Target options used by a function.  */
+
+struct GTY(()) tree_target_option {
+  struct tree_base base;
+
+  /* Target globals for the corresponding target option.  */
+  struct target_globals *globals;
+
+  /* The optimization options used by the user.  */
+  struct cl_target_option *opts;
+};
+
+/* Define the overall contents of a tree node.
+   It may be any of the structures declared above
+   for various types of node.  */
+union GTY ((ptr_alias (union lang_tree_node),
+	    desc ("tree_node_structure (&%h)"), variable_size)) tree_node {
+  struct tree_base GTY ((tag ("TS_BASE"))) base;
+  struct tree_typed GTY ((tag ("TS_TYPED"))) typed;
+  struct tree_common GTY ((tag ("TS_COMMON"))) common;
+  struct tree_int_cst GTY ((tag ("TS_INT_CST"))) int_cst;
+  struct tree_poly_int_cst GTY ((tag ("TS_POLY_INT_CST"))) poly_int_cst;
+  struct tree_real_cst GTY ((tag ("TS_REAL_CST"))) real_cst;
+  struct tree_fixed_cst GTY ((tag ("TS_FIXED_CST"))) fixed_cst;
+  struct tree_vector GTY ((tag ("TS_VECTOR"))) vector;
+  struct tree_string GTY ((tag ("TS_STRING"))) string;
+  struct tree_complex GTY ((tag ("TS_COMPLEX"))) complex;
+  struct tree_identifier GTY ((tag ("TS_IDENTIFIER"))) identifier;
+  struct tree_decl_minimal GTY((tag ("TS_DECL_MINIMAL"))) decl_minimal;
+  struct tree_decl_common GTY ((tag ("TS_DECL_COMMON"))) decl_common;
+  struct tree_decl_with_rtl GTY ((tag ("TS_DECL_WRTL"))) decl_with_rtl;
+  struct tree_decl_non_common  GTY ((tag ("TS_DECL_NON_COMMON")))
+    decl_non_common;
+  struct tree_parm_decl  GTY  ((tag ("TS_PARM_DECL"))) parm_decl;
+  struct tree_decl_with_vis GTY ((tag ("TS_DECL_WITH_VIS"))) decl_with_vis;
+  struct tree_var_decl GTY ((tag ("TS_VAR_DECL"))) var_decl;
+  struct tree_field_decl GTY ((tag ("TS_FIELD_DECL"))) field_decl;
+  struct tree_label_decl GTY ((tag ("TS_LABEL_DECL"))) label_decl;
+  struct tree_result_decl GTY ((tag ("TS_RESULT_DECL"))) result_decl;
+  struct tree_const_decl GTY ((tag ("TS_CONST_DECL"))) const_decl;
+  struct tree_type_decl GTY ((tag ("TS_TYPE_DECL"))) type_decl;
+  struct tree_function_decl GTY ((tag ("TS_FUNCTION_DECL"))) function_decl;
+  struct tree_translation_unit_decl GTY ((tag ("TS_TRANSLATION_UNIT_DECL")))
+    translation_unit_decl;
+  struct tree_type_common GTY ((tag ("TS_TYPE_COMMON"))) type_common;
+  struct tree_type_with_lang_specific GTY ((tag ("TS_TYPE_WITH_LANG_SPECIFIC")))
+    type_with_lang_specific;
+  struct tree_type_non_common GTY ((tag ("TS_TYPE_NON_COMMON")))
+    type_non_common;
+  struct tree_list GTY ((tag ("TS_LIST"))) list;
+  struct tree_vec GTY ((tag ("TS_VEC"))) vec;
+  struct tree_exp GTY ((tag ("TS_EXP"))) exp;
+  struct tree_ssa_name GTY ((tag ("TS_SSA_NAME"))) ssa_name;
+  struct tree_block GTY ((tag ("TS_BLOCK"))) block;
+  struct tree_binfo GTY ((tag ("TS_BINFO"))) binfo;
+  struct tree_statement_list GTY ((tag ("TS_STATEMENT_LIST"))) stmt_list;
+  struct tree_constructor GTY ((tag ("TS_CONSTRUCTOR"))) constructor;
+  struct tree_omp_clause GTY ((tag ("TS_OMP_CLAUSE"))) omp_clause;
+  struct tree_optimization_option GTY ((tag ("TS_OPTIMIZATION"))) optimization;
+  struct tree_target_option GTY ((tag ("TS_TARGET_OPTION"))) target_option;
+};
+
+/* Structure describing an attribute and a function to handle it.  */
+struct attribute_spec {
+  /* The name of the attribute (without any leading or trailing __),
+     or NULL to mark the end of a table of attributes.  */
+  const char *name;
+  /* The minimum length of the list of arguments of the attribute.  */
+  int min_length;
+  /* The maximum length of the list of arguments of the attribute
+     (-1 for no maximum).  */
+  int max_length;
+  /* Whether this attribute requires a DECL.  If it does, it will be passed
+     from types of DECLs, function return types and array element types to
+     the DECLs, function types and array types respectively; but when
+     applied to a type in any other circumstances, it will be ignored with
+     a warning.  (If greater control is desired for a given attribute,
+     this should be false, and the flags argument to the handler may be
+     used to gain greater control in that case.)  */
+  bool decl_required;
+  /* Whether this attribute requires a type.  If it does, it will be passed
+     from a DECL to the type of that DECL.  */
+  bool type_required;
+  /* Whether this attribute requires a function (or method) type.  If it does,
+     it will be passed from a function pointer type to the target type,
+     and from a function return type (which is not itself a function
+     pointer type) to the function type.  */
+  bool function_type_required;
+  /* Specifies if attribute affects type's identity.  */
+  bool affects_type_identity;
+  /* Function to handle this attribute.  NODE points to the node to which
+     the attribute is to be applied.  If a DECL, it should be modified in
+     place; if a TYPE, a copy should be created.  NAME is the canonicalized
+     name of the attribute i.e. without any leading or trailing underscores.
+     ARGS is the TREE_LIST of the arguments (which may be NULL).  FLAGS gives
+     further information about the context of the attribute.  Afterwards, the
+     attributes will be added to the DECL_ATTRIBUTES or TYPE_ATTRIBUTES, as
+     appropriate, unless *NO_ADD_ATTRS is set to true (which should be done on
+     error, as well as in any other cases when the attributes should not be
+     added to the DECL or TYPE).  Depending on FLAGS, any attributes to be
+     applied to another type or DECL later may be returned;
+     otherwise the return value should be NULL_TREE.  This pointer may be
+     NULL if no special handling is required beyond the checks implied
+     by the rest of this structure.  */
+  tree (*handler) (tree *node, tree name, tree args,
+		   int flags, bool *no_add_attrs);
+
+  /* Specifies the name of an attribute that's mutually exclusive with
+     this one, and whether the relationship applies to the function,
+     variable, or type form of the attribute.  */
+  struct exclusions {
+    const char *name;
+    bool function;
+    bool variable;
+    bool type;
+  };
+
+  /* An array of attribute exclusions describing names of other attributes
+     that this attribute is mutually exclusive with.  */
+  const exclusions *exclude;
+};
+
+/* These functions allow a front-end to perform a manual layout of a
+   RECORD_TYPE.  (For instance, if the placement of subsequent fields
+   depends on the placement of fields so far.)  Begin by calling
+   start_record_layout.  Then, call place_field for each of the
+   fields.  Then, call finish_record_layout.  See layout_type for the
+   default way in which these functions are used.  */
+typedef struct record_layout_info_s {
+  /* The RECORD_TYPE that we are laying out.  */
+  tree t;
+  /* The offset into the record so far, in bytes, not including bits in
+     BITPOS.  */
+  tree offset;
+  /* The last known alignment of SIZE.  */
+  unsigned int offset_align;
+  /* The bit position within the last OFFSET_ALIGN bits, in bits.  */
+  tree bitpos;
+  /* The alignment of the record so far, in bits.  */
+  unsigned int record_align;
+  /* The alignment of the record so far, ignoring #pragma pack and
+     __attribute__ ((packed)), in bits.  */
+  unsigned int unpacked_align;
+  /* The previous field laid out.  */
+  tree prev_field;
+  /* The static variables (i.e., class variables, as opposed to
+     instance variables) encountered in T.  */
+  vec<tree, va_gc> *pending_statics;
+  /* Bits remaining in the current alignment group */
+  int remaining_in_alignment;
+  /* True if we've seen a packed field that didn't have normal
+     alignment anyway.  */
+  int packed_maybe_necessary;
+} *record_layout_info;
+
+/* Iterator for going through the function arguments.  */
+struct function_args_iterator {
+  tree next;			/* TREE_LIST pointing to the next argument */
+};
+
+/* Structures to map from a tree to another tree.  */
+struct GTY(()) tree_map_base {
+  tree from;
+};
+
+/* Map from a tree to another tree.  */
+
+struct GTY((for_user)) tree_map {
+  struct tree_map_base base;
+  unsigned int hash;
+  tree to;
+};
+
+/* Map from a decl tree to another tree.  */
+struct GTY((for_user)) tree_decl_map {
+  struct tree_map_base base;
+  tree to;
+};
+
+/* Map from a tree to an int.  */
+struct GTY((for_user)) tree_int_map {
+  struct tree_map_base base;
+  unsigned int to;
+};
+
+/* Map from a decl tree to a tree vector.  */
+struct GTY((for_user)) tree_vec_map {
+  struct tree_map_base base;
+  vec<tree, va_gc> *to;
+};
+
+/* Abstract iterators for CALL_EXPRs.  These static inline definitions
+   have to go towards the end of tree.h so that union tree_node is fully
+   defined by this point.  */
+
+/* Structure containing iterator state.  */
+struct call_expr_arg_iterator {
+  tree t;	/* the call_expr */
+  int n;	/* argument count */
+  int i;	/* next argument index */
+};
+
+struct const_call_expr_arg_iterator {
+  const_tree t;	/* the call_expr */
+  int n;	/* argument count */
+  int i;	/* next argument index */
+};
+
+/* The builtin_info structure holds the FUNCTION_DECL of the standard builtin
+   function, and flags.  */
+struct GTY(()) builtin_info_type {
+  tree decl;
+  /* Whether the user can use <xxx> instead of explicitly using calls
+     to __builtin_<xxx>.  */
+  unsigned implicit_p : 1;
+  /* Whether the user has provided a declaration of <xxx>.  */
+  unsigned declared_p : 1;
+};
+
+/* Information about a _FloatN or _FloatNx type that may be
+   supported.  */
+struct floatn_type_info {
+  /* The number N in the type name.  */
+  int n;
+  /* Whether it is an extended type _FloatNx (true) or an interchange
+     type (false).  */
+  bool extended;
+};
+
+
+/*---------------------------------------------------------------------------
+                                Global variables
+---------------------------------------------------------------------------*/
+/* Matrix describing the structures contained in a given tree code.  */
+extern bool tree_contains_struct[MAX_TREE_CODES][64];
+
+/* Class of tree given its code.  */
+extern const enum tree_code_class tree_code_type[];
+
+/* Each tree code class has an associated string representation.
+   These must correspond to the tree_code_class entries.  */
+extern const char *const tree_code_class_strings[];
+
+/* Number of argument-words in each kind of tree-node.  */
+extern const unsigned char tree_code_length[];
+
+/* Vector of all alias pairs for global symbols.  */
+extern GTY(()) vec<alias_pair, va_gc> *alias_pairs;
+
+/* Names of all the built_in classes.  */
+extern const char *const built_in_class_names[BUILT_IN_LAST];
+
+/* Names of all the built_in functions.  */
+extern const char * built_in_names[(int) END_BUILTINS];
+
+/* Number of operands and names for each OMP_CLAUSE node.  */
+extern unsigned const char omp_clause_num_ops[];
+extern const char * const omp_clause_code_name[];
+
+/* A vector of all translation-units.  */
+extern GTY (()) vec<tree, va_gc> *all_translation_units;
+
+/* Vector of standard trees used by the C compiler.  */
+extern GTY(()) tree global_trees[TI_MAX];
+
+/* The standard C integer types.  Use integer_type_kind to index into
+   this array.  */
+extern GTY(()) tree integer_types[itk_none];
+
+/* Types used to represent sizes.  */
+extern GTY(()) tree sizetype_tab[(int) stk_type_kind_last];
+
+/* Arrays for keeping track of tree node statistics.  */
+extern uint64_t tree_node_counts[];
+extern uint64_t tree_node_sizes[];
+
+/* True if we are in gimple form and the actions of the folders need to
+   be restricted.  False if we are not in gimple form and folding is not
+   restricted to creating gimple expressions.  */
+extern bool in_gimple_form;
+
+/* Functional interface to the builtin functions.  */
+extern GTY(()) builtin_info_type builtin_info[(int)END_BUILTINS];
+
+/* If nonzero, an upper limit on alignment of structure fields, in bits,  */
+extern unsigned int maximum_field_alignment;
+
+/* Points to the FUNCTION_DECL of the function whose body we are reading.  */
+extern GTY(()) tree current_function_decl;
+
+/* Nonzero means a FUNC_BEGIN label was emitted.  */
+extern GTY(()) const char * current_function_func_begin_label;
+
+/* Information about the _FloatN and _FloatNx types.  */
+extern const floatn_type_info floatn_nx_types[NUM_FLOATN_NX_TYPES];
+
+#endif  // GCC_TREE_CORE_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-data-ref.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-data-ref.h
new file mode 100644
index 0000000..2a5082d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-data-ref.h
@@ -0,0 +1,694 @@
+/* Data references and dependences detectors.
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Contributed by Sebastian Pop <pop@cri.ensmp.fr>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_DATA_REF_H
+#define GCC_TREE_DATA_REF_H
+
+#include "graphds.h"
+#include "tree-chrec.h"
+#include "opt-problem.h"
+
+/*
+  innermost_loop_behavior describes the evolution of the address of the memory
+  reference in the innermost enclosing loop.  The address is expressed as
+  BASE + STEP * # of iteration, and base is further decomposed as the base
+  pointer (BASE_ADDRESS),  loop invariant offset (OFFSET) and
+  constant offset (INIT).  Examples, in loop nest
+
+  for (i = 0; i < 100; i++)
+    for (j = 3; j < 100; j++)
+
+                       Example 1                      Example 2
+      data-ref         a[j].b[i][j]                   *(p + x + 16B + 4B * j)
+
+
+  innermost_loop_behavior
+      base_address     &a                             p
+      offset           i * D_i			      x
+      init             3 * D_j + offsetof (b)         28
+      step             D_j                            4
+
+  */
+struct innermost_loop_behavior
+{
+  tree base_address;
+  tree offset;
+  tree init;
+  tree step;
+
+  /* BASE_ADDRESS is known to be misaligned by BASE_MISALIGNMENT bytes
+     from an alignment boundary of BASE_ALIGNMENT bytes.  For example,
+     if we had:
+
+       struct S __attribute__((aligned(16))) { ... };
+
+       char *ptr;
+       ... *(struct S *) (ptr - 4) ...;
+
+     the information would be:
+
+       base_address:      ptr
+       base_aligment:      16
+       base_misalignment:   4
+       init:               -4
+
+     where init cancels the base misalignment.  If instead we had a
+     reference to a particular field:
+
+       struct S __attribute__((aligned(16))) { ... int f; ... };
+
+       char *ptr;
+       ... ((struct S *) (ptr - 4))->f ...;
+
+     the information would be:
+
+       base_address:      ptr
+       base_aligment:      16
+       base_misalignment:   4
+       init:               -4 + offsetof (S, f)
+
+     where base_address + init might also be misaligned, and by a different
+     amount from base_address.  */
+  unsigned int base_alignment;
+  unsigned int base_misalignment;
+
+  /* The largest power of two that divides OFFSET, capped to a suitably
+     high value if the offset is zero.  This is a byte rather than a bit
+     quantity.  */
+  unsigned int offset_alignment;
+
+  /* Likewise for STEP.  */
+  unsigned int step_alignment;
+};
+
+/* Describes the evolutions of indices of the memory reference.  The indices
+   are indices of the ARRAY_REFs, indexes in artificial dimensions
+   added for member selection of records and the operands of MEM_REFs.
+   BASE_OBJECT is the part of the reference that is loop-invariant
+   (note that this reference does not have to cover the whole object
+   being accessed, in which case UNCONSTRAINED_BASE is set; hence it is
+   not recommended to use BASE_OBJECT in any code generation).
+   For the examples above,
+
+   base_object:        a                              *(p + x + 4B * j_0)
+   indices:            {j_0, +, 1}_2                  {16, +, 4}_2
+		       4
+		       {i_0, +, 1}_1
+		       {j_0, +, 1}_2
+*/
+
+struct indices
+{
+  /* The object.  */
+  tree base_object;
+
+  /* A list of chrecs.  Access functions of the indices.  */
+  vec<tree> access_fns;
+
+  /* Whether BASE_OBJECT is an access representing the whole object
+     or whether the access could not be constrained.  */
+  bool unconstrained_base;
+};
+
+struct dr_alias
+{
+  /* The alias information that should be used for new pointers to this
+     location.  */
+  struct ptr_info_def *ptr_info;
+};
+
+/* An integer vector.  A vector formally consists of an element of a vector
+   space. A vector space is a set that is closed under vector addition
+   and scalar multiplication.  In this vector space, an element is a list of
+   integers.  */
+typedef HOST_WIDE_INT lambda_int;
+typedef lambda_int *lambda_vector;
+
+/* An integer matrix.  A matrix consists of m vectors of length n (IE
+   all vectors are the same length).  */
+typedef lambda_vector *lambda_matrix;
+
+
+
+struct data_reference
+{
+  /* A pointer to the statement that contains this DR.  */
+  gimple *stmt;
+
+  /* A pointer to the memory reference.  */
+  tree ref;
+
+  /* Auxiliary info specific to a pass.  */
+  void *aux;
+
+  /* True when the data reference is in RHS of a stmt.  */
+  bool is_read;
+
+  /* True when the data reference is conditional within STMT,
+     i.e. if it might not occur even when the statement is executed
+     and runs to completion.  */
+  bool is_conditional_in_stmt;
+
+  /* Behavior of the memory reference in the innermost loop.  */
+  struct innermost_loop_behavior innermost;
+
+  /* Subscripts of this data reference.  */
+  struct indices indices;
+
+  /* Alias information for the data reference.  */
+  struct dr_alias alias;
+};
+
+#define DR_STMT(DR)                (DR)->stmt
+#define DR_REF(DR)                 (DR)->ref
+#define DR_BASE_OBJECT(DR)         (DR)->indices.base_object
+#define DR_UNCONSTRAINED_BASE(DR)  (DR)->indices.unconstrained_base
+#define DR_ACCESS_FNS(DR)	   (DR)->indices.access_fns
+#define DR_ACCESS_FN(DR, I)        DR_ACCESS_FNS (DR)[I]
+#define DR_NUM_DIMENSIONS(DR)      DR_ACCESS_FNS (DR).length ()
+#define DR_IS_READ(DR)             (DR)->is_read
+#define DR_IS_WRITE(DR)            (!DR_IS_READ (DR))
+#define DR_IS_CONDITIONAL_IN_STMT(DR) (DR)->is_conditional_in_stmt
+#define DR_BASE_ADDRESS(DR)        (DR)->innermost.base_address
+#define DR_OFFSET(DR)              (DR)->innermost.offset
+#define DR_INIT(DR)                (DR)->innermost.init
+#define DR_STEP(DR)                (DR)->innermost.step
+#define DR_PTR_INFO(DR)            (DR)->alias.ptr_info
+#define DR_BASE_ALIGNMENT(DR)      (DR)->innermost.base_alignment
+#define DR_BASE_MISALIGNMENT(DR)   (DR)->innermost.base_misalignment
+#define DR_OFFSET_ALIGNMENT(DR)    (DR)->innermost.offset_alignment
+#define DR_STEP_ALIGNMENT(DR)      (DR)->innermost.step_alignment
+#define DR_INNERMOST(DR)           (DR)->innermost
+
+typedef struct data_reference *data_reference_p;
+
+/* This struct is used to store the information of a data reference,
+   including the data ref itself and the segment length for aliasing
+   checks.  This is used to merge alias checks.  */
+
+struct dr_with_seg_len
+{
+  dr_with_seg_len (data_reference_p d, tree len, unsigned HOST_WIDE_INT size,
+		   unsigned int a)
+    : dr (d), seg_len (len), access_size (size), align (a) {}
+
+  data_reference_p dr;
+  /* The offset of the last access that needs to be checked minus
+     the offset of the first.  */
+  tree seg_len;
+  /* A value that, when added to abs (SEG_LEN), gives the total number of
+     bytes in the segment.  */
+  poly_uint64 access_size;
+  /* The minimum common alignment of DR's start address, SEG_LEN and
+     ACCESS_SIZE.  */
+  unsigned int align;
+};
+
+/* This struct contains two dr_with_seg_len objects with aliasing data
+   refs.  Two comparisons are generated from them.  */
+
+struct dr_with_seg_len_pair_t
+{
+  dr_with_seg_len_pair_t (const dr_with_seg_len& d1,
+			       const dr_with_seg_len& d2)
+    : first (d1), second (d2) {}
+
+  dr_with_seg_len first;
+  dr_with_seg_len second;
+};
+
+enum data_dependence_direction {
+  dir_positive,
+  dir_negative,
+  dir_equal,
+  dir_positive_or_negative,
+  dir_positive_or_equal,
+  dir_negative_or_equal,
+  dir_star,
+  dir_independent
+};
+
+/* The description of the grid of iterations that overlap.  At most
+   two loops are considered at the same time just now, hence at most
+   two functions are needed.  For each of the functions, we store
+   the vector of coefficients, f[0] + x * f[1] + y * f[2] + ...,
+   where x, y, ... are variables.  */
+
+#define MAX_DIM 2
+
+/* Special values of N.  */
+#define NO_DEPENDENCE 0
+#define NOT_KNOWN (MAX_DIM + 1)
+#define CF_NONTRIVIAL_P(CF) ((CF)->n != NO_DEPENDENCE && (CF)->n != NOT_KNOWN)
+#define CF_NOT_KNOWN_P(CF) ((CF)->n == NOT_KNOWN)
+#define CF_NO_DEPENDENCE_P(CF) ((CF)->n == NO_DEPENDENCE)
+
+typedef vec<tree> affine_fn;
+
+struct conflict_function
+{
+  unsigned n;
+  affine_fn fns[MAX_DIM];
+};
+
+/* What is a subscript?  Given two array accesses a subscript is the
+   tuple composed of the access functions for a given dimension.
+   Example: Given A[f1][f2][f3] and B[g1][g2][g3], there are three
+   subscripts: (f1, g1), (f2, g2), (f3, g3).  These three subscripts
+   are stored in the data_dependence_relation structure under the form
+   of an array of subscripts.  */
+
+struct subscript
+{
+  /* The access functions of the two references.  */
+  tree access_fn[2];
+
+  /* A description of the iterations for which the elements are
+     accessed twice.  */
+  conflict_function *conflicting_iterations_in_a;
+  conflict_function *conflicting_iterations_in_b;
+
+  /* This field stores the information about the iteration domain
+     validity of the dependence relation.  */
+  tree last_conflict;
+
+  /* Distance from the iteration that access a conflicting element in
+     A to the iteration that access this same conflicting element in
+     B.  The distance is a tree scalar expression, i.e. a constant or a
+     symbolic expression, but certainly not a chrec function.  */
+  tree distance;
+};
+
+typedef struct subscript *subscript_p;
+
+#define SUB_ACCESS_FN(SUB, I) (SUB)->access_fn[I]
+#define SUB_CONFLICTS_IN_A(SUB) (SUB)->conflicting_iterations_in_a
+#define SUB_CONFLICTS_IN_B(SUB) (SUB)->conflicting_iterations_in_b
+#define SUB_LAST_CONFLICT(SUB) (SUB)->last_conflict
+#define SUB_DISTANCE(SUB) (SUB)->distance
+
+/* A data_dependence_relation represents a relation between two
+   data_references A and B.  */
+
+struct data_dependence_relation
+{
+
+  struct data_reference *a;
+  struct data_reference *b;
+
+  /* A "yes/no/maybe" field for the dependence relation:
+
+     - when "ARE_DEPENDENT == NULL_TREE", there exist a dependence
+       relation between A and B, and the description of this relation
+       is given in the SUBSCRIPTS array,
+
+     - when "ARE_DEPENDENT == chrec_known", there is no dependence and
+       SUBSCRIPTS is empty,
+
+     - when "ARE_DEPENDENT == chrec_dont_know", there may be a dependence,
+       but the analyzer cannot be more specific.  */
+  tree are_dependent;
+
+  /* If nonnull, COULD_BE_INDEPENDENT_P is true and the accesses are
+     independent when the runtime addresses of OBJECT_A and OBJECT_B
+     are different.  The addresses of both objects are invariant in the
+     loop nest.  */
+  tree object_a;
+  tree object_b;
+
+  /* For each subscript in the dependence test, there is an element in
+     this array.  This is the attribute that labels the edge A->B of
+     the data_dependence_relation.  */
+  vec<subscript_p> subscripts;
+
+  /* The analyzed loop nest.  */
+  vec<loop_p> loop_nest;
+
+  /* The classic direction vector.  */
+  vec<lambda_vector> dir_vects;
+
+  /* The classic distance vector.  */
+  vec<lambda_vector> dist_vects;
+
+  /* An index in loop_nest for the innermost loop that varies for
+     this data dependence relation.  */
+  unsigned inner_loop;
+
+  /* Is the dependence reversed with respect to the lexicographic order?  */
+  bool reversed_p;
+
+  /* When the dependence relation is affine, it can be represented by
+     a distance vector.  */
+  bool affine_p;
+
+  /* Set to true when the dependence relation is on the same data
+     access.  */
+  bool self_reference_p;
+
+  /* True if the dependence described is conservatively correct rather
+     than exact, and if it is still possible for the accesses to be
+     conditionally independent.  For example, the a and b references in:
+
+       struct s *a, *b;
+       for (int i = 0; i < n; ++i)
+         a->f[i] += b->f[i];
+
+     conservatively have a distance vector of (0), for the case in which
+     a == b, but the accesses are independent if a != b.  Similarly,
+     the a and b references in:
+
+       struct s *a, *b;
+       for (int i = 0; i < n; ++i)
+         a[0].f[i] += b[i].f[i];
+
+     conservatively have a distance vector of (0), but they are indepenent
+     when a != b + i.  In contrast, the references in:
+
+       struct s *a;
+       for (int i = 0; i < n; ++i)
+         a->f[i] += a->f[i];
+
+     have the same distance vector of (0), but the accesses can never be
+     independent.  */
+  bool could_be_independent_p;
+};
+
+typedef struct data_dependence_relation *ddr_p;
+
+#define DDR_A(DDR) (DDR)->a
+#define DDR_B(DDR) (DDR)->b
+#define DDR_AFFINE_P(DDR) (DDR)->affine_p
+#define DDR_ARE_DEPENDENT(DDR) (DDR)->are_dependent
+#define DDR_OBJECT_A(DDR) (DDR)->object_a
+#define DDR_OBJECT_B(DDR) (DDR)->object_b
+#define DDR_SUBSCRIPTS(DDR) (DDR)->subscripts
+#define DDR_SUBSCRIPT(DDR, I) DDR_SUBSCRIPTS (DDR)[I]
+#define DDR_NUM_SUBSCRIPTS(DDR) DDR_SUBSCRIPTS (DDR).length ()
+
+#define DDR_LOOP_NEST(DDR) (DDR)->loop_nest
+/* The size of the direction/distance vectors: the number of loops in
+   the loop nest.  */
+#define DDR_NB_LOOPS(DDR) (DDR_LOOP_NEST (DDR).length ())
+#define DDR_INNER_LOOP(DDR) (DDR)->inner_loop
+#define DDR_SELF_REFERENCE(DDR) (DDR)->self_reference_p
+
+#define DDR_DIST_VECTS(DDR) ((DDR)->dist_vects)
+#define DDR_DIR_VECTS(DDR) ((DDR)->dir_vects)
+#define DDR_NUM_DIST_VECTS(DDR) \
+  (DDR_DIST_VECTS (DDR).length ())
+#define DDR_NUM_DIR_VECTS(DDR) \
+  (DDR_DIR_VECTS (DDR).length ())
+#define DDR_DIR_VECT(DDR, I) \
+  DDR_DIR_VECTS (DDR)[I]
+#define DDR_DIST_VECT(DDR, I) \
+  DDR_DIST_VECTS (DDR)[I]
+#define DDR_REVERSED_P(DDR) (DDR)->reversed_p
+#define DDR_COULD_BE_INDEPENDENT_P(DDR) (DDR)->could_be_independent_p
+
+
+opt_result dr_analyze_innermost (innermost_loop_behavior *, tree,
+				 struct loop *, const gimple *);
+extern bool compute_data_dependences_for_loop (struct loop *, bool,
+					       vec<loop_p> *,
+					       vec<data_reference_p> *,
+					       vec<ddr_p> *);
+extern void debug_ddrs (vec<ddr_p> );
+extern void dump_data_reference (FILE *, struct data_reference *);
+extern void debug (data_reference &ref);
+extern void debug (data_reference *ptr);
+extern void debug_data_reference (struct data_reference *);
+extern void debug_data_references (vec<data_reference_p> );
+extern void debug (vec<data_reference_p> &ref);
+extern void debug (vec<data_reference_p> *ptr);
+extern void debug_data_dependence_relation (struct data_dependence_relation *);
+extern void dump_data_dependence_relations (FILE *, vec<ddr_p> );
+extern void debug (vec<ddr_p> &ref);
+extern void debug (vec<ddr_p> *ptr);
+extern void debug_data_dependence_relations (vec<ddr_p> );
+extern void free_dependence_relation (struct data_dependence_relation *);
+extern void free_dependence_relations (vec<ddr_p> );
+extern void free_data_ref (data_reference_p);
+extern void free_data_refs (vec<data_reference_p> );
+extern opt_result find_data_references_in_stmt (struct loop *, gimple *,
+						vec<data_reference_p> *);
+extern bool graphite_find_data_references_in_stmt (edge, loop_p, gimple *,
+						   vec<data_reference_p> *);
+tree find_data_references_in_loop (struct loop *, vec<data_reference_p> *);
+bool loop_nest_has_data_refs (loop_p loop);
+struct data_reference *create_data_ref (edge, loop_p, tree, gimple *, bool,
+					bool);
+extern bool find_loop_nest (struct loop *, vec<loop_p> *);
+extern struct data_dependence_relation *initialize_data_dependence_relation
+     (struct data_reference *, struct data_reference *, vec<loop_p>);
+extern void compute_affine_dependence (struct data_dependence_relation *,
+				       loop_p);
+extern void compute_self_dependence (struct data_dependence_relation *);
+extern bool compute_all_dependences (vec<data_reference_p> ,
+				     vec<ddr_p> *,
+				     vec<loop_p>, bool);
+extern tree find_data_references_in_bb (struct loop *, basic_block,
+                                        vec<data_reference_p> *);
+extern unsigned int dr_alignment (innermost_loop_behavior *);
+extern tree get_base_for_alignment (tree, unsigned int *);
+
+/* Return the alignment in bytes that DR is guaranteed to have at all
+   times.  */
+
+inline unsigned int
+dr_alignment (data_reference *dr)
+{
+  return dr_alignment (&DR_INNERMOST (dr));
+}
+
+extern bool dr_may_alias_p (const struct data_reference *,
+			    const struct data_reference *, bool);
+extern bool dr_equal_offsets_p (struct data_reference *,
+                                struct data_reference *);
+
+extern opt_result runtime_alias_check_p (ddr_p, struct loop *, bool);
+extern int data_ref_compare_tree (tree, tree);
+extern void prune_runtime_alias_test_list (vec<dr_with_seg_len_pair_t> *,
+					   poly_uint64);
+extern void create_runtime_alias_checks (struct loop *,
+					 vec<dr_with_seg_len_pair_t> *, tree*);
+extern tree dr_direction_indicator (struct data_reference *);
+extern tree dr_zero_step_indicator (struct data_reference *);
+extern bool dr_known_forward_stride_p (struct data_reference *);
+
+/* Return true when the base objects of data references A and B are
+   the same memory object.  */
+
+static inline bool
+same_data_refs_base_objects (data_reference_p a, data_reference_p b)
+{
+  return DR_NUM_DIMENSIONS (a) == DR_NUM_DIMENSIONS (b)
+    && operand_equal_p (DR_BASE_OBJECT (a), DR_BASE_OBJECT (b), 0);
+}
+
+/* Return true when the data references A and B are accessing the same
+   memory object with the same access functions.  */
+
+static inline bool
+same_data_refs (data_reference_p a, data_reference_p b)
+{
+  unsigned int i;
+
+  /* The references are exactly the same.  */
+  if (operand_equal_p (DR_REF (a), DR_REF (b), 0))
+    return true;
+
+  if (!same_data_refs_base_objects (a, b))
+    return false;
+
+  for (i = 0; i < DR_NUM_DIMENSIONS (a); i++)
+    if (!eq_evolutions_p (DR_ACCESS_FN (a, i), DR_ACCESS_FN (b, i)))
+      return false;
+
+  return true;
+}
+
+/* Returns true when all the dependences are computable.  */
+
+inline bool
+known_dependences_p (vec<ddr_p> dependence_relations)
+{
+  ddr_p ddr;
+  unsigned int i;
+
+  FOR_EACH_VEC_ELT (dependence_relations, i, ddr)
+    if (DDR_ARE_DEPENDENT (ddr) == chrec_dont_know)
+      return false;
+
+  return true;
+}
+
+/* Returns the dependence level for a vector DIST of size LENGTH.
+   LEVEL = 0 means a lexicographic dependence, i.e. a dependence due
+   to the sequence of statements, not carried by any loop.  */
+
+static inline unsigned
+dependence_level (lambda_vector dist_vect, int length)
+{
+  int i;
+
+  for (i = 0; i < length; i++)
+    if (dist_vect[i] != 0)
+      return i + 1;
+
+  return 0;
+}
+
+/* Return the dependence level for the DDR relation.  */
+
+static inline unsigned
+ddr_dependence_level (ddr_p ddr)
+{
+  unsigned vector;
+  unsigned level = 0;
+
+  if (DDR_DIST_VECTS (ddr).exists ())
+    level = dependence_level (DDR_DIST_VECT (ddr, 0), DDR_NB_LOOPS (ddr));
+
+  for (vector = 1; vector < DDR_NUM_DIST_VECTS (ddr); vector++)
+    level = MIN (level, dependence_level (DDR_DIST_VECT (ddr, vector),
+					  DDR_NB_LOOPS (ddr)));
+  return level;
+}
+
+/* Return the index of the variable VAR in the LOOP_NEST array.  */
+
+static inline int
+index_in_loop_nest (int var, vec<loop_p> loop_nest)
+{
+  struct loop *loopi;
+  int var_index;
+
+  for (var_index = 0; loop_nest.iterate (var_index, &loopi); var_index++)
+    if (loopi->num == var)
+      return var_index;
+
+  gcc_unreachable ();
+}
+
+/* Returns true when the data reference DR the form "A[i] = ..."
+   with a stride equal to its unit type size.  */
+
+static inline bool
+adjacent_dr_p (struct data_reference *dr)
+{
+  /* If this is a bitfield store bail out.  */
+  if (TREE_CODE (DR_REF (dr)) == COMPONENT_REF
+      && DECL_BIT_FIELD (TREE_OPERAND (DR_REF (dr), 1)))
+    return false;
+
+  if (!DR_STEP (dr)
+      || TREE_CODE (DR_STEP (dr)) != INTEGER_CST)
+    return false;
+
+  return tree_int_cst_equal (fold_unary (ABS_EXPR, TREE_TYPE (DR_STEP (dr)),
+					 DR_STEP (dr)),
+			     TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (dr))));
+}
+
+void split_constant_offset (tree , tree *, tree *);
+
+/* Compute the greatest common divisor of a VECTOR of SIZE numbers.  */
+
+static inline lambda_int
+lambda_vector_gcd (lambda_vector vector, int size)
+{
+  int i;
+  lambda_int gcd1 = 0;
+
+  if (size > 0)
+    {
+      gcd1 = vector[0];
+      for (i = 1; i < size; i++)
+	gcd1 = gcd (gcd1, vector[i]);
+    }
+  return gcd1;
+}
+
+/* Allocate a new vector of given SIZE.  */
+
+static inline lambda_vector
+lambda_vector_new (int size)
+{
+  /* ???  We shouldn't abuse the GC allocator here.  */
+  return ggc_cleared_vec_alloc<lambda_int> (size);
+}
+
+/* Clear out vector VEC1 of length SIZE.  */
+
+static inline void
+lambda_vector_clear (lambda_vector vec1, int size)
+{
+  memset (vec1, 0, size * sizeof (*vec1));
+}
+
+/* Returns true when the vector V is lexicographically positive, in
+   other words, when the first nonzero element is positive.  */
+
+static inline bool
+lambda_vector_lexico_pos (lambda_vector v,
+			  unsigned n)
+{
+  unsigned i;
+  for (i = 0; i < n; i++)
+    {
+      if (v[i] == 0)
+	continue;
+      if (v[i] < 0)
+	return false;
+      if (v[i] > 0)
+	return true;
+    }
+  return true;
+}
+
+/* Return true if vector VEC1 of length SIZE is the zero vector.  */
+
+static inline bool
+lambda_vector_zerop (lambda_vector vec1, int size)
+{
+  int i;
+  for (i = 0; i < size; i++)
+    if (vec1[i] != 0)
+      return false;
+  return true;
+}
+
+/* Allocate a matrix of M rows x  N cols.  */
+
+static inline lambda_matrix
+lambda_matrix_new (int m, int n, struct obstack *lambda_obstack)
+{
+  lambda_matrix mat;
+  int i;
+
+  mat = XOBNEWVEC (lambda_obstack, lambda_vector, m);
+
+  for (i = 0; i < m; i++)
+    mat[i] = XOBNEWVEC (lambda_obstack, lambda_int, n);
+
+  return mat;
+}
+
+#endif  /* GCC_TREE_DATA_REF_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-dfa.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-dfa.h
new file mode 100644
index 0000000..9881008
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-dfa.h
@@ -0,0 +1,44 @@
+/* Header file for tree data flow functions.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_DFA_H
+#define GCC_TREE_DFA_H
+
+extern void renumber_gimple_stmt_uids (void);
+extern void renumber_gimple_stmt_uids_in_blocks (basic_block *, int);
+extern void dump_variable (FILE *, tree);
+extern void debug_variable (tree);
+extern void dump_dfa_stats (FILE *);
+extern void debug_dfa_stats (void);
+extern tree ssa_default_def (struct function *, tree);
+extern void set_ssa_default_def (struct function *, tree, tree);
+extern tree get_or_create_ssa_default_def (struct function *, tree);
+extern tree get_ref_base_and_extent (tree, poly_int64_pod *, poly_int64_pod *,
+				     poly_int64_pod *, bool *);
+extern tree get_ref_base_and_extent_hwi (tree, HOST_WIDE_INT *,
+					 HOST_WIDE_INT *, bool *);
+extern tree get_addr_base_and_unit_offset_1 (tree, poly_int64_pod *,
+					     tree (*) (tree));
+extern tree get_addr_base_and_unit_offset (tree, poly_int64_pod *);
+extern bool stmt_references_abnormal_ssa_name (gimple *);
+extern void replace_abnormal_ssa_names (gimple *);
+extern void dump_enumerated_decls (FILE *, dump_flags_t);
+
+
+#endif /* GCC_TREE_DFA_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-diagnostic.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-diagnostic.h
new file mode 100644
index 0000000..3ce61c0
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-diagnostic.h
@@ -0,0 +1,60 @@
+/* Various declarations for language-independent diagnostics
+   subroutines that are only for use in the compilers proper and not
+   the driver or other programs.
+   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_DIAGNOSTIC_H
+#define GCC_TREE_DIAGNOSTIC_H
+
+/* TREE_BLOCK if the diagnostic is to be reported in some inline
+   function inlined into other function, otherwise NULL.  */
+#define diagnostic_abstract_origin(DI)		\
+  ((tree) diagnostic_info_auxiliary_data (DI))
+
+/* Function of last diagnostic message; more generally, function such
+   that if next diagnostic message is in it then we don't have to
+   mention the function name.  */
+#define diagnostic_last_function(DC)			\
+  ((tree) diagnostic_context_auxiliary_data (DC))
+
+/* True if the last function in which a diagnostic was reported is
+   different from the current one.  */
+#define diagnostic_last_function_changed(DC, DI)			\
+  (diagnostic_last_function (DC) != (diagnostic_abstract_origin (DI)	\
+				     ? diagnostic_abstract_origin (DI)	\
+				     : current_function_decl))
+
+/* Remember the current function as being the last one in which we report
+   a diagnostic.  */
+#define diagnostic_set_last_function(DC, DI)		\
+  diagnostic_context_auxiliary_data (DC)		\
+    = (((DI) && diagnostic_abstract_origin (DI))	\
+       ? diagnostic_abstract_origin (DI)		\
+       : current_function_decl)
+
+void diagnostic_report_current_function (diagnostic_context *,
+					 diagnostic_info *);
+void virt_loc_aware_diagnostic_finalizer (diagnostic_context *,
+					  diagnostic_info *);
+
+void tree_diagnostics_defaults (diagnostic_context *context);
+bool default_tree_printer (pretty_printer *, text_info *, const char *,
+			   int, bool, bool, bool, bool *, const char **);
+
+#endif /* ! GCC_TREE_DIAGNOSTIC_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-dump.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-dump.h
new file mode 100644
index 0000000..571675a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-dump.h
@@ -0,0 +1,92 @@
+/* Tree-dumping functionality for intermediate representation.
+   Copyright (C) 1999-2019 Free Software Foundation, Inc.
+   Written by Mark Mitchell <mark@codesourcery.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_DUMP_H
+#define GCC_TREE_DUMP_H
+
+#include "splay-tree.h"
+#include "dumpfile.h"
+
+typedef struct dump_info *dump_info_p;
+
+/* Flags used with queue functions.  */
+#define DUMP_NONE     0
+#define DUMP_BINFO    1
+
+/* Information about a node to be dumped.  */
+
+typedef struct dump_node_info
+{
+  /* The index for the node.  */
+  unsigned int index;
+  /* Nonzero if the node is a binfo.  */
+  unsigned int binfo_p : 1;
+} *dump_node_info_p;
+
+/* A dump_queue is a link in the queue of things to be dumped.  */
+
+typedef struct dump_queue
+{
+  /* The queued tree node.  */
+  splay_tree_node node;
+  /* The next node in the queue.  */
+  struct dump_queue *next;
+} *dump_queue_p;
+
+/* A dump_info gives information about how we should perform the dump
+   and about the current state of the dump.  */
+
+struct dump_info
+{
+  /* The stream on which to dump the information.  */
+  FILE *stream;
+  /* The original node.  */
+  const_tree node;
+  /* User flags.  */
+  dump_flags_t flags;
+  /* The next unused node index.  */
+  unsigned int index;
+  /* The next column.  */
+  unsigned int column;
+  /* The first node in the queue of nodes to be written out.  */
+  dump_queue_p queue;
+  /* The last node in the queue.  */
+  dump_queue_p queue_end;
+  /* Free queue nodes.  */
+  dump_queue_p free_list;
+  /* The tree nodes which we have already written out.  The
+     keys are the addresses of the nodes; the values are the integer
+     indices we assigned them.  */
+  splay_tree nodes;
+};
+
+/* Dump the CHILD and its children.  */
+#define dump_child(field, child) \
+  queue_and_dump_index (di, field, child, DUMP_NONE)
+
+extern void dump_pointer (dump_info_p, const char *, void *);
+extern void dump_int (dump_info_p, const char *, int);
+extern void dump_string (dump_info_p, const char *);
+extern void dump_string_field (dump_info_p, const char *, const char *);
+extern void queue_and_dump_index (dump_info_p, const char *, const_tree, int);
+extern void queue_and_dump_type (dump_info_p, const_tree);
+extern int dump_flag (dump_info_p, dump_flags_t, const_tree);
+
+#endif /* ! GCC_TREE_DUMP_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-eh.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-eh.h
new file mode 100644
index 0000000..a588c10
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-eh.h
@@ -0,0 +1,56 @@
+/* Header file for exception handling.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_EH_H
+#define GCC_TREE_EH_H
+
+
+typedef struct eh_region_d *eh_region;
+
+extern void using_eh_for_cleanups (void);
+extern void add_stmt_to_eh_lp (gimple *, int);
+extern bool remove_stmt_from_eh_lp_fn (struct function *, gimple *);
+extern bool remove_stmt_from_eh_lp (gimple *);
+extern int lookup_stmt_eh_lp_fn (struct function *, gimple *);
+extern int lookup_stmt_eh_lp (gimple *);
+extern bool make_eh_dispatch_edges (geh_dispatch *);
+extern void make_eh_edges (gimple *);
+extern edge redirect_eh_edge (edge, basic_block);
+extern void redirect_eh_dispatch_edge (geh_dispatch *, edge, basic_block);
+extern bool operation_could_trap_helper_p (enum tree_code, bool, bool, bool,
+					   bool, tree, bool *);
+extern bool operation_could_trap_p (enum tree_code, bool, bool, tree);
+extern bool tree_could_trap_p (tree);
+extern tree rewrite_to_non_trapping_overflow (tree);
+extern bool stmt_could_throw_p (function *, gimple *);
+extern bool tree_could_throw_p (tree);
+extern bool stmt_can_throw_external (function *, gimple *);
+extern bool stmt_can_throw_internal (function *, gimple *);
+extern bool maybe_clean_eh_stmt_fn (struct function *, gimple *);
+extern bool maybe_clean_eh_stmt (gimple *);
+extern bool maybe_clean_or_replace_eh_stmt (gimple *, gimple *);
+extern bool maybe_duplicate_eh_stmt_fn (struct function *, gimple *,
+					struct function *, gimple *,
+					hash_map<void *, void *> *, int);
+extern bool maybe_duplicate_eh_stmt (gimple *, gimple *);
+extern void maybe_remove_unreachable_handlers (void);
+extern bool verify_eh_edges (gimple *);
+extern bool verify_eh_dispatch_edge (geh_dispatch *);
+
+#endif /* GCC_TREE_EH_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-hash-traits.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-hash-traits.h
new file mode 100644
index 0000000..a3fc024
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-hash-traits.h
@@ -0,0 +1,84 @@
+/* Traits for hashing trees.
+   Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef tree_hash_traits_h
+#define tree_hash_traits_h
+
+/* Hash for trees based on operand_equal_p.  */
+struct tree_operand_hash : ggc_ptr_hash <tree_node>
+{
+  static inline hashval_t hash (const value_type &);
+  static inline bool equal (const value_type &,
+			    const compare_type &);
+};
+
+inline hashval_t
+tree_operand_hash::hash (const value_type &t)
+{
+  return iterative_hash_expr (t, 0);
+}
+
+inline bool
+tree_operand_hash::equal (const value_type &t1,
+			  const compare_type &t2)
+{
+  return operand_equal_p (t1, t2, 0);
+}
+
+/* Hasher for tree decls.  Pointer equality is enough here, but the DECL_UID
+   is a better hash than the pointer value and gives a predictable traversal
+   order.  */
+struct tree_decl_hash : ggc_ptr_hash <tree_node>
+{
+  static inline hashval_t hash (tree);
+};
+
+inline hashval_t
+tree_decl_hash::hash (tree t)
+{
+  return DECL_UID (t);
+}
+
+/* Hash for SSA_NAMEs in the same function.  Pointer equality is enough
+   here, but the SSA_NAME_VERSION is a better hash than the pointer
+   value and gives a predictable traversal order.  */
+struct tree_ssa_name_hash : ggc_ptr_hash <tree_node>
+{
+  static inline hashval_t hash (tree);
+};
+
+inline hashval_t
+tree_ssa_name_hash::hash (tree t)
+{
+  return SSA_NAME_VERSION (t);
+}
+
+/* Hasher for general trees, based on their TREE_HASH.  */
+struct tree_hash : ggc_ptr_hash <tree_node>
+{
+  static hashval_t hash (tree);
+};
+
+inline hashval_t
+tree_hash::hash (tree t)
+{
+  return TREE_HASH (t);
+}
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-hasher.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-hasher.h
new file mode 100644
index 0000000..a64f297
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-hasher.h
@@ -0,0 +1,65 @@
+/* Hash Table Helper for Trees
+   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+   Contributed by Lawrence Crowl <crowl@google.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_HASHER_H
+#define GCC_TREE_HASHER_H 1
+
+struct int_tree_map {
+  unsigned int uid;
+  tree to;
+};
+
+/* Hashtable helpers.  */
+
+struct int_tree_hasher
+{
+  typedef int_tree_map value_type;
+  typedef int_tree_map compare_type;
+  static inline hashval_t hash (const value_type &);
+  static inline bool equal (const value_type &, const compare_type &);
+  static bool is_deleted (const value_type &v)
+    {
+      return v.to == reinterpret_cast<tree> (1);
+    }
+  static void mark_deleted (value_type &v) { v.to = reinterpret_cast<tree> (0x1); }
+  static bool is_empty (const value_type &v) { return v.to == NULL; }
+  static void mark_empty (value_type &v) { v.to = NULL; }
+  static void remove (value_type &) {}
+};
+
+/* Hash a UID in a int_tree_map.  */
+
+inline hashval_t
+int_tree_hasher::hash (const value_type &item)
+{
+  return item.uid;
+}
+
+/* Return true if the uid in both int tree maps are equal.  */
+
+inline bool
+int_tree_hasher::equal (const value_type &a, const compare_type &b)
+{
+  return (a.uid == b.uid);
+}
+
+typedef hash_table <int_tree_hasher> int_tree_htab_type;
+
+#endif /* GCC_TREE_HASHER_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-if-conv.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-if-conv.h
new file mode 100644
index 0000000..c136ebb
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-if-conv.h
@@ -0,0 +1,24 @@
+/* Copyright (C) 2016-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_IF_CONV_H
+#define GCC_TREE_IF_CONV_H
+
+unsigned int tree_if_conversion (struct loop *, vec<gimple *> * = NULL);
+
+#endif  /* GCC_TREE_IF_CONV_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-inline.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-inline.h
new file mode 100644
index 0000000..9e3c249
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-inline.h
@@ -0,0 +1,241 @@
+/* Tree inlining hooks and declarations.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+   Contributed by Alexandre Oliva  <aoliva@redhat.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_INLINE_H
+#define GCC_TREE_INLINE_H
+
+
+struct cgraph_edge;
+
+/* Indicate the desired behavior wrt call graph edges.  We can either
+   duplicate the edge (inlining, cloning), move the edge (versioning,
+   parallelization), or move the edges of the clones (saving).  */
+
+enum copy_body_cge_which
+{
+  CB_CGE_DUPLICATE,
+  CB_CGE_MOVE,
+  CB_CGE_MOVE_CLONES
+};
+
+typedef int_hash <unsigned short, 0> dependence_hash;
+
+/* Data required for function body duplication.  */
+
+struct copy_body_data
+{
+  /* FUNCTION_DECL for function being inlined, or in general the
+     source function providing the original trees.  */
+  tree src_fn;
+
+  /* FUNCTION_DECL for function being inlined into, or in general
+     the destination function receiving the new trees.  */
+  tree dst_fn;
+
+  /* Callgraph node of the source function.  */
+  struct cgraph_node *src_node;
+
+  /* Callgraph node of the destination function.  */
+  struct cgraph_node *dst_node;
+
+  /* struct function for function being inlined.  Usually this is the same
+     as DECL_STRUCT_FUNCTION (src_fn), but can be different if saved_cfg
+     and saved_eh are in use.  */
+  struct function *src_cfun;
+
+  /* The VAR_DECL for the return value.  */
+  tree retvar;
+
+  /* The map from local declarations in the inlined function to
+     equivalents in the function into which it is being inlined.  */
+  hash_map<tree, tree> *decl_map;
+
+  /* Create a new decl to replace DECL in the destination function.  */
+  tree (*copy_decl) (tree, struct copy_body_data *);
+
+  /* Current BLOCK.  */
+  tree block;
+
+  /* GIMPLE_CALL if va arg parameter packs should be expanded or NULL
+     is not.  */
+  gcall *call_stmt;
+
+  /* > 0 if we are remapping a type currently.  */
+  int remapping_type_depth;
+
+  /* Exception landing pad the inlined call lies in.  */
+  int eh_lp_nr;
+
+  /* Maps region and landing pad structures from the function being copied
+     to duplicates created within the function we inline into.  */
+  hash_map<void *, void *> *eh_map;
+
+  /* We use the same mechanism do all sorts of different things.  Rather
+     than enumerating the different cases, we categorize the behavior
+     in the various situations.  */
+
+  /* What to do with call graph edges.  */
+  enum copy_body_cge_which transform_call_graph_edges;
+
+  /* True if a new CFG should be created.  False for inlining, true for
+     everything else.  */
+  bool transform_new_cfg;
+
+  /* True if RETURN_EXPRs should be transformed to just the contained
+     MODIFY_EXPR.  The branch semantics of the return will be handled
+     by manipulating the CFG rather than a statement.  */
+  bool transform_return_to_modify;
+
+  /* True if the parameters of the source function are transformed.
+     Only true for inlining.  */
+  bool transform_parameter;
+
+  /* True if this statement will need to be regimplified.  */
+  bool regimplify;
+
+  /* True if trees may not be unshared.  */
+  bool do_not_unshare;
+
+  /* True if new declarations may not be created during type remapping.  */
+  bool prevent_decl_creation_for_types;
+
+  /* True if the location information will need to be reset.  */
+  bool reset_location;
+
+  /* Replace error_mark_node as upper bound of array types with
+     an uninitialized VAR_DECL temporary.  */
+  bool adjust_array_error_bounds;
+
+  /* Usually copy_decl callback always creates new decls, in that case
+     we want to remap all variably_modified_type_p types.  If this flag
+     is set, remap_type will do further checks to see if remap_decl
+     of any decls mentioned in the type will remap to anything but itself
+     and only in that case will actually remap the type.  */
+  bool dont_remap_vla_if_no_change;
+
+  /* A function to be called when duplicating BLOCK nodes.  */
+  void (*transform_lang_insert_block) (tree);
+
+  /* Statements that might be possibly folded.  */
+  hash_set<gimple *> *statements_to_fold;
+
+  /* Entry basic block to currently copied body.  */
+  basic_block entry_bb;
+
+  /* For partial function versioning, bitmap of bbs to be copied,
+     otherwise NULL.  */
+  bitmap blocks_to_copy;
+
+  /* Debug statements that need processing.  */
+  vec<gdebug *> debug_stmts;
+
+  /* A map from local declarations in the inlined function to
+     equivalents in the function into which it is being inlined, where
+     the originals have been mapped to a value rather than to a
+     variable.  */
+  hash_map<tree, tree> *debug_map;
+
+  /* A map from the inlined functions dependence info cliques to
+     equivalents in the function into which it is being inlined.  */
+  hash_map<dependence_hash, unsigned short> *dependence_map;
+
+  /* A list of addressable local variables remapped into the caller
+     when inlining a call within an OpenMP SIMD-on-SIMT loop.  */
+  vec<tree> *dst_simt_vars;
+
+  /* If clobbers for local variables from the inline function
+     that need to live in memory should be added to EH landing pads
+     outside of the inlined function, this should be the number
+     of basic blocks in the caller before inlining.  Zero otherwise.  */
+  int add_clobbers_to_eh_landing_pads;
+};
+
+/* Weights of constructions for estimate_num_insns.  */
+
+struct eni_weights
+{
+  /* Cost per call.  */
+  unsigned call_cost;
+
+  /* Cost per indirect call.  */
+  unsigned indirect_call_cost;
+
+  /* Cost per call to a target specific builtin */
+  unsigned target_builtin_call_cost;
+
+  /* Cost of "expensive" div and mod operations.  */
+  unsigned div_mod_cost;
+
+  /* Cost for omp construct.  */
+  unsigned omp_cost;
+
+  /* Cost for tm transaction.  */
+  unsigned tm_cost;
+
+  /* Cost of return.  */
+  unsigned return_cost;
+
+  /* True when time of statement should be estimated.  Thus, the
+     cost of a switch statement is logarithmic rather than linear in number
+     of cases.  */
+  bool time_based;
+};
+
+/* Weights that estimate_num_insns uses for heuristics in inlining.  */
+
+extern eni_weights eni_inlining_weights;
+
+/* Weights that estimate_num_insns uses to estimate the size of the
+   produced code.  */
+
+extern eni_weights eni_size_weights;
+
+/* Weights that estimate_num_insns uses to estimate the time necessary
+   to execute the produced code.  */
+
+extern eni_weights eni_time_weights;
+
+/* Function prototypes.  */
+void init_inline_once (void);
+extern tree copy_tree_body_r (tree *, int *, void *);
+extern void insert_decl_map (copy_body_data *, tree, tree);
+unsigned int optimize_inline_calls (tree);
+tree maybe_inline_call_in_expr (tree);
+bool tree_inlinable_function_p (tree);
+tree copy_tree_r (tree *, int *, void *);
+tree copy_decl_no_change (tree decl, copy_body_data *id);
+int estimate_move_cost (tree type, bool);
+int estimate_num_insns (gimple *, eni_weights *);
+int estimate_num_insns_fn (tree, eni_weights *);
+int estimate_num_insns_seq (gimple_seq, eni_weights *);
+bool tree_versionable_function_p (tree);
+extern tree remap_decl (tree decl, copy_body_data *id);
+extern tree remap_type (tree type, copy_body_data *id);
+extern gimple_seq copy_gimple_seq_and_replace_locals (gimple_seq seq);
+extern bool debug_find_tree (tree, tree);
+extern tree copy_fn (tree, tree&, tree&);
+extern const char *copy_forbidden (struct function *fun);
+extern tree copy_decl_for_dup_finish (copy_body_data *id, tree decl, tree copy);
+
+/* This is in tree-inline.c since the routine uses
+   data structures from the inliner.  */
+extern tree build_duplicate_type (tree);
+
+#endif /* GCC_TREE_INLINE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-into-ssa.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-into-ssa.h
new file mode 100644
index 0000000..28d3444
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-into-ssa.h
@@ -0,0 +1,53 @@
+/* Header file for normal form into SSA.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_INTO_SSA_H
+#define GCC_TREE_INTO_SSA_H
+
+extern tree get_current_def (tree);
+extern void set_current_def (tree, tree);
+void delete_update_ssa (void);
+tree create_new_def_for (tree, gimple *, def_operand_p);
+void mark_virtual_operands_for_renaming (struct function *);
+void mark_virtual_operand_for_renaming (tree);
+void mark_virtual_phi_result_for_renaming (gphi *);
+bool need_ssa_update_p (struct function *);
+bool name_registered_for_update_p (tree);
+void release_ssa_name_after_update_ssa (tree);
+void update_ssa (unsigned);
+
+/* Prototypes for debugging functions.  */
+extern void debug_decl_set (bitmap set);
+extern void dump_defs_stack (FILE *, int);
+extern void debug_defs_stack (int);
+extern void dump_currdefs (FILE *);
+extern void debug_currdefs (void);
+extern void dump_tree_ssa (FILE *);
+extern void debug_tree_ssa (void);
+extern void dump_tree_ssa_stats (FILE *);
+extern void debug_tree_ssa_stats (void);
+extern void dump_var_infos (FILE *);
+extern void debug_var_infos (void);
+extern void dump_names_replaced_by (FILE *, tree);
+extern void debug_names_replaced_by (tree);
+extern void dump_update_ssa (FILE *);
+extern void debug_update_ssa (void);
+extern bitmap names_to_release;
+
+#endif /* GCC_TREE_INTO_SSA_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-iterator.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-iterator.h
new file mode 100644
index 0000000..e273411
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-iterator.h
@@ -0,0 +1,123 @@
+/* Iterator routines for manipulating GENERIC tree statement list.
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Contributed by Andrew MacLeod  <amacleod@redhat.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+/* This file is dependent upon the implementation of tree's. It provides an
+   abstract interface to the tree objects such that if all tree creation and
+   manipulations are done through this interface, we can easily change the
+   implementation of tree's, and not impact other code.  */
+
+#ifndef GCC_TREE_ITERATOR_H
+#define GCC_TREE_ITERATOR_H 1
+
+/* Iterator object for GENERIC or GIMPLE TREE statements.  */
+
+struct tree_stmt_iterator {
+  struct tree_statement_list_node *ptr;
+  tree container;
+};
+
+static inline tree_stmt_iterator
+tsi_start (tree t)
+{
+  tree_stmt_iterator i;
+
+  i.ptr = STATEMENT_LIST_HEAD (t);
+  i.container = t;
+
+  return i;
+}
+
+static inline tree_stmt_iterator
+tsi_last (tree t)
+{
+  tree_stmt_iterator i;
+
+  i.ptr = STATEMENT_LIST_TAIL (t);
+  i.container = t;
+
+  return i;
+}
+
+static inline bool
+tsi_end_p (tree_stmt_iterator i)
+{
+  return i.ptr == NULL;
+}
+
+static inline bool
+tsi_one_before_end_p (tree_stmt_iterator i)
+{
+  return i.ptr != NULL && i.ptr->next == NULL;
+}
+
+static inline void
+tsi_next (tree_stmt_iterator *i)
+{
+  i->ptr = i->ptr->next;
+}
+
+static inline void
+tsi_prev (tree_stmt_iterator *i)
+{
+  i->ptr = i->ptr->prev;
+}
+
+static inline tree *
+tsi_stmt_ptr (tree_stmt_iterator i)
+{
+  return &i.ptr->stmt;
+}
+
+static inline tree
+tsi_stmt (tree_stmt_iterator i)
+{
+  return i.ptr->stmt;
+}
+
+enum tsi_iterator_update
+{
+  TSI_NEW_STMT,		/* Only valid when single statement is added, move
+			   iterator to it.  */
+  TSI_SAME_STMT,	/* Leave the iterator at the same statement.  */
+  TSI_CHAIN_START,	/* Only valid when chain of statements is added, move
+			   iterator to the first statement in the chain.  */
+  TSI_CHAIN_END,	/* Only valid when chain of statements is added, move
+			   iterator to the last statement in the chain.  */
+  TSI_CONTINUE_LINKING	/* Move iterator to whatever position is suitable for
+			   linking other statements/chains of statements in
+			   the same direction.  */
+};
+
+extern void tsi_link_before (tree_stmt_iterator *, tree,
+			     enum tsi_iterator_update);
+extern void tsi_link_after (tree_stmt_iterator *, tree,
+			    enum tsi_iterator_update);
+
+extern void tsi_delink (tree_stmt_iterator *);
+
+extern tree alloc_stmt_list (void);
+extern void free_stmt_list (tree);
+extern void append_to_statement_list (tree, tree *);
+extern void append_to_statement_list_force (tree, tree *);
+extern tree expr_first (tree);
+extern tree expr_last (tree);
+
+#endif /* GCC_TREE_ITERATOR_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-nested.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-nested.h
new file mode 100644
index 0000000..98ad793
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-nested.h
@@ -0,0 +1,27 @@
+/* Header file for Nested function decomposition for GIMPLE.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_NESTED_H
+#define GCC_TREE_NESTED_H
+
+extern tree build_addr (tree);
+extern void insert_field_into_struct (tree, tree);
+extern void lower_nested_functions (tree);
+
+#endif /* GCC_TREE_NESTED_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-object-size.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-object-size.h
new file mode 100644
index 0000000..420af3e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-object-size.h
@@ -0,0 +1,27 @@
+/* Declarations for tree-object-size.c.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_OBJECT_SIZE_H
+#define GCC_TREE_OBJECT_SIZE_H
+
+extern void init_object_sizes (void);
+extern void fini_object_sizes (void);
+extern bool compute_builtin_object_size (tree, int, unsigned HOST_WIDE_INT *);
+
+#endif  // GCC_TREE_OBJECT_SIZE_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-outof-ssa.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-outof-ssa.h
new file mode 100644
index 0000000..5871103
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-outof-ssa.h
@@ -0,0 +1,82 @@
+/* Routines for expanding from SSA form to RTL.
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+#ifndef GCC_TREE_OUTOF_SSA_H
+#define GCC_TREE_OUTOF_SSA_H
+
+
+/* This structure (of which only a singleton SA exists) is used to
+   pass around information between the outof-SSA functions, cfgexpand
+   and expand itself.  */
+struct ssaexpand
+{
+  /* The computed partitions of SSA names are stored here.  */
+  var_map map;
+
+  /* For an SSA name version V bit V is set iff TER decided that
+     its definition should be forwarded.  */
+  bitmap values;
+
+  /* For a partition number I partition_to_pseudo[I] contains the
+     RTL expression of the allocated space of it (either a MEM or
+     a pseudos REG).  */
+  rtx *partition_to_pseudo;
+
+  /* If partition I contains an SSA name that has a default def for a
+     parameter, bit I will be set in this bitmap.  */
+  bitmap partitions_for_parm_default_defs;
+
+  /* If partition I contains an SSA name that has an undefined value,
+     bit I will be set in this bitmap.  */
+  bitmap partitions_for_undefined_values;
+};
+
+/* This is the singleton described above.  */
+extern struct ssaexpand SA;
+
+/* Returns the RTX expression representing the storage of the outof-SSA
+   partition that the SSA name EXP is a member of.  */
+static inline rtx
+get_rtx_for_ssa_name (tree exp)
+{
+  int p = partition_find (SA.map->var_partition, SSA_NAME_VERSION (exp));
+  if (SA.map->partition_to_view)
+    p = SA.map->partition_to_view[p];
+  gcc_assert (p != NO_PARTITION);
+  return SA.partition_to_pseudo[p];
+}
+
+/* If TER decided to forward the definition of SSA name EXP this function
+   returns the defining statement, otherwise NULL.  */
+static inline gimple *
+get_gimple_for_ssa_name (tree exp)
+{
+  int v = SSA_NAME_VERSION (exp);
+  if (SA.values && bitmap_bit_p (SA.values, v))
+    return SSA_NAME_DEF_STMT (exp);
+  return NULL;
+}
+
+extern bool ssa_is_replaceable_p (gimple *stmt);
+extern void finish_out_of_ssa (struct ssaexpand *sa);
+extern unsigned int rewrite_out_of_ssa (struct ssaexpand *sa);
+extern void expand_phi_nodes (struct ssaexpand *sa);
+
+#endif /* GCC_TREE_OUTOF_SSA_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-parloops.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-parloops.h
new file mode 100644
index 0000000..f37c479
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-parloops.h
@@ -0,0 +1,25 @@
+/* Header file for loop autoparallelization.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_PARLOOPS_H
+#define GCC_TREE_PARLOOPS_H
+
+extern bool parallelized_function_p (tree);
+
+#endif /* GCC_TREE_PARLOOPS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-pass.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-pass.h
new file mode 100644
index 0000000..3a0b380
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-pass.h
@@ -0,0 +1,657 @@
+/* Definitions for describing one tree-ssa optimization pass.
+   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Contributed by Richard Henderson <rth@redhat.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+#ifndef GCC_TREE_PASS_H
+#define GCC_TREE_PASS_H 1
+
+#include "timevar.h"
+#include "dumpfile.h"
+
+struct function;
+
+/* Optimization pass type.  */
+enum opt_pass_type
+{
+  GIMPLE_PASS,
+  RTL_PASS,
+  SIMPLE_IPA_PASS,
+  IPA_PASS
+};
+
+/* Metadata for a pass, non-varying across all instances of a pass.  */
+struct pass_data
+{
+  /* Optimization pass type.  */
+  enum opt_pass_type type;
+
+  /* Terse name of the pass used as a fragment of the dump file
+     name.  If the name starts with a star, no dump happens. */
+  const char *name;
+
+  /* The -fopt-info optimization group flags as defined in dumpfile.h. */
+  optgroup_flags_t optinfo_flags;
+
+  /* The timevar id associated with this pass.  */
+  /* ??? Ideally would be dynamically assigned.  */
+  timevar_id_t tv_id;
+
+  /* Sets of properties input and output from this pass.  */
+  unsigned int properties_required;
+  unsigned int properties_provided;
+  unsigned int properties_destroyed;
+
+  /* Flags indicating common sets things to do before and after.  */
+  unsigned int todo_flags_start;
+  unsigned int todo_flags_finish;
+};
+
+namespace gcc
+{
+  class context;
+} // namespace gcc
+
+/* An instance of a pass.  This is also "pass_data" to minimize the
+   changes in existing code.  */
+class opt_pass : public pass_data
+{
+public:
+  virtual ~opt_pass () { }
+
+  /* Create a copy of this pass.
+
+     Passes that can have multiple instances must provide their own
+     implementation of this, to ensure that any sharing of state between
+     this instance and the copy is "wired up" correctly.
+
+     The default implementation prints an error message and aborts.  */
+  virtual opt_pass *clone ();
+  virtual void set_pass_param (unsigned int, bool);
+
+  /* This pass and all sub-passes are executed only if the function returns
+     true.  The default implementation returns true.  */
+  virtual bool gate (function *fun);
+
+  /* This is the code to run.  If this is not overridden, then there should
+     be sub-passes otherwise this pass does nothing.
+     The return value contains TODOs to execute in addition to those in
+     TODO_flags_finish.   */
+  virtual unsigned int execute (function *fun);
+
+protected:
+  opt_pass (const pass_data&, gcc::context *);
+
+public:
+  /* A list of sub-passes to run, dependent on gate predicate.  */
+  opt_pass *sub;
+
+  /* Next in the list of passes to run, independent of gate predicate.  */
+  opt_pass *next;
+
+  /* Static pass number, used as a fragment of the dump file name.  */
+  int static_pass_number;
+
+protected:
+  gcc::context *m_ctxt;
+};
+
+/* Description of GIMPLE pass.  */
+class gimple_opt_pass : public opt_pass
+{
+protected:
+  gimple_opt_pass (const pass_data& data, gcc::context *ctxt)
+    : opt_pass (data, ctxt)
+  {
+  }
+};
+
+/* Description of RTL pass.  */
+class rtl_opt_pass : public opt_pass
+{
+protected:
+  rtl_opt_pass (const pass_data& data, gcc::context *ctxt)
+    : opt_pass (data, ctxt)
+  {
+  }
+};
+
+class varpool_node;
+struct cgraph_node;
+struct lto_symtab_encoder_d;
+
+/* Description of IPA pass with generate summary, write, execute, read and
+   transform stages.  */
+class ipa_opt_pass_d : public opt_pass
+{
+public:
+  /* IPA passes can analyze function body and variable initializers
+      using this hook and produce summary.  */
+  void (*generate_summary) (void);
+
+  /* This hook is used to serialize IPA summaries on disk.  */
+  void (*write_summary) (void);
+
+  /* This hook is used to deserialize IPA summaries from disk.  */
+  void (*read_summary) (void);
+
+  /* This hook is used to serialize IPA optimization summaries on disk.  */
+  void (*write_optimization_summary) (void);
+
+  /* This hook is used to deserialize IPA summaries from disk.  */
+  void (*read_optimization_summary) (void);
+
+  /* Hook to convert gimple stmt uids into true gimple statements.  The second
+     parameter is an array of statements indexed by their uid. */
+  void (*stmt_fixup) (struct cgraph_node *, gimple **);
+
+  /* Results of interprocedural propagation of an IPA pass is applied to
+     function body via this hook.  */
+  unsigned int function_transform_todo_flags_start;
+  unsigned int (*function_transform) (struct cgraph_node *);
+  void (*variable_transform) (varpool_node *);
+
+protected:
+  ipa_opt_pass_d (const pass_data& data, gcc::context *ctxt,
+		  void (*generate_summary) (void),
+		  void (*write_summary) (void),
+		  void (*read_summary) (void),
+		  void (*write_optimization_summary) (void),
+		  void (*read_optimization_summary) (void),
+		  void (*stmt_fixup) (struct cgraph_node *, gimple **),
+		  unsigned int function_transform_todo_flags_start,
+		  unsigned int (*function_transform) (struct cgraph_node *),
+		  void (*variable_transform) (varpool_node *))
+    : opt_pass (data, ctxt),
+      generate_summary (generate_summary),
+      write_summary (write_summary),
+      read_summary (read_summary),
+      write_optimization_summary (write_optimization_summary),
+      read_optimization_summary (read_optimization_summary),
+      stmt_fixup (stmt_fixup),
+      function_transform_todo_flags_start (function_transform_todo_flags_start),
+      function_transform (function_transform),
+      variable_transform (variable_transform)
+  {
+  }
+};
+
+/* Description of simple IPA pass.  Simple IPA passes have just one execute
+   hook.  */
+class simple_ipa_opt_pass : public opt_pass
+{
+protected:
+  simple_ipa_opt_pass (const pass_data& data, gcc::context *ctxt)
+    : opt_pass (data, ctxt)
+  {
+  }
+};
+
+/* Pass properties.  */
+#define PROP_gimple_any		(1 << 0)	/* entire gimple grammar */
+#define PROP_gimple_lcf		(1 << 1)	/* lowered control flow */
+#define PROP_gimple_leh		(1 << 2)	/* lowered eh */
+#define PROP_cfg		(1 << 3)
+#define PROP_ssa		(1 << 5)
+#define PROP_no_crit_edges      (1 << 6)
+#define PROP_rtl		(1 << 7)
+#define PROP_gimple_lomp	(1 << 8)	/* lowered OpenMP directives */
+#define PROP_cfglayout	 	(1 << 9)	/* cfglayout mode on RTL */
+#define PROP_gimple_lcx		(1 << 10)       /* lowered complex */
+#define PROP_loops		(1 << 11)	/* preserve loop structures */
+#define PROP_gimple_lvec	(1 << 12)       /* lowered vector */
+#define PROP_gimple_eomp	(1 << 13)       /* no OpenMP directives */
+#define PROP_gimple_lva		(1 << 14)       /* No va_arg internal function.  */
+#define PROP_gimple_opt_math	(1 << 15)	/* Disable canonicalization
+						   of math functions; the
+						   current choices have
+						   been optimized.  */
+#define PROP_gimple_lomp_dev	(1 << 16)	/* done omp_device_lower */
+#define PROP_rtl_split_insns	(1 << 17)	/* RTL has insns split.  */
+
+#define PROP_trees \
+  (PROP_gimple_any | PROP_gimple_lcf | PROP_gimple_leh | PROP_gimple_lomp)
+
+/* To-do flags.  */
+#define TODO_do_not_ggc_collect		(1 << 1)
+#define TODO_cleanup_cfg        	(1 << 5)
+#define TODO_verify_il			(1 << 6)
+#define TODO_dump_symtab		(1 << 7)
+#define TODO_remove_functions		(1 << 8)
+#define TODO_rebuild_frequencies	(1 << 9)
+
+/* To-do flags for calls to update_ssa.  */
+
+/* Update the SSA form inserting PHI nodes for newly exposed symbols
+   and virtual names marked for updating.  When updating real names,
+   only insert PHI nodes for a real name O_j in blocks reached by all
+   the new and old definitions for O_j.  If the iterated dominance
+   frontier for O_j is not pruned, we may end up inserting PHI nodes
+   in blocks that have one or more edges with no incoming definition
+   for O_j.  This would lead to uninitialized warnings for O_j's
+   symbol.  */
+#define TODO_update_ssa			(1 << 11)
+
+/* Update the SSA form without inserting any new PHI nodes at all.
+   This is used by passes that have either inserted all the PHI nodes
+   themselves or passes that need only to patch use-def and def-def
+   chains for virtuals (e.g., DCE).  */
+#define TODO_update_ssa_no_phi		(1 << 12)
+
+/* Insert PHI nodes everywhere they are needed.  No pruning of the
+   IDF is done.  This is used by passes that need the PHI nodes for
+   O_j even if it means that some arguments will come from the default
+   definition of O_j's symbol.
+
+   WARNING: If you need to use this flag, chances are that your pass
+   may be doing something wrong.  Inserting PHI nodes for an old name
+   where not all edges carry a new replacement may lead to silent
+   codegen errors or spurious uninitialized warnings.  */
+#define TODO_update_ssa_full_phi	(1 << 13)
+
+/* Passes that update the SSA form on their own may want to delegate
+   the updating of virtual names to the generic updater.  Since FUD
+   chains are easier to maintain, this simplifies the work they need
+   to do.  NOTE: If this flag is used, any OLD->NEW mappings for real
+   names are explicitly destroyed and only the symbols marked for
+   renaming are processed.  */
+#define TODO_update_ssa_only_virtuals	(1 << 14)
+
+/* Some passes leave unused local variables that can be removed from
+   cfun->local_decls.  This reduces the size of dump files
+   and the memory footprint for VAR_DECLs.  */
+#define TODO_remove_unused_locals	(1 << 15)
+
+/* Call df_finish at the end of the pass.  This is done after all of
+   the dumpers have been allowed to run so that they have access to
+   the instance before it is destroyed.  */
+#define TODO_df_finish                  (1 << 17)
+
+/* Call df_verify at the end of the pass if checking is enabled.  */
+#define TODO_df_verify                  (1 << 18)
+
+/* Internally used for the first instance of a pass.  */
+#define TODO_mark_first_instance	(1 << 19)
+
+/* Rebuild aliasing info.  */
+#define TODO_rebuild_alias              (1 << 20)
+
+/* Rebuild the addressable-vars bitmap and do register promotion.  */
+#define TODO_update_address_taken	(1 << 21)
+
+/* Rebuild the callgraph edges.  */
+#define TODO_rebuild_cgraph_edges       (1 << 22)
+
+/* Release function body and stop pass manager.  */
+#define TODO_discard_function		(1 << 23)
+
+/* Internally used in execute_function_todo().  */
+#define TODO_update_ssa_any		\
+    (TODO_update_ssa			\
+     | TODO_update_ssa_no_phi		\
+     | TODO_update_ssa_full_phi		\
+     | TODO_update_ssa_only_virtuals)
+
+#define TODO_verify_all TODO_verify_il
+
+
+/* Register pass info. */
+
+enum pass_positioning_ops
+{
+  PASS_POS_INSERT_AFTER,  /* Insert after the reference pass.  */
+  PASS_POS_INSERT_BEFORE, /* Insert before the reference pass.  */
+  PASS_POS_REPLACE        /* Replace the reference pass.  */
+};
+
+struct register_pass_info
+{
+  opt_pass *pass;		    /* New pass to register.  */
+  const char *reference_pass_name;  /* Name of the reference pass for hooking
+                                       up the new pass.  */
+  int ref_pass_instance_number;     /* Insert the pass at the specified
+                                       instance number of the reference pass.
+                                       Do it for every instance if it is 0.  */
+  enum pass_positioning_ops pos_op; /* how to insert the new pass.  */
+};
+
+/* Registers a new pass.  Either fill out the register_pass_info or specify
+   the individual parameters.  The pass object is expected to have been
+   allocated using operator new and the pass manager takes the ownership of
+   the pass object.  */
+extern void register_pass (register_pass_info *);
+extern void register_pass (opt_pass* pass, pass_positioning_ops pos,
+			   const char* ref_pass_name, int ref_pass_inst_number);
+
+extern gimple_opt_pass *make_pass_asan (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_asan_O0 (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_tsan (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_tsan_O0 (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_sancov (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_sancov_O0 (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_lower_cf (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_refactor_eh (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_lower_eh (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_lower_eh_dispatch (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_lower_resx (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_build_cfg (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_early_tree_profile (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_cleanup_eh (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_sra (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_sra_early (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_early_ipa_sra (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_tail_recursion (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_tail_calls (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_fix_loops (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_tree_loop (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_tree_no_loop (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_tree_loop_init (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_loop_versioning (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_lim (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_linterchange (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_tree_unswitch (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_loop_split (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_loop_jam (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_predcom (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_iv_canon (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_scev_cprop (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_empty_loop (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_graphite (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_graphite_transforms (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_if_conversion (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_loop_distribution (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_vectorize (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_simduid_cleanup (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_slp_vectorize (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_complete_unroll (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_complete_unrolli (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_parallelize_loops (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_loop_prefetch (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_iv_optimize (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_tree_loop_done (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_ch (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_ch_vect (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_ccp (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_split_paths (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_build_ssa (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_build_alias (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_build_ealias (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_dominator (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_dce (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_cd_dce (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_call_cdce (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_merge_phi (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_thread_jumps (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_early_thread_jumps (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_split_crit_edges (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_laddress (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_pre (gcc::context *ctxt);
+extern unsigned int tail_merge_optimize (unsigned int);
+extern gimple_opt_pass *make_pass_profile (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_strip_predict_hints (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_lower_complex_O0 (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_lower_complex (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_lower_switch (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_lower_switch_O0 (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_lower_vector (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_lower_vector_ssa (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_lower_omp (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_diagnose_omp_blocks (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_expand_omp (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_expand_omp_ssa (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_omp_target_link (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_oacc_device_lower (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_omp_device_lower (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_object_sizes (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_strlen (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_fold_builtins (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_post_ipa_warn (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_stdarg (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_early_warn_uninitialized (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_late_warn_uninitialized (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_cse_reciprocals (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_cse_sincos (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_optimize_bswap (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_store_merging (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_optimize_widening_mul (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_warn_function_return (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_warn_function_noreturn (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_cselim (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_phiopt (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_forwprop (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_phiprop (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_tree_ifcombine (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_dse (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_nrv (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_rename_ssa_copies (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_sink_code (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_fre (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_check_data_deps (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_copy_prop (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_isolate_erroneous_paths (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_early_vrp (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_vrp (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_uncprop (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_return_slot (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_reassoc (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_rebuild_cgraph_edges (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_remove_cgraph_callee_edges (gcc::context
+							      *ctxt);
+extern gimple_opt_pass *make_pass_build_cgraph_edges (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_local_pure_const (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_nothrow (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_tracer (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_warn_restrict (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_warn_unused_result (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_diagnose_tm_blocks (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_lower_tm (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_tm_init (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_tm_mark (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_tm_memopt (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_tm_edges (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_split_functions (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_feedback_split_functions (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_strength_reduction (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_vtable_verify (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_ubsan (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_sanopt (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_oacc_kernels (gcc::context *ctxt);
+extern simple_ipa_opt_pass *make_pass_ipa_oacc (gcc::context *ctxt);
+extern simple_ipa_opt_pass *make_pass_ipa_oacc_kernels (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_gen_hsail (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_warn_nonnull_compare (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_sprintf_length (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_walloca (gcc::context *ctxt);
+
+/* IPA Passes */
+extern simple_ipa_opt_pass *make_pass_ipa_lower_emutls (gcc::context *ctxt);
+extern simple_ipa_opt_pass
+							      *make_pass_ipa_function_and_variable_visibility (gcc::context *ctxt);
+extern simple_ipa_opt_pass *make_pass_ipa_tree_profile (gcc::context *ctxt);
+extern simple_ipa_opt_pass *make_pass_ipa_auto_profile (gcc::context *ctxt);
+
+extern simple_ipa_opt_pass *make_pass_build_ssa_passes (gcc::context *ctxt);
+extern simple_ipa_opt_pass *make_pass_local_optimization_passes (gcc::context *ctxt);
+extern simple_ipa_opt_pass *make_pass_ipa_remove_symbols (gcc::context *ctxt);
+
+extern ipa_opt_pass_d *make_pass_ipa_whole_program_visibility (gcc::context
+							       *ctxt);
+extern simple_ipa_opt_pass *make_pass_ipa_increase_alignment (gcc::context
+							      *ctxt);
+extern ipa_opt_pass_d *make_pass_ipa_fn_summary (gcc::context *ctxt);
+extern ipa_opt_pass_d *make_pass_ipa_inline (gcc::context *ctxt);
+extern simple_ipa_opt_pass *make_pass_ipa_free_lang_data (gcc::context *ctxt);
+extern simple_ipa_opt_pass *make_pass_ipa_free_fn_summary (gcc::context *ctxt);
+extern ipa_opt_pass_d *make_pass_ipa_cp (gcc::context *ctxt);
+extern ipa_opt_pass_d *make_pass_ipa_icf (gcc::context *ctxt);
+extern ipa_opt_pass_d *make_pass_ipa_devirt (gcc::context *ctxt);
+extern ipa_opt_pass_d *make_pass_ipa_reference (gcc::context *ctxt);
+extern ipa_opt_pass_d *make_pass_ipa_hsa (gcc::context *ctxt);
+extern ipa_opt_pass_d *make_pass_ipa_pure_const (gcc::context *ctxt);
+extern simple_ipa_opt_pass *make_pass_ipa_pta (gcc::context *ctxt);
+extern simple_ipa_opt_pass *make_pass_ipa_tm (gcc::context *ctxt);
+extern simple_ipa_opt_pass *make_pass_target_clone (gcc::context *ctxt);
+extern simple_ipa_opt_pass *make_pass_dispatcher_calls (gcc::context *ctxt);
+extern simple_ipa_opt_pass *make_pass_omp_simd_clone (gcc::context *ctxt);
+extern ipa_opt_pass_d *make_pass_ipa_profile (gcc::context *ctxt);
+extern ipa_opt_pass_d *make_pass_ipa_cdtor_merge (gcc::context *ctxt);
+extern ipa_opt_pass_d *make_pass_ipa_single_use (gcc::context *ctxt);
+extern ipa_opt_pass_d *make_pass_ipa_comdats (gcc::context *ctxt);
+extern simple_ipa_opt_pass *make_pass_materialize_all_clones (gcc::context *
+							      ctxt);
+
+extern gimple_opt_pass *make_pass_cleanup_cfg_post_optimizing (gcc::context
+							       *ctxt);
+extern gimple_opt_pass *make_pass_fixup_cfg (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_backprop (gcc::context *ctxt);
+
+extern rtl_opt_pass *make_pass_expand (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_instantiate_virtual_regs (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_rtl_fwprop (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_rtl_fwprop_addr (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_jump (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_jump2 (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_lower_subreg (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_cse (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_fast_rtl_dce (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_ud_rtl_dce (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_rtl_dce (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_rtl_dse1 (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_rtl_dse2 (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_rtl_dse3 (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_rtl_cprop (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_rtl_pre (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_rtl_hoist (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_rtl_store_motion (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_cse_after_global_opts (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_rtl_ifcvt (gcc::context *ctxt);
+
+extern rtl_opt_pass *make_pass_into_cfg_layout_mode (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_outof_cfg_layout_mode (gcc::context *ctxt);
+
+extern rtl_opt_pass *make_pass_loop2 (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_rtl_loop_init (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_rtl_move_loop_invariants (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_rtl_unroll_loops (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_rtl_doloop (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_rtl_loop_done (gcc::context *ctxt);
+
+extern rtl_opt_pass *make_pass_web (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_cse2 (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_df_initialize_opt (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_df_initialize_no_opt (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_reginfo_init (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_inc_dec (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_stack_ptr_mod (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_initialize_regs (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_combine (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_if_after_combine (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_ree (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_partition_blocks (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_match_asm_constraints (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_split_all_insns (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_fast_rtl_byte_dce (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_lower_subreg2 (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_mode_switching (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_sms (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_sched (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_live_range_shrinkage (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_early_remat (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_ira (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_reload (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_clean_state (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_branch_prob (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_value_profile_transformations (gcc::context
+							      *ctxt);
+extern rtl_opt_pass *make_pass_postreload_jump (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_postreload_cse (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_gcse2 (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_split_after_reload (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_branch_target_load_optimize1 (gcc::context
+							     *ctxt);
+extern rtl_opt_pass *make_pass_thread_prologue_and_epilogue (gcc::context
+							     *ctxt);
+extern rtl_opt_pass *make_pass_stack_adjustments (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_sched_fusion (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_peephole2 (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_if_after_reload (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_regrename (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_cprop_hardreg (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_reorder_blocks (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_branch_target_load_optimize2 (gcc::context
+							     *ctxt);
+extern rtl_opt_pass *make_pass_leaf_regs (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_split_before_sched2 (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_compare_elim_after_reload (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_sched2 (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_stack_regs (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_stack_regs_run (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_df_finish (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_compute_alignments (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_duplicate_computed_gotos (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_variable_tracking (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_free_cfg (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_machine_reorg (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_cleanup_barriers (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_delay_slots (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_split_for_shorten_branches (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_split_before_regstack (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_convert_to_eh_region_ranges (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_shorten_branches (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_set_nothrow_function_flags (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_dwarf2_frame (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_final (gcc::context *ctxt);
+extern rtl_opt_pass *make_pass_rtl_seqabstr (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_release_ssa_names (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_early_inline (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_local_fn_summary (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_update_address_taken (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_convert_switch (gcc::context *ctxt);
+extern gimple_opt_pass *make_pass_lower_vaarg (gcc::context *ctxt);
+
+/* Current optimization pass.  */
+extern opt_pass *current_pass;
+
+extern bool execute_one_pass (opt_pass *);
+extern void execute_pass_list (function *, opt_pass *);
+extern void execute_ipa_pass_list (opt_pass *);
+extern void execute_ipa_summary_passes (ipa_opt_pass_d *);
+extern void execute_all_ipa_transforms (void);
+extern void execute_all_ipa_stmt_fixups (struct cgraph_node *, gimple **);
+extern bool pass_init_dump_file (opt_pass *);
+extern void pass_fini_dump_file (opt_pass *);
+extern void emergency_dump_function (void);
+
+extern void print_current_pass (FILE *);
+extern void debug_pass (void);
+extern void ipa_write_summaries (void);
+extern void ipa_write_optimization_summaries (struct lto_symtab_encoder_d *);
+extern void ipa_read_summaries (void);
+extern void ipa_read_optimization_summaries (void);
+extern void register_one_dump_file (opt_pass *);
+extern bool function_called_by_processed_nodes_p (void);
+
+/* Declare for plugins.  */
+extern void do_per_function_toporder (void (*) (function *, void *), void *);
+
+extern void disable_pass (const char *);
+extern void enable_pass (const char *);
+extern void dump_passes (void);
+
+#endif /* GCC_TREE_PASS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-phinodes.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-phinodes.h
new file mode 100644
index 0000000..0c6174a
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-phinodes.h
@@ -0,0 +1,68 @@
+/* Header file for PHI node routines
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_PHINODES_H
+#define GCC_TREE_PHINODES_H
+
+extern void phinodes_print_statistics (void);
+extern void reserve_phi_args_for_new_edge (basic_block);
+extern void add_phi_node_to_bb (gphi *phi, basic_block bb);
+extern gphi *create_phi_node (tree, basic_block);
+extern void add_phi_arg (gphi *, tree, edge, location_t);
+extern void remove_phi_args (edge);
+extern void remove_phi_node (gimple_stmt_iterator *, bool);
+extern void remove_phi_nodes (basic_block);
+extern tree degenerate_phi_result (gphi *);
+extern void set_phi_nodes (basic_block, gimple_seq);
+
+static inline use_operand_p
+gimple_phi_arg_imm_use_ptr (gimple *gs, int i)
+{
+  return &gimple_phi_arg (gs, i)->imm_use;
+}
+
+/* Return the phi argument which contains the specified use.  */
+
+static inline int
+phi_arg_index_from_use (use_operand_p use)
+{
+  struct phi_arg_d *element, *root;
+  size_t index;
+  gimple *phi;
+
+  /* Since the use is the first thing in a PHI argument element, we can
+     calculate its index based on casting it to an argument, and performing
+     pointer arithmetic.  */
+
+  phi = USE_STMT (use);
+
+  element = (struct phi_arg_d *)use;
+  root = gimple_phi_arg (phi, 0);
+  index = element - root;
+
+  /* Make sure the calculation doesn't have any leftover bytes.  If it does,
+     then imm_use is likely not the first element in phi_arg_d.  */
+  gcc_checking_assert ((((char *)element - (char *)root)
+			% sizeof (struct phi_arg_d)) == 0
+		       && index < gimple_phi_capacity (phi));
+
+ return index;
+}
+
+#endif /* GCC_TREE_PHINODES_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-pretty-print.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-pretty-print.h
new file mode 100644
index 0000000..9f59328
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-pretty-print.h
@@ -0,0 +1,57 @@
+/* Various declarations for language-independent pretty-print
+   subroutines that are only for use in the compilers proper and not
+   the driver or other programs.
+   Copyright (C) 2002-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_PRETTY_PRINT_H
+#define GCC_TREE_PRETTY_PRINT_H
+
+#include "pretty-print.h"
+
+#define pp_unsupported_tree(PP, T)                         \
+  pp_verbatim (PP, "#%qs not supported by %s#", \
+	       get_tree_code_name (TREE_CODE (T)), __FUNCTION__)
+
+#define pp_ti_abstract_origin(TI) ((tree *) (TI)->x_data)
+
+
+extern void debug_generic_expr (tree);
+extern void debug_generic_stmt (tree);
+extern void debug_tree_chain (tree);
+extern void print_generic_decl (FILE *, tree, dump_flags_t);
+extern void print_generic_stmt (FILE *, tree, dump_flags_t = TDF_NONE);
+extern void print_generic_stmt_indented (FILE *, tree, dump_flags_t, int);
+extern void print_generic_expr (FILE *, tree, dump_flags_t = TDF_NONE);
+extern char *print_generic_expr_to_str (tree);
+extern void dump_omp_clauses (pretty_printer *, tree, int, dump_flags_t);
+extern void dump_omp_atomic_memory_order (pretty_printer *,
+					  enum omp_memory_order);
+extern int dump_generic_node (pretty_printer *, tree, int, dump_flags_t, bool);
+extern void print_declaration (pretty_printer *, tree, int, dump_flags_t);
+extern int op_code_prio (enum tree_code);
+extern int op_prio (const_tree);
+extern const char *op_symbol_code (enum tree_code);
+extern void print_call_name (pretty_printer *, tree, dump_flags_t);
+extern void percent_K_format (text_info *, location_t, tree);
+extern void pp_tree_identifier (pretty_printer *, tree);
+extern void dump_function_header (FILE *, tree, dump_flags_t);
+extern void pp_double_int (pretty_printer *pp, double_int d, bool uns);
+extern void dump_location (pretty_printer *buffer, location_t loc);
+
+#endif /* ! GCC_TREE_PRETTY_PRINT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-scalar-evolution.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-scalar-evolution.h
new file mode 100644
index 0000000..621a57c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-scalar-evolution.h
@@ -0,0 +1,74 @@
+/* Scalar evolution detector.
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Contributed by Sebastian Pop <s.pop@laposte.net>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_SCALAR_EVOLUTION_H
+#define GCC_TREE_SCALAR_EVOLUTION_H
+
+extern tree number_of_latch_executions (struct loop *);
+extern gcond *get_loop_exit_condition (const struct loop *);
+
+extern void scev_initialize (void);
+extern bool scev_initialized_p (void);
+extern void scev_reset (void);
+extern void scev_reset_htab (void);
+extern void scev_finalize (void);
+extern tree analyze_scalar_evolution (struct loop *, tree);
+extern tree instantiate_scev (edge, struct loop *, tree);
+extern tree resolve_mixers (struct loop *, tree, bool *);
+extern void gather_stats_on_scev_database (void);
+extern bool final_value_replacement_loop (struct loop *);
+extern unsigned int scev_const_prop (void);
+extern bool expression_expensive_p (tree);
+extern bool simple_iv_with_niters (struct loop *, struct loop *, tree,
+				   struct affine_iv *, tree *, bool);
+extern bool simple_iv (struct loop *, struct loop *, tree, struct affine_iv *,
+		       bool);
+extern bool iv_can_overflow_p (struct loop *, tree, tree, tree);
+extern tree compute_overall_effect_of_inner_loop (struct loop *, tree);
+
+/* Returns the basic block preceding LOOP, or the CFG entry block when
+   the loop is function's body.  */
+
+static inline basic_block
+block_before_loop (loop_p loop)
+{
+  edge preheader = loop_preheader_edge (loop);
+  return (preheader ? preheader->src : ENTRY_BLOCK_PTR_FOR_FN (cfun));
+}
+
+/* Analyze all the parameters of the chrec that were left under a
+   symbolic form.  LOOP is the loop in which symbolic names have to
+   be analyzed and instantiated.  */
+
+static inline tree
+instantiate_parameters (struct loop *loop, tree chrec)
+{
+  return instantiate_scev (loop_preheader_edge (loop), loop, chrec);
+}
+
+/* Returns the loop of the polynomial chrec CHREC.  */
+
+static inline struct loop *
+get_chrec_loop (const_tree chrec)
+{
+  return get_loop (cfun, CHREC_VARIABLE (chrec));
+}
+
+#endif  /* GCC_TREE_SCALAR_EVOLUTION_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-address.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-address.h
new file mode 100644
index 0000000..6fa4eae
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-address.h
@@ -0,0 +1,42 @@
+/* Header file for memory address lowering and mode selection.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_SSA_ADDRESS_H
+#define GCC_TREE_SSA_ADDRESS_H
+
+/* Description of a memory address.  */
+
+struct mem_address
+{
+  tree symbol, base, index, step, offset;
+};
+
+extern rtx addr_for_mem_ref (struct mem_address *, addr_space_t, bool);
+extern rtx addr_for_mem_ref (tree exp, addr_space_t as, bool really_expand);
+extern void get_address_description (tree, struct mem_address *);
+extern tree tree_mem_ref_addr (tree, tree);
+extern bool valid_mem_ref_p (machine_mode, addr_space_t, struct mem_address *);
+extern void move_fixed_address_to_symbol (struct mem_address *,
+					  struct aff_tree *);
+tree create_mem_ref (gimple_stmt_iterator *, tree,
+		     struct aff_tree *, tree, tree, tree, bool);
+extern void copy_ref_info (tree, tree);
+tree maybe_fold_tmr (tree);
+
+#endif /* GCC_TREE_SSA_ADDRESS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-alias.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-alias.h
new file mode 100644
index 0000000..a5293cd
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-alias.h
@@ -0,0 +1,200 @@
+/* Tree based alias analysis and alias oracle.
+   Copyright (C) 2008-2019 Free Software Foundation, Inc.
+   Contributed by Richard Guenther  <rguenther@suse.de>
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   GCC is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef TREE_SSA_ALIAS_H
+#define TREE_SSA_ALIAS_H
+
+/* The points-to solution.
+
+   The points-to solution is a union of pt_vars and the abstract
+   sets specified by the flags.  */
+struct GTY(()) pt_solution
+{
+  /* Nonzero if points-to analysis couldn't determine where this pointer
+     is pointing to.  */
+  unsigned int anything : 1;
+
+  /* Nonzero if the points-to set includes any global memory.  Note that
+     even if this is zero pt_vars can still include global variables.  */
+  unsigned int nonlocal : 1;
+
+  /* Nonzero if the points-to set includes the local escaped solution by
+     reference.  */
+  unsigned int escaped : 1;
+
+  /* Nonzero if the points-to set includes the IPA escaped solution by
+     reference.  */
+  unsigned int ipa_escaped : 1;
+
+  /* Nonzero if the points-to set includes 'nothing', the points-to set
+     includes memory at address NULL.  */
+  unsigned int null : 1;
+
+  /* Nonzero if the vars bitmap includes a variable included in 'nonlocal'.  */
+  unsigned int vars_contains_nonlocal : 1;
+  /* Nonzero if the vars bitmap includes a variable included in 'escaped'.  */
+  unsigned int vars_contains_escaped : 1;
+  /* Nonzero if the vars bitmap includes a anonymous heap variable that
+     escaped the function and thus became global.  */
+  unsigned int vars_contains_escaped_heap : 1;
+  /* Nonzero if the vars bitmap includes a anonymous variable used to
+     represent storage pointed to by a restrict qualified pointer.  */
+  unsigned int vars_contains_restrict : 1;
+  /* Nonzero if the vars bitmap includes an interposable variable.  */
+  unsigned int vars_contains_interposable : 1;
+
+  /* Set of variables that this pointer may point to.  */
+  bitmap vars;
+};
+
+
+/* Simplified and cached information about a memory reference tree.
+   Used by the alias-oracle internally and externally in alternate
+   interfaces.  */
+struct ao_ref
+{
+  /* The original full memory reference tree or NULL_TREE if that is
+     not available.  */
+  tree ref;
+
+  /* The following fields are the decomposed reference as returned
+     by get_ref_base_and_extent.  */
+  /* The base object of the memory reference or NULL_TREE if all of
+     the following fields are not yet computed.  */
+  tree base;
+  /* The offset relative to the base.  */
+  poly_int64 offset;
+  /* The size of the access.  */
+  poly_int64 size;
+  /* The maximum possible extent of the access or -1 if unconstrained.  */
+  poly_int64 max_size;
+
+  /* The alias set of the access or -1 if not yet computed.  */
+  alias_set_type ref_alias_set;
+
+  /* The alias set of the base object or -1 if not yet computed.  */
+  alias_set_type base_alias_set;
+
+  /* Whether the memory is considered a volatile access.  */
+  bool volatile_p;
+
+  bool max_size_known_p () const;
+};
+
+/* Return true if the maximum size is known, rather than the special -1
+   marker.  */
+
+inline bool
+ao_ref::max_size_known_p () const
+{
+  return known_size_p (max_size);
+}
+
+/* In tree-ssa-alias.c  */
+extern void ao_ref_init (ao_ref *, tree);
+extern void ao_ref_init_from_ptr_and_size (ao_ref *, tree, tree);
+extern tree ao_ref_base (ao_ref *);
+extern alias_set_type ao_ref_alias_set (ao_ref *);
+extern alias_set_type ao_ref_base_alias_set (ao_ref *);
+extern bool ptr_deref_may_alias_global_p (tree);
+extern bool ptr_derefs_may_alias_p (tree, tree);
+extern bool ptrs_compare_unequal (tree, tree);
+extern bool ref_may_alias_global_p (tree);
+extern bool ref_may_alias_global_p (ao_ref *);
+extern bool refs_may_alias_p (tree, tree, bool = true);
+extern bool refs_may_alias_p_1 (ao_ref *, ao_ref *, bool);
+extern bool refs_anti_dependent_p (tree, tree);
+extern bool refs_output_dependent_p (tree, tree);
+extern bool ref_maybe_used_by_stmt_p (gimple *, tree, bool = true);
+extern bool ref_maybe_used_by_stmt_p (gimple *, ao_ref *, bool = true);
+extern bool stmt_may_clobber_global_p (gimple *);
+extern bool stmt_may_clobber_ref_p (gimple *, tree, bool = true);
+extern bool stmt_may_clobber_ref_p_1 (gimple *, ao_ref *, bool = true);
+extern bool call_may_clobber_ref_p (gcall *, tree);
+extern bool call_may_clobber_ref_p_1 (gcall *, ao_ref *);
+extern bool stmt_kills_ref_p (gimple *, tree);
+extern bool stmt_kills_ref_p (gimple *, ao_ref *);
+extern tree get_continuation_for_phi (gimple *, ao_ref *,
+				      unsigned int *, bitmap *, bool,
+				      void *(*)(ao_ref *, tree, void *, bool *),
+				      void *);
+extern void *walk_non_aliased_vuses (ao_ref *, tree,
+				     void *(*)(ao_ref *, tree,
+					       unsigned int, void *),
+				     void *(*)(ao_ref *, tree, void *, bool *),
+				     tree (*)(tree),
+				     void *);
+extern int walk_aliased_vdefs (ao_ref *, tree,
+			       bool (*)(ao_ref *, tree, void *),
+			       void *, bitmap *,
+			       bool *function_entry_reached = NULL,
+			       unsigned int limit = 0);
+extern void dump_alias_info (FILE *);
+extern void debug_alias_info (void);
+extern void dump_points_to_solution (FILE *, struct pt_solution *);
+extern void debug (pt_solution &ref);
+extern void debug (pt_solution *ptr);
+extern void dump_points_to_info_for (FILE *, tree);
+extern void debug_points_to_info_for (tree);
+extern void dump_alias_stats (FILE *);
+
+
+/* In tree-ssa-structalias.c  */
+extern unsigned int compute_may_aliases (void);
+extern bool pt_solution_empty_p (struct pt_solution *);
+extern bool pt_solution_singleton_or_null_p (struct pt_solution *, unsigned *);
+extern bool pt_solution_includes_global (struct pt_solution *);
+extern bool pt_solution_includes (struct pt_solution *, const_tree);
+extern bool pt_solutions_intersect (struct pt_solution *, struct pt_solution *);
+extern void pt_solution_reset (struct pt_solution *);
+extern void pt_solution_set (struct pt_solution *, bitmap, bool);
+extern void pt_solution_set_var (struct pt_solution *, tree);
+
+extern void dump_pta_stats (FILE *);
+
+extern GTY(()) struct pt_solution ipa_escaped_pt;
+
+/* Return true, if the two ranges [POS1, SIZE1] and [POS2, SIZE2]
+   overlap.  SIZE1 and/or SIZE2 can be (unsigned)-1 in which case the
+   range is open-ended.  Otherwise return false.  */
+
+static inline bool
+ranges_overlap_p (HOST_WIDE_INT pos1,
+		  unsigned HOST_WIDE_INT size1,
+		  HOST_WIDE_INT pos2,
+		  unsigned HOST_WIDE_INT size2)
+{
+  if (size1 == 0 || size2 == 0)
+    return false;
+  if (pos1 >= pos2
+      && (size2 == (unsigned HOST_WIDE_INT)-1
+	  || pos1 < (pos2 + (HOST_WIDE_INT) size2)))
+    return true;
+  if (pos2 >= pos1
+      && (size1 == (unsigned HOST_WIDE_INT)-1
+	  || pos2 < (pos1 + (HOST_WIDE_INT) size1)))
+    return true;
+
+  return false;
+}
+
+
+
+#endif /* TREE_SSA_ALIAS_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-ccp.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-ccp.h
new file mode 100644
index 0000000..1978867
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-ccp.h
@@ -0,0 +1,29 @@
+/* Copyright (C) 2016-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef TREE_SSA_CCP_H
+#define TREE_SSA_CCP_H
+
+void bit_value_binop (enum tree_code, signop, int, widest_int *, widest_int *,
+		      signop, int, const widest_int &, const widest_int &,
+		      signop, int, const widest_int &, const widest_int &);
+
+void bit_value_unop (enum tree_code, signop, int, widest_int *, widest_int *,
+		     signop, int, const widest_int &, const widest_int &);
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-coalesce.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-coalesce.h
new file mode 100644
index 0000000..a9c29e8
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-coalesce.h
@@ -0,0 +1,26 @@
+/* Header file for tree-ssa-coalesce.c exports.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_SSA_COALESCE_H
+#define GCC_TREE_SSA_COALESCE_H
+
+extern void coalesce_ssa_name (var_map);
+extern bool gimple_can_coalesce_p (tree, tree);
+
+#endif /* GCC_TREE_SSA_COALESCE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-dce.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-dce.h
new file mode 100644
index 0000000..6f4d7d7
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-dce.h
@@ -0,0 +1,22 @@
+/* Copyright (C) 2017-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef TREE_SSA_DCE_H
+#define TREE_SSA_DCE_H
+extern void simple_dce_from_worklist (bitmap);
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-dom.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-dom.h
new file mode 100644
index 0000000..f5fb5aa
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-dom.h
@@ -0,0 +1,28 @@
+/* Header file for SSA dominator optimizations.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_SSA_DOM_H
+#define GCC_TREE_SSA_DOM_H
+
+extern bool simple_iv_increment_p (gimple *);
+extern void record_temporary_equivalences (edge,
+					   class const_and_copies *,
+					   class avail_exprs_stack *);
+
+#endif /* GCC_TREE_SSA_DOM_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-live.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-live.h
new file mode 100644
index 0000000..3d8200e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-live.h
@@ -0,0 +1,326 @@
+/* Routines for liveness in SSA trees.
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Contributed by Andrew MacLeod  <amacleod@redhat.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+#ifndef _TREE_SSA_LIVE_H
+#define _TREE_SSA_LIVE_H 1
+
+#include "partition.h"
+
+/* Used to create the variable mapping when we go out of SSA form.
+
+   Mapping from an ssa_name to a partition number is maintained, as well as
+   partition number back to ssa_name.
+
+   This data structure also supports "views", which work on a subset of all
+   partitions.  This allows the coalescer to decide what partitions are
+   interesting to it, and only work with those partitions.  Whenever the view
+   is changed, the partition numbers change, but none of the partition groupings
+   change. (ie, it is truly a view since it doesn't change anything)
+
+   The final component of the data structure is the basevar map.  This provides
+   a list of all the different base variables which occur in a partition view,
+   and a unique index for each one. Routines are provided to quickly produce
+   the base variable of a partition.
+
+   Note that members of a partition MUST all have the same base variable.  */
+
+typedef struct _var_map
+{
+  /* The partition manager of all variables.  */
+  partition var_partition;
+
+  /* Vector for managing partitions views.  */
+  int *partition_to_view;
+  int *view_to_partition;
+
+  /* Current number of partitions in var_map based on the current view.  */
+  unsigned int num_partitions;
+
+  /* Original full partition size.  */
+  unsigned int partition_size;
+
+  /* Number of base variables in the base var list.  */
+  int num_basevars;
+
+  /* Map of partitions numbers to base variable table indexes.  */
+  int *partition_to_base_index;
+
+  /* Bitmap of basic block.  It describes the region within which the analysis
+     is done.  Using pointer avoids allocating memory in out-of-ssa case.  */
+  bitmap bmp_bbs;
+
+  /* Vector of basic block in the region.  */
+  vec<basic_block> vec_bbs;
+
+  /* True if this map is for out-of-ssa, otherwise for live range
+     computation.  When for out-of-ssa, it also means the var map is computed
+     for whole current function.  */
+  bool outofssa_p;
+} *var_map;
+
+
+/* Value used to represent no partition number.  */
+#define NO_PARTITION		-1
+
+extern var_map init_var_map (int, struct loop* = NULL);
+extern void delete_var_map (var_map);
+extern int var_union (var_map, tree, tree);
+extern void partition_view_normal (var_map);
+extern void partition_view_bitmap (var_map, bitmap);
+extern void dump_scope_blocks (FILE *, dump_flags_t);
+extern void debug_scope_block (tree, dump_flags_t);
+extern void debug_scope_blocks (dump_flags_t);
+extern void remove_unused_locals (void);
+extern void dump_var_map (FILE *, var_map);
+extern void debug (_var_map &ref);
+extern void debug (_var_map *ptr);
+
+
+/* Return TRUE if region of the MAP contains basic block BB.  */
+
+inline bool
+region_contains_p (var_map map, basic_block bb)
+{
+  /* It's possible that the function is called with ENTRY_BLOCK/EXIT_BLOCK.  */
+  if (map->outofssa_p)
+    return (bb->index != ENTRY_BLOCK && bb->index != EXIT_BLOCK);
+
+  return bitmap_bit_p (map->bmp_bbs, bb->index);
+}
+
+
+/* Return number of partitions in MAP.  */
+
+static inline unsigned
+num_var_partitions (var_map map)
+{
+  return map->num_partitions;
+}
+
+
+/* Given partition index I from MAP, return the variable which represents that
+   partition.  */
+
+static inline tree
+partition_to_var (var_map map, int i)
+{
+  tree name;
+  if (map->view_to_partition)
+    i = map->view_to_partition[i];
+  i = partition_find (map->var_partition, i);
+  name = ssa_name (i);
+  return name;
+}
+
+
+/* Given ssa_name VERSION, if it has a partition in MAP,  return the var it
+   is associated with.  Otherwise return NULL.  */
+
+static inline tree
+version_to_var (var_map map, int version)
+{
+  int part;
+  part = partition_find (map->var_partition, version);
+  if (map->partition_to_view)
+    part = map->partition_to_view[part];
+  if (part == NO_PARTITION)
+    return NULL_TREE;
+
+  return partition_to_var (map, part);
+}
+
+
+/* Given VAR, return the partition number in MAP which contains it.
+   NO_PARTITION is returned if it's not in any partition.  */
+
+static inline int
+var_to_partition (var_map map, tree var)
+{
+  int part;
+
+  part = partition_find (map->var_partition, SSA_NAME_VERSION (var));
+  if (map->partition_to_view)
+    part = map->partition_to_view[part];
+  return part;
+}
+
+
+/* Given VAR, return the variable which represents the entire partition
+   it is a member of in MAP.  NULL is returned if it is not in a partition.  */
+
+static inline tree
+var_to_partition_to_var (var_map map, tree var)
+{
+  int part;
+
+  part = var_to_partition (map, var);
+  if (part == NO_PARTITION)
+    return NULL_TREE;
+  return partition_to_var (map, part);
+}
+
+
+/* Return the index into the basevar table for PARTITION's base in MAP.  */
+
+static inline int
+basevar_index (var_map map, int partition)
+{
+  gcc_checking_assert (partition >= 0
+	      	       && partition <= (int) num_var_partitions (map));
+  return map->partition_to_base_index[partition];
+}
+
+
+/* Return the number of different base variables in MAP.  */
+
+static inline int
+num_basevars (var_map map)
+{
+  return map->num_basevars;
+}
+
+
+/*  ---------------- live on entry/exit info ------------------------------
+
+    This structure is used to represent live range information on SSA based
+    trees. A partition map must be provided, and based on the active partitions,
+    live-on-entry information and live-on-exit information can be calculated.
+    As well, partitions are marked as to whether they are global (live
+    outside the basic block they are defined in).
+
+    The live-on-entry information is per block.  It provide a bitmap for
+    each block which has a bit set for each partition that is live on entry to
+    that block.
+
+    The live-on-exit information is per block.  It provides a bitmap for each
+    block indicating which partitions are live on exit from the block.
+
+    For the purposes of this implementation, we treat the elements of a PHI
+    as follows:
+
+       Uses in a PHI are considered LIVE-ON-EXIT to the block from which they
+       originate. They are *NOT* considered live on entry to the block
+       containing the PHI node.
+
+       The Def of a PHI node is *not* considered live on entry to the block.
+       It is considered to be "define early" in the block. Picture it as each
+       block having a stmt (or block-preheader) before the first real stmt in
+       the block which defines all the variables that are defined by PHIs.
+
+    -----------------------------------------------------------------------  */
+
+
+typedef struct tree_live_info_d
+{
+  /* Var map this relates to.  */
+  var_map map;
+
+  /* Bitmap indicating which partitions are global.  */
+  bitmap global;
+
+  /* Bitmaps of live on entry blocks for partition elements.  */
+  bitmap_head *livein;
+
+  /* Bitmaps of what variables are live on exit for a basic blocks.  */
+  bitmap_head *liveout;
+
+  /* Number of basic blocks when live on exit calculated.  */
+  int num_blocks;
+
+  /* Vector used when creating live ranges as a visited stack.  */
+  int *work_stack;
+
+  /* Top of workstack.  */
+  int *stack_top;
+
+  /* Obstacks to allocate the bitmaps on.  */
+  bitmap_obstack livein_obstack;
+  bitmap_obstack liveout_obstack;
+} *tree_live_info_p;
+
+
+#define LIVEDUMP_ENTRY	0x01
+#define LIVEDUMP_EXIT	0x02
+#define LIVEDUMP_ALL	(LIVEDUMP_ENTRY | LIVEDUMP_EXIT)
+extern void delete_tree_live_info (tree_live_info_p);
+extern tree_live_info_p calculate_live_ranges (var_map, bool);
+extern void debug (tree_live_info_d &ref);
+extern void debug (tree_live_info_d *ptr);
+extern void dump_live_info (FILE *, tree_live_info_p, int);
+
+
+/*  Return TRUE if P is marked as a global in LIVE.  */
+
+static inline int
+partition_is_global (tree_live_info_p live, int p)
+{
+  gcc_checking_assert (live->global);
+  return bitmap_bit_p (live->global, p);
+}
+
+
+/* Return the bitmap from LIVE representing the live on entry blocks for
+   partition P.  */
+
+static inline bitmap
+live_on_entry (tree_live_info_p live, basic_block bb)
+{
+  gcc_checking_assert (live->livein
+		       && bb != ENTRY_BLOCK_PTR_FOR_FN (cfun)
+		       && bb != EXIT_BLOCK_PTR_FOR_FN (cfun));
+
+  return &live->livein[bb->index];
+}
+
+
+/* Return the bitmap from LIVE representing the live on exit partitions from
+   block BB.  */
+
+static inline bitmap
+live_on_exit (tree_live_info_p live, basic_block bb)
+{
+  gcc_checking_assert (live->liveout
+		       && bb != ENTRY_BLOCK_PTR_FOR_FN (cfun)
+		       && bb != EXIT_BLOCK_PTR_FOR_FN (cfun));
+
+  return &live->liveout[bb->index];
+}
+
+
+/* Return the partition map which the information in LIVE utilizes.  */
+
+static inline var_map
+live_var_map (tree_live_info_p live)
+{
+  return live->map;
+}
+
+
+/* Mark partition P as live on entry to basic block BB in LIVE.  */
+
+static inline void
+make_live_on_entry (tree_live_info_p live, basic_block bb , int p)
+{
+  bitmap_set_bit (&live->livein[bb->index], p);
+  bitmap_set_bit (live->global, p);
+}
+
+#endif /* _TREE_SSA_LIVE_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-loop-ivopts.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-loop-ivopts.h
new file mode 100644
index 0000000..6f21e63
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-loop-ivopts.h
@@ -0,0 +1,37 @@
+/* Header file for Induction variable optimizations.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_SSA_LOOP_IVOPTS_H
+#define GCC_TREE_SSA_LOOP_IVOPTS_H
+
+extern edge single_dom_exit (struct loop *);
+extern void dump_iv (FILE *, struct iv *);
+extern void dump_use (FILE *, struct iv_use *);
+extern void dump_uses (FILE *, struct ivopts_data *);
+extern void dump_cand (FILE *, struct iv_cand *);
+extern bool contains_abnormal_ssa_name_p (tree);
+extern struct loop *outermost_invariant_loop_for_expr (struct loop *, tree);
+extern bool expr_invariant_in_loop_p (struct loop *, tree);
+extern tree strip_offset (tree, poly_uint64_pod *);
+bool may_be_nonaddressable_p (tree expr);
+void tree_ssa_iv_optimize (void);
+
+void create_canonical_iv (struct loop *, edge, tree,
+			  tree * = NULL, tree * = NULL);
+#endif /* GCC_TREE_SSA_LOOP_IVOPTS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-loop-manip.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-loop-manip.h
new file mode 100644
index 0000000..0020659
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-loop-manip.h
@@ -0,0 +1,61 @@
+/* Header file for High-level loop manipulation functions.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_SSA_LOOP_MANIP_H
+#define GCC_TREE_SSA_LOOP_MANIP_H
+
+typedef void (*transform_callback)(struct loop *, void *);
+
+extern void create_iv (tree, tree, tree, struct loop *, gimple_stmt_iterator *,
+		       bool, tree *, tree *);
+extern void rewrite_into_loop_closed_ssa_1 (bitmap, unsigned, int,
+					    struct loop *);
+extern void rewrite_into_loop_closed_ssa (bitmap, unsigned);
+extern void rewrite_virtuals_into_loop_closed_ssa (struct loop *);
+extern void verify_loop_closed_ssa (bool, struct loop * = NULL);
+
+static inline void
+checking_verify_loop_closed_ssa (bool verify_ssa_p, struct loop *loop = NULL)
+{
+  if (flag_checking)
+    verify_loop_closed_ssa (verify_ssa_p, loop);
+}
+
+extern basic_block split_loop_exit_edge (edge, bool = false);
+extern basic_block ip_end_pos (struct loop *);
+extern basic_block ip_normal_pos (struct loop *);
+extern void standard_iv_increment_position (struct loop *,
+					    gimple_stmt_iterator *, bool *);
+extern bool gimple_duplicate_loop_to_header_edge (struct loop *, edge,
+						  unsigned int, sbitmap,
+						  edge, vec<edge> *,
+						  int);
+extern bool can_unroll_loop_p (struct loop *loop, unsigned factor,
+			       struct tree_niter_desc *niter);
+extern gcov_type niter_for_unrolled_loop (struct loop *, unsigned);
+extern void tree_transform_and_unroll_loop (struct loop *, unsigned,
+					    edge, struct tree_niter_desc *,
+					    transform_callback, void *);
+extern void tree_unroll_loop (struct loop *, unsigned,
+			      edge, struct tree_niter_desc *);
+extern tree canonicalize_loop_ivs (struct loop *, tree *, bool);
+
+
+
+#endif /* GCC_TREE_SSA_LOOP_MANIP_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-loop-niter.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-loop-niter.h
new file mode 100644
index 0000000..dc11648
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-loop-niter.h
@@ -0,0 +1,59 @@
+/* Header file for loop interation estimates.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_SSA_LOOP_NITER_H
+#define GCC_TREE_SSA_LOOP_NITER_H
+
+extern tree expand_simple_operations (tree, tree = NULL);
+extern tree simplify_using_initial_conditions (struct loop *, tree);
+extern bool loop_only_exit_p (const struct loop *, const_edge);
+extern bool number_of_iterations_exit (struct loop *, edge,
+				       struct tree_niter_desc *niter, bool,
+				       bool every_iteration = true);
+extern bool number_of_iterations_exit_assumptions (struct loop *, edge,
+						   struct tree_niter_desc *,
+						   gcond **, bool = true);
+extern tree find_loop_niter (struct loop *, edge *);
+extern bool finite_loop_p (struct loop *);
+extern tree loop_niter_by_eval (struct loop *, edge);
+extern tree find_loop_niter_by_eval (struct loop *, edge *);
+extern bool estimated_loop_iterations (struct loop *, widest_int *);
+extern HOST_WIDE_INT estimated_loop_iterations_int (struct loop *);
+extern bool max_loop_iterations (struct loop *, widest_int *);
+extern HOST_WIDE_INT max_loop_iterations_int (struct loop *);
+extern bool likely_max_loop_iterations (struct loop *, widest_int *);
+extern HOST_WIDE_INT likely_max_loop_iterations_int (struct loop *);
+extern HOST_WIDE_INT max_stmt_executions_int (struct loop *);
+extern HOST_WIDE_INT likely_max_stmt_executions_int (struct loop *);
+extern HOST_WIDE_INT estimated_stmt_executions_int (struct loop *);
+extern bool max_stmt_executions (struct loop *, widest_int *);
+extern bool likely_max_stmt_executions (struct loop *, widest_int *);
+extern bool estimated_stmt_executions (struct loop *, widest_int *);
+extern void estimate_numbers_of_iterations (function *);
+extern void estimate_numbers_of_iterations (struct loop *);
+extern bool stmt_dominates_stmt_p (gimple *, gimple *);
+extern bool nowrap_type_p (tree);
+extern bool scev_probably_wraps_p (tree, tree, tree, gimple *,
+				   struct loop *, bool);
+extern void free_numbers_of_iterations_estimates (struct loop *);
+extern void free_numbers_of_iterations_estimates (function *);
+extern tree simplify_replace_tree (tree, tree, tree, tree (*)(tree) = NULL);
+extern void substitute_in_loop_info (struct loop *, tree, tree);
+
+#endif /* GCC_TREE_SSA_LOOP_NITER_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-loop.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-loop.h
new file mode 100644
index 0000000..2fc9e8c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-loop.h
@@ -0,0 +1,82 @@
+/* Header file for SSA loop optimizations.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_SSA_LOOP_H
+#define GCC_TREE_SSA_LOOP_H
+
+
+/* Affine iv.  */
+
+struct affine_iv
+{
+  /* Iv = BASE + STEP * i.  */
+  tree base, step;
+
+  /* True if this iv does not overflow.  */
+  bool no_overflow;
+};
+
+/* Description of number of iterations of a loop.  All the expressions inside
+   the structure can be evaluated at the end of the loop's preheader
+   (and due to ssa form, also anywhere inside the body of the loop).  */
+
+struct tree_niter_desc
+{
+  tree assumptions;	/* The boolean expression.  If this expression evaluates
+			   to false, then the other fields in this structure
+			   should not be used; there is no guarantee that they
+			   will be correct.  */
+  tree may_be_zero;	/* The boolean expression.  If it evaluates to true,
+			   the loop will exit in the first iteration (i.e.
+			   its latch will not be executed), even if the niter
+			   field says otherwise.  */
+  tree niter;		/* The expression giving the number of iterations of
+			   a loop (provided that assumptions == true and
+			   may_be_zero == false), more precisely the number
+			   of executions of the latch of the loop.  */
+  widest_int max;	/* The upper bound on the number of iterations of
+			   the loop.  */
+
+  /* The simplified shape of the exit condition.  The loop exits if
+     CONTROL CMP BOUND is false, where CMP is one of NE_EXPR,
+     LT_EXPR, or GT_EXPR, and step of CONTROL is positive if CMP is
+     LE_EXPR and negative if CMP is GE_EXPR.  This information is used
+     by loop unrolling.  */
+  affine_iv control;
+  tree bound;
+  enum tree_code cmp;
+};
+
+extern bool for_each_index (tree *, bool (*) (tree, tree *, void *), void *);
+extern char *get_lsm_tmp_name (tree ref, unsigned n, const char *suffix = NULL);
+extern unsigned tree_num_loop_insns (struct loop *, struct eni_weights *);
+
+/* Returns the loop of the statement STMT.  */
+
+static inline struct loop *
+loop_containing_stmt (gimple *stmt)
+{
+  basic_block bb = gimple_bb (stmt);
+  if (!bb)
+    return NULL;
+
+  return bb->loop_father;
+}
+
+#endif /* GCC_TREE_SSA_LOOP_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-operands.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-operands.h
new file mode 100644
index 0000000..72e41ff
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-operands.h
@@ -0,0 +1,122 @@
+/* SSA operand management for trees.
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_SSA_OPERANDS_H
+#define GCC_TREE_SSA_OPERANDS_H
+
+/* Interface to SSA operands.  */
+
+
+/* This represents a pointer to a DEF operand.  */
+typedef tree *def_operand_p;
+
+/* This represents a pointer to a USE operand.  */
+typedef ssa_use_operand_t *use_operand_p;
+
+/* NULL operand types.  */
+#define NULL_USE_OPERAND_P 		((use_operand_p)NULL)
+#define NULL_DEF_OPERAND_P 		((def_operand_p)NULL)
+
+/* This represents the USE operands of a stmt.  */
+struct use_optype_d
+{
+  struct use_optype_d *next;
+  struct ssa_use_operand_t use_ptr;
+};
+typedef struct use_optype_d *use_optype_p;
+
+/* This structure represents a variable sized buffer which is allocated by the
+   operand memory manager.  Operands are suballocated out of this block.  The
+   MEM array varies in size.  */
+
+struct GTY((chain_next("%h.next"))) ssa_operand_memory_d {
+  struct ssa_operand_memory_d *next;
+  char mem[1];
+};
+
+/* Per-function operand caches.  */
+struct GTY(()) ssa_operands {
+   struct ssa_operand_memory_d *operand_memory;
+   unsigned operand_memory_index;
+   /* Current size of the operand memory buffer.  */
+   unsigned int ssa_operand_mem_size;
+
+   bool ops_active;
+
+   struct use_optype_d * GTY ((skip (""))) free_uses;
+};
+
+#define USE_FROM_PTR(PTR)	get_use_from_ptr (PTR)
+#define DEF_FROM_PTR(PTR)	get_def_from_ptr (PTR)
+#define SET_USE(USE, V)		set_ssa_use_from_ptr (USE, V)
+#define SET_DEF(DEF, V)		((*(DEF)) = (V))
+
+#define USE_STMT(USE)		(USE)->loc.stmt
+
+#define USE_OP_PTR(OP)		(&((OP)->use_ptr))
+#define USE_OP(OP)		(USE_FROM_PTR (USE_OP_PTR (OP)))
+
+#define PHI_RESULT_PTR(PHI)	gimple_phi_result_ptr (PHI)
+#define PHI_RESULT(PHI)		DEF_FROM_PTR (PHI_RESULT_PTR (PHI))
+#define SET_PHI_RESULT(PHI, V)	SET_DEF (PHI_RESULT_PTR (PHI), (V))
+/*
+#define PHI_ARG_DEF(PHI, I)	USE_FROM_PTR (PHI_ARG_DEF_PTR ((PHI), (I)))
+*/
+#define PHI_ARG_DEF_PTR(PHI, I)	gimple_phi_arg_imm_use_ptr ((PHI), (I))
+#define PHI_ARG_DEF(PHI, I)	gimple_phi_arg_def ((PHI), (I))
+#define SET_PHI_ARG_DEF(PHI, I, V)					\
+				SET_USE (PHI_ARG_DEF_PTR ((PHI), (I)), (V))
+#define PHI_ARG_DEF_FROM_EDGE(PHI, E)					\
+				PHI_ARG_DEF ((PHI), (E)->dest_idx)
+#define PHI_ARG_DEF_PTR_FROM_EDGE(PHI, E)				\
+				PHI_ARG_DEF_PTR ((PHI), (E)->dest_idx)
+#define PHI_ARG_INDEX_FROM_USE(USE)   phi_arg_index_from_use (USE)
+
+
+extern bool ssa_operands_active (struct function *);
+extern void init_ssa_operands (struct function *fn);
+extern void fini_ssa_operands (struct function *);
+extern bool verify_ssa_operands (struct function *, gimple *stmt);
+extern void free_stmt_operands (struct function *, gimple *);
+extern void update_stmt_operands (struct function *, gimple *);
+extern void swap_ssa_operands (gimple *, tree *, tree *);
+extern bool verify_imm_links (FILE *f, tree var);
+
+extern void dump_immediate_uses_for (FILE *file, tree var);
+extern void dump_immediate_uses (FILE *file);
+extern void debug_immediate_uses (void);
+extern void debug_immediate_uses_for (tree var);
+
+extern void unlink_stmt_vdef (gimple *);
+
+/* Return the tree pointed-to by USE.  */
+static inline tree
+get_use_from_ptr (use_operand_p use)
+{
+  return *(use->use);
+}
+
+/* Return the tree pointed-to by DEF.  */
+static inline tree
+get_def_from_ptr (def_operand_p def)
+{
+  return *def;
+}
+
+#endif  /* GCC_TREE_SSA_OPERANDS_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-propagate.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-propagate.h
new file mode 100644
index 0000000..81b635e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-propagate.h
@@ -0,0 +1,112 @@
+/* Data structures and function declarations for the SSA value propagation
+   engine.
+   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Contributed by Diego Novillo <dnovillo@redhat.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef _TREE_SSA_PROPAGATE_H
+#define _TREE_SSA_PROPAGATE_H 1
+
+/* If SIM_P is true, statement S will be simulated again.  */
+
+static inline void
+prop_set_simulate_again (gimple *s, bool visit_p)
+{
+  gimple_set_visited (s, visit_p);
+}
+
+/* Return true if statement T should be simulated again.  */
+
+static inline bool
+prop_simulate_again_p (gimple *s)
+{
+  return gimple_visited_p (s);
+}
+
+/* Lattice values used for propagation purposes.  Specific instances
+   of a propagation engine must return these values from the statement
+   and PHI visit functions to direct the engine.  */
+enum ssa_prop_result {
+    /* The statement produces nothing of interest.  No edges will be
+       added to the work lists.  */
+    SSA_PROP_NOT_INTERESTING,
+
+    /* The statement produces an interesting value.  The set SSA_NAMEs
+       returned by SSA_PROP_VISIT_STMT should be added to
+       INTERESTING_SSA_EDGES.  If the statement being visited is a
+       conditional jump, SSA_PROP_VISIT_STMT should indicate which edge
+       out of the basic block should be marked executable.  */
+    SSA_PROP_INTERESTING,
+
+    /* The statement produces a varying (i.e., useless) value and
+       should not be simulated again.  If the statement being visited
+       is a conditional jump, all the edges coming out of the block
+       will be considered executable.  */
+    SSA_PROP_VARYING
+};
+
+
+extern bool valid_gimple_rhs_p (tree);
+extern void move_ssa_defining_stmt_for_defs (gimple *, gimple *);
+extern bool update_gimple_call (gimple_stmt_iterator *, tree, int, ...);
+extern bool update_call_from_tree (gimple_stmt_iterator *, tree);
+extern bool stmt_makes_single_store (gimple *);
+extern bool may_propagate_copy (tree, tree);
+extern bool may_propagate_copy_into_stmt (gimple *, tree);
+extern bool may_propagate_copy_into_asm (tree);
+extern void propagate_value (use_operand_p, tree);
+extern void replace_exp (use_operand_p, tree);
+extern void propagate_tree_value (tree *, tree);
+extern void propagate_tree_value_into_stmt (gimple_stmt_iterator *, tree);
+
+/* Public interface into the SSA propagation engine.  Clients should inherit
+   from this class and provide their own visitors.  */
+
+class ssa_propagation_engine
+{
+ public:
+
+  virtual ~ssa_propagation_engine (void) { }
+
+  /* Virtual functions the clients must provide to visit statements
+     and phi nodes respectively.  */
+  virtual enum ssa_prop_result visit_stmt (gimple *, edge *, tree *) = 0;
+  virtual enum ssa_prop_result visit_phi (gphi *) = 0;
+
+  /* Main interface into the propagation engine.  */
+  void ssa_propagate (void);
+
+ private:
+  /* Internal implementation details.  */
+  void simulate_stmt (gimple *stmt);
+  void simulate_block (basic_block);
+};
+
+class substitute_and_fold_engine
+{
+ public:
+  virtual ~substitute_and_fold_engine (void) { }
+  virtual bool fold_stmt (gimple_stmt_iterator *) { return false; }
+  virtual tree get_value (tree) { return NULL_TREE; }
+
+  bool substitute_and_fold (basic_block = NULL);
+  bool replace_uses_in (gimple *);
+  bool replace_phi_args_in (gphi *);
+};
+
+#endif /* _TREE_SSA_PROPAGATE_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-sccvn.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-sccvn.h
new file mode 100644
index 0000000..bd661bc
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-sccvn.h
@@ -0,0 +1,269 @@
+/* Tree SCC value numbering
+   Copyright (C) 2007-2019 Free Software Foundation, Inc.
+   Contributed by Daniel Berlin <dberlin@dberlin.org>
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify
+   under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   GCC is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef TREE_SSA_SCCVN_H
+#define TREE_SSA_SCCVN_H
+
+/* In tree-ssa-sccvn.c  */
+bool expressions_equal_p (tree, tree);
+
+
+/* TOP of the VN lattice.  */
+extern tree VN_TOP;
+
+/* A predicated value.  */
+struct vn_pval
+{
+  vn_pval *next;
+  /* The value of the expression this is attached to is RESULT in
+     case the expression is computed dominated by one of the blocks
+     in valid_dominated_by_p.  */
+  tree result;
+  unsigned n;
+  int valid_dominated_by_p[1];
+};
+
+/* N-ary operations in the hashtable consist of length operands, an
+   opcode, and a type.  Result is the value number of the operation,
+   and hashcode is stored to avoid having to calculate it
+   repeatedly.  */
+
+typedef struct vn_nary_op_s
+{
+  vn_nary_op_s *next;
+  vn_nary_op_s *unwind_to;
+  /* Unique identify that all expressions with the same value have. */
+  unsigned int value_id;
+  ENUM_BITFIELD(tree_code) opcode : 16;
+  unsigned length : 16;
+  hashval_t hashcode;
+  unsigned predicated_values : 1;
+  union {
+      /* If ! predicated_values this is the value of the expression.  */
+      tree result;
+      /* If predicated_values this is a list of values of the expression.  */
+      vn_pval *values;
+  } u;
+  tree type;
+  tree op[1];
+} *vn_nary_op_t;
+typedef const struct vn_nary_op_s *const_vn_nary_op_t;
+
+/* Return the size of a vn_nary_op_t with LENGTH operands.  */
+
+static inline size_t
+sizeof_vn_nary_op (unsigned int length)
+{
+  return sizeof (struct vn_nary_op_s) + sizeof (tree) * length - sizeof (tree);
+}
+
+/* Phi nodes in the hashtable consist of their non-VN_TOP phi
+   arguments, and the basic block the phi is in. Result is the value
+   number of the operation, and hashcode is stored to avoid having to
+   calculate it repeatedly.  Phi nodes not in the same block are never
+   considered equivalent.  */
+
+typedef struct vn_phi_s
+{
+  vn_phi_s *next;
+  /* Unique identifier that all expressions with the same value have. */
+  unsigned int value_id;
+  hashval_t hashcode;
+  basic_block block;
+  /* Controlling condition lhs/rhs.  */
+  tree cclhs;
+  tree ccrhs;
+  tree type;
+  tree result;
+  /* The number of args is determined by EDGE_COUT (block->preds).  */
+  tree phiargs[1];
+} *vn_phi_t;
+typedef const struct vn_phi_s *const_vn_phi_t;
+
+/* Reference operands only exist in reference operations structures.
+   They consist of an opcode, type, and some number of operands.  For
+   a given opcode, some, all, or none of the operands may be used.
+   The operands are there to store the information that makes up the
+   portion of the addressing calculation that opcode performs.  */
+
+typedef struct vn_reference_op_struct
+{
+  ENUM_BITFIELD(tree_code) opcode : 16;
+  /* Dependence info, used for [TARGET_]MEM_REF only.  */
+  unsigned short clique;
+  unsigned short base;
+  unsigned reverse : 1;
+  /* For storing TYPE_ALIGN for array ref element size computation.  */
+  unsigned align : 6;
+  /* Constant offset this op adds or -1 if it is variable.  */
+  poly_int64_pod off;
+  tree type;
+  tree op0;
+  tree op1;
+  tree op2;
+} vn_reference_op_s;
+typedef vn_reference_op_s *vn_reference_op_t;
+typedef const vn_reference_op_s *const_vn_reference_op_t;
+
+inline unsigned
+vn_ref_op_align_unit (vn_reference_op_t op)
+{
+  return op->align ? ((unsigned)1 << (op->align - 1)) / BITS_PER_UNIT : 0;
+}
+
+/* A reference operation in the hashtable is representation as
+   the vuse, representing the memory state at the time of
+   the operation, and a collection of operands that make up the
+   addressing calculation.  If two vn_reference_t's have the same set
+   of operands, they access the same memory location. We also store
+   the resulting value number, and the hashcode.  */
+
+typedef struct vn_reference_s
+{
+  vn_reference_s *next;
+  /* Unique identifier that all expressions with the same value have. */
+  unsigned int value_id;
+  hashval_t hashcode;
+  tree vuse;
+  alias_set_type set;
+  tree type;
+  vec<vn_reference_op_s> operands;
+  tree result;
+  tree result_vdef;
+} *vn_reference_t;
+typedef const struct vn_reference_s *const_vn_reference_t;
+
+typedef struct vn_constant_s
+{
+  unsigned int value_id;
+  hashval_t hashcode;
+  tree constant;
+} *vn_constant_t;
+
+enum vn_kind { VN_NONE, VN_CONSTANT, VN_NARY, VN_REFERENCE, VN_PHI };
+enum vn_kind vn_get_stmt_kind (gimple *);
+
+/* Hash the type TYPE using bits that distinguishes it in the
+   types_compatible_p sense.  */
+
+static inline hashval_t
+vn_hash_type (tree type)
+{
+  return (INTEGRAL_TYPE_P (type)
+	  + (INTEGRAL_TYPE_P (type)
+	     ? TYPE_PRECISION (type) + TYPE_UNSIGNED (type) : 0));
+}
+
+/* Hash the constant CONSTANT with distinguishing type incompatible
+   constants in the types_compatible_p sense.  */
+
+static inline hashval_t
+vn_hash_constant_with_type (tree constant)
+{
+  inchash::hash hstate;
+  inchash::add_expr (constant, hstate);
+  hstate.merge_hash (vn_hash_type (TREE_TYPE (constant)));
+  return hstate.end ();
+}
+
+/* Compare the constants C1 and C2 with distinguishing type incompatible
+   constants in the types_compatible_p sense.  */
+
+static inline bool
+vn_constant_eq_with_type (tree c1, tree c2)
+{
+  return (expressions_equal_p (c1, c2)
+	  && types_compatible_p (TREE_TYPE (c1), TREE_TYPE (c2)));
+}
+
+typedef struct vn_ssa_aux
+{
+  /* SSA name this vn_ssa_aux is associated with in the lattice.  */
+  tree name;
+  /* Value number. This may be an SSA name or a constant.  */
+  tree valnum;
+  /* Statements to insert if needs_insertion is true.  */
+  gimple_seq expr;
+
+  /* Unique identifier that all expressions with the same value have. */
+  unsigned int value_id;
+
+  /* Whether the SSA_NAME has been processed at least once.  */
+  unsigned visited : 1;
+
+  /* Whether the SSA_NAME has no defining statement and thus an
+     insertion of such with EXPR as definition is required before
+     a use can be created of it.  */
+  unsigned needs_insertion : 1;
+} *vn_ssa_aux_t;
+
+enum vn_lookup_kind { VN_NOWALK, VN_WALK, VN_WALKREWRITE };
+
+/* Return the value numbering info for an SSA_NAME.  */
+bool has_VN_INFO (tree);
+extern vn_ssa_aux_t VN_INFO (tree);
+tree vn_get_expr_for (tree);
+void scc_vn_restore_ssa_info (void);
+tree vn_nary_op_lookup (tree, vn_nary_op_t *);
+tree vn_nary_op_lookup_stmt (gimple *, vn_nary_op_t *);
+tree vn_nary_op_lookup_pieces (unsigned int, enum tree_code,
+			       tree, tree *, vn_nary_op_t *);
+vn_nary_op_t vn_nary_op_insert (tree, tree);
+vn_nary_op_t vn_nary_op_insert_pieces (unsigned int, enum tree_code,
+				       tree, tree *, tree, unsigned int);
+bool ao_ref_init_from_vn_reference (ao_ref *, alias_set_type, tree,
+				    vec<vn_reference_op_s> );
+vec<vn_reference_op_s> vn_reference_operands_for_lookup (tree);
+tree vn_reference_lookup_pieces (tree, alias_set_type, tree,
+				 vec<vn_reference_op_s> ,
+				 vn_reference_t *, vn_lookup_kind);
+tree vn_reference_lookup (tree, tree, vn_lookup_kind, vn_reference_t *, bool);
+void vn_reference_lookup_call (gcall *, vn_reference_t *, vn_reference_t);
+vn_reference_t vn_reference_insert_pieces (tree, alias_set_type, tree,
+					   vec<vn_reference_op_s> ,
+					   tree, unsigned int);
+
+bool vn_nary_op_eq (const_vn_nary_op_t const vno1,
+		    const_vn_nary_op_t const vno2);
+bool vn_nary_may_trap (vn_nary_op_t);
+bool vn_reference_may_trap (vn_reference_t);
+bool vn_reference_eq (const_vn_reference_t const, const_vn_reference_t const);
+unsigned int get_max_value_id (void);
+unsigned int get_next_value_id (void);
+unsigned int get_constant_value_id (tree);
+unsigned int get_or_alloc_constant_value_id (tree);
+bool value_id_constant_p (unsigned int);
+tree fully_constant_vn_reference_p (vn_reference_t);
+tree vn_nary_simplify (vn_nary_op_t);
+
+unsigned do_rpo_vn (function *, edge, bitmap);
+void run_rpo_vn (vn_lookup_kind);
+unsigned eliminate_with_rpo_vn (bitmap);
+void free_rpo_vn (void);
+
+/* Valueize NAME if it is an SSA name, otherwise just return it.  This hook
+   is initialized by run_scc_vn.  */
+extern tree (*vn_valueize) (tree);
+
+/* Context that valueization should operate on.  */
+extern basic_block vn_context_bb;
+
+
+#endif /* TREE_SSA_SCCVN_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-scopedtables.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-scopedtables.h
new file mode 100644
index 0000000..2328d1c
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-scopedtables.h
@@ -0,0 +1,212 @@
+/* Header file for SSA dominator optimizations.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_SSA_SCOPED_TABLES_H
+#define GCC_TREE_SSA_SCOPED_TABLES_H
+
+/* Representation of a "naked" right-hand-side expression, to be used
+   in recording available expressions in the expression hash table.  */
+
+enum expr_kind
+{
+  EXPR_SINGLE,
+  EXPR_UNARY,
+  EXPR_BINARY,
+  EXPR_TERNARY,
+  EXPR_CALL,
+  EXPR_PHI
+};
+
+struct hashable_expr
+{
+  tree type;
+  enum expr_kind kind;
+  union {
+    struct { tree rhs; } single;
+    struct { enum tree_code op;  tree opnd; } unary;
+    struct { enum tree_code op;  tree opnd0, opnd1; } binary;
+    struct { enum tree_code op;  tree opnd0, opnd1, opnd2; } ternary;
+    struct { gcall *fn_from; bool pure; size_t nargs; tree *args; } call;
+    struct { size_t nargs; tree *args; } phi;
+  } ops;
+};
+
+/* Structure for recording known value of a conditional expression.
+
+   Clients build vectors of these objects to record known values
+   that occur on edges.  */
+
+struct cond_equivalence
+{
+  /* The condition, in a HASHABLE_EXPR form.  */
+  struct hashable_expr cond;
+
+  /* The result of the condition (true or false.  */
+  tree value;
+};
+
+/* Structure for entries in the expression hash table.  */
+
+typedef class expr_hash_elt * expr_hash_elt_t;
+
+class expr_hash_elt
+{
+ public:
+  expr_hash_elt (gimple *, tree);
+  expr_hash_elt (tree);
+  expr_hash_elt (struct hashable_expr *, tree);
+  expr_hash_elt (class expr_hash_elt &);
+  ~expr_hash_elt ();
+  void print (FILE *);
+  tree vop (void) { return m_vop; }
+  tree lhs (void) { return m_lhs; }
+  struct hashable_expr *expr (void) { return &m_expr; }
+  expr_hash_elt *stamp (void) { return m_stamp; }
+  hashval_t hash (void) { return m_hash; }
+
+ private:
+  /* The expression (rhs) we want to record.  */
+  struct hashable_expr m_expr;
+
+  /* The value (lhs) of this expression.  */
+  tree m_lhs;
+
+  /* The virtual operand associated with the nearest dominating stmt
+     loading from or storing to expr.  */
+  tree m_vop;
+
+  /* The hash value for RHS.  */
+  hashval_t m_hash;
+
+  /* A unique stamp, typically the address of the hash
+     element itself, used in removing entries from the table.  */
+  struct expr_hash_elt *m_stamp;
+
+  /* We should never be making assignments between objects in this class.
+     Though it might allow us to exploit C++11 move semantics if we
+     defined the move constructor and move assignment operator.  */
+  expr_hash_elt& operator= (const expr_hash_elt&);
+};
+
+/* Hashtable helpers.  */
+
+struct expr_elt_hasher : pointer_hash <expr_hash_elt>
+{
+  static inline hashval_t hash (const value_type &p)
+    { return p->hash (); }
+  static bool equal (const value_type &, const compare_type &);
+  static inline void remove (value_type &element)
+    { delete element; }
+};
+
+
+/* This class defines a unwindable expression equivalence table
+   layered on top of the expression hash table.
+
+   Essentially it's just a stack of available expression value pairs with
+   a special marker (NULL, NULL) to indicate unwind points.   */
+
+class avail_exprs_stack
+{
+ public:
+  /* We need access to the AVAIL_EXPR hash table so that we can
+     remove entries from the hash table when unwinding the stack.  */
+  avail_exprs_stack (hash_table<expr_elt_hasher> *table)
+    { m_stack.create (20); m_avail_exprs = table; }
+  ~avail_exprs_stack (void) { m_stack.release (); }
+
+  /* Push the unwinding marker onto the stack.  */
+  void push_marker (void) { record_expr (NULL, NULL, 'M'); }
+
+  /* Restore the AVAIL_EXPRs table to its state when the last marker
+     was pushed.  */
+  void pop_to_marker (void);
+
+  /* Record a single available expression that can be unwound.  */
+  void record_expr (expr_hash_elt_t, expr_hash_elt_t, char);
+
+  /* Get the underlying hash table.  Would this be better as
+     class inheritance?  */
+  hash_table<expr_elt_hasher> *avail_exprs (void)
+    { return m_avail_exprs; }
+
+  /* Lookup and conditionally insert an expression into the table,
+     recording enough information to unwind as needed.  */
+  tree lookup_avail_expr (gimple *, bool, bool);
+
+  void record_cond (cond_equivalence *);
+
+ private:
+  vec<std::pair<expr_hash_elt_t, expr_hash_elt_t> > m_stack;
+  hash_table<expr_elt_hasher> *m_avail_exprs;
+
+  /* For some assignments where the RHS is a binary operator, if we know
+     a equality relationship between the operands, we may be able to compute
+     a result, even if we don't know the exact value of the operands.  */
+  tree simplify_binary_operation (gimple *, class expr_hash_elt);
+
+  /* We do not allow copying this object or initializing one
+     from another.  */
+  avail_exprs_stack& operator= (const avail_exprs_stack&);
+  avail_exprs_stack (class avail_exprs_stack &);
+};
+
+/* This class defines an unwindable const/copy equivalence table
+   layered on top of SSA_NAME_VALUE/set_ssa_name_value.
+
+   Essentially it's just a stack of name,prev value pairs with a
+   special marker (NULL) to indicate unwind points.  */
+
+class const_and_copies
+{
+ public:
+  const_and_copies (void) { m_stack.create (20); };
+  ~const_and_copies (void) { m_stack.release (); }
+
+  /* Push the unwinding marker onto the stack.  */
+  void push_marker (void) { m_stack.safe_push (NULL_TREE); }
+
+  /* Restore the const/copies table to its state when the last marker
+     was pushed.  */
+  void pop_to_marker (void);
+
+  /* Record a single const/copy pair that can be unwound.  This version
+     may follow the value chain for the RHS.  */
+  void record_const_or_copy (tree, tree);
+
+  /* Special entry point when we want to provide an explicit previous
+     value for the first argument.  Try to get rid of this in the future. 
+
+     This version may also follow the value chain for the RHS.  */
+  void record_const_or_copy (tree, tree, tree);
+
+ private:
+  /* Record a single const/copy pair that can be unwound.  This version
+     does not follow the value chain for the RHS.  */
+  void record_const_or_copy_raw (tree, tree, tree);
+
+  vec<tree> m_stack;
+  const_and_copies& operator= (const const_and_copies&);
+  const_and_copies (class const_and_copies &);
+};
+
+void initialize_expr_from_cond (tree cond, struct hashable_expr *expr);
+void record_conditions (vec<cond_equivalence> *p, tree, tree);
+
+#endif /* GCC_TREE_SSA_SCOPED_TABLES_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-strlen.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-strlen.h
new file mode 100644
index 0000000..0b68465
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-strlen.h
@@ -0,0 +1,28 @@
+/* Declarations of tree-ssa-strlen API.
+
+   Copyright (C) 2018-2019 Free Software Foundation, Inc.
+
+   This file is part of GCC.
+
+   GCC is free software; you can redistribute it and/or modify it under
+   the terms of the GNU General Public License as published by the Free
+   Software Foundation; either version 3, or (at your option) any later
+   version.
+
+   GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or
+   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+   for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_SSA_STRLEN_H
+#define GCC_TREE_SSA_STRLEN_H
+
+extern bool is_strlen_related_p (tree, tree);
+extern bool maybe_diag_stxncpy_trunc (gimple_stmt_iterator, tree, tree);
+extern tree set_strlen_range (tree, wide_int, tree = NULL_TREE);
+
+#endif   // GCC_TREE_SSA_STRLEN_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-ter.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-ter.h
new file mode 100644
index 0000000..93fe6d2
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-ter.h
@@ -0,0 +1,26 @@
+/* Header file for tree-ssa-ter.c exports.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_SSA_TER_H
+#define GCC_TREE_SSA_TER_H
+
+extern bitmap find_replaceable_exprs (var_map);
+extern void dump_replaceable_exprs (FILE *, bitmap);
+
+#endif /* GCC_TREE_SSA_TER_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-threadedge.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-threadedge.h
new file mode 100644
index 0000000..0e95989
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-threadedge.h
@@ -0,0 +1,41 @@
+/* Header file for SSA jump threading.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_SSA_THREADEDGE_H
+#define GCC_TREE_SSA_THREADEDGE_H
+
+extern vec<tree> ssa_name_values;
+#define SSA_NAME_VALUE(x) \
+    (SSA_NAME_VERSION (x) < ssa_name_values.length () \
+     ? ssa_name_values[SSA_NAME_VERSION (x)] \
+     : NULL_TREE)
+extern void set_ssa_name_value (tree, tree);
+extern void threadedge_initialize_values (void);
+extern void threadedge_finalize_values (void);
+extern bool potentially_threadable_block (basic_block);
+extern void propagate_threaded_block_debug_into (basic_block, basic_block);
+class evrp_range_analyzer;
+extern void thread_outgoing_edges (basic_block, gcond *,
+				   const_and_copies *,
+				   avail_exprs_stack *,
+				   evrp_range_analyzer *,
+				   tree (*) (gimple *, gimple *,
+					     avail_exprs_stack *, basic_block));
+
+#endif /* GCC_TREE_SSA_THREADEDGE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-threadupdate.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-threadupdate.h
new file mode 100644
index 0000000..d66e8e0
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa-threadupdate.h
@@ -0,0 +1,64 @@
+/* Communication between registering jump thread requests and
+   updating the SSA/CFG for jump threading.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef _TREE_SSA_THREADUPDATE_H
+#define _TREE_SSA_THREADUPDATE_H 1
+
+/* In tree-ssa-threadupdate.c.  */
+extern bool thread_through_all_blocks (bool);
+enum jump_thread_edge_type
+{
+  EDGE_START_JUMP_THREAD,
+  EDGE_FSM_THREAD,
+  EDGE_COPY_SRC_BLOCK,
+  EDGE_COPY_SRC_JOINER_BLOCK,
+  EDGE_NO_COPY_SRC_BLOCK
+};
+
+class jump_thread_edge
+{
+public:
+  jump_thread_edge (edge e, enum jump_thread_edge_type type)
+    : e (e), type (type) {}
+
+  edge e;
+  enum jump_thread_edge_type type;
+};
+
+extern void register_jump_thread (vec <class jump_thread_edge *> *);
+extern void remove_jump_threads_including (edge);
+extern void delete_jump_thread_path (vec <class jump_thread_edge *> *);
+extern void remove_ctrl_stmt_and_useless_edges (basic_block, basic_block);
+extern void free_dom_edge_info (edge);
+extern unsigned int estimate_threading_killed_stmts (basic_block);
+
+enum bb_dom_status
+{
+  /* BB does not dominate latch of the LOOP.  */
+  DOMST_NONDOMINATING,
+  /* The LOOP is broken (there is no path from the header to its latch.  */
+  DOMST_LOOP_BROKEN,
+  /* BB dominates the latch of the LOOP.  */
+  DOMST_DOMINATING
+};
+
+enum bb_dom_status determine_bb_domination_status (struct loop *, basic_block);
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa.h
new file mode 100644
index 0000000..231e2d2
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssa.h
@@ -0,0 +1,92 @@
+/* Header file for any pass which requires SSA routines.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_SSA_H
+#define GCC_TREE_SSA_H
+
+/* Mapping for redirected edges.  */
+struct edge_var_map {
+  tree result;			/* PHI result.  */
+  tree def;			/* PHI arg definition.  */
+  location_t locus;        /* PHI arg location.  */
+};
+
+/* A vector of var maps.  */
+typedef vec<edge_var_map, va_heap, vl_embed> edge_var_map_vector;
+
+
+extern void redirect_edge_var_map_add (edge, tree, tree, location_t);
+extern void redirect_edge_var_map_clear (edge);
+extern void redirect_edge_var_map_dup (edge, edge);
+extern vec<edge_var_map> *redirect_edge_var_map_vector (edge);
+extern void redirect_edge_var_map_empty (void);
+extern edge ssa_redirect_edge (edge, basic_block);
+extern void flush_pending_stmts (edge);
+extern void gimple_replace_ssa_lhs (gimple *, tree);
+extern tree target_for_debug_bind (tree);
+extern void insert_debug_temp_for_var_def (gimple_stmt_iterator *, tree);
+extern void insert_debug_temps_for_defs (gimple_stmt_iterator *);
+extern void reset_debug_uses (gimple *);
+extern void release_defs_bitset (bitmap toremove);
+extern void verify_ssa (bool, bool);
+extern void init_tree_ssa (function *);
+extern void delete_tree_ssa (function *);
+extern bool tree_ssa_useless_type_conversion (tree);
+extern tree tree_ssa_strip_useless_type_conversions (tree);
+
+
+extern bool ssa_defined_default_def_p (tree t);
+extern bool ssa_undefined_value_p (tree, bool = true);
+extern bool gimple_uses_undefined_value_p (gimple *);
+extern void execute_update_addresses_taken (void);
+
+/* Given an edge_var_map V, return the PHI arg definition.  */
+
+static inline tree
+redirect_edge_var_map_def (edge_var_map *v)
+{
+  return v->def;
+}
+
+/* Given an edge_var_map V, return the PHI result.  */
+
+static inline tree
+redirect_edge_var_map_result (edge_var_map *v)
+{
+  return v->result;
+}
+
+/* Given an edge_var_map V, return the PHI arg location.  */
+
+static inline location_t
+redirect_edge_var_map_location (edge_var_map *v)
+{
+  return v->locus;
+}
+
+/* Verify SSA invariants, if internal consistency checks are enabled.  */
+
+static inline void
+checking_verify_ssa (bool check_modified_stmt, bool check_ssa_operands)
+{
+  if (flag_checking)
+    verify_ssa (check_modified_stmt, check_ssa_operands);
+}
+
+#endif /* GCC_TREE_SSA_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssanames.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssanames.h
new file mode 100644
index 0000000..6e6cffb
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-ssanames.h
@@ -0,0 +1,157 @@
+/* SSA name expresssons routines
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_SSANAMES_H
+#define GCC_TREE_SSANAMES_H
+
+/* Aliasing information for SSA_NAMEs representing pointer variables.  */
+
+struct GTY(()) ptr_info_def
+{
+  /* The points-to solution.  */
+  struct pt_solution pt;
+
+  /* Alignment and misalignment of the pointer in bytes.  Together
+     align and misalign specify low known bits of the pointer.
+     ptr & (align - 1) == misalign.  */
+
+  /* When known, this is the power-of-two byte alignment of the object this
+     pointer points into.  This is usually DECL_ALIGN_UNIT for decls and
+     MALLOC_ABI_ALIGNMENT for allocated storage.  When the alignment is not
+     known, it is zero.  Do not access directly but use functions
+     get_ptr_info_alignment, set_ptr_info_alignment,
+     mark_ptr_info_alignment_unknown and similar.  */
+  unsigned int align;
+
+  /* When alignment is known, the byte offset this pointer differs from the
+     above alignment.  Access only through the same helper functions as align
+     above.  */
+  unsigned int misalign;
+};
+
+/* Value range information for SSA_NAMEs representing non-pointer variables.  */
+
+struct GTY ((variable_size)) range_info_def {
+  /* Minimum, maximum and nonzero bits.  */
+  TRAILING_WIDE_INT_ACCESSOR (min, ints, 0)
+  TRAILING_WIDE_INT_ACCESSOR (max, ints, 1)
+  TRAILING_WIDE_INT_ACCESSOR (nonzero_bits, ints, 2)
+  trailing_wide_ints <3> ints;
+};
+
+
+#define SSANAMES(fun) (fun)->gimple_df->ssa_names
+#define DEFAULT_DEFS(fun) (fun)->gimple_df->default_defs
+
+#define num_ssa_names (vec_safe_length (cfun->gimple_df->ssa_names))
+#define ssa_name(i) ((*cfun->gimple_df->ssa_names)[(i)])
+
+#define FOR_EACH_SSA_NAME(I, VAR, FN)					\
+  for (I = 1; SSANAMES (FN)->iterate (I, &VAR); ++I)			\
+    if (VAR)
+
+/* Sets the value range to SSA.  */
+extern void set_range_info (tree, enum value_range_kind, const wide_int_ref &,
+			    const wide_int_ref &);
+extern void set_range_info (tree, const value_range_base &);
+/* Gets the value range from SSA.  */
+extern enum value_range_kind get_range_info (const_tree, wide_int *,
+					     wide_int *);
+extern enum value_range_kind get_range_info (const_tree, value_range_base &);
+extern void set_nonzero_bits (tree, const wide_int_ref &);
+extern wide_int get_nonzero_bits (const_tree);
+extern bool ssa_name_has_boolean_range (tree);
+extern void init_ssanames (struct function *, int);
+extern void fini_ssanames (struct function *);
+extern void ssanames_print_statistics (void);
+extern tree make_ssa_name_fn (struct function *, tree, gimple *,
+			      unsigned int version = 0);
+extern void release_ssa_name_fn (struct function *, tree);
+extern bool get_ptr_info_alignment (struct ptr_info_def *, unsigned int *,
+				    unsigned int *);
+extern void mark_ptr_info_alignment_unknown (struct ptr_info_def *);
+extern void set_ptr_info_alignment (struct ptr_info_def *, unsigned int,
+				    unsigned int);
+extern void adjust_ptr_info_misalignment (struct ptr_info_def *, poly_uint64);
+extern struct ptr_info_def *get_ptr_info (tree);
+extern void set_ptr_nonnull (tree);
+extern bool get_ptr_nonnull (const_tree);
+
+extern tree copy_ssa_name_fn (struct function *, tree, gimple *);
+extern void duplicate_ssa_name_ptr_info (tree, struct ptr_info_def *);
+extern tree duplicate_ssa_name_fn (struct function *, tree, gimple *);
+extern void duplicate_ssa_name_range_info (tree, enum value_range_kind,
+					   struct range_info_def *);
+extern void reset_flow_sensitive_info (tree);
+extern void reset_flow_sensitive_info_in_bb (basic_block);
+extern void release_defs (gimple *);
+extern void replace_ssa_name_symbol (tree, tree);
+extern void flush_ssaname_freelist (void);
+
+
+/* Return an SSA_NAME node for variable VAR defined in statement STMT
+   in function cfun.  */
+
+static inline tree
+make_ssa_name (tree var, gimple *stmt = NULL)
+{
+  return make_ssa_name_fn (cfun, var, stmt);
+}
+
+/* Return an SSA_NAME node using the template SSA name NAME defined in
+   statement STMT in function cfun.  */
+
+static inline tree
+copy_ssa_name (tree var, gimple *stmt = NULL)
+{
+  return copy_ssa_name_fn (cfun, var, stmt);
+}
+
+/*  Creates a duplicate of a SSA name NAME tobe defined by statement STMT
+    in function cfun.  */
+
+static inline tree
+duplicate_ssa_name (tree var, gimple *stmt)
+{
+  return duplicate_ssa_name_fn (cfun, var, stmt);
+}
+
+/* Release the SSA name NAME used in function cfun.  */
+
+static inline void
+release_ssa_name (tree name)
+{
+  release_ssa_name_fn (cfun, name);
+}
+
+/* Return an anonymous SSA_NAME node for type TYPE defined in statement STMT
+   in function cfun.  Arrange so that it uses NAME in dumps.  */
+
+static inline tree
+make_temp_ssa_name (tree type, gimple *stmt, const char *name)
+{
+  tree ssa_name;
+  gcc_checking_assert (TYPE_P (type));
+  ssa_name = make_ssa_name_fn (cfun, type, stmt);
+  SET_SSA_NAME_VAR_OR_IDENTIFIER (ssa_name, get_identifier (name));
+  return ssa_name;
+}
+
+
+#endif /* GCC_TREE_SSANAMES_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-stdarg.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-stdarg.h
new file mode 100644
index 0000000..64d13ce
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-stdarg.h
@@ -0,0 +1,36 @@
+/* Header for a pass computing data for optimizing stdarg functions.
+   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Contributed by Jakub Jelinek <jakub@redhat.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_STDARG_H
+#define GCC_TREE_STDARG_H 1
+
+struct stdarg_info
+{
+  bitmap va_list_vars, va_list_escape_vars;
+  basic_block bb;
+  int compute_sizes, va_start_count;
+  bool va_list_escapes;
+  int *offsets;
+  /* These 2 fields are only meaningful if va_start_count == 1.  */
+  basic_block va_start_bb;
+  tree va_start_ap;
+};
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-streamer.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-streamer.h
new file mode 100644
index 0000000..2972861
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-streamer.h
@@ -0,0 +1,124 @@
+/* Data structures and functions for streaming trees.
+
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Contributed by Diego Novillo <dnovillo@google.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_STREAMER_H
+#define GCC_TREE_STREAMER_H
+
+#include "streamer-hooks.h"
+#include "data-streamer.h"
+
+/* Cache of pickled nodes.  Used to avoid writing the same node more
+   than once.  The first time a tree node is streamed out, it is
+   entered in this cache.  Subsequent references to the same node are
+   resolved by looking it up in this cache.
+
+   This is used in two ways:
+
+   - On the writing side, the first time T is added to STREAMER_CACHE,
+     a new reference index is created for T and T is emitted on the
+     stream.  If T needs to be emitted again to the stream, instead of
+     pickling it again, the reference index is emitted.
+
+   - On the reading side, the first time T is read from the stream, it
+     is reconstructed in memory and a new reference index created for
+     T.  The reconstructed T is inserted in some array so that when
+     the reference index for T is found in the input stream, it can be
+     used to look up into the array to get the reconstructed T.  */
+
+struct streamer_tree_cache_d
+{
+  /* The mapping between tree nodes and slots into the nodes array.  */
+  hash_map<tree, unsigned> *node_map;
+
+  /* The nodes pickled so far.  */
+  vec<tree> nodes;
+  /* The node hashes (if available).  */
+  vec<hashval_t> hashes;
+
+  /* Next index to assign.  */
+  unsigned next_idx;
+};
+
+/* In tree-streamer-in.c.  */
+tree streamer_read_string_cst (struct data_in *, struct lto_input_block *);
+tree streamer_read_chain (struct lto_input_block *, struct data_in *);
+tree streamer_alloc_tree (struct lto_input_block *, struct data_in *,
+		          enum LTO_tags);
+void streamer_read_tree_body (struct lto_input_block *, struct data_in *, tree);
+tree streamer_get_pickled_tree (struct lto_input_block *, struct data_in *);
+void streamer_read_tree_bitfields (struct lto_input_block *,
+				   struct data_in *, tree);
+
+/* In tree-streamer-out.c.  */
+void streamer_write_string_cst (struct output_block *,
+				struct lto_output_stream *, tree);
+void streamer_write_chain (struct output_block *, tree, bool);
+void streamer_write_tree_header (struct output_block *, tree);
+void streamer_write_tree_bitfields (struct output_block *, tree);
+void streamer_write_tree_body (struct output_block *, tree, bool);
+void streamer_write_integer_cst (struct output_block *, tree, bool);
+
+/* In tree-streamer.c.  */
+extern unsigned char streamer_mode_table[1 << 8];
+void streamer_check_handled_ts_structures (void);
+bool streamer_tree_cache_insert (struct streamer_tree_cache_d *, tree,
+				 hashval_t, unsigned *);
+void streamer_tree_cache_replace_tree (struct streamer_tree_cache_d *, tree,
+				       unsigned);
+void streamer_tree_cache_append (struct streamer_tree_cache_d *, tree,
+				 hashval_t);
+bool streamer_tree_cache_lookup (struct streamer_tree_cache_d *, tree,
+				 unsigned *);
+struct streamer_tree_cache_d *streamer_tree_cache_create (bool, bool, bool);
+void streamer_tree_cache_delete (struct streamer_tree_cache_d *);
+
+/* Return the tree node at slot IX in CACHE.  */
+
+static inline tree
+streamer_tree_cache_get_tree (struct streamer_tree_cache_d *cache, unsigned ix)
+{
+  return cache->nodes[ix];
+}
+
+/* Return the tree hash value at slot IX in CACHE.  */
+
+static inline hashval_t
+streamer_tree_cache_get_hash (struct streamer_tree_cache_d *cache, unsigned ix)
+{
+  return cache->hashes[ix];
+}
+
+static inline void
+bp_pack_machine_mode (struct bitpack_d *bp, machine_mode mode)
+{
+  streamer_mode_table[mode] = 1;
+  bp_pack_enum (bp, machine_mode, 1 << 8, mode);
+}
+
+static inline machine_mode
+bp_unpack_machine_mode (struct bitpack_d *bp)
+{
+  return (machine_mode)
+	   ((struct lto_input_block *)
+	    bp->stream)->mode_table[bp_unpack_enum (bp, machine_mode, 1 << 8)];
+}
+
+#endif  /* GCC_TREE_STREAMER_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-switch-conversion.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-switch-conversion.h
new file mode 100644
index 0000000..b3bc4b9
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-switch-conversion.h
@@ -0,0 +1,885 @@
+/* Tree switch conversion for GNU compiler.
+   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef TREE_SWITCH_CONVERSION_H
+#define TREE_SWITCH_CONVERSION_H
+
+namespace tree_switch_conversion {
+
+/* Type of cluster.  */
+
+enum cluster_type
+{
+  SIMPLE_CASE,
+  JUMP_TABLE,
+  BIT_TEST
+};
+
+#define PRINT_CASE(f,c) print_generic_expr (f, c)
+
+/* Abstract base class for representing a cluster of cases.
+
+   Here is the inheritance hierarachy, and the enum_cluster_type
+   values for the concrete subclasses:
+
+   cluster
+   |-simple_cluster (SIMPLE_CASE)
+   `-group_cluster
+     |-jump_table_cluster (JUMP_TABLE)
+     `-bit_test_cluster   (BIT_TEST).  */
+
+struct cluster
+{
+  /* Constructor.  */
+  cluster (tree case_label_expr, basic_block case_bb, profile_probability prob,
+	   profile_probability subtree_prob);
+
+  /* Destructor.  */
+  virtual ~cluster ()
+  {}
+
+  /* Return type.  */
+  virtual cluster_type get_type () = 0;
+
+  /* Get low value covered by a cluster.  */
+  virtual tree get_low () = 0;
+
+  /* Get high value covered by a cluster.  */
+  virtual tree get_high () = 0;
+
+  /* Debug content of a cluster.  */
+  virtual void debug () = 0;
+
+  /* Dump content of a cluster.  */
+  virtual void dump (FILE *f, bool details = false) = 0;
+
+  /* Emit GIMPLE code to handle the cluster.  */
+  virtual void emit (tree, tree, tree, basic_block) = 0;
+
+  /* Return true if a cluster handles only a single case value and the
+     value is not a range.  */
+  virtual bool is_single_value_p ()
+  {
+    return false;
+  }
+
+  /* Return range of a cluster.  If value would overflow in type of LOW,
+     then return 0.  */
+  static unsigned HOST_WIDE_INT get_range (tree low, tree high)
+  {
+    tree r = fold_build2 (MINUS_EXPR, TREE_TYPE (low), high, low);
+    if (!tree_fits_uhwi_p (r))
+      return 0;
+
+    return tree_to_uhwi (r) + 1;
+  }
+
+  /* Case label.  */
+  tree m_case_label_expr;
+
+  /* Basic block of the case.  */
+  basic_block m_case_bb;
+
+  /* Probability of taking this cluster.  */
+  profile_probability m_prob;
+
+  /* Probability of reaching subtree rooted at this node.  */
+  profile_probability m_subtree_prob;
+
+protected:
+  /* Default constructor.  */
+  cluster () {}
+};
+
+cluster::cluster (tree case_label_expr, basic_block case_bb,
+		  profile_probability prob, profile_probability subtree_prob):
+  m_case_label_expr (case_label_expr), m_case_bb (case_bb), m_prob (prob),
+  m_subtree_prob (subtree_prob)
+{
+}
+
+/* Subclass of cluster representing a simple contiguous range
+   from [low..high].  */
+
+struct simple_cluster: public cluster
+{
+  /* Constructor.  */
+  simple_cluster (tree low, tree high, tree case_label_expr,
+		  basic_block case_bb, profile_probability prob);
+
+  /* Destructor.  */
+  ~simple_cluster ()
+  {}
+
+  cluster_type
+  get_type ()
+  {
+    return SIMPLE_CASE;
+  }
+
+  tree
+  get_low ()
+  {
+    return m_low;
+  }
+
+  tree
+  get_high ()
+  {
+    return m_high;
+  }
+
+  void
+  debug ()
+  {
+    dump (stderr);
+  }
+
+  void
+  dump (FILE *f, bool details ATTRIBUTE_UNUSED = false)
+  {
+    PRINT_CASE (f, get_low ());
+    if (get_low () != get_high ())
+      {
+	fprintf (f, "-");
+	PRINT_CASE (f, get_high ());
+      }
+    fprintf (f, " ");
+  }
+
+  void emit (tree, tree, tree, basic_block)
+  {
+    gcc_unreachable ();
+  }
+
+  bool is_single_value_p ()
+  {
+    return tree_int_cst_equal (get_low (), get_high ());
+  }
+
+  /* Low value of the case.  */
+  tree m_low;
+
+  /* High value of the case.  */
+  tree m_high;
+
+  /* True if case is a range.  */
+  bool m_range_p;
+};
+
+simple_cluster::simple_cluster (tree low, tree high, tree case_label_expr,
+				basic_block case_bb, profile_probability prob):
+  cluster (case_label_expr, case_bb, prob, prob),
+  m_low (low), m_high (high)
+{
+  m_range_p = m_high != NULL;
+  if (m_high == NULL)
+    m_high = m_low;
+}
+
+/* Abstract subclass of jump table and bit test cluster,
+   handling a collection of simple_cluster instances.  */
+
+struct group_cluster: public cluster
+{
+  /* Constructor.  */
+  group_cluster (vec<cluster *> &clusters, unsigned start, unsigned end);
+
+  /* Destructor.  */
+  ~group_cluster ();
+
+  tree
+  get_low ()
+  {
+    return m_cases[0]->get_low ();
+  }
+
+  tree
+  get_high ()
+  {
+    return m_cases[m_cases.length () - 1]->get_high ();
+  }
+
+  void
+  debug ()
+  {
+    dump (stderr);
+  }
+
+  void dump (FILE *f, bool details = false);
+
+  /* List of simple clusters handled by the group.  */
+  vec<simple_cluster *> m_cases;
+};
+
+/* Concrete subclass of group_cluster representing a collection
+   of cases to be implemented as a jump table.
+   The "emit" vfunc gernerates a nested switch statement which
+   is later lowered to a jump table.  */
+
+struct jump_table_cluster: public group_cluster
+{
+  /* Constructor.  */
+  jump_table_cluster (vec<cluster *> &clusters, unsigned start, unsigned end)
+  : group_cluster (clusters, start, end)
+  {}
+
+  cluster_type
+  get_type ()
+  {
+    return JUMP_TABLE;
+  }
+
+  void emit (tree index_expr, tree index_type,
+	     tree default_label_expr, basic_block default_bb);
+
+  /* Find jump tables of given CLUSTERS, where all members of the vector
+     are of type simple_cluster.  New clusters are returned.  */
+  static vec<cluster *> find_jump_tables (vec<cluster *> &clusters);
+
+  /* Return true when cluster starting at START and ending at END (inclusive)
+     can build a jump-table.  */
+  static bool can_be_handled (const vec<cluster *> &clusters, unsigned start,
+			      unsigned end);
+
+  /* Return true if cluster starting at START and ending at END (inclusive)
+     is profitable transformation.  */
+  static bool is_beneficial (const vec<cluster *> &clusters, unsigned start,
+			     unsigned end);
+
+  /* Return the smallest number of different values for which it is best
+     to use a jump-table instead of a tree of conditional branches.  */
+  static inline unsigned int case_values_threshold (void);
+
+  /* Return whether jump table expansion is allowed.  */
+  static bool is_enabled (void);
+
+  /* Max growth ratio for code that is optimized for size.  */
+  static const unsigned HOST_WIDE_INT max_ratio_for_size = 3;
+
+  /* Max growth ratio for code that is optimized for speed.  */
+  static const unsigned HOST_WIDE_INT max_ratio_for_speed = 8;
+};
+
+/* A GIMPLE switch statement can be expanded to a short sequence of bit-wise
+comparisons.  "switch(x)" is converted into "if ((1 << (x-MINVAL)) & CST)"
+where CST and MINVAL are integer constants.  This is better than a series
+of compare-and-banch insns in some cases,  e.g. we can implement:
+
+	if ((x==4) || (x==6) || (x==9) || (x==11))
+
+as a single bit test:
+
+	if ((1<<x) & ((1<<4)|(1<<6)|(1<<9)|(1<<11)))
+
+This transformation is only applied if the number of case targets is small,
+if CST constains at least 3 bits, and "1 << x" is cheap.  The bit tests are
+performed in "word_mode".
+
+The following example shows the code the transformation generates:
+
+	int bar(int x)
+	{
+		switch (x)
+		{
+		case '0':  case '1':  case '2':  case '3':  case '4':
+		case '5':  case '6':  case '7':  case '8':  case '9':
+		case 'A':  case 'B':  case 'C':  case 'D':  case 'E':
+		case 'F':
+			return 1;
+		}
+		return 0;
+	}
+
+==>
+
+	bar (int x)
+	{
+		tmp1 = x - 48;
+		if (tmp1 > (70 - 48)) goto L2;
+		tmp2 = 1 << tmp1;
+		tmp3 = 0b11111100000001111111111;
+		if ((tmp2 & tmp3) != 0) goto L1 ; else goto L2;
+	L1:
+		return 1;
+	L2:
+		return 0;
+	}
+
+TODO: There are still some improvements to this transformation that could
+be implemented:
+
+* A narrower mode than word_mode could be used if that is cheaper, e.g.
+  for x86_64 where a narrower-mode shift may result in smaller code.
+
+* The compounded constant could be shifted rather than the one.  The
+  test would be either on the sign bit or on the least significant bit,
+  depending on the direction of the shift.  On some machines, the test
+  for the branch would be free if the bit to test is already set by the
+  shift operation.
+
+This transformation was contributed by Roger Sayle, see this e-mail:
+   http://gcc.gnu.org/ml/gcc-patches/2003-01/msg01950.html
+*/
+
+struct bit_test_cluster: public group_cluster
+{
+  /* Constructor.  */
+  bit_test_cluster (vec<cluster *> &clusters, unsigned start, unsigned end,
+		    bool handles_entire_switch)
+  :group_cluster (clusters, start, end),
+  m_handles_entire_switch (handles_entire_switch)
+  {}
+
+  cluster_type
+  get_type ()
+  {
+    return BIT_TEST;
+  }
+
+/*  Expand a switch statement by a short sequence of bit-wise
+    comparisons.  "switch(x)" is effectively converted into
+    "if ((1 << (x-MINVAL)) & CST)" where CST and MINVAL are
+    integer constants.
+
+    INDEX_EXPR is the value being switched on.
+
+    MINVAL is the lowest case value of in the case nodes,
+    and RANGE is highest value minus MINVAL.  MINVAL and RANGE
+    are not guaranteed to be of the same type as INDEX_EXPR
+    (the gimplifier doesn't change the type of case label values,
+    and MINVAL and RANGE are derived from those values).
+    MAXVAL is MINVAL + RANGE.
+
+    There *MUST* be max_case_bit_tests or less unique case
+    node targets.  */
+  void emit (tree index_expr, tree index_type,
+	     tree default_label_expr, basic_block default_bb);
+
+  /* Find bit tests of given CLUSTERS, where all members of the vector
+     are of type simple_cluster.  New clusters are returned.  */
+  static vec<cluster *> find_bit_tests (vec<cluster *> &clusters);
+
+  /* Return true when RANGE of case values with UNIQ labels
+     can build a bit test.  */
+  static bool can_be_handled (unsigned HOST_WIDE_INT range, unsigned uniq);
+
+  /* Return true when cluster starting at START and ending at END (inclusive)
+     can build a bit test.  */
+  static bool can_be_handled (const vec<cluster *> &clusters, unsigned start,
+			      unsigned end);
+
+  /* Return true when COUNT of cases of UNIQ labels is beneficial for bit test
+     transformation.  */
+  static bool is_beneficial (unsigned count, unsigned uniq);
+
+  /* Return true if cluster starting at START and ending at END (inclusive)
+     is profitable transformation.  */
+  static bool is_beneficial (const vec<cluster *> &clusters, unsigned start,
+			     unsigned end);
+
+/* Split the basic block at the statement pointed to by GSIP, and insert
+   a branch to the target basic block of E_TRUE conditional on tree
+   expression COND.
+
+   It is assumed that there is already an edge from the to-be-split
+   basic block to E_TRUE->dest block.  This edge is removed, and the
+   profile information on the edge is re-used for the new conditional
+   jump.
+
+   The CFG is updated.  The dominator tree will not be valid after
+   this transformation, but the immediate dominators are updated if
+   UPDATE_DOMINATORS is true.
+
+   Returns the newly created basic block.  */
+  static basic_block hoist_edge_and_branch_if_true (gimple_stmt_iterator *gsip,
+						    tree cond,
+						    basic_block case_bb,
+						    profile_probability prob);
+
+  /* True when the jump table handles an entire switch statement.  */
+  bool m_handles_entire_switch;
+
+  /* Maximum number of different basic blocks that can be handled by
+     a bit test.  */
+  static const int m_max_case_bit_tests = 3;
+};
+
+/* Helper struct to find minimal clusters.  */
+
+struct min_cluster_item
+{
+  /* Constructor.  */
+  min_cluster_item (unsigned count, unsigned start, unsigned non_jt_cases):
+    m_count (count), m_start (start), m_non_jt_cases (non_jt_cases)
+  {}
+
+  /* Count of clusters.  */
+  unsigned m_count;
+
+  /* Index where is cluster boundary.  */
+  unsigned m_start;
+
+  /* Total number of cases that will not be in a jump table.  */
+  unsigned m_non_jt_cases;
+};
+
+/* Helper struct to represent switch decision tree.  */
+
+struct case_tree_node
+{
+  /* Empty Constructor.  */
+  case_tree_node ();
+
+  /* Return true when it has a child.  */
+  bool has_child ()
+  {
+    return m_left != NULL || m_right != NULL;
+  }
+
+  /* Left son in binary tree.  */
+  case_tree_node *m_left;
+
+  /* Right son in binary tree; also node chain.  */
+  case_tree_node *m_right;
+
+  /* Parent of node in binary tree.  */
+  case_tree_node *m_parent;
+
+  /* Cluster represented by this tree node.  */
+  cluster *m_c;
+};
+
+inline
+case_tree_node::case_tree_node ():
+  m_left (NULL), m_right (NULL), m_parent (NULL), m_c (NULL)
+{
+}
+
+unsigned int
+jump_table_cluster::case_values_threshold (void)
+{
+  unsigned int threshold = PARAM_VALUE (PARAM_CASE_VALUES_THRESHOLD);
+
+  if (threshold == 0)
+    threshold = targetm.case_values_threshold ();
+
+  return threshold;
+}
+
+/* Return whether jump table expansion is allowed.  */
+bool jump_table_cluster::is_enabled (void)
+{
+  /* If neither casesi or tablejump is available, or flag_jump_tables
+     over-ruled us, we really have no choice.  */
+  if (!targetm.have_casesi () && !targetm.have_tablejump ())
+    return false;
+  if (!flag_jump_tables)
+    return false;
+#ifndef ASM_OUTPUT_ADDR_DIFF_ELT
+  if (flag_pic)
+    return false;
+#endif
+
+  return true;
+}
+
+/* A case_bit_test represents a set of case nodes that may be
+   selected from using a bit-wise comparison.  HI and LO hold
+   the integer to be tested against, TARGET_EDGE contains the
+   edge to the basic block to jump to upon success and BITS
+   counts the number of case nodes handled by this test,
+   typically the number of bits set in HI:LO.  The LABEL field
+   is used to quickly identify all cases in this set without
+   looking at label_to_block for every case label.  */
+
+struct case_bit_test
+{
+  wide_int mask;
+  basic_block target_bb;
+  tree label;
+  int bits;
+
+  /* Comparison function for qsort to order bit tests by decreasing
+     probability of execution.  */
+  static int cmp (const void *p1, const void *p2);
+};
+
+struct switch_decision_tree
+{
+  /* Constructor.  */
+  switch_decision_tree (gswitch *swtch): m_switch (swtch), m_phi_mapping (),
+    m_case_bbs (), m_case_node_pool ("struct case_node pool"),
+    m_case_list (NULL)
+  {
+  }
+
+  /* Analyze switch statement and return true when the statement is expanded
+     as decision tree.  */
+  bool analyze_switch_statement ();
+
+  /* Attempt to expand CLUSTERS as a decision tree.  Return true when
+     expanded.  */
+  bool try_switch_expansion (vec<cluster *> &clusters);
+  /* Compute the number of case labels that correspond to each outgoing edge of
+     switch statement.  Record this information in the aux field of the edge.
+     */
+  void compute_cases_per_edge ();
+
+  /* Before switch transformation, record all SSA_NAMEs defined in switch BB
+     and used in a label basic block.  */
+  void record_phi_operand_mapping ();
+
+  /* Append new operands to PHI statements that were introduced due to
+     addition of new edges to case labels.  */
+  void fix_phi_operands_for_edges ();
+
+  /* Generate a decision tree, switching on INDEX_EXPR and jumping to
+     one of the labels in CASE_LIST or to the DEFAULT_LABEL.
+
+     We generate a binary decision tree to select the appropriate target
+     code.  */
+  void emit (basic_block bb, tree index_expr,
+	     profile_probability default_prob, tree index_type);
+
+  /* Emit step-by-step code to select a case for the value of INDEX.
+     The thus generated decision tree follows the form of the
+     case-node binary tree NODE, whose nodes represent test conditions.
+     DEFAULT_PROB is probability of cases leading to default BB.
+     INDEX_TYPE is the type of the index of the switch.  */
+  basic_block emit_case_nodes (basic_block bb, tree index,
+			       case_tree_node *node,
+			       profile_probability default_prob,
+			       tree index_type, location_t);
+
+  /* Take an ordered list of case nodes
+     and transform them into a near optimal binary tree,
+     on the assumption that any target code selection value is as
+     likely as any other.
+
+     The transformation is performed by splitting the ordered
+     list into two equal sections plus a pivot.  The parts are
+     then attached to the pivot as left and right branches.  Each
+     branch is then transformed recursively.  */
+  static void balance_case_nodes (case_tree_node **head,
+				  case_tree_node *parent);
+
+  /* Dump ROOT, a list or tree of case nodes, to file F.  */
+  static void dump_case_nodes (FILE *f, case_tree_node *root, int indent_step,
+			       int indent_level);
+
+  /* Add an unconditional jump to CASE_BB that happens in basic block BB.  */
+  static void emit_jump (basic_block bb, basic_block case_bb);
+
+  /* Generate code to compare OP0 with OP1 so that the condition codes are
+     set and to jump to LABEL_BB if the condition is true.
+     COMPARISON is the GIMPLE comparison (EQ, NE, GT, etc.).
+     PROB is the probability of jumping to LABEL_BB.  */
+  static basic_block emit_cmp_and_jump_insns (basic_block bb, tree op0,
+					      tree op1, tree_code comparison,
+					      basic_block label_bb,
+					      profile_probability prob,
+					      location_t);
+
+  /* Generate code to jump to LABEL if OP0 and OP1 are equal in mode MODE.
+     PROB is the probability of jumping to LABEL_BB.  */
+  static basic_block do_jump_if_equal (basic_block bb, tree op0, tree op1,
+				       basic_block label_bb,
+				       profile_probability prob,
+				       location_t);
+
+  /* Reset the aux field of all outgoing edges of switch basic block.  */
+  static inline void reset_out_edges_aux (gswitch *swtch);
+
+  /* Switch statement.  */
+  gswitch *m_switch;
+
+  /* Map of PHI nodes that have to be fixed after expansion.  */
+  hash_map<tree, tree> m_phi_mapping;
+
+  /* List of basic blocks that belong to labels of the switch.  */
+  auto_vec<basic_block> m_case_bbs;
+
+  /* Basic block with default label.  */
+  basic_block m_default_bb;
+
+  /* A pool for case nodes.  */
+  object_allocator<case_tree_node> m_case_node_pool;
+
+  /* Balanced tree of case nodes.  */
+  case_tree_node *m_case_list;
+};
+
+/*
+     Switch initialization conversion
+
+The following pass changes simple initializations of scalars in a switch
+statement into initializations from a static array.  Obviously, the values
+must be constant and known at compile time and a default branch must be
+provided.  For example, the following code:
+
+	int a,b;
+
+	switch (argc)
+	{
+	 case 1:
+	 case 2:
+		a_1 = 8;
+		b_1 = 6;
+		break;
+	 case 3:
+		a_2 = 9;
+		b_2 = 5;
+		break;
+	 case 12:
+		a_3 = 10;
+		b_3 = 4;
+		break;
+	 default:
+		a_4 = 16;
+		b_4 = 1;
+		break;
+	}
+	a_5 = PHI <a_1, a_2, a_3, a_4>
+	b_5 = PHI <b_1, b_2, b_3, b_4>
+
+
+is changed into:
+
+	static const int = CSWTCH01[] = {6, 6, 5, 1, 1, 1, 1, 1, 1, 1, 1, 4};
+	static const int = CSWTCH02[] = {8, 8, 9, 16, 16, 16, 16, 16, 16, 16,
+				 16, 16, 10};
+
+	if (((unsigned) argc) - 1 < 11)
+	  {
+	    a_6 = CSWTCH02[argc - 1];
+	    b_6 = CSWTCH01[argc - 1];
+	  }
+	else
+	  {
+	    a_7 = 16;
+	    b_7 = 1;
+	  }
+	a_5 = PHI <a_6, a_7>
+	b_b = PHI <b_6, b_7>
+
+There are further constraints.  Specifically, the range of values across all
+case labels must not be bigger than SWITCH_CONVERSION_BRANCH_RATIO (default
+eight) times the number of the actual switch branches.
+
+This transformation was contributed by Martin Jambor, see this e-mail:
+   http://gcc.gnu.org/ml/gcc-patches/2008-07/msg00011.html  */
+
+/* The main structure of the pass.  */
+struct switch_conversion
+{
+  /* Constructor.  */
+  switch_conversion ();
+
+  /* Destructor.  */
+  ~switch_conversion ();
+
+  /* The following function is invoked on every switch statement (the current
+     one is given in SWTCH) and runs the individual phases of switch
+     conversion on it one after another until one fails or the conversion
+     is completed.  On success, NULL is in m_reason, otherwise points
+     to a string with the reason why the conversion failed.  */
+  void expand (gswitch *swtch);
+
+  /* Collection information about SWTCH statement.  */
+  void collect (gswitch *swtch);
+
+  /* Checks whether the range given by individual case statements of the switch
+     switch statement isn't too big and whether the number of branches actually
+     satisfies the size of the new array.  */
+  bool check_range ();
+
+  /* Checks whether all but the final BB basic blocks are empty.  */
+  bool check_all_empty_except_final ();
+
+  /* This function checks whether all required values in phi nodes in final_bb
+     are constants.  Required values are those that correspond to a basic block
+     which is a part of the examined switch statement.  It returns true if the
+     phi nodes are OK, otherwise false.  */
+  bool check_final_bb ();
+
+  /* The following function allocates default_values, target_{in,out}_names and
+     constructors arrays.  The last one is also populated with pointers to
+     vectors that will become constructors of new arrays.  */
+  void create_temp_arrays ();
+
+  /* Populate the array of default values in the order of phi nodes.
+     DEFAULT_CASE is the CASE_LABEL_EXPR for the default switch branch
+     if the range is non-contiguous or the default case has standard
+     structure, otherwise it is the first non-default case instead.  */
+  void gather_default_values (tree default_case);
+
+  /* The following function populates the vectors in the constructors array with
+     future contents of the static arrays.  The vectors are populated in the
+     order of phi nodes.  */
+  void build_constructors ();
+
+  /* If all values in the constructor vector are products of a linear function
+     a * x + b, then return true.  When true, COEFF_A and COEFF_B and
+     coefficients of the linear function.  Note that equal values are special
+     case of a linear function with a and b equal to zero.  */
+  bool contains_linear_function_p (vec<constructor_elt, va_gc> *vec,
+				   wide_int *coeff_a, wide_int *coeff_b);
+
+  /* Return type which should be used for array elements, either TYPE's
+     main variant or, for integral types, some smaller integral type
+     that can still hold all the constants.  */
+  tree array_value_type (tree type, int num);
+
+  /* Create an appropriate array type and declaration and assemble a static
+     array variable.  Also create a load statement that initializes
+     the variable in question with a value from the static array.  SWTCH is
+     the switch statement being converted, NUM is the index to
+     arrays of constructors, default values and target SSA names
+     for this particular array.  ARR_INDEX_TYPE is the type of the index
+     of the new array, PHI is the phi node of the final BB that corresponds
+     to the value that will be loaded from the created array.  TIDX
+     is an ssa name of a temporary variable holding the index for loads from the
+     new array.  */
+  void build_one_array (int num, tree arr_index_type,
+			gphi *phi, tree tidx);
+
+  /* Builds and initializes static arrays initialized with values gathered from
+     the switch statement.  Also creates statements that load values from
+     them.  */
+  void build_arrays ();
+
+  /* Generates and appropriately inserts loads of default values at the position
+     given by GSI.  Returns the last inserted statement.  */
+  gassign *gen_def_assigns (gimple_stmt_iterator *gsi);
+
+  /* Deletes the unused bbs and edges that now contain the switch statement and
+     its empty branch bbs.  BBD is the now dead BB containing
+     the original switch statement, FINAL is the last BB of the converted
+     switch statement (in terms of succession).  */
+  void prune_bbs (basic_block bbd, basic_block final, basic_block default_bb);
+
+  /* Add values to phi nodes in final_bb for the two new edges.  E1F is the edge
+     from the basic block loading values from an array and E2F from the basic
+     block loading default values.  BBF is the last switch basic block (see the
+     bbf description in the comment below).  */
+  void fix_phi_nodes (edge e1f, edge e2f, basic_block bbf);
+
+  /* Creates a check whether the switch expression value actually falls into the
+     range given by all the cases.  If it does not, the temporaries are loaded
+     with default values instead.  */
+  void gen_inbound_check ();
+
+  /* Switch statement for which switch conversion takes place.  */
+  gswitch *m_switch;
+
+  /* The expression used to decide the switch branch.  */
+  tree m_index_expr;
+
+  /* The following integer constants store the minimum and maximum value
+     covered by the case labels.  */
+  tree m_range_min;
+  tree m_range_max;
+
+  /* The difference between the above two numbers.  Stored here because it
+     is used in all the conversion heuristics, as well as for some of the
+     transformation, and it is expensive to re-compute it all the time.  */
+  tree m_range_size;
+
+  /* Basic block that contains the actual GIMPLE_SWITCH.  */
+  basic_block m_switch_bb;
+
+  /* Basic block that is the target of the default case.  */
+  basic_block m_default_bb;
+
+  /* The single successor block of all branches out of the GIMPLE_SWITCH,
+     if such a block exists.  Otherwise NULL.  */
+  basic_block m_final_bb;
+
+  /* The probability of the default edge in the replaced switch.  */
+  profile_probability m_default_prob;
+
+  /* The count of the default edge in the replaced switch.  */
+  profile_count m_default_count;
+
+  /* Combined count of all other (non-default) edges in the replaced switch.  */
+  profile_count m_other_count;
+
+  /* Number of phi nodes in the final bb (that we'll be replacing).  */
+  int m_phi_count;
+
+  /* Constructors of new static arrays.  */
+  vec<constructor_elt, va_gc> **m_constructors;
+
+  /* Array of default values, in the same order as phi nodes.  */
+  tree *m_default_values;
+
+  /* Array of ssa names that are initialized with a value from a new static
+     array.  */
+  tree *m_target_inbound_names;
+
+  /* Array of ssa names that are initialized with the default value if the
+     switch expression is out of range.  */
+  tree *m_target_outbound_names;
+
+  /* VOP SSA_NAME.  */
+  tree m_target_vop;
+
+  /* The first load statement that loads a temporary from a new static array.
+   */
+  gimple *m_arr_ref_first;
+
+  /* The last load statement that loads a temporary from a new static array.  */
+  gimple *m_arr_ref_last;
+
+  /* String reason why the case wasn't a good candidate that is written to the
+     dump file, if there is one.  */
+  const char *m_reason;
+
+  /* True if default case is not used for any value between range_min and
+     range_max inclusive.  */
+  bool m_contiguous_range;
+
+  /* True if default case does not have the required shape for other case
+     labels.  */
+  bool m_default_case_nonstandard;
+
+  /* Number of uniq labels for non-default edges.  */
+  unsigned int m_uniq;
+
+  /* Count is number of non-default edges.  */
+  unsigned int m_count;
+
+  /* True if CFG has been changed.  */
+  bool m_cfg_altered;
+};
+
+void
+switch_decision_tree::reset_out_edges_aux (gswitch *swtch)
+{
+  basic_block bb = gimple_bb (swtch);
+  edge e;
+  edge_iterator ei;
+  FOR_EACH_EDGE (e, ei, bb->succs)
+    e->aux = (void *) 0;
+}
+
+} // tree_switch_conversion namespace
+
+#endif // TREE_SWITCH_CONVERSION_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-vector-builder.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-vector-builder.h
new file mode 100644
index 0000000..0e36cd1
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-vector-builder.h
@@ -0,0 +1,139 @@
+/* A class for building vector tree constants.
+   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_VECTOR_BUILDER_H
+#define GCC_TREE_VECTOR_BUILDER_H
+
+#include "vector-builder.h"
+
+/* This class is used to build VECTOR_CSTs from a sequence of elements.
+   See vector_builder for more details.  */
+class tree_vector_builder : public vector_builder<tree, tree_vector_builder>
+{
+  typedef vector_builder<tree, tree_vector_builder> parent;
+  friend class vector_builder<tree, tree_vector_builder>;
+
+public:
+  tree_vector_builder () : m_type (0) {}
+  tree_vector_builder (tree, unsigned int, unsigned int);
+  tree build ();
+
+  tree type () const { return m_type; }
+
+  void new_vector (tree, unsigned int, unsigned int);
+  bool new_unary_operation (tree, tree, bool);
+  bool new_binary_operation (tree, tree, tree, bool);
+
+  static unsigned int binary_encoded_nelts (tree, tree);
+
+private:
+  bool equal_p (const_tree, const_tree) const;
+  bool allow_steps_p () const;
+  bool integral_p (const_tree) const;
+  wide_int step (const_tree, const_tree) const;
+  tree apply_step (tree, unsigned int, const wide_int &) const;
+  bool can_elide_p (const_tree) const;
+  void note_representative (tree *, tree);
+
+  tree m_type;
+};
+
+/* Create a new builder for a vector of type TYPE.  Initially encode the
+   value as NPATTERNS interleaved patterns with NELTS_PER_PATTERN elements
+   each.  */
+
+inline
+tree_vector_builder::tree_vector_builder (tree type, unsigned int npatterns,
+					  unsigned int nelts_per_pattern)
+{
+  new_vector (type, npatterns, nelts_per_pattern);
+}
+
+/* Start building a new vector of type TYPE.  Initially encode the value
+   as NPATTERNS interleaved patterns with NELTS_PER_PATTERN elements each.  */
+
+inline void
+tree_vector_builder::new_vector (tree type, unsigned int npatterns,
+				 unsigned int nelts_per_pattern)
+{
+  m_type = type;
+  parent::new_vector (TYPE_VECTOR_SUBPARTS (type), npatterns,
+		      nelts_per_pattern);
+}
+
+/* Return true if elements I1 and I2 are equal.  */
+
+inline bool
+tree_vector_builder::equal_p (const_tree elt1, const_tree elt2) const
+{
+  return operand_equal_p (elt1, elt2, 0);
+}
+
+/* Return true if a stepped representation is OK.  We don't allow
+   linear series for anything other than integers, to avoid problems
+   with rounding.  */
+
+inline bool
+tree_vector_builder::allow_steps_p () const
+{
+  return INTEGRAL_TYPE_P (TREE_TYPE (m_type));
+}
+
+/* Return true if ELT can be interpreted as an integer.  */
+
+inline bool
+tree_vector_builder::integral_p (const_tree elt) const
+{
+  return TREE_CODE (elt) == INTEGER_CST;
+}
+
+/* Return the value of element ELT2 minus the value of element ELT1.
+   Both elements are known to be INTEGER_CSTs.  */
+
+inline wide_int
+tree_vector_builder::step (const_tree elt1, const_tree elt2) const
+{
+  return wi::to_wide (elt2) - wi::to_wide (elt1);
+}
+
+/* Return true if we can drop element ELT, even if the retained elements
+   are different.  Return false if this would mean losing overflow
+   information.  */
+
+inline bool
+tree_vector_builder::can_elide_p (const_tree elt) const
+{
+  return !CONSTANT_CLASS_P (elt) || !TREE_OVERFLOW (elt);
+}
+
+/* Record that ELT2 is being elided, given that ELT1_PTR points to the last
+   encoded element for the containing pattern.  */
+
+inline void
+tree_vector_builder::note_representative (tree *elt1_ptr, tree elt2)
+{
+  if (CONSTANT_CLASS_P (elt2) && TREE_OVERFLOW (elt2))
+    {
+      gcc_assert (operand_equal_p (*elt1_ptr, elt2, 0));
+      if (!TREE_OVERFLOW (elt2))
+	*elt1_ptr = elt2;
+    }
+}
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-vectorizer.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-vectorizer.h
new file mode 100644
index 0000000..6f59af6
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-vectorizer.h
@@ -0,0 +1,1639 @@
+/* Vectorizer
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+   Contributed by Dorit Naishlos <dorit@il.ibm.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_VECTORIZER_H
+#define GCC_TREE_VECTORIZER_H
+
+typedef struct _stmt_vec_info *stmt_vec_info;
+
+#include "tree-data-ref.h"
+#include "tree-hash-traits.h"
+#include "target.h"
+
+/* Used for naming of new temporaries.  */
+enum vect_var_kind {
+  vect_simple_var,
+  vect_pointer_var,
+  vect_scalar_var,
+  vect_mask_var
+};
+
+/* Defines type of operation.  */
+enum operation_type {
+  unary_op = 1,
+  binary_op,
+  ternary_op
+};
+
+/* Define type of available alignment support.  */
+enum dr_alignment_support {
+  dr_unaligned_unsupported,
+  dr_unaligned_supported,
+  dr_explicit_realign,
+  dr_explicit_realign_optimized,
+  dr_aligned
+};
+
+/* Define type of def-use cross-iteration cycle.  */
+enum vect_def_type {
+  vect_uninitialized_def = 0,
+  vect_constant_def = 1,
+  vect_external_def,
+  vect_internal_def,
+  vect_induction_def,
+  vect_reduction_def,
+  vect_double_reduction_def,
+  vect_nested_cycle,
+  vect_unknown_def_type
+};
+
+/* Define type of reduction.  */
+enum vect_reduction_type {
+  TREE_CODE_REDUCTION,
+  COND_REDUCTION,
+  INTEGER_INDUC_COND_REDUCTION,
+  CONST_COND_REDUCTION,
+
+  /* Retain a scalar phi and use a FOLD_EXTRACT_LAST within the loop
+     to implement:
+
+       for (int i = 0; i < VF; ++i)
+         res = cond[i] ? val[i] : res;  */
+  EXTRACT_LAST_REDUCTION,
+
+  /* Use a folding reduction within the loop to implement:
+
+       for (int i = 0; i < VF; ++i)
+	 res = res OP val[i];
+
+     (with no reassocation).  */
+  FOLD_LEFT_REDUCTION
+};
+
+#define VECTORIZABLE_CYCLE_DEF(D) (((D) == vect_reduction_def)           \
+                                   || ((D) == vect_double_reduction_def) \
+                                   || ((D) == vect_nested_cycle))
+
+/* Structure to encapsulate information about a group of like
+   instructions to be presented to the target cost model.  */
+struct stmt_info_for_cost {
+  int count;
+  enum vect_cost_for_stmt kind;
+  enum vect_cost_model_location where;
+  stmt_vec_info stmt_info;
+  int misalign;
+};
+
+typedef vec<stmt_info_for_cost> stmt_vector_for_cost;
+
+/* Maps base addresses to an innermost_loop_behavior that gives the maximum
+   known alignment for that base.  */
+typedef hash_map<tree_operand_hash,
+		 innermost_loop_behavior *> vec_base_alignments;
+
+/************************************************************************
+  SLP
+ ************************************************************************/
+typedef struct _slp_tree *slp_tree;
+
+/* A computation tree of an SLP instance.  Each node corresponds to a group of
+   stmts to be packed in a SIMD stmt.  */
+struct _slp_tree {
+  /* Nodes that contain def-stmts of this node statements operands.  */
+  vec<slp_tree> children;
+  /* A group of scalar stmts to be vectorized together.  */
+  vec<stmt_vec_info> stmts;
+  /* Load permutation relative to the stores, NULL if there is no
+     permutation.  */
+  vec<unsigned> load_permutation;
+  /* Vectorized stmt/s.  */
+  vec<stmt_vec_info> vec_stmts;
+  /* Number of vector stmts that are created to replace the group of scalar
+     stmts. It is calculated during the transformation phase as the number of
+     scalar elements in one scalar iteration (GROUP_SIZE) multiplied by VF
+     divided by vector size.  */
+  unsigned int vec_stmts_size;
+  /* Reference count in the SLP graph.  */
+  unsigned int refcnt;
+  /* Whether the scalar computations use two different operators.  */
+  bool two_operators;
+  /* The DEF type of this node.  */
+  enum vect_def_type def_type;
+};
+
+
+/* SLP instance is a sequence of stmts in a loop that can be packed into
+   SIMD stmts.  */
+typedef struct _slp_instance {
+  /* The root of SLP tree.  */
+  slp_tree root;
+
+  /* Size of groups of scalar stmts that will be replaced by SIMD stmt/s.  */
+  unsigned int group_size;
+
+  /* The unrolling factor required to vectorized this SLP instance.  */
+  poly_uint64 unrolling_factor;
+
+  /* The group of nodes that contain loads of this SLP instance.  */
+  vec<slp_tree> loads;
+
+  /* The SLP node containing the reduction PHIs.  */
+  slp_tree reduc_phis;
+} *slp_instance;
+
+
+/* Access Functions.  */
+#define SLP_INSTANCE_TREE(S)                     (S)->root
+#define SLP_INSTANCE_GROUP_SIZE(S)               (S)->group_size
+#define SLP_INSTANCE_UNROLLING_FACTOR(S)         (S)->unrolling_factor
+#define SLP_INSTANCE_LOADS(S)                    (S)->loads
+
+#define SLP_TREE_CHILDREN(S)                     (S)->children
+#define SLP_TREE_SCALAR_STMTS(S)                 (S)->stmts
+#define SLP_TREE_VEC_STMTS(S)                    (S)->vec_stmts
+#define SLP_TREE_NUMBER_OF_VEC_STMTS(S)          (S)->vec_stmts_size
+#define SLP_TREE_LOAD_PERMUTATION(S)             (S)->load_permutation
+#define SLP_TREE_TWO_OPERATORS(S)		 (S)->two_operators
+#define SLP_TREE_DEF_TYPE(S)			 (S)->def_type
+
+
+
+/* Describes two objects whose addresses must be unequal for the vectorized
+   loop to be valid.  */
+typedef std::pair<tree, tree> vec_object_pair;
+
+/* Records that vectorization is only possible if abs (EXPR) >= MIN_VALUE.
+   UNSIGNED_P is true if we can assume that abs (EXPR) == EXPR.  */
+struct vec_lower_bound {
+  vec_lower_bound () {}
+  vec_lower_bound (tree e, bool u, poly_uint64 m)
+    : expr (e), unsigned_p (u), min_value (m) {}
+
+  tree expr;
+  bool unsigned_p;
+  poly_uint64 min_value;
+};
+
+/* Vectorizer state shared between different analyses like vector sizes
+   of the same CFG region.  */
+struct vec_info_shared {
+  vec_info_shared();
+  ~vec_info_shared();
+
+  void save_datarefs();
+  void check_datarefs();
+
+  /* All data references.  Freed by free_data_refs, so not an auto_vec.  */
+  vec<data_reference_p> datarefs;
+  vec<data_reference> datarefs_copy;
+
+  /* The loop nest in which the data dependences are computed.  */
+  auto_vec<loop_p> loop_nest;
+
+  /* All data dependences.  Freed by free_dependence_relations, so not
+     an auto_vec.  */
+  vec<ddr_p> ddrs;
+};
+
+/* Vectorizer state common between loop and basic-block vectorization.  */
+struct vec_info {
+  enum vec_kind { bb, loop };
+
+  vec_info (vec_kind, void *, vec_info_shared *);
+  ~vec_info ();
+
+  stmt_vec_info add_stmt (gimple *);
+  stmt_vec_info lookup_stmt (gimple *);
+  stmt_vec_info lookup_def (tree);
+  stmt_vec_info lookup_single_use (tree);
+  struct dr_vec_info *lookup_dr (data_reference *);
+  void move_dr (stmt_vec_info, stmt_vec_info);
+  void remove_stmt (stmt_vec_info);
+  void replace_stmt (gimple_stmt_iterator *, stmt_vec_info, gimple *);
+
+  /* The type of vectorization.  */
+  vec_kind kind;
+
+  /* Shared vectorizer state.  */
+  vec_info_shared *shared;
+
+  /* The mapping of GIMPLE UID to stmt_vec_info.  */
+  vec<stmt_vec_info> stmt_vec_infos;
+
+  /* All SLP instances.  */
+  auto_vec<slp_instance> slp_instances;
+
+  /* Maps base addresses to an innermost_loop_behavior that gives the maximum
+     known alignment for that base.  */
+  vec_base_alignments base_alignments;
+
+  /* All interleaving chains of stores, represented by the first
+     stmt in the chain.  */
+  auto_vec<stmt_vec_info> grouped_stores;
+
+  /* Cost data used by the target cost model.  */
+  void *target_cost_data;
+
+private:
+  stmt_vec_info new_stmt_vec_info (gimple *stmt);
+  void set_vinfo_for_stmt (gimple *, stmt_vec_info);
+  void free_stmt_vec_infos ();
+  void free_stmt_vec_info (stmt_vec_info);
+};
+
+struct _loop_vec_info;
+struct _bb_vec_info;
+
+template<>
+template<>
+inline bool
+is_a_helper <_loop_vec_info *>::test (vec_info *i)
+{
+  return i->kind == vec_info::loop;
+}
+
+template<>
+template<>
+inline bool
+is_a_helper <_bb_vec_info *>::test (vec_info *i)
+{
+  return i->kind == vec_info::bb;
+}
+
+
+/* In general, we can divide the vector statements in a vectorized loop
+   into related groups ("rgroups") and say that for each rgroup there is
+   some nS such that the rgroup operates on nS values from one scalar
+   iteration followed by nS values from the next.  That is, if VF is the
+   vectorization factor of the loop, the rgroup operates on a sequence:
+
+     (1,1) (1,2) ... (1,nS) (2,1) ... (2,nS) ... (VF,1) ... (VF,nS)
+
+   where (i,j) represents a scalar value with index j in a scalar
+   iteration with index i.
+
+   [ We use the term "rgroup" to emphasise that this grouping isn't
+     necessarily the same as the grouping of statements used elsewhere.
+     For example, if we implement a group of scalar loads using gather
+     loads, we'll use a separate gather load for each scalar load, and
+     thus each gather load will belong to its own rgroup. ]
+
+   In general this sequence will occupy nV vectors concatenated
+   together.  If these vectors have nL lanes each, the total number
+   of scalar values N is given by:
+
+       N = nS * VF = nV * nL
+
+   None of nS, VF, nV and nL are required to be a power of 2.  nS and nV
+   are compile-time constants but VF and nL can be variable (if the target
+   supports variable-length vectors).
+
+   In classical vectorization, each iteration of the vector loop would
+   handle exactly VF iterations of the original scalar loop.  However,
+   in a fully-masked loop, a particular iteration of the vector loop
+   might handle fewer than VF iterations of the scalar loop.  The vector
+   lanes that correspond to iterations of the scalar loop are said to be
+   "active" and the other lanes are said to be "inactive".
+
+   In a fully-masked loop, many rgroups need to be masked to ensure that
+   they have no effect for the inactive lanes.  Each such rgroup needs a
+   sequence of booleans in the same order as above, but with each (i,j)
+   replaced by a boolean that indicates whether iteration i is active.
+   This sequence occupies nV vector masks that again have nL lanes each.
+   Thus the mask sequence as a whole consists of VF independent booleans
+   that are each repeated nS times.
+
+   We make the simplifying assumption that if a sequence of nV masks is
+   suitable for one (nS,nL) pair, we can reuse it for (nS/2,nL/2) by
+   VIEW_CONVERTing it.  This holds for all current targets that support
+   fully-masked loops.  For example, suppose the scalar loop is:
+
+     float *f;
+     double *d;
+     for (int i = 0; i < n; ++i)
+       {
+	 f[i * 2 + 0] += 1.0f;
+	 f[i * 2 + 1] += 2.0f;
+	 d[i] += 3.0;
+       }
+
+   and suppose that vectors have 256 bits.  The vectorized f accesses
+   will belong to one rgroup and the vectorized d access to another:
+
+     f rgroup: nS = 2, nV = 1, nL = 8
+     d rgroup: nS = 1, nV = 1, nL = 4
+	       VF = 4
+
+     [ In this simple example the rgroups do correspond to the normal
+       SLP grouping scheme. ]
+
+   If only the first three lanes are active, the masks we need are:
+
+     f rgroup: 1 1 | 1 1 | 1 1 | 0 0
+     d rgroup:  1  |  1  |  1  |  0
+
+   Here we can use a mask calculated for f's rgroup for d's, but not
+   vice versa.
+
+   Thus for each value of nV, it is enough to provide nV masks, with the
+   mask being calculated based on the highest nL (or, equivalently, based
+   on the highest nS) required by any rgroup with that nV.  We therefore
+   represent the entire collection of masks as a two-level table, with the
+   first level being indexed by nV - 1 (since nV == 0 doesn't exist) and
+   the second being indexed by the mask index 0 <= i < nV.  */
+
+/* The masks needed by rgroups with nV vectors, according to the
+   description above.  */
+struct rgroup_masks {
+  /* The largest nS for all rgroups that use these masks.  */
+  unsigned int max_nscalars_per_iter;
+
+  /* The type of mask to use, based on the highest nS recorded above.  */
+  tree mask_type;
+
+  /* A vector of nV masks, in iteration order.  */
+  vec<tree> masks;
+};
+
+typedef auto_vec<rgroup_masks> vec_loop_masks;
+
+/*-----------------------------------------------------------------*/
+/* Info on vectorized loops.                                       */
+/*-----------------------------------------------------------------*/
+typedef struct _loop_vec_info : public vec_info {
+  _loop_vec_info (struct loop *, vec_info_shared *);
+  ~_loop_vec_info ();
+
+  /* The loop to which this info struct refers to.  */
+  struct loop *loop;
+
+  /* The loop basic blocks.  */
+  basic_block *bbs;
+
+  /* Number of latch executions.  */
+  tree num_itersm1;
+  /* Number of iterations.  */
+  tree num_iters;
+  /* Number of iterations of the original loop.  */
+  tree num_iters_unchanged;
+  /* Condition under which this loop is analyzed and versioned.  */
+  tree num_iters_assumptions;
+
+  /* Threshold of number of iterations below which vectorzation will not be
+     performed. It is calculated from MIN_PROFITABLE_ITERS and
+     PARAM_MIN_VECT_LOOP_BOUND.  */
+  unsigned int th;
+
+  /* When applying loop versioning, the vector form should only be used
+     if the number of scalar iterations is >= this value, on top of all
+     the other requirements.  Ignored when loop versioning is not being
+     used.  */
+  poly_uint64 versioning_threshold;
+
+  /* Unrolling factor  */
+  poly_uint64 vectorization_factor;
+
+  /* Maximum runtime vectorization factor, or MAX_VECTORIZATION_FACTOR
+     if there is no particular limit.  */
+  unsigned HOST_WIDE_INT max_vectorization_factor;
+
+  /* The masks that a fully-masked loop should use to avoid operating
+     on inactive scalars.  */
+  vec_loop_masks masks;
+
+  /* If we are using a loop mask to align memory addresses, this variable
+     contains the number of vector elements that we should skip in the
+     first iteration of the vector loop (i.e. the number of leading
+     elements that should be false in the first mask).  */
+  tree mask_skip_niters;
+
+  /* Type of the variables to use in the WHILE_ULT call for fully-masked
+     loops.  */
+  tree mask_compare_type;
+
+  /* Unknown DRs according to which loop was peeled.  */
+  struct dr_vec_info *unaligned_dr;
+
+  /* peeling_for_alignment indicates whether peeling for alignment will take
+     place, and what the peeling factor should be:
+     peeling_for_alignment = X means:
+        If X=0: Peeling for alignment will not be applied.
+        If X>0: Peel first X iterations.
+        If X=-1: Generate a runtime test to calculate the number of iterations
+                 to be peeled, using the dataref recorded in the field
+                 unaligned_dr.  */
+  int peeling_for_alignment;
+
+  /* The mask used to check the alignment of pointers or arrays.  */
+  int ptr_mask;
+
+  /* Data Dependence Relations defining address ranges that are candidates
+     for a run-time aliasing check.  */
+  auto_vec<ddr_p> may_alias_ddrs;
+
+  /* Data Dependence Relations defining address ranges together with segment
+     lengths from which the run-time aliasing check is built.  */
+  auto_vec<dr_with_seg_len_pair_t> comp_alias_ddrs;
+
+  /* Check that the addresses of each pair of objects is unequal.  */
+  auto_vec<vec_object_pair> check_unequal_addrs;
+
+  /* List of values that are required to be nonzero.  This is used to check
+     whether things like "x[i * n] += 1;" are safe and eventually gets added
+     to the checks for lower bounds below.  */
+  auto_vec<tree> check_nonzero;
+
+  /* List of values that need to be checked for a minimum value.  */
+  auto_vec<vec_lower_bound> lower_bounds;
+
+  /* Statements in the loop that have data references that are candidates for a
+     runtime (loop versioning) misalignment check.  */
+  auto_vec<stmt_vec_info> may_misalign_stmts;
+
+  /* Reduction cycles detected in the loop. Used in loop-aware SLP.  */
+  auto_vec<stmt_vec_info> reductions;
+
+  /* All reduction chains in the loop, represented by the first
+     stmt in the chain.  */
+  auto_vec<stmt_vec_info> reduction_chains;
+
+  /* Cost vector for a single scalar iteration.  */
+  auto_vec<stmt_info_for_cost> scalar_cost_vec;
+
+  /* Map of IV base/step expressions to inserted name in the preheader.  */
+  hash_map<tree_operand_hash, tree> *ivexpr_map;
+
+  /* The unrolling factor needed to SLP the loop. In case of that pure SLP is
+     applied to the loop, i.e., no unrolling is needed, this is 1.  */
+  poly_uint64 slp_unrolling_factor;
+
+  /* Cost of a single scalar iteration.  */
+  int single_scalar_iteration_cost;
+
+  /* Is the loop vectorizable? */
+  bool vectorizable;
+
+  /* Records whether we still have the option of using a fully-masked loop.  */
+  bool can_fully_mask_p;
+
+  /* True if have decided to use a fully-masked loop.  */
+  bool fully_masked_p;
+
+  /* When we have grouped data accesses with gaps, we may introduce invalid
+     memory accesses.  We peel the last iteration of the loop to prevent
+     this.  */
+  bool peeling_for_gaps;
+
+  /* When the number of iterations is not a multiple of the vector size
+     we need to peel off iterations at the end to form an epilogue loop.  */
+  bool peeling_for_niter;
+
+  /* Reductions are canonicalized so that the last operand is the reduction
+     operand.  If this places a constant into RHS1, this decanonicalizes
+     GIMPLE for other phases, so we must track when this has occurred and
+     fix it up.  */
+  bool operands_swapped;
+
+  /* True if there are no loop carried data dependencies in the loop.
+     If loop->safelen <= 1, then this is always true, either the loop
+     didn't have any loop carried data dependencies, or the loop is being
+     vectorized guarded with some runtime alias checks, or couldn't
+     be vectorized at all, but then this field shouldn't be used.
+     For loop->safelen >= 2, the user has asserted that there are no
+     backward dependencies, but there still could be loop carried forward
+     dependencies in such loops.  This flag will be false if normal
+     vectorizer data dependency analysis would fail or require versioning
+     for alias, but because of loop->safelen >= 2 it has been vectorized
+     even without versioning for alias.  E.g. in:
+     #pragma omp simd
+     for (int i = 0; i < m; i++)
+       a[i] = a[i + k] * c;
+     (or #pragma simd or #pragma ivdep) we can vectorize this and it will
+     DTRT even for k > 0 && k < m, but without safelen we would not
+     vectorize this, so this field would be false.  */
+  bool no_data_dependencies;
+
+  /* Mark loops having masked stores.  */
+  bool has_mask_store;
+
+  /* If if-conversion versioned this loop before conversion, this is the
+     loop version without if-conversion.  */
+  struct loop *scalar_loop;
+
+  /* For loops being epilogues of already vectorized loops
+     this points to the original vectorized loop.  Otherwise NULL.  */
+  _loop_vec_info *orig_loop_info;
+
+} *loop_vec_info;
+
+/* Access Functions.  */
+#define LOOP_VINFO_LOOP(L)                 (L)->loop
+#define LOOP_VINFO_BBS(L)                  (L)->bbs
+#define LOOP_VINFO_NITERSM1(L)             (L)->num_itersm1
+#define LOOP_VINFO_NITERS(L)               (L)->num_iters
+/* Since LOOP_VINFO_NITERS and LOOP_VINFO_NITERSM1 can change after
+   prologue peeling retain total unchanged scalar loop iterations for
+   cost model.  */
+#define LOOP_VINFO_NITERS_UNCHANGED(L)     (L)->num_iters_unchanged
+#define LOOP_VINFO_NITERS_ASSUMPTIONS(L)   (L)->num_iters_assumptions
+#define LOOP_VINFO_COST_MODEL_THRESHOLD(L) (L)->th
+#define LOOP_VINFO_VERSIONING_THRESHOLD(L) (L)->versioning_threshold
+#define LOOP_VINFO_VECTORIZABLE_P(L)       (L)->vectorizable
+#define LOOP_VINFO_CAN_FULLY_MASK_P(L)     (L)->can_fully_mask_p
+#define LOOP_VINFO_FULLY_MASKED_P(L)       (L)->fully_masked_p
+#define LOOP_VINFO_VECT_FACTOR(L)          (L)->vectorization_factor
+#define LOOP_VINFO_MAX_VECT_FACTOR(L)      (L)->max_vectorization_factor
+#define LOOP_VINFO_MASKS(L)                (L)->masks
+#define LOOP_VINFO_MASK_SKIP_NITERS(L)     (L)->mask_skip_niters
+#define LOOP_VINFO_MASK_COMPARE_TYPE(L)    (L)->mask_compare_type
+#define LOOP_VINFO_PTR_MASK(L)             (L)->ptr_mask
+#define LOOP_VINFO_LOOP_NEST(L)            (L)->shared->loop_nest
+#define LOOP_VINFO_DATAREFS(L)             (L)->shared->datarefs
+#define LOOP_VINFO_DDRS(L)                 (L)->shared->ddrs
+#define LOOP_VINFO_INT_NITERS(L)           (TREE_INT_CST_LOW ((L)->num_iters))
+#define LOOP_VINFO_PEELING_FOR_ALIGNMENT(L) (L)->peeling_for_alignment
+#define LOOP_VINFO_UNALIGNED_DR(L)         (L)->unaligned_dr
+#define LOOP_VINFO_MAY_MISALIGN_STMTS(L)   (L)->may_misalign_stmts
+#define LOOP_VINFO_MAY_ALIAS_DDRS(L)       (L)->may_alias_ddrs
+#define LOOP_VINFO_COMP_ALIAS_DDRS(L)      (L)->comp_alias_ddrs
+#define LOOP_VINFO_CHECK_UNEQUAL_ADDRS(L)  (L)->check_unequal_addrs
+#define LOOP_VINFO_CHECK_NONZERO(L)        (L)->check_nonzero
+#define LOOP_VINFO_LOWER_BOUNDS(L)         (L)->lower_bounds
+#define LOOP_VINFO_GROUPED_STORES(L)       (L)->grouped_stores
+#define LOOP_VINFO_SLP_INSTANCES(L)        (L)->slp_instances
+#define LOOP_VINFO_SLP_UNROLLING_FACTOR(L) (L)->slp_unrolling_factor
+#define LOOP_VINFO_REDUCTIONS(L)           (L)->reductions
+#define LOOP_VINFO_REDUCTION_CHAINS(L)     (L)->reduction_chains
+#define LOOP_VINFO_TARGET_COST_DATA(L)     (L)->target_cost_data
+#define LOOP_VINFO_PEELING_FOR_GAPS(L)     (L)->peeling_for_gaps
+#define LOOP_VINFO_OPERANDS_SWAPPED(L)     (L)->operands_swapped
+#define LOOP_VINFO_PEELING_FOR_NITER(L)    (L)->peeling_for_niter
+#define LOOP_VINFO_NO_DATA_DEPENDENCIES(L) (L)->no_data_dependencies
+#define LOOP_VINFO_SCALAR_LOOP(L)	   (L)->scalar_loop
+#define LOOP_VINFO_HAS_MASK_STORE(L)       (L)->has_mask_store
+#define LOOP_VINFO_SCALAR_ITERATION_COST(L) (L)->scalar_cost_vec
+#define LOOP_VINFO_SINGLE_SCALAR_ITERATION_COST(L) (L)->single_scalar_iteration_cost
+#define LOOP_VINFO_ORIG_LOOP_INFO(L)       (L)->orig_loop_info
+
+#define LOOP_REQUIRES_VERSIONING_FOR_ALIGNMENT(L)	\
+  ((L)->may_misalign_stmts.length () > 0)
+#define LOOP_REQUIRES_VERSIONING_FOR_ALIAS(L)		\
+  ((L)->comp_alias_ddrs.length () > 0 \
+   || (L)->check_unequal_addrs.length () > 0 \
+   || (L)->lower_bounds.length () > 0)
+#define LOOP_REQUIRES_VERSIONING_FOR_NITERS(L)		\
+  (LOOP_VINFO_NITERS_ASSUMPTIONS (L))
+#define LOOP_REQUIRES_VERSIONING(L)			\
+  (LOOP_REQUIRES_VERSIONING_FOR_ALIGNMENT (L)		\
+   || LOOP_REQUIRES_VERSIONING_FOR_ALIAS (L)		\
+   || LOOP_REQUIRES_VERSIONING_FOR_NITERS (L))
+
+#define LOOP_VINFO_NITERS_KNOWN_P(L)          \
+  (tree_fits_shwi_p ((L)->num_iters) && tree_to_shwi ((L)->num_iters) > 0)
+
+#define LOOP_VINFO_EPILOGUE_P(L) \
+  (LOOP_VINFO_ORIG_LOOP_INFO (L) != NULL)
+
+#define LOOP_VINFO_ORIG_MAX_VECT_FACTOR(L) \
+  (LOOP_VINFO_MAX_VECT_FACTOR (LOOP_VINFO_ORIG_LOOP_INFO (L)))
+
+/* Wrapper for loop_vec_info, for tracking success/failure, where a non-NULL
+   value signifies success, and a NULL value signifies failure, supporting
+   propagating an opt_problem * describing the failure back up the call
+   stack.  */
+typedef opt_pointer_wrapper <loop_vec_info> opt_loop_vec_info;
+
+static inline loop_vec_info
+loop_vec_info_for_loop (struct loop *loop)
+{
+  return (loop_vec_info) loop->aux;
+}
+
+typedef struct _bb_vec_info : public vec_info
+{
+  _bb_vec_info (gimple_stmt_iterator, gimple_stmt_iterator, vec_info_shared *);
+  ~_bb_vec_info ();
+
+  basic_block bb;
+  gimple_stmt_iterator region_begin;
+  gimple_stmt_iterator region_end;
+} *bb_vec_info;
+
+#define BB_VINFO_BB(B)               (B)->bb
+#define BB_VINFO_GROUPED_STORES(B)   (B)->grouped_stores
+#define BB_VINFO_SLP_INSTANCES(B)    (B)->slp_instances
+#define BB_VINFO_DATAREFS(B)         (B)->shared->datarefs
+#define BB_VINFO_DDRS(B)             (B)->shared->ddrs
+#define BB_VINFO_TARGET_COST_DATA(B) (B)->target_cost_data
+
+static inline bb_vec_info
+vec_info_for_bb (basic_block bb)
+{
+  return (bb_vec_info) bb->aux;
+}
+
+/*-----------------------------------------------------------------*/
+/* Info on vectorized defs.                                        */
+/*-----------------------------------------------------------------*/
+enum stmt_vec_info_type {
+  undef_vec_info_type = 0,
+  load_vec_info_type,
+  store_vec_info_type,
+  shift_vec_info_type,
+  op_vec_info_type,
+  call_vec_info_type,
+  call_simd_clone_vec_info_type,
+  assignment_vec_info_type,
+  condition_vec_info_type,
+  comparison_vec_info_type,
+  reduc_vec_info_type,
+  induc_vec_info_type,
+  type_promotion_vec_info_type,
+  type_demotion_vec_info_type,
+  type_conversion_vec_info_type,
+  loop_exit_ctrl_vec_info_type
+};
+
+/* Indicates whether/how a variable is used in the scope of loop/basic
+   block.  */
+enum vect_relevant {
+  vect_unused_in_scope = 0,
+
+  /* The def is only used outside the loop.  */
+  vect_used_only_live,
+  /* The def is in the inner loop, and the use is in the outer loop, and the
+     use is a reduction stmt.  */
+  vect_used_in_outer_by_reduction,
+  /* The def is in the inner loop, and the use is in the outer loop (and is
+     not part of reduction).  */
+  vect_used_in_outer,
+
+  /* defs that feed computations that end up (only) in a reduction. These
+     defs may be used by non-reduction stmts, but eventually, any
+     computations/values that are affected by these defs are used to compute
+     a reduction (i.e. don't get stored to memory, for example). We use this
+     to identify computations that we can change the order in which they are
+     computed.  */
+  vect_used_by_reduction,
+
+  vect_used_in_scope
+};
+
+/* The type of vectorization that can be applied to the stmt: regular loop-based
+   vectorization; pure SLP - the stmt is a part of SLP instances and does not
+   have uses outside SLP instances; or hybrid SLP and loop-based - the stmt is
+   a part of SLP instance and also must be loop-based vectorized, since it has
+   uses outside SLP sequences.
+
+   In the loop context the meanings of pure and hybrid SLP are slightly
+   different. By saying that pure SLP is applied to the loop, we mean that we
+   exploit only intra-iteration parallelism in the loop; i.e., the loop can be
+   vectorized without doing any conceptual unrolling, cause we don't pack
+   together stmts from different iterations, only within a single iteration.
+   Loop hybrid SLP means that we exploit both intra-iteration and
+   inter-iteration parallelism (e.g., number of elements in the vector is 4
+   and the slp-group-size is 2, in which case we don't have enough parallelism
+   within an iteration, so we obtain the rest of the parallelism from subsequent
+   iterations by unrolling the loop by 2).  */
+enum slp_vect_type {
+  loop_vect = 0,
+  pure_slp,
+  hybrid
+};
+
+/* Says whether a statement is a load, a store of a vectorized statement
+   result, or a store of an invariant value.  */
+enum vec_load_store_type {
+  VLS_LOAD,
+  VLS_STORE,
+  VLS_STORE_INVARIANT
+};
+
+/* Describes how we're going to vectorize an individual load or store,
+   or a group of loads or stores.  */
+enum vect_memory_access_type {
+  /* An access to an invariant address.  This is used only for loads.  */
+  VMAT_INVARIANT,
+
+  /* A simple contiguous access.  */
+  VMAT_CONTIGUOUS,
+
+  /* A contiguous access that goes down in memory rather than up,
+     with no additional permutation.  This is used only for stores
+     of invariants.  */
+  VMAT_CONTIGUOUS_DOWN,
+
+  /* A simple contiguous access in which the elements need to be permuted
+     after loading or before storing.  Only used for loop vectorization;
+     SLP uses separate permutes.  */
+  VMAT_CONTIGUOUS_PERMUTE,
+
+  /* A simple contiguous access in which the elements need to be reversed
+     after loading or before storing.  */
+  VMAT_CONTIGUOUS_REVERSE,
+
+  /* An access that uses IFN_LOAD_LANES or IFN_STORE_LANES.  */
+  VMAT_LOAD_STORE_LANES,
+
+  /* An access in which each scalar element is loaded or stored
+     individually.  */
+  VMAT_ELEMENTWISE,
+
+  /* A hybrid of VMAT_CONTIGUOUS and VMAT_ELEMENTWISE, used for grouped
+     SLP accesses.  Each unrolled iteration uses a contiguous load
+     or store for the whole group, but the groups from separate iterations
+     are combined in the same way as for VMAT_ELEMENTWISE.  */
+  VMAT_STRIDED_SLP,
+
+  /* The access uses gather loads or scatter stores.  */
+  VMAT_GATHER_SCATTER
+};
+
+struct dr_vec_info {
+  /* The data reference itself.  */
+  data_reference *dr;
+  /* The statement that contains the data reference.  */
+  stmt_vec_info stmt;
+  /* The misalignment in bytes of the reference, or -1 if not known.  */
+  int misalignment;
+  /* The byte alignment that we'd ideally like the reference to have,
+     and the value that misalignment is measured against.  */
+  poly_uint64 target_alignment;
+  /* If true the alignment of base_decl needs to be increased.  */
+  bool base_misaligned;
+  tree base_decl;
+};
+
+typedef struct data_reference *dr_p;
+
+struct _stmt_vec_info {
+
+  enum stmt_vec_info_type type;
+
+  /* Indicates whether this stmts is part of a computation whose result is
+     used outside the loop.  */
+  bool live;
+
+  /* Stmt is part of some pattern (computation idiom)  */
+  bool in_pattern_p;
+
+  /* True if the statement was created during pattern recognition as
+     part of the replacement for RELATED_STMT.  This implies that the
+     statement isn't part of any basic block, although for convenience
+     its gimple_bb is the same as for RELATED_STMT.  */
+  bool pattern_stmt_p;
+
+  /* Is this statement vectorizable or should it be skipped in (partial)
+     vectorization.  */
+  bool vectorizable;
+
+  /* The stmt to which this info struct refers to.  */
+  gimple *stmt;
+
+  /* The vec_info with respect to which STMT is vectorized.  */
+  vec_info *vinfo;
+
+  /* The vector type to be used for the LHS of this statement.  */
+  tree vectype;
+
+  /* The vectorized version of the stmt.  */
+  stmt_vec_info vectorized_stmt;
+
+
+  /* The following is relevant only for stmts that contain a non-scalar
+     data-ref (array/pointer/struct access). A GIMPLE stmt is expected to have
+     at most one such data-ref.  */
+
+  dr_vec_info dr_aux;
+
+  /* Information about the data-ref relative to this loop
+     nest (the loop that is being considered for vectorization).  */
+  innermost_loop_behavior dr_wrt_vec_loop;
+
+  /* For loop PHI nodes, the base and evolution part of it.  This makes sure
+     this information is still available in vect_update_ivs_after_vectorizer
+     where we may not be able to re-analyze the PHI nodes evolution as
+     peeling for the prologue loop can make it unanalyzable.  The evolution
+     part is still correct after peeling, but the base may have changed from
+     the version here.  */
+  tree loop_phi_evolution_base_unchanged;
+  tree loop_phi_evolution_part;
+
+  /* Used for various bookkeeping purposes, generally holding a pointer to
+     some other stmt S that is in some way "related" to this stmt.
+     Current use of this field is:
+        If this stmt is part of a pattern (i.e. the field 'in_pattern_p' is
+        true): S is the "pattern stmt" that represents (and replaces) the
+        sequence of stmts that constitutes the pattern.  Similarly, the
+        related_stmt of the "pattern stmt" points back to this stmt (which is
+        the last stmt in the original sequence of stmts that constitutes the
+        pattern).  */
+  stmt_vec_info related_stmt;
+
+  /* Used to keep a sequence of def stmts of a pattern stmt if such exists.
+     The sequence is attached to the original statement rather than the
+     pattern statement.  */
+  gimple_seq pattern_def_seq;
+
+  /* List of datarefs that are known to have the same alignment as the dataref
+     of this stmt.  */
+  vec<dr_p> same_align_refs;
+
+  /* Selected SIMD clone's function info.  First vector element
+     is SIMD clone's function decl, followed by a pair of trees (base + step)
+     for linear arguments (pair of NULLs for other arguments).  */
+  vec<tree> simd_clone_info;
+
+  /* Classify the def of this stmt.  */
+  enum vect_def_type def_type;
+
+  /*  Whether the stmt is SLPed, loop-based vectorized, or both.  */
+  enum slp_vect_type slp_type;
+
+  /* Interleaving and reduction chains info.  */
+  /* First element in the group.  */
+  stmt_vec_info first_element;
+  /* Pointer to the next element in the group.  */
+  stmt_vec_info next_element;
+  /* The size of the group.  */
+  unsigned int size;
+  /* For stores, number of stores from this group seen. We vectorize the last
+     one.  */
+  unsigned int store_count;
+  /* For loads only, the gap from the previous load. For consecutive loads, GAP
+     is 1.  */
+  unsigned int gap;
+
+  /* The minimum negative dependence distance this stmt participates in
+     or zero if none.  */
+  unsigned int min_neg_dist;
+
+  /* Not all stmts in the loop need to be vectorized. e.g, the increment
+     of the loop induction variable and computation of array indexes. relevant
+     indicates whether the stmt needs to be vectorized.  */
+  enum vect_relevant relevant;
+
+  /* For loads if this is a gather, for stores if this is a scatter.  */
+  bool gather_scatter_p;
+
+  /* True if this is an access with loop-invariant stride.  */
+  bool strided_p;
+
+  /* For both loads and stores.  */
+  bool simd_lane_access_p;
+
+  /* Classifies how the load or store is going to be implemented
+     for loop vectorization.  */
+  vect_memory_access_type memory_access_type;
+
+  /* For reduction loops, this is the type of reduction.  */
+  enum vect_reduction_type v_reduc_type;
+
+  /* For CONST_COND_REDUCTION, record the reduc code.  */
+  enum tree_code const_cond_reduc_code;
+
+  /* On a reduction PHI the reduction type as detected by
+     vect_force_simple_reduction.  */
+  enum vect_reduction_type reduc_type;
+
+  /* On a reduction PHI the def returned by vect_force_simple_reduction.
+     On the def returned by vect_force_simple_reduction the
+     corresponding PHI.  */
+  stmt_vec_info reduc_def;
+
+  /* The number of scalar stmt references from active SLP instances.  */
+  unsigned int num_slp_uses;
+
+  /* If nonzero, the lhs of the statement could be truncated to this
+     many bits without affecting any users of the result.  */
+  unsigned int min_output_precision;
+
+  /* If nonzero, all non-boolean input operands have the same precision,
+     and they could each be truncated to this many bits without changing
+     the result.  */
+  unsigned int min_input_precision;
+
+  /* If OPERATION_BITS is nonzero, the statement could be performed on
+     an integer with the sign and number of bits given by OPERATION_SIGN
+     and OPERATION_BITS without changing the result.  */
+  unsigned int operation_precision;
+  signop operation_sign;
+};
+
+/* Information about a gather/scatter call.  */
+struct gather_scatter_info {
+  /* The internal function to use for the gather/scatter operation,
+     or IFN_LAST if a built-in function should be used instead.  */
+  internal_fn ifn;
+
+  /* The FUNCTION_DECL for the built-in gather/scatter function,
+     or null if an internal function should be used instead.  */
+  tree decl;
+
+  /* The loop-invariant base value.  */
+  tree base;
+
+  /* The original scalar offset, which is a non-loop-invariant SSA_NAME.  */
+  tree offset;
+
+  /* Each offset element should be multiplied by this amount before
+     being added to the base.  */
+  int scale;
+
+  /* The definition type for the vectorized offset.  */
+  enum vect_def_type offset_dt;
+
+  /* The type of the vectorized offset.  */
+  tree offset_vectype;
+
+  /* The type of the scalar elements after loading or before storing.  */
+  tree element_type;
+
+  /* The type of the scalar elements being loaded or stored.  */
+  tree memory_type;
+};
+
+/* Access Functions.  */
+#define STMT_VINFO_TYPE(S)                 (S)->type
+#define STMT_VINFO_STMT(S)                 (S)->stmt
+inline loop_vec_info
+STMT_VINFO_LOOP_VINFO (stmt_vec_info stmt_vinfo)
+{
+  if (loop_vec_info loop_vinfo = dyn_cast <loop_vec_info> (stmt_vinfo->vinfo))
+    return loop_vinfo;
+  return NULL;
+}
+inline bb_vec_info
+STMT_VINFO_BB_VINFO (stmt_vec_info stmt_vinfo)
+{
+  if (bb_vec_info bb_vinfo = dyn_cast <bb_vec_info> (stmt_vinfo->vinfo))
+    return bb_vinfo;
+  return NULL;
+}
+#define STMT_VINFO_RELEVANT(S)             (S)->relevant
+#define STMT_VINFO_LIVE_P(S)               (S)->live
+#define STMT_VINFO_VECTYPE(S)              (S)->vectype
+#define STMT_VINFO_VEC_STMT(S)             (S)->vectorized_stmt
+#define STMT_VINFO_VECTORIZABLE(S)         (S)->vectorizable
+#define STMT_VINFO_DATA_REF(S)             ((S)->dr_aux.dr + 0)
+#define STMT_VINFO_GATHER_SCATTER_P(S)	   (S)->gather_scatter_p
+#define STMT_VINFO_STRIDED_P(S)	   	   (S)->strided_p
+#define STMT_VINFO_MEMORY_ACCESS_TYPE(S)   (S)->memory_access_type
+#define STMT_VINFO_SIMD_LANE_ACCESS_P(S)   (S)->simd_lane_access_p
+#define STMT_VINFO_VEC_REDUCTION_TYPE(S)   (S)->v_reduc_type
+#define STMT_VINFO_VEC_CONST_COND_REDUC_CODE(S) (S)->const_cond_reduc_code
+
+#define STMT_VINFO_DR_WRT_VEC_LOOP(S)      (S)->dr_wrt_vec_loop
+#define STMT_VINFO_DR_BASE_ADDRESS(S)      (S)->dr_wrt_vec_loop.base_address
+#define STMT_VINFO_DR_INIT(S)              (S)->dr_wrt_vec_loop.init
+#define STMT_VINFO_DR_OFFSET(S)            (S)->dr_wrt_vec_loop.offset
+#define STMT_VINFO_DR_STEP(S)              (S)->dr_wrt_vec_loop.step
+#define STMT_VINFO_DR_BASE_ALIGNMENT(S)    (S)->dr_wrt_vec_loop.base_alignment
+#define STMT_VINFO_DR_BASE_MISALIGNMENT(S) \
+  (S)->dr_wrt_vec_loop.base_misalignment
+#define STMT_VINFO_DR_OFFSET_ALIGNMENT(S) \
+  (S)->dr_wrt_vec_loop.offset_alignment
+#define STMT_VINFO_DR_STEP_ALIGNMENT(S) \
+  (S)->dr_wrt_vec_loop.step_alignment
+
+#define STMT_VINFO_DR_INFO(S) \
+  (gcc_checking_assert ((S)->dr_aux.stmt == (S)), &(S)->dr_aux)
+
+#define STMT_VINFO_IN_PATTERN_P(S)         (S)->in_pattern_p
+#define STMT_VINFO_RELATED_STMT(S)         (S)->related_stmt
+#define STMT_VINFO_PATTERN_DEF_SEQ(S)      (S)->pattern_def_seq
+#define STMT_VINFO_SAME_ALIGN_REFS(S)      (S)->same_align_refs
+#define STMT_VINFO_SIMD_CLONE_INFO(S)	   (S)->simd_clone_info
+#define STMT_VINFO_DEF_TYPE(S)             (S)->def_type
+#define STMT_VINFO_GROUPED_ACCESS(S) \
+  ((S)->dr_aux.dr && DR_GROUP_FIRST_ELEMENT(S))
+#define STMT_VINFO_LOOP_PHI_EVOLUTION_BASE_UNCHANGED(S) (S)->loop_phi_evolution_base_unchanged
+#define STMT_VINFO_LOOP_PHI_EVOLUTION_PART(S) (S)->loop_phi_evolution_part
+#define STMT_VINFO_MIN_NEG_DIST(S)	(S)->min_neg_dist
+#define STMT_VINFO_NUM_SLP_USES(S)	(S)->num_slp_uses
+#define STMT_VINFO_REDUC_TYPE(S)	(S)->reduc_type
+#define STMT_VINFO_REDUC_DEF(S)		(S)->reduc_def
+
+#define DR_GROUP_FIRST_ELEMENT(S) \
+  (gcc_checking_assert ((S)->dr_aux.dr), (S)->first_element)
+#define DR_GROUP_NEXT_ELEMENT(S) \
+  (gcc_checking_assert ((S)->dr_aux.dr), (S)->next_element)
+#define DR_GROUP_SIZE(S) \
+  (gcc_checking_assert ((S)->dr_aux.dr), (S)->size)
+#define DR_GROUP_STORE_COUNT(S) \
+  (gcc_checking_assert ((S)->dr_aux.dr), (S)->store_count)
+#define DR_GROUP_GAP(S) \
+  (gcc_checking_assert ((S)->dr_aux.dr), (S)->gap)
+
+#define REDUC_GROUP_FIRST_ELEMENT(S) \
+  (gcc_checking_assert (!(S)->dr_aux.dr), (S)->first_element)
+#define REDUC_GROUP_NEXT_ELEMENT(S) \
+  (gcc_checking_assert (!(S)->dr_aux.dr), (S)->next_element)
+#define REDUC_GROUP_SIZE(S) \
+  (gcc_checking_assert (!(S)->dr_aux.dr), (S)->size)
+
+#define STMT_VINFO_RELEVANT_P(S)          ((S)->relevant != vect_unused_in_scope)
+
+#define HYBRID_SLP_STMT(S)                ((S)->slp_type == hybrid)
+#define PURE_SLP_STMT(S)                  ((S)->slp_type == pure_slp)
+#define STMT_SLP_TYPE(S)                   (S)->slp_type
+
+#define VECT_MAX_COST 1000
+
+/* The maximum number of intermediate steps required in multi-step type
+   conversion.  */
+#define MAX_INTERM_CVT_STEPS         3
+
+#define MAX_VECTORIZATION_FACTOR INT_MAX
+
+/* Nonzero if TYPE represents a (scalar) boolean type or type
+   in the middle-end compatible with it (unsigned precision 1 integral
+   types).  Used to determine which types should be vectorized as
+   VECTOR_BOOLEAN_TYPE_P.  */
+
+#define VECT_SCALAR_BOOLEAN_TYPE_P(TYPE) \
+  (TREE_CODE (TYPE) == BOOLEAN_TYPE		\
+   || ((TREE_CODE (TYPE) == INTEGER_TYPE	\
+	|| TREE_CODE (TYPE) == ENUMERAL_TYPE)	\
+       && TYPE_PRECISION (TYPE) == 1		\
+       && TYPE_UNSIGNED (TYPE)))
+
+static inline bool
+nested_in_vect_loop_p (struct loop *loop, stmt_vec_info stmt_info)
+{
+  return (loop->inner
+	  && (loop->inner == (gimple_bb (stmt_info->stmt))->loop_father));
+}
+
+/* Return TRUE if a statement represented by STMT_INFO is a part of a
+   pattern.  */
+
+static inline bool
+is_pattern_stmt_p (stmt_vec_info stmt_info)
+{
+  return stmt_info->pattern_stmt_p;
+}
+
+/* If STMT_INFO is a pattern statement, return the statement that it
+   replaces, otherwise return STMT_INFO itself.  */
+
+inline stmt_vec_info
+vect_orig_stmt (stmt_vec_info stmt_info)
+{
+  if (is_pattern_stmt_p (stmt_info))
+    return STMT_VINFO_RELATED_STMT (stmt_info);
+  return stmt_info;
+}
+
+/* Return the later statement between STMT1_INFO and STMT2_INFO.  */
+
+static inline stmt_vec_info
+get_later_stmt (stmt_vec_info stmt1_info, stmt_vec_info stmt2_info)
+{
+  if (gimple_uid (vect_orig_stmt (stmt1_info)->stmt)
+      > gimple_uid (vect_orig_stmt (stmt2_info)->stmt))
+    return stmt1_info;
+  else
+    return stmt2_info;
+}
+
+/* If STMT_INFO has been replaced by a pattern statement, return the
+   replacement statement, otherwise return STMT_INFO itself.  */
+
+inline stmt_vec_info
+vect_stmt_to_vectorize (stmt_vec_info stmt_info)
+{
+  if (STMT_VINFO_IN_PATTERN_P (stmt_info))
+    return STMT_VINFO_RELATED_STMT (stmt_info);
+  return stmt_info;
+}
+
+/* Return true if BB is a loop header.  */
+
+static inline bool
+is_loop_header_bb_p (basic_block bb)
+{
+  if (bb == (bb->loop_father)->header)
+    return true;
+  gcc_checking_assert (EDGE_COUNT (bb->preds) == 1);
+  return false;
+}
+
+/* Return pow2 (X).  */
+
+static inline int
+vect_pow2 (int x)
+{
+  int i, res = 1;
+
+  for (i = 0; i < x; i++)
+    res *= 2;
+
+  return res;
+}
+
+/* Alias targetm.vectorize.builtin_vectorization_cost.  */
+
+static inline int
+builtin_vectorization_cost (enum vect_cost_for_stmt type_of_cost,
+			    tree vectype, int misalign)
+{
+  return targetm.vectorize.builtin_vectorization_cost (type_of_cost,
+						       vectype, misalign);
+}
+
+/* Get cost by calling cost target builtin.  */
+
+static inline
+int vect_get_stmt_cost (enum vect_cost_for_stmt type_of_cost)
+{
+  return builtin_vectorization_cost (type_of_cost, NULL, 0);
+}
+
+/* Alias targetm.vectorize.init_cost.  */
+
+static inline void *
+init_cost (struct loop *loop_info)
+{
+  return targetm.vectorize.init_cost (loop_info);
+}
+
+extern void dump_stmt_cost (FILE *, void *, int, enum vect_cost_for_stmt,
+			    stmt_vec_info, int, unsigned,
+			    enum vect_cost_model_location);
+
+/* Alias targetm.vectorize.add_stmt_cost.  */
+
+static inline unsigned
+add_stmt_cost (void *data, int count, enum vect_cost_for_stmt kind,
+	       stmt_vec_info stmt_info, int misalign,
+	       enum vect_cost_model_location where)
+{
+  unsigned cost = targetm.vectorize.add_stmt_cost (data, count, kind,
+						   stmt_info, misalign, where);
+  if (dump_file && (dump_flags & TDF_DETAILS))
+    dump_stmt_cost (dump_file, data, count, kind, stmt_info, misalign,
+		    cost, where);
+  return cost;
+}
+
+/* Alias targetm.vectorize.finish_cost.  */
+
+static inline void
+finish_cost (void *data, unsigned *prologue_cost,
+	     unsigned *body_cost, unsigned *epilogue_cost)
+{
+  targetm.vectorize.finish_cost (data, prologue_cost, body_cost, epilogue_cost);
+}
+
+/* Alias targetm.vectorize.destroy_cost_data.  */
+
+static inline void
+destroy_cost_data (void *data)
+{
+  targetm.vectorize.destroy_cost_data (data);
+}
+
+inline void
+add_stmt_costs (void *data, stmt_vector_for_cost *cost_vec)
+{
+  stmt_info_for_cost *cost;
+  unsigned i;
+  FOR_EACH_VEC_ELT (*cost_vec, i, cost)
+    add_stmt_cost (data, cost->count, cost->kind, cost->stmt_info,
+		   cost->misalign, cost->where);
+}
+
+/*-----------------------------------------------------------------*/
+/* Info on data references alignment.                              */
+/*-----------------------------------------------------------------*/
+#define DR_MISALIGNMENT_UNKNOWN (-1)
+#define DR_MISALIGNMENT_UNINITIALIZED (-2)
+
+inline void
+set_dr_misalignment (dr_vec_info *dr_info, int val)
+{
+  dr_info->misalignment = val;
+}
+
+inline int
+dr_misalignment (dr_vec_info *dr_info)
+{
+  int misalign = dr_info->misalignment;
+  gcc_assert (misalign != DR_MISALIGNMENT_UNINITIALIZED);
+  return misalign;
+}
+
+/* Reflects actual alignment of first access in the vectorized loop,
+   taking into account peeling/versioning if applied.  */
+#define DR_MISALIGNMENT(DR) dr_misalignment (DR)
+#define SET_DR_MISALIGNMENT(DR, VAL) set_dr_misalignment (DR, VAL)
+
+/* Only defined once DR_MISALIGNMENT is defined.  */
+#define DR_TARGET_ALIGNMENT(DR) ((DR)->target_alignment)
+
+/* Return true if data access DR_INFO is aligned to its target alignment
+   (which may be less than a full vector).  */
+
+static inline bool
+aligned_access_p (dr_vec_info *dr_info)
+{
+  return (DR_MISALIGNMENT (dr_info) == 0);
+}
+
+/* Return TRUE if the alignment of the data access is known, and FALSE
+   otherwise.  */
+
+static inline bool
+known_alignment_for_access_p (dr_vec_info *dr_info)
+{
+  return (DR_MISALIGNMENT (dr_info) != DR_MISALIGNMENT_UNKNOWN);
+}
+
+/* Return the minimum alignment in bytes that the vectorized version
+   of DR_INFO is guaranteed to have.  */
+
+static inline unsigned int
+vect_known_alignment_in_bytes (dr_vec_info *dr_info)
+{
+  if (DR_MISALIGNMENT (dr_info) == DR_MISALIGNMENT_UNKNOWN)
+    return TYPE_ALIGN_UNIT (TREE_TYPE (DR_REF (dr_info->dr)));
+  if (DR_MISALIGNMENT (dr_info) == 0)
+    return known_alignment (DR_TARGET_ALIGNMENT (dr_info));
+  return DR_MISALIGNMENT (dr_info) & -DR_MISALIGNMENT (dr_info);
+}
+
+/* Return the behavior of DR_INFO with respect to the vectorization context
+   (which for outer loop vectorization might not be the behavior recorded
+   in DR_INFO itself).  */
+
+static inline innermost_loop_behavior *
+vect_dr_behavior (dr_vec_info *dr_info)
+{
+  stmt_vec_info stmt_info = dr_info->stmt;
+  loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_info);
+  if (loop_vinfo == NULL
+      || !nested_in_vect_loop_p (LOOP_VINFO_LOOP (loop_vinfo), stmt_info))
+    return &DR_INNERMOST (dr_info->dr);
+  else
+    return &STMT_VINFO_DR_WRT_VEC_LOOP (stmt_info);
+}
+
+/* Return true if the vect cost model is unlimited.  */
+static inline bool
+unlimited_cost_model (loop_p loop)
+{
+  if (loop != NULL && loop->force_vectorize
+      && flag_simd_cost_model != VECT_COST_MODEL_DEFAULT)
+    return flag_simd_cost_model == VECT_COST_MODEL_UNLIMITED;
+  return (flag_vect_cost_model == VECT_COST_MODEL_UNLIMITED);
+}
+
+/* Return true if the loop described by LOOP_VINFO is fully-masked and
+   if the first iteration should use a partial mask in order to achieve
+   alignment.  */
+
+static inline bool
+vect_use_loop_mask_for_alignment_p (loop_vec_info loop_vinfo)
+{
+  return (LOOP_VINFO_FULLY_MASKED_P (loop_vinfo)
+	  && LOOP_VINFO_PEELING_FOR_ALIGNMENT (loop_vinfo));
+}
+
+/* Return the number of vectors of type VECTYPE that are needed to get
+   NUNITS elements.  NUNITS should be based on the vectorization factor,
+   so it is always a known multiple of the number of elements in VECTYPE.  */
+
+static inline unsigned int
+vect_get_num_vectors (poly_uint64 nunits, tree vectype)
+{
+  return exact_div (nunits, TYPE_VECTOR_SUBPARTS (vectype)).to_constant ();
+}
+
+/* Return the number of copies needed for loop vectorization when
+   a statement operates on vectors of type VECTYPE.  This is the
+   vectorization factor divided by the number of elements in
+   VECTYPE and is always known at compile time.  */
+
+static inline unsigned int
+vect_get_num_copies (loop_vec_info loop_vinfo, tree vectype)
+{
+  return vect_get_num_vectors (LOOP_VINFO_VECT_FACTOR (loop_vinfo), vectype);
+}
+
+/* Update maximum unit count *MAX_NUNITS so that it accounts for
+   the number of units in vector type VECTYPE.  *MAX_NUNITS can be 1
+   if we haven't yet recorded any vector types.  */
+
+static inline void
+vect_update_max_nunits (poly_uint64 *max_nunits, tree vectype)
+{
+  /* All unit counts have the form current_vector_size * X for some
+     rational X, so two unit sizes must have a common multiple.
+     Everything is a multiple of the initial value of 1.  */
+  poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (vectype);
+  *max_nunits = force_common_multiple (*max_nunits, nunits);
+}
+
+/* Return the vectorization factor that should be used for costing
+   purposes while vectorizing the loop described by LOOP_VINFO.
+   Pick a reasonable estimate if the vectorization factor isn't
+   known at compile time.  */
+
+static inline unsigned int
+vect_vf_for_cost (loop_vec_info loop_vinfo)
+{
+  return estimated_poly_value (LOOP_VINFO_VECT_FACTOR (loop_vinfo));
+}
+
+/* Estimate the number of elements in VEC_TYPE for costing purposes.
+   Pick a reasonable estimate if the exact number isn't known at
+   compile time.  */
+
+static inline unsigned int
+vect_nunits_for_cost (tree vec_type)
+{
+  return estimated_poly_value (TYPE_VECTOR_SUBPARTS (vec_type));
+}
+
+/* Return the maximum possible vectorization factor for LOOP_VINFO.  */
+
+static inline unsigned HOST_WIDE_INT
+vect_max_vf (loop_vec_info loop_vinfo)
+{
+  unsigned HOST_WIDE_INT vf;
+  if (LOOP_VINFO_VECT_FACTOR (loop_vinfo).is_constant (&vf))
+    return vf;
+  return MAX_VECTORIZATION_FACTOR;
+}
+
+/* Return the size of the value accessed by unvectorized data reference
+   DR_INFO.  This is only valid once STMT_VINFO_VECTYPE has been calculated
+   for the associated gimple statement, since that guarantees that DR_INFO
+   accesses either a scalar or a scalar equivalent.  ("Scalar equivalent"
+   here includes things like V1SI, which can be vectorized in the same way
+   as a plain SI.)  */
+
+inline unsigned int
+vect_get_scalar_dr_size (dr_vec_info *dr_info)
+{
+  return tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (dr_info->dr))));
+}
+
+/* Source location + hotness information. */
+extern dump_user_location_t vect_location;
+
+/* A macro for calling:
+     dump_begin_scope (MSG, vect_location);
+   via an RAII object, thus printing "=== MSG ===\n" to the dumpfile etc,
+   and then calling
+     dump_end_scope ();
+   once the object goes out of scope, thus capturing the nesting of
+   the scopes.
+
+   These scopes affect dump messages within them: dump messages at the
+   top level implicitly default to MSG_PRIORITY_USER_FACING, whereas those
+   in a nested scope implicitly default to MSG_PRIORITY_INTERNALS.  */
+
+#define DUMP_VECT_SCOPE(MSG) \
+  AUTO_DUMP_SCOPE (MSG, vect_location)
+
+/* A sentinel class for ensuring that the "vect_location" global gets
+   reset at the end of a scope.
+
+   The "vect_location" global is used during dumping and contains a
+   location_t, which could contain references to a tree block via the
+   ad-hoc data.  This data is used for tracking inlining information,
+   but it's not a GC root; it's simply assumed that such locations never
+   get accessed if the blocks are optimized away.
+
+   Hence we need to ensure that such locations are purged at the end
+   of any operations using them (e.g. via this class).  */
+
+class auto_purge_vect_location
+{
+ public:
+  ~auto_purge_vect_location ();
+};
+
+/*-----------------------------------------------------------------*/
+/* Function prototypes.                                            */
+/*-----------------------------------------------------------------*/
+
+/* Simple loop peeling and versioning utilities for vectorizer's purposes -
+   in tree-vect-loop-manip.c.  */
+extern void vect_set_loop_condition (struct loop *, loop_vec_info,
+				     tree, tree, tree, bool);
+extern bool slpeel_can_duplicate_loop_p (const struct loop *, const_edge);
+struct loop *slpeel_tree_duplicate_loop_to_edge_cfg (struct loop *,
+						     struct loop *, edge);
+struct loop *vect_loop_versioning (loop_vec_info, unsigned int, bool,
+				   poly_uint64);
+extern struct loop *vect_do_peeling (loop_vec_info, tree, tree,
+				     tree *, tree *, tree *, int, bool, bool);
+extern void vect_prepare_for_masked_peels (loop_vec_info);
+extern dump_user_location_t find_loop_location (struct loop *);
+extern bool vect_can_advance_ivs_p (loop_vec_info);
+
+/* In tree-vect-stmts.c.  */
+extern poly_uint64 current_vector_size;
+extern tree get_vectype_for_scalar_type (tree);
+extern tree get_vectype_for_scalar_type_and_size (tree, poly_uint64);
+extern tree get_mask_type_for_scalar_type (tree);
+extern tree get_same_sized_vectype (tree, tree);
+extern bool vect_get_loop_mask_type (loop_vec_info);
+extern bool vect_is_simple_use (tree, vec_info *, enum vect_def_type *,
+				stmt_vec_info * = NULL, gimple ** = NULL);
+extern bool vect_is_simple_use (tree, vec_info *, enum vect_def_type *,
+				tree *, stmt_vec_info * = NULL,
+				gimple ** = NULL);
+extern bool supportable_widening_operation (enum tree_code, stmt_vec_info,
+					    tree, tree, enum tree_code *,
+					    enum tree_code *, int *,
+					    vec<tree> *);
+extern bool supportable_narrowing_operation (enum tree_code, tree, tree,
+					     enum tree_code *,
+					     int *, vec<tree> *);
+extern unsigned record_stmt_cost (stmt_vector_for_cost *, int,
+				  enum vect_cost_for_stmt, stmt_vec_info,
+				  int, enum vect_cost_model_location);
+extern stmt_vec_info vect_finish_replace_stmt (stmt_vec_info, gimple *);
+extern stmt_vec_info vect_finish_stmt_generation (stmt_vec_info, gimple *,
+						  gimple_stmt_iterator *);
+extern opt_result vect_mark_stmts_to_be_vectorized (loop_vec_info);
+extern tree vect_get_store_rhs (stmt_vec_info);
+extern tree vect_get_vec_def_for_operand_1 (stmt_vec_info, enum vect_def_type);
+extern tree vect_get_vec_def_for_operand (tree, stmt_vec_info, tree = NULL);
+extern void vect_get_vec_defs (tree, tree, stmt_vec_info, vec<tree> *,
+			       vec<tree> *, slp_tree);
+extern void vect_get_vec_defs_for_stmt_copy (vec_info *,
+					     vec<tree> *, vec<tree> *);
+extern tree vect_init_vector (stmt_vec_info, tree, tree,
+                              gimple_stmt_iterator *);
+extern tree vect_get_vec_def_for_stmt_copy (vec_info *, tree);
+extern bool vect_transform_stmt (stmt_vec_info, gimple_stmt_iterator *,
+				 slp_tree, slp_instance);
+extern void vect_remove_stores (stmt_vec_info);
+extern opt_result vect_analyze_stmt (stmt_vec_info, bool *, slp_tree,
+				     slp_instance, stmt_vector_for_cost *);
+extern bool vectorizable_condition (stmt_vec_info, gimple_stmt_iterator *,
+				    stmt_vec_info *, bool, slp_tree,
+				    stmt_vector_for_cost *);
+extern bool vectorizable_shift (stmt_vec_info, gimple_stmt_iterator *,
+				stmt_vec_info *, slp_tree,
+				stmt_vector_for_cost *);
+extern void vect_get_load_cost (stmt_vec_info, int, bool,
+				unsigned int *, unsigned int *,
+				stmt_vector_for_cost *,
+				stmt_vector_for_cost *, bool);
+extern void vect_get_store_cost (stmt_vec_info, int,
+				 unsigned int *, stmt_vector_for_cost *);
+extern bool vect_supportable_shift (enum tree_code, tree);
+extern tree vect_gen_perm_mask_any (tree, const vec_perm_indices &);
+extern tree vect_gen_perm_mask_checked (tree, const vec_perm_indices &);
+extern void optimize_mask_stores (struct loop*);
+extern gcall *vect_gen_while (tree, tree, tree);
+extern tree vect_gen_while_not (gimple_seq *, tree, tree, tree);
+extern opt_result vect_get_vector_types_for_stmt (stmt_vec_info, tree *,
+						  tree *);
+extern opt_tree vect_get_mask_type_for_stmt (stmt_vec_info);
+
+/* In tree-vect-data-refs.c.  */
+extern bool vect_can_force_dr_alignment_p (const_tree, poly_uint64);
+extern enum dr_alignment_support vect_supportable_dr_alignment
+                                           (dr_vec_info *, bool);
+extern tree vect_get_smallest_scalar_type (stmt_vec_info, HOST_WIDE_INT *,
+                                           HOST_WIDE_INT *);
+extern opt_result vect_analyze_data_ref_dependences (loop_vec_info, unsigned int *);
+extern bool vect_slp_analyze_instance_dependence (slp_instance);
+extern opt_result vect_enhance_data_refs_alignment (loop_vec_info);
+extern opt_result vect_analyze_data_refs_alignment (loop_vec_info);
+extern opt_result vect_verify_datarefs_alignment (loop_vec_info);
+extern bool vect_slp_analyze_and_verify_instance_alignment (slp_instance);
+extern opt_result vect_analyze_data_ref_accesses (vec_info *);
+extern opt_result vect_prune_runtime_alias_test_list (loop_vec_info);
+extern bool vect_gather_scatter_fn_p (bool, bool, tree, tree, unsigned int,
+				      signop, int, internal_fn *, tree *);
+extern bool vect_check_gather_scatter (stmt_vec_info, loop_vec_info,
+				       gather_scatter_info *);
+extern opt_result vect_find_stmt_data_reference (loop_p, gimple *,
+						 vec<data_reference_p> *);
+extern opt_result vect_analyze_data_refs (vec_info *, poly_uint64 *);
+extern void vect_record_base_alignments (vec_info *);
+extern tree vect_create_data_ref_ptr (stmt_vec_info, tree, struct loop *, tree,
+				      tree *, gimple_stmt_iterator *,
+				      gimple **, bool,
+				      tree = NULL_TREE, tree = NULL_TREE);
+extern tree bump_vector_ptr (tree, gimple *, gimple_stmt_iterator *,
+			     stmt_vec_info, tree);
+extern void vect_copy_ref_info (tree, tree);
+extern tree vect_create_destination_var (tree, tree);
+extern bool vect_grouped_store_supported (tree, unsigned HOST_WIDE_INT);
+extern bool vect_store_lanes_supported (tree, unsigned HOST_WIDE_INT, bool);
+extern bool vect_grouped_load_supported (tree, bool, unsigned HOST_WIDE_INT);
+extern bool vect_load_lanes_supported (tree, unsigned HOST_WIDE_INT, bool);
+extern void vect_permute_store_chain (vec<tree> ,unsigned int, stmt_vec_info,
+                                    gimple_stmt_iterator *, vec<tree> *);
+extern tree vect_setup_realignment (stmt_vec_info, gimple_stmt_iterator *,
+				    tree *, enum dr_alignment_support, tree,
+                                    struct loop **);
+extern void vect_transform_grouped_load (stmt_vec_info, vec<tree> , int,
+                                         gimple_stmt_iterator *);
+extern void vect_record_grouped_load_vectors (stmt_vec_info, vec<tree>);
+extern tree vect_get_new_vect_var (tree, enum vect_var_kind, const char *);
+extern tree vect_get_new_ssa_name (tree, enum vect_var_kind,
+				   const char * = NULL);
+extern tree vect_create_addr_base_for_vector_ref (stmt_vec_info, gimple_seq *,
+						  tree, tree = NULL_TREE);
+
+/* In tree-vect-loop.c.  */
+/* FORNOW: Used in tree-parloops.c.  */
+extern stmt_vec_info vect_force_simple_reduction (loop_vec_info, stmt_vec_info,
+						  bool *, bool);
+/* Used in gimple-loop-interchange.c.  */
+extern bool check_reduction_path (dump_user_location_t, loop_p, gphi *, tree,
+				  enum tree_code);
+/* Drive for loop analysis stage.  */
+extern opt_loop_vec_info vect_analyze_loop (struct loop *,
+					    loop_vec_info,
+					    vec_info_shared *);
+extern tree vect_build_loop_niters (loop_vec_info, bool * = NULL);
+extern void vect_gen_vector_loop_niters (loop_vec_info, tree, tree *,
+					 tree *, bool);
+extern tree vect_halve_mask_nunits (tree);
+extern tree vect_double_mask_nunits (tree);
+extern void vect_record_loop_mask (loop_vec_info, vec_loop_masks *,
+				   unsigned int, tree);
+extern tree vect_get_loop_mask (gimple_stmt_iterator *, vec_loop_masks *,
+				unsigned int, tree, unsigned int);
+
+/* Drive for loop transformation stage.  */
+extern struct loop *vect_transform_loop (loop_vec_info);
+extern opt_loop_vec_info vect_analyze_loop_form (struct loop *,
+						 vec_info_shared *);
+extern bool vectorizable_live_operation (stmt_vec_info, gimple_stmt_iterator *,
+					 slp_tree, int, stmt_vec_info *,
+					 stmt_vector_for_cost *);
+extern bool vectorizable_reduction (stmt_vec_info, gimple_stmt_iterator *,
+				    stmt_vec_info *, slp_tree, slp_instance,
+				    stmt_vector_for_cost *);
+extern bool vectorizable_induction (stmt_vec_info, gimple_stmt_iterator *,
+				    stmt_vec_info *, slp_tree,
+				    stmt_vector_for_cost *);
+extern tree get_initial_def_for_reduction (stmt_vec_info, tree, tree *);
+extern bool vect_worthwhile_without_simd_p (vec_info *, tree_code);
+extern int vect_get_known_peeling_cost (loop_vec_info, int, int *,
+					stmt_vector_for_cost *,
+					stmt_vector_for_cost *,
+					stmt_vector_for_cost *);
+extern tree cse_and_gimplify_to_preheader (loop_vec_info, tree);
+
+/* In tree-vect-slp.c.  */
+extern void vect_free_slp_instance (slp_instance, bool);
+extern bool vect_transform_slp_perm_load (slp_tree, vec<tree> ,
+					  gimple_stmt_iterator *, poly_uint64,
+					  slp_instance, bool, unsigned *);
+extern bool vect_slp_analyze_operations (vec_info *);
+extern void vect_schedule_slp (vec_info *);
+extern opt_result vect_analyze_slp (vec_info *, unsigned);
+extern bool vect_make_slp_decision (loop_vec_info);
+extern void vect_detect_hybrid_slp (loop_vec_info);
+extern void vect_get_slp_defs (vec<tree> , slp_tree, vec<vec<tree> > *);
+extern bool vect_slp_bb (basic_block);
+extern stmt_vec_info vect_find_last_scalar_stmt_in_slp (slp_tree);
+extern bool is_simple_and_all_uses_invariant (stmt_vec_info, loop_vec_info);
+extern bool can_duplicate_and_interleave_p (unsigned int, machine_mode,
+					    unsigned int * = NULL,
+					    tree * = NULL, tree * = NULL);
+extern void duplicate_and_interleave (gimple_seq *, tree, vec<tree>,
+				      unsigned int, vec<tree> &);
+extern int vect_get_place_in_interleaving_chain (stmt_vec_info, stmt_vec_info);
+
+/* In tree-vect-patterns.c.  */
+/* Pattern recognition functions.
+   Additional pattern recognition functions can (and will) be added
+   in the future.  */
+void vect_pattern_recog (vec_info *);
+
+/* In tree-vectorizer.c.  */
+unsigned vectorize_loops (void);
+void vect_free_loop_info_assumptions (struct loop *);
+
+#endif  /* GCC_TREE_VECTORIZER_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-vrp.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-vrp.h
new file mode 100644
index 0000000..9d52b42
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree-vrp.h
@@ -0,0 +1,296 @@
+/* Support routines for Value Range Propagation (VRP).
+   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_VRP_H
+#define GCC_TREE_VRP_H
+
+/* Types of value ranges.  */
+enum value_range_kind
+{
+  /* Empty range.  */
+  VR_UNDEFINED,
+  /* Range spans the entire domain.  */
+  VR_VARYING,
+  /* Range is [MIN, MAX].  */
+  VR_RANGE,
+  /* Range is ~[MIN, MAX].  */
+  VR_ANTI_RANGE,
+  /* Range is a nice guy.  */
+  VR_LAST
+};
+
+
+/* Range of values that can be associated with an SSA_NAME after VRP
+   has executed.  */
+class GTY((for_user)) value_range_base
+{
+public:
+  value_range_base ();
+  value_range_base (value_range_kind, tree, tree);
+
+  void set (value_range_kind, tree, tree);
+  void set (tree);
+  void set_nonnull (tree);
+  void set_null (tree);
+
+  enum value_range_kind kind () const;
+  tree min () const;
+  tree max () const;
+
+  /* Types of value ranges.  */
+  bool symbolic_p () const;
+  bool constant_p () const;
+  bool undefined_p () const;
+  bool varying_p () const;
+  void set_varying ();
+  void set_undefined ();
+
+  void union_ (const value_range_base *);
+
+  bool operator== (const value_range_base &) const /* = delete */;
+  bool operator!= (const value_range_base &) const /* = delete */;
+  bool equal_p (const value_range_base &) const;
+
+  /* Misc methods.  */
+  tree type () const;
+  bool may_contain_p (tree) const;
+  void set_and_canonicalize (enum value_range_kind, tree, tree);
+  bool zero_p () const;
+  bool singleton_p (tree *result = NULL) const;
+  void dump (FILE *) const;
+
+protected:
+  void check ();
+  static value_range_base union_helper (const value_range_base *,
+					const value_range_base *);
+
+  enum value_range_kind m_kind;
+
+  tree m_min;
+  tree m_max;
+
+  friend void gt_ggc_mx_value_range_base (void *);
+  friend void gt_pch_p_16value_range_base (void *, void *,
+					   gt_pointer_operator, void *);
+  friend void gt_pch_nx_value_range_base (void *);
+  friend void gt_ggc_mx (value_range_base &);
+  friend void gt_ggc_mx (value_range_base *&);
+  friend void gt_pch_nx (value_range_base &);
+  friend void gt_pch_nx (value_range_base *, gt_pointer_operator, void *);
+};
+
+/* Note value_range cannot currently be used with GC memory, only
+   value_range_base is fully set up for this.  */
+class GTY((user)) value_range : public value_range_base
+{
+ public:
+  value_range ();
+  value_range (const value_range_base &);
+  /* Deep-copies equiv bitmap argument.  */
+  value_range (value_range_kind, tree, tree, bitmap = NULL);
+
+  /* Shallow-copies equiv bitmap.  */
+  value_range (const value_range &) /* = delete */;
+  /* Shallow-copies equiv bitmap.  */
+  value_range& operator=(const value_range&) /* = delete */;
+
+  /* Move equiv bitmap from source range.  */
+  void move (value_range *);
+
+  /* Leaves equiv bitmap alone.  */
+  void update (value_range_kind, tree, tree);
+  /* Deep-copies equiv bitmap argument.  */
+  void set (value_range_kind, tree, tree, bitmap = NULL);
+  void set (tree);
+  void set_nonnull (tree);
+  void set_null (tree);
+
+  bool operator== (const value_range &) const /* = delete */;
+  bool operator!= (const value_range &) const /* = delete */;
+  void intersect (const value_range *);
+  void union_ (const value_range *);
+  bool equal_p (const value_range &, bool ignore_equivs) const;
+
+  /* Types of value ranges.  */
+  void set_undefined ();
+  void set_varying ();
+
+  /* Equivalence bitmap methods.  */
+  bitmap equiv () const;
+  void equiv_clear ();
+  void equiv_add (const_tree, const value_range *, bitmap_obstack * = NULL);
+
+  /* Misc methods.  */
+  void deep_copy (const value_range *);
+  void set_and_canonicalize (enum value_range_kind, tree, tree, bitmap = NULL);
+  void dump (FILE *) const;
+
+ private:
+  /* Deep-copies bitmap argument.  */
+  void set_equiv (bitmap);
+  void check ();
+  void intersect_helper (value_range *, const value_range *);
+
+  /* Set of SSA names whose value ranges are equivalent to this one.
+     This set is only valid when TYPE is VR_RANGE or VR_ANTI_RANGE.  */
+  bitmap m_equiv;
+};
+
+inline
+value_range_base::value_range_base ()
+{
+  m_kind = VR_UNDEFINED;
+  m_min = m_max = NULL;
+}
+
+inline
+value_range::value_range ()
+  : value_range_base ()
+{
+  m_equiv = NULL;
+}
+
+/* Return the kind of this range.  */
+
+inline value_range_kind
+value_range_base::kind () const
+{
+  return m_kind;
+}
+
+inline bitmap
+value_range::equiv () const
+{
+  return m_equiv;
+}
+
+/* Return the lower bound.  */
+
+inline tree
+value_range_base::min () const
+{
+  return m_min;
+}
+
+/* Return the upper bound.  */
+
+inline tree
+value_range_base::max () const
+{
+  return m_max;
+}
+
+/* Return TRUE if range spans the entire possible domain.  */
+
+inline bool
+value_range_base::varying_p () const
+{
+  return m_kind == VR_VARYING;
+}
+
+/* Return TRUE if range is undefined (essentially the empty set).  */
+
+inline bool
+value_range_base::undefined_p () const
+{
+  return m_kind == VR_UNDEFINED;
+}
+
+/* Return TRUE if range is the constant zero.  */
+
+inline bool
+value_range_base::zero_p () const
+{
+  return (m_kind == VR_RANGE
+	  && integer_zerop (m_min)
+	  && integer_zerop (m_max));
+}
+
+extern void dump_value_range (FILE *, const value_range *);
+extern void dump_value_range (FILE *, const value_range_base *);
+
+struct assert_info
+{
+  /* Predicate code for the ASSERT_EXPR.  Must be COMPARISON_CLASS_P.  */
+  enum tree_code comp_code;
+
+  /* Name to register the assert for.  */
+  tree name;
+
+  /* Value being compared against.  */
+  tree val;
+
+  /* Expression to compare.  */
+  tree expr;
+};
+
+extern void register_edge_assert_for (tree, edge, enum tree_code,
+				      tree, tree, vec<assert_info> &);
+extern bool stmt_interesting_for_vrp (gimple *);
+extern bool range_includes_p (const value_range_base *, HOST_WIDE_INT);
+extern bool infer_value_range (gimple *, tree, tree_code *, tree *);
+
+extern bool vrp_bitmap_equal_p (const_bitmap, const_bitmap);
+
+extern tree value_range_constant_singleton (const value_range_base *);
+extern bool range_int_cst_p (const value_range_base *);
+extern bool range_int_cst_singleton_p (const value_range_base *);
+
+extern int compare_values (tree, tree);
+extern int compare_values_warnv (tree, tree, bool *);
+extern int operand_less_p (tree, tree);
+extern bool vrp_val_is_min (const_tree);
+extern bool vrp_val_is_max (const_tree);
+extern int value_inside_range (tree, tree, tree);
+
+extern tree vrp_val_min (const_tree);
+extern tree vrp_val_max (const_tree);
+
+extern void extract_range_from_unary_expr (value_range_base *vr,
+					   enum tree_code code,
+					   tree type,
+					   const value_range_base *vr0_,
+					   tree op0_type);
+extern void extract_range_from_binary_expr (value_range_base *,
+					    enum tree_code,
+					    tree, const value_range_base *,
+					    const value_range_base *);
+
+extern bool vrp_operand_equal_p (const_tree, const_tree);
+extern enum value_range_kind intersect_range_with_nonzero_bits
+  (enum value_range_kind, wide_int *, wide_int *, const wide_int &, signop);
+extern bool vrp_set_zero_nonzero_bits (const tree, const value_range_base *,
+				       wide_int *, wide_int *);
+
+extern bool find_case_label_range (gswitch *, tree, tree, size_t *, size_t *);
+extern bool find_case_label_index (gswitch *, size_t, tree, size_t *);
+extern bool overflow_comparison_p (tree_code, tree, tree, bool, tree *);
+extern tree get_single_symbol (tree, bool *, tree *);
+extern void maybe_set_nonzero_bits (edge, tree);
+extern value_range_kind determine_value_range (tree, wide_int *, wide_int *);
+
+/* Return TRUE if *VR includes the value zero.  */
+
+inline bool
+range_includes_zero_p (const value_range_base *vr)
+{
+  return range_includes_p (vr, 0);
+}
+
+#endif /* GCC_TREE_VRP_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree.def
new file mode 100644
index 0000000..1d6dded
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree.def
@@ -0,0 +1,1424 @@
+/* This file contains the definitions and documentation for the
+   tree codes used in GCC.
+   Copyright (C) 1987-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+
+/* For tcc_references, tcc_expression, tcc_comparison, tcc_unary,
+   tcc_binary, and tcc_statement nodes, which use struct tree_exp, the
+   4th element is the number of argument slots to allocate.  This
+   determines the size of the tree node object.  Other nodes use
+   different structures, and the size is determined by the tree_union
+   member structure; the 4th element should be zero.  Languages that
+   define language-specific tcc_exceptional or tcc_constant codes must
+   define the tree_size langhook to say how big they are.
+
+   These tree codes have been sorted so that the macros in tree.h that
+   check for various tree codes are optimized into range checks.  This
+   gives a measurable performance improvement.  When adding a new
+   code, consider its placement in relation to the other codes.  */
+
+/* Any erroneous construct is parsed into a node of this type.
+   This type of node is accepted without complaint in all contexts
+   by later parsing activities, to avoid multiple error messages
+   for one error.
+   No fields in these nodes are used except the TREE_CODE.  */
+DEFTREECODE (ERROR_MARK, "error_mark", tcc_exceptional, 0)
+
+/* Used to represent a name (such as, in the DECL_NAME of a decl node).
+   Internally it looks like a STRING_CST node.
+   There is only one IDENTIFIER_NODE ever made for any particular name.
+   Use `get_identifier' to get it (or create it, the first time).  */
+DEFTREECODE (IDENTIFIER_NODE, "identifier_node", tcc_exceptional, 0)
+
+/* Has the TREE_VALUE and TREE_PURPOSE fields.  */
+/* These nodes are made into lists by chaining through the
+   TREE_CHAIN field.  The elements of the list live in the
+   TREE_VALUE fields, while TREE_PURPOSE fields are occasionally
+   used as well to get the effect of Lisp association lists.  */
+DEFTREECODE (TREE_LIST, "tree_list", tcc_exceptional, 0)
+
+/* These nodes contain an array of tree nodes.  */
+DEFTREECODE (TREE_VEC, "tree_vec", tcc_exceptional, 0)
+
+/* A symbol binding block.  These are arranged in a tree,
+   where the BLOCK_SUBBLOCKS field contains a chain of subblocks
+   chained through the BLOCK_CHAIN field.
+   BLOCK_SUPERCONTEXT points to the parent block.
+     For a block which represents the outermost scope of a function, it
+     points to the FUNCTION_DECL node.
+   BLOCK_VARS points to a chain of decl nodes.
+   BLOCK_CHAIN points to the next BLOCK at the same level.
+   BLOCK_ABSTRACT_ORIGIN points to the original (abstract) tree node which
+   this block is an instance of, or else is NULL to indicate that this
+   block is not an instance of anything else.  When non-NULL, the value
+   could either point to another BLOCK node or it could point to a
+   FUNCTION_DECL node (e.g. in the case of a block representing the
+   outermost scope of a particular inlining of a function).
+   TREE_ASM_WRITTEN is nonzero if the block was actually referenced
+   in the generated assembly.  */
+DEFTREECODE (BLOCK, "block", tcc_exceptional, 0)
+
+/* Each data type is represented by a tree node whose code is one of
+   the following:  */
+/* Each node that represents a data type has a component TYPE_SIZE
+   containing a tree that is an expression for the size in bits.
+   The TYPE_MODE contains the machine mode for values of this type.
+   The TYPE_POINTER_TO field contains a type for a pointer to this type,
+     or zero if no such has been created yet.
+   The TYPE_NEXT_VARIANT field is used to chain together types
+     that are variants made by type modifiers such as "const" and "volatile".
+   The TYPE_MAIN_VARIANT field, in any member of such a chain,
+     points to the start of the chain.
+   The TYPE_NAME field contains info on the name used in the program
+     for this type (for GDB symbol table output).  It is either a
+     TYPE_DECL node, for types that are typedefs, or an IDENTIFIER_NODE
+     in the case of structs, unions or enums that are known with a tag,
+     or zero for types that have no special name.
+   The TYPE_CONTEXT for any sort of type which could have a name or
+    which could have named members (e.g. tagged types in C/C++) will
+    point to the node which represents the scope of the given type, or
+    will be NULL_TREE if the type has "file scope".  For most types, this
+    will point to a BLOCK node or a FUNCTION_DECL node, but it could also
+    point to a FUNCTION_TYPE node (for types whose scope is limited to the
+    formal parameter list of some function type specification) or it
+    could point to a RECORD_TYPE, UNION_TYPE or QUAL_UNION_TYPE node
+    (for C++ "member" types).
+    For non-tagged-types, TYPE_CONTEXT need not be set to anything in
+    particular, since any type which is of some type category  (e.g.
+    an array type or a function type) which cannot either have a name
+    itself or have named members doesn't really have a "scope" per se.
+  The TYPE_STUB_DECL field is used as a forward-references to names for
+    ENUMERAL_TYPE, RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE nodes;
+    see below.  */
+
+/* The ordering of the following codes is optimized for the checking
+   macros in tree.h.  Changing the order will degrade the speed of the
+   compiler.  OFFSET_TYPE, ENUMERAL_TYPE, BOOLEAN_TYPE, INTEGER_TYPE,
+   REAL_TYPE, POINTER_TYPE.  */
+
+/* An offset is a pointer relative to an object.
+   The TREE_TYPE field is the type of the object at the offset.
+   The TYPE_OFFSET_BASETYPE points to the node for the type of object
+   that the offset is relative to.  */
+DEFTREECODE (OFFSET_TYPE, "offset_type", tcc_type, 0)
+
+/* C enums.  The type node looks just like an INTEGER_TYPE node.
+   The symbols for the values of the enum type are defined by
+   CONST_DECL nodes, but the type does not point to them;
+   however, the TYPE_VALUES is a list in which each element's TREE_PURPOSE
+   is a name and the TREE_VALUE is the value (an INTEGER_CST node).  */
+/* A forward reference `enum foo' when no enum named foo is defined yet
+   has zero (a null pointer) in its TYPE_SIZE.  The tag name is in
+   the TYPE_NAME field.  If the type is later defined, the normal
+   fields are filled in.
+   RECORD_TYPE, UNION_TYPE, and QUAL_UNION_TYPE forward refs are
+   treated similarly.  */
+DEFTREECODE (ENUMERAL_TYPE, "enumeral_type", tcc_type, 0)
+
+/* Boolean type (true or false are the only values).  Looks like an
+   INTEGRAL_TYPE.  */
+DEFTREECODE (BOOLEAN_TYPE, "boolean_type", tcc_type, 0)
+
+/* Integer types in all languages, including char in C.
+   Also used for sub-ranges of other discrete types.
+   Has components TYPE_MIN_VALUE, TYPE_MAX_VALUE (expressions, inclusive)
+   and TYPE_PRECISION (number of bits used by this type).  */
+DEFTREECODE (INTEGER_TYPE, "integer_type", tcc_type, 0)
+
+/* C's float and double.  Different floating types are distinguished
+   by machine mode and by the TYPE_SIZE and the TYPE_PRECISION.  */
+DEFTREECODE (REAL_TYPE, "real_type", tcc_type, 0)
+
+/* The ordering of the following codes is optimized for the checking
+   macros in tree.h.  Changing the order will degrade the speed of the
+   compiler.  POINTER_TYPE, REFERENCE_TYPE.  Note that this range
+   overlaps the previous range of ordered types.  */
+
+/* All pointer-to-x types have code POINTER_TYPE.
+   The TREE_TYPE points to the node for the type pointed to.  */
+DEFTREECODE (POINTER_TYPE, "pointer_type", tcc_type, 0)
+
+/* A reference is like a pointer except that it is coerced
+   automatically to the value it points to.  Used in C++.  */
+DEFTREECODE (REFERENCE_TYPE, "reference_type", tcc_type, 0)
+
+/* The C++ decltype(nullptr) type.  */
+DEFTREECODE (NULLPTR_TYPE, "nullptr_type", tcc_type, 0)
+
+/* _Fract and _Accum types in Embedded-C.  Different fixed-point types
+   are distinguished by machine mode and by the TYPE_SIZE and the
+   TYPE_PRECISION.  */
+DEFTREECODE (FIXED_POINT_TYPE, "fixed_point_type", tcc_type, 0)
+
+/* The ordering of the following codes is optimized for the checking
+   macros in tree.h.  Changing the order will degrade the speed of the
+   compiler.  COMPLEX_TYPE, VECTOR_TYPE, ARRAY_TYPE.  */
+
+/* Complex number types.  The TREE_TYPE field is the data type
+   of the real and imaginary parts.  It must be of scalar
+   arithmetic type, not including pointer type.  */
+DEFTREECODE (COMPLEX_TYPE, "complex_type", tcc_type, 0)
+
+/* Vector types.  The TREE_TYPE field is the data type of the vector
+   elements.  The TYPE_PRECISION field is the number of subparts of
+   the vector.  */
+DEFTREECODE (VECTOR_TYPE, "vector_type", tcc_type, 0)
+
+/* The ordering of the following codes is optimized for the checking
+   macros in tree.h.  Changing the order will degrade the speed of the
+   compiler.  ARRAY_TYPE, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE.
+   Note that this range overlaps the previous range.  */
+
+/* Types of arrays.  Special fields:
+   TREE_TYPE		  Type of an array element.
+   TYPE_DOMAIN		  Type to index by.
+			    Its range of values specifies the array length.
+ The field TYPE_POINTER_TO (TREE_TYPE (array_type)) is always nonzero
+ and holds the type to coerce a value of that array type to in C.
+ TYPE_STRING_FLAG indicates a string (in contrast to an array of chars)
+ in languages (such as Chill) that make a distinction.  */
+/* Array types in C */
+DEFTREECODE (ARRAY_TYPE, "array_type", tcc_type, 0)
+
+/* Struct in C.  */
+/* Special fields:
+   TYPE_FIELDS  chain of FIELD_DECLs for the fields of the struct,
+     VAR_DECLs, TYPE_DECLs and CONST_DECLs for record-scope variables,
+     types and enumerators and FUNCTION_DECLs for methods associated
+     with the type.  */
+/* See the comment above, before ENUMERAL_TYPE, for how
+   forward references to struct tags are handled in C.  */
+DEFTREECODE (RECORD_TYPE, "record_type", tcc_type, 0)
+
+/* Union in C.  Like a struct, except that the offsets of the fields
+   will all be zero.  */
+/* See the comment above, before ENUMERAL_TYPE, for how
+   forward references to union tags are handled in C.  */
+DEFTREECODE (UNION_TYPE, "union_type", tcc_type, 0)	/* C union type */
+
+/* Similar to UNION_TYPE, except that the expressions in DECL_QUALIFIER
+   in each FIELD_DECL determine what the union contains.  The first
+   field whose DECL_QUALIFIER expression is true is deemed to occupy
+   the union.  */
+DEFTREECODE (QUAL_UNION_TYPE, "qual_union_type", tcc_type, 0)
+
+/* The ordering of the following codes is optimized for the checking
+   macros in tree.h.  Changing the order will degrade the speed of the
+   compiler.  VOID_TYPE, FUNCTION_TYPE, METHOD_TYPE.  */
+
+/* The void type in C */
+DEFTREECODE (VOID_TYPE, "void_type", tcc_type, 0)
+
+/* Type of functions.  Special fields:
+   TREE_TYPE		    type of value returned.
+   TYPE_ARG_TYPES      list of types of arguments expected.
+	this list is made of TREE_LIST nodes.
+	In this list TREE_PURPOSE can be used to indicate the default
+	value of parameter (used by C++ frontend).
+   Types of "Procedures" in languages where they are different from functions
+   have code FUNCTION_TYPE also, but then TREE_TYPE is zero or void type.  */
+DEFTREECODE (FUNCTION_TYPE, "function_type", tcc_type, 0)
+
+/* METHOD_TYPE is the type of a function which takes an extra first
+   argument for "self", which is not present in the declared argument list.
+   The TREE_TYPE is the return type of the method.  The TYPE_METHOD_BASETYPE
+   is the type of "self".  TYPE_ARG_TYPES is the real argument list, which
+   includes the hidden argument for "self".  */
+DEFTREECODE (METHOD_TYPE, "method_type", tcc_type, 0)
+
+/* This is a language-specific kind of type.
+   Its meaning is defined by the language front end.
+   layout_type does not know how to lay this out,
+   so the front-end must do so manually.  */
+DEFTREECODE (LANG_TYPE, "lang_type", tcc_type, 0)
+
+/* Expressions */
+
+/* First, the constants.  */
+
+DEFTREECODE (VOID_CST, "void_cst", tcc_constant, 0)
+
+/* Contents are in an array of HOST_WIDE_INTs.
+
+   We often access these constants both in their native precision and
+   in wider precisions (with the constant being implicitly extended
+   according to TYPE_SIGN).  In each case, the useful part of the array
+   may be as wide as the precision requires but may be shorter when all
+   of the upper bits are sign bits.  The length of the array when accessed
+   in the constant's native precision is given by TREE_INT_CST_NUNITS.
+   The length of the array when accessed in wider precisions is given
+   by TREE_INT_CST_EXT_NUNITS.  Each element can be obtained using
+   TREE_INT_CST_ELT.
+
+   INTEGER_CST nodes can be shared, and therefore should be considered
+   read only.  They should be copied before setting a flag such as
+   TREE_OVERFLOW.  If an INTEGER_CST has TREE_OVERFLOW already set,
+   it is known to be unique.  INTEGER_CST nodes are created for the
+   integral types, for pointer types and for vector and float types in
+   some circumstances.  */
+DEFTREECODE (INTEGER_CST, "integer_cst", tcc_constant, 0)
+
+/* Contents are given by POLY_INT_CST_COEFF.  */
+DEFTREECODE (POLY_INT_CST, "poly_int_cst", tcc_constant, 0)
+
+/* Contents are in TREE_REAL_CST field.  */
+DEFTREECODE (REAL_CST, "real_cst", tcc_constant, 0)
+
+/* Contents are in TREE_FIXED_CST field.  */
+DEFTREECODE (FIXED_CST, "fixed_cst", tcc_constant, 0)
+
+/* Contents are in TREE_REALPART and TREE_IMAGPART fields,
+   whose contents are other constant nodes.  */
+DEFTREECODE (COMPLEX_CST, "complex_cst", tcc_constant, 0)
+
+/* See generic.texi for details.  */
+DEFTREECODE (VECTOR_CST, "vector_cst", tcc_constant, 0)
+
+/* Contents are TREE_STRING_LENGTH and the actual contents of the string.  */
+DEFTREECODE (STRING_CST, "string_cst", tcc_constant, 0)
+
+/* Declarations.  All references to names are represented as ..._DECL
+   nodes.  The decls in one binding context are chained through the
+   TREE_CHAIN field.  Each DECL has a DECL_NAME field which contains
+   an IDENTIFIER_NODE.  (Some decls, most often labels, may have zero
+   as the DECL_NAME).  DECL_CONTEXT points to the node representing
+   the context in which this declaration has its scope.  For
+   FIELD_DECLs, this is the RECORD_TYPE, UNION_TYPE, or
+   QUAL_UNION_TYPE node that the field is a member of.  For VAR_DECL,
+   PARM_DECL, FUNCTION_DECL, LABEL_DECL, and CONST_DECL nodes, this
+   points to either the FUNCTION_DECL for the containing function, the
+   RECORD_TYPE or UNION_TYPE for the containing type, or NULL_TREE or
+   a TRANSLATION_UNIT_DECL if the given decl has "file scope".
+   DECL_ABSTRACT_ORIGIN, if non-NULL, points to the original (abstract)
+    ..._DECL node of which this decl is an (inlined or template expanded)
+    instance.
+   The TREE_TYPE field holds the data type of the object, when relevant.
+    LABEL_DECLs have no data type.  For TYPE_DECL, the TREE_TYPE field
+    contents are the type whose name is being declared.
+   The DECL_ALIGN, DECL_SIZE,
+    and DECL_MODE fields exist in decl nodes just as in type nodes.
+    They are unused in LABEL_DECL, TYPE_DECL and CONST_DECL nodes.
+
+   DECL_FIELD_BIT_OFFSET holds an integer number of bits offset for
+   the location.  DECL_VOFFSET holds an expression for a variable
+   offset; it is to be multiplied by DECL_VOFFSET_UNIT (an integer).
+   These fields are relevant only in FIELD_DECLs and PARM_DECLs.
+
+   DECL_INITIAL holds the value to initialize a variable to,
+   or the value of a constant.  For a function, it holds the body
+   (a node of type BLOCK representing the function's binding contour
+   and whose body contains the function's statements.)  For a LABEL_DECL
+   in C, it is a flag, nonzero if the label's definition has been seen.
+
+   PARM_DECLs use a special field:
+   DECL_ARG_TYPE is the type in which the argument is actually
+    passed, which may be different from its type within the function.
+
+   FUNCTION_DECLs use four special fields:
+   DECL_ARGUMENTS holds a chain of PARM_DECL nodes for the arguments.
+   DECL_RESULT holds a RESULT_DECL node for the value of a function.
+    The DECL_RTL field is 0 for a function that returns no value.
+    (C functions returning void have zero here.)
+    The TREE_TYPE field is the type in which the result is actually
+    returned.  This is usually the same as the return type of the
+    FUNCTION_DECL, but it may be a wider integer type because of
+    promotion.
+   DECL_FUNCTION_CODE is a code number that is nonzero for
+    built-in functions.  Its value is an enum built_in_function
+    that says which built-in function it is.
+
+   DECL_SOURCE_FILE holds a filename string and DECL_SOURCE_LINE
+   holds a line number.  In some cases these can be the location of
+   a reference, if no definition has been seen.
+
+   DECL_ABSTRACT is nonzero if the decl represents an abstract instance
+   of a decl (i.e. one which is nested within an abstract instance of a
+   inline function.  */
+
+DEFTREECODE (FUNCTION_DECL, "function_decl", tcc_declaration, 0)
+DEFTREECODE (LABEL_DECL, "label_decl", tcc_declaration, 0)
+/* The ordering of the following codes is optimized for the checking
+   macros in tree.h.  Changing the order will degrade the speed of the
+   compiler.  FIELD_DECL, VAR_DECL, CONST_DECL, PARM_DECL,
+   TYPE_DECL.  */
+DEFTREECODE (FIELD_DECL, "field_decl", tcc_declaration, 0)
+DEFTREECODE (VAR_DECL, "var_decl", tcc_declaration, 0)
+DEFTREECODE (CONST_DECL, "const_decl", tcc_declaration, 0)
+DEFTREECODE (PARM_DECL, "parm_decl", tcc_declaration, 0)
+DEFTREECODE (TYPE_DECL, "type_decl", tcc_declaration, 0)
+DEFTREECODE (RESULT_DECL, "result_decl", tcc_declaration, 0)
+
+/* A "declaration" of a debug temporary.  It should only appear in
+   DEBUG stmts.  */
+DEFTREECODE (DEBUG_EXPR_DECL, "debug_expr_decl", tcc_declaration, 0)
+
+/* A stmt that marks the beginning of a source statement.  */
+DEFTREECODE (DEBUG_BEGIN_STMT, "debug_begin_stmt", tcc_statement, 0)
+
+/* A namespace declaration.  Namespaces appear in DECL_CONTEXT of other
+   _DECLs, providing a hierarchy of names.  */
+DEFTREECODE (NAMESPACE_DECL, "namespace_decl", tcc_declaration, 0)
+
+/* A declaration import.
+   The C++ FE uses this to represent a using-directive; eg:
+   "using namespace foo".
+   But it could be used to represent any declaration import construct.
+   Whenever a declaration import appears in a lexical block, the BLOCK node
+   representing that lexical block in GIMPLE will contain an IMPORTED_DECL
+   node, linked via BLOCK_VARS accessor of the said BLOCK.
+   For a given NODE which code is IMPORTED_DECL,
+   IMPORTED_DECL_ASSOCIATED_DECL (NODE) accesses the imported declaration.  */
+DEFTREECODE (IMPORTED_DECL, "imported_decl", tcc_declaration, 0)
+
+/* A namelist declaration.
+   The Fortran FE uses this to represent a namelist statement, e.g.:
+   NAMELIST /namelist-group-name/ namelist-group-object-list.
+   Whenever a declaration import appears in a lexical block, the BLOCK node
+   representing that lexical block in GIMPLE will contain an NAMELIST_DECL
+   node, linked via BLOCK_VARS accessor of the said BLOCK.
+   For a given NODE which code is NAMELIST_DECL,
+   NAMELIST_DECL_ASSOCIATED_DECL (NODE) accesses the imported declaration.  */
+DEFTREECODE (NAMELIST_DECL, "namelist_decl", tcc_declaration, 0)
+
+/* A translation unit.  This is not technically a declaration, since it
+   can't be looked up, but it's close enough.  */
+DEFTREECODE (TRANSLATION_UNIT_DECL, "translation_unit_decl",\
+	     tcc_declaration, 0)
+
+/* References to storage.  */
+
+/* The ordering of the following codes is optimized for the classification
+   in handled_component_p.  Keep them in a consecutive group.  */
+
+/* Value is structure or union component.
+   Operand 0 is the structure or union (an expression).
+   Operand 1 is the field (a node of type FIELD_DECL).
+   Operand 2, if present, is the value of DECL_FIELD_OFFSET, measured
+   in units of DECL_OFFSET_ALIGN / BITS_PER_UNIT.  */
+DEFTREECODE (COMPONENT_REF, "component_ref", tcc_reference, 3)
+
+/* Reference to a group of bits within an object.  Similar to COMPONENT_REF
+   except the position is given explicitly rather than via a FIELD_DECL.
+   Operand 0 is the structure or union expression;
+   operand 1 is a tree giving the constant number of bits being referenced;
+   operand 2 is a tree giving the constant position of the first referenced bit.
+   The result type width has to match the number of bits referenced.
+   If the result type is integral, its signedness specifies how it is extended
+   to its mode width.  */
+DEFTREECODE (BIT_FIELD_REF, "bit_field_ref", tcc_reference, 3)
+
+/* Array indexing.
+   Operand 0 is the array; operand 1 is a (single) array index.
+   Operand 2, if present, is a copy of TYPE_MIN_VALUE of the index.
+   Operand 3, if present, is the element size, measured in units of
+   the alignment of the element type.  */
+DEFTREECODE (ARRAY_REF, "array_ref", tcc_reference, 4)
+
+/* Likewise, except that the result is a range ("slice") of the array.  The
+   starting index of the resulting array is taken from operand 1 and the size
+   of the range is taken from the type of the expression.  */
+DEFTREECODE (ARRAY_RANGE_REF, "array_range_ref", tcc_reference, 4)
+
+/* Used only on an operand of complex type, these return
+   a value of the corresponding component type.  */
+DEFTREECODE (REALPART_EXPR, "realpart_expr", tcc_reference, 1)
+DEFTREECODE (IMAGPART_EXPR, "imagpart_expr", tcc_reference, 1)
+
+/* Represents viewing something of one type as being of a second type.
+   This corresponds to an "Unchecked Conversion" in Ada and roughly to
+   the idiom *(type2 *)&X in C.  The only operand is the value to be
+   viewed as being of another type.  It is undefined if the type of the
+   input and of the expression have different sizes.
+
+   This code may also be used within the LHS of a MODIFY_EXPR, in which
+   case no actual data motion may occur.  TREE_ADDRESSABLE will be set in
+   this case and GCC must abort if it could not do the operation without
+   generating insns.  */
+DEFTREECODE (VIEW_CONVERT_EXPR, "view_convert_expr", tcc_reference, 1)
+
+/* C unary `*'.  One operand, an expression for a pointer.  */
+DEFTREECODE (INDIRECT_REF, "indirect_ref", tcc_reference, 1)
+
+/* Used to represent lookup in a virtual method table which is dependent on
+   the runtime type of an object.  Operands are:
+   OBJ_TYPE_REF_EXPR: An expression that evaluates the value to use.
+   OBJ_TYPE_REF_OBJECT: Is the object on whose behalf the lookup is
+   being performed.  Through this the optimizers may be able to statically
+   determine the dynamic type of the object.
+   OBJ_TYPE_REF_TOKEN: An integer index to the virtual method table.  */
+DEFTREECODE (OBJ_TYPE_REF, "obj_type_ref", tcc_expression, 3)
+
+/* Used to represent the brace-enclosed initializers for a structure or an
+   array.  It contains a sequence of component values made out of a VEC of
+   constructor_elt.
+
+   For RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE:
+   The field INDEX of each constructor_elt is a FIELD_DECL.
+
+   For ARRAY_TYPE:
+   The field INDEX of each constructor_elt is the corresponding index.
+   If the index is a RANGE_EXPR, it is a short-hand for many nodes,
+   one for each index in the range.  (If the corresponding field VALUE
+   has side-effects, they are evaluated once for each element.  Wrap the
+   value in a SAVE_EXPR if you want to evaluate side effects only once.)
+
+   Components that aren't present are cleared as per the C semantics,
+   unless the CONSTRUCTOR_NO_CLEARING flag is set, in which case their
+   value becomes undefined.  */
+DEFTREECODE (CONSTRUCTOR, "constructor", tcc_exceptional, 0)
+
+/* The expression types are mostly straightforward, with the fourth argument
+   of DEFTREECODE saying how many operands there are.
+   Unless otherwise specified, the operands are expressions and the
+   types of all the operands and the expression must all be the same.  */
+
+/* Contains two expressions to compute, one followed by the other.
+   the first value is ignored.  The second one's value is used.  The
+   type of the first expression need not agree with the other types.  */
+DEFTREECODE (COMPOUND_EXPR, "compound_expr", tcc_expression, 2)
+
+/* Assignment expression.  Operand 0 is the what to set; 1, the new value.  */
+DEFTREECODE (MODIFY_EXPR, "modify_expr", tcc_expression, 2)
+
+/* Initialization expression.  Operand 0 is the variable to initialize;
+   Operand 1 is the initializer.  This differs from MODIFY_EXPR in that any
+   reference to the referent of operand 0 within operand 1 is undefined.  */
+DEFTREECODE (INIT_EXPR, "init_expr", tcc_expression, 2)
+
+/* For TARGET_EXPR, operand 0 is the target of an initialization,
+   operand 1 is the initializer for the target, which may be void
+     if simply expanding it initializes the target.
+   operand 2 is the cleanup for this node, if any.
+   operand 3 is the saved initializer after this node has been
+   expanded once; this is so we can re-expand the tree later.  */
+DEFTREECODE (TARGET_EXPR, "target_expr", tcc_expression, 4)
+
+/* Conditional expression ( ... ? ... : ...  in C).
+   Operand 0 is the condition.
+   Operand 1 is the then-value.
+   Operand 2 is the else-value.
+   Operand 0 may be of any type.
+   Operand 1 must have the same type as the entire expression, unless
+   it unconditionally throws an exception, in which case it should
+   have VOID_TYPE.  The same constraints apply to operand 2.  The
+   condition in operand 0 must be of integral type.
+
+   In cfg gimple, if you do not have a selection expression, operands
+   1 and 2 are NULL.  The operands are then taken from the cfg edges. */
+DEFTREECODE (COND_EXPR, "cond_expr", tcc_expression, 3)
+
+/* Represents a vector in which every element is equal to operand 0.  */
+DEFTREECODE (VEC_DUPLICATE_EXPR, "vec_duplicate_expr", tcc_unary, 1)
+
+/* Vector series created from a start (base) value and a step.
+
+   A = VEC_SERIES_EXPR (B, C)
+
+   means
+
+   for (i = 0; i < N; i++)
+     A[i] = B + C * i;  */
+DEFTREECODE (VEC_SERIES_EXPR, "vec_series_expr", tcc_binary, 2)
+
+/* Vector conditional expression. It is like COND_EXPR, but with
+   vector operands.
+
+   A = VEC_COND_EXPR ( X < Y, B, C)
+
+   means
+
+   for (i=0; i<N; i++)
+     A[i] = X[i] < Y[i] ? B[i] : C[i];
+*/
+DEFTREECODE (VEC_COND_EXPR, "vec_cond_expr", tcc_expression, 3)
+
+/* Vector permutation expression.  A = VEC_PERM_EXPR<v0, v1, mask> means
+
+   N = length(mask)
+   foreach i in N:
+     M = mask[i] % (2*N)
+     A = M < N ? v0[M] : v1[M-N]
+
+   V0 and V1 are vectors of the same type.  MASK is an integer-typed
+   vector.  The number of MASK elements must be the same with the
+   number of elements in V0 and V1.  The size of the inner type
+   of the MASK and of the V0 and V1 must be the same.
+*/
+DEFTREECODE (VEC_PERM_EXPR, "vec_perm_expr", tcc_expression, 3)
+
+/* Declare local variables, including making RTL and allocating space.
+   BIND_EXPR_VARS is a chain of VAR_DECL nodes for the variables.
+   BIND_EXPR_BODY is the body, the expression to be computed using
+   the variables.  The value of operand 1 becomes that of the BIND_EXPR.
+   BIND_EXPR_BLOCK is the BLOCK that corresponds to these bindings
+   for debugging purposes.  If this BIND_EXPR is actually expanded,
+   that sets the TREE_USED flag in the BLOCK.
+
+   The BIND_EXPR is not responsible for informing parsers
+   about these variables.  If the body is coming from the input file,
+   then the code that creates the BIND_EXPR is also responsible for
+   informing the parser of the variables.
+
+   If the BIND_EXPR is ever expanded, its TREE_USED flag is set.
+   This tells the code for debugging symbol tables not to ignore the BIND_EXPR.
+   If the BIND_EXPR should be output for debugging but will not be expanded,
+   set the TREE_USED flag by hand.
+
+   In order for the BIND_EXPR to be known at all, the code that creates it
+   must also install it as a subblock in the tree of BLOCK
+   nodes for the function.  */
+DEFTREECODE (BIND_EXPR, "bind_expr", tcc_expression, 3)
+
+/* Function call.  CALL_EXPRs are represented by variably-sized expression
+   nodes.  There are at least three fixed operands.  Operand 0 is an
+   INTEGER_CST node containing the total operand count, the number of
+   arguments plus 3.  Operand 1 is the function or NULL, while operand 2 is
+   is static chain argument, or NULL.  The remaining operands are the
+   arguments to the call.  */
+DEFTREECODE (CALL_EXPR, "call_expr", tcc_vl_exp, 3)
+
+/* Specify a value to compute along with its corresponding cleanup.
+   Operand 0 is the cleanup expression.
+   The cleanup is executed by the first enclosing CLEANUP_POINT_EXPR,
+   which must exist.  This differs from TRY_CATCH_EXPR in that operand 1
+   is always evaluated when cleanups are run.  */
+DEFTREECODE (WITH_CLEANUP_EXPR, "with_cleanup_expr", tcc_expression, 1)
+
+/* Specify a cleanup point.
+   Operand 0 is an expression that may have cleanups.  If it does, those
+   cleanups are executed after the expression is expanded.
+
+   Note that if the expression is a reference to storage, it is forced out
+   of memory before the cleanups are run.  This is necessary to handle
+   cases where the cleanups modify the storage referenced; in the
+   expression 't.i', if 't' is a struct with an integer member 'i' and a
+   cleanup which modifies 'i', the value of the expression depends on
+   whether the cleanup is run before or after 't.i' is evaluated.  When
+   expand_expr is run on 't.i', it returns a MEM.  This is not good enough;
+   the value of 't.i' must be forced out of memory.
+
+   As a consequence, the operand of a CLEANUP_POINT_EXPR must not have
+   BLKmode, because it will not be forced out of memory.  */
+DEFTREECODE (CLEANUP_POINT_EXPR, "cleanup_point_expr", tcc_expression, 1)
+
+/* The following code is used in languages that have types where some
+   field in an object of the type contains a value that is used in the
+   computation of another field's offset or size and/or the size of the
+   type.  The positions and/or sizes of fields can vary from object to
+   object of the same type or even for one and the same object within
+   its scope.
+
+   Record types with discriminants in Ada are
+   examples of such types.  This mechanism is also used to create "fat
+   pointers" for unconstrained array types in Ada; the fat pointer is a
+   structure one of whose fields is a pointer to the actual array type
+   and the other field is a pointer to a template, which is a structure
+   containing the bounds of the array.  The bounds in the type pointed
+   to by the first field in the fat pointer refer to the values in the
+   template.
+
+   When you wish to construct such a type you need "self-references"
+   that allow you to reference the object having this type from the
+   TYPE node, i.e. without having a variable instantiating this type.
+
+   Such a "self-references" is done using a PLACEHOLDER_EXPR.  This is
+   a node that will later be replaced with the object being referenced.
+   Its type is that of the object and selects which object to use from
+   a chain of references (see below).  No other slots are used in the
+   PLACEHOLDER_EXPR.
+
+   For example, if your type FOO is a RECORD_TYPE with a field BAR,
+   and you need the value of <variable>.BAR to calculate TYPE_SIZE
+   (FOO), just substitute <variable> above with a PLACEHOLDER_EXPR
+   whose TREE_TYPE is FOO.  Then construct your COMPONENT_REF with
+   the PLACEHOLDER_EXPR as the first operand (which has the correct
+   type).  Later, when the size is needed in the program, the back-end
+   will find this PLACEHOLDER_EXPR and generate code to calculate the
+   actual size at run-time.  In the following, we describe how this
+   calculation is done.
+
+   When we wish to evaluate a size or offset, we check whether it contains a
+   PLACEHOLDER_EXPR.  If it does, we call substitute_placeholder_in_expr
+   passing both that tree and an expression within which the object may be
+   found.  The latter expression is the object itself in the simple case of
+   an Ada record with discriminant, but it can be the array in the case of an
+   unconstrained array.
+
+   In the latter case, we need the fat pointer, because the bounds of
+   the array can only be accessed from it.  However, we rely here on the
+   fact that the expression for the array contains the dereference of
+   the fat pointer that obtained the array pointer.  */
+
+/* Denotes a record to later be substituted before evaluating this expression.
+   The type of this expression is used to find the record to replace it.  */
+DEFTREECODE (PLACEHOLDER_EXPR, "placeholder_expr", tcc_exceptional, 0)
+
+/* Simple arithmetic.  */
+DEFTREECODE (PLUS_EXPR, "plus_expr", tcc_binary, 2)
+DEFTREECODE (MINUS_EXPR, "minus_expr", tcc_binary, 2)
+DEFTREECODE (MULT_EXPR, "mult_expr", tcc_binary, 2)
+
+/* Pointer addition.  The first operand is always a pointer and the
+   second operand is an integer of type sizetype.  */
+DEFTREECODE (POINTER_PLUS_EXPR, "pointer_plus_expr", tcc_binary, 2)
+
+/* Pointer subtraction.  The two arguments are pointers, and the result
+   is a signed integer of the same precision.  Pointers are interpreted
+   as unsigned, the difference is computed as if in infinite signed
+   precision.  Behavior is undefined if the difference does not fit in
+   the result type.  The result does not depend on the pointer type,
+   it is not divided by the size of the pointed-to type.  */
+DEFTREECODE (POINTER_DIFF_EXPR, "pointer_diff_expr", tcc_binary, 2)
+
+/* Highpart multiplication.  For an integral type with precision B,
+   returns bits [2B-1, B] of the full 2*B product.  */
+DEFTREECODE (MULT_HIGHPART_EXPR, "mult_highpart_expr", tcc_binary, 2)
+
+/* Division for integer result that rounds the quotient toward zero.  */
+DEFTREECODE (TRUNC_DIV_EXPR, "trunc_div_expr", tcc_binary, 2)
+
+/* Division for integer result that rounds it toward plus infinity.  */
+DEFTREECODE (CEIL_DIV_EXPR, "ceil_div_expr", tcc_binary, 2)
+
+/* Division for integer result that rounds it toward minus infinity.  */
+DEFTREECODE (FLOOR_DIV_EXPR, "floor_div_expr", tcc_binary, 2)
+
+/* Division for integer result that rounds it toward nearest integer.  */
+DEFTREECODE (ROUND_DIV_EXPR, "round_div_expr", tcc_binary, 2)
+
+/* Four kinds of remainder that go with the four kinds of division:  */
+
+/* The sign of the remainder is that of the dividend.  */
+DEFTREECODE (TRUNC_MOD_EXPR, "trunc_mod_expr", tcc_binary, 2)
+
+/* The sign of the remainder is the opposite of that of the divisor.  */
+DEFTREECODE (CEIL_MOD_EXPR, "ceil_mod_expr", tcc_binary, 2)
+
+/* The sign of the remainder is that of the divisor.  */
+DEFTREECODE (FLOOR_MOD_EXPR, "floor_mod_expr", tcc_binary, 2)
+
+/* The sign of the remainder is not predictable.  */
+DEFTREECODE (ROUND_MOD_EXPR, "round_mod_expr", tcc_binary, 2)
+
+/* Division for real result.  */
+DEFTREECODE (RDIV_EXPR, "rdiv_expr", tcc_binary, 2)
+
+/* Division which is not supposed to need rounding.
+   Used for pointer subtraction in C.  */
+DEFTREECODE (EXACT_DIV_EXPR, "exact_div_expr", tcc_binary, 2)
+
+/* Conversion of real to fixed point by truncation.  */
+DEFTREECODE (FIX_TRUNC_EXPR, "fix_trunc_expr", tcc_unary, 1)
+
+/* Conversion of an integer to a real.  */
+DEFTREECODE (FLOAT_EXPR, "float_expr", tcc_unary, 1)
+
+/* Unary negation.  */
+DEFTREECODE (NEGATE_EXPR, "negate_expr", tcc_unary, 1)
+
+/* Minimum and maximum values.  When used with floating point, if both
+   operands are zeros, or if either operand is NaN, then it is unspecified
+   which of the two operands is returned as the result.  */
+DEFTREECODE (MIN_EXPR, "min_expr", tcc_binary, 2)
+DEFTREECODE (MAX_EXPR, "max_expr", tcc_binary, 2)
+
+/* Represents the absolute value of the operand.
+
+   An ABS_EXPR must have either an INTEGER_TYPE or a REAL_TYPE.  The
+   operand of the ABS_EXPR must have the same type.  */
+DEFTREECODE (ABS_EXPR, "abs_expr", tcc_unary, 1)
+
+/* Represents the unsigned absolute value of the operand.
+   An ABSU_EXPR must have unsigned INTEGER_TYPE.  The operand of the ABSU_EXPR
+   must have the corresponding signed type.  */
+DEFTREECODE (ABSU_EXPR, "absu_expr", tcc_unary, 1)
+
+/* Shift operations for shift and rotate.
+   Shift means logical shift if done on an
+   unsigned type, arithmetic shift if done on a signed type.
+   The second operand is the number of bits to
+   shift by; it need not be the same type as the first operand and result.
+   Note that the result is undefined if the second operand is larger
+   than or equal to the first operand's type size.
+
+   The first operand of a shift can have either an integer or a
+   (non-integer) fixed-point type.  We follow the ISO/IEC TR 18037:2004
+   semantics for the latter.
+
+   Rotates are defined for integer types only.  */
+DEFTREECODE (LSHIFT_EXPR, "lshift_expr", tcc_binary, 2)
+DEFTREECODE (RSHIFT_EXPR, "rshift_expr", tcc_binary, 2)
+DEFTREECODE (LROTATE_EXPR, "lrotate_expr", tcc_binary, 2)
+DEFTREECODE (RROTATE_EXPR, "rrotate_expr", tcc_binary, 2)
+
+/* Bitwise operations.  Operands have same mode as result.  */
+DEFTREECODE (BIT_IOR_EXPR, "bit_ior_expr", tcc_binary, 2)
+DEFTREECODE (BIT_XOR_EXPR, "bit_xor_expr", tcc_binary, 2)
+DEFTREECODE (BIT_AND_EXPR, "bit_and_expr", tcc_binary, 2)
+DEFTREECODE (BIT_NOT_EXPR, "bit_not_expr", tcc_unary, 1)
+
+/* ANDIF and ORIF allow the second operand not to be computed if the
+   value of the expression is determined from the first operand.  AND,
+   OR, and XOR always compute the second operand whether its value is
+   needed or not (for side effects).  The operand may have
+   BOOLEAN_TYPE or INTEGER_TYPE.  In either case, the argument will be
+   either zero or one.  For example, a TRUTH_NOT_EXPR will never have
+   an INTEGER_TYPE VAR_DECL as its argument; instead, a NE_EXPR will be
+   used to compare the VAR_DECL to zero, thereby obtaining a node with
+   value zero or one.  */
+DEFTREECODE (TRUTH_ANDIF_EXPR, "truth_andif_expr", tcc_expression, 2)
+DEFTREECODE (TRUTH_ORIF_EXPR, "truth_orif_expr", tcc_expression, 2)
+DEFTREECODE (TRUTH_AND_EXPR, "truth_and_expr", tcc_expression, 2)
+DEFTREECODE (TRUTH_OR_EXPR, "truth_or_expr", tcc_expression, 2)
+DEFTREECODE (TRUTH_XOR_EXPR, "truth_xor_expr", tcc_expression, 2)
+DEFTREECODE (TRUTH_NOT_EXPR, "truth_not_expr", tcc_expression, 1)
+
+/* Relational operators.
+   `EQ_EXPR' and `NE_EXPR' are allowed for any types.
+   The others are allowed only for integer (or pointer or enumeral)
+   or real types.
+   In all cases the operands will have the same type,
+   and the value is either the type used by the language for booleans
+   or an integer vector type of the same size and with the same number
+   of elements as the comparison operands.  True for a vector of
+   comparison results has all bits set while false is equal to zero.  */
+DEFTREECODE (LT_EXPR, "lt_expr", tcc_comparison, 2)
+DEFTREECODE (LE_EXPR, "le_expr", tcc_comparison, 2)
+DEFTREECODE (GT_EXPR, "gt_expr", tcc_comparison, 2)
+DEFTREECODE (GE_EXPR, "ge_expr", tcc_comparison, 2)
+DEFTREECODE (EQ_EXPR, "eq_expr", tcc_comparison, 2)
+DEFTREECODE (NE_EXPR, "ne_expr", tcc_comparison, 2)
+
+/* Additional relational operators for floating point unordered.  */
+DEFTREECODE (UNORDERED_EXPR, "unordered_expr", tcc_comparison, 2)
+DEFTREECODE (ORDERED_EXPR, "ordered_expr", tcc_comparison, 2)
+
+/* These are equivalent to unordered or ...  */
+DEFTREECODE (UNLT_EXPR, "unlt_expr", tcc_comparison, 2)
+DEFTREECODE (UNLE_EXPR, "unle_expr", tcc_comparison, 2)
+DEFTREECODE (UNGT_EXPR, "ungt_expr", tcc_comparison, 2)
+DEFTREECODE (UNGE_EXPR, "unge_expr", tcc_comparison, 2)
+DEFTREECODE (UNEQ_EXPR, "uneq_expr", tcc_comparison, 2)
+
+/* This is the reverse of uneq_expr.  */
+DEFTREECODE (LTGT_EXPR, "ltgt_expr", tcc_comparison, 2)
+
+DEFTREECODE (RANGE_EXPR, "range_expr", tcc_binary, 2)
+
+/* Represents a re-association barrier for floating point expressions
+   like explicit parenthesis in fortran.  */
+DEFTREECODE (PAREN_EXPR, "paren_expr", tcc_unary, 1)
+
+/* Represents a conversion of type of a value.
+   All conversions, including implicit ones, must be
+   represented by CONVERT_EXPR or NOP_EXPR nodes.  */
+DEFTREECODE (CONVERT_EXPR, "convert_expr", tcc_unary, 1)
+
+/* Conversion of a pointer value to a pointer to a different
+   address space.  */
+DEFTREECODE (ADDR_SPACE_CONVERT_EXPR, "addr_space_convert_expr", tcc_unary, 1)
+
+/* Conversion of a fixed-point value to an integer, a real, or a fixed-point
+   value.  Or conversion of a fixed-point value from an integer, a real, or
+   a fixed-point value.  */
+DEFTREECODE (FIXED_CONVERT_EXPR, "fixed_convert_expr", tcc_unary, 1)
+
+/* Represents a conversion expected to require no code to be generated.  */
+DEFTREECODE (NOP_EXPR, "nop_expr", tcc_unary, 1)
+
+/* Value is same as argument, but guaranteed not an lvalue.  */
+DEFTREECODE (NON_LVALUE_EXPR, "non_lvalue_expr", tcc_unary, 1)
+
+/* A COMPOUND_LITERAL_EXPR represents a literal that is placed in a DECL.  The
+   COMPOUND_LITERAL_EXPR_DECL_EXPR is the a DECL_EXPR containing the decl
+   for the anonymous object represented by the COMPOUND_LITERAL;
+   the DECL_INITIAL of that decl is the CONSTRUCTOR that initializes
+   the compound literal.  */
+DEFTREECODE (COMPOUND_LITERAL_EXPR, "compound_literal_expr", tcc_expression, 1)
+
+/* Represents something we computed once and will use multiple times.
+   First operand is that expression.  After it is evaluated once, it
+   will be replaced by the temporary variable that holds the value.  */
+DEFTREECODE (SAVE_EXPR, "save_expr", tcc_expression, 1)
+
+/* & in C.  Value is the address at which the operand's value resides.
+   Operand may have any mode.  Result mode is Pmode.  */
+DEFTREECODE (ADDR_EXPR, "addr_expr", tcc_expression, 1)
+
+/* Operand0 is a function constant; result is part N of a function
+   descriptor of type ptr_mode.  */
+DEFTREECODE (FDESC_EXPR, "fdesc_expr", tcc_expression, 2)
+
+/* Given a container value, a replacement value and a bit position within
+   the container, produce the value that results from replacing the part of
+   the container starting at the bit position with the replacement value.
+   Operand 0 is a tree for the container value of integral or vector type;
+   Operand 1 is a tree for the replacement value of another integral or
+   the vector element type;
+   Operand 2 is a tree giving the constant bit position;
+   The number of bits replaced is given by the precision of the type of the
+   replacement value if it is integral or by its size if it is non-integral.
+   ???  The reason to make the size of the replacement implicit is to avoid
+   introducing a quaternary operation.
+   The replaced bits shall be fully inside the container.  If the container
+   is of vector type, then these bits shall be aligned with its elements.  */
+DEFTREECODE (BIT_INSERT_EXPR, "bit_insert_expr", tcc_expression, 3)
+
+/* Given two real or integer operands of the same type,
+   returns a complex value of the corresponding complex type.  */
+DEFTREECODE (COMPLEX_EXPR, "complex_expr", tcc_binary, 2)
+
+/* Complex conjugate of operand.  Used only on complex types.  */
+DEFTREECODE (CONJ_EXPR, "conj_expr", tcc_unary, 1)
+
+/* Nodes for ++ and -- in C.
+   The second arg is how much to increment or decrement by.
+   For a pointer, it would be the size of the object pointed to.  */
+DEFTREECODE (PREDECREMENT_EXPR, "predecrement_expr", tcc_expression, 2)
+DEFTREECODE (PREINCREMENT_EXPR, "preincrement_expr", tcc_expression, 2)
+DEFTREECODE (POSTDECREMENT_EXPR, "postdecrement_expr", tcc_expression, 2)
+DEFTREECODE (POSTINCREMENT_EXPR, "postincrement_expr", tcc_expression, 2)
+
+/* Used to implement `va_arg'.  */
+DEFTREECODE (VA_ARG_EXPR, "va_arg_expr", tcc_expression, 1)
+
+/* Evaluate operand 0.  If and only if an exception is thrown during
+   the evaluation of operand 0, evaluate operand 1.
+
+   This differs from TRY_FINALLY_EXPR in that operand 1 is not evaluated
+   on a normal or jump exit, only on an exception.  */
+DEFTREECODE (TRY_CATCH_EXPR, "try_catch_expr", tcc_statement, 2)
+
+/* Evaluate the first operand.
+   The second operand is a cleanup expression which is evaluated
+   on any exit (normal, exception, or jump out) from this expression.  */
+DEFTREECODE (TRY_FINALLY_EXPR, "try_finally", tcc_statement, 2)
+
+/* These types of expressions have no useful value,
+   and always have side effects.  */
+
+/* Used to represent a local declaration. The operand is DECL_EXPR_DECL.  */
+DEFTREECODE (DECL_EXPR, "decl_expr", tcc_statement, 1)
+
+/* A label definition, encapsulated as a statement.
+   Operand 0 is the LABEL_DECL node for the label that appears here.
+   The type should be void and the value should be ignored.  */
+DEFTREECODE (LABEL_EXPR, "label_expr", tcc_statement, 1)
+
+/* GOTO.  Operand 0 is a LABEL_DECL node or an expression.
+   The type should be void and the value should be ignored.  */
+DEFTREECODE (GOTO_EXPR, "goto_expr", tcc_statement, 1)
+
+/* RETURN.  Evaluates operand 0, then returns from the current function.
+   Presumably that operand is an assignment that stores into the
+   RESULT_DECL that hold the value to be returned.
+   The operand may be null.
+   The type should be void and the value should be ignored.  */
+DEFTREECODE (RETURN_EXPR, "return_expr", tcc_statement, 1)
+
+/* Exit the inner most loop conditionally.  Operand 0 is the condition.
+   The type should be void and the value should be ignored.  */
+DEFTREECODE (EXIT_EXPR, "exit_expr", tcc_statement, 1)
+
+/* A loop.  Operand 0 is the body of the loop.
+   It must contain an EXIT_EXPR or is an infinite loop.
+   The type should be void and the value should be ignored.  */
+DEFTREECODE (LOOP_EXPR, "loop_expr", tcc_statement, 1)
+
+/* Switch expression.
+
+   TREE_TYPE is the original type of the condition, before any
+   language required type conversions.  It may be NULL, in which case
+   the original type and final types are assumed to be the same.
+
+   Operand 0 is the expression used to perform the branch,
+   Operand 1 is the body of the switch, which probably contains
+     CASE_LABEL_EXPRs.  It may also be NULL, in which case operand 2
+     must not be NULL.  */
+DEFTREECODE (SWITCH_EXPR, "switch_expr", tcc_statement, 2)
+
+/* Used to represent a case label.
+
+   Operand 0 is CASE_LOW.  It may be NULL_TREE, in which case the label
+     is a 'default' label.
+   Operand 1 is CASE_HIGH.  If it is NULL_TREE, the label is a simple
+     (one-value) case label.  If it is non-NULL_TREE, the case is a range.
+   Operand 2 is CASE_LABEL, which is is the corresponding LABEL_DECL.
+   Operand 3 is CASE_CHAIN.  This operand is only used in tree-cfg.c to
+     speed up the lookup of case labels which use a particular edge in
+     the control flow graph.  */
+DEFTREECODE (CASE_LABEL_EXPR, "case_label_expr", tcc_statement, 4)
+
+/* Used to represent an inline assembly statement.  ASM_STRING returns a
+   STRING_CST for the instruction (e.g., "mov x, y"). ASM_OUTPUTS,
+   ASM_INPUTS, and ASM_CLOBBERS represent the outputs, inputs, and clobbers
+   for the statement.  ASM_LABELS, if present, indicates various destinations
+   for the asm; labels cannot be combined with outputs.  */
+DEFTREECODE (ASM_EXPR, "asm_expr", tcc_statement, 5)
+
+/* Variable references for SSA analysis.  New SSA names are created every
+   time a variable is assigned a new value.  The SSA builder uses SSA_NAME
+   nodes to implement SSA versioning.  */
+DEFTREECODE (SSA_NAME, "ssa_name", tcc_exceptional, 0)
+
+/* Used to represent a typed exception handler.  CATCH_TYPES is the type (or
+   list of types) handled, and CATCH_BODY is the code for the handler.  */
+DEFTREECODE (CATCH_EXPR, "catch_expr", tcc_statement, 2)
+
+/* Used to represent an exception specification.  EH_FILTER_TYPES is a list
+   of allowed types, and EH_FILTER_FAILURE is an expression to evaluate on
+   failure.  */
+DEFTREECODE (EH_FILTER_EXPR, "eh_filter_expr", tcc_statement, 2)
+
+/* Node used for describing a property that is known at compile
+   time.  */
+DEFTREECODE (SCEV_KNOWN, "scev_known", tcc_expression, 0)
+
+/* Node used for describing a property that is not known at compile
+   time.  */
+DEFTREECODE (SCEV_NOT_KNOWN, "scev_not_known", tcc_expression, 0)
+
+/* Polynomial chains of recurrences.
+   cr = {CHREC_LEFT (cr), +, CHREC_RIGHT (cr)}_CHREC_VARIABLE (cr).  */
+DEFTREECODE (POLYNOMIAL_CHREC, "polynomial_chrec", tcc_expression, 2)
+
+/* Used to chain children of container statements together.
+   Use the interface in tree-iterator.h to access this node.  */
+DEFTREECODE (STATEMENT_LIST, "statement_list", tcc_exceptional, 0)
+
+/* Predicate assertion.  Artificial expression generated by the optimizers
+   to keep track of predicate values.  This expression may only appear on
+   the RHS of assignments.
+
+   Given X = ASSERT_EXPR <Y, EXPR>, the optimizers can infer
+   two things:
+
+   	1- X is a copy of Y.
+	2- EXPR is a conditional expression and is known to be true.
+
+   Valid and to be expected forms of conditional expressions are
+   valid GIMPLE conditional expressions (as defined by is_gimple_condexpr)
+   and conditional expressions with the first operand being a
+   PLUS_EXPR with a variable possibly wrapped in a NOP_EXPR first
+   operand and an integer constant second operand.
+
+   The type of the expression is the same as Y.  */
+DEFTREECODE (ASSERT_EXPR, "assert_expr", tcc_expression, 2)
+
+/* Base class information. Holds information about a class as a
+   baseclass of itself or another class.  */
+DEFTREECODE (TREE_BINFO, "tree_binfo", tcc_exceptional, 0)
+
+/* Records the size for an expression of variable size type.  This is
+   for use in contexts in which we are accessing the entire object,
+   such as for a function call, or block copy.
+   Operand 0 is the real expression.
+   Operand 1 is the size of the type in the expression.  */
+DEFTREECODE (WITH_SIZE_EXPR, "with_size_expr", tcc_expression, 2)
+
+/* Extract elements from two input vectors Operand 0 and Operand 1
+   size VS, according to the offset OFF defined by Operand 2 as
+   follows:
+   If OFF > 0, the last VS - OFF elements of vector OP0 are concatenated to
+   the first OFF elements of the vector OP1.
+   If OFF == 0, then the returned vector is OP1.
+   On different targets OFF may take different forms; It can be an address, in
+   which case its low log2(VS)-1 bits define the offset, or it can be a mask
+   generated by the builtin targetm.vectorize.mask_for_load_builtin_decl.  */
+DEFTREECODE (REALIGN_LOAD_EXPR, "realign_load", tcc_expression, 3)
+
+/* Low-level memory addressing.  Operands are BASE (address of static or
+   global variable or register), OFFSET (integer constant),
+   INDEX (register), STEP (integer constant), INDEX2 (register),
+   The corresponding address is BASE + STEP * INDEX + INDEX2 + OFFSET.
+   Only variations and values valid on the target are allowed.
+
+   The type of STEP, INDEX and INDEX2 is sizetype.
+
+   The type of BASE is a pointer type.  If BASE is not an address of
+   a static or global variable INDEX2 will be NULL.
+
+   The type of OFFSET is a pointer type and determines TBAA the same as
+   the constant offset operand in MEM_REF.  */
+
+DEFTREECODE (TARGET_MEM_REF, "target_mem_ref", tcc_reference, 5)
+
+/* Memory addressing.  Operands are a pointer and a tree constant integer
+   byte offset of the pointer type that when dereferenced yields the
+   type of the base object the pointer points into and which is used for
+   TBAA purposes.
+   The type of the MEM_REF is the type the bytes at the memory location
+   are interpreted as.
+   MEM_REF <p, c> is equivalent to ((typeof(c))p)->x... where x... is a
+   chain of component references offsetting p by c.  */
+DEFTREECODE (MEM_REF, "mem_ref", tcc_reference, 2)
+
+/* OpenACC and OpenMP.  As it is exposed in TREE_RANGE_CHECK invocations, do
+   not change the ordering of these codes.  */
+
+/* OpenACC - #pragma acc parallel [clause1 ... clauseN]
+   Operand 0: OMP_BODY: Code to be executed in parallel.
+   Operand 1: OMP_CLAUSES: List of clauses.  */
+
+DEFTREECODE (OACC_PARALLEL, "oacc_parallel", tcc_statement, 2)
+
+/* OpenACC - #pragma acc kernels [clause1 ... clauseN]
+   Operand 0: OMP_BODY: Sequence of kernels.
+   Operand 1: OMP_CLAUSES: List of clauses.  */
+
+DEFTREECODE (OACC_KERNELS, "oacc_kernels", tcc_statement, 2)
+
+/* OpenACC - #pragma acc data [clause1 ... clauseN]
+   Operand 0: OACC_DATA_BODY: Data construct body.
+   Operand 1: OACC_DATA_CLAUSES: List of clauses.  */
+
+DEFTREECODE (OACC_DATA, "oacc_data", tcc_statement, 2)
+
+/* OpenACC - #pragma acc host_data [clause1 ... clauseN]
+   Operand 0: OACC_HOST_DATA_BODY: Host_data construct body.
+   Operand 1: OACC_HOST_DATA_CLAUSES: List of clauses.  */
+
+DEFTREECODE (OACC_HOST_DATA, "oacc_host_data", tcc_statement, 2)
+
+/* OpenMP - #pragma omp parallel [clause1 ... clauseN]
+   Operand 0: OMP_PARALLEL_BODY: Code to be executed by all threads.
+   Operand 1: OMP_PARALLEL_CLAUSES: List of clauses.  */
+
+DEFTREECODE (OMP_PARALLEL, "omp_parallel", tcc_statement, 2)
+
+/* OpenMP - #pragma omp task [clause1 ... clauseN]
+   Operand 0: OMP_TASK_BODY: Code to be executed by all threads.
+   Operand 1: OMP_TASK_CLAUSES: List of clauses.  */
+
+DEFTREECODE (OMP_TASK, "omp_task", tcc_statement, 2)
+
+/* OpenMP - #pragma omp for [clause1 ... clauseN]
+   Operand 0: OMP_FOR_BODY: Loop body.
+   Operand 1: OMP_FOR_CLAUSES: List of clauses.
+   Operand 2: OMP_FOR_INIT: Initialization code of the form
+                             	VAR = N1.
+   Operand 3: OMP_FOR_COND: Loop conditional expression of the form
+                             	VAR { <, >, <=, >= } N2.
+   Operand 4: OMP_FOR_INCR: Loop index increment of the form
+			     	VAR { +=, -= } INCR.
+   Operand 5: OMP_FOR_PRE_BODY: Filled by the gimplifier with things
+	from INIT, COND, and INCR that are technically part of the
+	OMP_FOR structured block, but are evaluated before the loop
+	body begins.
+   Operand 6: OMP_FOR_ORIG_DECLS: If non-NULL, list of DECLs initialized
+	in OMP_FOR_INIT.  In some cases, like C++ iterators, the original
+	DECL init has been lost in gimplification and now contains a
+	temporary (D.nnnn).  This list contains the original DECLs in
+	the source.
+
+   VAR must be an integer or pointer variable, which is implicitly thread
+   private.  N1, N2 and INCR are required to be loop invariant integer
+   expressions that are evaluated without any synchronization.
+   The evaluation order, frequency of evaluation and side-effects are
+   unspecified by the standards.  */
+DEFTREECODE (OMP_FOR, "omp_for", tcc_statement, 7)
+
+/* OpenMP - #pragma omp simd [clause1 ... clauseN]
+   Operands like for OMP_FOR.  */
+DEFTREECODE (OMP_SIMD, "omp_simd", tcc_statement, 7)
+
+/* OpenMP - #pragma omp distribute [clause1 ... clauseN]
+   Operands like for OMP_FOR.  */
+DEFTREECODE (OMP_DISTRIBUTE, "omp_distribute", tcc_statement, 7)
+
+/* OpenMP - #pragma omp taskloop [clause1 ... clauseN]
+   Operands like for OMP_FOR.  */
+DEFTREECODE (OMP_TASKLOOP, "omp_taskloop", tcc_statement, 7)
+
+/* OpenMP - #pragma acc loop [clause1 ... clauseN]
+   Operands like for OMP_FOR.  */
+DEFTREECODE (OACC_LOOP, "oacc_loop", tcc_statement, 7)
+
+/* OpenMP - #pragma omp teams [clause1 ... clauseN]
+   Operand 0: OMP_TEAMS_BODY: Teams body.
+   Operand 1: OMP_TEAMS_CLAUSES: List of clauses.  */
+DEFTREECODE (OMP_TEAMS, "omp_teams", tcc_statement, 2)
+
+/* OpenMP - #pragma omp target data [clause1 ... clauseN]
+   Operand 0: OMP_TARGET_DATA_BODY: Target data construct body.
+   Operand 1: OMP_TARGET_DATA_CLAUSES: List of clauses.  */
+DEFTREECODE (OMP_TARGET_DATA, "omp_target_data", tcc_statement, 2)
+
+/* OpenMP - #pragma omp target [clause1 ... clauseN]
+   Operand 0: OMP_TARGET_BODY: Target construct body.
+   Operand 1: OMP_TARGET_CLAUSES: List of clauses.  */
+DEFTREECODE (OMP_TARGET, "omp_target", tcc_statement, 2)
+
+/* OpenMP - #pragma omp sections [clause1 ... clauseN]
+   Operand 0: OMP_SECTIONS_BODY: Sections body.
+   Operand 1: OMP_SECTIONS_CLAUSES: List of clauses.  */
+DEFTREECODE (OMP_SECTIONS, "omp_sections", tcc_statement, 2)
+
+/* OpenMP - #pragma omp ordered
+   Operand 0: OMP_ORDERED_BODY: Master section body.
+   Operand 1: OMP_ORDERED_CLAUSES: List of clauses.  */
+DEFTREECODE (OMP_ORDERED, "omp_ordered", tcc_statement, 2)
+
+/* OpenMP - #pragma omp critical [name]
+   Operand 0: OMP_CRITICAL_BODY: Critical section body.
+   Operand 1: OMP_CRITICAL_CLAUSES: List of clauses.
+   Operand 2: OMP_CRITICAL_NAME: Identifier for critical section.  */
+DEFTREECODE (OMP_CRITICAL, "omp_critical", tcc_statement, 3)
+
+/* OpenMP - #pragma omp single
+   Operand 0: OMP_SINGLE_BODY: Single section body.
+   Operand 1: OMP_SINGLE_CLAUSES: List of clauses.  */
+DEFTREECODE (OMP_SINGLE, "omp_single", tcc_statement, 2)
+
+/* OpenMP - #pragma omp taskgroup
+   Operand 0: OMP_TASKGROUP_BODY: Taskgroup body.
+   Operand 1: OMP_SINGLE_CLAUSES: List of clauses.  */
+DEFTREECODE (OMP_TASKGROUP, "omp_taskgroup", tcc_statement, 2)
+
+/* OpenMP - #pragma omp section
+   Operand 0: OMP_SECTION_BODY: Section body.  */
+DEFTREECODE (OMP_SECTION, "omp_section", tcc_statement, 1)
+
+/* OpenMP - #pragma omp master
+   Operand 0: OMP_MASTER_BODY: Master section body.  */
+DEFTREECODE (OMP_MASTER, "omp_master", tcc_statement, 1)
+
+/* OpenACC - #pragma acc cache (variable1 ... variableN)
+   Operand 0: OACC_CACHE_CLAUSES: List of variables (transformed into
+	OMP_CLAUSE__CACHE_ clauses).  */
+DEFTREECODE (OACC_CACHE, "oacc_cache", tcc_statement, 1)
+
+/* OpenACC - #pragma acc declare [clause1 ... clauseN]
+   Operand 0: OACC_DECLARE_CLAUSES: List of clauses.  */
+DEFTREECODE (OACC_DECLARE, "oacc_declare", tcc_statement, 1)
+
+/* OpenACC - #pragma acc enter data [clause1 ... clauseN]
+   Operand 0: OACC_ENTER_DATA_CLAUSES: List of clauses.  */
+DEFTREECODE (OACC_ENTER_DATA, "oacc_enter_data", tcc_statement, 1)
+
+/* OpenACC - #pragma acc exit data [clause1 ... clauseN]
+   Operand 0: OACC_EXIT_DATA_CLAUSES: List of clauses.  */
+DEFTREECODE (OACC_EXIT_DATA, "oacc_exit_data", tcc_statement, 1)
+
+/* OpenACC - #pragma acc update [clause1 ... clauseN]
+   Operand 0: OACC_UPDATE_CLAUSES: List of clauses.  */
+DEFTREECODE (OACC_UPDATE, "oacc_update", tcc_statement, 1)
+
+/* OpenMP - #pragma omp target update [clause1 ... clauseN]
+   Operand 0: OMP_TARGET_UPDATE_CLAUSES: List of clauses.  */
+DEFTREECODE (OMP_TARGET_UPDATE, "omp_target_update", tcc_statement, 1)
+
+/* OpenMP - #pragma omp target enter data [clause1 ... clauseN]
+   Operand 0: OMP_TARGET_ENTER_DATA_CLAUSES: List of clauses.  */
+DEFTREECODE (OMP_TARGET_ENTER_DATA, "omp_target_enter_data", tcc_statement, 1)
+
+/* OpenMP - #pragma omp target exit data [clause1 ... clauseN]
+   Operand 0: OMP_TARGET_EXIT_DATA_CLAUSES: List of clauses.  */
+DEFTREECODE (OMP_TARGET_EXIT_DATA, "omp_target_exit_data", tcc_statement, 1)
+
+/* OMP_ATOMIC through OMP_ATOMIC_CAPTURE_NEW must be consecutive,
+   or OMP_ATOMIC_SEQ_CST needs adjusting.  */
+
+/* OpenMP - #pragma omp atomic
+   Operand 0: The address at which the atomic operation is to be performed.
+	This address should be stabilized with save_expr.
+   Operand 1: The expression to evaluate.  When the old value of the object
+	at the address is used in the expression, it should appear as if
+	build_fold_indirect_ref of the address.  */
+DEFTREECODE (OMP_ATOMIC, "omp_atomic", tcc_statement, 2)
+
+/* OpenMP - #pragma omp atomic read
+   Operand 0: The address at which the atomic operation is to be performed.
+	This address should be stabilized with save_expr.  */
+DEFTREECODE (OMP_ATOMIC_READ, "omp_atomic_read", tcc_statement, 1)
+
+/* OpenMP - #pragma omp atomic capture
+   Operand 0: The address at which the atomic operation is to be performed.
+	This address should be stabilized with save_expr.
+   Operand 1: The expression to evaluate.  When the old value of the object
+	at the address is used in the expression, it should appear as if
+	build_fold_indirect_ref of the address.
+   OMP_ATOMIC_CAPTURE_OLD returns the old memory content,
+   OMP_ATOMIC_CAPTURE_NEW the new value.  */
+DEFTREECODE (OMP_ATOMIC_CAPTURE_OLD, "omp_atomic_capture_old", tcc_statement, 2)
+DEFTREECODE (OMP_ATOMIC_CAPTURE_NEW, "omp_atomic_capture_new", tcc_statement, 2)
+
+/* OpenMP clauses.  */
+DEFTREECODE (OMP_CLAUSE, "omp_clause", tcc_exceptional, 0)
+
+/* TRANSACTION_EXPR tree code.
+   Operand 0: BODY: contains body of the transaction.  */
+DEFTREECODE (TRANSACTION_EXPR, "transaction_expr", tcc_expression, 1)
+
+/* Widening dot-product.
+   The first two arguments are of type t1.
+   The third argument and the result are of type t2, such that t2 is at least
+   twice the size of t1. DOT_PROD_EXPR(arg1,arg2,arg3) is equivalent to:
+   	tmp = WIDEN_MULT_EXPR(arg1, arg2);
+   	arg3 = PLUS_EXPR (tmp, arg3);
+   or:
+	tmp = WIDEN_MULT_EXPR(arg1, arg2);
+        arg3 = WIDEN_SUM_EXPR (tmp, arg3);		 */
+DEFTREECODE (DOT_PROD_EXPR, "dot_prod_expr", tcc_expression, 3)
+
+/* Widening summation.
+   The first argument is of type t1.
+   The second argument is of type t2, such that t2 is at least twice
+   the size of t1. The type of the entire expression is also t2.
+   WIDEN_SUM_EXPR is equivalent to first widening (promoting)
+   the first argument from type t1 to type t2, and then summing it
+   with the second argument.  */
+DEFTREECODE (WIDEN_SUM_EXPR, "widen_sum_expr", tcc_binary, 2)
+
+/* Widening sad (sum of absolute differences).
+   The first two arguments are of type t1 which should be integer.
+   The third argument and the result are of type t2, such that t2 is at least
+   twice the size of t1.  Like DOT_PROD_EXPR, SAD_EXPR (arg1,arg2,arg3) is
+   equivalent to (note we don't have WIDEN_MINUS_EXPR now, but we assume its
+   behavior is similar to WIDEN_SUM_EXPR):
+       tmp = WIDEN_MINUS_EXPR (arg1, arg2)
+       tmp2 = ABS_EXPR (tmp)
+       arg3 = PLUS_EXPR (tmp2, arg3)
+  or:
+       tmp = WIDEN_MINUS_EXPR (arg1, arg2)
+       tmp2 = ABS_EXPR (tmp)
+       arg3 = WIDEN_SUM_EXPR (tmp2, arg3)
+ */
+DEFTREECODE (SAD_EXPR, "sad_expr", tcc_expression, 3)
+
+/* Widening multiplication.
+   The two arguments are of type t1.
+   The result is of type t2, such that t2 is at least twice
+   the size of t1. WIDEN_MULT_EXPR is equivalent to first widening (promoting)
+   the arguments from type t1 to type t2, and then multiplying them.  */
+DEFTREECODE (WIDEN_MULT_EXPR, "widen_mult_expr", tcc_binary, 2)
+
+/* Widening multiply-accumulate.
+   The first two arguments are of type t1.
+   The third argument and the result are of type t2, such as t2 is at least
+   twice the size of t1.  t1 and t2 must be integral or fixed-point types.
+   The expression is equivalent to a WIDEN_MULT_EXPR operation
+   of the first two operands followed by an add or subtract of the third
+   operand.  */
+DEFTREECODE (WIDEN_MULT_PLUS_EXPR, "widen_mult_plus_expr", tcc_expression, 3)
+/* This is like the above, except in the final expression the multiply result
+   is subtracted from t3.  */
+DEFTREECODE (WIDEN_MULT_MINUS_EXPR, "widen_mult_minus_expr", tcc_expression, 3)
+
+/* Widening shift left.
+   The first operand is of type t1.
+   The second operand is the number of bits to shift by; it need not be the
+   same type as the first operand and result.
+   Note that the result is undefined if the second operand is larger
+   than or equal to the first operand's type size.
+   The type of the entire expression is t2, such that t2 is at least twice
+   the size of t1.
+   WIDEN_LSHIFT_EXPR is equivalent to first widening (promoting)
+   the first argument from type t1 to type t2, and then shifting it
+   by the second argument.  */
+DEFTREECODE (WIDEN_LSHIFT_EXPR, "widen_lshift_expr", tcc_binary, 2)
+
+/* Widening vector multiplication.
+   The two operands are vectors with N elements of size S. Multiplying the
+   elements of the two vectors will result in N products of size 2*S.
+   VEC_WIDEN_MULT_HI_EXPR computes the N/2 high products.
+   VEC_WIDEN_MULT_LO_EXPR computes the N/2 low products.  */
+DEFTREECODE (VEC_WIDEN_MULT_HI_EXPR, "widen_mult_hi_expr", tcc_binary, 2)
+DEFTREECODE (VEC_WIDEN_MULT_LO_EXPR, "widen_mult_lo_expr", tcc_binary, 2)
+
+/* Similarly, but return the even or odd N/2 products.  */
+DEFTREECODE (VEC_WIDEN_MULT_EVEN_EXPR, "widen_mult_even_expr", tcc_binary, 2)
+DEFTREECODE (VEC_WIDEN_MULT_ODD_EXPR, "widen_mult_odd_expr", tcc_binary, 2)
+
+/* Unpack (extract and promote/widen) the high/low elements of the input
+   vector into the output vector.  The input vector has twice as many
+   elements as the output vector, that are half the size of the elements
+   of the output vector.  This is used to support type promotion. */
+DEFTREECODE (VEC_UNPACK_HI_EXPR, "vec_unpack_hi_expr", tcc_unary, 1)
+DEFTREECODE (VEC_UNPACK_LO_EXPR, "vec_unpack_lo_expr", tcc_unary, 1)
+
+/* Unpack (extract) the high/low elements of the input vector, convert
+   fixed point values to floating point and widen elements into the
+   output vector.  The input vector has twice as many elements as the output
+   vector, that are half the size of the elements of the output vector.  */
+DEFTREECODE (VEC_UNPACK_FLOAT_HI_EXPR, "vec_unpack_float_hi_expr", tcc_unary, 1)
+DEFTREECODE (VEC_UNPACK_FLOAT_LO_EXPR, "vec_unpack_float_lo_expr", tcc_unary, 1)
+
+/* Unpack (extract) the high/low elements of the input vector, convert
+   floating point values to integer and widen elements into the output
+   vector.  The input vector has twice as many elements as the output
+   vector, that are half the size of the elements of the output vector.  */
+DEFTREECODE (VEC_UNPACK_FIX_TRUNC_HI_EXPR, "vec_unpack_fix_trunc_hi_expr",
+	     tcc_unary, 1)
+DEFTREECODE (VEC_UNPACK_FIX_TRUNC_LO_EXPR, "vec_unpack_fix_trunc_lo_expr",
+	     tcc_unary, 1)
+
+/* Pack (demote/narrow and merge) the elements of the two input vectors
+   into the output vector using truncation/saturation.
+   The elements of the input vectors are twice the size of the elements of the
+   output vector.  This is used to support type demotion.  */
+DEFTREECODE (VEC_PACK_TRUNC_EXPR, "vec_pack_trunc_expr", tcc_binary, 2)
+DEFTREECODE (VEC_PACK_SAT_EXPR, "vec_pack_sat_expr", tcc_binary, 2)
+
+/* Convert floating point values of the two input vectors to integer
+   and pack (narrow and merge) the elements into the output vector. The
+   elements of the input vector are twice the size of the elements of
+   the output vector.  */
+DEFTREECODE (VEC_PACK_FIX_TRUNC_EXPR, "vec_pack_fix_trunc_expr", tcc_binary, 2)
+
+/* Convert fixed point values of the two input vectors to floating point
+   and pack (narrow and merge) the elements into the output vector. The
+   elements of the input vector are twice the size of the elements of
+   the output vector.  */
+DEFTREECODE (VEC_PACK_FLOAT_EXPR, "vec_pack_float_expr", tcc_binary, 2)
+
+/* Widening vector shift left in bits.
+   Operand 0 is a vector to be shifted with N elements of size S.
+   Operand 1 is an integer shift amount in bits.
+   The result of the operation is N elements of size 2*S.
+   VEC_WIDEN_LSHIFT_HI_EXPR computes the N/2 high results.
+   VEC_WIDEN_LSHIFT_LO_EXPR computes the N/2 low results.
+ */
+DEFTREECODE (VEC_WIDEN_LSHIFT_HI_EXPR, "widen_lshift_hi_expr", tcc_binary, 2)
+DEFTREECODE (VEC_WIDEN_LSHIFT_LO_EXPR, "widen_lshift_lo_expr", tcc_binary, 2)
+
+/* PREDICT_EXPR.  Specify hint for branch prediction.  The
+   PREDICT_EXPR_PREDICTOR specify predictor and PREDICT_EXPR_OUTCOME the
+   outcome (0 for not taken and 1 for taken).  Once the profile is guessed
+   all conditional branches leading to execution paths executing the
+   PREDICT_EXPR will get predicted by the specified predictor.  */
+DEFTREECODE (PREDICT_EXPR, "predict_expr", tcc_expression, 1)
+
+/* OPTIMIZATION_NODE.  Node to store the optimization options.  */
+DEFTREECODE (OPTIMIZATION_NODE, "optimization_node", tcc_exceptional, 0)
+
+/* TARGET_OPTION_NODE.  Node to store the target specific options.  */
+DEFTREECODE (TARGET_OPTION_NODE, "target_option_node", tcc_exceptional, 0)
+
+/* ANNOTATE_EXPR.
+   Operand 0 is the expression to be annotated.
+   Operand 1 is the annotation kind.
+   Operand 2 is additional data.  */
+DEFTREECODE (ANNOTATE_EXPR, "annotate_expr", tcc_expression, 3)
+
+/*
+Local variables:
+mode:c
+End:
+*/
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree.h
new file mode 100644
index 0000000..2f2f109
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tree.h
@@ -0,0 +1,6029 @@
+/* Definitions for the ubiquitous 'tree' type for GNU compilers.
+   Copyright (C) 1989-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TREE_H
+#define GCC_TREE_H
+
+#include "tree-core.h"
+
+/* Convert a target-independent built-in function code to a combined_fn.  */
+
+inline combined_fn
+as_combined_fn (built_in_function fn)
+{
+  return combined_fn (int (fn));
+}
+
+/* Convert an internal function code to a combined_fn.  */
+
+inline combined_fn
+as_combined_fn (internal_fn fn)
+{
+  return combined_fn (int (fn) + int (END_BUILTINS));
+}
+
+/* Return true if CODE is a target-independent built-in function.  */
+
+inline bool
+builtin_fn_p (combined_fn code)
+{
+  return int (code) < int (END_BUILTINS);
+}
+
+/* Return the target-independent built-in function represented by CODE.
+   Only valid if builtin_fn_p (CODE).  */
+
+inline built_in_function
+as_builtin_fn (combined_fn code)
+{
+  gcc_checking_assert (builtin_fn_p (code));
+  return built_in_function (int (code));
+}
+
+/* Return true if CODE is an internal function.  */
+
+inline bool
+internal_fn_p (combined_fn code)
+{
+  return int (code) >= int (END_BUILTINS);
+}
+
+/* Return the internal function represented by CODE.  Only valid if
+   internal_fn_p (CODE).  */
+
+inline internal_fn
+as_internal_fn (combined_fn code)
+{
+  gcc_checking_assert (internal_fn_p (code));
+  return internal_fn (int (code) - int (END_BUILTINS));
+}
+
+/* Macros for initializing `tree_contains_struct'.  */
+#define MARK_TS_BASE(C)					\
+  (tree_contains_struct[C][TS_BASE] = true)
+
+#define MARK_TS_TYPED(C)				\
+  (MARK_TS_BASE (C),					\
+   tree_contains_struct[C][TS_TYPED] = true)
+
+#define MARK_TS_COMMON(C)				\
+  (MARK_TS_TYPED (C),					\
+   tree_contains_struct[C][TS_COMMON] = true)
+
+#define MARK_TS_TYPE_COMMON(C)				\
+  (MARK_TS_COMMON (C),					\
+   tree_contains_struct[C][TS_TYPE_COMMON] = true)
+
+#define MARK_TS_TYPE_WITH_LANG_SPECIFIC(C)		\
+  (MARK_TS_TYPE_COMMON (C),				\
+   tree_contains_struct[C][TS_TYPE_WITH_LANG_SPECIFIC] = true)
+
+#define MARK_TS_DECL_MINIMAL(C)				\
+  (MARK_TS_COMMON (C),					\
+   tree_contains_struct[C][TS_DECL_MINIMAL] = true)
+
+#define MARK_TS_DECL_COMMON(C)				\
+  (MARK_TS_DECL_MINIMAL (C),				\
+   tree_contains_struct[C][TS_DECL_COMMON] = true)
+
+#define MARK_TS_DECL_WRTL(C)				\
+  (MARK_TS_DECL_COMMON (C),				\
+   tree_contains_struct[C][TS_DECL_WRTL] = true)
+
+#define MARK_TS_DECL_WITH_VIS(C)			\
+  (MARK_TS_DECL_WRTL (C),				\
+   tree_contains_struct[C][TS_DECL_WITH_VIS] = true)
+
+#define MARK_TS_DECL_NON_COMMON(C)			\
+  (MARK_TS_DECL_WITH_VIS (C),				\
+   tree_contains_struct[C][TS_DECL_NON_COMMON] = true)
+
+/* Returns the string representing CLASS.  */
+
+#define TREE_CODE_CLASS_STRING(CLASS)\
+        tree_code_class_strings[(int) (CLASS)]
+
+#define TREE_CODE_CLASS(CODE)	tree_code_type[(int) (CODE)]
+
+/* Nonzero if NODE represents an exceptional code.  */
+
+#define EXCEPTIONAL_CLASS_P(NODE)\
+	(TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_exceptional)
+
+/* Nonzero if NODE represents a constant.  */
+
+#define CONSTANT_CLASS_P(NODE)\
+	(TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_constant)
+
+/* Nonzero if NODE represents a constant, or is a location wrapper
+   around such a node.  */
+
+#define CONSTANT_CLASS_OR_WRAPPER_P(NODE)\
+	(CONSTANT_CLASS_P (tree_strip_any_location_wrapper (NODE)))
+
+/* Nonzero if NODE represents a type.  */
+
+#define TYPE_P(NODE)\
+	(TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_type)
+
+/* Nonzero if NODE represents a declaration.  */
+
+#define DECL_P(NODE)\
+        (TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_declaration)
+
+/* True if NODE designates a variable declaration.  */
+#define VAR_P(NODE) \
+  (TREE_CODE (NODE) == VAR_DECL)
+
+/* Nonzero if DECL represents a VAR_DECL or FUNCTION_DECL.  */
+
+#define VAR_OR_FUNCTION_DECL_P(DECL)\
+  (TREE_CODE (DECL) == VAR_DECL || TREE_CODE (DECL) == FUNCTION_DECL)
+
+/* Nonzero if NODE represents a INDIRECT_REF.  Keep these checks in
+   ascending code order.  */
+
+#define INDIRECT_REF_P(NODE)\
+  (TREE_CODE (NODE) == INDIRECT_REF)
+
+/* Nonzero if NODE represents a reference.  */
+
+#define REFERENCE_CLASS_P(NODE)\
+	(TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_reference)
+
+/* Nonzero if NODE represents a comparison.  */
+
+#define COMPARISON_CLASS_P(NODE)\
+	(TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_comparison)
+
+/* Nonzero if NODE represents a unary arithmetic expression.  */
+
+#define UNARY_CLASS_P(NODE)\
+	(TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_unary)
+
+/* Nonzero if NODE represents a binary arithmetic expression.  */
+
+#define BINARY_CLASS_P(NODE)\
+	(TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_binary)
+
+/* Nonzero if NODE represents a statement expression.  */
+
+#define STATEMENT_CLASS_P(NODE)\
+	(TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_statement)
+
+/* Nonzero if NODE represents a function call-like expression with a
+   variable-length operand vector.  */
+
+#define VL_EXP_CLASS_P(NODE)\
+	(TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_vl_exp)
+
+/* Nonzero if NODE represents any other expression.  */
+
+#define EXPRESSION_CLASS_P(NODE)\
+	(TREE_CODE_CLASS (TREE_CODE (NODE)) == tcc_expression)
+
+/* Returns nonzero iff NODE represents a type or declaration.  */
+
+#define IS_TYPE_OR_DECL_P(NODE)\
+	(TYPE_P (NODE) || DECL_P (NODE))
+
+/* Returns nonzero iff CLASS is the tree-code class of an
+   expression.  */
+
+#define IS_EXPR_CODE_CLASS(CLASS)\
+	((CLASS) >= tcc_reference && (CLASS) <= tcc_expression)
+
+/* Returns nonzero iff NODE is an expression of some kind.  */
+
+#define EXPR_P(NODE) IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (NODE)))
+
+#define TREE_CODE_LENGTH(CODE)	tree_code_length[(int) (CODE)]
+
+
+/* Helper macros for math builtins.  */
+
+#define CASE_FLT_FN(FN) case FN: case FN##F: case FN##L
+#define CASE_FLT_FN_FLOATN_NX(FN)			   \
+  case FN##F16: case FN##F32: case FN##F64: case FN##F128: \
+  case FN##F32X: case FN##F64X: case FN##F128X
+#define CASE_FLT_FN_REENT(FN) case FN##_R: case FN##F_R: case FN##L_R
+#define CASE_INT_FN(FN) case FN: case FN##L: case FN##LL: case FN##IMAX
+
+#define NULL_TREE (tree) NULL
+
+/* Define accessors for the fields that all tree nodes have
+   (though some fields are not used for all kinds of nodes).  */
+
+/* The tree-code says what kind of node it is.
+   Codes are defined in tree.def.  */
+#define TREE_CODE(NODE) ((enum tree_code) (NODE)->base.code)
+#define TREE_SET_CODE(NODE, VALUE) ((NODE)->base.code = (VALUE))
+
+/* When checking is enabled, errors will be generated if a tree node
+   is accessed incorrectly. The macros die with a fatal error.  */
+#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
+
+#define TREE_CHECK(T, CODE) \
+(tree_check ((T), __FILE__, __LINE__, __FUNCTION__, (CODE)))
+
+#define TREE_NOT_CHECK(T, CODE) \
+(tree_not_check ((T), __FILE__, __LINE__, __FUNCTION__, (CODE)))
+
+#define TREE_CHECK2(T, CODE1, CODE2) \
+(tree_check2 ((T), __FILE__, __LINE__, __FUNCTION__, (CODE1), (CODE2)))
+
+#define TREE_NOT_CHECK2(T, CODE1, CODE2) \
+(tree_not_check2 ((T), __FILE__, __LINE__, __FUNCTION__, (CODE1), (CODE2)))
+
+#define TREE_CHECK3(T, CODE1, CODE2, CODE3) \
+(tree_check3 ((T), __FILE__, __LINE__, __FUNCTION__, (CODE1), (CODE2), (CODE3)))
+
+#define TREE_NOT_CHECK3(T, CODE1, CODE2, CODE3) \
+(tree_not_check3 ((T), __FILE__, __LINE__, __FUNCTION__, \
+                               (CODE1), (CODE2), (CODE3)))
+
+#define TREE_CHECK4(T, CODE1, CODE2, CODE3, CODE4) \
+(tree_check4 ((T), __FILE__, __LINE__, __FUNCTION__, \
+                           (CODE1), (CODE2), (CODE3), (CODE4)))
+
+#define TREE_NOT_CHECK4(T, CODE1, CODE2, CODE3, CODE4) \
+(tree_not_check4 ((T), __FILE__, __LINE__, __FUNCTION__, \
+                               (CODE1), (CODE2), (CODE3), (CODE4)))
+
+#define TREE_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) \
+(tree_check5 ((T), __FILE__, __LINE__, __FUNCTION__, \
+                           (CODE1), (CODE2), (CODE3), (CODE4), (CODE5)))
+
+#define TREE_NOT_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) \
+(tree_not_check5 ((T), __FILE__, __LINE__, __FUNCTION__, \
+                               (CODE1), (CODE2), (CODE3), (CODE4), (CODE5)))
+
+#define CONTAINS_STRUCT_CHECK(T, STRUCT) \
+(contains_struct_check ((T), (STRUCT), __FILE__, __LINE__, __FUNCTION__))
+
+#define TREE_CLASS_CHECK(T, CLASS) \
+(tree_class_check ((T), (CLASS), __FILE__, __LINE__, __FUNCTION__))
+
+#define TREE_RANGE_CHECK(T, CODE1, CODE2) \
+(tree_range_check ((T), (CODE1), (CODE2), __FILE__, __LINE__, __FUNCTION__))
+
+#define OMP_CLAUSE_SUBCODE_CHECK(T, CODE) \
+(omp_clause_subcode_check ((T), (CODE), __FILE__, __LINE__, __FUNCTION__))
+
+#define OMP_CLAUSE_RANGE_CHECK(T, CODE1, CODE2) \
+(omp_clause_range_check ((T), (CODE1), (CODE2), \
+                                      __FILE__, __LINE__, __FUNCTION__))
+
+/* These checks have to be special cased.  */
+#define EXPR_CHECK(T) \
+(expr_check ((T), __FILE__, __LINE__, __FUNCTION__))
+
+/* These checks have to be special cased.  */
+#define NON_TYPE_CHECK(T) \
+(non_type_check ((T), __FILE__, __LINE__, __FUNCTION__))
+
+/* These checks have to be special cased.  */
+#define ANY_INTEGRAL_TYPE_CHECK(T) \
+(any_integral_type_check ((T), __FILE__, __LINE__, __FUNCTION__))
+
+#define TREE_INT_CST_ELT_CHECK(T, I) \
+(*tree_int_cst_elt_check ((T), (I), __FILE__, __LINE__, __FUNCTION__))
+
+#define TREE_VEC_ELT_CHECK(T, I) \
+(*(CONST_CAST2 (tree *, typeof (T)*, \
+     tree_vec_elt_check ((T), (I), __FILE__, __LINE__, __FUNCTION__))))
+
+#define OMP_CLAUSE_ELT_CHECK(T, I) \
+(*(omp_clause_elt_check ((T), (I), __FILE__, __LINE__, __FUNCTION__)))
+
+/* Special checks for TREE_OPERANDs.  */
+#define TREE_OPERAND_CHECK(T, I) \
+(*(CONST_CAST2 (tree*, typeof (T)*, \
+     tree_operand_check ((T), (I), __FILE__, __LINE__, __FUNCTION__))))
+
+#define TREE_OPERAND_CHECK_CODE(T, CODE, I) \
+(*(tree_operand_check_code ((T), (CODE), (I), \
+                                         __FILE__, __LINE__, __FUNCTION__)))
+
+/* Nodes are chained together for many purposes.
+   Types are chained together to record them for being output to the debugger
+   (see the function `chain_type').
+   Decls in the same scope are chained together to record the contents
+   of the scope.
+   Statement nodes for successive statements used to be chained together.
+   Often lists of things are represented by TREE_LIST nodes that
+   are chained together.  */
+
+#define TREE_CHAIN(NODE) \
+(CONTAINS_STRUCT_CHECK (NODE, TS_COMMON)->common.chain)
+
+/* In all nodes that are expressions, this is the data type of the expression.
+   In POINTER_TYPE nodes, this is the type that the pointer points to.
+   In ARRAY_TYPE nodes, this is the type of the elements.
+   In VECTOR_TYPE nodes, this is the type of the elements.  */
+#define TREE_TYPE(NODE) \
+(CONTAINS_STRUCT_CHECK (NODE, TS_TYPED)->typed.type)
+
+extern void tree_contains_struct_check_failed (const_tree,
+					       const enum tree_node_structure_enum,
+					       const char *, int, const char *)
+  ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+
+extern void tree_check_failed (const_tree, const char *, int, const char *,
+			       ...) ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void tree_not_check_failed (const_tree, const char *, int, const char *,
+				   ...) ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void tree_class_check_failed (const_tree, const enum tree_code_class,
+				     const char *, int, const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void tree_range_check_failed (const_tree, const char *, int,
+				     const char *, enum tree_code,
+				     enum tree_code)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void tree_not_class_check_failed (const_tree,
+					 const enum tree_code_class,
+					 const char *, int, const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void tree_int_cst_elt_check_failed (int, int, const char *,
+					   int, const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void tree_vec_elt_check_failed (int, int, const char *,
+				       int, const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void phi_node_elt_check_failed (int, int, const char *,
+				       int, const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void tree_operand_check_failed (int, const_tree,
+				       const char *, int, const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void omp_clause_check_failed (const_tree, const char *, int,
+				     const char *, enum omp_clause_code)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void omp_clause_operand_check_failed (int, const_tree, const char *,
+				             int, const char *)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+extern void omp_clause_range_check_failed (const_tree, const char *, int,
+			       const char *, enum omp_clause_code,
+			       enum omp_clause_code)
+    ATTRIBUTE_NORETURN ATTRIBUTE_COLD;
+
+#else /* not ENABLE_TREE_CHECKING, or not gcc */
+
+#define CONTAINS_STRUCT_CHECK(T, ENUM)          (T)
+#define TREE_CHECK(T, CODE)			(T)
+#define TREE_NOT_CHECK(T, CODE)			(T)
+#define TREE_CHECK2(T, CODE1, CODE2)		(T)
+#define TREE_NOT_CHECK2(T, CODE1, CODE2)	(T)
+#define TREE_CHECK3(T, CODE1, CODE2, CODE3)	(T)
+#define TREE_NOT_CHECK3(T, CODE1, CODE2, CODE3)	(T)
+#define TREE_CHECK4(T, CODE1, CODE2, CODE3, CODE4) (T)
+#define TREE_NOT_CHECK4(T, CODE1, CODE2, CODE3, CODE4) (T)
+#define TREE_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) (T)
+#define TREE_NOT_CHECK5(T, CODE1, CODE2, CODE3, CODE4, CODE5) (T)
+#define TREE_CLASS_CHECK(T, CODE)		(T)
+#define TREE_RANGE_CHECK(T, CODE1, CODE2)	(T)
+#define EXPR_CHECK(T)				(T)
+#define NON_TYPE_CHECK(T)			(T)
+#define TREE_INT_CST_ELT_CHECK(T, I)		((T)->int_cst.val[I])
+#define TREE_VEC_ELT_CHECK(T, I)		((T)->vec.a[I])
+#define TREE_OPERAND_CHECK(T, I)		((T)->exp.operands[I])
+#define TREE_OPERAND_CHECK_CODE(T, CODE, I)	((T)->exp.operands[I])
+#define OMP_CLAUSE_ELT_CHECK(T, i)	        ((T)->omp_clause.ops[i])
+#define OMP_CLAUSE_RANGE_CHECK(T, CODE1, CODE2)	(T)
+#define OMP_CLAUSE_SUBCODE_CHECK(T, CODE)	(T)
+#define ANY_INTEGRAL_TYPE_CHECK(T)		(T)
+
+#define TREE_CHAIN(NODE) ((NODE)->common.chain)
+#define TREE_TYPE(NODE) ((NODE)->typed.type)
+
+#endif
+
+#define TREE_BLOCK(NODE)		(tree_block (NODE))
+#define TREE_SET_BLOCK(T, B)		(tree_set_block ((T), (B)))
+
+#include "tree-check.h"
+
+#define TYPE_CHECK(T)		TREE_CLASS_CHECK (T, tcc_type)
+#define DECL_MINIMAL_CHECK(T)   CONTAINS_STRUCT_CHECK (T, TS_DECL_MINIMAL)
+#define DECL_COMMON_CHECK(T)    CONTAINS_STRUCT_CHECK (T, TS_DECL_COMMON)
+#define DECL_WRTL_CHECK(T)      CONTAINS_STRUCT_CHECK (T, TS_DECL_WRTL)
+#define DECL_WITH_VIS_CHECK(T)  CONTAINS_STRUCT_CHECK (T, TS_DECL_WITH_VIS)
+#define DECL_NON_COMMON_CHECK(T) CONTAINS_STRUCT_CHECK (T, TS_DECL_NON_COMMON)
+#define CST_CHECK(T)		TREE_CLASS_CHECK (T, tcc_constant)
+#define STMT_CHECK(T)		TREE_CLASS_CHECK (T, tcc_statement)
+#define VL_EXP_CHECK(T)		TREE_CLASS_CHECK (T, tcc_vl_exp)
+#define FUNC_OR_METHOD_CHECK(T)	TREE_CHECK2 (T, FUNCTION_TYPE, METHOD_TYPE)
+#define PTR_OR_REF_CHECK(T)	TREE_CHECK2 (T, POINTER_TYPE, REFERENCE_TYPE)
+
+#define RECORD_OR_UNION_CHECK(T)	\
+  TREE_CHECK3 (T, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE)
+#define NOT_RECORD_OR_UNION_CHECK(T) \
+  TREE_NOT_CHECK3 (T, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE)
+
+#define NUMERICAL_TYPE_CHECK(T)					\
+  TREE_CHECK5 (T, INTEGER_TYPE, ENUMERAL_TYPE, BOOLEAN_TYPE, REAL_TYPE,	\
+	       FIXED_POINT_TYPE)
+
+/* Here is how primitive or already-canonicalized types' hash codes
+   are made.  */
+#define TYPE_HASH(TYPE) (TYPE_UID (TYPE))
+
+/* A simple hash function for an arbitrary tree node.  This must not be
+   used in hash tables which are saved to a PCH.  */
+#define TREE_HASH(NODE) ((size_t) (NODE) & 0777777)
+
+/* Tests if CODE is a conversion expr (NOP_EXPR or CONVERT_EXPR).  */
+#define CONVERT_EXPR_CODE_P(CODE)				\
+  ((CODE) == NOP_EXPR || (CODE) == CONVERT_EXPR)
+
+/* Similarly, but accept an expression instead of a tree code.  */
+#define CONVERT_EXPR_P(EXP)	CONVERT_EXPR_CODE_P (TREE_CODE (EXP))
+
+/* Generate case for NOP_EXPR, CONVERT_EXPR.  */
+
+#define CASE_CONVERT						\
+  case NOP_EXPR:						\
+  case CONVERT_EXPR
+
+/* Given an expression as a tree, strip any conversion that generates
+   no instruction.  Accepts both tree and const_tree arguments since
+   we are not modifying the tree itself.  */
+
+#define STRIP_NOPS(EXP) \
+  (EXP) = tree_strip_nop_conversions (CONST_CAST_TREE (EXP))
+
+/* Like STRIP_NOPS, but don't let the signedness change either.  */
+
+#define STRIP_SIGN_NOPS(EXP) \
+  (EXP) = tree_strip_sign_nop_conversions (CONST_CAST_TREE (EXP))
+
+/* Like STRIP_NOPS, but don't alter the TREE_TYPE either.  */
+
+#define STRIP_TYPE_NOPS(EXP) \
+  while ((CONVERT_EXPR_P (EXP)					\
+	  || TREE_CODE (EXP) == NON_LVALUE_EXPR)		\
+	 && TREE_OPERAND (EXP, 0) != error_mark_node		\
+	 && (TREE_TYPE (EXP)					\
+	     == TREE_TYPE (TREE_OPERAND (EXP, 0))))		\
+    (EXP) = TREE_OPERAND (EXP, 0)
+
+/* Remove unnecessary type conversions according to
+   tree_ssa_useless_type_conversion.  */
+
+#define STRIP_USELESS_TYPE_CONVERSION(EXP) \
+  (EXP) = tree_ssa_strip_useless_type_conversions (EXP)
+
+/* Remove any VIEW_CONVERT_EXPR or NON_LVALUE_EXPR that's purely
+   in use to provide a location_t.  */
+
+#define STRIP_ANY_LOCATION_WRAPPER(EXP) \
+  (EXP) = tree_strip_any_location_wrapper (CONST_CAST_TREE (EXP))
+
+/* Nonzero if TYPE represents a vector type.  */
+
+#define VECTOR_TYPE_P(TYPE) (TREE_CODE (TYPE) == VECTOR_TYPE)
+
+/* Nonzero if TYPE represents a vector of booleans.  */
+
+#define VECTOR_BOOLEAN_TYPE_P(TYPE)				\
+  (TREE_CODE (TYPE) == VECTOR_TYPE			\
+   && TREE_CODE (TREE_TYPE (TYPE)) == BOOLEAN_TYPE)
+
+/* Nonzero if TYPE represents an integral type.  Note that we do not
+   include COMPLEX types here.  Keep these checks in ascending code
+   order.  */
+
+#define INTEGRAL_TYPE_P(TYPE)  \
+  (TREE_CODE (TYPE) == ENUMERAL_TYPE  \
+   || TREE_CODE (TYPE) == BOOLEAN_TYPE \
+   || TREE_CODE (TYPE) == INTEGER_TYPE)
+
+/* Nonzero if TYPE represents an integral type, including complex
+   and vector integer types.  */
+
+#define ANY_INTEGRAL_TYPE_P(TYPE)		\
+  (INTEGRAL_TYPE_P (TYPE)			\
+   || ((TREE_CODE (TYPE) == COMPLEX_TYPE 	\
+        || VECTOR_TYPE_P (TYPE))		\
+       && INTEGRAL_TYPE_P (TREE_TYPE (TYPE))))
+
+/* Nonzero if TYPE represents a non-saturating fixed-point type.  */
+
+#define NON_SAT_FIXED_POINT_TYPE_P(TYPE) \
+  (TREE_CODE (TYPE) == FIXED_POINT_TYPE && !TYPE_SATURATING (TYPE))
+
+/* Nonzero if TYPE represents a saturating fixed-point type.  */
+
+#define SAT_FIXED_POINT_TYPE_P(TYPE) \
+  (TREE_CODE (TYPE) == FIXED_POINT_TYPE && TYPE_SATURATING (TYPE))
+
+/* Nonzero if TYPE represents a fixed-point type.  */
+
+#define FIXED_POINT_TYPE_P(TYPE)	(TREE_CODE (TYPE) == FIXED_POINT_TYPE)
+
+/* Nonzero if TYPE represents a scalar floating-point type.  */
+
+#define SCALAR_FLOAT_TYPE_P(TYPE) (TREE_CODE (TYPE) == REAL_TYPE)
+
+/* Nonzero if TYPE represents a complex floating-point type.  */
+
+#define COMPLEX_FLOAT_TYPE_P(TYPE)	\
+  (TREE_CODE (TYPE) == COMPLEX_TYPE	\
+   && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE)
+
+/* Nonzero if TYPE represents a vector integer type.  */
+                
+#define VECTOR_INTEGER_TYPE_P(TYPE)			\
+  (VECTOR_TYPE_P (TYPE)					\
+   && TREE_CODE (TREE_TYPE (TYPE)) == INTEGER_TYPE)
+
+
+/* Nonzero if TYPE represents a vector floating-point type.  */
+
+#define VECTOR_FLOAT_TYPE_P(TYPE)	\
+  (VECTOR_TYPE_P (TYPE)			\
+   && TREE_CODE (TREE_TYPE (TYPE)) == REAL_TYPE)
+
+/* Nonzero if TYPE represents a floating-point type, including complex
+   and vector floating-point types.  The vector and complex check does
+   not use the previous two macros to enable early folding.  */
+
+#define FLOAT_TYPE_P(TYPE)			\
+  (SCALAR_FLOAT_TYPE_P (TYPE)			\
+   || ((TREE_CODE (TYPE) == COMPLEX_TYPE 	\
+        || VECTOR_TYPE_P (TYPE))		\
+       && SCALAR_FLOAT_TYPE_P (TREE_TYPE (TYPE))))
+
+/* Nonzero if TYPE represents a decimal floating-point type.  */
+#define DECIMAL_FLOAT_TYPE_P(TYPE)		\
+  (SCALAR_FLOAT_TYPE_P (TYPE)			\
+   && DECIMAL_FLOAT_MODE_P (TYPE_MODE (TYPE)))
+
+/* Nonzero if TYPE is a record or union type.  */
+#define RECORD_OR_UNION_TYPE_P(TYPE)		\
+  (TREE_CODE (TYPE) == RECORD_TYPE		\
+   || TREE_CODE (TYPE) == UNION_TYPE		\
+   || TREE_CODE (TYPE) == QUAL_UNION_TYPE)
+
+/* Nonzero if TYPE represents an aggregate (multi-component) type.
+   Keep these checks in ascending code order.  */
+
+#define AGGREGATE_TYPE_P(TYPE) \
+  (TREE_CODE (TYPE) == ARRAY_TYPE || RECORD_OR_UNION_TYPE_P (TYPE))
+
+/* Nonzero if TYPE represents a pointer or reference type.
+   (It should be renamed to INDIRECT_TYPE_P.)  Keep these checks in
+   ascending code order.  */
+
+#define POINTER_TYPE_P(TYPE) \
+  (TREE_CODE (TYPE) == POINTER_TYPE || TREE_CODE (TYPE) == REFERENCE_TYPE)
+
+/* Nonzero if TYPE represents a pointer to function.  */
+#define FUNCTION_POINTER_TYPE_P(TYPE) \
+  (POINTER_TYPE_P (TYPE) && TREE_CODE (TREE_TYPE (TYPE)) == FUNCTION_TYPE)
+
+/* Nonzero if this type is a complete type.  */
+#define COMPLETE_TYPE_P(NODE) (TYPE_SIZE (NODE) != NULL_TREE)
+
+/* Nonzero if this type is the (possibly qualified) void type.  */
+#define VOID_TYPE_P(NODE) (TREE_CODE (NODE) == VOID_TYPE)
+
+/* Nonzero if this type is complete or is cv void.  */
+#define COMPLETE_OR_VOID_TYPE_P(NODE) \
+  (COMPLETE_TYPE_P (NODE) || VOID_TYPE_P (NODE))
+
+/* Nonzero if this type is complete or is an array with unspecified bound.  */
+#define COMPLETE_OR_UNBOUND_ARRAY_TYPE_P(NODE) \
+  (COMPLETE_TYPE_P (TREE_CODE (NODE) == ARRAY_TYPE ? TREE_TYPE (NODE) : (NODE)))
+
+#define FUNC_OR_METHOD_TYPE_P(NODE) \
+  (TREE_CODE (NODE) == FUNCTION_TYPE || TREE_CODE (NODE) == METHOD_TYPE)
+
+/* Define many boolean fields that all tree nodes have.  */
+
+/* In VAR_DECL, PARM_DECL and RESULT_DECL nodes, nonzero means address
+   of this is needed.  So it cannot be in a register.
+   In a FUNCTION_DECL it has no meaning.
+   In LABEL_DECL nodes, it means a goto for this label has been seen
+   from a place outside all binding contours that restore stack levels.
+   In an artificial SSA_NAME that points to a stack partition with at least
+   two variables, it means that at least one variable has TREE_ADDRESSABLE.
+   In ..._TYPE nodes, it means that objects of this type must be fully
+   addressable.  This means that pieces of this object cannot go into
+   register parameters, for example.  If this a function type, this
+   means that the value must be returned in memory.
+   In CONSTRUCTOR nodes, it means object constructed must be in memory.
+   In IDENTIFIER_NODEs, this means that some extern decl for this name
+   had its address taken.  That matters for inline functions.
+   In a STMT_EXPR, it means we want the result of the enclosed expression.  */
+#define TREE_ADDRESSABLE(NODE) ((NODE)->base.addressable_flag)
+
+/* Set on a CALL_EXPR if the call is in a tail position, ie. just before the
+   exit of a function.  Calls for which this is true are candidates for tail
+   call optimizations.  */
+#define CALL_EXPR_TAILCALL(NODE) \
+  (CALL_EXPR_CHECK (NODE)->base.addressable_flag)
+
+/* Set on a CALL_EXPR if the call has been marked as requiring tail call
+   optimization for correctness.  */
+#define CALL_EXPR_MUST_TAIL_CALL(NODE) \
+  (CALL_EXPR_CHECK (NODE)->base.static_flag)
+
+/* Used as a temporary field on a CASE_LABEL_EXPR to indicate that the
+   CASE_LOW operand has been processed.  */
+#define CASE_LOW_SEEN(NODE) \
+  (CASE_LABEL_EXPR_CHECK (NODE)->base.addressable_flag)
+
+#define PREDICT_EXPR_OUTCOME(NODE) \
+  ((enum prediction) (PREDICT_EXPR_CHECK (NODE)->base.addressable_flag))
+#define SET_PREDICT_EXPR_OUTCOME(NODE, OUTCOME) \
+  (PREDICT_EXPR_CHECK (NODE)->base.addressable_flag = (int) OUTCOME)
+#define PREDICT_EXPR_PREDICTOR(NODE) \
+  ((enum br_predictor)tree_to_shwi (TREE_OPERAND (PREDICT_EXPR_CHECK (NODE), 0)))
+
+/* In a VAR_DECL, nonzero means allocate static storage.
+   In a FUNCTION_DECL, nonzero if function has been defined.
+   In a CONSTRUCTOR, nonzero means allocate static storage.  */
+#define TREE_STATIC(NODE) ((NODE)->base.static_flag)
+
+/* In an ADDR_EXPR, nonzero means do not use a trampoline.  */
+#define TREE_NO_TRAMPOLINE(NODE) (ADDR_EXPR_CHECK (NODE)->base.static_flag)
+
+/* In a TARGET_EXPR or WITH_CLEANUP_EXPR, means that the pertinent cleanup
+   should only be executed if an exception is thrown, not on normal exit
+   of its scope.  */
+#define CLEANUP_EH_ONLY(NODE) ((NODE)->base.static_flag)
+
+/* In a TRY_CATCH_EXPR, means that the handler should be considered a
+   separate cleanup in honor_protect_cleanup_actions.  */
+#define TRY_CATCH_IS_CLEANUP(NODE) \
+  (TRY_CATCH_EXPR_CHECK (NODE)->base.static_flag)
+
+/* Used as a temporary field on a CASE_LABEL_EXPR to indicate that the
+   CASE_HIGH operand has been processed.  */
+#define CASE_HIGH_SEEN(NODE) \
+  (CASE_LABEL_EXPR_CHECK (NODE)->base.static_flag)
+
+/* Used to mark scoped enums.  */
+#define ENUM_IS_SCOPED(NODE) (ENUMERAL_TYPE_CHECK (NODE)->base.static_flag)
+
+/* Determines whether an ENUMERAL_TYPE has defined the list of constants. */
+#define ENUM_IS_OPAQUE(NODE) (ENUMERAL_TYPE_CHECK (NODE)->base.private_flag)
+
+/* In an expr node (usually a conversion) this means the node was made
+   implicitly and should not lead to any sort of warning.  In a decl node,
+   warnings concerning the decl should be suppressed.  This is used at
+   least for used-before-set warnings, and it set after one warning is
+   emitted.  */
+#define TREE_NO_WARNING(NODE) ((NODE)->base.nowarning_flag)
+
+/* Nonzero if we should warn about the change in empty class parameter
+   passing ABI in this TU.  */
+#define TRANSLATION_UNIT_WARN_EMPTY_P(NODE) \
+  (TRANSLATION_UNIT_DECL_CHECK (NODE)->decl_common.decl_flag_0)
+
+/* Nonzero if this type is "empty" according to the particular psABI.  */
+#define TYPE_EMPTY_P(NODE) (TYPE_CHECK (NODE)->type_common.empty_flag)
+
+/* Used to indicate that this TYPE represents a compiler-generated entity.  */
+#define TYPE_ARTIFICIAL(NODE) (TYPE_CHECK (NODE)->base.nowarning_flag)
+
+/* In an IDENTIFIER_NODE, this means that assemble_name was called with
+   this string as an argument.  */
+#define TREE_SYMBOL_REFERENCED(NODE) \
+  (IDENTIFIER_NODE_CHECK (NODE)->base.static_flag)
+
+/* Nonzero in a pointer or reference type means the data pointed to
+   by this type can alias anything.  */
+#define TYPE_REF_CAN_ALIAS_ALL(NODE) \
+  (PTR_OR_REF_CHECK (NODE)->base.static_flag)
+
+/* In an INTEGER_CST, REAL_CST, COMPLEX_CST, or VECTOR_CST, this means
+   there was an overflow in folding.  */
+
+#define TREE_OVERFLOW(NODE) (CST_CHECK (NODE)->base.public_flag)
+
+/* TREE_OVERFLOW can only be true for EXPR of CONSTANT_CLASS_P.  */
+
+#define TREE_OVERFLOW_P(EXPR) \
+ (CONSTANT_CLASS_P (EXPR) && TREE_OVERFLOW (EXPR))
+
+/* In a VAR_DECL, FUNCTION_DECL, NAMESPACE_DECL or TYPE_DECL,
+   nonzero means name is to be accessible from outside this translation unit.
+   In an IDENTIFIER_NODE, nonzero means an external declaration
+   accessible from outside this translation unit was previously seen
+   for this name in an inner scope.  */
+#define TREE_PUBLIC(NODE) ((NODE)->base.public_flag)
+
+/* In a _TYPE, indicates whether TYPE_CACHED_VALUES contains a vector
+   of cached values, or is something else.  */
+#define TYPE_CACHED_VALUES_P(NODE) (TYPE_CHECK (NODE)->base.public_flag)
+
+/* In a SAVE_EXPR, indicates that the original expression has already
+   been substituted with a VAR_DECL that contains the value.  */
+#define SAVE_EXPR_RESOLVED_P(NODE) \
+  (SAVE_EXPR_CHECK (NODE)->base.public_flag)
+
+/* Set on a CALL_EXPR if this stdarg call should be passed the argument
+   pack.  */
+#define CALL_EXPR_VA_ARG_PACK(NODE) \
+  (CALL_EXPR_CHECK (NODE)->base.public_flag)
+
+/* In any expression, decl, or constant, nonzero means it has side effects or
+   reevaluation of the whole expression could produce a different value.
+   This is set if any subexpression is a function call, a side effect or a
+   reference to a volatile variable.  In a ..._DECL, this is set only if the
+   declaration said `volatile'.  This will never be set for a constant.  */
+#define TREE_SIDE_EFFECTS(NODE) \
+  (NON_TYPE_CHECK (NODE)->base.side_effects_flag)
+
+/* In a LABEL_DECL, nonzero means this label had its address taken
+   and therefore can never be deleted and is a jump target for
+   computed gotos.  */
+#define FORCED_LABEL(NODE) (LABEL_DECL_CHECK (NODE)->base.side_effects_flag)
+
+/* Whether a case or a user-defined label is allowed to fall through to.
+   This is used to implement -Wimplicit-fallthrough.  */
+#define FALLTHROUGH_LABEL_P(NODE) \
+  (LABEL_DECL_CHECK (NODE)->base.private_flag)
+
+/* Set on the artificial label created for break; stmt from a switch.
+   This is used to implement -Wimplicit-fallthrough.  */
+#define SWITCH_BREAK_LABEL_P(NODE) \
+  (LABEL_DECL_CHECK (NODE)->base.protected_flag)
+
+/* Nonzero means this expression is volatile in the C sense:
+   its address should be of type `volatile WHATEVER *'.
+   In other words, the declared item is volatile qualified.
+   This is used in _DECL nodes and _REF nodes.
+   On a FUNCTION_DECL node, this means the function does not
+   return normally.  This is the same effect as setting
+   the attribute noreturn on the function in C.
+
+   In a ..._TYPE node, means this type is volatile-qualified.
+   But use TYPE_VOLATILE instead of this macro when the node is a type,
+   because eventually we may make that a different bit.
+
+   If this bit is set in an expression, so is TREE_SIDE_EFFECTS.  */
+#define TREE_THIS_VOLATILE(NODE) ((NODE)->base.volatile_flag)
+
+/* Nonzero means this node will not trap.  In an INDIRECT_REF, means
+   accessing the memory pointed to won't generate a trap.  However,
+   this only applies to an object when used appropriately: it doesn't
+   mean that writing a READONLY mem won't trap.
+
+   In ARRAY_REF and ARRAY_RANGE_REF means that we know that the index
+   (or slice of the array) always belongs to the range of the array.
+   I.e. that the access will not trap, provided that the access to
+   the base to the array will not trap.  */
+#define TREE_THIS_NOTRAP(NODE) \
+  (TREE_CHECK5 (NODE, INDIRECT_REF, MEM_REF, TARGET_MEM_REF, ARRAY_REF,	\
+		ARRAY_RANGE_REF)->base.nothrow_flag)
+
+/* In a VAR_DECL, PARM_DECL or FIELD_DECL, or any kind of ..._REF node,
+   nonzero means it may not be the lhs of an assignment.
+   Nonzero in a FUNCTION_DECL means this function should be treated
+   as "const" function (can only read its arguments).  */
+#define TREE_READONLY(NODE) (NON_TYPE_CHECK (NODE)->base.readonly_flag)
+
+/* Value of expression is constant.  Always on in all ..._CST nodes.  May
+   also appear in an expression or decl where the value is constant.  */
+#define TREE_CONSTANT(NODE) (NON_TYPE_CHECK (NODE)->base.constant_flag)
+
+/* Nonzero if NODE, a type, has had its sizes gimplified.  */
+#define TYPE_SIZES_GIMPLIFIED(NODE) \
+  (TYPE_CHECK (NODE)->base.constant_flag)
+
+/* In a decl (most significantly a FIELD_DECL), means an unsigned field.  */
+#define DECL_UNSIGNED(NODE) \
+  (DECL_COMMON_CHECK (NODE)->base.u.bits.unsigned_flag)
+
+/* In integral and pointer types, means an unsigned type.  */
+#define TYPE_UNSIGNED(NODE) (TYPE_CHECK (NODE)->base.u.bits.unsigned_flag)
+
+/* Same as TYPE_UNSIGNED but converted to SIGNOP.  */
+#define TYPE_SIGN(NODE) ((signop) TYPE_UNSIGNED (NODE))
+
+/* True if overflow wraps around for the given integral or pointer type.  That
+   is, TYPE_MAX + 1 == TYPE_MIN.  */
+#define TYPE_OVERFLOW_WRAPS(TYPE) \
+  (POINTER_TYPE_P (TYPE)					\
+   ? flag_wrapv_pointer						\
+   : (ANY_INTEGRAL_TYPE_CHECK(TYPE)->base.u.bits.unsigned_flag	\
+      || flag_wrapv))
+
+/* True if overflow is undefined for the given integral or pointer type.
+   We may optimize on the assumption that values in the type never overflow.
+
+   IMPORTANT NOTE: Any optimization based on TYPE_OVERFLOW_UNDEFINED
+   must issue a warning based on warn_strict_overflow.  In some cases
+   it will be appropriate to issue the warning immediately, and in
+   other cases it will be appropriate to simply set a flag and let the
+   caller decide whether a warning is appropriate or not.  */
+#define TYPE_OVERFLOW_UNDEFINED(TYPE)				\
+  (POINTER_TYPE_P (TYPE)					\
+   ? !flag_wrapv_pointer					\
+   : (!ANY_INTEGRAL_TYPE_CHECK(TYPE)->base.u.bits.unsigned_flag	\
+      && !flag_wrapv && !flag_trapv))
+
+/* True if overflow for the given integral type should issue a
+   trap.  */
+#define TYPE_OVERFLOW_TRAPS(TYPE) \
+  (!ANY_INTEGRAL_TYPE_CHECK(TYPE)->base.u.bits.unsigned_flag && flag_trapv)
+
+/* True if an overflow is to be preserved for sanitization.  */
+#define TYPE_OVERFLOW_SANITIZED(TYPE)			\
+  (INTEGRAL_TYPE_P (TYPE)				\
+   && !TYPE_OVERFLOW_WRAPS (TYPE)			\
+   && (flag_sanitize & SANITIZE_SI_OVERFLOW))
+
+/* Nonzero in a VAR_DECL or STRING_CST means assembler code has been written.
+   Nonzero in a FUNCTION_DECL means that the function has been compiled.
+   This is interesting in an inline function, since it might not need
+   to be compiled separately.
+   Nonzero in a RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE, ENUMERAL_TYPE
+   or TYPE_DECL if the debugging info for the type has been written.
+   In a BLOCK node, nonzero if reorder_blocks has already seen this block.
+   In an SSA_NAME node, nonzero if the SSA_NAME occurs in an abnormal
+   PHI node.  */
+#define TREE_ASM_WRITTEN(NODE) ((NODE)->base.asm_written_flag)
+
+/* Nonzero in a _DECL if the name is used in its scope.
+   Nonzero in an expr node means inhibit warning if value is unused.
+   In IDENTIFIER_NODEs, this means that some extern decl for this name
+   was used.
+   In a BLOCK, this means that the block contains variables that are used.  */
+#define TREE_USED(NODE) ((NODE)->base.used_flag)
+
+/* In a FUNCTION_DECL, nonzero means a call to the function cannot
+   throw an exception.  In a CALL_EXPR, nonzero means the call cannot
+   throw.  We can't easily check the node type here as the C++
+   frontend also uses this flag (for AGGR_INIT_EXPR).  */
+#define TREE_NOTHROW(NODE) ((NODE)->base.nothrow_flag)
+
+/* In a CALL_EXPR, means that it's safe to use the target of the call
+   expansion as the return slot for a call that returns in memory.  */
+#define CALL_EXPR_RETURN_SLOT_OPT(NODE) \
+  (CALL_EXPR_CHECK (NODE)->base.private_flag)
+
+/* In a RESULT_DECL, PARM_DECL and VAR_DECL, means that it is
+   passed by invisible reference (and the TREE_TYPE is a pointer to the true
+   type).  */
+#define DECL_BY_REFERENCE(NODE) \
+  (TREE_CHECK3 (NODE, VAR_DECL, PARM_DECL, \
+		RESULT_DECL)->decl_common.decl_by_reference_flag)
+
+/* In VAR_DECL and PARM_DECL, set when the decl has been used except for
+   being set.  */
+#define DECL_READ_P(NODE) \
+  (TREE_CHECK2 (NODE, VAR_DECL, PARM_DECL)->decl_common.decl_read_flag)
+
+/* In VAR_DECL or RESULT_DECL, set when significant code movement precludes
+   attempting to share the stack slot with some other variable.  */
+#define DECL_NONSHAREABLE(NODE) \
+  (TREE_CHECK2 (NODE, VAR_DECL, \
+		RESULT_DECL)->decl_common.decl_nonshareable_flag)
+
+/* In a CALL_EXPR, means that the call is the jump from a thunk to the
+   thunked-to function.  */
+#define CALL_FROM_THUNK_P(NODE) (CALL_EXPR_CHECK (NODE)->base.protected_flag)
+
+/* In a CALL_EXPR, if the function being called is BUILT_IN_ALLOCA, means that
+   it has been built for the declaration of a variable-sized object.  */
+#define CALL_ALLOCA_FOR_VAR_P(NODE) \
+  (CALL_EXPR_CHECK (NODE)->base.protected_flag)
+
+/* Used in classes in C++.  */
+#define TREE_PRIVATE(NODE) ((NODE)->base.private_flag)
+/* Used in classes in C++. */
+#define TREE_PROTECTED(NODE) ((NODE)->base.protected_flag)
+
+/* True if reference type NODE is a C++ rvalue reference.  */
+#define TYPE_REF_IS_RVALUE(NODE) \
+  (REFERENCE_TYPE_CHECK (NODE)->base.private_flag)
+
+/* Nonzero in a _DECL if the use of the name is defined as a
+   deprecated feature by __attribute__((deprecated)).  */
+#define TREE_DEPRECATED(NODE) \
+  ((NODE)->base.deprecated_flag)
+
+/* Nonzero in an IDENTIFIER_NODE if the name is a local alias, whose
+   uses are to be substituted for uses of the TREE_CHAINed identifier.  */
+#define IDENTIFIER_TRANSPARENT_ALIAS(NODE) \
+  (IDENTIFIER_NODE_CHECK (NODE)->base.deprecated_flag)
+
+/* In an aggregate type, indicates that the scalar fields of the type are
+   stored in reverse order from the target order.  This effectively
+   toggles BYTES_BIG_ENDIAN and WORDS_BIG_ENDIAN within the type.  */
+#define TYPE_REVERSE_STORAGE_ORDER(NODE) \
+  (TREE_CHECK4 (NODE, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE, ARRAY_TYPE)->base.u.bits.saturating_flag)
+
+/* In a non-aggregate type, indicates a saturating type.  */
+#define TYPE_SATURATING(NODE) \
+  (TREE_NOT_CHECK4 (NODE, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE, ARRAY_TYPE)->base.u.bits.saturating_flag)
+
+/* In a BIT_FIELD_REF and MEM_REF, indicates that the reference is to a group
+   of bits stored in reverse order from the target order.  This effectively
+   toggles both BYTES_BIG_ENDIAN and WORDS_BIG_ENDIAN for the reference.
+
+   The overall strategy is to preserve the invariant that every scalar in
+   memory is associated with a single storage order, i.e. all accesses to
+   this scalar are done with the same storage order.  This invariant makes
+   it possible to factor out the storage order in most transformations, as
+   only the address and/or the value (in target order) matter for them.
+   But, of course, the storage order must be preserved when the accesses
+   themselves are rewritten or transformed.  */
+#define REF_REVERSE_STORAGE_ORDER(NODE) \
+  (TREE_CHECK2 (NODE, BIT_FIELD_REF, MEM_REF)->base.default_def_flag)
+
+  /* In an ADDR_EXPR, indicates that this is a pointer to nested function
+   represented by a descriptor instead of a trampoline.  */
+#define FUNC_ADDR_BY_DESCRIPTOR(NODE) \
+  (TREE_CHECK (NODE, ADDR_EXPR)->base.default_def_flag)
+
+/* In a CALL_EXPR, indicates that this is an indirect call for which
+   pointers to nested function are descriptors instead of trampolines.  */
+#define CALL_EXPR_BY_DESCRIPTOR(NODE) \
+  (TREE_CHECK (NODE, CALL_EXPR)->base.default_def_flag)
+
+/* These flags are available for each language front end to use internally.  */
+#define TREE_LANG_FLAG_0(NODE) \
+  (TREE_NOT_CHECK2 (NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_0)
+#define TREE_LANG_FLAG_1(NODE) \
+  (TREE_NOT_CHECK2 (NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_1)
+#define TREE_LANG_FLAG_2(NODE) \
+  (TREE_NOT_CHECK2 (NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_2)
+#define TREE_LANG_FLAG_3(NODE) \
+  (TREE_NOT_CHECK2 (NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_3)
+#define TREE_LANG_FLAG_4(NODE) \
+  (TREE_NOT_CHECK2 (NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_4)
+#define TREE_LANG_FLAG_5(NODE) \
+  (TREE_NOT_CHECK2 (NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_5)
+#define TREE_LANG_FLAG_6(NODE) \
+  (TREE_NOT_CHECK2 (NODE, TREE_VEC, SSA_NAME)->base.u.bits.lang_flag_6)
+
+/* Define additional fields and accessors for nodes representing constants.  */
+
+#define TREE_INT_CST_NUNITS(NODE) \
+  (INTEGER_CST_CHECK (NODE)->base.u.int_length.unextended)
+#define TREE_INT_CST_EXT_NUNITS(NODE) \
+  (INTEGER_CST_CHECK (NODE)->base.u.int_length.extended)
+#define TREE_INT_CST_OFFSET_NUNITS(NODE) \
+  (INTEGER_CST_CHECK (NODE)->base.u.int_length.offset)
+#define TREE_INT_CST_ELT(NODE, I) TREE_INT_CST_ELT_CHECK (NODE, I)
+#define TREE_INT_CST_LOW(NODE) \
+  ((unsigned HOST_WIDE_INT) TREE_INT_CST_ELT (NODE, 0))
+
+/* Return true if NODE is a POLY_INT_CST.  This is only ever true on
+   targets with variable-sized modes.  */
+#define POLY_INT_CST_P(NODE) \
+  (NUM_POLY_INT_COEFFS > 1 && TREE_CODE (NODE) == POLY_INT_CST)
+
+/* In a POLY_INT_CST node.  */
+#define POLY_INT_CST_COEFF(NODE, I) \
+  (POLY_INT_CST_CHECK (NODE)->poly_int_cst.coeffs[I])
+
+#define TREE_REAL_CST_PTR(NODE) (REAL_CST_CHECK (NODE)->real_cst.real_cst_ptr)
+#define TREE_REAL_CST(NODE) (*TREE_REAL_CST_PTR (NODE))
+
+#define TREE_FIXED_CST_PTR(NODE) \
+  (FIXED_CST_CHECK (NODE)->fixed_cst.fixed_cst_ptr)
+#define TREE_FIXED_CST(NODE) (*TREE_FIXED_CST_PTR (NODE))
+
+/* In a STRING_CST */
+/* In C terms, this is sizeof, not strlen.  */
+#define TREE_STRING_LENGTH(NODE) (STRING_CST_CHECK (NODE)->string.length)
+#define TREE_STRING_POINTER(NODE) \
+  ((const char *)(STRING_CST_CHECK (NODE)->string.str))
+
+/* In a COMPLEX_CST node.  */
+#define TREE_REALPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.real)
+#define TREE_IMAGPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.imag)
+
+/* In a VECTOR_CST node.  See generic.texi for details.  */
+#define VECTOR_CST_NELTS(NODE) (TYPE_VECTOR_SUBPARTS (TREE_TYPE (NODE)))
+#define VECTOR_CST_ELT(NODE,IDX) vector_cst_elt (NODE, IDX)
+
+#define VECTOR_CST_LOG2_NPATTERNS(NODE) \
+  (VECTOR_CST_CHECK (NODE)->base.u.vector_cst.log2_npatterns)
+#define VECTOR_CST_NPATTERNS(NODE) \
+  (1U << VECTOR_CST_LOG2_NPATTERNS (NODE))
+#define VECTOR_CST_NELTS_PER_PATTERN(NODE) \
+  (VECTOR_CST_CHECK (NODE)->base.u.vector_cst.nelts_per_pattern)
+#define VECTOR_CST_DUPLICATE_P(NODE) \
+  (VECTOR_CST_NELTS_PER_PATTERN (NODE) == 1)
+#define VECTOR_CST_STEPPED_P(NODE) \
+  (VECTOR_CST_NELTS_PER_PATTERN (NODE) == 3)
+#define VECTOR_CST_ENCODED_ELTS(NODE) \
+  (VECTOR_CST_CHECK (NODE)->vector.elts)
+#define VECTOR_CST_ENCODED_ELT(NODE, ELT) \
+  (VECTOR_CST_CHECK (NODE)->vector.elts[ELT])
+
+/* Define fields and accessors for some special-purpose tree nodes.  */
+
+#define IDENTIFIER_LENGTH(NODE) \
+  (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.len)
+#define IDENTIFIER_POINTER(NODE) \
+  ((const char *) IDENTIFIER_NODE_CHECK (NODE)->identifier.id.str)
+#define IDENTIFIER_HASH_VALUE(NODE) \
+  (IDENTIFIER_NODE_CHECK (NODE)->identifier.id.hash_value)
+
+/* Translate a hash table identifier pointer to a tree_identifier
+   pointer, and vice versa.  */
+
+#define HT_IDENT_TO_GCC_IDENT(NODE) \
+  ((tree) ((char *) (NODE) - sizeof (struct tree_common)))
+#define GCC_IDENT_TO_HT_IDENT(NODE) (&((struct tree_identifier *) (NODE))->id)
+
+/* In a TREE_LIST node.  */
+#define TREE_PURPOSE(NODE) (TREE_LIST_CHECK (NODE)->list.purpose)
+#define TREE_VALUE(NODE) (TREE_LIST_CHECK (NODE)->list.value)
+
+/* In a TREE_VEC node.  */
+#define TREE_VEC_LENGTH(NODE) (TREE_VEC_CHECK (NODE)->base.u.length)
+#define TREE_VEC_END(NODE) \
+  ((void) TREE_VEC_CHECK (NODE), &((NODE)->vec.a[(NODE)->vec.base.u.length]))
+
+#define TREE_VEC_ELT(NODE,I) TREE_VEC_ELT_CHECK (NODE, I)
+
+/* In a CONSTRUCTOR node.  */
+#define CONSTRUCTOR_ELTS(NODE) (CONSTRUCTOR_CHECK (NODE)->constructor.elts)
+#define CONSTRUCTOR_ELT(NODE,IDX) \
+  (&(*CONSTRUCTOR_ELTS (NODE))[IDX])
+#define CONSTRUCTOR_NELTS(NODE) \
+  (vec_safe_length (CONSTRUCTOR_ELTS (NODE)))
+#define CONSTRUCTOR_NO_CLEARING(NODE) \
+  (CONSTRUCTOR_CHECK (NODE)->base.public_flag)
+
+/* Iterate through the vector V of CONSTRUCTOR_ELT elements, yielding the
+   value of each element (stored within VAL). IX must be a scratch variable
+   of unsigned integer type.  */
+#define FOR_EACH_CONSTRUCTOR_VALUE(V, IX, VAL) \
+  for (IX = 0; (IX >= vec_safe_length (V)) \
+	       ? false \
+	       : ((VAL = (*(V))[IX].value), \
+	       true); \
+       (IX)++)
+
+/* Iterate through the vector V of CONSTRUCTOR_ELT elements, yielding both
+   the value of each element (stored within VAL) and its index (stored
+   within INDEX). IX must be a scratch variable of unsigned integer type.  */
+#define FOR_EACH_CONSTRUCTOR_ELT(V, IX, INDEX, VAL) \
+  for (IX = 0; (IX >= vec_safe_length (V)) \
+	       ? false \
+	       : (((void) (VAL = (*V)[IX].value)), \
+		  (INDEX = (*V)[IX].index), \
+		  true); \
+       (IX)++)
+
+/* Append a new constructor element to V, with the specified INDEX and VAL.  */
+#define CONSTRUCTOR_APPEND_ELT(V, INDEX, VALUE) \
+  do { \
+    constructor_elt _ce___ = {INDEX, VALUE}; \
+    vec_safe_push ((V), _ce___); \
+  } while (0)
+
+/* True if NODE, a FIELD_DECL, is to be processed as a bitfield for
+   constructor output purposes.  */
+#define CONSTRUCTOR_BITFIELD_P(NODE) \
+  (DECL_BIT_FIELD (FIELD_DECL_CHECK (NODE)) && DECL_MODE (NODE) != BLKmode)
+
+/* True if NODE is a clobber right hand side, an expression of indeterminate
+   value that clobbers the LHS in a copy instruction.  We use a volatile
+   empty CONSTRUCTOR for this, as it matches most of the necessary semantic.
+   In particular the volatile flag causes us to not prematurely remove
+   such clobber instructions.  */
+#define TREE_CLOBBER_P(NODE) \
+  (TREE_CODE (NODE) == CONSTRUCTOR && TREE_THIS_VOLATILE (NODE))
+
+/* Define fields and accessors for some nodes that represent expressions.  */
+
+/* Nonzero if NODE is an empty statement (NOP_EXPR <0>).  */
+#define IS_EMPTY_STMT(NODE)	(TREE_CODE (NODE) == NOP_EXPR \
+				 && VOID_TYPE_P (TREE_TYPE (NODE)) \
+				 && integer_zerop (TREE_OPERAND (NODE, 0)))
+
+/* In ordinary expression nodes.  */
+#define TREE_OPERAND_LENGTH(NODE) tree_operand_length (NODE)
+#define TREE_OPERAND(NODE, I) TREE_OPERAND_CHECK (NODE, I)
+
+/* In a tcc_vl_exp node, operand 0 is an INT_CST node holding the operand
+   length.  Its value includes the length operand itself; that is,
+   the minimum valid length is 1.
+   Note that we have to bypass the use of TREE_OPERAND to access
+   that field to avoid infinite recursion in expanding the macros.  */
+#define VL_EXP_OPERAND_LENGTH(NODE) \
+  ((int)TREE_INT_CST_LOW (VL_EXP_CHECK (NODE)->exp.operands[0]))
+
+/* Nonzero if gimple_debug_nonbind_marker_p() may possibly hold.  */
+#define MAY_HAVE_DEBUG_MARKER_STMTS debug_nonbind_markers_p
+/* Nonzero if gimple_debug_bind_p() (and thus
+   gimple_debug_source_bind_p()) may possibly hold.  */
+#define MAY_HAVE_DEBUG_BIND_STMTS flag_var_tracking_assignments
+/* Nonzero if is_gimple_debug() may possibly hold.  */
+#define MAY_HAVE_DEBUG_STMTS					\
+  (MAY_HAVE_DEBUG_MARKER_STMTS || MAY_HAVE_DEBUG_BIND_STMTS)
+
+/* In a LOOP_EXPR node.  */
+#define LOOP_EXPR_BODY(NODE) TREE_OPERAND_CHECK_CODE (NODE, LOOP_EXPR, 0)
+
+/* The source location of this expression.  Non-tree_exp nodes such as
+   decls and constants can be shared among multiple locations, so
+   return nothing.  */
+#define EXPR_LOCATION(NODE) \
+  (CAN_HAVE_LOCATION_P ((NODE)) ? (NODE)->exp.locus : UNKNOWN_LOCATION)
+#define SET_EXPR_LOCATION(NODE, LOCUS) EXPR_CHECK ((NODE))->exp.locus = (LOCUS)
+#define EXPR_HAS_LOCATION(NODE) (LOCATION_LOCUS (EXPR_LOCATION (NODE))	\
+  != UNKNOWN_LOCATION)
+/* The location to be used in a diagnostic about this expression.  Do not
+   use this macro if the location will be assigned to other expressions.  */
+#define EXPR_LOC_OR_LOC(NODE, LOCUS) (EXPR_HAS_LOCATION (NODE) \
+				      ? (NODE)->exp.locus : (LOCUS))
+#define EXPR_FILENAME(NODE) LOCATION_FILE (EXPR_CHECK ((NODE))->exp.locus)
+#define EXPR_LINENO(NODE) LOCATION_LINE (EXPR_CHECK (NODE)->exp.locus)
+
+#define CAN_HAVE_RANGE_P(NODE) (CAN_HAVE_LOCATION_P (NODE))
+#define EXPR_LOCATION_RANGE(NODE) (get_expr_source_range (EXPR_CHECK ((NODE))))
+
+#define EXPR_HAS_RANGE(NODE) \
+    (CAN_HAVE_RANGE_P (NODE) \
+     ? EXPR_LOCATION_RANGE (NODE).m_start != UNKNOWN_LOCATION \
+     : false)
+
+/* True if a tree is an expression or statement that can have a
+   location.  */
+#define CAN_HAVE_LOCATION_P(NODE) ((NODE) && EXPR_P (NODE))
+
+static inline source_range
+get_expr_source_range (tree expr)
+{
+  location_t loc = EXPR_LOCATION (expr);
+  return get_range_from_loc (line_table, loc);
+}
+
+extern void protected_set_expr_location (tree, location_t);
+
+extern tree maybe_wrap_with_location (tree, location_t);
+
+extern int suppress_location_wrappers;
+
+/* A class for suppressing the creation of location wrappers.
+   Location wrappers will not be created during the lifetime
+   of an instance of this class.  */
+
+class auto_suppress_location_wrappers
+{
+ public:
+  auto_suppress_location_wrappers () { ++suppress_location_wrappers; }
+  ~auto_suppress_location_wrappers () { --suppress_location_wrappers; }
+};
+
+/* In a TARGET_EXPR node.  */
+#define TARGET_EXPR_SLOT(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 0)
+#define TARGET_EXPR_INITIAL(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 1)
+#define TARGET_EXPR_CLEANUP(NODE) TREE_OPERAND_CHECK_CODE (NODE, TARGET_EXPR, 2)
+/* Don't elide the initialization of TARGET_EXPR_SLOT for this TARGET_EXPR
+   on rhs of MODIFY_EXPR.  */
+#define TARGET_EXPR_NO_ELIDE(NODE) (TARGET_EXPR_CHECK (NODE)->base.private_flag)
+
+/* DECL_EXPR accessor. This gives access to the DECL associated with
+   the given declaration statement.  */
+#define DECL_EXPR_DECL(NODE)    TREE_OPERAND (DECL_EXPR_CHECK (NODE), 0)
+
+#define EXIT_EXPR_COND(NODE)	     TREE_OPERAND (EXIT_EXPR_CHECK (NODE), 0)
+
+/* COMPOUND_LITERAL_EXPR accessors.  */
+#define COMPOUND_LITERAL_EXPR_DECL_EXPR(NODE)		\
+  TREE_OPERAND (COMPOUND_LITERAL_EXPR_CHECK (NODE), 0)
+#define COMPOUND_LITERAL_EXPR_DECL(NODE)			\
+  DECL_EXPR_DECL (COMPOUND_LITERAL_EXPR_DECL_EXPR (NODE))
+
+/* SWITCH_EXPR accessors. These give access to the condition and body.  */
+#define SWITCH_COND(NODE)       TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 0)
+#define SWITCH_BODY(NODE)       TREE_OPERAND (SWITCH_EXPR_CHECK (NODE), 1)
+/* True if there are case labels for all possible values of SWITCH_COND, either
+   because there is a default: case label or because the case label ranges cover
+   all values.  */
+#define SWITCH_ALL_CASES_P(NODE) (SWITCH_EXPR_CHECK (NODE)->base.private_flag)
+
+/* CASE_LABEL_EXPR accessors. These give access to the high and low values
+   of a case label, respectively.  */
+#define CASE_LOW(NODE)          	TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 0)
+#define CASE_HIGH(NODE)         	TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 1)
+#define CASE_LABEL(NODE)		TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 2)
+#define CASE_CHAIN(NODE)		TREE_OPERAND (CASE_LABEL_EXPR_CHECK (NODE), 3)
+
+/* The operands of a TARGET_MEM_REF.  Operands 0 and 1 have to match
+   corresponding MEM_REF operands.  */
+#define TMR_BASE(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 0))
+#define TMR_OFFSET(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 1))
+#define TMR_INDEX(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 2))
+#define TMR_STEP(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 3))
+#define TMR_INDEX2(NODE) (TREE_OPERAND (TARGET_MEM_REF_CHECK (NODE), 4))
+
+#define MR_DEPENDENCE_CLIQUE(NODE) \
+  (TREE_CHECK2 (NODE, MEM_REF, TARGET_MEM_REF)->base.u.dependence_info.clique)
+#define MR_DEPENDENCE_BASE(NODE) \
+  (TREE_CHECK2 (NODE, MEM_REF, TARGET_MEM_REF)->base.u.dependence_info.base)
+
+/* The operands of a BIND_EXPR.  */
+#define BIND_EXPR_VARS(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 0))
+#define BIND_EXPR_BODY(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 1))
+#define BIND_EXPR_BLOCK(NODE) (TREE_OPERAND (BIND_EXPR_CHECK (NODE), 2))
+
+/* GOTO_EXPR accessor. This gives access to the label associated with
+   a goto statement.  */
+#define GOTO_DESTINATION(NODE)  TREE_OPERAND (GOTO_EXPR_CHECK (NODE), 0)
+
+/* ASM_EXPR accessors. ASM_STRING returns a STRING_CST for the
+   instruction (e.g., "mov x, y"). ASM_OUTPUTS, ASM_INPUTS, and
+   ASM_CLOBBERS represent the outputs, inputs, and clobbers for the
+   statement.  */
+#define ASM_STRING(NODE)        TREE_OPERAND (ASM_EXPR_CHECK (NODE), 0)
+#define ASM_OUTPUTS(NODE)       TREE_OPERAND (ASM_EXPR_CHECK (NODE), 1)
+#define ASM_INPUTS(NODE)        TREE_OPERAND (ASM_EXPR_CHECK (NODE), 2)
+#define ASM_CLOBBERS(NODE)      TREE_OPERAND (ASM_EXPR_CHECK (NODE), 3)
+#define ASM_LABELS(NODE)	TREE_OPERAND (ASM_EXPR_CHECK (NODE), 4)
+/* Nonzero if we want to create an ASM_INPUT instead of an
+   ASM_OPERAND with no operands.  */
+#define ASM_INPUT_P(NODE) (ASM_EXPR_CHECK (NODE)->base.static_flag)
+#define ASM_VOLATILE_P(NODE) (ASM_EXPR_CHECK (NODE)->base.public_flag)
+/* Nonzero if we want to consider this asm as minimum length and cost
+   for inlining decisions.  */
+#define ASM_INLINE_P(NODE) (ASM_EXPR_CHECK (NODE)->base.protected_flag)
+
+/* COND_EXPR accessors.  */
+#define COND_EXPR_COND(NODE)	(TREE_OPERAND (COND_EXPR_CHECK (NODE), 0))
+#define COND_EXPR_THEN(NODE)	(TREE_OPERAND (COND_EXPR_CHECK (NODE), 1))
+#define COND_EXPR_ELSE(NODE)	(TREE_OPERAND (COND_EXPR_CHECK (NODE), 2))
+
+/* Accessors for the chains of recurrences.  */
+#define CHREC_LEFT(NODE)          TREE_OPERAND (POLYNOMIAL_CHREC_CHECK (NODE), 0)
+#define CHREC_RIGHT(NODE)         TREE_OPERAND (POLYNOMIAL_CHREC_CHECK (NODE), 1)
+#define CHREC_VARIABLE(NODE)      POLYNOMIAL_CHREC_CHECK (NODE)->base.u.chrec_var
+
+/* LABEL_EXPR accessor. This gives access to the label associated with
+   the given label expression.  */
+#define LABEL_EXPR_LABEL(NODE)  TREE_OPERAND (LABEL_EXPR_CHECK (NODE), 0)
+
+/* CATCH_EXPR accessors.  */
+#define CATCH_TYPES(NODE)	TREE_OPERAND (CATCH_EXPR_CHECK (NODE), 0)
+#define CATCH_BODY(NODE)	TREE_OPERAND (CATCH_EXPR_CHECK (NODE), 1)
+
+/* EH_FILTER_EXPR accessors.  */
+#define EH_FILTER_TYPES(NODE)	TREE_OPERAND (EH_FILTER_EXPR_CHECK (NODE), 0)
+#define EH_FILTER_FAILURE(NODE)	TREE_OPERAND (EH_FILTER_EXPR_CHECK (NODE), 1)
+
+/* OBJ_TYPE_REF accessors.  */
+#define OBJ_TYPE_REF_EXPR(NODE)	  TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 0)
+#define OBJ_TYPE_REF_OBJECT(NODE) TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 1)
+#define OBJ_TYPE_REF_TOKEN(NODE)  TREE_OPERAND (OBJ_TYPE_REF_CHECK (NODE), 2)
+
+/* ASSERT_EXPR accessors.  */
+#define ASSERT_EXPR_VAR(NODE)	TREE_OPERAND (ASSERT_EXPR_CHECK (NODE), 0)
+#define ASSERT_EXPR_COND(NODE)	TREE_OPERAND (ASSERT_EXPR_CHECK (NODE), 1)
+
+/* CALL_EXPR accessors.  */
+#define CALL_EXPR_FN(NODE) TREE_OPERAND (CALL_EXPR_CHECK (NODE), 1)
+#define CALL_EXPR_STATIC_CHAIN(NODE) TREE_OPERAND (CALL_EXPR_CHECK (NODE), 2)
+#define CALL_EXPR_ARG(NODE, I) TREE_OPERAND (CALL_EXPR_CHECK (NODE), (I) + 3)
+#define call_expr_nargs(NODE) (VL_EXP_OPERAND_LENGTH (NODE) - 3)
+#define CALL_EXPR_IFN(NODE) (CALL_EXPR_CHECK (NODE)->base.u.ifn)
+
+/* CALL_EXPR_ARGP returns a pointer to the argument vector for NODE.
+   We can't use &CALL_EXPR_ARG (NODE, 0) because that will complain if
+   the argument count is zero when checking is enabled.  Instead, do
+   the pointer arithmetic to advance past the 3 fixed operands in a
+   CALL_EXPR.  That produces a valid pointer to just past the end of the
+   operand array, even if it's not valid to dereference it.  */
+#define CALL_EXPR_ARGP(NODE) \
+  (&(TREE_OPERAND (CALL_EXPR_CHECK (NODE), 0)) + 3)
+
+/* TM directives and accessors.  */
+#define TRANSACTION_EXPR_BODY(NODE) \
+  TREE_OPERAND (TRANSACTION_EXPR_CHECK (NODE), 0)
+#define TRANSACTION_EXPR_OUTER(NODE) \
+  (TRANSACTION_EXPR_CHECK (NODE)->base.static_flag)
+#define TRANSACTION_EXPR_RELAXED(NODE) \
+  (TRANSACTION_EXPR_CHECK (NODE)->base.public_flag)
+
+/* OpenMP and OpenACC directive and clause accessors.  */
+
+/* Generic accessors for OMP nodes that keep the body as operand 0, and clauses
+   as operand 1.  */
+#define OMP_BODY(NODE) \
+  TREE_OPERAND (TREE_RANGE_CHECK (NODE, OACC_PARALLEL, OMP_MASTER), 0)
+#define OMP_CLAUSES(NODE) \
+  TREE_OPERAND (TREE_RANGE_CHECK (NODE, OACC_PARALLEL, OMP_TASKGROUP), 1)
+
+/* Generic accessors for OMP nodes that keep clauses as operand 0.  */
+#define OMP_STANDALONE_CLAUSES(NODE) \
+  TREE_OPERAND (TREE_RANGE_CHECK (NODE, OACC_CACHE, OMP_TARGET_EXIT_DATA), 0)
+
+#define OACC_DATA_BODY(NODE) \
+  TREE_OPERAND (OACC_DATA_CHECK (NODE), 0)
+#define OACC_DATA_CLAUSES(NODE) \
+  TREE_OPERAND (OACC_DATA_CHECK (NODE), 1)
+
+#define OACC_HOST_DATA_BODY(NODE) \
+  TREE_OPERAND (OACC_HOST_DATA_CHECK (NODE), 0)
+#define OACC_HOST_DATA_CLAUSES(NODE) \
+  TREE_OPERAND (OACC_HOST_DATA_CHECK (NODE), 1)
+
+#define OACC_CACHE_CLAUSES(NODE) \
+  TREE_OPERAND (OACC_CACHE_CHECK (NODE), 0)
+
+#define OACC_DECLARE_CLAUSES(NODE) \
+  TREE_OPERAND (OACC_DECLARE_CHECK (NODE), 0)
+
+#define OACC_ENTER_DATA_CLAUSES(NODE) \
+  TREE_OPERAND (OACC_ENTER_DATA_CHECK (NODE), 0)
+
+#define OACC_EXIT_DATA_CLAUSES(NODE) \
+  TREE_OPERAND (OACC_EXIT_DATA_CHECK (NODE), 0)
+
+#define OACC_UPDATE_CLAUSES(NODE) \
+  TREE_OPERAND (OACC_UPDATE_CHECK (NODE), 0)
+
+#define OMP_PARALLEL_BODY(NODE)    TREE_OPERAND (OMP_PARALLEL_CHECK (NODE), 0)
+#define OMP_PARALLEL_CLAUSES(NODE) TREE_OPERAND (OMP_PARALLEL_CHECK (NODE), 1)
+
+#define OMP_TASK_BODY(NODE)	   TREE_OPERAND (OMP_TASK_CHECK (NODE), 0)
+#define OMP_TASK_CLAUSES(NODE)	   TREE_OPERAND (OMP_TASK_CHECK (NODE), 1)
+
+#define OMP_TASKREG_CHECK(NODE)	  TREE_RANGE_CHECK (NODE, OMP_PARALLEL, OMP_TASK)
+#define OMP_TASKREG_BODY(NODE)    TREE_OPERAND (OMP_TASKREG_CHECK (NODE), 0)
+#define OMP_TASKREG_CLAUSES(NODE) TREE_OPERAND (OMP_TASKREG_CHECK (NODE), 1)
+
+#define OMP_LOOP_CHECK(NODE) TREE_RANGE_CHECK (NODE, OMP_FOR, OACC_LOOP)
+#define OMP_FOR_BODY(NODE)	   TREE_OPERAND (OMP_LOOP_CHECK (NODE), 0)
+#define OMP_FOR_CLAUSES(NODE)	   TREE_OPERAND (OMP_LOOP_CHECK (NODE), 1)
+#define OMP_FOR_INIT(NODE)	   TREE_OPERAND (OMP_LOOP_CHECK (NODE), 2)
+#define OMP_FOR_COND(NODE)	   TREE_OPERAND (OMP_LOOP_CHECK (NODE), 3)
+#define OMP_FOR_INCR(NODE)	   TREE_OPERAND (OMP_LOOP_CHECK (NODE), 4)
+#define OMP_FOR_PRE_BODY(NODE)	   TREE_OPERAND (OMP_LOOP_CHECK (NODE), 5)
+#define OMP_FOR_ORIG_DECLS(NODE)   TREE_OPERAND (OMP_LOOP_CHECK (NODE), 6)
+
+#define OMP_SECTIONS_BODY(NODE)    TREE_OPERAND (OMP_SECTIONS_CHECK (NODE), 0)
+#define OMP_SECTIONS_CLAUSES(NODE) TREE_OPERAND (OMP_SECTIONS_CHECK (NODE), 1)
+
+#define OMP_SECTION_BODY(NODE)	   TREE_OPERAND (OMP_SECTION_CHECK (NODE), 0)
+
+#define OMP_SINGLE_BODY(NODE)	   TREE_OPERAND (OMP_SINGLE_CHECK (NODE), 0)
+#define OMP_SINGLE_CLAUSES(NODE)   TREE_OPERAND (OMP_SINGLE_CHECK (NODE), 1)
+
+#define OMP_MASTER_BODY(NODE)	   TREE_OPERAND (OMP_MASTER_CHECK (NODE), 0)
+
+#define OMP_TASKGROUP_BODY(NODE)   TREE_OPERAND (OMP_TASKGROUP_CHECK (NODE), 0)
+#define OMP_TASKGROUP_CLAUSES(NODE) \
+  TREE_OPERAND (OMP_TASKGROUP_CHECK (NODE), 1)
+
+#define OMP_ORDERED_BODY(NODE)	   TREE_OPERAND (OMP_ORDERED_CHECK (NODE), 0)
+#define OMP_ORDERED_CLAUSES(NODE)  TREE_OPERAND (OMP_ORDERED_CHECK (NODE), 1)
+
+#define OMP_CRITICAL_BODY(NODE)    TREE_OPERAND (OMP_CRITICAL_CHECK (NODE), 0)
+#define OMP_CRITICAL_CLAUSES(NODE) TREE_OPERAND (OMP_CRITICAL_CHECK (NODE), 1)
+#define OMP_CRITICAL_NAME(NODE)    TREE_OPERAND (OMP_CRITICAL_CHECK (NODE), 2)
+
+#define OMP_TEAMS_BODY(NODE)	   TREE_OPERAND (OMP_TEAMS_CHECK (NODE), 0)
+#define OMP_TEAMS_CLAUSES(NODE)	   TREE_OPERAND (OMP_TEAMS_CHECK (NODE), 1)
+
+#define OMP_TARGET_DATA_BODY(NODE) \
+  TREE_OPERAND (OMP_TARGET_DATA_CHECK (NODE), 0)
+#define OMP_TARGET_DATA_CLAUSES(NODE)\
+  TREE_OPERAND (OMP_TARGET_DATA_CHECK (NODE), 1)
+
+#define OMP_TARGET_BODY(NODE)	   TREE_OPERAND (OMP_TARGET_CHECK (NODE), 0)
+#define OMP_TARGET_CLAUSES(NODE)   TREE_OPERAND (OMP_TARGET_CHECK (NODE), 1)
+
+#define OMP_TARGET_UPDATE_CLAUSES(NODE)\
+  TREE_OPERAND (OMP_TARGET_UPDATE_CHECK (NODE), 0)
+
+#define OMP_TARGET_ENTER_DATA_CLAUSES(NODE)\
+  TREE_OPERAND (OMP_TARGET_ENTER_DATA_CHECK (NODE), 0)
+
+#define OMP_TARGET_EXIT_DATA_CLAUSES(NODE)\
+  TREE_OPERAND (OMP_TARGET_EXIT_DATA_CHECK (NODE), 0)
+
+#define OMP_CLAUSE_SIZE(NODE)						\
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_RANGE_CHECK (OMP_CLAUSE_CHECK (NODE),	\
+					      OMP_CLAUSE_FROM,		\
+					      OMP_CLAUSE__CACHE_), 1)
+
+#define OMP_CLAUSE_CHAIN(NODE)     TREE_CHAIN (OMP_CLAUSE_CHECK (NODE))
+#define OMP_CLAUSE_DECL(NODE)      					\
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_RANGE_CHECK (OMP_CLAUSE_CHECK (NODE),	\
+					      OMP_CLAUSE_PRIVATE,	\
+					      OMP_CLAUSE__REDUCTEMP_), 0)
+#define OMP_CLAUSE_HAS_LOCATION(NODE) \
+  (LOCATION_LOCUS ((OMP_CLAUSE_CHECK (NODE))->omp_clause.locus)		\
+  != UNKNOWN_LOCATION)
+#define OMP_CLAUSE_LOCATION(NODE)  (OMP_CLAUSE_CHECK (NODE))->omp_clause.locus
+
+/* True on an OMP_SECTION statement that was the last lexical member.
+   This status is meaningful in the implementation of lastprivate.  */
+#define OMP_SECTION_LAST(NODE) \
+  (OMP_SECTION_CHECK (NODE)->base.private_flag)
+
+/* True on an OMP_PARALLEL statement if it represents an explicit
+   combined parallel work-sharing constructs.  */
+#define OMP_PARALLEL_COMBINED(NODE) \
+  (OMP_PARALLEL_CHECK (NODE)->base.private_flag)
+
+/* True on an OMP_TEAMS statement if it represents an explicit
+   combined teams distribute constructs.  */
+#define OMP_TEAMS_COMBINED(NODE) \
+  (OMP_TEAMS_CHECK (NODE)->base.private_flag)
+
+/* True on an OMP_TARGET statement if it represents explicit
+   combined target teams, target parallel or target simd constructs.  */
+#define OMP_TARGET_COMBINED(NODE) \
+  (OMP_TARGET_CHECK (NODE)->base.private_flag)
+
+/* Memory order for OMP_ATOMIC*.  */
+#define OMP_ATOMIC_MEMORY_ORDER(NODE) \
+  (TREE_RANGE_CHECK (NODE, OMP_ATOMIC, \
+		     OMP_ATOMIC_CAPTURE_NEW)->base.u.omp_atomic_memory_order)
+
+/* True on a PRIVATE clause if its decl is kept around for debugging
+   information only and its DECL_VALUE_EXPR is supposed to point
+   to what it has been remapped to.  */
+#define OMP_CLAUSE_PRIVATE_DEBUG(NODE) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PRIVATE)->base.public_flag)
+
+/* True on a PRIVATE clause if ctor needs access to outer region's
+   variable.  */
+#define OMP_CLAUSE_PRIVATE_OUTER_REF(NODE) \
+  TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PRIVATE))
+
+/* True if a PRIVATE clause is for a C++ class IV on taskloop construct
+   (thus should be private on the outer taskloop and firstprivate on
+   task).  */
+#define OMP_CLAUSE_PRIVATE_TASKLOOP_IV(NODE) \
+  TREE_PROTECTED (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PRIVATE))
+
+/* True on a FIRSTPRIVATE clause if it has been added implicitly.  */
+#define OMP_CLAUSE_FIRSTPRIVATE_IMPLICIT(NODE) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_FIRSTPRIVATE)->base.public_flag)
+
+/* True on a FIRSTPRIVATE clause if only the reference and not what it refers
+   to should be firstprivatized.  */
+#define OMP_CLAUSE_FIRSTPRIVATE_NO_REFERENCE(NODE) \
+  TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_FIRSTPRIVATE))
+
+/* True on a LASTPRIVATE clause if a FIRSTPRIVATE clause for the same
+   decl is present in the chain.  */
+#define OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE(NODE) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LASTPRIVATE)->base.public_flag)
+#define OMP_CLAUSE_LASTPRIVATE_STMT(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE,			\
+						OMP_CLAUSE_LASTPRIVATE),\
+		      1)
+#define OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ(NODE) \
+  (OMP_CLAUSE_CHECK (NODE))->omp_clause.gimple_reduction_init
+
+/* True if a LASTPRIVATE clause is for a C++ class IV on taskloop construct
+   (thus should be lastprivate on the outer taskloop and firstprivate on
+   task).  */
+#define OMP_CLAUSE_LASTPRIVATE_TASKLOOP_IV(NODE) \
+  TREE_PROTECTED (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LASTPRIVATE))
+
+/* True if a LASTPRIVATE clause has CONDITIONAL: modifier.  */
+#define OMP_CLAUSE_LASTPRIVATE_CONDITIONAL(NODE) \
+  TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LASTPRIVATE))
+
+/* True on a SHARED clause if a FIRSTPRIVATE clause for the same
+   decl is present in the chain (this can happen only for taskloop
+   with FIRSTPRIVATE/LASTPRIVATE on it originally.  */
+#define OMP_CLAUSE_SHARED_FIRSTPRIVATE(NODE) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SHARED)->base.public_flag)
+
+/* True on a SHARED clause if a scalar is not modified in the body and
+   thus could be optimized as firstprivate.  */
+#define OMP_CLAUSE_SHARED_READONLY(NODE) \
+  TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SHARED))
+
+#define OMP_CLAUSE_IF_MODIFIER(NODE)	\
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_IF)->omp_clause.subcode.if_modifier)
+
+#define OMP_CLAUSE_FINAL_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_FINAL), 0)
+#define OMP_CLAUSE_IF_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_IF), 0)
+#define OMP_CLAUSE_NUM_THREADS_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_NUM_THREADS),0)
+#define OMP_CLAUSE_SCHEDULE_CHUNK_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SCHEDULE), 0)
+#define OMP_CLAUSE_NUM_TASKS_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_NUM_TASKS), 0)
+#define OMP_CLAUSE_HINT_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_HINT), 0)
+
+#define OMP_CLAUSE_GRAINSIZE_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_GRAINSIZE),0)
+
+#define OMP_CLAUSE_PRIORITY_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PRIORITY),0)
+
+/* OpenACC clause expressions  */
+#define OMP_CLAUSE_EXPR(NODE, CLAUSE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, CLAUSE), 0)
+#define OMP_CLAUSE_GANG_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND ( \
+    OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_GANG), 0)
+#define OMP_CLAUSE_GANG_STATIC_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND ( \
+    OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_GANG), 1)
+#define OMP_CLAUSE_ASYNC_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND ( \
+    OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_ASYNC), 0)
+#define OMP_CLAUSE_WAIT_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND ( \
+    OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_WAIT), 0)
+#define OMP_CLAUSE_VECTOR_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND ( \
+    OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_VECTOR), 0)
+#define OMP_CLAUSE_WORKER_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND ( \
+    OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_WORKER), 0)
+#define OMP_CLAUSE_NUM_GANGS_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND ( \
+    OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_NUM_GANGS), 0)
+#define OMP_CLAUSE_NUM_WORKERS_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND ( \
+    OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_NUM_WORKERS), 0)
+#define OMP_CLAUSE_VECTOR_LENGTH_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND ( \
+    OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_VECTOR_LENGTH), 0)
+
+#define OMP_CLAUSE_DEPEND_KIND(NODE) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_DEPEND)->omp_clause.subcode.depend_kind)
+
+#define OMP_CLAUSE_DEPEND_SINK_NEGATIVE(NODE) \
+  TREE_PUBLIC (TREE_LIST_CHECK (NODE))
+
+#define OMP_CLAUSE_MAP_KIND(NODE) \
+  ((enum gomp_map_kind) OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP)->omp_clause.subcode.map_kind)
+#define OMP_CLAUSE_SET_MAP_KIND(NODE, MAP_KIND) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP)->omp_clause.subcode.map_kind \
+   = (unsigned int) (MAP_KIND))
+
+/* Nonzero if this map clause is for array (rather than pointer) based array
+   section with zero bias.  Both the non-decl OMP_CLAUSE_MAP and corresponding
+   OMP_CLAUSE_MAP with GOMP_MAP_POINTER are marked with this flag.  */
+#define OMP_CLAUSE_MAP_ZERO_BIAS_ARRAY_SECTION(NODE) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP)->base.public_flag)
+/* Nonzero if this is a mapped array section, that might need special
+   treatment if OMP_CLAUSE_SIZE is zero.  */
+#define OMP_CLAUSE_MAP_MAYBE_ZERO_LENGTH_ARRAY_SECTION(NODE) \
+  TREE_PROTECTED (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP))
+/* Nonzero if this map clause is for an ACC parallel reduction variable.  */
+#define OMP_CLAUSE_MAP_IN_REDUCTION(NODE) \
+  TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_MAP))
+
+#define OMP_CLAUSE_PROC_BIND_KIND(NODE) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_PROC_BIND)->omp_clause.subcode.proc_bind_kind)
+
+#define OMP_CLAUSE_COLLAPSE_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_COLLAPSE), 0)
+#define OMP_CLAUSE_COLLAPSE_ITERVAR(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_COLLAPSE), 1)
+#define OMP_CLAUSE_COLLAPSE_COUNT(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_COLLAPSE), 2)
+
+#define OMP_CLAUSE_ORDERED_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_ORDERED), 0)
+
+#define OMP_CLAUSE_REDUCTION_CODE(NODE)	\
+  (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_REDUCTION, \
+     OMP_CLAUSE_IN_REDUCTION)->omp_clause.subcode.reduction_code)
+#define OMP_CLAUSE_REDUCTION_INIT(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_REDUCTION, \
+					      OMP_CLAUSE_IN_REDUCTION), 1)
+#define OMP_CLAUSE_REDUCTION_MERGE(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_REDUCTION, \
+					      OMP_CLAUSE_IN_REDUCTION), 2)
+#define OMP_CLAUSE_REDUCTION_GIMPLE_INIT(NODE) \
+  (OMP_CLAUSE_CHECK (NODE))->omp_clause.gimple_reduction_init
+#define OMP_CLAUSE_REDUCTION_GIMPLE_MERGE(NODE) \
+  (OMP_CLAUSE_CHECK (NODE))->omp_clause.gimple_reduction_merge
+#define OMP_CLAUSE_REDUCTION_PLACEHOLDER(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_REDUCTION, \
+					      OMP_CLAUSE_IN_REDUCTION), 3)
+#define OMP_CLAUSE_REDUCTION_DECL_PLACEHOLDER(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_REDUCTION, \
+					      OMP_CLAUSE_IN_REDUCTION), 4)
+
+/* True if a REDUCTION clause may reference the original list item (omp_orig)
+   in its OMP_CLAUSE_REDUCTION_{,GIMPLE_}INIT.  */
+#define OMP_CLAUSE_REDUCTION_OMP_ORIG_REF(NODE) \
+  (OMP_CLAUSE_RANGE_CHECK (NODE, OMP_CLAUSE_REDUCTION, \
+			   OMP_CLAUSE_IN_REDUCTION)->base.public_flag)
+
+/* True if a REDUCTION clause has task reduction-modifier.  */
+#define OMP_CLAUSE_REDUCTION_TASK(NODE) \
+  TREE_PROTECTED (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_REDUCTION))
+
+/* True if a REDUCTION clause has inscan reduction-modifier.  */
+#define OMP_CLAUSE_REDUCTION_INSCAN(NODE) \
+  TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_REDUCTION))
+
+/* True if a LINEAR clause doesn't need copy in.  True for iterator vars which
+   are always initialized inside of the loop construct, false otherwise.  */
+#define OMP_CLAUSE_LINEAR_NO_COPYIN(NODE) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR)->base.public_flag)
+
+/* True if a LINEAR clause doesn't need copy out.  True for iterator vars which
+   are declared inside of the simd construct.  */
+#define OMP_CLAUSE_LINEAR_NO_COPYOUT(NODE) \
+  TREE_PRIVATE (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR))
+
+/* True if a LINEAR clause has a stride that is variable.  */
+#define OMP_CLAUSE_LINEAR_VARIABLE_STRIDE(NODE) \
+  TREE_PROTECTED (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR))
+
+/* True if a LINEAR clause is for an array or allocatable variable that
+   needs special handling by the frontend.  */
+#define OMP_CLAUSE_LINEAR_ARRAY(NODE) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR)->base.deprecated_flag)
+
+#define OMP_CLAUSE_LINEAR_STEP(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR), 1)
+
+#define OMP_CLAUSE_LINEAR_STMT(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR), 2)
+
+#define OMP_CLAUSE_LINEAR_GIMPLE_SEQ(NODE) \
+  (OMP_CLAUSE_CHECK (NODE))->omp_clause.gimple_reduction_init
+
+#define OMP_CLAUSE_LINEAR_KIND(NODE) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR)->omp_clause.subcode.linear_kind)
+
+#define OMP_CLAUSE_ALIGNED_ALIGNMENT(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_ALIGNED), 1)
+
+#define OMP_CLAUSE_NUM_TEAMS_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_NUM_TEAMS), 0)
+
+#define OMP_CLAUSE_THREAD_LIMIT_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, \
+						OMP_CLAUSE_THREAD_LIMIT), 0)
+
+#define OMP_CLAUSE_DEVICE_ID(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_DEVICE), 0)
+
+#define OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, \
+						OMP_CLAUSE_DIST_SCHEDULE), 0)
+
+#define OMP_CLAUSE_SAFELEN_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SAFELEN), 0)
+
+#define OMP_CLAUSE_SIMDLEN_EXPR(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SIMDLEN), 0)
+
+#define OMP_CLAUSE__SIMDUID__DECL(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE__SIMDUID_), 0)
+
+#define OMP_CLAUSE_SCHEDULE_KIND(NODE) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SCHEDULE)->omp_clause.subcode.schedule_kind)
+
+/* True if a SCHEDULE clause has the simd modifier on it.  */
+#define OMP_CLAUSE_SCHEDULE_SIMD(NODE) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_SCHEDULE)->base.public_flag)
+
+#define OMP_CLAUSE_DEFAULT_KIND(NODE) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_DEFAULT)->omp_clause.subcode.default_kind)
+
+#define OMP_CLAUSE_DEFAULTMAP_KIND(NODE) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_DEFAULTMAP)->omp_clause.subcode.defaultmap_kind)
+#define OMP_CLAUSE_DEFAULTMAP_CATEGORY(NODE) \
+  ((enum omp_clause_defaultmap_kind) \
+   (OMP_CLAUSE_DEFAULTMAP_KIND (NODE) & OMP_CLAUSE_DEFAULTMAP_CATEGORY_MASK))
+#define OMP_CLAUSE_DEFAULTMAP_BEHAVIOR(NODE) \
+  ((enum omp_clause_defaultmap_kind) \
+   (OMP_CLAUSE_DEFAULTMAP_KIND (NODE) & OMP_CLAUSE_DEFAULTMAP_MASK))
+#define OMP_CLAUSE_DEFAULTMAP_SET_KIND(NODE, BEHAVIOR, CATEGORY) \
+  (OMP_CLAUSE_DEFAULTMAP_KIND (NODE) \
+   = (enum omp_clause_defaultmap_kind) (CATEGORY | BEHAVIOR))
+
+#define OMP_CLAUSE_TILE_LIST(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_TILE), 0)
+#define OMP_CLAUSE_TILE_ITERVAR(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_TILE), 1)
+#define OMP_CLAUSE_TILE_COUNT(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_TILE), 2)
+
+#define OMP_CLAUSE__GRIDDIM__DIMENSION(NODE) \
+  (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE__GRIDDIM_)\
+   ->omp_clause.subcode.dimension)
+#define OMP_CLAUSE__GRIDDIM__SIZE(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE__GRIDDIM_), 0)
+#define OMP_CLAUSE__GRIDDIM__GROUP(NODE) \
+  OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE__GRIDDIM_), 1)
+
+/* SSA_NAME accessors.  */
+
+/* Whether SSA_NAME NODE is a virtual operand.  This simply caches the
+   information in the underlying SSA_NAME_VAR for efficiency.  */
+#define SSA_NAME_IS_VIRTUAL_OPERAND(NODE) \
+  SSA_NAME_CHECK (NODE)->base.public_flag
+
+/* Returns the IDENTIFIER_NODE giving the SSA name a name or NULL_TREE
+   if there is no name associated with it.  */
+#define SSA_NAME_IDENTIFIER(NODE)				\
+  (SSA_NAME_CHECK (NODE)->ssa_name.var != NULL_TREE		\
+   ? (TREE_CODE ((NODE)->ssa_name.var) == IDENTIFIER_NODE	\
+      ? (NODE)->ssa_name.var					\
+      : DECL_NAME ((NODE)->ssa_name.var))			\
+   : NULL_TREE)
+
+/* Returns the variable being referenced.  This can be NULL_TREE for
+   temporaries not associated with any user variable.
+   Once released, this is the only field that can be relied upon.  */
+#define SSA_NAME_VAR(NODE)					\
+  (SSA_NAME_CHECK (NODE)->ssa_name.var == NULL_TREE		\
+   || TREE_CODE ((NODE)->ssa_name.var) == IDENTIFIER_NODE	\
+   ? NULL_TREE : (NODE)->ssa_name.var)
+
+#define SET_SSA_NAME_VAR_OR_IDENTIFIER(NODE,VAR) \
+  do \
+    { \
+      tree var_ = (VAR); \
+      SSA_NAME_CHECK (NODE)->ssa_name.var = var_; \
+      SSA_NAME_IS_VIRTUAL_OPERAND (NODE) \
+	= (var_ \
+	   && TREE_CODE (var_) == VAR_DECL \
+	   && VAR_DECL_IS_VIRTUAL_OPERAND (var_)); \
+    } \
+  while (0)
+
+/* Returns the statement which defines this SSA name.  */
+#define SSA_NAME_DEF_STMT(NODE)	SSA_NAME_CHECK (NODE)->ssa_name.def_stmt
+
+/* Returns the SSA version number of this SSA name.  Note that in
+   tree SSA, version numbers are not per variable and may be recycled.  */
+#define SSA_NAME_VERSION(NODE)	SSA_NAME_CHECK (NODE)->base.u.version
+
+/* Nonzero if this SSA name occurs in an abnormal PHI.  SSA_NAMES are
+   never output, so we can safely use the ASM_WRITTEN_FLAG for this
+   status bit.  */
+#define SSA_NAME_OCCURS_IN_ABNORMAL_PHI(NODE) \
+    SSA_NAME_CHECK (NODE)->base.asm_written_flag
+
+/* Nonzero if this SSA_NAME expression is currently on the free list of
+   SSA_NAMES.  Using NOTHROW_FLAG seems reasonably safe since throwing
+   has no meaning for an SSA_NAME.  */
+#define SSA_NAME_IN_FREE_LIST(NODE) \
+    SSA_NAME_CHECK (NODE)->base.nothrow_flag
+
+/* Nonzero if this SSA_NAME is the default definition for the
+   underlying symbol.  A default SSA name is created for symbol S if
+   the very first reference to S in the function is a read operation.
+   Default definitions are always created by an empty statement and
+   belong to no basic block.  */
+#define SSA_NAME_IS_DEFAULT_DEF(NODE) \
+    SSA_NAME_CHECK (NODE)->base.default_def_flag
+
+/* Nonzero if this SSA_NAME is known to point to memory that may not
+   be written to.  This is set for default defs of function parameters
+   that have a corresponding r or R specification in the functions
+   fn spec attribute.  This is used by alias analysis.  */
+#define SSA_NAME_POINTS_TO_READONLY_MEMORY(NODE) \
+    SSA_NAME_CHECK (NODE)->base.deprecated_flag
+
+/* Attributes for SSA_NAMEs for pointer-type variables.  */
+#define SSA_NAME_PTR_INFO(N) \
+   SSA_NAME_CHECK (N)->ssa_name.info.ptr_info
+
+/* True if SSA_NAME_RANGE_INFO describes an anti-range.  */
+#define SSA_NAME_ANTI_RANGE_P(N) \
+    SSA_NAME_CHECK (N)->base.static_flag
+
+/* The type of range described by SSA_NAME_RANGE_INFO.  */
+#define SSA_NAME_RANGE_TYPE(N) \
+    (SSA_NAME_ANTI_RANGE_P (N) ? VR_ANTI_RANGE : VR_RANGE)
+
+/* Value range info attributes for SSA_NAMEs of non pointer-type variables.  */
+#define SSA_NAME_RANGE_INFO(N) \
+    SSA_NAME_CHECK (N)->ssa_name.info.range_info
+
+/* Return the immediate_use information for an SSA_NAME. */
+#define SSA_NAME_IMM_USE_NODE(NODE) SSA_NAME_CHECK (NODE)->ssa_name.imm_uses
+
+#define OMP_CLAUSE_CODE(NODE)					\
+	(OMP_CLAUSE_CHECK (NODE))->omp_clause.code
+
+#define OMP_CLAUSE_SET_CODE(NODE, CODE)				\
+	((OMP_CLAUSE_CHECK (NODE))->omp_clause.code = (CODE))
+
+#define OMP_CLAUSE_OPERAND(NODE, I)				\
+	OMP_CLAUSE_ELT_CHECK (NODE, I)
+
+/* In a BLOCK node.  */
+#define BLOCK_VARS(NODE) (BLOCK_CHECK (NODE)->block.vars)
+#define BLOCK_NONLOCALIZED_VARS(NODE) \
+  (BLOCK_CHECK (NODE)->block.nonlocalized_vars)
+#define BLOCK_NUM_NONLOCALIZED_VARS(NODE) \
+  vec_safe_length (BLOCK_NONLOCALIZED_VARS (NODE))
+#define BLOCK_NONLOCALIZED_VAR(NODE,N) (*BLOCK_NONLOCALIZED_VARS (NODE))[N]
+#define BLOCK_SUBBLOCKS(NODE) (BLOCK_CHECK (NODE)->block.subblocks)
+#define BLOCK_SUPERCONTEXT(NODE) (BLOCK_CHECK (NODE)->block.supercontext)
+#define BLOCK_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.chain)
+#define BLOCK_ABSTRACT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.abstract_origin)
+#define BLOCK_ORIGIN(NODE) \
+  (BLOCK_ABSTRACT_ORIGIN(NODE) ? BLOCK_ABSTRACT_ORIGIN(NODE) : (NODE))
+#define BLOCK_DIE(NODE) (BLOCK_CHECK (NODE)->block.die)
+
+/* True if BLOCK has the same ranges as its BLOCK_SUPERCONTEXT.  */
+#define BLOCK_SAME_RANGE(NODE) (BLOCK_CHECK (NODE)->base.u.bits.nameless_flag)
+
+/* True if BLOCK appears in cold section.  */
+#define BLOCK_IN_COLD_SECTION_P(NODE) \
+  (BLOCK_CHECK (NODE)->base.u.bits.atomic_flag)
+
+/* An index number for this block.  These values are not guaranteed to
+   be unique across functions -- whether or not they are depends on
+   the debugging output format in use.  */
+#define BLOCK_NUMBER(NODE) (BLOCK_CHECK (NODE)->block.block_num)
+
+/* If block reordering splits a lexical block into discontiguous
+   address ranges, we'll make a copy of the original block.
+
+   Note that this is logically distinct from BLOCK_ABSTRACT_ORIGIN.
+   In that case, we have one source block that has been replicated
+   (through inlining or unrolling) into many logical blocks, and that
+   these logical blocks have different physical variables in them.
+
+   In this case, we have one logical block split into several
+   non-contiguous address ranges.  Most debug formats can't actually
+   represent this idea directly, so we fake it by creating multiple
+   logical blocks with the same variables in them.  However, for those
+   that do support non-contiguous regions, these allow the original
+   logical block to be reconstructed, along with the set of address
+   ranges.
+
+   One of the logical block fragments is arbitrarily chosen to be
+   the ORIGIN.  The other fragments will point to the origin via
+   BLOCK_FRAGMENT_ORIGIN; the origin itself will have this pointer
+   be null.  The list of fragments will be chained through
+   BLOCK_FRAGMENT_CHAIN from the origin.  */
+
+#define BLOCK_FRAGMENT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_origin)
+#define BLOCK_FRAGMENT_CHAIN(NODE) (BLOCK_CHECK (NODE)->block.fragment_chain)
+
+/* For an inlined function, this gives the location where it was called
+   from.  This is only set in the top level block, which corresponds to the
+   inlined function scope.  This is used in the debug output routines.  */
+
+#define BLOCK_SOURCE_LOCATION(NODE) (BLOCK_CHECK (NODE)->block.locus)
+
+/* This gives the location of the end of the block, useful to attach
+   code implicitly generated for outgoing paths.  */
+
+#define BLOCK_SOURCE_END_LOCATION(NODE) (BLOCK_CHECK (NODE)->block.end_locus)
+
+/* Define fields and accessors for nodes representing data types.  */
+
+/* See tree.def for documentation of the use of these fields.
+   Look at the documentation of the various ..._TYPE tree codes.
+
+   Note that the type.values, type.minval, and type.maxval fields are
+   overloaded and used for different macros in different kinds of types.
+   Each macro must check to ensure the tree node is of the proper kind of
+   type.  Note also that some of the front-ends also overload these fields,
+   so they must be checked as well.  */
+
+#define TYPE_UID(NODE) (TYPE_CHECK (NODE)->type_common.uid)
+#define TYPE_SIZE(NODE) (TYPE_CHECK (NODE)->type_common.size)
+#define TYPE_SIZE_UNIT(NODE) (TYPE_CHECK (NODE)->type_common.size_unit)
+#define TYPE_POINTER_TO(NODE) (TYPE_CHECK (NODE)->type_common.pointer_to)
+#define TYPE_REFERENCE_TO(NODE) (TYPE_CHECK (NODE)->type_common.reference_to)
+#define TYPE_PRECISION(NODE) (TYPE_CHECK (NODE)->type_common.precision)
+#define TYPE_NAME(NODE) (TYPE_CHECK (NODE)->type_common.name)
+#define TYPE_NEXT_VARIANT(NODE) (TYPE_CHECK (NODE)->type_common.next_variant)
+#define TYPE_MAIN_VARIANT(NODE) (TYPE_CHECK (NODE)->type_common.main_variant)
+#define TYPE_CONTEXT(NODE) (TYPE_CHECK (NODE)->type_common.context)
+
+#define TYPE_MODE_RAW(NODE) (TYPE_CHECK (NODE)->type_common.mode)
+#define TYPE_MODE(NODE) \
+  (VECTOR_TYPE_P (TYPE_CHECK (NODE)) \
+   ? vector_type_mode (NODE) : (NODE)->type_common.mode)
+#define SCALAR_TYPE_MODE(NODE) \
+  (as_a <scalar_mode> (TYPE_CHECK (NODE)->type_common.mode))
+#define SCALAR_INT_TYPE_MODE(NODE) \
+  (as_a <scalar_int_mode> (TYPE_CHECK (NODE)->type_common.mode))
+#define SCALAR_FLOAT_TYPE_MODE(NODE) \
+  (as_a <scalar_float_mode> (TYPE_CHECK (NODE)->type_common.mode))
+#define SET_TYPE_MODE(NODE, MODE) \
+  (TYPE_CHECK (NODE)->type_common.mode = (MODE))
+
+extern machine_mode element_mode (const_tree);
+extern machine_mode vector_type_mode (const_tree);
+
+/* The "canonical" type for this type node, which is used by frontends to
+   compare the type for equality with another type.  If two types are
+   equal (based on the semantics of the language), then they will have
+   equivalent TYPE_CANONICAL entries.
+
+   As a special case, if TYPE_CANONICAL is NULL_TREE, and thus
+   TYPE_STRUCTURAL_EQUALITY_P is true, then it cannot
+   be used for comparison against other types.  Instead, the type is
+   said to require structural equality checks, described in
+   TYPE_STRUCTURAL_EQUALITY_P.
+
+   For unqualified aggregate and function types the middle-end relies on
+   TYPE_CANONICAL to tell whether two variables can be assigned
+   to each other without a conversion.  The middle-end also makes sure
+   to assign the same alias-sets to the type partition with equal
+   TYPE_CANONICAL of their unqualified variants.  */
+#define TYPE_CANONICAL(NODE) (TYPE_CHECK (NODE)->type_common.canonical)
+/* Indicates that the type node requires structural equality
+   checks.  The compiler will need to look at the composition of the
+   type to determine whether it is equal to another type, rather than
+   just comparing canonical type pointers.  For instance, we would need
+   to look at the return and parameter types of a FUNCTION_TYPE
+   node.  */
+#define TYPE_STRUCTURAL_EQUALITY_P(NODE) (TYPE_CANONICAL (NODE) == NULL_TREE)
+/* Sets the TYPE_CANONICAL field to NULL_TREE, indicating that the
+   type node requires structural equality.  */
+#define SET_TYPE_STRUCTURAL_EQUALITY(NODE) (TYPE_CANONICAL (NODE) = NULL_TREE)
+
+#define TYPE_IBIT(NODE) (GET_MODE_IBIT (TYPE_MODE (NODE)))
+#define TYPE_FBIT(NODE) (GET_MODE_FBIT (TYPE_MODE (NODE)))
+
+/* The (language-specific) typed-based alias set for this type.
+   Objects whose TYPE_ALIAS_SETs are different cannot alias each
+   other.  If the TYPE_ALIAS_SET is -1, no alias set has yet been
+   assigned to this type.  If the TYPE_ALIAS_SET is 0, objects of this
+   type can alias objects of any type.  */
+#define TYPE_ALIAS_SET(NODE) (TYPE_CHECK (NODE)->type_common.alias_set)
+
+/* Nonzero iff the typed-based alias set for this type has been
+   calculated.  */
+#define TYPE_ALIAS_SET_KNOWN_P(NODE) \
+  (TYPE_CHECK (NODE)->type_common.alias_set != -1)
+
+/* A TREE_LIST of IDENTIFIER nodes of the attributes that apply
+   to this type.  */
+#define TYPE_ATTRIBUTES(NODE) (TYPE_CHECK (NODE)->type_common.attributes)
+
+/* The alignment necessary for objects of this type.
+   The value is an int, measured in bits and must be a power of two.
+   We support also an "alignment" of zero.  */
+#define TYPE_ALIGN(NODE) \
+    (TYPE_CHECK (NODE)->type_common.align \
+     ? ((unsigned)1) << ((NODE)->type_common.align - 1) : 0)
+
+/* Specify that TYPE_ALIGN(NODE) is X.  */
+#define SET_TYPE_ALIGN(NODE, X) \
+    (TYPE_CHECK (NODE)->type_common.align = ffs_hwi (X))
+
+/* 1 if the alignment for this type was requested by "aligned" attribute,
+   0 if it is the default for this type.  */
+#define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->base.u.bits.user_align)
+
+/* The alignment for NODE, in bytes.  */
+#define TYPE_ALIGN_UNIT(NODE) (TYPE_ALIGN (NODE) / BITS_PER_UNIT)
+
+/* The minimum alignment necessary for objects of this type without
+   warning.  The value is an int, measured in bits.  */
+#define TYPE_WARN_IF_NOT_ALIGN(NODE) \
+    (TYPE_CHECK (NODE)->type_common.warn_if_not_align \
+     ? ((unsigned)1) << ((NODE)->type_common.warn_if_not_align - 1) : 0)
+
+/* Specify that TYPE_WARN_IF_NOT_ALIGN(NODE) is X.  */
+#define SET_TYPE_WARN_IF_NOT_ALIGN(NODE, X) \
+    (TYPE_CHECK (NODE)->type_common.warn_if_not_align = ffs_hwi (X))
+
+/* If your language allows you to declare types, and you want debug info
+   for them, then you need to generate corresponding TYPE_DECL nodes.
+   These "stub" TYPE_DECL nodes have no name, and simply point at the
+   type node.  You then set the TYPE_STUB_DECL field of the type node
+   to point back at the TYPE_DECL node.  This allows the debug routines
+   to know that the two nodes represent the same type, so that we only
+   get one debug info record for them.  */
+#define TYPE_STUB_DECL(NODE) (TREE_CHAIN (TYPE_CHECK (NODE)))
+
+/* In a RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE or ARRAY_TYPE, it means
+   the type has BLKmode only because it lacks the alignment required for
+   its size.  */
+#define TYPE_NO_FORCE_BLK(NODE) \
+  (TYPE_CHECK (NODE)->type_common.no_force_blk_flag)
+
+/* Nonzero in a type considered volatile as a whole.  */
+#define TYPE_VOLATILE(NODE) (TYPE_CHECK (NODE)->base.volatile_flag)
+
+/* Nonzero in a type considered atomic as a whole.  */
+#define TYPE_ATOMIC(NODE) (TYPE_CHECK (NODE)->base.u.bits.atomic_flag)
+
+/* Means this type is const-qualified.  */
+#define TYPE_READONLY(NODE) (TYPE_CHECK (NODE)->base.readonly_flag)
+
+/* If nonzero, this type is `restrict'-qualified, in the C sense of
+   the term.  */
+#define TYPE_RESTRICT(NODE) (TYPE_CHECK (NODE)->type_common.restrict_flag)
+
+/* If nonzero, type's name shouldn't be emitted into debug info.  */
+#define TYPE_NAMELESS(NODE) (TYPE_CHECK (NODE)->base.u.bits.nameless_flag)
+
+/* The address space the type is in.  */
+#define TYPE_ADDR_SPACE(NODE) (TYPE_CHECK (NODE)->base.u.bits.address_space)
+
+/* Encode/decode the named memory support as part of the qualifier.  If more
+   than 8 qualifiers are added, these macros need to be adjusted.  */
+#define ENCODE_QUAL_ADDR_SPACE(NUM) ((NUM & 0xFF) << 8)
+#define DECODE_QUAL_ADDR_SPACE(X) (((X) >> 8) & 0xFF)
+
+/* Return all qualifiers except for the address space qualifiers.  */
+#define CLEAR_QUAL_ADDR_SPACE(X) ((X) & ~0xFF00)
+
+/* Only keep the address space out of the qualifiers and discard the other
+   qualifiers.  */
+#define KEEP_QUAL_ADDR_SPACE(X) ((X) & 0xFF00)
+
+/* The set of type qualifiers for this type.  */
+#define TYPE_QUALS(NODE)					\
+  ((int) ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST)		\
+	  | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE)		\
+	  | (TYPE_ATOMIC (NODE) * TYPE_QUAL_ATOMIC)		\
+	  | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT)		\
+	  | (ENCODE_QUAL_ADDR_SPACE (TYPE_ADDR_SPACE (NODE)))))
+
+/* The same as TYPE_QUALS without the address space qualifications.  */
+#define TYPE_QUALS_NO_ADDR_SPACE(NODE)				\
+  ((int) ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST)		\
+	  | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE)		\
+	  | (TYPE_ATOMIC (NODE) * TYPE_QUAL_ATOMIC)		\
+	  | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT)))
+
+/* The same as TYPE_QUALS without the address space and atomic 
+   qualifications.  */
+#define TYPE_QUALS_NO_ADDR_SPACE_NO_ATOMIC(NODE)		\
+  ((int) ((TYPE_READONLY (NODE) * TYPE_QUAL_CONST)		\
+	  | (TYPE_VOLATILE (NODE) * TYPE_QUAL_VOLATILE)		\
+	  | (TYPE_RESTRICT (NODE) * TYPE_QUAL_RESTRICT)))
+
+/* These flags are available for each language front end to use internally.  */
+#define TYPE_LANG_FLAG_0(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_0)
+#define TYPE_LANG_FLAG_1(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_1)
+#define TYPE_LANG_FLAG_2(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_2)
+#define TYPE_LANG_FLAG_3(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_3)
+#define TYPE_LANG_FLAG_4(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_4)
+#define TYPE_LANG_FLAG_5(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_5)
+#define TYPE_LANG_FLAG_6(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_6)
+#define TYPE_LANG_FLAG_7(NODE) (TYPE_CHECK (NODE)->type_common.lang_flag_7)
+
+/* Used to keep track of visited nodes in tree traversals.  This is set to
+   0 by copy_node and make_node.  */
+#define TREE_VISITED(NODE) ((NODE)->base.visited)
+
+/* If set in an ARRAY_TYPE, indicates a string type (for languages
+   that distinguish string from array of char).
+   If set in a INTEGER_TYPE, indicates a character type.  */
+#define TYPE_STRING_FLAG(NODE) (TYPE_CHECK (NODE)->type_common.string_flag)
+
+/* Nonzero in a VECTOR_TYPE if the frontends should not emit warnings
+   about missing conversions to other vector types of the same size.  */
+#define TYPE_VECTOR_OPAQUE(NODE) \
+  (VECTOR_TYPE_CHECK (NODE)->base.default_def_flag)
+
+/* Indicates that objects of this type must be initialized by calling a
+   function when they are created.  */
+#define TYPE_NEEDS_CONSTRUCTING(NODE) \
+  (TYPE_CHECK (NODE)->type_common.needs_constructing_flag)
+
+/* Indicates that a UNION_TYPE object should be passed the same way that
+   the first union alternative would be passed, or that a RECORD_TYPE
+   object should be passed the same way that the first (and only) member
+   would be passed.  */
+#define TYPE_TRANSPARENT_AGGR(NODE) \
+  (RECORD_OR_UNION_CHECK (NODE)->type_common.transparent_aggr_flag)
+
+/* For an ARRAY_TYPE, indicates that it is not permitted to take the
+   address of a component of the type.  This is the counterpart of
+   DECL_NONADDRESSABLE_P for arrays, see the definition of this flag.  */
+#define TYPE_NONALIASED_COMPONENT(NODE) \
+  (ARRAY_TYPE_CHECK (NODE)->type_common.transparent_aggr_flag)
+
+/* For an ARRAY_TYPE, a RECORD_TYPE, a UNION_TYPE or a QUAL_UNION_TYPE
+   whether the array is typeless storage or the type contains a member
+   with this flag set.  Such types are exempt from type-based alias
+   analysis.  For ARRAY_TYPEs with AGGREGATE_TYPE_P element types
+   the flag should be inherited from the element type, can change
+   when type is finalized and because of that should not be used in
+   type hashing.  For ARRAY_TYPEs with non-AGGREGATE_TYPE_P element types
+   the flag should not be changed after the array is created and should
+   be used in type hashing.  */
+#define TYPE_TYPELESS_STORAGE(NODE) \
+  (TREE_CHECK4 (NODE, RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE, \
+		ARRAY_TYPE)->type_common.typeless_storage)
+
+/* Indicated that objects of this type should be laid out in as
+   compact a way as possible.  */
+#define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->base.u.bits.packed_flag)
+
+/* Used by type_contains_placeholder_p to avoid recomputation.
+   Values are: 0 (unknown), 1 (false), 2 (true).  Never access
+   this field directly.  */
+#define TYPE_CONTAINS_PLACEHOLDER_INTERNAL(NODE) \
+  (TYPE_CHECK (NODE)->type_common.contains_placeholder_bits)
+
+/* Nonzero if RECORD_TYPE represents a final derivation of class.  */
+#define TYPE_FINAL_P(NODE) \
+  (RECORD_OR_UNION_CHECK (NODE)->base.default_def_flag)
+
+/* The debug output functions use the symtab union field to store
+   information specific to the debugging format.  The different debug
+   output hooks store different types in the union field.  These three
+   macros are used to access different fields in the union.  The debug
+   hooks are responsible for consistently using only a specific
+   macro.  */
+
+/* Symtab field as an integer.  Used by stabs generator in dbxout.c to
+   hold the type's number in the generated stabs.  */
+#define TYPE_SYMTAB_ADDRESS(NODE) \
+  (TYPE_CHECK (NODE)->type_common.symtab.address)
+
+/* Symtab field as a pointer to a DWARF DIE.  Used by DWARF generator
+   in dwarf2out.c to point to the DIE generated for the type.  */
+#define TYPE_SYMTAB_DIE(NODE) \
+  (TYPE_CHECK (NODE)->type_common.symtab.die)
+
+/* The garbage collector needs to know the interpretation of the
+   symtab field.  These constants represent the different types in the
+   union.  */
+
+#define TYPE_SYMTAB_IS_ADDRESS (0)
+#define TYPE_SYMTAB_IS_DIE (1)
+
+#define TYPE_LANG_SPECIFIC(NODE) \
+  (TYPE_CHECK (NODE)->type_with_lang_specific.lang_specific)
+
+#define TYPE_VALUES(NODE) (ENUMERAL_TYPE_CHECK (NODE)->type_non_common.values)
+#define TYPE_DOMAIN(NODE) (ARRAY_TYPE_CHECK (NODE)->type_non_common.values)
+#define TYPE_FIELDS(NODE)				\
+  (RECORD_OR_UNION_CHECK (NODE)->type_non_common.values)
+#define TYPE_CACHED_VALUES(NODE) (TYPE_CHECK (NODE)->type_non_common.values)
+#define TYPE_ARG_TYPES(NODE)				\
+  (FUNC_OR_METHOD_CHECK (NODE)->type_non_common.values)
+#define TYPE_VALUES_RAW(NODE) (TYPE_CHECK (NODE)->type_non_common.values)
+
+#define TYPE_MIN_VALUE(NODE)				\
+  (NUMERICAL_TYPE_CHECK (NODE)->type_non_common.minval)
+#define TYPE_NEXT_PTR_TO(NODE)				\
+  (POINTER_TYPE_CHECK (NODE)->type_non_common.minval)
+#define TYPE_NEXT_REF_TO(NODE)				\
+  (REFERENCE_TYPE_CHECK (NODE)->type_non_common.minval)
+#define TYPE_VFIELD(NODE)				\
+  (RECORD_OR_UNION_CHECK (NODE)->type_non_common.minval)
+#define TYPE_MIN_VALUE_RAW(NODE) (TYPE_CHECK (NODE)->type_non_common.minval)
+
+#define TYPE_MAX_VALUE(NODE) \
+  (NUMERICAL_TYPE_CHECK (NODE)->type_non_common.maxval)
+#define TYPE_METHOD_BASETYPE(NODE)			\
+  (FUNC_OR_METHOD_CHECK (NODE)->type_non_common.maxval)
+#define TYPE_OFFSET_BASETYPE(NODE)			\
+  (OFFSET_TYPE_CHECK (NODE)->type_non_common.maxval)
+/* If non-NULL, this is an upper bound of the size (in bytes) of an
+   object of the given ARRAY_TYPE_NON_COMMON.  This allows temporaries to be
+   allocated.  */
+#define TYPE_ARRAY_MAX_SIZE(ARRAY_TYPE) \
+  (ARRAY_TYPE_CHECK (ARRAY_TYPE)->type_non_common.maxval)
+#define TYPE_MAX_VALUE_RAW(NODE) (TYPE_CHECK (NODE)->type_non_common.maxval)
+/* For record and union types, information about this type, as a base type
+   for itself.  */
+#define TYPE_BINFO(NODE) (RECORD_OR_UNION_CHECK (NODE)->type_non_common.maxval)
+
+/* For types, used in a language-dependent way.  */
+#define TYPE_LANG_SLOT_1(NODE) \
+  (TYPE_CHECK (NODE)->type_non_common.lang_1)
+
+/* Define accessor macros for information about type inheritance
+   and basetypes.
+
+   A "basetype" means a particular usage of a data type for inheritance
+   in another type.  Each such basetype usage has its own "binfo"
+   object to describe it.  The binfo object is a TREE_VEC node.
+
+   Inheritance is represented by the binfo nodes allocated for a
+   given type.  For example, given types C and D, such that D is
+   inherited by C, 3 binfo nodes will be allocated: one for describing
+   the binfo properties of C, similarly one for D, and one for
+   describing the binfo properties of D as a base type for C.
+   Thus, given a pointer to class C, one can get a pointer to the binfo
+   of D acting as a basetype for C by looking at C's binfo's basetypes.  */
+
+/* BINFO specific flags.  */
+
+/* Nonzero means that the derivation chain is via a `virtual' declaration.  */
+#define BINFO_VIRTUAL_P(NODE) (TREE_BINFO_CHECK (NODE)->base.static_flag)
+
+/* Flags for language dependent use.  */
+#define BINFO_FLAG_0(NODE) TREE_LANG_FLAG_0 (TREE_BINFO_CHECK (NODE))
+#define BINFO_FLAG_1(NODE) TREE_LANG_FLAG_1 (TREE_BINFO_CHECK (NODE))
+#define BINFO_FLAG_2(NODE) TREE_LANG_FLAG_2 (TREE_BINFO_CHECK (NODE))
+#define BINFO_FLAG_3(NODE) TREE_LANG_FLAG_3 (TREE_BINFO_CHECK (NODE))
+#define BINFO_FLAG_4(NODE) TREE_LANG_FLAG_4 (TREE_BINFO_CHECK (NODE))
+#define BINFO_FLAG_5(NODE) TREE_LANG_FLAG_5 (TREE_BINFO_CHECK (NODE))
+#define BINFO_FLAG_6(NODE) TREE_LANG_FLAG_6 (TREE_BINFO_CHECK (NODE))
+
+/* The actual data type node being inherited in this basetype.  */
+#define BINFO_TYPE(NODE) TREE_TYPE (TREE_BINFO_CHECK (NODE))
+
+/* The offset where this basetype appears in its containing type.
+   BINFO_OFFSET slot holds the offset (in bytes)
+   from the base of the complete object to the base of the part of the
+   object that is allocated on behalf of this `type'.
+   This is always 0 except when there is multiple inheritance.  */
+
+#define BINFO_OFFSET(NODE) (TREE_BINFO_CHECK (NODE)->binfo.offset)
+#define BINFO_OFFSET_ZEROP(NODE) (integer_zerop (BINFO_OFFSET (NODE)))
+
+/* The virtual function table belonging to this basetype.  Virtual
+   function tables provide a mechanism for run-time method dispatching.
+   The entries of a virtual function table are language-dependent.  */
+
+#define BINFO_VTABLE(NODE) (TREE_BINFO_CHECK (NODE)->binfo.vtable)
+
+/* The virtual functions in the virtual function table.  This is
+   a TREE_LIST that is used as an initial approximation for building
+   a virtual function table for this basetype.  */
+#define BINFO_VIRTUALS(NODE) (TREE_BINFO_CHECK (NODE)->binfo.virtuals)
+
+/* A vector of binfos for the direct basetypes inherited by this
+   basetype.
+
+   If this basetype describes type D as inherited in C, and if the
+   basetypes of D are E and F, then this vector contains binfos for
+   inheritance of E and F by C.  */
+#define BINFO_BASE_BINFOS(NODE) (&TREE_BINFO_CHECK (NODE)->binfo.base_binfos)
+
+/* The number of basetypes for NODE.  */
+#define BINFO_N_BASE_BINFOS(NODE) (BINFO_BASE_BINFOS (NODE)->length ())
+
+/* Accessor macro to get to the Nth base binfo of this binfo.  */
+#define BINFO_BASE_BINFO(NODE,N) \
+ ((*BINFO_BASE_BINFOS (NODE))[(N)])
+#define BINFO_BASE_ITERATE(NODE,N,B) \
+ (BINFO_BASE_BINFOS (NODE)->iterate ((N), &(B)))
+#define BINFO_BASE_APPEND(NODE,T) \
+ (BINFO_BASE_BINFOS (NODE)->quick_push ((T)))
+
+/* For a BINFO record describing a virtual base class, i.e., one where
+   TREE_VIA_VIRTUAL is set, this field assists in locating the virtual
+   base.  The actual contents are language-dependent.  In the C++
+   front-end this field is an INTEGER_CST giving an offset into the
+   vtable where the offset to the virtual base can be found.  */
+#define BINFO_VPTR_FIELD(NODE) (TREE_BINFO_CHECK (NODE)->binfo.vptr_field)
+
+/* Indicates the accesses this binfo has to its bases. The values are
+   access_public_node, access_protected_node or access_private_node.
+   If this array is not present, public access is implied.  */
+#define BINFO_BASE_ACCESSES(NODE) \
+  (TREE_BINFO_CHECK (NODE)->binfo.base_accesses)
+
+#define BINFO_BASE_ACCESS(NODE,N) \
+  (*BINFO_BASE_ACCESSES (NODE))[(N)]
+#define BINFO_BASE_ACCESS_APPEND(NODE,T) \
+  BINFO_BASE_ACCESSES (NODE)->quick_push ((T))
+
+/* The index in the VTT where this subobject's sub-VTT can be found.
+   NULL_TREE if there is no sub-VTT.  */
+#define BINFO_SUBVTT_INDEX(NODE) (TREE_BINFO_CHECK (NODE)->binfo.vtt_subvtt)
+
+/* The index in the VTT where the vptr for this subobject can be
+   found.  NULL_TREE if there is no secondary vptr in the VTT.  */
+#define BINFO_VPTR_INDEX(NODE) (TREE_BINFO_CHECK (NODE)->binfo.vtt_vptr)
+
+/* The BINFO_INHERITANCE_CHAIN points at the binfo for the base
+   inheriting this base for non-virtual bases. For virtual bases it
+   points either to the binfo for which this is a primary binfo, or to
+   the binfo of the most derived type.  */
+#define BINFO_INHERITANCE_CHAIN(NODE) \
+	(TREE_BINFO_CHECK (NODE)->binfo.inheritance)
+
+
+/* Define fields and accessors for nodes representing declared names.  */
+
+/* Nonzero if DECL represents an SSA name or a variable that can possibly
+   have an associated SSA name.  */
+#define SSA_VAR_P(DECL)							\
+	(TREE_CODE (DECL) == VAR_DECL					\
+	 || TREE_CODE (DECL) == PARM_DECL				\
+	 || TREE_CODE (DECL) == RESULT_DECL				\
+	 || TREE_CODE (DECL) == SSA_NAME)
+
+
+#define DECL_CHAIN(NODE) (TREE_CHAIN (DECL_MINIMAL_CHECK (NODE)))
+
+/* This is the name of the object as written by the user.
+   It is an IDENTIFIER_NODE.  */
+#define DECL_NAME(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.name)
+
+/* The IDENTIFIER_NODE associated with the TYPE_NAME field.  */
+#define TYPE_IDENTIFIER(NODE) \
+  (TYPE_NAME (NODE) && DECL_P (TYPE_NAME (NODE)) \
+   ? DECL_NAME (TYPE_NAME (NODE)) : TYPE_NAME (NODE))
+
+/* Every ..._DECL node gets a unique number.  */
+#define DECL_UID(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.uid)
+
+/* DEBUG_EXPR_DECLs get negative UID numbers, to catch erroneous
+   uses.  */
+#define DEBUG_TEMP_UID(NODE) (-DECL_UID (TREE_CHECK ((NODE), DEBUG_EXPR_DECL)))
+
+/* Every ..._DECL node gets a unique number that stays the same even
+   when the decl is copied by the inliner once it is set.  */
+#define DECL_PT_UID(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.pt_uid == -1u \
+   ? (NODE)->decl_minimal.uid : (NODE)->decl_common.pt_uid)
+/* Initialize the ..._DECL node pt-uid to the decls uid.  */
+#define SET_DECL_PT_UID(NODE, UID) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.pt_uid = (UID))
+/* Whether the ..._DECL node pt-uid has been initialized and thus needs to
+   be preserved when copyin the decl.  */
+#define DECL_PT_UID_SET_P(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.pt_uid != -1u)
+
+/* These two fields describe where in the source code the declaration
+   was.  If the declaration appears in several places (as for a C
+   function that is declared first and then defined later), this
+   information should refer to the definition.  */
+#define DECL_SOURCE_LOCATION(NODE) \
+  (DECL_MINIMAL_CHECK (NODE)->decl_minimal.locus)
+#define DECL_SOURCE_FILE(NODE) LOCATION_FILE (DECL_SOURCE_LOCATION (NODE))
+#define DECL_SOURCE_LINE(NODE) LOCATION_LINE (DECL_SOURCE_LOCATION (NODE))
+#define DECL_SOURCE_COLUMN(NODE) LOCATION_COLUMN (DECL_SOURCE_LOCATION (NODE))
+/* This accessor returns TRUE if the decl it operates on was created
+   by a front-end or back-end rather than by user code.  In this case
+   builtin-ness is indicated by source location.  */
+#define DECL_IS_BUILTIN(DECL) \
+  (LOCATION_LOCUS (DECL_SOURCE_LOCATION (DECL)) <= BUILTINS_LOCATION)
+
+/*  For FIELD_DECLs, this is the RECORD_TYPE, UNION_TYPE, or
+    QUAL_UNION_TYPE node that the field is a member of.  For VAR_DECL,
+    PARM_DECL, FUNCTION_DECL, LABEL_DECL, RESULT_DECL, and CONST_DECL
+    nodes, this points to either the FUNCTION_DECL for the containing
+    function, the RECORD_TYPE or UNION_TYPE for the containing type, or
+    NULL_TREE or a TRANSLATION_UNIT_DECL if the given decl has "file
+    scope".  In particular, for VAR_DECLs which are virtual table pointers
+    (they have DECL_VIRTUAL set), we use DECL_CONTEXT to determine the type
+    they belong to.  */
+#define DECL_CONTEXT(NODE) (DECL_MINIMAL_CHECK (NODE)->decl_minimal.context)
+#define DECL_FIELD_CONTEXT(NODE) \
+  (FIELD_DECL_CHECK (NODE)->decl_minimal.context)
+
+/* If nonzero, decl's name shouldn't be emitted into debug info.  */
+#define DECL_NAMELESS(NODE) (DECL_MINIMAL_CHECK (NODE)->base.u.bits.nameless_flag)
+
+/* For any sort of a ..._DECL node, this points to the original (abstract)
+   decl node which this decl is an inlined/cloned instance of, or else it
+   is NULL indicating that this decl is not an instance of some other decl.
+
+   The C front-end also uses this in a nested declaration of an inline
+   function, to point back to the definition.  */
+#define DECL_ABSTRACT_ORIGIN(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.abstract_origin)
+
+/* Like DECL_ABSTRACT_ORIGIN, but returns NODE if there's no abstract
+   origin.  This is useful when setting the DECL_ABSTRACT_ORIGIN.  */
+#define DECL_ORIGIN(NODE) \
+  (DECL_ABSTRACT_ORIGIN (NODE) ? DECL_ABSTRACT_ORIGIN (NODE) : (NODE))
+
+/* Nonzero for any sort of ..._DECL node means this decl node represents an
+   inline instance of some original (abstract) decl from an inline function;
+   suppress any warnings about shadowing some other variable.  FUNCTION_DECL
+   nodes can also have their abstract origin set to themselves.  */
+#define DECL_FROM_INLINE(NODE) \
+  (DECL_ABSTRACT_ORIGIN (NODE) != NULL_TREE \
+   && DECL_ABSTRACT_ORIGIN (NODE) != (NODE))
+
+/* In a DECL this is the field where attributes are stored.  */
+#define DECL_ATTRIBUTES(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.attributes)
+
+/* For a FUNCTION_DECL, holds the tree of BINDINGs.
+   For a TRANSLATION_UNIT_DECL, holds the namespace's BLOCK.
+   For a VAR_DECL, holds the initial value.
+   For a PARM_DECL, used for DECL_ARG_TYPE--default
+   values for parameters are encoded in the type of the function,
+   not in the PARM_DECL slot.
+   For a FIELD_DECL, this is used for enumeration values and the C
+   frontend uses it for temporarily storing bitwidth of bitfields.
+
+   ??? Need to figure out some way to check this isn't a PARM_DECL.  */
+#define DECL_INITIAL(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.initial)
+
+/* Holds the size of the datum, in bits, as a tree expression.
+   Need not be constant.  */
+#define DECL_SIZE(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.size)
+/* Likewise for the size in bytes.  */
+#define DECL_SIZE_UNIT(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.size_unit)
+/* Returns the alignment required for the datum, in bits.  It must
+   be a power of two, but an "alignment" of zero is supported
+   (e.g. as "uninitialized" sentinel).  */
+#define DECL_ALIGN(NODE) \
+    (DECL_COMMON_CHECK (NODE)->decl_common.align \
+     ? ((unsigned)1) << ((NODE)->decl_common.align - 1) : 0)
+/* Specify that DECL_ALIGN(NODE) is X.  */
+#define SET_DECL_ALIGN(NODE, X) \
+    (DECL_COMMON_CHECK (NODE)->decl_common.align = ffs_hwi (X))
+
+/* The minimum alignment necessary for the datum, in bits, without
+   warning.  */
+#define DECL_WARN_IF_NOT_ALIGN(NODE) \
+    (DECL_COMMON_CHECK (NODE)->decl_common.warn_if_not_align \
+     ? ((unsigned)1) << ((NODE)->decl_common.warn_if_not_align - 1) : 0)
+
+/* Specify that DECL_WARN_IF_NOT_ALIGN(NODE) is X.  */
+#define SET_DECL_WARN_IF_NOT_ALIGN(NODE, X) \
+    (DECL_COMMON_CHECK (NODE)->decl_common.warn_if_not_align = ffs_hwi (X))
+
+/* The alignment of NODE, in bytes.  */
+#define DECL_ALIGN_UNIT(NODE) (DECL_ALIGN (NODE) / BITS_PER_UNIT)
+/* Set if the alignment of this DECL has been set by the user, for
+   example with an 'aligned' attribute.  */
+#define DECL_USER_ALIGN(NODE) \
+  (DECL_COMMON_CHECK (NODE)->base.u.bits.user_align)
+/* Holds the machine mode corresponding to the declaration of a variable or
+   field.  Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a
+   FIELD_DECL.  */
+#define DECL_MODE(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.mode)
+#define SET_DECL_MODE(NODE, MODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.mode = (MODE))
+
+/* For FUNCTION_DECL, if it is built-in, this identifies which built-in
+   operation it is.  Note, however, that this field is overloaded, with
+   DECL_BUILT_IN_CLASS as the discriminant, so the latter must always be
+   checked before any access to the former.  */
+#define DECL_FUNCTION_CODE(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.function_code)
+
+/* Test if FCODE is a function code for an alloca operation.  */
+#define ALLOCA_FUNCTION_CODE_P(FCODE)				\
+  ((FCODE) == BUILT_IN_ALLOCA					\
+   || (FCODE) == BUILT_IN_ALLOCA_WITH_ALIGN			\
+   || (FCODE) == BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX)
+
+/* Generate case for an alloca operation.  */
+#define CASE_BUILT_IN_ALLOCA			\
+  case BUILT_IN_ALLOCA:				\
+  case BUILT_IN_ALLOCA_WITH_ALIGN:		\
+  case BUILT_IN_ALLOCA_WITH_ALIGN_AND_MAX
+
+#define DECL_FUNCTION_PERSONALITY(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.personality)
+
+/* Nonzero for a given ..._DECL node means that the name of this node should
+   be ignored for symbolic debug purposes.  For a TYPE_DECL, this means that
+   the associated type should be ignored.  For a FUNCTION_DECL, the body of
+   the function should also be ignored.  */
+#define DECL_IGNORED_P(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.ignored_flag)
+
+/* Nonzero for a given ..._DECL node means that this node represents an
+   "abstract instance" of the given declaration (e.g. in the original
+   declaration of an inline function).  When generating symbolic debugging
+   information, we mustn't try to generate any address information for nodes
+   marked as "abstract instances" because we don't actually generate
+   any code or allocate any data space for such instances.  */
+#define DECL_ABSTRACT_P(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.abstract_flag)
+
+/* Language-specific decl information.  */
+#define DECL_LANG_SPECIFIC(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.lang_specific)
+
+/* In a VAR_DECL or FUNCTION_DECL, nonzero means external reference:
+   do not allocate storage, and refer to a definition elsewhere.  Note that
+   this does not necessarily imply the entity represented by NODE
+   has no program source-level definition in this translation unit.  For
+   example, for a FUNCTION_DECL, DECL_SAVED_TREE may be non-NULL and
+   DECL_EXTERNAL may be true simultaneously; that can be the case for
+   a C99 "extern inline" function.  */
+#define DECL_EXTERNAL(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.decl_flag_1)
+
+/* Nonzero in a ..._DECL means this variable is ref'd from a nested function.
+   For VAR_DECL nodes, PARM_DECL nodes, and FUNCTION_DECL nodes.
+
+   For LABEL_DECL nodes, nonzero if nonlocal gotos to the label are permitted.
+
+   Also set in some languages for variables, etc., outside the normal
+   lexical scope, such as class instance variables.  */
+#define DECL_NONLOCAL(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.nonlocal_flag)
+
+/* Used in VAR_DECLs to indicate that the variable is a vtable.
+   Used in FIELD_DECLs for vtable pointers.
+   Used in FUNCTION_DECLs to indicate that the function is virtual.  */
+#define DECL_VIRTUAL_P(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.virtual_flag)
+
+/* Used to indicate that this DECL represents a compiler-generated entity.  */
+#define DECL_ARTIFICIAL(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.artificial_flag)
+
+/* Additional flags for language-specific uses.  */
+#define DECL_LANG_FLAG_0(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_0)
+#define DECL_LANG_FLAG_1(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_1)
+#define DECL_LANG_FLAG_2(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_2)
+#define DECL_LANG_FLAG_3(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_3)
+#define DECL_LANG_FLAG_4(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_4)
+#define DECL_LANG_FLAG_5(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_5)
+#define DECL_LANG_FLAG_6(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_6)
+#define DECL_LANG_FLAG_7(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_7)
+#define DECL_LANG_FLAG_8(NODE) \
+  (DECL_COMMON_CHECK (NODE)->decl_common.lang_flag_8)
+
+/* Nonzero for a scope which is equal to file scope.  */
+#define SCOPE_FILE_SCOPE_P(EXP)	\
+  (! (EXP) || TREE_CODE (EXP) == TRANSLATION_UNIT_DECL)
+/* Nonzero for a decl which is at file scope.  */
+#define DECL_FILE_SCOPE_P(EXP) SCOPE_FILE_SCOPE_P (DECL_CONTEXT (EXP))
+/* Nonzero for a type which is at file scope.  */
+#define TYPE_FILE_SCOPE_P(EXP) SCOPE_FILE_SCOPE_P (TYPE_CONTEXT (EXP))
+
+/* Nonzero for a decl that is decorated using attribute used.
+   This indicates to compiler tools that this decl needs to be preserved.  */
+#define DECL_PRESERVE_P(DECL) \
+  DECL_COMMON_CHECK (DECL)->decl_common.preserve_flag
+
+/* For function local variables of COMPLEX and VECTOR types,
+   indicates that the variable is not aliased, and that all
+   modifications to the variable have been adjusted so that
+   they are killing assignments.  Thus the variable may now
+   be treated as a GIMPLE register, and use real instead of
+   virtual ops in SSA form.  */
+#define DECL_GIMPLE_REG_P(DECL) \
+  DECL_COMMON_CHECK (DECL)->decl_common.gimple_reg_flag
+
+extern tree decl_value_expr_lookup (tree);
+extern void decl_value_expr_insert (tree, tree);
+
+/* In a VAR_DECL or PARM_DECL, the location at which the value may be found,
+   if transformations have made this more complicated than evaluating the
+   decl itself.  */
+#define DECL_HAS_VALUE_EXPR_P(NODE) \
+  (TREE_CHECK3 (NODE, VAR_DECL, PARM_DECL, RESULT_DECL) \
+   ->decl_common.decl_flag_2)
+#define DECL_VALUE_EXPR(NODE) \
+  (decl_value_expr_lookup (DECL_WRTL_CHECK (NODE)))
+#define SET_DECL_VALUE_EXPR(NODE, VAL) \
+  (decl_value_expr_insert (DECL_WRTL_CHECK (NODE), VAL))
+
+/* Holds the RTL expression for the value of a variable or function.
+   This value can be evaluated lazily for functions, variables with
+   static storage duration, and labels.  */
+#define DECL_RTL(NODE)					\
+  (DECL_WRTL_CHECK (NODE)->decl_with_rtl.rtl		\
+   ? (NODE)->decl_with_rtl.rtl					\
+   : (make_decl_rtl (NODE), (NODE)->decl_with_rtl.rtl))
+
+/* Set the DECL_RTL for NODE to RTL.  */
+#define SET_DECL_RTL(NODE, RTL) set_decl_rtl (NODE, RTL)
+
+/* Returns nonzero if NODE is a tree node that can contain RTL.  */
+#define HAS_RTL_P(NODE) (CODE_CONTAINS_STRUCT (TREE_CODE (NODE), TS_DECL_WRTL))
+
+/* Returns nonzero if the DECL_RTL for NODE has already been set.  */
+#define DECL_RTL_SET_P(NODE) \
+  (HAS_RTL_P (NODE) && DECL_WRTL_CHECK (NODE)->decl_with_rtl.rtl != NULL)
+
+/* Copy the RTL from SRC_DECL to DST_DECL.  If the RTL was not set for
+   SRC_DECL, it will not be set for DST_DECL; this is a lazy copy.  */
+#define COPY_DECL_RTL(SRC_DECL, DST_DECL) \
+  (DECL_WRTL_CHECK (DST_DECL)->decl_with_rtl.rtl \
+   = DECL_WRTL_CHECK (SRC_DECL)->decl_with_rtl.rtl)
+
+/* The DECL_RTL for NODE, if it is set, or NULL, if it is not set.  */
+#define DECL_RTL_IF_SET(NODE) (DECL_RTL_SET_P (NODE) ? DECL_RTL (NODE) : NULL)
+
+#if (GCC_VERSION >= 2007)
+#define DECL_RTL_KNOWN_SET(decl) __extension__				\
+({  tree const __d = (decl);						\
+    gcc_checking_assert (DECL_RTL_SET_P (__d));				\
+    /* Dereference it so the compiler knows it can't be NULL even	\
+       without assertion checking.  */					\
+    &*DECL_RTL_IF_SET (__d); })
+#else
+#define DECL_RTL_KNOWN_SET(decl) (&*DECL_RTL_IF_SET (decl))
+#endif
+
+/* In VAR_DECL and PARM_DECL nodes, nonzero means declared `register'.  */
+#define DECL_REGISTER(NODE) (DECL_WRTL_CHECK (NODE)->decl_common.decl_flag_0)
+
+/* In a FIELD_DECL, this is the field position, counting in bytes, of the
+   DECL_OFFSET_ALIGN-bit-sized word containing the bit closest to the beginning
+   of the structure.  */
+#define DECL_FIELD_OFFSET(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.offset)
+
+/* In a FIELD_DECL, this is the offset, in bits, of the first bit of the
+   field from DECL_FIELD_OFFSET.  This field may be nonzero even for fields
+   that are not bit fields (since DECL_OFFSET_ALIGN may be larger than the
+   natural alignment of the field's type).  */
+#define DECL_FIELD_BIT_OFFSET(NODE) \
+  (FIELD_DECL_CHECK (NODE)->field_decl.bit_offset)
+
+/* In a FIELD_DECL, this indicates whether the field was a bit-field and
+   if so, the type that was originally specified for it.
+   TREE_TYPE may have been modified (in finish_struct).  */
+#define DECL_BIT_FIELD_TYPE(NODE) \
+  (FIELD_DECL_CHECK (NODE)->field_decl.bit_field_type)
+
+/* In a FIELD_DECL of a RECORD_TYPE, this is a pointer to the storage
+   representative FIELD_DECL.  */
+#define DECL_BIT_FIELD_REPRESENTATIVE(NODE) \
+  (FIELD_DECL_CHECK (NODE)->field_decl.qualifier)
+
+/* For a FIELD_DECL in a QUAL_UNION_TYPE, records the expression, which
+   if nonzero, indicates that the field occupies the type.  */
+#define DECL_QUALIFIER(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.qualifier)
+
+/* For FIELD_DECLs, off_align holds the number of low-order bits of
+   DECL_FIELD_OFFSET which are known to be always zero.
+   DECL_OFFSET_ALIGN thus returns the alignment that DECL_FIELD_OFFSET
+   has.  */
+#define DECL_OFFSET_ALIGN(NODE) \
+  (((unsigned HOST_WIDE_INT)1) << FIELD_DECL_CHECK (NODE)->decl_common.off_align)
+
+/* Specify that DECL_OFFSET_ALIGN(NODE) is X.  */
+#define SET_DECL_OFFSET_ALIGN(NODE, X) \
+  (FIELD_DECL_CHECK (NODE)->decl_common.off_align = ffs_hwi (X) - 1)
+
+/* For FIELD_DECLS, DECL_FCONTEXT is the *first* baseclass in
+   which this FIELD_DECL is defined.  This information is needed when
+   writing debugging information about vfield and vbase decls for C++.  */
+#define DECL_FCONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.fcontext)
+
+/* In a FIELD_DECL, indicates this field should be bit-packed.  */
+#define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->base.u.bits.packed_flag)
+
+/* Nonzero in a FIELD_DECL means it is a bit field, and must be accessed
+   specially.  */
+#define DECL_BIT_FIELD(NODE) (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_1)
+
+/* Used in a FIELD_DECL to indicate that we cannot form the address of
+   this component.  This makes it possible for Type-Based Alias Analysis
+   to disambiguate accesses to this field with indirect accesses using
+   the field's type:
+
+     struct S { int i; } s;
+     int *p;
+
+   If the flag is set on 'i', TBAA computes that s.i and *p never conflict.
+
+   From the implementation's viewpoint, the alias set of the type of the
+   field 'i' (int) will not be recorded as a subset of that of the type of
+   's' (struct S) in record_component_aliases.  The counterpart is that
+   accesses to s.i must not be given the alias set of the type of 'i'
+   (int) but instead directly that of the type of 's' (struct S).  */
+#define DECL_NONADDRESSABLE_P(NODE) \
+  (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_2)
+
+/* Used in a FIELD_DECL to indicate that this field is padding.  */
+#define DECL_PADDING_P(NODE) \
+  (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_3)
+
+/* A numeric unique identifier for a LABEL_DECL.  The UID allocation is
+   dense, unique within any one function, and may be used to index arrays.
+   If the value is -1, then no UID has been assigned.  */
+#define LABEL_DECL_UID(NODE) \
+  (LABEL_DECL_CHECK (NODE)->label_decl.label_decl_uid)
+
+/* In a LABEL_DECL, the EH region number for which the label is the
+   post_landing_pad.  */
+#define EH_LANDING_PAD_NR(NODE) \
+  (LABEL_DECL_CHECK (NODE)->label_decl.eh_landing_pad_nr)
+
+/* For a PARM_DECL, records the data type used to pass the argument,
+   which may be different from the type seen in the program.  */
+#define DECL_ARG_TYPE(NODE) (PARM_DECL_CHECK (NODE)->decl_common.initial)
+
+/* For PARM_DECL, holds an RTL for the stack slot or register
+   where the data was actually passed.  */
+#define DECL_INCOMING_RTL(NODE) \
+  (PARM_DECL_CHECK (NODE)->parm_decl.incoming_rtl)
+
+/* Nonzero for a given ..._DECL node means that no warnings should be
+   generated just because this node is unused.  */
+#define DECL_IN_SYSTEM_HEADER(NODE) \
+  (in_system_header_at (DECL_SOURCE_LOCATION (NODE)))
+
+/* Used to indicate that the linkage status of this DECL is not yet known,
+   so it should not be output now.  */
+#define DECL_DEFER_OUTPUT(NODE) \
+  (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.defer_output)
+
+/* In a VAR_DECL that's static,
+   nonzero if the space is in the text section.  */
+#define DECL_IN_TEXT_SECTION(NODE) \
+  (VAR_DECL_CHECK (NODE)->decl_with_vis.in_text_section)
+
+/* In a VAR_DECL that's static,
+   nonzero if it belongs to the global constant pool.  */
+#define DECL_IN_CONSTANT_POOL(NODE) \
+  (VAR_DECL_CHECK (NODE)->decl_with_vis.in_constant_pool)
+
+/* Nonzero for a given ..._DECL node means that this node should be
+   put in .common, if possible.  If a DECL_INITIAL is given, and it
+   is not error_mark_node, then the decl cannot be put in .common.  */
+#define DECL_COMMON(NODE) \
+  (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.common_flag)
+
+/* In a VAR_DECL, nonzero if the decl is a register variable with
+   an explicit asm specification.  */
+#define DECL_HARD_REGISTER(NODE)  \
+  (VAR_DECL_CHECK (NODE)->decl_with_vis.hard_register)
+
+  /* Used to indicate that this DECL has weak linkage.  */
+#define DECL_WEAK(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.weak_flag)
+
+/* Used to indicate that the DECL is a dllimport.  */
+#define DECL_DLLIMPORT_P(NODE) \
+  (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.dllimport_flag)
+
+/* Used in a DECL to indicate that, even if it TREE_PUBLIC, it need
+   not be put out unless it is needed in this translation unit.
+   Entities like this are shared across translation units (like weak
+   entities), but are guaranteed to be generated by any translation
+   unit that needs them, and therefore need not be put out anywhere
+   where they are not needed.  DECL_COMDAT is just a hint to the
+   back-end; it is up to front-ends which set this flag to ensure
+   that there will never be any harm, other than bloat, in putting out
+   something which is DECL_COMDAT.  */
+#define DECL_COMDAT(NODE) \
+  (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.comdat_flag)
+
+#define DECL_COMDAT_GROUP(NODE) \
+  decl_comdat_group (NODE)
+
+/* Used in TREE_PUBLIC decls to indicate that copies of this DECL in
+   multiple translation units should be merged.  */
+#define DECL_ONE_ONLY(NODE) (DECL_COMDAT_GROUP (NODE) != NULL_TREE \
+			     && (TREE_PUBLIC (NODE) || DECL_EXTERNAL (NODE)))
+
+/* The name of the object as the assembler will see it (but before any
+   translations made by ASM_OUTPUT_LABELREF).  Often this is the same
+   as DECL_NAME.  It is an IDENTIFIER_NODE.
+
+   ASSEMBLER_NAME of TYPE_DECLS may store global name of type used for
+   One Definition Rule based type merging at LTO.  It is computed only for
+   LTO compilation and C++.  */
+#define DECL_ASSEMBLER_NAME(NODE) decl_assembler_name (NODE)
+
+/* Raw accessor for DECL_ASSEMBLE_NAME.  */
+#define DECL_ASSEMBLER_NAME_RAW(NODE) \
+  (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.assembler_name)
+
+/* Return true if NODE is a NODE that can contain a DECL_ASSEMBLER_NAME.
+   This is true of all DECL nodes except FIELD_DECL.  */
+#define HAS_DECL_ASSEMBLER_NAME_P(NODE) \
+  (CODE_CONTAINS_STRUCT (TREE_CODE (NODE), TS_DECL_WITH_VIS))
+
+/* Returns nonzero if the DECL_ASSEMBLER_NAME for NODE has been set.  If zero,
+   the NODE might still have a DECL_ASSEMBLER_NAME -- it just hasn't been set
+   yet.  */
+#define DECL_ASSEMBLER_NAME_SET_P(NODE) \
+  (DECL_ASSEMBLER_NAME_RAW (NODE) != NULL_TREE)
+
+/* Set the DECL_ASSEMBLER_NAME for NODE to NAME.  */
+#define SET_DECL_ASSEMBLER_NAME(NODE, NAME) \
+  overwrite_decl_assembler_name (NODE, NAME)
+
+/* Copy the DECL_ASSEMBLER_NAME from SRC_DECL to DST_DECL.  Note that
+   if SRC_DECL's DECL_ASSEMBLER_NAME has not yet been set, using this
+   macro will not cause the DECL_ASSEMBLER_NAME to be set, but will
+   clear DECL_ASSEMBLER_NAME of DST_DECL, if it was already set.  In
+   other words, the semantics of using this macro, are different than
+   saying:
+
+     SET_DECL_ASSEMBLER_NAME(DST_DECL, DECL_ASSEMBLER_NAME (SRC_DECL))
+
+   which will try to set the DECL_ASSEMBLER_NAME for SRC_DECL.  */
+
+#define COPY_DECL_ASSEMBLER_NAME(SRC_DECL, DST_DECL)			\
+  SET_DECL_ASSEMBLER_NAME (DST_DECL, DECL_ASSEMBLER_NAME_RAW (SRC_DECL))
+
+/* Records the section name in a section attribute.  Used to pass
+   the name from decl_attributes to make_function_rtl and make_decl_rtl.  */
+#define DECL_SECTION_NAME(NODE) decl_section_name (NODE)
+
+/* Nonzero in a decl means that the gimplifier has seen (or placed)
+   this variable in a BIND_EXPR.  */
+#define DECL_SEEN_IN_BIND_EXPR_P(NODE) \
+  (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.seen_in_bind_expr)
+
+/* Value of the decls's visibility attribute */
+#define DECL_VISIBILITY(NODE) \
+  (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.visibility)
+
+/* Nonzero means that the decl had its visibility specified rather than
+   being inferred.  */
+#define DECL_VISIBILITY_SPECIFIED(NODE) \
+  (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.visibility_specified)
+
+/* In a VAR_DECL, the model to use if the data should be allocated from
+   thread-local storage.  */
+#define DECL_TLS_MODEL(NODE) decl_tls_model (NODE)
+
+/* In a VAR_DECL, nonzero if the data should be allocated from
+   thread-local storage.  */
+#define DECL_THREAD_LOCAL_P(NODE) \
+  ((TREE_STATIC (NODE) || DECL_EXTERNAL (NODE)) && decl_tls_model (NODE) >= TLS_MODEL_REAL)
+
+/* In a non-local VAR_DECL with static storage duration, true if the
+   variable has an initialization priority.  If false, the variable
+   will be initialized at the DEFAULT_INIT_PRIORITY.  */
+#define DECL_HAS_INIT_PRIORITY_P(NODE) \
+  (VAR_DECL_CHECK (NODE)->decl_with_vis.init_priority_p)
+
+extern tree decl_debug_expr_lookup (tree);
+extern void decl_debug_expr_insert (tree, tree);
+
+/* For VAR_DECL, this is set to an expression that it was split from.  */
+#define DECL_HAS_DEBUG_EXPR_P(NODE) \
+  (VAR_DECL_CHECK (NODE)->decl_common.debug_expr_is_from)
+#define DECL_DEBUG_EXPR(NODE) \
+  (decl_debug_expr_lookup (VAR_DECL_CHECK (NODE)))
+
+#define SET_DECL_DEBUG_EXPR(NODE, VAL) \
+  (decl_debug_expr_insert (VAR_DECL_CHECK (NODE), VAL))
+
+extern priority_type decl_init_priority_lookup (tree);
+extern priority_type decl_fini_priority_lookup (tree);
+extern void decl_init_priority_insert (tree, priority_type);
+extern void decl_fini_priority_insert (tree, priority_type);
+
+/* For a VAR_DECL or FUNCTION_DECL the initialization priority of
+   NODE.  */
+#define DECL_INIT_PRIORITY(NODE) \
+  (decl_init_priority_lookup (NODE))
+/* Set the initialization priority for NODE to VAL.  */
+#define SET_DECL_INIT_PRIORITY(NODE, VAL) \
+  (decl_init_priority_insert (NODE, VAL))
+
+/* For a FUNCTION_DECL the finalization priority of NODE.  */
+#define DECL_FINI_PRIORITY(NODE) \
+  (decl_fini_priority_lookup (NODE))
+/* Set the finalization priority for NODE to VAL.  */
+#define SET_DECL_FINI_PRIORITY(NODE, VAL) \
+  (decl_fini_priority_insert (NODE, VAL))
+
+/* The initialization priority for entities for which no explicit
+   initialization priority has been specified.  */
+#define DEFAULT_INIT_PRIORITY 65535
+
+/* The maximum allowed initialization priority.  */
+#define MAX_INIT_PRIORITY 65535
+
+/* The largest priority value reserved for use by system runtime
+   libraries.  */
+#define MAX_RESERVED_INIT_PRIORITY 100
+
+/* In a VAR_DECL, nonzero if this is a global variable for VOPs.  */
+#define VAR_DECL_IS_VIRTUAL_OPERAND(NODE) \
+  (VAR_DECL_CHECK (NODE)->base.u.bits.saturating_flag)
+
+/* In a VAR_DECL, nonzero if this is a non-local frame structure.  */
+#define DECL_NONLOCAL_FRAME(NODE)  \
+  (VAR_DECL_CHECK (NODE)->base.default_def_flag)
+
+/* In a VAR_DECL, nonzero if this variable is not aliased by any pointer.  */
+#define DECL_NONALIASED(NODE) \
+  (VAR_DECL_CHECK (NODE)->base.nothrow_flag)
+
+/* This field is used to reference anything in decl.result and is meant only
+   for use by the garbage collector.  */
+#define DECL_RESULT_FLD(NODE) \
+  (DECL_NON_COMMON_CHECK (NODE)->decl_non_common.result)
+
+/* The DECL_VINDEX is used for FUNCTION_DECLS in two different ways.
+   Before the struct containing the FUNCTION_DECL is laid out,
+   DECL_VINDEX may point to a FUNCTION_DECL in a base class which
+   is the FUNCTION_DECL which this FUNCTION_DECL will replace as a virtual
+   function.  When the class is laid out, this pointer is changed
+   to an INTEGER_CST node which is suitable for use as an index
+   into the virtual function table. */
+#define DECL_VINDEX(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.vindex)
+
+/* In FUNCTION_DECL, holds the decl for the return value.  */
+#define DECL_RESULT(NODE) (FUNCTION_DECL_CHECK (NODE)->decl_non_common.result)
+
+/* In a FUNCTION_DECL, nonzero if the function cannot be inlined.  */
+#define DECL_UNINLINABLE(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.uninlinable)
+
+/* In a FUNCTION_DECL, the saved representation of the body of the
+   entire function.  */
+#define DECL_SAVED_TREE(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.saved_tree)
+
+/* Nonzero in a FUNCTION_DECL means this function should be treated
+   as if it were a malloc, meaning it returns a pointer that is
+   not an alias.  */
+#define DECL_IS_MALLOC(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.malloc_flag)
+
+/* Nonzero in a FUNCTION_DECL means this function should be treated as
+   C++ operator new, meaning that it returns a pointer for which we
+   should not use type based aliasing.  */
+#define DECL_IS_OPERATOR_NEW(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.operator_new_flag)
+
+/* Nonzero in a FUNCTION_DECL means this function may return more
+   than once.  */
+#define DECL_IS_RETURNS_TWICE(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.returns_twice_flag)
+
+/* Nonzero in a FUNCTION_DECL means this function should be treated
+   as "pure" function (like const function, but may read global memory).  */
+#define DECL_PURE_P(NODE) (FUNCTION_DECL_CHECK (NODE)->function_decl.pure_flag)
+
+/* Nonzero only if one of TREE_READONLY or DECL_PURE_P is nonzero AND
+   the const or pure function may not terminate.  When this is nonzero
+   for a const or pure function, it can be dealt with by cse passes
+   but cannot be removed by dce passes since you are not allowed to
+   change an infinite looping program into one that terminates without
+   error.  */
+#define DECL_LOOPING_CONST_OR_PURE_P(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.looping_const_or_pure_flag)
+
+/* Nonzero in a FUNCTION_DECL means this function should be treated
+   as "novops" function (function that does not read global memory,
+   but may have arbitrary side effects).  */
+#define DECL_IS_NOVOPS(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.novops_flag)
+
+/* Used in FUNCTION_DECLs to indicate that they should be run automatically
+   at the beginning or end of execution.  */
+#define DECL_STATIC_CONSTRUCTOR(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.static_ctor_flag)
+
+#define DECL_STATIC_DESTRUCTOR(NODE) \
+(FUNCTION_DECL_CHECK (NODE)->function_decl.static_dtor_flag)
+
+/* Used in FUNCTION_DECLs to indicate that function entry and exit should
+   be instrumented with calls to support routines.  */
+#define DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.no_instrument_function_entry_exit)
+
+/* Used in FUNCTION_DECLs to indicate that limit-stack-* should be
+   disabled in this function.  */
+#define DECL_NO_LIMIT_STACK(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.no_limit_stack)
+
+/* In a FUNCTION_DECL indicates that a static chain is needed.  */
+#define DECL_STATIC_CHAIN(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->decl_with_vis.regdecl_flag)
+
+/* Nonzero for a decl that cgraph has decided should be inlined into
+   at least one call site.  It is not meaningful to look at this
+   directly; always use cgraph_function_possibly_inlined_p.  */
+#define DECL_POSSIBLY_INLINED(DECL) \
+  FUNCTION_DECL_CHECK (DECL)->function_decl.possibly_inlined
+
+/* Nonzero in a FUNCTION_DECL means that this function was declared inline,
+   such as via the `inline' keyword in C/C++.  This flag controls the linkage
+   semantics of 'inline'  */
+#define DECL_DECLARED_INLINE_P(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.declared_inline_flag)
+
+/* Nonzero in a FUNCTION_DECL means this function should not get
+   -Winline warnings.  */
+#define DECL_NO_INLINE_WARNING_P(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.no_inline_warning_flag)
+
+/* Nonzero if a FUNCTION_CODE is a TM load/store.  */
+#define BUILTIN_TM_LOAD_STORE_P(FN) \
+  ((FN) >= BUILT_IN_TM_STORE_1 && (FN) <= BUILT_IN_TM_LOAD_RFW_LDOUBLE)
+
+/* Nonzero if a FUNCTION_CODE is a TM load.  */
+#define BUILTIN_TM_LOAD_P(FN) \
+  ((FN) >= BUILT_IN_TM_LOAD_1 && (FN) <= BUILT_IN_TM_LOAD_RFW_LDOUBLE)
+
+/* Nonzero if a FUNCTION_CODE is a TM store.  */
+#define BUILTIN_TM_STORE_P(FN) \
+  ((FN) >= BUILT_IN_TM_STORE_1 && (FN) <= BUILT_IN_TM_STORE_WAW_LDOUBLE)
+
+#define CASE_BUILT_IN_TM_LOAD(FN)	\
+  case BUILT_IN_TM_LOAD_##FN:		\
+  case BUILT_IN_TM_LOAD_RAR_##FN:	\
+  case BUILT_IN_TM_LOAD_RAW_##FN:	\
+  case BUILT_IN_TM_LOAD_RFW_##FN
+
+#define CASE_BUILT_IN_TM_STORE(FN)	\
+  case BUILT_IN_TM_STORE_##FN:		\
+  case BUILT_IN_TM_STORE_WAR_##FN:	\
+  case BUILT_IN_TM_STORE_WAW_##FN
+
+/* Nonzero in a FUNCTION_DECL that should be always inlined by the inliner
+   disregarding size and cost heuristics.  This is equivalent to using
+   the always_inline attribute without the required diagnostics if the
+   function cannot be inlined.  */
+#define DECL_DISREGARD_INLINE_LIMITS(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.disregard_inline_limits)
+
+extern vec<tree, va_gc> **decl_debug_args_lookup (tree);
+extern vec<tree, va_gc> **decl_debug_args_insert (tree);
+
+/* Nonzero if a FUNCTION_DECL has DEBUG arguments attached to it.  */
+#define DECL_HAS_DEBUG_ARGS_P(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.has_debug_args_flag)
+
+/* For FUNCTION_DECL, this holds a pointer to a structure ("struct function")
+   that describes the status of this function.  */
+#define DECL_STRUCT_FUNCTION(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.f)
+
+
+/* For a builtin function, identify which part of the compiler defined it.  */
+#define DECL_BUILT_IN_CLASS(NODE) \
+   (FUNCTION_DECL_CHECK (NODE)->function_decl.built_in_class)
+
+/* In FUNCTION_DECL, a chain of ..._DECL nodes.  */
+#define DECL_ARGUMENTS(NODE) \
+   (FUNCTION_DECL_CHECK (NODE)->function_decl.arguments)
+
+/* In FUNCTION_DECL, the function specific target options to use when compiling
+   this function.  */
+#define DECL_FUNCTION_SPECIFIC_TARGET(NODE) \
+   (FUNCTION_DECL_CHECK (NODE)->function_decl.function_specific_target)
+
+/* In FUNCTION_DECL, the function specific optimization options to use when
+   compiling this function.  */
+#define DECL_FUNCTION_SPECIFIC_OPTIMIZATION(NODE) \
+   (FUNCTION_DECL_CHECK (NODE)->function_decl.function_specific_optimization)
+
+/* In FUNCTION_DECL, this is set if this function has other versions generated
+   using "target" attributes.  The default version is the one which does not
+   have any "target" attribute set. */
+#define DECL_FUNCTION_VERSIONED(NODE)\
+   (FUNCTION_DECL_CHECK (NODE)->function_decl.versioned_function)
+
+/* In FUNCTION_DECL, this is set if this function is a C++ constructor.
+   Devirtualization machinery uses this knowledge for determing type of the
+   object constructed.  Also we assume that constructor address is not
+   important.  */
+#define DECL_CXX_CONSTRUCTOR_P(NODE)\
+   (FUNCTION_DECL_CHECK (NODE)->decl_with_vis.cxx_constructor)
+
+/* In FUNCTION_DECL, this is set if this function is a C++ destructor.
+   Devirtualization machinery uses this to track types in destruction.  */
+#define DECL_CXX_DESTRUCTOR_P(NODE)\
+   (FUNCTION_DECL_CHECK (NODE)->decl_with_vis.cxx_destructor)
+
+/* In FUNCTION_DECL, this is set if this function is a lambda function.  */
+#define DECL_LAMBDA_FUNCTION(NODE) \
+  (FUNCTION_DECL_CHECK (NODE)->function_decl.lambda_function)
+
+/* In FUNCTION_DECL that represent an virtual method this is set when
+   the method is final.  */
+#define DECL_FINAL_P(NODE)\
+   (FUNCTION_DECL_CHECK (NODE)->decl_with_vis.final)
+
+/* The source language of the translation-unit.  */
+#define TRANSLATION_UNIT_LANGUAGE(NODE) \
+  (TRANSLATION_UNIT_DECL_CHECK (NODE)->translation_unit_decl.language)
+
+/* TRANSLATION_UNIT_DECL inherits from DECL_MINIMAL.  */
+
+/* For a TYPE_DECL, holds the "original" type.  (TREE_TYPE has the copy.) */
+#define DECL_ORIGINAL_TYPE(NODE) \
+  (TYPE_DECL_CHECK (NODE)->decl_non_common.result)
+
+/* In a TYPE_DECL nonzero means the detail info about this type is not dumped
+   into stabs.  Instead it will generate cross reference ('x') of names.
+   This uses the same flag as DECL_EXTERNAL.  */
+#define TYPE_DECL_SUPPRESS_DEBUG(NODE) \
+  (TYPE_DECL_CHECK (NODE)->decl_common.decl_flag_1)
+
+/* Getter of the imported declaration associated to the
+   IMPORTED_DECL node.  */
+#define IMPORTED_DECL_ASSOCIATED_DECL(NODE) \
+(DECL_INITIAL (IMPORTED_DECL_CHECK (NODE)))
+
+/* Getter of the symbol declaration associated with the
+   NAMELIST_DECL node.  */
+#define NAMELIST_DECL_ASSOCIATED_DECL(NODE) \
+  (DECL_INITIAL (NODE))
+
+/* A STATEMENT_LIST chains statements together in GENERIC and GIMPLE.
+   To reduce overhead, the nodes containing the statements are not trees.
+   This avoids the overhead of tree_common on all linked list elements.
+
+   Use the interface in tree-iterator.h to access this node.  */
+
+#define STATEMENT_LIST_HEAD(NODE) \
+  (STATEMENT_LIST_CHECK (NODE)->stmt_list.head)
+#define STATEMENT_LIST_TAIL(NODE) \
+  (STATEMENT_LIST_CHECK (NODE)->stmt_list.tail)
+
+#define TREE_OPTIMIZATION(NODE) \
+  (OPTIMIZATION_NODE_CHECK (NODE)->optimization.opts)
+
+#define TREE_OPTIMIZATION_OPTABS(NODE) \
+  (OPTIMIZATION_NODE_CHECK (NODE)->optimization.optabs)
+
+#define TREE_OPTIMIZATION_BASE_OPTABS(NODE) \
+  (OPTIMIZATION_NODE_CHECK (NODE)->optimization.base_optabs)
+
+/* Return a tree node that encapsulates the optimization options in OPTS.  */
+extern tree build_optimization_node (struct gcc_options *opts);
+
+#define TREE_TARGET_OPTION(NODE) \
+  (TARGET_OPTION_NODE_CHECK (NODE)->target_option.opts)
+
+#define TREE_TARGET_GLOBALS(NODE) \
+  (TARGET_OPTION_NODE_CHECK (NODE)->target_option.globals)
+
+/* Return a tree node that encapsulates the target options in OPTS.  */
+extern tree build_target_option_node (struct gcc_options *opts);
+
+extern void prepare_target_option_nodes_for_pch (void);
+
+#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
+
+inline tree
+tree_check (tree __t, const char *__f, int __l, const char *__g, tree_code __c)
+{
+  if (TREE_CODE (__t) != __c)
+    tree_check_failed (__t, __f, __l, __g, __c, 0);
+  return __t;
+}
+
+inline tree
+tree_not_check (tree __t, const char *__f, int __l, const char *__g,
+                enum tree_code __c)
+{
+  if (TREE_CODE (__t) == __c)
+    tree_not_check_failed (__t, __f, __l, __g, __c, 0);
+  return __t;
+}
+
+inline tree
+tree_check2 (tree __t, const char *__f, int __l, const char *__g,
+             enum tree_code __c1, enum tree_code __c2)
+{
+  if (TREE_CODE (__t) != __c1
+      && TREE_CODE (__t) != __c2)
+    tree_check_failed (__t, __f, __l, __g, __c1, __c2, 0);
+  return __t;
+}
+
+inline tree
+tree_not_check2 (tree __t, const char *__f, int __l, const char *__g,
+                 enum tree_code __c1, enum tree_code __c2)
+{
+  if (TREE_CODE (__t) == __c1
+      || TREE_CODE (__t) == __c2)
+    tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, 0);
+  return __t;
+}
+
+inline tree
+tree_check3 (tree __t, const char *__f, int __l, const char *__g,
+             enum tree_code __c1, enum tree_code __c2, enum tree_code __c3)
+{
+  if (TREE_CODE (__t) != __c1
+      && TREE_CODE (__t) != __c2
+      && TREE_CODE (__t) != __c3)
+    tree_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, 0);
+  return __t;
+}
+
+inline tree
+tree_not_check3 (tree __t, const char *__f, int __l, const char *__g,
+                 enum tree_code __c1, enum tree_code __c2, enum tree_code __c3)
+{
+  if (TREE_CODE (__t) == __c1
+      || TREE_CODE (__t) == __c2
+      || TREE_CODE (__t) == __c3)
+    tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, 0);
+  return __t;
+}
+
+inline tree
+tree_check4 (tree __t, const char *__f, int __l, const char *__g,
+             enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
+             enum tree_code __c4)
+{
+  if (TREE_CODE (__t) != __c1
+      && TREE_CODE (__t) != __c2
+      && TREE_CODE (__t) != __c3
+      && TREE_CODE (__t) != __c4)
+    tree_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, 0);
+  return __t;
+}
+
+inline tree
+tree_not_check4 (tree __t, const char *__f, int __l, const char *__g,
+                 enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
+                 enum tree_code __c4)
+{
+  if (TREE_CODE (__t) == __c1
+      || TREE_CODE (__t) == __c2
+      || TREE_CODE (__t) == __c3
+      || TREE_CODE (__t) == __c4)
+    tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, 0);
+  return __t;
+}
+
+inline tree
+tree_check5 (tree __t, const char *__f, int __l, const char *__g,
+             enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
+             enum tree_code __c4, enum tree_code __c5)
+{
+  if (TREE_CODE (__t) != __c1
+      && TREE_CODE (__t) != __c2
+      && TREE_CODE (__t) != __c3
+      && TREE_CODE (__t) != __c4
+      && TREE_CODE (__t) != __c5)
+    tree_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, __c5, 0);
+  return __t;
+}
+
+inline tree
+tree_not_check5 (tree __t, const char *__f, int __l, const char *__g,
+                 enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
+                 enum tree_code __c4, enum tree_code __c5)
+{
+  if (TREE_CODE (__t) == __c1
+      || TREE_CODE (__t) == __c2
+      || TREE_CODE (__t) == __c3
+      || TREE_CODE (__t) == __c4
+      || TREE_CODE (__t) == __c5)
+    tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, __c5, 0);
+  return __t;
+}
+
+inline tree
+contains_struct_check (tree __t, const enum tree_node_structure_enum __s,
+                       const char *__f, int __l, const char *__g)
+{
+  if (tree_contains_struct[TREE_CODE (__t)][__s] != 1)
+      tree_contains_struct_check_failed (__t, __s, __f, __l, __g);
+  return __t;
+}
+
+inline tree
+tree_class_check (tree __t, const enum tree_code_class __class,
+                  const char *__f, int __l, const char *__g)
+{
+  if (TREE_CODE_CLASS (TREE_CODE (__t)) != __class)
+    tree_class_check_failed (__t, __class, __f, __l, __g);
+  return __t;
+}
+
+inline tree
+tree_range_check (tree __t,
+                  enum tree_code __code1, enum tree_code __code2,
+                  const char *__f, int __l, const char *__g)
+{
+  if (TREE_CODE (__t) < __code1 || TREE_CODE (__t) > __code2)
+    tree_range_check_failed (__t, __f, __l, __g, __code1, __code2);
+  return __t;
+}
+
+inline tree
+omp_clause_subcode_check (tree __t, enum omp_clause_code __code,
+                          const char *__f, int __l, const char *__g)
+{
+  if (TREE_CODE (__t) != OMP_CLAUSE)
+    tree_check_failed (__t, __f, __l, __g, OMP_CLAUSE, 0);
+  if (__t->omp_clause.code != __code)
+    omp_clause_check_failed (__t, __f, __l, __g, __code);
+  return __t;
+}
+
+inline tree
+omp_clause_range_check (tree __t,
+                        enum omp_clause_code __code1,
+                        enum omp_clause_code __code2,
+                        const char *__f, int __l, const char *__g)
+{
+  if (TREE_CODE (__t) != OMP_CLAUSE)
+    tree_check_failed (__t, __f, __l, __g, OMP_CLAUSE, 0);
+  if ((int) __t->omp_clause.code < (int) __code1
+      || (int) __t->omp_clause.code > (int) __code2)
+    omp_clause_range_check_failed (__t, __f, __l, __g, __code1, __code2);
+  return __t;
+}
+
+/* These checks have to be special cased.  */
+
+inline tree
+expr_check (tree __t, const char *__f, int __l, const char *__g)
+{
+  char const __c = TREE_CODE_CLASS (TREE_CODE (__t));
+  if (!IS_EXPR_CODE_CLASS (__c))
+    tree_class_check_failed (__t, tcc_expression, __f, __l, __g);
+  return __t;
+}
+
+/* These checks have to be special cased.  */
+
+inline tree
+non_type_check (tree __t, const char *__f, int __l, const char *__g)
+{
+  if (TYPE_P (__t))
+    tree_not_class_check_failed (__t, tcc_type, __f, __l, __g);
+  return __t;
+}
+
+inline const HOST_WIDE_INT *
+tree_int_cst_elt_check (const_tree __t, int __i,
+			const char *__f, int __l, const char *__g)
+{
+  if (TREE_CODE (__t) != INTEGER_CST)
+    tree_check_failed (__t, __f, __l, __g, INTEGER_CST, 0);
+  if (__i < 0 || __i >= __t->base.u.int_length.extended)
+    tree_int_cst_elt_check_failed (__i, __t->base.u.int_length.extended,
+				   __f, __l, __g);
+  return &CONST_CAST_TREE (__t)->int_cst.val[__i];
+}
+
+inline HOST_WIDE_INT *
+tree_int_cst_elt_check (tree __t, int __i,
+			const char *__f, int __l, const char *__g)
+{
+  if (TREE_CODE (__t) != INTEGER_CST)
+    tree_check_failed (__t, __f, __l, __g, INTEGER_CST, 0);
+  if (__i < 0 || __i >= __t->base.u.int_length.extended)
+    tree_int_cst_elt_check_failed (__i, __t->base.u.int_length.extended,
+				   __f, __l, __g);
+  return &CONST_CAST_TREE (__t)->int_cst.val[__i];
+}
+
+/* Workaround -Wstrict-overflow false positive during profiledbootstrap.  */
+
+# if GCC_VERSION >= 4006
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstrict-overflow"
+#endif
+
+inline tree *
+tree_vec_elt_check (tree __t, int __i,
+                    const char *__f, int __l, const char *__g)
+{
+  if (TREE_CODE (__t) != TREE_VEC)
+    tree_check_failed (__t, __f, __l, __g, TREE_VEC, 0);
+  if (__i < 0 || __i >= __t->base.u.length)
+    tree_vec_elt_check_failed (__i, __t->base.u.length, __f, __l, __g);
+  return &CONST_CAST_TREE (__t)->vec.a[__i];
+}
+
+# if GCC_VERSION >= 4006
+#pragma GCC diagnostic pop
+#endif
+
+inline tree *
+omp_clause_elt_check (tree __t, int __i,
+                      const char *__f, int __l, const char *__g)
+{
+  if (TREE_CODE (__t) != OMP_CLAUSE)
+    tree_check_failed (__t, __f, __l, __g, OMP_CLAUSE, 0);
+  if (__i < 0 || __i >= omp_clause_num_ops [__t->omp_clause.code])
+    omp_clause_operand_check_failed (__i, __t, __f, __l, __g);
+  return &__t->omp_clause.ops[__i];
+}
+
+/* These checks have to be special cased.  */
+
+inline tree
+any_integral_type_check (tree __t, const char *__f, int __l, const char *__g)
+{
+  if (!ANY_INTEGRAL_TYPE_P (__t))
+    tree_check_failed (__t, __f, __l, __g, BOOLEAN_TYPE, ENUMERAL_TYPE,
+		       INTEGER_TYPE, 0);
+  return __t;
+}
+
+inline const_tree
+tree_check (const_tree __t, const char *__f, int __l, const char *__g,
+	    tree_code __c)
+{
+  if (TREE_CODE (__t) != __c)
+    tree_check_failed (__t, __f, __l, __g, __c, 0);
+  return __t;
+}
+
+inline const_tree
+tree_not_check (const_tree __t, const char *__f, int __l, const char *__g,
+                enum tree_code __c)
+{
+  if (TREE_CODE (__t) == __c)
+    tree_not_check_failed (__t, __f, __l, __g, __c, 0);
+  return __t;
+}
+
+inline const_tree
+tree_check2 (const_tree __t, const char *__f, int __l, const char *__g,
+             enum tree_code __c1, enum tree_code __c2)
+{
+  if (TREE_CODE (__t) != __c1
+      && TREE_CODE (__t) != __c2)
+    tree_check_failed (__t, __f, __l, __g, __c1, __c2, 0);
+  return __t;
+}
+
+inline const_tree
+tree_not_check2 (const_tree __t, const char *__f, int __l, const char *__g,
+                 enum tree_code __c1, enum tree_code __c2)
+{
+  if (TREE_CODE (__t) == __c1
+      || TREE_CODE (__t) == __c2)
+    tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, 0);
+  return __t;
+}
+
+inline const_tree
+tree_check3 (const_tree __t, const char *__f, int __l, const char *__g,
+             enum tree_code __c1, enum tree_code __c2, enum tree_code __c3)
+{
+  if (TREE_CODE (__t) != __c1
+      && TREE_CODE (__t) != __c2
+      && TREE_CODE (__t) != __c3)
+    tree_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, 0);
+  return __t;
+}
+
+inline const_tree
+tree_not_check3 (const_tree __t, const char *__f, int __l, const char *__g,
+                 enum tree_code __c1, enum tree_code __c2, enum tree_code __c3)
+{
+  if (TREE_CODE (__t) == __c1
+      || TREE_CODE (__t) == __c2
+      || TREE_CODE (__t) == __c3)
+    tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, 0);
+  return __t;
+}
+
+inline const_tree
+tree_check4 (const_tree __t, const char *__f, int __l, const char *__g,
+             enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
+             enum tree_code __c4)
+{
+  if (TREE_CODE (__t) != __c1
+      && TREE_CODE (__t) != __c2
+      && TREE_CODE (__t) != __c3
+      && TREE_CODE (__t) != __c4)
+    tree_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, 0);
+  return __t;
+}
+
+inline const_tree
+tree_not_check4 (const_tree __t, const char *__f, int __l, const char *__g,
+                 enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
+                 enum tree_code __c4)
+{
+  if (TREE_CODE (__t) == __c1
+      || TREE_CODE (__t) == __c2
+      || TREE_CODE (__t) == __c3
+      || TREE_CODE (__t) == __c4)
+    tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, 0);
+  return __t;
+}
+
+inline const_tree
+tree_check5 (const_tree __t, const char *__f, int __l, const char *__g,
+             enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
+             enum tree_code __c4, enum tree_code __c5)
+{
+  if (TREE_CODE (__t) != __c1
+      && TREE_CODE (__t) != __c2
+      && TREE_CODE (__t) != __c3
+      && TREE_CODE (__t) != __c4
+      && TREE_CODE (__t) != __c5)
+    tree_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, __c5, 0);
+  return __t;
+}
+
+inline const_tree
+tree_not_check5 (const_tree __t, const char *__f, int __l, const char *__g,
+                 enum tree_code __c1, enum tree_code __c2, enum tree_code __c3,
+                 enum tree_code __c4, enum tree_code __c5)
+{
+  if (TREE_CODE (__t) == __c1
+      || TREE_CODE (__t) == __c2
+      || TREE_CODE (__t) == __c3
+      || TREE_CODE (__t) == __c4
+      || TREE_CODE (__t) == __c5)
+    tree_not_check_failed (__t, __f, __l, __g, __c1, __c2, __c3, __c4, __c5, 0);
+  return __t;
+}
+
+inline const_tree
+contains_struct_check (const_tree __t, const enum tree_node_structure_enum __s,
+                       const char *__f, int __l, const char *__g)
+{
+  if (tree_contains_struct[TREE_CODE (__t)][__s] != 1)
+      tree_contains_struct_check_failed (__t, __s, __f, __l, __g);
+  return __t;
+}
+
+inline const_tree
+tree_class_check (const_tree __t, const enum tree_code_class __class,
+                  const char *__f, int __l, const char *__g)
+{
+  if (TREE_CODE_CLASS (TREE_CODE (__t)) != __class)
+    tree_class_check_failed (__t, __class, __f, __l, __g);
+  return __t;
+}
+
+inline const_tree
+tree_range_check (const_tree __t,
+                  enum tree_code __code1, enum tree_code __code2,
+                  const char *__f, int __l, const char *__g)
+{
+  if (TREE_CODE (__t) < __code1 || TREE_CODE (__t) > __code2)
+    tree_range_check_failed (__t, __f, __l, __g, __code1, __code2);
+  return __t;
+}
+
+inline const_tree
+omp_clause_subcode_check (const_tree __t, enum omp_clause_code __code,
+                          const char *__f, int __l, const char *__g)
+{
+  if (TREE_CODE (__t) != OMP_CLAUSE)
+    tree_check_failed (__t, __f, __l, __g, OMP_CLAUSE, 0);
+  if (__t->omp_clause.code != __code)
+    omp_clause_check_failed (__t, __f, __l, __g, __code);
+  return __t;
+}
+
+inline const_tree
+omp_clause_range_check (const_tree __t,
+                        enum omp_clause_code __code1,
+                        enum omp_clause_code __code2,
+                        const char *__f, int __l, const char *__g)
+{
+  if (TREE_CODE (__t) != OMP_CLAUSE)
+    tree_check_failed (__t, __f, __l, __g, OMP_CLAUSE, 0);
+  if ((int) __t->omp_clause.code < (int) __code1
+      || (int) __t->omp_clause.code > (int) __code2)
+    omp_clause_range_check_failed (__t, __f, __l, __g, __code1, __code2);
+  return __t;
+}
+
+inline const_tree
+expr_check (const_tree __t, const char *__f, int __l, const char *__g)
+{
+  char const __c = TREE_CODE_CLASS (TREE_CODE (__t));
+  if (!IS_EXPR_CODE_CLASS (__c))
+    tree_class_check_failed (__t, tcc_expression, __f, __l, __g);
+  return __t;
+}
+
+inline const_tree
+non_type_check (const_tree __t, const char *__f, int __l, const char *__g)
+{
+  if (TYPE_P (__t))
+    tree_not_class_check_failed (__t, tcc_type, __f, __l, __g);
+  return __t;
+}
+
+# if GCC_VERSION >= 4006
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstrict-overflow"
+#endif
+
+inline const_tree *
+tree_vec_elt_check (const_tree __t, int __i,
+                    const char *__f, int __l, const char *__g)
+{
+  if (TREE_CODE (__t) != TREE_VEC)
+    tree_check_failed (__t, __f, __l, __g, TREE_VEC, 0);
+  if (__i < 0 || __i >= __t->base.u.length)
+    tree_vec_elt_check_failed (__i, __t->base.u.length, __f, __l, __g);
+  return CONST_CAST (const_tree *, &__t->vec.a[__i]);
+  //return &__t->vec.a[__i];
+}
+
+# if GCC_VERSION >= 4006
+#pragma GCC diagnostic pop
+#endif
+
+inline const_tree *
+omp_clause_elt_check (const_tree __t, int __i,
+                      const char *__f, int __l, const char *__g)
+{
+  if (TREE_CODE (__t) != OMP_CLAUSE)
+    tree_check_failed (__t, __f, __l, __g, OMP_CLAUSE, 0);
+  if (__i < 0 || __i >= omp_clause_num_ops [__t->omp_clause.code])
+    omp_clause_operand_check_failed (__i, __t, __f, __l, __g);
+  return CONST_CAST (const_tree *, &__t->omp_clause.ops[__i]);
+}
+
+inline const_tree
+any_integral_type_check (const_tree __t, const char *__f, int __l,
+			 const char *__g)
+{
+  if (!ANY_INTEGRAL_TYPE_P (__t))
+    tree_check_failed (__t, __f, __l, __g, BOOLEAN_TYPE, ENUMERAL_TYPE,
+		       INTEGER_TYPE, 0);
+  return __t;
+}
+
+#endif
+
+/* Compute the number of operands in an expression node NODE.  For
+   tcc_vl_exp nodes like CALL_EXPRs, this is stored in the node itself,
+   otherwise it is looked up from the node's code.  */
+static inline int
+tree_operand_length (const_tree node)
+{
+  if (VL_EXP_CLASS_P (node))
+    return VL_EXP_OPERAND_LENGTH (node);
+  else
+    return TREE_CODE_LENGTH (TREE_CODE (node));
+}
+
+#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
+
+/* Special checks for TREE_OPERANDs.  */
+inline tree *
+tree_operand_check (tree __t, int __i,
+                    const char *__f, int __l, const char *__g)
+{
+  const_tree __u = EXPR_CHECK (__t);
+  if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__u))
+    tree_operand_check_failed (__i, __u, __f, __l, __g);
+  return &CONST_CAST_TREE (__u)->exp.operands[__i];
+}
+
+inline tree *
+tree_operand_check_code (tree __t, enum tree_code __code, int __i,
+                         const char *__f, int __l, const char *__g)
+{
+  if (TREE_CODE (__t) != __code)
+    tree_check_failed (__t, __f, __l, __g, __code, 0);
+  if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__t))
+    tree_operand_check_failed (__i, __t, __f, __l, __g);
+  return &__t->exp.operands[__i];
+}
+
+inline const_tree *
+tree_operand_check (const_tree __t, int __i,
+                    const char *__f, int __l, const char *__g)
+{
+  const_tree __u = EXPR_CHECK (__t);
+  if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__u))
+    tree_operand_check_failed (__i, __u, __f, __l, __g);
+  return CONST_CAST (const_tree *, &__u->exp.operands[__i]);
+}
+
+inline const_tree *
+tree_operand_check_code (const_tree __t, enum tree_code __code, int __i,
+                         const char *__f, int __l, const char *__g)
+{
+  if (TREE_CODE (__t) != __code)
+    tree_check_failed (__t, __f, __l, __g, __code, 0);
+  if (__i < 0 || __i >= TREE_OPERAND_LENGTH (__t))
+    tree_operand_check_failed (__i, __t, __f, __l, __g);
+  return CONST_CAST (const_tree *, &__t->exp.operands[__i]);
+}
+
+#endif
+
+/* True iff an identifier matches a C string.  */
+
+inline bool
+id_equal (const_tree id, const char *str)
+{
+  return !strcmp (IDENTIFIER_POINTER (id), str);
+}
+
+inline bool
+id_equal (const char *str, const_tree id)
+{
+  return !strcmp (str, IDENTIFIER_POINTER (id));
+}
+
+/* Return the number of elements in the VECTOR_TYPE given by NODE.  */
+
+inline poly_uint64
+TYPE_VECTOR_SUBPARTS (const_tree node)
+{
+  STATIC_ASSERT (NUM_POLY_INT_COEFFS <= 2);
+  unsigned int precision = VECTOR_TYPE_CHECK (node)->type_common.precision;
+  if (NUM_POLY_INT_COEFFS == 2)
+    {
+      poly_uint64 res = 0;
+      res.coeffs[0] = HOST_WIDE_INT_1U << (precision & 0xff);
+      if (precision & 0x100)
+	res.coeffs[1] = HOST_WIDE_INT_1U << (precision & 0xff);
+      return res;
+    }
+  else
+    return HOST_WIDE_INT_1U << precision;
+}
+
+/* Set the number of elements in VECTOR_TYPE NODE to SUBPARTS, which must
+   satisfy valid_vector_subparts_p.  */
+
+inline void
+SET_TYPE_VECTOR_SUBPARTS (tree node, poly_uint64 subparts)
+{
+  STATIC_ASSERT (NUM_POLY_INT_COEFFS <= 2);
+  unsigned HOST_WIDE_INT coeff0 = subparts.coeffs[0];
+  int index = exact_log2 (coeff0);
+  gcc_assert (index >= 0);
+  if (NUM_POLY_INT_COEFFS == 2)
+    {
+      unsigned HOST_WIDE_INT coeff1 = subparts.coeffs[1];
+      gcc_assert (coeff1 == 0 || coeff1 == coeff0);
+      VECTOR_TYPE_CHECK (node)->type_common.precision
+	= index + (coeff1 != 0 ? 0x100 : 0);
+    }
+  else
+    VECTOR_TYPE_CHECK (node)->type_common.precision = index;
+}
+
+/* Return true if we can construct vector types with the given number
+   of subparts.  */
+
+static inline bool
+valid_vector_subparts_p (poly_uint64 subparts)
+{
+  unsigned HOST_WIDE_INT coeff0 = subparts.coeffs[0];
+  if (!pow2p_hwi (coeff0))
+    return false;
+  if (NUM_POLY_INT_COEFFS == 2)
+    {
+      unsigned HOST_WIDE_INT coeff1 = subparts.coeffs[1];
+      if (coeff1 != 0 && coeff1 != coeff0)
+	return false;
+    }
+  return true;
+}
+
+/* In NON_LVALUE_EXPR and VIEW_CONVERT_EXPR, set when this node is merely a
+   wrapper added to express a location_t on behalf of the node's child
+   (e.g. by maybe_wrap_with_location).  */
+
+#define EXPR_LOCATION_WRAPPER_P(NODE) \
+  (TREE_CHECK2(NODE, NON_LVALUE_EXPR, VIEW_CONVERT_EXPR)->base.public_flag)
+
+/* Test if EXP is merely a wrapper node, added to express a location_t
+   on behalf of the node's child (e.g. by maybe_wrap_with_location).  */
+
+inline bool
+location_wrapper_p (const_tree exp)
+{
+  /* A wrapper node has code NON_LVALUE_EXPR or VIEW_CONVERT_EXPR, and
+     the flag EXPR_LOCATION_WRAPPER_P is set.
+     It normally has the same type as its operand, but it can have a
+     different one if the type of the operand has changed (e.g. when
+     merging duplicate decls).
+
+     NON_LVALUE_EXPR is used for wrapping constants, apart from STRING_CST.
+     VIEW_CONVERT_EXPR is used for wrapping non-constants and STRING_CST.  */
+  if ((TREE_CODE (exp) == NON_LVALUE_EXPR
+       || TREE_CODE (exp) == VIEW_CONVERT_EXPR)
+      && EXPR_LOCATION_WRAPPER_P (exp))
+    return true;
+  return false;
+}
+
+/* Implementation of STRIP_ANY_LOCATION_WRAPPER.  */
+
+inline tree
+tree_strip_any_location_wrapper (tree exp)
+{
+  if (location_wrapper_p (exp))
+    return TREE_OPERAND (exp, 0);
+  else
+    return exp;
+}
+
+#define error_mark_node			global_trees[TI_ERROR_MARK]
+
+#define intQI_type_node			global_trees[TI_INTQI_TYPE]
+#define intHI_type_node			global_trees[TI_INTHI_TYPE]
+#define intSI_type_node			global_trees[TI_INTSI_TYPE]
+#define intDI_type_node			global_trees[TI_INTDI_TYPE]
+#define intTI_type_node			global_trees[TI_INTTI_TYPE]
+
+#define unsigned_intQI_type_node	global_trees[TI_UINTQI_TYPE]
+#define unsigned_intHI_type_node	global_trees[TI_UINTHI_TYPE]
+#define unsigned_intSI_type_node	global_trees[TI_UINTSI_TYPE]
+#define unsigned_intDI_type_node	global_trees[TI_UINTDI_TYPE]
+#define unsigned_intTI_type_node	global_trees[TI_UINTTI_TYPE]
+
+#define atomicQI_type_node	global_trees[TI_ATOMICQI_TYPE]
+#define atomicHI_type_node	global_trees[TI_ATOMICHI_TYPE]
+#define atomicSI_type_node	global_trees[TI_ATOMICSI_TYPE]
+#define atomicDI_type_node	global_trees[TI_ATOMICDI_TYPE]
+#define atomicTI_type_node	global_trees[TI_ATOMICTI_TYPE]
+
+#define uint16_type_node		global_trees[TI_UINT16_TYPE]
+#define uint32_type_node		global_trees[TI_UINT32_TYPE]
+#define uint64_type_node		global_trees[TI_UINT64_TYPE]
+
+#define void_node			global_trees[TI_VOID]
+
+#define integer_zero_node		global_trees[TI_INTEGER_ZERO]
+#define integer_one_node		global_trees[TI_INTEGER_ONE]
+#define integer_three_node              global_trees[TI_INTEGER_THREE]
+#define integer_minus_one_node		global_trees[TI_INTEGER_MINUS_ONE]
+#define size_zero_node			global_trees[TI_SIZE_ZERO]
+#define size_one_node			global_trees[TI_SIZE_ONE]
+#define bitsize_zero_node		global_trees[TI_BITSIZE_ZERO]
+#define bitsize_one_node		global_trees[TI_BITSIZE_ONE]
+#define bitsize_unit_node		global_trees[TI_BITSIZE_UNIT]
+
+/* Base access nodes.  */
+#define access_public_node		global_trees[TI_PUBLIC]
+#define access_protected_node	        global_trees[TI_PROTECTED]
+#define access_private_node		global_trees[TI_PRIVATE]
+
+#define null_pointer_node		global_trees[TI_NULL_POINTER]
+
+#define float_type_node			global_trees[TI_FLOAT_TYPE]
+#define double_type_node		global_trees[TI_DOUBLE_TYPE]
+#define long_double_type_node		global_trees[TI_LONG_DOUBLE_TYPE]
+
+/* Nodes for particular _FloatN and _FloatNx types in sequence.  */
+#define FLOATN_TYPE_NODE(IDX)		global_trees[TI_FLOATN_TYPE_FIRST + (IDX)]
+#define FLOATN_NX_TYPE_NODE(IDX)	global_trees[TI_FLOATN_NX_TYPE_FIRST + (IDX)]
+#define FLOATNX_TYPE_NODE(IDX)		global_trees[TI_FLOATNX_TYPE_FIRST + (IDX)]
+
+/* Names for individual types (code should normally iterate over all
+   such types; these are only for back-end use, or in contexts such as
+   *.def where iteration is not possible).  */
+#define float16_type_node		global_trees[TI_FLOAT16_TYPE]
+#define float32_type_node		global_trees[TI_FLOAT32_TYPE]
+#define float64_type_node		global_trees[TI_FLOAT64_TYPE]
+#define float128_type_node		global_trees[TI_FLOAT128_TYPE]
+#define float32x_type_node		global_trees[TI_FLOAT32X_TYPE]
+#define float64x_type_node		global_trees[TI_FLOAT64X_TYPE]
+#define float128x_type_node		global_trees[TI_FLOAT128X_TYPE]
+
+#define float_ptr_type_node		global_trees[TI_FLOAT_PTR_TYPE]
+#define double_ptr_type_node		global_trees[TI_DOUBLE_PTR_TYPE]
+#define long_double_ptr_type_node	global_trees[TI_LONG_DOUBLE_PTR_TYPE]
+#define integer_ptr_type_node		global_trees[TI_INTEGER_PTR_TYPE]
+
+#define complex_integer_type_node	global_trees[TI_COMPLEX_INTEGER_TYPE]
+#define complex_float_type_node		global_trees[TI_COMPLEX_FLOAT_TYPE]
+#define complex_double_type_node	global_trees[TI_COMPLEX_DOUBLE_TYPE]
+#define complex_long_double_type_node	global_trees[TI_COMPLEX_LONG_DOUBLE_TYPE]
+
+#define COMPLEX_FLOATN_NX_TYPE_NODE(IDX)	global_trees[TI_COMPLEX_FLOATN_NX_TYPE_FIRST + (IDX)]
+
+#define void_type_node			global_trees[TI_VOID_TYPE]
+/* The C type `void *'.  */
+#define ptr_type_node			global_trees[TI_PTR_TYPE]
+/* The C type `const void *'.  */
+#define const_ptr_type_node		global_trees[TI_CONST_PTR_TYPE]
+/* The C type `size_t'.  */
+#define size_type_node                  global_trees[TI_SIZE_TYPE]
+#define pid_type_node                   global_trees[TI_PID_TYPE]
+#define ptrdiff_type_node		global_trees[TI_PTRDIFF_TYPE]
+#define va_list_type_node		global_trees[TI_VA_LIST_TYPE]
+#define va_list_gpr_counter_field	global_trees[TI_VA_LIST_GPR_COUNTER_FIELD]
+#define va_list_fpr_counter_field	global_trees[TI_VA_LIST_FPR_COUNTER_FIELD]
+/* The C type `FILE *'.  */
+#define fileptr_type_node		global_trees[TI_FILEPTR_TYPE]
+/* The C type `const struct tm *'.  */
+#define const_tm_ptr_type_node		global_trees[TI_CONST_TM_PTR_TYPE]
+/* The C type `fenv_t *'.  */
+#define fenv_t_ptr_type_node		global_trees[TI_FENV_T_PTR_TYPE]
+#define const_fenv_t_ptr_type_node	global_trees[TI_CONST_FENV_T_PTR_TYPE]
+/* The C type `fexcept_t *'.  */
+#define fexcept_t_ptr_type_node		global_trees[TI_FEXCEPT_T_PTR_TYPE]
+#define const_fexcept_t_ptr_type_node	global_trees[TI_CONST_FEXCEPT_T_PTR_TYPE]
+#define pointer_sized_int_node		global_trees[TI_POINTER_SIZED_TYPE]
+
+#define boolean_type_node		global_trees[TI_BOOLEAN_TYPE]
+#define boolean_false_node		global_trees[TI_BOOLEAN_FALSE]
+#define boolean_true_node		global_trees[TI_BOOLEAN_TRUE]
+
+/* The decimal floating point types. */
+#define dfloat32_type_node              global_trees[TI_DFLOAT32_TYPE]
+#define dfloat64_type_node              global_trees[TI_DFLOAT64_TYPE]
+#define dfloat128_type_node             global_trees[TI_DFLOAT128_TYPE]
+#define dfloat32_ptr_type_node          global_trees[TI_DFLOAT32_PTR_TYPE]
+#define dfloat64_ptr_type_node          global_trees[TI_DFLOAT64_PTR_TYPE]
+#define dfloat128_ptr_type_node         global_trees[TI_DFLOAT128_PTR_TYPE]
+
+/* The fixed-point types.  */
+#define sat_short_fract_type_node       global_trees[TI_SAT_SFRACT_TYPE]
+#define sat_fract_type_node             global_trees[TI_SAT_FRACT_TYPE]
+#define sat_long_fract_type_node        global_trees[TI_SAT_LFRACT_TYPE]
+#define sat_long_long_fract_type_node   global_trees[TI_SAT_LLFRACT_TYPE]
+#define sat_unsigned_short_fract_type_node \
+					global_trees[TI_SAT_USFRACT_TYPE]
+#define sat_unsigned_fract_type_node    global_trees[TI_SAT_UFRACT_TYPE]
+#define sat_unsigned_long_fract_type_node \
+					global_trees[TI_SAT_ULFRACT_TYPE]
+#define sat_unsigned_long_long_fract_type_node \
+					global_trees[TI_SAT_ULLFRACT_TYPE]
+#define short_fract_type_node           global_trees[TI_SFRACT_TYPE]
+#define fract_type_node                 global_trees[TI_FRACT_TYPE]
+#define long_fract_type_node            global_trees[TI_LFRACT_TYPE]
+#define long_long_fract_type_node       global_trees[TI_LLFRACT_TYPE]
+#define unsigned_short_fract_type_node  global_trees[TI_USFRACT_TYPE]
+#define unsigned_fract_type_node        global_trees[TI_UFRACT_TYPE]
+#define unsigned_long_fract_type_node   global_trees[TI_ULFRACT_TYPE]
+#define unsigned_long_long_fract_type_node \
+					global_trees[TI_ULLFRACT_TYPE]
+#define sat_short_accum_type_node       global_trees[TI_SAT_SACCUM_TYPE]
+#define sat_accum_type_node             global_trees[TI_SAT_ACCUM_TYPE]
+#define sat_long_accum_type_node        global_trees[TI_SAT_LACCUM_TYPE]
+#define sat_long_long_accum_type_node   global_trees[TI_SAT_LLACCUM_TYPE]
+#define sat_unsigned_short_accum_type_node \
+					global_trees[TI_SAT_USACCUM_TYPE]
+#define sat_unsigned_accum_type_node    global_trees[TI_SAT_UACCUM_TYPE]
+#define sat_unsigned_long_accum_type_node \
+					global_trees[TI_SAT_ULACCUM_TYPE]
+#define sat_unsigned_long_long_accum_type_node \
+					global_trees[TI_SAT_ULLACCUM_TYPE]
+#define short_accum_type_node           global_trees[TI_SACCUM_TYPE]
+#define accum_type_node                 global_trees[TI_ACCUM_TYPE]
+#define long_accum_type_node            global_trees[TI_LACCUM_TYPE]
+#define long_long_accum_type_node       global_trees[TI_LLACCUM_TYPE]
+#define unsigned_short_accum_type_node  global_trees[TI_USACCUM_TYPE]
+#define unsigned_accum_type_node        global_trees[TI_UACCUM_TYPE]
+#define unsigned_long_accum_type_node   global_trees[TI_ULACCUM_TYPE]
+#define unsigned_long_long_accum_type_node \
+					global_trees[TI_ULLACCUM_TYPE]
+#define qq_type_node                    global_trees[TI_QQ_TYPE]
+#define hq_type_node                    global_trees[TI_HQ_TYPE]
+#define sq_type_node                    global_trees[TI_SQ_TYPE]
+#define dq_type_node                    global_trees[TI_DQ_TYPE]
+#define tq_type_node                    global_trees[TI_TQ_TYPE]
+#define uqq_type_node                   global_trees[TI_UQQ_TYPE]
+#define uhq_type_node                   global_trees[TI_UHQ_TYPE]
+#define usq_type_node                   global_trees[TI_USQ_TYPE]
+#define udq_type_node                   global_trees[TI_UDQ_TYPE]
+#define utq_type_node                   global_trees[TI_UTQ_TYPE]
+#define sat_qq_type_node                global_trees[TI_SAT_QQ_TYPE]
+#define sat_hq_type_node                global_trees[TI_SAT_HQ_TYPE]
+#define sat_sq_type_node                global_trees[TI_SAT_SQ_TYPE]
+#define sat_dq_type_node                global_trees[TI_SAT_DQ_TYPE]
+#define sat_tq_type_node                global_trees[TI_SAT_TQ_TYPE]
+#define sat_uqq_type_node               global_trees[TI_SAT_UQQ_TYPE]
+#define sat_uhq_type_node               global_trees[TI_SAT_UHQ_TYPE]
+#define sat_usq_type_node               global_trees[TI_SAT_USQ_TYPE]
+#define sat_udq_type_node               global_trees[TI_SAT_UDQ_TYPE]
+#define sat_utq_type_node               global_trees[TI_SAT_UTQ_TYPE]
+#define ha_type_node                    global_trees[TI_HA_TYPE]
+#define sa_type_node                    global_trees[TI_SA_TYPE]
+#define da_type_node                    global_trees[TI_DA_TYPE]
+#define ta_type_node                    global_trees[TI_TA_TYPE]
+#define uha_type_node                   global_trees[TI_UHA_TYPE]
+#define usa_type_node                   global_trees[TI_USA_TYPE]
+#define uda_type_node                   global_trees[TI_UDA_TYPE]
+#define uta_type_node                   global_trees[TI_UTA_TYPE]
+#define sat_ha_type_node                global_trees[TI_SAT_HA_TYPE]
+#define sat_sa_type_node                global_trees[TI_SAT_SA_TYPE]
+#define sat_da_type_node                global_trees[TI_SAT_DA_TYPE]
+#define sat_ta_type_node                global_trees[TI_SAT_TA_TYPE]
+#define sat_uha_type_node               global_trees[TI_SAT_UHA_TYPE]
+#define sat_usa_type_node               global_trees[TI_SAT_USA_TYPE]
+#define sat_uda_type_node               global_trees[TI_SAT_UDA_TYPE]
+#define sat_uta_type_node               global_trees[TI_SAT_UTA_TYPE]
+
+/* The node that should be placed at the end of a parameter list to
+   indicate that the function does not take a variable number of
+   arguments.  The TREE_VALUE will be void_type_node and there will be
+   no TREE_CHAIN.  Language-independent code should not assume
+   anything else about this node.  */
+#define void_list_node                  global_trees[TI_VOID_LIST_NODE]
+
+#define main_identifier_node		global_trees[TI_MAIN_IDENTIFIER]
+#define MAIN_NAME_P(NODE) \
+  (IDENTIFIER_NODE_CHECK (NODE) == main_identifier_node)
+
+/* Optimization options (OPTIMIZATION_NODE) to use for default and current
+   functions.  */
+#define optimization_default_node	global_trees[TI_OPTIMIZATION_DEFAULT]
+#define optimization_current_node	global_trees[TI_OPTIMIZATION_CURRENT]
+
+/* Default/current target options (TARGET_OPTION_NODE).  */
+#define target_option_default_node	global_trees[TI_TARGET_OPTION_DEFAULT]
+#define target_option_current_node	global_trees[TI_TARGET_OPTION_CURRENT]
+
+/* Default tree list option(), optimize() pragmas to be linked into the
+   attribute list.  */
+#define current_target_pragma		global_trees[TI_CURRENT_TARGET_PRAGMA]
+#define current_optimize_pragma		global_trees[TI_CURRENT_OPTIMIZE_PRAGMA]
+
+#define char_type_node			integer_types[itk_char]
+#define signed_char_type_node		integer_types[itk_signed_char]
+#define unsigned_char_type_node		integer_types[itk_unsigned_char]
+#define short_integer_type_node		integer_types[itk_short]
+#define short_unsigned_type_node	integer_types[itk_unsigned_short]
+#define integer_type_node		integer_types[itk_int]
+#define unsigned_type_node		integer_types[itk_unsigned_int]
+#define long_integer_type_node		integer_types[itk_long]
+#define long_unsigned_type_node		integer_types[itk_unsigned_long]
+#define long_long_integer_type_node	integer_types[itk_long_long]
+#define long_long_unsigned_type_node	integer_types[itk_unsigned_long_long]
+
+/* True if NODE is an erroneous expression.  */
+
+#define error_operand_p(NODE)					\
+  ((NODE) == error_mark_node					\
+   || ((NODE) && TREE_TYPE ((NODE)) == error_mark_node))
+
+/* Return the number of elements encoded directly in a VECTOR_CST.  */
+
+inline unsigned int
+vector_cst_encoded_nelts (const_tree t)
+{
+  return VECTOR_CST_NPATTERNS (t) * VECTOR_CST_NELTS_PER_PATTERN (t);
+}
+
+extern tree decl_assembler_name (tree);
+extern void overwrite_decl_assembler_name (tree decl, tree name);
+extern tree decl_comdat_group (const_tree);
+extern tree decl_comdat_group_id (const_tree);
+extern const char *decl_section_name (const_tree);
+extern void set_decl_section_name (tree, const char *);
+extern enum tls_model decl_tls_model (const_tree);
+extern void set_decl_tls_model (tree, enum tls_model);
+
+/* Compute the number of bytes occupied by 'node'.  This routine only
+   looks at TREE_CODE and, if the code is TREE_VEC, TREE_VEC_LENGTH.  */
+
+extern size_t tree_size (const_tree);
+
+/* Compute the number of bytes occupied by a tree with code CODE.
+   This function cannot be used for TREE_VEC or INTEGER_CST nodes,
+   which are of variable length.  */
+extern size_t tree_code_size (enum tree_code);
+
+/* Allocate and return a new UID from the DECL_UID namespace.  */
+extern int allocate_decl_uid (void);
+
+/* Lowest level primitive for allocating a node.
+   The TREE_CODE is the only argument.  Contents are initialized
+   to zero except for a few of the common fields.  */
+
+extern tree make_node (enum tree_code CXX_MEM_STAT_INFO);
+
+/* Free tree node.  */
+
+extern void free_node (tree);
+
+/* Make a copy of a node, with all the same contents.  */
+
+extern tree copy_node (tree CXX_MEM_STAT_INFO);
+
+/* Make a copy of a chain of TREE_LIST nodes.  */
+
+extern tree copy_list (tree);
+
+/* Make a CASE_LABEL_EXPR.  */
+
+extern tree build_case_label (tree, tree, tree);
+
+/* Make a BINFO.  */
+extern tree make_tree_binfo (unsigned CXX_MEM_STAT_INFO);
+
+/* Make an INTEGER_CST.  */
+
+extern tree make_int_cst (int, int CXX_MEM_STAT_INFO);
+
+/* Make a TREE_VEC.  */
+
+extern tree make_tree_vec (int CXX_MEM_STAT_INFO);
+
+/* Grow a TREE_VEC.  */
+
+extern tree grow_tree_vec (tree v, int CXX_MEM_STAT_INFO);
+
+/* Construct various types of nodes.  */
+
+extern tree build_nt (enum tree_code, ...);
+extern tree build_nt_call_vec (tree, vec<tree, va_gc> *);
+
+extern tree build0 (enum tree_code, tree CXX_MEM_STAT_INFO);
+extern tree build1 (enum tree_code, tree, tree CXX_MEM_STAT_INFO);
+extern tree build2 (enum tree_code, tree, tree, tree CXX_MEM_STAT_INFO);
+extern tree build3 (enum tree_code, tree, tree, tree, tree CXX_MEM_STAT_INFO);
+extern tree build4 (enum tree_code, tree, tree, tree, tree,
+		    tree CXX_MEM_STAT_INFO);
+extern tree build5 (enum tree_code, tree, tree, tree, tree, tree,
+		    tree CXX_MEM_STAT_INFO);
+
+/* _loc versions of build[1-5].  */
+
+static inline tree
+build1_loc (location_t loc, enum tree_code code, tree type,
+	    tree arg1 CXX_MEM_STAT_INFO)
+{
+  tree t = build1 (code, type, arg1 PASS_MEM_STAT);
+  if (CAN_HAVE_LOCATION_P (t))
+    SET_EXPR_LOCATION (t, loc);
+  return t;
+}
+
+static inline tree
+build2_loc (location_t loc, enum tree_code code, tree type, tree arg0,
+	    tree arg1 CXX_MEM_STAT_INFO)
+{
+  tree t = build2 (code, type, arg0, arg1 PASS_MEM_STAT);
+  if (CAN_HAVE_LOCATION_P (t))
+    SET_EXPR_LOCATION (t, loc);
+  return t;
+}
+
+static inline tree
+build3_loc (location_t loc, enum tree_code code, tree type, tree arg0,
+	    tree arg1, tree arg2 CXX_MEM_STAT_INFO)
+{
+  tree t = build3 (code, type, arg0, arg1, arg2 PASS_MEM_STAT);
+  if (CAN_HAVE_LOCATION_P (t))
+    SET_EXPR_LOCATION (t, loc);
+  return t;
+}
+
+static inline tree
+build4_loc (location_t loc, enum tree_code code, tree type, tree arg0,
+	    tree arg1, tree arg2, tree arg3 CXX_MEM_STAT_INFO)
+{
+  tree t = build4 (code, type, arg0, arg1, arg2, arg3 PASS_MEM_STAT);
+  if (CAN_HAVE_LOCATION_P (t))
+    SET_EXPR_LOCATION (t, loc);
+  return t;
+}
+
+static inline tree
+build5_loc (location_t loc, enum tree_code code, tree type, tree arg0,
+	    tree arg1, tree arg2, tree arg3, tree arg4 CXX_MEM_STAT_INFO)
+{
+  tree t = build5 (code, type, arg0, arg1, arg2, arg3,
+			arg4 PASS_MEM_STAT);
+  if (CAN_HAVE_LOCATION_P (t))
+    SET_EXPR_LOCATION (t, loc);
+  return t;
+}
+
+/* Constructs double_int from tree CST.  */
+
+extern tree double_int_to_tree (tree, double_int);
+
+extern tree wide_int_to_tree (tree type, const poly_wide_int_ref &cst);
+extern tree force_fit_type (tree, const poly_wide_int_ref &, int, bool);
+
+/* Create an INT_CST node with a CST value zero extended.  */
+
+/* static inline */
+extern tree build_int_cst (tree, poly_int64);
+extern tree build_int_cstu (tree type, poly_uint64);
+extern tree build_int_cst_type (tree, poly_int64);
+extern tree make_vector (unsigned, unsigned CXX_MEM_STAT_INFO);
+extern tree build_vector_from_ctor (tree, vec<constructor_elt, va_gc> *);
+extern tree build_vector_from_val (tree, tree);
+extern tree build_uniform_cst (tree, tree);
+extern tree build_vec_series (tree, tree, tree);
+extern tree build_index_vector (tree, poly_uint64, poly_uint64);
+extern void recompute_constructor_flags (tree);
+extern void verify_constructor_flags (tree);
+extern tree build_constructor (tree, vec<constructor_elt, va_gc> *);
+extern tree build_constructor_single (tree, tree, tree);
+extern tree build_constructor_from_list (tree, tree);
+extern tree build_constructor_va (tree, int, ...);
+extern tree build_clobber (tree);
+extern tree build_real_from_int_cst (tree, const_tree);
+extern tree build_complex (tree, tree, tree);
+extern tree build_complex_inf (tree, bool);
+extern tree build_each_one_cst (tree);
+extern tree build_one_cst (tree);
+extern tree build_minus_one_cst (tree);
+extern tree build_all_ones_cst (tree);
+extern tree build_zero_cst (tree);
+extern tree build_string (int, const char *);
+extern tree build_poly_int_cst (tree, const poly_wide_int_ref &);
+extern tree build_tree_list (tree, tree CXX_MEM_STAT_INFO);
+extern tree build_tree_list_vec (const vec<tree, va_gc> * CXX_MEM_STAT_INFO);
+extern tree build_decl (location_t, enum tree_code,
+			tree, tree CXX_MEM_STAT_INFO);
+extern tree build_fn_decl (const char *, tree);
+extern tree build_translation_unit_decl (tree);
+extern tree build_block (tree, tree, tree, tree);
+extern tree build_empty_stmt (location_t);
+extern tree build_omp_clause (location_t, enum omp_clause_code);
+
+extern tree build_vl_exp (enum tree_code, int CXX_MEM_STAT_INFO);
+
+extern tree build_call_nary (tree, tree, int, ...);
+extern tree build_call_valist (tree, tree, int, va_list);
+#define build_call_array(T1,T2,N,T3)\
+   build_call_array_loc (UNKNOWN_LOCATION, T1, T2, N, T3)
+extern tree build_call_array_loc (location_t, tree, tree, int, const tree *);
+extern tree build_call_vec (tree, tree, vec<tree, va_gc> *);
+extern tree build_call_expr_loc_array (location_t, tree, int, tree *);
+extern tree build_call_expr_loc_vec (location_t, tree, vec<tree, va_gc> *);
+extern tree build_call_expr_loc (location_t, tree, int, ...);
+extern tree build_call_expr (tree, int, ...);
+extern tree build_call_expr_internal_loc (location_t, enum internal_fn,
+					  tree, int, ...);
+extern tree build_call_expr_internal_loc_array (location_t, enum internal_fn,
+						tree, int, const tree *);
+extern tree maybe_build_call_expr_loc (location_t, combined_fn, tree,
+				       int, ...);
+extern tree build_alloca_call_expr (tree, unsigned int, HOST_WIDE_INT);
+extern tree build_string_literal (int, const char *, tree = char_type_node);
+
+/* Construct various nodes representing data types.  */
+
+extern tree signed_or_unsigned_type_for (int, tree);
+extern tree signed_type_for (tree);
+extern tree unsigned_type_for (tree);
+extern tree truth_type_for (tree);
+extern tree build_pointer_type_for_mode (tree, machine_mode, bool);
+extern tree build_pointer_type (tree);
+extern tree build_reference_type_for_mode (tree, machine_mode, bool);
+extern tree build_reference_type (tree);
+extern tree build_vector_type_for_mode (tree, machine_mode);
+extern tree build_vector_type (tree, poly_int64);
+extern tree build_truth_vector_type (poly_uint64, poly_uint64);
+extern tree build_same_sized_truth_vector_type (tree vectype);
+extern tree build_opaque_vector_type (tree, poly_int64);
+extern tree build_index_type (tree);
+extern tree build_array_type (tree, tree, bool = false);
+extern tree build_nonshared_array_type (tree, tree);
+extern tree build_array_type_nelts (tree, poly_uint64);
+extern tree build_function_type (tree, tree);
+extern tree build_function_type_list (tree, ...);
+extern tree build_varargs_function_type_list (tree, ...);
+extern tree build_function_type_array (tree, int, tree *);
+extern tree build_varargs_function_type_array (tree, int, tree *);
+#define build_function_type_vec(RET, V) \
+  build_function_type_array (RET, vec_safe_length (V), vec_safe_address (V))
+#define build_varargs_function_type_vec(RET, V) \
+  build_varargs_function_type_array (RET, vec_safe_length (V), \
+				     vec_safe_address (V))
+extern tree build_method_type_directly (tree, tree, tree);
+extern tree build_method_type (tree, tree);
+extern tree build_offset_type (tree, tree);
+extern tree build_complex_type (tree, bool named = false);
+extern tree array_type_nelts (const_tree);
+
+extern tree value_member (tree, tree);
+extern tree purpose_member (const_tree, tree);
+extern bool vec_member (const_tree, vec<tree, va_gc> *);
+extern tree chain_index (int, tree);
+
+/* Arguments may be null.  */
+extern int tree_int_cst_equal (const_tree, const_tree);
+
+/* The following predicates are safe to call with a null argument.  */
+extern bool tree_fits_shwi_p (const_tree) ATTRIBUTE_PURE;
+extern bool tree_fits_poly_int64_p (const_tree) ATTRIBUTE_PURE;
+extern bool tree_fits_uhwi_p (const_tree) ATTRIBUTE_PURE;
+extern bool tree_fits_poly_uint64_p (const_tree) ATTRIBUTE_PURE;
+
+extern HOST_WIDE_INT tree_to_shwi (const_tree)
+  ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
+extern poly_int64 tree_to_poly_int64 (const_tree)
+  ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
+extern unsigned HOST_WIDE_INT tree_to_uhwi (const_tree)
+  ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
+extern poly_uint64 tree_to_poly_uint64 (const_tree)
+  ATTRIBUTE_NONNULL (1) ATTRIBUTE_PURE;
+#if !defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 4003)
+extern inline __attribute__ ((__gnu_inline__)) HOST_WIDE_INT
+tree_to_shwi (const_tree t)
+{
+  gcc_assert (tree_fits_shwi_p (t));
+  return TREE_INT_CST_LOW (t);
+}
+
+extern inline __attribute__ ((__gnu_inline__)) unsigned HOST_WIDE_INT
+tree_to_uhwi (const_tree t)
+{
+  gcc_assert (tree_fits_uhwi_p (t));
+  return TREE_INT_CST_LOW (t);
+}
+#if NUM_POLY_INT_COEFFS == 1
+extern inline __attribute__ ((__gnu_inline__)) poly_int64
+tree_to_poly_int64 (const_tree t)
+{
+  gcc_assert (tree_fits_poly_int64_p (t));
+  return TREE_INT_CST_LOW (t);
+}
+
+extern inline __attribute__ ((__gnu_inline__)) poly_uint64
+tree_to_poly_uint64 (const_tree t)
+{
+  gcc_assert (tree_fits_poly_uint64_p (t));
+  return TREE_INT_CST_LOW (t);
+}
+#endif
+#endif
+extern int tree_int_cst_sgn (const_tree);
+extern int tree_int_cst_sign_bit (const_tree);
+extern unsigned int tree_int_cst_min_precision (tree, signop);
+extern tree strip_array_types (tree);
+extern tree excess_precision_type (tree);
+
+/* Desription of the reason why the argument of valid_constant_size_p
+   is not a valid size.  */
+enum cst_size_error {
+  cst_size_ok,
+  cst_size_not_constant,
+  cst_size_negative,
+  cst_size_too_big,
+  cst_size_overflow
+};
+
+extern bool valid_constant_size_p (const_tree, cst_size_error * = NULL);
+extern tree max_object_size ();
+
+/* Return true if T holds a value that can be represented as a poly_int64
+   without loss of precision.  Store the value in *VALUE if so.  */
+
+inline bool
+poly_int_tree_p (const_tree t, poly_int64_pod *value)
+{
+  if (tree_fits_poly_int64_p (t))
+    {
+      *value = tree_to_poly_int64 (t);
+      return true;
+    }
+  return false;
+}
+
+/* Return true if T holds a value that can be represented as a poly_uint64
+   without loss of precision.  Store the value in *VALUE if so.  */
+
+inline bool
+poly_int_tree_p (const_tree t, poly_uint64_pod *value)
+{
+  if (tree_fits_poly_uint64_p (t))
+    {
+      *value = tree_to_poly_uint64 (t);
+      return true;
+    }
+  return false;
+}
+
+/* From expmed.c.  Since rtl.h is included after tree.h, we can't
+   put the prototype here.  Rtl.h does declare the prototype if
+   tree.h had been included.  */
+
+extern tree make_tree (tree, rtx);
+
+/* Returns true iff CAND and BASE have equivalent language-specific
+   qualifiers.  */
+
+extern bool check_lang_type (const_tree cand, const_tree base);
+
+/* Returns true iff unqualified CAND and BASE are equivalent.  */
+
+extern bool check_base_type (const_tree cand, const_tree base);
+
+/* Check whether CAND is suitable to be returned from get_qualified_type
+   (BASE, TYPE_QUALS).  */
+
+extern bool check_qualified_type (const_tree, const_tree, int);
+
+/* Return a version of the TYPE, qualified as indicated by the
+   TYPE_QUALS, if one exists.  If no qualified version exists yet,
+   return NULL_TREE.  */
+
+extern tree get_qualified_type (tree, int);
+
+/* Like get_qualified_type, but creates the type if it does not
+   exist.  This function never returns NULL_TREE.  */
+
+extern tree build_qualified_type (tree, int CXX_MEM_STAT_INFO);
+
+/* Create a variant of type T with alignment ALIGN.  */
+
+extern tree build_aligned_type (tree, unsigned int);
+
+/* Like build_qualified_type, but only deals with the `const' and
+   `volatile' qualifiers.  This interface is retained for backwards
+   compatibility with the various front-ends; new code should use
+   build_qualified_type instead.  */
+
+#define build_type_variant(TYPE, CONST_P, VOLATILE_P)			\
+  build_qualified_type ((TYPE),						\
+			((CONST_P) ? TYPE_QUAL_CONST : 0)		\
+			| ((VOLATILE_P) ? TYPE_QUAL_VOLATILE : 0))
+
+/* Make a copy of a type node.  */
+
+extern tree build_distinct_type_copy (tree CXX_MEM_STAT_INFO);
+extern tree build_variant_type_copy (tree CXX_MEM_STAT_INFO);
+
+/* Given a hashcode and a ..._TYPE node (for which the hashcode was made),
+   return a canonicalized ..._TYPE node, so that duplicates are not made.
+   How the hash code is computed is up to the caller, as long as any two
+   callers that could hash identical-looking type nodes agree.  */
+
+extern hashval_t type_hash_canon_hash (tree);
+extern tree type_hash_canon (unsigned int, tree);
+
+extern tree convert (tree, tree);
+extern unsigned int expr_align (const_tree);
+extern tree size_in_bytes_loc (location_t, const_tree);
+inline tree
+size_in_bytes (const_tree t)
+{
+  return size_in_bytes_loc (input_location, t);
+}
+
+extern HOST_WIDE_INT int_size_in_bytes (const_tree);
+extern HOST_WIDE_INT max_int_size_in_bytes (const_tree);
+extern tree bit_position (const_tree);
+extern tree byte_position (const_tree);
+extern HOST_WIDE_INT int_byte_position (const_tree);
+
+/* Type for sizes of data-type.  */
+
+#define sizetype sizetype_tab[(int) stk_sizetype]
+#define bitsizetype sizetype_tab[(int) stk_bitsizetype]
+#define ssizetype sizetype_tab[(int) stk_ssizetype]
+#define sbitsizetype sizetype_tab[(int) stk_sbitsizetype]
+#define size_int(L) size_int_kind (L, stk_sizetype)
+#define ssize_int(L) size_int_kind (L, stk_ssizetype)
+#define bitsize_int(L) size_int_kind (L, stk_bitsizetype)
+#define sbitsize_int(L) size_int_kind (L, stk_sbitsizetype)
+
+/* Log2 of BITS_PER_UNIT.  */
+
+#if BITS_PER_UNIT == 8
+#define LOG2_BITS_PER_UNIT 3
+#elif BITS_PER_UNIT == 16
+#define LOG2_BITS_PER_UNIT 4
+#else
+#error Unknown BITS_PER_UNIT
+#endif
+
+/* Concatenate two lists (chains of TREE_LIST nodes) X and Y
+   by making the last node in X point to Y.
+   Returns X, except if X is 0 returns Y.  */
+
+extern tree chainon (tree, tree);
+
+/* Make a new TREE_LIST node from specified PURPOSE, VALUE and CHAIN.  */
+
+extern tree tree_cons (tree, tree, tree CXX_MEM_STAT_INFO);
+
+/* Return the last tree node in a chain.  */
+
+extern tree tree_last (tree);
+
+/* Reverse the order of elements in a chain, and return the new head.  */
+
+extern tree nreverse (tree);
+
+/* Returns the length of a chain of nodes
+   (number of chain pointers to follow before reaching a null pointer).  */
+
+extern int list_length (const_tree);
+
+/* Returns the first FIELD_DECL in a type.  */
+
+extern tree first_field (const_tree);
+
+/* Given an initializer INIT, return TRUE if INIT is zero or some
+   aggregate of zeros.  Otherwise return FALSE.  If NONZERO is not
+   null, set *NONZERO if and only if INIT is known not to be all
+   zeros.  The combination of return value of false and *NONZERO
+   false implies that INIT may but need not be all zeros.  Other
+   combinations indicate definitive answers.  */
+
+extern bool initializer_zerop (const_tree, bool * = NULL);
+extern bool initializer_each_zero_or_onep (const_tree);
+
+extern wide_int vector_cst_int_elt (const_tree, unsigned int);
+extern tree vector_cst_elt (const_tree, unsigned int);
+
+/* Given a vector VEC, return its first element if all elements are
+   the same.  Otherwise return NULL_TREE.  */
+
+extern tree uniform_vector_p (const_tree);
+
+/* If the argument is INTEGER_CST, return it.  If the argument is vector
+   with all elements the same INTEGER_CST, return that INTEGER_CST.  Otherwise
+   return NULL_TREE.  */
+
+extern tree uniform_integer_cst_p (tree);
+
+extern int single_nonzero_element (const_tree);
+
+/* Given a CONSTRUCTOR CTOR, return the element values as a vector.  */
+
+extern vec<tree, va_gc> *ctor_to_vec (tree);
+
+/* zerop (tree x) is nonzero if X is a constant of value 0.  */
+
+extern bool zerop (const_tree);
+
+/* integer_zerop (tree x) is nonzero if X is an integer constant of value 0.  */
+
+extern bool integer_zerop (const_tree);
+
+/* integer_onep (tree x) is nonzero if X is an integer constant of value 1.  */
+
+extern bool integer_onep (const_tree);
+
+/* integer_onep (tree x) is nonzero if X is an integer constant of value 1, or
+   a vector or complex where each part is 1.  */
+
+extern bool integer_each_onep (const_tree);
+
+/* integer_all_onesp (tree x) is nonzero if X is an integer constant
+   all of whose significant bits are 1.  */
+
+extern bool integer_all_onesp (const_tree);
+
+/* integer_minus_onep (tree x) is nonzero if X is an integer constant of
+   value -1.  */
+
+extern bool integer_minus_onep (const_tree);
+
+/* integer_pow2p (tree x) is nonzero is X is an integer constant with
+   exactly one bit 1.  */
+
+extern bool integer_pow2p (const_tree);
+
+/* integer_nonzerop (tree x) is nonzero if X is an integer constant
+   with a nonzero value.  */
+
+extern bool integer_nonzerop (const_tree);
+
+/* integer_truep (tree x) is nonzero if X is an integer constant of value 1 or
+   a vector where each element is an integer constant of value -1.  */
+
+extern bool integer_truep (const_tree);
+
+extern bool cst_and_fits_in_hwi (const_tree);
+extern tree num_ending_zeros (const_tree);
+
+/* fixed_zerop (tree x) is nonzero if X is a fixed-point constant of
+   value 0.  */
+
+extern bool fixed_zerop (const_tree);
+
+/* staticp (tree x) is nonzero if X is a reference to data allocated
+   at a fixed address in memory.  Returns the outermost data.  */
+
+extern tree staticp (tree);
+
+/* save_expr (EXP) returns an expression equivalent to EXP
+   but it can be used multiple times within context CTX
+   and only evaluate EXP once.  */
+
+extern tree save_expr (tree);
+
+/* Return true if T is function-invariant.  */
+
+extern bool tree_invariant_p (tree);
+
+/* Look inside EXPR into any simple arithmetic operations.  Return the
+   outermost non-arithmetic or non-invariant node.  */
+
+extern tree skip_simple_arithmetic (tree);
+
+/* Look inside EXPR into simple arithmetic operations involving constants.
+   Return the outermost non-arithmetic or non-constant node.  */
+
+extern tree skip_simple_constant_arithmetic (tree);
+
+/* Return which tree structure is used by T.  */
+
+enum tree_node_structure_enum tree_node_structure (const_tree);
+
+/* Return true if EXP contains a PLACEHOLDER_EXPR, i.e. if it represents a
+   size or offset that depends on a field within a record.  */
+
+extern bool contains_placeholder_p (const_tree);
+
+/* This macro calls the above function but short-circuits the common
+   case of a constant to save time.  Also check for null.  */
+
+#define CONTAINS_PLACEHOLDER_P(EXP) \
+  ((EXP) != 0 && ! TREE_CONSTANT (EXP) && contains_placeholder_p (EXP))
+
+/* Return true if any part of the structure of TYPE involves a PLACEHOLDER_EXPR
+   directly.  This includes size, bounds, qualifiers (for QUAL_UNION_TYPE) and
+   field positions.  */
+
+extern bool type_contains_placeholder_p (tree);
+
+/* Given a tree EXP, find all occurrences of references to fields
+   in a PLACEHOLDER_EXPR and place them in vector REFS without
+   duplicates.  Also record VAR_DECLs and CONST_DECLs.  Note that
+   we assume here that EXP contains only arithmetic expressions
+   or CALL_EXPRs with PLACEHOLDER_EXPRs occurring only in their
+   argument list.  */
+
+extern void find_placeholder_in_expr (tree, vec<tree> *);
+
+/* This macro calls the above function but short-circuits the common
+   case of a constant to save time and also checks for NULL.  */
+
+#define FIND_PLACEHOLDER_IN_EXPR(EXP, V) \
+do {					 \
+  if((EXP) && !TREE_CONSTANT (EXP))	 \
+    find_placeholder_in_expr (EXP, V);	 \
+} while (0)
+
+/* Given a tree EXP, a FIELD_DECL F, and a replacement value R,
+   return a tree with all occurrences of references to F in a
+   PLACEHOLDER_EXPR replaced by R.  Also handle VAR_DECLs and
+   CONST_DECLs.  Note that we assume here that EXP contains only
+   arithmetic expressions or CALL_EXPRs with PLACEHOLDER_EXPRs
+   occurring only in their argument list.  */
+
+extern tree substitute_in_expr (tree, tree, tree);
+
+/* This macro calls the above function but short-circuits the common
+   case of a constant to save time and also checks for NULL.  */
+
+#define SUBSTITUTE_IN_EXPR(EXP, F, R) \
+  ((EXP) == 0 || TREE_CONSTANT (EXP) ? (EXP) : substitute_in_expr (EXP, F, R))
+
+/* Similar, but look for a PLACEHOLDER_EXPR in EXP and find a replacement
+   for it within OBJ, a tree that is an object or a chain of references.  */
+
+extern tree substitute_placeholder_in_expr (tree, tree);
+
+/* This macro calls the above function but short-circuits the common
+   case of a constant to save time and also checks for NULL.  */
+
+#define SUBSTITUTE_PLACEHOLDER_IN_EXPR(EXP, OBJ) \
+  ((EXP) == 0 || TREE_CONSTANT (EXP) ? (EXP)	\
+   : substitute_placeholder_in_expr (EXP, OBJ))
+
+
+/* stabilize_reference (EXP) returns a reference equivalent to EXP
+   but it can be used multiple times
+   and only evaluate the subexpressions once.  */
+
+extern tree stabilize_reference (tree);
+
+/* Return EXP, stripped of any conversions to wider types
+   in such a way that the result of converting to type FOR_TYPE
+   is the same as if EXP were converted to FOR_TYPE.
+   If FOR_TYPE is 0, it signifies EXP's type.  */
+
+extern tree get_unwidened (tree, tree);
+
+/* Return OP or a simpler expression for a narrower value
+   which can be sign-extended or zero-extended to give back OP.
+   Store in *UNSIGNEDP_PTR either 1 if the value should be zero-extended
+   or 0 if the value should be sign-extended.  */
+
+extern tree get_narrower (tree, int *);
+
+/* Return true if T is an expression that get_inner_reference handles.  */
+
+static inline bool
+handled_component_p (const_tree t)
+{
+  switch (TREE_CODE (t))
+    {
+    case COMPONENT_REF:
+    case BIT_FIELD_REF:
+    case ARRAY_REF:
+    case ARRAY_RANGE_REF:
+    case REALPART_EXPR:
+    case IMAGPART_EXPR:
+    case VIEW_CONVERT_EXPR:
+      return true;
+
+    default:
+      return false;
+    }
+}
+
+/* Return true T is a component with reverse storage order.  */
+
+static inline bool
+reverse_storage_order_for_component_p (tree t)
+{
+  /* The storage order only applies to scalar components.  */
+  if (AGGREGATE_TYPE_P (TREE_TYPE (t)) || VECTOR_TYPE_P (TREE_TYPE (t)))
+    return false;
+
+  if (TREE_CODE (t) == REALPART_EXPR || TREE_CODE (t) == IMAGPART_EXPR)
+    t = TREE_OPERAND (t, 0);
+
+  switch (TREE_CODE (t))
+    {
+    case ARRAY_REF:
+    case COMPONENT_REF:
+      /* ??? Fortran can take COMPONENT_REF of a VOID_TYPE.  */
+      /* ??? UBSan can take COMPONENT_REF of a REFERENCE_TYPE.  */
+      return AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (t, 0)))
+	     && TYPE_REVERSE_STORAGE_ORDER (TREE_TYPE (TREE_OPERAND (t, 0)));
+
+    case BIT_FIELD_REF:
+    case MEM_REF:
+      return REF_REVERSE_STORAGE_ORDER (t);
+
+    case ARRAY_RANGE_REF:
+    case VIEW_CONVERT_EXPR:
+    default:
+      return false;
+    }
+
+  gcc_unreachable ();
+}
+
+/* Return true if T is a storage order barrier, i.e. a VIEW_CONVERT_EXPR
+   that can modify the storage order of objects.  Note that, even if the
+   TYPE_REVERSE_STORAGE_ORDER flag is set on both the inner type and the
+   outer type, a VIEW_CONVERT_EXPR can modify the storage order because
+   it can change the partition of the aggregate object into scalars.  */
+
+static inline bool
+storage_order_barrier_p (const_tree t)
+{
+  if (TREE_CODE (t) != VIEW_CONVERT_EXPR)
+    return false;
+
+  if (AGGREGATE_TYPE_P (TREE_TYPE (t))
+      && TYPE_REVERSE_STORAGE_ORDER (TREE_TYPE (t)))
+    return true;
+
+  tree op = TREE_OPERAND (t, 0);
+
+  if (AGGREGATE_TYPE_P (TREE_TYPE (op))
+      && TYPE_REVERSE_STORAGE_ORDER (TREE_TYPE (op)))
+    return true;
+
+  return false;
+}
+
+/* Given a DECL or TYPE, return the scope in which it was declared, or
+   NUL_TREE if there is no containing scope.  */
+
+extern tree get_containing_scope (const_tree);
+
+/* Returns the ultimate TRANSLATION_UNIT_DECL context of DECL or NULL.  */
+
+extern const_tree get_ultimate_context (const_tree);
+
+/* Return the FUNCTION_DECL which provides this _DECL with its context,
+   or zero if none.  */
+extern tree decl_function_context (const_tree);
+
+/* Return the RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE which provides
+   this _DECL with its context, or zero if none.  */
+extern tree decl_type_context (const_tree);
+
+/* Return true if EXPR is the real constant zero.  */
+extern bool real_zerop (const_tree);
+
+/* Initialize the iterator I with arguments from function FNDECL  */
+
+static inline void
+function_args_iter_init (function_args_iterator *i, const_tree fntype)
+{
+  i->next = TYPE_ARG_TYPES (fntype);
+}
+
+/* Return a pointer that holds the next argument if there are more arguments to
+   handle, otherwise return NULL.  */
+
+static inline tree *
+function_args_iter_cond_ptr (function_args_iterator *i)
+{
+  return (i->next) ? &TREE_VALUE (i->next) : NULL;
+}
+
+/* Return the next argument if there are more arguments to handle, otherwise
+   return NULL.  */
+
+static inline tree
+function_args_iter_cond (function_args_iterator *i)
+{
+  return (i->next) ? TREE_VALUE (i->next) : NULL_TREE;
+}
+
+/* Advance to the next argument.  */
+static inline void
+function_args_iter_next (function_args_iterator *i)
+{
+  gcc_assert (i->next != NULL_TREE);
+  i->next = TREE_CHAIN (i->next);
+}
+
+/* We set BLOCK_SOURCE_LOCATION only to inlined function entry points.  */
+
+static inline bool
+inlined_function_outer_scope_p (const_tree block)
+{
+ return LOCATION_LOCUS (BLOCK_SOURCE_LOCATION (block)) != UNKNOWN_LOCATION;
+}
+
+/* Loop over all function arguments of FNTYPE.  In each iteration, PTR is set
+   to point to the next tree element.  ITER is an instance of
+   function_args_iterator used to iterate the arguments.  */
+#define FOREACH_FUNCTION_ARGS_PTR(FNTYPE, PTR, ITER)			\
+  for (function_args_iter_init (&(ITER), (FNTYPE));			\
+       (PTR = function_args_iter_cond_ptr (&(ITER))) != NULL;		\
+       function_args_iter_next (&(ITER)))
+
+/* Loop over all function arguments of FNTYPE.  In each iteration, TREE is set
+   to the next tree element.  ITER is an instance of function_args_iterator
+   used to iterate the arguments.  */
+#define FOREACH_FUNCTION_ARGS(FNTYPE, TREE, ITER)			\
+  for (function_args_iter_init (&(ITER), (FNTYPE));			\
+       (TREE = function_args_iter_cond (&(ITER))) != NULL_TREE;		\
+       function_args_iter_next (&(ITER)))
+
+/* In tree.c */
+extern unsigned crc32_unsigned_n (unsigned, unsigned, unsigned);
+extern unsigned crc32_string (unsigned, const char *);
+inline unsigned
+crc32_unsigned (unsigned chksum, unsigned value)
+{
+  return crc32_unsigned_n (chksum, value, 4);
+}
+inline unsigned
+crc32_byte (unsigned chksum, char byte)
+{
+  return crc32_unsigned_n (chksum, byte, 1);
+}
+extern void clean_symbol_name (char *);
+extern tree get_file_function_name (const char *);
+extern tree get_callee_fndecl (const_tree);
+extern combined_fn get_call_combined_fn (const_tree);
+extern int type_num_arguments (const_tree);
+extern tree type_argument_type (const_tree, unsigned) ATTRIBUTE_NONNULL (1);
+extern bool associative_tree_code (enum tree_code);
+extern bool commutative_tree_code (enum tree_code);
+extern bool commutative_ternary_tree_code (enum tree_code);
+extern bool operation_can_overflow (enum tree_code);
+extern bool operation_no_trapping_overflow (tree, enum tree_code);
+extern tree upper_bound_in_type (tree, tree);
+extern tree lower_bound_in_type (tree, tree);
+extern int operand_equal_for_phi_arg_p (const_tree, const_tree);
+extern tree create_artificial_label (location_t);
+extern const char *get_name (tree);
+extern bool stdarg_p (const_tree);
+extern bool prototype_p (const_tree);
+extern bool is_typedef_decl (const_tree x);
+extern bool typedef_variant_p (const_tree);
+extern bool auto_var_p (const_tree);
+extern bool auto_var_in_fn_p (const_tree, const_tree);
+extern tree build_low_bits_mask (tree, unsigned);
+extern bool tree_nop_conversion_p (const_tree, const_tree);
+extern tree tree_strip_nop_conversions (tree);
+extern tree tree_strip_sign_nop_conversions (tree);
+extern const_tree strip_invariant_refs (const_tree);
+extern tree lhd_gcc_personality (void);
+extern void assign_assembler_name_if_needed (tree);
+extern bool warn_deprecated_use (tree, tree);
+extern void cache_integer_cst (tree);
+extern const char *combined_fn_name (combined_fn);
+
+/* Compare and hash for any structure which begins with a canonical
+   pointer.  Assumes all pointers are interchangeable, which is sort
+   of already assumed by gcc elsewhere IIRC.  */
+
+static inline int
+struct_ptr_eq (const void *a, const void *b)
+{
+  const void * const * x = (const void * const *) a;
+  const void * const * y = (const void * const *) b;
+  return *x == *y;
+}
+
+static inline hashval_t
+struct_ptr_hash (const void *a)
+{
+  const void * const * x = (const void * const *) a;
+  return (intptr_t)*x >> 4;
+}
+
+/* Return nonzero if CODE is a tree code that represents a truth value.  */
+static inline bool
+truth_value_p (enum tree_code code)
+{
+  return (TREE_CODE_CLASS (code) == tcc_comparison
+	  || code == TRUTH_AND_EXPR || code == TRUTH_ANDIF_EXPR
+	  || code == TRUTH_OR_EXPR || code == TRUTH_ORIF_EXPR
+	  || code == TRUTH_XOR_EXPR || code == TRUTH_NOT_EXPR);
+}
+
+/* Return whether TYPE is a type suitable for an offset for
+   a POINTER_PLUS_EXPR.  */
+static inline bool
+ptrofftype_p (tree type)
+{
+  return (INTEGRAL_TYPE_P (type)
+	  && TYPE_PRECISION (type) == TYPE_PRECISION (sizetype)
+	  && TYPE_UNSIGNED (type) == TYPE_UNSIGNED (sizetype));
+}
+
+/* Return true if the argument is a complete type or an array
+   of unknown bound (whose type is incomplete but) whose elements
+   have complete type.  */
+static inline bool
+complete_or_array_type_p (const_tree type)
+{
+  return COMPLETE_TYPE_P (type)
+         || (TREE_CODE (type) == ARRAY_TYPE
+	     && COMPLETE_TYPE_P (TREE_TYPE (type)));
+}
+
+/* Return true if the value of T could be represented as a poly_widest_int.  */
+
+inline bool
+poly_int_tree_p (const_tree t)
+{
+  return (TREE_CODE (t) == INTEGER_CST || POLY_INT_CST_P (t));
+}
+
+/* Return the bit size of BIT_FIELD_REF T, in cases where it is known
+   to be a poly_uint64.  (This is always true at the gimple level.)  */
+
+inline poly_uint64
+bit_field_size (const_tree t)
+{
+  return tree_to_poly_uint64 (TREE_OPERAND (t, 1));
+}
+
+/* Return the starting bit offset of BIT_FIELD_REF T, in cases where it is
+   known to be a poly_uint64.  (This is always true at the gimple level.)  */
+
+inline poly_uint64
+bit_field_offset (const_tree t)
+{
+  return tree_to_poly_uint64 (TREE_OPERAND (t, 2));
+}
+
+extern tree strip_float_extensions (tree);
+extern bool really_constant_p (const_tree);
+extern bool ptrdiff_tree_p (const_tree, poly_int64_pod *);
+extern bool decl_address_invariant_p (const_tree);
+extern bool decl_address_ip_invariant_p (const_tree);
+extern bool int_fits_type_p (const_tree, const_tree)
+  ATTRIBUTE_NONNULL (1) ATTRIBUTE_NONNULL (2) ATTRIBUTE_PURE;
+#ifndef GENERATOR_FILE
+extern void get_type_static_bounds (const_tree, mpz_t, mpz_t);
+#endif
+extern bool variably_modified_type_p (tree, tree);
+extern int tree_log2 (const_tree);
+extern int tree_floor_log2 (const_tree);
+extern unsigned int tree_ctz (const_tree);
+extern int simple_cst_equal (const_tree, const_tree);
+
+namespace inchash
+{
+
+extern void add_expr (const_tree, hash &, unsigned int = 0);
+
+}
+
+/* Compat version until all callers are converted. Return hash for
+   TREE with SEED.  */
+static inline hashval_t iterative_hash_expr(const_tree tree, hashval_t seed)
+{
+  inchash::hash hstate (seed);
+  inchash::add_expr (tree, hstate);
+  return hstate.end ();
+}
+
+extern int compare_tree_int (const_tree, unsigned HOST_WIDE_INT);
+extern bool type_list_equal (const_tree, const_tree);
+extern bool chain_member (const_tree, const_tree);
+extern void dump_tree_statistics (void);
+extern void recompute_tree_invariant_for_addr_expr (tree);
+extern bool needs_to_live_in_memory (const_tree);
+extern tree reconstruct_complex_type (tree, tree);
+extern bool real_onep (const_tree);
+extern bool real_minus_onep (const_tree);
+extern void init_ttree (void);
+extern void build_common_tree_nodes (bool);
+extern void build_common_builtin_nodes (void);
+extern tree build_nonstandard_integer_type (unsigned HOST_WIDE_INT, int);
+extern tree build_nonstandard_boolean_type (unsigned HOST_WIDE_INT);
+extern tree build_range_type (tree, tree, tree);
+extern tree build_nonshared_range_type (tree, tree, tree);
+extern bool subrange_type_for_debug_p (const_tree, tree *, tree *);
+extern HOST_WIDE_INT int_cst_value (const_tree);
+extern tree tree_block (tree);
+extern void tree_set_block (tree, tree);
+extern location_t *block_nonartificial_location (tree);
+extern location_t tree_nonartificial_location (tree);
+extern tree block_ultimate_origin (const_tree);
+extern tree get_binfo_at_offset (tree, poly_int64, tree);
+extern bool virtual_method_call_p (const_tree);
+extern tree obj_type_ref_class (const_tree ref);
+extern bool types_same_for_odr (const_tree type1, const_tree type2);
+extern bool contains_bitfld_component_ref_p (const_tree);
+extern bool block_may_fallthru (const_tree);
+extern void using_eh_for_cleanups (void);
+extern bool using_eh_for_cleanups_p (void);
+extern const char *get_tree_code_name (enum tree_code);
+extern void set_call_expr_flags (tree, int);
+extern tree walk_tree_1 (tree*, walk_tree_fn, void*, hash_set<tree>*,
+			 walk_tree_lh);
+extern tree walk_tree_without_duplicates_1 (tree*, walk_tree_fn, void*,
+					    walk_tree_lh);
+#define walk_tree(a,b,c,d) \
+	walk_tree_1 (a, b, c, d, NULL)
+#define walk_tree_without_duplicates(a,b,c) \
+	walk_tree_without_duplicates_1 (a, b, c, NULL)
+
+extern tree drop_tree_overflow (tree);
+
+/* Given a memory reference expression T, return its base address.
+   The base address of a memory reference expression is the main
+   object being referenced.  */
+extern tree get_base_address (tree t);
+
+/* Return a tree of sizetype representing the size, in bytes, of the element
+   of EXP, an ARRAY_REF or an ARRAY_RANGE_REF.  */
+extern tree array_ref_element_size (tree);
+
+/* Return a typenode for the "standard" C type with a given name.  */
+extern tree get_typenode_from_name (const char *);
+
+/* Return a tree representing the upper bound of the array mentioned in
+   EXP, an ARRAY_REF or an ARRAY_RANGE_REF.  */
+extern tree array_ref_up_bound (tree);
+
+/* Return a tree representing the lower bound of the array mentioned in
+   EXP, an ARRAY_REF or an ARRAY_RANGE_REF.  */
+extern tree array_ref_low_bound (tree);
+
+/* Returns true if REF is an array reference or a component reference
+   to an array at the end of a structure.  If this is the case, the array
+   may be allocated larger than its upper bound implies.  */
+extern bool array_at_struct_end_p (tree);
+
+/* Return a tree representing the offset, in bytes, of the field referenced
+   by EXP.  This does not include any offset in DECL_FIELD_BIT_OFFSET.  */
+extern tree component_ref_field_offset (tree);
+
+extern int tree_map_base_eq (const void *, const void *);
+extern unsigned int tree_map_base_hash (const void *);
+extern int tree_map_base_marked_p (const void *);
+extern void DEBUG_FUNCTION verify_type (const_tree t);
+extern bool gimple_canonical_types_compatible_p (const_tree, const_tree,
+						 bool trust_type_canonical = true);
+extern bool type_with_interoperable_signedness (const_tree);
+extern bitmap get_nonnull_args (const_tree);
+extern int get_range_pos_neg (tree);
+
+/* Return simplified tree code of type that is used for canonical type
+   merging.  */
+inline enum tree_code
+tree_code_for_canonical_type_merging (enum tree_code code)
+{
+  /* By C standard, each enumerated type shall be compatible with char,
+     a signed integer, or an unsigned integer.  The choice of type is
+     implementation defined (in our case it depends on -fshort-enum).
+
+     For this reason we make no distinction between ENUMERAL_TYPE and INTEGER
+     type and compare only by their signedness and precision.  */
+  if (code == ENUMERAL_TYPE)
+    return INTEGER_TYPE;
+  /* To allow inter-operability between languages having references and
+     C, we consider reference types and pointers alike.  Note that this is
+     not strictly necessary for C-Fortran 2008 interoperability because
+     Fortran define C_PTR type that needs to be compatible with C pointers
+     and we handle this one as ptr_type_node.  */
+  if (code == REFERENCE_TYPE)
+    return POINTER_TYPE;
+  return code;
+}
+
+/* Return ture if get_alias_set care about TYPE_CANONICAL of given type.
+   We don't define the types for pointers, arrays and vectors.  The reason is
+   that pointers are handled specially: ptr_type_node accesses conflict with
+   accesses to all other pointers.  This is done by alias.c.
+   Because alias sets of arrays and vectors are the same as types of their
+   elements, we can't compute canonical type either.  Otherwise we could go
+   form void *[10] to int *[10] (because they are equivalent for canonical type
+   machinery) and get wrong TBAA.  */
+
+inline bool
+canonical_type_used_p (const_tree t)
+{
+  return !(POINTER_TYPE_P (t)
+	   || TREE_CODE (t) == ARRAY_TYPE
+	   || TREE_CODE (t) == VECTOR_TYPE);
+}
+
+#define tree_map_eq tree_map_base_eq
+extern unsigned int tree_map_hash (const void *);
+#define tree_map_marked_p tree_map_base_marked_p
+
+#define tree_decl_map_eq tree_map_base_eq
+extern unsigned int tree_decl_map_hash (const void *);
+#define tree_decl_map_marked_p tree_map_base_marked_p
+
+struct tree_decl_map_cache_hasher : ggc_cache_ptr_hash<tree_decl_map>
+{
+  static hashval_t hash (tree_decl_map *m) { return tree_decl_map_hash (m); }
+  static bool
+  equal (tree_decl_map *a, tree_decl_map *b)
+  {
+    return tree_decl_map_eq (a, b);
+  }
+
+  static int
+  keep_cache_entry (tree_decl_map *&m)
+  {
+    return ggc_marked_p (m->base.from);
+  }
+};
+
+#define tree_int_map_eq tree_map_base_eq
+#define tree_int_map_hash tree_map_base_hash
+#define tree_int_map_marked_p tree_map_base_marked_p
+
+#define tree_vec_map_eq tree_map_base_eq
+#define tree_vec_map_hash tree_decl_map_hash
+#define tree_vec_map_marked_p tree_map_base_marked_p
+
+/* A hash_map of two trees for use with GTY((cache)).  Garbage collection for
+   such a map will not mark keys, and will mark values if the key is already
+   marked.  */
+struct tree_cache_traits
+  : simple_cache_map_traits<default_hash_traits<tree>, tree> { };
+typedef hash_map<tree,tree,tree_cache_traits> tree_cache_map;
+
+/* Initialize the abstract argument list iterator object ITER with the
+   arguments from CALL_EXPR node EXP.  */
+static inline void
+init_call_expr_arg_iterator (tree exp, call_expr_arg_iterator *iter)
+{
+  iter->t = exp;
+  iter->n = call_expr_nargs (exp);
+  iter->i = 0;
+}
+
+static inline void
+init_const_call_expr_arg_iterator (const_tree exp, const_call_expr_arg_iterator *iter)
+{
+  iter->t = exp;
+  iter->n = call_expr_nargs (exp);
+  iter->i = 0;
+}
+
+/* Return the next argument from abstract argument list iterator object ITER,
+   and advance its state.  Return NULL_TREE if there are no more arguments.  */
+static inline tree
+next_call_expr_arg (call_expr_arg_iterator *iter)
+{
+  tree result;
+  if (iter->i >= iter->n)
+    return NULL_TREE;
+  result = CALL_EXPR_ARG (iter->t, iter->i);
+  iter->i++;
+  return result;
+}
+
+static inline const_tree
+next_const_call_expr_arg (const_call_expr_arg_iterator *iter)
+{
+  const_tree result;
+  if (iter->i >= iter->n)
+    return NULL_TREE;
+  result = CALL_EXPR_ARG (iter->t, iter->i);
+  iter->i++;
+  return result;
+}
+
+/* Initialize the abstract argument list iterator object ITER, then advance
+   past and return the first argument.  Useful in for expressions, e.g.
+     for (arg = first_call_expr_arg (exp, &iter); arg;
+          arg = next_call_expr_arg (&iter))   */
+static inline tree
+first_call_expr_arg (tree exp, call_expr_arg_iterator *iter)
+{
+  init_call_expr_arg_iterator (exp, iter);
+  return next_call_expr_arg (iter);
+}
+
+static inline const_tree
+first_const_call_expr_arg (const_tree exp, const_call_expr_arg_iterator *iter)
+{
+  init_const_call_expr_arg_iterator (exp, iter);
+  return next_const_call_expr_arg (iter);
+}
+
+/* Test whether there are more arguments in abstract argument list iterator
+   ITER, without changing its state.  */
+static inline bool
+more_call_expr_args_p (const call_expr_arg_iterator *iter)
+{
+  return (iter->i < iter->n);
+}
+
+/* Iterate through each argument ARG of CALL_EXPR CALL, using variable ITER
+   (of type call_expr_arg_iterator) to hold the iteration state.  */
+#define FOR_EACH_CALL_EXPR_ARG(arg, iter, call)			\
+  for ((arg) = first_call_expr_arg ((call), &(iter)); (arg);	\
+       (arg) = next_call_expr_arg (&(iter)))
+
+#define FOR_EACH_CONST_CALL_EXPR_ARG(arg, iter, call)			\
+  for ((arg) = first_const_call_expr_arg ((call), &(iter)); (arg);	\
+       (arg) = next_const_call_expr_arg (&(iter)))
+
+/* Return true if tree node T is a language-specific node.  */
+static inline bool
+is_lang_specific (const_tree t)
+{
+  return TREE_CODE (t) == LANG_TYPE || TREE_CODE (t) >= NUM_TREE_CODES;
+}
+
+/* Valid builtin number.  */
+#define BUILTIN_VALID_P(FNCODE) \
+  (IN_RANGE ((int)FNCODE, ((int)BUILT_IN_NONE) + 1, ((int) END_BUILTINS) - 1))
+
+/* Return the tree node for an explicit standard builtin function or NULL.  */
+static inline tree
+builtin_decl_explicit (enum built_in_function fncode)
+{
+  gcc_checking_assert (BUILTIN_VALID_P (fncode));
+
+  return builtin_info[(size_t)fncode].decl;
+}
+
+/* Return the tree node for an implicit builtin function or NULL.  */
+static inline tree
+builtin_decl_implicit (enum built_in_function fncode)
+{
+  size_t uns_fncode = (size_t)fncode;
+  gcc_checking_assert (BUILTIN_VALID_P (fncode));
+
+  if (!builtin_info[uns_fncode].implicit_p)
+    return NULL_TREE;
+
+  return builtin_info[uns_fncode].decl;
+}
+
+/* Set explicit builtin function nodes and whether it is an implicit
+   function.  */
+
+static inline void
+set_builtin_decl (enum built_in_function fncode, tree decl, bool implicit_p)
+{
+  size_t ufncode = (size_t)fncode;
+
+  gcc_checking_assert (BUILTIN_VALID_P (fncode)
+		       && (decl != NULL_TREE || !implicit_p));
+
+  builtin_info[ufncode].decl = decl;
+  builtin_info[ufncode].implicit_p = implicit_p;
+  builtin_info[ufncode].declared_p = false;
+}
+
+/* Set the implicit flag for a builtin function.  */
+
+static inline void
+set_builtin_decl_implicit_p (enum built_in_function fncode, bool implicit_p)
+{
+  size_t uns_fncode = (size_t)fncode;
+
+  gcc_checking_assert (BUILTIN_VALID_P (fncode)
+		       && builtin_info[uns_fncode].decl != NULL_TREE);
+
+  builtin_info[uns_fncode].implicit_p = implicit_p;
+}
+
+/* Set the declared flag for a builtin function.  */
+
+static inline void
+set_builtin_decl_declared_p (enum built_in_function fncode, bool declared_p)
+{
+  size_t uns_fncode = (size_t)fncode;
+
+  gcc_checking_assert (BUILTIN_VALID_P (fncode)
+		       && builtin_info[uns_fncode].decl != NULL_TREE);
+
+  builtin_info[uns_fncode].declared_p = declared_p;
+}
+
+/* Return whether the standard builtin function can be used as an explicit
+   function.  */
+
+static inline bool
+builtin_decl_explicit_p (enum built_in_function fncode)
+{
+  gcc_checking_assert (BUILTIN_VALID_P (fncode));
+  return (builtin_info[(size_t)fncode].decl != NULL_TREE);
+}
+
+/* Return whether the standard builtin function can be used implicitly.  */
+
+static inline bool
+builtin_decl_implicit_p (enum built_in_function fncode)
+{
+  size_t uns_fncode = (size_t)fncode;
+
+  gcc_checking_assert (BUILTIN_VALID_P (fncode));
+  return (builtin_info[uns_fncode].decl != NULL_TREE
+	  && builtin_info[uns_fncode].implicit_p);
+}
+
+/* Return whether the standard builtin function was declared.  */
+
+static inline bool
+builtin_decl_declared_p (enum built_in_function fncode)
+{
+  size_t uns_fncode = (size_t)fncode;
+
+  gcc_checking_assert (BUILTIN_VALID_P (fncode));
+  return (builtin_info[uns_fncode].decl != NULL_TREE
+	  && builtin_info[uns_fncode].declared_p);
+}
+
+/* Return true if T (assumed to be a DECL) is a global variable.
+   A variable is considered global if its storage is not automatic.  */
+
+static inline bool
+is_global_var (const_tree t)
+{
+  return (TREE_STATIC (t) || DECL_EXTERNAL (t));
+}
+
+/* Return true if VAR may be aliased.  A variable is considered as
+   maybe aliased if it has its address taken by the local TU
+   or possibly by another TU and might be modified through a pointer.  */
+
+static inline bool
+may_be_aliased (const_tree var)
+{
+  return (TREE_CODE (var) != CONST_DECL
+	  && (TREE_PUBLIC (var)
+	      || DECL_EXTERNAL (var)
+	      || TREE_ADDRESSABLE (var))
+	  && !((TREE_STATIC (var) || TREE_PUBLIC (var) || DECL_EXTERNAL (var))
+	       && (TREE_READONLY (var)
+		   || (TREE_CODE (var) == VAR_DECL
+		       && DECL_NONALIASED (var)))));
+}
+
+/* Return pointer to optimization flags of FNDECL.  */
+static inline struct cl_optimization *
+opts_for_fn (const_tree fndecl)
+{
+  tree fn_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (fndecl);
+  if (fn_opts == NULL_TREE)
+    fn_opts = optimization_default_node;
+  return TREE_OPTIMIZATION (fn_opts);
+}
+
+/* Return pointer to target flags of FNDECL.  */
+static inline cl_target_option *
+target_opts_for_fn (const_tree fndecl)
+{
+  tree fn_opts = DECL_FUNCTION_SPECIFIC_TARGET (fndecl);
+  if (fn_opts == NULL_TREE)
+    fn_opts = target_option_default_node;
+  return fn_opts == NULL_TREE ? NULL : TREE_TARGET_OPTION (fn_opts);
+}
+
+/* opt flag for function FNDECL, e.g. opts_for_fn (fndecl, optimize) is
+   the optimization level of function fndecl.  */
+#define opt_for_fn(fndecl, opt) (opts_for_fn (fndecl)->x_##opt)
+
+/* For anonymous aggregate types, we need some sort of name to
+   hold on to.  In practice, this should not appear, but it should
+   not be harmful if it does.  */
+extern const char *anon_aggrname_format();
+extern bool anon_aggrname_p (const_tree);
+
+/* The tree and const_tree overload templates.   */
+namespace wi
+{
+  class unextended_tree
+  {
+  private:
+    const_tree m_t;
+
+  public:
+    unextended_tree () {}
+    unextended_tree (const_tree t) : m_t (t) {}
+
+    unsigned int get_precision () const;
+    const HOST_WIDE_INT *get_val () const;
+    unsigned int get_len () const;
+    const_tree get_tree () const { return m_t; }
+  };
+
+  template <>
+  struct int_traits <unextended_tree>
+  {
+    static const enum precision_type precision_type = VAR_PRECISION;
+    static const bool host_dependent_precision = false;
+    static const bool is_sign_extended = false;
+  };
+
+  template <int N>
+  class extended_tree
+  {
+  private:
+    const_tree m_t;
+
+  public:
+    extended_tree () {}
+    extended_tree (const_tree);
+
+    unsigned int get_precision () const;
+    const HOST_WIDE_INT *get_val () const;
+    unsigned int get_len () const;
+    const_tree get_tree () const { return m_t; }
+  };
+
+  template <int N>
+  struct int_traits <extended_tree <N> >
+  {
+    static const enum precision_type precision_type = CONST_PRECISION;
+    static const bool host_dependent_precision = false;
+    static const bool is_sign_extended = true;
+    static const unsigned int precision = N;
+  };
+
+  typedef extended_tree <WIDE_INT_MAX_PRECISION> widest_extended_tree;
+  typedef extended_tree <ADDR_MAX_PRECISION> offset_extended_tree;
+
+  typedef const generic_wide_int <widest_extended_tree> tree_to_widest_ref;
+  typedef const generic_wide_int <offset_extended_tree> tree_to_offset_ref;
+  typedef const generic_wide_int<wide_int_ref_storage<false, false> >
+    tree_to_wide_ref;
+
+  tree_to_widest_ref to_widest (const_tree);
+  tree_to_offset_ref to_offset (const_tree);
+  tree_to_wide_ref to_wide (const_tree);
+  wide_int to_wide (const_tree, unsigned int);
+
+  typedef const poly_int <NUM_POLY_INT_COEFFS,
+			  generic_wide_int <widest_extended_tree> >
+    tree_to_poly_widest_ref;
+  typedef const poly_int <NUM_POLY_INT_COEFFS,
+			  generic_wide_int <offset_extended_tree> >
+    tree_to_poly_offset_ref;
+  typedef const poly_int <NUM_POLY_INT_COEFFS,
+			  generic_wide_int <unextended_tree> >
+    tree_to_poly_wide_ref;
+
+  tree_to_poly_widest_ref to_poly_widest (const_tree);
+  tree_to_poly_offset_ref to_poly_offset (const_tree);
+  tree_to_poly_wide_ref to_poly_wide (const_tree);
+
+  template <int N>
+  struct ints_for <generic_wide_int <extended_tree <N> >, CONST_PRECISION>
+  {
+    typedef generic_wide_int <extended_tree <N> > extended;
+    static extended zero (const extended &);
+  };
+
+  template <>
+  struct ints_for <generic_wide_int <unextended_tree>, VAR_PRECISION>
+  {
+    typedef generic_wide_int <unextended_tree> unextended;
+    static unextended zero (const unextended &);
+  };
+}
+
+/* Used to convert a tree to a widest2_int like this:
+   widest2_int foo = widest2_int_cst (some_tree).  */
+typedef generic_wide_int <wi::extended_tree <WIDE_INT_MAX_PRECISION * 2> >
+  widest2_int_cst;
+
+/* Refer to INTEGER_CST T as though it were a widest_int.
+
+   This function gives T's actual numerical value, influenced by the
+   signedness of its type.  For example, a signed byte with just the
+   top bit set would be -128 while an unsigned byte with the same
+   bit pattern would be 128.
+
+   This is the right choice when operating on groups of INTEGER_CSTs
+   that might have different signedness or precision.  It is also the
+   right choice in code that specifically needs an approximation of
+   infinite-precision arithmetic instead of normal modulo arithmetic.
+
+   The approximation of infinite precision is good enough for realistic
+   numbers of additions and subtractions of INTEGER_CSTs (where
+   "realistic" includes any number less than 1 << 31) but it cannot
+   represent the result of multiplying the two largest supported
+   INTEGER_CSTs.  The overflow-checking form of wi::mul provides a way
+   of multiplying two arbitrary INTEGER_CSTs and checking that the
+   result is representable as a widest_int.
+
+   Note that any overflow checking done on these values is relative to
+   the range of widest_int rather than the range of a TREE_TYPE.
+
+   Calling this function should have no overhead in release builds,
+   so it is OK to call it several times for the same tree.  If it is
+   useful for readability reasons to reduce the number of calls,
+   it is more efficient to use:
+
+     wi::tree_to_widest_ref wt = wi::to_widest (t);
+
+   instead of:
+
+     widest_int wt = wi::to_widest (t).  */
+
+inline wi::tree_to_widest_ref
+wi::to_widest (const_tree t)
+{
+  return t;
+}
+
+/* Refer to INTEGER_CST T as though it were an offset_int.
+
+   This function is an optimisation of wi::to_widest for cases
+   in which T is known to be a bit or byte count in the range
+   (-(2 ^ (N + BITS_PER_UNIT)), 2 ^ (N + BITS_PER_UNIT)), where N is
+   the target's address size in bits.
+
+   This is the right choice when operating on bit or byte counts as
+   untyped numbers rather than M-bit values.  The wi::to_widest comments
+   about addition, subtraction and multiplication apply here: sequences
+   of 1 << 31 additions and subtractions do not induce overflow, but
+   multiplying the largest sizes might.  Again,
+
+     wi::tree_to_offset_ref wt = wi::to_offset (t);
+
+   is more efficient than:
+
+     offset_int wt = wi::to_offset (t).  */
+
+inline wi::tree_to_offset_ref
+wi::to_offset (const_tree t)
+{
+  return t;
+}
+
+/* Refer to INTEGER_CST T as though it were a wide_int.
+
+   In contrast to the approximation of infinite-precision numbers given
+   by wi::to_widest and wi::to_offset, this function treats T as a
+   signless collection of N bits, where N is the precision of T's type.
+   As with machine registers, signedness is determined by the operation
+   rather than the operands; for example, there is a distinction between
+   signed and unsigned division.
+
+   This is the right choice when operating on values with the same type
+   using normal modulo arithmetic.  The overflow-checking forms of things
+   like wi::add check whether the result can be represented in T's type.
+
+   Calling this function should have no overhead in release builds,
+   so it is OK to call it several times for the same tree.  If it is
+   useful for readability reasons to reduce the number of calls,
+   it is more efficient to use:
+
+     wi::tree_to_wide_ref wt = wi::to_wide (t);
+
+   instead of:
+
+     wide_int wt = wi::to_wide (t).  */
+
+inline wi::tree_to_wide_ref
+wi::to_wide (const_tree t)
+{
+  return wi::storage_ref (&TREE_INT_CST_ELT (t, 0), TREE_INT_CST_NUNITS (t),
+			  TYPE_PRECISION (TREE_TYPE (t)));
+}
+
+/* Convert INTEGER_CST T to a wide_int of precision PREC, extending or
+   truncating as necessary.  When extending, use sign extension if T's
+   type is signed and zero extension if T's type is unsigned.  */
+
+inline wide_int
+wi::to_wide (const_tree t, unsigned int prec)
+{
+  return wide_int::from (wi::to_wide (t), prec, TYPE_SIGN (TREE_TYPE (t)));
+}
+
+template <int N>
+inline wi::extended_tree <N>::extended_tree (const_tree t)
+  : m_t (t)
+{
+  gcc_checking_assert (TYPE_PRECISION (TREE_TYPE (t)) <= N);
+}
+
+template <int N>
+inline unsigned int
+wi::extended_tree <N>::get_precision () const
+{
+  return N;
+}
+
+template <int N>
+inline const HOST_WIDE_INT *
+wi::extended_tree <N>::get_val () const
+{
+  return &TREE_INT_CST_ELT (m_t, 0);
+}
+
+template <int N>
+inline unsigned int
+wi::extended_tree <N>::get_len () const
+{
+  if (N == ADDR_MAX_PRECISION)
+    return TREE_INT_CST_OFFSET_NUNITS (m_t);
+  else if (N >= WIDE_INT_MAX_PRECISION)
+    return TREE_INT_CST_EXT_NUNITS (m_t);
+  else
+    /* This class is designed to be used for specific output precisions
+       and needs to be as fast as possible, so there is no fallback for
+       other casees.  */
+    gcc_unreachable ();
+}
+
+inline unsigned int
+wi::unextended_tree::get_precision () const
+{
+  return TYPE_PRECISION (TREE_TYPE (m_t));
+}
+
+inline const HOST_WIDE_INT *
+wi::unextended_tree::get_val () const
+{
+  return &TREE_INT_CST_ELT (m_t, 0);
+}
+
+inline unsigned int
+wi::unextended_tree::get_len () const
+{
+  return TREE_INT_CST_NUNITS (m_t);
+}
+
+/* Return the value of a POLY_INT_CST in its native precision.  */
+
+inline wi::tree_to_poly_wide_ref
+poly_int_cst_value (const_tree x)
+{
+  poly_int <NUM_POLY_INT_COEFFS, generic_wide_int <wi::unextended_tree> > res;
+  for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
+    res.coeffs[i] = POLY_INT_CST_COEFF (x, i);
+  return res;
+}
+
+/* Access INTEGER_CST or POLY_INT_CST tree T as if it were a
+   poly_widest_int.  See wi::to_widest for more details.  */
+
+inline wi::tree_to_poly_widest_ref
+wi::to_poly_widest (const_tree t)
+{
+  if (POLY_INT_CST_P (t))
+    {
+      poly_int <NUM_POLY_INT_COEFFS,
+		generic_wide_int <widest_extended_tree> > res;
+      for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
+	res.coeffs[i] = POLY_INT_CST_COEFF (t, i);
+      return res;
+    }
+  return t;
+}
+
+/* Access INTEGER_CST or POLY_INT_CST tree T as if it were a
+   poly_offset_int.  See wi::to_offset for more details.  */
+
+inline wi::tree_to_poly_offset_ref
+wi::to_poly_offset (const_tree t)
+{
+  if (POLY_INT_CST_P (t))
+    {
+      poly_int <NUM_POLY_INT_COEFFS,
+		generic_wide_int <offset_extended_tree> > res;
+      for (unsigned int i = 0; i < NUM_POLY_INT_COEFFS; ++i)
+	res.coeffs[i] = POLY_INT_CST_COEFF (t, i);
+      return res;
+    }
+  return t;
+}
+
+/* Access INTEGER_CST or POLY_INT_CST tree T as if it were a
+   poly_wide_int.  See wi::to_wide for more details.  */
+
+inline wi::tree_to_poly_wide_ref
+wi::to_poly_wide (const_tree t)
+{
+  if (POLY_INT_CST_P (t))
+    return poly_int_cst_value (t);
+  return t;
+}
+
+template <int N>
+inline generic_wide_int <wi::extended_tree <N> >
+wi::ints_for <generic_wide_int <wi::extended_tree <N> >,
+	      wi::CONST_PRECISION>::zero (const extended &x)
+{
+  return build_zero_cst (TREE_TYPE (x.get_tree ()));
+}
+
+inline generic_wide_int <wi::unextended_tree>
+wi::ints_for <generic_wide_int <wi::unextended_tree>,
+	      wi::VAR_PRECISION>::zero (const unextended &x)
+{
+  return build_zero_cst (TREE_TYPE (x.get_tree ()));
+}
+
+namespace wi
+{
+  template <typename T>
+  bool fits_to_boolean_p (const T &x, const_tree);
+
+  template <typename T>
+  bool fits_to_tree_p (const T &x, const_tree);
+
+  wide_int min_value (const_tree);
+  wide_int max_value (const_tree);
+  wide_int from_mpz (const_tree, mpz_t, bool);
+}
+
+template <typename T>
+bool
+wi::fits_to_boolean_p (const T &x, const_tree type)
+{
+  typedef typename poly_int_traits<T>::int_type int_type;
+  return (known_eq (x, int_type (0))
+	  || known_eq (x, int_type (TYPE_UNSIGNED (type) ? 1 : -1)));
+}
+
+template <typename T>
+bool
+wi::fits_to_tree_p (const T &x, const_tree type)
+{
+  /* Non-standard boolean types can have arbitrary precision but various
+     transformations assume that they can only take values 0 and +/-1.  */
+  if (TREE_CODE (type) == BOOLEAN_TYPE)
+    return fits_to_boolean_p (x, type);
+
+  if (TYPE_UNSIGNED (type))
+    return known_eq (x, zext (x, TYPE_PRECISION (type)));
+  else
+    return known_eq (x, sext (x, TYPE_PRECISION (type)));
+}
+
+/* Produce the smallest number that is represented in TYPE.  The precision
+   and sign are taken from TYPE.  */
+inline wide_int
+wi::min_value (const_tree type)
+{
+  return min_value (TYPE_PRECISION (type), TYPE_SIGN (type));
+}
+
+/* Produce the largest number that is represented in TYPE.  The precision
+   and sign are taken from TYPE.  */
+inline wide_int
+wi::max_value (const_tree type)
+{
+  return max_value (TYPE_PRECISION (type), TYPE_SIGN (type));
+}
+
+/* Return true if INTEGER_CST T1 is less than INTEGER_CST T2,
+   extending both according to their respective TYPE_SIGNs.  */
+
+inline bool
+tree_int_cst_lt (const_tree t1, const_tree t2)
+{
+  return wi::to_widest (t1) < wi::to_widest (t2);
+}
+
+/* Return true if INTEGER_CST T1 is less than or equal to INTEGER_CST T2,
+   extending both according to their respective TYPE_SIGNs.  */
+
+inline bool
+tree_int_cst_le (const_tree t1, const_tree t2)
+{
+  return wi::to_widest (t1) <= wi::to_widest (t2);
+}
+
+/* Returns -1 if T1 < T2, 0 if T1 == T2, and 1 if T1 > T2.  T1 and T2
+   are both INTEGER_CSTs and their values are extended according to their
+   respective TYPE_SIGNs.  */
+
+inline int
+tree_int_cst_compare (const_tree t1, const_tree t2)
+{
+  return wi::cmps (wi::to_widest (t1), wi::to_widest (t2));
+}
+
+/* FIXME - These declarations belong in builtins.h, expr.h and emit-rtl.h,
+   but none of these files are allowed to be included from front ends.
+   They should be split in two. One suitable for the FEs, the other suitable
+   for the BE.  */
+
+/* Assign the RTX to declaration.  */
+extern void set_decl_rtl (tree, rtx);
+extern bool complete_ctor_at_level_p (const_tree, HOST_WIDE_INT, const_tree);
+
+/* Given an expression EXP that is a handled_component_p,
+   look for the ultimate containing object, which is returned and specify
+   the access position and size.  */
+extern tree get_inner_reference (tree, poly_int64_pod *, poly_int64_pod *,
+				 tree *, machine_mode *, int *, int *, int *);
+
+extern tree build_personality_function (const char *);
+
+struct GTY(()) int_n_trees_t {
+  /* These parts are initialized at runtime */
+  tree signed_type;
+  tree unsigned_type;
+};
+
+/* This is also in machmode.h */
+extern bool int_n_enabled_p[NUM_INT_N_ENTS];
+extern GTY(()) struct int_n_trees_t int_n_trees[NUM_INT_N_ENTS];
+
+/* Like bit_position, but return as an integer.  It must be representable in
+   that way (since it could be a signed value, we don't have the
+   option of returning -1 like int_size_in_byte can.  */
+
+inline HOST_WIDE_INT
+int_bit_position (const_tree field)
+{
+  return ((wi::to_offset (DECL_FIELD_OFFSET (field)) << LOG2_BITS_PER_UNIT)
+	  + wi::to_offset (DECL_FIELD_BIT_OFFSET (field))).to_shwi ();
+}
+
+/* Return true if it makes sense to consider alias set for a type T.  */
+
+inline bool
+type_with_alias_set_p (const_tree t)
+{
+  /* Function and method types are never accessed as memory locations.  */
+  if (TREE_CODE (t) == FUNCTION_TYPE || TREE_CODE (t) == METHOD_TYPE)
+    return false;
+
+  if (COMPLETE_TYPE_P (t))
+    return true;
+
+  /* Incomplete types cannot be accessed in general except for arrays
+     where we can fetch its element despite we have no array bounds.  */
+  if (TREE_CODE (t) == ARRAY_TYPE && COMPLETE_TYPE_P (TREE_TYPE (t)))
+    return true;
+
+  return false;
+}
+
+extern location_t set_block (location_t loc, tree block);
+
+extern void gt_ggc_mx (tree &);
+extern void gt_pch_nx (tree &);
+extern void gt_pch_nx (tree &, gt_pointer_operator, void *);
+
+extern bool nonnull_arg_p (const_tree);
+extern bool default_is_empty_record (const_tree);
+extern HOST_WIDE_INT arg_int_size_in_bytes (const_tree);
+extern tree arg_size_in_bytes (const_tree);
+extern bool expr_type_first_operand_type_p (tree_code);
+
+extern location_t
+set_source_range (tree expr, location_t start, location_t finish);
+
+extern location_t
+set_source_range (tree expr, source_range src_range);
+
+/* Return true if it makes sense to promote/demote from_type to to_type. */
+inline bool
+desired_pro_or_demotion_p (const_tree to_type, const_tree from_type)
+{
+  unsigned int to_type_precision = TYPE_PRECISION (to_type);
+
+  /* OK to promote if to_type is no bigger than word_mode. */
+  if (to_type_precision <= GET_MODE_PRECISION (word_mode))
+    return true;
+
+  /* Otherwise, allow only if narrowing or same precision conversions. */
+  return to_type_precision <= TYPE_PRECISION (from_type);
+}
+
+/* Pointer type used to declare builtins before we have seen its real
+   declaration.  */
+struct builtin_structptr_type
+{
+  tree& node;
+  tree& base;
+  const char *str;
+};
+extern const builtin_structptr_type builtin_structptr_types[6];
+
+/* Return true if type T has the same precision as its underlying mode.  */
+
+inline bool
+type_has_mode_precision_p (const_tree t)
+{
+  return known_eq (TYPE_PRECISION (t), GET_MODE_PRECISION (TYPE_MODE (t)));
+}
+
+/* Return true if a FUNCTION_DECL NODE is a GCC built-in function.
+
+   Note that it is different from the DECL_IS_BUILTIN accessor.  For
+   instance, user declared prototypes of C library functions are not
+   DECL_IS_BUILTIN but may be DECL_BUILT_IN.  */
+
+inline bool
+fndecl_built_in_p (const_tree node)
+{
+  return (DECL_BUILT_IN_CLASS (node) != NOT_BUILT_IN);
+}
+
+/* Return true if a FUNCTION_DECL NODE is a GCC built-in function
+   of class KLASS.  */
+
+inline bool
+fndecl_built_in_p (const_tree node, built_in_class klass)
+{
+  return (fndecl_built_in_p (node) && DECL_BUILT_IN_CLASS (node) == klass);
+}
+
+/* Return true if a FUNCTION_DECL NODE is a GCC built-in function
+   of class KLASS with name equal to NAME.  */
+
+inline bool
+fndecl_built_in_p (const_tree node, int name, built_in_class klass)
+{
+  return (fndecl_built_in_p (node, klass) && DECL_FUNCTION_CODE (node) == name);
+}
+
+/* Return true if a FUNCTION_DECL NODE is a GCC built-in function
+   of BUILT_IN_NORMAL class with name equal to NAME.  */
+
+inline bool
+fndecl_built_in_p (const_tree node, built_in_function name)
+{
+  return (fndecl_built_in_p (node, BUILT_IN_NORMAL)
+	  && DECL_FUNCTION_CODE (node) == name);
+}
+
+/* A struct for encapsulating location information about an operator
+   and the operation built from it.
+
+   m_operator_loc is the location of the operator
+   m_combined_loc is the location of the compound expression.
+
+   For example, given "a && b" the, operator location is:
+      a && b
+        ^~
+   and the combined location is:
+      a && b
+      ~~^~~~
+   Capturing this information allows for class binary_op_rich_location
+   to provide detailed information about e.g. type mismatches in binary
+   operations where enough location information is available:
+
+     arg_0 op arg_1
+     ~~~~~ ^~ ~~~~~
+       |        |
+       |        arg1 type
+       arg0 type
+
+   falling back to just showing the combined location:
+
+     arg_0 op arg_1
+     ~~~~~~^~~~~~~~
+
+   where it is not.  */
+
+struct op_location_t
+{
+  location_t m_operator_loc;
+  location_t m_combined_loc;
+
+  /* 1-argument ctor, for constructing from a combined location.  */
+  op_location_t (location_t combined_loc)
+  : m_operator_loc (UNKNOWN_LOCATION), m_combined_loc (combined_loc)
+  {}
+
+  /* 2-argument ctor, for distinguishing between the operator's location
+     and the combined location.  */
+  op_location_t (location_t operator_loc, location_t combined_loc)
+  : m_operator_loc (operator_loc), m_combined_loc (combined_loc)
+  {}
+
+  /* Implicitly convert back to a location_t, using the combined location.  */
+  operator location_t () const { return m_combined_loc; }
+};
+
+#endif  /* GCC_TREE_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/treestruct.def b/lib/gcc/aarch64-elf/9.1.1/plugin/include/treestruct.def
new file mode 100644
index 0000000..8962312
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/treestruct.def
@@ -0,0 +1,71 @@
+/* This file contains the definitions for the tree structure
+   enumeration used in GCC.
+
+Copyright (C) 2005-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* The format of this file is
+
+   DEFTREESTRUCT(enumeration value, printable name).
+
+   Each enumeration value should correspond with a single member of
+   union tree_node.
+
+   These enumerator values are used in order to distinguish members of
+   union tree_node for garbage collection purposes, as well as
+   specifying what structures contain what other structures in the
+   tree_contains_struct array.  */
+DEFTREESTRUCT(TS_BASE, "base")
+DEFTREESTRUCT(TS_TYPED, "typed")
+DEFTREESTRUCT(TS_COMMON, "common")
+DEFTREESTRUCT(TS_INT_CST, "integer cst")
+DEFTREESTRUCT(TS_POLY_INT_CST, "poly_int_cst")
+DEFTREESTRUCT(TS_REAL_CST, "real cst")
+DEFTREESTRUCT(TS_FIXED_CST, "fixed cst")
+DEFTREESTRUCT(TS_VECTOR, "vector")
+DEFTREESTRUCT(TS_STRING, "string")
+DEFTREESTRUCT(TS_COMPLEX, "complex")
+DEFTREESTRUCT(TS_IDENTIFIER, "identifier")
+DEFTREESTRUCT(TS_DECL_MINIMAL, "decl minimal")
+DEFTREESTRUCT(TS_DECL_COMMON, "decl common")
+DEFTREESTRUCT(TS_DECL_WRTL, "decl with RTL")
+DEFTREESTRUCT(TS_DECL_NON_COMMON, "decl non-common")
+DEFTREESTRUCT(TS_DECL_WITH_VIS, "decl with visibility")
+DEFTREESTRUCT(TS_FIELD_DECL, "field decl")
+DEFTREESTRUCT(TS_VAR_DECL, "var decl")
+DEFTREESTRUCT(TS_PARM_DECL, "parm decl")
+DEFTREESTRUCT(TS_LABEL_DECL, "label decl")
+DEFTREESTRUCT(TS_RESULT_DECL, "result decl")
+DEFTREESTRUCT(TS_CONST_DECL, "const decl")
+DEFTREESTRUCT(TS_TYPE_DECL, "type decl")
+DEFTREESTRUCT(TS_FUNCTION_DECL, "function decl")
+DEFTREESTRUCT(TS_TRANSLATION_UNIT_DECL, "translation-unit decl")
+DEFTREESTRUCT(TS_TYPE_COMMON, "type common")
+DEFTREESTRUCT(TS_TYPE_WITH_LANG_SPECIFIC, "type with lang-specific")
+DEFTREESTRUCT(TS_TYPE_NON_COMMON, "type non-common")
+DEFTREESTRUCT(TS_LIST, "list")
+DEFTREESTRUCT(TS_VEC, "vec")
+DEFTREESTRUCT(TS_EXP, "exp")
+DEFTREESTRUCT(TS_SSA_NAME, "ssa name")
+DEFTREESTRUCT(TS_BLOCK, "block")
+DEFTREESTRUCT(TS_BINFO, "binfo")
+DEFTREESTRUCT(TS_STATEMENT_LIST, "statement list")
+DEFTREESTRUCT(TS_CONSTRUCTOR, "constructor")
+DEFTREESTRUCT(TS_OMP_CLAUSE, "omp clause")
+DEFTREESTRUCT(TS_OPTIMIZATION, "optimization options")
+DEFTREESTRUCT(TS_TARGET_OPTION, "target options")
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tsan.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tsan.h
new file mode 100644
index 0000000..fde4305
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tsan.h
@@ -0,0 +1,26 @@
+/* ThreadSanitizer, a data race detector.
+   Copyright (C) 2011-2019 Free Software Foundation, Inc.
+   Contributed by Dmitry Vyukov <dvyukov@google.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef TREE_TSAN
+#define TREE_TSAN
+
+extern void tsan_finish_file (void);
+
+#endif /* TREE_TSAN */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/tsystem.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tsystem.h
new file mode 100644
index 0000000..6d33204
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/tsystem.h
@@ -0,0 +1,137 @@
+/* Get common system includes and various definitions and declarations
+   based on target macros.
+   Copyright (C) 2000-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TSYSTEM_H
+#define GCC_TSYSTEM_H
+
+/* System headers (e.g. stdio.h, stdlib.h, unistd.h) sometimes
+   indirectly include getopt.h.  Our -I flags will cause gcc's gnu
+   getopt.h to be included, not the platform's copy.  In the default
+   case, gnu getopt.h will provide us with a no-argument prototype
+   which will generate -Wstrict-prototypes warnings.  None of the
+   target files actually use getopt, so it is safe to tell gnu
+   getopt.h we never need this prototype.  */
+#ifndef HAVE_DECL_GETOPT
+#define HAVE_DECL_GETOPT 1
+#endif
+
+/* We want everything from the glibc headers.  */
+#define _GNU_SOURCE 1
+
+/* GCC supplies these headers.  */
+#include <stddef.h>
+#include <float.h>
+
+#ifdef inhibit_libc
+
+#ifndef malloc
+extern void *malloc (size_t);
+#endif
+
+#ifndef free
+extern void free (void *);
+#endif
+
+#ifndef atexit
+extern int atexit (void (*)(void));
+#endif
+
+#ifndef abort
+extern void abort (void) __attribute__ ((__noreturn__));
+#endif
+
+#ifndef strlen
+extern size_t strlen (const char *);
+#endif
+
+#ifndef memcpy
+extern void *memcpy (void *, const void *, size_t);
+#endif
+
+#ifndef memset
+extern void *memset (void *, int, size_t);
+#endif
+
+#else /* ! inhibit_libc */
+/* We disable this when inhibit_libc, so that gcc can still be built without
+   needing header files first.  */
+/* ??? This is not a good solution, since prototypes may be required in
+   some cases for correct code.  */
+
+/* GCC supplies this header.  */
+#include <stdarg.h>
+
+/* All systems have this header.  */
+#include <stdio.h>
+
+/* All systems have this header.  */
+#include <sys/types.h>
+
+/* All systems have this header.  */
+#include <errno.h>
+
+#ifndef errno
+extern int errno;
+#endif
+
+/* If these system headers do not exist, fixincludes must create them.  */
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+/* GCC supplies this header.  */
+#include <limits.h>
+
+/* If these system headers do not exist, fixincludes must create them.  */
+#include <time.h>
+
+#endif /* inhibit_libc */
+
+/* Define a generic NULL if one hasn't already been defined.  */
+#ifndef NULL
+#define NULL 0
+#endif
+
+/* GCC always provides __builtin_alloca(x).  */
+#undef alloca
+#define alloca(x) __builtin_alloca(x)
+
+#ifdef ENABLE_RUNTIME_CHECKING
+#define gcc_assert(EXPR) ((void)(!(EXPR) ? abort (), 0 : 0))
+#else
+/* Include EXPR, so that unused variable warnings do not occur.  */
+#define gcc_assert(EXPR) ((void)(0 && (EXPR)))
+#endif
+/* Use gcc_unreachable() to mark unreachable locations (like an
+   unreachable default case of a switch.  Do not use gcc_assert(0).  */
+#define gcc_unreachable() (abort ())
+
+#define CONST_CAST2(TOTYPE,FROMTYPE,X) ((__extension__(union {FROMTYPE _q; TOTYPE _nq;})(X))._nq)
+#define CONST_CAST(TYPE,X) CONST_CAST2 (TYPE, const TYPE, (X))
+
+/* Filename handling macros.  */
+#include "filenames.h"
+
+#endif /* ! GCC_TSYSTEM_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/typeclass.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/typeclass.h
new file mode 100644
index 0000000..1939092
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/typeclass.h
@@ -0,0 +1,43 @@
+/* Type class enum
+   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TYPECLASS_H
+#define GCC_TYPECLASS_H
+
+/* Values returned by __builtin_classify_type.  */
+
+enum type_class
+{
+  no_type_class = -1,
+  void_type_class, integer_type_class, char_type_class,
+  enumeral_type_class, boolean_type_class,
+  pointer_type_class, reference_type_class, offset_type_class,
+  real_type_class, complex_type_class,
+  function_type_class, method_type_class,
+  record_type_class, union_type_class,
+  array_type_class, string_type_class,
+  lang_type_class
+};
+
+#endif /* GCC_TYPECLASS_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/typed-splay-tree.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/typed-splay-tree.h
new file mode 100644
index 0000000..379c4b0
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/typed-splay-tree.h
@@ -0,0 +1,652 @@
+/* A typesafe wrapper around libiberty's splay-tree.h.
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_TYPED_SPLAY_TREE_H
+#define GCC_TYPED_SPLAY_TREE_H
+
+/* Typesafe wrapper around libiberty's splay-tree.h.  */
+template <typename KEY_TYPE, typename VALUE_TYPE>
+class typed_splay_tree
+{
+ public:
+  typedef KEY_TYPE key_type;
+  typedef VALUE_TYPE value_type;
+
+  typedef int (*compare_fn) (key_type, key_type);
+  typedef void (*delete_key_fn) (key_type);
+  typedef void (*delete_value_fn) (value_type);
+  typedef int (*foreach_fn) (key_type, value_type, void *);
+
+  typed_splay_tree (compare_fn,
+		    delete_key_fn,
+		    delete_value_fn);
+  ~typed_splay_tree ();
+
+  value_type lookup (key_type k);
+  value_type predecessor (key_type k);
+  value_type successor (key_type k);
+  void insert (key_type k, value_type v);
+  void remove (key_type k);
+  value_type max ();
+  value_type min ();
+  int foreach (foreach_fn, void *);
+
+ private:
+  /* Copy and assignment ops are not supported.  */
+  typed_splay_tree (const typed_splay_tree &);
+  typed_splay_tree & operator = (const typed_splay_tree &);
+
+  typedef key_type splay_tree_key;
+  typedef value_type splay_tree_value;
+
+  /* The nodes in the splay tree.  */
+  struct splay_tree_node_s {
+    /* The key.  */
+    splay_tree_key key;
+
+    /* The value.  */
+    splay_tree_value value;
+
+    /* The left and right children, respectively.  */
+    splay_tree_node_s *left, *right;
+
+    /* Used as temporary value for tree traversals.  */
+    splay_tree_node_s *back;
+  };
+  typedef splay_tree_node_s *splay_tree_node;
+
+  inline void KDEL (splay_tree_key);
+  inline void VDEL (splay_tree_value);
+  void splay_tree_delete_helper (splay_tree_node);
+  static inline void rotate_left (splay_tree_node *,
+				  splay_tree_node, splay_tree_node);
+  static inline void rotate_right (splay_tree_node *,
+				   splay_tree_node, splay_tree_node);
+  void splay_tree_splay (splay_tree_key);
+  static int splay_tree_foreach_helper (splay_tree_node,
+					foreach_fn, void*);
+  splay_tree_node splay_tree_insert (splay_tree_key, splay_tree_value);
+  void splay_tree_remove (splay_tree_key key);
+  splay_tree_node splay_tree_lookup (splay_tree_key key);
+  splay_tree_node splay_tree_predecessor (splay_tree_key);
+  splay_tree_node splay_tree_successor (splay_tree_key);
+  splay_tree_node splay_tree_max ();
+  splay_tree_node splay_tree_min ();
+
+  static value_type node_to_value (splay_tree_node node);
+
+  /* The root of the tree.  */
+  splay_tree_node root;
+
+  /* The comparision function.  */
+  compare_fn comp;
+
+  /* The deallocate-key function.  NULL if no cleanup is necessary.  */
+  delete_key_fn delete_key;
+
+  /* The deallocate-value function.  NULL if no cleanup is necessary.  */
+  delete_value_fn delete_value;
+};
+
+/* Constructor for typed_splay_tree <K, V>.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+inline typed_splay_tree<KEY_TYPE, VALUE_TYPE>::
+  typed_splay_tree (compare_fn compare_fn,
+		    delete_key_fn delete_key_fn,
+		    delete_value_fn delete_value_fn)
+{
+  root = NULL;
+  comp = compare_fn;
+  delete_key = delete_key_fn;
+  delete_value = delete_value_fn;
+}
+
+/* Destructor for typed_splay_tree <K, V>.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+inline typed_splay_tree<KEY_TYPE, VALUE_TYPE>::
+  ~typed_splay_tree ()
+{
+  splay_tree_delete_helper (root);
+}
+
+/* Lookup KEY, returning a value if present, and NULL
+   otherwise.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+inline VALUE_TYPE
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::lookup (key_type key)
+{
+  splay_tree_node node = splay_tree_lookup (key);
+  return node_to_value (node);
+}
+
+/* Return the immediate predecessor of KEY, or NULL if there is no
+   predecessor.  KEY need not be present in the tree.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+inline VALUE_TYPE
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::predecessor (key_type key)
+{
+  splay_tree_node node = splay_tree_predecessor (key);
+  return node_to_value (node);
+}
+
+/* Return the immediate successor of KEY, or NULL if there is no
+   successor.  KEY need not be present in the tree.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+inline VALUE_TYPE
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::successor (key_type key)
+{
+  splay_tree_node node = splay_tree_successor (key);
+  return node_to_value (node);
+}
+
+/* Insert a new node (associating KEY with VALUE).  If a
+   previous node with the indicated KEY exists, its data is replaced
+   with the new value.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+inline void
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::insert (key_type key,
+						value_type value)
+{
+  splay_tree_insert (key, value);
+}
+
+/* Remove a node (associating KEY with VALUE).  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+inline void
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::remove (key_type key)
+{
+  splay_tree_remove (key);
+}
+
+/* Get the value with maximal key.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+inline VALUE_TYPE
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::max ()
+{
+  return node_to_value (splay_tree_max ());
+}
+
+/* Get the value with minimal key.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+inline VALUE_TYPE
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::min ()
+{
+  return node_to_value (splay_tree_min ());
+}
+
+/* Call OUTER_CB, passing it the OUTER_USER_DATA, for every node,
+   following an in-order traversal.  If OUTER_CB ever returns a non-zero
+   value, the iteration ceases immediately, and the value is returned.
+   Otherwise, this function returns 0.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+inline int
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::foreach (foreach_fn foreach_fn,
+						 void *user_data)
+{
+  return splay_tree_foreach_helper (root, foreach_fn, user_data);
+}
+
+/* Internal function for converting from splay_tree_node to
+   VALUE_TYPE.  */
+template <typename KEY_TYPE, typename VALUE_TYPE>
+inline VALUE_TYPE
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::node_to_value (splay_tree_node node)
+{
+  if (node)
+    return node->value;
+  else
+    return 0;
+}
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+inline void
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::KDEL(splay_tree_key x)
+{
+  if (delete_key)
+    (*delete_key)(x);
+}
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+inline void
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::VDEL(splay_tree_value x)
+{
+  if (delete_value)
+    (*delete_value)(x);
+}
+
+/* Deallocate NODE (a member of SP), and all its sub-trees.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+void
+typed_splay_tree<KEY_TYPE,
+		 VALUE_TYPE>::splay_tree_delete_helper (splay_tree_node node)
+{
+  splay_tree_node pending = NULL;
+  splay_tree_node active = NULL;
+
+  if (!node)
+    return;
+
+  KDEL (node->key);
+  VDEL (node->value);
+
+  /* We use the "back" field to hold the "next" pointer.  */
+  node->back = pending;
+  pending = node;
+
+  /* Now, keep processing the pending list until there aren't any
+     more.  This is a little more complicated than just recursing, but
+     it doesn't toast the stack for large trees.  */
+
+  while (pending)
+    {
+      active = pending;
+      pending = NULL;
+      while (active)
+	{
+	  splay_tree_node temp;
+
+	  /* active points to a node which has its key and value
+	     deallocated, we just need to process left and right.  */
+
+	  if (active->left)
+	    {
+	      KDEL (active->left->key);
+	      VDEL (active->left->value);
+	      active->left->back = pending;
+	      pending = active->left;
+	    }
+	  if (active->right)
+	    {
+	      KDEL (active->right->key);
+	      VDEL (active->right->value);
+	      active->right->back = pending;
+	      pending = active->right;
+	    }
+
+	  temp = active;
+	  active = temp->back;
+	  delete temp;
+	}
+    }
+}
+
+/* Rotate the edge joining the left child N with its parent P.  PP is the
+   grandparents' pointer to P.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+inline void
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::rotate_left (splay_tree_node *pp,
+						     splay_tree_node p,
+						     splay_tree_node n)
+{
+  splay_tree_node tmp;
+  tmp = n->right;
+  n->right = p;
+  p->left = tmp;
+  *pp = n;
+}
+
+/* Rotate the edge joining the right child N with its parent P.  PP is the
+   grandparents' pointer to P.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+inline void
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::rotate_right (splay_tree_node *pp,
+						      splay_tree_node p,
+						      splay_tree_node n)
+{
+  splay_tree_node tmp;
+  tmp = n->left;
+  n->left = p;
+  p->right = tmp;
+  *pp = n;
+}
+
+/* Bottom up splay of key.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+void
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::splay_tree_splay (splay_tree_key key)
+{
+  if (root == NULL)
+    return;
+
+  do {
+    int cmp1, cmp2;
+    splay_tree_node n, c;
+
+    n = root;
+    cmp1 = (*comp) (key, n->key);
+
+    /* Found.  */
+    if (cmp1 == 0)
+      return;
+
+    /* Left or right?  If no child, then we're done.  */
+    if (cmp1 < 0)
+      c = n->left;
+    else
+      c = n->right;
+    if (!c)
+      return;
+
+    /* Next one left or right?  If found or no child, we're done
+       after one rotation.  */
+    cmp2 = (*comp) (key, c->key);
+    if (cmp2 == 0
+	|| (cmp2 < 0 && !c->left)
+	|| (cmp2 > 0 && !c->right))
+      {
+	if (cmp1 < 0)
+	  rotate_left (&root, n, c);
+	else
+	  rotate_right (&root, n, c);
+	return;
+      }
+
+    /* Now we have the four cases of double-rotation.  */
+    if (cmp1 < 0 && cmp2 < 0)
+      {
+	rotate_left (&n->left, c, c->left);
+	rotate_left (&root, n, n->left);
+      }
+    else if (cmp1 > 0 && cmp2 > 0)
+      {
+	rotate_right (&n->right, c, c->right);
+	rotate_right (&root, n, n->right);
+      }
+    else if (cmp1 < 0 && cmp2 > 0)
+      {
+	rotate_right (&n->left, c, c->right);
+	rotate_left (&root, n, n->left);
+      }
+    else if (cmp1 > 0 && cmp2 < 0)
+      {
+	rotate_left (&n->right, c, c->left);
+	rotate_right (&root, n, n->right);
+      }
+  } while (1);
+}
+
+/* Call FN, passing it the DATA, for every node below NODE, all of
+   which are from SP, following an in-order traversal.  If FN every
+   returns a non-zero value, the iteration ceases immediately, and the
+   value is returned.  Otherwise, this function returns 0.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+int
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::splay_tree_foreach_helper (
+						splay_tree_node node,
+						foreach_fn fn, void *data)
+{
+  int val;
+  splay_tree_node stack;
+
+  /* A non-recursive implementation is used to avoid filling the stack
+     for large trees.  Splay trees are worst case O(n) in the depth of
+     the tree.  */
+
+  stack = NULL;
+  val = 0;
+
+  for (;;)
+    {
+      while (node != NULL)
+	{
+	  node->back = stack;
+	  stack = node;
+	  node = node->left;
+	}
+
+      if (stack == NULL)
+	break;
+
+      node = stack;
+      stack = stack->back;
+
+      val = (*fn) (node->key, node->value, data);
+      if (val)
+	break;
+
+      node = node->right;
+    }
+
+  return val;
+}
+
+/* Insert a new node (associating KEY with DATA) into SP.  If a
+   previous node with the indicated KEY exists, its data is replaced
+   with the new value.  Returns the new node.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+typename typed_splay_tree<KEY_TYPE, VALUE_TYPE>::splay_tree_node
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::splay_tree_insert (
+						splay_tree_key key,
+						splay_tree_value value)
+{
+  int comparison = 0;
+
+  splay_tree_splay (key);
+
+  if (root)
+    comparison = (*comp)(root->key, key);
+
+  if (root && comparison == 0)
+    {
+      /* If the root of the tree already has the indicated KEY, just
+	 replace the value with VALUE.  */
+      VDEL(root->value);
+      root->value = value;
+    }
+  else
+    {
+      /* Create a new node, and insert it at the root.  */
+      splay_tree_node node;
+
+      node = new splay_tree_node_s;
+      node->key = key;
+      node->value = value;
+
+      if (!root)
+	node->left = node->right = 0;
+      else if (comparison < 0)
+	{
+	  node->left = root;
+	  node->right = node->left->right;
+	  node->left->right = 0;
+	}
+      else
+	{
+	  node->right = root;
+	  node->left = node->right->left;
+	  node->right->left = 0;
+	}
+
+      root = node;
+    }
+
+  return root;
+}
+
+/* Remove KEY from SP.  It is not an error if it did not exist.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+void
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::splay_tree_remove (splay_tree_key key)
+{
+  splay_tree_splay (key);
+
+  if (root && (*comp) (root->key, key) == 0)
+    {
+      splay_tree_node left, right;
+
+      left = root->left;
+      right = root->right;
+
+      /* Delete the root node itself.  */
+      VDEL (root->value);
+      delete root;
+
+      /* One of the children is now the root.  Doesn't matter much
+	 which, so long as we preserve the properties of the tree.  */
+      if (left)
+	{
+	  root = left;
+
+	  /* If there was a right child as well, hang it off the
+	     right-most leaf of the left child.  */
+	  if (right)
+	    {
+	      while (left->right)
+		left = left->right;
+	      left->right = right;
+	    }
+	}
+      else
+	root = right;
+    }
+}
+
+/* Lookup KEY in SP, returning VALUE if present, and NULL
+   otherwise.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+typename typed_splay_tree<KEY_TYPE, VALUE_TYPE>::splay_tree_node
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::splay_tree_lookup (splay_tree_key key)
+{
+  splay_tree_splay (key);
+
+  if (root && (*comp)(root->key, key) == 0)
+    return root;
+  else
+    return 0;
+}
+
+/* Return the node in SP with the greatest key.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+typename typed_splay_tree<KEY_TYPE, VALUE_TYPE>::splay_tree_node
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::splay_tree_max ()
+{
+  splay_tree_node n = root;
+
+  if (!n)
+    return NULL;
+
+  while (n->right)
+    n = n->right;
+
+  return n;
+}
+
+/* Return the node in SP with the smallest key.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+typename typed_splay_tree<KEY_TYPE, VALUE_TYPE>::splay_tree_node
+typed_splay_tree<KEY_TYPE, VALUE_TYPE>::splay_tree_min ()
+{
+  splay_tree_node n = root;
+
+  if (!n)
+    return NULL;
+
+  while (n->left)
+    n = n->left;
+
+  return n;
+}
+
+/* Return the immediate predecessor KEY, or NULL if there is no
+   predecessor.  KEY need not be present in the tree.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+typename typed_splay_tree<KEY_TYPE, VALUE_TYPE>::splay_tree_node
+typed_splay_tree<KEY_TYPE,
+		 VALUE_TYPE>::splay_tree_predecessor (splay_tree_key key)
+{
+  int comparison;
+  splay_tree_node node;
+
+  /* If the tree is empty, there is certainly no predecessor.  */
+  if (!root)
+    return NULL;
+
+  /* Splay the tree around KEY.  That will leave either the KEY
+     itself, its predecessor, or its successor at the root.  */
+  splay_tree_splay (key);
+  comparison = (*comp)(root->key, key);
+
+  /* If the predecessor is at the root, just return it.  */
+  if (comparison < 0)
+    return root;
+
+  /* Otherwise, find the rightmost element of the left subtree.  */
+  node = root->left;
+  if (node)
+    while (node->right)
+      node = node->right;
+
+  return node;
+}
+
+/* Return the immediate successor KEY, or NULL if there is no
+   successor.  KEY need not be present in the tree.  */
+
+template <typename KEY_TYPE, typename VALUE_TYPE>
+typename typed_splay_tree<KEY_TYPE, VALUE_TYPE>::splay_tree_node
+typed_splay_tree<KEY_TYPE,
+		 VALUE_TYPE>::splay_tree_successor (splay_tree_key key)
+{
+  int comparison;
+  splay_tree_node node;
+
+  /* If the tree is empty, there is certainly no successor.  */
+  if (!root)
+    return NULL;
+
+  /* Splay the tree around KEY.  That will leave either the KEY
+     itself, its predecessor, or its successor at the root.  */
+  splay_tree_splay (key);
+  comparison = (*comp)(root->key, key);
+
+  /* If the successor is at the root, just return it.  */
+  if (comparison > 0)
+    return root;
+
+  /* Otherwise, find the leftmost element of the right subtree.  */
+  node = root->right;
+  if (node)
+    while (node->left)
+      node = node->left;
+
+  return node;
+}
+
+#endif  /* GCC_TYPED_SPLAY_TREE_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/ubsan.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ubsan.h
new file mode 100644
index 0000000..9256f4d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/ubsan.h
@@ -0,0 +1,69 @@
+/* UndefinedBehaviorSanitizer, undefined behavior detector.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+   Contributed by Marek Polacek <polacek@redhat.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_UBSAN_H
+#define GCC_UBSAN_H
+
+/* The various kinds of NULL pointer checks.  */
+enum ubsan_null_ckind {
+  UBSAN_LOAD_OF,
+  UBSAN_STORE_OF,
+  UBSAN_REF_BINDING,
+  UBSAN_MEMBER_ACCESS,
+  UBSAN_MEMBER_CALL,
+  UBSAN_CTOR_CALL,
+  UBSAN_DOWNCAST_POINTER,
+  UBSAN_DOWNCAST_REFERENCE,
+  UBSAN_UPCAST,
+  UBSAN_CAST_TO_VBASE
+};
+
+/* This controls how ubsan prints types.  Used in ubsan_type_descriptor.  */
+enum ubsan_print_style {
+  UBSAN_PRINT_NORMAL,
+  UBSAN_PRINT_POINTER,
+  UBSAN_PRINT_ARRAY
+};
+
+/* This controls ubsan_encode_value behavior.  */
+enum ubsan_encode_value_phase {
+  UBSAN_ENCODE_VALUE_GENERIC,
+  UBSAN_ENCODE_VALUE_GIMPLE,
+  UBSAN_ENCODE_VALUE_RTL
+};
+
+extern bool ubsan_expand_bounds_ifn (gimple_stmt_iterator *);
+extern bool ubsan_expand_null_ifn (gimple_stmt_iterator *);
+extern bool ubsan_expand_objsize_ifn (gimple_stmt_iterator *);
+extern bool ubsan_expand_ptr_ifn (gimple_stmt_iterator *);
+extern bool ubsan_expand_vptr_ifn (gimple_stmt_iterator *);
+extern bool ubsan_instrument_unreachable (gimple_stmt_iterator *);
+extern tree ubsan_create_data (const char *, int, const location_t *, ...);
+extern tree ubsan_type_descriptor (tree, ubsan_print_style
+					 = UBSAN_PRINT_NORMAL);
+extern tree ubsan_encode_value (tree, ubsan_encode_value_phase
+				      = UBSAN_ENCODE_VALUE_GENERIC);
+extern bool is_ubsan_builtin_p (tree);
+extern tree ubsan_build_overflow_builtin (tree_code, location_t, tree, tree,
+					  tree, tree *);
+extern tree ubsan_instrument_float_cast (location_t, tree, tree);
+extern tree ubsan_get_source_location_type (void);
+
+#endif  /* GCC_UBSAN_H  */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/valtrack.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/valtrack.h
new file mode 100644
index 0000000..f9f4b6d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/valtrack.h
@@ -0,0 +1,139 @@
+/* Infrastructure for tracking user variable locations and values
+   throughout compilation.
+   Copyright (C) 2010-2019 Free Software Foundation, Inc.
+   Contributed by Alexandre Oliva <aoliva@redhat.com>.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_VALTRACK_H
+#define GCC_VALTRACK_H
+
+/* Debug uses of dead regs.  */
+
+/* Entry that maps a dead pseudo (REG) used in a debug insns that dies
+   at different blocks to the debug temp (DTEMP) it was replaced
+   with.  */
+
+struct dead_debug_global_entry
+{
+  rtx reg;
+  rtx dtemp;
+};
+
+/* Descriptor for hash_table to hash by dead_debug_global_entry's REG
+   and map to DTEMP.  */
+
+struct dead_debug_hash_descr : free_ptr_hash <dead_debug_global_entry>
+{
+  /* Hash on the pseudo number.  */
+  static inline hashval_t hash (const dead_debug_global_entry *my);
+  /* Entries are identical if they refer to the same pseudo.  */
+  static inline bool equal (const dead_debug_global_entry *my,
+			    const dead_debug_global_entry *other);
+};
+
+/* Hash on the pseudo number.  */
+inline hashval_t
+dead_debug_hash_descr::hash (const dead_debug_global_entry *my)
+{
+  return REGNO (my->reg);
+}
+
+/* Entries are identical if they refer to the same pseudo.  */
+inline bool
+dead_debug_hash_descr::equal (const dead_debug_global_entry *my,
+			      const dead_debug_global_entry *other)
+{
+  return my->reg == other->reg;
+}
+
+/* Maintain a global table of pseudos used in debug insns after their
+   deaths in other blocks, and debug temps their deathpoint values are
+   to be bound to.  */
+
+struct dead_debug_global
+{
+  /* This hash table that maps pseudos to debug temps.  */
+  hash_table<dead_debug_hash_descr> *htab;
+  /* For each entry in htab, the bit corresponding to its REGNO will
+     be set.  */
+  bitmap used;
+};
+
+/* Node of a linked list of uses of dead REGs in debug insns.  */
+
+struct dead_debug_use
+{
+  df_ref use;
+  struct dead_debug_use *next;
+};
+
+/* Linked list of the above, with a bitmap of the REGs in the
+   list.  */
+
+struct dead_debug_local
+{
+  /* The first dead_debug_use entry in the list.  */
+  struct dead_debug_use *head;
+  /* A pointer to the global tracking data structure.  */
+  struct dead_debug_global *global;
+  /* A bitmap that has bits set for each REG used in the
+     dead_debug_use list, and for each entry in the global hash
+     table.  */
+  bitmap used;
+  /* A bitmap that has bits set for each INSN that is to be
+     rescanned.  */
+  bitmap to_rescan;
+};
+
+/* This type controls the behavior of dead_debug_insert_temp WRT
+   UREGNO and INSN.  */
+
+enum debug_temp_where
+  {
+    /* Bind a newly-created debug temporary to a REG for UREGNO, and
+       insert the debug insn before INSN.  REG is expected to die at
+       INSN.  */
+    DEBUG_TEMP_BEFORE_WITH_REG = -1,
+    /* Bind a newly-created debug temporary to the value INSN stores
+       in REG, and insert the debug insn before INSN.  */
+    DEBUG_TEMP_BEFORE_WITH_VALUE = 0,
+    /* Bind a newly-created debug temporary to a REG for UREGNO, and
+       insert the debug insn after INSN.  REG is expected to be set at
+       INSN.  */
+    DEBUG_TEMP_AFTER_WITH_REG = 1,
+    /* Like DEBUG_TEMP_AFTER_WITH_REG, but force addition of a debug
+       temporary even if there is just a single debug use.  This is used
+       on regs that are becoming REG_DEAD on INSN and so uses of the
+       reg later on are invalid.  */
+    DEBUG_TEMP_AFTER_WITH_REG_FORCE = 2
+  };
+
+extern void dead_debug_global_init (struct dead_debug_global *, bitmap);
+extern void dead_debug_global_finish (struct dead_debug_global *, bitmap);
+extern void dead_debug_local_init (struct dead_debug_local *, bitmap,
+				   struct dead_debug_global *);
+extern void dead_debug_local_finish (struct dead_debug_local *, bitmap);
+extern void dead_debug_add (struct dead_debug_local *, df_ref, unsigned int);
+extern int dead_debug_insert_temp (struct dead_debug_local *,
+				   unsigned int uregno, rtx_insn *insn,
+				   enum debug_temp_where);
+
+extern void propagate_for_debug (rtx_insn *, rtx_insn *, rtx, rtx, basic_block);
+
+
+#endif /* GCC_VALTRACK_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/value-prof.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/value-prof.h
new file mode 100644
index 0000000..1251fa9
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/value-prof.h
@@ -0,0 +1,120 @@
+/* Definitions for transformations based on profile information for values.
+   Copyright (C) 2003-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_VALUE_PROF_H
+#define GCC_VALUE_PROF_H
+
+/* Supported histogram types.  */
+enum hist_type
+{
+  HIST_TYPE_INTERVAL,	/* Measures histogram of values inside a specified
+			   interval.  */
+  HIST_TYPE_POW2,	/* Histogram of power of 2 values.  */
+  HIST_TYPE_SINGLE_VALUE, /* Tries to identify the value that is (almost)
+			   always constant.  */
+  HIST_TYPE_INDIR_CALL,   /* Tries to identify the function that is (almost)
+			    called in indirect call */
+  HIST_TYPE_AVERAGE,	/* Compute average value (sum of all values).  */
+  HIST_TYPE_IOR,	/* Used to compute expected alignment.  */
+  HIST_TYPE_TIME_PROFILE, /* Used for time profile */
+  HIST_TYPE_INDIR_CALL_TOPN, /* Tries to identify the top N most frequently
+                                called functions in indirect call.  */
+  HIST_TYPE_MAX
+};
+
+#define COUNTER_FOR_HIST_TYPE(TYPE) ((int) (TYPE) + GCOV_FIRST_VALUE_COUNTER)
+#define HIST_TYPE_FOR_COUNTER(COUNTER) \
+  ((enum hist_type) ((COUNTER) - GCOV_FIRST_VALUE_COUNTER))
+
+
+/* The value to measure.  */
+struct histogram_value_t
+{
+  struct
+    {
+      tree value;		/* The value to profile.  */
+      gimple *stmt;		/* Insn containing the value.  */
+      gcov_type *counters;		        /* Pointer to first counter.  */
+      struct histogram_value_t *next;		/* Linked list pointer.  */
+    } hvalue;
+  enum hist_type type;			/* Type of information to measure.  */
+  unsigned n_counters;			/* Number of required counters.  */
+  struct function *fun;
+  union
+    {
+      struct
+	{
+	  int int_start;	/* First value in interval.  */
+	  unsigned int steps;	/* Number of values in it.  */
+	} intvl;	/* Interval histogram data.  */
+    } hdata;		/* Profiled information specific data.  */
+};
+
+typedef struct histogram_value_t *histogram_value;
+typedef const struct histogram_value_t *const_histogram_value;
+
+
+typedef vec<histogram_value> histogram_values;
+
+extern void gimple_find_values_to_profile (histogram_values *);
+extern bool gimple_value_profile_transformations (void);
+
+histogram_value gimple_alloc_histogram_value (struct function *, enum hist_type,
+					      gimple *stmt, tree);
+histogram_value gimple_histogram_value (struct function *, gimple *);
+histogram_value gimple_histogram_value_of_type (struct function *, gimple *,
+						enum hist_type);
+void gimple_add_histogram_value (struct function *, gimple *, histogram_value);
+void dump_histograms_for_stmt (struct function *, FILE *, gimple *);
+void gimple_remove_histogram_value (struct function *, gimple *, histogram_value);
+void gimple_remove_stmt_histograms (struct function *, gimple *);
+void gimple_duplicate_stmt_histograms (struct function *, gimple *,
+				       struct function *, gimple *);
+void gimple_move_stmt_histograms (struct function *, gimple *, gimple *);
+void verify_histograms (void);
+void free_histograms (function *);
+void stringop_block_profile (gimple *, unsigned int *, HOST_WIDE_INT *);
+gcall *gimple_ic (gcall *, struct cgraph_node *, profile_probability);
+bool check_ic_target (gcall *, struct cgraph_node *);
+
+
+/* In tree-profile.c.  */
+extern void gimple_init_gcov_profiler (void);
+extern void gimple_gen_edge_profiler (int, edge);
+extern void gimple_gen_interval_profiler (histogram_value, unsigned, unsigned);
+extern void gimple_gen_pow2_profiler (histogram_value, unsigned, unsigned);
+extern void gimple_gen_one_value_profiler (histogram_value, unsigned, unsigned);
+extern void gimple_gen_ic_profiler (histogram_value, unsigned, unsigned);
+extern void gimple_gen_ic_func_profiler (void);
+extern void gimple_gen_time_profiler (unsigned, unsigned);
+extern void gimple_gen_average_profiler (histogram_value, unsigned, unsigned);
+extern void gimple_gen_ior_profiler (histogram_value, unsigned, unsigned);
+extern void stream_out_histogram_value (struct output_block *, histogram_value);
+extern void stream_in_histogram_value (struct lto_input_block *, gimple *);
+extern struct cgraph_node* find_func_by_profile_id (int func_id);
+
+
+/* In profile.c.  */
+extern void init_branch_prob (void);
+extern void branch_prob (bool);
+extern void read_thunk_profile (struct cgraph_node *);
+extern void end_branch_prob (void);
+
+#endif	/* GCC_VALUE_PROF_H */
+
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/varasm.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/varasm.h
new file mode 100644
index 0000000..857cdf3
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/varasm.h
@@ -0,0 +1,82 @@
+/* Declarations for varasm.h.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_VARASM_H
+#define GCC_VARASM_H
+
+/* The following global holds the "function name" for the code in the
+   cold section of a function, if hot/cold function splitting is enabled
+   and there was actually code that went into the cold section.  A
+   pseudo function name is needed for the cold section of code for some
+   debugging tools that perform symbolization. */
+extern tree cold_function_name;
+
+extern tree tree_output_constant_def (tree);
+extern void make_decl_rtl (tree);
+extern rtx make_decl_rtl_for_debug (tree);
+extern void make_decl_one_only (tree, tree);
+extern int supports_one_only (void);
+extern void resolve_unique_section (tree, int, int);
+extern void mark_referenced (tree);
+extern void mark_decl_referenced (tree);
+extern void notice_global_symbol (tree);
+extern void set_user_assembler_name (tree, const char *);
+extern void process_pending_assemble_externals (void);
+extern bool decl_replaceable_p (tree);
+extern bool decl_binds_to_current_def_p (const_tree);
+extern enum tls_model decl_default_tls_model (const_tree);
+
+/* Declare DECL to be a weak symbol.  */
+extern void declare_weak (tree);
+
+/* Merge weak status.  */
+extern void merge_weak (tree, tree);
+
+/* Make one symbol an alias for another.  */
+extern void assemble_alias (tree, tree);
+
+/* Return nonzero if VALUE is a valid constant-valued expression
+   for use in initializing a static variable; one that can be an
+   element of a "constant" initializer.
+
+   Return null_pointer_node if the value is absolute;
+   if it is relocatable, return the variable that determines the relocation.
+   We assume that VALUE has been folded as much as possible;
+   therefore, we do not need to check for such things as
+   arithmetic-combinations of integers.  */
+extern tree initializer_constant_valid_p (tree, tree, bool = false);
+
+/* Return true if VALUE is a valid constant-valued expression
+   for use in initializing a static bit-field; one that can be
+   an element of a "constant" initializer.  */
+extern bool initializer_constant_valid_for_bitfield_p (tree);
+
+/* Whether a constructor CTOR is a valid static constant initializer if all
+   its elements are.  This used to be internal to initializer_constant_valid_p
+   and has been exposed to let other functions like categorize_ctor_elements
+   evaluate the property while walking a constructor for other purposes.  */
+extern bool constructor_static_from_elts_p (const_tree);
+
+extern void init_varasm_status (void);
+
+extern rtx assemble_static_space (unsigned HOST_WIDE_INT);
+
+extern rtx assemble_trampoline_template (void);
+
+#endif  // GCC_VARASM_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/vec-perm-indices.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/vec-perm-indices.h
new file mode 100644
index 0000000..4549ae7
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/vec-perm-indices.h
@@ -0,0 +1,152 @@
+/* A representation of vector permutation indices.
+   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_VEC_PERN_INDICES_H
+#define GCC_VEC_PERN_INDICES_H 1
+
+#include "int-vector-builder.h"
+
+/* A vector_builder for building constant permutation vectors.
+   The elements do not need to be clamped to a particular range
+   of input elements.  */
+typedef int_vector_builder<poly_int64> vec_perm_builder;
+
+/* This class represents a constant permutation vector, such as that used
+   as the final operand to a VEC_PERM_EXPR.
+
+   Permutation vectors select indices modulo the number of input elements,
+   and the class canonicalizes each permutation vector for a particular
+   number of input vectors and for a particular number of elements per
+   input.  For example, the gimple statements:
+
+    _1 = VEC_PERM_EXPR <a, a, { 0, 2, 4, 6, 0, 2, 4, 6 }>;
+    _2 = VEC_PERM_EXPR <a, a, { 0, 2, 4, 6, 8, 10, 12, 14 }>;
+    _3 = VEC_PERM_EXPR <a, a, { 0, 2, 20, 22, 24, 2, 4, 14 }>;
+
+   effectively have only a single vector input "a".  If "a" has 8
+   elements, the indices select elements modulo 8, which makes all three
+   VEC_PERM_EXPRs equivalent.  The canonical form is for the indices to be
+   in the range [0, number of input elements - 1], so the class treats the
+   second and third permutation vectors as though they had been the first.
+
+   The class copes with cases in which the input and output vectors have
+   different numbers of elements.  */
+class vec_perm_indices
+{
+  typedef poly_int64 element_type;
+
+public:
+  vec_perm_indices ();
+  vec_perm_indices (const vec_perm_builder &, unsigned int, poly_uint64);
+
+  void new_vector (const vec_perm_builder &, unsigned int, poly_uint64);
+  void new_expanded_vector (const vec_perm_indices &, unsigned int);
+  void rotate_inputs (int delta);
+
+  /* Return the underlying vector encoding.  */
+  const vec_perm_builder &encoding () const { return m_encoding; }
+
+  /* Return the number of output elements.  This is called length ()
+     so that we present a more vec-like interface.  */
+  poly_uint64 length () const { return m_encoding.full_nelts (); }
+
+  /* Return the number of input vectors being permuted.  */
+  unsigned int ninputs () const { return m_ninputs; }
+
+  /* Return the number of elements in each input vector.  */
+  poly_uint64 nelts_per_input () const { return m_nelts_per_input; }
+
+  /* Return the total number of input elements.  */
+  poly_uint64 input_nelts () const { return m_ninputs * m_nelts_per_input; }
+
+  element_type clamp (element_type) const;
+  element_type operator[] (unsigned int i) const;
+  bool series_p (unsigned int, unsigned int, element_type, element_type) const;
+  bool all_in_range_p (element_type, element_type) const;
+  bool all_from_input_p (unsigned int) const;
+
+private:
+  vec_perm_indices (const vec_perm_indices &);
+
+  vec_perm_builder m_encoding;
+  unsigned int m_ninputs;
+  poly_uint64 m_nelts_per_input;
+};
+
+bool tree_to_vec_perm_builder (vec_perm_builder *, tree);
+tree vec_perm_indices_to_tree (tree, const vec_perm_indices &);
+rtx vec_perm_indices_to_rtx (machine_mode, const vec_perm_indices &);
+
+inline
+vec_perm_indices::vec_perm_indices ()
+  : m_ninputs (0),
+    m_nelts_per_input (0)
+{
+}
+
+/* Construct a permutation vector that selects between NINPUTS vector
+   inputs that have NELTS_PER_INPUT elements each.  Take the elements of
+   the new vector from ELEMENTS, clamping each one to be in range.  */
+
+inline
+vec_perm_indices::vec_perm_indices (const vec_perm_builder &elements,
+				    unsigned int ninputs,
+				    poly_uint64 nelts_per_input)
+{
+  new_vector (elements, ninputs, nelts_per_input);
+}
+
+/* Return the canonical value for permutation vector element ELT,
+   taking into account the current number of input elements.  */
+
+inline vec_perm_indices::element_type
+vec_perm_indices::clamp (element_type elt) const
+{
+  element_type limit = input_nelts (), elem_within_input;
+  HOST_WIDE_INT input;
+  if (!can_div_trunc_p (elt, limit, &input, &elem_within_input))
+    return elt;
+
+  /* Treat negative elements as counting from the end.  This only matters
+     if the vector size is not a power of 2.  */
+  if (known_lt (elem_within_input, 0))
+    return elem_within_input + limit;
+
+  return elem_within_input;
+}
+
+/* Return the value of vector element I, which might or might not be
+   explicitly encoded.  */
+
+inline vec_perm_indices::element_type
+vec_perm_indices::operator[] (unsigned int i) const
+{
+  return clamp (m_encoding.elt (i));
+}
+
+/* Return true if the permutation vector only selects elements from
+   input I.  */
+
+inline bool
+vec_perm_indices::all_from_input_p (unsigned int i) const
+{
+  return all_in_range_p (i * m_nelts_per_input, m_nelts_per_input);
+}
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/vec.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/vec.h
new file mode 100644
index 0000000..2dbf307
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/vec.h
@@ -0,0 +1,1976 @@
+/* Vector API for GNU compiler.
+   Copyright (C) 2004-2019 Free Software Foundation, Inc.
+   Contributed by Nathan Sidwell <nathan@codesourcery.com>
+   Re-implemented in C++ by Diego Novillo <dnovillo@google.com>
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_VEC_H
+#define GCC_VEC_H
+
+/* Some gen* file have no ggc support as the header file gtype-desc.h is
+   missing.  Provide these definitions in case ggc.h has not been included.
+   This is not a problem because any code that runs before gengtype is built
+   will never need to use GC vectors.*/
+
+extern void ggc_free (void *);
+extern size_t ggc_round_alloc_size (size_t requested_size);
+extern void *ggc_realloc (void *, size_t MEM_STAT_DECL);
+
+/* Templated vector type and associated interfaces.
+
+   The interface functions are typesafe and use inline functions,
+   sometimes backed by out-of-line generic functions.  The vectors are
+   designed to interoperate with the GTY machinery.
+
+   There are both 'index' and 'iterate' accessors.  The index accessor
+   is implemented by operator[].  The iterator returns a boolean
+   iteration condition and updates the iteration variable passed by
+   reference.  Because the iterator will be inlined, the address-of
+   can be optimized away.
+
+   Each operation that increases the number of active elements is
+   available in 'quick' and 'safe' variants.  The former presumes that
+   there is sufficient allocated space for the operation to succeed
+   (it dies if there is not).  The latter will reallocate the
+   vector, if needed.  Reallocation causes an exponential increase in
+   vector size.  If you know you will be adding N elements, it would
+   be more efficient to use the reserve operation before adding the
+   elements with the 'quick' operation.  This will ensure there are at
+   least as many elements as you ask for, it will exponentially
+   increase if there are too few spare slots.  If you want reserve a
+   specific number of slots, but do not want the exponential increase
+   (for instance, you know this is the last allocation), use the
+   reserve_exact operation.  You can also create a vector of a
+   specific size from the get go.
+
+   You should prefer the push and pop operations, as they append and
+   remove from the end of the vector. If you need to remove several
+   items in one go, use the truncate operation.  The insert and remove
+   operations allow you to change elements in the middle of the
+   vector.  There are two remove operations, one which preserves the
+   element ordering 'ordered_remove', and one which does not
+   'unordered_remove'.  The latter function copies the end element
+   into the removed slot, rather than invoke a memmove operation.  The
+   'lower_bound' function will determine where to place an item in the
+   array using insert that will maintain sorted order.
+
+   Vectors are template types with three arguments: the type of the
+   elements in the vector, the allocation strategy, and the physical
+   layout to use
+
+   Four allocation strategies are supported:
+
+	- Heap: allocation is done using malloc/free.  This is the
+	  default allocation strategy.
+
+  	- GC: allocation is done using ggc_alloc/ggc_free.
+
+  	- GC atomic: same as GC with the exception that the elements
+	  themselves are assumed to be of an atomic type that does
+	  not need to be garbage collected.  This means that marking
+	  routines do not need to traverse the array marking the
+	  individual elements.  This increases the performance of
+	  GC activities.
+
+   Two physical layouts are supported:
+
+	- Embedded: The vector is structured using the trailing array
+	  idiom.  The last member of the structure is an array of size
+	  1.  When the vector is initially allocated, a single memory
+	  block is created to hold the vector's control data and the
+	  array of elements.  These vectors cannot grow without
+	  reallocation (see discussion on embeddable vectors below).
+
+	- Space efficient: The vector is structured as a pointer to an
+	  embedded vector.  This is the default layout.  It means that
+	  vectors occupy a single word of storage before initial
+	  allocation.  Vectors are allowed to grow (the internal
+	  pointer is reallocated but the main vector instance does not
+	  need to relocate).
+
+   The type, allocation and layout are specified when the vector is
+   declared.
+
+   If you need to directly manipulate a vector, then the 'address'
+   accessor will return the address of the start of the vector.  Also
+   the 'space' predicate will tell you whether there is spare capacity
+   in the vector.  You will not normally need to use these two functions.
+
+   Notes on the different layout strategies
+
+   * Embeddable vectors (vec<T, A, vl_embed>)
+   
+     These vectors are suitable to be embedded in other data
+     structures so that they can be pre-allocated in a contiguous
+     memory block.
+
+     Embeddable vectors are implemented using the trailing array
+     idiom, thus they are not resizeable without changing the address
+     of the vector object itself.  This means you cannot have
+     variables or fields of embeddable vector type -- always use a
+     pointer to a vector.  The one exception is the final field of a
+     structure, which could be a vector type.
+
+     You will have to use the embedded_size & embedded_init calls to
+     create such objects, and they will not be resizeable (so the
+     'safe' allocation variants are not available).
+
+     Properties of embeddable vectors:
+
+	  - The whole vector and control data are allocated in a single
+	    contiguous block.  It uses the trailing-vector idiom, so
+	    allocation must reserve enough space for all the elements
+	    in the vector plus its control data.
+	  - The vector cannot be re-allocated.
+	  - The vector cannot grow nor shrink.
+	  - No indirections needed for access/manipulation.
+	  - It requires 2 words of storage (prior to vector allocation).
+
+
+   * Space efficient vector (vec<T, A, vl_ptr>)
+
+     These vectors can grow dynamically and are allocated together
+     with their control data.  They are suited to be included in data
+     structures.  Prior to initial allocation, they only take a single
+     word of storage.
+
+     These vectors are implemented as a pointer to embeddable vectors.
+     The semantics allow for this pointer to be NULL to represent
+     empty vectors.  This way, empty vectors occupy minimal space in
+     the structure containing them.
+
+     Properties:
+
+	- The whole vector and control data are allocated in a single
+	  contiguous block.
+  	- The whole vector may be re-allocated.
+  	- Vector data may grow and shrink.
+  	- Access and manipulation requires a pointer test and
+	  indirection.
+  	- It requires 1 word of storage (prior to vector allocation).
+
+   An example of their use would be,
+
+   struct my_struct {
+     // A space-efficient vector of tree pointers in GC memory.
+     vec<tree, va_gc, vl_ptr> v;
+   };
+
+   struct my_struct *s;
+
+   if (s->v.length ()) { we have some contents }
+   s->v.safe_push (decl); // append some decl onto the end
+   for (ix = 0; s->v.iterate (ix, &elt); ix++)
+     { do something with elt }
+*/
+
+/* Support function for statistics.  */
+extern void dump_vec_loc_statistics (void);
+
+/* Hashtable mapping vec addresses to descriptors.  */
+extern htab_t vec_mem_usage_hash;
+
+/* Control data for vectors.  This contains the number of allocated
+   and used slots inside a vector.  */
+
+struct vec_prefix
+{
+  /* FIXME - These fields should be private, but we need to cater to
+	     compilers that have stricter notions of PODness for types.  */
+
+  /* Memory allocation support routines in vec.c.  */
+  void register_overhead (void *, size_t, size_t CXX_MEM_STAT_INFO);
+  void release_overhead (void *, size_t, size_t, bool CXX_MEM_STAT_INFO);
+  static unsigned calculate_allocation (vec_prefix *, unsigned, bool);
+  static unsigned calculate_allocation_1 (unsigned, unsigned);
+
+  /* Note that vec_prefix should be a base class for vec, but we use
+     offsetof() on vector fields of tree structures (e.g.,
+     tree_binfo::base_binfos), and offsetof only supports base types.
+
+     To compensate, we make vec_prefix a field inside vec and make
+     vec a friend class of vec_prefix so it can access its fields.  */
+  template <typename, typename, typename> friend struct vec;
+
+  /* The allocator types also need access to our internals.  */
+  friend struct va_gc;
+  friend struct va_gc_atomic;
+  friend struct va_heap;
+
+  unsigned m_alloc : 31;
+  unsigned m_using_auto_storage : 1;
+  unsigned m_num;
+};
+
+/* Calculate the number of slots to reserve a vector, making sure that
+   RESERVE slots are free.  If EXACT grow exactly, otherwise grow
+   exponentially.  PFX is the control data for the vector.  */
+
+inline unsigned
+vec_prefix::calculate_allocation (vec_prefix *pfx, unsigned reserve,
+				  bool exact)
+{
+  if (exact)
+    return (pfx ? pfx->m_num : 0) + reserve;
+  else if (!pfx)
+    return MAX (4, reserve);
+  return calculate_allocation_1 (pfx->m_alloc, pfx->m_num + reserve);
+}
+
+template<typename, typename, typename> struct vec;
+
+/* Valid vector layouts
+
+   vl_embed	- Embeddable vector that uses the trailing array idiom.
+   vl_ptr	- Space efficient vector that uses a pointer to an
+		  embeddable vector.  */
+struct vl_embed { };
+struct vl_ptr { };
+
+
+/* Types of supported allocations
+
+   va_heap	- Allocation uses malloc/free.
+   va_gc	- Allocation uses ggc_alloc.
+   va_gc_atomic	- Same as GC, but individual elements of the array
+		  do not need to be marked during collection.  */
+
+/* Allocator type for heap vectors.  */
+struct va_heap
+{
+  /* Heap vectors are frequently regular instances, so use the vl_ptr
+     layout for them.  */
+  typedef vl_ptr default_layout;
+
+  template<typename T>
+  static void reserve (vec<T, va_heap, vl_embed> *&, unsigned, bool
+		       CXX_MEM_STAT_INFO);
+
+  template<typename T>
+  static void release (vec<T, va_heap, vl_embed> *&);
+};
+
+
+/* Allocator for heap memory.  Ensure there are at least RESERVE free
+   slots in V.  If EXACT is true, grow exactly, else grow
+   exponentially.  As a special case, if the vector had not been
+   allocated and RESERVE is 0, no vector will be created.  */
+
+template<typename T>
+inline void
+va_heap::reserve (vec<T, va_heap, vl_embed> *&v, unsigned reserve, bool exact
+		  MEM_STAT_DECL)
+{
+  size_t elt_size = sizeof (T);
+  unsigned alloc
+    = vec_prefix::calculate_allocation (v ? &v->m_vecpfx : 0, reserve, exact);
+  gcc_checking_assert (alloc);
+
+  if (GATHER_STATISTICS && v)
+    v->m_vecpfx.release_overhead (v, elt_size * v->allocated (),
+				  v->allocated (), false);
+
+  size_t size = vec<T, va_heap, vl_embed>::embedded_size (alloc);
+  unsigned nelem = v ? v->length () : 0;
+  v = static_cast <vec<T, va_heap, vl_embed> *> (xrealloc (v, size));
+  v->embedded_init (alloc, nelem);
+
+  if (GATHER_STATISTICS)
+    v->m_vecpfx.register_overhead (v, alloc, elt_size PASS_MEM_STAT);
+}
+
+
+/* Free the heap space allocated for vector V.  */
+
+template<typename T>
+void
+va_heap::release (vec<T, va_heap, vl_embed> *&v)
+{
+  size_t elt_size = sizeof (T);
+  if (v == NULL)
+    return;
+
+  if (GATHER_STATISTICS)
+    v->m_vecpfx.release_overhead (v, elt_size * v->allocated (),
+				  v->allocated (), true);
+  ::free (v);
+  v = NULL;
+}
+
+
+/* Allocator type for GC vectors.  Notice that we need the structure
+   declaration even if GC is not enabled.  */
+
+struct va_gc
+{
+  /* Use vl_embed as the default layout for GC vectors.  Due to GTY
+     limitations, GC vectors must always be pointers, so it is more
+     efficient to use a pointer to the vl_embed layout, rather than
+     using a pointer to a pointer as would be the case with vl_ptr.  */
+  typedef vl_embed default_layout;
+
+  template<typename T, typename A>
+  static void reserve (vec<T, A, vl_embed> *&, unsigned, bool
+		       CXX_MEM_STAT_INFO);
+
+  template<typename T, typename A>
+  static void release (vec<T, A, vl_embed> *&v);
+};
+
+
+/* Free GC memory used by V and reset V to NULL.  */
+
+template<typename T, typename A>
+inline void
+va_gc::release (vec<T, A, vl_embed> *&v)
+{
+  if (v)
+    ::ggc_free (v);
+  v = NULL;
+}
+
+
+/* Allocator for GC memory.  Ensure there are at least RESERVE free
+   slots in V.  If EXACT is true, grow exactly, else grow
+   exponentially.  As a special case, if the vector had not been
+   allocated and RESERVE is 0, no vector will be created.  */
+
+template<typename T, typename A>
+void
+va_gc::reserve (vec<T, A, vl_embed> *&v, unsigned reserve, bool exact
+		MEM_STAT_DECL)
+{
+  unsigned alloc
+    = vec_prefix::calculate_allocation (v ? &v->m_vecpfx : 0, reserve, exact);
+  if (!alloc)
+    {
+      ::ggc_free (v);
+      v = NULL;
+      return;
+    }
+
+  /* Calculate the amount of space we want.  */
+  size_t size = vec<T, A, vl_embed>::embedded_size (alloc);
+
+  /* Ask the allocator how much space it will really give us.  */
+  size = ::ggc_round_alloc_size (size);
+
+  /* Adjust the number of slots accordingly.  */
+  size_t vec_offset = sizeof (vec_prefix);
+  size_t elt_size = sizeof (T);
+  alloc = (size - vec_offset) / elt_size;
+
+  /* And finally, recalculate the amount of space we ask for.  */
+  size = vec_offset + alloc * elt_size;
+
+  unsigned nelem = v ? v->length () : 0;
+  v = static_cast <vec<T, A, vl_embed> *> (::ggc_realloc (v, size
+							       PASS_MEM_STAT));
+  v->embedded_init (alloc, nelem);
+}
+
+
+/* Allocator type for GC vectors.  This is for vectors of types
+   atomics w.r.t. collection, so allocation and deallocation is
+   completely inherited from va_gc.  */
+struct va_gc_atomic : va_gc
+{
+};
+
+
+/* Generic vector template.  Default values for A and L indicate the
+   most commonly used strategies.
+
+   FIXME - Ideally, they would all be vl_ptr to encourage using regular
+           instances for vectors, but the existing GTY machinery is limited
+	   in that it can only deal with GC objects that are pointers
+	   themselves.
+
+	   This means that vector operations that need to deal with
+	   potentially NULL pointers, must be provided as free
+	   functions (see the vec_safe_* functions above).  */
+template<typename T,
+         typename A = va_heap,
+         typename L = typename A::default_layout>
+struct GTY((user)) vec
+{
+};
+
+/* Generic vec<> debug helpers.
+
+   These need to be instantiated for each vec<TYPE> used throughout
+   the compiler like this:
+
+    DEFINE_DEBUG_VEC (TYPE)
+
+   The reason we have a debug_helper() is because GDB can't
+   disambiguate a plain call to debug(some_vec), and it must be called
+   like debug<TYPE>(some_vec).  */
+
+template<typename T>
+void
+debug_helper (vec<T> &ref)
+{
+  unsigned i;
+  for (i = 0; i < ref.length (); ++i)
+    {
+      fprintf (stderr, "[%d] = ", i);
+      debug_slim (ref[i]);
+      fputc ('\n', stderr);
+    }
+}
+
+/* We need a separate va_gc variant here because default template
+   argument for functions cannot be used in c++-98.  Once this
+   restriction is removed, those variant should be folded with the
+   above debug_helper.  */
+
+template<typename T>
+void
+debug_helper (vec<T, va_gc> &ref)
+{
+  unsigned i;
+  for (i = 0; i < ref.length (); ++i)
+    {
+      fprintf (stderr, "[%d] = ", i);
+      debug_slim (ref[i]);
+      fputc ('\n', stderr);
+    }
+}
+
+/* Macro to define debug(vec<T>) and debug(vec<T, va_gc>) helper
+   functions for a type T.  */
+
+#define DEFINE_DEBUG_VEC(T) \
+  template void debug_helper (vec<T> &);		\
+  template void debug_helper (vec<T, va_gc> &);		\
+  /* Define the vec<T> debug functions.  */		\
+  DEBUG_FUNCTION void					\
+  debug (vec<T> &ref)					\
+  {							\
+    debug_helper <T> (ref);				\
+  }							\
+  DEBUG_FUNCTION void					\
+  debug (vec<T> *ptr)					\
+  {							\
+    if (ptr)						\
+      debug (*ptr);					\
+    else						\
+      fprintf (stderr, "<nil>\n");			\
+  }							\
+  /* Define the vec<T, va_gc> debug functions.  */	\
+  DEBUG_FUNCTION void					\
+  debug (vec<T, va_gc> &ref)				\
+  {							\
+    debug_helper <T> (ref);				\
+  }							\
+  DEBUG_FUNCTION void					\
+  debug (vec<T, va_gc> *ptr)				\
+  {							\
+    if (ptr)						\
+      debug (*ptr);					\
+    else						\
+      fprintf (stderr, "<nil>\n");			\
+  }
+
+/* Default-construct N elements in DST.  */
+
+template <typename T>
+inline void
+vec_default_construct (T *dst, unsigned n)
+{
+#ifdef BROKEN_VALUE_INITIALIZATION
+  /* Versions of GCC before 4.4 sometimes leave certain objects
+     uninitialized when value initialized, though if the type has
+     user defined default ctor, that ctor is invoked.  As a workaround
+     perform clearing first and then the value initialization, which
+     fixes the case when value initialization doesn't initialize due to
+     the bugs and should initialize to all zeros, but still allows
+     vectors for types with user defined default ctor that initializes
+     some or all elements to non-zero.  If T has no user defined
+     default ctor and some non-static data members have user defined
+     default ctors that initialize to non-zero the workaround will
+     still not work properly; in that case we just need to provide
+     user defined default ctor.  */
+  memset (dst, '\0', sizeof (T) * n);
+#endif
+  for ( ; n; ++dst, --n)
+    ::new (static_cast<void*>(dst)) T ();
+}
+
+/* Copy-construct N elements in DST from *SRC.  */
+
+template <typename T>
+inline void
+vec_copy_construct (T *dst, const T *src, unsigned n)
+{
+  for ( ; n; ++dst, ++src, --n)
+    ::new (static_cast<void*>(dst)) T (*src);
+}
+
+/* Type to provide NULL values for vec<T, A, L>.  This is used to
+   provide nil initializers for vec instances.  Since vec must be
+   a POD, we cannot have proper ctor/dtor for it.  To initialize
+   a vec instance, you can assign it the value vNULL.  This isn't
+   needed for file-scope and function-local static vectors, which
+   are zero-initialized by default.  */
+struct vnull
+{
+  template <typename T, typename A, typename L>
+  CONSTEXPR operator vec<T, A, L> () { return vec<T, A, L>(); }
+};
+extern vnull vNULL;
+
+
+/* Embeddable vector.  These vectors are suitable to be embedded
+   in other data structures so that they can be pre-allocated in a
+   contiguous memory block.
+
+   Embeddable vectors are implemented using the trailing array idiom,
+   thus they are not resizeable without changing the address of the
+   vector object itself.  This means you cannot have variables or
+   fields of embeddable vector type -- always use a pointer to a
+   vector.  The one exception is the final field of a structure, which
+   could be a vector type.
+
+   You will have to use the embedded_size & embedded_init calls to
+   create such objects, and they will not be resizeable (so the 'safe'
+   allocation variants are not available).
+
+   Properties:
+
+	- The whole vector and control data are allocated in a single
+	  contiguous block.  It uses the trailing-vector idiom, so
+	  allocation must reserve enough space for all the elements
+  	  in the vector plus its control data.
+  	- The vector cannot be re-allocated.
+  	- The vector cannot grow nor shrink.
+  	- No indirections needed for access/manipulation.
+  	- It requires 2 words of storage (prior to vector allocation).  */
+
+template<typename T, typename A>
+struct GTY((user)) vec<T, A, vl_embed>
+{
+public:
+  unsigned allocated (void) const { return m_vecpfx.m_alloc; }
+  unsigned length (void) const { return m_vecpfx.m_num; }
+  bool is_empty (void) const { return m_vecpfx.m_num == 0; }
+  T *address (void) { return m_vecdata; }
+  const T *address (void) const { return m_vecdata; }
+  T *begin () { return address (); }
+  const T *begin () const { return address (); }
+  T *end () { return address () + length (); }
+  const T *end () const { return address () + length (); }
+  const T &operator[] (unsigned) const;
+  T &operator[] (unsigned);
+  T &last (void);
+  bool space (unsigned) const;
+  bool iterate (unsigned, T *) const;
+  bool iterate (unsigned, T **) const;
+  vec *copy (ALONE_CXX_MEM_STAT_INFO) const;
+  void splice (const vec &);
+  void splice (const vec *src);
+  T *quick_push (const T &);
+  T &pop (void);
+  void truncate (unsigned);
+  void quick_insert (unsigned, const T &);
+  void ordered_remove (unsigned);
+  void unordered_remove (unsigned);
+  void block_remove (unsigned, unsigned);
+  void qsort (int (*) (const void *, const void *));
+  T *bsearch (const void *key, int (*compar)(const void *, const void *));
+  unsigned lower_bound (T, bool (*)(const T &, const T &)) const;
+  bool contains (const T &search) const;
+  static size_t embedded_size (unsigned);
+  void embedded_init (unsigned, unsigned = 0, unsigned = 0);
+  void quick_grow (unsigned len);
+  void quick_grow_cleared (unsigned len);
+
+  /* vec class can access our internal data and functions.  */
+  template <typename, typename, typename> friend struct vec;
+
+  /* The allocator types also need access to our internals.  */
+  friend struct va_gc;
+  friend struct va_gc_atomic;
+  friend struct va_heap;
+
+  /* FIXME - These fields should be private, but we need to cater to
+	     compilers that have stricter notions of PODness for types.  */
+  vec_prefix m_vecpfx;
+  T m_vecdata[1];
+};
+
+
+/* Convenience wrapper functions to use when dealing with pointers to
+   embedded vectors.  Some functionality for these vectors must be
+   provided via free functions for these reasons:
+
+	1- The pointer may be NULL (e.g., before initial allocation).
+
+  	2- When the vector needs to grow, it must be reallocated, so
+  	   the pointer will change its value.
+
+   Because of limitations with the current GC machinery, all vectors
+   in GC memory *must* be pointers.  */
+
+
+/* If V contains no room for NELEMS elements, return false. Otherwise,
+   return true.  */
+template<typename T, typename A>
+inline bool
+vec_safe_space (const vec<T, A, vl_embed> *v, unsigned nelems)
+{
+  return v ? v->space (nelems) : nelems == 0;
+}
+
+
+/* If V is NULL, return 0.  Otherwise, return V->length().  */
+template<typename T, typename A>
+inline unsigned
+vec_safe_length (const vec<T, A, vl_embed> *v)
+{
+  return v ? v->length () : 0;
+}
+
+
+/* If V is NULL, return NULL.  Otherwise, return V->address().  */
+template<typename T, typename A>
+inline T *
+vec_safe_address (vec<T, A, vl_embed> *v)
+{
+  return v ? v->address () : NULL;
+}
+
+
+/* If V is NULL, return true.  Otherwise, return V->is_empty().  */
+template<typename T, typename A>
+inline bool
+vec_safe_is_empty (vec<T, A, vl_embed> *v)
+{
+  return v ? v->is_empty () : true;
+}
+
+/* If V does not have space for NELEMS elements, call
+   V->reserve(NELEMS, EXACT).  */
+template<typename T, typename A>
+inline bool
+vec_safe_reserve (vec<T, A, vl_embed> *&v, unsigned nelems, bool exact = false
+		  CXX_MEM_STAT_INFO)
+{
+  bool extend = nelems ? !vec_safe_space (v, nelems) : false;
+  if (extend)
+    A::reserve (v, nelems, exact PASS_MEM_STAT);
+  return extend;
+}
+
+template<typename T, typename A>
+inline bool
+vec_safe_reserve_exact (vec<T, A, vl_embed> *&v, unsigned nelems
+			CXX_MEM_STAT_INFO)
+{
+  return vec_safe_reserve (v, nelems, true PASS_MEM_STAT);
+}
+
+
+/* Allocate GC memory for V with space for NELEMS slots.  If NELEMS
+   is 0, V is initialized to NULL.  */
+
+template<typename T, typename A>
+inline void
+vec_alloc (vec<T, A, vl_embed> *&v, unsigned nelems CXX_MEM_STAT_INFO)
+{
+  v = NULL;
+  vec_safe_reserve (v, nelems, false PASS_MEM_STAT);
+}
+
+
+/* Free the GC memory allocated by vector V and set it to NULL.  */
+
+template<typename T, typename A>
+inline void
+vec_free (vec<T, A, vl_embed> *&v)
+{
+  A::release (v);
+}
+
+
+/* Grow V to length LEN.  Allocate it, if necessary.  */
+template<typename T, typename A>
+inline void
+vec_safe_grow (vec<T, A, vl_embed> *&v, unsigned len CXX_MEM_STAT_INFO)
+{
+  unsigned oldlen = vec_safe_length (v);
+  gcc_checking_assert (len >= oldlen);
+  vec_safe_reserve_exact (v, len - oldlen PASS_MEM_STAT);
+  v->quick_grow (len);
+}
+
+
+/* If V is NULL, allocate it.  Call V->safe_grow_cleared(LEN).  */
+template<typename T, typename A>
+inline void
+vec_safe_grow_cleared (vec<T, A, vl_embed> *&v, unsigned len CXX_MEM_STAT_INFO)
+{
+  unsigned oldlen = vec_safe_length (v);
+  vec_safe_grow (v, len PASS_MEM_STAT);
+  vec_default_construct (v->address () + oldlen, len - oldlen);
+}
+
+
+/* Assume V is not NULL.  */
+
+template<typename T>
+inline void
+vec_safe_grow_cleared (vec<T, va_heap, vl_ptr> *&v,
+		       unsigned len CXX_MEM_STAT_INFO)
+{
+  v->safe_grow_cleared (len PASS_MEM_STAT);
+}
+
+
+/* If V is NULL return false, otherwise return V->iterate(IX, PTR).  */
+template<typename T, typename A>
+inline bool
+vec_safe_iterate (const vec<T, A, vl_embed> *v, unsigned ix, T **ptr)
+{
+  if (v)
+    return v->iterate (ix, ptr);
+  else
+    {
+      *ptr = 0;
+      return false;
+    }
+}
+
+template<typename T, typename A>
+inline bool
+vec_safe_iterate (const vec<T, A, vl_embed> *v, unsigned ix, T *ptr)
+{
+  if (v)
+    return v->iterate (ix, ptr);
+  else
+    {
+      *ptr = 0;
+      return false;
+    }
+}
+
+
+/* If V has no room for one more element, reallocate it.  Then call
+   V->quick_push(OBJ).  */
+template<typename T, typename A>
+inline T *
+vec_safe_push (vec<T, A, vl_embed> *&v, const T &obj CXX_MEM_STAT_INFO)
+{
+  vec_safe_reserve (v, 1, false PASS_MEM_STAT);
+  return v->quick_push (obj);
+}
+
+
+/* if V has no room for one more element, reallocate it.  Then call
+   V->quick_insert(IX, OBJ).  */
+template<typename T, typename A>
+inline void
+vec_safe_insert (vec<T, A, vl_embed> *&v, unsigned ix, const T &obj
+		 CXX_MEM_STAT_INFO)
+{
+  vec_safe_reserve (v, 1, false PASS_MEM_STAT);
+  v->quick_insert (ix, obj);
+}
+
+
+/* If V is NULL, do nothing.  Otherwise, call V->truncate(SIZE).  */
+template<typename T, typename A>
+inline void
+vec_safe_truncate (vec<T, A, vl_embed> *v, unsigned size)
+{
+  if (v)
+    v->truncate (size);
+}
+
+
+/* If SRC is not NULL, return a pointer to a copy of it.  */
+template<typename T, typename A>
+inline vec<T, A, vl_embed> *
+vec_safe_copy (vec<T, A, vl_embed> *src CXX_MEM_STAT_INFO)
+{
+  return src ? src->copy (ALONE_PASS_MEM_STAT) : NULL;
+}
+
+/* Copy the elements from SRC to the end of DST as if by memcpy.
+   Reallocate DST, if necessary.  */
+template<typename T, typename A>
+inline void
+vec_safe_splice (vec<T, A, vl_embed> *&dst, const vec<T, A, vl_embed> *src
+		 CXX_MEM_STAT_INFO)
+{
+  unsigned src_len = vec_safe_length (src);
+  if (src_len)
+    {
+      vec_safe_reserve_exact (dst, vec_safe_length (dst) + src_len
+			      PASS_MEM_STAT);
+      dst->splice (*src);
+    }
+}
+
+/* Return true if SEARCH is an element of V.  Note that this is O(N) in the
+   size of the vector and so should be used with care.  */
+
+template<typename T, typename A>
+inline bool
+vec_safe_contains (vec<T, A, vl_embed> *v, const T &search)
+{
+  return v ? v->contains (search) : false;
+}
+
+/* Index into vector.  Return the IX'th element.  IX must be in the
+   domain of the vector.  */
+
+template<typename T, typename A>
+inline const T &
+vec<T, A, vl_embed>::operator[] (unsigned ix) const
+{
+  gcc_checking_assert (ix < m_vecpfx.m_num);
+  return m_vecdata[ix];
+}
+
+template<typename T, typename A>
+inline T &
+vec<T, A, vl_embed>::operator[] (unsigned ix)
+{
+  gcc_checking_assert (ix < m_vecpfx.m_num);
+  return m_vecdata[ix];
+}
+
+
+/* Get the final element of the vector, which must not be empty.  */
+
+template<typename T, typename A>
+inline T &
+vec<T, A, vl_embed>::last (void)
+{
+  gcc_checking_assert (m_vecpfx.m_num > 0);
+  return (*this)[m_vecpfx.m_num - 1];
+}
+
+
+/* If this vector has space for NELEMS additional entries, return
+   true.  You usually only need to use this if you are doing your
+   own vector reallocation, for instance on an embedded vector.  This
+   returns true in exactly the same circumstances that vec::reserve
+   will.  */
+
+template<typename T, typename A>
+inline bool
+vec<T, A, vl_embed>::space (unsigned nelems) const
+{
+  return m_vecpfx.m_alloc - m_vecpfx.m_num >= nelems;
+}
+
+
+/* Return iteration condition and update PTR to point to the IX'th
+   element of this vector.  Use this to iterate over the elements of a
+   vector as follows,
+
+     for (ix = 0; vec<T, A>::iterate (v, ix, &ptr); ix++)
+       continue;  */
+
+template<typename T, typename A>
+inline bool
+vec<T, A, vl_embed>::iterate (unsigned ix, T *ptr) const
+{
+  if (ix < m_vecpfx.m_num)
+    {
+      *ptr = m_vecdata[ix];
+      return true;
+    }
+  else
+    {
+      *ptr = 0;
+      return false;
+    }
+}
+
+
+/* Return iteration condition and update *PTR to point to the
+   IX'th element of this vector.  Use this to iterate over the
+   elements of a vector as follows,
+
+     for (ix = 0; v->iterate (ix, &ptr); ix++)
+       continue;
+
+   This variant is for vectors of objects.  */
+
+template<typename T, typename A>
+inline bool
+vec<T, A, vl_embed>::iterate (unsigned ix, T **ptr) const
+{
+  if (ix < m_vecpfx.m_num)
+    {
+      *ptr = CONST_CAST (T *, &m_vecdata[ix]);
+      return true;
+    }
+  else
+    {
+      *ptr = 0;
+      return false;
+    }
+}
+
+
+/* Return a pointer to a copy of this vector.  */
+
+template<typename T, typename A>
+inline vec<T, A, vl_embed> *
+vec<T, A, vl_embed>::copy (ALONE_MEM_STAT_DECL) const
+{
+  vec<T, A, vl_embed> *new_vec = NULL;
+  unsigned len = length ();
+  if (len)
+    {
+      vec_alloc (new_vec, len PASS_MEM_STAT);
+      new_vec->embedded_init (len, len);
+      vec_copy_construct (new_vec->address (), m_vecdata, len);
+    }
+  return new_vec;
+}
+
+
+/* Copy the elements from SRC to the end of this vector as if by memcpy.
+   The vector must have sufficient headroom available.  */
+
+template<typename T, typename A>
+inline void
+vec<T, A, vl_embed>::splice (const vec<T, A, vl_embed> &src)
+{
+  unsigned len = src.length ();
+  if (len)
+    {
+      gcc_checking_assert (space (len));
+      vec_copy_construct (end (), src.address (), len);
+      m_vecpfx.m_num += len;
+    }
+}
+
+template<typename T, typename A>
+inline void
+vec<T, A, vl_embed>::splice (const vec<T, A, vl_embed> *src)
+{
+  if (src)
+    splice (*src);
+}
+
+
+/* Push OBJ (a new element) onto the end of the vector.  There must be
+   sufficient space in the vector.  Return a pointer to the slot
+   where OBJ was inserted.  */
+
+template<typename T, typename A>
+inline T *
+vec<T, A, vl_embed>::quick_push (const T &obj)
+{
+  gcc_checking_assert (space (1));
+  T *slot = &m_vecdata[m_vecpfx.m_num++];
+  *slot = obj;
+  return slot;
+}
+
+
+/* Pop and return the last element off the end of the vector.  */
+
+template<typename T, typename A>
+inline T &
+vec<T, A, vl_embed>::pop (void)
+{
+  gcc_checking_assert (length () > 0);
+  return m_vecdata[--m_vecpfx.m_num];
+}
+
+
+/* Set the length of the vector to SIZE.  The new length must be less
+   than or equal to the current length.  This is an O(1) operation.  */
+
+template<typename T, typename A>
+inline void
+vec<T, A, vl_embed>::truncate (unsigned size)
+{
+  gcc_checking_assert (length () >= size);
+  m_vecpfx.m_num = size;
+}
+
+
+/* Insert an element, OBJ, at the IXth position of this vector.  There
+   must be sufficient space.  */
+
+template<typename T, typename A>
+inline void
+vec<T, A, vl_embed>::quick_insert (unsigned ix, const T &obj)
+{
+  gcc_checking_assert (length () < allocated ());
+  gcc_checking_assert (ix <= length ());
+  T *slot = &m_vecdata[ix];
+  memmove (slot + 1, slot, (m_vecpfx.m_num++ - ix) * sizeof (T));
+  *slot = obj;
+}
+
+
+/* Remove an element from the IXth position of this vector.  Ordering of
+   remaining elements is preserved.  This is an O(N) operation due to
+   memmove.  */
+
+template<typename T, typename A>
+inline void
+vec<T, A, vl_embed>::ordered_remove (unsigned ix)
+{
+  gcc_checking_assert (ix < length ());
+  T *slot = &m_vecdata[ix];
+  memmove (slot, slot + 1, (--m_vecpfx.m_num - ix) * sizeof (T));
+}
+
+
+/* Remove elements in [START, END) from VEC for which COND holds.  Ordering of
+   remaining elements is preserved.  This is an O(N) operation.  */
+
+#define VEC_ORDERED_REMOVE_IF_FROM_TO(vec, read_index, write_index,	\
+				      elem_ptr, start, end, cond)	\
+  {									\
+    gcc_assert ((end) <= (vec).length ());				\
+    for (read_index = write_index = (start); read_index < (end);	\
+	 ++read_index)							\
+      {									\
+	elem_ptr = &(vec)[read_index];					\
+	bool remove_p = (cond);						\
+	if (remove_p)							\
+	  continue;							\
+									\
+	if (read_index != write_index)					\
+	  (vec)[write_index] = (vec)[read_index];			\
+									\
+	write_index++;							\
+      }									\
+									\
+    if (read_index - write_index > 0)					\
+      (vec).block_remove (write_index, read_index - write_index);	\
+  }
+
+
+/* Remove elements from VEC for which COND holds.  Ordering of remaining
+   elements is preserved.  This is an O(N) operation.  */
+
+#define VEC_ORDERED_REMOVE_IF(vec, read_index, write_index, elem_ptr,	\
+			      cond)					\
+  VEC_ORDERED_REMOVE_IF_FROM_TO ((vec), read_index, write_index,	\
+				 elem_ptr, 0, (vec).length (), (cond))
+
+/* Remove an element from the IXth position of this vector.  Ordering of
+   remaining elements is destroyed.  This is an O(1) operation.  */
+
+template<typename T, typename A>
+inline void
+vec<T, A, vl_embed>::unordered_remove (unsigned ix)
+{
+  gcc_checking_assert (ix < length ());
+  m_vecdata[ix] = m_vecdata[--m_vecpfx.m_num];
+}
+
+
+/* Remove LEN elements starting at the IXth.  Ordering is retained.
+   This is an O(N) operation due to memmove.  */
+
+template<typename T, typename A>
+inline void
+vec<T, A, vl_embed>::block_remove (unsigned ix, unsigned len)
+{
+  gcc_checking_assert (ix + len <= length ());
+  T *slot = &m_vecdata[ix];
+  m_vecpfx.m_num -= len;
+  memmove (slot, slot + len, (m_vecpfx.m_num - ix) * sizeof (T));
+}
+
+
+/* Sort the contents of this vector with qsort.  CMP is the comparison
+   function to pass to qsort.  */
+
+template<typename T, typename A>
+inline void
+vec<T, A, vl_embed>::qsort (int (*cmp) (const void *, const void *))
+{
+  if (length () > 1)
+    ::qsort (address (), length (), sizeof (T), cmp);
+}
+
+
+/* Search the contents of the sorted vector with a binary search.
+   CMP is the comparison function to pass to bsearch.  */
+
+template<typename T, typename A>
+inline T *
+vec<T, A, vl_embed>::bsearch (const void *key,
+			      int (*compar) (const void *, const void *))
+{
+  const void *base = this->address ();
+  size_t nmemb = this->length ();
+  size_t size = sizeof (T);
+  /* The following is a copy of glibc stdlib-bsearch.h.  */
+  size_t l, u, idx;
+  const void *p;
+  int comparison;
+
+  l = 0;
+  u = nmemb;
+  while (l < u)
+    {
+      idx = (l + u) / 2;
+      p = (const void *) (((const char *) base) + (idx * size));
+      comparison = (*compar) (key, p);
+      if (comparison < 0)
+	u = idx;
+      else if (comparison > 0)
+	l = idx + 1;
+      else
+	return (T *)const_cast<void *>(p);
+    }
+
+  return NULL;
+}
+
+/* Return true if SEARCH is an element of V.  Note that this is O(N) in the
+   size of the vector and so should be used with care.  */
+
+template<typename T, typename A>
+inline bool
+vec<T, A, vl_embed>::contains (const T &search) const
+{
+  unsigned int len = length ();
+  for (unsigned int i = 0; i < len; i++)
+    if ((*this)[i] == search)
+      return true;
+
+  return false;
+}
+
+/* Find and return the first position in which OBJ could be inserted
+   without changing the ordering of this vector.  LESSTHAN is a
+   function that returns true if the first argument is strictly less
+   than the second.  */
+
+template<typename T, typename A>
+unsigned
+vec<T, A, vl_embed>::lower_bound (T obj, bool (*lessthan)(const T &, const T &))
+  const
+{
+  unsigned int len = length ();
+  unsigned int half, middle;
+  unsigned int first = 0;
+  while (len > 0)
+    {
+      half = len / 2;
+      middle = first;
+      middle += half;
+      T middle_elem = (*this)[middle];
+      if (lessthan (middle_elem, obj))
+	{
+	  first = middle;
+	  ++first;
+	  len = len - half - 1;
+	}
+      else
+	len = half;
+    }
+  return first;
+}
+
+
+/* Return the number of bytes needed to embed an instance of an
+   embeddable vec inside another data structure.
+
+   Use these methods to determine the required size and initialization
+   of a vector V of type T embedded within another structure (as the
+   final member):
+
+   size_t vec<T, A, vl_embed>::embedded_size (unsigned alloc);
+   void v->embedded_init (unsigned alloc, unsigned num);
+
+   These allow the caller to perform the memory allocation.  */
+
+template<typename T, typename A>
+inline size_t
+vec<T, A, vl_embed>::embedded_size (unsigned alloc)
+{
+  typedef vec<T, A, vl_embed> vec_embedded;
+  return offsetof (vec_embedded, m_vecdata) + alloc * sizeof (T);
+}
+
+
+/* Initialize the vector to contain room for ALLOC elements and
+   NUM active elements.  */
+
+template<typename T, typename A>
+inline void
+vec<T, A, vl_embed>::embedded_init (unsigned alloc, unsigned num, unsigned aut)
+{
+  m_vecpfx.m_alloc = alloc;
+  m_vecpfx.m_using_auto_storage = aut;
+  m_vecpfx.m_num = num;
+}
+
+
+/* Grow the vector to a specific length.  LEN must be as long or longer than
+   the current length.  The new elements are uninitialized.  */
+
+template<typename T, typename A>
+inline void
+vec<T, A, vl_embed>::quick_grow (unsigned len)
+{
+  gcc_checking_assert (length () <= len && len <= m_vecpfx.m_alloc);
+  m_vecpfx.m_num = len;
+}
+
+
+/* Grow the vector to a specific length.  LEN must be as long or longer than
+   the current length.  The new elements are initialized to zero.  */
+
+template<typename T, typename A>
+inline void
+vec<T, A, vl_embed>::quick_grow_cleared (unsigned len)
+{
+  unsigned oldlen = length ();
+  size_t growby = len - oldlen;
+  quick_grow (len);
+  if (growby != 0)
+    vec_default_construct (address () + oldlen, growby);
+}
+
+/* Garbage collection support for vec<T, A, vl_embed>.  */
+
+template<typename T>
+void
+gt_ggc_mx (vec<T, va_gc> *v)
+{
+  extern void gt_ggc_mx (T &);
+  for (unsigned i = 0; i < v->length (); i++)
+    gt_ggc_mx ((*v)[i]);
+}
+
+template<typename T>
+void
+gt_ggc_mx (vec<T, va_gc_atomic, vl_embed> *v ATTRIBUTE_UNUSED)
+{
+  /* Nothing to do.  Vectors of atomic types wrt GC do not need to
+     be traversed.  */
+}
+
+
+/* PCH support for vec<T, A, vl_embed>.  */
+
+template<typename T, typename A>
+void
+gt_pch_nx (vec<T, A, vl_embed> *v)
+{
+  extern void gt_pch_nx (T &);
+  for (unsigned i = 0; i < v->length (); i++)
+    gt_pch_nx ((*v)[i]);
+}
+
+template<typename T, typename A>
+void
+gt_pch_nx (vec<T *, A, vl_embed> *v, gt_pointer_operator op, void *cookie)
+{
+  for (unsigned i = 0; i < v->length (); i++)
+    op (&((*v)[i]), cookie);
+}
+
+template<typename T, typename A>
+void
+gt_pch_nx (vec<T, A, vl_embed> *v, gt_pointer_operator op, void *cookie)
+{
+  extern void gt_pch_nx (T *, gt_pointer_operator, void *);
+  for (unsigned i = 0; i < v->length (); i++)
+    gt_pch_nx (&((*v)[i]), op, cookie);
+}
+
+
+/* Space efficient vector.  These vectors can grow dynamically and are
+   allocated together with their control data.  They are suited to be
+   included in data structures.  Prior to initial allocation, they
+   only take a single word of storage.
+
+   These vectors are implemented as a pointer to an embeddable vector.
+   The semantics allow for this pointer to be NULL to represent empty
+   vectors.  This way, empty vectors occupy minimal space in the
+   structure containing them.
+
+   Properties:
+
+	- The whole vector and control data are allocated in a single
+	  contiguous block.
+  	- The whole vector may be re-allocated.
+  	- Vector data may grow and shrink.
+  	- Access and manipulation requires a pointer test and
+	  indirection.
+	- It requires 1 word of storage (prior to vector allocation).
+
+
+   Limitations:
+
+   These vectors must be PODs because they are stored in unions.
+   (http://en.wikipedia.org/wiki/Plain_old_data_structures).
+   As long as we use C++03, we cannot have constructors nor
+   destructors in classes that are stored in unions.  */
+
+template<typename T>
+struct vec<T, va_heap, vl_ptr>
+{
+public:
+  /* Memory allocation and deallocation for the embedded vector.
+     Needed because we cannot have proper ctors/dtors defined.  */
+  void create (unsigned nelems CXX_MEM_STAT_INFO);
+  void release (void);
+
+  /* Vector operations.  */
+  bool exists (void) const
+  { return m_vec != NULL; }
+
+  bool is_empty (void) const
+  { return m_vec ? m_vec->is_empty () : true; }
+
+  unsigned length (void) const
+  { return m_vec ? m_vec->length () : 0; }
+
+  T *address (void)
+  { return m_vec ? m_vec->m_vecdata : NULL; }
+
+  const T *address (void) const
+  { return m_vec ? m_vec->m_vecdata : NULL; }
+
+  T *begin () { return address (); }
+  const T *begin () const { return address (); }
+  T *end () { return begin () + length (); }
+  const T *end () const { return begin () + length (); }
+  const T &operator[] (unsigned ix) const
+  { return (*m_vec)[ix]; }
+
+  bool operator!=(const vec &other) const
+  { return !(*this == other); }
+
+  bool operator==(const vec &other) const
+  { return address () == other.address (); }
+
+  T &operator[] (unsigned ix)
+  { return (*m_vec)[ix]; }
+
+  T &last (void)
+  { return m_vec->last (); }
+
+  bool space (int nelems) const
+  { return m_vec ? m_vec->space (nelems) : nelems == 0; }
+
+  bool iterate (unsigned ix, T *p) const;
+  bool iterate (unsigned ix, T **p) const;
+  vec copy (ALONE_CXX_MEM_STAT_INFO) const;
+  bool reserve (unsigned, bool = false CXX_MEM_STAT_INFO);
+  bool reserve_exact (unsigned CXX_MEM_STAT_INFO);
+  void splice (const vec &);
+  void safe_splice (const vec & CXX_MEM_STAT_INFO);
+  T *quick_push (const T &);
+  T *safe_push (const T &CXX_MEM_STAT_INFO);
+  T &pop (void);
+  void truncate (unsigned);
+  void safe_grow (unsigned CXX_MEM_STAT_INFO);
+  void safe_grow_cleared (unsigned CXX_MEM_STAT_INFO);
+  void quick_grow (unsigned);
+  void quick_grow_cleared (unsigned);
+  void quick_insert (unsigned, const T &);
+  void safe_insert (unsigned, const T & CXX_MEM_STAT_INFO);
+  void ordered_remove (unsigned);
+  void unordered_remove (unsigned);
+  void block_remove (unsigned, unsigned);
+  void qsort (int (*) (const void *, const void *));
+  T *bsearch (const void *key, int (*compar)(const void *, const void *));
+  unsigned lower_bound (T, bool (*)(const T &, const T &)) const;
+  bool contains (const T &search) const;
+  void reverse (void);
+
+  bool using_auto_storage () const;
+
+  /* FIXME - This field should be private, but we need to cater to
+	     compilers that have stricter notions of PODness for types.  */
+  vec<T, va_heap, vl_embed> *m_vec;
+};
+
+
+/* auto_vec is a subclass of vec that automatically manages creating and
+   releasing the internal vector. If N is non zero then it has N elements of
+   internal storage.  The default is no internal storage, and you probably only
+   want to ask for internal storage for vectors on the stack because if the
+   size of the vector is larger than the internal storage that space is wasted.
+   */
+template<typename T, size_t N = 0>
+class auto_vec : public vec<T, va_heap>
+{
+public:
+  auto_vec ()
+  {
+    m_auto.embedded_init (MAX (N, 2), 0, 1);
+    this->m_vec = &m_auto;
+  }
+
+  auto_vec (size_t s)
+  {
+    if (s > N)
+      {
+	this->create (s);
+	return;
+      }
+
+    m_auto.embedded_init (MAX (N, 2), 0, 1);
+    this->m_vec = &m_auto;
+  }
+
+  ~auto_vec ()
+  {
+    this->release ();
+  }
+
+private:
+  vec<T, va_heap, vl_embed> m_auto;
+  T m_data[MAX (N - 1, 1)];
+};
+
+/* auto_vec is a sub class of vec whose storage is released when it is
+  destroyed. */
+template<typename T>
+class auto_vec<T, 0> : public vec<T, va_heap>
+{
+public:
+  auto_vec () { this->m_vec = NULL; }
+  auto_vec (size_t n) { this->create (n); }
+  ~auto_vec () { this->release (); }
+};
+
+
+/* Allocate heap memory for pointer V and create the internal vector
+   with space for NELEMS elements.  If NELEMS is 0, the internal
+   vector is initialized to empty.  */
+
+template<typename T>
+inline void
+vec_alloc (vec<T> *&v, unsigned nelems CXX_MEM_STAT_INFO)
+{
+  v = new vec<T>;
+  v->create (nelems PASS_MEM_STAT);
+}
+
+
+/* A subclass of auto_vec <char *> that frees all of its elements on
+   deletion.  */
+
+class auto_string_vec : public auto_vec <char *>
+{
+ public:
+  ~auto_string_vec ();
+};
+
+/* Conditionally allocate heap memory for VEC and its internal vector.  */
+
+template<typename T>
+inline void
+vec_check_alloc (vec<T, va_heap> *&vec, unsigned nelems CXX_MEM_STAT_INFO)
+{
+  if (!vec)
+    vec_alloc (vec, nelems PASS_MEM_STAT);
+}
+
+
+/* Free the heap memory allocated by vector V and set it to NULL.  */
+
+template<typename T>
+inline void
+vec_free (vec<T> *&v)
+{
+  if (v == NULL)
+    return;
+
+  v->release ();
+  delete v;
+  v = NULL;
+}
+
+
+/* Return iteration condition and update PTR to point to the IX'th
+   element of this vector.  Use this to iterate over the elements of a
+   vector as follows,
+
+     for (ix = 0; v.iterate (ix, &ptr); ix++)
+       continue;  */
+
+template<typename T>
+inline bool
+vec<T, va_heap, vl_ptr>::iterate (unsigned ix, T *ptr) const
+{
+  if (m_vec)
+    return m_vec->iterate (ix, ptr);
+  else
+    {
+      *ptr = 0;
+      return false;
+    }
+}
+
+
+/* Return iteration condition and update *PTR to point to the
+   IX'th element of this vector.  Use this to iterate over the
+   elements of a vector as follows,
+
+     for (ix = 0; v->iterate (ix, &ptr); ix++)
+       continue;
+
+   This variant is for vectors of objects.  */
+
+template<typename T>
+inline bool
+vec<T, va_heap, vl_ptr>::iterate (unsigned ix, T **ptr) const
+{
+  if (m_vec)
+    return m_vec->iterate (ix, ptr);
+  else
+    {
+      *ptr = 0;
+      return false;
+    }
+}
+
+
+/* Convenience macro for forward iteration.  */
+#define FOR_EACH_VEC_ELT(V, I, P)			\
+  for (I = 0; (V).iterate ((I), &(P)); ++(I))
+
+#define FOR_EACH_VEC_SAFE_ELT(V, I, P)			\
+  for (I = 0; vec_safe_iterate ((V), (I), &(P)); ++(I))
+
+/* Likewise, but start from FROM rather than 0.  */
+#define FOR_EACH_VEC_ELT_FROM(V, I, P, FROM)		\
+  for (I = (FROM); (V).iterate ((I), &(P)); ++(I))
+
+/* Convenience macro for reverse iteration.  */
+#define FOR_EACH_VEC_ELT_REVERSE(V, I, P)		\
+  for (I = (V).length () - 1;				\
+       (V).iterate ((I), &(P));				\
+       (I)--)
+
+#define FOR_EACH_VEC_SAFE_ELT_REVERSE(V, I, P)		\
+  for (I = vec_safe_length (V) - 1;			\
+       vec_safe_iterate ((V), (I), &(P));	\
+       (I)--)
+
+/* auto_string_vec's dtor, freeing all contained strings, automatically
+   chaining up to ~auto_vec <char *>, which frees the internal buffer.  */
+
+inline
+auto_string_vec::~auto_string_vec ()
+{
+  int i;
+  char *str;
+  FOR_EACH_VEC_ELT (*this, i, str)
+    free (str);
+}
+
+
+/* Return a copy of this vector.  */
+
+template<typename T>
+inline vec<T, va_heap, vl_ptr>
+vec<T, va_heap, vl_ptr>::copy (ALONE_MEM_STAT_DECL) const
+{
+  vec<T, va_heap, vl_ptr> new_vec = vNULL;
+  if (length ())
+    new_vec.m_vec = m_vec->copy ();
+  return new_vec;
+}
+
+
+/* Ensure that the vector has at least RESERVE slots available (if
+   EXACT is false), or exactly RESERVE slots available (if EXACT is
+   true).
+
+   This may create additional headroom if EXACT is false.
+
+   Note that this can cause the embedded vector to be reallocated.
+   Returns true iff reallocation actually occurred.  */
+
+template<typename T>
+inline bool
+vec<T, va_heap, vl_ptr>::reserve (unsigned nelems, bool exact MEM_STAT_DECL)
+{
+  if (space (nelems))
+    return false;
+
+  /* For now play a game with va_heap::reserve to hide our auto storage if any,
+     this is necessary because it doesn't have enough information to know the
+     embedded vector is in auto storage, and so should not be freed.  */
+  vec<T, va_heap, vl_embed> *oldvec = m_vec;
+  unsigned int oldsize = 0;
+  bool handle_auto_vec = m_vec && using_auto_storage ();
+  if (handle_auto_vec)
+    {
+      m_vec = NULL;
+      oldsize = oldvec->length ();
+      nelems += oldsize;
+    }
+
+  va_heap::reserve (m_vec, nelems, exact PASS_MEM_STAT);
+  if (handle_auto_vec)
+    {
+      vec_copy_construct (m_vec->address (), oldvec->address (), oldsize);
+      m_vec->m_vecpfx.m_num = oldsize;
+    }
+
+  return true;
+}
+
+
+/* Ensure that this vector has exactly NELEMS slots available.  This
+   will not create additional headroom.  Note this can cause the
+   embedded vector to be reallocated.  Returns true iff reallocation
+   actually occurred.  */
+
+template<typename T>
+inline bool
+vec<T, va_heap, vl_ptr>::reserve_exact (unsigned nelems MEM_STAT_DECL)
+{
+  return reserve (nelems, true PASS_MEM_STAT);
+}
+
+
+/* Create the internal vector and reserve NELEMS for it.  This is
+   exactly like vec::reserve, but the internal vector is
+   unconditionally allocated from scratch.  The old one, if it
+   existed, is lost.  */
+
+template<typename T>
+inline void
+vec<T, va_heap, vl_ptr>::create (unsigned nelems MEM_STAT_DECL)
+{
+  m_vec = NULL;
+  if (nelems > 0)
+    reserve_exact (nelems PASS_MEM_STAT);
+}
+
+
+/* Free the memory occupied by the embedded vector.  */
+
+template<typename T>
+inline void
+vec<T, va_heap, vl_ptr>::release (void)
+{
+  if (!m_vec)
+    return;
+
+  if (using_auto_storage ())
+    {
+      m_vec->m_vecpfx.m_num = 0;
+      return;
+    }
+
+  va_heap::release (m_vec);
+}
+
+/* Copy the elements from SRC to the end of this vector as if by memcpy.
+   SRC and this vector must be allocated with the same memory
+   allocation mechanism. This vector is assumed to have sufficient
+   headroom available.  */
+
+template<typename T>
+inline void
+vec<T, va_heap, vl_ptr>::splice (const vec<T, va_heap, vl_ptr> &src)
+{
+  if (src.length ())
+    m_vec->splice (*(src.m_vec));
+}
+
+
+/* Copy the elements in SRC to the end of this vector as if by memcpy.
+   SRC and this vector must be allocated with the same mechanism.
+   If there is not enough headroom in this vector, it will be reallocated
+   as needed.  */
+
+template<typename T>
+inline void
+vec<T, va_heap, vl_ptr>::safe_splice (const vec<T, va_heap, vl_ptr> &src
+				      MEM_STAT_DECL)
+{
+  if (src.length ())
+    {
+      reserve_exact (src.length ());
+      splice (src);
+    }
+}
+
+
+/* Push OBJ (a new element) onto the end of the vector.  There must be
+   sufficient space in the vector.  Return a pointer to the slot
+   where OBJ was inserted.  */
+
+template<typename T>
+inline T *
+vec<T, va_heap, vl_ptr>::quick_push (const T &obj)
+{
+  return m_vec->quick_push (obj);
+}
+
+
+/* Push a new element OBJ onto the end of this vector.  Reallocates
+   the embedded vector, if needed.  Return a pointer to the slot where
+   OBJ was inserted.  */
+
+template<typename T>
+inline T *
+vec<T, va_heap, vl_ptr>::safe_push (const T &obj MEM_STAT_DECL)
+{
+  reserve (1, false PASS_MEM_STAT);
+  return quick_push (obj);
+}
+
+
+/* Pop and return the last element off the end of the vector.  */
+
+template<typename T>
+inline T &
+vec<T, va_heap, vl_ptr>::pop (void)
+{
+  return m_vec->pop ();
+}
+
+
+/* Set the length of the vector to LEN.  The new length must be less
+   than or equal to the current length.  This is an O(1) operation.  */
+
+template<typename T>
+inline void
+vec<T, va_heap, vl_ptr>::truncate (unsigned size)
+{
+  if (m_vec)
+    m_vec->truncate (size);
+  else
+    gcc_checking_assert (size == 0);
+}
+
+
+/* Grow the vector to a specific length.  LEN must be as long or
+   longer than the current length.  The new elements are
+   uninitialized.  Reallocate the internal vector, if needed.  */
+
+template<typename T>
+inline void
+vec<T, va_heap, vl_ptr>::safe_grow (unsigned len MEM_STAT_DECL)
+{
+  unsigned oldlen = length ();
+  gcc_checking_assert (oldlen <= len);
+  reserve_exact (len - oldlen PASS_MEM_STAT);
+  if (m_vec)
+    m_vec->quick_grow (len);
+  else
+    gcc_checking_assert (len == 0);
+}
+
+
+/* Grow the embedded vector to a specific length.  LEN must be as
+   long or longer than the current length.  The new elements are
+   initialized to zero.  Reallocate the internal vector, if needed.  */
+
+template<typename T>
+inline void
+vec<T, va_heap, vl_ptr>::safe_grow_cleared (unsigned len MEM_STAT_DECL)
+{
+  unsigned oldlen = length ();
+  size_t growby = len - oldlen;
+  safe_grow (len PASS_MEM_STAT);
+  if (growby != 0)
+    vec_default_construct (address () + oldlen, growby);
+}
+
+
+/* Same as vec::safe_grow but without reallocation of the internal vector.
+   If the vector cannot be extended, a runtime assertion will be triggered.  */
+
+template<typename T>
+inline void
+vec<T, va_heap, vl_ptr>::quick_grow (unsigned len)
+{
+  gcc_checking_assert (m_vec);
+  m_vec->quick_grow (len);
+}
+
+
+/* Same as vec::quick_grow_cleared but without reallocation of the
+   internal vector. If the vector cannot be extended, a runtime
+   assertion will be triggered.  */
+
+template<typename T>
+inline void
+vec<T, va_heap, vl_ptr>::quick_grow_cleared (unsigned len)
+{
+  gcc_checking_assert (m_vec);
+  m_vec->quick_grow_cleared (len);
+}
+
+
+/* Insert an element, OBJ, at the IXth position of this vector.  There
+   must be sufficient space.  */
+
+template<typename T>
+inline void
+vec<T, va_heap, vl_ptr>::quick_insert (unsigned ix, const T &obj)
+{
+  m_vec->quick_insert (ix, obj);
+}
+
+
+/* Insert an element, OBJ, at the IXth position of the vector.
+   Reallocate the embedded vector, if necessary.  */
+
+template<typename T>
+inline void
+vec<T, va_heap, vl_ptr>::safe_insert (unsigned ix, const T &obj MEM_STAT_DECL)
+{
+  reserve (1, false PASS_MEM_STAT);
+  quick_insert (ix, obj);
+}
+
+
+/* Remove an element from the IXth position of this vector.  Ordering of
+   remaining elements is preserved.  This is an O(N) operation due to
+   a memmove.  */
+
+template<typename T>
+inline void
+vec<T, va_heap, vl_ptr>::ordered_remove (unsigned ix)
+{
+  m_vec->ordered_remove (ix);
+}
+
+
+/* Remove an element from the IXth position of this vector.  Ordering
+   of remaining elements is destroyed.  This is an O(1) operation.  */
+
+template<typename T>
+inline void
+vec<T, va_heap, vl_ptr>::unordered_remove (unsigned ix)
+{
+  m_vec->unordered_remove (ix);
+}
+
+
+/* Remove LEN elements starting at the IXth.  Ordering is retained.
+   This is an O(N) operation due to memmove.  */
+
+template<typename T>
+inline void
+vec<T, va_heap, vl_ptr>::block_remove (unsigned ix, unsigned len)
+{
+  m_vec->block_remove (ix, len);
+}
+
+
+/* Sort the contents of this vector with qsort.  CMP is the comparison
+   function to pass to qsort.  */
+
+template<typename T>
+inline void
+vec<T, va_heap, vl_ptr>::qsort (int (*cmp) (const void *, const void *))
+{
+  if (m_vec)
+    m_vec->qsort (cmp);
+}
+
+
+/* Search the contents of the sorted vector with a binary search.
+   CMP is the comparison function to pass to bsearch.  */
+
+template<typename T>
+inline T *
+vec<T, va_heap, vl_ptr>::bsearch (const void *key,
+				  int (*cmp) (const void *, const void *))
+{
+  if (m_vec)
+    return m_vec->bsearch (key, cmp);
+  return NULL;
+}
+
+
+/* Find and return the first position in which OBJ could be inserted
+   without changing the ordering of this vector.  LESSTHAN is a
+   function that returns true if the first argument is strictly less
+   than the second.  */
+
+template<typename T>
+inline unsigned
+vec<T, va_heap, vl_ptr>::lower_bound (T obj,
+				      bool (*lessthan)(const T &, const T &))
+    const
+{
+  return m_vec ? m_vec->lower_bound (obj, lessthan) : 0;
+}
+
+/* Return true if SEARCH is an element of V.  Note that this is O(N) in the
+   size of the vector and so should be used with care.  */
+
+template<typename T>
+inline bool
+vec<T, va_heap, vl_ptr>::contains (const T &search) const
+{
+  return m_vec ? m_vec->contains (search) : false;
+}
+
+/* Reverse content of the vector.  */
+
+template<typename T>
+inline void
+vec<T, va_heap, vl_ptr>::reverse (void)
+{
+  unsigned l = length ();
+  T *ptr = address ();
+
+  for (unsigned i = 0; i < l / 2; i++)
+    std::swap (ptr[i], ptr[l - i - 1]);
+}
+
+template<typename T>
+inline bool
+vec<T, va_heap, vl_ptr>::using_auto_storage () const
+{
+  return m_vec->m_vecpfx.m_using_auto_storage;
+}
+
+/* Release VEC and call release of all element vectors.  */
+
+template<typename T>
+inline void
+release_vec_vec (vec<vec<T> > &vec)
+{
+  for (unsigned i = 0; i < vec.length (); i++)
+    vec[i].release ();
+
+  vec.release ();
+}
+
+#if (GCC_VERSION >= 3000)
+# pragma GCC poison m_vec m_vecpfx m_vecdata
+#endif
+
+#endif // GCC_VEC_H
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/vector-builder.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/vector-builder.h
new file mode 100644
index 0000000..9967daa
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/vector-builder.h
@@ -0,0 +1,458 @@
+/* A class for building vector constant patterns.
+   Copyright (C) 2017-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_VECTOR_BUILDER_H
+#define GCC_VECTOR_BUILDER_H
+
+/* This class is a wrapper around auto_vec<T> for building vectors of T.
+   It aims to encode each vector as npatterns interleaved patterns,
+   where each pattern represents a sequence:
+
+     { BASE0, BASE1, BASE1 + STEP, BASE1 + STEP*2, BASE1 + STEP*3, ... }
+
+   The first three elements in each pattern provide enough information
+   to derive the other elements.  If all patterns have a STEP of zero,
+   we only need to encode the first two elements in each pattern.
+   If BASE1 is also equal to BASE0 for all patterns, we only need to
+   encode the first element in each pattern.  The number of encoded
+   elements per pattern is given by nelts_per_pattern.
+
+   The class can be used in two ways:
+
+   1. It can be used to build a full image of the vector, which is then
+      canonicalized by finalize ().  In this case npatterns is initially
+      the number of elements in the vector and nelts_per_pattern is
+      initially 1.
+
+   2. It can be used to build a vector that already has a known encoding.
+      This is preferred since it is more efficient and copes with
+      variable-length vectors.  finalize () then canonicalizes the encoding
+      to a simpler form if possible.
+
+   The derived class Derived provides this functionality for specific Ts.
+   Derived needs to provide the following interface:
+
+      bool equal_p (T elt1, T elt2) const;
+
+	  Return true if elements ELT1 and ELT2 are equal.
+
+      bool allow_steps_p () const;
+
+	  Return true if a stepped representation is OK.  We don't allow
+	  linear series for anything other than integers, to avoid problems
+	  with rounding.
+
+      bool integral_p (T elt) const;
+
+	  Return true if element ELT can be interpreted as an integer.
+
+      StepType step (T elt1, T elt2) const;
+
+	  Return the value of element ELT2 minus the value of element ELT1,
+	  given integral_p (ELT1) && integral_p (ELT2).  There is no fixed
+	  choice of StepType.
+
+      T apply_step (T base, unsigned int factor, StepType step) const;
+
+	  Return a vector element with the value BASE + FACTOR * STEP.
+
+      bool can_elide_p (T elt) const;
+
+	  Return true if we can drop element ELT, even if the retained
+	  elements are different.  This is provided for TREE_OVERFLOW
+	  handling.
+
+      void note_representative (T *elt1_ptr, T elt2);
+
+	  Record that ELT2 is being elided, given that ELT1_PTR points to
+	  the last encoded element for the containing pattern.  This is
+	  again provided for TREE_OVERFLOW handling.  */
+
+template<typename T, typename Derived>
+class vector_builder : public auto_vec<T, 32>
+{
+public:
+  vector_builder ();
+
+  poly_uint64 full_nelts () const { return m_full_nelts; }
+  unsigned int npatterns () const { return m_npatterns; }
+  unsigned int nelts_per_pattern () const { return m_nelts_per_pattern; }
+  unsigned int encoded_nelts () const;
+  bool encoded_full_vector_p () const;
+  T elt (unsigned int) const;
+
+  bool operator == (const Derived &) const;
+  bool operator != (const Derived &x) const { return !operator == (x); }
+
+  void finalize ();
+
+protected:
+  void new_vector (poly_uint64, unsigned int, unsigned int);
+  void reshape (unsigned int, unsigned int);
+  bool repeating_sequence_p (unsigned int, unsigned int, unsigned int);
+  bool stepped_sequence_p (unsigned int, unsigned int, unsigned int);
+  bool try_npatterns (unsigned int);
+
+private:
+  vector_builder (const vector_builder &);
+  vector_builder &operator= (const vector_builder &);
+  Derived *derived () { return static_cast<Derived *> (this); }
+  const Derived *derived () const;
+
+  poly_uint64 m_full_nelts;
+  unsigned int m_npatterns;
+  unsigned int m_nelts_per_pattern;
+};
+
+template<typename T, typename Derived>
+inline const Derived *
+vector_builder<T, Derived>::derived () const
+{
+  return static_cast<const Derived *> (this);
+}
+
+template<typename T, typename Derived>
+inline
+vector_builder<T, Derived>::vector_builder ()
+  : m_full_nelts (0),
+    m_npatterns (0),
+    m_nelts_per_pattern (0)
+{}
+
+/* Return the number of elements that are explicitly encoded.  The vec
+   starts with these explicitly-encoded elements and may contain additional
+   elided elements.  */
+
+template<typename T, typename Derived>
+inline unsigned int
+vector_builder<T, Derived>::encoded_nelts () const
+{
+  return m_npatterns * m_nelts_per_pattern;
+}
+
+/* Return true if every element of the vector is explicitly encoded.  */
+
+template<typename T, typename Derived>
+inline bool
+vector_builder<T, Derived>::encoded_full_vector_p () const
+{
+  return known_eq (m_npatterns * m_nelts_per_pattern, m_full_nelts);
+}
+
+/* Start building a vector that has FULL_NELTS elements.  Initially
+   encode it using NPATTERNS patterns with NELTS_PER_PATTERN each.  */
+
+template<typename T, typename Derived>
+void
+vector_builder<T, Derived>::new_vector (poly_uint64 full_nelts,
+					unsigned int npatterns,
+					unsigned int nelts_per_pattern)
+{
+  m_full_nelts = full_nelts;
+  m_npatterns = npatterns;
+  m_nelts_per_pattern = nelts_per_pattern;
+  this->reserve (encoded_nelts ());
+  this->truncate (0);
+}
+
+/* Return true if this vector and OTHER have the same elements and
+   are encoded in the same way.  */
+
+template<typename T, typename Derived>
+bool
+vector_builder<T, Derived>::operator == (const Derived &other) const
+{
+  if (maybe_ne (m_full_nelts, other.m_full_nelts)
+      || m_npatterns != other.m_npatterns
+      || m_nelts_per_pattern != other.m_nelts_per_pattern)
+    return false;
+
+  unsigned int nelts = encoded_nelts ();
+  for (unsigned int i = 0; i < nelts; ++i)
+    if (!derived ()->equal_p ((*this)[i], other[i]))
+      return false;
+
+  return true;
+}
+
+/* Return the value of vector element I, which might or might not be
+   encoded explicitly.  */
+
+template<typename T, typename Derived>
+T
+vector_builder<T, Derived>::elt (unsigned int i) const
+{
+  /* This only makes sense if the encoding has been fully populated.  */
+  gcc_checking_assert (encoded_nelts () <= this->length ());
+
+  /* First handle elements that are already present in the underlying
+     vector, regardless of whether they're part of the encoding or not.  */
+  if (i < this->length ())
+    return (*this)[i];
+
+  /* Identify the pattern that contains element I and work out the index of
+     the last encoded element for that pattern.  */
+  unsigned int pattern = i % m_npatterns;
+  unsigned int count = i / m_npatterns;
+  unsigned int final_i = encoded_nelts () - m_npatterns + pattern;
+  T final = (*this)[final_i];
+
+  /* If there are no steps, the final encoded value is the right one.  */
+  if (m_nelts_per_pattern <= 2)
+    return final;
+
+  /* Otherwise work out the value from the last two encoded elements.  */
+  T prev = (*this)[final_i - m_npatterns];
+  return derived ()->apply_step (final, count - 2,
+				 derived ()->step (prev, final));
+}
+
+/* Change the encoding to NPATTERNS patterns of NELTS_PER_PATTERN each,
+   but without changing the underlying vector.  */
+
+template<typename T, typename Derived>
+void
+vector_builder<T, Derived>::reshape (unsigned int npatterns,
+				     unsigned int nelts_per_pattern)
+{
+  unsigned int old_encoded_nelts = encoded_nelts ();
+  unsigned int new_encoded_nelts = npatterns * nelts_per_pattern;
+  gcc_checking_assert (new_encoded_nelts <= old_encoded_nelts);
+  unsigned int next = new_encoded_nelts - npatterns;
+  for (unsigned int i = new_encoded_nelts; i < old_encoded_nelts; ++i)
+    {
+      derived ()->note_representative (&(*this)[next], (*this)[i]);
+      next += 1;
+      if (next == new_encoded_nelts)
+	next -= npatterns;
+    }
+  m_npatterns = npatterns;
+  m_nelts_per_pattern = nelts_per_pattern;
+}
+
+/* Return true if elements [START, END) contain a repeating sequence of
+   STEP elements.  */
+
+template<typename T, typename Derived>
+bool
+vector_builder<T, Derived>::repeating_sequence_p (unsigned int start,
+						  unsigned int end,
+						  unsigned int step)
+{
+  for (unsigned int i = start; i < end - step; ++i)
+    if (!derived ()->equal_p ((*this)[i], (*this)[i + step]))
+      return false;
+  return true;
+}
+
+/* Return true if elements [START, END) contain STEP interleaved linear
+   series.  */
+
+template<typename T, typename Derived>
+bool
+vector_builder<T, Derived>::stepped_sequence_p (unsigned int start,
+						unsigned int end,
+						unsigned int step)
+{
+  if (!derived ()->allow_steps_p ())
+    return false;
+
+  for (unsigned int i = start + step * 2; i < end; ++i)
+    {
+      T elt1 = (*this)[i - step * 2];
+      T elt2 = (*this)[i - step];
+      T elt3 = (*this)[i];
+
+      if (!derived ()->integral_p (elt1)
+	  || !derived ()->integral_p (elt2)
+	  || !derived ()->integral_p (elt3))
+	return false;
+
+      if (maybe_ne (derived ()->step (elt1, elt2),
+		    derived ()->step (elt2, elt3)))
+	return false;
+
+      if (!derived ()->can_elide_p (elt3))
+	return false;
+    }
+  return true;
+}
+
+/* Try to change the number of encoded patterns to NPATTERNS, returning
+   true on success.  */
+
+template<typename T, typename Derived>
+bool
+vector_builder<T, Derived>::try_npatterns (unsigned int npatterns)
+{
+  if (m_nelts_per_pattern == 1)
+    {
+      /* See whether NPATTERNS is valid with the current 1-element-per-pattern
+	 encoding.  */
+      if (repeating_sequence_p (0, encoded_nelts (), npatterns))
+	{
+	  reshape (npatterns, 1);
+	  return true;
+	}
+
+      /* We can only increase the number of elements per pattern if all
+	 elements are still encoded explicitly.  */
+      if (!encoded_full_vector_p ())
+	return false;
+    }
+
+  if (m_nelts_per_pattern <= 2)
+    {
+      /* See whether NPATTERNS is valid with a 2-element-per-pattern
+	 encoding.  */
+      if (repeating_sequence_p (npatterns, encoded_nelts (), npatterns))
+	{
+	  reshape (npatterns, 2);
+	  return true;
+	}
+
+      /* We can only increase the number of elements per pattern if all
+	 elements are still encoded explicitly.  */
+      if (!encoded_full_vector_p ())
+	return false;
+    }
+
+  if (m_nelts_per_pattern <= 3)
+    {
+      /* See whether we have NPATTERNS interleaved linear series,
+	 giving a 3-element-per-pattern encoding.  */
+      if (stepped_sequence_p (npatterns, encoded_nelts (), npatterns))
+	{
+	  reshape (npatterns, 3);
+	  return true;
+	}
+      return false;
+    }
+
+  gcc_unreachable ();
+}
+
+/* Replace the current encoding with the canonical form.  */
+
+template<typename T, typename Derived>
+void
+vector_builder<T, Derived>::finalize ()
+{
+  /* The encoding requires the same number of elements to come from each
+     pattern.  */
+  gcc_assert (multiple_p (m_full_nelts, m_npatterns));
+
+  /* Allow the caller to build more elements than necessary.  For example,
+     it's often convenient to build a stepped vector from the natural
+     encoding of three elements even if the vector itself only has two.  */
+  unsigned HOST_WIDE_INT const_full_nelts;
+  if (m_full_nelts.is_constant (&const_full_nelts)
+      && const_full_nelts <= encoded_nelts ())
+    {
+      m_npatterns = const_full_nelts;
+      m_nelts_per_pattern = 1;
+    }
+
+  /* Try to whittle down the number of elements per pattern.  That is:
+
+     1. If we have stepped patterns whose steps are all 0, reduce the
+        number of elements per pattern from 3 to 2.
+
+     2. If we have background fill values that are the same as the
+        foreground values, reduce the number of elements per pattern
+        from 2 to 1.  */
+  while (m_nelts_per_pattern > 1
+	 && repeating_sequence_p (encoded_nelts () - m_npatterns * 2,
+				  encoded_nelts (), m_npatterns))
+    /* The last two sequences of M_NPATTERNS elements are equal,
+       so remove the last one.  */
+    reshape (m_npatterns, m_nelts_per_pattern - 1);
+
+  if (pow2p_hwi (m_npatterns))
+    {
+      /* Try to halve the number of patterns while doing so gives a
+	 valid pattern.  This approach is linear in the number of
+	 elements, whereas searcing from 1 up would be O(n*log(n)).
+
+	 Each halving step tries to keep the number of elements per pattern
+	 the same.  If that isn't possible, and if all elements are still
+	 explicitly encoded, the halving step can instead increase the number
+	 of elements per pattern.
+
+	 E.g. for:
+
+	     { 0, 2, 3, 4, 5, 6, 7, 8 }  npatterns == 8  full_nelts == 8
+
+	 we first realize that the second half of the sequence is not
+	 equal to the first, so we cannot maintain 1 element per pattern
+	 for npatterns == 4.  Instead we halve the number of patterns
+	 and double the number of elements per pattern, treating this
+	 as a "foreground" { 0, 2, 3, 4 } against a "background" of
+	 { 5, 6, 7, 8 | 5, 6, 7, 8 ... }:
+
+	     { 0, 2, 3, 4 | 5, 6, 7, 8 }  npatterns == 4
+
+	 Next we realize that this is *not* a foreround of { 0, 2 }
+	 against a background of { 3, 4 | 3, 4 ... }, so the only
+	 remaining option for reducing the number of patterns is
+	 to use a foreground of { 0, 2 } against a stepped background
+	 of { 1, 2 | 3, 4 | 5, 6 ... }.  This is valid because we still
+	 haven't elided any elements:
+
+	     { 0, 2 | 3, 4 | 5, 6 }  npatterns == 2
+
+	 This in turn can be reduced to a foreground of { 0 } against a
+	 stepped background of { 1 | 2 | 3 ... }:
+
+	     { 0 | 2 | 3 }  npatterns == 1
+
+	 This last step would not have been possible for:
+
+	     { 0, 0 | 3, 4 | 5, 6 }  npatterns == 2.  */
+      while ((m_npatterns & 1) == 0 && try_npatterns (m_npatterns / 2))
+	continue;
+
+      /* Builders of arbitrary fixed-length vectors can use:
+
+	     new_vector (x, x, 1)
+
+	 so that every element is specified explicitly.  Handle cases
+	 that are actually wrapping series, like { 0, 1, 2, 3, 0, 1, 2, 3 }
+	 would be for 2-bit elements.  We'll have treated them as
+	 duplicates in the loop above.  */
+      if (m_nelts_per_pattern == 1
+	  && m_full_nelts.is_constant (&const_full_nelts)
+	  && this->length () >= const_full_nelts
+	  && (m_npatterns & 3) == 0
+	  && stepped_sequence_p (m_npatterns / 4, const_full_nelts,
+				 m_npatterns / 4))
+	{
+	  reshape (m_npatterns / 4, 3);
+	  while ((m_npatterns & 1) == 0 && try_npatterns (m_npatterns / 2))
+	    continue;
+	}
+    }
+  else
+    /* For the non-power-of-2 case, do a simple search up from 1.  */
+    for (unsigned int i = 1; i <= m_npatterns / 2; ++i)
+      if (m_npatterns % i == 0 && try_npatterns (i))
+	break;
+}
+
+#endif
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/version.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/version.h
new file mode 100644
index 0000000..8891903
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/version.h
@@ -0,0 +1,6 @@
+#ifndef GCC_VERSION_H
+#define GCC_VERSION_H
+extern const char version_string[];
+extern const char pkgversion_string[];
+extern const char bug_report_url[];
+#endif /* ! GCC_VERSION_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/vmsdbg.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/vmsdbg.h
new file mode 100644
index 0000000..a1dc063
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/vmsdbg.h
@@ -0,0 +1,249 @@
+/* Definitions for the data structures and codes used in VMS debugging.
+   Copyright (C) 2001-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_VMSDBG_H
+#define GCC_VMSDBG_H 1
+
+/*  We define types and constants used in VMS Debug output.  Note that the
+    structs only approximate the output that is written.  We write the output
+    explicitly, field by field.  This output would only agree with the
+    structs in this file if no padding were done.  The sizes after each
+    struct are the size actually written, which is usually smaller than the
+    size of the struct.  */
+
+/* Header type codes.  */
+typedef enum _DST_TYPE {DST_K_TBG = 0x17,
+			DST_K_SOURCE = 155, DST_K_PROLOG = 162,
+			DST_K_BLKBEG = 176, DST_K_BLKEND = 177,
+			DST_K_LINE_NUM = 185, DST_K_MODBEG = 188,
+			DST_K_MODEND = 189, DST_K_RTNBEG = 190,
+			DST_K_RTNEND = 191} DST_DTYPE;
+
+/* Header.  */
+
+typedef struct _DST_HEADER
+{
+  union
+    {
+      unsigned short int dst_w_length;
+      unsigned short int dst_x_length;
+    } dst__header_length;
+  union
+    {
+      ENUM_BITFIELD (_DST_TYPE) dst_w_type : 16;
+      ENUM_BITFIELD (_DST_TYPE) dst_x_type : 16;
+    } dst__header_type;
+} DST_HEADER;
+#define DST_K_DST_HEADER_SIZE sizeof 4
+
+/* Language type codes.  */
+typedef enum _DST_LANGUAGE {DST_K_FORTRAN = 1, DST_K_C = 7, DST_K_ADA = 9,
+			    DST_K_UNKNOWN = 10, DST_K_CXX = 15} DST_LANGUAGE;
+
+/* Module header (a module is the result of a single compilation).  */
+
+typedef struct _DST_MODULE_BEGIN
+{
+  DST_HEADER dst_a_modbeg_header;
+  struct
+    {
+      unsigned dst_v_modbeg_hide : 1;
+      unsigned dst_v_modbeg_version : 1;
+      unsigned dst_v_modbeg_unused : 6;
+    } dst_b_modbeg_flags;
+  unsigned char dst_b_modbeg_unused;
+  DST_LANGUAGE dst_l_modbeg_language;
+  unsigned short int dst_w_version_major;
+  unsigned short int dst_w_version_minor;
+  unsigned char dst_b_modbeg_name;
+} DST_MODULE_BEGIN;
+#define DST_K_MODBEG_SIZE 15
+
+/* Module trailer.  */
+
+typedef struct _DST_MB_TRLR
+{
+  unsigned char dst_b_compiler;
+} DST_MB_TRLR;
+
+#define DST_K_MB_TRLR_SIZE 1
+
+#define DST_K_VERSION_MAJOR 1
+#define DST_K_VERSION_MINOR 13
+
+typedef struct _DST_MODULE_END
+{
+  DST_HEADER dst_a_modend_header;
+} DST_MODULE_END;
+#define DST_K_MODEND_SIZE sizeof 4
+
+/* Routine header.  */
+
+typedef struct _DST_ROUTINE_BEGIN
+{
+  DST_HEADER dst_a_rtnbeg_header;
+  struct
+    {
+      unsigned dst_v_rtnbeg_unused : 4;
+      unsigned dst_v_rtnbeg_unalloc : 1;
+      unsigned dst_v_rtnbeg_prototype : 1;
+      unsigned dst_v_rtnbeg_inlined : 1;
+      unsigned dst_v_rtnbeg_no_call : 1;
+    } dst_b_rtnbeg_flags;
+  int *dst_l_rtnbeg_address;
+  int *dst_l_rtnbeg_pd_address;
+  unsigned char dst_b_rtnbeg_name;
+} DST_ROUTINE_BEGIN;
+#define DST_K_RTNBEG_SIZE 14
+
+/* Routine trailer */
+
+typedef struct _DST_ROUTINE_END
+{
+  DST_HEADER dst_a_rtnend_header;
+  char dst_b_rtnend_unused;
+  unsigned int dst_l_rtnend_size;
+} DST_ROUTINE_END;
+#define DST_K_RTNEND_SIZE 9
+
+/* Block header.  */
+
+typedef struct _DST_BLOCK_BEGIN
+{
+  DST_HEADER dst_a_blkbeg_header;
+  unsigned char dst_b_blkbeg_unused;
+  int *dst_l_blkbeg_address;
+  unsigned char dst_b_blkbeg_name;
+} DST_BLOCK_BEGIN;
+#define DST_K_BLKBEG_SIZE 10
+
+/* Block trailer.  */
+
+typedef struct _DST_BLOCK_END
+{
+  DST_HEADER dst_a_blkend_header;
+  unsigned char dst_b_blkend_unused;
+  unsigned int dst_l_blkend_size;
+} DST_BLOCK_END;
+#define DST_K_BLKEND_SIZE 9
+
+/* Line number header.  */
+
+typedef struct _DST_LINE_NUM_HEADER
+{
+  DST_HEADER dst_a_line_num_header;
+} DST_LINE_NUM_HEADER;
+#define DST_K_LINE_NUM_HEADER_SIZE 4
+
+/* PC to Line number correlation.  */
+
+typedef struct _DST_PCLINE_COMMANDS
+{
+  char dst_b_pcline_command;
+  union
+    {
+      unsigned int dst_l_pcline_unslong;
+      unsigned short int dst_w_pcline_unsword;
+      unsigned char dst_b_pcline_unsbyte;
+    } dst_a_pcline_access_fields;
+} DST_PCLINE_COMMANDS;
+
+/* PC and Line number correlation codes.  */
+
+#define DST_K_PCLINE_COMMANDS_SIZE 5
+#define DST_K_PCLINE_COMMANDS_SIZE_MIN 2
+#define DST_K_PCLINE_COMMANDS_SIZE_MAX 5
+#define DST_K_DELTA_PC_LOW -128
+#define DST_K_DELTA_PC_HIGH 0
+#define DST_K_DELTA_PC_W 1
+#define DST_K_INCR_LINUM 2
+#define DST_K_INCR_LINUM_W 3
+#define DST_K_SET_LINUM 9
+#define DST_K_SET_ABS_PC 16
+#define DST_K_DELTA_PC_L 17
+#define DST_K_INCR_LINUM_L 18
+#define DST_K_SET_LINUM_B 19
+#define DST_K_SET_LINUM_L 20
+
+/* Source file correlation header.  */
+
+typedef struct _DST_SOURCE_CORR
+{
+  DST_HEADER dst_a_source_corr_header;
+} DST_SOURCE_CORR;
+#define DST_K_SOURCE_CORR_HEADER_SIZE 4
+
+/* Source file correlation codes.  */
+
+#define DST_K_SRC_DECLFILE 1
+#define DST_K_SRC_SETFILE 2
+#define DST_K_SRC_SETREC_L 3
+#define DST_K_SRC_SETREC_W 4
+#define DST_K_SRC_SETLNUM_L 5
+#define DST_K_SRC_SETLNUM_W 6
+#define DST_K_SRC_INCRLNUM_B 7
+#define DST_K_SRC_DEFLINES_W 10
+#define DST_K_SRC_DEFLINES_B 11
+#define DST_K_SRC_FORMFEED 16
+#define DST_K_SRC_MIN_CMD 1
+#define DST_K_SRC_MAX_CMD 16
+
+/* Source file header.  */
+
+typedef struct _DST_SRC_COMMAND
+{
+  unsigned char dst_b_src_command;
+  union
+    {
+      struct
+	{
+	  unsigned char dst_b_src_df_length;
+	  unsigned char dst_b_src_df_flags;
+	  unsigned short int dst_w_src_df_fileid;
+	  int64_t dst_q_src_df_rms_cdt;
+	  unsigned int dst_l_src_df_rms_ebk;
+	  unsigned short int dst_w_src_df_rms_ffb;
+	  unsigned char dst_b_src_df_rms_rfo;
+	  unsigned char dst_b_src_df_filename;
+	} dst_a_src_decl_src;
+      unsigned int dst_l_src_unslong;
+      unsigned short int dst_w_src_unsword;
+      unsigned char dst_b_src_unsbyte;
+    } dst_a_src_cmd_fields;
+} DST_SRC_COMMAND;
+#define DST_K_SRC_COMMAND_SIZE 21
+
+/* Source file trailer.  */
+
+typedef struct _DST_SRC_CMDTRLR
+{
+  unsigned char dst_b_src_df_libmodname;
+} DST_SRC_CMDTRLR;
+#define DST_K_SRC_CMDTRLR_SIZE 1
+
+/* Prolog header.  */
+
+typedef struct _DST_PROLOG
+{
+  DST_HEADER dst_a_prolog_header;
+  unsigned int dst_l_prolog_bkpt_addr;
+} DST_PROLOG;
+#define DST_K_PROLOG_SIZE 8
+
+#endif /* GCC_VMSDBG_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/vr-values.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/vr-values.h
new file mode 100644
index 0000000..bd67f73
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/vr-values.h
@@ -0,0 +1,145 @@
+/* Support routines for Value Range Propagation (VRP).
+   Copyright (C) 2016-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_VR_VALUES_H
+#define GCC_VR_VALUES_H
+
+/* The VR_VALUES class holds the current view of range information
+   for all the SSA_NAMEs in the IL.
+
+   It can be used to hold context sensitive range information during
+   a dominator walk or it may be used to hold range information in the
+   standard VRP pass as ranges are propagated through the lattice to a
+   steady state.
+
+   This information is independent of the range information that gets
+   attached to SSA_NAMEs.  A pass such as VRP may choose to transfer
+   the global information it produces into global range information that
+   gets attached to an SSA_NAME.  It's unclear how useful that global
+   information will be in a world where we can compute context sensitive
+   range information fast or perform on-demand queries.  */
+class vr_values
+{
+ public:
+  vr_values (void);
+  ~vr_values (void);
+
+  value_range *get_value_range (const_tree);
+
+  void set_vr_value (tree, value_range *);
+  void set_defs_to_varying (gimple *);
+  bool update_value_range (const_tree, value_range *);
+  tree op_with_constant_singleton_value_range (tree);
+  void adjust_range_with_scev (value_range *, struct loop *, gimple *, tree);
+  tree vrp_evaluate_conditional (tree_code, tree, tree, gimple *);
+  void dump_all_value_ranges (FILE *);
+
+  void extract_range_for_var_from_comparison_expr (tree, enum tree_code,
+						   tree, tree, value_range *);
+  void extract_range_from_phi_node (gphi *, value_range *);
+  void extract_range_basic (value_range *, gimple *);
+  void extract_range_from_stmt (gimple *, edge *, tree *, value_range *);
+
+  void vrp_visit_cond_stmt (gcond *, edge *);
+
+  void simplify_cond_using_ranges_2 (gcond *);
+  bool simplify_stmt_using_ranges (gimple_stmt_iterator *);
+
+  /* Indicate that propagation through the lattice is complete.  */
+  void set_lattice_propagation_complete (void) { values_propagated = true; }
+
+  /* Allocate a new value_range object.  */
+  value_range *allocate_value_range (void)
+    { return vrp_value_range_pool.allocate (); }
+
+  /* */
+  void cleanup_edges_and_switches (void);
+
+ private:
+  bool vrp_stmt_computes_nonzero (gimple *);
+  bool op_with_boolean_value_range_p (tree);
+  bool check_for_binary_op_overflow (enum tree_code, tree, tree, tree, bool *);
+  value_range *get_vr_for_comparison (int, value_range *);
+  tree compare_name_with_value (enum tree_code, tree, tree, bool *, bool);
+  tree compare_names (enum tree_code, tree, tree, bool *);
+  bool two_valued_val_range_p (tree, tree *, tree *);
+  tree vrp_evaluate_conditional_warnv_with_ops_using_ranges (enum tree_code,
+							     tree, tree,
+							     bool *);
+  tree vrp_evaluate_conditional_warnv_with_ops (enum tree_code,
+						tree, tree, bool,
+						bool *, bool *);
+  void extract_range_from_assignment (value_range *, gassign *);
+  void extract_range_from_assert (value_range *, tree);
+  void extract_range_from_ssa_name (value_range *, tree);
+  void extract_range_from_binary_expr (value_range *, enum tree_code,
+				       tree, tree, tree);
+  void extract_range_from_unary_expr (value_range *, enum tree_code,
+				      tree, tree);
+  void extract_range_from_cond_expr (value_range *, gassign *);
+  void extract_range_from_comparison (value_range *, enum tree_code,
+				      tree, tree, tree);
+  void vrp_visit_assignment_or_call (gimple*, tree *, value_range *);
+  void vrp_visit_switch_stmt (gswitch *, edge *);
+  bool simplify_truth_ops_using_ranges (gimple_stmt_iterator *, gimple *);
+  bool simplify_div_or_mod_using_ranges (gimple_stmt_iterator *, gimple *);
+  bool simplify_abs_using_ranges (gimple_stmt_iterator *, gimple *);
+  bool simplify_bit_ops_using_ranges (gimple_stmt_iterator *, gimple *);
+  bool simplify_min_or_max_using_ranges (gimple_stmt_iterator *, gimple *);
+  bool simplify_cond_using_ranges_1 (gcond *);
+  bool simplify_switch_using_ranges (gswitch *);
+  bool simplify_float_conversion_using_ranges (gimple_stmt_iterator *,
+					       gimple *);
+  bool simplify_internal_call_using_ranges (gimple_stmt_iterator *, gimple *);
+
+  /* Allocation pools for value_range objects.  */
+  object_allocator<value_range> vrp_value_range_pool;
+
+  /* This probably belongs in the lattice rather than in here.  */
+  bool values_propagated;
+
+  /* Allocations for equivalences all come from this obstack.  */
+  bitmap_obstack vrp_equiv_obstack;
+
+  /* Value range array.  After propagation, VR_VALUE[I] holds the range
+     of values that SSA name N_I may take.  */
+  unsigned int num_vr_values;
+  value_range **vr_value;
+
+  /* For a PHI node which sets SSA name N_I, VR_COUNTS[I] holds the
+     number of executable edges we saw the last time we visited the
+     node.  */
+  int *vr_phi_edge_counts;
+
+  /* Vectors of edges that need removing and switch statements that
+     need updating.  It is expected that a pass using the simplification
+     routines will, at the end of the pass, clean up the edges and
+     switch statements.  The class dtor will try to detect cases
+     that do not follow that expectation.  */
+  struct switch_update {
+    gswitch *stmt;
+    tree vec;
+  };
+
+  vec<edge> to_remove_edges;
+  vec<switch_update> to_update_switch_stmts;
+};
+
+extern tree get_output_for_vrp (gimple *);
+#endif /* GCC_VR_VALUES_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/vtable-verify.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/vtable-verify.h
new file mode 100644
index 0000000..9020c9e
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/vtable-verify.h
@@ -0,0 +1,143 @@
+/* Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Virtual Table Pointer Security.  */
+
+#ifndef VTABLE_VERIFY_H
+#define VTABLE_VERIFY_H
+
+#include "sbitmap.h"
+
+/* The function decl used to create calls to __VLTVtableVerify.  It must
+   be global because it needs to be initialized in the C++ front end, but
+   used in the middle end (in the vtable verification pass).  */
+
+extern tree verify_vtbl_ptr_fndecl;
+
+/* Global variable keeping track of how many vtable map variables we
+   have created. */
+extern unsigned num_vtable_map_nodes;
+
+/* Keep track of how many virtual calls we are actually verifying.  */
+extern int total_num_virtual_calls;
+extern int total_num_verified_vcalls;
+
+/* Each vtable map variable corresponds to a virtual class.  Each
+   vtable map variable has a hash table associated with it, that keeps
+   track of the vtable pointers for which we have generated a call to
+   __VLTRegisterPair (with the current vtable map variable).  This is
+   the hash table node that is used for each entry in this hash table
+   of vtable pointers.
+
+   Sometimes there are multiple valid vtable pointer entries that use
+   the same vtable pointer decl with different offsets.  Therefore,
+   for each vtable pointer in the hash table, there is also an array
+   of offsets used with that vtable. */
+
+struct vtable_registration
+{
+  tree vtable_decl;            /* The var decl of the vtable.               */
+  vec<unsigned> offsets;       /* The offsets array.                        */
+};
+
+struct registration_hasher : nofree_ptr_hash <struct vtable_registration>
+{
+  static inline hashval_t hash (const vtable_registration *);
+  static inline bool equal (const vtable_registration *,
+			    const vtable_registration *);
+};
+
+typedef hash_table<registration_hasher> register_table_type;
+typedef register_table_type::iterator registration_iterator_type;
+
+/*  This struct is used to represent the class hierarchy information
+    that we need.  Each vtable map variable has an associated class
+    hierarchy node (struct vtv_graph_node).  Note: In this struct,
+    'children' means immediate descendants in the class hierarchy;
+    'descendant' means any descendant however many levels deep. */
+
+struct vtv_graph_node {
+  tree class_type;                  /* The record_type of the class.        */
+  unsigned class_uid;               /* A unique, monotonically
+                                       ascending id for class node.
+                                       Each vtable map node also has
+                                       an id.  The class uid is the
+                                       same as the vtable map node id
+                                       for nodes corresponding to the
+                                       same class.                          */
+  unsigned num_processed_children;  /* # of children for whom we have
+                                       computed the class hierarchy
+                                       transitive closure.                  */
+  vec<struct vtv_graph_node *> parents;  /* Vector of parents in the graph. */
+  vec<struct vtv_graph_node *> children; /* Vector of children in the graph.*/
+  sbitmap descendants;              /* Bitmap representing all this node's
+                                       descendants in the graph.            */
+};
+
+/* This is the node used for our hashtable of vtable map variable
+   information.  When we create a vtable map variable (var decl) we
+   put it into one of these nodes; create a corresponding
+   vtv_graph_node for our class hierarchy info and store that in this
+   node; generate a unique (monotonically ascending) id for both the
+   vtbl_map_node and the vtv_graph_node; and insert the node into two
+   data structures (to make it easy to find in several different
+   ways): 1). A hash table ("vtbl_map_hash" in vtable-verify.c).
+   This gives us an easy way to check to see if we already have a node
+   for the vtable map variable or not; and 2). An array (vector) of
+   vtbl_map_nodes, where the array index corresponds to the unique id
+   of the vtbl_map_node, which gives us an easy way to use bitmaps to
+   represent and find the vtable map nodes.  */
+
+struct vtbl_map_node {
+  tree vtbl_map_decl;                 /* The var decl for the vtable map
+                                         variable.                          */
+  tree class_name;                    /* The DECL_ASSEMBLER_NAME of the
+                                         class.                             */
+  struct vtv_graph_node *class_info;  /* Our class hierarchy info for the
+                                         class.                             */
+  unsigned uid;                       /* The unique id for the vtable map
+                                         variable.                          */
+  struct vtbl_map_node *next, *prev;  /* Pointers for the linked list
+                                         structure.                         */
+  register_table_type *registered;     /* Hashtable of vtable pointers for which
+                                         we have generated a _VLTRegisterPair
+                                         call with this vtable map variable. */
+  bool is_used;          /* Boolean indicating if we used this vtable map
+                            variable in a call to __VLTVerifyVtablePointer. */
+};
+
+/* Controls debugging for vtable verification.  */
+extern bool vtv_debug;
+
+/* The global vector of vtbl_map_nodes.  */
+extern vec<struct vtbl_map_node *> vtbl_map_nodes_vec;
+
+/*  The global vectors for mangled class names for anonymous classes.  */
+extern GTY(()) vec<tree, va_gc> *vtbl_mangled_name_types;
+extern GTY(()) vec<tree, va_gc> *vtbl_mangled_name_ids;
+
+extern void vtbl_register_mangled_name (tree, tree);
+extern struct vtbl_map_node *vtbl_map_get_node (tree);
+extern struct vtbl_map_node *find_or_create_vtbl_map_node (tree);
+extern void vtbl_map_node_class_insert (struct vtbl_map_node *, unsigned);
+extern bool vtbl_map_node_registration_find (struct vtbl_map_node *,
+                                             tree, unsigned);
+extern bool vtbl_map_node_registration_insert (struct vtbl_map_node *,
+                                               tree, unsigned);
+
+#endif /* VTABLE_VERIFY_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/wide-int-bitmask.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/wide-int-bitmask.h
new file mode 100644
index 0000000..529756f
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/wide-int-bitmask.h
@@ -0,0 +1,145 @@
+/* Operation with 128 bit bitmask.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_WIDE_INT_BITMASK_H
+#define GCC_WIDE_INT_BITMASK_H
+
+struct wide_int_bitmask
+{
+  inline wide_int_bitmask ();
+  inline wide_int_bitmask (uint64_t l);
+  inline wide_int_bitmask (uint64_t l, uint64_t h);
+  inline wide_int_bitmask &operator &= (wide_int_bitmask);
+  inline wide_int_bitmask &operator |= (wide_int_bitmask);
+  inline wide_int_bitmask operator ~ () const;
+  inline wide_int_bitmask operator & (wide_int_bitmask) const;
+  inline wide_int_bitmask operator | (wide_int_bitmask) const;
+  inline wide_int_bitmask operator >> (int);
+  inline wide_int_bitmask operator << (int);
+  inline bool operator == (wide_int_bitmask) const;
+  inline bool operator != (wide_int_bitmask) const;
+  uint64_t low, high;
+};
+
+inline
+wide_int_bitmask::wide_int_bitmask ()
+: low (0), high (0)
+{
+}
+
+inline
+wide_int_bitmask::wide_int_bitmask (uint64_t l)
+: low (l), high (0)
+{
+}
+
+inline
+wide_int_bitmask::wide_int_bitmask (uint64_t l, uint64_t h)
+: low (l), high (h)
+{
+}
+
+inline wide_int_bitmask &
+wide_int_bitmask::operator &= (wide_int_bitmask b)
+{
+  low &= b.low;
+  high &= b.high;
+  return *this;
+}
+
+inline wide_int_bitmask &
+wide_int_bitmask::operator |= (wide_int_bitmask b)
+{
+  low |= b.low;
+  high |= b.high;
+  return *this;
+}
+
+inline wide_int_bitmask
+wide_int_bitmask::operator ~ () const
+{
+  wide_int_bitmask ret (~low, ~high);
+  return ret;
+}
+
+inline wide_int_bitmask
+wide_int_bitmask::operator | (wide_int_bitmask b) const
+{
+  wide_int_bitmask ret (low | b.low, high | b.high);
+  return ret;
+}
+
+inline wide_int_bitmask
+wide_int_bitmask::operator & (wide_int_bitmask b) const
+{
+  wide_int_bitmask ret (low & b.low, high & b.high);
+  return ret;
+}
+
+inline wide_int_bitmask
+wide_int_bitmask::operator << (int amount)
+{
+  wide_int_bitmask ret;
+  if (amount >= 64)
+    {
+      ret.low = 0;
+      ret.high = low << (amount - 64);
+    }
+  else if (amount == 0)
+    ret = *this;
+  else
+    {
+      ret.low = low << amount;
+      ret.high = (low >> (64 - amount)) | (high << amount);
+    }
+  return ret;
+}
+
+inline wide_int_bitmask
+wide_int_bitmask::operator >> (int amount)
+{
+  wide_int_bitmask ret;
+  if (amount >= 64)
+    {
+      ret.low = high >> (amount - 64);
+      ret.high = 0;
+    }
+  else if (amount == 0)
+    ret = *this;
+  else
+    {
+      ret.low = (high << (64 - amount)) | (low >> amount);
+      ret.high = high >> amount;
+    }
+  return ret;
+}
+
+inline bool
+wide_int_bitmask::operator == (wide_int_bitmask b) const
+{
+  return low == b.low && high == b.high;
+}
+
+inline bool
+wide_int_bitmask::operator != (wide_int_bitmask b) const
+{
+  return low != b.low || high != b.high;
+}
+
+#endif /* ! GCC_WIDE_INT_BITMASK_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/wide-int-print.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/wide-int-print.h
new file mode 100644
index 0000000..385915b
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/wide-int-print.h
@@ -0,0 +1,38 @@
+/* Print wide integers.
+   Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef WIDE_INT_PRINT_H
+#define WIDE_INT_PRINT_H
+
+#include <stdio.h>
+
+#define WIDE_INT_PRINT_BUFFER_SIZE (WIDE_INT_MAX_PRECISION / 4 + 4)
+
+/* Printing functions.  */
+
+extern void print_dec (const wide_int_ref &wi, char *buf, signop sgn);
+extern void print_dec (const wide_int_ref &wi, FILE *file, signop sgn);
+extern void print_decs (const wide_int_ref &wi, char *buf);
+extern void print_decs (const wide_int_ref &wi, FILE *file);
+extern void print_decu (const wide_int_ref &wi, char *buf);
+extern void print_decu (const wide_int_ref &wi, FILE *file);
+extern void print_hex (const wide_int_ref &wi, char *buf);
+extern void print_hex (const wide_int_ref &wi, FILE *file);
+
+#endif /* WIDE_INT_PRINT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/wide-int-range.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/wide-int-range.h
new file mode 100644
index 0000000..fc9af72
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/wide-int-range.h
@@ -0,0 +1,188 @@
+/* Support routines for range operations on wide ints.
+   Copyright (C) 2018-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3, or (at your option)
+any later version.
+
+GCC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_WIDE_INT_RANGE_H
+#define GCC_WIDE_INT_RANGE_H
+
+extern bool wide_int_range_cross_product (wide_int &res_lb, wide_int &res_ub,
+					  enum tree_code code, signop sign,
+					  const wide_int &, const wide_int &,
+					  const wide_int &, const wide_int &,
+					  bool overflow_undefined);
+extern bool wide_int_range_mult_wrapping (wide_int &res_lb,
+					  wide_int &res_ub,
+					  signop sign,
+					  unsigned prec,
+					  const wide_int &min0_,
+					  const wide_int &max0_,
+					  const wide_int &min1_,
+					  const wide_int &max1_);
+extern bool wide_int_range_multiplicative_op (wide_int &res_lb,
+					      wide_int &res_ub,
+					      enum tree_code code,
+					      signop sign,
+					      unsigned prec,
+					      const wide_int &vr0_lb,
+					      const wide_int &vr0_ub,
+					      const wide_int &vr1_lb,
+					      const wide_int &vr1_ub,
+					      bool overflow_undefined);
+extern bool wide_int_range_lshift (wide_int &res_lb, wide_int &res_ub,
+				   signop sign, unsigned prec,
+				   const wide_int &, const wide_int &,
+				   const wide_int &, const wide_int &,
+				   bool overflow_undefined);
+extern void wide_int_range_set_zero_nonzero_bits (signop,
+						  const wide_int &lb,
+						  const wide_int &ub,
+						  wide_int &may_be_nonzero,
+						  wide_int &must_be_nonzero);
+extern bool wide_int_range_optimize_bit_op (wide_int &res_lb, wide_int &res_ub,
+					    enum tree_code code,
+					    signop sign,
+					    const wide_int &vr0_lb,
+					    const wide_int &vr0_ub,
+					    const wide_int &vr1_lb,
+					    const wide_int &vr1_ub);
+extern bool wide_int_range_get_mask_and_bounds (wide_int &mask,
+						wide_int &lower_bound,
+						wide_int &upper_bound,
+						const wide_int &vr0_min,
+						const wide_int &vr0_max,
+						const wide_int &vr1_min,
+						const wide_int &vr1_max);
+extern bool wide_int_range_bit_xor (wide_int &wmin, wide_int &wmax,
+				    signop sign,
+				    unsigned prec,
+				    const wide_int &must_be_nonzero0,
+				    const wide_int &may_be_nonzero0,
+				    const wide_int &must_be_nonzero1,
+				    const wide_int &may_be_nonzero1);
+extern bool wide_int_range_bit_ior (wide_int &wmin, wide_int &wmax,
+				    signop sign,
+				    const wide_int &vr0_min,
+				    const wide_int &vr0_max,
+				    const wide_int &vr1_min,
+				    const wide_int &vr1_max,
+				    const wide_int &must_be_nonzero0,
+				    const wide_int &may_be_nonzero0,
+				    const wide_int &must_be_nonzero1,
+				    const wide_int &may_be_nonzero1);
+extern bool wide_int_range_bit_and (wide_int &wmin, wide_int &wmax,
+				    signop sign,
+				    unsigned prec,
+				    const wide_int &vr0_min,
+				    const wide_int &vr0_max,
+				    const wide_int &vr1_min,
+				    const wide_int &vr1_max,
+				    const wide_int &must_be_nonzero0,
+				    const wide_int &may_be_nonzero0,
+				    const wide_int &must_be_nonzero1,
+				    const wide_int &may_be_nonzero1);
+extern void wide_int_range_trunc_mod (wide_int &wmin, wide_int &wmax,
+				      signop sign,
+				      unsigned prec,
+				      const wide_int &vr0_min,
+				      const wide_int &vr0_max,
+				      const wide_int &vr1_min,
+				      const wide_int &vr1_max);
+extern bool wide_int_range_abs (wide_int &min, wide_int &max,
+				signop sign, unsigned prec,
+				const wide_int &vr0_min,
+				const wide_int &vr0_max,
+				bool overflow_undefined);
+extern void wide_int_range_absu (wide_int &min, wide_int &max,
+				 unsigned prec,
+				 const wide_int &vr0_min,
+				 const wide_int &vr0_max);
+extern bool wide_int_range_convert (wide_int &min, wide_int &max,
+				    signop inner_sign,
+				    unsigned inner_prec,
+				    signop outer_sign,
+				    unsigned outer_prec,
+				    const wide_int &vr0_min,
+				    const wide_int &vr0_max);
+extern bool wide_int_range_div (wide_int &wmin, wide_int &wmax,
+				enum tree_code code,
+				signop sign, unsigned prec,
+				const wide_int &dividend_min,
+				const wide_int &dividend_max,
+				const wide_int &divisor_min,
+				const wide_int &divisor_max,
+				bool overflow_undefined,
+				bool &extra_range_p,
+				wide_int &extra_min, wide_int &extra_max);
+
+/* Return TRUE if shifting by range [MIN, MAX] is undefined behavior,
+   interpreting MIN and MAX according to SIGN.  */
+
+inline bool
+wide_int_range_shift_undefined_p (signop sign, unsigned prec,
+				  const wide_int &min, const wide_int &max)
+{
+  /* ?? Note: The original comment said this only applied to
+     RSHIFT_EXPR, but it was being applied to both left and right
+     shifts.  */
+
+  /* Shifting by any values outside [0..prec-1], gets undefined
+     behavior from the shift operation.  We cannot even trust
+     SHIFT_COUNT_TRUNCATED at this stage, because that applies to rtl
+     shifts, and the operation at the tree level may be widened.  */
+  return wi::lt_p (min, 0, sign) || wi::ge_p (max, prec, sign);
+}
+
+/* Calculate MIN/MAX_EXPR of two ranges and store the result in [MIN, MAX].  */
+
+inline bool
+wide_int_range_min_max (wide_int &min, wide_int &max,
+			tree_code code,
+			signop sign, unsigned prec,
+			const wide_int &vr0_min, const wide_int &vr0_max,
+			const wide_int &vr1_min, const wide_int &vr1_max)
+{
+  wi::overflow_type overflow;
+  wide_int_binop (min, code, vr0_min, vr1_min, sign, &overflow);
+  wide_int_binop (max, code, vr0_max, vr1_max, sign, &overflow);
+  /* If the new range covers the entire domain, that's really no range
+     at all.  */
+  if (min == wi::min_value (prec, sign)
+      && max == wi::max_value (prec, sign))
+    return false;
+  return true;
+}
+
+/* Return TRUE if 0 is within [WMIN, WMAX].  */
+
+inline bool
+wide_int_range_includes_zero_p (const wide_int &wmin, const wide_int &wmax,
+				signop sign)
+{
+  return wi::le_p (wmin, 0, sign) && wi::ge_p (wmax, 0, sign);
+}
+
+/* Return TRUE if [WMIN, WMAX] is the singleton 0.  */
+
+inline bool
+wide_int_range_zero_p (const wide_int &wmin, const wide_int &wmax,
+		       unsigned prec)
+{
+  return wmin == wmax && wi::eq_p (wmin, wi::zero (prec));
+}
+
+#endif /* GCC_WIDE_INT_RANGE_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/wide-int.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/wide-int.h
new file mode 100644
index 0000000..25ea054
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/wide-int.h
@@ -0,0 +1,3469 @@
+/* Operations with very long integers.  -*- C++ -*-
+   Copyright (C) 2012-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 3, or (at your option) any
+later version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef WIDE_INT_H
+#define WIDE_INT_H
+
+/* wide-int.[cc|h] implements a class that efficiently performs
+   mathematical operations on finite precision integers.  wide_ints
+   are designed to be transient - they are not for long term storage
+   of values.  There is tight integration between wide_ints and the
+   other longer storage GCC representations (rtl and tree).
+
+   The actual precision of a wide_int depends on the flavor.  There
+   are three predefined flavors:
+
+     1) wide_int (the default).  This flavor does the math in the
+     precision of its input arguments.  It is assumed (and checked)
+     that the precisions of the operands and results are consistent.
+     This is the most efficient flavor.  It is not possible to examine
+     bits above the precision that has been specified.  Because of
+     this, the default flavor has semantics that are simple to
+     understand and in general model the underlying hardware that the
+     compiler is targetted for.
+
+     This flavor must be used at the RTL level of gcc because there
+     is, in general, not enough information in the RTL representation
+     to extend a value beyond the precision specified in the mode.
+
+     This flavor should also be used at the TREE and GIMPLE levels of
+     the compiler except for the circumstances described in the
+     descriptions of the other two flavors.
+
+     The default wide_int representation does not contain any
+     information inherent about signedness of the represented value,
+     so it can be used to represent both signed and unsigned numbers.
+     For operations where the results depend on signedness (full width
+     multiply, division, shifts, comparisons, and operations that need
+     overflow detected), the signedness must be specified separately.
+
+     2) offset_int.  This is a fixed-precision integer that can hold
+     any address offset, measured in either bits or bytes, with at
+     least one extra sign bit.  At the moment the maximum address
+     size GCC supports is 64 bits.  With 8-bit bytes and an extra
+     sign bit, offset_int therefore needs to have at least 68 bits
+     of precision.  We round this up to 128 bits for efficiency.
+     Values of type T are converted to this precision by sign- or
+     zero-extending them based on the signedness of T.
+
+     The extra sign bit means that offset_int is effectively a signed
+     128-bit integer, i.e. it behaves like int128_t.
+
+     Since the values are logically signed, there is no need to
+     distinguish between signed and unsigned operations.  Sign-sensitive
+     comparison operators <, <=, > and >= are therefore supported.
+     Shift operators << and >> are also supported, with >> being
+     an _arithmetic_ right shift.
+
+     [ Note that, even though offset_int is effectively int128_t,
+       it can still be useful to use unsigned comparisons like
+       wi::leu_p (a, b) as a more efficient short-hand for
+       "a >= 0 && a <= b". ]
+
+     3) widest_int.  This representation is an approximation of
+     infinite precision math.  However, it is not really infinite
+     precision math as in the GMP library.  It is really finite
+     precision math where the precision is 4 times the size of the
+     largest integer that the target port can represent.
+
+     Like offset_int, widest_int is wider than all the values that
+     it needs to represent, so the integers are logically signed.
+     Sign-sensitive comparison operators <, <=, > and >= are supported,
+     as are << and >>.
+
+     There are several places in the GCC where this should/must be used:
+
+     * Code that does induction variable optimizations.  This code
+       works with induction variables of many different types at the
+       same time.  Because of this, it ends up doing many different
+       calculations where the operands are not compatible types.  The
+       widest_int makes this easy, because it provides a field where
+       nothing is lost when converting from any variable,
+
+     * There are a small number of passes that currently use the
+       widest_int that should use the default.  These should be
+       changed.
+
+   There are surprising features of offset_int and widest_int
+   that the users should be careful about:
+
+     1) Shifts and rotations are just weird.  You have to specify a
+     precision in which the shift or rotate is to happen in.  The bits
+     above this precision are zeroed.  While this is what you
+     want, it is clearly non obvious.
+
+     2) Larger precision math sometimes does not produce the same
+     answer as would be expected for doing the math at the proper
+     precision.  In particular, a multiply followed by a divide will
+     produce a different answer if the first product is larger than
+     what can be represented in the input precision.
+
+   The offset_int and the widest_int flavors are more expensive
+   than the default wide int, so in addition to the caveats with these
+   two, the default is the prefered representation.
+
+   All three flavors of wide_int are represented as a vector of
+   HOST_WIDE_INTs.  The default and widest_int vectors contain enough elements
+   to hold a value of MAX_BITSIZE_MODE_ANY_INT bits.  offset_int contains only
+   enough elements to hold ADDR_MAX_PRECISION bits.  The values are stored
+   in the vector with the least significant HOST_BITS_PER_WIDE_INT bits
+   in element 0.
+
+   The default wide_int contains three fields: the vector (VAL),
+   the precision and a length (LEN).  The length is the number of HWIs
+   needed to represent the value.  widest_int and offset_int have a
+   constant precision that cannot be changed, so they only store the
+   VAL and LEN fields.
+
+   Since most integers used in a compiler are small values, it is
+   generally profitable to use a representation of the value that is
+   as small as possible.  LEN is used to indicate the number of
+   elements of the vector that are in use.  The numbers are stored as
+   sign extended numbers as a means of compression.  Leading
+   HOST_WIDE_INTs that contain strings of either -1 or 0 are removed
+   as long as they can be reconstructed from the top bit that is being
+   represented.
+
+   The precision and length of a wide_int are always greater than 0.
+   Any bits in a wide_int above the precision are sign-extended from the
+   most significant bit.  For example, a 4-bit value 0x8 is represented as
+   VAL = { 0xf...fff8 }.  However, as an optimization, we allow other integer
+   constants to be represented with undefined bits above the precision.
+   This allows INTEGER_CSTs to be pre-extended according to TYPE_SIGN,
+   so that the INTEGER_CST representation can be used both in TYPE_PRECISION
+   and in wider precisions.
+
+   There are constructors to create the various forms of wide_int from
+   trees, rtl and constants.  For trees the options are:
+
+	     tree t = ...;
+	     wi::to_wide (t)     // Treat T as a wide_int
+	     wi::to_offset (t)   // Treat T as an offset_int
+	     wi::to_widest (t)   // Treat T as a widest_int
+
+   All three are light-weight accessors that should have no overhead
+   in release builds.  If it is useful for readability reasons to
+   store the result in a temporary variable, the preferred method is:
+
+	     wi::tree_to_wide_ref twide = wi::to_wide (t);
+	     wi::tree_to_offset_ref toffset = wi::to_offset (t);
+	     wi::tree_to_widest_ref twidest = wi::to_widest (t);
+
+   To make an rtx into a wide_int, you have to pair it with a mode.
+   The canonical way to do this is with rtx_mode_t as in:
+
+	     rtx r = ...
+	     wide_int x = rtx_mode_t (r, mode);
+
+   Similarly, a wide_int can only be constructed from a host value if
+   the target precision is given explicitly, such as in:
+
+	     wide_int x = wi::shwi (c, prec); // sign-extend C if necessary
+	     wide_int y = wi::uhwi (c, prec); // zero-extend C if necessary
+
+   However, offset_int and widest_int have an inherent precision and so
+   can be initialized directly from a host value:
+
+	     offset_int x = (int) c;          // sign-extend C
+	     widest_int x = (unsigned int) c; // zero-extend C
+
+   It is also possible to do arithmetic directly on rtx_mode_ts and
+   constants.  For example:
+
+	     wi::add (r1, r2);    // add equal-sized rtx_mode_ts r1 and r2
+	     wi::add (r1, 1);     // add 1 to rtx_mode_t r1
+	     wi::lshift (1, 100); // 1 << 100 as a widest_int
+
+   Many binary operations place restrictions on the combinations of inputs,
+   using the following rules:
+
+   - {rtx, wide_int} op {rtx, wide_int} -> wide_int
+       The inputs must be the same precision.  The result is a wide_int
+       of the same precision
+
+   - {rtx, wide_int} op (un)signed HOST_WIDE_INT -> wide_int
+     (un)signed HOST_WIDE_INT op {rtx, wide_int} -> wide_int
+       The HOST_WIDE_INT is extended or truncated to the precision of
+       the other input.  The result is a wide_int of the same precision
+       as that input.
+
+   - (un)signed HOST_WIDE_INT op (un)signed HOST_WIDE_INT -> widest_int
+       The inputs are extended to widest_int precision and produce a
+       widest_int result.
+
+   - offset_int op offset_int -> offset_int
+     offset_int op (un)signed HOST_WIDE_INT -> offset_int
+     (un)signed HOST_WIDE_INT op offset_int -> offset_int
+
+   - widest_int op widest_int -> widest_int
+     widest_int op (un)signed HOST_WIDE_INT -> widest_int
+     (un)signed HOST_WIDE_INT op widest_int -> widest_int
+
+   Other combinations like:
+
+   - widest_int op offset_int and
+   - wide_int op offset_int
+
+   are not allowed.  The inputs should instead be extended or truncated
+   so that they match.
+
+   The inputs to comparison functions like wi::eq_p and wi::lts_p
+   follow the same compatibility rules, although their return types
+   are different.  Unary functions on X produce the same result as
+   a binary operation X + X.  Shift functions X op Y also produce
+   the same result as X + X; the precision of the shift amount Y
+   can be arbitrarily different from X.  */
+
+/* The MAX_BITSIZE_MODE_ANY_INT is automatically generated by a very
+   early examination of the target's mode file.  The WIDE_INT_MAX_ELTS
+   can accomodate at least 1 more bit so that unsigned numbers of that
+   mode can be represented as a signed value.  Note that it is still
+   possible to create fixed_wide_ints that have precisions greater than
+   MAX_BITSIZE_MODE_ANY_INT.  This can be useful when representing a
+   double-width multiplication result, for example.  */
+#define WIDE_INT_MAX_ELTS \
+  ((MAX_BITSIZE_MODE_ANY_INT + HOST_BITS_PER_WIDE_INT) / HOST_BITS_PER_WIDE_INT)
+
+#define WIDE_INT_MAX_PRECISION (WIDE_INT_MAX_ELTS * HOST_BITS_PER_WIDE_INT)
+
+/* This is the max size of any pointer on any machine.  It does not
+   seem to be as easy to sniff this out of the machine description as
+   it is for MAX_BITSIZE_MODE_ANY_INT since targets may support
+   multiple address sizes and may have different address sizes for
+   different address spaces.  However, currently the largest pointer
+   on any platform is 64 bits.  When that changes, then it is likely
+   that a target hook should be defined so that targets can make this
+   value larger for those targets.  */
+#define ADDR_MAX_BITSIZE 64
+
+/* This is the internal precision used when doing any address
+   arithmetic.  The '4' is really 3 + 1.  Three of the bits are for
+   the number of extra bits needed to do bit addresses and the other bit
+   is to allow everything to be signed without loosing any precision.
+   Then everything is rounded up to the next HWI for efficiency.  */
+#define ADDR_MAX_PRECISION \
+  ((ADDR_MAX_BITSIZE + 4 + HOST_BITS_PER_WIDE_INT - 1) \
+   & ~(HOST_BITS_PER_WIDE_INT - 1))
+
+/* The number of HWIs needed to store an offset_int.  */
+#define OFFSET_INT_ELTS (ADDR_MAX_PRECISION / HOST_BITS_PER_WIDE_INT)
+
+/* The type of result produced by a binary operation on types T1 and T2.
+   Defined purely for brevity.  */
+#define WI_BINARY_RESULT(T1, T2) \
+  typename wi::binary_traits <T1, T2>::result_type
+
+/* Likewise for binary operators, which excludes the case in which neither
+   T1 nor T2 is a wide-int-based type.  */
+#define WI_BINARY_OPERATOR_RESULT(T1, T2) \
+  typename wi::binary_traits <T1, T2>::operator_result
+
+/* The type of result produced by T1 << T2.  Leads to substitution failure
+   if the operation isn't supported.  Defined purely for brevity.  */
+#define WI_SIGNED_SHIFT_RESULT(T1, T2) \
+  typename wi::binary_traits <T1, T2>::signed_shift_result_type
+
+/* The type of result produced by a sign-agnostic binary predicate on
+   types T1 and T2.  This is bool if wide-int operations make sense for
+   T1 and T2 and leads to substitution failure otherwise.  */
+#define WI_BINARY_PREDICATE_RESULT(T1, T2) \
+  typename wi::binary_traits <T1, T2>::predicate_result
+
+/* The type of result produced by a signed binary predicate on types T1 and T2.
+   This is bool if signed comparisons make sense for T1 and T2 and leads to
+   substitution failure otherwise.  */
+#define WI_SIGNED_BINARY_PREDICATE_RESULT(T1, T2) \
+  typename wi::binary_traits <T1, T2>::signed_predicate_result
+
+/* The type of result produced by a unary operation on type T.  */
+#define WI_UNARY_RESULT(T) \
+  typename wi::binary_traits <T, T>::result_type
+
+/* Define a variable RESULT to hold the result of a binary operation on
+   X and Y, which have types T1 and T2 respectively.  Define VAL to
+   point to the blocks of RESULT.  Once the user of the macro has
+   filled in VAL, it should call RESULT.set_len to set the number
+   of initialized blocks.  */
+#define WI_BINARY_RESULT_VAR(RESULT, VAL, T1, X, T2, Y) \
+  WI_BINARY_RESULT (T1, T2) RESULT = \
+    wi::int_traits <WI_BINARY_RESULT (T1, T2)>::get_binary_result (X, Y); \
+  HOST_WIDE_INT *VAL = RESULT.write_val ()
+
+/* Similar for the result of a unary operation on X, which has type T.  */
+#define WI_UNARY_RESULT_VAR(RESULT, VAL, T, X) \
+  WI_UNARY_RESULT (T) RESULT = \
+    wi::int_traits <WI_UNARY_RESULT (T)>::get_binary_result (X, X); \
+  HOST_WIDE_INT *VAL = RESULT.write_val ()
+
+template <typename T> class generic_wide_int;
+template <int N> class fixed_wide_int_storage;
+class wide_int_storage;
+
+/* An N-bit integer.  Until we can use typedef templates, use this instead.  */
+#define FIXED_WIDE_INT(N) \
+  generic_wide_int < fixed_wide_int_storage <N> >
+
+typedef generic_wide_int <wide_int_storage> wide_int;
+typedef FIXED_WIDE_INT (ADDR_MAX_PRECISION) offset_int;
+typedef FIXED_WIDE_INT (WIDE_INT_MAX_PRECISION) widest_int;
+/* Spelled out explicitly (rather than through FIXED_WIDE_INT)
+   so as not to confuse gengtype.  */
+typedef generic_wide_int < fixed_wide_int_storage <WIDE_INT_MAX_PRECISION * 2> > widest2_int;
+
+/* wi::storage_ref can be a reference to a primitive type,
+   so this is the conservatively-correct setting.  */
+template <bool SE, bool HDP = true>
+struct wide_int_ref_storage;
+
+typedef generic_wide_int <wide_int_ref_storage <false> > wide_int_ref;
+
+/* This can be used instead of wide_int_ref if the referenced value is
+   known to have type T.  It carries across properties of T's representation,
+   such as whether excess upper bits in a HWI are defined, and can therefore
+   help avoid redundant work.
+
+   The macro could be replaced with a template typedef, once we're able
+   to use those.  */
+#define WIDE_INT_REF_FOR(T) \
+  generic_wide_int \
+    <wide_int_ref_storage <wi::int_traits <T>::is_sign_extended, \
+			   wi::int_traits <T>::host_dependent_precision> >
+
+namespace wi
+{
+  /* Operations that calculate overflow do so even for
+     TYPE_OVERFLOW_WRAPS types.  For example, adding 1 to +MAX_INT in
+     an unsigned int is 0 and does not overflow in C/C++, but wi::add
+     will set the overflow argument in case it's needed for further
+     analysis.
+
+     For operations that require overflow, these are the different
+     types of overflow.  */
+  enum overflow_type {
+    OVF_NONE = 0,
+    OVF_UNDERFLOW = -1,
+    OVF_OVERFLOW = 1,
+    /* There was an overflow, but we are unsure whether it was an
+       overflow or an underflow.  */
+    OVF_UNKNOWN = 2
+  };
+
+  /* Classifies an integer based on its precision.  */
+  enum precision_type {
+    /* The integer has both a precision and defined signedness.  This allows
+       the integer to be converted to any width, since we know whether to fill
+       any extra bits with zeros or signs.  */
+    FLEXIBLE_PRECISION,
+
+    /* The integer has a variable precision but no defined signedness.  */
+    VAR_PRECISION,
+
+    /* The integer has a constant precision (known at GCC compile time)
+       and is signed.  */
+    CONST_PRECISION
+  };
+
+  /* This class, which has no default implementation, is expected to
+     provide the following members:
+
+     static const enum precision_type precision_type;
+       Classifies the type of T.
+
+     static const unsigned int precision;
+       Only defined if precision_type == CONST_PRECISION.  Specifies the
+       precision of all integers of type T.
+
+     static const bool host_dependent_precision;
+       True if the precision of T depends (or can depend) on the host.
+
+     static unsigned int get_precision (const T &x)
+       Return the number of bits in X.
+
+     static wi::storage_ref *decompose (HOST_WIDE_INT *scratch,
+					unsigned int precision, const T &x)
+       Decompose X as a PRECISION-bit integer, returning the associated
+       wi::storage_ref.  SCRATCH is available as scratch space if needed.
+       The routine should assert that PRECISION is acceptable.  */
+  template <typename T> struct int_traits;
+
+  /* This class provides a single type, result_type, which specifies the
+     type of integer produced by a binary operation whose inputs have
+     types T1 and T2.  The definition should be symmetric.  */
+  template <typename T1, typename T2,
+	    enum precision_type P1 = int_traits <T1>::precision_type,
+	    enum precision_type P2 = int_traits <T2>::precision_type>
+  struct binary_traits;
+
+  /* Specify the result type for each supported combination of binary
+     inputs.  Note that CONST_PRECISION and VAR_PRECISION cannot be
+     mixed, in order to give stronger type checking.  When both inputs
+     are CONST_PRECISION, they must have the same precision.  */
+  template <typename T1, typename T2>
+  struct binary_traits <T1, T2, FLEXIBLE_PRECISION, FLEXIBLE_PRECISION>
+  {
+    typedef widest_int result_type;
+    /* Don't define operators for this combination.  */
+  };
+
+  template <typename T1, typename T2>
+  struct binary_traits <T1, T2, FLEXIBLE_PRECISION, VAR_PRECISION>
+  {
+    typedef wide_int result_type;
+    typedef result_type operator_result;
+    typedef bool predicate_result;
+  };
+
+  template <typename T1, typename T2>
+  struct binary_traits <T1, T2, FLEXIBLE_PRECISION, CONST_PRECISION>
+  {
+    /* Spelled out explicitly (rather than through FIXED_WIDE_INT)
+       so as not to confuse gengtype.  */
+    typedef generic_wide_int < fixed_wide_int_storage
+			       <int_traits <T2>::precision> > result_type;
+    typedef result_type operator_result;
+    typedef bool predicate_result;
+    typedef result_type signed_shift_result_type;
+    typedef bool signed_predicate_result;
+  };
+
+  template <typename T1, typename T2>
+  struct binary_traits <T1, T2, VAR_PRECISION, FLEXIBLE_PRECISION>
+  {
+    typedef wide_int result_type;
+    typedef result_type operator_result;
+    typedef bool predicate_result;
+  };
+
+  template <typename T1, typename T2>
+  struct binary_traits <T1, T2, CONST_PRECISION, FLEXIBLE_PRECISION>
+  {
+    /* Spelled out explicitly (rather than through FIXED_WIDE_INT)
+       so as not to confuse gengtype.  */
+    typedef generic_wide_int < fixed_wide_int_storage
+			       <int_traits <T1>::precision> > result_type;
+    typedef result_type operator_result;
+    typedef bool predicate_result;
+    typedef result_type signed_shift_result_type;
+    typedef bool signed_predicate_result;
+  };
+
+  template <typename T1, typename T2>
+  struct binary_traits <T1, T2, CONST_PRECISION, CONST_PRECISION>
+  {
+    STATIC_ASSERT (int_traits <T1>::precision == int_traits <T2>::precision);
+    /* Spelled out explicitly (rather than through FIXED_WIDE_INT)
+       so as not to confuse gengtype.  */
+    typedef generic_wide_int < fixed_wide_int_storage
+			       <int_traits <T1>::precision> > result_type;
+    typedef result_type operator_result;
+    typedef bool predicate_result;
+    typedef result_type signed_shift_result_type;
+    typedef bool signed_predicate_result;
+  };
+
+  template <typename T1, typename T2>
+  struct binary_traits <T1, T2, VAR_PRECISION, VAR_PRECISION>
+  {
+    typedef wide_int result_type;
+    typedef result_type operator_result;
+    typedef bool predicate_result;
+  };
+}
+
+/* Public functions for querying and operating on integers.  */
+namespace wi
+{
+  template <typename T>
+  unsigned int get_precision (const T &);
+
+  template <typename T1, typename T2>
+  unsigned int get_binary_precision (const T1 &, const T2 &);
+
+  template <typename T1, typename T2>
+  void copy (T1 &, const T2 &);
+
+#define UNARY_PREDICATE \
+  template <typename T> bool
+#define UNARY_FUNCTION \
+  template <typename T> WI_UNARY_RESULT (T)
+#define BINARY_PREDICATE \
+  template <typename T1, typename T2> bool
+#define BINARY_FUNCTION \
+  template <typename T1, typename T2> WI_BINARY_RESULT (T1, T2)
+#define SHIFT_FUNCTION \
+  template <typename T1, typename T2> WI_UNARY_RESULT (T1)
+
+  UNARY_PREDICATE fits_shwi_p (const T &);
+  UNARY_PREDICATE fits_uhwi_p (const T &);
+  UNARY_PREDICATE neg_p (const T &, signop = SIGNED);
+
+  template <typename T>
+  HOST_WIDE_INT sign_mask (const T &);
+
+  BINARY_PREDICATE eq_p (const T1 &, const T2 &);
+  BINARY_PREDICATE ne_p (const T1 &, const T2 &);
+  BINARY_PREDICATE lt_p (const T1 &, const T2 &, signop);
+  BINARY_PREDICATE lts_p (const T1 &, const T2 &);
+  BINARY_PREDICATE ltu_p (const T1 &, const T2 &);
+  BINARY_PREDICATE le_p (const T1 &, const T2 &, signop);
+  BINARY_PREDICATE les_p (const T1 &, const T2 &);
+  BINARY_PREDICATE leu_p (const T1 &, const T2 &);
+  BINARY_PREDICATE gt_p (const T1 &, const T2 &, signop);
+  BINARY_PREDICATE gts_p (const T1 &, const T2 &);
+  BINARY_PREDICATE gtu_p (const T1 &, const T2 &);
+  BINARY_PREDICATE ge_p (const T1 &, const T2 &, signop);
+  BINARY_PREDICATE ges_p (const T1 &, const T2 &);
+  BINARY_PREDICATE geu_p (const T1 &, const T2 &);
+
+  template <typename T1, typename T2>
+  int cmp (const T1 &, const T2 &, signop);
+
+  template <typename T1, typename T2>
+  int cmps (const T1 &, const T2 &);
+
+  template <typename T1, typename T2>
+  int cmpu (const T1 &, const T2 &);
+
+  UNARY_FUNCTION bit_not (const T &);
+  UNARY_FUNCTION neg (const T &);
+  UNARY_FUNCTION neg (const T &, overflow_type *);
+  UNARY_FUNCTION abs (const T &);
+  UNARY_FUNCTION ext (const T &, unsigned int, signop);
+  UNARY_FUNCTION sext (const T &, unsigned int);
+  UNARY_FUNCTION zext (const T &, unsigned int);
+  UNARY_FUNCTION set_bit (const T &, unsigned int);
+
+  BINARY_FUNCTION min (const T1 &, const T2 &, signop);
+  BINARY_FUNCTION smin (const T1 &, const T2 &);
+  BINARY_FUNCTION umin (const T1 &, const T2 &);
+  BINARY_FUNCTION max (const T1 &, const T2 &, signop);
+  BINARY_FUNCTION smax (const T1 &, const T2 &);
+  BINARY_FUNCTION umax (const T1 &, const T2 &);
+
+  BINARY_FUNCTION bit_and (const T1 &, const T2 &);
+  BINARY_FUNCTION bit_and_not (const T1 &, const T2 &);
+  BINARY_FUNCTION bit_or (const T1 &, const T2 &);
+  BINARY_FUNCTION bit_or_not (const T1 &, const T2 &);
+  BINARY_FUNCTION bit_xor (const T1 &, const T2 &);
+  BINARY_FUNCTION add (const T1 &, const T2 &);
+  BINARY_FUNCTION add (const T1 &, const T2 &, signop, overflow_type *);
+  BINARY_FUNCTION sub (const T1 &, const T2 &);
+  BINARY_FUNCTION sub (const T1 &, const T2 &, signop, overflow_type *);
+  BINARY_FUNCTION mul (const T1 &, const T2 &);
+  BINARY_FUNCTION mul (const T1 &, const T2 &, signop, overflow_type *);
+  BINARY_FUNCTION smul (const T1 &, const T2 &, overflow_type *);
+  BINARY_FUNCTION umul (const T1 &, const T2 &, overflow_type *);
+  BINARY_FUNCTION mul_high (const T1 &, const T2 &, signop);
+  BINARY_FUNCTION div_trunc (const T1 &, const T2 &, signop,
+			     overflow_type * = 0);
+  BINARY_FUNCTION sdiv_trunc (const T1 &, const T2 &);
+  BINARY_FUNCTION udiv_trunc (const T1 &, const T2 &);
+  BINARY_FUNCTION div_floor (const T1 &, const T2 &, signop,
+			     overflow_type * = 0);
+  BINARY_FUNCTION udiv_floor (const T1 &, const T2 &);
+  BINARY_FUNCTION sdiv_floor (const T1 &, const T2 &);
+  BINARY_FUNCTION div_ceil (const T1 &, const T2 &, signop,
+			    overflow_type * = 0);
+  BINARY_FUNCTION udiv_ceil (const T1 &, const T2 &);
+  BINARY_FUNCTION div_round (const T1 &, const T2 &, signop,
+			     overflow_type * = 0);
+  BINARY_FUNCTION divmod_trunc (const T1 &, const T2 &, signop,
+				WI_BINARY_RESULT (T1, T2) *);
+  BINARY_FUNCTION gcd (const T1 &, const T2 &, signop = UNSIGNED);
+  BINARY_FUNCTION mod_trunc (const T1 &, const T2 &, signop,
+			     overflow_type * = 0);
+  BINARY_FUNCTION smod_trunc (const T1 &, const T2 &);
+  BINARY_FUNCTION umod_trunc (const T1 &, const T2 &);
+  BINARY_FUNCTION mod_floor (const T1 &, const T2 &, signop,
+			     overflow_type * = 0);
+  BINARY_FUNCTION umod_floor (const T1 &, const T2 &);
+  BINARY_FUNCTION mod_ceil (const T1 &, const T2 &, signop,
+			    overflow_type * = 0);
+  BINARY_FUNCTION mod_round (const T1 &, const T2 &, signop,
+			     overflow_type * = 0);
+
+  template <typename T1, typename T2>
+  bool multiple_of_p (const T1 &, const T2 &, signop);
+
+  template <typename T1, typename T2>
+  bool multiple_of_p (const T1 &, const T2 &, signop,
+		      WI_BINARY_RESULT (T1, T2) *);
+
+  SHIFT_FUNCTION lshift (const T1 &, const T2 &);
+  SHIFT_FUNCTION lrshift (const T1 &, const T2 &);
+  SHIFT_FUNCTION arshift (const T1 &, const T2 &);
+  SHIFT_FUNCTION rshift (const T1 &, const T2 &, signop sgn);
+  SHIFT_FUNCTION lrotate (const T1 &, const T2 &, unsigned int = 0);
+  SHIFT_FUNCTION rrotate (const T1 &, const T2 &, unsigned int = 0);
+
+#undef SHIFT_FUNCTION
+#undef BINARY_PREDICATE
+#undef BINARY_FUNCTION
+#undef UNARY_PREDICATE
+#undef UNARY_FUNCTION
+
+  bool only_sign_bit_p (const wide_int_ref &, unsigned int);
+  bool only_sign_bit_p (const wide_int_ref &);
+  int clz (const wide_int_ref &);
+  int clrsb (const wide_int_ref &);
+  int ctz (const wide_int_ref &);
+  int exact_log2 (const wide_int_ref &);
+  int floor_log2 (const wide_int_ref &);
+  int ffs (const wide_int_ref &);
+  int popcount (const wide_int_ref &);
+  int parity (const wide_int_ref &);
+
+  template <typename T>
+  unsigned HOST_WIDE_INT extract_uhwi (const T &, unsigned int, unsigned int);
+
+  template <typename T>
+  unsigned int min_precision (const T &, signop);
+
+  static inline void accumulate_overflow (overflow_type &, overflow_type);
+}
+
+namespace wi
+{
+  /* Contains the components of a decomposed integer for easy, direct
+     access.  */
+  struct storage_ref
+  {
+    storage_ref () {}
+    storage_ref (const HOST_WIDE_INT *, unsigned int, unsigned int);
+
+    const HOST_WIDE_INT *val;
+    unsigned int len;
+    unsigned int precision;
+
+    /* Provide enough trappings for this class to act as storage for
+       generic_wide_int.  */
+    unsigned int get_len () const;
+    unsigned int get_precision () const;
+    const HOST_WIDE_INT *get_val () const;
+  };
+}
+
+inline::wi::storage_ref::storage_ref (const HOST_WIDE_INT *val_in,
+				      unsigned int len_in,
+				      unsigned int precision_in)
+  : val (val_in), len (len_in), precision (precision_in)
+{
+}
+
+inline unsigned int
+wi::storage_ref::get_len () const
+{
+  return len;
+}
+
+inline unsigned int
+wi::storage_ref::get_precision () const
+{
+  return precision;
+}
+
+inline const HOST_WIDE_INT *
+wi::storage_ref::get_val () const
+{
+  return val;
+}
+
+/* This class defines an integer type using the storage provided by the
+   template argument.  The storage class must provide the following
+   functions:
+
+   unsigned int get_precision () const
+     Return the number of bits in the integer.
+
+   HOST_WIDE_INT *get_val () const
+     Return a pointer to the array of blocks that encodes the integer.
+
+   unsigned int get_len () const
+     Return the number of blocks in get_val ().  If this is smaller
+     than the number of blocks implied by get_precision (), the
+     remaining blocks are sign extensions of block get_len () - 1.
+
+   Although not required by generic_wide_int itself, writable storage
+   classes can also provide the following functions:
+
+   HOST_WIDE_INT *write_val ()
+     Get a modifiable version of get_val ()
+
+   unsigned int set_len (unsigned int len)
+     Set the value returned by get_len () to LEN.  */
+template <typename storage>
+class GTY(()) generic_wide_int : public storage
+{
+public:
+  generic_wide_int ();
+
+  template <typename T>
+  generic_wide_int (const T &);
+
+  template <typename T>
+  generic_wide_int (const T &, unsigned int);
+
+  /* Conversions.  */
+  HOST_WIDE_INT to_shwi (unsigned int) const;
+  HOST_WIDE_INT to_shwi () const;
+  unsigned HOST_WIDE_INT to_uhwi (unsigned int) const;
+  unsigned HOST_WIDE_INT to_uhwi () const;
+  HOST_WIDE_INT to_short_addr () const;
+
+  /* Public accessors for the interior of a wide int.  */
+  HOST_WIDE_INT sign_mask () const;
+  HOST_WIDE_INT elt (unsigned int) const;
+  unsigned HOST_WIDE_INT ulow () const;
+  unsigned HOST_WIDE_INT uhigh () const;
+  HOST_WIDE_INT slow () const;
+  HOST_WIDE_INT shigh () const;
+
+  template <typename T>
+  generic_wide_int &operator = (const T &);
+
+#define ASSIGNMENT_OPERATOR(OP, F) \
+  template <typename T> \
+    generic_wide_int &OP (const T &c) { return (*this = wi::F (*this, c)); }
+
+/* Restrict these to cases where the shift operator is defined.  */
+#define SHIFT_ASSIGNMENT_OPERATOR(OP, OP2) \
+  template <typename T> \
+    generic_wide_int &OP (const T &c) { return (*this = *this OP2 c); }
+
+#define INCDEC_OPERATOR(OP, DELTA) \
+  generic_wide_int &OP () { *this += DELTA; return *this; }
+
+  ASSIGNMENT_OPERATOR (operator &=, bit_and)
+  ASSIGNMENT_OPERATOR (operator |=, bit_or)
+  ASSIGNMENT_OPERATOR (operator ^=, bit_xor)
+  ASSIGNMENT_OPERATOR (operator +=, add)
+  ASSIGNMENT_OPERATOR (operator -=, sub)
+  ASSIGNMENT_OPERATOR (operator *=, mul)
+  ASSIGNMENT_OPERATOR (operator <<=, lshift)
+  SHIFT_ASSIGNMENT_OPERATOR (operator >>=, >>)
+  INCDEC_OPERATOR (operator ++, 1)
+  INCDEC_OPERATOR (operator --, -1)
+
+#undef SHIFT_ASSIGNMENT_OPERATOR
+#undef ASSIGNMENT_OPERATOR
+#undef INCDEC_OPERATOR
+
+  /* Debugging functions.  */
+  void dump () const;
+
+  static const bool is_sign_extended
+    = wi::int_traits <generic_wide_int <storage> >::is_sign_extended;
+};
+
+template <typename storage>
+inline generic_wide_int <storage>::generic_wide_int () {}
+
+template <typename storage>
+template <typename T>
+inline generic_wide_int <storage>::generic_wide_int (const T &x)
+  : storage (x)
+{
+}
+
+template <typename storage>
+template <typename T>
+inline generic_wide_int <storage>::generic_wide_int (const T &x,
+						     unsigned int precision)
+  : storage (x, precision)
+{
+}
+
+/* Return THIS as a signed HOST_WIDE_INT, sign-extending from PRECISION.
+   If THIS does not fit in PRECISION, the information is lost.  */
+template <typename storage>
+inline HOST_WIDE_INT
+generic_wide_int <storage>::to_shwi (unsigned int precision) const
+{
+  if (precision < HOST_BITS_PER_WIDE_INT)
+    return sext_hwi (this->get_val ()[0], precision);
+  else
+    return this->get_val ()[0];
+}
+
+/* Return THIS as a signed HOST_WIDE_INT, in its natural precision.  */
+template <typename storage>
+inline HOST_WIDE_INT
+generic_wide_int <storage>::to_shwi () const
+{
+  if (is_sign_extended)
+    return this->get_val ()[0];
+  else
+    return to_shwi (this->get_precision ());
+}
+
+/* Return THIS as an unsigned HOST_WIDE_INT, zero-extending from
+   PRECISION.  If THIS does not fit in PRECISION, the information
+   is lost.  */
+template <typename storage>
+inline unsigned HOST_WIDE_INT
+generic_wide_int <storage>::to_uhwi (unsigned int precision) const
+{
+  if (precision < HOST_BITS_PER_WIDE_INT)
+    return zext_hwi (this->get_val ()[0], precision);
+  else
+    return this->get_val ()[0];
+}
+
+/* Return THIS as an signed HOST_WIDE_INT, in its natural precision.  */
+template <typename storage>
+inline unsigned HOST_WIDE_INT
+generic_wide_int <storage>::to_uhwi () const
+{
+  return to_uhwi (this->get_precision ());
+}
+
+/* TODO: The compiler is half converted from using HOST_WIDE_INT to
+   represent addresses to using offset_int to represent addresses.
+   We use to_short_addr at the interface from new code to old,
+   unconverted code.  */
+template <typename storage>
+inline HOST_WIDE_INT
+generic_wide_int <storage>::to_short_addr () const
+{
+  return this->get_val ()[0];
+}
+
+/* Return the implicit value of blocks above get_len ().  */
+template <typename storage>
+inline HOST_WIDE_INT
+generic_wide_int <storage>::sign_mask () const
+{
+  unsigned int len = this->get_len ();
+  unsigned HOST_WIDE_INT high = this->get_val ()[len - 1];
+  if (!is_sign_extended)
+    {
+      unsigned int precision = this->get_precision ();
+      int excess = len * HOST_BITS_PER_WIDE_INT - precision;
+      if (excess > 0)
+	high <<= excess;
+    }
+  return (HOST_WIDE_INT) (high) < 0 ? -1 : 0;
+}
+
+/* Return the signed value of the least-significant explicitly-encoded
+   block.  */
+template <typename storage>
+inline HOST_WIDE_INT
+generic_wide_int <storage>::slow () const
+{
+  return this->get_val ()[0];
+}
+
+/* Return the signed value of the most-significant explicitly-encoded
+   block.  */
+template <typename storage>
+inline HOST_WIDE_INT
+generic_wide_int <storage>::shigh () const
+{
+  return this->get_val ()[this->get_len () - 1];
+}
+
+/* Return the unsigned value of the least-significant
+   explicitly-encoded block.  */
+template <typename storage>
+inline unsigned HOST_WIDE_INT
+generic_wide_int <storage>::ulow () const
+{
+  return this->get_val ()[0];
+}
+
+/* Return the unsigned value of the most-significant
+   explicitly-encoded block.  */
+template <typename storage>
+inline unsigned HOST_WIDE_INT
+generic_wide_int <storage>::uhigh () const
+{
+  return this->get_val ()[this->get_len () - 1];
+}
+
+/* Return block I, which might be implicitly or explicit encoded.  */
+template <typename storage>
+inline HOST_WIDE_INT
+generic_wide_int <storage>::elt (unsigned int i) const
+{
+  if (i >= this->get_len ())
+    return sign_mask ();
+  else
+    return this->get_val ()[i];
+}
+
+template <typename storage>
+template <typename T>
+inline generic_wide_int <storage> &
+generic_wide_int <storage>::operator = (const T &x)
+{
+  storage::operator = (x);
+  return *this;
+}
+
+/* Dump the contents of the integer to stderr, for debugging.  */
+template <typename storage>
+void
+generic_wide_int <storage>::dump () const
+{
+  unsigned int len = this->get_len ();
+  const HOST_WIDE_INT *val = this->get_val ();
+  unsigned int precision = this->get_precision ();
+  fprintf (stderr, "[");
+  if (len * HOST_BITS_PER_WIDE_INT < precision)
+    fprintf (stderr, "...,");
+  for (unsigned int i = 0; i < len - 1; ++i)
+    fprintf (stderr, HOST_WIDE_INT_PRINT_HEX ",", val[len - 1 - i]);
+  fprintf (stderr, HOST_WIDE_INT_PRINT_HEX "], precision = %d\n",
+	   val[0], precision);
+}
+
+namespace wi
+{
+  template <typename storage>
+  struct int_traits < generic_wide_int <storage> >
+    : public wi::int_traits <storage>
+  {
+    static unsigned int get_precision (const generic_wide_int <storage> &);
+    static wi::storage_ref decompose (HOST_WIDE_INT *, unsigned int,
+				      const generic_wide_int <storage> &);
+  };
+}
+
+template <typename storage>
+inline unsigned int
+wi::int_traits < generic_wide_int <storage> >::
+get_precision (const generic_wide_int <storage> &x)
+{
+  return x.get_precision ();
+}
+
+template <typename storage>
+inline wi::storage_ref
+wi::int_traits < generic_wide_int <storage> >::
+decompose (HOST_WIDE_INT *, unsigned int precision,
+	   const generic_wide_int <storage> &x)
+{
+  gcc_checking_assert (precision == x.get_precision ());
+  return wi::storage_ref (x.get_val (), x.get_len (), precision);
+}
+
+/* Provide the storage for a wide_int_ref.  This acts like a read-only
+   wide_int, with the optimization that VAL is normally a pointer to
+   another integer's storage, so that no array copy is needed.  */
+template <bool SE, bool HDP>
+struct wide_int_ref_storage : public wi::storage_ref
+{
+private:
+  /* Scratch space that can be used when decomposing the original integer.
+     It must live as long as this object.  */
+  HOST_WIDE_INT scratch[2];
+
+public:
+  wide_int_ref_storage () {}
+
+  wide_int_ref_storage (const wi::storage_ref &);
+
+  template <typename T>
+  wide_int_ref_storage (const T &);
+
+  template <typename T>
+  wide_int_ref_storage (const T &, unsigned int);
+};
+
+/* Create a reference from an existing reference.  */
+template <bool SE, bool HDP>
+inline wide_int_ref_storage <SE, HDP>::
+wide_int_ref_storage (const wi::storage_ref &x)
+  : storage_ref (x)
+{}
+
+/* Create a reference to integer X in its natural precision.  Note
+   that the natural precision is host-dependent for primitive
+   types.  */
+template <bool SE, bool HDP>
+template <typename T>
+inline wide_int_ref_storage <SE, HDP>::wide_int_ref_storage (const T &x)
+  : storage_ref (wi::int_traits <T>::decompose (scratch,
+						wi::get_precision (x), x))
+{
+}
+
+/* Create a reference to integer X in precision PRECISION.  */
+template <bool SE, bool HDP>
+template <typename T>
+inline wide_int_ref_storage <SE, HDP>::
+wide_int_ref_storage (const T &x, unsigned int precision)
+  : storage_ref (wi::int_traits <T>::decompose (scratch, precision, x))
+{
+}
+
+namespace wi
+{
+  template <bool SE, bool HDP>
+  struct int_traits <wide_int_ref_storage <SE, HDP> >
+  {
+    static const enum precision_type precision_type = VAR_PRECISION;
+    static const bool host_dependent_precision = HDP;
+    static const bool is_sign_extended = SE;
+  };
+}
+
+namespace wi
+{
+  unsigned int force_to_size (HOST_WIDE_INT *, const HOST_WIDE_INT *,
+			      unsigned int, unsigned int, unsigned int,
+			      signop sgn);
+  unsigned int from_array (HOST_WIDE_INT *, const HOST_WIDE_INT *,
+			   unsigned int, unsigned int, bool = true);
+}
+
+/* The storage used by wide_int.  */
+class GTY(()) wide_int_storage
+{
+private:
+  HOST_WIDE_INT val[WIDE_INT_MAX_ELTS];
+  unsigned int len;
+  unsigned int precision;
+
+public:
+  wide_int_storage ();
+  template <typename T>
+  wide_int_storage (const T &);
+
+  /* The standard generic_wide_int storage methods.  */
+  unsigned int get_precision () const;
+  const HOST_WIDE_INT *get_val () const;
+  unsigned int get_len () const;
+  HOST_WIDE_INT *write_val ();
+  void set_len (unsigned int, bool = false);
+
+  template <typename T>
+  wide_int_storage &operator = (const T &);
+
+  static wide_int from (const wide_int_ref &, unsigned int, signop);
+  static wide_int from_array (const HOST_WIDE_INT *, unsigned int,
+			      unsigned int, bool = true);
+  static wide_int create (unsigned int);
+
+  /* FIXME: target-dependent, so should disappear.  */
+  wide_int bswap () const;
+};
+
+namespace wi
+{
+  template <>
+  struct int_traits <wide_int_storage>
+  {
+    static const enum precision_type precision_type = VAR_PRECISION;
+    /* Guaranteed by a static assert in the wide_int_storage constructor.  */
+    static const bool host_dependent_precision = false;
+    static const bool is_sign_extended = true;
+    template <typename T1, typename T2>
+    static wide_int get_binary_result (const T1 &, const T2 &);
+  };
+}
+
+inline wide_int_storage::wide_int_storage () {}
+
+/* Initialize the storage from integer X, in its natural precision.
+   Note that we do not allow integers with host-dependent precision
+   to become wide_ints; wide_ints must always be logically independent
+   of the host.  */
+template <typename T>
+inline wide_int_storage::wide_int_storage (const T &x)
+{
+  { STATIC_ASSERT (!wi::int_traits<T>::host_dependent_precision); }
+  { STATIC_ASSERT (wi::int_traits<T>::precision_type != wi::CONST_PRECISION); }
+  WIDE_INT_REF_FOR (T) xi (x);
+  precision = xi.precision;
+  wi::copy (*this, xi);
+}
+
+template <typename T>
+inline wide_int_storage&
+wide_int_storage::operator = (const T &x)
+{
+  { STATIC_ASSERT (!wi::int_traits<T>::host_dependent_precision); }
+  { STATIC_ASSERT (wi::int_traits<T>::precision_type != wi::CONST_PRECISION); }
+  WIDE_INT_REF_FOR (T) xi (x);
+  precision = xi.precision;
+  wi::copy (*this, xi);
+  return *this;
+}
+
+inline unsigned int
+wide_int_storage::get_precision () const
+{
+  return precision;
+}
+
+inline const HOST_WIDE_INT *
+wide_int_storage::get_val () const
+{
+  return val;
+}
+
+inline unsigned int
+wide_int_storage::get_len () const
+{
+  return len;
+}
+
+inline HOST_WIDE_INT *
+wide_int_storage::write_val ()
+{
+  return val;
+}
+
+inline void
+wide_int_storage::set_len (unsigned int l, bool is_sign_extended)
+{
+  len = l;
+  if (!is_sign_extended && len * HOST_BITS_PER_WIDE_INT > precision)
+    val[len - 1] = sext_hwi (val[len - 1],
+			     precision % HOST_BITS_PER_WIDE_INT);
+}
+
+/* Treat X as having signedness SGN and convert it to a PRECISION-bit
+   number.  */
+inline wide_int
+wide_int_storage::from (const wide_int_ref &x, unsigned int precision,
+			signop sgn)
+{
+  wide_int result = wide_int::create (precision);
+  result.set_len (wi::force_to_size (result.write_val (), x.val, x.len,
+				     x.precision, precision, sgn));
+  return result;
+}
+
+/* Create a wide_int from the explicit block encoding given by VAL and
+   LEN.  PRECISION is the precision of the integer.  NEED_CANON_P is
+   true if the encoding may have redundant trailing blocks.  */
+inline wide_int
+wide_int_storage::from_array (const HOST_WIDE_INT *val, unsigned int len,
+			      unsigned int precision, bool need_canon_p)
+{
+  wide_int result = wide_int::create (precision);
+  result.set_len (wi::from_array (result.write_val (), val, len, precision,
+				  need_canon_p));
+  return result;
+}
+
+/* Return an uninitialized wide_int with precision PRECISION.  */
+inline wide_int
+wide_int_storage::create (unsigned int precision)
+{
+  wide_int x;
+  x.precision = precision;
+  return x;
+}
+
+template <typename T1, typename T2>
+inline wide_int
+wi::int_traits <wide_int_storage>::get_binary_result (const T1 &x, const T2 &y)
+{
+  /* This shouldn't be used for two flexible-precision inputs.  */
+  STATIC_ASSERT (wi::int_traits <T1>::precision_type != FLEXIBLE_PRECISION
+		 || wi::int_traits <T2>::precision_type != FLEXIBLE_PRECISION);
+  if (wi::int_traits <T1>::precision_type == FLEXIBLE_PRECISION)
+    return wide_int::create (wi::get_precision (y));
+  else
+    return wide_int::create (wi::get_precision (x));
+}
+
+/* The storage used by FIXED_WIDE_INT (N).  */
+template <int N>
+class GTY(()) fixed_wide_int_storage
+{
+private:
+  HOST_WIDE_INT val[(N + HOST_BITS_PER_WIDE_INT + 1) / HOST_BITS_PER_WIDE_INT];
+  unsigned int len;
+
+public:
+  fixed_wide_int_storage ();
+  template <typename T>
+  fixed_wide_int_storage (const T &);
+
+  /* The standard generic_wide_int storage methods.  */
+  unsigned int get_precision () const;
+  const HOST_WIDE_INT *get_val () const;
+  unsigned int get_len () const;
+  HOST_WIDE_INT *write_val ();
+  void set_len (unsigned int, bool = false);
+
+  static FIXED_WIDE_INT (N) from (const wide_int_ref &, signop);
+  static FIXED_WIDE_INT (N) from_array (const HOST_WIDE_INT *, unsigned int,
+					bool = true);
+};
+
+namespace wi
+{
+  template <int N>
+  struct int_traits < fixed_wide_int_storage <N> >
+  {
+    static const enum precision_type precision_type = CONST_PRECISION;
+    static const bool host_dependent_precision = false;
+    static const bool is_sign_extended = true;
+    static const unsigned int precision = N;
+    template <typename T1, typename T2>
+    static FIXED_WIDE_INT (N) get_binary_result (const T1 &, const T2 &);
+  };
+}
+
+template <int N>
+inline fixed_wide_int_storage <N>::fixed_wide_int_storage () {}
+
+/* Initialize the storage from integer X, in precision N.  */
+template <int N>
+template <typename T>
+inline fixed_wide_int_storage <N>::fixed_wide_int_storage (const T &x)
+{
+  /* Check for type compatibility.  We don't want to initialize a
+     fixed-width integer from something like a wide_int.  */
+  WI_BINARY_RESULT (T, FIXED_WIDE_INT (N)) *assertion ATTRIBUTE_UNUSED;
+  wi::copy (*this, WIDE_INT_REF_FOR (T) (x, N));
+}
+
+template <int N>
+inline unsigned int
+fixed_wide_int_storage <N>::get_precision () const
+{
+  return N;
+}
+
+template <int N>
+inline const HOST_WIDE_INT *
+fixed_wide_int_storage <N>::get_val () const
+{
+  return val;
+}
+
+template <int N>
+inline unsigned int
+fixed_wide_int_storage <N>::get_len () const
+{
+  return len;
+}
+
+template <int N>
+inline HOST_WIDE_INT *
+fixed_wide_int_storage <N>::write_val ()
+{
+  return val;
+}
+
+template <int N>
+inline void
+fixed_wide_int_storage <N>::set_len (unsigned int l, bool)
+{
+  len = l;
+  /* There are no excess bits in val[len - 1].  */
+  STATIC_ASSERT (N % HOST_BITS_PER_WIDE_INT == 0);
+}
+
+/* Treat X as having signedness SGN and convert it to an N-bit number.  */
+template <int N>
+inline FIXED_WIDE_INT (N)
+fixed_wide_int_storage <N>::from (const wide_int_ref &x, signop sgn)
+{
+  FIXED_WIDE_INT (N) result;
+  result.set_len (wi::force_to_size (result.write_val (), x.val, x.len,
+				     x.precision, N, sgn));
+  return result;
+}
+
+/* Create a FIXED_WIDE_INT (N) from the explicit block encoding given by
+   VAL and LEN.  NEED_CANON_P is true if the encoding may have redundant
+   trailing blocks.  */
+template <int N>
+inline FIXED_WIDE_INT (N)
+fixed_wide_int_storage <N>::from_array (const HOST_WIDE_INT *val,
+					unsigned int len,
+					bool need_canon_p)
+{
+  FIXED_WIDE_INT (N) result;
+  result.set_len (wi::from_array (result.write_val (), val, len,
+				  N, need_canon_p));
+  return result;
+}
+
+template <int N>
+template <typename T1, typename T2>
+inline FIXED_WIDE_INT (N)
+wi::int_traits < fixed_wide_int_storage <N> >::
+get_binary_result (const T1 &, const T2 &)
+{
+  return FIXED_WIDE_INT (N) ();
+}
+
+/* A reference to one element of a trailing_wide_ints structure.  */
+class trailing_wide_int_storage
+{
+private:
+  /* The precision of the integer, which is a fixed property of the
+     parent trailing_wide_ints.  */
+  unsigned int m_precision;
+
+  /* A pointer to the length field.  */
+  unsigned char *m_len;
+
+  /* A pointer to the HWI array.  There are enough elements to hold all
+     values of precision M_PRECISION.  */
+  HOST_WIDE_INT *m_val;
+
+public:
+  trailing_wide_int_storage (unsigned int, unsigned char *, HOST_WIDE_INT *);
+
+  /* The standard generic_wide_int storage methods.  */
+  unsigned int get_len () const;
+  unsigned int get_precision () const;
+  const HOST_WIDE_INT *get_val () const;
+  HOST_WIDE_INT *write_val ();
+  void set_len (unsigned int, bool = false);
+
+  template <typename T>
+  trailing_wide_int_storage &operator = (const T &);
+};
+
+typedef generic_wide_int <trailing_wide_int_storage> trailing_wide_int;
+
+/* trailing_wide_int behaves like a wide_int.  */
+namespace wi
+{
+  template <>
+  struct int_traits <trailing_wide_int_storage>
+    : public int_traits <wide_int_storage> {};
+}
+
+/* An array of N wide_int-like objects that can be put at the end of
+   a variable-sized structure.  Use extra_size to calculate how many
+   bytes beyond the sizeof need to be allocated.  Use set_precision
+   to initialize the structure.  */
+template <int N>
+class GTY((user)) trailing_wide_ints
+{
+private:
+  /* The shared precision of each number.  */
+  unsigned short m_precision;
+
+  /* The shared maximum length of each number.  */
+  unsigned char m_max_len;
+
+  /* The current length of each number.  */
+  unsigned char m_len[N];
+
+  /* The variable-length part of the structure, which always contains
+     at least one HWI.  Element I starts at index I * M_MAX_LEN.  */
+  HOST_WIDE_INT m_val[1];
+
+public:
+  typedef WIDE_INT_REF_FOR (trailing_wide_int_storage) const_reference;
+
+  void set_precision (unsigned int);
+  unsigned int get_precision () const { return m_precision; }
+  trailing_wide_int operator [] (unsigned int);
+  const_reference operator [] (unsigned int) const;
+  static size_t extra_size (unsigned int);
+  size_t extra_size () const { return extra_size (m_precision); }
+};
+
+inline trailing_wide_int_storage::
+trailing_wide_int_storage (unsigned int precision, unsigned char *len,
+			   HOST_WIDE_INT *val)
+  : m_precision (precision), m_len (len), m_val (val)
+{
+}
+
+inline unsigned int
+trailing_wide_int_storage::get_len () const
+{
+  return *m_len;
+}
+
+inline unsigned int
+trailing_wide_int_storage::get_precision () const
+{
+  return m_precision;
+}
+
+inline const HOST_WIDE_INT *
+trailing_wide_int_storage::get_val () const
+{
+  return m_val;
+}
+
+inline HOST_WIDE_INT *
+trailing_wide_int_storage::write_val ()
+{
+  return m_val;
+}
+
+inline void
+trailing_wide_int_storage::set_len (unsigned int len, bool is_sign_extended)
+{
+  *m_len = len;
+  if (!is_sign_extended && len * HOST_BITS_PER_WIDE_INT > m_precision)
+    m_val[len - 1] = sext_hwi (m_val[len - 1],
+			       m_precision % HOST_BITS_PER_WIDE_INT);
+}
+
+template <typename T>
+inline trailing_wide_int_storage &
+trailing_wide_int_storage::operator = (const T &x)
+{
+  WIDE_INT_REF_FOR (T) xi (x, m_precision);
+  wi::copy (*this, xi);
+  return *this;
+}
+
+/* Initialize the structure and record that all elements have precision
+   PRECISION.  */
+template <int N>
+inline void
+trailing_wide_ints <N>::set_precision (unsigned int precision)
+{
+  m_precision = precision;
+  m_max_len = ((precision + HOST_BITS_PER_WIDE_INT - 1)
+	       / HOST_BITS_PER_WIDE_INT);
+}
+
+/* Return a reference to element INDEX.  */
+template <int N>
+inline trailing_wide_int
+trailing_wide_ints <N>::operator [] (unsigned int index)
+{
+  return trailing_wide_int_storage (m_precision, &m_len[index],
+				    &m_val[index * m_max_len]);
+}
+
+template <int N>
+inline typename trailing_wide_ints <N>::const_reference
+trailing_wide_ints <N>::operator [] (unsigned int index) const
+{
+  return wi::storage_ref (&m_val[index * m_max_len],
+			  m_len[index], m_precision);
+}
+
+/* Return how many extra bytes need to be added to the end of the structure
+   in order to handle N wide_ints of precision PRECISION.  */
+template <int N>
+inline size_t
+trailing_wide_ints <N>::extra_size (unsigned int precision)
+{
+  unsigned int max_len = ((precision + HOST_BITS_PER_WIDE_INT - 1)
+			  / HOST_BITS_PER_WIDE_INT);
+  return (N * max_len - 1) * sizeof (HOST_WIDE_INT);
+}
+
+/* This macro is used in structures that end with a trailing_wide_ints field
+   called FIELD.  It declares get_NAME() and set_NAME() methods to access
+   element I of FIELD.  */
+#define TRAILING_WIDE_INT_ACCESSOR(NAME, FIELD, I) \
+  trailing_wide_int get_##NAME () { return FIELD[I]; } \
+  template <typename T> void set_##NAME (const T &x) { FIELD[I] = x; }
+
+namespace wi
+{
+  /* Implementation of int_traits for primitive integer types like "int".  */
+  template <typename T, bool signed_p>
+  struct primitive_int_traits
+  {
+    static const enum precision_type precision_type = FLEXIBLE_PRECISION;
+    static const bool host_dependent_precision = true;
+    static const bool is_sign_extended = true;
+    static unsigned int get_precision (T);
+    static wi::storage_ref decompose (HOST_WIDE_INT *, unsigned int, T);
+  };
+}
+
+template <typename T, bool signed_p>
+inline unsigned int
+wi::primitive_int_traits <T, signed_p>::get_precision (T)
+{
+  return sizeof (T) * CHAR_BIT;
+}
+
+template <typename T, bool signed_p>
+inline wi::storage_ref
+wi::primitive_int_traits <T, signed_p>::decompose (HOST_WIDE_INT *scratch,
+						   unsigned int precision, T x)
+{
+  scratch[0] = x;
+  if (signed_p || scratch[0] >= 0 || precision <= HOST_BITS_PER_WIDE_INT)
+    return wi::storage_ref (scratch, 1, precision);
+  scratch[1] = 0;
+  return wi::storage_ref (scratch, 2, precision);
+}
+
+/* Allow primitive C types to be used in wi:: routines.  */
+namespace wi
+{
+  template <>
+  struct int_traits <unsigned char>
+    : public primitive_int_traits <unsigned char, false> {};
+
+  template <>
+  struct int_traits <unsigned short>
+    : public primitive_int_traits <unsigned short, false> {};
+
+  template <>
+  struct int_traits <int>
+    : public primitive_int_traits <int, true> {};
+
+  template <>
+  struct int_traits <unsigned int>
+    : public primitive_int_traits <unsigned int, false> {};
+
+  template <>
+  struct int_traits <long>
+    : public primitive_int_traits <long, true> {};
+
+  template <>
+  struct int_traits <unsigned long>
+    : public primitive_int_traits <unsigned long, false> {};
+
+#if defined HAVE_LONG_LONG
+  template <>
+  struct int_traits <long long>
+    : public primitive_int_traits <long long, true> {};
+
+  template <>
+  struct int_traits <unsigned long long>
+    : public primitive_int_traits <unsigned long long, false> {};
+#endif
+}
+
+namespace wi
+{
+  /* Stores HWI-sized integer VAL, treating it as having signedness SGN
+     and precision PRECISION.  */
+  struct hwi_with_prec
+  {
+    hwi_with_prec () {}
+    hwi_with_prec (HOST_WIDE_INT, unsigned int, signop);
+    HOST_WIDE_INT val;
+    unsigned int precision;
+    signop sgn;
+  };
+
+  hwi_with_prec shwi (HOST_WIDE_INT, unsigned int);
+  hwi_with_prec uhwi (unsigned HOST_WIDE_INT, unsigned int);
+
+  hwi_with_prec minus_one (unsigned int);
+  hwi_with_prec zero (unsigned int);
+  hwi_with_prec one (unsigned int);
+  hwi_with_prec two (unsigned int);
+}
+
+inline wi::hwi_with_prec::hwi_with_prec (HOST_WIDE_INT v, unsigned int p,
+					 signop s)
+  : precision (p), sgn (s)
+{
+  if (precision < HOST_BITS_PER_WIDE_INT)
+    val = sext_hwi (v, precision);
+  else
+    val = v;
+}
+
+/* Return a signed integer that has value VAL and precision PRECISION.  */
+inline wi::hwi_with_prec
+wi::shwi (HOST_WIDE_INT val, unsigned int precision)
+{
+  return hwi_with_prec (val, precision, SIGNED);
+}
+
+/* Return an unsigned integer that has value VAL and precision PRECISION.  */
+inline wi::hwi_with_prec
+wi::uhwi (unsigned HOST_WIDE_INT val, unsigned int precision)
+{
+  return hwi_with_prec (val, precision, UNSIGNED);
+}
+
+/* Return a wide int of -1 with precision PRECISION.  */
+inline wi::hwi_with_prec
+wi::minus_one (unsigned int precision)
+{
+  return wi::shwi (-1, precision);
+}
+
+/* Return a wide int of 0 with precision PRECISION.  */
+inline wi::hwi_with_prec
+wi::zero (unsigned int precision)
+{
+  return wi::shwi (0, precision);
+}
+
+/* Return a wide int of 1 with precision PRECISION.  */
+inline wi::hwi_with_prec
+wi::one (unsigned int precision)
+{
+  return wi::shwi (1, precision);
+}
+
+/* Return a wide int of 2 with precision PRECISION.  */
+inline wi::hwi_with_prec
+wi::two (unsigned int precision)
+{
+  return wi::shwi (2, precision);
+}
+
+namespace wi
+{
+  /* ints_for<T>::zero (X) returns a zero that, when asssigned to a T,
+     gives that T the same precision as X.  */
+  template<typename T, precision_type = int_traits<T>::precision_type>
+  struct ints_for
+  {
+    static int zero (const T &) { return 0; }
+  };
+
+  template<typename T>
+  struct ints_for<T, VAR_PRECISION>
+  {
+    static hwi_with_prec zero (const T &);
+  };
+}
+
+template<typename T>
+inline wi::hwi_with_prec
+wi::ints_for<T, wi::VAR_PRECISION>::zero (const T &x)
+{
+  return wi::zero (wi::get_precision (x));
+}
+
+namespace wi
+{
+  template <>
+  struct int_traits <wi::hwi_with_prec>
+  {
+    static const enum precision_type precision_type = VAR_PRECISION;
+    /* hwi_with_prec has an explicitly-given precision, rather than the
+       precision of HOST_WIDE_INT.  */
+    static const bool host_dependent_precision = false;
+    static const bool is_sign_extended = true;
+    static unsigned int get_precision (const wi::hwi_with_prec &);
+    static wi::storage_ref decompose (HOST_WIDE_INT *, unsigned int,
+				      const wi::hwi_with_prec &);
+  };
+}
+
+inline unsigned int
+wi::int_traits <wi::hwi_with_prec>::get_precision (const wi::hwi_with_prec &x)
+{
+  return x.precision;
+}
+
+inline wi::storage_ref
+wi::int_traits <wi::hwi_with_prec>::
+decompose (HOST_WIDE_INT *scratch, unsigned int precision,
+	   const wi::hwi_with_prec &x)
+{
+  gcc_checking_assert (precision == x.precision);
+  scratch[0] = x.val;
+  if (x.sgn == SIGNED || x.val >= 0 || precision <= HOST_BITS_PER_WIDE_INT)
+    return wi::storage_ref (scratch, 1, precision);
+  scratch[1] = 0;
+  return wi::storage_ref (scratch, 2, precision);
+}
+
+/* Private functions for handling large cases out of line.  They take
+   individual length and array parameters because that is cheaper for
+   the inline caller than constructing an object on the stack and
+   passing a reference to it.  (Although many callers use wide_int_refs,
+   we generally want those to be removed by SRA.)  */
+namespace wi
+{
+  bool eq_p_large (const HOST_WIDE_INT *, unsigned int,
+		   const HOST_WIDE_INT *, unsigned int, unsigned int);
+  bool lts_p_large (const HOST_WIDE_INT *, unsigned int, unsigned int,
+		    const HOST_WIDE_INT *, unsigned int);
+  bool ltu_p_large (const HOST_WIDE_INT *, unsigned int, unsigned int,
+		    const HOST_WIDE_INT *, unsigned int);
+  int cmps_large (const HOST_WIDE_INT *, unsigned int, unsigned int,
+		  const HOST_WIDE_INT *, unsigned int);
+  int cmpu_large (const HOST_WIDE_INT *, unsigned int, unsigned int,
+		  const HOST_WIDE_INT *, unsigned int);
+  unsigned int sext_large (HOST_WIDE_INT *, const HOST_WIDE_INT *,
+			   unsigned int,
+			   unsigned int, unsigned int);
+  unsigned int zext_large (HOST_WIDE_INT *, const HOST_WIDE_INT *,
+			   unsigned int,
+			   unsigned int, unsigned int);
+  unsigned int set_bit_large (HOST_WIDE_INT *, const HOST_WIDE_INT *,
+			      unsigned int, unsigned int, unsigned int);
+  unsigned int lshift_large (HOST_WIDE_INT *, const HOST_WIDE_INT *,
+			     unsigned int, unsigned int, unsigned int);
+  unsigned int lrshift_large (HOST_WIDE_INT *, const HOST_WIDE_INT *,
+			      unsigned int, unsigned int, unsigned int,
+			      unsigned int);
+  unsigned int arshift_large (HOST_WIDE_INT *, const HOST_WIDE_INT *,
+			      unsigned int, unsigned int, unsigned int,
+			      unsigned int);
+  unsigned int and_large (HOST_WIDE_INT *, const HOST_WIDE_INT *, unsigned int,
+			  const HOST_WIDE_INT *, unsigned int, unsigned int);
+  unsigned int and_not_large (HOST_WIDE_INT *, const HOST_WIDE_INT *,
+			      unsigned int, const HOST_WIDE_INT *,
+			      unsigned int, unsigned int);
+  unsigned int or_large (HOST_WIDE_INT *, const HOST_WIDE_INT *, unsigned int,
+			 const HOST_WIDE_INT *, unsigned int, unsigned int);
+  unsigned int or_not_large (HOST_WIDE_INT *, const HOST_WIDE_INT *,
+			     unsigned int, const HOST_WIDE_INT *,
+			     unsigned int, unsigned int);
+  unsigned int xor_large (HOST_WIDE_INT *, const HOST_WIDE_INT *, unsigned int,
+			  const HOST_WIDE_INT *, unsigned int, unsigned int);
+  unsigned int add_large (HOST_WIDE_INT *, const HOST_WIDE_INT *, unsigned int,
+			  const HOST_WIDE_INT *, unsigned int, unsigned int,
+			  signop, overflow_type *);
+  unsigned int sub_large (HOST_WIDE_INT *, const HOST_WIDE_INT *, unsigned int,
+			  const HOST_WIDE_INT *, unsigned int, unsigned int,
+			  signop, overflow_type *);
+  unsigned int mul_internal (HOST_WIDE_INT *, const HOST_WIDE_INT *,
+			     unsigned int, const HOST_WIDE_INT *,
+			     unsigned int, unsigned int, signop,
+			     overflow_type *, bool);
+  unsigned int divmod_internal (HOST_WIDE_INT *, unsigned int *,
+				HOST_WIDE_INT *, const HOST_WIDE_INT *,
+				unsigned int, unsigned int,
+				const HOST_WIDE_INT *,
+				unsigned int, unsigned int,
+				signop, overflow_type *);
+}
+
+/* Return the number of bits that integer X can hold.  */
+template <typename T>
+inline unsigned int
+wi::get_precision (const T &x)
+{
+  return wi::int_traits <T>::get_precision (x);
+}
+
+/* Return the number of bits that the result of a binary operation can
+   hold when the input operands are X and Y.  */
+template <typename T1, typename T2>
+inline unsigned int
+wi::get_binary_precision (const T1 &x, const T2 &y)
+{
+  return get_precision (wi::int_traits <WI_BINARY_RESULT (T1, T2)>::
+			get_binary_result (x, y));
+}
+
+/* Copy the contents of Y to X, but keeping X's current precision.  */
+template <typename T1, typename T2>
+inline void
+wi::copy (T1 &x, const T2 &y)
+{
+  HOST_WIDE_INT *xval = x.write_val ();
+  const HOST_WIDE_INT *yval = y.get_val ();
+  unsigned int len = y.get_len ();
+  unsigned int i = 0;
+  do
+    xval[i] = yval[i];
+  while (++i < len);
+  x.set_len (len, y.is_sign_extended);
+}
+
+/* Return true if X fits in a HOST_WIDE_INT with no loss of precision.  */
+template <typename T>
+inline bool
+wi::fits_shwi_p (const T &x)
+{
+  WIDE_INT_REF_FOR (T) xi (x);
+  return xi.len == 1;
+}
+
+/* Return true if X fits in an unsigned HOST_WIDE_INT with no loss of
+   precision.  */
+template <typename T>
+inline bool
+wi::fits_uhwi_p (const T &x)
+{
+  WIDE_INT_REF_FOR (T) xi (x);
+  if (xi.precision <= HOST_BITS_PER_WIDE_INT)
+    return true;
+  if (xi.len == 1)
+    return xi.slow () >= 0;
+  return xi.len == 2 && xi.uhigh () == 0;
+}
+
+/* Return true if X is negative based on the interpretation of SGN.
+   For UNSIGNED, this is always false.  */
+template <typename T>
+inline bool
+wi::neg_p (const T &x, signop sgn)
+{
+  WIDE_INT_REF_FOR (T) xi (x);
+  if (sgn == UNSIGNED)
+    return false;
+  return xi.sign_mask () < 0;
+}
+
+/* Return -1 if the top bit of X is set and 0 if the top bit is clear.  */
+template <typename T>
+inline HOST_WIDE_INT
+wi::sign_mask (const T &x)
+{
+  WIDE_INT_REF_FOR (T) xi (x);
+  return xi.sign_mask ();
+}
+
+/* Return true if X == Y.  X and Y must be binary-compatible.  */
+template <typename T1, typename T2>
+inline bool
+wi::eq_p (const T1 &x, const T2 &y)
+{
+  unsigned int precision = get_binary_precision (x, y);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y, precision);
+  if (xi.is_sign_extended && yi.is_sign_extended)
+    {
+      /* This case reduces to array equality.  */
+      if (xi.len != yi.len)
+	return false;
+      unsigned int i = 0;
+      do
+	if (xi.val[i] != yi.val[i])
+	  return false;
+      while (++i != xi.len);
+      return true;
+    }
+  if (__builtin_expect (yi.len == 1, true))
+    {
+      /* XI is only equal to YI if it too has a single HWI.  */
+      if (xi.len != 1)
+	return false;
+      /* Excess bits in xi.val[0] will be signs or zeros, so comparisons
+	 with 0 are simple.  */
+      if (STATIC_CONSTANT_P (yi.val[0] == 0))
+	return xi.val[0] == 0;
+      /* Otherwise flush out any excess bits first.  */
+      unsigned HOST_WIDE_INT diff = xi.val[0] ^ yi.val[0];
+      int excess = HOST_BITS_PER_WIDE_INT - precision;
+      if (excess > 0)
+	diff <<= excess;
+      return diff == 0;
+    }
+  return eq_p_large (xi.val, xi.len, yi.val, yi.len, precision);
+}
+
+/* Return true if X != Y.  X and Y must be binary-compatible.  */
+template <typename T1, typename T2>
+inline bool
+wi::ne_p (const T1 &x, const T2 &y)
+{
+  return !eq_p (x, y);
+}
+
+/* Return true if X < Y when both are treated as signed values.  */
+template <typename T1, typename T2>
+inline bool
+wi::lts_p (const T1 &x, const T2 &y)
+{
+  unsigned int precision = get_binary_precision (x, y);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y, precision);
+  /* We optimize x < y, where y is 64 or fewer bits.  */
+  if (wi::fits_shwi_p (yi))
+    {
+      /* Make lts_p (x, 0) as efficient as wi::neg_p (x).  */
+      if (STATIC_CONSTANT_P (yi.val[0] == 0))
+	return neg_p (xi);
+      /* If x fits directly into a shwi, we can compare directly.  */
+      if (wi::fits_shwi_p (xi))
+	return xi.to_shwi () < yi.to_shwi ();
+      /* If x doesn't fit and is negative, then it must be more
+	 negative than any value in y, and hence smaller than y.  */
+      if (neg_p (xi))
+	return true;
+      /* If x is positive, then it must be larger than any value in y,
+	 and hence greater than y.  */
+      return false;
+    }
+  /* Optimize the opposite case, if it can be detected at compile time.  */
+  if (STATIC_CONSTANT_P (xi.len == 1))
+    /* If YI is negative it is lower than the least HWI.
+       If YI is positive it is greater than the greatest HWI.  */
+    return !neg_p (yi);
+  return lts_p_large (xi.val, xi.len, precision, yi.val, yi.len);
+}
+
+/* Return true if X < Y when both are treated as unsigned values.  */
+template <typename T1, typename T2>
+inline bool
+wi::ltu_p (const T1 &x, const T2 &y)
+{
+  unsigned int precision = get_binary_precision (x, y);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y, precision);
+  /* Optimize comparisons with constants.  */
+  if (STATIC_CONSTANT_P (yi.len == 1 && yi.val[0] >= 0))
+    return xi.len == 1 && xi.to_uhwi () < (unsigned HOST_WIDE_INT) yi.val[0];
+  if (STATIC_CONSTANT_P (xi.len == 1 && xi.val[0] >= 0))
+    return yi.len != 1 || yi.to_uhwi () > (unsigned HOST_WIDE_INT) xi.val[0];
+  /* Optimize the case of two HWIs.  The HWIs are implicitly sign-extended
+     for precisions greater than HOST_BITS_WIDE_INT, but sign-extending both
+     values does not change the result.  */
+  if (__builtin_expect (xi.len + yi.len == 2, true))
+    {
+      unsigned HOST_WIDE_INT xl = xi.to_uhwi ();
+      unsigned HOST_WIDE_INT yl = yi.to_uhwi ();
+      return xl < yl;
+    }
+  return ltu_p_large (xi.val, xi.len, precision, yi.val, yi.len);
+}
+
+/* Return true if X < Y.  Signedness of X and Y is indicated by SGN.  */
+template <typename T1, typename T2>
+inline bool
+wi::lt_p (const T1 &x, const T2 &y, signop sgn)
+{
+  if (sgn == SIGNED)
+    return lts_p (x, y);
+  else
+    return ltu_p (x, y);
+}
+
+/* Return true if X <= Y when both are treated as signed values.  */
+template <typename T1, typename T2>
+inline bool
+wi::les_p (const T1 &x, const T2 &y)
+{
+  return !lts_p (y, x);
+}
+
+/* Return true if X <= Y when both are treated as unsigned values.  */
+template <typename T1, typename T2>
+inline bool
+wi::leu_p (const T1 &x, const T2 &y)
+{
+  return !ltu_p (y, x);
+}
+
+/* Return true if X <= Y.  Signedness of X and Y is indicated by SGN.  */
+template <typename T1, typename T2>
+inline bool
+wi::le_p (const T1 &x, const T2 &y, signop sgn)
+{
+  if (sgn == SIGNED)
+    return les_p (x, y);
+  else
+    return leu_p (x, y);
+}
+
+/* Return true if X > Y when both are treated as signed values.  */
+template <typename T1, typename T2>
+inline bool
+wi::gts_p (const T1 &x, const T2 &y)
+{
+  return lts_p (y, x);
+}
+
+/* Return true if X > Y when both are treated as unsigned values.  */
+template <typename T1, typename T2>
+inline bool
+wi::gtu_p (const T1 &x, const T2 &y)
+{
+  return ltu_p (y, x);
+}
+
+/* Return true if X > Y.  Signedness of X and Y is indicated by SGN.  */
+template <typename T1, typename T2>
+inline bool
+wi::gt_p (const T1 &x, const T2 &y, signop sgn)
+{
+  if (sgn == SIGNED)
+    return gts_p (x, y);
+  else
+    return gtu_p (x, y);
+}
+
+/* Return true if X >= Y when both are treated as signed values.  */
+template <typename T1, typename T2>
+inline bool
+wi::ges_p (const T1 &x, const T2 &y)
+{
+  return !lts_p (x, y);
+}
+
+/* Return true if X >= Y when both are treated as unsigned values.  */
+template <typename T1, typename T2>
+inline bool
+wi::geu_p (const T1 &x, const T2 &y)
+{
+  return !ltu_p (x, y);
+}
+
+/* Return true if X >= Y.  Signedness of X and Y is indicated by SGN.  */
+template <typename T1, typename T2>
+inline bool
+wi::ge_p (const T1 &x, const T2 &y, signop sgn)
+{
+  if (sgn == SIGNED)
+    return ges_p (x, y);
+  else
+    return geu_p (x, y);
+}
+
+/* Return -1 if X < Y, 0 if X == Y and 1 if X > Y.  Treat both X and Y
+   as signed values.  */
+template <typename T1, typename T2>
+inline int
+wi::cmps (const T1 &x, const T2 &y)
+{
+  unsigned int precision = get_binary_precision (x, y);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y, precision);
+  if (wi::fits_shwi_p (yi))
+    {
+      /* Special case for comparisons with 0.  */
+      if (STATIC_CONSTANT_P (yi.val[0] == 0))
+	return neg_p (xi) ? -1 : !(xi.len == 1 && xi.val[0] == 0);
+      /* If x fits into a signed HWI, we can compare directly.  */
+      if (wi::fits_shwi_p (xi))
+	{
+	  HOST_WIDE_INT xl = xi.to_shwi ();
+	  HOST_WIDE_INT yl = yi.to_shwi ();
+	  return xl < yl ? -1 : xl > yl;
+	}
+      /* If x doesn't fit and is negative, then it must be more
+	 negative than any signed HWI, and hence smaller than y.  */
+      if (neg_p (xi))
+	return -1;
+      /* If x is positive, then it must be larger than any signed HWI,
+	 and hence greater than y.  */
+      return 1;
+    }
+  /* Optimize the opposite case, if it can be detected at compile time.  */
+  if (STATIC_CONSTANT_P (xi.len == 1))
+    /* If YI is negative it is lower than the least HWI.
+       If YI is positive it is greater than the greatest HWI.  */
+    return neg_p (yi) ? 1 : -1;
+  return cmps_large (xi.val, xi.len, precision, yi.val, yi.len);
+}
+
+/* Return -1 if X < Y, 0 if X == Y and 1 if X > Y.  Treat both X and Y
+   as unsigned values.  */
+template <typename T1, typename T2>
+inline int
+wi::cmpu (const T1 &x, const T2 &y)
+{
+  unsigned int precision = get_binary_precision (x, y);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y, precision);
+  /* Optimize comparisons with constants.  */
+  if (STATIC_CONSTANT_P (yi.len == 1 && yi.val[0] >= 0))
+    {
+      /* If XI doesn't fit in a HWI then it must be larger than YI.  */
+      if (xi.len != 1)
+	return 1;
+      /* Otherwise compare directly.  */
+      unsigned HOST_WIDE_INT xl = xi.to_uhwi ();
+      unsigned HOST_WIDE_INT yl = yi.val[0];
+      return xl < yl ? -1 : xl > yl;
+    }
+  if (STATIC_CONSTANT_P (xi.len == 1 && xi.val[0] >= 0))
+    {
+      /* If YI doesn't fit in a HWI then it must be larger than XI.  */
+      if (yi.len != 1)
+	return -1;
+      /* Otherwise compare directly.  */
+      unsigned HOST_WIDE_INT xl = xi.val[0];
+      unsigned HOST_WIDE_INT yl = yi.to_uhwi ();
+      return xl < yl ? -1 : xl > yl;
+    }
+  /* Optimize the case of two HWIs.  The HWIs are implicitly sign-extended
+     for precisions greater than HOST_BITS_WIDE_INT, but sign-extending both
+     values does not change the result.  */
+  if (__builtin_expect (xi.len + yi.len == 2, true))
+    {
+      unsigned HOST_WIDE_INT xl = xi.to_uhwi ();
+      unsigned HOST_WIDE_INT yl = yi.to_uhwi ();
+      return xl < yl ? -1 : xl > yl;
+    }
+  return cmpu_large (xi.val, xi.len, precision, yi.val, yi.len);
+}
+
+/* Return -1 if X < Y, 0 if X == Y and 1 if X > Y.  Signedness of
+   X and Y indicated by SGN.  */
+template <typename T1, typename T2>
+inline int
+wi::cmp (const T1 &x, const T2 &y, signop sgn)
+{
+  if (sgn == SIGNED)
+    return cmps (x, y);
+  else
+    return cmpu (x, y);
+}
+
+/* Return ~x.  */
+template <typename T>
+inline WI_UNARY_RESULT (T)
+wi::bit_not (const T &x)
+{
+  WI_UNARY_RESULT_VAR (result, val, T, x);
+  WIDE_INT_REF_FOR (T) xi (x, get_precision (result));
+  for (unsigned int i = 0; i < xi.len; ++i)
+    val[i] = ~xi.val[i];
+  result.set_len (xi.len);
+  return result;
+}
+
+/* Return -x.  */
+template <typename T>
+inline WI_UNARY_RESULT (T)
+wi::neg (const T &x)
+{
+  return sub (0, x);
+}
+
+/* Return -x.  Indicate in *OVERFLOW if performing the negation would
+   cause an overflow.  */
+template <typename T>
+inline WI_UNARY_RESULT (T)
+wi::neg (const T &x, overflow_type *overflow)
+{
+  *overflow = only_sign_bit_p (x) ? OVF_OVERFLOW : OVF_NONE;
+  return sub (0, x);
+}
+
+/* Return the absolute value of x.  */
+template <typename T>
+inline WI_UNARY_RESULT (T)
+wi::abs (const T &x)
+{
+  return neg_p (x) ? neg (x) : WI_UNARY_RESULT (T) (x);
+}
+
+/* Return the result of sign-extending the low OFFSET bits of X.  */
+template <typename T>
+inline WI_UNARY_RESULT (T)
+wi::sext (const T &x, unsigned int offset)
+{
+  WI_UNARY_RESULT_VAR (result, val, T, x);
+  unsigned int precision = get_precision (result);
+  WIDE_INT_REF_FOR (T) xi (x, precision);
+
+  if (offset <= HOST_BITS_PER_WIDE_INT)
+    {
+      val[0] = sext_hwi (xi.ulow (), offset);
+      result.set_len (1, true);
+    }
+  else
+    result.set_len (sext_large (val, xi.val, xi.len, precision, offset));
+  return result;
+}
+
+/* Return the result of zero-extending the low OFFSET bits of X.  */
+template <typename T>
+inline WI_UNARY_RESULT (T)
+wi::zext (const T &x, unsigned int offset)
+{
+  WI_UNARY_RESULT_VAR (result, val, T, x);
+  unsigned int precision = get_precision (result);
+  WIDE_INT_REF_FOR (T) xi (x, precision);
+
+  /* This is not just an optimization, it is actually required to
+     maintain canonization.  */
+  if (offset >= precision)
+    {
+      wi::copy (result, xi);
+      return result;
+    }
+
+  /* In these cases we know that at least the top bit will be clear,
+     so no sign extension is necessary.  */
+  if (offset < HOST_BITS_PER_WIDE_INT)
+    {
+      val[0] = zext_hwi (xi.ulow (), offset);
+      result.set_len (1, true);
+    }
+  else
+    result.set_len (zext_large (val, xi.val, xi.len, precision, offset), true);
+  return result;
+}
+
+/* Return the result of extending the low OFFSET bits of X according to
+   signedness SGN.  */
+template <typename T>
+inline WI_UNARY_RESULT (T)
+wi::ext (const T &x, unsigned int offset, signop sgn)
+{
+  return sgn == SIGNED ? sext (x, offset) : zext (x, offset);
+}
+
+/* Return an integer that represents X | (1 << bit).  */
+template <typename T>
+inline WI_UNARY_RESULT (T)
+wi::set_bit (const T &x, unsigned int bit)
+{
+  WI_UNARY_RESULT_VAR (result, val, T, x);
+  unsigned int precision = get_precision (result);
+  WIDE_INT_REF_FOR (T) xi (x, precision);
+  if (precision <= HOST_BITS_PER_WIDE_INT)
+    {
+      val[0] = xi.ulow () | (HOST_WIDE_INT_1U << bit);
+      result.set_len (1);
+    }
+  else
+    result.set_len (set_bit_large (val, xi.val, xi.len, precision, bit));
+  return result;
+}
+
+/* Return the mininum of X and Y, treating them both as having
+   signedness SGN.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::min (const T1 &x, const T2 &y, signop sgn)
+{
+  WI_BINARY_RESULT_VAR (result, val ATTRIBUTE_UNUSED, T1, x, T2, y);
+  unsigned int precision = get_precision (result);
+  if (wi::le_p (x, y, sgn))
+    wi::copy (result, WIDE_INT_REF_FOR (T1) (x, precision));
+  else
+    wi::copy (result, WIDE_INT_REF_FOR (T2) (y, precision));
+  return result;
+}
+
+/* Return the minimum of X and Y, treating both as signed values.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::smin (const T1 &x, const T2 &y)
+{
+  return wi::min (x, y, SIGNED);
+}
+
+/* Return the minimum of X and Y, treating both as unsigned values.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::umin (const T1 &x, const T2 &y)
+{
+  return wi::min (x, y, UNSIGNED);
+}
+
+/* Return the maxinum of X and Y, treating them both as having
+   signedness SGN.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::max (const T1 &x, const T2 &y, signop sgn)
+{
+  WI_BINARY_RESULT_VAR (result, val ATTRIBUTE_UNUSED, T1, x, T2, y);
+  unsigned int precision = get_precision (result);
+  if (wi::ge_p (x, y, sgn))
+    wi::copy (result, WIDE_INT_REF_FOR (T1) (x, precision));
+  else
+    wi::copy (result, WIDE_INT_REF_FOR (T2) (y, precision));
+  return result;
+}
+
+/* Return the maximum of X and Y, treating both as signed values.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::smax (const T1 &x, const T2 &y)
+{
+  return wi::max (x, y, SIGNED);
+}
+
+/* Return the maximum of X and Y, treating both as unsigned values.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::umax (const T1 &x, const T2 &y)
+{
+  return wi::max (x, y, UNSIGNED);
+}
+
+/* Return X & Y.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::bit_and (const T1 &x, const T2 &y)
+{
+  WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
+  unsigned int precision = get_precision (result);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y, precision);
+  bool is_sign_extended = xi.is_sign_extended && yi.is_sign_extended;
+  if (__builtin_expect (xi.len + yi.len == 2, true))
+    {
+      val[0] = xi.ulow () & yi.ulow ();
+      result.set_len (1, is_sign_extended);
+    }
+  else
+    result.set_len (and_large (val, xi.val, xi.len, yi.val, yi.len,
+			       precision), is_sign_extended);
+  return result;
+}
+
+/* Return X & ~Y.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::bit_and_not (const T1 &x, const T2 &y)
+{
+  WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
+  unsigned int precision = get_precision (result);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y, precision);
+  bool is_sign_extended = xi.is_sign_extended && yi.is_sign_extended;
+  if (__builtin_expect (xi.len + yi.len == 2, true))
+    {
+      val[0] = xi.ulow () & ~yi.ulow ();
+      result.set_len (1, is_sign_extended);
+    }
+  else
+    result.set_len (and_not_large (val, xi.val, xi.len, yi.val, yi.len,
+				   precision), is_sign_extended);
+  return result;
+}
+
+/* Return X | Y.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::bit_or (const T1 &x, const T2 &y)
+{
+  WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
+  unsigned int precision = get_precision (result);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y, precision);
+  bool is_sign_extended = xi.is_sign_extended && yi.is_sign_extended;
+  if (__builtin_expect (xi.len + yi.len == 2, true))
+    {
+      val[0] = xi.ulow () | yi.ulow ();
+      result.set_len (1, is_sign_extended);
+    }
+  else
+    result.set_len (or_large (val, xi.val, xi.len,
+			      yi.val, yi.len, precision), is_sign_extended);
+  return result;
+}
+
+/* Return X | ~Y.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::bit_or_not (const T1 &x, const T2 &y)
+{
+  WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
+  unsigned int precision = get_precision (result);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y, precision);
+  bool is_sign_extended = xi.is_sign_extended && yi.is_sign_extended;
+  if (__builtin_expect (xi.len + yi.len == 2, true))
+    {
+      val[0] = xi.ulow () | ~yi.ulow ();
+      result.set_len (1, is_sign_extended);
+    }
+  else
+    result.set_len (or_not_large (val, xi.val, xi.len, yi.val, yi.len,
+				  precision), is_sign_extended);
+  return result;
+}
+
+/* Return X ^ Y.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::bit_xor (const T1 &x, const T2 &y)
+{
+  WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
+  unsigned int precision = get_precision (result);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y, precision);
+  bool is_sign_extended = xi.is_sign_extended && yi.is_sign_extended;
+  if (__builtin_expect (xi.len + yi.len == 2, true))
+    {
+      val[0] = xi.ulow () ^ yi.ulow ();
+      result.set_len (1, is_sign_extended);
+    }
+  else
+    result.set_len (xor_large (val, xi.val, xi.len,
+			       yi.val, yi.len, precision), is_sign_extended);
+  return result;
+}
+
+/* Return X + Y.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::add (const T1 &x, const T2 &y)
+{
+  WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
+  unsigned int precision = get_precision (result);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y, precision);
+  if (precision <= HOST_BITS_PER_WIDE_INT)
+    {
+      val[0] = xi.ulow () + yi.ulow ();
+      result.set_len (1);
+    }
+  /* If the precision is known at compile time to be greater than
+     HOST_BITS_PER_WIDE_INT, we can optimize the single-HWI case
+     knowing that (a) all bits in those HWIs are significant and
+     (b) the result has room for at least two HWIs.  This provides
+     a fast path for things like offset_int and widest_int.
+
+     The STATIC_CONSTANT_P test prevents this path from being
+     used for wide_ints.  wide_ints with precisions greater than
+     HOST_BITS_PER_WIDE_INT are relatively rare and there's not much
+     point handling them inline.  */
+  else if (STATIC_CONSTANT_P (precision > HOST_BITS_PER_WIDE_INT)
+	   && __builtin_expect (xi.len + yi.len == 2, true))
+    {
+      unsigned HOST_WIDE_INT xl = xi.ulow ();
+      unsigned HOST_WIDE_INT yl = yi.ulow ();
+      unsigned HOST_WIDE_INT resultl = xl + yl;
+      val[0] = resultl;
+      val[1] = (HOST_WIDE_INT) resultl < 0 ? 0 : -1;
+      result.set_len (1 + (((resultl ^ xl) & (resultl ^ yl))
+			   >> (HOST_BITS_PER_WIDE_INT - 1)));
+    }
+  else
+    result.set_len (add_large (val, xi.val, xi.len,
+			       yi.val, yi.len, precision,
+			       UNSIGNED, 0));
+  return result;
+}
+
+/* Return X + Y.  Treat X and Y as having the signednes given by SGN
+   and indicate in *OVERFLOW whether the operation overflowed.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::add (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
+{
+  WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
+  unsigned int precision = get_precision (result);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y, precision);
+  if (precision <= HOST_BITS_PER_WIDE_INT)
+    {
+      unsigned HOST_WIDE_INT xl = xi.ulow ();
+      unsigned HOST_WIDE_INT yl = yi.ulow ();
+      unsigned HOST_WIDE_INT resultl = xl + yl;
+      if (sgn == SIGNED)
+	{
+	  if ((((resultl ^ xl) & (resultl ^ yl))
+	       >> (precision - 1)) & 1)
+	    {
+	      if (xl > resultl)
+		*overflow = OVF_UNDERFLOW;
+	      else if (xl < resultl)
+		*overflow = OVF_OVERFLOW;
+	      else
+		*overflow = OVF_NONE;
+	    }
+	  else
+	    *overflow = OVF_NONE;
+	}
+      else
+	*overflow = ((resultl << (HOST_BITS_PER_WIDE_INT - precision))
+		     < (xl << (HOST_BITS_PER_WIDE_INT - precision)))
+	  ? OVF_OVERFLOW : OVF_NONE;
+      val[0] = resultl;
+      result.set_len (1);
+    }
+  else
+    result.set_len (add_large (val, xi.val, xi.len,
+			       yi.val, yi.len, precision,
+			       sgn, overflow));
+  return result;
+}
+
+/* Return X - Y.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::sub (const T1 &x, const T2 &y)
+{
+  WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
+  unsigned int precision = get_precision (result);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y, precision);
+  if (precision <= HOST_BITS_PER_WIDE_INT)
+    {
+      val[0] = xi.ulow () - yi.ulow ();
+      result.set_len (1);
+    }
+  /* If the precision is known at compile time to be greater than
+     HOST_BITS_PER_WIDE_INT, we can optimize the single-HWI case
+     knowing that (a) all bits in those HWIs are significant and
+     (b) the result has room for at least two HWIs.  This provides
+     a fast path for things like offset_int and widest_int.
+
+     The STATIC_CONSTANT_P test prevents this path from being
+     used for wide_ints.  wide_ints with precisions greater than
+     HOST_BITS_PER_WIDE_INT are relatively rare and there's not much
+     point handling them inline.  */
+  else if (STATIC_CONSTANT_P (precision > HOST_BITS_PER_WIDE_INT)
+	   && __builtin_expect (xi.len + yi.len == 2, true))
+    {
+      unsigned HOST_WIDE_INT xl = xi.ulow ();
+      unsigned HOST_WIDE_INT yl = yi.ulow ();
+      unsigned HOST_WIDE_INT resultl = xl - yl;
+      val[0] = resultl;
+      val[1] = (HOST_WIDE_INT) resultl < 0 ? 0 : -1;
+      result.set_len (1 + (((resultl ^ xl) & (xl ^ yl))
+			   >> (HOST_BITS_PER_WIDE_INT - 1)));
+    }
+  else
+    result.set_len (sub_large (val, xi.val, xi.len,
+			       yi.val, yi.len, precision,
+			       UNSIGNED, 0));
+  return result;
+}
+
+/* Return X - Y.  Treat X and Y as having the signednes given by SGN
+   and indicate in *OVERFLOW whether the operation overflowed.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::sub (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
+{
+  WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
+  unsigned int precision = get_precision (result);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y, precision);
+  if (precision <= HOST_BITS_PER_WIDE_INT)
+    {
+      unsigned HOST_WIDE_INT xl = xi.ulow ();
+      unsigned HOST_WIDE_INT yl = yi.ulow ();
+      unsigned HOST_WIDE_INT resultl = xl - yl;
+      if (sgn == SIGNED)
+	{
+	  if ((((xl ^ yl) & (resultl ^ xl)) >> (precision - 1)) & 1)
+	    {
+	      if (xl > yl)
+		*overflow = OVF_UNDERFLOW;
+	      else if (xl < yl)
+		*overflow = OVF_OVERFLOW;
+	      else
+		*overflow = OVF_NONE;
+	    }
+	  else
+	    *overflow = OVF_NONE;
+	}
+      else
+	*overflow = ((resultl << (HOST_BITS_PER_WIDE_INT - precision))
+		     > (xl << (HOST_BITS_PER_WIDE_INT - precision)))
+	  ? OVF_UNDERFLOW : OVF_NONE;
+      val[0] = resultl;
+      result.set_len (1);
+    }
+  else
+    result.set_len (sub_large (val, xi.val, xi.len,
+			       yi.val, yi.len, precision,
+			       sgn, overflow));
+  return result;
+}
+
+/* Return X * Y.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::mul (const T1 &x, const T2 &y)
+{
+  WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
+  unsigned int precision = get_precision (result);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y, precision);
+  if (precision <= HOST_BITS_PER_WIDE_INT)
+    {
+      val[0] = xi.ulow () * yi.ulow ();
+      result.set_len (1);
+    }
+  else
+    result.set_len (mul_internal (val, xi.val, xi.len, yi.val, yi.len,
+				  precision, UNSIGNED, 0, false));
+  return result;
+}
+
+/* Return X * Y.  Treat X and Y as having the signednes given by SGN
+   and indicate in *OVERFLOW whether the operation overflowed.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::mul (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
+{
+  WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
+  unsigned int precision = get_precision (result);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y, precision);
+  result.set_len (mul_internal (val, xi.val, xi.len,
+				yi.val, yi.len, precision,
+				sgn, overflow, false));
+  return result;
+}
+
+/* Return X * Y, treating both X and Y as signed values.  Indicate in
+   *OVERFLOW whether the operation overflowed.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::smul (const T1 &x, const T2 &y, overflow_type *overflow)
+{
+  return mul (x, y, SIGNED, overflow);
+}
+
+/* Return X * Y, treating both X and Y as unsigned values.  Indicate in
+  *OVERFLOW if the result overflows.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::umul (const T1 &x, const T2 &y, overflow_type *overflow)
+{
+  return mul (x, y, UNSIGNED, overflow);
+}
+
+/* Perform a widening multiplication of X and Y, extending the values
+   according to SGN, and return the high part of the result.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::mul_high (const T1 &x, const T2 &y, signop sgn)
+{
+  WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
+  unsigned int precision = get_precision (result);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y, precision);
+  result.set_len (mul_internal (val, xi.val, xi.len,
+				yi.val, yi.len, precision,
+				sgn, 0, true));
+  return result;
+}
+
+/* Return X / Y, rouding towards 0.  Treat X and Y as having the
+   signedness given by SGN.  Indicate in *OVERFLOW if the result
+   overflows.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::div_trunc (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
+{
+  WI_BINARY_RESULT_VAR (quotient, quotient_val, T1, x, T2, y);
+  unsigned int precision = get_precision (quotient);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y);
+
+  quotient.set_len (divmod_internal (quotient_val, 0, 0, xi.val, xi.len,
+				     precision,
+				     yi.val, yi.len, yi.precision,
+				     sgn, overflow));
+  return quotient;
+}
+
+/* Return X / Y, rouding towards 0.  Treat X and Y as signed values.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::sdiv_trunc (const T1 &x, const T2 &y)
+{
+  return div_trunc (x, y, SIGNED);
+}
+
+/* Return X / Y, rouding towards 0.  Treat X and Y as unsigned values.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::udiv_trunc (const T1 &x, const T2 &y)
+{
+  return div_trunc (x, y, UNSIGNED);
+}
+
+/* Return X / Y, rouding towards -inf.  Treat X and Y as having the
+   signedness given by SGN.  Indicate in *OVERFLOW if the result
+   overflows.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::div_floor (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
+{
+  WI_BINARY_RESULT_VAR (quotient, quotient_val, T1, x, T2, y);
+  WI_BINARY_RESULT_VAR (remainder, remainder_val, T1, x, T2, y);
+  unsigned int precision = get_precision (quotient);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y);
+
+  unsigned int remainder_len;
+  quotient.set_len (divmod_internal (quotient_val,
+				     &remainder_len, remainder_val,
+				     xi.val, xi.len, precision,
+				     yi.val, yi.len, yi.precision, sgn,
+				     overflow));
+  remainder.set_len (remainder_len);
+  if (wi::neg_p (x, sgn) != wi::neg_p (y, sgn) && remainder != 0)
+    return quotient - 1;
+  return quotient;
+}
+
+/* Return X / Y, rouding towards -inf.  Treat X and Y as signed values.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::sdiv_floor (const T1 &x, const T2 &y)
+{
+  return div_floor (x, y, SIGNED);
+}
+
+/* Return X / Y, rouding towards -inf.  Treat X and Y as unsigned values.  */
+/* ??? Why do we have both this and udiv_trunc.  Aren't they the same?  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::udiv_floor (const T1 &x, const T2 &y)
+{
+  return div_floor (x, y, UNSIGNED);
+}
+
+/* Return X / Y, rouding towards +inf.  Treat X and Y as having the
+   signedness given by SGN.  Indicate in *OVERFLOW if the result
+   overflows.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::div_ceil (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
+{
+  WI_BINARY_RESULT_VAR (quotient, quotient_val, T1, x, T2, y);
+  WI_BINARY_RESULT_VAR (remainder, remainder_val, T1, x, T2, y);
+  unsigned int precision = get_precision (quotient);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y);
+
+  unsigned int remainder_len;
+  quotient.set_len (divmod_internal (quotient_val,
+				     &remainder_len, remainder_val,
+				     xi.val, xi.len, precision,
+				     yi.val, yi.len, yi.precision, sgn,
+				     overflow));
+  remainder.set_len (remainder_len);
+  if (wi::neg_p (x, sgn) == wi::neg_p (y, sgn) && remainder != 0)
+    return quotient + 1;
+  return quotient;
+}
+
+/* Return X / Y, rouding towards +inf.  Treat X and Y as unsigned values.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::udiv_ceil (const T1 &x, const T2 &y)
+{
+  return div_ceil (x, y, UNSIGNED);
+}
+
+/* Return X / Y, rouding towards nearest with ties away from zero.
+   Treat X and Y as having the signedness given by SGN.  Indicate
+   in *OVERFLOW if the result overflows.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::div_round (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
+{
+  WI_BINARY_RESULT_VAR (quotient, quotient_val, T1, x, T2, y);
+  WI_BINARY_RESULT_VAR (remainder, remainder_val, T1, x, T2, y);
+  unsigned int precision = get_precision (quotient);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y);
+
+  unsigned int remainder_len;
+  quotient.set_len (divmod_internal (quotient_val,
+				     &remainder_len, remainder_val,
+				     xi.val, xi.len, precision,
+				     yi.val, yi.len, yi.precision, sgn,
+				     overflow));
+  remainder.set_len (remainder_len);
+
+  if (remainder != 0)
+    {
+      if (sgn == SIGNED)
+	{
+	  WI_BINARY_RESULT (T1, T2) abs_remainder = wi::abs (remainder);
+	  if (wi::geu_p (abs_remainder, wi::sub (wi::abs (y), abs_remainder)))
+	    {
+	      if (wi::neg_p (x, sgn) != wi::neg_p (y, sgn))
+		return quotient - 1;
+	      else
+		return quotient + 1;
+	    }
+	}
+      else
+	{
+	  if (wi::geu_p (remainder, wi::sub (y, remainder)))
+	    return quotient + 1;
+	}
+    }
+  return quotient;
+}
+
+/* Return X / Y, rouding towards 0.  Treat X and Y as having the
+   signedness given by SGN.  Store the remainder in *REMAINDER_PTR.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::divmod_trunc (const T1 &x, const T2 &y, signop sgn,
+		  WI_BINARY_RESULT (T1, T2) *remainder_ptr)
+{
+  WI_BINARY_RESULT_VAR (quotient, quotient_val, T1, x, T2, y);
+  WI_BINARY_RESULT_VAR (remainder, remainder_val, T1, x, T2, y);
+  unsigned int precision = get_precision (quotient);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y);
+
+  unsigned int remainder_len;
+  quotient.set_len (divmod_internal (quotient_val,
+				     &remainder_len, remainder_val,
+				     xi.val, xi.len, precision,
+				     yi.val, yi.len, yi.precision, sgn, 0));
+  remainder.set_len (remainder_len);
+
+  *remainder_ptr = remainder;
+  return quotient;
+}
+
+/* Compute the greatest common divisor of two numbers A and B using
+   Euclid's algorithm.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::gcd (const T1 &a, const T2 &b, signop sgn)
+{
+  T1 x, y, z;
+
+  x = wi::abs (a);
+  y = wi::abs (b);
+
+  while (gt_p (x, 0, sgn))
+    {
+      z = mod_trunc (y, x, sgn);
+      y = x;
+      x = z;
+    }
+
+  return y;
+}
+
+/* Compute X / Y, rouding towards 0, and return the remainder.
+   Treat X and Y as having the signedness given by SGN.  Indicate
+   in *OVERFLOW if the division overflows.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::mod_trunc (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
+{
+  WI_BINARY_RESULT_VAR (remainder, remainder_val, T1, x, T2, y);
+  unsigned int precision = get_precision (remainder);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y);
+
+  unsigned int remainder_len;
+  divmod_internal (0, &remainder_len, remainder_val,
+		   xi.val, xi.len, precision,
+		   yi.val, yi.len, yi.precision, sgn, overflow);
+  remainder.set_len (remainder_len);
+
+  return remainder;
+}
+
+/* Compute X / Y, rouding towards 0, and return the remainder.
+   Treat X and Y as signed values.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::smod_trunc (const T1 &x, const T2 &y)
+{
+  return mod_trunc (x, y, SIGNED);
+}
+
+/* Compute X / Y, rouding towards 0, and return the remainder.
+   Treat X and Y as unsigned values.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::umod_trunc (const T1 &x, const T2 &y)
+{
+  return mod_trunc (x, y, UNSIGNED);
+}
+
+/* Compute X / Y, rouding towards -inf, and return the remainder.
+   Treat X and Y as having the signedness given by SGN.  Indicate
+   in *OVERFLOW if the division overflows.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::mod_floor (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
+{
+  WI_BINARY_RESULT_VAR (quotient, quotient_val, T1, x, T2, y);
+  WI_BINARY_RESULT_VAR (remainder, remainder_val, T1, x, T2, y);
+  unsigned int precision = get_precision (quotient);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y);
+
+  unsigned int remainder_len;
+  quotient.set_len (divmod_internal (quotient_val,
+				     &remainder_len, remainder_val,
+				     xi.val, xi.len, precision,
+				     yi.val, yi.len, yi.precision, sgn,
+				     overflow));
+  remainder.set_len (remainder_len);
+
+  if (wi::neg_p (x, sgn) != wi::neg_p (y, sgn) && remainder != 0)
+    return remainder + y;
+  return remainder;
+}
+
+/* Compute X / Y, rouding towards -inf, and return the remainder.
+   Treat X and Y as unsigned values.  */
+/* ??? Why do we have both this and umod_trunc.  Aren't they the same?  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::umod_floor (const T1 &x, const T2 &y)
+{
+  return mod_floor (x, y, UNSIGNED);
+}
+
+/* Compute X / Y, rouding towards +inf, and return the remainder.
+   Treat X and Y as having the signedness given by SGN.  Indicate
+   in *OVERFLOW if the division overflows.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::mod_ceil (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
+{
+  WI_BINARY_RESULT_VAR (quotient, quotient_val, T1, x, T2, y);
+  WI_BINARY_RESULT_VAR (remainder, remainder_val, T1, x, T2, y);
+  unsigned int precision = get_precision (quotient);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y);
+
+  unsigned int remainder_len;
+  quotient.set_len (divmod_internal (quotient_val,
+				     &remainder_len, remainder_val,
+				     xi.val, xi.len, precision,
+				     yi.val, yi.len, yi.precision, sgn,
+				     overflow));
+  remainder.set_len (remainder_len);
+
+  if (wi::neg_p (x, sgn) == wi::neg_p (y, sgn) && remainder != 0)
+    return remainder - y;
+  return remainder;
+}
+
+/* Compute X / Y, rouding towards nearest with ties away from zero,
+   and return the remainder.  Treat X and Y as having the signedness
+   given by SGN.  Indicate in *OVERFLOW if the division overflows.  */
+template <typename T1, typename T2>
+inline WI_BINARY_RESULT (T1, T2)
+wi::mod_round (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
+{
+  WI_BINARY_RESULT_VAR (quotient, quotient_val, T1, x, T2, y);
+  WI_BINARY_RESULT_VAR (remainder, remainder_val, T1, x, T2, y);
+  unsigned int precision = get_precision (quotient);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y);
+
+  unsigned int remainder_len;
+  quotient.set_len (divmod_internal (quotient_val,
+				     &remainder_len, remainder_val,
+				     xi.val, xi.len, precision,
+				     yi.val, yi.len, yi.precision, sgn,
+				     overflow));
+  remainder.set_len (remainder_len);
+
+  if (remainder != 0)
+    {
+      if (sgn == SIGNED)
+	{
+	  WI_BINARY_RESULT (T1, T2) abs_remainder = wi::abs (remainder);
+	  if (wi::geu_p (abs_remainder, wi::sub (wi::abs (y), abs_remainder)))
+	    {
+	      if (wi::neg_p (x, sgn) != wi::neg_p (y, sgn))
+		return remainder + y;
+	      else
+		return remainder - y;
+	    }
+	}
+      else
+	{
+	  if (wi::geu_p (remainder, wi::sub (y, remainder)))
+	    return remainder - y;
+	}
+    }
+  return remainder;
+}
+
+/* Return true if X is a multiple of Y.  Treat X and Y as having the
+   signedness given by SGN.  */
+template <typename T1, typename T2>
+inline bool
+wi::multiple_of_p (const T1 &x, const T2 &y, signop sgn)
+{
+  return wi::mod_trunc (x, y, sgn) == 0;
+}
+
+/* Return true if X is a multiple of Y, storing X / Y in *RES if so.
+   Treat X and Y as having the signedness given by SGN.  */
+template <typename T1, typename T2>
+inline bool
+wi::multiple_of_p (const T1 &x, const T2 &y, signop sgn,
+		   WI_BINARY_RESULT (T1, T2) *res)
+{
+  WI_BINARY_RESULT (T1, T2) remainder;
+  WI_BINARY_RESULT (T1, T2) quotient
+    = divmod_trunc (x, y, sgn, &remainder);
+  if (remainder == 0)
+    {
+      *res = quotient;
+      return true;
+    }
+  return false;
+}
+
+/* Return X << Y.  Return 0 if Y is greater than or equal to
+   the precision of X.  */
+template <typename T1, typename T2>
+inline WI_UNARY_RESULT (T1)
+wi::lshift (const T1 &x, const T2 &y)
+{
+  WI_UNARY_RESULT_VAR (result, val, T1, x);
+  unsigned int precision = get_precision (result);
+  WIDE_INT_REF_FOR (T1) xi (x, precision);
+  WIDE_INT_REF_FOR (T2) yi (y);
+  /* Handle the simple cases quickly.   */
+  if (geu_p (yi, precision))
+    {
+      val[0] = 0;
+      result.set_len (1);
+    }
+  else
+    {
+      unsigned int shift = yi.to_uhwi ();
+      /* For fixed-precision integers like offset_int and widest_int,
+	 handle the case where the shift value is constant and the
+	 result is a single nonnegative HWI (meaning that we don't
+	 need to worry about val[1]).  This is particularly common
+	 for converting a byte count to a bit count.
+
+	 For variable-precision integers like wide_int, handle HWI
+	 and sub-HWI integers inline.  */
+      if (STATIC_CONSTANT_P (xi.precision > HOST_BITS_PER_WIDE_INT)
+	  ? (STATIC_CONSTANT_P (shift < HOST_BITS_PER_WIDE_INT - 1)
+	     && xi.len == 1
+	     && xi.val[0] <= (HOST_WIDE_INT) ((unsigned HOST_WIDE_INT)
+					      HOST_WIDE_INT_MAX >> shift))
+	  : precision <= HOST_BITS_PER_WIDE_INT)
+	{
+	  val[0] = xi.ulow () << shift;
+	  result.set_len (1);
+	}
+      else
+	result.set_len (lshift_large (val, xi.val, xi.len,
+				      precision, shift));
+    }
+  return result;
+}
+
+/* Return X >> Y, using a logical shift.  Return 0 if Y is greater than
+   or equal to the precision of X.  */
+template <typename T1, typename T2>
+inline WI_UNARY_RESULT (T1)
+wi::lrshift (const T1 &x, const T2 &y)
+{
+  WI_UNARY_RESULT_VAR (result, val, T1, x);
+  /* Do things in the precision of the input rather than the output,
+     since the result can be no larger than that.  */
+  WIDE_INT_REF_FOR (T1) xi (x);
+  WIDE_INT_REF_FOR (T2) yi (y);
+  /* Handle the simple cases quickly.   */
+  if (geu_p (yi, xi.precision))
+    {
+      val[0] = 0;
+      result.set_len (1);
+    }
+  else
+    {
+      unsigned int shift = yi.to_uhwi ();
+      /* For fixed-precision integers like offset_int and widest_int,
+	 handle the case where the shift value is constant and the
+	 shifted value is a single nonnegative HWI (meaning that all
+	 bits above the HWI are zero).  This is particularly common
+	 for converting a bit count to a byte count.
+
+	 For variable-precision integers like wide_int, handle HWI
+	 and sub-HWI integers inline.  */
+      if (STATIC_CONSTANT_P (xi.precision > HOST_BITS_PER_WIDE_INT)
+	  ? (shift < HOST_BITS_PER_WIDE_INT
+	     && xi.len == 1
+	     && xi.val[0] >= 0)
+	  : xi.precision <= HOST_BITS_PER_WIDE_INT)
+	{
+	  val[0] = xi.to_uhwi () >> shift;
+	  result.set_len (1);
+	}
+      else
+	result.set_len (lrshift_large (val, xi.val, xi.len, xi.precision,
+				       get_precision (result), shift));
+    }
+  return result;
+}
+
+/* Return X >> Y, using an arithmetic shift.  Return a sign mask if
+   Y is greater than or equal to the precision of X.  */
+template <typename T1, typename T2>
+inline WI_UNARY_RESULT (T1)
+wi::arshift (const T1 &x, const T2 &y)
+{
+  WI_UNARY_RESULT_VAR (result, val, T1, x);
+  /* Do things in the precision of the input rather than the output,
+     since the result can be no larger than that.  */
+  WIDE_INT_REF_FOR (T1) xi (x);
+  WIDE_INT_REF_FOR (T2) yi (y);
+  /* Handle the simple cases quickly.   */
+  if (geu_p (yi, xi.precision))
+    {
+      val[0] = sign_mask (x);
+      result.set_len (1);
+    }
+  else
+    {
+      unsigned int shift = yi.to_uhwi ();
+      if (xi.precision <= HOST_BITS_PER_WIDE_INT)
+	{
+	  val[0] = sext_hwi (xi.ulow () >> shift, xi.precision - shift);
+	  result.set_len (1, true);
+	}
+      else
+	result.set_len (arshift_large (val, xi.val, xi.len, xi.precision,
+				       get_precision (result), shift));
+    }
+  return result;
+}
+
+/* Return X >> Y, using an arithmetic shift if SGN is SIGNED and a
+   logical shift otherwise.  */
+template <typename T1, typename T2>
+inline WI_UNARY_RESULT (T1)
+wi::rshift (const T1 &x, const T2 &y, signop sgn)
+{
+  if (sgn == UNSIGNED)
+    return lrshift (x, y);
+  else
+    return arshift (x, y);
+}
+
+/* Return the result of rotating the low WIDTH bits of X left by Y
+   bits and zero-extending the result.  Use a full-width rotate if
+   WIDTH is zero.  */
+template <typename T1, typename T2>
+WI_UNARY_RESULT (T1)
+wi::lrotate (const T1 &x, const T2 &y, unsigned int width)
+{
+  unsigned int precision = get_binary_precision (x, x);
+  if (width == 0)
+    width = precision;
+  WI_UNARY_RESULT (T2) ymod = umod_trunc (y, width);
+  WI_UNARY_RESULT (T1) left = wi::lshift (x, ymod);
+  WI_UNARY_RESULT (T1) right = wi::lrshift (x, wi::sub (width, ymod));
+  if (width != precision)
+    return wi::zext (left, width) | wi::zext (right, width);
+  return left | right;
+}
+
+/* Return the result of rotating the low WIDTH bits of X right by Y
+   bits and zero-extending the result.  Use a full-width rotate if
+   WIDTH is zero.  */
+template <typename T1, typename T2>
+WI_UNARY_RESULT (T1)
+wi::rrotate (const T1 &x, const T2 &y, unsigned int width)
+{
+  unsigned int precision = get_binary_precision (x, x);
+  if (width == 0)
+    width = precision;
+  WI_UNARY_RESULT (T2) ymod = umod_trunc (y, width);
+  WI_UNARY_RESULT (T1) right = wi::lrshift (x, ymod);
+  WI_UNARY_RESULT (T1) left = wi::lshift (x, wi::sub (width, ymod));
+  if (width != precision)
+    return wi::zext (left, width) | wi::zext (right, width);
+  return left | right;
+}
+
+/* Return 0 if the number of 1s in X is even and 1 if the number of 1s
+   is odd.  */
+inline int
+wi::parity (const wide_int_ref &x)
+{
+  return popcount (x) & 1;
+}
+
+/* Extract WIDTH bits from X, starting at BITPOS.  */
+template <typename T>
+inline unsigned HOST_WIDE_INT
+wi::extract_uhwi (const T &x, unsigned int bitpos, unsigned int width)
+{
+  unsigned precision = get_precision (x);
+  if (precision < bitpos + width)
+    precision = bitpos + width;
+  WIDE_INT_REF_FOR (T) xi (x, precision);
+
+  /* Handle this rare case after the above, so that we assert about
+     bogus BITPOS values.  */
+  if (width == 0)
+    return 0;
+
+  unsigned int start = bitpos / HOST_BITS_PER_WIDE_INT;
+  unsigned int shift = bitpos % HOST_BITS_PER_WIDE_INT;
+  unsigned HOST_WIDE_INT res = xi.elt (start);
+  res >>= shift;
+  if (shift + width > HOST_BITS_PER_WIDE_INT)
+    {
+      unsigned HOST_WIDE_INT upper = xi.elt (start + 1);
+      res |= upper << (-shift % HOST_BITS_PER_WIDE_INT);
+    }
+  return zext_hwi (res, width);
+}
+
+/* Return the minimum precision needed to store X with sign SGN.  */
+template <typename T>
+inline unsigned int
+wi::min_precision (const T &x, signop sgn)
+{
+  if (sgn == SIGNED)
+    return get_precision (x) - clrsb (x);
+  else
+    return get_precision (x) - clz (x);
+}
+
+#define SIGNED_BINARY_PREDICATE(OP, F)			\
+  template <typename T1, typename T2>			\
+    inline WI_SIGNED_BINARY_PREDICATE_RESULT (T1, T2)	\
+    OP (const T1 &x, const T2 &y)			\
+    {							\
+      return wi::F (x, y);				\
+    }
+
+SIGNED_BINARY_PREDICATE (operator <, lts_p)
+SIGNED_BINARY_PREDICATE (operator <=, les_p)
+SIGNED_BINARY_PREDICATE (operator >, gts_p)
+SIGNED_BINARY_PREDICATE (operator >=, ges_p)
+
+#undef SIGNED_BINARY_PREDICATE
+
+#define UNARY_OPERATOR(OP, F) \
+  template<typename T> \
+  WI_UNARY_RESULT (generic_wide_int<T>) \
+  OP (const generic_wide_int<T> &x) \
+  { \
+    return wi::F (x); \
+  }
+
+#define BINARY_PREDICATE(OP, F) \
+  template<typename T1, typename T2> \
+  WI_BINARY_PREDICATE_RESULT (T1, T2) \
+  OP (const T1 &x, const T2 &y) \
+  { \
+    return wi::F (x, y); \
+  }
+
+#define BINARY_OPERATOR(OP, F) \
+  template<typename T1, typename T2> \
+  WI_BINARY_OPERATOR_RESULT (T1, T2) \
+  OP (const T1 &x, const T2 &y) \
+  { \
+    return wi::F (x, y); \
+  }
+
+#define SHIFT_OPERATOR(OP, F) \
+  template<typename T1, typename T2> \
+  WI_BINARY_OPERATOR_RESULT (T1, T1) \
+  OP (const T1 &x, const T2 &y) \
+  { \
+    return wi::F (x, y); \
+  }
+
+UNARY_OPERATOR (operator ~, bit_not)
+UNARY_OPERATOR (operator -, neg)
+BINARY_PREDICATE (operator ==, eq_p)
+BINARY_PREDICATE (operator !=, ne_p)
+BINARY_OPERATOR (operator &, bit_and)
+BINARY_OPERATOR (operator |, bit_or)
+BINARY_OPERATOR (operator ^, bit_xor)
+BINARY_OPERATOR (operator +, add)
+BINARY_OPERATOR (operator -, sub)
+BINARY_OPERATOR (operator *, mul)
+SHIFT_OPERATOR (operator <<, lshift)
+
+#undef UNARY_OPERATOR
+#undef BINARY_PREDICATE
+#undef BINARY_OPERATOR
+#undef SHIFT_OPERATOR
+
+template <typename T1, typename T2>
+inline WI_SIGNED_SHIFT_RESULT (T1, T2)
+operator >> (const T1 &x, const T2 &y)
+{
+  return wi::arshift (x, y);
+}
+
+template <typename T1, typename T2>
+inline WI_SIGNED_SHIFT_RESULT (T1, T2)
+operator / (const T1 &x, const T2 &y)
+{
+  return wi::sdiv_trunc (x, y);
+}
+
+template <typename T1, typename T2>
+inline WI_SIGNED_SHIFT_RESULT (T1, T2)
+operator % (const T1 &x, const T2 &y)
+{
+  return wi::smod_trunc (x, y);
+}
+
+template<typename T>
+void
+gt_ggc_mx (generic_wide_int <T> *)
+{
+}
+
+template<typename T>
+void
+gt_pch_nx (generic_wide_int <T> *)
+{
+}
+
+template<typename T>
+void
+gt_pch_nx (generic_wide_int <T> *, void (*) (void *, void *), void *)
+{
+}
+
+template<int N>
+void
+gt_ggc_mx (trailing_wide_ints <N> *)
+{
+}
+
+template<int N>
+void
+gt_pch_nx (trailing_wide_ints <N> *)
+{
+}
+
+template<int N>
+void
+gt_pch_nx (trailing_wide_ints <N> *, void (*) (void *, void *), void *)
+{
+}
+
+namespace wi
+{
+  /* Used for overloaded functions in which the only other acceptable
+     scalar type is a pointer.  It stops a plain 0 from being treated
+     as a null pointer.  */
+  struct never_used1 {};
+  struct never_used2 {};
+
+  wide_int min_value (unsigned int, signop);
+  wide_int min_value (never_used1 *);
+  wide_int min_value (never_used2 *);
+  wide_int max_value (unsigned int, signop);
+  wide_int max_value (never_used1 *);
+  wide_int max_value (never_used2 *);
+
+  /* FIXME: this is target dependent, so should be elsewhere.
+     It also seems to assume that CHAR_BIT == BITS_PER_UNIT.  */
+  wide_int from_buffer (const unsigned char *, unsigned int);
+
+#ifndef GENERATOR_FILE
+  void to_mpz (const wide_int_ref &, mpz_t, signop);
+#endif
+
+  wide_int mask (unsigned int, bool, unsigned int);
+  wide_int shifted_mask (unsigned int, unsigned int, bool, unsigned int);
+  wide_int set_bit_in_zero (unsigned int, unsigned int);
+  wide_int insert (const wide_int &x, const wide_int &y, unsigned int,
+		   unsigned int);
+  wide_int round_down_for_mask (const wide_int &, const wide_int &);
+  wide_int round_up_for_mask (const wide_int &, const wide_int &);
+
+  template <typename T>
+  T mask (unsigned int, bool);
+
+  template <typename T>
+  T shifted_mask (unsigned int, unsigned int, bool);
+
+  template <typename T>
+  T set_bit_in_zero (unsigned int);
+
+  unsigned int mask (HOST_WIDE_INT *, unsigned int, bool, unsigned int);
+  unsigned int shifted_mask (HOST_WIDE_INT *, unsigned int, unsigned int,
+			     bool, unsigned int);
+  unsigned int from_array (HOST_WIDE_INT *, const HOST_WIDE_INT *,
+			   unsigned int, unsigned int, bool);
+}
+
+/* Return a PRECISION-bit integer in which the low WIDTH bits are set
+   and the other bits are clear, or the inverse if NEGATE_P.  */
+inline wide_int
+wi::mask (unsigned int width, bool negate_p, unsigned int precision)
+{
+  wide_int result = wide_int::create (precision);
+  result.set_len (mask (result.write_val (), width, negate_p, precision));
+  return result;
+}
+
+/* Return a PRECISION-bit integer in which the low START bits are clear,
+   the next WIDTH bits are set, and the other bits are clear,
+   or the inverse if NEGATE_P.  */
+inline wide_int
+wi::shifted_mask (unsigned int start, unsigned int width, bool negate_p,
+		  unsigned int precision)
+{
+  wide_int result = wide_int::create (precision);
+  result.set_len (shifted_mask (result.write_val (), start, width, negate_p,
+				precision));
+  return result;
+}
+
+/* Return a PRECISION-bit integer in which bit BIT is set and all the
+   others are clear.  */
+inline wide_int
+wi::set_bit_in_zero (unsigned int bit, unsigned int precision)
+{
+  return shifted_mask (bit, 1, false, precision);
+}
+
+/* Return an integer of type T in which the low WIDTH bits are set
+   and the other bits are clear, or the inverse if NEGATE_P.  */
+template <typename T>
+inline T
+wi::mask (unsigned int width, bool negate_p)
+{
+  STATIC_ASSERT (wi::int_traits<T>::precision);
+  T result;
+  result.set_len (mask (result.write_val (), width, negate_p,
+			wi::int_traits <T>::precision));
+  return result;
+}
+
+/* Return an integer of type T in which the low START bits are clear,
+   the next WIDTH bits are set, and the other bits are clear, or the
+   inverse if NEGATE_P.  */
+template <typename T>
+inline T
+wi::shifted_mask (unsigned int start, unsigned int width, bool negate_p)
+{
+  STATIC_ASSERT (wi::int_traits<T>::precision);
+  T result;
+  result.set_len (shifted_mask (result.write_val (), start, width,
+				negate_p,
+				wi::int_traits <T>::precision));
+  return result;
+}
+
+/* Return an integer of type T in which bit BIT is set and all the
+   others are clear.  */
+template <typename T>
+inline T
+wi::set_bit_in_zero (unsigned int bit)
+{
+  return shifted_mask <T> (bit, 1, false);
+}
+
+/* Accumulate a set of overflows into OVERFLOW.  */
+
+static inline void
+wi::accumulate_overflow (wi::overflow_type &overflow,
+			 wi::overflow_type suboverflow)
+{
+  if (!suboverflow)
+    return;
+  if (!overflow)
+    overflow = suboverflow;
+  else if (overflow != suboverflow)
+    overflow = wi::OVF_UNKNOWN;
+}
+
+#endif /* WIDE_INT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/xcoff.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/xcoff.h
new file mode 100644
index 0000000..3e01d54
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/xcoff.h
@@ -0,0 +1,40 @@
+/* Copyright (C) 2003-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_XCOFF_H
+#define GCC_XCOFF_H
+
+/* Storage classes in XCOFF object file format designed for DBX's use.
+   This info is from the `Files Reference' manual for IBM's AIX version 3
+   for the RS6000.  */
+
+#define C_GSYM		0x80
+#define C_LSYM		0x81
+#define C_PSYM		0x82
+#define C_RSYM		0x83
+#define C_RPSYM		0x84
+#define C_STSYM		0x85
+
+#define C_BCOMM		0x87
+#define C_ECOML		0x88
+#define C_ECOMM		0x89
+#define C_DECL		0x8c
+#define C_ENTRY		0x8d
+#define C_FUN		0x8e
+
+#endif /* GCC_XCOFF_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/include/xcoffout.h b/lib/gcc/aarch64-elf/9.1.1/plugin/include/xcoffout.h
new file mode 100644
index 0000000..d8a0312
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/include/xcoffout.h
@@ -0,0 +1,195 @@
+/* XCOFF definitions.  These are needed in dbxout.c, final.c,
+   and xcoffout.h.
+   Copyright (C) 1998-2019 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+#ifndef GCC_XCOFFOUT_H
+#define GCC_XCOFFOUT_H
+
+/* Tags and typedefs are C_DECL in XCOFF, not C_LSYM.  */
+
+#define DBX_TYPE_DECL_STABS_CODE N_DECL
+
+/* Use the XCOFF predefined type numbers.  */
+
+#define DBX_ASSIGN_FUNDAMENTAL_TYPE_NUMBER(TYPE) \
+  xcoff_assign_fundamental_type_number (TYPE)
+
+/* Any type with a negative type index has already been output.  */
+
+#define DBX_TYPE_DEFINED(TYPE) (TYPE_SYMTAB_ADDRESS (TYPE) < 0)
+
+/* Must use N_STSYM for static const variables (those in the text section)
+   instead of N_FUN.  */
+
+#define DBX_STATIC_CONST_VAR_CODE N_STSYM
+
+/* For static variables, output code to define the start of a static block.  */
+
+#define DBX_STATIC_BLOCK_START(ASMFILE,CODE)				\
+{									\
+  if ((CODE) == N_STSYM)						\
+    fprintf ((ASMFILE), "\t.bs\t%s[RW]\n", xcoff_private_data_section_name);\
+  else if ((CODE) == N_LCSYM)						\
+    fprintf ((ASMFILE), "\t.bs\t%s\n", xcoff_bss_section_name);	\
+}
+
+/* For static variables, output code to define the end of a static block.  */
+
+#define DBX_STATIC_BLOCK_END(ASMFILE,CODE)				\
+{									\
+  if ((CODE) == N_STSYM || (CODE) == N_LCSYM)				\
+    fputs ("\t.es\n", (ASMFILE));					\
+}
+
+/* We must use N_RPYSM instead of N_RSYM for register parameters.  */
+
+#define DBX_REGPARM_STABS_CODE N_RPSYM
+
+/* We must use 'R' instead of 'P' for register parameters.  */
+
+#define DBX_REGPARM_STABS_LETTER 'R'
+
+/* Define our own finish symbol function, since xcoff stabs have their
+   own different format.  */
+
+#define DBX_FINISH_STABS(SYM, CODE, LINE, ADDR, LABEL, NUMBER) do {	\
+  if (ADDR)								\
+    {									\
+      /* If we are writing a function name, we must emit a dot in	\
+	 order to refer to the function code, not its descriptor.  */	\
+      if (CODE == N_FUN)						\
+	putc ('.', asm_out_file);					\
+									\
+      /* If we are writing a function name, we must ensure that		\
+	 there is no storage-class suffix on the name.  */		\
+      if (CODE == N_FUN && GET_CODE (ADDR) == SYMBOL_REF)		\
+	{								\
+	  const char *_p = XSTR (ADDR, 0);				\
+	  if (*_p == '*')						\
+	    fputs (_p+1, asm_out_file);					\
+	  else								\
+	    for (; *_p != '[' && *_p; _p++)				\
+	      putc (*_p != '$' ? *_p : '_', asm_out_file);		\
+	}								\
+      else								\
+	output_addr_const (asm_out_file, ADDR);				\
+    }									\
+  /* Another special case: N_GSYM always gets the symbol name,		\
+     whether or not LABEL or NUMBER are set.  */			\
+  else if (CODE == N_GSYM)						\
+    assemble_name (asm_out_file, XSTR (XEXP (DECL_RTL (SYM), 0), 0));	\
+  else if (LABEL)							\
+    assemble_name (asm_out_file, LABEL);				\
+  else									\
+    dbxout_int (NUMBER);						\
+  putc (',', asm_out_file);						\
+  dbxout_int (stab_to_sclass (CODE));					\
+  fputs (",0\n", asm_out_file);						\
+} while (0)
+
+/* These are IBM XCOFF extensions we need to reference in dbxout.c
+   and xcoffout.c.  */
+
+/* AIX XCOFF uses this for typedefs.  This can have any value, since it is
+   only used for translation into a C_DECL storage class.  */
+#ifndef N_DECL
+#define N_DECL 0x8c
+#endif
+/* AIX XCOFF uses this for parameters passed in registers.  This can have
+   any value, since it is only used for translation into a C_RPSYM storage
+   class.  */
+#ifndef N_RPSYM
+#define N_RPSYM 0x8e
+#endif
+
+/* Name of the current include file.  */
+
+extern const char *xcoff_current_include_file;
+
+/* Names of bss and data sections.  These should be unique names for each
+   compilation unit.  */
+
+extern char *xcoff_bss_section_name;
+extern char *xcoff_private_data_section_name;
+extern char *xcoff_private_rodata_section_name;
+extern char *xcoff_tls_data_section_name;
+extern char *xcoff_tbss_section_name;
+extern char *xcoff_read_only_section_name;
+
+/* Last source file name mentioned in a NOTE insn.  */
+
+extern const char *xcoff_lastfile;
+
+/* Don't write out path name for main source file.  */
+#define NO_DBX_MAIN_SOURCE_DIRECTORY 1
+
+/* Write out main source file name using ".file" rather than ".stabs".
+   We don't actually do this here, because the assembler gets confused if there
+   is more than one .file directive.  rs6000_xcoff_file_start is already
+   emitting a .file directory, so we don't output one here also.
+   Initialize xcoff_lastfile.  */
+#define DBX_OUTPUT_MAIN_SOURCE_FILENAME(FILE,FILENAME) \
+  xcoff_lastfile = (FILENAME)
+
+/* If we are still in an include file, its end must be marked.  */
+#define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME)	\
+do {							\
+  if (xcoff_current_include_file)			\
+    {							\
+      fputs ("\t.ei\t", (FILE));			\
+      output_quoted_string ((FILE), xcoff_current_include_file);	\
+      putc ('\n', (FILE));				\
+      xcoff_current_include_file = NULL;		\
+    }							\
+} while (0)
+
+/* Do not emit any marker for XCOFF until assembler allows XFT_CV.  */
+#define NO_DBX_GCC_MARKER
+
+/* XCOFF32 maximum length is 64K; XLC limits to 16K.  */
+#define DBX_CONTIN_LENGTH 16384
+
+/* XLC uses '?' as continuation character.  */
+#define DBX_CONTIN_CHAR '?'
+
+/* Don't try to use the `x' type-cross-reference character in DBX data.
+   Also has the consequence of putting each struct, union or enum
+   into a separate .stabs, containing only cross-refs to the others.  */
+#define DBX_NO_XREFS
+
+/* We must put stabs in the text section.  If we don't the assembler
+   won't handle them correctly; it will sometimes put stabs where gdb
+   can't find them.  */
+
+#define DEBUG_SYMS_TEXT
+
+/* Prototype functions in xcoffout.c.  */
+
+extern int stab_to_sclass (int);
+extern void xcoffout_begin_prologue (unsigned int, unsigned int, const char *);
+extern void xcoffout_begin_block (unsigned, unsigned);
+extern void xcoffout_end_epilogue (unsigned int, const char *);
+extern void xcoffout_end_function (unsigned int);
+extern void xcoffout_end_block (unsigned, unsigned);
+extern int xcoff_assign_fundamental_type_number (tree);
+extern void xcoffout_declare_function (FILE *, tree, const char *);
+extern void xcoffout_source_line (unsigned int, unsigned int, const char *,
+				  int, bool);
+
+#endif /* GCC_XCOFFOUT_H */
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/libcc1plugin.la b/lib/gcc/aarch64-elf/9.1.1/plugin/libcc1plugin.la
new file mode 100755
index 0000000..430aa45
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/libcc1plugin.la
@@ -0,0 +1,41 @@
+# libcc1plugin.la - a libtool library file
+# Generated by libtool (GNU libtool 1.3134 2009-11-29) 2.2.7a
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='libcc1plugin.so.0'
+
+# Names of this library.
+library_names='libcc1plugin.so.0.0.0 libcc1plugin.so.0 libcc1plugin.so'
+
+# The name of the static archive.
+old_library=''
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags=''
+
+# Libraries that this one depends upon.
+dependency_libs=''
+
+# Names of additional weak libraries provided by this library
+weak_library_names=''
+
+# Version information for libcc1plugin.
+current=0
+age=0
+revision=0
+
+# Is this an already installed library?
+installed=yes
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=yes
+
+# Files to dlopen/dlpreopen
+dlopen=''
+dlpreopen=''
+
+# Directory that this library needs to be installed in:
+libdir='/home/arter97/arm64-gcc/lib/gcc/aarch64-elf/9.1.1/plugin'
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/libcc1plugin.so b/lib/gcc/aarch64-elf/9.1.1/plugin/libcc1plugin.so
new file mode 120000
index 0000000..a5ef364
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/libcc1plugin.so
@@ -0,0 +1 @@
+libcc1plugin.so.0.0.0
\ No newline at end of file
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/libcc1plugin.so.0 b/lib/gcc/aarch64-elf/9.1.1/plugin/libcc1plugin.so.0
new file mode 120000
index 0000000..a5ef364
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/libcc1plugin.so.0
@@ -0,0 +1 @@
+libcc1plugin.so.0.0.0
\ No newline at end of file
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/libcc1plugin.so.0.0.0 b/lib/gcc/aarch64-elf/9.1.1/plugin/libcc1plugin.so.0.0.0
new file mode 100755
index 0000000..67de8a6
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/libcc1plugin.so.0.0.0
Binary files differ
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/libcp1plugin.la b/lib/gcc/aarch64-elf/9.1.1/plugin/libcp1plugin.la
new file mode 100755
index 0000000..288af07
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/libcp1plugin.la
@@ -0,0 +1,41 @@
+# libcp1plugin.la - a libtool library file
+# Generated by libtool (GNU libtool 1.3134 2009-11-29) 2.2.7a
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='libcp1plugin.so.0'
+
+# Names of this library.
+library_names='libcp1plugin.so.0.0.0 libcp1plugin.so.0 libcp1plugin.so'
+
+# The name of the static archive.
+old_library=''
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags=''
+
+# Libraries that this one depends upon.
+dependency_libs=''
+
+# Names of additional weak libraries provided by this library
+weak_library_names=''
+
+# Version information for libcp1plugin.
+current=0
+age=0
+revision=0
+
+# Is this an already installed library?
+installed=yes
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=yes
+
+# Files to dlopen/dlpreopen
+dlopen=''
+dlpreopen=''
+
+# Directory that this library needs to be installed in:
+libdir='/home/arter97/arm64-gcc/lib/gcc/aarch64-elf/9.1.1/plugin'
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/libcp1plugin.so b/lib/gcc/aarch64-elf/9.1.1/plugin/libcp1plugin.so
new file mode 120000
index 0000000..2d0a58d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/libcp1plugin.so
@@ -0,0 +1 @@
+libcp1plugin.so.0.0.0
\ No newline at end of file
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/libcp1plugin.so.0 b/lib/gcc/aarch64-elf/9.1.1/plugin/libcp1plugin.so.0
new file mode 120000
index 0000000..2d0a58d
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/libcp1plugin.so.0
@@ -0,0 +1 @@
+libcp1plugin.so.0.0.0
\ No newline at end of file
diff --git a/lib/gcc/aarch64-elf/9.1.1/plugin/libcp1plugin.so.0.0.0 b/lib/gcc/aarch64-elf/9.1.1/plugin/libcp1plugin.so.0.0.0
new file mode 100755
index 0000000..6ac64b8
--- /dev/null
+++ b/lib/gcc/aarch64-elf/9.1.1/plugin/libcp1plugin.so.0.0.0
Binary files differ
diff --git a/lib/libaarch64-elf-sim.a b/lib/libaarch64-elf-sim.a
new file mode 100644
index 0000000..4c18105
--- /dev/null
+++ b/lib/libaarch64-elf-sim.a
Binary files differ
diff --git a/lib/libcc1.la b/lib/libcc1.la
new file mode 100755
index 0000000..d1af423
--- /dev/null
+++ b/lib/libcc1.la
@@ -0,0 +1,41 @@
+# libcc1.la - a libtool library file
+# Generated by libtool (GNU libtool 1.3134 2009-11-29) 2.2.7a
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='libcc1.so.0'
+
+# Names of this library.
+library_names='libcc1.so.0.0.0 libcc1.so.0 libcc1.so'
+
+# The name of the static archive.
+old_library=''
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags=''
+
+# Libraries that this one depends upon.
+dependency_libs=''
+
+# Names of additional weak libraries provided by this library
+weak_library_names=''
+
+# Version information for libcc1.
+current=0
+age=0
+revision=0
+
+# Is this an already installed library?
+installed=yes
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=yes
+
+# Files to dlopen/dlpreopen
+dlopen=''
+dlpreopen=''
+
+# Directory that this library needs to be installed in:
+libdir='/home/arter97/arm64-gcc/lib/../lib'
diff --git a/lib/libcc1.so b/lib/libcc1.so
new file mode 120000
index 0000000..5200aa3
--- /dev/null
+++ b/lib/libcc1.so
@@ -0,0 +1 @@
+libcc1.so.0.0.0
\ No newline at end of file
diff --git a/lib/libcc1.so.0 b/lib/libcc1.so.0
new file mode 120000
index 0000000..5200aa3
--- /dev/null
+++ b/lib/libcc1.so.0
@@ -0,0 +1 @@
+libcc1.so.0.0.0
\ No newline at end of file
diff --git a/lib/libcc1.so.0.0.0 b/lib/libcc1.so.0.0.0
new file mode 100755
index 0000000..f6c6445
--- /dev/null
+++ b/lib/libcc1.so.0.0.0
Binary files differ
diff --git a/libexec/gcc/aarch64-elf/9.1.1/cc1 b/libexec/gcc/aarch64-elf/9.1.1/cc1
new file mode 100755
index 0000000..fae0861
--- /dev/null
+++ b/libexec/gcc/aarch64-elf/9.1.1/cc1
Binary files differ
diff --git a/libexec/gcc/aarch64-elf/9.1.1/collect2 b/libexec/gcc/aarch64-elf/9.1.1/collect2
new file mode 100755
index 0000000..beda3d9
--- /dev/null
+++ b/libexec/gcc/aarch64-elf/9.1.1/collect2
Binary files differ
diff --git a/libexec/gcc/aarch64-elf/9.1.1/install-tools/fixinc.sh b/libexec/gcc/aarch64-elf/9.1.1/install-tools/fixinc.sh
new file mode 100755
index 0000000..cd0b458
--- /dev/null
+++ b/libexec/gcc/aarch64-elf/9.1.1/install-tools/fixinc.sh
@@ -0,0 +1,514 @@
+#!/bin/sh
+#
+# Install modified versions of certain ANSI-incompatible system header
+# files which are fixed to work correctly with ANSI C and placed in a
+# directory that GCC will search.
+#
+# See README-fixinc for more information.
+#
+#  fixincludes copyright (c) 1998, 1999, 2000, 2002, 2009
+#  The Free Software Foundation, Inc.
+#
+# fixincludes is free software.
+# 
+# You may redistribute it and/or modify it under the terms of the
+# GNU General Public License, as published by the Free Software
+# Foundation; either version 3, or (at your option) any later version.
+# 
+# fixincludes is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with fixincludes; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+#
+# # # # # # # # # # # # # # # # # # # # #
+
+# Usage: fixinc.sh output-dir input-dir
+#
+# Directory in which to store the results.
+# Fail if no arg to specify a directory for the output.
+if [ "x$1" = "x" ]
+then
+  echo fixincludes: no output directory specified
+  exit 1
+fi
+
+LIB=${1}
+shift
+
+# Make sure it exists.
+if [ ! -d $LIB ]; then
+  mkdir -p $LIB || {
+    echo fixincludes:  output dir '`'$LIB"' cannot be created"
+    exit 1
+  }
+else
+  ( cd $LIB && touch DONE && rm DONE ) || {
+    echo fixincludes:  output dir '`'$LIB"' is an invalid directory"
+    exit 1
+  }
+fi
+
+if test -z "$VERBOSE"
+then
+  VERBOSE=2
+  export VERBOSE
+else
+  case "$VERBOSE" in
+  [0-9] ) : ;;
+  * )  VERBOSE=3 ;;
+  esac
+fi
+
+# Define what target system we're fixing.
+#
+if test -r ./Makefile; then
+  target_canonical="`sed -n -e 's,^target[ 	]*=[ 	]*\(.*\)$,\1,p' < Makefile`"
+fi
+
+# If not from the Makefile, then try config.guess
+#
+if test -z "${target_canonical}" ; then
+  if test -x ./config.guess ; then
+    target_canonical="`config.guess`" ; fi
+  test -z "${target_canonical}" && target_canonical=unknown
+fi
+export target_canonical
+
+# # # # # # # # # # # # # # # # # # # # #
+#
+# Define PWDCMD as a command to use to get the working dir
+# in the form that we want.
+PWDCMD=${PWDCMD-pwd}
+
+case "`$PWDCMD`" in
+//*)
+    # On an Apollo, discard everything before `/usr'.
+    PWDCMD="eval pwd | sed -e 's,.*/usr/,/usr/,'"
+    ;;
+esac
+
+# Original directory.
+ORIGDIR=`${PWDCMD}`
+export ORIGDIR
+FIXINCL=`${PWDCMD}`/fixincl
+if [ ! -x $FIXINCL ] ; then
+  echo "Cannot find fixincl" >&2
+  exit 1
+fi
+export FIXINCL
+
+# Make LIB absolute only if needed to avoid problems with the amd.
+case $LIB in
+/*)
+    ;;
+*)
+    cd $LIB; LIB=`${PWDCMD}`
+    ;;
+esac
+
+if test $VERBOSE -gt 0
+then echo Fixing headers into ${LIB} for ${target_canonical} target ; fi
+
+# Determine whether this system has symbolic links.
+if test -n "$DJDIR"; then
+  LINKS=false
+elif ln -s X $LIB/ShouldNotExist 2>/dev/null; then
+  rm -f $LIB/ShouldNotExist
+  LINKS=true
+elif ln -s X /tmp/ShouldNotExist 2>/dev/null; then
+  rm -f /tmp/ShouldNotExist
+  LINKS=true
+else
+  LINKS=false
+fi
+
+# # # # # # # # # # # # # # # # # # # # #
+#
+#  Check to see if the machine_name fix needs to be disabled.
+#
+#  On some platforms, machine_name doesn't work properly and
+#  breaks some of the header files.  Since everything works
+#  properly without it, just wipe the macro list to
+#  disable the fix.
+
+case "${target_canonical}" in
+    *-*-vxworks*)
+	test -f ${MACRO_LIST} &&  echo > ${MACRO_LIST}
+        ;;
+esac
+
+
+# # # # # # # # # # # # # # # # # # # # #
+#
+#  In the file macro_list are listed all the predefined
+#  macros that are not in the C89 reserved namespace (the reserved
+#  namespace is all identifiers beginnning with two underscores or one
+#  underscore followed by a capital letter).  A regular expression to find
+#  any of those macros in a header file is written to MN_NAME_PAT.
+#
+#  Note dependency on ASCII. \012 = newline.
+#  tr ' ' '\n' is, alas, not portable.
+
+if test -s ${MACRO_LIST}
+then
+  if test $VERBOSE -gt 0; then
+    echo "Forbidden identifiers: `tr '\012' ' ' < ${MACRO_LIST}`"
+  fi
+  MN_NAME_PAT="`sed 's/^/\\\\</; s/$/\\\\>/; $!s/$/|/' \
+      < ${MACRO_LIST} | tr -d '\012'`"
+  export MN_NAME_PAT
+else
+  if test $VERBOSE -gt 0
+  then echo "No forbidden identifiers defined by this target" ; fi
+fi
+
+# # # # # # # # # # # # # # # # # # # # #
+#
+#  Search each input directory for broken header files.
+#  This loop ends near the end of the file.
+#
+if test $# -eq 0
+then
+    INPUTLIST="/usr/include"
+else
+    INPUTLIST="$@"
+fi
+
+for INPUT in ${INPUTLIST} ; do
+
+cd ${ORIGDIR}
+
+#  Make sure a directory exists before changing into it,
+#  otherwise Solaris2 will fail-exit the script.
+#
+if [ ! -d ${INPUT} ]; then
+  continue
+fi
+cd ${INPUT}
+
+INPUT=`${PWDCMD}`
+export INPUT
+
+#
+# # # # # # # # # # # # # # # # # # # # #
+#
+if test $VERBOSE -gt 1
+then echo Finding directories and links to directories ; fi
+
+# Find all directories and all symlinks that point to directories.
+# Put the list in $all_dirs.
+# Each time we find a symlink, add it to newdirs
+# so that we do another find within the dir the link points to.
+# Note that $all_dirs may have duplicates in it;
+# later parts of this file are supposed to ignore them.
+dirs="."
+levels=2
+all_dirs=""
+search_dirs=""
+
+while [ -n "$dirs" ] && [ $levels -gt 0 ]
+do
+  levels=`expr $levels - 1`
+  newdirs=
+  for d in $dirs
+  do
+    if test $VERBOSE -gt 1
+    then echo " Searching $INPUT/$d" ; fi
+
+    # Find all directories under $d, relative to $d, excluding $d itself.
+    # (The /. is needed after $d in case $d is a symlink.)
+    all_dirs="$all_dirs `find $d/. -type d -print | \
+               sed -e '/\/\.$/d' -e 's@/./@/@g'`"
+    # Find all links to directories.
+    # Using `-exec test -d' in find fails on some systems,
+    # and trying to run test via sh fails on others,
+    # so this is the simplest alternative left.
+    # First find all the links, then test each one.
+    theselinks=
+    $LINKS && \
+      theselinks=`find $d/. -type l -print | sed -e 's@/./@/@g'`
+    for d1 in $theselinks --dummy--
+    do
+      # If the link points to a directory,
+      # add that dir to $newdirs
+      if [ -d $d1 ]
+      then
+        all_dirs="$all_dirs $d1"
+        if [ "`ls -ld $d1 | sed -n 's/.*-> //p'`" != "." ]
+        then
+          newdirs="$newdirs $d1"
+          search_dirs="$search_dirs $d1"
+        fi
+      fi
+    done
+  done
+
+  dirs="$newdirs"
+done
+
+# # # # # # # # # # # # # # # # # # # # #
+#
+dirs=
+if test $VERBOSE -gt 2
+then echo "All directories (including links to directories):"
+     echo $all_dirs
+fi
+
+for file in $all_dirs; do
+  rm -rf $LIB/$file
+  if [ ! -d $LIB/$file ]
+  then mkdir $LIB/$file
+  fi
+done
+mkdir $LIB/root
+
+# # # # # # # # # # # # # # # # # # # # #
+#
+# treetops gets an alternating list
+# of old directories to copy
+# and the new directories to copy to.
+treetops=". ${LIB}"
+
+if $LINKS; then
+  if test $VERBOSE -gt 1
+  then echo 'Making symbolic directory links' ; fi
+  cwd=`${PWDCMD}`
+
+  for sym_link in $search_dirs; do
+    cd ${INPUT}
+    dest=`ls -ld ${sym_link} | sed -n 's/.*-> //p'`
+
+    # In case $dest is relative, get to ${sym_link}'s dir first.
+    #
+    cd ./`echo ${sym_link} | sed 's;/[^/]*$;;'`
+
+    # Check that the target directory exists.
+    # Redirections changed to avoid bug in sh on Ultrix.
+    #
+    (cd $dest) > /dev/null 2>&1
+    if [ $? = 0 ]; then
+      cd $dest
+
+      # full_dest_dir gets the dir that the link actually leads to.
+      #
+      full_dest_dir=`${PWDCMD}`
+
+      # Canonicalize ${INPUT} now to minimize the time an
+      # automounter has to change the result of ${PWDCMD}.
+      #
+      cinput=`cd ${INPUT}; ${PWDCMD}`
+
+      # If a link points to ., make a similar link to .
+      #
+      if [ ${full_dest_dir} = ${cinput} ]; then
+        if test $VERBOSE -gt 2
+        then echo ${sym_link} '->' . ': Making self link' ; fi
+        rm -fr ${LIB}/${sym_link} > /dev/null 2>&1
+        ln -s . ${LIB}/${sym_link} > /dev/null 2>&1
+
+      # If link leads back into ${INPUT},
+      # make a similar link here.
+      #
+      elif expr ${full_dest_dir} : "${cinput}/.*" > /dev/null; then
+        # Y gets the actual target dir name, relative to ${INPUT}.
+        y=`echo ${full_dest_dir} | sed -n "s&${cinput}/&&p"`
+        # DOTS is the relative path from ${LIB}/${sym_link} back to ${LIB}.
+        dots=`echo "${sym_link}" |
+          sed -e 's@^./@@' -e 's@/./@/@g' -e 's@[^/][^/]*@..@g' -e 's@..$@@'`
+        if test $VERBOSE -gt 2
+        then echo ${sym_link} '->' $dots$y ': Making local link' ; fi
+        rm -fr ${LIB}/${sym_link} > /dev/null 2>&1
+        ln -s $dots$y ${LIB}/${sym_link} > /dev/null 2>&1
+
+      else
+        # If the link is to a dir $target outside ${INPUT},
+        # repoint the link at ${INPUT}/root$target
+        # and process $target into ${INPUT}/root$target
+        # treat this directory as if it actually contained the files.
+        #
+        if test $VERBOSE -gt 2
+        then echo ${sym_link} '->' root${full_dest_dir} ': Making rooted link'
+        fi
+        if [ -d $LIB/root${full_dest_dir} ]
+        then true
+        else
+          dirname=root${full_dest_dir}/
+          dirmade=.
+          cd $LIB
+          while [ x$dirname != x ]; do
+            component=`echo $dirname | sed -e 's|/.*$||'`
+            mkdir $component >/dev/null 2>&1
+            cd $component
+            dirmade=$dirmade/$component
+            dirname=`echo $dirname | sed -e 's|[^/]*//*||'`
+          done
+        fi
+
+        # Duplicate directory structure created in ${LIB}/${sym_link} in new
+        # root area.
+        #
+        for file2 in $all_dirs; do
+          case $file2 in
+            ${sym_link}/*)
+              dupdir=${LIB}/root${full_dest_dir}/`echo $file2 |
+                      sed -n "s|^${sym_link}/||p"`
+              if test $VERBOSE -gt 2
+              then echo "Duplicating ${sym_link}'s ${dupdir}" ; fi
+              if [ -d ${dupdir} ]
+              then true
+              else
+                mkdir ${dupdir}
+              fi
+              ;;
+            *)
+              ;;
+          esac
+        done
+
+        # Get the path from ${LIB} to ${sym_link}, accounting for symlinks.
+        #
+        parent=`echo "${sym_link}" | sed -e 's@/[^/]*$@@'`
+        libabs=`cd ${LIB}; ${PWDCMD}`
+        file2=`cd ${LIB}; cd $parent; ${PWDCMD} | sed -e "s@^${libabs}@@"`
+
+        # DOTS is the relative path from ${LIB}/${sym_link} back to ${LIB}.
+        #
+        dots=`echo "$file2" | sed -e 's@/[^/]*@../@g'`
+        rm -fr ${LIB}/${sym_link} > /dev/null 2>&1
+        ln -s ${dots}root${full_dest_dir} ${LIB}/${sym_link} > /dev/null 2>&1
+        treetops="$treetops ${sym_link} ${LIB}/root${full_dest_dir}"
+      fi
+    fi
+  done
+fi
+
+# # # # # # # # # # # # # # # # # # # # #
+#
+required=
+set x $treetops
+shift
+while [ $# != 0 ]; do
+  # $1 is an old directory to copy, and $2 is the new directory to copy to.
+  #
+  SRCDIR=`cd ${INPUT} ; cd $1 ; ${PWDCMD}`
+  export SRCDIR
+
+  FIND_BASE=$1
+  export FIND_BASE
+  shift
+
+  DESTDIR=`cd $1;${PWDCMD}`
+  export DESTDIR
+  shift
+
+  # The same dir can appear more than once in treetops.
+  # There's no need to scan it more than once.
+  #
+  if [ -f ${DESTDIR}/DONE ]
+  then continue ; fi
+
+  touch ${DESTDIR}/DONE
+  if test $VERBOSE -gt 1
+  then echo Fixing directory ${SRCDIR} into ${DESTDIR} ; fi
+
+  # Check files which are symlinks as well as those which are files.
+  #
+  cd ${INPUT}
+  required="$required `if $LINKS; then
+    find ${FIND_BASE}/. -name '*.h' \( -type f -o -type l \) -print
+  else
+    find ${FIND_BASE}/. -name '*.h' -type f -print
+  fi | \
+    sed -e 's;/\./;/;g' -e 's;//*;/;g' | \
+    ${FIXINCL}`"
+done
+
+## Make sure that any include files referenced using double quotes
+## exist in the fixed directory.  This comes last since otherwise
+## we might end up deleting some of these files "because they don't
+## need any change."
+set x `echo $required`
+shift
+while [ $# != 0 ]; do
+  newreq=
+  while [ $# != 0 ]; do
+    # $1 is the directory to copy from,
+    # $2 is the unfixed file,
+    # $3 is the fixed file name.
+    #
+    cd ${INPUT}
+    cd $1
+    if [ -f $2 ] ; then
+      if [ -r $2 ] && [ ! -r $3 ]; then
+        cp $2 $3 >/dev/null 2>&1 || echo "Can't copy $2" >&2
+        chmod +w $3 2>/dev/null
+        chmod a+r $3 2>/dev/null
+        if test $VERBOSE -gt 2
+        then echo Copied $2 ; fi
+        for include in `egrep '^[ 	]*#[ 	]*include[ 	]*"[^/]' $3 |
+             sed -e 's/^[ 	]*#[ 	]*include[ 	]*"\([^"]*\)".*$/\1/'`
+        do
+	  dir=`echo $2 | sed -e s'|/[^/]*$||'`
+	  dir2=`echo $3 | sed -e s'|/[^/]*$||'`
+	  newreq="$newreq $1 $dir/$include $dir2/$include"
+        done
+      fi
+    fi
+    shift; shift; shift
+  done
+  set x $newreq
+  shift
+done
+
+if test $VERBOSE -gt 2
+then echo 'Cleaning up DONE files.' ; fi
+cd $LIB
+# Look for files case-insensitively, for the benefit of
+# DOS/Windows filesystems.
+find . -name '[Dd][Oo][Nn][Ee]' -exec rm -f '{}' ';'
+
+if test $VERBOSE -gt 1
+then echo 'Cleaning up unneeded directories:' ; fi
+cd $LIB
+all_dirs=`find . -type d \! -name '.' -print | sort -r`
+for file in $all_dirs; do
+  if rmdir $LIB/$file > /dev/null
+  then
+    test $VERBOSE -gt 3 && echo "  removed $file"
+  fi
+done 2> /dev/null
+
+# On systems which don't support symlinks, `find' may barf
+# if called with "-type l" predicate.  So only use that if
+# we know we should look for symlinks.
+if $LINKS; then
+  test $VERBOSE -gt 2 && echo "Removing unused symlinks"
+
+  all_dirs=`find . -type l -print`
+  for file in $all_dirs
+  do
+    if test ! -d $file
+    then
+      rm -f $file
+      test $VERBOSE -gt 3 && echo "  removed $file"
+      rmdir `dirname $file` > /dev/null && \
+           test $VERBOSE -gt 3 && \
+           echo "  removed `dirname $file`"
+    fi
+  done 2> /dev/null
+fi
+
+if test $VERBOSE -gt 0
+then echo fixincludes is done ; fi
+
+# # # # # # # # # # # # # # # # # # # # #
+#
+# End of for INPUT directories
+#
+done
+#
+# # # # # # # # # # # # # # # # # # # # #
diff --git a/libexec/gcc/aarch64-elf/9.1.1/install-tools/fixincl b/libexec/gcc/aarch64-elf/9.1.1/install-tools/fixincl
new file mode 100755
index 0000000..279f401
--- /dev/null
+++ b/libexec/gcc/aarch64-elf/9.1.1/install-tools/fixincl
Binary files differ
diff --git a/libexec/gcc/aarch64-elf/9.1.1/install-tools/mkheaders b/libexec/gcc/aarch64-elf/9.1.1/install-tools/mkheaders
new file mode 100755
index 0000000..8f3fb89
--- /dev/null
+++ b/libexec/gcc/aarch64-elf/9.1.1/install-tools/mkheaders
@@ -0,0 +1,104 @@
+#!/bin/sh
+
+# Copyright (C) 2002, 2007, 2009 Free Software Foundation, Inc.
+
+#This file is part of GCC.
+
+#GCC is free software; you can redistribute it and/or modify it under
+#the terms of the GNU General Public License as published by the Free
+#Software Foundation; either version 3, or (at your option) any later
+#version.
+
+#GCC is distributed in the hope that it will be useful, but WITHOUT
+#ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+#FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+#for more details.
+
+#You should have received a copy of the GNU General Public License
+#along with GCC; see the file COPYING3.  If not see
+#<http://www.gnu.org/licenses/>.
+
+# Basic information
+target=aarch64-unknown-elf
+target_noncanonical=aarch64-elf
+version=9.1.1
+
+VERBOSE=0
+while [ x$1 = x-v ] ; do
+    shift
+    VERBOSE=`expr $VERBOSE + 1`
+done
+export VERBOSE
+
+if [ x$1 = x--help ] ; then
+    echo "Usage: mkheaders [options] [prefix [isysroot]]"
+    echo "Options:"
+    echo "  -v        Print more output (may be repeated for even more output)"
+    echo "  --help    This help"
+    echo "  --version Print version information"
+    exit 0
+fi
+
+if [ x$1 = x--version ] ; then
+    echo "mkheaders (GCC) version $version"
+    echo "Copyright 2002, 2007, 2009 Free Software Foundation, Inc."
+    echo "This program is free software; you may redistribute it under the"
+    echo "terms of the GNU General Public License.  This program has"
+    echo "absolutely no warranty."
+    exit 0
+fi
+
+# Common prefix for installation directories.
+if [ x$1 != x ] ; then
+  prefix=$1
+  shift
+else
+  prefix=/home/arter97/arm64-gcc
+fi
+
+# Allow for alternate isysroot in which to find headers
+if [ x$1 != x ] ; then
+  isysroot=$1
+  shift
+else
+  isysroot=
+fi
+
+# Directory in which to put host dependent programs and libraries
+exec_prefix=${prefix}
+# Directory in which to put the directories used by the compiler.
+libdir=${exec_prefix}/lib
+libexecdir=${exec_prefix}/libexec
+# Directory in which the compiler finds libraries, etc.
+libsubdir=${libdir}/gcc/${target_noncanonical}/${version}
+# Directory in which the compiler finds executables
+libexecsubdir=${libexecdir}/gcc/${target_noncanonical}/${version}
+
+itoolsdir=${libexecsubdir}/install-tools
+itoolsdatadir=${libsubdir}/install-tools
+incdir=${libsubdir}/include-fixed
+mkinstalldirs="/bin/bash ${itoolsdir}/mkinstalldirs"
+
+cd ${itoolsdir}
+rm -rf ${incdir}/*
+
+for ml in `cat ${itoolsdatadir}/fixinc_list`; do
+  sysroot_headers_suffix=`echo ${ml} | sed -e 's/;.*$//'`
+  multi_dir=`echo ${ml} | sed -e 's/^[^;]*;//'`
+  subincdir=${incdir}${multi_dir}
+  . ${itoolsdatadir}/mkheaders.conf
+  if [ x${STMP_FIXINC} != x ] ; then
+	TARGET_MACHINE="${target}" target_canonical="${target}" \
+	    MACRO_LIST="${itoolsdatadir}/macro_list" \
+	    /bin/bash ./fixinc.sh ${subincdir} \
+	    ${isysroot}${SYSTEM_HEADER_DIR} ${OTHER_FIXINCLUDES_DIRS}
+	rm -f ${subincdir}/syslimits.h
+	if [ -f ${subincdir}/limits.h ]; then
+	  mv ${subincdir}/limits.h ${subincdir}/syslimits.h
+	else
+	  cp ${itoolsdatadir}/gsyslimits.h ${subincdir}/syslimits.h
+	fi
+  fi
+
+  cp ${itoolsdatadir}/include${multi_dir}/limits.h ${subincdir}
+done
diff --git a/libexec/gcc/aarch64-elf/9.1.1/install-tools/mkinstalldirs b/libexec/gcc/aarch64-elf/9.1.1/install-tools/mkinstalldirs
new file mode 100755
index 0000000..55d537f
--- /dev/null
+++ b/libexec/gcc/aarch64-elf/9.1.1/install-tools/mkinstalldirs
@@ -0,0 +1,162 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+
+scriptversion=2009-04-28.21; # UTC
+
+# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain.
+#
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+IFS=" ""	$nl"
+errstatus=0
+dirmode=
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
+
+Create each directory DIR (with mode MODE, if specified), including all
+leading file name components.
+
+Report bugs to <bug-automake@gnu.org>."
+
+# process command line arguments
+while test $# -gt 0 ; do
+  case $1 in
+    -h | --help | --h*)         # -h for help
+      echo "$usage"
+      exit $?
+      ;;
+    -m)                         # -m PERM arg
+      shift
+      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+      dirmode=$1
+      shift
+      ;;
+    --version)
+      echo "$0 $scriptversion"
+      exit $?
+      ;;
+    --)                         # stop option processing
+      shift
+      break
+      ;;
+    -*)                         # unknown option
+      echo "$usage" 1>&2
+      exit 1
+      ;;
+    *)                          # first non-opt arg
+      break
+      ;;
+  esac
+done
+
+for file
+do
+  if test -d "$file"; then
+    shift
+  else
+    break
+  fi
+done
+
+case $# in
+  0) exit 0 ;;
+esac
+
+# Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and
+# mkdir -p a/c at the same time, both will detect that a is missing,
+# one will create a, then the other will try to create a and die with
+# a "File exists" error.  This is a problem when calling mkinstalldirs
+# from a parallel make.  We use --version in the probe to restrict
+# ourselves to GNU mkdir, which is thread-safe.
+case $dirmode in
+  '')
+    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+      echo "mkdir -p -- $*"
+      exec mkdir -p -- "$@"
+    else
+      # On NextStep and OpenStep, the 'mkdir' command does not
+      # recognize any option.  It will interpret all options as
+      # directories to create, and then abort because '.' already
+      # exists.
+      test -d ./-p && rmdir ./-p
+      test -d ./--version && rmdir ./--version
+    fi
+    ;;
+  *)
+    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
+       test ! -d ./--version; then
+      echo "mkdir -m $dirmode -p -- $*"
+      exec mkdir -m "$dirmode" -p -- "$@"
+    else
+      # Clean up after NextStep and OpenStep mkdir.
+      for d in ./-m ./-p ./--version "./$dirmode";
+      do
+        test -d $d && rmdir $d
+      done
+    fi
+    ;;
+esac
+
+for file
+do
+  case $file in
+    /*) pathcomp=/ ;;
+    *)  pathcomp= ;;
+  esac
+  oIFS=$IFS
+  IFS=/
+  set fnord $file
+  shift
+  IFS=$oIFS
+
+  for d
+  do
+    test "x$d" = x && continue
+
+    pathcomp=$pathcomp$d
+    case $pathcomp in
+      -*) pathcomp=./$pathcomp ;;
+    esac
+
+    if test ! -d "$pathcomp"; then
+      echo "mkdir $pathcomp"
+
+      mkdir "$pathcomp" || lasterr=$?
+
+      if test ! -d "$pathcomp"; then
+	errstatus=$lasterr
+      else
+	if test ! -z "$dirmode"; then
+	  echo "chmod $dirmode $pathcomp"
+	  lasterr=
+	  chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+	  if test ! -z "$lasterr"; then
+	    errstatus=$lasterr
+	  fi
+	fi
+      fi
+    fi
+
+    pathcomp=$pathcomp/
+  done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/libexec/gcc/aarch64-elf/9.1.1/liblto_plugin.la b/libexec/gcc/aarch64-elf/9.1.1/liblto_plugin.la
new file mode 100755
index 0000000..f70cc06
--- /dev/null
+++ b/libexec/gcc/aarch64-elf/9.1.1/liblto_plugin.la
@@ -0,0 +1,41 @@
+# liblto_plugin.la - a libtool library file
+# Generated by libtool (GNU libtool 1.3134 2009-11-29) 2.2.7a
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='liblto_plugin.so.0'
+
+# Names of this library.
+library_names='liblto_plugin.so.0.0.0 liblto_plugin.so.0 liblto_plugin.so'
+
+# The name of the static archive.
+old_library=''
+
+# Linker flags that can not go in dependency_libs.
+inherited_linker_flags=''
+
+# Libraries that this one depends upon.
+dependency_libs=''
+
+# Names of additional weak libraries provided by this library
+weak_library_names=''
+
+# Version information for liblto_plugin.
+current=0
+age=0
+revision=0
+
+# Is this an already installed library?
+installed=yes
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=yes
+
+# Files to dlopen/dlpreopen
+dlopen=''
+dlpreopen=''
+
+# Directory that this library needs to be installed in:
+libdir='/home/arter97/arm64-gcc/libexec/gcc/aarch64-elf/9.1.1'
diff --git a/libexec/gcc/aarch64-elf/9.1.1/liblto_plugin.so b/libexec/gcc/aarch64-elf/9.1.1/liblto_plugin.so
new file mode 120000
index 0000000..f25ba88
--- /dev/null
+++ b/libexec/gcc/aarch64-elf/9.1.1/liblto_plugin.so
@@ -0,0 +1 @@
+liblto_plugin.so.0.0.0
\ No newline at end of file
diff --git a/libexec/gcc/aarch64-elf/9.1.1/liblto_plugin.so.0 b/libexec/gcc/aarch64-elf/9.1.1/liblto_plugin.so.0
new file mode 120000
index 0000000..f25ba88
--- /dev/null
+++ b/libexec/gcc/aarch64-elf/9.1.1/liblto_plugin.so.0
@@ -0,0 +1 @@
+liblto_plugin.so.0.0.0
\ No newline at end of file
diff --git a/libexec/gcc/aarch64-elf/9.1.1/liblto_plugin.so.0.0.0 b/libexec/gcc/aarch64-elf/9.1.1/liblto_plugin.so.0.0.0
new file mode 100755
index 0000000..b56b9ea
--- /dev/null
+++ b/libexec/gcc/aarch64-elf/9.1.1/liblto_plugin.so.0.0.0
Binary files differ
diff --git a/libexec/gcc/aarch64-elf/9.1.1/lto-wrapper b/libexec/gcc/aarch64-elf/9.1.1/lto-wrapper
new file mode 100755
index 0000000..9bb56ad
--- /dev/null
+++ b/libexec/gcc/aarch64-elf/9.1.1/lto-wrapper
Binary files differ
diff --git a/libexec/gcc/aarch64-elf/9.1.1/lto1 b/libexec/gcc/aarch64-elf/9.1.1/lto1
new file mode 100755
index 0000000..e75f354
--- /dev/null
+++ b/libexec/gcc/aarch64-elf/9.1.1/lto1
Binary files differ
diff --git a/libexec/gcc/aarch64-elf/9.1.1/plugin/gengtype b/libexec/gcc/aarch64-elf/9.1.1/plugin/gengtype
new file mode 100755
index 0000000..f228b75
--- /dev/null
+++ b/libexec/gcc/aarch64-elf/9.1.1/plugin/gengtype
Binary files differ
diff --git a/share/gdb/python/gdb/FrameDecorator.py b/share/gdb/python/gdb/FrameDecorator.py
new file mode 100644
index 0000000..4eba088
--- /dev/null
+++ b/share/gdb/python/gdb/FrameDecorator.py
@@ -0,0 +1,302 @@
+# Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import gdb
+
+# This small code snippet deals with problem of strings in Python 2.x
+# and Python 3.x.  Python 2.x has str and unicode classes which are
+# sub-classes of basestring.  In Python 3.x all strings are encoded
+# and basestring has been removed.
+try:
+    basestring
+except NameError:
+    basestring = str
+
+class FrameDecorator(object):
+    """Basic implementation of a Frame Decorator"""
+
+    """ This base frame decorator decorates a frame or another frame
+    decorator, and provides convenience methods.  If this object is
+    wrapping a frame decorator, defer to that wrapped object's method
+    if it has one.  This allows for frame decorators that have
+    sub-classed FrameDecorator object, but also wrap other frame
+    decorators on the same frame to correctly execute.
+
+    E.g
+
+    If the result of frame filters running means we have one gdb.Frame
+    wrapped by multiple frame decorators, all sub-classed from
+    FrameDecorator, the resulting hierarchy will be:
+
+    Decorator1
+      -- (wraps) Decorator2
+        -- (wraps) FrameDecorator
+          -- (wraps) gdb.Frame
+
+    In this case we have two frame decorators, both of which are
+    sub-classed from FrameDecorator.  If Decorator1 just overrides the
+    'function' method, then all of the other methods are carried out
+    by the super-class FrameDecorator.  But Decorator2 may have
+    overriden other methods, so FrameDecorator will look at the
+    'base' parameter and defer to that class's methods.  And so on,
+    down the chain."""
+
+    # 'base' can refer to a gdb.Frame or another frame decorator.  In
+    # the latter case, the child class will have called the super
+    # method and _base will be an object conforming to the Frame Filter
+    # class.
+    def __init__(self, base):
+        self._base = base
+
+    @staticmethod
+    def _is_limited_frame(frame):
+        """Internal utility to determine if the frame is special or
+        limited."""
+        sal = frame.find_sal()
+
+        if (not sal.symtab or not sal.symtab.filename
+            or frame.type() == gdb.DUMMY_FRAME
+            or frame.type() == gdb.SIGTRAMP_FRAME):
+
+            return True
+
+        return False
+
+    def elided(self):
+        """Return any elided frames that this class might be
+        wrapping, or None."""
+        if hasattr(self._base, "elided"):
+            return self._base.elided()
+
+        return None
+
+    def function(self):
+        """ Return the name of the frame's function or an address of
+        the function of the frame.  First determine if this is a
+        special frame.  If not, try to determine filename from GDB's
+        frame internal function API.  Finally, if a name cannot be
+        determined return the address.  If this function returns an
+        address, GDB will attempt to determine the function name from
+        its internal minimal symbols store (for example, for inferiors
+        without debug-info)."""
+
+        # Both gdb.Frame, and FrameDecorator have a method called
+        # "function", so determine which object this is.
+        if not isinstance(self._base, gdb.Frame):
+            if hasattr(self._base, "function"):
+                # If it is not a gdb.Frame, and there is already a
+                # "function" method, use that.
+                return self._base.function()
+
+        frame = self.inferior_frame()
+
+        if frame.type() == gdb.DUMMY_FRAME:
+            return "<function called from gdb>"
+        elif frame.type() == gdb.SIGTRAMP_FRAME:
+            return "<signal handler called>"
+
+        func = frame.function()
+
+        # If we cannot determine the function name, return the
+        # address.  If GDB detects an integer value from this function
+        # it will attempt to find the function name from minimal
+        # symbols via its own internal functions.
+        if func == None:
+            pc = frame.pc()
+            return pc
+
+        return str(func)
+
+    def address(self):
+        """ Return the address of the frame's pc"""
+
+        if hasattr(self._base, "address"):
+            return self._base.address()
+
+        frame = self.inferior_frame()
+        return frame.pc()
+
+    def filename(self):
+        """ Return the filename associated with this frame, detecting
+        and returning the appropriate library name is this is a shared
+        library."""
+
+        if hasattr(self._base, "filename"):
+            return self._base.filename()
+
+        frame = self.inferior_frame()
+        sal = frame.find_sal()
+        if not sal.symtab or not sal.symtab.filename:
+            pc = frame.pc()
+            return gdb.solib_name(pc)
+        else:
+            return sal.symtab.filename
+
+    def frame_args(self):
+        """ Return an iterable of frame arguments for this frame, if
+        any.  The iterable object contains objects conforming with the
+        Symbol/Value interface.  If there are no frame arguments, or
+        if this frame is deemed to be a special case, return None."""
+
+        if hasattr(self._base, "frame_args"):
+            return self._base.frame_args()
+
+        frame = self.inferior_frame()
+        if self._is_limited_frame(frame):
+            return None
+
+        args = FrameVars(frame)
+        return args.fetch_frame_args()
+
+    def frame_locals(self):
+        """ Return an iterable of local variables for this frame, if
+        any.  The iterable object contains objects conforming with the
+        Symbol/Value interface.  If there are no frame locals, or if
+        this frame is deemed to be a special case, return None."""
+
+        if hasattr(self._base, "frame_locals"):
+            return self._base.frame_locals()
+
+        frame = self.inferior_frame()
+        if self._is_limited_frame(frame):
+            return None
+
+        args = FrameVars(frame)
+        return args.fetch_frame_locals()
+
+    def line(self):
+        """ Return line number information associated with the frame's
+        pc.  If symbol table/line information does not exist, or if
+        this frame is deemed to be a special case, return None"""
+
+        if hasattr(self._base, "line"):
+            return self._base.line()
+
+        frame = self.inferior_frame()
+        if self._is_limited_frame(frame):
+            return None
+
+        sal = frame.find_sal()
+        if (sal):
+            return sal.line
+        else:
+            return None
+
+    def inferior_frame(self):
+        """ Return the gdb.Frame underpinning this frame decorator."""
+
+        # If 'base' is a frame decorator, we want to call its inferior
+        # frame method.  If '_base' is a gdb.Frame, just return that.
+        if hasattr(self._base, "inferior_frame"):
+            return self._base.inferior_frame()
+        return self._base
+
+class SymValueWrapper(object):
+    """A container class conforming to the Symbol/Value interface
+    which holds frame locals or frame arguments."""
+    def __init__(self, symbol, value):
+        self.sym = symbol
+        self.val = value
+
+    def value(self):
+        """ Return the value associated with this symbol, or None"""
+        return self.val
+
+    def symbol(self):
+        """ Return the symbol, or Python text, associated with this
+        symbol, or None"""
+        return self.sym
+
+class FrameVars(object):
+
+    """Utility class to fetch and store frame local variables, or
+    frame arguments."""
+
+    def __init__(self, frame):
+        self.frame = frame
+        self.symbol_class = {
+            gdb.SYMBOL_LOC_STATIC: True,
+            gdb.SYMBOL_LOC_REGISTER: True,
+            gdb.SYMBOL_LOC_ARG: True,
+            gdb.SYMBOL_LOC_REF_ARG: True,
+            gdb.SYMBOL_LOC_LOCAL: True,
+	    gdb.SYMBOL_LOC_REGPARM_ADDR: True,
+	    gdb.SYMBOL_LOC_COMPUTED: True
+            }
+
+    def fetch_b(self, sym):
+        """ Local utility method to determine if according to Symbol
+        type whether it should be included in the iterator.  Not all
+        symbols are fetched, and only symbols that return
+        True from this method should be fetched."""
+
+        # SYM may be a string instead of a symbol in the case of
+        # synthetic local arguments or locals.  If that is the case,
+        # always fetch.
+        if isinstance(sym, basestring):
+            return True
+
+        sym_type = sym.addr_class
+
+        return self.symbol_class.get(sym_type, False)
+
+    def fetch_frame_locals(self):
+        """Public utility method to fetch frame local variables for
+        the stored frame.  Frame arguments are not fetched.  If there
+        are no frame local variables, return an empty list."""
+        lvars = []
+
+        try:
+            block = self.frame.block()
+        except RuntimeError:
+            block = None
+
+        while block != None:
+            if block.is_global or block.is_static:
+                break
+            for sym in block:
+                if sym.is_argument:
+                    continue;
+                if self.fetch_b(sym):
+                    lvars.append(SymValueWrapper(sym, None))
+
+            block = block.superblock
+
+        return lvars
+
+    def fetch_frame_args(self):
+        """Public utility method to fetch frame arguments for the
+        stored frame.  Frame arguments are the only type fetched.  If
+        there are no frame argument variables, return an empty list."""
+
+        args = []
+
+        try:
+            block = self.frame.block()
+        except RuntimeError:
+            block = None
+
+        while block != None:
+            if block.function != None:
+                break
+            block = block.superblock
+
+        if block != None:
+            for sym in block:
+                if not sym.is_argument:
+                    continue;
+                args.append(SymValueWrapper(sym, None))
+
+        return args
diff --git a/share/gdb/python/gdb/FrameIterator.py b/share/gdb/python/gdb/FrameIterator.py
new file mode 100644
index 0000000..4950caf
--- /dev/null
+++ b/share/gdb/python/gdb/FrameIterator.py
@@ -0,0 +1,51 @@
+# Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import gdb
+import itertools
+
+class FrameIterator(object):
+    """A gdb.Frame iterator.  Iterates over gdb.Frames or objects that
+    conform to that interface."""
+
+    def __init__(self, frame_obj):
+        """Initialize a FrameIterator.
+
+        Arguments:
+            frame_obj the starting frame."""
+
+        super(FrameIterator, self).__init__()
+        self.frame = frame_obj
+
+    def __iter__(self):
+        return self
+
+    def next(self):
+        """next implementation.
+
+        Returns:
+            The next oldest frame."""
+
+        result = self.frame
+        if result is None:
+            raise StopIteration
+        self.frame = result.older()
+        return result
+
+    # Python 3.x requires __next__(self) while Python 2.x requires
+    # next(self).  Define next(self), and for Python 3.x create this
+    # wrapper.
+    def __next__(self):
+        return self.next()
diff --git a/share/gdb/python/gdb/__init__.py b/share/gdb/python/gdb/__init__.py
new file mode 100644
index 0000000..af74df8
--- /dev/null
+++ b/share/gdb/python/gdb/__init__.py
@@ -0,0 +1,186 @@
+# Copyright (C) 2010-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import traceback
+import os
+import sys
+import _gdb
+
+if sys.version_info[0] > 2:
+    # Python 3 moved "reload"
+    from imp import reload
+
+from _gdb import *
+
+class _GdbFile (object):
+    # These two are needed in Python 3
+    encoding = "UTF-8"
+    errors = "strict"
+
+    def close(self):
+        # Do nothing.
+        return None
+
+    def isatty(self):
+        return False
+
+    def writelines(self, iterable):
+        for line in iterable:
+            self.write(line)
+
+    def flush(self):
+        flush()
+
+class GdbOutputFile (_GdbFile):
+    def write(self, s):
+        write(s, stream=STDOUT)
+
+sys.stdout = GdbOutputFile()
+
+class GdbOutputErrorFile (_GdbFile):
+    def write(self, s):
+        write(s, stream=STDERR)
+
+sys.stderr = GdbOutputErrorFile()
+
+# Default prompt hook does nothing.
+prompt_hook = None
+
+# Ensure that sys.argv is set to something.
+# We do not use PySys_SetArgvEx because it did not appear until 2.6.6.
+sys.argv = ['']
+
+# Initial pretty printers.
+pretty_printers = []
+
+# Initial type printers.
+type_printers = []
+# Initial xmethod matchers.
+xmethods = []
+# Initial frame filters.
+frame_filters = {}
+# Initial frame unwinders.
+frame_unwinders = []
+
+def execute_unwinders(pending_frame):
+    """Internal function called from GDB to execute all unwinders.
+
+    Runs each currently enabled unwinder until it finds the one that
+    can unwind given frame.
+
+    Arguments:
+        pending_frame: gdb.PendingFrame instance.
+    Returns:
+        gdb.UnwindInfo instance or None.
+    """
+    for objfile in objfiles():
+        for unwinder in objfile.frame_unwinders:
+            if unwinder.enabled:
+                unwind_info = unwinder(pending_frame)
+                if unwind_info is not None:
+                    return unwind_info
+
+    for unwinder in current_progspace().frame_unwinders:
+        if unwinder.enabled:
+            unwind_info = unwinder(pending_frame)
+            if unwind_info is not None:
+                return unwind_info
+
+    for unwinder in frame_unwinders:
+        if unwinder.enabled:
+            unwind_info = unwinder(pending_frame)
+            if unwind_info is not None:
+                return unwind_info
+
+    return None
+
+
+# Convenience variable to GDB's python directory
+PYTHONDIR = os.path.dirname(os.path.dirname(__file__))
+
+# Auto-load all functions/commands.
+
+# Packages to auto-load.
+
+packages = [
+    'function',
+    'command',
+    'printer'
+]
+
+# pkgutil.iter_modules is not available prior to Python 2.6.  Instead,
+# manually iterate the list, collating the Python files in each module
+# path.  Construct the module name, and import.
+
+def auto_load_packages():
+    for package in packages:
+        location = os.path.join(os.path.dirname(__file__), package)
+        if os.path.exists(location):
+            py_files = filter(lambda x: x.endswith('.py')
+                                        and x != '__init__.py',
+                              os.listdir(location))
+
+            for py_file in py_files:
+                # Construct from foo.py, gdb.module.foo
+                modname = "%s.%s.%s" % ( __name__, package, py_file[:-3] )
+                try:
+                    if modname in sys.modules:
+                        # reload modules with duplicate names
+                        reload(__import__(modname))
+                    else:
+                        __import__(modname)
+                except:
+                    sys.stderr.write (traceback.format_exc() + "\n")
+
+auto_load_packages()
+
+def GdbSetPythonDirectory(dir):
+    """Update sys.path, reload gdb and auto-load packages."""
+    global PYTHONDIR
+
+    try:
+        sys.path.remove(PYTHONDIR)
+    except ValueError:
+        pass
+    sys.path.insert(0, dir)
+
+    PYTHONDIR = dir
+
+    # note that reload overwrites the gdb module without deleting existing
+    # attributes
+    reload(__import__(__name__))
+    auto_load_packages()
+
+def current_progspace():
+    "Return the current Progspace."
+    return selected_inferior().progspace
+
+def objfiles():
+    "Return a sequence of the current program space's objfiles."
+    return current_progspace().objfiles()
+
+def solib_name (addr):
+    """solib_name (Long) -> String.\n\
+Return the name of the shared library holding a given address, or None."""
+    return current_progspace().solib_name(addr)
+
+def block_for_pc(pc):
+    "Return the block containing the given pc value, or None."
+    return current_progspace().block_for_pc(pc)
+
+def find_pc_line(pc):
+    """find_pc_line (pc) -> Symtab_and_line.
+Return the gdb.Symtab_and_line object corresponding to the pc value."""
+    return current_progspace().find_pc_line(pc)
diff --git a/share/gdb/python/gdb/command/__init__.py b/share/gdb/python/gdb/command/__init__.py
new file mode 100644
index 0000000..9cd48f1
--- /dev/null
+++ b/share/gdb/python/gdb/command/__init__.py
@@ -0,0 +1,16 @@
+# Copyright (C) 2010-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
diff --git a/share/gdb/python/gdb/command/explore.py b/share/gdb/python/gdb/command/explore.py
new file mode 100644
index 0000000..f782a97
--- /dev/null
+++ b/share/gdb/python/gdb/command/explore.py
@@ -0,0 +1,750 @@
+# GDB 'explore' command.
+# Copyright (C) 2012-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+"""Implementation of the GDB 'explore' command using the GDB Python API."""
+
+import gdb
+import sys
+
+if sys.version_info[0] > 2:
+    # Python 3 renamed raw_input to input
+    raw_input = input
+    
+class Explorer(object):
+    """Internal class which invokes other explorers."""
+
+    # This map is filled by the Explorer.init_env() function
+    type_code_to_explorer_map = { }
+
+    _SCALAR_TYPE_LIST = (
+        gdb.TYPE_CODE_CHAR,
+        gdb.TYPE_CODE_INT,
+        gdb.TYPE_CODE_BOOL,
+        gdb.TYPE_CODE_FLT,
+        gdb.TYPE_CODE_VOID,
+        gdb.TYPE_CODE_ENUM,
+    )
+
+    @staticmethod
+    def guard_expr(expr):
+        length = len(expr)
+        guard = False
+
+        if expr[0] == '(' and expr[length-1] == ')':
+            pass
+        else:
+            i = 0
+            while i < length:
+                c = expr[i]
+                if (c == '_' or ('a' <= c and c <= 'z') or
+                    ('A' <= c and c <= 'Z') or ('0' <= c and c <= '9')):
+                    pass
+                else:
+                    guard = True
+                    break
+                i += 1
+
+        if guard:
+            return "(" + expr + ")"
+        else:
+            return expr
+
+    @staticmethod
+    def explore_expr(expr, value, is_child):
+        """Main function to explore an expression value.
+
+        Arguments:
+            expr: The expression string that is being explored.
+            value: The gdb.Value value of the expression.
+            is_child: Boolean value to indicate if the expression is a child.
+                      An expression is a child if it is derived from the main
+                      expression entered by the user.  For example, if the user
+                      entered an expression which evaluates to a struct, then
+                      when exploring the fields of the struct, is_child is set
+                      to True internally.
+
+        Returns:
+            No return value.
+        """
+        type_code = value.type.code
+        if type_code in Explorer.type_code_to_explorer_map:
+            explorer_class = Explorer.type_code_to_explorer_map[type_code]
+            while explorer_class.explore_expr(expr, value, is_child):
+                pass
+        else:
+            print ("Explorer for type '%s' not yet available.\n" %
+                   str(value.type))
+
+    @staticmethod
+    def explore_type(name, datatype, is_child):
+        """Main function to explore a data type.
+
+        Arguments:
+            name: The string representing the path to the data type being
+                  explored.
+            datatype: The gdb.Type value of the data type being explored.
+            is_child: Boolean value to indicate if the name is a child.
+                      A name is a child if it is derived from the main name
+                      entered by the user.  For example, if the user entered
+                      the name of struct type, then when exploring the fields
+                      of the struct, is_child is set to True internally.
+
+        Returns:
+            No return value.
+        """
+        type_code = datatype.code
+        if type_code in Explorer.type_code_to_explorer_map:
+            explorer_class = Explorer.type_code_to_explorer_map[type_code]
+            while explorer_class.explore_type(name, datatype, is_child):
+                pass
+        else:
+            print ("Explorer for type '%s' not yet available.\n" %
+                   str(datatype))
+
+    @staticmethod
+    def init_env():
+        """Initializes the Explorer environment.
+        This function should be invoked before starting any exploration.  If
+        invoked before an exploration, it need not be invoked for subsequent
+        explorations.
+        """
+        Explorer.type_code_to_explorer_map = {
+            gdb.TYPE_CODE_CHAR : ScalarExplorer,
+            gdb.TYPE_CODE_INT : ScalarExplorer,
+            gdb.TYPE_CODE_BOOL : ScalarExplorer,
+            gdb.TYPE_CODE_FLT : ScalarExplorer,
+            gdb.TYPE_CODE_VOID : ScalarExplorer,
+            gdb.TYPE_CODE_ENUM : ScalarExplorer,
+            gdb.TYPE_CODE_STRUCT : CompoundExplorer,
+            gdb.TYPE_CODE_UNION : CompoundExplorer,
+            gdb.TYPE_CODE_PTR : PointerExplorer,
+            gdb.TYPE_CODE_REF : ReferenceExplorer,
+            gdb.TYPE_CODE_RVALUE_REF : ReferenceExplorer,
+            gdb.TYPE_CODE_TYPEDEF : TypedefExplorer,
+            gdb.TYPE_CODE_ARRAY : ArrayExplorer
+        }
+
+    @staticmethod
+    def is_scalar_type(type):
+        """Checks whether a type is a scalar type.
+        A type is a scalar type of its type is
+            gdb.TYPE_CODE_CHAR or
+            gdb.TYPE_CODE_INT or
+            gdb.TYPE_CODE_BOOL or
+            gdb.TYPE_CODE_FLT or
+            gdb.TYPE_CODE_VOID or
+            gdb.TYPE_CODE_ENUM.
+
+        Arguments:
+            type: The type to be checked.
+
+        Returns:
+            'True' if 'type' is a scalar type. 'False' otherwise.
+        """
+        return type.code in Explorer._SCALAR_TYPE_LIST
+
+    @staticmethod
+    def return_to_parent_value():
+        """A utility function which prints that the current exploration session
+        is returning to the parent value. Useful when exploring values.
+        """
+        print ("\nReturning to parent value...\n")
+        
+    @staticmethod
+    def return_to_parent_value_prompt():
+        """A utility function which prompts the user to press the 'enter' key
+        so that the exploration session can shift back to the parent value.
+        Useful when exploring values.
+        """
+        raw_input("\nPress enter to return to parent value: ")
+        
+    @staticmethod
+    def return_to_enclosing_type():
+        """A utility function which prints that the current exploration session
+        is returning to the enclosing type.  Useful when exploring types.
+        """
+        print ("\nReturning to enclosing type...\n")
+        
+    @staticmethod
+    def return_to_enclosing_type_prompt():
+        """A utility function which prompts the user to press the 'enter' key
+        so that the exploration session can shift back to the enclosing type.
+        Useful when exploring types.
+        """
+        raw_input("\nPress enter to return to enclosing type: ")
+
+
+class ScalarExplorer(object):
+    """Internal class used to explore scalar values."""
+
+    @staticmethod
+    def explore_expr(expr, value, is_child):
+        """Function to explore scalar values.
+        See Explorer.explore_expr and Explorer.is_scalar_type for more
+        information.
+        """
+        print ("'%s' is a scalar value of type '%s'." %
+               (expr, value.type))
+        print ("%s = %s" % (expr, str(value)))
+
+        if is_child:
+            Explorer.return_to_parent_value_prompt()
+            Explorer.return_to_parent_value()
+
+        return False
+
+    @staticmethod
+    def explore_type(name, datatype, is_child):
+        """Function to explore scalar types.
+        See Explorer.explore_type and Explorer.is_scalar_type for more
+        information.
+        """
+        if datatype.code == gdb.TYPE_CODE_ENUM:
+            if is_child:
+                print ("%s is of an enumerated type '%s'." %
+                       (name, str(datatype)))
+            else:
+                print ("'%s' is an enumerated type." % name)
+        else:
+            if is_child:
+                print ("%s is of a scalar type '%s'." %
+                       (name, str(datatype)))
+            else:
+                print ("'%s' is a scalar type." % name)
+
+        if is_child:
+            Explorer.return_to_enclosing_type_prompt()
+            Explorer.return_to_enclosing_type()
+
+        return False
+
+
+class PointerExplorer(object):
+    """Internal class used to explore pointer values."""
+
+    @staticmethod
+    def explore_expr(expr, value, is_child):
+        """Function to explore pointer values.
+        See Explorer.explore_expr for more information.
+        """
+        print ("'%s' is a pointer to a value of type '%s'" %
+               (expr, str(value.type.target())))
+        option  = raw_input("Continue exploring it as a pointer to a single "
+                            "value [y/n]: ")
+        if option == "y":
+            deref_value = None
+            try:
+                deref_value = value.dereference()
+                str(deref_value)
+            except gdb.MemoryError:
+                print ("'%s' a pointer pointing to an invalid memory "
+                       "location." % expr)
+                if is_child:
+                    Explorer.return_to_parent_value_prompt()
+                return False
+            Explorer.explore_expr("*%s" % Explorer.guard_expr(expr),
+                                  deref_value, is_child)
+            return False
+        
+        option  = raw_input("Continue exploring it as a pointer to an "
+                            "array [y/n]: ")
+        if option == "y":
+            while True:
+                index = 0
+                try:
+                    index = int(raw_input("Enter the index of the element you "
+                                          "want to explore in '%s': " % expr))
+                except ValueError:
+                    break
+                element_expr = "%s[%d]" % (Explorer.guard_expr(expr), index)
+                element = value[index]
+                try:
+                    str(element)
+                except gdb.MemoryError:
+                    print ("Cannot read value at index %d." % index)
+                    continue
+                Explorer.explore_expr(element_expr, element, True)
+            return False
+
+        if is_child:
+            Explorer.return_to_parent_value()
+        return False
+
+    @staticmethod
+    def explore_type(name, datatype, is_child):
+        """Function to explore pointer types.
+        See Explorer.explore_type for more information.
+        """
+        target_type = datatype.target()
+        print ("\n%s is a pointer to a value of type '%s'." %
+               (name, str(target_type)))
+
+        Explorer.explore_type("the pointee type of %s" % name,
+                              target_type,
+                              is_child)
+        return False
+
+
+class ReferenceExplorer(object):
+    """Internal class used to explore reference (TYPE_CODE_REF) values."""
+
+    @staticmethod
+    def explore_expr(expr, value, is_child):
+        """Function to explore array values.
+        See Explorer.explore_expr for more information.
+        """
+        referenced_value = value.referenced_value()
+        Explorer.explore_expr(expr, referenced_value, is_child)
+        return False
+
+    @staticmethod
+    def explore_type(name, datatype, is_child):
+        """Function to explore pointer types.
+        See Explorer.explore_type for more information.
+        """
+        target_type = datatype.target()
+        Explorer.explore_type(name, target_type, is_child)
+        return False
+
+class ArrayExplorer(object):
+    """Internal class used to explore arrays."""
+
+    @staticmethod
+    def explore_expr(expr, value, is_child):
+        """Function to explore array values.
+        See Explorer.explore_expr for more information.
+        """
+        target_type = value.type.target()
+        print ("'%s' is an array of '%s'." % (expr, str(target_type)))
+        index = 0
+        try:
+            index = int(raw_input("Enter the index of the element you want to "
+                                  "explore in '%s': " % expr))
+        except ValueError:
+            if is_child:
+                Explorer.return_to_parent_value()
+            return False
+
+        element = None
+        try:
+            element = value[index]
+            str(element)
+        except gdb.MemoryError:
+            print ("Cannot read value at index %d." % index)
+            raw_input("Press enter to continue... ")
+            return True
+            
+        Explorer.explore_expr("%s[%d]" % (Explorer.guard_expr(expr), index),
+                              element, True)
+        return True
+
+    @staticmethod
+    def explore_type(name, datatype, is_child):
+        """Function to explore array types.
+        See Explorer.explore_type for more information.
+        """
+        target_type = datatype.target()
+        print ("%s is an array of '%s'." % (name, str(target_type)))
+
+        Explorer.explore_type("the array element of %s" % name, target_type,
+                              is_child)
+        return False
+
+
+class CompoundExplorer(object):
+    """Internal class used to explore struct, classes and unions."""
+
+    @staticmethod
+    def _print_fields(print_list):
+        """Internal function which prints the fields of a struct/class/union.
+        """
+        max_field_name_length = 0
+        for pair in print_list:
+            if max_field_name_length < len(pair[0]):
+                max_field_name_length = len(pair[0])
+
+        for pair in print_list:
+            print ("  %*s = %s" % (max_field_name_length, pair[0], pair[1]))
+
+    @staticmethod
+    def _get_real_field_count(fields):
+        real_field_count = 0;
+        for field in fields:
+            if not field.artificial:
+                real_field_count = real_field_count + 1
+
+        return real_field_count
+
+    @staticmethod
+    def explore_expr(expr, value, is_child):
+        """Function to explore structs/classes and union values.
+        See Explorer.explore_expr for more information.
+        """
+        datatype = value.type
+        type_code = datatype.code
+        fields = datatype.fields()
+
+        if type_code == gdb.TYPE_CODE_STRUCT:
+            type_desc = "struct/class"
+        else:
+            type_desc = "union"
+
+        if CompoundExplorer._get_real_field_count(fields) == 0:
+            print ("The value of '%s' is a %s of type '%s' with no fields." %
+                   (expr, type_desc, str(value.type)))
+            if is_child:
+                Explorer.return_to_parent_value_prompt()
+            return False
+
+        print ("The value of '%s' is a %s of type '%s' with the following "
+              "fields:\n" % (expr, type_desc, str(value.type)))
+
+        has_explorable_fields = False
+        choice_to_compound_field_map = { }
+        current_choice = 0
+        print_list = [ ]
+        for field in fields:
+            if field.artificial:
+                continue
+            field_full_name = Explorer.guard_expr(expr) + "." + field.name
+            if field.is_base_class:
+                field_value = value.cast(field.type)
+            else:
+                field_value = value[field.name]
+            literal_value = ""
+            if type_code == gdb.TYPE_CODE_UNION:
+                literal_value = ("<Enter %d to explore this field of type "
+                                 "'%s'>" % (current_choice, str(field.type)))
+                has_explorable_fields = True
+            else:
+                if Explorer.is_scalar_type(field.type):
+                    literal_value = ("%s .. (Value of type '%s')" %
+                                     (str(field_value), str(field.type)))
+                else:
+                    if field.is_base_class:
+                        field_desc = "base class"
+                    else:
+                        field_desc = "field"
+                    literal_value = ("<Enter %d to explore this %s of type "
+                                     "'%s'>" %
+                                     (current_choice, field_desc,
+                                      str(field.type)))
+                    has_explorable_fields = True
+
+            choice_to_compound_field_map[str(current_choice)] = (
+                field_full_name, field_value)
+            current_choice = current_choice + 1
+
+            print_list.append((field.name, literal_value))
+
+        CompoundExplorer._print_fields(print_list)
+        print ("")
+
+        if has_explorable_fields:
+            choice = raw_input("Enter the field number of choice: ")
+            if choice in choice_to_compound_field_map:
+                Explorer.explore_expr(choice_to_compound_field_map[choice][0],
+                                      choice_to_compound_field_map[choice][1],
+                                      True)
+                return True
+            else:
+                if is_child:
+                    Explorer.return_to_parent_value()
+        else:
+            if is_child:
+                Explorer.return_to_parent_value_prompt()
+
+        return False
+
+    @staticmethod
+    def explore_type(name, datatype, is_child):
+        """Function to explore struct/class and union types.
+        See Explorer.explore_type for more information.
+        """
+        type_code = datatype.code
+        type_desc = ""
+        if type_code == gdb.TYPE_CODE_STRUCT:
+            type_desc = "struct/class"
+        else:
+            type_desc = "union"
+
+        fields = datatype.fields()
+        if CompoundExplorer._get_real_field_count(fields) == 0:
+            if is_child:
+                print ("%s is a %s of type '%s' with no fields." %
+                       (name, type_desc, str(datatype)))
+                Explorer.return_to_enclosing_type_prompt()
+            else:
+                print ("'%s' is a %s with no fields." % (name, type_desc))
+            return False
+
+        if is_child:
+            print ("%s is a %s of type '%s' "
+                   "with the following fields:\n" %
+                   (name, type_desc, str(datatype)))
+        else:
+            print ("'%s' is a %s with the following "
+                   "fields:\n" %
+                   (name, type_desc))
+
+        has_explorable_fields = False
+        current_choice = 0
+        choice_to_compound_field_map = { }
+        print_list = [ ]
+        for field in fields:
+            if field.artificial:
+                continue
+            if field.is_base_class:
+                field_desc = "base class"
+            else:
+                field_desc = "field"
+            rhs = ("<Enter %d to explore this %s of type '%s'>" %
+                   (current_choice, field_desc, str(field.type)))
+            print_list.append((field.name, rhs))
+            choice_to_compound_field_map[str(current_choice)] = (
+                field.name, field.type, field_desc)
+            current_choice = current_choice + 1
+
+        CompoundExplorer._print_fields(print_list)
+        print ("")
+
+        if len(choice_to_compound_field_map) > 0:
+            choice = raw_input("Enter the field number of choice: ")
+            if choice in choice_to_compound_field_map:
+                if is_child:
+                    new_name = ("%s '%s' of %s" % 
+                                (choice_to_compound_field_map[choice][2],
+                                 choice_to_compound_field_map[choice][0],
+                                 name))
+                else:
+                    new_name = ("%s '%s' of '%s'" % 
+                                (choice_to_compound_field_map[choice][2],
+                                 choice_to_compound_field_map[choice][0],
+                                 name))
+                Explorer.explore_type(new_name,
+                    choice_to_compound_field_map[choice][1], True)
+                return True
+            else:
+                if is_child:
+                    Explorer.return_to_enclosing_type()
+        else:
+            if is_child:
+                Explorer.return_to_enclosing_type_prompt()
+
+        return False
+           
+
+class TypedefExplorer(object):
+    """Internal class used to explore values whose type is a typedef."""
+
+    @staticmethod
+    def explore_expr(expr, value, is_child):
+        """Function to explore typedef values.
+        See Explorer.explore_expr for more information.
+        """
+        actual_type = value.type.strip_typedefs()
+        print ("The value of '%s' is of type '%s' "
+               "which is a typedef of type '%s'" %
+               (expr, str(value.type), str(actual_type)))
+
+        Explorer.explore_expr(expr, value.cast(actual_type), is_child)
+        return False
+
+    @staticmethod
+    def explore_type(name, datatype, is_child):
+        """Function to explore typedef types.
+        See Explorer.explore_type for more information.
+        """
+        actual_type = datatype.strip_typedefs()
+        if is_child:
+            print ("The type of %s is a typedef of type '%s'." %
+                   (name, str(actual_type)))
+        else:
+            print ("The type '%s' is a typedef of type '%s'." %
+                   (name, str(actual_type)))
+
+        Explorer.explore_type(name, actual_type, is_child)
+        return False
+
+
+class ExploreUtils(object):
+    """Internal class which provides utilities for the main command classes."""
+
+    @staticmethod
+    def check_args(name, arg_str):
+        """Utility to check if adequate number of arguments are passed to an
+        explore command.
+
+        Arguments:
+            name: The name of the explore command.
+            arg_str: The argument string passed to the explore command.
+
+        Returns:
+            True if adequate arguments are passed, false otherwise.
+
+        Raises:
+            gdb.GdbError if adequate arguments are not passed.
+        """
+        if len(arg_str) < 1:
+            raise gdb.GdbError("ERROR: '%s' requires an argument."
+                               % name)
+            return False
+        else:
+            return True
+
+    @staticmethod
+    def get_type_from_str(type_str):
+        """A utility function to deduce the gdb.Type value from a string
+        representing the type.
+
+        Arguments:
+            type_str: The type string from which the gdb.Type value should be
+                      deduced.
+
+        Returns:
+            The deduced gdb.Type value if possible, None otherwise.
+        """
+        try:
+            # Assume the current language to be C/C++ and make a try.
+            return gdb.parse_and_eval("(%s *)0" % type_str).type.target()
+        except RuntimeError:
+            # If assumption of current language to be C/C++ was wrong, then
+            # lookup the type using the API.
+            try:
+                return gdb.lookup_type(type_str)
+            except RuntimeError:
+                return None
+
+    @staticmethod
+    def get_value_from_str(value_str):
+        """A utility function to deduce the gdb.Value value from a string
+        representing the value.
+
+        Arguments:
+            value_str: The value string from which the gdb.Value value should
+                       be deduced.
+
+        Returns:
+            The deduced gdb.Value value if possible, None otherwise.
+        """
+        try:
+            return gdb.parse_and_eval(value_str)
+        except RuntimeError:
+            return None
+
+
+class ExploreCommand(gdb.Command):
+    """Explore a value or a type valid in the current context.
+
+Usage: explore ARG
+
+- ARG is either a valid expression or a type name.
+- At any stage of exploration, hit the return key (instead of a
+choice, if any) to return to the enclosing type or value."""
+
+    def __init__(self):
+        super(ExploreCommand, self).__init__(name = "explore",
+                                             command_class = gdb.COMMAND_DATA,
+                                             prefix = True)
+
+    def invoke(self, arg_str, from_tty):
+        if ExploreUtils.check_args("explore", arg_str) == False:
+            return
+
+        # Check if it is a value
+        value = ExploreUtils.get_value_from_str(arg_str)
+        if value is not None:
+            Explorer.explore_expr(arg_str, value, False)
+            return
+
+        # If it is not a value, check if it is a type
+        datatype = ExploreUtils.get_type_from_str(arg_str)
+        if datatype is not None:
+            Explorer.explore_type(arg_str, datatype, False)
+            return
+
+        # If it is neither a value nor a type, raise an error.
+        raise gdb.GdbError(
+            ("'%s' neither evaluates to a value nor is a type "
+             "in the current context." %
+             arg_str))
+
+
+class ExploreValueCommand(gdb.Command):
+    """Explore value of an expression valid in the current context.
+
+Usage: explore value ARG
+
+- ARG is a valid expression.
+- At any stage of exploration, hit the return key (instead of a
+choice, if any) to return to the enclosing value."""
+ 
+    def __init__(self):
+        super(ExploreValueCommand, self).__init__(
+            name = "explore value", command_class = gdb.COMMAND_DATA)
+
+    def invoke(self, arg_str, from_tty):
+        if ExploreUtils.check_args("explore value", arg_str) == False:
+            return
+
+        value = ExploreUtils.get_value_from_str(arg_str)
+        if value is None:
+            raise gdb.GdbError(
+                (" '%s' does not evaluate to a value in the current "
+                 "context." %
+                 arg_str))
+            return
+
+        Explorer.explore_expr(arg_str, value, False)
+
+
+class ExploreTypeCommand(gdb.Command):            
+    """Explore a type or the type of an expression.
+
+Usage: explore type ARG
+
+- ARG is a valid expression or a type name.
+- At any stage of exploration, hit the return key (instead of a
+choice, if any) to return to the enclosing type."""
+
+    def __init__(self):
+        super(ExploreTypeCommand, self).__init__(
+            name = "explore type", command_class = gdb.COMMAND_DATA)
+
+    def invoke(self, arg_str, from_tty):
+        if ExploreUtils.check_args("explore type", arg_str) == False:
+            return
+
+        datatype = ExploreUtils.get_type_from_str(arg_str)
+        if datatype is not None:
+            Explorer.explore_type(arg_str, datatype, False)
+            return
+
+        value = ExploreUtils.get_value_from_str(arg_str)
+        if value is not None:
+            print ("'%s' is of type '%s'." % (arg_str, str(value.type)))
+            Explorer.explore_type(str(value.type), value.type, False)
+            return
+
+        raise gdb.GdbError(("'%s' is not a type or value in the current "
+                            "context." % arg_str))
+
+
+Explorer.init_env()
+
+ExploreCommand()
+ExploreValueCommand()
+ExploreTypeCommand()
diff --git a/share/gdb/python/gdb/command/frame_filters.py b/share/gdb/python/gdb/command/frame_filters.py
new file mode 100644
index 0000000..9d28f84
--- /dev/null
+++ b/share/gdb/python/gdb/command/frame_filters.py
@@ -0,0 +1,456 @@
+# Frame-filter commands.
+# Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+"""GDB commands for working with frame-filters."""
+
+import sys
+import gdb
+import copy
+from gdb.FrameIterator import FrameIterator
+from gdb.FrameDecorator import FrameDecorator
+import gdb.frames
+import itertools
+
+# GDB Commands.
+class SetFilterPrefixCmd(gdb.Command):
+    """Prefix command for 'set' frame-filter related operations."""
+
+    def __init__(self):
+        super(SetFilterPrefixCmd, self).__init__("set frame-filter",
+                                                 gdb.COMMAND_OBSCURE,
+                                                 gdb.COMPLETE_NONE, True)
+
+class ShowFilterPrefixCmd(gdb.Command):
+    """Prefix command for 'show' frame-filter related operations."""
+    def __init__(self):
+        super(ShowFilterPrefixCmd, self).__init__("show frame-filter",
+                                                  gdb.COMMAND_OBSCURE,
+                                                  gdb.COMPLETE_NONE, True)
+class InfoFrameFilter(gdb.Command):
+    """List all registered Python frame-filters.
+
+Usage: info frame-filters"""
+
+    def __init__(self):
+        super(InfoFrameFilter, self).__init__("info frame-filter",
+                                              gdb.COMMAND_DATA)
+    @staticmethod
+    def enabled_string(state):
+        """Return "Yes" if filter is enabled, otherwise "No"."""
+        if state:
+            return "Yes"
+        else:
+            return "No"
+
+    def print_list(self, title, frame_filters, blank_line):
+        sorted_frame_filters = sorted(frame_filters.items(),
+                                      key=lambda i: gdb.frames.get_priority(i[1]),
+                                      reverse=True)
+
+        if len(sorted_frame_filters) == 0:
+            return 0
+
+        print(title)
+        print("  Priority  Enabled  Name")
+        for frame_filter in sorted_frame_filters:
+            name = frame_filter[0]
+            try:
+                priority = '{:<8}'.format(
+                    str(gdb.frames.get_priority(frame_filter[1])))
+                enabled = '{:<7}'.format(
+                    self.enabled_string(gdb.frames.get_enabled(frame_filter[1])))
+                print("  %s  %s  %s" % (priority, enabled, name))
+            except Exception:
+                e = sys.exc_info()[1]
+                print("  Error printing filter '"+name+"': "+str(e))
+        if blank_line:
+            print("")
+        return 1
+
+    def invoke(self, arg, from_tty):
+        any_printed = self.print_list("global frame-filters:", gdb.frame_filters, True)
+
+        cp = gdb.current_progspace()
+        any_printed += self.print_list("progspace %s frame-filters:" % cp.filename,
+                                       cp.frame_filters, True)
+
+        for objfile in gdb.objfiles():
+            any_printed += self.print_list("objfile %s frame-filters:" % objfile.filename,
+                                           objfile.frame_filters, False)
+
+        if any_printed == 0:
+            print ("No frame filters.")
+
+# Internal enable/disable functions.
+
+def _enable_parse_arg(cmd_name, arg):
+    """ Internal worker function to take an argument from
+    enable/disable and return a tuple of arguments.
+
+    Arguments:
+        cmd_name: Name of the command invoking this function.
+        args: The argument as a string.
+
+    Returns:
+        A tuple containing the dictionary, and the argument, or just
+        the dictionary in the case of "all".
+    """
+
+    argv = gdb.string_to_argv(arg);
+    argc = len(argv)
+    if argc == 0:
+        raise gdb.GdbError(cmd_name + " requires an argument")
+    if argv[0] == "all":
+        if argc > 1:
+            raise gdb.GdbError(cmd_name + ": with 'all' " \
+                               "you may not specify a filter.")
+    elif argc != 2:
+            raise gdb.GdbError(cmd_name + " takes exactly two arguments.")
+
+    return argv
+
+def _do_enable_frame_filter(command_tuple, flag):
+    """Worker for enabling/disabling frame_filters.
+
+    Arguments:
+        command_type: A tuple with the first element being the
+                      frame filter dictionary, and the second being
+                      the frame filter name.
+        flag: True for Enable, False for Disable.
+    """
+
+    list_op = command_tuple[0]
+    op_list = gdb.frames.return_list(list_op)
+
+    if list_op == "all":
+        for item in op_list:
+            gdb.frames.set_enabled(item, flag)
+    else:
+        frame_filter = command_tuple[1]
+        try:
+            ff = op_list[frame_filter]
+        except KeyError:
+            msg = "frame-filter '" + str(frame_filter) + "' not found."
+            raise gdb.GdbError(msg)
+
+        gdb.frames.set_enabled(ff, flag)
+
+def _complete_frame_filter_list(text, word, all_flag):
+    """Worker for frame filter dictionary name completion.
+
+    Arguments:
+        text: The full text of the command line.
+        word: The most recent word of the command line.
+        all_flag: Whether to include the word "all" in completion.
+
+    Returns:
+        A list of suggested frame filter dictionary name completions
+        from text/word analysis.  This list can be empty when there
+        are no suggestions for completion.
+        """
+    if all_flag == True:
+        filter_locations = ["all", "global", "progspace"]
+    else:
+        filter_locations = ["global", "progspace"]
+    for objfile in gdb.objfiles():
+        filter_locations.append(objfile.filename)
+
+    # If the user just asked for completions with no completion
+    # hints, just return all the frame filter dictionaries we know
+    # about.
+    if (text == ""):
+        return filter_locations
+
+    # Otherwise filter on what we know.
+    flist = filter(lambda x,y=text:x.startswith(y), filter_locations)
+
+    # If we only have one completion, complete it and return it.
+    if len(flist) == 1:
+        flist[0] = flist[0][len(text)-len(word):]
+
+    # Otherwise, return an empty list, or a list of frame filter
+    # dictionaries that the previous filter operation returned.
+    return flist
+
+def _complete_frame_filter_name(word, printer_dict):
+    """Worker for frame filter name completion.
+
+    Arguments:
+
+        word: The most recent word of the command line.
+
+        printer_dict: The frame filter dictionary to search for frame
+        filter name completions.
+
+        Returns: A list of suggested frame filter name completions
+        from word analysis of the frame filter dictionary.  This list
+        can be empty when there are no suggestions for completion.
+    """
+
+    printer_keys = printer_dict.keys()
+    if (word == ""):
+        return printer_keys
+
+    flist = filter(lambda x,y=word:x.startswith(y), printer_keys)
+    return flist
+
+class EnableFrameFilter(gdb.Command):
+    """GDB command to enable the specified frame-filter.
+
+Usage: enable frame-filter DICTIONARY [NAME]
+
+DICTIONARY is the name of the frame filter dictionary on which to
+operate.  If dictionary is set to "all", perform operations on all
+dictionaries.  Named dictionaries are: "global" for the global
+frame filter dictionary, "progspace" for the program space's frame
+filter dictionary.  If either all, or the two named dictionaries
+are not specified, the dictionary name is assumed to be the name
+of an "objfile" -- a shared library or an executable.
+
+NAME matches the name of the frame-filter to operate on."""
+    def __init__(self):
+        super(EnableFrameFilter, self).__init__("enable frame-filter",
+                                                 gdb.COMMAND_DATA)
+    def complete(self, text, word):
+        """Completion function for both frame filter dictionary, and
+        frame filter name."""
+        if text.count(" ") == 0:
+            return _complete_frame_filter_list(text, word, True)
+        else:
+            printer_list = gdb.frames.return_list(text.split()[0].rstrip())
+            return _complete_frame_filter_name(word, printer_list)
+
+    def invoke(self, arg, from_tty):
+        command_tuple = _enable_parse_arg("enable frame-filter", arg)
+        _do_enable_frame_filter(command_tuple, True)
+
+
+class DisableFrameFilter(gdb.Command):
+    """GDB command to disable the specified frame-filter.
+
+Usage: disable frame-filter DICTIONARY [NAME]
+
+DICTIONARY is the name of the frame filter dictionary on which to
+operate.  If dictionary is set to "all", perform operations on all
+dictionaries.  Named dictionaries are: "global" for the global
+frame filter dictionary, "progspace" for the program space's frame
+filter dictionary.  If either all, or the two named dictionaries
+are not specified, the dictionary name is assumed to be the name
+of an "objfile" -- a shared library or an executable.
+
+NAME matches the name of the frame-filter to operate on."""
+    def __init__(self):
+        super(DisableFrameFilter, self).__init__("disable frame-filter",
+                                                  gdb.COMMAND_DATA)
+
+    def complete(self, text, word):
+        """Completion function for both frame filter dictionary, and
+        frame filter name."""
+        if text.count(" ") == 0:
+            return _complete_frame_filter_list(text, word, True)
+        else:
+            printer_list = gdb.frames.return_list(text.split()[0].rstrip())
+            return _complete_frame_filter_name(word, printer_list)
+
+    def invoke(self, arg, from_tty):
+        command_tuple = _enable_parse_arg("disable frame-filter", arg)
+        _do_enable_frame_filter(command_tuple, False)
+
+class SetFrameFilterPriority(gdb.Command):
+    """GDB command to set the priority of the specified frame-filter.
+
+Usage: set frame-filter priority DICTIONARY NAME PRIORITY
+
+DICTIONARY is the name of the frame filter dictionary on which to
+operate.  Named dictionaries are: "global" for the global frame
+filter dictionary, "progspace" for the program space's framefilter
+dictionary.  If either of these two are not specified, the
+dictionary name is assumed to be the name of an "objfile" -- a
+shared library or an executable.
+
+NAME matches the name of the frame filter to operate on.
+
+PRIORITY is the an integer to assign the new priority to the frame
+filter."""
+
+    def __init__(self):
+        super(SetFrameFilterPriority, self).__init__("set frame-filter " \
+                                                     "priority",
+                                                     gdb.COMMAND_DATA)
+
+    def _parse_pri_arg(self, arg):
+        """Internal worker to parse a priority from a tuple.
+
+        Arguments:
+            arg: Tuple which contains the arguments from the command.
+
+        Returns:
+            A tuple containing the dictionary, name and priority from
+            the arguments.
+
+        Raises:
+            gdb.GdbError: An error parsing the arguments.
+        """
+
+        argv = gdb.string_to_argv(arg);
+        argc = len(argv)
+        if argc != 3:
+            print("set frame-filter priority " \
+                  "takes exactly three arguments.")
+            return None
+
+        return argv
+
+    def _set_filter_priority(self, command_tuple):
+        """Internal worker for setting priority of frame-filters, by
+        parsing a tuple and calling _set_priority with the parsed
+        tuple.
+
+        Arguments:
+            command_tuple: Tuple which contains the arguments from the
+                           command.
+        """
+
+        list_op = command_tuple[0]
+        frame_filter = command_tuple[1]
+
+        # GDB returns arguments as a string, so convert priority to
+        # a number.
+        priority = int(command_tuple[2])
+
+        op_list = gdb.frames.return_list(list_op)
+
+        try:
+            ff = op_list[frame_filter]
+        except KeyError:
+            msg = "frame-filter '" + str(frame_filter) + "' not found."
+            raise gdb.GdbError(msg)
+
+        gdb.frames.set_priority(ff, priority)
+
+    def complete(self, text, word):
+        """Completion function for both frame filter dictionary, and
+        frame filter name."""
+        if text.count(" ") == 0:
+            return _complete_frame_filter_list(text, word, False)
+        else:
+            printer_list = gdb.frames.return_list(text.split()[0].rstrip())
+            return _complete_frame_filter_name(word, printer_list)
+
+    def invoke(self, arg, from_tty):
+        command_tuple = self._parse_pri_arg(arg)
+        if command_tuple != None:
+            self._set_filter_priority(command_tuple)
+
+class ShowFrameFilterPriority(gdb.Command):
+    """GDB command to show the priority of the specified frame-filter.
+
+Usage: show frame-filter priority DICTIONARY NAME
+
+DICTIONARY is the name of the frame filter dictionary on which to
+operate.  Named dictionaries are: "global" for the global frame
+filter dictionary, "progspace" for the program space's framefilter
+dictionary.  If either of these two are not specified, the
+dictionary name is assumed to be the name of an "objfile" -- a
+shared library or an executable.
+
+NAME matches the name of the frame-filter to operate on."""
+
+    def __init__(self):
+        super(ShowFrameFilterPriority, self).__init__("show frame-filter " \
+                                                      "priority",
+                                                      gdb.COMMAND_DATA)
+
+    def _parse_pri_arg(self, arg):
+        """Internal worker to parse a dictionary and name from a
+        tuple.
+
+        Arguments:
+            arg: Tuple which contains the arguments from the command.
+
+        Returns:
+            A tuple containing the dictionary,  and frame filter name.
+
+        Raises:
+            gdb.GdbError: An error parsing the arguments.
+        """
+
+        argv = gdb.string_to_argv(arg);
+        argc = len(argv)
+        if argc != 2:
+            print("show frame-filter priority " \
+                  "takes exactly two arguments.")
+            return None
+
+        return argv
+
+    def get_filter_priority(self, frame_filters, name):
+        """Worker for retrieving the priority of frame_filters.
+
+        Arguments:
+            frame_filters: Name of frame filter dictionary.
+            name: object to select printers.
+
+        Returns:
+            The priority of the frame filter.
+
+        Raises:
+            gdb.GdbError: A frame filter cannot be found.
+        """
+
+        op_list = gdb.frames.return_list(frame_filters)
+
+        try:
+            ff = op_list[name]
+        except KeyError:
+            msg = "frame-filter '" + str(name) + "' not found."
+            raise gdb.GdbError(msg)
+
+        return gdb.frames.get_priority(ff)
+
+    def complete(self, text, word):
+        """Completion function for both frame filter dictionary, and
+        frame filter name."""
+
+        if text.count(" ") == 0:
+            return _complete_frame_filter_list(text, word, False)
+        else:
+            printer_list = frame._return_list(text.split()[0].rstrip())
+            return _complete_frame_filter_name(word, printer_list)
+
+    def invoke(self, arg, from_tty):
+        command_tuple = self._parse_pri_arg(arg)
+        if command_tuple == None:
+            return
+        filter_name = command_tuple[1]
+        list_name = command_tuple[0]
+        try:
+            priority = self.get_filter_priority(list_name, filter_name);
+        except Exception:
+            e = sys.exc_info()[1]
+            print("Error printing filter priority for '"+name+"':"+str(e))
+        else:
+            print("Priority of filter '" + filter_name + "' in list '" \
+                + list_name + "' is: " + str(priority))
+
+# Register commands
+SetFilterPrefixCmd()
+ShowFilterPrefixCmd()
+InfoFrameFilter()
+EnableFrameFilter()
+DisableFrameFilter()
+SetFrameFilterPriority()
+ShowFrameFilterPriority()
diff --git a/share/gdb/python/gdb/command/pretty_printers.py b/share/gdb/python/gdb/command/pretty_printers.py
new file mode 100644
index 0000000..c1bdf68
--- /dev/null
+++ b/share/gdb/python/gdb/command/pretty_printers.py
@@ -0,0 +1,365 @@
+# Pretty-printer commands.
+# Copyright (C) 2010-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+"""GDB commands for working with pretty-printers."""
+
+import copy
+import gdb
+import re
+
+
+def parse_printer_regexps(arg):
+    """Internal utility to parse a pretty-printer command argv.
+
+    Arguments:
+        arg: The arguments to the command.  The format is:
+             [object-regexp [name-regexp]].
+             Individual printers in a collection are named as
+             printer-name;subprinter-name.
+
+    Returns:
+        The result is a 3-tuple of compiled regular expressions, except that
+        the resulting compiled subprinter regexp is None if not provided.
+
+    Raises:
+        SyntaxError: an error processing ARG
+    """
+
+    argv = gdb.string_to_argv(arg);
+    argc = len(argv)
+    object_regexp = ""  # match everything
+    name_regexp = ""  # match everything
+    subname_regexp = None
+    if argc > 3:
+        raise SyntaxError("too many arguments")
+    if argc >= 1:
+        object_regexp = argv[0]
+    if argc >= 2:
+        name_subname = argv[1].split(";", 1)
+        name_regexp = name_subname[0]
+        if len(name_subname) == 2:
+            subname_regexp = name_subname[1]
+    # That re.compile raises SyntaxError was determined empirically.
+    # We catch it and reraise it to provide a slightly more useful
+    # error message for the user.
+    try:
+        object_re = re.compile(object_regexp)
+    except SyntaxError:
+        raise SyntaxError("invalid object regexp: %s" % object_regexp)
+    try:
+        name_re = re.compile (name_regexp)
+    except SyntaxError:
+        raise SyntaxError("invalid name regexp: %s" % name_regexp)
+    if subname_regexp is not None:
+        try:
+            subname_re = re.compile(subname_regexp)
+        except SyntaxError:
+            raise SyntaxError("invalid subname regexp: %s" % subname_regexp)
+    else:
+        subname_re = None
+    return(object_re, name_re, subname_re)
+
+
+def printer_enabled_p(printer):
+    """Internal utility to see if printer (or subprinter) is enabled."""
+    if hasattr(printer, "enabled"):
+        return printer.enabled
+    else:
+        return True
+
+
+class InfoPrettyPrinter(gdb.Command):
+    """GDB command to list all registered pretty-printers.
+
+Usage: info pretty-printer [OBJECT-REGEXP [NAME-REGEXP]]
+
+OBJECT-REGEXP is a regular expression matching the objects to list.
+Objects are "global", the program space's file, and the objfiles within
+that program space.
+
+NAME-REGEXP matches the name of the pretty-printer.
+Individual printers in a collection are named as
+printer-name;subprinter-name."""
+
+    def __init__ (self):
+        super(InfoPrettyPrinter, self).__init__("info pretty-printer",
+                                                 gdb.COMMAND_DATA)
+
+    @staticmethod
+    def enabled_string(printer):
+        """Return "" if PRINTER is enabled, otherwise " [disabled]"."""
+        if printer_enabled_p(printer):
+            return ""
+        else:
+            return " [disabled]"
+
+    @staticmethod
+    def printer_name(printer):
+        """Return the printer's name."""
+        if hasattr(printer, "name"):
+            return printer.name
+        if hasattr(printer, "__name__"):
+            return printer.__name__
+        # This "shouldn't happen", but the public API allows for
+        # direct additions to the pretty-printer list, and we shouldn't
+        # crash because someone added a bogus printer.
+        # Plus we want to give the user a way to list unknown printers.
+        return "unknown"
+
+    def list_pretty_printers(self, pretty_printers, name_re, subname_re):
+        """Print a list of pretty-printers."""
+        # A potential enhancement is to provide an option to list printers in
+        # "lookup order" (i.e. unsorted).
+        sorted_pretty_printers = sorted (copy.copy(pretty_printers),
+                                         key = self.printer_name)
+        for printer in sorted_pretty_printers:
+            name = self.printer_name(printer)
+            enabled = self.enabled_string(printer)
+            if name_re.match(name):
+                print ("  %s%s" % (name, enabled))
+                if (hasattr(printer, "subprinters") and
+                    printer.subprinters is not None):
+                    sorted_subprinters = sorted (copy.copy(printer.subprinters),
+                                                 key = self.printer_name)
+                    for subprinter in sorted_subprinters:
+                        if (not subname_re or
+                            subname_re.match(subprinter.name)):
+                            print ("    %s%s" %
+                                   (subprinter.name,
+                                    self.enabled_string(subprinter)))
+
+    def invoke1(self, title, printer_list,
+                obj_name_to_match, object_re, name_re, subname_re):
+        """Subroutine of invoke to simplify it."""
+        if printer_list and object_re.match(obj_name_to_match):
+            print (title)
+            self.list_pretty_printers(printer_list, name_re, subname_re)
+
+    def invoke(self, arg, from_tty):
+        """GDB calls this to perform the command."""
+        (object_re, name_re, subname_re) = parse_printer_regexps(arg)
+        self.invoke1("global pretty-printers:", gdb.pretty_printers,
+                     "global", object_re, name_re, subname_re)
+        cp = gdb.current_progspace()
+        self.invoke1("progspace %s pretty-printers:" % cp.filename,
+                     cp.pretty_printers, "progspace",
+                     object_re, name_re, subname_re)
+        for objfile in gdb.objfiles():
+            self.invoke1("objfile %s pretty-printers:" % objfile.filename,
+                         objfile.pretty_printers, objfile.filename,
+                         object_re, name_re, subname_re)
+
+
+def count_enabled_printers(pretty_printers):
+    """Return a 2-tuple of number of enabled and total printers."""
+    enabled = 0
+    total = 0
+    for printer in pretty_printers:
+        if (hasattr(printer, "subprinters")
+            and printer.subprinters is not None):
+            if printer_enabled_p(printer):
+                for subprinter in printer.subprinters:
+                    if printer_enabled_p(subprinter):
+                        enabled += 1
+            total += len(printer.subprinters)
+        else:
+            if printer_enabled_p(printer):
+                enabled += 1
+            total += 1
+    return (enabled, total)
+
+
+def count_all_enabled_printers():
+    """Return a 2-tuble of the enabled state and total number of all printers.
+    This includes subprinters.
+    """
+    enabled_count = 0
+    total_count = 0
+    (t_enabled, t_total) = count_enabled_printers(gdb.pretty_printers)
+    enabled_count += t_enabled
+    total_count += t_total
+    (t_enabled, t_total) = count_enabled_printers(gdb.current_progspace().pretty_printers)
+    enabled_count += t_enabled
+    total_count += t_total
+    for objfile in gdb.objfiles():
+        (t_enabled, t_total) = count_enabled_printers(objfile.pretty_printers)
+        enabled_count += t_enabled
+        total_count += t_total
+    return (enabled_count, total_count)
+
+
+def pluralize(text, n, suffix="s"):
+    """Return TEXT pluralized if N != 1."""
+    if n != 1:
+        return "%s%s" % (text, suffix)
+    else:
+        return text
+
+
+def show_pretty_printer_enabled_summary():
+    """Print the number of printers enabled/disabled.
+    We count subprinters individually.
+    """
+    (enabled_count, total_count) = count_all_enabled_printers()
+    print ("%d of %d printers enabled" % (enabled_count, total_count))
+
+
+def do_enable_pretty_printer_1 (pretty_printers, name_re, subname_re, flag):
+    """Worker for enabling/disabling pretty-printers.
+
+    Arguments:
+        pretty_printers: list of pretty-printers
+        name_re: regular-expression object to select printers
+        subname_re: regular expression object to select subprinters or None
+                    if all are affected
+        flag: True for Enable, False for Disable
+
+    Returns:
+        The number of printers affected.
+        This is just for informational purposes for the user.
+    """
+    total = 0
+    for printer in pretty_printers:
+        if (hasattr(printer, "name") and name_re.match(printer.name) or
+            hasattr(printer, "__name__") and name_re.match(printer.__name__)):
+            if (hasattr(printer, "subprinters") and
+                printer.subprinters is not None):
+                if not subname_re:
+                    # Only record printers that change state.
+                    if printer_enabled_p(printer) != flag:
+                        for subprinter in printer.subprinters:
+                            if printer_enabled_p(subprinter):
+                                total += 1
+                    # NOTE: We preserve individual subprinter settings.
+                    printer.enabled = flag
+                else:
+                    # NOTE: Whether this actually disables the subprinter
+                    # depends on whether the printer's lookup function supports
+                    # the "enable" API.  We can only assume it does.
+                    for subprinter in printer.subprinters:
+                        if subname_re.match(subprinter.name):
+                            # Only record printers that change state.
+                           if (printer_enabled_p(printer) and
+                               printer_enabled_p(subprinter) != flag):
+                               total += 1
+                           subprinter.enabled = flag
+            else:
+                # This printer has no subprinters.
+                # If the user does "disable pretty-printer .* .* foo"
+                # should we disable printers that don't have subprinters?
+                # How do we apply "foo" in this context?  Since there is no
+                # "foo" subprinter it feels like we should skip this printer.
+                # There's still the issue of how to handle
+                # "disable pretty-printer .* .* .*", and every other variation
+                # that can match everything.  For now punt and only support
+                # "disable pretty-printer .* .*" (i.e. subname is elided)
+                # to disable everything.
+                if not subname_re:
+                    # Only record printers that change state.
+                    if printer_enabled_p(printer) != flag:
+                        total += 1
+                    printer.enabled = flag
+    return total
+
+
+def do_enable_pretty_printer (arg, flag):
+    """Internal worker for enabling/disabling pretty-printers."""
+    (object_re, name_re, subname_re) = parse_printer_regexps(arg)
+
+    total = 0
+    if object_re.match("global"):
+        total += do_enable_pretty_printer_1(gdb.pretty_printers,
+                                            name_re, subname_re, flag)
+    cp = gdb.current_progspace()
+    if object_re.match("progspace"):
+        total += do_enable_pretty_printer_1(cp.pretty_printers,
+                                            name_re, subname_re, flag)
+    for objfile in gdb.objfiles():
+        if object_re.match(objfile.filename):
+            total += do_enable_pretty_printer_1(objfile.pretty_printers,
+                                                name_re, subname_re, flag)
+
+    if flag:
+        state = "enabled"
+    else:
+        state = "disabled"
+    print ("%d %s %s" % (total, pluralize("printer", total), state))
+
+    # Print the total list of printers currently enabled/disabled.
+    # This is to further assist the user in determining whether the result
+    # is expected.  Since we use regexps to select it's useful.
+    show_pretty_printer_enabled_summary()
+
+
+# Enable/Disable one or more pretty-printers.
+#
+# This is intended for use when a broken pretty-printer is shipped/installed
+# and the user wants to disable that printer without disabling all the other
+# printers.
+#
+# A useful addition would be -v (verbose) to show each printer affected.
+
+class EnablePrettyPrinter (gdb.Command):
+    """GDB command to enable the specified pretty-printer.
+
+Usage: enable pretty-printer [OBJECT-REGEXP [NAME-REGEXP]]
+
+OBJECT-REGEXP is a regular expression matching the objects to examine.
+Objects are "global", the program space's file, and the objfiles within
+that program space.
+
+NAME-REGEXP matches the name of the pretty-printer.
+Individual printers in a collection are named as
+printer-name;subprinter-name."""
+
+    def __init__(self):
+        super(EnablePrettyPrinter, self).__init__("enable pretty-printer",
+                                                   gdb.COMMAND_DATA)
+
+    def invoke(self, arg, from_tty):
+        """GDB calls this to perform the command."""
+        do_enable_pretty_printer(arg, True)
+
+
+class DisablePrettyPrinter (gdb.Command):
+    """GDB command to disable the specified pretty-printer.
+
+Usage: disable pretty-printer [OBJECT-REGEXP [NAME-REGEXP]]
+
+OBJECT-REGEXP is a regular expression matching the objects to examine.
+Objects are "global", the program space's file, and the objfiles within
+that program space.
+
+NAME-REGEXP matches the name of the pretty-printer.
+Individual printers in a collection are named as
+printer-name;subprinter-name."""
+
+    def __init__(self):
+        super(DisablePrettyPrinter, self).__init__("disable pretty-printer",
+                                                   gdb.COMMAND_DATA)
+
+    def invoke(self, arg, from_tty):
+        """GDB calls this to perform the command."""
+        do_enable_pretty_printer(arg, False)
+
+
+def register_pretty_printer_commands():
+    """Call from a top level script to install the pretty-printer commands."""
+    InfoPrettyPrinter()
+    EnablePrettyPrinter()
+    DisablePrettyPrinter()
+
+register_pretty_printer_commands()
diff --git a/share/gdb/python/gdb/command/prompt.py b/share/gdb/python/gdb/command/prompt.py
new file mode 100644
index 0000000..3d662a7
--- /dev/null
+++ b/share/gdb/python/gdb/command/prompt.py
@@ -0,0 +1,65 @@
+# Extended prompt.
+# Copyright (C) 2011-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+"""GDB command for working with extended prompts."""
+
+import gdb
+import gdb.prompt
+
+class _ExtendedPrompt(gdb.Parameter):
+
+    """Set the extended prompt.
+
+Usage: set extended-prompt VALUE
+
+Substitutions are applied to VALUE to compute the real prompt.
+
+The currently defined substitutions are:
+
+"""
+    # Add the prompt library's dynamically generated help to the
+    # __doc__ string.
+    __doc__ = __doc__ + gdb.prompt.prompt_help()
+
+    set_doc = "Set the extended prompt."
+    show_doc = "Show the extended prompt."
+
+    def __init__(self):
+        super(_ExtendedPrompt, self).__init__("extended-prompt",
+                                              gdb.COMMAND_SUPPORT,
+                                              gdb.PARAM_STRING_NOESCAPE)
+        self.value = ''
+        self.hook_set = False
+
+    def get_show_string (self, pvalue):
+        if self.value is not '':
+           return "The extended prompt is: " + self.value
+        else:
+           return "The extended prompt is not set."
+
+    def get_set_string (self):
+        if self.hook_set == False:
+           gdb.prompt_hook = self.before_prompt_hook
+           self.hook_set = True
+        return ""
+
+    def before_prompt_hook(self, current):
+        if self.value is not '':
+            return gdb.prompt.substitute_prompt(self.value)
+        else:
+            return None
+
+_ExtendedPrompt()
diff --git a/share/gdb/python/gdb/command/type_printers.py b/share/gdb/python/gdb/command/type_printers.py
new file mode 100644
index 0000000..f835f03
--- /dev/null
+++ b/share/gdb/python/gdb/command/type_printers.py
@@ -0,0 +1,122 @@
+# Type printer commands.
+# Copyright (C) 2010-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import copy
+import gdb
+
+"""GDB commands for working with type-printers."""
+
+class InfoTypePrinter(gdb.Command):
+    """GDB command to list all registered type-printers.
+
+Usage: info type-printers"""
+
+    def __init__ (self):
+        super(InfoTypePrinter, self).__init__("info type-printers",
+                                              gdb.COMMAND_DATA)
+
+    def list_type_printers(self, type_printers):
+        """Print a list of type printers."""
+        # A potential enhancement is to provide an option to list printers in
+        # "lookup order" (i.e. unsorted).
+        sorted_type_printers = sorted (copy.copy(type_printers),
+                                       key = lambda x: x.name)
+        for printer in sorted_type_printers:
+            if printer.enabled:
+                enabled = ''
+            else:
+                enabled = " [disabled]"
+            print ("  %s%s" % (printer.name, enabled))
+
+    def invoke(self, arg, from_tty):
+        """GDB calls this to perform the command."""
+        sep = ''
+        for objfile in gdb.objfiles():
+            if objfile.type_printers:
+                print ("%sType printers for %s:" % (sep, objfile.filename))
+                self.list_type_printers(objfile.type_printers)
+                sep = '\n'
+        if gdb.current_progspace().type_printers:
+            print ("%sType printers for program space:" % sep)
+            self.list_type_printers(gdb.current_progspace().type_printers)
+            sep = '\n'
+        if gdb.type_printers:
+            print ("%sGlobal type printers:" % sep)
+            self.list_type_printers(gdb.type_printers)
+
+class _EnableOrDisableCommand(gdb.Command):
+    def __init__(self, setting, name):
+        super(_EnableOrDisableCommand, self).__init__(name, gdb.COMMAND_DATA)
+        self.setting = setting
+
+    def set_some(self, name, printers):
+        result = False
+        for p in printers:
+            if name == p.name:
+                p.enabled = self.setting
+                result = True
+        return result
+
+    def invoke(self, arg, from_tty):
+        """GDB calls this to perform the command."""
+        for name in arg.split():
+            ok = False
+            for objfile in gdb.objfiles():
+                if self.set_some(name, objfile.type_printers):
+                    ok = True
+            if self.set_some(name, gdb.current_progspace().type_printers):
+                ok = True
+            if self.set_some(name, gdb.type_printers):
+                ok = True
+            if not ok:
+                print ("No type printer named '%s'" % name)
+
+    def add_some(self, result, word, printers):
+        for p in printers:
+            if p.name.startswith(word):
+                result.append(p.name)
+
+    def complete(self, text, word):
+        result = []
+        for objfile in gdb.objfiles():
+            self.add_some(result, word, objfile.type_printers)
+        self.add_some(result, word, gdb.current_progspace().type_printers)
+        self.add_some(result, word, gdb.type_printers)
+        return result
+
+class EnableTypePrinter(_EnableOrDisableCommand):
+    """GDB command to enable the specified type printer.
+
+Usage: enable type-printer NAME
+
+NAME is the name of the type-printer."""
+
+    def __init__(self):
+        super(EnableTypePrinter, self).__init__(True, "enable type-printer")
+
+class DisableTypePrinter(_EnableOrDisableCommand):
+    """GDB command to disable the specified type-printer.
+
+Usage: disable type-printer NAME
+
+NAME is the name of the type-printer."""
+
+    def __init__(self):
+        super(DisableTypePrinter, self).__init__(False, "disable type-printer")
+
+InfoTypePrinter()
+EnableTypePrinter()
+DisableTypePrinter()
diff --git a/share/gdb/python/gdb/command/unwinders.py b/share/gdb/python/gdb/command/unwinders.py
new file mode 100644
index 0000000..028ad7d
--- /dev/null
+++ b/share/gdb/python/gdb/command/unwinders.py
@@ -0,0 +1,195 @@
+# Unwinder commands.
+# Copyright 2015-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import gdb
+import re
+
+
+def validate_regexp(exp, idstring):
+    try:
+        return re.compile(exp)
+    except SyntaxError:
+        raise SyntaxError("Invalid %s regexp: %s." % (idstring, exp))
+
+
+def parse_unwinder_command_args(arg):
+    """Internal utility to parse unwinder command argv.
+
+    Arguments:
+        arg: The arguments to the command. The format is:
+             [locus-regexp [name-regexp]]
+
+    Returns:
+        A 2-tuple of compiled regular expressions.
+
+    Raises:
+        SyntaxError: an error processing ARG
+    """
+
+    argv = gdb.string_to_argv(arg)
+    argc = len(argv)
+    if argc > 2:
+        raise SyntaxError("Too many arguments.")
+    locus_regexp = ""
+    name_regexp = ""
+    if argc >= 1:
+        locus_regexp = argv[0]
+        if argc >= 2:
+            name_regexp = argv[1]
+    return (validate_regexp(locus_regexp, "locus"),
+            validate_regexp(name_regexp, "unwinder"))
+
+
+class InfoUnwinder(gdb.Command):
+    """GDB command to list unwinders.
+
+Usage: info unwinder [LOCUS-REGEXP [NAME-REGEXP]]
+
+LOCUS-REGEXP is a regular expression matching the location of the
+unwinder.  If it is omitted, all registered unwinders from all
+loci are listed.  A locus can be 'global', 'progspace' to list
+the unwinders from the current progspace, or a regular expression
+matching filenames of objfiles.
+
+NAME-REGEXP is a regular expression to filter unwinder names.  If
+this omitted for a specified locus, then all registered unwinders
+in the locus are listed."""
+
+    def __init__(self):
+        super(InfoUnwinder, self).__init__("info unwinder",
+                                            gdb.COMMAND_STACK)
+
+    def list_unwinders(self, title, unwinders, name_re):
+        """Lists the unwinders whose name matches regexp.
+
+        Arguments:
+            title: The line to print before the list.
+            unwinders: The list of the unwinders.
+            name_re: unwinder name filter.
+        """
+        if not unwinders:
+            return
+        print(title)
+        for unwinder in unwinders:
+            if name_re.match(unwinder.name):
+                print("  %s%s" % (unwinder.name,
+                                  "" if unwinder.enabled else " [disabled]"))
+
+    def invoke(self, arg, from_tty):
+        locus_re, name_re = parse_unwinder_command_args(arg)
+        if locus_re.match("global"):
+            self.list_unwinders("Global:", gdb.frame_unwinders,
+                                name_re)
+        if locus_re.match("progspace"):
+            cp = gdb.current_progspace()
+            self.list_unwinders("Progspace %s:" % cp.filename,
+                                cp.frame_unwinders, name_re)
+        for objfile in gdb.objfiles():
+            if locus_re.match(objfile.filename):
+                self.list_unwinders("Objfile %s:" % objfile.filename,
+                                    objfile.frame_unwinders, name_re)
+
+
+def do_enable_unwinder1(unwinders, name_re, flag):
+    """Enable/disable unwinders whose names match given regex.
+
+    Arguments:
+        unwinders: The list of unwinders.
+        name_re: Unwinder name filter.
+        flag: Enable/disable.
+
+    Returns:
+        The number of unwinders affected.
+    """
+    total = 0
+    for unwinder in unwinders:
+        if name_re.match(unwinder.name):
+            unwinder.enabled = flag
+            total += 1
+    return total
+
+
+def do_enable_unwinder(arg, flag):
+    """Enable/disable unwinder(s)."""
+    (locus_re, name_re) = parse_unwinder_command_args(arg)
+    total = 0
+    if locus_re.match("global"):
+        total += do_enable_unwinder1(gdb.frame_unwinders, name_re, flag)
+    if locus_re.match("progspace"):
+        total += do_enable_unwinder1(gdb.current_progspace().frame_unwinders,
+                                     name_re, flag)
+    for objfile in gdb.objfiles():
+        if locus_re.match(objfile.filename):
+            total += do_enable_unwinder1(objfile.frame_unwinders, name_re,
+                                         flag)
+    if total > 0:
+        gdb.invalidate_cached_frames()
+    print("%d unwinder%s %s" % (total, "" if total == 1 else "s",
+                                "enabled" if flag else "disabled"))
+
+
+class EnableUnwinder(gdb.Command):
+    """GDB command to enable unwinders.
+
+Usage: enable unwinder [LOCUS-REGEXP [NAME-REGEXP]]
+
+LOCUS-REGEXP is a regular expression specifying the unwinders to
+enable.  It can 'global', 'progspace', or the name of an objfile
+within that progspace.
+
+NAME_REGEXP is a regular expression to filter unwinder names.  If
+this omitted for a specified locus, then all registered unwinders
+in the locus are affected."""
+
+    def __init__(self):
+        super(EnableUnwinder, self).__init__("enable unwinder",
+                                             gdb.COMMAND_STACK)
+
+    def invoke(self, arg, from_tty):
+        """GDB calls this to perform the command."""
+        do_enable_unwinder(arg, True)
+
+
+class DisableUnwinder(gdb.Command):
+    """GDB command to disable the specified unwinder.
+
+Usage: disable unwinder [LOCUS-REGEXP [NAME-REGEXP]]
+
+LOCUS-REGEXP is a regular expression specifying the unwinders to
+disable.  It can 'global', 'progspace', or the name of an objfile
+within that progspace.
+
+NAME_REGEXP is a regular expression to filter unwinder names.  If
+this omitted for a specified locus, then all registered unwinders
+in the locus are affected."""
+
+    def __init__(self):
+        super(DisableUnwinder, self).__init__("disable unwinder",
+                                              gdb.COMMAND_STACK)
+
+    def invoke(self, arg, from_tty):
+        """GDB calls this to perform the command."""
+        do_enable_unwinder(arg, False)
+
+
+def register_unwinder_commands():
+    """Installs the unwinder commands."""
+    InfoUnwinder()
+    EnableUnwinder()
+    DisableUnwinder()
+
+
+register_unwinder_commands()
diff --git a/share/gdb/python/gdb/command/xmethods.py b/share/gdb/python/gdb/command/xmethods.py
new file mode 100644
index 0000000..ea02609
--- /dev/null
+++ b/share/gdb/python/gdb/command/xmethods.py
@@ -0,0 +1,271 @@
+# Xmethod commands.
+# Copyright 2013-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import gdb
+import re
+
+"""GDB commands for working with xmethods."""
+
+
+def validate_xm_regexp(part_name, regexp):
+    try:
+        return re.compile(regexp)
+    except SyntaxError:
+        raise SyntaxError("Invalid %s regexp: %s", part_name, regexp)
+
+
+def parse_xm_command_args(arg):
+    """Parses the arguments passed to a xmethod command.
+
+    Arguments:
+        arg: The argument string passed to a xmethod command.
+
+    Returns:
+        A 3-tuple: (<locus matching regular expression>,
+                    <matcher matching regular expression>,
+                    <name matching regular experession>)
+    """
+    argv = gdb.string_to_argv(arg)
+    argc = len(argv)
+    if argc > 2:
+        raise SyntaxError("Too many arguments to command.")
+    locus_regexp = ""
+    matcher_name_regexp = ""
+    xm_name_regexp = None
+    if argc >= 1:
+        locus_regexp = argv[0]
+    if argc == 2:
+        parts = argv[1].split(";", 1)
+        matcher_name_regexp = parts[0]
+        if len(parts) > 1:
+            xm_name_regexp = parts[1]
+    if xm_name_regexp:
+        name_re = validate_xm_regexp("xmethod name", xm_name_regexp)
+    else:
+        name_re = None
+    return (validate_xm_regexp("locus", locus_regexp),
+            validate_xm_regexp("matcher name", matcher_name_regexp),
+            name_re)
+
+
+def get_global_method_matchers(locus_re, matcher_re):
+    """Returns a dict of matching globally registered xmethods.
+
+    Arguments:
+        locus_re: Even though only globally registered xmethods are
+                  looked up, they will be looked up only if 'global' matches
+                  LOCUS_RE.
+        matcher_re: The regular expression matching the names of xmethods.
+
+    Returns:
+        A dict of matching globally registered xmethod matchers.  The only
+        key in the dict will be 'global'.
+    """
+    locus_str = "global"
+    xm_dict = { locus_str: [] }
+    if locus_re.match("global"):
+        xm_dict[locus_str].extend(
+            [m for m in gdb.xmethods if matcher_re.match(m.name)])
+    return xm_dict
+
+
+def get_method_matchers_in_loci(loci, locus_re, matcher_re):
+    """Returns a dict of matching registered xmethods in the LOCI.
+
+    Arguments:
+        loci: The list of loci to lookup matching xmethods in.
+        locus_re: If a locus is an objfile, then xmethod matchers will be
+                  looked up in it only if its filename matches the regular
+                  expression LOCUS_RE.  If a locus is the current progspace,
+                  then xmethod matchers will be looked up in it only if the
+                  string "progspace" matches LOCUS_RE.
+        matcher_re: The regular expression to match the xmethod matcher
+                    names.
+
+    Returns:
+        A dict of matching xmethod matchers.  The keys of the dict are the
+        filenames of the loci the xmethod matchers belong to.
+    """
+    xm_dict = {}
+    for locus in loci:
+        if isinstance(locus, gdb.Progspace):
+            if not locus_re.match('progspace'):
+                continue
+            locus_type = "progspace"
+        else:
+            if not locus_re.match(locus.filename):
+                continue
+            locus_type = "objfile"
+        locus_str = "%s %s" % (locus_type, locus.filename)
+        xm_dict[locus_str] = [
+            m for m in locus.xmethods if matcher_re.match(m.name)]
+    return xm_dict
+
+
+def print_xm_info(xm_dict, name_re):
+    """Print a dictionary of xmethods."""
+    def get_status_string(m):
+        if not m.enabled:
+            return " [disabled]"
+        else:
+          return ""
+
+    if not xm_dict:
+        return
+    for locus_str in xm_dict:
+        if not xm_dict[locus_str]:
+            continue
+        print ("Xmethods in %s:" % locus_str)
+        for matcher in xm_dict[locus_str]:
+            print ("  %s%s" % (matcher.name, get_status_string(matcher)))
+            if not matcher.methods:
+                continue
+            for m in matcher.methods:
+                if name_re is None or name_re.match(m.name):
+                    print ("    %s%s" % (m.name, get_status_string(m)))
+
+
+def set_xm_status1(xm_dict, name_re, status):
+    """Set the status (enabled/disabled) of a dictionary of xmethods."""
+    for locus_str, matchers in xm_dict.items():
+        for matcher in matchers:
+            if not name_re:
+                # If the name regex is missing, then set the status of the
+                # matcher and move on.
+                matcher.enabled = status
+                continue
+            if not matcher.methods:
+                # The methods attribute could be None.  Move on.
+                continue
+            for m in matcher.methods:
+                if name_re.match(m.name):
+                    m.enabled = status
+
+
+def set_xm_status(arg, status):
+    """Set the status (enabled/disabled) of xmethods matching ARG.
+    This is a helper function for enable/disable commands.  ARG is the
+    argument string passed to the commands.
+    """
+    locus_re, matcher_re, name_re = parse_xm_command_args(arg)
+    set_xm_status1(get_global_method_matchers(locus_re, matcher_re), name_re,
+                   status)
+    set_xm_status1(
+        get_method_matchers_in_loci(
+            [gdb.current_progspace()], locus_re, matcher_re),
+        name_re,
+        status)
+    set_xm_status1(
+        get_method_matchers_in_loci(gdb.objfiles(), locus_re, matcher_re),
+        name_re,
+        status)
+
+
+class InfoXMethod(gdb.Command):
+    """GDB command to list registered xmethod matchers.
+
+Usage: info xmethod [LOCUS-REGEXP [NAME-REGEXP]]
+
+LOCUS-REGEXP is a regular expression matching the location of the
+xmethod matchers.  If it is omitted, all registered xmethod matchers
+from all loci are listed.  A locus could be 'global', a regular expression
+matching the current program space's filename, or a regular expression
+matching filenames of objfiles.  Locus could be 'progspace' to specify that
+only xmethods from the current progspace should be listed.
+
+NAME-REGEXP is a regular expression matching the names of xmethod
+matchers.  If this omitted for a specified locus, then all registered
+xmethods in the locus are listed.  To list only a certain xmethods
+managed by a single matcher, the name regexp can be specified as
+matcher-name-regexp;xmethod-name-regexp."""
+
+    def __init__(self):
+        super(InfoXMethod, self).__init__("info xmethod",
+                                          gdb.COMMAND_DATA)
+
+    def invoke(self, arg, from_tty):
+        locus_re, matcher_re, name_re = parse_xm_command_args(arg)
+        print_xm_info(get_global_method_matchers(locus_re, matcher_re),
+                      name_re)
+        print_xm_info(
+            get_method_matchers_in_loci(
+                [gdb.current_progspace()], locus_re, matcher_re),
+            name_re)
+        print_xm_info(
+            get_method_matchers_in_loci(gdb.objfiles(), locus_re, matcher_re),
+            name_re)
+
+
+class EnableXMethod(gdb.Command):
+    """GDB command to enable a specified (group of) xmethod(s).
+
+Usage: enable xmethod [LOCUS-REGEXP [NAME-REGEXP]]
+
+LOCUS-REGEXP is a regular expression matching the location of the
+xmethod matchers.  If it is omitted, all registered xmethods matchers
+from all loci are enabled.  A locus could be 'global', a regular expression
+matching the current program space's filename, or a regular expression
+matching filenames of objfiles.  Locus could be 'progspace' to specify that
+only xmethods from the current progspace should be enabled.
+
+NAME-REGEXP is a regular expression matching the names of xmethods
+within a given locus.  If this omitted for a specified locus, then all
+registered xmethod matchers in the locus are enabled.  To enable only
+a certain xmethods managed by a single matcher, the name regexp can be
+specified as matcher-name-regexp;xmethod-name-regexp."""
+
+    def __init__(self):
+        super(EnableXMethod, self).__init__("enable xmethod",
+                                            gdb.COMMAND_DATA)
+
+    def invoke(self, arg, from_tty):
+        set_xm_status(arg, True)
+
+
+class DisableXMethod(gdb.Command):
+    """GDB command to disable a specified (group of) xmethod(s).
+
+Usage: disable xmethod [LOCUS-REGEXP [NAME-REGEXP]]
+
+LOCUS-REGEXP is a regular expression matching the location of the
+xmethod matchers.  If it is omitted, all registered xmethod matchers
+from all loci are disabled.  A locus could be 'global', a regular
+expression matching the current program space's filename, or a regular
+expression filenames of objfiles. Locus could be 'progspace' to specify
+that only xmethods from the current progspace should be disabled.
+
+NAME-REGEXP is a regular expression matching the names of xmethods
+within a given locus.  If this omitted for a specified locus, then all
+registered xmethod matchers in the locus are disabled.  To disable
+only a certain xmethods managed by a single matcher, the name regexp
+can be specified as matcher-name-regexp;xmethod-name-regexp."""
+
+    def __init__(self):
+        super(DisableXMethod, self).__init__("disable xmethod",
+                                             gdb.COMMAND_DATA)
+
+    def invoke(self, arg, from_tty):
+        set_xm_status(arg, False)
+
+
+def register_xmethod_commands():
+    """Installs the xmethod commands."""
+    InfoXMethod()
+    EnableXMethod()
+    DisableXMethod()
+
+
+register_xmethod_commands()
diff --git a/share/gdb/python/gdb/frames.py b/share/gdb/python/gdb/frames.py
new file mode 100644
index 0000000..d8e4be8
--- /dev/null
+++ b/share/gdb/python/gdb/frames.py
@@ -0,0 +1,228 @@
+# Frame-filter commands.
+# Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+"""Internal functions for working with frame-filters."""
+
+import gdb
+from gdb.FrameIterator import FrameIterator
+from gdb.FrameDecorator import FrameDecorator
+import itertools
+import collections
+
+def get_priority(filter_item):
+    """ Internal worker function to return the frame-filter's priority
+    from a frame filter object.  This is a fail free function as it is
+    used in sorting and filtering.  If a badly implemented frame
+    filter does not implement the priority attribute, return zero
+    (otherwise sorting/filtering will fail and prevent other frame
+    filters from executing).
+
+    Arguments:
+        filter_item: An object conforming to the frame filter
+                     interface.
+
+    Returns:
+        The priority of the frame filter from the "priority"
+        attribute, or zero.
+    """
+    # Do not fail here, as the sort will fail.  If a filter has not
+    # (incorrectly) set a priority, set it to zero.
+    return getattr(filter_item, "priority", 0)
+
+def set_priority(filter_item, priority):
+    """ Internal worker function to set the frame-filter's priority.
+
+    Arguments:
+        filter_item: An object conforming to the frame filter
+                     interface.
+        priority: The priority to assign as an integer.
+    """
+
+    filter_item.priority = priority
+
+def get_enabled(filter_item):
+    """ Internal worker function to return a filter's enabled state
+    from a frame filter object.  This is a fail free function as it is
+    used in sorting and filtering.  If a badly implemented frame
+    filter does not implement the enabled attribute, return False
+    (otherwise sorting/filtering will fail and prevent other frame
+    filters from executing).
+
+    Arguments:
+        filter_item: An object conforming to the frame filter
+                     interface.
+
+    Returns:
+        The enabled state of the frame filter from the "enabled"
+        attribute, or False.
+    """
+
+    # If the filter class is badly implemented when called from the
+    # Python filter command, do not cease filter operations, just set
+    # enabled to False.
+    return getattr(filter_item, "enabled", False)
+
+def set_enabled(filter_item, state):
+    """ Internal Worker function to set the frame-filter's enabled
+    state.
+
+    Arguments:
+        filter_item: An object conforming to the frame filter
+                     interface.
+        state: True or False, depending on desired state.
+    """
+
+    filter_item.enabled = state
+
+def return_list(name):
+    """ Internal Worker function to return the frame filter
+    dictionary, depending on the name supplied as an argument.  If the
+    name is not "all", "global" or "progspace", it is assumed to name
+    an object-file.
+
+    Arguments:
+        name: The name of the list, as specified by GDB user commands.
+
+    Returns:
+        A dictionary object for a single specified dictionary, or a
+        list containing all the items for "all"
+
+    Raises:
+        gdb.GdbError:  A dictionary of that name cannot be found.
+    """
+
+    # If all dictionaries are wanted in the case of "all" we
+    # cannot return a combined dictionary as keys() may clash in
+    # between different dictionaries.  As we just want all the frame
+    # filters to enable/disable them all, just return the combined
+    # items() as a chained iterator of dictionary values.
+    if name == "all":
+        glob = gdb.frame_filters.values()
+        prog = gdb.current_progspace().frame_filters.values()
+        return_iter = itertools.chain(glob, prog)
+        for objfile in gdb.objfiles():
+            return_iter = itertools.chain(return_iter, objfile.frame_filters.values())
+
+        return return_iter
+
+    if name == "global":
+        return gdb.frame_filters
+    else:
+        if name == "progspace":
+            cp = gdb.current_progspace()
+            return cp.frame_filters
+        else:
+            for objfile in gdb.objfiles():
+                if name == objfile.filename:
+                    return objfile.frame_filters
+
+    msg = "Cannot find frame-filter dictionary for '" + name + "'"
+    raise gdb.GdbError(msg)
+
+def _sort_list():
+    """ Internal Worker function to merge all known frame-filter
+    lists, prune any filters with the state set to "disabled", and
+    sort the list on the frame-filter's "priority" attribute.
+
+    Returns:
+        sorted_list: A sorted, pruned list of frame filters to
+                     execute.
+    """
+
+    all_filters = return_list("all")
+    sorted_frame_filters = sorted(all_filters, key = get_priority,
+                                  reverse = True)
+
+    sorted_frame_filters = filter(get_enabled,
+                                  sorted_frame_filters)
+
+    return sorted_frame_filters
+
+def execute_frame_filters(frame, frame_low, frame_high):
+    """ Internal function called from GDB that will execute the chain
+    of frame filters.  Each filter is executed in priority order.
+    After the execution completes, slice the iterator to frame_low -
+    frame_high range.
+
+    Arguments:
+        frame: The initial frame.
+
+        frame_low: The low range of the slice.  If this is a negative
+        integer then it indicates a backward slice (ie bt -4) which
+        counts backward from the last frame in the backtrace.
+
+        frame_high: The high range of the slice.  If this is -1 then
+        it indicates all frames until the end of the stack from
+        frame_low.
+
+    Returns:
+        frame_iterator: The sliced iterator after all frame
+        filters have had a change to execute, or None if no frame
+        filters are registered.
+    """
+
+    # Get a sorted list of frame filters.
+    sorted_list = list(_sort_list())
+
+    # Check to see if there are any frame-filters.  If not, just
+    # return None and let default backtrace printing occur.
+    if len(sorted_list) == 0:
+        return None
+
+    frame_iterator = FrameIterator(frame)
+
+    # Apply a basic frame decorator to all gdb.Frames.  This unifies
+    # the interface.  Python 3.x moved the itertools.imap
+    # functionality to map(), so check if it is available.
+    if hasattr(itertools,"imap"):
+        frame_iterator = itertools.imap(FrameDecorator, frame_iterator)
+    else:
+        frame_iterator = map(FrameDecorator, frame_iterator)
+
+    for ff in sorted_list:
+        frame_iterator = ff.filter(frame_iterator)
+
+    # Slicing
+
+    # Is this a slice from the end of the backtrace, ie bt -2?
+    if frame_low < 0:
+        count = 0
+        slice_length = abs(frame_low)
+        # We cannot use MAXLEN argument for deque as it is 2.6 onwards
+        # and some GDB versions might be < 2.6.
+        sliced = collections.deque()
+
+        for frame_item in frame_iterator:
+            if count >= slice_length:
+                sliced.popleft();
+            count = count + 1
+            sliced.append(frame_item)
+
+        return iter(sliced)
+
+    # -1 for frame_high means until the end of the backtrace.  Set to
+    # None if that is the case, to indicate to itertools.islice to
+    # slice to the end of the iterator.
+    if frame_high == -1:
+        frame_high = None
+    else:
+        # As frames start from 0, add one to frame_high so islice
+        # correctly finds the end
+        frame_high = frame_high + 1;
+
+    sliced = itertools.islice(frame_iterator, frame_low, frame_high)
+
+    return sliced
diff --git a/share/gdb/python/gdb/function/__init__.py b/share/gdb/python/gdb/function/__init__.py
new file mode 100644
index 0000000..b133472
--- /dev/null
+++ b/share/gdb/python/gdb/function/__init__.py
@@ -0,0 +1,14 @@
+# Copyright (C) 2012-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/share/gdb/python/gdb/function/as_string.py b/share/gdb/python/gdb/function/as_string.py
new file mode 100644
index 0000000..8936b5e
--- /dev/null
+++ b/share/gdb/python/gdb/function/as_string.py
@@ -0,0 +1,37 @@
+# Copyright (C) 2016-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import gdb
+
+
+class _AsString(gdb.Function):
+    """Return the string representation of a value.
+
+Usage: $_as_string (VALUE)
+
+Arguments:
+
+  VALUE: any value
+
+Returns:
+  The string representation of the value."""
+
+    def __init__(self):
+        super(_AsString, self).__init__("_as_string")
+
+    def invoke(self, val):
+        return str(val)
+
+_AsString()
diff --git a/share/gdb/python/gdb/function/caller_is.py b/share/gdb/python/gdb/function/caller_is.py
new file mode 100644
index 0000000..27f30dc
--- /dev/null
+++ b/share/gdb/python/gdb/function/caller_is.py
@@ -0,0 +1,152 @@
+# Caller-is functions.
+# Copyright (C) 2008-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import gdb
+import re
+
+class CallerIs(gdb.Function):
+    """Check the calling function's name.
+
+Usage: $_caller_is (NAME [, NUMBER-OF-FRAMES])
+
+Arguments:
+
+  NAME: The name of the function to search for.
+
+  NUMBER-OF-FRAMES: How many stack frames to traverse back from the currently
+    selected frame to compare with.  If the value is greater than the depth of
+    the stack from that point then the result is False.
+    The default is 1.
+
+Returns:
+  True if the function's name at the specified frame is equal to NAME."""
+
+    def __init__(self):
+        super(CallerIs, self).__init__("_caller_is")
+
+    def invoke(self, name, nframes = 1):
+        if nframes < 0:
+            raise ValueError("nframes must be >= 0")
+        frame = gdb.selected_frame()
+        while nframes > 0:
+            frame = frame.older()
+            if frame is None:
+                return False
+            nframes = nframes - 1
+        return frame.name() == name.string()
+
+class CallerMatches(gdb.Function):
+    """Compare the calling function's name with a regexp.
+
+Usage: $_caller_matches (REGEX [, NUMBER-OF-FRAMES])
+
+Arguments:
+
+  REGEX: The regular expression to compare the function's name with.
+
+  NUMBER-OF-FRAMES: How many stack frames to traverse back from the currently
+    selected frame to compare with.  If the value is greater than the depth of
+    the stack from that point then the result is False.
+    The default is 1.
+
+Returns:
+  True if the function's name at the specified frame matches REGEX."""
+
+    def __init__(self):
+        super(CallerMatches, self).__init__("_caller_matches")
+
+    def invoke(self, name, nframes = 1):
+        if nframes < 0:
+            raise ValueError("nframes must be >= 0")
+        frame = gdb.selected_frame()
+        while nframes > 0:
+            frame = frame.older()
+            if frame is None:
+                return False
+            nframes = nframes - 1
+        return re.match(name.string(), frame.name()) is not None
+
+class AnyCallerIs(gdb.Function):
+    """Check all calling function's names.
+
+Usage: $_any_caller_is (NAME [, NUMBER-OF-FRAMES])
+
+Arguments:
+
+  NAME: The name of the function to search for.
+
+  NUMBER-OF-FRAMES: How many stack frames to traverse back from the currently
+    selected frame to compare with.  If the value is greater than the depth of
+    the stack from that point then the result is False.
+    The default is 1.
+
+Returns:
+  True if any function's name is equal to NAME."""
+
+    def __init__(self):
+        super(AnyCallerIs, self).__init__("_any_caller_is")
+
+    def invoke(self, name, nframes = 1):
+        if nframes < 0:
+            raise ValueError("nframes must be >= 0")
+        frame = gdb.selected_frame()
+        while nframes >= 0:
+            if frame.name() == name.string():
+                return True 
+            frame = frame.older()
+            if frame is None:
+                return False
+            nframes = nframes - 1
+        return False
+
+class AnyCallerMatches(gdb.Function):
+    """Compare all calling function's names with a regexp.
+
+Usage: $_any_caller_matches (REGEX [, NUMBER-OF-FRAMES])
+
+Arguments:
+
+  REGEX: The regular expression to compare the function's name with.
+
+  NUMBER-OF-FRAMES: How many stack frames to traverse back from the currently
+    selected frame to compare with.  If the value is greater than the depth of
+    the stack from that point then the result is False.
+    The default is 1.
+
+Returns:
+  True if any function's name matches REGEX."""
+
+    def __init__(self):
+        super(AnyCallerMatches, self).__init__("_any_caller_matches")
+
+    def invoke(self, name, nframes = 1):
+        if nframes < 0:
+            raise ValueError("nframes must be >= 0")
+        frame = gdb.selected_frame()
+        name_re = re.compile(name.string())
+        while nframes >= 0:
+            if name_re.match(frame.name()) is not None:
+                return True
+            frame = frame.older()
+            if frame is None:
+                return False
+            nframes = nframes - 1
+        return False
+
+CallerIs()
+CallerMatches()
+AnyCallerIs()
+AnyCallerMatches()
diff --git a/share/gdb/python/gdb/function/strfns.py b/share/gdb/python/gdb/function/strfns.py
new file mode 100644
index 0000000..d29ff61
--- /dev/null
+++ b/share/gdb/python/gdb/function/strfns.py
@@ -0,0 +1,100 @@
+# Useful gdb string convenience functions.
+# Copyright (C) 2012-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+"""$_memeq, $_strlen, $_streq, $_regex"""
+
+import gdb
+import re
+
+
+class _MemEq(gdb.Function):
+  """$_memeq - compare bytes of memory
+
+Usage: $_memeq (A, B, LEN)
+
+Returns:
+  True if LEN bytes at A and B compare equally."""
+  def __init__(self):
+    super(_MemEq, self).__init__("_memeq")
+
+  def invoke(self, a, b, length):
+    if length < 0:
+      raise ValueError("length must be non-negative")
+    if length == 0:
+      return True
+    # The argument(s) to vector are [low_bound,]high_bound.
+    byte_vector = gdb.lookup_type("char").vector(length - 1)
+    ptr_byte_vector = byte_vector.pointer()
+    a_ptr = a.reinterpret_cast(ptr_byte_vector)
+    b_ptr = b.reinterpret_cast(ptr_byte_vector)
+    return a_ptr.dereference() == b_ptr.dereference()
+
+
+class _StrLen(gdb.Function):
+  """$_strlen - compute string length
+
+Usage: $_strlen (A)
+
+Returns:
+  Length of string A, assumed to be a string in the current language."""
+  def __init__(self):
+    super(_StrLen, self).__init__("_strlen")
+
+  def invoke(self, a):
+    s = a.string()
+    return len(s)
+
+
+class _StrEq(gdb.Function):
+  """$_streq - check string equality
+
+Usage: $_streq (A, B)
+
+Returns:
+  True if A and B are identical strings in the current language.
+
+Example (amd64-linux):
+  catch syscall open
+  cond $bpnum $_streq((char*) $rdi, "foo")"""
+  def __init__(self):
+    super(_StrEq, self).__init__("_streq")
+
+  def invoke(self, a, b):
+    return a.string() == b.string()
+
+
+class _RegEx(gdb.Function):
+  """$_regex - check if a string matches a regular expression
+
+Usage: $_regex (STRING, REGEX)
+
+Returns:
+  True if string STRING (in the current language) matches the
+  regular expression REGEX."""
+  def __init__(self):
+    super(_RegEx, self).__init__("_regex")
+
+  def invoke(self, string, regex):
+    s = string.string()
+    r = re.compile(regex.string())
+    return bool(r.match(s))
+
+
+# GDB will import us automagically via gdb/__init__.py.
+_MemEq()
+_StrLen()
+_StrEq()
+_RegEx()
diff --git a/share/gdb/python/gdb/printer/__init__.py b/share/gdb/python/gdb/printer/__init__.py
new file mode 100644
index 0000000..25dae68
--- /dev/null
+++ b/share/gdb/python/gdb/printer/__init__.py
@@ -0,0 +1,14 @@
+# Copyright (C) 2014-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
diff --git a/share/gdb/python/gdb/printer/bound_registers.py b/share/gdb/python/gdb/printer/bound_registers.py
new file mode 100644
index 0000000..f39d220
--- /dev/null
+++ b/share/gdb/python/gdb/printer/bound_registers.py
@@ -0,0 +1,43 @@
+# Pretty-printers for bounds registers.
+# Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+import sys
+
+import gdb.printing
+
+if sys.version_info[0] > 2:
+    # Python 3 removed basestring and long
+    basestring = str
+    long = int
+
+class MpxBound128Printer:
+    """Adds size field to a mpx __gdb_builtin_type_bound128 type."""
+
+    def __init__ (self, val):
+        self.val = val
+
+    def to_string (self):
+        upper = self.val["ubound"]
+        lower = self.val["lbound"]
+        size  = (long) ((upper) - (lower))
+        if size > -1:
+            size = size + 1
+        result = '{lbound = %s, ubound = %s} : size %s' % (lower, upper, size)
+        return result
+
+gdb.printing.add_builtin_pretty_printer ('mpx_bound128',
+                                         '^__gdb_builtin_type_bound128',
+                                         MpxBound128Printer)
diff --git a/share/gdb/python/gdb/printing.py b/share/gdb/python/gdb/printing.py
new file mode 100644
index 0000000..ded8033
--- /dev/null
+++ b/share/gdb/python/gdb/printing.py
@@ -0,0 +1,285 @@
+# Pretty-printer utilities.
+# Copyright (C) 2010-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+"""Utilities for working with pretty-printers."""
+
+import gdb
+import gdb.types
+import re
+import sys
+
+if sys.version_info[0] > 2:
+    # Python 3 removed basestring and long
+    basestring = str
+    long = int
+
+class PrettyPrinter(object):
+    """A basic pretty-printer.
+
+    Attributes:
+        name: A unique string among all printers for the context in which
+            it is defined (objfile, progspace, or global(gdb)), and should
+            meaningfully describe what can be pretty-printed.
+            E.g., "StringPiece" or "protobufs".
+        subprinters: An iterable object with each element having a `name'
+            attribute, and, potentially, "enabled" attribute.
+            Or this is None if there are no subprinters.
+        enabled: A boolean indicating if the printer is enabled.
+
+    Subprinters are for situations where "one" pretty-printer is actually a
+    collection of several printers.  E.g., The libstdc++ pretty-printer has
+    a pretty-printer for each of several different types, based on regexps.
+    """
+
+    # While one might want to push subprinters into the subclass, it's
+    # present here to formalize such support to simplify
+    # commands/pretty_printers.py.
+
+    def __init__(self, name, subprinters=None):
+        self.name = name
+        self.subprinters = subprinters
+        self.enabled = True
+
+    def __call__(self, val):
+        # The subclass must define this.
+        raise NotImplementedError("PrettyPrinter __call__")
+
+
+class SubPrettyPrinter(object):
+    """Baseclass for sub-pretty-printers.
+
+    Sub-pretty-printers needn't use this, but it formalizes what's needed.
+
+    Attributes:
+        name: The name of the subprinter.
+        enabled: A boolean indicating if the subprinter is enabled.
+    """
+
+    def __init__(self, name):
+        self.name = name
+        self.enabled = True
+
+
+def register_pretty_printer(obj, printer, replace=False):
+    """Register pretty-printer PRINTER with OBJ.
+
+    The printer is added to the front of the search list, thus one can override
+    an existing printer if one needs to.  Use a different name when overriding
+    an existing printer, otherwise an exception will be raised; multiple
+    printers with the same name are disallowed.
+
+    Arguments:
+        obj: Either an objfile, progspace, or None (in which case the printer
+            is registered globally).
+        printer: Either a function of one argument (old way) or any object
+            which has attributes: name, enabled, __call__.
+        replace: If True replace any existing copy of the printer.
+            Otherwise if the printer already exists raise an exception.
+
+    Returns:
+        Nothing.
+
+    Raises:
+        TypeError: A problem with the type of the printer.
+        ValueError: The printer's name contains a semicolon ";".
+        RuntimeError: A printer with the same name is already registered.
+
+    If the caller wants the printer to be listable and disableable, it must
+    follow the PrettyPrinter API.  This applies to the old way (functions) too.
+    If printer is an object, __call__ is a method of two arguments:
+    self, and the value to be pretty-printed.  See PrettyPrinter.
+    """
+
+    # Watch for both __name__ and name.
+    # Functions get the former for free, but we don't want to use an
+    # attribute named __foo__ for pretty-printers-as-objects.
+    # If printer has both, we use `name'.
+    if not hasattr(printer, "__name__") and not hasattr(printer, "name"):
+        raise TypeError("printer missing attribute: name")
+    if hasattr(printer, "name") and not hasattr(printer, "enabled"):
+        raise TypeError("printer missing attribute: enabled") 
+    if not hasattr(printer, "__call__"):
+        raise TypeError("printer missing attribute: __call__")
+
+    if hasattr(printer, "name"):
+      name = printer.name
+    else:
+      name = printer.__name__
+    if obj is None or obj is gdb:
+        if gdb.parameter("verbose"):
+            gdb.write("Registering global %s pretty-printer ...\n" % name)
+        obj = gdb
+    else:
+        if gdb.parameter("verbose"):
+            gdb.write("Registering %s pretty-printer for %s ...\n" % (
+                name, obj.filename))
+
+    # Printers implemented as functions are old-style.  In order to not risk
+    # breaking anything we do not check __name__ here.
+    if hasattr(printer, "name"):
+        if not isinstance(printer.name, basestring):
+            raise TypeError("printer name is not a string")
+        # If printer provides a name, make sure it doesn't contain ";".
+        # Semicolon is used by the info/enable/disable pretty-printer commands
+        # to delimit subprinters.
+        if printer.name.find(";") >= 0:
+            raise ValueError("semicolon ';' in printer name")
+        # Also make sure the name is unique.
+        # Alas, we can't do the same for functions and __name__, they could
+        # all have a canonical name like "lookup_function".
+        # PERF: gdb records printers in a list, making this inefficient.
+        i = 0
+        for p in obj.pretty_printers:
+            if hasattr(p, "name") and p.name == printer.name:
+                if replace:
+                    del obj.pretty_printers[i]
+                    break
+                else:
+                  raise RuntimeError("pretty-printer already registered: %s" %
+                                     printer.name)
+            i = i + 1
+
+    obj.pretty_printers.insert(0, printer)
+
+
+class RegexpCollectionPrettyPrinter(PrettyPrinter):
+    """Class for implementing a collection of regular-expression based pretty-printers.
+
+    Intended usage:
+
+    pretty_printer = RegexpCollectionPrettyPrinter("my_library")
+    pretty_printer.add_printer("myclass1", "^myclass1$", MyClass1Printer)
+    ...
+    pretty_printer.add_printer("myclassN", "^myclassN$", MyClassNPrinter)
+    register_pretty_printer(obj, pretty_printer)
+    """
+
+    class RegexpSubprinter(SubPrettyPrinter):
+        def __init__(self, name, regexp, gen_printer):
+            super(RegexpCollectionPrettyPrinter.RegexpSubprinter, self).__init__(name)
+            self.regexp = regexp
+            self.gen_printer = gen_printer
+            self.compiled_re = re.compile(regexp)
+
+    def __init__(self, name):
+        super(RegexpCollectionPrettyPrinter, self).__init__(name, [])
+
+    def add_printer(self, name, regexp, gen_printer):
+        """Add a printer to the list.
+
+        The printer is added to the end of the list.
+
+        Arguments:
+            name: The name of the subprinter.
+            regexp: The regular expression, as a string.
+            gen_printer: A function/method that given a value returns an
+                object to pretty-print it.
+
+        Returns:
+            Nothing.
+        """
+
+        # NOTE: A previous version made the name of each printer the regexp.
+        # That makes it awkward to pass to the enable/disable commands (it's
+        # cumbersome to make a regexp of a regexp).  So now the name is a
+        # separate parameter.
+
+        self.subprinters.append(self.RegexpSubprinter(name, regexp,
+                                                      gen_printer))
+
+    def __call__(self, val):
+        """Lookup the pretty-printer for the provided value."""
+
+        # Get the type name.
+        typename = gdb.types.get_basic_type(val.type).tag
+        if not typename:
+            typename = val.type.name
+        if not typename:
+            return None
+
+        # Iterate over table of type regexps to determine
+        # if a printer is registered for that type.
+        # Return an instantiation of the printer if found.
+        for printer in self.subprinters:
+            if printer.enabled and printer.compiled_re.search(typename):
+                return printer.gen_printer(val)
+
+        # Cannot find a pretty printer.  Return None.
+        return None
+
+# A helper class for printing enum types.  This class is instantiated
+# with a list of enumerators to print a particular Value.
+class _EnumInstance:
+    def __init__(self, enumerators, val):
+        self.enumerators = enumerators
+        self.val = val
+
+    def to_string(self):
+        flag_list = []
+        v = long(self.val)
+        any_found = False
+        for (e_name, e_value) in self.enumerators:
+            if v & e_value != 0:
+                flag_list.append(e_name)
+                v = v & ~e_value
+                any_found = True
+        if not any_found or v != 0:
+            # Leftover value.
+            flag_list.append('<unknown: 0x%x>' % v)
+        return "0x%x [%s]" % (int(self.val), " | ".join(flag_list))
+
+class FlagEnumerationPrinter(PrettyPrinter):
+    """A pretty-printer which can be used to print a flag-style enumeration.
+    A flag-style enumeration is one where the enumerators are or'd
+    together to create values.  The new printer will print these
+    symbolically using '|' notation.  The printer must be registered
+    manually.  This printer is most useful when an enum is flag-like,
+    but has some overlap.  GDB's built-in printing will not handle
+    this case, but this printer will attempt to."""
+
+    def __init__(self, enum_type):
+        super(FlagEnumerationPrinter, self).__init__(enum_type)
+        self.initialized = False
+
+    def __call__(self, val):
+        if not self.initialized:
+            self.initialized = True
+            flags = gdb.lookup_type(self.name)
+            self.enumerators = []
+            for field in flags.fields():
+                self.enumerators.append((field.name, field.enumval))
+            # Sorting the enumerators by value usually does the right
+            # thing.
+            self.enumerators.sort(key = lambda x: x[1])
+
+        if self.enabled:
+            return _EnumInstance(self.enumerators, val)
+        else:
+            return None
+
+
+# Builtin pretty-printers.
+# The set is defined as empty, and files in printing/*.py add their printers
+# to this with add_builtin_pretty_printer.
+
+_builtin_pretty_printers = RegexpCollectionPrettyPrinter("builtin")
+
+register_pretty_printer(None, _builtin_pretty_printers)
+
+# Add a builtin pretty-printer.
+
+def add_builtin_pretty_printer(name, regexp, printer):
+    _builtin_pretty_printers.add_printer(name, regexp, printer)
diff --git a/share/gdb/python/gdb/prompt.py b/share/gdb/python/gdb/prompt.py
new file mode 100644
index 0000000..4389b22
--- /dev/null
+++ b/share/gdb/python/gdb/prompt.py
@@ -0,0 +1,148 @@
+# Extended prompt utilities.
+# Copyright (C) 2011-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+""" Extended prompt library functions."""
+
+import gdb
+import os
+
+def _prompt_pwd(ignore):
+    "The current working directory."
+    return os.getcwd()
+
+def _prompt_object_attr(func, what, attr, nattr):
+    """Internal worker for fetching GDB attributes."""
+    if attr is None:
+        attr = nattr
+    try:
+        obj = func()
+    except gdb.error:
+        return '<no %s>' % what
+    if hasattr(obj, attr):
+        result = getattr(obj, attr)
+        if callable(result):
+            result = result()
+        return result
+    else:
+        return '<no attribute %s on current %s>' % (attr, what)
+
+def _prompt_frame(attr):
+    "The selected frame; an argument names a frame parameter."
+    return _prompt_object_attr(gdb.selected_frame, 'frame', attr, 'name')
+
+def _prompt_thread(attr):
+    "The selected thread; an argument names a thread parameter."
+    return _prompt_object_attr(gdb.selected_thread, 'thread', attr, 'num')
+
+def _prompt_version(attr):
+    "The version of GDB."
+    return gdb.VERSION
+
+def _prompt_esc(attr):
+    "The ESC character."
+    return '\033'
+
+def _prompt_bs(attr):
+    "A backslash."
+    return '\\'
+
+def _prompt_n(attr):
+    "A newline."
+    return '\n'
+
+def _prompt_r(attr):
+    "A carriage return."
+    return '\r'
+
+def _prompt_param(attr):
+    "A parameter's value; the argument names the parameter."
+    return gdb.parameter(attr)
+
+def _prompt_noprint_begin(attr):
+    "Begins a sequence of non-printing characters."
+    return '\001'
+
+def _prompt_noprint_end(attr):
+     "Ends a sequence of non-printing characters."
+     return '\002'
+
+prompt_substitutions = {
+    'e': _prompt_esc,
+    '\\': _prompt_bs,
+    'n': _prompt_n,
+    'r': _prompt_r,
+    'v': _prompt_version,
+    'w': _prompt_pwd,
+    'f': _prompt_frame,
+    't': _prompt_thread,
+    'p': _prompt_param,
+    '[': _prompt_noprint_begin,
+    ']': _prompt_noprint_end
+}
+
+def prompt_help():
+    """Generate help dynamically from the __doc__ strings of attribute
+    functions."""
+
+    result = ''
+    keys = sorted (prompt_substitutions.keys())
+    for key in keys:
+        result += '  \\%s\t%s\n' % (key, prompt_substitutions[key].__doc__)
+    result += """
+A substitution can be used in a simple form, like "\\f".
+An argument can also be passed to it, like "\\f{name}".
+The meaning of the argument depends on the particular substitution."""
+    return result
+
+def substitute_prompt(prompt):
+    "Perform substitutions on PROMPT."
+
+    result = ''
+    plen = len(prompt)
+    i = 0
+    while i < plen:
+        if prompt[i] == '\\':
+            i = i + 1
+            if i >= plen:
+                break
+            cmdch = prompt[i]
+
+            if cmdch in prompt_substitutions:
+                cmd = prompt_substitutions[cmdch]
+
+                if i + 1 < plen and prompt[i + 1] == '{':
+                    j = i + 1
+                    while j < plen and prompt[j] != '}':
+                        j = j + 1
+                    # Just ignore formatting errors.
+                    if j >= plen or prompt[j] != '}':
+                        arg = None
+                    else:
+                        arg = prompt[i + 2 : j]
+                        i = j
+                else:
+                    arg = None
+                result += str(cmd(arg))
+            else:
+                # Unrecognized escapes are turned into the escaped
+                # character itself.
+                result += prompt[i]
+        else:
+            result += prompt[i]
+
+        i = i + 1
+
+    return result
diff --git a/share/gdb/python/gdb/types.py b/share/gdb/python/gdb/types.py
new file mode 100644
index 0000000..ce7f3b6
--- /dev/null
+++ b/share/gdb/python/gdb/types.py
@@ -0,0 +1,178 @@
+# Type utilities.
+# Copyright (C) 2010-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+"""Utilities for working with gdb.Types."""
+
+import gdb
+
+
+def get_basic_type(type_):
+    """Return the "basic" type of a type.
+
+    Arguments:
+        type_: The type to reduce to its basic type.
+
+    Returns:
+        type_ with const/volatile is stripped away,
+        and typedefs/references converted to the underlying type.
+    """
+
+    while (type_.code == gdb.TYPE_CODE_REF or
+           type_.code == gdb.TYPE_CODE_RVALUE_REF or
+           type_.code == gdb.TYPE_CODE_TYPEDEF):
+        if (type_.code == gdb.TYPE_CODE_REF or
+            type_.code == gdb.TYPE_CODE_RVALUE_REF):
+            type_ = type_.target()
+        else:
+            type_ = type_.strip_typedefs()
+    return type_.unqualified()
+
+
+def has_field(type_, field):
+    """Return True if a type has the specified field.
+
+    Arguments:
+        type_: The type to examine.
+            It must be one of gdb.TYPE_CODE_STRUCT, gdb.TYPE_CODE_UNION.
+        field: The name of the field to look up.
+
+    Returns:
+        True if the field is present either in type_ or any baseclass.
+
+    Raises:
+        TypeError: The type is not a struct or union.
+    """
+
+    type_ = get_basic_type(type_)
+    if (type_.code != gdb.TYPE_CODE_STRUCT and
+        type_.code != gdb.TYPE_CODE_UNION):
+        raise TypeError("not a struct or union")
+    for f in type_.fields():
+        if f.is_base_class:
+            if has_field(f.type, field):
+                return True
+        else:
+            # NOTE: f.name could be None
+            if f.name == field:
+                return True
+    return False
+
+
+def make_enum_dict(enum_type):
+    """Return a dictionary from a program's enum type.
+
+    Arguments:
+        enum_type: The enum to compute the dictionary for.
+
+    Returns:
+        The dictionary of the enum.
+
+    Raises:
+        TypeError: The type is not an enum.
+    """
+
+    if enum_type.code != gdb.TYPE_CODE_ENUM:
+        raise TypeError("not an enum type")
+    enum_dict = {}
+    for field in enum_type.fields():
+        # The enum's value is stored in "enumval".
+        enum_dict[field.name] = field.enumval
+    return enum_dict
+
+
+def deep_items (type_):
+    """Return an iterator that recursively traverses anonymous fields.
+
+    Arguments:
+        type_: The type to traverse.  It should be one of
+        gdb.TYPE_CODE_STRUCT or gdb.TYPE_CODE_UNION.
+
+    Returns:
+        an iterator similar to gdb.Type.iteritems(), i.e., it returns
+        pairs of key, value, but for any anonymous struct or union
+        field that field is traversed recursively, depth-first.
+    """
+    for k, v in type_.iteritems ():
+        if k:
+            yield k, v
+        else:
+            for i in deep_items (v.type):
+                yield i
+
+class TypePrinter(object):
+    """The base class for type printers.
+
+    Instances of this type can be used to substitute type names during
+    'ptype'.
+
+    A type printer must have at least 'name' and 'enabled' attributes,
+    and supply an 'instantiate' method.
+
+    The 'instantiate' method must either return None, or return an
+    object which has a 'recognize' method.  This method must accept a
+    gdb.Type argument and either return None, meaning that the type
+    was not recognized, or a string naming the type.
+    """
+
+    def __init__(self, name):
+        self.name = name
+        self.enabled = True
+
+    def instantiate(self):
+        return None
+
+# Helper function for computing the list of type recognizers.
+def _get_some_type_recognizers(result, plist):
+    for printer in plist:
+        if printer.enabled:
+            inst = printer.instantiate()
+            if inst is not None:
+                result.append(inst)
+    return None
+
+def get_type_recognizers():
+    "Return a list of the enabled type recognizers for the current context."
+    result = []
+
+    # First try the objfiles.
+    for objfile in gdb.objfiles():
+        _get_some_type_recognizers(result, objfile.type_printers)
+    # Now try the program space.
+    _get_some_type_recognizers(result, gdb.current_progspace().type_printers)
+    # Finally, globals.
+    _get_some_type_recognizers(result, gdb.type_printers)
+
+    return result
+
+def apply_type_recognizers(recognizers, type_obj):
+    """Apply the given list of type recognizers to the type TYPE_OBJ.
+    If any recognizer in the list recognizes TYPE_OBJ, returns the name
+    given by the recognizer.  Otherwise, this returns None."""
+    for r in recognizers:
+        result = r.recognize(type_obj)
+        if result is not None:
+            return result
+    return None
+
+def register_type_printer(locus, printer):
+    """Register a type printer.
+    PRINTER is the type printer instance.
+    LOCUS is either an objfile, a program space, or None, indicating
+    global registration."""
+
+    if locus is None:
+        locus = gdb
+    locus.type_printers.insert(0, printer)
diff --git a/share/gdb/python/gdb/unwinder.py b/share/gdb/python/gdb/unwinder.py
new file mode 100644
index 0000000..5777979
--- /dev/null
+++ b/share/gdb/python/gdb/unwinder.py
@@ -0,0 +1,95 @@
+# Copyright (C) 2015-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+"""Unwinder class and register_unwinder function."""
+
+import gdb
+
+
+class Unwinder(object):
+    """Base class (or a template) for frame unwinders written in Python.
+
+    An unwinder has a single method __call__ and the attributes
+    described below.
+
+    Attributes:
+        name: The name of the unwinder.
+        enabled: A boolean indicating whether the unwinder is enabled.
+    """
+
+    def __init__(self, name):
+        """Constructor.
+
+        Args:
+            name: An identifying name for the unwinder.
+        """
+        self.name = name
+        self.enabled = True
+
+    def __call__(self, pending_frame):
+        """GDB calls this method to unwind a frame.
+
+        Arguments:
+            pending_frame: gdb.PendingFrame instance.
+
+        Returns:
+            gdb.UnwindInfo instance.
+        """
+        raise NotImplementedError("Unwinder __call__.")
+
+
+def register_unwinder(locus, unwinder, replace=False):
+    """Register unwinder in given locus.
+
+    The unwinder is prepended to the locus's unwinders list. Unwinder
+    name should be unique.
+
+    Arguments:
+        locus: Either an objfile, progspace, or None (in which case
+               the unwinder is registered globally).
+        unwinder: An object of a gdb.Unwinder subclass
+        replace: If True, replaces existing unwinder with the same name.
+                 Otherwise, raises exception if unwinder with the same
+                 name already exists.
+
+    Returns:
+        Nothing.
+
+    Raises:
+        RuntimeError: Unwinder name is not unique
+        TypeError: Bad locus type
+    """
+    if locus is None:
+        if gdb.parameter("verbose"):
+            gdb.write("Registering global %s unwinder ...\n" % unwinder.name)
+        locus = gdb
+    elif isinstance(locus, gdb.Objfile) or isinstance(locus, gdb.Progspace):
+        if gdb.parameter("verbose"):
+            gdb.write("Registering %s unwinder for %s ...\n" %
+                      (unwinder.name, locus.filename))
+    else:
+        raise TypeError("locus should be gdb.Objfile or gdb.Progspace or None")
+
+    i = 0
+    for needle in locus.frame_unwinders:
+        if needle.name == unwinder.name:
+            if replace:
+                del locus.frame_unwinders[i]
+            else:
+                raise RuntimeError("Unwinder %s already exists." %
+                                   unwinder.name)
+        i += 1
+    locus.frame_unwinders.insert(0, unwinder)
+    gdb.invalidate_cached_frames()
diff --git a/share/gdb/python/gdb/xmethod.py b/share/gdb/python/gdb/xmethod.py
new file mode 100644
index 0000000..67bac9a
--- /dev/null
+++ b/share/gdb/python/gdb/xmethod.py
@@ -0,0 +1,275 @@
+# Python side of the support for xmethods.
+# Copyright (C) 2013-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+"""Utilities for defining xmethods"""
+
+import gdb
+import re
+import sys
+
+
+if sys.version_info[0] > 2:
+    # Python 3 removed basestring and long
+    basestring = str
+    long = int
+
+
+class XMethod(object):
+    """Base class (or a template) for an xmethod description.
+
+    Currently, the description requires only the 'name' and 'enabled'
+    attributes.  Description objects are managed by 'XMethodMatcher'
+    objects (see below).  Note that this is only a template for the
+    interface of the XMethodMatcher.methods objects.  One could use
+    this class or choose to use an object which supports this exact same
+    interface.  Also, an XMethodMatcher can choose not use it 'methods'
+    attribute.  In such cases this class (or an equivalent) is not used.
+
+    Attributes:
+        name: The name of the xmethod.
+        enabled: A boolean indicating if the xmethod is enabled.
+    """
+
+    def __init__(self, name):
+        self.name = name
+        self.enabled = True
+
+
+class XMethodMatcher(object):
+    """Abstract base class for matching an xmethod.
+
+    When looking for xmethods, GDB invokes the `match' method of a
+    registered xmethod matcher to match the object type and method name.
+    The `match' method in concrete classes derived from this class should
+    return an `XMethodWorker' object, or a list of `XMethodWorker'
+    objects if there is a match (see below for 'XMethodWorker' class).
+
+    Attributes:
+        name: The name of the matcher.
+        enabled: A boolean indicating if the matcher is enabled.
+        methods: A sequence of objects of type 'XMethod', or objects
+            which have at least the attributes of an 'XMethod' object.
+            This list is used by the 'enable'/'disable'/'info' commands to
+            enable/disable/list the xmethods registered with GDB.  See
+            the 'match' method below to know how this sequence is used.
+            This attribute is None if the matcher chooses not have any
+            xmethods managed by it.
+    """
+
+    def __init__(self, name):
+        """
+        Args:
+            name: An identifying name for the xmethod or the group of
+                  xmethods returned by the `match' method.
+        """
+        self.name = name
+        self.enabled = True
+        self.methods = None
+
+    def match(self, class_type, method_name):
+        """Match class type and method name.
+
+        In derived classes, it should return an XMethodWorker object, or a
+        sequence of 'XMethodWorker' objects.  Only those xmethod workers
+        whose corresponding 'XMethod' descriptor object is enabled should be
+        returned.
+
+        Args:
+            class_type: The class type (gdb.Type object) to match.
+            method_name: The name (string) of the method to match.
+        """
+        raise NotImplementedError("XMethodMatcher match")
+
+
+class XMethodWorker(object):
+    """Base class for all xmethod workers defined in Python.
+
+    An xmethod worker is an object which matches the method arguments, and
+    invokes the method when GDB wants it to.  Internally, GDB first invokes the
+    'get_arg_types' method to perform overload resolution.  If GDB selects to
+    invoke this Python xmethod, then it invokes it via the overridden
+    '__call__' method.  The 'get_result_type' method is used to implement
+    'ptype' on the xmethod.
+
+    Derived classes should override the 'get_arg_types', 'get_result_type'
+    and '__call__' methods.
+    """
+
+    def get_arg_types(self):
+        """Return arguments types of an xmethod.
+
+        A sequence of gdb.Type objects corresponding to the arguments of the
+        xmethod are returned.  If the xmethod takes no arguments, then 'None'
+        or an empty sequence is returned.  If the xmethod takes only a single
+        argument, then a gdb.Type object or a sequence with a single gdb.Type
+        element is returned.
+        """
+        raise NotImplementedError("XMethodWorker get_arg_types")
+
+    def get_result_type(self, *args):
+        """Return the type of the result of the xmethod.
+
+        Args:
+            args: Arguments to the method.  Each element of the tuple is a
+                gdb.Value object.  The first element is the 'this' pointer
+                value.  These are the same arguments passed to '__call__'.
+
+        Returns:
+            A gdb.Type object representing the type of the result of the
+            xmethod.
+        """
+        raise NotImplementedError("XMethodWorker get_result_type")
+
+    def __call__(self, *args):
+        """Invoke the xmethod.
+
+        Args:
+            args: Arguments to the method.  Each element of the tuple is a
+                gdb.Value object.  The first element is the 'this' pointer
+                value.
+
+        Returns:
+            A gdb.Value corresponding to the value returned by the xmethod.
+            Returns 'None' if the method does not return anything.
+        """
+        raise NotImplementedError("XMethodWorker __call__")
+
+
+class SimpleXMethodMatcher(XMethodMatcher):
+    """A utility class to implement simple xmethod mathers and workers.
+
+    See the __init__ method below for information on how instances of this
+    class can be used.
+
+    For simple classes and methods, one can choose to use this class.  For
+    complex xmethods, which need to replace/implement template methods on
+    possibly template classes, one should implement their own xmethod
+    matchers and workers.  See py-xmethods.py in testsuite/gdb.python
+    directory of the GDB source tree for examples.
+    """
+
+    class SimpleXMethodWorker(XMethodWorker):
+        def __init__(self, method_function, arg_types):
+            self._arg_types = arg_types
+            self._method_function = method_function
+
+        def get_arg_types(self):
+            return self._arg_types
+
+        def __call__(self, *args):
+            return self._method_function(*args)
+
+
+    def __init__(self, name, class_matcher, method_matcher, method_function,
+                 *arg_types):
+        """
+        Args:
+            name: Name of the xmethod matcher.
+            class_matcher: A regular expression used to match the name of the
+                class whose method this xmethod is implementing/replacing.
+            method_matcher: A regular expression used to match the name of the
+                method this xmethod is implementing/replacing.
+            method_function: A Python callable which would be called via the
+                'invoke' method of the worker returned by the objects of this
+                class.  This callable should accept the object (*this) as the
+                first argument followed by the rest of the arguments to the
+                method. All arguments to this function should be gdb.Value
+                objects.
+            arg_types: The gdb.Type objects corresponding to the arguments that
+                this xmethod takes. It can be None, or an empty sequence,
+                or a single gdb.Type object, or a sequence of gdb.Type objects.
+        """
+        XMethodMatcher.__init__(self, name)
+        assert callable(method_function), (
+            "The 'method_function' argument to 'SimpleXMethodMatcher' "
+            "__init__ method should be a callable.")
+        self._method_function = method_function
+        self._class_matcher = class_matcher
+        self._method_matcher = method_matcher
+        self._arg_types = arg_types
+
+    def match(self, class_type, method_name):
+        cm = re.match(self._class_matcher, str(class_type.unqualified().tag))
+        mm = re.match(self._method_matcher, method_name)
+        if cm and mm:
+            return SimpleXMethodMatcher.SimpleXMethodWorker(
+                self._method_function, self._arg_types)
+
+
+# A helper function for register_xmethod_matcher which returns an error
+# object if MATCHER is not having the requisite attributes in the proper
+# format.
+
+def _validate_xmethod_matcher(matcher):
+    if not hasattr(matcher, "match"):
+        return TypeError("Xmethod matcher is missing method: match")
+    if not hasattr(matcher, "name"):
+        return TypeError("Xmethod matcher is missing attribute: name")
+    if not hasattr(matcher, "enabled"):
+        return TypeError("Xmethod matcher is missing attribute: enabled")
+    if not isinstance(matcher.name, basestring):
+        return TypeError("Attribute 'name' of xmethod matcher is not a "
+                         "string")
+    if matcher.name.find(";") >= 0:
+        return ValueError("Xmethod matcher name cannot contain ';' in it")
+
+
+# A helper function for register_xmethod_matcher which looks up an 
+# xmethod matcher with NAME in LOCUS.  Returns the index of the xmethod
+# matcher in 'xmethods' sequence attribute of the LOCUS.  If NAME is not
+# found in LOCUS, then -1 is returned.
+
+def _lookup_xmethod_matcher(locus, name):
+    for i in range(0, len(locus.xmethods)):
+        if locus.xmethods[i].name == name:
+            return i
+    return -1
+
+
+def register_xmethod_matcher(locus, matcher, replace=False):
+    """Registers a xmethod matcher MATCHER with a LOCUS.
+
+    Arguments:
+        locus: The locus in which the xmethods should be registered.
+            It can be 'None' to indicate that the xmethods should be
+            registered globally. Or, it could be a gdb.Objfile or a
+            gdb.Progspace object in which the xmethods should be
+            registered.
+        matcher: The xmethod matcher to register with the LOCUS.  It
+            should be an instance of 'XMethodMatcher' class.
+        replace: If True, replace any existing xmethod matcher with the
+            same name in the locus.  Otherwise, if a matcher with the same name
+            exists in the locus, raise an exception.
+    """
+    err = _validate_xmethod_matcher(matcher)
+    if err:
+        raise err
+    if not locus:
+        locus = gdb
+    if locus == gdb:
+        locus_name = "global"
+    else:
+        locus_name = locus.filename
+    index = _lookup_xmethod_matcher(locus, matcher.name)
+    if index >= 0:
+        if replace:
+            del locus.xmethods[index]
+        else:
+            raise RuntimeError("Xmethod matcher already registered with "
+                               "%s: %s" % (locus_name, matcher.name))
+    if gdb.parameter("verbose"):
+        gdb.write("Registering xmethod matcher '%s' with %s' ...\n")
+    locus.xmethods.insert(0, matcher)
diff --git a/share/gdb/syscalls/aarch64-linux.xml b/share/gdb/syscalls/aarch64-linux.xml
new file mode 100644
index 0000000..704af6f
--- /dev/null
+++ b/share/gdb/syscalls/aarch64-linux.xml
@@ -0,0 +1,269 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2015-2019 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  This file is offered as-is,
+     without any warranty. -->
+<syscalls_info>
+  <syscall name="io_setup" number="0"/>
+  <syscall name="io_destroy" number="1"/>
+  <syscall name="io_submit" number="2"/>
+  <syscall name="io_cancel" number="3"/>
+  <syscall name="io_getevents" number="4"/>
+  <syscall name="setxattr" number="5" groups="file"/>
+  <syscall name="lsetxattr" number="6" groups="file"/>
+  <syscall name="fsetxattr" number="7" groups="descriptor"/>
+  <syscall name="getxattr" number="8" groups="file"/>
+  <syscall name="lgetxattr" number="9" groups="file"/>
+  <syscall name="fgetxattr" number="10" groups="descriptor"/>
+  <syscall name="listxattr" number="11" groups="file"/>
+  <syscall name="llistxattr" number="12" groups="file"/>
+  <syscall name="flistxattr" number="13" groups="descriptor"/>
+  <syscall name="removexattr" number="14" groups="file"/>
+  <syscall name="lremovexattr" number="15" groups="file"/>
+  <syscall name="fremovexattr" number="16" groups="descriptor"/>
+  <syscall name="getcwd" number="17" groups="file"/>
+  <syscall name="lookup_dcookie" number="18"/>
+  <syscall name="eventfd2" number="19" groups="descriptor"/>
+  <syscall name="epoll_create1" number="20" groups="descriptor"/>
+  <syscall name="epoll_ctl" number="21" groups="descriptor"/>
+  <syscall name="epoll_pwait" number="22" groups="descriptor"/>
+  <syscall name="dup" number="23" groups="descriptor"/>
+  <syscall name="dup3" number="24" groups="descriptor"/>
+  <syscall name="fcntl" number="25" groups="descriptor"/>
+  <syscall name="inotify_init1" number="26" groups="descriptor"/>
+  <syscall name="inotify_add_watch" number="27" groups="descriptor"/>
+  <syscall name="inotify_rm_watch" number="28" groups="descriptor"/>
+  <syscall name="ioctl" number="29" groups="descriptor"/>
+  <syscall name="ioprio_set" number="30"/>
+  <syscall name="ioprio_get" number="31"/>
+  <syscall name="flock" number="32" groups="descriptor"/>
+  <syscall name="mknodat" number="33" groups="descriptor,file"/>
+  <syscall name="mkdirat" number="34" groups="descriptor,file"/>
+  <syscall name="unlinkat" number="35" groups="descriptor,file"/>
+  <syscall name="symlinkat" number="36" groups="descriptor,file"/>
+  <syscall name="linkat" number="37" groups="descriptor,file"/>
+  <syscall name="renameat" number="38" groups="descriptor,file"/>
+  <syscall name="umount2" number="39" groups="file"/>
+  <syscall name="mount" number="40" groups="file"/>
+  <syscall name="pivot_root" number="41" groups="file"/>
+  <syscall name="nfsservctl" number="42"/>
+  <syscall name="statfs" number="43" groups="file"/>
+  <syscall name="fstatfs" number="44" groups="descriptor"/>
+  <syscall name="truncate" number="45" groups="file"/>
+  <syscall name="ftruncate" number="46" groups="descriptor"/>
+  <syscall name="fallocate" number="47" groups="descriptor"/>
+  <syscall name="faccessat" number="48" groups="descriptor,file"/>
+  <syscall name="chdir" number="49" groups="file"/>
+  <syscall name="fchdir" number="50" groups="descriptor"/>
+  <syscall name="chroot" number="51" groups="file"/>
+  <syscall name="fchmod" number="52" groups="descriptor"/>
+  <syscall name="fchmodat" number="53" groups="descriptor,file"/>
+  <syscall name="fchownat" number="54" groups="descriptor,file"/>
+  <syscall name="fchown" number="55" groups="descriptor"/>
+  <syscall name="openat" number="56" groups="descriptor,file"/>
+  <syscall name="close" number="57" groups="descriptor"/>
+  <syscall name="vhangup" number="58"/>
+  <syscall name="pipe2" number="59" groups="descriptor"/>
+  <syscall name="quotactl" number="60" groups="file"/>
+  <syscall name="getdents64" number="61" groups="descriptor"/>
+  <syscall name="lseek" number="62" groups="descriptor"/>
+  <syscall name="read" number="63" groups="descriptor"/>
+  <syscall name="write" number="64" groups="descriptor"/>
+  <syscall name="readv" number="65" groups="descriptor"/>
+  <syscall name="writev" number="66" groups="descriptor"/>
+  <syscall name="pread64" number="67" groups="descriptor"/>
+  <syscall name="pwrite64" number="68" groups="descriptor"/>
+  <syscall name="preadv" number="69" groups="descriptor"/>
+  <syscall name="pwritev" number="70" groups="descriptor"/>
+  <syscall name="sendfile" number="71" groups="descriptor,network"/>
+  <syscall name="pselect6" number="72" groups="descriptor"/>
+  <syscall name="ppoll" number="73" groups="descriptor"/>
+  <syscall name="signalfd4" number="74" groups="descriptor,signal"/>
+  <syscall name="vmsplice" number="75" groups="descriptor"/>
+  <syscall name="splice" number="76" groups="descriptor"/>
+  <syscall name="tee" number="77" groups="descriptor"/>
+  <syscall name="readlinkat" number="78" groups="descriptor,file"/>
+  <syscall name="newfstatat" number="79" groups="descriptor,file"/>
+  <syscall name="fstat" number="80" groups="descriptor"/>
+  <syscall name="sync" number="81"/>
+  <syscall name="fsync" number="82" groups="descriptor"/>
+  <syscall name="fdatasync" number="83" groups="descriptor"/>
+  <syscall name="sync_file_range" number="84" groups="descriptor"/>
+  <syscall name="timerfd_create" number="85" groups="descriptor"/>
+  <syscall name="timerfd_settime" number="86" groups="descriptor"/>
+  <syscall name="timerfd_gettime" number="87" groups="descriptor"/>
+  <syscall name="utimensat" number="88" groups="descriptor,file"/>
+  <syscall name="acct" number="89" groups="file"/>
+  <syscall name="capget" number="90"/>
+  <syscall name="capset" number="91"/>
+  <syscall name="personality" number="92"/>
+  <syscall name="exit" number="93" groups="process"/>
+  <syscall name="exit_group" number="94" groups="process"/>
+  <syscall name="waitid" number="95" groups="process"/>
+  <syscall name="set_tid_address" number="96"/>
+  <syscall name="unshare" number="97" groups="process"/>
+  <syscall name="futex" number="98"/>
+  <syscall name="set_robust_list" number="99"/>
+  <syscall name="get_robust_list" number="100"/>
+  <syscall name="nanosleep" number="101"/>
+  <syscall name="getitimer" number="102"/>
+  <syscall name="setitimer" number="103"/>
+  <syscall name="kexec_load" number="104"/>
+  <syscall name="init_module" number="105"/>
+  <syscall name="delete_module" number="106"/>
+  <syscall name="timer_create" number="107"/>
+  <syscall name="timer_gettime" number="108"/>
+  <syscall name="timer_getoverrun" number="109"/>
+  <syscall name="timer_settime" number="110"/>
+  <syscall name="timer_delete" number="111"/>
+  <syscall name="clock_settime" number="112"/>
+  <syscall name="clock_gettime" number="113"/>
+  <syscall name="clock_getres" number="114"/>
+  <syscall name="clock_nanosleep" number="115"/>
+  <syscall name="syslog" number="116"/>
+  <syscall name="ptrace" number="117"/>
+  <syscall name="sched_setparam" number="118"/>
+  <syscall name="sched_setscheduler" number="119"/>
+  <syscall name="sched_getscheduler" number="120"/>
+  <syscall name="sched_getparam" number="121"/>
+  <syscall name="sched_setaffinity" number="122"/>
+  <syscall name="sched_getaffinity" number="123"/>
+  <syscall name="sched_yield" number="124"/>
+  <syscall name="sched_get_priority_max" number="125"/>
+  <syscall name="sched_get_priority_min" number="126"/>
+  <syscall name="sched_rr_get_interval" number="127"/>
+  <syscall name="restart_syscall" number="128"/>
+  <syscall name="kill" number="129" groups="signal"/>
+  <syscall name="tkill" number="130" groups="signal"/>
+  <syscall name="tgkill" number="131" groups="signal"/>
+  <syscall name="sigaltstack" number="132" groups="signal"/>
+  <syscall name="rt_sigsuspend" number="133" groups="signal"/>
+  <syscall name="rt_sigaction" number="134" groups="signal"/>
+  <syscall name="rt_sigprocmask" number="135" groups="signal"/>
+  <syscall name="rt_sigpending" number="136" groups="signal"/>
+  <syscall name="rt_sigtimedwait" number="137" groups="signal"/>
+  <syscall name="rt_sigqueueinfo" number="138" groups="signal"/>
+  <syscall name="rt_sigreturn" number="139" groups="signal"/>
+  <syscall name="setpriority" number="140"/>
+  <syscall name="getpriority" number="141"/>
+  <syscall name="reboot" number="142"/>
+  <syscall name="setregid" number="143"/>
+  <syscall name="setgid" number="144"/>
+  <syscall name="setreuid" number="145"/>
+  <syscall name="setuid" number="146"/>
+  <syscall name="setresuid" number="147"/>
+  <syscall name="getresuid" number="148"/>
+  <syscall name="setresgid" number="149"/>
+  <syscall name="getresgid" number="150"/>
+  <syscall name="setfsuid" number="151"/>
+  <syscall name="setfsgid" number="152"/>
+  <syscall name="times" number="153"/>
+  <syscall name="setpgid" number="154"/>
+  <syscall name="getpgid" number="155"/>
+  <syscall name="getsid" number="156"/>
+  <syscall name="setsid" number="157"/>
+  <syscall name="getgroups" number="158"/>
+  <syscall name="setgroups" number="159"/>
+  <syscall name="uname" number="160"/>
+  <syscall name="sethostname" number="161"/>
+  <syscall name="setdomainname" number="162"/>
+  <syscall name="getrlimit" number="163"/>
+  <syscall name="setrlimit" number="164"/>
+  <syscall name="getrusage" number="165"/>
+  <syscall name="umask" number="166"/>
+  <syscall name="prctl" number="167"/>
+  <syscall name="getcpu" number="168"/>
+  <syscall name="gettimeofday" number="169"/>
+  <syscall name="settimeofday" number="170"/>
+  <syscall name="adjtimex" number="171"/>
+  <syscall name="getpid" number="172"/>
+  <syscall name="getppid" number="173"/>
+  <syscall name="getuid" number="174"/>
+  <syscall name="geteuid" number="175"/>
+  <syscall name="getgid" number="176"/>
+  <syscall name="getegid" number="177"/>
+  <syscall name="gettid" number="178"/>
+  <syscall name="sysinfo" number="179"/>
+  <syscall name="mq_open" number="180"/>
+  <syscall name="mq_unlink" number="181"/>
+  <syscall name="mq_timedsend" number="182"/>
+  <syscall name="mq_timedreceive" number="183"/>
+  <syscall name="mq_notify" number="184"/>
+  <syscall name="mq_getsetattr" number="185"/>
+  <syscall name="msgget" number="186" groups="ipc"/>
+  <syscall name="msgctl" number="187" groups="ipc"/>
+  <syscall name="msgrcv" number="188" groups="ipc"/>
+  <syscall name="msgsnd" number="189" groups="ipc"/>
+  <syscall name="semget" number="190" groups="ipc"/>
+  <syscall name="semctl" number="191" groups="ipc"/>
+  <syscall name="semtimedop" number="192" groups="ipc"/>
+  <syscall name="semop" number="193" groups="ipc"/>
+  <syscall name="shmget" number="194" groups="ipc"/>
+  <syscall name="shmctl" number="195" groups="ipc"/>
+  <syscall name="shmat" number="196" groups="ipc,memory"/>
+  <syscall name="shmdt" number="197" groups="ipc,memory"/>
+  <syscall name="socket" number="198" groups="network"/>
+  <syscall name="socketpair" number="199" groups="network"/>
+  <syscall name="bind" number="200" groups="network"/>
+  <syscall name="listen" number="201" groups="network"/>
+  <syscall name="accept" number="202" groups="network"/>
+  <syscall name="connect" number="203" groups="network"/>
+  <syscall name="getsockname" number="204" groups="network"/>
+  <syscall name="getpeername" number="205" groups="network"/>
+  <syscall name="sendto" number="206" groups="network"/>
+  <syscall name="recvfrom" number="207" groups="network"/>
+  <syscall name="setsockopt" number="208" groups="network"/>
+  <syscall name="getsockopt" number="209" groups="network"/>
+  <syscall name="shutdown" number="210" groups="network"/>
+  <syscall name="sendmsg" number="211" groups="network"/>
+  <syscall name="recvmsg" number="212" groups="network"/>
+  <syscall name="readahead" number="213" groups="descriptor"/>
+  <syscall name="brk" number="214" groups="memory"/>
+  <syscall name="munmap" number="215" groups="memory"/>
+  <syscall name="mremap" number="216" groups="memory"/>
+  <syscall name="add_key" number="217"/>
+  <syscall name="request_key" number="218"/>
+  <syscall name="keyctl" number="219"/>
+  <syscall name="clone" number="220" groups="process"/>
+  <syscall name="execve" number="221" groups="file,process"/>
+  <syscall name="mmap" number="222" groups="descriptor,memory"/>
+  <syscall name="fadvise64" number="223" groups="descriptor"/>
+  <syscall name="swapon" number="224" groups="file"/>
+  <syscall name="swapoff" number="225" groups="file"/>
+  <syscall name="mprotect" number="226" groups="memory"/>
+  <syscall name="msync" number="227" groups="memory"/>
+  <syscall name="mlock" number="228" groups="memory"/>
+  <syscall name="munlock" number="229" groups="memory"/>
+  <syscall name="mlockall" number="230" groups="memory"/>
+  <syscall name="munlockall" number="231" groups="memory"/>
+  <syscall name="mincore" number="232" groups="memory"/>
+  <syscall name="madvise" number="233" groups="memory"/>
+  <syscall name="remap_file_pages" number="234" groups="memory"/>
+  <syscall name="mbind" number="235" groups="memory"/>
+  <syscall name="get_mempolicy" number="236" groups="memory"/>
+  <syscall name="set_mempolicy" number="237" groups="memory"/>
+  <syscall name="migrate_pages" number="238" groups="memory"/>
+  <syscall name="move_pages" number="239" groups="memory"/>
+  <syscall name="rt_tgsigqueueinfo" number="240" groups="process,signal"/>
+  <syscall name="perf_event_open" number="241" groups="descriptor"/>
+  <syscall name="accept4" number="242" groups="network"/>
+  <syscall name="recvmmsg" number="243" groups="network"/>
+  <syscall name="arch_specific_syscall" number="244"/>
+  <syscall name="wait4" number="260" groups="process"/>
+  <syscall name="prlimit64" number="261"/>
+  <syscall name="fanotify_init" number="262" groups="descriptor"/>
+  <syscall name="fanotify_mark" number="263" groups="descriptor,file"/>
+  <syscall name="name_to_handle_at" number="264" groups="descriptor,file"/>
+  <syscall name="open_by_handle_at" number="265" groups="descriptor"/>
+  <syscall name="clock_adjtime" number="266"/>
+  <syscall name="syncfs" number="267" groups="descriptor"/>
+  <syscall name="setns" number="268" groups="descriptor"/>
+  <syscall name="sendmmsg" number="269" groups="network"/>
+  <syscall name="process_vm_readv" number="270"/>
+  <syscall name="process_vm_writev" number="271"/>
+  <syscall name="kcmp" number="272"/>
+  <syscall name="syscalls" number="273"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/amd64-linux.xml b/share/gdb/syscalls/amd64-linux.xml
new file mode 100644
index 0000000..fe16eb0
--- /dev/null
+++ b/share/gdb/syscalls/amd64-linux.xml
@@ -0,0 +1,311 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+<!-- This file was generated using the following file:
+     
+     /usr/src/linux/arch/x86/include/asm/unistd_64.h
+
+     The file mentioned above belongs to the Linux Kernel.  -->
+<syscalls_info>
+  <syscall name="read" number="0" groups="descriptor"/>
+  <syscall name="write" number="1" groups="descriptor"/>
+  <syscall name="open" number="2" groups="descriptor,file"/>
+  <syscall name="close" number="3" groups="descriptor"/>
+  <syscall name="stat" number="4" groups="file"/>
+  <syscall name="fstat" number="5" groups="descriptor"/>
+  <syscall name="lstat" number="6" groups="file"/>
+  <syscall name="poll" number="7" groups="descriptor"/>
+  <syscall name="lseek" number="8" groups="descriptor"/>
+  <syscall name="mmap" number="9" groups="descriptor,memory"/>
+  <syscall name="mprotect" number="10" groups="memory"/>
+  <syscall name="munmap" number="11" groups="memory"/>
+  <syscall name="brk" number="12" groups="memory"/>
+  <syscall name="rt_sigaction" number="13" groups="signal"/>
+  <syscall name="rt_sigprocmask" number="14" groups="signal"/>
+  <syscall name="rt_sigreturn" number="15" groups="signal"/>
+  <syscall name="ioctl" number="16" groups="descriptor"/>
+  <syscall name="pread64" number="17" groups="descriptor"/>
+  <syscall name="pwrite64" number="18" groups="descriptor"/>
+  <syscall name="readv" number="19" groups="descriptor"/>
+  <syscall name="writev" number="20" groups="descriptor"/>
+  <syscall name="access" number="21" groups="file"/>
+  <syscall name="pipe" number="22" groups="descriptor"/>
+  <syscall name="select" number="23" groups="descriptor"/>
+  <syscall name="sched_yield" number="24"/>
+  <syscall name="mremap" number="25" groups="memory"/>
+  <syscall name="msync" number="26" groups="memory"/>
+  <syscall name="mincore" number="27" groups="memory"/>
+  <syscall name="madvise" number="28" groups="memory"/>
+  <syscall name="shmget" number="29" groups="ipc"/>
+  <syscall name="shmat" number="30" groups="ipc,memory"/>
+  <syscall name="shmctl" number="31" groups="ipc"/>
+  <syscall name="dup" number="32" groups="descriptor"/>
+  <syscall name="dup2" number="33" groups="descriptor"/>
+  <syscall name="pause" number="34" groups="signal"/>
+  <syscall name="nanosleep" number="35"/>
+  <syscall name="getitimer" number="36"/>
+  <syscall name="alarm" number="37"/>
+  <syscall name="setitimer" number="38"/>
+  <syscall name="getpid" number="39"/>
+  <syscall name="sendfile" number="40" groups="descriptor,network"/>
+  <syscall name="socket" number="41" groups="network"/>
+  <syscall name="connect" number="42" groups="network"/>
+  <syscall name="accept" number="43" groups="network"/>
+  <syscall name="sendto" number="44" groups="network"/>
+  <syscall name="recvfrom" number="45" groups="network"/>
+  <syscall name="sendmsg" number="46" groups="network"/>
+  <syscall name="recvmsg" number="47" groups="network"/>
+  <syscall name="shutdown" number="48" groups="network"/>
+  <syscall name="bind" number="49" groups="network"/>
+  <syscall name="listen" number="50" groups="network"/>
+  <syscall name="getsockname" number="51" groups="network"/>
+  <syscall name="getpeername" number="52" groups="network"/>
+  <syscall name="socketpair" number="53" groups="network"/>
+  <syscall name="setsockopt" number="54" groups="network"/>
+  <syscall name="getsockopt" number="55" groups="network"/>
+  <syscall name="clone" number="56" groups="process"/>
+  <syscall name="fork" number="57" groups="process"/>
+  <syscall name="vfork" number="58" groups="process"/>
+  <syscall name="execve" number="59" groups="file,process"/>
+  <syscall name="exit" number="60" groups="process"/>
+  <syscall name="wait4" number="61" groups="process"/>
+  <syscall name="kill" number="62" groups="signal"/>
+  <syscall name="uname" number="63"/>
+  <syscall name="semget" number="64" groups="ipc"/>
+  <syscall name="semop" number="65" groups="ipc"/>
+  <syscall name="semctl" number="66" groups="ipc"/>
+  <syscall name="shmdt" number="67" groups="ipc,memory"/>
+  <syscall name="msgget" number="68" groups="ipc"/>
+  <syscall name="msgsnd" number="69" groups="ipc"/>
+  <syscall name="msgrcv" number="70" groups="ipc"/>
+  <syscall name="msgctl" number="71" groups="ipc"/>
+  <syscall name="fcntl" number="72" groups="descriptor"/>
+  <syscall name="flock" number="73" groups="descriptor"/>
+  <syscall name="fsync" number="74" groups="descriptor"/>
+  <syscall name="fdatasync" number="75" groups="descriptor"/>
+  <syscall name="truncate" number="76" groups="file"/>
+  <syscall name="ftruncate" number="77" groups="descriptor"/>
+  <syscall name="getdents" number="78" groups="descriptor"/>
+  <syscall name="getcwd" number="79" groups="file"/>
+  <syscall name="chdir" number="80" groups="file"/>
+  <syscall name="fchdir" number="81" groups="descriptor"/>
+  <syscall name="rename" number="82" groups="file"/>
+  <syscall name="mkdir" number="83" groups="file"/>
+  <syscall name="rmdir" number="84" groups="file"/>
+  <syscall name="creat" number="85" groups="descriptor,file"/>
+  <syscall name="link" number="86" groups="file"/>
+  <syscall name="unlink" number="87" groups="file"/>
+  <syscall name="symlink" number="88" groups="file"/>
+  <syscall name="readlink" number="89" groups="file"/>
+  <syscall name="chmod" number="90" groups="file"/>
+  <syscall name="fchmod" number="91" groups="descriptor"/>
+  <syscall name="chown" number="92" groups="file"/>
+  <syscall name="fchown" number="93" groups="descriptor"/>
+  <syscall name="lchown" number="94" groups="file"/>
+  <syscall name="umask" number="95"/>
+  <syscall name="gettimeofday" number="96"/>
+  <syscall name="getrlimit" number="97"/>
+  <syscall name="getrusage" number="98"/>
+  <syscall name="sysinfo" number="99"/>
+  <syscall name="times" number="100"/>
+  <syscall name="ptrace" number="101"/>
+  <syscall name="getuid" number="102"/>
+  <syscall name="syslog" number="103"/>
+  <syscall name="getgid" number="104"/>
+  <syscall name="setuid" number="105"/>
+  <syscall name="setgid" number="106"/>
+  <syscall name="geteuid" number="107"/>
+  <syscall name="getegid" number="108"/>
+  <syscall name="setpgid" number="109"/>
+  <syscall name="getppid" number="110"/>
+  <syscall name="getpgrp" number="111"/>
+  <syscall name="setsid" number="112"/>
+  <syscall name="setreuid" number="113"/>
+  <syscall name="setregid" number="114"/>
+  <syscall name="getgroups" number="115"/>
+  <syscall name="setgroups" number="116"/>
+  <syscall name="setresuid" number="117"/>
+  <syscall name="getresuid" number="118"/>
+  <syscall name="setresgid" number="119"/>
+  <syscall name="getresgid" number="120"/>
+  <syscall name="getpgid" number="121"/>
+  <syscall name="setfsuid" number="122"/>
+  <syscall name="setfsgid" number="123"/>
+  <syscall name="getsid" number="124"/>
+  <syscall name="capget" number="125"/>
+  <syscall name="capset" number="126"/>
+  <syscall name="rt_sigpending" number="127" groups="signal"/>
+  <syscall name="rt_sigtimedwait" number="128" groups="signal"/>
+  <syscall name="rt_sigqueueinfo" number="129" groups="signal"/>
+  <syscall name="rt_sigsuspend" number="130" groups="signal"/>
+  <syscall name="sigaltstack" number="131" groups="signal"/>
+  <syscall name="utime" number="132" groups="file"/>
+  <syscall name="mknod" number="133" groups="file"/>
+  <syscall name="uselib" number="134" groups="file"/>
+  <syscall name="personality" number="135"/>
+  <syscall name="ustat" number="136"/>
+  <syscall name="statfs" number="137" groups="file"/>
+  <syscall name="fstatfs" number="138" groups="descriptor"/>
+  <syscall name="sysfs" number="139"/>
+  <syscall name="getpriority" number="140"/>
+  <syscall name="setpriority" number="141"/>
+  <syscall name="sched_setparam" number="142"/>
+  <syscall name="sched_getparam" number="143"/>
+  <syscall name="sched_setscheduler" number="144"/>
+  <syscall name="sched_getscheduler" number="145"/>
+  <syscall name="sched_get_priority_max" number="146"/>
+  <syscall name="sched_get_priority_min" number="147"/>
+  <syscall name="sched_rr_get_interval" number="148"/>
+  <syscall name="mlock" number="149" groups="memory"/>
+  <syscall name="munlock" number="150" groups="memory"/>
+  <syscall name="mlockall" number="151" groups="memory"/>
+  <syscall name="munlockall" number="152" groups="memory"/>
+  <syscall name="vhangup" number="153"/>
+  <syscall name="modify_ldt" number="154"/>
+  <syscall name="pivot_root" number="155" groups="file"/>
+  <syscall name="_sysctl" number="156"/>
+  <syscall name="prctl" number="157"/>
+  <syscall name="arch_prctl" number="158" groups="process"/>
+  <syscall name="adjtimex" number="159"/>
+  <syscall name="setrlimit" number="160"/>
+  <syscall name="chroot" number="161" groups="file"/>
+  <syscall name="sync" number="162"/>
+  <syscall name="acct" number="163" groups="file"/>
+  <syscall name="settimeofday" number="164"/>
+  <syscall name="mount" number="165" groups="file"/>
+  <syscall name="umount2" number="166" groups="file"/>
+  <syscall name="swapon" number="167" groups="file"/>
+  <syscall name="swapoff" number="168" groups="file"/>
+  <syscall name="reboot" number="169"/>
+  <syscall name="sethostname" number="170"/>
+  <syscall name="setdomainname" number="171"/>
+  <syscall name="iopl" number="172"/>
+  <syscall name="ioperm" number="173"/>
+  <syscall name="create_module" number="174"/>
+  <syscall name="init_module" number="175"/>
+  <syscall name="delete_module" number="176"/>
+  <syscall name="get_kernel_syms" number="177"/>
+  <syscall name="query_module" number="178"/>
+  <syscall name="quotactl" number="179" groups="file"/>
+  <syscall name="nfsservctl" number="180"/>
+  <syscall name="getpmsg" number="181"/>
+  <syscall name="putpmsg" number="182"/>
+  <syscall name="afs_syscall" number="183"/>
+  <syscall name="tuxcall" number="184"/>
+  <syscall name="security" number="185"/>
+  <syscall name="gettid" number="186"/>
+  <syscall name="readahead" number="187" groups="descriptor"/>
+  <syscall name="setxattr" number="188" groups="file"/>
+  <syscall name="lsetxattr" number="189" groups="file"/>
+  <syscall name="fsetxattr" number="190" groups="descriptor"/>
+  <syscall name="getxattr" number="191" groups="file"/>
+  <syscall name="lgetxattr" number="192" groups="file"/>
+  <syscall name="fgetxattr" number="193" groups="descriptor"/>
+  <syscall name="listxattr" number="194" groups="file"/>
+  <syscall name="llistxattr" number="195" groups="file"/>
+  <syscall name="flistxattr" number="196" groups="descriptor"/>
+  <syscall name="removexattr" number="197" groups="file"/>
+  <syscall name="lremovexattr" number="198" groups="file"/>
+  <syscall name="fremovexattr" number="199" groups="descriptor"/>
+  <syscall name="tkill" number="200" groups="signal"/>
+  <syscall name="time" number="201"/>
+  <syscall name="futex" number="202"/>
+  <syscall name="sched_setaffinity" number="203"/>
+  <syscall name="sched_getaffinity" number="204"/>
+  <syscall name="set_thread_area" number="205"/>
+  <syscall name="io_setup" number="206"/>
+  <syscall name="io_destroy" number="207"/>
+  <syscall name="io_getevents" number="208"/>
+  <syscall name="io_submit" number="209"/>
+  <syscall name="io_cancel" number="210"/>
+  <syscall name="get_thread_area" number="211"/>
+  <syscall name="lookup_dcookie" number="212"/>
+  <syscall name="epoll_create" number="213" groups="descriptor"/>
+  <syscall name="epoll_ctl_old" number="214"/>
+  <syscall name="epoll_wait_old" number="215"/>
+  <syscall name="remap_file_pages" number="216" groups="memory"/>
+  <syscall name="getdents64" number="217" groups="descriptor"/>
+  <syscall name="set_tid_address" number="218"/>
+  <syscall name="restart_syscall" number="219"/>
+  <syscall name="semtimedop" number="220" groups="ipc"/>
+  <syscall name="fadvise64" number="221" groups="descriptor"/>
+  <syscall name="timer_create" number="222"/>
+  <syscall name="timer_settime" number="223"/>
+  <syscall name="timer_gettime" number="224"/>
+  <syscall name="timer_getoverrun" number="225"/>
+  <syscall name="timer_delete" number="226"/>
+  <syscall name="clock_settime" number="227"/>
+  <syscall name="clock_gettime" number="228"/>
+  <syscall name="clock_getres" number="229"/>
+  <syscall name="clock_nanosleep" number="230"/>
+  <syscall name="exit_group" number="231" groups="process"/>
+  <syscall name="epoll_wait" number="232" groups="descriptor"/>
+  <syscall name="epoll_ctl" number="233" groups="descriptor"/>
+  <syscall name="tgkill" number="234" groups="signal"/>
+  <syscall name="utimes" number="235" groups="file"/>
+  <syscall name="vserver" number="236"/>
+  <syscall name="mbind" number="237" groups="memory"/>
+  <syscall name="set_mempolicy" number="238" groups="memory"/>
+  <syscall name="get_mempolicy" number="239" groups="memory"/>
+  <syscall name="mq_open" number="240"/>
+  <syscall name="mq_unlink" number="241"/>
+  <syscall name="mq_timedsend" number="242"/>
+  <syscall name="mq_timedreceive" number="243"/>
+  <syscall name="mq_notify" number="244"/>
+  <syscall name="mq_getsetattr" number="245"/>
+  <syscall name="kexec_load" number="246"/>
+  <syscall name="waitid" number="247" groups="process"/>
+  <syscall name="add_key" number="248"/>
+  <syscall name="request_key" number="249"/>
+  <syscall name="keyctl" number="250"/>
+  <syscall name="ioprio_set" number="251"/>
+  <syscall name="ioprio_get" number="252"/>
+  <syscall name="inotify_init" number="253" groups="descriptor"/>
+  <syscall name="inotify_add_watch" number="254" groups="descriptor"/>
+  <syscall name="inotify_rm_watch" number="255" groups="descriptor"/>
+  <syscall name="migrate_pages" number="256" groups="memory"/>
+  <syscall name="openat" number="257" groups="descriptor,file"/>
+  <syscall name="mkdirat" number="258" groups="descriptor,file"/>
+  <syscall name="mknodat" number="259" groups="descriptor,file"/>
+  <syscall name="fchownat" number="260" groups="descriptor,file"/>
+  <syscall name="futimesat" number="261" groups="descriptor,file"/>
+  <syscall name="newfstatat" number="262" groups="descriptor,file"/>
+  <syscall name="unlinkat" number="263" groups="descriptor,file"/>
+  <syscall name="renameat" number="264" groups="descriptor,file"/>
+  <syscall name="linkat" number="265" groups="descriptor,file"/>
+  <syscall name="symlinkat" number="266" groups="descriptor,file"/>
+  <syscall name="readlinkat" number="267" groups="descriptor,file"/>
+  <syscall name="fchmodat" number="268" groups="descriptor,file"/>
+  <syscall name="faccessat" number="269" groups="descriptor,file"/>
+  <syscall name="pselect6" number="270" groups="descriptor"/>
+  <syscall name="ppoll" number="271" groups="descriptor"/>
+  <syscall name="unshare" number="272" groups="process"/>
+  <syscall name="set_robust_list" number="273"/>
+  <syscall name="get_robust_list" number="274"/>
+  <syscall name="splice" number="275" groups="descriptor"/>
+  <syscall name="tee" number="276" groups="descriptor"/>
+  <syscall name="sync_file_range" number="277" groups="descriptor"/>
+  <syscall name="vmsplice" number="278" groups="descriptor"/>
+  <syscall name="move_pages" number="279" groups="memory"/>
+  <syscall name="utimensat" number="280" groups="descriptor,file"/>
+  <syscall name="epoll_pwait" number="281" groups="descriptor"/>
+  <syscall name="signalfd" number="282" groups="descriptor,signal"/>
+  <syscall name="timerfd_create" number="283" groups="descriptor"/>
+  <syscall name="eventfd" number="284" groups="descriptor"/>
+  <syscall name="fallocate" number="285" groups="descriptor"/>
+  <syscall name="timerfd_settime" number="286" groups="descriptor"/>
+  <syscall name="timerfd_gettime" number="287" groups="descriptor"/>
+  <syscall name="accept4" number="288" groups="network"/>
+  <syscall name="signalfd4" number="289" groups="descriptor,signal"/>
+  <syscall name="eventfd2" number="290" groups="descriptor"/>
+  <syscall name="epoll_create1" number="291" groups="descriptor"/>
+  <syscall name="dup3" number="292" groups="descriptor"/>
+  <syscall name="pipe2" number="293" groups="descriptor"/>
+  <syscall name="inotify_init1" number="294" groups="descriptor"/>
+  <syscall name="preadv" number="295" groups="descriptor"/>
+  <syscall name="pwritev" number="296" groups="descriptor"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/arm-linux.xml b/share/gdb/syscalls/arm-linux.xml
new file mode 100644
index 0000000..16bc057
--- /dev/null
+++ b/share/gdb/syscalls/arm-linux.xml
@@ -0,0 +1,395 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  This file is offered as-is,
+     without any warranty. -->
+<!-- This file was generated using the following file:
+
+     linux/arch/arm/include/uapi/asm/unistd.h
+
+     The file mentioned above belongs to the Linux Kernel.
+     Some small hand-edits were made. -->
+<syscalls_info>
+  <syscall name="restart_syscall" number="0"/>
+  <syscall name="exit" number="1" groups="process"/>
+  <syscall name="fork" number="2" groups="process"/>
+  <syscall name="read" number="3" groups="descriptor"/>
+  <syscall name="write" number="4" groups="descriptor"/>
+  <syscall name="open" number="5" groups="descriptor,file"/>
+  <syscall name="close" number="6" groups="descriptor"/>
+  <syscall name="waitpid" number="7" groups="process"/> <!-- removed -->
+  <syscall name="creat" number="8" groups="descriptor,file"/>
+  <syscall name="link" number="9" groups="file"/>
+  <syscall name="unlink" number="10" groups="file"/>
+  <syscall name="execve" number="11" groups="file,process"/>
+  <syscall name="chdir" number="12" groups="file"/>
+  <syscall name="time" number="13"/>
+  <syscall name="mknod" number="14" groups="file"/>
+  <syscall name="chmod" number="15" groups="file"/>
+  <syscall name="lchown" number="16" groups="file"/>
+  <syscall name="break" number="17" groups="memory"/> <!-- removed -->
+  <syscall name="oldstat" number="18" groups="file"/> <!-- removed -->
+  <syscall name="lseek" number="19" groups="descriptor"/>
+  <syscall name="getpid" number="20"/>
+  <syscall name="mount" number="21" groups="file"/>
+  <syscall name="umount" number="22" groups="file"/>
+  <syscall name="setuid" number="23"/>
+  <syscall name="getuid" number="24"/>
+  <syscall name="stime" number="25"/>
+  <syscall name="ptrace" number="26"/>
+  <syscall name="alarm" number="27"/>
+  <syscall name="oldfstat" number="28" groups="descriptor"/> <!-- removed -->
+  <syscall name="pause" number="29" groups="signal"/>
+  <syscall name="utime" number="30" groups="file"/>
+  <syscall name="stty" number="31"/> <!-- removed -->
+  <syscall name="gtty" number="32"/> <!-- removed -->
+  <syscall name="access" number="33" groups="file"/>
+  <syscall name="nice" number="34"/>
+  <syscall name="ftime" number="35"/> <!-- removed -->
+  <syscall name="sync" number="36"/>
+  <syscall name="kill" number="37" groups="signal"/>
+  <syscall name="rename" number="38" groups="file"/>
+  <syscall name="mkdir" number="39" groups="file"/>
+  <syscall name="rmdir" number="40" groups="file"/>
+  <syscall name="dup" number="41" groups="descriptor"/>
+  <syscall name="pipe" number="42" groups="descriptor"/>
+  <syscall name="times" number="43"/>
+  <syscall name="prof" number="44"/> <!-- removed -->
+  <syscall name="brk" number="45" groups="memory"/>
+  <syscall name="setgid" number="46"/>
+  <syscall name="getgid" number="47"/>
+  <syscall name="signal" number="48" groups="signal"/> <!-- removed -->
+  <syscall name="geteuid" number="49"/>
+  <syscall name="getegid" number="50"/>
+  <syscall name="acct" number="51" groups="file"/>
+  <syscall name="umount2" number="52" groups="file"/>
+  <syscall name="lock" number="53"/> <!-- removed -->
+  <syscall name="ioctl" number="54" groups="descriptor"/>
+  <syscall name="fcntl" number="55" groups="descriptor"/>
+  <syscall name="mpx" number="56"/> <!-- removed -->
+  <syscall name="setpgid" number="57"/>
+  <syscall name="ulimit" number="58"/> <!-- removed -->
+  <syscall name="oldolduname" number="59"/> <!-- removed -->
+  <syscall name="umask" number="60"/>
+  <syscall name="chroot" number="61" groups="file"/>
+  <syscall name="ustat" number="62"/>
+  <syscall name="dup2" number="63" groups="descriptor"/>
+  <syscall name="getppid" number="64"/>
+  <syscall name="getpgrp" number="65"/>
+  <syscall name="setsid" number="66"/>
+  <syscall name="sigaction" number="67" groups="signal"/>
+  <syscall name="sgetmask" number="68" groups="signal"/> <!-- removed -->
+  <syscall name="ssetmask" number="69" groups="signal"/> <!-- removed -->
+  <syscall name="setreuid" number="70"/>
+  <syscall name="setregid" number="71"/>
+  <syscall name="sigsuspend" number="72" groups="signal"/>
+  <syscall name="sigpending" number="73" groups="signal"/>
+  <syscall name="sethostname" number="74"/>
+  <syscall name="setrlimit" number="75"/>
+  <syscall name="getrlimit" number="76"/>
+  <syscall name="getrusage" number="77"/>
+  <syscall name="gettimeofday" number="78"/>
+  <syscall name="settimeofday" number="79"/>
+  <syscall name="getgroups" number="80"/>
+  <syscall name="setgroups" number="81"/>
+  <syscall name="select" number="82" groups="descriptor"/>
+  <syscall name="symlink" number="83" groups="file"/>
+  <syscall name="oldlstat" number="84" groups="file"/> <!-- removed -->
+  <syscall name="readlink" number="85" groups="file"/>
+  <syscall name="uselib" number="86" groups="file"/>
+  <syscall name="swapon" number="87" groups="file"/>
+  <syscall name="reboot" number="88"/>
+  <syscall name="readdir" number="89" groups="descriptor"/>
+  <syscall name="mmap" number="90" groups="descriptor,memory"/>
+  <syscall name="munmap" number="91" groups="memory"/>
+  <syscall name="truncate" number="92" groups="file"/>
+  <syscall name="ftruncate" number="93" groups="descriptor"/>
+  <syscall name="fchmod" number="94" groups="descriptor"/>
+  <syscall name="fchown" number="95" groups="descriptor"/>
+  <syscall name="getpriority" number="96"/>
+  <syscall name="setpriority" number="97"/>
+  <syscall name="profil" number="98"/> <!-- removed -->
+  <syscall name="statfs" number="99" groups="file"/>
+  <syscall name="fstatfs" number="100" groups="descriptor"/>
+  <syscall name="ioperm" number="101"/> <!-- removed -->
+  <syscall name="socketcall" number="102" groups="descriptor"/>
+  <syscall name="syslog" number="103"/>
+  <syscall name="setitimer" number="104"/>
+  <syscall name="getitimer" number="105"/>
+  <syscall name="stat" number="106" groups="file"/>
+  <syscall name="lstat" number="107" groups="file"/>
+  <syscall name="fstat" number="108" groups="descriptor"/>
+  <syscall name="olduname" number="109"/> <!-- removed -->
+  <syscall name="iopl" number="110"/> <!-- removed -->
+  <syscall name="vhangup" number="111"/>
+  <syscall name="idle" number="112"/> <!-- removed -->
+  <syscall name="syscall" number="113"/>
+  <syscall name="wait4" number="114" groups="process"/>
+  <syscall name="swapoff" number="115" groups="file"/>
+  <syscall name="sysinfo" number="116"/>
+  <syscall name="ipc" number="117" groups="ipc"/>
+  <syscall name="fsync" number="118" groups="descriptor"/>
+  <syscall name="sigreturn" number="119" groups="signal"/>
+  <syscall name="clone" number="120" groups="process"/>
+  <syscall name="setdomainname" number="121"/>
+  <syscall name="uname" number="122"/>
+  <syscall name="modify_ldt" number="123"/> <!-- removed -->
+  <syscall name="adjtimex" number="124"/>
+  <syscall name="mprotect" number="125" groups="memory"/>
+  <syscall name="sigprocmask" number="126" groups="signal"/>
+  <syscall name="create_module" number="127"/> <!-- removed -->
+  <syscall name="init_module" number="128"/>
+  <syscall name="delete_module" number="129"/>
+  <syscall name="get_kernel_syms" number="130"/> <!-- removed -->
+  <syscall name="quotactl" number="131" groups="file"/>
+  <syscall name="getpgid" number="132"/>
+  <syscall name="fchdir" number="133" groups="descriptor"/>
+  <syscall name="bdflush" number="134"/>
+  <syscall name="sysfs" number="135"/>
+  <syscall name="personality" number="136"/>
+  <syscall name="afs_syscall" number="137"/> <!-- removed -->
+  <syscall name="setfsuid" number="138"/>
+  <syscall name="setfsgid" number="139"/>
+  <syscall name="_llseek" number="140" groups="descriptor"/>
+  <syscall name="getdents" number="141" groups="descriptor"/>
+  <syscall name="_newselect" number="142" groups="descriptor"/>
+  <syscall name="flock" number="143" groups="descriptor"/>
+  <syscall name="msync" number="144" groups="memory"/>
+  <syscall name="readv" number="145" groups="descriptor"/>
+  <syscall name="writev" number="146" groups="descriptor"/>
+  <syscall name="getsid" number="147"/>
+  <syscall name="fdatasync" number="148" groups="descriptor"/>
+  <syscall name="_sysctl" number="149"/>
+  <syscall name="mlock" number="150" groups="memory"/>
+  <syscall name="munlock" number="151" groups="memory"/>
+  <syscall name="mlockall" number="152" groups="memory"/>
+  <syscall name="munlockall" number="153" groups="memory"/>
+  <syscall name="sched_setparam" number="154"/>
+  <syscall name="sched_getparam" number="155"/>
+  <syscall name="sched_setscheduler" number="156"/>
+  <syscall name="sched_getscheduler" number="157"/>
+  <syscall name="sched_yield" number="158"/>
+  <syscall name="sched_get_priority_max" number="159"/>
+  <syscall name="sched_get_priority_min" number="160"/>
+  <syscall name="sched_rr_get_interval" number="161"/>
+  <syscall name="nanosleep" number="162"/>
+  <syscall name="mremap" number="163" groups="memory"/>
+  <syscall name="setresuid" number="164"/>
+  <syscall name="getresuid" number="165"/>
+  <syscall name="vm86" number="166"/> <!-- removed -->
+  <syscall name="query_module" number="167"/> <!-- removed -->
+  <syscall name="poll" number="168" groups="descriptor"/>
+  <syscall name="nfsservctl" number="169"/>
+  <syscall name="setresgid" number="170"/>
+  <syscall name="getresgid" number="171"/>
+  <syscall name="prctl" number="172"/>
+  <syscall name="rt_sigreturn" number="173" groups="signal"/>
+  <syscall name="rt_sigaction" number="174" groups="signal"/>
+  <syscall name="rt_sigprocmask" number="175" groups="signal"/>
+  <syscall name="rt_sigpending" number="176" groups="signal"/>
+  <syscall name="rt_sigtimedwait" number="177" groups="signal"/>
+  <syscall name="rt_sigqueueinfo" number="178" groups="signal"/>
+  <syscall name="rt_sigsuspend" number="179" groups="signal"/>
+  <syscall name="pread64" number="180" groups="descriptor"/>
+  <syscall name="pwrite64" number="181" groups="descriptor"/>
+  <syscall name="chown" number="182" groups="file"/>
+  <syscall name="getcwd" number="183" groups="file"/>
+  <syscall name="capget" number="184"/>
+  <syscall name="capset" number="185"/>
+  <syscall name="sigaltstack" number="186" groups="signal"/>
+  <syscall name="sendfile" number="187" groups="descriptor,network"/>
+  <syscall name="vfork" number="190" groups="process"/>
+  <syscall name="ugetrlimit" number="191"/>
+  <syscall name="mmap2" number="192" groups="descriptor,memory"/>
+  <syscall name="truncate64" number="193" groups="file"/>
+  <syscall name="ftruncate64" number="194" groups="descriptor"/>
+  <syscall name="stat64" number="195" groups="file"/>
+  <syscall name="lstat64" number="196" groups="file"/>
+  <syscall name="fstat64" number="197" groups="descriptor"/>
+  <syscall name="lchown32" number="198" groups="file"/>
+  <syscall name="getuid32" number="199"/>
+  <syscall name="getgid32" number="200"/>
+  <syscall name="geteuid32" number="201"/>
+  <syscall name="getegid32" number="202"/>
+  <syscall name="setreuid32" number="203"/>
+  <syscall name="setregid32" number="204"/>
+  <syscall name="getgroups32" number="205"/>
+  <syscall name="setgroups32" number="206"/>
+  <syscall name="fchown32" number="207" groups="descriptor"/>
+  <syscall name="setresuid32" number="208"/>
+  <syscall name="getresuid32" number="209"/>
+  <syscall name="setresgid32" number="210"/>
+  <syscall name="getresgid32" number="211"/>
+  <syscall name="chown32" number="212" groups="file"/>
+  <syscall name="setuid32" number="213"/>
+  <syscall name="setgid32" number="214"/>
+  <syscall name="setfsuid32" number="215"/>
+  <syscall name="setfsgid32" number="216"/>
+  <syscall name="getdents64" number="217" groups="descriptor"/>
+  <syscall name="pivot_root" number="218" groups="file"/>
+  <syscall name="mincore" number="219" groups="memory"/>
+  <syscall name="madvise" number="220" groups="memory"/>
+  <syscall name="fcntl64" number="221" groups="descriptor"/>
+  <syscall name="gettid" number="224"/>
+  <syscall name="readahead" number="225" groups="descriptor"/>
+  <syscall name="setxattr" number="226" groups="file"/>
+  <syscall name="lsetxattr" number="227" groups="file"/>
+  <syscall name="fsetxattr" number="228" groups="descriptor"/>
+  <syscall name="getxattr" number="229" groups="file"/>
+  <syscall name="lgetxattr" number="230" groups="file"/>
+  <syscall name="fgetxattr" number="231" groups="descriptor"/>
+  <syscall name="listxattr" number="232" groups="file"/>
+  <syscall name="llistxattr" number="233" groups="file"/>
+  <syscall name="flistxattr" number="234" groups="descriptor"/>
+  <syscall name="removexattr" number="235" groups="file"/>
+  <syscall name="lremovexattr" number="236" groups="file"/>
+  <syscall name="fremovexattr" number="237" groups="descriptor"/>
+  <syscall name="tkill" number="238" groups="signal"/>
+  <syscall name="sendfile64" number="239" groups="descriptor,network"/>
+  <syscall name="futex" number="240"/>
+  <syscall name="sched_setaffinity" number="241"/>
+  <syscall name="sched_getaffinity" number="242"/>
+  <syscall name="io_setup" number="243"/>
+  <syscall name="io_destroy" number="244"/>
+  <syscall name="io_getevents" number="245"/>
+  <syscall name="io_submit" number="246"/>
+  <syscall name="io_cancel" number="247"/>
+  <syscall name="exit_group" number="248" groups="process"/>
+  <syscall name="lookup_dcookie" number="249"/>
+  <syscall name="epoll_create" number="250" groups="descriptor"/>
+  <syscall name="epoll_ctl" number="251" groups="descriptor"/>
+  <syscall name="epoll_wait" number="252" groups="descriptor"/>
+  <syscall name="remap_file_pages" number="253" groups="memory"/>
+  <syscall name="set_tid_address" number="256"/>
+  <syscall name="timer_create" number="257"/>
+  <syscall name="timer_settime" number="258"/>
+  <syscall name="timer_gettime" number="259"/>
+  <syscall name="timer_getoverrun" number="260"/>
+  <syscall name="timer_delete" number="261"/>
+  <syscall name="clock_settime" number="262"/>
+  <syscall name="clock_gettime" number="263"/>
+  <syscall name="clock_getres" number="264"/>
+  <syscall name="clock_nanosleep" number="265"/>
+  <syscall name="statfs64" number="266" groups="file"/>
+  <syscall name="fstatfs64" number="267" groups="descriptor"/>
+  <syscall name="tgkill" number="268" groups="signal"/>
+  <syscall name="utimes" number="269" groups="file"/>
+  <syscall name="arm_fadvise64_64" number="270"/>
+  <syscall name="pciconfig_iobase" number="271"/>
+  <syscall name="pciconfig_read" number="272"/>
+  <syscall name="pciconfig_write" number="273"/>
+  <syscall name="mq_open" number="274"/>
+  <syscall name="mq_unlink" number="275"/>
+  <syscall name="mq_timedsend" number="276"/>
+  <syscall name="mq_timedreceive" number="277"/>
+  <syscall name="mq_notify" number="278"/>
+  <syscall name="mq_getsetattr" number="279"/>
+  <syscall name="waitid" number="280" groups="process"/>
+  <syscall name="socket" number="281" groups="network"/>
+  <syscall name="bind" number="282" groups="network"/>
+  <syscall name="connect" number="283" groups="network"/>
+  <syscall name="listen" number="284" groups="network"/>
+  <syscall name="accept" number="285" groups="network"/>
+  <syscall name="getsockname" number="286" groups="network"/>
+  <syscall name="getpeername" number="287" groups="network"/>
+  <syscall name="socketpair" number="288" groups="network"/>
+  <syscall name="send" number="289" groups="network"/>
+  <syscall name="sendto" number="290" groups="network"/>
+  <syscall name="recv" number="291" groups="network"/>
+  <syscall name="recvfrom" number="292" groups="network"/>
+  <syscall name="shutdown" number="293" groups="network"/>
+  <syscall name="setsockopt" number="294" groups="network"/>
+  <syscall name="getsockopt" number="295" groups="network"/>
+  <syscall name="sendmsg" number="296" groups="network"/>
+  <syscall name="recvmsg" number="297" groups="network"/>
+  <syscall name="semop" number="298" groups="ipc"/>
+  <syscall name="semget" number="299" groups="ipc"/>
+  <syscall name="semctl" number="300" groups="ipc"/>
+  <syscall name="msgsnd" number="301" groups="ipc"/>
+  <syscall name="msgrcv" number="302" groups="ipc"/>
+  <syscall name="msgget" number="303" groups="ipc"/>
+  <syscall name="msgctl" number="304" groups="ipc"/>
+  <syscall name="shmat" number="305" groups="ipc,memory"/>
+  <syscall name="shmdt" number="306" groups="ipc,memory"/>
+  <syscall name="shmget" number="307" groups="ipc"/>
+  <syscall name="shmctl" number="308" groups="ipc"/>
+  <syscall name="add_key" number="309"/>
+  <syscall name="request_key" number="310"/>
+  <syscall name="keyctl" number="311"/>
+  <syscall name="semtimedop" number="312" groups="ipc"/>
+  <syscall name="vserver" number="313"/>
+  <syscall name="ioprio_set" number="314"/>
+  <syscall name="ioprio_get" number="315"/>
+  <syscall name="inotify_init" number="316" groups="descriptor"/>
+  <syscall name="inotify_add_watch" number="317" groups="descriptor"/>
+  <syscall name="inotify_rm_watch" number="318" groups="descriptor"/>
+  <syscall name="mbind" number="319" groups="memory"/>
+  <syscall name="get_mempolicy" number="320" groups="memory"/>
+  <syscall name="set_mempolicy" number="321" groups="memory"/>
+  <syscall name="openat" number="322" groups="descriptor,file"/>
+  <syscall name="mkdirat" number="323" groups="descriptor,file"/>
+  <syscall name="mknodat" number="324" groups="descriptor,file"/>
+  <syscall name="fchownat" number="325" groups="descriptor,file"/>
+  <syscall name="futimesat" number="326" groups="descriptor,file"/>
+  <syscall name="fstatat64" number="327" groups="descriptor,file"/>
+  <syscall name="unlinkat" number="328" groups="descriptor,file"/>
+  <syscall name="renameat" number="329" groups="descriptor,file"/>
+  <syscall name="linkat" number="330" groups="descriptor,file"/>
+  <syscall name="symlinkat" number="331" groups="descriptor,file"/>
+  <syscall name="readlinkat" number="332" groups="descriptor,file"/>
+  <syscall name="fchmodat" number="333" groups="descriptor,file"/>
+  <syscall name="faccessat" number="334" groups="descriptor,file"/>
+  <syscall name="pselect6" number="335" groups="descriptor"/>
+  <syscall name="ppoll" number="336" groups="descriptor"/>
+  <syscall name="unshare" number="337" groups="process"/>
+  <syscall name="set_robust_list" number="338"/>
+  <syscall name="get_robust_list" number="339"/>
+  <syscall name="splice" number="340" groups="descriptor"/>
+  <syscall name="arm_sync_file_range" number="341"/>
+  <syscall name="tee" number="342" groups="descriptor"/>
+  <syscall name="vmsplice" number="343" groups="descriptor"/>
+  <syscall name="move_pages" number="344" groups="memory"/>
+  <syscall name="getcpu" number="345"/>
+  <syscall name="epoll_pwait" number="346" groups="descriptor"/>
+  <syscall name="kexec_load" number="347"/>
+  <syscall name="utimensat" number="348" groups="descriptor,file"/>
+  <syscall name="signalfd" number="349" groups="descriptor,signal"/>
+  <syscall name="timerfd_create" number="350" groups="descriptor"/>
+  <syscall name="eventfd" number="351" groups="descriptor"/>
+  <syscall name="fallocate" number="352" groups="descriptor"/>
+  <syscall name="timerfd_settime" number="353" groups="descriptor"/>
+  <syscall name="timerfd_gettime" number="354" groups="descriptor"/>
+  <syscall name="signalfd4" number="355" groups="descriptor,signal"/>
+  <syscall name="eventfd2" number="356" groups="descriptor"/>
+  <syscall name="epoll_create1" number="357" groups="descriptor"/>
+  <syscall name="dup3" number="358" groups="descriptor"/>
+  <syscall name="pipe2" number="359" groups="descriptor"/>
+  <syscall name="inotify_init1" number="360" groups="descriptor"/>
+  <syscall name="preadv" number="361" groups="descriptor"/>
+  <syscall name="pwritev" number="362" groups="descriptor"/>
+  <syscall name="rt_tgsigqueueinfo" number="363" groups="process,signal"/>
+  <syscall name="perf_event_open" number="364" groups="descriptor"/>
+  <syscall name="recvmmsg" number="365" groups="network"/>
+  <syscall name="accept4" number="366" groups="network"/>
+  <syscall name="fanotify_init" number="367" groups="descriptor"/>
+  <syscall name="fanotify_mark" number="368" groups="descriptor,file"/>
+  <syscall name="prlimit64" number="369"/>
+  <syscall name="name_to_handle_at" number="370" groups="descriptor,file"/>
+  <syscall name="open_by_handle_at" number="371" groups="descriptor"/>
+  <syscall name="clock_adjtime" number="372"/>
+  <syscall name="syncfs" number="373" groups="descriptor"/>
+  <syscall name="sendmmsg" number="374" groups="network"/>
+  <syscall name="setns" number="375" groups="descriptor"/>
+  <syscall name="process_vm_readv" number="376"/>
+  <syscall name="process_vm_writev" number="377"/>
+  <syscall name="kcmp" number="378"/>
+  <syscall name="finit_module" number="379" groups="descriptor"/>
+  <syscall name="ARM_breakpoint" number="983041"/>
+  <syscall name="ARM_cacheflush" number="983042"/>
+  <syscall name="ARM_usr26" number="983043"/>
+  <syscall name="ARM_usr32" number="983044"/>
+  <syscall name="ARM_set_tls" number="983045"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/freebsd.xml b/share/gdb/syscalls/freebsd.xml
new file mode 100644
index 0000000..4651147
--- /dev/null
+++ b/share/gdb/syscalls/freebsd.xml
@@ -0,0 +1,474 @@
+<?xml version="1.0"?> <!-- THIS FILE IS GENERATED -*- buffer-read-only: t -*-  -->
+<!-- vi:set ro: -->
+<!-- Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!DOCTYPE feature SYSTEM "gdb-syscalls.dtd">
+
+<!-- This file was generated using the following file:
+
+     /usr/src/sys/sys/syscall.h
+
+     The file mentioned above belongs to the FreeBSD Kernel.  -->
+
+<syscalls_info>
+  <syscall name="syscall" number="0"/>
+  <syscall name="exit" number="1"/>
+  <syscall name="fork" number="2"/>
+  <syscall name="read" number="3"/>
+  <syscall name="write" number="4"/>
+  <syscall name="open" number="5"/>
+  <syscall name="close" number="6"/>
+  <syscall name="wait4" number="7"/>
+  <syscall name="link" number="9"/>
+  <syscall name="unlink" number="10"/>
+  <syscall name="execv" number="11"/>
+  <syscall name="chdir" number="12"/>
+  <syscall name="fchdir" number="13"/>
+  <syscall name="freebsd11_mknod" number="14" alias="mknod"/>
+  <syscall name="chmod" number="15"/>
+  <syscall name="chown" number="16"/>
+  <syscall name="break" number="17"/>
+  <syscall name="freebsd4_getfsstat" number="18" alias="getfsstat"/>
+  <syscall name="getpid" number="20"/>
+  <syscall name="mount" number="21"/>
+  <syscall name="unmount" number="22"/>
+  <syscall name="setuid" number="23"/>
+  <syscall name="getuid" number="24"/>
+  <syscall name="geteuid" number="25"/>
+  <syscall name="ptrace" number="26"/>
+  <syscall name="recvmsg" number="27"/>
+  <syscall name="sendmsg" number="28"/>
+  <syscall name="recvfrom" number="29"/>
+  <syscall name="accept" number="30"/>
+  <syscall name="getpeername" number="31"/>
+  <syscall name="getsockname" number="32"/>
+  <syscall name="access" number="33"/>
+  <syscall name="chflags" number="34"/>
+  <syscall name="fchflags" number="35"/>
+  <syscall name="sync" number="36"/>
+  <syscall name="kill" number="37"/>
+  <syscall name="getppid" number="39"/>
+  <syscall name="dup" number="41"/>
+  <syscall name="freebsd10_pipe" number="42" alias="pipe"/>
+  <syscall name="getegid" number="43"/>
+  <syscall name="profil" number="44"/>
+  <syscall name="ktrace" number="45"/>
+  <syscall name="getgid" number="47"/>
+  <syscall name="getlogin" number="49"/>
+  <syscall name="setlogin" number="50"/>
+  <syscall name="acct" number="51"/>
+  <syscall name="sigaltstack" number="53"/>
+  <syscall name="ioctl" number="54"/>
+  <syscall name="reboot" number="55"/>
+  <syscall name="revoke" number="56"/>
+  <syscall name="symlink" number="57"/>
+  <syscall name="readlink" number="58"/>
+  <syscall name="execve" number="59"/>
+  <syscall name="umask" number="60"/>
+  <syscall name="chroot" number="61"/>
+  <syscall name="msync" number="65"/>
+  <syscall name="vfork" number="66"/>
+  <syscall name="vread" number="67"/>
+  <syscall name="vwrite" number="68"/>
+  <syscall name="sbrk" number="69"/>
+  <syscall name="sstk" number="70"/>
+  <syscall name="freebsd11_vadvise" number="72" alias="vadvise"/>
+  <syscall name="munmap" number="73"/>
+  <syscall name="mprotect" number="74"/>
+  <syscall name="madvise" number="75"/>
+  <syscall name="vhangup" number="76"/>
+  <syscall name="vlimit" number="77"/>
+  <syscall name="mincore" number="78"/>
+  <syscall name="getgroups" number="79"/>
+  <syscall name="setgroups" number="80"/>
+  <syscall name="getpgrp" number="81"/>
+  <syscall name="setpgid" number="82"/>
+  <syscall name="setitimer" number="83"/>
+  <syscall name="swapon" number="85"/>
+  <syscall name="getitimer" number="86"/>
+  <syscall name="getdtablesize" number="89"/>
+  <syscall name="dup2" number="90"/>
+  <syscall name="fcntl" number="92"/>
+  <syscall name="select" number="93"/>
+  <syscall name="fsync" number="95"/>
+  <syscall name="setpriority" number="96"/>
+  <syscall name="socket" number="97"/>
+  <syscall name="connect" number="98"/>
+  <syscall name="getpriority" number="100"/>
+  <syscall name="bind" number="104"/>
+  <syscall name="setsockopt" number="105"/>
+  <syscall name="listen" number="106"/>
+  <syscall name="vtimes" number="107"/>
+  <syscall name="vtrace" number="115"/>
+  <syscall name="gettimeofday" number="116"/>
+  <syscall name="getrusage" number="117"/>
+  <syscall name="getsockopt" number="118"/>
+  <syscall name="readv" number="120"/>
+  <syscall name="writev" number="121"/>
+  <syscall name="settimeofday" number="122"/>
+  <syscall name="fchown" number="123"/>
+  <syscall name="fchmod" number="124"/>
+  <syscall name="setreuid" number="126"/>
+  <syscall name="setregid" number="127"/>
+  <syscall name="rename" number="128"/>
+  <syscall name="flock" number="131"/>
+  <syscall name="mkfifo" number="132"/>
+  <syscall name="sendto" number="133"/>
+  <syscall name="shutdown" number="134"/>
+  <syscall name="socketpair" number="135"/>
+  <syscall name="mkdir" number="136"/>
+  <syscall name="rmdir" number="137"/>
+  <syscall name="utimes" number="138"/>
+  <syscall name="adjtime" number="140"/>
+  <syscall name="setsid" number="147"/>
+  <syscall name="quotactl" number="148"/>
+  <syscall name="nlm_syscall" number="154"/>
+  <syscall name="nfssvc" number="155"/>
+  <syscall name="freebsd4_statfs" number="157" alias="statfs"/>
+  <syscall name="freebsd4_fstatfs" number="158" alias="fstatfs"/>
+  <syscall name="lgetfh" number="160"/>
+  <syscall name="getfh" number="161"/>
+  <syscall name="freebsd4_getdomainname" number="162" alias="getdomainname"/>
+  <syscall name="freebsd4_setdomainname" number="163" alias="setdomainname"/>
+  <syscall name="freebsd4_uname" number="164" alias="uname"/>
+  <syscall name="sysarch" number="165"/>
+  <syscall name="rtprio" number="166"/>
+  <syscall name="semsys" number="169"/>
+  <syscall name="msgsys" number="170"/>
+  <syscall name="shmsys" number="171"/>
+  <syscall name="freebsd6_pread" number="173" alias="pread"/>
+  <syscall name="freebsd6_pwrite" number="174" alias="pwrite"/>
+  <syscall name="setfib" number="175"/>
+  <syscall name="ntp_adjtime" number="176"/>
+  <syscall name="setgid" number="181"/>
+  <syscall name="setegid" number="182"/>
+  <syscall name="seteuid" number="183"/>
+  <syscall name="lfs_bmapv" number="184"/>
+  <syscall name="lfs_markv" number="185"/>
+  <syscall name="lfs_segclean" number="186"/>
+  <syscall name="lfs_segwait" number="187"/>
+  <syscall name="freebsd11_stat" number="188" alias="stat"/>
+  <syscall name="freebsd11_fstat" number="189" alias="fstat"/>
+  <syscall name="freebsd11_lstat" number="190" alias="lstat"/>
+  <syscall name="pathconf" number="191"/>
+  <syscall name="fpathconf" number="192"/>
+  <syscall name="getrlimit" number="194"/>
+  <syscall name="setrlimit" number="195"/>
+  <syscall name="freebsd11_getdirentries" number="196" alias="getdirentries"/>
+  <syscall name="freebsd6_mmap" number="197" alias="mmap"/>
+  <syscall name="__syscall" number="198"/>
+  <syscall name="freebsd6_lseek" number="199" alias="lseek"/>
+  <syscall name="freebsd6_truncate" number="200" alias="truncate"/>
+  <syscall name="freebsd6_ftruncate" number="201" alias="ftruncate"/>
+  <syscall name="__sysctl" number="202"/>
+  <syscall name="mlock" number="203"/>
+  <syscall name="munlock" number="204"/>
+  <syscall name="undelete" number="205"/>
+  <syscall name="futimes" number="206"/>
+  <syscall name="getpgid" number="207"/>
+  <syscall name="poll" number="209"/>
+  <syscall name="freebsd7___semctl" number="220" alias="__semctl"/>
+  <syscall name="semget" number="221"/>
+  <syscall name="semop" number="222"/>
+  <syscall name="semconfig" number="223"/>
+  <syscall name="freebsd7_msgctl" number="224" alias="msgctl"/>
+  <syscall name="msgget" number="225"/>
+  <syscall name="msgsnd" number="226"/>
+  <syscall name="msgrcv" number="227"/>
+  <syscall name="shmat" number="228"/>
+  <syscall name="freebsd7_shmctl" number="229" alias="shmctl"/>
+  <syscall name="shmdt" number="230"/>
+  <syscall name="shmget" number="231"/>
+  <syscall name="clock_gettime" number="232"/>
+  <syscall name="clock_settime" number="233"/>
+  <syscall name="clock_getres" number="234"/>
+  <syscall name="ktimer_create" number="235"/>
+  <syscall name="ktimer_delete" number="236"/>
+  <syscall name="ktimer_settime" number="237"/>
+  <syscall name="ktimer_gettime" number="238"/>
+  <syscall name="ktimer_getoverrun" number="239"/>
+  <syscall name="nanosleep" number="240"/>
+  <syscall name="ffclock_getcounter" number="241"/>
+  <syscall name="ffclock_setestimate" number="242"/>
+  <syscall name="ffclock_getestimate" number="243"/>
+  <syscall name="clock_nanosleep" number="244"/>
+  <syscall name="clock_getcpuclockid2" number="247"/>
+  <syscall name="ntp_gettime" number="248"/>
+  <syscall name="minherit" number="250"/>
+  <syscall name="rfork" number="251"/>
+  <syscall name="openbsd_poll" number="252"/>
+  <syscall name="issetugid" number="253"/>
+  <syscall name="lchown" number="254"/>
+  <syscall name="aio_read" number="255"/>
+  <syscall name="aio_write" number="256"/>
+  <syscall name="lio_listio" number="257"/>
+  <syscall name="freebsd11_getdents" number="272" alias="getdents"/>
+  <syscall name="lchmod" number="274"/>
+  <syscall name="netbsd_lchown" number="275"/>
+  <syscall name="lutimes" number="276"/>
+  <syscall name="netbsd_msync" number="277"/>
+  <syscall name="freebsd11_nstat" number="278" alias="nstat"/>
+  <syscall name="freebsd11_nfstat" number="279" alias="nfstat"/>
+  <syscall name="freebsd11_nlstat" number="280" alias="nlstat"/>
+  <syscall name="preadv" number="289"/>
+  <syscall name="pwritev" number="290"/>
+  <syscall name="freebsd4_fhstatfs" number="297" alias="fhstatfs"/>
+  <syscall name="fhopen" number="298"/>
+  <syscall name="freebsd11_fhstat" number="299" alias="fhstat"/>
+  <syscall name="modnext" number="300"/>
+  <syscall name="modstat" number="301"/>
+  <syscall name="modfnext" number="302"/>
+  <syscall name="modfind" number="303"/>
+  <syscall name="kldload" number="304"/>
+  <syscall name="kldunload" number="305"/>
+  <syscall name="kldfind" number="306"/>
+  <syscall name="kldnext" number="307"/>
+  <syscall name="kldstat" number="308"/>
+  <syscall name="kldfirstmod" number="309"/>
+  <syscall name="getsid" number="310"/>
+  <syscall name="setresuid" number="311"/>
+  <syscall name="setresgid" number="312"/>
+  <syscall name="signanosleep" number="313"/>
+  <syscall name="aio_return" number="314"/>
+  <syscall name="aio_suspend" number="315"/>
+  <syscall name="aio_cancel" number="316"/>
+  <syscall name="aio_error" number="317"/>
+  <syscall name="freebsd6_aio_read" number="318" alias="aio_read"/>
+  <syscall name="freebsd6_aio_write" number="319" alias="aio_write"/>
+  <syscall name="freebsd6_lio_listio" number="320" alias="lio_listio"/>
+  <syscall name="yield" number="321"/>
+  <syscall name="thr_sleep" number="322"/>
+  <syscall name="thr_wakeup" number="323"/>
+  <syscall name="mlockall" number="324"/>
+  <syscall name="munlockall" number="325"/>
+  <syscall name="__getcwd" number="326"/>
+  <syscall name="sched_setparam" number="327"/>
+  <syscall name="sched_getparam" number="328"/>
+  <syscall name="sched_setscheduler" number="329"/>
+  <syscall name="sched_getscheduler" number="330"/>
+  <syscall name="sched_yield" number="331"/>
+  <syscall name="sched_get_priority_max" number="332"/>
+  <syscall name="sched_get_priority_min" number="333"/>
+  <syscall name="sched_rr_get_interval" number="334"/>
+  <syscall name="utrace" number="335"/>
+  <syscall name="freebsd4_sendfile" number="336" alias="sendfile"/>
+  <syscall name="kldsym" number="337"/>
+  <syscall name="jail" number="338"/>
+  <syscall name="nnpfs_syscall" number="339"/>
+  <syscall name="sigprocmask" number="340"/>
+  <syscall name="sigsuspend" number="341"/>
+  <syscall name="freebsd4_sigaction" number="342" alias="sigaction"/>
+  <syscall name="sigpending" number="343"/>
+  <syscall name="freebsd4_sigreturn" number="344" alias="sigreturn"/>
+  <syscall name="sigtimedwait" number="345"/>
+  <syscall name="sigwaitinfo" number="346"/>
+  <syscall name="__acl_get_file" number="347"/>
+  <syscall name="__acl_set_file" number="348"/>
+  <syscall name="__acl_get_fd" number="349"/>
+  <syscall name="__acl_set_fd" number="350"/>
+  <syscall name="__acl_delete_file" number="351"/>
+  <syscall name="__acl_delete_fd" number="352"/>
+  <syscall name="__acl_aclcheck_file" number="353"/>
+  <syscall name="__acl_aclcheck_fd" number="354"/>
+  <syscall name="extattrctl" number="355"/>
+  <syscall name="extattr_set_file" number="356"/>
+  <syscall name="extattr_get_file" number="357"/>
+  <syscall name="extattr_delete_file" number="358"/>
+  <syscall name="aio_waitcomplete" number="359"/>
+  <syscall name="getresuid" number="360"/>
+  <syscall name="getresgid" number="361"/>
+  <syscall name="kqueue" number="362"/>
+  <syscall name="freebsd11_kevent" number="363" alias="kevent"/>
+  <syscall name="__cap_get_proc" number="364"/>
+  <syscall name="__cap_set_proc" number="365"/>
+  <syscall name="__cap_get_fd" number="366"/>
+  <syscall name="__cap_get_file" number="367"/>
+  <syscall name="__cap_set_fd" number="368"/>
+  <syscall name="__cap_set_file" number="369"/>
+  <syscall name="extattr_set_fd" number="371"/>
+  <syscall name="extattr_get_fd" number="372"/>
+  <syscall name="extattr_delete_fd" number="373"/>
+  <syscall name="__setugid" number="374"/>
+  <syscall name="nfsclnt" number="375"/>
+  <syscall name="eaccess" number="376"/>
+  <syscall name="afs3_syscall" number="377"/>
+  <syscall name="nmount" number="378"/>
+  <syscall name="kse_exit" number="379"/>
+  <syscall name="kse_wakeup" number="380"/>
+  <syscall name="kse_create" number="381"/>
+  <syscall name="kse_thr_interrupt" number="382"/>
+  <syscall name="kse_release" number="383"/>
+  <syscall name="__mac_get_proc" number="384"/>
+  <syscall name="__mac_set_proc" number="385"/>
+  <syscall name="__mac_get_fd" number="386"/>
+  <syscall name="__mac_get_file" number="387"/>
+  <syscall name="__mac_set_fd" number="388"/>
+  <syscall name="__mac_set_file" number="389"/>
+  <syscall name="kenv" number="390"/>
+  <syscall name="lchflags" number="391"/>
+  <syscall name="uuidgen" number="392"/>
+  <syscall name="sendfile" number="393"/>
+  <syscall name="mac_syscall" number="394"/>
+  <syscall name="freebsd11_getfsstat" number="395" alias="getfsstat"/>
+  <syscall name="freebsd11_statfs" number="396" alias="statfs"/>
+  <syscall name="freebsd11_fstatfs" number="397" alias="fstatfs"/>
+  <syscall name="freebsd11_fhstatfs" number="398" alias="fhstatfs"/>
+  <syscall name="ksem_close" number="400"/>
+  <syscall name="ksem_post" number="401"/>
+  <syscall name="ksem_wait" number="402"/>
+  <syscall name="ksem_trywait" number="403"/>
+  <syscall name="ksem_init" number="404"/>
+  <syscall name="ksem_open" number="405"/>
+  <syscall name="ksem_unlink" number="406"/>
+  <syscall name="ksem_getvalue" number="407"/>
+  <syscall name="ksem_destroy" number="408"/>
+  <syscall name="__mac_get_pid" number="409"/>
+  <syscall name="__mac_get_link" number="410"/>
+  <syscall name="__mac_set_link" number="411"/>
+  <syscall name="extattr_set_link" number="412"/>
+  <syscall name="extattr_get_link" number="413"/>
+  <syscall name="extattr_delete_link" number="414"/>
+  <syscall name="__mac_execve" number="415"/>
+  <syscall name="sigaction" number="416"/>
+  <syscall name="sigreturn" number="417"/>
+  <syscall name="getcontext" number="421"/>
+  <syscall name="setcontext" number="422"/>
+  <syscall name="swapcontext" number="423"/>
+  <syscall name="swapoff" number="424"/>
+  <syscall name="__acl_get_link" number="425"/>
+  <syscall name="__acl_set_link" number="426"/>
+  <syscall name="__acl_delete_link" number="427"/>
+  <syscall name="__acl_aclcheck_link" number="428"/>
+  <syscall name="sigwait" number="429"/>
+  <syscall name="thr_create" number="430"/>
+  <syscall name="thr_exit" number="431"/>
+  <syscall name="thr_self" number="432"/>
+  <syscall name="thr_kill" number="433"/>
+  <syscall name="jail_attach" number="436"/>
+  <syscall name="extattr_list_fd" number="437"/>
+  <syscall name="extattr_list_file" number="438"/>
+  <syscall name="extattr_list_link" number="439"/>
+  <syscall name="kse_switchin" number="440"/>
+  <syscall name="ksem_timedwait" number="441"/>
+  <syscall name="thr_suspend" number="442"/>
+  <syscall name="thr_wake" number="443"/>
+  <syscall name="kldunloadf" number="444"/>
+  <syscall name="audit" number="445"/>
+  <syscall name="auditon" number="446"/>
+  <syscall name="getauid" number="447"/>
+  <syscall name="setauid" number="448"/>
+  <syscall name="getaudit" number="449"/>
+  <syscall name="setaudit" number="450"/>
+  <syscall name="getaudit_addr" number="451"/>
+  <syscall name="setaudit_addr" number="452"/>
+  <syscall name="auditctl" number="453"/>
+  <syscall name="_umtx_op" number="454"/>
+  <syscall name="thr_new" number="455"/>
+  <syscall name="sigqueue" number="456"/>
+  <syscall name="kmq_open" number="457"/>
+  <syscall name="kmq_setattr" number="458"/>
+  <syscall name="kmq_timedreceive" number="459"/>
+  <syscall name="kmq_timedsend" number="460"/>
+  <syscall name="kmq_notify" number="461"/>
+  <syscall name="kmq_unlink" number="462"/>
+  <syscall name="abort2" number="463"/>
+  <syscall name="thr_set_name" number="464"/>
+  <syscall name="aio_fsync" number="465"/>
+  <syscall name="rtprio_thread" number="466"/>
+  <syscall name="sctp_peeloff" number="471"/>
+  <syscall name="sctp_generic_sendmsg" number="472"/>
+  <syscall name="sctp_generic_sendmsg_iov" number="473"/>
+  <syscall name="sctp_generic_recvmsg" number="474"/>
+  <syscall name="pread" number="475"/>
+  <syscall name="pwrite" number="476"/>
+  <syscall name="mmap" number="477"/>
+  <syscall name="lseek" number="478"/>
+  <syscall name="truncate" number="479"/>
+  <syscall name="ftruncate" number="480"/>
+  <syscall name="thr_kill2" number="481"/>
+  <syscall name="shm_open" number="482"/>
+  <syscall name="shm_unlink" number="483"/>
+  <syscall name="cpuset" number="484"/>
+  <syscall name="cpuset_setid" number="485"/>
+  <syscall name="cpuset_getid" number="486"/>
+  <syscall name="cpuset_getaffinity" number="487"/>
+  <syscall name="cpuset_setaffinity" number="488"/>
+  <syscall name="faccessat" number="489"/>
+  <syscall name="fchmodat" number="490"/>
+  <syscall name="fchownat" number="491"/>
+  <syscall name="fexecve" number="492"/>
+  <syscall name="freebsd11_fstatat" number="493" alias="fstatat"/>
+  <syscall name="futimesat" number="494"/>
+  <syscall name="linkat" number="495"/>
+  <syscall name="mkdirat" number="496"/>
+  <syscall name="mkfifoat" number="497"/>
+  <syscall name="freebsd11_mknodat" number="498" alias="mknodat"/>
+  <syscall name="openat" number="499"/>
+  <syscall name="readlinkat" number="500"/>
+  <syscall name="renameat" number="501"/>
+  <syscall name="symlinkat" number="502"/>
+  <syscall name="unlinkat" number="503"/>
+  <syscall name="posix_openpt" number="504"/>
+  <syscall name="gssd_syscall" number="505"/>
+  <syscall name="jail_get" number="506"/>
+  <syscall name="jail_set" number="507"/>
+  <syscall name="jail_remove" number="508"/>
+  <syscall name="closefrom" number="509"/>
+  <syscall name="__semctl" number="510"/>
+  <syscall name="msgctl" number="511"/>
+  <syscall name="shmctl" number="512"/>
+  <syscall name="lpathconf" number="513"/>
+  <syscall name="cap_new" number="514"/>
+  <syscall name="__cap_rights_get" number="515"/>
+  <syscall name="cap_enter" number="516"/>
+  <syscall name="cap_getmode" number="517"/>
+  <syscall name="pdfork" number="518"/>
+  <syscall name="pdkill" number="519"/>
+  <syscall name="pdgetpid" number="520"/>
+  <syscall name="pselect" number="522"/>
+  <syscall name="getloginclass" number="523"/>
+  <syscall name="setloginclass" number="524"/>
+  <syscall name="rctl_get_racct" number="525"/>
+  <syscall name="rctl_get_rules" number="526"/>
+  <syscall name="rctl_get_limits" number="527"/>
+  <syscall name="rctl_add_rule" number="528"/>
+  <syscall name="rctl_remove_rule" number="529"/>
+  <syscall name="posix_fallocate" number="530"/>
+  <syscall name="posix_fadvise" number="531"/>
+  <syscall name="wait6" number="532"/>
+  <syscall name="cap_rights_limit" number="533"/>
+  <syscall name="cap_ioctls_limit" number="534"/>
+  <syscall name="cap_ioctls_get" number="535"/>
+  <syscall name="cap_fcntls_limit" number="536"/>
+  <syscall name="cap_fcntls_get" number="537"/>
+  <syscall name="bindat" number="538"/>
+  <syscall name="connectat" number="539"/>
+  <syscall name="chflagsat" number="540"/>
+  <syscall name="accept4" number="541"/>
+  <syscall name="pipe2" number="542"/>
+  <syscall name="aio_mlock" number="543"/>
+  <syscall name="procctl" number="544"/>
+  <syscall name="ppoll" number="545"/>
+  <syscall name="futimens" number="546"/>
+  <syscall name="utimensat" number="547"/>
+  <syscall name="numa_getaffinity" number="548"/>
+  <syscall name="numa_setaffinity" number="549"/>
+  <syscall name="fdatasync" number="550"/>
+  <syscall name="fstat" number="551"/>
+  <syscall name="fstatat" number="552"/>
+  <syscall name="fhstat" number="553"/>
+  <syscall name="getdirentries" number="554"/>
+  <syscall name="statfs" number="555"/>
+  <syscall name="fstatfs" number="556"/>
+  <syscall name="getfsstat" number="557"/>
+  <syscall name="fhstatfs" number="558"/>
+  <syscall name="mknodat" number="559"/>
+  <syscall name="kevent" number="560"/>
+  <syscall name="cpuset_getdomain" number="561"/>
+  <syscall name="cpuset_setdomain" number="562"/>
+  <syscall name="getrandom" number="563"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/gdb-syscalls.dtd b/share/gdb/syscalls/gdb-syscalls.dtd
new file mode 100644
index 0000000..1e756ed
--- /dev/null
+++ b/share/gdb/syscalls/gdb-syscalls.dtd
@@ -0,0 +1,16 @@
+<!-- Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+
+<!-- The root element of a syscall info is <syscalls-info>.  -->
+
+<!ELEMENT syscalls-info		(syscall*)>
+
+<!ELEMENT syscall		EMPTY>
+<!ATTLIST syscall
+	name			CDATA	#REQUIRED
+	number			CDATA	#REQUIRED
+	alias			CDATA	#IMPLIED
+	groups			CDATA	#IMPLIED>
diff --git a/share/gdb/syscalls/i386-linux.xml b/share/gdb/syscalls/i386-linux.xml
new file mode 100644
index 0000000..1af1ba6
--- /dev/null
+++ b/share/gdb/syscalls/i386-linux.xml
@@ -0,0 +1,337 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+<!-- This file was generated using the following file:
+     
+     /usr/src/linux/arch/x86/include/asm/unistd_32.h
+
+     The file mentioned above belongs to the Linux Kernel.  -->
+<syscalls_info>
+  <syscall name="restart_syscall" number="0"/>
+  <syscall name="exit" number="1" groups="process"/>
+  <syscall name="fork" number="2" groups="process"/>
+  <syscall name="read" number="3" groups="descriptor"/>
+  <syscall name="write" number="4" groups="descriptor"/>
+  <syscall name="open" number="5" groups="descriptor,file"/>
+  <syscall name="close" number="6" groups="descriptor"/>
+  <syscall name="waitpid" number="7" groups="process"/>
+  <syscall name="creat" number="8" groups="descriptor,file"/>
+  <syscall name="link" number="9" groups="file"/>
+  <syscall name="unlink" number="10" groups="file"/>
+  <syscall name="execve" number="11" groups="file,process"/>
+  <syscall name="chdir" number="12" groups="file"/>
+  <syscall name="time" number="13"/>
+  <syscall name="mknod" number="14" groups="file"/>
+  <syscall name="chmod" number="15" groups="file"/>
+  <syscall name="lchown" number="16" groups="file"/>
+  <syscall name="break" number="17" groups="memory"/>
+  <syscall name="oldstat" number="18" groups="file"/>
+  <syscall name="lseek" number="19" groups="descriptor"/>
+  <syscall name="getpid" number="20"/>
+  <syscall name="mount" number="21" groups="file"/>
+  <syscall name="umount" number="22" groups="file"/>
+  <syscall name="setuid" number="23"/>
+  <syscall name="getuid" number="24"/>
+  <syscall name="stime" number="25"/>
+  <syscall name="ptrace" number="26"/>
+  <syscall name="alarm" number="27"/>
+  <syscall name="oldfstat" number="28" groups="descriptor"/>
+  <syscall name="pause" number="29" groups="signal"/>
+  <syscall name="utime" number="30" groups="file"/>
+  <syscall name="stty" number="31"/>
+  <syscall name="gtty" number="32"/>
+  <syscall name="access" number="33" groups="file"/>
+  <syscall name="nice" number="34"/>
+  <syscall name="ftime" number="35"/>
+  <syscall name="sync" number="36"/>
+  <syscall name="kill" number="37" groups="signal"/>
+  <syscall name="rename" number="38" groups="file"/>
+  <syscall name="mkdir" number="39" groups="file"/>
+  <syscall name="rmdir" number="40" groups="file"/>
+  <syscall name="dup" number="41" groups="descriptor"/>
+  <syscall name="pipe" number="42" groups="descriptor"/>
+  <syscall name="times" number="43"/>
+  <syscall name="prof" number="44"/>
+  <syscall name="brk" number="45" groups="memory"/>
+  <syscall name="setgid" number="46"/>
+  <syscall name="getgid" number="47"/>
+  <syscall name="signal" number="48" groups="signal"/>
+  <syscall name="geteuid" number="49"/>
+  <syscall name="getegid" number="50"/>
+  <syscall name="acct" number="51" groups="file"/>
+  <syscall name="umount2" number="52" groups="file"/>
+  <syscall name="lock" number="53"/>
+  <syscall name="ioctl" number="54" groups="descriptor"/>
+  <syscall name="fcntl" number="55" groups="descriptor"/>
+  <syscall name="mpx" number="56"/>
+  <syscall name="setpgid" number="57"/>
+  <syscall name="ulimit" number="58"/>
+  <syscall name="oldolduname" number="59"/>
+  <syscall name="umask" number="60"/>
+  <syscall name="chroot" number="61" groups="file"/>
+  <syscall name="ustat" number="62"/>
+  <syscall name="dup2" number="63" groups="descriptor"/>
+  <syscall name="getppid" number="64"/>
+  <syscall name="getpgrp" number="65"/>
+  <syscall name="setsid" number="66"/>
+  <syscall name="sigaction" number="67" groups="signal"/>
+  <syscall name="sgetmask" number="68" groups="signal"/>
+  <syscall name="ssetmask" number="69" groups="signal"/>
+  <syscall name="setreuid" number="70"/>
+  <syscall name="setregid" number="71"/>
+  <syscall name="sigsuspend" number="72" groups="signal"/>
+  <syscall name="sigpending" number="73" groups="signal"/>
+  <syscall name="sethostname" number="74"/>
+  <syscall name="setrlimit" number="75"/>
+  <syscall name="getrlimit" number="76"/>
+  <syscall name="getrusage" number="77"/>
+  <syscall name="gettimeofday" number="78"/>
+  <syscall name="settimeofday" number="79"/>
+  <syscall name="getgroups" number="80"/>
+  <syscall name="setgroups" number="81"/>
+  <syscall name="select" number="82" groups="descriptor"/>
+  <syscall name="symlink" number="83" groups="file"/>
+  <syscall name="oldlstat" number="84" groups="file"/>
+  <syscall name="readlink" number="85" groups="file"/>
+  <syscall name="uselib" number="86" groups="file"/>
+  <syscall name="swapon" number="87" groups="file"/>
+  <syscall name="reboot" number="88"/>
+  <syscall name="readdir" number="89" groups="descriptor"/>
+  <syscall name="mmap" number="90" groups="descriptor,memory"/>
+  <syscall name="munmap" number="91" groups="memory"/>
+  <syscall name="truncate" number="92" groups="file"/>
+  <syscall name="ftruncate" number="93" groups="descriptor"/>
+  <syscall name="fchmod" number="94" groups="descriptor"/>
+  <syscall name="fchown" number="95" groups="descriptor"/>
+  <syscall name="getpriority" number="96"/>
+  <syscall name="setpriority" number="97"/>
+  <syscall name="profil" number="98"/>
+  <syscall name="statfs" number="99" groups="file"/>
+  <syscall name="fstatfs" number="100" groups="descriptor"/>
+  <syscall name="ioperm" number="101"/>
+  <syscall name="socketcall" number="102" groups="descriptor"/>
+  <syscall name="syslog" number="103"/>
+  <syscall name="setitimer" number="104"/>
+  <syscall name="getitimer" number="105"/>
+  <syscall name="stat" number="106" groups="file"/>
+  <syscall name="lstat" number="107" groups="file"/>
+  <syscall name="fstat" number="108" groups="descriptor"/>
+  <syscall name="olduname" number="109"/>
+  <syscall name="iopl" number="110"/>
+  <syscall name="vhangup" number="111"/>
+  <syscall name="idle" number="112"/>
+  <syscall name="vm86old" number="113"/>
+  <syscall name="wait4" number="114" groups="process"/>
+  <syscall name="swapoff" number="115" groups="file"/>
+  <syscall name="sysinfo" number="116"/>
+  <syscall name="ipc" number="117" groups="ipc"/>
+  <syscall name="fsync" number="118" groups="descriptor"/>
+  <syscall name="sigreturn" number="119" groups="signal"/>
+  <syscall name="clone" number="120" groups="process"/>
+  <syscall name="setdomainname" number="121"/>
+  <syscall name="uname" number="122"/>
+  <syscall name="modify_ldt" number="123"/>
+  <syscall name="adjtimex" number="124"/>
+  <syscall name="mprotect" number="125" groups="memory"/>
+  <syscall name="sigprocmask" number="126" groups="signal"/>
+  <syscall name="create_module" number="127"/>
+  <syscall name="init_module" number="128"/>
+  <syscall name="delete_module" number="129"/>
+  <syscall name="get_kernel_syms" number="130"/>
+  <syscall name="quotactl" number="131" groups="file"/>
+  <syscall name="getpgid" number="132"/>
+  <syscall name="fchdir" number="133" groups="descriptor"/>
+  <syscall name="bdflush" number="134"/>
+  <syscall name="sysfs" number="135"/>
+  <syscall name="personality" number="136"/>
+  <syscall name="afs_syscall" number="137"/>
+  <syscall name="setfsuid" number="138"/>
+  <syscall name="setfsgid" number="139"/>
+  <syscall name="_llseek" number="140" groups="descriptor"/>
+  <syscall name="getdents" number="141" groups="descriptor"/>
+  <syscall name="_newselect" number="142" groups="descriptor"/>
+  <syscall name="flock" number="143" groups="descriptor"/>
+  <syscall name="msync" number="144" groups="memory"/>
+  <syscall name="readv" number="145" groups="descriptor"/>
+  <syscall name="writev" number="146" groups="descriptor"/>
+  <syscall name="getsid" number="147"/>
+  <syscall name="fdatasync" number="148" groups="descriptor"/>
+  <syscall name="_sysctl" number="149"/>
+  <syscall name="mlock" number="150" groups="memory"/>
+  <syscall name="munlock" number="151" groups="memory"/>
+  <syscall name="mlockall" number="152" groups="memory"/>
+  <syscall name="munlockall" number="153" groups="memory"/>
+  <syscall name="sched_setparam" number="154"/>
+  <syscall name="sched_getparam" number="155"/>
+  <syscall name="sched_setscheduler" number="156"/>
+  <syscall name="sched_getscheduler" number="157"/>
+  <syscall name="sched_yield" number="158"/>
+  <syscall name="sched_get_priority_max" number="159"/>
+  <syscall name="sched_get_priority_min" number="160"/>
+  <syscall name="sched_rr_get_interval" number="161"/>
+  <syscall name="nanosleep" number="162"/>
+  <syscall name="mremap" number="163" groups="memory"/>
+  <syscall name="setresuid" number="164"/>
+  <syscall name="getresuid" number="165"/>
+  <syscall name="vm86" number="166"/>
+  <syscall name="query_module" number="167"/>
+  <syscall name="poll" number="168" groups="descriptor"/>
+  <syscall name="nfsservctl" number="169"/>
+  <syscall name="setresgid" number="170"/>
+  <syscall name="getresgid" number="171"/>
+  <syscall name="prctl" number="172"/>
+  <syscall name="rt_sigreturn" number="173" groups="signal"/>
+  <syscall name="rt_sigaction" number="174" groups="signal"/>
+  <syscall name="rt_sigprocmask" number="175" groups="signal"/>
+  <syscall name="rt_sigpending" number="176" groups="signal"/>
+  <syscall name="rt_sigtimedwait" number="177" groups="signal"/>
+  <syscall name="rt_sigqueueinfo" number="178" groups="signal"/>
+  <syscall name="rt_sigsuspend" number="179" groups="signal"/>
+  <syscall name="pread64" number="180" groups="descriptor"/>
+  <syscall name="pwrite64" number="181" groups="descriptor"/>
+  <syscall name="chown" number="182" groups="file"/>
+  <syscall name="getcwd" number="183" groups="file"/>
+  <syscall name="capget" number="184"/>
+  <syscall name="capset" number="185"/>
+  <syscall name="sigaltstack" number="186" groups="signal"/>
+  <syscall name="sendfile" number="187" groups="descriptor,network"/>
+  <syscall name="getpmsg" number="188"/>
+  <syscall name="putpmsg" number="189"/>
+  <syscall name="vfork" number="190" groups="process"/>
+  <syscall name="ugetrlimit" number="191"/>
+  <syscall name="mmap2" number="192" groups="descriptor,memory"/>
+  <syscall name="truncate64" number="193" groups="file"/>
+  <syscall name="ftruncate64" number="194" groups="descriptor"/>
+  <syscall name="stat64" number="195" groups="file"/>
+  <syscall name="lstat64" number="196" groups="file"/>
+  <syscall name="fstat64" number="197" groups="descriptor"/>
+  <syscall name="lchown32" number="198" groups="file"/>
+  <syscall name="getuid32" number="199"/>
+  <syscall name="getgid32" number="200"/>
+  <syscall name="geteuid32" number="201"/>
+  <syscall name="getegid32" number="202"/>
+  <syscall name="setreuid32" number="203"/>
+  <syscall name="setregid32" number="204"/>
+  <syscall name="getgroups32" number="205"/>
+  <syscall name="setgroups32" number="206"/>
+  <syscall name="fchown32" number="207" groups="descriptor"/>
+  <syscall name="setresuid32" number="208"/>
+  <syscall name="getresuid32" number="209"/>
+  <syscall name="setresgid32" number="210"/>
+  <syscall name="getresgid32" number="211"/>
+  <syscall name="chown32" number="212" groups="file"/>
+  <syscall name="setuid32" number="213"/>
+  <syscall name="setgid32" number="214"/>
+  <syscall name="setfsuid32" number="215"/>
+  <syscall name="setfsgid32" number="216"/>
+  <syscall name="pivot_root" number="217" groups="file"/>
+  <syscall name="mincore" number="218" groups="memory"/>
+  <syscall name="madvise" number="219" groups="memory"/>
+  <syscall name="madvise1" number="220"/>
+  <syscall name="getdents64" number="221" groups="descriptor"/>
+  <syscall name="fcntl64" number="222" groups="descriptor"/>
+  <syscall name="gettid" number="224"/>
+  <syscall name="readahead" number="225" groups="descriptor"/>
+  <syscall name="setxattr" number="226" groups="file"/>
+  <syscall name="lsetxattr" number="227" groups="file"/>
+  <syscall name="fsetxattr" number="228" groups="descriptor"/>
+  <syscall name="getxattr" number="229" groups="file"/>
+  <syscall name="lgetxattr" number="230" groups="file"/>
+  <syscall name="fgetxattr" number="231" groups="descriptor"/>
+  <syscall name="listxattr" number="232" groups="file"/>
+  <syscall name="llistxattr" number="233" groups="file"/>
+  <syscall name="flistxattr" number="234" groups="descriptor"/>
+  <syscall name="removexattr" number="235" groups="file"/>
+  <syscall name="lremovexattr" number="236" groups="file"/>
+  <syscall name="fremovexattr" number="237" groups="descriptor"/>
+  <syscall name="tkill" number="238" groups="signal"/>
+  <syscall name="sendfile64" number="239" groups="descriptor,network"/>
+  <syscall name="futex" number="240"/>
+  <syscall name="sched_setaffinity" number="241"/>
+  <syscall name="sched_getaffinity" number="242"/>
+  <syscall name="set_thread_area" number="243"/>
+  <syscall name="get_thread_area" number="244"/>
+  <syscall name="io_setup" number="245"/>
+  <syscall name="io_destroy" number="246"/>
+  <syscall name="io_getevents" number="247"/>
+  <syscall name="io_submit" number="248"/>
+  <syscall name="io_cancel" number="249"/>
+  <syscall name="fadvise64" number="250" groups="descriptor"/>
+  <syscall name="exit_group" number="252" groups="process"/>
+  <syscall name="lookup_dcookie" number="253"/>
+  <syscall name="epoll_create" number="254" groups="descriptor"/>
+  <syscall name="epoll_ctl" number="255" groups="descriptor"/>
+  <syscall name="epoll_wait" number="256" groups="descriptor"/>
+  <syscall name="remap_file_pages" number="257" groups="memory"/>
+  <syscall name="set_tid_address" number="258"/>
+  <syscall name="timer_create" number="259"/>
+  <syscall name="timer_settime" number="260"/>
+  <syscall name="timer_gettime" number="261"/>
+  <syscall name="timer_getoverrun" number="262"/>
+  <syscall name="timer_delete" number="263"/>
+  <syscall name="clock_settime" number="264"/>
+  <syscall name="clock_gettime" number="265"/>
+  <syscall name="clock_getres" number="266"/>
+  <syscall name="clock_nanosleep" number="267"/>
+  <syscall name="statfs64" number="268" groups="file"/>
+  <syscall name="fstatfs64" number="269" groups="descriptor"/>
+  <syscall name="tgkill" number="270" groups="signal"/>
+  <syscall name="utimes" number="271" groups="file"/>
+  <syscall name="fadvise64_64" number="272" groups="descriptor"/>
+  <syscall name="vserver" number="273"/>
+  <syscall name="mbind" number="274" groups="memory"/>
+  <syscall name="get_mempolicy" number="275" groups="memory"/>
+  <syscall name="set_mempolicy" number="276" groups="memory"/>
+  <syscall name="mq_open" number="277"/>
+  <syscall name="mq_unlink" number="278"/>
+  <syscall name="mq_timedsend" number="279"/>
+  <syscall name="mq_timedreceive" number="280"/>
+  <syscall name="mq_notify" number="281"/>
+  <syscall name="mq_getsetattr" number="282"/>
+  <syscall name="kexec_load" number="283"/>
+  <syscall name="waitid" number="284" groups="process"/>
+  <syscall name="add_key" number="286"/>
+  <syscall name="request_key" number="287"/>
+  <syscall name="keyctl" number="288"/>
+  <syscall name="ioprio_set" number="289"/>
+  <syscall name="ioprio_get" number="290"/>
+  <syscall name="inotify_init" number="291" groups="descriptor"/>
+  <syscall name="inotify_add_watch" number="292" groups="descriptor"/>
+  <syscall name="inotify_rm_watch" number="293" groups="descriptor"/>
+  <syscall name="migrate_pages" number="294" groups="memory"/>
+  <syscall name="openat" number="295" groups="descriptor,file"/>
+  <syscall name="mkdirat" number="296" groups="descriptor,file"/>
+  <syscall name="mknodat" number="297" groups="descriptor,file"/>
+  <syscall name="fchownat" number="298" groups="descriptor,file"/>
+  <syscall name="futimesat" number="299" groups="descriptor,file"/>
+  <syscall name="fstatat64" number="300" groups="descriptor,file"/>
+  <syscall name="unlinkat" number="301" groups="descriptor,file"/>
+  <syscall name="renameat" number="302" groups="descriptor,file"/>
+  <syscall name="linkat" number="303" groups="descriptor,file"/>
+  <syscall name="symlinkat" number="304" groups="descriptor,file"/>
+  <syscall name="readlinkat" number="305" groups="descriptor,file"/>
+  <syscall name="fchmodat" number="306" groups="descriptor,file"/>
+  <syscall name="faccessat" number="307" groups="descriptor,file"/>
+  <syscall name="pselect6" number="308" groups="descriptor"/>
+  <syscall name="ppoll" number="309" groups="descriptor"/>
+  <syscall name="unshare" number="310" groups="process"/>
+  <syscall name="set_robust_list" number="311"/>
+  <syscall name="get_robust_list" number="312"/>
+  <syscall name="splice" number="313" groups="descriptor"/>
+  <syscall name="sync_file_range" number="314" groups="descriptor"/>
+  <syscall name="tee" number="315" groups="descriptor"/>
+  <syscall name="vmsplice" number="316" groups="descriptor"/>
+  <syscall name="move_pages" number="317" groups="memory"/>
+  <syscall name="getcpu" number="318"/>
+  <syscall name="epoll_pwait" number="319" groups="descriptor"/>
+  <syscall name="utimensat" number="320" groups="descriptor,file"/>
+  <syscall name="signalfd" number="321" groups="descriptor,signal"/>
+  <syscall name="timerfd_create" number="322" groups="descriptor"/>
+  <syscall name="eventfd" number="323" groups="descriptor"/>
+  <syscall name="fallocate" number="324" groups="descriptor"/>
+  <syscall name="timerfd_settime" number="325" groups="descriptor"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/mips-n32-linux.xml b/share/gdb/syscalls/mips-n32-linux.xml
new file mode 100644
index 0000000..859d0eb
--- /dev/null
+++ b/share/gdb/syscalls/mips-n32-linux.xml
@@ -0,0 +1,316 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2011-2019 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+<!-- This file was generated using the following file:
+     
+     /usr/src/linux/arch/mips/include/asm/unistd.h
+
+     The file mentioned above belongs to the Linux Kernel.  -->
+<syscalls_info>
+  <syscall name="read" number="6000" groups="descriptor"/>
+  <syscall name="write" number="6001" groups="descriptor"/>
+  <syscall name="open" number="6002" groups="descriptor,file"/>
+  <syscall name="close" number="6003" groups="descriptor"/>
+  <syscall name="stat" number="6004" groups="file"/>
+  <syscall name="fstat" number="6005" groups="descriptor"/>
+  <syscall name="lstat" number="6006" groups="file"/>
+  <syscall name="poll" number="6007" groups="descriptor"/>
+  <syscall name="lseek" number="6008" groups="descriptor"/>
+  <syscall name="mmap" number="6009" groups="descriptor,memory"/>
+  <syscall name="mprotect" number="6010" groups="memory"/>
+  <syscall name="munmap" number="6011" groups="memory"/>
+  <syscall name="brk" number="6012" groups="memory"/>
+  <syscall name="rt_sigaction" number="6013" groups="signal"/>
+  <syscall name="rt_sigprocmask" number="6014" groups="signal"/>
+  <syscall name="ioctl" number="6015" groups="descriptor"/>
+  <syscall name="pread64" number="6016" groups="descriptor"/>
+  <syscall name="pwrite64" number="6017" groups="descriptor"/>
+  <syscall name="readv" number="6018" groups="descriptor"/>
+  <syscall name="writev" number="6019" groups="descriptor"/>
+  <syscall name="access" number="6020" groups="file"/>
+  <syscall name="pipe" number="6021" groups="descriptor"/>
+  <syscall name="_newselect" number="6022" groups="descriptor"/>
+  <syscall name="sched_yield" number="6023"/>
+  <syscall name="mremap" number="6024" groups="memory"/>
+  <syscall name="msync" number="6025" groups="memory"/>
+  <syscall name="mincore" number="6026" groups="memory"/>
+  <syscall name="madvise" number="6027" groups="memory"/>
+  <syscall name="shmget" number="6028" groups="ipc"/>
+  <syscall name="shmat" number="6029" groups="ipc,memory"/>
+  <syscall name="shmctl" number="6030" groups="ipc"/>
+  <syscall name="dup" number="6031" groups="descriptor"/>
+  <syscall name="dup2" number="6032" groups="descriptor"/>
+  <syscall name="pause" number="6033" groups="signal"/>
+  <syscall name="nanosleep" number="6034"/>
+  <syscall name="getitimer" number="6035"/>
+  <syscall name="setitimer" number="6036"/>
+  <syscall name="alarm" number="6037"/>
+  <syscall name="getpid" number="6038"/>
+  <syscall name="sendfile" number="6039" groups="descriptor,network"/>
+  <syscall name="socket" number="6040" groups="network"/>
+  <syscall name="connect" number="6041" groups="network"/>
+  <syscall name="accept" number="6042" groups="network"/>
+  <syscall name="sendto" number="6043" groups="network"/>
+  <syscall name="recvfrom" number="6044" groups="network"/>
+  <syscall name="sendmsg" number="6045" groups="network"/>
+  <syscall name="recvmsg" number="6046" groups="network"/>
+  <syscall name="shutdown" number="6047" groups="network"/>
+  <syscall name="bind" number="6048" groups="network"/>
+  <syscall name="listen" number="6049" groups="network"/>
+  <syscall name="getsockname" number="6050" groups="network"/>
+  <syscall name="getpeername" number="6051" groups="network"/>
+  <syscall name="socketpair" number="6052" groups="network"/>
+  <syscall name="setsockopt" number="6053" groups="network"/>
+  <syscall name="getsockopt" number="6054" groups="network"/>
+  <syscall name="clone" number="6055" groups="process"/>
+  <syscall name="fork" number="6056" groups="process"/>
+  <syscall name="execve" number="6057" groups="file,process"/>
+  <syscall name="exit" number="6058" groups="process"/>
+  <syscall name="wait4" number="6059" groups="process"/>
+  <syscall name="kill" number="6060" groups="signal"/>
+  <syscall name="uname" number="6061"/>
+  <syscall name="semget" number="6062" groups="ipc"/>
+  <syscall name="semop" number="6063" groups="ipc"/>
+  <syscall name="semctl" number="6064" groups="ipc"/>
+  <syscall name="shmdt" number="6065" groups="ipc,memory"/>
+  <syscall name="msgget" number="6066" groups="ipc"/>
+  <syscall name="msgsnd" number="6067" groups="ipc"/>
+  <syscall name="msgrcv" number="6068" groups="ipc"/>
+  <syscall name="msgctl" number="6069" groups="ipc"/>
+  <syscall name="fcntl" number="6070" groups="descriptor"/>
+  <syscall name="flock" number="6071" groups="descriptor"/>
+  <syscall name="fsync" number="6072" groups="descriptor"/>
+  <syscall name="fdatasync" number="6073" groups="descriptor"/>
+  <syscall name="truncate" number="6074" groups="file"/>
+  <syscall name="ftruncate" number="6075" groups="descriptor"/>
+  <syscall name="getdents" number="6076" groups="descriptor"/>
+  <syscall name="getcwd" number="6077" groups="file"/>
+  <syscall name="chdir" number="6078" groups="file"/>
+  <syscall name="fchdir" number="6079" groups="descriptor"/>
+  <syscall name="rename" number="6080" groups="file"/>
+  <syscall name="mkdir" number="6081" groups="file"/>
+  <syscall name="rmdir" number="6082" groups="file"/>
+  <syscall name="creat" number="6083" groups="descriptor,file"/>
+  <syscall name="link" number="6084" groups="file"/>
+  <syscall name="unlink" number="6085" groups="file"/>
+  <syscall name="symlink" number="6086" groups="file"/>
+  <syscall name="readlink" number="6087" groups="file"/>
+  <syscall name="chmod" number="6088" groups="file"/>
+  <syscall name="fchmod" number="6089" groups="descriptor"/>
+  <syscall name="chown" number="6090" groups="file"/>
+  <syscall name="fchown" number="6091" groups="descriptor"/>
+  <syscall name="lchown" number="6092" groups="file"/>
+  <syscall name="umask" number="6093"/>
+  <syscall name="gettimeofday" number="6094"/>
+  <syscall name="getrlimit" number="6095"/>
+  <syscall name="getrusage" number="6096"/>
+  <syscall name="sysinfo" number="6097"/>
+  <syscall name="times" number="6098"/>
+  <syscall name="ptrace" number="6099"/>
+  <syscall name="getuid" number="6100"/>
+  <syscall name="syslog" number="6101"/>
+  <syscall name="getgid" number="6102"/>
+  <syscall name="setuid" number="6103"/>
+  <syscall name="setgid" number="6104"/>
+  <syscall name="geteuid" number="6105"/>
+  <syscall name="getegid" number="6106"/>
+  <syscall name="setpgid" number="6107"/>
+  <syscall name="getppid" number="6108"/>
+  <syscall name="getpgrp" number="6109"/>
+  <syscall name="setsid" number="6110"/>
+  <syscall name="setreuid" number="6111"/>
+  <syscall name="setregid" number="6112"/>
+  <syscall name="getgroups" number="6113"/>
+  <syscall name="setgroups" number="6114"/>
+  <syscall name="setresuid" number="6115"/>
+  <syscall name="getresuid" number="6116"/>
+  <syscall name="setresgid" number="6117"/>
+  <syscall name="getresgid" number="6118"/>
+  <syscall name="getpgid" number="6119"/>
+  <syscall name="setfsuid" number="6120"/>
+  <syscall name="setfsgid" number="6121"/>
+  <syscall name="getsid" number="6122"/>
+  <syscall name="capget" number="6123"/>
+  <syscall name="capset" number="6124"/>
+  <syscall name="rt_sigpending" number="6125" groups="signal"/>
+  <syscall name="rt_sigtimedwait" number="6126" groups="signal"/>
+  <syscall name="rt_sigqueueinfo" number="6127" groups="signal"/>
+  <syscall name="rt_sigsuspend" number="6128" groups="signal"/>
+  <syscall name="sigaltstack" number="6129" groups="signal"/>
+  <syscall name="utime" number="6130" groups="file"/>
+  <syscall name="mknod" number="6131" groups="file"/>
+  <syscall name="personality" number="6132"/>
+  <syscall name="ustat" number="6133"/>
+  <syscall name="statfs" number="6134" groups="file"/>
+  <syscall name="fstatfs" number="6135" groups="descriptor"/>
+  <syscall name="sysfs" number="6136"/>
+  <syscall name="getpriority" number="6137"/>
+  <syscall name="setpriority" number="6138"/>
+  <syscall name="sched_setparam" number="6139"/>
+  <syscall name="sched_getparam" number="6140"/>
+  <syscall name="sched_setscheduler" number="6141"/>
+  <syscall name="sched_getscheduler" number="6142"/>
+  <syscall name="sched_get_priority_max" number="6143"/>
+  <syscall name="sched_get_priority_min" number="6144"/>
+  <syscall name="sched_rr_get_interval" number="6145"/>
+  <syscall name="mlock" number="6146" groups="memory"/>
+  <syscall name="munlock" number="6147" groups="memory"/>
+  <syscall name="mlockall" number="6148" groups="memory"/>
+  <syscall name="munlockall" number="6149" groups="memory"/>
+  <syscall name="vhangup" number="6150"/>
+  <syscall name="pivot_root" number="6151" groups="file"/>
+  <syscall name="_sysctl" number="6152"/>
+  <syscall name="prctl" number="6153"/>
+  <syscall name="adjtimex" number="6154"/>
+  <syscall name="setrlimit" number="6155"/>
+  <syscall name="chroot" number="6156" groups="file"/>
+  <syscall name="sync" number="6157"/>
+  <syscall name="acct" number="6158" groups="file"/>
+  <syscall name="settimeofday" number="6159"/>
+  <syscall name="mount" number="6160" groups="file"/>
+  <syscall name="umount2" number="6161" groups="file"/>
+  <syscall name="swapon" number="6162" groups="file"/>
+  <syscall name="swapoff" number="6163" groups="file"/>
+  <syscall name="reboot" number="6164"/>
+  <syscall name="sethostname" number="6165"/>
+  <syscall name="setdomainname" number="6166"/>
+  <syscall name="create_module" number="6167"/>
+  <syscall name="init_module" number="6168"/>
+  <syscall name="delete_module" number="6169"/>
+  <syscall name="get_kernel_syms" number="6170"/>
+  <syscall name="query_module" number="6171"/>
+  <syscall name="quotactl" number="6172" groups="file"/>
+  <syscall name="nfsservctl" number="6173"/>
+  <syscall name="getpmsg" number="6174"/>
+  <syscall name="putpmsg" number="6175"/>
+  <syscall name="afs_syscall" number="6176"/>
+  <syscall name="reserved177" number="6177"/>
+  <syscall name="gettid" number="6178"/>
+  <syscall name="readahead" number="6179" groups="descriptor"/>
+  <syscall name="setxattr" number="6180" groups="file"/>
+  <syscall name="lsetxattr" number="6181" groups="file"/>
+  <syscall name="fsetxattr" number="6182" groups="descriptor"/>
+  <syscall name="getxattr" number="6183" groups="file"/>
+  <syscall name="lgetxattr" number="6184" groups="file"/>
+  <syscall name="fgetxattr" number="6185" groups="descriptor"/>
+  <syscall name="listxattr" number="6186" groups="file"/>
+  <syscall name="llistxattr" number="6187" groups="file"/>
+  <syscall name="flistxattr" number="6188" groups="descriptor"/>
+  <syscall name="removexattr" number="6189" groups="file"/>
+  <syscall name="lremovexattr" number="6190" groups="file"/>
+  <syscall name="fremovexattr" number="6191" groups="descriptor"/>
+  <syscall name="tkill" number="6192" groups="signal"/>
+  <syscall name="reserved193" number="6193"/>
+  <syscall name="futex" number="6194"/>
+  <syscall name="sched_setaffinity" number="6195"/>
+  <syscall name="sched_getaffinity" number="6196"/>
+  <syscall name="cacheflush" number="6197"/>
+  <syscall name="cachectl" number="6198"/>
+  <syscall name="sysmips" number="6199"/>
+  <syscall name="io_setup" number="6200"/>
+  <syscall name="io_destroy" number="6201"/>
+  <syscall name="io_getevents" number="6202"/>
+  <syscall name="io_submit" number="6203"/>
+  <syscall name="io_cancel" number="6204"/>
+  <syscall name="exit_group" number="6205" groups="process"/>
+  <syscall name="lookup_dcookie" number="6206"/>
+  <syscall name="epoll_create" number="6207" groups="descriptor"/>
+  <syscall name="epoll_ctl" number="6208" groups="descriptor"/>
+  <syscall name="epoll_wait" number="6209" groups="descriptor"/>
+  <syscall name="remap_file_pages" number="6210" groups="memory"/>
+  <syscall name="rt_sigreturn" number="6211" groups="signal"/>
+  <syscall name="fcntl64" number="6212" groups="descriptor"/>
+  <syscall name="set_tid_address" number="6213"/>
+  <syscall name="restart_syscall" number="6214"/>
+  <syscall name="semtimedop" number="6215" groups="ipc"/>
+  <syscall name="fadvise64" number="6216" groups="descriptor"/>
+  <syscall name="statfs64" number="6217" groups="file"/>
+  <syscall name="fstatfs64" number="6218" groups="descriptor"/>
+  <syscall name="sendfile64" number="6219" groups="descriptor,network"/>
+  <syscall name="timer_create" number="6220"/>
+  <syscall name="timer_settime" number="6221"/>
+  <syscall name="timer_gettime" number="6222"/>
+  <syscall name="timer_getoverrun" number="6223"/>
+  <syscall name="timer_delete" number="6224"/>
+  <syscall name="clock_settime" number="6225"/>
+  <syscall name="clock_gettime" number="6226"/>
+  <syscall name="clock_getres" number="6227"/>
+  <syscall name="clock_nanosleep" number="6228"/>
+  <syscall name="tgkill" number="6229" groups="signal"/>
+  <syscall name="utimes" number="6230" groups="file"/>
+  <syscall name="mbind" number="6231" groups="memory"/>
+  <syscall name="get_mempolicy" number="6232" groups="memory"/>
+  <syscall name="set_mempolicy" number="6233" groups="memory"/>
+  <syscall name="mq_open" number="6234"/>
+  <syscall name="mq_unlink" number="6235"/>
+  <syscall name="mq_timedsend" number="6236"/>
+  <syscall name="mq_timedreceive" number="6237"/>
+  <syscall name="mq_notify" number="6238"/>
+  <syscall name="mq_getsetattr" number="6239"/>
+  <syscall name="vserver" number="6240"/>
+  <syscall name="waitid" number="6241" groups="process"/>
+  <syscall name="add_key" number="6243"/>
+  <syscall name="request_key" number="6244"/>
+  <syscall name="keyctl" number="6245"/>
+  <syscall name="set_thread_area" number="6246"/>
+  <syscall name="inotify_init" number="6247" groups="descriptor"/>
+  <syscall name="inotify_add_watch" number="6248" groups="descriptor"/>
+  <syscall name="inotify_rm_watch" number="6249" groups="descriptor"/>
+  <syscall name="migrate_pages" number="6250" groups="memory"/>
+  <syscall name="openat" number="6251" groups="descriptor,file"/>
+  <syscall name="mkdirat" number="6252" groups="descriptor,file"/>
+  <syscall name="mknodat" number="6253" groups="descriptor,file"/>
+  <syscall name="fchownat" number="6254" groups="descriptor,file"/>
+  <syscall name="futimesat" number="6255" groups="descriptor,file"/>
+  <syscall name="newfstatat" number="6256" groups="descriptor,file"/>
+  <syscall name="unlinkat" number="6257" groups="descriptor,file"/>
+  <syscall name="renameat" number="6258" groups="descriptor,file"/>
+  <syscall name="linkat" number="6259" groups="descriptor,file"/>
+  <syscall name="symlinkat" number="6260" groups="descriptor,file"/>
+  <syscall name="readlinkat" number="6261" groups="descriptor,file"/>
+  <syscall name="fchmodat" number="6262" groups="descriptor,file"/>
+  <syscall name="faccessat" number="6263" groups="descriptor,file"/>
+  <syscall name="pselect6" number="6264" groups="descriptor"/>
+  <syscall name="ppoll" number="6265" groups="descriptor"/>
+  <syscall name="unshare" number="6266" groups="process"/>
+  <syscall name="splice" number="6267" groups="descriptor"/>
+  <syscall name="sync_file_range" number="6268" groups="descriptor"/>
+  <syscall name="tee" number="6269" groups="descriptor"/>
+  <syscall name="vmsplice" number="6270" groups="descriptor"/>
+  <syscall name="move_pages" number="6271" groups="memory"/>
+  <syscall name="set_robust_list" number="6272"/>
+  <syscall name="get_robust_list" number="6273"/>
+  <syscall name="kexec_load" number="6274"/>
+  <syscall name="getcpu" number="6275"/>
+  <syscall name="epoll_pwait" number="6276" groups="descriptor"/>
+  <syscall name="ioprio_set" number="6277"/>
+  <syscall name="ioprio_get" number="6278"/>
+  <syscall name="utimensat" number="6279" groups="descriptor,file"/>
+  <syscall name="signalfd" number="6280" groups="descriptor,signal"/>
+  <syscall name="timerfd" number="6281" groups="descriptor"/>
+  <syscall name="eventfd" number="6282" groups="descriptor"/>
+  <syscall name="fallocate" number="6283" groups="descriptor"/>
+  <syscall name="timerfd_create" number="6284" groups="descriptor"/>
+  <syscall name="timerfd_gettime" number="6285" groups="descriptor"/>
+  <syscall name="timerfd_settime" number="6286" groups="descriptor"/>
+  <syscall name="signalfd4" number="6287" groups="descriptor,signal"/>
+  <syscall name="eventfd2" number="6288" groups="descriptor"/>
+  <syscall name="epoll_create1" number="6289" groups="descriptor"/>
+  <syscall name="dup3" number="6290" groups="descriptor"/>
+  <syscall name="pipe2" number="6291" groups="descriptor"/>
+  <syscall name="inotify_init1" number="6292" groups="descriptor"/>
+  <syscall name="preadv" number="6293" groups="descriptor"/>
+  <syscall name="pwritev" number="6294" groups="descriptor"/>
+  <syscall name="rt_tgsigqueueinfo" number="6295" groups="process,signal"/>
+  <syscall name="perf_event_open" number="6296" groups="descriptor"/>
+  <syscall name="accept4" number="6297" groups="network"/>
+  <syscall name="recvmmsg" number="6298" groups="network"/>
+  <syscall name="getdents64" number="6299" groups="descriptor"/>
+  <syscall name="fanotify_init" number="6300" groups="descriptor"/>
+  <syscall name="fanotify_mark" number="6301" groups="descriptor,file"/>
+  <syscall name="prlimit64" number="6302"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/mips-n64-linux.xml b/share/gdb/syscalls/mips-n64-linux.xml
new file mode 100644
index 0000000..a958101
--- /dev/null
+++ b/share/gdb/syscalls/mips-n64-linux.xml
@@ -0,0 +1,309 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2011-2019 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+<!-- This file was generated using the following file:
+     
+     /usr/src/linux/arch/mips/include/asm/unistd.h
+
+     The file mentioned above belongs to the Linux Kernel.  -->
+<syscalls_info>
+  <syscall name="read" number="5000" groups="descriptor"/>
+  <syscall name="write" number="5001" groups="descriptor"/>
+  <syscall name="open" number="5002" groups="descriptor,file"/>
+  <syscall name="close" number="5003" groups="descriptor"/>
+  <syscall name="stat" number="5004" groups="file"/>
+  <syscall name="fstat" number="5005" groups="descriptor"/>
+  <syscall name="lstat" number="5006" groups="file"/>
+  <syscall name="poll" number="5007" groups="descriptor"/>
+  <syscall name="lseek" number="5008" groups="descriptor"/>
+  <syscall name="mmap" number="5009" groups="descriptor,memory"/>
+  <syscall name="mprotect" number="5010" groups="memory"/>
+  <syscall name="munmap" number="5011" groups="memory"/>
+  <syscall name="brk" number="5012" groups="memory"/>
+  <syscall name="rt_sigaction" number="5013" groups="signal"/>
+  <syscall name="rt_sigprocmask" number="5014" groups="signal"/>
+  <syscall name="ioctl" number="5015" groups="descriptor"/>
+  <syscall name="pread64" number="5016" groups="descriptor"/>
+  <syscall name="pwrite64" number="5017" groups="descriptor"/>
+  <syscall name="readv" number="5018" groups="descriptor"/>
+  <syscall name="writev" number="5019" groups="descriptor"/>
+  <syscall name="access" number="5020" groups="file"/>
+  <syscall name="pipe" number="5021" groups="descriptor"/>
+  <syscall name="_newselect" number="5022" groups="descriptor"/>
+  <syscall name="sched_yield" number="5023"/>
+  <syscall name="mremap" number="5024" groups="memory"/>
+  <syscall name="msync" number="5025" groups="memory"/>
+  <syscall name="mincore" number="5026" groups="memory"/>
+  <syscall name="madvise" number="5027" groups="memory"/>
+  <syscall name="shmget" number="5028" groups="ipc"/>
+  <syscall name="shmat" number="5029" groups="ipc,memory"/>
+  <syscall name="shmctl" number="5030" groups="ipc"/>
+  <syscall name="dup" number="5031" groups="descriptor"/>
+  <syscall name="dup2" number="5032" groups="descriptor"/>
+  <syscall name="pause" number="5033" groups="signal"/>
+  <syscall name="nanosleep" number="5034"/>
+  <syscall name="getitimer" number="5035"/>
+  <syscall name="setitimer" number="5036"/>
+  <syscall name="alarm" number="5037"/>
+  <syscall name="getpid" number="5038"/>
+  <syscall name="sendfile" number="5039" groups="descriptor,network"/>
+  <syscall name="socket" number="5040" groups="network"/>
+  <syscall name="connect" number="5041" groups="network"/>
+  <syscall name="accept" number="5042" groups="network"/>
+  <syscall name="sendto" number="5043" groups="network"/>
+  <syscall name="recvfrom" number="5044" groups="network"/>
+  <syscall name="sendmsg" number="5045" groups="network"/>
+  <syscall name="recvmsg" number="5046" groups="network"/>
+  <syscall name="shutdown" number="5047" groups="network"/>
+  <syscall name="bind" number="5048" groups="network"/>
+  <syscall name="listen" number="5049" groups="network"/>
+  <syscall name="getsockname" number="5050" groups="network"/>
+  <syscall name="getpeername" number="5051" groups="network"/>
+  <syscall name="socketpair" number="5052" groups="network"/>
+  <syscall name="setsockopt" number="5053" groups="network"/>
+  <syscall name="getsockopt" number="5054" groups="network"/>
+  <syscall name="clone" number="5055" groups="process"/>
+  <syscall name="fork" number="5056" groups="process"/>
+  <syscall name="execve" number="5057" groups="file,process"/>
+  <syscall name="exit" number="5058" groups="process"/>
+  <syscall name="wait4" number="5059" groups="process"/>
+  <syscall name="kill" number="5060" groups="signal"/>
+  <syscall name="uname" number="5061"/>
+  <syscall name="semget" number="5062" groups="ipc"/>
+  <syscall name="semop" number="5063" groups="ipc"/>
+  <syscall name="semctl" number="5064" groups="ipc"/>
+  <syscall name="shmdt" number="5065" groups="ipc,memory"/>
+  <syscall name="msgget" number="5066" groups="ipc"/>
+  <syscall name="msgsnd" number="5067" groups="ipc"/>
+  <syscall name="msgrcv" number="5068" groups="ipc"/>
+  <syscall name="msgctl" number="5069" groups="ipc"/>
+  <syscall name="fcntl" number="5070" groups="descriptor"/>
+  <syscall name="flock" number="5071" groups="descriptor"/>
+  <syscall name="fsync" number="5072" groups="descriptor"/>
+  <syscall name="fdatasync" number="5073" groups="descriptor"/>
+  <syscall name="truncate" number="5074" groups="file"/>
+  <syscall name="ftruncate" number="5075" groups="descriptor"/>
+  <syscall name="getdents" number="5076" groups="descriptor"/>
+  <syscall name="getcwd" number="5077" groups="file"/>
+  <syscall name="chdir" number="5078" groups="file"/>
+  <syscall name="fchdir" number="5079" groups="descriptor"/>
+  <syscall name="rename" number="5080" groups="file"/>
+  <syscall name="mkdir" number="5081" groups="file"/>
+  <syscall name="rmdir" number="5082" groups="file"/>
+  <syscall name="creat" number="5083" groups="descriptor,file"/>
+  <syscall name="link" number="5084" groups="file"/>
+  <syscall name="unlink" number="5085" groups="file"/>
+  <syscall name="symlink" number="5086" groups="file"/>
+  <syscall name="readlink" number="5087" groups="file"/>
+  <syscall name="chmod" number="5088" groups="file"/>
+  <syscall name="fchmod" number="5089" groups="descriptor"/>
+  <syscall name="chown" number="5090" groups="file"/>
+  <syscall name="fchown" number="5091" groups="descriptor"/>
+  <syscall name="lchown" number="5092" groups="file"/>
+  <syscall name="umask" number="5093"/>
+  <syscall name="gettimeofday" number="5094"/>
+  <syscall name="getrlimit" number="5095"/>
+  <syscall name="getrusage" number="5096"/>
+  <syscall name="sysinfo" number="5097"/>
+  <syscall name="times" number="5098"/>
+  <syscall name="ptrace" number="5099"/>
+  <syscall name="getuid" number="5100"/>
+  <syscall name="syslog" number="5101"/>
+  <syscall name="getgid" number="5102"/>
+  <syscall name="setuid" number="5103"/>
+  <syscall name="setgid" number="5104"/>
+  <syscall name="geteuid" number="5105"/>
+  <syscall name="getegid" number="5106"/>
+  <syscall name="setpgid" number="5107"/>
+  <syscall name="getppid" number="5108"/>
+  <syscall name="getpgrp" number="5109"/>
+  <syscall name="setsid" number="5110"/>
+  <syscall name="setreuid" number="5111"/>
+  <syscall name="setregid" number="5112"/>
+  <syscall name="getgroups" number="5113"/>
+  <syscall name="setgroups" number="5114"/>
+  <syscall name="setresuid" number="5115"/>
+  <syscall name="getresuid" number="5116"/>
+  <syscall name="setresgid" number="5117"/>
+  <syscall name="getresgid" number="5118"/>
+  <syscall name="getpgid" number="5119"/>
+  <syscall name="setfsuid" number="5120"/>
+  <syscall name="setfsgid" number="5121"/>
+  <syscall name="getsid" number="5122"/>
+  <syscall name="capget" number="5123"/>
+  <syscall name="capset" number="5124"/>
+  <syscall name="rt_sigpending" number="5125" groups="signal"/>
+  <syscall name="rt_sigtimedwait" number="5126" groups="signal"/>
+  <syscall name="rt_sigqueueinfo" number="5127" groups="signal"/>
+  <syscall name="rt_sigsuspend" number="5128" groups="signal"/>
+  <syscall name="sigaltstack" number="5129" groups="signal"/>
+  <syscall name="utime" number="5130" groups="file"/>
+  <syscall name="mknod" number="5131" groups="file"/>
+  <syscall name="personality" number="5132"/>
+  <syscall name="ustat" number="5133"/>
+  <syscall name="statfs" number="5134" groups="file"/>
+  <syscall name="fstatfs" number="5135" groups="descriptor"/>
+  <syscall name="sysfs" number="5136"/>
+  <syscall name="getpriority" number="5137"/>
+  <syscall name="setpriority" number="5138"/>
+  <syscall name="sched_setparam" number="5139"/>
+  <syscall name="sched_getparam" number="5140"/>
+  <syscall name="sched_setscheduler" number="5141"/>
+  <syscall name="sched_getscheduler" number="5142"/>
+  <syscall name="sched_get_priority_max" number="5143"/>
+  <syscall name="sched_get_priority_min" number="5144"/>
+  <syscall name="sched_rr_get_interval" number="5145"/>
+  <syscall name="mlock" number="5146" groups="memory"/>
+  <syscall name="munlock" number="5147" groups="memory"/>
+  <syscall name="mlockall" number="5148" groups="memory"/>
+  <syscall name="munlockall" number="5149" groups="memory"/>
+  <syscall name="vhangup" number="5150"/>
+  <syscall name="pivot_root" number="5151" groups="file"/>
+  <syscall name="_sysctl" number="5152"/>
+  <syscall name="prctl" number="5153"/>
+  <syscall name="adjtimex" number="5154"/>
+  <syscall name="setrlimit" number="5155"/>
+  <syscall name="chroot" number="5156" groups="file"/>
+  <syscall name="sync" number="5157"/>
+  <syscall name="acct" number="5158" groups="file"/>
+  <syscall name="settimeofday" number="5159"/>
+  <syscall name="mount" number="5160" groups="file"/>
+  <syscall name="umount2" number="5161" groups="file"/>
+  <syscall name="swapon" number="5162" groups="file"/>
+  <syscall name="swapoff" number="5163" groups="file"/>
+  <syscall name="reboot" number="5164"/>
+  <syscall name="sethostname" number="5165"/>
+  <syscall name="setdomainname" number="5166"/>
+  <syscall name="create_module" number="5167"/>
+  <syscall name="init_module" number="5168"/>
+  <syscall name="delete_module" number="5169"/>
+  <syscall name="get_kernel_syms" number="5170"/>
+  <syscall name="query_module" number="5171"/>
+  <syscall name="quotactl" number="5172" groups="file"/>
+  <syscall name="nfsservctl" number="5173"/>
+  <syscall name="getpmsg" number="5174"/>
+  <syscall name="putpmsg" number="5175"/>
+  <syscall name="afs_syscall" number="5176"/>
+  <syscall name="gettid" number="5178"/>
+  <syscall name="readahead" number="5179" groups="descriptor"/>
+  <syscall name="setxattr" number="5180" groups="file"/>
+  <syscall name="lsetxattr" number="5181" groups="file"/>
+  <syscall name="fsetxattr" number="5182" groups="descriptor"/>
+  <syscall name="getxattr" number="5183" groups="file"/>
+  <syscall name="lgetxattr" number="5184" groups="file"/>
+  <syscall name="fgetxattr" number="5185" groups="descriptor"/>
+  <syscall name="listxattr" number="5186" groups="file"/>
+  <syscall name="llistxattr" number="5187" groups="file"/>
+  <syscall name="flistxattr" number="5188" groups="descriptor"/>
+  <syscall name="removexattr" number="5189" groups="file"/>
+  <syscall name="lremovexattr" number="5190" groups="file"/>
+  <syscall name="fremovexattr" number="5191" groups="descriptor"/>
+  <syscall name="tkill" number="5192" groups="signal"/>
+  <syscall name="futex" number="5194"/>
+  <syscall name="sched_setaffinity" number="5195"/>
+  <syscall name="sched_getaffinity" number="5196"/>
+  <syscall name="cacheflush" number="5197"/>
+  <syscall name="cachectl" number="5198"/>
+  <syscall name="sysmips" number="5199"/>
+  <syscall name="io_setup" number="5200"/>
+  <syscall name="io_destroy" number="5201"/>
+  <syscall name="io_getevents" number="5202"/>
+  <syscall name="io_submit" number="5203"/>
+  <syscall name="io_cancel" number="5204"/>
+  <syscall name="exit_group" number="5205" groups="process"/>
+  <syscall name="lookup_dcookie" number="5206"/>
+  <syscall name="epoll_create" number="5207" groups="descriptor"/>
+  <syscall name="epoll_ctl" number="5208" groups="descriptor"/>
+  <syscall name="epoll_wait" number="5209" groups="descriptor"/>
+  <syscall name="remap_file_pages" number="5210" groups="memory"/>
+  <syscall name="rt_sigreturn" number="5211" groups="signal"/>
+  <syscall name="set_tid_address" number="5212"/>
+  <syscall name="restart_syscall" number="5213"/>
+  <syscall name="semtimedop" number="5214" groups="ipc"/>
+  <syscall name="fadvise64" number="5215" groups="descriptor"/>
+  <syscall name="timer_create" number="5216"/>
+  <syscall name="timer_settime" number="5217"/>
+  <syscall name="timer_gettime" number="5218"/>
+  <syscall name="timer_getoverrun" number="5219"/>
+  <syscall name="timer_delete" number="5220"/>
+  <syscall name="clock_settime" number="5221"/>
+  <syscall name="clock_gettime" number="5222"/>
+  <syscall name="clock_getres" number="5223"/>
+  <syscall name="clock_nanosleep" number="5224"/>
+  <syscall name="tgkill" number="5225" groups="signal"/>
+  <syscall name="utimes" number="5226" groups="file"/>
+  <syscall name="mbind" number="5227" groups="memory"/>
+  <syscall name="get_mempolicy" number="5228" groups="memory"/>
+  <syscall name="set_mempolicy" number="5229" groups="memory"/>
+  <syscall name="mq_open" number="5230"/>
+  <syscall name="mq_unlink" number="5231"/>
+  <syscall name="mq_timedsend" number="5232"/>
+  <syscall name="mq_timedreceive" number="5233"/>
+  <syscall name="mq_notify" number="5234"/>
+  <syscall name="mq_getsetattr" number="5235"/>
+  <syscall name="vserver" number="5236"/>
+  <syscall name="waitid" number="5237" groups="process"/>
+  <syscall name="add_key" number="5239"/>
+  <syscall name="request_key" number="5240"/>
+  <syscall name="keyctl" number="5241"/>
+  <syscall name="set_thread_area" number="5242"/>
+  <syscall name="inotify_init" number="5243" groups="descriptor"/>
+  <syscall name="inotify_add_watch" number="5244" groups="descriptor"/>
+  <syscall name="inotify_rm_watch" number="5245" groups="descriptor"/>
+  <syscall name="migrate_pages" number="5246" groups="memory"/>
+  <syscall name="openat" number="5247" groups="descriptor,file"/>
+  <syscall name="mkdirat" number="5248" groups="descriptor,file"/>
+  <syscall name="mknodat" number="5249" groups="descriptor,file"/>
+  <syscall name="fchownat" number="5250" groups="descriptor,file"/>
+  <syscall name="futimesat" number="5251" groups="descriptor,file"/>
+  <syscall name="newfstatat" number="5252" groups="descriptor,file"/>
+  <syscall name="unlinkat" number="5253" groups="descriptor,file"/>
+  <syscall name="renameat" number="5254" groups="descriptor,file"/>
+  <syscall name="linkat" number="5255" groups="descriptor,file"/>
+  <syscall name="symlinkat" number="5256" groups="descriptor,file"/>
+  <syscall name="readlinkat" number="5257" groups="descriptor,file"/>
+  <syscall name="fchmodat" number="5258" groups="descriptor,file"/>
+  <syscall name="faccessat" number="5259" groups="descriptor,file"/>
+  <syscall name="pselect6" number="5260" groups="descriptor"/>
+  <syscall name="ppoll" number="5261" groups="descriptor"/>
+  <syscall name="unshare" number="5262" groups="process"/>
+  <syscall name="splice" number="5263" groups="descriptor"/>
+  <syscall name="sync_file_range" number="5264" groups="descriptor"/>
+  <syscall name="tee" number="5265" groups="descriptor"/>
+  <syscall name="vmsplice" number="5266" groups="descriptor"/>
+  <syscall name="move_pages" number="5267" groups="memory"/>
+  <syscall name="set_robust_list" number="5268"/>
+  <syscall name="get_robust_list" number="5269"/>
+  <syscall name="kexec_load" number="5270"/>
+  <syscall name="getcpu" number="5271"/>
+  <syscall name="epoll_pwait" number="5272" groups="descriptor"/>
+  <syscall name="ioprio_set" number="5273"/>
+  <syscall name="ioprio_get" number="5274"/>
+  <syscall name="utimensat" number="5275" groups="descriptor,file"/>
+  <syscall name="signalfd" number="5276" groups="descriptor,signal"/>
+  <syscall name="timerfd" number="5277" groups="descriptor"/>
+  <syscall name="eventfd" number="5278" groups="descriptor"/>
+  <syscall name="fallocate" number="5279" groups="descriptor"/>
+  <syscall name="timerfd_create" number="5280" groups="descriptor"/>
+  <syscall name="timerfd_gettime" number="5281" groups="descriptor"/>
+  <syscall name="timerfd_settime" number="5282" groups="descriptor"/>
+  <syscall name="signalfd4" number="5283" groups="descriptor,signal"/>
+  <syscall name="eventfd2" number="5284" groups="descriptor"/>
+  <syscall name="epoll_create1" number="5285" groups="descriptor"/>
+  <syscall name="dup3" number="5286" groups="descriptor"/>
+  <syscall name="pipe2" number="5287" groups="descriptor"/>
+  <syscall name="inotify_init1" number="5288" groups="descriptor"/>
+  <syscall name="preadv" number="5289" groups="descriptor"/>
+  <syscall name="pwritev" number="5290" groups="descriptor"/>
+  <syscall name="rt_tgsigqueueinfo" number="5291" groups="process,signal"/>
+  <syscall name="perf_event_open" number="5292" groups="descriptor"/>
+  <syscall name="accept4" number="5293" groups="network"/>
+  <syscall name="recvmmsg" number="5294" groups="network"/>
+  <syscall name="fanotify_init" number="5295" groups="descriptor"/>
+  <syscall name="fanotify_mark" number="5296" groups="descriptor,file"/>
+  <syscall name="prlimit64" number="5297"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/mips-o32-linux.xml b/share/gdb/syscalls/mips-o32-linux.xml
new file mode 100644
index 0000000..22be642
--- /dev/null
+++ b/share/gdb/syscalls/mips-o32-linux.xml
@@ -0,0 +1,344 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2011-2019 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+<!-- This file was generated using the following file:
+     
+     /usr/src/linux/arch/mips/include/asm/unistd.h
+
+     The file mentioned above belongs to the Linux Kernel.  -->
+<syscalls_info>
+  <syscall name="syscall" number="4000"/>
+  <syscall name="exit" number="4001" groups="process"/>
+  <syscall name="fork" number="4002" groups="process"/>
+  <syscall name="read" number="4003" groups="descriptor"/>
+  <syscall name="write" number="4004" groups="descriptor"/>
+  <syscall name="open" number="4005" groups="descriptor,file"/>
+  <syscall name="close" number="4006" groups="descriptor"/>
+  <syscall name="waitpid" number="4007" groups="process"/>
+  <syscall name="creat" number="4008" groups="descriptor,file"/>
+  <syscall name="link" number="4009" groups="file"/>
+  <syscall name="unlink" number="4010" groups="file"/>
+  <syscall name="execve" number="4011" groups="file,process"/>
+  <syscall name="chdir" number="4012" groups="file"/>
+  <syscall name="time" number="4013"/>
+  <syscall name="mknod" number="4014" groups="file"/>
+  <syscall name="chmod" number="4015" groups="file"/>
+  <syscall name="lchown" number="4016" groups="file"/>
+  <syscall name="break" number="4017" groups="memory"/>
+  <syscall name="lseek" number="4019" groups="descriptor"/>
+  <syscall name="getpid" number="4020"/>
+  <syscall name="mount" number="4021" groups="file"/>
+  <syscall name="umount" number="4022" groups="file"/>
+  <syscall name="setuid" number="4023"/>
+  <syscall name="getuid" number="4024"/>
+  <syscall name="stime" number="4025"/>
+  <syscall name="ptrace" number="4026"/>
+  <syscall name="alarm" number="4027"/>
+  <syscall name="pause" number="4029" groups="signal"/>
+  <syscall name="utime" number="4030" groups="file"/>
+  <syscall name="stty" number="4031"/>
+  <syscall name="gtty" number="4032"/>
+  <syscall name="access" number="4033" groups="file"/>
+  <syscall name="nice" number="4034"/>
+  <syscall name="ftime" number="4035"/>
+  <syscall name="sync" number="4036"/>
+  <syscall name="kill" number="4037" groups="signal"/>
+  <syscall name="rename" number="4038" groups="file"/>
+  <syscall name="mkdir" number="4039" groups="file"/>
+  <syscall name="rmdir" number="4040" groups="file"/>
+  <syscall name="dup" number="4041" groups="descriptor"/>
+  <syscall name="pipe" number="4042" groups="descriptor"/>
+  <syscall name="times" number="4043"/>
+  <syscall name="prof" number="4044"/>
+  <syscall name="brk" number="4045" groups="memory"/>
+  <syscall name="setgid" number="4046"/>
+  <syscall name="getgid" number="4047"/>
+  <syscall name="signal" number="4048" groups="signal"/>
+  <syscall name="geteuid" number="4049"/>
+  <syscall name="getegid" number="4050"/>
+  <syscall name="acct" number="4051" groups="file"/>
+  <syscall name="umount2" number="4052" groups="file"/>
+  <syscall name="lock" number="4053"/>
+  <syscall name="ioctl" number="4054" groups="descriptor"/>
+  <syscall name="fcntl" number="4055" groups="descriptor"/>
+  <syscall name="mpx" number="4056"/>
+  <syscall name="setpgid" number="4057"/>
+  <syscall name="ulimit" number="4058"/>
+  <syscall name="umask" number="4060"/>
+  <syscall name="chroot" number="4061" groups="file"/>
+  <syscall name="ustat" number="4062"/>
+  <syscall name="dup2" number="4063" groups="descriptor"/>
+  <syscall name="getppid" number="4064"/>
+  <syscall name="getpgrp" number="4065"/>
+  <syscall name="setsid" number="4066"/>
+  <syscall name="sigaction" number="4067" groups="signal"/>
+  <syscall name="sgetmask" number="4068" groups="signal"/>
+  <syscall name="ssetmask" number="4069" groups="signal"/>
+  <syscall name="setreuid" number="4070"/>
+  <syscall name="setregid" number="4071"/>
+  <syscall name="sigsuspend" number="4072" groups="signal"/>
+  <syscall name="sigpending" number="4073" groups="signal"/>
+  <syscall name="sethostname" number="4074"/>
+  <syscall name="setrlimit" number="4075"/>
+  <syscall name="getrlimit" number="4076"/>
+  <syscall name="getrusage" number="4077"/>
+  <syscall name="gettimeofday" number="4078"/>
+  <syscall name="settimeofday" number="4079"/>
+  <syscall name="getgroups" number="4080"/>
+  <syscall name="setgroups" number="4081"/>
+  <syscall name="symlink" number="4083" groups="file"/>
+  <syscall name="readlink" number="4085" groups="file"/>
+  <syscall name="uselib" number="4086" groups="file"/>
+  <syscall name="swapon" number="4087" groups="file"/>
+  <syscall name="reboot" number="4088"/>
+  <syscall name="readdir" number="4089" groups="descriptor"/>
+  <syscall name="mmap" number="4090" groups="descriptor,memory"/>
+  <syscall name="munmap" number="4091" groups="memory"/>
+  <syscall name="truncate" number="4092" groups="file"/>
+  <syscall name="ftruncate" number="4093" groups="descriptor"/>
+  <syscall name="fchmod" number="4094" groups="descriptor"/>
+  <syscall name="fchown" number="4095" groups="descriptor"/>
+  <syscall name="getpriority" number="4096"/>
+  <syscall name="setpriority" number="4097"/>
+  <syscall name="profil" number="4098"/>
+  <syscall name="statfs" number="4099" groups="file"/>
+  <syscall name="fstatfs" number="4100" groups="descriptor"/>
+  <syscall name="ioperm" number="4101"/>
+  <syscall name="socketcall" number="4102" groups="descriptor"/>
+  <syscall name="syslog" number="4103"/>
+  <syscall name="setitimer" number="4104"/>
+  <syscall name="getitimer" number="4105"/>
+  <syscall name="stat" number="4106" groups="file"/>
+  <syscall name="lstat" number="4107" groups="file"/>
+  <syscall name="fstat" number="4108" groups="descriptor"/>
+  <syscall name="iopl" number="4110"/>
+  <syscall name="vhangup" number="4111"/>
+  <syscall name="idle" number="4112"/>
+  <syscall name="vm86" number="4113"/>
+  <syscall name="wait4" number="4114" groups="process"/>
+  <syscall name="swapoff" number="4115" groups="file"/>
+  <syscall name="sysinfo" number="4116"/>
+  <syscall name="ipc" number="4117" groups="ipc"/>
+  <syscall name="fsync" number="4118" groups="descriptor"/>
+  <syscall name="sigreturn" number="4119" groups="signal"/>
+  <syscall name="clone" number="4120" groups="process"/>
+  <syscall name="setdomainname" number="4121"/>
+  <syscall name="uname" number="4122"/>
+  <syscall name="modify_ldt" number="4123"/>
+  <syscall name="adjtimex" number="4124"/>
+  <syscall name="mprotect" number="4125" groups="memory"/>
+  <syscall name="sigprocmask" number="4126" groups="signal"/>
+  <syscall name="create_module" number="4127"/>
+  <syscall name="init_module" number="4128"/>
+  <syscall name="delete_module" number="4129"/>
+  <syscall name="get_kernel_syms" number="4130"/>
+  <syscall name="quotactl" number="4131" groups="file"/>
+  <syscall name="getpgid" number="4132"/>
+  <syscall name="fchdir" number="4133" groups="descriptor"/>
+  <syscall name="bdflush" number="4134"/>
+  <syscall name="sysfs" number="4135"/>
+  <syscall name="personality" number="4136"/>
+  <syscall name="afs_syscall" number="4137"/>
+  <syscall name="setfsuid" number="4138"/>
+  <syscall name="setfsgid" number="4139"/>
+  <syscall name="_llseek" number="4140" groups="descriptor"/>
+  <syscall name="getdents" number="4141" groups="descriptor"/>
+  <syscall name="_newselect" number="4142" groups="descriptor"/>
+  <syscall name="flock" number="4143" groups="descriptor"/>
+  <syscall name="msync" number="4144" groups="memory"/>
+  <syscall name="readv" number="4145" groups="descriptor"/>
+  <syscall name="writev" number="4146" groups="descriptor"/>
+  <syscall name="cacheflush" number="4147"/>
+  <syscall name="cachectl" number="4148"/>
+  <syscall name="sysmips" number="4149"/>
+  <syscall name="getsid" number="4151"/>
+  <syscall name="fdatasync" number="4152" groups="descriptor"/>
+  <syscall name="_sysctl" number="4153"/>
+  <syscall name="mlock" number="4154" groups="memory"/>
+  <syscall name="munlock" number="4155" groups="memory"/>
+  <syscall name="mlockall" number="4156" groups="memory"/>
+  <syscall name="munlockall" number="4157" groups="memory"/>
+  <syscall name="sched_setparam" number="4158"/>
+  <syscall name="sched_getparam" number="4159"/>
+  <syscall name="sched_setscheduler" number="4160"/>
+  <syscall name="sched_getscheduler" number="4161"/>
+  <syscall name="sched_yield" number="4162"/>
+  <syscall name="sched_get_priority_max" number="4163"/>
+  <syscall name="sched_get_priority_min" number="4164"/>
+  <syscall name="sched_rr_get_interval" number="4165"/>
+  <syscall name="nanosleep" number="4166"/>
+  <syscall name="mremap" number="4167" groups="memory"/>
+  <syscall name="accept" number="4168" groups="network"/>
+  <syscall name="bind" number="4169" groups="network"/>
+  <syscall name="connect" number="4170" groups="network"/>
+  <syscall name="getpeername" number="4171" groups="network"/>
+  <syscall name="getsockname" number="4172" groups="network"/>
+  <syscall name="getsockopt" number="4173" groups="network"/>
+  <syscall name="listen" number="4174" groups="network"/>
+  <syscall name="recv" number="4175" groups="network"/>
+  <syscall name="recvfrom" number="4176" groups="network"/>
+  <syscall name="recvmsg" number="4177" groups="network"/>
+  <syscall name="send" number="4178" groups="network"/>
+  <syscall name="sendmsg" number="4179" groups="network"/>
+  <syscall name="sendto" number="4180" groups="network"/>
+  <syscall name="setsockopt" number="4181" groups="network"/>
+  <syscall name="shutdown" number="4182" groups="network"/>
+  <syscall name="socket" number="4183" groups="network"/>
+  <syscall name="socketpair" number="4184" groups="network"/>
+  <syscall name="setresuid" number="4185"/>
+  <syscall name="getresuid" number="4186"/>
+  <syscall name="query_module" number="4187"/>
+  <syscall name="poll" number="4188" groups="descriptor"/>
+  <syscall name="nfsservctl" number="4189"/>
+  <syscall name="setresgid" number="4190"/>
+  <syscall name="getresgid" number="4191"/>
+  <syscall name="prctl" number="4192"/>
+  <syscall name="rt_sigreturn" number="4193" groups="signal"/>
+  <syscall name="rt_sigaction" number="4194" groups="signal"/>
+  <syscall name="rt_sigprocmask" number="4195" groups="signal"/>
+  <syscall name="rt_sigpending" number="4196" groups="signal"/>
+  <syscall name="rt_sigtimedwait" number="4197" groups="signal"/>
+  <syscall name="rt_sigqueueinfo" number="4198" groups="signal"/>
+  <syscall name="rt_sigsuspend" number="4199" groups="signal"/>
+  <syscall name="pread64" number="4200" groups="descriptor"/>
+  <syscall name="pwrite64" number="4201" groups="descriptor"/>
+  <syscall name="chown" number="4202" groups="file"/>
+  <syscall name="getcwd" number="4203" groups="file"/>
+  <syscall name="capget" number="4204"/>
+  <syscall name="capset" number="4205"/>
+  <syscall name="sigaltstack" number="4206" groups="signal"/>
+  <syscall name="sendfile" number="4207" groups="descriptor,network"/>
+  <syscall name="getpmsg" number="4208"/>
+  <syscall name="putpmsg" number="4209"/>
+  <syscall name="mmap2" number="4210" groups="descriptor,memory"/>
+  <syscall name="truncate64" number="4211" groups="file"/>
+  <syscall name="ftruncate64" number="4212" groups="descriptor"/>
+  <syscall name="stat64" number="4213" groups="file"/>
+  <syscall name="lstat64" number="4214" groups="file"/>
+  <syscall name="fstat64" number="4215" groups="descriptor"/>
+  <syscall name="pivot_root" number="4216" groups="file"/>
+  <syscall name="mincore" number="4217" groups="memory"/>
+  <syscall name="madvise" number="4218" groups="memory"/>
+  <syscall name="getdents64" number="4219" groups="descriptor"/>
+  <syscall name="fcntl64" number="4220" groups="descriptor"/>
+  <syscall name="gettid" number="4222"/>
+  <syscall name="readahead" number="4223" groups="descriptor"/>
+  <syscall name="setxattr" number="4224" groups="file"/>
+  <syscall name="lsetxattr" number="4225" groups="file"/>
+  <syscall name="fsetxattr" number="4226" groups="descriptor"/>
+  <syscall name="getxattr" number="4227" groups="file"/>
+  <syscall name="lgetxattr" number="4228" groups="file"/>
+  <syscall name="fgetxattr" number="4229" groups="descriptor"/>
+  <syscall name="listxattr" number="4230" groups="file"/>
+  <syscall name="llistxattr" number="4231" groups="file"/>
+  <syscall name="flistxattr" number="4232" groups="descriptor"/>
+  <syscall name="removexattr" number="4233" groups="file"/>
+  <syscall name="lremovexattr" number="4234" groups="file"/>
+  <syscall name="fremovexattr" number="4235" groups="descriptor"/>
+  <syscall name="tkill" number="4236" groups="signal"/>
+  <syscall name="sendfile64" number="4237" groups="descriptor,network"/>
+  <syscall name="futex" number="4238"/>
+  <syscall name="sched_setaffinity" number="4239"/>
+  <syscall name="sched_getaffinity" number="4240"/>
+  <syscall name="io_setup" number="4241"/>
+  <syscall name="io_destroy" number="4242"/>
+  <syscall name="io_getevents" number="4243"/>
+  <syscall name="io_submit" number="4244"/>
+  <syscall name="io_cancel" number="4245"/>
+  <syscall name="exit_group" number="4246" groups="process"/>
+  <syscall name="lookup_dcookie" number="4247"/>
+  <syscall name="epoll_create" number="4248" groups="descriptor"/>
+  <syscall name="epoll_ctl" number="4249" groups="descriptor"/>
+  <syscall name="epoll_wait" number="4250" groups="descriptor"/>
+  <syscall name="remap_file_pages" number="4251" groups="memory"/>
+  <syscall name="set_tid_address" number="4252"/>
+  <syscall name="restart_syscall" number="4253"/>
+  <syscall name="fadvise64" number="4254" groups="descriptor"/>
+  <syscall name="statfs64" number="4255" groups="file"/>
+  <syscall name="fstatfs64" number="4256" groups="descriptor"/>
+  <syscall name="timer_create" number="4257"/>
+  <syscall name="timer_settime" number="4258"/>
+  <syscall name="timer_gettime" number="4259"/>
+  <syscall name="timer_getoverrun" number="4260"/>
+  <syscall name="timer_delete" number="4261"/>
+  <syscall name="clock_settime" number="4262"/>
+  <syscall name="clock_gettime" number="4263"/>
+  <syscall name="clock_getres" number="4264"/>
+  <syscall name="clock_nanosleep" number="4265"/>
+  <syscall name="tgkill" number="4266" groups="signal"/>
+  <syscall name="utimes" number="4267" groups="file"/>
+  <syscall name="mbind" number="4268" groups="memory"/>
+  <syscall name="get_mempolicy" number="4269" groups="memory"/>
+  <syscall name="set_mempolicy" number="4270" groups="memory"/>
+  <syscall name="mq_open" number="4271"/>
+  <syscall name="mq_unlink" number="4272"/>
+  <syscall name="mq_timedsend" number="4273"/>
+  <syscall name="mq_timedreceive" number="4274"/>
+  <syscall name="mq_notify" number="4275"/>
+  <syscall name="mq_getsetattr" number="4276"/>
+  <syscall name="vserver" number="4277"/>
+  <syscall name="waitid" number="4278" groups="process"/>
+  <syscall name="add_key" number="4280"/>
+  <syscall name="request_key" number="4281"/>
+  <syscall name="keyctl" number="4282"/>
+  <syscall name="set_thread_area" number="4283"/>
+  <syscall name="inotify_init" number="4284" groups="descriptor"/>
+  <syscall name="inotify_add_watch" number="4285" groups="descriptor"/>
+  <syscall name="inotify_rm_watch" number="4286" groups="descriptor"/>
+  <syscall name="migrate_pages" number="4287" groups="memory"/>
+  <syscall name="openat" number="4288" groups="descriptor,file"/>
+  <syscall name="mkdirat" number="4289" groups="descriptor,file"/>
+  <syscall name="mknodat" number="4290" groups="descriptor,file"/>
+  <syscall name="fchownat" number="4291" groups="descriptor,file"/>
+  <syscall name="futimesat" number="4292" groups="descriptor,file"/>
+  <syscall name="fstatat64" number="4293" groups="descriptor,file"/>
+  <syscall name="unlinkat" number="4294" groups="descriptor,file"/>
+  <syscall name="renameat" number="4295" groups="descriptor,file"/>
+  <syscall name="linkat" number="4296" groups="descriptor,file"/>
+  <syscall name="symlinkat" number="4297" groups="descriptor,file"/>
+  <syscall name="readlinkat" number="4298" groups="descriptor,file"/>
+  <syscall name="fchmodat" number="4299" groups="descriptor,file"/>
+  <syscall name="faccessat" number="4300" groups="descriptor,file"/>
+  <syscall name="pselect6" number="4301" groups="descriptor"/>
+  <syscall name="ppoll" number="4302" groups="descriptor"/>
+  <syscall name="unshare" number="4303" groups="process"/>
+  <syscall name="splice" number="4304" groups="descriptor"/>
+  <syscall name="sync_file_range" number="4305" groups="descriptor"/>
+  <syscall name="tee" number="4306" groups="descriptor"/>
+  <syscall name="vmsplice" number="4307" groups="descriptor"/>
+  <syscall name="move_pages" number="4308" groups="memory"/>
+  <syscall name="set_robust_list" number="4309"/>
+  <syscall name="get_robust_list" number="4310"/>
+  <syscall name="kexec_load" number="4311"/>
+  <syscall name="getcpu" number="4312"/>
+  <syscall name="epoll_pwait" number="4313" groups="descriptor"/>
+  <syscall name="ioprio_set" number="4314"/>
+  <syscall name="ioprio_get" number="4315"/>
+  <syscall name="utimensat" number="4316" groups="descriptor,file"/>
+  <syscall name="signalfd" number="4317" groups="descriptor,signal"/>
+  <syscall name="timerfd" number="4318" groups="descriptor"/>
+  <syscall name="eventfd" number="4319" groups="descriptor"/>
+  <syscall name="fallocate" number="4320" groups="descriptor"/>
+  <syscall name="timerfd_create" number="4321" groups="descriptor"/>
+  <syscall name="timerfd_gettime" number="4322" groups="descriptor"/>
+  <syscall name="timerfd_settime" number="4323" groups="descriptor"/>
+  <syscall name="signalfd4" number="4324" groups="descriptor,signal"/>
+  <syscall name="eventfd2" number="4325" groups="descriptor"/>
+  <syscall name="epoll_create1" number="4326" groups="descriptor"/>
+  <syscall name="dup3" number="4327" groups="descriptor"/>
+  <syscall name="pipe2" number="4328" groups="descriptor"/>
+  <syscall name="inotify_init1" number="4329" groups="descriptor"/>
+  <syscall name="preadv" number="4330" groups="descriptor"/>
+  <syscall name="pwritev" number="4331" groups="descriptor"/>
+  <syscall name="rt_tgsigqueueinfo" number="4332" groups="process,signal"/>
+  <syscall name="perf_event_open" number="4333" groups="descriptor"/>
+  <syscall name="accept4" number="4334" groups="network"/>
+  <syscall name="recvmmsg" number="4335" groups="network"/>
+  <syscall name="fanotify_init" number="4336" groups="descriptor"/>
+  <syscall name="fanotify_mark" number="4337" groups="descriptor,file"/>
+  <syscall name="prlimit64" number="4338"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/ppc-linux.xml b/share/gdb/syscalls/ppc-linux.xml
new file mode 100644
index 0000000..7254cf5
--- /dev/null
+++ b/share/gdb/syscalls/ppc-linux.xml
@@ -0,0 +1,307 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+<!-- This file was generated using the following file:
+     
+     /usr/src/linux/arch/powerpc/include/asm/unistd.h
+
+     The file mentioned above belongs to the Linux Kernel.  -->
+<syscalls_info>
+  <syscall name="restart_syscall" number="0"/>
+  <syscall name="exit" number="1" groups="process"/>
+  <syscall name="fork" number="2" groups="process"/>
+  <syscall name="read" number="3" groups="descriptor"/>
+  <syscall name="write" number="4" groups="descriptor"/>
+  <syscall name="open" number="5" groups="descriptor,file"/>
+  <syscall name="close" number="6" groups="descriptor"/>
+  <syscall name="waitpid" number="7" groups="process"/>
+  <syscall name="creat" number="8" groups="descriptor,file"/>
+  <syscall name="link" number="9" groups="file"/>
+  <syscall name="unlink" number="10" groups="file"/>
+  <syscall name="execve" number="11" groups="file,process"/>
+  <syscall name="chdir" number="12" groups="file"/>
+  <syscall name="time" number="13"/>
+  <syscall name="mknod" number="14" groups="file"/>
+  <syscall name="chmod" number="15" groups="file"/>
+  <syscall name="lchown" number="16" groups="file"/>
+  <syscall name="break" number="17" groups="memory"/>
+  <syscall name="oldstat" number="18" groups="file"/>
+  <syscall name="lseek" number="19" groups="descriptor"/>
+  <syscall name="getpid" number="20"/>
+  <syscall name="mount" number="21" groups="file"/>
+  <syscall name="umount" number="22" groups="file"/>
+  <syscall name="setuid" number="23"/>
+  <syscall name="getuid" number="24"/>
+  <syscall name="stime" number="25"/>
+  <syscall name="ptrace" number="26"/>
+  <syscall name="alarm" number="27"/>
+  <syscall name="oldfstat" number="28" groups="descriptor"/>
+  <syscall name="pause" number="29" groups="signal"/>
+  <syscall name="utime" number="30" groups="file"/>
+  <syscall name="stty" number="31"/>
+  <syscall name="gtty" number="32"/>
+  <syscall name="access" number="33" groups="file"/>
+  <syscall name="nice" number="34"/>
+  <syscall name="ftime" number="35"/>
+  <syscall name="sync" number="36"/>
+  <syscall name="kill" number="37" groups="signal"/>
+  <syscall name="rename" number="38" groups="file"/>
+  <syscall name="mkdir" number="39" groups="file"/>
+  <syscall name="rmdir" number="40" groups="file"/>
+  <syscall name="dup" number="41" groups="descriptor"/>
+  <syscall name="pipe" number="42" groups="descriptor"/>
+  <syscall name="times" number="43"/>
+  <syscall name="prof" number="44"/>
+  <syscall name="brk" number="45" groups="memory"/>
+  <syscall name="setgid" number="46"/>
+  <syscall name="getgid" number="47"/>
+  <syscall name="signal" number="48" groups="signal"/>
+  <syscall name="geteuid" number="49"/>
+  <syscall name="getegid" number="50"/>
+  <syscall name="acct" number="51" groups="file"/>
+  <syscall name="umount2" number="52" groups="file"/>
+  <syscall name="lock" number="53"/>
+  <syscall name="ioctl" number="54" groups="descriptor"/>
+  <syscall name="fcntl" number="55" groups="descriptor"/>
+  <syscall name="mpx" number="56"/>
+  <syscall name="setpgid" number="57"/>
+  <syscall name="ulimit" number="58"/>
+  <syscall name="oldolduname" number="59"/>
+  <syscall name="umask" number="60"/>
+  <syscall name="chroot" number="61" groups="file"/>
+  <syscall name="ustat" number="62"/>
+  <syscall name="dup2" number="63" groups="descriptor"/>
+  <syscall name="getppid" number="64"/>
+  <syscall name="getpgrp" number="65"/>
+  <syscall name="setsid" number="66"/>
+  <syscall name="sigaction" number="67" groups="signal"/>
+  <syscall name="sgetmask" number="68" groups="signal"/>
+  <syscall name="ssetmask" number="69" groups="signal"/>
+  <syscall name="setreuid" number="70"/>
+  <syscall name="setregid" number="71"/>
+  <syscall name="sigsuspend" number="72" groups="signal"/>
+  <syscall name="sigpending" number="73" groups="signal"/>
+  <syscall name="sethostname" number="74"/>
+  <syscall name="setrlimit" number="75"/>
+  <syscall name="getrlimit" number="76"/>
+  <syscall name="getrusage" number="77"/>
+  <syscall name="gettimeofday" number="78"/>
+  <syscall name="settimeofday" number="79"/>
+  <syscall name="getgroups" number="80"/>
+  <syscall name="setgroups" number="81"/>
+  <syscall name="select" number="82" groups="descriptor"/>
+  <syscall name="symlink" number="83" groups="file"/>
+  <syscall name="oldlstat" number="84" groups="file"/>
+  <syscall name="readlink" number="85" groups="file"/>
+  <syscall name="uselib" number="86" groups="file"/>
+  <syscall name="swapon" number="87" groups="file"/>
+  <syscall name="reboot" number="88"/>
+  <syscall name="readdir" number="89" groups="descriptor"/>
+  <syscall name="mmap" number="90" groups="descriptor,memory"/>
+  <syscall name="munmap" number="91" groups="memory"/>
+  <syscall name="truncate" number="92" groups="file"/>
+  <syscall name="ftruncate" number="93" groups="descriptor"/>
+  <syscall name="fchmod" number="94" groups="descriptor"/>
+  <syscall name="fchown" number="95" groups="descriptor"/>
+  <syscall name="getpriority" number="96"/>
+  <syscall name="setpriority" number="97"/>
+  <syscall name="profil" number="98"/>
+  <syscall name="statfs" number="99" groups="file"/>
+  <syscall name="fstatfs" number="100" groups="descriptor"/>
+  <syscall name="ioperm" number="101"/>
+  <syscall name="socketcall" number="102" groups="descriptor"/>
+  <syscall name="syslog" number="103"/>
+  <syscall name="setitimer" number="104"/>
+  <syscall name="getitimer" number="105"/>
+  <syscall name="stat" number="106" groups="file"/>
+  <syscall name="lstat" number="107" groups="file"/>
+  <syscall name="fstat" number="108" groups="descriptor"/>
+  <syscall name="olduname" number="109"/>
+  <syscall name="iopl" number="110"/>
+  <syscall name="vhangup" number="111"/>
+  <syscall name="idle" number="112"/>
+  <syscall name="vm86" number="113"/>
+  <syscall name="wait4" number="114" groups="process"/>
+  <syscall name="swapoff" number="115" groups="file"/>
+  <syscall name="sysinfo" number="116"/>
+  <syscall name="ipc" number="117" groups="ipc"/>
+  <syscall name="fsync" number="118" groups="descriptor"/>
+  <syscall name="sigreturn" number="119" groups="signal"/>
+  <syscall name="clone" number="120" groups="process"/>
+  <syscall name="setdomainname" number="121"/>
+  <syscall name="uname" number="122"/>
+  <syscall name="modify_ldt" number="123"/>
+  <syscall name="adjtimex" number="124"/>
+  <syscall name="mprotect" number="125" groups="memory"/>
+  <syscall name="sigprocmask" number="126" groups="signal"/>
+  <syscall name="create_module" number="127"/>
+  <syscall name="init_module" number="128"/>
+  <syscall name="delete_module" number="129"/>
+  <syscall name="get_kernel_syms" number="130"/>
+  <syscall name="quotactl" number="131" groups="file"/>
+  <syscall name="getpgid" number="132"/>
+  <syscall name="fchdir" number="133" groups="descriptor"/>
+  <syscall name="bdflush" number="134"/>
+  <syscall name="sysfs" number="135"/>
+  <syscall name="personality" number="136"/>
+  <syscall name="afs_syscall" number="137"/>
+  <syscall name="setfsuid" number="138"/>
+  <syscall name="setfsgid" number="139"/>
+  <syscall name="_llseek" number="140" groups="descriptor"/>
+  <syscall name="getdents" number="141" groups="descriptor"/>
+  <syscall name="_newselect" number="142" groups="descriptor"/>
+  <syscall name="flock" number="143" groups="descriptor"/>
+  <syscall name="msync" number="144" groups="memory"/>
+  <syscall name="readv" number="145" groups="descriptor"/>
+  <syscall name="writev" number="146" groups="descriptor"/>
+  <syscall name="getsid" number="147"/>
+  <syscall name="fdatasync" number="148" groups="descriptor"/>
+  <syscall name="_sysctl" number="149"/>
+  <syscall name="mlock" number="150" groups="memory"/>
+  <syscall name="munlock" number="151" groups="memory"/>
+  <syscall name="mlockall" number="152" groups="memory"/>
+  <syscall name="munlockall" number="153" groups="memory"/>
+  <syscall name="sched_setparam" number="154"/>
+  <syscall name="sched_getparam" number="155"/>
+  <syscall name="sched_setscheduler" number="156"/>
+  <syscall name="sched_getscheduler" number="157"/>
+  <syscall name="sched_yield" number="158"/>
+  <syscall name="sched_get_priority_max" number="159"/>
+  <syscall name="sched_get_priority_min" number="160"/>
+  <syscall name="sched_rr_get_interval" number="161"/>
+  <syscall name="nanosleep" number="162"/>
+  <syscall name="mremap" number="163" groups="memory"/>
+  <syscall name="setresuid" number="164"/>
+  <syscall name="getresuid" number="165"/>
+  <syscall name="query_module" number="166"/>
+  <syscall name="poll" number="167" groups="descriptor"/>
+  <syscall name="nfsservctl" number="168"/>
+  <syscall name="setresgid" number="169"/>
+  <syscall name="getresgid" number="170"/>
+  <syscall name="prctl" number="171"/>
+  <syscall name="rt_sigreturn" number="172" groups="signal"/>
+  <syscall name="rt_sigaction" number="173" groups="signal"/>
+  <syscall name="rt_sigprocmask" number="174" groups="signal"/>
+  <syscall name="rt_sigpending" number="175" groups="signal"/>
+  <syscall name="rt_sigtimedwait" number="176" groups="signal"/>
+  <syscall name="rt_sigqueueinfo" number="177" groups="signal"/>
+  <syscall name="rt_sigsuspend" number="178" groups="signal"/>
+  <syscall name="pread64" number="179" groups="descriptor"/>
+  <syscall name="pwrite64" number="180" groups="descriptor"/>
+  <syscall name="chown" number="181" groups="file"/>
+  <syscall name="getcwd" number="182" groups="file"/>
+  <syscall name="capget" number="183"/>
+  <syscall name="capset" number="184"/>
+  <syscall name="sigaltstack" number="185" groups="signal"/>
+  <syscall name="sendfile" number="186" groups="descriptor,network"/>
+  <syscall name="getpmsg" number="187"/>
+  <syscall name="putpmsg" number="188"/>
+  <syscall name="vfork" number="189" groups="process"/>
+  <syscall name="ugetrlimit" number="190"/>
+  <syscall name="readahead" number="191" groups="descriptor"/>
+  <syscall name="mmap2" number="192" groups="descriptor,memory"/>
+  <syscall name="truncate64" number="193" groups="file"/>
+  <syscall name="ftruncate64" number="194" groups="descriptor"/>
+  <syscall name="stat64" number="195" groups="file"/>
+  <syscall name="lstat64" number="196" groups="file"/>
+  <syscall name="fstat64" number="197" groups="descriptor"/>
+  <syscall name="pciconfig_read" number="198"/>
+  <syscall name="pciconfig_write" number="199"/>
+  <syscall name="pciconfig_iobase" number="200"/>
+  <syscall name="multiplexer" number="201"/>
+  <syscall name="getdents64" number="202" groups="descriptor"/>
+  <syscall name="pivot_root" number="203" groups="file"/>
+  <syscall name="fcntl64" number="204" groups="descriptor"/>
+  <syscall name="madvise" number="205" groups="memory"/>
+  <syscall name="mincore" number="206" groups="memory"/>
+  <syscall name="gettid" number="207"/>
+  <syscall name="tkill" number="208" groups="signal"/>
+  <syscall name="setxattr" number="209" groups="file"/>
+  <syscall name="lsetxattr" number="210" groups="file"/>
+  <syscall name="fsetxattr" number="211" groups="descriptor"/>
+  <syscall name="getxattr" number="212" groups="file"/>
+  <syscall name="lgetxattr" number="213" groups="file"/>
+  <syscall name="fgetxattr" number="214" groups="descriptor"/>
+  <syscall name="listxattr" number="215" groups="file"/>
+  <syscall name="llistxattr" number="216" groups="file"/>
+  <syscall name="flistxattr" number="217" groups="descriptor"/>
+  <syscall name="removexattr" number="218" groups="file"/>
+  <syscall name="lremovexattr" number="219" groups="file"/>
+  <syscall name="fremovexattr" number="220" groups="descriptor"/>
+  <syscall name="futex" number="221"/>
+  <syscall name="sched_setaffinity" number="222"/>
+  <syscall name="sched_getaffinity" number="223"/>
+  <syscall name="tuxcall" number="225"/>
+  <syscall name="sendfile64" number="226" groups="descriptor,network"/>
+  <syscall name="io_setup" number="227"/>
+  <syscall name="io_destroy" number="228"/>
+  <syscall name="io_getevents" number="229"/>
+  <syscall name="io_submit" number="230"/>
+  <syscall name="io_cancel" number="231"/>
+  <syscall name="set_tid_address" number="232"/>
+  <syscall name="fadvise64" number="233" groups="descriptor"/>
+  <syscall name="exit_group" number="234" groups="process"/>
+  <syscall name="lookup_dcookie" number="235"/>
+  <syscall name="epoll_create" number="236" groups="descriptor"/>
+  <syscall name="epoll_ctl" number="237" groups="descriptor"/>
+  <syscall name="epoll_wait" number="238" groups="descriptor"/>
+  <syscall name="remap_file_pages" number="239" groups="memory"/>
+  <syscall name="timer_create" number="240"/>
+  <syscall name="timer_settime" number="241"/>
+  <syscall name="timer_gettime" number="242"/>
+  <syscall name="timer_getoverrun" number="243"/>
+  <syscall name="timer_delete" number="244"/>
+  <syscall name="clock_settime" number="245"/>
+  <syscall name="clock_gettime" number="246"/>
+  <syscall name="clock_getres" number="247"/>
+  <syscall name="clock_nanosleep" number="248"/>
+  <syscall name="swapcontext" number="249"/>
+  <syscall name="tgkill" number="250" groups="signal"/>
+  <syscall name="utimes" number="251" groups="file"/>
+  <syscall name="statfs64" number="252" groups="file"/>
+  <syscall name="fstatfs64" number="253" groups="descriptor"/>
+  <syscall name="fadvise64_64" number="254" groups="descriptor"/>
+  <syscall name="rtas" number="255"/>
+  <syscall name="sys_debug_setcontext" number="256"/>
+  <syscall name="mbind" number="259" groups="memory"/>
+  <syscall name="get_mempolicy" number="260" groups="memory"/>
+  <syscall name="set_mempolicy" number="261" groups="memory"/>
+  <syscall name="mq_open" number="262"/>
+  <syscall name="mq_unlink" number="263"/>
+  <syscall name="mq_timedsend" number="264"/>
+  <syscall name="mq_timedreceive" number="265"/>
+  <syscall name="mq_notify" number="266"/>
+  <syscall name="mq_getsetattr" number="267"/>
+  <syscall name="kexec_load" number="268"/>
+  <syscall name="add_key" number="269"/>
+  <syscall name="request_key" number="270"/>
+  <syscall name="keyctl" number="271"/>
+  <syscall name="waitid" number="272" groups="process"/>
+  <syscall name="ioprio_set" number="273"/>
+  <syscall name="ioprio_get" number="274"/>
+  <syscall name="inotify_init" number="275" groups="descriptor"/>
+  <syscall name="inotify_add_watch" number="276" groups="descriptor"/>
+  <syscall name="inotify_rm_watch" number="277" groups="descriptor"/>
+  <syscall name="spu_run" number="278"/>
+  <syscall name="spu_create" number="279"/>
+  <syscall name="pselect6" number="280" groups="descriptor"/>
+  <syscall name="ppoll" number="281" groups="descriptor"/>
+  <syscall name="unshare" number="282" groups="process"/>
+  <syscall name="openat" number="286" groups="descriptor,file"/>
+  <syscall name="mkdirat" number="287" groups="descriptor,file"/>
+  <syscall name="mknodat" number="288" groups="descriptor,file"/>
+  <syscall name="fchownat" number="289" groups="descriptor,file"/>
+  <syscall name="futimesat" number="290" groups="descriptor,file"/>
+  <syscall name="fstatat64" number="291" groups="descriptor,file"/>
+  <syscall name="unlinkat" number="292" groups="descriptor,file"/>
+  <syscall name="renameat" number="293" groups="descriptor,file"/>
+  <syscall name="linkat" number="294" groups="descriptor,file"/>
+  <syscall name="symlinkat" number="295" groups="descriptor,file"/>
+  <syscall name="readlinkat" number="296" groups="descriptor,file"/>
+  <syscall name="fchmodat" number="297" groups="descriptor,file"/>
+  <syscall name="faccessat" number="298" groups="descriptor,file"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/ppc64-linux.xml b/share/gdb/syscalls/ppc64-linux.xml
new file mode 100644
index 0000000..99f3ba5
--- /dev/null
+++ b/share/gdb/syscalls/ppc64-linux.xml
@@ -0,0 +1,292 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+<!-- This file was generated using the following file:
+     
+     /usr/src/linux/arch/powerpc/include/asm/unistd.h
+
+     The file mentioned above belongs to the Linux Kernel.  -->
+<syscalls_info>
+  <syscall name="restart_syscall" number="0"/>
+  <syscall name="exit" number="1" groups="process"/>
+  <syscall name="fork" number="2" groups="process"/>
+  <syscall name="read" number="3" groups="descriptor"/>
+  <syscall name="write" number="4" groups="descriptor"/>
+  <syscall name="open" number="5" groups="descriptor,file"/>
+  <syscall name="close" number="6" groups="descriptor"/>
+  <syscall name="waitpid" number="7" groups="process"/>
+  <syscall name="creat" number="8" groups="descriptor,file"/>
+  <syscall name="link" number="9" groups="file"/>
+  <syscall name="unlink" number="10" groups="file"/>
+  <syscall name="execve" number="11" groups="file,process"/>
+  <syscall name="chdir" number="12" groups="file"/>
+  <syscall name="time" number="13"/>
+  <syscall name="mknod" number="14" groups="file"/>
+  <syscall name="chmod" number="15" groups="file"/>
+  <syscall name="lchown" number="16" groups="file"/>
+  <syscall name="break" number="17" groups="memory"/>
+  <syscall name="oldstat" number="18" groups="file"/>
+  <syscall name="lseek" number="19" groups="descriptor"/>
+  <syscall name="getpid" number="20"/>
+  <syscall name="mount" number="21" groups="file"/>
+  <syscall name="umount" number="22" groups="file"/>
+  <syscall name="setuid" number="23"/>
+  <syscall name="getuid" number="24"/>
+  <syscall name="stime" number="25"/>
+  <syscall name="ptrace" number="26"/>
+  <syscall name="alarm" number="27"/>
+  <syscall name="oldfstat" number="28" groups="descriptor"/>
+  <syscall name="pause" number="29" groups="signal"/>
+  <syscall name="utime" number="30" groups="file"/>
+  <syscall name="stty" number="31"/>
+  <syscall name="gtty" number="32"/>
+  <syscall name="access" number="33" groups="file"/>
+  <syscall name="nice" number="34"/>
+  <syscall name="ftime" number="35"/>
+  <syscall name="sync" number="36"/>
+  <syscall name="kill" number="37" groups="signal"/>
+  <syscall name="rename" number="38" groups="file"/>
+  <syscall name="mkdir" number="39" groups="file"/>
+  <syscall name="rmdir" number="40" groups="file"/>
+  <syscall name="dup" number="41" groups="descriptor"/>
+  <syscall name="pipe" number="42" groups="descriptor"/>
+  <syscall name="times" number="43"/>
+  <syscall name="prof" number="44"/>
+  <syscall name="brk" number="45" groups="memory"/>
+  <syscall name="setgid" number="46"/>
+  <syscall name="getgid" number="47"/>
+  <syscall name="signal" number="48" groups="signal"/>
+  <syscall name="geteuid" number="49"/>
+  <syscall name="getegid" number="50"/>
+  <syscall name="acct" number="51" groups="file"/>
+  <syscall name="umount2" number="52" groups="file"/>
+  <syscall name="lock" number="53"/>
+  <syscall name="ioctl" number="54" groups="descriptor"/>
+  <syscall name="fcntl" number="55" groups="descriptor"/>
+  <syscall name="mpx" number="56"/>
+  <syscall name="setpgid" number="57"/>
+  <syscall name="ulimit" number="58"/>
+  <syscall name="oldolduname" number="59"/>
+  <syscall name="umask" number="60"/>
+  <syscall name="chroot" number="61" groups="file"/>
+  <syscall name="ustat" number="62"/>
+  <syscall name="dup2" number="63" groups="descriptor"/>
+  <syscall name="getppid" number="64"/>
+  <syscall name="getpgrp" number="65"/>
+  <syscall name="setsid" number="66"/>
+  <syscall name="sigaction" number="67" groups="signal"/>
+  <syscall name="sgetmask" number="68" groups="signal"/>
+  <syscall name="ssetmask" number="69" groups="signal"/>
+  <syscall name="setreuid" number="70"/>
+  <syscall name="setregid" number="71"/>
+  <syscall name="sigsuspend" number="72" groups="signal"/>
+  <syscall name="sigpending" number="73" groups="signal"/>
+  <syscall name="sethostname" number="74"/>
+  <syscall name="setrlimit" number="75"/>
+  <syscall name="getrlimit" number="76"/>
+  <syscall name="getrusage" number="77"/>
+  <syscall name="gettimeofday" number="78"/>
+  <syscall name="settimeofday" number="79"/>
+  <syscall name="getgroups" number="80"/>
+  <syscall name="setgroups" number="81"/>
+  <syscall name="select" number="82" groups="descriptor"/>
+  <syscall name="symlink" number="83" groups="file"/>
+  <syscall name="oldlstat" number="84" groups="file"/>
+  <syscall name="readlink" number="85" groups="file"/>
+  <syscall name="uselib" number="86" groups="file"/>
+  <syscall name="swapon" number="87" groups="file"/>
+  <syscall name="reboot" number="88"/>
+  <syscall name="readdir" number="89" groups="descriptor"/>
+  <syscall name="mmap" number="90" groups="descriptor,memory"/>
+  <syscall name="munmap" number="91" groups="memory"/>
+  <syscall name="truncate" number="92" groups="file"/>
+  <syscall name="ftruncate" number="93" groups="descriptor"/>
+  <syscall name="fchmod" number="94" groups="descriptor"/>
+  <syscall name="fchown" number="95" groups="descriptor"/>
+  <syscall name="getpriority" number="96"/>
+  <syscall name="setpriority" number="97"/>
+  <syscall name="profil" number="98"/>
+  <syscall name="statfs" number="99" groups="file"/>
+  <syscall name="fstatfs" number="100" groups="descriptor"/>
+  <syscall name="ioperm" number="101"/>
+  <syscall name="socketcall" number="102" groups="descriptor"/>
+  <syscall name="syslog" number="103"/>
+  <syscall name="setitimer" number="104"/>
+  <syscall name="getitimer" number="105"/>
+  <syscall name="stat" number="106" groups="file"/>
+  <syscall name="lstat" number="107" groups="file"/>
+  <syscall name="fstat" number="108" groups="descriptor"/>
+  <syscall name="olduname" number="109"/>
+  <syscall name="iopl" number="110"/>
+  <syscall name="vhangup" number="111"/>
+  <syscall name="idle" number="112"/>
+  <syscall name="vm86" number="113"/>
+  <syscall name="wait4" number="114" groups="process"/>
+  <syscall name="swapoff" number="115" groups="file"/>
+  <syscall name="sysinfo" number="116"/>
+  <syscall name="ipc" number="117" groups="ipc"/>
+  <syscall name="fsync" number="118" groups="descriptor"/>
+  <syscall name="sigreturn" number="119" groups="signal"/>
+  <syscall name="clone" number="120" groups="process"/>
+  <syscall name="setdomainname" number="121"/>
+  <syscall name="uname" number="122"/>
+  <syscall name="modify_ldt" number="123"/>
+  <syscall name="adjtimex" number="124"/>
+  <syscall name="mprotect" number="125" groups="memory"/>
+  <syscall name="sigprocmask" number="126" groups="signal"/>
+  <syscall name="create_module" number="127"/>
+  <syscall name="init_module" number="128"/>
+  <syscall name="delete_module" number="129"/>
+  <syscall name="get_kernel_syms" number="130"/>
+  <syscall name="quotactl" number="131" groups="file"/>
+  <syscall name="getpgid" number="132"/>
+  <syscall name="fchdir" number="133" groups="descriptor"/>
+  <syscall name="bdflush" number="134"/>
+  <syscall name="sysfs" number="135"/>
+  <syscall name="personality" number="136"/>
+  <syscall name="afs_syscall" number="137"/>
+  <syscall name="setfsuid" number="138"/>
+  <syscall name="setfsgid" number="139"/>
+  <syscall name="_llseek" number="140" groups="descriptor"/>
+  <syscall name="getdents" number="141" groups="descriptor"/>
+  <syscall name="_newselect" number="142" groups="descriptor"/>
+  <syscall name="flock" number="143" groups="descriptor"/>
+  <syscall name="msync" number="144" groups="memory"/>
+  <syscall name="readv" number="145" groups="descriptor"/>
+  <syscall name="writev" number="146" groups="descriptor"/>
+  <syscall name="getsid" number="147"/>
+  <syscall name="fdatasync" number="148" groups="descriptor"/>
+  <syscall name="_sysctl" number="149"/>
+  <syscall name="mlock" number="150" groups="memory"/>
+  <syscall name="munlock" number="151" groups="memory"/>
+  <syscall name="mlockall" number="152" groups="memory"/>
+  <syscall name="munlockall" number="153" groups="memory"/>
+  <syscall name="sched_setparam" number="154"/>
+  <syscall name="sched_getparam" number="155"/>
+  <syscall name="sched_setscheduler" number="156"/>
+  <syscall name="sched_getscheduler" number="157"/>
+  <syscall name="sched_yield" number="158"/>
+  <syscall name="sched_get_priority_max" number="159"/>
+  <syscall name="sched_get_priority_min" number="160"/>
+  <syscall name="sched_rr_get_interval" number="161"/>
+  <syscall name="nanosleep" number="162"/>
+  <syscall name="mremap" number="163" groups="memory"/>
+  <syscall name="setresuid" number="164"/>
+  <syscall name="getresuid" number="165"/>
+  <syscall name="query_module" number="166"/>
+  <syscall name="poll" number="167" groups="descriptor"/>
+  <syscall name="nfsservctl" number="168"/>
+  <syscall name="setresgid" number="169"/>
+  <syscall name="getresgid" number="170"/>
+  <syscall name="prctl" number="171"/>
+  <syscall name="rt_sigreturn" number="172" groups="signal"/>
+  <syscall name="rt_sigaction" number="173" groups="signal"/>
+  <syscall name="rt_sigprocmask" number="174" groups="signal"/>
+  <syscall name="rt_sigpending" number="175" groups="signal"/>
+  <syscall name="rt_sigtimedwait" number="176" groups="signal"/>
+  <syscall name="rt_sigqueueinfo" number="177" groups="signal"/>
+  <syscall name="rt_sigsuspend" number="178" groups="signal"/>
+  <syscall name="pread64" number="179" groups="descriptor"/>
+  <syscall name="pwrite64" number="180" groups="descriptor"/>
+  <syscall name="chown" number="181" groups="file"/>
+  <syscall name="getcwd" number="182" groups="file"/>
+  <syscall name="capget" number="183"/>
+  <syscall name="capset" number="184"/>
+  <syscall name="sigaltstack" number="185" groups="signal"/>
+  <syscall name="sendfile" number="186" groups="descriptor,network"/>
+  <syscall name="getpmsg" number="187"/>
+  <syscall name="putpmsg" number="188"/>
+  <syscall name="vfork" number="189" groups="process"/>
+  <syscall name="ugetrlimit" number="190"/>
+  <syscall name="readahead" number="191" groups="descriptor"/>
+  <syscall name="pciconfig_read" number="198"/>
+  <syscall name="pciconfig_write" number="199"/>
+  <syscall name="pciconfig_iobase" number="200"/>
+  <syscall name="multiplexer" number="201"/>
+  <syscall name="getdents64" number="202" groups="descriptor"/>
+  <syscall name="pivot_root" number="203" groups="file"/>
+  <syscall name="madvise" number="205" groups="memory"/>
+  <syscall name="mincore" number="206" groups="memory"/>
+  <syscall name="gettid" number="207"/>
+  <syscall name="tkill" number="208" groups="signal"/>
+  <syscall name="setxattr" number="209" groups="file"/>
+  <syscall name="lsetxattr" number="210" groups="file"/>
+  <syscall name="fsetxattr" number="211" groups="descriptor"/>
+  <syscall name="getxattr" number="212" groups="file"/>
+  <syscall name="lgetxattr" number="213" groups="file"/>
+  <syscall name="fgetxattr" number="214" groups="descriptor"/>
+  <syscall name="listxattr" number="215" groups="file"/>
+  <syscall name="llistxattr" number="216" groups="file"/>
+  <syscall name="flistxattr" number="217" groups="descriptor"/>
+  <syscall name="removexattr" number="218" groups="file"/>
+  <syscall name="lremovexattr" number="219" groups="file"/>
+  <syscall name="fremovexattr" number="220" groups="descriptor"/>
+  <syscall name="futex" number="221"/>
+  <syscall name="sched_setaffinity" number="222"/>
+  <syscall name="sched_getaffinity" number="223"/>
+  <syscall name="tuxcall" number="225"/>
+  <syscall name="io_setup" number="227"/>
+  <syscall name="io_destroy" number="228"/>
+  <syscall name="io_getevents" number="229"/>
+  <syscall name="io_submit" number="230"/>
+  <syscall name="io_cancel" number="231"/>
+  <syscall name="set_tid_address" number="232"/>
+  <syscall name="fadvise64" number="233" groups="descriptor"/>
+  <syscall name="exit_group" number="234" groups="process"/>
+  <syscall name="lookup_dcookie" number="235"/>
+  <syscall name="epoll_create" number="236" groups="descriptor"/>
+  <syscall name="epoll_ctl" number="237" groups="descriptor"/>
+  <syscall name="epoll_wait" number="238" groups="descriptor"/>
+  <syscall name="remap_file_pages" number="239" groups="memory"/>
+  <syscall name="timer_create" number="240"/>
+  <syscall name="timer_settime" number="241"/>
+  <syscall name="timer_gettime" number="242"/>
+  <syscall name="timer_getoverrun" number="243"/>
+  <syscall name="timer_delete" number="244"/>
+  <syscall name="clock_settime" number="245"/>
+  <syscall name="clock_gettime" number="246"/>
+  <syscall name="clock_getres" number="247"/>
+  <syscall name="clock_nanosleep" number="248"/>
+  <syscall name="swapcontext" number="249"/>
+  <syscall name="tgkill" number="250" groups="signal"/>
+  <syscall name="utimes" number="251" groups="file"/>
+  <syscall name="statfs64" number="252" groups="file"/>
+  <syscall name="fstatfs64" number="253" groups="descriptor"/>
+  <syscall name="rtas" number="255"/>
+  <syscall name="sys_debug_setcontext" number="256"/>
+  <syscall name="mbind" number="259" groups="memory"/>
+  <syscall name="get_mempolicy" number="260" groups="memory"/>
+  <syscall name="set_mempolicy" number="261" groups="memory"/>
+  <syscall name="mq_open" number="262"/>
+  <syscall name="mq_unlink" number="263"/>
+  <syscall name="mq_timedsend" number="264"/>
+  <syscall name="mq_timedreceive" number="265"/>
+  <syscall name="mq_notify" number="266"/>
+  <syscall name="mq_getsetattr" number="267"/>
+  <syscall name="kexec_load" number="268"/>
+  <syscall name="add_key" number="269"/>
+  <syscall name="request_key" number="270"/>
+  <syscall name="keyctl" number="271"/>
+  <syscall name="waitid" number="272" groups="process"/>
+  <syscall name="ioprio_set" number="273"/>
+  <syscall name="ioprio_get" number="274"/>
+  <syscall name="inotify_init" number="275" groups="descriptor"/>
+  <syscall name="inotify_add_watch" number="276" groups="descriptor"/>
+  <syscall name="inotify_rm_watch" number="277" groups="descriptor"/>
+  <syscall name="spu_run" number="278"/>
+  <syscall name="spu_create" number="279"/>
+  <syscall name="pselect6" number="280" groups="descriptor"/>
+  <syscall name="ppoll" number="281" groups="descriptor"/>
+  <syscall name="unshare" number="282" groups="process"/>
+  <syscall name="unlinkat" number="286" groups="descriptor,file"/>
+  <syscall name="renameat" number="287" groups="descriptor,file"/>
+  <syscall name="linkat" number="288" groups="descriptor,file"/>
+  <syscall name="symlinkat" number="289" groups="descriptor,file"/>
+  <syscall name="readlinkat" number="290" groups="descriptor,file"/>
+  <syscall name="fchmodat" number="291" groups="descriptor,file"/>
+  <syscall name="faccessat" number="292" groups="descriptor,file"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/s390-linux.xml b/share/gdb/syscalls/s390-linux.xml
new file mode 100644
index 0000000..4a45f06
--- /dev/null
+++ b/share/gdb/syscalls/s390-linux.xml
@@ -0,0 +1,364 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+<!-- This file was generated using the following file:
+
+     /usr/include/asm/unistd.h
+
+     The file mentioned above belongs to the Linux Kernel.  -->
+<syscalls_info>
+  <syscall name="exit" number="1" groups="process"/>
+  <syscall name="fork" number="2" groups="process"/>
+  <syscall name="read" number="3" groups="descriptor"/>
+  <syscall name="write" number="4" groups="descriptor"/>
+  <syscall name="open" number="5" groups="descriptor,file"/>
+  <syscall name="close" number="6" groups="descriptor"/>
+  <syscall name="restart_syscall" number="7"/>
+  <syscall name="creat" number="8" groups="descriptor,file"/>
+  <syscall name="link" number="9" groups="file"/>
+  <syscall name="unlink" number="10" groups="file"/>
+  <syscall name="execve" number="11" groups="file,process"/>
+  <syscall name="chdir" number="12" groups="file"/>
+  <syscall name="time" number="13"/>
+  <syscall name="mknod" number="14" groups="file"/>
+  <syscall name="chmod" number="15" groups="file"/>
+  <syscall name="lchown" number="16" groups="file"/>
+  <syscall name="lseek" number="19" groups="descriptor"/>
+  <syscall name="getpid" number="20"/>
+  <syscall name="mount" number="21" groups="file"/>
+  <syscall name="umount" number="22" groups="file"/>
+  <syscall name="setuid" number="23"/>
+  <syscall name="getuid" number="24"/>
+  <syscall name="stime" number="25"/>
+  <syscall name="ptrace" number="26"/>
+  <syscall name="alarm" number="27"/>
+  <syscall name="pause" number="29" groups="signal"/>
+  <syscall name="utime" number="30" groups="file"/>
+  <syscall name="access" number="33" groups="file"/>
+  <syscall name="nice" number="34"/>
+  <syscall name="sync" number="36"/>
+  <syscall name="kill" number="37" groups="signal"/>
+  <syscall name="rename" number="38" groups="file"/>
+  <syscall name="mkdir" number="39" groups="file"/>
+  <syscall name="rmdir" number="40" groups="file"/>
+  <syscall name="dup" number="41" groups="descriptor"/>
+  <syscall name="pipe" number="42" groups="descriptor"/>
+  <syscall name="times" number="43"/>
+  <syscall name="brk" number="45" groups="memory"/>
+  <syscall name="setgid" number="46"/>
+  <syscall name="getgid" number="47"/>
+  <syscall name="signal" number="48" groups="signal"/>
+  <syscall name="geteuid" number="49"/>
+  <syscall name="getegid" number="50"/>
+  <syscall name="acct" number="51" groups="file"/>
+  <syscall name="umount2" number="52" groups="file"/>
+  <syscall name="ioctl" number="54" groups="descriptor"/>
+  <syscall name="fcntl" number="55" groups="descriptor"/>
+  <syscall name="setpgid" number="57"/>
+  <syscall name="umask" number="60"/>
+  <syscall name="chroot" number="61" groups="file"/>
+  <syscall name="ustat" number="62"/>
+  <syscall name="dup2" number="63" groups="descriptor"/>
+  <syscall name="getppid" number="64"/>
+  <syscall name="getpgrp" number="65"/>
+  <syscall name="setsid" number="66"/>
+  <syscall name="sigaction" number="67" groups="signal"/>
+  <syscall name="setreuid" number="70"/>
+  <syscall name="setregid" number="71"/>
+  <syscall name="sigsuspend" number="72" groups="signal"/>
+  <syscall name="sigpending" number="73" groups="signal"/>
+  <syscall name="sethostname" number="74"/>
+  <syscall name="setrlimit" number="75"/>
+  <syscall name="getrlimit" number="76"/>
+  <syscall name="getrusage" number="77"/>
+  <syscall name="gettimeofday" number="78"/>
+  <syscall name="settimeofday" number="79"/>
+  <syscall name="getgroups" number="80"/>
+  <syscall name="setgroups" number="81"/>
+  <syscall name="symlink" number="83" groups="file"/>
+  <syscall name="readlink" number="85" groups="file"/>
+  <syscall name="uselib" number="86" groups="file"/>
+  <syscall name="swapon" number="87" groups="file"/>
+  <syscall name="reboot" number="88"/>
+  <syscall name="readdir" number="89" groups="descriptor"/>
+  <syscall name="mmap" number="90" groups="descriptor,memory"/>
+  <syscall name="munmap" number="91" groups="memory"/>
+  <syscall name="truncate" number="92" groups="file"/>
+  <syscall name="ftruncate" number="93" groups="descriptor"/>
+  <syscall name="fchmod" number="94" groups="descriptor"/>
+  <syscall name="fchown" number="95" groups="descriptor"/>
+  <syscall name="getpriority" number="96"/>
+  <syscall name="setpriority" number="97"/>
+  <syscall name="statfs" number="99" groups="file"/>
+  <syscall name="fstatfs" number="100" groups="descriptor"/>
+  <syscall name="ioperm" number="101"/>
+  <syscall name="socketcall" number="102" groups="descriptor"/>
+  <syscall name="syslog" number="103"/>
+  <syscall name="setitimer" number="104"/>
+  <syscall name="getitimer" number="105"/>
+  <syscall name="stat" number="106" groups="file"/>
+  <syscall name="lstat" number="107" groups="file"/>
+  <syscall name="fstat" number="108" groups="descriptor"/>
+  <syscall name="lookup_dcookie" number="110"/>
+  <syscall name="vhangup" number="111"/>
+  <syscall name="idle" number="112"/>
+  <syscall name="wait4" number="114" groups="process"/>
+  <syscall name="swapoff" number="115" groups="file"/>
+  <syscall name="sysinfo" number="116"/>
+  <syscall name="ipc" number="117" groups="ipc"/>
+  <syscall name="fsync" number="118" groups="descriptor"/>
+  <syscall name="sigreturn" number="119" groups="signal"/>
+  <syscall name="clone" number="120" groups="process"/>
+  <syscall name="setdomainname" number="121"/>
+  <syscall name="uname" number="122"/>
+  <syscall name="adjtimex" number="124"/>
+  <syscall name="mprotect" number="125" groups="memory"/>
+  <syscall name="sigprocmask" number="126" groups="signal"/>
+  <syscall name="create_module" number="127"/>
+  <syscall name="init_module" number="128"/>
+  <syscall name="delete_module" number="129"/>
+  <syscall name="get_kernel_syms" number="130"/>
+  <syscall name="quotactl" number="131" groups="file"/>
+  <syscall name="getpgid" number="132"/>
+  <syscall name="fchdir" number="133" groups="descriptor"/>
+  <syscall name="bdflush" number="134"/>
+  <syscall name="sysfs" number="135"/>
+  <syscall name="personality" number="136"/>
+  <syscall name="afs_syscall" number="137"/>
+  <syscall name="setfsuid" number="138"/>
+  <syscall name="setfsgid" number="139"/>
+  <syscall name="_llseek" number="140" groups="descriptor"/>
+  <syscall name="getdents" number="141" groups="descriptor"/>
+  <syscall name="_newselect" number="142" groups="descriptor"/>
+  <syscall name="flock" number="143" groups="descriptor"/>
+  <syscall name="msync" number="144" groups="memory"/>
+  <syscall name="readv" number="145" groups="descriptor"/>
+  <syscall name="writev" number="146" groups="descriptor"/>
+  <syscall name="getsid" number="147"/>
+  <syscall name="fdatasync" number="148" groups="descriptor"/>
+  <syscall name="_sysctl" number="149"/>
+  <syscall name="mlock" number="150" groups="memory"/>
+  <syscall name="munlock" number="151" groups="memory"/>
+  <syscall name="mlockall" number="152" groups="memory"/>
+  <syscall name="munlockall" number="153" groups="memory"/>
+  <syscall name="sched_setparam" number="154"/>
+  <syscall name="sched_getparam" number="155"/>
+  <syscall name="sched_setscheduler" number="156"/>
+  <syscall name="sched_getscheduler" number="157"/>
+  <syscall name="sched_yield" number="158"/>
+  <syscall name="sched_get_priority_max" number="159"/>
+  <syscall name="sched_get_priority_min" number="160"/>
+  <syscall name="sched_rr_get_interval" number="161"/>
+  <syscall name="nanosleep" number="162"/>
+  <syscall name="mremap" number="163" groups="memory"/>
+  <syscall name="setresuid" number="164"/>
+  <syscall name="getresuid" number="165"/>
+  <syscall name="query_module" number="167"/>
+  <syscall name="poll" number="168" groups="descriptor"/>
+  <syscall name="nfsservctl" number="169"/>
+  <syscall name="setresgid" number="170"/>
+  <syscall name="getresgid" number="171"/>
+  <syscall name="prctl" number="172"/>
+  <syscall name="rt_sigreturn" number="173" groups="signal"/>
+  <syscall name="rt_sigaction" number="174" groups="signal"/>
+  <syscall name="rt_sigprocmask" number="175" groups="signal"/>
+  <syscall name="rt_sigpending" number="176" groups="signal"/>
+  <syscall name="rt_sigtimedwait" number="177" groups="signal"/>
+  <syscall name="rt_sigqueueinfo" number="178" groups="signal"/>
+  <syscall name="rt_sigsuspend" number="179" groups="signal"/>
+  <syscall name="pread64" number="180" groups="descriptor"/>
+  <syscall name="pwrite64" number="181" groups="descriptor"/>
+  <syscall name="chown" number="182" groups="file"/>
+  <syscall name="getcwd" number="183" groups="file"/>
+  <syscall name="capget" number="184"/>
+  <syscall name="capset" number="185"/>
+  <syscall name="sigaltstack" number="186" groups="signal"/>
+  <syscall name="sendfile" number="187" groups="descriptor,network"/>
+  <syscall name="getpmsg" number="188"/>
+  <syscall name="putpmsg" number="189"/>
+  <syscall name="vfork" number="190" groups="process"/>
+  <syscall name="ugetrlimit" number="191"/>
+  <syscall name="mmap2" number="192" groups="descriptor,memory"/>
+  <syscall name="truncate64" number="193" groups="file"/>
+  <syscall name="ftruncate64" number="194" groups="descriptor"/>
+  <syscall name="stat64" number="195" groups="file"/>
+  <syscall name="lstat64" number="196" groups="file"/>
+  <syscall name="fstat64" number="197" groups="descriptor"/>
+  <syscall name="lchown32" number="198" groups="file"/>
+  <syscall name="getuid32" number="199"/>
+  <syscall name="getgid32" number="200"/>
+  <syscall name="geteuid32" number="201"/>
+  <syscall name="getegid32" number="202"/>
+  <syscall name="setreuid32" number="203"/>
+  <syscall name="setregid32" number="204"/>
+  <syscall name="getgroups32" number="205"/>
+  <syscall name="setgroups32" number="206"/>
+  <syscall name="fchown32" number="207" groups="descriptor"/>
+  <syscall name="setresuid32" number="208"/>
+  <syscall name="getresuid32" number="209"/>
+  <syscall name="setresgid32" number="210"/>
+  <syscall name="getresgid32" number="211"/>
+  <syscall name="chown32" number="212" groups="file"/>
+  <syscall name="setuid32" number="213"/>
+  <syscall name="setgid32" number="214"/>
+  <syscall name="setfsuid32" number="215"/>
+  <syscall name="setfsgid32" number="216"/>
+  <syscall name="pivot_root" number="217" groups="file"/>
+  <syscall name="mincore" number="218" groups="memory"/>
+  <syscall name="madvise" number="219" groups="memory"/>
+  <syscall name="getdents64" number="220" groups="descriptor"/>
+  <syscall name="fcntl64" number="221" groups="descriptor"/>
+  <syscall name="readahead" number="222" groups="descriptor"/>
+  <syscall name="sendfile64" number="223" groups="descriptor,network"/>
+  <syscall name="setxattr" number="224" groups="file"/>
+  <syscall name="lsetxattr" number="225" groups="file"/>
+  <syscall name="fsetxattr" number="226" groups="descriptor"/>
+  <syscall name="getxattr" number="227" groups="file"/>
+  <syscall name="lgetxattr" number="228" groups="file"/>
+  <syscall name="fgetxattr" number="229" groups="descriptor"/>
+  <syscall name="listxattr" number="230" groups="file"/>
+  <syscall name="llistxattr" number="231" groups="file"/>
+  <syscall name="flistxattr" number="232" groups="descriptor"/>
+  <syscall name="removexattr" number="233" groups="file"/>
+  <syscall name="lremovexattr" number="234" groups="file"/>
+  <syscall name="fremovexattr" number="235" groups="descriptor"/>
+  <syscall name="gettid" number="236"/>
+  <syscall name="tkill" number="237" groups="signal"/>
+  <syscall name="futex" number="238"/>
+  <syscall name="sched_setaffinity" number="239"/>
+  <syscall name="sched_getaffinity" number="240"/>
+  <syscall name="tgkill" number="241" groups="signal"/>
+  <syscall name="io_setup" number="243"/>
+  <syscall name="io_destroy" number="244"/>
+  <syscall name="io_getevents" number="245"/>
+  <syscall name="io_submit" number="246"/>
+  <syscall name="io_cancel" number="247"/>
+  <syscall name="exit_group" number="248" groups="process"/>
+  <syscall name="epoll_create" number="249" groups="descriptor"/>
+  <syscall name="epoll_ctl" number="250" groups="descriptor"/>
+  <syscall name="epoll_wait" number="251" groups="descriptor"/>
+  <syscall name="set_tid_address" number="252"/>
+  <syscall name="fadvise64" number="253" groups="descriptor"/>
+  <syscall name="timer_create" number="254"/>
+  <syscall name="timer_settime" number="255"/>
+  <syscall name="timer_gettime" number="256"/>
+  <syscall name="timer_getoverrun" number="257"/>
+  <syscall name="timer_delete" number="258"/>
+  <syscall name="clock_settime" number="259"/>
+  <syscall name="clock_gettime" number="260"/>
+  <syscall name="clock_getres" number="261"/>
+  <syscall name="clock_nanosleep" number="262"/>
+  <syscall name="fadvise64_64" number="264" groups="descriptor"/>
+  <syscall name="statfs64" number="265" groups="file"/>
+  <syscall name="fstatfs64" number="266" groups="descriptor"/>
+  <syscall name="remap_file_pages" number="267" groups="memory"/>
+  <syscall name="mbind" number="268" groups="memory"/>
+  <syscall name="get_mempolicy" number="269" groups="memory"/>
+  <syscall name="set_mempolicy" number="270" groups="memory"/>
+  <syscall name="mq_open" number="271"/>
+  <syscall name="mq_unlink" number="272"/>
+  <syscall name="mq_timedsend" number="273"/>
+  <syscall name="mq_timedreceive" number="274"/>
+  <syscall name="mq_notify" number="275"/>
+  <syscall name="mq_getsetattr" number="276"/>
+  <syscall name="kexec_load" number="277"/>
+  <syscall name="add_key" number="278"/>
+  <syscall name="request_key" number="279"/>
+  <syscall name="keyctl" number="280"/>
+  <syscall name="waitid" number="281" groups="process"/>
+  <syscall name="ioprio_set" number="282"/>
+  <syscall name="ioprio_get" number="283"/>
+  <syscall name="inotify_init" number="284" groups="descriptor"/>
+  <syscall name="inotify_add_watch" number="285" groups="descriptor"/>
+  <syscall name="inotify_rm_watch" number="286" groups="descriptor"/>
+  <syscall name="migrate_pages" number="287" groups="memory"/>
+  <syscall name="openat" number="288" groups="descriptor,file"/>
+  <syscall name="mkdirat" number="289" groups="descriptor,file"/>
+  <syscall name="mknodat" number="290" groups="descriptor,file"/>
+  <syscall name="fchownat" number="291" groups="descriptor,file"/>
+  <syscall name="futimesat" number="292" groups="descriptor,file"/>
+  <syscall name="fstatat64" number="293" groups="descriptor,file"/>
+  <syscall name="unlinkat" number="294" groups="descriptor,file"/>
+  <syscall name="renameat" number="295" groups="descriptor,file"/>
+  <syscall name="linkat" number="296" groups="descriptor,file"/>
+  <syscall name="symlinkat" number="297" groups="descriptor,file"/>
+  <syscall name="readlinkat" number="298" groups="descriptor,file"/>
+  <syscall name="fchmodat" number="299" groups="descriptor,file"/>
+  <syscall name="faccessat" number="300" groups="descriptor,file"/>
+  <syscall name="pselect6" number="301" groups="descriptor"/>
+  <syscall name="ppoll" number="302" groups="descriptor"/>
+  <syscall name="unshare" number="303" groups="process"/>
+  <syscall name="set_robust_list" number="304"/>
+  <syscall name="get_robust_list" number="305"/>
+  <syscall name="splice" number="306" groups="descriptor"/>
+  <syscall name="sync_file_range" number="307" groups="descriptor"/>
+  <syscall name="tee" number="308" groups="descriptor"/>
+  <syscall name="vmsplice" number="309" groups="descriptor"/>
+  <syscall name="move_pages" number="310" groups="memory"/>
+  <syscall name="getcpu" number="311"/>
+  <syscall name="epoll_pwait" number="312" groups="descriptor"/>
+  <syscall name="utimes" number="313" groups="file"/>
+  <syscall name="fallocate" number="314" groups="descriptor"/>
+  <syscall name="utimensat" number="315" groups="descriptor,file"/>
+  <syscall name="signalfd" number="316" groups="descriptor,signal"/>
+  <syscall name="timerfd" number="317" groups="descriptor"/>
+  <syscall name="eventfd" number="318" groups="descriptor"/>
+  <syscall name="timerfd_create" number="319" groups="descriptor"/>
+  <syscall name="timerfd_settime" number="320" groups="descriptor"/>
+  <syscall name="timerfd_gettime" number="321" groups="descriptor"/>
+  <syscall name="signalfd4" number="322" groups="descriptor,signal"/>
+  <syscall name="eventfd2" number="323" groups="descriptor"/>
+  <syscall name="inotify_init1" number="324" groups="descriptor"/>
+  <syscall name="pipe2" number="325" groups="descriptor"/>
+  <syscall name="dup3" number="326" groups="descriptor"/>
+  <syscall name="epoll_create1" number="327" groups="descriptor"/>
+  <syscall name="rt_tgsigqueueinfo" number="330" groups="process,signal"/>
+  <syscall name="perf_event_open" number="331" groups="descriptor"/>
+  <syscall name="fanotify_init" number="332" groups="descriptor"/>
+  <syscall name="fanotify_mark" number="333" groups="descriptor,file"/>
+  <syscall name="prlimit64" number="334"/>
+  <syscall name="name_to_handle_at" number="335" groups="descriptor,file"/>
+  <syscall name="open_by_handle_at" number="336" groups="descriptor"/>
+  <syscall name="clock_adjtime" number="337"/>
+  <syscall name="syncfs" number="338" groups="descriptor"/>
+  <syscall name="setns" number="339" groups="descriptor"/>
+  <syscall name="process_vm_readv" number="340"/>
+  <syscall name="process_vm_writev" number="341"/>
+  <syscall name="s390_runtime_instr" number="342"/>
+  <syscall name="kcmp" number="343"/>
+  <syscall name="finit_module" number="344" groups="descriptor"/>
+  <syscall name="sched_setattr" number="345"/>
+  <syscall name="sched_getattr" number="346"/>
+  <syscall name="renameat2" number="347"/>
+  <syscall name="seccomp" number="348"/>
+  <syscall name="getrandom" number="349"/>
+  <syscall name="memfd_create" number="350"/>
+  <syscall name="bpf" number="351"/>
+  <syscall name="s390_pci_mmio_write" number="352"/>
+  <syscall name="s390_pci_mmio_read" number="353"/>
+  <syscall name="execveat" number="354"/>
+  <syscall name="userfaultfd" number="355"/>
+  <syscall name="membarrier" number="356"/>
+  <syscall name="recvmmsg" number="357" groups="network"/>
+  <syscall name="sendmmsg" number="358" groups="network"/>
+  <syscall name="socket" number="359" groups="network"/>
+  <syscall name="socketpair" number="360" groups="network"/>
+  <syscall name="bind" number="361" groups="network"/>
+  <syscall name="connect" number="362" groups="network"/>
+  <syscall name="listen" number="363" groups="network"/>
+  <syscall name="accept4" number="364" groups="network"/>
+  <syscall name="getsockopt" number="365" groups="network"/>
+  <syscall name="setsockopt" number="366" groups="network"/>
+  <syscall name="getsockname" number="367" groups="network"/>
+  <syscall name="getpeername" number="368" groups="network"/>
+  <syscall name="sendto" number="369" groups="network"/>
+  <syscall name="sendmsg" number="370" groups="network"/>
+  <syscall name="recvfrom" number="371" groups="network"/>
+  <syscall name="recvmsg" number="372" groups="network"/>
+  <syscall name="shutdown" number="373" groups="network"/>
+  <syscall name="mlock2" number="374"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/s390x-linux.xml b/share/gdb/syscalls/s390x-linux.xml
new file mode 100644
index 0000000..50956e1
--- /dev/null
+++ b/share/gdb/syscalls/s390x-linux.xml
@@ -0,0 +1,331 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2009-2019 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+<!-- This file was generated using the following file:
+
+     /usr/include/asm/unistd.h
+
+     The file mentioned above belongs to the Linux Kernel.  -->
+<syscalls_info>
+  <syscall name="exit" number="1" groups="process"/>
+  <syscall name="fork" number="2" groups="process"/>
+  <syscall name="read" number="3" groups="descriptor"/>
+  <syscall name="write" number="4" groups="descriptor"/>
+  <syscall name="open" number="5" groups="descriptor,file"/>
+  <syscall name="close" number="6" groups="descriptor"/>
+  <syscall name="restart_syscall" number="7"/>
+  <syscall name="creat" number="8" groups="descriptor,file"/>
+  <syscall name="link" number="9" groups="file"/>
+  <syscall name="unlink" number="10" groups="file"/>
+  <syscall name="execve" number="11" groups="file,process"/>
+  <syscall name="chdir" number="12" groups="file"/>
+  <syscall name="mknod" number="14" groups="file"/>
+  <syscall name="chmod" number="15" groups="file"/>
+  <syscall name="lseek" number="19" groups="descriptor"/>
+  <syscall name="getpid" number="20"/>
+  <syscall name="mount" number="21" groups="file"/>
+  <syscall name="umount" number="22" groups="file"/>
+  <syscall name="ptrace" number="26"/>
+  <syscall name="alarm" number="27"/>
+  <syscall name="pause" number="29" groups="signal"/>
+  <syscall name="utime" number="30" groups="file"/>
+  <syscall name="access" number="33" groups="file"/>
+  <syscall name="nice" number="34"/>
+  <syscall name="sync" number="36"/>
+  <syscall name="kill" number="37" groups="signal"/>
+  <syscall name="rename" number="38" groups="file"/>
+  <syscall name="mkdir" number="39" groups="file"/>
+  <syscall name="rmdir" number="40" groups="file"/>
+  <syscall name="dup" number="41" groups="descriptor"/>
+  <syscall name="pipe" number="42" groups="descriptor"/>
+  <syscall name="times" number="43"/>
+  <syscall name="brk" number="45" groups="memory"/>
+  <syscall name="signal" number="48" groups="signal"/>
+  <syscall name="acct" number="51" groups="file"/>
+  <syscall name="umount2" number="52" groups="file"/>
+  <syscall name="ioctl" number="54" groups="descriptor"/>
+  <syscall name="fcntl" number="55" groups="descriptor"/>
+  <syscall name="setpgid" number="57"/>
+  <syscall name="umask" number="60"/>
+  <syscall name="chroot" number="61" groups="file"/>
+  <syscall name="ustat" number="62"/>
+  <syscall name="dup2" number="63" groups="descriptor"/>
+  <syscall name="getppid" number="64"/>
+  <syscall name="getpgrp" number="65"/>
+  <syscall name="setsid" number="66"/>
+  <syscall name="sigaction" number="67" groups="signal"/>
+  <syscall name="sigsuspend" number="72" groups="signal"/>
+  <syscall name="sigpending" number="73" groups="signal"/>
+  <syscall name="sethostname" number="74"/>
+  <syscall name="setrlimit" number="75"/>
+  <syscall name="getrusage" number="77"/>
+  <syscall name="gettimeofday" number="78"/>
+  <syscall name="settimeofday" number="79"/>
+  <syscall name="symlink" number="83" groups="file"/>
+  <syscall name="readlink" number="85" groups="file"/>
+  <syscall name="uselib" number="86" groups="file"/>
+  <syscall name="swapon" number="87" groups="file"/>
+  <syscall name="reboot" number="88"/>
+  <syscall name="readdir" number="89" groups="descriptor"/>
+  <syscall name="mmap" number="90" groups="descriptor,memory"/>
+  <syscall name="munmap" number="91" groups="memory"/>
+  <syscall name="truncate" number="92" groups="file"/>
+  <syscall name="ftruncate" number="93" groups="descriptor"/>
+  <syscall name="fchmod" number="94" groups="descriptor"/>
+  <syscall name="getpriority" number="96"/>
+  <syscall name="setpriority" number="97"/>
+  <syscall name="statfs" number="99" groups="file"/>
+  <syscall name="fstatfs" number="100" groups="descriptor"/>
+  <syscall name="socketcall" number="102" groups="descriptor"/>
+  <syscall name="syslog" number="103"/>
+  <syscall name="setitimer" number="104"/>
+  <syscall name="getitimer" number="105"/>
+  <syscall name="stat" number="106" groups="file"/>
+  <syscall name="lstat" number="107" groups="file"/>
+  <syscall name="fstat" number="108" groups="descriptor"/>
+  <syscall name="lookup_dcookie" number="110"/>
+  <syscall name="vhangup" number="111"/>
+  <syscall name="idle" number="112"/>
+  <syscall name="wait4" number="114" groups="process"/>
+  <syscall name="swapoff" number="115" groups="file"/>
+  <syscall name="sysinfo" number="116"/>
+  <syscall name="ipc" number="117" groups="ipc"/>
+  <syscall name="fsync" number="118" groups="descriptor"/>
+  <syscall name="sigreturn" number="119" groups="signal"/>
+  <syscall name="clone" number="120" groups="process"/>
+  <syscall name="setdomainname" number="121"/>
+  <syscall name="uname" number="122"/>
+  <syscall name="adjtimex" number="124"/>
+  <syscall name="mprotect" number="125" groups="memory"/>
+  <syscall name="sigprocmask" number="126" groups="signal"/>
+  <syscall name="create_module" number="127"/>
+  <syscall name="init_module" number="128"/>
+  <syscall name="delete_module" number="129"/>
+  <syscall name="get_kernel_syms" number="130"/>
+  <syscall name="quotactl" number="131" groups="file"/>
+  <syscall name="getpgid" number="132"/>
+  <syscall name="fchdir" number="133" groups="descriptor"/>
+  <syscall name="bdflush" number="134"/>
+  <syscall name="sysfs" number="135"/>
+  <syscall name="personality" number="136"/>
+  <syscall name="afs_syscall" number="137"/>
+  <syscall name="getdents" number="141" groups="descriptor"/>
+  <syscall name="select" number="142" groups="descriptor"/>
+  <syscall name="flock" number="143" groups="descriptor"/>
+  <syscall name="msync" number="144" groups="memory"/>
+  <syscall name="readv" number="145" groups="descriptor"/>
+  <syscall name="writev" number="146" groups="descriptor"/>
+  <syscall name="getsid" number="147"/>
+  <syscall name="fdatasync" number="148" groups="descriptor"/>
+  <syscall name="_sysctl" number="149"/>
+  <syscall name="mlock" number="150" groups="memory"/>
+  <syscall name="munlock" number="151" groups="memory"/>
+  <syscall name="mlockall" number="152" groups="memory"/>
+  <syscall name="munlockall" number="153" groups="memory"/>
+  <syscall name="sched_setparam" number="154"/>
+  <syscall name="sched_getparam" number="155"/>
+  <syscall name="sched_setscheduler" number="156"/>
+  <syscall name="sched_getscheduler" number="157"/>
+  <syscall name="sched_yield" number="158"/>
+  <syscall name="sched_get_priority_max" number="159"/>
+  <syscall name="sched_get_priority_min" number="160"/>
+  <syscall name="sched_rr_get_interval" number="161"/>
+  <syscall name="nanosleep" number="162"/>
+  <syscall name="mremap" number="163" groups="memory"/>
+  <syscall name="query_module" number="167"/>
+  <syscall name="poll" number="168" groups="descriptor"/>
+  <syscall name="nfsservctl" number="169"/>
+  <syscall name="prctl" number="172"/>
+  <syscall name="rt_sigreturn" number="173" groups="signal"/>
+  <syscall name="rt_sigaction" number="174" groups="signal"/>
+  <syscall name="rt_sigprocmask" number="175" groups="signal"/>
+  <syscall name="rt_sigpending" number="176" groups="signal"/>
+  <syscall name="rt_sigtimedwait" number="177" groups="signal"/>
+  <syscall name="rt_sigqueueinfo" number="178" groups="signal"/>
+  <syscall name="rt_sigsuspend" number="179" groups="signal"/>
+  <syscall name="pread64" number="180" groups="descriptor"/>
+  <syscall name="pwrite64" number="181" groups="descriptor"/>
+  <syscall name="getcwd" number="183" groups="file"/>
+  <syscall name="capget" number="184"/>
+  <syscall name="capset" number="185"/>
+  <syscall name="sigaltstack" number="186" groups="signal"/>
+  <syscall name="sendfile" number="187" groups="descriptor,network"/>
+  <syscall name="getpmsg" number="188"/>
+  <syscall name="putpmsg" number="189"/>
+  <syscall name="vfork" number="190" groups="process"/>
+  <syscall name="getrlimit" number="191"/>
+  <syscall name="lchown" number="198" groups="file"/>
+  <syscall name="getuid" number="199"/>
+  <syscall name="getgid" number="200"/>
+  <syscall name="geteuid" number="201"/>
+  <syscall name="getegid" number="202"/>
+  <syscall name="setreuid" number="203"/>
+  <syscall name="setregid" number="204"/>
+  <syscall name="getgroups" number="205"/>
+  <syscall name="setgroups" number="206"/>
+  <syscall name="fchown" number="207" groups="descriptor"/>
+  <syscall name="setresuid" number="208"/>
+  <syscall name="getresuid" number="209"/>
+  <syscall name="setresgid" number="210"/>
+  <syscall name="getresgid" number="211"/>
+  <syscall name="chown" number="212" groups="file"/>
+  <syscall name="setuid" number="213"/>
+  <syscall name="setgid" number="214"/>
+  <syscall name="setfsuid" number="215"/>
+  <syscall name="setfsgid" number="216"/>
+  <syscall name="pivot_root" number="217" groups="file"/>
+  <syscall name="mincore" number="218" groups="memory"/>
+  <syscall name="madvise" number="219" groups="memory"/>
+  <syscall name="getdents64" number="220" groups="descriptor"/>
+  <syscall name="readahead" number="222" groups="descriptor"/>
+  <syscall name="setxattr" number="224" groups="file"/>
+  <syscall name="lsetxattr" number="225" groups="file"/>
+  <syscall name="fsetxattr" number="226" groups="descriptor"/>
+  <syscall name="getxattr" number="227" groups="file"/>
+  <syscall name="lgetxattr" number="228" groups="file"/>
+  <syscall name="fgetxattr" number="229" groups="descriptor"/>
+  <syscall name="listxattr" number="230" groups="file"/>
+  <syscall name="llistxattr" number="231" groups="file"/>
+  <syscall name="flistxattr" number="232" groups="descriptor"/>
+  <syscall name="removexattr" number="233" groups="file"/>
+  <syscall name="lremovexattr" number="234" groups="file"/>
+  <syscall name="fremovexattr" number="235" groups="descriptor"/>
+  <syscall name="gettid" number="236"/>
+  <syscall name="tkill" number="237" groups="signal"/>
+  <syscall name="futex" number="238"/>
+  <syscall name="sched_setaffinity" number="239"/>
+  <syscall name="sched_getaffinity" number="240"/>
+  <syscall name="tgkill" number="241" groups="signal"/>
+  <syscall name="io_setup" number="243"/>
+  <syscall name="io_destroy" number="244"/>
+  <syscall name="io_getevents" number="245"/>
+  <syscall name="io_submit" number="246"/>
+  <syscall name="io_cancel" number="247"/>
+  <syscall name="exit_group" number="248" groups="process"/>
+  <syscall name="epoll_create" number="249" groups="descriptor"/>
+  <syscall name="epoll_ctl" number="250" groups="descriptor"/>
+  <syscall name="epoll_wait" number="251" groups="descriptor"/>
+  <syscall name="set_tid_address" number="252"/>
+  <syscall name="fadvise64" number="253" groups="descriptor"/>
+  <syscall name="timer_create" number="254"/>
+  <syscall name="timer_settime" number="255"/>
+  <syscall name="timer_gettime" number="256"/>
+  <syscall name="timer_getoverrun" number="257"/>
+  <syscall name="timer_delete" number="258"/>
+  <syscall name="clock_settime" number="259"/>
+  <syscall name="clock_gettime" number="260"/>
+  <syscall name="clock_getres" number="261"/>
+  <syscall name="clock_nanosleep" number="262"/>
+  <syscall name="statfs64" number="265" groups="file"/>
+  <syscall name="fstatfs64" number="266" groups="descriptor"/>
+  <syscall name="remap_file_pages" number="267" groups="memory"/>
+  <syscall name="mbind" number="268" groups="memory"/>
+  <syscall name="get_mempolicy" number="269" groups="memory"/>
+  <syscall name="set_mempolicy" number="270" groups="memory"/>
+  <syscall name="mq_open" number="271"/>
+  <syscall name="mq_unlink" number="272"/>
+  <syscall name="mq_timedsend" number="273"/>
+  <syscall name="mq_timedreceive" number="274"/>
+  <syscall name="mq_notify" number="275"/>
+  <syscall name="mq_getsetattr" number="276"/>
+  <syscall name="kexec_load" number="277"/>
+  <syscall name="add_key" number="278"/>
+  <syscall name="request_key" number="279"/>
+  <syscall name="keyctl" number="280"/>
+  <syscall name="waitid" number="281" groups="process"/>
+  <syscall name="ioprio_set" number="282"/>
+  <syscall name="ioprio_get" number="283"/>
+  <syscall name="inotify_init" number="284" groups="descriptor"/>
+  <syscall name="inotify_add_watch" number="285" groups="descriptor"/>
+  <syscall name="inotify_rm_watch" number="286" groups="descriptor"/>
+  <syscall name="migrate_pages" number="287" groups="memory"/>
+  <syscall name="openat" number="288" groups="descriptor,file"/>
+  <syscall name="mkdirat" number="289" groups="descriptor,file"/>
+  <syscall name="mknodat" number="290" groups="descriptor,file"/>
+  <syscall name="fchownat" number="291" groups="descriptor,file"/>
+  <syscall name="futimesat" number="292" groups="descriptor,file"/>
+  <syscall name="newfstatat" number="293" groups="descriptor,file"/>
+  <syscall name="unlinkat" number="294" groups="descriptor,file"/>
+  <syscall name="renameat" number="295" groups="descriptor,file"/>
+  <syscall name="linkat" number="296" groups="descriptor,file"/>
+  <syscall name="symlinkat" number="297" groups="descriptor,file"/>
+  <syscall name="readlinkat" number="298" groups="descriptor,file"/>
+  <syscall name="fchmodat" number="299" groups="descriptor,file"/>
+  <syscall name="faccessat" number="300" groups="descriptor,file"/>
+  <syscall name="pselect6" number="301" groups="descriptor"/>
+  <syscall name="ppoll" number="302" groups="descriptor"/>
+  <syscall name="unshare" number="303" groups="process"/>
+  <syscall name="set_robust_list" number="304"/>
+  <syscall name="get_robust_list" number="305"/>
+  <syscall name="splice" number="306" groups="descriptor"/>
+  <syscall name="sync_file_range" number="307" groups="descriptor"/>
+  <syscall name="tee" number="308" groups="descriptor"/>
+  <syscall name="vmsplice" number="309" groups="descriptor"/>
+  <syscall name="move_pages" number="310" groups="memory"/>
+  <syscall name="getcpu" number="311"/>
+  <syscall name="epoll_pwait" number="312" groups="descriptor"/>
+  <syscall name="utimes" number="313" groups="file"/>
+  <syscall name="fallocate" number="314" groups="descriptor"/>
+  <syscall name="utimensat" number="315" groups="descriptor,file"/>
+  <syscall name="signalfd" number="316" groups="descriptor,signal"/>
+  <syscall name="timerfd" number="317" groups="descriptor"/>
+  <syscall name="eventfd" number="318" groups="descriptor"/>
+  <syscall name="timerfd_create" number="319" groups="descriptor"/>
+  <syscall name="timerfd_settime" number="320" groups="descriptor"/>
+  <syscall name="timerfd_gettime" number="321" groups="descriptor"/>
+  <syscall name="signalfd4" number="322" groups="descriptor,signal"/>
+  <syscall name="eventfd2" number="323" groups="descriptor"/>
+  <syscall name="inotify_init1" number="324" groups="descriptor"/>
+  <syscall name="pipe2" number="325" groups="descriptor"/>
+  <syscall name="dup3" number="326" groups="descriptor"/>
+  <syscall name="epoll_create1" number="327" groups="descriptor"/>
+  <syscall name="rt_tgsigqueueinfo" number="330" groups="process,signal"/>
+  <syscall name="perf_event_open" number="331" groups="descriptor"/>
+  <syscall name="fanotify_init" number="332" groups="descriptor"/>
+  <syscall name="fanotify_mark" number="333" groups="descriptor,file"/>
+  <syscall name="prlimit64" number="334"/>
+  <syscall name="name_to_handle_at" number="335" groups="descriptor,file"/>
+  <syscall name="open_by_handle_at" number="336" groups="descriptor"/>
+  <syscall name="clock_adjtime" number="337"/>
+  <syscall name="syncfs" number="338" groups="descriptor"/>
+  <syscall name="setns" number="339" groups="descriptor"/>
+  <syscall name="process_vm_readv" number="340"/>
+  <syscall name="process_vm_writev" number="341"/>
+  <syscall name="s390_runtime_instr" number="342"/>
+  <syscall name="kcmp" number="343"/>
+  <syscall name="finit_module" number="344" groups="descriptor"/>
+  <syscall name="sched_setattr" number="345"/>
+  <syscall name="sched_getattr" number="346"/>
+  <syscall name="renameat2" number="347"/>
+  <syscall name="seccomp" number="348"/>
+  <syscall name="getrandom" number="349"/>
+  <syscall name="memfd_create" number="350"/>
+  <syscall name="bpf" number="351"/>
+  <syscall name="s390_pci_mmio_write" number="352"/>
+  <syscall name="s390_pci_mmio_read" number="353"/>
+  <syscall name="execveat" number="354"/>
+  <syscall name="userfaultfd" number="355"/>
+  <syscall name="membarrier" number="356"/>
+  <syscall name="recvmmsg" number="357" groups="network"/>
+  <syscall name="sendmmsg" number="358" groups="network"/>
+  <syscall name="socket" number="359" groups="network"/>
+  <syscall name="socketpair" number="360" groups="network"/>
+  <syscall name="bind" number="361" groups="network"/>
+  <syscall name="connect" number="362" groups="network"/>
+  <syscall name="listen" number="363" groups="network"/>
+  <syscall name="accept4" number="364" groups="network"/>
+  <syscall name="getsockopt" number="365" groups="network"/>
+  <syscall name="setsockopt" number="366" groups="network"/>
+  <syscall name="getsockname" number="367" groups="network"/>
+  <syscall name="getpeername" number="368" groups="network"/>
+  <syscall name="sendto" number="369" groups="network"/>
+  <syscall name="sendmsg" number="370" groups="network"/>
+  <syscall name="recvfrom" number="371" groups="network"/>
+  <syscall name="recvmsg" number="372" groups="network"/>
+  <syscall name="shutdown" number="373" groups="network"/>
+  <syscall name="mlock2" number="374"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/sparc-linux.xml b/share/gdb/syscalls/sparc-linux.xml
new file mode 100644
index 0000000..9121b4d
--- /dev/null
+++ b/share/gdb/syscalls/sparc-linux.xml
@@ -0,0 +1,341 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2010-2019 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+<!-- This file was generated using the following file:
+     
+     /usr/src/linux/arch/sparc/include/asm/unistd.h
+
+     The file mentioned above belongs to the Linux Kernel.  -->
+<syscalls_info>
+  <syscall name="restart_syscall" number="0"/>
+  <syscall name="exit" number="1" groups="process"/>
+  <syscall name="fork" number="2" groups="process"/>
+  <syscall name="read" number="3" groups="descriptor"/>
+  <syscall name="write" number="4" groups="descriptor"/>
+  <syscall name="open" number="5" groups="descriptor,file"/>
+  <syscall name="close" number="6" groups="descriptor"/>
+  <syscall name="wait4" number="7" groups="process"/>
+  <syscall name="creat" number="8" groups="descriptor,file"/>
+  <syscall name="link" number="9" groups="file"/>
+  <syscall name="unlink" number="10" groups="file"/>
+  <syscall name="execv" number="11" groups="file,process"/>
+  <syscall name="chdir" number="12" groups="file"/>
+  <syscall name="chown" number="13" groups="file"/>
+  <syscall name="mknod" number="14" groups="file"/>
+  <syscall name="chmod" number="15" groups="file"/>
+  <syscall name="lchown" number="16" groups="file"/>
+  <syscall name="brk" number="17" groups="memory"/>
+  <syscall name="perfctr" number="18"/>
+  <syscall name="lseek" number="19" groups="descriptor"/>
+  <syscall name="getpid" number="20"/>
+  <syscall name="capget" number="21"/>
+  <syscall name="capset" number="22"/>
+  <syscall name="setuid" number="23"/>
+  <syscall name="getuid" number="24"/>
+  <syscall name="vmsplice" number="25" groups="descriptor"/>
+  <syscall name="ptrace" number="26"/>
+  <syscall name="alarm" number="27"/>
+  <syscall name="sigaltstack" number="28" groups="signal"/>
+  <syscall name="pause" number="29" groups="signal"/>
+  <syscall name="utime" number="30" groups="file"/>
+  <syscall name="lchown32" number="31" groups="file"/>
+  <syscall name="fchown32" number="32" groups="descriptor"/>
+  <syscall name="access" number="33" groups="file"/>
+  <syscall name="nice" number="34"/>
+  <syscall name="chown32" number="35" groups="file"/>
+  <syscall name="sync" number="36"/>
+  <syscall name="kill" number="37" groups="signal"/>
+  <syscall name="stat" number="38" groups="file"/>
+  <syscall name="sendfile" number="39" groups="descriptor,network"/>
+  <syscall name="lstat" number="40" groups="file"/>
+  <syscall name="dup" number="41" groups="descriptor"/>
+  <syscall name="pipe" number="42" groups="descriptor"/>
+  <syscall name="times" number="43"/>
+  <syscall name="getuid32" number="44"/>
+  <syscall name="umount2" number="45" groups="file"/>
+  <syscall name="setgid" number="46"/>
+  <syscall name="getgid" number="47"/>
+  <syscall name="signal" number="48" groups="signal"/>
+  <syscall name="geteuid" number="49"/>
+  <syscall name="getegid" number="50"/>
+  <syscall name="acct" number="51" groups="file"/>
+  <syscall name="getgid32" number="53"/>
+  <syscall name="ioctl" number="54" groups="descriptor"/>
+  <syscall name="reboot" number="55"/>
+  <syscall name="mmap2" number="56" groups="descriptor,memory"/>
+  <syscall name="symlink" number="57" groups="file"/>
+  <syscall name="readlink" number="58" groups="file"/>
+  <syscall name="execve" number="59" groups="file,process"/>
+  <syscall name="umask" number="60"/>
+  <syscall name="chroot" number="61" groups="file"/>
+  <syscall name="fstat" number="62" groups="descriptor"/>
+  <syscall name="fstat64" number="63" groups="descriptor"/>
+  <syscall name="getpagesize" number="64"/>
+  <syscall name="msync" number="65" groups="memory"/>
+  <syscall name="vfork" number="66" groups="process"/>
+  <syscall name="pread64" number="67" groups="descriptor"/>
+  <syscall name="pwrite64" number="68" groups="descriptor"/>
+  <syscall name="geteuid32" number="69"/>
+  <syscall name="getegid32" number="70"/>
+  <syscall name="mmap" number="71" groups="descriptor,memory"/>
+  <syscall name="setreuid32" number="72"/>
+  <syscall name="munmap" number="73" groups="memory"/>
+  <syscall name="mprotect" number="74" groups="memory"/>
+  <syscall name="madvise" number="75" groups="memory"/>
+  <syscall name="vhangup" number="76"/>
+  <syscall name="truncate64" number="77" groups="file"/>
+  <syscall name="mincore" number="78" groups="memory"/>
+  <syscall name="getgroups" number="79"/>
+  <syscall name="setgroups" number="80"/>
+  <syscall name="getpgrp" number="81"/>
+  <syscall name="setgroups32" number="82"/>
+  <syscall name="setitimer" number="83"/>
+  <syscall name="ftruncate64" number="84" groups="descriptor"/>
+  <syscall name="swapon" number="85" groups="file"/>
+  <syscall name="getitimer" number="86"/>
+  <syscall name="setuid32" number="87"/>
+  <syscall name="sethostname" number="88"/>
+  <syscall name="setgid32" number="89"/>
+  <syscall name="dup2" number="90" groups="descriptor"/>
+  <syscall name="setfsuid32" number="91"/>
+  <syscall name="fcntl" number="92" groups="descriptor"/>
+  <syscall name="select" number="93" groups="descriptor"/>
+  <syscall name="setfsgid32" number="94"/>
+  <syscall name="fsync" number="95" groups="descriptor"/>
+  <syscall name="setpriority" number="96"/>
+  <syscall name="socket" number="97" groups="network"/>
+  <syscall name="connect" number="98" groups="network"/>
+  <syscall name="accept" number="99" groups="network"/>
+  <syscall name="getpriority" number="100"/>
+  <syscall name="rt_sigreturn" number="101" groups="signal"/>
+  <syscall name="rt_sigaction" number="102" groups="signal"/>
+  <syscall name="rt_sigprocmask" number="103" groups="signal"/>
+  <syscall name="rt_sigpending" number="104" groups="signal"/>
+  <syscall name="rt_sigtimedwait" number="105" groups="signal"/>
+  <syscall name="rt_sigqueueinfo" number="106" groups="signal"/>
+  <syscall name="rt_sigsuspend" number="107" groups="signal"/>
+  <syscall name="setresuid32" number="108"/>
+  <syscall name="getresuid32" number="109"/>
+  <syscall name="setresgid32" number="110"/>
+  <syscall name="getresgid32" number="111"/>
+  <syscall name="setregid32" number="112"/>
+  <syscall name="recvmsg" number="113" groups="network"/>
+  <syscall name="sendmsg" number="114" groups="network"/>
+  <syscall name="getgroups32" number="115"/>
+  <syscall name="gettimeofday" number="116"/>
+  <syscall name="getrusage" number="117"/>
+  <syscall name="getsockopt" number="118" groups="network"/>
+  <syscall name="getcwd" number="119" groups="file"/>
+  <syscall name="readv" number="120" groups="descriptor"/>
+  <syscall name="writev" number="121" groups="descriptor"/>
+  <syscall name="settimeofday" number="122"/>
+  <syscall name="fchown" number="123" groups="descriptor"/>
+  <syscall name="fchmod" number="124" groups="descriptor"/>
+  <syscall name="recvfrom" number="125" groups="network"/>
+  <syscall name="setreuid" number="126"/>
+  <syscall name="setregid" number="127"/>
+  <syscall name="rename" number="128" groups="file"/>
+  <syscall name="truncate" number="129" groups="file"/>
+  <syscall name="ftruncate" number="130" groups="descriptor"/>
+  <syscall name="flock" number="131" groups="descriptor"/>
+  <syscall name="lstat64" number="132" groups="file"/>
+  <syscall name="sendto" number="133" groups="network"/>
+  <syscall name="shutdown" number="134" groups="network"/>
+  <syscall name="socketpair" number="135" groups="network"/>
+  <syscall name="mkdir" number="136" groups="file"/>
+  <syscall name="rmdir" number="137" groups="file"/>
+  <syscall name="utimes" number="138" groups="file"/>
+  <syscall name="stat64" number="139" groups="file"/>
+  <syscall name="sendfile64" number="140" groups="descriptor,network"/>
+  <syscall name="getpeername" number="141" groups="network"/>
+  <syscall name="futex" number="142"/>
+  <syscall name="gettid" number="143"/>
+  <syscall name="getrlimit" number="144"/>
+  <syscall name="setrlimit" number="145"/>
+  <syscall name="pivot_root" number="146" groups="file"/>
+  <syscall name="prctl" number="147"/>
+  <syscall name="pciconfig_read" number="148"/>
+  <syscall name="pciconfig_write" number="149"/>
+  <syscall name="getsockname" number="150" groups="network"/>
+  <syscall name="inotify_init" number="151" groups="descriptor"/>
+  <syscall name="inotify_add_watch" number="152" groups="descriptor"/>
+  <syscall name="poll" number="153" groups="descriptor"/>
+  <syscall name="getdents64" number="154" groups="descriptor"/>
+  <syscall name="fcntl64" number="155" groups="descriptor"/>
+  <syscall name="inotify_rm_watch" number="156" groups="descriptor"/>
+  <syscall name="statfs" number="157" groups="file"/>
+  <syscall name="fstatfs" number="158" groups="descriptor"/>
+  <syscall name="umount" number="159" groups="file"/>
+  <syscall name="sched_set_affinity" number="160"/>
+  <syscall name="sched_get_affinity" number="161"/>
+  <syscall name="getdomainname" number="162"/>
+  <syscall name="setdomainname" number="163"/>
+  <syscall name="quotactl" number="165" groups="file"/>
+  <syscall name="set_tid_address" number="166"/>
+  <syscall name="mount" number="167" groups="file"/>
+  <syscall name="ustat" number="168"/>
+  <syscall name="setxattr" number="169" groups="file"/>
+  <syscall name="lsetxattr" number="170" groups="file"/>
+  <syscall name="fsetxattr" number="171" groups="descriptor"/>
+  <syscall name="getxattr" number="172" groups="file"/>
+  <syscall name="lgetxattr" number="173" groups="file"/>
+  <syscall name="getdents" number="174" groups="descriptor"/>
+  <syscall name="setsid" number="175"/>
+  <syscall name="fchdir" number="176" groups="descriptor"/>
+  <syscall name="fgetxattr" number="177" groups="descriptor"/>
+  <syscall name="listxattr" number="178" groups="file"/>
+  <syscall name="llistxattr" number="179" groups="file"/>
+  <syscall name="flistxattr" number="180" groups="descriptor"/>
+  <syscall name="removexattr" number="181" groups="file"/>
+  <syscall name="lremovexattr" number="182" groups="file"/>
+  <syscall name="sigpending" number="183" groups="signal"/>
+  <syscall name="query_module" number="184"/>
+  <syscall name="setpgid" number="185"/>
+  <syscall name="fremovexattr" number="186" groups="descriptor"/>
+  <syscall name="tkill" number="187" groups="signal"/>
+  <syscall name="exit_group" number="188" groups="process"/>
+  <syscall name="uname" number="189"/>
+  <syscall name="init_module" number="190"/>
+  <syscall name="personality" number="191"/>
+  <syscall name="remap_file_pages" number="192" groups="memory"/>
+  <syscall name="epoll_create" number="193" groups="descriptor"/>
+  <syscall name="epoll_ctl" number="194" groups="descriptor"/>
+  <syscall name="epoll_wait" number="195" groups="descriptor"/>
+  <syscall name="ioprio_set" number="196"/>
+  <syscall name="getppid" number="197"/>
+  <syscall name="sigaction" number="198" groups="signal"/>
+  <syscall name="sgetmask" number="199" groups="signal"/>
+  <syscall name="ssetmask" number="200" groups="signal"/>
+  <syscall name="sigsuspend" number="201" groups="signal"/>
+  <syscall name="oldlstat" number="202" groups="file"/>
+  <syscall name="uselib" number="203" groups="file"/>
+  <syscall name="readdir" number="204" groups="descriptor"/>
+  <syscall name="readahead" number="205" groups="descriptor"/>
+  <syscall name="socketcall" number="206" groups="descriptor"/>
+  <syscall name="syslog" number="207"/>
+  <syscall name="lookup_dcookie" number="208"/>
+  <syscall name="fadvise64" number="209" groups="descriptor"/>
+  <syscall name="fadvise64_64" number="210" groups="descriptor"/>
+  <syscall name="tgkill" number="211" groups="signal"/>
+  <syscall name="waitpid" number="212" groups="process"/>
+  <syscall name="swapoff" number="213" groups="file"/>
+  <syscall name="sysinfo" number="214"/>
+  <syscall name="ipc" number="215" groups="ipc"/>
+  <syscall name="sigreturn" number="216" groups="signal"/>
+  <syscall name="clone" number="217" groups="process"/>
+  <syscall name="ioprio_get" number="218"/>
+  <syscall name="adjtimex" number="219"/>
+  <syscall name="sigprocmask" number="220" groups="signal"/>
+  <syscall name="create_module" number="221"/>
+  <syscall name="delete_module" number="222"/>
+  <syscall name="get_kernel_syms" number="223"/>
+  <syscall name="getpgid" number="224"/>
+  <syscall name="bdflush" number="225"/>
+  <syscall name="sysfs" number="226"/>
+  <syscall name="afs_syscall" number="227"/>
+  <syscall name="setfsuid" number="228"/>
+  <syscall name="setfsgid" number="229"/>
+  <syscall name="_newselect" number="230" groups="descriptor"/>
+  <syscall name="time" number="231"/>
+  <syscall name="splice" number="232" groups="descriptor"/>
+  <syscall name="stime" number="233"/>
+  <syscall name="statfs64" number="234" groups="file"/>
+  <syscall name="fstatfs64" number="235" groups="descriptor"/>
+  <syscall name="_llseek" number="236" groups="descriptor"/>
+  <syscall name="mlock" number="237" groups="memory"/>
+  <syscall name="munlock" number="238" groups="memory"/>
+  <syscall name="mlockall" number="239" groups="memory"/>
+  <syscall name="munlockall" number="240" groups="memory"/>
+  <syscall name="sched_setparam" number="241"/>
+  <syscall name="sched_getparam" number="242"/>
+  <syscall name="sched_setscheduler" number="243"/>
+  <syscall name="sched_getscheduler" number="244"/>
+  <syscall name="sched_yield" number="245"/>
+  <syscall name="sched_get_priority_max" number="246"/>
+  <syscall name="sched_get_priority_min" number="247"/>
+  <syscall name="sched_rr_get_interval" number="248"/>
+  <syscall name="nanosleep" number="249"/>
+  <syscall name="mremap" number="250" groups="memory"/>
+  <syscall name="_sysctl" number="251"/>
+  <syscall name="getsid" number="252"/>
+  <syscall name="fdatasync" number="253" groups="descriptor"/>
+  <syscall name="nfsservctl" number="254"/>
+  <syscall name="sync_file_range" number="255" groups="descriptor"/>
+  <syscall name="clock_settime" number="256"/>
+  <syscall name="clock_gettime" number="257"/>
+  <syscall name="clock_getres" number="258"/>
+  <syscall name="clock_nanosleep" number="259"/>
+  <syscall name="sched_getaffinity" number="260"/>
+  <syscall name="sched_setaffinity" number="261"/>
+  <syscall name="timer_settime" number="262"/>
+  <syscall name="timer_gettime" number="263"/>
+  <syscall name="timer_getoverrun" number="264"/>
+  <syscall name="timer_delete" number="265"/>
+  <syscall name="timer_create" number="266"/>
+  <syscall name="vserver" number="267"/>
+  <syscall name="io_setup" number="268"/>
+  <syscall name="io_destroy" number="269"/>
+  <syscall name="io_submit" number="270"/>
+  <syscall name="io_cancel" number="271"/>
+  <syscall name="io_getevents" number="272"/>
+  <syscall name="mq_open" number="273"/>
+  <syscall name="mq_unlink" number="274"/>
+  <syscall name="mq_timedsend" number="275"/>
+  <syscall name="mq_timedreceive" number="276"/>
+  <syscall name="mq_notify" number="277"/>
+  <syscall name="mq_getsetattr" number="278"/>
+  <syscall name="waitid" number="279" groups="process"/>
+  <syscall name="tee" number="280" groups="descriptor"/>
+  <syscall name="add_key" number="281"/>
+  <syscall name="request_key" number="282"/>
+  <syscall name="keyctl" number="283"/>
+  <syscall name="openat" number="284" groups="descriptor,file"/>
+  <syscall name="mkdirat" number="285" groups="descriptor,file"/>
+  <syscall name="mknodat" number="286" groups="descriptor,file"/>
+  <syscall name="fchownat" number="287" groups="descriptor,file"/>
+  <syscall name="futimesat" number="288" groups="descriptor,file"/>
+  <syscall name="fstatat64" number="289" groups="descriptor,file"/>
+  <syscall name="unlinkat" number="290" groups="descriptor,file"/>
+  <syscall name="renameat" number="291" groups="descriptor,file"/>
+  <syscall name="linkat" number="292" groups="descriptor,file"/>
+  <syscall name="symlinkat" number="293" groups="descriptor,file"/>
+  <syscall name="readlinkat" number="294" groups="descriptor,file"/>
+  <syscall name="fchmodat" number="295" groups="descriptor,file"/>
+  <syscall name="faccessat" number="296" groups="descriptor,file"/>
+  <syscall name="pselect6" number="297" groups="descriptor"/>
+  <syscall name="ppoll" number="298" groups="descriptor"/>
+  <syscall name="unshare" number="299" groups="process"/>
+  <syscall name="set_robust_list" number="300"/>
+  <syscall name="get_robust_list" number="301"/>
+  <syscall name="migrate_pages" number="302" groups="memory"/>
+  <syscall name="mbind" number="303" groups="memory"/>
+  <syscall name="get_mempolicy" number="304" groups="memory"/>
+  <syscall name="set_mempolicy" number="305" groups="memory"/>
+  <syscall name="kexec_load" number="306"/>
+  <syscall name="move_pages" number="307" groups="memory"/>
+  <syscall name="getcpu" number="308"/>
+  <syscall name="epoll_pwait" number="309" groups="descriptor"/>
+  <syscall name="utimensat" number="310" groups="descriptor,file"/>
+  <syscall name="signalfd" number="311" groups="descriptor,signal"/>
+  <syscall name="timerfd_create" number="312" groups="descriptor"/>
+  <syscall name="eventfd" number="313" groups="descriptor"/>
+  <syscall name="fallocate" number="314" groups="descriptor"/>
+  <syscall name="timerfd_settime" number="315" groups="descriptor"/>
+  <syscall name="timerfd_gettime" number="316" groups="descriptor"/>
+  <syscall name="signalfd4" number="317" groups="descriptor,signal"/>
+  <syscall name="eventfd2" number="318" groups="descriptor"/>
+  <syscall name="epoll_create1" number="319" groups="descriptor"/>
+  <syscall name="dup3" number="320" groups="descriptor"/>
+  <syscall name="pipe2" number="321" groups="descriptor"/>
+  <syscall name="inotify_init1" number="322" groups="descriptor"/>
+  <syscall name="accept4" number="323" groups="network"/>
+  <syscall name="preadv" number="324" groups="descriptor"/>
+  <syscall name="pwritev" number="325" groups="descriptor"/>
+  <syscall name="rt_tgsigqueueinfo" number="326" groups="process,signal"/>
+  <syscall name="perf_event_open" number="327" groups="descriptor"/>
+  <syscall name="recvmmsg" number="328" groups="network"/>
+</syscalls_info>
diff --git a/share/gdb/syscalls/sparc64-linux.xml b/share/gdb/syscalls/sparc64-linux.xml
new file mode 100644
index 0000000..29f72f8
--- /dev/null
+++ b/share/gdb/syscalls/sparc64-linux.xml
@@ -0,0 +1,323 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
+<!-- Copyright (C) 2010-2019 Free Software Foundation, Inc.
+
+     Copying and distribution of this file, with or without modification,
+     are permitted in any medium without royalty provided the copyright
+     notice and this notice are preserved.  -->
+<!-- This file was generated using the following file:
+     
+     /usr/src/linux/arch/sparc/include/asm/unistd.h
+
+     The file mentioned above belongs to the Linux Kernel.  -->
+<syscalls_info>
+  <syscall name="restart_syscall" number="0"/>
+  <syscall name="exit" number="1" groups="process"/>
+  <syscall name="fork" number="2" groups="process"/>
+  <syscall name="read" number="3" groups="descriptor"/>
+  <syscall name="write" number="4" groups="descriptor"/>
+  <syscall name="open" number="5" groups="descriptor,file"/>
+  <syscall name="close" number="6" groups="descriptor"/>
+  <syscall name="wait4" number="7" groups="process"/>
+  <syscall name="creat" number="8" groups="descriptor,file"/>
+  <syscall name="link" number="9" groups="file"/>
+  <syscall name="unlink" number="10" groups="file"/>
+  <syscall name="execv" number="11" groups="file,process"/>
+  <syscall name="chdir" number="12" groups="file"/>
+  <syscall name="chown" number="13" groups="file"/>
+  <syscall name="mknod" number="14" groups="file"/>
+  <syscall name="chmod" number="15" groups="file"/>
+  <syscall name="lchown" number="16" groups="file"/>
+  <syscall name="brk" number="17" groups="memory"/>
+  <syscall name="perfctr" number="18"/>
+  <syscall name="lseek" number="19" groups="descriptor"/>
+  <syscall name="getpid" number="20"/>
+  <syscall name="capget" number="21"/>
+  <syscall name="capset" number="22"/>
+  <syscall name="setuid" number="23"/>
+  <syscall name="getuid" number="24"/>
+  <syscall name="vmsplice" number="25" groups="descriptor"/>
+  <syscall name="ptrace" number="26"/>
+  <syscall name="alarm" number="27"/>
+  <syscall name="sigaltstack" number="28" groups="signal"/>
+  <syscall name="pause" number="29" groups="signal"/>
+  <syscall name="utime" number="30" groups="file"/>
+  <syscall name="access" number="33" groups="file"/>
+  <syscall name="nice" number="34"/>
+  <syscall name="sync" number="36"/>
+  <syscall name="kill" number="37" groups="signal"/>
+  <syscall name="stat" number="38" groups="file"/>
+  <syscall name="sendfile" number="39" groups="descriptor,network"/>
+  <syscall name="lstat" number="40" groups="file"/>
+  <syscall name="dup" number="41" groups="descriptor"/>
+  <syscall name="pipe" number="42" groups="descriptor"/>
+  <syscall name="times" number="43"/>
+  <syscall name="umount2" number="45" groups="file"/>
+  <syscall name="setgid" number="46"/>
+  <syscall name="getgid" number="47"/>
+  <syscall name="signal" number="48" groups="signal"/>
+  <syscall name="geteuid" number="49"/>
+  <syscall name="getegid" number="50"/>
+  <syscall name="acct" number="51" groups="file"/>
+  <syscall name="memory_ordering" number="52"/>
+  <syscall name="ioctl" number="54" groups="descriptor"/>
+  <syscall name="reboot" number="55"/>
+  <syscall name="symlink" number="57" groups="file"/>
+  <syscall name="readlink" number="58" groups="file"/>
+  <syscall name="execve" number="59" groups="file,process"/>
+  <syscall name="umask" number="60"/>
+  <syscall name="chroot" number="61" groups="file"/>
+  <syscall name="fstat" number="62" groups="descriptor"/>
+  <syscall name="fstat64" number="63" groups="descriptor"/>
+  <syscall name="getpagesize" number="64"/>
+  <syscall name="msync" number="65" groups="memory"/>
+  <syscall name="vfork" number="66" groups="process"/>
+  <syscall name="pread64" number="67" groups="descriptor"/>
+  <syscall name="pwrite64" number="68" groups="descriptor"/>
+  <syscall name="mmap" number="71" groups="descriptor,memory"/>
+  <syscall name="munmap" number="73" groups="memory"/>
+  <syscall name="mprotect" number="74" groups="memory"/>
+  <syscall name="madvise" number="75" groups="memory"/>
+  <syscall name="vhangup" number="76"/>
+  <syscall name="mincore" number="78" groups="memory"/>
+  <syscall name="getgroups" number="79"/>
+  <syscall name="setgroups" number="80"/>
+  <syscall name="getpgrp" number="81"/>
+  <syscall name="setitimer" number="83"/>
+  <syscall name="swapon" number="85" groups="file"/>
+  <syscall name="getitimer" number="86"/>
+  <syscall name="sethostname" number="88"/>
+  <syscall name="dup2" number="90" groups="descriptor"/>
+  <syscall name="fcntl" number="92" groups="descriptor"/>
+  <syscall name="select" number="93" groups="descriptor"/>
+  <syscall name="fsync" number="95" groups="descriptor"/>
+  <syscall name="setpriority" number="96"/>
+  <syscall name="socket" number="97" groups="network"/>
+  <syscall name="connect" number="98" groups="network"/>
+  <syscall name="accept" number="99" groups="network"/>
+  <syscall name="getpriority" number="100"/>
+  <syscall name="rt_sigreturn" number="101" groups="signal"/>
+  <syscall name="rt_sigaction" number="102" groups="signal"/>
+  <syscall name="rt_sigprocmask" number="103" groups="signal"/>
+  <syscall name="rt_sigpending" number="104" groups="signal"/>
+  <syscall name="rt_sigtimedwait" number="105" groups="signal"/>
+  <syscall name="rt_sigqueueinfo" number="106" groups="signal"/>
+  <syscall name="rt_sigsuspend" number="107" groups="signal"/>
+  <syscall name="setresuid" number="108"/>
+  <syscall name="getresuid" number="109"/>
+  <syscall name="setresgid" number="110"/>
+  <syscall name="getresgid" number="111"/>
+  <syscall name="recvmsg" number="113" groups="network"/>
+  <syscall name="sendmsg" number="114" groups="network"/>
+  <syscall name="gettimeofday" number="116"/>
+  <syscall name="getrusage" number="117"/>
+  <syscall name="getsockopt" number="118" groups="network"/>
+  <syscall name="getcwd" number="119" groups="file"/>
+  <syscall name="readv" number="120" groups="descriptor"/>
+  <syscall name="writev" number="121" groups="descriptor"/>
+  <syscall name="settimeofday" number="122"/>
+  <syscall name="fchown" number="123" groups="descriptor"/>
+  <syscall name="fchmod" number="124" groups="descriptor"/>
+  <syscall name="recvfrom" number="125" groups="network"/>
+  <syscall name="setreuid" number="126"/>
+  <syscall name="setregid" number="127"/>
+  <syscall name="rename" number="128" groups="file"/>
+  <syscall name="truncate" number="129" groups="file"/>
+  <syscall name="ftruncate" number="130" groups="descriptor"/>
+  <syscall name="flock" number="131" groups="descriptor"/>
+  <syscall name="lstat64" number="132" groups="file"/>
+  <syscall name="sendto" number="133" groups="network"/>
+  <syscall name="shutdown" number="134" groups="network"/>
+  <syscall name="socketpair" number="135" groups="network"/>
+  <syscall name="mkdir" number="136" groups="file"/>
+  <syscall name="rmdir" number="137" groups="file"/>
+  <syscall name="utimes" number="138" groups="file"/>
+  <syscall name="stat64" number="139" groups="file"/>
+  <syscall name="sendfile64" number="140" groups="descriptor,network"/>
+  <syscall name="getpeername" number="141" groups="network"/>
+  <syscall name="futex" number="142"/>
+  <syscall name="gettid" number="143"/>
+  <syscall name="getrlimit" number="144"/>
+  <syscall name="setrlimit" number="145"/>
+  <syscall name="pivot_root" number="146" groups="file"/>
+  <syscall name="prctl" number="147"/>
+  <syscall name="pciconfig_read" number="148"/>
+  <syscall name="pciconfig_write" number="149"/>
+  <syscall name="getsockname" number="150" groups="network"/>
+  <syscall name="inotify_init" number="151" groups="descriptor"/>
+  <syscall name="inotify_add_watch" number="152" groups="descriptor"/>
+  <syscall name="poll" number="153" groups="descriptor"/>
+  <syscall name="getdents64" number="154" groups="descriptor"/>
+  <syscall name="inotify_rm_watch" number="156" groups="descriptor"/>
+  <syscall name="statfs" number="157" groups="file"/>
+  <syscall name="fstatfs" number="158" groups="descriptor"/>
+  <syscall name="umount" number="159" groups="file"/>
+  <syscall name="sched_set_affinity" number="160"/>
+  <syscall name="sched_get_affinity" number="161"/>
+  <syscall name="getdomainname" number="162"/>
+  <syscall name="setdomainname" number="163"/>
+  <syscall name="utrap_install" number="164"/>
+  <syscall name="quotactl" number="165" groups="file"/>
+  <syscall name="set_tid_address" number="166"/>
+  <syscall name="mount" number="167" groups="file"/>
+  <syscall name="ustat" number="168"/>
+  <syscall name="setxattr" number="169" groups="file"/>
+  <syscall name="lsetxattr" number="170" groups="file"/>
+  <syscall name="fsetxattr" number="171" groups="descriptor"/>
+  <syscall name="getxattr" number="172" groups="file"/>
+  <syscall name="lgetxattr" number="173" groups="file"/>
+  <syscall name="getdents" number="174" groups="descriptor"/>
+  <syscall name="setsid" number="175"/>
+  <syscall name="fchdir" number="176" groups="descriptor"/>
+  <syscall name="fgetxattr" number="177" groups="descriptor"/>
+  <syscall name="listxattr" number="178" groups="file"/>
+  <syscall name="llistxattr" number="179" groups="file"/>
+  <syscall name="flistxattr" number="180" groups="descriptor"/>
+  <syscall name="removexattr" number="181" groups="file"/>
+  <syscall name="lremovexattr" number="182" groups="file"/>
+  <syscall name="sigpending" number="183" groups="signal"/>
+  <syscall name="query_module" number="184"/>
+  <syscall name="setpgid" number="185"/>
+  <syscall name="fremovexattr" number="186" groups="descriptor"/>
+  <syscall name="tkill" number="187" groups="signal"/>
+  <syscall name="exit_group" number="188" groups="process"/>
+  <syscall name="uname" number="189"/>
+  <syscall name="init_module" number="190"/>
+  <syscall name="personality" number="191"/>
+  <syscall name="remap_file_pages" number="192" groups="memory"/>
+  <syscall name="epoll_create" number="193" groups="descriptor"/>
+  <syscall name="epoll_ctl" number="194" groups="descriptor"/>
+  <syscall name="epoll_wait" number="195" groups="descriptor"/>
+  <syscall name="ioprio_set" number="196"/>
+  <syscall name="getppid" number="197"/>
+  <syscall name="sigaction" number="198" groups="signal"/>
+  <syscall name="sgetmask" number="199" groups="signal"/>
+  <syscall name="ssetmask" number="200" groups="signal"/>
+  <syscall name="sigsuspend" number="201" groups="signal"/>
+  <syscall name="oldlstat" number="202" groups="file"/>
+  <syscall name="uselib" number="203" groups="file"/>
+  <syscall name="readdir" number="204" groups="descriptor"/>
+  <syscall name="readahead" number="205" groups="descriptor"/>
+  <syscall name="socketcall" number="206" groups="descriptor"/>
+  <syscall name="syslog" number="207"/>
+  <syscall name="lookup_dcookie" number="208"/>
+  <syscall name="fadvise64" number="209" groups="descriptor"/>
+  <syscall name="fadvise64_64" number="210" groups="descriptor"/>
+  <syscall name="tgkill" number="211" groups="signal"/>
+  <syscall name="waitpid" number="212" groups="process"/>
+  <syscall name="swapoff" number="213" groups="file"/>
+  <syscall name="sysinfo" number="214"/>
+  <syscall name="ipc" number="215" groups="ipc"/>
+  <syscall name="sigreturn" number="216" groups="signal"/>
+  <syscall name="clone" number="217" groups="process"/>
+  <syscall name="ioprio_get" number="218"/>
+  <syscall name="adjtimex" number="219"/>
+  <syscall name="sigprocmask" number="220" groups="signal"/>
+  <syscall name="create_module" number="221"/>
+  <syscall name="delete_module" number="222"/>
+  <syscall name="get_kernel_syms" number="223"/>
+  <syscall name="getpgid" number="224"/>
+  <syscall name="bdflush" number="225"/>
+  <syscall name="sysfs" number="226"/>
+  <syscall name="afs_syscall" number="227"/>
+  <syscall name="setfsuid" number="228"/>
+  <syscall name="setfsgid" number="229"/>
+  <syscall name="_newselect" number="230" groups="descriptor"/>
+  <syscall name="splice" number="232" groups="descriptor"/>
+  <syscall name="stime" number="233"/>
+  <syscall name="statfs64" number="234" groups="file"/>
+  <syscall name="fstatfs64" number="235" groups="descriptor"/>
+  <syscall name="_llseek" number="236" groups="descriptor"/>
+  <syscall name="mlock" number="237" groups="memory"/>
+  <syscall name="munlock" number="238" groups="memory"/>
+  <syscall name="mlockall" number="239" groups="memory"/>
+  <syscall name="munlockall" number="240" groups="memory"/>
+  <syscall name="sched_setparam" number="241"/>
+  <syscall name="sched_getparam" number="242"/>
+  <syscall name="sched_setscheduler" number="243"/>
+  <syscall name="sched_getscheduler" number="244"/>
+  <syscall name="sched_yield" number="245"/>
+  <syscall name="sched_get_priority_max" number="246"/>
+  <syscall name="sched_get_priority_min" number="247"/>
+  <syscall name="sched_rr_get_interval" number="248"/>
+  <syscall name="nanosleep" number="249"/>
+  <syscall name="mremap" number="250" groups="memory"/>
+  <syscall name="_sysctl" number="251"/>
+  <syscall name="getsid" number="252"/>
+  <syscall name="fdatasync" number="253" groups="descriptor"/>
+  <syscall name="nfsservctl" number="254"/>
+  <syscall name="sync_file_range" number="255" groups="descriptor"/>
+  <syscall name="clock_settime" number="256"/>
+  <syscall name="clock_gettime" number="257"/>
+  <syscall name="clock_getres" number="258"/>
+  <syscall name="clock_nanosleep" number="259"/>
+  <syscall name="sched_getaffinity" number="260"/>
+  <syscall name="sched_setaffinity" number="261"/>
+  <syscall name="timer_settime" number="262"/>
+  <syscall name="timer_gettime" number="263"/>
+  <syscall name="timer_getoverrun" number="264"/>
+  <syscall name="timer_delete" number="265"/>
+  <syscall name="timer_create" number="266"/>
+  <syscall name="vserver" number="267"/>
+  <syscall name="io_setup" number="268"/>
+  <syscall name="io_destroy" number="269"/>
+  <syscall name="io_submit" number="270"/>
+  <syscall name="io_cancel" number="271"/>
+  <syscall name="io_getevents" number="272"/>
+  <syscall name="mq_open" number="273"/>
+  <syscall name="mq_unlink" number="274"/>
+  <syscall name="mq_timedsend" number="275"/>
+  <syscall name="mq_timedreceive" number="276"/>
+  <syscall name="mq_notify" number="277"/>
+  <syscall name="mq_getsetattr" number="278"/>
+  <syscall name="waitid" number="279" groups="process"/>
+  <syscall name="tee" number="280" groups="descriptor"/>
+  <syscall name="add_key" number="281"/>
+  <syscall name="request_key" number="282"/>
+  <syscall name="keyctl" number="283"/>
+  <syscall name="openat" number="284" groups="descriptor,file"/>
+  <syscall name="mkdirat" number="285" groups="descriptor,file"/>
+  <syscall name="mknodat" number="286" groups="descriptor,file"/>
+  <syscall name="fchownat" number="287" groups="descriptor,file"/>
+  <syscall name="futimesat" number="288" groups="descriptor,file"/>
+  <syscall name="fstatat64" number="289" groups="descriptor,file"/>
+  <syscall name="unlinkat" number="290" groups="descriptor,file"/>
+  <syscall name="renameat" number="291" groups="descriptor,file"/>
+  <syscall name="linkat" number="292" groups="descriptor,file"/>
+  <syscall name="symlinkat" number="293" groups="descriptor,file"/>
+  <syscall name="readlinkat" number="294" groups="descriptor,file"/>
+  <syscall name="fchmodat" number="295" groups="descriptor,file"/>
+  <syscall name="faccessat" number="296" groups="descriptor,file"/>
+  <syscall name="pselect6" number="297" groups="descriptor"/>
+  <syscall name="ppoll" number="298" groups="descriptor"/>
+  <syscall name="unshare" number="299" groups="process"/>
+  <syscall name="set_robust_list" number="300"/>
+  <syscall name="get_robust_list" number="301"/>
+  <syscall name="migrate_pages" number="302" groups="memory"/>
+  <syscall name="mbind" number="303" groups="memory"/>
+  <syscall name="get_mempolicy" number="304" groups="memory"/>
+  <syscall name="set_mempolicy" number="305" groups="memory"/>
+  <syscall name="kexec_load" number="306"/>
+  <syscall name="move_pages" number="307" groups="memory"/>
+  <syscall name="getcpu" number="308"/>
+  <syscall name="epoll_pwait" number="309" groups="descriptor"/>
+  <syscall name="utimensat" number="310" groups="descriptor,file"/>
+  <syscall name="signalfd" number="311" groups="descriptor,signal"/>
+  <syscall name="timerfd_create" number="312" groups="descriptor"/>
+  <syscall name="eventfd" number="313" groups="descriptor"/>
+  <syscall name="fallocate" number="314" groups="descriptor"/>
+  <syscall name="timerfd_settime" number="315" groups="descriptor"/>
+  <syscall name="timerfd_gettime" number="316" groups="descriptor"/>
+  <syscall name="signalfd4" number="317" groups="descriptor,signal"/>
+  <syscall name="eventfd2" number="318" groups="descriptor"/>
+  <syscall name="epoll_create1" number="319" groups="descriptor"/>
+  <syscall name="dup3" number="320" groups="descriptor"/>
+  <syscall name="pipe2" number="321" groups="descriptor"/>
+  <syscall name="inotify_init1" number="322" groups="descriptor"/>
+  <syscall name="accept4" number="323" groups="network"/>
+  <syscall name="preadv" number="324" groups="descriptor"/>
+  <syscall name="pwritev" number="325" groups="descriptor"/>
+  <syscall name="rt_tgsigqueueinfo" number="326" groups="process,signal"/>
+  <syscall name="perf_event_open" number="327" groups="descriptor"/>
+  <syscall name="recvmmsg" number="328" groups="network"/>
+</syscalls_info>
diff --git a/share/gdb/system-gdbinit/elinos.py b/share/gdb/system-gdbinit/elinos.py
new file mode 100644
index 0000000..b303342
--- /dev/null
+++ b/share/gdb/system-gdbinit/elinos.py
@@ -0,0 +1,91 @@
+# Copyright (C) 2011-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+"""Configure GDB using the ELinOS environment."""
+
+import os
+import glob
+import gdb
+
+
+def warn(msg):
+    print "warning: %s" % msg
+
+
+def get_elinos_environment():
+    """Return the ELinOS environment.
+
+    If the ELinOS environment is properly set up, return a dictionary
+    which contains:
+      * The path to the ELinOS project at key 'project';
+      * The path to the ELinOS CDK at key 'cdk';
+      * The ELinOS target name at key 'target' (Eg. 'i486-linux');
+      * A list of Xenomai install prefixes (which could be empty, if
+        the ELinOS project does not include Xenomai) at key 'xenomai'.
+
+    If one of these cannot be found, print a warning; the corresponding
+    value in the returned dictionary will be None.
+    """
+    result = {}
+    for key in ("project", "cdk", "target"):
+        var = "ELINOS_" + key.upper()
+        if var in os.environ:
+            result[key] = os.environ[var]
+        else:
+            warn("%s not set" % var)
+            result[key] = None
+
+    if result["project"] is not None:
+        result["xenomai"] = glob.glob(result["project"] + "/xenomai-[0-9.]*")
+    else:
+        result["xenomai"] = []
+
+    return result
+
+
+def elinos_init():
+    """Initialize debugger environment for ELinOS.
+
+    Let the debugger know where to find the ELinOS libraries on host. This
+    assumes that an ELinOS environment is properly set up. If some environment
+    variables are missing, warn about which library may be missing.
+    """
+    elinos_env = get_elinos_environment()
+
+    solib_dirs = []
+
+    # System libraries
+    if None in (elinos_env[key] for key in ("cdk", "target")):
+        warn("ELinOS system libraries will not be loaded")
+    else:
+        solib_prefix = "%s/%s" % (elinos_env["cdk"], elinos_env["target"])
+        solib_dirs += ["%s/%s" % (solib_prefix, "lib")]
+        gdb.execute("set solib-absolute-prefix %s" % solib_prefix)
+
+    # Xenomai libraries. Those are optional, so have a lighter warning
+    # if they cannot be located.
+    if elinos_env["project"] is None:
+        warn("Xenomai libraries may not be loaded")
+    else:
+        for dir in elinos_env['xenomai']:
+            solib_dirs += ["%s/%s"
+                           % (dir, "xenomai-build/usr/realtime/lib")]
+
+    if len(solib_dirs) != 0:
+        gdb.execute("set solib-search-path %s" % ":".join(solib_dirs))
+
+
+if __name__ == "__main__":
+    elinos_init()
diff --git a/share/gdb/system-gdbinit/wrs-linux.py b/share/gdb/system-gdbinit/wrs-linux.py
new file mode 100644
index 0000000..467d679
--- /dev/null
+++ b/share/gdb/system-gdbinit/wrs-linux.py
@@ -0,0 +1,25 @@
+# Copyright (C) 2011-2019 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+"""Configure GDB using the WRS/Linux environment."""
+
+import os
+
+if 'ENV_PREFIX' in os.environ:
+    gdb.execute('set sysroot %s' % os.environ['ENV_PREFIX'])
+
+else:
+    print "warning: ENV_PREFIX environment variable missing."
+    print "The debugger will probably be unable to find the correct system libraries"
diff --git a/share/info/annotate.info b/share/info/annotate.info
new file mode 100644
index 0000000..44e5be4
--- /dev/null
+++ b/share/info/annotate.info
@@ -0,0 +1,1187 @@
+This is annotate.info, produced by makeinfo version 6.5 from
+annotate.texinfo.
+
+Copyright (C) 1994-2019 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Annotate: (annotate).                 The obsolete annotation interface.
+END-INFO-DIR-ENTRY
+
+   This file documents GDB's obsolete annotations.
+
+   Copyright (C) 1994-2019 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+
+File: annotate.info,  Node: Top,  Next: Annotations Overview,  Up: (dir)
+
+GDB Annotations
+***************
+
+This document describes the obsolete level two annotation interface
+implemented in older GDB versions.
+
+* Menu:
+
+* Annotations Overview::  What annotations are; the general syntax.
+* Limitations::           Limitations of the annotation interface.
+* Migrating to GDB/MI::   Migrating to GDB/MI
+* Server Prefix::       Issuing a command without affecting user state.
+* Value Annotations::   Values are marked as such.
+* Frame Annotations::   Stack frames are annotated.
+* Displays::            GDB can be told to display something periodically.
+* Prompting::           Annotations marking GDB's need for input.
+* Errors::              Annotations for error messages.
+* Breakpoint Info::     Information on breakpoints.
+* Invalidation::        Some annotations describe things now invalid.
+* Annotations for Running::
+                        Whether the program is running, how it stopped, etc.
+* Source Annotations::  Annotations describing source code.
+* Multi-threaded Apps:: An annotation that reports multi-threadedness.
+
+* GNU Free Documentation License::
+
+
+File: annotate.info,  Node: Annotations Overview,  Next: Limitations,  Prev: Top,  Up: Top
+
+1 What is an Annotation?
+************************
+
+To produce obsolete level two annotations, start GDB with the
+'--annotate=2' option.
+
+   Annotations start with a newline character, two 'control-z'
+characters, and the name of the annotation.  If there is no additional
+information associated with this annotation, the name of the annotation
+is followed immediately by a newline.  If there is additional
+information, the name of the annotation is followed by a space, the
+additional information, and a newline.  The additional information
+cannot contain newline characters.
+
+   Any output not beginning with a newline and two 'control-z'
+characters denotes literal output from GDB.  Currently there is no need
+for GDB to output a newline followed by two 'control-z' characters, but
+if there was such a need, the annotations could be extended with an
+'escape' annotation which means those three characters as output.
+
+   A simple example of starting up GDB with annotations is:
+
+     $ gdb --annotate=2
+     GNU GDB 5.0
+     Copyright 2000 Free Software Foundation, Inc.
+     GDB is free software, covered by the GNU General Public License,
+     and you are welcome to change it and/or distribute copies of it
+     under certain conditions.
+     Type "show copying" to see the conditions.
+     There is absolutely no warranty for GDB.  Type "show warranty"
+     for details.
+     This GDB was configured as "sparc-sun-sunos4.1.3"
+
+     ^Z^Zpre-prompt
+     (gdb)
+     ^Z^Zprompt
+     quit
+
+     ^Z^Zpost-prompt
+     $
+
+   Here 'quit' is input to GDB; the rest is output from GDB.  The three
+lines beginning '^Z^Z' (where '^Z' denotes a 'control-z' character) are
+annotations; the rest is output from GDB.
+
+
+File: annotate.info,  Node: Limitations,  Next: Migrating to GDB/MI,  Prev: Annotations Overview,  Up: Top
+
+2 Limitations of the Annotation Interface
+*****************************************
+
+The level two annotations mechanism is known to have a number of
+technical and architectural limitations.  As a consequence, in 2001,
+with the release of GDB 5.1 and the addition of GDB/MI, the annotation
+interface was marked as deprecated.
+
+   This chapter discusses the known problems.
+
+2.1 Dependant on CLI output
+===========================
+
+The annotation interface works by interspersing markups with GDB normal
+command-line interpreter output.  Unfortunately, this makes the
+annotation client dependant on not just the annotations, but also the
+CLI output.  This is because the client is forced to assume that
+specific GDB commands provide specific information.  Any change to GDB's
+CLI output modifies or removes that information and, consequently,
+likely breaks the client.
+
+   Since the GDB/MI output is independent of the CLI, it does not have
+this problem.
+
+2.2 Scalability
+===============
+
+The annotation interface relies on value annotations (*note Value
+Annotations::) and the display mechanism as a way of obtaining
+up-to-date value information.  These mechanisms are not scalable.
+
+   In a graphical environment, where many values can be displayed
+simultaneously, a serious performance problem occurs when the client
+tries to first extract from GDB, and then re-display, all those values.
+The client should instead only request and update the values that
+changed.
+
+   The GDB/MI Variable Objects provide just that mechanism.
+
+2.3 Correctness
+===============
+
+The annotation interface assumes that a variable's value can only be
+changed when the target is running.  This assumption is not correct.  A
+single assignment to a single variable can result in the entire target,
+and all displayed values, needing an update.
+
+   The GDB/MI Variable Objects include a mechanism for efficiently
+reporting such changes.
+
+2.4 Reliability
+===============
+
+The GDB/MI interface includes a dedicated test directory ('gdb/gdb.mi'),
+and any addition or fix to GDB/MI must include testsuite changes.
+
+2.5 Maintainability
+===================
+
+The annotation mechanism was implemented by interspersing CLI print
+statements with various annotations.  As a consequence, any CLI output
+change can alter the annotation output.
+
+   Since the GDB/MI output is independent of the CLI, and the GDB/MI is
+increasingly implemented independent of the CLI code, its long term
+maintenance is much easier.
+
+
+File: annotate.info,  Node: Migrating to GDB/MI,  Next: Server Prefix,  Prev: Limitations,  Up: Top
+
+3 Migrating to GDB/MI
+*********************
+
+By using the 'interp mi' command, it is possible for annotation clients
+to invoke GDB/MI commands, and hence access the GDB/MI.  By doing this,
+existing annotation clients have a migration path from this obsolete
+interface to GDB/MI.
+
+
+File: annotate.info,  Node: Server Prefix,  Next: Value Annotations,  Prev: Migrating to GDB/MI,  Up: Top
+
+4 The Server Prefix
+*******************
+
+To issue a command to GDB without affecting certain aspects of the state
+which is seen by users, prefix it with 'server '.  This means that this
+command will not affect the command history, nor will it affect GDB's
+notion of which command to repeat if <RET> is pressed on a line by
+itself.
+
+   The server prefix does not affect the recording of values into the
+value history; to print a value without recording it into the value
+history, use the 'output' command instead of the 'print' command.
+
+
+File: annotate.info,  Node: Value Annotations,  Next: Frame Annotations,  Prev: Server Prefix,  Up: Top
+
+5 Values
+********
+
+_Value Annotations have been removed.  GDB/MI instead provides Variable
+Objects._
+
+   When a value is printed in various contexts, GDB uses annotations to
+delimit the value from the surrounding text.
+
+   If a value is printed using 'print' and added to the value history,
+the annotation looks like
+
+     ^Z^Zvalue-history-begin HISTORY-NUMBER VALUE-FLAGS
+     HISTORY-STRING
+     ^Z^Zvalue-history-value
+     THE-VALUE
+     ^Z^Zvalue-history-end
+
+where HISTORY-NUMBER is the number it is getting in the value history,
+HISTORY-STRING is a string, such as '$5 = ', which introduces the value
+to the user, THE-VALUE is the output corresponding to the value itself,
+and VALUE-FLAGS is '*' for a value which can be dereferenced and '-' for
+a value which cannot.
+
+   If the value is not added to the value history (it is an invalid
+float or it is printed with the 'output' command), the annotation is
+similar:
+
+     ^Z^Zvalue-begin VALUE-FLAGS
+     THE-VALUE
+     ^Z^Zvalue-end
+
+   When GDB prints an argument to a function (for example, in the output
+from the 'backtrace' command), it annotates it as follows:
+
+     ^Z^Zarg-begin
+     ARGUMENT-NAME
+     ^Z^Zarg-name-end
+     SEPARATOR-STRING
+     ^Z^Zarg-value VALUE-FLAGS
+     THE-VALUE
+     ^Z^Zarg-end
+
+where ARGUMENT-NAME is the name of the argument, SEPARATOR-STRING is
+text which separates the name from the value for the user's benefit
+(such as '='), and VALUE-FLAGS and THE-VALUE have the same meanings as
+in a 'value-history-begin' annotation.
+
+   When printing a structure, GDB annotates it as follows:
+
+     ^Z^Zfield-begin VALUE-FLAGS
+     FIELD-NAME
+     ^Z^Zfield-name-end
+     SEPARATOR-STRING
+     ^Z^Zfield-value
+     THE-VALUE
+     ^Z^Zfield-end
+
+where FIELD-NAME is the name of the field, SEPARATOR-STRING is text
+which separates the name from the value for the user's benefit (such as
+'='), and VALUE-FLAGS and THE-VALUE have the same meanings as in a
+'value-history-begin' annotation.
+
+   When printing an array, GDB annotates it as follows:
+
+     ^Z^Zarray-section-begin ARRAY-INDEX VALUE-FLAGS
+
+where ARRAY-INDEX is the index of the first element being annotated and
+VALUE-FLAGS has the same meaning as in a 'value-history-begin'
+annotation.  This is followed by any number of elements, where is
+element can be either a single element:
+
+     ',' WHITESPACE         ; omitted for the first element
+     THE-VALUE
+     ^Z^Zelt
+
+   or a repeated element
+
+     ',' WHITESPACE         ; omitted for the first element
+     THE-VALUE
+     ^Z^Zelt-rep NUMBER-OF-REPETITIONS
+     REPETITION-STRING
+     ^Z^Zelt-rep-end
+
+   In both cases, THE-VALUE is the output for the value of the element
+and WHITESPACE can contain spaces, tabs, and newlines.  In the repeated
+case, NUMBER-OF-REPETITIONS is the number of consecutive array elements
+which contain that value, and REPETITION-STRING is a string which is
+designed to convey to the user that repetition is being depicted.
+
+   Once all the array elements have been output, the array annotation is
+ended with
+
+     ^Z^Zarray-section-end
+
+
+File: annotate.info,  Node: Frame Annotations,  Next: Displays,  Prev: Value Annotations,  Up: Top
+
+6 Frames
+********
+
+_Value Annotations have been removed.  GDB/MI instead provides a number
+of frame commands._
+
+   _Frame annotations are no longer available.  The GDB/MI provides
+'-stack-list-arguments', '-stack-list-locals', and '-stack-list-frames'
+commands._
+
+   Whenever GDB prints a frame, it annotates it.  For example, this
+applies to frames printed when GDB stops, output from commands such as
+'backtrace' or 'up', etc.
+
+   The frame annotation begins with
+
+     ^Z^Zframe-begin LEVEL ADDRESS
+     LEVEL-STRING
+
+where LEVEL is the number of the frame (0 is the innermost frame, and
+other frames have positive numbers), ADDRESS is the address of the code
+executing in that frame, and LEVEL-STRING is a string designed to convey
+the level to the user.  ADDRESS is in the form '0x' followed by one or
+more lowercase hex digits (note that this does not depend on the
+language).  The frame ends with
+
+     ^Z^Zframe-end
+
+   Between these annotations is the main body of the frame, which can
+consist of
+
+   *      ^Z^Zfunction-call
+          FUNCTION-CALL-STRING
+
+     where FUNCTION-CALL-STRING is text designed to convey to the user
+     that this frame is associated with a function call made by GDB to a
+     function in the program being debugged.
+
+   *      ^Z^Zsignal-handler-caller
+          SIGNAL-HANDLER-CALLER-STRING
+
+     where SIGNAL-HANDLER-CALLER-STRING is text designed to convey to
+     the user that this frame is associated with whatever mechanism is
+     used by this operating system to call a signal handler (it is the
+     frame which calls the signal handler, not the frame for the signal
+     handler itself).
+
+   * A normal frame.
+
+     This can optionally (depending on whether this is thought of as
+     interesting information for the user to see) begin with
+
+          ^Z^Zframe-address
+          ADDRESS
+          ^Z^Zframe-address-end
+          SEPARATOR-STRING
+
+     where ADDRESS is the address executing in the frame (the same
+     address as in the 'frame-begin' annotation, but printed in a form
+     which is intended for user consumption--in particular, the syntax
+     varies depending on the language), and SEPARATOR-STRING is a string
+     intended to separate this address from what follows for the user's
+     benefit.
+
+     Then comes
+
+          ^Z^Zframe-function-name
+          FUNCTION-NAME
+          ^Z^Zframe-args
+          ARGUMENTS
+
+     where FUNCTION-NAME is the name of the function executing in the
+     frame, or '??' if not known, and ARGUMENTS are the arguments to the
+     frame, with parentheses around them (each argument is annotated
+     individually as well, *note Value Annotations::).
+
+     If source information is available, a reference to it is then
+     printed:
+
+          ^Z^Zframe-source-begin
+          SOURCE-INTRO-STRING
+          ^Z^Zframe-source-file
+          FILENAME
+          ^Z^Zframe-source-file-end
+          :
+          ^Z^Zframe-source-line
+          LINE-NUMBER
+          ^Z^Zframe-source-end
+
+     where SOURCE-INTRO-STRING separates for the user's benefit the
+     reference from the text which precedes it, FILENAME is the name of
+     the source file, and LINE-NUMBER is the line number within that
+     file (the first line is line 1).
+
+     If GDB prints some information about where the frame is from (which
+     library, which load segment, etc.; currently only done on the
+     RS/6000), it is annotated with
+
+          ^Z^Zframe-where
+          INFORMATION
+
+     Then, if source is to actually be displayed for this frame (for
+     example, this is not true for output from the 'backtrace' command),
+     then a 'source' annotation (*note Source Annotations::) is
+     displayed.  Unlike most annotations, this is output instead of the
+     normal text which would be output, not in addition.
+
+
+File: annotate.info,  Node: Displays,  Next: Prompting,  Prev: Frame Annotations,  Up: Top
+
+7 Displays
+**********
+
+_Display Annotations have been removed.  GDB/MI instead provides
+Variable Objects._
+
+   When GDB is told to display something using the 'display' command,
+the results of the display are annotated:
+
+     ^Z^Zdisplay-begin
+     NUMBER
+     ^Z^Zdisplay-number-end
+     NUMBER-SEPARATOR
+     ^Z^Zdisplay-format
+     FORMAT
+     ^Z^Zdisplay-expression
+     EXPRESSION
+     ^Z^Zdisplay-expression-end
+     EXPRESSION-SEPARATOR
+     ^Z^Zdisplay-value
+     VALUE
+     ^Z^Zdisplay-end
+
+where NUMBER is the number of the display, NUMBER-SEPARATOR is intended
+to separate the number from what follows for the user, FORMAT includes
+information such as the size, format, or other information about how the
+value is being displayed, EXPRESSION is the expression being displayed,
+EXPRESSION-SEPARATOR is intended to separate the expression from the
+text that follows for the user, and VALUE is the actual value being
+displayed.
+
+
+File: annotate.info,  Node: Prompting,  Next: Errors,  Prev: Displays,  Up: Top
+
+8 Annotation for GDB Input
+**************************
+
+When GDB prompts for input, it annotates this fact so it is possible to
+know when to send output, when the output from a given command is over,
+etc.
+
+   Different kinds of input each have a different "input type".  Each
+input type has three annotations: a 'pre-' annotation, which denotes the
+beginning of any prompt which is being output, a plain annotation, which
+denotes the end of the prompt, and then a 'post-' annotation which
+denotes the end of any echo which may (or may not) be associated with
+the input.  For example, the 'prompt' input type features the following
+annotations:
+
+     ^Z^Zpre-prompt
+     ^Z^Zprompt
+     ^Z^Zpost-prompt
+
+   The input types are
+
+'prompt'
+     When GDB is prompting for a command (the main GDB prompt).
+
+'commands'
+     When GDB prompts for a set of commands, like in the 'commands'
+     command.  The annotations are repeated for each command which is
+     input.
+
+'overload-choice'
+     When GDB wants the user to select between various overloaded
+     functions.
+
+'query'
+     When GDB wants the user to confirm a potentially dangerous
+     operation.
+
+'prompt-for-continue'
+     When GDB is asking the user to press return to continue.  Note:
+     Don't expect this to work well; instead use 'set height 0' to
+     disable prompting.  This is because the counting of lines is buggy
+     in the presence of annotations.
+
+
+File: annotate.info,  Node: Errors,  Next: Breakpoint Info,  Prev: Prompting,  Up: Top
+
+9 Errors
+********
+
+     ^Z^Zquit
+
+   This annotation occurs right before GDB responds to an interrupt.
+
+     ^Z^Zerror
+
+   This annotation occurs right before GDB responds to an error.
+
+   Quit and error annotations indicate that any annotations which GDB
+was in the middle of may end abruptly.  For example, if a
+'value-history-begin' annotation is followed by a 'error', one cannot
+expect to receive the matching 'value-history-end'.  One cannot expect
+not to receive it either, however; an error annotation does not
+necessarily mean that GDB is immediately returning all the way to the
+top level.
+
+   A quit or error annotation may be preceded by
+
+     ^Z^Zerror-begin
+
+   Any output between that and the quit or error annotation is the error
+message.
+
+   Warning messages are not yet annotated.
+
+
+File: annotate.info,  Node: Breakpoint Info,  Next: Invalidation,  Prev: Errors,  Up: Top
+
+10 Information on Breakpoints
+*****************************
+
+_Breakpoint Annotations have been removed.  GDB/MI instead provides
+breakpoint commands._
+
+   The output from the 'info breakpoints' command is annotated as
+follows:
+
+     ^Z^Zbreakpoints-headers
+     HEADER-ENTRY
+     ^Z^Zbreakpoints-table
+
+where HEADER-ENTRY has the same syntax as an entry (see below) but
+instead of containing data, it contains strings which are intended to
+convey the meaning of each field to the user.  This is followed by any
+number of entries.  If a field does not apply for this entry, it is
+omitted.  Fields may contain trailing whitespace.  Each entry consists
+of:
+
+     ^Z^Zrecord
+     ^Z^Zfield 0
+     NUMBER
+     ^Z^Zfield 1
+     TYPE
+     ^Z^Zfield 2
+     DISPOSITION
+     ^Z^Zfield 3
+     ENABLE
+     ^Z^Zfield 4
+     ADDRESS
+     ^Z^Zfield 5
+     WHAT
+     ^Z^Zfield 6
+     FRAME
+     ^Z^Zfield 7
+     CONDITION
+     ^Z^Zfield 8
+     IGNORE-COUNT
+     ^Z^Zfield 9
+     COMMANDS
+
+   Note that ADDRESS is intended for user consumption--the syntax varies
+depending on the language.
+
+   The output ends with
+
+     ^Z^Zbreakpoints-table-end
+
+
+File: annotate.info,  Node: Invalidation,  Next: Annotations for Running,  Prev: Breakpoint Info,  Up: Top
+
+11 Invalidation Notices
+***********************
+
+The following annotations say that certain pieces of state may have
+changed.
+
+'^Z^Zframes-invalid'
+
+     The frames (for example, output from the 'backtrace' command) may
+     have changed.
+
+'^Z^Zbreakpoints-invalid'
+
+     The breakpoints may have changed.  For example, the user just added
+     or deleted a breakpoint.
+
+
+File: annotate.info,  Node: Annotations for Running,  Next: Source Annotations,  Prev: Invalidation,  Up: Top
+
+12 Running the Program
+**********************
+
+When the program starts executing due to a GDB command such as 'step' or
+'continue',
+
+     ^Z^Zstarting
+
+   is output.  When the program stops,
+
+     ^Z^Zstopped
+
+   is output.  Before the 'stopped' annotation, a variety of annotations
+describe how the program stopped.
+
+'^Z^Zexited EXIT-STATUS'
+     The program exited, and EXIT-STATUS is the exit status (zero for
+     successful exit, otherwise nonzero).
+
+'^Z^Zsignalled'
+     The program exited with a signal.  After the '^Z^Zsignalled', the
+     annotation continues:
+
+          INTRO-TEXT
+          ^Z^Zsignal-name
+          NAME
+          ^Z^Zsignal-name-end
+          MIDDLE-TEXT
+          ^Z^Zsignal-string
+          STRING
+          ^Z^Zsignal-string-end
+          END-TEXT
+
+     where NAME is the name of the signal, such as 'SIGILL' or
+     'SIGSEGV', and STRING is the explanation of the signal, such as
+     'Illegal Instruction' or 'Segmentation fault'.  INTRO-TEXT,
+     MIDDLE-TEXT, and END-TEXT are for the user's benefit and have no
+     particular format.
+
+'^Z^Zsignal'
+     The syntax of this annotation is just like 'signalled', but GDB is
+     just saying that the program received the signal, not that it was
+     terminated with it.
+
+'^Z^Zbreakpoint NUMBER'
+     The program hit breakpoint number NUMBER.
+
+'^Z^Zwatchpoint NUMBER'
+     The program hit watchpoint number NUMBER.
+
+
+File: annotate.info,  Node: Source Annotations,  Next: Multi-threaded Apps,  Prev: Annotations for Running,  Up: Top
+
+13 Displaying Source
+********************
+
+The following annotation is used instead of displaying source code:
+
+     ^Z^Zsource FILENAME:LINE:CHARACTER:MIDDLE:ADDR
+
+   where FILENAME is an absolute file name indicating which source file,
+LINE is the line number within that file (where 1 is the first line in
+the file), CHARACTER is the character position within the file (where 0
+is the first character in the file) (for most debug formats this will
+necessarily point to the beginning of a line), MIDDLE is 'middle' if
+ADDR is in the middle of the line, or 'beg' if ADDR is at the beginning
+of the line, and ADDR is the address in the target program associated
+with the source which is being displayed.  ADDR is in the form '0x'
+followed by one or more lowercase hex digits (note that this does not
+depend on the language).
+
+
+File: annotate.info,  Node: Multi-threaded Apps,  Next: GNU Free Documentation License,  Prev: Source Annotations,  Up: Top
+
+14 Multi-threaded Applications
+******************************
+
+The following annotations report thread related changes of state.
+
+'^Z^Znew-thread'
+
+     This annotation is issued once for each thread that is created
+     apart from the main thread, which is not reported.
+
+'^Z^Zthread-changed'
+
+     The selected thread has changed.  This may occur at the request of
+     the user with the 'thread' command, or as a result of execution,
+     e.g., another thread hits a breakpoint.
+
+
+File: annotate.info,  Node: GNU Free Documentation License,  Prev: Multi-threaded Apps,  Up: Top
+
+Appendix A GNU Free Documentation License
+*****************************************
+
+                     Version 1.3, 3 November 2008
+
+     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+     <http://fsf.org/>
+
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+
+  0. PREAMBLE
+
+     The purpose of this License is to make a manual, textbook, or other
+     functional and useful document "free" in the sense of freedom: to
+     assure everyone the effective freedom to copy and redistribute it,
+     with or without modifying it, either commercially or
+     noncommercially.  Secondarily, this License preserves for the
+     author and publisher a way to get credit for their work, while not
+     being considered responsible for modifications made by others.
+
+     This License is a kind of "copyleft", which means that derivative
+     works of the document must themselves be free in the same sense.
+     It complements the GNU General Public License, which is a copyleft
+     license designed for free software.
+
+     We have designed this License in order to use it for manuals for
+     free software, because free software needs free documentation: a
+     free program should come with manuals providing the same freedoms
+     that the software does.  But this License is not limited to
+     software manuals; it can be used for any textual work, regardless
+     of subject matter or whether it is published as a printed book.  We
+     recommend this License principally for works whose purpose is
+     instruction or reference.
+
+  1. APPLICABILITY AND DEFINITIONS
+
+     This License applies to any manual or other work, in any medium,
+     that contains a notice placed by the copyright holder saying it can
+     be distributed under the terms of this License.  Such a notice
+     grants a world-wide, royalty-free license, unlimited in duration,
+     to use that work under the conditions stated herein.  The
+     "Document", below, refers to any such manual or work.  Any member
+     of the public is a licensee, and is addressed as "you".  You accept
+     the license if you copy, modify or distribute the work in a way
+     requiring permission under copyright law.
+
+     A "Modified Version" of the Document means any work containing the
+     Document or a portion of it, either copied verbatim, or with
+     modifications and/or translated into another language.
+
+     A "Secondary Section" is a named appendix or a front-matter section
+     of the Document that deals exclusively with the relationship of the
+     publishers or authors of the Document to the Document's overall
+     subject (or to related matters) and contains nothing that could
+     fall directly within that overall subject.  (Thus, if the Document
+     is in part a textbook of mathematics, a Secondary Section may not
+     explain any mathematics.)  The relationship could be a matter of
+     historical connection with the subject or with related matters, or
+     of legal, commercial, philosophical, ethical or political position
+     regarding them.
+
+     The "Invariant Sections" are certain Secondary Sections whose
+     titles are designated, as being those of Invariant Sections, in the
+     notice that says that the Document is released under this License.
+     If a section does not fit the above definition of Secondary then it
+     is not allowed to be designated as Invariant.  The Document may
+     contain zero Invariant Sections.  If the Document does not identify
+     any Invariant Sections then there are none.
+
+     The "Cover Texts" are certain short passages of text that are
+     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+     that says that the Document is released under this License.  A
+     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+     be at most 25 words.
+
+     A "Transparent" copy of the Document means a machine-readable copy,
+     represented in a format whose specification is available to the
+     general public, that is suitable for revising the document
+     straightforwardly with generic text editors or (for images composed
+     of pixels) generic paint programs or (for drawings) some widely
+     available drawing editor, and that is suitable for input to text
+     formatters or for automatic translation to a variety of formats
+     suitable for input to text formatters.  A copy made in an otherwise
+     Transparent file format whose markup, or absence of markup, has
+     been arranged to thwart or discourage subsequent modification by
+     readers is not Transparent.  An image format is not Transparent if
+     used for any substantial amount of text.  A copy that is not
+     "Transparent" is called "Opaque".
+
+     Examples of suitable formats for Transparent copies include plain
+     ASCII without markup, Texinfo input format, LaTeX input format,
+     SGML or XML using a publicly available DTD, and standard-conforming
+     simple HTML, PostScript or PDF designed for human modification.
+     Examples of transparent image formats include PNG, XCF and JPG.
+     Opaque formats include proprietary formats that can be read and
+     edited only by proprietary word processors, SGML or XML for which
+     the DTD and/or processing tools are not generally available, and
+     the machine-generated HTML, PostScript or PDF produced by some word
+     processors for output purposes only.
+
+     The "Title Page" means, for a printed book, the title page itself,
+     plus such following pages as are needed to hold, legibly, the
+     material this License requires to appear in the title page.  For
+     works in formats which do not have any title page as such, "Title
+     Page" means the text near the most prominent appearance of the
+     work's title, preceding the beginning of the body of the text.
+
+     The "publisher" means any person or entity that distributes copies
+     of the Document to the public.
+
+     A section "Entitled XYZ" means a named subunit of the Document
+     whose title either is precisely XYZ or contains XYZ in parentheses
+     following text that translates XYZ in another language.  (Here XYZ
+     stands for a specific section name mentioned below, such as
+     "Acknowledgements", "Dedications", "Endorsements", or "History".)
+     To "Preserve the Title" of such a section when you modify the
+     Document means that it remains a section "Entitled XYZ" according
+     to this definition.
+
+     The Document may include Warranty Disclaimers next to the notice
+     which states that this License applies to the Document.  These
+     Warranty Disclaimers are considered to be included by reference in
+     this License, but only as regards disclaiming warranties: any other
+     implication that these Warranty Disclaimers may have is void and
+     has no effect on the meaning of this License.
+
+  2. VERBATIM COPYING
+
+     You may copy and distribute the Document in any medium, either
+     commercially or noncommercially, provided that this License, the
+     copyright notices, and the license notice saying this License
+     applies to the Document are reproduced in all copies, and that you
+     add no other conditions whatsoever to those of this License.  You
+     may not use technical measures to obstruct or control the reading
+     or further copying of the copies you make or distribute.  However,
+     you may accept compensation in exchange for copies.  If you
+     distribute a large enough number of copies you must also follow the
+     conditions in section 3.
+
+     You may also lend copies, under the same conditions stated above,
+     and you may publicly display copies.
+
+  3. COPYING IN QUANTITY
+
+     If you publish printed copies (or copies in media that commonly
+     have printed covers) of the Document, numbering more than 100, and
+     the Document's license notice requires Cover Texts, you must
+     enclose the copies in covers that carry, clearly and legibly, all
+     these Cover Texts: Front-Cover Texts on the front cover, and
+     Back-Cover Texts on the back cover.  Both covers must also clearly
+     and legibly identify you as the publisher of these copies.  The
+     front cover must present the full title with all words of the title
+     equally prominent and visible.  You may add other material on the
+     covers in addition.  Copying with changes limited to the covers, as
+     long as they preserve the title of the Document and satisfy these
+     conditions, can be treated as verbatim copying in other respects.
+
+     If the required texts for either cover are too voluminous to fit
+     legibly, you should put the first ones listed (as many as fit
+     reasonably) on the actual cover, and continue the rest onto
+     adjacent pages.
+
+     If you publish or distribute Opaque copies of the Document
+     numbering more than 100, you must either include a machine-readable
+     Transparent copy along with each Opaque copy, or state in or with
+     each Opaque copy a computer-network location from which the general
+     network-using public has access to download using public-standard
+     network protocols a complete Transparent copy of the Document, free
+     of added material.  If you use the latter option, you must take
+     reasonably prudent steps, when you begin distribution of Opaque
+     copies in quantity, to ensure that this Transparent copy will
+     remain thus accessible at the stated location until at least one
+     year after the last time you distribute an Opaque copy (directly or
+     through your agents or retailers) of that edition to the public.
+
+     It is requested, but not required, that you contact the authors of
+     the Document well before redistributing any large number of copies,
+     to give them a chance to provide you with an updated version of the
+     Document.
+
+  4. MODIFICATIONS
+
+     You may copy and distribute a Modified Version of the Document
+     under the conditions of sections 2 and 3 above, provided that you
+     release the Modified Version under precisely this License, with the
+     Modified Version filling the role of the Document, thus licensing
+     distribution and modification of the Modified Version to whoever
+     possesses a copy of it.  In addition, you must do these things in
+     the Modified Version:
+
+       A. Use in the Title Page (and on the covers, if any) a title
+          distinct from that of the Document, and from those of previous
+          versions (which should, if there were any, be listed in the
+          History section of the Document).  You may use the same title
+          as a previous version if the original publisher of that
+          version gives permission.
+
+       B. List on the Title Page, as authors, one or more persons or
+          entities responsible for authorship of the modifications in
+          the Modified Version, together with at least five of the
+          principal authors of the Document (all of its principal
+          authors, if it has fewer than five), unless they release you
+          from this requirement.
+
+       C. State on the Title page the name of the publisher of the
+          Modified Version, as the publisher.
+
+       D. Preserve all the copyright notices of the Document.
+
+       E. Add an appropriate copyright notice for your modifications
+          adjacent to the other copyright notices.
+
+       F. Include, immediately after the copyright notices, a license
+          notice giving the public permission to use the Modified
+          Version under the terms of this License, in the form shown in
+          the Addendum below.
+
+       G. Preserve in that license notice the full lists of Invariant
+          Sections and required Cover Texts given in the Document's
+          license notice.
+
+       H. Include an unaltered copy of this License.
+
+       I. Preserve the section Entitled "History", Preserve its Title,
+          and add to it an item stating at least the title, year, new
+          authors, and publisher of the Modified Version as given on the
+          Title Page.  If there is no section Entitled "History" in the
+          Document, create one stating the title, year, authors, and
+          publisher of the Document as given on its Title Page, then add
+          an item describing the Modified Version as stated in the
+          previous sentence.
+
+       J. Preserve the network location, if any, given in the Document
+          for public access to a Transparent copy of the Document, and
+          likewise the network locations given in the Document for
+          previous versions it was based on.  These may be placed in the
+          "History" section.  You may omit a network location for a work
+          that was published at least four years before the Document
+          itself, or if the original publisher of the version it refers
+          to gives permission.
+
+       K. For any section Entitled "Acknowledgements" or "Dedications",
+          Preserve the Title of the section, and preserve in the section
+          all the substance and tone of each of the contributor
+          acknowledgements and/or dedications given therein.
+
+       L. Preserve all the Invariant Sections of the Document, unaltered
+          in their text and in their titles.  Section numbers or the
+          equivalent are not considered part of the section titles.
+
+       M. Delete any section Entitled "Endorsements".  Such a section
+          may not be included in the Modified Version.
+
+       N. Do not retitle any existing section to be Entitled
+          "Endorsements" or to conflict in title with any Invariant
+          Section.
+
+       O. Preserve any Warranty Disclaimers.
+
+     If the Modified Version includes new front-matter sections or
+     appendices that qualify as Secondary Sections and contain no
+     material copied from the Document, you may at your option designate
+     some or all of these sections as invariant.  To do this, add their
+     titles to the list of Invariant Sections in the Modified Version's
+     license notice.  These titles must be distinct from any other
+     section titles.
+
+     You may add a section Entitled "Endorsements", provided it contains
+     nothing but endorsements of your Modified Version by various
+     parties--for example, statements of peer review or that the text
+     has been approved by an organization as the authoritative
+     definition of a standard.
+
+     You may add a passage of up to five words as a Front-Cover Text,
+     and a passage of up to 25 words as a Back-Cover Text, to the end of
+     the list of Cover Texts in the Modified Version.  Only one passage
+     of Front-Cover Text and one of Back-Cover Text may be added by (or
+     through arrangements made by) any one entity.  If the Document
+     already includes a cover text for the same cover, previously added
+     by you or by arrangement made by the same entity you are acting on
+     behalf of, you may not add another; but you may replace the old
+     one, on explicit permission from the previous publisher that added
+     the old one.
+
+     The author(s) and publisher(s) of the Document do not by this
+     License give permission to use their names for publicity for or to
+     assert or imply endorsement of any Modified Version.
+
+  5. COMBINING DOCUMENTS
+
+     You may combine the Document with other documents released under
+     this License, under the terms defined in section 4 above for
+     modified versions, provided that you include in the combination all
+     of the Invariant Sections of all of the original documents,
+     unmodified, and list them all as Invariant Sections of your
+     combined work in its license notice, and that you preserve all
+     their Warranty Disclaimers.
+
+     The combined work need only contain one copy of this License, and
+     multiple identical Invariant Sections may be replaced with a single
+     copy.  If there are multiple Invariant Sections with the same name
+     but different contents, make the title of each such section unique
+     by adding at the end of it, in parentheses, the name of the
+     original author or publisher of that section if known, or else a
+     unique number.  Make the same adjustment to the section titles in
+     the list of Invariant Sections in the license notice of the
+     combined work.
+
+     In the combination, you must combine any sections Entitled
+     "History" in the various original documents, forming one section
+     Entitled "History"; likewise combine any sections Entitled
+     "Acknowledgements", and any sections Entitled "Dedications".  You
+     must delete all sections Entitled "Endorsements."
+
+  6. COLLECTIONS OF DOCUMENTS
+
+     You may make a collection consisting of the Document and other
+     documents released under this License, and replace the individual
+     copies of this License in the various documents with a single copy
+     that is included in the collection, provided that you follow the
+     rules of this License for verbatim copying of each of the documents
+     in all other respects.
+
+     You may extract a single document from such a collection, and
+     distribute it individually under this License, provided you insert
+     a copy of this License into the extracted document, and follow this
+     License in all other respects regarding verbatim copying of that
+     document.
+
+  7. AGGREGATION WITH INDEPENDENT WORKS
+
+     A compilation of the Document or its derivatives with other
+     separate and independent documents or works, in or on a volume of a
+     storage or distribution medium, is called an "aggregate" if the
+     copyright resulting from the compilation is not used to limit the
+     legal rights of the compilation's users beyond what the individual
+     works permit.  When the Document is included in an aggregate, this
+     License does not apply to the other works in the aggregate which
+     are not themselves derivative works of the Document.
+
+     If the Cover Text requirement of section 3 is applicable to these
+     copies of the Document, then if the Document is less than one half
+     of the entire aggregate, the Document's Cover Texts may be placed
+     on covers that bracket the Document within the aggregate, or the
+     electronic equivalent of covers if the Document is in electronic
+     form.  Otherwise they must appear on printed covers that bracket
+     the whole aggregate.
+
+  8. TRANSLATION
+
+     Translation is considered a kind of modification, so you may
+     distribute translations of the Document under the terms of section
+     4.  Replacing Invariant Sections with translations requires special
+     permission from their copyright holders, but you may include
+     translations of some or all Invariant Sections in addition to the
+     original versions of these Invariant Sections.  You may include a
+     translation of this License, and all the license notices in the
+     Document, and any Warranty Disclaimers, provided that you also
+     include the original English version of this License and the
+     original versions of those notices and disclaimers.  In case of a
+     disagreement between the translation and the original version of
+     this License or a notice or disclaimer, the original version will
+     prevail.
+
+     If a section in the Document is Entitled "Acknowledgements",
+     "Dedications", or "History", the requirement (section 4) to
+     Preserve its Title (section 1) will typically require changing the
+     actual title.
+
+  9. TERMINATION
+
+     You may not copy, modify, sublicense, or distribute the Document
+     except as expressly provided under this License.  Any attempt
+     otherwise to copy, modify, sublicense, or distribute it is void,
+     and will automatically terminate your rights under this License.
+
+     However, if you cease all violation of this License, then your
+     license from a particular copyright holder is reinstated (a)
+     provisionally, unless and until the copyright holder explicitly and
+     finally terminates your license, and (b) permanently, if the
+     copyright holder fails to notify you of the violation by some
+     reasonable means prior to 60 days after the cessation.
+
+     Moreover, your license from a particular copyright holder is
+     reinstated permanently if the copyright holder notifies you of the
+     violation by some reasonable means, this is the first time you have
+     received notice of violation of this License (for any work) from
+     that copyright holder, and you cure the violation prior to 30 days
+     after your receipt of the notice.
+
+     Termination of your rights under this section does not terminate
+     the licenses of parties who have received copies or rights from you
+     under this License.  If your rights have been terminated and not
+     permanently reinstated, receipt of a copy of some or all of the
+     same material does not give you any rights to use it.
+
+  10. FUTURE REVISIONS OF THIS LICENSE
+
+     The Free Software Foundation may publish new, revised versions of
+     the GNU Free Documentation License from time to time.  Such new
+     versions will be similar in spirit to the present version, but may
+     differ in detail to address new problems or concerns.  See
+     <http://www.gnu.org/copyleft/>.
+
+     Each version of the License is given a distinguishing version
+     number.  If the Document specifies that a particular numbered
+     version of this License "or any later version" applies to it, you
+     have the option of following the terms and conditions either of
+     that specified version or of any later version that has been
+     published (not as a draft) by the Free Software Foundation.  If the
+     Document does not specify a version number of this License, you may
+     choose any version ever published (not as a draft) by the Free
+     Software Foundation.  If the Document specifies that a proxy can
+     decide which future versions of this License can be used, that
+     proxy's public statement of acceptance of a version permanently
+     authorizes you to choose that version for the Document.
+
+  11. RELICENSING
+
+     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+     World Wide Web server that publishes copyrightable works and also
+     provides prominent facilities for anybody to edit those works.  A
+     public wiki that anybody can edit is an example of such a server.
+     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+     site means any set of copyrightable works thus published on the MMC
+     site.
+
+     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+     license published by Creative Commons Corporation, a not-for-profit
+     corporation with a principal place of business in San Francisco,
+     California, as well as future copyleft versions of that license
+     published by that same organization.
+
+     "Incorporate" means to publish or republish a Document, in whole or
+     in part, as part of another Document.
+
+     An MMC is "eligible for relicensing" if it is licensed under this
+     License, and if all works that were first published under this
+     License somewhere other than this MMC, and subsequently
+     incorporated in whole or in part into the MMC, (1) had no cover
+     texts or invariant sections, and (2) were thus incorporated prior
+     to November 1, 2008.
+
+     The operator of an MMC Site may republish an MMC contained in the
+     site under CC-BY-SA on the same site at any time before August 1,
+     2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+       Copyright (C)  YEAR  YOUR NAME.
+       Permission is granted to copy, distribute and/or modify this document
+       under the terms of the GNU Free Documentation License, Version 1.3
+       or any later version published by the Free Software Foundation;
+       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+       Texts.  A copy of the license is included in the section entitled ``GNU
+       Free Documentation License''.
+
+   If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts."  line with this:
+
+         with the Invariant Sections being LIST THEIR TITLES, with
+         the Front-Cover Texts being LIST, and with the Back-Cover Texts
+         being LIST.
+
+   If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+   If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of free
+software license, such as the GNU General Public License, to permit
+their use in free software.
+
+
+
+Tag Table:
+Node: Top1166
+Node: Annotations Overview2336
+Node: Limitations4135
+Node: Migrating to GDB/MI6720
+Node: Server Prefix7103
+Node: Value Annotations7749
+Node: Frame Annotations10919
+Node: Displays14818
+Node: Prompting15849
+Node: Errors17352
+Node: Breakpoint Info18242
+Node: Invalidation19467
+Node: Annotations for Running19948
+Node: Source Annotations21461
+Node: Multi-threaded Apps22407
+Node: GNU Free Documentation License23017
+
+End Tag Table
diff --git a/share/info/as.info b/share/info/as.info
new file mode 100644
index 0000000..13bf9c7
--- /dev/null
+++ b/share/info/as.info
Binary files differ
diff --git a/share/info/bfd.info b/share/info/bfd.info
new file mode 100644
index 0000000..7906330
--- /dev/null
+++ b/share/info/bfd.info
Binary files differ
diff --git a/share/info/binutils.info b/share/info/binutils.info
new file mode 100644
index 0000000..cf9a50b
--- /dev/null
+++ b/share/info/binutils.info
Binary files differ
diff --git a/share/info/cpp.info b/share/info/cpp.info
new file mode 100644
index 0000000..3d3bcd7
--- /dev/null
+++ b/share/info/cpp.info
Binary files differ
diff --git a/share/info/cppinternals.info b/share/info/cppinternals.info
new file mode 100644
index 0000000..6464a3c
--- /dev/null
+++ b/share/info/cppinternals.info
Binary files differ
diff --git a/share/info/dir b/share/info/dir
new file mode 100644
index 0000000..f1c9f27
--- /dev/null
+++ b/share/info/dir
@@ -0,0 +1,68 @@
+This is the file .../info/dir, which contains the
+topmost node of the Info hierarchy, called (dir)Top.
+The first time you invoke Info you start off looking at this node.
+
+File: dir,	Node: Top	This is the top of the INFO tree
+
+  This (the Directory node) gives a menu of major topics.
+  Typing "q" exits, "H" lists all Info commands, "d" returns here,
+  "h" gives a primer for first-timers,
+  "mEmacs<Return>" visits the Emacs manual, etc.
+
+  In Emacs, you can click mouse button 2 on a menu item or cross reference
+  to select it.
+
+* Menu:
+
+Individual utilities
+* addr2line: (binutils)addr2line.               Convert addresses to file and 
+                                                  line.
+* ar: (binutils)ar.                             Create, modify, and extract 
+                                                  from archives.
+* c++filt: (binutils)c++filt.                   Filter to demangle encoded C++ 
+                                                  symbols.
+* cxxfilt: (binutils)c++filt.                   MS-DOS name for c++filt.
+* dlltool: (binutils)dlltool.                   Create files needed to build 
+                                                  and use DLLs.
+* elfedit: (binutils)elfedit.                   Update ELF header and property 
+                                                  of ELF files.
+* nm: (binutils)nm.                             List symbols from object files.
+* objcopy: (binutils)objcopy.                   Copy and translate object 
+                                                  files.
+* objdump: (binutils)objdump.                   Display information from 
+                                                  object files.
+* ranlib: (binutils)ranlib.                     Generate index to archive 
+                                                  contents.
+* readelf: (binutils)readelf.                   Display the contents of ELF 
+                                                  format files.
+* size: (binutils)size.                         List section sizes and total 
+                                                  size.
+* strings: (binutils)strings.                   List printable strings from 
+                                                  files.
+* strip: (binutils)strip.                       Discard symbols.
+* windmc: (binutils)windmc.                     Generator for Windows message 
+                                                  resources.
+* windres: (binutils)windres.                   Manipulate Windows resources.
+
+Software development
+* Annotate: (annotate).         The obsolete annotation interface.
+* As: (as).                     The GNU assembler.
+* Bfd: (bfd).                   The Binary File Descriptor library.
+* Binutils: (binutils).         The GNU binary utilities.
+* Cpp: (cpp).                   The GNU C preprocessor.
+* Cpplib: (cppinternals).       Cpplib internals.
+* Gas: (as).                    The GNU assembler.
+* Gdb: (gdb).                   The GNU debugger.
+* Ld: (ld).                     The GNU linker.
+* Stabs: (stabs).               The "stabs" debugging information format.
+* g++: (gcc).                   The GNU C++ compiler.
+* gcc: (gcc).                   The GNU Compiler Collection.
+* gccinstall: (gccinstall).     Installing the GNU Compiler Collection.
+* gccint: (gccint).             Internals of the GNU Compiler Collection.
+* gcov: (gcc) Gcov.             'gcov'--a test coverage program.
+* gcov-dump: (gcc) Gcov-dump.   'gcov-dump'--an offline gcda and gcno profile 
+                                  dump tool.
+* gcov-tool: (gcc) Gcov-tool.   'gcov-tool'--an offline gcda profile 
+                                  processing program.
+* gdbserver: (gdb) Server.      The GNU debugging server.
+* gprof: (gprof).               Profiling your program's execution
diff --git a/share/info/gcc.info b/share/info/gcc.info
new file mode 100644
index 0000000..ebd82a3
--- /dev/null
+++ b/share/info/gcc.info
Binary files differ
diff --git a/share/info/gccinstall.info b/share/info/gccinstall.info
new file mode 100644
index 0000000..b4a516b
--- /dev/null
+++ b/share/info/gccinstall.info
Binary files differ
diff --git a/share/info/gccint.info b/share/info/gccint.info
new file mode 100644
index 0000000..3823746
--- /dev/null
+++ b/share/info/gccint.info
Binary files differ
diff --git a/share/info/gdb.info b/share/info/gdb.info
new file mode 100644
index 0000000..6bb1c56
--- /dev/null
+++ b/share/info/gdb.info
Binary files differ
diff --git a/share/info/gprof.info b/share/info/gprof.info
new file mode 100644
index 0000000..8d4f27c
--- /dev/null
+++ b/share/info/gprof.info
@@ -0,0 +1,2458 @@
+This is gprof.info, produced by makeinfo version 6.5 from gprof.texi.
+
+This file documents the gprof profiler of the GNU system.
+
+   Copyright (C) 1988-2019 Free Software Foundation, Inc.
+
+   Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.  A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* gprof: (gprof).                Profiling your program's execution
+END-INFO-DIR-ENTRY
+
+
+File: gprof.info,  Node: Top,  Next: Introduction,  Up: (dir)
+
+Profiling a Program: Where Does It Spend Its Time?
+**************************************************
+
+This manual describes the GNU profiler, 'gprof', and how you can use it
+to determine which parts of a program are taking most of the execution
+time.  We assume that you know how to write, compile, and execute
+programs.  GNU 'gprof' was written by Jay Fenlason.
+
+   This manual is for 'gprof' (GNU Binutils) version 2.32.
+
+   This document is distributed under the terms of the GNU Free
+Documentation License version 1.3.  A copy of the license is included in
+the section entitled "GNU Free Documentation License".
+
+* Menu:
+
+* Introduction::        What profiling means, and why it is useful.
+
+* Compiling::           How to compile your program for profiling.
+* Executing::           Executing your program to generate profile data
+* Invoking::            How to run 'gprof', and its options
+
+* Output::              Interpreting 'gprof''s output
+
+* Inaccuracy::          Potential problems you should be aware of
+* How do I?::           Answers to common questions
+* Incompatibilities::   (between GNU 'gprof' and Unix 'gprof'.)
+* Details::             Details of how profiling is done
+* GNU Free Documentation License::  GNU Free Documentation License
+
+
+File: gprof.info,  Node: Introduction,  Next: Compiling,  Prev: Top,  Up: Top
+
+1 Introduction to Profiling
+***************************
+
+Profiling allows you to learn where your program spent its time and
+which functions called which other functions while it was executing.
+This information can show you which pieces of your program are slower
+than you expected, and might be candidates for rewriting to make your
+program execute faster.  It can also tell you which functions are being
+called more or less often than you expected.  This may help you spot
+bugs that had otherwise been unnoticed.
+
+   Since the profiler uses information collected during the actual
+execution of your program, it can be used on programs that are too large
+or too complex to analyze by reading the source.  However, how your
+program is run will affect the information that shows up in the profile
+data.  If you don't use some feature of your program while it is being
+profiled, no profile information will be generated for that feature.
+
+   Profiling has several steps:
+
+   * You must compile and link your program with profiling enabled.
+     *Note Compiling a Program for Profiling: Compiling.
+
+   * You must execute your program to generate a profile data file.
+     *Note Executing the Program: Executing.
+
+   * You must run 'gprof' to analyze the profile data.  *Note 'gprof'
+     Command Summary: Invoking.
+
+   The next three chapters explain these steps in greater detail.
+
+   Several forms of output are available from the analysis.
+
+   The "flat profile" shows how much time your program spent in each
+function, and how many times that function was called.  If you simply
+want to know which functions burn most of the cycles, it is stated
+concisely here.  *Note The Flat Profile: Flat Profile.
+
+   The "call graph" shows, for each function, which functions called it,
+which other functions it called, and how many times.  There is also an
+estimate of how much time was spent in the subroutines of each function.
+This can suggest places where you might try to eliminate function calls
+that use a lot of time.  *Note The Call Graph: Call Graph.
+
+   The "annotated source" listing is a copy of the program's source
+code, labeled with the number of times each line of the program was
+executed.  *Note The Annotated Source Listing: Annotated Source.
+
+   To better understand how profiling works, you may wish to read a
+description of its implementation.  *Note Implementation of Profiling:
+Implementation.
+
+
+File: gprof.info,  Node: Compiling,  Next: Executing,  Prev: Introduction,  Up: Top
+
+2 Compiling a Program for Profiling
+***********************************
+
+The first step in generating profile information for your program is to
+compile and link it with profiling enabled.
+
+   To compile a source file for profiling, specify the '-pg' option when
+you run the compiler.  (This is in addition to the options you normally
+use.)
+
+   To link the program for profiling, if you use a compiler such as 'cc'
+to do the linking, simply specify '-pg' in addition to your usual
+options.  The same option, '-pg', alters either compilation or linking
+to do what is necessary for profiling.  Here are examples:
+
+     cc -g -c myprog.c utils.c -pg
+     cc -o myprog myprog.o utils.o -pg
+
+   The '-pg' option also works with a command that both compiles and
+links:
+
+     cc -o myprog myprog.c utils.c -g -pg
+
+   Note: The '-pg' option must be part of your compilation options as
+well as your link options.  If it is not then no call-graph data will be
+gathered and when you run 'gprof' you will get an error message like
+this:
+
+     gprof: gmon.out file is missing call-graph data
+
+   If you add the '-Q' switch to suppress the printing of the call graph
+data you will still be able to see the time samples:
+
+     Flat profile:
+
+     Each sample counts as 0.01 seconds.
+       %   cumulative   self              self     total
+      time   seconds   seconds    calls  Ts/call  Ts/call  name
+      44.12      0.07     0.07                             zazLoop
+      35.29      0.14     0.06                             main
+      20.59      0.17     0.04                             bazMillion
+
+   If you run the linker 'ld' directly instead of through a compiler
+such as 'cc', you may have to specify a profiling startup file 'gcrt0.o'
+as the first input file instead of the usual startup file 'crt0.o'.  In
+addition, you would probably want to specify the profiling C library,
+'libc_p.a', by writing '-lc_p' instead of the usual '-lc'.  This is not
+absolutely necessary, but doing this gives you number-of-calls
+information for standard library functions such as 'read' and 'open'.
+For example:
+
+     ld -o myprog /lib/gcrt0.o myprog.o utils.o -lc_p
+
+   If you are running the program on a system which supports shared
+libraries you may run into problems with the profiling support code in a
+shared library being called before that library has been fully
+initialised.  This is usually detected by the program encountering a
+segmentation fault as soon as it is run.  The solution is to link
+against a static version of the library containing the profiling support
+code, which for 'gcc' users can be done via the '-static' or
+'-static-libgcc' command-line option.  For example:
+
+     gcc -g -pg -static-libgcc myprog.c utils.c -o myprog
+
+   If you compile only some of the modules of the program with '-pg',
+you can still profile the program, but you won't get complete
+information about the modules that were compiled without '-pg'.  The
+only information you get for the functions in those modules is the total
+time spent in them; there is no record of how many times they were
+called, or from where.  This will not affect the flat profile (except
+that the 'calls' field for the functions will be blank), but will
+greatly reduce the usefulness of the call graph.
+
+   If you wish to perform line-by-line profiling you should use the
+'gcov' tool instead of 'gprof'.  See that tool's manual or info pages
+for more details of how to do this.
+
+   Note, older versions of 'gcc' produce line-by-line profiling
+information that works with 'gprof' rather than 'gcov' so there is still
+support for displaying this kind of information in 'gprof'.  *Note
+Line-by-line Profiling: Line-by-line.
+
+   It also worth noting that 'gcc' implements a '-finstrument-functions'
+command-line option which will insert calls to special user supplied
+instrumentation routines at the entry and exit of every function in
+their program.  This can be used to implement an alternative profiling
+scheme.
+
+
+File: gprof.info,  Node: Executing,  Next: Invoking,  Prev: Compiling,  Up: Top
+
+3 Executing the Program
+***********************
+
+Once the program is compiled for profiling, you must run it in order to
+generate the information that 'gprof' needs.  Simply run the program as
+usual, using the normal arguments, file names, etc.  The program should
+run normally, producing the same output as usual.  It will, however, run
+somewhat slower than normal because of the time spent collecting and
+writing the profile data.
+
+   The way you run the program--the arguments and input that you give
+it--may have a dramatic effect on what the profile information shows.
+The profile data will describe the parts of the program that were
+activated for the particular input you use.  For example, if the first
+command you give to your program is to quit, the profile data will show
+the time used in initialization and in cleanup, but not much else.
+
+   Your program will write the profile data into a file called
+'gmon.out' just before exiting.  If there is already a file called
+'gmon.out', its contents are overwritten.  There is currently no way to
+tell the program to write the profile data under a different name, but
+you can rename the file afterwards if you are concerned that it may be
+overwritten.
+
+   In order to write the 'gmon.out' file properly, your program must
+exit normally: by returning from 'main' or by calling 'exit'.  Calling
+the low-level function '_exit' does not write the profile data, and
+neither does abnormal termination due to an unhandled signal.
+
+   The 'gmon.out' file is written in the program's _current working
+directory_ at the time it exits.  This means that if your program calls
+'chdir', the 'gmon.out' file will be left in the last directory your
+program 'chdir''d to.  If you don't have permission to write in this
+directory, the file is not written, and you will get an error message.
+
+   Older versions of the GNU profiling library may also write a file
+called 'bb.out'.  This file, if present, contains an human-readable
+listing of the basic-block execution counts.  Unfortunately, the
+appearance of a human-readable 'bb.out' means the basic-block counts
+didn't get written into 'gmon.out'.  The Perl script 'bbconv.pl',
+included with the 'gprof' source distribution, will convert a 'bb.out'
+file into a format readable by 'gprof'.  Invoke it like this:
+
+     bbconv.pl < bb.out > BH-DATA
+
+   This translates the information in 'bb.out' into a form that 'gprof'
+can understand.  But you still need to tell 'gprof' about the existence
+of this translated information.  To do that, include BB-DATA on the
+'gprof' command line, _along with 'gmon.out'_, like this:
+
+     gprof OPTIONS EXECUTABLE-FILE gmon.out BB-DATA [YET-MORE-PROFILE-DATA-FILES...] [> OUTFILE]
+
+
+File: gprof.info,  Node: Invoking,  Next: Output,  Prev: Executing,  Up: Top
+
+4 'gprof' Command Summary
+*************************
+
+After you have a profile data file 'gmon.out', you can run 'gprof' to
+interpret the information in it.  The 'gprof' program prints a flat
+profile and a call graph on standard output.  Typically you would
+redirect the output of 'gprof' into a file with '>'.
+
+   You run 'gprof' like this:
+
+     gprof OPTIONS [EXECUTABLE-FILE [PROFILE-DATA-FILES...]] [> OUTFILE]
+
+Here square-brackets indicate optional arguments.
+
+   If you omit the executable file name, the file 'a.out' is used.  If
+you give no profile data file name, the file 'gmon.out' is used.  If any
+file is not in the proper format, or if the profile data file does not
+appear to belong to the executable file, an error message is printed.
+
+   You can give more than one profile data file by entering all their
+names after the executable file name; then the statistics in all the
+data files are summed together.
+
+   The order of these options does not matter.
+
+* Menu:
+
+* Output Options::      Controlling 'gprof''s output style
+* Analysis Options::    Controlling how 'gprof' analyzes its data
+* Miscellaneous Options::
+* Deprecated Options::  Options you no longer need to use, but which
+                            have been retained for compatibility
+* Symspecs::            Specifying functions to include or exclude
+
+
+File: gprof.info,  Node: Output Options,  Next: Analysis Options,  Up: Invoking
+
+4.1 Output Options
+==================
+
+These options specify which of several output formats 'gprof' should
+produce.
+
+   Many of these options take an optional "symspec" to specify functions
+to be included or excluded.  These options can be specified multiple
+times, with different symspecs, to include or exclude sets of symbols.
+*Note Symspecs: Symspecs.
+
+   Specifying any of these options overrides the default ('-p -q'),
+which prints a flat profile and call graph analysis for all functions.
+
+'-A[SYMSPEC]'
+'--annotated-source[=SYMSPEC]'
+     The '-A' option causes 'gprof' to print annotated source code.  If
+     SYMSPEC is specified, print output only for matching symbols.
+     *Note The Annotated Source Listing: Annotated Source.
+
+'-b'
+'--brief'
+     If the '-b' option is given, 'gprof' doesn't print the verbose
+     blurbs that try to explain the meaning of all of the fields in the
+     tables.  This is useful if you intend to print out the output, or
+     are tired of seeing the blurbs.
+
+'-C[SYMSPEC]'
+'--exec-counts[=SYMSPEC]'
+     The '-C' option causes 'gprof' to print a tally of functions and
+     the number of times each was called.  If SYMSPEC is specified,
+     print tally only for matching symbols.
+
+     If the profile data file contains basic-block count records,
+     specifying the '-l' option, along with '-C', will cause basic-block
+     execution counts to be tallied and displayed.
+
+'-i'
+'--file-info'
+     The '-i' option causes 'gprof' to display summary information about
+     the profile data file(s) and then exit.  The number of histogram,
+     call graph, and basic-block count records is displayed.
+
+'-I DIRS'
+'--directory-path=DIRS'
+     The '-I' option specifies a list of search directories in which to
+     find source files.  Environment variable GPROF_PATH can also be
+     used to convey this information.  Used mostly for annotated source
+     output.
+
+'-J[SYMSPEC]'
+'--no-annotated-source[=SYMSPEC]'
+     The '-J' option causes 'gprof' not to print annotated source code.
+     If SYMSPEC is specified, 'gprof' prints annotated source, but
+     excludes matching symbols.
+
+'-L'
+'--print-path'
+     Normally, source filenames are printed with the path component
+     suppressed.  The '-L' option causes 'gprof' to print the full
+     pathname of source filenames, which is determined from symbolic
+     debugging information in the image file and is relative to the
+     directory in which the compiler was invoked.
+
+'-p[SYMSPEC]'
+'--flat-profile[=SYMSPEC]'
+     The '-p' option causes 'gprof' to print a flat profile.  If SYMSPEC
+     is specified, print flat profile only for matching symbols.  *Note
+     The Flat Profile: Flat Profile.
+
+'-P[SYMSPEC]'
+'--no-flat-profile[=SYMSPEC]'
+     The '-P' option causes 'gprof' to suppress printing a flat profile.
+     If SYMSPEC is specified, 'gprof' prints a flat profile, but
+     excludes matching symbols.
+
+'-q[SYMSPEC]'
+'--graph[=SYMSPEC]'
+     The '-q' option causes 'gprof' to print the call graph analysis.
+     If SYMSPEC is specified, print call graph only for matching symbols
+     and their children.  *Note The Call Graph: Call Graph.
+
+'-Q[SYMSPEC]'
+'--no-graph[=SYMSPEC]'
+     The '-Q' option causes 'gprof' to suppress printing the call graph.
+     If SYMSPEC is specified, 'gprof' prints a call graph, but excludes
+     matching symbols.
+
+'-t'
+'--table-length=NUM'
+     The '-t' option causes the NUM most active source lines in each
+     source file to be listed when source annotation is enabled.  The
+     default is 10.
+
+'-y'
+'--separate-files'
+     This option affects annotated source output only.  Normally,
+     'gprof' prints annotated source files to standard-output.  If this
+     option is specified, annotated source for a file named
+     'path/FILENAME' is generated in the file 'FILENAME-ann'.  If the
+     underlying file system would truncate 'FILENAME-ann' so that it
+     overwrites the original 'FILENAME', 'gprof' generates annotated
+     source in the file 'FILENAME.ann' instead (if the original file
+     name has an extension, that extension is _replaced_ with '.ann').
+
+'-Z[SYMSPEC]'
+'--no-exec-counts[=SYMSPEC]'
+     The '-Z' option causes 'gprof' not to print a tally of functions
+     and the number of times each was called.  If SYMSPEC is specified,
+     print tally, but exclude matching symbols.
+
+'-r'
+'--function-ordering'
+     The '--function-ordering' option causes 'gprof' to print a
+     suggested function ordering for the program based on profiling
+     data.  This option suggests an ordering which may improve paging,
+     tlb and cache behavior for the program on systems which support
+     arbitrary ordering of functions in an executable.
+
+     The exact details of how to force the linker to place functions in
+     a particular order is system dependent and out of the scope of this
+     manual.
+
+'-R MAP_FILE'
+'--file-ordering MAP_FILE'
+     The '--file-ordering' option causes 'gprof' to print a suggested .o
+     link line ordering for the program based on profiling data.  This
+     option suggests an ordering which may improve paging, tlb and cache
+     behavior for the program on systems which do not support arbitrary
+     ordering of functions in an executable.
+
+     Use of the '-a' argument is highly recommended with this option.
+
+     The MAP_FILE argument is a pathname to a file which provides
+     function name to object file mappings.  The format of the file is
+     similar to the output of the program 'nm'.
+
+          c-parse.o:00000000 T yyparse
+          c-parse.o:00000004 C yyerrflag
+          c-lang.o:00000000 T maybe_objc_method_name
+          c-lang.o:00000000 T print_lang_statistics
+          c-lang.o:00000000 T recognize_objc_keyword
+          c-decl.o:00000000 T print_lang_identifier
+          c-decl.o:00000000 T print_lang_type
+          ...
+
+
+     To create a MAP_FILE with GNU 'nm', type a command like 'nm
+     --extern-only --defined-only -v --print-file-name program-name'.
+
+'-T'
+'--traditional'
+     The '-T' option causes 'gprof' to print its output in "traditional"
+     BSD style.
+
+'-w WIDTH'
+'--width=WIDTH'
+     Sets width of output lines to WIDTH.  Currently only used when
+     printing the function index at the bottom of the call graph.
+
+'-x'
+'--all-lines'
+     This option affects annotated source output only.  By default, only
+     the lines at the beginning of a basic-block are annotated.  If this
+     option is specified, every line in a basic-block is annotated by
+     repeating the annotation for the first line.  This behavior is
+     similar to 'tcov''s '-a'.
+
+'--demangle[=STYLE]'
+'--no-demangle'
+     These options control whether C++ symbol names should be demangled
+     when printing output.  The default is to demangle symbols.  The
+     '--no-demangle' option may be used to turn off demangling.
+     Different compilers have different mangling styles.  The optional
+     demangling style argument can be used to choose an appropriate
+     demangling style for your compiler.
+
+
+File: gprof.info,  Node: Analysis Options,  Next: Miscellaneous Options,  Prev: Output Options,  Up: Invoking
+
+4.2 Analysis Options
+====================
+
+'-a'
+'--no-static'
+     The '-a' option causes 'gprof' to suppress the printing of
+     statically declared (private) functions.  (These are functions
+     whose names are not listed as global, and which are not visible
+     outside the file/function/block where they were defined.)  Time
+     spent in these functions, calls to/from them, etc., will all be
+     attributed to the function that was loaded directly before it in
+     the executable file.  This option affects both the flat profile and
+     the call graph.
+
+'-c'
+'--static-call-graph'
+     The '-c' option causes the call graph of the program to be
+     augmented by a heuristic which examines the text space of the
+     object file and identifies function calls in the binary machine
+     code.  Since normal call graph records are only generated when
+     functions are entered, this option identifies children that could
+     have been called, but never were.  Calls to functions that were not
+     compiled with profiling enabled are also identified, but only if
+     symbol table entries are present for them.  Calls to dynamic
+     library routines are typically _not_ found by this option.  Parents
+     or children identified via this heuristic are indicated in the call
+     graph with call counts of '0'.
+
+'-D'
+'--ignore-non-functions'
+     The '-D' option causes 'gprof' to ignore symbols which are not
+     known to be functions.  This option will give more accurate profile
+     data on systems where it is supported (Solaris and HPUX for
+     example).
+
+'-k FROM/TO'
+     The '-k' option allows you to delete from the call graph any arcs
+     from symbols matching symspec FROM to those matching symspec TO.
+
+'-l'
+'--line'
+     The '-l' option enables line-by-line profiling, which causes
+     histogram hits to be charged to individual source code lines,
+     instead of functions.  This feature only works with programs
+     compiled by older versions of the 'gcc' compiler.  Newer versions
+     of 'gcc' are designed to work with the 'gcov' tool instead.
+
+     If the program was compiled with basic-block counting enabled, this
+     option will also identify how many times each line of code was
+     executed.  While line-by-line profiling can help isolate where in a
+     large function a program is spending its time, it also
+     significantly increases the running time of 'gprof', and magnifies
+     statistical inaccuracies.  *Note Statistical Sampling Error:
+     Sampling Error.
+
+'--inline-file-names'
+     This option causes 'gprof' to print the source file after each
+     symbol in both the flat profile and the call graph.  The full path
+     to the file is printed if used with the '-L' option.
+
+'-m NUM'
+'--min-count=NUM'
+     This option affects execution count output only.  Symbols that are
+     executed less than NUM times are suppressed.
+
+'-nSYMSPEC'
+'--time=SYMSPEC'
+     The '-n' option causes 'gprof', in its call graph analysis, to only
+     propagate times for symbols matching SYMSPEC.
+
+'-NSYMSPEC'
+'--no-time=SYMSPEC'
+     The '-n' option causes 'gprof', in its call graph analysis, not to
+     propagate times for symbols matching SYMSPEC.
+
+'-SFILENAME'
+'--external-symbol-table=FILENAME'
+     The '-S' option causes 'gprof' to read an external symbol table
+     file, such as '/proc/kallsyms', rather than read the symbol table
+     from the given object file (the default is 'a.out').  This is
+     useful for profiling kernel modules.
+
+'-z'
+'--display-unused-functions'
+     If you give the '-z' option, 'gprof' will mention all functions in
+     the flat profile, even those that were never called, and that had
+     no time spent in them.  This is useful in conjunction with the '-c'
+     option for discovering which routines were never called.
+
+
+File: gprof.info,  Node: Miscellaneous Options,  Next: Deprecated Options,  Prev: Analysis Options,  Up: Invoking
+
+4.3 Miscellaneous Options
+=========================
+
+'-d[NUM]'
+'--debug[=NUM]'
+     The '-d NUM' option specifies debugging options.  If NUM is not
+     specified, enable all debugging.  *Note Debugging 'gprof':
+     Debugging.
+
+'-h'
+'--help'
+     The '-h' option prints command line usage.
+
+'-ONAME'
+'--file-format=NAME'
+     Selects the format of the profile data files.  Recognized formats
+     are 'auto' (the default), 'bsd', '4.4bsd', 'magic', and 'prof' (not
+     yet supported).
+
+'-s'
+'--sum'
+     The '-s' option causes 'gprof' to summarize the information in the
+     profile data files it read in, and write out a profile data file
+     called 'gmon.sum', which contains all the information from the
+     profile data files that 'gprof' read in.  The file 'gmon.sum' may
+     be one of the specified input files; the effect of this is to merge
+     the data in the other input files into 'gmon.sum'.
+
+     Eventually you can run 'gprof' again without '-s' to analyze the
+     cumulative data in the file 'gmon.sum'.
+
+'-v'
+'--version'
+     The '-v' flag causes 'gprof' to print the current version number,
+     and then exit.
+
+
+File: gprof.info,  Node: Deprecated Options,  Next: Symspecs,  Prev: Miscellaneous Options,  Up: Invoking
+
+4.4 Deprecated Options
+======================
+
+These options have been replaced with newer versions that use symspecs.
+
+'-e FUNCTION_NAME'
+     The '-e FUNCTION' option tells 'gprof' to not print information
+     about the function FUNCTION_NAME (and its children...) in the call
+     graph.  The function will still be listed as a child of any
+     functions that call it, but its index number will be shown as '[not
+     printed]'.  More than one '-e' option may be given; only one
+     FUNCTION_NAME may be indicated with each '-e' option.
+
+'-E FUNCTION_NAME'
+     The '-E FUNCTION' option works like the '-e' option, but time spent
+     in the function (and children who were not called from anywhere
+     else), will not be used to compute the percentages-of-time for the
+     call graph.  More than one '-E' option may be given; only one
+     FUNCTION_NAME may be indicated with each '-E' option.
+
+'-f FUNCTION_NAME'
+     The '-f FUNCTION' option causes 'gprof' to limit the call graph to
+     the function FUNCTION_NAME and its children (and their
+     children...).  More than one '-f' option may be given; only one
+     FUNCTION_NAME may be indicated with each '-f' option.
+
+'-F FUNCTION_NAME'
+     The '-F FUNCTION' option works like the '-f' option, but only time
+     spent in the function and its children (and their children...) will
+     be used to determine total-time and percentages-of-time for the
+     call graph.  More than one '-F' option may be given; only one
+     FUNCTION_NAME may be indicated with each '-F' option.  The '-F'
+     option overrides the '-E' option.
+
+   Note that only one function can be specified with each '-e', '-E',
+'-f' or '-F' option.  To specify more than one function, use multiple
+options.  For example, this command:
+
+     gprof -e boring -f foo -f bar myprogram > gprof.output
+
+lists in the call graph all functions that were reached from either
+'foo' or 'bar' and were not reachable from 'boring'.
+
+
+File: gprof.info,  Node: Symspecs,  Prev: Deprecated Options,  Up: Invoking
+
+4.5 Symspecs
+============
+
+Many of the output options allow functions to be included or excluded
+using "symspecs" (symbol specifications), which observe the following
+syntax:
+
+       filename_containing_a_dot
+     | funcname_not_containing_a_dot
+     | linenumber
+     | ( [ any_filename ] `:' ( any_funcname | linenumber ) )
+
+   Here are some sample symspecs:
+
+'main.c'
+     Selects everything in file 'main.c'--the dot in the string tells
+     'gprof' to interpret the string as a filename, rather than as a
+     function name.  To select a file whose name does not contain a dot,
+     a trailing colon should be specified.  For example, 'odd:' is
+     interpreted as the file named 'odd'.
+
+'main'
+     Selects all functions named 'main'.
+
+     Note that there may be multiple instances of the same function name
+     because some of the definitions may be local (i.e., static).
+     Unless a function name is unique in a program, you must use the
+     colon notation explained below to specify a function from a
+     specific source file.
+
+     Sometimes, function names contain dots.  In such cases, it is
+     necessary to add a leading colon to the name.  For example, ':.mul'
+     selects function '.mul'.
+
+     In some object file formats, symbols have a leading underscore.
+     'gprof' will normally not print these underscores.  When you name a
+     symbol in a symspec, you should type it exactly as 'gprof' prints
+     it in its output.  For example, if the compiler produces a symbol
+     '_main' from your 'main' function, 'gprof' still prints it as
+     'main' in its output, so you should use 'main' in symspecs.
+
+'main.c:main'
+     Selects function 'main' in file 'main.c'.
+
+'main.c:134'
+     Selects line 134 in file 'main.c'.
+
+
+File: gprof.info,  Node: Output,  Next: Inaccuracy,  Prev: Invoking,  Up: Top
+
+5 Interpreting 'gprof''s Output
+*******************************
+
+'gprof' can produce several different output styles, the most important
+of which are described below.  The simplest output styles (file
+information, execution count, and function and file ordering) are not
+described here, but are documented with the respective options that
+trigger them.  *Note Output Options: Output Options.
+
+* Menu:
+
+* Flat Profile::        The flat profile shows how much time was spent
+                            executing directly in each function.
+* Call Graph::          The call graph shows which functions called which
+                            others, and how much time each function used
+                            when its subroutine calls are included.
+* Line-by-line::        'gprof' can analyze individual source code lines
+* Annotated Source::    The annotated source listing displays source code
+                            labeled with execution counts
+
+
+File: gprof.info,  Node: Flat Profile,  Next: Call Graph,  Up: Output
+
+5.1 The Flat Profile
+====================
+
+The "flat profile" shows the total amount of time your program spent
+executing each function.  Unless the '-z' option is given, functions
+with no apparent time spent in them, and no apparent calls to them, are
+not mentioned.  Note that if a function was not compiled for profiling,
+and didn't run long enough to show up on the program counter histogram,
+it will be indistinguishable from a function that was never called.
+
+   This is part of a flat profile for a small program:
+
+     Flat profile:
+
+     Each sample counts as 0.01 seconds.
+       %   cumulative   self              self     total
+      time   seconds   seconds    calls  ms/call  ms/call  name
+      33.34      0.02     0.02     7208     0.00     0.00  open
+      16.67      0.03     0.01      244     0.04     0.12  offtime
+      16.67      0.04     0.01        8     1.25     1.25  memccpy
+      16.67      0.05     0.01        7     1.43     1.43  write
+      16.67      0.06     0.01                             mcount
+       0.00      0.06     0.00      236     0.00     0.00  tzset
+       0.00      0.06     0.00      192     0.00     0.00  tolower
+       0.00      0.06     0.00       47     0.00     0.00  strlen
+       0.00      0.06     0.00       45     0.00     0.00  strchr
+       0.00      0.06     0.00        1     0.00    50.00  main
+       0.00      0.06     0.00        1     0.00     0.00  memcpy
+       0.00      0.06     0.00        1     0.00    10.11  print
+       0.00      0.06     0.00        1     0.00     0.00  profil
+       0.00      0.06     0.00        1     0.00    50.00  report
+     ...
+
+The functions are sorted first by decreasing run-time spent in them,
+then by decreasing number of calls, then alphabetically by name.  The
+functions 'mcount' and 'profil' are part of the profiling apparatus and
+appear in every flat profile; their time gives a measure of the amount
+of overhead due to profiling.
+
+   Just before the column headers, a statement appears indicating how
+much time each sample counted as.  This "sampling period" estimates the
+margin of error in each of the time figures.  A time figure that is not
+much larger than this is not reliable.  In this example, each sample
+counted as 0.01 seconds, suggesting a 100 Hz sampling rate.  The
+program's total execution time was 0.06 seconds, as indicated by the
+'cumulative seconds' field.  Since each sample counted for 0.01 seconds,
+this means only six samples were taken during the run.  Two of the
+samples occurred while the program was in the 'open' function, as
+indicated by the 'self seconds' field.  Each of the other four samples
+occurred one each in 'offtime', 'memccpy', 'write', and 'mcount'.  Since
+only six samples were taken, none of these values can be regarded as
+particularly reliable.  In another run, the 'self seconds' field for
+'mcount' might well be '0.00' or '0.02'.  *Note Statistical Sampling
+Error: Sampling Error, for a complete discussion.
+
+   The remaining functions in the listing (those whose 'self seconds'
+field is '0.00') didn't appear in the histogram samples at all.
+However, the call graph indicated that they were called, so therefore
+they are listed, sorted in decreasing order by the 'calls' field.
+Clearly some time was spent executing these functions, but the paucity
+of histogram samples prevents any determination of how much time each
+took.
+
+   Here is what the fields in each line mean:
+
+'% time'
+     This is the percentage of the total execution time your program
+     spent in this function.  These should all add up to 100%.
+
+'cumulative seconds'
+     This is the cumulative total number of seconds the computer spent
+     executing this functions, plus the time spent in all the functions
+     above this one in this table.
+
+'self seconds'
+     This is the number of seconds accounted for by this function alone.
+     The flat profile listing is sorted first by this number.
+
+'calls'
+     This is the total number of times the function was called.  If the
+     function was never called, or the number of times it was called
+     cannot be determined (probably because the function was not
+     compiled with profiling enabled), the "calls" field is blank.
+
+'self ms/call'
+     This represents the average number of milliseconds spent in this
+     function per call, if this function is profiled.  Otherwise, this
+     field is blank for this function.
+
+'total ms/call'
+     This represents the average number of milliseconds spent in this
+     function and its descendants per call, if this function is
+     profiled.  Otherwise, this field is blank for this function.  This
+     is the only field in the flat profile that uses call graph
+     analysis.
+
+'name'
+     This is the name of the function.  The flat profile is sorted by
+     this field alphabetically after the "self seconds" and "calls"
+     fields are sorted.
+
+
+File: gprof.info,  Node: Call Graph,  Next: Line-by-line,  Prev: Flat Profile,  Up: Output
+
+5.2 The Call Graph
+==================
+
+The "call graph" shows how much time was spent in each function and its
+children.  From this information, you can find functions that, while
+they themselves may not have used much time, called other functions that
+did use unusual amounts of time.
+
+   Here is a sample call from a small program.  This call came from the
+same 'gprof' run as the flat profile example in the previous section.
+
+     granularity: each sample hit covers 2 byte(s) for 20.00% of 0.05 seconds
+
+     index % time    self  children    called     name
+                                                      <spontaneous>
+     [1]    100.0    0.00    0.05                 start [1]
+                     0.00    0.05       1/1           main [2]
+                     0.00    0.00       1/2           on_exit [28]
+                     0.00    0.00       1/1           exit [59]
+     -----------------------------------------------
+                     0.00    0.05       1/1           start [1]
+     [2]    100.0    0.00    0.05       1         main [2]
+                     0.00    0.05       1/1           report [3]
+     -----------------------------------------------
+                     0.00    0.05       1/1           main [2]
+     [3]    100.0    0.00    0.05       1         report [3]
+                     0.00    0.03       8/8           timelocal [6]
+                     0.00    0.01       1/1           print [9]
+                     0.00    0.01       9/9           fgets [12]
+                     0.00    0.00      12/34          strncmp <cycle 1> [40]
+                     0.00    0.00       8/8           lookup [20]
+                     0.00    0.00       1/1           fopen [21]
+                     0.00    0.00       8/8           chewtime [24]
+                     0.00    0.00       8/16          skipspace [44]
+     -----------------------------------------------
+     [4]     59.8    0.01        0.02       8+472     <cycle 2 as a whole> [4]
+                     0.01        0.02     244+260         offtime <cycle 2> [7]
+                     0.00        0.00     236+1           tzset <cycle 2> [26]
+     -----------------------------------------------
+
+   The lines full of dashes divide this table into "entries", one for
+each function.  Each entry has one or more lines.
+
+   In each entry, the primary line is the one that starts with an index
+number in square brackets.  The end of this line says which function the
+entry is for.  The preceding lines in the entry describe the callers of
+this function and the following lines describe its subroutines (also
+called "children" when we speak of the call graph).
+
+   The entries are sorted by time spent in the function and its
+subroutines.
+
+   The internal profiling function 'mcount' (*note The Flat Profile:
+Flat Profile.) is never mentioned in the call graph.
+
+* Menu:
+
+* Primary::       Details of the primary line's contents.
+* Callers::       Details of caller-lines' contents.
+* Subroutines::   Details of subroutine-lines' contents.
+* Cycles::        When there are cycles of recursion,
+                   such as 'a' calls 'b' calls 'a'...
+
+
+File: gprof.info,  Node: Primary,  Next: Callers,  Up: Call Graph
+
+5.2.1 The Primary Line
+----------------------
+
+The "primary line" in a call graph entry is the line that describes the
+function which the entry is about and gives the overall statistics for
+this function.
+
+   For reference, we repeat the primary line from the entry for function
+'report' in our main example, together with the heading line that shows
+the names of the fields:
+
+     index  % time    self  children called     name
+     ...
+     [3]    100.0    0.00    0.05       1         report [3]
+
+   Here is what the fields in the primary line mean:
+
+'index'
+     Entries are numbered with consecutive integers.  Each function
+     therefore has an index number, which appears at the beginning of
+     its primary line.
+
+     Each cross-reference to a function, as a caller or subroutine of
+     another, gives its index number as well as its name.  The index
+     number guides you if you wish to look for the entry for that
+     function.
+
+'% time'
+     This is the percentage of the total time that was spent in this
+     function, including time spent in subroutines called from this
+     function.
+
+     The time spent in this function is counted again for the callers of
+     this function.  Therefore, adding up these percentages is
+     meaningless.
+
+'self'
+     This is the total amount of time spent in this function.  This
+     should be identical to the number printed in the 'seconds' field
+     for this function in the flat profile.
+
+'children'
+     This is the total amount of time spent in the subroutine calls made
+     by this function.  This should be equal to the sum of all the
+     'self' and 'children' entries of the children listed directly below
+     this function.
+
+'called'
+     This is the number of times the function was called.
+
+     If the function called itself recursively, there are two numbers,
+     separated by a '+'.  The first number counts non-recursive calls,
+     and the second counts recursive calls.
+
+     In the example above, the function 'report' was called once from
+     'main'.
+
+'name'
+     This is the name of the current function.  The index number is
+     repeated after it.
+
+     If the function is part of a cycle of recursion, the cycle number
+     is printed between the function's name and the index number (*note
+     How Mutually Recursive Functions Are Described: Cycles.).  For
+     example, if function 'gnurr' is part of cycle number one, and has
+     index number twelve, its primary line would be end like this:
+
+          gnurr <cycle 1> [12]
+
+
+File: gprof.info,  Node: Callers,  Next: Subroutines,  Prev: Primary,  Up: Call Graph
+
+5.2.2 Lines for a Function's Callers
+------------------------------------
+
+A function's entry has a line for each function it was called by.  These
+lines' fields correspond to the fields of the primary line, but their
+meanings are different because of the difference in context.
+
+   For reference, we repeat two lines from the entry for the function
+'report', the primary line and one caller-line preceding it, together
+with the heading line that shows the names of the fields:
+
+     index  % time    self  children called     name
+     ...
+                     0.00    0.05       1/1           main [2]
+     [3]    100.0    0.00    0.05       1         report [3]
+
+   Here are the meanings of the fields in the caller-line for 'report'
+called from 'main':
+
+'self'
+     An estimate of the amount of time spent in 'report' itself when it
+     was called from 'main'.
+
+'children'
+     An estimate of the amount of time spent in subroutines of 'report'
+     when 'report' was called from 'main'.
+
+     The sum of the 'self' and 'children' fields is an estimate of the
+     amount of time spent within calls to 'report' from 'main'.
+
+'called'
+     Two numbers: the number of times 'report' was called from 'main',
+     followed by the total number of non-recursive calls to 'report'
+     from all its callers.
+
+'name and index number'
+     The name of the caller of 'report' to which this line applies,
+     followed by the caller's index number.
+
+     Not all functions have entries in the call graph; some options to
+     'gprof' request the omission of certain functions.  When a caller
+     has no entry of its own, it still has caller-lines in the entries
+     of the functions it calls.
+
+     If the caller is part of a recursion cycle, the cycle number is
+     printed between the name and the index number.
+
+   If the identity of the callers of a function cannot be determined, a
+dummy caller-line is printed which has '<spontaneous>' as the "caller's
+name" and all other fields blank.  This can happen for signal handlers.
+
+
+File: gprof.info,  Node: Subroutines,  Next: Cycles,  Prev: Callers,  Up: Call Graph
+
+5.2.3 Lines for a Function's Subroutines
+----------------------------------------
+
+A function's entry has a line for each of its subroutines--in other
+words, a line for each other function that it called.  These lines'
+fields correspond to the fields of the primary line, but their meanings
+are different because of the difference in context.
+
+   For reference, we repeat two lines from the entry for the function
+'main', the primary line and a line for a subroutine, together with the
+heading line that shows the names of the fields:
+
+     index  % time    self  children called     name
+     ...
+     [2]    100.0    0.00    0.05       1         main [2]
+                     0.00    0.05       1/1           report [3]
+
+   Here are the meanings of the fields in the subroutine-line for 'main'
+calling 'report':
+
+'self'
+     An estimate of the amount of time spent directly within 'report'
+     when 'report' was called from 'main'.
+
+'children'
+     An estimate of the amount of time spent in subroutines of 'report'
+     when 'report' was called from 'main'.
+
+     The sum of the 'self' and 'children' fields is an estimate of the
+     total time spent in calls to 'report' from 'main'.
+
+'called'
+     Two numbers, the number of calls to 'report' from 'main' followed
+     by the total number of non-recursive calls to 'report'.  This ratio
+     is used to determine how much of 'report''s 'self' and 'children'
+     time gets credited to 'main'.  *Note Estimating 'children' Times:
+     Assumptions.
+
+'name'
+     The name of the subroutine of 'main' to which this line applies,
+     followed by the subroutine's index number.
+
+     If the caller is part of a recursion cycle, the cycle number is
+     printed between the name and the index number.
+
+
+File: gprof.info,  Node: Cycles,  Prev: Subroutines,  Up: Call Graph
+
+5.2.4 How Mutually Recursive Functions Are Described
+----------------------------------------------------
+
+The graph may be complicated by the presence of "cycles of recursion" in
+the call graph.  A cycle exists if a function calls another function
+that (directly or indirectly) calls (or appears to call) the original
+function.  For example: if 'a' calls 'b', and 'b' calls 'a', then 'a'
+and 'b' form a cycle.
+
+   Whenever there are call paths both ways between a pair of functions,
+they belong to the same cycle.  If 'a' and 'b' call each other and 'b'
+and 'c' call each other, all three make one cycle.  Note that even if
+'b' only calls 'a' if it was not called from 'a', 'gprof' cannot
+determine this, so 'a' and 'b' are still considered a cycle.
+
+   The cycles are numbered with consecutive integers.  When a function
+belongs to a cycle, each time the function name appears in the call
+graph it is followed by '<cycle NUMBER>'.
+
+   The reason cycles matter is that they make the time values in the
+call graph paradoxical.  The "time spent in children" of 'a' should
+include the time spent in its subroutine 'b' and in 'b''s
+subroutines--but one of 'b''s subroutines is 'a'!  How much of 'a''s
+time should be included in the children of 'a', when 'a' is indirectly
+recursive?
+
+   The way 'gprof' resolves this paradox is by creating a single entry
+for the cycle as a whole.  The primary line of this entry describes the
+total time spent directly in the functions of the cycle.  The
+"subroutines" of the cycle are the individual functions of the cycle,
+and all other functions that were called directly by them.  The
+"callers" of the cycle are the functions, outside the cycle, that called
+functions in the cycle.
+
+   Here is an example portion of a call graph which shows a cycle
+containing functions 'a' and 'b'.  The cycle was entered by a call to
+'a' from 'main'; both 'a' and 'b' called 'c'.
+
+     index  % time    self  children called     name
+     ----------------------------------------
+                      1.77        0    1/1        main [2]
+     [3]     91.71    1.77        0    1+5    <cycle 1 as a whole> [3]
+                      1.02        0    3          b <cycle 1> [4]
+                      0.75        0    2          a <cycle 1> [5]
+     ----------------------------------------
+                                       3          a <cycle 1> [5]
+     [4]     52.85    1.02        0    0      b <cycle 1> [4]
+                                       2          a <cycle 1> [5]
+                         0        0    3/6        c [6]
+     ----------------------------------------
+                      1.77        0    1/1        main [2]
+                                       2          b <cycle 1> [4]
+     [5]     38.86    0.75        0    1      a <cycle 1> [5]
+                                       3          b <cycle 1> [4]
+                         0        0    3/6        c [6]
+     ----------------------------------------
+
+(The entire call graph for this program contains in addition an entry
+for 'main', which calls 'a', and an entry for 'c', with callers 'a' and
+'b'.)
+
+     index  % time    self  children called     name
+                                                  <spontaneous>
+     [1]    100.00       0     1.93    0      start [1]
+                      0.16     1.77    1/1        main [2]
+     ----------------------------------------
+                      0.16     1.77    1/1        start [1]
+     [2]    100.00    0.16     1.77    1      main [2]
+                      1.77        0    1/1        a <cycle 1> [5]
+     ----------------------------------------
+                      1.77        0    1/1        main [2]
+     [3]     91.71    1.77        0    1+5    <cycle 1 as a whole> [3]
+                      1.02        0    3          b <cycle 1> [4]
+                      0.75        0    2          a <cycle 1> [5]
+                         0        0    6/6        c [6]
+     ----------------------------------------
+                                       3          a <cycle 1> [5]
+     [4]     52.85    1.02        0    0      b <cycle 1> [4]
+                                       2          a <cycle 1> [5]
+                         0        0    3/6        c [6]
+     ----------------------------------------
+                      1.77        0    1/1        main [2]
+                                       2          b <cycle 1> [4]
+     [5]     38.86    0.75        0    1      a <cycle 1> [5]
+                                       3          b <cycle 1> [4]
+                         0        0    3/6        c [6]
+     ----------------------------------------
+                         0        0    3/6        b <cycle 1> [4]
+                         0        0    3/6        a <cycle 1> [5]
+     [6]      0.00       0        0    6      c [6]
+     ----------------------------------------
+
+   The 'self' field of the cycle's primary line is the total time spent
+in all the functions of the cycle.  It equals the sum of the 'self'
+fields for the individual functions in the cycle, found in the entry in
+the subroutine lines for these functions.
+
+   The 'children' fields of the cycle's primary line and subroutine
+lines count only subroutines outside the cycle.  Even though 'a' calls
+'b', the time spent in those calls to 'b' is not counted in 'a''s
+'children' time.  Thus, we do not encounter the problem of what to do
+when the time in those calls to 'b' includes indirect recursive calls
+back to 'a'.
+
+   The 'children' field of a caller-line in the cycle's entry estimates
+the amount of time spent _in the whole cycle_, and its other
+subroutines, on the times when that caller called a function in the
+cycle.
+
+   The 'called' field in the primary line for the cycle has two numbers:
+first, the number of times functions in the cycle were called by
+functions outside the cycle; second, the number of times they were
+called by functions in the cycle (including times when a function in the
+cycle calls itself).  This is a generalization of the usual split into
+non-recursive and recursive calls.
+
+   The 'called' field of a subroutine-line for a cycle member in the
+cycle's entry says how many time that function was called from functions
+in the cycle.  The total of all these is the second number in the
+primary line's 'called' field.
+
+   In the individual entry for a function in a cycle, the other
+functions in the same cycle can appear as subroutines and as callers.
+These lines show how many times each function in the cycle called or was
+called from each other function in the cycle.  The 'self' and 'children'
+fields in these lines are blank because of the difficulty of defining
+meanings for them when recursion is going on.
+
+
+File: gprof.info,  Node: Line-by-line,  Next: Annotated Source,  Prev: Call Graph,  Up: Output
+
+5.3 Line-by-line Profiling
+==========================
+
+'gprof''s '-l' option causes the program to perform "line-by-line"
+profiling.  In this mode, histogram samples are assigned not to
+functions, but to individual lines of source code.  This only works with
+programs compiled with older versions of the 'gcc' compiler.  Newer
+versions of 'gcc' use a different program - 'gcov' - to display
+line-by-line profiling information.
+
+   With the older versions of 'gcc' the program usually has to be
+compiled with a '-g' option, in addition to '-pg', in order to generate
+debugging symbols for tracking source code lines.  Note, in much older
+versions of 'gcc' the program had to be compiled with the '-a'
+command-line option as well.
+
+   The flat profile is the most useful output table in line-by-line
+mode.  The call graph isn't as useful as normal, since the current
+version of 'gprof' does not propagate call graph arcs from source code
+lines to the enclosing function.  The call graph does, however, show
+each line of code that called each function, along with a count.
+
+   Here is a section of 'gprof''s output, without line-by-line
+profiling.  Note that 'ct_init' accounted for four histogram hits, and
+13327 calls to 'init_block'.
+
+     Flat profile:
+
+     Each sample counts as 0.01 seconds.
+       %   cumulative   self              self     total
+      time   seconds   seconds    calls  us/call  us/call  name
+      30.77      0.13     0.04     6335     6.31     6.31  ct_init
+
+
+     		     Call graph (explanation follows)
+
+
+     granularity: each sample hit covers 4 byte(s) for 7.69% of 0.13 seconds
+
+     index % time    self  children    called     name
+
+                     0.00    0.00       1/13496       name_too_long
+                     0.00    0.00      40/13496       deflate
+                     0.00    0.00     128/13496       deflate_fast
+                     0.00    0.00   13327/13496       ct_init
+     [7]      0.0    0.00    0.00   13496         init_block
+
+
+   Now let's look at some of 'gprof''s output from the same program run,
+this time with line-by-line profiling enabled.  Note that 'ct_init''s
+four histogram hits are broken down into four lines of source code--one
+hit occurred on each of lines 349, 351, 382 and 385.  In the call graph,
+note how 'ct_init''s 13327 calls to 'init_block' are broken down into
+one call from line 396, 3071 calls from line 384, 3730 calls from line
+385, and 6525 calls from 387.
+
+     Flat profile:
+
+     Each sample counts as 0.01 seconds.
+       %   cumulative   self
+      time   seconds   seconds    calls  name
+       7.69      0.10     0.01           ct_init (trees.c:349)
+       7.69      0.11     0.01           ct_init (trees.c:351)
+       7.69      0.12     0.01           ct_init (trees.c:382)
+       7.69      0.13     0.01           ct_init (trees.c:385)
+
+
+     		     Call graph (explanation follows)
+
+
+     granularity: each sample hit covers 4 byte(s) for 7.69% of 0.13 seconds
+
+       % time    self  children    called     name
+
+                 0.00    0.00       1/13496       name_too_long (gzip.c:1440)
+                 0.00    0.00       1/13496       deflate (deflate.c:763)
+                 0.00    0.00       1/13496       ct_init (trees.c:396)
+                 0.00    0.00       2/13496       deflate (deflate.c:727)
+                 0.00    0.00       4/13496       deflate (deflate.c:686)
+                 0.00    0.00       5/13496       deflate (deflate.c:675)
+                 0.00    0.00      12/13496       deflate (deflate.c:679)
+                 0.00    0.00      16/13496       deflate (deflate.c:730)
+                 0.00    0.00     128/13496       deflate_fast (deflate.c:654)
+                 0.00    0.00    3071/13496       ct_init (trees.c:384)
+                 0.00    0.00    3730/13496       ct_init (trees.c:385)
+                 0.00    0.00    6525/13496       ct_init (trees.c:387)
+     [6]  0.0    0.00    0.00   13496         init_block (trees.c:408)
+
+
+
+File: gprof.info,  Node: Annotated Source,  Prev: Line-by-line,  Up: Output
+
+5.4 The Annotated Source Listing
+================================
+
+'gprof''s '-A' option triggers an annotated source listing, which lists
+the program's source code, each function labeled with the number of
+times it was called.  You may also need to specify the '-I' option, if
+'gprof' can't find the source code files.
+
+   With older versions of 'gcc' compiling with 'gcc ... -g -pg -a'
+augments your program with basic-block counting code, in addition to
+function counting code.  This enables 'gprof' to determine how many
+times each line of code was executed.  With newer versions of 'gcc'
+support for displaying basic-block counts is provided by the 'gcov'
+program.
+
+   For example, consider the following function, taken from gzip, with
+line numbers added:
+
+      1 ulg updcrc(s, n)
+      2     uch *s;
+      3     unsigned n;
+      4 {
+      5     register ulg c;
+      6
+      7     static ulg crc = (ulg)0xffffffffL;
+      8
+      9     if (s == NULL) {
+     10         c = 0xffffffffL;
+     11     } else {
+     12         c = crc;
+     13         if (n) do {
+     14             c = crc_32_tab[...];
+     15         } while (--n);
+     16     }
+     17     crc = c;
+     18     return c ^ 0xffffffffL;
+     19 }
+
+
+   'updcrc' has at least five basic-blocks.  One is the function itself.
+The 'if' statement on line 9 generates two more basic-blocks, one for
+each branch of the 'if'.  A fourth basic-block results from the 'if' on
+line 13, and the contents of the 'do' loop form the fifth basic-block.
+The compiler may also generate additional basic-blocks to handle various
+special cases.
+
+   A program augmented for basic-block counting can be analyzed with
+'gprof -l -A'.  The '-x' option is also helpful, to ensure that each
+line of code is labeled at least once.  Here is 'updcrc''s annotated
+source listing for a sample 'gzip' run:
+
+                     ulg updcrc(s, n)
+                         uch *s;
+                         unsigned n;
+                 2 ->{
+                         register ulg c;
+
+                         static ulg crc = (ulg)0xffffffffL;
+
+                 2 ->    if (s == NULL) {
+                 1 ->        c = 0xffffffffL;
+                 1 ->    } else {
+                 1 ->        c = crc;
+                 1 ->        if (n) do {
+             26312 ->            c = crc_32_tab[...];
+     26312,1,26311 ->        } while (--n);
+                         }
+                 2 ->    crc = c;
+                 2 ->    return c ^ 0xffffffffL;
+                 2 ->}
+
+   In this example, the function was called twice, passing once through
+each branch of the 'if' statement.  The body of the 'do' loop was
+executed a total of 26312 times.  Note how the 'while' statement is
+annotated.  It began execution 26312 times, once for each iteration
+through the loop.  One of those times (the last time) it exited, while
+it branched back to the beginning of the loop 26311 times.
+
+
+File: gprof.info,  Node: Inaccuracy,  Next: How do I?,  Prev: Output,  Up: Top
+
+6 Inaccuracy of 'gprof' Output
+******************************
+
+* Menu:
+
+* Sampling Error::      Statistical margins of error
+* Assumptions::         Estimating children times
+
+
+File: gprof.info,  Node: Sampling Error,  Next: Assumptions,  Up: Inaccuracy
+
+6.1 Statistical Sampling Error
+==============================
+
+The run-time figures that 'gprof' gives you are based on a sampling
+process, so they are subject to statistical inaccuracy.  If a function
+runs only a small amount of time, so that on the average the sampling
+process ought to catch that function in the act only once, there is a
+pretty good chance it will actually find that function zero times, or
+twice.
+
+   By contrast, the number-of-calls and basic-block figures are derived
+by counting, not sampling.  They are completely accurate and will not
+vary from run to run if your program is deterministic and single
+threaded.  In multi-threaded applications, or single threaded
+applications that link with multi-threaded libraries, the counts are
+only deterministic if the counting function is thread-safe.  (Note:
+beware that the mcount counting function in glibc is _not_ thread-safe).
+*Note Implementation of Profiling: Implementation.
+
+   The "sampling period" that is printed at the beginning of the flat
+profile says how often samples are taken.  The rule of thumb is that a
+run-time figure is accurate if it is considerably bigger than the
+sampling period.
+
+   The actual amount of error can be predicted.  For N samples, the
+_expected_ error is the square-root of N.  For example, if the sampling
+period is 0.01 seconds and 'foo''s run-time is 1 second, N is 100
+samples (1 second/0.01 seconds), sqrt(N) is 10 samples, so the expected
+error in 'foo''s run-time is 0.1 seconds (10*0.01 seconds), or ten
+percent of the observed value.  Again, if the sampling period is 0.01
+seconds and 'bar''s run-time is 100 seconds, N is 10000 samples, sqrt(N)
+is 100 samples, so the expected error in 'bar''s run-time is 1 second,
+or one percent of the observed value.  It is likely to vary this much
+_on the average_ from one profiling run to the next.  (_Sometimes_ it
+will vary more.)
+
+   This does not mean that a small run-time figure is devoid of
+information.  If the program's _total_ run-time is large, a small
+run-time for one function does tell you that that function used an
+insignificant fraction of the whole program's time.  Usually this means
+it is not worth optimizing.
+
+   One way to get more accuracy is to give your program more (but
+similar) input data so it will take longer.  Another way is to combine
+the data from several runs, using the '-s' option of 'gprof'.  Here is
+how:
+
+  1. Run your program once.
+
+  2. Issue the command 'mv gmon.out gmon.sum'.
+
+  3. Run your program again, the same as before.
+
+  4. Merge the new data in 'gmon.out' into 'gmon.sum' with this command:
+
+          gprof -s EXECUTABLE-FILE gmon.out gmon.sum
+
+  5. Repeat the last two steps as often as you wish.
+
+  6. Analyze the cumulative data using this command:
+
+          gprof EXECUTABLE-FILE gmon.sum > OUTPUT-FILE
+
+
+File: gprof.info,  Node: Assumptions,  Prev: Sampling Error,  Up: Inaccuracy
+
+6.2 Estimating 'children' Times
+===============================
+
+Some of the figures in the call graph are estimates--for example, the
+'children' time values and all the time figures in caller and subroutine
+lines.
+
+   There is no direct information about these measurements in the
+profile data itself.  Instead, 'gprof' estimates them by making an
+assumption about your program that might or might not be true.
+
+   The assumption made is that the average time spent in each call to
+any function 'foo' is not correlated with who called 'foo'.  If 'foo'
+used 5 seconds in all, and 2/5 of the calls to 'foo' came from 'a', then
+'foo' contributes 2 seconds to 'a''s 'children' time, by assumption.
+
+   This assumption is usually true enough, but for some programs it is
+far from true.  Suppose that 'foo' returns very quickly when its
+argument is zero; suppose that 'a' always passes zero as an argument,
+while other callers of 'foo' pass other arguments.  In this program, all
+the time spent in 'foo' is in the calls from callers other than 'a'.
+But 'gprof' has no way of knowing this; it will blindly and incorrectly
+charge 2 seconds of time in 'foo' to the children of 'a'.
+
+   We hope some day to put more complete data into 'gmon.out', so that
+this assumption is no longer needed, if we can figure out how.  For the
+novice, the estimated figures are usually more useful than misleading.
+
+
+File: gprof.info,  Node: How do I?,  Next: Incompatibilities,  Prev: Inaccuracy,  Up: Top
+
+7 Answers to Common Questions
+*****************************
+
+How can I get more exact information about hot spots in my program?
+
+     Looking at the per-line call counts only tells part of the story.
+     Because 'gprof' can only report call times and counts by function,
+     the best way to get finer-grained information on where the program
+     is spending its time is to re-factor large functions into sequences
+     of calls to smaller ones.  Beware however that this can introduce
+     artificial hot spots since compiling with '-pg' adds a significant
+     overhead to function calls.  An alternative solution is to use a
+     non-intrusive profiler, e.g. oprofile.
+
+How do I find which lines in my program were executed the most times?
+
+     Use the 'gcov' program.
+
+How do I find which lines in my program called a particular function?
+
+     Use 'gprof -l' and lookup the function in the call graph.  The
+     callers will be broken down by function and line number.
+
+How do I analyze a program that runs for less than a second?
+
+     Try using a shell script like this one:
+
+          for i in `seq 1 100`; do
+            fastprog
+            mv gmon.out gmon.out.$i
+          done
+
+          gprof -s fastprog gmon.out.*
+
+          gprof fastprog gmon.sum
+
+     If your program is completely deterministic, all the call counts
+     will be simple multiples of 100 (i.e., a function called once in
+     each run will appear with a call count of 100).
+
+
+File: gprof.info,  Node: Incompatibilities,  Next: Details,  Prev: How do I?,  Up: Top
+
+8 Incompatibilities with Unix 'gprof'
+*************************************
+
+GNU 'gprof' and Berkeley Unix 'gprof' use the same data file 'gmon.out',
+and provide essentially the same information.  But there are a few
+differences.
+
+   * GNU 'gprof' uses a new, generalized file format with support for
+     basic-block execution counts and non-realtime histograms.  A magic
+     cookie and version number allows 'gprof' to easily identify new
+     style files.  Old BSD-style files can still be read.  *Note
+     Profiling Data File Format: File Format.
+
+   * For a recursive function, Unix 'gprof' lists the function as a
+     parent and as a child, with a 'calls' field that lists the number
+     of recursive calls.  GNU 'gprof' omits these lines and puts the
+     number of recursive calls in the primary line.
+
+   * When a function is suppressed from the call graph with '-e', GNU
+     'gprof' still lists it as a subroutine of functions that call it.
+
+   * GNU 'gprof' accepts the '-k' with its argument in the form
+     'from/to', instead of 'from to'.
+
+   * In the annotated source listing, if there are multiple basic blocks
+     on the same line, GNU 'gprof' prints all of their counts, separated
+     by commas.
+
+   * The blurbs, field widths, and output formats are different.  GNU
+     'gprof' prints blurbs after the tables, so that you can see the
+     tables without skipping the blurbs.
+
+
+File: gprof.info,  Node: Details,  Next: GNU Free Documentation License,  Prev: Incompatibilities,  Up: Top
+
+9 Details of Profiling
+**********************
+
+* Menu:
+
+* Implementation::      How a program collects profiling information
+* File Format::         Format of 'gmon.out' files
+* Internals::           'gprof''s internal operation
+* Debugging::           Using 'gprof''s '-d' option
+
+
+File: gprof.info,  Node: Implementation,  Next: File Format,  Up: Details
+
+9.1 Implementation of Profiling
+===============================
+
+Profiling works by changing how every function in your program is
+compiled so that when it is called, it will stash away some information
+about where it was called from.  From this, the profiler can figure out
+what function called it, and can count how many times it was called.
+This change is made by the compiler when your program is compiled with
+the '-pg' option, which causes every function to call 'mcount' (or
+'_mcount', or '__mcount', depending on the OS and compiler) as one of
+its first operations.
+
+   The 'mcount' routine, included in the profiling library, is
+responsible for recording in an in-memory call graph table both its
+parent routine (the child) and its parent's parent.  This is typically
+done by examining the stack frame to find both the address of the child,
+and the return address in the original parent.  Since this is a very
+machine-dependent operation, 'mcount' itself is typically a short
+assembly-language stub routine that extracts the required information,
+and then calls '__mcount_internal' (a normal C function) with two
+arguments--'frompc' and 'selfpc'.  '__mcount_internal' is responsible
+for maintaining the in-memory call graph, which records 'frompc',
+'selfpc', and the number of times each of these call arcs was traversed.
+
+   GCC Version 2 provides a magical function
+('__builtin_return_address'), which allows a generic 'mcount' function
+to extract the required information from the stack frame.  However, on
+some architectures, most notably the SPARC, using this builtin can be
+very computationally expensive, and an assembly language version of
+'mcount' is used for performance reasons.
+
+   Number-of-calls information for library routines is collected by
+using a special version of the C library.  The programs in it are the
+same as in the usual C library, but they were compiled with '-pg'.  If
+you link your program with 'gcc ... -pg', it automatically uses the
+profiling version of the library.
+
+   Profiling also involves watching your program as it runs, and keeping
+a histogram of where the program counter happens to be every now and
+then.  Typically the program counter is looked at around 100 times per
+second of run time, but the exact frequency may vary from system to
+system.
+
+   This is done is one of two ways.  Most UNIX-like operating systems
+provide a 'profil()' system call, which registers a memory array with
+the kernel, along with a scale factor that determines how the program's
+address space maps into the array.  Typical scaling values cause every 2
+to 8 bytes of address space to map into a single array slot.  On every
+tick of the system clock (assuming the profiled program is running), the
+value of the program counter is examined and the corresponding slot in
+the memory array is incremented.  Since this is done in the kernel,
+which had to interrupt the process anyway to handle the clock interrupt,
+very little additional system overhead is required.
+
+   However, some operating systems, most notably Linux 2.0 (and
+earlier), do not provide a 'profil()' system call.  On such a system,
+arrangements are made for the kernel to periodically deliver a signal to
+the process (typically via 'setitimer()'), which then performs the same
+operation of examining the program counter and incrementing a slot in
+the memory array.  Since this method requires a signal to be delivered
+to user space every time a sample is taken, it uses considerably more
+overhead than kernel-based profiling.  Also, due to the added delay
+required to deliver the signal, this method is less accurate as well.
+
+   A special startup routine allocates memory for the histogram and
+either calls 'profil()' or sets up a clock signal handler.  This routine
+('monstartup') can be invoked in several ways.  On Linux systems, a
+special profiling startup file 'gcrt0.o', which invokes 'monstartup'
+before 'main', is used instead of the default 'crt0.o'.  Use of this
+special startup file is one of the effects of using 'gcc ... -pg' to
+link.  On SPARC systems, no special startup files are used.  Rather, the
+'mcount' routine, when it is invoked for the first time (typically when
+'main' is called), calls 'monstartup'.
+
+   If the compiler's '-a' option was used, basic-block counting is also
+enabled.  Each object file is then compiled with a static array of
+counts, initially zero.  In the executable code, every time a new
+basic-block begins (i.e., when an 'if' statement appears), an extra
+instruction is inserted to increment the corresponding count in the
+array.  At compile time, a paired array was constructed that recorded
+the starting address of each basic-block.  Taken together, the two
+arrays record the starting address of every basic-block, along with the
+number of times it was executed.
+
+   The profiling library also includes a function ('mcleanup') which is
+typically registered using 'atexit()' to be called as the program exits,
+and is responsible for writing the file 'gmon.out'.  Profiling is turned
+off, various headers are output, and the histogram is written, followed
+by the call-graph arcs and the basic-block counts.
+
+   The output from 'gprof' gives no indication of parts of your program
+that are limited by I/O or swapping bandwidth.  This is because samples
+of the program counter are taken at fixed intervals of the program's run
+time.  Therefore, the time measurements in 'gprof' output say nothing
+about time that your program was not running.  For example, a part of
+the program that creates so much data that it cannot all fit in physical
+memory at once may run very slowly due to thrashing, but 'gprof' will
+say it uses little time.  On the other hand, sampling by run time has
+the advantage that the amount of load due to other users won't directly
+affect the output you get.
+
+
+File: gprof.info,  Node: File Format,  Next: Internals,  Prev: Implementation,  Up: Details
+
+9.2 Profiling Data File Format
+==============================
+
+The old BSD-derived file format used for profile data does not contain a
+magic cookie that allows to check whether a data file really is a
+'gprof' file.  Furthermore, it does not provide a version number, thus
+rendering changes to the file format almost impossible.  GNU 'gprof'
+uses a new file format that provides these features.  For backward
+compatibility, GNU 'gprof' continues to support the old BSD-derived
+format, but not all features are supported with it.  For example,
+basic-block execution counts cannot be accommodated by the old file
+format.
+
+   The new file format is defined in header file 'gmon_out.h'.  It
+consists of a header containing the magic cookie and a version number,
+as well as some spare bytes available for future extensions.  All data
+in a profile data file is in the native format of the target for which
+the profile was collected.  GNU 'gprof' adapts automatically to the
+byte-order in use.
+
+   In the new file format, the header is followed by a sequence of
+records.  Currently, there are three different record types: histogram
+records, call-graph arc records, and basic-block execution count
+records.  Each file can contain any number of each record type.  When
+reading a file, GNU 'gprof' will ensure records of the same type are
+compatible with each other and compute the union of all records.  For
+example, for basic-block execution counts, the union is simply the sum
+of all execution counts for each basic-block.
+
+9.2.1 Histogram Records
+-----------------------
+
+Histogram records consist of a header that is followed by an array of
+bins.  The header contains the text-segment range that the histogram
+spans, the size of the histogram in bytes (unlike in the old BSD format,
+this does not include the size of the header), the rate of the profiling
+clock, and the physical dimension that the bin counts represent after
+being scaled by the profiling clock rate.  The physical dimension is
+specified in two parts: a long name of up to 15 characters and a single
+character abbreviation.  For example, a histogram representing real-time
+would specify the long name as "seconds" and the abbreviation as "s".
+This feature is useful for architectures that support performance
+monitor hardware (which, fortunately, is becoming increasingly common).
+For example, under DEC OSF/1, the "uprofile" command can be used to
+produce a histogram of, say, instruction cache misses.  In this case,
+the dimension in the histogram header could be set to "i-cache misses"
+and the abbreviation could be set to "1" (because it is simply a count,
+not a physical dimension).  Also, the profiling rate would have to be
+set to 1 in this case.
+
+   Histogram bins are 16-bit numbers and each bin represent an equal
+amount of text-space.  For example, if the text-segment is one thousand
+bytes long and if there are ten bins in the histogram, each bin
+represents one hundred bytes.
+
+9.2.2 Call-Graph Records
+------------------------
+
+Call-graph records have a format that is identical to the one used in
+the BSD-derived file format.  It consists of an arc in the call graph
+and a count indicating the number of times the arc was traversed during
+program execution.  Arcs are specified by a pair of addresses: the first
+must be within caller's function and the second must be within the
+callee's function.  When performing profiling at the function level,
+these addresses can point anywhere within the respective function.
+However, when profiling at the line-level, it is better if the addresses
+are as close to the call-site/entry-point as possible.  This will ensure
+that the line-level call-graph is able to identify exactly which line of
+source code performed calls to a function.
+
+9.2.3 Basic-Block Execution Count Records
+-----------------------------------------
+
+Basic-block execution count records consist of a header followed by a
+sequence of address/count pairs.  The header simply specifies the length
+of the sequence.  In an address/count pair, the address identifies a
+basic-block and the count specifies the number of times that basic-block
+was executed.  Any address within the basic-address can be used.
+
+
+File: gprof.info,  Node: Internals,  Next: Debugging,  Prev: File Format,  Up: Details
+
+9.3 'gprof''s Internal Operation
+================================
+
+Like most programs, 'gprof' begins by processing its options.  During
+this stage, it may building its symspec list ('sym_ids.c:sym_id_add'),
+if options are specified which use symspecs.  'gprof' maintains a single
+linked list of symspecs, which will eventually get turned into 12 symbol
+tables, organized into six include/exclude pairs--one pair each for the
+flat profile (INCL_FLAT/EXCL_FLAT), the call graph arcs
+(INCL_ARCS/EXCL_ARCS), printing in the call graph
+(INCL_GRAPH/EXCL_GRAPH), timing propagation in the call graph
+(INCL_TIME/EXCL_TIME), the annotated source listing
+(INCL_ANNO/EXCL_ANNO), and the execution count listing
+(INCL_EXEC/EXCL_EXEC).
+
+   After option processing, 'gprof' finishes building the symspec list
+by adding all the symspecs in 'default_excluded_list' to the exclude
+lists EXCL_TIME and EXCL_GRAPH, and if line-by-line profiling is
+specified, EXCL_FLAT as well.  These default excludes are not added to
+EXCL_ANNO, EXCL_ARCS, and EXCL_EXEC.
+
+   Next, the BFD library is called to open the object file, verify that
+it is an object file, and read its symbol table ('core.c:core_init'),
+using 'bfd_canonicalize_symtab' after mallocing an appropriately sized
+array of symbols.  At this point, function mappings are read (if the
+'--file-ordering' option has been specified), and the core text space is
+read into memory (if the '-c' option was given).
+
+   'gprof''s own symbol table, an array of Sym structures, is now built.
+This is done in one of two ways, by one of two routines, depending on
+whether line-by-line profiling ('-l' option) has been enabled.  For
+normal profiling, the BFD canonical symbol table is scanned.  For
+line-by-line profiling, every text space address is examined, and a new
+symbol table entry gets created every time the line number changes.  In
+either case, two passes are made through the symbol table--one to count
+the size of the symbol table required, and the other to actually read
+the symbols.  In between the two passes, a single array of type 'Sym' is
+created of the appropriate length.  Finally, 'symtab.c:symtab_finalize'
+is called to sort the symbol table and remove duplicate entries (entries
+with the same memory address).
+
+   The symbol table must be a contiguous array for two reasons.  First,
+the 'qsort' library function (which sorts an array) will be used to sort
+the symbol table.  Also, the symbol lookup routine
+('symtab.c:sym_lookup'), which finds symbols based on memory address,
+uses a binary search algorithm which requires the symbol table to be a
+sorted array.  Function symbols are indicated with an 'is_func' flag.
+Line number symbols have no special flags set.  Additionally, a symbol
+can have an 'is_static' flag to indicate that it is a local symbol.
+
+   With the symbol table read, the symspecs can now be translated into
+Syms ('sym_ids.c:sym_id_parse').  Remember that a single symspec can
+match multiple symbols.  An array of symbol tables ('syms') is created,
+each entry of which is a symbol table of Syms to be included or excluded
+from a particular listing.  The master symbol table and the symspecs are
+examined by nested loops, and every symbol that matches a symspec is
+inserted into the appropriate syms table.  This is done twice, once to
+count the size of each required symbol table, and again to build the
+tables, which have been malloced between passes.  From now on, to
+determine whether a symbol is on an include or exclude symspec list,
+'gprof' simply uses its standard symbol lookup routine on the
+appropriate table in the 'syms' array.
+
+   Now the profile data file(s) themselves are read
+('gmon_io.c:gmon_out_read'), first by checking for a new-style
+'gmon.out' header, then assuming this is an old-style BSD 'gmon.out' if
+the magic number test failed.
+
+   New-style histogram records are read by 'hist.c:hist_read_rec'.  For
+the first histogram record, allocate a memory array to hold all the
+bins, and read them in.  When multiple profile data files (or files with
+multiple histogram records) are read, the memory ranges of each pair of
+histogram records must be either equal, or non-overlapping.  For each
+pair of histogram records, the resolution (memory region size divided by
+the number of bins) must be the same.  The time unit must be the same
+for all histogram records.  If the above containts are met, all
+histograms for the same memory range are merged.
+
+   As each call graph record is read ('call_graph.c:cg_read_rec'), the
+parent and child addresses are matched to symbol table entries, and a
+call graph arc is created by 'cg_arcs.c:arc_add', unless the arc fails a
+symspec check against INCL_ARCS/EXCL_ARCS. As each arc is added, a
+linked list is maintained of the parent's child arcs, and of the child's
+parent arcs.  Both the child's call count and the arc's call count are
+incremented by the record's call count.
+
+   Basic-block records are read ('basic_blocks.c:bb_read_rec'), but only
+if line-by-line profiling has been selected.  Each basic-block address
+is matched to a corresponding line symbol in the symbol table, and an
+entry made in the symbol's bb_addr and bb_calls arrays.  Again, if
+multiple basic-block records are present for the same address, the call
+counts are cumulative.
+
+   A gmon.sum file is dumped, if requested ('gmon_io.c:gmon_out_write').
+
+   If histograms were present in the data files, assign them to symbols
+('hist.c:hist_assign_samples') by iterating over all the sample bins and
+assigning them to symbols.  Since the symbol table is sorted in order of
+ascending memory addresses, we can simple follow along in the symbol
+table as we make our pass over the sample bins.  This step includes a
+symspec check against INCL_FLAT/EXCL_FLAT. Depending on the histogram
+scale factor, a sample bin may span multiple symbols, in which case a
+fraction of the sample count is allocated to each symbol, proportional
+to the degree of overlap.  This effect is rare for normal profiling, but
+overlaps are more common during line-by-line profiling, and can cause
+each of two adjacent lines to be credited with half a hit, for example.
+
+   If call graph data is present, 'cg_arcs.c:cg_assemble' is called.
+First, if '-c' was specified, a machine-dependent routine ('find_call')
+scans through each symbol's machine code, looking for subroutine call
+instructions, and adding them to the call graph with a zero call count.
+A topological sort is performed by depth-first numbering all the symbols
+('cg_dfn.c:cg_dfn'), so that children are always numbered less than
+their parents, then making a array of pointers into the symbol table and
+sorting it into numerical order, which is reverse topological order
+(children appear before parents).  Cycles are also detected at this
+point, all members of which are assigned the same topological number.
+Two passes are now made through this sorted array of symbol pointers.
+The first pass, from end to beginning (parents to children), computes
+the fraction of child time to propagate to each parent and a print flag.
+The print flag reflects symspec handling of INCL_GRAPH/EXCL_GRAPH, with
+a parent's include or exclude (print or no print) property being
+propagated to its children, unless they themselves explicitly appear in
+INCL_GRAPH or EXCL_GRAPH. A second pass, from beginning to end (children
+to parents) actually propagates the timings along the call graph,
+subject to a check against INCL_TIME/EXCL_TIME. With the print flag,
+fractions, and timings now stored in the symbol structures, the
+topological sort array is now discarded, and a new array of pointers is
+assembled, this time sorted by propagated time.
+
+   Finally, print the various outputs the user requested, which is now
+fairly straightforward.  The call graph ('cg_print.c:cg_print') and flat
+profile ('hist.c:hist_print') are regurgitations of values already
+computed.  The annotated source listing
+('basic_blocks.c:print_annotated_source') uses basic-block information,
+if present, to label each line of code with call counts, otherwise only
+the function call counts are presented.
+
+   The function ordering code is marginally well documented in the
+source code itself ('cg_print.c').  Basically, the functions with the
+most use and the most parents are placed first, followed by other
+functions with the most use, followed by lower use functions, followed
+by unused functions at the end.
+
+
+File: gprof.info,  Node: Debugging,  Prev: Internals,  Up: Details
+
+9.4 Debugging 'gprof'
+=====================
+
+If 'gprof' was compiled with debugging enabled, the '-d' option triggers
+debugging output (to stdout) which can be helpful in understanding its
+operation.  The debugging number specified is interpreted as a sum of
+the following options:
+
+2 - Topological sort
+     Monitor depth-first numbering of symbols during call graph analysis
+4 - Cycles
+     Shows symbols as they are identified as cycle heads
+16 - Tallying
+     As the call graph arcs are read, show each arc and how the total
+     calls to each function are tallied
+32 - Call graph arc sorting
+     Details sorting individual parents/children within each call graph
+     entry
+64 - Reading histogram and call graph records
+     Shows address ranges of histograms as they are read, and each call
+     graph arc
+128 - Symbol table
+     Reading, classifying, and sorting the symbol table from the object
+     file.  For line-by-line profiling ('-l' option), also shows line
+     numbers being assigned to memory addresses.
+256 - Static call graph
+     Trace operation of '-c' option
+512 - Symbol table and arc table lookups
+     Detail operation of lookup routines
+1024 - Call graph propagation
+     Shows how function times are propagated along the call graph
+2048 - Basic-blocks
+     Shows basic-block records as they are read from profile data (only
+     meaningful with '-l' option)
+4096 - Symspecs
+     Shows symspec-to-symbol pattern matching operation
+8192 - Annotate source
+     Tracks operation of '-A' option
+
+
+File: gprof.info,  Node: GNU Free Documentation License,  Prev: Details,  Up: Top
+
+Appendix A GNU Free Documentation License
+*****************************************
+
+                     Version 1.3, 3 November 2008
+
+     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+     <http://fsf.org/>
+
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+
+  0. PREAMBLE
+
+     The purpose of this License is to make a manual, textbook, or other
+     functional and useful document "free" in the sense of freedom: to
+     assure everyone the effective freedom to copy and redistribute it,
+     with or without modifying it, either commercially or
+     noncommercially.  Secondarily, this License preserves for the
+     author and publisher a way to get credit for their work, while not
+     being considered responsible for modifications made by others.
+
+     This License is a kind of "copyleft", which means that derivative
+     works of the document must themselves be free in the same sense.
+     It complements the GNU General Public License, which is a copyleft
+     license designed for free software.
+
+     We have designed this License in order to use it for manuals for
+     free software, because free software needs free documentation: a
+     free program should come with manuals providing the same freedoms
+     that the software does.  But this License is not limited to
+     software manuals; it can be used for any textual work, regardless
+     of subject matter or whether it is published as a printed book.  We
+     recommend this License principally for works whose purpose is
+     instruction or reference.
+
+  1. APPLICABILITY AND DEFINITIONS
+
+     This License applies to any manual or other work, in any medium,
+     that contains a notice placed by the copyright holder saying it can
+     be distributed under the terms of this License.  Such a notice
+     grants a world-wide, royalty-free license, unlimited in duration,
+     to use that work under the conditions stated herein.  The
+     "Document", below, refers to any such manual or work.  Any member
+     of the public is a licensee, and is addressed as "you".  You accept
+     the license if you copy, modify or distribute the work in a way
+     requiring permission under copyright law.
+
+     A "Modified Version" of the Document means any work containing the
+     Document or a portion of it, either copied verbatim, or with
+     modifications and/or translated into another language.
+
+     A "Secondary Section" is a named appendix or a front-matter section
+     of the Document that deals exclusively with the relationship of the
+     publishers or authors of the Document to the Document's overall
+     subject (or to related matters) and contains nothing that could
+     fall directly within that overall subject.  (Thus, if the Document
+     is in part a textbook of mathematics, a Secondary Section may not
+     explain any mathematics.)  The relationship could be a matter of
+     historical connection with the subject or with related matters, or
+     of legal, commercial, philosophical, ethical or political position
+     regarding them.
+
+     The "Invariant Sections" are certain Secondary Sections whose
+     titles are designated, as being those of Invariant Sections, in the
+     notice that says that the Document is released under this License.
+     If a section does not fit the above definition of Secondary then it
+     is not allowed to be designated as Invariant.  The Document may
+     contain zero Invariant Sections.  If the Document does not identify
+     any Invariant Sections then there are none.
+
+     The "Cover Texts" are certain short passages of text that are
+     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+     that says that the Document is released under this License.  A
+     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+     be at most 25 words.
+
+     A "Transparent" copy of the Document means a machine-readable copy,
+     represented in a format whose specification is available to the
+     general public, that is suitable for revising the document
+     straightforwardly with generic text editors or (for images composed
+     of pixels) generic paint programs or (for drawings) some widely
+     available drawing editor, and that is suitable for input to text
+     formatters or for automatic translation to a variety of formats
+     suitable for input to text formatters.  A copy made in an otherwise
+     Transparent file format whose markup, or absence of markup, has
+     been arranged to thwart or discourage subsequent modification by
+     readers is not Transparent.  An image format is not Transparent if
+     used for any substantial amount of text.  A copy that is not
+     "Transparent" is called "Opaque".
+
+     Examples of suitable formats for Transparent copies include plain
+     ASCII without markup, Texinfo input format, LaTeX input format,
+     SGML or XML using a publicly available DTD, and standard-conforming
+     simple HTML, PostScript or PDF designed for human modification.
+     Examples of transparent image formats include PNG, XCF and JPG.
+     Opaque formats include proprietary formats that can be read and
+     edited only by proprietary word processors, SGML or XML for which
+     the DTD and/or processing tools are not generally available, and
+     the machine-generated HTML, PostScript or PDF produced by some word
+     processors for output purposes only.
+
+     The "Title Page" means, for a printed book, the title page itself,
+     plus such following pages as are needed to hold, legibly, the
+     material this License requires to appear in the title page.  For
+     works in formats which do not have any title page as such, "Title
+     Page" means the text near the most prominent appearance of the
+     work's title, preceding the beginning of the body of the text.
+
+     The "publisher" means any person or entity that distributes copies
+     of the Document to the public.
+
+     A section "Entitled XYZ" means a named subunit of the Document
+     whose title either is precisely XYZ or contains XYZ in parentheses
+     following text that translates XYZ in another language.  (Here XYZ
+     stands for a specific section name mentioned below, such as
+     "Acknowledgements", "Dedications", "Endorsements", or "History".)
+     To "Preserve the Title" of such a section when you modify the
+     Document means that it remains a section "Entitled XYZ" according
+     to this definition.
+
+     The Document may include Warranty Disclaimers next to the notice
+     which states that this License applies to the Document.  These
+     Warranty Disclaimers are considered to be included by reference in
+     this License, but only as regards disclaiming warranties: any other
+     implication that these Warranty Disclaimers may have is void and
+     has no effect on the meaning of this License.
+
+  2. VERBATIM COPYING
+
+     You may copy and distribute the Document in any medium, either
+     commercially or noncommercially, provided that this License, the
+     copyright notices, and the license notice saying this License
+     applies to the Document are reproduced in all copies, and that you
+     add no other conditions whatsoever to those of this License.  You
+     may not use technical measures to obstruct or control the reading
+     or further copying of the copies you make or distribute.  However,
+     you may accept compensation in exchange for copies.  If you
+     distribute a large enough number of copies you must also follow the
+     conditions in section 3.
+
+     You may also lend copies, under the same conditions stated above,
+     and you may publicly display copies.
+
+  3. COPYING IN QUANTITY
+
+     If you publish printed copies (or copies in media that commonly
+     have printed covers) of the Document, numbering more than 100, and
+     the Document's license notice requires Cover Texts, you must
+     enclose the copies in covers that carry, clearly and legibly, all
+     these Cover Texts: Front-Cover Texts on the front cover, and
+     Back-Cover Texts on the back cover.  Both covers must also clearly
+     and legibly identify you as the publisher of these copies.  The
+     front cover must present the full title with all words of the title
+     equally prominent and visible.  You may add other material on the
+     covers in addition.  Copying with changes limited to the covers, as
+     long as they preserve the title of the Document and satisfy these
+     conditions, can be treated as verbatim copying in other respects.
+
+     If the required texts for either cover are too voluminous to fit
+     legibly, you should put the first ones listed (as many as fit
+     reasonably) on the actual cover, and continue the rest onto
+     adjacent pages.
+
+     If you publish or distribute Opaque copies of the Document
+     numbering more than 100, you must either include a machine-readable
+     Transparent copy along with each Opaque copy, or state in or with
+     each Opaque copy a computer-network location from which the general
+     network-using public has access to download using public-standard
+     network protocols a complete Transparent copy of the Document, free
+     of added material.  If you use the latter option, you must take
+     reasonably prudent steps, when you begin distribution of Opaque
+     copies in quantity, to ensure that this Transparent copy will
+     remain thus accessible at the stated location until at least one
+     year after the last time you distribute an Opaque copy (directly or
+     through your agents or retailers) of that edition to the public.
+
+     It is requested, but not required, that you contact the authors of
+     the Document well before redistributing any large number of copies,
+     to give them a chance to provide you with an updated version of the
+     Document.
+
+  4. MODIFICATIONS
+
+     You may copy and distribute a Modified Version of the Document
+     under the conditions of sections 2 and 3 above, provided that you
+     release the Modified Version under precisely this License, with the
+     Modified Version filling the role of the Document, thus licensing
+     distribution and modification of the Modified Version to whoever
+     possesses a copy of it.  In addition, you must do these things in
+     the Modified Version:
+
+       A. Use in the Title Page (and on the covers, if any) a title
+          distinct from that of the Document, and from those of previous
+          versions (which should, if there were any, be listed in the
+          History section of the Document).  You may use the same title
+          as a previous version if the original publisher of that
+          version gives permission.
+
+       B. List on the Title Page, as authors, one or more persons or
+          entities responsible for authorship of the modifications in
+          the Modified Version, together with at least five of the
+          principal authors of the Document (all of its principal
+          authors, if it has fewer than five), unless they release you
+          from this requirement.
+
+       C. State on the Title page the name of the publisher of the
+          Modified Version, as the publisher.
+
+       D. Preserve all the copyright notices of the Document.
+
+       E. Add an appropriate copyright notice for your modifications
+          adjacent to the other copyright notices.
+
+       F. Include, immediately after the copyright notices, a license
+          notice giving the public permission to use the Modified
+          Version under the terms of this License, in the form shown in
+          the Addendum below.
+
+       G. Preserve in that license notice the full lists of Invariant
+          Sections and required Cover Texts given in the Document's
+          license notice.
+
+       H. Include an unaltered copy of this License.
+
+       I. Preserve the section Entitled "History", Preserve its Title,
+          and add to it an item stating at least the title, year, new
+          authors, and publisher of the Modified Version as given on the
+          Title Page.  If there is no section Entitled "History" in the
+          Document, create one stating the title, year, authors, and
+          publisher of the Document as given on its Title Page, then add
+          an item describing the Modified Version as stated in the
+          previous sentence.
+
+       J. Preserve the network location, if any, given in the Document
+          for public access to a Transparent copy of the Document, and
+          likewise the network locations given in the Document for
+          previous versions it was based on.  These may be placed in the
+          "History" section.  You may omit a network location for a work
+          that was published at least four years before the Document
+          itself, or if the original publisher of the version it refers
+          to gives permission.
+
+       K. For any section Entitled "Acknowledgements" or "Dedications",
+          Preserve the Title of the section, and preserve in the section
+          all the substance and tone of each of the contributor
+          acknowledgements and/or dedications given therein.
+
+       L. Preserve all the Invariant Sections of the Document, unaltered
+          in their text and in their titles.  Section numbers or the
+          equivalent are not considered part of the section titles.
+
+       M. Delete any section Entitled "Endorsements".  Such a section
+          may not be included in the Modified Version.
+
+       N. Do not retitle any existing section to be Entitled
+          "Endorsements" or to conflict in title with any Invariant
+          Section.
+
+       O. Preserve any Warranty Disclaimers.
+
+     If the Modified Version includes new front-matter sections or
+     appendices that qualify as Secondary Sections and contain no
+     material copied from the Document, you may at your option designate
+     some or all of these sections as invariant.  To do this, add their
+     titles to the list of Invariant Sections in the Modified Version's
+     license notice.  These titles must be distinct from any other
+     section titles.
+
+     You may add a section Entitled "Endorsements", provided it contains
+     nothing but endorsements of your Modified Version by various
+     parties--for example, statements of peer review or that the text
+     has been approved by an organization as the authoritative
+     definition of a standard.
+
+     You may add a passage of up to five words as a Front-Cover Text,
+     and a passage of up to 25 words as a Back-Cover Text, to the end of
+     the list of Cover Texts in the Modified Version.  Only one passage
+     of Front-Cover Text and one of Back-Cover Text may be added by (or
+     through arrangements made by) any one entity.  If the Document
+     already includes a cover text for the same cover, previously added
+     by you or by arrangement made by the same entity you are acting on
+     behalf of, you may not add another; but you may replace the old
+     one, on explicit permission from the previous publisher that added
+     the old one.
+
+     The author(s) and publisher(s) of the Document do not by this
+     License give permission to use their names for publicity for or to
+     assert or imply endorsement of any Modified Version.
+
+  5. COMBINING DOCUMENTS
+
+     You may combine the Document with other documents released under
+     this License, under the terms defined in section 4 above for
+     modified versions, provided that you include in the combination all
+     of the Invariant Sections of all of the original documents,
+     unmodified, and list them all as Invariant Sections of your
+     combined work in its license notice, and that you preserve all
+     their Warranty Disclaimers.
+
+     The combined work need only contain one copy of this License, and
+     multiple identical Invariant Sections may be replaced with a single
+     copy.  If there are multiple Invariant Sections with the same name
+     but different contents, make the title of each such section unique
+     by adding at the end of it, in parentheses, the name of the
+     original author or publisher of that section if known, or else a
+     unique number.  Make the same adjustment to the section titles in
+     the list of Invariant Sections in the license notice of the
+     combined work.
+
+     In the combination, you must combine any sections Entitled
+     "History" in the various original documents, forming one section
+     Entitled "History"; likewise combine any sections Entitled
+     "Acknowledgements", and any sections Entitled "Dedications".  You
+     must delete all sections Entitled "Endorsements."
+
+  6. COLLECTIONS OF DOCUMENTS
+
+     You may make a collection consisting of the Document and other
+     documents released under this License, and replace the individual
+     copies of this License in the various documents with a single copy
+     that is included in the collection, provided that you follow the
+     rules of this License for verbatim copying of each of the documents
+     in all other respects.
+
+     You may extract a single document from such a collection, and
+     distribute it individually under this License, provided you insert
+     a copy of this License into the extracted document, and follow this
+     License in all other respects regarding verbatim copying of that
+     document.
+
+  7. AGGREGATION WITH INDEPENDENT WORKS
+
+     A compilation of the Document or its derivatives with other
+     separate and independent documents or works, in or on a volume of a
+     storage or distribution medium, is called an "aggregate" if the
+     copyright resulting from the compilation is not used to limit the
+     legal rights of the compilation's users beyond what the individual
+     works permit.  When the Document is included in an aggregate, this
+     License does not apply to the other works in the aggregate which
+     are not themselves derivative works of the Document.
+
+     If the Cover Text requirement of section 3 is applicable to these
+     copies of the Document, then if the Document is less than one half
+     of the entire aggregate, the Document's Cover Texts may be placed
+     on covers that bracket the Document within the aggregate, or the
+     electronic equivalent of covers if the Document is in electronic
+     form.  Otherwise they must appear on printed covers that bracket
+     the whole aggregate.
+
+  8. TRANSLATION
+
+     Translation is considered a kind of modification, so you may
+     distribute translations of the Document under the terms of section
+     4.  Replacing Invariant Sections with translations requires special
+     permission from their copyright holders, but you may include
+     translations of some or all Invariant Sections in addition to the
+     original versions of these Invariant Sections.  You may include a
+     translation of this License, and all the license notices in the
+     Document, and any Warranty Disclaimers, provided that you also
+     include the original English version of this License and the
+     original versions of those notices and disclaimers.  In case of a
+     disagreement between the translation and the original version of
+     this License or a notice or disclaimer, the original version will
+     prevail.
+
+     If a section in the Document is Entitled "Acknowledgements",
+     "Dedications", or "History", the requirement (section 4) to
+     Preserve its Title (section 1) will typically require changing the
+     actual title.
+
+  9. TERMINATION
+
+     You may not copy, modify, sublicense, or distribute the Document
+     except as expressly provided under this License.  Any attempt
+     otherwise to copy, modify, sublicense, or distribute it is void,
+     and will automatically terminate your rights under this License.
+
+     However, if you cease all violation of this License, then your
+     license from a particular copyright holder is reinstated (a)
+     provisionally, unless and until the copyright holder explicitly and
+     finally terminates your license, and (b) permanently, if the
+     copyright holder fails to notify you of the violation by some
+     reasonable means prior to 60 days after the cessation.
+
+     Moreover, your license from a particular copyright holder is
+     reinstated permanently if the copyright holder notifies you of the
+     violation by some reasonable means, this is the first time you have
+     received notice of violation of this License (for any work) from
+     that copyright holder, and you cure the violation prior to 30 days
+     after your receipt of the notice.
+
+     Termination of your rights under this section does not terminate
+     the licenses of parties who have received copies or rights from you
+     under this License.  If your rights have been terminated and not
+     permanently reinstated, receipt of a copy of some or all of the
+     same material does not give you any rights to use it.
+
+  10. FUTURE REVISIONS OF THIS LICENSE
+
+     The Free Software Foundation may publish new, revised versions of
+     the GNU Free Documentation License from time to time.  Such new
+     versions will be similar in spirit to the present version, but may
+     differ in detail to address new problems or concerns.  See
+     <http://www.gnu.org/copyleft/>.
+
+     Each version of the License is given a distinguishing version
+     number.  If the Document specifies that a particular numbered
+     version of this License "or any later version" applies to it, you
+     have the option of following the terms and conditions either of
+     that specified version or of any later version that has been
+     published (not as a draft) by the Free Software Foundation.  If the
+     Document does not specify a version number of this License, you may
+     choose any version ever published (not as a draft) by the Free
+     Software Foundation.  If the Document specifies that a proxy can
+     decide which future versions of this License can be used, that
+     proxy's public statement of acceptance of a version permanently
+     authorizes you to choose that version for the Document.
+
+  11. RELICENSING
+
+     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+     World Wide Web server that publishes copyrightable works and also
+     provides prominent facilities for anybody to edit those works.  A
+     public wiki that anybody can edit is an example of such a server.
+     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+     site means any set of copyrightable works thus published on the MMC
+     site.
+
+     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+     license published by Creative Commons Corporation, a not-for-profit
+     corporation with a principal place of business in San Francisco,
+     California, as well as future copyleft versions of that license
+     published by that same organization.
+
+     "Incorporate" means to publish or republish a Document, in whole or
+     in part, as part of another Document.
+
+     An MMC is "eligible for relicensing" if it is licensed under this
+     License, and if all works that were first published under this
+     License somewhere other than this MMC, and subsequently
+     incorporated in whole or in part into the MMC, (1) had no cover
+     texts or invariant sections, and (2) were thus incorporated prior
+     to November 1, 2008.
+
+     The operator of an MMC Site may republish an MMC contained in the
+     site under CC-BY-SA on the same site at any time before August 1,
+     2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+       Copyright (C)  YEAR  YOUR NAME.
+       Permission is granted to copy, distribute and/or modify this document
+       under the terms of the GNU Free Documentation License, Version 1.3
+       or any later version published by the Free Software Foundation;
+       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+       Texts.  A copy of the license is included in the section entitled ``GNU
+       Free Documentation License''.
+
+   If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts."  line with this:
+
+         with the Invariant Sections being LIST THEIR TITLES, with
+         the Front-Cover Texts being LIST, and with the Back-Cover Texts
+         being LIST.
+
+   If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+   If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of free
+software license, such as the GNU General Public License, to permit
+their use in free software.
+
+
+
+Tag Table:
+Node: Top719
+Node: Introduction2042
+Node: Compiling4533
+Node: Executing8589
+Node: Invoking11377
+Node: Output Options12792
+Node: Analysis Options19884
+Node: Miscellaneous Options23804
+Node: Deprecated Options25058
+Node: Symspecs27121
+Node: Output28947
+Node: Flat Profile29987
+Node: Call Graph34940
+Node: Primary38172
+Node: Callers40760
+Node: Subroutines42878
+Node: Cycles44719
+Node: Line-by-line51496
+Node: Annotated Source55572
+Node: Inaccuracy58570
+Node: Sampling Error58828
+Node: Assumptions61732
+Node: How do I?63202
+Node: Incompatibilities64759
+Node: Details66253
+Node: Implementation66646
+Node: File Format72545
+Node: Internals76833
+Node: Debugging85323
+Node: GNU Free Documentation License86913
+
+End Tag Table
diff --git a/share/info/ld.info b/share/info/ld.info
new file mode 100644
index 0000000..1ef599d
--- /dev/null
+++ b/share/info/ld.info
Binary files differ
diff --git a/share/info/stabs.info b/share/info/stabs.info
new file mode 100644
index 0000000..9aab963
--- /dev/null
+++ b/share/info/stabs.info
Binary files differ
diff --git a/share/locale/bg/LC_MESSAGES/binutils.mo b/share/locale/bg/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..f103035
--- /dev/null
+++ b/share/locale/bg/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/bg/LC_MESSAGES/gprof.mo b/share/locale/bg/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..67ae278
--- /dev/null
+++ b/share/locale/bg/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/bg/LC_MESSAGES/ld.mo b/share/locale/bg/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..389b161
--- /dev/null
+++ b/share/locale/bg/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/ca/LC_MESSAGES/binutils.mo b/share/locale/ca/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..3ae2834
--- /dev/null
+++ b/share/locale/ca/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/da/LC_MESSAGES/bfd.mo b/share/locale/da/LC_MESSAGES/bfd.mo
new file mode 100644
index 0000000..ca9e50c
--- /dev/null
+++ b/share/locale/da/LC_MESSAGES/bfd.mo
Binary files differ
diff --git a/share/locale/da/LC_MESSAGES/binutils.mo b/share/locale/da/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..7f85a0d
--- /dev/null
+++ b/share/locale/da/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/da/LC_MESSAGES/gprof.mo b/share/locale/da/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..4c53ca0
--- /dev/null
+++ b/share/locale/da/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/da/LC_MESSAGES/ld.mo b/share/locale/da/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..a09e479
--- /dev/null
+++ b/share/locale/da/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/da/LC_MESSAGES/opcodes.mo b/share/locale/da/LC_MESSAGES/opcodes.mo
new file mode 100644
index 0000000..a2fae8b
--- /dev/null
+++ b/share/locale/da/LC_MESSAGES/opcodes.mo
Binary files differ
diff --git a/share/locale/de/LC_MESSAGES/gprof.mo b/share/locale/de/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..10776d1
--- /dev/null
+++ b/share/locale/de/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/de/LC_MESSAGES/ld.mo b/share/locale/de/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..2e71a14
--- /dev/null
+++ b/share/locale/de/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/de/LC_MESSAGES/opcodes.mo b/share/locale/de/LC_MESSAGES/opcodes.mo
new file mode 100644
index 0000000..2e71a14
--- /dev/null
+++ b/share/locale/de/LC_MESSAGES/opcodes.mo
Binary files differ
diff --git a/share/locale/eo/LC_MESSAGES/gprof.mo b/share/locale/eo/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..f717612
--- /dev/null
+++ b/share/locale/eo/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/es/LC_MESSAGES/bfd.mo b/share/locale/es/LC_MESSAGES/bfd.mo
new file mode 100644
index 0000000..b667be5
--- /dev/null
+++ b/share/locale/es/LC_MESSAGES/bfd.mo
Binary files differ
diff --git a/share/locale/es/LC_MESSAGES/binutils.mo b/share/locale/es/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..3d86590
--- /dev/null
+++ b/share/locale/es/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/es/LC_MESSAGES/gas.mo b/share/locale/es/LC_MESSAGES/gas.mo
new file mode 100644
index 0000000..bb4cca6
--- /dev/null
+++ b/share/locale/es/LC_MESSAGES/gas.mo
Binary files differ
diff --git a/share/locale/es/LC_MESSAGES/gold.mo b/share/locale/es/LC_MESSAGES/gold.mo
new file mode 100644
index 0000000..03cdc67
--- /dev/null
+++ b/share/locale/es/LC_MESSAGES/gold.mo
Binary files differ
diff --git a/share/locale/es/LC_MESSAGES/gprof.mo b/share/locale/es/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..a4b9a90
--- /dev/null
+++ b/share/locale/es/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/es/LC_MESSAGES/ld.mo b/share/locale/es/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..3b474e4
--- /dev/null
+++ b/share/locale/es/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/es/LC_MESSAGES/opcodes.mo b/share/locale/es/LC_MESSAGES/opcodes.mo
new file mode 100644
index 0000000..99390ec
--- /dev/null
+++ b/share/locale/es/LC_MESSAGES/opcodes.mo
Binary files differ
diff --git a/share/locale/fi/LC_MESSAGES/bfd.mo b/share/locale/fi/LC_MESSAGES/bfd.mo
new file mode 100644
index 0000000..ded62c4
--- /dev/null
+++ b/share/locale/fi/LC_MESSAGES/bfd.mo
Binary files differ
diff --git a/share/locale/fi/LC_MESSAGES/binutils.mo b/share/locale/fi/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..dae8da1
--- /dev/null
+++ b/share/locale/fi/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/fi/LC_MESSAGES/gas.mo b/share/locale/fi/LC_MESSAGES/gas.mo
new file mode 100644
index 0000000..a697175
--- /dev/null
+++ b/share/locale/fi/LC_MESSAGES/gas.mo
Binary files differ
diff --git a/share/locale/fi/LC_MESSAGES/gold.mo b/share/locale/fi/LC_MESSAGES/gold.mo
new file mode 100644
index 0000000..9d2bfe0
--- /dev/null
+++ b/share/locale/fi/LC_MESSAGES/gold.mo
Binary files differ
diff --git a/share/locale/fi/LC_MESSAGES/gprof.mo b/share/locale/fi/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..ebe16a9
--- /dev/null
+++ b/share/locale/fi/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/fi/LC_MESSAGES/ld.mo b/share/locale/fi/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..0077096
--- /dev/null
+++ b/share/locale/fi/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/fi/LC_MESSAGES/opcodes.mo b/share/locale/fi/LC_MESSAGES/opcodes.mo
new file mode 100644
index 0000000..8c9f5d4
--- /dev/null
+++ b/share/locale/fi/LC_MESSAGES/opcodes.mo
Binary files differ
diff --git a/share/locale/fr/LC_MESSAGES/bfd.mo b/share/locale/fr/LC_MESSAGES/bfd.mo
new file mode 100644
index 0000000..54141d3
--- /dev/null
+++ b/share/locale/fr/LC_MESSAGES/bfd.mo
Binary files differ
diff --git a/share/locale/fr/LC_MESSAGES/binutils.mo b/share/locale/fr/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..da48fe4
--- /dev/null
+++ b/share/locale/fr/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/fr/LC_MESSAGES/gas.mo b/share/locale/fr/LC_MESSAGES/gas.mo
new file mode 100644
index 0000000..85ed9f5
--- /dev/null
+++ b/share/locale/fr/LC_MESSAGES/gas.mo
Binary files differ
diff --git a/share/locale/fr/LC_MESSAGES/gold.mo b/share/locale/fr/LC_MESSAGES/gold.mo
new file mode 100644
index 0000000..f164f2e
--- /dev/null
+++ b/share/locale/fr/LC_MESSAGES/gold.mo
Binary files differ
diff --git a/share/locale/fr/LC_MESSAGES/gprof.mo b/share/locale/fr/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..f6e5496
--- /dev/null
+++ b/share/locale/fr/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/fr/LC_MESSAGES/ld.mo b/share/locale/fr/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..7de13c7
--- /dev/null
+++ b/share/locale/fr/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/fr/LC_MESSAGES/opcodes.mo b/share/locale/fr/LC_MESSAGES/opcodes.mo
new file mode 100644
index 0000000..b16c817
--- /dev/null
+++ b/share/locale/fr/LC_MESSAGES/opcodes.mo
Binary files differ
diff --git a/share/locale/ga/LC_MESSAGES/gprof.mo b/share/locale/ga/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..2a1ba60
--- /dev/null
+++ b/share/locale/ga/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/ga/LC_MESSAGES/ld.mo b/share/locale/ga/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..6541060
--- /dev/null
+++ b/share/locale/ga/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/ga/LC_MESSAGES/opcodes.mo b/share/locale/ga/LC_MESSAGES/opcodes.mo
new file mode 100644
index 0000000..d146844
--- /dev/null
+++ b/share/locale/ga/LC_MESSAGES/opcodes.mo
Binary files differ
diff --git a/share/locale/hr/LC_MESSAGES/bfd.mo b/share/locale/hr/LC_MESSAGES/bfd.mo
new file mode 100644
index 0000000..a29732f
--- /dev/null
+++ b/share/locale/hr/LC_MESSAGES/bfd.mo
Binary files differ
diff --git a/share/locale/hr/LC_MESSAGES/binutils.mo b/share/locale/hr/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..be97d93
--- /dev/null
+++ b/share/locale/hr/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/hu/LC_MESSAGES/gprof.mo b/share/locale/hu/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..0e0f37e
--- /dev/null
+++ b/share/locale/hu/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/id/LC_MESSAGES/bfd.mo b/share/locale/id/LC_MESSAGES/bfd.mo
new file mode 100644
index 0000000..957b28b
--- /dev/null
+++ b/share/locale/id/LC_MESSAGES/bfd.mo
Binary files differ
diff --git a/share/locale/id/LC_MESSAGES/binutils.mo b/share/locale/id/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..414e09c
--- /dev/null
+++ b/share/locale/id/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/id/LC_MESSAGES/gas.mo b/share/locale/id/LC_MESSAGES/gas.mo
new file mode 100644
index 0000000..aedfbf7
--- /dev/null
+++ b/share/locale/id/LC_MESSAGES/gas.mo
Binary files differ
diff --git a/share/locale/id/LC_MESSAGES/gold.mo b/share/locale/id/LC_MESSAGES/gold.mo
new file mode 100644
index 0000000..d7ec255
--- /dev/null
+++ b/share/locale/id/LC_MESSAGES/gold.mo
Binary files differ
diff --git a/share/locale/id/LC_MESSAGES/gprof.mo b/share/locale/id/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..4293834
--- /dev/null
+++ b/share/locale/id/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/id/LC_MESSAGES/ld.mo b/share/locale/id/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..3e9d83e
--- /dev/null
+++ b/share/locale/id/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/id/LC_MESSAGES/opcodes.mo b/share/locale/id/LC_MESSAGES/opcodes.mo
new file mode 100644
index 0000000..84ad414
--- /dev/null
+++ b/share/locale/id/LC_MESSAGES/opcodes.mo
Binary files differ
diff --git a/share/locale/it/LC_MESSAGES/binutils.mo b/share/locale/it/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..9d2a440
--- /dev/null
+++ b/share/locale/it/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/it/LC_MESSAGES/gold.mo b/share/locale/it/LC_MESSAGES/gold.mo
new file mode 100644
index 0000000..6c7ece7
--- /dev/null
+++ b/share/locale/it/LC_MESSAGES/gold.mo
Binary files differ
diff --git a/share/locale/it/LC_MESSAGES/gprof.mo b/share/locale/it/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..6b676a0
--- /dev/null
+++ b/share/locale/it/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/it/LC_MESSAGES/ld.mo b/share/locale/it/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..376809a
--- /dev/null
+++ b/share/locale/it/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/it/LC_MESSAGES/opcodes.mo b/share/locale/it/LC_MESSAGES/opcodes.mo
new file mode 100644
index 0000000..5fd9912
--- /dev/null
+++ b/share/locale/it/LC_MESSAGES/opcodes.mo
Binary files differ
diff --git a/share/locale/ja/LC_MESSAGES/bfd.mo b/share/locale/ja/LC_MESSAGES/bfd.mo
new file mode 100644
index 0000000..108faf7
--- /dev/null
+++ b/share/locale/ja/LC_MESSAGES/bfd.mo
Binary files differ
diff --git a/share/locale/ja/LC_MESSAGES/binutils.mo b/share/locale/ja/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..7b697b6
--- /dev/null
+++ b/share/locale/ja/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/ja/LC_MESSAGES/gas.mo b/share/locale/ja/LC_MESSAGES/gas.mo
new file mode 100644
index 0000000..7f41f9e
--- /dev/null
+++ b/share/locale/ja/LC_MESSAGES/gas.mo
Binary files differ
diff --git a/share/locale/ja/LC_MESSAGES/gold.mo b/share/locale/ja/LC_MESSAGES/gold.mo
new file mode 100644
index 0000000..02a7403
--- /dev/null
+++ b/share/locale/ja/LC_MESSAGES/gold.mo
Binary files differ
diff --git a/share/locale/ja/LC_MESSAGES/gprof.mo b/share/locale/ja/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..a8050c2
--- /dev/null
+++ b/share/locale/ja/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/ja/LC_MESSAGES/ld.mo b/share/locale/ja/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..55df165
--- /dev/null
+++ b/share/locale/ja/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/ms/LC_MESSAGES/gprof.mo b/share/locale/ms/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..9022f0a
--- /dev/null
+++ b/share/locale/ms/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/nl/LC_MESSAGES/gprof.mo b/share/locale/nl/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..747693e
--- /dev/null
+++ b/share/locale/nl/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/nl/LC_MESSAGES/opcodes.mo b/share/locale/nl/LC_MESSAGES/opcodes.mo
new file mode 100644
index 0000000..4d181ff
--- /dev/null
+++ b/share/locale/nl/LC_MESSAGES/opcodes.mo
Binary files differ
diff --git a/share/locale/pt/LC_MESSAGES/bfd.mo b/share/locale/pt/LC_MESSAGES/bfd.mo
new file mode 100644
index 0000000..f30a640
--- /dev/null
+++ b/share/locale/pt/LC_MESSAGES/bfd.mo
Binary files differ
diff --git a/share/locale/pt/LC_MESSAGES/binutils.mo b/share/locale/pt/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..025d6fe
--- /dev/null
+++ b/share/locale/pt/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/pt_BR/LC_MESSAGES/gprof.mo b/share/locale/pt_BR/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..4122eb9
--- /dev/null
+++ b/share/locale/pt_BR/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/pt_BR/LC_MESSAGES/ld.mo b/share/locale/pt_BR/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..180974d
--- /dev/null
+++ b/share/locale/pt_BR/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/pt_BR/LC_MESSAGES/opcodes.mo b/share/locale/pt_BR/LC_MESSAGES/opcodes.mo
new file mode 100644
index 0000000..83106a4
--- /dev/null
+++ b/share/locale/pt_BR/LC_MESSAGES/opcodes.mo
Binary files differ
diff --git a/share/locale/ro/LC_MESSAGES/bfd.mo b/share/locale/ro/LC_MESSAGES/bfd.mo
new file mode 100644
index 0000000..2706ea7
--- /dev/null
+++ b/share/locale/ro/LC_MESSAGES/bfd.mo
Binary files differ
diff --git a/share/locale/ro/LC_MESSAGES/binutils.mo b/share/locale/ro/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..69abd4e
--- /dev/null
+++ b/share/locale/ro/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/ro/LC_MESSAGES/gprof.mo b/share/locale/ro/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..dac2123
--- /dev/null
+++ b/share/locale/ro/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/ro/LC_MESSAGES/opcodes.mo b/share/locale/ro/LC_MESSAGES/opcodes.mo
new file mode 100644
index 0000000..0aa0bd0
--- /dev/null
+++ b/share/locale/ro/LC_MESSAGES/opcodes.mo
Binary files differ
diff --git a/share/locale/ru/LC_MESSAGES/bfd.mo b/share/locale/ru/LC_MESSAGES/bfd.mo
new file mode 100644
index 0000000..52d11f5
--- /dev/null
+++ b/share/locale/ru/LC_MESSAGES/bfd.mo
Binary files differ
diff --git a/share/locale/ru/LC_MESSAGES/binutils.mo b/share/locale/ru/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..4235161
--- /dev/null
+++ b/share/locale/ru/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/ru/LC_MESSAGES/gas.mo b/share/locale/ru/LC_MESSAGES/gas.mo
new file mode 100644
index 0000000..e484868
--- /dev/null
+++ b/share/locale/ru/LC_MESSAGES/gas.mo
Binary files differ
diff --git a/share/locale/ru/LC_MESSAGES/gprof.mo b/share/locale/ru/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..136310c
--- /dev/null
+++ b/share/locale/ru/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/ru/LC_MESSAGES/ld.mo b/share/locale/ru/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..a2d2e4f
--- /dev/null
+++ b/share/locale/ru/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/rw/LC_MESSAGES/bfd.mo b/share/locale/rw/LC_MESSAGES/bfd.mo
new file mode 100644
index 0000000..a24c3be
--- /dev/null
+++ b/share/locale/rw/LC_MESSAGES/bfd.mo
Binary files differ
diff --git a/share/locale/rw/LC_MESSAGES/binutils.mo b/share/locale/rw/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..74fd414
--- /dev/null
+++ b/share/locale/rw/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/rw/LC_MESSAGES/gas.mo b/share/locale/rw/LC_MESSAGES/gas.mo
new file mode 100644
index 0000000..67ba34f
--- /dev/null
+++ b/share/locale/rw/LC_MESSAGES/gas.mo
Binary files differ
diff --git a/share/locale/rw/LC_MESSAGES/gprof.mo b/share/locale/rw/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..1ccdb0e
--- /dev/null
+++ b/share/locale/rw/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/sk/LC_MESSAGES/binutils.mo b/share/locale/sk/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..f4e69d0
--- /dev/null
+++ b/share/locale/sk/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/sr/LC_MESSAGES/bfd.mo b/share/locale/sr/LC_MESSAGES/bfd.mo
new file mode 100644
index 0000000..c0b7db0
--- /dev/null
+++ b/share/locale/sr/LC_MESSAGES/bfd.mo
Binary files differ
diff --git a/share/locale/sr/LC_MESSAGES/binutils.mo b/share/locale/sr/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..81e2081
--- /dev/null
+++ b/share/locale/sr/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/sr/LC_MESSAGES/gprof.mo b/share/locale/sr/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..aea84b4
--- /dev/null
+++ b/share/locale/sr/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/sr/LC_MESSAGES/ld.mo b/share/locale/sr/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..0ef1a76
--- /dev/null
+++ b/share/locale/sr/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/sr/LC_MESSAGES/opcodes.mo b/share/locale/sr/LC_MESSAGES/opcodes.mo
new file mode 100644
index 0000000..4955188
--- /dev/null
+++ b/share/locale/sr/LC_MESSAGES/opcodes.mo
Binary files differ
diff --git a/share/locale/sv/LC_MESSAGES/bfd.mo b/share/locale/sv/LC_MESSAGES/bfd.mo
new file mode 100644
index 0000000..8a97087
--- /dev/null
+++ b/share/locale/sv/LC_MESSAGES/bfd.mo
Binary files differ
diff --git a/share/locale/sv/LC_MESSAGES/binutils.mo b/share/locale/sv/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..111c033
--- /dev/null
+++ b/share/locale/sv/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/sv/LC_MESSAGES/gas.mo b/share/locale/sv/LC_MESSAGES/gas.mo
new file mode 100644
index 0000000..a554534
--- /dev/null
+++ b/share/locale/sv/LC_MESSAGES/gas.mo
Binary files differ
diff --git a/share/locale/sv/LC_MESSAGES/gold.mo b/share/locale/sv/LC_MESSAGES/gold.mo
new file mode 100644
index 0000000..07bdc67
--- /dev/null
+++ b/share/locale/sv/LC_MESSAGES/gold.mo
Binary files differ
diff --git a/share/locale/sv/LC_MESSAGES/gprof.mo b/share/locale/sv/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..27215e1
--- /dev/null
+++ b/share/locale/sv/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/sv/LC_MESSAGES/ld.mo b/share/locale/sv/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..8641dc3
--- /dev/null
+++ b/share/locale/sv/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/sv/LC_MESSAGES/opcodes.mo b/share/locale/sv/LC_MESSAGES/opcodes.mo
new file mode 100644
index 0000000..419885c
--- /dev/null
+++ b/share/locale/sv/LC_MESSAGES/opcodes.mo
Binary files differ
diff --git a/share/locale/tr/LC_MESSAGES/bfd.mo b/share/locale/tr/LC_MESSAGES/bfd.mo
new file mode 100644
index 0000000..3a04805
--- /dev/null
+++ b/share/locale/tr/LC_MESSAGES/bfd.mo
Binary files differ
diff --git a/share/locale/tr/LC_MESSAGES/binutils.mo b/share/locale/tr/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..ea972cc
--- /dev/null
+++ b/share/locale/tr/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/tr/LC_MESSAGES/gas.mo b/share/locale/tr/LC_MESSAGES/gas.mo
new file mode 100644
index 0000000..f1ddce5
--- /dev/null
+++ b/share/locale/tr/LC_MESSAGES/gas.mo
Binary files differ
diff --git a/share/locale/tr/LC_MESSAGES/gprof.mo b/share/locale/tr/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..a717948
--- /dev/null
+++ b/share/locale/tr/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/tr/LC_MESSAGES/ld.mo b/share/locale/tr/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..7b702a2
--- /dev/null
+++ b/share/locale/tr/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/tr/LC_MESSAGES/opcodes.mo b/share/locale/tr/LC_MESSAGES/opcodes.mo
new file mode 100644
index 0000000..9578276
--- /dev/null
+++ b/share/locale/tr/LC_MESSAGES/opcodes.mo
Binary files differ
diff --git a/share/locale/uk/LC_MESSAGES/bfd.mo b/share/locale/uk/LC_MESSAGES/bfd.mo
new file mode 100644
index 0000000..048400a
--- /dev/null
+++ b/share/locale/uk/LC_MESSAGES/bfd.mo
Binary files differ
diff --git a/share/locale/uk/LC_MESSAGES/binutils.mo b/share/locale/uk/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..053f763
--- /dev/null
+++ b/share/locale/uk/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/uk/LC_MESSAGES/gas.mo b/share/locale/uk/LC_MESSAGES/gas.mo
new file mode 100644
index 0000000..ac95fb6
--- /dev/null
+++ b/share/locale/uk/LC_MESSAGES/gas.mo
Binary files differ
diff --git a/share/locale/uk/LC_MESSAGES/gold.mo b/share/locale/uk/LC_MESSAGES/gold.mo
new file mode 100644
index 0000000..d2d3e56
--- /dev/null
+++ b/share/locale/uk/LC_MESSAGES/gold.mo
Binary files differ
diff --git a/share/locale/uk/LC_MESSAGES/gprof.mo b/share/locale/uk/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..1ae9d56
--- /dev/null
+++ b/share/locale/uk/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/uk/LC_MESSAGES/ld.mo b/share/locale/uk/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..b7dca03
--- /dev/null
+++ b/share/locale/uk/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/uk/LC_MESSAGES/opcodes.mo b/share/locale/uk/LC_MESSAGES/opcodes.mo
new file mode 100644
index 0000000..c2dba6e
--- /dev/null
+++ b/share/locale/uk/LC_MESSAGES/opcodes.mo
Binary files differ
diff --git a/share/locale/vi/LC_MESSAGES/bfd.mo b/share/locale/vi/LC_MESSAGES/bfd.mo
new file mode 100644
index 0000000..315d95d
--- /dev/null
+++ b/share/locale/vi/LC_MESSAGES/bfd.mo
Binary files differ
diff --git a/share/locale/vi/LC_MESSAGES/binutils.mo b/share/locale/vi/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..0b51ee6
--- /dev/null
+++ b/share/locale/vi/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/vi/LC_MESSAGES/gold.mo b/share/locale/vi/LC_MESSAGES/gold.mo
new file mode 100644
index 0000000..a9b58fe
--- /dev/null
+++ b/share/locale/vi/LC_MESSAGES/gold.mo
Binary files differ
diff --git a/share/locale/vi/LC_MESSAGES/gprof.mo b/share/locale/vi/LC_MESSAGES/gprof.mo
new file mode 100644
index 0000000..95c73f5
--- /dev/null
+++ b/share/locale/vi/LC_MESSAGES/gprof.mo
Binary files differ
diff --git a/share/locale/vi/LC_MESSAGES/ld.mo b/share/locale/vi/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..a860259
--- /dev/null
+++ b/share/locale/vi/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/vi/LC_MESSAGES/opcodes.mo b/share/locale/vi/LC_MESSAGES/opcodes.mo
new file mode 100644
index 0000000..f8520c5
--- /dev/null
+++ b/share/locale/vi/LC_MESSAGES/opcodes.mo
Binary files differ
diff --git a/share/locale/zh_CN/LC_MESSAGES/bfd.mo b/share/locale/zh_CN/LC_MESSAGES/bfd.mo
new file mode 100644
index 0000000..f6e4119
--- /dev/null
+++ b/share/locale/zh_CN/LC_MESSAGES/bfd.mo
Binary files differ
diff --git a/share/locale/zh_CN/LC_MESSAGES/binutils.mo b/share/locale/zh_CN/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..5924f1b
--- /dev/null
+++ b/share/locale/zh_CN/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/zh_CN/LC_MESSAGES/gas.mo b/share/locale/zh_CN/LC_MESSAGES/gas.mo
new file mode 100644
index 0000000..c3cf2f2
--- /dev/null
+++ b/share/locale/zh_CN/LC_MESSAGES/gas.mo
Binary files differ
diff --git a/share/locale/zh_CN/LC_MESSAGES/gold.mo b/share/locale/zh_CN/LC_MESSAGES/gold.mo
new file mode 100644
index 0000000..698f9ae
--- /dev/null
+++ b/share/locale/zh_CN/LC_MESSAGES/gold.mo
Binary files differ
diff --git a/share/locale/zh_CN/LC_MESSAGES/ld.mo b/share/locale/zh_CN/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..f83fde0
--- /dev/null
+++ b/share/locale/zh_CN/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/locale/zh_CN/LC_MESSAGES/opcodes.mo b/share/locale/zh_CN/LC_MESSAGES/opcodes.mo
new file mode 100644
index 0000000..05114f2
--- /dev/null
+++ b/share/locale/zh_CN/LC_MESSAGES/opcodes.mo
Binary files differ
diff --git a/share/locale/zh_TW/LC_MESSAGES/binutils.mo b/share/locale/zh_TW/LC_MESSAGES/binutils.mo
new file mode 100644
index 0000000..3cb131f
--- /dev/null
+++ b/share/locale/zh_TW/LC_MESSAGES/binutils.mo
Binary files differ
diff --git a/share/locale/zh_TW/LC_MESSAGES/ld.mo b/share/locale/zh_TW/LC_MESSAGES/ld.mo
new file mode 100644
index 0000000..a1644a7
--- /dev/null
+++ b/share/locale/zh_TW/LC_MESSAGES/ld.mo
Binary files differ
diff --git a/share/man/man1/aarch64-elf-addr2line.1 b/share/man/man1/aarch64-elf-addr2line.1
new file mode 100644
index 0000000..575a1b5
--- /dev/null
+++ b/share/man/man1/aarch64-elf-addr2line.1
@@ -0,0 +1,345 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "ADDR2LINE 1"
+.TH ADDR2LINE 1 "2019-05-21" "binutils-2.32" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+addr2line \- convert addresses into file names and line numbers.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+addr2line [\fB\-a\fR|\fB\-\-addresses\fR]
+          [\fB\-b\fR \fIbfdname\fR|\fB\-\-target=\fR\fIbfdname\fR]
+          [\fB\-C\fR|\fB\-\-demangle\fR[=\fIstyle\fR]]
+          [\fB\-r\fR|\fB\-\-no\-recurse\-limit\fR]
+          [\fB\-R\fR|\fB\-\-recurse\-limit\fR]
+          [\fB\-e\fR \fIfilename\fR|\fB\-\-exe=\fR\fIfilename\fR]
+          [\fB\-f\fR|\fB\-\-functions\fR] [\fB\-s\fR|\fB\-\-basename\fR]
+          [\fB\-i\fR|\fB\-\-inlines\fR]
+          [\fB\-p\fR|\fB\-\-pretty\-print\fR]
+          [\fB\-j\fR|\fB\-\-section=\fR\fIname\fR]
+          [\fB\-H\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR]
+          [addr addr ...]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBaddr2line\fR translates addresses into file names and line numbers.
+Given an address in an executable or an offset in a section of a relocatable
+object, it uses the debugging information to figure out which file name and
+line number are associated with it.
+.PP
+The executable or relocatable object to use is specified with the \fB\-e\fR
+option.  The default is the file \fIa.out\fR.  The section in the relocatable
+object to use is specified with the \fB\-j\fR option.
+.PP
+\&\fBaddr2line\fR has two modes of operation.
+.PP
+In the first, hexadecimal addresses are specified on the command line,
+and \fBaddr2line\fR displays the file name and line number for each
+address.
+.PP
+In the second, \fBaddr2line\fR reads hexadecimal addresses from
+standard input, and prints the file name and line number for each
+address on standard output.  In this mode, \fBaddr2line\fR may be used
+in a pipe to convert dynamically chosen addresses.
+.PP
+The format of the output is \fB\s-1FILENAME:LINENO\s0\fR.  By default
+each input address generates one line of output.
+.PP
+Two options can generate additional lines before each
+\&\fB\s-1FILENAME:LINENO\s0\fR line (in that order).
+.PP
+If the \fB\-a\fR option is used then a line with the input address
+is displayed.
+.PP
+If the \fB\-f\fR option is used, then a line with the
+\&\fB\s-1FUNCTIONNAME\s0\fR is displayed.  This is the name of the function
+containing the address.
+.PP
+One option can generate additional lines after the
+\&\fB\s-1FILENAME:LINENO\s0\fR line.
+.PP
+If the \fB\-i\fR option is used and the code at the given address is
+present there because of inlining by the compiler then additional
+lines are displayed afterwards.  One or two extra lines (if the
+\&\fB\-f\fR option is used) are displayed for each inlined function.
+.PP
+Alternatively if the \fB\-p\fR option is used then each input
+address generates a single, long, output line containing the address,
+the function name, the file name and the line number.  If the
+\&\fB\-i\fR option has also been used then any inlined functions will
+be displayed in the same manner, but on separate lines, and prefixed
+by the text \fB(inlined by)\fR.
+.PP
+If the file name or function name can not be determined,
+\&\fBaddr2line\fR will print two question marks in their place.  If the
+line number can not be determined, \fBaddr2line\fR will print 0.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+The long and short forms of options, shown here as alternatives, are
+equivalent.
+.IP "\fB\-a\fR" 4
+.IX Item "-a"
+.PD 0
+.IP "\fB\-\-addresses\fR" 4
+.IX Item "--addresses"
+.PD
+Display the address before the function name, file and line number
+information.  The address is printed with a \fB0x\fR prefix to easily
+identify it.
+.IP "\fB\-b\fR \fIbfdname\fR" 4
+.IX Item "-b bfdname"
+.PD 0
+.IP "\fB\-\-target=\fR\fIbfdname\fR" 4
+.IX Item "--target=bfdname"
+.PD
+Specify that the object-code format for the object files is
+\&\fIbfdname\fR.
+.IP "\fB\-C\fR" 4
+.IX Item "-C"
+.PD 0
+.IP "\fB\-\-demangle[=\fR\fIstyle\fR\fB]\fR" 4
+.IX Item "--demangle[=style]"
+.PD
+Decode (\fIdemangle\fR) low-level symbol names into user-level names.
+Besides removing any initial underscore prepended by the system, this
+makes \*(C+ function names readable.  Different compilers have different
+mangling styles. The optional demangling style argument can be used to
+choose an appropriate demangling style for your compiler.
+.IP "\fB\-e\fR \fIfilename\fR" 4
+.IX Item "-e filename"
+.PD 0
+.IP "\fB\-\-exe=\fR\fIfilename\fR" 4
+.IX Item "--exe=filename"
+.PD
+Specify the name of the executable for which addresses should be
+translated.  The default file is \fIa.out\fR.
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+.PD 0
+.IP "\fB\-\-functions\fR" 4
+.IX Item "--functions"
+.PD
+Display function names as well as file and line number information.
+.IP "\fB\-s\fR" 4
+.IX Item "-s"
+.PD 0
+.IP "\fB\-\-basenames\fR" 4
+.IX Item "--basenames"
+.PD
+Display only the base of each file name.
+.IP "\fB\-i\fR" 4
+.IX Item "-i"
+.PD 0
+.IP "\fB\-\-inlines\fR" 4
+.IX Item "--inlines"
+.PD
+If the address belongs to a function that was inlined, the source
+information for all enclosing scopes back to the first non-inlined
+function will also be printed.  For example, if \f(CW\*(C`main\*(C'\fR inlines
+\&\f(CW\*(C`callee1\*(C'\fR which inlines \f(CW\*(C`callee2\*(C'\fR, and address is from
+\&\f(CW\*(C`callee2\*(C'\fR, the source information for \f(CW\*(C`callee1\*(C'\fR and \f(CW\*(C`main\*(C'\fR
+will also be printed.
+.IP "\fB\-j\fR" 4
+.IX Item "-j"
+.PD 0
+.IP "\fB\-\-section\fR" 4
+.IX Item "--section"
+.PD
+Read offsets relative to the specified section instead of absolute addresses.
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+.PD 0
+.IP "\fB\-\-pretty\-print\fR" 4
+.IX Item "--pretty-print"
+.PD
+Make the output more human friendly: each location are printed on one line.
+If option \fB\-i\fR is specified, lines for all enclosing scopes are
+prefixed with \fB(inlined by)\fR.
+.IP "\fB\-r\fR" 4
+.IX Item "-r"
+.PD 0
+.IP "\fB\-R\fR" 4
+.IX Item "-R"
+.IP "\fB\-\-recurse\-limit\fR" 4
+.IX Item "--recurse-limit"
+.IP "\fB\-\-no\-recurse\-limit\fR" 4
+.IX Item "--no-recurse-limit"
+.IP "\fB\-\-recursion\-limit\fR" 4
+.IX Item "--recursion-limit"
+.IP "\fB\-\-no\-recursion\-limit\fR" 4
+.IX Item "--no-recursion-limit"
+.PD
+Enables or disables a limit on the amount of recursion performed
+whilst demangling strings.  Since the name mangling formats allow for
+an inifinite level of recursion it is possible to create strings whose
+decoding will exhaust the amount of stack space available on the host
+machine, triggering a memory fault.  The limit tries to prevent this
+from happening by restricting recursion to 2048 levels of nesting.
+.Sp
+The default is for this limit to be enabled, but disabling it may be
+necessary in order to demangle truly complicated names.  Note however
+that if the recursion limit is disabled then stack exhaustion is
+possible and any bug reports about such an event will be rejected.
+.Sp
+The \fB\-r\fR option is a synonym for the
+\&\fB\-\-no\-recurse\-limit\fR option.  The \fB\-R\fR option is a
+synonym for the \fB\-\-recurse\-limit\fR option.
+.Sp
+Note this option is only effective if the \fB\-C\fR or
+\&\fB\-\-demangle\fR option has been enabled.
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+Info entries for \fIbinutils\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man1/aarch64-elf-ar.1 b/share/man/man1/aarch64-elf-ar.1
new file mode 100644
index 0000000..a3789e5
--- /dev/null
+++ b/share/man/man1/aarch64-elf-ar.1
@@ -0,0 +1,495 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "AR 1"
+.TH AR 1 "2019-05-21" "binutils-2.32" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+ar \- create, modify, and extract from archives
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+ar [\fB\-X32_64\fR] [\fB\-\fR]\fIp\fR[\fImod\fR] [\fB\-\-plugin\fR \fIname\fR] [\fB\-\-target\fR \fIbfdname\fR] [\fIrelpos\fR] [\fIcount\fR] \fIarchive\fR [\fImember\fR...]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The \s-1GNU\s0 \fBar\fR program creates, modifies, and extracts from
+archives.  An \fIarchive\fR is a single file holding a collection of
+other files in a structure that makes it possible to retrieve
+the original individual files (called \fImembers\fR of the archive).
+.PP
+The original files' contents, mode (permissions), timestamp, owner, and
+group are preserved in the archive, and can be restored on
+extraction.
+.PP
+\&\s-1GNU\s0 \fBar\fR can maintain archives whose members have names of any
+length; however, depending on how \fBar\fR is configured on your
+system, a limit on member-name length may be imposed for compatibility
+with archive formats maintained with other tools.  If it exists, the
+limit is often 15 characters (typical of formats related to a.out) or 16
+characters (typical of formats related to coff).
+.PP
+\&\fBar\fR is considered a binary utility because archives of this sort
+are most often used as \fIlibraries\fR holding commonly needed
+subroutines.
+.PP
+\&\fBar\fR creates an index to the symbols defined in relocatable
+object modules in the archive when you specify the modifier \fBs\fR.
+Once created, this index is updated in the archive whenever \fBar\fR
+makes a change to its contents (save for the \fBq\fR update operation).
+An archive with such an index speeds up linking to the library, and
+allows routines in the library to call each other without regard to
+their placement in the archive.
+.PP
+You may use \fBnm \-s\fR or \fBnm \-\-print\-armap\fR to list this index
+table.  If an archive lacks the table, another form of \fBar\fR called
+\&\fBranlib\fR can be used to add just the table.
+.PP
+\&\s-1GNU\s0 \fBar\fR can optionally create a \fIthin\fR archive,
+which contains a symbol index and references to the original copies
+of the member files of the archive.  This is useful for building
+libraries for use within a local build tree, where the relocatable
+objects are expected to remain available, and copying the contents of
+each object would only waste time and space.
+.PP
+An archive can either be \fIthin\fR or it can be normal.  It cannot
+be both at the same time.  Once an archive is created its format
+cannot be changed without first deleting it and then creating a new
+archive in its place.
+.PP
+Thin archives are also \fIflattened\fR, so that adding one thin
+archive to another thin archive does not nest it, as would happen with
+a normal archive.  Instead the elements of the first archive are added
+individually to the second archive.
+.PP
+The paths to the elements of the archive are stored relative to the
+archive itself.
+.PP
+\&\s-1GNU\s0 \fBar\fR is designed to be compatible with two different
+facilities.  You can control its activity using command-line options,
+like the different varieties of \fBar\fR on Unix systems; or, if you
+specify the single command-line option \fB\-M\fR, you can control it
+with a script supplied via standard input, like the \s-1MRI\s0 \*(L"librarian\*(R"
+program.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+\&\s-1GNU\s0 \fBar\fR allows you to mix the operation code \fIp\fR and modifier
+flags \fImod\fR in any order, within the first command-line argument.
+.PP
+If you wish, you may begin the first command-line argument with a
+dash.
+.PP
+The \fIp\fR keyletter specifies what operation to execute; it may be
+any of the following, but you must specify only one of them:
+.IP "\fBd\fR" 4
+.IX Item "d"
+\&\fIDelete\fR modules from the archive.  Specify the names of modules to
+be deleted as \fImember\fR...; the archive is untouched if you
+specify no files to delete.
+.Sp
+If you specify the \fBv\fR modifier, \fBar\fR lists each module
+as it is deleted.
+.IP "\fBm\fR" 4
+.IX Item "m"
+Use this operation to \fImove\fR members in an archive.
+.Sp
+The ordering of members in an archive can make a difference in how
+programs are linked using the library, if a symbol is defined in more
+than one member.
+.Sp
+If no modifiers are used with \f(CW\*(C`m\*(C'\fR, any members you name in the
+\&\fImember\fR arguments are moved to the \fIend\fR of the archive;
+you can use the \fBa\fR, \fBb\fR, or \fBi\fR modifiers to move them to a
+specified place instead.
+.IP "\fBp\fR" 4
+.IX Item "p"
+\&\fIPrint\fR the specified members of the archive, to the standard
+output file.  If the \fBv\fR modifier is specified, show the member
+name before copying its contents to standard output.
+.Sp
+If you specify no \fImember\fR arguments, all the files in the archive are
+printed.
+.IP "\fBq\fR" 4
+.IX Item "q"
+\&\fIQuick append\fR; Historically, add the files \fImember\fR... to the end of
+\&\fIarchive\fR, without checking for replacement.
+.Sp
+The modifiers \fBa\fR, \fBb\fR, and \fBi\fR do \fInot\fR affect this
+operation; new members are always placed at the end of the archive.
+.Sp
+The modifier \fBv\fR makes \fBar\fR list each file as it is appended.
+.Sp
+Since the point of this operation is speed, implementations of
+\&\fBar\fR have the option of not updating the archive's symbol
+table if one exists.  Too many different systems however assume that
+symbol tables are always up-to-date, so \s-1GNU\s0 \fBar\fR will
+rebuild the table even with a quick append.
+.Sp
+Note \- \s-1GNU\s0 \fBar\fR treats the command \fBqs\fR as a
+synonym for \fBr\fR \- replacing already existing files in the
+archive and appending new ones at the end.
+.IP "\fBr\fR" 4
+.IX Item "r"
+Insert the files \fImember\fR... into \fIarchive\fR (with
+\&\fIreplacement\fR). This operation differs from \fBq\fR in that any
+previously existing members are deleted if their names match those being
+added.
+.Sp
+If one of the files named in \fImember\fR... does not exist, \fBar\fR
+displays an error message, and leaves undisturbed any existing members
+of the archive matching that name.
+.Sp
+By default, new members are added at the end of the file; but you may
+use one of the modifiers \fBa\fR, \fBb\fR, or \fBi\fR to request
+placement relative to some existing member.
+.Sp
+The modifier \fBv\fR used with this operation elicits a line of
+output for each file inserted, along with one of the letters \fBa\fR or
+\&\fBr\fR to indicate whether the file was appended (no old member
+deleted) or replaced.
+.IP "\fBs\fR" 4
+.IX Item "s"
+Add an index to the archive, or update it if it already exists.  Note
+this command is an exception to the rule that there can only be one
+command letter, as it is possible to use it as either a command or a
+modifier.  In either case it does the same thing.
+.IP "\fBt\fR" 4
+.IX Item "t"
+Display a \fItable\fR listing the contents of \fIarchive\fR, or those
+of the files listed in \fImember\fR... that are present in the
+archive.  Normally only the member name is shown, but if the modifier
+\&\fBO\fR is specified, then the corresponding offset of the member is also
+displayed.  Finally, in order to see the modes (permissions), timestamp,
+owner, group, and size the \fBv\fR modifier should be included.
+.Sp
+If you do not specify a \fImember\fR, all files in the archive
+are listed.
+.Sp
+If there is more than one file with the same name (say, \fBfie\fR) in
+an archive (say \fBb.a\fR), \fBar t b.a fie\fR lists only the
+first instance; to see them all, you must ask for a complete
+listing\-\-\-in our example, \fBar t b.a\fR.
+.IP "\fBx\fR" 4
+.IX Item "x"
+\&\fIExtract\fR members (named \fImember\fR) from the archive.  You can
+use the \fBv\fR modifier with this operation, to request that
+\&\fBar\fR list each name as it extracts it.
+.Sp
+If you do not specify a \fImember\fR, all files in the archive
+are extracted.
+.Sp
+Files cannot be extracted from a thin archive.
+.PP
+A number of modifiers (\fImod\fR) may immediately follow the \fIp\fR
+keyletter, to specify variations on an operation's behavior:
+.IP "\fBa\fR" 4
+.IX Item "a"
+Add new files \fIafter\fR an existing member of the
+archive.  If you use the modifier \fBa\fR, the name of an existing archive
+member must be present as the \fIrelpos\fR argument, before the
+\&\fIarchive\fR specification.
+.IP "\fBb\fR" 4
+.IX Item "b"
+Add new files \fIbefore\fR an existing member of the
+archive.  If you use the modifier \fBb\fR, the name of an existing archive
+member must be present as the \fIrelpos\fR argument, before the
+\&\fIarchive\fR specification.  (same as \fBi\fR).
+.IP "\fBc\fR" 4
+.IX Item "c"
+\&\fICreate\fR the archive.  The specified \fIarchive\fR is always
+created if it did not exist, when you request an update.  But a warning is
+issued unless you specify in advance that you expect to create it, by
+using this modifier.
+.IP "\fBD\fR" 4
+.IX Item "D"
+Operate in \fIdeterministic\fR mode.  When adding files and the archive
+index use zero for UIDs, GIDs, timestamps, and use consistent file modes
+for all files.  When this option is used, if \fBar\fR is used with
+identical options and identical input files, multiple runs will create
+identical output files regardless of the input files' owners, groups,
+file modes, or modification times.
+.Sp
+If \fIbinutils\fR was configured with
+\&\fB\-\-enable\-deterministic\-archives\fR, then this mode is on by default.
+It can be disabled with the \fBU\fR modifier, below.
+.IP "\fBf\fR" 4
+.IX Item "f"
+Truncate names in the archive.  \s-1GNU\s0 \fBar\fR will normally permit file
+names of any length.  This will cause it to create archives which are
+not compatible with the native \fBar\fR program on some systems.  If
+this is a concern, the \fBf\fR modifier may be used to truncate file
+names when putting them in the archive.
+.IP "\fBi\fR" 4
+.IX Item "i"
+Insert new files \fIbefore\fR an existing member of the
+archive.  If you use the modifier \fBi\fR, the name of an existing archive
+member must be present as the \fIrelpos\fR argument, before the
+\&\fIarchive\fR specification.  (same as \fBb\fR).
+.IP "\fBl\fR" 4
+.IX Item "l"
+This modifier is accepted but not used.
+.IP "\fBN\fR" 4
+.IX Item "N"
+Uses the \fIcount\fR parameter.  This is used if there are multiple
+entries in the archive with the same name.  Extract or delete instance
+\&\fIcount\fR of the given name from the archive.
+.IP "\fBo\fR" 4
+.IX Item "o"
+Preserve the \fIoriginal\fR dates of members when extracting them.  If
+you do not specify this modifier, files extracted from the archive
+are stamped with the time of extraction.
+.IP "\fBO\fR" 4
+.IX Item "O"
+Display member offsets inside the archive. Use together with the \fBt\fR
+option.
+.IP "\fBP\fR" 4
+.IX Item "P"
+Use the full path name when matching names in the archive.  \s-1GNU\s0
+\&\fBar\fR can not create an archive with a full path name (such archives
+are not \s-1POSIX\s0 complaint), but other archive creators can.  This option
+will cause \s-1GNU\s0 \fBar\fR to match file names using a complete path
+name, which can be convenient when extracting a single file from an
+archive created by another tool.
+.IP "\fBs\fR" 4
+.IX Item "s"
+Write an object-file index into the archive, or update an existing one,
+even if no other change is made to the archive.  You may use this modifier
+flag either with any operation, or alone.  Running \fBar s\fR on an
+archive is equivalent to running \fBranlib\fR on it.
+.IP "\fBS\fR" 4
+.IX Item "S"
+Do not generate an archive symbol table.  This can speed up building a
+large library in several steps.  The resulting archive can not be used
+with the linker.  In order to build a symbol table, you must omit the
+\&\fBS\fR modifier on the last execution of \fBar\fR, or you must run
+\&\fBranlib\fR on the archive.
+.IP "\fBT\fR" 4
+.IX Item "T"
+Make the specified \fIarchive\fR a \fIthin\fR archive.  If it already
+exists and is a regular archive, the existing members must be present
+in the same directory as \fIarchive\fR.
+.IP "\fBu\fR" 4
+.IX Item "u"
+Normally, \fBar r\fR... inserts all files
+listed into the archive.  If you would like to insert \fIonly\fR those
+of the files you list that are newer than existing members of the same
+names, use this modifier.  The \fBu\fR modifier is allowed only for the
+operation \fBr\fR (replace).  In particular, the combination \fBqu\fR is
+not allowed, since checking the timestamps would lose any speed
+advantage from the operation \fBq\fR.
+.IP "\fBU\fR" 4
+.IX Item "U"
+Do \fInot\fR operate in \fIdeterministic\fR mode.  This is the inverse
+of the \fBD\fR modifier, above: added files and the archive index will
+get their actual \s-1UID, GID,\s0 timestamp, and file mode values.
+.Sp
+This is the default unless \fIbinutils\fR was configured with
+\&\fB\-\-enable\-deterministic\-archives\fR.
+.IP "\fBv\fR" 4
+.IX Item "v"
+This modifier requests the \fIverbose\fR version of an operation.  Many
+operations display additional information, such as filenames processed,
+when the modifier \fBv\fR is appended.
+.IP "\fBV\fR" 4
+.IX Item "V"
+This modifier shows the version number of \fBar\fR.
+.PP
+The \fBar\fR program also supports some command-line options which
+are neither modifiers nor actions, but which do change its behaviour
+in specific ways:
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Displays the list of command-line options supported by \fBar\fR
+and then exits.
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+Displays the version information of \fBar\fR and then exits.
+.IP "\fB\-X32_64\fR" 4
+.IX Item "-X32_64"
+\&\fBar\fR ignores an initial option spelt \fB\-X32_64\fR, for
+compatibility with \s-1AIX.\s0  The behaviour produced by this option is the
+default for \s-1GNU\s0 \fBar\fR.  \fBar\fR does not support any
+of the other \fB\-X\fR options; in particular, it does not support
+\&\fB\-X32\fR which is the default for \s-1AIX\s0 \fBar\fR.
+.IP "\fB\-\-plugin\fR \fIname\fR" 4
+.IX Item "--plugin name"
+The optional command-line switch \fB\-\-plugin\fR \fIname\fR causes
+\&\fBar\fR to load the plugin called \fIname\fR which adds support
+for more file formats, including object files with link-time
+optimization information.
+.Sp
+This option is only available if the toolchain has been built with
+plugin support enabled.
+.Sp
+If \fB\-\-plugin\fR is not provided, but plugin support has been
+enabled then \fBar\fR iterates over the files in
+\&\fI${libdir}/bfd\-plugins\fR in alphabetic order and the first
+plugin that claims the object in question is used.
+.Sp
+Please note that this plugin search directory is \fInot\fR the one
+used by \fBld\fR's \fB\-plugin\fR option.  In order to make
+\&\fBar\fR use the  linker plugin it must be copied into the
+\&\fI${libdir}/bfd\-plugins\fR directory.  For \s-1GCC\s0 based compilations
+the linker plugin is called \fIliblto_plugin.so.0.0.0\fR.  For Clang
+based compilations it is called \fILLVMgold.so\fR.  The \s-1GCC\s0 plugin
+is always backwards compatible with earlier versions, so it is
+sufficient to just copy the newest one.
+.IP "\fB\-\-target\fR \fItarget\fR" 4
+.IX Item "--target target"
+The optional command-line switch \fB\-\-target\fR \fIbfdname\fR
+specifies that the archive members are in an object code format
+different from your system's default format.  See
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fInm\fR\|(1), \fIranlib\fR\|(1), and the Info entries for \fIbinutils\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man1/aarch64-elf-as.1 b/share/man/man1/aarch64-elf-as.1
new file mode 100644
index 0000000..2de2c75
--- /dev/null
+++ b/share/man/man1/aarch64-elf-as.1
@@ -0,0 +1,2736 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "AS 1"
+.TH AS 1 "2019-05-21" "binutils-2.32" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+AS \- the portable GNU assembler.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+as [\fB\-a\fR[\fBcdghlns\fR][=\fIfile\fR]] [\fB\-\-alternate\fR] [\fB\-D\fR]
+ [\fB\-\-compress\-debug\-sections\fR]  [\fB\-\-nocompress\-debug\-sections\fR]
+ [\fB\-\-debug\-prefix\-map\fR \fIold\fR=\fInew\fR]
+ [\fB\-\-defsym\fR \fIsym\fR=\fIval\fR] [\fB\-f\fR] [\fB\-g\fR] [\fB\-\-gstabs\fR]
+ [\fB\-\-gstabs+\fR] [\fB\-\-gdwarf\-2\fR] [\fB\-\-gdwarf\-sections\fR]
+ [\fB\-\-help\fR] [\fB\-I\fR \fIdir\fR] [\fB\-J\fR]
+ [\fB\-K\fR] [\fB\-L\fR] [\fB\-\-listing\-lhs\-width\fR=\fI\s-1NUM\s0\fR]
+ [\fB\-\-listing\-lhs\-width2\fR=\fI\s-1NUM\s0\fR] [\fB\-\-listing\-rhs\-width\fR=\fI\s-1NUM\s0\fR]
+ [\fB\-\-listing\-cont\-lines\fR=\fI\s-1NUM\s0\fR] [\fB\-\-keep\-locals\fR]
+ [\fB\-\-no\-pad\-sections\fR]
+ [\fB\-o\fR \fIobjfile\fR] [\fB\-R\fR]
+ [\fB\-\-hash\-size\fR=\fI\s-1NUM\s0\fR] [\fB\-\-reduce\-memory\-overheads\fR]
+ [\fB\-\-statistics\fR]
+ [\fB\-v\fR] [\fB\-version\fR] [\fB\-\-version\fR]
+ [\fB\-W\fR] [\fB\-\-warn\fR] [\fB\-\-fatal\-warnings\fR] [\fB\-w\fR] [\fB\-x\fR]
+ [\fB\-Z\fR] [\fB@\fR\fI\s-1FILE\s0\fR]
+ [\fB\-\-sectname\-subst\fR] [\fB\-\-size\-check=[error|warning]\fR]
+ [\fB\-\-elf\-stt\-common=[no|yes]\fR]
+ [\fB\-\-generate\-missing\-build\-notes=[no|yes]\fR]
+ [\fB\-\-target\-help\fR] [\fItarget-options\fR]
+ [\fB\-\-\fR|\fIfiles\fR ...]
+.SH "TARGET"
+.IX Header "TARGET"
+\&\fITarget AArch64 options:\fR
+   [\fB\-EB\fR|\fB\-EL\fR]
+   [\fB\-mabi\fR=\fI\s-1ABI\s0\fR]
+.PP
+\&\fITarget Alpha options:\fR
+   [\fB\-m\fR\fIcpu\fR]
+   [\fB\-mdebug\fR | \fB\-no\-mdebug\fR]
+   [\fB\-replace\fR | \fB\-noreplace\fR]
+   [\fB\-relax\fR] [\fB\-g\fR] [\fB\-G\fR\fIsize\fR]
+   [\fB\-F\fR] [\fB\-32addr\fR]
+.PP
+\&\fITarget \s-1ARC\s0 options:\fR
+   [\fB\-mcpu=\fR\fIcpu\fR]
+   [\fB\-mA6\fR|\fB\-mARC600\fR|\fB\-mARC601\fR|\fB\-mA7\fR|\fB\-mARC700\fR|\fB\-mEM\fR|\fB\-mHS\fR]
+   [\fB\-mcode\-density\fR]
+   [\fB\-mrelax\fR]
+   [\fB\-EB\fR|\fB\-EL\fR]
+.PP
+\&\fITarget \s-1ARM\s0 options:\fR
+   [\fB\-mcpu\fR=\fIprocessor\fR[+\fIextension\fR...]]
+   [\fB\-march\fR=\fIarchitecture\fR[+\fIextension\fR...]]
+   [\fB\-mfpu\fR=\fIfloating-point-format\fR]
+   [\fB\-mfloat\-abi\fR=\fIabi\fR]
+   [\fB\-meabi\fR=\fIver\fR]
+   [\fB\-mthumb\fR]
+   [\fB\-EB\fR|\fB\-EL\fR]
+   [\fB\-mapcs\-32\fR|\fB\-mapcs\-26\fR|\fB\-mapcs\-float\fR|
+    \fB\-mapcs\-reentrant\fR]
+   [\fB\-mthumb\-interwork\fR] [\fB\-k\fR]
+.PP
+\&\fITarget Blackfin options:\fR
+   [\fB\-mcpu\fR=\fIprocessor\fR[\-\fIsirevision\fR]]
+   [\fB\-mfdpic\fR]
+   [\fB\-mno\-fdpic\fR]
+   [\fB\-mnopic\fR]
+.PP
+\&\fITarget \s-1CRIS\s0 options:\fR
+   [\fB\-\-underscore\fR | \fB\-\-no\-underscore\fR]
+   [\fB\-\-pic\fR] [\fB\-N\fR]
+   [\fB\-\-emulation=criself\fR | \fB\-\-emulation=crisaout\fR]
+   [\fB\-\-march=v0_v10\fR | \fB\-\-march=v10\fR | \fB\-\-march=v32\fR | \fB\-\-march=common_v10_v32\fR]
+.PP
+\&\fITarget C\-SKY options:\fR
+   [\fB\-march=\fR\fIarch\fR] [\fB\-mcpu=\fR\fIcpu\fR]
+   [\fB\-EL\fR] [\fB\-mlittle\-endian\fR] [\fB\-EB\fR] [\fB\-mbig\-endian\fR]
+   [\fB\-fpic\fR] [\fB\-pic\fR]
+   [\fB\-mljump\fR] [\fB\-mno\-ljump\fR]
+   [\fB\-force2bsr\fR] [\fB\-mforce2bsr\fR] [\fB\-no\-force2bsr\fR] [\fB\-mno\-force2bsr\fR]
+   [\fB\-jsri2bsr\fR] [\fB\-mjsri2bsr\fR] [\fB\-no\-jsri2bsr\fR ] [\fB\-mno\-jsri2bsr\fR]
+   [\fB\-mnolrw\fR ] [\fB\-mno\-lrw\fR]
+   [\fB\-melrw\fR] [\fB\-mno\-elrw\fR]
+   [\fB\-mlaf\fR ] [\fB\-mliterals\-after\-func\fR]
+   [\fB\-mno\-laf\fR] [\fB\-mno\-literals\-after\-func\fR]
+   [\fB\-mlabr\fR] [\fB\-mliterals\-after\-br\fR]
+   [\fB\-mno\-labr\fR] [\fB\-mnoliterals\-after\-br\fR]
+   [\fB\-mistack\fR] [\fB\-mno\-istack\fR]
+   [\fB\-mhard\-float\fR] [\fB\-mmp\fR] [\fB\-mcp\fR] [\fB\-mcache\fR]
+   [\fB\-msecurity\fR] [\fB\-mtrust\fR]
+   [\fB\-mdsp\fR] [\fB\-medsp\fR] [\fB\-mvdsp\fR]
+.PP
+\&\fITarget D10V options:\fR
+   [\fB\-O\fR]
+.PP
+\&\fITarget D30V options:\fR
+   [\fB\-O\fR|\fB\-n\fR|\fB\-N\fR]
+.PP
+\&\fITarget \s-1EPIPHANY\s0 options:\fR
+   [\fB\-mepiphany\fR|\fB\-mepiphany16\fR]
+.PP
+\&\fITarget H8/300 options:\fR
+   [\-h\-tick\-hex]
+.PP
+\&\fITarget i386 options:\fR
+   [\fB\-\-32\fR|\fB\-\-x32\fR|\fB\-\-64\fR] [\fB\-n\fR]
+   [\fB\-march\fR=\fI\s-1CPU\s0\fR[+\fI\s-1EXTENSION\s0\fR...]] [\fB\-mtune\fR=\fI\s-1CPU\s0\fR]
+.PP
+\&\fITarget \s-1IA\-64\s0 options:\fR
+   [\fB\-mconstant\-gp\fR|\fB\-mauto\-pic\fR]
+   [\fB\-milp32\fR|\fB\-milp64\fR|\fB\-mlp64\fR|\fB\-mp64\fR]
+   [\fB\-mle\fR|\fBmbe\fR]
+   [\fB\-mtune=itanium1\fR|\fB\-mtune=itanium2\fR]
+   [\fB\-munwind\-check=warning\fR|\fB\-munwind\-check=error\fR]
+   [\fB\-mhint.b=ok\fR|\fB\-mhint.b=warning\fR|\fB\-mhint.b=error\fR]
+   [\fB\-x\fR|\fB\-xexplicit\fR] [\fB\-xauto\fR] [\fB\-xdebug\fR]
+.PP
+\&\fITarget \s-1IP2K\s0 options:\fR
+   [\fB\-mip2022\fR|\fB\-mip2022ext\fR]
+.PP
+\&\fITarget M32C options:\fR
+   [\fB\-m32c\fR|\fB\-m16c\fR] [\-relax] [\-h\-tick\-hex]
+.PP
+\&\fITarget M32R options:\fR
+   [\fB\-\-m32rx\fR|\fB\-\-[no\-]warn\-explicit\-parallel\-conflicts\fR|
+   \fB\-\-W[n]p\fR]
+.PP
+\&\fITarget M680X0 options:\fR
+   [\fB\-l\fR] [\fB\-m68000\fR|\fB\-m68010\fR|\fB\-m68020\fR|...]
+.PP
+\&\fITarget M68HC11 options:\fR
+   [\fB\-m68hc11\fR|\fB\-m68hc12\fR|\fB\-m68hcs12\fR|\fB\-mm9s12x\fR|\fB\-mm9s12xg\fR]
+   [\fB\-mshort\fR|\fB\-mlong\fR]
+   [\fB\-mshort\-double\fR|\fB\-mlong\-double\fR]
+   [\fB\-\-force\-long\-branches\fR] [\fB\-\-short\-branches\fR]
+   [\fB\-\-strict\-direct\-mode\fR] [\fB\-\-print\-insn\-syntax\fR]
+   [\fB\-\-print\-opcodes\fR] [\fB\-\-generate\-example\fR]
+.PP
+\&\fITarget \s-1MCORE\s0 options:\fR
+   [\fB\-jsri2bsr\fR] [\fB\-sifilter\fR] [\fB\-relax\fR]
+   [\fB\-mcpu=[210|340]\fR]
+.PP
+\&\fITarget Meta options:\fR
+   [\fB\-mcpu=\fR\fIcpu\fR] [\fB\-mfpu=\fR\fIcpu\fR] [\fB\-mdsp=\fR\fIcpu\fR]
+\&\fITarget \s-1MICROBLAZE\s0 options:\fR
+.PP
+\&\fITarget \s-1MIPS\s0 options:\fR
+   [\fB\-nocpp\fR] [\fB\-EL\fR] [\fB\-EB\fR] [\fB\-O\fR[\fIoptimization level\fR]]
+   [\fB\-g\fR[\fIdebug level\fR]] [\fB\-G\fR \fInum\fR] [\fB\-KPIC\fR] [\fB\-call_shared\fR]
+   [\fB\-non_shared\fR] [\fB\-xgot\fR [\fB\-mvxworks\-pic\fR]
+   [\fB\-mabi\fR=\fI\s-1ABI\s0\fR] [\fB\-32\fR] [\fB\-n32\fR] [\fB\-64\fR] [\fB\-mfp32\fR] [\fB\-mgp32\fR]
+   [\fB\-mfp64\fR] [\fB\-mgp64\fR] [\fB\-mfpxx\fR]
+   [\fB\-modd\-spreg\fR] [\fB\-mno\-odd\-spreg\fR]
+   [\fB\-march\fR=\fI\s-1CPU\s0\fR] [\fB\-mtune\fR=\fI\s-1CPU\s0\fR] [\fB\-mips1\fR] [\fB\-mips2\fR]
+   [\fB\-mips3\fR] [\fB\-mips4\fR] [\fB\-mips5\fR] [\fB\-mips32\fR] [\fB\-mips32r2\fR]
+   [\fB\-mips32r3\fR] [\fB\-mips32r5\fR] [\fB\-mips32r6\fR] [\fB\-mips64\fR] [\fB\-mips64r2\fR]
+   [\fB\-mips64r3\fR] [\fB\-mips64r5\fR] [\fB\-mips64r6\fR]
+   [\fB\-construct\-floats\fR] [\fB\-no\-construct\-floats\fR]
+   [\fB\-mignore\-branch\-isa\fR] [\fB\-mno\-ignore\-branch\-isa\fR]
+   [\fB\-mnan=\fR\fIencoding\fR]
+   [\fB\-trap\fR] [\fB\-no\-break\fR] [\fB\-break\fR] [\fB\-no\-trap\fR]
+   [\fB\-mips16\fR] [\fB\-no\-mips16\fR]
+   [\fB\-mmips16e2\fR] [\fB\-mno\-mips16e2\fR]
+   [\fB\-mmicromips\fR] [\fB\-mno\-micromips\fR]
+   [\fB\-msmartmips\fR] [\fB\-mno\-smartmips\fR]
+   [\fB\-mips3d\fR] [\fB\-no\-mips3d\fR]
+   [\fB\-mdmx\fR] [\fB\-no\-mdmx\fR]
+   [\fB\-mdsp\fR] [\fB\-mno\-dsp\fR]
+   [\fB\-mdspr2\fR] [\fB\-mno\-dspr2\fR]
+   [\fB\-mdspr3\fR] [\fB\-mno\-dspr3\fR]
+   [\fB\-mmsa\fR] [\fB\-mno\-msa\fR]
+   [\fB\-mxpa\fR] [\fB\-mno\-xpa\fR]
+   [\fB\-mmt\fR] [\fB\-mno\-mt\fR]
+   [\fB\-mmcu\fR] [\fB\-mno\-mcu\fR]
+   [\fB\-mcrc\fR] [\fB\-mno\-crc\fR]
+   [\fB\-mginv\fR] [\fB\-mno\-ginv\fR]
+   [\fB\-mloongson\-mmi\fR] [\fB\-mno\-loongson\-mmi\fR]
+   [\fB\-mloongson\-cam\fR] [\fB\-mno\-loongson\-cam\fR]
+   [\fB\-mloongson\-ext\fR] [\fB\-mno\-loongson\-ext\fR]
+   [\fB\-mloongson\-ext2\fR] [\fB\-mno\-loongson\-ext2\fR]
+   [\fB\-minsn32\fR] [\fB\-mno\-insn32\fR]
+   [\fB\-mfix7000\fR] [\fB\-mno\-fix7000\fR]
+   [\fB\-mfix\-rm7000\fR] [\fB\-mno\-fix\-rm7000\fR]
+   [\fB\-mfix\-vr4120\fR] [\fB\-mno\-fix\-vr4120\fR]
+   [\fB\-mfix\-vr4130\fR] [\fB\-mno\-fix\-vr4130\fR]
+   [\fB\-mfix\-r5900\fR] [\fB\-mno\-fix\-r5900\fR]
+   [\fB\-mdebug\fR] [\fB\-no\-mdebug\fR]
+   [\fB\-mpdr\fR] [\fB\-mno\-pdr\fR]
+.PP
+\&\fITarget \s-1MMIX\s0 options:\fR
+   [\fB\-\-fixed\-special\-register\-names\fR] [\fB\-\-globalize\-symbols\fR]
+   [\fB\-\-gnu\-syntax\fR] [\fB\-\-relax\fR] [\fB\-\-no\-predefined\-symbols\fR]
+   [\fB\-\-no\-expand\fR] [\fB\-\-no\-merge\-gregs\fR] [\fB\-x\fR]
+   [\fB\-\-linker\-allocated\-gregs\fR]
+.PP
+\&\fITarget Nios \s-1II\s0 options:\fR
+   [\fB\-relax\-all\fR] [\fB\-relax\-section\fR] [\fB\-no\-relax\fR]
+   [\fB\-EB\fR] [\fB\-EL\fR]
+.PP
+\&\fITarget \s-1NDS32\s0 options:\fR
+    [\fB\-EL\fR] [\fB\-EB\fR] [\fB\-O\fR] [\fB\-Os\fR] [\fB\-mcpu=\fR\fIcpu\fR]
+    [\fB\-misa=\fR\fIisa\fR] [\fB\-mabi=\fR\fIabi\fR] [\fB\-mall\-ext\fR]
+    [\fB\-m[no\-]16\-bit\fR]  [\fB\-m[no\-]perf\-ext\fR] [\fB\-m[no\-]perf2\-ext\fR]
+    [\fB\-m[no\-]string\-ext\fR] [\fB\-m[no\-]dsp\-ext\fR] [\fB\-m[no\-]mac\fR] [\fB\-m[no\-]div\fR]
+    [\fB\-m[no\-]audio\-isa\-ext\fR] [\fB\-m[no\-]fpu\-sp\-ext\fR] [\fB\-m[no\-]fpu\-dp\-ext\fR]
+    [\fB\-m[no\-]fpu\-fma\fR] [\fB\-mfpu\-freg=\fR\fI\s-1FREG\s0\fR] [\fB\-mreduced\-regs\fR]
+    [\fB\-mfull\-regs\fR] [\fB\-m[no\-]dx\-regs\fR] [\fB\-mpic\fR] [\fB\-mno\-relax\fR]
+    [\fB\-mb2bb\fR]
+.PP
+\&\fITarget \s-1PDP11\s0 options:\fR
+   [\fB\-mpic\fR|\fB\-mno\-pic\fR] [\fB\-mall\fR] [\fB\-mno\-extensions\fR]
+   [\fB\-m\fR\fIextension\fR|\fB\-mno\-\fR\fIextension\fR]
+   [\fB\-m\fR\fIcpu\fR] [\fB\-m\fR\fImachine\fR]
+.PP
+\&\fITarget picoJava options:\fR
+   [\fB\-mb\fR|\fB\-me\fR]
+.PP
+\&\fITarget PowerPC options:\fR
+   [\fB\-a32\fR|\fB\-a64\fR]
+   [\fB\-mpwrx\fR|\fB\-mpwr2\fR|\fB\-mpwr\fR|\fB\-m601\fR|\fB\-mppc\fR|\fB\-mppc32\fR|\fB\-m603\fR|\fB\-m604\fR|\fB\-m403\fR|\fB\-m405\fR|
+    \fB\-m440\fR|\fB\-m464\fR|\fB\-m476\fR|\fB\-m7400\fR|\fB\-m7410\fR|\fB\-m7450\fR|\fB\-m7455\fR|\fB\-m750cl\fR|\fB\-mgekko\fR|
+    \fB\-mbroadway\fR|\fB\-mppc64\fR|\fB\-m620\fR|\fB\-me500\fR|\fB\-e500x2\fR|\fB\-me500mc\fR|\fB\-me500mc64\fR|\fB\-me5500\fR|
+    \fB\-me6500\fR|\fB\-mppc64bridge\fR|\fB\-mbooke\fR|\fB\-mpower4\fR|\fB\-mpwr4\fR|\fB\-mpower5\fR|\fB\-mpwr5\fR|\fB\-mpwr5x\fR|
+    \fB\-mpower6\fR|\fB\-mpwr6\fR|\fB\-mpower7\fR|\fB\-mpwr7\fR|\fB\-mpower8\fR|\fB\-mpwr8\fR|\fB\-mpower9\fR|\fB\-mpwr9\fR\fB\-ma2\fR|
+    \fB\-mcell\fR|\fB\-mspe\fR|\fB\-mspe2\fR|\fB\-mtitan\fR|\fB\-me300\fR|\fB\-mcom\fR]
+   [\fB\-many\fR] [\fB\-maltivec\fR|\fB\-mvsx\fR|\fB\-mhtm\fR|\fB\-mvle\fR]
+   [\fB\-mregnames\fR|\fB\-mno\-regnames\fR]
+   [\fB\-mrelocatable\fR|\fB\-mrelocatable\-lib\fR|\fB\-K \s-1PIC\s0\fR] [\fB\-memb\fR]
+   [\fB\-mlittle\fR|\fB\-mlittle\-endian\fR|\fB\-le\fR|\fB\-mbig\fR|\fB\-mbig\-endian\fR|\fB\-be\fR]
+   [\fB\-msolaris\fR|\fB\-mno\-solaris\fR]
+   [\fB\-nops=\fR\fIcount\fR]
+.PP
+\&\fITarget \s-1PRU\s0 options:\fR
+   [\fB\-link\-relax\fR]
+   [\fB\-mnolink\-relax\fR]
+   [\fB\-mno\-warn\-regname\-label\fR]
+.PP
+\&\fITarget RISC-V options:\fR
+   [\fB\-fpic\fR|\fB\-fPIC\fR|\fB\-fno\-pic\fR]
+   [\fB\-march\fR=\fI\s-1ISA\s0\fR]
+   [\fB\-mabi\fR=\fI\s-1ABI\s0\fR]
+.PP
+\&\fITarget \s-1RL78\s0 options:\fR
+   [\fB\-mg10\fR]
+   [\fB\-m32bit\-doubles\fR|\fB\-m64bit\-doubles\fR]
+.PP
+\&\fITarget \s-1RX\s0 options:\fR
+   [\fB\-mlittle\-endian\fR|\fB\-mbig\-endian\fR]
+   [\fB\-m32bit\-doubles\fR|\fB\-m64bit\-doubles\fR]
+   [\fB\-muse\-conventional\-section\-names\fR]
+   [\fB\-msmall\-data\-limit\fR]
+   [\fB\-mpid\fR]
+   [\fB\-mrelax\fR]
+   [\fB\-mint\-register=\fR\fInumber\fR]
+   [\fB\-mgcc\-abi\fR|\fB\-mrx\-abi\fR]
+.PP
+\&\fITarget s390 options:\fR
+   [\fB\-m31\fR|\fB\-m64\fR] [\fB\-mesa\fR|\fB\-mzarch\fR] [\fB\-march\fR=\fI\s-1CPU\s0\fR]
+   [\fB\-mregnames\fR|\fB\-mno\-regnames\fR]
+   [\fB\-mwarn\-areg\-zero\fR]
+.PP
+\&\fITarget \s-1SCORE\s0 options:\fR
+   [\fB\-EB\fR][\fB\-EL\fR][\fB\-FIXDD\fR][\fB\-NWARN\fR]
+   [\fB\-SCORE5\fR][\fB\-SCORE5U\fR][\fB\-SCORE7\fR][\fB\-SCORE3\fR]
+   [\fB\-march=score7\fR][\fB\-march=score3\fR]
+   [\fB\-USE_R1\fR][\fB\-KPIC\fR][\fB\-O0\fR][\fB\-G\fR \fInum\fR][\fB\-V\fR]
+.PP
+\&\fITarget \s-1SPARC\s0 options:\fR
+   [\fB\-Av6\fR|\fB\-Av7\fR|\fB\-Av8\fR|\fB\-Aleon\fR|\fB\-Asparclet\fR|\fB\-Asparclite\fR
+    \fB\-Av8plus\fR|\fB\-Av8plusa\fR|\fB\-Av8plusb\fR|\fB\-Av8plusc\fR|\fB\-Av8plusd\fR
+    \fB\-Av8plusv\fR|\fB\-Av8plusm\fR|\fB\-Av9\fR|\fB\-Av9a\fR|\fB\-Av9b\fR|\fB\-Av9c\fR
+    \fB\-Av9d\fR|\fB\-Av9e\fR|\fB\-Av9v\fR|\fB\-Av9m\fR|\fB\-Asparc\fR|\fB\-Asparcvis\fR
+    \fB\-Asparcvis2\fR|\fB\-Asparcfmaf\fR|\fB\-Asparcima\fR|\fB\-Asparcvis3\fR
+    \fB\-Asparcvisr\fR|\fB\-Asparc5\fR]
+   [\fB\-xarch=v8plus\fR|\fB\-xarch=v8plusa\fR]|\fB\-xarch=v8plusb\fR|\fB\-xarch=v8plusc\fR
+    \fB\-xarch=v8plusd\fR|\fB\-xarch=v8plusv\fR|\fB\-xarch=v8plusm\fR|\fB\-xarch=v9\fR
+    \fB\-xarch=v9a\fR|\fB\-xarch=v9b\fR|\fB\-xarch=v9c\fR|\fB\-xarch=v9d\fR|\fB\-xarch=v9e\fR
+    \fB\-xarch=v9v\fR|\fB\-xarch=v9m\fR|\fB\-xarch=sparc\fR|\fB\-xarch=sparcvis\fR
+    \fB\-xarch=sparcvis2\fR|\fB\-xarch=sparcfmaf\fR|\fB\-xarch=sparcima\fR
+    \fB\-xarch=sparcvis3\fR|\fB\-xarch=sparcvisr\fR|\fB\-xarch=sparc5\fR
+    \fB\-bump\fR]
+   [\fB\-32\fR|\fB\-64\fR]
+   [\fB\-\-enforce\-aligned\-data\fR][\fB\-\-dcti\-couples\-detect\fR]
+.PP
+\&\fITarget \s-1TIC54X\s0 options:\fR
+ [\fB\-mcpu=54[123589]\fR|\fB\-mcpu=54[56]lp\fR] [\fB\-mfar\-mode\fR|\fB\-mf\fR]
+ [\fB\-merrors\-to\-file\fR \fI<filename>\fR|\fB\-me\fR \fI<filename>\fR]
+.PP
+\&\fITarget \s-1TIC6X\s0 options:\fR
+   [\fB\-march=\fR\fIarch\fR] [\fB\-mbig\-endian\fR|\fB\-mlittle\-endian\fR]
+   [\fB\-mdsbt\fR|\fB\-mno\-dsbt\fR] [\fB\-mpid=no\fR|\fB\-mpid=near\fR|\fB\-mpid=far\fR]
+   [\fB\-mpic\fR|\fB\-mno\-pic\fR]
+.PP
+\&\fITarget TILE-Gx options:\fR
+   [\fB\-m32\fR|\fB\-m64\fR][\fB\-EB\fR][\fB\-EL\fR]
+.PP
+\&\fITarget Visium options:\fR
+   [\fB\-mtune=\fR\fIarch\fR]
+.PP
+\&\fITarget Xtensa options:\fR
+ [\fB\-\-[no\-]text\-section\-literals\fR] [\fB\-\-[no\-]auto\-litpools\fR]
+ [\fB\-\-[no\-]absolute\-literals\fR]
+ [\fB\-\-[no\-]target\-align\fR] [\fB\-\-[no\-]longcalls\fR]
+ [\fB\-\-[no\-]transform\fR]
+ [\fB\-\-rename\-section\fR \fIoldname\fR=\fInewname\fR]
+ [\fB\-\-[no\-]trampolines\fR]
+.PP
+\&\fITarget Z80 options:\fR
+  [\fB\-z80\fR] [\fB\-r800\fR]
+  [ \fB\-ignore\-undocumented\-instructions\fR] [\fB\-Wnud\fR]
+  [ \fB\-ignore\-unportable\-instructions\fR] [\fB\-Wnup\fR]
+  [ \fB\-warn\-undocumented\-instructions\fR] [\fB\-Wud\fR]
+  [ \fB\-warn\-unportable\-instructions\fR] [\fB\-Wup\fR]
+  [ \fB\-forbid\-undocumented\-instructions\fR] [\fB\-Fud\fR]
+  [ \fB\-forbid\-unportable\-instructions\fR] [\fB\-Fup\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\s-1GNU\s0 \fBas\fR is really a family of assemblers.
+If you use (or have used) the \s-1GNU\s0 assembler on one architecture, you
+should find a fairly similar environment when you use it on another
+architecture.  Each version has much in common with the others,
+including object file formats, most assembler directives (often called
+\&\fIpseudo-ops\fR) and assembler syntax.
+.PP
+\&\fBas\fR is primarily intended to assemble the output of the
+\&\s-1GNU C\s0 compiler \f(CW\*(C`gcc\*(C'\fR for use by the linker
+\&\f(CW\*(C`ld\*(C'\fR.  Nevertheless, we've tried to make \fBas\fR
+assemble correctly everything that other assemblers for the same
+machine would assemble.
+Any exceptions are documented explicitly.
+This doesn't mean \fBas\fR always uses the same syntax as another
+assembler for the same architecture; for example, we know of several
+incompatible versions of 680x0 assembly language syntax.
+.PP
+Each time you run \fBas\fR it assembles exactly one source
+program.  The source program is made up of one or more files.
+(The standard input is also a file.)
+.PP
+You give \fBas\fR a command line that has zero or more input file
+names.  The input files are read (from left file name to right).  A
+command-line argument (in any position) that has no special meaning
+is taken to be an input file name.
+.PP
+If you give \fBas\fR no file names it attempts to read one input file
+from the \fBas\fR standard input, which is normally your terminal.  You
+may have to type \fBctl-D\fR to tell \fBas\fR there is no more program
+to assemble.
+.PP
+Use \fB\-\-\fR if you need to explicitly name the standard input file
+in your command line.
+.PP
+If the source is empty, \fBas\fR produces a small, empty object
+file.
+.PP
+\&\fBas\fR may write warnings and error messages to the standard error
+file (usually your terminal).  This should not happen when  a compiler
+runs \fBas\fR automatically.  Warnings report an assumption made so
+that \fBas\fR could keep assembling a flawed program; errors report a
+grave problem that stops the assembly.
+.PP
+If you are invoking \fBas\fR via the \s-1GNU C\s0 compiler,
+you can use the \fB\-Wa\fR option to pass arguments through to the assembler.
+The assembler arguments must be separated from each other (and the \fB\-Wa\fR)
+by commas.  For example:
+.PP
+.Vb 1
+\&        gcc \-c \-g \-O \-Wa,\-alh,\-L file.c
+.Ve
+.PP
+This passes two options to the assembler: \fB\-alh\fR (emit a listing to
+standard output with high-level and assembly source) and \fB\-L\fR (retain
+local symbols in the symbol table).
+.PP
+Usually you do not need to use this \fB\-Wa\fR mechanism, since many compiler
+command-line options are automatically passed to the assembler by the compiler.
+(You can call the \s-1GNU\s0 compiler driver with the \fB\-v\fR option to see
+precisely what options it passes to each compilation pass, including the
+assembler.)
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.IP "\fB\-a[cdghlmns]\fR" 4
+.IX Item "-a[cdghlmns]"
+Turn on listings, in any of a variety of ways:
+.RS 4
+.IP "\fB\-ac\fR" 4
+.IX Item "-ac"
+omit false conditionals
+.IP "\fB\-ad\fR" 4
+.IX Item "-ad"
+omit debugging directives
+.IP "\fB\-ag\fR" 4
+.IX Item "-ag"
+include general information, like as version and options passed
+.IP "\fB\-ah\fR" 4
+.IX Item "-ah"
+include high-level source
+.IP "\fB\-al\fR" 4
+.IX Item "-al"
+include assembly
+.IP "\fB\-am\fR" 4
+.IX Item "-am"
+include macro expansions
+.IP "\fB\-an\fR" 4
+.IX Item "-an"
+omit forms processing
+.IP "\fB\-as\fR" 4
+.IX Item "-as"
+include symbols
+.IP "\fB=file\fR" 4
+.IX Item "=file"
+set the name of the listing file
+.RE
+.RS 4
+.Sp
+You may combine these options; for example, use \fB\-aln\fR for assembly
+listing without forms processing.  The \fB=file\fR option, if used, must be
+the last one.  By itself, \fB\-a\fR defaults to \fB\-ahls\fR.
+.RE
+.IP "\fB\-\-alternate\fR" 4
+.IX Item "--alternate"
+Begin in alternate macro mode.
+.IP "\fB\-\-compress\-debug\-sections\fR" 4
+.IX Item "--compress-debug-sections"
+Compress \s-1DWARF\s0 debug sections using zlib with \s-1SHF_COMPRESSED\s0 from the
+\&\s-1ELF ABI.\s0  The resulting object file may not be compatible with older
+linkers and object file utilities.  Note if compression would make a
+given section \fIlarger\fR then it is not compressed.
+.IP "\fB\-\-compress\-debug\-sections=none\fR" 4
+.IX Item "--compress-debug-sections=none"
+.PD 0
+.IP "\fB\-\-compress\-debug\-sections=zlib\fR" 4
+.IX Item "--compress-debug-sections=zlib"
+.IP "\fB\-\-compress\-debug\-sections=zlib\-gnu\fR" 4
+.IX Item "--compress-debug-sections=zlib-gnu"
+.IP "\fB\-\-compress\-debug\-sections=zlib\-gabi\fR" 4
+.IX Item "--compress-debug-sections=zlib-gabi"
+.PD
+These options control how \s-1DWARF\s0 debug sections are compressed.
+\&\fB\-\-compress\-debug\-sections=none\fR is equivalent to
+\&\fB\-\-nocompress\-debug\-sections\fR.
+\&\fB\-\-compress\-debug\-sections=zlib\fR and
+\&\fB\-\-compress\-debug\-sections=zlib\-gabi\fR are equivalent to
+\&\fB\-\-compress\-debug\-sections\fR.
+\&\fB\-\-compress\-debug\-sections=zlib\-gnu\fR compresses \s-1DWARF\s0 debug
+sections using zlib.  The debug sections are renamed to begin with
+\&\fB.zdebug\fR.  Note if compression would make a given section
+\&\fIlarger\fR then it is not compressed nor renamed.
+.IP "\fB\-\-nocompress\-debug\-sections\fR" 4
+.IX Item "--nocompress-debug-sections"
+Do not compress \s-1DWARF\s0 debug sections.  This is usually the default for all
+targets except the x86/x86_64, but a configure time option can be used to
+override this.
+.IP "\fB\-D\fR" 4
+.IX Item "-D"
+Ignored.  This option is accepted for script compatibility with calls to
+other assemblers.
+.IP "\fB\-\-debug\-prefix\-map\fR \fIold\fR\fB=\fR\fInew\fR" 4
+.IX Item "--debug-prefix-map old=new"
+When assembling files in directory \fI\fIold\fI\fR, record debugging
+information describing them as in \fI\fInew\fI\fR instead.
+.IP "\fB\-\-defsym\fR \fIsym\fR\fB=\fR\fIvalue\fR" 4
+.IX Item "--defsym sym=value"
+Define the symbol \fIsym\fR to be \fIvalue\fR before assembling the input file.
+\&\fIvalue\fR must be an integer constant.  As in C, a leading \fB0x\fR
+indicates a hexadecimal value, and a leading \fB0\fR indicates an octal
+value.  The value of the symbol can be overridden inside a source file via the
+use of a \f(CW\*(C`.set\*(C'\fR pseudo-op.
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+\&\*(L"fast\*(R"\-\-\-skip whitespace and comment preprocessing (assume source is
+compiler output).
+.IP "\fB\-g\fR" 4
+.IX Item "-g"
+.PD 0
+.IP "\fB\-\-gen\-debug\fR" 4
+.IX Item "--gen-debug"
+.PD
+Generate debugging information for each assembler source line using whichever
+debug format is preferred by the target.  This currently means either \s-1STABS,
+ECOFF\s0 or \s-1DWARF2.\s0
+.IP "\fB\-\-gstabs\fR" 4
+.IX Item "--gstabs"
+Generate stabs debugging information for each assembler line.  This
+may help debugging assembler code, if the debugger can handle it.
+.IP "\fB\-\-gstabs+\fR" 4
+.IX Item "--gstabs+"
+Generate stabs debugging information for each assembler line, with \s-1GNU\s0
+extensions that probably only gdb can handle, and that could make other
+debuggers crash or refuse to read your program.  This
+may help debugging assembler code.  Currently the only \s-1GNU\s0 extension is
+the location of the current working directory at assembling time.
+.IP "\fB\-\-gdwarf\-2\fR" 4
+.IX Item "--gdwarf-2"
+Generate \s-1DWARF2\s0 debugging information for each assembler line.  This
+may help debugging assembler code, if the debugger can handle it.  Note\-\-\-this
+option is only supported by some targets, not all of them.
+.IP "\fB\-\-gdwarf\-sections\fR" 4
+.IX Item "--gdwarf-sections"
+Instead of creating a .debug_line section, create a series of
+\&.debug_line.\fIfoo\fR sections where \fIfoo\fR is the name of the
+corresponding code section.  For example a code section called \fI.text.func\fR
+will have its dwarf line number information placed into a section called
+\&\fI.debug_line.text.func\fR.  If the code section is just called \fI.text\fR
+then debug line section will still be called just \fI.debug_line\fR without any
+suffix.
+.IP "\fB\-\-size\-check=error\fR" 4
+.IX Item "--size-check=error"
+.PD 0
+.IP "\fB\-\-size\-check=warning\fR" 4
+.IX Item "--size-check=warning"
+.PD
+Issue an error or warning for invalid \s-1ELF\s0 .size directive.
+.IP "\fB\-\-elf\-stt\-common=no\fR" 4
+.IX Item "--elf-stt-common=no"
+.PD 0
+.IP "\fB\-\-elf\-stt\-common=yes\fR" 4
+.IX Item "--elf-stt-common=yes"
+.PD
+These options control whether the \s-1ELF\s0 assembler should generate common
+symbols with the \f(CW\*(C`STT_COMMON\*(C'\fR type.  The default can be controlled
+by a configure option \fB\-\-enable\-elf\-stt\-common\fR.
+.IP "\fB\-\-generate\-missing\-build\-notes=yes\fR" 4
+.IX Item "--generate-missing-build-notes=yes"
+.PD 0
+.IP "\fB\-\-generate\-missing\-build\-notes=no\fR" 4
+.IX Item "--generate-missing-build-notes=no"
+.PD
+These options control whether the \s-1ELF\s0 assembler should generate \s-1GNU\s0 Build
+attribute notes if none are present in the input sources.
+The default can be controlled by the \fB\-\-enable\-generate\-build\-notes\fR
+configure option.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of the command-line options and exit.
+.IP "\fB\-\-target\-help\fR" 4
+.IX Item "--target-help"
+Print a summary of all target specific options and exit.
+.IP "\fB\-I\fR \fIdir\fR" 4
+.IX Item "-I dir"
+Add directory \fIdir\fR to the search list for \f(CW\*(C`.include\*(C'\fR directives.
+.IP "\fB\-J\fR" 4
+.IX Item "-J"
+Don't warn about signed overflow.
+.IP "\fB\-K\fR" 4
+.IX Item "-K"
+Issue warnings when difference tables altered for long displacements.
+.IP "\fB\-L\fR" 4
+.IX Item "-L"
+.PD 0
+.IP "\fB\-\-keep\-locals\fR" 4
+.IX Item "--keep-locals"
+.PD
+Keep (in the symbol table) local symbols.  These symbols start with
+system-specific local label prefixes, typically \fB.L\fR for \s-1ELF\s0 systems
+or \fBL\fR for traditional a.out systems.
+.IP "\fB\-\-listing\-lhs\-width=\fR\fInumber\fR" 4
+.IX Item "--listing-lhs-width=number"
+Set the maximum width, in words, of the output data column for an assembler
+listing to \fInumber\fR.
+.IP "\fB\-\-listing\-lhs\-width2=\fR\fInumber\fR" 4
+.IX Item "--listing-lhs-width2=number"
+Set the maximum width, in words, of the output data column for continuation
+lines in an assembler listing to \fInumber\fR.
+.IP "\fB\-\-listing\-rhs\-width=\fR\fInumber\fR" 4
+.IX Item "--listing-rhs-width=number"
+Set the maximum width of an input source line, as displayed in a listing, to
+\&\fInumber\fR bytes.
+.IP "\fB\-\-listing\-cont\-lines=\fR\fInumber\fR" 4
+.IX Item "--listing-cont-lines=number"
+Set the maximum number of lines printed in a listing for a single line of input
+to \fInumber\fR + 1.
+.IP "\fB\-\-no\-pad\-sections\fR" 4
+.IX Item "--no-pad-sections"
+Stop the assembler for padding the ends of output sections to the alignment
+of that section.  The default is to pad the sections, but this can waste space
+which might be needed on targets which have tight memory constraints.
+.IP "\fB\-o\fR \fIobjfile\fR" 4
+.IX Item "-o objfile"
+Name the object-file output from \fBas\fR \fIobjfile\fR.
+.IP "\fB\-R\fR" 4
+.IX Item "-R"
+Fold the data section into the text section.
+.IP "\fB\-\-hash\-size=\fR\fInumber\fR" 4
+.IX Item "--hash-size=number"
+Set the default size of \s-1GAS\s0's hash tables to a prime number close to
+\&\fInumber\fR.  Increasing this value can reduce the length of time it takes the
+assembler to perform its tasks, at the expense of increasing the assembler's
+memory requirements.  Similarly reducing this value can reduce the memory
+requirements at the expense of speed.
+.IP "\fB\-\-reduce\-memory\-overheads\fR" 4
+.IX Item "--reduce-memory-overheads"
+This option reduces \s-1GAS\s0's memory requirements, at the expense of making the
+assembly processes slower.  Currently this switch is a synonym for
+\&\fB\-\-hash\-size=4051\fR, but in the future it may have other effects as well.
+.IP "\fB\-\-sectname\-subst\fR" 4
+.IX Item "--sectname-subst"
+Honor substitution sequences in section names.
+.IP "\fB\-\-statistics\fR" 4
+.IX Item "--statistics"
+Print the maximum space (in bytes) and total time (in seconds) used by
+assembly.
+.IP "\fB\-\-strip\-local\-absolute\fR" 4
+.IX Item "--strip-local-absolute"
+Remove local absolute symbols from the outgoing symbol table.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-version\fR" 4
+.IX Item "-version"
+.PD
+Print the \fBas\fR version.
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+Print the \fBas\fR version and exit.
+.IP "\fB\-W\fR" 4
+.IX Item "-W"
+.PD 0
+.IP "\fB\-\-no\-warn\fR" 4
+.IX Item "--no-warn"
+.PD
+Suppress warning messages.
+.IP "\fB\-\-fatal\-warnings\fR" 4
+.IX Item "--fatal-warnings"
+Treat warnings as errors.
+.IP "\fB\-\-warn\fR" 4
+.IX Item "--warn"
+Don't suppress warning messages or treat them as errors.
+.IP "\fB\-w\fR" 4
+.IX Item "-w"
+Ignored.
+.IP "\fB\-x\fR" 4
+.IX Item "-x"
+Ignored.
+.IP "\fB\-Z\fR" 4
+.IX Item "-Z"
+Generate an object file even after errors.
+.IP "\fB\-\- |\fR \fIfiles\fR \fB...\fR" 4
+.IX Item "-- | files ..."
+Standard input, or source files to assemble.
+.PP
+The following options are available when as is configured for the
+64\-bit mode of the \s-1ARM\s0 Architecture (AArch64).
+.IP "\fB\-EB\fR" 4
+.IX Item "-EB"
+This option specifies that the output generated by the assembler should
+be marked as being encoded for a big-endian processor.
+.IP "\fB\-EL\fR" 4
+.IX Item "-EL"
+This option specifies that the output generated by the assembler should
+be marked as being encoded for a little-endian processor.
+.IP "\fB\-mabi=\fR\fIabi\fR" 4
+.IX Item "-mabi=abi"
+Specify which \s-1ABI\s0 the source code uses.  The recognized arguments
+are: \f(CW\*(C`ilp32\*(C'\fR and \f(CW\*(C`lp64\*(C'\fR, which decides the generated object
+file in \s-1ELF32\s0 and \s-1ELF64\s0 format respectively.  The default is \f(CW\*(C`lp64\*(C'\fR.
+.IP "\fB\-mcpu=\fR\fIprocessor\fR\fB[+\fR\fIextension\fR\fB...]\fR" 4
+.IX Item "-mcpu=processor[+extension...]"
+This option specifies the target processor.  The assembler will issue an error
+message if an attempt is made to assemble an instruction which will not execute
+on the target processor.  The following processor names are recognized:
+\&\f(CW\*(C`cortex\-a35\*(C'\fR,
+\&\f(CW\*(C`cortex\-a53\*(C'\fR,
+\&\f(CW\*(C`cortex\-a55\*(C'\fR,
+\&\f(CW\*(C`cortex\-a57\*(C'\fR,
+\&\f(CW\*(C`cortex\-a72\*(C'\fR,
+\&\f(CW\*(C`cortex\-a73\*(C'\fR,
+\&\f(CW\*(C`cortex\-a75\*(C'\fR,
+\&\f(CW\*(C`cortex\-a76\*(C'\fR,
+\&\f(CW\*(C`ares\*(C'\fR,
+\&\f(CW\*(C`exynos\-m1\*(C'\fR,
+\&\f(CW\*(C`falkor\*(C'\fR,
+\&\f(CW\*(C`qdf24xx\*(C'\fR,
+\&\f(CW\*(C`saphira\*(C'\fR,
+\&\f(CW\*(C`thunderx\*(C'\fR,
+\&\f(CW\*(C`vulcan\*(C'\fR,
+\&\f(CW\*(C`xgene1\*(C'\fR
+and
+\&\f(CW\*(C`xgene2\*(C'\fR.
+The special name \f(CW\*(C`all\*(C'\fR may be used to allow the assembler to accept
+instructions valid for any supported processor, including all optional
+extensions.
+.Sp
+In addition to the basic instruction set, the assembler can be told to
+accept, or restrict, various extension mnemonics that extend the
+processor.
+.Sp
+If some implementations of a particular processor can have an
+extension, then then those extensions are automatically enabled.
+Consequently, you will not normally have to specify any additional
+extensions.
+.IP "\fB\-march=\fR\fIarchitecture\fR\fB[+\fR\fIextension\fR\fB...]\fR" 4
+.IX Item "-march=architecture[+extension...]"
+This option specifies the target architecture.  The assembler will
+issue an error message if an attempt is made to assemble an
+instruction which will not execute on the target architecture.  The
+following architecture names are recognized: \f(CW\*(C`armv8\-a\*(C'\fR,
+\&\f(CW\*(C`armv8.1\-a\*(C'\fR, \f(CW\*(C`armv8.2\-a\*(C'\fR, \f(CW\*(C`armv8.3\-a\*(C'\fR, \f(CW\*(C`armv8.4\-a\*(C'\fR
+and \f(CW\*(C`armv8.5\-a\*(C'\fR.
+.Sp
+If both \fB\-mcpu\fR and \fB\-march\fR are specified, the
+assembler will use the setting for \fB\-mcpu\fR.  If neither are
+specified, the assembler will default to \fB\-mcpu=all\fR.
+.Sp
+The architecture option can be extended with the same instruction set
+extension options as the \fB\-mcpu\fR option.  Unlike
+\&\fB\-mcpu\fR, extensions are not always enabled by default,
+.IP "\fB\-mverbose\-error\fR" 4
+.IX Item "-mverbose-error"
+This option enables verbose error messages for AArch64 gas.  This option
+is enabled by default.
+.IP "\fB\-mno\-verbose\-error\fR" 4
+.IX Item "-mno-verbose-error"
+This option disables verbose error messages in AArch64 gas.
+.PP
+The following options are available when as is configured for an Alpha
+processor.
+.IP "\fB\-m\fR\fIcpu\fR" 4
+.IX Item "-mcpu"
+This option specifies the target processor.  If an attempt is made to
+assemble an instruction which will not execute on the target processor,
+the assembler may either expand the instruction as a macro or issue an
+error message.  This option is equivalent to the \f(CW\*(C`.arch\*(C'\fR directive.
+.Sp
+The following processor names are recognized:
+\&\f(CW21064\fR,
+\&\f(CW\*(C`21064a\*(C'\fR,
+\&\f(CW21066\fR,
+\&\f(CW21068\fR,
+\&\f(CW21164\fR,
+\&\f(CW\*(C`21164a\*(C'\fR,
+\&\f(CW\*(C`21164pc\*(C'\fR,
+\&\f(CW21264\fR,
+\&\f(CW\*(C`21264a\*(C'\fR,
+\&\f(CW\*(C`21264b\*(C'\fR,
+\&\f(CW\*(C`ev4\*(C'\fR,
+\&\f(CW\*(C`ev5\*(C'\fR,
+\&\f(CW\*(C`lca45\*(C'\fR,
+\&\f(CW\*(C`ev5\*(C'\fR,
+\&\f(CW\*(C`ev56\*(C'\fR,
+\&\f(CW\*(C`pca56\*(C'\fR,
+\&\f(CW\*(C`ev6\*(C'\fR,
+\&\f(CW\*(C`ev67\*(C'\fR,
+\&\f(CW\*(C`ev68\*(C'\fR.
+The special name \f(CW\*(C`all\*(C'\fR may be used to allow the assembler to accept
+instructions valid for any Alpha processor.
+.Sp
+In order to support existing practice in \s-1OSF/1\s0 with respect to \f(CW\*(C`.arch\*(C'\fR,
+and existing practice within \fB\s-1MILO\s0\fR (the Linux \s-1ARC\s0 bootloader), the
+numbered processor names (e.g. 21064) enable the processor-specific PALcode
+instructions, while the \*(L"electro-vlasic\*(R" names (e.g. \f(CW\*(C`ev4\*(C'\fR) do not.
+.IP "\fB\-mdebug\fR" 4
+.IX Item "-mdebug"
+.PD 0
+.IP "\fB\-no\-mdebug\fR" 4
+.IX Item "-no-mdebug"
+.PD
+Enables or disables the generation of \f(CW\*(C`.mdebug\*(C'\fR encapsulation for
+stabs directives and procedure descriptors.  The default is to automatically
+enable \f(CW\*(C`.mdebug\*(C'\fR when the first stabs directive is seen.
+.IP "\fB\-relax\fR" 4
+.IX Item "-relax"
+This option forces all relocations to be put into the object file, instead
+of saving space and resolving some relocations at assembly time.  Note that
+this option does not propagate all symbol arithmetic into the object file,
+because not all symbol arithmetic can be represented.  However, the option
+can still be useful in specific applications.
+.IP "\fB\-replace\fR" 4
+.IX Item "-replace"
+.PD 0
+.IP "\fB\-noreplace\fR" 4
+.IX Item "-noreplace"
+.PD
+Enables or disables the optimization of procedure calls, both at assemblage
+and at link time.  These options are only available for \s-1VMS\s0 targets and
+\&\f(CW\*(C`\-replace\*(C'\fR is the default.  See section 1.4.1 of the OpenVMS Linker
+Utility Manual.
+.IP "\fB\-g\fR" 4
+.IX Item "-g"
+This option is used when the compiler generates debug information.  When
+\&\fBgcc\fR is using \fBmips-tfile\fR to generate debug
+information for \s-1ECOFF,\s0 local labels must be passed through to the object
+file.  Otherwise this option has no effect.
+.IP "\fB\-G\fR\fIsize\fR" 4
+.IX Item "-Gsize"
+A local common symbol larger than \fIsize\fR is placed in \f(CW\*(C`.bss\*(C'\fR,
+while smaller symbols are placed in \f(CW\*(C`.sbss\*(C'\fR.
+.IP "\fB\-F\fR" 4
+.IX Item "-F"
+.PD 0
+.IP "\fB\-32addr\fR" 4
+.IX Item "-32addr"
+.PD
+These options are ignored for backward compatibility.
+.PP
+The following options are available when as is configured for an \s-1ARC\s0
+processor.
+.IP "\fB\-mcpu=\fR\fIcpu\fR" 4
+.IX Item "-mcpu=cpu"
+This option selects the core processor variant.
+.IP "\fB\-EB | \-EL\fR" 4
+.IX Item "-EB | -EL"
+Select either big-endian (\-EB) or little-endian (\-EL) output.
+.IP "\fB\-mcode\-density\fR" 4
+.IX Item "-mcode-density"
+Enable Code Density extenssion instructions.
+.PP
+The following options are available when as is configured for the \s-1ARM\s0
+processor family.
+.IP "\fB\-mcpu=\fR\fIprocessor\fR\fB[+\fR\fIextension\fR\fB...]\fR" 4
+.IX Item "-mcpu=processor[+extension...]"
+Specify which \s-1ARM\s0 processor variant is the target.
+.IP "\fB\-march=\fR\fIarchitecture\fR\fB[+\fR\fIextension\fR\fB...]\fR" 4
+.IX Item "-march=architecture[+extension...]"
+Specify which \s-1ARM\s0 architecture variant is used by the target.
+.IP "\fB\-mfpu=\fR\fIfloating-point-format\fR" 4
+.IX Item "-mfpu=floating-point-format"
+Select which Floating Point architecture is the target.
+.IP "\fB\-mfloat\-abi=\fR\fIabi\fR" 4
+.IX Item "-mfloat-abi=abi"
+Select which floating point \s-1ABI\s0 is in use.
+.IP "\fB\-mthumb\fR" 4
+.IX Item "-mthumb"
+Enable Thumb only instruction decoding.
+.IP "\fB\-mapcs\-32 | \-mapcs\-26 | \-mapcs\-float | \-mapcs\-reentrant\fR" 4
+.IX Item "-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant"
+Select which procedure calling convention is in use.
+.IP "\fB\-EB | \-EL\fR" 4
+.IX Item "-EB | -EL"
+Select either big-endian (\-EB) or little-endian (\-EL) output.
+.IP "\fB\-mthumb\-interwork\fR" 4
+.IX Item "-mthumb-interwork"
+Specify that the code has been generated with interworking between Thumb and
+\&\s-1ARM\s0 code in mind.
+.IP "\fB\-mccs\fR" 4
+.IX Item "-mccs"
+Turns on CodeComposer Studio assembly syntax compatibility mode.
+.IP "\fB\-k\fR" 4
+.IX Item "-k"
+Specify that \s-1PIC\s0 code has been generated.
+.PP
+The following options are available when as is configured for
+the Blackfin processor family.
+.IP "\fB\-mcpu=\fR\fIprocessor\fR[\fB\-\fR\fIsirevision\fR]" 4
+.IX Item "-mcpu=processor[-sirevision]"
+This option specifies the target processor.  The optional \fIsirevision\fR
+is not used in assembler.  It's here such that \s-1GCC\s0 can easily pass down its
+\&\f(CW\*(C`\-mcpu=\*(C'\fR option.  The assembler will issue an
+error message if an attempt is made to assemble an instruction which
+will not execute on the target processor.  The following processor names are
+recognized:
+\&\f(CW\*(C`bf504\*(C'\fR,
+\&\f(CW\*(C`bf506\*(C'\fR,
+\&\f(CW\*(C`bf512\*(C'\fR,
+\&\f(CW\*(C`bf514\*(C'\fR,
+\&\f(CW\*(C`bf516\*(C'\fR,
+\&\f(CW\*(C`bf518\*(C'\fR,
+\&\f(CW\*(C`bf522\*(C'\fR,
+\&\f(CW\*(C`bf523\*(C'\fR,
+\&\f(CW\*(C`bf524\*(C'\fR,
+\&\f(CW\*(C`bf525\*(C'\fR,
+\&\f(CW\*(C`bf526\*(C'\fR,
+\&\f(CW\*(C`bf527\*(C'\fR,
+\&\f(CW\*(C`bf531\*(C'\fR,
+\&\f(CW\*(C`bf532\*(C'\fR,
+\&\f(CW\*(C`bf533\*(C'\fR,
+\&\f(CW\*(C`bf534\*(C'\fR,
+\&\f(CW\*(C`bf535\*(C'\fR (not implemented yet),
+\&\f(CW\*(C`bf536\*(C'\fR,
+\&\f(CW\*(C`bf537\*(C'\fR,
+\&\f(CW\*(C`bf538\*(C'\fR,
+\&\f(CW\*(C`bf539\*(C'\fR,
+\&\f(CW\*(C`bf542\*(C'\fR,
+\&\f(CW\*(C`bf542m\*(C'\fR,
+\&\f(CW\*(C`bf544\*(C'\fR,
+\&\f(CW\*(C`bf544m\*(C'\fR,
+\&\f(CW\*(C`bf547\*(C'\fR,
+\&\f(CW\*(C`bf547m\*(C'\fR,
+\&\f(CW\*(C`bf548\*(C'\fR,
+\&\f(CW\*(C`bf548m\*(C'\fR,
+\&\f(CW\*(C`bf549\*(C'\fR,
+\&\f(CW\*(C`bf549m\*(C'\fR,
+\&\f(CW\*(C`bf561\*(C'\fR,
+and
+\&\f(CW\*(C`bf592\*(C'\fR.
+.IP "\fB\-mfdpic\fR" 4
+.IX Item "-mfdpic"
+Assemble for the \s-1FDPIC ABI.\s0
+.IP "\fB\-mno\-fdpic\fR" 4
+.IX Item "-mno-fdpic"
+.PD 0
+.IP "\fB\-mnopic\fR" 4
+.IX Item "-mnopic"
+.PD
+Disable \-mfdpic.
+.PP
+See the info pages for documentation of the CRIS-specific options.
+.PP
+The following options are available when as is configured for
+the C\-SKY processor family.
+.IP "\fB\-march=\fR\fIarchname\fR" 4
+.IX Item "-march=archname"
+Assemble for architecture \fIarchname\fR.  The \fB\-\-help\fR option
+lists valid values for \fIarchname\fR.
+.IP "\fB\-mcpu=\fR\fIcpuname\fR" 4
+.IX Item "-mcpu=cpuname"
+Assemble for architecture \fIcpuname\fR.  The \fB\-\-help\fR option
+lists valid values for \fIcpuname\fR.
+.IP "\fB\-EL\fR" 4
+.IX Item "-EL"
+.PD 0
+.IP "\fB\-mlittle\-endian\fR" 4
+.IX Item "-mlittle-endian"
+.PD
+Generate little-endian output.
+.IP "\fB\-EB\fR" 4
+.IX Item "-EB"
+.PD 0
+.IP "\fB\-mbig\-endian\fR" 4
+.IX Item "-mbig-endian"
+.PD
+Generate big-endian output.
+.IP "\fB\-fpic\fR" 4
+.IX Item "-fpic"
+.PD 0
+.IP "\fB\-pic\fR" 4
+.IX Item "-pic"
+.PD
+Generate position-independent code.
+.IP "\fB\-mljump\fR" 4
+.IX Item "-mljump"
+.PD 0
+.IP "\fB\-mno\-ljump\fR" 4
+.IX Item "-mno-ljump"
+.PD
+Enable/disable transformation of the short branch instructions
+\&\f(CW\*(C`jbf\*(C'\fR, \f(CW\*(C`jbt\*(C'\fR, and \f(CW\*(C`jbr\*(C'\fR to \f(CW\*(C`jmpi\*(C'\fR.
+This option is for V2 processors only.
+It is ignored on \s-1CK801\s0 and \s-1CK802\s0 targets, which do not support the \f(CW\*(C`jmpi\*(C'\fR
+instruction, and is enabled by default for other processors.
+.IP "\fB\-mbranch\-stub\fR" 4
+.IX Item "-mbranch-stub"
+.PD 0
+.IP "\fB\-mno\-branch\-stub\fR" 4
+.IX Item "-mno-branch-stub"
+.PD
+Pass through \f(CW\*(C`R_CKCORE_PCREL_IMM26BY2\*(C'\fR relocations for \f(CW\*(C`bsr\*(C'\fR
+instructions to the linker.
+.Sp
+This option is only available for bare-metal C\-SKY V2 \s-1ELF\s0 targets,
+where it is enabled by default.  It cannot be used in code that will be
+dynamically linked against shared libraries.
+.IP "\fB\-force2bsr\fR" 4
+.IX Item "-force2bsr"
+.PD 0
+.IP "\fB\-mforce2bsr\fR" 4
+.IX Item "-mforce2bsr"
+.IP "\fB\-no\-force2bsr\fR" 4
+.IX Item "-no-force2bsr"
+.IP "\fB\-mno\-force2bsr\fR" 4
+.IX Item "-mno-force2bsr"
+.PD
+Enable/disable transformation of \f(CW\*(C`jbsr\*(C'\fR instructions to \f(CW\*(C`bsr\*(C'\fR.
+This option is always enabled (and \fB\-mno\-force2bsr\fR is ignored)
+for \s-1CK801/CK802\s0 targets.  It is also always enabled when
+\&\fB\-mbranch\-stub\fR is in effect.
+.IP "\fB\-jsri2bsr\fR" 4
+.IX Item "-jsri2bsr"
+.PD 0
+.IP "\fB\-mjsri2bsr\fR" 4
+.IX Item "-mjsri2bsr"
+.IP "\fB\-no\-jsri2bsr\fR" 4
+.IX Item "-no-jsri2bsr"
+.IP "\fB\-mno\-jsri2bsr\fR" 4
+.IX Item "-mno-jsri2bsr"
+.PD
+Enable/disable transformation of \f(CW\*(C`jsri\*(C'\fR instructions to \f(CW\*(C`bsr\*(C'\fR.
+This option is enabled by default.
+.IP "\fB\-mnolrw\fR" 4
+.IX Item "-mnolrw"
+.PD 0
+.IP "\fB\-mno\-lrw\fR" 4
+.IX Item "-mno-lrw"
+.PD
+Enable/disable transformation of \f(CW\*(C`lrw\*(C'\fR instructions into a
+\&\f(CW\*(C`movih\*(C'\fR/\f(CW\*(C`ori\*(C'\fR pair.
+.IP "\fB\-melrw\fR" 4
+.IX Item "-melrw"
+.PD 0
+.IP "\fB\-mno\-elrw\fR" 4
+.IX Item "-mno-elrw"
+.PD
+Enable/disable extended \f(CW\*(C`lrw\*(C'\fR instructions.
+This option is enabled by default for CK800\-series processors.
+.IP "\fB\-mlaf\fR" 4
+.IX Item "-mlaf"
+.PD 0
+.IP "\fB\-mliterals\-after\-func\fR" 4
+.IX Item "-mliterals-after-func"
+.IP "\fB\-mno\-laf\fR" 4
+.IX Item "-mno-laf"
+.IP "\fB\-mno\-literals\-after\-func\fR" 4
+.IX Item "-mno-literals-after-func"
+.PD
+Enable/disable placement of literal pools after each function.
+.IP "\fB\-mlabr\fR" 4
+.IX Item "-mlabr"
+.PD 0
+.IP "\fB\-mliterals\-after\-br\fR" 4
+.IX Item "-mliterals-after-br"
+.IP "\fB\-mno\-labr\fR" 4
+.IX Item "-mno-labr"
+.IP "\fB\-mnoliterals\-after\-br\fR" 4
+.IX Item "-mnoliterals-after-br"
+.PD
+Enable/disable placement of literal pools after unconditional branches.
+This option is enabled by default.
+.IP "\fB\-mistack\fR" 4
+.IX Item "-mistack"
+.PD 0
+.IP "\fB\-mno\-istack\fR" 4
+.IX Item "-mno-istack"
+.PD
+Enable/disable interrupt stack instructions.  This option is enabled by
+default on \s-1CK801, CK802,\s0 and \s-1CK802\s0 processors.
+.PP
+The following options explicitly enable certain optional instructions.
+These features are also enabled implicitly by using \f(CW\*(C`\-mcpu=\*(C'\fR to specify
+a processor that supports it.
+.IP "\fB\-mhard\-float\fR" 4
+.IX Item "-mhard-float"
+Enable hard float instructions.
+.IP "\fB\-mmp\fR" 4
+.IX Item "-mmp"
+Enable multiprocessor instructions.
+.IP "\fB\-mcp\fR" 4
+.IX Item "-mcp"
+Enable coprocessor instructions.
+.IP "\fB\-mcache\fR" 4
+.IX Item "-mcache"
+Enable cache prefetch instruction.
+.IP "\fB\-msecurity\fR" 4
+.IX Item "-msecurity"
+Enable C\-SKY security instructions.
+.IP "\fB\-mtrust\fR" 4
+.IX Item "-mtrust"
+Enable C\-SKY trust instructions.
+.IP "\fB\-mdsp\fR" 4
+.IX Item "-mdsp"
+Enable \s-1DSP\s0 instructions.
+.IP "\fB\-medsp\fR" 4
+.IX Item "-medsp"
+Enable enhanced \s-1DSP\s0 instructions.
+.IP "\fB\-mvdsp\fR" 4
+.IX Item "-mvdsp"
+Enable vector \s-1DSP\s0 instructions.
+.PP
+The following options are available when as is configured for
+an Epiphany processor.
+.IP "\fB\-mepiphany\fR" 4
+.IX Item "-mepiphany"
+Specifies that the both 32 and 16 bit instructions are allowed.  This is the
+default behavior.
+.IP "\fB\-mepiphany16\fR" 4
+.IX Item "-mepiphany16"
+Restricts the permitted instructions to just the 16 bit set.
+.PP
+The following options are available when as is configured for an H8/300
+processor.
+\&\f(CW@chapter\fR H8/300 Dependent Features
+.SS "Options"
+.IX Subsection "Options"
+The Renesas H8/300 version of \f(CW\*(C`as\*(C'\fR has one
+machine-dependent option:
+.IP "\fB\-h\-tick\-hex\fR" 4
+.IX Item "-h-tick-hex"
+Support H'00 style hex constants in addition to 0x00 style.
+.IP "\fB\-mach=\fR\fIname\fR" 4
+.IX Item "-mach=name"
+Sets the H8300 machine variant.  The following machine names
+are recognised:
+\&\f(CW\*(C`h8300h\*(C'\fR,
+\&\f(CW\*(C`h8300hn\*(C'\fR,
+\&\f(CW\*(C`h8300s\*(C'\fR,
+\&\f(CW\*(C`h8300sn\*(C'\fR,
+\&\f(CW\*(C`h8300sx\*(C'\fR and 
+\&\f(CW\*(C`h8300sxn\*(C'\fR.
+.PP
+The following options are available when as is configured for
+an i386 processor.
+.IP "\fB\-\-32 | \-\-x32 | \-\-64\fR" 4
+.IX Item "--32 | --x32 | --64"
+Select the word size, either 32 bits or 64 bits.  \fB\-\-32\fR
+implies Intel i386 architecture, while \fB\-\-x32\fR and \fB\-\-64\fR
+imply \s-1AMD\s0 x86\-64 architecture with 32\-bit or 64\-bit word-size
+respectively.
+.Sp
+These options are only available with the \s-1ELF\s0 object file format, and
+require that the necessary \s-1BFD\s0 support has been included (on a 32\-bit
+platform you have to add \-\-enable\-64\-bit\-bfd to configure enable 64\-bit
+usage and use x86\-64 as target platform).
+.IP "\fB\-n\fR" 4
+.IX Item "-n"
+By default, x86 \s-1GAS\s0 replaces multiple nop instructions used for
+alignment within code sections with multi-byte nop instructions such
+as leal 0(%esi,1),%esi.  This switch disables the optimization if a single
+byte nop (0x90) is explicitly specified as the fill byte for alignment.
+.IP "\fB\-\-divide\fR" 4
+.IX Item "--divide"
+On SVR4\-derived platforms, the character \fB/\fR is treated as a comment
+character, which means that it cannot be used in expressions.  The
+\&\fB\-\-divide\fR option turns \fB/\fR into a normal character.  This does
+not disable \fB/\fR at the beginning of a line starting a comment, or
+affect using \fB#\fR for starting a comment.
+.IP "\fB\-march=\fR\fI\s-1CPU\s0\fR\fB[+\fR\fI\s-1EXTENSION\s0\fR\fB...]\fR" 4
+.IX Item "-march=CPU[+EXTENSION...]"
+This option specifies the target processor.  The assembler will
+issue an error message if an attempt is made to assemble an instruction
+which will not execute on the target processor.  The following
+processor names are recognized:
+\&\f(CW\*(C`i8086\*(C'\fR,
+\&\f(CW\*(C`i186\*(C'\fR,
+\&\f(CW\*(C`i286\*(C'\fR,
+\&\f(CW\*(C`i386\*(C'\fR,
+\&\f(CW\*(C`i486\*(C'\fR,
+\&\f(CW\*(C`i586\*(C'\fR,
+\&\f(CW\*(C`i686\*(C'\fR,
+\&\f(CW\*(C`pentium\*(C'\fR,
+\&\f(CW\*(C`pentiumpro\*(C'\fR,
+\&\f(CW\*(C`pentiumii\*(C'\fR,
+\&\f(CW\*(C`pentiumiii\*(C'\fR,
+\&\f(CW\*(C`pentium4\*(C'\fR,
+\&\f(CW\*(C`prescott\*(C'\fR,
+\&\f(CW\*(C`nocona\*(C'\fR,
+\&\f(CW\*(C`core\*(C'\fR,
+\&\f(CW\*(C`core2\*(C'\fR,
+\&\f(CW\*(C`corei7\*(C'\fR,
+\&\f(CW\*(C`l1om\*(C'\fR,
+\&\f(CW\*(C`k1om\*(C'\fR,
+\&\f(CW\*(C`iamcu\*(C'\fR,
+\&\f(CW\*(C`k6\*(C'\fR,
+\&\f(CW\*(C`k6_2\*(C'\fR,
+\&\f(CW\*(C`athlon\*(C'\fR,
+\&\f(CW\*(C`opteron\*(C'\fR,
+\&\f(CW\*(C`k8\*(C'\fR,
+\&\f(CW\*(C`amdfam10\*(C'\fR,
+\&\f(CW\*(C`bdver1\*(C'\fR,
+\&\f(CW\*(C`bdver2\*(C'\fR,
+\&\f(CW\*(C`bdver3\*(C'\fR,
+\&\f(CW\*(C`bdver4\*(C'\fR,
+\&\f(CW\*(C`znver1\*(C'\fR,
+\&\f(CW\*(C`znver2\*(C'\fR,
+\&\f(CW\*(C`btver1\*(C'\fR,
+\&\f(CW\*(C`btver2\*(C'\fR,
+\&\f(CW\*(C`generic32\*(C'\fR and
+\&\f(CW\*(C`generic64\*(C'\fR.
+.Sp
+In addition to the basic instruction set, the assembler can be told to
+accept various extension mnemonics.  For example,
+\&\f(CW\*(C`\-march=i686+sse4+vmx\*(C'\fR extends \fIi686\fR with \fIsse4\fR and
+\&\fIvmx\fR.  The following extensions are currently supported:
+\&\f(CW8087\fR,
+\&\f(CW287\fR,
+\&\f(CW387\fR,
+\&\f(CW687\fR,
+\&\f(CW\*(C`no87\*(C'\fR,
+\&\f(CW\*(C`no287\*(C'\fR,
+\&\f(CW\*(C`no387\*(C'\fR,
+\&\f(CW\*(C`no687\*(C'\fR,
+\&\f(CW\*(C`cmov\*(C'\fR,
+\&\f(CW\*(C`nocmov\*(C'\fR,
+\&\f(CW\*(C`fxsr\*(C'\fR,
+\&\f(CW\*(C`nofxsr\*(C'\fR,
+\&\f(CW\*(C`mmx\*(C'\fR,
+\&\f(CW\*(C`nommx\*(C'\fR,
+\&\f(CW\*(C`sse\*(C'\fR,
+\&\f(CW\*(C`sse2\*(C'\fR,
+\&\f(CW\*(C`sse3\*(C'\fR,
+\&\f(CW\*(C`ssse3\*(C'\fR,
+\&\f(CW\*(C`sse4.1\*(C'\fR,
+\&\f(CW\*(C`sse4.2\*(C'\fR,
+\&\f(CW\*(C`sse4\*(C'\fR,
+\&\f(CW\*(C`nosse\*(C'\fR,
+\&\f(CW\*(C`nosse2\*(C'\fR,
+\&\f(CW\*(C`nosse3\*(C'\fR,
+\&\f(CW\*(C`nossse3\*(C'\fR,
+\&\f(CW\*(C`nosse4.1\*(C'\fR,
+\&\f(CW\*(C`nosse4.2\*(C'\fR,
+\&\f(CW\*(C`nosse4\*(C'\fR,
+\&\f(CW\*(C`avx\*(C'\fR,
+\&\f(CW\*(C`avx2\*(C'\fR,
+\&\f(CW\*(C`noavx\*(C'\fR,
+\&\f(CW\*(C`noavx2\*(C'\fR,
+\&\f(CW\*(C`adx\*(C'\fR,
+\&\f(CW\*(C`rdseed\*(C'\fR,
+\&\f(CW\*(C`prfchw\*(C'\fR,
+\&\f(CW\*(C`smap\*(C'\fR,
+\&\f(CW\*(C`mpx\*(C'\fR,
+\&\f(CW\*(C`sha\*(C'\fR,
+\&\f(CW\*(C`rdpid\*(C'\fR,
+\&\f(CW\*(C`ptwrite\*(C'\fR,
+\&\f(CW\*(C`cet\*(C'\fR,
+\&\f(CW\*(C`gfni\*(C'\fR,
+\&\f(CW\*(C`vaes\*(C'\fR,
+\&\f(CW\*(C`vpclmulqdq\*(C'\fR,
+\&\f(CW\*(C`prefetchwt1\*(C'\fR,
+\&\f(CW\*(C`clflushopt\*(C'\fR,
+\&\f(CW\*(C`se1\*(C'\fR,
+\&\f(CW\*(C`clwb\*(C'\fR,
+\&\f(CW\*(C`movdiri\*(C'\fR,
+\&\f(CW\*(C`movdir64b\*(C'\fR,
+\&\f(CW\*(C`avx512f\*(C'\fR,
+\&\f(CW\*(C`avx512cd\*(C'\fR,
+\&\f(CW\*(C`avx512er\*(C'\fR,
+\&\f(CW\*(C`avx512pf\*(C'\fR,
+\&\f(CW\*(C`avx512vl\*(C'\fR,
+\&\f(CW\*(C`avx512bw\*(C'\fR,
+\&\f(CW\*(C`avx512dq\*(C'\fR,
+\&\f(CW\*(C`avx512ifma\*(C'\fR,
+\&\f(CW\*(C`avx512vbmi\*(C'\fR,
+\&\f(CW\*(C`avx512_4fmaps\*(C'\fR,
+\&\f(CW\*(C`avx512_4vnniw\*(C'\fR,
+\&\f(CW\*(C`avx512_vpopcntdq\*(C'\fR,
+\&\f(CW\*(C`avx512_vbmi2\*(C'\fR,
+\&\f(CW\*(C`avx512_vnni\*(C'\fR,
+\&\f(CW\*(C`avx512_bitalg\*(C'\fR,
+\&\f(CW\*(C`noavx512f\*(C'\fR,
+\&\f(CW\*(C`noavx512cd\*(C'\fR,
+\&\f(CW\*(C`noavx512er\*(C'\fR,
+\&\f(CW\*(C`noavx512pf\*(C'\fR,
+\&\f(CW\*(C`noavx512vl\*(C'\fR,
+\&\f(CW\*(C`noavx512bw\*(C'\fR,
+\&\f(CW\*(C`noavx512dq\*(C'\fR,
+\&\f(CW\*(C`noavx512ifma\*(C'\fR,
+\&\f(CW\*(C`noavx512vbmi\*(C'\fR,
+\&\f(CW\*(C`noavx512_4fmaps\*(C'\fR,
+\&\f(CW\*(C`noavx512_4vnniw\*(C'\fR,
+\&\f(CW\*(C`noavx512_vpopcntdq\*(C'\fR,
+\&\f(CW\*(C`noavx512_vbmi2\*(C'\fR,
+\&\f(CW\*(C`noavx512_vnni\*(C'\fR,
+\&\f(CW\*(C`noavx512_bitalg\*(C'\fR,
+\&\f(CW\*(C`vmx\*(C'\fR,
+\&\f(CW\*(C`vmfunc\*(C'\fR,
+\&\f(CW\*(C`smx\*(C'\fR,
+\&\f(CW\*(C`xsave\*(C'\fR,
+\&\f(CW\*(C`xsaveopt\*(C'\fR,
+\&\f(CW\*(C`xsavec\*(C'\fR,
+\&\f(CW\*(C`xsaves\*(C'\fR,
+\&\f(CW\*(C`aes\*(C'\fR,
+\&\f(CW\*(C`pclmul\*(C'\fR,
+\&\f(CW\*(C`fsgsbase\*(C'\fR,
+\&\f(CW\*(C`rdrnd\*(C'\fR,
+\&\f(CW\*(C`f16c\*(C'\fR,
+\&\f(CW\*(C`bmi2\*(C'\fR,
+\&\f(CW\*(C`fma\*(C'\fR,
+\&\f(CW\*(C`movbe\*(C'\fR,
+\&\f(CW\*(C`ept\*(C'\fR,
+\&\f(CW\*(C`lzcnt\*(C'\fR,
+\&\f(CW\*(C`hle\*(C'\fR,
+\&\f(CW\*(C`rtm\*(C'\fR,
+\&\f(CW\*(C`invpcid\*(C'\fR,
+\&\f(CW\*(C`clflush\*(C'\fR,
+\&\f(CW\*(C`mwaitx\*(C'\fR,
+\&\f(CW\*(C`clzero\*(C'\fR,
+\&\f(CW\*(C`wbnoinvd\*(C'\fR,
+\&\f(CW\*(C`pconfig\*(C'\fR,
+\&\f(CW\*(C`waitpkg\*(C'\fR,
+\&\f(CW\*(C`cldemote\*(C'\fR,
+\&\f(CW\*(C`lwp\*(C'\fR,
+\&\f(CW\*(C`fma4\*(C'\fR,
+\&\f(CW\*(C`xop\*(C'\fR,
+\&\f(CW\*(C`cx16\*(C'\fR,
+\&\f(CW\*(C`syscall\*(C'\fR,
+\&\f(CW\*(C`rdtscp\*(C'\fR,
+\&\f(CW\*(C`3dnow\*(C'\fR,
+\&\f(CW\*(C`3dnowa\*(C'\fR,
+\&\f(CW\*(C`sse4a\*(C'\fR,
+\&\f(CW\*(C`sse5\*(C'\fR,
+\&\f(CW\*(C`svme\*(C'\fR,
+\&\f(CW\*(C`abm\*(C'\fR and
+\&\f(CW\*(C`padlock\*(C'\fR.
+Note that rather than extending a basic instruction set, the extension
+mnemonics starting with \f(CW\*(C`no\*(C'\fR revoke the respective functionality.
+.Sp
+When the \f(CW\*(C`.arch\*(C'\fR directive is used with \fB\-march\fR, the
+\&\f(CW\*(C`.arch\*(C'\fR directive will take precedent.
+.IP "\fB\-mtune=\fR\fI\s-1CPU\s0\fR" 4
+.IX Item "-mtune=CPU"
+This option specifies a processor to optimize for. When used in
+conjunction with the \fB\-march\fR option, only instructions
+of the processor specified by the \fB\-march\fR option will be
+generated.
+.Sp
+Valid \fI\s-1CPU\s0\fR values are identical to the processor list of
+\&\fB\-march=\fR\fI\s-1CPU\s0\fR.
+.IP "\fB\-msse2avx\fR" 4
+.IX Item "-msse2avx"
+This option specifies that the assembler should encode \s-1SSE\s0 instructions
+with \s-1VEX\s0 prefix.
+.IP "\fB\-msse\-check=\fR\fInone\fR" 4
+.IX Item "-msse-check=none"
+.PD 0
+.IP "\fB\-msse\-check=\fR\fIwarning\fR" 4
+.IX Item "-msse-check=warning"
+.IP "\fB\-msse\-check=\fR\fIerror\fR" 4
+.IX Item "-msse-check=error"
+.PD
+These options control if the assembler should check \s-1SSE\s0 instructions.
+\&\fB\-msse\-check=\fR\fInone\fR will make the assembler not to check \s-1SSE\s0
+instructions,  which is the default.  \fB\-msse\-check=\fR\fIwarning\fR
+will make the assembler issue a warning for any \s-1SSE\s0 instruction.
+\&\fB\-msse\-check=\fR\fIerror\fR will make the assembler issue an error
+for any \s-1SSE\s0 instruction.
+.IP "\fB\-mavxscalar=\fR\fI128\fR" 4
+.IX Item "-mavxscalar=128"
+.PD 0
+.IP "\fB\-mavxscalar=\fR\fI256\fR" 4
+.IX Item "-mavxscalar=256"
+.PD
+These options control how the assembler should encode scalar \s-1AVX\s0
+instructions.  \fB\-mavxscalar=\fR\fI128\fR will encode scalar
+\&\s-1AVX\s0 instructions with 128bit vector length, which is the default.
+\&\fB\-mavxscalar=\fR\fI256\fR will encode scalar \s-1AVX\s0 instructions
+with 256bit vector length.
+.IP "\fB\-mvexwig=\fR\fI0\fR" 4
+.IX Item "-mvexwig=0"
+.PD 0
+.IP "\fB\-mvexwig=\fR\fI1\fR" 4
+.IX Item "-mvexwig=1"
+.PD
+These options control how the assembler should encode \s-1VEX\s0.W\-ignored (\s-1WIG\s0)
+\&\s-1VEX\s0 instructions.  \fB\-mvexwig=\fR\fI0\fR will encode \s-1WIG VEX\s0
+instructions with vex.w = 0, which is the default.
+\&\fB\-mvexwig=\fR\fI1\fR will encode \s-1WIG EVEX\s0 instructions with
+vex.w = 1.
+.IP "\fB\-mevexlig=\fR\fI128\fR" 4
+.IX Item "-mevexlig=128"
+.PD 0
+.IP "\fB\-mevexlig=\fR\fI256\fR" 4
+.IX Item "-mevexlig=256"
+.IP "\fB\-mevexlig=\fR\fI512\fR" 4
+.IX Item "-mevexlig=512"
+.PD
+These options control how the assembler should encode length-ignored
+(\s-1LIG\s0) \s-1EVEX\s0 instructions.  \fB\-mevexlig=\fR\fI128\fR will encode \s-1LIG
+EVEX\s0 instructions with 128bit vector length, which is the default.
+\&\fB\-mevexlig=\fR\fI256\fR and \fB\-mevexlig=\fR\fI512\fR will
+encode \s-1LIG EVEX\s0 instructions with 256bit and 512bit vector length,
+respectively.
+.IP "\fB\-mevexwig=\fR\fI0\fR" 4
+.IX Item "-mevexwig=0"
+.PD 0
+.IP "\fB\-mevexwig=\fR\fI1\fR" 4
+.IX Item "-mevexwig=1"
+.PD
+These options control how the assembler should encode w\-ignored (\s-1WIG\s0)
+\&\s-1EVEX\s0 instructions.  \fB\-mevexwig=\fR\fI0\fR will encode \s-1WIG
+EVEX\s0 instructions with evex.w = 0, which is the default.
+\&\fB\-mevexwig=\fR\fI1\fR will encode \s-1WIG EVEX\s0 instructions with
+evex.w = 1.
+.IP "\fB\-mmnemonic=\fR\fIatt\fR" 4
+.IX Item "-mmnemonic=att"
+.PD 0
+.IP "\fB\-mmnemonic=\fR\fIintel\fR" 4
+.IX Item "-mmnemonic=intel"
+.PD
+This option specifies instruction mnemonic for matching instructions.
+The \f(CW\*(C`.att_mnemonic\*(C'\fR and \f(CW\*(C`.intel_mnemonic\*(C'\fR directives will
+take precedent.
+.IP "\fB\-msyntax=\fR\fIatt\fR" 4
+.IX Item "-msyntax=att"
+.PD 0
+.IP "\fB\-msyntax=\fR\fIintel\fR" 4
+.IX Item "-msyntax=intel"
+.PD
+This option specifies instruction syntax when processing instructions.
+The \f(CW\*(C`.att_syntax\*(C'\fR and \f(CW\*(C`.intel_syntax\*(C'\fR directives will
+take precedent.
+.IP "\fB\-mnaked\-reg\fR" 4
+.IX Item "-mnaked-reg"
+This option specifies that registers don't require a \fB%\fR prefix.
+The \f(CW\*(C`.att_syntax\*(C'\fR and \f(CW\*(C`.intel_syntax\*(C'\fR directives will take precedent.
+.IP "\fB\-madd\-bnd\-prefix\fR" 4
+.IX Item "-madd-bnd-prefix"
+This option forces the assembler to add \s-1BND\s0 prefix to all branches, even
+if such prefix was not explicitly specified in the source code.
+.IP "\fB\-mno\-shared\fR" 4
+.IX Item "-mno-shared"
+On \s-1ELF\s0 target, the assembler normally optimizes out non-PLT relocations
+against defined non-weak global branch targets with default visibility.
+The \fB\-mshared\fR option tells the assembler to generate code which
+may go into a shared library where all non-weak global branch targets
+with default visibility can be preempted.  The resulting code is
+slightly bigger.  This option only affects the handling of branch
+instructions.
+.IP "\fB\-mbig\-obj\fR" 4
+.IX Item "-mbig-obj"
+On x86\-64 \s-1PE/COFF\s0 target this option forces the use of big object file
+format, which allows more than 32768 sections.
+.IP "\fB\-momit\-lock\-prefix=\fR\fIno\fR" 4
+.IX Item "-momit-lock-prefix=no"
+.PD 0
+.IP "\fB\-momit\-lock\-prefix=\fR\fIyes\fR" 4
+.IX Item "-momit-lock-prefix=yes"
+.PD
+These options control how the assembler should encode lock prefix.
+This option is intended as a workaround for processors, that fail on
+lock prefix. This option can only be safely used with single-core,
+single-thread computers
+\&\fB\-momit\-lock\-prefix=\fR\fIyes\fR will omit all lock prefixes.
+\&\fB\-momit\-lock\-prefix=\fR\fIno\fR will encode lock prefix as usual,
+which is the default.
+.IP "\fB\-mfence\-as\-lock\-add=\fR\fIno\fR" 4
+.IX Item "-mfence-as-lock-add=no"
+.PD 0
+.IP "\fB\-mfence\-as\-lock\-add=\fR\fIyes\fR" 4
+.IX Item "-mfence-as-lock-add=yes"
+.PD
+These options control how the assembler should encode lfence, mfence and
+sfence.
+\&\fB\-mfence\-as\-lock\-add=\fR\fIyes\fR will encode lfence, mfence and
+sfence as \fBlock addl \f(CB$0x0\fB, (%rsp)\fR in 64\-bit mode and
+\&\fBlock addl \f(CB$0x0\fB, (%esp)\fR in 32\-bit mode.
+\&\fB\-mfence\-as\-lock\-add=\fR\fIno\fR will encode lfence, mfence and
+sfence as usual, which is the default.
+.IP "\fB\-mrelax\-relocations=\fR\fIno\fR" 4
+.IX Item "-mrelax-relocations=no"
+.PD 0
+.IP "\fB\-mrelax\-relocations=\fR\fIyes\fR" 4
+.IX Item "-mrelax-relocations=yes"
+.PD
+These options control whether the assembler should generate relax
+relocations, R_386_GOT32X, in 32\-bit mode, or R_X86_64_GOTPCRELX and
+R_X86_64_REX_GOTPCRELX, in 64\-bit mode.
+\&\fB\-mrelax\-relocations=\fR\fIyes\fR will generate relax relocations.
+\&\fB\-mrelax\-relocations=\fR\fIno\fR will not generate relax
+relocations.  The default can be controlled by a configure option
+\&\fB\-\-enable\-x86\-relax\-relocations\fR.
+.IP "\fB\-mx86\-used\-note=\fR\fIno\fR" 4
+.IX Item "-mx86-used-note=no"
+.PD 0
+.IP "\fB\-mx86\-used\-note=\fR\fIyes\fR" 4
+.IX Item "-mx86-used-note=yes"
+.PD
+These options control whether the assembler should generate
+\&\s-1GNU_PROPERTY_X86_ISA_1_USED\s0 and \s-1GNU_PROPERTY_X86_FEATURE_2_USED
+GNU\s0 property notes.  The default can be controlled by the
+\&\fB\-\-enable\-x86\-used\-note\fR configure option.
+.IP "\fB\-mevexrcig=\fR\fIrne\fR" 4
+.IX Item "-mevexrcig=rne"
+.PD 0
+.IP "\fB\-mevexrcig=\fR\fIrd\fR" 4
+.IX Item "-mevexrcig=rd"
+.IP "\fB\-mevexrcig=\fR\fIru\fR" 4
+.IX Item "-mevexrcig=ru"
+.IP "\fB\-mevexrcig=\fR\fIrz\fR" 4
+.IX Item "-mevexrcig=rz"
+.PD
+These options control how the assembler should encode SAE-only
+\&\s-1EVEX\s0 instructions.  \fB\-mevexrcig=\fR\fIrne\fR will encode \s-1RC\s0 bits
+of \s-1EVEX\s0 instruction with 00, which is the default.
+\&\fB\-mevexrcig=\fR\fIrd\fR, \fB\-mevexrcig=\fR\fIru\fR
+and \fB\-mevexrcig=\fR\fIrz\fR will encode SAE-only \s-1EVEX\s0 instructions
+with 01, 10 and 11 \s-1RC\s0 bits, respectively.
+.IP "\fB\-mamd64\fR" 4
+.IX Item "-mamd64"
+.PD 0
+.IP "\fB\-mintel64\fR" 4
+.IX Item "-mintel64"
+.PD
+This option specifies that the assembler should accept only \s-1AMD64\s0 or
+Intel64 \s-1ISA\s0 in 64\-bit mode.  The default is to accept both.
+.IP "\fB\-O0 | \-O | \-O1 | \-O2 | \-Os\fR" 4
+.IX Item "-O0 | -O | -O1 | -O2 | -Os"
+Optimize instruction encoding with smaller instruction size.  \fB\-O\fR
+and \fB\-O1\fR encode 64\-bit register load instructions with 64\-bit
+immediate as 32\-bit register load instructions with 31\-bit or 32\-bits
+immediates and encode 64\-bit register clearing instructions with 32\-bit
+register clearing instructions.  \fB\-O2\fR includes \fB\-O1\fR
+optimization plus encodes 256\-bit and 512\-bit vector register clearing
+instructions with 128\-bit vector register clearing instructions.
+\&\fB\-Os\fR includes \fB\-O2\fR optimization plus encodes 16\-bit, 32\-bit
+and 64\-bit register tests with immediate as 8\-bit register test with
+immediate.  \fB\-O0\fR turns off this optimization.
+.PP
+The following options are available when as is configured for the
+Ubicom \s-1IP2K\s0 series.
+.IP "\fB\-mip2022ext\fR" 4
+.IX Item "-mip2022ext"
+Specifies that the extended \s-1IP2022\s0 instructions are allowed.
+.IP "\fB\-mip2022\fR" 4
+.IX Item "-mip2022"
+Restores the default behaviour, which restricts the permitted instructions to
+just the basic \s-1IP2022\s0 ones.
+.PP
+The following options are available when as is configured for the
+Renesas M32C and M16C processors.
+.IP "\fB\-m32c\fR" 4
+.IX Item "-m32c"
+Assemble M32C instructions.
+.IP "\fB\-m16c\fR" 4
+.IX Item "-m16c"
+Assemble M16C instructions (the default).
+.IP "\fB\-relax\fR" 4
+.IX Item "-relax"
+Enable support for link-time relaxations.
+.IP "\fB\-h\-tick\-hex\fR" 4
+.IX Item "-h-tick-hex"
+Support H'00 style hex constants in addition to 0x00 style.
+.PP
+The following options are available when as is configured for the
+Renesas M32R (formerly Mitsubishi M32R) series.
+.IP "\fB\-\-m32rx\fR" 4
+.IX Item "--m32rx"
+Specify which processor in the M32R family is the target.  The default
+is normally the M32R, but this option changes it to the M32RX.
+.IP "\fB\-\-warn\-explicit\-parallel\-conflicts or \-\-Wp\fR" 4
+.IX Item "--warn-explicit-parallel-conflicts or --Wp"
+Produce warning messages when questionable parallel constructs are
+encountered.
+.IP "\fB\-\-no\-warn\-explicit\-parallel\-conflicts or \-\-Wnp\fR" 4
+.IX Item "--no-warn-explicit-parallel-conflicts or --Wnp"
+Do not produce warning messages when questionable parallel constructs are
+encountered.
+.PP
+The following options are available when as is configured for the
+Motorola 68000 series.
+.IP "\fB\-l\fR" 4
+.IX Item "-l"
+Shorten references to undefined symbols, to one word instead of two.
+.IP "\fB\-m68000 | \-m68008 | \-m68010 | \-m68020 | \-m68030\fR" 4
+.IX Item "-m68000 | -m68008 | -m68010 | -m68020 | -m68030"
+.PD 0
+.IP "\fB| \-m68040 | \-m68060 | \-m68302 | \-m68331 | \-m68332\fR" 4
+.IX Item "| -m68040 | -m68060 | -m68302 | -m68331 | -m68332"
+.IP "\fB| \-m68333 | \-m68340 | \-mcpu32 | \-m5200\fR" 4
+.IX Item "| -m68333 | -m68340 | -mcpu32 | -m5200"
+.PD
+Specify what processor in the 68000 family is the target.  The default
+is normally the 68020, but this can be changed at configuration time.
+.IP "\fB\-m68881 | \-m68882 | \-mno\-68881 | \-mno\-68882\fR" 4
+.IX Item "-m68881 | -m68882 | -mno-68881 | -mno-68882"
+The target machine does (or does not) have a floating-point coprocessor.
+The default is to assume a coprocessor for 68020, 68030, and cpu32.  Although
+the basic 68000 is not compatible with the 68881, a combination of the
+two can be specified, since it's possible to do emulation of the
+coprocessor instructions with the main processor.
+.IP "\fB\-m68851 | \-mno\-68851\fR" 4
+.IX Item "-m68851 | -mno-68851"
+The target machine does (or does not) have a memory-management
+unit coprocessor.  The default is to assume an \s-1MMU\s0 for 68020 and up.
+.PP
+The following options are available when as is configured for an
+Altera Nios \s-1II\s0 processor.
+.IP "\fB\-relax\-section\fR" 4
+.IX Item "-relax-section"
+Replace identified out-of-range branches with PC-relative \f(CW\*(C`jmp\*(C'\fR
+sequences when possible.  The generated code sequences are suitable
+for use in position-independent code, but there is a practical limit
+on the extended branch range because of the length of the sequences.
+This option is the default.
+.IP "\fB\-relax\-all\fR" 4
+.IX Item "-relax-all"
+Replace branch instructions not determinable to be in range
+and all call instructions with \f(CW\*(C`jmp\*(C'\fR and \f(CW\*(C`callr\*(C'\fR sequences
+(respectively).  This option generates absolute relocations against the
+target symbols and is not appropriate for position-independent code.
+.IP "\fB\-no\-relax\fR" 4
+.IX Item "-no-relax"
+Do not replace any branches or calls.
+.IP "\fB\-EB\fR" 4
+.IX Item "-EB"
+Generate big-endian output.
+.IP "\fB\-EL\fR" 4
+.IX Item "-EL"
+Generate little-endian output.  This is the default.
+.IP "\fB\-march=\fR\fIarchitecture\fR" 4
+.IX Item "-march=architecture"
+This option specifies the target architecture.  The assembler issues
+an error message if an attempt is made to assemble an instruction which
+will not execute on the target architecture.  The following architecture
+names are recognized:
+\&\f(CW\*(C`r1\*(C'\fR,
+\&\f(CW\*(C`r2\*(C'\fR.  
+The default is \f(CW\*(C`r1\*(C'\fR.
+.PP
+The following options are available when as is configured for a
+\&\s-1PRU\s0 processor.
+.IP "\fB\-mlink\-relax\fR" 4
+.IX Item "-mlink-relax"
+Assume that \s-1LD\s0 would optimize \s-1LDI32\s0 instructions by checking the upper
+16 bits of the \fIexpression\fR. If they are all zeros, then \s-1LD\s0 would
+shorten the \s-1LDI32\s0 instruction to a single \s-1LDI.\s0 In such case \f(CW\*(C`as\*(C'\fR
+will output \s-1DIFF\s0 relocations for diff expressions.
+.IP "\fB\-mno\-link\-relax\fR" 4
+.IX Item "-mno-link-relax"
+Assume that \s-1LD\s0 would not optimize \s-1LDI32\s0 instructions. As a consequence,
+\&\s-1DIFF\s0 relocations will not be emitted.
+.IP "\fB\-mno\-warn\-regname\-label\fR" 4
+.IX Item "-mno-warn-regname-label"
+Do not warn if a label name matches a register name. Usually assembler
+programmers will want this warning to be emitted. C compilers may want
+to turn this off.
+.PP
+The following options are available when as is configured for
+a \s-1MIPS\s0 processor.
+.IP "\fB\-G\fR \fInum\fR" 4
+.IX Item "-G num"
+This option sets the largest size of an object that can be referenced
+implicitly with the \f(CW\*(C`gp\*(C'\fR register.  It is only accepted for targets that
+use \s-1ECOFF\s0 format, such as a DECstation running Ultrix.  The default value is 8.
+.IP "\fB\-EB\fR" 4
+.IX Item "-EB"
+Generate \*(L"big endian\*(R" format output.
+.IP "\fB\-EL\fR" 4
+.IX Item "-EL"
+Generate \*(L"little endian\*(R" format output.
+.IP "\fB\-mips1\fR" 4
+.IX Item "-mips1"
+.PD 0
+.IP "\fB\-mips2\fR" 4
+.IX Item "-mips2"
+.IP "\fB\-mips3\fR" 4
+.IX Item "-mips3"
+.IP "\fB\-mips4\fR" 4
+.IX Item "-mips4"
+.IP "\fB\-mips5\fR" 4
+.IX Item "-mips5"
+.IP "\fB\-mips32\fR" 4
+.IX Item "-mips32"
+.IP "\fB\-mips32r2\fR" 4
+.IX Item "-mips32r2"
+.IP "\fB\-mips32r3\fR" 4
+.IX Item "-mips32r3"
+.IP "\fB\-mips32r5\fR" 4
+.IX Item "-mips32r5"
+.IP "\fB\-mips32r6\fR" 4
+.IX Item "-mips32r6"
+.IP "\fB\-mips64\fR" 4
+.IX Item "-mips64"
+.IP "\fB\-mips64r2\fR" 4
+.IX Item "-mips64r2"
+.IP "\fB\-mips64r3\fR" 4
+.IX Item "-mips64r3"
+.IP "\fB\-mips64r5\fR" 4
+.IX Item "-mips64r5"
+.IP "\fB\-mips64r6\fR" 4
+.IX Item "-mips64r6"
+.PD
+Generate code for a particular \s-1MIPS\s0 Instruction Set Architecture level.
+\&\fB\-mips1\fR is an alias for \fB\-march=r3000\fR, \fB\-mips2\fR is an
+alias for \fB\-march=r6000\fR, \fB\-mips3\fR is an alias for
+\&\fB\-march=r4000\fR and \fB\-mips4\fR is an alias for \fB\-march=r8000\fR.
+\&\fB\-mips5\fR, \fB\-mips32\fR, \fB\-mips32r2\fR, \fB\-mips32r3\fR,
+\&\fB\-mips32r5\fR, \fB\-mips32r6\fR, \fB\-mips64\fR, \fB\-mips64r2\fR,
+\&\fB\-mips64r3\fR, \fB\-mips64r5\fR, and \fB\-mips64r6\fR correspond to generic
+\&\s-1MIPS V, MIPS32, MIPS32\s0 Release 2, \s-1MIPS32\s0 Release 3, \s-1MIPS32\s0 Release 5, \s-1MIPS32\s0
+Release 6, \s-1MIPS64, MIPS64\s0 Release 2, \s-1MIPS64\s0 Release 3, \s-1MIPS64\s0 Release 5, and
+\&\s-1MIPS64\s0 Release 6 \s-1ISA\s0 processors, respectively.
+.IP "\fB\-march=\fR\fIcpu\fR" 4
+.IX Item "-march=cpu"
+Generate code for a particular \s-1MIPS CPU.\s0
+.IP "\fB\-mtune=\fR\fIcpu\fR" 4
+.IX Item "-mtune=cpu"
+Schedule and tune for a particular \s-1MIPS CPU.\s0
+.IP "\fB\-mfix7000\fR" 4
+.IX Item "-mfix7000"
+.PD 0
+.IP "\fB\-mno\-fix7000\fR" 4
+.IX Item "-mno-fix7000"
+.PD
+Cause nops to be inserted if the read of the destination register
+of an mfhi or mflo instruction occurs in the following two instructions.
+.IP "\fB\-mfix\-rm7000\fR" 4
+.IX Item "-mfix-rm7000"
+.PD 0
+.IP "\fB\-mno\-fix\-rm7000\fR" 4
+.IX Item "-mno-fix-rm7000"
+.PD
+Cause nops to be inserted if a dmult or dmultu instruction is
+followed by a load instruction.
+.IP "\fB\-mfix\-r5900\fR" 4
+.IX Item "-mfix-r5900"
+.PD 0
+.IP "\fB\-mno\-fix\-r5900\fR" 4
+.IX Item "-mno-fix-r5900"
+.PD
+Do not attempt to schedule the preceding instruction into the delay slot
+of a branch instruction placed at the end of a short loop of six
+instructions or fewer and always schedule a \f(CW\*(C`nop\*(C'\fR instruction there
+instead.  The short loop bug under certain conditions causes loops to
+execute only once or twice, due to a hardware bug in the R5900 chip.
+.IP "\fB\-mdebug\fR" 4
+.IX Item "-mdebug"
+.PD 0
+.IP "\fB\-no\-mdebug\fR" 4
+.IX Item "-no-mdebug"
+.PD
+Cause stabs-style debugging output to go into an ECOFF-style .mdebug
+section instead of the standard \s-1ELF\s0 .stabs sections.
+.IP "\fB\-mpdr\fR" 4
+.IX Item "-mpdr"
+.PD 0
+.IP "\fB\-mno\-pdr\fR" 4
+.IX Item "-mno-pdr"
+.PD
+Control generation of \f(CW\*(C`.pdr\*(C'\fR sections.
+.IP "\fB\-mgp32\fR" 4
+.IX Item "-mgp32"
+.PD 0
+.IP "\fB\-mfp32\fR" 4
+.IX Item "-mfp32"
+.PD
+The register sizes are normally inferred from the \s-1ISA\s0 and \s-1ABI,\s0 but these
+flags force a certain group of registers to be treated as 32 bits wide at
+all times.  \fB\-mgp32\fR controls the size of general-purpose registers
+and \fB\-mfp32\fR controls the size of floating-point registers.
+.IP "\fB\-mgp64\fR" 4
+.IX Item "-mgp64"
+.PD 0
+.IP "\fB\-mfp64\fR" 4
+.IX Item "-mfp64"
+.PD
+The register sizes are normally inferred from the \s-1ISA\s0 and \s-1ABI,\s0 but these
+flags force a certain group of registers to be treated as 64 bits wide at
+all times.  \fB\-mgp64\fR controls the size of general-purpose registers
+and \fB\-mfp64\fR controls the size of floating-point registers.
+.IP "\fB\-mfpxx\fR" 4
+.IX Item "-mfpxx"
+The register sizes are normally inferred from the \s-1ISA\s0 and \s-1ABI,\s0 but using
+this flag in combination with \fB\-mabi=32\fR enables an \s-1ABI\s0 variant
+which will operate correctly with floating-point registers which are
+32 or 64 bits wide.
+.IP "\fB\-modd\-spreg\fR" 4
+.IX Item "-modd-spreg"
+.PD 0
+.IP "\fB\-mno\-odd\-spreg\fR" 4
+.IX Item "-mno-odd-spreg"
+.PD
+Enable use of floating-point operations on odd-numbered single-precision
+registers when supported by the \s-1ISA.\s0  \fB\-mfpxx\fR implies
+\&\fB\-mno\-odd\-spreg\fR, otherwise the default is \fB\-modd\-spreg\fR.
+.IP "\fB\-mips16\fR" 4
+.IX Item "-mips16"
+.PD 0
+.IP "\fB\-no\-mips16\fR" 4
+.IX Item "-no-mips16"
+.PD
+Generate code for the \s-1MIPS 16\s0 processor.  This is equivalent to putting
+\&\f(CW\*(C`.module mips16\*(C'\fR at the start of the assembly file.  \fB\-no\-mips16\fR
+turns off this option.
+.IP "\fB\-mmips16e2\fR" 4
+.IX Item "-mmips16e2"
+.PD 0
+.IP "\fB\-mno\-mips16e2\fR" 4
+.IX Item "-mno-mips16e2"
+.PD
+Enable the use of MIPS16e2 instructions in \s-1MIPS16\s0 mode.  This is equivalent
+to putting \f(CW\*(C`.module mips16e2\*(C'\fR at the start of the assembly file.
+\&\fB\-mno\-mips16e2\fR turns off this option.
+.IP "\fB\-mmicromips\fR" 4
+.IX Item "-mmicromips"
+.PD 0
+.IP "\fB\-mno\-micromips\fR" 4
+.IX Item "-mno-micromips"
+.PD
+Generate code for the microMIPS processor.  This is equivalent to putting
+\&\f(CW\*(C`.module micromips\*(C'\fR at the start of the assembly file.
+\&\fB\-mno\-micromips\fR turns off this option.  This is equivalent to putting
+\&\f(CW\*(C`.module nomicromips\*(C'\fR at the start of the assembly file.
+.IP "\fB\-msmartmips\fR" 4
+.IX Item "-msmartmips"
+.PD 0
+.IP "\fB\-mno\-smartmips\fR" 4
+.IX Item "-mno-smartmips"
+.PD
+Enables the SmartMIPS extension to the \s-1MIPS32\s0 instruction set.  This is
+equivalent to putting \f(CW\*(C`.module smartmips\*(C'\fR at the start of the assembly
+file.  \fB\-mno\-smartmips\fR turns off this option.
+.IP "\fB\-mips3d\fR" 4
+.IX Item "-mips3d"
+.PD 0
+.IP "\fB\-no\-mips3d\fR" 4
+.IX Item "-no-mips3d"
+.PD
+Generate code for the \s-1MIPS\-3D\s0 Application Specific Extension.
+This tells the assembler to accept \s-1MIPS\-3D\s0 instructions.
+\&\fB\-no\-mips3d\fR turns off this option.
+.IP "\fB\-mdmx\fR" 4
+.IX Item "-mdmx"
+.PD 0
+.IP "\fB\-no\-mdmx\fR" 4
+.IX Item "-no-mdmx"
+.PD
+Generate code for the \s-1MDMX\s0 Application Specific Extension.
+This tells the assembler to accept \s-1MDMX\s0 instructions.
+\&\fB\-no\-mdmx\fR turns off this option.
+.IP "\fB\-mdsp\fR" 4
+.IX Item "-mdsp"
+.PD 0
+.IP "\fB\-mno\-dsp\fR" 4
+.IX Item "-mno-dsp"
+.PD
+Generate code for the \s-1DSP\s0 Release 1 Application Specific Extension.
+This tells the assembler to accept \s-1DSP\s0 Release 1 instructions.
+\&\fB\-mno\-dsp\fR turns off this option.
+.IP "\fB\-mdspr2\fR" 4
+.IX Item "-mdspr2"
+.PD 0
+.IP "\fB\-mno\-dspr2\fR" 4
+.IX Item "-mno-dspr2"
+.PD
+Generate code for the \s-1DSP\s0 Release 2 Application Specific Extension.
+This option implies \fB\-mdsp\fR.
+This tells the assembler to accept \s-1DSP\s0 Release 2 instructions.
+\&\fB\-mno\-dspr2\fR turns off this option.
+.IP "\fB\-mdspr3\fR" 4
+.IX Item "-mdspr3"
+.PD 0
+.IP "\fB\-mno\-dspr3\fR" 4
+.IX Item "-mno-dspr3"
+.PD
+Generate code for the \s-1DSP\s0 Release 3 Application Specific Extension.
+This option implies \fB\-mdsp\fR and \fB\-mdspr2\fR.
+This tells the assembler to accept \s-1DSP\s0 Release 3 instructions.
+\&\fB\-mno\-dspr3\fR turns off this option.
+.IP "\fB\-mmsa\fR" 4
+.IX Item "-mmsa"
+.PD 0
+.IP "\fB\-mno\-msa\fR" 4
+.IX Item "-mno-msa"
+.PD
+Generate code for the \s-1MIPS SIMD\s0 Architecture Extension.
+This tells the assembler to accept \s-1MSA\s0 instructions.
+\&\fB\-mno\-msa\fR turns off this option.
+.IP "\fB\-mxpa\fR" 4
+.IX Item "-mxpa"
+.PD 0
+.IP "\fB\-mno\-xpa\fR" 4
+.IX Item "-mno-xpa"
+.PD
+Generate code for the \s-1MIPS\s0 eXtended Physical Address (\s-1XPA\s0) Extension.
+This tells the assembler to accept \s-1XPA\s0 instructions.
+\&\fB\-mno\-xpa\fR turns off this option.
+.IP "\fB\-mmt\fR" 4
+.IX Item "-mmt"
+.PD 0
+.IP "\fB\-mno\-mt\fR" 4
+.IX Item "-mno-mt"
+.PD
+Generate code for the \s-1MT\s0 Application Specific Extension.
+This tells the assembler to accept \s-1MT\s0 instructions.
+\&\fB\-mno\-mt\fR turns off this option.
+.IP "\fB\-mmcu\fR" 4
+.IX Item "-mmcu"
+.PD 0
+.IP "\fB\-mno\-mcu\fR" 4
+.IX Item "-mno-mcu"
+.PD
+Generate code for the \s-1MCU\s0 Application Specific Extension.
+This tells the assembler to accept \s-1MCU\s0 instructions.
+\&\fB\-mno\-mcu\fR turns off this option.
+.IP "\fB\-mcrc\fR" 4
+.IX Item "-mcrc"
+.PD 0
+.IP "\fB\-mno\-crc\fR" 4
+.IX Item "-mno-crc"
+.PD
+Generate code for the \s-1MIPS\s0 cyclic redundancy check (\s-1CRC\s0) Application
+Specific Extension.  This tells the assembler to accept \s-1CRC\s0 instructions.
+\&\fB\-mno\-crc\fR turns off this option.
+.IP "\fB\-mginv\fR" 4
+.IX Item "-mginv"
+.PD 0
+.IP "\fB\-mno\-ginv\fR" 4
+.IX Item "-mno-ginv"
+.PD
+Generate code for the Global INValidate (\s-1GINV\s0) Application Specific
+Extension.  This tells the assembler to accept \s-1GINV\s0 instructions.
+\&\fB\-mno\-ginv\fR turns off this option.
+.IP "\fB\-mloongson\-mmi\fR" 4
+.IX Item "-mloongson-mmi"
+.PD 0
+.IP "\fB\-mno\-loongson\-mmi\fR" 4
+.IX Item "-mno-loongson-mmi"
+.PD
+Generate code for the Loongson MultiMedia extensions Instructions (\s-1MMI\s0)
+Application Specific Extension.  This tells the assembler to accept \s-1MMI\s0
+instructions.
+\&\fB\-mno\-loongson\-mmi\fR turns off this option.
+.IP "\fB\-mloongson\-cam\fR" 4
+.IX Item "-mloongson-cam"
+.PD 0
+.IP "\fB\-mno\-loongson\-cam\fR" 4
+.IX Item "-mno-loongson-cam"
+.PD
+Generate code for the Loongson Content Address Memory (\s-1CAM\s0) instructions.
+This tells the assembler to accept Loongson \s-1CAM\s0 instructions.
+\&\fB\-mno\-loongson\-cam\fR turns off this option.
+.IP "\fB\-mloongson\-ext\fR" 4
+.IX Item "-mloongson-ext"
+.PD 0
+.IP "\fB\-mno\-loongson\-ext\fR" 4
+.IX Item "-mno-loongson-ext"
+.PD
+Generate code for the Loongson EXTensions (\s-1EXT\s0) instructions.
+This tells the assembler to accept Loongson \s-1EXT\s0 instructions.
+\&\fB\-mno\-loongson\-ext\fR turns off this option.
+.IP "\fB\-mloongson\-ext2\fR" 4
+.IX Item "-mloongson-ext2"
+.PD 0
+.IP "\fB\-mno\-loongson\-ext2\fR" 4
+.IX Item "-mno-loongson-ext2"
+.PD
+Generate code for the Loongson EXTensions R2 (\s-1EXT2\s0) instructions.
+This option implies \fB\-mloongson\-ext\fR.
+This tells the assembler to accept Loongson \s-1EXT2\s0 instructions.
+\&\fB\-mno\-loongson\-ext2\fR turns off this option.
+.IP "\fB\-minsn32\fR" 4
+.IX Item "-minsn32"
+.PD 0
+.IP "\fB\-mno\-insn32\fR" 4
+.IX Item "-mno-insn32"
+.PD
+Only use 32\-bit instruction encodings when generating code for the
+microMIPS processor.  This option inhibits the use of any 16\-bit
+instructions.  This is equivalent to putting \f(CW\*(C`.set insn32\*(C'\fR at
+the start of the assembly file.  \fB\-mno\-insn32\fR turns off this
+option.  This is equivalent to putting \f(CW\*(C`.set noinsn32\*(C'\fR at the
+start of the assembly file.  By default \fB\-mno\-insn32\fR is
+selected, allowing all instructions to be used.
+.IP "\fB\-\-construct\-floats\fR" 4
+.IX Item "--construct-floats"
+.PD 0
+.IP "\fB\-\-no\-construct\-floats\fR" 4
+.IX Item "--no-construct-floats"
+.PD
+The \fB\-\-no\-construct\-floats\fR option disables the construction of
+double width floating point constants by loading the two halves of the
+value into the two single width floating point registers that make up
+the double width register.  By default \fB\-\-construct\-floats\fR is
+selected, allowing construction of these floating point constants.
+.IP "\fB\-\-relax\-branch\fR" 4
+.IX Item "--relax-branch"
+.PD 0
+.IP "\fB\-\-no\-relax\-branch\fR" 4
+.IX Item "--no-relax-branch"
+.PD
+The \fB\-\-relax\-branch\fR option enables the relaxation of out-of-range
+branches.  By default \fB\-\-no\-relax\-branch\fR is selected, causing any
+out-of-range branches to produce an error.
+.IP "\fB\-mignore\-branch\-isa\fR" 4
+.IX Item "-mignore-branch-isa"
+.PD 0
+.IP "\fB\-mno\-ignore\-branch\-isa\fR" 4
+.IX Item "-mno-ignore-branch-isa"
+.PD
+Ignore branch checks for invalid transitions between \s-1ISA\s0 modes.  The
+semantics of branches does not provide for an \s-1ISA\s0 mode switch, so in
+most cases the \s-1ISA\s0 mode a branch has been encoded for has to be the
+same as the \s-1ISA\s0 mode of the branch's target label.  Therefore \s-1GAS\s0 has
+checks implemented that verify in branch assembly that the two \s-1ISA\s0
+modes match.  \fB\-mignore\-branch\-isa\fR disables these checks.  By
+default \fB\-mno\-ignore\-branch\-isa\fR is selected, causing any invalid
+branch requiring a transition between \s-1ISA\s0 modes to produce an error.
+.IP "\fB\-mnan=\fR\fIencoding\fR" 4
+.IX Item "-mnan=encoding"
+Select between the \s-1IEEE 754\-2008\s0 (\fB\-mnan=2008\fR) or the legacy
+(\fB\-mnan=legacy\fR) NaN encoding format.  The latter is the default.
+.IP "\fB\-\-emulation=\fR\fIname\fR" 4
+.IX Item "--emulation=name"
+This option was formerly used to switch between \s-1ELF\s0 and \s-1ECOFF\s0 output
+on targets like \s-1IRIX 5\s0 that supported both.  \s-1MIPS ECOFF\s0 support was
+removed in \s-1GAS 2.24,\s0 so the option now serves little purpose.
+It is retained for backwards compatibility.
+.Sp
+The available configuration names are: \fBmipself\fR, \fBmipslelf\fR and
+\&\fBmipsbelf\fR.  Choosing \fBmipself\fR now has no effect, since the output
+is always \s-1ELF.\s0  \fBmipslelf\fR and \fBmipsbelf\fR select little\- and
+big-endian output respectively, but \fB\-EL\fR and \fB\-EB\fR are now the
+preferred options instead.
+.IP "\fB\-nocpp\fR" 4
+.IX Item "-nocpp"
+\&\fBas\fR ignores this option.  It is accepted for compatibility with
+the native tools.
+.IP "\fB\-\-trap\fR" 4
+.IX Item "--trap"
+.PD 0
+.IP "\fB\-\-no\-trap\fR" 4
+.IX Item "--no-trap"
+.IP "\fB\-\-break\fR" 4
+.IX Item "--break"
+.IP "\fB\-\-no\-break\fR" 4
+.IX Item "--no-break"
+.PD
+Control how to deal with multiplication overflow and division by zero.
+\&\fB\-\-trap\fR or \fB\-\-no\-break\fR (which are synonyms) take a trap exception
+(and only work for Instruction Set Architecture level 2 and higher);
+\&\fB\-\-break\fR or \fB\-\-no\-trap\fR (also synonyms, and the default) take a
+break exception.
+.IP "\fB\-n\fR" 4
+.IX Item "-n"
+When this option is used, \fBas\fR will issue a warning every
+time it generates a nop instruction from a macro.
+.PP
+The following options are available when as is configured for a
+Meta processor.
+.ie n .IP """\-mcpu=metac11""" 4
+.el .IP "\f(CW\-mcpu=metac11\fR" 4
+.IX Item "-mcpu=metac11"
+Generate code for Meta 1.1.
+.ie n .IP """\-mcpu=metac12""" 4
+.el .IP "\f(CW\-mcpu=metac12\fR" 4
+.IX Item "-mcpu=metac12"
+Generate code for Meta 1.2.
+.ie n .IP """\-mcpu=metac21""" 4
+.el .IP "\f(CW\-mcpu=metac21\fR" 4
+.IX Item "-mcpu=metac21"
+Generate code for Meta 2.1.
+.ie n .IP """\-mfpu=metac21""" 4
+.el .IP "\f(CW\-mfpu=metac21\fR" 4
+.IX Item "-mfpu=metac21"
+Allow code to use \s-1FPU\s0 hardware of Meta 2.1.
+.PP
+See the info pages for documentation of the MMIX-specific options.
+.PP
+The following options are available when as is configured for a
+\&\s-1NDS32\s0 processor.
+.ie n .IP """\-O1""" 4
+.el .IP "\f(CW\-O1\fR" 4
+.IX Item "-O1"
+Optimize for performance.
+.ie n .IP """\-Os""" 4
+.el .IP "\f(CW\-Os\fR" 4
+.IX Item "-Os"
+Optimize for space.
+.ie n .IP """\-EL""" 4
+.el .IP "\f(CW\-EL\fR" 4
+.IX Item "-EL"
+Produce little endian data output.
+.ie n .IP """\-EB""" 4
+.el .IP "\f(CW\-EB\fR" 4
+.IX Item "-EB"
+Produce little endian data output.
+.ie n .IP """\-mpic""" 4
+.el .IP "\f(CW\-mpic\fR" 4
+.IX Item "-mpic"
+Generate \s-1PIC.\s0
+.ie n .IP """\-mno\-fp\-as\-gp\-relax""" 4
+.el .IP "\f(CW\-mno\-fp\-as\-gp\-relax\fR" 4
+.IX Item "-mno-fp-as-gp-relax"
+Suppress fp-as-gp relaxation for this file.
+.ie n .IP """\-mb2bb\-relax""" 4
+.el .IP "\f(CW\-mb2bb\-relax\fR" 4
+.IX Item "-mb2bb-relax"
+Back-to-back branch optimization.
+.ie n .IP """\-mno\-all\-relax""" 4
+.el .IP "\f(CW\-mno\-all\-relax\fR" 4
+.IX Item "-mno-all-relax"
+Suppress all relaxation for this file.
+.ie n .IP """\-march=<arch name>""" 4
+.el .IP "\f(CW\-march=<arch name>\fR" 4
+.IX Item "-march=<arch name>"
+Assemble for architecture <arch name> which could be v3, v3j, v3m, v3f,
+v3s, v2, v2j, v2f, v2s.
+.ie n .IP """\-mbaseline=<baseline>""" 4
+.el .IP "\f(CW\-mbaseline=<baseline>\fR" 4
+.IX Item "-mbaseline=<baseline>"
+Assemble for baseline <baseline> which could be v2, v3, v3m.
+.ie n .IP """\-mfpu\-freg=\fIFREG\fP""" 4
+.el .IP "\f(CW\-mfpu\-freg=\f(CIFREG\f(CW\fR" 4
+.IX Item "-mfpu-freg=FREG"
+Specify a \s-1FPU\s0 configuration.
+.RS 4
+.ie n .IP """0      8 SP /  4 DP registers""" 4
+.el .IP "\f(CW0      8 SP /  4 DP registers\fR" 4
+.IX Item "0 8 SP / 4 DP registers"
+.PD 0
+.ie n .IP """1     16 SP /  8 DP registers""" 4
+.el .IP "\f(CW1     16 SP /  8 DP registers\fR" 4
+.IX Item "1 16 SP / 8 DP registers"
+.ie n .IP """2     32 SP / 16 DP registers""" 4
+.el .IP "\f(CW2     32 SP / 16 DP registers\fR" 4
+.IX Item "2 32 SP / 16 DP registers"
+.ie n .IP """3     32 SP / 32 DP registers""" 4
+.el .IP "\f(CW3     32 SP / 32 DP registers\fR" 4
+.IX Item "3 32 SP / 32 DP registers"
+.RE
+.RS 4
+.RE
+.ie n .IP """\-mabi=\fIabi\fP""" 4
+.el .IP "\f(CW\-mabi=\f(CIabi\f(CW\fR" 4
+.IX Item "-mabi=abi"
+.PD
+Specify a abi version <abi> could be v1, v2, v2fp, v2fpp.
+.ie n .IP """\-m[no\-]mac""" 4
+.el .IP "\f(CW\-m[no\-]mac\fR" 4
+.IX Item "-m[no-]mac"
+Enable/Disable Multiply instructions support.
+.ie n .IP """\-m[no\-]div""" 4
+.el .IP "\f(CW\-m[no\-]div\fR" 4
+.IX Item "-m[no-]div"
+Enable/Disable Divide instructions support.
+.ie n .IP """\-m[no\-]16bit\-ext""" 4
+.el .IP "\f(CW\-m[no\-]16bit\-ext\fR" 4
+.IX Item "-m[no-]16bit-ext"
+Enable/Disable 16\-bit extension
+.ie n .IP """\-m[no\-]dx\-regs""" 4
+.el .IP "\f(CW\-m[no\-]dx\-regs\fR" 4
+.IX Item "-m[no-]dx-regs"
+Enable/Disable d0/d1 registers
+.ie n .IP """\-m[no\-]perf\-ext""" 4
+.el .IP "\f(CW\-m[no\-]perf\-ext\fR" 4
+.IX Item "-m[no-]perf-ext"
+Enable/Disable Performance extension
+.ie n .IP """\-m[no\-]perf2\-ext""" 4
+.el .IP "\f(CW\-m[no\-]perf2\-ext\fR" 4
+.IX Item "-m[no-]perf2-ext"
+Enable/Disable Performance extension 2
+.ie n .IP """\-m[no\-]string\-ext""" 4
+.el .IP "\f(CW\-m[no\-]string\-ext\fR" 4
+.IX Item "-m[no-]string-ext"
+Enable/Disable String extension
+.ie n .IP """\-m[no\-]reduced\-regs""" 4
+.el .IP "\f(CW\-m[no\-]reduced\-regs\fR" 4
+.IX Item "-m[no-]reduced-regs"
+Enable/Disable Reduced Register configuration (\s-1GPR16\s0) option
+.ie n .IP """\-m[no\-]audio\-isa\-ext""" 4
+.el .IP "\f(CW\-m[no\-]audio\-isa\-ext\fR" 4
+.IX Item "-m[no-]audio-isa-ext"
+Enable/Disable \s-1AUDIO ISA\s0 extension
+.ie n .IP """\-m[no\-]fpu\-sp\-ext""" 4
+.el .IP "\f(CW\-m[no\-]fpu\-sp\-ext\fR" 4
+.IX Item "-m[no-]fpu-sp-ext"
+Enable/Disable \s-1FPU SP\s0 extension
+.ie n .IP """\-m[no\-]fpu\-dp\-ext""" 4
+.el .IP "\f(CW\-m[no\-]fpu\-dp\-ext\fR" 4
+.IX Item "-m[no-]fpu-dp-ext"
+Enable/Disable \s-1FPU DP\s0 extension
+.ie n .IP """\-m[no\-]fpu\-fma""" 4
+.el .IP "\f(CW\-m[no\-]fpu\-fma\fR" 4
+.IX Item "-m[no-]fpu-fma"
+Enable/Disable \s-1FPU\s0 fused-multiply-add instructions
+.ie n .IP """\-mall\-ext""" 4
+.el .IP "\f(CW\-mall\-ext\fR" 4
+.IX Item "-mall-ext"
+Turn on all extensions and instructions support
+.PP
+The following options are available when as is configured for a
+PowerPC processor.
+.IP "\fB\-a32\fR" 4
+.IX Item "-a32"
+Generate \s-1ELF32\s0 or \s-1XCOFF32.\s0
+.IP "\fB\-a64\fR" 4
+.IX Item "-a64"
+Generate \s-1ELF64\s0 or \s-1XCOFF64.\s0
+.IP "\fB\-K \s-1PIC\s0\fR" 4
+.IX Item "-K PIC"
+Set \s-1EF_PPC_RELOCATABLE_LIB\s0 in \s-1ELF\s0 flags.
+.IP "\fB\-mpwrx | \-mpwr2\fR" 4
+.IX Item "-mpwrx | -mpwr2"
+Generate code for \s-1POWER/2\s0 (\s-1RIOS2\s0).
+.IP "\fB\-mpwr\fR" 4
+.IX Item "-mpwr"
+Generate code for \s-1POWER\s0 (\s-1RIOS1\s0)
+.IP "\fB\-m601\fR" 4
+.IX Item "-m601"
+Generate code for PowerPC 601.
+.IP "\fB\-mppc, \-mppc32, \-m603, \-m604\fR" 4
+.IX Item "-mppc, -mppc32, -m603, -m604"
+Generate code for PowerPC 603/604.
+.IP "\fB\-m403, \-m405\fR" 4
+.IX Item "-m403, -m405"
+Generate code for PowerPC 403/405.
+.IP "\fB\-m440\fR" 4
+.IX Item "-m440"
+Generate code for PowerPC 440.  BookE and some 405 instructions.
+.IP "\fB\-m464\fR" 4
+.IX Item "-m464"
+Generate code for PowerPC 464.
+.IP "\fB\-m476\fR" 4
+.IX Item "-m476"
+Generate code for PowerPC 476.
+.IP "\fB\-m7400, \-m7410, \-m7450, \-m7455\fR" 4
+.IX Item "-m7400, -m7410, -m7450, -m7455"
+Generate code for PowerPC 7400/7410/7450/7455.
+.IP "\fB\-m750cl, \-mgekko, \-mbroadway\fR" 4
+.IX Item "-m750cl, -mgekko, -mbroadway"
+Generate code for PowerPC 750CL/Gekko/Broadway.
+.IP "\fB\-m821, \-m850, \-m860\fR" 4
+.IX Item "-m821, -m850, -m860"
+Generate code for PowerPC 821/850/860.
+.IP "\fB\-mppc64, \-m620\fR" 4
+.IX Item "-mppc64, -m620"
+Generate code for PowerPC 620/625/630.
+.IP "\fB\-me500, \-me500x2\fR" 4
+.IX Item "-me500, -me500x2"
+Generate code for Motorola e500 core complex.
+.IP "\fB\-me500mc\fR" 4
+.IX Item "-me500mc"
+Generate code for Freescale e500mc core complex.
+.IP "\fB\-me500mc64\fR" 4
+.IX Item "-me500mc64"
+Generate code for Freescale e500mc64 core complex.
+.IP "\fB\-me5500\fR" 4
+.IX Item "-me5500"
+Generate code for Freescale e5500 core complex.
+.IP "\fB\-me6500\fR" 4
+.IX Item "-me6500"
+Generate code for Freescale e6500 core complex.
+.IP "\fB\-mspe\fR" 4
+.IX Item "-mspe"
+Generate code for Motorola \s-1SPE\s0 instructions.
+.IP "\fB\-mspe2\fR" 4
+.IX Item "-mspe2"
+Generate code for Freescale \s-1SPE2\s0 instructions.
+.IP "\fB\-mtitan\fR" 4
+.IX Item "-mtitan"
+Generate code for AppliedMicro Titan core complex.
+.IP "\fB\-mppc64bridge\fR" 4
+.IX Item "-mppc64bridge"
+Generate code for PowerPC 64, including bridge insns.
+.IP "\fB\-mbooke\fR" 4
+.IX Item "-mbooke"
+Generate code for 32\-bit BookE.
+.IP "\fB\-ma2\fR" 4
+.IX Item "-ma2"
+Generate code for A2 architecture.
+.IP "\fB\-me300\fR" 4
+.IX Item "-me300"
+Generate code for PowerPC e300 family.
+.IP "\fB\-maltivec\fR" 4
+.IX Item "-maltivec"
+Generate code for processors with AltiVec instructions.
+.IP "\fB\-mvle\fR" 4
+.IX Item "-mvle"
+Generate code for Freescale PowerPC \s-1VLE\s0 instructions.
+.IP "\fB\-mvsx\fR" 4
+.IX Item "-mvsx"
+Generate code for processors with Vector-Scalar (\s-1VSX\s0) instructions.
+.IP "\fB\-mhtm\fR" 4
+.IX Item "-mhtm"
+Generate code for processors with Hardware Transactional Memory instructions.
+.IP "\fB\-mpower4, \-mpwr4\fR" 4
+.IX Item "-mpower4, -mpwr4"
+Generate code for Power4 architecture.
+.IP "\fB\-mpower5, \-mpwr5, \-mpwr5x\fR" 4
+.IX Item "-mpower5, -mpwr5, -mpwr5x"
+Generate code for Power5 architecture.
+.IP "\fB\-mpower6, \-mpwr6\fR" 4
+.IX Item "-mpower6, -mpwr6"
+Generate code for Power6 architecture.
+.IP "\fB\-mpower7, \-mpwr7\fR" 4
+.IX Item "-mpower7, -mpwr7"
+Generate code for Power7 architecture.
+.IP "\fB\-mpower8, \-mpwr8\fR" 4
+.IX Item "-mpower8, -mpwr8"
+Generate code for Power8 architecture.
+.IP "\fB\-mpower9, \-mpwr9\fR" 4
+.IX Item "-mpower9, -mpwr9"
+Generate code for Power9 architecture.
+.IP "\fB\-mcell\fR" 4
+.IX Item "-mcell"
+.PD 0
+.IP "\fB\-mcell\fR" 4
+.IX Item "-mcell"
+.PD
+Generate code for Cell Broadband Engine architecture.
+.IP "\fB\-mcom\fR" 4
+.IX Item "-mcom"
+Generate code Power/PowerPC common instructions.
+.IP "\fB\-many\fR" 4
+.IX Item "-many"
+Generate code for any architecture (\s-1PWR/PWRX/PPC\s0).
+.IP "\fB\-mregnames\fR" 4
+.IX Item "-mregnames"
+Allow symbolic names for registers.
+.IP "\fB\-mno\-regnames\fR" 4
+.IX Item "-mno-regnames"
+Do not allow symbolic names for registers.
+.IP "\fB\-mrelocatable\fR" 4
+.IX Item "-mrelocatable"
+Support for \s-1GCC\s0's \-mrelocatable option.
+.IP "\fB\-mrelocatable\-lib\fR" 4
+.IX Item "-mrelocatable-lib"
+Support for \s-1GCC\s0's \-mrelocatable\-lib option.
+.IP "\fB\-memb\fR" 4
+.IX Item "-memb"
+Set \s-1PPC_EMB\s0 bit in \s-1ELF\s0 flags.
+.IP "\fB\-mlittle, \-mlittle\-endian, \-le\fR" 4
+.IX Item "-mlittle, -mlittle-endian, -le"
+Generate code for a little endian machine.
+.IP "\fB\-mbig, \-mbig\-endian, \-be\fR" 4
+.IX Item "-mbig, -mbig-endian, -be"
+Generate code for a big endian machine.
+.IP "\fB\-msolaris\fR" 4
+.IX Item "-msolaris"
+Generate code for Solaris.
+.IP "\fB\-mno\-solaris\fR" 4
+.IX Item "-mno-solaris"
+Do not generate code for Solaris.
+.IP "\fB\-nops=\fR\fIcount\fR" 4
+.IX Item "-nops=count"
+If an alignment directive inserts more than \fIcount\fR nops, put a
+branch at the beginning to skip execution of the nops.
+.PP
+The following options are available when as is configured for a
+RISC-V processor.
+.IP "\fB\-fpic\fR" 4
+.IX Item "-fpic"
+.PD 0
+.IP "\fB\-fPIC\fR" 4
+.IX Item "-fPIC"
+.PD
+Generate position-independent code
+.IP "\fB\-fno\-pic\fR" 4
+.IX Item "-fno-pic"
+Don't generate position-independent code (default)
+.IP "\fB\-march=ISA\fR" 4
+.IX Item "-march=ISA"
+Select the base isa, as specified by \s-1ISA.\s0  For example \-march=rv32ima.
+.IP "\fB\-mabi=ABI\fR" 4
+.IX Item "-mabi=ABI"
+Selects the \s-1ABI,\s0 which is either \*(L"ilp32\*(R" or \*(L"lp64\*(R", optionally followed
+by \*(L"f\*(R", \*(L"d\*(R", or \*(L"q\*(R" to indicate single-precision, double-precision, or
+quad-precision floating-point calling convention, or none to indicate
+the soft-float calling convention.  Also, \*(L"ilp32\*(R" can optionally be followed
+by \*(L"e\*(R" to indicate the \s-1RVE ABI,\s0 which is always soft-float.
+.IP "\fB\-mrelax\fR" 4
+.IX Item "-mrelax"
+Take advantage of linker relaxations to reduce the number of instructions
+required to materialize symbol addresses. (default)
+.IP "\fB\-mno\-relax\fR" 4
+.IX Item "-mno-relax"
+Don't do linker relaxations.
+.PP
+See the info pages for documentation of the RX-specific options.
+.PP
+The following options are available when as is configured for the s390
+processor family.
+.IP "\fB\-m31\fR" 4
+.IX Item "-m31"
+.PD 0
+.IP "\fB\-m64\fR" 4
+.IX Item "-m64"
+.PD
+Select the word size, either 31/32 bits or 64 bits.
+.IP "\fB\-mesa\fR" 4
+.IX Item "-mesa"
+.PD 0
+.IP "\fB\-mzarch\fR" 4
+.IX Item "-mzarch"
+.PD
+Select the architecture mode, either the Enterprise System
+Architecture (esa) or the z/Architecture mode (zarch).
+.IP "\fB\-march=\fR\fIprocessor\fR" 4
+.IX Item "-march=processor"
+Specify which s390 processor variant is the target, \fBg5\fR (or
+\&\fBarch3\fR), \fBg6\fR, \fBz900\fR (or \fBarch5\fR), \fBz990\fR (or
+\&\fBarch6\fR), \fBz9\-109\fR, \fBz9\-ec\fR (or \fBarch7\fR), \fBz10\fR (or
+\&\fBarch8\fR), \fBz196\fR (or \fBarch9\fR), \fBzEC12\fR (or \fBarch10\fR),
+\&\fBz13\fR (or \fBarch11\fR), or \fBz14\fR (or \fBarch12\fR).
+.IP "\fB\-mregnames\fR" 4
+.IX Item "-mregnames"
+.PD 0
+.IP "\fB\-mno\-regnames\fR" 4
+.IX Item "-mno-regnames"
+.PD
+Allow or disallow symbolic names for registers.
+.IP "\fB\-mwarn\-areg\-zero\fR" 4
+.IX Item "-mwarn-areg-zero"
+Warn whenever the operand for a base or index register has been specified
+but evaluates to zero.
+.PP
+The following options are available when as is configured for a
+\&\s-1TMS320C6000\s0 processor.
+.IP "\fB\-march=\fR\fIarch\fR" 4
+.IX Item "-march=arch"
+Enable (only) instructions from architecture \fIarch\fR.  By default,
+all instructions are permitted.
+.Sp
+The following values of \fIarch\fR are accepted: \f(CW\*(C`c62x\*(C'\fR,
+\&\f(CW\*(C`c64x\*(C'\fR, \f(CW\*(C`c64x+\*(C'\fR, \f(CW\*(C`c67x\*(C'\fR, \f(CW\*(C`c67x+\*(C'\fR, \f(CW\*(C`c674x\*(C'\fR.
+.IP "\fB\-mdsbt\fR" 4
+.IX Item "-mdsbt"
+.PD 0
+.IP "\fB\-mno\-dsbt\fR" 4
+.IX Item "-mno-dsbt"
+.PD
+The \fB\-mdsbt\fR option causes the assembler to generate the
+\&\f(CW\*(C`Tag_ABI_DSBT\*(C'\fR attribute with a value of 1, indicating that the
+code is using \s-1DSBT\s0 addressing.  The \fB\-mno\-dsbt\fR option, the
+default, causes the tag to have a value of 0, indicating that the code
+does not use \s-1DSBT\s0 addressing.  The linker will emit a warning if
+objects of different type (\s-1DSBT\s0 and non-DSBT) are linked together.
+.IP "\fB\-mpid=no\fR" 4
+.IX Item "-mpid=no"
+.PD 0
+.IP "\fB\-mpid=near\fR" 4
+.IX Item "-mpid=near"
+.IP "\fB\-mpid=far\fR" 4
+.IX Item "-mpid=far"
+.PD
+The \fB\-mpid=\fR option causes the assembler to generate the
+\&\f(CW\*(C`Tag_ABI_PID\*(C'\fR attribute with a value indicating the form of data
+addressing used by the code.  \fB\-mpid=no\fR, the default,
+indicates position-dependent data addressing, \fB\-mpid=near\fR
+indicates position-independent addressing with \s-1GOT\s0 accesses using near
+\&\s-1DP\s0 addressing, and \fB\-mpid=far\fR indicates position-independent
+addressing with \s-1GOT\s0 accesses using far \s-1DP\s0 addressing.  The linker will
+emit a warning if objects built with different settings of this option
+are linked together.
+.IP "\fB\-mpic\fR" 4
+.IX Item "-mpic"
+.PD 0
+.IP "\fB\-mno\-pic\fR" 4
+.IX Item "-mno-pic"
+.PD
+The \fB\-mpic\fR option causes the assembler to generate the
+\&\f(CW\*(C`Tag_ABI_PIC\*(C'\fR attribute with a value of 1, indicating that the
+code is using position-independent code addressing,  The
+\&\f(CW\*(C`\-mno\-pic\*(C'\fR option, the default, causes the tag to have a value of
+0, indicating position-dependent code addressing.  The linker will
+emit a warning if objects of different type (position-dependent and
+position-independent) are linked together.
+.IP "\fB\-mbig\-endian\fR" 4
+.IX Item "-mbig-endian"
+.PD 0
+.IP "\fB\-mlittle\-endian\fR" 4
+.IX Item "-mlittle-endian"
+.PD
+Generate code for the specified endianness.  The default is
+little-endian.
+.PP
+The following options are available when as is configured for a TILE-Gx
+processor.
+.IP "\fB\-m32 | \-m64\fR" 4
+.IX Item "-m32 | -m64"
+Select the word size, either 32 bits or 64 bits.
+.IP "\fB\-EB | \-EL\fR" 4
+.IX Item "-EB | -EL"
+Select the endianness, either big-endian (\-EB) or little-endian (\-EL).
+.PP
+The following option is available when as is configured for a Visium
+processor.
+.IP "\fB\-mtune=\fR\fIarch\fR" 4
+.IX Item "-mtune=arch"
+This option specifies the target architecture.  If an attempt is made to
+assemble an instruction that will not execute on the target architecture,
+the assembler will issue an error message.
+.Sp
+The following names are recognized:
+\&\f(CW\*(C`mcm24\*(C'\fR
+\&\f(CW\*(C`mcm\*(C'\fR
+\&\f(CW\*(C`gr5\*(C'\fR
+\&\f(CW\*(C`gr6\*(C'\fR
+.PP
+The following options are available when as is configured for an
+Xtensa processor.
+.IP "\fB\-\-text\-section\-literals | \-\-no\-text\-section\-literals\fR" 4
+.IX Item "--text-section-literals | --no-text-section-literals"
+Control the treatment of literal pools.  The default is
+\&\fB\-\-no\-text\-section\-literals\fR, which places literals in
+separate sections in the output file.  This allows the literal pool to be
+placed in a data \s-1RAM/ROM.\s0  With \fB\-\-text\-section\-literals\fR, the
+literals are interspersed in the text section in order to keep them as
+close as possible to their references.  This may be necessary for large
+assembly files, where the literals would otherwise be out of range of the
+\&\f(CW\*(C`L32R\*(C'\fR instructions in the text section.  Literals are grouped into
+pools following \f(CW\*(C`.literal_position\*(C'\fR directives or preceding
+\&\f(CW\*(C`ENTRY\*(C'\fR instructions.  These options only affect literals referenced
+via PC-relative \f(CW\*(C`L32R\*(C'\fR instructions; literals for absolute mode
+\&\f(CW\*(C`L32R\*(C'\fR instructions are handled separately.
+.IP "\fB\-\-auto\-litpools | \-\-no\-auto\-litpools\fR" 4
+.IX Item "--auto-litpools | --no-auto-litpools"
+Control the treatment of literal pools.  The default is
+\&\fB\-\-no\-auto\-litpools\fR, which in the absence of
+\&\fB\-\-text\-section\-literals\fR places literals in separate sections
+in the output file.  This allows the literal pool to be placed in a data
+\&\s-1RAM/ROM.\s0  With \fB\-\-auto\-litpools\fR, the literals are interspersed
+in the text section in order to keep them as close as possible to their
+references, explicit \f(CW\*(C`.literal_position\*(C'\fR directives are not
+required.  This may be necessary for very large functions, where single
+literal pool at the beginning of the function may not be reachable by
+\&\f(CW\*(C`L32R\*(C'\fR instructions at the end.  These options only affect
+literals referenced via PC-relative \f(CW\*(C`L32R\*(C'\fR instructions; literals
+for absolute mode \f(CW\*(C`L32R\*(C'\fR instructions are handled separately.
+When used together with \fB\-\-text\-section\-literals\fR,
+\&\fB\-\-auto\-litpools\fR takes precedence.
+.IP "\fB\-\-absolute\-literals | \-\-no\-absolute\-literals\fR" 4
+.IX Item "--absolute-literals | --no-absolute-literals"
+Indicate to the assembler whether \f(CW\*(C`L32R\*(C'\fR instructions use absolute
+or PC-relative addressing.  If the processor includes the absolute
+addressing option, the default is to use absolute \f(CW\*(C`L32R\*(C'\fR
+relocations.  Otherwise, only the PC-relative \f(CW\*(C`L32R\*(C'\fR relocations
+can be used.
+.IP "\fB\-\-target\-align | \-\-no\-target\-align\fR" 4
+.IX Item "--target-align | --no-target-align"
+Enable or disable automatic alignment to reduce branch penalties at some
+expense in code size.    This optimization is enabled by default.  Note
+that the assembler will always align instructions like \f(CW\*(C`LOOP\*(C'\fR that
+have fixed alignment requirements.
+.IP "\fB\-\-longcalls | \-\-no\-longcalls\fR" 4
+.IX Item "--longcalls | --no-longcalls"
+Enable or disable transformation of call instructions to allow calls
+across a greater range of addresses.    This option should be used when call
+targets can potentially be out of range.  It may degrade both code size
+and performance, but the linker can generally optimize away the
+unnecessary overhead when a call ends up within range.  The default is
+\&\fB\-\-no\-longcalls\fR.
+.IP "\fB\-\-transform | \-\-no\-transform\fR" 4
+.IX Item "--transform | --no-transform"
+Enable or disable all assembler transformations of Xtensa instructions,
+including both relaxation and optimization.  The default is
+\&\fB\-\-transform\fR; \fB\-\-no\-transform\fR should only be used in the
+rare cases when the instructions must be exactly as specified in the
+assembly source.  Using \fB\-\-no\-transform\fR causes out of range
+instruction operands to be errors.
+.IP "\fB\-\-rename\-section\fR \fIoldname\fR\fB=\fR\fInewname\fR" 4
+.IX Item "--rename-section oldname=newname"
+Rename the \fIoldname\fR section to \fInewname\fR.  This option can be used
+multiple times to rename multiple sections.
+.IP "\fB\-\-trampolines | \-\-no\-trampolines\fR" 4
+.IX Item "--trampolines | --no-trampolines"
+Enable or disable transformation of jump instructions to allow jumps
+across a greater range of addresses.    This option should be used when jump targets can
+potentially be out of range.  In the absence of such jumps this option
+does not affect code size or performance.  The default is
+\&\fB\-\-trampolines\fR.
+.PP
+The following options are available when as is configured for
+a Z80 family processor.
+.IP "\fB\-z80\fR" 4
+.IX Item "-z80"
+Assemble for Z80 processor.
+.IP "\fB\-r800\fR" 4
+.IX Item "-r800"
+Assemble for R800 processor.
+.IP "\fB\-ignore\-undocumented\-instructions\fR" 4
+.IX Item "-ignore-undocumented-instructions"
+.PD 0
+.IP "\fB\-Wnud\fR" 4
+.IX Item "-Wnud"
+.PD
+Assemble undocumented Z80 instructions that also work on R800 without warning.
+.IP "\fB\-ignore\-unportable\-instructions\fR" 4
+.IX Item "-ignore-unportable-instructions"
+.PD 0
+.IP "\fB\-Wnup\fR" 4
+.IX Item "-Wnup"
+.PD
+Assemble all undocumented Z80 instructions without warning.
+.IP "\fB\-warn\-undocumented\-instructions\fR" 4
+.IX Item "-warn-undocumented-instructions"
+.PD 0
+.IP "\fB\-Wud\fR" 4
+.IX Item "-Wud"
+.PD
+Issue a warning for undocumented Z80 instructions that also work on R800.
+.IP "\fB\-warn\-unportable\-instructions\fR" 4
+.IX Item "-warn-unportable-instructions"
+.PD 0
+.IP "\fB\-Wup\fR" 4
+.IX Item "-Wup"
+.PD
+Issue a warning for undocumented Z80 instructions that do not work on R800.
+.IP "\fB\-forbid\-undocumented\-instructions\fR" 4
+.IX Item "-forbid-undocumented-instructions"
+.PD 0
+.IP "\fB\-Fud\fR" 4
+.IX Item "-Fud"
+.PD
+Treat all undocumented instructions as errors.
+.IP "\fB\-forbid\-unportable\-instructions\fR" 4
+.IX Item "-forbid-unportable-instructions"
+.PD 0
+.IP "\fB\-Fup\fR" 4
+.IX Item "-Fup"
+.PD
+Treat undocumented Z80 instructions that do not work on R800 as errors.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIgcc\fR\|(1), \fIld\fR\|(1), and the Info entries for \fIbinutils\fR and \fIld\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man1/aarch64-elf-c++filt.1 b/share/man/man1/aarch64-elf-c++filt.1
new file mode 100644
index 0000000..d27bcf7
--- /dev/null
+++ b/share/man/man1/aarch64-elf-c++filt.1
@@ -0,0 +1,372 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "C++FILT 1"
+.TH C++FILT 1 "2019-05-21" "binutils-2.32" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+c++filt \- Demangle C++ and Java symbols.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+c++filt [\fB\-_\fR|\fB\-\-strip\-underscore\fR]
+        [\fB\-n\fR|\fB\-\-no\-strip\-underscore\fR]
+        [\fB\-p\fR|\fB\-\-no\-params\fR]
+        [\fB\-t\fR|\fB\-\-types\fR]
+        [\fB\-i\fR|\fB\-\-no\-verbose\fR]
+        [\fB\-r\fR|\fB\-\-no\-recurse\-limit\fR]
+        [\fB\-R\fR|\fB\-\-recurse\-limit\fR]
+        [\fB\-s\fR \fIformat\fR|\fB\-\-format=\fR\fIformat\fR]
+        [\fB\-\-help\fR]  [\fB\-\-version\fR]  [\fIsymbol\fR...]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The \*(C+ and Java languages provide function overloading, which means
+that you can write many functions with the same name, providing that
+each function takes parameters of different types.  In order to be
+able to distinguish these similarly named functions \*(C+ and Java
+encode them into a low-level assembler name which uniquely identifies
+each different version.  This process is known as \fImangling\fR. The
+\&\fBc++filt\fR
+[1]
+program does the inverse mapping: it decodes (\fIdemangles\fR) low-level
+names into user-level names so that they can be read.
+.PP
+Every alphanumeric word (consisting of letters, digits, underscores,
+dollars, or periods) seen in the input is a potential mangled name.
+If the name decodes into a \*(C+ name, the \*(C+ name replaces the
+low-level name in the output, otherwise the original word is output.
+In this way you can pass an entire assembler source file, containing
+mangled names, through \fBc++filt\fR and see the same source file
+containing demangled names.
+.PP
+You can also use \fBc++filt\fR to decipher individual symbols by
+passing them on the command line:
+.PP
+.Vb 1
+\&        c++filt <symbol>
+.Ve
+.PP
+If no \fIsymbol\fR arguments are given, \fBc++filt\fR reads symbol
+names from the standard input instead.  All the results are printed on
+the standard output.  The difference between reading names from the
+command line versus reading names from the standard input is that
+command-line arguments are expected to be just mangled names and no
+checking is performed to separate them from surrounding text.  Thus
+for example:
+.PP
+.Vb 1
+\&        c++filt \-n _Z1fv
+.Ve
+.PP
+will work and demangle the name to \*(L"f()\*(R" whereas:
+.PP
+.Vb 1
+\&        c++filt \-n _Z1fv,
+.Ve
+.PP
+will not work.  (Note the extra comma at the end of the mangled
+name which makes it invalid).  This command however will work:
+.PP
+.Vb 1
+\&        echo _Z1fv, | c++filt \-n
+.Ve
+.PP
+and will display \*(L"f(),\*(R", i.e., the demangled name followed by a
+trailing comma.  This behaviour is because when the names are read
+from the standard input it is expected that they might be part of an
+assembler source file where there might be extra, extraneous
+characters trailing after a mangled name.  For example:
+.PP
+.Vb 1
+\&            .type   _Z1fv, @function
+.Ve
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-_\fR" 4
+.IX Item "-_"
+.PD 0
+.IP "\fB\-\-strip\-underscore\fR" 4
+.IX Item "--strip-underscore"
+.PD
+On some systems, both the C and \*(C+ compilers put an underscore in front
+of every name.  For example, the C name \f(CW\*(C`foo\*(C'\fR gets the low-level
+name \f(CW\*(C`_foo\*(C'\fR.  This option removes the initial underscore.  Whether
+\&\fBc++filt\fR removes the underscore by default is target dependent.
+.IP "\fB\-n\fR" 4
+.IX Item "-n"
+.PD 0
+.IP "\fB\-\-no\-strip\-underscore\fR" 4
+.IX Item "--no-strip-underscore"
+.PD
+Do not remove the initial underscore.
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+.PD 0
+.IP "\fB\-\-no\-params\fR" 4
+.IX Item "--no-params"
+.PD
+When demangling the name of a function, do not display the types of
+the function's parameters.
+.IP "\fB\-t\fR" 4
+.IX Item "-t"
+.PD 0
+.IP "\fB\-\-types\fR" 4
+.IX Item "--types"
+.PD
+Attempt to demangle types as well as function names.  This is disabled
+by default since mangled types are normally only used internally in
+the compiler, and they can be confused with non-mangled names.  For example,
+a function called \*(L"a\*(R" treated as a mangled type name would be
+demangled to \*(L"signed char\*(R".
+.IP "\fB\-i\fR" 4
+.IX Item "-i"
+.PD 0
+.IP "\fB\-\-no\-verbose\fR" 4
+.IX Item "--no-verbose"
+.PD
+Do not include implementation details (if any) in the demangled
+output.
+.IP "\fB\-r\fR" 4
+.IX Item "-r"
+.PD 0
+.IP "\fB\-R\fR" 4
+.IX Item "-R"
+.IP "\fB\-\-recurse\-limit\fR" 4
+.IX Item "--recurse-limit"
+.IP "\fB\-\-no\-recurse\-limit\fR" 4
+.IX Item "--no-recurse-limit"
+.IP "\fB\-\-recursion\-limit\fR" 4
+.IX Item "--recursion-limit"
+.IP "\fB\-\-no\-recursion\-limit\fR" 4
+.IX Item "--no-recursion-limit"
+.PD
+Enables or disables a limit on the amount of recursion performed
+whilst demangling strings.  Since the name mangling formats allow for
+an inifinite level of recursion it is possible to create strings whose
+decoding will exhaust the amount of stack space available on the host
+machine, triggering a memory fault.  The limit tries to prevent this
+from happening by restricting recursion to 2048 levels of nesting.
+.Sp
+The default is for this limit to be enabled, but disabling it may be
+necessary in order to demangle truly complicated names.  Note however
+that if the recursion limit is disabled then stack exhaustion is
+possible and any bug reports about such an event will be rejected.
+.Sp
+The \fB\-r\fR option is a synonym for the
+\&\fB\-\-no\-recurse\-limit\fR option.  The \fB\-R\fR option is a
+synonym for the \fB\-\-recurse\-limit\fR option.
+.IP "\fB\-s\fR \fIformat\fR" 4
+.IX Item "-s format"
+.PD 0
+.IP "\fB\-\-format=\fR\fIformat\fR" 4
+.IX Item "--format=format"
+.PD
+\&\fBc++filt\fR can decode various methods of mangling, used by
+different compilers.  The argument to this option selects which
+method it uses:
+.RS 4
+.ie n .IP """auto""" 4
+.el .IP "\f(CWauto\fR" 4
+.IX Item "auto"
+Automatic selection based on executable (the default method)
+.ie n .IP """gnu""" 4
+.el .IP "\f(CWgnu\fR" 4
+.IX Item "gnu"
+the one used by the \s-1GNU \*(C+\s0 compiler (g++)
+.ie n .IP """lucid""" 4
+.el .IP "\f(CWlucid\fR" 4
+.IX Item "lucid"
+the one used by the Lucid compiler (lcc)
+.ie n .IP """arm""" 4
+.el .IP "\f(CWarm\fR" 4
+.IX Item "arm"
+the one specified by the \*(C+ Annotated Reference Manual
+.ie n .IP """hp""" 4
+.el .IP "\f(CWhp\fR" 4
+.IX Item "hp"
+the one used by the \s-1HP\s0 compiler (aCC)
+.ie n .IP """edg""" 4
+.el .IP "\f(CWedg\fR" 4
+.IX Item "edg"
+the one used by the \s-1EDG\s0 compiler
+.ie n .IP """gnu\-v3""" 4
+.el .IP "\f(CWgnu\-v3\fR" 4
+.IX Item "gnu-v3"
+the one used by the \s-1GNU \*(C+\s0 compiler (g++) with the V3 \s-1ABI.\s0
+.ie n .IP """java""" 4
+.el .IP "\f(CWjava\fR" 4
+.IX Item "java"
+the one used by the \s-1GNU\s0 Java compiler (gcj)
+.ie n .IP """gnat""" 4
+.el .IP "\f(CWgnat\fR" 4
+.IX Item "gnat"
+the one used by the \s-1GNU\s0 Ada compiler (\s-1GNAT\s0).
+.RE
+.RS 4
+.RE
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of the options to \fBc++filt\fR and exit.
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+Print the version number of \fBc++filt\fR and exit.
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.SH "FOOTNOTES"
+.IX Header "FOOTNOTES"
+.IP "1." 4
+MS-DOS does not allow \f(CW\*(C`+\*(C'\fR characters in file names, so on
+MS-DOS this program is named \fB\s-1CXXFILT\s0\fR.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+the Info entries for \fIbinutils\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man1/aarch64-elf-cpp.1 b/share/man/man1/aarch64-elf-cpp.1
new file mode 100644
index 0000000..f76501e
--- /dev/null
+++ b/share/man/man1/aarch64-elf-cpp.1
@@ -0,0 +1,941 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "CPP 1"
+.TH CPP 1 "2019-05-03" "gcc-9.1.1" "GNU"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+cpp \- The C Preprocessor
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+cpp [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
+    [\fB\-I\fR\fIdir\fR...] [\fB\-iquote\fR\fIdir\fR...]
+    [\fB\-M\fR|\fB\-MM\fR] [\fB\-MG\fR] [\fB\-MF\fR \fIfilename\fR]
+    [\fB\-MP\fR] [\fB\-MQ\fR \fItarget\fR...]
+    [\fB\-MT\fR \fItarget\fR...]
+    \fIinfile\fR [[\fB\-o\fR] \fIoutfile\fR]
+.PP
+Only the most useful options are given above; see below for a more
+complete list of preprocessor-specific options.  
+In addition, \fBcpp\fR accepts most \fBgcc\fR driver options, which
+are not listed here.  Refer to the \s-1GCC\s0 documentation for details.
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The C preprocessor, often known as \fIcpp\fR, is a \fImacro processor\fR
+that is used automatically by the C compiler to transform your program
+before compilation.  It is called a macro processor because it allows
+you to define \fImacros\fR, which are brief abbreviations for longer
+constructs.
+.PP
+The C preprocessor is intended to be used only with C, \*(C+, and
+Objective-C source code.  In the past, it has been abused as a general
+text processor.  It will choke on input which does not obey C's lexical
+rules.  For example, apostrophes will be interpreted as the beginning of
+character constants, and cause errors.  Also, you cannot rely on it
+preserving characteristics of the input which are not significant to
+C\-family languages.  If a Makefile is preprocessed, all the hard tabs
+will be removed, and the Makefile will not work.
+.PP
+Having said that, you can often get away with using cpp on things which
+are not C.  Other Algol-ish programming languages are often safe
+(Ada, etc.) So is assembly, with caution.  \fB\-traditional\-cpp\fR
+mode preserves more white space, and is otherwise more permissive.  Many
+of the problems can be avoided by writing C or \*(C+ style comments
+instead of native language comments, and keeping macros simple.
+.PP
+Wherever possible, you should use a preprocessor geared to the language
+you are writing in.  Modern versions of the \s-1GNU\s0 assembler have macro
+facilities.  Most high level programming languages have their own
+conditional compilation and inclusion mechanism.  If all else fails,
+try a true general text processor, such as \s-1GNU M4.\s0
+.PP
+C preprocessors vary in some details.  This manual discusses the \s-1GNU C\s0
+preprocessor, which provides a small superset of the features of \s-1ISO\s0
+Standard C.  In its default mode, the \s-1GNU C\s0 preprocessor does not do a
+few things required by the standard.  These are features which are
+rarely, if ever, used, and may cause surprising changes to the meaning
+of a program which does not expect them.  To get strict \s-1ISO\s0 Standard C,
+you should use the \fB\-std=c90\fR, \fB\-std=c99\fR,
+\&\fB\-std=c11\fR or \fB\-std=c17\fR options, depending
+on which version of the standard you want.  To get all the mandatory
+diagnostics, you must also use \fB\-pedantic\fR.
+.PP
+This manual describes the behavior of the \s-1ISO\s0 preprocessor.  To
+minimize gratuitous differences, where the \s-1ISO\s0 preprocessor's
+behavior does not conflict with traditional semantics, the
+traditional preprocessor should behave the same way.  The various
+differences that do exist are detailed in the section \fBTraditional
+Mode\fR.
+.PP
+For clarity, unless noted otherwise, references to \fB\s-1CPP\s0\fR in this
+manual refer to \s-1GNU CPP.\s0
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+The \fBcpp\fR command expects two file names as arguments, \fIinfile\fR and
+\&\fIoutfile\fR.  The preprocessor reads \fIinfile\fR together with any
+other files it specifies with \fB#include\fR.  All the output generated
+by the combined input files is written in \fIoutfile\fR.
+.PP
+Either \fIinfile\fR or \fIoutfile\fR may be \fB\-\fR, which as
+\&\fIinfile\fR means to read from standard input and as \fIoutfile\fR
+means to write to standard output.  If either file is omitted, it
+means the same as if \fB\-\fR had been specified for that file.
+You can also use the \fB\-o\fR \fIoutfile\fR option to specify the 
+output file.
+.PP
+Unless otherwise noted, or the option ends in \fB=\fR, all options
+which take an argument may have that argument appear either immediately
+after the option, or with a space between option and argument:
+\&\fB\-Ifoo\fR and \fB\-I foo\fR have the same effect.
+.PP
+Many options have multi-letter names; therefore multiple single-letter
+options may \fInot\fR be grouped: \fB\-dM\fR is very different from
+\&\fB\-d\ \-M\fR.
+.IP "\fB\-D\fR \fIname\fR" 4
+.IX Item "-D name"
+Predefine \fIname\fR as a macro, with definition \f(CW1\fR.
+.IP "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4
+.IX Item "-D name=definition"
+The contents of \fIdefinition\fR are tokenized and processed as if
+they appeared during translation phase three in a \fB#define\fR
+directive.  In particular, the definition is truncated by
+embedded newline characters.
+.Sp
+If you are invoking the preprocessor from a shell or shell-like
+program you may need to use the shell's quoting syntax to protect
+characters such as spaces that have a meaning in the shell syntax.
+.Sp
+If you wish to define a function-like macro on the command line, write
+its argument list with surrounding parentheses before the equals sign
+(if any).  Parentheses are meaningful to most shells, so you should
+quote the option.  With \fBsh\fR and \fBcsh\fR,
+\&\fB\-D'\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB'\fR works.
+.Sp
+\&\fB\-D\fR and \fB\-U\fR options are processed in the order they
+are given on the command line.  All \fB\-imacros\fR \fIfile\fR and
+\&\fB\-include\fR \fIfile\fR options are processed after all
+\&\fB\-D\fR and \fB\-U\fR options.
+.IP "\fB\-U\fR \fIname\fR" 4
+.IX Item "-U name"
+Cancel any previous definition of \fIname\fR, either built in or
+provided with a \fB\-D\fR option.
+.IP "\fB\-include\fR \fIfile\fR" 4
+.IX Item "-include file"
+Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first
+line of the primary source file.  However, the first directory searched
+for \fIfile\fR is the preprocessor's working directory \fIinstead of\fR
+the directory containing the main source file.  If not found there, it
+is searched for in the remainder of the \f(CW\*(C`#include "..."\*(C'\fR search
+chain as normal.
+.Sp
+If multiple \fB\-include\fR options are given, the files are included
+in the order they appear on the command line.
+.IP "\fB\-imacros\fR \fIfile\fR" 4
+.IX Item "-imacros file"
+Exactly like \fB\-include\fR, except that any output produced by
+scanning \fIfile\fR is thrown away.  Macros it defines remain defined.
+This allows you to acquire all the macros from a header without also
+processing its declarations.
+.Sp
+All files specified by \fB\-imacros\fR are processed before all files
+specified by \fB\-include\fR.
+.IP "\fB\-undef\fR" 4
+.IX Item "-undef"
+Do not predefine any system-specific or GCC-specific macros.  The
+standard predefined macros remain defined.
+.IP "\fB\-pthread\fR" 4
+.IX Item "-pthread"
+Define additional macros required for using the \s-1POSIX\s0 threads library.
+You should use this option consistently for both compilation and linking.
+This option is supported on GNU/Linux targets, most other Unix derivatives,
+and also on x86 Cygwin and MinGW targets.
+.IP "\fB\-M\fR" 4
+.IX Item "-M"
+Instead of outputting the result of preprocessing, output a rule
+suitable for \fBmake\fR describing the dependencies of the main
+source file.  The preprocessor outputs one \fBmake\fR rule containing
+the object file name for that source file, a colon, and the names of all
+the included files, including those coming from \fB\-include\fR or
+\&\fB\-imacros\fR command-line options.
+.Sp
+Unless specified explicitly (with \fB\-MT\fR or \fB\-MQ\fR), the
+object file name consists of the name of the source file with any
+suffix replaced with object file suffix and with any leading directory
+parts removed.  If there are many included files then the rule is
+split into several lines using \fB\e\fR\-newline.  The rule has no
+commands.
+.Sp
+This option does not suppress the preprocessor's debug output, such as
+\&\fB\-dM\fR.  To avoid mixing such debug output with the dependency
+rules you should explicitly specify the dependency output file with
+\&\fB\-MF\fR, or use an environment variable like
+\&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR.  Debug output
+is still sent to the regular output stream as normal.
+.Sp
+Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses
+warnings with an implicit \fB\-w\fR.
+.IP "\fB\-MM\fR" 4
+.IX Item "-MM"
+Like \fB\-M\fR but do not mention header files that are found in
+system header directories, nor header files that are included,
+directly or indirectly, from such a header.
+.Sp
+This implies that the choice of angle brackets or double quotes in an
+\&\fB#include\fR directive does not in itself determine whether that
+header appears in \fB\-MM\fR dependency output.
+.IP "\fB\-MF\fR \fIfile\fR" 4
+.IX Item "-MF file"
+When used with \fB\-M\fR or \fB\-MM\fR, specifies a
+file to write the dependencies to.  If no \fB\-MF\fR switch is given
+the preprocessor sends the rules to the same place it would send
+preprocessed output.
+.Sp
+When used with the driver options \fB\-MD\fR or \fB\-MMD\fR,
+\&\fB\-MF\fR overrides the default dependency output file.
+.Sp
+If \fIfile\fR is \fI\-\fR, then the dependencies are written to \fIstdout\fR.
+.IP "\fB\-MG\fR" 4
+.IX Item "-MG"
+In conjunction with an option such as \fB\-M\fR requesting
+dependency generation, \fB\-MG\fR assumes missing header files are
+generated files and adds them to the dependency list without raising
+an error.  The dependency filename is taken directly from the
+\&\f(CW\*(C`#include\*(C'\fR directive without prepending any path.  \fB\-MG\fR
+also suppresses preprocessed output, as a missing header file renders
+this useless.
+.Sp
+This feature is used in automatic updating of makefiles.
+.IP "\fB\-MP\fR" 4
+.IX Item "-MP"
+This option instructs \s-1CPP\s0 to add a phony target for each dependency
+other than the main file, causing each to depend on nothing.  These
+dummy rules work around errors \fBmake\fR gives if you remove header
+files without updating the \fIMakefile\fR to match.
+.Sp
+This is typical output:
+.Sp
+.Vb 1
+\&        test.o: test.c test.h
+\&        
+\&        test.h:
+.Ve
+.IP "\fB\-MT\fR \fItarget\fR" 4
+.IX Item "-MT target"
+Change the target of the rule emitted by dependency generation.  By
+default \s-1CPP\s0 takes the name of the main input file, deletes any
+directory components and any file suffix such as \fB.c\fR, and
+appends the platform's usual object suffix.  The result is the target.
+.Sp
+An \fB\-MT\fR option sets the target to be exactly the string you
+specify.  If you want multiple targets, you can specify them as a single
+argument to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
+.Sp
+For example, \fB\-MT\ '$(objpfx)foo.o'\fR might give
+.Sp
+.Vb 1
+\&        $(objpfx)foo.o: foo.c
+.Ve
+.IP "\fB\-MQ\fR \fItarget\fR" 4
+.IX Item "-MQ target"
+Same as \fB\-MT\fR, but it quotes any characters which are special to
+Make.  \fB\-MQ\ '$(objpfx)foo.o'\fR gives
+.Sp
+.Vb 1
+\&        $$(objpfx)foo.o: foo.c
+.Ve
+.Sp
+The default target is automatically quoted, as if it were given with
+\&\fB\-MQ\fR.
+.IP "\fB\-MD\fR" 4
+.IX Item "-MD"
+\&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that
+\&\fB\-E\fR is not implied.  The driver determines \fIfile\fR based on
+whether an \fB\-o\fR option is given.  If it is, the driver uses its
+argument but with a suffix of \fI.d\fR, otherwise it takes the name
+of the input file, removes any directory components and suffix, and
+applies a \fI.d\fR suffix.
+.Sp
+If \fB\-MD\fR is used in conjunction with \fB\-E\fR, any
+\&\fB\-o\fR switch is understood to specify the dependency output file, but if used without \fB\-E\fR, each \fB\-o\fR
+is understood to specify a target object file.
+.Sp
+Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate
+a dependency output file as a side effect of the compilation process.
+.IP "\fB\-MMD\fR" 4
+.IX Item "-MMD"
+Like \fB\-MD\fR except mention only user header files, not system
+header files.
+.IP "\fB\-fpreprocessed\fR" 4
+.IX Item "-fpreprocessed"
+Indicate to the preprocessor that the input file has already been
+preprocessed.  This suppresses things like macro expansion, trigraph
+conversion, escaped newline splicing, and processing of most directives.
+The preprocessor still recognizes and removes comments, so that you can
+pass a file preprocessed with \fB\-C\fR to the compiler without
+problems.  In this mode the integrated preprocessor is little more than
+a tokenizer for the front ends.
+.Sp
+\&\fB\-fpreprocessed\fR is implicit if the input file has one of the
+extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR.  These are the
+extensions that \s-1GCC\s0 uses for preprocessed files created by
+\&\fB\-save\-temps\fR.
+.IP "\fB\-fdirectives\-only\fR" 4
+.IX Item "-fdirectives-only"
+When preprocessing, handle directives, but do not expand macros.
+.Sp
+The option's behavior depends on the \fB\-E\fR and \fB\-fpreprocessed\fR
+options.
+.Sp
+With \fB\-E\fR, preprocessing is limited to the handling of directives
+such as \f(CW\*(C`#define\*(C'\fR, \f(CW\*(C`#ifdef\*(C'\fR, and \f(CW\*(C`#error\*(C'\fR.  Other
+preprocessor operations, such as macro expansion and trigraph
+conversion are not performed.  In addition, the \fB\-dD\fR option is
+implicitly enabled.
+.Sp
+With \fB\-fpreprocessed\fR, predefinition of command line and most
+builtin macros is disabled.  Macros such as \f(CW\*(C`_\|_LINE_\|_\*(C'\fR, which are
+contextually dependent, are handled normally.  This enables compilation of
+files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
+.Sp
+With both \fB\-E\fR and \fB\-fpreprocessed\fR, the rules for
+\&\fB\-fpreprocessed\fR take precedence.  This enables full preprocessing of
+files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
+.IP "\fB\-fdollars\-in\-identifiers\fR" 4
+.IX Item "-fdollars-in-identifiers"
+Accept \fB$\fR in identifiers.
+.IP "\fB\-fextended\-identifiers\fR" 4
+.IX Item "-fextended-identifiers"
+Accept universal character names in identifiers.  This option is
+enabled by default for C99 (and later C standard versions) and \*(C+.
+.IP "\fB\-fno\-canonical\-system\-headers\fR" 4
+.IX Item "-fno-canonical-system-headers"
+When preprocessing, do not shorten system header paths with canonicalization.
+.IP "\fB\-ftabstop=\fR\fIwidth\fR" 4
+.IX Item "-ftabstop=width"
+Set the distance between tab stops.  This helps the preprocessor report
+correct column numbers in warnings or errors, even if tabs appear on the
+line.  If the value is less than 1 or greater than 100, the option is
+ignored.  The default is 8.
+.IP "\fB\-ftrack\-macro\-expansion\fR[\fB=\fR\fIlevel\fR]" 4
+.IX Item "-ftrack-macro-expansion[=level]"
+Track locations of tokens across macro expansions. This allows the
+compiler to emit diagnostic about the current macro expansion stack
+when a compilation error occurs in a macro expansion. Using this
+option makes the preprocessor and the compiler consume more
+memory. The \fIlevel\fR parameter can be used to choose the level of
+precision of token location tracking thus decreasing the memory
+consumption if necessary. Value \fB0\fR of \fIlevel\fR de-activates
+this option. Value \fB1\fR tracks tokens locations in a
+degraded mode for the sake of minimal memory overhead. In this mode
+all tokens resulting from the expansion of an argument of a
+function-like macro have the same location. Value \fB2\fR tracks
+tokens locations completely. This value is the most memory hungry.
+When this option is given no argument, the default parameter value is
+\&\fB2\fR.
+.Sp
+Note that \f(CW\*(C`\-ftrack\-macro\-expansion=2\*(C'\fR is activated by default.
+.IP "\fB\-fmacro\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
+.IX Item "-fmacro-prefix-map=old=new"
+When preprocessing files residing in directory \fI\fIold\fI\fR,
+expand the \f(CW\*(C`_\|_FILE_\|_\*(C'\fR and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR macros as if the
+files resided in directory \fI\fInew\fI\fR instead.  This can be used
+to change an absolute path to a relative path by using \fI.\fR for
+\&\fInew\fR which can result in more reproducible builds that are
+location independent.  This option also affects
+\&\f(CW\*(C`_\|_builtin_FILE()\*(C'\fR during compilation.  See also
+\&\fB\-ffile\-prefix\-map\fR.
+.IP "\fB\-fexec\-charset=\fR\fIcharset\fR" 4
+.IX Item "-fexec-charset=charset"
+Set the execution character set, used for string and character
+constants.  The default is \s-1UTF\-8.\s0  \fIcharset\fR can be any encoding
+supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
+.IP "\fB\-fwide\-exec\-charset=\fR\fIcharset\fR" 4
+.IX Item "-fwide-exec-charset=charset"
+Set the wide execution character set, used for wide string and
+character constants.  The default is \s-1UTF\-32\s0 or \s-1UTF\-16,\s0 whichever
+corresponds to the width of \f(CW\*(C`wchar_t\*(C'\fR.  As with
+\&\fB\-fexec\-charset\fR, \fIcharset\fR can be any encoding supported
+by the system's \f(CW\*(C`iconv\*(C'\fR library routine; however, you will have
+problems with encodings that do not fit exactly in \f(CW\*(C`wchar_t\*(C'\fR.
+.IP "\fB\-finput\-charset=\fR\fIcharset\fR" 4
+.IX Item "-finput-charset=charset"
+Set the input character set, used for translation from the character
+set of the input file to the source character set used by \s-1GCC.\s0  If the
+locale does not specify, or \s-1GCC\s0 cannot get this information from the
+locale, the default is \s-1UTF\-8.\s0  This can be overridden by either the locale
+or this command-line option.  Currently the command-line option takes
+precedence if there's a conflict.  \fIcharset\fR can be any encoding
+supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
+.IP "\fB\-fworking\-directory\fR" 4
+.IX Item "-fworking-directory"
+Enable generation of linemarkers in the preprocessor output that
+let the compiler know the current working directory at the time of
+preprocessing.  When this option is enabled, the preprocessor
+emits, after the initial linemarker, a second linemarker with the
+current working directory followed by two slashes.  \s-1GCC\s0 uses this
+directory, when it's present in the preprocessed input, as the
+directory emitted as the current working directory in some debugging
+information formats.  This option is implicitly enabled if debugging
+information is enabled, but this can be inhibited with the negated
+form \fB\-fno\-working\-directory\fR.  If the \fB\-P\fR flag is
+present in the command line, this option has no effect, since no
+\&\f(CW\*(C`#line\*(C'\fR directives are emitted whatsoever.
+.IP "\fB\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4
+.IX Item "-A predicate=answer"
+Make an assertion with the predicate \fIpredicate\fR and answer
+\&\fIanswer\fR.  This form is preferred to the older form \fB\-A\fR
+\&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, which is still supported, because
+it does not use shell special characters.
+.IP "\fB\-A \-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4
+.IX Item "-A -predicate=answer"
+Cancel an assertion with the predicate \fIpredicate\fR and answer
+\&\fIanswer\fR.
+.IP "\fB\-C\fR" 4
+.IX Item "-C"
+Do not discard comments.  All comments are passed through to the output
+file, except for comments in processed directives, which are deleted
+along with the directive.
+.Sp
+You should be prepared for side effects when using \fB\-C\fR; it
+causes the preprocessor to treat comments as tokens in their own right.
+For example, comments appearing at the start of what would be a
+directive line have the effect of turning that line into an ordinary
+source line, since the first token on the line is no longer a \fB#\fR.
+.IP "\fB\-CC\fR" 4
+.IX Item "-CC"
+Do not discard comments, including during macro expansion.  This is
+like \fB\-C\fR, except that comments contained within macros are
+also passed through to the output file where the macro is expanded.
+.Sp
+In addition to the side effects of the \fB\-C\fR option, the
+\&\fB\-CC\fR option causes all \*(C+\-style comments inside a macro
+to be converted to C\-style comments.  This is to prevent later use
+of that macro from inadvertently commenting out the remainder of
+the source line.
+.Sp
+The \fB\-CC\fR option is generally used to support lint comments.
+.IP "\fB\-P\fR" 4
+.IX Item "-P"
+Inhibit generation of linemarkers in the output from the preprocessor.
+This might be useful when running the preprocessor on something that is
+not C code, and will be sent to a program which might be confused by the
+linemarkers.
+.IP "\fB\-traditional\fR" 4
+.IX Item "-traditional"
+.PD 0
+.IP "\fB\-traditional\-cpp\fR" 4
+.IX Item "-traditional-cpp"
+.PD
+Try to imitate the behavior of pre-standard C preprocessors, as
+opposed to \s-1ISO C\s0 preprocessors.
+.Sp
+Note that \s-1GCC\s0 does not otherwise attempt to emulate a pre-standard 
+C compiler, and these options are only supported with the \fB\-E\fR 
+switch, or when invoking \s-1CPP\s0 explicitly.
+.IP "\fB\-trigraphs\fR" 4
+.IX Item "-trigraphs"
+Support \s-1ISO C\s0 trigraphs.
+These are three-character sequences, all starting with \fB??\fR, that
+are defined by \s-1ISO C\s0 to stand for single characters.  For example,
+\&\fB??/\fR stands for \fB\e\fR, so \fB'??/n'\fR is a character
+constant for a newline.
+.Sp
+By default, \s-1GCC\s0 ignores trigraphs, but in
+standard-conforming modes it converts them.  See the \fB\-std\fR and
+\&\fB\-ansi\fR options.
+.IP "\fB\-remap\fR" 4
+.IX Item "-remap"
+Enable special code to work around file systems which only permit very
+short file names, such as MS-DOS.
+.IP "\fB\-H\fR" 4
+.IX Item "-H"
+Print the name of each header file used, in addition to other normal
+activities.  Each name is indented to show how deep in the
+\&\fB#include\fR stack it is.  Precompiled header files are also
+printed, even if they are found to be invalid; an invalid precompiled
+header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
+.IP "\fB\-d\fR\fIletters\fR" 4
+.IX Item "-dletters"
+Says to make debugging dumps during compilation as specified by
+\&\fIletters\fR.  The flags documented here are those relevant to the
+preprocessor.  Other \fIletters\fR are interpreted
+by the compiler proper, or reserved for future versions of \s-1GCC,\s0 and so
+are silently ignored.  If you specify \fIletters\fR whose behavior
+conflicts, the result is undefined.
+.RS 4
+.IP "\fB\-dM\fR" 4
+.IX Item "-dM"
+Instead of the normal output, generate a list of \fB#define\fR
+directives for all the macros defined during the execution of the
+preprocessor, including predefined macros.  This gives you a way of
+finding out what is predefined in your version of the preprocessor.
+Assuming you have no file \fIfoo.h\fR, the command
+.Sp
+.Vb 1
+\&        touch foo.h; cpp \-dM foo.h
+.Ve
+.Sp
+shows all the predefined macros.
+.IP "\fB\-dD\fR" 4
+.IX Item "-dD"
+Like \fB\-dM\fR except in two respects: it does \fInot\fR include the
+predefined macros, and it outputs \fIboth\fR the \fB#define\fR
+directives and the result of preprocessing.  Both kinds of output go to
+the standard output file.
+.IP "\fB\-dN\fR" 4
+.IX Item "-dN"
+Like \fB\-dD\fR, but emit only the macro names, not their expansions.
+.IP "\fB\-dI\fR" 4
+.IX Item "-dI"
+Output \fB#include\fR directives in addition to the result of
+preprocessing.
+.IP "\fB\-dU\fR" 4
+.IX Item "-dU"
+Like \fB\-dD\fR except that only macros that are expanded, or whose
+definedness is tested in preprocessor directives, are output; the
+output is delayed until the use or test of the macro; and
+\&\fB#undef\fR directives are also output for macros tested but
+undefined at the time.
+.RE
+.RS 4
+.RE
+.IP "\fB\-fdebug\-cpp\fR" 4
+.IX Item "-fdebug-cpp"
+This option is only useful for debugging \s-1GCC.\s0  When used from \s-1CPP\s0 or with
+\&\fB\-E\fR, it dumps debugging information about location maps.  Every
+token in the output is preceded by the dump of the map its location
+belongs to.
+.Sp
+When used from \s-1GCC\s0 without \fB\-E\fR, this option has no effect.
+.IP "\fB\-I\fR \fIdir\fR" 4
+.IX Item "-I dir"
+.PD 0
+.IP "\fB\-iquote\fR \fIdir\fR" 4
+.IX Item "-iquote dir"
+.IP "\fB\-isystem\fR \fIdir\fR" 4
+.IX Item "-isystem dir"
+.IP "\fB\-idirafter\fR \fIdir\fR" 4
+.IX Item "-idirafter dir"
+.PD
+Add the directory \fIdir\fR to the list of directories to be searched
+for header files during preprocessing.
+.Sp
+If \fIdir\fR begins with \fB=\fR or \f(CW$SYSROOT\fR, then the \fB=\fR
+or \f(CW$SYSROOT\fR is replaced by the sysroot prefix; see
+\&\fB\-\-sysroot\fR and \fB\-isysroot\fR.
+.Sp
+Directories specified with \fB\-iquote\fR apply only to the quote 
+form of the directive, \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.
+Directories specified with \fB\-I\fR, \fB\-isystem\fR, 
+or \fB\-idirafter\fR apply to lookup for both the
+\&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR and
+\&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR directives.
+.Sp
+You can specify any number or combination of these options on the 
+command line to search for header files in several directories.  
+The lookup order is as follows:
+.RS 4
+.IP "1." 4
+.IX Item "1."
+For the quote form of the include directive, the directory of the current
+file is searched first.
+.IP "2." 4
+.IX Item "2."
+For the quote form of the include directive, the directories specified
+by \fB\-iquote\fR options are searched in left-to-right order,
+as they appear on the command line.
+.IP "3." 4
+.IX Item "3."
+Directories specified with \fB\-I\fR options are scanned in
+left-to-right order.
+.IP "4." 4
+.IX Item "4."
+Directories specified with \fB\-isystem\fR options are scanned in
+left-to-right order.
+.IP "5." 4
+.IX Item "5."
+Standard system directories are scanned.
+.IP "6." 4
+.IX Item "6."
+Directories specified with \fB\-idirafter\fR options are scanned in
+left-to-right order.
+.RE
+.RS 4
+.Sp
+You can use \fB\-I\fR to override a system header
+file, substituting your own version, since these directories are
+searched before the standard system header file directories.  
+However, you should
+not use this option to add directories that contain vendor-supplied
+system header files; use \fB\-isystem\fR for that.
+.Sp
+The \fB\-isystem\fR and \fB\-idirafter\fR options also mark the directory
+as a system directory, so that it gets the same special treatment that
+is applied to the standard system directories.
+.Sp
+If a standard system include directory, or a directory specified with
+\&\fB\-isystem\fR, is also specified with \fB\-I\fR, the \fB\-I\fR
+option is ignored.  The directory is still searched but as a
+system directory at its normal position in the system include chain.
+This is to ensure that \s-1GCC\s0's procedure to fix buggy system headers and
+the ordering for the \f(CW\*(C`#include_next\*(C'\fR directive are not inadvertently
+changed.
+If you really need to change the search order for system directories,
+use the \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
+.RE
+.IP "\fB\-I\-\fR" 4
+.IX Item "-I-"
+Split the include path.
+This option has been deprecated.  Please use \fB\-iquote\fR instead for
+\&\fB\-I\fR directories before the \fB\-I\-\fR and remove the \fB\-I\-\fR
+option.
+.Sp
+Any directories specified with \fB\-I\fR
+options before \fB\-I\-\fR are searched only for headers requested with
+\&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
+\&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR.  If additional directories are
+specified with \fB\-I\fR options after the \fB\-I\-\fR, those
+directories are searched for all \fB#include\fR directives.
+.Sp
+In addition, \fB\-I\-\fR inhibits the use of the directory of the current
+file directory as the first search directory for \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.  There is no way to override this effect of \fB\-I\-\fR.
+.IP "\fB\-iprefix\fR \fIprefix\fR" 4
+.IX Item "-iprefix prefix"
+Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
+options.  If the prefix represents a directory, you should include the
+final \fB/\fR.
+.IP "\fB\-iwithprefix\fR \fIdir\fR" 4
+.IX Item "-iwithprefix dir"
+.PD 0
+.IP "\fB\-iwithprefixbefore\fR \fIdir\fR" 4
+.IX Item "-iwithprefixbefore dir"
+.PD
+Append \fIdir\fR to the prefix specified previously with
+\&\fB\-iprefix\fR, and add the resulting directory to the include search
+path.  \fB\-iwithprefixbefore\fR puts it in the same place \fB\-I\fR
+would; \fB\-iwithprefix\fR puts it where \fB\-idirafter\fR would.
+.IP "\fB\-isysroot\fR \fIdir\fR" 4
+.IX Item "-isysroot dir"
+This option is like the \fB\-\-sysroot\fR option, but applies only to
+header files (except for Darwin targets, where it applies to both header
+files and libraries).  See the \fB\-\-sysroot\fR option for more
+information.
+.IP "\fB\-imultilib\fR \fIdir\fR" 4
+.IX Item "-imultilib dir"
+Use \fIdir\fR as a subdirectory of the directory containing
+target-specific \*(C+ headers.
+.IP "\fB\-nostdinc\fR" 4
+.IX Item "-nostdinc"
+Do not search the standard system directories for header files.
+Only the directories explicitly specified with \fB\-I\fR,
+\&\fB\-iquote\fR, \fB\-isystem\fR, and/or \fB\-idirafter\fR
+options (and the directory of the current file, if appropriate) 
+are searched.
+.IP "\fB\-nostdinc++\fR" 4
+.IX Item "-nostdinc++"
+Do not search for header files in the \*(C+\-specific standard directories,
+but do still search the other standard directories.  (This option is
+used when building the \*(C+ library.)
+.IP "\fB\-Wcomment\fR" 4
+.IX Item "-Wcomment"
+.PD 0
+.IP "\fB\-Wcomments\fR" 4
+.IX Item "-Wcomments"
+.PD
+Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
+comment, or whenever a backslash-newline appears in a \fB//\fR comment.
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wtrigraphs\fR" 4
+.IX Item "-Wtrigraphs"
+Warn if any trigraphs are encountered that might change the meaning of
+the program.  Trigraphs within comments are not warned about,
+except those that would form escaped newlines.
+.Sp
+This option is implied by \fB\-Wall\fR.  If \fB\-Wall\fR is not
+given, this option is still enabled unless trigraphs are enabled.  To
+get trigraph conversion without warnings, but get the other
+\&\fB\-Wall\fR warnings, use \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR.
+.IP "\fB\-Wundef\fR" 4
+.IX Item "-Wundef"
+Warn if an undefined identifier is evaluated in an \f(CW\*(C`#if\*(C'\fR directive.
+Such identifiers are replaced with zero.
+.IP "\fB\-Wexpansion\-to\-defined\fR" 4
+.IX Item "-Wexpansion-to-defined"
+Warn whenever \fBdefined\fR is encountered in the expansion of a macro
+(including the case where the macro is expanded by an \fB#if\fR directive).
+Such usage is not portable.
+This warning is also enabled by \fB\-Wpedantic\fR and \fB\-Wextra\fR.
+.IP "\fB\-Wunused\-macros\fR" 4
+.IX Item "-Wunused-macros"
+Warn about macros defined in the main file that are unused.  A macro
+is \fIused\fR if it is expanded or tested for existence at least once.
+The preprocessor also warns if the macro has not been used at the
+time it is redefined or undefined.
+.Sp
+Built-in macros, macros defined on the command line, and macros
+defined in include files are not warned about.
+.Sp
+\&\fINote:\fR If a macro is actually used, but only used in skipped
+conditional blocks, then the preprocessor reports it as unused.  To avoid the
+warning in such a case, you might improve the scope of the macro's
+definition by, for example, moving it into the first skipped block.
+Alternatively, you could provide a dummy use with something like:
+.Sp
+.Vb 2
+\&        #if defined the_macro_causing_the_warning
+\&        #endif
+.Ve
+.IP "\fB\-Wno\-endif\-labels\fR" 4
+.IX Item "-Wno-endif-labels"
+Do not warn whenever an \f(CW\*(C`#else\*(C'\fR or an \f(CW\*(C`#endif\*(C'\fR are followed by text.
+This sometimes happens in older programs with code of the form
+.Sp
+.Vb 5
+\&        #if FOO
+\&        ...
+\&        #else FOO
+\&        ...
+\&        #endif FOO
+.Ve
+.Sp
+The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments.
+This warning is on by default.
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+This section describes the environment variables that affect how \s-1CPP\s0
+operates.  You can use them to specify directories or prefixes to use
+when searching for include files, or to control dependency output.
+.PP
+Note that you can also specify places to search using options such as
+\&\fB\-I\fR, and control dependency output with options like
+\&\fB\-M\fR.  These take precedence over
+environment variables, which in turn take precedence over the
+configuration of \s-1GCC.\s0
+.IP "\fB\s-1CPATH\s0\fR" 4
+.IX Item "CPATH"
+.PD 0
+.IP "\fBC_INCLUDE_PATH\fR" 4
+.IX Item "C_INCLUDE_PATH"
+.IP "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4
+.IX Item "CPLUS_INCLUDE_PATH"
+.IP "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4
+.IX Item "OBJC_INCLUDE_PATH"
+.PD
+Each variable's value is a list of directories separated by a special
+character, much like \fB\s-1PATH\s0\fR, in which to look for header files.
+The special character, \f(CW\*(C`PATH_SEPARATOR\*(C'\fR, is target-dependent and
+determined at \s-1GCC\s0 build time.  For Microsoft Windows-based targets it is a
+semicolon, and for almost all other targets it is a colon.
+.Sp
+\&\fB\s-1CPATH\s0\fR specifies a list of directories to be searched as if
+specified with \fB\-I\fR, but after any paths given with \fB\-I\fR
+options on the command line.  This environment variable is used
+regardless of which language is being preprocessed.
+.Sp
+The remaining environment variables apply only when preprocessing the
+particular language indicated.  Each specifies a list of directories
+to be searched as if specified with \fB\-isystem\fR, but after any
+paths given with \fB\-isystem\fR options on the command line.
+.Sp
+In all these variables, an empty element instructs the compiler to
+search its current working directory.  Empty elements can appear at the
+beginning or end of a path.  For instance, if the value of
+\&\fB\s-1CPATH\s0\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same
+effect as \fB\-I.\ \-I/special/include\fR.
+.IP "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4
+.IX Item "DEPENDENCIES_OUTPUT"
+If this variable is set, its value specifies how to output
+dependencies for Make based on the non-system header files processed
+by the compiler.  System header files are ignored in the dependency
+output.
+.Sp
+The value of \fB\s-1DEPENDENCIES_OUTPUT\s0\fR can be just a file name, in
+which case the Make rules are written to that file, guessing the target
+name from the source file name.  Or the value can have the form
+\&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
+file \fIfile\fR using \fItarget\fR as the target name.
+.Sp
+In other words, this environment variable is equivalent to combining
+the options \fB\-MM\fR and \fB\-MF\fR,
+with an optional \fB\-MT\fR switch too.
+.IP "\fB\s-1SUNPRO_DEPENDENCIES\s0\fR" 4
+.IX Item "SUNPRO_DEPENDENCIES"
+This variable is the same as \fB\s-1DEPENDENCIES_OUTPUT\s0\fR (see above),
+except that system header files are not ignored, so it implies
+\&\fB\-M\fR rather than \fB\-MM\fR.  However, the dependence on the
+main input file is omitted.
+.IP "\fB\s-1SOURCE_DATE_EPOCH\s0\fR" 4
+.IX Item "SOURCE_DATE_EPOCH"
+If this variable is set, its value specifies a \s-1UNIX\s0 timestamp to be
+used in replacement of the current date and time in the \f(CW\*(C`_\|_DATE_\|_\*(C'\fR
+and \f(CW\*(C`_\|_TIME_\|_\*(C'\fR macros, so that the embedded timestamps become
+reproducible.
+.Sp
+The value of \fB\s-1SOURCE_DATE_EPOCH\s0\fR must be a \s-1UNIX\s0 timestamp,
+defined as the number of seconds (excluding leap seconds) since
+01 Jan 1970 00:00:00 represented in \s-1ASCII\s0; identical to the output of
+\&\fB\f(CB@command\fB{date +%s\fR} on GNU/Linux and other systems that support the
+\&\f(CW%s\fR extension in the \f(CW\*(C`date\*(C'\fR command.
+.Sp
+The value should be a known timestamp such as the last modification
+time of the source or package and it should be set by the build
+process.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7),
+\&\fIgcc\fR\|(1), and the Info entries for \fIcpp\fR and \fIgcc\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1987\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation.  A copy of
+the license is included in the
+man page \fIgfdl\fR\|(7).
+This manual contains no Invariant Sections.  The Front-Cover Texts are
+(a) (see below), and the Back-Cover Texts are (b) (see below).
+.PP
+(a) The \s-1FSF\s0's Front-Cover Text is:
+.PP
+.Vb 1
+\&     A GNU Manual
+.Ve
+.PP
+(b) The \s-1FSF\s0's Back-Cover Text is:
+.PP
+.Vb 3
+\&     You have freedom to copy and modify this GNU Manual, like GNU
+\&     software.  Copies published by the Free Software Foundation raise
+\&     funds for GNU development.
+.Ve
diff --git a/share/man/man1/aarch64-elf-dlltool.1 b/share/man/man1/aarch64-elf-dlltool.1
new file mode 100644
index 0000000..d984a80
--- /dev/null
+++ b/share/man/man1/aarch64-elf-dlltool.1
@@ -0,0 +1,538 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "DLLTOOL 1"
+.TH DLLTOOL 1 "2019-05-21" "binutils-2.32" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+dlltool \- Create files needed to build and use DLLs.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+dlltool [\fB\-d\fR|\fB\-\-input\-def\fR \fIdef-file-name\fR]
+        [\fB\-b\fR|\fB\-\-base\-file\fR \fIbase-file-name\fR]
+        [\fB\-e\fR|\fB\-\-output\-exp\fR \fIexports-file-name\fR]
+        [\fB\-z\fR|\fB\-\-output\-def\fR \fIdef-file-name\fR]
+        [\fB\-l\fR|\fB\-\-output\-lib\fR \fIlibrary-file-name\fR]
+        [\fB\-y\fR|\fB\-\-output\-delaylib\fR \fIlibrary-file-name\fR]
+        [\fB\-\-export\-all\-symbols\fR] [\fB\-\-no\-export\-all\-symbols\fR]
+        [\fB\-\-exclude\-symbols\fR \fIlist\fR]
+        [\fB\-\-no\-default\-excludes\fR]
+        [\fB\-S\fR|\fB\-\-as\fR \fIpath-to-assembler\fR] [\fB\-f\fR|\fB\-\-as\-flags\fR \fIoptions\fR]
+        [\fB\-D\fR|\fB\-\-dllname\fR \fIname\fR] [\fB\-m\fR|\fB\-\-machine\fR \fImachine\fR]
+        [\fB\-a\fR|\fB\-\-add\-indirect\fR]
+        [\fB\-U\fR|\fB\-\-add\-underscore\fR] [\fB\-\-add\-stdcall\-underscore\fR]
+        [\fB\-k\fR|\fB\-\-kill\-at\fR] [\fB\-A\fR|\fB\-\-add\-stdcall\-alias\fR]
+        [\fB\-p\fR|\fB\-\-ext\-prefix\-alias\fR \fIprefix\fR]
+        [\fB\-x\fR|\fB\-\-no\-idata4\fR] [\fB\-c\fR|\fB\-\-no\-idata5\fR]
+        [\fB\-\-use\-nul\-prefixed\-import\-tables\fR]
+        [\fB\-I\fR|\fB\-\-identify\fR \fIlibrary-file-name\fR] [\fB\-\-identify\-strict\fR]
+        [\fB\-i\fR|\fB\-\-interwork\fR]
+        [\fB\-n\fR|\fB\-\-nodelete\fR] [\fB\-t\fR|\fB\-\-temp\-prefix\fR \fIprefix\fR]
+        [\fB\-v\fR|\fB\-\-verbose\fR]
+        [\fB\-h\fR|\fB\-\-help\fR] [\fB\-V\fR|\fB\-\-version\fR]
+        [\fB\-\-no\-leading\-underscore\fR] [\fB\-\-leading\-underscore\fR]
+        [object\-file ...]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBdlltool\fR reads its inputs, which can come from the \fB\-d\fR and
+\&\fB\-b\fR options as well as object files specified on the command
+line.  It then processes these inputs and if the \fB\-e\fR option has
+been specified it creates a exports file.  If the \fB\-l\fR option
+has been specified it creates a library file and if the \fB\-z\fR option
+has been specified it creates a def file.  Any or all of the \fB\-e\fR,
+\&\fB\-l\fR and \fB\-z\fR options can be present in one invocation of
+dlltool.
+.PP
+When creating a \s-1DLL,\s0 along with the source for the \s-1DLL,\s0 it is necessary
+to have three other files.  \fBdlltool\fR can help with the creation of
+these files.
+.PP
+The first file is a \fI.def\fR file which specifies which functions are
+exported from the \s-1DLL,\s0 which functions the \s-1DLL\s0 imports, and so on.  This
+is a text file and can be created by hand, or \fBdlltool\fR can be used
+to create it using the \fB\-z\fR option.  In this case \fBdlltool\fR
+will scan the object files specified on its command line looking for
+those functions which have been specially marked as being exported and
+put entries for them in the \fI.def\fR file it creates.
+.PP
+In order to mark a function as being exported from a \s-1DLL,\s0 it needs to
+have an \fB\-export:<name_of_function>\fR entry in the \fB.drectve\fR
+section of the object file.  This can be done in C by using the
+\&\fIasm()\fR operator:
+.PP
+.Vb 2
+\&          asm (".section .drectve");
+\&          asm (".ascii \e"\-export:my_func\e"");
+\&        
+\&          int my_func (void) { ... }
+.Ve
+.PP
+The second file needed for \s-1DLL\s0 creation is an exports file.  This file
+is linked with the object files that make up the body of the \s-1DLL\s0 and it
+handles the interface between the \s-1DLL\s0 and the outside world.  This is a
+binary file and it can be created by giving the \fB\-e\fR option to
+\&\fBdlltool\fR when it is creating or reading in a \fI.def\fR file.
+.PP
+The third file needed for \s-1DLL\s0 creation is the library file that programs
+will link with in order to access the functions in the \s-1DLL\s0 (an `import
+library').  This file can be created by giving the \fB\-l\fR option to
+dlltool when it is creating or reading in a \fI.def\fR file.
+.PP
+If the \fB\-y\fR option is specified, dlltool generates a delay-import
+library that can be used instead of the normal import library to allow
+a program to link to the dll only as soon as an imported function is
+called for the first time. The resulting executable will need to be
+linked to the static delayimp library containing _\|\fI_delayLoadHelper2()\fR,
+which in turn will import LoadLibraryA and GetProcAddress from kernel32.
+.PP
+\&\fBdlltool\fR builds the library file by hand, but it builds the
+exports file by creating temporary files containing assembler statements
+and then assembling these.  The \fB\-S\fR command-line option can be
+used to specify the path to the assembler that dlltool will use,
+and the \fB\-f\fR option can be used to pass specific flags to that
+assembler.  The \fB\-n\fR can be used to prevent dlltool from deleting
+these temporary assembler files when it is done, and if \fB\-n\fR is
+specified twice then this will prevent dlltool from deleting the
+temporary object files it used to build the library.
+.PP
+Here is an example of creating a \s-1DLL\s0 from a source file \fBdll.c\fR and
+also creating a program (from an object file called \fBprogram.o\fR)
+that uses that \s-1DLL:\s0
+.PP
+.Vb 4
+\&          gcc \-c dll.c
+\&          dlltool \-e exports.o \-l dll.lib dll.o
+\&          gcc dll.o exports.o \-o dll.dll
+\&          gcc program.o dll.lib \-o program
+.Ve
+.PP
+\&\fBdlltool\fR may also be used to query an existing import library
+to determine the name of the \s-1DLL\s0 to which it is associated.  See the
+description of the \fB\-I\fR or \fB\-\-identify\fR option.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+The command-line options have the following meanings:
+.IP "\fB\-d\fR \fIfilename\fR" 4
+.IX Item "-d filename"
+.PD 0
+.IP "\fB\-\-input\-def\fR \fIfilename\fR" 4
+.IX Item "--input-def filename"
+.PD
+Specifies the name of a \fI.def\fR file to be read in and processed.
+.IP "\fB\-b\fR \fIfilename\fR" 4
+.IX Item "-b filename"
+.PD 0
+.IP "\fB\-\-base\-file\fR \fIfilename\fR" 4
+.IX Item "--base-file filename"
+.PD
+Specifies the name of a base file to be read in and processed.  The
+contents of this file will be added to the relocation section in the
+exports file generated by dlltool.
+.IP "\fB\-e\fR \fIfilename\fR" 4
+.IX Item "-e filename"
+.PD 0
+.IP "\fB\-\-output\-exp\fR \fIfilename\fR" 4
+.IX Item "--output-exp filename"
+.PD
+Specifies the name of the export file to be created by dlltool.
+.IP "\fB\-z\fR \fIfilename\fR" 4
+.IX Item "-z filename"
+.PD 0
+.IP "\fB\-\-output\-def\fR \fIfilename\fR" 4
+.IX Item "--output-def filename"
+.PD
+Specifies the name of the \fI.def\fR file to be created by dlltool.
+.IP "\fB\-l\fR \fIfilename\fR" 4
+.IX Item "-l filename"
+.PD 0
+.IP "\fB\-\-output\-lib\fR \fIfilename\fR" 4
+.IX Item "--output-lib filename"
+.PD
+Specifies the name of the library file to be created by dlltool.
+.IP "\fB\-y\fR \fIfilename\fR" 4
+.IX Item "-y filename"
+.PD 0
+.IP "\fB\-\-output\-delaylib\fR \fIfilename\fR" 4
+.IX Item "--output-delaylib filename"
+.PD
+Specifies the name of the delay-import library file to be created by dlltool.
+.IP "\fB\-\-export\-all\-symbols\fR" 4
+.IX Item "--export-all-symbols"
+Treat all global and weak defined symbols found in the input object
+files as symbols to be exported.  There is a small list of symbols which
+are not exported by default; see the \fB\-\-no\-default\-excludes\fR
+option.  You may add to the list of symbols to not export by using the
+\&\fB\-\-exclude\-symbols\fR option.
+.IP "\fB\-\-no\-export\-all\-symbols\fR" 4
+.IX Item "--no-export-all-symbols"
+Only export symbols explicitly listed in an input \fI.def\fR file or in
+\&\fB.drectve\fR sections in the input object files.  This is the default
+behaviour.  The \fB.drectve\fR sections are created by \fBdllexport\fR
+attributes in the source code.
+.IP "\fB\-\-exclude\-symbols\fR \fIlist\fR" 4
+.IX Item "--exclude-symbols list"
+Do not export the symbols in \fIlist\fR.  This is a list of symbol names
+separated by comma or colon characters.  The symbol names should not
+contain a leading underscore.  This is only meaningful when
+\&\fB\-\-export\-all\-symbols\fR is used.
+.IP "\fB\-\-no\-default\-excludes\fR" 4
+.IX Item "--no-default-excludes"
+When \fB\-\-export\-all\-symbols\fR is used, it will by default avoid
+exporting certain special symbols.  The current list of symbols to avoid
+exporting is \fBDllMain@12\fR, \fBDllEntryPoint@0\fR,
+\&\fBimpure_ptr\fR.  You may use the \fB\-\-no\-default\-excludes\fR option
+to go ahead and export these special symbols.  This is only meaningful
+when \fB\-\-export\-all\-symbols\fR is used.
+.IP "\fB\-S\fR \fIpath\fR" 4
+.IX Item "-S path"
+.PD 0
+.IP "\fB\-\-as\fR \fIpath\fR" 4
+.IX Item "--as path"
+.PD
+Specifies the path, including the filename, of the assembler to be used
+to create the exports file.
+.IP "\fB\-f\fR \fIoptions\fR" 4
+.IX Item "-f options"
+.PD 0
+.IP "\fB\-\-as\-flags\fR \fIoptions\fR" 4
+.IX Item "--as-flags options"
+.PD
+Specifies any specific command-line options to be passed to the
+assembler when building the exports file.  This option will work even if
+the \fB\-S\fR option is not used.  This option only takes one argument,
+and if it occurs more than once on the command line, then later
+occurrences will override earlier occurrences.  So if it is necessary to
+pass multiple options to the assembler they should be enclosed in
+double quotes.
+.IP "\fB\-D\fR \fIname\fR" 4
+.IX Item "-D name"
+.PD 0
+.IP "\fB\-\-dll\-name\fR \fIname\fR" 4
+.IX Item "--dll-name name"
+.PD
+Specifies the name to be stored in the \fI.def\fR file as the name of
+the \s-1DLL\s0 when the \fB\-e\fR option is used.  If this option is not
+present, then the filename given to the \fB\-e\fR option will be
+used as the name of the \s-1DLL.\s0
+.IP "\fB\-m\fR \fImachine\fR" 4
+.IX Item "-m machine"
+.PD 0
+.IP "\fB\-machine\fR \fImachine\fR" 4
+.IX Item "-machine machine"
+.PD
+Specifies the type of machine for which the library file should be
+built.  \fBdlltool\fR has a built in default type, depending upon how
+it was created, but this option can be used to override that.  This is
+normally only useful when creating DLLs for an \s-1ARM\s0 processor, when the
+contents of the \s-1DLL\s0 are actually encode using Thumb instructions.
+.IP "\fB\-a\fR" 4
+.IX Item "-a"
+.PD 0
+.IP "\fB\-\-add\-indirect\fR" 4
+.IX Item "--add-indirect"
+.PD
+Specifies that when \fBdlltool\fR is creating the exports file it
+should add a section which allows the exported functions to be
+referenced without using the import library.  Whatever the hell that
+means!
+.IP "\fB\-U\fR" 4
+.IX Item "-U"
+.PD 0
+.IP "\fB\-\-add\-underscore\fR" 4
+.IX Item "--add-underscore"
+.PD
+Specifies that when \fBdlltool\fR is creating the exports file it
+should prepend an underscore to the names of \fIall\fR exported symbols.
+.IP "\fB\-\-no\-leading\-underscore\fR" 4
+.IX Item "--no-leading-underscore"
+.PD 0
+.IP "\fB\-\-leading\-underscore\fR" 4
+.IX Item "--leading-underscore"
+.PD
+Specifies whether standard symbol should be forced to be prefixed, or
+not.
+.IP "\fB\-\-add\-stdcall\-underscore\fR" 4
+.IX Item "--add-stdcall-underscore"
+Specifies that when \fBdlltool\fR is creating the exports file it
+should prepend an underscore to the names of exported \fIstdcall\fR
+functions. Variable names and non-stdcall function names are not modified.
+This option is useful when creating GNU-compatible import libs for third
+party DLLs that were built with MS-Windows tools.
+.IP "\fB\-k\fR" 4
+.IX Item "-k"
+.PD 0
+.IP "\fB\-\-kill\-at\fR" 4
+.IX Item "--kill-at"
+.PD
+Specifies that \fB@<number>\fR suffixes should be omitted from the names
+of stdcall functions that will be imported from the \s-1DLL.\s0  This is
+useful when creating an import library for a \s-1DLL\s0 which exports stdcall
+functions but without the usual \fB@<number>\fR symbol name suffix.
+.Sp
+This does not change the naming of symbols provided by the import library
+to programs linked against it, but only the entries in the import table
+(ie the .idata section).
+.IP "\fB\-A\fR" 4
+.IX Item "-A"
+.PD 0
+.IP "\fB\-\-add\-stdcall\-alias\fR" 4
+.IX Item "--add-stdcall-alias"
+.PD
+Specifies that when \fBdlltool\fR is creating the exports file it
+should add aliases for stdcall symbols without \fB@ <number>\fR
+in addition to the symbols with \fB@ <number>\fR.
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+.PD 0
+.IP "\fB\-\-ext\-prefix\-alias\fR \fIprefix\fR" 4
+.IX Item "--ext-prefix-alias prefix"
+.PD
+Causes \fBdlltool\fR to create external aliases for all \s-1DLL\s0
+imports with the specified prefix.  The aliases are created for both
+external and import symbols with no leading underscore.
+.IP "\fB\-x\fR" 4
+.IX Item "-x"
+.PD 0
+.IP "\fB\-\-no\-idata4\fR" 4
+.IX Item "--no-idata4"
+.PD
+Specifies that when \fBdlltool\fR is creating the exports and library
+files it should omit the \f(CW\*(C`.idata4\*(C'\fR section.  This is for compatibility
+with certain operating systems.
+.IP "\fB\-\-use\-nul\-prefixed\-import\-tables\fR" 4
+.IX Item "--use-nul-prefixed-import-tables"
+Specifies that when \fBdlltool\fR is creating the exports and library
+files it should prefix the \f(CW\*(C`.idata4\*(C'\fR and \f(CW\*(C`.idata5\*(C'\fR by zero an
+element. This emulates old gnu import library generation of
+\&\f(CW\*(C`dlltool\*(C'\fR. By default this option is turned off.
+.IP "\fB\-c\fR" 4
+.IX Item "-c"
+.PD 0
+.IP "\fB\-\-no\-idata5\fR" 4
+.IX Item "--no-idata5"
+.PD
+Specifies that when \fBdlltool\fR is creating the exports and library
+files it should omit the \f(CW\*(C`.idata5\*(C'\fR section.  This is for compatibility
+with certain operating systems.
+.IP "\fB\-I\fR \fIfilename\fR" 4
+.IX Item "-I filename"
+.PD 0
+.IP "\fB\-\-identify\fR \fIfilename\fR" 4
+.IX Item "--identify filename"
+.PD
+Specifies that \fBdlltool\fR should inspect the import library
+indicated by \fIfilename\fR and report, on \f(CW\*(C`stdout\*(C'\fR, the name(s)
+of the associated \s-1DLL\s0(s).  This can be performed in addition to any
+other operations indicated by the other options and arguments.
+\&\fBdlltool\fR fails if the import library does not exist or is not
+actually an import library. See also \fB\-\-identify\-strict\fR.
+.IP "\fB\-\-identify\-strict\fR" 4
+.IX Item "--identify-strict"
+Modifies the behavior of the \fB\-\-identify\fR option, such
+that an error is reported if \fIfilename\fR is associated with
+more than one \s-1DLL.\s0
+.IP "\fB\-i\fR" 4
+.IX Item "-i"
+.PD 0
+.IP "\fB\-\-interwork\fR" 4
+.IX Item "--interwork"
+.PD
+Specifies that \fBdlltool\fR should mark the objects in the library
+file and exports file that it produces as supporting interworking
+between \s-1ARM\s0 and Thumb code.
+.IP "\fB\-n\fR" 4
+.IX Item "-n"
+.PD 0
+.IP "\fB\-\-nodelete\fR" 4
+.IX Item "--nodelete"
+.PD
+Makes \fBdlltool\fR preserve the temporary assembler files it used to
+create the exports file.  If this option is repeated then dlltool will
+also preserve the temporary object files it uses to create the library
+file.
+.IP "\fB\-t\fR \fIprefix\fR" 4
+.IX Item "-t prefix"
+.PD 0
+.IP "\fB\-\-temp\-prefix\fR \fIprefix\fR" 4
+.IX Item "--temp-prefix prefix"
+.PD
+Makes \fBdlltool\fR use \fIprefix\fR when constructing the names of
+temporary assembler and object files.  By default, the temp file prefix
+is generated from the pid.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-\-verbose\fR" 4
+.IX Item "--verbose"
+.PD
+Make dlltool describe what it is doing.
+.IP "\fB\-h\fR" 4
+.IX Item "-h"
+.PD 0
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+.PD
+Displays a list of command-line options and then exits.
+.IP "\fB\-V\fR" 4
+.IX Item "-V"
+.PD 0
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.PD
+Displays dlltool's version number and then exits.
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+The Info pages for \fIbinutils\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man1/aarch64-elf-elfedit.1 b/share/man/man1/aarch64-elf-elfedit.1
new file mode 100644
index 0000000..5c79193
--- /dev/null
+++ b/share/man/man1/aarch64-elf-elfedit.1
@@ -0,0 +1,256 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "ELFEDIT 1"
+.TH ELFEDIT 1 "2019-05-21" "binutils-2.32" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+elfedit \- Update ELF header and program property of ELF files.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+elfedit [\fB\-\-input\-mach=\fR\fImachine\fR]
+        [\fB\-\-input\-type=\fR\fItype\fR]
+        [\fB\-\-input\-osabi=\fR\fIosabi\fR]
+        \fB\-\-output\-mach=\fR\fImachine\fR
+        \fB\-\-output\-type=\fR\fItype\fR
+        \fB\-\-output\-osabi=\fR\fIosabi\fR
+        \fB\-\-enable\-x86\-feature=\fR\fIfeature\fR
+        \fB\-\-disable\-x86\-feature=\fR\fIfeature\fR
+        [\fB\-v\fR|\fB\-\-version\fR]
+        [\fB\-h\fR|\fB\-\-help\fR]
+        \fIelffile\fR...
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBelfedit\fR updates the \s-1ELF\s0 header and program property of \s-1ELF\s0
+files which have the matching \s-1ELF\s0 machine and file types.  The options
+control how and which fields in the \s-1ELF\s0 header and program property
+should be updated.
+.PP
+\&\fIelffile\fR... are the \s-1ELF\s0 files to be updated.  32\-bit and
+64\-bit \s-1ELF\s0 files are supported, as are archives containing \s-1ELF\s0 files.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+The long and short forms of options, shown here as alternatives, are
+equivalent. At least one of the \fB\-\-output\-mach\fR,
+\&\fB\-\-output\-type\fR, \fB\-\-output\-osabi\fR,
+\&\fB\-\-enable\-x86\-feature\fR and \fB\-\-disable\-x86\-feature\fR
+options must be given.
+.IP "\fB\-\-input\-mach=\fR\fImachine\fR" 4
+.IX Item "--input-mach=machine"
+Set the matching input \s-1ELF\s0 machine type to \fImachine\fR.  If
+\&\fB\-\-input\-mach\fR isn't specified, it will match any \s-1ELF\s0
+machine types.
+.Sp
+The supported \s-1ELF\s0 machine types are, \fIi386\fR, \fI\s-1IAMCU\s0\fR, \fIL1OM\fR,
+\&\fIK1OM\fR and \fIx86\-64\fR.
+.IP "\fB\-\-output\-mach=\fR\fImachine\fR" 4
+.IX Item "--output-mach=machine"
+Change the \s-1ELF\s0 machine type in the \s-1ELF\s0 header to \fImachine\fR.  The
+supported \s-1ELF\s0 machine types are the same as \fB\-\-input\-mach\fR.
+.IP "\fB\-\-input\-type=\fR\fItype\fR" 4
+.IX Item "--input-type=type"
+Set the matching input \s-1ELF\s0 file type to \fItype\fR.  If
+\&\fB\-\-input\-type\fR isn't specified, it will match any \s-1ELF\s0 file types.
+.Sp
+The supported \s-1ELF\s0 file types are, \fIrel\fR, \fIexec\fR and \fIdyn\fR.
+.IP "\fB\-\-output\-type=\fR\fItype\fR" 4
+.IX Item "--output-type=type"
+Change the \s-1ELF\s0 file type in the \s-1ELF\s0 header to \fItype\fR.  The
+supported \s-1ELF\s0 types are the same as \fB\-\-input\-type\fR.
+.IP "\fB\-\-input\-osabi=\fR\fIosabi\fR" 4
+.IX Item "--input-osabi=osabi"
+Set the matching input \s-1ELF\s0 file \s-1OSABI\s0 to \fIosabi\fR.  If
+\&\fB\-\-input\-osabi\fR isn't specified, it will match any \s-1ELF\s0 OSABIs.
+.Sp
+The supported \s-1ELF\s0 OSABIs are, \fInone\fR, \fI\s-1HPUX\s0\fR, \fINetBSD\fR,
+\&\fI\s-1GNU\s0\fR, \fILinux\fR (alias for \fI\s-1GNU\s0\fR),
+\&\fISolaris\fR, \fI\s-1AIX\s0\fR, \fIIrix\fR,
+\&\fIFreeBSD\fR, \fI\s-1TRU64\s0\fR, \fIModesto\fR, \fIOpenBSD\fR, \fIOpenVMS\fR,
+\&\fI\s-1NSK\s0\fR, \fI\s-1AROS\s0\fR and \fIFenixOS\fR.
+.IP "\fB\-\-output\-osabi=\fR\fIosabi\fR" 4
+.IX Item "--output-osabi=osabi"
+Change the \s-1ELF OSABI\s0 in the \s-1ELF\s0 header to \fIosabi\fR.  The
+supported \s-1ELF OSABI\s0 are the same as \fB\-\-input\-osabi\fR.
+.IP "\fB\-\-enable\-x86\-feature=\fR\fIfeature\fR" 4
+.IX Item "--enable-x86-feature=feature"
+Set the \fIfeature\fR bit in program property in \fIexec\fR or \fIdyn\fR
+\&\s-1ELF\s0 files with machine types of \fIi386\fR or \fIx86\-64\fR.  The
+supported features are, \fIibt\fR and \fIshstk\fR.
+.IP "\fB\-\-disable\-x86\-feature=\fR\fIfeature\fR" 4
+.IX Item "--disable-x86-feature=feature"
+Clear the \fIfeature\fR bit in program property in \fIexec\fR or
+\&\fIdyn\fR \s-1ELF\s0 files with machine types of \fIi386\fR or \fIx86\-64\fR.
+The supported features are the same as \fB\-\-enable\-x86\-feature\fR.
+.Sp
+Note: \fB\-\-enable\-x86\-feature\fR and \fB\-\-disable\-x86\-feature\fR
+are available only on hosts with \fBmmap\fR support.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.PD
+Display the version number of \fBelfedit\fR.
+.IP "\fB\-h\fR" 4
+.IX Item "-h"
+.PD 0
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+.PD
+Display the command-line options understood by \fBelfedit\fR.
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIreadelf\fR\|(1), and the Info entries for \fIbinutils\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man1/aarch64-elf-gcc.1 b/share/man/man1/aarch64-elf-gcc.1
new file mode 100644
index 0000000..18332c3
--- /dev/null
+++ b/share/man/man1/aarch64-elf-gcc.1
@@ -0,0 +1,28148 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "GCC 1"
+.TH GCC 1 "2019-05-03" "gcc-9.1.1" "GNU"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+gcc \- GNU project C and C++ compiler
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+gcc [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] [\fB\-std=\fR\fIstandard\fR]
+    [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR]
+    [\fB\-W\fR\fIwarn\fR...] [\fB\-Wpedantic\fR]
+    [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...]
+    [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR]
+    [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine-option\fR...]
+    [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR...
+.PP
+Only the most useful options are listed here; see below for the
+remainder.  \fBg++\fR accepts mostly the same options as \fBgcc\fR.
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+When you invoke \s-1GCC,\s0 it normally does preprocessing, compilation,
+assembly and linking.  The \*(L"overall options\*(R" allow you to stop this
+process at an intermediate stage.  For example, the \fB\-c\fR option
+says not to run the linker.  Then the output consists of object files
+output by the assembler.
+.PP
+Other options are passed on to one or more stages of processing.  Some options
+control the preprocessor and others the compiler itself.  Yet other
+options control the assembler and linker; most of these are not
+documented here, since you rarely need to use any of them.
+.PP
+Most of the command-line options that you can use with \s-1GCC\s0 are useful
+for C programs; when an option is only useful with another language
+(usually \*(C+), the explanation says so explicitly.  If the description
+for a particular option does not mention a source language, you can use
+that option with all supported languages.
+.PP
+The usual way to run \s-1GCC\s0 is to run the executable called \fBgcc\fR, or
+\&\fImachine\fR\fB\-gcc\fR when cross-compiling, or
+\&\fImachine\fR\fB\-gcc\-\fR\fIversion\fR to run a specific version of \s-1GCC.\s0
+When you compile \*(C+ programs, you should invoke \s-1GCC\s0 as \fBg++\fR 
+instead.
+.PP
+The \fBgcc\fR program accepts options and file names as operands.  Many
+options have multi-letter names; therefore multiple single-letter options
+may \fInot\fR be grouped: \fB\-dv\fR is very different from \fB\-d\ \-v\fR.
+.PP
+You can mix options and other arguments.  For the most part, the order
+you use doesn't matter.  Order does matter when you use several
+options of the same kind; for example, if you specify \fB\-L\fR more
+than once, the directories are searched in the order specified.  Also,
+the placement of the \fB\-l\fR option is significant.
+.PP
+Many options have long names starting with \fB\-f\fR or with
+\&\fB\-W\fR\-\-\-for example,
+\&\fB\-fmove\-loop\-invariants\fR, \fB\-Wformat\fR and so on.  Most of
+these have both positive and negative forms; the negative form of
+\&\fB\-ffoo\fR is \fB\-fno\-foo\fR.  This manual documents
+only one of these two forms, whichever one is not the default.
+.PP
+Some options take one or more arguments typically separated either
+by a space or by the equals sign (\fB=\fR) from the option name.
+Unless documented otherwise, an argument can be either numeric or
+a string.  Numeric arguments must typically be small unsigned decimal
+or hexadecimal integers.  Hexadecimal arguments must begin with
+the \fB0x\fR prefix.  Arguments to options that specify a size
+threshold of some sort may be arbitrarily large decimal or hexadecimal
+integers followed by a byte size suffix designating a multiple of bytes
+such as \f(CW\*(C`kB\*(C'\fR and \f(CW\*(C`KiB\*(C'\fR for kilobyte and kibibyte, respectively,
+\&\f(CW\*(C`MB\*(C'\fR and \f(CW\*(C`MiB\*(C'\fR for megabyte and mebibyte, \f(CW\*(C`GB\*(C'\fR and
+\&\f(CW\*(C`GiB\*(C'\fR for gigabyte and gigibyte, and so on.  Such arguments are
+designated by \fIbyte-size\fR in the following text.  Refer to the \s-1NIST,
+IEC,\s0 and other relevant national and international standards for the full
+listing and explanation of the binary and decimal byte size prefixes.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.SS "Option Summary"
+.IX Subsection "Option Summary"
+Here is a summary of all the options, grouped by type.  Explanations are
+in the following sections.
+.IP "\fIOverall Options\fR" 4
+.IX Item "Overall Options"
+\&\fB\-c  \-S  \-E  \-o\fR \fIfile\fR  \fB\-x\fR \fIlanguage\fR  
+\&\fB\-v  \-###  \-\-help\fR[\fB=\fR\fIclass\fR[\fB,...\fR]]  \fB\-\-target\-help  \-\-version 
+\&\-pass\-exit\-codes  \-pipe  \-specs=\fR\fIfile\fR  \fB\-wrapper  
+@\fR\fIfile\fR  \fB\-ffile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR  
+\&\fB\-fplugin=\fR\fIfile\fR  \fB\-fplugin\-arg\-\fR\fIname\fR\fB=\fR\fIarg\fR  
+\&\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR]  \fB\-fada\-spec\-parent=\fR\fIunit\fR  \fB\-fdump\-go\-spec=\fR\fIfile\fR
+.IP "\fIC Language Options\fR" 4
+.IX Item "C Language Options"
+\&\fB\-ansi  \-std=\fR\fIstandard\fR  \fB\-fgnu89\-inline 
+\&\-fpermitted\-flt\-eval\-methods=\fR\fIstandard\fR 
+\&\fB\-aux\-info\fR \fIfilename\fR  \fB\-fallow\-parameterless\-variadic\-functions 
+\&\-fno\-asm  \-fno\-builtin  \-fno\-builtin\-\fR\fIfunction\fR  \fB\-fgimple
+\&\-fhosted  \-ffreestanding 
+\&\-fopenacc  \-fopenacc\-dim=\fR\fIgeom\fR 
+\&\fB\-fopenmp  \-fopenmp\-simd 
+\&\-fms\-extensions  \-fplan9\-extensions  \-fsso\-struct=\fR\fIendianness\fR 
+\&\fB\-fallow\-single\-precision  \-fcond\-mismatch  \-flax\-vector\-conversions 
+\&\-fsigned\-bitfields  \-fsigned\-char 
+\&\-funsigned\-bitfields  \-funsigned\-char\fR
+.IP "\fI\*(C+ Language Options\fR" 4
+.IX Item " Language Options"
+\&\fB\-fabi\-version=\fR\fIn\fR  \fB\-fno\-access\-control 
+\&\-faligned\-new=\fR\fIn\fR  \fB\-fargs\-in\-order=\fR\fIn\fR  \fB\-fchar8_t  \-fcheck\-new 
+\&\-fconstexpr\-depth=\fR\fIn\fR  \fB\-fconstexpr\-loop\-limit=\fR\fIn\fR 
+\&\fB\-fconstexpr\-ops\-limit=\fR\fIn\fR \fB\-fno\-elide\-constructors 
+\&\-fno\-enforce\-eh\-specs 
+\&\-fno\-gnu\-keywords 
+\&\-fno\-implicit\-templates 
+\&\-fno\-implicit\-inline\-templates 
+\&\-fno\-implement\-inlines  \-fms\-extensions 
+\&\-fnew\-inheriting\-ctors 
+\&\-fnew\-ttp\-matching 
+\&\-fno\-nonansi\-builtins  \-fnothrow\-opt  \-fno\-operator\-names 
+\&\-fno\-optional\-diags  \-fpermissive 
+\&\-fno\-pretty\-templates 
+\&\-frepo  \-fno\-rtti  \-fsized\-deallocation 
+\&\-ftemplate\-backtrace\-limit=\fR\fIn\fR 
+\&\fB\-ftemplate\-depth=\fR\fIn\fR 
+\&\fB\-fno\-threadsafe\-statics  \-fuse\-cxa\-atexit 
+\&\-fno\-weak  \-nostdinc++ 
+\&\-fvisibility\-inlines\-hidden 
+\&\-fvisibility\-ms\-compat 
+\&\-fext\-numeric\-literals 
+\&\-Wabi=\fR\fIn\fR  \fB\-Wabi\-tag  \-Wconversion\-null  \-Wctor\-dtor\-privacy 
+\&\-Wdelete\-non\-virtual\-dtor  \-Wdeprecated\-copy  \-Wdeprecated\-copy\-dtor 
+\&\-Wliteral\-suffix 
+\&\-Wmultiple\-inheritance  \-Wno\-init\-list\-lifetime 
+\&\-Wnamespaces  \-Wnarrowing 
+\&\-Wpessimizing\-move  \-Wredundant\-move 
+\&\-Wnoexcept  \-Wnoexcept\-type  \-Wclass\-memaccess 
+\&\-Wnon\-virtual\-dtor  \-Wreorder  \-Wregister 
+\&\-Weffc++  \-Wstrict\-null\-sentinel  \-Wtemplates 
+\&\-Wno\-non\-template\-friend  \-Wold\-style\-cast 
+\&\-Woverloaded\-virtual  \-Wno\-pmf\-conversions 
+\&\-Wno\-class\-conversion  \-Wno\-terminate 
+\&\-Wsign\-promo  \-Wvirtual\-inheritance\fR
+.IP "\fIObjective-C and Objective\-\*(C+ Language Options\fR" 4
+.IX Item "Objective-C and Objective- Language Options"
+\&\fB\-fconstant\-string\-class=\fR\fIclass-name\fR 
+\&\fB\-fgnu\-runtime  \-fnext\-runtime 
+\&\-fno\-nil\-receivers 
+\&\-fobjc\-abi\-version=\fR\fIn\fR 
+\&\fB\-fobjc\-call\-cxx\-cdtors 
+\&\-fobjc\-direct\-dispatch 
+\&\-fobjc\-exceptions 
+\&\-fobjc\-gc 
+\&\-fobjc\-nilcheck 
+\&\-fobjc\-std=objc1 
+\&\-fno\-local\-ivars 
+\&\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR] 
+\&\fB\-freplace\-objc\-classes 
+\&\-fzero\-link 
+\&\-gen\-decls 
+\&\-Wassign\-intercept 
+\&\-Wno\-protocol  \-Wselector 
+\&\-Wstrict\-selector\-match 
+\&\-Wundeclared\-selector\fR
+.IP "\fIDiagnostic Message Formatting Options\fR" 4
+.IX Item "Diagnostic Message Formatting Options"
+\&\fB\-fmessage\-length=\fR\fIn\fR  
+\&\fB\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery-line\fR]  
+\&\fB\-fdiagnostics\-color=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR]  
+\&\fB\-fdiagnostics\-format=\fR[\fBtext\fR|\fBjson\fR]  
+\&\fB\-fno\-diagnostics\-show\-option  \-fno\-diagnostics\-show\-caret 
+\&\-fno\-diagnostics\-show\-labels  \-fno\-diagnostics\-show\-line\-numbers 
+\&\-fdiagnostics\-minimum\-margin\-width=\fR\fIwidth\fR 
+\&\fB\-fdiagnostics\-parseable\-fixits  \-fdiagnostics\-generate\-patch 
+\&\-fdiagnostics\-show\-template\-tree  \-fno\-elide\-type 
+\&\-fno\-show\-column\fR
+.IP "\fIWarning Options\fR" 4
+.IX Item "Warning Options"
+\&\fB\-fsyntax\-only  \-fmax\-errors=\fR\fIn\fR  \fB\-Wpedantic 
+\&\-pedantic\-errors 
+\&\-w  \-Wextra  \-Wall  \-Waddress  \-Waddress\-of\-packed\-member 
+\&\-Waggregate\-return  \-Waligned\-new 
+\&\-Walloc\-zero  \-Walloc\-size\-larger\-than=\fR\fIbyte-size\fR 
+\&\fB\-Walloca  \-Walloca\-larger\-than=\fR\fIbyte-size\fR 
+\&\fB\-Wno\-aggressive\-loop\-optimizations  \-Warray\-bounds  \-Warray\-bounds=\fR\fIn\fR 
+\&\fB\-Wno\-attributes  \-Wattribute\-alias=\fR\fIn\fR  
+\&\fB\-Wbool\-compare  \-Wbool\-operation 
+\&\-Wno\-builtin\-declaration\-mismatch 
+\&\-Wno\-builtin\-macro\-redefined  \-Wc90\-c99\-compat  \-Wc99\-c11\-compat 
+\&\-Wc++\-compat  \-Wc++11\-compat  \-Wc++14\-compat  \-Wc++17\-compat  
+\&\-Wcast\-align  \-Wcast\-align=strict  \-Wcast\-function\-type  \-Wcast\-qual  
+\&\-Wchar\-subscripts  \-Wcatch\-value  \-Wcatch\-value=\fR\fIn\fR 
+\&\fB\-Wclobbered  \-Wcomment  \-Wconditionally\-supported 
+\&\-Wconversion  \-Wcoverage\-mismatch  \-Wno\-cpp  \-Wdangling\-else  \-Wdate\-time 
+\&\-Wdelete\-incomplete 
+\&\-Wno\-attribute\-warning 
+\&\-Wno\-deprecated  \-Wno\-deprecated\-declarations  \-Wno\-designated\-init 
+\&\-Wdisabled\-optimization 
+\&\-Wno\-discarded\-qualifiers  \-Wno\-discarded\-array\-qualifiers 
+\&\-Wno\-div\-by\-zero  \-Wdouble\-promotion 
+\&\-Wduplicated\-branches  \-Wduplicated\-cond 
+\&\-Wempty\-body  \-Wenum\-compare  \-Wno\-endif\-labels  \-Wexpansion\-to\-defined 
+\&\-Werror  \-Werror=*  \-Wextra\-semi  \-Wfatal\-errors 
+\&\-Wfloat\-equal  \-Wformat  \-Wformat=2 
+\&\-Wno\-format\-contains\-nul  \-Wno\-format\-extra\-args  
+\&\-Wformat\-nonliteral  \-Wformat\-overflow=\fR\fIn\fR 
+\&\fB\-Wformat\-security  \-Wformat\-signedness  \-Wformat\-truncation=\fR\fIn\fR 
+\&\fB\-Wformat\-y2k  \-Wframe\-address 
+\&\-Wframe\-larger\-than=\fR\fIbyte-size\fR  \fB\-Wno\-free\-nonheap\-object 
+\&\-Wjump\-misses\-init 
+\&\-Whsa  \-Wif\-not\-aligned 
+\&\-Wignored\-qualifiers  \-Wignored\-attributes  \-Wincompatible\-pointer\-types 
+\&\-Wimplicit  \-Wimplicit\-fallthrough  \-Wimplicit\-fallthrough=\fR\fIn\fR 
+\&\fB\-Wimplicit\-function\-declaration  \-Wimplicit\-int 
+\&\-Winit\-self  \-Winline  \-Wno\-int\-conversion  \-Wint\-in\-bool\-context 
+\&\-Wno\-int\-to\-pointer\-cast  \-Winvalid\-memory\-model  \-Wno\-invalid\-offsetof 
+\&\-Winvalid\-pch  \-Wlarger\-than=\fR\fIbyte-size\fR 
+\&\fB\-Wlogical\-op  \-Wlogical\-not\-parentheses  \-Wlong\-long 
+\&\-Wmain  \-Wmaybe\-uninitialized  \-Wmemset\-elt\-size  \-Wmemset\-transposed\-args 
+\&\-Wmisleading\-indentation  \-Wmissing\-attributes  \-Wmissing\-braces 
+\&\-Wmissing\-field\-initializers  \-Wmissing\-format\-attribute 
+\&\-Wmissing\-include\-dirs  \-Wmissing\-noreturn  \-Wmissing\-profile 
+\&\-Wno\-multichar  \-Wmultistatement\-macros  \-Wnonnull  \-Wnonnull\-compare 
+\&\-Wnormalized=\fR[\fBnone\fR|\fBid\fR|\fBnfc\fR|\fBnfkc\fR] 
+\&\fB\-Wnull\-dereference  \-Wodr  \-Wno\-overflow  \-Wopenmp\-simd  
+\&\-Woverride\-init\-side\-effects  \-Woverlength\-strings 
+\&\-Wpacked  \-Wpacked\-bitfield\-compat \-Wpacked\-not\-aligned  \-Wpadded 
+\&\-Wparentheses  \-Wno\-pedantic\-ms\-format 
+\&\-Wplacement\-new  \-Wplacement\-new=\fR\fIn\fR 
+\&\fB\-Wpointer\-arith  \-Wpointer\-compare  \-Wno\-pointer\-to\-int\-cast 
+\&\-Wno\-pragmas  \-Wno\-prio\-ctor\-dtor  \-Wredundant\-decls 
+\&\-Wrestrict  \-Wno\-return\-local\-addr 
+\&\-Wreturn\-type  \-Wsequence\-point  \-Wshadow  \-Wno\-shadow\-ivar 
+\&\-Wshadow=global,  \-Wshadow=local,  \-Wshadow=compatible\-local 
+\&\-Wshift\-overflow  \-Wshift\-overflow=\fR\fIn\fR 
+\&\fB\-Wshift\-count\-negative  \-Wshift\-count\-overflow  \-Wshift\-negative\-value 
+\&\-Wsign\-compare  \-Wsign\-conversion  \-Wfloat\-conversion 
+\&\-Wno\-scalar\-storage\-order  \-Wsizeof\-pointer\-div 
+\&\-Wsizeof\-pointer\-memaccess  \-Wsizeof\-array\-argument 
+\&\-Wstack\-protector  \-Wstack\-usage=\fR\fIbyte-size\fR  \fB\-Wstrict\-aliasing 
+\&\-Wstrict\-aliasing=n  \-Wstrict\-overflow  \-Wstrict\-overflow=\fR\fIn\fR 
+\&\fB\-Wstringop\-overflow=\fR\fIn\fR  \fB\-Wstringop\-truncation  \-Wsubobject\-linkage 
+\&\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR|\fBformat\fR|\fBmalloc\fR] 
+\&\fB\-Wsuggest\-final\-types   \-Wsuggest\-final\-methods  \-Wsuggest\-override 
+\&\-Wswitch  \-Wswitch\-bool  \-Wswitch\-default  \-Wswitch\-enum 
+\&\-Wswitch\-unreachable  \-Wsync\-nand 
+\&\-Wsystem\-headers  \-Wtautological\-compare  \-Wtrampolines  \-Wtrigraphs 
+\&\-Wtype\-limits  \-Wundef 
+\&\-Wuninitialized  \-Wunknown\-pragmas 
+\&\-Wunsuffixed\-float\-constants  \-Wunused  \-Wunused\-function 
+\&\-Wunused\-label  \-Wunused\-local\-typedefs  \-Wunused\-macros 
+\&\-Wunused\-parameter  \-Wno\-unused\-result 
+\&\-Wunused\-value  \-Wunused\-variable 
+\&\-Wunused\-const\-variable  \-Wunused\-const\-variable=\fR\fIn\fR 
+\&\fB\-Wunused\-but\-set\-parameter  \-Wunused\-but\-set\-variable 
+\&\-Wuseless\-cast  \-Wvariadic\-macros  \-Wvector\-operation\-performance 
+\&\-Wvla  \-Wvla\-larger\-than=\fR\fIbyte-size\fR  \fB\-Wvolatile\-register\-var 
+\&\-Wwrite\-strings 
+\&\-Wzero\-as\-null\-pointer\-constant\fR
+.IP "\fIC and Objective-C-only Warning Options\fR" 4
+.IX Item "C and Objective-C-only Warning Options"
+\&\fB\-Wbad\-function\-cast  \-Wmissing\-declarations 
+\&\-Wmissing\-parameter\-type  \-Wmissing\-prototypes  \-Wnested\-externs 
+\&\-Wold\-style\-declaration  \-Wold\-style\-definition 
+\&\-Wstrict\-prototypes  \-Wtraditional  \-Wtraditional\-conversion 
+\&\-Wdeclaration\-after\-statement  \-Wpointer\-sign\fR
+.IP "\fIDebugging Options\fR" 4
+.IX Item "Debugging Options"
+\&\fB\-g  \-g\fR\fIlevel\fR  \fB\-gdwarf  \-gdwarf\-\fR\fIversion\fR 
+\&\fB\-ggdb  \-grecord\-gcc\-switches  \-gno\-record\-gcc\-switches 
+\&\-gstabs  \-gstabs+  \-gstrict\-dwarf  \-gno\-strict\-dwarf 
+\&\-gas\-loc\-support  \-gno\-as\-loc\-support 
+\&\-gas\-locview\-support  \-gno\-as\-locview\-support 
+\&\-gcolumn\-info  \-gno\-column\-info 
+\&\-gstatement\-frontiers  \-gno\-statement\-frontiers 
+\&\-gvariable\-location\-views  \-gno\-variable\-location\-views 
+\&\-ginternal\-reset\-location\-views  \-gno\-internal\-reset\-location\-views 
+\&\-ginline\-points  \-gno\-inline\-points 
+\&\-gvms  \-gxcoff  \-gxcoff+  \-gz\fR[\fB=\fR\fItype\fR] 
+\&\fB\-gsplit\-dwarf  \-gdescribe\-dies  \-gno\-describe\-dies 
+\&\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR  \fB\-fdebug\-types\-section 
+\&\-fno\-eliminate\-unused\-debug\-types 
+\&\-femit\-struct\-debug\-baseonly  \-femit\-struct\-debug\-reduced 
+\&\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR] 
+\&\fB\-feliminate\-unused\-debug\-symbols  \-femit\-class\-debug\-always 
+\&\-fno\-merge\-debug\-strings  \-fno\-dwarf2\-cfi\-asm 
+\&\-fvar\-tracking  \-fvar\-tracking\-assignments\fR
+.IP "\fIOptimization Options\fR" 4
+.IX Item "Optimization Options"
+\&\fB\-faggressive\-loop\-optimizations 
+\&\-falign\-functions[=\fR\fIn\fR\fB[:\fR\fIm\fR\fB:[\fR\fIn2\fR\fB[:\fR\fIm2\fR\fB]]]] 
+\&\-falign\-jumps[=\fR\fIn\fR\fB[:\fR\fIm\fR\fB:[\fR\fIn2\fR\fB[:\fR\fIm2\fR\fB]]]] 
+\&\-falign\-labels[=\fR\fIn\fR\fB[:\fR\fIm\fR\fB:[\fR\fIn2\fR\fB[:\fR\fIm2\fR\fB]]]] 
+\&\-falign\-loops[=\fR\fIn\fR\fB[:\fR\fIm\fR\fB:[\fR\fIn2\fR\fB[:\fR\fIm2\fR\fB]]]] 
+\&\-fassociative\-math  \-fauto\-profile  \-fauto\-profile[=\fR\fIpath\fR\fB] 
+\&\-fauto\-inc\-dec  \-fbranch\-probabilities 
+\&\-fbranch\-target\-load\-optimize  \-fbranch\-target\-load\-optimize2 
+\&\-fbtr\-bb\-exclusive  \-fcaller\-saves 
+\&\-fcombine\-stack\-adjustments  \-fconserve\-stack 
+\&\-fcompare\-elim  \-fcprop\-registers  \-fcrossjumping 
+\&\-fcse\-follow\-jumps  \-fcse\-skip\-blocks  \-fcx\-fortran\-rules 
+\&\-fcx\-limited\-range 
+\&\-fdata\-sections  \-fdce  \-fdelayed\-branch 
+\&\-fdelete\-null\-pointer\-checks  \-fdevirtualize  \-fdevirtualize\-speculatively 
+\&\-fdevirtualize\-at\-ltrans  \-fdse 
+\&\-fearly\-inlining  \-fipa\-sra  \-fexpensive\-optimizations  \-ffat\-lto\-objects 
+\&\-ffast\-math  \-ffinite\-math\-only  \-ffloat\-store  \-fexcess\-precision=\fR\fIstyle\fR 
+\&\fB\-fforward\-propagate  \-ffp\-contract=\fR\fIstyle\fR  \fB\-ffunction\-sections 
+\&\-fgcse  \-fgcse\-after\-reload  \-fgcse\-las  \-fgcse\-lm  \-fgraphite\-identity 
+\&\-fgcse\-sm  \-fhoist\-adjacent\-loads  \-fif\-conversion 
+\&\-fif\-conversion2  \-findirect\-inlining 
+\&\-finline\-functions  \-finline\-functions\-called\-once  \-finline\-limit=\fR\fIn\fR 
+\&\fB\-finline\-small\-functions  \-fipa\-cp  \-fipa\-cp\-clone 
+\&\-fipa\-bit\-cp  \-fipa\-vrp  \-fipa\-pta  \-fipa\-profile  \-fipa\-pure\-const 
+\&\-fipa\-reference  \-fipa\-reference\-addressable 
+\&\-fipa\-stack\-alignment  \-fipa\-icf  \-fira\-algorithm=\fR\fIalgorithm\fR 
+\&\fB\-flive\-patching=\fR\fIlevel\fR 
+\&\fB\-fira\-region=\fR\fIregion\fR  \fB\-fira\-hoist\-pressure 
+\&\-fira\-loop\-pressure  \-fno\-ira\-share\-save\-slots 
+\&\-fno\-ira\-share\-spill\-slots 
+\&\-fisolate\-erroneous\-paths\-dereference  \-fisolate\-erroneous\-paths\-attribute 
+\&\-fivopts  \-fkeep\-inline\-functions  \-fkeep\-static\-functions 
+\&\-fkeep\-static\-consts  \-flimit\-function\-alignment  \-flive\-range\-shrinkage 
+\&\-floop\-block  \-floop\-interchange  \-floop\-strip\-mine 
+\&\-floop\-unroll\-and\-jam  \-floop\-nest\-optimize 
+\&\-floop\-parallelize\-all  \-flra\-remat  \-flto  \-flto\-compression\-level 
+\&\-flto\-partition=\fR\fIalg\fR  \fB\-fmerge\-all\-constants 
+\&\-fmerge\-constants  \-fmodulo\-sched  \-fmodulo\-sched\-allow\-regmoves 
+\&\-fmove\-loop\-invariants  \-fno\-branch\-count\-reg 
+\&\-fno\-defer\-pop  \-fno\-fp\-int\-builtin\-inexact  \-fno\-function\-cse 
+\&\-fno\-guess\-branch\-probability  \-fno\-inline  \-fno\-math\-errno  \-fno\-peephole 
+\&\-fno\-peephole2  \-fno\-printf\-return\-value  \-fno\-sched\-interblock 
+\&\-fno\-sched\-spec  \-fno\-signed\-zeros 
+\&\-fno\-toplevel\-reorder  \-fno\-trapping\-math  \-fno\-zero\-initialized\-in\-bss 
+\&\-fomit\-frame\-pointer  \-foptimize\-sibling\-calls 
+\&\-fpartial\-inlining  \-fpeel\-loops  \-fpredictive\-commoning 
+\&\-fprefetch\-loop\-arrays 
+\&\-fprofile\-correction 
+\&\-fprofile\-use  \-fprofile\-use=\fR\fIpath\fR  \fB\-fprofile\-values 
+\&\-fprofile\-reorder\-functions 
+\&\-freciprocal\-math  \-free  \-frename\-registers  \-freorder\-blocks 
+\&\-freorder\-blocks\-algorithm=\fR\fIalgorithm\fR 
+\&\fB\-freorder\-blocks\-and\-partition  \-freorder\-functions 
+\&\-frerun\-cse\-after\-loop  \-freschedule\-modulo\-scheduled\-loops 
+\&\-frounding\-math  \-fsave\-optimization\-record 
+\&\-fsched2\-use\-superblocks  \-fsched\-pressure 
+\&\-fsched\-spec\-load  \-fsched\-spec\-load\-dangerous 
+\&\-fsched\-stalled\-insns\-dep[=\fR\fIn\fR\fB]  \-fsched\-stalled\-insns[=\fR\fIn\fR\fB] 
+\&\-fsched\-group\-heuristic  \-fsched\-critical\-path\-heuristic 
+\&\-fsched\-spec\-insn\-heuristic  \-fsched\-rank\-heuristic 
+\&\-fsched\-last\-insn\-heuristic  \-fsched\-dep\-count\-heuristic 
+\&\-fschedule\-fusion 
+\&\-fschedule\-insns  \-fschedule\-insns2  \-fsection\-anchors 
+\&\-fselective\-scheduling  \-fselective\-scheduling2 
+\&\-fsel\-sched\-pipelining  \-fsel\-sched\-pipelining\-outer\-loops 
+\&\-fsemantic\-interposition  \-fshrink\-wrap  \-fshrink\-wrap\-separate 
+\&\-fsignaling\-nans 
+\&\-fsingle\-precision\-constant  \-fsplit\-ivs\-in\-unroller  \-fsplit\-loops
+\&\-fsplit\-paths 
+\&\-fsplit\-wide\-types  \-fssa\-backprop  \-fssa\-phiopt 
+\&\-fstdarg\-opt  \-fstore\-merging  \-fstrict\-aliasing 
+\&\-fthread\-jumps  \-ftracer  \-ftree\-bit\-ccp 
+\&\-ftree\-builtin\-call\-dce  \-ftree\-ccp  \-ftree\-ch 
+\&\-ftree\-coalesce\-vars  \-ftree\-copy\-prop  \-ftree\-dce  \-ftree\-dominator\-opts 
+\&\-ftree\-dse  \-ftree\-forwprop  \-ftree\-fre  \-fcode\-hoisting 
+\&\-ftree\-loop\-if\-convert  \-ftree\-loop\-im 
+\&\-ftree\-phiprop  \-ftree\-loop\-distribution  \-ftree\-loop\-distribute\-patterns 
+\&\-ftree\-loop\-ivcanon  \-ftree\-loop\-linear  \-ftree\-loop\-optimize 
+\&\-ftree\-loop\-vectorize 
+\&\-ftree\-parallelize\-loops=\fR\fIn\fR  \fB\-ftree\-pre  \-ftree\-partial\-pre  \-ftree\-pta 
+\&\-ftree\-reassoc  \-ftree\-scev\-cprop  \-ftree\-sink  \-ftree\-slsr  \-ftree\-sra 
+\&\-ftree\-switch\-conversion  \-ftree\-tail\-merge 
+\&\-ftree\-ter  \-ftree\-vectorize  \-ftree\-vrp  \-funconstrained\-commons 
+\&\-funit\-at\-a\-time  \-funroll\-all\-loops  \-funroll\-loops 
+\&\-funsafe\-math\-optimizations  \-funswitch\-loops 
+\&\-fipa\-ra  \-fvariable\-expansion\-in\-unroller  \-fvect\-cost\-model  \-fvpt 
+\&\-fweb  \-fwhole\-program  \-fwpa  \-fuse\-linker\-plugin 
+\&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR
+\&\fB\-O  \-O0  \-O1  \-O2  \-O3  \-Os  \-Ofast  \-Og\fR
+.IP "\fIProgram Instrumentation Options\fR" 4
+.IX Item "Program Instrumentation Options"
+\&\fB\-p  \-pg  \-fprofile\-arcs  \-\-coverage  \-ftest\-coverage 
+\&\-fprofile\-abs\-path 
+\&\-fprofile\-dir=\fR\fIpath\fR  \fB\-fprofile\-generate  \-fprofile\-generate=\fR\fIpath\fR 
+\&\fB\-fprofile\-update=\fR\fImethod\fR  \fB\-fprofile\-filter\-files=\fR\fIregex\fR 
+\&\fB\-fprofile\-exclude\-files=\fR\fIregex\fR 
+\&\fB\-fsanitize=\fR\fIstyle\fR  \fB\-fsanitize\-recover  \-fsanitize\-recover=\fR\fIstyle\fR 
+\&\fB\-fasan\-shadow\-offset=\fR\fInumber\fR  \fB\-fsanitize\-sections=\fR\fIs1\fR\fB,\fR\fIs2\fR\fB,... 
+\&\-fsanitize\-undefined\-trap\-on\-error  \-fbounds\-check 
+\&\-fcf\-protection=\fR[\fBfull\fR|\fBbranch\fR|\fBreturn\fR|\fBnone\fR] 
+\&\fB\-fstack\-protector  \-fstack\-protector\-all  \-fstack\-protector\-strong 
+\&\-fstack\-protector\-explicit  \-fstack\-check 
+\&\-fstack\-limit\-register=\fR\fIreg\fR  \fB\-fstack\-limit\-symbol=\fR\fIsym\fR 
+\&\fB\-fno\-stack\-limit  \-fsplit\-stack 
+\&\-fvtable\-verify=\fR[\fBstd\fR|\fBpreinit\fR|\fBnone\fR] 
+\&\fB\-fvtv\-counts  \-fvtv\-debug 
+\&\-finstrument\-functions 
+\&\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,... 
+\&\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,...\fR
+.IP "\fIPreprocessor Options\fR" 4
+.IX Item "Preprocessor Options"
+\&\fB\-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR 
+\&\fB\-A\-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] 
+\&\fB\-C  \-CC  \-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR] 
+\&\fB\-dD  \-dI  \-dM  \-dN  \-dU 
+\&\-fdebug\-cpp  \-fdirectives\-only  \-fdollars\-in\-identifiers  
+\&\-fexec\-charset=\fR\fIcharset\fR  \fB\-fextended\-identifiers  
+\&\-finput\-charset=\fR\fIcharset\fR  \fB\-fmacro\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR  
+\&\fB\-fno\-canonical\-system\-headers  \-fpch\-deps  \-fpch\-preprocess  
+\&\-fpreprocessed  \-ftabstop=\fR\fIwidth\fR  \fB\-ftrack\-macro\-expansion  
+\&\-fwide\-exec\-charset=\fR\fIcharset\fR  \fB\-fworking\-directory 
+\&\-H  \-imacros\fR \fIfile\fR  \fB\-include\fR \fIfile\fR 
+\&\fB\-M  \-MD  \-MF  \-MG  \-MM  \-MMD  \-MP  \-MQ  \-MT 
+\&\-no\-integrated\-cpp  \-P  \-pthread  \-remap 
+\&\-traditional  \-traditional\-cpp  \-trigraphs 
+\&\-U\fR\fImacro\fR  \fB\-undef  
+\&\-Wp,\fR\fIoption\fR  \fB\-Xpreprocessor\fR \fIoption\fR
+.IP "\fIAssembler Options\fR" 4
+.IX Item "Assembler Options"
+\&\fB\-Wa,\fR\fIoption\fR  \fB\-Xassembler\fR \fIoption\fR
+.IP "\fILinker Options\fR" 4
+.IX Item "Linker Options"
+\&\fIobject-file-name\fR  \fB\-fuse\-ld=\fR\fIlinker\fR  \fB\-l\fR\fIlibrary\fR 
+\&\fB\-nostartfiles  \-nodefaultlibs  \-nolibc  \-nostdlib 
+\&\-e\fR \fIentry\fR  \fB\-\-entry=\fR\fIentry\fR 
+\&\fB\-pie  \-pthread  \-r  \-rdynamic 
+\&\-s  \-static  \-static\-pie  \-static\-libgcc  \-static\-libstdc++ 
+\&\-static\-libasan  \-static\-libtsan  \-static\-liblsan  \-static\-libubsan 
+\&\-shared  \-shared\-libgcc  \-symbolic 
+\&\-T\fR \fIscript\fR  \fB\-Wl,\fR\fIoption\fR  \fB\-Xlinker\fR \fIoption\fR 
+\&\fB\-u\fR \fIsymbol\fR  \fB\-z\fR \fIkeyword\fR
+.IP "\fIDirectory Options\fR" 4
+.IX Item "Directory Options"
+\&\fB\-B\fR\fIprefix\fR  \fB\-I\fR\fIdir\fR  \fB\-I\- 
+\&\-idirafter\fR \fIdir\fR 
+\&\fB\-imacros\fR \fIfile\fR  \fB\-imultilib\fR \fIdir\fR 
+\&\fB\-iplugindir=\fR\fIdir\fR  \fB\-iprefix\fR \fIfile\fR 
+\&\fB\-iquote\fR \fIdir\fR  \fB\-isysroot\fR \fIdir\fR  \fB\-isystem\fR \fIdir\fR 
+\&\fB\-iwithprefix\fR \fIdir\fR  \fB\-iwithprefixbefore\fR \fIdir\fR  
+\&\fB\-L\fR\fIdir\fR  \fB\-no\-canonical\-prefixes  \-\-no\-sysroot\-suffix 
+\&\-nostdinc  \-nostdinc++  \-\-sysroot=\fR\fIdir\fR
+.IP "\fICode Generation Options\fR" 4
+.IX Item "Code Generation Options"
+\&\fB\-fcall\-saved\-\fR\fIreg\fR  \fB\-fcall\-used\-\fR\fIreg\fR 
+\&\fB\-ffixed\-\fR\fIreg\fR  \fB\-fexceptions 
+\&\-fnon\-call\-exceptions  \-fdelete\-dead\-exceptions  \-funwind\-tables 
+\&\-fasynchronous\-unwind\-tables 
+\&\-fno\-gnu\-unique 
+\&\-finhibit\-size\-directive  \-fno\-common  \-fno\-ident 
+\&\-fpcc\-struct\-return  \-fpic  \-fPIC  \-fpie  \-fPIE  \-fno\-plt 
+\&\-fno\-jump\-tables 
+\&\-frecord\-gcc\-switches 
+\&\-freg\-struct\-return  \-fshort\-enums  \-fshort\-wchar 
+\&\-fverbose\-asm  \-fpack\-struct[=\fR\fIn\fR\fB]  
+\&\-fleading\-underscore  \-ftls\-model=\fR\fImodel\fR 
+\&\fB\-fstack\-reuse=\fR\fIreuse_level\fR 
+\&\fB\-ftrampolines  \-ftrapv  \-fwrapv 
+\&\-fvisibility=\fR[\fBdefault\fR|\fBinternal\fR|\fBhidden\fR|\fBprotected\fR] 
+\&\fB\-fstrict\-volatile\-bitfields  \-fsync\-libcalls\fR
+.IP "\fIDeveloper Options\fR" 4
+.IX Item "Developer Options"
+\&\fB\-d\fR\fIletters\fR  \fB\-dumpspecs  \-dumpmachine  \-dumpversion 
+\&\-dumpfullversion  \-fchecking  \-fchecking=\fR\fIn\fR  \fB\-fdbg\-cnt\-list 
+\&\-fdbg\-cnt=\fR\fIcounter-value-list\fR 
+\&\fB\-fdisable\-ipa\-\fR\fIpass_name\fR 
+\&\fB\-fdisable\-rtl\-\fR\fIpass_name\fR 
+\&\fB\-fdisable\-rtl\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR 
+\&\fB\-fdisable\-tree\-\fR\fIpass_name\fR 
+\&\fB\-fdisable\-tree\-\fR\fIpass-name\fR\fB=\fR\fIrange-list\fR 
+\&\fB\-fdump\-debug  \-fdump\-earlydebug 
+\&\-fdump\-noaddr  \-fdump\-unnumbered  \-fdump\-unnumbered\-links 
+\&\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR] 
+\&\fB\-fdump\-ipa\-all  \-fdump\-ipa\-cgraph  \-fdump\-ipa\-inline 
+\&\-fdump\-lang\-all 
+\&\-fdump\-lang\-\fR\fIswitch\fR 
+\&\fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR 
+\&\fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR 
+\&\fB\-fdump\-passes 
+\&\-fdump\-rtl\-\fR\fIpass\fR  \fB\-fdump\-rtl\-\fR\fIpass\fR\fB=\fR\fIfilename\fR 
+\&\fB\-fdump\-statistics 
+\&\-fdump\-tree\-all 
+\&\-fdump\-tree\-\fR\fIswitch\fR 
+\&\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR 
+\&\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR 
+\&\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]  \fB\-fcompare\-debug\-second 
+\&\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR 
+\&\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR 
+\&\fB\-fira\-verbose=\fR\fIn\fR 
+\&\fB\-flto\-report  \-flto\-report\-wpa  \-fmem\-report\-wpa 
+\&\-fmem\-report  \-fpre\-ipa\-mem\-report  \-fpost\-ipa\-mem\-report 
+\&\-fopt\-info  \-fopt\-info\-\fR\fIoptions\fR[\fB=\fR\fIfile\fR] 
+\&\fB\-fprofile\-report 
+\&\-frandom\-seed=\fR\fIstring\fR  \fB\-fsched\-verbose=\fR\fIn\fR 
+\&\fB\-fsel\-sched\-verbose  \-fsel\-sched\-dump\-cfg  \-fsel\-sched\-pipelining\-verbose 
+\&\-fstats  \-fstack\-usage  \-ftime\-report  \-ftime\-report\-details 
+\&\-fvar\-tracking\-assignments\-toggle  \-gtoggle 
+\&\-print\-file\-name=\fR\fIlibrary\fR  \fB\-print\-libgcc\-file\-name 
+\&\-print\-multi\-directory  \-print\-multi\-lib  \-print\-multi\-os\-directory 
+\&\-print\-prog\-name=\fR\fIprogram\fR  \fB\-print\-search\-dirs  \-Q 
+\&\-print\-sysroot  \-print\-sysroot\-headers\-suffix 
+\&\-save\-temps  \-save\-temps=cwd  \-save\-temps=obj  \-time\fR[\fB=\fR\fIfile\fR]
+.IP "\fIMachine-Dependent Options\fR" 4
+.IX Item "Machine-Dependent Options"
+\&\fIAArch64 Options\fR
+\&\fB\-mabi=\fR\fIname\fR  \fB\-mbig\-endian  \-mlittle\-endian 
+\&\-mgeneral\-regs\-only 
+\&\-mcmodel=tiny  \-mcmodel=small  \-mcmodel=large 
+\&\-mstrict\-align  \-mno\-strict\-align 
+\&\-momit\-leaf\-frame\-pointer 
+\&\-mtls\-dialect=desc  \-mtls\-dialect=traditional 
+\&\-mtls\-size=\fR\fIsize\fR 
+\&\fB\-mfix\-cortex\-a53\-835769  \-mfix\-cortex\-a53\-843419 
+\&\-mlow\-precision\-recip\-sqrt  \-mlow\-precision\-sqrt  \-mlow\-precision\-div 
+\&\-mpc\-relative\-literal\-loads 
+\&\-msign\-return\-address=\fR\fIscope\fR 
+\&\fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac-ret\fR\fB[+\fR\fIleaf\fR\fB]|\fR\fIbti\fR 
+\&\fB\-march=\fR\fIname\fR  \fB\-mcpu=\fR\fIname\fR  \fB\-mtune=\fR\fIname\fR  
+\&\fB\-moverride=\fR\fIstring\fR  \fB\-mverbose\-cost\-dump 
+\&\-mstack\-protector\-guard=\fR\fIguard\fR \fB\-mstack\-protector\-guard\-reg=\fR\fIsysreg\fR 
+\&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR \fB\-mtrack\-speculation\fR
+.Sp
+\&\fIAdapteva Epiphany Options\fR
+\&\fB\-mhalf\-reg\-file  \-mprefer\-short\-insn\-regs 
+\&\-mbranch\-cost=\fR\fInum\fR  \fB\-mcmove  \-mnops=\fR\fInum\fR  \fB\-msoft\-cmpsf 
+\&\-msplit\-lohi  \-mpost\-inc  \-mpost\-modify  \-mstack\-offset=\fR\fInum\fR 
+\&\fB\-mround\-nearest  \-mlong\-calls  \-mshort\-calls  \-msmall16 
+\&\-mfp\-mode=\fR\fImode\fR  \fB\-mvect\-double  \-max\-vect\-align=\fR\fInum\fR 
+\&\fB\-msplit\-vecmove\-early  \-m1reg\-\fR\fIreg\fR
+.Sp
+\&\fI\s-1AMD GCN\s0 Options\fR
+\&\fB\-march=\fR\fIgpu\fR \fB\-mtune=\fR\fIgpu\fR \fB\-mstack\-size=\fR\fIbytes\fR
+.Sp
+\&\fI\s-1ARC\s0 Options\fR
+\&\fB\-mbarrel\-shifter  \-mjli\-always 
+\&\-mcpu=\fR\fIcpu\fR  \fB\-mA6  \-mARC600  \-mA7  \-mARC700 
+\&\-mdpfp  \-mdpfp\-compact  \-mdpfp\-fast  \-mno\-dpfp\-lrsr 
+\&\-mea  \-mno\-mpy  \-mmul32x16  \-mmul64  \-matomic 
+\&\-mnorm  \-mspfp  \-mspfp\-compact  \-mspfp\-fast  \-msimd  \-msoft\-float  \-mswap 
+\&\-mcrc  \-mdsp\-packa  \-mdvbf  \-mlock  \-mmac\-d16  \-mmac\-24  \-mrtsc  \-mswape 
+\&\-mtelephony  \-mxy  \-misize  \-mannotate\-align  \-marclinux  \-marclinux_prof 
+\&\-mlong\-calls  \-mmedium\-calls  \-msdata  \-mirq\-ctrl\-saved 
+\&\-mrgf\-banked\-regs  \-mlpc\-width=\fR\fIwidth\fR  \fB\-G\fR \fInum\fR 
+\&\fB\-mvolatile\-cache  \-mtp\-regno=\fR\fIregno\fR 
+\&\fB\-malign\-call  \-mauto\-modify\-reg  \-mbbit\-peephole  \-mno\-brcc 
+\&\-mcase\-vector\-pcrel  \-mcompact\-casesi  \-mno\-cond\-exec  \-mearly\-cbranchsi 
+\&\-mexpand\-adddi  \-mindexed\-loads  \-mlra  \-mlra\-priority\-none 
+\&\-mlra\-priority\-compact mlra-priority-noncompact  \-mmillicode 
+\&\-mmixed\-code  \-mq\-class  \-mRcq  \-mRcw  \-msize\-level=\fR\fIlevel\fR 
+\&\fB\-mtune=\fR\fIcpu\fR  \fB\-mmultcost=\fR\fInum\fR  \fB\-mcode\-density\-frame 
+\&\-munalign\-prob\-threshold=\fR\fIprobability\fR  \fB\-mmpy\-option=\fR\fImulto\fR 
+\&\fB\-mdiv\-rem  \-mcode\-density  \-mll64  \-mfpu=\fR\fIfpu\fR  \fB\-mrf16  \-mbranch\-index\fR
+.Sp
+\&\fI\s-1ARM\s0 Options\fR
+\&\fB\-mapcs\-frame  \-mno\-apcs\-frame 
+\&\-mabi=\fR\fIname\fR 
+\&\fB\-mapcs\-stack\-check  \-mno\-apcs\-stack\-check 
+\&\-mapcs\-reentrant  \-mno\-apcs\-reentrant 
+\&\-mgeneral\-regs\-only 
+\&\-msched\-prolog  \-mno\-sched\-prolog 
+\&\-mlittle\-endian  \-mbig\-endian 
+\&\-mbe8  \-mbe32 
+\&\-mfloat\-abi=\fR\fIname\fR 
+\&\fB\-mfp16\-format=\fR\fIname\fR
+\&\fB\-mthumb\-interwork  \-mno\-thumb\-interwork 
+\&\-mcpu=\fR\fIname\fR  \fB\-march=\fR\fIname\fR  \fB\-mfpu=\fR\fIname\fR  
+\&\fB\-mtune=\fR\fIname\fR  \fB\-mprint\-tune\-info 
+\&\-mstructure\-size\-boundary=\fR\fIn\fR 
+\&\fB\-mabort\-on\-noreturn 
+\&\-mlong\-calls  \-mno\-long\-calls 
+\&\-msingle\-pic\-base  \-mno\-single\-pic\-base 
+\&\-mpic\-register=\fR\fIreg\fR 
+\&\fB\-mnop\-fun\-dllimport 
+\&\-mpoke\-function\-name 
+\&\-mthumb  \-marm  \-mflip\-thumb 
+\&\-mtpcs\-frame  \-mtpcs\-leaf\-frame 
+\&\-mcaller\-super\-interworking  \-mcallee\-super\-interworking 
+\&\-mtp=\fR\fIname\fR  \fB\-mtls\-dialect=\fR\fIdialect\fR 
+\&\fB\-mword\-relocations 
+\&\-mfix\-cortex\-m3\-ldrd 
+\&\-munaligned\-access 
+\&\-mneon\-for\-64bits 
+\&\-mslow\-flash\-data 
+\&\-masm\-syntax\-unified 
+\&\-mrestrict\-it 
+\&\-mverbose\-cost\-dump 
+\&\-mpure\-code 
+\&\-mcmse\fR
+.Sp
+\&\fI\s-1AVR\s0 Options\fR
+\&\fB\-mmcu=\fR\fImcu\fR  \fB\-mabsdata  \-maccumulate\-args 
+\&\-mbranch\-cost=\fR\fIcost\fR 
+\&\fB\-mcall\-prologues  \-mgas\-isr\-prologues  \-mint8 
+\&\-mn_flash=\fR\fIsize\fR  \fB\-mno\-interrupts 
+\&\-mmain\-is\-OS_task  \-mrelax  \-mrmw  \-mstrict\-X  \-mtiny\-stack 
+\&\-mfract\-convert\-truncate 
+\&\-mshort\-calls  \-nodevicelib 
+\&\-Waddr\-space\-convert  \-Wmisspelled\-isr\fR
+.Sp
+\&\fIBlackfin Options\fR
+\&\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] 
+\&\fB\-msim  \-momit\-leaf\-frame\-pointer  \-mno\-omit\-leaf\-frame\-pointer 
+\&\-mspecld\-anomaly  \-mno\-specld\-anomaly  \-mcsync\-anomaly  \-mno\-csync\-anomaly 
+\&\-mlow\-64k  \-mno\-low64k  \-mstack\-check\-l1  \-mid\-shared\-library 
+\&\-mno\-id\-shared\-library  \-mshared\-library\-id=\fR\fIn\fR 
+\&\fB\-mleaf\-id\-shared\-library  \-mno\-leaf\-id\-shared\-library 
+\&\-msep\-data  \-mno\-sep\-data  \-mlong\-calls  \-mno\-long\-calls 
+\&\-mfast\-fp  \-minline\-plt  \-mmulticore  \-mcorea  \-mcoreb  \-msdram 
+\&\-micplb\fR
+.Sp
+\&\fIC6X Options\fR
+\&\fB\-mbig\-endian  \-mlittle\-endian  \-march=\fR\fIcpu\fR 
+\&\fB\-msim  \-msdata=\fR\fIsdata-type\fR
+.Sp
+\&\fI\s-1CRIS\s0 Options\fR
+\&\fB\-mcpu=\fR\fIcpu\fR  \fB\-march=\fR\fIcpu\fR  \fB\-mtune=\fR\fIcpu\fR 
+\&\fB\-mmax\-stack\-frame=\fR\fIn\fR  \fB\-melinux\-stacksize=\fR\fIn\fR 
+\&\fB\-metrax4  \-metrax100  \-mpdebug  \-mcc\-init  \-mno\-side\-effects 
+\&\-mstack\-align  \-mdata\-align  \-mconst\-align 
+\&\-m32\-bit  \-m16\-bit  \-m8\-bit  \-mno\-prologue\-epilogue  \-mno\-gotplt 
+\&\-melf  \-maout  \-melinux  \-mlinux  \-sim  \-sim2 
+\&\-mmul\-bug\-workaround  \-mno\-mul\-bug\-workaround\fR
+.Sp
+\&\fI\s-1CR16\s0 Options\fR
+\&\fB\-mmac 
+\&\-mcr16cplus  \-mcr16c 
+\&\-msim  \-mint32  \-mbit\-ops
+\&\-mdata\-model=\fR\fImodel\fR
+.Sp
+\&\fIC\-SKY Options\fR
+\&\fB\-march=\fR\fIarch\fR  \fB\-mcpu=\fR\fIcpu\fR 
+\&\fB\-mbig\-endian  \-EB  \-mlittle\-endian  \-EL 
+\&\-mhard\-float  \-msoft\-float  \-mfpu=\fR\fIfpu\fR  \fB\-mdouble\-float  \-mfdivdu 
+\&\-melrw  \-mistack  \-mmp  \-mcp  \-mcache  \-msecurity  \-mtrust 
+\&\-mdsp  \-medsp  \-mvdsp 
+\&\-mdiv  \-msmart  \-mhigh\-registers  \-manchor 
+\&\-mpushpop  \-mmultiple\-stld  \-mconstpool  \-mstack\-size  \-mccrt 
+\&\-mbranch\-cost=\fR\fIn\fR  \fB\-mcse\-cc  \-msched\-prolog\fR
+.Sp
+\&\fIDarwin Options\fR
+\&\fB\-all_load  \-allowable_client  \-arch  \-arch_errors_fatal 
+\&\-arch_only  \-bind_at_load  \-bundle  \-bundle_loader 
+\&\-client_name  \-compatibility_version  \-current_version 
+\&\-dead_strip 
+\&\-dependency\-file  \-dylib_file  \-dylinker_install_name 
+\&\-dynamic  \-dynamiclib  \-exported_symbols_list 
+\&\-filelist  \-flat_namespace  \-force_cpusubtype_ALL 
+\&\-force_flat_namespace  \-headerpad_max_install_names 
+\&\-iframework 
+\&\-image_base  \-init  \-install_name  \-keep_private_externs 
+\&\-multi_module  \-multiply_defined  \-multiply_defined_unused 
+\&\-noall_load   \-no_dead_strip_inits_and_terms 
+\&\-nofixprebinding  \-nomultidefs  \-noprebind  \-noseglinkedit 
+\&\-pagezero_size  \-prebind  \-prebind_all_twolevel_modules 
+\&\-private_bundle  \-read_only_relocs  \-sectalign 
+\&\-sectobjectsymbols  \-whyload  \-seg1addr 
+\&\-sectcreate  \-sectobjectsymbols  \-sectorder 
+\&\-segaddr  \-segs_read_only_addr  \-segs_read_write_addr 
+\&\-seg_addr_table  \-seg_addr_table_filename  \-seglinkedit 
+\&\-segprot  \-segs_read_only_addr  \-segs_read_write_addr 
+\&\-single_module  \-static  \-sub_library  \-sub_umbrella 
+\&\-twolevel_namespace  \-umbrella  \-undefined 
+\&\-unexported_symbols_list  \-weak_reference_mismatches 
+\&\-whatsloaded  \-F  \-gused  \-gfull  \-mmacosx\-version\-min=\fR\fIversion\fR 
+\&\fB\-mkernel  \-mone\-byte\-bool\fR
+.Sp
+\&\fI\s-1DEC\s0 Alpha Options\fR
+\&\fB\-mno\-fp\-regs  \-msoft\-float 
+\&\-mieee  \-mieee\-with\-inexact  \-mieee\-conformant 
+\&\-mfp\-trap\-mode=\fR\fImode\fR  \fB\-mfp\-rounding\-mode=\fR\fImode\fR 
+\&\fB\-mtrap\-precision=\fR\fImode\fR  \fB\-mbuild\-constants 
+\&\-mcpu=\fR\fIcpu-type\fR  \fB\-mtune=\fR\fIcpu-type\fR 
+\&\fB\-mbwx  \-mmax  \-mfix  \-mcix 
+\&\-mfloat\-vax  \-mfloat\-ieee 
+\&\-mexplicit\-relocs  \-msmall\-data  \-mlarge\-data 
+\&\-msmall\-text  \-mlarge\-text 
+\&\-mmemory\-latency=\fR\fItime\fR
+.Sp
+\&\fI\s-1FR30\s0 Options\fR
+\&\fB\-msmall\-model  \-mno\-lsim\fR
+.Sp
+\&\fI\s-1FT32\s0 Options\fR
+\&\fB\-msim  \-mlra  \-mnodiv  \-mft32b  \-mcompress  \-mnopm\fR
+.Sp
+\&\fI\s-1FRV\s0 Options\fR
+\&\fB\-mgpr\-32  \-mgpr\-64  \-mfpr\-32  \-mfpr\-64 
+\&\-mhard\-float  \-msoft\-float 
+\&\-malloc\-cc  \-mfixed\-cc  \-mdword  \-mno\-dword 
+\&\-mdouble  \-mno\-double 
+\&\-mmedia  \-mno\-media  \-mmuladd  \-mno\-muladd 
+\&\-mfdpic  \-minline\-plt  \-mgprel\-ro  \-multilib\-library\-pic 
+\&\-mlinked\-fp  \-mlong\-calls  \-malign\-labels 
+\&\-mlibrary\-pic  \-macc\-4  \-macc\-8 
+\&\-mpack  \-mno\-pack  \-mno\-eflags  \-mcond\-move  \-mno\-cond\-move 
+\&\-moptimize\-membar  \-mno\-optimize\-membar 
+\&\-mscc  \-mno\-scc  \-mcond\-exec  \-mno\-cond\-exec 
+\&\-mvliw\-branch  \-mno\-vliw\-branch 
+\&\-mmulti\-cond\-exec  \-mno\-multi\-cond\-exec  \-mnested\-cond\-exec 
+\&\-mno\-nested\-cond\-exec  \-mtomcat\-stats 
+\&\-mTLS  \-mtls 
+\&\-mcpu=\fR\fIcpu\fR
+.Sp
+\&\fIGNU/Linux Options\fR
+\&\fB\-mglibc  \-muclibc  \-mmusl  \-mbionic  \-mandroid 
+\&\-tno\-android\-cc  \-tno\-android\-ld\fR
+.Sp
+\&\fIH8/300 Options\fR
+\&\fB\-mrelax  \-mh  \-ms  \-mn  \-mexr  \-mno\-exr  \-mint32  \-malign\-300\fR
+.Sp
+\&\fI\s-1HPPA\s0 Options\fR
+\&\fB\-march=\fR\fIarchitecture-type\fR 
+\&\fB\-mcaller\-copies  \-mdisable\-fpregs  \-mdisable\-indexing 
+\&\-mfast\-indirect\-calls  \-mgas  \-mgnu\-ld   \-mhp\-ld 
+\&\-mfixed\-range=\fR\fIregister-range\fR 
+\&\fB\-mjump\-in\-delay  \-mlinker\-opt  \-mlong\-calls 
+\&\-mlong\-load\-store  \-mno\-disable\-fpregs 
+\&\-mno\-disable\-indexing  \-mno\-fast\-indirect\-calls  \-mno\-gas 
+\&\-mno\-jump\-in\-delay  \-mno\-long\-load\-store 
+\&\-mno\-portable\-runtime  \-mno\-soft\-float 
+\&\-mno\-space\-regs  \-msoft\-float  \-mpa\-risc\-1\-0 
+\&\-mpa\-risc\-1\-1  \-mpa\-risc\-2\-0  \-mportable\-runtime 
+\&\-mschedule=\fR\fIcpu-type\fR  \fB\-mspace\-regs  \-msio  \-mwsio 
+\&\-munix=\fR\fIunix-std\fR  \fB\-nolibdld  \-static  \-threads\fR
+.Sp
+\&\fI\s-1IA\-64\s0 Options\fR
+\&\fB\-mbig\-endian  \-mlittle\-endian  \-mgnu\-as  \-mgnu\-ld  \-mno\-pic 
+\&\-mvolatile\-asm\-stop  \-mregister\-names  \-msdata  \-mno\-sdata 
+\&\-mconstant\-gp  \-mauto\-pic  \-mfused\-madd 
+\&\-minline\-float\-divide\-min\-latency 
+\&\-minline\-float\-divide\-max\-throughput 
+\&\-mno\-inline\-float\-divide 
+\&\-minline\-int\-divide\-min\-latency 
+\&\-minline\-int\-divide\-max\-throughput  
+\&\-mno\-inline\-int\-divide 
+\&\-minline\-sqrt\-min\-latency  \-minline\-sqrt\-max\-throughput 
+\&\-mno\-inline\-sqrt 
+\&\-mdwarf2\-asm  \-mearly\-stop\-bits 
+\&\-mfixed\-range=\fR\fIregister-range\fR  \fB\-mtls\-size=\fR\fItls-size\fR 
+\&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-milp32  \-mlp64 
+\&\-msched\-br\-data\-spec  \-msched\-ar\-data\-spec  \-msched\-control\-spec 
+\&\-msched\-br\-in\-data\-spec  \-msched\-ar\-in\-data\-spec  \-msched\-in\-control\-spec 
+\&\-msched\-spec\-ldc  \-msched\-spec\-control\-ldc 
+\&\-msched\-prefer\-non\-data\-spec\-insns  \-msched\-prefer\-non\-control\-spec\-insns 
+\&\-msched\-stop\-bits\-after\-every\-cycle  \-msched\-count\-spec\-in\-critical\-path 
+\&\-msel\-sched\-dont\-check\-control\-spec  \-msched\-fp\-mem\-deps\-zero\-cost 
+\&\-msched\-max\-memory\-insns\-hard\-limit  \-msched\-max\-memory\-insns=\fR\fImax-insns\fR
+.Sp
+\&\fI\s-1LM32\s0 Options\fR
+\&\fB\-mbarrel\-shift\-enabled  \-mdivide\-enabled  \-mmultiply\-enabled 
+\&\-msign\-extend\-enabled  \-muser\-enabled\fR
+.Sp
+\&\fIM32R/D Options\fR
+\&\fB\-m32r2  \-m32rx  \-m32r 
+\&\-mdebug 
+\&\-malign\-loops  \-mno\-align\-loops 
+\&\-missue\-rate=\fR\fInumber\fR 
+\&\fB\-mbranch\-cost=\fR\fInumber\fR 
+\&\fB\-mmodel=\fR\fIcode-size-model-type\fR 
+\&\fB\-msdata=\fR\fIsdata-type\fR 
+\&\fB\-mno\-flush\-func  \-mflush\-func=\fR\fIname\fR 
+\&\fB\-mno\-flush\-trap  \-mflush\-trap=\fR\fInumber\fR 
+\&\fB\-G\fR \fInum\fR
+.Sp
+\&\fIM32C Options\fR
+\&\fB\-mcpu=\fR\fIcpu\fR  \fB\-msim  \-memregs=\fR\fInumber\fR
+.Sp
+\&\fIM680x0 Options\fR
+\&\fB\-march=\fR\fIarch\fR  \fB\-mcpu=\fR\fIcpu\fR  \fB\-mtune=\fR\fItune\fR 
+\&\fB\-m68000  \-m68020  \-m68020\-40  \-m68020\-60  \-m68030  \-m68040 
+\&\-m68060  \-mcpu32  \-m5200  \-m5206e  \-m528x  \-m5307  \-m5407 
+\&\-mcfv4e  \-mbitfield  \-mno\-bitfield  \-mc68000  \-mc68020 
+\&\-mnobitfield  \-mrtd  \-mno\-rtd  \-mdiv  \-mno\-div  \-mshort 
+\&\-mno\-short  \-mhard\-float  \-m68881  \-msoft\-float  \-mpcrel 
+\&\-malign\-int  \-mstrict\-align  \-msep\-data  \-mno\-sep\-data 
+\&\-mshared\-library\-id=n  \-mid\-shared\-library  \-mno\-id\-shared\-library 
+\&\-mxgot  \-mno\-xgot  \-mlong\-jump\-table\-offsets\fR
+.Sp
+\&\fIMCore Options\fR
+\&\fB\-mhardlit  \-mno\-hardlit  \-mdiv  \-mno\-div  \-mrelax\-immediates 
+\&\-mno\-relax\-immediates  \-mwide\-bitfields  \-mno\-wide\-bitfields 
+\&\-m4byte\-functions  \-mno\-4byte\-functions  \-mcallgraph\-data 
+\&\-mno\-callgraph\-data  \-mslow\-bytes  \-mno\-slow\-bytes  \-mno\-lsim 
+\&\-mlittle\-endian  \-mbig\-endian  \-m210  \-m340  \-mstack\-increment\fR
+.Sp
+\&\fIMeP Options\fR
+\&\fB\-mabsdiff  \-mall\-opts  \-maverage  \-mbased=\fR\fIn\fR  \fB\-mbitops 
+\&\-mc=\fR\fIn\fR  \fB\-mclip  \-mconfig=\fR\fIname\fR  \fB\-mcop  \-mcop32  \-mcop64  \-mivc2 
+\&\-mdc  \-mdiv  \-meb  \-mel  \-mio\-volatile  \-ml  \-mleadz  \-mm  \-mminmax 
+\&\-mmult  \-mno\-opts  \-mrepeat  \-ms  \-msatur  \-msdram  \-msim  \-msimnovec  \-mtf 
+\&\-mtiny=\fR\fIn\fR
+.Sp
+\&\fIMicroBlaze Options\fR
+\&\fB\-msoft\-float  \-mhard\-float  \-msmall\-divides  \-mcpu=\fR\fIcpu\fR 
+\&\fB\-mmemcpy  \-mxl\-soft\-mul  \-mxl\-soft\-div  \-mxl\-barrel\-shift 
+\&\-mxl\-pattern\-compare  \-mxl\-stack\-check  \-mxl\-gp\-opt  \-mno\-clearbss 
+\&\-mxl\-multiply\-high  \-mxl\-float\-convert  \-mxl\-float\-sqrt 
+\&\-mbig\-endian  \-mlittle\-endian  \-mxl\-reorder  \-mxl\-mode\-\fR\fIapp-model\fR 
+\&\fB\-mpic\-data\-is\-text\-relative\fR
+.Sp
+\&\fI\s-1MIPS\s0 Options\fR
+\&\fB\-EL  \-EB  \-march=\fR\fIarch\fR  \fB\-mtune=\fR\fIarch\fR 
+\&\fB\-mips1  \-mips2  \-mips3  \-mips4  \-mips32  \-mips32r2  \-mips32r3  \-mips32r5 
+\&\-mips32r6  \-mips64  \-mips64r2  \-mips64r3  \-mips64r5  \-mips64r6 
+\&\-mips16  \-mno\-mips16  \-mflip\-mips16 
+\&\-minterlink\-compressed  \-mno\-interlink\-compressed 
+\&\-minterlink\-mips16  \-mno\-interlink\-mips16 
+\&\-mabi=\fR\fIabi\fR  \fB\-mabicalls  \-mno\-abicalls 
+\&\-mshared  \-mno\-shared  \-mplt  \-mno\-plt  \-mxgot  \-mno\-xgot 
+\&\-mgp32  \-mgp64  \-mfp32  \-mfpxx  \-mfp64  \-mhard\-float  \-msoft\-float 
+\&\-mno\-float  \-msingle\-float  \-mdouble\-float 
+\&\-modd\-spreg  \-mno\-odd\-spreg 
+\&\-mabs=\fR\fImode\fR  \fB\-mnan=\fR\fIencoding\fR 
+\&\fB\-mdsp  \-mno\-dsp  \-mdspr2  \-mno\-dspr2 
+\&\-mmcu  \-mmno\-mcu 
+\&\-meva  \-mno\-eva 
+\&\-mvirt  \-mno\-virt 
+\&\-mxpa  \-mno\-xpa 
+\&\-mcrc  \-mno\-crc 
+\&\-mginv  \-mno\-ginv 
+\&\-mmicromips  \-mno\-micromips 
+\&\-mmsa  \-mno\-msa 
+\&\-mloongson\-mmi  \-mno\-loongson\-mmi 
+\&\-mloongson\-ext  \-mno\-loongson\-ext 
+\&\-mloongson\-ext2  \-mno\-loongson\-ext2 
+\&\-mfpu=\fR\fIfpu-type\fR 
+\&\fB\-msmartmips  \-mno\-smartmips 
+\&\-mpaired\-single  \-mno\-paired\-single  \-mdmx  \-mno\-mdmx 
+\&\-mips3d  \-mno\-mips3d  \-mmt  \-mno\-mt  \-mllsc  \-mno\-llsc 
+\&\-mlong64  \-mlong32  \-msym32  \-mno\-sym32 
+\&\-G\fR\fInum\fR  \fB\-mlocal\-sdata  \-mno\-local\-sdata 
+\&\-mextern\-sdata  \-mno\-extern\-sdata  \-mgpopt  \-mno\-gopt 
+\&\-membedded\-data  \-mno\-embedded\-data 
+\&\-muninit\-const\-in\-rodata  \-mno\-uninit\-const\-in\-rodata 
+\&\-mcode\-readable=\fR\fIsetting\fR 
+\&\fB\-msplit\-addresses  \-mno\-split\-addresses 
+\&\-mexplicit\-relocs  \-mno\-explicit\-relocs 
+\&\-mcheck\-zero\-division  \-mno\-check\-zero\-division 
+\&\-mdivide\-traps  \-mdivide\-breaks 
+\&\-mload\-store\-pairs  \-mno\-load\-store\-pairs 
+\&\-mmemcpy  \-mno\-memcpy  \-mlong\-calls  \-mno\-long\-calls 
+\&\-mmad  \-mno\-mad  \-mimadd  \-mno\-imadd  \-mfused\-madd  \-mno\-fused\-madd  \-nocpp 
+\&\-mfix\-24k  \-mno\-fix\-24k 
+\&\-mfix\-r4000  \-mno\-fix\-r4000  \-mfix\-r4400  \-mno\-fix\-r4400 
+\&\-mfix\-r5900  \-mno\-fix\-r5900 
+\&\-mfix\-r10000  \-mno\-fix\-r10000  \-mfix\-rm7000  \-mno\-fix\-rm7000 
+\&\-mfix\-vr4120  \-mno\-fix\-vr4120 
+\&\-mfix\-vr4130  \-mno\-fix\-vr4130  \-mfix\-sb1  \-mno\-fix\-sb1 
+\&\-mflush\-func=\fR\fIfunc\fR  \fB\-mno\-flush\-func 
+\&\-mbranch\-cost=\fR\fInum\fR  \fB\-mbranch\-likely  \-mno\-branch\-likely 
+\&\-mcompact\-branches=\fR\fIpolicy\fR 
+\&\fB\-mfp\-exceptions  \-mno\-fp\-exceptions 
+\&\-mvr4130\-align  \-mno\-vr4130\-align  \-msynci  \-mno\-synci 
+\&\-mlxc1\-sxc1  \-mno\-lxc1\-sxc1  \-mmadd4  \-mno\-madd4 
+\&\-mrelax\-pic\-calls  \-mno\-relax\-pic\-calls  \-mmcount\-ra\-address 
+\&\-mframe\-header\-opt  \-mno\-frame\-header\-opt\fR
+.Sp
+\&\fI\s-1MMIX\s0 Options\fR
+\&\fB\-mlibfuncs  \-mno\-libfuncs  \-mepsilon  \-mno\-epsilon  \-mabi=gnu 
+\&\-mabi=mmixware  \-mzero\-extend  \-mknuthdiv  \-mtoplevel\-symbols 
+\&\-melf  \-mbranch\-predict  \-mno\-branch\-predict  \-mbase\-addresses 
+\&\-mno\-base\-addresses  \-msingle\-exit  \-mno\-single\-exit\fR
+.Sp
+\&\fI\s-1MN10300\s0 Options\fR
+\&\fB\-mmult\-bug  \-mno\-mult\-bug 
+\&\-mno\-am33  \-mam33  \-mam33\-2  \-mam34 
+\&\-mtune=\fR\fIcpu-type\fR 
+\&\fB\-mreturn\-pointer\-on\-d0 
+\&\-mno\-crt0  \-mrelax  \-mliw  \-msetlb\fR
+.Sp
+\&\fIMoxie Options\fR
+\&\fB\-meb  \-mel  \-mmul.x  \-mno\-crt0\fR
+.Sp
+\&\fI\s-1MSP430\s0 Options\fR
+\&\fB\-msim  \-masm\-hex  \-mmcu=  \-mcpu=  \-mlarge  \-msmall  \-mrelax 
+\&\-mwarn\-mcu 
+\&\-mcode\-region=  \-mdata\-region= 
+\&\-msilicon\-errata=  \-msilicon\-errata\-warn= 
+\&\-mhwmult=  \-minrt\fR
+.Sp
+\&\fI\s-1NDS32\s0 Options\fR
+\&\fB\-mbig\-endian  \-mlittle\-endian 
+\&\-mreduced\-regs  \-mfull\-regs 
+\&\-mcmov  \-mno\-cmov 
+\&\-mext\-perf  \-mno\-ext\-perf 
+\&\-mext\-perf2  \-mno\-ext\-perf2 
+\&\-mext\-string  \-mno\-ext\-string 
+\&\-mv3push  \-mno\-v3push 
+\&\-m16bit  \-mno\-16bit 
+\&\-misr\-vector\-size=\fR\fInum\fR 
+\&\fB\-mcache\-block\-size=\fR\fInum\fR 
+\&\fB\-march=\fR\fIarch\fR 
+\&\fB\-mcmodel=\fR\fIcode-model\fR 
+\&\fB\-mctor\-dtor  \-mrelax\fR
+.Sp
+\&\fINios \s-1II\s0 Options\fR
+\&\fB\-G\fR \fInum\fR  \fB\-mgpopt=\fR\fIoption\fR  \fB\-mgpopt  \-mno\-gpopt 
+\&\-mgprel\-sec=\fR\fIregexp\fR  \fB\-mr0rel\-sec=\fR\fIregexp\fR 
+\&\fB\-mel  \-meb 
+\&\-mno\-bypass\-cache  \-mbypass\-cache 
+\&\-mno\-cache\-volatile  \-mcache\-volatile 
+\&\-mno\-fast\-sw\-div  \-mfast\-sw\-div 
+\&\-mhw\-mul  \-mno\-hw\-mul  \-mhw\-mulx  \-mno\-hw\-mulx  \-mno\-hw\-div  \-mhw\-div 
+\&\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR  \fB\-mno\-custom\-\fR\fIinsn\fR 
+\&\fB\-mcustom\-fpu\-cfg=\fR\fIname\fR 
+\&\fB\-mhal  \-msmallc  \-msys\-crt0=\fR\fIname\fR  \fB\-msys\-lib=\fR\fIname\fR 
+\&\fB\-march=\fR\fIarch\fR  \fB\-mbmx  \-mno\-bmx  \-mcdx  \-mno\-cdx\fR
+.Sp
+\&\fINvidia \s-1PTX\s0 Options\fR
+\&\fB\-m32  \-m64  \-mmainkernel  \-moptimize\fR
+.Sp
+\&\fIOpenRISC Options\fR
+\&\fB\-mboard=\fR\fIname\fR  \fB\-mnewlib  \-mhard\-mul  \-mhard\-div 
+\&\-msoft\-mul  \-msoft\-div 
+\&\-mcmov  \-mror  \-msext  \-msfimm  \-mshftimm\fR
+.Sp
+\&\fI\s-1PDP\-11\s0 Options\fR
+\&\fB\-mfpu  \-msoft\-float  \-mac0  \-mno\-ac0  \-m40  \-m45  \-m10 
+\&\-mint32  \-mno\-int16  \-mint16  \-mno\-int32 
+\&\-msplit  \-munix\-asm  \-mdec\-asm  \-mgnu\-asm  \-mlra\fR
+.Sp
+\&\fIpicoChip Options\fR
+\&\fB\-mae=\fR\fIae_type\fR  \fB\-mvliw\-lookahead=\fR\fIN\fR 
+\&\fB\-msymbol\-as\-address  \-mno\-inefficient\-warnings\fR
+.Sp
+\&\fIPowerPC Options\fR
+See \s-1RS/6000\s0 and PowerPC Options.
+.Sp
+\&\fIRISC-V Options\fR
+\&\fB\-mbranch\-cost=\fR\fIN\-instruction\fR 
+\&\fB\-mplt  \-mno\-plt 
+\&\-mabi=\fR\fIABI-string\fR 
+\&\fB\-mfdiv  \-mno\-fdiv 
+\&\-mdiv  \-mno\-div 
+\&\-march=\fR\fIISA-string\fR 
+\&\fB\-mtune=\fR\fIprocessor-string\fR 
+\&\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR 
+\&\fB\-msmall\-data\-limit=\fR\fIN\-bytes\fR 
+\&\fB\-msave\-restore  \-mno\-save\-restore 
+\&\-mstrict\-align  \-mno\-strict\-align 
+\&\-mcmodel=medlow  \-mcmodel=medany 
+\&\-mexplicit\-relocs  \-mno\-explicit\-relocs 
+\&\-mrelax  \-mno\-relax 
+\&\-mriscv\-attribute  \-mmo\-riscv\-attribute\fR
+.Sp
+\&\fI\s-1RL78\s0 Options\fR
+\&\fB\-msim  \-mmul=none  \-mmul=g13  \-mmul=g14  \-mallregs 
+\&\-mcpu=g10  \-mcpu=g13  \-mcpu=g14  \-mg10  \-mg13  \-mg14 
+\&\-m64bit\-doubles  \-m32bit\-doubles  \-msave\-mduc\-in\-interrupts\fR
+.Sp
+\&\fI\s-1RS/6000\s0 and PowerPC Options\fR
+\&\fB\-mcpu=\fR\fIcpu-type\fR 
+\&\fB\-mtune=\fR\fIcpu-type\fR 
+\&\fB\-mcmodel=\fR\fIcode-model\fR 
+\&\fB\-mpowerpc64 
+\&\-maltivec  \-mno\-altivec 
+\&\-mpowerpc\-gpopt  \-mno\-powerpc\-gpopt 
+\&\-mpowerpc\-gfxopt  \-mno\-powerpc\-gfxopt 
+\&\-mmfcrf  \-mno\-mfcrf  \-mpopcntb  \-mno\-popcntb  \-mpopcntd  \-mno\-popcntd 
+\&\-mfprnd  \-mno\-fprnd 
+\&\-mcmpb  \-mno\-cmpb  \-mmfpgpr  \-mno\-mfpgpr  \-mhard\-dfp  \-mno\-hard\-dfp 
+\&\-mfull\-toc   \-mminimal\-toc  \-mno\-fp\-in\-toc  \-mno\-sum\-in\-toc 
+\&\-m64  \-m32  \-mxl\-compat  \-mno\-xl\-compat  \-mpe 
+\&\-malign\-power  \-malign\-natural 
+\&\-msoft\-float  \-mhard\-float  \-mmultiple  \-mno\-multiple 
+\&\-mupdate  \-mno\-update 
+\&\-mavoid\-indexed\-addresses  \-mno\-avoid\-indexed\-addresses 
+\&\-mfused\-madd  \-mno\-fused\-madd  \-mbit\-align  \-mno\-bit\-align 
+\&\-mstrict\-align  \-mno\-strict\-align  \-mrelocatable 
+\&\-mno\-relocatable  \-mrelocatable\-lib  \-mno\-relocatable\-lib 
+\&\-mtoc  \-mno\-toc  \-mlittle  \-mlittle\-endian  \-mbig  \-mbig\-endian 
+\&\-mdynamic\-no\-pic  \-mswdiv  \-msingle\-pic\-base 
+\&\-mprioritize\-restricted\-insns=\fR\fIpriority\fR 
+\&\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR 
+\&\fB\-minsert\-sched\-nops=\fR\fIscheme\fR 
+\&\fB\-mcall\-aixdesc  \-mcall\-eabi  \-mcall\-freebsd  
+\&\-mcall\-linux  \-mcall\-netbsd  \-mcall\-openbsd  
+\&\-mcall\-sysv  \-mcall\-sysv\-eabi  \-mcall\-sysv\-noeabi 
+\&\-mtraceback=\fR\fItraceback_type\fR 
+\&\fB\-maix\-struct\-return  \-msvr4\-struct\-return 
+\&\-mabi=\fR\fIabi-type\fR  \fB\-msecure\-plt  \-mbss\-plt 
+\&\-mlongcall  \-mno\-longcall  \-mpltseq  \-mno\-pltseq  
+\&\-mblock\-move\-inline\-limit=\fR\fInum\fR 
+\&\fB\-mblock\-compare\-inline\-limit=\fR\fInum\fR 
+\&\fB\-mblock\-compare\-inline\-loop\-limit=\fR\fInum\fR 
+\&\fB\-mstring\-compare\-inline\-limit=\fR\fInum\fR 
+\&\fB\-misel  \-mno\-isel 
+\&\-mvrsave  \-mno\-vrsave 
+\&\-mmulhw  \-mno\-mulhw 
+\&\-mdlmzb  \-mno\-dlmzb 
+\&\-mprototype  \-mno\-prototype 
+\&\-msim  \-mmvme  \-mads  \-myellowknife  \-memb  \-msdata 
+\&\-msdata=\fR\fIopt\fR  \fB\-mreadonly\-in\-sdata  \-mvxworks  \-G\fR \fInum\fR 
+\&\fB\-mrecip  \-mrecip=\fR\fIopt\fR  \fB\-mno\-recip  \-mrecip\-precision 
+\&\-mno\-recip\-precision 
+\&\-mveclibabi=\fR\fItype\fR  \fB\-mfriz  \-mno\-friz 
+\&\-mpointers\-to\-nested\-functions  \-mno\-pointers\-to\-nested\-functions 
+\&\-msave\-toc\-indirect  \-mno\-save\-toc\-indirect 
+\&\-mpower8\-fusion  \-mno\-mpower8\-fusion  \-mpower8\-vector  \-mno\-power8\-vector 
+\&\-mcrypto  \-mno\-crypto  \-mhtm  \-mno\-htm 
+\&\-mquad\-memory  \-mno\-quad\-memory 
+\&\-mquad\-memory\-atomic  \-mno\-quad\-memory\-atomic 
+\&\-mcompat\-align\-parm  \-mno\-compat\-align\-parm 
+\&\-mfloat128  \-mno\-float128  \-mfloat128\-hardware  \-mno\-float128\-hardware 
+\&\-mgnu\-attribute  \-mno\-gnu\-attribute 
+\&\-mstack\-protector\-guard=\fR\fIguard\fR \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR 
+\&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR
+.Sp
+\&\fI\s-1RX\s0 Options\fR
+\&\fB\-m64bit\-doubles  \-m32bit\-doubles  \-fpu  \-nofpu
+\&\-mcpu=
+\&\-mbig\-endian\-data  \-mlittle\-endian\-data 
+\&\-msmall\-data 
+\&\-msim  \-mno\-sim
+\&\-mas100\-syntax  \-mno\-as100\-syntax
+\&\-mrelax
+\&\-mmax\-constant\-size=
+\&\-mint\-register=
+\&\-mpid
+\&\-mallow\-string\-insns  \-mno\-allow\-string\-insns
+\&\-mjsr
+\&\-mno\-warn\-multiple\-fast\-interrupts
+\&\-msave\-acc\-in\-interrupts\fR
+.Sp
+\&\fIS/390 and zSeries Options\fR
+\&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
+\&\fB\-mhard\-float  \-msoft\-float  \-mhard\-dfp  \-mno\-hard\-dfp 
+\&\-mlong\-double\-64  \-mlong\-double\-128 
+\&\-mbackchain  \-mno\-backchain  \-mpacked\-stack  \-mno\-packed\-stack 
+\&\-msmall\-exec  \-mno\-small\-exec  \-mmvcle  \-mno\-mvcle 
+\&\-m64  \-m31  \-mdebug  \-mno\-debug  \-mesa  \-mzarch 
+\&\-mhtm  \-mvx  \-mzvector 
+\&\-mtpf\-trace  \-mno\-tpf\-trace  \-mfused\-madd  \-mno\-fused\-madd 
+\&\-mwarn\-framesize  \-mwarn\-dynamicstack  \-mstack\-size  \-mstack\-guard 
+\&\-mhotpatch=\fR\fIhalfwords\fR\fB,\fR\fIhalfwords\fR
+.Sp
+\&\fIScore Options\fR
+\&\fB\-meb  \-mel 
+\&\-mnhwloop 
+\&\-muls 
+\&\-mmac 
+\&\-mscore5  \-mscore5u  \-mscore7  \-mscore7d\fR
+.Sp
+\&\fI\s-1SH\s0 Options\fR
+\&\fB\-m1  \-m2  \-m2e 
+\&\-m2a\-nofpu  \-m2a\-single\-only  \-m2a\-single  \-m2a 
+\&\-m3  \-m3e 
+\&\-m4\-nofpu  \-m4\-single\-only  \-m4\-single  \-m4 
+\&\-m4a\-nofpu  \-m4a\-single\-only  \-m4a\-single  \-m4a  \-m4al 
+\&\-mb  \-ml  \-mdalign  \-mrelax 
+\&\-mbigtable  \-mfmovd  \-mrenesas  \-mno\-renesas  \-mnomacsave 
+\&\-mieee  \-mno\-ieee  \-mbitops  \-misize  \-minline\-ic_invalidate  \-mpadstruct 
+\&\-mprefergot  \-musermode  \-multcost=\fR\fInumber\fR  \fB\-mdiv=\fR\fIstrategy\fR 
+\&\fB\-mdivsi3_libfunc=\fR\fIname\fR  \fB\-mfixed\-range=\fR\fIregister-range\fR 
+\&\fB\-maccumulate\-outgoing\-args 
+\&\-matomic\-model=\fR\fIatomic-model\fR 
+\&\fB\-mbranch\-cost=\fR\fInum\fR  \fB\-mzdcbranch  \-mno\-zdcbranch 
+\&\-mcbranch\-force\-delay\-slot 
+\&\-mfused\-madd  \-mno\-fused\-madd  \-mfsca  \-mno\-fsca  \-mfsrra  \-mno\-fsrra 
+\&\-mpretend\-cmove  \-mtas\fR
+.Sp
+\&\fISolaris 2 Options\fR
+\&\fB\-mclear\-hwcap  \-mno\-clear\-hwcap  \-mimpure\-text  \-mno\-impure\-text 
+\&\-pthreads\fR
+.Sp
+\&\fI\s-1SPARC\s0 Options\fR
+\&\fB\-mcpu=\fR\fIcpu-type\fR 
+\&\fB\-mtune=\fR\fIcpu-type\fR 
+\&\fB\-mcmodel=\fR\fIcode-model\fR 
+\&\fB\-mmemory\-model=\fR\fImem-model\fR 
+\&\fB\-m32  \-m64  \-mapp\-regs  \-mno\-app\-regs 
+\&\-mfaster\-structs  \-mno\-faster\-structs  \-mflat  \-mno\-flat 
+\&\-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float 
+\&\-mhard\-quad\-float  \-msoft\-quad\-float 
+\&\-mstack\-bias  \-mno\-stack\-bias 
+\&\-mstd\-struct\-return  \-mno\-std\-struct\-return 
+\&\-munaligned\-doubles  \-mno\-unaligned\-doubles 
+\&\-muser\-mode  \-mno\-user\-mode 
+\&\-mv8plus  \-mno\-v8plus  \-mvis  \-mno\-vis 
+\&\-mvis2  \-mno\-vis2  \-mvis3  \-mno\-vis3 
+\&\-mvis4  \-mno\-vis4  \-mvis4b  \-mno\-vis4b 
+\&\-mcbcond  \-mno\-cbcond  \-mfmaf  \-mno\-fmaf  \-mfsmuld  \-mno\-fsmuld  
+\&\-mpopc  \-mno\-popc  \-msubxc  \-mno\-subxc 
+\&\-mfix\-at697f  \-mfix\-ut699  \-mfix\-ut700  \-mfix\-gr712rc 
+\&\-mlra  \-mno\-lra\fR
+.Sp
+\&\fI\s-1SPU\s0 Options\fR
+\&\fB\-mwarn\-reloc  \-merror\-reloc 
+\&\-msafe\-dma  \-munsafe\-dma 
+\&\-mbranch\-hints 
+\&\-msmall\-mem  \-mlarge\-mem  \-mstdmain 
+\&\-mfixed\-range=\fR\fIregister-range\fR 
+\&\fB\-mea32  \-mea64 
+\&\-maddress\-space\-conversion  \-mno\-address\-space\-conversion 
+\&\-mcache\-size=\fR\fIcache-size\fR 
+\&\fB\-matomic\-updates  \-mno\-atomic\-updates\fR
+.Sp
+\&\fISystem V Options\fR
+\&\fB\-Qy  \-Qn  \-YP,\fR\fIpaths\fR  \fB\-Ym,\fR\fIdir\fR
+.Sp
+\&\fITILE-Gx Options\fR
+\&\fB\-mcpu=CPU  \-m32  \-m64  \-mbig\-endian  \-mlittle\-endian 
+\&\-mcmodel=\fR\fIcode-model\fR
+.Sp
+\&\fITILEPro Options\fR
+\&\fB\-mcpu=\fR\fIcpu\fR  \fB\-m32\fR
+.Sp
+\&\fIV850 Options\fR
+\&\fB\-mlong\-calls  \-mno\-long\-calls  \-mep  \-mno\-ep 
+\&\-mprolog\-function  \-mno\-prolog\-function  \-mspace 
+\&\-mtda=\fR\fIn\fR  \fB\-msda=\fR\fIn\fR  \fB\-mzda=\fR\fIn\fR 
+\&\fB\-mapp\-regs  \-mno\-app\-regs 
+\&\-mdisable\-callt  \-mno\-disable\-callt 
+\&\-mv850e2v3  \-mv850e2  \-mv850e1  \-mv850es 
+\&\-mv850e  \-mv850  \-mv850e3v5 
+\&\-mloop 
+\&\-mrelax 
+\&\-mlong\-jumps 
+\&\-msoft\-float 
+\&\-mhard\-float 
+\&\-mgcc\-abi 
+\&\-mrh850\-abi 
+\&\-mbig\-switch\fR
+.Sp
+\&\fI\s-1VAX\s0 Options\fR
+\&\fB\-mg  \-mgnu  \-munix\fR
+.Sp
+\&\fIVisium Options\fR
+\&\fB\-mdebug  \-msim  \-mfpu  \-mno\-fpu  \-mhard\-float  \-msoft\-float 
+\&\-mcpu=\fR\fIcpu-type\fR  \fB\-mtune=\fR\fIcpu-type\fR  \fB\-msv\-mode  \-muser\-mode\fR
+.Sp
+\&\fI\s-1VMS\s0 Options\fR
+\&\fB\-mvms\-return\-codes  \-mdebug\-main=\fR\fIprefix\fR  \fB\-mmalloc64 
+\&\-mpointer\-size=\fR\fIsize\fR
+.Sp
+\&\fIVxWorks Options\fR
+\&\fB\-mrtp  \-non\-static  \-Bstatic  \-Bdynamic 
+\&\-Xbind\-lazy  \-Xbind\-now\fR
+.Sp
+\&\fIx86 Options\fR
+\&\fB\-mtune=\fR\fIcpu-type\fR  \fB\-march=\fR\fIcpu-type\fR 
+\&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR  \fB\-mdump\-tune\-features  \-mno\-default 
+\&\-mfpmath=\fR\fIunit\fR 
+\&\fB\-masm=\fR\fIdialect\fR  \fB\-mno\-fancy\-math\-387 
+\&\-mno\-fp\-ret\-in\-387  \-m80387  \-mhard\-float  \-msoft\-float 
+\&\-mno\-wide\-multiply  \-mrtd  \-malign\-double 
+\&\-mpreferred\-stack\-boundary=\fR\fInum\fR 
+\&\fB\-mincoming\-stack\-boundary=\fR\fInum\fR 
+\&\fB\-mcld  \-mcx16  \-msahf  \-mmovbe  \-mcrc32 
+\&\-mrecip  \-mrecip=\fR\fIopt\fR 
+\&\fB\-mvzeroupper  \-mprefer\-avx128  \-mprefer\-vector\-width=\fR\fIopt\fR 
+\&\fB\-mmmx  \-msse  \-msse2  \-msse3  \-mssse3  \-msse4.1  \-msse4.2  \-msse4  \-mavx 
+\&\-mavx2  \-mavx512f  \-mavx512pf  \-mavx512er  \-mavx512cd  \-mavx512vl 
+\&\-mavx512bw  \-mavx512dq  \-mavx512ifma  \-mavx512vbmi  \-msha  \-maes 
+\&\-mpclmul  \-mfsgsbase  \-mrdrnd  \-mf16c  \-mfma  \-mpconfig  \-mwbnoinvd  
+\&\-mptwrite  \-mprefetchwt1  \-mclflushopt  \-mclwb  \-mxsavec  \-mxsaves 
+\&\-msse4a  \-m3dnow  \-m3dnowa  \-mpopcnt  \-mabm  \-mbmi  \-mtbm  \-mfma4  \-mxop 
+\&\-madx  \-mlzcnt  \-mbmi2  \-mfxsr  \-mxsave  \-mxsaveopt  \-mrtm  \-mhle  \-mlwp 
+\&\-mmwaitx  \-mclzero  \-mpku  \-mthreads  \-mgfni  \-mvaes  \-mwaitpkg 
+\&\-mshstk \-mmanual\-endbr \-mforce\-indirect\-call  \-mavx512vbmi2 
+\&\-mvpclmulqdq  \-mavx512bitalg  \-mmovdiri  \-mmovdir64b  \-mavx512vpopcntdq 
+\&\-mavx5124fmaps  \-mavx512vnni  \-mavx5124vnniw  \-mprfchw  \-mrdpid 
+\&\-mrdseed  \-msgx 
+\&\-mcldemote  \-mms\-bitfields  \-mno\-align\-stringops  \-minline\-all\-stringops 
+\&\-minline\-stringops\-dynamically  \-mstringop\-strategy=\fR\fIalg\fR 
+\&\fB\-mmemcpy\-strategy=\fR\fIstrategy\fR  \fB\-mmemset\-strategy=\fR\fIstrategy\fR 
+\&\fB\-mpush\-args  \-maccumulate\-outgoing\-args  \-m128bit\-long\-double 
+\&\-m96bit\-long\-double  \-mlong\-double\-64  \-mlong\-double\-80  \-mlong\-double\-128 
+\&\-mregparm=\fR\fInum\fR  \fB\-msseregparm 
+\&\-mveclibabi=\fR\fItype\fR  \fB\-mvect8\-ret\-in\-mem 
+\&\-mpc32  \-mpc64  \-mpc80  \-mstackrealign 
+\&\-momit\-leaf\-frame\-pointer  \-mno\-red\-zone  \-mno\-tls\-direct\-seg\-refs 
+\&\-mcmodel=\fR\fIcode-model\fR  \fB\-mabi=\fR\fIname\fR  \fB\-maddress\-mode=\fR\fImode\fR 
+\&\fB\-m32  \-m64  \-mx32  \-m16  \-miamcu  \-mlarge\-data\-threshold=\fR\fInum\fR 
+\&\fB\-msse2avx  \-mfentry  \-mrecord\-mcount  \-mnop\-mcount  \-m8bit\-idiv 
+\&\-minstrument\-return=\fR\fItype\fR \fB\-mfentry\-name=\fR\fIname\fR \fB\-mfentry\-section=\fR\fIname\fR 
+\&\fB\-mavx256\-split\-unaligned\-load  \-mavx256\-split\-unaligned\-store 
+\&\-malign\-data=\fR\fItype\fR  \fB\-mstack\-protector\-guard=\fR\fIguard\fR 
+\&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR 
+\&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR 
+\&\fB\-mstack\-protector\-guard\-symbol=\fR\fIsymbol\fR 
+\&\fB\-mgeneral\-regs\-only  \-mcall\-ms2sysv\-xlogues 
+\&\-mindirect\-branch=\fR\fIchoice\fR  \fB\-mfunction\-return=\fR\fIchoice\fR 
+\&\fB\-mindirect\-branch\-register\fR
+.Sp
+\&\fIx86 Windows Options\fR
+\&\fB\-mconsole  \-mcygwin  \-mno\-cygwin  \-mdll 
+\&\-mnop\-fun\-dllimport  \-mthread 
+\&\-municode  \-mwin32  \-mwindows  \-fno\-set\-stack\-executable\fR
+.Sp
+\&\fIXstormy16 Options\fR
+\&\fB\-msim\fR
+.Sp
+\&\fIXtensa Options\fR
+\&\fB\-mconst16  \-mno\-const16 
+\&\-mfused\-madd  \-mno\-fused\-madd 
+\&\-mforce\-no\-pic 
+\&\-mserialize\-volatile  \-mno\-serialize\-volatile 
+\&\-mtext\-section\-literals  \-mno\-text\-section\-literals 
+\&\-mauto\-litpools  \-mno\-auto\-litpools 
+\&\-mtarget\-align  \-mno\-target\-align 
+\&\-mlongcalls  \-mno\-longcalls\fR
+.Sp
+\&\fIzSeries Options\fR
+See S/390 and zSeries Options.
+.SS "Options Controlling the Kind of Output"
+.IX Subsection "Options Controlling the Kind of Output"
+Compilation can involve up to four stages: preprocessing, compilation
+proper, assembly and linking, always in that order.  \s-1GCC\s0 is capable of
+preprocessing and compiling several files either into several
+assembler input files, or into one assembler input file; then each
+assembler input file produces an object file, and linking combines all
+the object files (those newly compiled, and those specified as input)
+into an executable file.
+.PP
+For any given input file, the file name suffix determines what kind of
+compilation is done:
+.IP "\fIfile\fR\fB.c\fR" 4
+.IX Item "file.c"
+C source code that must be preprocessed.
+.IP "\fIfile\fR\fB.i\fR" 4
+.IX Item "file.i"
+C source code that should not be preprocessed.
+.IP "\fIfile\fR\fB.ii\fR" 4
+.IX Item "file.ii"
+\&\*(C+ source code that should not be preprocessed.
+.IP "\fIfile\fR\fB.m\fR" 4
+.IX Item "file.m"
+Objective-C source code.  Note that you must link with the \fIlibobjc\fR
+library to make an Objective-C program work.
+.IP "\fIfile\fR\fB.mi\fR" 4
+.IX Item "file.mi"
+Objective-C source code that should not be preprocessed.
+.IP "\fIfile\fR\fB.mm\fR" 4
+.IX Item "file.mm"
+.PD 0
+.IP "\fIfile\fR\fB.M\fR" 4
+.IX Item "file.M"
+.PD
+Objective\-\*(C+ source code.  Note that you must link with the \fIlibobjc\fR
+library to make an Objective\-\*(C+ program work.  Note that \fB.M\fR refers
+to a literal capital M.
+.IP "\fIfile\fR\fB.mii\fR" 4
+.IX Item "file.mii"
+Objective\-\*(C+ source code that should not be preprocessed.
+.IP "\fIfile\fR\fB.h\fR" 4
+.IX Item "file.h"
+C, \*(C+, Objective-C or Objective\-\*(C+ header file to be turned into a
+precompiled header (default), or C, \*(C+ header file to be turned into an
+Ada spec (via the \fB\-fdump\-ada\-spec\fR switch).
+.IP "\fIfile\fR\fB.cc\fR" 4
+.IX Item "file.cc"
+.PD 0
+.IP "\fIfile\fR\fB.cp\fR" 4
+.IX Item "file.cp"
+.IP "\fIfile\fR\fB.cxx\fR" 4
+.IX Item "file.cxx"
+.IP "\fIfile\fR\fB.cpp\fR" 4
+.IX Item "file.cpp"
+.IP "\fIfile\fR\fB.CPP\fR" 4
+.IX Item "file.CPP"
+.IP "\fIfile\fR\fB.c++\fR" 4
+.IX Item "file.c++"
+.IP "\fIfile\fR\fB.C\fR" 4
+.IX Item "file.C"
+.PD
+\&\*(C+ source code that must be preprocessed.  Note that in \fB.cxx\fR,
+the last two letters must both be literally \fBx\fR.  Likewise,
+\&\fB.C\fR refers to a literal capital C.
+.IP "\fIfile\fR\fB.mm\fR" 4
+.IX Item "file.mm"
+.PD 0
+.IP "\fIfile\fR\fB.M\fR" 4
+.IX Item "file.M"
+.PD
+Objective\-\*(C+ source code that must be preprocessed.
+.IP "\fIfile\fR\fB.mii\fR" 4
+.IX Item "file.mii"
+Objective\-\*(C+ source code that should not be preprocessed.
+.IP "\fIfile\fR\fB.hh\fR" 4
+.IX Item "file.hh"
+.PD 0
+.IP "\fIfile\fR\fB.H\fR" 4
+.IX Item "file.H"
+.IP "\fIfile\fR\fB.hp\fR" 4
+.IX Item "file.hp"
+.IP "\fIfile\fR\fB.hxx\fR" 4
+.IX Item "file.hxx"
+.IP "\fIfile\fR\fB.hpp\fR" 4
+.IX Item "file.hpp"
+.IP "\fIfile\fR\fB.HPP\fR" 4
+.IX Item "file.HPP"
+.IP "\fIfile\fR\fB.h++\fR" 4
+.IX Item "file.h++"
+.IP "\fIfile\fR\fB.tcc\fR" 4
+.IX Item "file.tcc"
+.PD
+\&\*(C+ header file to be turned into a precompiled header or Ada spec.
+.IP "\fIfile\fR\fB.f\fR" 4
+.IX Item "file.f"
+.PD 0
+.IP "\fIfile\fR\fB.for\fR" 4
+.IX Item "file.for"
+.IP "\fIfile\fR\fB.ftn\fR" 4
+.IX Item "file.ftn"
+.PD
+Fixed form Fortran source code that should not be preprocessed.
+.IP "\fIfile\fR\fB.F\fR" 4
+.IX Item "file.F"
+.PD 0
+.IP "\fIfile\fR\fB.FOR\fR" 4
+.IX Item "file.FOR"
+.IP "\fIfile\fR\fB.fpp\fR" 4
+.IX Item "file.fpp"
+.IP "\fIfile\fR\fB.FPP\fR" 4
+.IX Item "file.FPP"
+.IP "\fIfile\fR\fB.FTN\fR" 4
+.IX Item "file.FTN"
+.PD
+Fixed form Fortran source code that must be preprocessed (with the traditional
+preprocessor).
+.IP "\fIfile\fR\fB.f90\fR" 4
+.IX Item "file.f90"
+.PD 0
+.IP "\fIfile\fR\fB.f95\fR" 4
+.IX Item "file.f95"
+.IP "\fIfile\fR\fB.f03\fR" 4
+.IX Item "file.f03"
+.IP "\fIfile\fR\fB.f08\fR" 4
+.IX Item "file.f08"
+.PD
+Free form Fortran source code that should not be preprocessed.
+.IP "\fIfile\fR\fB.F90\fR" 4
+.IX Item "file.F90"
+.PD 0
+.IP "\fIfile\fR\fB.F95\fR" 4
+.IX Item "file.F95"
+.IP "\fIfile\fR\fB.F03\fR" 4
+.IX Item "file.F03"
+.IP "\fIfile\fR\fB.F08\fR" 4
+.IX Item "file.F08"
+.PD
+Free form Fortran source code that must be preprocessed (with the
+traditional preprocessor).
+.IP "\fIfile\fR\fB.go\fR" 4
+.IX Item "file.go"
+Go source code.
+.IP "\fIfile\fR\fB.brig\fR" 4
+.IX Item "file.brig"
+\&\s-1BRIG\s0 files (binary representation of \s-1HSAIL\s0).
+.IP "\fIfile\fR\fB.d\fR" 4
+.IX Item "file.d"
+D source code.
+.IP "\fIfile\fR\fB.di\fR" 4
+.IX Item "file.di"
+D interface file.
+.IP "\fIfile\fR\fB.dd\fR" 4
+.IX Item "file.dd"
+D documentation code (Ddoc).
+.IP "\fIfile\fR\fB.ads\fR" 4
+.IX Item "file.ads"
+Ada source code file that contains a library unit declaration (a
+declaration of a package, subprogram, or generic, or a generic
+instantiation), or a library unit renaming declaration (a package,
+generic, or subprogram renaming declaration).  Such files are also
+called \fIspecs\fR.
+.IP "\fIfile\fR\fB.adb\fR" 4
+.IX Item "file.adb"
+Ada source code file containing a library unit body (a subprogram or
+package body).  Such files are also called \fIbodies\fR.
+.IP "\fIfile\fR\fB.s\fR" 4
+.IX Item "file.s"
+Assembler code.
+.IP "\fIfile\fR\fB.S\fR" 4
+.IX Item "file.S"
+.PD 0
+.IP "\fIfile\fR\fB.sx\fR" 4
+.IX Item "file.sx"
+.PD
+Assembler code that must be preprocessed.
+.IP "\fIother\fR" 4
+.IX Item "other"
+An object file to be fed straight into linking.
+Any file name with no recognized suffix is treated this way.
+.PP
+You can specify the input language explicitly with the \fB\-x\fR option:
+.IP "\fB\-x\fR \fIlanguage\fR" 4
+.IX Item "-x language"
+Specify explicitly the \fIlanguage\fR for the following input files
+(rather than letting the compiler choose a default based on the file
+name suffix).  This option applies to all following input files until
+the next \fB\-x\fR option.  Possible values for \fIlanguage\fR are:
+.Sp
+.Vb 10
+\&        c  c\-header  cpp\-output
+\&        c++  c++\-header  c++\-cpp\-output
+\&        objective\-c  objective\-c\-header  objective\-c\-cpp\-output
+\&        objective\-c++ objective\-c++\-header objective\-c++\-cpp\-output
+\&        assembler  assembler\-with\-cpp
+\&        ada
+\&        d
+\&        f77  f77\-cpp\-input f95  f95\-cpp\-input
+\&        go
+\&        brig
+.Ve
+.IP "\fB\-x none\fR" 4
+.IX Item "-x none"
+Turn off any specification of a language, so that subsequent files are
+handled according to their file name suffixes (as they are if \fB\-x\fR
+has not been used at all).
+.PP
+If you only want some of the stages of compilation, you can use
+\&\fB\-x\fR (or filename suffixes) to tell \fBgcc\fR where to start, and
+one of the options \fB\-c\fR, \fB\-S\fR, or \fB\-E\fR to say where
+\&\fBgcc\fR is to stop.  Note that some combinations (for example,
+\&\fB\-x cpp-output \-E\fR) instruct \fBgcc\fR to do nothing at all.
+.IP "\fB\-c\fR" 4
+.IX Item "-c"
+Compile or assemble the source files, but do not link.  The linking
+stage simply is not done.  The ultimate output is in the form of an
+object file for each source file.
+.Sp
+By default, the object file name for a source file is made by replacing
+the suffix \fB.c\fR, \fB.i\fR, \fB.s\fR, etc., with \fB.o\fR.
+.Sp
+Unrecognized input files, not requiring compilation or assembly, are
+ignored.
+.IP "\fB\-S\fR" 4
+.IX Item "-S"
+Stop after the stage of compilation proper; do not assemble.  The output
+is in the form of an assembler code file for each non-assembler input
+file specified.
+.Sp
+By default, the assembler file name for a source file is made by
+replacing the suffix \fB.c\fR, \fB.i\fR, etc., with \fB.s\fR.
+.Sp
+Input files that don't require compilation are ignored.
+.IP "\fB\-E\fR" 4
+.IX Item "-E"
+Stop after the preprocessing stage; do not run the compiler proper.  The
+output is in the form of preprocessed source code, which is sent to the
+standard output.
+.Sp
+Input files that don't require preprocessing are ignored.
+.IP "\fB\-o\fR \fIfile\fR" 4
+.IX Item "-o file"
+Place output in file \fIfile\fR.  This applies to whatever
+sort of output is being produced, whether it be an executable file,
+an object file, an assembler file or preprocessed C code.
+.Sp
+If \fB\-o\fR is not specified, the default is to put an executable
+file in \fIa.out\fR, the object file for
+\&\fI\fIsource\fI.\fIsuffix\fI\fR in \fI\fIsource\fI.o\fR, its
+assembler file in \fI\fIsource\fI.s\fR, a precompiled header file in
+\&\fI\fIsource\fI.\fIsuffix\fI.gch\fR, and all preprocessed C source on
+standard output.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+Print (on standard error output) the commands executed to run the stages
+of compilation.  Also print the version number of the compiler driver
+program and of the preprocessor and the compiler proper.
+.IP "\fB\-###\fR" 4
+.IX Item "-###"
+Like \fB\-v\fR except the commands are not executed and arguments
+are quoted unless they contain only alphanumeric characters or \f(CW\*(C`./\-_\*(C'\fR.
+This is useful for shell scripts to capture the driver-generated command lines.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print (on the standard output) a description of the command-line options
+understood by \fBgcc\fR.  If the \fB\-v\fR option is also specified
+then \fB\-\-help\fR is also passed on to the various processes
+invoked by \fBgcc\fR, so that they can display the command-line options
+they accept.  If the \fB\-Wextra\fR option has also been specified
+(prior to the \fB\-\-help\fR option), then command-line options that
+have no documentation associated with them are also displayed.
+.IP "\fB\-\-target\-help\fR" 4
+.IX Item "--target-help"
+Print (on the standard output) a description of target-specific command-line
+options for each tool.  For some targets extra target-specific
+information may also be printed.
+.IP "\fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR]" 4
+.IX Item "--help={class|[^]qualifier}[,...]"
+Print (on the standard output) a description of the command-line
+options understood by the compiler that fit into all specified classes
+and qualifiers.  These are the supported classes:
+.RS 4
+.IP "\fBoptimizers\fR" 4
+.IX Item "optimizers"
+Display all of the optimization options supported by the
+compiler.
+.IP "\fBwarnings\fR" 4
+.IX Item "warnings"
+Display all of the options controlling warning messages
+produced by the compiler.
+.IP "\fBtarget\fR" 4
+.IX Item "target"
+Display target-specific options.  Unlike the
+\&\fB\-\-target\-help\fR option however, target-specific options of the
+linker and assembler are not displayed.  This is because those
+tools do not currently support the extended \fB\-\-help=\fR syntax.
+.IP "\fBparams\fR" 4
+.IX Item "params"
+Display the values recognized by the \fB\-\-param\fR
+option.
+.IP "\fIlanguage\fR" 4
+.IX Item "language"
+Display the options supported for \fIlanguage\fR, where
+\&\fIlanguage\fR is the name of one of the languages supported in this
+version of \s-1GCC.\s0
+.IP "\fBcommon\fR" 4
+.IX Item "common"
+Display the options that are common to all languages.
+.RE
+.RS 4
+.Sp
+These are the supported qualifiers:
+.IP "\fBundocumented\fR" 4
+.IX Item "undocumented"
+Display only those options that are undocumented.
+.IP "\fBjoined\fR" 4
+.IX Item "joined"
+Display options taking an argument that appears after an equal
+sign in the same continuous piece of text, such as:
+\&\fB\-\-help=target\fR.
+.IP "\fBseparate\fR" 4
+.IX Item "separate"
+Display options taking an argument that appears as a separate word
+following the original option, such as: \fB\-o output-file\fR.
+.RE
+.RS 4
+.Sp
+Thus for example to display all the undocumented target-specific
+switches supported by the compiler, use:
+.Sp
+.Vb 1
+\&        \-\-help=target,undocumented
+.Ve
+.Sp
+The sense of a qualifier can be inverted by prefixing it with the
+\&\fB^\fR character, so for example to display all binary warning
+options (i.e., ones that are either on or off and that do not take an
+argument) that have a description, use:
+.Sp
+.Vb 1
+\&        \-\-help=warnings,^joined,^undocumented
+.Ve
+.Sp
+The argument to \fB\-\-help=\fR should not consist solely of inverted
+qualifiers.
+.Sp
+Combining several classes is possible, although this usually
+restricts the output so much that there is nothing to display.  One
+case where it does work, however, is when one of the classes is
+\&\fItarget\fR.  For example, to display all the target-specific
+optimization options, use:
+.Sp
+.Vb 1
+\&        \-\-help=target,optimizers
+.Ve
+.Sp
+The \fB\-\-help=\fR option can be repeated on the command line.  Each
+successive use displays its requested class of options, skipping
+those that have already been displayed.  If \fB\-\-help\fR is also
+specified anywhere on the command line then this takes precedence
+over any \fB\-\-help=\fR option.
+.Sp
+If the \fB\-Q\fR option appears on the command line before the
+\&\fB\-\-help=\fR option, then the descriptive text displayed by
+\&\fB\-\-help=\fR is changed.  Instead of describing the displayed
+options, an indication is given as to whether the option is enabled,
+disabled or set to a specific value (assuming that the compiler
+knows this at the point where the \fB\-\-help=\fR option is used).
+.Sp
+Here is a truncated example from the \s-1ARM\s0 port of \fBgcc\fR:
+.Sp
+.Vb 5
+\&          % gcc \-Q \-mabi=2 \-\-help=target \-c
+\&          The following options are target specific:
+\&          \-mabi=                                2
+\&          \-mabort\-on\-noreturn                   [disabled]
+\&          \-mapcs                                [disabled]
+.Ve
+.Sp
+The output is sensitive to the effects of previous command-line
+options, so for example it is possible to find out which optimizations
+are enabled at \fB\-O2\fR by using:
+.Sp
+.Vb 1
+\&        \-Q \-O2 \-\-help=optimizers
+.Ve
+.Sp
+Alternatively you can discover which binary optimizations are enabled
+by \fB\-O3\fR by using:
+.Sp
+.Vb 3
+\&        gcc \-c \-Q \-O3 \-\-help=optimizers > /tmp/O3\-opts
+\&        gcc \-c \-Q \-O2 \-\-help=optimizers > /tmp/O2\-opts
+\&        diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled
+.Ve
+.RE
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+Display the version number and copyrights of the invoked \s-1GCC.\s0
+.IP "\fB\-pass\-exit\-codes\fR" 4
+.IX Item "-pass-exit-codes"
+Normally the \fBgcc\fR program exits with the code of 1 if any
+phase of the compiler returns a non-success return code.  If you specify
+\&\fB\-pass\-exit\-codes\fR, the \fBgcc\fR program instead returns with
+the numerically highest error produced by any phase returning an error
+indication.  The C, \*(C+, and Fortran front ends return 4 if an internal
+compiler error is encountered.
+.IP "\fB\-pipe\fR" 4
+.IX Item "-pipe"
+Use pipes rather than temporary files for communication between the
+various stages of compilation.  This fails to work on some systems where
+the assembler is unable to read from a pipe; but the \s-1GNU\s0 assembler has
+no trouble.
+.IP "\fB\-specs=\fR\fIfile\fR" 4
+.IX Item "-specs=file"
+Process \fIfile\fR after the compiler reads in the standard \fIspecs\fR
+file, in order to override the defaults which the \fBgcc\fR driver
+program uses when determining what switches to pass to \fBcc1\fR,
+\&\fBcc1plus\fR, \fBas\fR, \fBld\fR, etc.  More than one
+\&\fB\-specs=\fR\fIfile\fR can be specified on the command line, and they
+are processed in order, from left to right.
+.IP "\fB\-wrapper\fR" 4
+.IX Item "-wrapper"
+Invoke all subcommands under a wrapper program.  The name of the
+wrapper program and its parameters are passed as a comma separated
+list.
+.Sp
+.Vb 1
+\&        gcc \-c t.c \-wrapper gdb,\-\-args
+.Ve
+.Sp
+This invokes all subprograms of \fBgcc\fR under
+\&\fBgdb \-\-args\fR, thus the invocation of \fBcc1\fR is
+\&\fBgdb \-\-args cc1 ...\fR.
+.IP "\fB\-ffile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
+.IX Item "-ffile-prefix-map=old=new"
+When compiling files residing in directory \fI\fIold\fI\fR, record
+any references to them in the result of the compilation as if the
+files resided in directory \fI\fInew\fI\fR instead.  Specifying this
+option is equivalent to specifying all the individual
+\&\fB\-f*\-prefix\-map\fR options.  This can be used to make reproducible
+builds that are location independent.  See also
+\&\fB\-fmacro\-prefix\-map\fR and \fB\-fdebug\-prefix\-map\fR.
+.IP "\fB\-fplugin=\fR\fIname\fR\fB.so\fR" 4
+.IX Item "-fplugin=name.so"
+Load the plugin code in file \fIname\fR.so, assumed to be a
+shared object to be dlopen'd by the compiler.  The base name of
+the shared object file is used to identify the plugin for the
+purposes of argument parsing (See
+\&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR below).
+Each plugin should define the callback functions specified in the
+Plugins \s-1API.\s0
+.IP "\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR" 4
+.IX Item "-fplugin-arg-name-key=value"
+Define an argument called \fIkey\fR with a value of \fIvalue\fR
+for the plugin called \fIname\fR.
+.IP "\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR]" 4
+.IX Item "-fdump-ada-spec[-slim]"
+For C and \*(C+ source and include files, generate corresponding Ada specs.
+.IP "\fB\-fada\-spec\-parent=\fR\fIunit\fR" 4
+.IX Item "-fada-spec-parent=unit"
+In conjunction with \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] above, generate
+Ada specs as child units of parent \fIunit\fR.
+.IP "\fB\-fdump\-go\-spec=\fR\fIfile\fR" 4
+.IX Item "-fdump-go-spec=file"
+For input files in any language, generate corresponding Go
+declarations in \fIfile\fR.  This generates Go \f(CW\*(C`const\*(C'\fR,
+\&\f(CW\*(C`type\*(C'\fR, \f(CW\*(C`var\*(C'\fR, and \f(CW\*(C`func\*(C'\fR declarations which may be a
+useful way to start writing a Go interface to code written in some
+other language.
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.SS "Compiling \*(C+ Programs"
+.IX Subsection "Compiling Programs"
+\&\*(C+ source files conventionally use one of the suffixes \fB.C\fR,
+\&\fB.cc\fR, \fB.cpp\fR, \fB.CPP\fR, \fB.c++\fR, \fB.cp\fR, or
+\&\fB.cxx\fR; \*(C+ header files often use \fB.hh\fR, \fB.hpp\fR,
+\&\fB.H\fR, or (for shared template code) \fB.tcc\fR; and
+preprocessed \*(C+ files use the suffix \fB.ii\fR.  \s-1GCC\s0 recognizes
+files with these names and compiles them as \*(C+ programs even if you
+call the compiler the same way as for compiling C programs (usually
+with the name \fBgcc\fR).
+.PP
+However, the use of \fBgcc\fR does not add the \*(C+ library.
+\&\fBg++\fR is a program that calls \s-1GCC\s0 and automatically specifies linking
+against the \*(C+ library.  It treats \fB.c\fR,
+\&\fB.h\fR and \fB.i\fR files as \*(C+ source files instead of C source
+files unless \fB\-x\fR is used.  This program is also useful when
+precompiling a C header file with a \fB.h\fR extension for use in \*(C+
+compilations.  On many systems, \fBg++\fR is also installed with
+the name \fBc++\fR.
+.PP
+When you compile \*(C+ programs, you may specify many of the same
+command-line options that you use for compiling programs in any
+language; or command-line options meaningful for C and related
+languages; or options that are meaningful only for \*(C+ programs.
+.SS "Options Controlling C Dialect"
+.IX Subsection "Options Controlling C Dialect"
+The following options control the dialect of C (or languages derived
+from C, such as \*(C+, Objective-C and Objective\-\*(C+) that the compiler
+accepts:
+.IP "\fB\-ansi\fR" 4
+.IX Item "-ansi"
+In C mode, this is equivalent to \fB\-std=c90\fR. In \*(C+ mode, it is
+equivalent to \fB\-std=c++98\fR.
+.Sp
+This turns off certain features of \s-1GCC\s0 that are incompatible with \s-1ISO
+C90\s0 (when compiling C code), or of standard \*(C+ (when compiling \*(C+ code),
+such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, and
+predefined macros such as \f(CW\*(C`unix\*(C'\fR and \f(CW\*(C`vax\*(C'\fR that identify the
+type of system you are using.  It also enables the undesirable and
+rarely used \s-1ISO\s0 trigraph feature.  For the C compiler,
+it disables recognition of \*(C+ style \fB//\fR comments as well as
+the \f(CW\*(C`inline\*(C'\fR keyword.
+.Sp
+The alternate keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_extension_\|_\*(C'\fR,
+\&\f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR continue to work despite
+\&\fB\-ansi\fR.  You would not want to use them in an \s-1ISO C\s0 program, of
+course, but it is useful to put them in header files that might be included
+in compilations done with \fB\-ansi\fR.  Alternate predefined macros
+such as \f(CW\*(C`_\|_unix_\|_\*(C'\fR and \f(CW\*(C`_\|_vax_\|_\*(C'\fR are also available, with or
+without \fB\-ansi\fR.
+.Sp
+The \fB\-ansi\fR option does not cause non-ISO programs to be
+rejected gratuitously.  For that, \fB\-Wpedantic\fR is required in
+addition to \fB\-ansi\fR.
+.Sp
+The macro \f(CW\*(C`_\|_STRICT_ANSI_\|_\*(C'\fR is predefined when the \fB\-ansi\fR
+option is used.  Some header files may notice this macro and refrain
+from declaring certain functions or defining certain macros that the
+\&\s-1ISO\s0 standard doesn't call for; this is to avoid interfering with any
+programs that might use these names for other things.
+.Sp
+Functions that are normally built in but do not have semantics
+defined by \s-1ISO C\s0 (such as \f(CW\*(C`alloca\*(C'\fR and \f(CW\*(C`ffs\*(C'\fR) are not built-in
+functions when \fB\-ansi\fR is used.
+.IP "\fB\-std=\fR" 4
+.IX Item "-std="
+Determine the language standard.   This option
+is currently only supported when compiling C or \*(C+.
+.Sp
+The compiler can accept several base standards, such as \fBc90\fR or
+\&\fBc++98\fR, and \s-1GNU\s0 dialects of those standards, such as
+\&\fBgnu90\fR or \fBgnu++98\fR.  When a base standard is specified, the
+compiler accepts all programs following that standard plus those
+using \s-1GNU\s0 extensions that do not contradict it.  For example,
+\&\fB\-std=c90\fR turns off certain features of \s-1GCC\s0 that are
+incompatible with \s-1ISO C90,\s0 such as the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR
+keywords, but not other \s-1GNU\s0 extensions that do not have a meaning in
+\&\s-1ISO C90,\s0 such as omitting the middle term of a \f(CW\*(C`?:\*(C'\fR
+expression. On the other hand, when a \s-1GNU\s0 dialect of a standard is
+specified, all features supported by the compiler are enabled, even when
+those features change the meaning of the base standard.  As a result, some
+strict-conforming programs may be rejected.  The particular standard
+is used by \fB\-Wpedantic\fR to identify which features are \s-1GNU\s0
+extensions given that version of the standard. For example
+\&\fB\-std=gnu90 \-Wpedantic\fR warns about \*(C+ style \fB//\fR
+comments, while \fB\-std=gnu99 \-Wpedantic\fR does not.
+.Sp
+A value for this option must be provided; possible values are
+.RS 4
+.IP "\fBc90\fR" 4
+.IX Item "c90"
+.PD 0
+.IP "\fBc89\fR" 4
+.IX Item "c89"
+.IP "\fBiso9899:1990\fR" 4
+.IX Item "iso9899:1990"
+.PD
+Support all \s-1ISO C90\s0 programs (certain \s-1GNU\s0 extensions that conflict
+with \s-1ISO C90\s0 are disabled). Same as \fB\-ansi\fR for C code.
+.IP "\fBiso9899:199409\fR" 4
+.IX Item "iso9899:199409"
+\&\s-1ISO C90\s0 as modified in amendment 1.
+.IP "\fBc99\fR" 4
+.IX Item "c99"
+.PD 0
+.IP "\fBc9x\fR" 4
+.IX Item "c9x"
+.IP "\fBiso9899:1999\fR" 4
+.IX Item "iso9899:1999"
+.IP "\fBiso9899:199x\fR" 4
+.IX Item "iso9899:199x"
+.PD
+\&\s-1ISO C99.\s0  This standard is substantially completely supported, modulo
+bugs and floating-point issues
+(mainly but not entirely relating to optional C99 features from
+Annexes F and G).  See
+<\fBhttp://gcc.gnu.org/c99status.html\fR> for more information.  The
+names \fBc9x\fR and \fBiso9899:199x\fR are deprecated.
+.IP "\fBc11\fR" 4
+.IX Item "c11"
+.PD 0
+.IP "\fBc1x\fR" 4
+.IX Item "c1x"
+.IP "\fBiso9899:2011\fR" 4
+.IX Item "iso9899:2011"
+.PD
+\&\s-1ISO C11,\s0 the 2011 revision of the \s-1ISO C\s0 standard.  This standard is
+substantially completely supported, modulo bugs, floating-point issues
+(mainly but not entirely relating to optional C11 features from
+Annexes F and G) and the optional Annexes K (Bounds-checking
+interfaces) and L (Analyzability).  The name \fBc1x\fR is deprecated.
+.IP "\fBc17\fR" 4
+.IX Item "c17"
+.PD 0
+.IP "\fBc18\fR" 4
+.IX Item "c18"
+.IP "\fBiso9899:2017\fR" 4
+.IX Item "iso9899:2017"
+.IP "\fBiso9899:2018\fR" 4
+.IX Item "iso9899:2018"
+.PD
+\&\s-1ISO C17,\s0 the 2017 revision of the \s-1ISO C\s0 standard
+(published in 2018).  This standard is
+same as C11 except for corrections of defects (all of which are also
+applied with \fB\-std=c11\fR) and a new value of
+\&\f(CW\*(C`_\|_STDC_VERSION_\|_\*(C'\fR, and so is supported to the same extent as C11.
+.IP "\fBc2x\fR" 4
+.IX Item "c2x"
+The next version of the \s-1ISO C\s0 standard, still under development.  The
+support for this version is experimental and incomplete.
+.IP "\fBgnu90\fR" 4
+.IX Item "gnu90"
+.PD 0
+.IP "\fBgnu89\fR" 4
+.IX Item "gnu89"
+.PD
+\&\s-1GNU\s0 dialect of \s-1ISO C90\s0 (including some C99 features).
+.IP "\fBgnu99\fR" 4
+.IX Item "gnu99"
+.PD 0
+.IP "\fBgnu9x\fR" 4
+.IX Item "gnu9x"
+.PD
+\&\s-1GNU\s0 dialect of \s-1ISO C99.\s0  The name \fBgnu9x\fR is deprecated.
+.IP "\fBgnu11\fR" 4
+.IX Item "gnu11"
+.PD 0
+.IP "\fBgnu1x\fR" 4
+.IX Item "gnu1x"
+.PD
+\&\s-1GNU\s0 dialect of \s-1ISO C11.\s0
+The name \fBgnu1x\fR is deprecated.
+.IP "\fBgnu17\fR" 4
+.IX Item "gnu17"
+.PD 0
+.IP "\fBgnu18\fR" 4
+.IX Item "gnu18"
+.PD
+\&\s-1GNU\s0 dialect of \s-1ISO C17.\s0  This is the default for C code.
+.IP "\fBgnu2x\fR" 4
+.IX Item "gnu2x"
+The next version of the \s-1ISO C\s0 standard, still under development, plus
+\&\s-1GNU\s0 extensions.  The support for this version is experimental and
+incomplete.
+.IP "\fBc++98\fR" 4
+.IX Item "c++98"
+.PD 0
+.IP "\fBc++03\fR" 4
+.IX Item "c++03"
+.PD
+The 1998 \s-1ISO \*(C+\s0 standard plus the 2003 technical corrigendum and some
+additional defect reports. Same as \fB\-ansi\fR for \*(C+ code.
+.IP "\fBgnu++98\fR" 4
+.IX Item "gnu++98"
+.PD 0
+.IP "\fBgnu++03\fR" 4
+.IX Item "gnu++03"
+.PD
+\&\s-1GNU\s0 dialect of \fB\-std=c++98\fR.
+.IP "\fBc++11\fR" 4
+.IX Item "c++11"
+.PD 0
+.IP "\fBc++0x\fR" 4
+.IX Item "c++0x"
+.PD
+The 2011 \s-1ISO \*(C+\s0 standard plus amendments.
+The name \fBc++0x\fR is deprecated.
+.IP "\fBgnu++11\fR" 4
+.IX Item "gnu++11"
+.PD 0
+.IP "\fBgnu++0x\fR" 4
+.IX Item "gnu++0x"
+.PD
+\&\s-1GNU\s0 dialect of \fB\-std=c++11\fR.
+The name \fBgnu++0x\fR is deprecated.
+.IP "\fBc++14\fR" 4
+.IX Item "c++14"
+.PD 0
+.IP "\fBc++1y\fR" 4
+.IX Item "c++1y"
+.PD
+The 2014 \s-1ISO \*(C+\s0 standard plus amendments.
+The name \fBc++1y\fR is deprecated.
+.IP "\fBgnu++14\fR" 4
+.IX Item "gnu++14"
+.PD 0
+.IP "\fBgnu++1y\fR" 4
+.IX Item "gnu++1y"
+.PD
+\&\s-1GNU\s0 dialect of \fB\-std=c++14\fR.
+This is the default for \*(C+ code.
+The name \fBgnu++1y\fR is deprecated.
+.IP "\fBc++17\fR" 4
+.IX Item "c++17"
+.PD 0
+.IP "\fBc++1z\fR" 4
+.IX Item "c++1z"
+.PD
+The 2017 \s-1ISO \*(C+\s0 standard plus amendments.
+The name \fBc++1z\fR is deprecated.
+.IP "\fBgnu++17\fR" 4
+.IX Item "gnu++17"
+.PD 0
+.IP "\fBgnu++1z\fR" 4
+.IX Item "gnu++1z"
+.PD
+\&\s-1GNU\s0 dialect of \fB\-std=c++17\fR.
+The name \fBgnu++1z\fR is deprecated.
+.IP "\fBc++2a\fR" 4
+.IX Item "c++2a"
+The next revision of the \s-1ISO \*(C+\s0 standard, tentatively planned for
+2020.  Support is highly experimental, and will almost certainly
+change in incompatible ways in future releases.
+.IP "\fBgnu++2a\fR" 4
+.IX Item "gnu++2a"
+\&\s-1GNU\s0 dialect of \fB\-std=c++2a\fR.  Support is highly experimental,
+and will almost certainly change in incompatible ways in future
+releases.
+.RE
+.RS 4
+.RE
+.IP "\fB\-fgnu89\-inline\fR" 4
+.IX Item "-fgnu89-inline"
+The option \fB\-fgnu89\-inline\fR tells \s-1GCC\s0 to use the traditional
+\&\s-1GNU\s0 semantics for \f(CW\*(C`inline\*(C'\fR functions when in C99 mode.
+.Sp
+Using this option is roughly equivalent to adding the
+\&\f(CW\*(C`gnu_inline\*(C'\fR function attribute to all inline functions.
+.Sp
+The option \fB\-fno\-gnu89\-inline\fR explicitly tells \s-1GCC\s0 to use the
+C99 semantics for \f(CW\*(C`inline\*(C'\fR when in C99 or gnu99 mode (i.e., it
+specifies the default behavior).
+This option is not supported in \fB\-std=c90\fR or
+\&\fB\-std=gnu90\fR mode.
+.Sp
+The preprocessor macros \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR and
+\&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR may be used to check which semantics are
+in effect for \f(CW\*(C`inline\*(C'\fR functions.
+.IP "\fB\-fpermitted\-flt\-eval\-methods=\fR\fIstyle\fR" 4
+.IX Item "-fpermitted-flt-eval-methods=style"
+\&\s-1ISO/IEC TS 18661\-3\s0 defines new permissible values for
+\&\f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR that indicate that operations and constants with
+a semantic type that is an interchange or extended format should be
+evaluated to the precision and range of that type.  These new values are
+a superset of those permitted under C99/C11, which does not specify the
+meaning of other positive values of \f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR.  As such, code
+conforming to C11 may not have been written expecting the possibility of
+the new values.
+.Sp
+\&\fB\-fpermitted\-flt\-eval\-methods\fR specifies whether the compiler
+should allow only the values of \f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR specified in C99/C11,
+or the extended set of values specified in \s-1ISO/IEC TS 18661\-3.\s0
+.Sp
+\&\fIstyle\fR is either \f(CW\*(C`c11\*(C'\fR or \f(CW\*(C`ts\-18661\-3\*(C'\fR as appropriate.
+.Sp
+The default when in a standards compliant mode (\fB\-std=c11\fR or similar)
+is \fB\-fpermitted\-flt\-eval\-methods=c11\fR.  The default when in a \s-1GNU\s0
+dialect (\fB\-std=gnu11\fR or similar) is
+\&\fB\-fpermitted\-flt\-eval\-methods=ts\-18661\-3\fR.
+.IP "\fB\-aux\-info\fR \fIfilename\fR" 4
+.IX Item "-aux-info filename"
+Output to the given filename prototyped declarations for all functions
+declared and/or defined in a translation unit, including those in header
+files.  This option is silently ignored in any language other than C.
+.Sp
+Besides declarations, the file indicates, in comments, the origin of
+each declaration (source file and line), whether the declaration was
+implicit, prototyped or unprototyped (\fBI\fR, \fBN\fR for new or
+\&\fBO\fR for old, respectively, in the first character after the line
+number and the colon), and whether it came from a declaration or a
+definition (\fBC\fR or \fBF\fR, respectively, in the following
+character).  In the case of function definitions, a K&R\-style list of
+arguments followed by their declarations is also provided, inside
+comments, after the declaration.
+.IP "\fB\-fallow\-parameterless\-variadic\-functions\fR" 4
+.IX Item "-fallow-parameterless-variadic-functions"
+Accept variadic functions without named parameters.
+.Sp
+Although it is possible to define such a function, this is not very
+useful as it is not possible to read the arguments.  This is only
+supported for C as this construct is allowed by \*(C+.
+.IP "\fB\-fno\-asm\fR" 4
+.IX Item "-fno-asm"
+Do not recognize \f(CW\*(C`asm\*(C'\fR, \f(CW\*(C`inline\*(C'\fR or \f(CW\*(C`typeof\*(C'\fR as a
+keyword, so that code can use these words as identifiers.  You can use
+the keywords \f(CW\*(C`_\|_asm_\|_\*(C'\fR, \f(CW\*(C`_\|_inline_\|_\*(C'\fR and \f(CW\*(C`_\|_typeof_\|_\*(C'\fR
+instead.  \fB\-ansi\fR implies \fB\-fno\-asm\fR.
+.Sp
+In \*(C+, this switch only affects the \f(CW\*(C`typeof\*(C'\fR keyword, since
+\&\f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`inline\*(C'\fR are standard keywords.  You may want to
+use the \fB\-fno\-gnu\-keywords\fR flag instead, which has the same
+effect.  In C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this
+switch only affects the \f(CW\*(C`asm\*(C'\fR and \f(CW\*(C`typeof\*(C'\fR keywords, since
+\&\f(CW\*(C`inline\*(C'\fR is a standard keyword in \s-1ISO C99.\s0
+.IP "\fB\-fno\-builtin\fR" 4
+.IX Item "-fno-builtin"
+.PD 0
+.IP "\fB\-fno\-builtin\-\fR\fIfunction\fR" 4
+.IX Item "-fno-builtin-function"
+.PD
+Don't recognize built-in functions that do not begin with
+\&\fB_\|_builtin_\fR as prefix.
+.Sp
+\&\s-1GCC\s0 normally generates special code to handle certain built-in functions
+more efficiently; for instance, calls to \f(CW\*(C`alloca\*(C'\fR may become single
+instructions which adjust the stack directly, and calls to \f(CW\*(C`memcpy\*(C'\fR
+may become inline copy loops.  The resulting code is often both smaller
+and faster, but since the function calls no longer appear as such, you
+cannot set a breakpoint on those calls, nor can you change the behavior
+of the functions by linking with a different library.  In addition,
+when a function is recognized as a built-in function, \s-1GCC\s0 may use
+information about that function to warn about problems with calls to
+that function, or to generate more efficient code, even if the
+resulting code still contains calls to that function.  For example,
+warnings are given with \fB\-Wformat\fR for bad calls to
+\&\f(CW\*(C`printf\*(C'\fR when \f(CW\*(C`printf\*(C'\fR is built in and \f(CW\*(C`strlen\*(C'\fR is
+known not to modify global memory.
+.Sp
+With the \fB\-fno\-builtin\-\fR\fIfunction\fR option
+only the built-in function \fIfunction\fR is
+disabled.  \fIfunction\fR must not begin with \fB_\|_builtin_\fR.  If a
+function is named that is not built-in in this version of \s-1GCC,\s0 this
+option is ignored.  There is no corresponding
+\&\fB\-fbuiltin\-\fR\fIfunction\fR option; if you wish to enable
+built-in functions selectively when using \fB\-fno\-builtin\fR or
+\&\fB\-ffreestanding\fR, you may define macros such as:
+.Sp
+.Vb 2
+\&        #define abs(n)          _\|_builtin_abs ((n))
+\&        #define strcpy(d, s)    _\|_builtin_strcpy ((d), (s))
+.Ve
+.IP "\fB\-fgimple\fR" 4
+.IX Item "-fgimple"
+Enable parsing of function definitions marked with \f(CW\*(C`_\|_GIMPLE\*(C'\fR.
+This is an experimental feature that allows unit testing of \s-1GIMPLE\s0
+passes.
+.IP "\fB\-fhosted\fR" 4
+.IX Item "-fhosted"
+Assert that compilation targets a hosted environment.  This implies
+\&\fB\-fbuiltin\fR.  A hosted environment is one in which the
+entire standard library is available, and in which \f(CW\*(C`main\*(C'\fR has a return
+type of \f(CW\*(C`int\*(C'\fR.  Examples are nearly everything except a kernel.
+This is equivalent to \fB\-fno\-freestanding\fR.
+.IP "\fB\-ffreestanding\fR" 4
+.IX Item "-ffreestanding"
+Assert that compilation targets a freestanding environment.  This
+implies \fB\-fno\-builtin\fR.  A freestanding environment
+is one in which the standard library may not exist, and program startup may
+not necessarily be at \f(CW\*(C`main\*(C'\fR.  The most obvious example is an \s-1OS\s0 kernel.
+This is equivalent to \fB\-fno\-hosted\fR.
+.IP "\fB\-fopenacc\fR" 4
+.IX Item "-fopenacc"
+Enable handling of OpenACC directives \f(CW\*(C`#pragma acc\*(C'\fR in C/\*(C+ and
+\&\f(CW\*(C`!$acc\*(C'\fR in Fortran.  When \fB\-fopenacc\fR is specified, the
+compiler generates accelerated code according to the OpenACC Application
+Programming Interface v2.0 <\fBhttps://www.openacc.org\fR>.  This option
+implies \fB\-pthread\fR, and thus is only supported on targets that
+have support for \fB\-pthread\fR.
+.IP "\fB\-fopenacc\-dim=\fR\fIgeom\fR" 4
+.IX Item "-fopenacc-dim=geom"
+Specify default compute dimensions for parallel offload regions that do
+not explicitly specify.  The \fIgeom\fR value is a triple of
+\&':'\-separated sizes, in order 'gang', 'worker' and, 'vector'.  A size
+can be omitted, to use a target-specific default value.
+.IP "\fB\-fopenmp\fR" 4
+.IX Item "-fopenmp"
+Enable handling of OpenMP directives \f(CW\*(C`#pragma omp\*(C'\fR in C/\*(C+ and
+\&\f(CW\*(C`!$omp\*(C'\fR in Fortran.  When \fB\-fopenmp\fR is specified, the
+compiler generates parallel code according to the OpenMP Application
+Program Interface v4.5 <\fBhttps://www.openmp.org\fR>.  This option
+implies \fB\-pthread\fR, and thus is only supported on targets that
+have support for \fB\-pthread\fR. \fB\-fopenmp\fR implies
+\&\fB\-fopenmp\-simd\fR.
+.IP "\fB\-fopenmp\-simd\fR" 4
+.IX Item "-fopenmp-simd"
+Enable handling of OpenMP's \s-1SIMD\s0 directives with \f(CW\*(C`#pragma omp\*(C'\fR
+in C/\*(C+ and \f(CW\*(C`!$omp\*(C'\fR in Fortran. Other OpenMP directives
+are ignored.
+.IP "\fB\-fgnu\-tm\fR" 4
+.IX Item "-fgnu-tm"
+When the option \fB\-fgnu\-tm\fR is specified, the compiler
+generates code for the Linux variant of Intel's current Transactional
+Memory \s-1ABI\s0 specification document (Revision 1.1, May 6 2009).  This is
+an experimental feature whose interface may change in future versions
+of \s-1GCC,\s0 as the official specification changes.  Please note that not
+all architectures are supported for this feature.
+.Sp
+For more information on \s-1GCC\s0's support for transactional memory,
+.Sp
+Note that the transactional memory feature is not supported with
+non-call exceptions (\fB\-fnon\-call\-exceptions\fR).
+.IP "\fB\-fms\-extensions\fR" 4
+.IX Item "-fms-extensions"
+Accept some non-standard constructs used in Microsoft header files.
+.Sp
+In \*(C+ code, this allows member names in structures to be similar
+to previous types declarations.
+.Sp
+.Vb 4
+\&        typedef int UOW;
+\&        struct ABC {
+\&          UOW UOW;
+\&        };
+.Ve
+.Sp
+Some cases of unnamed fields in structures and unions are only
+accepted with this option.
+.Sp
+Note that this option is off for all targets but x86 
+targets using ms-abi.
+.IP "\fB\-fplan9\-extensions\fR" 4
+.IX Item "-fplan9-extensions"
+Accept some non-standard constructs used in Plan 9 code.
+.Sp
+This enables \fB\-fms\-extensions\fR, permits passing pointers to
+structures with anonymous fields to functions that expect pointers to
+elements of the type of the field, and permits referring to anonymous
+fields declared using a typedef.    This is only
+supported for C, not \*(C+.
+.IP "\fB\-fcond\-mismatch\fR" 4
+.IX Item "-fcond-mismatch"
+Allow conditional expressions with mismatched types in the second and
+third arguments.  The value of such an expression is void.  This option
+is not supported for \*(C+.
+.IP "\fB\-flax\-vector\-conversions\fR" 4
+.IX Item "-flax-vector-conversions"
+Allow implicit conversions between vectors with differing numbers of
+elements and/or incompatible element types.  This option should not be
+used for new code.
+.IP "\fB\-funsigned\-char\fR" 4
+.IX Item "-funsigned-char"
+Let the type \f(CW\*(C`char\*(C'\fR be unsigned, like \f(CW\*(C`unsigned char\*(C'\fR.
+.Sp
+Each kind of machine has a default for what \f(CW\*(C`char\*(C'\fR should
+be.  It is either like \f(CW\*(C`unsigned char\*(C'\fR by default or like
+\&\f(CW\*(C`signed char\*(C'\fR by default.
+.Sp
+Ideally, a portable program should always use \f(CW\*(C`signed char\*(C'\fR or
+\&\f(CW\*(C`unsigned char\*(C'\fR when it depends on the signedness of an object.
+But many programs have been written to use plain \f(CW\*(C`char\*(C'\fR and
+expect it to be signed, or expect it to be unsigned, depending on the
+machines they were written for.  This option, and its inverse, let you
+make such a program work with the opposite default.
+.Sp
+The type \f(CW\*(C`char\*(C'\fR is always a distinct type from each of
+\&\f(CW\*(C`signed char\*(C'\fR or \f(CW\*(C`unsigned char\*(C'\fR, even though its behavior
+is always just like one of those two.
+.IP "\fB\-fsigned\-char\fR" 4
+.IX Item "-fsigned-char"
+Let the type \f(CW\*(C`char\*(C'\fR be signed, like \f(CW\*(C`signed char\*(C'\fR.
+.Sp
+Note that this is equivalent to \fB\-fno\-unsigned\-char\fR, which is
+the negative form of \fB\-funsigned\-char\fR.  Likewise, the option
+\&\fB\-fno\-signed\-char\fR is equivalent to \fB\-funsigned\-char\fR.
+.IP "\fB\-fsigned\-bitfields\fR" 4
+.IX Item "-fsigned-bitfields"
+.PD 0
+.IP "\fB\-funsigned\-bitfields\fR" 4
+.IX Item "-funsigned-bitfields"
+.IP "\fB\-fno\-signed\-bitfields\fR" 4
+.IX Item "-fno-signed-bitfields"
+.IP "\fB\-fno\-unsigned\-bitfields\fR" 4
+.IX Item "-fno-unsigned-bitfields"
+.PD
+These options control whether a bit-field is signed or unsigned, when the
+declaration does not use either \f(CW\*(C`signed\*(C'\fR or \f(CW\*(C`unsigned\*(C'\fR.  By
+default, such a bit-field is signed, because this is consistent: the
+basic integer types such as \f(CW\*(C`int\*(C'\fR are signed types.
+.IP "\fB\-fsso\-struct=\fR\fIendianness\fR" 4
+.IX Item "-fsso-struct=endianness"
+Set the default scalar storage order of structures and unions to the
+specified endianness.  The accepted values are \fBbig-endian\fR,
+\&\fBlittle-endian\fR and \fBnative\fR for the native endianness of
+the target (the default).  This option is not supported for \*(C+.
+.Sp
+\&\fBWarning:\fR the \fB\-fsso\-struct\fR switch causes \s-1GCC\s0 to generate
+code that is not binary compatible with code generated without it if the
+specified endianness is not the native endianness of the target.
+.SS "Options Controlling \*(C+ Dialect"
+.IX Subsection "Options Controlling Dialect"
+This section describes the command-line options that are only meaningful
+for \*(C+ programs.  You can also use most of the \s-1GNU\s0 compiler options
+regardless of what language your program is in.  For example, you
+might compile a file \fIfirstClass.C\fR like this:
+.PP
+.Vb 1
+\&        g++ \-g \-fstrict\-enums \-O \-c firstClass.C
+.Ve
+.PP
+In this example, only \fB\-fstrict\-enums\fR is an option meant
+only for \*(C+ programs; you can use the other options with any
+language supported by \s-1GCC.\s0
+.PP
+Some options for compiling C programs, such as \fB\-std\fR, are also
+relevant for \*(C+ programs.
+.PP
+Here is a list of options that are \fIonly\fR for compiling \*(C+ programs:
+.IP "\fB\-fabi\-version=\fR\fIn\fR" 4
+.IX Item "-fabi-version=n"
+Use version \fIn\fR of the \*(C+ \s-1ABI.\s0  The default is version 0.
+.Sp
+Version 0 refers to the version conforming most closely to
+the \*(C+ \s-1ABI\s0 specification.  Therefore, the \s-1ABI\s0 obtained using version 0
+will change in different versions of G++ as \s-1ABI\s0 bugs are fixed.
+.Sp
+Version 1 is the version of the \*(C+ \s-1ABI\s0 that first appeared in G++ 3.2.
+.Sp
+Version 2 is the version of the \*(C+ \s-1ABI\s0 that first appeared in G++
+3.4, and was the default through G++ 4.9.
+.Sp
+Version 3 corrects an error in mangling a constant address as a
+template argument.
+.Sp
+Version 4, which first appeared in G++ 4.5, implements a standard
+mangling for vector types.
+.Sp
+Version 5, which first appeared in G++ 4.6, corrects the mangling of
+attribute const/volatile on function pointer types, decltype of a
+plain decl, and use of a function parameter in the declaration of
+another parameter.
+.Sp
+Version 6, which first appeared in G++ 4.7, corrects the promotion
+behavior of \*(C+11 scoped enums and the mangling of template argument
+packs, const/static_cast, prefix ++ and \-\-, and a class scope function
+used as a template argument.
+.Sp
+Version 7, which first appeared in G++ 4.8, that treats nullptr_t as a
+builtin type and corrects the mangling of lambdas in default argument
+scope.
+.Sp
+Version 8, which first appeared in G++ 4.9, corrects the substitution
+behavior of function types with function-cv-qualifiers.
+.Sp
+Version 9, which first appeared in G++ 5.2, corrects the alignment of
+\&\f(CW\*(C`nullptr_t\*(C'\fR.
+.Sp
+Version 10, which first appeared in G++ 6.1, adds mangling of
+attributes that affect type identity, such as ia32 calling convention
+attributes (e.g. \fBstdcall\fR).
+.Sp
+Version 11, which first appeared in G++ 7, corrects the mangling of
+sizeof... expressions and operator names.  For multiple entities with
+the same name within a function, that are declared in different scopes,
+the mangling now changes starting with the twelfth occurrence.  It also
+implies \fB\-fnew\-inheriting\-ctors\fR.
+.Sp
+Version 12, which first appeared in G++ 8, corrects the calling
+conventions for empty classes on the x86_64 target and for classes
+with only deleted copy/move constructors.  It accidentally changes the
+calling convention for classes with a deleted copy constructor and a
+trivial move constructor.
+.Sp
+Version 13, which first appeared in G++ 8.2, fixes the accidental
+change in version 12.
+.Sp
+See also \fB\-Wabi\fR.
+.IP "\fB\-fabi\-compat\-version=\fR\fIn\fR" 4
+.IX Item "-fabi-compat-version=n"
+On targets that support strong aliases, G++
+works around mangling changes by creating an alias with the correct
+mangled name when defining a symbol with an incorrect mangled name.
+This switch specifies which \s-1ABI\s0 version to use for the alias.
+.Sp
+With \fB\-fabi\-version=0\fR (the default), this defaults to 11 (\s-1GCC 7\s0
+compatibility).  If another \s-1ABI\s0 version is explicitly selected, this
+defaults to 0.  For compatibility with \s-1GCC\s0 versions 3.2 through 4.9,
+use \fB\-fabi\-compat\-version=2\fR.
+.Sp
+If this option is not provided but \fB\-Wabi=\fR\fIn\fR is, that
+version is used for compatibility aliases.  If this option is provided
+along with \fB\-Wabi\fR (without the version), the version from this
+option is used for the warning.
+.IP "\fB\-fno\-access\-control\fR" 4
+.IX Item "-fno-access-control"
+Turn off all access checking.  This switch is mainly useful for working
+around bugs in the access control code.
+.IP "\fB\-faligned\-new\fR" 4
+.IX Item "-faligned-new"
+Enable support for \*(C+17 \f(CW\*(C`new\*(C'\fR of types that require more
+alignment than \f(CW\*(C`void* ::operator new(std::size_t)\*(C'\fR provides.  A
+numeric argument such as \f(CW\*(C`\-faligned\-new=32\*(C'\fR can be used to
+specify how much alignment (in bytes) is provided by that function,
+but few users will need to override the default of
+\&\f(CW\*(C`alignof(std::max_align_t)\*(C'\fR.
+.Sp
+This flag is enabled by default for \fB\-std=c++17\fR.
+.IP "\fB\-fchar8_t\fR" 4
+.IX Item "-fchar8_t"
+.PD 0
+.IP "\fB\-fno\-char8_t\fR" 4
+.IX Item "-fno-char8_t"
+.PD
+Enable support for \f(CW\*(C`char8_t\*(C'\fR as adopted for \*(C+2a.  This includes
+the addition of a new \f(CW\*(C`char8_t\*(C'\fR fundamental type, changes to the
+types of \s-1UTF\-8\s0 string and character literals, new signatures for
+user-defined literals, associated standard library updates, and new
+\&\f(CW\*(C`_\|_cpp_char8_t\*(C'\fR and \f(CW\*(C`_\|_cpp_lib_char8_t\*(C'\fR feature test macros.
+.Sp
+This option enables functions to be overloaded for ordinary and \s-1UTF\-8\s0
+strings:
+.Sp
+.Vb 4
+\&        int f(const char *);    // #1
+\&        int f(const char8_t *); // #2
+\&        int v1 = f("text");     // Calls #1
+\&        int v2 = f(u8"text");   // Calls #2
+.Ve
+.Sp
+and introduces new signatures for user-defined literals:
+.Sp
+.Vb 6
+\&        int operator""_udl1(char8_t);
+\&        int v3 = u8\*(Aqx\*(Aq_udl1;
+\&        int operator""_udl2(const char8_t*, std::size_t);
+\&        int v4 = u8"text"_udl2;
+\&        template<typename T, T...> int operator""_udl3();
+\&        int v5 = u8"text"_udl3;
+.Ve
+.Sp
+The change to the types of \s-1UTF\-8\s0 string and character literals introduces
+incompatibilities with \s-1ISO \*(C+11\s0 and later standards.  For example, the
+following code is well-formed under \s-1ISO \*(C+11,\s0 but is ill-formed when
+\&\fB\-fchar8_t\fR is specified.
+.Sp
+.Vb 10
+\&        char ca[] = u8"xx";     // error: char\-array initialized from wide
+\&                                //        string
+\&        const char *cp = u8"xx";// error: invalid conversion from
+\&                                //        \`const char8_t*\*(Aq to \`const char*\*(Aq
+\&        int f(const char*);
+\&        auto v = f(u8"xx");     // error: invalid conversion from
+\&                                //        \`const char8_t*\*(Aq to \`const char*\*(Aq
+\&        std::string s{u8"xx"};  // error: no matching function for call to
+\&                                //        \`std::basic_string<char>::basic_string()\*(Aq
+\&        using namespace std::literals;
+\&        s = u8"xx"s;            // error: conversion from
+\&                                //        \`basic_string<char8_t>\*(Aq to non\-scalar
+\&                                //        type \`basic_string<char>\*(Aq requested
+.Ve
+.IP "\fB\-fcheck\-new\fR" 4
+.IX Item "-fcheck-new"
+Check that the pointer returned by \f(CW\*(C`operator new\*(C'\fR is non-null
+before attempting to modify the storage allocated.  This check is
+normally unnecessary because the \*(C+ standard specifies that
+\&\f(CW\*(C`operator new\*(C'\fR only returns \f(CW0\fR if it is declared
+\&\f(CW\*(C`throw()\*(C'\fR, in which case the compiler always checks the
+return value even without this option.  In all other cases, when
+\&\f(CW\*(C`operator new\*(C'\fR has a non-empty exception specification, memory
+exhaustion is signalled by throwing \f(CW\*(C`std::bad_alloc\*(C'\fR.  See also
+\&\fBnew (nothrow)\fR.
+.IP "\fB\-fconcepts\fR" 4
+.IX Item "-fconcepts"
+Enable support for the \*(C+ Extensions for Concepts Technical
+Specification, \s-1ISO 19217\s0 (2015), which allows code like
+.Sp
+.Vb 2
+\&        template <class T> concept bool Addable = requires (T t) { t + t; };
+\&        template <Addable T> T add (T a, T b) { return a + b; }
+.Ve
+.IP "\fB\-fconstexpr\-depth=\fR\fIn\fR" 4
+.IX Item "-fconstexpr-depth=n"
+Set the maximum nested evaluation depth for \*(C+11 constexpr functions
+to \fIn\fR.  A limit is needed to detect endless recursion during
+constant expression evaluation.  The minimum specified by the standard
+is 512.
+.IP "\fB\-fconstexpr\-loop\-limit=\fR\fIn\fR" 4
+.IX Item "-fconstexpr-loop-limit=n"
+Set the maximum number of iterations for a loop in \*(C+14 constexpr functions
+to \fIn\fR.  A limit is needed to detect infinite loops during
+constant expression evaluation.  The default is 262144 (1<<18).
+.IP "\fB\-fconstexpr\-ops\-limit=\fR\fIn\fR" 4
+.IX Item "-fconstexpr-ops-limit=n"
+Set the maximum number of operations during a single constexpr evaluation.
+Even when number of iterations of a single loop is limited with the above limit,
+if there are several nested loops and each of them has many iterations but still
+smaller than the above limit, or if in a body of some loop or even outside
+of a loop too many expressions need to be evaluated, the resulting constexpr
+evaluation might take too long.
+The default is 33554432 (1<<25).
+.IP "\fB\-fdeduce\-init\-list\fR" 4
+.IX Item "-fdeduce-init-list"
+Enable deduction of a template type parameter as
+\&\f(CW\*(C`std::initializer_list\*(C'\fR from a brace-enclosed initializer list, i.e.
+.Sp
+.Vb 4
+\&        template <class T> auto forward(T t) \-> decltype (realfn (t))
+\&        {
+\&          return realfn (t);
+\&        }
+\&        
+\&        void f()
+\&        {
+\&          forward({1,2}); // call forward<std::initializer_list<int>>
+\&        }
+.Ve
+.Sp
+This deduction was implemented as a possible extension to the
+originally proposed semantics for the \*(C+11 standard, but was not part
+of the final standard, so it is disabled by default.  This option is
+deprecated, and may be removed in a future version of G++.
+.IP "\fB\-fno\-elide\-constructors\fR" 4
+.IX Item "-fno-elide-constructors"
+The \*(C+ standard allows an implementation to omit creating a temporary
+that is only used to initialize another object of the same type.
+Specifying this option disables that optimization, and forces G++ to
+call the copy constructor in all cases.  This option also causes G++
+to call trivial member functions which otherwise would be expanded inline.
+.Sp
+In \*(C+17, the compiler is required to omit these temporaries, but this
+option still affects trivial member functions.
+.IP "\fB\-fno\-enforce\-eh\-specs\fR" 4
+.IX Item "-fno-enforce-eh-specs"
+Don't generate code to check for violation of exception specifications
+at run time.  This option violates the \*(C+ standard, but may be useful
+for reducing code size in production builds, much like defining
+\&\f(CW\*(C`NDEBUG\*(C'\fR.  This does not give user code permission to throw
+exceptions in violation of the exception specifications; the compiler
+still optimizes based on the specifications, so throwing an
+unexpected exception results in undefined behavior at run time.
+.IP "\fB\-fextern\-tls\-init\fR" 4
+.IX Item "-fextern-tls-init"
+.PD 0
+.IP "\fB\-fno\-extern\-tls\-init\fR" 4
+.IX Item "-fno-extern-tls-init"
+.PD
+The \*(C+11 and OpenMP standards allow \f(CW\*(C`thread_local\*(C'\fR and
+\&\f(CW\*(C`threadprivate\*(C'\fR variables to have dynamic (runtime)
+initialization.  To support this, any use of such a variable goes
+through a wrapper function that performs any necessary initialization.
+When the use and definition of the variable are in the same
+translation unit, this overhead can be optimized away, but when the
+use is in a different translation unit there is significant overhead
+even if the variable doesn't actually need dynamic initialization.  If
+the programmer can be sure that no use of the variable in a
+non-defining \s-1TU\s0 needs to trigger dynamic initialization (either
+because the variable is statically initialized, or a use of the
+variable in the defining \s-1TU\s0 will be executed before any uses in
+another \s-1TU\s0), they can avoid this overhead with the
+\&\fB\-fno\-extern\-tls\-init\fR option.
+.Sp
+On targets that support symbol aliases, the default is
+\&\fB\-fextern\-tls\-init\fR.  On targets that do not support symbol
+aliases, the default is \fB\-fno\-extern\-tls\-init\fR.
+.IP "\fB\-fno\-gnu\-keywords\fR" 4
+.IX Item "-fno-gnu-keywords"
+Do not recognize \f(CW\*(C`typeof\*(C'\fR as a keyword, so that code can use this
+word as an identifier.  You can use the keyword \f(CW\*(C`_\|_typeof_\|_\*(C'\fR instead.
+This option is implied by the strict \s-1ISO \*(C+\s0 dialects: \fB\-ansi\fR,
+\&\fB\-std=c++98\fR, \fB\-std=c++11\fR, etc.
+.IP "\fB\-fno\-implicit\-templates\fR" 4
+.IX Item "-fno-implicit-templates"
+Never emit code for non-inline templates that are instantiated
+implicitly (i.e. by use); only emit code for explicit instantiations.
+If you use this option, you must take care to structure your code to
+include all the necessary explicit instantiations to avoid getting
+undefined symbols at link time.
+.IP "\fB\-fno\-implicit\-inline\-templates\fR" 4
+.IX Item "-fno-implicit-inline-templates"
+Don't emit code for implicit instantiations of inline templates, either.
+The default is to handle inlines differently so that compiles with and
+without optimization need the same set of explicit instantiations.
+.IP "\fB\-fno\-implement\-inlines\fR" 4
+.IX Item "-fno-implement-inlines"
+To save space, do not emit out-of-line copies of inline functions
+controlled by \f(CW\*(C`#pragma implementation\*(C'\fR.  This causes linker
+errors if these functions are not inlined everywhere they are called.
+.IP "\fB\-fms\-extensions\fR" 4
+.IX Item "-fms-extensions"
+Disable Wpedantic warnings about constructs used in \s-1MFC,\s0 such as implicit
+int and getting a pointer to member function via non-standard syntax.
+.IP "\fB\-fnew\-inheriting\-ctors\fR" 4
+.IX Item "-fnew-inheriting-ctors"
+Enable the P0136 adjustment to the semantics of \*(C+11 constructor
+inheritance.  This is part of \*(C+17 but also considered to be a Defect
+Report against \*(C+11 and \*(C+14.  This flag is enabled by default
+unless \fB\-fabi\-version=10\fR or lower is specified.
+.IP "\fB\-fnew\-ttp\-matching\fR" 4
+.IX Item "-fnew-ttp-matching"
+Enable the P0522 resolution to Core issue 150, template template
+parameters and default arguments: this allows a template with default
+template arguments as an argument for a template template parameter
+with fewer template parameters.  This flag is enabled by default for
+\&\fB\-std=c++17\fR.
+.IP "\fB\-fno\-nonansi\-builtins\fR" 4
+.IX Item "-fno-nonansi-builtins"
+Disable built-in declarations of functions that are not mandated by
+\&\s-1ANSI/ISO C.\s0  These include \f(CW\*(C`ffs\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR, \f(CW\*(C`_exit\*(C'\fR,
+\&\f(CW\*(C`index\*(C'\fR, \f(CW\*(C`bzero\*(C'\fR, \f(CW\*(C`conjf\*(C'\fR, and other related functions.
+.IP "\fB\-fnothrow\-opt\fR" 4
+.IX Item "-fnothrow-opt"
+Treat a \f(CW\*(C`throw()\*(C'\fR exception specification as if it were a
+\&\f(CW\*(C`noexcept\*(C'\fR specification to reduce or eliminate the text size
+overhead relative to a function with no exception specification.  If
+the function has local variables of types with non-trivial
+destructors, the exception specification actually makes the
+function smaller because the \s-1EH\s0 cleanups for those variables can be
+optimized away.  The semantic effect is that an exception thrown out of
+a function with such an exception specification results in a call
+to \f(CW\*(C`terminate\*(C'\fR rather than \f(CW\*(C`unexpected\*(C'\fR.
+.IP "\fB\-fno\-operator\-names\fR" 4
+.IX Item "-fno-operator-names"
+Do not treat the operator name keywords \f(CW\*(C`and\*(C'\fR, \f(CW\*(C`bitand\*(C'\fR,
+\&\f(CW\*(C`bitor\*(C'\fR, \f(CW\*(C`compl\*(C'\fR, \f(CW\*(C`not\*(C'\fR, \f(CW\*(C`or\*(C'\fR and \f(CW\*(C`xor\*(C'\fR as
+synonyms as keywords.
+.IP "\fB\-fno\-optional\-diags\fR" 4
+.IX Item "-fno-optional-diags"
+Disable diagnostics that the standard says a compiler does not need to
+issue.  Currently, the only such diagnostic issued by G++ is the one for
+a name having multiple meanings within a class.
+.IP "\fB\-fpermissive\fR" 4
+.IX Item "-fpermissive"
+Downgrade some diagnostics about nonconformant code from errors to
+warnings.  Thus, using \fB\-fpermissive\fR allows some
+nonconforming code to compile.
+.IP "\fB\-fno\-pretty\-templates\fR" 4
+.IX Item "-fno-pretty-templates"
+When an error message refers to a specialization of a function
+template, the compiler normally prints the signature of the
+template followed by the template arguments and any typedefs or
+typenames in the signature (e.g. \f(CW\*(C`void f(T) [with T = int]\*(C'\fR
+rather than \f(CW\*(C`void f(int)\*(C'\fR) so that it's clear which template is
+involved.  When an error message refers to a specialization of a class
+template, the compiler omits any template arguments that match
+the default template arguments for that template.  If either of these
+behaviors make it harder to understand the error message rather than
+easier, you can use \fB\-fno\-pretty\-templates\fR to disable them.
+.IP "\fB\-frepo\fR" 4
+.IX Item "-frepo"
+Enable automatic template instantiation at link time.  This option also
+implies \fB\-fno\-implicit\-templates\fR.
+.IP "\fB\-fno\-rtti\fR" 4
+.IX Item "-fno-rtti"
+Disable generation of information about every class with virtual
+functions for use by the \*(C+ run-time type identification features
+(\f(CW\*(C`dynamic_cast\*(C'\fR and \f(CW\*(C`typeid\*(C'\fR).  If you don't use those parts
+of the language, you can save some space by using this flag.  Note that
+exception handling uses the same information, but G++ generates it as
+needed. The \f(CW\*(C`dynamic_cast\*(C'\fR operator can still be used for casts that
+do not require run-time type information, i.e. casts to \f(CW\*(C`void *\*(C'\fR or to
+unambiguous base classes.
+.Sp
+Mixing code compiled with \fB\-frtti\fR with that compiled with
+\&\fB\-fno\-rtti\fR may not work.  For example, programs may
+fail to link if a class compiled with \fB\-fno\-rtti\fR is used as a base 
+for a class compiled with \fB\-frtti\fR.
+.IP "\fB\-fsized\-deallocation\fR" 4
+.IX Item "-fsized-deallocation"
+Enable the built-in global declarations
+.Sp
+.Vb 2
+\&        void operator delete (void *, std::size_t) noexcept;
+\&        void operator delete[] (void *, std::size_t) noexcept;
+.Ve
+.Sp
+as introduced in \*(C+14.  This is useful for user-defined replacement
+deallocation functions that, for example, use the size of the object
+to make deallocation faster.  Enabled by default under
+\&\fB\-std=c++14\fR and above.  The flag \fB\-Wsized\-deallocation\fR
+warns about places that might want to add a definition.
+.IP "\fB\-fstrict\-enums\fR" 4
+.IX Item "-fstrict-enums"
+Allow the compiler to optimize using the assumption that a value of
+enumerated type can only be one of the values of the enumeration (as
+defined in the \*(C+ standard; basically, a value that can be
+represented in the minimum number of bits needed to represent all the
+enumerators).  This assumption may not be valid if the program uses a
+cast to convert an arbitrary integer value to the enumerated type.
+.IP "\fB\-fstrong\-eval\-order\fR" 4
+.IX Item "-fstrong-eval-order"
+Evaluate member access, array subscripting, and shift expressions in
+left-to-right order, and evaluate assignment in right-to-left order,
+as adopted for \*(C+17.  Enabled by default with \fB\-std=c++17\fR.
+\&\fB\-fstrong\-eval\-order=some\fR enables just the ordering of member
+access and shift expressions, and is the default without
+\&\fB\-std=c++17\fR.
+.IP "\fB\-ftemplate\-backtrace\-limit=\fR\fIn\fR" 4
+.IX Item "-ftemplate-backtrace-limit=n"
+Set the maximum number of template instantiation notes for a single
+warning or error to \fIn\fR.  The default value is 10.
+.IP "\fB\-ftemplate\-depth=\fR\fIn\fR" 4
+.IX Item "-ftemplate-depth=n"
+Set the maximum instantiation depth for template classes to \fIn\fR.
+A limit on the template instantiation depth is needed to detect
+endless recursions during template class instantiation.  \s-1ANSI/ISO \*(C+\s0
+conforming programs must not rely on a maximum depth greater than 17
+(changed to 1024 in \*(C+11).  The default value is 900, as the compiler
+can run out of stack space before hitting 1024 in some situations.
+.IP "\fB\-fno\-threadsafe\-statics\fR" 4
+.IX Item "-fno-threadsafe-statics"
+Do not emit the extra code to use the routines specified in the \*(C+
+\&\s-1ABI\s0 for thread-safe initialization of local statics.  You can use this
+option to reduce code size slightly in code that doesn't need to be
+thread-safe.
+.IP "\fB\-fuse\-cxa\-atexit\fR" 4
+.IX Item "-fuse-cxa-atexit"
+Register destructors for objects with static storage duration with the
+\&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR function rather than the \f(CW\*(C`atexit\*(C'\fR function.
+This option is required for fully standards-compliant handling of static
+destructors, but only works if your C library supports
+\&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR.
+.IP "\fB\-fno\-use\-cxa\-get\-exception\-ptr\fR" 4
+.IX Item "-fno-use-cxa-get-exception-ptr"
+Don't use the \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR runtime routine.  This
+causes \f(CW\*(C`std::uncaught_exception\*(C'\fR to be incorrect, but is necessary
+if the runtime routine is not available.
+.IP "\fB\-fvisibility\-inlines\-hidden\fR" 4
+.IX Item "-fvisibility-inlines-hidden"
+This switch declares that the user does not attempt to compare
+pointers to inline functions or methods where the addresses of the two functions
+are taken in different shared objects.
+.Sp
+The effect of this is that \s-1GCC\s0 may, effectively, mark inline methods with
+\&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR so that they do not
+appear in the export table of a \s-1DSO\s0 and do not require a \s-1PLT\s0 indirection
+when used within the \s-1DSO.\s0  Enabling this option can have a dramatic effect
+on load and link times of a \s-1DSO\s0 as it massively reduces the size of the
+dynamic export table when the library makes heavy use of templates.
+.Sp
+The behavior of this switch is not quite the same as marking the
+methods as hidden directly, because it does not affect static variables
+local to the function or cause the compiler to deduce that
+the function is defined in only one shared object.
+.Sp
+You may mark a method as having a visibility explicitly to negate the
+effect of the switch for that method.  For example, if you do want to
+compare pointers to a particular inline method, you might mark it as
+having default visibility.  Marking the enclosing class with explicit
+visibility has no effect.
+.Sp
+Explicitly instantiated inline methods are unaffected by this option
+as their linkage might otherwise cross a shared library boundary.
+.IP "\fB\-fvisibility\-ms\-compat\fR" 4
+.IX Item "-fvisibility-ms-compat"
+This flag attempts to use visibility settings to make \s-1GCC\s0's \*(C+
+linkage model compatible with that of Microsoft Visual Studio.
+.Sp
+The flag makes these changes to \s-1GCC\s0's linkage model:
+.RS 4
+.IP "1." 4
+.IX Item "1."
+It sets the default visibility to \f(CW\*(C`hidden\*(C'\fR, like
+\&\fB\-fvisibility=hidden\fR.
+.IP "2." 4
+.IX Item "2."
+Types, but not their members, are not hidden by default.
+.IP "3." 4
+.IX Item "3."
+The One Definition Rule is relaxed for types without explicit
+visibility specifications that are defined in more than one
+shared object: those declarations are permitted if they are
+permitted when this option is not used.
+.RE
+.RS 4
+.Sp
+In new code it is better to use \fB\-fvisibility=hidden\fR and
+export those classes that are intended to be externally visible.
+Unfortunately it is possible for code to rely, perhaps accidentally,
+on the Visual Studio behavior.
+.Sp
+Among the consequences of these changes are that static data members
+of the same type with the same name but defined in different shared
+objects are different, so changing one does not change the other;
+and that pointers to function members defined in different shared
+objects may not compare equal.  When this flag is given, it is a
+violation of the \s-1ODR\s0 to define types with the same name differently.
+.RE
+.IP "\fB\-fno\-weak\fR" 4
+.IX Item "-fno-weak"
+Do not use weak symbol support, even if it is provided by the linker.
+By default, G++ uses weak symbols if they are available.  This
+option exists only for testing, and should not be used by end-users;
+it results in inferior code and has no benefits.  This option may
+be removed in a future release of G++.
+.IP "\fB\-nostdinc++\fR" 4
+.IX Item "-nostdinc++"
+Do not search for header files in the standard directories specific to
+\&\*(C+, but do still search the other standard directories.  (This option
+is used when building the \*(C+ library.)
+.PP
+In addition, these optimization, warning, and code generation options
+have meanings only for \*(C+ programs:
+.IP "\fB\-Wabi\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wabi (C, Objective-C, and Objective- only)"
+Warn when G++ it generates code that is probably not compatible with
+the vendor-neutral \*(C+ \s-1ABI.\s0  Since G++ now defaults to updating the
+\&\s-1ABI\s0 with each major release, normally \fB\-Wabi\fR will warn only if
+there is a check added later in a release series for an \s-1ABI\s0 issue
+discovered since the initial release.  \fB\-Wabi\fR will warn about
+more things if an older \s-1ABI\s0 version is selected (with
+\&\fB\-fabi\-version=\fR\fIn\fR).
+.Sp
+\&\fB\-Wabi\fR can also be used with an explicit version number to
+warn about compatibility with a particular \fB\-fabi\-version\fR
+level, e.g. \fB\-Wabi=2\fR to warn about changes relative to
+\&\fB\-fabi\-version=2\fR.
+.Sp
+If an explicit version number is provided and
+\&\fB\-fabi\-compat\-version\fR is not specified, the version number
+from this option is used for compatibility aliases.  If no explicit
+version number is provided with this option, but
+\&\fB\-fabi\-compat\-version\fR is specified, that version number is
+used for \s-1ABI\s0 warnings.
+.Sp
+Although an effort has been made to warn about
+all such cases, there are probably some cases that are not warned about,
+even though G++ is generating incompatible code.  There may also be
+cases where warnings are emitted even though the code that is generated
+is compatible.
+.Sp
+You should rewrite your code to avoid these warnings if you are
+concerned about the fact that code generated by G++ may not be binary
+compatible with code generated by other compilers.
+.Sp
+Known incompatibilities in \fB\-fabi\-version=2\fR (which was the
+default from \s-1GCC 3.4\s0 to 4.9) include:
+.RS 4
+.IP "*" 4
+A template with a non-type template parameter of reference type was
+mangled incorrectly:
+.Sp
+.Vb 3
+\&        extern int N;
+\&        template <int &> struct S {};
+\&        void n (S<N>) {2}
+.Ve
+.Sp
+This was fixed in \fB\-fabi\-version=3\fR.
+.IP "*" 4
+\&\s-1SIMD\s0 vector types declared using \f(CW\*(C`_\|_attribute ((vector_size))\*(C'\fR were
+mangled in a non-standard way that does not allow for overloading of
+functions taking vectors of different sizes.
+.Sp
+The mangling was changed in \fB\-fabi\-version=4\fR.
+.IP "*" 4
+\&\f(CW\*(C`_\|_attribute ((const))\*(C'\fR and \f(CW\*(C`noreturn\*(C'\fR were mangled as type
+qualifiers, and \f(CW\*(C`decltype\*(C'\fR of a plain declaration was folded away.
+.Sp
+These mangling issues were fixed in \fB\-fabi\-version=5\fR.
+.IP "*" 4
+Scoped enumerators passed as arguments to a variadic function are
+promoted like unscoped enumerators, causing \f(CW\*(C`va_arg\*(C'\fR to complain.
+On most targets this does not actually affect the parameter passing
+\&\s-1ABI,\s0 as there is no way to pass an argument smaller than \f(CW\*(C`int\*(C'\fR.
+.Sp
+Also, the \s-1ABI\s0 changed the mangling of template argument packs,
+\&\f(CW\*(C`const_cast\*(C'\fR, \f(CW\*(C`static_cast\*(C'\fR, prefix increment/decrement, and
+a class scope function used as a template argument.
+.Sp
+These issues were corrected in \fB\-fabi\-version=6\fR.
+.IP "*" 4
+Lambdas in default argument scope were mangled incorrectly, and the
+\&\s-1ABI\s0 changed the mangling of \f(CW\*(C`nullptr_t\*(C'\fR.
+.Sp
+These issues were corrected in \fB\-fabi\-version=7\fR.
+.IP "*" 4
+When mangling a function type with function-cv-qualifiers, the
+un-qualified function type was incorrectly treated as a substitution
+candidate.
+.Sp
+This was fixed in \fB\-fabi\-version=8\fR, the default for \s-1GCC 5.1.\s0
+.IP "*" 4
+\&\f(CW\*(C`decltype(nullptr)\*(C'\fR incorrectly had an alignment of 1, leading to
+unaligned accesses.  Note that this did not affect the \s-1ABI\s0 of a
+function with a \f(CW\*(C`nullptr_t\*(C'\fR parameter, as parameters have a
+minimum alignment.
+.Sp
+This was fixed in \fB\-fabi\-version=9\fR, the default for \s-1GCC 5.2.\s0
+.IP "*" 4
+Target-specific attributes that affect the identity of a type, such as
+ia32 calling conventions on a function type (stdcall, regparm, etc.),
+did not affect the mangled name, leading to name collisions when
+function pointers were used as template arguments.
+.Sp
+This was fixed in \fB\-fabi\-version=10\fR, the default for \s-1GCC 6.1.\s0
+.RE
+.RS 4
+.Sp
+It also warns about psABI-related changes.  The known psABI changes at this
+point include:
+.IP "*" 4
+For SysV/x86\-64, unions with \f(CW\*(C`long double\*(C'\fR members are 
+passed in memory as specified in psABI.  For example:
+.Sp
+.Vb 4
+\&        union U {
+\&          long double ld;
+\&          int i;
+\&        };
+.Ve
+.Sp
+\&\f(CW\*(C`union U\*(C'\fR is always passed in memory.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wabi\-tag\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wabi-tag ( and Objective- only)"
+Warn when a type with an \s-1ABI\s0 tag is used in a context that does not
+have that \s-1ABI\s0 tag.  See \fB\*(C+ Attributes\fR for more information
+about \s-1ABI\s0 tags.
+.IP "\fB\-Wctor\-dtor\-privacy\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wctor-dtor-privacy ( and Objective- only)"
+Warn when a class seems unusable because all the constructors or
+destructors in that class are private, and it has neither friends nor
+public static member functions.  Also warn if there are no non-private
+methods, and there's at least one private member function that isn't
+a constructor or destructor.
+.IP "\fB\-Wdelete\-non\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wdelete-non-virtual-dtor ( and Objective- only)"
+Warn when \f(CW\*(C`delete\*(C'\fR is used to destroy an instance of a class that
+has virtual functions and non-virtual destructor. It is unsafe to delete
+an instance of a derived class through a pointer to a base class if the
+base class does not have a virtual destructor.  This warning is enabled
+by \fB\-Wall\fR.
+.IP "\fB\-Wdeprecated\-copy\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wdeprecated-copy ( and Objective- only)"
+Warn that the implicit declaration of a copy constructor or copy
+assignment operator is deprecated if the class has a user-provided
+copy constructor or copy assignment operator, in \*(C+11 and up.  This
+warning is enabled by \fB\-Wextra\fR.  With
+\&\fB\-Wdeprecated\-copy\-dtor\fR, also deprecate if the class has a
+user-provided destructor.
+.IP "\fB\-Wno\-init\-list\-lifetime\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-init-list-lifetime ( and Objective- only)"
+Do not warn about uses of \f(CW\*(C`std::initializer_list\*(C'\fR that are likely
+to result in dangling pointers.  Since the underlying array for an
+\&\f(CW\*(C`initializer_list\*(C'\fR is handled like a normal \*(C+ temporary object,
+it is easy to inadvertently keep a pointer to the array past the end
+of the array's lifetime.  For example:
+.RS 4
+.IP "*" 4
+If a function returns a temporary \f(CW\*(C`initializer_list\*(C'\fR, or a local
+\&\f(CW\*(C`initializer_list\*(C'\fR variable, the array's lifetime ends at the end
+of the return statement, so the value returned has a dangling pointer.
+.IP "*" 4
+If a new-expression creates an \f(CW\*(C`initializer_list\*(C'\fR, the array only
+lives until the end of the enclosing full-expression, so the
+\&\f(CW\*(C`initializer_list\*(C'\fR in the heap has a dangling pointer.
+.IP "*" 4
+When an \f(CW\*(C`initializer_list\*(C'\fR variable is assigned from a
+brace-enclosed initializer list, the temporary array created for the
+right side of the assignment only lives until the end of the
+full-expression, so at the next statement the \f(CW\*(C`initializer_list\*(C'\fR
+variable has a dangling pointer.
+.Sp
+.Vb 6
+\&        // li\*(Aqs initial underlying array lives as long as li
+\&        std::initializer_list<int> li = { 1,2,3 };
+\&        // assignment changes li to point to a temporary array
+\&        li = { 4, 5 };
+\&        // now the temporary is gone and li has a dangling pointer
+\&        int i = li.begin()[0] // undefined behavior
+.Ve
+.IP "*" 4
+When a list constructor stores the \f(CW\*(C`begin\*(C'\fR pointer from the
+\&\f(CW\*(C`initializer_list\*(C'\fR argument, this doesn't extend the lifetime of
+the array, so if a class variable is constructed from a temporary
+\&\f(CW\*(C`initializer_list\*(C'\fR, the pointer is left dangling by the end of
+the variable declaration statement.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wliteral\-suffix\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wliteral-suffix ( and Objective- only)"
+Warn when a string or character literal is followed by a ud-suffix which does
+not begin with an underscore.  As a conforming extension, \s-1GCC\s0 treats such
+suffixes as separate preprocessing tokens in order to maintain backwards
+compatibility with code that uses formatting macros from \f(CW\*(C`<inttypes.h>\*(C'\fR.
+For example:
+.Sp
+.Vb 3
+\&        #define _\|_STDC_FORMAT_MACROS
+\&        #include <inttypes.h>
+\&        #include <stdio.h>
+\&        
+\&        int main() {
+\&          int64_t i64 = 123;
+\&          printf("My int64: %" PRId64"\en", i64);
+\&        }
+.Ve
+.Sp
+In this case, \f(CW\*(C`PRId64\*(C'\fR is treated as a separate preprocessing token.
+.Sp
+Additionally, warn when a user-defined literal operator is declared with
+a literal suffix identifier that doesn't begin with an underscore. Literal
+suffix identifiers that don't begin with an underscore are reserved for
+future standardization.
+.Sp
+This warning is enabled by default.
+.IP "\fB\-Wlto\-type\-mismatch\fR" 4
+.IX Item "-Wlto-type-mismatch"
+During the link-time optimization warn about type mismatches in
+global declarations from different compilation units.
+Requires \fB\-flto\fR to be enabled.  Enabled by default.
+.IP "\fB\-Wno\-narrowing\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-narrowing ( and Objective- only)"
+For \*(C+11 and later standards, narrowing conversions are diagnosed by default,
+as required by the standard.  A narrowing conversion from a constant produces
+an error, and a narrowing conversion from a non-constant produces a warning,
+but \fB\-Wno\-narrowing\fR suppresses the diagnostic.
+Note that this does not affect the meaning of well-formed code;
+narrowing conversions are still considered ill-formed in \s-1SFINAE\s0 contexts.
+.Sp
+With \fB\-Wnarrowing\fR in \*(C+98, warn when a narrowing
+conversion prohibited by \*(C+11 occurs within
+\&\fB{ }\fR, e.g.
+.Sp
+.Vb 1
+\&        int i = { 2.2 }; // error: narrowing from double to int
+.Ve
+.Sp
+This flag is included in \fB\-Wall\fR and \fB\-Wc++11\-compat\fR.
+.IP "\fB\-Wnoexcept\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wnoexcept ( and Objective- only)"
+Warn when a noexcept-expression evaluates to false because of a call
+to a function that does not have a non-throwing exception
+specification (i.e. \f(CW\*(C`throw()\*(C'\fR or \f(CW\*(C`noexcept\*(C'\fR) but is known by
+the compiler to never throw an exception.
+.IP "\fB\-Wnoexcept\-type\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wnoexcept-type ( and Objective- only)"
+Warn if the \*(C+17 feature making \f(CW\*(C`noexcept\*(C'\fR part of a function
+type changes the mangled name of a symbol relative to \*(C+14.  Enabled
+by \fB\-Wabi\fR and \fB\-Wc++17\-compat\fR.
+.Sp
+As an example:
+.Sp
+.Vb 3
+\&        template <class T> void f(T t) { t(); };
+\&        void g() noexcept;
+\&        void h() { f(g); }
+.Ve
+.Sp
+In \*(C+14, \f(CW\*(C`f\*(C'\fR calls \f(CW\*(C`f<void(*)()>\*(C'\fR, but in
+\&\*(C+17 it calls \f(CW\*(C`f<void(*)()noexcept>\*(C'\fR.
+.IP "\fB\-Wclass\-memaccess\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wclass-memaccess ( and Objective- only)"
+Warn when the destination of a call to a raw memory function such as
+\&\f(CW\*(C`memset\*(C'\fR or \f(CW\*(C`memcpy\*(C'\fR is an object of class type, and when writing
+into such an object might bypass the class non-trivial or deleted constructor
+or copy assignment, violate const-correctness or encapsulation, or corrupt
+virtual table pointers.  Modifying the representation of such objects may
+violate invariants maintained by member functions of the class.  For example,
+the call to \f(CW\*(C`memset\*(C'\fR below is undefined because it modifies a non-trivial
+class object and is, therefore, diagnosed.  The safe way to either initialize
+or clear the storage of objects of such types is by using the appropriate
+constructor or assignment operator, if one is available.
+.Sp
+.Vb 2
+\&        std::string str = "abc";
+\&        memset (&str, 0, sizeof str);
+.Ve
+.Sp
+The \fB\-Wclass\-memaccess\fR option is enabled by \fB\-Wall\fR.
+Explicitly casting the pointer to the class object to \f(CW\*(C`void *\*(C'\fR or
+to a type that can be safely accessed by the raw memory function suppresses
+the warning.
+.IP "\fB\-Wnon\-virtual\-dtor\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wnon-virtual-dtor ( and Objective- only)"
+Warn when a class has virtual functions and an accessible non-virtual
+destructor itself or in an accessible polymorphic base class, in which
+case it is possible but unsafe to delete an instance of a derived
+class through a pointer to the class itself or base class.  This
+warning is automatically enabled if \fB\-Weffc++\fR is specified.
+.IP "\fB\-Wregister\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wregister ( and Objective- only)"
+Warn on uses of the \f(CW\*(C`register\*(C'\fR storage class specifier, except
+when it is part of the \s-1GNU\s0 \fBExplicit Register Variables\fR extension.
+The use of the \f(CW\*(C`register\*(C'\fR keyword as storage class specifier has
+been deprecated in \*(C+11 and removed in \*(C+17.
+Enabled by default with \fB\-std=c++17\fR.
+.IP "\fB\-Wreorder\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wreorder ( and Objective- only)"
+Warn when the order of member initializers given in the code does not
+match the order in which they must be executed.  For instance:
+.Sp
+.Vb 5
+\&        struct A {
+\&          int i;
+\&          int j;
+\&          A(): j (0), i (1) { }
+\&        };
+.Ve
+.Sp
+The compiler rearranges the member initializers for \f(CW\*(C`i\*(C'\fR
+and \f(CW\*(C`j\*(C'\fR to match the declaration order of the members, emitting
+a warning to that effect.  This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wno\-pessimizing\-move\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-pessimizing-move ( and Objective- only)"
+This warning warns when a call to \f(CW\*(C`std::move\*(C'\fR prevents copy
+elision.  A typical scenario when copy elision can occur is when returning in
+a function with a class return type, when the expression being returned is the
+name of a non-volatile automatic object, and is not a function parameter, and
+has the same type as the function return type.
+.Sp
+.Vb 9
+\&        struct T {
+\&        ...
+\&        };
+\&        T fn()
+\&        {
+\&          T t;
+\&          ...
+\&          return std::move (t);
+\&        }
+.Ve
+.Sp
+But in this example, the \f(CW\*(C`std::move\*(C'\fR call prevents copy elision.
+.Sp
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wno\-redundant\-move\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-redundant-move ( and Objective- only)"
+This warning warns about redundant calls to \f(CW\*(C`std::move\*(C'\fR; that is, when
+a move operation would have been performed even without the \f(CW\*(C`std::move\*(C'\fR
+call.  This happens because the compiler is forced to treat the object as if
+it were an rvalue in certain situations such as returning a local variable,
+where copy elision isn't applicable.  Consider:
+.Sp
+.Vb 8
+\&        struct T {
+\&        ...
+\&        };
+\&        T fn(T t)
+\&        {
+\&          ...
+\&          return std::move (t);
+\&        }
+.Ve
+.Sp
+Here, the \f(CW\*(C`std::move\*(C'\fR call is redundant.  Because G++ implements Core
+Issue 1579, another example is:
+.Sp
+.Vb 12
+\&        struct T { // convertible to U
+\&        ...
+\&        };
+\&        struct U {
+\&        ...
+\&        };
+\&        U fn()
+\&        {
+\&          T t;
+\&          ...
+\&          return std::move (t);
+\&        }
+.Ve
+.Sp
+In this example, copy elision isn't applicable because the type of the
+expression being returned and the function return type differ, yet G++
+treats the return value as if it were designated by an rvalue.
+.Sp
+This warning is enabled by \fB\-Wextra\fR.
+.IP "\fB\-fext\-numeric\-literals\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-fext-numeric-literals ( and Objective- only)"
+Accept imaginary, fixed-point, or machine-defined
+literal number suffixes as \s-1GNU\s0 extensions.
+When this option is turned off these suffixes are treated
+as \*(C+11 user-defined literal numeric suffixes.
+This is on by default for all pre\-\*(C+11 dialects and all \s-1GNU\s0 dialects:
+\&\fB\-std=c++98\fR, \fB\-std=gnu++98\fR, \fB\-std=gnu++11\fR,
+\&\fB\-std=gnu++14\fR.
+This option is off by default
+for \s-1ISO \*(C+11\s0 onwards (\fB\-std=c++11\fR, ...).
+.PP
+The following \fB\-W...\fR options are not affected by \fB\-Wall\fR.
+.IP "\fB\-Weffc++\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Weffc++ ( and Objective- only)"
+Warn about violations of the following style guidelines from Scott Meyers'
+\&\fIEffective \*(C+\fR series of books:
+.RS 4
+.IP "*" 4
+Define a copy constructor and an assignment operator for classes
+with dynamically-allocated memory.
+.IP "*" 4
+Prefer initialization to assignment in constructors.
+.IP "*" 4
+Have \f(CW\*(C`operator=\*(C'\fR return a reference to \f(CW*this\fR.
+.IP "*" 4
+Don't try to return a reference when you must return an object.
+.IP "*" 4
+Distinguish between prefix and postfix forms of increment and
+decrement operators.
+.IP "*" 4
+Never overload \f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, or \f(CW\*(C`,\*(C'\fR.
+.RE
+.RS 4
+.Sp
+This option also enables \fB\-Wnon\-virtual\-dtor\fR, which is also
+one of the effective \*(C+ recommendations.  However, the check is
+extended to warn about the lack of virtual destructor in accessible
+non-polymorphic bases classes too.
+.Sp
+When selecting this option, be aware that the standard library
+headers do not obey all of these guidelines; use \fBgrep \-v\fR
+to filter out those warnings.
+.RE
+.IP "\fB\-Wstrict\-null\-sentinel\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wstrict-null-sentinel ( and Objective- only)"
+Warn about the use of an uncasted \f(CW\*(C`NULL\*(C'\fR as sentinel.  When
+compiling only with \s-1GCC\s0 this is a valid sentinel, as \f(CW\*(C`NULL\*(C'\fR is defined
+to \f(CW\*(C`_\|_null\*(C'\fR.  Although it is a null pointer constant rather than a
+null pointer, it is guaranteed to be of the same size as a pointer.
+But this use is not portable across different compilers.
+.IP "\fB\-Wno\-non\-template\-friend\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-non-template-friend ( and Objective- only)"
+Disable warnings when non-template friend functions are declared
+within a template.  In very old versions of \s-1GCC\s0 that predate implementation
+of the \s-1ISO\s0 standard, declarations such as 
+\&\fBfriend int foo(int)\fR, where the name of the friend is an unqualified-id,
+could be interpreted as a particular specialization of a template
+function; the warning exists to diagnose compatibility problems, 
+and is enabled by default.
+.IP "\fB\-Wold\-style\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wold-style-cast ( and Objective- only)"
+Warn if an old-style (C\-style) cast to a non-void type is used within
+a \*(C+ program.  The new-style casts (\f(CW\*(C`dynamic_cast\*(C'\fR,
+\&\f(CW\*(C`static_cast\*(C'\fR, \f(CW\*(C`reinterpret_cast\*(C'\fR, and \f(CW\*(C`const_cast\*(C'\fR) are
+less vulnerable to unintended effects and much easier to search for.
+.IP "\fB\-Woverloaded\-virtual\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Woverloaded-virtual ( and Objective- only)"
+Warn when a function declaration hides virtual functions from a
+base class.  For example, in:
+.Sp
+.Vb 3
+\&        struct A {
+\&          virtual void f();
+\&        };
+\&        
+\&        struct B: public A {
+\&          void f(int);
+\&        };
+.Ve
+.Sp
+the \f(CW\*(C`A\*(C'\fR class version of \f(CW\*(C`f\*(C'\fR is hidden in \f(CW\*(C`B\*(C'\fR, and code
+like:
+.Sp
+.Vb 2
+\&        B* b;
+\&        b\->f();
+.Ve
+.Sp
+fails to compile.
+.IP "\fB\-Wno\-pmf\-conversions\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-pmf-conversions ( and Objective- only)"
+Disable the diagnostic for converting a bound pointer to member function
+to a plain pointer.
+.IP "\fB\-Wsign\-promo\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wsign-promo ( and Objective- only)"
+Warn when overload resolution chooses a promotion from unsigned or
+enumerated type to a signed type, over a conversion to an unsigned type of
+the same size.  Previous versions of G++ tried to preserve
+unsignedness, but the standard mandates the current behavior.
+.IP "\fB\-Wtemplates\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wtemplates ( and Objective- only)"
+Warn when a primary template declaration is encountered.  Some coding
+rules disallow templates, and this may be used to enforce that rule.
+The warning is inactive inside a system header file, such as the \s-1STL,\s0 so
+one can still use the \s-1STL.\s0  One may also instantiate or specialize
+templates.
+.IP "\fB\-Wmultiple\-inheritance\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wmultiple-inheritance ( and Objective- only)"
+Warn when a class is defined with multiple direct base classes.  Some
+coding rules disallow multiple inheritance, and this may be used to
+enforce that rule.  The warning is inactive inside a system header file,
+such as the \s-1STL,\s0 so one can still use the \s-1STL.\s0  One may also define
+classes that indirectly use multiple inheritance.
+.IP "\fB\-Wvirtual\-inheritance\fR" 4
+.IX Item "-Wvirtual-inheritance"
+Warn when a class is defined with a virtual direct base class.  Some
+coding rules disallow multiple inheritance, and this may be used to
+enforce that rule.  The warning is inactive inside a system header file,
+such as the \s-1STL,\s0 so one can still use the \s-1STL.\s0  One may also define
+classes that indirectly use virtual inheritance.
+.IP "\fB\-Wnamespaces\fR" 4
+.IX Item "-Wnamespaces"
+Warn when a namespace definition is opened.  Some coding rules disallow
+namespaces, and this may be used to enforce that rule.  The warning is
+inactive inside a system header file, such as the \s-1STL,\s0 so one can still
+use the \s-1STL.\s0  One may also use using directives and qualified names.
+.IP "\fB\-Wno\-terminate\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-terminate ( and Objective- only)"
+Disable the warning about a throw-expression that will immediately
+result in a call to \f(CW\*(C`terminate\*(C'\fR.
+.IP "\fB\-Wno\-class\-conversion\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-class-conversion ( and Objective- only)"
+Disable the warning about the case when a conversion function converts an
+object to the same type, to a base class of that type, or to void; such
+a conversion function will never be called.
+.SS "Options Controlling Objective-C and Objective\-\*(C+ Dialects"
+.IX Subsection "Options Controlling Objective-C and Objective- Dialects"
+(\s-1NOTE:\s0 This manual does not describe the Objective-C and Objective\-\*(C+
+languages themselves.
+.PP
+This section describes the command-line options that are only meaningful
+for Objective-C and Objective\-\*(C+ programs.  You can also use most of
+the language-independent \s-1GNU\s0 compiler options.
+For example, you might compile a file \fIsome_class.m\fR like this:
+.PP
+.Vb 1
+\&        gcc \-g \-fgnu\-runtime \-O \-c some_class.m
+.Ve
+.PP
+In this example, \fB\-fgnu\-runtime\fR is an option meant only for
+Objective-C and Objective\-\*(C+ programs; you can use the other options with
+any language supported by \s-1GCC.\s0
+.PP
+Note that since Objective-C is an extension of the C language, Objective-C
+compilations may also use options specific to the C front-end (e.g.,
+\&\fB\-Wtraditional\fR).  Similarly, Objective\-\*(C+ compilations may use
+\&\*(C+\-specific options (e.g., \fB\-Wabi\fR).
+.PP
+Here is a list of options that are \fIonly\fR for compiling Objective-C
+and Objective\-\*(C+ programs:
+.IP "\fB\-fconstant\-string\-class=\fR\fIclass-name\fR" 4
+.IX Item "-fconstant-string-class=class-name"
+Use \fIclass-name\fR as the name of the class to instantiate for each
+literal string specified with the syntax \f(CW\*(C`@"..."\*(C'\fR.  The default
+class name is \f(CW\*(C`NXConstantString\*(C'\fR if the \s-1GNU\s0 runtime is being used, and
+\&\f(CW\*(C`NSConstantString\*(C'\fR if the NeXT runtime is being used (see below).  The
+\&\fB\-fconstant\-cfstrings\fR option, if also present, overrides the
+\&\fB\-fconstant\-string\-class\fR setting and cause \f(CW\*(C`@"..."\*(C'\fR literals
+to be laid out as constant CoreFoundation strings.
+.IP "\fB\-fgnu\-runtime\fR" 4
+.IX Item "-fgnu-runtime"
+Generate object code compatible with the standard \s-1GNU\s0 Objective-C
+runtime.  This is the default for most types of systems.
+.IP "\fB\-fnext\-runtime\fR" 4
+.IX Item "-fnext-runtime"
+Generate output compatible with the NeXT runtime.  This is the default
+for NeXT-based systems, including Darwin and Mac \s-1OS X.\s0  The macro
+\&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR is predefined if (and only if) this option is
+used.
+.IP "\fB\-fno\-nil\-receivers\fR" 4
+.IX Item "-fno-nil-receivers"
+Assume that all Objective-C message dispatches (\f(CW\*(C`[receiver
+message:arg]\*(C'\fR) in this translation unit ensure that the receiver is
+not \f(CW\*(C`nil\*(C'\fR.  This allows for more efficient entry points in the
+runtime to be used.  This option is only available in conjunction with
+the NeXT runtime and \s-1ABI\s0 version 0 or 1.
+.IP "\fB\-fobjc\-abi\-version=\fR\fIn\fR" 4
+.IX Item "-fobjc-abi-version=n"
+Use version \fIn\fR of the Objective-C \s-1ABI\s0 for the selected runtime.
+This option is currently supported only for the NeXT runtime.  In that
+case, Version 0 is the traditional (32\-bit) \s-1ABI\s0 without support for
+properties and other Objective-C 2.0 additions.  Version 1 is the
+traditional (32\-bit) \s-1ABI\s0 with support for properties and other
+Objective-C 2.0 additions.  Version 2 is the modern (64\-bit) \s-1ABI.\s0  If
+nothing is specified, the default is Version 0 on 32\-bit target
+machines, and Version 2 on 64\-bit target machines.
+.IP "\fB\-fobjc\-call\-cxx\-cdtors\fR" 4
+.IX Item "-fobjc-call-cxx-cdtors"
+For each Objective-C class, check if any of its instance variables is a
+\&\*(C+ object with a non-trivial default constructor.  If so, synthesize a
+special \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR instance method which runs
+non-trivial default constructors on any such instance variables, in order,
+and then return \f(CW\*(C`self\*(C'\fR.  Similarly, check if any instance variable
+is a \*(C+ object with a non-trivial destructor, and if so, synthesize a
+special \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR method which runs
+all such default destructors, in reverse order.
+.Sp
+The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR
+methods thusly generated only operate on instance variables
+declared in the current Objective-C class, and not those inherited
+from superclasses.  It is the responsibility of the Objective-C
+runtime to invoke all such methods in an object's inheritance
+hierarchy.  The \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR methods are invoked
+by the runtime immediately after a new object instance is allocated;
+the \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods are invoked immediately
+before the runtime deallocates an object instance.
+.Sp
+As of this writing, only the NeXT runtime on Mac \s-1OS X 10.4\s0 and later has
+support for invoking the \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR and
+\&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR methods.
+.IP "\fB\-fobjc\-direct\-dispatch\fR" 4
+.IX Item "-fobjc-direct-dispatch"
+Allow fast jumps to the message dispatcher.  On Darwin this is
+accomplished via the comm page.
+.IP "\fB\-fobjc\-exceptions\fR" 4
+.IX Item "-fobjc-exceptions"
+Enable syntactic support for structured exception handling in
+Objective-C, similar to what is offered by \*(C+.  This option
+is required to use the Objective-C keywords \f(CW@try\fR,
+\&\f(CW@throw\fR, \f(CW@catch\fR, \f(CW@finally\fR and
+\&\f(CW@synchronized\fR.  This option is available with both the \s-1GNU\s0
+runtime and the NeXT runtime (but not available in conjunction with
+the NeXT runtime on Mac \s-1OS X 10.2\s0 and earlier).
+.IP "\fB\-fobjc\-gc\fR" 4
+.IX Item "-fobjc-gc"
+Enable garbage collection (\s-1GC\s0) in Objective-C and Objective\-\*(C+
+programs.  This option is only available with the NeXT runtime; the
+\&\s-1GNU\s0 runtime has a different garbage collection implementation that
+does not require special compiler flags.
+.IP "\fB\-fobjc\-nilcheck\fR" 4
+.IX Item "-fobjc-nilcheck"
+For the NeXT runtime with version 2 of the \s-1ABI,\s0 check for a nil
+receiver in method invocations before doing the actual method call.
+This is the default and can be disabled using
+\&\fB\-fno\-objc\-nilcheck\fR.  Class methods and super calls are never
+checked for nil in this way no matter what this flag is set to.
+Currently this flag does nothing when the \s-1GNU\s0 runtime, or an older
+version of the NeXT runtime \s-1ABI,\s0 is used.
+.IP "\fB\-fobjc\-std=objc1\fR" 4
+.IX Item "-fobjc-std=objc1"
+Conform to the language syntax of Objective-C 1.0, the language
+recognized by \s-1GCC 4.0.\s0  This only affects the Objective-C additions to
+the C/\*(C+ language; it does not affect conformance to C/\*(C+ standards,
+which is controlled by the separate C/\*(C+ dialect option flags.  When
+this option is used with the Objective-C or Objective\-\*(C+ compiler,
+any Objective-C syntax that is not recognized by \s-1GCC 4.0\s0 is rejected.
+This is useful if you need to make sure that your Objective-C code can
+be compiled with older versions of \s-1GCC.\s0
+.IP "\fB\-freplace\-objc\-classes\fR" 4
+.IX Item "-freplace-objc-classes"
+Emit a special marker instructing \fB\f(BIld\fB\|(1)\fR not to statically link in
+the resulting object file, and allow \fB\f(BIdyld\fB\|(1)\fR to load it in at
+run time instead.  This is used in conjunction with the Fix-and-Continue
+debugging mode, where the object file in question may be recompiled and
+dynamically reloaded in the course of program execution, without the need
+to restart the program itself.  Currently, Fix-and-Continue functionality
+is only available in conjunction with the NeXT runtime on Mac \s-1OS X 10.3\s0
+and later.
+.IP "\fB\-fzero\-link\fR" 4
+.IX Item "-fzero-link"
+When compiling for the NeXT runtime, the compiler ordinarily replaces calls
+to \f(CW\*(C`objc_getClass("...")\*(C'\fR (when the name of the class is known at
+compile time) with static class references that get initialized at load time,
+which improves run-time performance.  Specifying the \fB\-fzero\-link\fR flag
+suppresses this behavior and causes calls to \f(CW\*(C`objc_getClass("...")\*(C'\fR
+to be retained.  This is useful in Zero-Link debugging mode, since it allows
+for individual class implementations to be modified during program execution.
+The \s-1GNU\s0 runtime currently always retains calls to \f(CW\*(C`objc_get_class("...")\*(C'\fR
+regardless of command-line options.
+.IP "\fB\-fno\-local\-ivars\fR" 4
+.IX Item "-fno-local-ivars"
+By default instance variables in Objective-C can be accessed as if
+they were local variables from within the methods of the class they're
+declared in.  This can lead to shadowing between instance variables
+and other variables declared either locally inside a class method or
+globally with the same name.  Specifying the \fB\-fno\-local\-ivars\fR
+flag disables this behavior thus avoiding variable shadowing issues.
+.IP "\fB\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR]" 4
+.IX Item "-fivar-visibility=[public|protected|private|package]"
+Set the default instance variable visibility to the specified option
+so that instance variables declared outside the scope of any access
+modifier directives default to the specified visibility.
+.IP "\fB\-gen\-decls\fR" 4
+.IX Item "-gen-decls"
+Dump interface declarations for all classes seen in the source file to a
+file named \fI\fIsourcename\fI.decl\fR.
+.IP "\fB\-Wassign\-intercept\fR (Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wassign-intercept (Objective-C and Objective- only)"
+Warn whenever an Objective-C assignment is being intercepted by the
+garbage collector.
+.IP "\fB\-Wno\-protocol\fR (Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-protocol (Objective-C and Objective- only)"
+If a class is declared to implement a protocol, a warning is issued for
+every method in the protocol that is not implemented by the class.  The
+default behavior is to issue a warning for every method not explicitly
+implemented in the class, even if a method implementation is inherited
+from the superclass.  If you use the \fB\-Wno\-protocol\fR option, then
+methods inherited from the superclass are considered to be implemented,
+and no warning is issued for them.
+.IP "\fB\-Wselector\fR (Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wselector (Objective-C and Objective- only)"
+Warn if multiple methods of different types for the same selector are
+found during compilation.  The check is performed on the list of methods
+in the final stage of compilation.  Additionally, a check is performed
+for each selector appearing in a \f(CW\*(C`@selector(...)\*(C'\fR
+expression, and a corresponding method for that selector has been found
+during compilation.  Because these checks scan the method table only at
+the end of compilation, these warnings are not produced if the final
+stage of compilation is not reached, for example because an error is
+found during compilation, or because the \fB\-fsyntax\-only\fR option is
+being used.
+.IP "\fB\-Wstrict\-selector\-match\fR (Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wstrict-selector-match (Objective-C and Objective- only)"
+Warn if multiple methods with differing argument and/or return types are
+found for a given selector when attempting to send a message using this
+selector to a receiver of type \f(CW\*(C`id\*(C'\fR or \f(CW\*(C`Class\*(C'\fR.  When this flag
+is off (which is the default behavior), the compiler omits such warnings
+if any differences found are confined to types that share the same size
+and alignment.
+.IP "\fB\-Wundeclared\-selector\fR (Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wundeclared-selector (Objective-C and Objective- only)"
+Warn if a \f(CW\*(C`@selector(...)\*(C'\fR expression referring to an
+undeclared selector is found.  A selector is considered undeclared if no
+method with that name has been declared before the
+\&\f(CW\*(C`@selector(...)\*(C'\fR expression, either explicitly in an
+\&\f(CW@interface\fR or \f(CW@protocol\fR declaration, or implicitly in
+an \f(CW@implementation\fR section.  This option always performs its
+checks as soon as a \f(CW\*(C`@selector(...)\*(C'\fR expression is found,
+while \fB\-Wselector\fR only performs its checks in the final stage of
+compilation.  This also enforces the coding style convention
+that methods and selectors must be declared before being used.
+.IP "\fB\-print\-objc\-runtime\-info\fR" 4
+.IX Item "-print-objc-runtime-info"
+Generate C header describing the largest structure that is passed by
+value, if any.
+.SS "Options to Control Diagnostic Messages Formatting"
+.IX Subsection "Options to Control Diagnostic Messages Formatting"
+Traditionally, diagnostic messages have been formatted irrespective of
+the output device's aspect (e.g. its width, ...).  You can use the
+options described below
+to control the formatting algorithm for diagnostic messages, 
+e.g. how many characters per line, how often source location
+information should be reported.  Note that some language front ends may not
+honor these options.
+.IP "\fB\-fmessage\-length=\fR\fIn\fR" 4
+.IX Item "-fmessage-length=n"
+Try to format error messages so that they fit on lines of about
+\&\fIn\fR characters.  If \fIn\fR is zero, then no line-wrapping is
+done; each error message appears on a single line.  This is the
+default for all front ends.
+.Sp
+Note \- this option also affects the display of the \fB#error\fR and
+\&\fB#warning\fR pre-processor directives, and the \fBdeprecated\fR
+function/type/variable attribute.  It does not however affect the
+\&\fBpragma \s-1GCC\s0 warning\fR and \fBpragma \s-1GCC\s0 error\fR pragmas.
+.IP "\fB\-fdiagnostics\-show\-location=once\fR" 4
+.IX Item "-fdiagnostics-show-location=once"
+Only meaningful in line-wrapping mode.  Instructs the diagnostic messages
+reporter to emit source location information \fIonce\fR; that is, in
+case the message is too long to fit on a single physical line and has to
+be wrapped, the source location won't be emitted (as prefix) again,
+over and over, in subsequent continuation lines.  This is the default
+behavior.
+.IP "\fB\-fdiagnostics\-show\-location=every\-line\fR" 4
+.IX Item "-fdiagnostics-show-location=every-line"
+Only meaningful in line-wrapping mode.  Instructs the diagnostic
+messages reporter to emit the same source location information (as
+prefix) for physical lines that result from the process of breaking
+a message which is too long to fit on a single line.
+.IP "\fB\-fdiagnostics\-color[=\fR\fI\s-1WHEN\s0\fR\fB]\fR" 4
+.IX Item "-fdiagnostics-color[=WHEN]"
+.PD 0
+.IP "\fB\-fno\-diagnostics\-color\fR" 4
+.IX Item "-fno-diagnostics-color"
+.PD
+Use color in diagnostics.  \fI\s-1WHEN\s0\fR is \fBnever\fR, \fBalways\fR,
+or \fBauto\fR.  The default depends on how the compiler has been configured,
+it can be any of the above \fI\s-1WHEN\s0\fR options or also \fBnever\fR
+if \fB\s-1GCC_COLORS\s0\fR environment variable isn't present in the environment,
+and \fBauto\fR otherwise.
+\&\fBauto\fR means to use color only when the standard error is a terminal.
+The forms \fB\-fdiagnostics\-color\fR and \fB\-fno\-diagnostics\-color\fR are
+aliases for \fB\-fdiagnostics\-color=always\fR and
+\&\fB\-fdiagnostics\-color=never\fR, respectively.
+.Sp
+The colors are defined by the environment variable \fB\s-1GCC_COLORS\s0\fR.
+Its value is a colon-separated list of capabilities and Select Graphic
+Rendition (\s-1SGR\s0) substrings. \s-1SGR\s0 commands are interpreted by the
+terminal or terminal emulator.  (See the section in the documentation
+of your text terminal for permitted values and their meanings as
+character attributes.)  These substring values are integers in decimal
+representation and can be concatenated with semicolons.
+Common values to concatenate include
+\&\fB1\fR for bold,
+\&\fB4\fR for underline,
+\&\fB5\fR for blink,
+\&\fB7\fR for inverse,
+\&\fB39\fR for default foreground color,
+\&\fB30\fR to \fB37\fR for foreground colors,
+\&\fB90\fR to \fB97\fR for 16\-color mode foreground colors,
+\&\fB38;5;0\fR to \fB38;5;255\fR
+for 88\-color and 256\-color modes foreground colors,
+\&\fB49\fR for default background color,
+\&\fB40\fR to \fB47\fR for background colors,
+\&\fB100\fR to \fB107\fR for 16\-color mode background colors,
+and \fB48;5;0\fR to \fB48;5;255\fR
+for 88\-color and 256\-color modes background colors.
+.Sp
+The default \fB\s-1GCC_COLORS\s0\fR is
+.Sp
+.Vb 4
+\&        error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\e
+\&        quote=01:fixit\-insert=32:fixit\-delete=31:\e
+\&        diff\-filename=01:diff\-hunk=32:diff\-delete=31:diff\-insert=32:\e
+\&        type\-diff=01;32
+.Ve
+.Sp
+where \fB01;31\fR is bold red, \fB01;35\fR is bold magenta,
+\&\fB01;36\fR is bold cyan, \fB32\fR is green, \fB34\fR is blue,
+\&\fB01\fR is bold, and \fB31\fR is red.
+Setting \fB\s-1GCC_COLORS\s0\fR to the empty string disables colors.
+Supported capabilities are as follows.
+.RS 4
+.ie n .IP """error=""" 4
+.el .IP "\f(CWerror=\fR" 4
+.IX Item "error="
+\&\s-1SGR\s0 substring for error: markers.
+.ie n .IP """warning=""" 4
+.el .IP "\f(CWwarning=\fR" 4
+.IX Item "warning="
+\&\s-1SGR\s0 substring for warning: markers.
+.ie n .IP """note=""" 4
+.el .IP "\f(CWnote=\fR" 4
+.IX Item "note="
+\&\s-1SGR\s0 substring for note: markers.
+.ie n .IP """range1=""" 4
+.el .IP "\f(CWrange1=\fR" 4
+.IX Item "range1="
+\&\s-1SGR\s0 substring for first additional range.
+.ie n .IP """range2=""" 4
+.el .IP "\f(CWrange2=\fR" 4
+.IX Item "range2="
+\&\s-1SGR\s0 substring for second additional range.
+.ie n .IP """locus=""" 4
+.el .IP "\f(CWlocus=\fR" 4
+.IX Item "locus="
+\&\s-1SGR\s0 substring for location information, \fBfile:line\fR or
+\&\fBfile:line:column\fR etc.
+.ie n .IP """quote=""" 4
+.el .IP "\f(CWquote=\fR" 4
+.IX Item "quote="
+\&\s-1SGR\s0 substring for information printed within quotes.
+.ie n .IP """fixit\-insert=""" 4
+.el .IP "\f(CWfixit\-insert=\fR" 4
+.IX Item "fixit-insert="
+\&\s-1SGR\s0 substring for fix-it hints suggesting text to
+be inserted or replaced.
+.ie n .IP """fixit\-delete=""" 4
+.el .IP "\f(CWfixit\-delete=\fR" 4
+.IX Item "fixit-delete="
+\&\s-1SGR\s0 substring for fix-it hints suggesting text to
+be deleted.
+.ie n .IP """diff\-filename=""" 4
+.el .IP "\f(CWdiff\-filename=\fR" 4
+.IX Item "diff-filename="
+\&\s-1SGR\s0 substring for filename headers within generated patches.
+.ie n .IP """diff\-hunk=""" 4
+.el .IP "\f(CWdiff\-hunk=\fR" 4
+.IX Item "diff-hunk="
+\&\s-1SGR\s0 substring for the starts of hunks within generated patches.
+.ie n .IP """diff\-delete=""" 4
+.el .IP "\f(CWdiff\-delete=\fR" 4
+.IX Item "diff-delete="
+\&\s-1SGR\s0 substring for deleted lines within generated patches.
+.ie n .IP """diff\-insert=""" 4
+.el .IP "\f(CWdiff\-insert=\fR" 4
+.IX Item "diff-insert="
+\&\s-1SGR\s0 substring for inserted lines within generated patches.
+.ie n .IP """type\-diff=""" 4
+.el .IP "\f(CWtype\-diff=\fR" 4
+.IX Item "type-diff="
+\&\s-1SGR\s0 substring for highlighting mismatching types within template
+arguments in the \*(C+ frontend.
+.RE
+.RS 4
+.RE
+.IP "\fB\-fno\-diagnostics\-show\-option\fR" 4
+.IX Item "-fno-diagnostics-show-option"
+By default, each diagnostic emitted includes text indicating the
+command-line option that directly controls the diagnostic (if such an
+option is known to the diagnostic machinery).  Specifying the
+\&\fB\-fno\-diagnostics\-show\-option\fR flag suppresses that behavior.
+.IP "\fB\-fno\-diagnostics\-show\-caret\fR" 4
+.IX Item "-fno-diagnostics-show-caret"
+By default, each diagnostic emitted includes the original source line
+and a caret \fB^\fR indicating the column.  This option suppresses this
+information.  The source line is truncated to \fIn\fR characters, if
+the \fB\-fmessage\-length=n\fR option is given.  When the output is done
+to the terminal, the width is limited to the width given by the
+\&\fB\s-1COLUMNS\s0\fR environment variable or, if not set, to the terminal width.
+.IP "\fB\-fno\-diagnostics\-show\-labels\fR" 4
+.IX Item "-fno-diagnostics-show-labels"
+By default, when printing source code (via \fB\-fdiagnostics\-show\-caret\fR),
+diagnostics can label ranges of source code with pertinent information, such
+as the types of expressions:
+.Sp
+.Vb 4
+\&            printf ("foo %s bar", long_i + long_j);
+\&                         ~^       ~~~~~~~~~~~~~~~
+\&                          |              |
+\&                          char *         long int
+.Ve
+.Sp
+This option suppresses the printing of these labels (in the example above,
+the vertical bars and the \*(L"char *\*(R" and \*(L"long int\*(R" text).
+.IP "\fB\-fno\-diagnostics\-show\-line\-numbers\fR" 4
+.IX Item "-fno-diagnostics-show-line-numbers"
+By default, when printing source code (via \fB\-fdiagnostics\-show\-caret\fR),
+a left margin is printed, showing line numbers.  This option suppresses this
+left margin.
+.IP "\fB\-fdiagnostics\-minimum\-margin\-width=\fR\fIwidth\fR" 4
+.IX Item "-fdiagnostics-minimum-margin-width=width"
+This option controls the minimum width of the left margin printed by
+\&\fB\-fdiagnostics\-show\-line\-numbers\fR.  It defaults to 6.
+.IP "\fB\-fdiagnostics\-parseable\-fixits\fR" 4
+.IX Item "-fdiagnostics-parseable-fixits"
+Emit fix-it hints in a machine-parseable format, suitable for consumption
+by IDEs.  For each fix-it, a line will be printed after the relevant
+diagnostic, starting with the string \*(L"fix-it:\*(R".  For example:
+.Sp
+.Vb 1
+\&        fix\-it:"test.c":{45:3\-45:21}:"gtk_widget_show_all"
+.Ve
+.Sp
+The location is expressed as a half-open range, expressed as a count of
+bytes, starting at byte 1 for the initial column.  In the above example,
+bytes 3 through 20 of line 45 of \*(L"test.c\*(R" are to be replaced with the
+given string:
+.Sp
+.Vb 5
+\&        00000000011111111112222222222
+\&        12345678901234567890123456789
+\&          gtk_widget_showall (dlg);
+\&          ^^^^^^^^^^^^^^^^^^
+\&          gtk_widget_show_all
+.Ve
+.Sp
+The filename and replacement string escape backslash as \*(L"\e\e\*(R", tab as \*(L"\et\*(R",
+newline as \*(L"\en\*(R", double quotes as \*(L"\e\*(R"\*(L", non-printable characters as octal
+(e.g. vertical tab as \*(R"\e013").
+.Sp
+An empty replacement string indicates that the given range is to be removed.
+An empty range (e.g. \*(L"45:3\-45:3\*(R") indicates that the string is to
+be inserted at the given position.
+.IP "\fB\-fdiagnostics\-generate\-patch\fR" 4
+.IX Item "-fdiagnostics-generate-patch"
+Print fix-it hints to stderr in unified diff format, after any diagnostics
+are printed.  For example:
+.Sp
+.Vb 3
+\&        \-\-\- test.c
+\&        +++ test.c
+\&        @ \-42,5 +42,5 @
+\&        
+\&         void show_cb(GtkDialog *dlg)
+\&         {
+\&        \-  gtk_widget_showall(dlg);
+\&        +  gtk_widget_show_all(dlg);
+\&         }
+.Ve
+.Sp
+The diff may or may not be colorized, following the same rules
+as for diagnostics (see \fB\-fdiagnostics\-color\fR).
+.IP "\fB\-fdiagnostics\-show\-template\-tree\fR" 4
+.IX Item "-fdiagnostics-show-template-tree"
+In the \*(C+ frontend, when printing diagnostics showing mismatching
+template types, such as:
+.Sp
+.Vb 2
+\&          could not convert \*(Aqstd::map<int, std::vector<double> >()\*(Aq
+\&            from \*(Aqmap<[...],vector<double>>\*(Aq to \*(Aqmap<[...],vector<float>>
+.Ve
+.Sp
+the \fB\-fdiagnostics\-show\-template\-tree\fR flag enables printing a
+tree-like structure showing the common and differing parts of the types,
+such as:
+.Sp
+.Vb 4
+\&          map<
+\&            [...],
+\&            vector<
+\&              [double != float]>>
+.Ve
+.Sp
+The parts that differ are highlighted with color (\*(L"double\*(R" and
+\&\*(L"float\*(R" in this case).
+.IP "\fB\-fno\-elide\-type\fR" 4
+.IX Item "-fno-elide-type"
+By default when the \*(C+ frontend prints diagnostics showing mismatching
+template types, common parts of the types are printed as \*(L"[...]\*(R" to
+simplify the error message.  For example:
+.Sp
+.Vb 2
+\&          could not convert \*(Aqstd::map<int, std::vector<double> >()\*(Aq
+\&            from \*(Aqmap<[...],vector<double>>\*(Aq to \*(Aqmap<[...],vector<float>>
+.Ve
+.Sp
+Specifying the \fB\-fno\-elide\-type\fR flag suppresses that behavior.
+This flag also affects the output of the
+\&\fB\-fdiagnostics\-show\-template\-tree\fR flag.
+.IP "\fB\-fno\-show\-column\fR" 4
+.IX Item "-fno-show-column"
+Do not print column numbers in diagnostics.  This may be necessary if
+diagnostics are being scanned by a program that does not understand the
+column numbers, such as \fBdejagnu\fR.
+.IP "\fB\-fdiagnostics\-format=\fR\fI\s-1FORMAT\s0\fR" 4
+.IX Item "-fdiagnostics-format=FORMAT"
+Select a different format for printing diagnostics.
+\&\fI\s-1FORMAT\s0\fR is \fBtext\fR or \fBjson\fR.
+The default is \fBtext\fR.
+.Sp
+The \fBjson\fR format consists of a top-level \s-1JSON\s0 array containing \s-1JSON\s0
+objects representing the diagnostics.
+.Sp
+The \s-1JSON\s0 is emitted as one line, without formatting; the examples below
+have been formatted for clarity.
+.Sp
+Diagnostics can have child diagnostics.  For example, this error and note:
+.Sp
+.Vb 8
+\&        misleading\-indentation.c:15:3: warning: this \*(Aqif\*(Aq clause does not
+\&          guard... [\-Wmisleading\-indentation]
+\&           15 |   if (flag)
+\&              |   ^~
+\&        misleading\-indentation.c:17:5: note: ...this statement, but the latter
+\&          is misleadingly indented as if it were guarded by the \*(Aqif\*(Aq
+\&           17 |     y = 2;
+\&              |     ^
+.Ve
+.Sp
+might be printed in \s-1JSON\s0 form (after formatting) like this:
+.Sp
+.Vb 10
+\&        [
+\&            {
+\&                "kind": "warning",
+\&                "locations": [
+\&                    {
+\&                        "caret": {
+\&                            "column": 3,
+\&                            "file": "misleading\-indentation.c",
+\&                            "line": 15
+\&                        },
+\&                        "finish": {
+\&                            "column": 4,
+\&                            "file": "misleading\-indentation.c",
+\&                            "line": 15
+\&                        }
+\&                    }
+\&                ],
+\&                "message": "this \eu2018if\eu2019 clause does not guard...",
+\&                "option": "\-Wmisleading\-indentation",
+\&                "children": [
+\&                    {
+\&                        "kind": "note",
+\&                        "locations": [
+\&                            {
+\&                                "caret": {
+\&                                    "column": 5,
+\&                                    "file": "misleading\-indentation.c",
+\&                                    "line": 17
+\&                                }
+\&                            }
+\&                        ],
+\&                        "message": "...this statement, but the latter is ..."
+\&                    }
+\&                ]
+\&            },
+\&            ...
+\&        ]
+.Ve
+.Sp
+where the \f(CW\*(C`note\*(C'\fR is a child of the \f(CW\*(C`warning\*(C'\fR.
+.Sp
+A diagnostic has a \f(CW\*(C`kind\*(C'\fR.  If this is \f(CW\*(C`warning\*(C'\fR, then there is
+an \f(CW\*(C`option\*(C'\fR key describing the command-line option controlling the
+warning.
+.Sp
+A diagnostic can contain zero or more locations.  Each location has up
+to three positions within it: a \f(CW\*(C`caret\*(C'\fR position and optional
+\&\f(CW\*(C`start\*(C'\fR and \f(CW\*(C`finish\*(C'\fR positions.  A location can also have
+an optional \f(CW\*(C`label\*(C'\fR string.  For example, this error:
+.Sp
+.Vb 7
+\&        bad\-binary\-ops.c:64:23: error: invalid operands to binary + (have \*(AqS\*(Aq {aka
+\&           \*(Aqstruct s\*(Aq} and \*(AqT\*(Aq {aka \*(Aqstruct t\*(Aq})
+\&           64 |   return callee_4a () + callee_4b ();
+\&              |          ~~~~~~~~~~~~ ^ ~~~~~~~~~~~~
+\&              |          |              |
+\&              |          |              T {aka struct t}
+\&              |          S {aka struct s}
+.Ve
+.Sp
+has three locations.  Its primary location is at the \*(L"+\*(R" token at column
+23.  It has two secondary locations, describing the left and right-hand sides
+of the expression, which have labels.  It might be printed in \s-1JSON\s0 form as:
+.Sp
+.Vb 10
+\&            {
+\&                "children": [],
+\&                "kind": "error",
+\&                "locations": [
+\&                    {
+\&                        "caret": {
+\&                            "column": 23, "file": "bad\-binary\-ops.c", "line": 64
+\&                        }
+\&                    },
+\&                    {
+\&                        "caret": {
+\&                            "column": 10, "file": "bad\-binary\-ops.c", "line": 64
+\&                        },
+\&                        "finish": {
+\&                            "column": 21, "file": "bad\-binary\-ops.c", "line": 64
+\&                        },
+\&                        "label": "S {aka struct s}"
+\&                    },
+\&                    {
+\&                        "caret": {
+\&                            "column": 25, "file": "bad\-binary\-ops.c", "line": 64
+\&                        },
+\&                        "finish": {
+\&                            "column": 36, "file": "bad\-binary\-ops.c", "line": 64
+\&                        },
+\&                        "label": "T {aka struct t}"
+\&                    }
+\&                ],
+\&                "message": "invalid operands to binary + ..."
+\&            }
+.Ve
+.Sp
+If a diagnostic contains fix-it hints, it has a \f(CW\*(C`fixits\*(C'\fR array,
+consisting of half-open intervals, similar to the output of
+\&\fB\-fdiagnostics\-parseable\-fixits\fR.  For example, this diagnostic
+with a replacement fix-it hint:
+.Sp
+.Vb 5
+\&        demo.c:8:15: error: \*(Aqstruct s\*(Aq has no member named \*(Aqcolour\*(Aq; did you
+\&          mean \*(Aqcolor\*(Aq?
+\&            8 |   return ptr\->colour;
+\&              |               ^~~~~~
+\&              |               color
+.Ve
+.Sp
+might be printed in \s-1JSON\s0 form as:
+.Sp
+.Vb 10
+\&            {
+\&                "children": [],
+\&                "fixits": [
+\&                    {
+\&                        "next": {
+\&                            "column": 21,
+\&                            "file": "demo.c",
+\&                            "line": 8
+\&                        },
+\&                        "start": {
+\&                            "column": 15,
+\&                            "file": "demo.c",
+\&                            "line": 8
+\&                        },
+\&                        "string": "color"
+\&                    }
+\&                ],
+\&                "kind": "error",
+\&                "locations": [
+\&                    {
+\&                        "caret": {
+\&                            "column": 15,
+\&                            "file": "demo.c",
+\&                            "line": 8
+\&                        },
+\&                        "finish": {
+\&                            "column": 20,
+\&                            "file": "demo.c",
+\&                            "line": 8
+\&                        }
+\&                    }
+\&                ],
+\&                "message": "\eu2018struct s\eu2019 has no member named ..."
+\&            }
+.Ve
+.Sp
+where the fix-it hint suggests replacing the text from \f(CW\*(C`start\*(C'\fR up
+to but not including \f(CW\*(C`next\*(C'\fR with \f(CW\*(C`string\*(C'\fR's value.  Deletions
+are expressed via an empty value for \f(CW\*(C`string\*(C'\fR, insertions by
+having \f(CW\*(C`start\*(C'\fR equal \f(CW\*(C`next\*(C'\fR.
+.SS "Options to Request or Suppress Warnings"
+.IX Subsection "Options to Request or Suppress Warnings"
+Warnings are diagnostic messages that report constructions that
+are not inherently erroneous but that are risky or suggest there
+may have been an error.
+.PP
+The following language-independent options do not enable specific
+warnings but control the kinds of diagnostics produced by \s-1GCC.\s0
+.IP "\fB\-fsyntax\-only\fR" 4
+.IX Item "-fsyntax-only"
+Check the code for syntax errors, but don't do anything beyond that.
+.IP "\fB\-fmax\-errors=\fR\fIn\fR" 4
+.IX Item "-fmax-errors=n"
+Limits the maximum number of error messages to \fIn\fR, at which point
+\&\s-1GCC\s0 bails out rather than attempting to continue processing the source
+code.  If \fIn\fR is 0 (the default), there is no limit on the number
+of error messages produced.  If \fB\-Wfatal\-errors\fR is also
+specified, then \fB\-Wfatal\-errors\fR takes precedence over this
+option.
+.IP "\fB\-w\fR" 4
+.IX Item "-w"
+Inhibit all warning messages.
+.IP "\fB\-Werror\fR" 4
+.IX Item "-Werror"
+Make all warnings into errors.
+.IP "\fB\-Werror=\fR" 4
+.IX Item "-Werror="
+Make the specified warning into an error.  The specifier for a warning
+is appended; for example \fB\-Werror=switch\fR turns the warnings
+controlled by \fB\-Wswitch\fR into errors.  This switch takes a
+negative form, to be used to negate \fB\-Werror\fR for specific
+warnings; for example \fB\-Wno\-error=switch\fR makes
+\&\fB\-Wswitch\fR warnings not be errors, even when \fB\-Werror\fR
+is in effect.
+.Sp
+The warning message for each controllable warning includes the
+option that controls the warning.  That option can then be used with
+\&\fB\-Werror=\fR and \fB\-Wno\-error=\fR as described above.
+(Printing of the option in the warning message can be disabled using the
+\&\fB\-fno\-diagnostics\-show\-option\fR flag.)
+.Sp
+Note that specifying \fB\-Werror=\fR\fIfoo\fR automatically implies
+\&\fB\-W\fR\fIfoo\fR.  However, \fB\-Wno\-error=\fR\fIfoo\fR does not
+imply anything.
+.IP "\fB\-Wfatal\-errors\fR" 4
+.IX Item "-Wfatal-errors"
+This option causes the compiler to abort compilation on the first error
+occurred rather than trying to keep going and printing further error
+messages.
+.PP
+You can request many specific warnings with options beginning with
+\&\fB\-W\fR, for example \fB\-Wimplicit\fR to request warnings on
+implicit declarations.  Each of these specific warning options also
+has a negative form beginning \fB\-Wno\-\fR to turn off warnings; for
+example, \fB\-Wno\-implicit\fR.  This manual lists only one of the
+two forms, whichever is not the default.  For further
+language-specific options also refer to \fB\*(C+ Dialect Options\fR and
+\&\fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
+.PP
+Some options, such as \fB\-Wall\fR and \fB\-Wextra\fR, turn on other
+options, such as \fB\-Wunused\fR, which may turn on further options,
+such as \fB\-Wunused\-value\fR. The combined effect of positive and
+negative forms is that more specific options have priority over less
+specific ones, independently of their position in the command-line. For
+options of the same specificity, the last one takes effect. Options
+enabled or disabled via pragmas take effect
+as if they appeared at the end of the command-line.
+.PP
+When an unrecognized warning option is requested (e.g.,
+\&\fB\-Wunknown\-warning\fR), \s-1GCC\s0 emits a diagnostic stating
+that the option is not recognized.  However, if the \fB\-Wno\-\fR form
+is used, the behavior is slightly different: no diagnostic is
+produced for \fB\-Wno\-unknown\-warning\fR unless other diagnostics
+are being produced.  This allows the use of new \fB\-Wno\-\fR options
+with old compilers, but if something goes wrong, the compiler
+warns that an unrecognized option is present.
+.IP "\fB\-Wpedantic\fR" 4
+.IX Item "-Wpedantic"
+.PD 0
+.IP "\fB\-pedantic\fR" 4
+.IX Item "-pedantic"
+.PD
+Issue all the warnings demanded by strict \s-1ISO C\s0 and \s-1ISO \*(C+\s0;
+reject all programs that use forbidden extensions, and some other
+programs that do not follow \s-1ISO C\s0 and \s-1ISO \*(C+.\s0  For \s-1ISO C,\s0 follows the
+version of the \s-1ISO C\s0 standard specified by any \fB\-std\fR option used.
+.Sp
+Valid \s-1ISO C\s0 and \s-1ISO \*(C+\s0 programs should compile properly with or without
+this option (though a rare few require \fB\-ansi\fR or a
+\&\fB\-std\fR option specifying the required version of \s-1ISO C\s0).  However,
+without this option, certain \s-1GNU\s0 extensions and traditional C and \*(C+
+features are supported as well.  With this option, they are rejected.
+.Sp
+\&\fB\-Wpedantic\fR does not cause warning messages for use of the
+alternate keywords whose names begin and end with \fB_\|_\fR.  Pedantic
+warnings are also disabled in the expression that follows
+\&\f(CW\*(C`_\|_extension_\|_\*(C'\fR.  However, only system header files should use
+these escape routes; application programs should avoid them.
+.Sp
+Some users try to use \fB\-Wpedantic\fR to check programs for strict \s-1ISO
+C\s0 conformance.  They soon find that it does not do quite what they want:
+it finds some non-ISO practices, but not all\-\-\-only those for which
+\&\s-1ISO C\s0 \fIrequires\fR a diagnostic, and some others for which
+diagnostics have been added.
+.Sp
+A feature to report any failure to conform to \s-1ISO C\s0 might be useful in
+some instances, but would require considerable additional work and would
+be quite different from \fB\-Wpedantic\fR.  We don't have plans to
+support such a feature in the near future.
+.Sp
+Where the standard specified with \fB\-std\fR represents a \s-1GNU\s0
+extended dialect of C, such as \fBgnu90\fR or \fBgnu99\fR, there is a
+corresponding \fIbase standard\fR, the version of \s-1ISO C\s0 on which the \s-1GNU\s0
+extended dialect is based.  Warnings from \fB\-Wpedantic\fR are given
+where they are required by the base standard.  (It does not make sense
+for such warnings to be given only for features not in the specified \s-1GNU
+C\s0 dialect, since by definition the \s-1GNU\s0 dialects of C include all
+features the compiler supports with the given option, and there would be
+nothing to warn about.)
+.IP "\fB\-pedantic\-errors\fR" 4
+.IX Item "-pedantic-errors"
+Give an error whenever the \fIbase standard\fR (see \fB\-Wpedantic\fR)
+requires a diagnostic, in some cases where there is undefined behavior
+at compile-time and in some other cases that do not prevent compilation
+of programs that are valid according to the standard. This is not
+equivalent to \fB\-Werror=pedantic\fR, since there are errors enabled
+by this option and not enabled by the latter and vice versa.
+.IP "\fB\-Wall\fR" 4
+.IX Item "-Wall"
+This enables all the warnings about constructions that some users
+consider questionable, and that are easy to avoid (or modify to
+prevent the warning), even in conjunction with macros.  This also
+enables some language-specific warnings described in \fB\*(C+ Dialect
+Options\fR and \fBObjective-C and Objective\-\*(C+ Dialect Options\fR.
+.Sp
+\&\fB\-Wall\fR turns on the following warning flags:
+.Sp
+\&\fB\-Waddress   
+\&\-Warray\-bounds=1\fR (only with\fB \fR\fB\-O2\fR)  
+\&\fB\-Wbool\-compare  
+\&\-Wbool\-operation  
+\&\-Wc++11\-compat  \-Wc++14\-compat  
+\&\-Wcatch\-value\fR (\*(C+ and Objective\-\*(C+ only)  
+\&\fB\-Wchar\-subscripts  
+\&\-Wcomment  
+\&\-Wduplicate\-decl\-specifier\fR (C and Objective-C only) 
+\&\fB\-Wenum\-compare\fR (in C/ObjC; this is on by default in \*(C+) 
+\&\fB\-Wformat   
+\&\-Wint\-in\-bool\-context  
+\&\-Wimplicit\fR (C and Objective-C only) 
+\&\fB\-Wimplicit\-int\fR (C and Objective-C only) 
+\&\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only) 
+\&\fB\-Winit\-self\fR (only for \*(C+) 
+\&\fB\-Wlogical\-not\-parentheses 
+\&\-Wmain\fR (only for C/ObjC and unless\fB \fR\fB\-ffreestanding\fR)  
+\&\fB\-Wmaybe\-uninitialized 
+\&\-Wmemset\-elt\-size 
+\&\-Wmemset\-transposed\-args 
+\&\-Wmisleading\-indentation\fR (only for C/\*(C+) 
+\&\fB\-Wmissing\-attributes 
+\&\-Wmissing\-braces\fR (only for C/ObjC) 
+\&\fB\-Wmultistatement\-macros  
+\&\-Wnarrowing\fR (only for \*(C+)  
+\&\fB\-Wnonnull  
+\&\-Wnonnull\-compare  
+\&\-Wopenmp\-simd 
+\&\-Wparentheses  
+\&\-Wpessimizing\-move\fR (only for \*(C+)  
+\&\fB\-Wpointer\-sign  
+\&\-Wreorder   
+\&\-Wrestrict   
+\&\-Wreturn\-type  
+\&\-Wsequence\-point  
+\&\-Wsign\-compare\fR (only in \*(C+)  
+\&\fB\-Wsizeof\-pointer\-div 
+\&\-Wsizeof\-pointer\-memaccess 
+\&\-Wstrict\-aliasing  
+\&\-Wstrict\-overflow=1  
+\&\-Wswitch  
+\&\-Wtautological\-compare  
+\&\-Wtrigraphs  
+\&\-Wuninitialized  
+\&\-Wunknown\-pragmas  
+\&\-Wunused\-function  
+\&\-Wunused\-label     
+\&\-Wunused\-value     
+\&\-Wunused\-variable  
+\&\-Wvolatile\-register\-var\fR
+.Sp
+Note that some warning flags are not implied by \fB\-Wall\fR.  Some of
+them warn about constructions that users generally do not consider
+questionable, but which occasionally you might wish to check for;
+others warn about constructions that are necessary or hard to avoid in
+some cases, and there is no simple way to modify the code to suppress
+the warning. Some of them are enabled by \fB\-Wextra\fR but many of
+them must be enabled individually.
+.IP "\fB\-Wextra\fR" 4
+.IX Item "-Wextra"
+This enables some extra warning flags that are not enabled by
+\&\fB\-Wall\fR. (This option used to be called \fB\-W\fR.  The older
+name is still supported, but the newer name is more descriptive.)
+.Sp
+\&\fB\-Wclobbered  
+\&\-Wcast\-function\-type  
+\&\-Wdeprecated\-copy\fR (\*(C+ only) 
+\&\fB\-Wempty\-body  
+\&\-Wignored\-qualifiers 
+\&\-Wimplicit\-fallthrough=3 
+\&\-Wmissing\-field\-initializers  
+\&\-Wmissing\-parameter\-type\fR (C only)  
+\&\fB\-Wold\-style\-declaration\fR (C only)  
+\&\fB\-Woverride\-init  
+\&\-Wsign\-compare\fR (C only) 
+\&\fB\-Wredundant\-move\fR (only for \*(C+)  
+\&\fB\-Wtype\-limits  
+\&\-Wuninitialized  
+\&\-Wshift\-negative\-value\fR (in \*(C+03 and in C99 and newer)  
+\&\fB\-Wunused\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR) 
+\&\fB\-Wunused\-but\-set\-parameter\fR (only with\fB \fR\fB\-Wunused\fR\fB \fRor\fB \fR\fB\-Wall\fR)
+.Sp
+The option \fB\-Wextra\fR also prints warning messages for the
+following cases:
+.RS 4
+.IP "*" 4
+A pointer is compared against integer zero with \f(CW\*(C`<\*(C'\fR, \f(CW\*(C`<=\*(C'\fR,
+\&\f(CW\*(C`>\*(C'\fR, or \f(CW\*(C`>=\*(C'\fR.
+.IP "*" 4
+(\*(C+ only) An enumerator and a non-enumerator both appear in a
+conditional expression.
+.IP "*" 4
+(\*(C+ only) Ambiguous virtual bases.
+.IP "*" 4
+(\*(C+ only) Subscripting an array that has been declared \f(CW\*(C`register\*(C'\fR.
+.IP "*" 4
+(\*(C+ only) Taking the address of a variable that has been declared
+\&\f(CW\*(C`register\*(C'\fR.
+.IP "*" 4
+(\*(C+ only) A base class is not initialized in the copy constructor
+of a derived class.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wchar\-subscripts\fR" 4
+.IX Item "-Wchar-subscripts"
+Warn if an array subscript has type \f(CW\*(C`char\*(C'\fR.  This is a common cause
+of error, as programmers often forget that this type is signed on some
+machines.
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wno\-coverage\-mismatch\fR" 4
+.IX Item "-Wno-coverage-mismatch"
+Warn if feedback profiles do not match when using the
+\&\fB\-fprofile\-use\fR option.
+If a source file is changed between compiling with \fB\-fprofile\-generate\fR
+and with \fB\-fprofile\-use\fR, the files with the profile feedback can fail
+to match the source file and \s-1GCC\s0 cannot use the profile feedback
+information.  By default, this warning is enabled and is treated as an
+error.  \fB\-Wno\-coverage\-mismatch\fR can be used to disable the
+warning or \fB\-Wno\-error=coverage\-mismatch\fR can be used to
+disable the error.  Disabling the error for this warning can result in
+poorly optimized code and is useful only in the
+case of very minor changes such as bug fixes to an existing code-base.
+Completely disabling the warning is not recommended.
+.IP "\fB\-Wno\-cpp\fR" 4
+.IX Item "-Wno-cpp"
+(C, Objective-C, \*(C+, Objective\-\*(C+ and Fortran only)
+.Sp
+Suppress warning messages emitted by \f(CW\*(C`#warning\*(C'\fR directives.
+.IP "\fB\-Wdouble\-promotion\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wdouble-promotion (C, , Objective-C and Objective- only)"
+Give a warning when a value of type \f(CW\*(C`float\*(C'\fR is implicitly
+promoted to \f(CW\*(C`double\*(C'\fR.  CPUs with a 32\-bit \*(L"single-precision\*(R"
+floating-point unit implement \f(CW\*(C`float\*(C'\fR in hardware, but emulate
+\&\f(CW\*(C`double\*(C'\fR in software.  On such a machine, doing computations
+using \f(CW\*(C`double\*(C'\fR values is much more expensive because of the
+overhead required for software emulation.
+.Sp
+It is easy to accidentally do computations with \f(CW\*(C`double\*(C'\fR because
+floating-point literals are implicitly of type \f(CW\*(C`double\*(C'\fR.  For
+example, in:
+.Sp
+.Vb 4
+\&        float area(float radius)
+\&        {
+\&           return 3.14159 * radius * radius;
+\&        }
+.Ve
+.Sp
+the compiler performs the entire computation with \f(CW\*(C`double\*(C'\fR
+because the floating-point literal is a \f(CW\*(C`double\*(C'\fR.
+.IP "\fB\-Wduplicate\-decl\-specifier\fR (C and Objective-C only)" 4
+.IX Item "-Wduplicate-decl-specifier (C and Objective-C only)"
+Warn if a declaration has duplicate \f(CW\*(C`const\*(C'\fR, \f(CW\*(C`volatile\*(C'\fR,
+\&\f(CW\*(C`restrict\*(C'\fR or \f(CW\*(C`_Atomic\*(C'\fR specifier.  This warning is enabled by
+\&\fB\-Wall\fR.
+.IP "\fB\-Wformat\fR" 4
+.IX Item "-Wformat"
+.PD 0
+.IP "\fB\-Wformat=\fR\fIn\fR" 4
+.IX Item "-Wformat=n"
+.PD
+Check calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR, etc., to make sure that
+the arguments supplied have types appropriate to the format string
+specified, and that the conversions specified in the format string make
+sense.  This includes standard functions, and others specified by format
+attributes, in the \f(CW\*(C`printf\*(C'\fR,
+\&\f(CW\*(C`scanf\*(C'\fR, \f(CW\*(C`strftime\*(C'\fR and \f(CW\*(C`strfmon\*(C'\fR (an X/Open extension,
+not in the C standard) families (or other target-specific families).
+Which functions are checked without format attributes having been
+specified depends on the standard version selected, and such checks of
+functions without the attribute specified are disabled by
+\&\fB\-ffreestanding\fR or \fB\-fno\-builtin\fR.
+.Sp
+The formats are checked against the format features supported by \s-1GNU\s0
+libc version 2.2.  These include all \s-1ISO C90\s0 and C99 features, as well
+as features from the Single Unix Specification and some \s-1BSD\s0 and \s-1GNU\s0
+extensions.  Other library implementations may not support all these
+features; \s-1GCC\s0 does not support warning about features that go beyond a
+particular library's limitations.  However, if \fB\-Wpedantic\fR is used
+with \fB\-Wformat\fR, warnings are given about format features not
+in the selected standard version (but not for \f(CW\*(C`strfmon\*(C'\fR formats,
+since those are not in any version of the C standard).
+.RS 4
+.IP "\fB\-Wformat=1\fR" 4
+.IX Item "-Wformat=1"
+.PD 0
+.IP "\fB\-Wformat\fR" 4
+.IX Item "-Wformat"
+.PD
+Option \fB\-Wformat\fR is equivalent to \fB\-Wformat=1\fR, and
+\&\fB\-Wno\-format\fR is equivalent to \fB\-Wformat=0\fR.  Since
+\&\fB\-Wformat\fR also checks for null format arguments for several
+functions, \fB\-Wformat\fR also implies \fB\-Wnonnull\fR.  Some
+aspects of this level of format checking can be disabled by the
+options: \fB\-Wno\-format\-contains\-nul\fR,
+\&\fB\-Wno\-format\-extra\-args\fR, and \fB\-Wno\-format\-zero\-length\fR.
+\&\fB\-Wformat\fR is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wno\-format\-contains\-nul\fR" 4
+.IX Item "-Wno-format-contains-nul"
+If \fB\-Wformat\fR is specified, do not warn about format strings that
+contain \s-1NUL\s0 bytes.
+.IP "\fB\-Wno\-format\-extra\-args\fR" 4
+.IX Item "-Wno-format-extra-args"
+If \fB\-Wformat\fR is specified, do not warn about excess arguments to a
+\&\f(CW\*(C`printf\*(C'\fR or \f(CW\*(C`scanf\*(C'\fR format function.  The C standard specifies
+that such arguments are ignored.
+.Sp
+Where the unused arguments lie between used arguments that are
+specified with \fB$\fR operand number specifications, normally
+warnings are still given, since the implementation could not know what
+type to pass to \f(CW\*(C`va_arg\*(C'\fR to skip the unused arguments.  However,
+in the case of \f(CW\*(C`scanf\*(C'\fR formats, this option suppresses the
+warning if the unused arguments are all pointers, since the Single
+Unix Specification says that such unused arguments are allowed.
+.IP "\fB\-Wformat\-overflow\fR" 4
+.IX Item "-Wformat-overflow"
+.PD 0
+.IP "\fB\-Wformat\-overflow=\fR\fIlevel\fR" 4
+.IX Item "-Wformat-overflow=level"
+.PD
+Warn about calls to formatted input/output functions such as \f(CW\*(C`sprintf\*(C'\fR
+and \f(CW\*(C`vsprintf\*(C'\fR that might overflow the destination buffer.  When the
+exact number of bytes written by a format directive cannot be determined
+at compile-time it is estimated based on heuristics that depend on the
+\&\fIlevel\fR argument and on optimization.  While enabling optimization
+will in most cases improve the accuracy of the warning, it may also
+result in false positives.
+.RS 4
+.IP "\fB\-Wformat\-overflow\fR" 4
+.IX Item "-Wformat-overflow"
+.PD 0
+.IP "\fB\-Wformat\-overflow=1\fR" 4
+.IX Item "-Wformat-overflow=1"
+.PD
+Level \fI1\fR of \fB\-Wformat\-overflow\fR enabled by \fB\-Wformat\fR
+employs a conservative approach that warns only about calls that most
+likely overflow the buffer.  At this level, numeric arguments to format
+directives with unknown values are assumed to have the value of one, and
+strings of unknown length to be empty.  Numeric arguments that are known
+to be bounded to a subrange of their type, or string arguments whose output
+is bounded either by their directive's precision or by a finite set of
+string literals, are assumed to take on the value within the range that
+results in the most bytes on output.  For example, the call to \f(CW\*(C`sprintf\*(C'\fR
+below is diagnosed because even with both \fIa\fR and \fIb\fR equal to zero,
+the terminating \s-1NUL\s0 character (\f(CW\*(Aq\e0\*(Aq\fR) appended by the function
+to the destination buffer will be written past its end.  Increasing
+the size of the buffer by a single byte is sufficient to avoid the
+warning, though it may not be sufficient to avoid the overflow.
+.Sp
+.Vb 5
+\&        void f (int a, int b)
+\&        {
+\&          char buf [13];
+\&          sprintf (buf, "a = %i, b = %i\en", a, b);
+\&        }
+.Ve
+.IP "\fB\-Wformat\-overflow=2\fR" 4
+.IX Item "-Wformat-overflow=2"
+Level \fI2\fR warns also about calls that might overflow the destination
+buffer given an argument of sufficient length or magnitude.  At level
+\&\fI2\fR, unknown numeric arguments are assumed to have the minimum
+representable value for signed types with a precision greater than 1, and
+the maximum representable value otherwise.  Unknown string arguments whose
+length cannot be assumed to be bounded either by the directive's precision,
+or by a finite set of string literals they may evaluate to, or the character
+array they may point to, are assumed to be 1 character long.
+.Sp
+At level \fI2\fR, the call in the example above is again diagnosed, but
+this time because with \fIa\fR equal to a 32\-bit \f(CW\*(C`INT_MIN\*(C'\fR the first
+\&\f(CW%i\fR directive will write some of its digits beyond the end of
+the destination buffer.  To make the call safe regardless of the values
+of the two variables, the size of the destination buffer must be increased
+to at least 34 bytes.  \s-1GCC\s0 includes the minimum size of the buffer in
+an informational note following the warning.
+.Sp
+An alternative to increasing the size of the destination buffer is to
+constrain the range of formatted values.  The maximum length of string
+arguments can be bounded by specifying the precision in the format
+directive.  When numeric arguments of format directives can be assumed
+to be bounded by less than the precision of their type, choosing
+an appropriate length modifier to the format specifier will reduce
+the required buffer size.  For example, if \fIa\fR and \fIb\fR in the
+example above can be assumed to be within the precision of
+the \f(CW\*(C`short int\*(C'\fR type then using either the \f(CW%hi\fR format
+directive or casting the argument to \f(CW\*(C`short\*(C'\fR reduces the maximum
+required size of the buffer to 24 bytes.
+.Sp
+.Vb 5
+\&        void f (int a, int b)
+\&        {
+\&          char buf [23];
+\&          sprintf (buf, "a = %hi, b = %i\en", a, (short)b);
+\&        }
+.Ve
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wno\-format\-zero\-length\fR" 4
+.IX Item "-Wno-format-zero-length"
+If \fB\-Wformat\fR is specified, do not warn about zero-length formats.
+The C standard specifies that zero-length formats are allowed.
+.IP "\fB\-Wformat=2\fR" 4
+.IX Item "-Wformat=2"
+Enable \fB\-Wformat\fR plus additional format checks.  Currently
+equivalent to \fB\-Wformat \-Wformat\-nonliteral \-Wformat\-security
+\&\-Wformat\-y2k\fR.
+.IP "\fB\-Wformat\-nonliteral\fR" 4
+.IX Item "-Wformat-nonliteral"
+If \fB\-Wformat\fR is specified, also warn if the format string is not a
+string literal and so cannot be checked, unless the format function
+takes its format arguments as a \f(CW\*(C`va_list\*(C'\fR.
+.IP "\fB\-Wformat\-security\fR" 4
+.IX Item "-Wformat-security"
+If \fB\-Wformat\fR is specified, also warn about uses of format
+functions that represent possible security problems.  At present, this
+warns about calls to \f(CW\*(C`printf\*(C'\fR and \f(CW\*(C`scanf\*(C'\fR functions where the
+format string is not a string literal and there are no format arguments,
+as in \f(CW\*(C`printf (foo);\*(C'\fR.  This may be a security hole if the format
+string came from untrusted input and contains \fB\f(CB%n\fB\fR.  (This is
+currently a subset of what \fB\-Wformat\-nonliteral\fR warns about, but
+in future warnings may be added to \fB\-Wformat\-security\fR that are not
+included in \fB\-Wformat\-nonliteral\fR.)
+.IP "\fB\-Wformat\-signedness\fR" 4
+.IX Item "-Wformat-signedness"
+If \fB\-Wformat\fR is specified, also warn if the format string
+requires an unsigned argument and the argument is signed and vice versa.
+.IP "\fB\-Wformat\-truncation\fR" 4
+.IX Item "-Wformat-truncation"
+.PD 0
+.IP "\fB\-Wformat\-truncation=\fR\fIlevel\fR" 4
+.IX Item "-Wformat-truncation=level"
+.PD
+Warn about calls to formatted input/output functions such as \f(CW\*(C`snprintf\*(C'\fR
+and \f(CW\*(C`vsnprintf\*(C'\fR that might result in output truncation.  When the exact
+number of bytes written by a format directive cannot be determined at
+compile-time it is estimated based on heuristics that depend on
+the \fIlevel\fR argument and on optimization.  While enabling optimization
+will in most cases improve the accuracy of the warning, it may also result
+in false positives.  Except as noted otherwise, the option uses the same
+logic \fB\-Wformat\-overflow\fR.
+.RS 4
+.IP "\fB\-Wformat\-truncation\fR" 4
+.IX Item "-Wformat-truncation"
+.PD 0
+.IP "\fB\-Wformat\-truncation=1\fR" 4
+.IX Item "-Wformat-truncation=1"
+.PD
+Level \fI1\fR of \fB\-Wformat\-truncation\fR enabled by \fB\-Wformat\fR
+employs a conservative approach that warns only about calls to bounded
+functions whose return value is unused and that will most likely result
+in output truncation.
+.IP "\fB\-Wformat\-truncation=2\fR" 4
+.IX Item "-Wformat-truncation=2"
+Level \fI2\fR warns also about calls to bounded functions whose return
+value is used and that might result in truncation given an argument of
+sufficient length or magnitude.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wformat\-y2k\fR" 4
+.IX Item "-Wformat-y2k"
+If \fB\-Wformat\fR is specified, also warn about \f(CW\*(C`strftime\*(C'\fR
+formats that may yield only a two-digit year.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wnonnull\fR" 4
+.IX Item "-Wnonnull"
+Warn about passing a null pointer for arguments marked as
+requiring a non-null value by the \f(CW\*(C`nonnull\*(C'\fR function attribute.
+.Sp
+\&\fB\-Wnonnull\fR is included in \fB\-Wall\fR and \fB\-Wformat\fR.  It
+can be disabled with the \fB\-Wno\-nonnull\fR option.
+.IP "\fB\-Wnonnull\-compare\fR" 4
+.IX Item "-Wnonnull-compare"
+Warn when comparing an argument marked with the \f(CW\*(C`nonnull\*(C'\fR
+function attribute against null inside the function.
+.Sp
+\&\fB\-Wnonnull\-compare\fR is included in \fB\-Wall\fR.  It
+can be disabled with the \fB\-Wno\-nonnull\-compare\fR option.
+.IP "\fB\-Wnull\-dereference\fR" 4
+.IX Item "-Wnull-dereference"
+Warn if the compiler detects paths that trigger erroneous or
+undefined behavior due to dereferencing a null pointer.  This option
+is only active when \fB\-fdelete\-null\-pointer\-checks\fR is active,
+which is enabled by optimizations in most targets.  The precision of
+the warnings depends on the optimization options used.
+.IP "\fB\-Winit\-self\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Winit-self (C, , Objective-C and Objective- only)"
+Warn about uninitialized variables that are initialized with themselves.
+Note this option can only be used with the \fB\-Wuninitialized\fR option.
+.Sp
+For example, \s-1GCC\s0 warns about \f(CW\*(C`i\*(C'\fR being uninitialized in the
+following snippet only when \fB\-Winit\-self\fR has been specified:
+.Sp
+.Vb 5
+\&        int f()
+\&        {
+\&          int i = i;
+\&          return i;
+\&        }
+.Ve
+.Sp
+This warning is enabled by \fB\-Wall\fR in \*(C+.
+.IP "\fB\-Wimplicit\-int\fR (C and Objective-C only)" 4
+.IX Item "-Wimplicit-int (C and Objective-C only)"
+Warn when a declaration does not specify a type.
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wimplicit\-function\-declaration\fR (C and Objective-C only)" 4
+.IX Item "-Wimplicit-function-declaration (C and Objective-C only)"
+Give a warning whenever a function is used before being declared. In
+C99 mode (\fB\-std=c99\fR or \fB\-std=gnu99\fR), this warning is
+enabled by default and it is made into an error by
+\&\fB\-pedantic\-errors\fR. This warning is also enabled by
+\&\fB\-Wall\fR.
+.IP "\fB\-Wimplicit\fR (C and Objective-C only)" 4
+.IX Item "-Wimplicit (C and Objective-C only)"
+Same as \fB\-Wimplicit\-int\fR and \fB\-Wimplicit\-function\-declaration\fR.
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wimplicit\-fallthrough\fR" 4
+.IX Item "-Wimplicit-fallthrough"
+\&\fB\-Wimplicit\-fallthrough\fR is the same as \fB\-Wimplicit\-fallthrough=3\fR
+and \fB\-Wno\-implicit\-fallthrough\fR is the same as
+\&\fB\-Wimplicit\-fallthrough=0\fR.
+.IP "\fB\-Wimplicit\-fallthrough=\fR\fIn\fR" 4
+.IX Item "-Wimplicit-fallthrough=n"
+Warn when a switch case falls through.  For example:
+.Sp
+.Vb 11
+\&        switch (cond)
+\&          {
+\&          case 1:
+\&            a = 1;
+\&            break;
+\&          case 2:
+\&            a = 2;
+\&          case 3:
+\&            a = 3;
+\&            break;
+\&          }
+.Ve
+.Sp
+This warning does not warn when the last statement of a case cannot
+fall through, e.g. when there is a return statement or a call to function
+declared with the noreturn attribute.  \fB\-Wimplicit\-fallthrough=\fR
+also takes into account control flow statements, such as ifs, and only
+warns when appropriate.  E.g.
+.Sp
+.Vb 10
+\&        switch (cond)
+\&          {
+\&          case 1:
+\&            if (i > 3) {
+\&              bar (5);
+\&              break;
+\&            } else if (i < 1) {
+\&              bar (0);
+\&            } else
+\&              return;
+\&          default:
+\&            ...
+\&          }
+.Ve
+.Sp
+Since there are occasions where a switch case fall through is desirable,
+\&\s-1GCC\s0 provides an attribute, \f(CW\*(C`_\|_attribute_\|_ ((fallthrough))\*(C'\fR, that is
+to be used along with a null statement to suppress this warning that
+would normally occur:
+.Sp
+.Vb 8
+\&        switch (cond)
+\&          {
+\&          case 1:
+\&            bar (0);
+\&            _\|_attribute_\|_ ((fallthrough));
+\&          default:
+\&            ...
+\&          }
+.Ve
+.Sp
+\&\*(C+17 provides a standard way to suppress the \fB\-Wimplicit\-fallthrough\fR
+warning using \f(CW\*(C`[[fallthrough]];\*(C'\fR instead of the \s-1GNU\s0 attribute.  In \*(C+11
+or \*(C+14 users can use \f(CW\*(C`[[gnu::fallthrough]];\*(C'\fR, which is a \s-1GNU\s0 extension.
+Instead of these attributes, it is also possible to add a fallthrough comment
+to silence the warning.  The whole body of the C or \*(C+ style comment should
+match the given regular expressions listed below.  The option argument \fIn\fR
+specifies what kind of comments are accepted:
+.RS 4
+.IP "*<\fB\-Wimplicit\-fallthrough=0\fR disables the warning altogether.>" 4
+.IX Item "*<-Wimplicit-fallthrough=0 disables the warning altogether.>"
+.PD 0
+.ie n .IP "*<\fB\-Wimplicit\-fallthrough=1\fR matches "".*"" regular>" 4
+.el .IP "*<\fB\-Wimplicit\-fallthrough=1\fR matches \f(CW.*\fR regular>" 4
+.IX Item "*<-Wimplicit-fallthrough=1 matches .* regular>"
+.PD
+expression, any comment is used as fallthrough comment.
+.IP "*<\fB\-Wimplicit\-fallthrough=2\fR case insensitively matches>" 4
+.IX Item "*<-Wimplicit-fallthrough=2 case insensitively matches>"
+\&\f(CW\*(C`.*falls?[ \et\-]*thr(ough|u).*\*(C'\fR regular expression.
+.IP "*<\fB\-Wimplicit\-fallthrough=3\fR case sensitively matches one of the>" 4
+.IX Item "*<-Wimplicit-fallthrough=3 case sensitively matches one of the>"
+following regular expressions:
+.RS 4
+.ie n .IP "*<""\-fallthrough"">" 4
+.el .IP "*<\f(CW\-fallthrough\fR>" 4
+.IX Item "*<-fallthrough>"
+.PD 0
+.ie n .IP "*<""@fallthrough@"">" 4
+.el .IP "*<\f(CW@fallthrough@\fR>" 4
+.IX Item "*<@fallthrough@>"
+.ie n .IP "*<""lint \-fallthrough[ \et]*"">" 4
+.el .IP "*<\f(CWlint \-fallthrough[ \et]*\fR>" 4
+.IX Item "*<lint -fallthrough[ t]*>"
+.ie n .IP "*<""[ \et.!]*(ELSE,? |INTENTIONAL(LY)? )?FALL(S | |\-)?THR(OUGH|U)[ \et.!]*(\-[^\en\er]*)?"">" 4
+.el .IP "*<\f(CW[ \et.!]*(ELSE,? |INTENTIONAL(LY)? )?FALL(S | |\-)?THR(OUGH|U)[ \et.!]*(\-[^\en\er]*)?\fR>" 4
+.IX Item "*<[ t.!]*(ELSE,? |INTENTIONAL(LY)? )?FALL(S | |-)?THR(OUGH|U)[ t.!]*(-[^nr]*)?>"
+.ie n .IP "*<""[ \et.!]*(Else,? |Intentional(ly)? )?Fall((s | |\-)[Tt]|t)hr(ough|u)[ \et.!]*(\-[^\en\er]*)?"">" 4
+.el .IP "*<\f(CW[ \et.!]*(Else,? |Intentional(ly)? )?Fall((s | |\-)[Tt]|t)hr(ough|u)[ \et.!]*(\-[^\en\er]*)?\fR>" 4
+.IX Item "*<[ t.!]*(Else,? |Intentional(ly)? )?Fall((s | |-)[Tt]|t)hr(ough|u)[ t.!]*(-[^nr]*)?>"
+.ie n .IP "*<""[ \et.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |\-)?thr(ough|u)[ \et.!]*(\-[^\en\er]*)?"">" 4
+.el .IP "*<\f(CW[ \et.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |\-)?thr(ough|u)[ \et.!]*(\-[^\en\er]*)?\fR>" 4
+.IX Item "*<[ t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |-)?thr(ough|u)[ t.!]*(-[^nr]*)?>"
+.RE
+.RS 4
+.RE
+.IP "*<\fB\-Wimplicit\-fallthrough=4\fR case sensitively matches one of the>" 4
+.IX Item "*<-Wimplicit-fallthrough=4 case sensitively matches one of the>"
+.PD
+following regular expressions:
+.RS 4
+.ie n .IP "*<""\-fallthrough"">" 4
+.el .IP "*<\f(CW\-fallthrough\fR>" 4
+.IX Item "*<-fallthrough>"
+.PD 0
+.ie n .IP "*<""@fallthrough@"">" 4
+.el .IP "*<\f(CW@fallthrough@\fR>" 4
+.IX Item "*<@fallthrough@>"
+.ie n .IP "*<""lint \-fallthrough[ \et]*"">" 4
+.el .IP "*<\f(CWlint \-fallthrough[ \et]*\fR>" 4
+.IX Item "*<lint -fallthrough[ t]*>"
+.ie n .IP "*<""[ \et]*FALLTHR(OUGH|U)[ \et]*"">" 4
+.el .IP "*<\f(CW[ \et]*FALLTHR(OUGH|U)[ \et]*\fR>" 4
+.IX Item "*<[ t]*FALLTHR(OUGH|U)[ t]*>"
+.RE
+.RS 4
+.RE
+.IP "*<\fB\-Wimplicit\-fallthrough=5\fR doesn't recognize any comments as>" 4
+.IX Item "*<-Wimplicit-fallthrough=5 doesn't recognize any comments as>"
+.PD
+fallthrough comments, only attributes disable the warning.
+.RE
+.RS 4
+.Sp
+The comment needs to be followed after optional whitespace and other comments
+by \f(CW\*(C`case\*(C'\fR or \f(CW\*(C`default\*(C'\fR keywords or by a user label that precedes some
+\&\f(CW\*(C`case\*(C'\fR or \f(CW\*(C`default\*(C'\fR label.
+.Sp
+.Vb 8
+\&        switch (cond)
+\&          {
+\&          case 1:
+\&            bar (0);
+\&            /* FALLTHRU */
+\&          default:
+\&            ...
+\&          }
+.Ve
+.Sp
+The \fB\-Wimplicit\-fallthrough=3\fR warning is enabled by \fB\-Wextra\fR.
+.RE
+.IP "\fB\-Wif\-not\-aligned\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wif-not-aligned (C, , Objective-C and Objective- only)"
+Control if warning triggered by the \f(CW\*(C`warn_if_not_aligned\*(C'\fR attribute
+should be issued.  This is enabled by default.
+Use \fB\-Wno\-if\-not\-aligned\fR to disable it.
+.IP "\fB\-Wignored\-qualifiers\fR (C and \*(C+ only)" 4
+.IX Item "-Wignored-qualifiers (C and only)"
+Warn if the return type of a function has a type qualifier
+such as \f(CW\*(C`const\*(C'\fR.  For \s-1ISO C\s0 such a type qualifier has no effect,
+since the value returned by a function is not an lvalue.
+For \*(C+, the warning is only emitted for scalar types or \f(CW\*(C`void\*(C'\fR.
+\&\s-1ISO C\s0 prohibits qualified \f(CW\*(C`void\*(C'\fR return types on function
+definitions, so such return types always receive a warning
+even without this option.
+.Sp
+This warning is also enabled by \fB\-Wextra\fR.
+.IP "\fB\-Wignored\-attributes\fR (C and \*(C+ only)" 4
+.IX Item "-Wignored-attributes (C and only)"
+Warn when an attribute is ignored.  This is different from the
+\&\fB\-Wattributes\fR option in that it warns whenever the compiler decides
+to drop an attribute, not that the attribute is either unknown, used in a
+wrong place, etc.  This warning is enabled by default.
+.IP "\fB\-Wmain\fR" 4
+.IX Item "-Wmain"
+Warn if the type of \f(CW\*(C`main\*(C'\fR is suspicious.  \f(CW\*(C`main\*(C'\fR should be
+a function with external linkage, returning int, taking either zero
+arguments, two, or three arguments of appropriate types.  This warning
+is enabled by default in \*(C+ and is enabled by either \fB\-Wall\fR
+or \fB\-Wpedantic\fR.
+.IP "\fB\-Wmisleading\-indentation\fR (C and \*(C+ only)" 4
+.IX Item "-Wmisleading-indentation (C and only)"
+Warn when the indentation of the code does not reflect the block structure.
+Specifically, a warning is issued for \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR, \f(CW\*(C`while\*(C'\fR, and
+\&\f(CW\*(C`for\*(C'\fR clauses with a guarded statement that does not use braces,
+followed by an unguarded statement with the same indentation.
+.Sp
+In the following example, the call to \*(L"bar\*(R" is misleadingly indented as
+if it were guarded by the \*(L"if\*(R" conditional.
+.Sp
+.Vb 3
+\&          if (some_condition ())
+\&            foo ();
+\&            bar ();  /* Gotcha: this is not guarded by the "if".  */
+.Ve
+.Sp
+In the case of mixed tabs and spaces, the warning uses the
+\&\fB\-ftabstop=\fR option to determine if the statements line up
+(defaulting to 8).
+.Sp
+The warning is not issued for code involving multiline preprocessor logic
+such as the following example.
+.Sp
+.Vb 6
+\&          if (flagA)
+\&            foo (0);
+\&        #if SOME_CONDITION_THAT_DOES_NOT_HOLD
+\&          if (flagB)
+\&        #endif
+\&            foo (1);
+.Ve
+.Sp
+The warning is not issued after a \f(CW\*(C`#line\*(C'\fR directive, since this
+typically indicates autogenerated code, and no assumptions can be made
+about the layout of the file that the directive references.
+.Sp
+This warning is enabled by \fB\-Wall\fR in C and \*(C+.
+.IP "\fB\-Wmissing\-attributes\fR" 4
+.IX Item "-Wmissing-attributes"
+Warn when a declaration of a function is missing one or more attributes
+that a related function is declared with and whose absence may adversely
+affect the correctness or efficiency of generated code.  For example,
+the warning is issued for declarations of aliases that use attributes
+to specify less restrictive requirements than those of their targets.
+This typically represents a potential optimization opportunity.
+By contrast, the \fB\-Wattribute\-alias=2\fR option controls warnings
+issued when the alias is more restrictive than the target, which could
+lead to incorrect code generation.
+Attributes considered include \f(CW\*(C`alloc_align\*(C'\fR, \f(CW\*(C`alloc_size\*(C'\fR,
+\&\f(CW\*(C`cold\*(C'\fR, \f(CW\*(C`const\*(C'\fR, \f(CW\*(C`hot\*(C'\fR, \f(CW\*(C`leaf\*(C'\fR, \f(CW\*(C`malloc\*(C'\fR,
+\&\f(CW\*(C`nonnull\*(C'\fR, \f(CW\*(C`noreturn\*(C'\fR, \f(CW\*(C`nothrow\*(C'\fR, \f(CW\*(C`pure\*(C'\fR,
+\&\f(CW\*(C`returns_nonnull\*(C'\fR, and \f(CW\*(C`returns_twice\*(C'\fR.
+.Sp
+In \*(C+, the warning is issued when an explicit specialization of a primary
+template declared with attribute \f(CW\*(C`alloc_align\*(C'\fR, \f(CW\*(C`alloc_size\*(C'\fR,
+\&\f(CW\*(C`assume_aligned\*(C'\fR, \f(CW\*(C`format\*(C'\fR, \f(CW\*(C`format_arg\*(C'\fR, \f(CW\*(C`malloc\*(C'\fR,
+or \f(CW\*(C`nonnull\*(C'\fR is declared without it.  Attributes \f(CW\*(C`deprecated\*(C'\fR,
+\&\f(CW\*(C`error\*(C'\fR, and \f(CW\*(C`warning\*(C'\fR suppress the warning..
+.Sp
+You can use the \f(CW\*(C`copy\*(C'\fR attribute to apply the same
+set of attributes to a declaration as that on another declaration without
+explicitly enumerating the attributes. This attribute can be applied
+to declarations of functions,
+variables, or types.
+.Sp
+\&\fB\-Wmissing\-attributes\fR is enabled by \fB\-Wall\fR.
+.Sp
+For example, since the declaration of the primary function template
+below makes use of both attribute \f(CW\*(C`malloc\*(C'\fR and \f(CW\*(C`alloc_size\*(C'\fR
+the declaration of the explicit specialization of the template is
+diagnosed because it is missing one of the attributes.
+.Sp
+.Vb 3
+\&        template <class T>
+\&        T* _\|_attribute_\|_ ((malloc, alloc_size (1)))
+\&        allocate (size_t);
+\&        
+\&        template <>
+\&        void* _\|_attribute_\|_ ((malloc))   // missing alloc_size
+\&        allocate<void> (size_t);
+.Ve
+.IP "\fB\-Wmissing\-braces\fR" 4
+.IX Item "-Wmissing-braces"
+Warn if an aggregate or union initializer is not fully bracketed.  In
+the following example, the initializer for \f(CW\*(C`a\*(C'\fR is not fully
+bracketed, but that for \f(CW\*(C`b\*(C'\fR is fully bracketed.  This warning is
+enabled by \fB\-Wall\fR in C.
+.Sp
+.Vb 2
+\&        int a[2][2] = { 0, 1, 2, 3 };
+\&        int b[2][2] = { { 0, 1 }, { 2, 3 } };
+.Ve
+.Sp
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wmissing\-include\-dirs\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wmissing-include-dirs (C, , Objective-C and Objective- only)"
+Warn if a user-supplied include directory does not exist.
+.IP "\fB\-Wmissing\-profile\fR" 4
+.IX Item "-Wmissing-profile"
+Warn if feedback profiles are missing when using the
+\&\fB\-fprofile\-use\fR option.
+This option diagnoses those cases where a new function or a new file is added
+to the user code between compiling with \fB\-fprofile\-generate\fR and with
+\&\fB\-fprofile\-use\fR, without regenerating the profiles.  In these cases, the
+profile feedback data files do not contain any profile feedback information for
+the newly added function or file respectively.  Also, in the case when profile
+count data (.gcda) files are removed, \s-1GCC\s0 cannot use any profile feedback
+information.  In all these cases, warnings are issued to inform the user that a
+profile generation step is due.  \fB\-Wno\-missing\-profile\fR can be used to
+disable the warning.  Ignoring the warning can result in poorly optimized code.
+Completely disabling the warning is not recommended and should be done only
+when non-existent profile data is justified.
+.IP "\fB\-Wmultistatement\-macros\fR" 4
+.IX Item "-Wmultistatement-macros"
+Warn about unsafe multiple statement macros that appear to be guarded
+by a clause such as \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR, \f(CW\*(C`for\*(C'\fR, \f(CW\*(C`switch\*(C'\fR, or
+\&\f(CW\*(C`while\*(C'\fR, in which only the first statement is actually guarded after
+the macro is expanded.
+.Sp
+For example:
+.Sp
+.Vb 3
+\&        #define DOIT x++; y++
+\&        if (c)
+\&          DOIT;
+.Ve
+.Sp
+will increment \f(CW\*(C`y\*(C'\fR unconditionally, not just when \f(CW\*(C`c\*(C'\fR holds.
+The can usually be fixed by wrapping the macro in a do-while loop:
+.Sp
+.Vb 3
+\&        #define DOIT do { x++; y++; } while (0)
+\&        if (c)
+\&          DOIT;
+.Ve
+.Sp
+This warning is enabled by \fB\-Wall\fR in C and \*(C+.
+.IP "\fB\-Wparentheses\fR" 4
+.IX Item "-Wparentheses"
+Warn if parentheses are omitted in certain contexts, such
+as when there is an assignment in a context where a truth value
+is expected, or when operators are nested whose precedence people
+often get confused about.
+.Sp
+Also warn if a comparison like \f(CW\*(C`x<=y<=z\*(C'\fR appears; this is
+equivalent to \f(CW\*(C`(x<=y ? 1 : 0) <= z\*(C'\fR, which is a different
+interpretation from that of ordinary mathematical notation.
+.Sp
+Also warn for dangerous uses of the \s-1GNU\s0 extension to
+\&\f(CW\*(C`?:\*(C'\fR with omitted middle operand. When the condition
+in the \f(CW\*(C`?\*(C'\fR: operator is a boolean expression, the omitted value is
+always 1.  Often programmers expect it to be a value computed
+inside the conditional expression instead.
+.Sp
+For \*(C+ this also warns for some cases of unnecessary parentheses in
+declarations, which can indicate an attempt at a function call instead
+of a declaration:
+.Sp
+.Vb 5
+\&        {
+\&          // Declares a local variable called mymutex.
+\&          std::unique_lock<std::mutex> (mymutex);
+\&          // User meant std::unique_lock<std::mutex> lock (mymutex);
+\&        }
+.Ve
+.Sp
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wsequence\-point\fR" 4
+.IX Item "-Wsequence-point"
+Warn about code that may have undefined semantics because of violations
+of sequence point rules in the C and \*(C+ standards.
+.Sp
+The C and \*(C+ standards define the order in which expressions in a C/\*(C+
+program are evaluated in terms of \fIsequence points\fR, which represent
+a partial ordering between the execution of parts of the program: those
+executed before the sequence point, and those executed after it.  These
+occur after the evaluation of a full expression (one which is not part
+of a larger expression), after the evaluation of the first operand of a
+\&\f(CW\*(C`&&\*(C'\fR, \f(CW\*(C`||\*(C'\fR, \f(CW\*(C`? :\*(C'\fR or \f(CW\*(C`,\*(C'\fR (comma) operator, before a
+function is called (but after the evaluation of its arguments and the
+expression denoting the called function), and in certain other places.
+Other than as expressed by the sequence point rules, the order of
+evaluation of subexpressions of an expression is not specified.  All
+these rules describe only a partial order rather than a total order,
+since, for example, if two functions are called within one expression
+with no sequence point between them, the order in which the functions
+are called is not specified.  However, the standards committee have
+ruled that function calls do not overlap.
+.Sp
+It is not specified when between sequence points modifications to the
+values of objects take effect.  Programs whose behavior depends on this
+have undefined behavior; the C and \*(C+ standards specify that \*(L"Between
+the previous and next sequence point an object shall have its stored
+value modified at most once by the evaluation of an expression.
+Furthermore, the prior value shall be read only to determine the value
+to be stored.\*(R".  If a program breaks these rules, the results on any
+particular implementation are entirely unpredictable.
+.Sp
+Examples of code with undefined behavior are \f(CW\*(C`a = a++;\*(C'\fR, \f(CW\*(C`a[n]
+= b[n++]\*(C'\fR and \f(CW\*(C`a[i++] = i;\*(C'\fR.  Some more complicated cases are not
+diagnosed by this option, and it may give an occasional false positive
+result, but in general it has been found fairly effective at detecting
+this sort of problem in programs.
+.Sp
+The \*(C+17 standard will define the order of evaluation of operands in
+more cases: in particular it requires that the right-hand side of an
+assignment be evaluated before the left-hand side, so the above
+examples are no longer undefined.  But this warning will still warn
+about them, to help people avoid writing code that is undefined in C
+and earlier revisions of \*(C+.
+.Sp
+The standard is worded confusingly, therefore there is some debate
+over the precise meaning of the sequence point rules in subtle cases.
+Links to discussions of the problem, including proposed formal
+definitions, may be found on the \s-1GCC\s0 readings page, at
+<\fBhttp://gcc.gnu.org/readings.html\fR>.
+.Sp
+This warning is enabled by \fB\-Wall\fR for C and \*(C+.
+.IP "\fB\-Wno\-return\-local\-addr\fR" 4
+.IX Item "-Wno-return-local-addr"
+Do not warn about returning a pointer (or in \*(C+, a reference) to a
+variable that goes out of scope after the function returns.
+.IP "\fB\-Wreturn\-type\fR" 4
+.IX Item "-Wreturn-type"
+Warn whenever a function is defined with a return type that defaults
+to \f(CW\*(C`int\*(C'\fR.  Also warn about any \f(CW\*(C`return\*(C'\fR statement with no
+return value in a function whose return type is not \f(CW\*(C`void\*(C'\fR
+(falling off the end of the function body is considered returning
+without a value).
+.Sp
+For C only, warn about a \f(CW\*(C`return\*(C'\fR statement with an expression in a
+function whose return type is \f(CW\*(C`void\*(C'\fR, unless the expression type is
+also \f(CW\*(C`void\*(C'\fR.  As a \s-1GNU\s0 extension, the latter case is accepted
+without a warning unless \fB\-Wpedantic\fR is used.  Attempting
+to use the return value of a non\-\f(CW\*(C`void\*(C'\fR function other than \f(CW\*(C`main\*(C'\fR
+that flows off the end by reaching the closing curly brace that terminates
+the function is undefined.
+.Sp
+Unlike in C, in \*(C+, flowing off the end of a non\-\f(CW\*(C`void\*(C'\fR function other
+than \f(CW\*(C`main\*(C'\fR results in undefined behavior even when the value of
+the function is not used.
+.Sp
+This warning is enabled by default in \*(C+ and by \fB\-Wall\fR otherwise.
+.IP "\fB\-Wshift\-count\-negative\fR" 4
+.IX Item "-Wshift-count-negative"
+Warn if shift count is negative. This warning is enabled by default.
+.IP "\fB\-Wshift\-count\-overflow\fR" 4
+.IX Item "-Wshift-count-overflow"
+Warn if shift count >= width of type. This warning is enabled by default.
+.IP "\fB\-Wshift\-negative\-value\fR" 4
+.IX Item "-Wshift-negative-value"
+Warn if left shifting a negative value.  This warning is enabled by
+\&\fB\-Wextra\fR in C99 and \*(C+11 modes (and newer).
+.IP "\fB\-Wshift\-overflow\fR" 4
+.IX Item "-Wshift-overflow"
+.PD 0
+.IP "\fB\-Wshift\-overflow=\fR\fIn\fR" 4
+.IX Item "-Wshift-overflow=n"
+.PD
+Warn about left shift overflows.  This warning is enabled by
+default in C99 and \*(C+11 modes (and newer).
+.RS 4
+.IP "\fB\-Wshift\-overflow=1\fR" 4
+.IX Item "-Wshift-overflow=1"
+This is the warning level of \fB\-Wshift\-overflow\fR and is enabled
+by default in C99 and \*(C+11 modes (and newer).  This warning level does
+not warn about left-shifting 1 into the sign bit.  (However, in C, such
+an overflow is still rejected in contexts where an integer constant expression
+is required.)  No warning is emitted in \*(C+2A mode (and newer), as signed left
+shifts always wrap.
+.IP "\fB\-Wshift\-overflow=2\fR" 4
+.IX Item "-Wshift-overflow=2"
+This warning level also warns about left-shifting 1 into the sign bit,
+unless \*(C+14 mode (or newer) is active.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wswitch\fR" 4
+.IX Item "-Wswitch"
+Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
+and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
+enumeration.  (The presence of a \f(CW\*(C`default\*(C'\fR label prevents this
+warning.)  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
+provoke warnings when this option is used (even if there is a
+\&\f(CW\*(C`default\*(C'\fR label).
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wswitch\-default\fR" 4
+.IX Item "-Wswitch-default"
+Warn whenever a \f(CW\*(C`switch\*(C'\fR statement does not have a \f(CW\*(C`default\*(C'\fR
+case.
+.IP "\fB\-Wswitch\-enum\fR" 4
+.IX Item "-Wswitch-enum"
+Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of enumerated type
+and lacks a \f(CW\*(C`case\*(C'\fR for one or more of the named codes of that
+enumeration.  \f(CW\*(C`case\*(C'\fR labels outside the enumeration range also
+provoke warnings when this option is used.  The only difference
+between \fB\-Wswitch\fR and this option is that this option gives a
+warning about an omitted enumeration code even if there is a
+\&\f(CW\*(C`default\*(C'\fR label.
+.IP "\fB\-Wswitch\-bool\fR" 4
+.IX Item "-Wswitch-bool"
+Warn whenever a \f(CW\*(C`switch\*(C'\fR statement has an index of boolean type
+and the case values are outside the range of a boolean type.
+It is possible to suppress this warning by casting the controlling
+expression to a type other than \f(CW\*(C`bool\*(C'\fR.  For example:
+.Sp
+.Vb 4
+\&        switch ((int) (a == 4))
+\&          {
+\&          ...
+\&          }
+.Ve
+.Sp
+This warning is enabled by default for C and \*(C+ programs.
+.IP "\fB\-Wswitch\-unreachable\fR" 4
+.IX Item "-Wswitch-unreachable"
+Warn whenever a \f(CW\*(C`switch\*(C'\fR statement contains statements between the
+controlling expression and the first case label, which will never be
+executed.  For example:
+.Sp
+.Vb 7
+\&        switch (cond)
+\&          {
+\&           i = 15;
+\&          ...
+\&           case 5:
+\&          ...
+\&          }
+.Ve
+.Sp
+\&\fB\-Wswitch\-unreachable\fR does not warn if the statement between the
+controlling expression and the first case label is just a declaration:
+.Sp
+.Vb 8
+\&        switch (cond)
+\&          {
+\&           int i;
+\&          ...
+\&           case 5:
+\&           i = 5;
+\&          ...
+\&          }
+.Ve
+.Sp
+This warning is enabled by default for C and \*(C+ programs.
+.IP "\fB\-Wsync\-nand\fR (C and \*(C+ only)" 4
+.IX Item "-Wsync-nand (C and only)"
+Warn when \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR and \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR
+built-in functions are used.  These functions changed semantics in \s-1GCC 4.4.\s0
+.IP "\fB\-Wunused\-but\-set\-parameter\fR" 4
+.IX Item "-Wunused-but-set-parameter"
+Warn whenever a function parameter is assigned to, but otherwise unused
+(aside from its declaration).
+.Sp
+To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
+.Sp
+This warning is also enabled by \fB\-Wunused\fR together with
+\&\fB\-Wextra\fR.
+.IP "\fB\-Wunused\-but\-set\-variable\fR" 4
+.IX Item "-Wunused-but-set-variable"
+Warn whenever a local variable is assigned to, but otherwise unused
+(aside from its declaration).
+This warning is enabled by \fB\-Wall\fR.
+.Sp
+To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
+.Sp
+This warning is also enabled by \fB\-Wunused\fR, which is enabled
+by \fB\-Wall\fR.
+.IP "\fB\-Wunused\-function\fR" 4
+.IX Item "-Wunused-function"
+Warn whenever a static function is declared but not defined or a
+non-inline static function is unused.
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wunused\-label\fR" 4
+.IX Item "-Wunused-label"
+Warn whenever a label is declared but not used.
+This warning is enabled by \fB\-Wall\fR.
+.Sp
+To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
+.IP "\fB\-Wunused\-local\-typedefs\fR (C, Objective-C, \*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wunused-local-typedefs (C, Objective-C, and Objective- only)"
+Warn when a typedef locally defined in a function is not used.
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wunused\-parameter\fR" 4
+.IX Item "-Wunused-parameter"
+Warn whenever a function parameter is unused aside from its declaration.
+.Sp
+To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
+.IP "\fB\-Wno\-unused\-result\fR" 4
+.IX Item "-Wno-unused-result"
+Do not warn if a caller of a function marked with attribute
+\&\f(CW\*(C`warn_unused_result\*(C'\fR does not use
+its return value. The default is \fB\-Wunused\-result\fR.
+.IP "\fB\-Wunused\-variable\fR" 4
+.IX Item "-Wunused-variable"
+Warn whenever a local or static variable is unused aside from its
+declaration. This option implies \fB\-Wunused\-const\-variable=1\fR for C,
+but not for \*(C+. This warning is enabled by \fB\-Wall\fR.
+.Sp
+To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
+.IP "\fB\-Wunused\-const\-variable\fR" 4
+.IX Item "-Wunused-const-variable"
+.PD 0
+.IP "\fB\-Wunused\-const\-variable=\fR\fIn\fR" 4
+.IX Item "-Wunused-const-variable=n"
+.PD
+Warn whenever a constant static variable is unused aside from its declaration.
+\&\fB\-Wunused\-const\-variable=1\fR is enabled by \fB\-Wunused\-variable\fR
+for C, but not for \*(C+. In C this declares variable storage, but in \*(C+ this
+is not an error since const variables take the place of \f(CW\*(C`#define\*(C'\fRs.
+.Sp
+To suppress this warning use the \f(CW\*(C`unused\*(C'\fR attribute.
+.RS 4
+.IP "\fB\-Wunused\-const\-variable=1\fR" 4
+.IX Item "-Wunused-const-variable=1"
+This is the warning level that is enabled by \fB\-Wunused\-variable\fR for
+C.  It warns only about unused static const variables defined in the main
+compilation unit, but not about static const variables declared in any
+header included.
+.IP "\fB\-Wunused\-const\-variable=2\fR" 4
+.IX Item "-Wunused-const-variable=2"
+This warning level also warns for unused constant static variables in
+headers (excluding system headers).  This is the warning level of
+\&\fB\-Wunused\-const\-variable\fR and must be explicitly requested since
+in \*(C+ this isn't an error and in C it might be harder to clean up all
+headers included.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wunused\-value\fR" 4
+.IX Item "-Wunused-value"
+Warn whenever a statement computes a result that is explicitly not
+used. To suppress this warning cast the unused expression to
+\&\f(CW\*(C`void\*(C'\fR. This includes an expression-statement or the left-hand
+side of a comma expression that contains no side effects. For example,
+an expression such as \f(CW\*(C`x[i,j]\*(C'\fR causes a warning, while
+\&\f(CW\*(C`x[(void)i,j]\*(C'\fR does not.
+.Sp
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wunused\fR" 4
+.IX Item "-Wunused"
+All the above \fB\-Wunused\fR options combined.
+.Sp
+In order to get a warning about an unused function parameter, you must
+either specify \fB\-Wextra \-Wunused\fR (note that \fB\-Wall\fR implies
+\&\fB\-Wunused\fR), or separately specify \fB\-Wunused\-parameter\fR.
+.IP "\fB\-Wuninitialized\fR" 4
+.IX Item "-Wuninitialized"
+Warn if an automatic variable is used without first being initialized
+or if a variable may be clobbered by a \f(CW\*(C`setjmp\*(C'\fR call. In \*(C+,
+warn if a non-static reference or non-static \f(CW\*(C`const\*(C'\fR member
+appears in a class without constructors.
+.Sp
+If you want to warn about code that uses the uninitialized value of the
+variable in its own initializer, use the \fB\-Winit\-self\fR option.
+.Sp
+These warnings occur for individual uninitialized or clobbered
+elements of structure, union or array variables as well as for
+variables that are uninitialized or clobbered as a whole.  They do
+not occur for variables or elements declared \f(CW\*(C`volatile\*(C'\fR.  Because
+these warnings depend on optimization, the exact variables or elements
+for which there are warnings depends on the precise optimization
+options and version of \s-1GCC\s0 used.
+.Sp
+Note that there may be no warning about a variable that is used only
+to compute a value that itself is never used, because such
+computations may be deleted by data flow analysis before the warnings
+are printed.
+.IP "\fB\-Winvalid\-memory\-model\fR" 4
+.IX Item "-Winvalid-memory-model"
+Warn for invocations of \fB_\|_atomic Builtins\fR, \fB_\|_sync Builtins\fR,
+and the C11 atomic generic functions with a memory consistency argument
+that is either invalid for the operation or outside the range of values
+of the \f(CW\*(C`memory_order\*(C'\fR enumeration.  For example, since the
+\&\f(CW\*(C`_\|_atomic_store\*(C'\fR and \f(CW\*(C`_\|_atomic_store_n\*(C'\fR built-ins are only
+defined for the relaxed, release, and sequentially consistent memory
+orders the following code is diagnosed:
+.Sp
+.Vb 4
+\&        void store (int *i)
+\&        {
+\&          _\|_atomic_store_n (i, 0, memory_order_consume);
+\&        }
+.Ve
+.Sp
+\&\fB\-Winvalid\-memory\-model\fR is enabled by default.
+.IP "\fB\-Wmaybe\-uninitialized\fR" 4
+.IX Item "-Wmaybe-uninitialized"
+For an automatic (i.e. local) variable, if there exists a path from the
+function entry to a use of the variable that is initialized, but there exist
+some other paths for which the variable is not initialized, the compiler
+emits a warning if it cannot prove the uninitialized paths are not
+executed at run time.
+.Sp
+These warnings are only possible in optimizing compilation, because otherwise
+\&\s-1GCC\s0 does not keep track of the state of variables.
+.Sp
+These warnings are made optional because \s-1GCC\s0 may not be able to determine when
+the code is correct in spite of appearing to have an error.  Here is one
+example of how this can happen:
+.Sp
+.Vb 12
+\&        {
+\&          int x;
+\&          switch (y)
+\&            {
+\&            case 1: x = 1;
+\&              break;
+\&            case 2: x = 4;
+\&              break;
+\&            case 3: x = 5;
+\&            }
+\&          foo (x);
+\&        }
+.Ve
+.Sp
+If the value of \f(CW\*(C`y\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`x\*(C'\fR is
+always initialized, but \s-1GCC\s0 doesn't know this. To suppress the
+warning, you need to provide a default case with \fIassert\fR\|(0) or
+similar code.
+.Sp
+This option also warns when a non-volatile automatic variable might be
+changed by a call to \f(CW\*(C`longjmp\*(C'\fR.
+The compiler sees only the calls to \f(CW\*(C`setjmp\*(C'\fR.  It cannot know
+where \f(CW\*(C`longjmp\*(C'\fR will be called; in fact, a signal handler could
+call it at any point in the code.  As a result, you may get a warning
+even when there is in fact no problem because \f(CW\*(C`longjmp\*(C'\fR cannot
+in fact be called at the place that would cause a problem.
+.Sp
+Some spurious warnings can be avoided if you declare all the functions
+you use that never return as \f(CW\*(C`noreturn\*(C'\fR.
+.Sp
+This warning is enabled by \fB\-Wall\fR or \fB\-Wextra\fR.
+.IP "\fB\-Wunknown\-pragmas\fR" 4
+.IX Item "-Wunknown-pragmas"
+Warn when a \f(CW\*(C`#pragma\*(C'\fR directive is encountered that is not understood by 
+\&\s-1GCC.\s0  If this command-line option is used, warnings are even issued
+for unknown pragmas in system header files.  This is not the case if
+the warnings are only enabled by the \fB\-Wall\fR command-line option.
+.IP "\fB\-Wno\-pragmas\fR" 4
+.IX Item "-Wno-pragmas"
+Do not warn about misuses of pragmas, such as incorrect parameters,
+invalid syntax, or conflicts between pragmas.  See also
+\&\fB\-Wunknown\-pragmas\fR.
+.IP "\fB\-Wno\-prio\-ctor\-dtor\fR" 4
+.IX Item "-Wno-prio-ctor-dtor"
+Do not warn if a priority from 0 to 100 is used for constructor or destructor.
+The use of constructor and destructor attributes allow you to assign a
+priority to the constructor/destructor to control its order of execution
+before \f(CW\*(C`main\*(C'\fR is called or after it returns.  The priority values must be
+greater than 100 as the compiler reserves priority values between 0\-\-100 for
+the implementation.
+.IP "\fB\-Wstrict\-aliasing\fR" 4
+.IX Item "-Wstrict-aliasing"
+This option is only active when \fB\-fstrict\-aliasing\fR is active.
+It warns about code that might break the strict aliasing rules that the
+compiler is using for optimization.  The warning does not catch all
+cases, but does attempt to catch the more common pitfalls.  It is
+included in \fB\-Wall\fR.
+It is equivalent to \fB\-Wstrict\-aliasing=3\fR
+.IP "\fB\-Wstrict\-aliasing=n\fR" 4
+.IX Item "-Wstrict-aliasing=n"
+This option is only active when \fB\-fstrict\-aliasing\fR is active.
+It warns about code that might break the strict aliasing rules that the
+compiler is using for optimization.
+Higher levels correspond to higher accuracy (fewer false positives).
+Higher levels also correspond to more effort, similar to the way \fB\-O\fR 
+works.
+\&\fB\-Wstrict\-aliasing\fR is equivalent to \fB\-Wstrict\-aliasing=3\fR.
+.Sp
+Level 1: Most aggressive, quick, least accurate.
+Possibly useful when higher levels
+do not warn but \fB\-fstrict\-aliasing\fR still breaks the code, as it has very few
+false negatives.  However, it has many false positives.
+Warns for all pointer conversions between possibly incompatible types,
+even if never dereferenced.  Runs in the front end only.
+.Sp
+Level 2: Aggressive, quick, not too precise.
+May still have many false positives (not as many as level 1 though),
+and few false negatives (but possibly more than level 1).
+Unlike level 1, it only warns when an address is taken.  Warns about
+incomplete types.  Runs in the front end only.
+.Sp
+Level 3 (default for \fB\-Wstrict\-aliasing\fR):
+Should have very few false positives and few false
+negatives.  Slightly slower than levels 1 or 2 when optimization is enabled.
+Takes care of the common pun+dereference pattern in the front end:
+\&\f(CW\*(C`*(int*)&some_float\*(C'\fR.
+If optimization is enabled, it also runs in the back end, where it deals
+with multiple statement cases using flow-sensitive points-to information.
+Only warns when the converted pointer is dereferenced.
+Does not warn about incomplete types.
+.IP "\fB\-Wstrict\-overflow\fR" 4
+.IX Item "-Wstrict-overflow"
+.PD 0
+.IP "\fB\-Wstrict\-overflow=\fR\fIn\fR" 4
+.IX Item "-Wstrict-overflow=n"
+.PD
+This option is only active when signed overflow is undefined.
+It warns about cases where the compiler optimizes based on the
+assumption that signed overflow does not occur.  Note that it does not
+warn about all cases where the code might overflow: it only warns
+about cases where the compiler implements some optimization.  Thus
+this warning depends on the optimization level.
+.Sp
+An optimization that assumes that signed overflow does not occur is
+perfectly safe if the values of the variables involved are such that
+overflow never does, in fact, occur.  Therefore this warning can
+easily give a false positive: a warning about code that is not
+actually a problem.  To help focus on important issues, several
+warning levels are defined.  No warnings are issued for the use of
+undefined signed overflow when estimating how many iterations a loop
+requires, in particular when determining whether a loop will be
+executed at all.
+.RS 4
+.IP "\fB\-Wstrict\-overflow=1\fR" 4
+.IX Item "-Wstrict-overflow=1"
+Warn about cases that are both questionable and easy to avoid.  For
+example the compiler simplifies
+\&\f(CW\*(C`x + 1 > x\*(C'\fR to \f(CW1\fR.  This level of
+\&\fB\-Wstrict\-overflow\fR is enabled by \fB\-Wall\fR; higher levels
+are not, and must be explicitly requested.
+.IP "\fB\-Wstrict\-overflow=2\fR" 4
+.IX Item "-Wstrict-overflow=2"
+Also warn about other cases where a comparison is simplified to a
+constant.  For example: \f(CW\*(C`abs (x) >= 0\*(C'\fR.  This can only be
+simplified when signed integer overflow is undefined, because
+\&\f(CW\*(C`abs (INT_MIN)\*(C'\fR overflows to \f(CW\*(C`INT_MIN\*(C'\fR, which is less than
+zero.  \fB\-Wstrict\-overflow\fR (with no level) is the same as
+\&\fB\-Wstrict\-overflow=2\fR.
+.IP "\fB\-Wstrict\-overflow=3\fR" 4
+.IX Item "-Wstrict-overflow=3"
+Also warn about other cases where a comparison is simplified.  For
+example: \f(CW\*(C`x + 1 > 1\*(C'\fR is simplified to \f(CW\*(C`x > 0\*(C'\fR.
+.IP "\fB\-Wstrict\-overflow=4\fR" 4
+.IX Item "-Wstrict-overflow=4"
+Also warn about other simplifications not covered by the above cases.
+For example: \f(CW\*(C`(x * 10) / 5\*(C'\fR is simplified to \f(CW\*(C`x * 2\*(C'\fR.
+.IP "\fB\-Wstrict\-overflow=5\fR" 4
+.IX Item "-Wstrict-overflow=5"
+Also warn about cases where the compiler reduces the magnitude of a
+constant involved in a comparison.  For example: \f(CW\*(C`x + 2 > y\*(C'\fR is
+simplified to \f(CW\*(C`x + 1 >= y\*(C'\fR.  This is reported only at the
+highest warning level because this simplification applies to many
+comparisons, so this warning level gives a very large number of
+false positives.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wstringop\-overflow\fR" 4
+.IX Item "-Wstringop-overflow"
+.PD 0
+.IP "\fB\-Wstringop\-overflow=\fR\fItype\fR" 4
+.IX Item "-Wstringop-overflow=type"
+.PD
+Warn for calls to string manipulation functions such as \f(CW\*(C`memcpy\*(C'\fR and
+\&\f(CW\*(C`strcpy\*(C'\fR that are determined to overflow the destination buffer.  The
+optional argument is one greater than the type of Object Size Checking to
+perform to determine the size of the destination.  
+The argument is meaningful only for functions that operate on character arrays
+but not for raw memory functions like \f(CW\*(C`memcpy\*(C'\fR which always make use
+of Object Size type\-0.  The option also warns for calls that specify a size
+in excess of the largest possible object or at most \f(CW\*(C`SIZE_MAX / 2\*(C'\fR bytes.
+The option produces the best results with optimization enabled but can detect
+a small subset of simple buffer overflows even without optimization in
+calls to the \s-1GCC\s0 built-in functions like \f(CW\*(C`_\|_builtin_memcpy\*(C'\fR that
+correspond to the standard functions.  In any case, the option warns about
+just a subset of buffer overflows detected by the corresponding overflow
+checking built-ins.  For example, the option will issue a warning for
+the \f(CW\*(C`strcpy\*(C'\fR call below because it copies at least 5 characters
+(the string \f(CW"blue"\fR including the terminating \s-1NUL\s0) into the buffer
+of size 4.
+.Sp
+.Vb 11
+\&        enum Color { blue, purple, yellow };
+\&        const char* f (enum Color clr)
+\&        {
+\&          static char buf [4];
+\&          const char *str;
+\&          switch (clr)
+\&            {
+\&              case blue: str = "blue"; break;
+\&              case purple: str = "purple"; break;
+\&              case yellow: str = "yellow"; break;
+\&            }
+\&        
+\&          return strcpy (buf, str);   // warning here
+\&        }
+.Ve
+.Sp
+Option \fB\-Wstringop\-overflow=2\fR is enabled by default.
+.RS 4
+.IP "\fB\-Wstringop\-overflow\fR" 4
+.IX Item "-Wstringop-overflow"
+.PD 0
+.IP "\fB\-Wstringop\-overflow=1\fR" 4
+.IX Item "-Wstringop-overflow=1"
+.PD
+The \fB\-Wstringop\-overflow=1\fR option uses type-zero Object Size Checking
+to determine the sizes of destination objects.  This is the default setting
+of the option.  At this setting the option will not warn for writes past
+the end of subobjects of larger objects accessed by pointers unless the
+size of the largest surrounding object is known.  When the destination may
+be one of several objects it is assumed to be the largest one of them.  On
+Linux systems, when optimization is enabled at this setting the option warns
+for the same code as when the \f(CW\*(C`_FORTIFY_SOURCE\*(C'\fR macro is defined to
+a non-zero value.
+.IP "\fB\-Wstringop\-overflow=2\fR" 4
+.IX Item "-Wstringop-overflow=2"
+The \fB\-Wstringop\-overflow=2\fR option uses type-one Object Size Checking
+to determine the sizes of destination objects.  At this setting the option
+will warn about overflows when writing to members of the largest complete
+objects whose exact size is known.  It will, however, not warn for excessive
+writes to the same members of unknown objects referenced by pointers since
+they may point to arrays containing unknown numbers of elements.
+.IP "\fB\-Wstringop\-overflow=3\fR" 4
+.IX Item "-Wstringop-overflow=3"
+The \fB\-Wstringop\-overflow=3\fR option uses type-two Object Size Checking
+to determine the sizes of destination objects.  At this setting the option
+warns about overflowing the smallest object or data member.  This is the
+most restrictive setting of the option that may result in warnings for safe
+code.
+.IP "\fB\-Wstringop\-overflow=4\fR" 4
+.IX Item "-Wstringop-overflow=4"
+The \fB\-Wstringop\-overflow=4\fR option uses type-three Object Size Checking
+to determine the sizes of destination objects.  At this setting the option
+will warn about overflowing any data members, and when the destination is
+one of several objects it uses the size of the largest of them to decide
+whether to issue a warning.  Similarly to \fB\-Wstringop\-overflow=3\fR this
+setting of the option may result in warnings for benign code.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wstringop\-truncation\fR" 4
+.IX Item "-Wstringop-truncation"
+Warn for calls to bounded string manipulation functions such as \f(CW\*(C`strncat\*(C'\fR,
+\&\f(CW\*(C`strncpy\*(C'\fR, and \f(CW\*(C`stpncpy\*(C'\fR that may either truncate the copied string
+or leave the destination unchanged.
+.Sp
+In the following example, the call to \f(CW\*(C`strncat\*(C'\fR specifies a bound that
+is less than the length of the source string.  As a result, the copy of
+the source will be truncated and so the call is diagnosed.  To avoid the
+warning use \f(CW\*(C`bufsize \- strlen (buf) \- 1)\*(C'\fR as the bound.
+.Sp
+.Vb 4
+\&        void append (char *buf, size_t bufsize)
+\&        {
+\&          strncat (buf, ".txt", 3);
+\&        }
+.Ve
+.Sp
+As another example, the following call to \f(CW\*(C`strncpy\*(C'\fR results in copying
+to \f(CW\*(C`d\*(C'\fR just the characters preceding the terminating \s-1NUL,\s0 without
+appending the \s-1NUL\s0 to the end.  Assuming the result of \f(CW\*(C`strncpy\*(C'\fR is
+necessarily a NUL-terminated string is a common mistake, and so the call
+is diagnosed.  To avoid the warning when the result is not expected to be
+NUL-terminated, call \f(CW\*(C`memcpy\*(C'\fR instead.
+.Sp
+.Vb 4
+\&        void copy (char *d, const char *s)
+\&        {
+\&          strncpy (d, s, strlen (s));
+\&        }
+.Ve
+.Sp
+In the following example, the call to \f(CW\*(C`strncpy\*(C'\fR specifies the size
+of the destination buffer as the bound.  If the length of the source
+string is equal to or greater than this size the result of the copy will
+not be NUL-terminated.  Therefore, the call is also diagnosed.  To avoid
+the warning, specify \f(CW\*(C`sizeof buf \- 1\*(C'\fR as the bound and set the last
+element of the buffer to \f(CW\*(C`NUL\*(C'\fR.
+.Sp
+.Vb 6
+\&        void copy (const char *s)
+\&        {
+\&          char buf[80];
+\&          strncpy (buf, s, sizeof buf);
+\&          ...
+\&        }
+.Ve
+.Sp
+In situations where a character array is intended to store a sequence
+of bytes with no terminating \f(CW\*(C`NUL\*(C'\fR such an array may be annotated
+with attribute \f(CW\*(C`nonstring\*(C'\fR to avoid this warning.  Such arrays,
+however, are not suitable arguments to functions that expect
+\&\f(CW\*(C`NUL\*(C'\fR\-terminated strings.  To help detect accidental misuses of
+such arrays \s-1GCC\s0 issues warnings unless it can prove that the use is
+safe.
+.IP "\fB\-Wsuggest\-attribute=\fR[\fBpure\fR|\fBconst\fR|\fBnoreturn\fR|\fBformat\fR|\fBcold\fR|\fBmalloc\fR]" 4
+.IX Item "-Wsuggest-attribute=[pure|const|noreturn|format|cold|malloc]"
+Warn for cases where adding an attribute may be beneficial. The
+attributes currently supported are listed below.
+.RS 4
+.IP "\fB\-Wsuggest\-attribute=pure\fR" 4
+.IX Item "-Wsuggest-attribute=pure"
+.PD 0
+.IP "\fB\-Wsuggest\-attribute=const\fR" 4
+.IX Item "-Wsuggest-attribute=const"
+.IP "\fB\-Wsuggest\-attribute=noreturn\fR" 4
+.IX Item "-Wsuggest-attribute=noreturn"
+.IP "\fB\-Wmissing\-noreturn\fR" 4
+.IX Item "-Wmissing-noreturn"
+.IP "\fB\-Wsuggest\-attribute=malloc\fR" 4
+.IX Item "-Wsuggest-attribute=malloc"
+.PD
+Warn about functions that might be candidates for attributes
+\&\f(CW\*(C`pure\*(C'\fR, \f(CW\*(C`const\*(C'\fR or \f(CW\*(C`noreturn\*(C'\fR or \f(CW\*(C`malloc\*(C'\fR. The compiler
+only warns for functions visible in other compilation units or (in the case of
+\&\f(CW\*(C`pure\*(C'\fR and \f(CW\*(C`const\*(C'\fR) if it cannot prove that the function returns
+normally. A function returns normally if it doesn't contain an infinite loop or
+return abnormally by throwing, calling \f(CW\*(C`abort\*(C'\fR or trapping.  This analysis
+requires option \fB\-fipa\-pure\-const\fR, which is enabled by default at
+\&\fB\-O\fR and higher.  Higher optimization levels improve the accuracy
+of the analysis.
+.IP "\fB\-Wsuggest\-attribute=format\fR" 4
+.IX Item "-Wsuggest-attribute=format"
+.PD 0
+.IP "\fB\-Wmissing\-format\-attribute\fR" 4
+.IX Item "-Wmissing-format-attribute"
+.PD
+Warn about function pointers that might be candidates for \f(CW\*(C`format\*(C'\fR
+attributes.  Note these are only possible candidates, not absolute ones.
+\&\s-1GCC\s0 guesses that function pointers with \f(CW\*(C`format\*(C'\fR attributes that
+are used in assignment, initialization, parameter passing or return
+statements should have a corresponding \f(CW\*(C`format\*(C'\fR attribute in the
+resulting type.  I.e. the left-hand side of the assignment or
+initialization, the type of the parameter variable, or the return type
+of the containing function respectively should also have a \f(CW\*(C`format\*(C'\fR
+attribute to avoid the warning.
+.Sp
+\&\s-1GCC\s0 also warns about function definitions that might be
+candidates for \f(CW\*(C`format\*(C'\fR attributes.  Again, these are only
+possible candidates.  \s-1GCC\s0 guesses that \f(CW\*(C`format\*(C'\fR attributes
+might be appropriate for any function that calls a function like
+\&\f(CW\*(C`vprintf\*(C'\fR or \f(CW\*(C`vscanf\*(C'\fR, but this might not always be the
+case, and some functions for which \f(CW\*(C`format\*(C'\fR attributes are
+appropriate may not be detected.
+.IP "\fB\-Wsuggest\-attribute=cold\fR" 4
+.IX Item "-Wsuggest-attribute=cold"
+Warn about functions that might be candidates for \f(CW\*(C`cold\*(C'\fR attribute.  This
+is based on static detection and generally will only warn about functions which
+always leads to a call to another \f(CW\*(C`cold\*(C'\fR function such as wrappers of
+\&\*(C+ \f(CW\*(C`throw\*(C'\fR or fatal error reporting functions leading to \f(CW\*(C`abort\*(C'\fR.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wsuggest\-final\-types\fR" 4
+.IX Item "-Wsuggest-final-types"
+Warn about types with virtual methods where code quality would be improved
+if the type were declared with the \*(C+11 \f(CW\*(C`final\*(C'\fR specifier, 
+or, if possible,
+declared in an anonymous namespace. This allows \s-1GCC\s0 to more aggressively
+devirtualize the polymorphic calls. This warning is more effective with link
+time optimization, where the information about the class hierarchy graph is
+more complete.
+.IP "\fB\-Wsuggest\-final\-methods\fR" 4
+.IX Item "-Wsuggest-final-methods"
+Warn about virtual methods where code quality would be improved if the method
+were declared with the \*(C+11 \f(CW\*(C`final\*(C'\fR specifier, 
+or, if possible, its type were
+declared in an anonymous namespace or with the \f(CW\*(C`final\*(C'\fR specifier.
+This warning is
+more effective with link-time optimization, where the information about the
+class hierarchy graph is more complete. It is recommended to first consider
+suggestions of \fB\-Wsuggest\-final\-types\fR and then rebuild with new
+annotations.
+.IP "\fB\-Wsuggest\-override\fR" 4
+.IX Item "-Wsuggest-override"
+Warn about overriding virtual functions that are not marked with the override
+keyword.
+.IP "\fB\-Walloc\-zero\fR" 4
+.IX Item "-Walloc-zero"
+Warn about calls to allocation functions decorated with attribute
+\&\f(CW\*(C`alloc_size\*(C'\fR that specify zero bytes, including those to the built-in
+forms of the functions \f(CW\*(C`aligned_alloc\*(C'\fR, \f(CW\*(C`alloca\*(C'\fR, \f(CW\*(C`calloc\*(C'\fR,
+\&\f(CW\*(C`malloc\*(C'\fR, and \f(CW\*(C`realloc\*(C'\fR.  Because the behavior of these functions
+when called with a zero size differs among implementations (and in the case
+of \f(CW\*(C`realloc\*(C'\fR has been deprecated) relying on it may result in subtle
+portability bugs and should be avoided.
+.IP "\fB\-Walloc\-size\-larger\-than=\fR\fIbyte-size\fR" 4
+.IX Item "-Walloc-size-larger-than=byte-size"
+Warn about calls to functions decorated with attribute \f(CW\*(C`alloc_size\*(C'\fR
+that attempt to allocate objects larger than the specified number of bytes,
+or where the result of the size computation in an integer type with infinite
+precision would exceed the value of \fB\s-1PTRDIFF_MAX\s0\fR on the target.
+\&\fB\-Walloc\-size\-larger\-than=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default.
+Warnings controlled by the option can be disabled either by specifying
+\&\fIbyte-size\fR of \fB\s-1SIZE_MAX\s0\fR or more or by
+\&\fB\-Wno\-alloc\-size\-larger\-than\fR.
+.IP "\fB\-Wno\-alloc\-size\-larger\-than\fR" 4
+.IX Item "-Wno-alloc-size-larger-than"
+Disable \fB\-Walloc\-size\-larger\-than=\fR warnings.  The option is
+equivalent to \fB\-Walloc\-size\-larger\-than=\fR\fB\s-1SIZE_MAX\s0\fR or
+larger.
+.IP "\fB\-Walloca\fR" 4
+.IX Item "-Walloca"
+This option warns on all uses of \f(CW\*(C`alloca\*(C'\fR in the source.
+.IP "\fB\-Walloca\-larger\-than=\fR\fIbyte-size\fR" 4
+.IX Item "-Walloca-larger-than=byte-size"
+This option warns on calls to \f(CW\*(C`alloca\*(C'\fR with an integer argument whose
+value is either zero, or that is not bounded by a controlling predicate
+that limits its value to at most \fIbyte-size\fR.  It also warns for calls
+to \f(CW\*(C`alloca\*(C'\fR where the bound value is unknown.  Arguments of non-integer
+types are considered unbounded even if they appear to be constrained to
+the expected range.
+.Sp
+For example, a bounded case of \f(CW\*(C`alloca\*(C'\fR could be:
+.Sp
+.Vb 9
+\&        void func (size_t n)
+\&        {
+\&          void *p;
+\&          if (n <= 1000)
+\&            p = alloca (n);
+\&          else
+\&            p = malloc (n);
+\&          f (p);
+\&        }
+.Ve
+.Sp
+In the above example, passing \f(CW\*(C`\-Walloca\-larger\-than=1000\*(C'\fR would not
+issue a warning because the call to \f(CW\*(C`alloca\*(C'\fR is known to be at most
+1000 bytes.  However, if \f(CW\*(C`\-Walloca\-larger\-than=500\*(C'\fR were passed,
+the compiler would emit a warning.
+.Sp
+Unbounded uses, on the other hand, are uses of \f(CW\*(C`alloca\*(C'\fR with no
+controlling predicate constraining its integer argument.  For example:
+.Sp
+.Vb 5
+\&        void func ()
+\&        {
+\&          void *p = alloca (n);
+\&          f (p);
+\&        }
+.Ve
+.Sp
+If \f(CW\*(C`\-Walloca\-larger\-than=500\*(C'\fR were passed, the above would trigger
+a warning, but this time because of the lack of bounds checking.
+.Sp
+Note, that even seemingly correct code involving signed integers could
+cause a warning:
+.Sp
+.Vb 8
+\&        void func (signed int n)
+\&        {
+\&          if (n < 500)
+\&            {
+\&              p = alloca (n);
+\&              f (p);
+\&            }
+\&        }
+.Ve
+.Sp
+In the above example, \fIn\fR could be negative, causing a larger than
+expected argument to be implicitly cast into the \f(CW\*(C`alloca\*(C'\fR call.
+.Sp
+This option also warns when \f(CW\*(C`alloca\*(C'\fR is used in a loop.
+.Sp
+\&\fB\-Walloca\-larger\-than=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default
+but is usually only effective  when \fB\-ftree\-vrp\fR is active (default
+for \fB\-O2\fR and above).
+.Sp
+See also \fB\-Wvla\-larger\-than=\fR\fBbyte-size\fR.
+.IP "\fB\-Wno\-alloca\-larger\-than\fR" 4
+.IX Item "-Wno-alloca-larger-than"
+Disable \fB\-Walloca\-larger\-than=\fR warnings.  The option is
+equivalent to \fB\-Walloca\-larger\-than=\fR\fB\s-1SIZE_MAX\s0\fR or larger.
+.IP "\fB\-Warray\-bounds\fR" 4
+.IX Item "-Warray-bounds"
+.PD 0
+.IP "\fB\-Warray\-bounds=\fR\fIn\fR" 4
+.IX Item "-Warray-bounds=n"
+.PD
+This option is only active when \fB\-ftree\-vrp\fR is active
+(default for \fB\-O2\fR and above). It warns about subscripts to arrays
+that are always out of bounds. This warning is enabled by \fB\-Wall\fR.
+.RS 4
+.IP "\fB\-Warray\-bounds=1\fR" 4
+.IX Item "-Warray-bounds=1"
+This is the warning level of \fB\-Warray\-bounds\fR and is enabled
+by \fB\-Wall\fR; higher levels are not, and must be explicitly requested.
+.IP "\fB\-Warray\-bounds=2\fR" 4
+.IX Item "-Warray-bounds=2"
+This warning level also warns about out of bounds access for
+arrays at the end of a struct and for arrays accessed through
+pointers. This warning level may give a larger number of
+false positives and is deactivated by default.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wattribute\-alias=\fR\fIn\fR" 4
+.IX Item "-Wattribute-alias=n"
+.PD 0
+.IP "\fB\-Wno\-attribute\-alias\fR" 4
+.IX Item "-Wno-attribute-alias"
+.PD
+Warn about declarations using the \f(CW\*(C`alias\*(C'\fR and similar attributes whose
+target is incompatible with the type of the alias.
+.RS 4
+.IP "\fB\-Wattribute\-alias=1\fR" 4
+.IX Item "-Wattribute-alias=1"
+The default warning level of the \fB\-Wattribute\-alias\fR option diagnoses
+incompatibilities between the type of the alias declaration and that of its
+target.  Such incompatibilities are typically indicative of bugs.
+.IP "\fB\-Wattribute\-alias=2\fR" 4
+.IX Item "-Wattribute-alias=2"
+At this level \fB\-Wattribute\-alias\fR also diagnoses cases where
+the attributes of the alias declaration are more restrictive than the
+attributes applied to its target.  These mismatches can potentially
+result in incorrect code generation.  In other cases they may be
+benign and could be resolved simply by adding the missing attribute to
+the target.  For comparison, see the \fB\-Wmissing\-attributes\fR
+option, which controls diagnostics when the alias declaration is less
+restrictive than the target, rather than more restrictive.
+.Sp
+Attributes considered include \f(CW\*(C`alloc_align\*(C'\fR, \f(CW\*(C`alloc_size\*(C'\fR,
+\&\f(CW\*(C`cold\*(C'\fR, \f(CW\*(C`const\*(C'\fR, \f(CW\*(C`hot\*(C'\fR, \f(CW\*(C`leaf\*(C'\fR, \f(CW\*(C`malloc\*(C'\fR,
+\&\f(CW\*(C`nonnull\*(C'\fR, \f(CW\*(C`noreturn\*(C'\fR, \f(CW\*(C`nothrow\*(C'\fR, \f(CW\*(C`pure\*(C'\fR,
+\&\f(CW\*(C`returns_nonnull\*(C'\fR, and \f(CW\*(C`returns_twice\*(C'\fR.
+.RE
+.RS 4
+.Sp
+\&\fB\-Wattribute\-alias\fR is equivalent to \fB\-Wattribute\-alias=1\fR.
+This is the default.  You can disable these warnings with either
+\&\fB\-Wno\-attribute\-alias\fR or \fB\-Wattribute\-alias=0\fR.
+.RE
+.IP "\fB\-Wbool\-compare\fR" 4
+.IX Item "-Wbool-compare"
+Warn about boolean expression compared with an integer value different from
+\&\f(CW\*(C`true\*(C'\fR/\f(CW\*(C`false\*(C'\fR.  For instance, the following comparison is
+always false:
+.Sp
+.Vb 3
+\&        int n = 5;
+\&        ...
+\&        if ((n > 1) == 2) { ... }
+.Ve
+.Sp
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wbool\-operation\fR" 4
+.IX Item "-Wbool-operation"
+Warn about suspicious operations on expressions of a boolean type.  For
+instance, bitwise negation of a boolean is very likely a bug in the program.
+For C, this warning also warns about incrementing or decrementing a boolean,
+which rarely makes sense.  (In \*(C+, decrementing a boolean is always invalid.
+Incrementing a boolean is invalid in \*(C+17, and deprecated otherwise.)
+.Sp
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wduplicated\-branches\fR" 4
+.IX Item "-Wduplicated-branches"
+Warn when an if-else has identical branches.  This warning detects cases like
+.Sp
+.Vb 4
+\&        if (p != NULL)
+\&          return 0;
+\&        else
+\&          return 0;
+.Ve
+.Sp
+It doesn't warn when both branches contain just a null statement.  This warning
+also warn for conditional operators:
+.Sp
+.Vb 1
+\&          int i = x ? *p : *p;
+.Ve
+.IP "\fB\-Wduplicated\-cond\fR" 4
+.IX Item "-Wduplicated-cond"
+Warn about duplicated conditions in an if-else-if chain.  For instance,
+warn for the following code:
+.Sp
+.Vb 2
+\&        if (p\->q != NULL) { ... }
+\&        else if (p\->q != NULL) { ... }
+.Ve
+.IP "\fB\-Wframe\-address\fR" 4
+.IX Item "-Wframe-address"
+Warn when the \fB_\|_builtin_frame_address\fR or \fB_\|_builtin_return_address\fR
+is called with an argument greater than 0.  Such calls may return indeterminate
+values or crash the program.  The warning is included in \fB\-Wall\fR.
+.IP "\fB\-Wno\-discarded\-qualifiers\fR (C and Objective-C only)" 4
+.IX Item "-Wno-discarded-qualifiers (C and Objective-C only)"
+Do not warn if type qualifiers on pointers are being discarded.
+Typically, the compiler warns if a \f(CW\*(C`const char *\*(C'\fR variable is
+passed to a function that takes a \f(CW\*(C`char *\*(C'\fR parameter.  This option
+can be used to suppress such a warning.
+.IP "\fB\-Wno\-discarded\-array\-qualifiers\fR (C and Objective-C only)" 4
+.IX Item "-Wno-discarded-array-qualifiers (C and Objective-C only)"
+Do not warn if type qualifiers on arrays which are pointer targets
+are being discarded. Typically, the compiler warns if a
+\&\f(CW\*(C`const int (*)[]\*(C'\fR variable is passed to a function that
+takes a \f(CW\*(C`int (*)[]\*(C'\fR parameter.  This option can be used to
+suppress such a warning.
+.IP "\fB\-Wno\-incompatible\-pointer\-types\fR (C and Objective-C only)" 4
+.IX Item "-Wno-incompatible-pointer-types (C and Objective-C only)"
+Do not warn when there is a conversion between pointers that have incompatible
+types.  This warning is for cases not covered by \fB\-Wno\-pointer\-sign\fR,
+which warns for pointer argument passing or assignment with different
+signedness.
+.IP "\fB\-Wno\-int\-conversion\fR (C and Objective-C only)" 4
+.IX Item "-Wno-int-conversion (C and Objective-C only)"
+Do not warn about incompatible integer to pointer and pointer to integer
+conversions.  This warning is about implicit conversions; for explicit
+conversions the warnings \fB\-Wno\-int\-to\-pointer\-cast\fR and
+\&\fB\-Wno\-pointer\-to\-int\-cast\fR may be used.
+.IP "\fB\-Wno\-div\-by\-zero\fR" 4
+.IX Item "-Wno-div-by-zero"
+Do not warn about compile-time integer division by zero.  Floating-point
+division by zero is not warned about, as it can be a legitimate way of
+obtaining infinities and NaNs.
+.IP "\fB\-Wsystem\-headers\fR" 4
+.IX Item "-Wsystem-headers"
+Print warning messages for constructs found in system header files.
+Warnings from system headers are normally suppressed, on the assumption
+that they usually do not indicate real problems and would only make the
+compiler output harder to read.  Using this command-line option tells
+\&\s-1GCC\s0 to emit warnings from system headers as if they occurred in user
+code.  However, note that using \fB\-Wall\fR in conjunction with this
+option does \fInot\fR warn about unknown pragmas in system
+headers\-\-\-for that, \fB\-Wunknown\-pragmas\fR must also be used.
+.IP "\fB\-Wtautological\-compare\fR" 4
+.IX Item "-Wtautological-compare"
+Warn if a self-comparison always evaluates to true or false.  This
+warning detects various mistakes such as:
+.Sp
+.Vb 3
+\&        int i = 1;
+\&        ...
+\&        if (i > i) { ... }
+.Ve
+.Sp
+This warning also warns about bitwise comparisons that always evaluate
+to true or false, for instance:
+.Sp
+.Vb 1
+\&        if ((a & 16) == 10) { ... }
+.Ve
+.Sp
+will always be false.
+.Sp
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wtrampolines\fR" 4
+.IX Item "-Wtrampolines"
+Warn about trampolines generated for pointers to nested functions.
+A trampoline is a small piece of data or code that is created at run
+time on the stack when the address of a nested function is taken, and is
+used to call the nested function indirectly.  For some targets, it is
+made up of data only and thus requires no special treatment.  But, for
+most targets, it is made up of code and thus requires the stack to be
+made executable in order for the program to work properly.
+.IP "\fB\-Wfloat\-equal\fR" 4
+.IX Item "-Wfloat-equal"
+Warn if floating-point values are used in equality comparisons.
+.Sp
+The idea behind this is that sometimes it is convenient (for the
+programmer) to consider floating-point values as approximations to
+infinitely precise real numbers.  If you are doing this, then you need
+to compute (by analyzing the code, or in some other way) the maximum or
+likely maximum error that the computation introduces, and allow for it
+when performing comparisons (and when producing output, but that's a
+different problem).  In particular, instead of testing for equality, you
+should check to see whether the two values have ranges that overlap; and
+this is done with the relational operators, so equality comparisons are
+probably mistaken.
+.IP "\fB\-Wtraditional\fR (C and Objective-C only)" 4
+.IX Item "-Wtraditional (C and Objective-C only)"
+Warn about certain constructs that behave differently in traditional and
+\&\s-1ISO C.\s0  Also warn about \s-1ISO C\s0 constructs that have no traditional C
+equivalent, and/or problematic constructs that should be avoided.
+.RS 4
+.IP "*" 4
+Macro parameters that appear within string literals in the macro body.
+In traditional C macro replacement takes place within string literals,
+but in \s-1ISO C\s0 it does not.
+.IP "*" 4
+In traditional C, some preprocessor directives did not exist.
+Traditional preprocessors only considered a line to be a directive
+if the \fB#\fR appeared in column 1 on the line.  Therefore
+\&\fB\-Wtraditional\fR warns about directives that traditional C
+understands but ignores because the \fB#\fR does not appear as the
+first character on the line.  It also suggests you hide directives like
+\&\f(CW\*(C`#pragma\*(C'\fR not understood by traditional C by indenting them.  Some
+traditional implementations do not recognize \f(CW\*(C`#elif\*(C'\fR, so this option
+suggests avoiding it altogether.
+.IP "*" 4
+A function-like macro that appears without arguments.
+.IP "*" 4
+The unary plus operator.
+.IP "*" 4
+The \fBU\fR integer constant suffix, or the \fBF\fR or \fBL\fR floating-point
+constant suffixes.  (Traditional C does support the \fBL\fR suffix on integer
+constants.)  Note, these suffixes appear in macros defined in the system
+headers of most modern systems, e.g. the \fB_MIN\fR/\fB_MAX\fR macros in \f(CW\*(C`<limits.h>\*(C'\fR.
+Use of these macros in user code might normally lead to spurious
+warnings, however \s-1GCC\s0's integrated preprocessor has enough context to
+avoid warning in these cases.
+.IP "*" 4
+A function declared external in one block and then used after the end of
+the block.
+.IP "*" 4
+A \f(CW\*(C`switch\*(C'\fR statement has an operand of type \f(CW\*(C`long\*(C'\fR.
+.IP "*" 4
+A non\-\f(CW\*(C`static\*(C'\fR function declaration follows a \f(CW\*(C`static\*(C'\fR one.
+This construct is not accepted by some traditional C compilers.
+.IP "*" 4
+The \s-1ISO\s0 type of an integer constant has a different width or
+signedness from its traditional type.  This warning is only issued if
+the base of the constant is ten.  I.e. hexadecimal or octal values, which
+typically represent bit patterns, are not warned about.
+.IP "*" 4
+Usage of \s-1ISO\s0 string concatenation is detected.
+.IP "*" 4
+Initialization of automatic aggregates.
+.IP "*" 4
+Identifier conflicts with labels.  Traditional C lacks a separate
+namespace for labels.
+.IP "*" 4
+Initialization of unions.  If the initializer is zero, the warning is
+omitted.  This is done under the assumption that the zero initializer in
+user code appears conditioned on e.g. \f(CW\*(C`_\|_STDC_\|_\*(C'\fR to avoid missing
+initializer warnings and relies on default initialization to zero in the
+traditional C case.
+.IP "*" 4
+Conversions by prototypes between fixed/floating\-point values and vice
+versa.  The absence of these prototypes when compiling with traditional
+C causes serious problems.  This is a subset of the possible
+conversion warnings; for the full set use \fB\-Wtraditional\-conversion\fR.
+.IP "*" 4
+Use of \s-1ISO C\s0 style function definitions.  This warning intentionally is
+\&\fInot\fR issued for prototype declarations or variadic functions
+because these \s-1ISO C\s0 features appear in your code when using
+libiberty's traditional C compatibility macros, \f(CW\*(C`PARAMS\*(C'\fR and
+\&\f(CW\*(C`VPARAMS\*(C'\fR.  This warning is also bypassed for nested functions
+because that feature is already a \s-1GCC\s0 extension and thus not relevant to
+traditional C compatibility.
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wtraditional\-conversion\fR (C and Objective-C only)" 4
+.IX Item "-Wtraditional-conversion (C and Objective-C only)"
+Warn if a prototype causes a type conversion that is different from what
+would happen to the same argument in the absence of a prototype.  This
+includes conversions of fixed point to floating and vice versa, and
+conversions changing the width or signedness of a fixed-point argument
+except when the same as the default promotion.
+.IP "\fB\-Wdeclaration\-after\-statement\fR (C and Objective-C only)" 4
+.IX Item "-Wdeclaration-after-statement (C and Objective-C only)"
+Warn when a declaration is found after a statement in a block.  This
+construct, known from \*(C+, was introduced with \s-1ISO C99\s0 and is by default
+allowed in \s-1GCC.\s0  It is not supported by \s-1ISO C90.\s0
+.IP "\fB\-Wshadow\fR" 4
+.IX Item "-Wshadow"
+Warn whenever a local variable or type declaration shadows another
+variable, parameter, type, class member (in \*(C+), or instance variable
+(in Objective-C) or whenever a built-in function is shadowed. Note
+that in \*(C+, the compiler warns if a local variable shadows an
+explicit typedef, but not if it shadows a struct/class/enum.
+Same as \fB\-Wshadow=global\fR.
+.IP "\fB\-Wno\-shadow\-ivar\fR (Objective-C only)" 4
+.IX Item "-Wno-shadow-ivar (Objective-C only)"
+Do not warn whenever a local variable shadows an instance variable in an
+Objective-C method.
+.IP "\fB\-Wshadow=global\fR" 4
+.IX Item "-Wshadow=global"
+The default for \fB\-Wshadow\fR. Warns for any (global) shadowing.
+.IP "\fB\-Wshadow=local\fR" 4
+.IX Item "-Wshadow=local"
+Warn when a local variable shadows another local variable or parameter.
+This warning is enabled by \fB\-Wshadow=global\fR.
+.IP "\fB\-Wshadow=compatible\-local\fR" 4
+.IX Item "-Wshadow=compatible-local"
+Warn when a local variable shadows another local variable or parameter
+whose type is compatible with that of the shadowing variable. In \*(C+,
+type compatibility here means the type of the shadowing variable can be
+converted to that of the shadowed variable. The creation of this flag
+(in addition to \fB\-Wshadow=local\fR) is based on the idea that when
+a local variable shadows another one of incompatible type, it is most
+likely intentional, not a bug or typo, as shown in the following example:
+.Sp
+.Vb 8
+\&        for (SomeIterator i = SomeObj.begin(); i != SomeObj.end(); ++i)
+\&        {
+\&          for (int i = 0; i < N; ++i)
+\&          {
+\&            ...
+\&          }
+\&          ...
+\&        }
+.Ve
+.Sp
+Since the two variable \f(CW\*(C`i\*(C'\fR in the example above have incompatible types,
+enabling only \fB\-Wshadow=compatible\-local\fR will not emit a warning.
+Because their types are incompatible, if a programmer accidentally uses one
+in place of the other, type checking will catch that and emit an error or
+warning. So not warning (about shadowing) in this case will not lead to
+undetected bugs. Use of this flag instead of \fB\-Wshadow=local\fR can
+possibly reduce the number of warnings triggered by intentional shadowing.
+.Sp
+This warning is enabled by \fB\-Wshadow=local\fR.
+.IP "\fB\-Wlarger\-than=\fR\fIbyte-size\fR" 4
+.IX Item "-Wlarger-than=byte-size"
+Warn whenever an object is defined whose size exceeds \fIbyte-size\fR.
+\&\fB\-Wlarger\-than=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default.
+Warnings controlled by the option can be disabled either by specifying
+\&\fIbyte-size\fR of \fB\s-1SIZE_MAX\s0\fR or more or by
+\&\fB\-Wno\-larger\-than\fR.
+.IP "\fB\-Wno\-larger\-than\fR" 4
+.IX Item "-Wno-larger-than"
+Disable \fB\-Wlarger\-than=\fR warnings.  The option is equivalent
+to \fB\-Wlarger\-than=\fR\fB\s-1SIZE_MAX\s0\fR or larger.
+.IP "\fB\-Wframe\-larger\-than=\fR\fIbyte-size\fR" 4
+.IX Item "-Wframe-larger-than=byte-size"
+Warn if the size of a function frame exceeds \fIbyte-size\fR.
+The computation done to determine the stack frame size is approximate
+and not conservative.
+The actual requirements may be somewhat greater than \fIbyte-size\fR
+even if you do not get a warning.  In addition, any space allocated
+via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related constructs
+is not included by the compiler when determining
+whether or not to issue a warning.
+\&\fB\-Wframe\-larger\-than=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default.
+Warnings controlled by the option can be disabled either by specifying
+\&\fIbyte-size\fR of \fB\s-1SIZE_MAX\s0\fR or more or by
+\&\fB\-Wno\-frame\-larger\-than\fR.
+.IP "\fB\-Wno\-frame\-larger\-than\fR" 4
+.IX Item "-Wno-frame-larger-than"
+Disable \fB\-Wframe\-larger\-than=\fR warnings.  The option is equivalent
+to \fB\-Wframe\-larger\-than=\fR\fB\s-1SIZE_MAX\s0\fR or larger.
+.IP "\fB\-Wno\-free\-nonheap\-object\fR" 4
+.IX Item "-Wno-free-nonheap-object"
+Do not warn when attempting to free an object that was not allocated
+on the heap.
+.IP "\fB\-Wstack\-usage=\fR\fIbyte-size\fR" 4
+.IX Item "-Wstack-usage=byte-size"
+Warn if the stack usage of a function might exceed \fIbyte-size\fR.
+The computation done to determine the stack usage is conservative.
+Any space allocated via \f(CW\*(C`alloca\*(C'\fR, variable-length arrays, or related
+constructs is included by the compiler when determining whether or not to
+issue a warning.
+.Sp
+The message is in keeping with the output of \fB\-fstack\-usage\fR.
+.RS 4
+.IP "*" 4
+If the stack usage is fully static but exceeds the specified amount, it's:
+.Sp
+.Vb 1
+\&          warning: stack usage is 1120 bytes
+.Ve
+.IP "*" 4
+If the stack usage is (partly) dynamic but bounded, it's:
+.Sp
+.Vb 1
+\&          warning: stack usage might be 1648 bytes
+.Ve
+.IP "*" 4
+If the stack usage is (partly) dynamic and not bounded, it's:
+.Sp
+.Vb 1
+\&          warning: stack usage might be unbounded
+.Ve
+.RE
+.RS 4
+.Sp
+\&\fB\-Wstack\-usage=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default.
+Warnings controlled by the option can be disabled either by specifying
+\&\fIbyte-size\fR of \fB\s-1SIZE_MAX\s0\fR or more or by
+\&\fB\-Wno\-stack\-usage\fR.
+.RE
+.IP "\fB\-Wno\-stack\-usage\fR" 4
+.IX Item "-Wno-stack-usage"
+Disable \fB\-Wstack\-usage=\fR warnings.  The option is equivalent
+to \fB\-Wstack\-usage=\fR\fB\s-1SIZE_MAX\s0\fR or larger.
+.IP "\fB\-Wunsafe\-loop\-optimizations\fR" 4
+.IX Item "-Wunsafe-loop-optimizations"
+Warn if the loop cannot be optimized because the compiler cannot
+assume anything on the bounds of the loop indices.  With
+\&\fB\-funsafe\-loop\-optimizations\fR warn if the compiler makes
+such assumptions.
+.IP "\fB\-Wno\-pedantic\-ms\-format\fR (MinGW targets only)" 4
+.IX Item "-Wno-pedantic-ms-format (MinGW targets only)"
+When used in combination with \fB\-Wformat\fR
+and \fB\-pedantic\fR without \s-1GNU\s0 extensions, this option
+disables the warnings about non-ISO \f(CW\*(C`printf\*(C'\fR / \f(CW\*(C`scanf\*(C'\fR format
+width specifiers \f(CW\*(C`I32\*(C'\fR, \f(CW\*(C`I64\*(C'\fR, and \f(CW\*(C`I\*(C'\fR used on Windows targets,
+which depend on the \s-1MS\s0 runtime.
+.IP "\fB\-Waligned\-new\fR" 4
+.IX Item "-Waligned-new"
+Warn about a new-expression of a type that requires greater alignment
+than the \f(CW\*(C`alignof(std::max_align_t)\*(C'\fR but uses an allocation
+function without an explicit alignment parameter. This option is
+enabled by \fB\-Wall\fR.
+.Sp
+Normally this only warns about global allocation functions, but
+\&\fB\-Waligned\-new=all\fR also warns about class member allocation
+functions.
+.IP "\fB\-Wplacement\-new\fR" 4
+.IX Item "-Wplacement-new"
+.PD 0
+.IP "\fB\-Wplacement\-new=\fR\fIn\fR" 4
+.IX Item "-Wplacement-new=n"
+.PD
+Warn about placement new expressions with undefined behavior, such as
+constructing an object in a buffer that is smaller than the type of
+the object.  For example, the placement new expression below is diagnosed
+because it attempts to construct an array of 64 integers in a buffer only
+64 bytes large.
+.Sp
+.Vb 2
+\&        char buf [64];
+\&        new (buf) int[64];
+.Ve
+.Sp
+This warning is enabled by default.
+.RS 4
+.IP "\fB\-Wplacement\-new=1\fR" 4
+.IX Item "-Wplacement-new=1"
+This is the default warning level of \fB\-Wplacement\-new\fR.  At this
+level the warning is not issued for some strictly undefined constructs that
+\&\s-1GCC\s0 allows as extensions for compatibility with legacy code.  For example,
+the following \f(CW\*(C`new\*(C'\fR expression is not diagnosed at this level even
+though it has undefined behavior according to the \*(C+ standard because
+it writes past the end of the one-element array.
+.Sp
+.Vb 3
+\&        struct S { int n, a[1]; };
+\&        S *s = (S *)malloc (sizeof *s + 31 * sizeof s\->a[0]);
+\&        new (s\->a)int [32]();
+.Ve
+.IP "\fB\-Wplacement\-new=2\fR" 4
+.IX Item "-Wplacement-new=2"
+At this level, in addition to diagnosing all the same constructs as at level
+1, a diagnostic is also issued for placement new expressions that construct
+an object in the last member of structure whose type is an array of a single
+element and whose size is less than the size of the object being constructed.
+While the previous example would be diagnosed, the following construct makes
+use of the flexible member array extension to avoid the warning at level 2.
+.Sp
+.Vb 3
+\&        struct S { int n, a[]; };
+\&        S *s = (S *)malloc (sizeof *s + 32 * sizeof s\->a[0]);
+\&        new (s\->a)int [32]();
+.Ve
+.RE
+.RS 4
+.RE
+.IP "\fB\-Wpointer\-arith\fR" 4
+.IX Item "-Wpointer-arith"
+Warn about anything that depends on the \*(L"size of\*(R" a function type or
+of \f(CW\*(C`void\*(C'\fR.  \s-1GNU C\s0 assigns these types a size of 1, for
+convenience in calculations with \f(CW\*(C`void *\*(C'\fR pointers and pointers
+to functions.  In \*(C+, warn also when an arithmetic operation involves
+\&\f(CW\*(C`NULL\*(C'\fR.  This warning is also enabled by \fB\-Wpedantic\fR.
+.IP "\fB\-Wpointer\-compare\fR" 4
+.IX Item "-Wpointer-compare"
+Warn if a pointer is compared with a zero character constant.  This usually
+means that the pointer was meant to be dereferenced.  For example:
+.Sp
+.Vb 3
+\&        const char *p = foo ();
+\&        if (p == \*(Aq\e0\*(Aq)
+\&          return 42;
+.Ve
+.Sp
+Note that the code above is invalid in \*(C+11.
+.Sp
+This warning is enabled by default.
+.IP "\fB\-Wtype\-limits\fR" 4
+.IX Item "-Wtype-limits"
+Warn if a comparison is always true or always false due to the limited
+range of the data type, but do not warn for constant expressions.  For
+example, warn if an unsigned variable is compared against zero with
+\&\f(CW\*(C`<\*(C'\fR or \f(CW\*(C`>=\*(C'\fR.  This warning is also enabled by
+\&\fB\-Wextra\fR.
+.IP "\fB\-Wabsolute\-value\fR (C and Objective-C only)" 4
+.IX Item "-Wabsolute-value (C and Objective-C only)"
+Warn for calls to standard functions that compute the absolute value
+of an argument when a more appropriate standard function is available.
+For example, calling \f(CW\*(C`abs(3.14)\*(C'\fR triggers the warning because the
+appropriate function to call to compute the absolute value of a double
+argument is \f(CW\*(C`fabs\*(C'\fR.  The option also triggers warnings when the
+argument in a call to such a function has an unsigned type.  This
+warning can be suppressed with an explicit type cast and it is also
+enabled by \fB\-Wextra\fR.
+.IP "\fB\-Wcomment\fR" 4
+.IX Item "-Wcomment"
+.PD 0
+.IP "\fB\-Wcomments\fR" 4
+.IX Item "-Wcomments"
+.PD
+Warn whenever a comment-start sequence \fB/*\fR appears in a \fB/*\fR
+comment, or whenever a backslash-newline appears in a \fB//\fR comment.
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wtrigraphs\fR" 4
+.IX Item "-Wtrigraphs"
+Warn if any trigraphs are encountered that might change the meaning of
+the program.  Trigraphs within comments are not warned about,
+except those that would form escaped newlines.
+.Sp
+This option is implied by \fB\-Wall\fR.  If \fB\-Wall\fR is not
+given, this option is still enabled unless trigraphs are enabled.  To
+get trigraph conversion without warnings, but get the other
+\&\fB\-Wall\fR warnings, use \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR.
+.IP "\fB\-Wundef\fR" 4
+.IX Item "-Wundef"
+Warn if an undefined identifier is evaluated in an \f(CW\*(C`#if\*(C'\fR directive.
+Such identifiers are replaced with zero.
+.IP "\fB\-Wexpansion\-to\-defined\fR" 4
+.IX Item "-Wexpansion-to-defined"
+Warn whenever \fBdefined\fR is encountered in the expansion of a macro
+(including the case where the macro is expanded by an \fB#if\fR directive).
+Such usage is not portable.
+This warning is also enabled by \fB\-Wpedantic\fR and \fB\-Wextra\fR.
+.IP "\fB\-Wunused\-macros\fR" 4
+.IX Item "-Wunused-macros"
+Warn about macros defined in the main file that are unused.  A macro
+is \fIused\fR if it is expanded or tested for existence at least once.
+The preprocessor also warns if the macro has not been used at the
+time it is redefined or undefined.
+.Sp
+Built-in macros, macros defined on the command line, and macros
+defined in include files are not warned about.
+.Sp
+\&\fINote:\fR If a macro is actually used, but only used in skipped
+conditional blocks, then the preprocessor reports it as unused.  To avoid the
+warning in such a case, you might improve the scope of the macro's
+definition by, for example, moving it into the first skipped block.
+Alternatively, you could provide a dummy use with something like:
+.Sp
+.Vb 2
+\&        #if defined the_macro_causing_the_warning
+\&        #endif
+.Ve
+.IP "\fB\-Wno\-endif\-labels\fR" 4
+.IX Item "-Wno-endif-labels"
+Do not warn whenever an \f(CW\*(C`#else\*(C'\fR or an \f(CW\*(C`#endif\*(C'\fR are followed by text.
+This sometimes happens in older programs with code of the form
+.Sp
+.Vb 5
+\&        #if FOO
+\&        ...
+\&        #else FOO
+\&        ...
+\&        #endif FOO
+.Ve
+.Sp
+The second and third \f(CW\*(C`FOO\*(C'\fR should be in comments.
+This warning is on by default.
+.IP "\fB\-Wbad\-function\-cast\fR (C and Objective-C only)" 4
+.IX Item "-Wbad-function-cast (C and Objective-C only)"
+Warn when a function call is cast to a non-matching type.
+For example, warn if a call to a function returning an integer type 
+is cast to a pointer type.
+.IP "\fB\-Wc90\-c99\-compat\fR (C and Objective-C only)" 4
+.IX Item "-Wc90-c99-compat (C and Objective-C only)"
+Warn about features not present in \s-1ISO C90,\s0 but present in \s-1ISO C99.\s0
+For instance, warn about use of variable length arrays, \f(CW\*(C`long long\*(C'\fR
+type, \f(CW\*(C`bool\*(C'\fR type, compound literals, designated initializers, and so
+on.  This option is independent of the standards mode.  Warnings are disabled
+in the expression that follows \f(CW\*(C`_\|_extension_\|_\*(C'\fR.
+.IP "\fB\-Wc99\-c11\-compat\fR (C and Objective-C only)" 4
+.IX Item "-Wc99-c11-compat (C and Objective-C only)"
+Warn about features not present in \s-1ISO C99,\s0 but present in \s-1ISO C11.\s0
+For instance, warn about use of anonymous structures and unions,
+\&\f(CW\*(C`_Atomic\*(C'\fR type qualifier, \f(CW\*(C`_Thread_local\*(C'\fR storage-class specifier,
+\&\f(CW\*(C`_Alignas\*(C'\fR specifier, \f(CW\*(C`Alignof\*(C'\fR operator, \f(CW\*(C`_Generic\*(C'\fR keyword,
+and so on.  This option is independent of the standards mode.  Warnings are
+disabled in the expression that follows \f(CW\*(C`_\|_extension_\|_\*(C'\fR.
+.IP "\fB\-Wc++\-compat\fR (C and Objective-C only)" 4
+.IX Item "-Wc++-compat (C and Objective-C only)"
+Warn about \s-1ISO C\s0 constructs that are outside of the common subset of
+\&\s-1ISO C\s0 and \s-1ISO \*(C+,\s0 e.g. request for implicit conversion from
+\&\f(CW\*(C`void *\*(C'\fR to a pointer to non\-\f(CW\*(C`void\*(C'\fR type.
+.IP "\fB\-Wc++11\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wc++11-compat ( and Objective- only)"
+Warn about \*(C+ constructs whose meaning differs between \s-1ISO \*(C+ 1998\s0
+and \s-1ISO \*(C+ 2011,\s0 e.g., identifiers in \s-1ISO \*(C+ 1998\s0 that are keywords
+in \s-1ISO \*(C+ 2011.\s0  This warning turns on \fB\-Wnarrowing\fR and is
+enabled by \fB\-Wall\fR.
+.IP "\fB\-Wc++14\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wc++14-compat ( and Objective- only)"
+Warn about \*(C+ constructs whose meaning differs between \s-1ISO \*(C+ 2011\s0
+and \s-1ISO \*(C+ 2014.\s0  This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wc++17\-compat\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wc++17-compat ( and Objective- only)"
+Warn about \*(C+ constructs whose meaning differs between \s-1ISO \*(C+ 2014\s0
+and \s-1ISO \*(C+ 2017.\s0  This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wcast\-qual\fR" 4
+.IX Item "-Wcast-qual"
+Warn whenever a pointer is cast so as to remove a type qualifier from
+the target type.  For example, warn if a \f(CW\*(C`const char *\*(C'\fR is cast
+to an ordinary \f(CW\*(C`char *\*(C'\fR.
+.Sp
+Also warn when making a cast that introduces a type qualifier in an
+unsafe way.  For example, casting \f(CW\*(C`char **\*(C'\fR to \f(CW\*(C`const char **\*(C'\fR
+is unsafe, as in this example:
+.Sp
+.Vb 6
+\&          /* p is char ** value.  */
+\&          const char **q = (const char **) p;
+\&          /* Assignment of readonly string to const char * is OK.  */
+\&          *q = "string";
+\&          /* Now char** pointer points to read\-only memory.  */
+\&          **p = \*(Aqb\*(Aq;
+.Ve
+.IP "\fB\-Wcast\-align\fR" 4
+.IX Item "-Wcast-align"
+Warn whenever a pointer is cast such that the required alignment of the
+target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
+an \f(CW\*(C`int *\*(C'\fR on machines where integers can only be accessed at
+two\- or four-byte boundaries.
+.IP "\fB\-Wcast\-align=strict\fR" 4
+.IX Item "-Wcast-align=strict"
+Warn whenever a pointer is cast such that the required alignment of the
+target is increased.  For example, warn if a \f(CW\*(C`char *\*(C'\fR is cast to
+an \f(CW\*(C`int *\*(C'\fR regardless of the target machine.
+.IP "\fB\-Wcast\-function\-type\fR" 4
+.IX Item "-Wcast-function-type"
+Warn when a function pointer is cast to an incompatible function pointer.
+In a cast involving function types with a variable argument list only
+the types of initial arguments that are provided are considered.
+Any parameter of pointer-type matches any other pointer-type.  Any benign
+differences in integral types are ignored, like \f(CW\*(C`int\*(C'\fR vs. \f(CW\*(C`long\*(C'\fR
+on \s-1ILP32\s0 targets.  Likewise type qualifiers are ignored.  The function
+type \f(CW\*(C`void (*) (void)\*(C'\fR is special and matches everything, which can
+be used to suppress this warning.
+In a cast involving pointer to member types this warning warns whenever
+the type cast is changing the pointer to member type.
+This warning is enabled by \fB\-Wextra\fR.
+.IP "\fB\-Wwrite\-strings\fR" 4
+.IX Item "-Wwrite-strings"
+When compiling C, give string constants the type \f(CW\*(C`const
+char[\f(CIlength\f(CW]\*(C'\fR so that copying the address of one into a
+non\-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR pointer produces a warning.  These
+warnings help you find at compile time code that can try to write
+into a string constant, but only if you have been very careful about
+using \f(CW\*(C`const\*(C'\fR in declarations and prototypes.  Otherwise, it is
+just a nuisance. This is why we did not make \fB\-Wall\fR request
+these warnings.
+.Sp
+When compiling \*(C+, warn about the deprecated conversion from string
+literals to \f(CW\*(C`char *\*(C'\fR.  This warning is enabled by default for \*(C+
+programs.
+.IP "\fB\-Wcatch\-value\fR" 4
+.IX Item "-Wcatch-value"
+.PD 0
+.IP "\fB\-Wcatch\-value=\fR\fIn\fR\fB \fR(\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wcatch-value=n ( and Objective- only)"
+.PD
+Warn about catch handlers that do not catch via reference.
+With \fB\-Wcatch\-value=1\fR (or \fB\-Wcatch\-value\fR for short)
+warn about polymorphic class types that are caught by value.
+With \fB\-Wcatch\-value=2\fR warn about all class types that are caught
+by value. With \fB\-Wcatch\-value=3\fR warn about all types that are
+not caught by reference. \fB\-Wcatch\-value\fR is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wclobbered\fR" 4
+.IX Item "-Wclobbered"
+Warn for variables that might be changed by \f(CW\*(C`longjmp\*(C'\fR or
+\&\f(CW\*(C`vfork\*(C'\fR.  This warning is also enabled by \fB\-Wextra\fR.
+.IP "\fB\-Wconditionally\-supported\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wconditionally-supported ( and Objective- only)"
+Warn for conditionally-supported (\*(C+11 [intro.defs]) constructs.
+.IP "\fB\-Wconversion\fR" 4
+.IX Item "-Wconversion"
+Warn for implicit conversions that may alter a value. This includes
+conversions between real and integer, like \f(CW\*(C`abs (x)\*(C'\fR when
+\&\f(CW\*(C`x\*(C'\fR is \f(CW\*(C`double\*(C'\fR; conversions between signed and unsigned,
+like \f(CW\*(C`unsigned ui = \-1\*(C'\fR; and conversions to smaller types, like
+\&\f(CW\*(C`sqrtf (M_PI)\*(C'\fR. Do not warn for explicit casts like \f(CW\*(C`abs
+((int) x)\*(C'\fR and \f(CW\*(C`ui = (unsigned) \-1\*(C'\fR, or if the value is not
+changed by the conversion like in \f(CW\*(C`abs (2.0)\*(C'\fR.  Warnings about
+conversions between signed and unsigned integers can be disabled by
+using \fB\-Wno\-sign\-conversion\fR.
+.Sp
+For \*(C+, also warn for confusing overload resolution for user-defined
+conversions; and conversions that never use a type conversion
+operator: conversions to \f(CW\*(C`void\*(C'\fR, the same type, a base class or a
+reference to them. Warnings about conversions between signed and
+unsigned integers are disabled by default in \*(C+ unless
+\&\fB\-Wsign\-conversion\fR is explicitly enabled.
+.IP "\fB\-Wno\-conversion\-null\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-conversion-null ( and Objective- only)"
+Do not warn for conversions between \f(CW\*(C`NULL\*(C'\fR and non-pointer
+types. \fB\-Wconversion\-null\fR is enabled by default.
+.IP "\fB\-Wzero\-as\-null\-pointer\-constant\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wzero-as-null-pointer-constant ( and Objective- only)"
+Warn when a literal \fB0\fR is used as null pointer constant.  This can
+be useful to facilitate the conversion to \f(CW\*(C`nullptr\*(C'\fR in \*(C+11.
+.IP "\fB\-Wsubobject\-linkage\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wsubobject-linkage ( and Objective- only)"
+Warn if a class type has a base or a field whose type uses the anonymous
+namespace or depends on a type with no linkage.  If a type A depends on
+a type B with no or internal linkage, defining it in multiple
+translation units would be an \s-1ODR\s0 violation because the meaning of B
+is different in each translation unit.  If A only appears in a single
+translation unit, the best way to silence the warning is to give it
+internal linkage by putting it in an anonymous namespace as well.  The
+compiler doesn't give this warning for types defined in the main .C
+file, as those are unlikely to have multiple definitions.
+\&\fB\-Wsubobject\-linkage\fR is enabled by default.
+.IP "\fB\-Wdangling\-else\fR" 4
+.IX Item "-Wdangling-else"
+Warn about constructions where there may be confusion to which
+\&\f(CW\*(C`if\*(C'\fR statement an \f(CW\*(C`else\*(C'\fR branch belongs.  Here is an example of
+such a case:
+.Sp
+.Vb 7
+\&        {
+\&          if (a)
+\&            if (b)
+\&              foo ();
+\&          else
+\&            bar ();
+\&        }
+.Ve
+.Sp
+In C/\*(C+, every \f(CW\*(C`else\*(C'\fR branch belongs to the innermost possible
+\&\f(CW\*(C`if\*(C'\fR statement, which in this example is \f(CW\*(C`if (b)\*(C'\fR.  This is
+often not what the programmer expected, as illustrated in the above
+example by indentation the programmer chose.  When there is the
+potential for this confusion, \s-1GCC\s0 issues a warning when this flag
+is specified.  To eliminate the warning, add explicit braces around
+the innermost \f(CW\*(C`if\*(C'\fR statement so there is no way the \f(CW\*(C`else\*(C'\fR
+can belong to the enclosing \f(CW\*(C`if\*(C'\fR.  The resulting code
+looks like this:
+.Sp
+.Vb 9
+\&        {
+\&          if (a)
+\&            {
+\&              if (b)
+\&                foo ();
+\&              else
+\&                bar ();
+\&            }
+\&        }
+.Ve
+.Sp
+This warning is enabled by \fB\-Wparentheses\fR.
+.IP "\fB\-Wdate\-time\fR" 4
+.IX Item "-Wdate-time"
+Warn when macros \f(CW\*(C`_\|_TIME_\|_\*(C'\fR, \f(CW\*(C`_\|_DATE_\|_\*(C'\fR or \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR
+are encountered as they might prevent bit-wise-identical reproducible
+compilations.
+.IP "\fB\-Wdelete\-incomplete\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wdelete-incomplete ( and Objective- only)"
+Warn when deleting a pointer to incomplete type, which may cause
+undefined behavior at runtime.  This warning is enabled by default.
+.IP "\fB\-Wuseless\-cast\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wuseless-cast ( and Objective- only)"
+Warn when an expression is casted to its own type.
+.IP "\fB\-Wempty\-body\fR" 4
+.IX Item "-Wempty-body"
+Warn if an empty body occurs in an \f(CW\*(C`if\*(C'\fR, \f(CW\*(C`else\*(C'\fR or \f(CW\*(C`do
+while\*(C'\fR statement.  This warning is also enabled by \fB\-Wextra\fR.
+.IP "\fB\-Wenum\-compare\fR" 4
+.IX Item "-Wenum-compare"
+Warn about a comparison between values of different enumerated types.
+In \*(C+ enumerated type mismatches in conditional expressions are also
+diagnosed and the warning is enabled by default.  In C this warning is 
+enabled by \fB\-Wall\fR.
+.IP "\fB\-Wextra\-semi\fR (\*(C+, Objective\-\*(C+ only)" 4
+.IX Item "-Wextra-semi (, Objective- only)"
+Warn about redundant semicolon after in-class function definition.
+.IP "\fB\-Wjump\-misses\-init\fR (C, Objective-C only)" 4
+.IX Item "-Wjump-misses-init (C, Objective-C only)"
+Warn if a \f(CW\*(C`goto\*(C'\fR statement or a \f(CW\*(C`switch\*(C'\fR statement jumps
+forward across the initialization of a variable, or jumps backward to a
+label after the variable has been initialized.  This only warns about
+variables that are initialized when they are declared.  This warning is
+only supported for C and Objective-C; in \*(C+ this sort of branch is an
+error in any case.
+.Sp
+\&\fB\-Wjump\-misses\-init\fR is included in \fB\-Wc++\-compat\fR.  It
+can be disabled with the \fB\-Wno\-jump\-misses\-init\fR option.
+.IP "\fB\-Wsign\-compare\fR" 4
+.IX Item "-Wsign-compare"
+Warn when a comparison between signed and unsigned values could produce
+an incorrect result when the signed value is converted to unsigned.
+In \*(C+, this warning is also enabled by \fB\-Wall\fR.  In C, it is
+also enabled by \fB\-Wextra\fR.
+.IP "\fB\-Wsign\-conversion\fR" 4
+.IX Item "-Wsign-conversion"
+Warn for implicit conversions that may change the sign of an integer
+value, like assigning a signed integer expression to an unsigned
+integer variable. An explicit cast silences the warning. In C, this
+option is enabled also by \fB\-Wconversion\fR.
+.IP "\fB\-Wfloat\-conversion\fR" 4
+.IX Item "-Wfloat-conversion"
+Warn for implicit conversions that reduce the precision of a real value.
+This includes conversions from real to integer, and from higher precision
+real to lower precision real values.  This option is also enabled by
+\&\fB\-Wconversion\fR.
+.IP "\fB\-Wno\-scalar\-storage\-order\fR" 4
+.IX Item "-Wno-scalar-storage-order"
+Do not warn on suspicious constructs involving reverse scalar storage order.
+.IP "\fB\-Wsized\-deallocation\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wsized-deallocation ( and Objective- only)"
+Warn about a definition of an unsized deallocation function
+.Sp
+.Vb 2
+\&        void operator delete (void *) noexcept;
+\&        void operator delete[] (void *) noexcept;
+.Ve
+.Sp
+without a definition of the corresponding sized deallocation function
+.Sp
+.Vb 2
+\&        void operator delete (void *, std::size_t) noexcept;
+\&        void operator delete[] (void *, std::size_t) noexcept;
+.Ve
+.Sp
+or vice versa.  Enabled by \fB\-Wextra\fR along with
+\&\fB\-fsized\-deallocation\fR.
+.IP "\fB\-Wsizeof\-pointer\-div\fR" 4
+.IX Item "-Wsizeof-pointer-div"
+Warn for suspicious divisions of two sizeof expressions that divide
+the pointer size by the element size, which is the usual way to compute
+the array size but won't work out correctly with pointers.  This warning
+warns e.g. about \f(CW\*(C`sizeof (ptr) / sizeof (ptr[0])\*(C'\fR if \f(CW\*(C`ptr\*(C'\fR is
+not an array, but a pointer.  This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wsizeof\-pointer\-memaccess\fR" 4
+.IX Item "-Wsizeof-pointer-memaccess"
+Warn for suspicious length parameters to certain string and memory built-in
+functions if the argument uses \f(CW\*(C`sizeof\*(C'\fR.  This warning triggers for
+example for \f(CW\*(C`memset (ptr, 0, sizeof (ptr));\*(C'\fR if \f(CW\*(C`ptr\*(C'\fR is not
+an array, but a pointer, and suggests a possible fix, or about
+\&\f(CW\*(C`memcpy (&foo, ptr, sizeof (&foo));\*(C'\fR.  \fB\-Wsizeof\-pointer\-memaccess\fR
+also warns about calls to bounded string copy functions like \f(CW\*(C`strncat\*(C'\fR
+or \f(CW\*(C`strncpy\*(C'\fR that specify as the bound a \f(CW\*(C`sizeof\*(C'\fR expression of
+the source array.  For example, in the following function the call to
+\&\f(CW\*(C`strncat\*(C'\fR specifies the size of the source string as the bound.  That
+is almost certainly a mistake and so the call is diagnosed.
+.Sp
+.Vb 7
+\&        void make_file (const char *name)
+\&        {
+\&          char path[PATH_MAX];
+\&          strncpy (path, name, sizeof path \- 1);
+\&          strncat (path, ".text", sizeof ".text");
+\&          ...
+\&        }
+.Ve
+.Sp
+The \fB\-Wsizeof\-pointer\-memaccess\fR option is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wsizeof\-array\-argument\fR" 4
+.IX Item "-Wsizeof-array-argument"
+Warn when the \f(CW\*(C`sizeof\*(C'\fR operator is applied to a parameter that is
+declared as an array in a function definition.  This warning is enabled by
+default for C and \*(C+ programs.
+.IP "\fB\-Wmemset\-elt\-size\fR" 4
+.IX Item "-Wmemset-elt-size"
+Warn for suspicious calls to the \f(CW\*(C`memset\*(C'\fR built-in function, if the
+first argument references an array, and the third argument is a number
+equal to the number of elements, but not equal to the size of the array
+in memory.  This indicates that the user has omitted a multiplication by
+the element size.  This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wmemset\-transposed\-args\fR" 4
+.IX Item "-Wmemset-transposed-args"
+Warn for suspicious calls to the \f(CW\*(C`memset\*(C'\fR built-in function where
+the second argument is not zero and the third argument is zero.  For
+example, the call \f(CW\*(C`memset (buf, sizeof buf, 0)\*(C'\fR is diagnosed because
+\&\f(CW\*(C`memset (buf, 0, sizeof buf)\*(C'\fR was meant instead.  The diagnostic
+is only emitted if the third argument is a literal zero.  Otherwise, if
+it is an expression that is folded to zero, or a cast of zero to some
+type, it is far less likely that the arguments have been mistakenly
+transposed and no warning is emitted.  This warning is enabled
+by \fB\-Wall\fR.
+.IP "\fB\-Waddress\fR" 4
+.IX Item "-Waddress"
+Warn about suspicious uses of memory addresses. These include using
+the address of a function in a conditional expression, such as
+\&\f(CW\*(C`void func(void); if (func)\*(C'\fR, and comparisons against the memory
+address of a string literal, such as \f(CW\*(C`if (x == "abc")\*(C'\fR.  Such
+uses typically indicate a programmer error: the address of a function
+always evaluates to true, so their use in a conditional usually
+indicate that the programmer forgot the parentheses in a function
+call; and comparisons against string literals result in unspecified
+behavior and are not portable in C, so they usually indicate that the
+programmer intended to use \f(CW\*(C`strcmp\*(C'\fR.  This warning is enabled by
+\&\fB\-Wall\fR.
+.IP "\fB\-Waddress\-of\-packed\-member\fR" 4
+.IX Item "-Waddress-of-packed-member"
+Warn when the address of packed member of struct or union is taken,
+which usually results in an unaligned pointer value.  This is
+enabled by default.
+.IP "\fB\-Wlogical\-op\fR" 4
+.IX Item "-Wlogical-op"
+Warn about suspicious uses of logical operators in expressions.
+This includes using logical operators in contexts where a
+bit-wise operator is likely to be expected.  Also warns when
+the operands of a logical operator are the same:
+.Sp
+.Vb 2
+\&        extern int a;
+\&        if (a < 0 && a < 0) { ... }
+.Ve
+.IP "\fB\-Wlogical\-not\-parentheses\fR" 4
+.IX Item "-Wlogical-not-parentheses"
+Warn about logical not used on the left hand side operand of a comparison.
+This option does not warn if the right operand is considered to be a boolean
+expression.  Its purpose is to detect suspicious code like the following:
+.Sp
+.Vb 3
+\&        int a;
+\&        ...
+\&        if (!a > 1) { ... }
+.Ve
+.Sp
+It is possible to suppress the warning by wrapping the \s-1LHS\s0 into
+parentheses:
+.Sp
+.Vb 1
+\&        if ((!a) > 1) { ... }
+.Ve
+.Sp
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Waggregate\-return\fR" 4
+.IX Item "-Waggregate-return"
+Warn if any functions that return structures or unions are defined or
+called.  (In languages where you can return an array, this also elicits
+a warning.)
+.IP "\fB\-Wno\-aggressive\-loop\-optimizations\fR" 4
+.IX Item "-Wno-aggressive-loop-optimizations"
+Warn if in a loop with constant number of iterations the compiler detects
+undefined behavior in some statement during one or more of the iterations.
+.IP "\fB\-Wno\-attributes\fR" 4
+.IX Item "-Wno-attributes"
+Do not warn if an unexpected \f(CW\*(C`_\|_attribute_\|_\*(C'\fR is used, such as
+unrecognized attributes, function attributes applied to variables,
+etc.  This does not stop errors for incorrect use of supported
+attributes.
+.IP "\fB\-Wno\-builtin\-declaration\-mismatch\fR" 4
+.IX Item "-Wno-builtin-declaration-mismatch"
+Warn if a built-in function is declared with an incompatible signature
+or as a non-function, or when a built-in function declared with a type
+that does not include a prototype is called with arguments whose promoted
+types do not match those expected by the function.  When \fB\-Wextra\fR
+is specified, also warn when a built-in function that takes arguments is
+declared without a prototype.  The \fB\-Wno\-builtin\-declaration\-mismatch\fR
+warning is enabled by default.  To avoid the warning include the appropriate
+header to bring the prototypes of built-in functions into scope.
+.Sp
+For example, the call to \f(CW\*(C`memset\*(C'\fR below is diagnosed by the warning
+because the function expects a value of type \f(CW\*(C`size_t\*(C'\fR as its argument
+but the type of \f(CW32\fR is \f(CW\*(C`int\*(C'\fR.  With \fB\-Wextra\fR,
+the declaration of the function is diagnosed as well.
+.Sp
+.Vb 5
+\&        extern void* memset ();
+\&        void f (void *d)
+\&        {
+\&          memset (d, \*(Aq\e0\*(Aq, 32);
+\&        }
+.Ve
+.IP "\fB\-Wno\-builtin\-macro\-redefined\fR" 4
+.IX Item "-Wno-builtin-macro-redefined"
+Do not warn if certain built-in macros are redefined.  This suppresses
+warnings for redefinition of \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR, \f(CW\*(C`_\|_TIME_\|_\*(C'\fR,
+\&\f(CW\*(C`_\|_DATE_\|_\*(C'\fR, \f(CW\*(C`_\|_FILE_\|_\*(C'\fR, and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR.
+.IP "\fB\-Wstrict\-prototypes\fR (C and Objective-C only)" 4
+.IX Item "-Wstrict-prototypes (C and Objective-C only)"
+Warn if a function is declared or defined without specifying the
+argument types.  (An old-style function definition is permitted without
+a warning if preceded by a declaration that specifies the argument
+types.)
+.IP "\fB\-Wold\-style\-declaration\fR (C and Objective-C only)" 4
+.IX Item "-Wold-style-declaration (C and Objective-C only)"
+Warn for obsolescent usages, according to the C Standard, in a
+declaration. For example, warn if storage-class specifiers like
+\&\f(CW\*(C`static\*(C'\fR are not the first things in a declaration.  This warning
+is also enabled by \fB\-Wextra\fR.
+.IP "\fB\-Wold\-style\-definition\fR (C and Objective-C only)" 4
+.IX Item "-Wold-style-definition (C and Objective-C only)"
+Warn if an old-style function definition is used.  A warning is given
+even if there is a previous prototype.
+.IP "\fB\-Wmissing\-parameter\-type\fR (C and Objective-C only)" 4
+.IX Item "-Wmissing-parameter-type (C and Objective-C only)"
+A function parameter is declared without a type specifier in K&R\-style
+functions:
+.Sp
+.Vb 1
+\&        void foo(bar) { }
+.Ve
+.Sp
+This warning is also enabled by \fB\-Wextra\fR.
+.IP "\fB\-Wmissing\-prototypes\fR (C and Objective-C only)" 4
+.IX Item "-Wmissing-prototypes (C and Objective-C only)"
+Warn if a global function is defined without a previous prototype
+declaration.  This warning is issued even if the definition itself
+provides a prototype.  Use this option to detect global functions
+that do not have a matching prototype declaration in a header file.
+This option is not valid for \*(C+ because all function declarations
+provide prototypes and a non-matching declaration declares an
+overload rather than conflict with an earlier declaration.
+Use \fB\-Wmissing\-declarations\fR to detect missing declarations in \*(C+.
+.IP "\fB\-Wmissing\-declarations\fR" 4
+.IX Item "-Wmissing-declarations"
+Warn if a global function is defined without a previous declaration.
+Do so even if the definition itself provides a prototype.
+Use this option to detect global functions that are not declared in
+header files.  In C, no warnings are issued for functions with previous
+non-prototype declarations; use \fB\-Wmissing\-prototypes\fR to detect
+missing prototypes.  In \*(C+, no warnings are issued for function templates,
+or for inline functions, or for functions in anonymous namespaces.
+.IP "\fB\-Wmissing\-field\-initializers\fR" 4
+.IX Item "-Wmissing-field-initializers"
+Warn if a structure's initializer has some fields missing.  For
+example, the following code causes such a warning, because
+\&\f(CW\*(C`x.h\*(C'\fR is implicitly zero:
+.Sp
+.Vb 2
+\&        struct s { int f, g, h; };
+\&        struct s x = { 3, 4 };
+.Ve
+.Sp
+This option does not warn about designated initializers, so the following
+modification does not trigger a warning:
+.Sp
+.Vb 2
+\&        struct s { int f, g, h; };
+\&        struct s x = { .f = 3, .g = 4 };
+.Ve
+.Sp
+In C this option does not warn about the universal zero initializer
+\&\fB{ 0 }\fR:
+.Sp
+.Vb 2
+\&        struct s { int f, g, h; };
+\&        struct s x = { 0 };
+.Ve
+.Sp
+Likewise, in \*(C+ this option does not warn about the empty { }
+initializer, for example:
+.Sp
+.Vb 2
+\&        struct s { int f, g, h; };
+\&        s x = { };
+.Ve
+.Sp
+This warning is included in \fB\-Wextra\fR.  To get other \fB\-Wextra\fR
+warnings without this one, use \fB\-Wextra \-Wno\-missing\-field\-initializers\fR.
+.IP "\fB\-Wno\-multichar\fR" 4
+.IX Item "-Wno-multichar"
+Do not warn if a multicharacter constant (\fB'\s-1FOOF\s0'\fR) is used.
+Usually they indicate a typo in the user's code, as they have
+implementation-defined values, and should not be used in portable code.
+.IP "\fB\-Wnormalized=\fR[\fBnone\fR|\fBid\fR|\fBnfc\fR|\fBnfkc\fR]" 4
+.IX Item "-Wnormalized=[none|id|nfc|nfkc]"
+In \s-1ISO C\s0 and \s-1ISO \*(C+,\s0 two identifiers are different if they are
+different sequences of characters.  However, sometimes when characters
+outside the basic \s-1ASCII\s0 character set are used, you can have two
+different character sequences that look the same.  To avoid confusion,
+the \s-1ISO 10646\s0 standard sets out some \fInormalization rules\fR which
+when applied ensure that two sequences that look the same are turned into
+the same sequence.  \s-1GCC\s0 can warn you if you are using identifiers that
+have not been normalized; this option controls that warning.
+.Sp
+There are four levels of warning supported by \s-1GCC.\s0  The default is
+\&\fB\-Wnormalized=nfc\fR, which warns about any identifier that is
+not in the \s-1ISO 10646 \*(L"C\*(R"\s0 normalized form, \fI\s-1NFC\s0\fR.  \s-1NFC\s0 is the
+recommended form for most uses.  It is equivalent to
+\&\fB\-Wnormalized\fR.
+.Sp
+Unfortunately, there are some characters allowed in identifiers by
+\&\s-1ISO C\s0 and \s-1ISO \*(C+\s0 that, when turned into \s-1NFC,\s0 are not allowed in 
+identifiers.  That is, there's no way to use these symbols in portable
+\&\s-1ISO C\s0 or \*(C+ and have all your identifiers in \s-1NFC.\s0
+\&\fB\-Wnormalized=id\fR suppresses the warning for these characters.
+It is hoped that future versions of the standards involved will correct
+this, which is why this option is not the default.
+.Sp
+You can switch the warning off for all characters by writing
+\&\fB\-Wnormalized=none\fR or \fB\-Wno\-normalized\fR.  You should
+only do this if you are using some other normalization scheme (like
+\&\*(L"D\*(R"), because otherwise you can easily create bugs that are
+literally impossible to see.
+.Sp
+Some characters in \s-1ISO 10646\s0 have distinct meanings but look identical
+in some fonts or display methodologies, especially once formatting has
+been applied.  For instance \f(CW\*(C`\eu207F\*(C'\fR, \*(L"\s-1SUPERSCRIPT LATIN SMALL
+LETTER N\*(R",\s0 displays just like a regular \f(CW\*(C`n\*(C'\fR that has been
+placed in a superscript.  \s-1ISO 10646\s0 defines the \fI\s-1NFKC\s0\fR
+normalization scheme to convert all these into a standard form as
+well, and \s-1GCC\s0 warns if your code is not in \s-1NFKC\s0 if you use
+\&\fB\-Wnormalized=nfkc\fR.  This warning is comparable to warning
+about every identifier that contains the letter O because it might be
+confused with the digit 0, and so is not the default, but may be
+useful as a local coding convention if the programming environment 
+cannot be fixed to display these characters distinctly.
+.IP "\fB\-Wno\-attribute\-warning\fR" 4
+.IX Item "-Wno-attribute-warning"
+Do not warn about usage of functions
+declared with \f(CW\*(C`warning\*(C'\fR attribute.  By default, this warning is
+enabled.  \fB\-Wno\-attribute\-warning\fR can be used to disable the
+warning or \fB\-Wno\-error=attribute\-warning\fR can be used to
+disable the error when compiled with \fB\-Werror\fR flag.
+.IP "\fB\-Wno\-deprecated\fR" 4
+.IX Item "-Wno-deprecated"
+Do not warn about usage of deprecated features.
+.IP "\fB\-Wno\-deprecated\-declarations\fR" 4
+.IX Item "-Wno-deprecated-declarations"
+Do not warn about uses of functions,
+variables, and types marked as deprecated by using the \f(CW\*(C`deprecated\*(C'\fR
+attribute.
+.IP "\fB\-Wno\-overflow\fR" 4
+.IX Item "-Wno-overflow"
+Do not warn about compile-time overflow in constant expressions.
+.IP "\fB\-Wno\-odr\fR" 4
+.IX Item "-Wno-odr"
+Warn about One Definition Rule violations during link-time optimization.
+Requires \fB\-flto\-odr\-type\-merging\fR to be enabled.  Enabled by default.
+.IP "\fB\-Wopenmp\-simd\fR" 4
+.IX Item "-Wopenmp-simd"
+Warn if the vectorizer cost model overrides the OpenMP
+simd directive set by user.  The \fB\-fsimd\-cost\-model=unlimited\fR
+option can be used to relax the cost model.
+.IP "\fB\-Woverride\-init\fR (C and Objective-C only)" 4
+.IX Item "-Woverride-init (C and Objective-C only)"
+Warn if an initialized field without side effects is overridden when
+using designated initializers.
+.Sp
+This warning is included in \fB\-Wextra\fR.  To get other
+\&\fB\-Wextra\fR warnings without this one, use \fB\-Wextra
+\&\-Wno\-override\-init\fR.
+.IP "\fB\-Woverride\-init\-side\-effects\fR (C and Objective-C only)" 4
+.IX Item "-Woverride-init-side-effects (C and Objective-C only)"
+Warn if an initialized field with side effects is overridden when
+using designated initializers.  This warning is enabled by default.
+.IP "\fB\-Wpacked\fR" 4
+.IX Item "-Wpacked"
+Warn if a structure is given the packed attribute, but the packed
+attribute has no effect on the layout or size of the structure.
+Such structures may be mis-aligned for little benefit.  For
+instance, in this code, the variable \f(CW\*(C`f.x\*(C'\fR in \f(CW\*(C`struct bar\*(C'\fR
+is misaligned even though \f(CW\*(C`struct bar\*(C'\fR does not itself
+have the packed attribute:
+.Sp
+.Vb 8
+\&        struct foo {
+\&          int x;
+\&          char a, b, c, d;
+\&        } _\|_attribute_\|_((packed));
+\&        struct bar {
+\&          char z;
+\&          struct foo f;
+\&        };
+.Ve
+.IP "\fB\-Wpacked\-bitfield\-compat\fR" 4
+.IX Item "-Wpacked-bitfield-compat"
+The 4.1, 4.2 and 4.3 series of \s-1GCC\s0 ignore the \f(CW\*(C`packed\*(C'\fR attribute
+on bit-fields of type \f(CW\*(C`char\*(C'\fR.  This has been fixed in \s-1GCC 4.4\s0 but
+the change can lead to differences in the structure layout.  \s-1GCC\s0
+informs you when the offset of such a field has changed in \s-1GCC 4.4.\s0
+For example there is no longer a 4\-bit padding between field \f(CW\*(C`a\*(C'\fR
+and \f(CW\*(C`b\*(C'\fR in this structure:
+.Sp
+.Vb 5
+\&        struct foo
+\&        {
+\&          char a:4;
+\&          char b:8;
+\&        } _\|_attribute_\|_ ((packed));
+.Ve
+.Sp
+This warning is enabled by default.  Use
+\&\fB\-Wno\-packed\-bitfield\-compat\fR to disable this warning.
+.IP "\fB\-Wpacked\-not\-aligned\fR (C, \*(C+, Objective-C and Objective\-\*(C+ only)" 4
+.IX Item "-Wpacked-not-aligned (C, , Objective-C and Objective- only)"
+Warn if a structure field with explicitly specified alignment in a
+packed struct or union is misaligned.  For example, a warning will
+be issued on \f(CW\*(C`struct S\*(C'\fR, like, \f(CW\*(C`warning: alignment 1 of
+\&\*(Aqstruct S\*(Aq is less than 8\*(C'\fR, in this code:
+.Sp
+.Vb 4
+\&        struct _\|_attribute_\|_ ((aligned (8))) S8 { char a[8]; };
+\&        struct _\|_attribute_\|_ ((packed)) S {
+\&          struct S8 s8;
+\&        };
+.Ve
+.Sp
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wpadded\fR" 4
+.IX Item "-Wpadded"
+Warn if padding is included in a structure, either to align an element
+of the structure or to align the whole structure.  Sometimes when this
+happens it is possible to rearrange the fields of the structure to
+reduce the padding and so make the structure smaller.
+.IP "\fB\-Wredundant\-decls\fR" 4
+.IX Item "-Wredundant-decls"
+Warn if anything is declared more than once in the same scope, even in
+cases where multiple declaration is valid and changes nothing.
+.IP "\fB\-Wno\-restrict\fR" 4
+.IX Item "-Wno-restrict"
+Warn when an object referenced by a \f(CW\*(C`restrict\*(C'\fR\-qualified parameter
+(or, in \*(C+, a \f(CW\*(C`_\|_restrict\*(C'\fR\-qualified parameter) is aliased by another
+argument, or when copies between such objects overlap.  For example,
+the call to the \f(CW\*(C`strcpy\*(C'\fR function below attempts to truncate the string
+by replacing its initial characters with the last four.  However, because
+the call writes the terminating \s-1NUL\s0 into \f(CW\*(C`a[4]\*(C'\fR, the copies overlap and
+the call is diagnosed.
+.Sp
+.Vb 6
+\&        void foo (void)
+\&        {
+\&          char a[] = "abcd1234";
+\&          strcpy (a, a + 4);
+\&          ...
+\&        }
+.Ve
+.Sp
+The \fB\-Wrestrict\fR option detects some instances of simple overlap
+even without optimization but works best at \fB\-O2\fR and above.  It
+is included in \fB\-Wall\fR.
+.IP "\fB\-Wnested\-externs\fR (C and Objective-C only)" 4
+.IX Item "-Wnested-externs (C and Objective-C only)"
+Warn if an \f(CW\*(C`extern\*(C'\fR declaration is encountered within a function.
+.IP "\fB\-Wno\-inherited\-variadic\-ctor\fR" 4
+.IX Item "-Wno-inherited-variadic-ctor"
+Suppress warnings about use of \*(C+11 inheriting constructors when the
+base class inherited from has a C variadic constructor; the warning is
+on by default because the ellipsis is not inherited.
+.IP "\fB\-Winline\fR" 4
+.IX Item "-Winline"
+Warn if a function that is declared as inline cannot be inlined.
+Even with this option, the compiler does not warn about failures to
+inline functions declared in system headers.
+.Sp
+The compiler uses a variety of heuristics to determine whether or not
+to inline a function.  For example, the compiler takes into account
+the size of the function being inlined and the amount of inlining
+that has already been done in the current function.  Therefore,
+seemingly insignificant changes in the source program can cause the
+warnings produced by \fB\-Winline\fR to appear or disappear.
+.IP "\fB\-Wno\-invalid\-offsetof\fR (\*(C+ and Objective\-\*(C+ only)" 4
+.IX Item "-Wno-invalid-offsetof ( and Objective- only)"
+Suppress warnings from applying the \f(CW\*(C`offsetof\*(C'\fR macro to a non-POD
+type.  According to the 2014 \s-1ISO \*(C+\s0 standard, applying \f(CW\*(C`offsetof\*(C'\fR
+to a non-standard-layout type is undefined.  In existing \*(C+ implementations,
+however, \f(CW\*(C`offsetof\*(C'\fR typically gives meaningful results.
+This flag is for users who are aware that they are
+writing nonportable code and who have deliberately chosen to ignore the
+warning about it.
+.Sp
+The restrictions on \f(CW\*(C`offsetof\*(C'\fR may be relaxed in a future version
+of the \*(C+ standard.
+.IP "\fB\-Wint\-in\-bool\-context\fR" 4
+.IX Item "-Wint-in-bool-context"
+Warn for suspicious use of integer values where boolean values are expected,
+such as conditional expressions (?:) using non-boolean integer constants in
+boolean context, like \f(CW\*(C`if (a <= b ? 2 : 3)\*(C'\fR.  Or left shifting of signed
+integers in boolean context, like \f(CW\*(C`for (a = 0; 1 << a; a++);\*(C'\fR.  Likewise
+for all kinds of multiplications regardless of the data type.
+This warning is enabled by \fB\-Wall\fR.
+.IP "\fB\-Wno\-int\-to\-pointer\-cast\fR" 4
+.IX Item "-Wno-int-to-pointer-cast"
+Suppress warnings from casts to pointer type of an integer of a
+different size. In \*(C+, casting to a pointer type of smaller size is
+an error. \fBWint-to-pointer-cast\fR is enabled by default.
+.IP "\fB\-Wno\-pointer\-to\-int\-cast\fR (C and Objective-C only)" 4
+.IX Item "-Wno-pointer-to-int-cast (C and Objective-C only)"
+Suppress warnings from casts from a pointer to an integer type of a
+different size.
+.IP "\fB\-Winvalid\-pch\fR" 4
+.IX Item "-Winvalid-pch"
+Warn if a precompiled header is found in
+the search path but cannot be used.
+.IP "\fB\-Wlong\-long\fR" 4
+.IX Item "-Wlong-long"
+Warn if \f(CW\*(C`long long\*(C'\fR type is used.  This is enabled by either
+\&\fB\-Wpedantic\fR or \fB\-Wtraditional\fR in \s-1ISO C90\s0 and \*(C+98
+modes.  To inhibit the warning messages, use \fB\-Wno\-long\-long\fR.
+.IP "\fB\-Wvariadic\-macros\fR" 4
+.IX Item "-Wvariadic-macros"
+Warn if variadic macros are used in \s-1ISO C90\s0 mode, or if the \s-1GNU\s0
+alternate syntax is used in \s-1ISO C99\s0 mode.  This is enabled by either
+\&\fB\-Wpedantic\fR or \fB\-Wtraditional\fR.  To inhibit the warning
+messages, use \fB\-Wno\-variadic\-macros\fR.
+.IP "\fB\-Wvarargs\fR" 4
+.IX Item "-Wvarargs"
+Warn upon questionable usage of the macros used to handle variable
+arguments like \f(CW\*(C`va_start\*(C'\fR.  This is default.  To inhibit the
+warning messages, use \fB\-Wno\-varargs\fR.
+.IP "\fB\-Wvector\-operation\-performance\fR" 4
+.IX Item "-Wvector-operation-performance"
+Warn if vector operation is not implemented via \s-1SIMD\s0 capabilities of the
+architecture.  Mainly useful for the performance tuning.
+Vector operation can be implemented \f(CW\*(C`piecewise\*(C'\fR, which means that the
+scalar operation is performed on every vector element; 
+\&\f(CW\*(C`in parallel\*(C'\fR, which means that the vector operation is implemented
+using scalars of wider type, which normally is more performance efficient;
+and \f(CW\*(C`as a single scalar\*(C'\fR, which means that vector fits into a
+scalar type.
+.IP "\fB\-Wno\-virtual\-move\-assign\fR" 4
+.IX Item "-Wno-virtual-move-assign"
+Suppress warnings about inheriting from a virtual base with a
+non-trivial \*(C+11 move assignment operator.  This is dangerous because
+if the virtual base is reachable along more than one path, it is
+moved multiple times, which can mean both objects end up in the
+moved-from state.  If the move assignment operator is written to avoid
+moving from a moved-from object, this warning can be disabled.
+.IP "\fB\-Wvla\fR" 4
+.IX Item "-Wvla"
+Warn if a variable-length array is used in the code.
+\&\fB\-Wno\-vla\fR prevents the \fB\-Wpedantic\fR warning of
+the variable-length array.
+.IP "\fB\-Wvla\-larger\-than=\fR\fIbyte-size\fR" 4
+.IX Item "-Wvla-larger-than=byte-size"
+If this option is used, the compiler will warn for declarations of
+variable-length arrays whose size is either unbounded, or bounded
+by an argument that allows the array size to exceed \fIbyte-size\fR
+bytes.  This is similar to how \fB\-Walloca\-larger\-than=\fR\fIbyte-size\fR
+works, but with variable-length arrays.
+.Sp
+Note that \s-1GCC\s0 may optimize small variable-length arrays of a known
+value into plain arrays, so this warning may not get triggered for
+such arrays.
+.Sp
+\&\fB\-Wvla\-larger\-than=\fR\fB\s-1PTRDIFF_MAX\s0\fR is enabled by default but
+is typically only effective when \fB\-ftree\-vrp\fR is active (default
+for \fB\-O2\fR and above).
+.Sp
+See also \fB\-Walloca\-larger\-than=\fR\fIbyte-size\fR.
+.IP "\fB\-Wno\-vla\-larger\-than\fR" 4
+.IX Item "-Wno-vla-larger-than"
+Disable \fB\-Wvla\-larger\-than=\fR warnings.  The option is equivalent
+to \fB\-Wvla\-larger\-than=\fR\fB\s-1SIZE_MAX\s0\fR or larger.
+.IP "\fB\-Wvolatile\-register\-var\fR" 4
+.IX Item "-Wvolatile-register-var"
+Warn if a register variable is declared volatile.  The volatile
+modifier does not inhibit all optimizations that may eliminate reads
+and/or writes to register variables.  This warning is enabled by
+\&\fB\-Wall\fR.
+.IP "\fB\-Wdisabled\-optimization\fR" 4
+.IX Item "-Wdisabled-optimization"
+Warn if a requested optimization pass is disabled.  This warning does
+not generally indicate that there is anything wrong with your code; it
+merely indicates that \s-1GCC\s0's optimizers are unable to handle the code
+effectively.  Often, the problem is that your code is too big or too
+complex; \s-1GCC\s0 refuses to optimize programs when the optimization
+itself is likely to take inordinate amounts of time.
+.IP "\fB\-Wpointer\-sign\fR (C and Objective-C only)" 4
+.IX Item "-Wpointer-sign (C and Objective-C only)"
+Warn for pointer argument passing or assignment with different signedness.
+This option is only supported for C and Objective-C.  It is implied by
+\&\fB\-Wall\fR and by \fB\-Wpedantic\fR, which can be disabled with
+\&\fB\-Wno\-pointer\-sign\fR.
+.IP "\fB\-Wstack\-protector\fR" 4
+.IX Item "-Wstack-protector"
+This option is only active when \fB\-fstack\-protector\fR is active.  It
+warns about functions that are not protected against stack smashing.
+.IP "\fB\-Woverlength\-strings\fR" 4
+.IX Item "-Woverlength-strings"
+Warn about string constants that are longer than the \*(L"minimum
+maximum\*(R" length specified in the C standard.  Modern compilers
+generally allow string constants that are much longer than the
+standard's minimum limit, but very portable programs should avoid
+using longer strings.
+.Sp
+The limit applies \fIafter\fR string constant concatenation, and does
+not count the trailing \s-1NUL.\s0  In C90, the limit was 509 characters; in
+C99, it was raised to 4095.  \*(C+98 does not specify a normative
+minimum maximum, so we do not diagnose overlength strings in \*(C+.
+.Sp
+This option is implied by \fB\-Wpedantic\fR, and can be disabled with
+\&\fB\-Wno\-overlength\-strings\fR.
+.IP "\fB\-Wunsuffixed\-float\-constants\fR (C and Objective-C only)" 4
+.IX Item "-Wunsuffixed-float-constants (C and Objective-C only)"
+Issue a warning for any floating constant that does not have
+a suffix.  When used together with \fB\-Wsystem\-headers\fR it
+warns about such constants in system header files.  This can be useful
+when preparing code to use with the \f(CW\*(C`FLOAT_CONST_DECIMAL64\*(C'\fR pragma
+from the decimal floating-point extension to C99.
+.IP "\fB\-Wno\-designated\-init\fR (C and Objective-C only)" 4
+.IX Item "-Wno-designated-init (C and Objective-C only)"
+Suppress warnings when a positional initializer is used to initialize
+a structure that has been marked with the \f(CW\*(C`designated_init\*(C'\fR
+attribute.
+.IP "\fB\-Whsa\fR" 4
+.IX Item "-Whsa"
+Issue a warning when \s-1HSAIL\s0 cannot be emitted for the compiled function or
+OpenMP construct.
+.SS "Options for Debugging Your Program"
+.IX Subsection "Options for Debugging Your Program"
+To tell \s-1GCC\s0 to emit extra information for use by a debugger, in almost 
+all cases you need only to add \fB\-g\fR to your other options.
+.PP
+\&\s-1GCC\s0 allows you to use \fB\-g\fR with
+\&\fB\-O\fR.  The shortcuts taken by optimized code may occasionally
+be surprising: some variables you declared may not exist
+at all; flow of control may briefly move where you did not expect it;
+some statements may not be executed because they compute constant
+results or their values are already at hand; some statements may
+execute in different places because they have been moved out of loops.
+Nevertheless it is possible to debug optimized output.  This makes
+it reasonable to use the optimizer for programs that might have bugs.
+.PP
+If you are not using some other optimization option, consider
+using \fB\-Og\fR with \fB\-g\fR.  
+With no \fB\-O\fR option at all, some compiler passes that collect
+information useful for debugging do not run at all, so that
+\&\fB\-Og\fR may result in a better debugging experience.
+.IP "\fB\-g\fR" 4
+.IX Item "-g"
+Produce debugging information in the operating system's native format
+(stabs, \s-1COFF, XCOFF,\s0 or \s-1DWARF\s0).  \s-1GDB\s0 can work with this debugging
+information.
+.Sp
+On most systems that use stabs format, \fB\-g\fR enables use of extra
+debugging information that only \s-1GDB\s0 can use; this extra information
+makes debugging work better in \s-1GDB\s0 but probably makes other debuggers
+crash or
+refuse to read the program.  If you want to control for certain whether
+to generate the extra information, use \fB\-gstabs+\fR, \fB\-gstabs\fR,
+\&\fB\-gxcoff+\fR, \fB\-gxcoff\fR, or \fB\-gvms\fR (see below).
+.IP "\fB\-ggdb\fR" 4
+.IX Item "-ggdb"
+Produce debugging information for use by \s-1GDB.\s0  This means to use the
+most expressive format available (\s-1DWARF,\s0 stabs, or the native format
+if neither of those are supported), including \s-1GDB\s0 extensions if at all
+possible.
+.IP "\fB\-gdwarf\fR" 4
+.IX Item "-gdwarf"
+.PD 0
+.IP "\fB\-gdwarf\-\fR\fIversion\fR" 4
+.IX Item "-gdwarf-version"
+.PD
+Produce debugging information in \s-1DWARF\s0 format (if that is supported).
+The value of \fIversion\fR may be either 2, 3, 4 or 5; the default version
+for most targets is 4.  \s-1DWARF\s0 Version 5 is only experimental.
+.Sp
+Note that with \s-1DWARF\s0 Version 2, some ports require and always
+use some non-conflicting \s-1DWARF 3\s0 extensions in the unwind tables.
+.Sp
+Version 4 may require \s-1GDB 7.0\s0 and \fB\-fvar\-tracking\-assignments\fR
+for maximum benefit.
+.Sp
+\&\s-1GCC\s0 no longer supports \s-1DWARF\s0 Version 1, which is substantially
+different than Version 2 and later.  For historical reasons, some
+other DWARF-related options such as
+\&\fB\-fno\-dwarf2\-cfi\-asm\fR) retain a reference to \s-1DWARF\s0 Version 2
+in their names, but apply to all currently-supported versions of \s-1DWARF.\s0
+.IP "\fB\-gstabs\fR" 4
+.IX Item "-gstabs"
+Produce debugging information in stabs format (if that is supported),
+without \s-1GDB\s0 extensions.  This is the format used by \s-1DBX\s0 on most \s-1BSD\s0
+systems.  On \s-1MIPS,\s0 Alpha and System V Release 4 systems this option
+produces stabs debugging output that is not understood by \s-1DBX.\s0
+On System V Release 4 systems this option requires the \s-1GNU\s0 assembler.
+.IP "\fB\-gstabs+\fR" 4
+.IX Item "-gstabs+"
+Produce debugging information in stabs format (if that is supported),
+using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
+use of these extensions is likely to make other debuggers crash or
+refuse to read the program.
+.IP "\fB\-gxcoff\fR" 4
+.IX Item "-gxcoff"
+Produce debugging information in \s-1XCOFF\s0 format (if that is supported).
+This is the format used by the \s-1DBX\s0 debugger on \s-1IBM RS/6000\s0 systems.
+.IP "\fB\-gxcoff+\fR" 4
+.IX Item "-gxcoff+"
+Produce debugging information in \s-1XCOFF\s0 format (if that is supported),
+using \s-1GNU\s0 extensions understood only by the \s-1GNU\s0 debugger (\s-1GDB\s0).  The
+use of these extensions is likely to make other debuggers crash or
+refuse to read the program, and may cause assemblers other than the \s-1GNU\s0
+assembler (\s-1GAS\s0) to fail with an error.
+.IP "\fB\-gvms\fR" 4
+.IX Item "-gvms"
+Produce debugging information in Alpha/VMS debug format (if that is
+supported).  This is the format used by \s-1DEBUG\s0 on Alpha/VMS systems.
+.IP "\fB\-g\fR\fIlevel\fR" 4
+.IX Item "-glevel"
+.PD 0
+.IP "\fB\-ggdb\fR\fIlevel\fR" 4
+.IX Item "-ggdblevel"
+.IP "\fB\-gstabs\fR\fIlevel\fR" 4
+.IX Item "-gstabslevel"
+.IP "\fB\-gxcoff\fR\fIlevel\fR" 4
+.IX Item "-gxcofflevel"
+.IP "\fB\-gvms\fR\fIlevel\fR" 4
+.IX Item "-gvmslevel"
+.PD
+Request debugging information and also use \fIlevel\fR to specify how
+much information.  The default level is 2.
+.Sp
+Level 0 produces no debug information at all.  Thus, \fB\-g0\fR negates
+\&\fB\-g\fR.
+.Sp
+Level 1 produces minimal information, enough for making backtraces in
+parts of the program that you don't plan to debug.  This includes
+descriptions of functions and external variables, and line number
+tables, but no information about local variables.
+.Sp
+Level 3 includes extra information, such as all the macro definitions
+present in the program.  Some debuggers support macro expansion when
+you use \fB\-g3\fR.
+.Sp
+If you use multiple \fB\-g\fR options, with or without level numbers,
+the last such option is the one that is effective.
+.Sp
+\&\fB\-gdwarf\fR does not accept a concatenated debug level, to avoid
+confusion with \fB\-gdwarf\-\fR\fIlevel\fR.
+Instead use an additional \fB\-g\fR\fIlevel\fR option to change the
+debug level for \s-1DWARF.\s0
+.IP "\fB\-feliminate\-unused\-debug\-symbols\fR" 4
+.IX Item "-feliminate-unused-debug-symbols"
+Produce debugging information in stabs format (if that is supported),
+for only symbols that are actually used.
+.IP "\fB\-femit\-class\-debug\-always\fR" 4
+.IX Item "-femit-class-debug-always"
+Instead of emitting debugging information for a \*(C+ class in only one
+object file, emit it in all object files using the class.  This option
+should be used only with debuggers that are unable to handle the way \s-1GCC\s0
+normally emits debugging information for classes because using this
+option increases the size of debugging information by as much as a
+factor of two.
+.IP "\fB\-fno\-merge\-debug\-strings\fR" 4
+.IX Item "-fno-merge-debug-strings"
+Direct the linker to not merge together strings in the debugging
+information that are identical in different object files.  Merging is
+not supported by all assemblers or linkers.  Merging decreases the size
+of the debug information in the output file at the cost of increasing
+link processing time.  Merging is enabled by default.
+.IP "\fB\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
+.IX Item "-fdebug-prefix-map=old=new"
+When compiling files residing in directory \fI\fIold\fI\fR, record
+debugging information describing them as if the files resided in
+directory \fI\fInew\fI\fR instead.  This can be used to replace a
+build-time path with an install-time path in the debug info.  It can
+also be used to change an absolute path to a relative path by using
+\&\fI.\fR for \fInew\fR.  This can give more reproducible builds, which
+are location independent, but may require an extra command to tell \s-1GDB\s0
+where to find the source files. See also \fB\-ffile\-prefix\-map\fR.
+.IP "\fB\-fvar\-tracking\fR" 4
+.IX Item "-fvar-tracking"
+Run variable tracking pass.  It computes where variables are stored at each
+position in code.  Better debugging information is then generated
+(if the debugging information format supports this information).
+.Sp
+It is enabled by default when compiling with optimization (\fB\-Os\fR,
+\&\fB\-O\fR, \fB\-O2\fR, ...), debugging information (\fB\-g\fR) and
+the debug info format supports it.
+.IP "\fB\-fvar\-tracking\-assignments\fR" 4
+.IX Item "-fvar-tracking-assignments"
+Annotate assignments to user variables early in the compilation and
+attempt to carry the annotations over throughout the compilation all the
+way to the end, in an attempt to improve debug information while
+optimizing.  Use of \fB\-gdwarf\-4\fR is recommended along with it.
+.Sp
+It can be enabled even if var-tracking is disabled, in which case
+annotations are created and maintained, but discarded at the end.
+By default, this flag is enabled together with \fB\-fvar\-tracking\fR,
+except when selective scheduling is enabled.
+.IP "\fB\-gsplit\-dwarf\fR" 4
+.IX Item "-gsplit-dwarf"
+Separate as much \s-1DWARF\s0 debugging information as possible into a
+separate output file with the extension \fI.dwo\fR.  This option allows
+the build system to avoid linking files with debug information.  To
+be useful, this option requires a debugger capable of reading \fI.dwo\fR
+files.
+.IP "\fB\-gdescribe\-dies\fR" 4
+.IX Item "-gdescribe-dies"
+Add description attributes to some \s-1DWARF\s0 DIEs that have no name attribute,
+such as artificial variables, external references and call site
+parameter DIEs.
+.IP "\fB\-gpubnames\fR" 4
+.IX Item "-gpubnames"
+Generate \s-1DWARF\s0 \f(CW\*(C`.debug_pubnames\*(C'\fR and \f(CW\*(C`.debug_pubtypes\*(C'\fR sections.
+.IP "\fB\-ggnu\-pubnames\fR" 4
+.IX Item "-ggnu-pubnames"
+Generate \f(CW\*(C`.debug_pubnames\*(C'\fR and \f(CW\*(C`.debug_pubtypes\*(C'\fR sections in a format
+suitable for conversion into a \s-1GDB\s0 index.  This option is only useful
+with a linker that can produce \s-1GDB\s0 index version 7.
+.IP "\fB\-fdebug\-types\-section\fR" 4
+.IX Item "-fdebug-types-section"
+When using \s-1DWARF\s0 Version 4 or higher, type DIEs can be put into
+their own \f(CW\*(C`.debug_types\*(C'\fR section instead of making them part of the
+\&\f(CW\*(C`.debug_info\*(C'\fR section.  It is more efficient to put them in a separate
+comdat section since the linker can then remove duplicates.
+But not all \s-1DWARF\s0 consumers support \f(CW\*(C`.debug_types\*(C'\fR sections yet
+and on some objects \f(CW\*(C`.debug_types\*(C'\fR produces larger instead of smaller
+debugging information.
+.IP "\fB\-grecord\-gcc\-switches\fR" 4
+.IX Item "-grecord-gcc-switches"
+.PD 0
+.IP "\fB\-gno\-record\-gcc\-switches\fR" 4
+.IX Item "-gno-record-gcc-switches"
+.PD
+This switch causes the command-line options used to invoke the
+compiler that may affect code generation to be appended to the
+DW_AT_producer attribute in \s-1DWARF\s0 debugging information.  The options
+are concatenated with spaces separating them from each other and from
+the compiler version.  
+It is enabled by default.
+See also \fB\-frecord\-gcc\-switches\fR for another
+way of storing compiler options into the object file.
+.IP "\fB\-gstrict\-dwarf\fR" 4
+.IX Item "-gstrict-dwarf"
+Disallow using extensions of later \s-1DWARF\s0 standard version than selected
+with \fB\-gdwarf\-\fR\fIversion\fR.  On most targets using non-conflicting
+\&\s-1DWARF\s0 extensions from later standard versions is allowed.
+.IP "\fB\-gno\-strict\-dwarf\fR" 4
+.IX Item "-gno-strict-dwarf"
+Allow using extensions of later \s-1DWARF\s0 standard version than selected with
+\&\fB\-gdwarf\-\fR\fIversion\fR.
+.IP "\fB\-gas\-loc\-support\fR" 4
+.IX Item "-gas-loc-support"
+Inform the compiler that the assembler supports \f(CW\*(C`.loc\*(C'\fR directives.
+It may then use them for the assembler to generate \s-1DWARF2+\s0 line number
+tables.
+.Sp
+This is generally desirable, because assembler-generated line-number
+tables are a lot more compact than those the compiler can generate
+itself.
+.Sp
+This option will be enabled by default if, at \s-1GCC\s0 configure time, the
+assembler was found to support such directives.
+.IP "\fB\-gno\-as\-loc\-support\fR" 4
+.IX Item "-gno-as-loc-support"
+Force \s-1GCC\s0 to generate \s-1DWARF2+\s0 line number tables internally, if \s-1DWARF2+\s0
+line number tables are to be generated.
+.IP "\fBgas-locview-support\fR" 4
+.IX Item "gas-locview-support"
+Inform the compiler that the assembler supports \f(CW\*(C`view\*(C'\fR assignment
+and reset assertion checking in \f(CW\*(C`.loc\*(C'\fR directives.
+.Sp
+This option will be enabled by default if, at \s-1GCC\s0 configure time, the
+assembler was found to support them.
+.IP "\fBgno-as-locview-support\fR" 4
+.IX Item "gno-as-locview-support"
+Force \s-1GCC\s0 to assign view numbers internally, if
+\&\fB\-gvariable\-location\-views\fR are explicitly requested.
+.IP "\fB\-gcolumn\-info\fR" 4
+.IX Item "-gcolumn-info"
+.PD 0
+.IP "\fB\-gno\-column\-info\fR" 4
+.IX Item "-gno-column-info"
+.PD
+Emit location column information into \s-1DWARF\s0 debugging information, rather
+than just file and line.
+This option is enabled by default.
+.IP "\fB\-gstatement\-frontiers\fR" 4
+.IX Item "-gstatement-frontiers"
+.PD 0
+.IP "\fB\-gno\-statement\-frontiers\fR" 4
+.IX Item "-gno-statement-frontiers"
+.PD
+This option causes \s-1GCC\s0 to create markers in the internal representation
+at the beginning of statements, and to keep them roughly in place
+throughout compilation, using them to guide the output of \f(CW\*(C`is_stmt\*(C'\fR
+markers in the line number table.  This is enabled by default when
+compiling with optimization (\fB\-Os\fR, \fB\-O\fR, \fB\-O2\fR,
+\&...), and outputting \s-1DWARF 2\s0 debug information at the normal level.
+.IP "\fB\-gvariable\-location\-views\fR" 4
+.IX Item "-gvariable-location-views"
+.PD 0
+.IP "\fB\-gvariable\-location\-views=incompat5\fR" 4
+.IX Item "-gvariable-location-views=incompat5"
+.IP "\fB\-gno\-variable\-location\-views\fR" 4
+.IX Item "-gno-variable-location-views"
+.PD
+Augment variable location lists with progressive view numbers implied
+from the line number table.  This enables debug information consumers to
+inspect state at certain points of the program, even if no instructions
+associated with the corresponding source locations are present at that
+point.  If the assembler lacks support for view numbers in line number
+tables, this will cause the compiler to emit the line number table,
+which generally makes them somewhat less compact.  The augmented line
+number tables and location lists are fully backward-compatible, so they
+can be consumed by debug information consumers that are not aware of
+these augmentations, but they won't derive any benefit from them either.
+.Sp
+This is enabled by default when outputting \s-1DWARF 2\s0 debug information at
+the normal level, as long as there is assembler support,
+\&\fB\-fvar\-tracking\-assignments\fR is enabled and
+\&\fB\-gstrict\-dwarf\fR is not.  When assembler support is not
+available, this may still be enabled, but it will force \s-1GCC\s0 to output
+internal line number tables, and if
+\&\fB\-ginternal\-reset\-location\-views\fR is not enabled, that will most
+certainly lead to silently mismatching location views.
+.Sp
+There is a proposed representation for view numbers that is not backward
+compatible with the location list format introduced in \s-1DWARF 5,\s0 that can
+be enabled with \fB\-gvariable\-location\-views=incompat5\fR.  This
+option may be removed in the future, is only provided as a reference
+implementation of the proposed representation.  Debug information
+consumers are not expected to support this extended format, and they
+would be rendered unable to decode location lists using it.
+.IP "\fB\-ginternal\-reset\-location\-views\fR" 4
+.IX Item "-ginternal-reset-location-views"
+.PD 0
+.IP "\fB\-gnointernal\-reset\-location\-views\fR" 4
+.IX Item "-gnointernal-reset-location-views"
+.PD
+Attempt to determine location views that can be omitted from location
+view lists.  This requires the compiler to have very accurate insn
+length estimates, which isn't always the case, and it may cause
+incorrect view lists to be generated silently when using an assembler
+that does not support location view lists.  The \s-1GNU\s0 assembler will flag
+any such error as a \f(CW\*(C`view number mismatch\*(C'\fR.  This is only enabled
+on ports that define a reliable estimation function.
+.IP "\fB\-ginline\-points\fR" 4
+.IX Item "-ginline-points"
+.PD 0
+.IP "\fB\-gno\-inline\-points\fR" 4
+.IX Item "-gno-inline-points"
+.PD
+Generate extended debug information for inlined functions.  Location
+view tracking markers are inserted at inlined entry points, so that
+address and view numbers can be computed and output in debug
+information.  This can be enabled independently of location views, in
+which case the view numbers won't be output, but it can only be enabled
+along with statement frontiers, and it is only enabled by default if
+location views are enabled.
+.IP "\fB\-gz\fR[\fB=\fR\fItype\fR]" 4
+.IX Item "-gz[=type]"
+Produce compressed debug sections in \s-1DWARF\s0 format, if that is supported.
+If \fItype\fR is not given, the default type depends on the capabilities
+of the assembler and linker used.  \fItype\fR may be one of
+\&\fBnone\fR (don't compress debug sections), \fBzlib\fR (use zlib
+compression in \s-1ELF\s0 gABI format), or \fBzlib-gnu\fR (use zlib
+compression in traditional \s-1GNU\s0 format).  If the linker doesn't support
+writing compressed debug sections, the option is rejected.  Otherwise,
+if the assembler does not support them, \fB\-gz\fR is silently ignored
+when producing object files.
+.IP "\fB\-femit\-struct\-debug\-baseonly\fR" 4
+.IX Item "-femit-struct-debug-baseonly"
+Emit debug information for struct-like types
+only when the base name of the compilation source file
+matches the base name of file in which the struct is defined.
+.Sp
+This option substantially reduces the size of debugging information,
+but at significant potential loss in type information to the debugger.
+See \fB\-femit\-struct\-debug\-reduced\fR for a less aggressive option.
+See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
+.Sp
+This option works only with \s-1DWARF\s0 debug output.
+.IP "\fB\-femit\-struct\-debug\-reduced\fR" 4
+.IX Item "-femit-struct-debug-reduced"
+Emit debug information for struct-like types
+only when the base name of the compilation source file
+matches the base name of file in which the type is defined,
+unless the struct is a template or defined in a system header.
+.Sp
+This option significantly reduces the size of debugging information,
+with some potential loss in type information to the debugger.
+See \fB\-femit\-struct\-debug\-baseonly\fR for a more aggressive option.
+See \fB\-femit\-struct\-debug\-detailed\fR for more detailed control.
+.Sp
+This option works only with \s-1DWARF\s0 debug output.
+.IP "\fB\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec-list\fR]" 4
+.IX Item "-femit-struct-debug-detailed[=spec-list]"
+Specify the struct-like types
+for which the compiler generates debug information.
+The intent is to reduce duplicate struct debug information
+between different object files within the same program.
+.Sp
+This option is a detailed version of
+\&\fB\-femit\-struct\-debug\-reduced\fR and \fB\-femit\-struct\-debug\-baseonly\fR,
+which serves for most needs.
+.Sp
+A specification has the syntax[\fBdir:\fR|\fBind:\fR][\fBord:\fR|\fBgen:\fR](\fBany\fR|\fBsys\fR|\fBbase\fR|\fBnone\fR)
+.Sp
+The optional first word limits the specification to
+structs that are used directly (\fBdir:\fR) or used indirectly (\fBind:\fR).
+A struct type is used directly when it is the type of a variable, member.
+Indirect uses arise through pointers to structs.
+That is, when use of an incomplete struct is valid, the use is indirect.
+An example is
+\&\fBstruct one direct; struct two * indirect;\fR.
+.Sp
+The optional second word limits the specification to
+ordinary structs (\fBord:\fR) or generic structs (\fBgen:\fR).
+Generic structs are a bit complicated to explain.
+For \*(C+, these are non-explicit specializations of template classes,
+or non-template classes within the above.
+Other programming languages have generics,
+but \fB\-femit\-struct\-debug\-detailed\fR does not yet implement them.
+.Sp
+The third word specifies the source files for those
+structs for which the compiler should emit debug information.
+The values \fBnone\fR and \fBany\fR have the normal meaning.
+The value \fBbase\fR means that
+the base of name of the file in which the type declaration appears
+must match the base of the name of the main compilation file.
+In practice, this means that when compiling \fIfoo.c\fR, debug information
+is generated for types declared in that file and \fIfoo.h\fR,
+but not other header files.
+The value \fBsys\fR means those types satisfying \fBbase\fR
+or declared in system or compiler headers.
+.Sp
+You may need to experiment to determine the best settings for your application.
+.Sp
+The default is \fB\-femit\-struct\-debug\-detailed=all\fR.
+.Sp
+This option works only with \s-1DWARF\s0 debug output.
+.IP "\fB\-fno\-dwarf2\-cfi\-asm\fR" 4
+.IX Item "-fno-dwarf2-cfi-asm"
+Emit \s-1DWARF\s0 unwind info as compiler generated \f(CW\*(C`.eh_frame\*(C'\fR section
+instead of using \s-1GAS\s0 \f(CW\*(C`.cfi_*\*(C'\fR directives.
+.IP "\fB\-fno\-eliminate\-unused\-debug\-types\fR" 4
+.IX Item "-fno-eliminate-unused-debug-types"
+Normally, when producing \s-1DWARF\s0 output, \s-1GCC\s0 avoids producing debug symbol 
+output for types that are nowhere used in the source file being compiled.
+Sometimes it is useful to have \s-1GCC\s0 emit debugging
+information for all types declared in a compilation
+unit, regardless of whether or not they are actually used
+in that compilation unit, for example 
+if, in the debugger, you want to cast a value to a type that is
+not actually used in your program (but is declared).  More often,
+however, this results in a significant amount of wasted space.
+.SS "Options That Control Optimization"
+.IX Subsection "Options That Control Optimization"
+These options control various sorts of optimizations.
+.PP
+Without any optimization option, the compiler's goal is to reduce the
+cost of compilation and to make debugging produce the expected
+results.  Statements are independent: if you stop the program with a
+breakpoint between statements, you can then assign a new value to any
+variable or change the program counter to any other statement in the
+function and get exactly the results you expect from the source
+code.
+.PP
+Turning on optimization flags makes the compiler attempt to improve
+the performance and/or code size at the expense of compilation time
+and possibly the ability to debug the program.
+.PP
+The compiler performs optimization based on the knowledge it has of the
+program.  Compiling multiple files at once to a single output file mode allows
+the compiler to use information gained from all of the files when compiling
+each of them.
+.PP
+Not all optimizations are controlled directly by a flag.  Only
+optimizations that have a flag are listed in this section.
+.PP
+Most optimizations are completely disabled at \fB\-O0\fR or if an
+\&\fB\-O\fR level is not set on the command line, even if individual
+optimization flags are specified.  Similarly, \fB\-Og\fR suppresses
+many optimization passes.
+.PP
+Depending on the target and how \s-1GCC\s0 was configured, a slightly different
+set of optimizations may be enabled at each \fB\-O\fR level than
+those listed here.  You can invoke \s-1GCC\s0 with \fB\-Q \-\-help=optimizers\fR
+to find out the exact set of optimizations that are enabled at each level.
+.IP "\fB\-O\fR" 4
+.IX Item "-O"
+.PD 0
+.IP "\fB\-O1\fR" 4
+.IX Item "-O1"
+.PD
+Optimize.  Optimizing compilation takes somewhat more time, and a lot
+more memory for a large function.
+.Sp
+With \fB\-O\fR, the compiler tries to reduce code size and execution
+time, without performing any optimizations that take a great deal of
+compilation time.
+.Sp
+\&\fB\-O\fR turns on the following optimization flags:
+.Sp
+\&\fB\-fauto\-inc\-dec 
+\&\-fbranch\-count\-reg 
+\&\-fcombine\-stack\-adjustments 
+\&\-fcompare\-elim 
+\&\-fcprop\-registers 
+\&\-fdce 
+\&\-fdefer\-pop 
+\&\-fdelayed\-branch 
+\&\-fdse 
+\&\-fforward\-propagate 
+\&\-fguess\-branch\-probability 
+\&\-fif\-conversion 
+\&\-fif\-conversion2 
+\&\-finline\-functions\-called\-once 
+\&\-fipa\-profile 
+\&\-fipa\-pure\-const 
+\&\-fipa\-reference 
+\&\-fipa\-reference\-addressable 
+\&\-fmerge\-constants 
+\&\-fmove\-loop\-invariants 
+\&\-fomit\-frame\-pointer 
+\&\-freorder\-blocks 
+\&\-fshrink\-wrap 
+\&\-fshrink\-wrap\-separate 
+\&\-fsplit\-wide\-types 
+\&\-fssa\-backprop 
+\&\-fssa\-phiopt 
+\&\-ftree\-bit\-ccp 
+\&\-ftree\-ccp 
+\&\-ftree\-ch 
+\&\-ftree\-coalesce\-vars 
+\&\-ftree\-copy\-prop 
+\&\-ftree\-dce 
+\&\-ftree\-dominator\-opts 
+\&\-ftree\-dse 
+\&\-ftree\-forwprop 
+\&\-ftree\-fre 
+\&\-ftree\-phiprop 
+\&\-ftree\-pta 
+\&\-ftree\-scev\-cprop 
+\&\-ftree\-sink 
+\&\-ftree\-slsr 
+\&\-ftree\-sra 
+\&\-ftree\-ter 
+\&\-funit\-at\-a\-time\fR
+.IP "\fB\-O2\fR" 4
+.IX Item "-O2"
+Optimize even more.  \s-1GCC\s0 performs nearly all supported optimizations
+that do not involve a space-speed tradeoff.
+As compared to \fB\-O\fR, this option increases both compilation time
+and the performance of the generated code.
+.Sp
+\&\fB\-O2\fR turns on all optimization flags specified by \fB\-O\fR.  It
+also turns on the following optimization flags:
+.Sp
+\&\fB\-falign\-functions  \-falign\-jumps 
+\&\-falign\-labels  \-falign\-loops 
+\&\-fcaller\-saves 
+\&\-fcode\-hoisting 
+\&\-fcrossjumping 
+\&\-fcse\-follow\-jumps  \-fcse\-skip\-blocks 
+\&\-fdelete\-null\-pointer\-checks 
+\&\-fdevirtualize  \-fdevirtualize\-speculatively 
+\&\-fexpensive\-optimizations 
+\&\-fgcse  \-fgcse\-lm  
+\&\-fhoist\-adjacent\-loads 
+\&\-finline\-small\-functions 
+\&\-findirect\-inlining 
+\&\-fipa\-bit\-cp  \-fipa\-cp  \-fipa\-icf 
+\&\-fipa\-ra  \-fipa\-sra  \-fipa\-vrp 
+\&\-fisolate\-erroneous\-paths\-dereference 
+\&\-flra\-remat 
+\&\-foptimize\-sibling\-calls 
+\&\-foptimize\-strlen 
+\&\-fpartial\-inlining 
+\&\-fpeephole2 
+\&\-freorder\-blocks\-algorithm=stc 
+\&\-freorder\-blocks\-and\-partition  \-freorder\-functions 
+\&\-frerun\-cse\-after\-loop  
+\&\-fschedule\-insns  \-fschedule\-insns2 
+\&\-fsched\-interblock  \-fsched\-spec 
+\&\-fstore\-merging 
+\&\-fstrict\-aliasing 
+\&\-fthread\-jumps 
+\&\-ftree\-builtin\-call\-dce 
+\&\-ftree\-pre 
+\&\-ftree\-switch\-conversion  \-ftree\-tail\-merge 
+\&\-ftree\-vrp\fR
+.Sp
+Please note the warning under \fB\-fgcse\fR about
+invoking \fB\-O2\fR on programs that use computed gotos.
+.IP "\fB\-O3\fR" 4
+.IX Item "-O3"
+Optimize yet more.  \fB\-O3\fR turns on all optimizations specified
+by \fB\-O2\fR and also turns on the following optimization flags:
+.Sp
+\&\fB\-fgcse\-after\-reload 
+\&\-finline\-functions 
+\&\-fipa\-cp\-clone
+\&\-floop\-interchange 
+\&\-floop\-unroll\-and\-jam 
+\&\-fpeel\-loops 
+\&\-fpredictive\-commoning 
+\&\-fsplit\-paths 
+\&\-ftree\-loop\-distribute\-patterns 
+\&\-ftree\-loop\-distribution 
+\&\-ftree\-loop\-vectorize 
+\&\-ftree\-partial\-pre 
+\&\-ftree\-slp\-vectorize 
+\&\-funswitch\-loops 
+\&\-fvect\-cost\-model 
+\&\-fversion\-loops\-for\-strides\fR
+.IP "\fB\-O0\fR" 4
+.IX Item "-O0"
+Reduce compilation time and make debugging produce the expected
+results.  This is the default.
+.IP "\fB\-Os\fR" 4
+.IX Item "-Os"
+Optimize for size.  \fB\-Os\fR enables all \fB\-O2\fR optimizations 
+except those that often increase code size:
+.Sp
+\&\fB\-falign\-functions  \-falign\-jumps 
+\&\-falign\-labels  \-falign\-loops 
+\&\-fprefetch\-loop\-arrays  \-freorder\-blocks\-algorithm=stc\fR
+.Sp
+It also enables \fB\-finline\-functions\fR, causes the compiler to tune for
+code size rather than execution speed, and performs further optimizations
+designed to reduce code size.
+.IP "\fB\-Ofast\fR" 4
+.IX Item "-Ofast"
+Disregard strict standards compliance.  \fB\-Ofast\fR enables all
+\&\fB\-O3\fR optimizations.  It also enables optimizations that are not
+valid for all standard-compliant programs.
+It turns on \fB\-ffast\-math\fR and the Fortran-specific
+\&\fB\-fstack\-arrays\fR, unless \fB\-fmax\-stack\-var\-size\fR is
+specified, and \fB\-fno\-protect\-parens\fR.
+.IP "\fB\-Og\fR" 4
+.IX Item "-Og"
+Optimize debugging experience.  \fB\-Og\fR should be the optimization
+level of choice for the standard edit-compile-debug cycle, offering
+a reasonable level of optimization while maintaining fast compilation
+and a good debugging experience.  It is a better choice than \fB\-O0\fR
+for producing debuggable code because some compiler passes
+that collect debug information are disabled at \fB\-O0\fR.
+.Sp
+Like \fB\-O0\fR, \fB\-Og\fR completely disables a number of 
+optimization passes so that individual options controlling them have
+no effect.  Otherwise \fB\-Og\fR enables all \fB\-O1\fR 
+optimization flags except for those that may interfere with debugging:
+.Sp
+\&\fB\-fbranch\-count\-reg  \-fdelayed\-branch 
+\&\-fif\-conversion  \-fif\-conversion2  
+\&\-finline\-functions\-called\-once 
+\&\-fmove\-loop\-invariants  \-fssa\-phiopt 
+\&\-ftree\-bit\-ccp  \-ftree\-pta  \-ftree\-sra\fR
+.PP
+If you use multiple \fB\-O\fR options, with or without level numbers,
+the last such option is the one that is effective.
+.PP
+Options of the form \fB\-f\fR\fIflag\fR specify machine-independent
+flags.  Most flags have both positive and negative forms; the negative
+form of \fB\-ffoo\fR is \fB\-fno\-foo\fR.  In the table
+below, only one of the forms is listed\-\-\-the one you typically 
+use.  You can figure out the other form by either removing \fBno\-\fR
+or adding it.
+.PP
+The following options control specific optimizations.  They are either
+activated by \fB\-O\fR options or are related to ones that are.  You
+can use the following flags in the rare cases when \*(L"fine-tuning\*(R" of
+optimizations to be performed is desired.
+.IP "\fB\-fno\-defer\-pop\fR" 4
+.IX Item "-fno-defer-pop"
+For machines that must pop arguments after a function call, always pop 
+the arguments as soon as each function returns.  
+At levels \fB\-O1\fR and higher, \fB\-fdefer\-pop\fR is the default;
+this allows the compiler to let arguments accumulate on the stack for several
+function calls and pop them all at once.
+.IP "\fB\-fforward\-propagate\fR" 4
+.IX Item "-fforward-propagate"
+Perform a forward propagation pass on \s-1RTL.\s0  The pass tries to combine two
+instructions and checks if the result can be simplified.  If loop unrolling
+is active, two passes are performed and the second is scheduled after
+loop unrolling.
+.Sp
+This option is enabled by default at optimization levels \fB\-O\fR,
+\&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-ffp\-contract=\fR\fIstyle\fR" 4
+.IX Item "-ffp-contract=style"
+\&\fB\-ffp\-contract=off\fR disables floating-point expression contraction.
+\&\fB\-ffp\-contract=fast\fR enables floating-point expression contraction
+such as forming of fused multiply-add operations if the target has
+native support for them.
+\&\fB\-ffp\-contract=on\fR enables floating-point expression contraction
+if allowed by the language standard.  This is currently not implemented
+and treated equal to \fB\-ffp\-contract=off\fR.
+.Sp
+The default is \fB\-ffp\-contract=fast\fR.
+.IP "\fB\-fomit\-frame\-pointer\fR" 4
+.IX Item "-fomit-frame-pointer"
+Omit the frame pointer in functions that don't need one.  This avoids the
+instructions to save, set up and restore the frame pointer; on many targets
+it also makes an extra register available.
+.Sp
+On some targets this flag has no effect because the standard calling sequence
+always uses a frame pointer, so it cannot be omitted.
+.Sp
+Note that \fB\-fno\-omit\-frame\-pointer\fR doesn't guarantee the frame pointer
+is used in all functions.  Several targets always omit the frame pointer in
+leaf functions.
+.Sp
+Enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-foptimize\-sibling\-calls\fR" 4
+.IX Item "-foptimize-sibling-calls"
+Optimize sibling and tail recursive calls.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-foptimize\-strlen\fR" 4
+.IX Item "-foptimize-strlen"
+Optimize various standard C string functions (e.g. \f(CW\*(C`strlen\*(C'\fR,
+\&\f(CW\*(C`strchr\*(C'\fR or \f(CW\*(C`strcpy\*(C'\fR) and
+their \f(CW\*(C`_FORTIFY_SOURCE\*(C'\fR counterparts into faster alternatives.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
+.IP "\fB\-fno\-inline\fR" 4
+.IX Item "-fno-inline"
+Do not expand any functions inline apart from those marked with
+the \f(CW\*(C`always_inline\*(C'\fR attribute.  This is the default when not
+optimizing.
+.Sp
+Single functions can be exempted from inlining by marking them
+with the \f(CW\*(C`noinline\*(C'\fR attribute.
+.IP "\fB\-finline\-small\-functions\fR" 4
+.IX Item "-finline-small-functions"
+Integrate functions into their callers when their body is smaller than expected
+function call code (so overall size of program gets smaller).  The compiler
+heuristically decides which functions are simple enough to be worth integrating
+in this way.  This inlining applies to all functions, even those not declared
+inline.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-findirect\-inlining\fR" 4
+.IX Item "-findirect-inlining"
+Inline also indirect calls that are discovered to be known at compile
+time thanks to previous inlining.  This option has any effect only
+when inlining itself is turned on by the \fB\-finline\-functions\fR
+or \fB\-finline\-small\-functions\fR options.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-finline\-functions\fR" 4
+.IX Item "-finline-functions"
+Consider all functions for inlining, even if they are not declared inline.
+The compiler heuristically decides which functions are worth integrating
+in this way.
+.Sp
+If all calls to a given function are integrated, and the function is
+declared \f(CW\*(C`static\*(C'\fR, then the function is normally not output as
+assembler code in its own right.
+.Sp
+Enabled at levels \fB\-O3\fR, \fB\-Os\fR.  Also enabled
+by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+.IP "\fB\-finline\-functions\-called\-once\fR" 4
+.IX Item "-finline-functions-called-once"
+Consider all \f(CW\*(C`static\*(C'\fR functions called once for inlining into their
+caller even if they are not marked \f(CW\*(C`inline\*(C'\fR.  If a call to a given
+function is integrated, then the function is not output as assembler code
+in its own right.
+.Sp
+Enabled at levels \fB\-O1\fR, \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR,
+but not \fB\-Og\fR.
+.IP "\fB\-fearly\-inlining\fR" 4
+.IX Item "-fearly-inlining"
+Inline functions marked by \f(CW\*(C`always_inline\*(C'\fR and functions whose body seems
+smaller than the function call overhead early before doing
+\&\fB\-fprofile\-generate\fR instrumentation and real inlining pass.  Doing so
+makes profiling significantly cheaper and usually inlining faster on programs
+having large chains of nested wrapper functions.
+.Sp
+Enabled by default.
+.IP "\fB\-fipa\-sra\fR" 4
+.IX Item "-fipa-sra"
+Perform interprocedural scalar replacement of aggregates, removal of
+unused parameters and replacement of parameters passed by reference
+by parameters passed by value.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR and \fB\-Os\fR.
+.IP "\fB\-finline\-limit=\fR\fIn\fR" 4
+.IX Item "-finline-limit=n"
+By default, \s-1GCC\s0 limits the size of functions that can be inlined.  This flag
+allows coarse control of this limit.  \fIn\fR is the size of functions that
+can be inlined in number of pseudo instructions.
+.Sp
+Inlining is actually controlled by a number of parameters, which may be
+specified individually by using \fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR.
+The \fB\-finline\-limit=\fR\fIn\fR option sets some of these parameters
+as follows:
+.RS 4
+.IP "\fBmax-inline-insns-single\fR" 4
+.IX Item "max-inline-insns-single"
+is set to \fIn\fR/2.
+.IP "\fBmax-inline-insns-auto\fR" 4
+.IX Item "max-inline-insns-auto"
+is set to \fIn\fR/2.
+.RE
+.RS 4
+.Sp
+See below for a documentation of the individual
+parameters controlling inlining and for the defaults of these parameters.
+.Sp
+\&\fINote:\fR there may be no value to \fB\-finline\-limit\fR that results
+in default behavior.
+.Sp
+\&\fINote:\fR pseudo instruction represents, in this particular context, an
+abstract measurement of function's size.  In no way does it represent a count
+of assembly instructions and as such its exact meaning might change from one
+release to an another.
+.RE
+.IP "\fB\-fno\-keep\-inline\-dllexport\fR" 4
+.IX Item "-fno-keep-inline-dllexport"
+This is a more fine-grained version of \fB\-fkeep\-inline\-functions\fR,
+which applies only to functions that are declared using the \f(CW\*(C`dllexport\*(C'\fR
+attribute or declspec.
+.IP "\fB\-fkeep\-inline\-functions\fR" 4
+.IX Item "-fkeep-inline-functions"
+In C, emit \f(CW\*(C`static\*(C'\fR functions that are declared \f(CW\*(C`inline\*(C'\fR
+into the object file, even if the function has been inlined into all
+of its callers.  This switch does not affect functions using the
+\&\f(CW\*(C`extern inline\*(C'\fR extension in \s-1GNU C90.\s0  In \*(C+, emit any and all
+inline functions into the object file.
+.IP "\fB\-fkeep\-static\-functions\fR" 4
+.IX Item "-fkeep-static-functions"
+Emit \f(CW\*(C`static\*(C'\fR functions into the object file, even if the function
+is never used.
+.IP "\fB\-fkeep\-static\-consts\fR" 4
+.IX Item "-fkeep-static-consts"
+Emit variables declared \f(CW\*(C`static const\*(C'\fR when optimization isn't turned
+on, even if the variables aren't referenced.
+.Sp
+\&\s-1GCC\s0 enables this option by default.  If you want to force the compiler to
+check if a variable is referenced, regardless of whether or not
+optimization is turned on, use the \fB\-fno\-keep\-static\-consts\fR option.
+.IP "\fB\-fmerge\-constants\fR" 4
+.IX Item "-fmerge-constants"
+Attempt to merge identical constants (string constants and floating-point
+constants) across compilation units.
+.Sp
+This option is the default for optimized compilation if the assembler and
+linker support it.  Use \fB\-fno\-merge\-constants\fR to inhibit this
+behavior.
+.Sp
+Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fmerge\-all\-constants\fR" 4
+.IX Item "-fmerge-all-constants"
+Attempt to merge identical constants and identical variables.
+.Sp
+This option implies \fB\-fmerge\-constants\fR.  In addition to
+\&\fB\-fmerge\-constants\fR this considers e.g. even constant initialized
+arrays or initialized constant variables with integral or floating-point
+types.  Languages like C or \*(C+ require each variable, including multiple
+instances of the same variable in recursive calls, to have distinct locations,
+so using this option results in non-conforming
+behavior.
+.IP "\fB\-fmodulo\-sched\fR" 4
+.IX Item "-fmodulo-sched"
+Perform swing modulo scheduling immediately before the first scheduling
+pass.  This pass looks at innermost loops and reorders their
+instructions by overlapping different iterations.
+.IP "\fB\-fmodulo\-sched\-allow\-regmoves\fR" 4
+.IX Item "-fmodulo-sched-allow-regmoves"
+Perform more aggressive SMS-based modulo scheduling with register moves
+allowed.  By setting this flag certain anti-dependences edges are
+deleted, which triggers the generation of reg-moves based on the
+life-range analysis.  This option is effective only with
+\&\fB\-fmodulo\-sched\fR enabled.
+.IP "\fB\-fno\-branch\-count\-reg\fR" 4
+.IX Item "-fno-branch-count-reg"
+Disable the optimization pass that scans for opportunities to use 
+\&\*(L"decrement and branch\*(R" instructions on a count register instead of
+instruction sequences that decrement a register, compare it against zero, and
+then branch based upon the result.  This option is only meaningful on
+architectures that support such instructions, which include x86, PowerPC,
+\&\s-1IA\-64\s0 and S/390.  Note that the \fB\-fno\-branch\-count\-reg\fR option
+doesn't remove the decrement and branch instructions from the generated
+instruction stream introduced by other optimization passes.
+.Sp
+The default is \fB\-fbranch\-count\-reg\fR at \fB\-O1\fR and higher,
+except for \fB\-Og\fR.
+.IP "\fB\-fno\-function\-cse\fR" 4
+.IX Item "-fno-function-cse"
+Do not put function addresses in registers; make each instruction that
+calls a constant function contain the function's address explicitly.
+.Sp
+This option results in less efficient code, but some strange hacks
+that alter the assembler output may be confused by the optimizations
+performed when this option is not used.
+.Sp
+The default is \fB\-ffunction\-cse\fR
+.IP "\fB\-fno\-zero\-initialized\-in\-bss\fR" 4
+.IX Item "-fno-zero-initialized-in-bss"
+If the target supports a \s-1BSS\s0 section, \s-1GCC\s0 by default puts variables that
+are initialized to zero into \s-1BSS.\s0  This can save space in the resulting
+code.
+.Sp
+This option turns off this behavior because some programs explicitly
+rely on variables going to the data section\-\-\-e.g., so that the
+resulting executable can find the beginning of that section and/or make
+assumptions based on that.
+.Sp
+The default is \fB\-fzero\-initialized\-in\-bss\fR.
+.IP "\fB\-fthread\-jumps\fR" 4
+.IX Item "-fthread-jumps"
+Perform optimizations that check to see if a jump branches to a
+location where another comparison subsumed by the first is found.  If
+so, the first branch is redirected to either the destination of the
+second branch or a point immediately following it, depending on whether
+the condition is known to be true or false.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fsplit\-wide\-types\fR" 4
+.IX Item "-fsplit-wide-types"
+When using a type that occupies multiple registers, such as \f(CW\*(C`long
+long\*(C'\fR on a 32\-bit system, split the registers apart and allocate them
+independently.  This normally generates better code for those types,
+but may make debugging more difficult.
+.Sp
+Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR,
+\&\fB\-Os\fR.
+.IP "\fB\-fcse\-follow\-jumps\fR" 4
+.IX Item "-fcse-follow-jumps"
+In common subexpression elimination (\s-1CSE\s0), scan through jump instructions
+when the target of the jump is not reached by any other path.  For
+example, when \s-1CSE\s0 encounters an \f(CW\*(C`if\*(C'\fR statement with an
+\&\f(CW\*(C`else\*(C'\fR clause, \s-1CSE\s0 follows the jump when the condition
+tested is false.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fcse\-skip\-blocks\fR" 4
+.IX Item "-fcse-skip-blocks"
+This is similar to \fB\-fcse\-follow\-jumps\fR, but causes \s-1CSE\s0 to
+follow jumps that conditionally skip over blocks.  When \s-1CSE\s0
+encounters a simple \f(CW\*(C`if\*(C'\fR statement with no else clause,
+\&\fB\-fcse\-skip\-blocks\fR causes \s-1CSE\s0 to follow the jump around the
+body of the \f(CW\*(C`if\*(C'\fR.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-frerun\-cse\-after\-loop\fR" 4
+.IX Item "-frerun-cse-after-loop"
+Re-run common subexpression elimination after loop optimizations are
+performed.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fgcse\fR" 4
+.IX Item "-fgcse"
+Perform a global common subexpression elimination pass.
+This pass also performs global constant and copy propagation.
+.Sp
+\&\fINote:\fR When compiling a program using computed gotos, a \s-1GCC\s0
+extension, you may get better run-time performance if you disable
+the global common subexpression elimination pass by adding
+\&\fB\-fno\-gcse\fR to the command line.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fgcse\-lm\fR" 4
+.IX Item "-fgcse-lm"
+When \fB\-fgcse\-lm\fR is enabled, global common subexpression elimination
+attempts to move loads that are only killed by stores into themselves.  This
+allows a loop containing a load/store sequence to be changed to a load outside
+the loop, and a copy/store within the loop.
+.Sp
+Enabled by default when \fB\-fgcse\fR is enabled.
+.IP "\fB\-fgcse\-sm\fR" 4
+.IX Item "-fgcse-sm"
+When \fB\-fgcse\-sm\fR is enabled, a store motion pass is run after
+global common subexpression elimination.  This pass attempts to move
+stores out of loops.  When used in conjunction with \fB\-fgcse\-lm\fR,
+loops containing a load/store sequence can be changed to a load before
+the loop and a store after the loop.
+.Sp
+Not enabled at any optimization level.
+.IP "\fB\-fgcse\-las\fR" 4
+.IX Item "-fgcse-las"
+When \fB\-fgcse\-las\fR is enabled, the global common subexpression
+elimination pass eliminates redundant loads that come after stores to the
+same memory location (both partial and full redundancies).
+.Sp
+Not enabled at any optimization level.
+.IP "\fB\-fgcse\-after\-reload\fR" 4
+.IX Item "-fgcse-after-reload"
+When \fB\-fgcse\-after\-reload\fR is enabled, a redundant load elimination
+pass is performed after reload.  The purpose of this pass is to clean up
+redundant spilling.
+.Sp
+Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+.IP "\fB\-faggressive\-loop\-optimizations\fR" 4
+.IX Item "-faggressive-loop-optimizations"
+This option tells the loop optimizer to use language constraints to
+derive bounds for the number of iterations of a loop.  This assumes that
+loop code does not invoke undefined behavior by for example causing signed
+integer overflows or out-of-bound array accesses.  The bounds for the
+number of iterations of a loop are used to guide loop unrolling and peeling
+and loop exit test optimizations.
+This option is enabled by default.
+.IP "\fB\-funconstrained\-commons\fR" 4
+.IX Item "-funconstrained-commons"
+This option tells the compiler that variables declared in common blocks
+(e.g. Fortran) may later be overridden with longer trailing arrays. This
+prevents certain optimizations that depend on knowing the array bounds.
+.IP "\fB\-fcrossjumping\fR" 4
+.IX Item "-fcrossjumping"
+Perform cross-jumping transformation.
+This transformation unifies equivalent code and saves code size.  The
+resulting code may or may not perform better than without cross-jumping.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fauto\-inc\-dec\fR" 4
+.IX Item "-fauto-inc-dec"
+Combine increments or decrements of addresses with memory accesses.
+This pass is always skipped on architectures that do not have
+instructions to support this.  Enabled by default at \fB\-O\fR and
+higher on architectures that support this.
+.IP "\fB\-fdce\fR" 4
+.IX Item "-fdce"
+Perform dead code elimination (\s-1DCE\s0) on \s-1RTL.\s0
+Enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-fdse\fR" 4
+.IX Item "-fdse"
+Perform dead store elimination (\s-1DSE\s0) on \s-1RTL.\s0
+Enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-fif\-conversion\fR" 4
+.IX Item "-fif-conversion"
+Attempt to transform conditional jumps into branch-less equivalents.  This
+includes use of conditional moves, min, max, set flags and abs instructions, and
+some tricks doable by standard arithmetics.  The use of conditional execution
+on chips where it is available is controlled by \fB\-fif\-conversion2\fR.
+.Sp
+Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR, but
+not with \fB\-Og\fR.
+.IP "\fB\-fif\-conversion2\fR" 4
+.IX Item "-fif-conversion2"
+Use conditional execution (where available) to transform conditional jumps into
+branch-less equivalents.
+.Sp
+Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR, but
+not with \fB\-Og\fR.
+.IP "\fB\-fdeclone\-ctor\-dtor\fR" 4
+.IX Item "-fdeclone-ctor-dtor"
+The \*(C+ \s-1ABI\s0 requires multiple entry points for constructors and
+destructors: one for a base subobject, one for a complete object, and
+one for a virtual destructor that calls operator delete afterwards.
+For a hierarchy with virtual bases, the base and complete variants are
+clones, which means two copies of the function.  With this option, the
+base and complete variants are changed to be thunks that call a common
+implementation.
+.Sp
+Enabled by \fB\-Os\fR.
+.IP "\fB\-fdelete\-null\-pointer\-checks\fR" 4
+.IX Item "-fdelete-null-pointer-checks"
+Assume that programs cannot safely dereference null pointers, and that
+no code or data element resides at address zero.
+This option enables simple constant
+folding optimizations at all optimization levels.  In addition, other
+optimization passes in \s-1GCC\s0 use this flag to control global dataflow
+analyses that eliminate useless checks for null pointers; these assume
+that a memory access to address zero always results in a trap, so
+that if a pointer is checked after it has already been dereferenced,
+it cannot be null.
+.Sp
+Note however that in some environments this assumption is not true.
+Use \fB\-fno\-delete\-null\-pointer\-checks\fR to disable this optimization
+for programs that depend on that behavior.
+.Sp
+This option is enabled by default on most targets.  On Nios \s-1II ELF,\s0 it
+defaults to off.  On \s-1AVR, CR16,\s0 and \s-1MSP430,\s0 this option is completely disabled.
+.Sp
+Passes that use the dataflow information
+are enabled independently at different optimization levels.
+.IP "\fB\-fdevirtualize\fR" 4
+.IX Item "-fdevirtualize"
+Attempt to convert calls to virtual functions to direct calls.  This
+is done both within a procedure and interprocedurally as part of
+indirect inlining (\fB\-findirect\-inlining\fR) and interprocedural constant
+propagation (\fB\-fipa\-cp\fR).
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fdevirtualize\-speculatively\fR" 4
+.IX Item "-fdevirtualize-speculatively"
+Attempt to convert calls to virtual functions to speculative direct calls.
+Based on the analysis of the type inheritance graph, determine for a given call
+the set of likely targets. If the set is small, preferably of size 1, change
+the call into a conditional deciding between direct and indirect calls.  The
+speculative calls enable more optimizations, such as inlining.  When they seem
+useless after further optimization, they are converted back into original form.
+.IP "\fB\-fdevirtualize\-at\-ltrans\fR" 4
+.IX Item "-fdevirtualize-at-ltrans"
+Stream extra information needed for aggressive devirtualization when running
+the link-time optimizer in local transformation mode.  
+This option enables more devirtualization but
+significantly increases the size of streamed data. For this reason it is
+disabled by default.
+.IP "\fB\-fexpensive\-optimizations\fR" 4
+.IX Item "-fexpensive-optimizations"
+Perform a number of minor optimizations that are relatively expensive.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-free\fR" 4
+.IX Item "-free"
+Attempt to remove redundant extension instructions.  This is especially
+helpful for the x86\-64 architecture, which implicitly zero-extends in 64\-bit
+registers after writing to their lower 32\-bit half.
+.Sp
+Enabled for Alpha, AArch64 and x86 at levels \fB\-O2\fR,
+\&\fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fno\-lifetime\-dse\fR" 4
+.IX Item "-fno-lifetime-dse"
+In \*(C+ the value of an object is only affected by changes within its
+lifetime: when the constructor begins, the object has an indeterminate
+value, and any changes during the lifetime of the object are dead when
+the object is destroyed.  Normally dead store elimination will take
+advantage of this; if your code relies on the value of the object
+storage persisting beyond the lifetime of the object, you can use this
+flag to disable this optimization.  To preserve stores before the
+constructor starts (e.g. because your operator new clears the object
+storage) but still treat the object as dead after the destructor you,
+can use \fB\-flifetime\-dse=1\fR.  The default behavior can be
+explicitly selected with \fB\-flifetime\-dse=2\fR.
+\&\fB\-flifetime\-dse=0\fR is equivalent to \fB\-fno\-lifetime\-dse\fR.
+.IP "\fB\-flive\-range\-shrinkage\fR" 4
+.IX Item "-flive-range-shrinkage"
+Attempt to decrease register pressure through register live range
+shrinkage.  This is helpful for fast processors with small or moderate
+size register sets.
+.IP "\fB\-fira\-algorithm=\fR\fIalgorithm\fR" 4
+.IX Item "-fira-algorithm=algorithm"
+Use the specified coloring algorithm for the integrated register
+allocator.  The \fIalgorithm\fR argument can be \fBpriority\fR, which
+specifies Chow's priority coloring, or \fB\s-1CB\s0\fR, which specifies
+Chaitin-Briggs coloring.  Chaitin-Briggs coloring is not implemented
+for all architectures, but for those targets that do support it, it is
+the default because it generates better code.
+.IP "\fB\-fira\-region=\fR\fIregion\fR" 4
+.IX Item "-fira-region=region"
+Use specified regions for the integrated register allocator.  The
+\&\fIregion\fR argument should be one of the following:
+.RS 4
+.IP "\fBall\fR" 4
+.IX Item "all"
+Use all loops as register allocation regions.
+This can give the best results for machines with a small and/or
+irregular register set.
+.IP "\fBmixed\fR" 4
+.IX Item "mixed"
+Use all loops except for loops with small register pressure 
+as the regions.  This value usually gives
+the best results in most cases and for most architectures,
+and is enabled by default when compiling with optimization for speed
+(\fB\-O\fR, \fB\-O2\fR, ...).
+.IP "\fBone\fR" 4
+.IX Item "one"
+Use all functions as a single region.  
+This typically results in the smallest code size, and is enabled by default for
+\&\fB\-Os\fR or \fB\-O0\fR.
+.RE
+.RS 4
+.RE
+.IP "\fB\-fira\-hoist\-pressure\fR" 4
+.IX Item "-fira-hoist-pressure"
+Use \s-1IRA\s0 to evaluate register pressure in the code hoisting pass for
+decisions to hoist expressions.  This option usually results in smaller
+code, but it can slow the compiler down.
+.Sp
+This option is enabled at level \fB\-Os\fR for all targets.
+.IP "\fB\-fira\-loop\-pressure\fR" 4
+.IX Item "-fira-loop-pressure"
+Use \s-1IRA\s0 to evaluate register pressure in loops for decisions to move
+loop invariants.  This option usually results in generation
+of faster and smaller code on machines with large register files (>= 32
+registers), but it can slow the compiler down.
+.Sp
+This option is enabled at level \fB\-O3\fR for some targets.
+.IP "\fB\-fno\-ira\-share\-save\-slots\fR" 4
+.IX Item "-fno-ira-share-save-slots"
+Disable sharing of stack slots used for saving call-used hard
+registers living through a call.  Each hard register gets a
+separate stack slot, and as a result function stack frames are
+larger.
+.IP "\fB\-fno\-ira\-share\-spill\-slots\fR" 4
+.IX Item "-fno-ira-share-spill-slots"
+Disable sharing of stack slots allocated for pseudo-registers.  Each
+pseudo-register that does not get a hard register gets a separate
+stack slot, and as a result function stack frames are larger.
+.IP "\fB\-flra\-remat\fR" 4
+.IX Item "-flra-remat"
+Enable CFG-sensitive rematerialization in \s-1LRA.\s0  Instead of loading
+values of spilled pseudos, \s-1LRA\s0 tries to rematerialize (recalculate)
+values if it is profitable.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fdelayed\-branch\fR" 4
+.IX Item "-fdelayed-branch"
+If supported for the target machine, attempt to reorder instructions
+to exploit instruction slots available after delayed branch
+instructions.
+.Sp
+Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR,
+but not at \fB\-Og\fR.
+.IP "\fB\-fschedule\-insns\fR" 4
+.IX Item "-fschedule-insns"
+If supported for the target machine, attempt to reorder instructions to
+eliminate execution stalls due to required data being unavailable.  This
+helps machines that have slow floating point or memory load instructions
+by allowing other instructions to be issued until the result of the load
+or floating-point instruction is required.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
+.IP "\fB\-fschedule\-insns2\fR" 4
+.IX Item "-fschedule-insns2"
+Similar to \fB\-fschedule\-insns\fR, but requests an additional pass of
+instruction scheduling after register allocation has been done.  This is
+especially useful on machines with a relatively small number of
+registers and where memory load instructions take more than one cycle.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fno\-sched\-interblock\fR" 4
+.IX Item "-fno-sched-interblock"
+Disable instruction scheduling across basic blocks, which
+is normally enabled when scheduling before register allocation, i.e.
+with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
+.IP "\fB\-fno\-sched\-spec\fR" 4
+.IX Item "-fno-sched-spec"
+Disable speculative motion of non-load instructions, which
+is normally enabled when scheduling before register allocation, i.e.
+with \fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-pressure\fR" 4
+.IX Item "-fsched-pressure"
+Enable register pressure sensitive insn scheduling before register
+allocation.  This only makes sense when scheduling before register
+allocation is enabled, i.e. with \fB\-fschedule\-insns\fR or at
+\&\fB\-O2\fR or higher.  Usage of this option can improve the
+generated code and decrease its size by preventing register pressure
+increase above the number of available hard registers and subsequent
+spills in register allocation.
+.IP "\fB\-fsched\-spec\-load\fR" 4
+.IX Item "-fsched-spec-load"
+Allow speculative motion of some load instructions.  This only makes
+sense when scheduling before register allocation, i.e. with
+\&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-spec\-load\-dangerous\fR" 4
+.IX Item "-fsched-spec-load-dangerous"
+Allow speculative motion of more load instructions.  This only makes
+sense when scheduling before register allocation, i.e. with
+\&\fB\-fschedule\-insns\fR or at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-stalled\-insns\fR" 4
+.IX Item "-fsched-stalled-insns"
+.PD 0
+.IP "\fB\-fsched\-stalled\-insns=\fR\fIn\fR" 4
+.IX Item "-fsched-stalled-insns=n"
+.PD
+Define how many insns (if any) can be moved prematurely from the queue
+of stalled insns into the ready list during the second scheduling pass.
+\&\fB\-fno\-sched\-stalled\-insns\fR means that no insns are moved
+prematurely, \fB\-fsched\-stalled\-insns=0\fR means there is no limit
+on how many queued insns can be moved prematurely.
+\&\fB\-fsched\-stalled\-insns\fR without a value is equivalent to
+\&\fB\-fsched\-stalled\-insns=1\fR.
+.IP "\fB\-fsched\-stalled\-insns\-dep\fR" 4
+.IX Item "-fsched-stalled-insns-dep"
+.PD 0
+.IP "\fB\-fsched\-stalled\-insns\-dep=\fR\fIn\fR" 4
+.IX Item "-fsched-stalled-insns-dep=n"
+.PD
+Define how many insn groups (cycles) are examined for a dependency
+on a stalled insn that is a candidate for premature removal from the queue
+of stalled insns.  This has an effect only during the second scheduling pass,
+and only if \fB\-fsched\-stalled\-insns\fR is used.
+\&\fB\-fno\-sched\-stalled\-insns\-dep\fR is equivalent to
+\&\fB\-fsched\-stalled\-insns\-dep=0\fR.
+\&\fB\-fsched\-stalled\-insns\-dep\fR without a value is equivalent to
+\&\fB\-fsched\-stalled\-insns\-dep=1\fR.
+.IP "\fB\-fsched2\-use\-superblocks\fR" 4
+.IX Item "-fsched2-use-superblocks"
+When scheduling after register allocation, use superblock scheduling.
+This allows motion across basic block boundaries,
+resulting in faster schedules.  This option is experimental, as not all machine
+descriptions used by \s-1GCC\s0 model the \s-1CPU\s0 closely enough to avoid unreliable
+results from the algorithm.
+.Sp
+This only makes sense when scheduling after register allocation, i.e. with
+\&\fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-group\-heuristic\fR" 4
+.IX Item "-fsched-group-heuristic"
+Enable the group heuristic in the scheduler.  This heuristic favors
+the instruction that belongs to a schedule group.  This is enabled
+by default when scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
+or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-critical\-path\-heuristic\fR" 4
+.IX Item "-fsched-critical-path-heuristic"
+Enable the critical-path heuristic in the scheduler.  This heuristic favors
+instructions on the critical path.  This is enabled by default when
+scheduling is enabled, i.e. with \fB\-fschedule\-insns\fR
+or \fB\-fschedule\-insns2\fR or at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-spec\-insn\-heuristic\fR" 4
+.IX Item "-fsched-spec-insn-heuristic"
+Enable the speculative instruction heuristic in the scheduler.  This
+heuristic favors speculative instructions with greater dependency weakness.
+This is enabled by default when scheduling is enabled, i.e.
+with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR
+or at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-rank\-heuristic\fR" 4
+.IX Item "-fsched-rank-heuristic"
+Enable the rank heuristic in the scheduler.  This heuristic favors
+the instruction belonging to a basic block with greater size or frequency.
+This is enabled by default when scheduling is enabled, i.e.
+with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
+at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-last\-insn\-heuristic\fR" 4
+.IX Item "-fsched-last-insn-heuristic"
+Enable the last-instruction heuristic in the scheduler.  This heuristic
+favors the instruction that is less dependent on the last instruction
+scheduled.  This is enabled by default when scheduling is enabled,
+i.e. with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
+at \fB\-O2\fR or higher.
+.IP "\fB\-fsched\-dep\-count\-heuristic\fR" 4
+.IX Item "-fsched-dep-count-heuristic"
+Enable the dependent-count heuristic in the scheduler.  This heuristic
+favors the instruction that has more instructions depending on it.
+This is enabled by default when scheduling is enabled, i.e.
+with \fB\-fschedule\-insns\fR or \fB\-fschedule\-insns2\fR or
+at \fB\-O2\fR or higher.
+.IP "\fB\-freschedule\-modulo\-scheduled\-loops\fR" 4
+.IX Item "-freschedule-modulo-scheduled-loops"
+Modulo scheduling is performed before traditional scheduling.  If a loop
+is modulo scheduled, later scheduling passes may change its schedule.  
+Use this option to control that behavior.
+.IP "\fB\-fselective\-scheduling\fR" 4
+.IX Item "-fselective-scheduling"
+Schedule instructions using selective scheduling algorithm.  Selective
+scheduling runs instead of the first scheduler pass.
+.IP "\fB\-fselective\-scheduling2\fR" 4
+.IX Item "-fselective-scheduling2"
+Schedule instructions using selective scheduling algorithm.  Selective
+scheduling runs instead of the second scheduler pass.
+.IP "\fB\-fsel\-sched\-pipelining\fR" 4
+.IX Item "-fsel-sched-pipelining"
+Enable software pipelining of innermost loops during selective scheduling.
+This option has no effect unless one of \fB\-fselective\-scheduling\fR or
+\&\fB\-fselective\-scheduling2\fR is turned on.
+.IP "\fB\-fsel\-sched\-pipelining\-outer\-loops\fR" 4
+.IX Item "-fsel-sched-pipelining-outer-loops"
+When pipelining loops during selective scheduling, also pipeline outer loops.
+This option has no effect unless \fB\-fsel\-sched\-pipelining\fR is turned on.
+.IP "\fB\-fsemantic\-interposition\fR" 4
+.IX Item "-fsemantic-interposition"
+Some object formats, like \s-1ELF,\s0 allow interposing of symbols by the 
+dynamic linker.
+This means that for symbols exported from the \s-1DSO,\s0 the compiler cannot perform
+interprocedural propagation, inlining and other optimizations in anticipation
+that the function or variable in question may change. While this feature is
+useful, for example, to rewrite memory allocation functions by a debugging
+implementation, it is expensive in the terms of code quality.
+With \fB\-fno\-semantic\-interposition\fR the compiler assumes that 
+if interposition happens for functions the overwriting function will have 
+precisely the same semantics (and side effects). 
+Similarly if interposition happens
+for variables, the constructor of the variable will be the same. The flag
+has no effect for functions explicitly declared inline 
+(where it is never allowed for interposition to change semantics) 
+and for symbols explicitly declared weak.
+.IP "\fB\-fshrink\-wrap\fR" 4
+.IX Item "-fshrink-wrap"
+Emit function prologues only before parts of the function that need it,
+rather than at the top of the function.  This flag is enabled by default at
+\&\fB\-O\fR and higher.
+.IP "\fB\-fshrink\-wrap\-separate\fR" 4
+.IX Item "-fshrink-wrap-separate"
+Shrink-wrap separate parts of the prologue and epilogue separately, so that
+those parts are only executed when needed.
+This option is on by default, but has no effect unless \fB\-fshrink\-wrap\fR
+is also turned on and the target supports this.
+.IP "\fB\-fcaller\-saves\fR" 4
+.IX Item "-fcaller-saves"
+Enable allocation of values to registers that are clobbered by
+function calls, by emitting extra instructions to save and restore the
+registers around such calls.  Such allocation is done only when it
+seems to result in better code.
+.Sp
+This option is always enabled by default on certain machines, usually
+those which have no call-preserved registers to use instead.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fcombine\-stack\-adjustments\fR" 4
+.IX Item "-fcombine-stack-adjustments"
+Tracks stack adjustments (pushes and pops) and stack memory references
+and then tries to find ways to combine them.
+.Sp
+Enabled by default at \fB\-O1\fR and higher.
+.IP "\fB\-fipa\-ra\fR" 4
+.IX Item "-fipa-ra"
+Use caller save registers for allocation if those registers are not used by
+any called function.  In that case it is not necessary to save and restore
+them around calls.  This is only possible if called functions are part of
+same compilation unit as current function and they are compiled before it.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR, however the option
+is disabled if generated code will be instrumented for profiling
+(\fB\-p\fR, or \fB\-pg\fR) or if callee's register usage cannot be known
+exactly (this happens on targets that do not expose prologues
+and epilogues in \s-1RTL\s0).
+.IP "\fB\-fconserve\-stack\fR" 4
+.IX Item "-fconserve-stack"
+Attempt to minimize stack usage.  The compiler attempts to use less
+stack space, even if that makes the program slower.  This option
+implies setting the \fBlarge-stack-frame\fR parameter to 100
+and the \fBlarge-stack-frame-growth\fR parameter to 400.
+.IP "\fB\-ftree\-reassoc\fR" 4
+.IX Item "-ftree-reassoc"
+Perform reassociation on trees.  This flag is enabled by default
+at \fB\-O\fR and higher.
+.IP "\fB\-fcode\-hoisting\fR" 4
+.IX Item "-fcode-hoisting"
+Perform code hoisting.  Code hoisting tries to move the
+evaluation of expressions executed on all paths to the function exit
+as early as possible.  This is especially useful as a code size
+optimization, but it often helps for code speed as well.
+This flag is enabled by default at \fB\-O2\fR and higher.
+.IP "\fB\-ftree\-pre\fR" 4
+.IX Item "-ftree-pre"
+Perform partial redundancy elimination (\s-1PRE\s0) on trees.  This flag is
+enabled by default at \fB\-O2\fR and \fB\-O3\fR.
+.IP "\fB\-ftree\-partial\-pre\fR" 4
+.IX Item "-ftree-partial-pre"
+Make partial redundancy elimination (\s-1PRE\s0) more aggressive.  This flag is
+enabled by default at \fB\-O3\fR.
+.IP "\fB\-ftree\-forwprop\fR" 4
+.IX Item "-ftree-forwprop"
+Perform forward propagation on trees.  This flag is enabled by default
+at \fB\-O\fR and higher.
+.IP "\fB\-ftree\-fre\fR" 4
+.IX Item "-ftree-fre"
+Perform full redundancy elimination (\s-1FRE\s0) on trees.  The difference
+between \s-1FRE\s0 and \s-1PRE\s0 is that \s-1FRE\s0 only considers expressions
+that are computed on all paths leading to the redundant computation.
+This analysis is faster than \s-1PRE,\s0 though it exposes fewer redundancies.
+This flag is enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-ftree\-phiprop\fR" 4
+.IX Item "-ftree-phiprop"
+Perform hoisting of loads from conditional pointers on trees.  This
+pass is enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-fhoist\-adjacent\-loads\fR" 4
+.IX Item "-fhoist-adjacent-loads"
+Speculatively hoist loads from both branches of an if-then-else if the
+loads are from adjacent locations in the same structure and the target
+architecture has a conditional move instruction.  This flag is enabled
+by default at \fB\-O2\fR and higher.
+.IP "\fB\-ftree\-copy\-prop\fR" 4
+.IX Item "-ftree-copy-prop"
+Perform copy propagation on trees.  This pass eliminates unnecessary
+copy operations.  This flag is enabled by default at \fB\-O\fR and
+higher.
+.IP "\fB\-fipa\-pure\-const\fR" 4
+.IX Item "-fipa-pure-const"
+Discover which functions are pure or constant.
+Enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-fipa\-reference\fR" 4
+.IX Item "-fipa-reference"
+Discover which static variables do not escape the
+compilation unit.
+Enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-fipa\-reference\-addressable\fR" 4
+.IX Item "-fipa-reference-addressable"
+Discover read-only, write-only and non-addressable static variables.
+Enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-fipa\-stack\-alignment\fR" 4
+.IX Item "-fipa-stack-alignment"
+Reduce stack alignment on call sites if possible.
+Enabled by default.
+.IP "\fB\-fipa\-pta\fR" 4
+.IX Item "-fipa-pta"
+Perform interprocedural pointer analysis and interprocedural modification
+and reference analysis.  This option can cause excessive memory and
+compile-time usage on large compilation units.  It is not enabled by
+default at any optimization level.
+.IP "\fB\-fipa\-profile\fR" 4
+.IX Item "-fipa-profile"
+Perform interprocedural profile propagation.  The functions called only from
+cold functions are marked as cold. Also functions executed once (such as
+\&\f(CW\*(C`cold\*(C'\fR, \f(CW\*(C`noreturn\*(C'\fR, static constructors or destructors) are identified. Cold
+functions and loop less parts of functions executed once are then optimized for
+size.
+Enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-fipa\-cp\fR" 4
+.IX Item "-fipa-cp"
+Perform interprocedural constant propagation.
+This optimization analyzes the program to determine when values passed
+to functions are constants and then optimizes accordingly.
+This optimization can substantially increase performance
+if the application has constants passed to functions.
+This flag is enabled by default at \fB\-O2\fR, \fB\-Os\fR and \fB\-O3\fR.
+It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+.IP "\fB\-fipa\-cp\-clone\fR" 4
+.IX Item "-fipa-cp-clone"
+Perform function cloning to make interprocedural constant propagation stronger.
+When enabled, interprocedural constant propagation performs function cloning
+when externally visible function can be called with constant arguments.
+Because this optimization can create multiple copies of functions,
+it may significantly increase code size
+(see \fB\-\-param ipcp\-unit\-growth=\fR\fIvalue\fR).
+This flag is enabled by default at \fB\-O3\fR.
+It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+.IP "\fB\-fipa\-bit\-cp\fR" 4
+.IX Item "-fipa-bit-cp"
+When enabled, perform interprocedural bitwise constant
+propagation. This flag is enabled by default at \fB\-O2\fR and
+by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+It requires that \fB\-fipa\-cp\fR is enabled.
+.IP "\fB\-fipa\-vrp\fR" 4
+.IX Item "-fipa-vrp"
+When enabled, perform interprocedural propagation of value
+ranges. This flag is enabled by default at \fB\-O2\fR. It requires
+that \fB\-fipa\-cp\fR is enabled.
+.IP "\fB\-fipa\-icf\fR" 4
+.IX Item "-fipa-icf"
+Perform Identical Code Folding for functions and read-only variables.
+The optimization reduces code size and may disturb unwind stacks by replacing
+a function by equivalent one with a different name. The optimization works
+more effectively with link-time optimization enabled.
+.Sp
+Although the behavior is similar to the Gold Linker's \s-1ICF\s0 optimization, \s-1GCC ICF\s0
+works on different levels and thus the optimizations are not same \- there are
+equivalences that are found only by \s-1GCC\s0 and equivalences found only by Gold.
+.Sp
+This flag is enabled by default at \fB\-O2\fR and \fB\-Os\fR.
+.IP "\fB\-flive\-patching=\fR\fIlevel\fR" 4
+.IX Item "-flive-patching=level"
+Control \s-1GCC\s0's optimizations to produce output suitable for live-patching.
+.Sp
+If the compiler's optimization uses a function's body or information extracted
+from its body to optimize/change another function, the latter is called an
+impacted function of the former.  If a function is patched, its impacted
+functions should be patched too.
+.Sp
+The impacted functions are determined by the compiler's interprocedural
+optimizations.  For example, a caller is impacted when inlining a function
+into its caller,
+cloning a function and changing its caller to call this new clone,
+or extracting a function's pureness/constness information to optimize
+its direct or indirect callers, etc.
+.Sp
+Usually, the more \s-1IPA\s0 optimizations enabled, the larger the number of
+impacted functions for each function.  In order to control the number of
+impacted functions and more easily compute the list of impacted function,
+\&\s-1IPA\s0 optimizations can be partially enabled at two different levels.
+.Sp
+The \fIlevel\fR argument should be one of the following:
+.RS 4
+.IP "\fBinline-clone\fR" 4
+.IX Item "inline-clone"
+Only enable inlining and cloning optimizations, which includes inlining,
+cloning, interprocedural scalar replacement of aggregates and partial inlining.
+As a result, when patching a function, all its callers and its clones'
+callers are impacted, therefore need to be patched as well.
+.Sp
+\&\fB\-flive\-patching=inline\-clone\fR disables the following optimization flags:
+\&\fB\-fwhole\-program  \-fipa\-pta  \-fipa\-reference  \-fipa\-ra 
+\&\-fipa\-icf  \-fipa\-icf\-functions  \-fipa\-icf\-variables 
+\&\-fipa\-bit\-cp  \-fipa\-vrp  \-fipa\-pure\-const  \-fipa\-reference\-addressable 
+\&\-fipa\-stack\-alignment\fR
+.IP "\fBinline-only-static\fR" 4
+.IX Item "inline-only-static"
+Only enable inlining of static functions.
+As a result, when patching a static function, all its callers are impacted
+and so need to be patched as well.
+.Sp
+In addition to all the flags that \fB\-flive\-patching=inline\-clone\fR
+disables,
+\&\fB\-flive\-patching=inline\-only\-static\fR disables the following additional
+optimization flags:
+\&\fB\-fipa\-cp\-clone  \-fipa\-sra  \-fpartial\-inlining  \-fipa\-cp\fR
+.RE
+.RS 4
+.Sp
+When \fB\-flive\-patching\fR is specified without any value, the default value
+is \fIinline-clone\fR.
+.Sp
+This flag is disabled by default.
+.Sp
+Note that \fB\-flive\-patching\fR is not supported with link-time optimization
+(\fB\-flto\fR).
+.RE
+.IP "\fB\-fisolate\-erroneous\-paths\-dereference\fR" 4
+.IX Item "-fisolate-erroneous-paths-dereference"
+Detect paths that trigger erroneous or undefined behavior due to
+dereferencing a null pointer.  Isolate those paths from the main control
+flow and turn the statement with erroneous or undefined behavior into a trap.
+This flag is enabled by default at \fB\-O2\fR and higher and depends on
+\&\fB\-fdelete\-null\-pointer\-checks\fR also being enabled.
+.IP "\fB\-fisolate\-erroneous\-paths\-attribute\fR" 4
+.IX Item "-fisolate-erroneous-paths-attribute"
+Detect paths that trigger erroneous or undefined behavior due to a null value
+being used in a way forbidden by a \f(CW\*(C`returns_nonnull\*(C'\fR or \f(CW\*(C`nonnull\*(C'\fR
+attribute.  Isolate those paths from the main control flow and turn the
+statement with erroneous or undefined behavior into a trap.  This is not
+currently enabled, but may be enabled by \fB\-O2\fR in the future.
+.IP "\fB\-ftree\-sink\fR" 4
+.IX Item "-ftree-sink"
+Perform forward store motion on trees.  This flag is
+enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-ftree\-bit\-ccp\fR" 4
+.IX Item "-ftree-bit-ccp"
+Perform sparse conditional bit constant propagation on trees and propagate
+pointer alignment information.
+This pass only operates on local scalar variables and is enabled by default
+at \fB\-O1\fR and higher, except for \fB\-Og\fR.
+It requires that \fB\-ftree\-ccp\fR is enabled.
+.IP "\fB\-ftree\-ccp\fR" 4
+.IX Item "-ftree-ccp"
+Perform sparse conditional constant propagation (\s-1CCP\s0) on trees.  This
+pass only operates on local scalar variables and is enabled by default
+at \fB\-O\fR and higher.
+.IP "\fB\-fssa\-backprop\fR" 4
+.IX Item "-fssa-backprop"
+Propagate information about uses of a value up the definition chain
+in order to simplify the definitions.  For example, this pass strips
+sign operations if the sign of a value never matters.  The flag is
+enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-fssa\-phiopt\fR" 4
+.IX Item "-fssa-phiopt"
+Perform pattern matching on \s-1SSA PHI\s0 nodes to optimize conditional
+code.  This pass is enabled by default at \fB\-O1\fR and higher,
+except for \fB\-Og\fR.
+.IP "\fB\-ftree\-switch\-conversion\fR" 4
+.IX Item "-ftree-switch-conversion"
+Perform conversion of simple initializations in a switch to
+initializations from a scalar array.  This flag is enabled by default
+at \fB\-O2\fR and higher.
+.IP "\fB\-ftree\-tail\-merge\fR" 4
+.IX Item "-ftree-tail-merge"
+Look for identical code sequences.  When found, replace one with a jump to the
+other.  This optimization is known as tail merging or cross jumping.  This flag
+is enabled by default at \fB\-O2\fR and higher.  The compilation time
+in this pass can
+be limited using \fBmax-tail-merge-comparisons\fR parameter and
+\&\fBmax-tail-merge-iterations\fR parameter.
+.IP "\fB\-ftree\-dce\fR" 4
+.IX Item "-ftree-dce"
+Perform dead code elimination (\s-1DCE\s0) on trees.  This flag is enabled by
+default at \fB\-O\fR and higher.
+.IP "\fB\-ftree\-builtin\-call\-dce\fR" 4
+.IX Item "-ftree-builtin-call-dce"
+Perform conditional dead code elimination (\s-1DCE\s0) for calls to built-in functions
+that may set \f(CW\*(C`errno\*(C'\fR but are otherwise free of side effects.  This flag is
+enabled by default at \fB\-O2\fR and higher if \fB\-Os\fR is not also
+specified.
+.IP "\fB\-ftree\-dominator\-opts\fR" 4
+.IX Item "-ftree-dominator-opts"
+Perform a variety of simple scalar cleanups (constant/copy
+propagation, redundancy elimination, range propagation and expression
+simplification) based on a dominator tree traversal.  This also
+performs jump threading (to reduce jumps to jumps). This flag is
+enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-ftree\-dse\fR" 4
+.IX Item "-ftree-dse"
+Perform dead store elimination (\s-1DSE\s0) on trees.  A dead store is a store into
+a memory location that is later overwritten by another store without
+any intervening loads.  In this case the earlier store can be deleted.  This
+flag is enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-ftree\-ch\fR" 4
+.IX Item "-ftree-ch"
+Perform loop header copying on trees.  This is beneficial since it increases
+effectiveness of code motion optimizations.  It also saves one jump.  This flag
+is enabled by default at \fB\-O\fR and higher.  It is not enabled
+for \fB\-Os\fR, since it usually increases code size.
+.IP "\fB\-ftree\-loop\-optimize\fR" 4
+.IX Item "-ftree-loop-optimize"
+Perform loop optimizations on trees.  This flag is enabled by default
+at \fB\-O\fR and higher.
+.IP "\fB\-ftree\-loop\-linear\fR" 4
+.IX Item "-ftree-loop-linear"
+.PD 0
+.IP "\fB\-floop\-strip\-mine\fR" 4
+.IX Item "-floop-strip-mine"
+.IP "\fB\-floop\-block\fR" 4
+.IX Item "-floop-block"
+.PD
+Perform loop nest optimizations.  Same as
+\&\fB\-floop\-nest\-optimize\fR.  To use this code transformation, \s-1GCC\s0 has
+to be configured with \fB\-\-with\-isl\fR to enable the Graphite loop
+transformation infrastructure.
+.IP "\fB\-fgraphite\-identity\fR" 4
+.IX Item "-fgraphite-identity"
+Enable the identity transformation for graphite.  For every SCoP we generate
+the polyhedral representation and transform it back to gimple.  Using
+\&\fB\-fgraphite\-identity\fR we can check the costs or benefits of the
+\&\s-1GIMPLE\s0 \-> \s-1GRAPHITE\s0 \-> \s-1GIMPLE\s0 transformation.  Some minimal optimizations
+are also performed by the code generator isl, like index splitting and
+dead code elimination in loops.
+.IP "\fB\-floop\-nest\-optimize\fR" 4
+.IX Item "-floop-nest-optimize"
+Enable the isl based loop nest optimizer.  This is a generic loop nest
+optimizer based on the Pluto optimization algorithms.  It calculates a loop
+structure optimized for data-locality and parallelism.  This option
+is experimental.
+.IP "\fB\-floop\-parallelize\-all\fR" 4
+.IX Item "-floop-parallelize-all"
+Use the Graphite data dependence analysis to identify loops that can
+be parallelized.  Parallelize all the loops that can be analyzed to
+not contain loop carried dependences without checking that it is
+profitable to parallelize the loops.
+.IP "\fB\-ftree\-coalesce\-vars\fR" 4
+.IX Item "-ftree-coalesce-vars"
+While transforming the program out of the \s-1SSA\s0 representation, attempt to
+reduce copying by coalescing versions of different user-defined
+variables, instead of just compiler temporaries.  This may severely
+limit the ability to debug an optimized program compiled with
+\&\fB\-fno\-var\-tracking\-assignments\fR.  In the negated form, this flag
+prevents \s-1SSA\s0 coalescing of user variables.  This option is enabled by
+default if optimization is enabled, and it does very little otherwise.
+.IP "\fB\-ftree\-loop\-if\-convert\fR" 4
+.IX Item "-ftree-loop-if-convert"
+Attempt to transform conditional jumps in the innermost loops to
+branch-less equivalents.  The intent is to remove control-flow from
+the innermost loops in order to improve the ability of the
+vectorization pass to handle these loops.  This is enabled by default
+if vectorization is enabled.
+.IP "\fB\-ftree\-loop\-distribution\fR" 4
+.IX Item "-ftree-loop-distribution"
+Perform loop distribution.  This flag can improve cache performance on
+big loop bodies and allow further loop optimizations, like
+parallelization or vectorization, to take place.  For example, the loop
+.Sp
+.Vb 4
+\&        DO I = 1, N
+\&          A(I) = B(I) + C
+\&          D(I) = E(I) * F
+\&        ENDDO
+.Ve
+.Sp
+is transformed to
+.Sp
+.Vb 6
+\&        DO I = 1, N
+\&           A(I) = B(I) + C
+\&        ENDDO
+\&        DO I = 1, N
+\&           D(I) = E(I) * F
+\&        ENDDO
+.Ve
+.Sp
+This flag is enabled by default at \fB\-O3\fR.
+It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+.IP "\fB\-ftree\-loop\-distribute\-patterns\fR" 4
+.IX Item "-ftree-loop-distribute-patterns"
+Perform loop distribution of patterns that can be code generated with
+calls to a library.  This flag is enabled by default at \fB\-O3\fR, and
+by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+.Sp
+This pass distributes the initialization loops and generates a call to
+memset zero.  For example, the loop
+.Sp
+.Vb 4
+\&        DO I = 1, N
+\&          A(I) = 0
+\&          B(I) = A(I) + I
+\&        ENDDO
+.Ve
+.Sp
+is transformed to
+.Sp
+.Vb 6
+\&        DO I = 1, N
+\&           A(I) = 0
+\&        ENDDO
+\&        DO I = 1, N
+\&           B(I) = A(I) + I
+\&        ENDDO
+.Ve
+.Sp
+and the initialization loop is transformed into a call to memset zero.
+This flag is enabled by default at \fB\-O3\fR.
+It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+.IP "\fB\-floop\-interchange\fR" 4
+.IX Item "-floop-interchange"
+Perform loop interchange outside of graphite.  This flag can improve cache
+performance on loop nest and allow further loop optimizations, like
+vectorization, to take place.  For example, the loop
+.Sp
+.Vb 4
+\&        for (int i = 0; i < N; i++)
+\&          for (int j = 0; j < N; j++)
+\&            for (int k = 0; k < N; k++)
+\&              c[i][j] = c[i][j] + a[i][k]*b[k][j];
+.Ve
+.Sp
+is transformed to
+.Sp
+.Vb 4
+\&        for (int i = 0; i < N; i++)
+\&          for (int k = 0; k < N; k++)
+\&            for (int j = 0; j < N; j++)
+\&              c[i][j] = c[i][j] + a[i][k]*b[k][j];
+.Ve
+.Sp
+This flag is enabled by default at \fB\-O3\fR.
+It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+.IP "\fB\-floop\-unroll\-and\-jam\fR" 4
+.IX Item "-floop-unroll-and-jam"
+Apply unroll and jam transformations on feasible loops.  In a loop
+nest this unrolls the outer loop by some factor and fuses the resulting
+multiple inner loops.  This flag is enabled by default at \fB\-O3\fR.
+It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+.IP "\fB\-ftree\-loop\-im\fR" 4
+.IX Item "-ftree-loop-im"
+Perform loop invariant motion on trees.  This pass moves only invariants that
+are hard to handle at \s-1RTL\s0 level (function calls, operations that expand to
+nontrivial sequences of insns).  With \fB\-funswitch\-loops\fR it also moves
+operands of conditions that are invariant out of the loop, so that we can use
+just trivial invariantness analysis in loop unswitching.  The pass also includes
+store motion.
+.IP "\fB\-ftree\-loop\-ivcanon\fR" 4
+.IX Item "-ftree-loop-ivcanon"
+Create a canonical counter for number of iterations in loops for which
+determining number of iterations requires complicated analysis.  Later
+optimizations then may determine the number easily.  Useful especially
+in connection with unrolling.
+.IP "\fB\-ftree\-scev\-cprop\fR" 4
+.IX Item "-ftree-scev-cprop"
+Perform final value replacement.  If a variable is modified in a loop
+in such a way that its value when exiting the loop can be determined using
+only its initial value and the number of loop iterations, replace uses of
+the final value by such a computation, provided it is sufficiently cheap.
+This reduces data dependencies and may allow further simplifications.
+Enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-fivopts\fR" 4
+.IX Item "-fivopts"
+Perform induction variable optimizations (strength reduction, induction
+variable merging and induction variable elimination) on trees.
+.IP "\fB\-ftree\-parallelize\-loops=n\fR" 4
+.IX Item "-ftree-parallelize-loops=n"
+Parallelize loops, i.e., split their iteration space to run in n threads.
+This is only possible for loops whose iterations are independent
+and can be arbitrarily reordered.  The optimization is only
+profitable on multiprocessor machines, for loops that are CPU-intensive,
+rather than constrained e.g. by memory bandwidth.  This option
+implies \fB\-pthread\fR, and thus is only supported on targets
+that have support for \fB\-pthread\fR.
+.IP "\fB\-ftree\-pta\fR" 4
+.IX Item "-ftree-pta"
+Perform function-local points-to analysis on trees.  This flag is
+enabled by default at \fB\-O1\fR and higher, except for \fB\-Og\fR.
+.IP "\fB\-ftree\-sra\fR" 4
+.IX Item "-ftree-sra"
+Perform scalar replacement of aggregates.  This pass replaces structure
+references with scalars to prevent committing structures to memory too
+early.  This flag is enabled by default at \fB\-O1\fR and higher,
+except for \fB\-Og\fR.
+.IP "\fB\-fstore\-merging\fR" 4
+.IX Item "-fstore-merging"
+Perform merging of narrow stores to consecutive memory addresses.  This pass
+merges contiguous stores of immediate values narrower than a word into fewer
+wider stores to reduce the number of instructions.  This is enabled by default
+at \fB\-O2\fR and higher as well as \fB\-Os\fR.
+.IP "\fB\-ftree\-ter\fR" 4
+.IX Item "-ftree-ter"
+Perform temporary expression replacement during the \s-1SSA\-\s0>normal phase.  Single
+use/single def temporaries are replaced at their use location with their
+defining expression.  This results in non-GIMPLE code, but gives the expanders
+much more complex trees to work on resulting in better \s-1RTL\s0 generation.  This is
+enabled by default at \fB\-O\fR and higher.
+.IP "\fB\-ftree\-slsr\fR" 4
+.IX Item "-ftree-slsr"
+Perform straight-line strength reduction on trees.  This recognizes related
+expressions involving multiplications and replaces them by less expensive
+calculations when possible.  This is enabled by default at \fB\-O\fR and
+higher.
+.IP "\fB\-ftree\-vectorize\fR" 4
+.IX Item "-ftree-vectorize"
+Perform vectorization on trees. This flag enables \fB\-ftree\-loop\-vectorize\fR
+and \fB\-ftree\-slp\-vectorize\fR if not explicitly specified.
+.IP "\fB\-ftree\-loop\-vectorize\fR" 4
+.IX Item "-ftree-loop-vectorize"
+Perform loop vectorization on trees. This flag is enabled by default at
+\&\fB\-O3\fR and by \fB\-ftree\-vectorize\fR, \fB\-fprofile\-use\fR,
+and \fB\-fauto\-profile\fR.
+.IP "\fB\-ftree\-slp\-vectorize\fR" 4
+.IX Item "-ftree-slp-vectorize"
+Perform basic block vectorization on trees. This flag is enabled by default at
+\&\fB\-O3\fR and by \fB\-ftree\-vectorize\fR, \fB\-fprofile\-use\fR,
+and \fB\-fauto\-profile\fR.
+.IP "\fB\-fvect\-cost\-model=\fR\fImodel\fR" 4
+.IX Item "-fvect-cost-model=model"
+Alter the cost model used for vectorization.  The \fImodel\fR argument
+should be one of \fBunlimited\fR, \fBdynamic\fR or \fBcheap\fR.
+With the \fBunlimited\fR model the vectorized code-path is assumed
+to be profitable while with the \fBdynamic\fR model a runtime check
+guards the vectorized code-path to enable it only for iteration
+counts that will likely execute faster than when executing the original
+scalar loop.  The \fBcheap\fR model disables vectorization of
+loops where doing so would be cost prohibitive for example due to
+required runtime checks for data dependence or alignment but otherwise
+is equal to the \fBdynamic\fR model.
+The default cost model depends on other optimization flags and is
+either \fBdynamic\fR or \fBcheap\fR.
+.IP "\fB\-fsimd\-cost\-model=\fR\fImodel\fR" 4
+.IX Item "-fsimd-cost-model=model"
+Alter the cost model used for vectorization of loops marked with the OpenMP
+simd directive.  The \fImodel\fR argument should be one of
+\&\fBunlimited\fR, \fBdynamic\fR, \fBcheap\fR.  All values of \fImodel\fR
+have the same meaning as described in \fB\-fvect\-cost\-model\fR and by
+default a cost model defined with \fB\-fvect\-cost\-model\fR is used.
+.IP "\fB\-ftree\-vrp\fR" 4
+.IX Item "-ftree-vrp"
+Perform Value Range Propagation on trees.  This is similar to the
+constant propagation pass, but instead of values, ranges of values are
+propagated.  This allows the optimizers to remove unnecessary range
+checks like array bound checks and null pointer checks.  This is
+enabled by default at \fB\-O2\fR and higher.  Null pointer check
+elimination is only done if \fB\-fdelete\-null\-pointer\-checks\fR is
+enabled.
+.IP "\fB\-fsplit\-paths\fR" 4
+.IX Item "-fsplit-paths"
+Split paths leading to loop backedges.  This can improve dead code
+elimination and common subexpression elimination.  This is enabled by
+default at \fB\-O3\fR and above.
+.IP "\fB\-fsplit\-ivs\-in\-unroller\fR" 4
+.IX Item "-fsplit-ivs-in-unroller"
+Enables expression of values of induction variables in later iterations
+of the unrolled loop using the value in the first iteration.  This breaks
+long dependency chains, thus improving efficiency of the scheduling passes.
+.Sp
+A combination of \fB\-fweb\fR and \s-1CSE\s0 is often sufficient to obtain the
+same effect.  However, that is not reliable in cases where the loop body
+is more complicated than a single basic block.  It also does not work at all
+on some architectures due to restrictions in the \s-1CSE\s0 pass.
+.Sp
+This optimization is enabled by default.
+.IP "\fB\-fvariable\-expansion\-in\-unroller\fR" 4
+.IX Item "-fvariable-expansion-in-unroller"
+With this option, the compiler creates multiple copies of some
+local variables when unrolling a loop, which can result in superior code.
+.IP "\fB\-fpartial\-inlining\fR" 4
+.IX Item "-fpartial-inlining"
+Inline parts of functions.  This option has any effect only
+when inlining itself is turned on by the \fB\-finline\-functions\fR
+or \fB\-finline\-small\-functions\fR options.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fpredictive\-commoning\fR" 4
+.IX Item "-fpredictive-commoning"
+Perform predictive commoning optimization, i.e., reusing computations
+(especially memory loads and stores) performed in previous
+iterations of loops.
+.Sp
+This option is enabled at level \fB\-O3\fR.
+It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+.IP "\fB\-fprefetch\-loop\-arrays\fR" 4
+.IX Item "-fprefetch-loop-arrays"
+If supported by the target machine, generate instructions to prefetch
+memory to improve the performance of loops that access large arrays.
+.Sp
+This option may generate better or worse code; results are highly
+dependent on the structure of loops within the source code.
+.Sp
+Disabled at level \fB\-Os\fR.
+.IP "\fB\-fno\-printf\-return\-value\fR" 4
+.IX Item "-fno-printf-return-value"
+Do not substitute constants for known return value of formatted output
+functions such as \f(CW\*(C`sprintf\*(C'\fR, \f(CW\*(C`snprintf\*(C'\fR, \f(CW\*(C`vsprintf\*(C'\fR, and
+\&\f(CW\*(C`vsnprintf\*(C'\fR (but not \f(CW\*(C`printf\*(C'\fR of \f(CW\*(C`fprintf\*(C'\fR).  This
+transformation allows \s-1GCC\s0 to optimize or even eliminate branches based
+on the known return value of these functions called with arguments that
+are either constant, or whose values are known to be in a range that
+makes determining the exact return value possible.  For example, when
+\&\fB\-fprintf\-return\-value\fR is in effect, both the branch and the
+body of the \f(CW\*(C`if\*(C'\fR statement (but not the call to \f(CW\*(C`snprint\*(C'\fR)
+can be optimized away when \f(CW\*(C`i\*(C'\fR is a 32\-bit or smaller integer
+because the return value is guaranteed to be at most 8.
+.Sp
+.Vb 3
+\&        char buf[9];
+\&        if (snprintf (buf, "%08x", i) >= sizeof buf)
+\&          ...
+.Ve
+.Sp
+The \fB\-fprintf\-return\-value\fR option relies on other optimizations
+and yields best results with \fB\-O2\fR and above.  It works in tandem
+with the \fB\-Wformat\-overflow\fR and \fB\-Wformat\-truncation\fR
+options.  The \fB\-fprintf\-return\-value\fR option is enabled by default.
+.IP "\fB\-fno\-peephole\fR" 4
+.IX Item "-fno-peephole"
+.PD 0
+.IP "\fB\-fno\-peephole2\fR" 4
+.IX Item "-fno-peephole2"
+.PD
+Disable any machine-specific peephole optimizations.  The difference
+between \fB\-fno\-peephole\fR and \fB\-fno\-peephole2\fR is in how they
+are implemented in the compiler; some targets use one, some use the
+other, a few use both.
+.Sp
+\&\fB\-fpeephole\fR is enabled by default.
+\&\fB\-fpeephole2\fR enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fno\-guess\-branch\-probability\fR" 4
+.IX Item "-fno-guess-branch-probability"
+Do not guess branch probabilities using heuristics.
+.Sp
+\&\s-1GCC\s0 uses heuristics to guess branch probabilities if they are
+not provided by profiling feedback (\fB\-fprofile\-arcs\fR).  These
+heuristics are based on the control flow graph.  If some branch probabilities
+are specified by \f(CW\*(C`_\|_builtin_expect\*(C'\fR, then the heuristics are
+used to guess branch probabilities for the rest of the control flow graph,
+taking the \f(CW\*(C`_\|_builtin_expect\*(C'\fR info into account.  The interactions
+between the heuristics and \f(CW\*(C`_\|_builtin_expect\*(C'\fR can be complex, and in
+some cases, it may be useful to disable the heuristics so that the effects
+of \f(CW\*(C`_\|_builtin_expect\*(C'\fR are easier to understand.
+.Sp
+It is also possible to specify expected probability of the expression
+with \f(CW\*(C`_\|_builtin_expect_with_probability\*(C'\fR built-in function.
+.Sp
+The default is \fB\-fguess\-branch\-probability\fR at levels
+\&\fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-freorder\-blocks\fR" 4
+.IX Item "-freorder-blocks"
+Reorder basic blocks in the compiled function in order to reduce number of
+taken branches and improve code locality.
+.Sp
+Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-freorder\-blocks\-algorithm=\fR\fIalgorithm\fR" 4
+.IX Item "-freorder-blocks-algorithm=algorithm"
+Use the specified algorithm for basic block reordering.  The
+\&\fIalgorithm\fR argument can be \fBsimple\fR, which does not increase
+code size (except sometimes due to secondary effects like alignment),
+or \fBstc\fR, the \*(L"software trace cache\*(R" algorithm, which tries to
+put all often executed code together, minimizing the number of branches
+executed by making extra copies of code.
+.Sp
+The default is \fBsimple\fR at levels \fB\-O\fR, \fB\-Os\fR, and
+\&\fBstc\fR at levels \fB\-O2\fR, \fB\-O3\fR.
+.IP "\fB\-freorder\-blocks\-and\-partition\fR" 4
+.IX Item "-freorder-blocks-and-partition"
+In addition to reordering basic blocks in the compiled function, in order
+to reduce number of taken branches, partitions hot and cold basic blocks
+into separate sections of the assembly and \fI.o\fR files, to improve
+paging and cache locality performance.
+.Sp
+This optimization is automatically turned off in the presence of
+exception handling or unwind tables (on targets using setjump/longjump or target specific scheme), for linkonce sections, for functions with a user-defined
+section attribute and on any architecture that does not support named
+sections.  When \fB\-fsplit\-stack\fR is used this option is not
+enabled by default (to avoid linker errors), but may be enabled
+explicitly (if using a working linker).
+.Sp
+Enabled for x86 at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-freorder\-functions\fR" 4
+.IX Item "-freorder-functions"
+Reorder functions in the object file in order to
+improve code locality.  This is implemented by using special
+subsections \f(CW\*(C`.text.hot\*(C'\fR for most frequently executed functions and
+\&\f(CW\*(C`.text.unlikely\*(C'\fR for unlikely executed functions.  Reordering is done by
+the linker so object file format must support named sections and linker must
+place them in a reasonable way.
+.Sp
+This option isn't effective unless you either provide profile feedback
+(see \fB\-fprofile\-arcs\fR for details) or manually annotate functions with 
+\&\f(CW\*(C`hot\*(C'\fR or \f(CW\*(C`cold\*(C'\fR attributes.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fstrict\-aliasing\fR" 4
+.IX Item "-fstrict-aliasing"
+Allow the compiler to assume the strictest aliasing rules applicable to
+the language being compiled.  For C (and \*(C+), this activates
+optimizations based on the type of expressions.  In particular, an
+object of one type is assumed never to reside at the same address as an
+object of a different type, unless the types are almost the same.  For
+example, an \f(CW\*(C`unsigned int\*(C'\fR can alias an \f(CW\*(C`int\*(C'\fR, but not a
+\&\f(CW\*(C`void*\*(C'\fR or a \f(CW\*(C`double\*(C'\fR.  A character type may alias any other
+type.
+.Sp
+Pay special attention to code like this:
+.Sp
+.Vb 4
+\&        union a_union {
+\&          int i;
+\&          double d;
+\&        };
+\&        
+\&        int f() {
+\&          union a_union t;
+\&          t.d = 3.0;
+\&          return t.i;
+\&        }
+.Ve
+.Sp
+The practice of reading from a different union member than the one most
+recently written to (called \*(L"type-punning\*(R") is common.  Even with
+\&\fB\-fstrict\-aliasing\fR, type-punning is allowed, provided the memory
+is accessed through the union type.  So, the code above works as
+expected.    However, this code might not:
+.Sp
+.Vb 7
+\&        int f() {
+\&          union a_union t;
+\&          int* ip;
+\&          t.d = 3.0;
+\&          ip = &t.i;
+\&          return *ip;
+\&        }
+.Ve
+.Sp
+Similarly, access by taking the address, casting the resulting pointer
+and dereferencing the result has undefined behavior, even if the cast
+uses a union type, e.g.:
+.Sp
+.Vb 4
+\&        int f() {
+\&          double d = 3.0;
+\&          return ((union a_union *) &d)\->i;
+\&        }
+.Ve
+.Sp
+The \fB\-fstrict\-aliasing\fR option is enabled at levels
+\&\fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-falign\-functions\fR" 4
+.IX Item "-falign-functions"
+.PD 0
+.IP "\fB\-falign\-functions=\fR\fIn\fR" 4
+.IX Item "-falign-functions=n"
+.IP "\fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR" 4
+.IX Item "-falign-functions=n:m"
+.IP "\fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR" 4
+.IX Item "-falign-functions=n:m:n2"
+.IP "\fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR" 4
+.IX Item "-falign-functions=n:m:n2:m2"
+.PD
+Align the start of functions to the next power-of-two greater than
+\&\fIn\fR, skipping up to \fIm\fR\-1 bytes.  This ensures that at least
+the first \fIm\fR bytes of the function can be fetched by the \s-1CPU\s0
+without crossing an \fIn\fR\-byte alignment boundary.
+.Sp
+If \fIm\fR is not specified, it defaults to \fIn\fR.
+.Sp
+Examples: \fB\-falign\-functions=32\fR aligns functions to the next
+32\-byte boundary, \fB\-falign\-functions=24\fR aligns to the next
+32\-byte boundary only if this can be done by skipping 23 bytes or less,
+\&\fB\-falign\-functions=32:7\fR aligns to the next
+32\-byte boundary only if this can be done by skipping 6 bytes or less.
+.Sp
+The second pair of \fIn2\fR:\fIm2\fR values allows you to specify
+a secondary alignment: \fB\-falign\-functions=64:7:32:3\fR aligns to
+the next 64\-byte boundary if this can be done by skipping 6 bytes or less,
+otherwise aligns to the next 32\-byte boundary if this can be done
+by skipping 2 bytes or less.
+If \fIm2\fR is not specified, it defaults to \fIn2\fR.
+.Sp
+Some assemblers only support this flag when \fIn\fR is a power of two;
+in that case, it is rounded up.
+.Sp
+\&\fB\-fno\-align\-functions\fR and \fB\-falign\-functions=1\fR are
+equivalent and mean that functions are not aligned.
+.Sp
+If \fIn\fR is not specified or is zero, use a machine-dependent default.
+The maximum allowed \fIn\fR option value is 65536.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
+.IP "\fB\-flimit\-function\-alignment\fR" 4
+.IX Item "-flimit-function-alignment"
+If this option is enabled, the compiler tries to avoid unnecessarily
+overaligning functions. It attempts to instruct the assembler to align
+by the amount specified by \fB\-falign\-functions\fR, but not to
+skip more bytes than the size of the function.
+.IP "\fB\-falign\-labels\fR" 4
+.IX Item "-falign-labels"
+.PD 0
+.IP "\fB\-falign\-labels=\fR\fIn\fR" 4
+.IX Item "-falign-labels=n"
+.IP "\fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR" 4
+.IX Item "-falign-labels=n:m"
+.IP "\fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR" 4
+.IX Item "-falign-labels=n:m:n2"
+.IP "\fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR" 4
+.IX Item "-falign-labels=n:m:n2:m2"
+.PD
+Align all branch targets to a power-of-two boundary.
+.Sp
+Parameters of this option are analogous to the \fB\-falign\-functions\fR option.
+\&\fB\-fno\-align\-labels\fR and \fB\-falign\-labels=1\fR are
+equivalent and mean that labels are not aligned.
+.Sp
+If \fB\-falign\-loops\fR or \fB\-falign\-jumps\fR are applicable and
+are greater than this value, then their values are used instead.
+.Sp
+If \fIn\fR is not specified or is zero, use a machine-dependent default
+which is very likely to be \fB1\fR, meaning no alignment.
+The maximum allowed \fIn\fR option value is 65536.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
+.IP "\fB\-falign\-loops\fR" 4
+.IX Item "-falign-loops"
+.PD 0
+.IP "\fB\-falign\-loops=\fR\fIn\fR" 4
+.IX Item "-falign-loops=n"
+.IP "\fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR" 4
+.IX Item "-falign-loops=n:m"
+.IP "\fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR" 4
+.IX Item "-falign-loops=n:m:n2"
+.IP "\fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR" 4
+.IX Item "-falign-loops=n:m:n2:m2"
+.PD
+Align loops to a power-of-two boundary.  If the loops are executed
+many times, this makes up for any execution of the dummy padding
+instructions.
+.Sp
+Parameters of this option are analogous to the \fB\-falign\-functions\fR option.
+\&\fB\-fno\-align\-loops\fR and \fB\-falign\-loops=1\fR are
+equivalent and mean that loops are not aligned.
+The maximum allowed \fIn\fR option value is 65536.
+.Sp
+If \fIn\fR is not specified or is zero, use a machine-dependent default.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
+.IP "\fB\-falign\-jumps\fR" 4
+.IX Item "-falign-jumps"
+.PD 0
+.IP "\fB\-falign\-jumps=\fR\fIn\fR" 4
+.IX Item "-falign-jumps=n"
+.IP "\fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR" 4
+.IX Item "-falign-jumps=n:m"
+.IP "\fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR" 4
+.IX Item "-falign-jumps=n:m:n2"
+.IP "\fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR" 4
+.IX Item "-falign-jumps=n:m:n2:m2"
+.PD
+Align branch targets to a power-of-two boundary, for branch targets
+where the targets can only be reached by jumping.  In this case,
+no dummy operations need be executed.
+.Sp
+Parameters of this option are analogous to the \fB\-falign\-functions\fR option.
+\&\fB\-fno\-align\-jumps\fR and \fB\-falign\-jumps=1\fR are
+equivalent and mean that loops are not aligned.
+.Sp
+If \fIn\fR is not specified or is zero, use a machine-dependent default.
+The maximum allowed \fIn\fR option value is 65536.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR.
+.IP "\fB\-funit\-at\-a\-time\fR" 4
+.IX Item "-funit-at-a-time"
+This option is left for compatibility reasons. \fB\-funit\-at\-a\-time\fR
+has no effect, while \fB\-fno\-unit\-at\-a\-time\fR implies
+\&\fB\-fno\-toplevel\-reorder\fR and \fB\-fno\-section\-anchors\fR.
+.Sp
+Enabled by default.
+.IP "\fB\-fno\-toplevel\-reorder\fR" 4
+.IX Item "-fno-toplevel-reorder"
+Do not reorder top-level functions, variables, and \f(CW\*(C`asm\*(C'\fR
+statements.  Output them in the same order that they appear in the
+input file.  When this option is used, unreferenced static variables
+are not removed.  This option is intended to support existing code
+that relies on a particular ordering.  For new code, it is better to
+use attributes when possible.
+.Sp
+\&\fB\-ftoplevel\-reorder\fR is the default at \fB\-O1\fR and higher, and
+also at \fB\-O0\fR if \fB\-fsection\-anchors\fR is explicitly requested.
+Additionally \fB\-fno\-toplevel\-reorder\fR implies
+\&\fB\-fno\-section\-anchors\fR.
+.IP "\fB\-fweb\fR" 4
+.IX Item "-fweb"
+Constructs webs as commonly used for register allocation purposes and assign
+each web individual pseudo register.  This allows the register allocation pass
+to operate on pseudos directly, but also strengthens several other optimization
+passes, such as \s-1CSE,\s0 loop optimizer and trivial dead code remover.  It can,
+however, make debugging impossible, since variables no longer stay in a
+\&\*(L"home register\*(R".
+.Sp
+Enabled by default with \fB\-funroll\-loops\fR.
+.IP "\fB\-fwhole\-program\fR" 4
+.IX Item "-fwhole-program"
+Assume that the current compilation unit represents the whole program being
+compiled.  All public functions and variables with the exception of \f(CW\*(C`main\*(C'\fR
+and those merged by attribute \f(CW\*(C`externally_visible\*(C'\fR become static functions
+and in effect are optimized more aggressively by interprocedural optimizers.
+.Sp
+This option should not be used in combination with \fB\-flto\fR.
+Instead relying on a linker plugin should provide safer and more precise
+information.
+.IP "\fB\-flto[=\fR\fIn\fR\fB]\fR" 4
+.IX Item "-flto[=n]"
+This option runs the standard link-time optimizer.  When invoked
+with source code, it generates \s-1GIMPLE\s0 (one of \s-1GCC\s0's internal
+representations) and writes it to special \s-1ELF\s0 sections in the object
+file.  When the object files are linked together, all the function
+bodies are read from these \s-1ELF\s0 sections and instantiated as if they
+had been part of the same translation unit.
+.Sp
+To use the link-time optimizer, \fB\-flto\fR and optimization
+options should be specified at compile time and during the final link.
+It is recommended that you compile all the files participating in the
+same link with the same options and also specify those options at
+link time.  
+For example:
+.Sp
+.Vb 3
+\&        gcc \-c \-O2 \-flto foo.c
+\&        gcc \-c \-O2 \-flto bar.c
+\&        gcc \-o myprog \-flto \-O2 foo.o bar.o
+.Ve
+.Sp
+The first two invocations to \s-1GCC\s0 save a bytecode representation
+of \s-1GIMPLE\s0 into special \s-1ELF\s0 sections inside \fIfoo.o\fR and
+\&\fIbar.o\fR.  The final invocation reads the \s-1GIMPLE\s0 bytecode from
+\&\fIfoo.o\fR and \fIbar.o\fR, merges the two files into a single
+internal image, and compiles the result as usual.  Since both
+\&\fIfoo.o\fR and \fIbar.o\fR are merged into a single image, this
+causes all the interprocedural analyses and optimizations in \s-1GCC\s0 to
+work across the two files as if they were a single one.  This means,
+for example, that the inliner is able to inline functions in
+\&\fIbar.o\fR into functions in \fIfoo.o\fR and vice-versa.
+.Sp
+Another (simpler) way to enable link-time optimization is:
+.Sp
+.Vb 1
+\&        gcc \-o myprog \-flto \-O2 foo.c bar.c
+.Ve
+.Sp
+The above generates bytecode for \fIfoo.c\fR and \fIbar.c\fR,
+merges them together into a single \s-1GIMPLE\s0 representation and optimizes
+them as usual to produce \fImyprog\fR.
+.Sp
+The important thing to keep in mind is that to enable link-time
+optimizations you need to use the \s-1GCC\s0 driver to perform the link step.
+\&\s-1GCC\s0 automatically performs link-time optimization if any of the
+objects involved were compiled with the \fB\-flto\fR command-line option.  
+You can always override
+the automatic decision to do link-time optimization
+by passing \fB\-fno\-lto\fR to the link command.
+.Sp
+To make whole program optimization effective, it is necessary to make
+certain whole program assumptions.  The compiler needs to know
+what functions and variables can be accessed by libraries and runtime
+outside of the link-time optimized unit.  When supported by the linker,
+the linker plugin (see \fB\-fuse\-linker\-plugin\fR) passes information
+to the compiler about used and externally visible symbols.  When
+the linker plugin is not available, \fB\-fwhole\-program\fR should be
+used to allow the compiler to make these assumptions, which leads
+to more aggressive optimization decisions.
+.Sp
+When a file is compiled with \fB\-flto\fR without
+\&\fB\-fuse\-linker\-plugin\fR, the generated object file is larger than
+a regular object file because it contains \s-1GIMPLE\s0 bytecodes and the usual
+final code (see \fB\-ffat\-lto\-objects\fR.  This means that
+object files with \s-1LTO\s0 information can be linked as normal object
+files; if \fB\-fno\-lto\fR is passed to the linker, no
+interprocedural optimizations are applied.  Note that when
+\&\fB\-fno\-fat\-lto\-objects\fR is enabled the compile stage is faster
+but you cannot perform a regular, non-LTO link on them.
+.Sp
+When producing the final binary, \s-1GCC\s0 only
+applies link-time optimizations to those files that contain bytecode.
+Therefore, you can mix and match object files and libraries with
+\&\s-1GIMPLE\s0 bytecodes and final object code.  \s-1GCC\s0 automatically selects
+which files to optimize in \s-1LTO\s0 mode and which files to link without
+further processing.
+.Sp
+Generally, options specified at link time override those
+specified at compile time, although in some cases \s-1GCC\s0 attempts to infer
+link-time options from the settings used to compile the input files.
+.Sp
+If you do not specify an optimization level option \fB\-O\fR at
+link time, then \s-1GCC\s0 uses the highest optimization level 
+used when compiling the object files.  Note that it is generally 
+ineffective to specify an optimization level option only at link time and 
+not at compile time, for two reasons.  First, compiling without 
+optimization suppresses compiler passes that gather information 
+needed for effective optimization at link time.  Second, some early
+optimization passes can be performed only at compile time and 
+not at link time.
+.Sp
+There are some code generation flags preserved by \s-1GCC\s0 when
+generating bytecodes, as they need to be used during the final link.
+Currently, the following options and their settings are taken from
+the first object file that explicitly specifies them: 
+\&\fB\-fPIC\fR, \fB\-fpic\fR, \fB\-fpie\fR, \fB\-fcommon\fR,
+\&\fB\-fexceptions\fR, \fB\-fnon\-call\-exceptions\fR, \fB\-fgnu\-tm\fR
+and all the \fB\-m\fR target flags.
+.Sp
+Certain ABI-changing flags are required to match in all compilation units,
+and trying to override this at link time with a conflicting value
+is ignored.  This includes options such as \fB\-freg\-struct\-return\fR
+and \fB\-fpcc\-struct\-return\fR.
+.Sp
+Other options such as \fB\-ffp\-contract\fR, \fB\-fno\-strict\-overflow\fR,
+\&\fB\-fwrapv\fR, \fB\-fno\-trapv\fR or \fB\-fno\-strict\-aliasing\fR
+are passed through to the link stage and merged conservatively for
+conflicting translation units.  Specifically
+\&\fB\-fno\-strict\-overflow\fR, \fB\-fwrapv\fR and \fB\-fno\-trapv\fR take
+precedence; and for example \fB\-ffp\-contract=off\fR takes precedence
+over \fB\-ffp\-contract=fast\fR.  You can override them at link time.
+.Sp
+If \s-1LTO\s0 encounters objects with C linkage declared with incompatible
+types in separate translation units to be linked together (undefined
+behavior according to \s-1ISO C99 6.2.7\s0), a non-fatal diagnostic may be
+issued.  The behavior is still undefined at run time.  Similar
+diagnostics may be raised for other languages.
+.Sp
+Another feature of \s-1LTO\s0 is that it is possible to apply interprocedural
+optimizations on files written in different languages:
+.Sp
+.Vb 4
+\&        gcc \-c \-flto foo.c
+\&        g++ \-c \-flto bar.cc
+\&        gfortran \-c \-flto baz.f90
+\&        g++ \-o myprog \-flto \-O3 foo.o bar.o baz.o \-lgfortran
+.Ve
+.Sp
+Notice that the final link is done with \fBg++\fR to get the \*(C+
+runtime libraries and \fB\-lgfortran\fR is added to get the Fortran
+runtime libraries.  In general, when mixing languages in \s-1LTO\s0 mode, you
+should use the same link command options as when mixing languages in a
+regular (non-LTO) compilation.
+.Sp
+If object files containing \s-1GIMPLE\s0 bytecode are stored in a library archive, say
+\&\fIlibfoo.a\fR, it is possible to extract and use them in an \s-1LTO\s0 link if you
+are using a linker with plugin support.  To create static libraries suitable
+for \s-1LTO,\s0 use \fBgcc-ar\fR and \fBgcc-ranlib\fR instead of \fBar\fR
+and \fBranlib\fR; 
+to show the symbols of object files with \s-1GIMPLE\s0 bytecode, use
+\&\fBgcc-nm\fR.  Those commands require that \fBar\fR, \fBranlib\fR
+and \fBnm\fR have been compiled with plugin support.  At link time, use the
+flag \fB\-fuse\-linker\-plugin\fR to ensure that the library participates in
+the \s-1LTO\s0 optimization process:
+.Sp
+.Vb 1
+\&        gcc \-o myprog \-O2 \-flto \-fuse\-linker\-plugin a.o b.o \-lfoo
+.Ve
+.Sp
+With the linker plugin enabled, the linker extracts the needed
+\&\s-1GIMPLE\s0 files from \fIlibfoo.a\fR and passes them on to the running \s-1GCC\s0
+to make them part of the aggregated \s-1GIMPLE\s0 image to be optimized.
+.Sp
+If you are not using a linker with plugin support and/or do not
+enable the linker plugin, then the objects inside \fIlibfoo.a\fR
+are extracted and linked as usual, but they do not participate
+in the \s-1LTO\s0 optimization process.  In order to make a static library suitable
+for both \s-1LTO\s0 optimization and usual linkage, compile its object files with
+\&\fB\-flto\fR \fB\-ffat\-lto\-objects\fR.
+.Sp
+Link-time optimizations do not require the presence of the whole program to
+operate.  If the program does not require any symbols to be exported, it is
+possible to combine \fB\-flto\fR and \fB\-fwhole\-program\fR to allow
+the interprocedural optimizers to use more aggressive assumptions which may
+lead to improved optimization opportunities.
+Use of \fB\-fwhole\-program\fR is not needed when linker plugin is
+active (see \fB\-fuse\-linker\-plugin\fR).
+.Sp
+The current implementation of \s-1LTO\s0 makes no
+attempt to generate bytecode that is portable between different
+types of hosts.  The bytecode files are versioned and there is a
+strict version check, so bytecode files generated in one version of
+\&\s-1GCC\s0 do not work with an older or newer version of \s-1GCC.\s0
+.Sp
+Link-time optimization does not work well with generation of debugging
+information on systems other than those using a combination of \s-1ELF\s0 and
+\&\s-1DWARF.\s0
+.Sp
+If you specify the optional \fIn\fR, the optimization and code
+generation done at link time is executed in parallel using \fIn\fR
+parallel jobs by utilizing an installed \fBmake\fR program.  The
+environment variable \fB\s-1MAKE\s0\fR may be used to override the program
+used.  The default value for \fIn\fR is 1.
+.Sp
+You can also specify \fB\-flto=jobserver\fR to use \s-1GNU\s0 make's
+job server mode to determine the number of parallel jobs. This
+is useful when the Makefile calling \s-1GCC\s0 is already executing in parallel.
+You must prepend a \fB+\fR to the command recipe in the parent Makefile
+for this to work.  This option likely only works if \fB\s-1MAKE\s0\fR is
+\&\s-1GNU\s0 make.
+.IP "\fB\-flto\-partition=\fR\fIalg\fR" 4
+.IX Item "-flto-partition=alg"
+Specify the partitioning algorithm used by the link-time optimizer.
+The value is either \fB1to1\fR to specify a partitioning mirroring
+the original source files or \fBbalanced\fR to specify partitioning
+into equally sized chunks (whenever possible) or \fBmax\fR to create
+new partition for every symbol where possible.  Specifying \fBnone\fR
+as an algorithm disables partitioning and streaming completely. 
+The default value is \fBbalanced\fR. While \fB1to1\fR can be used
+as an workaround for various code ordering issues, the \fBmax\fR
+partitioning is intended for internal testing only.
+The value \fBone\fR specifies that exactly one partition should be
+used while the value \fBnone\fR bypasses partitioning and executes
+the link-time optimization step directly from the \s-1WPA\s0 phase.
+.IP "\fB\-flto\-odr\-type\-merging\fR" 4
+.IX Item "-flto-odr-type-merging"
+Enable streaming of mangled types names of \*(C+ types and their unification
+at link time.  This increases size of \s-1LTO\s0 object files, but enables
+diagnostics about One Definition Rule violations.
+.IP "\fB\-flto\-compression\-level=\fR\fIn\fR" 4
+.IX Item "-flto-compression-level=n"
+This option specifies the level of compression used for intermediate
+language written to \s-1LTO\s0 object files, and is only meaningful in
+conjunction with \s-1LTO\s0 mode (\fB\-flto\fR).  Valid
+values are 0 (no compression) to 9 (maximum compression).  Values
+outside this range are clamped to either 0 or 9.  If the option is not
+given, a default balanced compression setting is used.
+.IP "\fB\-fuse\-linker\-plugin\fR" 4
+.IX Item "-fuse-linker-plugin"
+Enables the use of a linker plugin during link-time optimization.  This
+option relies on plugin support in the linker, which is available in gold
+or in \s-1GNU\s0 ld 2.21 or newer.
+.Sp
+This option enables the extraction of object files with \s-1GIMPLE\s0 bytecode out
+of library archives. This improves the quality of optimization by exposing
+more code to the link-time optimizer.  This information specifies what
+symbols can be accessed externally (by non-LTO object or during dynamic
+linking).  Resulting code quality improvements on binaries (and shared
+libraries that use hidden visibility) are similar to \fB\-fwhole\-program\fR.
+See \fB\-flto\fR for a description of the effect of this flag and how to
+use it.
+.Sp
+This option is enabled by default when \s-1LTO\s0 support in \s-1GCC\s0 is enabled
+and \s-1GCC\s0 was configured for use with
+a linker supporting plugins (\s-1GNU\s0 ld 2.21 or newer or gold).
+.IP "\fB\-ffat\-lto\-objects\fR" 4
+.IX Item "-ffat-lto-objects"
+Fat \s-1LTO\s0 objects are object files that contain both the intermediate language
+and the object code. This makes them usable for both \s-1LTO\s0 linking and normal
+linking. This option is effective only when compiling with \fB\-flto\fR
+and is ignored at link time.
+.Sp
+\&\fB\-fno\-fat\-lto\-objects\fR improves compilation time over plain \s-1LTO,\s0 but
+requires the complete toolchain to be aware of \s-1LTO.\s0 It requires a linker with
+linker plugin support for basic functionality.  Additionally,
+\&\fBnm\fR, \fBar\fR and \fBranlib\fR
+need to support linker plugins to allow a full-featured build environment
+(capable of building static libraries etc).  \s-1GCC\s0 provides the \fBgcc-ar\fR,
+\&\fBgcc-nm\fR, \fBgcc-ranlib\fR wrappers to pass the right options
+to these tools. With non fat \s-1LTO\s0 makefiles need to be modified to use them.
+.Sp
+Note that modern binutils provide plugin auto-load mechanism.
+Installing the linker plugin into \fI\f(CI$libdir\fI/bfd\-plugins\fR has the same
+effect as usage of the command wrappers (\fBgcc-ar\fR, \fBgcc-nm\fR and
+\&\fBgcc-ranlib\fR).
+.Sp
+The default is \fB\-fno\-fat\-lto\-objects\fR on targets with linker plugin
+support.
+.IP "\fB\-fcompare\-elim\fR" 4
+.IX Item "-fcompare-elim"
+After register allocation and post-register allocation instruction splitting,
+identify arithmetic instructions that compute processor flags similar to a
+comparison operation based on that arithmetic.  If possible, eliminate the
+explicit comparison operation.
+.Sp
+This pass only applies to certain targets that cannot explicitly represent
+the comparison operation before register allocation is complete.
+.Sp
+Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fcprop\-registers\fR" 4
+.IX Item "-fcprop-registers"
+After register allocation and post-register allocation instruction splitting,
+perform a copy-propagation pass to try to reduce scheduling dependencies
+and occasionally eliminate the copy.
+.Sp
+Enabled at levels \fB\-O\fR, \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-fprofile\-correction\fR" 4
+.IX Item "-fprofile-correction"
+Profiles collected using an instrumented binary for multi-threaded programs may
+be inconsistent due to missed counter updates. When this option is specified,
+\&\s-1GCC\s0 uses heuristics to correct or smooth out such inconsistencies. By
+default, \s-1GCC\s0 emits an error message when an inconsistent profile is detected.
+.Sp
+This option is enabled by \fB\-fauto\-profile\fR.
+.IP "\fB\-fprofile\-use\fR" 4
+.IX Item "-fprofile-use"
+.PD 0
+.IP "\fB\-fprofile\-use=\fR\fIpath\fR" 4
+.IX Item "-fprofile-use=path"
+.PD
+Enable profile feedback-directed optimizations, 
+and the following optimizations, many of which
+are generally profitable only with profile feedback available:
+.Sp
+\&\fB\-fbranch\-probabilities  \-fprofile\-values 
+\&\-funroll\-loops  \-fpeel\-loops  \-ftracer  \-fvpt 
+\&\-finline\-functions  \-fipa\-cp  \-fipa\-cp\-clone  \-fipa\-bit\-cp 
+\&\-fpredictive\-commoning  \-fsplit\-loops  \-funswitch\-loops 
+\&\-fgcse\-after\-reload  \-ftree\-loop\-vectorize  \-ftree\-slp\-vectorize 
+\&\-fvect\-cost\-model=dynamic  \-ftree\-loop\-distribute\-patterns 
+\&\-fprofile\-reorder\-functions\fR
+.Sp
+Before you can use this option, you must first generate profiling information.
+.Sp
+By default, \s-1GCC\s0 emits an error message if the feedback profiles do not
+match the source code.  This error can be turned into a warning by using
+\&\fB\-Wno\-error=coverage\-mismatch\fR.  Note this may result in poorly
+optimized code.  Additionally, by default, \s-1GCC\s0 also emits a warning message if
+the feedback profiles do not exist (see \fB\-Wmissing\-profile\fR).
+.Sp
+If \fIpath\fR is specified, \s-1GCC\s0 looks at the \fIpath\fR to find
+the profile feedback data files. See \fB\-fprofile\-dir\fR.
+.IP "\fB\-fauto\-profile\fR" 4
+.IX Item "-fauto-profile"
+.PD 0
+.IP "\fB\-fauto\-profile=\fR\fIpath\fR" 4
+.IX Item "-fauto-profile=path"
+.PD
+Enable sampling-based feedback-directed optimizations, 
+and the following optimizations,
+many of which are generally profitable only with profile feedback available:
+.Sp
+\&\fB\-fbranch\-probabilities  \-fprofile\-values 
+\&\-funroll\-loops  \-fpeel\-loops  \-ftracer  \-fvpt 
+\&\-finline\-functions  \-fipa\-cp  \-fipa\-cp\-clone  \-fipa\-bit\-cp 
+\&\-fpredictive\-commoning  \-fsplit\-loops  \-funswitch\-loops 
+\&\-fgcse\-after\-reload  \-ftree\-loop\-vectorize  \-ftree\-slp\-vectorize 
+\&\-fvect\-cost\-model=dynamic  \-ftree\-loop\-distribute\-patterns 
+\&\-fprofile\-correction\fR
+.Sp
+\&\fIpath\fR is the name of a file containing AutoFDO profile information.
+If omitted, it defaults to \fIfbdata.afdo\fR in the current directory.
+.Sp
+Producing an AutoFDO profile data file requires running your program
+with the \fBperf\fR utility on a supported GNU/Linux target system.
+For more information, see <\fBhttps://perf.wiki.kernel.org/\fR>.
+.Sp
+E.g.
+.Sp
+.Vb 2
+\&        perf record \-e br_inst_retired:near_taken \-b \-o perf.data \e
+\&            \-\- your_program
+.Ve
+.Sp
+Then use the \fBcreate_gcov\fR tool to convert the raw profile data
+to a format that can be used by \s-1GCC.\s0  You must also supply the 
+unstripped binary for your program to this tool.  
+See <\fBhttps://github.com/google/autofdo\fR>.
+.Sp
+E.g.
+.Sp
+.Vb 2
+\&        create_gcov \-\-binary=your_program.unstripped \-\-profile=perf.data \e
+\&            \-\-gcov=profile.afdo
+.Ve
+.PP
+The following options control compiler behavior regarding floating-point 
+arithmetic.  These options trade off between speed and
+correctness.  All must be specifically enabled.
+.IP "\fB\-ffloat\-store\fR" 4
+.IX Item "-ffloat-store"
+Do not store floating-point variables in registers, and inhibit other
+options that might change whether a floating-point value is taken from a
+register or memory.
+.Sp
+This option prevents undesirable excess precision on machines such as
+the 68000 where the floating registers (of the 68881) keep more
+precision than a \f(CW\*(C`double\*(C'\fR is supposed to have.  Similarly for the
+x86 architecture.  For most programs, the excess precision does only
+good, but a few programs rely on the precise definition of \s-1IEEE\s0 floating
+point.  Use \fB\-ffloat\-store\fR for such programs, after modifying
+them to store all pertinent intermediate computations into variables.
+.IP "\fB\-fexcess\-precision=\fR\fIstyle\fR" 4
+.IX Item "-fexcess-precision=style"
+This option allows further control over excess precision on machines
+where floating-point operations occur in a format with more precision or
+range than the \s-1IEEE\s0 standard and interchange floating-point types.  By
+default, \fB\-fexcess\-precision=fast\fR is in effect; this means that
+operations may be carried out in a wider precision than the types specified
+in the source if that would result in faster code, and it is unpredictable
+when rounding to the types specified in the source code takes place.
+When compiling C, if \fB\-fexcess\-precision=standard\fR is specified then
+excess precision follows the rules specified in \s-1ISO C99\s0; in particular,
+both casts and assignments cause values to be rounded to their
+semantic types (whereas \fB\-ffloat\-store\fR only affects
+assignments).  This option is enabled by default for C if a strict
+conformance option such as \fB\-std=c99\fR is used.
+\&\fB\-ffast\-math\fR enables \fB\-fexcess\-precision=fast\fR by default
+regardless of whether a strict conformance option is used.
+.Sp
+\&\fB\-fexcess\-precision=standard\fR is not implemented for languages
+other than C.  On the x86, it has no effect if \fB\-mfpmath=sse\fR
+or \fB\-mfpmath=sse+387\fR is specified; in the former case, \s-1IEEE\s0
+semantics apply without excess precision, and in the latter, rounding
+is unpredictable.
+.IP "\fB\-ffast\-math\fR" 4
+.IX Item "-ffast-math"
+Sets the options \fB\-fno\-math\-errno\fR, \fB\-funsafe\-math\-optimizations\fR,
+\&\fB\-ffinite\-math\-only\fR, \fB\-fno\-rounding\-math\fR,
+\&\fB\-fno\-signaling\-nans\fR, \fB\-fcx\-limited\-range\fR and
+\&\fB\-fexcess\-precision=fast\fR.
+.Sp
+This option causes the preprocessor macro \f(CW\*(C`_\|_FAST_MATH_\|_\*(C'\fR to be defined.
+.Sp
+This option is not turned on by any \fB\-O\fR option besides
+\&\fB\-Ofast\fR since it can result in incorrect output for programs
+that depend on an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications
+for math functions. It may, however, yield faster code for programs
+that do not require the guarantees of these specifications.
+.IP "\fB\-fno\-math\-errno\fR" 4
+.IX Item "-fno-math-errno"
+Do not set \f(CW\*(C`errno\*(C'\fR after calling math functions that are executed
+with a single instruction, e.g., \f(CW\*(C`sqrt\*(C'\fR.  A program that relies on
+\&\s-1IEEE\s0 exceptions for math error handling may want to use this flag
+for speed while maintaining \s-1IEEE\s0 arithmetic compatibility.
+.Sp
+This option is not turned on by any \fB\-O\fR option since
+it can result in incorrect output for programs that depend on
+an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
+math functions. It may, however, yield faster code for programs
+that do not require the guarantees of these specifications.
+.Sp
+The default is \fB\-fmath\-errno\fR.
+.Sp
+On Darwin systems, the math library never sets \f(CW\*(C`errno\*(C'\fR.  There is
+therefore no reason for the compiler to consider the possibility that
+it might, and \fB\-fno\-math\-errno\fR is the default.
+.IP "\fB\-funsafe\-math\-optimizations\fR" 4
+.IX Item "-funsafe-math-optimizations"
+Allow optimizations for floating-point arithmetic that (a) assume
+that arguments and results are valid and (b) may violate \s-1IEEE\s0 or
+\&\s-1ANSI\s0 standards.  When used at link time, it may include libraries
+or startup files that change the default \s-1FPU\s0 control word or other
+similar optimizations.
+.Sp
+This option is not turned on by any \fB\-O\fR option since
+it can result in incorrect output for programs that depend on
+an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
+math functions. It may, however, yield faster code for programs
+that do not require the guarantees of these specifications.
+Enables \fB\-fno\-signed\-zeros\fR, \fB\-fno\-trapping\-math\fR,
+\&\fB\-fassociative\-math\fR and \fB\-freciprocal\-math\fR.
+.Sp
+The default is \fB\-fno\-unsafe\-math\-optimizations\fR.
+.IP "\fB\-fassociative\-math\fR" 4
+.IX Item "-fassociative-math"
+Allow re-association of operands in series of floating-point operations.
+This violates the \s-1ISO C\s0 and \*(C+ language standard by possibly changing
+computation result.  \s-1NOTE:\s0 re-ordering may change the sign of zero as
+well as ignore NaNs and inhibit or create underflow or overflow (and
+thus cannot be used on code that relies on rounding behavior like
+\&\f(CW\*(C`(x + 2**52) \- 2**52\*(C'\fR.  May also reorder floating-point comparisons
+and thus may not be used when ordered comparisons are required.
+This option requires that both \fB\-fno\-signed\-zeros\fR and
+\&\fB\-fno\-trapping\-math\fR be in effect.  Moreover, it doesn't make
+much sense with \fB\-frounding\-math\fR. For Fortran the option
+is automatically enabled when both \fB\-fno\-signed\-zeros\fR and
+\&\fB\-fno\-trapping\-math\fR are in effect.
+.Sp
+The default is \fB\-fno\-associative\-math\fR.
+.IP "\fB\-freciprocal\-math\fR" 4
+.IX Item "-freciprocal-math"
+Allow the reciprocal of a value to be used instead of dividing by
+the value if this enables optimizations.  For example \f(CW\*(C`x / y\*(C'\fR
+can be replaced with \f(CW\*(C`x * (1/y)\*(C'\fR, which is useful if \f(CW\*(C`(1/y)\*(C'\fR
+is subject to common subexpression elimination.  Note that this loses
+precision and increases the number of flops operating on the value.
+.Sp
+The default is \fB\-fno\-reciprocal\-math\fR.
+.IP "\fB\-ffinite\-math\-only\fR" 4
+.IX Item "-ffinite-math-only"
+Allow optimizations for floating-point arithmetic that assume
+that arguments and results are not NaNs or +\-Infs.
+.Sp
+This option is not turned on by any \fB\-O\fR option since
+it can result in incorrect output for programs that depend on
+an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
+math functions. It may, however, yield faster code for programs
+that do not require the guarantees of these specifications.
+.Sp
+The default is \fB\-fno\-finite\-math\-only\fR.
+.IP "\fB\-fno\-signed\-zeros\fR" 4
+.IX Item "-fno-signed-zeros"
+Allow optimizations for floating-point arithmetic that ignore the
+signedness of zero.  \s-1IEEE\s0 arithmetic specifies the behavior of
+distinct +0.0 and \-0.0 values, which then prohibits simplification
+of expressions such as x+0.0 or 0.0*x (even with \fB\-ffinite\-math\-only\fR).
+This option implies that the sign of a zero result isn't significant.
+.Sp
+The default is \fB\-fsigned\-zeros\fR.
+.IP "\fB\-fno\-trapping\-math\fR" 4
+.IX Item "-fno-trapping-math"
+Compile code assuming that floating-point operations cannot generate
+user-visible traps.  These traps include division by zero, overflow,
+underflow, inexact result and invalid operation.  This option requires
+that \fB\-fno\-signaling\-nans\fR be in effect.  Setting this option may
+allow faster code if one relies on \*(L"non-stop\*(R" \s-1IEEE\s0 arithmetic, for example.
+.Sp
+This option should never be turned on by any \fB\-O\fR option since
+it can result in incorrect output for programs that depend on
+an exact implementation of \s-1IEEE\s0 or \s-1ISO\s0 rules/specifications for
+math functions.
+.Sp
+The default is \fB\-ftrapping\-math\fR.
+.IP "\fB\-frounding\-math\fR" 4
+.IX Item "-frounding-math"
+Disable transformations and optimizations that assume default floating-point
+rounding behavior.  This is round-to-zero for all floating point
+to integer conversions, and round-to-nearest for all other arithmetic
+truncations.  This option should be specified for programs that change
+the \s-1FP\s0 rounding mode dynamically, or that may be executed with a
+non-default rounding mode.  This option disables constant folding of
+floating-point expressions at compile time (which may be affected by
+rounding mode) and arithmetic transformations that are unsafe in the
+presence of sign-dependent rounding modes.
+.Sp
+The default is \fB\-fno\-rounding\-math\fR.
+.Sp
+This option is experimental and does not currently guarantee to
+disable all \s-1GCC\s0 optimizations that are affected by rounding mode.
+Future versions of \s-1GCC\s0 may provide finer control of this setting
+using C99's \f(CW\*(C`FENV_ACCESS\*(C'\fR pragma.  This command-line option
+will be used to specify the default state for \f(CW\*(C`FENV_ACCESS\*(C'\fR.
+.IP "\fB\-fsignaling\-nans\fR" 4
+.IX Item "-fsignaling-nans"
+Compile code assuming that \s-1IEEE\s0 signaling NaNs may generate user-visible
+traps during floating-point operations.  Setting this option disables
+optimizations that may change the number of exceptions visible with
+signaling NaNs.  This option implies \fB\-ftrapping\-math\fR.
+.Sp
+This option causes the preprocessor macro \f(CW\*(C`_\|_SUPPORT_SNAN_\|_\*(C'\fR to
+be defined.
+.Sp
+The default is \fB\-fno\-signaling\-nans\fR.
+.Sp
+This option is experimental and does not currently guarantee to
+disable all \s-1GCC\s0 optimizations that affect signaling NaN behavior.
+.IP "\fB\-fno\-fp\-int\-builtin\-inexact\fR" 4
+.IX Item "-fno-fp-int-builtin-inexact"
+Do not allow the built-in functions \f(CW\*(C`ceil\*(C'\fR, \f(CW\*(C`floor\*(C'\fR,
+\&\f(CW\*(C`round\*(C'\fR and \f(CW\*(C`trunc\*(C'\fR, and their \f(CW\*(C`float\*(C'\fR and \f(CW\*(C`long
+double\*(C'\fR variants, to generate code that raises the \*(L"inexact\*(R"
+floating-point exception for noninteger arguments.  \s-1ISO C99\s0 and C11
+allow these functions to raise the \*(L"inexact\*(R" exception, but \s-1ISO/IEC
+TS 18661\-1:2014,\s0 the C bindings to \s-1IEEE 754\-2008,\s0 does not allow these
+functions to do so.
+.Sp
+The default is \fB\-ffp\-int\-builtin\-inexact\fR, allowing the
+exception to be raised.  This option does nothing unless
+\&\fB\-ftrapping\-math\fR is in effect.
+.Sp
+Even if \fB\-fno\-fp\-int\-builtin\-inexact\fR is used, if the functions
+generate a call to a library function then the \*(L"inexact\*(R" exception
+may be raised if the library implementation does not follow \s-1TS 18661.\s0
+.IP "\fB\-fsingle\-precision\-constant\fR" 4
+.IX Item "-fsingle-precision-constant"
+Treat floating-point constants as single precision instead of
+implicitly converting them to double-precision constants.
+.IP "\fB\-fcx\-limited\-range\fR" 4
+.IX Item "-fcx-limited-range"
+When enabled, this option states that a range reduction step is not
+needed when performing complex division.  Also, there is no checking
+whether the result of a complex multiplication or division is \f(CW\*(C`NaN
++ I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.  The
+default is \fB\-fno\-cx\-limited\-range\fR, but is enabled by
+\&\fB\-ffast\-math\fR.
+.Sp
+This option controls the default setting of the \s-1ISO C99\s0
+\&\f(CW\*(C`CX_LIMITED_RANGE\*(C'\fR pragma.  Nevertheless, the option applies to
+all languages.
+.IP "\fB\-fcx\-fortran\-rules\fR" 4
+.IX Item "-fcx-fortran-rules"
+Complex multiplication and division follow Fortran rules.  Range
+reduction is done as part of complex division, but there is no checking
+whether the result of a complex multiplication or division is \f(CW\*(C`NaN
++ I*NaN\*(C'\fR, with an attempt to rescue the situation in that case.
+.Sp
+The default is \fB\-fno\-cx\-fortran\-rules\fR.
+.PP
+The following options control optimizations that may improve
+performance, but are not enabled by any \fB\-O\fR options.  This
+section includes experimental options that may produce broken code.
+.IP "\fB\-fbranch\-probabilities\fR" 4
+.IX Item "-fbranch-probabilities"
+After running a program compiled with \fB\-fprofile\-arcs\fR,
+you can compile it a second time using
+\&\fB\-fbranch\-probabilities\fR, to improve optimizations based on
+the number of times each branch was taken.  When a program
+compiled with \fB\-fprofile\-arcs\fR exits, it saves arc execution
+counts to a file called \fI\fIsourcename\fI.gcda\fR for each source
+file.  The information in this data file is very dependent on the
+structure of the generated code, so you must use the same source code
+and the same optimization options for both compilations.
+.Sp
+With \fB\-fbranch\-probabilities\fR, \s-1GCC\s0 puts a
+\&\fB\s-1REG_BR_PROB\s0\fR note on each \fB\s-1JUMP_INSN\s0\fR and \fB\s-1CALL_INSN\s0\fR.
+These can be used to improve optimization.  Currently, they are only
+used in one place: in \fIreorg.c\fR, instead of guessing which path a
+branch is most likely to take, the \fB\s-1REG_BR_PROB\s0\fR values are used to
+exactly determine which path is taken more often.
+.Sp
+Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+.IP "\fB\-fprofile\-values\fR" 4
+.IX Item "-fprofile-values"
+If combined with \fB\-fprofile\-arcs\fR, it adds code so that some
+data about values of expressions in the program is gathered.
+.Sp
+With \fB\-fbranch\-probabilities\fR, it reads back the data gathered
+from profiling values of expressions for usage in optimizations.
+.Sp
+Enabled by \fB\-fprofile\-generate\fR, \fB\-fprofile\-use\fR, and
+\&\fB\-fauto\-profile\fR.
+.IP "\fB\-fprofile\-reorder\-functions\fR" 4
+.IX Item "-fprofile-reorder-functions"
+Function reordering based on profile instrumentation collects
+first time of execution of a function and orders these functions
+in ascending order.
+.Sp
+Enabled with \fB\-fprofile\-use\fR.
+.IP "\fB\-fvpt\fR" 4
+.IX Item "-fvpt"
+If combined with \fB\-fprofile\-arcs\fR, this option instructs the compiler
+to add code to gather information about values of expressions.
+.Sp
+With \fB\-fbranch\-probabilities\fR, it reads back the data gathered
+and actually performs the optimizations based on them.
+Currently the optimizations include specialization of division operations
+using the knowledge about the value of the denominator.
+.Sp
+Enabled with \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+.IP "\fB\-frename\-registers\fR" 4
+.IX Item "-frename-registers"
+Attempt to avoid false dependencies in scheduled code by making use
+of registers left over after register allocation.  This optimization
+most benefits processors with lots of registers.  Depending on the
+debug information format adopted by the target, however, it can
+make debugging impossible, since variables no longer stay in
+a \*(L"home register\*(R".
+.Sp
+Enabled by default with \fB\-funroll\-loops\fR.
+.IP "\fB\-fschedule\-fusion\fR" 4
+.IX Item "-fschedule-fusion"
+Performs a target dependent pass over the instruction stream to schedule
+instructions of same type together because target machine can execute them
+more efficiently if they are adjacent to each other in the instruction flow.
+.Sp
+Enabled at levels \fB\-O2\fR, \fB\-O3\fR, \fB\-Os\fR.
+.IP "\fB\-ftracer\fR" 4
+.IX Item "-ftracer"
+Perform tail duplication to enlarge superblock size.  This transformation
+simplifies the control flow of the function allowing other optimizations to do
+a better job.
+.Sp
+Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+.IP "\fB\-funroll\-loops\fR" 4
+.IX Item "-funroll-loops"
+Unroll loops whose number of iterations can be determined at compile time or
+upon entry to the loop.  \fB\-funroll\-loops\fR implies
+\&\fB\-frerun\-cse\-after\-loop\fR, \fB\-fweb\fR and \fB\-frename\-registers\fR.
+It also turns on complete loop peeling (i.e. complete removal of loops with
+a small constant number of iterations).  This option makes code larger, and may
+or may not make it run faster.
+.Sp
+Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+.IP "\fB\-funroll\-all\-loops\fR" 4
+.IX Item "-funroll-all-loops"
+Unroll all loops, even if their number of iterations is uncertain when
+the loop is entered.  This usually makes programs run more slowly.
+\&\fB\-funroll\-all\-loops\fR implies the same options as
+\&\fB\-funroll\-loops\fR.
+.IP "\fB\-fpeel\-loops\fR" 4
+.IX Item "-fpeel-loops"
+Peels loops for which there is enough information that they do not
+roll much (from profile feedback or static analysis).  It also turns on
+complete loop peeling (i.e. complete removal of loops with small constant
+number of iterations).
+.Sp
+Enabled by \fB\-O3\fR, \fB\-fprofile\-use\fR, and \fB\-fauto\-profile\fR.
+.IP "\fB\-fmove\-loop\-invariants\fR" 4
+.IX Item "-fmove-loop-invariants"
+Enables the loop invariant motion pass in the \s-1RTL\s0 loop optimizer.  Enabled
+at level \fB\-O1\fR and higher, except for \fB\-Og\fR.
+.IP "\fB\-fsplit\-loops\fR" 4
+.IX Item "-fsplit-loops"
+Split a loop into two if it contains a condition that's always true
+for one side of the iteration space and false for the other.
+.Sp
+Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+.IP "\fB\-funswitch\-loops\fR" 4
+.IX Item "-funswitch-loops"
+Move branches with loop invariant conditions out of the loop, with duplicates
+of the loop on both branches (modified according to result of the condition).
+.Sp
+Enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+.IP "\fB\-fversion\-loops\-for\-strides\fR" 4
+.IX Item "-fversion-loops-for-strides"
+If a loop iterates over an array with a variable stride, create another
+version of the loop that assumes the stride is always one.  For example:
+.Sp
+.Vb 2
+\&        for (int i = 0; i < n; ++i)
+\&          x[i * stride] = ...;
+.Ve
+.Sp
+becomes:
+.Sp
+.Vb 6
+\&        if (stride == 1)
+\&          for (int i = 0; i < n; ++i)
+\&            x[i] = ...;
+\&        else
+\&          for (int i = 0; i < n; ++i)
+\&            x[i * stride] = ...;
+.Ve
+.Sp
+This is particularly useful for assumed-shape arrays in Fortran where
+(for example) it allows better vectorization assuming contiguous accesses.
+This flag is enabled by default at \fB\-O3\fR.
+It is also enabled by \fB\-fprofile\-use\fR and \fB\-fauto\-profile\fR.
+.IP "\fB\-ffunction\-sections\fR" 4
+.IX Item "-ffunction-sections"
+.PD 0
+.IP "\fB\-fdata\-sections\fR" 4
+.IX Item "-fdata-sections"
+.PD
+Place each function or data item into its own section in the output
+file if the target supports arbitrary sections.  The name of the
+function or the name of the data item determines the section's name
+in the output file.
+.Sp
+Use these options on systems where the linker can perform optimizations to
+improve locality of reference in the instruction space.  Most systems using the
+\&\s-1ELF\s0 object format have linkers with such optimizations.  On \s-1AIX,\s0 the linker
+rearranges sections (CSECTs) based on the call graph.  The performance impact
+varies.
+.Sp
+Together with a linker garbage collection (linker \fB\-\-gc\-sections\fR
+option) these options may lead to smaller statically-linked executables (after
+stripping).
+.Sp
+On \s-1ELF/DWARF\s0 systems these options do not degenerate the quality of the debug
+information.  There could be issues with other object files/debug info formats.
+.Sp
+Only use these options when there are significant benefits from doing so.  When
+you specify these options, the assembler and linker create larger object and
+executable files and are also slower.  These options affect code generation.
+They prevent optimizations by the compiler and assembler using relative
+locations inside a translation unit since the locations are unknown until
+link time.  An example of such an optimization is relaxing calls to short call
+instructions.
+.IP "\fB\-fbranch\-target\-load\-optimize\fR" 4
+.IX Item "-fbranch-target-load-optimize"
+Perform branch target register load optimization before prologue / epilogue
+threading.
+The use of target registers can typically be exposed only during reload,
+thus hoisting loads out of loops and doing inter-block scheduling needs
+a separate optimization pass.
+.IP "\fB\-fbranch\-target\-load\-optimize2\fR" 4
+.IX Item "-fbranch-target-load-optimize2"
+Perform branch target register load optimization after prologue / epilogue
+threading.
+.IP "\fB\-fbtr\-bb\-exclusive\fR" 4
+.IX Item "-fbtr-bb-exclusive"
+When performing branch target register load optimization, don't reuse
+branch target registers within any basic block.
+.IP "\fB\-fstdarg\-opt\fR" 4
+.IX Item "-fstdarg-opt"
+Optimize the prologue of variadic argument functions with respect to usage of
+those arguments.
+.IP "\fB\-fsection\-anchors\fR" 4
+.IX Item "-fsection-anchors"
+Try to reduce the number of symbolic address calculations by using
+shared \*(L"anchor\*(R" symbols to address nearby objects.  This transformation
+can help to reduce the number of \s-1GOT\s0 entries and \s-1GOT\s0 accesses on some
+targets.
+.Sp
+For example, the implementation of the following function \f(CW\*(C`foo\*(C'\fR:
+.Sp
+.Vb 2
+\&        static int a, b, c;
+\&        int foo (void) { return a + b + c; }
+.Ve
+.Sp
+usually calculates the addresses of all three variables, but if you
+compile it with \fB\-fsection\-anchors\fR, it accesses the variables
+from a common anchor point instead.  The effect is similar to the
+following pseudocode (which isn't valid C):
+.Sp
+.Vb 5
+\&        int foo (void)
+\&        {
+\&          register int *xr = &x;
+\&          return xr[&a \- &x] + xr[&b \- &x] + xr[&c \- &x];
+\&        }
+.Ve
+.Sp
+Not all targets support this option.
+.IP "\fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR" 4
+.IX Item "--param name=value"
+In some places, \s-1GCC\s0 uses various constants to control the amount of
+optimization that is done.  For example, \s-1GCC\s0 does not inline functions
+that contain more than a certain number of instructions.  You can
+control some of these constants on the command line using the
+\&\fB\-\-param\fR option.
+.Sp
+The names of specific parameters, and the meaning of the values, are
+tied to the internals of the compiler, and are subject to change
+without notice in future releases.
+.Sp
+In order to get minimal, maximal and default value of a parameter,
+one can use \fB\-\-help=param \-Q\fR options.
+.Sp
+In each case, the \fIvalue\fR is an integer.  The allowable choices for
+\&\fIname\fR are:
+.RS 4
+.IP "\fBpredictable-branch-outcome\fR" 4
+.IX Item "predictable-branch-outcome"
+When branch is predicted to be taken with probability lower than this threshold
+(in percent), then it is considered well predictable.
+.IP "\fBmax-rtl-if-conversion-insns\fR" 4
+.IX Item "max-rtl-if-conversion-insns"
+\&\s-1RTL\s0 if-conversion tries to remove conditional branches around a block and
+replace them with conditionally executed instructions.  This parameter
+gives the maximum number of instructions in a block which should be
+considered for if-conversion.  The compiler will
+also use other heuristics to decide whether if-conversion is likely to be
+profitable.
+.IP "\fBmax-rtl-if-conversion-predictable-cost\fR" 4
+.IX Item "max-rtl-if-conversion-predictable-cost"
+.PD 0
+.IP "\fBmax-rtl-if-conversion-unpredictable-cost\fR" 4
+.IX Item "max-rtl-if-conversion-unpredictable-cost"
+.PD
+\&\s-1RTL\s0 if-conversion will try to remove conditional branches around a block
+and replace them with conditionally executed instructions.  These parameters
+give the maximum permissible cost for the sequence that would be generated
+by if-conversion depending on whether the branch is statically determined
+to be predictable or not.  The units for this parameter are the same as
+those for the \s-1GCC\s0 internal seq_cost metric.  The compiler will try to
+provide a reasonable default for this parameter using the \s-1BRANCH_COST\s0
+target macro.
+.IP "\fBmax-crossjump-edges\fR" 4
+.IX Item "max-crossjump-edges"
+The maximum number of incoming edges to consider for cross-jumping.
+The algorithm used by \fB\-fcrossjumping\fR is O(N^2) in
+the number of edges incoming to each block.  Increasing values mean
+more aggressive optimization, making the compilation time increase with
+probably small improvement in executable size.
+.IP "\fBmin-crossjump-insns\fR" 4
+.IX Item "min-crossjump-insns"
+The minimum number of instructions that must be matched at the end
+of two blocks before cross-jumping is performed on them.  This
+value is ignored in the case where all instructions in the block being
+cross-jumped from are matched.
+.IP "\fBmax-grow-copy-bb-insns\fR" 4
+.IX Item "max-grow-copy-bb-insns"
+The maximum code size expansion factor when copying basic blocks
+instead of jumping.  The expansion is relative to a jump instruction.
+.IP "\fBmax-goto-duplication-insns\fR" 4
+.IX Item "max-goto-duplication-insns"
+The maximum number of instructions to duplicate to a block that jumps
+to a computed goto.  To avoid O(N^2) behavior in a number of
+passes, \s-1GCC\s0 factors computed gotos early in the compilation process,
+and unfactors them as late as possible.  Only computed jumps at the
+end of a basic blocks with no more than max-goto-duplication-insns are
+unfactored.
+.IP "\fBmax-delay-slot-insn-search\fR" 4
+.IX Item "max-delay-slot-insn-search"
+The maximum number of instructions to consider when looking for an
+instruction to fill a delay slot.  If more than this arbitrary number of
+instructions are searched, the time savings from filling the delay slot
+are minimal, so stop searching.  Increasing values mean more
+aggressive optimization, making the compilation time increase with probably
+small improvement in execution time.
+.IP "\fBmax-delay-slot-live-search\fR" 4
+.IX Item "max-delay-slot-live-search"
+When trying to fill delay slots, the maximum number of instructions to
+consider when searching for a block with valid live register
+information.  Increasing this arbitrarily chosen value means more
+aggressive optimization, increasing the compilation time.  This parameter
+should be removed when the delay slot code is rewritten to maintain the
+control-flow graph.
+.IP "\fBmax-gcse-memory\fR" 4
+.IX Item "max-gcse-memory"
+The approximate maximum amount of memory that can be allocated in
+order to perform the global common subexpression elimination
+optimization.  If more memory than specified is required, the
+optimization is not done.
+.IP "\fBmax-gcse-insertion-ratio\fR" 4
+.IX Item "max-gcse-insertion-ratio"
+If the ratio of expression insertions to deletions is larger than this value
+for any expression, then \s-1RTL PRE\s0 inserts or removes the expression and thus
+leaves partially redundant computations in the instruction stream.
+.IP "\fBmax-pending-list-length\fR" 4
+.IX Item "max-pending-list-length"
+The maximum number of pending dependencies scheduling allows
+before flushing the current state and starting over.  Large functions
+with few branches or calls can create excessively large lists which
+needlessly consume memory and resources.
+.IP "\fBmax-modulo-backtrack-attempts\fR" 4
+.IX Item "max-modulo-backtrack-attempts"
+The maximum number of backtrack attempts the scheduler should make
+when modulo scheduling a loop.  Larger values can exponentially increase
+compilation time.
+.IP "\fBmax-inline-insns-single\fR" 4
+.IX Item "max-inline-insns-single"
+Several parameters control the tree inliner used in \s-1GCC.\s0
+This number sets the maximum number of instructions (counted in \s-1GCC\s0's
+internal representation) in a single function that the tree inliner
+considers for inlining.  This only affects functions declared
+inline and methods implemented in a class declaration (\*(C+).
+.IP "\fBmax-inline-insns-auto\fR" 4
+.IX Item "max-inline-insns-auto"
+When you use \fB\-finline\-functions\fR (included in \fB\-O3\fR),
+a lot of functions that would otherwise not be considered for inlining
+by the compiler are investigated.  To those functions, a different
+(more restrictive) limit compared to functions declared inline can
+be applied.
+.IP "\fBmax-inline-insns-small\fR" 4
+.IX Item "max-inline-insns-small"
+This is bound applied to calls which are considered relevant with
+\&\fB\-finline\-small\-functions\fR.
+.IP "\fBmax-inline-insns-size\fR" 4
+.IX Item "max-inline-insns-size"
+This is bound applied to calls which are optimized for size. Small growth
+may be desirable to anticipate optimization oppurtunities exposed by inlining.
+.IP "\fBuninlined-function-insns\fR" 4
+.IX Item "uninlined-function-insns"
+Number of instructions accounted by inliner for function overhead such as
+function prologue and epilogue.
+.IP "\fBuninlined-function-time\fR" 4
+.IX Item "uninlined-function-time"
+Extra time accounted by inliner for function overhead such as time needed to
+execute function prologue and epilogue
+.IP "\fBuninlined-thunk-insns\fR" 4
+.IX Item "uninlined-thunk-insns"
+.PD 0
+.IP "\fBuninlined-thunk-time\fR" 4
+.IX Item "uninlined-thunk-time"
+.PD
+Same as \fB\-\-param uninlined-function-insns\fR and
+\&\fB\-\-param uninlined-function-time\fR but applied to function thunks
+.IP "\fBinline-min-speedup\fR" 4
+.IX Item "inline-min-speedup"
+When estimated performance improvement of caller + callee runtime exceeds this
+threshold (in percent), the function can be inlined regardless of the limit on
+\&\fB\-\-param max-inline-insns-single\fR and \fB\-\-param
+max-inline-insns-auto\fR.
+.IP "\fBlarge-function-insns\fR" 4
+.IX Item "large-function-insns"
+The limit specifying really large functions.  For functions larger than this
+limit after inlining, inlining is constrained by
+\&\fB\-\-param large-function-growth\fR.  This parameter is useful primarily
+to avoid extreme compilation time caused by non-linear algorithms used by the
+back end.
+.IP "\fBlarge-function-growth\fR" 4
+.IX Item "large-function-growth"
+Specifies maximal growth of large function caused by inlining in percents.
+For example, parameter value 100 limits large function growth to 2.0 times
+the original size.
+.IP "\fBlarge-unit-insns\fR" 4
+.IX Item "large-unit-insns"
+The limit specifying large translation unit.  Growth caused by inlining of
+units larger than this limit is limited by \fB\-\-param inline-unit-growth\fR.
+For small units this might be too tight.
+For example, consider a unit consisting of function A
+that is inline and B that just calls A three times.  If B is small relative to
+A, the growth of unit is 300\e% and yet such inlining is very sane.  For very
+large units consisting of small inlineable functions, however, the overall unit
+growth limit is needed to avoid exponential explosion of code size.  Thus for
+smaller units, the size is increased to \fB\-\-param large-unit-insns\fR
+before applying \fB\-\-param inline-unit-growth\fR.
+.IP "\fBinline-unit-growth\fR" 4
+.IX Item "inline-unit-growth"
+Specifies maximal overall growth of the compilation unit caused by inlining.
+For example, parameter value 20 limits unit growth to 1.2 times the original
+size. Cold functions (either marked cold via an attribute or by profile
+feedback) are not accounted into the unit size.
+.IP "\fBipcp-unit-growth\fR" 4
+.IX Item "ipcp-unit-growth"
+Specifies maximal overall growth of the compilation unit caused by
+interprocedural constant propagation.  For example, parameter value 10 limits
+unit growth to 1.1 times the original size.
+.IP "\fBlarge-stack-frame\fR" 4
+.IX Item "large-stack-frame"
+The limit specifying large stack frames.  While inlining the algorithm is trying
+to not grow past this limit too much.
+.IP "\fBlarge-stack-frame-growth\fR" 4
+.IX Item "large-stack-frame-growth"
+Specifies maximal growth of large stack frames caused by inlining in percents.
+For example, parameter value 1000 limits large stack frame growth to 11 times
+the original size.
+.IP "\fBmax-inline-insns-recursive\fR" 4
+.IX Item "max-inline-insns-recursive"
+.PD 0
+.IP "\fBmax-inline-insns-recursive-auto\fR" 4
+.IX Item "max-inline-insns-recursive-auto"
+.PD
+Specifies the maximum number of instructions an out-of-line copy of a
+self-recursive inline
+function can grow into by performing recursive inlining.
+.Sp
+\&\fB\-\-param max-inline-insns-recursive\fR applies to functions
+declared inline.
+For functions not declared inline, recursive inlining
+happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
+enabled; \fB\-\-param max-inline-insns-recursive-auto\fR applies instead.
+.IP "\fBmax-inline-recursive-depth\fR" 4
+.IX Item "max-inline-recursive-depth"
+.PD 0
+.IP "\fBmax-inline-recursive-depth-auto\fR" 4
+.IX Item "max-inline-recursive-depth-auto"
+.PD
+Specifies the maximum recursion depth used for recursive inlining.
+.Sp
+\&\fB\-\-param max-inline-recursive-depth\fR applies to functions
+declared inline.  For functions not declared inline, recursive inlining
+happens only when \fB\-finline\-functions\fR (included in \fB\-O3\fR) is
+enabled; \fB\-\-param max-inline-recursive-depth-auto\fR applies instead.
+.IP "\fBmin-inline-recursive-probability\fR" 4
+.IX Item "min-inline-recursive-probability"
+Recursive inlining is profitable only for function having deep recursion
+in average and can hurt for function having little recursion depth by
+increasing the prologue size or complexity of function body to other
+optimizers.
+.Sp
+When profile feedback is available (see \fB\-fprofile\-generate\fR) the actual
+recursion depth can be guessed from the probability that function recurses
+via a given call expression.  This parameter limits inlining only to call
+expressions whose probability exceeds the given threshold (in percents).
+.IP "\fBearly-inlining-insns\fR" 4
+.IX Item "early-inlining-insns"
+Specify growth that the early inliner can make.  In effect it increases
+the amount of inlining for code having a large abstraction penalty.
+.IP "\fBmax-early-inliner-iterations\fR" 4
+.IX Item "max-early-inliner-iterations"
+Limit of iterations of the early inliner.  This basically bounds
+the number of nested indirect calls the early inliner can resolve.
+Deeper chains are still handled by late inlining.
+.IP "\fBcomdat-sharing-probability\fR" 4
+.IX Item "comdat-sharing-probability"
+Probability (in percent) that \*(C+ inline function with comdat visibility
+are shared across multiple compilation units.
+.IP "\fBprofile-func-internal-id\fR" 4
+.IX Item "profile-func-internal-id"
+A parameter to control whether to use function internal id in profile
+database lookup. If the value is 0, the compiler uses an id that
+is based on function assembler name and filename, which makes old profile
+data more tolerant to source changes such as function reordering etc.
+.IP "\fBmin-vect-loop-bound\fR" 4
+.IX Item "min-vect-loop-bound"
+The minimum number of iterations under which loops are not vectorized
+when \fB\-ftree\-vectorize\fR is used.  The number of iterations after
+vectorization needs to be greater than the value specified by this option
+to allow vectorization.
+.IP "\fBgcse-cost-distance-ratio\fR" 4
+.IX Item "gcse-cost-distance-ratio"
+Scaling factor in calculation of maximum distance an expression
+can be moved by \s-1GCSE\s0 optimizations.  This is currently supported only in the
+code hoisting pass.  The bigger the ratio, the more aggressive code hoisting
+is with simple expressions, i.e., the expressions that have cost
+less than \fBgcse-unrestricted-cost\fR.  Specifying 0 disables
+hoisting of simple expressions.
+.IP "\fBgcse-unrestricted-cost\fR" 4
+.IX Item "gcse-unrestricted-cost"
+Cost, roughly measured as the cost of a single typical machine
+instruction, at which \s-1GCSE\s0 optimizations do not constrain
+the distance an expression can travel.  This is currently
+supported only in the code hoisting pass.  The lesser the cost,
+the more aggressive code hoisting is.  Specifying 0 
+allows all expressions to travel unrestricted distances.
+.IP "\fBmax-hoist-depth\fR" 4
+.IX Item "max-hoist-depth"
+The depth of search in the dominator tree for expressions to hoist.
+This is used to avoid quadratic behavior in hoisting algorithm.
+The value of 0 does not limit on the search, but may slow down compilation
+of huge functions.
+.IP "\fBmax-tail-merge-comparisons\fR" 4
+.IX Item "max-tail-merge-comparisons"
+The maximum amount of similar bbs to compare a bb with.  This is used to
+avoid quadratic behavior in tree tail merging.
+.IP "\fBmax-tail-merge-iterations\fR" 4
+.IX Item "max-tail-merge-iterations"
+The maximum amount of iterations of the pass over the function.  This is used to
+limit compilation time in tree tail merging.
+.IP "\fBstore-merging-allow-unaligned\fR" 4
+.IX Item "store-merging-allow-unaligned"
+Allow the store merging pass to introduce unaligned stores if it is legal to
+do so.
+.IP "\fBmax-stores-to-merge\fR" 4
+.IX Item "max-stores-to-merge"
+The maximum number of stores to attempt to merge into wider stores in the store
+merging pass.
+.IP "\fBmax-unrolled-insns\fR" 4
+.IX Item "max-unrolled-insns"
+The maximum number of instructions that a loop may have to be unrolled.
+If a loop is unrolled, this parameter also determines how many times
+the loop code is unrolled.
+.IP "\fBmax-average-unrolled-insns\fR" 4
+.IX Item "max-average-unrolled-insns"
+The maximum number of instructions biased by probabilities of their execution
+that a loop may have to be unrolled.  If a loop is unrolled,
+this parameter also determines how many times the loop code is unrolled.
+.IP "\fBmax-unroll-times\fR" 4
+.IX Item "max-unroll-times"
+The maximum number of unrollings of a single loop.
+.IP "\fBmax-peeled-insns\fR" 4
+.IX Item "max-peeled-insns"
+The maximum number of instructions that a loop may have to be peeled.
+If a loop is peeled, this parameter also determines how many times
+the loop code is peeled.
+.IP "\fBmax-peel-times\fR" 4
+.IX Item "max-peel-times"
+The maximum number of peelings of a single loop.
+.IP "\fBmax-peel-branches\fR" 4
+.IX Item "max-peel-branches"
+The maximum number of branches on the hot path through the peeled sequence.
+.IP "\fBmax-completely-peeled-insns\fR" 4
+.IX Item "max-completely-peeled-insns"
+The maximum number of insns of a completely peeled loop.
+.IP "\fBmax-completely-peel-times\fR" 4
+.IX Item "max-completely-peel-times"
+The maximum number of iterations of a loop to be suitable for complete peeling.
+.IP "\fBmax-completely-peel-loop-nest-depth\fR" 4
+.IX Item "max-completely-peel-loop-nest-depth"
+The maximum depth of a loop nest suitable for complete peeling.
+.IP "\fBmax-unswitch-insns\fR" 4
+.IX Item "max-unswitch-insns"
+The maximum number of insns of an unswitched loop.
+.IP "\fBmax-unswitch-level\fR" 4
+.IX Item "max-unswitch-level"
+The maximum number of branches unswitched in a single loop.
+.IP "\fBlim-expensive\fR" 4
+.IX Item "lim-expensive"
+The minimum cost of an expensive expression in the loop invariant motion.
+.IP "\fBiv-consider-all-candidates-bound\fR" 4
+.IX Item "iv-consider-all-candidates-bound"
+Bound on number of candidates for induction variables, below which
+all candidates are considered for each use in induction variable
+optimizations.  If there are more candidates than this,
+only the most relevant ones are considered to avoid quadratic time complexity.
+.IP "\fBiv-max-considered-uses\fR" 4
+.IX Item "iv-max-considered-uses"
+The induction variable optimizations give up on loops that contain more
+induction variable uses.
+.IP "\fBiv-always-prune-cand-set-bound\fR" 4
+.IX Item "iv-always-prune-cand-set-bound"
+If the number of candidates in the set is smaller than this value,
+always try to remove unnecessary ivs from the set
+when adding a new one.
+.IP "\fBavg-loop-niter\fR" 4
+.IX Item "avg-loop-niter"
+Average number of iterations of a loop.
+.IP "\fBdse-max-object-size\fR" 4
+.IX Item "dse-max-object-size"
+Maximum size (in bytes) of objects tracked bytewise by dead store elimination.
+Larger values may result in larger compilation times.
+.IP "\fBdse-max-alias-queries-per-store\fR" 4
+.IX Item "dse-max-alias-queries-per-store"
+Maximum number of queries into the alias oracle per store.
+Larger values result in larger compilation times and may result in more
+removed dead stores.
+.IP "\fBscev-max-expr-size\fR" 4
+.IX Item "scev-max-expr-size"
+Bound on size of expressions used in the scalar evolutions analyzer.
+Large expressions slow the analyzer.
+.IP "\fBscev-max-expr-complexity\fR" 4
+.IX Item "scev-max-expr-complexity"
+Bound on the complexity of the expressions in the scalar evolutions analyzer.
+Complex expressions slow the analyzer.
+.IP "\fBmax-tree-if-conversion-phi-args\fR" 4
+.IX Item "max-tree-if-conversion-phi-args"
+Maximum number of arguments in a \s-1PHI\s0 supported by \s-1TREE\s0 if conversion
+unless the loop is marked with simd pragma.
+.IP "\fBvect-max-version-for-alignment-checks\fR" 4
+.IX Item "vect-max-version-for-alignment-checks"
+The maximum number of run-time checks that can be performed when
+doing loop versioning for alignment in the vectorizer.
+.IP "\fBvect-max-version-for-alias-checks\fR" 4
+.IX Item "vect-max-version-for-alias-checks"
+The maximum number of run-time checks that can be performed when
+doing loop versioning for alias in the vectorizer.
+.IP "\fBvect-max-peeling-for-alignment\fR" 4
+.IX Item "vect-max-peeling-for-alignment"
+The maximum number of loop peels to enhance access alignment
+for vectorizer. Value \-1 means no limit.
+.IP "\fBmax-iterations-to-track\fR" 4
+.IX Item "max-iterations-to-track"
+The maximum number of iterations of a loop the brute-force algorithm
+for analysis of the number of iterations of the loop tries to evaluate.
+.IP "\fBhot-bb-count-ws-permille\fR" 4
+.IX Item "hot-bb-count-ws-permille"
+A basic block profile count is considered hot if it contributes to 
+the given permillage (i.e. 0...1000) of the entire profiled execution.
+.IP "\fBhot-bb-frequency-fraction\fR" 4
+.IX Item "hot-bb-frequency-fraction"
+Select fraction of the entry block frequency of executions of basic block in
+function given basic block needs to have to be considered hot.
+.IP "\fBmax-predicted-iterations\fR" 4
+.IX Item "max-predicted-iterations"
+The maximum number of loop iterations we predict statically.  This is useful
+in cases where a function contains a single loop with known bound and
+another loop with unknown bound.
+The known number of iterations is predicted correctly, while
+the unknown number of iterations average to roughly 10.  This means that the
+loop without bounds appears artificially cold relative to the other one.
+.IP "\fBbuiltin-expect-probability\fR" 4
+.IX Item "builtin-expect-probability"
+Control the probability of the expression having the specified value. This
+parameter takes a percentage (i.e. 0 ... 100) as input.
+.IP "\fBbuiltin-string-cmp-inline-length\fR" 4
+.IX Item "builtin-string-cmp-inline-length"
+The maximum length of a constant string for a builtin string cmp call 
+eligible for inlining.
+.IP "\fBalign-threshold\fR" 4
+.IX Item "align-threshold"
+Select fraction of the maximal frequency of executions of a basic block in
+a function to align the basic block.
+.IP "\fBalign-loop-iterations\fR" 4
+.IX Item "align-loop-iterations"
+A loop expected to iterate at least the selected number of iterations is
+aligned.
+.IP "\fBtracer-dynamic-coverage\fR" 4
+.IX Item "tracer-dynamic-coverage"
+.PD 0
+.IP "\fBtracer-dynamic-coverage-feedback\fR" 4
+.IX Item "tracer-dynamic-coverage-feedback"
+.PD
+This value is used to limit superblock formation once the given percentage of
+executed instructions is covered.  This limits unnecessary code size
+expansion.
+.Sp
+The \fBtracer-dynamic-coverage-feedback\fR parameter
+is used only when profile
+feedback is available.  The real profiles (as opposed to statically estimated
+ones) are much less balanced allowing the threshold to be larger value.
+.IP "\fBtracer-max-code-growth\fR" 4
+.IX Item "tracer-max-code-growth"
+Stop tail duplication once code growth has reached given percentage.  This is
+a rather artificial limit, as most of the duplicates are eliminated later in
+cross jumping, so it may be set to much higher values than is the desired code
+growth.
+.IP "\fBtracer-min-branch-ratio\fR" 4
+.IX Item "tracer-min-branch-ratio"
+Stop reverse growth when the reverse probability of best edge is less than this
+threshold (in percent).
+.IP "\fBtracer-min-branch-probability\fR" 4
+.IX Item "tracer-min-branch-probability"
+.PD 0
+.IP "\fBtracer-min-branch-probability-feedback\fR" 4
+.IX Item "tracer-min-branch-probability-feedback"
+.PD
+Stop forward growth if the best edge has probability lower than this
+threshold.
+.Sp
+Similarly to \fBtracer-dynamic-coverage\fR two parameters are
+provided.  \fBtracer-min-branch-probability-feedback\fR is used for
+compilation with profile feedback and \fBtracer-min-branch-probability\fR
+compilation without.  The value for compilation with profile feedback
+needs to be more conservative (higher) in order to make tracer
+effective.
+.IP "\fBstack-clash-protection-guard-size\fR" 4
+.IX Item "stack-clash-protection-guard-size"
+Specify the size of the operating system provided stack guard as
+2 raised to \fInum\fR bytes.  Higher values may reduce the
+number of explicit probes, but a value larger than the operating system
+provided guard will leave code vulnerable to stack clash style attacks.
+.IP "\fBstack-clash-protection-probe-interval\fR" 4
+.IX Item "stack-clash-protection-probe-interval"
+Stack clash protection involves probing stack space as it is allocated.  This
+param controls the maximum distance between probes into the stack as 2 raised
+to \fInum\fR bytes.  Higher values may reduce the number of explicit probes, but a value
+larger than the operating system provided guard will leave code vulnerable to
+stack clash style attacks.
+.IP "\fBmax-cse-path-length\fR" 4
+.IX Item "max-cse-path-length"
+The maximum number of basic blocks on path that \s-1CSE\s0 considers.
+.IP "\fBmax-cse-insns\fR" 4
+.IX Item "max-cse-insns"
+The maximum number of instructions \s-1CSE\s0 processes before flushing.
+.IP "\fBggc-min-expand\fR" 4
+.IX Item "ggc-min-expand"
+\&\s-1GCC\s0 uses a garbage collector to manage its own memory allocation.  This
+parameter specifies the minimum percentage by which the garbage
+collector's heap should be allowed to expand between collections.
+Tuning this may improve compilation speed; it has no effect on code
+generation.
+.Sp
+The default is 30% + 70% * (\s-1RAM/1GB\s0) with an upper bound of 100% when
+\&\s-1RAM\s0 >= 1GB.  If \f(CW\*(C`getrlimit\*(C'\fR is available, the notion of \*(L"\s-1RAM\*(R"\s0 is
+the smallest of actual \s-1RAM\s0 and \f(CW\*(C`RLIMIT_DATA\*(C'\fR or \f(CW\*(C`RLIMIT_AS\*(C'\fR.  If
+\&\s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a particular platform, the lower
+bound of 30% is used.  Setting this parameter and
+\&\fBggc-min-heapsize\fR to zero causes a full collection to occur at
+every opportunity.  This is extremely slow, but can be useful for
+debugging.
+.IP "\fBggc-min-heapsize\fR" 4
+.IX Item "ggc-min-heapsize"
+Minimum size of the garbage collector's heap before it begins bothering
+to collect garbage.  The first collection occurs after the heap expands
+by \fBggc-min-expand\fR% beyond \fBggc-min-heapsize\fR.  Again,
+tuning this may improve compilation speed, and has no effect on code
+generation.
+.Sp
+The default is the smaller of \s-1RAM/8, RLIMIT_RSS,\s0 or a limit that
+tries to ensure that \s-1RLIMIT_DATA\s0 or \s-1RLIMIT_AS\s0 are not exceeded, but
+with a lower bound of 4096 (four megabytes) and an upper bound of
+131072 (128 megabytes).  If \s-1GCC\s0 is not able to calculate \s-1RAM\s0 on a
+particular platform, the lower bound is used.  Setting this parameter
+very large effectively disables garbage collection.  Setting this
+parameter and \fBggc-min-expand\fR to zero causes a full collection
+to occur at every opportunity.
+.IP "\fBmax-reload-search-insns\fR" 4
+.IX Item "max-reload-search-insns"
+The maximum number of instruction reload should look backward for equivalent
+register.  Increasing values mean more aggressive optimization, making the
+compilation time increase with probably slightly better performance.
+.IP "\fBmax-cselib-memory-locations\fR" 4
+.IX Item "max-cselib-memory-locations"
+The maximum number of memory locations cselib should take into account.
+Increasing values mean more aggressive optimization, making the compilation time
+increase with probably slightly better performance.
+.IP "\fBmax-sched-ready-insns\fR" 4
+.IX Item "max-sched-ready-insns"
+The maximum number of instructions ready to be issued the scheduler should
+consider at any given time during the first scheduling pass.  Increasing
+values mean more thorough searches, making the compilation time increase
+with probably little benefit.
+.IP "\fBmax-sched-region-blocks\fR" 4
+.IX Item "max-sched-region-blocks"
+The maximum number of blocks in a region to be considered for
+interblock scheduling.
+.IP "\fBmax-pipeline-region-blocks\fR" 4
+.IX Item "max-pipeline-region-blocks"
+The maximum number of blocks in a region to be considered for
+pipelining in the selective scheduler.
+.IP "\fBmax-sched-region-insns\fR" 4
+.IX Item "max-sched-region-insns"
+The maximum number of insns in a region to be considered for
+interblock scheduling.
+.IP "\fBmax-pipeline-region-insns\fR" 4
+.IX Item "max-pipeline-region-insns"
+The maximum number of insns in a region to be considered for
+pipelining in the selective scheduler.
+.IP "\fBmin-spec-prob\fR" 4
+.IX Item "min-spec-prob"
+The minimum probability (in percents) of reaching a source block
+for interblock speculative scheduling.
+.IP "\fBmax-sched-extend-regions-iters\fR" 4
+.IX Item "max-sched-extend-regions-iters"
+The maximum number of iterations through \s-1CFG\s0 to extend regions.
+A value of 0 disables region extensions.
+.IP "\fBmax-sched-insn-conflict-delay\fR" 4
+.IX Item "max-sched-insn-conflict-delay"
+The maximum conflict delay for an insn to be considered for speculative motion.
+.IP "\fBsched-spec-prob-cutoff\fR" 4
+.IX Item "sched-spec-prob-cutoff"
+The minimal probability of speculation success (in percents), so that
+speculative insns are scheduled.
+.IP "\fBsched-state-edge-prob-cutoff\fR" 4
+.IX Item "sched-state-edge-prob-cutoff"
+The minimum probability an edge must have for the scheduler to save its
+state across it.
+.IP "\fBsched-mem-true-dep-cost\fR" 4
+.IX Item "sched-mem-true-dep-cost"
+Minimal distance (in \s-1CPU\s0 cycles) between store and load targeting same
+memory locations.
+.IP "\fBselsched-max-lookahead\fR" 4
+.IX Item "selsched-max-lookahead"
+The maximum size of the lookahead window of selective scheduling.  It is a
+depth of search for available instructions.
+.IP "\fBselsched-max-sched-times\fR" 4
+.IX Item "selsched-max-sched-times"
+The maximum number of times that an instruction is scheduled during
+selective scheduling.  This is the limit on the number of iterations
+through which the instruction may be pipelined.
+.IP "\fBselsched-insns-to-rename\fR" 4
+.IX Item "selsched-insns-to-rename"
+The maximum number of best instructions in the ready list that are considered
+for renaming in the selective scheduler.
+.IP "\fBsms-min-sc\fR" 4
+.IX Item "sms-min-sc"
+The minimum value of stage count that swing modulo scheduler
+generates.
+.IP "\fBmax-last-value-rtl\fR" 4
+.IX Item "max-last-value-rtl"
+The maximum size measured as number of RTLs that can be recorded in an expression
+in combiner for a pseudo register as last known value of that register.
+.IP "\fBmax-combine-insns\fR" 4
+.IX Item "max-combine-insns"
+The maximum number of instructions the \s-1RTL\s0 combiner tries to combine.
+.IP "\fBinteger-share-limit\fR" 4
+.IX Item "integer-share-limit"
+Small integer constants can use a shared data structure, reducing the
+compiler's memory usage and increasing its speed.  This sets the maximum
+value of a shared integer constant.
+.IP "\fBssp-buffer-size\fR" 4
+.IX Item "ssp-buffer-size"
+The minimum size of buffers (i.e. arrays) that receive stack smashing
+protection when \fB\-fstack\-protection\fR is used.
+.IP "\fBmin-size-for-stack-sharing\fR" 4
+.IX Item "min-size-for-stack-sharing"
+The minimum size of variables taking part in stack slot sharing when not
+optimizing.
+.IP "\fBmax-jump-thread-duplication-stmts\fR" 4
+.IX Item "max-jump-thread-duplication-stmts"
+Maximum number of statements allowed in a block that needs to be
+duplicated when threading jumps.
+.IP "\fBmax-fields-for-field-sensitive\fR" 4
+.IX Item "max-fields-for-field-sensitive"
+Maximum number of fields in a structure treated in
+a field sensitive manner during pointer analysis.
+.IP "\fBprefetch-latency\fR" 4
+.IX Item "prefetch-latency"
+Estimate on average number of instructions that are executed before
+prefetch finishes.  The distance prefetched ahead is proportional
+to this constant.  Increasing this number may also lead to less
+streams being prefetched (see \fBsimultaneous-prefetches\fR).
+.IP "\fBsimultaneous-prefetches\fR" 4
+.IX Item "simultaneous-prefetches"
+Maximum number of prefetches that can run at the same time.
+.IP "\fBl1\-cache\-line\-size\fR" 4
+.IX Item "l1-cache-line-size"
+The size of cache line in L1 data cache, in bytes.
+.IP "\fBl1\-cache\-size\fR" 4
+.IX Item "l1-cache-size"
+The size of L1 data cache, in kilobytes.
+.IP "\fBl2\-cache\-size\fR" 4
+.IX Item "l2-cache-size"
+The size of L2 data cache, in kilobytes.
+.IP "\fBprefetch-dynamic-strides\fR" 4
+.IX Item "prefetch-dynamic-strides"
+Whether the loop array prefetch pass should issue software prefetch hints
+for strides that are non-constant.  In some cases this may be
+beneficial, though the fact the stride is non-constant may make it
+hard to predict when there is clear benefit to issuing these hints.
+.Sp
+Set to 1 if the prefetch hints should be issued for non-constant
+strides.  Set to 0 if prefetch hints should be issued only for strides that
+are known to be constant and below \fBprefetch-minimum-stride\fR.
+.IP "\fBprefetch-minimum-stride\fR" 4
+.IX Item "prefetch-minimum-stride"
+Minimum constant stride, in bytes, to start using prefetch hints for.  If
+the stride is less than this threshold, prefetch hints will not be issued.
+.Sp
+This setting is useful for processors that have hardware prefetchers, in
+which case there may be conflicts between the hardware prefetchers and
+the software prefetchers.  If the hardware prefetchers have a maximum
+stride they can handle, it should be used here to improve the use of
+software prefetchers.
+.Sp
+A value of \-1 means we don't have a threshold and therefore
+prefetch hints can be issued for any constant stride.
+.Sp
+This setting is only useful for strides that are known and constant.
+.IP "\fBloop-interchange-max-num-stmts\fR" 4
+.IX Item "loop-interchange-max-num-stmts"
+The maximum number of stmts in a loop to be interchanged.
+.IP "\fBloop-interchange-stride-ratio\fR" 4
+.IX Item "loop-interchange-stride-ratio"
+The minimum ratio between stride of two loops for interchange to be profitable.
+.IP "\fBmin-insn-to-prefetch-ratio\fR" 4
+.IX Item "min-insn-to-prefetch-ratio"
+The minimum ratio between the number of instructions and the
+number of prefetches to enable prefetching in a loop.
+.IP "\fBprefetch-min-insn-to-mem-ratio\fR" 4
+.IX Item "prefetch-min-insn-to-mem-ratio"
+The minimum ratio between the number of instructions and the
+number of memory references to enable prefetching in a loop.
+.IP "\fBuse-canonical-types\fR" 4
+.IX Item "use-canonical-types"
+Whether the compiler should use the \*(L"canonical\*(R" type system.
+Should always be 1, which uses a more efficient internal
+mechanism for comparing types in \*(C+ and Objective\-\*(C+.  However, if
+bugs in the canonical type system are causing compilation failures,
+set this value to 0 to disable canonical types.
+.IP "\fBswitch-conversion-max-branch-ratio\fR" 4
+.IX Item "switch-conversion-max-branch-ratio"
+Switch initialization conversion refuses to create arrays that are
+bigger than \fBswitch-conversion-max-branch-ratio\fR times the number of
+branches in the switch.
+.IP "\fBmax-partial-antic-length\fR" 4
+.IX Item "max-partial-antic-length"
+Maximum length of the partial antic set computed during the tree
+partial redundancy elimination optimization (\fB\-ftree\-pre\fR) when
+optimizing at \fB\-O3\fR and above.  For some sorts of source code
+the enhanced partial redundancy elimination optimization can run away,
+consuming all of the memory available on the host machine.  This
+parameter sets a limit on the length of the sets that are computed,
+which prevents the runaway behavior.  Setting a value of 0 for
+this parameter allows an unlimited set length.
+.IP "\fBrpo-vn-max-loop-depth\fR" 4
+.IX Item "rpo-vn-max-loop-depth"
+Maximum loop depth that is value-numbered optimistically.
+When the limit hits the innermost
+\&\fIrpo-vn-max-loop-depth\fR loops and the outermost loop in the
+loop nest are value-numbered optimistically and the remaining ones not.
+.IP "\fBsccvn-max-alias-queries-per-access\fR" 4
+.IX Item "sccvn-max-alias-queries-per-access"
+Maximum number of alias-oracle queries we perform when looking for
+redundancies for loads and stores.  If this limit is hit the search
+is aborted and the load or store is not considered redundant.  The
+number of queries is algorithmically limited to the number of
+stores on all paths from the load to the function entry.
+.IP "\fBira-max-loops-num\fR" 4
+.IX Item "ira-max-loops-num"
+\&\s-1IRA\s0 uses regional register allocation by default.  If a function
+contains more loops than the number given by this parameter, only at most
+the given number of the most frequently-executed loops form regions
+for regional register allocation.
+.IP "\fBira-max-conflict-table-size\fR" 4
+.IX Item "ira-max-conflict-table-size"
+Although \s-1IRA\s0 uses a sophisticated algorithm to compress the conflict
+table, the table can still require excessive amounts of memory for
+huge functions.  If the conflict table for a function could be more
+than the size in \s-1MB\s0 given by this parameter, the register allocator
+instead uses a faster, simpler, and lower-quality
+algorithm that does not require building a pseudo-register conflict table.
+.IP "\fBira-loop-reserved-regs\fR" 4
+.IX Item "ira-loop-reserved-regs"
+\&\s-1IRA\s0 can be used to evaluate more accurate register pressure in loops
+for decisions to move loop invariants (see \fB\-O3\fR).  The number
+of available registers reserved for some other purposes is given
+by this parameter.  Default of the parameter
+is the best found from numerous experiments.
+.IP "\fBlra-inheritance-ebb-probability-cutoff\fR" 4
+.IX Item "lra-inheritance-ebb-probability-cutoff"
+\&\s-1LRA\s0 tries to reuse values reloaded in registers in subsequent insns.
+This optimization is called inheritance.  \s-1EBB\s0 is used as a region to
+do this optimization.  The parameter defines a minimal fall-through
+edge probability in percentage used to add \s-1BB\s0 to inheritance \s-1EBB\s0 in
+\&\s-1LRA.\s0  The default value was chosen
+from numerous runs of \s-1SPEC2000\s0 on x86\-64.
+.IP "\fBloop-invariant-max-bbs-in-loop\fR" 4
+.IX Item "loop-invariant-max-bbs-in-loop"
+Loop invariant motion can be very expensive, both in compilation time and
+in amount of needed compile-time memory, with very large loops.  Loops
+with more basic blocks than this parameter won't have loop invariant
+motion optimization performed on them.
+.IP "\fBloop-max-datarefs-for-datadeps\fR" 4
+.IX Item "loop-max-datarefs-for-datadeps"
+Building data dependencies is expensive for very large loops.  This
+parameter limits the number of data references in loops that are
+considered for data dependence analysis.  These large loops are no
+handled by the optimizations using loop data dependencies.
+.IP "\fBmax-vartrack-size\fR" 4
+.IX Item "max-vartrack-size"
+Sets a maximum number of hash table slots to use during variable
+tracking dataflow analysis of any function.  If this limit is exceeded
+with variable tracking at assignments enabled, analysis for that
+function is retried without it, after removing all debug insns from
+the function.  If the limit is exceeded even without debug insns, var
+tracking analysis is completely disabled for the function.  Setting
+the parameter to zero makes it unlimited.
+.IP "\fBmax-vartrack-expr-depth\fR" 4
+.IX Item "max-vartrack-expr-depth"
+Sets a maximum number of recursion levels when attempting to map
+variable names or debug temporaries to value expressions.  This trades
+compilation time for more complete debug information.  If this is set too
+low, value expressions that are available and could be represented in
+debug information may end up not being used; setting this higher may
+enable the compiler to find more complex debug expressions, but compile
+time and memory use may grow.
+.IP "\fBmax-debug-marker-count\fR" 4
+.IX Item "max-debug-marker-count"
+Sets a threshold on the number of debug markers (e.g. begin stmt
+markers) to avoid complexity explosion at inlining or expanding to \s-1RTL.\s0
+If a function has more such gimple stmts than the set limit, such stmts
+will be dropped from the inlined copy of a function, and from its \s-1RTL\s0
+expansion.
+.IP "\fBmin-nondebug-insn-uid\fR" 4
+.IX Item "min-nondebug-insn-uid"
+Use uids starting at this parameter for nondebug insns.  The range below
+the parameter is reserved exclusively for debug insns created by
+\&\fB\-fvar\-tracking\-assignments\fR, but debug insns may get
+(non-overlapping) uids above it if the reserved range is exhausted.
+.IP "\fBipa-sra-ptr-growth-factor\fR" 4
+.IX Item "ipa-sra-ptr-growth-factor"
+IPA-SRA replaces a pointer to an aggregate with one or more new
+parameters only when their cumulative size is less or equal to
+\&\fBipa-sra-ptr-growth-factor\fR times the size of the original
+pointer parameter.
+.IP "\fBsra-max-scalarization-size-Ospeed\fR" 4
+.IX Item "sra-max-scalarization-size-Ospeed"
+.PD 0
+.IP "\fBsra-max-scalarization-size-Osize\fR" 4
+.IX Item "sra-max-scalarization-size-Osize"
+.PD
+The two Scalar Reduction of Aggregates passes (\s-1SRA\s0 and IPA-SRA) aim to
+replace scalar parts of aggregates with uses of independent scalar
+variables.  These parameters control the maximum size, in storage units,
+of aggregate which is considered for replacement when compiling for
+speed
+(\fBsra-max-scalarization-size-Ospeed\fR) or size
+(\fBsra-max-scalarization-size-Osize\fR) respectively.
+.IP "\fBtm-max-aggregate-size\fR" 4
+.IX Item "tm-max-aggregate-size"
+When making copies of thread-local variables in a transaction, this
+parameter specifies the size in bytes after which variables are
+saved with the logging functions as opposed to save/restore code
+sequence pairs.  This option only applies when using
+\&\fB\-fgnu\-tm\fR.
+.IP "\fBgraphite-max-nb-scop-params\fR" 4
+.IX Item "graphite-max-nb-scop-params"
+To avoid exponential effects in the Graphite loop transforms, the
+number of parameters in a Static Control Part (SCoP) is bounded.
+A value of zero can be used to lift
+the bound.  A variable whose value is unknown at compilation time and
+defined outside a SCoP is a parameter of the SCoP.
+.IP "\fBloop-block-tile-size\fR" 4
+.IX Item "loop-block-tile-size"
+Loop blocking or strip mining transforms, enabled with
+\&\fB\-floop\-block\fR or \fB\-floop\-strip\-mine\fR, strip mine each
+loop in the loop nest by a given number of iterations.  The strip
+length can be changed using the \fBloop-block-tile-size\fR
+parameter.
+.IP "\fBipa-cp-value-list-size\fR" 4
+.IX Item "ipa-cp-value-list-size"
+IPA-CP attempts to track all possible values and types passed to a function's
+parameter in order to propagate them and perform devirtualization.
+\&\fBipa-cp-value-list-size\fR is the maximum number of values and types it
+stores per one formal parameter of a function.
+.IP "\fBipa-cp-eval-threshold\fR" 4
+.IX Item "ipa-cp-eval-threshold"
+IPA-CP calculates its own score of cloning profitability heuristics
+and performs those cloning opportunities with scores that exceed
+\&\fBipa-cp-eval-threshold\fR.
+.IP "\fBipa-cp-recursion-penalty\fR" 4
+.IX Item "ipa-cp-recursion-penalty"
+Percentage penalty the recursive functions will receive when they
+are evaluated for cloning.
+.IP "\fBipa-cp-single-call-penalty\fR" 4
+.IX Item "ipa-cp-single-call-penalty"
+Percentage penalty functions containing a single call to another
+function will receive when they are evaluated for cloning.
+.IP "\fBipa-max-agg-items\fR" 4
+.IX Item "ipa-max-agg-items"
+IPA-CP is also capable to propagate a number of scalar values passed
+in an aggregate. \fBipa-max-agg-items\fR controls the maximum
+number of such values per one parameter.
+.IP "\fBipa-cp-loop-hint-bonus\fR" 4
+.IX Item "ipa-cp-loop-hint-bonus"
+When IPA-CP determines that a cloning candidate would make the number
+of iterations of a loop known, it adds a bonus of
+\&\fBipa-cp-loop-hint-bonus\fR to the profitability score of
+the candidate.
+.IP "\fBipa-cp-array-index-hint-bonus\fR" 4
+.IX Item "ipa-cp-array-index-hint-bonus"
+When IPA-CP determines that a cloning candidate would make the index of
+an array access known, it adds a bonus of
+\&\fBipa-cp-array-index-hint-bonus\fR to the profitability
+score of the candidate.
+.IP "\fBipa-max-aa-steps\fR" 4
+.IX Item "ipa-max-aa-steps"
+During its analysis of function bodies, IPA-CP employs alias analysis
+in order to track values pointed to by function parameters.  In order
+not spend too much time analyzing huge functions, it gives up and
+consider all memory clobbered after examining
+\&\fBipa-max-aa-steps\fR statements modifying memory.
+.IP "\fBlto-partitions\fR" 4
+.IX Item "lto-partitions"
+Specify desired number of partitions produced during \s-1WHOPR\s0 compilation.
+The number of partitions should exceed the number of CPUs used for compilation.
+.IP "\fBlto-min-partition\fR" 4
+.IX Item "lto-min-partition"
+Size of minimal partition for \s-1WHOPR\s0 (in estimated instructions).
+This prevents expenses of splitting very small programs into too many
+partitions.
+.IP "\fBlto-max-partition\fR" 4
+.IX Item "lto-max-partition"
+Size of max partition for \s-1WHOPR\s0 (in estimated instructions).
+to provide an upper bound for individual size of partition.
+Meant to be used only with balanced partitioning.
+.IP "\fBlto-max-streaming-parallelism\fR" 4
+.IX Item "lto-max-streaming-parallelism"
+Maximal number of parallel processes used for \s-1LTO\s0 streaming.
+.IP "\fBcxx-max-namespaces-for-diagnostic-help\fR" 4
+.IX Item "cxx-max-namespaces-for-diagnostic-help"
+The maximum number of namespaces to consult for suggestions when \*(C+
+name lookup fails for an identifier.
+.IP "\fBsink-frequency-threshold\fR" 4
+.IX Item "sink-frequency-threshold"
+The maximum relative execution frequency (in percents) of the target block
+relative to a statement's original block to allow statement sinking of a
+statement.  Larger numbers result in more aggressive statement sinking.
+A small positive adjustment is applied for
+statements with memory operands as those are even more profitable so sink.
+.IP "\fBmax-stores-to-sink\fR" 4
+.IX Item "max-stores-to-sink"
+The maximum number of conditional store pairs that can be sunk.  Set to 0
+if either vectorization (\fB\-ftree\-vectorize\fR) or if-conversion
+(\fB\-ftree\-loop\-if\-convert\fR) is disabled.
+.IP "\fBallow-store-data-races\fR" 4
+.IX Item "allow-store-data-races"
+Allow optimizers to introduce new data races on stores.
+Set to 1 to allow, otherwise to 0.
+.IP "\fBcase-values-threshold\fR" 4
+.IX Item "case-values-threshold"
+The smallest number of different values for which it is best to use a
+jump-table instead of a tree of conditional branches.  If the value is
+0, use the default for the machine.
+.IP "\fBtree-reassoc-width\fR" 4
+.IX Item "tree-reassoc-width"
+Set the maximum number of instructions executed in parallel in
+reassociated tree. This parameter overrides target dependent
+heuristics used by default if has non zero value.
+.IP "\fBsched-pressure-algorithm\fR" 4
+.IX Item "sched-pressure-algorithm"
+Choose between the two available implementations of
+\&\fB\-fsched\-pressure\fR.  Algorithm 1 is the original implementation
+and is the more likely to prevent instructions from being reordered.
+Algorithm 2 was designed to be a compromise between the relatively
+conservative approach taken by algorithm 1 and the rather aggressive
+approach taken by the default scheduler.  It relies more heavily on
+having a regular register file and accurate register pressure classes.
+See \fIhaifa\-sched.c\fR in the \s-1GCC\s0 sources for more details.
+.Sp
+The default choice depends on the target.
+.IP "\fBmax-slsr-cand-scan\fR" 4
+.IX Item "max-slsr-cand-scan"
+Set the maximum number of existing candidates that are considered when
+seeking a basis for a new straight-line strength reduction candidate.
+.IP "\fBasan-globals\fR" 4
+.IX Item "asan-globals"
+Enable buffer overflow detection for global objects.  This kind
+of protection is enabled by default if you are using
+\&\fB\-fsanitize=address\fR option.
+To disable global objects protection use \fB\-\-param asan\-globals=0\fR.
+.IP "\fBasan-stack\fR" 4
+.IX Item "asan-stack"
+Enable buffer overflow detection for stack objects.  This kind of
+protection is enabled by default when using \fB\-fsanitize=address\fR.
+To disable stack protection use \fB\-\-param asan\-stack=0\fR option.
+.IP "\fBasan-instrument-reads\fR" 4
+.IX Item "asan-instrument-reads"
+Enable buffer overflow detection for memory reads.  This kind of
+protection is enabled by default when using \fB\-fsanitize=address\fR.
+To disable memory reads protection use
+\&\fB\-\-param asan\-instrument\-reads=0\fR.
+.IP "\fBasan-instrument-writes\fR" 4
+.IX Item "asan-instrument-writes"
+Enable buffer overflow detection for memory writes.  This kind of
+protection is enabled by default when using \fB\-fsanitize=address\fR.
+To disable memory writes protection use
+\&\fB\-\-param asan\-instrument\-writes=0\fR option.
+.IP "\fBasan-memintrin\fR" 4
+.IX Item "asan-memintrin"
+Enable detection for built-in functions.  This kind of protection
+is enabled by default when using \fB\-fsanitize=address\fR.
+To disable built-in functions protection use
+\&\fB\-\-param asan\-memintrin=0\fR.
+.IP "\fBasan-use-after-return\fR" 4
+.IX Item "asan-use-after-return"
+Enable detection of use-after-return.  This kind of protection
+is enabled by default when using the \fB\-fsanitize=address\fR option.
+To disable it use \fB\-\-param asan\-use\-after\-return=0\fR.
+.Sp
+Note: By default the check is disabled at run time.  To enable it,
+add \f(CW\*(C`detect_stack_use_after_return=1\*(C'\fR to the environment variable
+\&\fB\s-1ASAN_OPTIONS\s0\fR.
+.IP "\fBasan-instrumentation-with-call-threshold\fR" 4
+.IX Item "asan-instrumentation-with-call-threshold"
+If number of memory accesses in function being instrumented
+is greater or equal to this number, use callbacks instead of inline checks.
+E.g. to disable inline code use
+\&\fB\-\-param asan\-instrumentation\-with\-call\-threshold=0\fR.
+.IP "\fBuse-after-scope-direct-emission-threshold\fR" 4
+.IX Item "use-after-scope-direct-emission-threshold"
+If the size of a local variable in bytes is smaller or equal to this
+number, directly poison (or unpoison) shadow memory instead of using
+run-time callbacks.
+.IP "\fBmax-fsm-thread-path-insns\fR" 4
+.IX Item "max-fsm-thread-path-insns"
+Maximum number of instructions to copy when duplicating blocks on a
+finite state automaton jump thread path.
+.IP "\fBmax-fsm-thread-length\fR" 4
+.IX Item "max-fsm-thread-length"
+Maximum number of basic blocks on a finite state automaton jump thread
+path.
+.IP "\fBmax-fsm-thread-paths\fR" 4
+.IX Item "max-fsm-thread-paths"
+Maximum number of new jump thread paths to create for a finite state
+automaton.
+.IP "\fBparloops-chunk-size\fR" 4
+.IX Item "parloops-chunk-size"
+Chunk size of omp schedule for loops parallelized by parloops.
+.IP "\fBparloops-schedule\fR" 4
+.IX Item "parloops-schedule"
+Schedule type of omp schedule for loops parallelized by parloops (static,
+dynamic, guided, auto, runtime).
+.IP "\fBparloops-min-per-thread\fR" 4
+.IX Item "parloops-min-per-thread"
+The minimum number of iterations per thread of an innermost parallelized
+loop for which the parallelized variant is preferred over the single threaded
+one.  Note that for a parallelized loop nest the
+minimum number of iterations of the outermost loop per thread is two.
+.IP "\fBmax-ssa-name-query-depth\fR" 4
+.IX Item "max-ssa-name-query-depth"
+Maximum depth of recursion when querying properties of \s-1SSA\s0 names in things
+like fold routines.  One level of recursion corresponds to following a
+use-def chain.
+.IP "\fBhsa-gen-debug-stores\fR" 4
+.IX Item "hsa-gen-debug-stores"
+Enable emission of special debug stores within \s-1HSA\s0 kernels which are
+then read and reported by libgomp plugin.  Generation of these stores
+is disabled by default, use \fB\-\-param hsa\-gen\-debug\-stores=1\fR to
+enable it.
+.IP "\fBmax-speculative-devirt-maydefs\fR" 4
+.IX Item "max-speculative-devirt-maydefs"
+The maximum number of may-defs we analyze when looking for a must-def
+specifying the dynamic type of an object that invokes a virtual call
+we may be able to devirtualize speculatively.
+.IP "\fBmax-vrp-switch-assertions\fR" 4
+.IX Item "max-vrp-switch-assertions"
+The maximum number of assertions to add along the default edge of a switch
+statement during \s-1VRP.\s0
+.IP "\fBunroll-jam-min-percent\fR" 4
+.IX Item "unroll-jam-min-percent"
+The minimum percentage of memory references that must be optimized
+away for the unroll-and-jam transformation to be considered profitable.
+.IP "\fBunroll-jam-max-unroll\fR" 4
+.IX Item "unroll-jam-max-unroll"
+The maximum number of times the outer loop should be unrolled by
+the unroll-and-jam transformation.
+.IP "\fBmax-rtl-if-conversion-unpredictable-cost\fR" 4
+.IX Item "max-rtl-if-conversion-unpredictable-cost"
+Maximum permissible cost for the sequence that would be generated
+by the \s-1RTL\s0 if-conversion pass for a branch that is considered unpredictable.
+.IP "\fBmax-variable-expansions-in-unroller\fR" 4
+.IX Item "max-variable-expansions-in-unroller"
+If \fB\-fvariable\-expansion\-in\-unroller\fR is used, the maximum number
+of times that an individual variable will be expanded during loop unrolling.
+.IP "\fBtracer-min-branch-probability-feedback\fR" 4
+.IX Item "tracer-min-branch-probability-feedback"
+Stop forward growth if the probability of best edge is less than
+this threshold (in percent). Used when profile feedback is available.
+.IP "\fBpartial-inlining-entry-probability\fR" 4
+.IX Item "partial-inlining-entry-probability"
+Maximum probability of the entry \s-1BB\s0 of split region
+(in percent relative to entry \s-1BB\s0 of the function)
+to make partial inlining happen.
+.IP "\fBmax-tracked-strlens\fR" 4
+.IX Item "max-tracked-strlens"
+Maximum number of strings for which strlen optimization pass will
+track string lengths.
+.IP "\fBgcse-after-reload-partial-fraction\fR" 4
+.IX Item "gcse-after-reload-partial-fraction"
+The threshold ratio for performing partial redundancy
+elimination after reload.
+.IP "\fBgcse-after-reload-critical-fraction\fR" 4
+.IX Item "gcse-after-reload-critical-fraction"
+The threshold ratio of critical edges execution count that
+permit performing redundancy elimination after reload.
+.IP "\fBmax-loop-header-insns\fR" 4
+.IX Item "max-loop-header-insns"
+The maximum number of insns in loop header duplicated
+by the copy loop headers pass.
+.IP "\fBvect-epilogues-nomask\fR" 4
+.IX Item "vect-epilogues-nomask"
+Enable loop epilogue vectorization using smaller vector size.
+.IP "\fBslp-max-insns-in-bb\fR" 4
+.IX Item "slp-max-insns-in-bb"
+Maximum number of instructions in basic block to be
+considered for \s-1SLP\s0 vectorization.
+.IP "\fBavoid-fma-max-bits\fR" 4
+.IX Item "avoid-fma-max-bits"
+Maximum number of bits for which we avoid creating FMAs.
+.IP "\fBsms-loop-average-count-threshold\fR" 4
+.IX Item "sms-loop-average-count-threshold"
+A threshold on the average loop count considered by the swing modulo scheduler.
+.IP "\fBsms-dfa-history\fR" 4
+.IX Item "sms-dfa-history"
+The number of cycles the swing modulo scheduler considers when checking
+conflicts using \s-1DFA.\s0
+.IP "\fBhot-bb-count-fraction\fR" 4
+.IX Item "hot-bb-count-fraction"
+Select fraction of the maximal count of repetitions of basic block
+in program given basic block needs
+to have to be considered hot (used in non-LTO mode)
+.IP "\fBmax-inline-insns-recursive-auto\fR" 4
+.IX Item "max-inline-insns-recursive-auto"
+The maximum number of instructions non-inline function
+can grow to via recursive inlining.
+.IP "\fBgraphite-allow-codegen-errors\fR" 4
+.IX Item "graphite-allow-codegen-errors"
+Whether codegen errors should be ICEs when \fB\-fchecking\fR.
+.IP "\fBsms-max-ii-factor\fR" 4
+.IX Item "sms-max-ii-factor"
+A factor for tuning the upper bound that swing modulo scheduler
+uses for scheduling a loop.
+.IP "\fBlra-max-considered-reload-pseudos\fR" 4
+.IX Item "lra-max-considered-reload-pseudos"
+The max number of reload pseudos which are considered during
+spilling a non-reload pseudo.
+.IP "\fBmax-pow-sqrt-depth\fR" 4
+.IX Item "max-pow-sqrt-depth"
+Maximum depth of sqrt chains to use when synthesizing exponentiation
+by a real constant.
+.IP "\fBmax-dse-active-local-stores\fR" 4
+.IX Item "max-dse-active-local-stores"
+Maximum number of active local stores in \s-1RTL\s0 dead store elimination.
+.IP "\fBasan-instrument-allocas\fR" 4
+.IX Item "asan-instrument-allocas"
+Enable asan allocas/VLAs protection.
+.IP "\fBmax-iterations-computation-cost\fR" 4
+.IX Item "max-iterations-computation-cost"
+Bound on the cost of an expression to compute the number of iterations.
+.IP "\fBmax-isl-operations\fR" 4
+.IX Item "max-isl-operations"
+Maximum number of isl operations, 0 means unlimited.
+.IP "\fBgraphite-max-arrays-per-scop\fR" 4
+.IX Item "graphite-max-arrays-per-scop"
+Maximum number of arrays per scop.
+.IP "\fBmax-vartrack-reverse-op-size\fR" 4
+.IX Item "max-vartrack-reverse-op-size"
+Max. size of loc list for which reverse ops should be added.
+.IP "\fBunlikely-bb-count-fraction\fR" 4
+.IX Item "unlikely-bb-count-fraction"
+The minimum fraction of profile runs a given basic block execution count
+must be not to be considered unlikely.
+.IP "\fBtracer-dynamic-coverage-feedback\fR" 4
+.IX Item "tracer-dynamic-coverage-feedback"
+The percentage of function, weighted by execution frequency,
+that must be covered by trace formation.
+Used when profile feedback is available.
+.IP "\fBmax-inline-recursive-depth-auto\fR" 4
+.IX Item "max-inline-recursive-depth-auto"
+The maximum depth of recursive inlining for non-inline functions.
+.IP "\fBfsm-scale-path-stmts\fR" 4
+.IX Item "fsm-scale-path-stmts"
+Scale factor to apply to the number of statements in a threading path
+when comparing to the number of (scaled) blocks.
+.IP "\fBfsm-maximum-phi-arguments\fR" 4
+.IX Item "fsm-maximum-phi-arguments"
+Maximum number of arguments a \s-1PHI\s0 may have before the \s-1FSM\s0 threader
+will not try to thread through its block.
+.IP "\fBuninit-control-dep-attempts\fR" 4
+.IX Item "uninit-control-dep-attempts"
+Maximum number of nested calls to search for control dependencies
+during uninitialized variable analysis.
+.IP "\fBindir-call-topn-profile\fR" 4
+.IX Item "indir-call-topn-profile"
+Track top N target addresses in indirect-call profile.
+.IP "\fBmax-once-peeled-insns\fR" 4
+.IX Item "max-once-peeled-insns"
+The maximum number of insns of a peeled loop that rolls only once.
+.IP "\fBsra-max-scalarization-size-Osize\fR" 4
+.IX Item "sra-max-scalarization-size-Osize"
+Maximum size, in storage units, of an aggregate
+which should be considered for scalarization when compiling for size.
+.IP "\fBfsm-scale-path-blocks\fR" 4
+.IX Item "fsm-scale-path-blocks"
+Scale factor to apply to the number of blocks in a threading path
+when comparing to the number of (scaled) statements.
+.IP "\fBsched-autopref-queue-depth\fR" 4
+.IX Item "sched-autopref-queue-depth"
+Hardware autoprefetcher scheduler model control flag.
+Number of lookahead cycles the model looks into; at '
+\&' only enable instruction sorting heuristic.
+.IP "\fBloop-versioning-max-inner-insns\fR" 4
+.IX Item "loop-versioning-max-inner-insns"
+The maximum number of instructions that an inner loop can have
+before the loop versioning pass considers it too big to copy.
+.IP "\fBloop-versioning-max-outer-insns\fR" 4
+.IX Item "loop-versioning-max-outer-insns"
+The maximum number of instructions that an outer loop can have
+before the loop versioning pass considers it too big to copy,
+discounting any instructions in inner loops that directly benefit
+from versioning.
+.RE
+.RS 4
+.RE
+.SS "Program Instrumentation Options"
+.IX Subsection "Program Instrumentation Options"
+\&\s-1GCC\s0 supports a number of command-line options that control adding
+run-time instrumentation to the code it normally generates.  
+For example, one purpose of instrumentation is collect profiling
+statistics for use in finding program hot spots, code coverage
+analysis, or profile-guided optimizations.
+Another class of program instrumentation is adding run-time checking 
+to detect programming errors like invalid pointer
+dereferences or out-of-bounds array accesses, as well as deliberately
+hostile attacks such as stack smashing or \*(C+ vtable hijacking.
+There is also a general hook which can be used to implement other
+forms of tracing or function-level instrumentation for debug or
+program analysis purposes.
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+.PD 0
+.IP "\fB\-pg\fR" 4
+.IX Item "-pg"
+.PD
+Generate extra code to write profile information suitable for the
+analysis program \fBprof\fR (for \fB\-p\fR) or \fBgprof\fR
+(for \fB\-pg\fR).  You must use this option when compiling
+the source files you want data about, and you must also use it when
+linking.
+.Sp
+You can use the function attribute \f(CW\*(C`no_instrument_function\*(C'\fR to
+suppress profiling of individual functions when compiling with these options.
+.IP "\fB\-fprofile\-arcs\fR" 4
+.IX Item "-fprofile-arcs"
+Add code so that program flow \fIarcs\fR are instrumented.  During
+execution the program records how many times each branch and call is
+executed and how many times it is taken or returns.  On targets that support
+constructors with priority support, profiling properly handles constructors,
+destructors and \*(C+ constructors (and destructors) of classes which are used
+as a type of a global variable.
+.Sp
+When the compiled
+program exits it saves this data to a file called
+\&\fI\fIauxname\fI.gcda\fR for each source file.  The data may be used for
+profile-directed optimizations (\fB\-fbranch\-probabilities\fR), or for
+test coverage analysis (\fB\-ftest\-coverage\fR).  Each object file's
+\&\fIauxname\fR is generated from the name of the output file, if
+explicitly specified and it is not the final executable, otherwise it is
+the basename of the source file.  In both cases any suffix is removed
+(e.g. \fIfoo.gcda\fR for input file \fIdir/foo.c\fR, or
+\&\fIdir/foo.gcda\fR for output file specified as \fB\-o dir/foo.o\fR).
+.IP "\fB\-\-coverage\fR" 4
+.IX Item "--coverage"
+This option is used to compile and link code instrumented for coverage
+analysis.  The option is a synonym for \fB\-fprofile\-arcs\fR
+\&\fB\-ftest\-coverage\fR (when compiling) and \fB\-lgcov\fR (when
+linking).  See the documentation for those options for more details.
+.RS 4
+.IP "*" 4
+Compile the source files with \fB\-fprofile\-arcs\fR plus optimization
+and code generation options.  For test coverage analysis, use the
+additional \fB\-ftest\-coverage\fR option.  You do not need to profile
+every source file in a program.
+.IP "*" 4
+Compile the source files additionally with \fB\-fprofile\-abs\-path\fR
+to create absolute path names in the \fI.gcno\fR files.  This allows
+\&\fBgcov\fR to find the correct sources in projects where compilations
+occur with different working directories.
+.IP "*" 4
+Link your object files with \fB\-lgcov\fR or \fB\-fprofile\-arcs\fR
+(the latter implies the former).
+.IP "*" 4
+Run the program on a representative workload to generate the arc profile
+information.  This may be repeated any number of times.  You can run
+concurrent instances of your program, and provided that the file system
+supports locking, the data files will be correctly updated.  Unless
+a strict \s-1ISO C\s0 dialect option is in effect, \f(CW\*(C`fork\*(C'\fR calls are
+detected and correctly handled without double counting.
+.IP "*" 4
+For profile-directed optimizations, compile the source files again with
+the same optimization and code generation options plus
+\&\fB\-fbranch\-probabilities\fR.
+.IP "*" 4
+For test coverage analysis, use \fBgcov\fR to produce human readable
+information from the \fI.gcno\fR and \fI.gcda\fR files.  Refer to the
+\&\fBgcov\fR documentation for further information.
+.RE
+.RS 4
+.Sp
+With \fB\-fprofile\-arcs\fR, for each function of your program \s-1GCC\s0
+creates a program flow graph, then finds a spanning tree for the graph.
+Only arcs that are not on the spanning tree have to be instrumented: the
+compiler adds code to count the number of times that these arcs are
+executed.  When an arc is the only exit or only entrance to a block, the
+instrumentation code can be added to the block; otherwise, a new basic
+block must be created to hold the instrumentation code.
+.RE
+.IP "\fB\-ftest\-coverage\fR" 4
+.IX Item "-ftest-coverage"
+Produce a notes file that the \fBgcov\fR code-coverage utility can use to
+show program coverage.  Each source file's note file is called
+\&\fI\fIauxname\fI.gcno\fR.  Refer to the \fB\-fprofile\-arcs\fR option
+above for a description of \fIauxname\fR and instructions on how to
+generate test coverage data.  Coverage data matches the source files
+more closely if you do not optimize.
+.IP "\fB\-fprofile\-abs\-path\fR" 4
+.IX Item "-fprofile-abs-path"
+Automatically convert relative source file names to absolute path names
+in the \fI.gcno\fR files.  This allows \fBgcov\fR to find the correct
+sources in projects where compilations occur with different working
+directories.
+.IP "\fB\-fprofile\-dir=\fR\fIpath\fR" 4
+.IX Item "-fprofile-dir=path"
+Set the directory to search for the profile data files in to \fIpath\fR.
+This option affects only the profile data generated by
+\&\fB\-fprofile\-generate\fR, \fB\-ftest\-coverage\fR, \fB\-fprofile\-arcs\fR
+and used by \fB\-fprofile\-use\fR and \fB\-fbranch\-probabilities\fR
+and its related options.  Both absolute and relative paths can be used.
+By default, \s-1GCC\s0 uses the current directory as \fIpath\fR, thus the
+profile data file appears in the same directory as the object file.
+In order to prevent the file name clashing, if the object file name is
+not an absolute path, we mangle the absolute path of the
+\&\fI\fIsourcename\fI.gcda\fR file and use it as the file name of a
+\&\fI.gcda\fR file.
+.Sp
+When an executable is run in a massive parallel environment, it is recommended
+to save profile to different folders.  That can be done with variables
+in \fIpath\fR that are exported during run-time:
+.RS 4
+.IP "\fB\f(CB%p\fB\fR" 4
+.IX Item "%p"
+process \s-1ID.\s0
+.IP "\fB\f(CB%q\fB{\s-1VAR\s0}\fR" 4
+.IX Item "%q{VAR}"
+value of environment variable \fI\s-1VAR\s0\fR
+.RE
+.RS 4
+.RE
+.IP "\fB\-fprofile\-generate\fR" 4
+.IX Item "-fprofile-generate"
+.PD 0
+.IP "\fB\-fprofile\-generate=\fR\fIpath\fR" 4
+.IX Item "-fprofile-generate=path"
+.PD
+Enable options usually used for instrumenting application to produce
+profile useful for later recompilation with profile feedback based
+optimization.  You must use \fB\-fprofile\-generate\fR both when
+compiling and when linking your program.
+.Sp
+The following options are enabled:
+\&\fB\-fprofile\-arcs\fR, \fB\-fprofile\-values\fR,
+\&\fB\-finline\-functions\fR, and \fB\-fipa\-bit\-cp\fR.
+.Sp
+If \fIpath\fR is specified, \s-1GCC\s0 looks at the \fIpath\fR to find
+the profile feedback data files. See \fB\-fprofile\-dir\fR.
+.Sp
+To optimize the program based on the collected profile information, use
+\&\fB\-fprofile\-use\fR.
+.IP "\fB\-fprofile\-update=\fR\fImethod\fR" 4
+.IX Item "-fprofile-update=method"
+Alter the update method for an application instrumented for profile
+feedback based optimization.  The \fImethod\fR argument should be one of
+\&\fBsingle\fR, \fBatomic\fR or \fBprefer-atomic\fR.
+The first one is useful for single-threaded applications,
+while the second one prevents profile corruption by emitting thread-safe code.
+.Sp
+\&\fBWarning:\fR When an application does not properly join all threads
+(or creates an detached thread), a profile file can be still corrupted.
+.Sp
+Using \fBprefer-atomic\fR would be transformed either to \fBatomic\fR,
+when supported by a target, or to \fBsingle\fR otherwise.  The \s-1GCC\s0 driver
+automatically selects \fBprefer-atomic\fR when \fB\-pthread\fR
+is present in the command line.
+.IP "\fB\-fprofile\-filter\-files=\fR\fIregex\fR" 4
+.IX Item "-fprofile-filter-files=regex"
+Instrument only functions from files where names match
+any regular expression (separated by a semi-colon).
+.Sp
+For example, \fB\-fprofile\-filter\-files=main.c;module.*.c\fR will instrument
+only \fImain.c\fR and all C files starting with 'module'.
+.IP "\fB\-fprofile\-exclude\-files=\fR\fIregex\fR" 4
+.IX Item "-fprofile-exclude-files=regex"
+Instrument only functions from files where names do not match
+all the regular expressions (separated by a semi-colon).
+.Sp
+For example, \fB\-fprofile\-exclude\-files=/usr/*\fR will prevent instrumentation
+of all files that are located in \fI/usr/\fR folder.
+.IP "\fB\-fsanitize=address\fR" 4
+.IX Item "-fsanitize=address"
+Enable AddressSanitizer, a fast memory error detector.
+Memory access instructions are instrumented to detect
+out-of-bounds and use-after-free bugs.
+The option enables \fB\-fsanitize\-address\-use\-after\-scope\fR.
+See <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizer\fR> for
+more details.  The run-time behavior can be influenced using the
+\&\fB\s-1ASAN_OPTIONS\s0\fR environment variable.  When set to \f(CW\*(C`help=1\*(C'\fR,
+the available options are shown at startup of the instrumented program.  See
+<\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run\-time\-flags\fR>
+for a list of supported options.
+The option cannot be combined with \fB\-fsanitize=thread\fR.
+.IP "\fB\-fsanitize=kernel\-address\fR" 4
+.IX Item "-fsanitize=kernel-address"
+Enable AddressSanitizer for Linux kernel.
+See <\fBhttps://github.com/google/kasan/wiki\fR> for more details.
+.IP "\fB\-fsanitize=pointer\-compare\fR" 4
+.IX Item "-fsanitize=pointer-compare"
+Instrument comparison operation (<, <=, >, >=) with pointer operands.
+The option must be combined with either \fB\-fsanitize=kernel\-address\fR or
+\&\fB\-fsanitize=address\fR
+The option cannot be combined with \fB\-fsanitize=thread\fR.
+Note: By default the check is disabled at run time.  To enable it,
+add \f(CW\*(C`detect_invalid_pointer_pairs=2\*(C'\fR to the environment variable
+\&\fB\s-1ASAN_OPTIONS\s0\fR. Using \f(CW\*(C`detect_invalid_pointer_pairs=1\*(C'\fR detects
+invalid operation only when both pointers are non-null.
+.IP "\fB\-fsanitize=pointer\-subtract\fR" 4
+.IX Item "-fsanitize=pointer-subtract"
+Instrument subtraction with pointer operands.
+The option must be combined with either \fB\-fsanitize=kernel\-address\fR or
+\&\fB\-fsanitize=address\fR
+The option cannot be combined with \fB\-fsanitize=thread\fR.
+Note: By default the check is disabled at run time.  To enable it,
+add \f(CW\*(C`detect_invalid_pointer_pairs=2\*(C'\fR to the environment variable
+\&\fB\s-1ASAN_OPTIONS\s0\fR. Using \f(CW\*(C`detect_invalid_pointer_pairs=1\*(C'\fR detects
+invalid operation only when both pointers are non-null.
+.IP "\fB\-fsanitize=thread\fR" 4
+.IX Item "-fsanitize=thread"
+Enable ThreadSanitizer, a fast data race detector.
+Memory access instructions are instrumented to detect
+data race bugs.  See <\fBhttps://github.com/google/sanitizers/wiki#threadsanitizer\fR> for more
+details. The run-time behavior can be influenced using the \fB\s-1TSAN_OPTIONS\s0\fR
+environment variable; see
+<\fBhttps://github.com/google/sanitizers/wiki/ThreadSanitizerFlags\fR> for a list of
+supported options.
+The option cannot be combined with \fB\-fsanitize=address\fR,
+\&\fB\-fsanitize=leak\fR.
+.Sp
+Note that sanitized atomic builtins cannot throw exceptions when
+operating on invalid memory addresses with non-call exceptions
+(\fB\-fnon\-call\-exceptions\fR).
+.IP "\fB\-fsanitize=leak\fR" 4
+.IX Item "-fsanitize=leak"
+Enable LeakSanitizer, a memory leak detector.
+This option only matters for linking of executables and
+the executable is linked against a library that overrides \f(CW\*(C`malloc\*(C'\fR
+and other allocator functions.  See
+<\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer\fR> for more
+details.  The run-time behavior can be influenced using the
+\&\fB\s-1LSAN_OPTIONS\s0\fR environment variable.
+The option cannot be combined with \fB\-fsanitize=thread\fR.
+.IP "\fB\-fsanitize=undefined\fR" 4
+.IX Item "-fsanitize=undefined"
+Enable UndefinedBehaviorSanitizer, a fast undefined behavior detector.
+Various computations are instrumented to detect undefined behavior
+at runtime.  Current suboptions are:
+.RS 4
+.IP "\fB\-fsanitize=shift\fR" 4
+.IX Item "-fsanitize=shift"
+This option enables checking that the result of a shift operation is
+not undefined.  Note that what exactly is considered undefined differs
+slightly between C and \*(C+, as well as between \s-1ISO C90\s0 and C99, etc.
+This option has two suboptions, \fB\-fsanitize=shift\-base\fR and
+\&\fB\-fsanitize=shift\-exponent\fR.
+.IP "\fB\-fsanitize=shift\-exponent\fR" 4
+.IX Item "-fsanitize=shift-exponent"
+This option enables checking that the second argument of a shift operation
+is not negative and is smaller than the precision of the promoted first
+argument.
+.IP "\fB\-fsanitize=shift\-base\fR" 4
+.IX Item "-fsanitize=shift-base"
+If the second argument of a shift operation is within range, check that the
+result of a shift operation is not undefined.  Note that what exactly is
+considered undefined differs slightly between C and \*(C+, as well as between
+\&\s-1ISO C90\s0 and C99, etc.
+.IP "\fB\-fsanitize=integer\-divide\-by\-zero\fR" 4
+.IX Item "-fsanitize=integer-divide-by-zero"
+Detect integer division by zero as well as \f(CW\*(C`INT_MIN / \-1\*(C'\fR division.
+.IP "\fB\-fsanitize=unreachable\fR" 4
+.IX Item "-fsanitize=unreachable"
+With this option, the compiler turns the \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR
+call into a diagnostics message call instead.  When reaching the
+\&\f(CW\*(C`_\|_builtin_unreachable\*(C'\fR call, the behavior is undefined.
+.IP "\fB\-fsanitize=vla\-bound\fR" 4
+.IX Item "-fsanitize=vla-bound"
+This option instructs the compiler to check that the size of a variable
+length array is positive.
+.IP "\fB\-fsanitize=null\fR" 4
+.IX Item "-fsanitize=null"
+This option enables pointer checking.  Particularly, the application
+built with this option turned on will issue an error message when it
+tries to dereference a \s-1NULL\s0 pointer, or if a reference (possibly an
+rvalue reference) is bound to a \s-1NULL\s0 pointer, or if a method is invoked
+on an object pointed by a \s-1NULL\s0 pointer.
+.IP "\fB\-fsanitize=return\fR" 4
+.IX Item "-fsanitize=return"
+This option enables return statement checking.  Programs
+built with this option turned on will issue an error message
+when the end of a non-void function is reached without actually
+returning a value.  This option works in \*(C+ only.
+.IP "\fB\-fsanitize=signed\-integer\-overflow\fR" 4
+.IX Item "-fsanitize=signed-integer-overflow"
+This option enables signed integer overflow checking.  We check that
+the result of \f(CW\*(C`+\*(C'\fR, \f(CW\*(C`*\*(C'\fR, and both unary and binary \f(CW\*(C`\-\*(C'\fR
+does not overflow in the signed arithmetics.  Note, integer promotion
+rules must be taken into account.  That is, the following is not an
+overflow:
+.Sp
+.Vb 2
+\&        signed char a = SCHAR_MAX;
+\&        a++;
+.Ve
+.IP "\fB\-fsanitize=bounds\fR" 4
+.IX Item "-fsanitize=bounds"
+This option enables instrumentation of array bounds.  Various out of bounds
+accesses are detected.  Flexible array members, flexible array member-like
+arrays, and initializers of variables with static storage are not instrumented.
+.IP "\fB\-fsanitize=bounds\-strict\fR" 4
+.IX Item "-fsanitize=bounds-strict"
+This option enables strict instrumentation of array bounds.  Most out of bounds
+accesses are detected, including flexible array members and flexible array
+member-like arrays.  Initializers of variables with static storage are not
+instrumented.
+.IP "\fB\-fsanitize=alignment\fR" 4
+.IX Item "-fsanitize=alignment"
+This option enables checking of alignment of pointers when they are
+dereferenced, or when a reference is bound to insufficiently aligned target,
+or when a method or constructor is invoked on insufficiently aligned object.
+.IP "\fB\-fsanitize=object\-size\fR" 4
+.IX Item "-fsanitize=object-size"
+This option enables instrumentation of memory references using the
+\&\f(CW\*(C`_\|_builtin_object_size\*(C'\fR function.  Various out of bounds pointer
+accesses are detected.
+.IP "\fB\-fsanitize=float\-divide\-by\-zero\fR" 4
+.IX Item "-fsanitize=float-divide-by-zero"
+Detect floating-point division by zero.  Unlike other similar options,
+\&\fB\-fsanitize=float\-divide\-by\-zero\fR is not enabled by
+\&\fB\-fsanitize=undefined\fR, since floating-point division by zero can
+be a legitimate way of obtaining infinities and NaNs.
+.IP "\fB\-fsanitize=float\-cast\-overflow\fR" 4
+.IX Item "-fsanitize=float-cast-overflow"
+This option enables floating-point type to integer conversion checking.
+We check that the result of the conversion does not overflow.
+Unlike other similar options, \fB\-fsanitize=float\-cast\-overflow\fR is
+not enabled by \fB\-fsanitize=undefined\fR.
+This option does not work well with \f(CW\*(C`FE_INVALID\*(C'\fR exceptions enabled.
+.IP "\fB\-fsanitize=nonnull\-attribute\fR" 4
+.IX Item "-fsanitize=nonnull-attribute"
+This option enables instrumentation of calls, checking whether null values
+are not passed to arguments marked as requiring a non-null value by the
+\&\f(CW\*(C`nonnull\*(C'\fR function attribute.
+.IP "\fB\-fsanitize=returns\-nonnull\-attribute\fR" 4
+.IX Item "-fsanitize=returns-nonnull-attribute"
+This option enables instrumentation of return statements in functions
+marked with \f(CW\*(C`returns_nonnull\*(C'\fR function attribute, to detect returning
+of null values from such functions.
+.IP "\fB\-fsanitize=bool\fR" 4
+.IX Item "-fsanitize=bool"
+This option enables instrumentation of loads from bool.  If a value other
+than 0/1 is loaded, a run-time error is issued.
+.IP "\fB\-fsanitize=enum\fR" 4
+.IX Item "-fsanitize=enum"
+This option enables instrumentation of loads from an enum type.  If
+a value outside the range of values for the enum type is loaded,
+a run-time error is issued.
+.IP "\fB\-fsanitize=vptr\fR" 4
+.IX Item "-fsanitize=vptr"
+This option enables instrumentation of \*(C+ member function calls, member
+accesses and some conversions between pointers to base and derived classes,
+to verify the referenced object has the correct dynamic type.
+.IP "\fB\-fsanitize=pointer\-overflow\fR" 4
+.IX Item "-fsanitize=pointer-overflow"
+This option enables instrumentation of pointer arithmetics.  If the pointer
+arithmetics overflows, a run-time error is issued.
+.IP "\fB\-fsanitize=builtin\fR" 4
+.IX Item "-fsanitize=builtin"
+This option enables instrumentation of arguments to selected builtin
+functions.  If an invalid value is passed to such arguments, a run-time
+error is issued.  E.g. passing 0 as the argument to \f(CW\*(C`_\|_builtin_ctz\*(C'\fR
+or \f(CW\*(C`_\|_builtin_clz\*(C'\fR invokes undefined behavior and is diagnosed
+by this option.
+.RE
+.RS 4
+.Sp
+While \fB\-ftrapv\fR causes traps for signed overflows to be emitted,
+\&\fB\-fsanitize=undefined\fR gives a diagnostic message.
+This currently works only for the C family of languages.
+.RE
+.IP "\fB\-fno\-sanitize=all\fR" 4
+.IX Item "-fno-sanitize=all"
+This option disables all previously enabled sanitizers.
+\&\fB\-fsanitize=all\fR is not allowed, as some sanitizers cannot be used
+together.
+.IP "\fB\-fasan\-shadow\-offset=\fR\fInumber\fR" 4
+.IX Item "-fasan-shadow-offset=number"
+This option forces \s-1GCC\s0 to use custom shadow offset in AddressSanitizer checks.
+It is useful for experimenting with different shadow memory layouts in
+Kernel AddressSanitizer.
+.IP "\fB\-fsanitize\-sections=\fR\fIs1\fR\fB,\fR\fIs2\fR\fB,...\fR" 4
+.IX Item "-fsanitize-sections=s1,s2,..."
+Sanitize global variables in selected user-defined sections.  \fIsi\fR may
+contain wildcards.
+.IP "\fB\-fsanitize\-recover\fR[\fB=\fR\fIopts\fR]" 4
+.IX Item "-fsanitize-recover[=opts]"
+\&\fB\-fsanitize\-recover=\fR controls error recovery mode for sanitizers
+mentioned in comma-separated list of \fIopts\fR.  Enabling this option
+for a sanitizer component causes it to attempt to continue
+running the program as if no error happened.  This means multiple
+runtime errors can be reported in a single program run, and the exit
+code of the program may indicate success even when errors
+have been reported.  The \fB\-fno\-sanitize\-recover=\fR option
+can be used to alter
+this behavior: only the first detected error is reported
+and program then exits with a non-zero exit code.
+.Sp
+Currently this feature only works for \fB\-fsanitize=undefined\fR (and its suboptions
+except for \fB\-fsanitize=unreachable\fR and \fB\-fsanitize=return\fR),
+\&\fB\-fsanitize=float\-cast\-overflow\fR, \fB\-fsanitize=float\-divide\-by\-zero\fR,
+\&\fB\-fsanitize=bounds\-strict\fR,
+\&\fB\-fsanitize=kernel\-address\fR and \fB\-fsanitize=address\fR.
+For these sanitizers error recovery is turned on by default,
+except \fB\-fsanitize=address\fR, for which this feature is experimental.
+\&\fB\-fsanitize\-recover=all\fR and \fB\-fno\-sanitize\-recover=all\fR is also
+accepted, the former enables recovery for all sanitizers that support it,
+the latter disables recovery for all sanitizers that support it.
+.Sp
+Even if a recovery mode is turned on the compiler side, it needs to be also
+enabled on the runtime library side, otherwise the failures are still fatal.
+The runtime library defaults to \f(CW\*(C`halt_on_error=0\*(C'\fR for
+ThreadSanitizer and UndefinedBehaviorSanitizer, while default value for
+AddressSanitizer is \f(CW\*(C`halt_on_error=1\*(C'\fR. This can be overridden through
+setting the \f(CW\*(C`halt_on_error\*(C'\fR flag in the corresponding environment variable.
+.Sp
+Syntax without an explicit \fIopts\fR parameter is deprecated.  It is
+equivalent to specifying an \fIopts\fR list of:
+.Sp
+.Vb 1
+\&        undefined,float\-cast\-overflow,float\-divide\-by\-zero,bounds\-strict
+.Ve
+.IP "\fB\-fsanitize\-address\-use\-after\-scope\fR" 4
+.IX Item "-fsanitize-address-use-after-scope"
+Enable sanitization of local variables to detect use-after-scope bugs.
+The option sets \fB\-fstack\-reuse\fR to \fBnone\fR.
+.IP "\fB\-fsanitize\-undefined\-trap\-on\-error\fR" 4
+.IX Item "-fsanitize-undefined-trap-on-error"
+The \fB\-fsanitize\-undefined\-trap\-on\-error\fR option instructs the compiler to
+report undefined behavior using \f(CW\*(C`_\|_builtin_trap\*(C'\fR rather than
+a \f(CW\*(C`libubsan\*(C'\fR library routine.  The advantage of this is that the
+\&\f(CW\*(C`libubsan\*(C'\fR library is not needed and is not linked in, so this
+is usable even in freestanding environments.
+.IP "\fB\-fsanitize\-coverage=trace\-pc\fR" 4
+.IX Item "-fsanitize-coverage=trace-pc"
+Enable coverage-guided fuzzing code instrumentation.
+Inserts a call to \f(CW\*(C`_\|_sanitizer_cov_trace_pc\*(C'\fR into every basic block.
+.IP "\fB\-fsanitize\-coverage=trace\-cmp\fR" 4
+.IX Item "-fsanitize-coverage=trace-cmp"
+Enable dataflow guided fuzzing code instrumentation.
+Inserts a call to \f(CW\*(C`_\|_sanitizer_cov_trace_cmp1\*(C'\fR,
+\&\f(CW\*(C`_\|_sanitizer_cov_trace_cmp2\*(C'\fR, \f(CW\*(C`_\|_sanitizer_cov_trace_cmp4\*(C'\fR or
+\&\f(CW\*(C`_\|_sanitizer_cov_trace_cmp8\*(C'\fR for integral comparison with both operands
+variable or \f(CW\*(C`_\|_sanitizer_cov_trace_const_cmp1\*(C'\fR,
+\&\f(CW\*(C`_\|_sanitizer_cov_trace_const_cmp2\*(C'\fR,
+\&\f(CW\*(C`_\|_sanitizer_cov_trace_const_cmp4\*(C'\fR or
+\&\f(CW\*(C`_\|_sanitizer_cov_trace_const_cmp8\*(C'\fR for integral comparison with one
+operand constant, \f(CW\*(C`_\|_sanitizer_cov_trace_cmpf\*(C'\fR or
+\&\f(CW\*(C`_\|_sanitizer_cov_trace_cmpd\*(C'\fR for float or double comparisons and
+\&\f(CW\*(C`_\|_sanitizer_cov_trace_switch\*(C'\fR for switch statements.
+.IP "\fB\-fcf\-protection=\fR[\fBfull\fR|\fBbranch\fR|\fBreturn\fR|\fBnone\fR]" 4
+.IX Item "-fcf-protection=[full|branch|return|none]"
+Enable code instrumentation of control-flow transfers to increase
+program security by checking that target addresses of control-flow
+transfer instructions (such as indirect function call, function return,
+indirect jump) are valid.  This prevents diverting the flow of control
+to an unexpected target.  This is intended to protect against such
+threats as Return-oriented Programming (\s-1ROP\s0), and similarly
+call/jmp\-oriented programming (\s-1COP/JOP\s0).
+.Sp
+The value \f(CW\*(C`branch\*(C'\fR tells the compiler to implement checking of
+validity of control-flow transfer at the point of indirect branch
+instructions, i.e. call/jmp instructions.  The value \f(CW\*(C`return\*(C'\fR
+implements checking of validity at the point of returning from a
+function.  The value \f(CW\*(C`full\*(C'\fR is an alias for specifying both
+\&\f(CW\*(C`branch\*(C'\fR and \f(CW\*(C`return\*(C'\fR. The value \f(CW\*(C`none\*(C'\fR turns off
+instrumentation.
+.Sp
+The macro \f(CW\*(C`_\|_CET_\|_\*(C'\fR is defined when \fB\-fcf\-protection\fR is
+used.  The first bit of \f(CW\*(C`_\|_CET_\|_\*(C'\fR is set to 1 for the value
+\&\f(CW\*(C`branch\*(C'\fR and the second bit of \f(CW\*(C`_\|_CET_\|_\*(C'\fR is set to 1 for
+the \f(CW\*(C`return\*(C'\fR.
+.Sp
+You can also use the \f(CW\*(C`nocf_check\*(C'\fR attribute to identify
+which functions and calls should be skipped from instrumentation.
+.Sp
+Currently the x86 GNU/Linux target provides an implementation based
+on Intel Control-flow Enforcement Technology (\s-1CET\s0).
+.IP "\fB\-fstack\-protector\fR" 4
+.IX Item "-fstack-protector"
+Emit extra code to check for buffer overflows, such as stack smashing
+attacks.  This is done by adding a guard variable to functions with
+vulnerable objects.  This includes functions that call \f(CW\*(C`alloca\*(C'\fR, and
+functions with buffers larger than 8 bytes.  The guards are initialized
+when a function is entered and then checked when the function exits.
+If a guard check fails, an error message is printed and the program exits.
+.IP "\fB\-fstack\-protector\-all\fR" 4
+.IX Item "-fstack-protector-all"
+Like \fB\-fstack\-protector\fR except that all functions are protected.
+.IP "\fB\-fstack\-protector\-strong\fR" 4
+.IX Item "-fstack-protector-strong"
+Like \fB\-fstack\-protector\fR but includes additional functions to
+be protected \-\-\- those that have local array definitions, or have
+references to local frame addresses.
+.IP "\fB\-fstack\-protector\-explicit\fR" 4
+.IX Item "-fstack-protector-explicit"
+Like \fB\-fstack\-protector\fR but only protects those functions which
+have the \f(CW\*(C`stack_protect\*(C'\fR attribute.
+.IP "\fB\-fstack\-check\fR" 4
+.IX Item "-fstack-check"
+Generate code to verify that you do not go beyond the boundary of the
+stack.  You should specify this flag if you are running in an
+environment with multiple threads, but you only rarely need to specify it in
+a single-threaded environment since stack overflow is automatically
+detected on nearly all systems if there is only one stack.
+.Sp
+Note that this switch does not actually cause checking to be done; the
+operating system or the language runtime must do that.  The switch causes
+generation of code to ensure that they see the stack being extended.
+.Sp
+You can additionally specify a string parameter: \fBno\fR means no
+checking, \fBgeneric\fR means force the use of old-style checking,
+\&\fBspecific\fR means use the best checking method and is equivalent
+to bare \fB\-fstack\-check\fR.
+.Sp
+Old-style checking is a generic mechanism that requires no specific
+target support in the compiler but comes with the following drawbacks:
+.RS 4
+.IP "1." 4
+.IX Item "1."
+Modified allocation strategy for large objects: they are always
+allocated dynamically if their size exceeds a fixed threshold.  Note this
+may change the semantics of some code.
+.IP "2." 4
+.IX Item "2."
+Fixed limit on the size of the static frame of functions: when it is
+topped by a particular function, stack checking is not reliable and
+a warning is issued by the compiler.
+.IP "3." 4
+.IX Item "3."
+Inefficiency: because of both the modified allocation strategy and the
+generic implementation, code performance is hampered.
+.RE
+.RS 4
+.Sp
+Note that old-style stack checking is also the fallback method for
+\&\fBspecific\fR if no target support has been added in the compiler.
+.Sp
+\&\fB\-fstack\-check=\fR is designed for Ada's needs to detect infinite recursion
+and stack overflows.  \fBspecific\fR is an excellent choice when compiling
+Ada code.  It is not generally sufficient to protect against stack-clash
+attacks.  To protect against those you want \fB\-fstack\-clash\-protection\fR.
+.RE
+.IP "\fB\-fstack\-clash\-protection\fR" 4
+.IX Item "-fstack-clash-protection"
+Generate code to prevent stack clash style attacks.  When this option is
+enabled, the compiler will only allocate one page of stack space at a time
+and each page is accessed immediately after allocation.  Thus, it prevents
+allocations from jumping over any stack guard page provided by the
+operating system.
+.Sp
+Most targets do not fully support stack clash protection.  However, on
+those targets \fB\-fstack\-clash\-protection\fR will protect dynamic stack
+allocations.  \fB\-fstack\-clash\-protection\fR may also provide limited
+protection for static stack allocations if the target supports
+\&\fB\-fstack\-check=specific\fR.
+.IP "\fB\-fstack\-limit\-register=\fR\fIreg\fR" 4
+.IX Item "-fstack-limit-register=reg"
+.PD 0
+.IP "\fB\-fstack\-limit\-symbol=\fR\fIsym\fR" 4
+.IX Item "-fstack-limit-symbol=sym"
+.IP "\fB\-fno\-stack\-limit\fR" 4
+.IX Item "-fno-stack-limit"
+.PD
+Generate code to ensure that the stack does not grow beyond a certain value,
+either the value of a register or the address of a symbol.  If a larger
+stack is required, a signal is raised at run time.  For most targets,
+the signal is raised before the stack overruns the boundary, so
+it is possible to catch the signal without taking special precautions.
+.Sp
+For instance, if the stack starts at absolute address \fB0x80000000\fR
+and grows downwards, you can use the flags
+\&\fB\-fstack\-limit\-symbol=_\|_stack_limit\fR and
+\&\fB\-Wl,\-\-defsym,_\|_stack_limit=0x7ffe0000\fR to enforce a stack limit
+of 128KB.  Note that this may only work with the \s-1GNU\s0 linker.
+.Sp
+You can locally override stack limit checking by using the
+\&\f(CW\*(C`no_stack_limit\*(C'\fR function attribute.
+.IP "\fB\-fsplit\-stack\fR" 4
+.IX Item "-fsplit-stack"
+Generate code to automatically split the stack before it overflows.
+The resulting program has a discontiguous stack which can only
+overflow if the program is unable to allocate any more memory.  This
+is most useful when running threaded programs, as it is no longer
+necessary to calculate a good stack size to use for each thread.  This
+is currently only implemented for the x86 targets running
+GNU/Linux.
+.Sp
+When code compiled with \fB\-fsplit\-stack\fR calls code compiled
+without \fB\-fsplit\-stack\fR, there may not be much stack space
+available for the latter code to run.  If compiling all code,
+including library code, with \fB\-fsplit\-stack\fR is not an option,
+then the linker can fix up these calls so that the code compiled
+without \fB\-fsplit\-stack\fR always has a large stack.  Support for
+this is implemented in the gold linker in \s-1GNU\s0 binutils release 2.21
+and later.
+.IP "\fB\-fvtable\-verify=\fR[\fBstd\fR|\fBpreinit\fR|\fBnone\fR]" 4
+.IX Item "-fvtable-verify=[std|preinit|none]"
+This option is only available when compiling \*(C+ code.
+It turns on (or off, if using \fB\-fvtable\-verify=none\fR) the security
+feature that verifies at run time, for every virtual call, that
+the vtable pointer through which the call is made is valid for the type of
+the object, and has not been corrupted or overwritten.  If an invalid vtable
+pointer is detected at run time, an error is reported and execution of the
+program is immediately halted.
+.Sp
+This option causes run-time data structures to be built at program startup,
+which are used for verifying the vtable pointers.  
+The options \fBstd\fR and \fBpreinit\fR
+control the timing of when these data structures are built.  In both cases the
+data structures are built before execution reaches \f(CW\*(C`main\*(C'\fR.  Using
+\&\fB\-fvtable\-verify=std\fR causes the data structures to be built after
+shared libraries have been loaded and initialized.
+\&\fB\-fvtable\-verify=preinit\fR causes them to be built before shared
+libraries have been loaded and initialized.
+.Sp
+If this option appears multiple times in the command line with different
+values specified, \fBnone\fR takes highest priority over both \fBstd\fR and
+\&\fBpreinit\fR; \fBpreinit\fR takes priority over \fBstd\fR.
+.IP "\fB\-fvtv\-debug\fR" 4
+.IX Item "-fvtv-debug"
+When used in conjunction with \fB\-fvtable\-verify=std\fR or 
+\&\fB\-fvtable\-verify=preinit\fR, causes debug versions of the 
+runtime functions for the vtable verification feature to be called.  
+This flag also causes the compiler to log information about which 
+vtable pointers it finds for each class.
+This information is written to a file named \fIvtv_set_ptr_data.log\fR 
+in the directory named by the environment variable \fB\s-1VTV_LOGS_DIR\s0\fR 
+if that is defined or the current working directory otherwise.
+.Sp
+Note:  This feature \fIappends\fR data to the log file. If you want a fresh log
+file, be sure to delete any existing one.
+.IP "\fB\-fvtv\-counts\fR" 4
+.IX Item "-fvtv-counts"
+This is a debugging flag.  When used in conjunction with
+\&\fB\-fvtable\-verify=std\fR or \fB\-fvtable\-verify=preinit\fR, this
+causes the compiler to keep track of the total number of virtual calls
+it encounters and the number of verifications it inserts.  It also
+counts the number of calls to certain run-time library functions
+that it inserts and logs this information for each compilation unit.
+The compiler writes this information to a file named
+\&\fIvtv_count_data.log\fR in the directory named by the environment
+variable \fB\s-1VTV_LOGS_DIR\s0\fR if that is defined or the current working
+directory otherwise.  It also counts the size of the vtable pointer sets
+for each class, and writes this information to \fIvtv_class_set_sizes.log\fR
+in the same directory.
+.Sp
+Note:  This feature \fIappends\fR data to the log files.  To get fresh log
+files, be sure to delete any existing ones.
+.IP "\fB\-finstrument\-functions\fR" 4
+.IX Item "-finstrument-functions"
+Generate instrumentation calls for entry and exit to functions.  Just
+after function entry and just before function exit, the following
+profiling functions are called with the address of the current
+function and its call site.  (On some platforms,
+\&\f(CW\*(C`_\|_builtin_return_address\*(C'\fR does not work beyond the current
+function, so the call site information may not be available to the
+profiling functions otherwise.)
+.Sp
+.Vb 4
+\&        void _\|_cyg_profile_func_enter (void *this_fn,
+\&                                       void *call_site);
+\&        void _\|_cyg_profile_func_exit  (void *this_fn,
+\&                                       void *call_site);
+.Ve
+.Sp
+The first argument is the address of the start of the current function,
+which may be looked up exactly in the symbol table.
+.Sp
+This instrumentation is also done for functions expanded inline in other
+functions.  The profiling calls indicate where, conceptually, the
+inline function is entered and exited.  This means that addressable
+versions of such functions must be available.  If all your uses of a
+function are expanded inline, this may mean an additional expansion of
+code size.  If you use \f(CW\*(C`extern inline\*(C'\fR in your C code, an
+addressable version of such functions must be provided.  (This is
+normally the case anyway, but if you get lucky and the optimizer always
+expands the functions inline, you might have gotten away without
+providing static copies.)
+.Sp
+A function may be given the attribute \f(CW\*(C`no_instrument_function\*(C'\fR, in
+which case this instrumentation is not done.  This can be used, for
+example, for the profiling functions listed above, high-priority
+interrupt routines, and any functions from which the profiling functions
+cannot safely be called (perhaps signal handlers, if the profiling
+routines generate output or allocate memory).
+.IP "\fB\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,...\fR" 4
+.IX Item "-finstrument-functions-exclude-file-list=file,file,..."
+Set the list of functions that are excluded from instrumentation (see
+the description of \fB\-finstrument\-functions\fR).  If the file that
+contains a function definition matches with one of \fIfile\fR, then
+that function is not instrumented.  The match is done on substrings:
+if the \fIfile\fR parameter is a substring of the file name, it is
+considered to be a match.
+.Sp
+For example:
+.Sp
+.Vb 1
+\&        \-finstrument\-functions\-exclude\-file\-list=/bits/stl,include/sys
+.Ve
+.Sp
+excludes any inline function defined in files whose pathnames
+contain \fI/bits/stl\fR or \fIinclude/sys\fR.
+.Sp
+If, for some reason, you want to include letter \fB,\fR in one of
+\&\fIsym\fR, write \fB,\fR. For example,
+\&\fB\-finstrument\-functions\-exclude\-file\-list=',,tmp'\fR
+(note the single quote surrounding the option).
+.IP "\fB\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,...\fR" 4
+.IX Item "-finstrument-functions-exclude-function-list=sym,sym,..."
+This is similar to \fB\-finstrument\-functions\-exclude\-file\-list\fR,
+but this option sets the list of function names to be excluded from
+instrumentation.  The function name to be matched is its user-visible
+name, such as \f(CW\*(C`vector<int> blah(const vector<int> &)\*(C'\fR, not the
+internal mangled name (e.g., \f(CW\*(C`_Z4blahRSt6vectorIiSaIiEE\*(C'\fR).  The
+match is done on substrings: if the \fIsym\fR parameter is a substring
+of the function name, it is considered to be a match.  For C99 and \*(C+
+extended identifiers, the function name must be given in \s-1UTF\-8,\s0 not
+using universal character names.
+.IP "\fB\-fpatchable\-function\-entry=\fR\fIN\fR\fB[,\fR\fIM\fR\fB]\fR" 4
+.IX Item "-fpatchable-function-entry=N[,M]"
+Generate \fIN\fR NOPs right at the beginning
+of each function, with the function entry point before the \fIM\fRth \s-1NOP.\s0
+If \fIM\fR is omitted, it defaults to \f(CW0\fR so the
+function entry points to the address just at the first \s-1NOP.\s0
+The \s-1NOP\s0 instructions reserve extra space which can be used to patch in
+any desired instrumentation at run time, provided that the code segment
+is writable.  The amount of space is controllable indirectly via
+the number of NOPs; the \s-1NOP\s0 instruction used corresponds to the instruction
+emitted by the internal \s-1GCC\s0 back-end interface \f(CW\*(C`gen_nop\*(C'\fR.  This behavior
+is target-specific and may also depend on the architecture variant and/or
+other compilation options.
+.Sp
+For run-time identification, the starting addresses of these areas,
+which correspond to their respective function entries minus \fIM\fR,
+are additionally collected in the \f(CW\*(C`_\|_patchable_function_entries\*(C'\fR
+section of the resulting binary.
+.Sp
+Note that the value of \f(CW\*(C`_\|_attribute_\|_ ((patchable_function_entry
+(N,M)))\*(C'\fR takes precedence over command-line option
+\&\fB\-fpatchable\-function\-entry=N,M\fR.  This can be used to increase
+the area size or to remove it completely on a single function.
+If \f(CW\*(C`N=0\*(C'\fR, no pad location is recorded.
+.Sp
+The \s-1NOP\s0 instructions are inserted at\-\-\-and maybe before, depending on
+\&\fIM\fR\-\-\-the function entry address, even before the prologue.
+.SS "Options Controlling the Preprocessor"
+.IX Subsection "Options Controlling the Preprocessor"
+These options control the C preprocessor, which is run on each C source
+file before actual compilation.
+.PP
+If you use the \fB\-E\fR option, nothing is done except preprocessing.
+Some of these options make sense only together with \fB\-E\fR because
+they cause the preprocessor output to be unsuitable for actual
+compilation.
+.PP
+In addition to the options listed here, there are a number of options 
+to control search paths for include files documented in 
+\&\fBDirectory Options\fR.  
+Options to control preprocessor diagnostics are listed in 
+\&\fBWarning Options\fR.
+.IP "\fB\-D\fR \fIname\fR" 4
+.IX Item "-D name"
+Predefine \fIname\fR as a macro, with definition \f(CW1\fR.
+.IP "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4
+.IX Item "-D name=definition"
+The contents of \fIdefinition\fR are tokenized and processed as if
+they appeared during translation phase three in a \fB#define\fR
+directive.  In particular, the definition is truncated by
+embedded newline characters.
+.Sp
+If you are invoking the preprocessor from a shell or shell-like
+program you may need to use the shell's quoting syntax to protect
+characters such as spaces that have a meaning in the shell syntax.
+.Sp
+If you wish to define a function-like macro on the command line, write
+its argument list with surrounding parentheses before the equals sign
+(if any).  Parentheses are meaningful to most shells, so you should
+quote the option.  With \fBsh\fR and \fBcsh\fR,
+\&\fB\-D'\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB'\fR works.
+.Sp
+\&\fB\-D\fR and \fB\-U\fR options are processed in the order they
+are given on the command line.  All \fB\-imacros\fR \fIfile\fR and
+\&\fB\-include\fR \fIfile\fR options are processed after all
+\&\fB\-D\fR and \fB\-U\fR options.
+.IP "\fB\-U\fR \fIname\fR" 4
+.IX Item "-U name"
+Cancel any previous definition of \fIname\fR, either built in or
+provided with a \fB\-D\fR option.
+.IP "\fB\-include\fR \fIfile\fR" 4
+.IX Item "-include file"
+Process \fIfile\fR as if \f(CW\*(C`#include "file"\*(C'\fR appeared as the first
+line of the primary source file.  However, the first directory searched
+for \fIfile\fR is the preprocessor's working directory \fIinstead of\fR
+the directory containing the main source file.  If not found there, it
+is searched for in the remainder of the \f(CW\*(C`#include "..."\*(C'\fR search
+chain as normal.
+.Sp
+If multiple \fB\-include\fR options are given, the files are included
+in the order they appear on the command line.
+.IP "\fB\-imacros\fR \fIfile\fR" 4
+.IX Item "-imacros file"
+Exactly like \fB\-include\fR, except that any output produced by
+scanning \fIfile\fR is thrown away.  Macros it defines remain defined.
+This allows you to acquire all the macros from a header without also
+processing its declarations.
+.Sp
+All files specified by \fB\-imacros\fR are processed before all files
+specified by \fB\-include\fR.
+.IP "\fB\-undef\fR" 4
+.IX Item "-undef"
+Do not predefine any system-specific or GCC-specific macros.  The
+standard predefined macros remain defined.
+.IP "\fB\-pthread\fR" 4
+.IX Item "-pthread"
+Define additional macros required for using the \s-1POSIX\s0 threads library.
+You should use this option consistently for both compilation and linking.
+This option is supported on GNU/Linux targets, most other Unix derivatives,
+and also on x86 Cygwin and MinGW targets.
+.IP "\fB\-M\fR" 4
+.IX Item "-M"
+Instead of outputting the result of preprocessing, output a rule
+suitable for \fBmake\fR describing the dependencies of the main
+source file.  The preprocessor outputs one \fBmake\fR rule containing
+the object file name for that source file, a colon, and the names of all
+the included files, including those coming from \fB\-include\fR or
+\&\fB\-imacros\fR command-line options.
+.Sp
+Unless specified explicitly (with \fB\-MT\fR or \fB\-MQ\fR), the
+object file name consists of the name of the source file with any
+suffix replaced with object file suffix and with any leading directory
+parts removed.  If there are many included files then the rule is
+split into several lines using \fB\e\fR\-newline.  The rule has no
+commands.
+.Sp
+This option does not suppress the preprocessor's debug output, such as
+\&\fB\-dM\fR.  To avoid mixing such debug output with the dependency
+rules you should explicitly specify the dependency output file with
+\&\fB\-MF\fR, or use an environment variable like
+\&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR.  Debug output
+is still sent to the regular output stream as normal.
+.Sp
+Passing \fB\-M\fR to the driver implies \fB\-E\fR, and suppresses
+warnings with an implicit \fB\-w\fR.
+.IP "\fB\-MM\fR" 4
+.IX Item "-MM"
+Like \fB\-M\fR but do not mention header files that are found in
+system header directories, nor header files that are included,
+directly or indirectly, from such a header.
+.Sp
+This implies that the choice of angle brackets or double quotes in an
+\&\fB#include\fR directive does not in itself determine whether that
+header appears in \fB\-MM\fR dependency output.
+.IP "\fB\-MF\fR \fIfile\fR" 4
+.IX Item "-MF file"
+When used with \fB\-M\fR or \fB\-MM\fR, specifies a
+file to write the dependencies to.  If no \fB\-MF\fR switch is given
+the preprocessor sends the rules to the same place it would send
+preprocessed output.
+.Sp
+When used with the driver options \fB\-MD\fR or \fB\-MMD\fR,
+\&\fB\-MF\fR overrides the default dependency output file.
+.Sp
+If \fIfile\fR is \fI\-\fR, then the dependencies are written to \fIstdout\fR.
+.IP "\fB\-MG\fR" 4
+.IX Item "-MG"
+In conjunction with an option such as \fB\-M\fR requesting
+dependency generation, \fB\-MG\fR assumes missing header files are
+generated files and adds them to the dependency list without raising
+an error.  The dependency filename is taken directly from the
+\&\f(CW\*(C`#include\*(C'\fR directive without prepending any path.  \fB\-MG\fR
+also suppresses preprocessed output, as a missing header file renders
+this useless.
+.Sp
+This feature is used in automatic updating of makefiles.
+.IP "\fB\-MP\fR" 4
+.IX Item "-MP"
+This option instructs \s-1CPP\s0 to add a phony target for each dependency
+other than the main file, causing each to depend on nothing.  These
+dummy rules work around errors \fBmake\fR gives if you remove header
+files without updating the \fIMakefile\fR to match.
+.Sp
+This is typical output:
+.Sp
+.Vb 1
+\&        test.o: test.c test.h
+\&        
+\&        test.h:
+.Ve
+.IP "\fB\-MT\fR \fItarget\fR" 4
+.IX Item "-MT target"
+Change the target of the rule emitted by dependency generation.  By
+default \s-1CPP\s0 takes the name of the main input file, deletes any
+directory components and any file suffix such as \fB.c\fR, and
+appends the platform's usual object suffix.  The result is the target.
+.Sp
+An \fB\-MT\fR option sets the target to be exactly the string you
+specify.  If you want multiple targets, you can specify them as a single
+argument to \fB\-MT\fR, or use multiple \fB\-MT\fR options.
+.Sp
+For example, \fB\-MT\ '$(objpfx)foo.o'\fR might give
+.Sp
+.Vb 1
+\&        $(objpfx)foo.o: foo.c
+.Ve
+.IP "\fB\-MQ\fR \fItarget\fR" 4
+.IX Item "-MQ target"
+Same as \fB\-MT\fR, but it quotes any characters which are special to
+Make.  \fB\-MQ\ '$(objpfx)foo.o'\fR gives
+.Sp
+.Vb 1
+\&        $$(objpfx)foo.o: foo.c
+.Ve
+.Sp
+The default target is automatically quoted, as if it were given with
+\&\fB\-MQ\fR.
+.IP "\fB\-MD\fR" 4
+.IX Item "-MD"
+\&\fB\-MD\fR is equivalent to \fB\-M \-MF\fR \fIfile\fR, except that
+\&\fB\-E\fR is not implied.  The driver determines \fIfile\fR based on
+whether an \fB\-o\fR option is given.  If it is, the driver uses its
+argument but with a suffix of \fI.d\fR, otherwise it takes the name
+of the input file, removes any directory components and suffix, and
+applies a \fI.d\fR suffix.
+.Sp
+If \fB\-MD\fR is used in conjunction with \fB\-E\fR, any
+\&\fB\-o\fR switch is understood to specify the dependency output file, but if used without \fB\-E\fR, each \fB\-o\fR
+is understood to specify a target object file.
+.Sp
+Since \fB\-E\fR is not implied, \fB\-MD\fR can be used to generate
+a dependency output file as a side effect of the compilation process.
+.IP "\fB\-MMD\fR" 4
+.IX Item "-MMD"
+Like \fB\-MD\fR except mention only user header files, not system
+header files.
+.IP "\fB\-fpreprocessed\fR" 4
+.IX Item "-fpreprocessed"
+Indicate to the preprocessor that the input file has already been
+preprocessed.  This suppresses things like macro expansion, trigraph
+conversion, escaped newline splicing, and processing of most directives.
+The preprocessor still recognizes and removes comments, so that you can
+pass a file preprocessed with \fB\-C\fR to the compiler without
+problems.  In this mode the integrated preprocessor is little more than
+a tokenizer for the front ends.
+.Sp
+\&\fB\-fpreprocessed\fR is implicit if the input file has one of the
+extensions \fB.i\fR, \fB.ii\fR or \fB.mi\fR.  These are the
+extensions that \s-1GCC\s0 uses for preprocessed files created by
+\&\fB\-save\-temps\fR.
+.IP "\fB\-fdirectives\-only\fR" 4
+.IX Item "-fdirectives-only"
+When preprocessing, handle directives, but do not expand macros.
+.Sp
+The option's behavior depends on the \fB\-E\fR and \fB\-fpreprocessed\fR
+options.
+.Sp
+With \fB\-E\fR, preprocessing is limited to the handling of directives
+such as \f(CW\*(C`#define\*(C'\fR, \f(CW\*(C`#ifdef\*(C'\fR, and \f(CW\*(C`#error\*(C'\fR.  Other
+preprocessor operations, such as macro expansion and trigraph
+conversion are not performed.  In addition, the \fB\-dD\fR option is
+implicitly enabled.
+.Sp
+With \fB\-fpreprocessed\fR, predefinition of command line and most
+builtin macros is disabled.  Macros such as \f(CW\*(C`_\|_LINE_\|_\*(C'\fR, which are
+contextually dependent, are handled normally.  This enables compilation of
+files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
+.Sp
+With both \fB\-E\fR and \fB\-fpreprocessed\fR, the rules for
+\&\fB\-fpreprocessed\fR take precedence.  This enables full preprocessing of
+files previously preprocessed with \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR.
+.IP "\fB\-fdollars\-in\-identifiers\fR" 4
+.IX Item "-fdollars-in-identifiers"
+Accept \fB$\fR in identifiers.
+.IP "\fB\-fextended\-identifiers\fR" 4
+.IX Item "-fextended-identifiers"
+Accept universal character names in identifiers.  This option is
+enabled by default for C99 (and later C standard versions) and \*(C+.
+.IP "\fB\-fno\-canonical\-system\-headers\fR" 4
+.IX Item "-fno-canonical-system-headers"
+When preprocessing, do not shorten system header paths with canonicalization.
+.IP "\fB\-ftabstop=\fR\fIwidth\fR" 4
+.IX Item "-ftabstop=width"
+Set the distance between tab stops.  This helps the preprocessor report
+correct column numbers in warnings or errors, even if tabs appear on the
+line.  If the value is less than 1 or greater than 100, the option is
+ignored.  The default is 8.
+.IP "\fB\-ftrack\-macro\-expansion\fR[\fB=\fR\fIlevel\fR]" 4
+.IX Item "-ftrack-macro-expansion[=level]"
+Track locations of tokens across macro expansions. This allows the
+compiler to emit diagnostic about the current macro expansion stack
+when a compilation error occurs in a macro expansion. Using this
+option makes the preprocessor and the compiler consume more
+memory. The \fIlevel\fR parameter can be used to choose the level of
+precision of token location tracking thus decreasing the memory
+consumption if necessary. Value \fB0\fR of \fIlevel\fR de-activates
+this option. Value \fB1\fR tracks tokens locations in a
+degraded mode for the sake of minimal memory overhead. In this mode
+all tokens resulting from the expansion of an argument of a
+function-like macro have the same location. Value \fB2\fR tracks
+tokens locations completely. This value is the most memory hungry.
+When this option is given no argument, the default parameter value is
+\&\fB2\fR.
+.Sp
+Note that \f(CW\*(C`\-ftrack\-macro\-expansion=2\*(C'\fR is activated by default.
+.IP "\fB\-fmacro\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4
+.IX Item "-fmacro-prefix-map=old=new"
+When preprocessing files residing in directory \fI\fIold\fI\fR,
+expand the \f(CW\*(C`_\|_FILE_\|_\*(C'\fR and \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR macros as if the
+files resided in directory \fI\fInew\fI\fR instead.  This can be used
+to change an absolute path to a relative path by using \fI.\fR for
+\&\fInew\fR which can result in more reproducible builds that are
+location independent.  This option also affects
+\&\f(CW\*(C`_\|_builtin_FILE()\*(C'\fR during compilation.  See also
+\&\fB\-ffile\-prefix\-map\fR.
+.IP "\fB\-fexec\-charset=\fR\fIcharset\fR" 4
+.IX Item "-fexec-charset=charset"
+Set the execution character set, used for string and character
+constants.  The default is \s-1UTF\-8.\s0  \fIcharset\fR can be any encoding
+supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
+.IP "\fB\-fwide\-exec\-charset=\fR\fIcharset\fR" 4
+.IX Item "-fwide-exec-charset=charset"
+Set the wide execution character set, used for wide string and
+character constants.  The default is \s-1UTF\-32\s0 or \s-1UTF\-16,\s0 whichever
+corresponds to the width of \f(CW\*(C`wchar_t\*(C'\fR.  As with
+\&\fB\-fexec\-charset\fR, \fIcharset\fR can be any encoding supported
+by the system's \f(CW\*(C`iconv\*(C'\fR library routine; however, you will have
+problems with encodings that do not fit exactly in \f(CW\*(C`wchar_t\*(C'\fR.
+.IP "\fB\-finput\-charset=\fR\fIcharset\fR" 4
+.IX Item "-finput-charset=charset"
+Set the input character set, used for translation from the character
+set of the input file to the source character set used by \s-1GCC.\s0  If the
+locale does not specify, or \s-1GCC\s0 cannot get this information from the
+locale, the default is \s-1UTF\-8.\s0  This can be overridden by either the locale
+or this command-line option.  Currently the command-line option takes
+precedence if there's a conflict.  \fIcharset\fR can be any encoding
+supported by the system's \f(CW\*(C`iconv\*(C'\fR library routine.
+.IP "\fB\-fpch\-deps\fR" 4
+.IX Item "-fpch-deps"
+When using precompiled headers, this flag
+causes the dependency-output flags to also list the files from the
+precompiled header's dependencies.  If not specified, only the
+precompiled header are listed and not the files that were used to
+create it, because those files are not consulted when a precompiled
+header is used.
+.IP "\fB\-fpch\-preprocess\fR" 4
+.IX Item "-fpch-preprocess"
+This option allows use of a precompiled header together with \fB\-E\fR.  It inserts a special \f(CW\*(C`#pragma\*(C'\fR,
+\&\f(CW\*(C`#pragma GCC pch_preprocess "\f(CIfilename\f(CW"\*(C'\fR in the output to mark
+the place where the precompiled header was found, and its \fIfilename\fR.
+When \fB\-fpreprocessed\fR is in use, \s-1GCC\s0 recognizes this \f(CW\*(C`#pragma\*(C'\fR
+and loads the \s-1PCH.\s0
+.Sp
+This option is off by default, because the resulting preprocessed output
+is only really suitable as input to \s-1GCC.\s0  It is switched on by
+\&\fB\-save\-temps\fR.
+.Sp
+You should not write this \f(CW\*(C`#pragma\*(C'\fR in your own code, but it is
+safe to edit the filename if the \s-1PCH\s0 file is available in a different
+location.  The filename may be absolute or it may be relative to \s-1GCC\s0's
+current directory.
+.IP "\fB\-fworking\-directory\fR" 4
+.IX Item "-fworking-directory"
+Enable generation of linemarkers in the preprocessor output that
+let the compiler know the current working directory at the time of
+preprocessing.  When this option is enabled, the preprocessor
+emits, after the initial linemarker, a second linemarker with the
+current working directory followed by two slashes.  \s-1GCC\s0 uses this
+directory, when it's present in the preprocessed input, as the
+directory emitted as the current working directory in some debugging
+information formats.  This option is implicitly enabled if debugging
+information is enabled, but this can be inhibited with the negated
+form \fB\-fno\-working\-directory\fR.  If the \fB\-P\fR flag is
+present in the command line, this option has no effect, since no
+\&\f(CW\*(C`#line\*(C'\fR directives are emitted whatsoever.
+.IP "\fB\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4
+.IX Item "-A predicate=answer"
+Make an assertion with the predicate \fIpredicate\fR and answer
+\&\fIanswer\fR.  This form is preferred to the older form \fB\-A\fR
+\&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR, which is still supported, because
+it does not use shell special characters.
+.IP "\fB\-A \-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4
+.IX Item "-A -predicate=answer"
+Cancel an assertion with the predicate \fIpredicate\fR and answer
+\&\fIanswer\fR.
+.IP "\fB\-C\fR" 4
+.IX Item "-C"
+Do not discard comments.  All comments are passed through to the output
+file, except for comments in processed directives, which are deleted
+along with the directive.
+.Sp
+You should be prepared for side effects when using \fB\-C\fR; it
+causes the preprocessor to treat comments as tokens in their own right.
+For example, comments appearing at the start of what would be a
+directive line have the effect of turning that line into an ordinary
+source line, since the first token on the line is no longer a \fB#\fR.
+.IP "\fB\-CC\fR" 4
+.IX Item "-CC"
+Do not discard comments, including during macro expansion.  This is
+like \fB\-C\fR, except that comments contained within macros are
+also passed through to the output file where the macro is expanded.
+.Sp
+In addition to the side effects of the \fB\-C\fR option, the
+\&\fB\-CC\fR option causes all \*(C+\-style comments inside a macro
+to be converted to C\-style comments.  This is to prevent later use
+of that macro from inadvertently commenting out the remainder of
+the source line.
+.Sp
+The \fB\-CC\fR option is generally used to support lint comments.
+.IP "\fB\-P\fR" 4
+.IX Item "-P"
+Inhibit generation of linemarkers in the output from the preprocessor.
+This might be useful when running the preprocessor on something that is
+not C code, and will be sent to a program which might be confused by the
+linemarkers.
+.IP "\fB\-traditional\fR" 4
+.IX Item "-traditional"
+.PD 0
+.IP "\fB\-traditional\-cpp\fR" 4
+.IX Item "-traditional-cpp"
+.PD
+Try to imitate the behavior of pre-standard C preprocessors, as
+opposed to \s-1ISO C\s0 preprocessors.
+See the \s-1GNU CPP\s0 manual for details.
+.Sp
+Note that \s-1GCC\s0 does not otherwise attempt to emulate a pre-standard 
+C compiler, and these options are only supported with the \fB\-E\fR 
+switch, or when invoking \s-1CPP\s0 explicitly.
+.IP "\fB\-trigraphs\fR" 4
+.IX Item "-trigraphs"
+Support \s-1ISO C\s0 trigraphs.
+These are three-character sequences, all starting with \fB??\fR, that
+are defined by \s-1ISO C\s0 to stand for single characters.  For example,
+\&\fB??/\fR stands for \fB\e\fR, so \fB'??/n'\fR is a character
+constant for a newline.
+.Sp
+The nine trigraphs and their replacements are
+.Sp
+.Vb 2
+\&        Trigraph:       ??(  ??)  ??<  ??>  ??=  ??/  ??\*(Aq  ??!  ??\-
+\&        Replacement:      [    ]    {    }    #    \e    ^    |    ~
+.Ve
+.Sp
+By default, \s-1GCC\s0 ignores trigraphs, but in
+standard-conforming modes it converts them.  See the \fB\-std\fR and
+\&\fB\-ansi\fR options.
+.IP "\fB\-remap\fR" 4
+.IX Item "-remap"
+Enable special code to work around file systems which only permit very
+short file names, such as MS-DOS.
+.IP "\fB\-H\fR" 4
+.IX Item "-H"
+Print the name of each header file used, in addition to other normal
+activities.  Each name is indented to show how deep in the
+\&\fB#include\fR stack it is.  Precompiled header files are also
+printed, even if they are found to be invalid; an invalid precompiled
+header file is printed with \fB...x\fR and a valid one with \fB...!\fR .
+.IP "\fB\-d\fR\fIletters\fR" 4
+.IX Item "-dletters"
+Says to make debugging dumps during compilation as specified by
+\&\fIletters\fR.  The flags documented here are those relevant to the
+preprocessor.  Other \fIletters\fR are interpreted
+by the compiler proper, or reserved for future versions of \s-1GCC,\s0 and so
+are silently ignored.  If you specify \fIletters\fR whose behavior
+conflicts, the result is undefined.
+.RS 4
+.IP "\fB\-dM\fR" 4
+.IX Item "-dM"
+Instead of the normal output, generate a list of \fB#define\fR
+directives for all the macros defined during the execution of the
+preprocessor, including predefined macros.  This gives you a way of
+finding out what is predefined in your version of the preprocessor.
+Assuming you have no file \fIfoo.h\fR, the command
+.Sp
+.Vb 1
+\&        touch foo.h; cpp \-dM foo.h
+.Ve
+.Sp
+shows all the predefined macros.
+.Sp
+If you use \fB\-dM\fR without the \fB\-E\fR option, \fB\-dM\fR is
+interpreted as a synonym for \fB\-fdump\-rtl\-mach\fR.
+.IP "\fB\-dD\fR" 4
+.IX Item "-dD"
+Like \fB\-dM\fR except in two respects: it does \fInot\fR include the
+predefined macros, and it outputs \fIboth\fR the \fB#define\fR
+directives and the result of preprocessing.  Both kinds of output go to
+the standard output file.
+.IP "\fB\-dN\fR" 4
+.IX Item "-dN"
+Like \fB\-dD\fR, but emit only the macro names, not their expansions.
+.IP "\fB\-dI\fR" 4
+.IX Item "-dI"
+Output \fB#include\fR directives in addition to the result of
+preprocessing.
+.IP "\fB\-dU\fR" 4
+.IX Item "-dU"
+Like \fB\-dD\fR except that only macros that are expanded, or whose
+definedness is tested in preprocessor directives, are output; the
+output is delayed until the use or test of the macro; and
+\&\fB#undef\fR directives are also output for macros tested but
+undefined at the time.
+.RE
+.RS 4
+.RE
+.IP "\fB\-fdebug\-cpp\fR" 4
+.IX Item "-fdebug-cpp"
+This option is only useful for debugging \s-1GCC.\s0  When used from \s-1CPP\s0 or with
+\&\fB\-E\fR, it dumps debugging information about location maps.  Every
+token in the output is preceded by the dump of the map its location
+belongs to.
+.Sp
+When used from \s-1GCC\s0 without \fB\-E\fR, this option has no effect.
+.IP "\fB\-Wp,\fR\fIoption\fR" 4
+.IX Item "-Wp,option"
+You can use \fB\-Wp,\fR\fIoption\fR to bypass the compiler driver
+and pass \fIoption\fR directly through to the preprocessor.  If
+\&\fIoption\fR contains commas, it is split into multiple options at the
+commas.  However, many options are modified, translated or interpreted
+by the compiler driver before being passed to the preprocessor, and
+\&\fB\-Wp\fR forcibly bypasses this phase.  The preprocessor's direct
+interface is undocumented and subject to change, so whenever possible
+you should avoid using \fB\-Wp\fR and let the driver handle the
+options instead.
+.IP "\fB\-Xpreprocessor\fR \fIoption\fR" 4
+.IX Item "-Xpreprocessor option"
+Pass \fIoption\fR as an option to the preprocessor.  You can use this to
+supply system-specific preprocessor options that \s-1GCC\s0 does not 
+recognize.
+.Sp
+If you want to pass an option that takes an argument, you must use
+\&\fB\-Xpreprocessor\fR twice, once for the option and once for the argument.
+.IP "\fB\-no\-integrated\-cpp\fR" 4
+.IX Item "-no-integrated-cpp"
+Perform preprocessing as a separate pass before compilation.
+By default, \s-1GCC\s0 performs preprocessing as an integrated part of
+input tokenization and parsing.
+If this option is provided, the appropriate language front end
+(\fBcc1\fR, \fBcc1plus\fR, or \fBcc1obj\fR for C, \*(C+,
+and Objective-C, respectively) is instead invoked twice,
+once for preprocessing only and once for actual compilation
+of the preprocessed input.
+This option may be useful in conjunction with the \fB\-B\fR or
+\&\fB\-wrapper\fR options to specify an alternate preprocessor or
+perform additional processing of the program source between
+normal preprocessing and compilation.
+.SS "Passing Options to the Assembler"
+.IX Subsection "Passing Options to the Assembler"
+You can pass options to the assembler.
+.IP "\fB\-Wa,\fR\fIoption\fR" 4
+.IX Item "-Wa,option"
+Pass \fIoption\fR as an option to the assembler.  If \fIoption\fR
+contains commas, it is split into multiple options at the commas.
+.IP "\fB\-Xassembler\fR \fIoption\fR" 4
+.IX Item "-Xassembler option"
+Pass \fIoption\fR as an option to the assembler.  You can use this to
+supply system-specific assembler options that \s-1GCC\s0 does not
+recognize.
+.Sp
+If you want to pass an option that takes an argument, you must use
+\&\fB\-Xassembler\fR twice, once for the option and once for the argument.
+.SS "Options for Linking"
+.IX Subsection "Options for Linking"
+These options come into play when the compiler links object files into
+an executable output file.  They are meaningless if the compiler is
+not doing a link step.
+.IP "\fIobject-file-name\fR" 4
+.IX Item "object-file-name"
+A file name that does not end in a special recognized suffix is
+considered to name an object file or library.  (Object files are
+distinguished from libraries by the linker according to the file
+contents.)  If linking is done, these object files are used as input
+to the linker.
+.IP "\fB\-c\fR" 4
+.IX Item "-c"
+.PD 0
+.IP "\fB\-S\fR" 4
+.IX Item "-S"
+.IP "\fB\-E\fR" 4
+.IX Item "-E"
+.PD
+If any of these options is used, then the linker is not run, and
+object file names should not be used as arguments.
+.IP "\fB\-flinker\-output=\fR\fItype\fR" 4
+.IX Item "-flinker-output=type"
+This option controls the code generation of the link time optimizer.  By
+default the linker output is determined by the linker plugin automatically. For
+debugging the compiler and in the case of incremental linking to non-lto object
+file is desired, it may be useful to control the type manually.
+.Sp
+If \fItype\fR is \fBexec\fR the code generation is configured to produce static
+binary. In this case \fB\-fpic\fR and \fB\-fpie\fR are both disabled.
+.Sp
+If \fItype\fR is \fBdyn\fR the code generation is configured to produce shared
+library. In this case \fB\-fpic\fR or \fB\-fPIC\fR is preserved, but not
+enabled automatically.  This makes it possible to build shared libraries without
+position independent code on architectures this is possible, i.e. on x86.
+.Sp
+If \fItype\fR is \fBpie\fR the code generation is configured to produce
+\&\fB\-fpie\fR executable. This result in similar optimizations as \fBexec\fR
+except that \fB\-fpie\fR is not disabled if specified at compilation time.
+.Sp
+If \fItype\fR is \fBrel\fR the compiler assumes that incremental linking is
+done.  The sections containing intermediate code for link-time optimization are
+merged, pre-optimized, and output to the resulting object file. In addition, if
+\&\fB\-ffat\-lto\-objects\fR is specified the binary code is produced for future
+non-lto linking. The object file produced by incremental linking will be smaller
+than a static library produced from the same object files.  At link-time the
+result of incremental linking will also load faster to compiler than a static
+library assuming that majority of objects in the library are used.
+.Sp
+Finally \fBnolto-rel\fR configure compiler to for incremental linking where
+code generation is forced, final binary is produced and the intermediate code
+for later link-time optimization is stripped. When multiple object files are
+linked together the resulting code will be optimized better than with link time
+optimizations disabled (for example, the cross-module inlining will happen),
+most of benefits of whole program optimizations are however lost.
+.Sp
+During the incremental link (by \fB\-r\fR) the linker plugin will default to
+\&\fBrel\fR. With current interfaces to \s-1GNU\s0 Binutils it is however not
+possible to link incrementally \s-1LTO\s0 objects and non-LTO objects into a single
+mixed object file.  In the case any of object files in incremental link cannot
+be used for link-time optimization the linker plugin will output warning and
+use \fBnolto-rel\fR. To maintain the whole program optimization it is
+recommended to link such objects into static library instead. Alternatively it
+is possible to use H.J. Lu's binutils with support for mixed objects.
+.IP "\fB\-fuse\-ld=bfd\fR" 4
+.IX Item "-fuse-ld=bfd"
+Use the \fBbfd\fR linker instead of the default linker.
+.IP "\fB\-fuse\-ld=gold\fR" 4
+.IX Item "-fuse-ld=gold"
+Use the \fBgold\fR linker instead of the default linker.
+.IP "\fB\-fuse\-ld=lld\fR" 4
+.IX Item "-fuse-ld=lld"
+Use the \s-1LLVM\s0 \fBlld\fR linker instead of the default linker.
+.IP "\fB\-l\fR\fIlibrary\fR" 4
+.IX Item "-llibrary"
+.PD 0
+.IP "\fB\-l\fR \fIlibrary\fR" 4
+.IX Item "-l library"
+.PD
+Search the library named \fIlibrary\fR when linking.  (The second
+alternative with the library as a separate argument is only for
+\&\s-1POSIX\s0 compliance and is not recommended.)
+.Sp
+The \fB\-l\fR option is passed directly to the linker by \s-1GCC.\s0  Refer
+to your linker documentation for exact details.  The general
+description below applies to the \s-1GNU\s0 linker.
+.Sp
+The linker searches a standard list of directories for the library.
+The directories searched include several standard system directories
+plus any that you specify with \fB\-L\fR.
+.Sp
+Static libraries are archives of object files, and have file names
+like \fIlib\fIlibrary\fI.a\fR.  Some targets also support shared
+libraries, which typically have names like \fIlib\fIlibrary\fI.so\fR.
+If both static and shared libraries are found, the linker gives
+preference to linking with the shared library unless the
+\&\fB\-static\fR option is used.
+.Sp
+It makes a difference where in the command you write this option; the
+linker searches and processes libraries and object files in the order they
+are specified.  Thus, \fBfoo.o \-lz bar.o\fR searches library \fBz\fR
+after file \fIfoo.o\fR but before \fIbar.o\fR.  If \fIbar.o\fR refers
+to functions in \fBz\fR, those functions may not be loaded.
+.IP "\fB\-lobjc\fR" 4
+.IX Item "-lobjc"
+You need this special case of the \fB\-l\fR option in order to
+link an Objective-C or Objective\-\*(C+ program.
+.IP "\fB\-nostartfiles\fR" 4
+.IX Item "-nostartfiles"
+Do not use the standard system startup files when linking.
+The standard system libraries are used normally, unless \fB\-nostdlib\fR,
+\&\fB\-nolibc\fR, or \fB\-nodefaultlibs\fR is used.
+.IP "\fB\-nodefaultlibs\fR" 4
+.IX Item "-nodefaultlibs"
+Do not use the standard system libraries when linking.
+Only the libraries you specify are passed to the linker, and options
+specifying linkage of the system libraries, such as \fB\-static\-libgcc\fR
+or \fB\-shared\-libgcc\fR, are ignored.  
+The standard startup files are used normally, unless \fB\-nostartfiles\fR
+is used.
+.Sp
+The compiler may generate calls to \f(CW\*(C`memcmp\*(C'\fR,
+\&\f(CW\*(C`memset\*(C'\fR, \f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR.
+These entries are usually resolved by entries in
+libc.  These entry points should be supplied through some other
+mechanism when this option is specified.
+.IP "\fB\-nolibc\fR" 4
+.IX Item "-nolibc"
+Do not use the C library or system libraries tightly coupled with it when
+linking.  Still link with the startup files, \fIlibgcc\fR or toolchain
+provided language support libraries such as \fIlibgnat\fR, \fIlibgfortran\fR
+or \fIlibstdc++\fR unless options preventing their inclusion are used as
+well.  This typically removes \fB\-lc\fR from the link command line, as well
+as system libraries that normally go with it and become meaningless when
+absence of a C library is assumed, for example \fB\-lpthread\fR or
+\&\fB\-lm\fR in some configurations.  This is intended for bare-board
+targets when there is indeed no C library available.
+.IP "\fB\-nostdlib\fR" 4
+.IX Item "-nostdlib"
+Do not use the standard system startup files or libraries when linking.
+No startup files and only the libraries you specify are passed to
+the linker, and options specifying linkage of the system libraries, such as
+\&\fB\-static\-libgcc\fR or \fB\-shared\-libgcc\fR, are ignored.
+.Sp
+The compiler may generate calls to \f(CW\*(C`memcmp\*(C'\fR, \f(CW\*(C`memset\*(C'\fR,
+\&\f(CW\*(C`memcpy\*(C'\fR and \f(CW\*(C`memmove\*(C'\fR.
+These entries are usually resolved by entries in
+libc.  These entry points should be supplied through some other
+mechanism when this option is specified.
+.Sp
+One of the standard libraries bypassed by \fB\-nostdlib\fR and
+\&\fB\-nodefaultlibs\fR is \fIlibgcc.a\fR, a library of internal subroutines
+which \s-1GCC\s0 uses to overcome shortcomings of particular machines, or special
+needs for some languages.
+.Sp
+In most cases, you need \fIlibgcc.a\fR even when you want to avoid
+other standard libraries.  In other words, when you specify \fB\-nostdlib\fR
+or \fB\-nodefaultlibs\fR you should usually specify \fB\-lgcc\fR as well.
+This ensures that you have no unresolved references to internal \s-1GCC\s0
+library subroutines.
+(An example of such an internal subroutine is \f(CW\*(C`_\|_main\*(C'\fR, used to ensure \*(C+
+constructors are called.)
+.IP "\fB\-e\fR \fIentry\fR" 4
+.IX Item "-e entry"
+.PD 0
+.IP "\fB\-\-entry=\fR\fIentry\fR" 4
+.IX Item "--entry=entry"
+.PD
+Specify that the program entry point is \fIentry\fR.  The argument is
+interpreted by the linker; the \s-1GNU\s0 linker accepts either a symbol name
+or an address.
+.IP "\fB\-pie\fR" 4
+.IX Item "-pie"
+Produce a dynamically linked position independent executable on targets
+that support it.  For predictable results, you must also specify the same
+set of options used for compilation (\fB\-fpie\fR, \fB\-fPIE\fR,
+or model suboptions) when you specify this linker option.
+.IP "\fB\-no\-pie\fR" 4
+.IX Item "-no-pie"
+Don't produce a dynamically linked position independent executable.
+.IP "\fB\-static\-pie\fR" 4
+.IX Item "-static-pie"
+Produce a static position independent executable on targets that support
+it.  A static position independent executable is similar to a static
+executable, but can be loaded at any address without a dynamic linker.
+For predictable results, you must also specify the same set of options
+used for compilation (\fB\-fpie\fR, \fB\-fPIE\fR, or model
+suboptions) when you specify this linker option.
+.IP "\fB\-pthread\fR" 4
+.IX Item "-pthread"
+Link with the \s-1POSIX\s0 threads library.  This option is supported on 
+GNU/Linux targets, most other Unix derivatives, and also on 
+x86 Cygwin and MinGW targets.  On some targets this option also sets 
+flags for the preprocessor, so it should be used consistently for both
+compilation and linking.
+.IP "\fB\-r\fR" 4
+.IX Item "-r"
+Produce a relocatable object as output.  This is also known as partial
+linking.
+.IP "\fB\-rdynamic\fR" 4
+.IX Item "-rdynamic"
+Pass the flag \fB\-export\-dynamic\fR to the \s-1ELF\s0 linker, on targets
+that support it. This instructs the linker to add all symbols, not
+only used ones, to the dynamic symbol table. This option is needed
+for some uses of \f(CW\*(C`dlopen\*(C'\fR or to allow obtaining backtraces
+from within a program.
+.IP "\fB\-s\fR" 4
+.IX Item "-s"
+Remove all symbol table and relocation information from the executable.
+.IP "\fB\-static\fR" 4
+.IX Item "-static"
+On systems that support dynamic linking, this overrides \fB\-pie\fR
+and prevents linking with the shared libraries.  On other systems, this
+option has no effect.
+.IP "\fB\-shared\fR" 4
+.IX Item "-shared"
+Produce a shared object which can then be linked with other objects to
+form an executable.  Not all systems support this option.  For predictable
+results, you must also specify the same set of options used for compilation
+(\fB\-fpic\fR, \fB\-fPIC\fR, or model suboptions) when
+you specify this linker option.[1]
+.IP "\fB\-shared\-libgcc\fR" 4
+.IX Item "-shared-libgcc"
+.PD 0
+.IP "\fB\-static\-libgcc\fR" 4
+.IX Item "-static-libgcc"
+.PD
+On systems that provide \fIlibgcc\fR as a shared library, these options
+force the use of either the shared or static version, respectively.
+If no shared version of \fIlibgcc\fR was built when the compiler was
+configured, these options have no effect.
+.Sp
+There are several situations in which an application should use the
+shared \fIlibgcc\fR instead of the static version.  The most common
+of these is when the application wishes to throw and catch exceptions
+across different shared libraries.  In that case, each of the libraries
+as well as the application itself should use the shared \fIlibgcc\fR.
+.Sp
+Therefore, the G++ driver automatically adds \fB\-shared\-libgcc\fR
+whenever you build a shared library or a main executable, because \*(C+
+programs typically use exceptions, so this is the right thing to do.
+.Sp
+If, instead, you use the \s-1GCC\s0 driver to create shared libraries, you may
+find that they are not always linked with the shared \fIlibgcc\fR.
+If \s-1GCC\s0 finds, at its configuration time, that you have a non-GNU linker
+or a \s-1GNU\s0 linker that does not support option \fB\-\-eh\-frame\-hdr\fR,
+it links the shared version of \fIlibgcc\fR into shared libraries
+by default.  Otherwise, it takes advantage of the linker and optimizes
+away the linking with the shared version of \fIlibgcc\fR, linking with
+the static version of libgcc by default.  This allows exceptions to
+propagate through such shared libraries, without incurring relocation
+costs at library load time.
+.Sp
+However, if a library or main executable is supposed to throw or catch
+exceptions, you must link it using the G++ driver, or using the option
+\&\fB\-shared\-libgcc\fR, such that it is linked with the shared
+\&\fIlibgcc\fR.
+.IP "\fB\-static\-libasan\fR" 4
+.IX Item "-static-libasan"
+When the \fB\-fsanitize=address\fR option is used to link a program,
+the \s-1GCC\s0 driver automatically links against \fBlibasan\fR.  If
+\&\fIlibasan\fR is available as a shared library, and the \fB\-static\fR
+option is not used, then this links against the shared version of
+\&\fIlibasan\fR.  The \fB\-static\-libasan\fR option directs the \s-1GCC\s0
+driver to link \fIlibasan\fR statically, without necessarily linking
+other libraries statically.
+.IP "\fB\-static\-libtsan\fR" 4
+.IX Item "-static-libtsan"
+When the \fB\-fsanitize=thread\fR option is used to link a program,
+the \s-1GCC\s0 driver automatically links against \fBlibtsan\fR.  If
+\&\fIlibtsan\fR is available as a shared library, and the \fB\-static\fR
+option is not used, then this links against the shared version of
+\&\fIlibtsan\fR.  The \fB\-static\-libtsan\fR option directs the \s-1GCC\s0
+driver to link \fIlibtsan\fR statically, without necessarily linking
+other libraries statically.
+.IP "\fB\-static\-liblsan\fR" 4
+.IX Item "-static-liblsan"
+When the \fB\-fsanitize=leak\fR option is used to link a program,
+the \s-1GCC\s0 driver automatically links against \fBliblsan\fR.  If
+\&\fIliblsan\fR is available as a shared library, and the \fB\-static\fR
+option is not used, then this links against the shared version of
+\&\fIliblsan\fR.  The \fB\-static\-liblsan\fR option directs the \s-1GCC\s0
+driver to link \fIliblsan\fR statically, without necessarily linking
+other libraries statically.
+.IP "\fB\-static\-libubsan\fR" 4
+.IX Item "-static-libubsan"
+When the \fB\-fsanitize=undefined\fR option is used to link a program,
+the \s-1GCC\s0 driver automatically links against \fBlibubsan\fR.  If
+\&\fIlibubsan\fR is available as a shared library, and the \fB\-static\fR
+option is not used, then this links against the shared version of
+\&\fIlibubsan\fR.  The \fB\-static\-libubsan\fR option directs the \s-1GCC\s0
+driver to link \fIlibubsan\fR statically, without necessarily linking
+other libraries statically.
+.IP "\fB\-static\-libstdc++\fR" 4
+.IX Item "-static-libstdc++"
+When the \fBg++\fR program is used to link a \*(C+ program, it
+normally automatically links against \fBlibstdc++\fR.  If
+\&\fIlibstdc++\fR is available as a shared library, and the
+\&\fB\-static\fR option is not used, then this links against the
+shared version of \fIlibstdc++\fR.  That is normally fine.  However, it
+is sometimes useful to freeze the version of \fIlibstdc++\fR used by
+the program without going all the way to a fully static link.  The
+\&\fB\-static\-libstdc++\fR option directs the \fBg++\fR driver to
+link \fIlibstdc++\fR statically, without necessarily linking other
+libraries statically.
+.IP "\fB\-symbolic\fR" 4
+.IX Item "-symbolic"
+Bind references to global symbols when building a shared object.  Warn
+about any unresolved references (unless overridden by the link editor
+option \fB\-Xlinker \-z \-Xlinker defs\fR).  Only a few systems support
+this option.
+.IP "\fB\-T\fR \fIscript\fR" 4
+.IX Item "-T script"
+Use \fIscript\fR as the linker script.  This option is supported by most
+systems using the \s-1GNU\s0 linker.  On some targets, such as bare-board
+targets without an operating system, the \fB\-T\fR option may be required
+when linking to avoid references to undefined symbols.
+.IP "\fB\-Xlinker\fR \fIoption\fR" 4
+.IX Item "-Xlinker option"
+Pass \fIoption\fR as an option to the linker.  You can use this to
+supply system-specific linker options that \s-1GCC\s0 does not recognize.
+.Sp
+If you want to pass an option that takes a separate argument, you must use
+\&\fB\-Xlinker\fR twice, once for the option and once for the argument.
+For example, to pass \fB\-assert definitions\fR, you must write
+\&\fB\-Xlinker \-assert \-Xlinker definitions\fR.  It does not work to write
+\&\fB\-Xlinker \*(L"\-assert definitions\*(R"\fR, because this passes the entire
+string as a single argument, which is not what the linker expects.
+.Sp
+When using the \s-1GNU\s0 linker, it is usually more convenient to pass
+arguments to linker options using the \fIoption\fR\fB=\fR\fIvalue\fR
+syntax than as separate arguments.  For example, you can specify
+\&\fB\-Xlinker \-Map=output.map\fR rather than
+\&\fB\-Xlinker \-Map \-Xlinker output.map\fR.  Other linkers may not support
+this syntax for command-line options.
+.IP "\fB\-Wl,\fR\fIoption\fR" 4
+.IX Item "-Wl,option"
+Pass \fIoption\fR as an option to the linker.  If \fIoption\fR contains
+commas, it is split into multiple options at the commas.  You can use this
+syntax to pass an argument to the option.
+For example, \fB\-Wl,\-Map,output.map\fR passes \fB\-Map output.map\fR to the
+linker.  When using the \s-1GNU\s0 linker, you can also get the same effect with
+\&\fB\-Wl,\-Map=output.map\fR.
+.IP "\fB\-u\fR \fIsymbol\fR" 4
+.IX Item "-u symbol"
+Pretend the symbol \fIsymbol\fR is undefined, to force linking of
+library modules to define it.  You can use \fB\-u\fR multiple times with
+different symbols to force loading of additional library modules.
+.IP "\fB\-z\fR \fIkeyword\fR" 4
+.IX Item "-z keyword"
+\&\fB\-z\fR is passed directly on to the linker along with the keyword
+\&\fIkeyword\fR. See the section in the documentation of your linker for
+permitted values and their meanings.
+.SS "Options for Directory Search"
+.IX Subsection "Options for Directory Search"
+These options specify directories to search for header files, for
+libraries and for parts of the compiler:
+.IP "\fB\-I\fR \fIdir\fR" 4
+.IX Item "-I dir"
+.PD 0
+.IP "\fB\-iquote\fR \fIdir\fR" 4
+.IX Item "-iquote dir"
+.IP "\fB\-isystem\fR \fIdir\fR" 4
+.IX Item "-isystem dir"
+.IP "\fB\-idirafter\fR \fIdir\fR" 4
+.IX Item "-idirafter dir"
+.PD
+Add the directory \fIdir\fR to the list of directories to be searched
+for header files during preprocessing.
+If \fIdir\fR begins with \fB=\fR or \f(CW$SYSROOT\fR, then the \fB=\fR
+or \f(CW$SYSROOT\fR is replaced by the sysroot prefix; see
+\&\fB\-\-sysroot\fR and \fB\-isysroot\fR.
+.Sp
+Directories specified with \fB\-iquote\fR apply only to the quote 
+form of the directive, \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.
+Directories specified with \fB\-I\fR, \fB\-isystem\fR, 
+or \fB\-idirafter\fR apply to lookup for both the
+\&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR and
+\&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR directives.
+.Sp
+You can specify any number or combination of these options on the 
+command line to search for header files in several directories.  
+The lookup order is as follows:
+.RS 4
+.IP "1." 4
+.IX Item "1."
+For the quote form of the include directive, the directory of the current
+file is searched first.
+.IP "2." 4
+.IX Item "2."
+For the quote form of the include directive, the directories specified
+by \fB\-iquote\fR options are searched in left-to-right order,
+as they appear on the command line.
+.IP "3." 4
+.IX Item "3."
+Directories specified with \fB\-I\fR options are scanned in
+left-to-right order.
+.IP "4." 4
+.IX Item "4."
+Directories specified with \fB\-isystem\fR options are scanned in
+left-to-right order.
+.IP "5." 4
+.IX Item "5."
+Standard system directories are scanned.
+.IP "6." 4
+.IX Item "6."
+Directories specified with \fB\-idirafter\fR options are scanned in
+left-to-right order.
+.RE
+.RS 4
+.Sp
+You can use \fB\-I\fR to override a system header
+file, substituting your own version, since these directories are
+searched before the standard system header file directories.  
+However, you should
+not use this option to add directories that contain vendor-supplied
+system header files; use \fB\-isystem\fR for that.
+.Sp
+The \fB\-isystem\fR and \fB\-idirafter\fR options also mark the directory
+as a system directory, so that it gets the same special treatment that
+is applied to the standard system directories.
+.Sp
+If a standard system include directory, or a directory specified with
+\&\fB\-isystem\fR, is also specified with \fB\-I\fR, the \fB\-I\fR
+option is ignored.  The directory is still searched but as a
+system directory at its normal position in the system include chain.
+This is to ensure that \s-1GCC\s0's procedure to fix buggy system headers and
+the ordering for the \f(CW\*(C`#include_next\*(C'\fR directive are not inadvertently
+changed.
+If you really need to change the search order for system directories,
+use the \fB\-nostdinc\fR and/or \fB\-isystem\fR options.
+.RE
+.IP "\fB\-I\-\fR" 4
+.IX Item "-I-"
+Split the include path.
+This option has been deprecated.  Please use \fB\-iquote\fR instead for
+\&\fB\-I\fR directories before the \fB\-I\-\fR and remove the \fB\-I\-\fR
+option.
+.Sp
+Any directories specified with \fB\-I\fR
+options before \fB\-I\-\fR are searched only for headers requested with
+\&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR; they are not searched for
+\&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR.  If additional directories are
+specified with \fB\-I\fR options after the \fB\-I\-\fR, those
+directories are searched for all \fB#include\fR directives.
+.Sp
+In addition, \fB\-I\-\fR inhibits the use of the directory of the current
+file directory as the first search directory for \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR.  There is no way to override this effect of \fB\-I\-\fR.
+.IP "\fB\-iprefix\fR \fIprefix\fR" 4
+.IX Item "-iprefix prefix"
+Specify \fIprefix\fR as the prefix for subsequent \fB\-iwithprefix\fR
+options.  If the prefix represents a directory, you should include the
+final \fB/\fR.
+.IP "\fB\-iwithprefix\fR \fIdir\fR" 4
+.IX Item "-iwithprefix dir"
+.PD 0
+.IP "\fB\-iwithprefixbefore\fR \fIdir\fR" 4
+.IX Item "-iwithprefixbefore dir"
+.PD
+Append \fIdir\fR to the prefix specified previously with
+\&\fB\-iprefix\fR, and add the resulting directory to the include search
+path.  \fB\-iwithprefixbefore\fR puts it in the same place \fB\-I\fR
+would; \fB\-iwithprefix\fR puts it where \fB\-idirafter\fR would.
+.IP "\fB\-isysroot\fR \fIdir\fR" 4
+.IX Item "-isysroot dir"
+This option is like the \fB\-\-sysroot\fR option, but applies only to
+header files (except for Darwin targets, where it applies to both header
+files and libraries).  See the \fB\-\-sysroot\fR option for more
+information.
+.IP "\fB\-imultilib\fR \fIdir\fR" 4
+.IX Item "-imultilib dir"
+Use \fIdir\fR as a subdirectory of the directory containing
+target-specific \*(C+ headers.
+.IP "\fB\-nostdinc\fR" 4
+.IX Item "-nostdinc"
+Do not search the standard system directories for header files.
+Only the directories explicitly specified with \fB\-I\fR,
+\&\fB\-iquote\fR, \fB\-isystem\fR, and/or \fB\-idirafter\fR
+options (and the directory of the current file, if appropriate) 
+are searched.
+.IP "\fB\-nostdinc++\fR" 4
+.IX Item "-nostdinc++"
+Do not search for header files in the \*(C+\-specific standard directories,
+but do still search the other standard directories.  (This option is
+used when building the \*(C+ library.)
+.IP "\fB\-iplugindir=\fR\fIdir\fR" 4
+.IX Item "-iplugindir=dir"
+Set the directory to search for plugins that are passed
+by \fB\-fplugin=\fR\fIname\fR instead of
+\&\fB\-fplugin=\fR\fIpath\fR\fB/\fR\fIname\fR\fB.so\fR.  This option is not meant
+to be used by the user, but only passed by the driver.
+.IP "\fB\-L\fR\fIdir\fR" 4
+.IX Item "-Ldir"
+Add directory \fIdir\fR to the list of directories to be searched
+for \fB\-l\fR.
+.IP "\fB\-B\fR\fIprefix\fR" 4
+.IX Item "-Bprefix"
+This option specifies where to find the executables, libraries,
+include files, and data files of the compiler itself.
+.Sp
+The compiler driver program runs one or more of the subprograms
+\&\fBcpp\fR, \fBcc1\fR, \fBas\fR and \fBld\fR.  It tries
+\&\fIprefix\fR as a prefix for each program it tries to run, both with and
+without \fImachine\fR\fB/\fR\fIversion\fR\fB/\fR for the corresponding target
+machine and compiler version.
+.Sp
+For each subprogram to be run, the compiler driver first tries the
+\&\fB\-B\fR prefix, if any.  If that name is not found, or if \fB\-B\fR
+is not specified, the driver tries two standard prefixes, 
+\&\fI/usr/lib/gcc/\fR and \fI/usr/local/lib/gcc/\fR.  If neither of
+those results in a file name that is found, the unmodified program
+name is searched for using the directories specified in your
+\&\fB\s-1PATH\s0\fR environment variable.
+.Sp
+The compiler checks to see if the path provided by \fB\-B\fR
+refers to a directory, and if necessary it adds a directory
+separator character at the end of the path.
+.Sp
+\&\fB\-B\fR prefixes that effectively specify directory names also apply
+to libraries in the linker, because the compiler translates these
+options into \fB\-L\fR options for the linker.  They also apply to
+include files in the preprocessor, because the compiler translates these
+options into \fB\-isystem\fR options for the preprocessor.  In this case,
+the compiler appends \fBinclude\fR to the prefix.
+.Sp
+The runtime support file \fIlibgcc.a\fR can also be searched for using
+the \fB\-B\fR prefix, if needed.  If it is not found there, the two
+standard prefixes above are tried, and that is all.  The file is left
+out of the link if it is not found by those means.
+.Sp
+Another way to specify a prefix much like the \fB\-B\fR prefix is to use
+the environment variable \fB\s-1GCC_EXEC_PREFIX\s0\fR.
+.Sp
+As a special kludge, if the path provided by \fB\-B\fR is
+\&\fI[dir/]stage\fIN\fI/\fR, where \fIN\fR is a number in the range 0 to
+9, then it is replaced by \fI[dir/]include\fR.  This is to help
+with boot-strapping the compiler.
+.IP "\fB\-no\-canonical\-prefixes\fR" 4
+.IX Item "-no-canonical-prefixes"
+Do not expand any symbolic links, resolve references to \fB/../\fR
+or \fB/./\fR, or make the path absolute when generating a relative
+prefix.
+.IP "\fB\-\-sysroot=\fR\fIdir\fR" 4
+.IX Item "--sysroot=dir"
+Use \fIdir\fR as the logical root directory for headers and libraries.
+For example, if the compiler normally searches for headers in
+\&\fI/usr/include\fR and libraries in \fI/usr/lib\fR, it instead
+searches \fI\fIdir\fI/usr/include\fR and \fI\fIdir\fI/usr/lib\fR.
+.Sp
+If you use both this option and the \fB\-isysroot\fR option, then
+the \fB\-\-sysroot\fR option applies to libraries, but the
+\&\fB\-isysroot\fR option applies to header files.
+.Sp
+The \s-1GNU\s0 linker (beginning with version 2.16) has the necessary support
+for this option.  If your linker does not support this option, the
+header file aspect of \fB\-\-sysroot\fR still works, but the
+library aspect does not.
+.IP "\fB\-\-no\-sysroot\-suffix\fR" 4
+.IX Item "--no-sysroot-suffix"
+For some targets, a suffix is added to the root directory specified
+with \fB\-\-sysroot\fR, depending on the other options used, so that
+headers may for example be found in
+\&\fI\fIdir\fI/\fIsuffix\fI/usr/include\fR instead of
+\&\fI\fIdir\fI/usr/include\fR.  This option disables the addition of
+such a suffix.
+.SS "Options for Code Generation Conventions"
+.IX Subsection "Options for Code Generation Conventions"
+These machine-independent options control the interface conventions
+used in code generation.
+.PP
+Most of them have both positive and negative forms; the negative form
+of \fB\-ffoo\fR is \fB\-fno\-foo\fR.  In the table below, only
+one of the forms is listed\-\-\-the one that is not the default.  You
+can figure out the other form by either removing \fBno\-\fR or adding
+it.
+.IP "\fB\-fstack\-reuse=\fR\fIreuse-level\fR" 4
+.IX Item "-fstack-reuse=reuse-level"
+This option controls stack space reuse for user declared local/auto variables
+and compiler generated temporaries.  \fIreuse_level\fR can be \fBall\fR,
+\&\fBnamed_vars\fR, or \fBnone\fR. \fBall\fR enables stack reuse for all
+local variables and temporaries, \fBnamed_vars\fR enables the reuse only for
+user defined local variables with names, and \fBnone\fR disables stack reuse
+completely. The default value is \fBall\fR. The option is needed when the
+program extends the lifetime of a scoped local variable or a compiler generated
+temporary beyond the end point defined by the language.  When a lifetime of
+a variable ends, and if the variable lives in memory, the optimizing compiler
+has the freedom to reuse its stack space with other temporaries or scoped
+local variables whose live range does not overlap with it. Legacy code extending
+local lifetime is likely to break with the stack reuse optimization.
+.Sp
+For example,
+.Sp
+.Vb 3
+\&           int *p;
+\&           {
+\&             int local1;
+\&        
+\&             p = &local1;
+\&             local1 = 10;
+\&             ....
+\&           }
+\&           {
+\&              int local2;
+\&              local2 = 20;
+\&              ...
+\&           }
+\&        
+\&           if (*p == 10)  // out of scope use of local1
+\&             {
+\&        
+\&             }
+.Ve
+.Sp
+Another example:
+.Sp
+.Vb 6
+\&           struct A
+\&           {
+\&               A(int k) : i(k), j(k) { }
+\&               int i;
+\&               int j;
+\&           };
+\&        
+\&           A *ap;
+\&        
+\&           void foo(const A& ar)
+\&           {
+\&              ap = &ar;
+\&           }
+\&        
+\&           void bar()
+\&           {
+\&              foo(A(10)); // temp object\*(Aqs lifetime ends when foo returns
+\&        
+\&              {
+\&                A a(20);
+\&                ....
+\&              }
+\&              ap\->i+= 10;  // ap references out of scope temp whose space
+\&                           // is reused with a. What is the value of ap\->i?
+\&           }
+.Ve
+.Sp
+The lifetime of a compiler generated temporary is well defined by the \*(C+
+standard. When a lifetime of a temporary ends, and if the temporary lives
+in memory, the optimizing compiler has the freedom to reuse its stack
+space with other temporaries or scoped local variables whose live range
+does not overlap with it. However some of the legacy code relies on
+the behavior of older compilers in which temporaries' stack space is
+not reused, the aggressive stack reuse can lead to runtime errors. This
+option is used to control the temporary stack reuse optimization.
+.IP "\fB\-ftrapv\fR" 4
+.IX Item "-ftrapv"
+This option generates traps for signed overflow on addition, subtraction,
+multiplication operations.
+The options \fB\-ftrapv\fR and \fB\-fwrapv\fR override each other, so using
+\&\fB\-ftrapv\fR \fB\-fwrapv\fR on the command-line results in
+\&\fB\-fwrapv\fR being effective.  Note that only active options override, so
+using \fB\-ftrapv\fR \fB\-fwrapv\fR \fB\-fno\-wrapv\fR on the command-line
+results in \fB\-ftrapv\fR being effective.
+.IP "\fB\-fwrapv\fR" 4
+.IX Item "-fwrapv"
+This option instructs the compiler to assume that signed arithmetic
+overflow of addition, subtraction and multiplication wraps around
+using twos-complement representation.  This flag enables some optimizations
+and disables others.
+The options \fB\-ftrapv\fR and \fB\-fwrapv\fR override each other, so using
+\&\fB\-ftrapv\fR \fB\-fwrapv\fR on the command-line results in
+\&\fB\-fwrapv\fR being effective.  Note that only active options override, so
+using \fB\-ftrapv\fR \fB\-fwrapv\fR \fB\-fno\-wrapv\fR on the command-line
+results in \fB\-ftrapv\fR being effective.
+.IP "\fB\-fwrapv\-pointer\fR" 4
+.IX Item "-fwrapv-pointer"
+This option instructs the compiler to assume that pointer arithmetic
+overflow on addition and subtraction wraps around using twos-complement
+representation.  This flag disables some optimizations which assume
+pointer overflow is invalid.
+.IP "\fB\-fstrict\-overflow\fR" 4
+.IX Item "-fstrict-overflow"
+This option implies \fB\-fno\-wrapv\fR \fB\-fno\-wrapv\-pointer\fR and when
+negated implies \fB\-fwrapv\fR \fB\-fwrapv\-pointer\fR.
+.IP "\fB\-fexceptions\fR" 4
+.IX Item "-fexceptions"
+Enable exception handling.  Generates extra code needed to propagate
+exceptions.  For some targets, this implies \s-1GCC\s0 generates frame
+unwind information for all functions, which can produce significant data
+size overhead, although it does not affect execution.  If you do not
+specify this option, \s-1GCC\s0 enables it by default for languages like
+\&\*(C+ that normally require exception handling, and disables it for
+languages like C that do not normally require it.  However, you may need
+to enable this option when compiling C code that needs to interoperate
+properly with exception handlers written in \*(C+.  You may also wish to
+disable this option if you are compiling older \*(C+ programs that don't
+use exception handling.
+.IP "\fB\-fnon\-call\-exceptions\fR" 4
+.IX Item "-fnon-call-exceptions"
+Generate code that allows trapping instructions to throw exceptions.
+Note that this requires platform-specific runtime support that does
+not exist everywhere.  Moreover, it only allows \fItrapping\fR
+instructions to throw exceptions, i.e. memory references or floating-point
+instructions.  It does not allow exceptions to be thrown from
+arbitrary signal handlers such as \f(CW\*(C`SIGALRM\*(C'\fR.
+.IP "\fB\-fdelete\-dead\-exceptions\fR" 4
+.IX Item "-fdelete-dead-exceptions"
+Consider that instructions that may throw exceptions but don't otherwise
+contribute to the execution of the program can be optimized away.
+This option is enabled by default for the Ada front end, as permitted by
+the Ada language specification.
+Optimization passes that cause dead exceptions to be removed are enabled independently at different optimization levels.
+.IP "\fB\-funwind\-tables\fR" 4
+.IX Item "-funwind-tables"
+Similar to \fB\-fexceptions\fR, except that it just generates any needed
+static data, but does not affect the generated code in any other way.
+You normally do not need to enable this option; instead, a language processor
+that needs this handling enables it on your behalf.
+.IP "\fB\-fasynchronous\-unwind\-tables\fR" 4
+.IX Item "-fasynchronous-unwind-tables"
+Generate unwind table in \s-1DWARF\s0 format, if supported by target machine.  The
+table is exact at each instruction boundary, so it can be used for stack
+unwinding from asynchronous events (such as debugger or garbage collector).
+.IP "\fB\-fno\-gnu\-unique\fR" 4
+.IX Item "-fno-gnu-unique"
+On systems with recent \s-1GNU\s0 assembler and C library, the \*(C+ compiler
+uses the \f(CW\*(C`STB_GNU_UNIQUE\*(C'\fR binding to make sure that definitions
+of template static data members and static local variables in inline
+functions are unique even in the presence of \f(CW\*(C`RTLD_LOCAL\*(C'\fR; this
+is necessary to avoid problems with a library used by two different
+\&\f(CW\*(C`RTLD_LOCAL\*(C'\fR plugins depending on a definition in one of them and
+therefore disagreeing with the other one about the binding of the
+symbol.  But this causes \f(CW\*(C`dlclose\*(C'\fR to be ignored for affected
+DSOs; if your program relies on reinitialization of a \s-1DSO\s0 via
+\&\f(CW\*(C`dlclose\*(C'\fR and \f(CW\*(C`dlopen\*(C'\fR, you can use
+\&\fB\-fno\-gnu\-unique\fR.
+.IP "\fB\-fpcc\-struct\-return\fR" 4
+.IX Item "-fpcc-struct-return"
+Return \*(L"short\*(R" \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in memory like
+longer ones, rather than in registers.  This convention is less
+efficient, but it has the advantage of allowing intercallability between
+GCC-compiled files and files compiled with other compilers, particularly
+the Portable C Compiler (pcc).
+.Sp
+The precise convention for returning structures in memory depends
+on the target configuration macros.
+.Sp
+Short structures and unions are those whose size and alignment match
+that of some integer type.
+.Sp
+\&\fBWarning:\fR code compiled with the \fB\-fpcc\-struct\-return\fR
+switch is not binary compatible with code compiled with the
+\&\fB\-freg\-struct\-return\fR switch.
+Use it to conform to a non-default application binary interface.
+.IP "\fB\-freg\-struct\-return\fR" 4
+.IX Item "-freg-struct-return"
+Return \f(CW\*(C`struct\*(C'\fR and \f(CW\*(C`union\*(C'\fR values in registers when possible.
+This is more efficient for small structures than
+\&\fB\-fpcc\-struct\-return\fR.
+.Sp
+If you specify neither \fB\-fpcc\-struct\-return\fR nor
+\&\fB\-freg\-struct\-return\fR, \s-1GCC\s0 defaults to whichever convention is
+standard for the target.  If there is no standard convention, \s-1GCC\s0
+defaults to \fB\-fpcc\-struct\-return\fR, except on targets where \s-1GCC\s0 is
+the principal compiler.  In those cases, we can choose the standard, and
+we chose the more efficient register return alternative.
+.Sp
+\&\fBWarning:\fR code compiled with the \fB\-freg\-struct\-return\fR
+switch is not binary compatible with code compiled with the
+\&\fB\-fpcc\-struct\-return\fR switch.
+Use it to conform to a non-default application binary interface.
+.IP "\fB\-fshort\-enums\fR" 4
+.IX Item "-fshort-enums"
+Allocate to an \f(CW\*(C`enum\*(C'\fR type only as many bytes as it needs for the
+declared range of possible values.  Specifically, the \f(CW\*(C`enum\*(C'\fR type
+is equivalent to the smallest integer type that has enough room.
+.Sp
+\&\fBWarning:\fR the \fB\-fshort\-enums\fR switch causes \s-1GCC\s0 to generate
+code that is not binary compatible with code generated without that switch.
+Use it to conform to a non-default application binary interface.
+.IP "\fB\-fshort\-wchar\fR" 4
+.IX Item "-fshort-wchar"
+Override the underlying type for \f(CW\*(C`wchar_t\*(C'\fR to be \f(CW\*(C`short
+unsigned int\*(C'\fR instead of the default for the target.  This option is
+useful for building programs to run under \s-1WINE.\s0
+.Sp
+\&\fBWarning:\fR the \fB\-fshort\-wchar\fR switch causes \s-1GCC\s0 to generate
+code that is not binary compatible with code generated without that switch.
+Use it to conform to a non-default application binary interface.
+.IP "\fB\-fno\-common\fR" 4
+.IX Item "-fno-common"
+In C code, this option controls the placement of global variables 
+defined without an initializer, known as \fItentative definitions\fR 
+in the C standard.  Tentative definitions are distinct from declarations 
+of a variable with the \f(CW\*(C`extern\*(C'\fR keyword, which do not allocate storage.
+.Sp
+Unix C compilers have traditionally allocated storage for
+uninitialized global variables in a common block.  This allows the
+linker to resolve all tentative definitions of the same variable
+in different compilation units to the same object, or to a non-tentative
+definition.  
+This is the behavior specified by \fB\-fcommon\fR, and is the default for 
+\&\s-1GCC\s0 on most targets.  
+On the other hand, this behavior is not required by \s-1ISO
+C,\s0 and on some targets may carry a speed or code size penalty on
+variable references.
+.Sp
+The \fB\-fno\-common\fR option specifies that the compiler should instead
+place uninitialized global variables in the \s-1BSS\s0 section of the object file.
+This inhibits the merging of tentative definitions by the linker so
+you get a multiple-definition error if the same 
+variable is defined in more than one compilation unit.
+Compiling with \fB\-fno\-common\fR is useful on targets for which
+it provides better performance, or if you wish to verify that the
+program will work on other systems that always treat uninitialized
+variable definitions this way.
+.IP "\fB\-fno\-ident\fR" 4
+.IX Item "-fno-ident"
+Ignore the \f(CW\*(C`#ident\*(C'\fR directive.
+.IP "\fB\-finhibit\-size\-directive\fR" 4
+.IX Item "-finhibit-size-directive"
+Don't output a \f(CW\*(C`.size\*(C'\fR assembler directive, or anything else that
+would cause trouble if the function is split in the middle, and the
+two halves are placed at locations far apart in memory.  This option is
+used when compiling \fIcrtstuff.c\fR; you should not need to use it
+for anything else.
+.IP "\fB\-fverbose\-asm\fR" 4
+.IX Item "-fverbose-asm"
+Put extra commentary information in the generated assembly code to
+make it more readable.  This option is generally only of use to those
+who actually need to read the generated assembly code (perhaps while
+debugging the compiler itself).
+.Sp
+\&\fB\-fno\-verbose\-asm\fR, the default, causes the
+extra information to be omitted and is useful when comparing two assembler
+files.
+.Sp
+The added comments include:
+.RS 4
+.IP "*" 4
+information on the compiler version and command-line options,
+.IP "*" 4
+the source code lines associated with the assembly instructions,
+in the form \s-1FILENAME:LINENUMBER:CONTENT OF LINE,\s0
+.IP "*" 4
+hints on which high-level expressions correspond to
+the various assembly instruction operands.
+.RE
+.RS 4
+.Sp
+For example, given this C source file:
+.Sp
+.Vb 4
+\&        int test (int n)
+\&        {
+\&          int i;
+\&          int total = 0;
+\&        
+\&          for (i = 0; i < n; i++)
+\&            total += i * i;
+\&        
+\&          return total;
+\&        }
+.Ve
+.Sp
+compiling to (x86_64) assembly via \fB\-S\fR and emitting the result
+direct to stdout via \fB\-o\fR \fB\-\fR
+.Sp
+.Vb 1
+\&        gcc \-S test.c \-fverbose\-asm \-Os \-o \-
+.Ve
+.Sp
+gives output similar to this:
+.Sp
+.Vb 5
+\&                .file   "test.c"
+\&        # GNU C11 (GCC) version 7.0.0 20160809 (experimental) (x86_64\-pc\-linux\-gnu)
+\&          [...snip...]
+\&        # options passed:
+\&          [...snip...]
+\&        
+\&                .text
+\&                .globl  test
+\&                .type   test, @function
+\&        test:
+\&        .LFB0:
+\&                .cfi_startproc
+\&        # test.c:4:   int total = 0;
+\&                xorl    %eax, %eax      # <retval>
+\&        # test.c:6:   for (i = 0; i < n; i++)
+\&                xorl    %edx, %edx      # i
+\&        .L2:
+\&        # test.c:6:   for (i = 0; i < n; i++)
+\&                cmpl    %edi, %edx      # n, i
+\&                jge     .L5     #,
+\&        # test.c:7:     total += i * i;
+\&                movl    %edx, %ecx      # i, tmp92
+\&                imull   %edx, %ecx      # i, tmp92
+\&        # test.c:6:   for (i = 0; i < n; i++)
+\&                incl    %edx    # i
+\&        # test.c:7:     total += i * i;
+\&                addl    %ecx, %eax      # tmp92, <retval>
+\&                jmp     .L2     #
+\&        .L5:
+\&        # test.c:10: }
+\&                ret
+\&                .cfi_endproc
+\&        .LFE0:
+\&                .size   test, .\-test
+\&                .ident  "GCC: (GNU) 7.0.0 20160809 (experimental)"
+\&                .section        .note.GNU\-stack,"",@progbits
+.Ve
+.Sp
+The comments are intended for humans rather than machines and hence the
+precise format of the comments is subject to change.
+.RE
+.IP "\fB\-frecord\-gcc\-switches\fR" 4
+.IX Item "-frecord-gcc-switches"
+This switch causes the command line used to invoke the
+compiler to be recorded into the object file that is being created.
+This switch is only implemented on some targets and the exact format
+of the recording is target and binary file format dependent, but it
+usually takes the form of a section containing \s-1ASCII\s0 text.  This
+switch is related to the \fB\-fverbose\-asm\fR switch, but that
+switch only records information in the assembler output file as
+comments, so it never reaches the object file.
+See also \fB\-grecord\-gcc\-switches\fR for another
+way of storing compiler options into the object file.
+.IP "\fB\-fpic\fR" 4
+.IX Item "-fpic"
+Generate position-independent code (\s-1PIC\s0) suitable for use in a shared
+library, if supported for the target machine.  Such code accesses all
+constant addresses through a global offset table (\s-1GOT\s0).  The dynamic
+loader resolves the \s-1GOT\s0 entries when the program starts (the dynamic
+loader is not part of \s-1GCC\s0; it is part of the operating system).  If
+the \s-1GOT\s0 size for the linked executable exceeds a machine-specific
+maximum size, you get an error message from the linker indicating that
+\&\fB\-fpic\fR does not work; in that case, recompile with \fB\-fPIC\fR
+instead.  (These maximums are 8k on the \s-1SPARC,\s0 28k on AArch64 and 32k
+on the m68k and \s-1RS/6000.\s0  The x86 has no such limit.)
+.Sp
+Position-independent code requires special support, and therefore works
+only on certain machines.  For the x86, \s-1GCC\s0 supports \s-1PIC\s0 for System V
+but not for the Sun 386i.  Code generated for the \s-1IBM RS/6000\s0 is always
+position-independent.
+.Sp
+When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
+are defined to 1.
+.IP "\fB\-fPIC\fR" 4
+.IX Item "-fPIC"
+If supported for the target machine, emit position-independent code,
+suitable for dynamic linking and avoiding any limit on the size of the
+global offset table.  This option makes a difference on AArch64, m68k,
+PowerPC and \s-1SPARC.\s0
+.Sp
+Position-independent code requires special support, and therefore works
+only on certain machines.
+.Sp
+When this flag is set, the macros \f(CW\*(C`_\|_pic_\|_\*(C'\fR and \f(CW\*(C`_\|_PIC_\|_\*(C'\fR
+are defined to 2.
+.IP "\fB\-fpie\fR" 4
+.IX Item "-fpie"
+.PD 0
+.IP "\fB\-fPIE\fR" 4
+.IX Item "-fPIE"
+.PD
+These options are similar to \fB\-fpic\fR and \fB\-fPIC\fR, but the
+generated position-independent code can be only linked into executables.
+Usually these options are used to compile code that will be linked using
+the \fB\-pie\fR \s-1GCC\s0 option.
+.Sp
+\&\fB\-fpie\fR and \fB\-fPIE\fR both define the macros
+\&\f(CW\*(C`_\|_pie_\|_\*(C'\fR and \f(CW\*(C`_\|_PIE_\|_\*(C'\fR.  The macros have the value 1
+for \fB\-fpie\fR and 2 for \fB\-fPIE\fR.
+.IP "\fB\-fno\-plt\fR" 4
+.IX Item "-fno-plt"
+Do not use the \s-1PLT\s0 for external function calls in position-independent code.
+Instead, load the callee address at call sites from the \s-1GOT\s0 and branch to it.
+This leads to more efficient code by eliminating \s-1PLT\s0 stubs and exposing
+\&\s-1GOT\s0 loads to optimizations.  On architectures such as 32\-bit x86 where
+\&\s-1PLT\s0 stubs expect the \s-1GOT\s0 pointer in a specific register, this gives more
+register allocation freedom to the compiler.
+Lazy binding requires use of the \s-1PLT\s0; 
+with \fB\-fno\-plt\fR all external symbols are resolved at load time.
+.Sp
+Alternatively, the function attribute \f(CW\*(C`noplt\*(C'\fR can be used to avoid calls
+through the \s-1PLT\s0 for specific external functions.
+.Sp
+In position-dependent code, a few targets also convert calls to
+functions that are marked to not use the \s-1PLT\s0 to use the \s-1GOT\s0 instead.
+.IP "\fB\-fno\-jump\-tables\fR" 4
+.IX Item "-fno-jump-tables"
+Do not use jump tables for switch statements even where it would be
+more efficient than other code generation strategies.  This option is
+of use in conjunction with \fB\-fpic\fR or \fB\-fPIC\fR for
+building code that forms part of a dynamic linker and cannot
+reference the address of a jump table.  On some targets, jump tables
+do not require a \s-1GOT\s0 and this option is not needed.
+.IP "\fB\-ffixed\-\fR\fIreg\fR" 4
+.IX Item "-ffixed-reg"
+Treat the register named \fIreg\fR as a fixed register; generated code
+should never refer to it (except perhaps as a stack pointer, frame
+pointer or in some other fixed role).
+.Sp
+\&\fIreg\fR must be the name of a register.  The register names accepted
+are machine-specific and are defined in the \f(CW\*(C`REGISTER_NAMES\*(C'\fR
+macro in the machine description macro file.
+.Sp
+This flag does not have a negative form, because it specifies a
+three-way choice.
+.IP "\fB\-fcall\-used\-\fR\fIreg\fR" 4
+.IX Item "-fcall-used-reg"
+Treat the register named \fIreg\fR as an allocable register that is
+clobbered by function calls.  It may be allocated for temporaries or
+variables that do not live across a call.  Functions compiled this way
+do not save and restore the register \fIreg\fR.
+.Sp
+It is an error to use this flag with the frame pointer or stack pointer.
+Use of this flag for other registers that have fixed pervasive roles in
+the machine's execution model produces disastrous results.
+.Sp
+This flag does not have a negative form, because it specifies a
+three-way choice.
+.IP "\fB\-fcall\-saved\-\fR\fIreg\fR" 4
+.IX Item "-fcall-saved-reg"
+Treat the register named \fIreg\fR as an allocable register saved by
+functions.  It may be allocated even for temporaries or variables that
+live across a call.  Functions compiled this way save and restore
+the register \fIreg\fR if they use it.
+.Sp
+It is an error to use this flag with the frame pointer or stack pointer.
+Use of this flag for other registers that have fixed pervasive roles in
+the machine's execution model produces disastrous results.
+.Sp
+A different sort of disaster results from the use of this flag for
+a register in which function values may be returned.
+.Sp
+This flag does not have a negative form, because it specifies a
+three-way choice.
+.IP "\fB\-fpack\-struct[=\fR\fIn\fR\fB]\fR" 4
+.IX Item "-fpack-struct[=n]"
+Without a value specified, pack all structure members together without
+holes.  When a value is specified (which must be a small power of two), pack
+structure members according to this value, representing the maximum
+alignment (that is, objects with default alignment requirements larger than
+this are output potentially unaligned at the next fitting location.
+.Sp
+\&\fBWarning:\fR the \fB\-fpack\-struct\fR switch causes \s-1GCC\s0 to generate
+code that is not binary compatible with code generated without that switch.
+Additionally, it makes the code suboptimal.
+Use it to conform to a non-default application binary interface.
+.IP "\fB\-fleading\-underscore\fR" 4
+.IX Item "-fleading-underscore"
+This option and its counterpart, \fB\-fno\-leading\-underscore\fR, forcibly
+change the way C symbols are represented in the object file.  One use
+is to help link with legacy assembly code.
+.Sp
+\&\fBWarning:\fR the \fB\-fleading\-underscore\fR switch causes \s-1GCC\s0 to
+generate code that is not binary compatible with code generated without that
+switch.  Use it to conform to a non-default application binary interface.
+Not all targets provide complete support for this switch.
+.IP "\fB\-ftls\-model=\fR\fImodel\fR" 4
+.IX Item "-ftls-model=model"
+Alter the thread-local storage model to be used.
+The \fImodel\fR argument should be one of \fBglobal-dynamic\fR,
+\&\fBlocal-dynamic\fR, \fBinitial-exec\fR or \fBlocal-exec\fR.
+Note that the choice is subject to optimization: the compiler may use
+a more efficient model for symbols not visible outside of the translation
+unit, or if \fB\-fpic\fR is not given on the command line.
+.Sp
+The default without \fB\-fpic\fR is \fBinitial-exec\fR; with
+\&\fB\-fpic\fR the default is \fBglobal-dynamic\fR.
+.IP "\fB\-ftrampolines\fR" 4
+.IX Item "-ftrampolines"
+For targets that normally need trampolines for nested functions, always
+generate them instead of using descriptors.  Otherwise, for targets that
+do not need them, like for example HP-PA or \s-1IA\-64,\s0 do nothing.
+.Sp
+A trampoline is a small piece of code that is created at run time on the
+stack when the address of a nested function is taken, and is used to call
+the nested function indirectly.  Therefore, it requires the stack to be
+made executable in order for the program to work properly.
+.Sp
+\&\fB\-fno\-trampolines\fR is enabled by default on a language by language
+basis to let the compiler avoid generating them, if it computes that this
+is safe, and replace them with descriptors.  Descriptors are made up of data
+only, but the generated code must be prepared to deal with them.  As of this
+writing, \fB\-fno\-trampolines\fR is enabled by default only for Ada.
+.Sp
+Moreover, code compiled with \fB\-ftrampolines\fR and code compiled with
+\&\fB\-fno\-trampolines\fR are not binary compatible if nested functions are
+present.  This option must therefore be used on a program-wide basis and be
+manipulated with extreme care.
+.IP "\fB\-fvisibility=\fR[\fBdefault\fR|\fBinternal\fR|\fBhidden\fR|\fBprotected\fR]" 4
+.IX Item "-fvisibility=[default|internal|hidden|protected]"
+Set the default \s-1ELF\s0 image symbol visibility to the specified option\-\-\-all
+symbols are marked with this unless overridden within the code.
+Using this feature can very substantially improve linking and
+load times of shared object libraries, produce more optimized
+code, provide near-perfect \s-1API\s0 export and prevent symbol clashes.
+It is \fBstrongly\fR recommended that you use this in any shared objects
+you distribute.
+.Sp
+Despite the nomenclature, \fBdefault\fR always means public; i.e.,
+available to be linked against from outside the shared object.
+\&\fBprotected\fR and \fBinternal\fR are pretty useless in real-world
+usage so the only other commonly used option is \fBhidden\fR.
+The default if \fB\-fvisibility\fR isn't specified is
+\&\fBdefault\fR, i.e., make every symbol public.
+.Sp
+A good explanation of the benefits offered by ensuring \s-1ELF\s0
+symbols have the correct visibility is given by \*(L"How To Write
+Shared Libraries\*(R" by Ulrich Drepper (which can be found at
+<\fBhttps://www.akkadia.org/drepper/\fR>)\-\-\-however a superior
+solution made possible by this option to marking things hidden when
+the default is public is to make the default hidden and mark things
+public.  This is the norm with DLLs on Windows and with \fB\-fvisibility=hidden\fR
+and \f(CW\*(C`_\|_attribute_\|_ ((visibility("default")))\*(C'\fR instead of
+\&\f(CW\*(C`_\|_declspec(dllexport)\*(C'\fR you get almost identical semantics with
+identical syntax.  This is a great boon to those working with
+cross-platform projects.
+.Sp
+For those adding visibility support to existing code, you may find
+\&\f(CW\*(C`#pragma GCC visibility\*(C'\fR of use.  This works by you enclosing
+the declarations you wish to set visibility for with (for example)
+\&\f(CW\*(C`#pragma GCC visibility push(hidden)\*(C'\fR and
+\&\f(CW\*(C`#pragma GCC visibility pop\*(C'\fR.
+Bear in mind that symbol visibility should be viewed \fBas
+part of the \s-1API\s0 interface contract\fR and thus all new code should
+always specify visibility when it is not the default; i.e., declarations
+only for use within the local \s-1DSO\s0 should \fBalways\fR be marked explicitly
+as hidden as so to avoid \s-1PLT\s0 indirection overheads\-\-\-making this
+abundantly clear also aids readability and self-documentation of the code.
+Note that due to \s-1ISO \*(C+\s0 specification requirements, \f(CW\*(C`operator new\*(C'\fR and
+\&\f(CW\*(C`operator delete\*(C'\fR must always be of default visibility.
+.Sp
+Be aware that headers from outside your project, in particular system
+headers and headers from any other library you use, may not be
+expecting to be compiled with visibility other than the default.  You
+may need to explicitly say \f(CW\*(C`#pragma GCC visibility push(default)\*(C'\fR
+before including any such headers.
+.Sp
+\&\f(CW\*(C`extern\*(C'\fR declarations are not affected by \fB\-fvisibility\fR, so
+a lot of code can be recompiled with \fB\-fvisibility=hidden\fR with
+no modifications.  However, this means that calls to \f(CW\*(C`extern\*(C'\fR
+functions with no explicit visibility use the \s-1PLT,\s0 so it is more
+effective to use \f(CW\*(C`_\|_attribute ((visibility))\*(C'\fR and/or
+\&\f(CW\*(C`#pragma GCC visibility\*(C'\fR to tell the compiler which \f(CW\*(C`extern\*(C'\fR
+declarations should be treated as hidden.
+.Sp
+Note that \fB\-fvisibility\fR does affect \*(C+ vague linkage
+entities. This means that, for instance, an exception class that is
+be thrown between DSOs must be explicitly marked with default
+visibility so that the \fBtype_info\fR nodes are unified between
+the DSOs.
+.Sp
+An overview of these techniques, their benefits and how to use them
+is at <\fBhttp://gcc.gnu.org/wiki/Visibility\fR>.
+.IP "\fB\-fstrict\-volatile\-bitfields\fR" 4
+.IX Item "-fstrict-volatile-bitfields"
+This option should be used if accesses to volatile bit-fields (or other
+structure fields, although the compiler usually honors those types
+anyway) should use a single access of the width of the
+field's type, aligned to a natural alignment if possible.  For
+example, targets with memory-mapped peripheral registers might require
+all such accesses to be 16 bits wide; with this flag you can
+declare all peripheral bit-fields as \f(CW\*(C`unsigned short\*(C'\fR (assuming short
+is 16 bits on these targets) to force \s-1GCC\s0 to use 16\-bit accesses
+instead of, perhaps, a more efficient 32\-bit access.
+.Sp
+If this option is disabled, the compiler uses the most efficient
+instruction.  In the previous example, that might be a 32\-bit load
+instruction, even though that accesses bytes that do not contain
+any portion of the bit-field, or memory-mapped registers unrelated to
+the one being updated.
+.Sp
+In some cases, such as when the \f(CW\*(C`packed\*(C'\fR attribute is applied to a 
+structure field, it may not be possible to access the field with a single
+read or write that is correctly aligned for the target machine.  In this
+case \s-1GCC\s0 falls back to generating multiple accesses rather than code that 
+will fault or truncate the result at run time.
+.Sp
+Note:  Due to restrictions of the C/\*(C+11 memory model, write accesses are
+not allowed to touch non bit-field members.  It is therefore recommended
+to define all bits of the field's type as bit-field members.
+.Sp
+The default value of this option is determined by the application binary
+interface for the target processor.
+.IP "\fB\-fsync\-libcalls\fR" 4
+.IX Item "-fsync-libcalls"
+This option controls whether any out-of-line instance of the \f(CW\*(C`_\|_sync\*(C'\fR
+family of functions may be used to implement the \*(C+11 \f(CW\*(C`_\|_atomic\*(C'\fR
+family of functions.
+.Sp
+The default value of this option is enabled, thus the only useful form
+of the option is \fB\-fno\-sync\-libcalls\fR.  This option is used in
+the implementation of the \fIlibatomic\fR runtime library.
+.SS "\s-1GCC\s0 Developer Options"
+.IX Subsection "GCC Developer Options"
+This section describes command-line options that are primarily of
+interest to \s-1GCC\s0 developers, including options to support compiler
+testing and investigation of compiler bugs and compile-time
+performance problems.  This includes options that produce debug dumps
+at various points in the compilation; that print statistics such as
+memory use and execution time; and that print information about \s-1GCC\s0's
+configuration, such as where it searches for libraries.  You should
+rarely need to use any of these options for ordinary compilation and
+linking tasks.
+.PP
+Many developer options that cause \s-1GCC\s0 to dump output to a file take an
+optional \fB=\fR\fIfilename\fR suffix. You can specify \fBstdout\fR
+or \fB\-\fR to dump to standard output, and \fBstderr\fR for standard
+error.
+.PP
+If \fB=\fR\fIfilename\fR is omitted, a default dump file name is
+constructed by concatenating the base dump file name, a pass number,
+phase letter, and pass name.  The base dump file name is the name of
+output file produced by the compiler if explicitly specified and not
+an executable; otherwise it is the source file name.
+The pass number is determined by the order passes are registered with
+the compiler's pass manager. 
+This is generally the same as the order of execution, but passes
+registered by plugins, target-specific passes, or passes that are
+otherwise registered late are numbered higher than the pass named
+\&\fBfinal\fR, even if they are executed earlier.  The phase letter is
+one of \fBi\fR (inter-procedural analysis), \fBl\fR
+(language-specific), \fBr\fR (\s-1RTL\s0), or \fBt\fR (tree). 
+The files are created in the directory of the output file.
+.IP "\fB\-d\fR\fIletters\fR" 4
+.IX Item "-dletters"
+.PD 0
+.IP "\fB\-fdump\-rtl\-\fR\fIpass\fR" 4
+.IX Item "-fdump-rtl-pass"
+.IP "\fB\-fdump\-rtl\-\fR\fIpass\fR\fB=\fR\fIfilename\fR" 4
+.IX Item "-fdump-rtl-pass=filename"
+.PD
+Says to make debugging dumps during compilation at times specified by
+\&\fIletters\fR.  This is used for debugging the RTL-based passes of the
+compiler.
+.Sp
+Some \fB\-d\fR\fIletters\fR switches have different meaning when
+\&\fB\-E\fR is used for preprocessing.
+.Sp
+Debug dumps can be enabled with a \fB\-fdump\-rtl\fR switch or some
+\&\fB\-d\fR option \fIletters\fR.  Here are the possible
+letters for use in \fIpass\fR and \fIletters\fR, and their meanings:
+.RS 4
+.IP "\fB\-fdump\-rtl\-alignments\fR" 4
+.IX Item "-fdump-rtl-alignments"
+Dump after branch alignments have been computed.
+.IP "\fB\-fdump\-rtl\-asmcons\fR" 4
+.IX Item "-fdump-rtl-asmcons"
+Dump after fixing rtl statements that have unsatisfied in/out constraints.
+.IP "\fB\-fdump\-rtl\-auto_inc_dec\fR" 4
+.IX Item "-fdump-rtl-auto_inc_dec"
+Dump after auto-inc-dec discovery.  This pass is only run on
+architectures that have auto inc or auto dec instructions.
+.IP "\fB\-fdump\-rtl\-barriers\fR" 4
+.IX Item "-fdump-rtl-barriers"
+Dump after cleaning up the barrier instructions.
+.IP "\fB\-fdump\-rtl\-bbpart\fR" 4
+.IX Item "-fdump-rtl-bbpart"
+Dump after partitioning hot and cold basic blocks.
+.IP "\fB\-fdump\-rtl\-bbro\fR" 4
+.IX Item "-fdump-rtl-bbro"
+Dump after block reordering.
+.IP "\fB\-fdump\-rtl\-btl1\fR" 4
+.IX Item "-fdump-rtl-btl1"
+.PD 0
+.IP "\fB\-fdump\-rtl\-btl2\fR" 4
+.IX Item "-fdump-rtl-btl2"
+.PD
+\&\fB\-fdump\-rtl\-btl1\fR and \fB\-fdump\-rtl\-btl2\fR enable dumping
+after the two branch
+target load optimization passes.
+.IP "\fB\-fdump\-rtl\-bypass\fR" 4
+.IX Item "-fdump-rtl-bypass"
+Dump after jump bypassing and control flow optimizations.
+.IP "\fB\-fdump\-rtl\-combine\fR" 4
+.IX Item "-fdump-rtl-combine"
+Dump after the \s-1RTL\s0 instruction combination pass.
+.IP "\fB\-fdump\-rtl\-compgotos\fR" 4
+.IX Item "-fdump-rtl-compgotos"
+Dump after duplicating the computed gotos.
+.IP "\fB\-fdump\-rtl\-ce1\fR" 4
+.IX Item "-fdump-rtl-ce1"
+.PD 0
+.IP "\fB\-fdump\-rtl\-ce2\fR" 4
+.IX Item "-fdump-rtl-ce2"
+.IP "\fB\-fdump\-rtl\-ce3\fR" 4
+.IX Item "-fdump-rtl-ce3"
+.PD
+\&\fB\-fdump\-rtl\-ce1\fR, \fB\-fdump\-rtl\-ce2\fR, and
+\&\fB\-fdump\-rtl\-ce3\fR enable dumping after the three
+if conversion passes.
+.IP "\fB\-fdump\-rtl\-cprop_hardreg\fR" 4
+.IX Item "-fdump-rtl-cprop_hardreg"
+Dump after hard register copy propagation.
+.IP "\fB\-fdump\-rtl\-csa\fR" 4
+.IX Item "-fdump-rtl-csa"
+Dump after combining stack adjustments.
+.IP "\fB\-fdump\-rtl\-cse1\fR" 4
+.IX Item "-fdump-rtl-cse1"
+.PD 0
+.IP "\fB\-fdump\-rtl\-cse2\fR" 4
+.IX Item "-fdump-rtl-cse2"
+.PD
+\&\fB\-fdump\-rtl\-cse1\fR and \fB\-fdump\-rtl\-cse2\fR enable dumping after
+the two common subexpression elimination passes.
+.IP "\fB\-fdump\-rtl\-dce\fR" 4
+.IX Item "-fdump-rtl-dce"
+Dump after the standalone dead code elimination passes.
+.IP "\fB\-fdump\-rtl\-dbr\fR" 4
+.IX Item "-fdump-rtl-dbr"
+Dump after delayed branch scheduling.
+.IP "\fB\-fdump\-rtl\-dce1\fR" 4
+.IX Item "-fdump-rtl-dce1"
+.PD 0
+.IP "\fB\-fdump\-rtl\-dce2\fR" 4
+.IX Item "-fdump-rtl-dce2"
+.PD
+\&\fB\-fdump\-rtl\-dce1\fR and \fB\-fdump\-rtl\-dce2\fR enable dumping after
+the two dead store elimination passes.
+.IP "\fB\-fdump\-rtl\-eh\fR" 4
+.IX Item "-fdump-rtl-eh"
+Dump after finalization of \s-1EH\s0 handling code.
+.IP "\fB\-fdump\-rtl\-eh_ranges\fR" 4
+.IX Item "-fdump-rtl-eh_ranges"
+Dump after conversion of \s-1EH\s0 handling range regions.
+.IP "\fB\-fdump\-rtl\-expand\fR" 4
+.IX Item "-fdump-rtl-expand"
+Dump after \s-1RTL\s0 generation.
+.IP "\fB\-fdump\-rtl\-fwprop1\fR" 4
+.IX Item "-fdump-rtl-fwprop1"
+.PD 0
+.IP "\fB\-fdump\-rtl\-fwprop2\fR" 4
+.IX Item "-fdump-rtl-fwprop2"
+.PD
+\&\fB\-fdump\-rtl\-fwprop1\fR and \fB\-fdump\-rtl\-fwprop2\fR enable
+dumping after the two forward propagation passes.
+.IP "\fB\-fdump\-rtl\-gcse1\fR" 4
+.IX Item "-fdump-rtl-gcse1"
+.PD 0
+.IP "\fB\-fdump\-rtl\-gcse2\fR" 4
+.IX Item "-fdump-rtl-gcse2"
+.PD
+\&\fB\-fdump\-rtl\-gcse1\fR and \fB\-fdump\-rtl\-gcse2\fR enable dumping
+after global common subexpression elimination.
+.IP "\fB\-fdump\-rtl\-init\-regs\fR" 4
+.IX Item "-fdump-rtl-init-regs"
+Dump after the initialization of the registers.
+.IP "\fB\-fdump\-rtl\-initvals\fR" 4
+.IX Item "-fdump-rtl-initvals"
+Dump after the computation of the initial value sets.
+.IP "\fB\-fdump\-rtl\-into_cfglayout\fR" 4
+.IX Item "-fdump-rtl-into_cfglayout"
+Dump after converting to cfglayout mode.
+.IP "\fB\-fdump\-rtl\-ira\fR" 4
+.IX Item "-fdump-rtl-ira"
+Dump after iterated register allocation.
+.IP "\fB\-fdump\-rtl\-jump\fR" 4
+.IX Item "-fdump-rtl-jump"
+Dump after the second jump optimization.
+.IP "\fB\-fdump\-rtl\-loop2\fR" 4
+.IX Item "-fdump-rtl-loop2"
+\&\fB\-fdump\-rtl\-loop2\fR enables dumping after the rtl
+loop optimization passes.
+.IP "\fB\-fdump\-rtl\-mach\fR" 4
+.IX Item "-fdump-rtl-mach"
+Dump after performing the machine dependent reorganization pass, if that
+pass exists.
+.IP "\fB\-fdump\-rtl\-mode_sw\fR" 4
+.IX Item "-fdump-rtl-mode_sw"
+Dump after removing redundant mode switches.
+.IP "\fB\-fdump\-rtl\-rnreg\fR" 4
+.IX Item "-fdump-rtl-rnreg"
+Dump after register renumbering.
+.IP "\fB\-fdump\-rtl\-outof_cfglayout\fR" 4
+.IX Item "-fdump-rtl-outof_cfglayout"
+Dump after converting from cfglayout mode.
+.IP "\fB\-fdump\-rtl\-peephole2\fR" 4
+.IX Item "-fdump-rtl-peephole2"
+Dump after the peephole pass.
+.IP "\fB\-fdump\-rtl\-postreload\fR" 4
+.IX Item "-fdump-rtl-postreload"
+Dump after post-reload optimizations.
+.IP "\fB\-fdump\-rtl\-pro_and_epilogue\fR" 4
+.IX Item "-fdump-rtl-pro_and_epilogue"
+Dump after generating the function prologues and epilogues.
+.IP "\fB\-fdump\-rtl\-sched1\fR" 4
+.IX Item "-fdump-rtl-sched1"
+.PD 0
+.IP "\fB\-fdump\-rtl\-sched2\fR" 4
+.IX Item "-fdump-rtl-sched2"
+.PD
+\&\fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR enable dumping
+after the basic block scheduling passes.
+.IP "\fB\-fdump\-rtl\-ree\fR" 4
+.IX Item "-fdump-rtl-ree"
+Dump after sign/zero extension elimination.
+.IP "\fB\-fdump\-rtl\-seqabstr\fR" 4
+.IX Item "-fdump-rtl-seqabstr"
+Dump after common sequence discovery.
+.IP "\fB\-fdump\-rtl\-shorten\fR" 4
+.IX Item "-fdump-rtl-shorten"
+Dump after shortening branches.
+.IP "\fB\-fdump\-rtl\-sibling\fR" 4
+.IX Item "-fdump-rtl-sibling"
+Dump after sibling call optimizations.
+.IP "\fB\-fdump\-rtl\-split1\fR" 4
+.IX Item "-fdump-rtl-split1"
+.PD 0
+.IP "\fB\-fdump\-rtl\-split2\fR" 4
+.IX Item "-fdump-rtl-split2"
+.IP "\fB\-fdump\-rtl\-split3\fR" 4
+.IX Item "-fdump-rtl-split3"
+.IP "\fB\-fdump\-rtl\-split4\fR" 4
+.IX Item "-fdump-rtl-split4"
+.IP "\fB\-fdump\-rtl\-split5\fR" 4
+.IX Item "-fdump-rtl-split5"
+.PD
+These options enable dumping after five rounds of
+instruction splitting.
+.IP "\fB\-fdump\-rtl\-sms\fR" 4
+.IX Item "-fdump-rtl-sms"
+Dump after modulo scheduling.  This pass is only run on some
+architectures.
+.IP "\fB\-fdump\-rtl\-stack\fR" 4
+.IX Item "-fdump-rtl-stack"
+Dump after conversion from \s-1GCC\s0's \*(L"flat register file\*(R" registers to the
+x87's stack-like registers.  This pass is only run on x86 variants.
+.IP "\fB\-fdump\-rtl\-subreg1\fR" 4
+.IX Item "-fdump-rtl-subreg1"
+.PD 0
+.IP "\fB\-fdump\-rtl\-subreg2\fR" 4
+.IX Item "-fdump-rtl-subreg2"
+.PD
+\&\fB\-fdump\-rtl\-subreg1\fR and \fB\-fdump\-rtl\-subreg2\fR enable dumping after
+the two subreg expansion passes.
+.IP "\fB\-fdump\-rtl\-unshare\fR" 4
+.IX Item "-fdump-rtl-unshare"
+Dump after all rtl has been unshared.
+.IP "\fB\-fdump\-rtl\-vartrack\fR" 4
+.IX Item "-fdump-rtl-vartrack"
+Dump after variable tracking.
+.IP "\fB\-fdump\-rtl\-vregs\fR" 4
+.IX Item "-fdump-rtl-vregs"
+Dump after converting virtual registers to hard registers.
+.IP "\fB\-fdump\-rtl\-web\fR" 4
+.IX Item "-fdump-rtl-web"
+Dump after live range splitting.
+.IP "\fB\-fdump\-rtl\-regclass\fR" 4
+.IX Item "-fdump-rtl-regclass"
+.PD 0
+.IP "\fB\-fdump\-rtl\-subregs_of_mode_init\fR" 4
+.IX Item "-fdump-rtl-subregs_of_mode_init"
+.IP "\fB\-fdump\-rtl\-subregs_of_mode_finish\fR" 4
+.IX Item "-fdump-rtl-subregs_of_mode_finish"
+.IP "\fB\-fdump\-rtl\-dfinit\fR" 4
+.IX Item "-fdump-rtl-dfinit"
+.IP "\fB\-fdump\-rtl\-dfinish\fR" 4
+.IX Item "-fdump-rtl-dfinish"
+.PD
+These dumps are defined but always produce empty files.
+.IP "\fB\-da\fR" 4
+.IX Item "-da"
+.PD 0
+.IP "\fB\-fdump\-rtl\-all\fR" 4
+.IX Item "-fdump-rtl-all"
+.PD
+Produce all the dumps listed above.
+.IP "\fB\-dA\fR" 4
+.IX Item "-dA"
+Annotate the assembler output with miscellaneous debugging information.
+.IP "\fB\-dD\fR" 4
+.IX Item "-dD"
+Dump all macro definitions, at the end of preprocessing, in addition to
+normal output.
+.IP "\fB\-dH\fR" 4
+.IX Item "-dH"
+Produce a core dump whenever an error occurs.
+.IP "\fB\-dp\fR" 4
+.IX Item "-dp"
+Annotate the assembler output with a comment indicating which
+pattern and alternative is used.  The length and cost of each instruction are
+also printed.
+.IP "\fB\-dP\fR" 4
+.IX Item "-dP"
+Dump the \s-1RTL\s0 in the assembler output as a comment before each instruction.
+Also turns on \fB\-dp\fR annotation.
+.IP "\fB\-dx\fR" 4
+.IX Item "-dx"
+Just generate \s-1RTL\s0 for a function instead of compiling it.  Usually used
+with \fB\-fdump\-rtl\-expand\fR.
+.RE
+.RS 4
+.RE
+.IP "\fB\-fdump\-debug\fR" 4
+.IX Item "-fdump-debug"
+Dump debugging information generated during the debug
+generation phase.
+.IP "\fB\-fdump\-earlydebug\fR" 4
+.IX Item "-fdump-earlydebug"
+Dump debugging information generated during the early debug
+generation phase.
+.IP "\fB\-fdump\-noaddr\fR" 4
+.IX Item "-fdump-noaddr"
+When doing debugging dumps, suppress address output.  This makes it more
+feasible to use diff on debugging dumps for compiler invocations with
+different compiler binaries and/or different
+text / bss / data / heap / stack / dso start locations.
+.IP "\fB\-freport\-bug\fR" 4
+.IX Item "-freport-bug"
+Collect and dump debug information into a temporary file if an
+internal compiler error (\s-1ICE\s0) occurs.
+.IP "\fB\-fdump\-unnumbered\fR" 4
+.IX Item "-fdump-unnumbered"
+When doing debugging dumps, suppress instruction numbers and address output.
+This makes it more feasible to use diff on debugging dumps for compiler
+invocations with different options, in particular with and without
+\&\fB\-g\fR.
+.IP "\fB\-fdump\-unnumbered\-links\fR" 4
+.IX Item "-fdump-unnumbered-links"
+When doing debugging dumps (see \fB\-d\fR option above), suppress
+instruction numbers for the links to the previous and next instructions
+in a sequence.
+.IP "\fB\-fdump\-ipa\-\fR\fIswitch\fR" 4
+.IX Item "-fdump-ipa-switch"
+.PD 0
+.IP "\fB\-fdump\-ipa\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR" 4
+.IX Item "-fdump-ipa-switch-options"
+.PD
+Control the dumping at various stages of inter-procedural analysis
+language tree to a file.  The file name is generated by appending a
+switch specific suffix to the source file name, and the file is created
+in the same directory as the output file.  The following dumps are
+possible:
+.RS 4
+.IP "\fBall\fR" 4
+.IX Item "all"
+Enables all inter-procedural analysis dumps.
+.IP "\fBcgraph\fR" 4
+.IX Item "cgraph"
+Dumps information about call-graph optimization, unused function removal,
+and inlining decisions.
+.IP "\fBinline\fR" 4
+.IX Item "inline"
+Dump after function inlining.
+.RE
+.RS 4
+.Sp
+Additionally, the options \fB\-optimized\fR, \fB\-missed\fR,
+\&\fB\-note\fR, and \fB\-all\fR can be provided, with the same meaning
+as for \fB\-fopt\-info\fR, defaulting to \fB\-optimized\fR.
+.Sp
+For example, \fB\-fdump\-ipa\-inline\-optimized\-missed\fR will emit
+information on callsites that were inlined, along with callsites
+that were not inlined.
+.Sp
+By default, the dump will contain messages about successful
+optimizations (equivalent to \fB\-optimized\fR) together with
+low-level details about the analysis.
+.RE
+.IP "\fB\-fdump\-lang\-all\fR" 4
+.IX Item "-fdump-lang-all"
+.PD 0
+.IP "\fB\-fdump\-lang\-\fR\fIswitch\fR" 4
+.IX Item "-fdump-lang-switch"
+.IP "\fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR" 4
+.IX Item "-fdump-lang-switch-options"
+.IP "\fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR" 4
+.IX Item "-fdump-lang-switch-options=filename"
+.PD
+Control the dumping of language-specific information.  The \fIoptions\fR
+and \fIfilename\fR portions behave as described in the
+\&\fB\-fdump\-tree\fR option.  The following \fIswitch\fR values are
+accepted:
+.RS 4
+.IP "\fBall\fR" 4
+.IX Item "all"
+Enable all language-specific dumps.
+.IP "\fBclass\fR" 4
+.IX Item "class"
+Dump class hierarchy information.  Virtual table information is emitted
+unless '\fBslim\fR' is specified.  This option is applicable to \*(C+ only.
+.IP "\fBraw\fR" 4
+.IX Item "raw"
+Dump the raw internal tree data.  This option is applicable to \*(C+ only.
+.RE
+.RS 4
+.RE
+.IP "\fB\-fdump\-passes\fR" 4
+.IX Item "-fdump-passes"
+Print on \fIstderr\fR the list of optimization passes that are turned
+on and off by the current command-line options.
+.IP "\fB\-fdump\-statistics\-\fR\fIoption\fR" 4
+.IX Item "-fdump-statistics-option"
+Enable and control dumping of pass statistics in a separate file.  The
+file name is generated by appending a suffix ending in
+\&\fB.statistics\fR to the source file name, and the file is created in
+the same directory as the output file.  If the \fB\-\fR\fIoption\fR
+form is used, \fB\-stats\fR causes counters to be summed over the
+whole compilation unit while \fB\-details\fR dumps every event as
+the passes generate them.  The default with no option is to sum
+counters for each function compiled.
+.IP "\fB\-fdump\-tree\-all\fR" 4
+.IX Item "-fdump-tree-all"
+.PD 0
+.IP "\fB\-fdump\-tree\-\fR\fIswitch\fR" 4
+.IX Item "-fdump-tree-switch"
+.IP "\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR" 4
+.IX Item "-fdump-tree-switch-options"
+.IP "\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR" 4
+.IX Item "-fdump-tree-switch-options=filename"
+.PD
+Control the dumping at various stages of processing the intermediate
+language tree to a file.  If the \fB\-\fR\fIoptions\fR
+form is used, \fIoptions\fR is a list of \fB\-\fR separated options
+which control the details of the dump.  Not all options are applicable
+to all dumps; those that are not meaningful are ignored.  The
+following options are available
+.RS 4
+.IP "\fBaddress\fR" 4
+.IX Item "address"
+Print the address of each node.  Usually this is not meaningful as it
+changes according to the environment and source file.  Its primary use
+is for tying up a dump file with a debug environment.
+.IP "\fBasmname\fR" 4
+.IX Item "asmname"
+If \f(CW\*(C`DECL_ASSEMBLER_NAME\*(C'\fR has been set for a given decl, use that
+in the dump instead of \f(CW\*(C`DECL_NAME\*(C'\fR.  Its primary use is ease of
+use working backward from mangled names in the assembly file.
+.IP "\fBslim\fR" 4
+.IX Item "slim"
+When dumping front-end intermediate representations, inhibit dumping
+of members of a scope or body of a function merely because that scope
+has been reached.  Only dump such items when they are directly reachable
+by some other path.
+.Sp
+When dumping pretty-printed trees, this option inhibits dumping the
+bodies of control structures.
+.Sp
+When dumping \s-1RTL,\s0 print the \s-1RTL\s0 in slim (condensed) form instead of
+the default LISP-like representation.
+.IP "\fBraw\fR" 4
+.IX Item "raw"
+Print a raw representation of the tree.  By default, trees are
+pretty-printed into a C\-like representation.
+.IP "\fBdetails\fR" 4
+.IX Item "details"
+Enable more detailed dumps (not honored by every dump option). Also
+include information from the optimization passes.
+.IP "\fBstats\fR" 4
+.IX Item "stats"
+Enable dumping various statistics about the pass (not honored by every dump
+option).
+.IP "\fBblocks\fR" 4
+.IX Item "blocks"
+Enable showing basic block boundaries (disabled in raw dumps).
+.IP "\fBgraph\fR" 4
+.IX Item "graph"
+For each of the other indicated dump files (\fB\-fdump\-rtl\-\fR\fIpass\fR),
+dump a representation of the control flow graph suitable for viewing with
+GraphViz to \fI\fIfile\fI.\fIpassid\fI.\fIpass\fI.dot\fR.  Each function in
+the file is pretty-printed as a subgraph, so that GraphViz can render them
+all in a single plot.
+.Sp
+This option currently only works for \s-1RTL\s0 dumps, and the \s-1RTL\s0 is always
+dumped in slim form.
+.IP "\fBvops\fR" 4
+.IX Item "vops"
+Enable showing virtual operands for every statement.
+.IP "\fBlineno\fR" 4
+.IX Item "lineno"
+Enable showing line numbers for statements.
+.IP "\fBuid\fR" 4
+.IX Item "uid"
+Enable showing the unique \s-1ID\s0 (\f(CW\*(C`DECL_UID\*(C'\fR) for each variable.
+.IP "\fBverbose\fR" 4
+.IX Item "verbose"
+Enable showing the tree dump for each statement.
+.IP "\fBeh\fR" 4
+.IX Item "eh"
+Enable showing the \s-1EH\s0 region number holding each statement.
+.IP "\fBscev\fR" 4
+.IX Item "scev"
+Enable showing scalar evolution analysis details.
+.IP "\fBoptimized\fR" 4
+.IX Item "optimized"
+Enable showing optimization information (only available in certain
+passes).
+.IP "\fBmissed\fR" 4
+.IX Item "missed"
+Enable showing missed optimization information (only available in certain
+passes).
+.IP "\fBnote\fR" 4
+.IX Item "note"
+Enable other detailed optimization information (only available in
+certain passes).
+.IP "\fBall\fR" 4
+.IX Item "all"
+Turn on all options, except \fBraw\fR, \fBslim\fR, \fBverbose\fR
+and \fBlineno\fR.
+.IP "\fBoptall\fR" 4
+.IX Item "optall"
+Turn on all optimization options, i.e., \fBoptimized\fR,
+\&\fBmissed\fR, and \fBnote\fR.
+.RE
+.RS 4
+.Sp
+To determine what tree dumps are available or find the dump for a pass
+of interest follow the steps below.
+.IP "1." 4
+.IX Item "1."
+Invoke \s-1GCC\s0 with \fB\-fdump\-passes\fR and in the \fIstderr\fR output
+look for a code that corresponds to the pass you are interested in.
+For example, the codes \f(CW\*(C`tree\-evrp\*(C'\fR, \f(CW\*(C`tree\-vrp1\*(C'\fR, and
+\&\f(CW\*(C`tree\-vrp2\*(C'\fR correspond to the three Value Range Propagation passes.
+The number at the end distinguishes distinct invocations of the same pass.
+.IP "2." 4
+.IX Item "2."
+To enable the creation of the dump file, append the pass code to
+the \fB\-fdump\-\fR option prefix and invoke \s-1GCC\s0 with it.  For example,
+to enable the dump from the Early Value Range Propagation pass, invoke
+\&\s-1GCC\s0 with the \fB\-fdump\-tree\-evrp\fR option.  Optionally, you may
+specify the name of the dump file.  If you don't specify one, \s-1GCC\s0
+creates as described below.
+.IP "3." 4
+.IX Item "3."
+Find the pass dump in a file whose name is composed of three components
+separated by a period: the name of the source file \s-1GCC\s0 was invoked to
+compile, a numeric suffix indicating the pass number followed by the
+letter \fBt\fR for tree passes (and the letter \fBr\fR for \s-1RTL\s0 passes),
+and finally the pass code.  For example, the Early \s-1VRP\s0 pass dump might
+be in a file named \fImyfile.c.038t.evrp\fR in the current working
+directory.  Note that the numeric codes are not stable and may change
+from one version of \s-1GCC\s0 to another.
+.RE
+.RS 4
+.RE
+.IP "\fB\-fopt\-info\fR" 4
+.IX Item "-fopt-info"
+.PD 0
+.IP "\fB\-fopt\-info\-\fR\fIoptions\fR" 4
+.IX Item "-fopt-info-options"
+.IP "\fB\-fopt\-info\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR" 4
+.IX Item "-fopt-info-options=filename"
+.PD
+Controls optimization dumps from various optimization passes. If the
+\&\fB\-\fR\fIoptions\fR form is used, \fIoptions\fR is a list of
+\&\fB\-\fR separated option keywords to select the dump details and
+optimizations.
+.Sp
+The \fIoptions\fR can be divided into three groups:
+.RS 4
+.IP "1." 4
+.IX Item "1."
+options describing what kinds of messages should be emitted,
+.IP "2." 4
+.IX Item "2."
+options describing the verbosity of the dump, and
+.IP "3." 4
+.IX Item "3."
+options describing which optimizations should be included.
+.RE
+.RS 4
+.Sp
+The options from each group can be freely mixed as they are
+non-overlapping. However, in case of any conflicts,
+the later options override the earlier options on the command
+line.
+.Sp
+The following options control which kinds of messages should be emitted:
+.IP "\fBoptimized\fR" 4
+.IX Item "optimized"
+Print information when an optimization is successfully applied. It is
+up to a pass to decide which information is relevant. For example, the
+vectorizer passes print the source location of loops which are
+successfully vectorized.
+.IP "\fBmissed\fR" 4
+.IX Item "missed"
+Print information about missed optimizations. Individual passes
+control which information to include in the output.
+.IP "\fBnote\fR" 4
+.IX Item "note"
+Print verbose information about optimizations, such as certain
+transformations, more detailed messages about decisions etc.
+.IP "\fBall\fR" 4
+.IX Item "all"
+Print detailed optimization information. This includes
+\&\fBoptimized\fR, \fBmissed\fR, and \fBnote\fR.
+.RE
+.RS 4
+.Sp
+The following option controls the dump verbosity:
+.IP "\fBinternals\fR" 4
+.IX Item "internals"
+By default, only \*(L"high-level\*(R" messages are emitted. This option enables
+additional, more detailed, messages, which are likely to only be of interest
+to \s-1GCC\s0 developers.
+.RE
+.RS 4
+.Sp
+One or more of the following option keywords can be used to describe a
+group of optimizations:
+.IP "\fBipa\fR" 4
+.IX Item "ipa"
+Enable dumps from all interprocedural optimizations.
+.IP "\fBloop\fR" 4
+.IX Item "loop"
+Enable dumps from all loop optimizations.
+.IP "\fBinline\fR" 4
+.IX Item "inline"
+Enable dumps from all inlining optimizations.
+.IP "\fBomp\fR" 4
+.IX Item "omp"
+Enable dumps from all \s-1OMP\s0 (Offloading and Multi Processing) optimizations.
+.IP "\fBvec\fR" 4
+.IX Item "vec"
+Enable dumps from all vectorization optimizations.
+.IP "\fBoptall\fR" 4
+.IX Item "optall"
+Enable dumps from all optimizations. This is a superset of
+the optimization groups listed above.
+.RE
+.RS 4
+.Sp
+If \fIoptions\fR is
+omitted, it defaults to \fBoptimized-optall\fR, which means to dump messages
+about successful optimizations from all the passes, omitting messages
+that are treated as \*(L"internals\*(R".
+.Sp
+If the \fIfilename\fR is provided, then the dumps from all the
+applicable optimizations are concatenated into the \fIfilename\fR.
+Otherwise the dump is output onto \fIstderr\fR. Though multiple
+\&\fB\-fopt\-info\fR options are accepted, only one of them can include
+a \fIfilename\fR. If other filenames are provided then all but the
+first such option are ignored.
+.Sp
+Note that the output \fIfilename\fR is overwritten
+in case of multiple translation units. If a combined output from
+multiple translation units is desired, \fIstderr\fR should be used
+instead.
+.Sp
+In the following example, the optimization info is output to
+\&\fIstderr\fR:
+.Sp
+.Vb 1
+\&        gcc \-O3 \-fopt\-info
+.Ve
+.Sp
+This example:
+.Sp
+.Vb 1
+\&        gcc \-O3 \-fopt\-info\-missed=missed.all
+.Ve
+.Sp
+outputs missed optimization report from all the passes into
+\&\fImissed.all\fR, and this one:
+.Sp
+.Vb 1
+\&        gcc \-O2 \-ftree\-vectorize \-fopt\-info\-vec\-missed
+.Ve
+.Sp
+prints information about missed optimization opportunities from
+vectorization passes on \fIstderr\fR.  
+Note that \fB\-fopt\-info\-vec\-missed\fR is equivalent to 
+\&\fB\-fopt\-info\-missed\-vec\fR.  The order of the optimization group
+names and message types listed after \fB\-fopt\-info\fR does not matter.
+.Sp
+As another example,
+.Sp
+.Vb 1
+\&        gcc \-O3 \-fopt\-info\-inline\-optimized\-missed=inline.txt
+.Ve
+.Sp
+outputs information about missed optimizations as well as
+optimized locations from all the inlining passes into
+\&\fIinline.txt\fR.
+.Sp
+Finally, consider:
+.Sp
+.Vb 1
+\&        gcc \-fopt\-info\-vec\-missed=vec.miss \-fopt\-info\-loop\-optimized=loop.opt
+.Ve
+.Sp
+Here the two output filenames \fIvec.miss\fR and \fIloop.opt\fR are
+in conflict since only one output file is allowed. In this case, only
+the first option takes effect and the subsequent options are
+ignored. Thus only \fIvec.miss\fR is produced which contains
+dumps from the vectorizer about missed opportunities.
+.RE
+.IP "\fB\-fsave\-optimization\-record\fR" 4
+.IX Item "-fsave-optimization-record"
+Write a \s-1SRCFILE\s0.opt\-record.json.gz file detailing what optimizations
+were performed, for those optimizations that support \fB\-fopt\-info\fR.
+.Sp
+This option is experimental and the format of the data within the
+compressed \s-1JSON\s0 file is subject to change.
+.Sp
+It is roughly equivalent to a machine-readable version of
+\&\fB\-fopt\-info\-all\fR, as a collection of messages with source file,
+line number and column number, with the following additional data for
+each message:
+.RS 4
+.IP "*" 4
+the execution count of the code being optimized, along with metadata about
+whether this was from actual profile data, or just an estimate, allowing
+consumers to prioritize messages by code hotness,
+.IP "*" 4
+the function name of the code being optimized, where applicable,
+.IP "*" 4
+the \*(L"inlining chain\*(R" for the code being optimized, so that when
+a function is inlined into several different places (which might
+themselves be inlined), the reader can distinguish between the copies,
+.IP "*" 4
+objects identifying those parts of the message that refer to expressions,
+statements or symbol-table nodes, which of these categories they are, and,
+when available, their source code location,
+.IP "*" 4
+the \s-1GCC\s0 pass that emitted the message, and
+.IP "*" 4
+the location in \s-1GCC\s0's own code from which the message was emitted
+.RE
+.RS 4
+.Sp
+Additionally, some messages are logically nested within other
+messages, reflecting implementation details of the optimization
+passes.
+.RE
+.IP "\fB\-fsched\-verbose=\fR\fIn\fR" 4
+.IX Item "-fsched-verbose=n"
+On targets that use instruction scheduling, this option controls the
+amount of debugging output the scheduler prints to the dump files.
+.Sp
+For \fIn\fR greater than zero, \fB\-fsched\-verbose\fR outputs the
+same information as \fB\-fdump\-rtl\-sched1\fR and \fB\-fdump\-rtl\-sched2\fR.
+For \fIn\fR greater than one, it also output basic block probabilities,
+detailed ready list information and unit/insn info.  For \fIn\fR greater
+than two, it includes \s-1RTL\s0 at abort point, control-flow and regions info.
+And for \fIn\fR over four, \fB\-fsched\-verbose\fR also includes
+dependence info.
+.IP "\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR" 4
+.IX Item "-fenable-kind-pass"
+.PD 0
+.IP "\fB\-fdisable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
+.IX Item "-fdisable-kind-pass=range-list"
+.PD
+This is a set of options that are used to explicitly disable/enable
+optimization passes.  These options are intended for use for debugging \s-1GCC.\s0
+Compiler users should use regular options for enabling/disabling
+passes instead.
+.RS 4
+.IP "\fB\-fdisable\-ipa\-\fR\fIpass\fR" 4
+.IX Item "-fdisable-ipa-pass"
+Disable \s-1IPA\s0 pass \fIpass\fR. \fIpass\fR is the pass name.  If the same pass is
+statically invoked in the compiler multiple times, the pass name should be
+appended with a sequential number starting from 1.
+.IP "\fB\-fdisable\-rtl\-\fR\fIpass\fR" 4
+.IX Item "-fdisable-rtl-pass"
+.PD 0
+.IP "\fB\-fdisable\-rtl\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
+.IX Item "-fdisable-rtl-pass=range-list"
+.PD
+Disable \s-1RTL\s0 pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
+statically invoked in the compiler multiple times, the pass name should be
+appended with a sequential number starting from 1.  \fIrange-list\fR is a 
+comma-separated list of function ranges or assembler names.  Each range is a number
+pair separated by a colon.  The range is inclusive in both ends.  If the range
+is trivial, the number pair can be simplified as a single number.  If the
+function's call graph node's \fIuid\fR falls within one of the specified ranges,
+the \fIpass\fR is disabled for that function.  The \fIuid\fR is shown in the
+function header of a dump file, and the pass names can be dumped by using
+option \fB\-fdump\-passes\fR.
+.IP "\fB\-fdisable\-tree\-\fR\fIpass\fR" 4
+.IX Item "-fdisable-tree-pass"
+.PD 0
+.IP "\fB\-fdisable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
+.IX Item "-fdisable-tree-pass=range-list"
+.PD
+Disable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description of
+option arguments.
+.IP "\fB\-fenable\-ipa\-\fR\fIpass\fR" 4
+.IX Item "-fenable-ipa-pass"
+Enable \s-1IPA\s0 pass \fIpass\fR.  \fIpass\fR is the pass name.  If the same pass is
+statically invoked in the compiler multiple times, the pass name should be
+appended with a sequential number starting from 1.
+.IP "\fB\-fenable\-rtl\-\fR\fIpass\fR" 4
+.IX Item "-fenable-rtl-pass"
+.PD 0
+.IP "\fB\-fenable\-rtl\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
+.IX Item "-fenable-rtl-pass=range-list"
+.PD
+Enable \s-1RTL\s0 pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for option argument
+description and examples.
+.IP "\fB\-fenable\-tree\-\fR\fIpass\fR" 4
+.IX Item "-fenable-tree-pass"
+.PD 0
+.IP "\fB\-fenable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange-list\fR" 4
+.IX Item "-fenable-tree-pass=range-list"
+.PD
+Enable tree pass \fIpass\fR.  See \fB\-fdisable\-rtl\fR for the description
+of option arguments.
+.RE
+.RS 4
+.Sp
+Here are some examples showing uses of these options.
+.Sp
+.Vb 10
+\&        # disable ccp1 for all functions
+\&           \-fdisable\-tree\-ccp1
+\&        # disable complete unroll for function whose cgraph node uid is 1
+\&           \-fenable\-tree\-cunroll=1
+\&        # disable gcse2 for functions at the following ranges [1,1],
+\&        # [300,400], and [400,1000]
+\&        # disable gcse2 for functions foo and foo2
+\&           \-fdisable\-rtl\-gcse2=foo,foo2
+\&        # disable early inlining
+\&           \-fdisable\-tree\-einline
+\&        # disable ipa inlining
+\&           \-fdisable\-ipa\-inline
+\&        # enable tree full unroll
+\&           \-fenable\-tree\-unroll
+.Ve
+.RE
+.IP "\fB\-fchecking\fR" 4
+.IX Item "-fchecking"
+.PD 0
+.IP "\fB\-fchecking=\fR\fIn\fR" 4
+.IX Item "-fchecking=n"
+.PD
+Enable internal consistency checking.  The default depends on
+the compiler configuration.  \fB\-fchecking=2\fR enables further
+internal consistency checking that might affect code generation.
+.IP "\fB\-frandom\-seed=\fR\fIstring\fR" 4
+.IX Item "-frandom-seed=string"
+This option provides a seed that \s-1GCC\s0 uses in place of
+random numbers in generating certain symbol names
+that have to be different in every compiled file.  It is also used to
+place unique stamps in coverage data files and the object files that
+produce them.  You can use the \fB\-frandom\-seed\fR option to produce
+reproducibly identical object files.
+.Sp
+The \fIstring\fR can either be a number (decimal, octal or hex) or an
+arbitrary string (in which case it's converted to a number by
+computing \s-1CRC32\s0).
+.Sp
+The \fIstring\fR should be different for every file you compile.
+.IP "\fB\-save\-temps\fR" 4
+.IX Item "-save-temps"
+.PD 0
+.IP "\fB\-save\-temps=cwd\fR" 4
+.IX Item "-save-temps=cwd"
+.PD
+Store the usual \*(L"temporary\*(R" intermediate files permanently; place them
+in the current directory and name them based on the source file.  Thus,
+compiling \fIfoo.c\fR with \fB\-c \-save\-temps\fR produces files
+\&\fIfoo.i\fR and \fIfoo.s\fR, as well as \fIfoo.o\fR.  This creates a
+preprocessed \fIfoo.i\fR output file even though the compiler now
+normally uses an integrated preprocessor.
+.Sp
+When used in combination with the \fB\-x\fR command-line option,
+\&\fB\-save\-temps\fR is sensible enough to avoid over writing an
+input source file with the same extension as an intermediate file.
+The corresponding intermediate file may be obtained by renaming the
+source file before using \fB\-save\-temps\fR.
+.Sp
+If you invoke \s-1GCC\s0 in parallel, compiling several different source
+files that share a common base name in different subdirectories or the
+same source file compiled for multiple output destinations, it is
+likely that the different parallel compilers will interfere with each
+other, and overwrite the temporary files.  For instance:
+.Sp
+.Vb 2
+\&        gcc \-save\-temps \-o outdir1/foo.o indir1/foo.c&
+\&        gcc \-save\-temps \-o outdir2/foo.o indir2/foo.c&
+.Ve
+.Sp
+may result in \fIfoo.i\fR and \fIfoo.o\fR being written to
+simultaneously by both compilers.
+.IP "\fB\-save\-temps=obj\fR" 4
+.IX Item "-save-temps=obj"
+Store the usual \*(L"temporary\*(R" intermediate files permanently.  If the
+\&\fB\-o\fR option is used, the temporary files are based on the
+object file.  If the \fB\-o\fR option is not used, the
+\&\fB\-save\-temps=obj\fR switch behaves like \fB\-save\-temps\fR.
+.Sp
+For example:
+.Sp
+.Vb 3
+\&        gcc \-save\-temps=obj \-c foo.c
+\&        gcc \-save\-temps=obj \-c bar.c \-o dir/xbar.o
+\&        gcc \-save\-temps=obj foobar.c \-o dir2/yfoobar
+.Ve
+.Sp
+creates \fIfoo.i\fR, \fIfoo.s\fR, \fIdir/xbar.i\fR,
+\&\fIdir/xbar.s\fR, \fIdir2/yfoobar.i\fR, \fIdir2/yfoobar.s\fR, and
+\&\fIdir2/yfoobar.o\fR.
+.IP "\fB\-time\fR[\fB=\fR\fIfile\fR]" 4
+.IX Item "-time[=file]"
+Report the \s-1CPU\s0 time taken by each subprocess in the compilation
+sequence.  For C source files, this is the compiler proper and assembler
+(plus the linker if linking is done).
+.Sp
+Without the specification of an output file, the output looks like this:
+.Sp
+.Vb 2
+\&        # cc1 0.12 0.01
+\&        # as 0.00 0.01
+.Ve
+.Sp
+The first number on each line is the \*(L"user time\*(R", that is time spent
+executing the program itself.  The second number is \*(L"system time\*(R",
+time spent executing operating system routines on behalf of the program.
+Both numbers are in seconds.
+.Sp
+With the specification of an output file, the output is appended to the
+named file, and it looks like this:
+.Sp
+.Vb 2
+\&        0.12 0.01 cc1 <options>
+\&        0.00 0.01 as <options>
+.Ve
+.Sp
+The \*(L"user time\*(R" and the \*(L"system time\*(R" are moved before the program
+name, and the options passed to the program are displayed, so that one
+can later tell what file was being compiled, and with which options.
+.IP "\fB\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR]" 4
+.IX Item "-fdump-final-insns[=file]"
+Dump the final internal representation (\s-1RTL\s0) to \fIfile\fR.  If the
+optional argument is omitted (or if \fIfile\fR is \f(CW\*(C`.\*(C'\fR), the name
+of the dump file is determined by appending \f(CW\*(C`.gkd\*(C'\fR to the
+compilation output file name.
+.IP "\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR]" 4
+.IX Item "-fcompare-debug[=opts]"
+If no error occurs during compilation, run the compiler a second time,
+adding \fIopts\fR and \fB\-fcompare\-debug\-second\fR to the arguments
+passed to the second compilation.  Dump the final internal
+representation in both compilations, and print an error if they differ.
+.Sp
+If the equal sign is omitted, the default \fB\-gtoggle\fR is used.
+.Sp
+The environment variable \fB\s-1GCC_COMPARE_DEBUG\s0\fR, if defined, non-empty
+and nonzero, implicitly enables \fB\-fcompare\-debug\fR.  If
+\&\fB\s-1GCC_COMPARE_DEBUG\s0\fR is defined to a string starting with a dash,
+then it is used for \fIopts\fR, otherwise the default \fB\-gtoggle\fR
+is used.
+.Sp
+\&\fB\-fcompare\-debug=\fR, with the equal sign but without \fIopts\fR,
+is equivalent to \fB\-fno\-compare\-debug\fR, which disables the dumping
+of the final representation and the second compilation, preventing even
+\&\fB\s-1GCC_COMPARE_DEBUG\s0\fR from taking effect.
+.Sp
+To verify full coverage during \fB\-fcompare\-debug\fR testing, set
+\&\fB\s-1GCC_COMPARE_DEBUG\s0\fR to say \fB\-fcompare\-debug\-not\-overridden\fR,
+which \s-1GCC\s0 rejects as an invalid option in any actual compilation
+(rather than preprocessing, assembly or linking).  To get just a
+warning, setting \fB\s-1GCC_COMPARE_DEBUG\s0\fR to \fB\-w%n\-fcompare\-debug
+not overridden\fR will do.
+.IP "\fB\-fcompare\-debug\-second\fR" 4
+.IX Item "-fcompare-debug-second"
+This option is implicitly passed to the compiler for the second
+compilation requested by \fB\-fcompare\-debug\fR, along with options to
+silence warnings, and omitting other options that would cause the compiler
+to produce output to files or to standard output as a side effect.  Dump
+files and preserved temporary files are renamed so as to contain the
+\&\f(CW\*(C`.gk\*(C'\fR additional extension during the second compilation, to avoid
+overwriting those generated by the first.
+.Sp
+When this option is passed to the compiler driver, it causes the
+\&\fIfirst\fR compilation to be skipped, which makes it useful for little
+other than debugging the compiler proper.
+.IP "\fB\-gtoggle\fR" 4
+.IX Item "-gtoggle"
+Turn off generation of debug info, if leaving out this option
+generates it, or turn it on at level 2 otherwise.  The position of this
+argument in the command line does not matter; it takes effect after all
+other options are processed, and it does so only once, no matter how
+many times it is given.  This is mainly intended to be used with
+\&\fB\-fcompare\-debug\fR.
+.IP "\fB\-fvar\-tracking\-assignments\-toggle\fR" 4
+.IX Item "-fvar-tracking-assignments-toggle"
+Toggle \fB\-fvar\-tracking\-assignments\fR, in the same way that
+\&\fB\-gtoggle\fR toggles \fB\-g\fR.
+.IP "\fB\-Q\fR" 4
+.IX Item "-Q"
+Makes the compiler print out each function name as it is compiled, and
+print some statistics about each pass when it finishes.
+.IP "\fB\-ftime\-report\fR" 4
+.IX Item "-ftime-report"
+Makes the compiler print some statistics about the time consumed by each
+pass when it finishes.
+.IP "\fB\-ftime\-report\-details\fR" 4
+.IX Item "-ftime-report-details"
+Record the time consumed by infrastructure parts separately for each pass.
+.IP "\fB\-fira\-verbose=\fR\fIn\fR" 4
+.IX Item "-fira-verbose=n"
+Control the verbosity of the dump file for the integrated register allocator.
+The default value is 5.  If the value \fIn\fR is greater or equal to 10,
+the dump output is sent to stderr using the same format as \fIn\fR minus 10.
+.IP "\fB\-flto\-report\fR" 4
+.IX Item "-flto-report"
+Prints a report with internal details on the workings of the link-time
+optimizer.  The contents of this report vary from version to version.
+It is meant to be useful to \s-1GCC\s0 developers when processing object
+files in \s-1LTO\s0 mode (via \fB\-flto\fR).
+.Sp
+Disabled by default.
+.IP "\fB\-flto\-report\-wpa\fR" 4
+.IX Item "-flto-report-wpa"
+Like \fB\-flto\-report\fR, but only print for the \s-1WPA\s0 phase of Link
+Time Optimization.
+.IP "\fB\-fmem\-report\fR" 4
+.IX Item "-fmem-report"
+Makes the compiler print some statistics about permanent memory
+allocation when it finishes.
+.IP "\fB\-fmem\-report\-wpa\fR" 4
+.IX Item "-fmem-report-wpa"
+Makes the compiler print some statistics about permanent memory
+allocation for the \s-1WPA\s0 phase only.
+.IP "\fB\-fpre\-ipa\-mem\-report\fR" 4
+.IX Item "-fpre-ipa-mem-report"
+.PD 0
+.IP "\fB\-fpost\-ipa\-mem\-report\fR" 4
+.IX Item "-fpost-ipa-mem-report"
+.PD
+Makes the compiler print some statistics about permanent memory
+allocation before or after interprocedural optimization.
+.IP "\fB\-fprofile\-report\fR" 4
+.IX Item "-fprofile-report"
+Makes the compiler print some statistics about consistency of the
+(estimated) profile and effect of individual passes.
+.IP "\fB\-fstack\-usage\fR" 4
+.IX Item "-fstack-usage"
+Makes the compiler output stack usage information for the program, on a
+per-function basis.  The filename for the dump is made by appending
+\&\fI.su\fR to the \fIauxname\fR.  \fIauxname\fR is generated from the name of
+the output file, if explicitly specified and it is not an executable,
+otherwise it is the basename of the source file.  An entry is made up
+of three fields:
+.RS 4
+.IP "*" 4
+The name of the function.
+.IP "*" 4
+A number of bytes.
+.IP "*" 4
+One or more qualifiers: \f(CW\*(C`static\*(C'\fR, \f(CW\*(C`dynamic\*(C'\fR, \f(CW\*(C`bounded\*(C'\fR.
+.RE
+.RS 4
+.Sp
+The qualifier \f(CW\*(C`static\*(C'\fR means that the function manipulates the stack
+statically: a fixed number of bytes are allocated for the frame on function
+entry and released on function exit; no stack adjustments are otherwise made
+in the function.  The second field is this fixed number of bytes.
+.Sp
+The qualifier \f(CW\*(C`dynamic\*(C'\fR means that the function manipulates the stack
+dynamically: in addition to the static allocation described above, stack
+adjustments are made in the body of the function, for example to push/pop
+arguments around function calls.  If the qualifier \f(CW\*(C`bounded\*(C'\fR is also
+present, the amount of these adjustments is bounded at compile time and
+the second field is an upper bound of the total amount of stack used by
+the function.  If it is not present, the amount of these adjustments is
+not bounded at compile time and the second field only represents the
+bounded part.
+.RE
+.IP "\fB\-fstats\fR" 4
+.IX Item "-fstats"
+Emit statistics about front-end processing at the end of the compilation.
+This option is supported only by the \*(C+ front end, and
+the information is generally only useful to the G++ development team.
+.IP "\fB\-fdbg\-cnt\-list\fR" 4
+.IX Item "-fdbg-cnt-list"
+Print the name and the counter upper bound for all debug counters.
+.IP "\fB\-fdbg\-cnt=\fR\fIcounter-value-list\fR" 4
+.IX Item "-fdbg-cnt=counter-value-list"
+Set the internal debug counter lower and upper bound.  \fIcounter-value-list\fR
+is a comma-separated list of \fIname\fR:\fIlower_bound\fR:\fIupper_bound\fR
+tuples which sets the lower and the upper bound of each debug
+counter \fIname\fR.  The \fIlower_bound\fR is optional and is zero
+initialized if not set.
+All debug counters have the initial upper bound of \f(CW\*(C`UINT_MAX\*(C'\fR;
+thus \f(CW\*(C`dbg_cnt\*(C'\fR returns true always unless the upper bound
+is set by this option.
+For example, with \fB\-fdbg\-cnt=dce:2:4,tail_call:10\fR,
+\&\f(CW\*(C`dbg_cnt(dce)\*(C'\fR returns true only for third and fourth invocation.
+For \f(CW\*(C`dbg_cnt(tail_call)\*(C'\fR true is returned for first 10 invocations.
+.IP "\fB\-print\-file\-name=\fR\fIlibrary\fR" 4
+.IX Item "-print-file-name=library"
+Print the full absolute name of the library file \fIlibrary\fR that
+would be used when linking\-\-\-and don't do anything else.  With this
+option, \s-1GCC\s0 does not compile or link anything; it just prints the
+file name.
+.IP "\fB\-print\-multi\-directory\fR" 4
+.IX Item "-print-multi-directory"
+Print the directory name corresponding to the multilib selected by any
+other switches present in the command line.  This directory is supposed
+to exist in \fB\s-1GCC_EXEC_PREFIX\s0\fR.
+.IP "\fB\-print\-multi\-lib\fR" 4
+.IX Item "-print-multi-lib"
+Print the mapping from multilib directory names to compiler switches
+that enable them.  The directory name is separated from the switches by
+\&\fB;\fR, and each switch starts with an \fB@\fR instead of the
+\&\fB\-\fR, without spaces between multiple switches.  This is supposed to
+ease shell processing.
+.IP "\fB\-print\-multi\-os\-directory\fR" 4
+.IX Item "-print-multi-os-directory"
+Print the path to \s-1OS\s0 libraries for the selected
+multilib, relative to some \fIlib\fR subdirectory.  If \s-1OS\s0 libraries are
+present in the \fIlib\fR subdirectory and no multilibs are used, this is
+usually just \fI.\fR, if \s-1OS\s0 libraries are present in \fIlib\fIsuffix\fI\fR
+sibling directories this prints e.g. \fI../lib64\fR, \fI../lib\fR or
+\&\fI../lib32\fR, or if \s-1OS\s0 libraries are present in \fIlib/\fIsubdir\fI\fR
+subdirectories it prints e.g. \fIamd64\fR, \fIsparcv9\fR or \fIev6\fR.
+.IP "\fB\-print\-multiarch\fR" 4
+.IX Item "-print-multiarch"
+Print the path to \s-1OS\s0 libraries for the selected multiarch,
+relative to some \fIlib\fR subdirectory.
+.IP "\fB\-print\-prog\-name=\fR\fIprogram\fR" 4
+.IX Item "-print-prog-name=program"
+Like \fB\-print\-file\-name\fR, but searches for a program such as \fBcpp\fR.
+.IP "\fB\-print\-libgcc\-file\-name\fR" 4
+.IX Item "-print-libgcc-file-name"
+Same as \fB\-print\-file\-name=libgcc.a\fR.
+.Sp
+This is useful when you use \fB\-nostdlib\fR or \fB\-nodefaultlibs\fR
+but you do want to link with \fIlibgcc.a\fR.  You can do:
+.Sp
+.Vb 1
+\&        gcc \-nostdlib <files>... \`gcc \-print\-libgcc\-file\-name\`
+.Ve
+.IP "\fB\-print\-search\-dirs\fR" 4
+.IX Item "-print-search-dirs"
+Print the name of the configured installation directory and a list of
+program and library directories \fBgcc\fR searches\-\-\-and don't do anything else.
+.Sp
+This is useful when \fBgcc\fR prints the error message
+\&\fBinstallation problem, cannot exec cpp0: No such file or directory\fR.
+To resolve this you either need to put \fIcpp0\fR and the other compiler
+components where \fBgcc\fR expects to find them, or you can set the environment
+variable \fB\s-1GCC_EXEC_PREFIX\s0\fR to the directory where you installed them.
+Don't forget the trailing \fB/\fR.
+.IP "\fB\-print\-sysroot\fR" 4
+.IX Item "-print-sysroot"
+Print the target sysroot directory that is used during
+compilation.  This is the target sysroot specified either at configure
+time or using the \fB\-\-sysroot\fR option, possibly with an extra
+suffix that depends on compilation options.  If no target sysroot is
+specified, the option prints nothing.
+.IP "\fB\-print\-sysroot\-headers\-suffix\fR" 4
+.IX Item "-print-sysroot-headers-suffix"
+Print the suffix added to the target sysroot when searching for
+headers, or give an error if the compiler is not configured with such
+a suffix\-\-\-and don't do anything else.
+.IP "\fB\-dumpmachine\fR" 4
+.IX Item "-dumpmachine"
+Print the compiler's target machine (for example,
+\&\fBi686\-pc\-linux\-gnu\fR)\-\-\-and don't do anything else.
+.IP "\fB\-dumpversion\fR" 4
+.IX Item "-dumpversion"
+Print the compiler version (for example, \f(CW3.0\fR, \f(CW6.3.0\fR or \f(CW7\fR)\-\-\-and don't do
+anything else.  This is the compiler version used in filesystem paths and
+specs. Depending on how the compiler has been configured it can be just
+a single number (major version), two numbers separated by a dot (major and
+minor version) or three numbers separated by dots (major, minor and patchlevel
+version).
+.IP "\fB\-dumpfullversion\fR" 4
+.IX Item "-dumpfullversion"
+Print the full compiler version\-\-\-and don't do anything else. The output is
+always three numbers separated by dots, major, minor and patchlevel version.
+.IP "\fB\-dumpspecs\fR" 4
+.IX Item "-dumpspecs"
+Print the compiler's built-in specs\-\-\-and don't do anything else.  (This
+is used when \s-1GCC\s0 itself is being built.)
+.SS "Machine-Dependent Options"
+.IX Subsection "Machine-Dependent Options"
+Each target machine supported by \s-1GCC\s0 can have its own options\-\-\-for
+example, to allow you to compile for a particular processor variant or
+\&\s-1ABI,\s0 or to control optimizations specific to that machine.  By
+convention, the names of machine-specific options start with
+\&\fB\-m\fR.
+.PP
+Some configurations of the compiler also support additional target-specific
+options, usually for compatibility with other compilers on the same
+platform.
+.PP
+\fIAArch64 Options\fR
+.IX Subsection "AArch64 Options"
+.PP
+These options are defined for AArch64 implementations:
+.IP "\fB\-mabi=\fR\fIname\fR" 4
+.IX Item "-mabi=name"
+Generate code for the specified data model.  Permissible values
+are \fBilp32\fR for SysV-like data model where int, long int and pointers
+are 32 bits, and \fBlp64\fR for SysV-like data model where int is 32 bits,
+but long int and pointers are 64 bits.
+.Sp
+The default depends on the specific target configuration.  Note that
+the \s-1LP64\s0 and \s-1ILP32\s0 ABIs are not link-compatible; you must compile your
+entire program with the same \s-1ABI,\s0 and link with a compatible set of libraries.
+.IP "\fB\-mbig\-endian\fR" 4
+.IX Item "-mbig-endian"
+Generate big-endian code.  This is the default when \s-1GCC\s0 is configured for an
+\&\fBaarch64_be\-*\-*\fR target.
+.IP "\fB\-mgeneral\-regs\-only\fR" 4
+.IX Item "-mgeneral-regs-only"
+Generate code which uses only the general-purpose registers.  This will prevent
+the compiler from using floating-point and Advanced \s-1SIMD\s0 registers but will not
+impose any restrictions on the assembler.
+.IP "\fB\-mlittle\-endian\fR" 4
+.IX Item "-mlittle-endian"
+Generate little-endian code.  This is the default when \s-1GCC\s0 is configured for an
+\&\fBaarch64\-*\-*\fR but not an \fBaarch64_be\-*\-*\fR target.
+.IP "\fB\-mcmodel=tiny\fR" 4
+.IX Item "-mcmodel=tiny"
+Generate code for the tiny code model.  The program and its statically defined
+symbols must be within 1MB of each other.  Programs can be statically or
+dynamically linked.
+.IP "\fB\-mcmodel=small\fR" 4
+.IX Item "-mcmodel=small"
+Generate code for the small code model.  The program and its statically defined
+symbols must be within 4GB of each other.  Programs can be statically or
+dynamically linked.  This is the default code model.
+.IP "\fB\-mcmodel=large\fR" 4
+.IX Item "-mcmodel=large"
+Generate code for the large code model.  This makes no assumptions about
+addresses and sizes of sections.  Programs can be statically linked only.
+.IP "\fB\-mstrict\-align\fR" 4
+.IX Item "-mstrict-align"
+.PD 0
+.IP "\fB\-mno\-strict\-align\fR" 4
+.IX Item "-mno-strict-align"
+.PD
+Avoid or allow generating memory accesses that may not be aligned on a natural
+object boundary as described in the architecture specification.
+.IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
+.IX Item "-momit-leaf-frame-pointer"
+.PD 0
+.IP "\fB\-mno\-omit\-leaf\-frame\-pointer\fR" 4
+.IX Item "-mno-omit-leaf-frame-pointer"
+.PD
+Omit or keep the frame pointer in leaf functions.  The former behavior is the
+default.
+.IP "\fB\-mstack\-protector\-guard=\fR\fIguard\fR" 4
+.IX Item "-mstack-protector-guard=guard"
+.PD 0
+.IP "\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR" 4
+.IX Item "-mstack-protector-guard-reg=reg"
+.IP "\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR" 4
+.IX Item "-mstack-protector-guard-offset=offset"
+.PD
+Generate stack protection code using canary at \fIguard\fR.  Supported
+locations are \fBglobal\fR for a global canary or \fBsysreg\fR for a
+canary in an appropriate system register.
+.Sp
+With the latter choice the options
+\&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR and
+\&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR furthermore specify
+which system register to use as base register for reading the canary,
+and from what offset from that base register. There is no default
+register or offset as this is entirely for use within the Linux
+kernel.
+.IP "\fB\-mstack\-protector\-guard=\fR\fIguard\fR" 4
+.IX Item "-mstack-protector-guard=guard"
+.PD 0
+.IP "\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR" 4
+.IX Item "-mstack-protector-guard-reg=reg"
+.IP "\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR" 4
+.IX Item "-mstack-protector-guard-offset=offset"
+.PD
+Generate stack protection code using canary at \fIguard\fR.  Supported
+locations are \fBglobal\fR for a global canary or \fBsysreg\fR for a
+canary in an appropriate system register.
+.Sp
+With the latter choice the options
+\&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR and
+\&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR furthermore specify
+which system register to use as base register for reading the canary,
+and from what offset from that base register. There is no default
+register or offset as this is entirely for use within the Linux
+kernel.
+.IP "\fB\-mtls\-dialect=desc\fR" 4
+.IX Item "-mtls-dialect=desc"
+Use \s-1TLS\s0 descriptors as the thread-local storage mechanism for dynamic accesses
+of \s-1TLS\s0 variables.  This is the default.
+.IP "\fB\-mtls\-dialect=traditional\fR" 4
+.IX Item "-mtls-dialect=traditional"
+Use traditional \s-1TLS\s0 as the thread-local storage mechanism for dynamic accesses
+of \s-1TLS\s0 variables.
+.IP "\fB\-mtls\-size=\fR\fIsize\fR" 4
+.IX Item "-mtls-size=size"
+Specify bit size of immediate \s-1TLS\s0 offsets.  Valid values are 12, 24, 32, 48.
+This option requires binutils 2.26 or newer.
+.IP "\fB\-mfix\-cortex\-a53\-835769\fR" 4
+.IX Item "-mfix-cortex-a53-835769"
+.PD 0
+.IP "\fB\-mno\-fix\-cortex\-a53\-835769\fR" 4
+.IX Item "-mno-fix-cortex-a53-835769"
+.PD
+Enable or disable the workaround for the \s-1ARM\s0 Cortex\-A53 erratum number 835769.
+This involves inserting a \s-1NOP\s0 instruction between memory instructions and
+64\-bit integer multiply-accumulate instructions.
+.IP "\fB\-mfix\-cortex\-a53\-843419\fR" 4
+.IX Item "-mfix-cortex-a53-843419"
+.PD 0
+.IP "\fB\-mno\-fix\-cortex\-a53\-843419\fR" 4
+.IX Item "-mno-fix-cortex-a53-843419"
+.PD
+Enable or disable the workaround for the \s-1ARM\s0 Cortex\-A53 erratum number 843419.
+This erratum workaround is made at link time and this will only pass the
+corresponding flag to the linker.
+.IP "\fB\-mlow\-precision\-recip\-sqrt\fR" 4
+.IX Item "-mlow-precision-recip-sqrt"
+.PD 0
+.IP "\fB\-mno\-low\-precision\-recip\-sqrt\fR" 4
+.IX Item "-mno-low-precision-recip-sqrt"
+.PD
+Enable or disable the reciprocal square root approximation.
+This option only has an effect if \fB\-ffast\-math\fR or
+\&\fB\-funsafe\-math\-optimizations\fR is used as well.  Enabling this reduces
+precision of reciprocal square root results to about 16 bits for
+single precision and to 32 bits for double precision.
+.IP "\fB\-mlow\-precision\-sqrt\fR" 4
+.IX Item "-mlow-precision-sqrt"
+.PD 0
+.IP "\fB\-mno\-low\-precision\-sqrt\fR" 4
+.IX Item "-mno-low-precision-sqrt"
+.PD
+Enable or disable the square root approximation.
+This option only has an effect if \fB\-ffast\-math\fR or
+\&\fB\-funsafe\-math\-optimizations\fR is used as well.  Enabling this reduces
+precision of square root results to about 16 bits for
+single precision and to 32 bits for double precision.
+If enabled, it implies \fB\-mlow\-precision\-recip\-sqrt\fR.
+.IP "\fB\-mlow\-precision\-div\fR" 4
+.IX Item "-mlow-precision-div"
+.PD 0
+.IP "\fB\-mno\-low\-precision\-div\fR" 4
+.IX Item "-mno-low-precision-div"
+.PD
+Enable or disable the division approximation.
+This option only has an effect if \fB\-ffast\-math\fR or
+\&\fB\-funsafe\-math\-optimizations\fR is used as well.  Enabling this reduces
+precision of division results to about 16 bits for
+single precision and to 32 bits for double precision.
+.IP "\fB\-mtrack\-speculation\fR" 4
+.IX Item "-mtrack-speculation"
+.PD 0
+.IP "\fB\-mno\-track\-speculation\fR" 4
+.IX Item "-mno-track-speculation"
+.PD
+Enable or disable generation of additional code to track speculative
+execution through conditional branches.  The tracking state can then
+be used by the compiler when expanding calls to
+\&\f(CW\*(C`_\|_builtin_speculation_safe_copy\*(C'\fR to permit a more efficient code
+sequence to be generated.
+.IP "\fB\-march=\fR\fIname\fR" 4
+.IX Item "-march=name"
+Specify the name of the target architecture and, optionally, one or
+more feature modifiers.  This option has the form
+\&\fB\-march=\fR\fIarch\fR{\fB+\fR[\fBno\fR]\fIfeature\fR}*.
+.Sp
+The permissible values for \fIarch\fR are \fBarmv8\-a\fR,
+\&\fBarmv8.1\-a\fR, \fBarmv8.2\-a\fR, \fBarmv8.3\-a\fR, \fBarmv8.4\-a\fR,
+\&\fBarmv8.5\-a\fR or \fInative\fR.
+.Sp
+The value \fBarmv8.5\-a\fR implies \fBarmv8.4\-a\fR and enables compiler
+support for the ARMv8.5\-A architecture extensions.
+.Sp
+The value \fBarmv8.4\-a\fR implies \fBarmv8.3\-a\fR and enables compiler
+support for the ARMv8.4\-A architecture extensions.
+.Sp
+The value \fBarmv8.3\-a\fR implies \fBarmv8.2\-a\fR and enables compiler
+support for the ARMv8.3\-A architecture extensions.
+.Sp
+The value \fBarmv8.2\-a\fR implies \fBarmv8.1\-a\fR and enables compiler
+support for the ARMv8.2\-A architecture extensions.
+.Sp
+The value \fBarmv8.1\-a\fR implies \fBarmv8\-a\fR and enables compiler
+support for the ARMv8.1\-A architecture extension.  In particular, it
+enables the \fB+crc\fR, \fB+lse\fR, and \fB+rdma\fR features.
+.Sp
+The value \fBnative\fR is available on native AArch64 GNU/Linux and
+causes the compiler to pick the architecture of the host system.  This
+option has no effect if the compiler is unable to recognize the
+architecture of the host system,
+.Sp
+The permissible values for \fIfeature\fR are listed in the sub-section
+on \fBaarch64\-feature\-modifiers,,\fR\fB\-march\fR \fBand\fR \fB\-mcpu\fR
+\&\fBFeature Modifiers\fR.  Where conflicting feature modifiers are
+specified, the right-most feature is used.
+.Sp
+\&\s-1GCC\s0 uses \fIname\fR to determine what kind of instructions it can emit
+when generating assembly code.  If \fB\-march\fR is specified
+without either of \fB\-mtune\fR or \fB\-mcpu\fR also being
+specified, the code is tuned to perform well across a range of target
+processors implementing the target architecture.
+.IP "\fB\-mtune=\fR\fIname\fR" 4
+.IX Item "-mtune=name"
+Specify the name of the target processor for which \s-1GCC\s0 should tune the
+performance of the code.  Permissible values for this option are:
+\&\fBgeneric\fR, \fBcortex\-a35\fR, \fBcortex\-a53\fR, \fBcortex\-a55\fR,
+\&\fBcortex\-a57\fR, \fBcortex\-a72\fR, \fBcortex\-a73\fR, \fBcortex\-a75\fR,
+\&\fBcortex\-a76\fR, \fBares\fR, \fBexynos\-m1\fR, \fBemag\fR, \fBfalkor\fR,
+\&\fBneoverse\-e1\fR,\fBneoverse\-n1\fR,\fBqdf24xx\fR, \fBsaphira\fR,
+\&\fBphecda\fR, \fBxgene1\fR, \fBvulcan\fR, \fBocteontx\fR,
+\&\fBocteontx81\fR,  \fBocteontx83\fR, \fBthunderx\fR, \fBthunderxt88\fR,
+\&\fBthunderxt88p1\fR, \fBthunderxt81\fR, \fBtsv110\fR,
+\&\fBthunderxt83\fR, \fBthunderx2t99\fR,
+\&\fBcortex\-a57.cortex\-a53\fR, \fBcortex\-a72.cortex\-a53\fR,
+\&\fBcortex\-a73.cortex\-a35\fR, \fBcortex\-a73.cortex\-a53\fR,
+\&\fBcortex\-a75.cortex\-a55\fR, \fBcortex\-a76.cortex\-a55\fR
+\&\fBnative\fR.
+.Sp
+The values \fBcortex\-a57.cortex\-a53\fR, \fBcortex\-a72.cortex\-a53\fR,
+\&\fBcortex\-a73.cortex\-a35\fR, \fBcortex\-a73.cortex\-a53\fR,
+\&\fBcortex\-a75.cortex\-a55\fR, \fBcortex\-a76.cortex\-a55\fR specify that \s-1GCC\s0
+should tune for a big.LITTLE system.
+.Sp
+Additionally on native AArch64 GNU/Linux systems the value
+\&\fBnative\fR tunes performance to the host system.  This option has no effect
+if the compiler is unable to recognize the processor of the host system.
+.Sp
+Where none of \fB\-mtune=\fR, \fB\-mcpu=\fR or \fB\-march=\fR
+are specified, the code is tuned to perform well across a range
+of target processors.
+.Sp
+This option cannot be suffixed by feature modifiers.
+.IP "\fB\-mcpu=\fR\fIname\fR" 4
+.IX Item "-mcpu=name"
+Specify the name of the target processor, optionally suffixed by one
+or more feature modifiers.  This option has the form
+\&\fB\-mcpu=\fR\fIcpu\fR{\fB+\fR[\fBno\fR]\fIfeature\fR}*, where
+the permissible values for \fIcpu\fR are the same as those available
+for \fB\-mtune\fR.  The permissible values for \fIfeature\fR are
+documented in the sub-section on
+\&\fBaarch64\-feature\-modifiers,,\fR\fB\-march\fR \fBand\fR \fB\-mcpu\fR
+\&\fBFeature Modifiers\fR.  Where conflicting feature modifiers are
+specified, the right-most feature is used.
+.Sp
+\&\s-1GCC\s0 uses \fIname\fR to determine what kind of instructions it can emit when
+generating assembly code (as if by \fB\-march\fR) and to determine
+the target processor for which to tune for performance (as if
+by \fB\-mtune\fR).  Where this option is used in conjunction
+with \fB\-march\fR or \fB\-mtune\fR, those options take precedence
+over the appropriate part of this option.
+.IP "\fB\-moverride=\fR\fIstring\fR" 4
+.IX Item "-moverride=string"
+Override tuning decisions made by the back-end in response to a
+\&\fB\-mtune=\fR switch.  The syntax, semantics, and accepted values
+for \fIstring\fR in this option are not guaranteed to be consistent
+across releases.
+.Sp
+This option is only intended to be useful when developing \s-1GCC.\s0
+.IP "\fB\-mverbose\-cost\-dump\fR" 4
+.IX Item "-mverbose-cost-dump"
+Enable verbose cost model dumping in the debug dump files.  This option is
+provided for use in debugging the compiler.
+.IP "\fB\-mpc\-relative\-literal\-loads\fR" 4
+.IX Item "-mpc-relative-literal-loads"
+.PD 0
+.IP "\fB\-mno\-pc\-relative\-literal\-loads\fR" 4
+.IX Item "-mno-pc-relative-literal-loads"
+.PD
+Enable or disable PC-relative literal loads.  With this option literal pools are
+accessed using a single instruction and emitted after each function.  This
+limits the maximum size of functions to 1MB.  This is enabled by default for
+\&\fB\-mcmodel=tiny\fR.
+.IP "\fB\-msign\-return\-address=\fR\fIscope\fR" 4
+.IX Item "-msign-return-address=scope"
+Select the function scope on which return address signing will be applied.
+Permissible values are \fBnone\fR, which disables return address signing,
+\&\fBnon-leaf\fR, which enables pointer signing for functions which are not leaf
+functions, and \fBall\fR, which enables pointer signing for all functions.  The
+default value is \fBnone\fR. This option has been deprecated by
+\&\-mbranch\-protection.
+.IP "\fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac-ret\fR\fB[+\fR\fIleaf\fR\fB]|\fR\fIbti\fR" 4
+.IX Item "-mbranch-protection=none|standard|pac-ret[+leaf]|bti"
+Select the branch protection features to use.
+\&\fBnone\fR is the default and turns off all types of branch protection.
+\&\fBstandard\fR turns on all types of branch protection features.  If a feature
+has additional tuning options, then \fBstandard\fR sets it to its standard
+level.
+\&\fBpac\-ret[+\fR\fIleaf\fR\fB]\fR turns on return address signing to its standard
+level: signing functions that save the return address to memory (non-leaf
+functions will practically always do this) using the a\-key.  The optional
+argument \fBleaf\fR can be used to extend the signing to include leaf
+functions.
+\&\fBbti\fR turns on branch target identification mechanism.
+.IP "\fB\-msve\-vector\-bits=\fR\fIbits\fR" 4
+.IX Item "-msve-vector-bits=bits"
+Specify the number of bits in an \s-1SVE\s0 vector register.  This option only has
+an effect when \s-1SVE\s0 is enabled.
+.Sp
+\&\s-1GCC\s0 supports two forms of \s-1SVE\s0 code generation: \*(L"vector-length
+agnostic\*(R" output that works with any size of vector register and
+\&\*(L"vector-length specific\*(R" output that allows \s-1GCC\s0 to make assumptions
+about the vector length when it is useful for optimization reasons.
+The possible values of \fBbits\fR are: \fBscalable\fR, \fB128\fR,
+\&\fB256\fR, \fB512\fR, \fB1024\fR and \fB2048\fR.
+Specifying \fBscalable\fR selects vector-length agnostic
+output.  At present \fB\-msve\-vector\-bits=128\fR also generates vector-length
+agnostic output.  All other values generate vector-length specific code.
+The behavior of these values may change in future releases and no value except
+\&\fBscalable\fR should be relied on for producing code that is portable across
+different hardware \s-1SVE\s0 vector lengths.
+.Sp
+The default is \fB\-msve\-vector\-bits=scalable\fR, which produces
+vector-length agnostic code.
+.PP
+\fB\-march\fR and \fB\-mcpu\fR Feature Modifiers
+.IX Subsection "-march and -mcpu Feature Modifiers"
+.PP
+Feature modifiers used with \fB\-march\fR and \fB\-mcpu\fR can be any of
+the following and their inverses \fBno\fR\fIfeature\fR:
+.IP "\fBcrc\fR" 4
+.IX Item "crc"
+Enable \s-1CRC\s0 extension.  This is on by default for
+\&\fB\-march=armv8.1\-a\fR.
+.IP "\fBcrypto\fR" 4
+.IX Item "crypto"
+Enable Crypto extension.  This also enables Advanced \s-1SIMD\s0 and floating-point
+instructions.
+.IP "\fBfp\fR" 4
+.IX Item "fp"
+Enable floating-point instructions.  This is on by default for all possible
+values for options \fB\-march\fR and \fB\-mcpu\fR.
+.IP "\fBsimd\fR" 4
+.IX Item "simd"
+Enable Advanced \s-1SIMD\s0 instructions.  This also enables floating-point
+instructions.  This is on by default for all possible values for options
+\&\fB\-march\fR and \fB\-mcpu\fR.
+.IP "\fBsve\fR" 4
+.IX Item "sve"
+Enable Scalable Vector Extension instructions.  This also enables Advanced
+\&\s-1SIMD\s0 and floating-point instructions.
+.IP "\fBlse\fR" 4
+.IX Item "lse"
+Enable Large System Extension instructions.  This is on by default for
+\&\fB\-march=armv8.1\-a\fR.
+.IP "\fBrdma\fR" 4
+.IX Item "rdma"
+Enable Round Double Multiply Accumulate instructions.  This is on by default
+for \fB\-march=armv8.1\-a\fR.
+.IP "\fBfp16\fR" 4
+.IX Item "fp16"
+Enable \s-1FP16\s0 extension.  This also enables floating-point instructions.
+.IP "\fBfp16fml\fR" 4
+.IX Item "fp16fml"
+Enable \s-1FP16\s0 fmla extension.  This also enables \s-1FP16\s0 extensions and
+floating-point instructions. This option is enabled by default for \fB\-march=armv8.4\-a\fR. Use of this option with architectures prior to Armv8.2\-A is not supported.
+.IP "\fBrcpc\fR" 4
+.IX Item "rcpc"
+Enable the RcPc extension.  This does not change code generation from \s-1GCC,\s0
+but is passed on to the assembler, enabling inline asm statements to use
+instructions from the RcPc extension.
+.IP "\fBdotprod\fR" 4
+.IX Item "dotprod"
+Enable the Dot Product extension.  This also enables Advanced \s-1SIMD\s0 instructions.
+.IP "\fBaes\fR" 4
+.IX Item "aes"
+Enable the Armv8\-a aes and pmull crypto extension.  This also enables Advanced
+\&\s-1SIMD\s0 instructions.
+.IP "\fBsha2\fR" 4
+.IX Item "sha2"
+Enable the Armv8\-a sha2 crypto extension.  This also enables Advanced \s-1SIMD\s0 instructions.
+.IP "\fBsha3\fR" 4
+.IX Item "sha3"
+Enable the sha512 and sha3 crypto extension.  This also enables Advanced \s-1SIMD\s0
+instructions. Use of this option with architectures prior to Armv8.2\-A is not supported.
+.IP "\fBsm4\fR" 4
+.IX Item "sm4"
+Enable the sm3 and sm4 crypto extension.  This also enables Advanced \s-1SIMD\s0 instructions.
+Use of this option with architectures prior to Armv8.2\-A is not supported.
+.IP "\fBprofile\fR" 4
+.IX Item "profile"
+Enable the Statistical Profiling extension.  This option is only to enable the
+extension at the assembler level and does not affect code generation.
+.IP "\fBrng\fR" 4
+.IX Item "rng"
+Enable the Armv8.5\-a Random Number instructions.  This option is only to
+enable the extension at the assembler level and does not affect code
+generation.
+.IP "\fBmemtag\fR" 4
+.IX Item "memtag"
+Enable the Armv8.5\-a Memory Tagging Extensions.  This option is only to
+enable the extension at the assembler level and does not affect code
+generation.
+.IP "\fBsb\fR" 4
+.IX Item "sb"
+Enable the Armv8\-a Speculation Barrier instruction.  This option is only to
+enable the extension at the assembler level and does not affect code
+generation.  This option is enabled by default for \fB\-march=armv8.5\-a\fR.
+.IP "\fBssbs\fR" 4
+.IX Item "ssbs"
+Enable the Armv8\-a Speculative Store Bypass Safe instruction.  This option
+is only to enable the extension at the assembler level and does not affect code
+generation.  This option is enabled by default for \fB\-march=armv8.5\-a\fR.
+.IP "\fBpredres\fR" 4
+.IX Item "predres"
+Enable the Armv8\-a Execution and Data Prediction Restriction instructions.
+This option is only to enable the extension at the assembler level and does
+not affect code generation.  This option is enabled by default for
+\&\fB\-march=armv8.5\-a\fR.
+.PP
+Feature \fBcrypto\fR implies \fBaes\fR, \fBsha2\fR, and \fBsimd\fR,
+which implies \fBfp\fR.
+Conversely, \fBnofp\fR implies \fBnosimd\fR, which implies
+\&\fBnocrypto\fR, \fBnoaes\fR and \fBnosha2\fR.
+.PP
+\fIAdapteva Epiphany Options\fR
+.IX Subsection "Adapteva Epiphany Options"
+.PP
+These \fB\-m\fR options are defined for Adapteva Epiphany:
+.IP "\fB\-mhalf\-reg\-file\fR" 4
+.IX Item "-mhalf-reg-file"
+Don't allocate any register in the range \f(CW\*(C`r32\*(C'\fR...\f(CW\*(C`r63\*(C'\fR.
+That allows code to run on hardware variants that lack these registers.
+.IP "\fB\-mprefer\-short\-insn\-regs\fR" 4
+.IX Item "-mprefer-short-insn-regs"
+Preferentially allocate registers that allow short instruction generation.
+This can result in increased instruction count, so this may either reduce or
+increase overall code size.
+.IP "\fB\-mbranch\-cost=\fR\fInum\fR" 4
+.IX Item "-mbranch-cost=num"
+Set the cost of branches to roughly \fInum\fR \*(L"simple\*(R" instructions.
+This cost is only a heuristic and is not guaranteed to produce
+consistent results across releases.
+.IP "\fB\-mcmove\fR" 4
+.IX Item "-mcmove"
+Enable the generation of conditional moves.
+.IP "\fB\-mnops=\fR\fInum\fR" 4
+.IX Item "-mnops=num"
+Emit \fInum\fR NOPs before every other generated instruction.
+.IP "\fB\-mno\-soft\-cmpsf\fR" 4
+.IX Item "-mno-soft-cmpsf"
+For single-precision floating-point comparisons, emit an \f(CW\*(C`fsub\*(C'\fR instruction
+and test the flags.  This is faster than a software comparison, but can
+get incorrect results in the presence of NaNs, or when two different small
+numbers are compared such that their difference is calculated as zero.
+The default is \fB\-msoft\-cmpsf\fR, which uses slower, but IEEE-compliant,
+software comparisons.
+.IP "\fB\-mstack\-offset=\fR\fInum\fR" 4
+.IX Item "-mstack-offset=num"
+Set the offset between the top of the stack and the stack pointer.
+E.g., a value of 8 means that the eight bytes in the range \f(CW\*(C`sp+0...sp+7\*(C'\fR
+can be used by leaf functions without stack allocation.
+Values other than \fB8\fR or \fB16\fR are untested and unlikely to work.
+Note also that this option changes the \s-1ABI\s0; compiling a program with a
+different stack offset than the libraries have been compiled with
+generally does not work.
+This option can be useful if you want to evaluate if a different stack
+offset would give you better code, but to actually use a different stack
+offset to build working programs, it is recommended to configure the
+toolchain with the appropriate \fB\-\-with\-stack\-offset=\fR\fInum\fR option.
+.IP "\fB\-mno\-round\-nearest\fR" 4
+.IX Item "-mno-round-nearest"
+Make the scheduler assume that the rounding mode has been set to
+truncating.  The default is \fB\-mround\-nearest\fR.
+.IP "\fB\-mlong\-calls\fR" 4
+.IX Item "-mlong-calls"
+If not otherwise specified by an attribute, assume all calls might be beyond
+the offset range of the \f(CW\*(C`b\*(C'\fR / \f(CW\*(C`bl\*(C'\fR instructions, and therefore load the
+function address into a register before performing a (otherwise direct) call.
+This is the default.
+.IP "\fB\-mshort\-calls\fR" 4
+.IX Item "-mshort-calls"
+If not otherwise specified by an attribute, assume all direct calls are
+in the range of the \f(CW\*(C`b\*(C'\fR / \f(CW\*(C`bl\*(C'\fR instructions, so use these instructions
+for direct calls.  The default is \fB\-mlong\-calls\fR.
+.IP "\fB\-msmall16\fR" 4
+.IX Item "-msmall16"
+Assume addresses can be loaded as 16\-bit unsigned values.  This does not
+apply to function addresses for which \fB\-mlong\-calls\fR semantics
+are in effect.
+.IP "\fB\-mfp\-mode=\fR\fImode\fR" 4
+.IX Item "-mfp-mode=mode"
+Set the prevailing mode of the floating-point unit.
+This determines the floating-point mode that is provided and expected
+at function call and return time.  Making this mode match the mode you
+predominantly need at function start can make your programs smaller and
+faster by avoiding unnecessary mode switches.
+.Sp
+\&\fImode\fR can be set to one the following values:
+.RS 4
+.IP "\fBcaller\fR" 4
+.IX Item "caller"
+Any mode at function entry is valid, and retained or restored when
+the function returns, and when it calls other functions.
+This mode is useful for compiling libraries or other compilation units
+you might want to incorporate into different programs with different
+prevailing \s-1FPU\s0 modes, and the convenience of being able to use a single
+object file outweighs the size and speed overhead for any extra
+mode switching that might be needed, compared with what would be needed
+with a more specific choice of prevailing \s-1FPU\s0 mode.
+.IP "\fBtruncate\fR" 4
+.IX Item "truncate"
+This is the mode used for floating-point calculations with
+truncating (i.e. round towards zero) rounding mode.  That includes
+conversion from floating point to integer.
+.IP "\fBround-nearest\fR" 4
+.IX Item "round-nearest"
+This is the mode used for floating-point calculations with
+round-to-nearest-or-even rounding mode.
+.IP "\fBint\fR" 4
+.IX Item "int"
+This is the mode used to perform integer calculations in the \s-1FPU,\s0 e.g.
+integer multiply, or integer multiply-and-accumulate.
+.RE
+.RS 4
+.Sp
+The default is \fB\-mfp\-mode=caller\fR
+.RE
+.IP "\fB\-mno\-split\-lohi\fR" 4
+.IX Item "-mno-split-lohi"
+.PD 0
+.IP "\fB\-mno\-postinc\fR" 4
+.IX Item "-mno-postinc"
+.IP "\fB\-mno\-postmodify\fR" 4
+.IX Item "-mno-postmodify"
+.PD
+Code generation tweaks that disable, respectively, splitting of 32\-bit
+loads, generation of post-increment addresses, and generation of
+post-modify addresses.  The defaults are \fBmsplit-lohi\fR,
+\&\fB\-mpost\-inc\fR, and \fB\-mpost\-modify\fR.
+.IP "\fB\-mnovect\-double\fR" 4
+.IX Item "-mnovect-double"
+Change the preferred \s-1SIMD\s0 mode to SImode.  The default is
+\&\fB\-mvect\-double\fR, which uses DImode as preferred \s-1SIMD\s0 mode.
+.IP "\fB\-max\-vect\-align=\fR\fInum\fR" 4
+.IX Item "-max-vect-align=num"
+The maximum alignment for \s-1SIMD\s0 vector mode types.
+\&\fInum\fR may be 4 or 8.  The default is 8.
+Note that this is an \s-1ABI\s0 change, even though many library function
+interfaces are unaffected if they don't use \s-1SIMD\s0 vector modes
+in places that affect size and/or alignment of relevant types.
+.IP "\fB\-msplit\-vecmove\-early\fR" 4
+.IX Item "-msplit-vecmove-early"
+Split vector moves into single word moves before reload.  In theory this
+can give better register allocation, but so far the reverse seems to be
+generally the case.
+.IP "\fB\-m1reg\-\fR\fIreg\fR" 4
+.IX Item "-m1reg-reg"
+Specify a register to hold the constant \-1, which makes loading small negative
+constants and certain bitmasks faster.
+Allowable values for \fIreg\fR are \fBr43\fR and \fBr63\fR,
+which specify use of that register as a fixed register,
+and \fBnone\fR, which means that no register is used for this
+purpose.  The default is \fB\-m1reg\-none\fR.
+.PP
+\fI\s-1AMD GCN\s0 Options\fR
+.IX Subsection "AMD GCN Options"
+.PP
+These options are defined specifically for the \s-1AMD GCN\s0 port.
+.IP "\fB\-march=\fR\fIgpu\fR" 4
+.IX Item "-march=gpu"
+.PD 0
+.IP "\fB\-mtune=\fR\fIgpu\fR" 4
+.IX Item "-mtune=gpu"
+.PD
+Set architecture type or tuning for \fIgpu\fR. Supported values for \fIgpu\fR
+are
+.RS 4
+.IP "\fBfiji\fR" 4
+.IX Item "fiji"
+Compile for \s-1GCN3\s0 Fiji devices (gfx803).
+.IP "\fBgfx900\fR" 4
+.IX Item "gfx900"
+Compile for \s-1GCN5\s0 Vega 10 devices (gfx900).
+.RE
+.RS 4
+.RE
+.IP "\fB\-mstack\-size=\fR\fIbytes\fR" 4
+.IX Item "-mstack-size=bytes"
+Specify how many \fIbytes\fR of stack space will be requested for each \s-1GPU\s0
+thread (wave-front).  Beware that there may be many threads and limited memory
+available.  The size of the stack allocation may also have an impact on
+run-time performance.  The default is 32KB when using OpenACC or OpenMP, and
+1MB otherwise.
+.PP
+\fI\s-1ARC\s0 Options\fR
+.IX Subsection "ARC Options"
+.PP
+The following options control the architecture variant for which code
+is being compiled:
+.IP "\fB\-mbarrel\-shifter\fR" 4
+.IX Item "-mbarrel-shifter"
+Generate instructions supported by barrel shifter.  This is the default
+unless \fB\-mcpu=ARC601\fR or \fB\-mcpu=ARCEM\fR is in effect.
+.IP "\fB\-mjli\-always\fR" 4
+.IX Item "-mjli-always"
+Force to call a function using jli_s instruction.  This option is
+valid only for ARCv2 architecture.
+.IP "\fB\-mcpu=\fR\fIcpu\fR" 4
+.IX Item "-mcpu=cpu"
+Set architecture type, register usage, and instruction scheduling
+parameters for \fIcpu\fR.  There are also shortcut alias options
+available for backward compatibility and convenience.  Supported
+values for \fIcpu\fR are
+.RS 4
+.IP "\fBarc600\fR" 4
+.IX Item "arc600"
+Compile for \s-1ARC600.\s0  Aliases: \fB\-mA6\fR, \fB\-mARC600\fR.
+.IP "\fBarc601\fR" 4
+.IX Item "arc601"
+Compile for \s-1ARC601.\s0  Alias: \fB\-mARC601\fR.
+.IP "\fBarc700\fR" 4
+.IX Item "arc700"
+Compile for \s-1ARC700.\s0  Aliases: \fB\-mA7\fR, \fB\-mARC700\fR.
+This is the default when configured with \fB\-\-with\-cpu=arc700\fR.
+.IP "\fBarcem\fR" 4
+.IX Item "arcem"
+Compile for \s-1ARC EM.\s0
+.IP "\fBarchs\fR" 4
+.IX Item "archs"
+Compile for \s-1ARC HS.\s0
+.IP "\fBem\fR" 4
+.IX Item "em"
+Compile for \s-1ARC EM CPU\s0 with no hardware extensions.
+.IP "\fBem4\fR" 4
+.IX Item "em4"
+Compile for \s-1ARC EM4 CPU.\s0
+.IP "\fBem4_dmips\fR" 4
+.IX Item "em4_dmips"
+Compile for \s-1ARC EM4 DMIPS CPU.\s0
+.IP "\fBem4_fpus\fR" 4
+.IX Item "em4_fpus"
+Compile for \s-1ARC EM4 DMIPS CPU\s0 with the single-precision floating-point
+extension.
+.IP "\fBem4_fpuda\fR" 4
+.IX Item "em4_fpuda"
+Compile for \s-1ARC EM4 DMIPS CPU\s0 with single-precision floating-point and
+double assist instructions.
+.IP "\fBhs\fR" 4
+.IX Item "hs"
+Compile for \s-1ARC HS CPU\s0 with no hardware extensions except the atomic
+instructions.
+.IP "\fBhs34\fR" 4
+.IX Item "hs34"
+Compile for \s-1ARC HS34 CPU.\s0
+.IP "\fBhs38\fR" 4
+.IX Item "hs38"
+Compile for \s-1ARC HS38 CPU.\s0
+.IP "\fBhs38_linux\fR" 4
+.IX Item "hs38_linux"
+Compile for \s-1ARC HS38 CPU\s0 with all hardware extensions on.
+.IP "\fBarc600_norm\fR" 4
+.IX Item "arc600_norm"
+Compile for \s-1ARC 600 CPU\s0 with \f(CW\*(C`norm\*(C'\fR instructions enabled.
+.IP "\fBarc600_mul32x16\fR" 4
+.IX Item "arc600_mul32x16"
+Compile for \s-1ARC 600 CPU\s0 with \f(CW\*(C`norm\*(C'\fR and 32x16\-bit multiply 
+instructions enabled.
+.IP "\fBarc600_mul64\fR" 4
+.IX Item "arc600_mul64"
+Compile for \s-1ARC 600 CPU\s0 with \f(CW\*(C`norm\*(C'\fR and \f(CW\*(C`mul64\*(C'\fR\-family 
+instructions enabled.
+.IP "\fBarc601_norm\fR" 4
+.IX Item "arc601_norm"
+Compile for \s-1ARC 601 CPU\s0 with \f(CW\*(C`norm\*(C'\fR instructions enabled.
+.IP "\fBarc601_mul32x16\fR" 4
+.IX Item "arc601_mul32x16"
+Compile for \s-1ARC 601 CPU\s0 with \f(CW\*(C`norm\*(C'\fR and 32x16\-bit multiply
+instructions enabled.
+.IP "\fBarc601_mul64\fR" 4
+.IX Item "arc601_mul64"
+Compile for \s-1ARC 601 CPU\s0 with \f(CW\*(C`norm\*(C'\fR and \f(CW\*(C`mul64\*(C'\fR\-family
+instructions enabled.
+.IP "\fBnps400\fR" 4
+.IX Item "nps400"
+Compile for \s-1ARC 700\s0 on \s-1NPS400\s0 chip.
+.IP "\fBem_mini\fR" 4
+.IX Item "em_mini"
+Compile for \s-1ARC EM\s0 minimalist configuration featuring reduced register
+set.
+.RE
+.RS 4
+.RE
+.IP "\fB\-mdpfp\fR" 4
+.IX Item "-mdpfp"
+.PD 0
+.IP "\fB\-mdpfp\-compact\fR" 4
+.IX Item "-mdpfp-compact"
+.PD
+Generate double-precision \s-1FPX\s0 instructions, tuned for the compact
+implementation.
+.IP "\fB\-mdpfp\-fast\fR" 4
+.IX Item "-mdpfp-fast"
+Generate double-precision \s-1FPX\s0 instructions, tuned for the fast
+implementation.
+.IP "\fB\-mno\-dpfp\-lrsr\fR" 4
+.IX Item "-mno-dpfp-lrsr"
+Disable \f(CW\*(C`lr\*(C'\fR and \f(CW\*(C`sr\*(C'\fR instructions from using \s-1FPX\s0 extension
+aux registers.
+.IP "\fB\-mea\fR" 4
+.IX Item "-mea"
+Generate extended arithmetic instructions.  Currently only
+\&\f(CW\*(C`divaw\*(C'\fR, \f(CW\*(C`adds\*(C'\fR, \f(CW\*(C`subs\*(C'\fR, and \f(CW\*(C`sat16\*(C'\fR are
+supported.  This is always enabled for \fB\-mcpu=ARC700\fR.
+.IP "\fB\-mno\-mpy\fR" 4
+.IX Item "-mno-mpy"
+Do not generate \f(CW\*(C`mpy\*(C'\fR\-family instructions for \s-1ARC700.\s0  This option is
+deprecated.
+.IP "\fB\-mmul32x16\fR" 4
+.IX Item "-mmul32x16"
+Generate 32x16\-bit multiply and multiply-accumulate instructions.
+.IP "\fB\-mmul64\fR" 4
+.IX Item "-mmul64"
+Generate \f(CW\*(C`mul64\*(C'\fR and \f(CW\*(C`mulu64\*(C'\fR instructions.  
+Only valid for \fB\-mcpu=ARC600\fR.
+.IP "\fB\-mnorm\fR" 4
+.IX Item "-mnorm"
+Generate \f(CW\*(C`norm\*(C'\fR instructions.  This is the default if \fB\-mcpu=ARC700\fR
+is in effect.
+.IP "\fB\-mspfp\fR" 4
+.IX Item "-mspfp"
+.PD 0
+.IP "\fB\-mspfp\-compact\fR" 4
+.IX Item "-mspfp-compact"
+.PD
+Generate single-precision \s-1FPX\s0 instructions, tuned for the compact
+implementation.
+.IP "\fB\-mspfp\-fast\fR" 4
+.IX Item "-mspfp-fast"
+Generate single-precision \s-1FPX\s0 instructions, tuned for the fast
+implementation.
+.IP "\fB\-msimd\fR" 4
+.IX Item "-msimd"
+Enable generation of \s-1ARC SIMD\s0 instructions via target-specific
+builtins.  Only valid for \fB\-mcpu=ARC700\fR.
+.IP "\fB\-msoft\-float\fR" 4
+.IX Item "-msoft-float"
+This option ignored; it is provided for compatibility purposes only.
+Software floating-point code is emitted by default, and this default
+can overridden by \s-1FPX\s0 options; \fB\-mspfp\fR, \fB\-mspfp\-compact\fR, or
+\&\fB\-mspfp\-fast\fR for single precision, and \fB\-mdpfp\fR,
+\&\fB\-mdpfp\-compact\fR, or \fB\-mdpfp\-fast\fR for double precision.
+.IP "\fB\-mswap\fR" 4
+.IX Item "-mswap"
+Generate \f(CW\*(C`swap\*(C'\fR instructions.
+.IP "\fB\-matomic\fR" 4
+.IX Item "-matomic"
+This enables use of the locked load/store conditional extension to implement
+atomic memory built-in functions.  Not available for \s-1ARC\s0 6xx or \s-1ARC
+EM\s0 cores.
+.IP "\fB\-mdiv\-rem\fR" 4
+.IX Item "-mdiv-rem"
+Enable \f(CW\*(C`div\*(C'\fR and \f(CW\*(C`rem\*(C'\fR instructions for ARCv2 cores.
+.IP "\fB\-mcode\-density\fR" 4
+.IX Item "-mcode-density"
+Enable code density instructions for \s-1ARC EM.\s0  
+This option is on by default for \s-1ARC HS.\s0
+.IP "\fB\-mll64\fR" 4
+.IX Item "-mll64"
+Enable double load/store operations for \s-1ARC HS\s0 cores.
+.IP "\fB\-mtp\-regno=\fR\fIregno\fR" 4
+.IX Item "-mtp-regno=regno"
+Specify thread pointer register number.
+.IP "\fB\-mmpy\-option=\fR\fImulto\fR" 4
+.IX Item "-mmpy-option=multo"
+Compile ARCv2 code with a multiplier design option.  You can specify 
+the option using either a string or numeric value for \fImulto\fR.  
+\&\fBwlh1\fR is the default value.  The recognized values are:
+.RS 4
+.IP "\fB0\fR" 4
+.IX Item "0"
+.PD 0
+.IP "\fBnone\fR" 4
+.IX Item "none"
+.PD
+No multiplier available.
+.IP "\fB1\fR" 4
+.IX Item "1"
+.PD 0
+.IP "\fBw\fR" 4
+.IX Item "w"
+.PD
+16x16 multiplier, fully pipelined.
+The following instructions are enabled: \f(CW\*(C`mpyw\*(C'\fR and \f(CW\*(C`mpyuw\*(C'\fR.
+.IP "\fB2\fR" 4
+.IX Item "2"
+.PD 0
+.IP "\fBwlh1\fR" 4
+.IX Item "wlh1"
+.PD
+32x32 multiplier, fully
+pipelined (1 stage).  The following instructions are additionally
+enabled: \f(CW\*(C`mpy\*(C'\fR, \f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
+.IP "\fB3\fR" 4
+.IX Item "3"
+.PD 0
+.IP "\fBwlh2\fR" 4
+.IX Item "wlh2"
+.PD
+32x32 multiplier, fully pipelined
+(2 stages).  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
+\&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
+.IP "\fB4\fR" 4
+.IX Item "4"
+.PD 0
+.IP "\fBwlh3\fR" 4
+.IX Item "wlh3"
+.PD
+Two 16x16 multipliers, blocking,
+sequential.  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
+\&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
+.IP "\fB5\fR" 4
+.IX Item "5"
+.PD 0
+.IP "\fBwlh4\fR" 4
+.IX Item "wlh4"
+.PD
+One 16x16 multiplier, blocking,
+sequential.  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
+\&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
+.IP "\fB6\fR" 4
+.IX Item "6"
+.PD 0
+.IP "\fBwlh5\fR" 4
+.IX Item "wlh5"
+.PD
+One 32x4 multiplier, blocking,
+sequential.  The following instructions are additionally enabled: \f(CW\*(C`mpy\*(C'\fR,
+\&\f(CW\*(C`mpyu\*(C'\fR, \f(CW\*(C`mpym\*(C'\fR, \f(CW\*(C`mpymu\*(C'\fR, and \f(CW\*(C`mpy_s\*(C'\fR.
+.IP "\fB7\fR" 4
+.IX Item "7"
+.PD 0
+.IP "\fBplus_dmpy\fR" 4
+.IX Item "plus_dmpy"
+.PD
+\&\s-1ARC HS SIMD\s0 support.
+.IP "\fB8\fR" 4
+.IX Item "8"
+.PD 0
+.IP "\fBplus_macd\fR" 4
+.IX Item "plus_macd"
+.PD
+\&\s-1ARC HS SIMD\s0 support.
+.IP "\fB9\fR" 4
+.IX Item "9"
+.PD 0
+.IP "\fBplus_qmacw\fR" 4
+.IX Item "plus_qmacw"
+.PD
+\&\s-1ARC HS SIMD\s0 support.
+.RE
+.RS 4
+.Sp
+This option is only available for ARCv2 cores.
+.RE
+.IP "\fB\-mfpu=\fR\fIfpu\fR" 4
+.IX Item "-mfpu=fpu"
+Enables support for specific floating-point hardware extensions for ARCv2
+cores.  Supported values for \fIfpu\fR are:
+.RS 4
+.IP "\fBfpus\fR" 4
+.IX Item "fpus"
+Enables support for single-precision floating-point hardware
+extensions.
+.IP "\fBfpud\fR" 4
+.IX Item "fpud"
+Enables support for double-precision floating-point hardware
+extensions.  The single-precision floating-point extension is also
+enabled.  Not available for \s-1ARC EM.\s0
+.IP "\fBfpuda\fR" 4
+.IX Item "fpuda"
+Enables support for double-precision floating-point hardware
+extensions using double-precision assist instructions.  The single-precision
+floating-point extension is also enabled.  This option is
+only available for \s-1ARC EM.\s0
+.IP "\fBfpuda_div\fR" 4
+.IX Item "fpuda_div"
+Enables support for double-precision floating-point hardware
+extensions using double-precision assist instructions.
+The single-precision floating-point, square-root, and divide 
+extensions are also enabled.  This option is
+only available for \s-1ARC EM.\s0
+.IP "\fBfpuda_fma\fR" 4
+.IX Item "fpuda_fma"
+Enables support for double-precision floating-point hardware
+extensions using double-precision assist instructions.
+The single-precision floating-point and fused multiply and add 
+hardware extensions are also enabled.  This option is
+only available for \s-1ARC EM.\s0
+.IP "\fBfpuda_all\fR" 4
+.IX Item "fpuda_all"
+Enables support for double-precision floating-point hardware
+extensions using double-precision assist instructions.
+All single-precision floating-point hardware extensions are also
+enabled.  This option is only available for \s-1ARC EM.\s0
+.IP "\fBfpus_div\fR" 4
+.IX Item "fpus_div"
+Enables support for single-precision floating-point, square-root and divide 
+hardware extensions.
+.IP "\fBfpud_div\fR" 4
+.IX Item "fpud_div"
+Enables support for double-precision floating-point, square-root and divide 
+hardware extensions.  This option
+includes option \fBfpus_div\fR. Not available for \s-1ARC EM.\s0
+.IP "\fBfpus_fma\fR" 4
+.IX Item "fpus_fma"
+Enables support for single-precision floating-point and 
+fused multiply and add hardware extensions.
+.IP "\fBfpud_fma\fR" 4
+.IX Item "fpud_fma"
+Enables support for double-precision floating-point and 
+fused multiply and add hardware extensions.  This option
+includes option \fBfpus_fma\fR.  Not available for \s-1ARC EM.\s0
+.IP "\fBfpus_all\fR" 4
+.IX Item "fpus_all"
+Enables support for all single-precision floating-point hardware
+extensions.
+.IP "\fBfpud_all\fR" 4
+.IX Item "fpud_all"
+Enables support for all single\- and double-precision floating-point
+hardware extensions.  Not available for \s-1ARC EM.\s0
+.RE
+.RS 4
+.RE
+.IP "\fB\-mirq\-ctrl\-saved=\fR\fIregister-range\fR\fB,\fR \fIblink\fR\fB,\fR \fIlp_count\fR" 4
+.IX Item "-mirq-ctrl-saved=register-range, blink, lp_count"
+Specifies general-purposes registers that the processor automatically
+saves/restores on interrupt entry and exit.  \fIregister-range\fR is
+specified as two registers separated by a dash.  The register range
+always starts with \f(CW\*(C`r0\*(C'\fR, the upper limit is \f(CW\*(C`fp\*(C'\fR register.
+\&\fIblink\fR and \fIlp_count\fR are optional.  This option is only
+valid for \s-1ARC EM\s0 and \s-1ARC HS\s0 cores.
+.IP "\fB\-mrgf\-banked\-regs=\fR\fInumber\fR" 4
+.IX Item "-mrgf-banked-regs=number"
+Specifies the number of registers replicated in second register bank
+on entry to fast interrupt.  Fast interrupts are interrupts with the
+highest priority level P0.  These interrupts save only \s-1PC\s0 and \s-1STATUS32\s0
+registers to avoid memory transactions during interrupt entry and exit
+sequences.  Use this option when you are using fast interrupts in an
+\&\s-1ARC V2\s0 family processor.  Permitted values are 4, 8, 16, and 32.
+.IP "\fB\-mlpc\-width=\fR\fIwidth\fR" 4
+.IX Item "-mlpc-width=width"
+Specify the width of the \f(CW\*(C`lp_count\*(C'\fR register.  Valid values for
+\&\fIwidth\fR are 8, 16, 20, 24, 28 and 32 bits.  The default width is
+fixed to 32 bits.  If the width is less than 32, the compiler does not
+attempt to transform loops in your program to use the zero-delay loop
+mechanism unless it is known that the \f(CW\*(C`lp_count\*(C'\fR register can
+hold the required loop-counter value.  Depending on the width
+specified, the compiler and run-time library might continue to use the
+loop mechanism for various needs.  This option defines macro
+\&\f(CW\*(C`_\|_ARC_LPC_WIDTH_\|_\*(C'\fR with the value of \fIwidth\fR.
+.IP "\fB\-mrf16\fR" 4
+.IX Item "-mrf16"
+This option instructs the compiler to generate code for a 16\-entry
+register file.  This option defines the \f(CW\*(C`_\|_ARC_RF16_\|_\*(C'\fR
+preprocessor macro.
+.IP "\fB\-mbranch\-index\fR" 4
+.IX Item "-mbranch-index"
+Enable use of \f(CW\*(C`bi\*(C'\fR or \f(CW\*(C`bih\*(C'\fR instructions to implement jump
+tables.
+.PP
+The following options are passed through to the assembler, and also
+define preprocessor macro symbols.
+.IP "\fB\-mdsp\-packa\fR" 4
+.IX Item "-mdsp-packa"
+Passed down to the assembler to enable the \s-1DSP\s0 Pack A extensions.
+Also sets the preprocessor symbol \f(CW\*(C`_\|_Xdsp_packa\*(C'\fR.  This option is
+deprecated.
+.IP "\fB\-mdvbf\fR" 4
+.IX Item "-mdvbf"
+Passed down to the assembler to enable the dual Viterbi butterfly
+extension.  Also sets the preprocessor symbol \f(CW\*(C`_\|_Xdvbf\*(C'\fR.  This
+option is deprecated.
+.IP "\fB\-mlock\fR" 4
+.IX Item "-mlock"
+Passed down to the assembler to enable the locked load/store
+conditional extension.  Also sets the preprocessor symbol
+\&\f(CW\*(C`_\|_Xlock\*(C'\fR.
+.IP "\fB\-mmac\-d16\fR" 4
+.IX Item "-mmac-d16"
+Passed down to the assembler.  Also sets the preprocessor symbol
+\&\f(CW\*(C`_\|_Xxmac_d16\*(C'\fR.  This option is deprecated.
+.IP "\fB\-mmac\-24\fR" 4
+.IX Item "-mmac-24"
+Passed down to the assembler.  Also sets the preprocessor symbol
+\&\f(CW\*(C`_\|_Xxmac_24\*(C'\fR.  This option is deprecated.
+.IP "\fB\-mrtsc\fR" 4
+.IX Item "-mrtsc"
+Passed down to the assembler to enable the 64\-bit time-stamp counter
+extension instruction.  Also sets the preprocessor symbol
+\&\f(CW\*(C`_\|_Xrtsc\*(C'\fR.  This option is deprecated.
+.IP "\fB\-mswape\fR" 4
+.IX Item "-mswape"
+Passed down to the assembler to enable the swap byte ordering
+extension instruction.  Also sets the preprocessor symbol
+\&\f(CW\*(C`_\|_Xswape\*(C'\fR.
+.IP "\fB\-mtelephony\fR" 4
+.IX Item "-mtelephony"
+Passed down to the assembler to enable dual\- and single-operand
+instructions for telephony.  Also sets the preprocessor symbol
+\&\f(CW\*(C`_\|_Xtelephony\*(C'\fR.  This option is deprecated.
+.IP "\fB\-mxy\fR" 4
+.IX Item "-mxy"
+Passed down to the assembler to enable the \s-1XY\s0 memory extension.  Also
+sets the preprocessor symbol \f(CW\*(C`_\|_Xxy\*(C'\fR.
+.PP
+The following options control how the assembly code is annotated:
+.IP "\fB\-misize\fR" 4
+.IX Item "-misize"
+Annotate assembler instructions with estimated addresses.
+.IP "\fB\-mannotate\-align\fR" 4
+.IX Item "-mannotate-align"
+Explain what alignment considerations lead to the decision to make an
+instruction short or long.
+.PP
+The following options are passed through to the linker:
+.IP "\fB\-marclinux\fR" 4
+.IX Item "-marclinux"
+Passed through to the linker, to specify use of the \f(CW\*(C`arclinux\*(C'\fR emulation.
+This option is enabled by default in tool chains built for
+\&\f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets
+when profiling is not requested.
+.IP "\fB\-marclinux_prof\fR" 4
+.IX Item "-marclinux_prof"
+Passed through to the linker, to specify use of the
+\&\f(CW\*(C`arclinux_prof\*(C'\fR emulation.  This option is enabled by default in
+tool chains built for \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and
+\&\f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets when profiling is requested.
+.PP
+The following options control the semantics of generated code:
+.IP "\fB\-mlong\-calls\fR" 4
+.IX Item "-mlong-calls"
+Generate calls as register indirect calls, thus providing access
+to the full 32\-bit address range.
+.IP "\fB\-mmedium\-calls\fR" 4
+.IX Item "-mmedium-calls"
+Don't use less than 25\-bit addressing range for calls, which is the
+offset available for an unconditional branch-and-link
+instruction.  Conditional execution of function calls is suppressed, to
+allow use of the 25\-bit range, rather than the 21\-bit range with
+conditional branch-and-link.  This is the default for tool chains built
+for \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets.
+.IP "\fB\-G\fR \fInum\fR" 4
+.IX Item "-G num"
+Put definitions of externally-visible data in a small data section if
+that data is no bigger than \fInum\fR bytes.  The default value of
+\&\fInum\fR is 4 for any \s-1ARC\s0 configuration, or 8 when we have double
+load/store operations.
+.IP "\fB\-mno\-sdata\fR" 4
+.IX Item "-mno-sdata"
+Do not generate sdata references.  This is the default for tool chains
+built for \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR
+targets.
+.IP "\fB\-mvolatile\-cache\fR" 4
+.IX Item "-mvolatile-cache"
+Use ordinarily cached memory accesses for volatile references.  This is the
+default.
+.IP "\fB\-mno\-volatile\-cache\fR" 4
+.IX Item "-mno-volatile-cache"
+Enable cache bypass for volatile references.
+.PP
+The following options fine tune code generation:
+.IP "\fB\-malign\-call\fR" 4
+.IX Item "-malign-call"
+Do alignment optimizations for call instructions.
+.IP "\fB\-mauto\-modify\-reg\fR" 4
+.IX Item "-mauto-modify-reg"
+Enable the use of pre/post modify with register displacement.
+.IP "\fB\-mbbit\-peephole\fR" 4
+.IX Item "-mbbit-peephole"
+Enable bbit peephole2.
+.IP "\fB\-mno\-brcc\fR" 4
+.IX Item "-mno-brcc"
+This option disables a target-specific pass in \fIarc_reorg\fR to
+generate compare-and-branch (\f(CW\*(C`br\f(CIcc\f(CW\*(C'\fR) instructions.  
+It has no effect on
+generation of these instructions driven by the combiner pass.
+.IP "\fB\-mcase\-vector\-pcrel\fR" 4
+.IX Item "-mcase-vector-pcrel"
+Use PC-relative switch case tables to enable case table shortening.
+This is the default for \fB\-Os\fR.
+.IP "\fB\-mcompact\-casesi\fR" 4
+.IX Item "-mcompact-casesi"
+Enable compact \f(CW\*(C`casesi\*(C'\fR pattern.  This is the default for \fB\-Os\fR,
+and only available for ARCv1 cores.  This option is deprecated.
+.IP "\fB\-mno\-cond\-exec\fR" 4
+.IX Item "-mno-cond-exec"
+Disable the ARCompact-specific pass to generate conditional 
+execution instructions.
+.Sp
+Due to delay slot scheduling and interactions between operand numbers,
+literal sizes, instruction lengths, and the support for conditional execution,
+the target-independent pass to generate conditional execution is often lacking,
+so the \s-1ARC\s0 port has kept a special pass around that tries to find more
+conditional execution generation opportunities after register allocation,
+branch shortening, and delay slot scheduling have been done.  This pass
+generally, but not always, improves performance and code size, at the cost of
+extra compilation time, which is why there is an option to switch it off.
+If you have a problem with call instructions exceeding their allowable
+offset range because they are conditionalized, you should consider using
+\&\fB\-mmedium\-calls\fR instead.
+.IP "\fB\-mearly\-cbranchsi\fR" 4
+.IX Item "-mearly-cbranchsi"
+Enable pre-reload use of the \f(CW\*(C`cbranchsi\*(C'\fR pattern.
+.IP "\fB\-mexpand\-adddi\fR" 4
+.IX Item "-mexpand-adddi"
+Expand \f(CW\*(C`adddi3\*(C'\fR and \f(CW\*(C`subdi3\*(C'\fR at \s-1RTL\s0 generation time into
+\&\f(CW\*(C`add.f\*(C'\fR, \f(CW\*(C`adc\*(C'\fR etc.  This option is deprecated.
+.IP "\fB\-mindexed\-loads\fR" 4
+.IX Item "-mindexed-loads"
+Enable the use of indexed loads.  This can be problematic because some
+optimizers then assume that indexed stores exist, which is not
+the case.
+.IP "\fB\-mlra\fR" 4
+.IX Item "-mlra"
+Enable Local Register Allocation.  This is still experimental for \s-1ARC,\s0
+so by default the compiler uses standard reload
+(i.e. \fB\-mno\-lra\fR).
+.IP "\fB\-mlra\-priority\-none\fR" 4
+.IX Item "-mlra-priority-none"
+Don't indicate any priority for target registers.
+.IP "\fB\-mlra\-priority\-compact\fR" 4
+.IX Item "-mlra-priority-compact"
+Indicate target register priority for r0..r3 / r12..r15.
+.IP "\fB\-mlra\-priority\-noncompact\fR" 4
+.IX Item "-mlra-priority-noncompact"
+Reduce target register priority for r0..r3 / r12..r15.
+.IP "\fB\-mmillicode\fR" 4
+.IX Item "-mmillicode"
+When optimizing for size (using \fB\-Os\fR), prologues and epilogues
+that have to save or restore a large number of registers are often
+shortened by using call to a special function in libgcc; this is
+referred to as a \fImillicode\fR call.  As these calls can pose
+performance issues, and/or cause linking issues when linking in a
+nonstandard way, this option is provided to turn on or off millicode
+call generation.
+.IP "\fB\-mcode\-density\-frame\fR" 4
+.IX Item "-mcode-density-frame"
+This option enable the compiler to emit \f(CW\*(C`enter\*(C'\fR and \f(CW\*(C`leave\*(C'\fR
+instructions.  These instructions are only valid for CPUs with
+code-density feature.
+.IP "\fB\-mmixed\-code\fR" 4
+.IX Item "-mmixed-code"
+Tweak register allocation to help 16\-bit instruction generation.
+This generally has the effect of decreasing the average instruction size
+while increasing the instruction count.
+.IP "\fB\-mq\-class\fR" 4
+.IX Item "-mq-class"
+Enable \fBq\fR instruction alternatives.
+This is the default for \fB\-Os\fR.
+.IP "\fB\-mRcq\fR" 4
+.IX Item "-mRcq"
+Enable \fBRcq\fR constraint handling.  
+Most short code generation depends on this.
+This is the default.
+.IP "\fB\-mRcw\fR" 4
+.IX Item "-mRcw"
+Enable \fBRcw\fR constraint handling.  
+Most ccfsm condexec mostly depends on this.
+This is the default.
+.IP "\fB\-msize\-level=\fR\fIlevel\fR" 4
+.IX Item "-msize-level=level"
+Fine-tune size optimization with regards to instruction lengths and alignment.
+The recognized values for \fIlevel\fR are:
+.RS 4
+.IP "\fB0\fR" 4
+.IX Item "0"
+No size optimization.  This level is deprecated and treated like \fB1\fR.
+.IP "\fB1\fR" 4
+.IX Item "1"
+Short instructions are used opportunistically.
+.IP "\fB2\fR" 4
+.IX Item "2"
+In addition, alignment of loops and of code after barriers are dropped.
+.IP "\fB3\fR" 4
+.IX Item "3"
+In addition, optional data alignment is dropped, and the option \fBOs\fR is enabled.
+.RE
+.RS 4
+.Sp
+This defaults to \fB3\fR when \fB\-Os\fR is in effect.  Otherwise,
+the behavior when this is not set is equivalent to level \fB1\fR.
+.RE
+.IP "\fB\-mtune=\fR\fIcpu\fR" 4
+.IX Item "-mtune=cpu"
+Set instruction scheduling parameters for \fIcpu\fR, overriding any implied
+by \fB\-mcpu=\fR.
+.Sp
+Supported values for \fIcpu\fR are
+.RS 4
+.IP "\fB\s-1ARC600\s0\fR" 4
+.IX Item "ARC600"
+Tune for \s-1ARC600 CPU.\s0
+.IP "\fB\s-1ARC601\s0\fR" 4
+.IX Item "ARC601"
+Tune for \s-1ARC601 CPU.\s0
+.IP "\fB\s-1ARC700\s0\fR" 4
+.IX Item "ARC700"
+Tune for \s-1ARC700 CPU\s0 with standard multiplier block.
+.IP "\fBARC700\-xmac\fR" 4
+.IX Item "ARC700-xmac"
+Tune for \s-1ARC700 CPU\s0 with \s-1XMAC\s0 block.
+.IP "\fB\s-1ARC725D\s0\fR" 4
+.IX Item "ARC725D"
+Tune for \s-1ARC725D CPU.\s0
+.IP "\fB\s-1ARC750D\s0\fR" 4
+.IX Item "ARC750D"
+Tune for \s-1ARC750D CPU.\s0
+.RE
+.RS 4
+.RE
+.IP "\fB\-mmultcost=\fR\fInum\fR" 4
+.IX Item "-mmultcost=num"
+Cost to assume for a multiply instruction, with \fB4\fR being equal to a
+normal instruction.
+.IP "\fB\-munalign\-prob\-threshold=\fR\fIprobability\fR" 4
+.IX Item "-munalign-prob-threshold=probability"
+Set probability threshold for unaligning branches.
+When tuning for \fB\s-1ARC700\s0\fR and optimizing for speed, branches without
+filled delay slot are preferably emitted unaligned and long, unless
+profiling indicates that the probability for the branch to be taken
+is below \fIprobability\fR.  
+The default is (\s-1REG_BR_PROB_BASE/2\s0), i.e. 5000.
+.PP
+The following options are maintained for backward compatibility, but
+are now deprecated and will be removed in a future release:
+.IP "\fB\-margonaut\fR" 4
+.IX Item "-margonaut"
+Obsolete \s-1FPX.\s0
+.IP "\fB\-mbig\-endian\fR" 4
+.IX Item "-mbig-endian"
+.PD 0
+.IP "\fB\-EB\fR" 4
+.IX Item "-EB"
+.PD
+Compile code for big-endian targets.  Use of these options is now
+deprecated.  Big-endian code is supported by configuring \s-1GCC\s0 to build
+\&\f(CW\*(C`arceb\-elf32\*(C'\fR and \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR targets,
+for which big endian is the default.
+.IP "\fB\-mlittle\-endian\fR" 4
+.IX Item "-mlittle-endian"
+.PD 0
+.IP "\fB\-EL\fR" 4
+.IX Item "-EL"
+.PD
+Compile code for little-endian targets.  Use of these options is now
+deprecated.  Little-endian code is supported by configuring \s-1GCC\s0 to build 
+\&\f(CW\*(C`arc\-elf32\*(C'\fR and \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR targets,
+for which little endian is the default.
+.IP "\fB\-mbarrel_shifter\fR" 4
+.IX Item "-mbarrel_shifter"
+Replaced by \fB\-mbarrel\-shifter\fR.
+.IP "\fB\-mdpfp_compact\fR" 4
+.IX Item "-mdpfp_compact"
+Replaced by \fB\-mdpfp\-compact\fR.
+.IP "\fB\-mdpfp_fast\fR" 4
+.IX Item "-mdpfp_fast"
+Replaced by \fB\-mdpfp\-fast\fR.
+.IP "\fB\-mdsp_packa\fR" 4
+.IX Item "-mdsp_packa"
+Replaced by \fB\-mdsp\-packa\fR.
+.IP "\fB\-mEA\fR" 4
+.IX Item "-mEA"
+Replaced by \fB\-mea\fR.
+.IP "\fB\-mmac_24\fR" 4
+.IX Item "-mmac_24"
+Replaced by \fB\-mmac\-24\fR.
+.IP "\fB\-mmac_d16\fR" 4
+.IX Item "-mmac_d16"
+Replaced by \fB\-mmac\-d16\fR.
+.IP "\fB\-mspfp_compact\fR" 4
+.IX Item "-mspfp_compact"
+Replaced by \fB\-mspfp\-compact\fR.
+.IP "\fB\-mspfp_fast\fR" 4
+.IX Item "-mspfp_fast"
+Replaced by \fB\-mspfp\-fast\fR.
+.IP "\fB\-mtune=\fR\fIcpu\fR" 4
+.IX Item "-mtune=cpu"
+Values \fBarc600\fR, \fBarc601\fR, \fBarc700\fR and
+\&\fBarc700\-xmac\fR for \fIcpu\fR are replaced by \fB\s-1ARC600\s0\fR,
+\&\fB\s-1ARC601\s0\fR, \fB\s-1ARC700\s0\fR and \fBARC700\-xmac\fR respectively.
+.IP "\fB\-multcost=\fR\fInum\fR" 4
+.IX Item "-multcost=num"
+Replaced by \fB\-mmultcost\fR.
+.PP
+\fI\s-1ARM\s0 Options\fR
+.IX Subsection "ARM Options"
+.PP
+These \fB\-m\fR options are defined for the \s-1ARM\s0 port:
+.IP "\fB\-mabi=\fR\fIname\fR" 4
+.IX Item "-mabi=name"
+Generate code for the specified \s-1ABI.\s0  Permissible values are: \fBapcs-gnu\fR,
+\&\fBatpcs\fR, \fBaapcs\fR, \fBaapcs-linux\fR and \fBiwmmxt\fR.
+.IP "\fB\-mapcs\-frame\fR" 4
+.IX Item "-mapcs-frame"
+Generate a stack frame that is compliant with the \s-1ARM\s0 Procedure Call
+Standard for all functions, even if this is not strictly necessary for
+correct execution of the code.  Specifying \fB\-fomit\-frame\-pointer\fR
+with this option causes the stack frames not to be generated for
+leaf functions.  The default is \fB\-mno\-apcs\-frame\fR.
+This option is deprecated.
+.IP "\fB\-mapcs\fR" 4
+.IX Item "-mapcs"
+This is a synonym for \fB\-mapcs\-frame\fR and is deprecated.
+.IP "\fB\-mthumb\-interwork\fR" 4
+.IX Item "-mthumb-interwork"
+Generate code that supports calling between the \s-1ARM\s0 and Thumb
+instruction sets.  Without this option, on pre\-v5 architectures, the
+two instruction sets cannot be reliably used inside one program.  The
+default is \fB\-mno\-thumb\-interwork\fR, since slightly larger code
+is generated when \fB\-mthumb\-interwork\fR is specified.  In \s-1AAPCS\s0
+configurations this option is meaningless.
+.IP "\fB\-mno\-sched\-prolog\fR" 4
+.IX Item "-mno-sched-prolog"
+Prevent the reordering of instructions in the function prologue, or the
+merging of those instruction with the instructions in the function's
+body.  This means that all functions start with a recognizable set
+of instructions (or in fact one of a choice from a small set of
+different function prologues), and this information can be used to
+locate the start of functions inside an executable piece of code.  The
+default is \fB\-msched\-prolog\fR.
+.IP "\fB\-mfloat\-abi=\fR\fIname\fR" 4
+.IX Item "-mfloat-abi=name"
+Specifies which floating-point \s-1ABI\s0 to use.  Permissible values
+are: \fBsoft\fR, \fBsoftfp\fR and \fBhard\fR.
+.Sp
+Specifying \fBsoft\fR causes \s-1GCC\s0 to generate output containing
+library calls for floating-point operations.
+\&\fBsoftfp\fR allows the generation of code using hardware floating-point
+instructions, but still uses the soft-float calling conventions.
+\&\fBhard\fR allows generation of floating-point instructions
+and uses FPU-specific calling conventions.
+.Sp
+The default depends on the specific target configuration.  Note that
+the hard-float and soft-float ABIs are not link-compatible; you must
+compile your entire program with the same \s-1ABI,\s0 and link with a
+compatible set of libraries.
+.IP "\fB\-mgeneral\-regs\-only\fR" 4
+.IX Item "-mgeneral-regs-only"
+Generate code which uses only the general-purpose registers.  This will prevent
+the compiler from using floating-point and Advanced \s-1SIMD\s0 registers but will not
+impose any restrictions on the assembler.
+.IP "\fB\-mlittle\-endian\fR" 4
+.IX Item "-mlittle-endian"
+Generate code for a processor running in little-endian mode.  This is
+the default for all standard configurations.
+.IP "\fB\-mbig\-endian\fR" 4
+.IX Item "-mbig-endian"
+Generate code for a processor running in big-endian mode; the default is
+to compile code for a little-endian processor.
+.IP "\fB\-mbe8\fR" 4
+.IX Item "-mbe8"
+.PD 0
+.IP "\fB\-mbe32\fR" 4
+.IX Item "-mbe32"
+.PD
+When linking a big-endian image select between \s-1BE8\s0 and \s-1BE32\s0 formats.
+The option has no effect for little-endian images and is ignored.  The
+default is dependent on the selected target architecture.  For ARMv6
+and later architectures the default is \s-1BE8,\s0 for older architectures
+the default is \s-1BE32.\s0  \s-1BE32\s0 format has been deprecated by \s-1ARM.\s0
+.IP "\fB\-march=\fR\fIname\fR[\fB+extension...\fR]" 4
+.IX Item "-march=name[+extension...]"
+This specifies the name of the target \s-1ARM\s0 architecture.  \s-1GCC\s0 uses this
+name to determine what kind of instructions it can emit when generating
+assembly code.  This option can be used in conjunction with or instead
+of the \fB\-mcpu=\fR option.
+.Sp
+Permissible names are:
+\&\fBarmv4t\fR,
+\&\fBarmv5t\fR, \fBarmv5te\fR,
+\&\fBarmv6\fR, \fBarmv6j\fR, \fBarmv6k\fR, \fBarmv6kz\fR, \fBarmv6t2\fR,
+\&\fBarmv6z\fR, \fBarmv6zk\fR,
+\&\fBarmv7\fR, \fBarmv7\-a\fR, \fBarmv7ve\fR, 
+\&\fBarmv8\-a\fR, \fBarmv8.1\-a\fR, \fBarmv8.2\-a\fR, \fBarmv8.3\-a\fR,
+\&\fBarmv8.4\-a\fR,
+\&\fBarmv8.5\-a\fR,
+\&\fBarmv7\-r\fR,
+\&\fBarmv8\-r\fR,
+\&\fBarmv6\-m\fR, \fBarmv6s\-m\fR,
+\&\fBarmv7\-m\fR, \fBarmv7e\-m\fR,
+\&\fBarmv8\-m.base\fR, \fBarmv8\-m.main\fR,
+\&\fBiwmmxt\fR and \fBiwmmxt2\fR.
+.Sp
+Additionally, the following architectures, which lack support for the
+Thumb execution state, are recognized but support is deprecated: \fBarmv4\fR.
+.Sp
+Many of the architectures support extensions.  These can be added by
+appending \fB+\fR\fIextension\fR to the architecture name.  Extension
+options are processed in order and capabilities accumulate.  An extension
+will also enable any necessary base extensions
+upon which it depends.  For example, the \fB+crypto\fR extension
+will always enable the \fB+simd\fR extension.  The exception to the
+additive construction is for extensions that are prefixed with
+\&\fB+no...\fR: these extensions disable the specified option and
+any other extensions that may depend on the presence of that
+extension.
+.Sp
+For example, \fB\-march=armv7\-a+simd+nofp+vfpv4\fR is equivalent to
+writing \fB\-march=armv7\-a+vfpv4\fR since the \fB+simd\fR option is
+entirely disabled by the \fB+nofp\fR option that follows it.
+.Sp
+Most extension names are generically named, but have an effect that is
+dependent upon the architecture to which it is applied.  For example,
+the \fB+simd\fR option can be applied to both \fBarmv7\-a\fR and
+\&\fBarmv8\-a\fR architectures, but will enable the original ARMv7\-A
+Advanced \s-1SIMD\s0 (Neon) extensions for \fBarmv7\-a\fR and the ARMv8\-A
+variant for \fBarmv8\-a\fR.
+.Sp
+The table below lists the supported extensions for each architecture.
+Architectures not mentioned do not support any extensions.
+.RS 4
+.IP "\fBarmv5te\fR" 4
+.IX Item "armv5te"
+.PD 0
+.IP "\fBarmv6\fR" 4
+.IX Item "armv6"
+.IP "\fBarmv6j\fR" 4
+.IX Item "armv6j"
+.IP "\fBarmv6k\fR" 4
+.IX Item "armv6k"
+.IP "\fBarmv6kz\fR" 4
+.IX Item "armv6kz"
+.IP "\fBarmv6t2\fR" 4
+.IX Item "armv6t2"
+.IP "\fBarmv6z\fR" 4
+.IX Item "armv6z"
+.IP "\fBarmv6zk\fR" 4
+.IX Item "armv6zk"
+.RS 4
+.IP "\fB+fp\fR" 4
+.IX Item "+fp"
+.PD
+The VFPv2 floating-point instructions.  The extension \fB+vfpv2\fR can be
+used as an alias for this extension.
+.IP "\fB+nofp\fR" 4
+.IX Item "+nofp"
+Disable the floating-point instructions.
+.RE
+.RS 4
+.RE
+.IP "\fBarmv7\fR" 4
+.IX Item "armv7"
+The common subset of the ARMv7\-A, ARMv7\-R and ARMv7\-M architectures.
+.RS 4
+.IP "\fB+fp\fR" 4
+.IX Item "+fp"
+The VFPv3 floating-point instructions, with 16 double-precision
+registers.  The extension \fB+vfpv3\-d16\fR can be used as an alias
+for this extension.  Note that floating-point is not supported by the
+base ARMv7\-M architecture, but is compatible with both the ARMv7\-A and
+ARMv7\-R architectures.
+.IP "\fB+nofp\fR" 4
+.IX Item "+nofp"
+Disable the floating-point instructions.
+.RE
+.RS 4
+.RE
+.IP "\fBarmv7\-a\fR" 4
+.IX Item "armv7-a"
+.RS 4
+.PD 0
+.IP "\fB+mp\fR" 4
+.IX Item "+mp"
+.PD
+The multiprocessing extension.
+.IP "\fB+sec\fR" 4
+.IX Item "+sec"
+The security extension.
+.IP "\fB+fp\fR" 4
+.IX Item "+fp"
+The VFPv3 floating-point instructions, with 16 double-precision
+registers.  The extension \fB+vfpv3\-d16\fR can be used as an alias
+for this extension.
+.IP "\fB+simd\fR" 4
+.IX Item "+simd"
+The Advanced \s-1SIMD\s0 (Neon) v1 and the VFPv3 floating-point instructions.
+The extensions \fB+neon\fR and \fB+neon\-vfpv3\fR can be used as aliases
+for this extension.
+.IP "\fB+vfpv3\fR" 4
+.IX Item "+vfpv3"
+The VFPv3 floating-point instructions, with 32 double-precision
+registers.
+.IP "\fB+vfpv3\-d16\-fp16\fR" 4
+.IX Item "+vfpv3-d16-fp16"
+The VFPv3 floating-point instructions, with 16 double-precision
+registers and the half-precision floating-point conversion operations.
+.IP "\fB+vfpv3\-fp16\fR" 4
+.IX Item "+vfpv3-fp16"
+The VFPv3 floating-point instructions, with 32 double-precision
+registers and the half-precision floating-point conversion operations.
+.IP "\fB+vfpv4\-d16\fR" 4
+.IX Item "+vfpv4-d16"
+The VFPv4 floating-point instructions, with 16 double-precision
+registers.
+.IP "\fB+vfpv4\fR" 4
+.IX Item "+vfpv4"
+The VFPv4 floating-point instructions, with 32 double-precision
+registers.
+.IP "\fB+neon\-fp16\fR" 4
+.IX Item "+neon-fp16"
+The Advanced \s-1SIMD\s0 (Neon) v1 and the VFPv3 floating-point instructions, with
+the half-precision floating-point conversion operations.
+.IP "\fB+neon\-vfpv4\fR" 4
+.IX Item "+neon-vfpv4"
+The Advanced \s-1SIMD\s0 (Neon) v2 and the VFPv4 floating-point instructions.
+.IP "\fB+nosimd\fR" 4
+.IX Item "+nosimd"
+Disable the Advanced \s-1SIMD\s0 instructions (does not disable floating point).
+.IP "\fB+nofp\fR" 4
+.IX Item "+nofp"
+Disable the floating-point and Advanced \s-1SIMD\s0 instructions.
+.RE
+.RS 4
+.RE
+.IP "\fBarmv7ve\fR" 4
+.IX Item "armv7ve"
+The extended version of the ARMv7\-A architecture with support for
+virtualization.
+.RS 4
+.IP "\fB+fp\fR" 4
+.IX Item "+fp"
+The VFPv4 floating-point instructions, with 16 double-precision registers.
+The extension \fB+vfpv4\-d16\fR can be used as an alias for this extension.
+.IP "\fB+simd\fR" 4
+.IX Item "+simd"
+The Advanced \s-1SIMD\s0 (Neon) v2 and the VFPv4 floating-point instructions.  The
+extension \fB+neon\-vfpv4\fR can be used as an alias for this extension.
+.IP "\fB+vfpv3\-d16\fR" 4
+.IX Item "+vfpv3-d16"
+The VFPv3 floating-point instructions, with 16 double-precision
+registers.
+.IP "\fB+vfpv3\fR" 4
+.IX Item "+vfpv3"
+The VFPv3 floating-point instructions, with 32 double-precision
+registers.
+.IP "\fB+vfpv3\-d16\-fp16\fR" 4
+.IX Item "+vfpv3-d16-fp16"
+The VFPv3 floating-point instructions, with 16 double-precision
+registers and the half-precision floating-point conversion operations.
+.IP "\fB+vfpv3\-fp16\fR" 4
+.IX Item "+vfpv3-fp16"
+The VFPv3 floating-point instructions, with 32 double-precision
+registers and the half-precision floating-point conversion operations.
+.IP "\fB+vfpv4\-d16\fR" 4
+.IX Item "+vfpv4-d16"
+The VFPv4 floating-point instructions, with 16 double-precision
+registers.
+.IP "\fB+vfpv4\fR" 4
+.IX Item "+vfpv4"
+The VFPv4 floating-point instructions, with 32 double-precision
+registers.
+.IP "\fB+neon\fR" 4
+.IX Item "+neon"
+The Advanced \s-1SIMD\s0 (Neon) v1 and the VFPv3 floating-point instructions.
+The extension \fB+neon\-vfpv3\fR can be used as an alias for this extension.
+.IP "\fB+neon\-fp16\fR" 4
+.IX Item "+neon-fp16"
+The Advanced \s-1SIMD\s0 (Neon) v1 and the VFPv3 floating-point instructions, with
+the half-precision floating-point conversion operations.
+.IP "\fB+nosimd\fR" 4
+.IX Item "+nosimd"
+Disable the Advanced \s-1SIMD\s0 instructions (does not disable floating point).
+.IP "\fB+nofp\fR" 4
+.IX Item "+nofp"
+Disable the floating-point and Advanced \s-1SIMD\s0 instructions.
+.RE
+.RS 4
+.RE
+.IP "\fBarmv8\-a\fR" 4
+.IX Item "armv8-a"
+.RS 4
+.PD 0
+.IP "\fB+crc\fR" 4
+.IX Item "+crc"
+.PD
+The Cyclic Redundancy Check (\s-1CRC\s0) instructions.
+.IP "\fB+simd\fR" 4
+.IX Item "+simd"
+The ARMv8\-A Advanced \s-1SIMD\s0 and floating-point instructions.
+.IP "\fB+crypto\fR" 4
+.IX Item "+crypto"
+The cryptographic instructions.
+.IP "\fB+nocrypto\fR" 4
+.IX Item "+nocrypto"
+Disable the cryptographic instructions.
+.IP "\fB+nofp\fR" 4
+.IX Item "+nofp"
+Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
+.IP "\fB+sb\fR" 4
+.IX Item "+sb"
+Speculation Barrier Instruction.
+.IP "\fB+predres\fR" 4
+.IX Item "+predres"
+Execution and Data Prediction Restriction Instructions.
+.RE
+.RS 4
+.RE
+.IP "\fBarmv8.1\-a\fR" 4
+.IX Item "armv8.1-a"
+.RS 4
+.PD 0
+.IP "\fB+simd\fR" 4
+.IX Item "+simd"
+.PD
+The ARMv8.1\-A Advanced \s-1SIMD\s0 and floating-point instructions.
+.IP "\fB+crypto\fR" 4
+.IX Item "+crypto"
+The cryptographic instructions.  This also enables the Advanced \s-1SIMD\s0 and
+floating-point instructions.
+.IP "\fB+nocrypto\fR" 4
+.IX Item "+nocrypto"
+Disable the cryptographic instructions.
+.IP "\fB+nofp\fR" 4
+.IX Item "+nofp"
+Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
+.IP "\fB+sb\fR" 4
+.IX Item "+sb"
+Speculation Barrier Instruction.
+.IP "\fB+predres\fR" 4
+.IX Item "+predres"
+Execution and Data Prediction Restriction Instructions.
+.RE
+.RS 4
+.RE
+.IP "\fBarmv8.2\-a\fR" 4
+.IX Item "armv8.2-a"
+.PD 0
+.IP "\fBarmv8.3\-a\fR" 4
+.IX Item "armv8.3-a"
+.RS 4
+.IP "\fB+fp16\fR" 4
+.IX Item "+fp16"
+.PD
+The half-precision floating-point data processing instructions.
+This also enables the Advanced \s-1SIMD\s0 and floating-point instructions.
+.IP "\fB+fp16fml\fR" 4
+.IX Item "+fp16fml"
+The half-precision floating-point fmla extension.  This also enables
+the half-precision floating-point extension and Advanced \s-1SIMD\s0 and
+floating-point instructions.
+.IP "\fB+simd\fR" 4
+.IX Item "+simd"
+The ARMv8.1\-A Advanced \s-1SIMD\s0 and floating-point instructions.
+.IP "\fB+crypto\fR" 4
+.IX Item "+crypto"
+The cryptographic instructions.  This also enables the Advanced \s-1SIMD\s0 and
+floating-point instructions.
+.IP "\fB+dotprod\fR" 4
+.IX Item "+dotprod"
+Enable the Dot Product extension.  This also enables Advanced \s-1SIMD\s0 instructions.
+.IP "\fB+nocrypto\fR" 4
+.IX Item "+nocrypto"
+Disable the cryptographic extension.
+.IP "\fB+nofp\fR" 4
+.IX Item "+nofp"
+Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
+.IP "\fB+sb\fR" 4
+.IX Item "+sb"
+Speculation Barrier Instruction.
+.IP "\fB+predres\fR" 4
+.IX Item "+predres"
+Execution and Data Prediction Restriction Instructions.
+.RE
+.RS 4
+.RE
+.IP "\fBarmv8.4\-a\fR" 4
+.IX Item "armv8.4-a"
+.RS 4
+.PD 0
+.IP "\fB+fp16\fR" 4
+.IX Item "+fp16"
+.PD
+The half-precision floating-point data processing instructions.
+This also enables the Advanced \s-1SIMD\s0 and floating-point instructions as well
+as the Dot Product extension and the half-precision floating-point fmla
+extension.
+.IP "\fB+simd\fR" 4
+.IX Item "+simd"
+The ARMv8.3\-A Advanced \s-1SIMD\s0 and floating-point instructions as well as the
+Dot Product extension.
+.IP "\fB+crypto\fR" 4
+.IX Item "+crypto"
+The cryptographic instructions.  This also enables the Advanced \s-1SIMD\s0 and
+floating-point instructions as well as the Dot Product extension.
+.IP "\fB+nocrypto\fR" 4
+.IX Item "+nocrypto"
+Disable the cryptographic extension.
+.IP "\fB+nofp\fR" 4
+.IX Item "+nofp"
+Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
+.IP "\fB+sb\fR" 4
+.IX Item "+sb"
+Speculation Barrier Instruction.
+.IP "\fB+predres\fR" 4
+.IX Item "+predres"
+Execution and Data Prediction Restriction Instructions.
+.RE
+.RS 4
+.RE
+.IP "\fBarmv8.5\-a\fR" 4
+.IX Item "armv8.5-a"
+.RS 4
+.PD 0
+.IP "\fB+fp16\fR" 4
+.IX Item "+fp16"
+.PD
+The half-precision floating-point data processing instructions.
+This also enables the Advanced \s-1SIMD\s0 and floating-point instructions as well
+as the Dot Product extension and the half-precision floating-point fmla
+extension.
+.IP "\fB+simd\fR" 4
+.IX Item "+simd"
+The ARMv8.3\-A Advanced \s-1SIMD\s0 and floating-point instructions as well as the
+Dot Product extension.
+.IP "\fB+crypto\fR" 4
+.IX Item "+crypto"
+The cryptographic instructions.  This also enables the Advanced \s-1SIMD\s0 and
+floating-point instructions as well as the Dot Product extension.
+.IP "\fB+nocrypto\fR" 4
+.IX Item "+nocrypto"
+Disable the cryptographic extension.
+.IP "\fB+nofp\fR" 4
+.IX Item "+nofp"
+Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
+.RE
+.RS 4
+.RE
+.IP "\fBarmv7\-r\fR" 4
+.IX Item "armv7-r"
+.RS 4
+.PD 0
+.IP "\fB+fp.sp\fR" 4
+.IX Item "+fp.sp"
+.PD
+The single-precision VFPv3 floating-point instructions.  The extension
+\&\fB+vfpv3xd\fR can be used as an alias for this extension.
+.IP "\fB+fp\fR" 4
+.IX Item "+fp"
+The VFPv3 floating-point instructions with 16 double-precision registers.
+The extension +vfpv3\-d16 can be used as an alias for this extension.
+.IP "\fB+vfpv3xd\-d16\-fp16\fR" 4
+.IX Item "+vfpv3xd-d16-fp16"
+The single-precision VFPv3 floating-point instructions with 16 double-precision
+registers and the half-precision floating-point conversion operations.
+.IP "\fB+vfpv3\-d16\-fp16\fR" 4
+.IX Item "+vfpv3-d16-fp16"
+The VFPv3 floating-point instructions with 16 double-precision
+registers and the half-precision floating-point conversion operations.
+.IP "\fB+nofp\fR" 4
+.IX Item "+nofp"
+Disable the floating-point extension.
+.IP "\fB+idiv\fR" 4
+.IX Item "+idiv"
+The ARM-state integer division instructions.
+.IP "\fB+noidiv\fR" 4
+.IX Item "+noidiv"
+Disable the ARM-state integer division extension.
+.RE
+.RS 4
+.RE
+.IP "\fBarmv7e\-m\fR" 4
+.IX Item "armv7e-m"
+.RS 4
+.PD 0
+.IP "\fB+fp\fR" 4
+.IX Item "+fp"
+.PD
+The single-precision VFPv4 floating-point instructions.
+.IP "\fB+fpv5\fR" 4
+.IX Item "+fpv5"
+The single-precision FPv5 floating-point instructions.
+.IP "\fB+fp.dp\fR" 4
+.IX Item "+fp.dp"
+The single\- and double-precision FPv5 floating-point instructions.
+.IP "\fB+nofp\fR" 4
+.IX Item "+nofp"
+Disable the floating-point extensions.
+.RE
+.RS 4
+.RE
+.IP "\fBarmv8\-m.main\fR" 4
+.IX Item "armv8-m.main"
+.RS 4
+.PD 0
+.IP "\fB+dsp\fR" 4
+.IX Item "+dsp"
+.PD
+The \s-1DSP\s0 instructions.
+.IP "\fB+nodsp\fR" 4
+.IX Item "+nodsp"
+Disable the \s-1DSP\s0 extension.
+.IP "\fB+fp\fR" 4
+.IX Item "+fp"
+The single-precision floating-point instructions.
+.IP "\fB+fp.dp\fR" 4
+.IX Item "+fp.dp"
+The single\- and double-precision floating-point instructions.
+.IP "\fB+nofp\fR" 4
+.IX Item "+nofp"
+Disable the floating-point extension.
+.RE
+.RS 4
+.RE
+.IP "\fBarmv8\-r\fR" 4
+.IX Item "armv8-r"
+.RS 4
+.PD 0
+.IP "\fB+crc\fR" 4
+.IX Item "+crc"
+.PD
+The Cyclic Redundancy Check (\s-1CRC\s0) instructions.
+.IP "\fB+fp.sp\fR" 4
+.IX Item "+fp.sp"
+The single-precision FPv5 floating-point instructions.
+.IP "\fB+simd\fR" 4
+.IX Item "+simd"
+The ARMv8\-A Advanced \s-1SIMD\s0 and floating-point instructions.
+.IP "\fB+crypto\fR" 4
+.IX Item "+crypto"
+The cryptographic instructions.
+.IP "\fB+nocrypto\fR" 4
+.IX Item "+nocrypto"
+Disable the cryptographic instructions.
+.IP "\fB+nofp\fR" 4
+.IX Item "+nofp"
+Disable the floating-point, Advanced \s-1SIMD\s0 and cryptographic instructions.
+.RE
+.RS 4
+.RE
+.RE
+.RS 4
+.Sp
+\&\fB\-march=native\fR causes the compiler to auto-detect the architecture
+of the build computer.  At present, this feature is only supported on
+GNU/Linux, and not all architectures are recognized.  If the auto-detect
+is unsuccessful the option has no effect.
+.RE
+.IP "\fB\-mtune=\fR\fIname\fR" 4
+.IX Item "-mtune=name"
+This option specifies the name of the target \s-1ARM\s0 processor for
+which \s-1GCC\s0 should tune the performance of the code.
+For some \s-1ARM\s0 implementations better performance can be obtained by using
+this option.
+Permissible names are: \fBarm7tdmi\fR, \fBarm7tdmi\-s\fR, \fBarm710t\fR,
+\&\fBarm720t\fR, \fBarm740t\fR, \fBstrongarm\fR, \fBstrongarm110\fR,
+\&\fBstrongarm1100\fR, 0\fBstrongarm1110\fR, \fBarm8\fR, \fBarm810\fR,
+\&\fBarm9\fR, \fBarm9e\fR, \fBarm920\fR, \fBarm920t\fR, \fBarm922t\fR,
+\&\fBarm946e\-s\fR, \fBarm966e\-s\fR, \fBarm968e\-s\fR, \fBarm926ej\-s\fR,
+\&\fBarm940t\fR, \fBarm9tdmi\fR, \fBarm10tdmi\fR, \fBarm1020t\fR,
+\&\fBarm1026ej\-s\fR, \fBarm10e\fR, \fBarm1020e\fR, \fBarm1022e\fR,
+\&\fBarm1136j\-s\fR, \fBarm1136jf\-s\fR, \fBmpcore\fR, \fBmpcorenovfp\fR,
+\&\fBarm1156t2\-s\fR, \fBarm1156t2f\-s\fR, \fBarm1176jz\-s\fR, \fBarm1176jzf\-s\fR,
+\&\fBgeneric\-armv7\-a\fR, \fBcortex\-a5\fR, \fBcortex\-a7\fR, \fBcortex\-a8\fR,
+\&\fBcortex\-a9\fR, \fBcortex\-a12\fR, \fBcortex\-a15\fR, \fBcortex\-a17\fR,
+\&\fBcortex\-a32\fR, \fBcortex\-a35\fR, \fBcortex\-a53\fR, \fBcortex\-a55\fR,
+\&\fBcortex\-a57\fR, \fBcortex\-a72\fR, \fBcortex\-a73\fR, \fBcortex\-a75\fR,
+\&\fBcortex\-a76\fR, \fBares\fR, \fBcortex\-r4\fR, \fBcortex\-r4f\fR,
+\&\fBcortex\-r5\fR, \fBcortex\-r7\fR, \fBcortex\-r8\fR, \fBcortex\-r52\fR,
+\&\fBcortex\-m0\fR, \fBcortex\-m0plus\fR, \fBcortex\-m1\fR, \fBcortex\-m3\fR,
+\&\fBcortex\-m4\fR, \fBcortex\-m7\fR, \fBcortex\-m23\fR, \fBcortex\-m33\fR,
+\&\fBcortex\-m1.small\-multiply\fR, \fBcortex\-m0.small\-multiply\fR,
+\&\fBcortex\-m0plus.small\-multiply\fR, \fBexynos\-m1\fR, \fBmarvell\-pj4\fR,
+\&\fBneoverse\-n1\fR, \fBxscale\fR, \fBiwmmxt\fR, \fBiwmmxt2\fR,
+\&\fBep9312\fR, \fBfa526\fR, \fBfa626\fR, \fBfa606te\fR, \fBfa626te\fR,
+\&\fBfmp626\fR, \fBfa726te\fR, \fBxgene1\fR.
+.Sp
+Additionally, this option can specify that \s-1GCC\s0 should tune the performance
+of the code for a big.LITTLE system.  Permissible names are:
+\&\fBcortex\-a15.cortex\-a7\fR, \fBcortex\-a17.cortex\-a7\fR,
+\&\fBcortex\-a57.cortex\-a53\fR, \fBcortex\-a72.cortex\-a53\fR,
+\&\fBcortex\-a72.cortex\-a35\fR, \fBcortex\-a73.cortex\-a53\fR,
+\&\fBcortex\-a75.cortex\-a55\fR, \fBcortex\-a76.cortex\-a55\fR.
+.Sp
+\&\fB\-mtune=generic\-\fR\fIarch\fR specifies that \s-1GCC\s0 should tune the
+performance for a blend of processors within architecture \fIarch\fR.
+The aim is to generate code that run well on the current most popular
+processors, balancing between optimizations that benefit some CPUs in the
+range, and avoiding performance pitfalls of other CPUs.  The effects of
+this option may change in future \s-1GCC\s0 versions as \s-1CPU\s0 models come and go.
+.Sp
+\&\fB\-mtune\fR permits the same extension options as \fB\-mcpu\fR, but
+the extension options do not affect the tuning of the generated code.
+.Sp
+\&\fB\-mtune=native\fR causes the compiler to auto-detect the \s-1CPU\s0
+of the build computer.  At present, this feature is only supported on
+GNU/Linux, and not all architectures are recognized.  If the auto-detect is
+unsuccessful the option has no effect.
+.IP "\fB\-mcpu=\fR\fIname\fR[\fB+extension...\fR]" 4
+.IX Item "-mcpu=name[+extension...]"
+This specifies the name of the target \s-1ARM\s0 processor.  \s-1GCC\s0 uses this name
+to derive the name of the target \s-1ARM\s0 architecture (as if specified
+by \fB\-march\fR) and the \s-1ARM\s0 processor type for which to tune for
+performance (as if specified by \fB\-mtune\fR).  Where this option
+is used in conjunction with \fB\-march\fR or \fB\-mtune\fR,
+those options take precedence over the appropriate part of this option.
+.Sp
+Many of the supported CPUs implement optional architectural
+extensions.  Where this is so the architectural extensions are
+normally enabled by default.  If implementations that lack the
+extension exist, then the extension syntax can be used to disable
+those extensions that have been omitted.  For floating-point and
+Advanced \s-1SIMD\s0 (Neon) instructions, the settings of the options
+\&\fB\-mfloat\-abi\fR and \fB\-mfpu\fR must also be considered:
+floating-point and Advanced \s-1SIMD\s0 instructions will only be used if
+\&\fB\-mfloat\-abi\fR is not set to \fBsoft\fR; and any setting of
+\&\fB\-mfpu\fR other than \fBauto\fR will override the available
+floating-point and \s-1SIMD\s0 extension instructions.
+.Sp
+For example, \fBcortex\-a9\fR can be found in three major
+configurations: integer only, with just a floating-point unit or with
+floating-point and Advanced \s-1SIMD.\s0  The default is to enable all the
+instructions, but the extensions \fB+nosimd\fR and \fB+nofp\fR can
+be used to disable just the \s-1SIMD\s0 or both the \s-1SIMD\s0 and floating-point
+instructions respectively.
+.Sp
+Permissible names for this option are the same as those for
+\&\fB\-mtune\fR.
+.Sp
+The following extension options are common to the listed CPUs:
+.RS 4
+.IP "\fB+nodsp\fR" 4
+.IX Item "+nodsp"
+Disable the \s-1DSP\s0 instructions on \fBcortex\-m33\fR.
+.IP "\fB+nofp\fR" 4
+.IX Item "+nofp"
+Disables the floating-point instructions on \fBarm9e\fR,
+\&\fBarm946e\-s\fR, \fBarm966e\-s\fR, \fBarm968e\-s\fR, \fBarm10e\fR,
+\&\fBarm1020e\fR, \fBarm1022e\fR, \fBarm926ej\-s\fR,
+\&\fBarm1026ej\-s\fR, \fBcortex\-r5\fR, \fBcortex\-r7\fR, \fBcortex\-r8\fR,
+\&\fBcortex\-m4\fR, \fBcortex\-m7\fR and \fBcortex\-m33\fR.
+Disables the floating-point and \s-1SIMD\s0 instructions on
+\&\fBgeneric\-armv7\-a\fR, \fBcortex\-a5\fR, \fBcortex\-a7\fR,
+\&\fBcortex\-a8\fR, \fBcortex\-a9\fR, \fBcortex\-a12\fR,
+\&\fBcortex\-a15\fR, \fBcortex\-a17\fR, \fBcortex\-a15.cortex\-a7\fR,
+\&\fBcortex\-a17.cortex\-a7\fR, \fBcortex\-a32\fR, \fBcortex\-a35\fR,
+\&\fBcortex\-a53\fR and \fBcortex\-a55\fR.
+.IP "\fB+nofp.dp\fR" 4
+.IX Item "+nofp.dp"
+Disables the double-precision component of the floating-point instructions
+on \fBcortex\-r5\fR, \fBcortex\-r7\fR, \fBcortex\-r8\fR, \fBcortex\-r52\fR and
+\&\fBcortex\-m7\fR.
+.IP "\fB+nosimd\fR" 4
+.IX Item "+nosimd"
+Disables the \s-1SIMD\s0 (but not floating-point) instructions on
+\&\fBgeneric\-armv7\-a\fR, \fBcortex\-a5\fR, \fBcortex\-a7\fR
+and \fBcortex\-a9\fR.
+.IP "\fB+crypto\fR" 4
+.IX Item "+crypto"
+Enables the cryptographic instructions on \fBcortex\-a32\fR,
+\&\fBcortex\-a35\fR, \fBcortex\-a53\fR, \fBcortex\-a55\fR, \fBcortex\-a57\fR,
+\&\fBcortex\-a72\fR, \fBcortex\-a73\fR, \fBcortex\-a75\fR, \fBexynos\-m1\fR,
+\&\fBxgene1\fR, \fBcortex\-a57.cortex\-a53\fR, \fBcortex\-a72.cortex\-a53\fR,
+\&\fBcortex\-a73.cortex\-a35\fR, \fBcortex\-a73.cortex\-a53\fR and
+\&\fBcortex\-a75.cortex\-a55\fR.
+.RE
+.RS 4
+.Sp
+Additionally the \fBgeneric\-armv7\-a\fR pseudo target defaults to
+VFPv3 with 16 double-precision registers.  It supports the following
+extension options: \fBmp\fR, \fBsec\fR, \fBvfpv3\-d16\fR,
+\&\fBvfpv3\fR, \fBvfpv3\-d16\-fp16\fR, \fBvfpv3\-fp16\fR,
+\&\fBvfpv4\-d16\fR, \fBvfpv4\fR, \fBneon\fR, \fBneon\-vfpv3\fR,
+\&\fBneon\-fp16\fR, \fBneon\-vfpv4\fR.  The meanings are the same as for
+the extensions to \fB\-march=armv7\-a\fR.
+.Sp
+\&\fB\-mcpu=generic\-\fR\fIarch\fR is also permissible, and is
+equivalent to \fB\-march=\fR\fIarch\fR \fB\-mtune=generic\-\fR\fIarch\fR.
+See \fB\-mtune\fR for more information.
+.Sp
+\&\fB\-mcpu=native\fR causes the compiler to auto-detect the \s-1CPU\s0
+of the build computer.  At present, this feature is only supported on
+GNU/Linux, and not all architectures are recognized.  If the auto-detect
+is unsuccessful the option has no effect.
+.RE
+.IP "\fB\-mfpu=\fR\fIname\fR" 4
+.IX Item "-mfpu=name"
+This specifies what floating-point hardware (or hardware emulation) is
+available on the target.  Permissible names are: \fBauto\fR, \fBvfpv2\fR,
+\&\fBvfpv3\fR,
+\&\fBvfpv3\-fp16\fR, \fBvfpv3\-d16\fR, \fBvfpv3\-d16\-fp16\fR, \fBvfpv3xd\fR,
+\&\fBvfpv3xd\-fp16\fR, \fBneon\-vfpv3\fR, \fBneon\-fp16\fR, \fBvfpv4\fR,
+\&\fBvfpv4\-d16\fR, \fBfpv4\-sp\-d16\fR, \fBneon\-vfpv4\fR,
+\&\fBfpv5\-d16\fR, \fBfpv5\-sp\-d16\fR,
+\&\fBfp\-armv8\fR, \fBneon\-fp\-armv8\fR and \fBcrypto\-neon\-fp\-armv8\fR.
+Note that \fBneon\fR is an alias for \fBneon\-vfpv3\fR and \fBvfp\fR
+is an alias for \fBvfpv2\fR.
+.Sp
+The setting \fBauto\fR is the default and is special.  It causes the
+compiler to select the floating-point and Advanced \s-1SIMD\s0 instructions
+based on the settings of \fB\-mcpu\fR and \fB\-march\fR.
+.Sp
+If the selected floating-point hardware includes the \s-1NEON\s0 extension
+(e.g. \fB\-mfpu=neon\fR), note that floating-point
+operations are not generated by \s-1GCC\s0's auto-vectorization pass unless
+\&\fB\-funsafe\-math\-optimizations\fR is also specified.  This is
+because \s-1NEON\s0 hardware does not fully implement the \s-1IEEE 754\s0 standard for
+floating-point arithmetic (in particular denormal values are treated as
+zero), so the use of \s-1NEON\s0 instructions may lead to a loss of precision.
+.Sp
+You can also set the fpu name at function level by using the \f(CW\*(C`target("fpu=")\*(C'\fR function attributes or pragmas.
+.IP "\fB\-mfp16\-format=\fR\fIname\fR" 4
+.IX Item "-mfp16-format=name"
+Specify the format of the \f(CW\*(C`_\|_fp16\*(C'\fR half-precision floating-point type.
+Permissible names are \fBnone\fR, \fBieee\fR, and \fBalternative\fR;
+the default is \fBnone\fR, in which case the \f(CW\*(C`_\|_fp16\*(C'\fR type is not
+defined.
+.IP "\fB\-mstructure\-size\-boundary=\fR\fIn\fR" 4
+.IX Item "-mstructure-size-boundary=n"
+The sizes of all structures and unions are rounded up to a multiple
+of the number of bits set by this option.  Permissible values are 8, 32
+and 64.  The default value varies for different toolchains.  For the \s-1COFF\s0
+targeted toolchain the default value is 8.  A value of 64 is only allowed
+if the underlying \s-1ABI\s0 supports it.
+.Sp
+Specifying a larger number can produce faster, more efficient code, but
+can also increase the size of the program.  Different values are potentially
+incompatible.  Code compiled with one value cannot necessarily expect to
+work with code or libraries compiled with another value, if they exchange
+information using structures or unions.
+.Sp
+This option is deprecated.
+.IP "\fB\-mabort\-on\-noreturn\fR" 4
+.IX Item "-mabort-on-noreturn"
+Generate a call to the function \f(CW\*(C`abort\*(C'\fR at the end of a
+\&\f(CW\*(C`noreturn\*(C'\fR function.  It is executed if the function tries to
+return.
+.IP "\fB\-mlong\-calls\fR" 4
+.IX Item "-mlong-calls"
+.PD 0
+.IP "\fB\-mno\-long\-calls\fR" 4
+.IX Item "-mno-long-calls"
+.PD
+Tells the compiler to perform function calls by first loading the
+address of the function into a register and then performing a subroutine
+call on this register.  This switch is needed if the target function
+lies outside of the 64\-megabyte addressing range of the offset-based
+version of subroutine call instruction.
+.Sp
+Even if this switch is enabled, not all function calls are turned
+into long calls.  The heuristic is that static functions, functions
+that have the \f(CW\*(C`short_call\*(C'\fR attribute, functions that are inside
+the scope of a \f(CW\*(C`#pragma no_long_calls\*(C'\fR directive, and functions whose
+definitions have already been compiled within the current compilation
+unit are not turned into long calls.  The exceptions to this rule are
+that weak function definitions, functions with the \f(CW\*(C`long_call\*(C'\fR
+attribute or the \f(CW\*(C`section\*(C'\fR attribute, and functions that are within
+the scope of a \f(CW\*(C`#pragma long_calls\*(C'\fR directive are always
+turned into long calls.
+.Sp
+This feature is not enabled by default.  Specifying
+\&\fB\-mno\-long\-calls\fR restores the default behavior, as does
+placing the function calls within the scope of a \f(CW\*(C`#pragma
+long_calls_off\*(C'\fR directive.  Note these switches have no effect on how
+the compiler generates code to handle function calls via function
+pointers.
+.IP "\fB\-msingle\-pic\-base\fR" 4
+.IX Item "-msingle-pic-base"
+Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
+loading it in the prologue for each function.  The runtime system is
+responsible for initializing this register with an appropriate value
+before execution begins.
+.IP "\fB\-mpic\-register=\fR\fIreg\fR" 4
+.IX Item "-mpic-register=reg"
+Specify the register to be used for \s-1PIC\s0 addressing.
+For standard \s-1PIC\s0 base case, the default is any suitable register
+determined by compiler.  For single \s-1PIC\s0 base case, the default is
+\&\fBR9\fR if target is \s-1EABI\s0 based or stack-checking is enabled,
+otherwise the default is \fBR10\fR.
+.IP "\fB\-mpic\-data\-is\-text\-relative\fR" 4
+.IX Item "-mpic-data-is-text-relative"
+Assume that the displacement between the text and data segments is fixed
+at static link time.  This permits using PC-relative addressing
+operations to access data known to be in the data segment.  For
+non-VxWorks \s-1RTP\s0 targets, this option is enabled by default.  When
+disabled on such targets, it will enable \fB\-msingle\-pic\-base\fR by
+default.
+.IP "\fB\-mpoke\-function\-name\fR" 4
+.IX Item "-mpoke-function-name"
+Write the name of each function into the text section, directly
+preceding the function prologue.  The generated code is similar to this:
+.Sp
+.Vb 9
+\&             t0
+\&                 .ascii "arm_poke_function_name", 0
+\&                 .align
+\&             t1
+\&                 .word 0xff000000 + (t1 \- t0)
+\&             arm_poke_function_name
+\&                 mov     ip, sp
+\&                 stmfd   sp!, {fp, ip, lr, pc}
+\&                 sub     fp, ip, #4
+.Ve
+.Sp
+When performing a stack backtrace, code can inspect the value of
+\&\f(CW\*(C`pc\*(C'\fR stored at \f(CW\*(C`fp + 0\*(C'\fR.  If the trace function then looks at
+location \f(CW\*(C`pc \- 12\*(C'\fR and the top 8 bits are set, then we know that
+there is a function name embedded immediately preceding this location
+and has length \f(CW\*(C`((pc[\-3]) & 0xff000000)\*(C'\fR.
+.IP "\fB\-mthumb\fR" 4
+.IX Item "-mthumb"
+.PD 0
+.IP "\fB\-marm\fR" 4
+.IX Item "-marm"
+.PD
+Select between generating code that executes in \s-1ARM\s0 and Thumb
+states.  The default for most configurations is to generate code
+that executes in \s-1ARM\s0 state, but the default can be changed by
+configuring \s-1GCC\s0 with the \fB\-\-with\-mode=\fR\fIstate\fR
+configure option.
+.Sp
+You can also override the \s-1ARM\s0 and Thumb mode for each function
+by using the \f(CW\*(C`target("thumb")\*(C'\fR and \f(CW\*(C`target("arm")\*(C'\fR function attributes or pragmas.
+.IP "\fB\-mflip\-thumb\fR" 4
+.IX Item "-mflip-thumb"
+Switch ARM/Thumb modes on alternating functions.
+This option is provided for regression testing of mixed Thumb/ARM code
+generation, and is not intended for ordinary use in compiling code.
+.IP "\fB\-mtpcs\-frame\fR" 4
+.IX Item "-mtpcs-frame"
+Generate a stack frame that is compliant with the Thumb Procedure Call
+Standard for all non-leaf functions.  (A leaf function is one that does
+not call any other functions.)  The default is \fB\-mno\-tpcs\-frame\fR.
+.IP "\fB\-mtpcs\-leaf\-frame\fR" 4
+.IX Item "-mtpcs-leaf-frame"
+Generate a stack frame that is compliant with the Thumb Procedure Call
+Standard for all leaf functions.  (A leaf function is one that does
+not call any other functions.)  The default is \fB\-mno\-apcs\-leaf\-frame\fR.
+.IP "\fB\-mcallee\-super\-interworking\fR" 4
+.IX Item "-mcallee-super-interworking"
+Gives all externally visible functions in the file being compiled an \s-1ARM\s0
+instruction set header which switches to Thumb mode before executing the
+rest of the function.  This allows these functions to be called from
+non-interworking code.  This option is not valid in \s-1AAPCS\s0 configurations
+because interworking is enabled by default.
+.IP "\fB\-mcaller\-super\-interworking\fR" 4
+.IX Item "-mcaller-super-interworking"
+Allows calls via function pointers (including virtual functions) to
+execute correctly regardless of whether the target code has been
+compiled for interworking or not.  There is a small overhead in the cost
+of executing a function pointer if this option is enabled.  This option
+is not valid in \s-1AAPCS\s0 configurations because interworking is enabled
+by default.
+.IP "\fB\-mtp=\fR\fIname\fR" 4
+.IX Item "-mtp=name"
+Specify the access model for the thread local storage pointer.  The valid
+models are \fBsoft\fR, which generates calls to \f(CW\*(C`_\|_aeabi_read_tp\*(C'\fR,
+\&\fBcp15\fR, which fetches the thread pointer from \f(CW\*(C`cp15\*(C'\fR directly
+(supported in the arm6k architecture), and \fBauto\fR, which uses the
+best available method for the selected processor.  The default setting is
+\&\fBauto\fR.
+.IP "\fB\-mtls\-dialect=\fR\fIdialect\fR" 4
+.IX Item "-mtls-dialect=dialect"
+Specify the dialect to use for accessing thread local storage.  Two
+\&\fIdialect\fRs are supported\-\-\-\fBgnu\fR and \fBgnu2\fR.  The
+\&\fBgnu\fR dialect selects the original \s-1GNU\s0 scheme for supporting
+local and global dynamic \s-1TLS\s0 models.  The \fBgnu2\fR dialect
+selects the \s-1GNU\s0 descriptor scheme, which provides better performance
+for shared libraries.  The \s-1GNU\s0 descriptor scheme is compatible with
+the original scheme, but does require new assembler, linker and
+library support.  Initial and local exec \s-1TLS\s0 models are unaffected by
+this option and always use the original scheme.
+.IP "\fB\-mword\-relocations\fR" 4
+.IX Item "-mword-relocations"
+Only generate absolute relocations on word-sized values (i.e. R_ARM_ABS32).
+This is enabled by default on targets (uClinux, SymbianOS) where the runtime
+loader imposes this restriction, and when \fB\-fpic\fR or \fB\-fPIC\fR
+is specified. This option conflicts with \fB\-mslow\-flash\-data\fR.
+.IP "\fB\-mfix\-cortex\-m3\-ldrd\fR" 4
+.IX Item "-mfix-cortex-m3-ldrd"
+Some Cortex\-M3 cores can cause data corruption when \f(CW\*(C`ldrd\*(C'\fR instructions
+with overlapping destination and base registers are used.  This option avoids
+generating these instructions.  This option is enabled by default when
+\&\fB\-mcpu=cortex\-m3\fR is specified.
+.IP "\fB\-munaligned\-access\fR" 4
+.IX Item "-munaligned-access"
+.PD 0
+.IP "\fB\-mno\-unaligned\-access\fR" 4
+.IX Item "-mno-unaligned-access"
+.PD
+Enables (or disables) reading and writing of 16\- and 32\- bit values
+from addresses that are not 16\- or 32\- bit aligned.  By default
+unaligned access is disabled for all pre\-ARMv6, all ARMv6\-M and for
+ARMv8\-M Baseline architectures, and enabled for all other
+architectures.  If unaligned access is not enabled then words in packed
+data structures are accessed a byte at a time.
+.Sp
+The \s-1ARM\s0 attribute \f(CW\*(C`Tag_CPU_unaligned_access\*(C'\fR is set in the
+generated object file to either true or false, depending upon the
+setting of this option.  If unaligned access is enabled then the
+preprocessor symbol \f(CW\*(C`_\|_ARM_FEATURE_UNALIGNED\*(C'\fR is also
+defined.
+.IP "\fB\-mneon\-for\-64bits\fR" 4
+.IX Item "-mneon-for-64bits"
+Enables using Neon to handle scalar 64\-bits operations. This is
+disabled by default since the cost of moving data from core registers
+to Neon is high.
+.IP "\fB\-mslow\-flash\-data\fR" 4
+.IX Item "-mslow-flash-data"
+Assume loading data from flash is slower than fetching instruction.
+Therefore literal load is minimized for better performance.
+This option is only supported when compiling for ARMv7 M\-profile and
+off by default. It conflicts with \fB\-mword\-relocations\fR.
+.IP "\fB\-masm\-syntax\-unified\fR" 4
+.IX Item "-masm-syntax-unified"
+Assume inline assembler is using unified asm syntax.  The default is
+currently off which implies divided syntax.  This option has no impact
+on Thumb2. However, this may change in future releases of \s-1GCC.\s0
+Divided syntax should be considered deprecated.
+.IP "\fB\-mrestrict\-it\fR" 4
+.IX Item "-mrestrict-it"
+Restricts generation of \s-1IT\s0 blocks to conform to the rules of ARMv8\-A.
+\&\s-1IT\s0 blocks can only contain a single 16\-bit instruction from a select
+set of instructions. This option is on by default for ARMv8\-A Thumb mode.
+.IP "\fB\-mprint\-tune\-info\fR" 4
+.IX Item "-mprint-tune-info"
+Print \s-1CPU\s0 tuning information as comment in assembler file.  This is
+an option used only for regression testing of the compiler and not
+intended for ordinary use in compiling code.  This option is disabled
+by default.
+.IP "\fB\-mverbose\-cost\-dump\fR" 4
+.IX Item "-mverbose-cost-dump"
+Enable verbose cost model dumping in the debug dump files.  This option is
+provided for use in debugging the compiler.
+.IP "\fB\-mpure\-code\fR" 4
+.IX Item "-mpure-code"
+Do not allow constant data to be placed in code sections.
+Additionally, when compiling for \s-1ELF\s0 object format give all text sections the
+\&\s-1ELF\s0 processor-specific section attribute \f(CW\*(C`SHF_ARM_PURECODE\*(C'\fR.  This option
+is only available when generating non-pic code for M\-profile targets with the
+\&\s-1MOVT\s0 instruction.
+.IP "\fB\-mcmse\fR" 4
+.IX Item "-mcmse"
+Generate secure code as per the \*(L"ARMv8\-M Security Extensions: Requirements on
+Development Tools Engineering Specification\*(R", which can be found on
+<\fBhttp://infocenter.arm.com/help/topic/com.arm.doc.ecm0359818/ECM0359818_armv8m_security_extensions_reqs_on_dev_tools_1_0.pdf\fR>.
+.PP
+\fI\s-1AVR\s0 Options\fR
+.IX Subsection "AVR Options"
+.PP
+These options are defined for \s-1AVR\s0 implementations:
+.IP "\fB\-mmcu=\fR\fImcu\fR" 4
+.IX Item "-mmcu=mcu"
+Specify Atmel \s-1AVR\s0 instruction set architectures (\s-1ISA\s0) or \s-1MCU\s0 type.
+.Sp
+The default for this option is@tie{}\fBavr2\fR.
+.Sp
+\&\s-1GCC\s0 supports the following \s-1AVR\s0 devices and ISAs:
+.RS 4
+.ie n .IP """avr2""" 4
+.el .IP "\f(CWavr2\fR" 4
+.IX Item "avr2"
+\&\*(L"Classic\*(R" devices with up to 8@tie{}KiB of program memory.
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`attiny22\*(C'\fR, \f(CW\*(C`attiny26\*(C'\fR, \f(CW\*(C`at90c8534\*(C'\fR, \f(CW\*(C`at90s2313\*(C'\fR, \f(CW\*(C`at90s2323\*(C'\fR, \f(CW\*(C`at90s2333\*(C'\fR, \f(CW\*(C`at90s2343\*(C'\fR, \f(CW\*(C`at90s4414\*(C'\fR, \f(CW\*(C`at90s4433\*(C'\fR, \f(CW\*(C`at90s4434\*(C'\fR, \f(CW\*(C`at90s8515\*(C'\fR, \f(CW\*(C`at90s8535\*(C'\fR.
+.ie n .IP """avr25""" 4
+.el .IP "\f(CWavr25\fR" 4
+.IX Item "avr25"
+\&\*(L"Classic\*(R" devices with up to 8@tie{}KiB of program memory and with the \f(CW\*(C`MOVW\*(C'\fR instruction.
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`ata5272\*(C'\fR, \f(CW\*(C`ata6616c\*(C'\fR, \f(CW\*(C`attiny13\*(C'\fR, \f(CW\*(C`attiny13a\*(C'\fR, \f(CW\*(C`attiny2313\*(C'\fR, \f(CW\*(C`attiny2313a\*(C'\fR, \f(CW\*(C`attiny24\*(C'\fR, \f(CW\*(C`attiny24a\*(C'\fR, \f(CW\*(C`attiny25\*(C'\fR, \f(CW\*(C`attiny261\*(C'\fR, \f(CW\*(C`attiny261a\*(C'\fR, \f(CW\*(C`attiny43u\*(C'\fR, \f(CW\*(C`attiny4313\*(C'\fR, \f(CW\*(C`attiny44\*(C'\fR, \f(CW\*(C`attiny44a\*(C'\fR, \f(CW\*(C`attiny441\*(C'\fR, \f(CW\*(C`attiny45\*(C'\fR, \f(CW\*(C`attiny461\*(C'\fR, \f(CW\*(C`attiny461a\*(C'\fR, \f(CW\*(C`attiny48\*(C'\fR, \f(CW\*(C`attiny828\*(C'\fR, \f(CW\*(C`attiny84\*(C'\fR, \f(CW\*(C`attiny84a\*(C'\fR, \f(CW\*(C`attiny841\*(C'\fR, \f(CW\*(C`attiny85\*(C'\fR, \f(CW\*(C`attiny861\*(C'\fR, \f(CW\*(C`attiny861a\*(C'\fR, \f(CW\*(C`attiny87\*(C'\fR, \f(CW\*(C`attiny88\*(C'\fR, \f(CW\*(C`at86rf401\*(C'\fR.
+.ie n .IP """avr3""" 4
+.el .IP "\f(CWavr3\fR" 4
+.IX Item "avr3"
+\&\*(L"Classic\*(R" devices with 16@tie{}KiB up to 64@tie{}KiB of  program memory.
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`at43usb355\*(C'\fR, \f(CW\*(C`at76c711\*(C'\fR.
+.ie n .IP """avr31""" 4
+.el .IP "\f(CWavr31\fR" 4
+.IX Item "avr31"
+\&\*(L"Classic\*(R" devices with 128@tie{}KiB of program memory.
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atmega103\*(C'\fR, \f(CW\*(C`at43usb320\*(C'\fR.
+.ie n .IP """avr35""" 4
+.el .IP "\f(CWavr35\fR" 4
+.IX Item "avr35"
+\&\*(L"Classic\*(R" devices with 16@tie{}KiB up to 64@tie{}KiB of program memory and with the \f(CW\*(C`MOVW\*(C'\fR instruction.
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`ata5505\*(C'\fR, \f(CW\*(C`ata6617c\*(C'\fR, \f(CW\*(C`ata664251\*(C'\fR, \f(CW\*(C`atmega16u2\*(C'\fR, \f(CW\*(C`atmega32u2\*(C'\fR, \f(CW\*(C`atmega8u2\*(C'\fR, \f(CW\*(C`attiny1634\*(C'\fR, \f(CW\*(C`attiny167\*(C'\fR, \f(CW\*(C`at90usb162\*(C'\fR, \f(CW\*(C`at90usb82\*(C'\fR.
+.ie n .IP """avr4""" 4
+.el .IP "\f(CWavr4\fR" 4
+.IX Item "avr4"
+\&\*(L"Enhanced\*(R" devices with up to 8@tie{}KiB of program memory.
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`ata6285\*(C'\fR, \f(CW\*(C`ata6286\*(C'\fR, \f(CW\*(C`ata6289\*(C'\fR, \f(CW\*(C`ata6612c\*(C'\fR, \f(CW\*(C`atmega48\*(C'\fR, \f(CW\*(C`atmega48a\*(C'\fR, \f(CW\*(C`atmega48p\*(C'\fR, \f(CW\*(C`atmega48pa\*(C'\fR, \f(CW\*(C`atmega48pb\*(C'\fR, \f(CW\*(C`atmega8\*(C'\fR, \f(CW\*(C`atmega8a\*(C'\fR, \f(CW\*(C`atmega8hva\*(C'\fR, \f(CW\*(C`atmega8515\*(C'\fR, \f(CW\*(C`atmega8535\*(C'\fR, \f(CW\*(C`atmega88\*(C'\fR, \f(CW\*(C`atmega88a\*(C'\fR, \f(CW\*(C`atmega88p\*(C'\fR, \f(CW\*(C`atmega88pa\*(C'\fR, \f(CW\*(C`atmega88pb\*(C'\fR, \f(CW\*(C`at90pwm1\*(C'\fR, \f(CW\*(C`at90pwm2\*(C'\fR, \f(CW\*(C`at90pwm2b\*(C'\fR, \f(CW\*(C`at90pwm3\*(C'\fR, \f(CW\*(C`at90pwm3b\*(C'\fR, \f(CW\*(C`at90pwm81\*(C'\fR.
+.ie n .IP """avr5""" 4
+.el .IP "\f(CWavr5\fR" 4
+.IX Item "avr5"
+\&\*(L"Enhanced\*(R" devices with 16@tie{}KiB up to 64@tie{}KiB of program memory.
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`ata5702m322\*(C'\fR, \f(CW\*(C`ata5782\*(C'\fR, \f(CW\*(C`ata5790\*(C'\fR, \f(CW\*(C`ata5790n\*(C'\fR, \f(CW\*(C`ata5791\*(C'\fR, \f(CW\*(C`ata5795\*(C'\fR, \f(CW\*(C`ata5831\*(C'\fR, \f(CW\*(C`ata6613c\*(C'\fR, \f(CW\*(C`ata6614q\*(C'\fR, \f(CW\*(C`ata8210\*(C'\fR, \f(CW\*(C`ata8510\*(C'\fR, \f(CW\*(C`atmega16\*(C'\fR, \f(CW\*(C`atmega16a\*(C'\fR, \f(CW\*(C`atmega16hva\*(C'\fR, \f(CW\*(C`atmega16hva2\*(C'\fR, \f(CW\*(C`atmega16hvb\*(C'\fR, \f(CW\*(C`atmega16hvbrevb\*(C'\fR, \f(CW\*(C`atmega16m1\*(C'\fR, \f(CW\*(C`atmega16u4\*(C'\fR, \f(CW\*(C`atmega161\*(C'\fR, \f(CW\*(C`atmega162\*(C'\fR, \f(CW\*(C`atmega163\*(C'\fR, \f(CW\*(C`atmega164a\*(C'\fR, \f(CW\*(C`atmega164p\*(C'\fR, \f(CW\*(C`atmega164pa\*(C'\fR, \f(CW\*(C`atmega165\*(C'\fR, \f(CW\*(C`atmega165a\*(C'\fR, \f(CW\*(C`atmega165p\*(C'\fR, \f(CW\*(C`atmega165pa\*(C'\fR, \f(CW\*(C`atmega168\*(C'\fR, \f(CW\*(C`atmega168a\*(C'\fR, \f(CW\*(C`atmega168p\*(C'\fR, \f(CW\*(C`atmega168pa\*(C'\fR, \f(CW\*(C`atmega168pb\*(C'\fR, \f(CW\*(C`atmega169\*(C'\fR, \f(CW\*(C`atmega169a\*(C'\fR, \f(CW\*(C`atmega169p\*(C'\fR, \f(CW\*(C`atmega169pa\*(C'\fR, \f(CW\*(C`atmega32\*(C'\fR, \f(CW\*(C`atmega32a\*(C'\fR, \f(CW\*(C`atmega32c1\*(C'\fR, \f(CW\*(C`atmega32hvb\*(C'\fR, \f(CW\*(C`atmega32hvbrevb\*(C'\fR, \f(CW\*(C`atmega32m1\*(C'\fR, \f(CW\*(C`atmega32u4\*(C'\fR, \f(CW\*(C`atmega32u6\*(C'\fR, \f(CW\*(C`atmega323\*(C'\fR, \f(CW\*(C`atmega324a\*(C'\fR, \f(CW\*(C`atmega324p\*(C'\fR, \f(CW\*(C`atmega324pa\*(C'\fR, \f(CW\*(C`atmega325\*(C'\fR, \f(CW\*(C`atmega325a\*(C'\fR, \f(CW\*(C`atmega325p\*(C'\fR, \f(CW\*(C`atmega325pa\*(C'\fR, \f(CW\*(C`atmega3250\*(C'\fR, \f(CW\*(C`atmega3250a\*(C'\fR, \f(CW\*(C`atmega3250p\*(C'\fR, \f(CW\*(C`atmega3250pa\*(C'\fR, \f(CW\*(C`atmega328\*(C'\fR, \f(CW\*(C`atmega328p\*(C'\fR, \f(CW\*(C`atmega328pb\*(C'\fR, \f(CW\*(C`atmega329\*(C'\fR, \f(CW\*(C`atmega329a\*(C'\fR, \f(CW\*(C`atmega329p\*(C'\fR, \f(CW\*(C`atmega329pa\*(C'\fR, \f(CW\*(C`atmega3290\*(C'\fR, \f(CW\*(C`atmega3290a\*(C'\fR, \f(CW\*(C`atmega3290p\*(C'\fR, \f(CW\*(C`atmega3290pa\*(C'\fR, \f(CW\*(C`atmega406\*(C'\fR, \f(CW\*(C`atmega64\*(C'\fR, \f(CW\*(C`atmega64a\*(C'\fR, \f(CW\*(C`atmega64c1\*(C'\fR, \f(CW\*(C`atmega64hve\*(C'\fR, \f(CW\*(C`atmega64hve2\*(C'\fR, \f(CW\*(C`atmega64m1\*(C'\fR, \f(CW\*(C`atmega64rfr2\*(C'\fR, \f(CW\*(C`atmega640\*(C'\fR, \f(CW\*(C`atmega644\*(C'\fR, \f(CW\*(C`atmega644a\*(C'\fR, \f(CW\*(C`atmega644p\*(C'\fR, \f(CW\*(C`atmega644pa\*(C'\fR, \f(CW\*(C`atmega644rfr2\*(C'\fR, \f(CW\*(C`atmega645\*(C'\fR, \f(CW\*(C`atmega645a\*(C'\fR, \f(CW\*(C`atmega645p\*(C'\fR, \f(CW\*(C`atmega6450\*(C'\fR, \f(CW\*(C`atmega6450a\*(C'\fR, \f(CW\*(C`atmega6450p\*(C'\fR, \f(CW\*(C`atmega649\*(C'\fR, \f(CW\*(C`atmega649a\*(C'\fR, \f(CW\*(C`atmega649p\*(C'\fR, \f(CW\*(C`atmega6490\*(C'\fR, \f(CW\*(C`atmega6490a\*(C'\fR, \f(CW\*(C`atmega6490p\*(C'\fR, \f(CW\*(C`at90can32\*(C'\fR, \f(CW\*(C`at90can64\*(C'\fR, \f(CW\*(C`at90pwm161\*(C'\fR, \f(CW\*(C`at90pwm216\*(C'\fR, \f(CW\*(C`at90pwm316\*(C'\fR, \f(CW\*(C`at90scr100\*(C'\fR, \f(CW\*(C`at90usb646\*(C'\fR, \f(CW\*(C`at90usb647\*(C'\fR, \f(CW\*(C`at94k\*(C'\fR, \f(CW\*(C`m3000\*(C'\fR.
+.ie n .IP """avr51""" 4
+.el .IP "\f(CWavr51\fR" 4
+.IX Item "avr51"
+\&\*(L"Enhanced\*(R" devices with 128@tie{}KiB of program memory.
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atmega128\*(C'\fR, \f(CW\*(C`atmega128a\*(C'\fR, \f(CW\*(C`atmega128rfa1\*(C'\fR, \f(CW\*(C`atmega128rfr2\*(C'\fR, \f(CW\*(C`atmega1280\*(C'\fR, \f(CW\*(C`atmega1281\*(C'\fR, \f(CW\*(C`atmega1284\*(C'\fR, \f(CW\*(C`atmega1284p\*(C'\fR, \f(CW\*(C`atmega1284rfr2\*(C'\fR, \f(CW\*(C`at90can128\*(C'\fR, \f(CW\*(C`at90usb1286\*(C'\fR, \f(CW\*(C`at90usb1287\*(C'\fR.
+.ie n .IP """avr6""" 4
+.el .IP "\f(CWavr6\fR" 4
+.IX Item "avr6"
+\&\*(L"Enhanced\*(R" devices with 3\-byte \s-1PC,\s0 i.e. with more than 128@tie{}KiB of program memory.
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atmega256rfr2\*(C'\fR, \f(CW\*(C`atmega2560\*(C'\fR, \f(CW\*(C`atmega2561\*(C'\fR, \f(CW\*(C`atmega2564rfr2\*(C'\fR.
+.ie n .IP """avrxmega2""" 4
+.el .IP "\f(CWavrxmega2\fR" 4
+.IX Item "avrxmega2"
+\&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 8@tie{}KiB and up to 64@tie{}KiB of program memory.
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega16a4\*(C'\fR, \f(CW\*(C`atxmega16a4u\*(C'\fR, \f(CW\*(C`atxmega16c4\*(C'\fR, \f(CW\*(C`atxmega16d4\*(C'\fR, \f(CW\*(C`atxmega16e5\*(C'\fR, \f(CW\*(C`atxmega32a4\*(C'\fR, \f(CW\*(C`atxmega32a4u\*(C'\fR, \f(CW\*(C`atxmega32c3\*(C'\fR, \f(CW\*(C`atxmega32c4\*(C'\fR, \f(CW\*(C`atxmega32d3\*(C'\fR, \f(CW\*(C`atxmega32d4\*(C'\fR, \f(CW\*(C`atxmega32e5\*(C'\fR, \f(CW\*(C`atxmega8e5\*(C'\fR.
+.ie n .IP """avrxmega3""" 4
+.el .IP "\f(CWavrxmega3\fR" 4
+.IX Item "avrxmega3"
+\&\*(L"\s-1XMEGA\*(R"\s0 devices with up to 64@tie{}KiB of combined program memory and \s-1RAM,\s0 and with program memory visible in the \s-1RAM\s0 address space.
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`attiny1614\*(C'\fR, \f(CW\*(C`attiny1616\*(C'\fR, \f(CW\*(C`attiny1617\*(C'\fR, \f(CW\*(C`attiny212\*(C'\fR, \f(CW\*(C`attiny214\*(C'\fR, \f(CW\*(C`attiny3214\*(C'\fR, \f(CW\*(C`attiny3216\*(C'\fR, \f(CW\*(C`attiny3217\*(C'\fR, \f(CW\*(C`attiny412\*(C'\fR, \f(CW\*(C`attiny414\*(C'\fR, \f(CW\*(C`attiny416\*(C'\fR, \f(CW\*(C`attiny417\*(C'\fR, \f(CW\*(C`attiny814\*(C'\fR, \f(CW\*(C`attiny816\*(C'\fR, \f(CW\*(C`attiny817\*(C'\fR.
+.ie n .IP """avrxmega4""" 4
+.el .IP "\f(CWavrxmega4\fR" 4
+.IX Item "avrxmega4"
+\&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory.
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega64a3\*(C'\fR, \f(CW\*(C`atxmega64a3u\*(C'\fR, \f(CW\*(C`atxmega64a4u\*(C'\fR, \f(CW\*(C`atxmega64b1\*(C'\fR, \f(CW\*(C`atxmega64b3\*(C'\fR, \f(CW\*(C`atxmega64c3\*(C'\fR, \f(CW\*(C`atxmega64d3\*(C'\fR, \f(CW\*(C`atxmega64d4\*(C'\fR.
+.ie n .IP """avrxmega5""" 4
+.el .IP "\f(CWavrxmega5\fR" 4
+.IX Item "avrxmega5"
+\&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 64@tie{}KiB and up to 128@tie{}KiB of program memory and more than 64@tie{}KiB of \s-1RAM.\s0
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega64a1\*(C'\fR, \f(CW\*(C`atxmega64a1u\*(C'\fR.
+.ie n .IP """avrxmega6""" 4
+.el .IP "\f(CWavrxmega6\fR" 4
+.IX Item "avrxmega6"
+\&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 128@tie{}KiB of program memory.
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega128a3\*(C'\fR, \f(CW\*(C`atxmega128a3u\*(C'\fR, \f(CW\*(C`atxmega128b1\*(C'\fR, \f(CW\*(C`atxmega128b3\*(C'\fR, \f(CW\*(C`atxmega128c3\*(C'\fR, \f(CW\*(C`atxmega128d3\*(C'\fR, \f(CW\*(C`atxmega128d4\*(C'\fR, \f(CW\*(C`atxmega192a3\*(C'\fR, \f(CW\*(C`atxmega192a3u\*(C'\fR, \f(CW\*(C`atxmega192c3\*(C'\fR, \f(CW\*(C`atxmega192d3\*(C'\fR, \f(CW\*(C`atxmega256a3\*(C'\fR, \f(CW\*(C`atxmega256a3b\*(C'\fR, \f(CW\*(C`atxmega256a3bu\*(C'\fR, \f(CW\*(C`atxmega256a3u\*(C'\fR, \f(CW\*(C`atxmega256c3\*(C'\fR, \f(CW\*(C`atxmega256d3\*(C'\fR, \f(CW\*(C`atxmega384c3\*(C'\fR, \f(CW\*(C`atxmega384d3\*(C'\fR.
+.ie n .IP """avrxmega7""" 4
+.el .IP "\f(CWavrxmega7\fR" 4
+.IX Item "avrxmega7"
+\&\*(L"\s-1XMEGA\*(R"\s0 devices with more than 128@tie{}KiB of program memory and more than 64@tie{}KiB of \s-1RAM.\s0
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`atxmega128a1\*(C'\fR, \f(CW\*(C`atxmega128a1u\*(C'\fR, \f(CW\*(C`atxmega128a4u\*(C'\fR.
+.ie n .IP """avrtiny""" 4
+.el .IP "\f(CWavrtiny\fR" 4
+.IX Item "avrtiny"
+\&\*(L"\s-1TINY\*(R"\s0 Tiny core devices with 512@tie{}B up to 4@tie{}KiB of program memory.
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`attiny10\*(C'\fR, \f(CW\*(C`attiny20\*(C'\fR, \f(CW\*(C`attiny4\*(C'\fR, \f(CW\*(C`attiny40\*(C'\fR, \f(CW\*(C`attiny5\*(C'\fR, \f(CW\*(C`attiny9\*(C'\fR.
+.ie n .IP """avr1""" 4
+.el .IP "\f(CWavr1\fR" 4
+.IX Item "avr1"
+This \s-1ISA\s0 is implemented by the minimal \s-1AVR\s0 core and supported for assembler only.
+\&\fImcu\fR\f(CW@tie\fR{}= \f(CW\*(C`attiny11\*(C'\fR, \f(CW\*(C`attiny12\*(C'\fR, \f(CW\*(C`attiny15\*(C'\fR, \f(CW\*(C`attiny28\*(C'\fR, \f(CW\*(C`at90s1200\*(C'\fR.
+.RE
+.RS 4
+.RE
+.IP "\fB\-mabsdata\fR" 4
+.IX Item "-mabsdata"
+Assume that all data in static storage can be accessed by \s-1LDS / STS\s0
+instructions.  This option has only an effect on reduced Tiny devices like
+ATtiny40.  See also the \f(CW\*(C`absdata\*(C'\fR
+\&\fB\s-1AVR\s0 Variable Attributes,variable attribute\fR.
+.IP "\fB\-maccumulate\-args\fR" 4
+.IX Item "-maccumulate-args"
+Accumulate outgoing function arguments and acquire/release the needed
+stack space for outgoing function arguments once in function
+prologue/epilogue.  Without this option, outgoing arguments are pushed
+before calling a function and popped afterwards.
+.Sp
+Popping the arguments after the function call can be expensive on
+\&\s-1AVR\s0 so that accumulating the stack space might lead to smaller
+executables because arguments need not be removed from the
+stack after such a function call.
+.Sp
+This option can lead to reduced code size for functions that perform
+several calls to functions that get their arguments on the stack like
+calls to printf-like functions.
+.IP "\fB\-mbranch\-cost=\fR\fIcost\fR" 4
+.IX Item "-mbranch-cost=cost"
+Set the branch costs for conditional branch instructions to
+\&\fIcost\fR.  Reasonable values for \fIcost\fR are small, non-negative
+integers. The default branch cost is 0.
+.IP "\fB\-mcall\-prologues\fR" 4
+.IX Item "-mcall-prologues"
+Functions prologues/epilogues are expanded as calls to appropriate
+subroutines.  Code size is smaller.
+.IP "\fB\-mgas\-isr\-prologues\fR" 4
+.IX Item "-mgas-isr-prologues"
+Interrupt service routines (ISRs) may use the \f(CW\*(C`_\|_gcc_isr\*(C'\fR pseudo
+instruction supported by \s-1GNU\s0 Binutils.
+If this option is on, the feature can still be disabled for individual
+ISRs by means of the \fB\s-1AVR\s0 Function Attributes,,\f(CB\*(C`no_gccisr\*(C'\fB\fR
+function attribute.  This feature is activated per default
+if optimization is on (but not with \fB\-Og\fR, \f(CW@pxref\fR{Optimize Options}),
+and if \s-1GNU\s0 Binutils support \s-1PR21683\s0 (\f(CW\*(C`https://sourceware.org/PR21683\*(C'\fR).
+.IP "\fB\-mint8\fR" 4
+.IX Item "-mint8"
+Assume \f(CW\*(C`int\*(C'\fR to be 8\-bit integer.  This affects the sizes of all types: a
+\&\f(CW\*(C`char\*(C'\fR is 1 byte, an \f(CW\*(C`int\*(C'\fR is 1 byte, a \f(CW\*(C`long\*(C'\fR is 2 bytes,
+and \f(CW\*(C`long long\*(C'\fR is 4 bytes.  Please note that this option does not
+conform to the C standards, but it results in smaller code
+size.
+.IP "\fB\-mmain\-is\-OS_task\fR" 4
+.IX Item "-mmain-is-OS_task"
+Do not save registers in \f(CW\*(C`main\*(C'\fR.  The effect is the same like
+attaching attribute \fB\s-1AVR\s0 Function Attributes,,\f(CB\*(C`OS_task\*(C'\fB\fR
+to \f(CW\*(C`main\*(C'\fR. It is activated per default if optimization is on.
+.IP "\fB\-mn\-flash=\fR\fInum\fR" 4
+.IX Item "-mn-flash=num"
+Assume that the flash memory has a size of 
+\&\fInum\fR times 64@tie{}KiB.
+.IP "\fB\-mno\-interrupts\fR" 4
+.IX Item "-mno-interrupts"
+Generated code is not compatible with hardware interrupts.
+Code size is smaller.
+.IP "\fB\-mrelax\fR" 4
+.IX Item "-mrelax"
+Try to replace \f(CW\*(C`CALL\*(C'\fR resp. \f(CW\*(C`JMP\*(C'\fR instruction by the shorter
+\&\f(CW\*(C`RCALL\*(C'\fR resp. \f(CW\*(C`RJMP\*(C'\fR instruction if applicable.
+Setting \fB\-mrelax\fR just adds the \fB\-\-mlink\-relax\fR option to
+the assembler's command line and the \fB\-\-relax\fR option to the
+linker's command line.
+.Sp
+Jump relaxing is performed by the linker because jump offsets are not
+known before code is located. Therefore, the assembler code generated by the
+compiler is the same, but the instructions in the executable may
+differ from instructions in the assembler code.
+.Sp
+Relaxing must be turned on if linker stubs are needed, see the
+section on \f(CW\*(C`EIND\*(C'\fR and linker stubs below.
+.IP "\fB\-mrmw\fR" 4
+.IX Item "-mrmw"
+Assume that the device supports the Read-Modify-Write
+instructions \f(CW\*(C`XCH\*(C'\fR, \f(CW\*(C`LAC\*(C'\fR, \f(CW\*(C`LAS\*(C'\fR and \f(CW\*(C`LAT\*(C'\fR.
+.IP "\fB\-mshort\-calls\fR" 4
+.IX Item "-mshort-calls"
+Assume that \f(CW\*(C`RJMP\*(C'\fR and \f(CW\*(C`RCALL\*(C'\fR can target the whole
+program memory.
+.Sp
+This option is used internally for multilib selection.  It is
+not an optimization option, and you don't need to set it by hand.
+.IP "\fB\-msp8\fR" 4
+.IX Item "-msp8"
+Treat the stack pointer register as an 8\-bit register,
+i.e. assume the high byte of the stack pointer is zero.
+In general, you don't need to set this option by hand.
+.Sp
+This option is used internally by the compiler to select and
+build multilibs for architectures \f(CW\*(C`avr2\*(C'\fR and \f(CW\*(C`avr25\*(C'\fR.
+These architectures mix devices with and without \f(CW\*(C`SPH\*(C'\fR.
+For any setting other than \fB\-mmcu=avr2\fR or \fB\-mmcu=avr25\fR
+the compiler driver adds or removes this option from the compiler
+proper's command line, because the compiler then knows if the device
+or architecture has an 8\-bit stack pointer and thus no \f(CW\*(C`SPH\*(C'\fR
+register or not.
+.IP "\fB\-mstrict\-X\fR" 4
+.IX Item "-mstrict-X"
+Use address register \f(CW\*(C`X\*(C'\fR in a way proposed by the hardware.  This means
+that \f(CW\*(C`X\*(C'\fR is only used in indirect, post-increment or
+pre-decrement addressing.
+.Sp
+Without this option, the \f(CW\*(C`X\*(C'\fR register may be used in the same way
+as \f(CW\*(C`Y\*(C'\fR or \f(CW\*(C`Z\*(C'\fR which then is emulated by additional
+instructions.  
+For example, loading a value with \f(CW\*(C`X+const\*(C'\fR addressing with a
+small non-negative \f(CW\*(C`const < 64\*(C'\fR to a register \fIRn\fR is
+performed as
+.Sp
+.Vb 3
+\&        adiw r26, const   ; X += const
+\&        ld   <Rn>, X        ; <Rn> = *X
+\&        sbiw r26, const   ; X \-= const
+.Ve
+.IP "\fB\-mtiny\-stack\fR" 4
+.IX Item "-mtiny-stack"
+Only change the lower 8@tie{}bits of the stack pointer.
+.IP "\fB\-mfract\-convert\-truncate\fR" 4
+.IX Item "-mfract-convert-truncate"
+Allow to use truncation instead of rounding towards zero for fractional fixed-point types.
+.IP "\fB\-nodevicelib\fR" 4
+.IX Item "-nodevicelib"
+Don't link against AVR-LibC's device specific library \f(CW\*(C`lib<mcu>.a\*(C'\fR.
+.IP "\fB\-Waddr\-space\-convert\fR" 4
+.IX Item "-Waddr-space-convert"
+Warn about conversions between address spaces in the case where the
+resulting address space is not contained in the incoming address space.
+.IP "\fB\-Wmisspelled\-isr\fR" 4
+.IX Item "-Wmisspelled-isr"
+Warn if the \s-1ISR\s0 is misspelled, i.e. without _\|_vector prefix.
+Enabled by default.
+.PP
+\f(CW\*(C`EIND\*(C'\fR and Devices with More Than 128 Ki Bytes of Flash
+.IX Subsection "EIND and Devices with More Than 128 Ki Bytes of Flash"
+.PP
+Pointers in the implementation are 16@tie{}bits wide.
+The address of a function or label is represented as word address so
+that indirect jumps and calls can target any code address in the
+range of 64@tie{}Ki words.
+.PP
+In order to facilitate indirect jump on devices with more than 128@tie{}Ki
+bytes of program memory space, there is a special function register called
+\&\f(CW\*(C`EIND\*(C'\fR that serves as most significant part of the target address
+when \f(CW\*(C`EICALL\*(C'\fR or \f(CW\*(C`EIJMP\*(C'\fR instructions are used.
+.PP
+Indirect jumps and calls on these devices are handled as follows by
+the compiler and are subject to some limitations:
+.IP "*" 4
+The compiler never sets \f(CW\*(C`EIND\*(C'\fR.
+.IP "*" 4
+The compiler uses \f(CW\*(C`EIND\*(C'\fR implicitly in \f(CW\*(C`EICALL\*(C'\fR/\f(CW\*(C`EIJMP\*(C'\fR
+instructions or might read \f(CW\*(C`EIND\*(C'\fR directly in order to emulate an
+indirect call/jump by means of a \f(CW\*(C`RET\*(C'\fR instruction.
+.IP "*" 4
+The compiler assumes that \f(CW\*(C`EIND\*(C'\fR never changes during the startup
+code or during the application. In particular, \f(CW\*(C`EIND\*(C'\fR is not
+saved/restored in function or interrupt service routine
+prologue/epilogue.
+.IP "*" 4
+For indirect calls to functions and computed goto, the linker
+generates \fIstubs\fR. Stubs are jump pads sometimes also called
+\&\fItrampolines\fR. Thus, the indirect call/jump jumps to such a stub.
+The stub contains a direct jump to the desired address.
+.IP "*" 4
+Linker relaxation must be turned on so that the linker generates
+the stubs correctly in all situations. See the compiler option
+\&\fB\-mrelax\fR and the linker option \fB\-\-relax\fR.
+There are corner cases where the linker is supposed to generate stubs
+but aborts without relaxation and without a helpful error message.
+.IP "*" 4
+The default linker script is arranged for code with \f(CW\*(C`EIND = 0\*(C'\fR.
+If code is supposed to work for a setup with \f(CW\*(C`EIND != 0\*(C'\fR, a custom
+linker script has to be used in order to place the sections whose
+name start with \f(CW\*(C`.trampolines\*(C'\fR into the segment where \f(CW\*(C`EIND\*(C'\fR
+points to.
+.IP "*" 4
+The startup code from libgcc never sets \f(CW\*(C`EIND\*(C'\fR.
+Notice that startup code is a blend of code from libgcc and AVR-LibC.
+For the impact of AVR-LibC on \f(CW\*(C`EIND\*(C'\fR, see the
+AVR-LibC\ user\ manual (\f(CW\*(C`http://nongnu.org/avr\-libc/user\-manual/\*(C'\fR).
+.IP "*" 4
+It is legitimate for user-specific startup code to set up \f(CW\*(C`EIND\*(C'\fR
+early, for example by means of initialization code located in
+section \f(CW\*(C`.init3\*(C'\fR. Such code runs prior to general startup code
+that initializes \s-1RAM\s0 and calls constructors, but after the bit
+of startup code from AVR-LibC that sets \f(CW\*(C`EIND\*(C'\fR to the segment
+where the vector table is located.
+.Sp
+.Vb 1
+\&        #include <avr/io.h>
+\&        
+\&        static void
+\&        _\|_attribute_\|_((section(".init3"),naked,used,no_instrument_function))
+\&        init3_set_eind (void)
+\&        {
+\&          _\|_asm volatile ("ldi r24,pm_hh8(_\|_trampolines_start)\en\et"
+\&                          "out %i0,r24" :: "n" (&EIND) : "r24","memory");
+\&        }
+.Ve
+.Sp
+The \f(CW\*(C`_\|_trampolines_start\*(C'\fR symbol is defined in the linker script.
+.IP "*" 4
+Stubs are generated automatically by the linker if
+the following two conditions are met:
+.RS 4
+.ie n .IP "\-<The address of a label is taken by means of the ""gs"" modifier>" 4
+.el .IP "\-<The address of a label is taken by means of the \f(CWgs\fR modifier>" 4
+.IX Item "-<The address of a label is taken by means of the gs modifier>"
+(short for \fIgenerate stubs\fR) like so:
+.Sp
+.Vb 2
+\&        LDI r24, lo8(gs(<func>))
+\&        LDI r25, hi8(gs(<func>))
+.Ve
+.IP "\-<The final location of that label is in a code segment>" 4
+.IX Item "-<The final location of that label is in a code segment>"
+\&\fIoutside\fR the segment where the stubs are located.
+.RE
+.RS 4
+.RE
+.IP "*" 4
+The compiler emits such \f(CW\*(C`gs\*(C'\fR modifiers for code labels in the
+following situations:
+.RS 4
+.IP "\-<Taking address of a function or code label.>" 4
+.IX Item "-<Taking address of a function or code label.>"
+.PD 0
+.IP "\-<Computed goto.>" 4
+.IX Item "-<Computed goto.>"
+.IP "\-<If prologue-save function is used, see \fB\-mcall\-prologues\fR>" 4
+.IX Item "-<If prologue-save function is used, see -mcall-prologues>"
+.PD
+command-line option.
+.IP "\-<Switch/case dispatch tables. If you do not want such dispatch>" 4
+.IX Item "-<Switch/case dispatch tables. If you do not want such dispatch>"
+tables you can specify the \fB\-fno\-jump\-tables\fR command-line option.
+.IP "\-<C and \*(C+ constructors/destructors called during startup/shutdown.>" 4
+.IX Item "-<C and constructors/destructors called during startup/shutdown.>"
+.PD 0
+.ie n .IP "\-<If the tools hit a ""gs()"" modifier explained above.>" 4
+.el .IP "\-<If the tools hit a \f(CWgs()\fR modifier explained above.>" 4
+.IX Item "-<If the tools hit a gs() modifier explained above.>"
+.RE
+.RS 4
+.RE
+.IP "*" 4
+.PD
+Jumping to non-symbolic addresses like so is \fInot\fR supported:
+.Sp
+.Vb 5
+\&        int main (void)
+\&        {
+\&            /* Call function at word address 0x2 */
+\&            return ((int(*)(void)) 0x2)();
+\&        }
+.Ve
+.Sp
+Instead, a stub has to be set up, i.e. the function has to be called
+through a symbol (\f(CW\*(C`func_4\*(C'\fR in the example):
+.Sp
+.Vb 3
+\&        int main (void)
+\&        {
+\&            extern int func_4 (void);
+\&        
+\&            /* Call function at byte address 0x4 */
+\&            return func_4();
+\&        }
+.Ve
+.Sp
+and the application be linked with \fB\-Wl,\-\-defsym,func_4=0x4\fR.
+Alternatively, \f(CW\*(C`func_4\*(C'\fR can be defined in the linker script.
+.PP
+Handling of the \f(CW\*(C`RAMPD\*(C'\fR, \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR and \f(CW\*(C`RAMPZ\*(C'\fR Special Function Registers
+.IX Subsection "Handling of the RAMPD, RAMPX, RAMPY and RAMPZ Special Function Registers"
+.PP
+Some \s-1AVR\s0 devices support memories larger than the 64@tie{}KiB range
+that can be accessed with 16\-bit pointers.  To access memory locations
+outside this 64@tie{}KiB range, the content of a \f(CW\*(C`RAMP\*(C'\fR
+register is used as high part of the address:
+The \f(CW\*(C`X\*(C'\fR, \f(CW\*(C`Y\*(C'\fR, \f(CW\*(C`Z\*(C'\fR address register is concatenated
+with the \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR, \f(CW\*(C`RAMPZ\*(C'\fR special function
+register, respectively, to get a wide address. Similarly,
+\&\f(CW\*(C`RAMPD\*(C'\fR is used together with direct addressing.
+.IP "*" 4
+The startup code initializes the \f(CW\*(C`RAMP\*(C'\fR special function
+registers with zero.
+.IP "*" 4
+If a \fB\s-1AVR\s0 Named Address Spaces,named address space\fR other than
+generic or \f(CW\*(C`_\|_flash\*(C'\fR is used, then \f(CW\*(C`RAMPZ\*(C'\fR is set
+as needed before the operation.
+.IP "*" 4
+If the device supports \s-1RAM\s0 larger than 64@tie{}KiB and the compiler
+needs to change \f(CW\*(C`RAMPZ\*(C'\fR to accomplish an operation, \f(CW\*(C`RAMPZ\*(C'\fR
+is reset to zero after the operation.
+.IP "*" 4
+If the device comes with a specific \f(CW\*(C`RAMP\*(C'\fR register, the \s-1ISR\s0
+prologue/epilogue saves/restores that \s-1SFR\s0 and initializes it with
+zero in case the \s-1ISR\s0 code might (implicitly) use it.
+.IP "*" 4
+\&\s-1RAM\s0 larger than 64@tie{}KiB is not supported by \s-1GCC\s0 for \s-1AVR\s0 targets.
+If you use inline assembler to read from locations outside the
+16\-bit address range and change one of the \f(CW\*(C`RAMP\*(C'\fR registers,
+you must reset it to zero after the access.
+.PP
+\s-1AVR\s0 Built-in Macros
+.IX Subsection "AVR Built-in Macros"
+.PP
+\&\s-1GCC\s0 defines several built-in macros so that the user code can test
+for the presence or absence of features.  Almost any of the following
+built-in macros are deduced from device capabilities and thus
+triggered by the \fB\-mmcu=\fR command-line option.
+.PP
+For even more AVR-specific built-in macros see
+\&\fB\s-1AVR\s0 Named Address Spaces\fR and \fB\s-1AVR\s0 Built-in Functions\fR.
+.ie n .IP """_\|_AVR_ARCH_\|_""" 4
+.el .IP "\f(CW_\|_AVR_ARCH_\|_\fR" 4
+.IX Item "__AVR_ARCH__"
+Build-in macro that resolves to a decimal number that identifies the
+architecture and depends on the \fB\-mmcu=\fR\fImcu\fR option.
+Possible values are:
+.Sp
+\&\f(CW2\fR, \f(CW25\fR, \f(CW3\fR, \f(CW31\fR, \f(CW35\fR,
+\&\f(CW4\fR, \f(CW5\fR, \f(CW51\fR, \f(CW6\fR
+.Sp
+for \fImcu\fR=\f(CW\*(C`avr2\*(C'\fR, \f(CW\*(C`avr25\*(C'\fR, \f(CW\*(C`avr3\*(C'\fR, \f(CW\*(C`avr31\*(C'\fR,
+\&\f(CW\*(C`avr35\*(C'\fR, \f(CW\*(C`avr4\*(C'\fR, \f(CW\*(C`avr5\*(C'\fR, \f(CW\*(C`avr51\*(C'\fR, \f(CW\*(C`avr6\*(C'\fR,
+.Sp
+respectively and
+.Sp
+\&\f(CW100\fR,
+\&\f(CW102\fR, \f(CW103\fR, \f(CW104\fR,
+\&\f(CW105\fR, \f(CW106\fR, \f(CW107\fR
+.Sp
+for \fImcu\fR=\f(CW\*(C`avrtiny\*(C'\fR,
+\&\f(CW\*(C`avrxmega2\*(C'\fR, \f(CW\*(C`avrxmega3\*(C'\fR, \f(CW\*(C`avrxmega4\*(C'\fR,
+\&\f(CW\*(C`avrxmega5\*(C'\fR, \f(CW\*(C`avrxmega6\*(C'\fR, \f(CW\*(C`avrxmega7\*(C'\fR, respectively.
+If \fImcu\fR specifies a device, this built-in macro is set
+accordingly. For example, with \fB\-mmcu=atmega8\fR the macro is
+defined to \f(CW4\fR.
+.ie n .IP """_\|_AVR_\fIDevice\fP_\|_""" 4
+.el .IP "\f(CW_\|_AVR_\f(CIDevice\f(CW_\|_\fR" 4
+.IX Item "__AVR_Device__"
+Setting \fB\-mmcu=\fR\fIdevice\fR defines this built-in macro which reflects
+the device's name. For example, \fB\-mmcu=atmega8\fR defines the
+built-in macro \f(CW\*(C`_\|_AVR_ATmega8_\|_\*(C'\fR, \fB\-mmcu=attiny261a\fR defines
+\&\f(CW\*(C`_\|_AVR_ATtiny261A_\|_\*(C'\fR, etc.
+.Sp
+The built-in macros' names follow
+the scheme \f(CW\*(C`_\|_AVR_\f(CIDevice\f(CW_\|_\*(C'\fR where \fIDevice\fR is
+the device name as from the \s-1AVR\s0 user manual. The difference between
+\&\fIDevice\fR in the built-in macro and \fIdevice\fR in
+\&\fB\-mmcu=\fR\fIdevice\fR is that the latter is always lowercase.
+.Sp
+If \fIdevice\fR is not a device but only a core architecture like
+\&\fBavr51\fR, this macro is not defined.
+.ie n .IP """_\|_AVR_DEVICE_NAME_\|_""" 4
+.el .IP "\f(CW_\|_AVR_DEVICE_NAME_\|_\fR" 4
+.IX Item "__AVR_DEVICE_NAME__"
+Setting \fB\-mmcu=\fR\fIdevice\fR defines this built-in macro to
+the device's name. For example, with \fB\-mmcu=atmega8\fR the macro
+is defined to \f(CW\*(C`atmega8\*(C'\fR.
+.Sp
+If \fIdevice\fR is not a device but only a core architecture like
+\&\fBavr51\fR, this macro is not defined.
+.ie n .IP """_\|_AVR_XMEGA_\|_""" 4
+.el .IP "\f(CW_\|_AVR_XMEGA_\|_\fR" 4
+.IX Item "__AVR_XMEGA__"
+The device / architecture belongs to the \s-1XMEGA\s0 family of devices.
+.ie n .IP """_\|_AVR_HAVE_ELPM_\|_""" 4
+.el .IP "\f(CW_\|_AVR_HAVE_ELPM_\|_\fR" 4
+.IX Item "__AVR_HAVE_ELPM__"
+The device has the \f(CW\*(C`ELPM\*(C'\fR instruction.
+.ie n .IP """_\|_AVR_HAVE_ELPMX_\|_""" 4
+.el .IP "\f(CW_\|_AVR_HAVE_ELPMX_\|_\fR" 4
+.IX Item "__AVR_HAVE_ELPMX__"
+The device has the \f(CW\*(C`ELPM R\f(CIn\f(CW,Z\*(C'\fR and \f(CW\*(C`ELPM
+R\f(CIn\f(CW,Z+\*(C'\fR instructions.
+.ie n .IP """_\|_AVR_HAVE_MOVW_\|_""" 4
+.el .IP "\f(CW_\|_AVR_HAVE_MOVW_\|_\fR" 4
+.IX Item "__AVR_HAVE_MOVW__"
+The device has the \f(CW\*(C`MOVW\*(C'\fR instruction to perform 16\-bit
+register-register moves.
+.ie n .IP """_\|_AVR_HAVE_LPMX_\|_""" 4
+.el .IP "\f(CW_\|_AVR_HAVE_LPMX_\|_\fR" 4
+.IX Item "__AVR_HAVE_LPMX__"
+The device has the \f(CW\*(C`LPM R\f(CIn\f(CW,Z\*(C'\fR and
+\&\f(CW\*(C`LPM R\f(CIn\f(CW,Z+\*(C'\fR instructions.
+.ie n .IP """_\|_AVR_HAVE_MUL_\|_""" 4
+.el .IP "\f(CW_\|_AVR_HAVE_MUL_\|_\fR" 4
+.IX Item "__AVR_HAVE_MUL__"
+The device has a hardware multiplier.
+.ie n .IP """_\|_AVR_HAVE_JMP_CALL_\|_""" 4
+.el .IP "\f(CW_\|_AVR_HAVE_JMP_CALL_\|_\fR" 4
+.IX Item "__AVR_HAVE_JMP_CALL__"
+The device has the \f(CW\*(C`JMP\*(C'\fR and \f(CW\*(C`CALL\*(C'\fR instructions.
+This is the case for devices with more than 8@tie{}KiB of program
+memory.
+.ie n .IP """_\|_AVR_HAVE_EIJMP_EICALL_\|_""" 4
+.el .IP "\f(CW_\|_AVR_HAVE_EIJMP_EICALL_\|_\fR" 4
+.IX Item "__AVR_HAVE_EIJMP_EICALL__"
+.PD 0
+.ie n .IP """_\|_AVR_3_BYTE_PC_\|_""" 4
+.el .IP "\f(CW_\|_AVR_3_BYTE_PC_\|_\fR" 4
+.IX Item "__AVR_3_BYTE_PC__"
+.PD
+The device has the \f(CW\*(C`EIJMP\*(C'\fR and \f(CW\*(C`EICALL\*(C'\fR instructions.
+This is the case for devices with more than 128@tie{}KiB of program memory.
+This also means that the program counter
+(\s-1PC\s0) is 3@tie{}bytes wide.
+.ie n .IP """_\|_AVR_2_BYTE_PC_\|_""" 4
+.el .IP "\f(CW_\|_AVR_2_BYTE_PC_\|_\fR" 4
+.IX Item "__AVR_2_BYTE_PC__"
+The program counter (\s-1PC\s0) is 2@tie{}bytes wide. This is the case for devices
+with up to 128@tie{}KiB of program memory.
+.ie n .IP """_\|_AVR_HAVE_8BIT_SP_\|_""" 4
+.el .IP "\f(CW_\|_AVR_HAVE_8BIT_SP_\|_\fR" 4
+.IX Item "__AVR_HAVE_8BIT_SP__"
+.PD 0
+.ie n .IP """_\|_AVR_HAVE_16BIT_SP_\|_""" 4
+.el .IP "\f(CW_\|_AVR_HAVE_16BIT_SP_\|_\fR" 4
+.IX Item "__AVR_HAVE_16BIT_SP__"
+.PD
+The stack pointer (\s-1SP\s0) register is treated as 8\-bit respectively
+16\-bit register by the compiler.
+The definition of these macros is affected by \fB\-mtiny\-stack\fR.
+.ie n .IP """_\|_AVR_HAVE_SPH_\|_""" 4
+.el .IP "\f(CW_\|_AVR_HAVE_SPH_\|_\fR" 4
+.IX Item "__AVR_HAVE_SPH__"
+.PD 0
+.ie n .IP """_\|_AVR_SP8_\|_""" 4
+.el .IP "\f(CW_\|_AVR_SP8_\|_\fR" 4
+.IX Item "__AVR_SP8__"
+.PD
+The device has the \s-1SPH\s0 (high part of stack pointer) special function
+register or has an 8\-bit stack pointer, respectively.
+The definition of these macros is affected by \fB\-mmcu=\fR and
+in the cases of \fB\-mmcu=avr2\fR and \fB\-mmcu=avr25\fR also
+by \fB\-msp8\fR.
+.ie n .IP """_\|_AVR_HAVE_RAMPD_\|_""" 4
+.el .IP "\f(CW_\|_AVR_HAVE_RAMPD_\|_\fR" 4
+.IX Item "__AVR_HAVE_RAMPD__"
+.PD 0
+.ie n .IP """_\|_AVR_HAVE_RAMPX_\|_""" 4
+.el .IP "\f(CW_\|_AVR_HAVE_RAMPX_\|_\fR" 4
+.IX Item "__AVR_HAVE_RAMPX__"
+.ie n .IP """_\|_AVR_HAVE_RAMPY_\|_""" 4
+.el .IP "\f(CW_\|_AVR_HAVE_RAMPY_\|_\fR" 4
+.IX Item "__AVR_HAVE_RAMPY__"
+.ie n .IP """_\|_AVR_HAVE_RAMPZ_\|_""" 4
+.el .IP "\f(CW_\|_AVR_HAVE_RAMPZ_\|_\fR" 4
+.IX Item "__AVR_HAVE_RAMPZ__"
+.PD
+The device has the \f(CW\*(C`RAMPD\*(C'\fR, \f(CW\*(C`RAMPX\*(C'\fR, \f(CW\*(C`RAMPY\*(C'\fR,
+\&\f(CW\*(C`RAMPZ\*(C'\fR special function register, respectively.
+.ie n .IP """_\|_NO_INTERRUPTS_\|_""" 4
+.el .IP "\f(CW_\|_NO_INTERRUPTS_\|_\fR" 4
+.IX Item "__NO_INTERRUPTS__"
+This macro reflects the \fB\-mno\-interrupts\fR command-line option.
+.ie n .IP """_\|_AVR_ERRATA_SKIP_\|_""" 4
+.el .IP "\f(CW_\|_AVR_ERRATA_SKIP_\|_\fR" 4
+.IX Item "__AVR_ERRATA_SKIP__"
+.PD 0
+.ie n .IP """_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_""" 4
+.el .IP "\f(CW_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_\fR" 4
+.IX Item "__AVR_ERRATA_SKIP_JMP_CALL__"
+.PD
+Some \s-1AVR\s0 devices (\s-1AT90S8515,\s0 ATmega103) must not skip 32\-bit
+instructions because of a hardware erratum.  Skip instructions are
+\&\f(CW\*(C`SBRS\*(C'\fR, \f(CW\*(C`SBRC\*(C'\fR, \f(CW\*(C`SBIS\*(C'\fR, \f(CW\*(C`SBIC\*(C'\fR and \f(CW\*(C`CPSE\*(C'\fR.
+The second macro is only defined if \f(CW\*(C`_\|_AVR_HAVE_JMP_CALL_\|_\*(C'\fR is also
+set.
+.ie n .IP """_\|_AVR_ISA_RMW_\|_""" 4
+.el .IP "\f(CW_\|_AVR_ISA_RMW_\|_\fR" 4
+.IX Item "__AVR_ISA_RMW__"
+The device has Read-Modify-Write instructions (\s-1XCH, LAC, LAS\s0 and \s-1LAT\s0).
+.ie n .IP """_\|_AVR_SFR_OFFSET_\|_=\fIoffset\fP""" 4
+.el .IP "\f(CW_\|_AVR_SFR_OFFSET_\|_=\f(CIoffset\f(CW\fR" 4
+.IX Item "__AVR_SFR_OFFSET__=offset"
+Instructions that can address I/O special function registers directly
+like \f(CW\*(C`IN\*(C'\fR, \f(CW\*(C`OUT\*(C'\fR, \f(CW\*(C`SBI\*(C'\fR, etc. may use a different
+address as if addressed by an instruction to access \s-1RAM\s0 like \f(CW\*(C`LD\*(C'\fR
+or \f(CW\*(C`STS\*(C'\fR. This offset depends on the device architecture and has
+to be subtracted from the \s-1RAM\s0 address in order to get the
+respective I/O@tie{}address.
+.ie n .IP """_\|_AVR_SHORT_CALLS_\|_""" 4
+.el .IP "\f(CW_\|_AVR_SHORT_CALLS_\|_\fR" 4
+.IX Item "__AVR_SHORT_CALLS__"
+The \fB\-mshort\-calls\fR command line option is set.
+.ie n .IP """_\|_AVR_PM_BASE_ADDRESS_\|_=\fIaddr\fP""" 4
+.el .IP "\f(CW_\|_AVR_PM_BASE_ADDRESS_\|_=\f(CIaddr\f(CW\fR" 4
+.IX Item "__AVR_PM_BASE_ADDRESS__=addr"
+Some devices support reading from flash memory by means of \f(CW\*(C`LD*\*(C'\fR
+instructions.  The flash memory is seen in the data address space
+at an offset of \f(CW\*(C`_\|_AVR_PM_BASE_ADDRESS_\|_\*(C'\fR.  If this macro
+is not defined, this feature is not available.  If defined,
+the address space is linear and there is no need to put
+\&\f(CW\*(C`.rodata\*(C'\fR into \s-1RAM.\s0  This is handled by the default linker
+description file, and is currently available for
+\&\f(CW\*(C`avrtiny\*(C'\fR and \f(CW\*(C`avrxmega3\*(C'\fR.  Even more convenient,
+there is no need to use address spaces like \f(CW\*(C`_\|_flash\*(C'\fR or
+features like attribute \f(CW\*(C`progmem\*(C'\fR and \f(CW\*(C`pgm_read_*\*(C'\fR.
+.ie n .IP """_\|_WITH_AVRLIBC_\|_""" 4
+.el .IP "\f(CW_\|_WITH_AVRLIBC_\|_\fR" 4
+.IX Item "__WITH_AVRLIBC__"
+The compiler is configured to be used together with AVR-Libc.
+See the \fB\-\-with\-avrlibc\fR configure option.
+.PP
+\fIBlackfin Options\fR
+.IX Subsection "Blackfin Options"
+.IP "\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR]" 4
+.IX Item "-mcpu=cpu[-sirevision]"
+Specifies the name of the target Blackfin processor.  Currently, \fIcpu\fR
+can be one of \fBbf512\fR, \fBbf514\fR, \fBbf516\fR, \fBbf518\fR,
+\&\fBbf522\fR, \fBbf523\fR, \fBbf524\fR, \fBbf525\fR, \fBbf526\fR,
+\&\fBbf527\fR, \fBbf531\fR, \fBbf532\fR, \fBbf533\fR,
+\&\fBbf534\fR, \fBbf536\fR, \fBbf537\fR, \fBbf538\fR, \fBbf539\fR,
+\&\fBbf542\fR, \fBbf544\fR, \fBbf547\fR, \fBbf548\fR, \fBbf549\fR,
+\&\fBbf542m\fR, \fBbf544m\fR, \fBbf547m\fR, \fBbf548m\fR, \fBbf549m\fR,
+\&\fBbf561\fR, \fBbf592\fR.
+.Sp
+The optional \fIsirevision\fR specifies the silicon revision of the target
+Blackfin processor.  Any workarounds available for the targeted silicon revision
+are enabled.  If \fIsirevision\fR is \fBnone\fR, no workarounds are enabled.
+If \fIsirevision\fR is \fBany\fR, all workarounds for the targeted processor
+are enabled.  The \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR macro is defined to two
+hexadecimal digits representing the major and minor numbers in the silicon
+revision.  If \fIsirevision\fR is \fBnone\fR, the \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR
+is not defined.  If \fIsirevision\fR is \fBany\fR, the
+\&\f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR is defined to be \f(CW0xffff\fR.
+If this optional \fIsirevision\fR is not used, \s-1GCC\s0 assumes the latest known
+silicon revision of the targeted Blackfin processor.
+.Sp
+\&\s-1GCC\s0 defines a preprocessor macro for the specified \fIcpu\fR.
+For the \fBbfin-elf\fR toolchain, this option causes the hardware \s-1BSP\s0
+provided by libgloss to be linked in if \fB\-msim\fR is not given.
+.Sp
+Without this option, \fBbf532\fR is used as the processor by default.
+.Sp
+Note that support for \fBbf561\fR is incomplete.  For \fBbf561\fR,
+only the preprocessor macro is defined.
+.IP "\fB\-msim\fR" 4
+.IX Item "-msim"
+Specifies that the program will be run on the simulator.  This causes
+the simulator \s-1BSP\s0 provided by libgloss to be linked in.  This option
+has effect only for \fBbfin-elf\fR toolchain.
+Certain other options, such as \fB\-mid\-shared\-library\fR and
+\&\fB\-mfdpic\fR, imply \fB\-msim\fR.
+.IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
+.IX Item "-momit-leaf-frame-pointer"
+Don't keep the frame pointer in a register for leaf functions.  This
+avoids the instructions to save, set up and restore frame pointers and
+makes an extra register available in leaf functions.
+.IP "\fB\-mspecld\-anomaly\fR" 4
+.IX Item "-mspecld-anomaly"
+When enabled, the compiler ensures that the generated code does not
+contain speculative loads after jump instructions. If this option is used,
+\&\f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_LOADS\*(C'\fR is defined.
+.IP "\fB\-mno\-specld\-anomaly\fR" 4
+.IX Item "-mno-specld-anomaly"
+Don't generate extra code to prevent speculative loads from occurring.
+.IP "\fB\-mcsync\-anomaly\fR" 4
+.IX Item "-mcsync-anomaly"
+When enabled, the compiler ensures that the generated code does not
+contain \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions too soon after conditional branches.
+If this option is used, \f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_SYNCS\*(C'\fR is defined.
+.IP "\fB\-mno\-csync\-anomaly\fR" 4
+.IX Item "-mno-csync-anomaly"
+Don't generate extra code to prevent \s-1CSYNC\s0 or \s-1SSYNC\s0 instructions from
+occurring too soon after a conditional branch.
+.IP "\fB\-mlow64k\fR" 4
+.IX Item "-mlow64k"
+When enabled, the compiler is free to take advantage of the knowledge that
+the entire program fits into the low 64k of memory.
+.IP "\fB\-mno\-low64k\fR" 4
+.IX Item "-mno-low64k"
+Assume that the program is arbitrarily large.  This is the default.
+.IP "\fB\-mstack\-check\-l1\fR" 4
+.IX Item "-mstack-check-l1"
+Do stack checking using information placed into L1 scratchpad memory by the
+uClinux kernel.
+.IP "\fB\-mid\-shared\-library\fR" 4
+.IX Item "-mid-shared-library"
+Generate code that supports shared libraries via the library \s-1ID\s0 method.
+This allows for execute in place and shared libraries in an environment
+without virtual memory management.  This option implies \fB\-fPIC\fR.
+With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
+.IP "\fB\-mno\-id\-shared\-library\fR" 4
+.IX Item "-mno-id-shared-library"
+Generate code that doesn't assume ID-based shared libraries are being used.
+This is the default.
+.IP "\fB\-mleaf\-id\-shared\-library\fR" 4
+.IX Item "-mleaf-id-shared-library"
+Generate code that supports shared libraries via the library \s-1ID\s0 method,
+but assumes that this library or executable won't link against any other
+\&\s-1ID\s0 shared libraries.  That allows the compiler to use faster code for jumps
+and calls.
+.IP "\fB\-mno\-leaf\-id\-shared\-library\fR" 4
+.IX Item "-mno-leaf-id-shared-library"
+Do not assume that the code being compiled won't link against any \s-1ID\s0 shared
+libraries.  Slower code is generated for jump and call insns.
+.IP "\fB\-mshared\-library\-id=n\fR" 4
+.IX Item "-mshared-library-id=n"
+Specifies the identification number of the ID-based shared library being
+compiled.  Specifying a value of 0 generates more compact code; specifying
+other values forces the allocation of that number to the current
+library but is no more space\- or time-efficient than omitting this option.
+.IP "\fB\-msep\-data\fR" 4
+.IX Item "-msep-data"
+Generate code that allows the data segment to be located in a different
+area of memory from the text segment.  This allows for execute in place in
+an environment without virtual memory management by eliminating relocations
+against the text section.
+.IP "\fB\-mno\-sep\-data\fR" 4
+.IX Item "-mno-sep-data"
+Generate code that assumes that the data segment follows the text segment.
+This is the default.
+.IP "\fB\-mlong\-calls\fR" 4
+.IX Item "-mlong-calls"
+.PD 0
+.IP "\fB\-mno\-long\-calls\fR" 4
+.IX Item "-mno-long-calls"
+.PD
+Tells the compiler to perform function calls by first loading the
+address of the function into a register and then performing a subroutine
+call on this register.  This switch is needed if the target function
+lies outside of the 24\-bit addressing range of the offset-based
+version of subroutine call instruction.
+.Sp
+This feature is not enabled by default.  Specifying
+\&\fB\-mno\-long\-calls\fR restores the default behavior.  Note these
+switches have no effect on how the compiler generates code to handle
+function calls via function pointers.
+.IP "\fB\-mfast\-fp\fR" 4
+.IX Item "-mfast-fp"
+Link with the fast floating-point library. This library relaxes some of
+the \s-1IEEE\s0 floating-point standard's rules for checking inputs against
+Not-a-Number (\s-1NAN\s0), in the interest of performance.
+.IP "\fB\-minline\-plt\fR" 4
+.IX Item "-minline-plt"
+Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
+not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
+.IP "\fB\-mmulticore\fR" 4
+.IX Item "-mmulticore"
+Build a standalone application for multicore Blackfin processors. 
+This option causes proper start files and link scripts supporting 
+multicore to be used, and defines the macro \f(CW\*(C`_\|_BFIN_MULTICORE\*(C'\fR. 
+It can only be used with \fB\-mcpu=bf561\fR[\fB\-\fR\fIsirevision\fR].
+.Sp
+This option can be used with \fB\-mcorea\fR or \fB\-mcoreb\fR, which
+selects the one-application-per-core programming model.  Without
+\&\fB\-mcorea\fR or \fB\-mcoreb\fR, the single\-application/dual\-core
+programming model is used. In this model, the main function of Core B
+should be named as \f(CW\*(C`coreb_main\*(C'\fR.
+.Sp
+If this option is not used, the single-core application programming
+model is used.
+.IP "\fB\-mcorea\fR" 4
+.IX Item "-mcorea"
+Build a standalone application for Core A of \s-1BF561\s0 when using
+the one-application-per-core programming model. Proper start files
+and link scripts are used to support Core A, and the macro
+\&\f(CW\*(C`_\|_BFIN_COREA\*(C'\fR is defined.
+This option can only be used in conjunction with \fB\-mmulticore\fR.
+.IP "\fB\-mcoreb\fR" 4
+.IX Item "-mcoreb"
+Build a standalone application for Core B of \s-1BF561\s0 when using
+the one-application-per-core programming model. Proper start files
+and link scripts are used to support Core B, and the macro
+\&\f(CW\*(C`_\|_BFIN_COREB\*(C'\fR is defined. When this option is used, \f(CW\*(C`coreb_main\*(C'\fR
+should be used instead of \f(CW\*(C`main\*(C'\fR. 
+This option can only be used in conjunction with \fB\-mmulticore\fR.
+.IP "\fB\-msdram\fR" 4
+.IX Item "-msdram"
+Build a standalone application for \s-1SDRAM.\s0 Proper start files and
+link scripts are used to put the application into \s-1SDRAM,\s0 and the macro
+\&\f(CW\*(C`_\|_BFIN_SDRAM\*(C'\fR is defined.
+The loader should initialize \s-1SDRAM\s0 before loading the application.
+.IP "\fB\-micplb\fR" 4
+.IX Item "-micplb"
+Assume that ICPLBs are enabled at run time.  This has an effect on certain
+anomaly workarounds.  For Linux targets, the default is to assume ICPLBs
+are enabled; for standalone applications the default is off.
+.PP
+\fIC6X Options\fR
+.IX Subsection "C6X Options"
+.IP "\fB\-march=\fR\fIname\fR" 4
+.IX Item "-march=name"
+This specifies the name of the target architecture.  \s-1GCC\s0 uses this
+name to determine what kind of instructions it can emit when generating
+assembly code.  Permissible names are: \fBc62x\fR,
+\&\fBc64x\fR, \fBc64x+\fR, \fBc67x\fR, \fBc67x+\fR, \fBc674x\fR.
+.IP "\fB\-mbig\-endian\fR" 4
+.IX Item "-mbig-endian"
+Generate code for a big-endian target.
+.IP "\fB\-mlittle\-endian\fR" 4
+.IX Item "-mlittle-endian"
+Generate code for a little-endian target.  This is the default.
+.IP "\fB\-msim\fR" 4
+.IX Item "-msim"
+Choose startup files and linker script suitable for the simulator.
+.IP "\fB\-msdata=default\fR" 4
+.IX Item "-msdata=default"
+Put small global and static data in the \f(CW\*(C`.neardata\*(C'\fR section,
+which is pointed to by register \f(CW\*(C`B14\*(C'\fR.  Put small uninitialized
+global and static data in the \f(CW\*(C`.bss\*(C'\fR section, which is adjacent
+to the \f(CW\*(C`.neardata\*(C'\fR section.  Put small read-only data into the
+\&\f(CW\*(C`.rodata\*(C'\fR section.  The corresponding sections used for large
+pieces of data are \f(CW\*(C`.fardata\*(C'\fR, \f(CW\*(C`.far\*(C'\fR and \f(CW\*(C`.const\*(C'\fR.
+.IP "\fB\-msdata=all\fR" 4
+.IX Item "-msdata=all"
+Put all data, not just small objects, into the sections reserved for
+small data, and use addressing relative to the \f(CW\*(C`B14\*(C'\fR register to
+access them.
+.IP "\fB\-msdata=none\fR" 4
+.IX Item "-msdata=none"
+Make no use of the sections reserved for small data, and use absolute
+addresses to access all data.  Put all initialized global and static
+data in the \f(CW\*(C`.fardata\*(C'\fR section, and all uninitialized data in the
+\&\f(CW\*(C`.far\*(C'\fR section.  Put all constant data into the \f(CW\*(C`.const\*(C'\fR
+section.
+.PP
+\fI\s-1CRIS\s0 Options\fR
+.IX Subsection "CRIS Options"
+.PP
+These options are defined specifically for the \s-1CRIS\s0 ports.
+.IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
+.IX Item "-march=architecture-type"
+.PD 0
+.IP "\fB\-mcpu=\fR\fIarchitecture-type\fR" 4
+.IX Item "-mcpu=architecture-type"
+.PD
+Generate code for the specified architecture.  The choices for
+\&\fIarchitecture-type\fR are \fBv3\fR, \fBv8\fR and \fBv10\fR for
+respectively \s-1ETRAX\s0\ 4, \s-1ETRAX\s0\ 100, and \s-1ETRAX\s0\ 100\ \s-1LX.\s0
+Default is \fBv0\fR except for cris-axis-linux-gnu, where the default is
+\&\fBv10\fR.
+.IP "\fB\-mtune=\fR\fIarchitecture-type\fR" 4
+.IX Item "-mtune=architecture-type"
+Tune to \fIarchitecture-type\fR everything applicable about the generated
+code, except for the \s-1ABI\s0 and the set of available instructions.  The
+choices for \fIarchitecture-type\fR are the same as for
+\&\fB\-march=\fR\fIarchitecture-type\fR.
+.IP "\fB\-mmax\-stack\-frame=\fR\fIn\fR" 4
+.IX Item "-mmax-stack-frame=n"
+Warn when the stack frame of a function exceeds \fIn\fR bytes.
+.IP "\fB\-metrax4\fR" 4
+.IX Item "-metrax4"
+.PD 0
+.IP "\fB\-metrax100\fR" 4
+.IX Item "-metrax100"
+.PD
+The options \fB\-metrax4\fR and \fB\-metrax100\fR are synonyms for
+\&\fB\-march=v3\fR and \fB\-march=v8\fR respectively.
+.IP "\fB\-mmul\-bug\-workaround\fR" 4
+.IX Item "-mmul-bug-workaround"
+.PD 0
+.IP "\fB\-mno\-mul\-bug\-workaround\fR" 4
+.IX Item "-mno-mul-bug-workaround"
+.PD
+Work around a bug in the \f(CW\*(C`muls\*(C'\fR and \f(CW\*(C`mulu\*(C'\fR instructions for \s-1CPU\s0
+models where it applies.  This option is active by default.
+.IP "\fB\-mpdebug\fR" 4
+.IX Item "-mpdebug"
+Enable CRIS-specific verbose debug-related information in the assembly
+code.  This option also has the effect of turning off the \fB#NO_APP\fR
+formatted-code indicator to the assembler at the beginning of the
+assembly file.
+.IP "\fB\-mcc\-init\fR" 4
+.IX Item "-mcc-init"
+Do not use condition-code results from previous instruction; always emit
+compare and test instructions before use of condition codes.
+.IP "\fB\-mno\-side\-effects\fR" 4
+.IX Item "-mno-side-effects"
+Do not emit instructions with side effects in addressing modes other than
+post-increment.
+.IP "\fB\-mstack\-align\fR" 4
+.IX Item "-mstack-align"
+.PD 0
+.IP "\fB\-mno\-stack\-align\fR" 4
+.IX Item "-mno-stack-align"
+.IP "\fB\-mdata\-align\fR" 4
+.IX Item "-mdata-align"
+.IP "\fB\-mno\-data\-align\fR" 4
+.IX Item "-mno-data-align"
+.IP "\fB\-mconst\-align\fR" 4
+.IX Item "-mconst-align"
+.IP "\fB\-mno\-const\-align\fR" 4
+.IX Item "-mno-const-align"
+.PD
+These options (\fBno\-\fR options) arrange (eliminate arrangements) for the
+stack frame, individual data and constants to be aligned for the maximum
+single data access size for the chosen \s-1CPU\s0 model.  The default is to
+arrange for 32\-bit alignment.  \s-1ABI\s0 details such as structure layout are
+not affected by these options.
+.IP "\fB\-m32\-bit\fR" 4
+.IX Item "-m32-bit"
+.PD 0
+.IP "\fB\-m16\-bit\fR" 4
+.IX Item "-m16-bit"
+.IP "\fB\-m8\-bit\fR" 4
+.IX Item "-m8-bit"
+.PD
+Similar to the stack\- data\- and const-align options above, these options
+arrange for stack frame, writable data and constants to all be 32\-bit,
+16\-bit or 8\-bit aligned.  The default is 32\-bit alignment.
+.IP "\fB\-mno\-prologue\-epilogue\fR" 4
+.IX Item "-mno-prologue-epilogue"
+.PD 0
+.IP "\fB\-mprologue\-epilogue\fR" 4
+.IX Item "-mprologue-epilogue"
+.PD
+With \fB\-mno\-prologue\-epilogue\fR, the normal function prologue and
+epilogue which set up the stack frame are omitted and no return
+instructions or return sequences are generated in the code.  Use this
+option only together with visual inspection of the compiled code: no
+warnings or errors are generated when call-saved registers must be saved,
+or storage for local variables needs to be allocated.
+.IP "\fB\-mno\-gotplt\fR" 4
+.IX Item "-mno-gotplt"
+.PD 0
+.IP "\fB\-mgotplt\fR" 4
+.IX Item "-mgotplt"
+.PD
+With \fB\-fpic\fR and \fB\-fPIC\fR, don't generate (do generate)
+instruction sequences that load addresses for functions from the \s-1PLT\s0 part
+of the \s-1GOT\s0 rather than (traditional on other architectures) calls to the
+\&\s-1PLT.\s0  The default is \fB\-mgotplt\fR.
+.IP "\fB\-melf\fR" 4
+.IX Item "-melf"
+Legacy no-op option only recognized with the cris-axis-elf and
+cris-axis-linux-gnu targets.
+.IP "\fB\-mlinux\fR" 4
+.IX Item "-mlinux"
+Legacy no-op option only recognized with the cris-axis-linux-gnu target.
+.IP "\fB\-sim\fR" 4
+.IX Item "-sim"
+This option, recognized for the cris-axis-elf, arranges
+to link with input-output functions from a simulator library.  Code,
+initialized data and zero-initialized data are allocated consecutively.
+.IP "\fB\-sim2\fR" 4
+.IX Item "-sim2"
+Like \fB\-sim\fR, but pass linker options to locate initialized data at
+0x40000000 and zero-initialized data at 0x80000000.
+.PP
+\fI\s-1CR16\s0 Options\fR
+.IX Subsection "CR16 Options"
+.PP
+These options are defined specifically for the \s-1CR16\s0 ports.
+.IP "\fB\-mmac\fR" 4
+.IX Item "-mmac"
+Enable the use of multiply-accumulate instructions. Disabled by default.
+.IP "\fB\-mcr16cplus\fR" 4
+.IX Item "-mcr16cplus"
+.PD 0
+.IP "\fB\-mcr16c\fR" 4
+.IX Item "-mcr16c"
+.PD
+Generate code for \s-1CR16C\s0 or \s-1CR16C+\s0 architecture. \s-1CR16C+\s0 architecture 
+is default.
+.IP "\fB\-msim\fR" 4
+.IX Item "-msim"
+Links the library libsim.a which is in compatible with simulator. Applicable
+to \s-1ELF\s0 compiler only.
+.IP "\fB\-mint32\fR" 4
+.IX Item "-mint32"
+Choose integer type as 32\-bit wide.
+.IP "\fB\-mbit\-ops\fR" 4
+.IX Item "-mbit-ops"
+Generates \f(CW\*(C`sbit\*(C'\fR/\f(CW\*(C`cbit\*(C'\fR instructions for bit manipulations.
+.IP "\fB\-mdata\-model=\fR\fImodel\fR" 4
+.IX Item "-mdata-model=model"
+Choose a data model. The choices for \fImodel\fR are \fBnear\fR,
+\&\fBfar\fR or \fBmedium\fR. \fBmedium\fR is default.
+However, \fBfar\fR is not valid with \fB\-mcr16c\fR, as the
+\&\s-1CR16C\s0 architecture does not support the far data model.
+.PP
+\fIC\-SKY Options\fR
+.IX Subsection "C-SKY Options"
+.PP
+\&\s-1GCC\s0 supports these options when compiling for C\-SKY V2 processors.
+.IP "\fB\-march=\fR\fIarch\fR" 4
+.IX Item "-march=arch"
+Specify the C\-SKY target architecture.  Valid values for \fIarch\fR are:
+\&\fBck801\fR, \fBck802\fR, \fBck803\fR, \fBck807\fR, and \fBck810\fR.
+The default is \fBck810\fR.
+.IP "\fB\-mcpu=\fR\fIcpu\fR" 4
+.IX Item "-mcpu=cpu"
+Specify the C\-SKY target processor.  Valid values for \fIcpu\fR are:
+\&\fBck801\fR, \fBck801t\fR,
+\&\fBck802\fR, \fBck802t\fR, \fBck802j\fR,
+\&\fBck803\fR, \fBck803h\fR, \fBck803t\fR, \fBck803ht\fR,
+\&\fBck803f\fR, \fBck803fh\fR, \fBck803e\fR, \fBck803eh\fR,
+\&\fBck803et\fR, \fBck803eht\fR, \fBck803ef\fR, \fBck803efh\fR,
+\&\fBck803ft\fR, \fBck803eft\fR, \fBck803efht\fR, \fBck803r1\fR,
+\&\fBck803hr1\fR, \fBck803tr1\fR, \fBck803htr1\fR, \fBck803fr1\fR,
+\&\fBck803fhr1\fR, \fBck803er1\fR, \fBck803ehr1\fR, \fBck803etr1\fR,
+\&\fBck803ehtr1\fR, \fBck803efr1\fR, \fBck803efhr1\fR, \fBck803ftr1\fR,
+\&\fBck803eftr1\fR, \fBck803efhtr1\fR,
+\&\fBck803s\fR, \fBck803st\fR, \fBck803se\fR, \fBck803sf\fR,
+\&\fBck803sef\fR, \fBck803seft\fR,
+\&\fBck807e\fR, \fBck807ef\fR, \fBck807\fR, \fBck807f\fR,
+\&\fBck810e\fR, \fBck810et\fR, \fBck810ef\fR, \fBck810eft\fR,
+\&\fBck810\fR, \fBck810v\fR, \fBck810f\fR, \fBck810t\fR, \fBck810fv\fR,
+\&\fBck810tv\fR, \fBck810ft\fR, and \fBck810ftv\fR.
+.IP "\fB\-mbig\-endian\fR" 4
+.IX Item "-mbig-endian"
+.PD 0
+.IP "\fB\-EB\fR" 4
+.IX Item "-EB"
+.IP "\fB\-mlittle\-endian\fR" 4
+.IX Item "-mlittle-endian"
+.IP "\fB\-EL\fR" 4
+.IX Item "-EL"
+.PD
+Select big\- or little-endian code.  The default is little-endian.
+.IP "\fB\-mhard\-float\fR" 4
+.IX Item "-mhard-float"
+.PD 0
+.IP "\fB\-msoft\-float\fR" 4
+.IX Item "-msoft-float"
+.PD
+Select hardware or software floating-point implementations.
+The default is soft float.
+.IP "\fB\-mdouble\-float\fR" 4
+.IX Item "-mdouble-float"
+.PD 0
+.IP "\fB\-mno\-double\-float\fR" 4
+.IX Item "-mno-double-float"
+.PD
+When \fB\-mhard\-float\fR is in effect, enable generation of
+double-precision float instructions.  This is the default except
+when compiling for \s-1CK803.\s0
+.IP "\fB\-mfdivdu\fR" 4
+.IX Item "-mfdivdu"
+.PD 0
+.IP "\fB\-mno\-fdivdu\fR" 4
+.IX Item "-mno-fdivdu"
+.PD
+When \fB\-mhard\-float\fR is in effect, enable generation of
+\&\f(CW\*(C`frecipd\*(C'\fR, \f(CW\*(C`fsqrtd\*(C'\fR, and \f(CW\*(C`fdivd\*(C'\fR instructions.
+This is the default except when compiling for \s-1CK803.\s0
+.IP "\fB\-mfpu=\fR\fIfpu\fR" 4
+.IX Item "-mfpu=fpu"
+Select the floating-point processor.  This option can only be used with
+\&\fB\-mhard\-float\fR.
+Values for \fIfpu\fR are
+\&\fBfpv2_sf\fR (equivalent to \fB\-mno\-double\-float \-mno\-fdivdu\fR),
+\&\fBfpv2\fR (\fB\-mdouble\-float \-mno\-divdu\fR), and
+\&\fBfpv2_divd\fR (\fB\-mdouble\-float \-mdivdu\fR).
+.IP "\fB\-melrw\fR" 4
+.IX Item "-melrw"
+.PD 0
+.IP "\fB\-mno\-elrw\fR" 4
+.IX Item "-mno-elrw"
+.PD
+Enable the extended \f(CW\*(C`lrw\*(C'\fR instruction.  This option defaults to on
+for \s-1CK801\s0 and off otherwise.
+.IP "\fB\-mistack\fR" 4
+.IX Item "-mistack"
+.PD 0
+.IP "\fB\-mno\-istack\fR" 4
+.IX Item "-mno-istack"
+.PD
+Enable interrupt stack instructions; the default is off.
+.Sp
+The \fB\-mistack\fR option is required to handle the
+\&\f(CW\*(C`interrupt\*(C'\fR and \f(CW\*(C`isr\*(C'\fR function attributes.
+.IP "\fB\-mmp\fR" 4
+.IX Item "-mmp"
+Enable multiprocessor instructions; the default is off.
+.IP "\fB\-mcp\fR" 4
+.IX Item "-mcp"
+Enable coprocessor instructions; the default is off.
+.IP "\fB\-mcache\fR" 4
+.IX Item "-mcache"
+Enable coprocessor instructions; the default is off.
+.IP "\fB\-msecurity\fR" 4
+.IX Item "-msecurity"
+Enable C\-SKY security instructions; the default is off.
+.IP "\fB\-mtrust\fR" 4
+.IX Item "-mtrust"
+Enable C\-SKY trust instructions; the default is off.
+.IP "\fB\-mdsp\fR" 4
+.IX Item "-mdsp"
+.PD 0
+.IP "\fB\-medsp\fR" 4
+.IX Item "-medsp"
+.IP "\fB\-mvdsp\fR" 4
+.IX Item "-mvdsp"
+.PD
+Enable C\-SKY \s-1DSP,\s0 Enhanced \s-1DSP,\s0 or Vector \s-1DSP\s0 instructions, respectively.
+All of these options default to off.
+.IP "\fB\-mdiv\fR" 4
+.IX Item "-mdiv"
+.PD 0
+.IP "\fB\-mno\-div\fR" 4
+.IX Item "-mno-div"
+.PD
+Generate divide instructions.  Default is off.
+.IP "\fB\-msmart\fR" 4
+.IX Item "-msmart"
+.PD 0
+.IP "\fB\-mno\-smart\fR" 4
+.IX Item "-mno-smart"
+.PD
+Generate code for Smart Mode, using only registers numbered 0\-7 to allow
+use of 16\-bit instructions.  This option is ignored for \s-1CK801\s0 where this
+is the required behavior, and it defaults to on for \s-1CK802.\s0
+For other targets, the default is off.
+.IP "\fB\-mhigh\-registers\fR" 4
+.IX Item "-mhigh-registers"
+.PD 0
+.IP "\fB\-mno\-high\-registers\fR" 4
+.IX Item "-mno-high-registers"
+.PD
+Generate code using the high registers numbered 16\-31.  This option
+is not supported on \s-1CK801, CK802,\s0 or \s-1CK803,\s0 and is enabled by default
+for other processors.
+.IP "\fB\-manchor\fR" 4
+.IX Item "-manchor"
+.PD 0
+.IP "\fB\-mno\-anchor\fR" 4
+.IX Item "-mno-anchor"
+.PD
+Generate code using global anchor symbol addresses.
+.IP "\fB\-mpushpop\fR" 4
+.IX Item "-mpushpop"
+.PD 0
+.IP "\fB\-mno\-pushpop\fR" 4
+.IX Item "-mno-pushpop"
+.PD
+Generate code using \f(CW\*(C`push\*(C'\fR and \f(CW\*(C`pop\*(C'\fR instructions.  This option
+defaults to on.
+.IP "\fB\-mmultiple\-stld\fR" 4
+.IX Item "-mmultiple-stld"
+.PD 0
+.IP "\fB\-mstm\fR" 4
+.IX Item "-mstm"
+.IP "\fB\-mno\-multiple\-stld\fR" 4
+.IX Item "-mno-multiple-stld"
+.IP "\fB\-mno\-stm\fR" 4
+.IX Item "-mno-stm"
+.PD
+Generate code using \f(CW\*(C`stm\*(C'\fR and \f(CW\*(C`ldm\*(C'\fR instructions.  This option
+isn't supported on \s-1CK801\s0 but is enabled by default on other processors.
+.IP "\fB\-mconstpool\fR" 4
+.IX Item "-mconstpool"
+.PD 0
+.IP "\fB\-mno\-constpool\fR" 4
+.IX Item "-mno-constpool"
+.PD
+Create constant pools in the compiler instead of deferring it to the
+assembler.  This option is the default and required for correct code
+generation on \s-1CK801\s0 and \s-1CK802,\s0 and is optional on other processors.
+.IP "\fB\-mstack\-size\fR" 4
+.IX Item "-mstack-size"
+.PD 0
+.IP "\fB\-mno\-stack\-size\fR" 4
+.IX Item "-mno-stack-size"
+.PD
+Emit \f(CW\*(C`.stack_size\*(C'\fR directives for each function in the assembly
+output.  This option defaults to off.
+.IP "\fB\-mccrt\fR" 4
+.IX Item "-mccrt"
+.PD 0
+.IP "\fB\-mno\-ccrt\fR" 4
+.IX Item "-mno-ccrt"
+.PD
+Generate code for the C\-SKY compiler runtime instead of libgcc.  This
+option defaults to off.
+.IP "\fB\-mbranch\-cost=\fR\fIn\fR" 4
+.IX Item "-mbranch-cost=n"
+Set the branch costs to roughly \f(CW\*(C`n\*(C'\fR instructions.  The default is 1.
+.IP "\fB\-msched\-prolog\fR" 4
+.IX Item "-msched-prolog"
+.PD 0
+.IP "\fB\-mno\-sched\-prolog\fR" 4
+.IX Item "-mno-sched-prolog"
+.PD
+Permit scheduling of function prologue and epilogue sequences.  Using
+this option can result in code that is not compliant with the C\-SKY V2 \s-1ABI\s0
+prologue requirements and that cannot be debugged or backtraced.
+It is disabled by default.
+.PP
+\fIDarwin Options\fR
+.IX Subsection "Darwin Options"
+.PP
+These options are defined for all architectures running the Darwin operating
+system.
+.PP
+\&\s-1FSF GCC\s0 on Darwin does not create \*(L"fat\*(R" object files; it creates
+an object file for the single architecture that \s-1GCC\s0 was built to
+target.  Apple's \s-1GCC\s0 on Darwin does create \*(L"fat\*(R" files if multiple
+\&\fB\-arch\fR options are used; it does so by running the compiler or
+linker multiple times and joining the results together with
+\&\fIlipo\fR.
+.PP
+The subtype of the file created (like \fBppc7400\fR or \fBppc970\fR or
+\&\fBi686\fR) is determined by the flags that specify the \s-1ISA\s0
+that \s-1GCC\s0 is targeting, like \fB\-mcpu\fR or \fB\-march\fR.  The
+\&\fB\-force_cpusubtype_ALL\fR option can be used to override this.
+.PP
+The Darwin tools vary in their behavior when presented with an \s-1ISA\s0
+mismatch.  The assembler, \fIas\fR, only permits instructions to
+be used that are valid for the subtype of the file it is generating,
+so you cannot put 64\-bit instructions in a \fBppc750\fR object file.
+The linker for shared libraries, \fI/usr/bin/libtool\fR, fails
+and prints an error if asked to create a shared library with a less
+restrictive subtype than its input files (for instance, trying to put
+a \fBppc970\fR object file in a \fBppc7400\fR library).  The linker
+for executables, \fBld\fR, quietly gives the executable the most
+restrictive subtype of any of its input files.
+.IP "\fB\-F\fR\fIdir\fR" 4
+.IX Item "-Fdir"
+Add the framework directory \fIdir\fR to the head of the list of
+directories to be searched for header files.  These directories are
+interleaved with those specified by \fB\-I\fR options and are
+scanned in a left-to-right order.
+.Sp
+A framework directory is a directory with frameworks in it.  A
+framework is a directory with a \fIHeaders\fR and/or
+\&\fIPrivateHeaders\fR directory contained directly in it that ends
+in \fI.framework\fR.  The name of a framework is the name of this
+directory excluding the \fI.framework\fR.  Headers associated with
+the framework are found in one of those two directories, with
+\&\fIHeaders\fR being searched first.  A subframework is a framework
+directory that is in a framework's \fIFrameworks\fR directory.
+Includes of subframework headers can only appear in a header of a
+framework that contains the subframework, or in a sibling subframework
+header.  Two subframeworks are siblings if they occur in the same
+framework.  A subframework should not have the same name as a
+framework; a warning is issued if this is violated.  Currently a
+subframework cannot have subframeworks; in the future, the mechanism
+may be extended to support this.  The standard frameworks can be found
+in \fI/System/Library/Frameworks\fR and
+\&\fI/Library/Frameworks\fR.  An example include looks like
+\&\f(CW\*(C`#include <Framework/header.h>\*(C'\fR, where \fIFramework\fR denotes
+the name of the framework and \fIheader.h\fR is found in the
+\&\fIPrivateHeaders\fR or \fIHeaders\fR directory.
+.IP "\fB\-iframework\fR\fIdir\fR" 4
+.IX Item "-iframeworkdir"
+Like \fB\-F\fR except the directory is a treated as a system
+directory.  The main difference between this \fB\-iframework\fR and
+\&\fB\-F\fR is that with \fB\-iframework\fR the compiler does not
+warn about constructs contained within header files found via
+\&\fIdir\fR.  This option is valid only for the C family of languages.
+.IP "\fB\-gused\fR" 4
+.IX Item "-gused"
+Emit debugging information for symbols that are used.  For stabs
+debugging format, this enables \fB\-feliminate\-unused\-debug\-symbols\fR.
+This is by default \s-1ON.\s0
+.IP "\fB\-gfull\fR" 4
+.IX Item "-gfull"
+Emit debugging information for all symbols and types.
+.IP "\fB\-mmacosx\-version\-min=\fR\fIversion\fR" 4
+.IX Item "-mmacosx-version-min=version"
+The earliest version of MacOS X that this executable will run on
+is \fIversion\fR.  Typical values of \fIversion\fR include \f(CW10.1\fR,
+\&\f(CW10.2\fR, and \f(CW10.3.9\fR.
+.Sp
+If the compiler was built to use the system's headers by default,
+then the default for this option is the system version on which the
+compiler is running, otherwise the default is to make choices that
+are compatible with as many systems and code bases as possible.
+.IP "\fB\-mkernel\fR" 4
+.IX Item "-mkernel"
+Enable kernel development mode.  The \fB\-mkernel\fR option sets
+\&\fB\-static\fR, \fB\-fno\-common\fR, \fB\-fno\-use\-cxa\-atexit\fR,
+\&\fB\-fno\-exceptions\fR, \fB\-fno\-non\-call\-exceptions\fR,
+\&\fB\-fapple\-kext\fR, \fB\-fno\-weak\fR and \fB\-fno\-rtti\fR where
+applicable.  This mode also sets \fB\-mno\-altivec\fR,
+\&\fB\-msoft\-float\fR, \fB\-fno\-builtin\fR and
+\&\fB\-mlong\-branch\fR for PowerPC targets.
+.IP "\fB\-mone\-byte\-bool\fR" 4
+.IX Item "-mone-byte-bool"
+Override the defaults for \f(CW\*(C`bool\*(C'\fR so that \f(CW\*(C`sizeof(bool)==1\*(C'\fR.
+By default \f(CW\*(C`sizeof(bool)\*(C'\fR is \f(CW4\fR when compiling for
+Darwin/PowerPC and \f(CW1\fR when compiling for Darwin/x86, so this
+option has no effect on x86.
+.Sp
+\&\fBWarning:\fR The \fB\-mone\-byte\-bool\fR switch causes \s-1GCC\s0
+to generate code that is not binary compatible with code generated
+without that switch.  Using this switch may require recompiling all
+other modules in a program, including system libraries.  Use this
+switch to conform to a non-default data model.
+.IP "\fB\-mfix\-and\-continue\fR" 4
+.IX Item "-mfix-and-continue"
+.PD 0
+.IP "\fB\-ffix\-and\-continue\fR" 4
+.IX Item "-ffix-and-continue"
+.IP "\fB\-findirect\-data\fR" 4
+.IX Item "-findirect-data"
+.PD
+Generate code suitable for fast turnaround development, such as to
+allow \s-1GDB\s0 to dynamically load \fI.o\fR files into already-running
+programs.  \fB\-findirect\-data\fR and \fB\-ffix\-and\-continue\fR
+are provided for backwards compatibility.
+.IP "\fB\-all_load\fR" 4
+.IX Item "-all_load"
+Loads all members of static archive libraries.
+See man \fIld\fR\|(1) for more information.
+.IP "\fB\-arch_errors_fatal\fR" 4
+.IX Item "-arch_errors_fatal"
+Cause the errors having to do with files that have the wrong architecture
+to be fatal.
+.IP "\fB\-bind_at_load\fR" 4
+.IX Item "-bind_at_load"
+Causes the output file to be marked such that the dynamic linker will
+bind all undefined references when the file is loaded or launched.
+.IP "\fB\-bundle\fR" 4
+.IX Item "-bundle"
+Produce a Mach-o bundle format file.
+See man \fIld\fR\|(1) for more information.
+.IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4
+.IX Item "-bundle_loader executable"
+This option specifies the \fIexecutable\fR that will load the build
+output file being linked.  See man \fIld\fR\|(1) for more information.
+.IP "\fB\-dynamiclib\fR" 4
+.IX Item "-dynamiclib"
+When passed this option, \s-1GCC\s0 produces a dynamic library instead of
+an executable when linking, using the Darwin \fIlibtool\fR command.
+.IP "\fB\-force_cpusubtype_ALL\fR" 4
+.IX Item "-force_cpusubtype_ALL"
+This causes \s-1GCC\s0's output file to have the \fB\s-1ALL\s0\fR subtype, instead of
+one controlled by the \fB\-mcpu\fR or \fB\-march\fR option.
+.IP "\fB\-allowable_client\fR  \fIclient_name\fR" 4
+.IX Item "-allowable_client client_name"
+.PD 0
+.IP "\fB\-client_name\fR" 4
+.IX Item "-client_name"
+.IP "\fB\-compatibility_version\fR" 4
+.IX Item "-compatibility_version"
+.IP "\fB\-current_version\fR" 4
+.IX Item "-current_version"
+.IP "\fB\-dead_strip\fR" 4
+.IX Item "-dead_strip"
+.IP "\fB\-dependency\-file\fR" 4
+.IX Item "-dependency-file"
+.IP "\fB\-dylib_file\fR" 4
+.IX Item "-dylib_file"
+.IP "\fB\-dylinker_install_name\fR" 4
+.IX Item "-dylinker_install_name"
+.IP "\fB\-dynamic\fR" 4
+.IX Item "-dynamic"
+.IP "\fB\-exported_symbols_list\fR" 4
+.IX Item "-exported_symbols_list"
+.IP "\fB\-filelist\fR" 4
+.IX Item "-filelist"
+.IP "\fB\-flat_namespace\fR" 4
+.IX Item "-flat_namespace"
+.IP "\fB\-force_flat_namespace\fR" 4
+.IX Item "-force_flat_namespace"
+.IP "\fB\-headerpad_max_install_names\fR" 4
+.IX Item "-headerpad_max_install_names"
+.IP "\fB\-image_base\fR" 4
+.IX Item "-image_base"
+.IP "\fB\-init\fR" 4
+.IX Item "-init"
+.IP "\fB\-install_name\fR" 4
+.IX Item "-install_name"
+.IP "\fB\-keep_private_externs\fR" 4
+.IX Item "-keep_private_externs"
+.IP "\fB\-multi_module\fR" 4
+.IX Item "-multi_module"
+.IP "\fB\-multiply_defined\fR" 4
+.IX Item "-multiply_defined"
+.IP "\fB\-multiply_defined_unused\fR" 4
+.IX Item "-multiply_defined_unused"
+.IP "\fB\-noall_load\fR" 4
+.IX Item "-noall_load"
+.IP "\fB\-no_dead_strip_inits_and_terms\fR" 4
+.IX Item "-no_dead_strip_inits_and_terms"
+.IP "\fB\-nofixprebinding\fR" 4
+.IX Item "-nofixprebinding"
+.IP "\fB\-nomultidefs\fR" 4
+.IX Item "-nomultidefs"
+.IP "\fB\-noprebind\fR" 4
+.IX Item "-noprebind"
+.IP "\fB\-noseglinkedit\fR" 4
+.IX Item "-noseglinkedit"
+.IP "\fB\-pagezero_size\fR" 4
+.IX Item "-pagezero_size"
+.IP "\fB\-prebind\fR" 4
+.IX Item "-prebind"
+.IP "\fB\-prebind_all_twolevel_modules\fR" 4
+.IX Item "-prebind_all_twolevel_modules"
+.IP "\fB\-private_bundle\fR" 4
+.IX Item "-private_bundle"
+.IP "\fB\-read_only_relocs\fR" 4
+.IX Item "-read_only_relocs"
+.IP "\fB\-sectalign\fR" 4
+.IX Item "-sectalign"
+.IP "\fB\-sectobjectsymbols\fR" 4
+.IX Item "-sectobjectsymbols"
+.IP "\fB\-whyload\fR" 4
+.IX Item "-whyload"
+.IP "\fB\-seg1addr\fR" 4
+.IX Item "-seg1addr"
+.IP "\fB\-sectcreate\fR" 4
+.IX Item "-sectcreate"
+.IP "\fB\-sectobjectsymbols\fR" 4
+.IX Item "-sectobjectsymbols"
+.IP "\fB\-sectorder\fR" 4
+.IX Item "-sectorder"
+.IP "\fB\-segaddr\fR" 4
+.IX Item "-segaddr"
+.IP "\fB\-segs_read_only_addr\fR" 4
+.IX Item "-segs_read_only_addr"
+.IP "\fB\-segs_read_write_addr\fR" 4
+.IX Item "-segs_read_write_addr"
+.IP "\fB\-seg_addr_table\fR" 4
+.IX Item "-seg_addr_table"
+.IP "\fB\-seg_addr_table_filename\fR" 4
+.IX Item "-seg_addr_table_filename"
+.IP "\fB\-seglinkedit\fR" 4
+.IX Item "-seglinkedit"
+.IP "\fB\-segprot\fR" 4
+.IX Item "-segprot"
+.IP "\fB\-segs_read_only_addr\fR" 4
+.IX Item "-segs_read_only_addr"
+.IP "\fB\-segs_read_write_addr\fR" 4
+.IX Item "-segs_read_write_addr"
+.IP "\fB\-single_module\fR" 4
+.IX Item "-single_module"
+.IP "\fB\-static\fR" 4
+.IX Item "-static"
+.IP "\fB\-sub_library\fR" 4
+.IX Item "-sub_library"
+.IP "\fB\-sub_umbrella\fR" 4
+.IX Item "-sub_umbrella"
+.IP "\fB\-twolevel_namespace\fR" 4
+.IX Item "-twolevel_namespace"
+.IP "\fB\-umbrella\fR" 4
+.IX Item "-umbrella"
+.IP "\fB\-undefined\fR" 4
+.IX Item "-undefined"
+.IP "\fB\-unexported_symbols_list\fR" 4
+.IX Item "-unexported_symbols_list"
+.IP "\fB\-weak_reference_mismatches\fR" 4
+.IX Item "-weak_reference_mismatches"
+.IP "\fB\-whatsloaded\fR" 4
+.IX Item "-whatsloaded"
+.PD
+These options are passed to the Darwin linker.  The Darwin linker man page
+describes them in detail.
+.PP
+\fI\s-1DEC\s0 Alpha Options\fR
+.IX Subsection "DEC Alpha Options"
+.PP
+These \fB\-m\fR options are defined for the \s-1DEC\s0 Alpha implementations:
+.IP "\fB\-mno\-soft\-float\fR" 4
+.IX Item "-mno-soft-float"
+.PD 0
+.IP "\fB\-msoft\-float\fR" 4
+.IX Item "-msoft-float"
+.PD
+Use (do not use) the hardware floating-point instructions for
+floating-point operations.  When \fB\-msoft\-float\fR is specified,
+functions in \fIlibgcc.a\fR are used to perform floating-point
+operations.  Unless they are replaced by routines that emulate the
+floating-point operations, or compiled in such a way as to call such
+emulations routines, these routines issue floating-point
+operations.   If you are compiling for an Alpha without floating-point
+operations, you must ensure that the library is built so as not to call
+them.
+.Sp
+Note that Alpha implementations without floating-point operations are
+required to have floating-point registers.
+.IP "\fB\-mfp\-reg\fR" 4
+.IX Item "-mfp-reg"
+.PD 0
+.IP "\fB\-mno\-fp\-regs\fR" 4
+.IX Item "-mno-fp-regs"
+.PD
+Generate code that uses (does not use) the floating-point register set.
+\&\fB\-mno\-fp\-regs\fR implies \fB\-msoft\-float\fR.  If the floating-point
+register set is not used, floating-point operands are passed in integer
+registers as if they were integers and floating-point results are passed
+in \f(CW$0\fR instead of \f(CW$f0\fR.  This is a non-standard calling sequence,
+so any function with a floating-point argument or return value called by code
+compiled with \fB\-mno\-fp\-regs\fR must also be compiled with that
+option.
+.Sp
+A typical use of this option is building a kernel that does not use,
+and hence need not save and restore, any floating-point registers.
+.IP "\fB\-mieee\fR" 4
+.IX Item "-mieee"
+The Alpha architecture implements floating-point hardware optimized for
+maximum performance.  It is mostly compliant with the \s-1IEEE\s0 floating-point
+standard.  However, for full compliance, software assistance is
+required.  This option generates code fully IEEE-compliant code
+\&\fIexcept\fR that the \fIinexact-flag\fR is not maintained (see below).
+If this option is turned on, the preprocessor macro \f(CW\*(C`_IEEE_FP\*(C'\fR is
+defined during compilation.  The resulting code is less efficient but is
+able to correctly support denormalized numbers and exceptional \s-1IEEE\s0
+values such as not-a-number and plus/minus infinity.  Other Alpha
+compilers call this option \fB\-ieee_with_no_inexact\fR.
+.IP "\fB\-mieee\-with\-inexact\fR" 4
+.IX Item "-mieee-with-inexact"
+This is like \fB\-mieee\fR except the generated code also maintains
+the \s-1IEEE\s0 \fIinexact-flag\fR.  Turning on this option causes the
+generated code to implement fully-compliant \s-1IEEE\s0 math.  In addition to
+\&\f(CW\*(C`_IEEE_FP\*(C'\fR, \f(CW\*(C`_IEEE_FP_EXACT\*(C'\fR is defined as a preprocessor
+macro.  On some Alpha implementations the resulting code may execute
+significantly slower than the code generated by default.  Since there is
+very little code that depends on the \fIinexact-flag\fR, you should
+normally not specify this option.  Other Alpha compilers call this
+option \fB\-ieee_with_inexact\fR.
+.IP "\fB\-mfp\-trap\-mode=\fR\fItrap-mode\fR" 4
+.IX Item "-mfp-trap-mode=trap-mode"
+This option controls what floating-point related traps are enabled.
+Other Alpha compilers call this option \fB\-fptm\fR \fItrap-mode\fR.
+The trap mode can be set to one of four values:
+.RS 4
+.IP "\fBn\fR" 4
+.IX Item "n"
+This is the default (normal) setting.  The only traps that are enabled
+are the ones that cannot be disabled in software (e.g., division by zero
+trap).
+.IP "\fBu\fR" 4
+.IX Item "u"
+In addition to the traps enabled by \fBn\fR, underflow traps are enabled
+as well.
+.IP "\fBsu\fR" 4
+.IX Item "su"
+Like \fBu\fR, but the instructions are marked to be safe for software
+completion (see Alpha architecture manual for details).
+.IP "\fBsui\fR" 4
+.IX Item "sui"
+Like \fBsu\fR, but inexact traps are enabled as well.
+.RE
+.RS 4
+.RE
+.IP "\fB\-mfp\-rounding\-mode=\fR\fIrounding-mode\fR" 4
+.IX Item "-mfp-rounding-mode=rounding-mode"
+Selects the \s-1IEEE\s0 rounding mode.  Other Alpha compilers call this option
+\&\fB\-fprm\fR \fIrounding-mode\fR.  The \fIrounding-mode\fR can be one
+of:
+.RS 4
+.IP "\fBn\fR" 4
+.IX Item "n"
+Normal \s-1IEEE\s0 rounding mode.  Floating-point numbers are rounded towards
+the nearest machine number or towards the even machine number in case
+of a tie.
+.IP "\fBm\fR" 4
+.IX Item "m"
+Round towards minus infinity.
+.IP "\fBc\fR" 4
+.IX Item "c"
+Chopped rounding mode.  Floating-point numbers are rounded towards zero.
+.IP "\fBd\fR" 4
+.IX Item "d"
+Dynamic rounding mode.  A field in the floating-point control register
+(\fIfpcr\fR, see Alpha architecture reference manual) controls the
+rounding mode in effect.  The C library initializes this register for
+rounding towards plus infinity.  Thus, unless your program modifies the
+\&\fIfpcr\fR, \fBd\fR corresponds to round towards plus infinity.
+.RE
+.RS 4
+.RE
+.IP "\fB\-mtrap\-precision=\fR\fItrap-precision\fR" 4
+.IX Item "-mtrap-precision=trap-precision"
+In the Alpha architecture, floating-point traps are imprecise.  This
+means without software assistance it is impossible to recover from a
+floating trap and program execution normally needs to be terminated.
+\&\s-1GCC\s0 can generate code that can assist operating system trap handlers
+in determining the exact location that caused a floating-point trap.
+Depending on the requirements of an application, different levels of
+precisions can be selected:
+.RS 4
+.IP "\fBp\fR" 4
+.IX Item "p"
+Program precision.  This option is the default and means a trap handler
+can only identify which program caused a floating-point exception.
+.IP "\fBf\fR" 4
+.IX Item "f"
+Function precision.  The trap handler can determine the function that
+caused a floating-point exception.
+.IP "\fBi\fR" 4
+.IX Item "i"
+Instruction precision.  The trap handler can determine the exact
+instruction that caused a floating-point exception.
+.RE
+.RS 4
+.Sp
+Other Alpha compilers provide the equivalent options called
+\&\fB\-scope_safe\fR and \fB\-resumption_safe\fR.
+.RE
+.IP "\fB\-mieee\-conformant\fR" 4
+.IX Item "-mieee-conformant"
+This option marks the generated code as \s-1IEEE\s0 conformant.  You must not
+use this option unless you also specify \fB\-mtrap\-precision=i\fR and either
+\&\fB\-mfp\-trap\-mode=su\fR or \fB\-mfp\-trap\-mode=sui\fR.  Its only effect
+is to emit the line \fB.eflag 48\fR in the function prologue of the
+generated assembly file.
+.IP "\fB\-mbuild\-constants\fR" 4
+.IX Item "-mbuild-constants"
+Normally \s-1GCC\s0 examines a 32\- or 64\-bit integer constant to
+see if it can construct it from smaller constants in two or three
+instructions.  If it cannot, it outputs the constant as a literal and
+generates code to load it from the data segment at run time.
+.Sp
+Use this option to require \s-1GCC\s0 to construct \fIall\fR integer constants
+using code, even if it takes more instructions (the maximum is six).
+.Sp
+You typically use this option to build a shared library dynamic
+loader.  Itself a shared library, it must relocate itself in memory
+before it can find the variables and constants in its own data segment.
+.IP "\fB\-mbwx\fR" 4
+.IX Item "-mbwx"
+.PD 0
+.IP "\fB\-mno\-bwx\fR" 4
+.IX Item "-mno-bwx"
+.IP "\fB\-mcix\fR" 4
+.IX Item "-mcix"
+.IP "\fB\-mno\-cix\fR" 4
+.IX Item "-mno-cix"
+.IP "\fB\-mfix\fR" 4
+.IX Item "-mfix"
+.IP "\fB\-mno\-fix\fR" 4
+.IX Item "-mno-fix"
+.IP "\fB\-mmax\fR" 4
+.IX Item "-mmax"
+.IP "\fB\-mno\-max\fR" 4
+.IX Item "-mno-max"
+.PD
+Indicate whether \s-1GCC\s0 should generate code to use the optional \s-1BWX,
+CIX, FIX\s0 and \s-1MAX\s0 instruction sets.  The default is to use the instruction
+sets supported by the \s-1CPU\s0 type specified via \fB\-mcpu=\fR option or that
+of the \s-1CPU\s0 on which \s-1GCC\s0 was built if none is specified.
+.IP "\fB\-mfloat\-vax\fR" 4
+.IX Item "-mfloat-vax"
+.PD 0
+.IP "\fB\-mfloat\-ieee\fR" 4
+.IX Item "-mfloat-ieee"
+.PD
+Generate code that uses (does not use) \s-1VAX F\s0 and G floating-point
+arithmetic instead of \s-1IEEE\s0 single and double precision.
+.IP "\fB\-mexplicit\-relocs\fR" 4
+.IX Item "-mexplicit-relocs"
+.PD 0
+.IP "\fB\-mno\-explicit\-relocs\fR" 4
+.IX Item "-mno-explicit-relocs"
+.PD
+Older Alpha assemblers provided no way to generate symbol relocations
+except via assembler macros.  Use of these macros does not allow
+optimal instruction scheduling.  \s-1GNU\s0 binutils as of version 2.12
+supports a new syntax that allows the compiler to explicitly mark
+which relocations should apply to which instructions.  This option
+is mostly useful for debugging, as \s-1GCC\s0 detects the capabilities of
+the assembler when it is built and sets the default accordingly.
+.IP "\fB\-msmall\-data\fR" 4
+.IX Item "-msmall-data"
+.PD 0
+.IP "\fB\-mlarge\-data\fR" 4
+.IX Item "-mlarge-data"
+.PD
+When \fB\-mexplicit\-relocs\fR is in effect, static data is
+accessed via \fIgp-relative\fR relocations.  When \fB\-msmall\-data\fR
+is used, objects 8 bytes long or smaller are placed in a \fIsmall data area\fR
+(the \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR sections) and are accessed via
+16\-bit relocations off of the \f(CW$gp\fR register.  This limits the
+size of the small data area to 64KB, but allows the variables to be
+directly accessed via a single instruction.
+.Sp
+The default is \fB\-mlarge\-data\fR.  With this option the data area
+is limited to just below 2GB.  Programs that require more than 2GB of
+data must use \f(CW\*(C`malloc\*(C'\fR or \f(CW\*(C`mmap\*(C'\fR to allocate the data in the
+heap instead of in the program's data segment.
+.Sp
+When generating code for shared libraries, \fB\-fpic\fR implies
+\&\fB\-msmall\-data\fR and \fB\-fPIC\fR implies \fB\-mlarge\-data\fR.
+.IP "\fB\-msmall\-text\fR" 4
+.IX Item "-msmall-text"
+.PD 0
+.IP "\fB\-mlarge\-text\fR" 4
+.IX Item "-mlarge-text"
+.PD
+When \fB\-msmall\-text\fR is used, the compiler assumes that the
+code of the entire program (or shared library) fits in 4MB, and is
+thus reachable with a branch instruction.  When \fB\-msmall\-data\fR
+is used, the compiler can assume that all local symbols share the
+same \f(CW$gp\fR value, and thus reduce the number of instructions
+required for a function call from 4 to 1.
+.Sp
+The default is \fB\-mlarge\-text\fR.
+.IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
+.IX Item "-mcpu=cpu_type"
+Set the instruction set and instruction scheduling parameters for
+machine type \fIcpu_type\fR.  You can specify either the \fB\s-1EV\s0\fR
+style name or the corresponding chip number.  \s-1GCC\s0 supports scheduling
+parameters for the \s-1EV4, EV5\s0 and \s-1EV6\s0 family of processors and
+chooses the default values for the instruction set from the processor
+you specify.  If you do not specify a processor type, \s-1GCC\s0 defaults
+to the processor on which the compiler was built.
+.Sp
+Supported values for \fIcpu_type\fR are
+.RS 4
+.IP "\fBev4\fR" 4
+.IX Item "ev4"
+.PD 0
+.IP "\fBev45\fR" 4
+.IX Item "ev45"
+.IP "\fB21064\fR" 4
+.IX Item "21064"
+.PD
+Schedules as an \s-1EV4\s0 and has no instruction set extensions.
+.IP "\fBev5\fR" 4
+.IX Item "ev5"
+.PD 0
+.IP "\fB21164\fR" 4
+.IX Item "21164"
+.PD
+Schedules as an \s-1EV5\s0 and has no instruction set extensions.
+.IP "\fBev56\fR" 4
+.IX Item "ev56"
+.PD 0
+.IP "\fB21164a\fR" 4
+.IX Item "21164a"
+.PD
+Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 extension.
+.IP "\fBpca56\fR" 4
+.IX Item "pca56"
+.PD 0
+.IP "\fB21164pc\fR" 4
+.IX Item "21164pc"
+.IP "\fB21164PC\fR" 4
+.IX Item "21164PC"
+.PD
+Schedules as an \s-1EV5\s0 and supports the \s-1BWX\s0 and \s-1MAX\s0 extensions.
+.IP "\fBev6\fR" 4
+.IX Item "ev6"
+.PD 0
+.IP "\fB21264\fR" 4
+.IX Item "21264"
+.PD
+Schedules as an \s-1EV6\s0 and supports the \s-1BWX, FIX,\s0 and \s-1MAX\s0 extensions.
+.IP "\fBev67\fR" 4
+.IX Item "ev67"
+.PD 0
+.IP "\fB21264a\fR" 4
+.IX Item "21264a"
+.PD
+Schedules as an \s-1EV6\s0 and supports the \s-1BWX, CIX, FIX,\s0 and \s-1MAX\s0 extensions.
+.RE
+.RS 4
+.Sp
+Native toolchains also support the value \fBnative\fR,
+which selects the best architecture option for the host processor.
+\&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize
+the processor.
+.RE
+.IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
+.IX Item "-mtune=cpu_type"
+Set only the instruction scheduling parameters for machine type
+\&\fIcpu_type\fR.  The instruction set is not changed.
+.Sp
+Native toolchains also support the value \fBnative\fR,
+which selects the best architecture option for the host processor.
+\&\fB\-mtune=native\fR has no effect if \s-1GCC\s0 does not recognize
+the processor.
+.IP "\fB\-mmemory\-latency=\fR\fItime\fR" 4
+.IX Item "-mmemory-latency=time"
+Sets the latency the scheduler should assume for typical memory
+references as seen by the application.  This number is highly
+dependent on the memory access patterns used by the application
+and the size of the external cache on the machine.
+.Sp
+Valid options for \fItime\fR are
+.RS 4
+.IP "\fInumber\fR" 4
+.IX Item "number"
+A decimal number representing clock cycles.
+.IP "\fBL1\fR" 4
+.IX Item "L1"
+.PD 0
+.IP "\fBL2\fR" 4
+.IX Item "L2"
+.IP "\fBL3\fR" 4
+.IX Item "L3"
+.IP "\fBmain\fR" 4
+.IX Item "main"
+.PD
+The compiler contains estimates of the number of clock cycles for
+\&\*(L"typical\*(R" \s-1EV4 & EV5\s0 hardware for the Level 1, 2 & 3 caches
+(also called Dcache, Scache, and Bcache), as well as to main memory.
+Note that L3 is only valid for \s-1EV5.\s0
+.RE
+.RS 4
+.RE
+.PP
+\fI\s-1FR30\s0 Options\fR
+.IX Subsection "FR30 Options"
+.PP
+These options are defined specifically for the \s-1FR30\s0 port.
+.IP "\fB\-msmall\-model\fR" 4
+.IX Item "-msmall-model"
+Use the small address space model.  This can produce smaller code, but
+it does assume that all symbolic values and addresses fit into a
+20\-bit range.
+.IP "\fB\-mno\-lsim\fR" 4
+.IX Item "-mno-lsim"
+Assume that runtime support has been provided and so there is no need
+to include the simulator library (\fIlibsim.a\fR) on the linker
+command line.
+.PP
+\fI\s-1FT32\s0 Options\fR
+.IX Subsection "FT32 Options"
+.PP
+These options are defined specifically for the \s-1FT32\s0 port.
+.IP "\fB\-msim\fR" 4
+.IX Item "-msim"
+Specifies that the program will be run on the simulator.  This causes
+an alternate runtime startup and library to be linked.
+You must not use this option when generating programs that will run on
+real hardware; you must provide your own runtime library for whatever
+I/O functions are needed.
+.IP "\fB\-mlra\fR" 4
+.IX Item "-mlra"
+Enable Local Register Allocation.  This is still experimental for \s-1FT32,\s0
+so by default the compiler uses standard reload.
+.IP "\fB\-mnodiv\fR" 4
+.IX Item "-mnodiv"
+Do not use div and mod instructions.
+.IP "\fB\-mft32b\fR" 4
+.IX Item "-mft32b"
+Enable use of the extended instructions of the \s-1FT32B\s0 processor.
+.IP "\fB\-mcompress\fR" 4
+.IX Item "-mcompress"
+Compress all code using the Ft32B code compression scheme.
+.IP "\fB\-mnopm\fR" 4
+.IX Item "-mnopm"
+Do not generate code that reads program memory.
+.PP
+\fI\s-1FRV\s0 Options\fR
+.IX Subsection "FRV Options"
+.IP "\fB\-mgpr\-32\fR" 4
+.IX Item "-mgpr-32"
+Only use the first 32 general-purpose registers.
+.IP "\fB\-mgpr\-64\fR" 4
+.IX Item "-mgpr-64"
+Use all 64 general-purpose registers.
+.IP "\fB\-mfpr\-32\fR" 4
+.IX Item "-mfpr-32"
+Use only the first 32 floating-point registers.
+.IP "\fB\-mfpr\-64\fR" 4
+.IX Item "-mfpr-64"
+Use all 64 floating-point registers.
+.IP "\fB\-mhard\-float\fR" 4
+.IX Item "-mhard-float"
+Use hardware instructions for floating-point operations.
+.IP "\fB\-msoft\-float\fR" 4
+.IX Item "-msoft-float"
+Use library routines for floating-point operations.
+.IP "\fB\-malloc\-cc\fR" 4
+.IX Item "-malloc-cc"
+Dynamically allocate condition code registers.
+.IP "\fB\-mfixed\-cc\fR" 4
+.IX Item "-mfixed-cc"
+Do not try to dynamically allocate condition code registers, only
+use \f(CW\*(C`icc0\*(C'\fR and \f(CW\*(C`fcc0\*(C'\fR.
+.IP "\fB\-mdword\fR" 4
+.IX Item "-mdword"
+Change \s-1ABI\s0 to use double word insns.
+.IP "\fB\-mno\-dword\fR" 4
+.IX Item "-mno-dword"
+Do not use double word instructions.
+.IP "\fB\-mdouble\fR" 4
+.IX Item "-mdouble"
+Use floating-point double instructions.
+.IP "\fB\-mno\-double\fR" 4
+.IX Item "-mno-double"
+Do not use floating-point double instructions.
+.IP "\fB\-mmedia\fR" 4
+.IX Item "-mmedia"
+Use media instructions.
+.IP "\fB\-mno\-media\fR" 4
+.IX Item "-mno-media"
+Do not use media instructions.
+.IP "\fB\-mmuladd\fR" 4
+.IX Item "-mmuladd"
+Use multiply and add/subtract instructions.
+.IP "\fB\-mno\-muladd\fR" 4
+.IX Item "-mno-muladd"
+Do not use multiply and add/subtract instructions.
+.IP "\fB\-mfdpic\fR" 4
+.IX Item "-mfdpic"
+Select the \s-1FDPIC ABI,\s0 which uses function descriptors to represent
+pointers to functions.  Without any PIC/PIE\-related options, it
+implies \fB\-fPIE\fR.  With \fB\-fpic\fR or \fB\-fpie\fR, it
+assumes \s-1GOT\s0 entries and small data are within a 12\-bit range from the
+\&\s-1GOT\s0 base address; with \fB\-fPIC\fR or \fB\-fPIE\fR, \s-1GOT\s0 offsets
+are computed with 32 bits.
+With a \fBbfin-elf\fR target, this option implies \fB\-msim\fR.
+.IP "\fB\-minline\-plt\fR" 4
+.IX Item "-minline-plt"
+Enable inlining of \s-1PLT\s0 entries in function calls to functions that are
+not known to bind locally.  It has no effect without \fB\-mfdpic\fR.
+It's enabled by default if optimizing for speed and compiling for
+shared libraries (i.e., \fB\-fPIC\fR or \fB\-fpic\fR), or when an
+optimization option such as \fB\-O3\fR or above is present in the
+command line.
+.IP "\fB\-mTLS\fR" 4
+.IX Item "-mTLS"
+Assume a large \s-1TLS\s0 segment when generating thread-local code.
+.IP "\fB\-mtls\fR" 4
+.IX Item "-mtls"
+Do not assume a large \s-1TLS\s0 segment when generating thread-local code.
+.IP "\fB\-mgprel\-ro\fR" 4
+.IX Item "-mgprel-ro"
+Enable the use of \f(CW\*(C`GPREL\*(C'\fR relocations in the \s-1FDPIC ABI\s0 for data
+that is known to be in read-only sections.  It's enabled by default,
+except for \fB\-fpic\fR or \fB\-fpie\fR: even though it may help
+make the global offset table smaller, it trades 1 instruction for 4.
+With \fB\-fPIC\fR or \fB\-fPIE\fR, it trades 3 instructions for 4,
+one of which may be shared by multiple symbols, and it avoids the need
+for a \s-1GOT\s0 entry for the referenced symbol, so it's more likely to be a
+win.  If it is not, \fB\-mno\-gprel\-ro\fR can be used to disable it.
+.IP "\fB\-multilib\-library\-pic\fR" 4
+.IX Item "-multilib-library-pic"
+Link with the (library, not \s-1FD\s0) pic libraries.  It's implied by
+\&\fB\-mlibrary\-pic\fR, as well as by \fB\-fPIC\fR and
+\&\fB\-fpic\fR without \fB\-mfdpic\fR.  You should never have to use
+it explicitly.
+.IP "\fB\-mlinked\-fp\fR" 4
+.IX Item "-mlinked-fp"
+Follow the \s-1EABI\s0 requirement of always creating a frame pointer whenever
+a stack frame is allocated.  This option is enabled by default and can
+be disabled with \fB\-mno\-linked\-fp\fR.
+.IP "\fB\-mlong\-calls\fR" 4
+.IX Item "-mlong-calls"
+Use indirect addressing to call functions outside the current
+compilation unit.  This allows the functions to be placed anywhere
+within the 32\-bit address space.
+.IP "\fB\-malign\-labels\fR" 4
+.IX Item "-malign-labels"
+Try to align labels to an 8\-byte boundary by inserting NOPs into the
+previous packet.  This option only has an effect when \s-1VLIW\s0 packing
+is enabled.  It doesn't create new packets; it merely adds NOPs to
+existing ones.
+.IP "\fB\-mlibrary\-pic\fR" 4
+.IX Item "-mlibrary-pic"
+Generate position-independent \s-1EABI\s0 code.
+.IP "\fB\-macc\-4\fR" 4
+.IX Item "-macc-4"
+Use only the first four media accumulator registers.
+.IP "\fB\-macc\-8\fR" 4
+.IX Item "-macc-8"
+Use all eight media accumulator registers.
+.IP "\fB\-mpack\fR" 4
+.IX Item "-mpack"
+Pack \s-1VLIW\s0 instructions.
+.IP "\fB\-mno\-pack\fR" 4
+.IX Item "-mno-pack"
+Do not pack \s-1VLIW\s0 instructions.
+.IP "\fB\-mno\-eflags\fR" 4
+.IX Item "-mno-eflags"
+Do not mark \s-1ABI\s0 switches in e_flags.
+.IP "\fB\-mcond\-move\fR" 4
+.IX Item "-mcond-move"
+Enable the use of conditional-move instructions (default).
+.Sp
+This switch is mainly for debugging the compiler and will likely be removed
+in a future version.
+.IP "\fB\-mno\-cond\-move\fR" 4
+.IX Item "-mno-cond-move"
+Disable the use of conditional-move instructions.
+.Sp
+This switch is mainly for debugging the compiler and will likely be removed
+in a future version.
+.IP "\fB\-mscc\fR" 4
+.IX Item "-mscc"
+Enable the use of conditional set instructions (default).
+.Sp
+This switch is mainly for debugging the compiler and will likely be removed
+in a future version.
+.IP "\fB\-mno\-scc\fR" 4
+.IX Item "-mno-scc"
+Disable the use of conditional set instructions.
+.Sp
+This switch is mainly for debugging the compiler and will likely be removed
+in a future version.
+.IP "\fB\-mcond\-exec\fR" 4
+.IX Item "-mcond-exec"
+Enable the use of conditional execution (default).
+.Sp
+This switch is mainly for debugging the compiler and will likely be removed
+in a future version.
+.IP "\fB\-mno\-cond\-exec\fR" 4
+.IX Item "-mno-cond-exec"
+Disable the use of conditional execution.
+.Sp
+This switch is mainly for debugging the compiler and will likely be removed
+in a future version.
+.IP "\fB\-mvliw\-branch\fR" 4
+.IX Item "-mvliw-branch"
+Run a pass to pack branches into \s-1VLIW\s0 instructions (default).
+.Sp
+This switch is mainly for debugging the compiler and will likely be removed
+in a future version.
+.IP "\fB\-mno\-vliw\-branch\fR" 4
+.IX Item "-mno-vliw-branch"
+Do not run a pass to pack branches into \s-1VLIW\s0 instructions.
+.Sp
+This switch is mainly for debugging the compiler and will likely be removed
+in a future version.
+.IP "\fB\-mmulti\-cond\-exec\fR" 4
+.IX Item "-mmulti-cond-exec"
+Enable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution
+(default).
+.Sp
+This switch is mainly for debugging the compiler and will likely be removed
+in a future version.
+.IP "\fB\-mno\-multi\-cond\-exec\fR" 4
+.IX Item "-mno-multi-cond-exec"
+Disable optimization of \f(CW\*(C`&&\*(C'\fR and \f(CW\*(C`||\*(C'\fR in conditional execution.
+.Sp
+This switch is mainly for debugging the compiler and will likely be removed
+in a future version.
+.IP "\fB\-mnested\-cond\-exec\fR" 4
+.IX Item "-mnested-cond-exec"
+Enable nested conditional execution optimizations (default).
+.Sp
+This switch is mainly for debugging the compiler and will likely be removed
+in a future version.
+.IP "\fB\-mno\-nested\-cond\-exec\fR" 4
+.IX Item "-mno-nested-cond-exec"
+Disable nested conditional execution optimizations.
+.Sp
+This switch is mainly for debugging the compiler and will likely be removed
+in a future version.
+.IP "\fB\-moptimize\-membar\fR" 4
+.IX Item "-moptimize-membar"
+This switch removes redundant \f(CW\*(C`membar\*(C'\fR instructions from the
+compiler-generated code.  It is enabled by default.
+.IP "\fB\-mno\-optimize\-membar\fR" 4
+.IX Item "-mno-optimize-membar"
+This switch disables the automatic removal of redundant \f(CW\*(C`membar\*(C'\fR
+instructions from the generated code.
+.IP "\fB\-mtomcat\-stats\fR" 4
+.IX Item "-mtomcat-stats"
+Cause gas to print out tomcat statistics.
+.IP "\fB\-mcpu=\fR\fIcpu\fR" 4
+.IX Item "-mcpu=cpu"
+Select the processor type for which to generate code.  Possible values are
+\&\fBfrv\fR, \fBfr550\fR, \fBtomcat\fR, \fBfr500\fR, \fBfr450\fR,
+\&\fBfr405\fR, \fBfr400\fR, \fBfr300\fR and \fBsimple\fR.
+.PP
+\fIGNU/Linux Options\fR
+.IX Subsection "GNU/Linux Options"
+.PP
+These \fB\-m\fR options are defined for GNU/Linux targets:
+.IP "\fB\-mglibc\fR" 4
+.IX Item "-mglibc"
+Use the \s-1GNU C\s0 library.  This is the default except
+on \fB*\-*\-linux\-*uclibc*\fR, \fB*\-*\-linux\-*musl*\fR and
+\&\fB*\-*\-linux\-*android*\fR targets.
+.IP "\fB\-muclibc\fR" 4
+.IX Item "-muclibc"
+Use uClibc C library.  This is the default on
+\&\fB*\-*\-linux\-*uclibc*\fR targets.
+.IP "\fB\-mmusl\fR" 4
+.IX Item "-mmusl"
+Use the musl C library.  This is the default on
+\&\fB*\-*\-linux\-*musl*\fR targets.
+.IP "\fB\-mbionic\fR" 4
+.IX Item "-mbionic"
+Use Bionic C library.  This is the default on
+\&\fB*\-*\-linux\-*android*\fR targets.
+.IP "\fB\-mandroid\fR" 4
+.IX Item "-mandroid"
+Compile code compatible with Android platform.  This is the default on
+\&\fB*\-*\-linux\-*android*\fR targets.
+.Sp
+When compiling, this option enables \fB\-mbionic\fR, \fB\-fPIC\fR,
+\&\fB\-fno\-exceptions\fR and \fB\-fno\-rtti\fR by default.  When linking,
+this option makes the \s-1GCC\s0 driver pass Android-specific options to the linker.
+Finally, this option causes the preprocessor macro \f(CW\*(C`_\|_ANDROID_\|_\*(C'\fR
+to be defined.
+.IP "\fB\-tno\-android\-cc\fR" 4
+.IX Item "-tno-android-cc"
+Disable compilation effects of \fB\-mandroid\fR, i.e., do not enable
+\&\fB\-mbionic\fR, \fB\-fPIC\fR, \fB\-fno\-exceptions\fR and
+\&\fB\-fno\-rtti\fR by default.
+.IP "\fB\-tno\-android\-ld\fR" 4
+.IX Item "-tno-android-ld"
+Disable linking effects of \fB\-mandroid\fR, i.e., pass standard Linux
+linking options to the linker.
+.PP
+\fIH8/300 Options\fR
+.IX Subsection "H8/300 Options"
+.PP
+These \fB\-m\fR options are defined for the H8/300 implementations:
+.IP "\fB\-mrelax\fR" 4
+.IX Item "-mrelax"
+Shorten some address references at link time, when possible; uses the
+linker option \fB\-relax\fR.
+.IP "\fB\-mh\fR" 4
+.IX Item "-mh"
+Generate code for the H8/300H.
+.IP "\fB\-ms\fR" 4
+.IX Item "-ms"
+Generate code for the H8S.
+.IP "\fB\-mn\fR" 4
+.IX Item "-mn"
+Generate code for the H8S and H8/300H in the normal mode.  This switch
+must be used either with \fB\-mh\fR or \fB\-ms\fR.
+.IP "\fB\-ms2600\fR" 4
+.IX Item "-ms2600"
+Generate code for the H8S/2600.  This switch must be used with \fB\-ms\fR.
+.IP "\fB\-mexr\fR" 4
+.IX Item "-mexr"
+Extended registers are stored on stack before execution of function
+with monitor attribute. Default option is \fB\-mexr\fR.
+This option is valid only for H8S targets.
+.IP "\fB\-mno\-exr\fR" 4
+.IX Item "-mno-exr"
+Extended registers are not stored on stack before execution of function 
+with monitor attribute. Default option is \fB\-mno\-exr\fR. 
+This option is valid only for H8S targets.
+.IP "\fB\-mint32\fR" 4
+.IX Item "-mint32"
+Make \f(CW\*(C`int\*(C'\fR data 32 bits by default.
+.IP "\fB\-malign\-300\fR" 4
+.IX Item "-malign-300"
+On the H8/300H and H8S, use the same alignment rules as for the H8/300.
+The default for the H8/300H and H8S is to align longs and floats on
+4\-byte boundaries.
+\&\fB\-malign\-300\fR causes them to be aligned on 2\-byte boundaries.
+This option has no effect on the H8/300.
+.PP
+\fI\s-1HPPA\s0 Options\fR
+.IX Subsection "HPPA Options"
+.PP
+These \fB\-m\fR options are defined for the \s-1HPPA\s0 family of computers:
+.IP "\fB\-march=\fR\fIarchitecture-type\fR" 4
+.IX Item "-march=architecture-type"
+Generate code for the specified architecture.  The choices for
+\&\fIarchitecture-type\fR are \fB1.0\fR for \s-1PA 1.0,\s0 \fB1.1\fR for \s-1PA
+1.1,\s0 and \fB2.0\fR for \s-1PA 2.0\s0 processors.  Refer to
+\&\fI/usr/lib/sched.models\fR on an HP-UX system to determine the proper
+architecture option for your machine.  Code compiled for lower numbered
+architectures runs on higher numbered architectures, but not the
+other way around.
+.IP "\fB\-mpa\-risc\-1\-0\fR" 4
+.IX Item "-mpa-risc-1-0"
+.PD 0
+.IP "\fB\-mpa\-risc\-1\-1\fR" 4
+.IX Item "-mpa-risc-1-1"
+.IP "\fB\-mpa\-risc\-2\-0\fR" 4
+.IX Item "-mpa-risc-2-0"
+.PD
+Synonyms for \fB\-march=1.0\fR, \fB\-march=1.1\fR, and \fB\-march=2.0\fR respectively.
+.IP "\fB\-mcaller\-copies\fR" 4
+.IX Item "-mcaller-copies"
+The caller copies function arguments passed by hidden reference.  This
+option should be used with care as it is not compatible with the default
+32\-bit runtime.  However, only aggregates larger than eight bytes are
+passed by hidden reference and the option provides better compatibility
+with OpenMP.
+.IP "\fB\-mjump\-in\-delay\fR" 4
+.IX Item "-mjump-in-delay"
+This option is ignored and provided for compatibility purposes only.
+.IP "\fB\-mdisable\-fpregs\fR" 4
+.IX Item "-mdisable-fpregs"
+Prevent floating-point registers from being used in any manner.  This is
+necessary for compiling kernels that perform lazy context switching of
+floating-point registers.  If you use this option and attempt to perform
+floating-point operations, the compiler aborts.
+.IP "\fB\-mdisable\-indexing\fR" 4
+.IX Item "-mdisable-indexing"
+Prevent the compiler from using indexing address modes.  This avoids some
+rather obscure problems when compiling \s-1MIG\s0 generated code under \s-1MACH.\s0
+.IP "\fB\-mno\-space\-regs\fR" 4
+.IX Item "-mno-space-regs"
+Generate code that assumes the target has no space registers.  This allows
+\&\s-1GCC\s0 to generate faster indirect calls and use unscaled index address modes.
+.Sp
+Such code is suitable for level 0 \s-1PA\s0 systems and kernels.
+.IP "\fB\-mfast\-indirect\-calls\fR" 4
+.IX Item "-mfast-indirect-calls"
+Generate code that assumes calls never cross space boundaries.  This
+allows \s-1GCC\s0 to emit code that performs faster indirect calls.
+.Sp
+This option does not work in the presence of shared libraries or nested
+functions.
+.IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
+.IX Item "-mfixed-range=register-range"
+Generate code treating the given register range as fixed registers.
+A fixed register is one that the register allocator cannot use.  This is
+useful when compiling kernel code.  A register range is specified as
+two registers separated by a dash.  Multiple register ranges can be
+specified separated by a comma.
+.IP "\fB\-mlong\-load\-store\fR" 4
+.IX Item "-mlong-load-store"
+Generate 3\-instruction load and store sequences as sometimes required by
+the HP-UX 10 linker.  This is equivalent to the \fB+k\fR option to
+the \s-1HP\s0 compilers.
+.IP "\fB\-mportable\-runtime\fR" 4
+.IX Item "-mportable-runtime"
+Use the portable calling conventions proposed by \s-1HP\s0 for \s-1ELF\s0 systems.
+.IP "\fB\-mgas\fR" 4
+.IX Item "-mgas"
+Enable the use of assembler directives only \s-1GAS\s0 understands.
+.IP "\fB\-mschedule=\fR\fIcpu-type\fR" 4
+.IX Item "-mschedule=cpu-type"
+Schedule code according to the constraints for the machine type
+\&\fIcpu-type\fR.  The choices for \fIcpu-type\fR are \fB700\fR
+\&\fB7100\fR, \fB7100LC\fR, \fB7200\fR, \fB7300\fR and \fB8000\fR.  Refer
+to \fI/usr/lib/sched.models\fR on an HP-UX system to determine the
+proper scheduling option for your machine.  The default scheduling is
+\&\fB8000\fR.
+.IP "\fB\-mlinker\-opt\fR" 4
+.IX Item "-mlinker-opt"
+Enable the optimization pass in the HP-UX linker.  Note this makes symbolic
+debugging impossible.  It also triggers a bug in the HP-UX 8 and HP-UX 9
+linkers in which they give bogus error messages when linking some programs.
+.IP "\fB\-msoft\-float\fR" 4
+.IX Item "-msoft-float"
+Generate output containing library calls for floating point.
+\&\fBWarning:\fR the requisite libraries are not available for all \s-1HPPA\s0
+targets.  Normally the facilities of the machine's usual C compiler are
+used, but this cannot be done directly in cross-compilation.  You must make
+your own arrangements to provide suitable library functions for
+cross-compilation.
+.Sp
+\&\fB\-msoft\-float\fR changes the calling convention in the output file;
+therefore, it is only useful if you compile \fIall\fR of a program with
+this option.  In particular, you need to compile \fIlibgcc.a\fR, the
+library that comes with \s-1GCC,\s0 with \fB\-msoft\-float\fR in order for
+this to work.
+.IP "\fB\-msio\fR" 4
+.IX Item "-msio"
+Generate the predefine, \f(CW\*(C`_SIO\*(C'\fR, for server \s-1IO.\s0  The default is
+\&\fB\-mwsio\fR.  This generates the predefines, \f(CW\*(C`_\|_hp9000s700\*(C'\fR,
+\&\f(CW\*(C`_\|_hp9000s700_\|_\*(C'\fR and \f(CW\*(C`_WSIO\*(C'\fR, for workstation \s-1IO.\s0  These
+options are available under HP-UX and HI-UX.
+.IP "\fB\-mgnu\-ld\fR" 4
+.IX Item "-mgnu-ld"
+Use options specific to \s-1GNU\s0 \fBld\fR.
+This passes \fB\-shared\fR to \fBld\fR when
+building a shared library.  It is the default when \s-1GCC\s0 is configured,
+explicitly or implicitly, with the \s-1GNU\s0 linker.  This option does not
+affect which \fBld\fR is called; it only changes what parameters
+are passed to that \fBld\fR.
+The \fBld\fR that is called is determined by the
+\&\fB\-\-with\-ld\fR configure option, \s-1GCC\s0's program search path, and
+finally by the user's \fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed
+using \fBwhich `gcc \-print\-prog\-name=ld`\fR.  This option is only available
+on the 64\-bit HP-UX \s-1GCC,\s0 i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
+.IP "\fB\-mhp\-ld\fR" 4
+.IX Item "-mhp-ld"
+Use options specific to \s-1HP\s0 \fBld\fR.
+This passes \fB\-b\fR to \fBld\fR when building
+a shared library and passes \fB+Accept TypeMismatch\fR to \fBld\fR on all
+links.  It is the default when \s-1GCC\s0 is configured, explicitly or
+implicitly, with the \s-1HP\s0 linker.  This option does not affect
+which \fBld\fR is called; it only changes what parameters are passed to that
+\&\fBld\fR.
+The \fBld\fR that is called is determined by the \fB\-\-with\-ld\fR
+configure option, \s-1GCC\s0's program search path, and finally by the user's
+\&\fB\s-1PATH\s0\fR.  The linker used by \s-1GCC\s0 can be printed using \fBwhich
+`gcc \-print\-prog\-name=ld`\fR.  This option is only available on the 64\-bit
+HP-UX \s-1GCC,\s0 i.e. configured with \fBhppa*64*\-*\-hpux*\fR.
+.IP "\fB\-mlong\-calls\fR" 4
+.IX Item "-mlong-calls"
+Generate code that uses long call sequences.  This ensures that a call
+is always able to reach linker generated stubs.  The default is to generate
+long calls only when the distance from the call site to the beginning
+of the function or translation unit, as the case may be, exceeds a
+predefined limit set by the branch type being used.  The limits for
+normal calls are 7,600,000 and 240,000 bytes, respectively for the
+\&\s-1PA 2.0\s0 and \s-1PA 1.X\s0 architectures.  Sibcalls are always limited at
+240,000 bytes.
+.Sp
+Distances are measured from the beginning of functions when using the
+\&\fB\-ffunction\-sections\fR option, or when using the \fB\-mgas\fR
+and \fB\-mno\-portable\-runtime\fR options together under HP-UX with
+the \s-1SOM\s0 linker.
+.Sp
+It is normally not desirable to use this option as it degrades
+performance.  However, it may be useful in large applications,
+particularly when partial linking is used to build the application.
+.Sp
+The types of long calls used depends on the capabilities of the
+assembler and linker, and the type of code being generated.  The
+impact on systems that support long absolute calls, and long pic
+symbol-difference or pc-relative calls should be relatively small.
+However, an indirect call is used on 32\-bit \s-1ELF\s0 systems in pic code
+and it is quite long.
+.IP "\fB\-munix=\fR\fIunix-std\fR" 4
+.IX Item "-munix=unix-std"
+Generate compiler predefines and select a startfile for the specified
+\&\s-1UNIX\s0 standard.  The choices for \fIunix-std\fR are \fB93\fR, \fB95\fR
+and \fB98\fR.  \fB93\fR is supported on all HP-UX versions.  \fB95\fR
+is available on HP-UX 10.10 and later.  \fB98\fR is available on HP-UX
+11.11 and later.  The default values are \fB93\fR for HP-UX 10.00,
+\&\fB95\fR for HP-UX 10.10 though to 11.00, and \fB98\fR for HP-UX 11.11
+and later.
+.Sp
+\&\fB\-munix=93\fR provides the same predefines as \s-1GCC 3.3\s0 and 3.4.
+\&\fB\-munix=95\fR provides additional predefines for \f(CW\*(C`XOPEN_UNIX\*(C'\fR
+and \f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, and the startfile \fIunix95.o\fR.
+\&\fB\-munix=98\fR provides additional predefines for \f(CW\*(C`_XOPEN_UNIX\*(C'\fR,
+\&\f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR, \f(CW\*(C`_INCLUDE_\|_STDC_A1_SOURCE\*(C'\fR and
+\&\f(CW\*(C`_INCLUDE_XOPEN_SOURCE_500\*(C'\fR, and the startfile \fIunix98.o\fR.
+.Sp
+It is \fIimportant\fR to note that this option changes the interfaces
+for various library routines.  It also affects the operational behavior
+of the C library.  Thus, \fIextreme\fR care is needed in using this
+option.
+.Sp
+Library code that is intended to operate with more than one \s-1UNIX\s0
+standard must test, set and restore the variable \f(CW\*(C`_\|_xpg4_extended_mask\*(C'\fR
+as appropriate.  Most \s-1GNU\s0 software doesn't provide this capability.
+.IP "\fB\-nolibdld\fR" 4
+.IX Item "-nolibdld"
+Suppress the generation of link options to search libdld.sl when the
+\&\fB\-static\fR option is specified on HP-UX 10 and later.
+.IP "\fB\-static\fR" 4
+.IX Item "-static"
+The HP-UX implementation of setlocale in libc has a dependency on
+libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
+when the \fB\-static\fR option is specified, special link options
+are needed to resolve this dependency.
+.Sp
+On HP-UX 10 and later, the \s-1GCC\s0 driver adds the necessary options to
+link with libdld.sl when the \fB\-static\fR option is specified.
+This causes the resulting binary to be dynamic.  On the 64\-bit port,
+the linkers generate dynamic binaries by default in any case.  The
+\&\fB\-nolibdld\fR option can be used to prevent the \s-1GCC\s0 driver from
+adding these link options.
+.IP "\fB\-threads\fR" 4
+.IX Item "-threads"
+Add support for multithreading with the \fIdce thread\fR library
+under HP-UX.  This option sets flags for both the preprocessor and
+linker.
+.PP
+\fI\s-1IA\-64\s0 Options\fR
+.IX Subsection "IA-64 Options"
+.PP
+These are the \fB\-m\fR options defined for the Intel \s-1IA\-64\s0 architecture.
+.IP "\fB\-mbig\-endian\fR" 4
+.IX Item "-mbig-endian"
+Generate code for a big-endian target.  This is the default for HP-UX.
+.IP "\fB\-mlittle\-endian\fR" 4
+.IX Item "-mlittle-endian"
+Generate code for a little-endian target.  This is the default for \s-1AIX5\s0
+and GNU/Linux.
+.IP "\fB\-mgnu\-as\fR" 4
+.IX Item "-mgnu-as"
+.PD 0
+.IP "\fB\-mno\-gnu\-as\fR" 4
+.IX Item "-mno-gnu-as"
+.PD
+Generate (or don't) code for the \s-1GNU\s0 assembler.  This is the default.
+.IP "\fB\-mgnu\-ld\fR" 4
+.IX Item "-mgnu-ld"
+.PD 0
+.IP "\fB\-mno\-gnu\-ld\fR" 4
+.IX Item "-mno-gnu-ld"
+.PD
+Generate (or don't) code for the \s-1GNU\s0 linker.  This is the default.
+.IP "\fB\-mno\-pic\fR" 4
+.IX Item "-mno-pic"
+Generate code that does not use a global pointer register.  The result
+is not position independent code, and violates the \s-1IA\-64 ABI.\s0
+.IP "\fB\-mvolatile\-asm\-stop\fR" 4
+.IX Item "-mvolatile-asm-stop"
+.PD 0
+.IP "\fB\-mno\-volatile\-asm\-stop\fR" 4
+.IX Item "-mno-volatile-asm-stop"
+.PD
+Generate (or don't) a stop bit immediately before and after volatile asm
+statements.
+.IP "\fB\-mregister\-names\fR" 4
+.IX Item "-mregister-names"
+.PD 0
+.IP "\fB\-mno\-register\-names\fR" 4
+.IX Item "-mno-register-names"
+.PD
+Generate (or don't) \fBin\fR, \fBloc\fR, and \fBout\fR register names for
+the stacked registers.  This may make assembler output more readable.
+.IP "\fB\-mno\-sdata\fR" 4
+.IX Item "-mno-sdata"
+.PD 0
+.IP "\fB\-msdata\fR" 4
+.IX Item "-msdata"
+.PD
+Disable (or enable) optimizations that use the small data section.  This may
+be useful for working around optimizer bugs.
+.IP "\fB\-mconstant\-gp\fR" 4
+.IX Item "-mconstant-gp"
+Generate code that uses a single constant global pointer value.  This is
+useful when compiling kernel code.
+.IP "\fB\-mauto\-pic\fR" 4
+.IX Item "-mauto-pic"
+Generate code that is self-relocatable.  This implies \fB\-mconstant\-gp\fR.
+This is useful when compiling firmware code.
+.IP "\fB\-minline\-float\-divide\-min\-latency\fR" 4
+.IX Item "-minline-float-divide-min-latency"
+Generate code for inline divides of floating-point values
+using the minimum latency algorithm.
+.IP "\fB\-minline\-float\-divide\-max\-throughput\fR" 4
+.IX Item "-minline-float-divide-max-throughput"
+Generate code for inline divides of floating-point values
+using the maximum throughput algorithm.
+.IP "\fB\-mno\-inline\-float\-divide\fR" 4
+.IX Item "-mno-inline-float-divide"
+Do not generate inline code for divides of floating-point values.
+.IP "\fB\-minline\-int\-divide\-min\-latency\fR" 4
+.IX Item "-minline-int-divide-min-latency"
+Generate code for inline divides of integer values
+using the minimum latency algorithm.
+.IP "\fB\-minline\-int\-divide\-max\-throughput\fR" 4
+.IX Item "-minline-int-divide-max-throughput"
+Generate code for inline divides of integer values
+using the maximum throughput algorithm.
+.IP "\fB\-mno\-inline\-int\-divide\fR" 4
+.IX Item "-mno-inline-int-divide"
+Do not generate inline code for divides of integer values.
+.IP "\fB\-minline\-sqrt\-min\-latency\fR" 4
+.IX Item "-minline-sqrt-min-latency"
+Generate code for inline square roots
+using the minimum latency algorithm.
+.IP "\fB\-minline\-sqrt\-max\-throughput\fR" 4
+.IX Item "-minline-sqrt-max-throughput"
+Generate code for inline square roots
+using the maximum throughput algorithm.
+.IP "\fB\-mno\-inline\-sqrt\fR" 4
+.IX Item "-mno-inline-sqrt"
+Do not generate inline code for \f(CW\*(C`sqrt\*(C'\fR.
+.IP "\fB\-mfused\-madd\fR" 4
+.IX Item "-mfused-madd"
+.PD 0
+.IP "\fB\-mno\-fused\-madd\fR" 4
+.IX Item "-mno-fused-madd"
+.PD
+Do (don't) generate code that uses the fused multiply/add or multiply/subtract
+instructions.  The default is to use these instructions.
+.IP "\fB\-mno\-dwarf2\-asm\fR" 4
+.IX Item "-mno-dwarf2-asm"
+.PD 0
+.IP "\fB\-mdwarf2\-asm\fR" 4
+.IX Item "-mdwarf2-asm"
+.PD
+Don't (or do) generate assembler code for the \s-1DWARF\s0 line number debugging
+info.  This may be useful when not using the \s-1GNU\s0 assembler.
+.IP "\fB\-mearly\-stop\-bits\fR" 4
+.IX Item "-mearly-stop-bits"
+.PD 0
+.IP "\fB\-mno\-early\-stop\-bits\fR" 4
+.IX Item "-mno-early-stop-bits"
+.PD
+Allow stop bits to be placed earlier than immediately preceding the
+instruction that triggered the stop bit.  This can improve instruction
+scheduling, but does not always do so.
+.IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
+.IX Item "-mfixed-range=register-range"
+Generate code treating the given register range as fixed registers.
+A fixed register is one that the register allocator cannot use.  This is
+useful when compiling kernel code.  A register range is specified as
+two registers separated by a dash.  Multiple register ranges can be
+specified separated by a comma.
+.IP "\fB\-mtls\-size=\fR\fItls-size\fR" 4
+.IX Item "-mtls-size=tls-size"
+Specify bit size of immediate \s-1TLS\s0 offsets.  Valid values are 14, 22, and
+64.
+.IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
+.IX Item "-mtune=cpu-type"
+Tune the instruction scheduling for a particular \s-1CPU,\s0 Valid values are
+\&\fBitanium\fR, \fBitanium1\fR, \fBmerced\fR, \fBitanium2\fR,
+and \fBmckinley\fR.
+.IP "\fB\-milp32\fR" 4
+.IX Item "-milp32"
+.PD 0
+.IP "\fB\-mlp64\fR" 4
+.IX Item "-mlp64"
+.PD
+Generate code for a 32\-bit or 64\-bit environment.
+The 32\-bit environment sets int, long and pointer to 32 bits.
+The 64\-bit environment sets int to 32 bits and long and pointer
+to 64 bits.  These are HP-UX specific flags.
+.IP "\fB\-mno\-sched\-br\-data\-spec\fR" 4
+.IX Item "-mno-sched-br-data-spec"
+.PD 0
+.IP "\fB\-msched\-br\-data\-spec\fR" 4
+.IX Item "-msched-br-data-spec"
+.PD
+(Dis/En)able data speculative scheduling before reload.
+This results in generation of \f(CW\*(C`ld.a\*(C'\fR instructions and
+the corresponding check instructions (\f(CW\*(C`ld.c\*(C'\fR / \f(CW\*(C`chk.a\*(C'\fR).
+The default setting is disabled.
+.IP "\fB\-msched\-ar\-data\-spec\fR" 4
+.IX Item "-msched-ar-data-spec"
+.PD 0
+.IP "\fB\-mno\-sched\-ar\-data\-spec\fR" 4
+.IX Item "-mno-sched-ar-data-spec"
+.PD
+(En/Dis)able data speculative scheduling after reload.
+This results in generation of \f(CW\*(C`ld.a\*(C'\fR instructions and
+the corresponding check instructions (\f(CW\*(C`ld.c\*(C'\fR / \f(CW\*(C`chk.a\*(C'\fR).
+The default setting is enabled.
+.IP "\fB\-mno\-sched\-control\-spec\fR" 4
+.IX Item "-mno-sched-control-spec"
+.PD 0
+.IP "\fB\-msched\-control\-spec\fR" 4
+.IX Item "-msched-control-spec"
+.PD
+(Dis/En)able control speculative scheduling.  This feature is
+available only during region scheduling (i.e. before reload).
+This results in generation of the \f(CW\*(C`ld.s\*(C'\fR instructions and
+the corresponding check instructions \f(CW\*(C`chk.s\*(C'\fR.
+The default setting is disabled.
+.IP "\fB\-msched\-br\-in\-data\-spec\fR" 4
+.IX Item "-msched-br-in-data-spec"
+.PD 0
+.IP "\fB\-mno\-sched\-br\-in\-data\-spec\fR" 4
+.IX Item "-mno-sched-br-in-data-spec"
+.PD
+(En/Dis)able speculative scheduling of the instructions that
+are dependent on the data speculative loads before reload.
+This is effective only with \fB\-msched\-br\-data\-spec\fR enabled.
+The default setting is enabled.
+.IP "\fB\-msched\-ar\-in\-data\-spec\fR" 4
+.IX Item "-msched-ar-in-data-spec"
+.PD 0
+.IP "\fB\-mno\-sched\-ar\-in\-data\-spec\fR" 4
+.IX Item "-mno-sched-ar-in-data-spec"
+.PD
+(En/Dis)able speculative scheduling of the instructions that
+are dependent on the data speculative loads after reload.
+This is effective only with \fB\-msched\-ar\-data\-spec\fR enabled.
+The default setting is enabled.
+.IP "\fB\-msched\-in\-control\-spec\fR" 4
+.IX Item "-msched-in-control-spec"
+.PD 0
+.IP "\fB\-mno\-sched\-in\-control\-spec\fR" 4
+.IX Item "-mno-sched-in-control-spec"
+.PD
+(En/Dis)able speculative scheduling of the instructions that
+are dependent on the control speculative loads.
+This is effective only with \fB\-msched\-control\-spec\fR enabled.
+The default setting is enabled.
+.IP "\fB\-mno\-sched\-prefer\-non\-data\-spec\-insns\fR" 4
+.IX Item "-mno-sched-prefer-non-data-spec-insns"
+.PD 0
+.IP "\fB\-msched\-prefer\-non\-data\-spec\-insns\fR" 4
+.IX Item "-msched-prefer-non-data-spec-insns"
+.PD
+If enabled, data-speculative instructions are chosen for schedule
+only if there are no other choices at the moment.  This makes
+the use of the data speculation much more conservative.
+The default setting is disabled.
+.IP "\fB\-mno\-sched\-prefer\-non\-control\-spec\-insns\fR" 4
+.IX Item "-mno-sched-prefer-non-control-spec-insns"
+.PD 0
+.IP "\fB\-msched\-prefer\-non\-control\-spec\-insns\fR" 4
+.IX Item "-msched-prefer-non-control-spec-insns"
+.PD
+If enabled, control-speculative instructions are chosen for schedule
+only if there are no other choices at the moment.  This makes
+the use of the control speculation much more conservative.
+The default setting is disabled.
+.IP "\fB\-mno\-sched\-count\-spec\-in\-critical\-path\fR" 4
+.IX Item "-mno-sched-count-spec-in-critical-path"
+.PD 0
+.IP "\fB\-msched\-count\-spec\-in\-critical\-path\fR" 4
+.IX Item "-msched-count-spec-in-critical-path"
+.PD
+If enabled, speculative dependencies are considered during
+computation of the instructions priorities.  This makes the use of the
+speculation a bit more conservative.
+The default setting is disabled.
+.IP "\fB\-msched\-spec\-ldc\fR" 4
+.IX Item "-msched-spec-ldc"
+Use a simple data speculation check.  This option is on by default.
+.IP "\fB\-msched\-control\-spec\-ldc\fR" 4
+.IX Item "-msched-control-spec-ldc"
+Use a simple check for control speculation.  This option is on by default.
+.IP "\fB\-msched\-stop\-bits\-after\-every\-cycle\fR" 4
+.IX Item "-msched-stop-bits-after-every-cycle"
+Place a stop bit after every cycle when scheduling.  This option is on
+by default.
+.IP "\fB\-msched\-fp\-mem\-deps\-zero\-cost\fR" 4
+.IX Item "-msched-fp-mem-deps-zero-cost"
+Assume that floating-point stores and loads are not likely to cause a conflict
+when placed into the same instruction group.  This option is disabled by
+default.
+.IP "\fB\-msel\-sched\-dont\-check\-control\-spec\fR" 4
+.IX Item "-msel-sched-dont-check-control-spec"
+Generate checks for control speculation in selective scheduling.
+This flag is disabled by default.
+.IP "\fB\-msched\-max\-memory\-insns=\fR\fImax-insns\fR" 4
+.IX Item "-msched-max-memory-insns=max-insns"
+Limit on the number of memory insns per instruction group, giving lower
+priority to subsequent memory insns attempting to schedule in the same
+instruction group. Frequently useful to prevent cache bank conflicts.
+The default value is 1.
+.IP "\fB\-msched\-max\-memory\-insns\-hard\-limit\fR" 4
+.IX Item "-msched-max-memory-insns-hard-limit"
+Makes the limit specified by \fBmsched-max-memory-insns\fR a hard limit,
+disallowing more than that number in an instruction group.
+Otherwise, the limit is \*(L"soft\*(R", meaning that non-memory operations
+are preferred when the limit is reached, but memory operations may still
+be scheduled.
+.PP
+\fI\s-1LM32\s0 Options\fR
+.IX Subsection "LM32 Options"
+.PP
+These \fB\-m\fR options are defined for the LatticeMico32 architecture:
+.IP "\fB\-mbarrel\-shift\-enabled\fR" 4
+.IX Item "-mbarrel-shift-enabled"
+Enable barrel-shift instructions.
+.IP "\fB\-mdivide\-enabled\fR" 4
+.IX Item "-mdivide-enabled"
+Enable divide and modulus instructions.
+.IP "\fB\-mmultiply\-enabled\fR" 4
+.IX Item "-mmultiply-enabled"
+Enable multiply instructions.
+.IP "\fB\-msign\-extend\-enabled\fR" 4
+.IX Item "-msign-extend-enabled"
+Enable sign extend instructions.
+.IP "\fB\-muser\-enabled\fR" 4
+.IX Item "-muser-enabled"
+Enable user-defined instructions.
+.PP
+\fIM32C Options\fR
+.IX Subsection "M32C Options"
+.IP "\fB\-mcpu=\fR\fIname\fR" 4
+.IX Item "-mcpu=name"
+Select the \s-1CPU\s0 for which code is generated.  \fIname\fR may be one of
+\&\fBr8c\fR for the R8C/Tiny series, \fBm16c\fR for the M16C (up to
+/60) series, \fBm32cm\fR for the M16C/80 series, or \fBm32c\fR for
+the M32C/80 series.
+.IP "\fB\-msim\fR" 4
+.IX Item "-msim"
+Specifies that the program will be run on the simulator.  This causes
+an alternate runtime library to be linked in which supports, for
+example, file I/O.  You must not use this option when generating
+programs that will run on real hardware; you must provide your own
+runtime library for whatever I/O functions are needed.
+.IP "\fB\-memregs=\fR\fInumber\fR" 4
+.IX Item "-memregs=number"
+Specifies the number of memory-based pseudo-registers \s-1GCC\s0 uses
+during code generation.  These pseudo-registers are used like real
+registers, so there is a tradeoff between \s-1GCC\s0's ability to fit the
+code into available registers, and the performance penalty of using
+memory instead of registers.  Note that all modules in a program must
+be compiled with the same value for this option.  Because of that, you
+must not use this option with \s-1GCC\s0's default runtime libraries.
+.PP
+\fIM32R/D Options\fR
+.IX Subsection "M32R/D Options"
+.PP
+These \fB\-m\fR options are defined for Renesas M32R/D architectures:
+.IP "\fB\-m32r2\fR" 4
+.IX Item "-m32r2"
+Generate code for the M32R/2.
+.IP "\fB\-m32rx\fR" 4
+.IX Item "-m32rx"
+Generate code for the M32R/X.
+.IP "\fB\-m32r\fR" 4
+.IX Item "-m32r"
+Generate code for the M32R.  This is the default.
+.IP "\fB\-mmodel=small\fR" 4
+.IX Item "-mmodel=small"
+Assume all objects live in the lower 16MB of memory (so that their addresses
+can be loaded with the \f(CW\*(C`ld24\*(C'\fR instruction), and assume all subroutines
+are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
+This is the default.
+.Sp
+The addressability of a particular object can be set with the
+\&\f(CW\*(C`model\*(C'\fR attribute.
+.IP "\fB\-mmodel=medium\fR" 4
+.IX Item "-mmodel=medium"
+Assume objects may be anywhere in the 32\-bit address space (the compiler
+generates \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
+assume all subroutines are reachable with the \f(CW\*(C`bl\*(C'\fR instruction.
+.IP "\fB\-mmodel=large\fR" 4
+.IX Item "-mmodel=large"
+Assume objects may be anywhere in the 32\-bit address space (the compiler
+generates \f(CW\*(C`seth/add3\*(C'\fR instructions to load their addresses), and
+assume subroutines may not be reachable with the \f(CW\*(C`bl\*(C'\fR instruction
+(the compiler generates the much slower \f(CW\*(C`seth/add3/jl\*(C'\fR
+instruction sequence).
+.IP "\fB\-msdata=none\fR" 4
+.IX Item "-msdata=none"
+Disable use of the small data area.  Variables are put into
+one of \f(CW\*(C`.data\*(C'\fR, \f(CW\*(C`.bss\*(C'\fR, or \f(CW\*(C`.rodata\*(C'\fR (unless the
+\&\f(CW\*(C`section\*(C'\fR attribute has been specified).
+This is the default.
+.Sp
+The small data area consists of sections \f(CW\*(C`.sdata\*(C'\fR and \f(CW\*(C`.sbss\*(C'\fR.
+Objects may be explicitly put in the small data area with the
+\&\f(CW\*(C`section\*(C'\fR attribute using one of these sections.
+.IP "\fB\-msdata=sdata\fR" 4
+.IX Item "-msdata=sdata"
+Put small global and static data in the small data area, but do not
+generate special code to reference them.
+.IP "\fB\-msdata=use\fR" 4
+.IX Item "-msdata=use"
+Put small global and static data in the small data area, and generate
+special instructions to reference them.
+.IP "\fB\-G\fR \fInum\fR" 4
+.IX Item "-G num"
+Put global and static objects less than or equal to \fInum\fR bytes
+into the small data or \s-1BSS\s0 sections instead of the normal data or \s-1BSS\s0
+sections.  The default value of \fInum\fR is 8.
+The \fB\-msdata\fR option must be set to one of \fBsdata\fR or \fBuse\fR
+for this option to have any effect.
+.Sp
+All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
+Compiling with different values of \fInum\fR may or may not work; if it
+doesn't the linker gives an error message\-\-\-incorrect code is not
+generated.
+.IP "\fB\-mdebug\fR" 4
+.IX Item "-mdebug"
+Makes the M32R\-specific code in the compiler display some statistics
+that might help in debugging programs.
+.IP "\fB\-malign\-loops\fR" 4
+.IX Item "-malign-loops"
+Align all loops to a 32\-byte boundary.
+.IP "\fB\-mno\-align\-loops\fR" 4
+.IX Item "-mno-align-loops"
+Do not enforce a 32\-byte alignment for loops.  This is the default.
+.IP "\fB\-missue\-rate=\fR\fInumber\fR" 4
+.IX Item "-missue-rate=number"
+Issue \fInumber\fR instructions per cycle.  \fInumber\fR can only be 1
+or 2.
+.IP "\fB\-mbranch\-cost=\fR\fInumber\fR" 4
+.IX Item "-mbranch-cost=number"
+\&\fInumber\fR can only be 1 or 2.  If it is 1 then branches are
+preferred over conditional code, if it is 2, then the opposite applies.
+.IP "\fB\-mflush\-trap=\fR\fInumber\fR" 4
+.IX Item "-mflush-trap=number"
+Specifies the trap number to use to flush the cache.  The default is
+12.  Valid numbers are between 0 and 15 inclusive.
+.IP "\fB\-mno\-flush\-trap\fR" 4
+.IX Item "-mno-flush-trap"
+Specifies that the cache cannot be flushed by using a trap.
+.IP "\fB\-mflush\-func=\fR\fIname\fR" 4
+.IX Item "-mflush-func=name"
+Specifies the name of the operating system function to call to flush
+the cache.  The default is \fB_flush_cache\fR, but a function call
+is only used if a trap is not available.
+.IP "\fB\-mno\-flush\-func\fR" 4
+.IX Item "-mno-flush-func"
+Indicates that there is no \s-1OS\s0 function for flushing the cache.
+.PP
+\fIM680x0 Options\fR
+.IX Subsection "M680x0 Options"
+.PP
+These are the \fB\-m\fR options defined for M680x0 and ColdFire processors.
+The default settings depend on which architecture was selected when
+the compiler was configured; the defaults for the most common choices
+are given below.
+.IP "\fB\-march=\fR\fIarch\fR" 4
+.IX Item "-march=arch"
+Generate code for a specific M680x0 or ColdFire instruction set
+architecture.  Permissible values of \fIarch\fR for M680x0
+architectures are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
+\&\fB68030\fR, \fB68040\fR, \fB68060\fR and \fBcpu32\fR.  ColdFire
+architectures are selected according to Freescale's \s-1ISA\s0 classification
+and the permissible values are: \fBisaa\fR, \fBisaaplus\fR,
+\&\fBisab\fR and \fBisac\fR.
+.Sp
+\&\s-1GCC\s0 defines a macro \f(CW\*(C`_\|_mcf\f(CIarch\f(CW_\|_\*(C'\fR whenever it is generating
+code for a ColdFire target.  The \fIarch\fR in this macro is one of the
+\&\fB\-march\fR arguments given above.
+.Sp
+When used together, \fB\-march\fR and \fB\-mtune\fR select code
+that runs on a family of similar processors but that is optimized
+for a particular microarchitecture.
+.IP "\fB\-mcpu=\fR\fIcpu\fR" 4
+.IX Item "-mcpu=cpu"
+Generate code for a specific M680x0 or ColdFire processor.
+The M680x0 \fIcpu\fRs are: \fB68000\fR, \fB68010\fR, \fB68020\fR,
+\&\fB68030\fR, \fB68040\fR, \fB68060\fR, \fB68302\fR, \fB68332\fR
+and \fBcpu32\fR.  The ColdFire \fIcpu\fRs are given by the table
+below, which also classifies the CPUs into families:
+.RS 4
+.IP "Family : \fB\-mcpu\fR arguments" 4
+.IX Item "Family : -mcpu arguments"
+.PD 0
+.IP "\fB51\fR : \fB51\fR \fB51ac\fR \fB51ag\fR \fB51cn\fR \fB51em\fR \fB51je\fR \fB51jf\fR \fB51jg\fR \fB51jm\fR \fB51mm\fR \fB51qe\fR \fB51qm\fR" 4
+.IX Item "51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51qm"
+.IP "\fB5206\fR : \fB5202\fR \fB5204\fR \fB5206\fR" 4
+.IX Item "5206 : 5202 5204 5206"
+.IP "\fB5206e\fR : \fB5206e\fR" 4
+.IX Item "5206e : 5206e"
+.IP "\fB5208\fR : \fB5207\fR \fB5208\fR" 4
+.IX Item "5208 : 5207 5208"
+.IP "\fB5211a\fR : \fB5210a\fR \fB5211a\fR" 4
+.IX Item "5211a : 5210a 5211a"
+.IP "\fB5213\fR : \fB5211\fR \fB5212\fR \fB5213\fR" 4
+.IX Item "5213 : 5211 5212 5213"
+.IP "\fB5216\fR : \fB5214\fR \fB5216\fR" 4
+.IX Item "5216 : 5214 5216"
+.IP "\fB52235\fR : \fB52230\fR \fB52231\fR \fB52232\fR \fB52233\fR \fB52234\fR \fB52235\fR" 4
+.IX Item "52235 : 52230 52231 52232 52233 52234 52235"
+.IP "\fB5225\fR : \fB5224\fR \fB5225\fR" 4
+.IX Item "5225 : 5224 5225"
+.IP "\fB52259\fR : \fB52252\fR \fB52254\fR \fB52255\fR \fB52256\fR \fB52258\fR \fB52259\fR" 4
+.IX Item "52259 : 52252 52254 52255 52256 52258 52259"
+.IP "\fB5235\fR : \fB5232\fR \fB5233\fR \fB5234\fR \fB5235\fR \fB523x\fR" 4
+.IX Item "5235 : 5232 5233 5234 5235 523x"
+.IP "\fB5249\fR : \fB5249\fR" 4
+.IX Item "5249 : 5249"
+.IP "\fB5250\fR : \fB5250\fR" 4
+.IX Item "5250 : 5250"
+.IP "\fB5271\fR : \fB5270\fR \fB5271\fR" 4
+.IX Item "5271 : 5270 5271"
+.IP "\fB5272\fR : \fB5272\fR" 4
+.IX Item "5272 : 5272"
+.IP "\fB5275\fR : \fB5274\fR \fB5275\fR" 4
+.IX Item "5275 : 5274 5275"
+.IP "\fB5282\fR : \fB5280\fR \fB5281\fR \fB5282\fR \fB528x\fR" 4
+.IX Item "5282 : 5280 5281 5282 528x"
+.IP "\fB53017\fR : \fB53011\fR \fB53012\fR \fB53013\fR \fB53014\fR \fB53015\fR \fB53016\fR \fB53017\fR" 4
+.IX Item "53017 : 53011 53012 53013 53014 53015 53016 53017"
+.IP "\fB5307\fR : \fB5307\fR" 4
+.IX Item "5307 : 5307"
+.IP "\fB5329\fR : \fB5327\fR \fB5328\fR \fB5329\fR \fB532x\fR" 4
+.IX Item "5329 : 5327 5328 5329 532x"
+.IP "\fB5373\fR : \fB5372\fR \fB5373\fR \fB537x\fR" 4
+.IX Item "5373 : 5372 5373 537x"
+.IP "\fB5407\fR : \fB5407\fR" 4
+.IX Item "5407 : 5407"
+.IP "\fB5475\fR : \fB5470\fR \fB5471\fR \fB5472\fR \fB5473\fR \fB5474\fR \fB5475\fR \fB547x\fR \fB5480\fR \fB5481\fR \fB5482\fR \fB5483\fR \fB5484\fR \fB5485\fR" 4
+.IX Item "5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485"
+.RE
+.RS 4
+.PD
+.Sp
+\&\fB\-mcpu=\fR\fIcpu\fR overrides \fB\-march=\fR\fIarch\fR if
+\&\fIarch\fR is compatible with \fIcpu\fR.  Other combinations of
+\&\fB\-mcpu\fR and \fB\-march\fR are rejected.
+.Sp
+\&\s-1GCC\s0 defines the macro \f(CW\*(C`_\|_mcf_cpu_\f(CIcpu\f(CW\*(C'\fR when ColdFire target
+\&\fIcpu\fR is selected.  It also defines \f(CW\*(C`_\|_mcf_family_\f(CIfamily\f(CW\*(C'\fR,
+where the value of \fIfamily\fR is given by the table above.
+.RE
+.IP "\fB\-mtune=\fR\fItune\fR" 4
+.IX Item "-mtune=tune"
+Tune the code for a particular microarchitecture within the
+constraints set by \fB\-march\fR and \fB\-mcpu\fR.
+The M680x0 microarchitectures are: \fB68000\fR, \fB68010\fR,
+\&\fB68020\fR, \fB68030\fR, \fB68040\fR, \fB68060\fR
+and \fBcpu32\fR.  The ColdFire microarchitectures
+are: \fBcfv1\fR, \fBcfv2\fR, \fBcfv3\fR, \fBcfv4\fR and \fBcfv4e\fR.
+.Sp
+You can also use \fB\-mtune=68020\-40\fR for code that needs
+to run relatively well on 68020, 68030 and 68040 targets.
+\&\fB\-mtune=68020\-60\fR is similar but includes 68060 targets
+as well.  These two options select the same tuning decisions as
+\&\fB\-m68020\-40\fR and \fB\-m68020\-60\fR respectively.
+.Sp
+\&\s-1GCC\s0 defines the macros \f(CW\*(C`_\|_mc\f(CIarch\f(CW\*(C'\fR and \f(CW\*(C`_\|_mc\f(CIarch\f(CW_\|_\*(C'\fR
+when tuning for 680x0 architecture \fIarch\fR.  It also defines
+\&\f(CW\*(C`mc\f(CIarch\f(CW\*(C'\fR unless either \fB\-ansi\fR or a non-GNU \fB\-std\fR
+option is used.  If \s-1GCC\s0 is tuning for a range of architectures,
+as selected by \fB\-mtune=68020\-40\fR or \fB\-mtune=68020\-60\fR,
+it defines the macros for every architecture in the range.
+.Sp
+\&\s-1GCC\s0 also defines the macro \f(CW\*(C`_\|_m\f(CIuarch\f(CW_\|_\*(C'\fR when tuning for
+ColdFire microarchitecture \fIuarch\fR, where \fIuarch\fR is one
+of the arguments given above.
+.IP "\fB\-m68000\fR" 4
+.IX Item "-m68000"
+.PD 0
+.IP "\fB\-mc68000\fR" 4
+.IX Item "-mc68000"
+.PD
+Generate output for a 68000.  This is the default
+when the compiler is configured for 68000\-based systems.
+It is equivalent to \fB\-march=68000\fR.
+.Sp
+Use this option for microcontrollers with a 68000 or \s-1EC000\s0 core,
+including the 68008, 68302, 68306, 68307, 68322, 68328 and 68356.
+.IP "\fB\-m68010\fR" 4
+.IX Item "-m68010"
+Generate output for a 68010.  This is the default
+when the compiler is configured for 68010\-based systems.
+It is equivalent to \fB\-march=68010\fR.
+.IP "\fB\-m68020\fR" 4
+.IX Item "-m68020"
+.PD 0
+.IP "\fB\-mc68020\fR" 4
+.IX Item "-mc68020"
+.PD
+Generate output for a 68020.  This is the default
+when the compiler is configured for 68020\-based systems.
+It is equivalent to \fB\-march=68020\fR.
+.IP "\fB\-m68030\fR" 4
+.IX Item "-m68030"
+Generate output for a 68030.  This is the default when the compiler is
+configured for 68030\-based systems.  It is equivalent to
+\&\fB\-march=68030\fR.
+.IP "\fB\-m68040\fR" 4
+.IX Item "-m68040"
+Generate output for a 68040.  This is the default when the compiler is
+configured for 68040\-based systems.  It is equivalent to
+\&\fB\-march=68040\fR.
+.Sp
+This option inhibits the use of 68881/68882 instructions that have to be
+emulated by software on the 68040.  Use this option if your 68040 does not
+have code to emulate those instructions.
+.IP "\fB\-m68060\fR" 4
+.IX Item "-m68060"
+Generate output for a 68060.  This is the default when the compiler is
+configured for 68060\-based systems.  It is equivalent to
+\&\fB\-march=68060\fR.
+.Sp
+This option inhibits the use of 68020 and 68881/68882 instructions that
+have to be emulated by software on the 68060.  Use this option if your 68060
+does not have code to emulate those instructions.
+.IP "\fB\-mcpu32\fR" 4
+.IX Item "-mcpu32"
+Generate output for a \s-1CPU32.\s0  This is the default
+when the compiler is configured for CPU32\-based systems.
+It is equivalent to \fB\-march=cpu32\fR.
+.Sp
+Use this option for microcontrollers with a
+\&\s-1CPU32\s0 or \s-1CPU32+\s0 core, including the 68330, 68331, 68332, 68333, 68334,
+68336, 68340, 68341, 68349 and 68360.
+.IP "\fB\-m5200\fR" 4
+.IX Item "-m5200"
+Generate output for a 520X ColdFire \s-1CPU.\s0  This is the default
+when the compiler is configured for 520X\-based systems.
+It is equivalent to \fB\-mcpu=5206\fR, and is now deprecated
+in favor of that option.
+.Sp
+Use this option for microcontroller with a 5200 core, including
+the \s-1MCF5202, MCF5203, MCF5204\s0 and \s-1MCF5206.\s0
+.IP "\fB\-m5206e\fR" 4
+.IX Item "-m5206e"
+Generate output for a 5206e ColdFire \s-1CPU.\s0  The option is now
+deprecated in favor of the equivalent \fB\-mcpu=5206e\fR.
+.IP "\fB\-m528x\fR" 4
+.IX Item "-m528x"
+Generate output for a member of the ColdFire 528X family.
+The option is now deprecated in favor of the equivalent
+\&\fB\-mcpu=528x\fR.
+.IP "\fB\-m5307\fR" 4
+.IX Item "-m5307"
+Generate output for a ColdFire 5307 \s-1CPU.\s0  The option is now deprecated
+in favor of the equivalent \fB\-mcpu=5307\fR.
+.IP "\fB\-m5407\fR" 4
+.IX Item "-m5407"
+Generate output for a ColdFire 5407 \s-1CPU.\s0  The option is now deprecated
+in favor of the equivalent \fB\-mcpu=5407\fR.
+.IP "\fB\-mcfv4e\fR" 4
+.IX Item "-mcfv4e"
+Generate output for a ColdFire V4e family \s-1CPU\s0 (e.g. 547x/548x).
+This includes use of hardware floating-point instructions.
+The option is equivalent to \fB\-mcpu=547x\fR, and is now
+deprecated in favor of that option.
+.IP "\fB\-m68020\-40\fR" 4
+.IX Item "-m68020-40"
+Generate output for a 68040, without using any of the new instructions.
+This results in code that can run relatively efficiently on either a
+68020/68881 or a 68030 or a 68040.  The generated code does use the
+68881 instructions that are emulated on the 68040.
+.Sp
+The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-40\fR.
+.IP "\fB\-m68020\-60\fR" 4
+.IX Item "-m68020-60"
+Generate output for a 68060, without using any of the new instructions.
+This results in code that can run relatively efficiently on either a
+68020/68881 or a 68030 or a 68040.  The generated code does use the
+68881 instructions that are emulated on the 68060.
+.Sp
+The option is equivalent to \fB\-march=68020\fR \fB\-mtune=68020\-60\fR.
+.IP "\fB\-mhard\-float\fR" 4
+.IX Item "-mhard-float"
+.PD 0
+.IP "\fB\-m68881\fR" 4
+.IX Item "-m68881"
+.PD
+Generate floating-point instructions.  This is the default for 68020
+and above, and for ColdFire devices that have an \s-1FPU.\s0  It defines the
+macro \f(CW\*(C`_\|_HAVE_68881_\|_\*(C'\fR on M680x0 targets and \f(CW\*(C`_\|_mcffpu_\|_\*(C'\fR
+on ColdFire targets.
+.IP "\fB\-msoft\-float\fR" 4
+.IX Item "-msoft-float"
+Do not generate floating-point instructions; use library calls instead.
+This is the default for 68000, 68010, and 68832 targets.  It is also
+the default for ColdFire devices that have no \s-1FPU.\s0
+.IP "\fB\-mdiv\fR" 4
+.IX Item "-mdiv"
+.PD 0
+.IP "\fB\-mno\-div\fR" 4
+.IX Item "-mno-div"
+.PD
+Generate (do not generate) ColdFire hardware divide and remainder
+instructions.  If \fB\-march\fR is used without \fB\-mcpu\fR,
+the default is \*(L"on\*(R" for ColdFire architectures and \*(L"off\*(R" for M680x0
+architectures.  Otherwise, the default is taken from the target \s-1CPU\s0
+(either the default \s-1CPU,\s0 or the one specified by \fB\-mcpu\fR).  For
+example, the default is \*(L"off\*(R" for \fB\-mcpu=5206\fR and \*(L"on\*(R" for
+\&\fB\-mcpu=5206e\fR.
+.Sp
+\&\s-1GCC\s0 defines the macro \f(CW\*(C`_\|_mcfhwdiv_\|_\*(C'\fR when this option is enabled.
+.IP "\fB\-mshort\fR" 4
+.IX Item "-mshort"
+Consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide, like \f(CW\*(C`short int\*(C'\fR.
+Additionally, parameters passed on the stack are also aligned to a
+16\-bit boundary even on targets whose \s-1API\s0 mandates promotion to 32\-bit.
+.IP "\fB\-mno\-short\fR" 4
+.IX Item "-mno-short"
+Do not consider type \f(CW\*(C`int\*(C'\fR to be 16 bits wide.  This is the default.
+.IP "\fB\-mnobitfield\fR" 4
+.IX Item "-mnobitfield"
+.PD 0
+.IP "\fB\-mno\-bitfield\fR" 4
+.IX Item "-mno-bitfield"
+.PD
+Do not use the bit-field instructions.  The \fB\-m68000\fR, \fB\-mcpu32\fR
+and \fB\-m5200\fR options imply \fB\-mnobitfield\fR.
+.IP "\fB\-mbitfield\fR" 4
+.IX Item "-mbitfield"
+Do use the bit-field instructions.  The \fB\-m68020\fR option implies
+\&\fB\-mbitfield\fR.  This is the default if you use a configuration
+designed for a 68020.
+.IP "\fB\-mrtd\fR" 4
+.IX Item "-mrtd"
+Use a different function-calling convention, in which functions
+that take a fixed number of arguments return with the \f(CW\*(C`rtd\*(C'\fR
+instruction, which pops their arguments while returning.  This
+saves one instruction in the caller since there is no need to pop
+the arguments there.
+.Sp
+This calling convention is incompatible with the one normally
+used on Unix, so you cannot use it if you need to call libraries
+compiled with the Unix compiler.
+.Sp
+Also, you must provide function prototypes for all functions that
+take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
+otherwise incorrect code is generated for calls to those
+functions.
+.Sp
+In addition, seriously incorrect code results if you call a
+function with too many arguments.  (Normally, extra arguments are
+harmlessly ignored.)
+.Sp
+The \f(CW\*(C`rtd\*(C'\fR instruction is supported by the 68010, 68020, 68030,
+68040, 68060 and \s-1CPU32\s0 processors, but not by the 68000 or 5200.
+.Sp
+The default is \fB\-mno\-rtd\fR.
+.IP "\fB\-malign\-int\fR" 4
+.IX Item "-malign-int"
+.PD 0
+.IP "\fB\-mno\-align\-int\fR" 4
+.IX Item "-mno-align-int"
+.PD
+Control whether \s-1GCC\s0 aligns \f(CW\*(C`int\*(C'\fR, \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`long long\*(C'\fR,
+\&\f(CW\*(C`float\*(C'\fR, \f(CW\*(C`double\*(C'\fR, and \f(CW\*(C`long double\*(C'\fR variables on a 32\-bit
+boundary (\fB\-malign\-int\fR) or a 16\-bit boundary (\fB\-mno\-align\-int\fR).
+Aligning variables on 32\-bit boundaries produces code that runs somewhat
+faster on processors with 32\-bit busses at the expense of more memory.
+.Sp
+\&\fBWarning:\fR if you use the \fB\-malign\-int\fR switch, \s-1GCC\s0
+aligns structures containing the above types differently than
+most published application binary interface specifications for the m68k.
+.IP "\fB\-mpcrel\fR" 4
+.IX Item "-mpcrel"
+Use the pc-relative addressing mode of the 68000 directly, instead of
+using a global offset table.  At present, this option implies \fB\-fpic\fR,
+allowing at most a 16\-bit offset for pc-relative addressing.  \fB\-fPIC\fR is
+not presently supported with \fB\-mpcrel\fR, though this could be supported for
+68020 and higher processors.
+.IP "\fB\-mno\-strict\-align\fR" 4
+.IX Item "-mno-strict-align"
+.PD 0
+.IP "\fB\-mstrict\-align\fR" 4
+.IX Item "-mstrict-align"
+.PD
+Do not (do) assume that unaligned memory references are handled by
+the system.
+.IP "\fB\-msep\-data\fR" 4
+.IX Item "-msep-data"
+Generate code that allows the data segment to be located in a different
+area of memory from the text segment.  This allows for execute-in-place in
+an environment without virtual memory management.  This option implies
+\&\fB\-fPIC\fR.
+.IP "\fB\-mno\-sep\-data\fR" 4
+.IX Item "-mno-sep-data"
+Generate code that assumes that the data segment follows the text segment.
+This is the default.
+.IP "\fB\-mid\-shared\-library\fR" 4
+.IX Item "-mid-shared-library"
+Generate code that supports shared libraries via the library \s-1ID\s0 method.
+This allows for execute-in-place and shared libraries in an environment
+without virtual memory management.  This option implies \fB\-fPIC\fR.
+.IP "\fB\-mno\-id\-shared\-library\fR" 4
+.IX Item "-mno-id-shared-library"
+Generate code that doesn't assume ID-based shared libraries are being used.
+This is the default.
+.IP "\fB\-mshared\-library\-id=n\fR" 4
+.IX Item "-mshared-library-id=n"
+Specifies the identification number of the ID-based shared library being
+compiled.  Specifying a value of 0 generates more compact code; specifying
+other values forces the allocation of that number to the current
+library, but is no more space\- or time-efficient than omitting this option.
+.IP "\fB\-mxgot\fR" 4
+.IX Item "-mxgot"
+.PD 0
+.IP "\fB\-mno\-xgot\fR" 4
+.IX Item "-mno-xgot"
+.PD
+When generating position-independent code for ColdFire, generate code
+that works if the \s-1GOT\s0 has more than 8192 entries.  This code is
+larger and slower than code generated without this option.  On M680x0
+processors, this option is not needed; \fB\-fPIC\fR suffices.
+.Sp
+\&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT.\s0
+While this is relatively efficient, it only works if the \s-1GOT\s0
+is smaller than about 64k.  Anything larger causes the linker
+to report an error such as:
+.Sp
+.Vb 1
+\&        relocation truncated to fit: R_68K_GOT16O foobar
+.Ve
+.Sp
+If this happens, you should recompile your code with \fB\-mxgot\fR.
+It should then work with very large GOTs.  However, code generated with
+\&\fB\-mxgot\fR is less efficient, since it takes 4 instructions to fetch
+the value of a global symbol.
+.Sp
+Note that some linkers, including newer versions of the \s-1GNU\s0 linker,
+can create multiple GOTs and sort \s-1GOT\s0 entries.  If you have such a linker,
+you should only need to use \fB\-mxgot\fR when compiling a single
+object file that accesses more than 8192 \s-1GOT\s0 entries.  Very few do.
+.Sp
+These options have no effect unless \s-1GCC\s0 is generating
+position-independent code.
+.IP "\fB\-mlong\-jump\-table\-offsets\fR" 4
+.IX Item "-mlong-jump-table-offsets"
+Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
+16\-bit offsets.
+.PP
+\fIMCore Options\fR
+.IX Subsection "MCore Options"
+.PP
+These are the \fB\-m\fR options defined for the Motorola M*Core
+processors.
+.IP "\fB\-mhardlit\fR" 4
+.IX Item "-mhardlit"
+.PD 0
+.IP "\fB\-mno\-hardlit\fR" 4
+.IX Item "-mno-hardlit"
+.PD
+Inline constants into the code stream if it can be done in two
+instructions or less.
+.IP "\fB\-mdiv\fR" 4
+.IX Item "-mdiv"
+.PD 0
+.IP "\fB\-mno\-div\fR" 4
+.IX Item "-mno-div"
+.PD
+Use the divide instruction.  (Enabled by default).
+.IP "\fB\-mrelax\-immediate\fR" 4
+.IX Item "-mrelax-immediate"
+.PD 0
+.IP "\fB\-mno\-relax\-immediate\fR" 4
+.IX Item "-mno-relax-immediate"
+.PD
+Allow arbitrary-sized immediates in bit operations.
+.IP "\fB\-mwide\-bitfields\fR" 4
+.IX Item "-mwide-bitfields"
+.PD 0
+.IP "\fB\-mno\-wide\-bitfields\fR" 4
+.IX Item "-mno-wide-bitfields"
+.PD
+Always treat bit-fields as \f(CW\*(C`int\*(C'\fR\-sized.
+.IP "\fB\-m4byte\-functions\fR" 4
+.IX Item "-m4byte-functions"
+.PD 0
+.IP "\fB\-mno\-4byte\-functions\fR" 4
+.IX Item "-mno-4byte-functions"
+.PD
+Force all functions to be aligned to a 4\-byte boundary.
+.IP "\fB\-mcallgraph\-data\fR" 4
+.IX Item "-mcallgraph-data"
+.PD 0
+.IP "\fB\-mno\-callgraph\-data\fR" 4
+.IX Item "-mno-callgraph-data"
+.PD
+Emit callgraph information.
+.IP "\fB\-mslow\-bytes\fR" 4
+.IX Item "-mslow-bytes"
+.PD 0
+.IP "\fB\-mno\-slow\-bytes\fR" 4
+.IX Item "-mno-slow-bytes"
+.PD
+Prefer word access when reading byte quantities.
+.IP "\fB\-mlittle\-endian\fR" 4
+.IX Item "-mlittle-endian"
+.PD 0
+.IP "\fB\-mbig\-endian\fR" 4
+.IX Item "-mbig-endian"
+.PD
+Generate code for a little-endian target.
+.IP "\fB\-m210\fR" 4
+.IX Item "-m210"
+.PD 0
+.IP "\fB\-m340\fR" 4
+.IX Item "-m340"
+.PD
+Generate code for the 210 processor.
+.IP "\fB\-mno\-lsim\fR" 4
+.IX Item "-mno-lsim"
+Assume that runtime support has been provided and so omit the
+simulator library (\fIlibsim.a)\fR from the linker command line.
+.IP "\fB\-mstack\-increment=\fR\fIsize\fR" 4
+.IX Item "-mstack-increment=size"
+Set the maximum amount for a single stack increment operation.  Large
+values can increase the speed of programs that contain functions
+that need a large amount of stack space, but they can also trigger a
+segmentation fault if the stack is extended too much.  The default
+value is 0x1000.
+.PP
+\fIMeP Options\fR
+.IX Subsection "MeP Options"
+.IP "\fB\-mabsdiff\fR" 4
+.IX Item "-mabsdiff"
+Enables the \f(CW\*(C`abs\*(C'\fR instruction, which is the absolute difference
+between two registers.
+.IP "\fB\-mall\-opts\fR" 4
+.IX Item "-mall-opts"
+Enables all the optional instructions\-\-\-average, multiply, divide, bit
+operations, leading zero, absolute difference, min/max, clip, and
+saturation.
+.IP "\fB\-maverage\fR" 4
+.IX Item "-maverage"
+Enables the \f(CW\*(C`ave\*(C'\fR instruction, which computes the average of two
+registers.
+.IP "\fB\-mbased=\fR\fIn\fR" 4
+.IX Item "-mbased=n"
+Variables of size \fIn\fR bytes or smaller are placed in the
+\&\f(CW\*(C`.based\*(C'\fR section by default.  Based variables use the \f(CW$tp\fR
+register as a base register, and there is a 128\-byte limit to the
+\&\f(CW\*(C`.based\*(C'\fR section.
+.IP "\fB\-mbitops\fR" 4
+.IX Item "-mbitops"
+Enables the bit operation instructions\-\-\-bit test (\f(CW\*(C`btstm\*(C'\fR), set
+(\f(CW\*(C`bsetm\*(C'\fR), clear (\f(CW\*(C`bclrm\*(C'\fR), invert (\f(CW\*(C`bnotm\*(C'\fR), and
+test-and-set (\f(CW\*(C`tas\*(C'\fR).
+.IP "\fB\-mc=\fR\fIname\fR" 4
+.IX Item "-mc=name"
+Selects which section constant data is placed in.  \fIname\fR may
+be \fBtiny\fR, \fBnear\fR, or \fBfar\fR.
+.IP "\fB\-mclip\fR" 4
+.IX Item "-mclip"
+Enables the \f(CW\*(C`clip\*(C'\fR instruction.  Note that \fB\-mclip\fR is not
+useful unless you also provide \fB\-mminmax\fR.
+.IP "\fB\-mconfig=\fR\fIname\fR" 4
+.IX Item "-mconfig=name"
+Selects one of the built-in core configurations.  Each MeP chip has
+one or more modules in it; each module has a core \s-1CPU\s0 and a variety of
+coprocessors, optional instructions, and peripherals.  The
+\&\f(CW\*(C`MeP\-Integrator\*(C'\fR tool, not part of \s-1GCC,\s0 provides these
+configurations through this option; using this option is the same as
+using all the corresponding command-line options.  The default
+configuration is \fBdefault\fR.
+.IP "\fB\-mcop\fR" 4
+.IX Item "-mcop"
+Enables the coprocessor instructions.  By default, this is a 32\-bit
+coprocessor.  Note that the coprocessor is normally enabled via the
+\&\fB\-mconfig=\fR option.
+.IP "\fB\-mcop32\fR" 4
+.IX Item "-mcop32"
+Enables the 32\-bit coprocessor's instructions.
+.IP "\fB\-mcop64\fR" 4
+.IX Item "-mcop64"
+Enables the 64\-bit coprocessor's instructions.
+.IP "\fB\-mivc2\fR" 4
+.IX Item "-mivc2"
+Enables \s-1IVC2\s0 scheduling.  \s-1IVC2\s0 is a 64\-bit \s-1VLIW\s0 coprocessor.
+.IP "\fB\-mdc\fR" 4
+.IX Item "-mdc"
+Causes constant variables to be placed in the \f(CW\*(C`.near\*(C'\fR section.
+.IP "\fB\-mdiv\fR" 4
+.IX Item "-mdiv"
+Enables the \f(CW\*(C`div\*(C'\fR and \f(CW\*(C`divu\*(C'\fR instructions.
+.IP "\fB\-meb\fR" 4
+.IX Item "-meb"
+Generate big-endian code.
+.IP "\fB\-mel\fR" 4
+.IX Item "-mel"
+Generate little-endian code.
+.IP "\fB\-mio\-volatile\fR" 4
+.IX Item "-mio-volatile"
+Tells the compiler that any variable marked with the \f(CW\*(C`io\*(C'\fR
+attribute is to be considered volatile.
+.IP "\fB\-ml\fR" 4
+.IX Item "-ml"
+Causes variables to be assigned to the \f(CW\*(C`.far\*(C'\fR section by default.
+.IP "\fB\-mleadz\fR" 4
+.IX Item "-mleadz"
+Enables the \f(CW\*(C`leadz\*(C'\fR (leading zero) instruction.
+.IP "\fB\-mm\fR" 4
+.IX Item "-mm"
+Causes variables to be assigned to the \f(CW\*(C`.near\*(C'\fR section by default.
+.IP "\fB\-mminmax\fR" 4
+.IX Item "-mminmax"
+Enables the \f(CW\*(C`min\*(C'\fR and \f(CW\*(C`max\*(C'\fR instructions.
+.IP "\fB\-mmult\fR" 4
+.IX Item "-mmult"
+Enables the multiplication and multiply-accumulate instructions.
+.IP "\fB\-mno\-opts\fR" 4
+.IX Item "-mno-opts"
+Disables all the optional instructions enabled by \fB\-mall\-opts\fR.
+.IP "\fB\-mrepeat\fR" 4
+.IX Item "-mrepeat"
+Enables the \f(CW\*(C`repeat\*(C'\fR and \f(CW\*(C`erepeat\*(C'\fR instructions, used for
+low-overhead looping.
+.IP "\fB\-ms\fR" 4
+.IX Item "-ms"
+Causes all variables to default to the \f(CW\*(C`.tiny\*(C'\fR section.  Note
+that there is a 65536\-byte limit to this section.  Accesses to these
+variables use the \f(CW%gp\fR base register.
+.IP "\fB\-msatur\fR" 4
+.IX Item "-msatur"
+Enables the saturation instructions.  Note that the compiler does not
+currently generate these itself, but this option is included for
+compatibility with other tools, like \f(CW\*(C`as\*(C'\fR.
+.IP "\fB\-msdram\fR" 4
+.IX Item "-msdram"
+Link the SDRAM-based runtime instead of the default ROM-based runtime.
+.IP "\fB\-msim\fR" 4
+.IX Item "-msim"
+Link the simulator run-time libraries.
+.IP "\fB\-msimnovec\fR" 4
+.IX Item "-msimnovec"
+Link the simulator runtime libraries, excluding built-in support
+for reset and exception vectors and tables.
+.IP "\fB\-mtf\fR" 4
+.IX Item "-mtf"
+Causes all functions to default to the \f(CW\*(C`.far\*(C'\fR section.  Without
+this option, functions default to the \f(CW\*(C`.near\*(C'\fR section.
+.IP "\fB\-mtiny=\fR\fIn\fR" 4
+.IX Item "-mtiny=n"
+Variables that are \fIn\fR bytes or smaller are allocated to the
+\&\f(CW\*(C`.tiny\*(C'\fR section.  These variables use the \f(CW$gp\fR base
+register.  The default for this option is 4, but note that there's a
+65536\-byte limit to the \f(CW\*(C`.tiny\*(C'\fR section.
+.PP
+\fIMicroBlaze Options\fR
+.IX Subsection "MicroBlaze Options"
+.IP "\fB\-msoft\-float\fR" 4
+.IX Item "-msoft-float"
+Use software emulation for floating point (default).
+.IP "\fB\-mhard\-float\fR" 4
+.IX Item "-mhard-float"
+Use hardware floating-point instructions.
+.IP "\fB\-mmemcpy\fR" 4
+.IX Item "-mmemcpy"
+Do not optimize block moves, use \f(CW\*(C`memcpy\*(C'\fR.
+.IP "\fB\-mno\-clearbss\fR" 4
+.IX Item "-mno-clearbss"
+This option is deprecated.  Use \fB\-fno\-zero\-initialized\-in\-bss\fR instead.
+.IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
+.IX Item "-mcpu=cpu-type"
+Use features of, and schedule code for, the given \s-1CPU.\s0
+Supported values are in the format \fBv\fR\fIX\fR\fB.\fR\fI\s-1YY\s0\fR\fB.\fR\fIZ\fR,
+where \fIX\fR is a major version, \fI\s-1YY\s0\fR is the minor version, and
+\&\fIZ\fR is compatibility code.  Example values are \fBv3.00.a\fR,
+\&\fBv4.00.b\fR, \fBv5.00.a\fR, \fBv5.00.b\fR, \fBv6.00.a\fR.
+.IP "\fB\-mxl\-soft\-mul\fR" 4
+.IX Item "-mxl-soft-mul"
+Use software multiply emulation (default).
+.IP "\fB\-mxl\-soft\-div\fR" 4
+.IX Item "-mxl-soft-div"
+Use software emulation for divides (default).
+.IP "\fB\-mxl\-barrel\-shift\fR" 4
+.IX Item "-mxl-barrel-shift"
+Use the hardware barrel shifter.
+.IP "\fB\-mxl\-pattern\-compare\fR" 4
+.IX Item "-mxl-pattern-compare"
+Use pattern compare instructions.
+.IP "\fB\-msmall\-divides\fR" 4
+.IX Item "-msmall-divides"
+Use table lookup optimization for small signed integer divisions.
+.IP "\fB\-mxl\-stack\-check\fR" 4
+.IX Item "-mxl-stack-check"
+This option is deprecated.  Use \fB\-fstack\-check\fR instead.
+.IP "\fB\-mxl\-gp\-opt\fR" 4
+.IX Item "-mxl-gp-opt"
+Use GP-relative \f(CW\*(C`.sdata\*(C'\fR/\f(CW\*(C`.sbss\*(C'\fR sections.
+.IP "\fB\-mxl\-multiply\-high\fR" 4
+.IX Item "-mxl-multiply-high"
+Use multiply high instructions for high part of 32x32 multiply.
+.IP "\fB\-mxl\-float\-convert\fR" 4
+.IX Item "-mxl-float-convert"
+Use hardware floating-point conversion instructions.
+.IP "\fB\-mxl\-float\-sqrt\fR" 4
+.IX Item "-mxl-float-sqrt"
+Use hardware floating-point square root instruction.
+.IP "\fB\-mbig\-endian\fR" 4
+.IX Item "-mbig-endian"
+Generate code for a big-endian target.
+.IP "\fB\-mlittle\-endian\fR" 4
+.IX Item "-mlittle-endian"
+Generate code for a little-endian target.
+.IP "\fB\-mxl\-reorder\fR" 4
+.IX Item "-mxl-reorder"
+Use reorder instructions (swap and byte reversed load/store).
+.IP "\fB\-mxl\-mode\-\fR\fIapp-model\fR" 4
+.IX Item "-mxl-mode-app-model"
+Select application model \fIapp-model\fR.  Valid models are
+.RS 4
+.IP "\fBexecutable\fR" 4
+.IX Item "executable"
+normal executable (default), uses startup code \fIcrt0.o\fR.
+.IP "\fB\-mpic\-data\-is\-text\-relative\fR" 4
+.IX Item "-mpic-data-is-text-relative"
+Assume that the displacement between the text and data segments is fixed
+at static link time.  This allows data to be referenced by offset from start of
+text address instead of \s-1GOT\s0 since PC-relative addressing is not supported.
+.IP "\fBxmdstub\fR" 4
+.IX Item "xmdstub"
+for use with Xilinx Microprocessor Debugger (\s-1XMD\s0) based
+software intrusive debug agent called xmdstub. This uses startup file
+\&\fIcrt1.o\fR and sets the start address of the program to 0x800.
+.IP "\fBbootstrap\fR" 4
+.IX Item "bootstrap"
+for applications that are loaded using a bootloader.
+This model uses startup file \fIcrt2.o\fR which does not contain a processor
+reset vector handler. This is suitable for transferring control on a
+processor reset to the bootloader rather than the application.
+.IP "\fBnovectors\fR" 4
+.IX Item "novectors"
+for applications that do not require any of the
+MicroBlaze vectors. This option may be useful for applications running
+within a monitoring application. This model uses \fIcrt3.o\fR as a startup file.
+.RE
+.RS 4
+.Sp
+Option \fB\-xl\-mode\-\fR\fIapp-model\fR is a deprecated alias for
+\&\fB\-mxl\-mode\-\fR\fIapp-model\fR.
+.RE
+.PP
+\fI\s-1MIPS\s0 Options\fR
+.IX Subsection "MIPS Options"
+.IP "\fB\-EB\fR" 4
+.IX Item "-EB"
+Generate big-endian code.
+.IP "\fB\-EL\fR" 4
+.IX Item "-EL"
+Generate little-endian code.  This is the default for \fBmips*el\-*\-*\fR
+configurations.
+.IP "\fB\-march=\fR\fIarch\fR" 4
+.IX Item "-march=arch"
+Generate code that runs on \fIarch\fR, which can be the name of a
+generic \s-1MIPS ISA,\s0 or the name of a particular processor.
+The \s-1ISA\s0 names are:
+\&\fBmips1\fR, \fBmips2\fR, \fBmips3\fR, \fBmips4\fR,
+\&\fBmips32\fR, \fBmips32r2\fR, \fBmips32r3\fR, \fBmips32r5\fR,
+\&\fBmips32r6\fR, \fBmips64\fR, \fBmips64r2\fR, \fBmips64r3\fR,
+\&\fBmips64r5\fR and \fBmips64r6\fR.
+The processor names are:
+\&\fB4kc\fR, \fB4km\fR, \fB4kp\fR, \fB4ksc\fR,
+\&\fB4kec\fR, \fB4kem\fR, \fB4kep\fR, \fB4ksd\fR,
+\&\fB5kc\fR, \fB5kf\fR,
+\&\fB20kc\fR,
+\&\fB24kc\fR, \fB24kf2_1\fR, \fB24kf1_1\fR,
+\&\fB24kec\fR, \fB24kef2_1\fR, \fB24kef1_1\fR,
+\&\fB34kc\fR, \fB34kf2_1\fR, \fB34kf1_1\fR, \fB34kn\fR,
+\&\fB74kc\fR, \fB74kf2_1\fR, \fB74kf1_1\fR, \fB74kf3_2\fR,
+\&\fB1004kc\fR, \fB1004kf2_1\fR, \fB1004kf1_1\fR,
+\&\fBi6400\fR, \fBi6500\fR,
+\&\fBinteraptiv\fR,
+\&\fBloongson2e\fR, \fBloongson2f\fR, \fBloongson3a\fR, \fBgs464\fR,
+\&\fBgs464e\fR, \fBgs264e\fR,
+\&\fBm4k\fR,
+\&\fBm14k\fR, \fBm14kc\fR, \fBm14ke\fR, \fBm14kec\fR,
+\&\fBm5100\fR, \fBm5101\fR,
+\&\fBocteon\fR, \fBocteon+\fR, \fBocteon2\fR, \fBocteon3\fR,
+\&\fBorion\fR,
+\&\fBp5600\fR, \fBp6600\fR,
+\&\fBr2000\fR, \fBr3000\fR, \fBr3900\fR, \fBr4000\fR, \fBr4400\fR,
+\&\fBr4600\fR, \fBr4650\fR, \fBr4700\fR, \fBr5900\fR,
+\&\fBr6000\fR, \fBr8000\fR,
+\&\fBrm7000\fR, \fBrm9000\fR,
+\&\fBr10000\fR, \fBr12000\fR, \fBr14000\fR, \fBr16000\fR,
+\&\fBsb1\fR,
+\&\fBsr71000\fR,
+\&\fBvr4100\fR, \fBvr4111\fR, \fBvr4120\fR, \fBvr4130\fR, \fBvr4300\fR,
+\&\fBvr5000\fR, \fBvr5400\fR, \fBvr5500\fR,
+\&\fBxlr\fR and \fBxlp\fR.
+The special value \fBfrom-abi\fR selects the
+most compatible architecture for the selected \s-1ABI\s0 (that is,
+\&\fBmips1\fR for 32\-bit ABIs and \fBmips3\fR for 64\-bit ABIs).
+.Sp
+The native Linux/GNU toolchain also supports the value \fBnative\fR,
+which selects the best architecture option for the host processor.
+\&\fB\-march=native\fR has no effect if \s-1GCC\s0 does not recognize
+the processor.
+.Sp
+In processor names, a final \fB000\fR can be abbreviated as \fBk\fR
+(for example, \fB\-march=r2k\fR).  Prefixes are optional, and
+\&\fBvr\fR may be written \fBr\fR.
+.Sp
+Names of the form \fIn\fR\fBf2_1\fR refer to processors with
+FPUs clocked at half the rate of the core, names of the form
+\&\fIn\fR\fBf1_1\fR refer to processors with FPUs clocked at the same
+rate as the core, and names of the form \fIn\fR\fBf3_2\fR refer to
+processors with FPUs clocked a ratio of 3:2 with respect to the core.
+For compatibility reasons, \fIn\fR\fBf\fR is accepted as a synonym
+for \fIn\fR\fBf2_1\fR while \fIn\fR\fBx\fR and \fIb\fR\fBfx\fR are
+accepted as synonyms for \fIn\fR\fBf1_1\fR.
+.Sp
+\&\s-1GCC\s0 defines two macros based on the value of this option.  The first
+is \f(CW\*(C`_MIPS_ARCH\*(C'\fR, which gives the name of target architecture, as
+a string.  The second has the form \f(CW\*(C`_MIPS_ARCH_\f(CIfoo\f(CW\*(C'\fR,
+where \fIfoo\fR is the capitalized value of \f(CW\*(C`_MIPS_ARCH\*(C'\fR.
+For example, \fB\-march=r2000\fR sets \f(CW\*(C`_MIPS_ARCH\*(C'\fR
+to \f(CW"r2000"\fR and defines the macro \f(CW\*(C`_MIPS_ARCH_R2000\*(C'\fR.
+.Sp
+Note that the \f(CW\*(C`_MIPS_ARCH\*(C'\fR macro uses the processor names given
+above.  In other words, it has the full prefix and does not
+abbreviate \fB000\fR as \fBk\fR.  In the case of \fBfrom-abi\fR,
+the macro names the resolved architecture (either \f(CW"mips1"\fR or
+\&\f(CW"mips3"\fR).  It names the default architecture when no
+\&\fB\-march\fR option is given.
+.IP "\fB\-mtune=\fR\fIarch\fR" 4
+.IX Item "-mtune=arch"
+Optimize for \fIarch\fR.  Among other things, this option controls
+the way instructions are scheduled, and the perceived cost of arithmetic
+operations.  The list of \fIarch\fR values is the same as for
+\&\fB\-march\fR.
+.Sp
+When this option is not used, \s-1GCC\s0 optimizes for the processor
+specified by \fB\-march\fR.  By using \fB\-march\fR and
+\&\fB\-mtune\fR together, it is possible to generate code that
+runs on a family of processors, but optimize the code for one
+particular member of that family.
+.Sp
+\&\fB\-mtune\fR defines the macros \f(CW\*(C`_MIPS_TUNE\*(C'\fR and
+\&\f(CW\*(C`_MIPS_TUNE_\f(CIfoo\f(CW\*(C'\fR, which work in the same way as the
+\&\fB\-march\fR ones described above.
+.IP "\fB\-mips1\fR" 4
+.IX Item "-mips1"
+Equivalent to \fB\-march=mips1\fR.
+.IP "\fB\-mips2\fR" 4
+.IX Item "-mips2"
+Equivalent to \fB\-march=mips2\fR.
+.IP "\fB\-mips3\fR" 4
+.IX Item "-mips3"
+Equivalent to \fB\-march=mips3\fR.
+.IP "\fB\-mips4\fR" 4
+.IX Item "-mips4"
+Equivalent to \fB\-march=mips4\fR.
+.IP "\fB\-mips32\fR" 4
+.IX Item "-mips32"
+Equivalent to \fB\-march=mips32\fR.
+.IP "\fB\-mips32r3\fR" 4
+.IX Item "-mips32r3"
+Equivalent to \fB\-march=mips32r3\fR.
+.IP "\fB\-mips32r5\fR" 4
+.IX Item "-mips32r5"
+Equivalent to \fB\-march=mips32r5\fR.
+.IP "\fB\-mips32r6\fR" 4
+.IX Item "-mips32r6"
+Equivalent to \fB\-march=mips32r6\fR.
+.IP "\fB\-mips64\fR" 4
+.IX Item "-mips64"
+Equivalent to \fB\-march=mips64\fR.
+.IP "\fB\-mips64r2\fR" 4
+.IX Item "-mips64r2"
+Equivalent to \fB\-march=mips64r2\fR.
+.IP "\fB\-mips64r3\fR" 4
+.IX Item "-mips64r3"
+Equivalent to \fB\-march=mips64r3\fR.
+.IP "\fB\-mips64r5\fR" 4
+.IX Item "-mips64r5"
+Equivalent to \fB\-march=mips64r5\fR.
+.IP "\fB\-mips64r6\fR" 4
+.IX Item "-mips64r6"
+Equivalent to \fB\-march=mips64r6\fR.
+.IP "\fB\-mips16\fR" 4
+.IX Item "-mips16"
+.PD 0
+.IP "\fB\-mno\-mips16\fR" 4
+.IX Item "-mno-mips16"
+.PD
+Generate (do not generate) \s-1MIPS16\s0 code.  If \s-1GCC\s0 is targeting a
+\&\s-1MIPS32\s0 or \s-1MIPS64\s0 architecture, it makes use of the MIPS16e \s-1ASE.\s0
+.Sp
+\&\s-1MIPS16\s0 code generation can also be controlled on a per-function basis
+by means of \f(CW\*(C`mips16\*(C'\fR and \f(CW\*(C`nomips16\*(C'\fR attributes.
+.IP "\fB\-mflip\-mips16\fR" 4
+.IX Item "-mflip-mips16"
+Generate \s-1MIPS16\s0 code on alternating functions.  This option is provided
+for regression testing of mixed MIPS16/non\-MIPS16 code generation, and is
+not intended for ordinary use in compiling user code.
+.IP "\fB\-minterlink\-compressed\fR" 4
+.IX Item "-minterlink-compressed"
+.PD 0
+.IP "\fB\-mno\-interlink\-compressed\fR" 4
+.IX Item "-mno-interlink-compressed"
+.PD
+Require (do not require) that code using the standard (uncompressed) \s-1MIPS ISA\s0
+be link-compatible with \s-1MIPS16\s0 and microMIPS code, and vice versa.
+.Sp
+For example, code using the standard \s-1ISA\s0 encoding cannot jump directly
+to \s-1MIPS16\s0 or microMIPS code; it must either use a call or an indirect jump.
+\&\fB\-minterlink\-compressed\fR therefore disables direct jumps unless \s-1GCC\s0
+knows that the target of the jump is not compressed.
+.IP "\fB\-minterlink\-mips16\fR" 4
+.IX Item "-minterlink-mips16"
+.PD 0
+.IP "\fB\-mno\-interlink\-mips16\fR" 4
+.IX Item "-mno-interlink-mips16"
+.PD
+Aliases of \fB\-minterlink\-compressed\fR and
+\&\fB\-mno\-interlink\-compressed\fR.  These options predate the microMIPS \s-1ASE\s0
+and are retained for backwards compatibility.
+.IP "\fB\-mabi=32\fR" 4
+.IX Item "-mabi=32"
+.PD 0
+.IP "\fB\-mabi=o64\fR" 4
+.IX Item "-mabi=o64"
+.IP "\fB\-mabi=n32\fR" 4
+.IX Item "-mabi=n32"
+.IP "\fB\-mabi=64\fR" 4
+.IX Item "-mabi=64"
+.IP "\fB\-mabi=eabi\fR" 4
+.IX Item "-mabi=eabi"
+.PD
+Generate code for the given \s-1ABI.\s0
+.Sp
+Note that the \s-1EABI\s0 has a 32\-bit and a 64\-bit variant.  \s-1GCC\s0 normally
+generates 64\-bit code when you select a 64\-bit architecture, but you
+can use \fB\-mgp32\fR to get 32\-bit code instead.
+.Sp
+For information about the O64 \s-1ABI,\s0 see
+<\fBhttp://gcc.gnu.org/projects/mipso64\-abi.html\fR>.
+.Sp
+\&\s-1GCC\s0 supports a variant of the o32 \s-1ABI\s0 in which floating-point registers
+are 64 rather than 32 bits wide.  You can select this combination with
+\&\fB\-mabi=32\fR \fB\-mfp64\fR.  This \s-1ABI\s0 relies on the \f(CW\*(C`mthc1\*(C'\fR
+and \f(CW\*(C`mfhc1\*(C'\fR instructions and is therefore only supported for
+\&\s-1MIPS32R2, MIPS32R3\s0 and \s-1MIPS32R5\s0 processors.
+.Sp
+The register assignments for arguments and return values remain the
+same, but each scalar value is passed in a single 64\-bit register
+rather than a pair of 32\-bit registers.  For example, scalar
+floating-point values are returned in \fB\f(CB$f0\fB\fR only, not a
+\&\fB\f(CB$f0\fB\fR/\fB\f(CB$f1\fB\fR pair.  The set of call-saved registers also
+remains the same in that the even-numbered double-precision registers
+are saved.
+.Sp
+Two additional variants of the o32 \s-1ABI\s0 are supported to enable
+a transition from 32\-bit to 64\-bit registers.  These are \s-1FPXX\s0
+(\fB\-mfpxx\fR) and \s-1FP64A\s0 (\fB\-mfp64\fR \fB\-mno\-odd\-spreg\fR).
+The \s-1FPXX\s0 extension mandates that all code must execute correctly
+when run using 32\-bit or 64\-bit registers.  The code can be interlinked
+with either \s-1FP32\s0 or \s-1FP64,\s0 but not both.
+The \s-1FP64A\s0 extension is similar to the \s-1FP64\s0 extension but forbids the
+use of odd-numbered single-precision registers.  This can be used
+in conjunction with the \f(CW\*(C`FRE\*(C'\fR mode of FPUs in \s-1MIPS32R5\s0
+processors and allows both \s-1FP32\s0 and \s-1FP64A\s0 code to interlink and
+run in the same process without changing \s-1FPU\s0 modes.
+.IP "\fB\-mabicalls\fR" 4
+.IX Item "-mabicalls"
+.PD 0
+.IP "\fB\-mno\-abicalls\fR" 4
+.IX Item "-mno-abicalls"
+.PD
+Generate (do not generate) code that is suitable for SVR4\-style
+dynamic objects.  \fB\-mabicalls\fR is the default for SVR4\-based
+systems.
+.IP "\fB\-mshared\fR" 4
+.IX Item "-mshared"
+.PD 0
+.IP "\fB\-mno\-shared\fR" 4
+.IX Item "-mno-shared"
+.PD
+Generate (do not generate) code that is fully position-independent,
+and that can therefore be linked into shared libraries.  This option
+only affects \fB\-mabicalls\fR.
+.Sp
+All \fB\-mabicalls\fR code has traditionally been position-independent,
+regardless of options like \fB\-fPIC\fR and \fB\-fpic\fR.  However,
+as an extension, the \s-1GNU\s0 toolchain allows executables to use absolute
+accesses for locally-binding symbols.  It can also use shorter \s-1GP\s0
+initialization sequences and generate direct calls to locally-defined
+functions.  This mode is selected by \fB\-mno\-shared\fR.
+.Sp
+\&\fB\-mno\-shared\fR depends on binutils 2.16 or higher and generates
+objects that can only be linked by the \s-1GNU\s0 linker.  However, the option
+does not affect the \s-1ABI\s0 of the final executable; it only affects the \s-1ABI\s0
+of relocatable objects.  Using \fB\-mno\-shared\fR generally makes
+executables both smaller and quicker.
+.Sp
+\&\fB\-mshared\fR is the default.
+.IP "\fB\-mplt\fR" 4
+.IX Item "-mplt"
+.PD 0
+.IP "\fB\-mno\-plt\fR" 4
+.IX Item "-mno-plt"
+.PD
+Assume (do not assume) that the static and dynamic linkers
+support PLTs and copy relocations.  This option only affects
+\&\fB\-mno\-shared \-mabicalls\fR.  For the n64 \s-1ABI,\s0 this option
+has no effect without \fB\-msym32\fR.
+.Sp
+You can make \fB\-mplt\fR the default by configuring
+\&\s-1GCC\s0 with \fB\-\-with\-mips\-plt\fR.  The default is
+\&\fB\-mno\-plt\fR otherwise.
+.IP "\fB\-mxgot\fR" 4
+.IX Item "-mxgot"
+.PD 0
+.IP "\fB\-mno\-xgot\fR" 4
+.IX Item "-mno-xgot"
+.PD
+Lift (do not lift) the usual restrictions on the size of the global
+offset table.
+.Sp
+\&\s-1GCC\s0 normally uses a single instruction to load values from the \s-1GOT.\s0
+While this is relatively efficient, it only works if the \s-1GOT\s0
+is smaller than about 64k.  Anything larger causes the linker
+to report an error such as:
+.Sp
+.Vb 1
+\&        relocation truncated to fit: R_MIPS_GOT16 foobar
+.Ve
+.Sp
+If this happens, you should recompile your code with \fB\-mxgot\fR.
+This works with very large GOTs, although the code is also
+less efficient, since it takes three instructions to fetch the
+value of a global symbol.
+.Sp
+Note that some linkers can create multiple GOTs.  If you have such a
+linker, you should only need to use \fB\-mxgot\fR when a single object
+file accesses more than 64k's worth of \s-1GOT\s0 entries.  Very few do.
+.Sp
+These options have no effect unless \s-1GCC\s0 is generating position
+independent code.
+.IP "\fB\-mgp32\fR" 4
+.IX Item "-mgp32"
+Assume that general-purpose registers are 32 bits wide.
+.IP "\fB\-mgp64\fR" 4
+.IX Item "-mgp64"
+Assume that general-purpose registers are 64 bits wide.
+.IP "\fB\-mfp32\fR" 4
+.IX Item "-mfp32"
+Assume that floating-point registers are 32 bits wide.
+.IP "\fB\-mfp64\fR" 4
+.IX Item "-mfp64"
+Assume that floating-point registers are 64 bits wide.
+.IP "\fB\-mfpxx\fR" 4
+.IX Item "-mfpxx"
+Do not assume the width of floating-point registers.
+.IP "\fB\-mhard\-float\fR" 4
+.IX Item "-mhard-float"
+Use floating-point coprocessor instructions.
+.IP "\fB\-msoft\-float\fR" 4
+.IX Item "-msoft-float"
+Do not use floating-point coprocessor instructions.  Implement
+floating-point calculations using library calls instead.
+.IP "\fB\-mno\-float\fR" 4
+.IX Item "-mno-float"
+Equivalent to \fB\-msoft\-float\fR, but additionally asserts that the
+program being compiled does not perform any floating-point operations.
+This option is presently supported only by some bare-metal \s-1MIPS\s0
+configurations, where it may select a special set of libraries
+that lack all floating-point support (including, for example, the
+floating-point \f(CW\*(C`printf\*(C'\fR formats).  
+If code compiled with \fB\-mno\-float\fR accidentally contains
+floating-point operations, it is likely to suffer a link-time
+or run-time failure.
+.IP "\fB\-msingle\-float\fR" 4
+.IX Item "-msingle-float"
+Assume that the floating-point coprocessor only supports single-precision
+operations.
+.IP "\fB\-mdouble\-float\fR" 4
+.IX Item "-mdouble-float"
+Assume that the floating-point coprocessor supports double-precision
+operations.  This is the default.
+.IP "\fB\-modd\-spreg\fR" 4
+.IX Item "-modd-spreg"
+.PD 0
+.IP "\fB\-mno\-odd\-spreg\fR" 4
+.IX Item "-mno-odd-spreg"
+.PD
+Enable the use of odd-numbered single-precision floating-point registers
+for the o32 \s-1ABI.\s0  This is the default for processors that are known to
+support these registers.  When using the o32 \s-1FPXX ABI,\s0 \fB\-mno\-odd\-spreg\fR
+is set by default.
+.IP "\fB\-mabs=2008\fR" 4
+.IX Item "-mabs=2008"
+.PD 0
+.IP "\fB\-mabs=legacy\fR" 4
+.IX Item "-mabs=legacy"
+.PD
+These options control the treatment of the special not-a-number (NaN)
+\&\s-1IEEE 754\s0 floating-point data with the \f(CW\*(C`abs.\f(CIfmt\f(CW\*(C'\fR and
+\&\f(CW\*(C`neg.\f(CIfmt\f(CW\*(C'\fR machine instructions.
+.Sp
+By default or when \fB\-mabs=legacy\fR is used the legacy
+treatment is selected.  In this case these instructions are considered
+arithmetic and avoided where correct operation is required and the
+input operand might be a NaN.  A longer sequence of instructions that
+manipulate the sign bit of floating-point datum manually is used
+instead unless the \fB\-ffinite\-math\-only\fR option has also been
+specified.
+.Sp
+The \fB\-mabs=2008\fR option selects the \s-1IEEE 754\-2008\s0 treatment.  In
+this case these instructions are considered non-arithmetic and therefore
+operating correctly in all cases, including in particular where the
+input operand is a NaN.  These instructions are therefore always used
+for the respective operations.
+.IP "\fB\-mnan=2008\fR" 4
+.IX Item "-mnan=2008"
+.PD 0
+.IP "\fB\-mnan=legacy\fR" 4
+.IX Item "-mnan=legacy"
+.PD
+These options control the encoding of the special not-a-number (NaN)
+\&\s-1IEEE 754\s0 floating-point data.
+.Sp
+The \fB\-mnan=legacy\fR option selects the legacy encoding.  In this
+case quiet NaNs (qNaNs) are denoted by the first bit of their trailing
+significand field being 0, whereas signaling NaNs (sNaNs) are denoted
+by the first bit of their trailing significand field being 1.
+.Sp
+The \fB\-mnan=2008\fR option selects the \s-1IEEE 754\-2008\s0 encoding.  In
+this case qNaNs are denoted by the first bit of their trailing
+significand field being 1, whereas sNaNs are denoted by the first bit of
+their trailing significand field being 0.
+.Sp
+The default is \fB\-mnan=legacy\fR unless \s-1GCC\s0 has been configured with
+\&\fB\-\-with\-nan=2008\fR.
+.IP "\fB\-mllsc\fR" 4
+.IX Item "-mllsc"
+.PD 0
+.IP "\fB\-mno\-llsc\fR" 4
+.IX Item "-mno-llsc"
+.PD
+Use (do not use) \fBll\fR, \fBsc\fR, and \fBsync\fR instructions to
+implement atomic memory built-in functions.  When neither option is
+specified, \s-1GCC\s0 uses the instructions if the target architecture
+supports them.
+.Sp
+\&\fB\-mllsc\fR is useful if the runtime environment can emulate the
+instructions and \fB\-mno\-llsc\fR can be useful when compiling for
+nonstandard ISAs.  You can make either option the default by
+configuring \s-1GCC\s0 with \fB\-\-with\-llsc\fR and \fB\-\-without\-llsc\fR
+respectively.  \fB\-\-with\-llsc\fR is the default for some
+configurations; see the installation documentation for details.
+.IP "\fB\-mdsp\fR" 4
+.IX Item "-mdsp"
+.PD 0
+.IP "\fB\-mno\-dsp\fR" 4
+.IX Item "-mno-dsp"
+.PD
+Use (do not use) revision 1 of the \s-1MIPS DSP ASE.\s0
+  This option defines the
+preprocessor macro \f(CW\*(C`_\|_mips_dsp\*(C'\fR.  It also defines
+\&\f(CW\*(C`_\|_mips_dsp_rev\*(C'\fR to 1.
+.IP "\fB\-mdspr2\fR" 4
+.IX Item "-mdspr2"
+.PD 0
+.IP "\fB\-mno\-dspr2\fR" 4
+.IX Item "-mno-dspr2"
+.PD
+Use (do not use) revision 2 of the \s-1MIPS DSP ASE.\s0
+  This option defines the
+preprocessor macros \f(CW\*(C`_\|_mips_dsp\*(C'\fR and \f(CW\*(C`_\|_mips_dspr2\*(C'\fR.
+It also defines \f(CW\*(C`_\|_mips_dsp_rev\*(C'\fR to 2.
+.IP "\fB\-msmartmips\fR" 4
+.IX Item "-msmartmips"
+.PD 0
+.IP "\fB\-mno\-smartmips\fR" 4
+.IX Item "-mno-smartmips"
+.PD
+Use (do not use) the \s-1MIPS\s0 SmartMIPS \s-1ASE.\s0
+.IP "\fB\-mpaired\-single\fR" 4
+.IX Item "-mpaired-single"
+.PD 0
+.IP "\fB\-mno\-paired\-single\fR" 4
+.IX Item "-mno-paired-single"
+.PD
+Use (do not use) paired-single floating-point instructions.
+  This option requires
+hardware floating-point support to be enabled.
+.IP "\fB\-mdmx\fR" 4
+.IX Item "-mdmx"
+.PD 0
+.IP "\fB\-mno\-mdmx\fR" 4
+.IX Item "-mno-mdmx"
+.PD
+Use (do not use) \s-1MIPS\s0 Digital Media Extension instructions.
+This option can only be used when generating 64\-bit code and requires
+hardware floating-point support to be enabled.
+.IP "\fB\-mips3d\fR" 4
+.IX Item "-mips3d"
+.PD 0
+.IP "\fB\-mno\-mips3d\fR" 4
+.IX Item "-mno-mips3d"
+.PD
+Use (do not use) the \s-1MIPS\-3D ASE.\s0  
+The option \fB\-mips3d\fR implies \fB\-mpaired\-single\fR.
+.IP "\fB\-mmicromips\fR" 4
+.IX Item "-mmicromips"
+.PD 0
+.IP "\fB\-mno\-micromips\fR" 4
+.IX Item "-mno-micromips"
+.PD
+Generate (do not generate) microMIPS code.
+.Sp
+MicroMIPS code generation can also be controlled on a per-function basis
+by means of \f(CW\*(C`micromips\*(C'\fR and \f(CW\*(C`nomicromips\*(C'\fR attributes.
+.IP "\fB\-mmt\fR" 4
+.IX Item "-mmt"
+.PD 0
+.IP "\fB\-mno\-mt\fR" 4
+.IX Item "-mno-mt"
+.PD
+Use (do not use) \s-1MT\s0 Multithreading instructions.
+.IP "\fB\-mmcu\fR" 4
+.IX Item "-mmcu"
+.PD 0
+.IP "\fB\-mno\-mcu\fR" 4
+.IX Item "-mno-mcu"
+.PD
+Use (do not use) the \s-1MIPS MCU ASE\s0 instructions.
+.IP "\fB\-meva\fR" 4
+.IX Item "-meva"
+.PD 0
+.IP "\fB\-mno\-eva\fR" 4
+.IX Item "-mno-eva"
+.PD
+Use (do not use) the \s-1MIPS\s0 Enhanced Virtual Addressing instructions.
+.IP "\fB\-mvirt\fR" 4
+.IX Item "-mvirt"
+.PD 0
+.IP "\fB\-mno\-virt\fR" 4
+.IX Item "-mno-virt"
+.PD
+Use (do not use) the \s-1MIPS\s0 Virtualization (\s-1VZ\s0) instructions.
+.IP "\fB\-mxpa\fR" 4
+.IX Item "-mxpa"
+.PD 0
+.IP "\fB\-mno\-xpa\fR" 4
+.IX Item "-mno-xpa"
+.PD
+Use (do not use) the \s-1MIPS\s0 eXtended Physical Address (\s-1XPA\s0) instructions.
+.IP "\fB\-mcrc\fR" 4
+.IX Item "-mcrc"
+.PD 0
+.IP "\fB\-mno\-crc\fR" 4
+.IX Item "-mno-crc"
+.PD
+Use (do not use) the \s-1MIPS\s0 Cyclic Redundancy Check (\s-1CRC\s0) instructions.
+.IP "\fB\-mginv\fR" 4
+.IX Item "-mginv"
+.PD 0
+.IP "\fB\-mno\-ginv\fR" 4
+.IX Item "-mno-ginv"
+.PD
+Use (do not use) the \s-1MIPS\s0 Global INValidate (\s-1GINV\s0) instructions.
+.IP "\fB\-mloongson\-mmi\fR" 4
+.IX Item "-mloongson-mmi"
+.PD 0
+.IP "\fB\-mno\-loongson\-mmi\fR" 4
+.IX Item "-mno-loongson-mmi"
+.PD
+Use (do not use) the \s-1MIPS\s0 Loongson MultiMedia extensions Instructions (\s-1MMI\s0).
+.IP "\fB\-mloongson\-ext\fR" 4
+.IX Item "-mloongson-ext"
+.PD 0
+.IP "\fB\-mno\-loongson\-ext\fR" 4
+.IX Item "-mno-loongson-ext"
+.PD
+Use (do not use) the \s-1MIPS\s0 Loongson EXTensions (\s-1EXT\s0) instructions.
+.IP "\fB\-mloongson\-ext2\fR" 4
+.IX Item "-mloongson-ext2"
+.PD 0
+.IP "\fB\-mno\-loongson\-ext2\fR" 4
+.IX Item "-mno-loongson-ext2"
+.PD
+Use (do not use) the \s-1MIPS\s0 Loongson EXTensions r2 (\s-1EXT2\s0) instructions.
+.IP "\fB\-mlong64\fR" 4
+.IX Item "-mlong64"
+Force \f(CW\*(C`long\*(C'\fR types to be 64 bits wide.  See \fB\-mlong32\fR for
+an explanation of the default and the way that the pointer size is
+determined.
+.IP "\fB\-mlong32\fR" 4
+.IX Item "-mlong32"
+Force \f(CW\*(C`long\*(C'\fR, \f(CW\*(C`int\*(C'\fR, and pointer types to be 32 bits wide.
+.Sp
+The default size of \f(CW\*(C`int\*(C'\fRs, \f(CW\*(C`long\*(C'\fRs and pointers depends on
+the \s-1ABI.\s0  All the supported ABIs use 32\-bit \f(CW\*(C`int\*(C'\fRs.  The n64 \s-1ABI\s0
+uses 64\-bit \f(CW\*(C`long\*(C'\fRs, as does the 64\-bit \s-1EABI\s0; the others use
+32\-bit \f(CW\*(C`long\*(C'\fRs.  Pointers are the same size as \f(CW\*(C`long\*(C'\fRs,
+or the same size as integer registers, whichever is smaller.
+.IP "\fB\-msym32\fR" 4
+.IX Item "-msym32"
+.PD 0
+.IP "\fB\-mno\-sym32\fR" 4
+.IX Item "-mno-sym32"
+.PD
+Assume (do not assume) that all symbols have 32\-bit values, regardless
+of the selected \s-1ABI.\s0  This option is useful in combination with
+\&\fB\-mabi=64\fR and \fB\-mno\-abicalls\fR because it allows \s-1GCC\s0
+to generate shorter and faster references to symbolic addresses.
+.IP "\fB\-G\fR \fInum\fR" 4
+.IX Item "-G num"
+Put definitions of externally-visible data in a small data section
+if that data is no bigger than \fInum\fR bytes.  \s-1GCC\s0 can then generate
+more efficient accesses to the data; see \fB\-mgpopt\fR for details.
+.Sp
+The default \fB\-G\fR option depends on the configuration.
+.IP "\fB\-mlocal\-sdata\fR" 4
+.IX Item "-mlocal-sdata"
+.PD 0
+.IP "\fB\-mno\-local\-sdata\fR" 4
+.IX Item "-mno-local-sdata"
+.PD
+Extend (do not extend) the \fB\-G\fR behavior to local data too,
+such as to static variables in C.  \fB\-mlocal\-sdata\fR is the
+default for all configurations.
+.Sp
+If the linker complains that an application is using too much small data,
+you might want to try rebuilding the less performance-critical parts with
+\&\fB\-mno\-local\-sdata\fR.  You might also want to build large
+libraries with \fB\-mno\-local\-sdata\fR, so that the libraries leave
+more room for the main program.
+.IP "\fB\-mextern\-sdata\fR" 4
+.IX Item "-mextern-sdata"
+.PD 0
+.IP "\fB\-mno\-extern\-sdata\fR" 4
+.IX Item "-mno-extern-sdata"
+.PD
+Assume (do not assume) that externally-defined data is in
+a small data section if the size of that data is within the \fB\-G\fR limit.
+\&\fB\-mextern\-sdata\fR is the default for all configurations.
+.Sp
+If you compile a module \fIMod\fR with \fB\-mextern\-sdata\fR \fB\-G\fR
+\&\fInum\fR \fB\-mgpopt\fR, and \fIMod\fR references a variable \fIVar\fR
+that is no bigger than \fInum\fR bytes, you must make sure that \fIVar\fR
+is placed in a small data section.  If \fIVar\fR is defined by another
+module, you must either compile that module with a high-enough
+\&\fB\-G\fR setting or attach a \f(CW\*(C`section\*(C'\fR attribute to \fIVar\fR's
+definition.  If \fIVar\fR is common, you must link the application
+with a high-enough \fB\-G\fR setting.
+.Sp
+The easiest way of satisfying these restrictions is to compile
+and link every module with the same \fB\-G\fR option.  However,
+you may wish to build a library that supports several different
+small data limits.  You can do this by compiling the library with
+the highest supported \fB\-G\fR setting and additionally using
+\&\fB\-mno\-extern\-sdata\fR to stop the library from making assumptions
+about externally-defined data.
+.IP "\fB\-mgpopt\fR" 4
+.IX Item "-mgpopt"
+.PD 0
+.IP "\fB\-mno\-gpopt\fR" 4
+.IX Item "-mno-gpopt"
+.PD
+Use (do not use) GP-relative accesses for symbols that are known to be
+in a small data section; see \fB\-G\fR, \fB\-mlocal\-sdata\fR and
+\&\fB\-mextern\-sdata\fR.  \fB\-mgpopt\fR is the default for all
+configurations.
+.Sp
+\&\fB\-mno\-gpopt\fR is useful for cases where the \f(CW$gp\fR register
+might not hold the value of \f(CW\*(C`_gp\*(C'\fR.  For example, if the code is
+part of a library that might be used in a boot monitor, programs that
+call boot monitor routines pass an unknown value in \f(CW$gp\fR.
+(In such situations, the boot monitor itself is usually compiled
+with \fB\-G0\fR.)
+.Sp
+\&\fB\-mno\-gpopt\fR implies \fB\-mno\-local\-sdata\fR and
+\&\fB\-mno\-extern\-sdata\fR.
+.IP "\fB\-membedded\-data\fR" 4
+.IX Item "-membedded-data"
+.PD 0
+.IP "\fB\-mno\-embedded\-data\fR" 4
+.IX Item "-mno-embedded-data"
+.PD
+Allocate variables to the read-only data section first if possible, then
+next in the small data section if possible, otherwise in data.  This gives
+slightly slower code than the default, but reduces the amount of \s-1RAM\s0 required
+when executing, and thus may be preferred for some embedded systems.
+.IP "\fB\-muninit\-const\-in\-rodata\fR" 4
+.IX Item "-muninit-const-in-rodata"
+.PD 0
+.IP "\fB\-mno\-uninit\-const\-in\-rodata\fR" 4
+.IX Item "-mno-uninit-const-in-rodata"
+.PD
+Put uninitialized \f(CW\*(C`const\*(C'\fR variables in the read-only data section.
+This option is only meaningful in conjunction with \fB\-membedded\-data\fR.
+.IP "\fB\-mcode\-readable=\fR\fIsetting\fR" 4
+.IX Item "-mcode-readable=setting"
+Specify whether \s-1GCC\s0 may generate code that reads from executable sections.
+There are three possible settings:
+.RS 4
+.IP "\fB\-mcode\-readable=yes\fR" 4
+.IX Item "-mcode-readable=yes"
+Instructions may freely access executable sections.  This is the
+default setting.
+.IP "\fB\-mcode\-readable=pcrel\fR" 4
+.IX Item "-mcode-readable=pcrel"
+\&\s-1MIPS16\s0 PC-relative load instructions can access executable sections,
+but other instructions must not do so.  This option is useful on 4KSc
+and 4KSd processors when the code TLBs have the Read Inhibit bit set.
+It is also useful on processors that can be configured to have a dual
+instruction/data \s-1SRAM\s0 interface and that, like the M4K, automatically
+redirect PC-relative loads to the instruction \s-1RAM.\s0
+.IP "\fB\-mcode\-readable=no\fR" 4
+.IX Item "-mcode-readable=no"
+Instructions must not access executable sections.  This option can be
+useful on targets that are configured to have a dual instruction/data
+\&\s-1SRAM\s0 interface but that (unlike the M4K) do not automatically redirect
+PC-relative loads to the instruction \s-1RAM.\s0
+.RE
+.RS 4
+.RE
+.IP "\fB\-msplit\-addresses\fR" 4
+.IX Item "-msplit-addresses"
+.PD 0
+.IP "\fB\-mno\-split\-addresses\fR" 4
+.IX Item "-mno-split-addresses"
+.PD
+Enable (disable) use of the \f(CW\*(C`%hi()\*(C'\fR and \f(CW\*(C`%lo()\*(C'\fR assembler
+relocation operators.  This option has been superseded by
+\&\fB\-mexplicit\-relocs\fR but is retained for backwards compatibility.
+.IP "\fB\-mexplicit\-relocs\fR" 4
+.IX Item "-mexplicit-relocs"
+.PD 0
+.IP "\fB\-mno\-explicit\-relocs\fR" 4
+.IX Item "-mno-explicit-relocs"
+.PD
+Use (do not use) assembler relocation operators when dealing with symbolic
+addresses.  The alternative, selected by \fB\-mno\-explicit\-relocs\fR,
+is to use assembler macros instead.
+.Sp
+\&\fB\-mexplicit\-relocs\fR is the default if \s-1GCC\s0 was configured
+to use an assembler that supports relocation operators.
+.IP "\fB\-mcheck\-zero\-division\fR" 4
+.IX Item "-mcheck-zero-division"
+.PD 0
+.IP "\fB\-mno\-check\-zero\-division\fR" 4
+.IX Item "-mno-check-zero-division"
+.PD
+Trap (do not trap) on integer division by zero.
+.Sp
+The default is \fB\-mcheck\-zero\-division\fR.
+.IP "\fB\-mdivide\-traps\fR" 4
+.IX Item "-mdivide-traps"
+.PD 0
+.IP "\fB\-mdivide\-breaks\fR" 4
+.IX Item "-mdivide-breaks"
+.PD
+\&\s-1MIPS\s0 systems check for division by zero by generating either a
+conditional trap or a break instruction.  Using traps results in
+smaller code, but is only supported on \s-1MIPS II\s0 and later.  Also, some
+versions of the Linux kernel have a bug that prevents trap from
+generating the proper signal (\f(CW\*(C`SIGFPE\*(C'\fR).  Use \fB\-mdivide\-traps\fR to
+allow conditional traps on architectures that support them and
+\&\fB\-mdivide\-breaks\fR to force the use of breaks.
+.Sp
+The default is usually \fB\-mdivide\-traps\fR, but this can be
+overridden at configure time using \fB\-\-with\-divide=breaks\fR.
+Divide-by-zero checks can be completely disabled using
+\&\fB\-mno\-check\-zero\-division\fR.
+.IP "\fB\-mload\-store\-pairs\fR" 4
+.IX Item "-mload-store-pairs"
+.PD 0
+.IP "\fB\-mno\-load\-store\-pairs\fR" 4
+.IX Item "-mno-load-store-pairs"
+.PD
+Enable (disable) an optimization that pairs consecutive load or store
+instructions to enable load/store bonding.  This option is enabled by
+default but only takes effect when the selected architecture is known
+to support bonding.
+.IP "\fB\-mmemcpy\fR" 4
+.IX Item "-mmemcpy"
+.PD 0
+.IP "\fB\-mno\-memcpy\fR" 4
+.IX Item "-mno-memcpy"
+.PD
+Force (do not force) the use of \f(CW\*(C`memcpy\*(C'\fR for non-trivial block
+moves.  The default is \fB\-mno\-memcpy\fR, which allows \s-1GCC\s0 to inline
+most constant-sized copies.
+.IP "\fB\-mlong\-calls\fR" 4
+.IX Item "-mlong-calls"
+.PD 0
+.IP "\fB\-mno\-long\-calls\fR" 4
+.IX Item "-mno-long-calls"
+.PD
+Disable (do not disable) use of the \f(CW\*(C`jal\*(C'\fR instruction.  Calling
+functions using \f(CW\*(C`jal\*(C'\fR is more efficient but requires the caller
+and callee to be in the same 256 megabyte segment.
+.Sp
+This option has no effect on abicalls code.  The default is
+\&\fB\-mno\-long\-calls\fR.
+.IP "\fB\-mmad\fR" 4
+.IX Item "-mmad"
+.PD 0
+.IP "\fB\-mno\-mad\fR" 4
+.IX Item "-mno-mad"
+.PD
+Enable (disable) use of the \f(CW\*(C`mad\*(C'\fR, \f(CW\*(C`madu\*(C'\fR and \f(CW\*(C`mul\*(C'\fR
+instructions, as provided by the R4650 \s-1ISA.\s0
+.IP "\fB\-mimadd\fR" 4
+.IX Item "-mimadd"
+.PD 0
+.IP "\fB\-mno\-imadd\fR" 4
+.IX Item "-mno-imadd"
+.PD
+Enable (disable) use of the \f(CW\*(C`madd\*(C'\fR and \f(CW\*(C`msub\*(C'\fR integer
+instructions.  The default is \fB\-mimadd\fR on architectures
+that support \f(CW\*(C`madd\*(C'\fR and \f(CW\*(C`msub\*(C'\fR except for the 74k 
+architecture where it was found to generate slower code.
+.IP "\fB\-mfused\-madd\fR" 4
+.IX Item "-mfused-madd"
+.PD 0
+.IP "\fB\-mno\-fused\-madd\fR" 4
+.IX Item "-mno-fused-madd"
+.PD
+Enable (disable) use of the floating-point multiply-accumulate
+instructions, when they are available.  The default is
+\&\fB\-mfused\-madd\fR.
+.Sp
+On the R8000 \s-1CPU\s0 when multiply-accumulate instructions are used,
+the intermediate product is calculated to infinite precision
+and is not subject to the \s-1FCSR\s0 Flush to Zero bit.  This may be
+undesirable in some circumstances.  On other processors the result
+is numerically identical to the equivalent computation using
+separate multiply, add, subtract and negate instructions.
+.IP "\fB\-nocpp\fR" 4
+.IX Item "-nocpp"
+Tell the \s-1MIPS\s0 assembler to not run its preprocessor over user
+assembler files (with a \fB.s\fR suffix) when assembling them.
+.IP "\fB\-mfix\-24k\fR" 4
+.IX Item "-mfix-24k"
+.PD 0
+.IP "\fB\-mno\-fix\-24k\fR" 4
+.IX Item "-mno-fix-24k"
+.PD
+Work around the 24K E48 (lost data on stores during refill) errata.
+The workarounds are implemented by the assembler rather than by \s-1GCC.\s0
+.IP "\fB\-mfix\-r4000\fR" 4
+.IX Item "-mfix-r4000"
+.PD 0
+.IP "\fB\-mno\-fix\-r4000\fR" 4
+.IX Item "-mno-fix-r4000"
+.PD
+Work around certain R4000 \s-1CPU\s0 errata:
+.RS 4
+.IP "\-" 4
+A double-word or a variable shift may give an incorrect result if executed
+immediately after starting an integer division.
+.IP "\-" 4
+A double-word or a variable shift may give an incorrect result if executed
+while an integer multiplication is in progress.
+.IP "\-" 4
+An integer division may give an incorrect result if started in a delay slot
+of a taken branch or a jump.
+.RE
+.RS 4
+.RE
+.IP "\fB\-mfix\-r4400\fR" 4
+.IX Item "-mfix-r4400"
+.PD 0
+.IP "\fB\-mno\-fix\-r4400\fR" 4
+.IX Item "-mno-fix-r4400"
+.PD
+Work around certain R4400 \s-1CPU\s0 errata:
+.RS 4
+.IP "\-" 4
+A double-word or a variable shift may give an incorrect result if executed
+immediately after starting an integer division.
+.RE
+.RS 4
+.RE
+.IP "\fB\-mfix\-r10000\fR" 4
+.IX Item "-mfix-r10000"
+.PD 0
+.IP "\fB\-mno\-fix\-r10000\fR" 4
+.IX Item "-mno-fix-r10000"
+.PD
+Work around certain R10000 errata:
+.RS 4
+.IP "\-" 4
+\&\f(CW\*(C`ll\*(C'\fR/\f(CW\*(C`sc\*(C'\fR sequences may not behave atomically on revisions
+prior to 3.0.  They may deadlock on revisions 2.6 and earlier.
+.RE
+.RS 4
+.Sp
+This option can only be used if the target architecture supports
+branch-likely instructions.  \fB\-mfix\-r10000\fR is the default when
+\&\fB\-march=r10000\fR is used; \fB\-mno\-fix\-r10000\fR is the default
+otherwise.
+.RE
+.IP "\fB\-mfix\-r5900\fR" 4
+.IX Item "-mfix-r5900"
+.PD 0
+.IP "\fB\-mno\-fix\-r5900\fR" 4
+.IX Item "-mno-fix-r5900"
+.PD
+Do not attempt to schedule the preceding instruction into the delay slot
+of a branch instruction placed at the end of a short loop of six
+instructions or fewer and always schedule a \f(CW\*(C`nop\*(C'\fR instruction there
+instead.  The short loop bug under certain conditions causes loops to
+execute only once or twice, due to a hardware bug in the R5900 chip.  The
+workaround is implemented by the assembler rather than by \s-1GCC.\s0
+.IP "\fB\-mfix\-rm7000\fR" 4
+.IX Item "-mfix-rm7000"
+.PD 0
+.IP "\fB\-mno\-fix\-rm7000\fR" 4
+.IX Item "-mno-fix-rm7000"
+.PD
+Work around the \s-1RM7000\s0 \f(CW\*(C`dmult\*(C'\fR/\f(CW\*(C`dmultu\*(C'\fR errata.  The
+workarounds are implemented by the assembler rather than by \s-1GCC.\s0
+.IP "\fB\-mfix\-vr4120\fR" 4
+.IX Item "-mfix-vr4120"
+.PD 0
+.IP "\fB\-mno\-fix\-vr4120\fR" 4
+.IX Item "-mno-fix-vr4120"
+.PD
+Work around certain \s-1VR4120\s0 errata:
+.RS 4
+.IP "\-" 4
+\&\f(CW\*(C`dmultu\*(C'\fR does not always produce the correct result.
+.IP "\-" 4
+\&\f(CW\*(C`div\*(C'\fR and \f(CW\*(C`ddiv\*(C'\fR do not always produce the correct result if one
+of the operands is negative.
+.RE
+.RS 4
+.Sp
+The workarounds for the division errata rely on special functions in
+\&\fIlibgcc.a\fR.  At present, these functions are only provided by
+the \f(CW\*(C`mips64vr*\-elf\*(C'\fR configurations.
+.Sp
+Other \s-1VR4120\s0 errata require a \s-1NOP\s0 to be inserted between certain pairs of
+instructions.  These errata are handled by the assembler, not by \s-1GCC\s0 itself.
+.RE
+.IP "\fB\-mfix\-vr4130\fR" 4
+.IX Item "-mfix-vr4130"
+Work around the \s-1VR4130\s0 \f(CW\*(C`mflo\*(C'\fR/\f(CW\*(C`mfhi\*(C'\fR errata.  The
+workarounds are implemented by the assembler rather than by \s-1GCC,\s0
+although \s-1GCC\s0 avoids using \f(CW\*(C`mflo\*(C'\fR and \f(CW\*(C`mfhi\*(C'\fR if the
+\&\s-1VR4130\s0 \f(CW\*(C`macc\*(C'\fR, \f(CW\*(C`macchi\*(C'\fR, \f(CW\*(C`dmacc\*(C'\fR and \f(CW\*(C`dmacchi\*(C'\fR
+instructions are available instead.
+.IP "\fB\-mfix\-sb1\fR" 4
+.IX Item "-mfix-sb1"
+.PD 0
+.IP "\fB\-mno\-fix\-sb1\fR" 4
+.IX Item "-mno-fix-sb1"
+.PD
+Work around certain \s-1SB\-1 CPU\s0 core errata.
+(This flag currently works around the \s-1SB\-1\s0 revision 2
+\&\*(L"F1\*(R" and \*(L"F2\*(R" floating-point errata.)
+.IP "\fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR" 4
+.IX Item "-mr10k-cache-barrier=setting"
+Specify whether \s-1GCC\s0 should insert cache barriers to avoid the
+side effects of speculation on R10K processors.
+.Sp
+In common with many processors, the R10K tries to predict the outcome
+of a conditional branch and speculatively executes instructions from
+the \*(L"taken\*(R" branch.  It later aborts these instructions if the
+predicted outcome is wrong.  However, on the R10K, even aborted
+instructions can have side effects.
+.Sp
+This problem only affects kernel stores and, depending on the system,
+kernel loads.  As an example, a speculatively-executed store may load
+the target memory into cache and mark the cache line as dirty, even if
+the store itself is later aborted.  If a \s-1DMA\s0 operation writes to the
+same area of memory before the \*(L"dirty\*(R" line is flushed, the cached
+data overwrites the DMA-ed data.  See the R10K processor manual
+for a full description, including other potential problems.
+.Sp
+One workaround is to insert cache barrier instructions before every memory
+access that might be speculatively executed and that might have side
+effects even if aborted.  \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR
+controls \s-1GCC\s0's implementation of this workaround.  It assumes that
+aborted accesses to any byte in the following regions does not have
+side effects:
+.RS 4
+.IP "1." 4
+.IX Item "1."
+the memory occupied by the current function's stack frame;
+.IP "2." 4
+.IX Item "2."
+the memory occupied by an incoming stack argument;
+.IP "3." 4
+.IX Item "3."
+the memory occupied by an object with a link-time-constant address.
+.RE
+.RS 4
+.Sp
+It is the kernel's responsibility to ensure that speculative
+accesses to these regions are indeed safe.
+.Sp
+If the input program contains a function declaration such as:
+.Sp
+.Vb 1
+\&        void foo (void);
+.Ve
+.Sp
+then the implementation of \f(CW\*(C`foo\*(C'\fR must allow \f(CW\*(C`j foo\*(C'\fR and
+\&\f(CW\*(C`jal foo\*(C'\fR to be executed speculatively.  \s-1GCC\s0 honors this
+restriction for functions it compiles itself.  It expects non-GCC
+functions (such as hand-written assembly code) to do the same.
+.Sp
+The option has three forms:
+.IP "\fB\-mr10k\-cache\-barrier=load\-store\fR" 4
+.IX Item "-mr10k-cache-barrier=load-store"
+Insert a cache barrier before a load or store that might be
+speculatively executed and that might have side effects even
+if aborted.
+.IP "\fB\-mr10k\-cache\-barrier=store\fR" 4
+.IX Item "-mr10k-cache-barrier=store"
+Insert a cache barrier before a store that might be speculatively
+executed and that might have side effects even if aborted.
+.IP "\fB\-mr10k\-cache\-barrier=none\fR" 4
+.IX Item "-mr10k-cache-barrier=none"
+Disable the insertion of cache barriers.  This is the default setting.
+.RE
+.RS 4
+.RE
+.IP "\fB\-mflush\-func=\fR\fIfunc\fR" 4
+.IX Item "-mflush-func=func"
+.PD 0
+.IP "\fB\-mno\-flush\-func\fR" 4
+.IX Item "-mno-flush-func"
+.PD
+Specifies the function to call to flush the I and D caches, or to not
+call any such function.  If called, the function must take the same
+arguments as the common \f(CW\*(C`_flush_func\*(C'\fR, that is, the address of the
+memory range for which the cache is being flushed, the size of the
+memory range, and the number 3 (to flush both caches).  The default
+depends on the target \s-1GCC\s0 was configured for, but commonly is either
+\&\f(CW\*(C`_flush_func\*(C'\fR or \f(CW\*(C`_\|_cpu_flush\*(C'\fR.
+.IP "\fBmbranch\-cost=\fR\fInum\fR" 4
+.IX Item "mbranch-cost=num"
+Set the cost of branches to roughly \fInum\fR \*(L"simple\*(R" instructions.
+This cost is only a heuristic and is not guaranteed to produce
+consistent results across releases.  A zero cost redundantly selects
+the default, which is based on the \fB\-mtune\fR setting.
+.IP "\fB\-mbranch\-likely\fR" 4
+.IX Item "-mbranch-likely"
+.PD 0
+.IP "\fB\-mno\-branch\-likely\fR" 4
+.IX Item "-mno-branch-likely"
+.PD
+Enable or disable use of Branch Likely instructions, regardless of the
+default for the selected architecture.  By default, Branch Likely
+instructions may be generated if they are supported by the selected
+architecture.  An exception is for the \s-1MIPS32\s0 and \s-1MIPS64\s0 architectures
+and processors that implement those architectures; for those, Branch
+Likely instructions are not be generated by default because the \s-1MIPS32\s0
+and \s-1MIPS64\s0 architectures specifically deprecate their use.
+.IP "\fB\-mcompact\-branches=never\fR" 4
+.IX Item "-mcompact-branches=never"
+.PD 0
+.IP "\fB\-mcompact\-branches=optimal\fR" 4
+.IX Item "-mcompact-branches=optimal"
+.IP "\fB\-mcompact\-branches=always\fR" 4
+.IX Item "-mcompact-branches=always"
+.PD
+These options control which form of branches will be generated.  The
+default is \fB\-mcompact\-branches=optimal\fR.
+.Sp
+The \fB\-mcompact\-branches=never\fR option ensures that compact branch
+instructions will never be generated.
+.Sp
+The \fB\-mcompact\-branches=always\fR option ensures that a compact
+branch instruction will be generated if available.  If a compact branch
+instruction is not available, a delay slot form of the branch will be
+used instead.
+.Sp
+This option is supported from \s-1MIPS\s0 Release 6 onwards.
+.Sp
+The \fB\-mcompact\-branches=optimal\fR option will cause a delay slot
+branch to be used if one is available in the current \s-1ISA\s0 and the delay
+slot is successfully filled.  If the delay slot is not filled, a compact
+branch will be chosen if one is available.
+.IP "\fB\-mfp\-exceptions\fR" 4
+.IX Item "-mfp-exceptions"
+.PD 0
+.IP "\fB\-mno\-fp\-exceptions\fR" 4
+.IX Item "-mno-fp-exceptions"
+.PD
+Specifies whether \s-1FP\s0 exceptions are enabled.  This affects how
+\&\s-1FP\s0 instructions are scheduled for some processors.
+The default is that \s-1FP\s0 exceptions are
+enabled.
+.Sp
+For instance, on the \s-1SB\-1,\s0 if \s-1FP\s0 exceptions are disabled, and we are emitting
+64\-bit code, then we can use both \s-1FP\s0 pipes.  Otherwise, we can only use one
+\&\s-1FP\s0 pipe.
+.IP "\fB\-mvr4130\-align\fR" 4
+.IX Item "-mvr4130-align"
+.PD 0
+.IP "\fB\-mno\-vr4130\-align\fR" 4
+.IX Item "-mno-vr4130-align"
+.PD
+The \s-1VR4130\s0 pipeline is two-way superscalar, but can only issue two
+instructions together if the first one is 8\-byte aligned.  When this
+option is enabled, \s-1GCC\s0 aligns pairs of instructions that it
+thinks should execute in parallel.
+.Sp
+This option only has an effect when optimizing for the \s-1VR4130.\s0
+It normally makes code faster, but at the expense of making it bigger.
+It is enabled by default at optimization level \fB\-O3\fR.
+.IP "\fB\-msynci\fR" 4
+.IX Item "-msynci"
+.PD 0
+.IP "\fB\-mno\-synci\fR" 4
+.IX Item "-mno-synci"
+.PD
+Enable (disable) generation of \f(CW\*(C`synci\*(C'\fR instructions on
+architectures that support it.  The \f(CW\*(C`synci\*(C'\fR instructions (if
+enabled) are generated when \f(CW\*(C`_\|_builtin_\|_\|_clear_cache\*(C'\fR is
+compiled.
+.Sp
+This option defaults to \fB\-mno\-synci\fR, but the default can be
+overridden by configuring \s-1GCC\s0 with \fB\-\-with\-synci\fR.
+.Sp
+When compiling code for single processor systems, it is generally safe
+to use \f(CW\*(C`synci\*(C'\fR.  However, on many multi-core (\s-1SMP\s0) systems, it
+does not invalidate the instruction caches on all cores and may lead
+to undefined behavior.
+.IP "\fB\-mrelax\-pic\-calls\fR" 4
+.IX Item "-mrelax-pic-calls"
+.PD 0
+.IP "\fB\-mno\-relax\-pic\-calls\fR" 4
+.IX Item "-mno-relax-pic-calls"
+.PD
+Try to turn \s-1PIC\s0 calls that are normally dispatched via register
+\&\f(CW$25\fR into direct calls.  This is only possible if the linker can
+resolve the destination at link time and if the destination is within
+range for a direct call.
+.Sp
+\&\fB\-mrelax\-pic\-calls\fR is the default if \s-1GCC\s0 was configured to use
+an assembler and a linker that support the \f(CW\*(C`.reloc\*(C'\fR assembly
+directive and \fB\-mexplicit\-relocs\fR is in effect.  With
+\&\fB\-mno\-explicit\-relocs\fR, this optimization can be performed by the
+assembler and the linker alone without help from the compiler.
+.IP "\fB\-mmcount\-ra\-address\fR" 4
+.IX Item "-mmcount-ra-address"
+.PD 0
+.IP "\fB\-mno\-mcount\-ra\-address\fR" 4
+.IX Item "-mno-mcount-ra-address"
+.PD
+Emit (do not emit) code that allows \f(CW\*(C`_mcount\*(C'\fR to modify the
+calling function's return address.  When enabled, this option extends
+the usual \f(CW\*(C`_mcount\*(C'\fR interface with a new \fIra-address\fR
+parameter, which has type \f(CW\*(C`intptr_t *\*(C'\fR and is passed in register
+\&\f(CW$12\fR.  \f(CW\*(C`_mcount\*(C'\fR can then modify the return address by
+doing both of the following:
+.RS 4
+.IP "*" 4
+Returning the new address in register \f(CW$31\fR.
+.IP "*" 4
+Storing the new address in \f(CW\*(C`*\f(CIra\-address\f(CW\*(C'\fR,
+if \fIra-address\fR is nonnull.
+.RE
+.RS 4
+.Sp
+The default is \fB\-mno\-mcount\-ra\-address\fR.
+.RE
+.IP "\fB\-mframe\-header\-opt\fR" 4
+.IX Item "-mframe-header-opt"
+.PD 0
+.IP "\fB\-mno\-frame\-header\-opt\fR" 4
+.IX Item "-mno-frame-header-opt"
+.PD
+Enable (disable) frame header optimization in the o32 \s-1ABI.\s0  When using the
+o32 \s-1ABI,\s0 calling functions will allocate 16 bytes on the stack for the called
+function to write out register arguments.  When enabled, this optimization
+will suppress the allocation of the frame header if it can be determined that
+it is unused.
+.Sp
+This optimization is off by default at all optimization levels.
+.IP "\fB\-mlxc1\-sxc1\fR" 4
+.IX Item "-mlxc1-sxc1"
+.PD 0
+.IP "\fB\-mno\-lxc1\-sxc1\fR" 4
+.IX Item "-mno-lxc1-sxc1"
+.PD
+When applicable, enable (disable) the generation of \f(CW\*(C`lwxc1\*(C'\fR,
+\&\f(CW\*(C`swxc1\*(C'\fR, \f(CW\*(C`ldxc1\*(C'\fR, \f(CW\*(C`sdxc1\*(C'\fR instructions.  Enabled by default.
+.IP "\fB\-mmadd4\fR" 4
+.IX Item "-mmadd4"
+.PD 0
+.IP "\fB\-mno\-madd4\fR" 4
+.IX Item "-mno-madd4"
+.PD
+When applicable, enable (disable) the generation of 4\-operand \f(CW\*(C`madd.s\*(C'\fR,
+\&\f(CW\*(C`madd.d\*(C'\fR and related instructions.  Enabled by default.
+.PP
+\fI\s-1MMIX\s0 Options\fR
+.IX Subsection "MMIX Options"
+.PP
+These options are defined for the \s-1MMIX:\s0
+.IP "\fB\-mlibfuncs\fR" 4
+.IX Item "-mlibfuncs"
+.PD 0
+.IP "\fB\-mno\-libfuncs\fR" 4
+.IX Item "-mno-libfuncs"
+.PD
+Specify that intrinsic library functions are being compiled, passing all
+values in registers, no matter the size.
+.IP "\fB\-mepsilon\fR" 4
+.IX Item "-mepsilon"
+.PD 0
+.IP "\fB\-mno\-epsilon\fR" 4
+.IX Item "-mno-epsilon"
+.PD
+Generate floating-point comparison instructions that compare with respect
+to the \f(CW\*(C`rE\*(C'\fR epsilon register.
+.IP "\fB\-mabi=mmixware\fR" 4
+.IX Item "-mabi=mmixware"
+.PD 0
+.IP "\fB\-mabi=gnu\fR" 4
+.IX Item "-mabi=gnu"
+.PD
+Generate code that passes function parameters and return values that (in
+the called function) are seen as registers \f(CW$0\fR and up, as opposed to
+the \s-1GNU ABI\s0 which uses global registers \f(CW$231\fR and up.
+.IP "\fB\-mzero\-extend\fR" 4
+.IX Item "-mzero-extend"
+.PD 0
+.IP "\fB\-mno\-zero\-extend\fR" 4
+.IX Item "-mno-zero-extend"
+.PD
+When reading data from memory in sizes shorter than 64 bits, use (do not
+use) zero-extending load instructions by default, rather than
+sign-extending ones.
+.IP "\fB\-mknuthdiv\fR" 4
+.IX Item "-mknuthdiv"
+.PD 0
+.IP "\fB\-mno\-knuthdiv\fR" 4
+.IX Item "-mno-knuthdiv"
+.PD
+Make the result of a division yielding a remainder have the same sign as
+the divisor.  With the default, \fB\-mno\-knuthdiv\fR, the sign of the
+remainder follows the sign of the dividend.  Both methods are
+arithmetically valid, the latter being almost exclusively used.
+.IP "\fB\-mtoplevel\-symbols\fR" 4
+.IX Item "-mtoplevel-symbols"
+.PD 0
+.IP "\fB\-mno\-toplevel\-symbols\fR" 4
+.IX Item "-mno-toplevel-symbols"
+.PD
+Prepend (do not prepend) a \fB:\fR to all global symbols, so the assembly
+code can be used with the \f(CW\*(C`PREFIX\*(C'\fR assembly directive.
+.IP "\fB\-melf\fR" 4
+.IX Item "-melf"
+Generate an executable in the \s-1ELF\s0 format, rather than the default
+\&\fBmmo\fR format used by the \fBmmix\fR simulator.
+.IP "\fB\-mbranch\-predict\fR" 4
+.IX Item "-mbranch-predict"
+.PD 0
+.IP "\fB\-mno\-branch\-predict\fR" 4
+.IX Item "-mno-branch-predict"
+.PD
+Use (do not use) the probable-branch instructions, when static branch
+prediction indicates a probable branch.
+.IP "\fB\-mbase\-addresses\fR" 4
+.IX Item "-mbase-addresses"
+.PD 0
+.IP "\fB\-mno\-base\-addresses\fR" 4
+.IX Item "-mno-base-addresses"
+.PD
+Generate (do not generate) code that uses \fIbase addresses\fR.  Using a
+base address automatically generates a request (handled by the assembler
+and the linker) for a constant to be set up in a global register.  The
+register is used for one or more base address requests within the range 0
+to 255 from the value held in the register.  The generally leads to short
+and fast code, but the number of different data items that can be
+addressed is limited.  This means that a program that uses lots of static
+data may require \fB\-mno\-base\-addresses\fR.
+.IP "\fB\-msingle\-exit\fR" 4
+.IX Item "-msingle-exit"
+.PD 0
+.IP "\fB\-mno\-single\-exit\fR" 4
+.IX Item "-mno-single-exit"
+.PD
+Force (do not force) generated code to have a single exit point in each
+function.
+.PP
+\fI\s-1MN10300\s0 Options\fR
+.IX Subsection "MN10300 Options"
+.PP
+These \fB\-m\fR options are defined for Matsushita \s-1MN10300\s0 architectures:
+.IP "\fB\-mmult\-bug\fR" 4
+.IX Item "-mmult-bug"
+Generate code to avoid bugs in the multiply instructions for the \s-1MN10300\s0
+processors.  This is the default.
+.IP "\fB\-mno\-mult\-bug\fR" 4
+.IX Item "-mno-mult-bug"
+Do not generate code to avoid bugs in the multiply instructions for the
+\&\s-1MN10300\s0 processors.
+.IP "\fB\-mam33\fR" 4
+.IX Item "-mam33"
+Generate code using features specific to the \s-1AM33\s0 processor.
+.IP "\fB\-mno\-am33\fR" 4
+.IX Item "-mno-am33"
+Do not generate code using features specific to the \s-1AM33\s0 processor.  This
+is the default.
+.IP "\fB\-mam33\-2\fR" 4
+.IX Item "-mam33-2"
+Generate code using features specific to the \s-1AM33/2.0\s0 processor.
+.IP "\fB\-mam34\fR" 4
+.IX Item "-mam34"
+Generate code using features specific to the \s-1AM34\s0 processor.
+.IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
+.IX Item "-mtune=cpu-type"
+Use the timing characteristics of the indicated \s-1CPU\s0 type when
+scheduling instructions.  This does not change the targeted processor
+type.  The \s-1CPU\s0 type must be one of \fBmn10300\fR, \fBam33\fR,
+\&\fBam33\-2\fR or \fBam34\fR.
+.IP "\fB\-mreturn\-pointer\-on\-d0\fR" 4
+.IX Item "-mreturn-pointer-on-d0"
+When generating a function that returns a pointer, return the pointer
+in both \f(CW\*(C`a0\*(C'\fR and \f(CW\*(C`d0\*(C'\fR.  Otherwise, the pointer is returned
+only in \f(CW\*(C`a0\*(C'\fR, and attempts to call such functions without a prototype
+result in errors.  Note that this option is on by default; use
+\&\fB\-mno\-return\-pointer\-on\-d0\fR to disable it.
+.IP "\fB\-mno\-crt0\fR" 4
+.IX Item "-mno-crt0"
+Do not link in the C run-time initialization object file.
+.IP "\fB\-mrelax\fR" 4
+.IX Item "-mrelax"
+Indicate to the linker that it should perform a relaxation optimization pass
+to shorten branches, calls and absolute memory addresses.  This option only
+has an effect when used on the command line for the final link step.
+.Sp
+This option makes symbolic debugging impossible.
+.IP "\fB\-mliw\fR" 4
+.IX Item "-mliw"
+Allow the compiler to generate \fILong Instruction Word\fR
+instructions if the target is the \fB\s-1AM33\s0\fR or later.  This is the
+default.  This option defines the preprocessor macro \f(CW\*(C`_\|_LIW_\|_\*(C'\fR.
+.IP "\fB\-mno\-liw\fR" 4
+.IX Item "-mno-liw"
+Do not allow the compiler to generate \fILong Instruction Word\fR
+instructions.  This option defines the preprocessor macro
+\&\f(CW\*(C`_\|_NO_LIW_\|_\*(C'\fR.
+.IP "\fB\-msetlb\fR" 4
+.IX Item "-msetlb"
+Allow the compiler to generate the \fI\s-1SETLB\s0\fR and \fILcc\fR
+instructions if the target is the \fB\s-1AM33\s0\fR or later.  This is the
+default.  This option defines the preprocessor macro \f(CW\*(C`_\|_SETLB_\|_\*(C'\fR.
+.IP "\fB\-mno\-setlb\fR" 4
+.IX Item "-mno-setlb"
+Do not allow the compiler to generate \fI\s-1SETLB\s0\fR or \fILcc\fR
+instructions.  This option defines the preprocessor macro
+\&\f(CW\*(C`_\|_NO_SETLB_\|_\*(C'\fR.
+.PP
+\fIMoxie Options\fR
+.IX Subsection "Moxie Options"
+.IP "\fB\-meb\fR" 4
+.IX Item "-meb"
+Generate big-endian code.  This is the default for \fBmoxie\-*\-*\fR
+configurations.
+.IP "\fB\-mel\fR" 4
+.IX Item "-mel"
+Generate little-endian code.
+.IP "\fB\-mmul.x\fR" 4
+.IX Item "-mmul.x"
+Generate mul.x and umul.x instructions.  This is the default for
+\&\fBmoxiebox\-*\-*\fR configurations.
+.IP "\fB\-mno\-crt0\fR" 4
+.IX Item "-mno-crt0"
+Do not link in the C run-time initialization object file.
+.PP
+\fI\s-1MSP430\s0 Options\fR
+.IX Subsection "MSP430 Options"
+.PP
+These options are defined for the \s-1MSP430:\s0
+.IP "\fB\-masm\-hex\fR" 4
+.IX Item "-masm-hex"
+Force assembly output to always use hex constants.  Normally such
+constants are signed decimals, but this option is available for
+testsuite and/or aesthetic purposes.
+.IP "\fB\-mmcu=\fR" 4
+.IX Item "-mmcu="
+Select the \s-1MCU\s0 to target.  This is used to create a C preprocessor
+symbol based upon the \s-1MCU\s0 name, converted to upper case and pre\- and
+post-fixed with \fB_\|_\fR.  This in turn is used by the
+\&\fImsp430.h\fR header file to select an MCU-specific supplementary
+header file.
+.Sp
+The option also sets the \s-1ISA\s0 to use.  If the \s-1MCU\s0 name is one that is
+known to only support the 430 \s-1ISA\s0 then that is selected, otherwise the
+430X \s-1ISA\s0 is selected.  A generic \s-1MCU\s0 name of \fBmsp430\fR can also be
+used to select the 430 \s-1ISA.\s0  Similarly the generic \fBmsp430x\fR \s-1MCU\s0
+name selects the 430X \s-1ISA.\s0
+.Sp
+In addition an MCU-specific linker script is added to the linker
+command line.  The script's name is the name of the \s-1MCU\s0 with
+\&\fI.ld\fR appended.  Thus specifying \fB\-mmcu=xxx\fR on the \fBgcc\fR
+command line defines the C preprocessor symbol \f(CW\*(C`_\|_XXX_\|_\*(C'\fR and
+cause the linker to search for a script called \fIxxx.ld\fR.
+.Sp
+This option is also passed on to the assembler.
+.IP "\fB\-mwarn\-mcu\fR" 4
+.IX Item "-mwarn-mcu"
+.PD 0
+.IP "\fB\-mno\-warn\-mcu\fR" 4
+.IX Item "-mno-warn-mcu"
+.PD
+This option enables or disables warnings about conflicts between the
+\&\s-1MCU\s0 name specified by the \fB\-mmcu\fR option and the \s-1ISA\s0 set by the
+\&\fB\-mcpu\fR option and/or the hardware multiply support set by the
+\&\fB\-mhwmult\fR option.  It also toggles warnings about unrecognized
+\&\s-1MCU\s0 names.  This option is on by default.
+.IP "\fB\-mcpu=\fR" 4
+.IX Item "-mcpu="
+Specifies the \s-1ISA\s0 to use.  Accepted values are \fBmsp430\fR,
+\&\fBmsp430x\fR and \fBmsp430xv2\fR.  This option is deprecated.  The
+\&\fB\-mmcu=\fR option should be used to select the \s-1ISA.\s0
+.IP "\fB\-msim\fR" 4
+.IX Item "-msim"
+Link to the simulator runtime libraries and linker script.  Overrides
+any scripts that would be selected by the \fB\-mmcu=\fR option.
+.IP "\fB\-mlarge\fR" 4
+.IX Item "-mlarge"
+Use large-model addressing (20\-bit pointers, 32\-bit \f(CW\*(C`size_t\*(C'\fR).
+.IP "\fB\-msmall\fR" 4
+.IX Item "-msmall"
+Use small-model addressing (16\-bit pointers, 16\-bit \f(CW\*(C`size_t\*(C'\fR).
+.IP "\fB\-mrelax\fR" 4
+.IX Item "-mrelax"
+This option is passed to the assembler and linker, and allows the
+linker to perform certain optimizations that cannot be done until
+the final link.
+.IP "\fBmhwmult=\fR" 4
+.IX Item "mhwmult="
+Describes the type of hardware multiply supported by the target.
+Accepted values are \fBnone\fR for no hardware multiply, \fB16bit\fR
+for the original 16\-bit\-only multiply supported by early MCUs.
+\&\fB32bit\fR for the 16/32\-bit multiply supported by later MCUs and
+\&\fBf5series\fR for the 16/32\-bit multiply supported by F5\-series MCUs.
+A value of \fBauto\fR can also be given.  This tells \s-1GCC\s0 to deduce
+the hardware multiply support based upon the \s-1MCU\s0 name provided by the
+\&\fB\-mmcu\fR option.  If no \fB\-mmcu\fR option is specified or if
+the \s-1MCU\s0 name is not recognized then no hardware multiply support is
+assumed.  \f(CW\*(C`auto\*(C'\fR is the default setting.
+.Sp
+Hardware multiplies are normally performed by calling a library
+routine.  This saves space in the generated code.  When compiling at
+\&\fB\-O3\fR or higher however the hardware multiplier is invoked
+inline.  This makes for bigger, but faster code.
+.Sp
+The hardware multiply routines disable interrupts whilst running and
+restore the previous interrupt state when they finish.  This makes
+them safe to use inside interrupt handlers as well as in normal code.
+.IP "\fB\-minrt\fR" 4
+.IX Item "-minrt"
+Enable the use of a minimum runtime environment \- no static
+initializers or constructors.  This is intended for memory-constrained
+devices.  The compiler includes special symbols in some objects
+that tell the linker and runtime which code fragments are required.
+.IP "\fB\-mcode\-region=\fR" 4
+.IX Item "-mcode-region="
+.PD 0
+.IP "\fB\-mdata\-region=\fR" 4
+.IX Item "-mdata-region="
+.PD
+These options tell the compiler where to place functions and data that
+do not have one of the \f(CW\*(C`lower\*(C'\fR, \f(CW\*(C`upper\*(C'\fR, \f(CW\*(C`either\*(C'\fR or
+\&\f(CW\*(C`section\*(C'\fR attributes.  Possible values are \f(CW\*(C`lower\*(C'\fR,
+\&\f(CW\*(C`upper\*(C'\fR, \f(CW\*(C`either\*(C'\fR or \f(CW\*(C`any\*(C'\fR.  The first three behave
+like the corresponding attribute.  The fourth possible value \-
+\&\f(CW\*(C`any\*(C'\fR \- is the default.  It leaves placement entirely up to the
+linker script and how it assigns the standard sections
+(\f(CW\*(C`.text\*(C'\fR, \f(CW\*(C`.data\*(C'\fR, etc) to the memory regions.
+.IP "\fB\-msilicon\-errata=\fR" 4
+.IX Item "-msilicon-errata="
+This option passes on a request to assembler to enable the fixes for
+the named silicon errata.
+.IP "\fB\-msilicon\-errata\-warn=\fR" 4
+.IX Item "-msilicon-errata-warn="
+This option passes on a request to the assembler to enable warning
+messages when a silicon errata might need to be applied.
+.PP
+\fI\s-1NDS32\s0 Options\fR
+.IX Subsection "NDS32 Options"
+.PP
+These options are defined for \s-1NDS32\s0 implementations:
+.IP "\fB\-mbig\-endian\fR" 4
+.IX Item "-mbig-endian"
+Generate code in big-endian mode.
+.IP "\fB\-mlittle\-endian\fR" 4
+.IX Item "-mlittle-endian"
+Generate code in little-endian mode.
+.IP "\fB\-mreduced\-regs\fR" 4
+.IX Item "-mreduced-regs"
+Use reduced-set registers for register allocation.
+.IP "\fB\-mfull\-regs\fR" 4
+.IX Item "-mfull-regs"
+Use full-set registers for register allocation.
+.IP "\fB\-mcmov\fR" 4
+.IX Item "-mcmov"
+Generate conditional move instructions.
+.IP "\fB\-mno\-cmov\fR" 4
+.IX Item "-mno-cmov"
+Do not generate conditional move instructions.
+.IP "\fB\-mext\-perf\fR" 4
+.IX Item "-mext-perf"
+Generate performance extension instructions.
+.IP "\fB\-mno\-ext\-perf\fR" 4
+.IX Item "-mno-ext-perf"
+Do not generate performance extension instructions.
+.IP "\fB\-mext\-perf2\fR" 4
+.IX Item "-mext-perf2"
+Generate performance extension 2 instructions.
+.IP "\fB\-mno\-ext\-perf2\fR" 4
+.IX Item "-mno-ext-perf2"
+Do not generate performance extension 2 instructions.
+.IP "\fB\-mext\-string\fR" 4
+.IX Item "-mext-string"
+Generate string extension instructions.
+.IP "\fB\-mno\-ext\-string\fR" 4
+.IX Item "-mno-ext-string"
+Do not generate string extension instructions.
+.IP "\fB\-mv3push\fR" 4
+.IX Item "-mv3push"
+Generate v3 push25/pop25 instructions.
+.IP "\fB\-mno\-v3push\fR" 4
+.IX Item "-mno-v3push"
+Do not generate v3 push25/pop25 instructions.
+.IP "\fB\-m16\-bit\fR" 4
+.IX Item "-m16-bit"
+Generate 16\-bit instructions.
+.IP "\fB\-mno\-16\-bit\fR" 4
+.IX Item "-mno-16-bit"
+Do not generate 16\-bit instructions.
+.IP "\fB\-misr\-vector\-size=\fR\fInum\fR" 4
+.IX Item "-misr-vector-size=num"
+Specify the size of each interrupt vector, which must be 4 or 16.
+.IP "\fB\-mcache\-block\-size=\fR\fInum\fR" 4
+.IX Item "-mcache-block-size=num"
+Specify the size of each cache block,
+which must be a power of 2 between 4 and 512.
+.IP "\fB\-march=\fR\fIarch\fR" 4
+.IX Item "-march=arch"
+Specify the name of the target architecture.
+.IP "\fB\-mcmodel=\fR\fIcode-model\fR" 4
+.IX Item "-mcmodel=code-model"
+Set the code model to one of
+.RS 4
+.IP "\fBsmall\fR" 4
+.IX Item "small"
+All the data and read-only data segments must be within 512KB addressing space.
+The text segment must be within 16MB addressing space.
+.IP "\fBmedium\fR" 4
+.IX Item "medium"
+The data segment must be within 512KB while the read-only data segment can be
+within 4GB addressing space.  The text segment should be still within 16MB
+addressing space.
+.IP "\fBlarge\fR" 4
+.IX Item "large"
+All the text and data segments can be within 4GB addressing space.
+.RE
+.RS 4
+.RE
+.IP "\fB\-mctor\-dtor\fR" 4
+.IX Item "-mctor-dtor"
+Enable constructor/destructor feature.
+.IP "\fB\-mrelax\fR" 4
+.IX Item "-mrelax"
+Guide linker to relax instructions.
+.PP
+\fINios \s-1II\s0 Options\fR
+.IX Subsection "Nios II Options"
+.PP
+These are the options defined for the Altera Nios \s-1II\s0 processor.
+.IP "\fB\-G\fR \fInum\fR" 4
+.IX Item "-G num"
+Put global and static objects less than or equal to \fInum\fR bytes
+into the small data or \s-1BSS\s0 sections instead of the normal data or \s-1BSS\s0
+sections.  The default value of \fInum\fR is 8.
+.IP "\fB\-mgpopt=\fR\fIoption\fR" 4
+.IX Item "-mgpopt=option"
+.PD 0
+.IP "\fB\-mgpopt\fR" 4
+.IX Item "-mgpopt"
+.IP "\fB\-mno\-gpopt\fR" 4
+.IX Item "-mno-gpopt"
+.PD
+Generate (do not generate) GP-relative accesses.  The following 
+\&\fIoption\fR names are recognized:
+.RS 4
+.IP "\fBnone\fR" 4
+.IX Item "none"
+Do not generate GP-relative accesses.
+.IP "\fBlocal\fR" 4
+.IX Item "local"
+Generate GP-relative accesses for small data objects that are not 
+external, weak, or uninitialized common symbols.  
+Also use GP-relative addressing for objects that
+have been explicitly placed in a small data section via a \f(CW\*(C`section\*(C'\fR
+attribute.
+.IP "\fBglobal\fR" 4
+.IX Item "global"
+As for \fBlocal\fR, but also generate GP-relative accesses for
+small data objects that are external, weak, or common.  If you use this option,
+you must ensure that all parts of your program (including libraries) are
+compiled with the same \fB\-G\fR setting.
+.IP "\fBdata\fR" 4
+.IX Item "data"
+Generate GP-relative accesses for all data objects in the program.  If you
+use this option, the entire data and \s-1BSS\s0 segments
+of your program must fit in 64K of memory and you must use an appropriate
+linker script to allocate them within the addressable range of the
+global pointer.
+.IP "\fBall\fR" 4
+.IX Item "all"
+Generate GP-relative addresses for function pointers as well as data
+pointers.  If you use this option, the entire text, data, and \s-1BSS\s0 segments
+of your program must fit in 64K of memory and you must use an appropriate
+linker script to allocate them within the addressable range of the
+global pointer.
+.RE
+.RS 4
+.Sp
+\&\fB\-mgpopt\fR is equivalent to \fB\-mgpopt=local\fR, and
+\&\fB\-mno\-gpopt\fR is equivalent to \fB\-mgpopt=none\fR.
+.Sp
+The default is \fB\-mgpopt\fR except when \fB\-fpic\fR or
+\&\fB\-fPIC\fR is specified to generate position-independent code.
+Note that the Nios \s-1II ABI\s0 does not permit GP-relative accesses from
+shared libraries.
+.Sp
+You may need to specify \fB\-mno\-gpopt\fR explicitly when building
+programs that include large amounts of small data, including large
+\&\s-1GOT\s0 data sections.  In this case, the 16\-bit offset for GP-relative
+addressing may not be large enough to allow access to the entire 
+small data section.
+.RE
+.IP "\fB\-mgprel\-sec=\fR\fIregexp\fR" 4
+.IX Item "-mgprel-sec=regexp"
+This option specifies additional section names that can be accessed via
+GP-relative addressing.  It is most useful in conjunction with 
+\&\f(CW\*(C`section\*(C'\fR attributes on variable declarations and a custom linker script.  
+The \fIregexp\fR is a \s-1POSIX\s0 Extended Regular Expression.
+.Sp
+This option does not affect the behavior of the \fB\-G\fR option, and 
+the specified sections are in addition to the standard \f(CW\*(C`.sdata\*(C'\fR
+and \f(CW\*(C`.sbss\*(C'\fR small-data sections that are recognized by \fB\-mgpopt\fR.
+.IP "\fB\-mr0rel\-sec=\fR\fIregexp\fR" 4
+.IX Item "-mr0rel-sec=regexp"
+This option specifies names of sections that can be accessed via a 
+16\-bit offset from \f(CW\*(C`r0\*(C'\fR; that is, in the low 32K or high 32K 
+of the 32\-bit address space.  It is most useful in conjunction with 
+\&\f(CW\*(C`section\*(C'\fR attributes on variable declarations and a custom linker script.  
+The \fIregexp\fR is a \s-1POSIX\s0 Extended Regular Expression.
+.Sp
+In contrast to the use of GP-relative addressing for small data, 
+zero-based addressing is never generated by default and there are no 
+conventional section names used in standard linker scripts for sections
+in the low or high areas of memory.
+.IP "\fB\-mel\fR" 4
+.IX Item "-mel"
+.PD 0
+.IP "\fB\-meb\fR" 4
+.IX Item "-meb"
+.PD
+Generate little-endian (default) or big-endian (experimental) code,
+respectively.
+.IP "\fB\-march=\fR\fIarch\fR" 4
+.IX Item "-march=arch"
+This specifies the name of the target Nios \s-1II\s0 architecture.  \s-1GCC\s0 uses this
+name to determine what kind of instructions it can emit when generating
+assembly code.  Permissible names are: \fBr1\fR, \fBr2\fR.
+.Sp
+The preprocessor macro \f(CW\*(C`_\|_nios2_arch_\|_\*(C'\fR is available to programs,
+with value 1 or 2, indicating the targeted \s-1ISA\s0 level.
+.IP "\fB\-mbypass\-cache\fR" 4
+.IX Item "-mbypass-cache"
+.PD 0
+.IP "\fB\-mno\-bypass\-cache\fR" 4
+.IX Item "-mno-bypass-cache"
+.PD
+Force all load and store instructions to always bypass cache by 
+using I/O variants of the instructions. The default is not to
+bypass the cache.
+.IP "\fB\-mno\-cache\-volatile\fR" 4
+.IX Item "-mno-cache-volatile"
+.PD 0
+.IP "\fB\-mcache\-volatile\fR" 4
+.IX Item "-mcache-volatile"
+.PD
+Volatile memory access bypass the cache using the I/O variants of 
+the load and store instructions. The default is not to bypass the cache.
+.IP "\fB\-mno\-fast\-sw\-div\fR" 4
+.IX Item "-mno-fast-sw-div"
+.PD 0
+.IP "\fB\-mfast\-sw\-div\fR" 4
+.IX Item "-mfast-sw-div"
+.PD
+Do not use table-based fast divide for small numbers. The default 
+is to use the fast divide at \fB\-O3\fR and above.
+.IP "\fB\-mno\-hw\-mul\fR" 4
+.IX Item "-mno-hw-mul"
+.PD 0
+.IP "\fB\-mhw\-mul\fR" 4
+.IX Item "-mhw-mul"
+.IP "\fB\-mno\-hw\-mulx\fR" 4
+.IX Item "-mno-hw-mulx"
+.IP "\fB\-mhw\-mulx\fR" 4
+.IX Item "-mhw-mulx"
+.IP "\fB\-mno\-hw\-div\fR" 4
+.IX Item "-mno-hw-div"
+.IP "\fB\-mhw\-div\fR" 4
+.IX Item "-mhw-div"
+.PD
+Enable or disable emitting \f(CW\*(C`mul\*(C'\fR, \f(CW\*(C`mulx\*(C'\fR and \f(CW\*(C`div\*(C'\fR family of 
+instructions by the compiler. The default is to emit \f(CW\*(C`mul\*(C'\fR
+and not emit \f(CW\*(C`div\*(C'\fR and \f(CW\*(C`mulx\*(C'\fR.
+.IP "\fB\-mbmx\fR" 4
+.IX Item "-mbmx"
+.PD 0
+.IP "\fB\-mno\-bmx\fR" 4
+.IX Item "-mno-bmx"
+.IP "\fB\-mcdx\fR" 4
+.IX Item "-mcdx"
+.IP "\fB\-mno\-cdx\fR" 4
+.IX Item "-mno-cdx"
+.PD
+Enable or disable generation of Nios \s-1II R2 BMX\s0 (bit manipulation) and
+\&\s-1CDX\s0 (code density) instructions.  Enabling these instructions also
+requires \fB\-march=r2\fR.  Since these instructions are optional
+extensions to the R2 architecture, the default is not to emit them.
+.IP "\fB\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR" 4
+.IX Item "-mcustom-insn=N"
+.PD 0
+.IP "\fB\-mno\-custom\-\fR\fIinsn\fR" 4
+.IX Item "-mno-custom-insn"
+.PD
+Each \fB\-mcustom\-\fR\fIinsn\fR\fB=\fR\fIN\fR option enables use of a
+custom instruction with encoding \fIN\fR when generating code that uses 
+\&\fIinsn\fR.  For example, \fB\-mcustom\-fadds=253\fR generates custom
+instruction 253 for single-precision floating-point add operations instead
+of the default behavior of using a library call.
+.Sp
+The following values of \fIinsn\fR are supported.  Except as otherwise
+noted, floating-point operations are expected to be implemented with
+normal \s-1IEEE 754\s0 semantics and correspond directly to the C operators or the
+equivalent \s-1GCC\s0 built-in functions.
+.Sp
+Single-precision floating point:
+.RS 4
+.IP "\fBfadds\fR, \fBfsubs\fR, \fBfdivs\fR, \fBfmuls\fR" 4
+.IX Item "fadds, fsubs, fdivs, fmuls"
+Binary arithmetic operations.
+.IP "\fBfnegs\fR" 4
+.IX Item "fnegs"
+Unary negation.
+.IP "\fBfabss\fR" 4
+.IX Item "fabss"
+Unary absolute value.
+.IP "\fBfcmpeqs\fR, \fBfcmpges\fR, \fBfcmpgts\fR, \fBfcmples\fR, \fBfcmplts\fR, \fBfcmpnes\fR" 4
+.IX Item "fcmpeqs, fcmpges, fcmpgts, fcmples, fcmplts, fcmpnes"
+Comparison operations.
+.IP "\fBfmins\fR, \fBfmaxs\fR" 4
+.IX Item "fmins, fmaxs"
+Floating-point minimum and maximum.  These instructions are only
+generated if \fB\-ffinite\-math\-only\fR is specified.
+.IP "\fBfsqrts\fR" 4
+.IX Item "fsqrts"
+Unary square root operation.
+.IP "\fBfcoss\fR, \fBfsins\fR, \fBftans\fR, \fBfatans\fR, \fBfexps\fR, \fBflogs\fR" 4
+.IX Item "fcoss, fsins, ftans, fatans, fexps, flogs"
+Floating-point trigonometric and exponential functions.  These instructions
+are only generated if \fB\-funsafe\-math\-optimizations\fR is also specified.
+.RE
+.RS 4
+.Sp
+Double-precision floating point:
+.IP "\fBfaddd\fR, \fBfsubd\fR, \fBfdivd\fR, \fBfmuld\fR" 4
+.IX Item "faddd, fsubd, fdivd, fmuld"
+Binary arithmetic operations.
+.IP "\fBfnegd\fR" 4
+.IX Item "fnegd"
+Unary negation.
+.IP "\fBfabsd\fR" 4
+.IX Item "fabsd"
+Unary absolute value.
+.IP "\fBfcmpeqd\fR, \fBfcmpged\fR, \fBfcmpgtd\fR, \fBfcmpled\fR, \fBfcmpltd\fR, \fBfcmpned\fR" 4
+.IX Item "fcmpeqd, fcmpged, fcmpgtd, fcmpled, fcmpltd, fcmpned"
+Comparison operations.
+.IP "\fBfmind\fR, \fBfmaxd\fR" 4
+.IX Item "fmind, fmaxd"
+Double-precision minimum and maximum.  These instructions are only
+generated if \fB\-ffinite\-math\-only\fR is specified.
+.IP "\fBfsqrtd\fR" 4
+.IX Item "fsqrtd"
+Unary square root operation.
+.IP "\fBfcosd\fR, \fBfsind\fR, \fBftand\fR, \fBfatand\fR, \fBfexpd\fR, \fBflogd\fR" 4
+.IX Item "fcosd, fsind, ftand, fatand, fexpd, flogd"
+Double-precision trigonometric and exponential functions.  These instructions
+are only generated if \fB\-funsafe\-math\-optimizations\fR is also specified.
+.RE
+.RS 4
+.Sp
+Conversions:
+.IP "\fBfextsd\fR" 4
+.IX Item "fextsd"
+Conversion from single precision to double precision.
+.IP "\fBftruncds\fR" 4
+.IX Item "ftruncds"
+Conversion from double precision to single precision.
+.IP "\fBfixsi\fR, \fBfixsu\fR, \fBfixdi\fR, \fBfixdu\fR" 4
+.IX Item "fixsi, fixsu, fixdi, fixdu"
+Conversion from floating point to signed or unsigned integer types, with
+truncation towards zero.
+.IP "\fBround\fR" 4
+.IX Item "round"
+Conversion from single-precision floating point to signed integer,
+rounding to the nearest integer and ties away from zero.
+This corresponds to the \f(CW\*(C`_\|_builtin_lroundf\*(C'\fR function when
+\&\fB\-fno\-math\-errno\fR is used.
+.IP "\fBfloatis\fR, \fBfloatus\fR, \fBfloatid\fR, \fBfloatud\fR" 4
+.IX Item "floatis, floatus, floatid, floatud"
+Conversion from signed or unsigned integer types to floating-point types.
+.RE
+.RS 4
+.Sp
+In addition, all of the following transfer instructions for internal
+registers X and Y must be provided to use any of the double-precision
+floating-point instructions.  Custom instructions taking two
+double-precision source operands expect the first operand in the
+64\-bit register X.  The other operand (or only operand of a unary
+operation) is given to the custom arithmetic instruction with the
+least significant half in source register \fIsrc1\fR and the most
+significant half in \fIsrc2\fR.  A custom instruction that returns a
+double-precision result returns the most significant 32 bits in the
+destination register and the other half in 32\-bit register Y.  
+\&\s-1GCC\s0 automatically generates the necessary code sequences to write
+register X and/or read register Y when double-precision floating-point
+instructions are used.
+.IP "\fBfwrx\fR" 4
+.IX Item "fwrx"
+Write \fIsrc1\fR into the least significant half of X and \fIsrc2\fR into
+the most significant half of X.
+.IP "\fBfwry\fR" 4
+.IX Item "fwry"
+Write \fIsrc1\fR into Y.
+.IP "\fBfrdxhi\fR, \fBfrdxlo\fR" 4
+.IX Item "frdxhi, frdxlo"
+Read the most or least (respectively) significant half of X and store it in
+\&\fIdest\fR.
+.IP "\fBfrdy\fR" 4
+.IX Item "frdy"
+Read the value of Y and store it into \fIdest\fR.
+.RE
+.RS 4
+.Sp
+Note that you can gain more local control over generation of Nios \s-1II\s0 custom
+instructions by using the \f(CW\*(C`target("custom\-\f(CIinsn\f(CW=\f(CIN\f(CW")\*(C'\fR
+and \f(CW\*(C`target("no\-custom\-\f(CIinsn\f(CW")\*(C'\fR function attributes
+or pragmas.
+.RE
+.IP "\fB\-mcustom\-fpu\-cfg=\fR\fIname\fR" 4
+.IX Item "-mcustom-fpu-cfg=name"
+This option enables a predefined, named set of custom instruction encodings
+(see \fB\-mcustom\-\fR\fIinsn\fR above).  
+Currently, the following sets are defined:
+.Sp
+\&\fB\-mcustom\-fpu\-cfg=60\-1\fR is equivalent to:
+\&\fB\-mcustom\-fmuls=252 
+\&\-mcustom\-fadds=253 
+\&\-mcustom\-fsubs=254 
+\&\-fsingle\-precision\-constant\fR
+.Sp
+\&\fB\-mcustom\-fpu\-cfg=60\-2\fR is equivalent to:
+\&\fB\-mcustom\-fmuls=252 
+\&\-mcustom\-fadds=253 
+\&\-mcustom\-fsubs=254 
+\&\-mcustom\-fdivs=255 
+\&\-fsingle\-precision\-constant\fR
+.Sp
+\&\fB\-mcustom\-fpu\-cfg=72\-3\fR is equivalent to:
+\&\fB\-mcustom\-floatus=243 
+\&\-mcustom\-fixsi=244 
+\&\-mcustom\-floatis=245 
+\&\-mcustom\-fcmpgts=246 
+\&\-mcustom\-fcmples=249 
+\&\-mcustom\-fcmpeqs=250 
+\&\-mcustom\-fcmpnes=251 
+\&\-mcustom\-fmuls=252 
+\&\-mcustom\-fadds=253 
+\&\-mcustom\-fsubs=254 
+\&\-mcustom\-fdivs=255 
+\&\-fsingle\-precision\-constant\fR
+.Sp
+Custom instruction assignments given by individual
+\&\fB\-mcustom\-\fR\fIinsn\fR\fB=\fR options override those given by
+\&\fB\-mcustom\-fpu\-cfg=\fR, regardless of the
+order of the options on the command line.
+.Sp
+Note that you can gain more local control over selection of a \s-1FPU\s0
+configuration by using the \f(CW\*(C`target("custom\-fpu\-cfg=\f(CIname\f(CW")\*(C'\fR
+function attribute
+or pragma.
+.PP
+These additional \fB\-m\fR options are available for the Altera Nios \s-1II
+ELF\s0 (bare-metal) target:
+.IP "\fB\-mhal\fR" 4
+.IX Item "-mhal"
+Link with \s-1HAL BSP.\s0  This suppresses linking with the GCC-provided C runtime
+startup and termination code, and is typically used in conjunction with
+\&\fB\-msys\-crt0=\fR to specify the location of the alternate startup code
+provided by the \s-1HAL BSP.\s0
+.IP "\fB\-msmallc\fR" 4
+.IX Item "-msmallc"
+Link with a limited version of the C library, \fB\-lsmallc\fR, rather than
+Newlib.
+.IP "\fB\-msys\-crt0=\fR\fIstartfile\fR" 4
+.IX Item "-msys-crt0=startfile"
+\&\fIstartfile\fR is the file name of the startfile (crt0) to use 
+when linking.  This option is only useful in conjunction with \fB\-mhal\fR.
+.IP "\fB\-msys\-lib=\fR\fIsystemlib\fR" 4
+.IX Item "-msys-lib=systemlib"
+\&\fIsystemlib\fR is the library name of the library that provides
+low-level system calls required by the C library,
+e.g. \f(CW\*(C`read\*(C'\fR and \f(CW\*(C`write\*(C'\fR.
+This option is typically used to link with a library provided by a \s-1HAL BSP.\s0
+.PP
+\fINvidia \s-1PTX\s0 Options\fR
+.IX Subsection "Nvidia PTX Options"
+.PP
+These options are defined for Nvidia \s-1PTX:\s0
+.IP "\fB\-m32\fR" 4
+.IX Item "-m32"
+.PD 0
+.IP "\fB\-m64\fR" 4
+.IX Item "-m64"
+.PD
+Generate code for 32\-bit or 64\-bit \s-1ABI.\s0
+.IP "\fB\-misa=\fR\fIISA-string\fR" 4
+.IX Item "-misa=ISA-string"
+Generate code for given the specified \s-1PTX ISA\s0 (e.g. \fBsm_35\fR).  \s-1ISA\s0
+strings must be lower-case.  Valid \s-1ISA\s0 strings include \fBsm_30\fR and
+\&\fBsm_35\fR.  The default \s-1ISA\s0 is sm_30.
+.IP "\fB\-mmainkernel\fR" 4
+.IX Item "-mmainkernel"
+Link in code for a _\|_main kernel.  This is for stand-alone instead of
+offloading execution.
+.IP "\fB\-moptimize\fR" 4
+.IX Item "-moptimize"
+Apply partitioned execution optimizations.  This is the default when any
+level of optimization is selected.
+.IP "\fB\-msoft\-stack\fR" 4
+.IX Item "-msoft-stack"
+Generate code that does not use \f(CW\*(C`.local\*(C'\fR memory
+directly for stack storage. Instead, a per-warp stack pointer is
+maintained explicitly. This enables variable-length stack allocation (with
+variable-length arrays or \f(CW\*(C`alloca\*(C'\fR), and when global memory is used for
+underlying storage, makes it possible to access automatic variables from other
+threads, or with atomic instructions. This code generation variant is used
+for OpenMP offloading, but the option is exposed on its own for the purpose
+of testing the compiler; to generate code suitable for linking into programs
+using OpenMP offloading, use option \fB\-mgomp\fR.
+.IP "\fB\-muniform\-simt\fR" 4
+.IX Item "-muniform-simt"
+Switch to code generation variant that allows to execute all threads in each
+warp, while maintaining memory state and side effects as if only one thread
+in each warp was active outside of OpenMP \s-1SIMD\s0 regions.  All atomic operations
+and calls to runtime (malloc, free, vprintf) are conditionally executed (iff
+current lane index equals the master lane index), and the register being
+assigned is copied via a shuffle instruction from the master lane.  Outside of
+\&\s-1SIMD\s0 regions lane 0 is the master; inside, each thread sees itself as the
+master.  Shared memory array \f(CW\*(C`int _\|_nvptx_uni[]\*(C'\fR stores all-zeros or
+all-ones bitmasks for each warp, indicating current mode (0 outside of \s-1SIMD\s0
+regions).  Each thread can bitwise-and the bitmask at position \f(CW\*(C`tid.y\*(C'\fR
+with current lane index to compute the master lane index.
+.IP "\fB\-mgomp\fR" 4
+.IX Item "-mgomp"
+Generate code for use in OpenMP offloading: enables \fB\-msoft\-stack\fR and
+\&\fB\-muniform\-simt\fR options, and selects corresponding multilib variant.
+.PP
+\fIOpenRISC Options\fR
+.IX Subsection "OpenRISC Options"
+.PP
+These options are defined for OpenRISC:
+.IP "\fB\-mboard=\fR\fIname\fR" 4
+.IX Item "-mboard=name"
+Configure a board specific runtime.  This will be passed to the linker for
+newlib board library linking.  The default is \f(CW\*(C`or1ksim\*(C'\fR.
+.IP "\fB\-mnewlib\fR" 4
+.IX Item "-mnewlib"
+For compatibility, it's always newlib for elf now.
+.IP "\fB\-mhard\-div\fR" 4
+.IX Item "-mhard-div"
+Generate code for hardware which supports divide instructions.  This is the
+default.
+.IP "\fB\-mhard\-mul\fR" 4
+.IX Item "-mhard-mul"
+Generate code for hardware which supports multiply instructions.  This is the
+default.
+.IP "\fB\-mcmov\fR" 4
+.IX Item "-mcmov"
+Generate code for hardware which supports the conditional move (\f(CW\*(C`l.cmov\*(C'\fR)
+instruction.
+.IP "\fB\-mror\fR" 4
+.IX Item "-mror"
+Generate code for hardware which supports rotate right instructions.
+.IP "\fB\-msext\fR" 4
+.IX Item "-msext"
+Generate code for hardware which supports sign-extension instructions.
+.IP "\fB\-msfimm\fR" 4
+.IX Item "-msfimm"
+Generate code for hardware which supports set flag immediate (\f(CW\*(C`l.sf*i\*(C'\fR)
+instructions.
+.IP "\fB\-mshftimm\fR" 4
+.IX Item "-mshftimm"
+Generate code for hardware which supports shift immediate related instructions
+(i.e. \f(CW\*(C`l.srai\*(C'\fR, \f(CW\*(C`l.srli\*(C'\fR, \f(CW\*(C`l.slli\*(C'\fR, \f(CW\*(C`1.rori\*(C'\fR).  Note, to
+enable generation of the \f(CW\*(C`l.rori\*(C'\fR instruction the \fB\-mror\fR flag must
+also be specified.
+.IP "\fB\-msoft\-div\fR" 4
+.IX Item "-msoft-div"
+Generate code for hardware which requires divide instruction emulation.
+.IP "\fB\-msoft\-mul\fR" 4
+.IX Item "-msoft-mul"
+Generate code for hardware which requires multiply instruction emulation.
+.PP
+\fI\s-1PDP\-11\s0 Options\fR
+.IX Subsection "PDP-11 Options"
+.PP
+These options are defined for the \s-1PDP\-11:\s0
+.IP "\fB\-mfpu\fR" 4
+.IX Item "-mfpu"
+Use hardware \s-1FPP\s0 floating point.  This is the default.  (\s-1FIS\s0 floating
+point on the \s-1PDP\-11/40\s0 is not supported.)  Implies \-m45.
+.IP "\fB\-msoft\-float\fR" 4
+.IX Item "-msoft-float"
+Do not use hardware floating point.
+.IP "\fB\-mac0\fR" 4
+.IX Item "-mac0"
+Return floating-point results in ac0 (fr0 in Unix assembler syntax).
+.IP "\fB\-mno\-ac0\fR" 4
+.IX Item "-mno-ac0"
+Return floating-point results in memory.  This is the default.
+.IP "\fB\-m40\fR" 4
+.IX Item "-m40"
+Generate code for a \s-1PDP\-11/40.\s0  Implies \-msoft\-float \-mno\-split.
+.IP "\fB\-m45\fR" 4
+.IX Item "-m45"
+Generate code for a \s-1PDP\-11/45.\s0  This is the default.
+.IP "\fB\-m10\fR" 4
+.IX Item "-m10"
+Generate code for a \s-1PDP\-11/10.\s0  Implies \-msoft\-float \-mno\-split.
+.IP "\fB\-mint16\fR" 4
+.IX Item "-mint16"
+.PD 0
+.IP "\fB\-mno\-int32\fR" 4
+.IX Item "-mno-int32"
+.PD
+Use 16\-bit \f(CW\*(C`int\*(C'\fR.  This is the default.
+.IP "\fB\-mint32\fR" 4
+.IX Item "-mint32"
+.PD 0
+.IP "\fB\-mno\-int16\fR" 4
+.IX Item "-mno-int16"
+.PD
+Use 32\-bit \f(CW\*(C`int\*(C'\fR.
+.IP "\fB\-msplit\fR" 4
+.IX Item "-msplit"
+Target has split instruction and data space.  Implies \-m45.
+.IP "\fB\-munix\-asm\fR" 4
+.IX Item "-munix-asm"
+Use Unix assembler syntax.
+.IP "\fB\-mdec\-asm\fR" 4
+.IX Item "-mdec-asm"
+Use \s-1DEC\s0 assembler syntax.
+.IP "\fB\-mgnu\-asm\fR" 4
+.IX Item "-mgnu-asm"
+Use \s-1GNU\s0 assembler syntax.  This is the default.
+.IP "\fB\-mlra\fR" 4
+.IX Item "-mlra"
+Use the new \s-1LRA\s0 register allocator.  By default, the old \*(L"reload\*(R"
+allocator is used.
+.PP
+\fIpicoChip Options\fR
+.IX Subsection "picoChip Options"
+.PP
+These \fB\-m\fR options are defined for picoChip implementations:
+.IP "\fB\-mae=\fR\fIae_type\fR" 4
+.IX Item "-mae=ae_type"
+Set the instruction set, register set, and instruction scheduling
+parameters for array element type \fIae_type\fR.  Supported values
+for \fIae_type\fR are \fB\s-1ANY\s0\fR, \fB\s-1MUL\s0\fR, and \fB\s-1MAC\s0\fR.
+.Sp
+\&\fB\-mae=ANY\fR selects a completely generic \s-1AE\s0 type.  Code
+generated with this option runs on any of the other \s-1AE\s0 types.  The
+code is not as efficient as it would be if compiled for a specific
+\&\s-1AE\s0 type, and some types of operation (e.g., multiplication) do not
+work properly on all types of \s-1AE.\s0
+.Sp
+\&\fB\-mae=MUL\fR selects a \s-1MUL AE\s0 type.  This is the most useful \s-1AE\s0 type
+for compiled code, and is the default.
+.Sp
+\&\fB\-mae=MAC\fR selects a DSP-style \s-1MAC AE.\s0  Code compiled with this
+option may suffer from poor performance of byte (char) manipulation,
+since the \s-1DSP AE\s0 does not provide hardware support for byte load/stores.
+.IP "\fB\-msymbol\-as\-address\fR" 4
+.IX Item "-msymbol-as-address"
+Enable the compiler to directly use a symbol name as an address in a
+load/store instruction, without first loading it into a
+register.  Typically, the use of this option generates larger
+programs, which run faster than when the option isn't used.  However, the
+results vary from program to program, so it is left as a user option,
+rather than being permanently enabled.
+.IP "\fB\-mno\-inefficient\-warnings\fR" 4
+.IX Item "-mno-inefficient-warnings"
+Disables warnings about the generation of inefficient code.  These
+warnings can be generated, for example, when compiling code that
+performs byte-level memory operations on the \s-1MAC AE\s0 type.  The \s-1MAC AE\s0 has
+no hardware support for byte-level memory operations, so all byte
+load/stores must be synthesized from word load/store operations.  This is
+inefficient and a warning is generated to indicate
+that you should rewrite the code to avoid byte operations, or to target
+an \s-1AE\s0 type that has the necessary hardware support.  This option disables
+these warnings.
+.PP
+\fIPowerPC Options\fR
+.IX Subsection "PowerPC Options"
+.PP
+These are listed under
+.PP
+\fIRISC-V Options\fR
+.IX Subsection "RISC-V Options"
+.PP
+These command-line options are defined for RISC-V targets:
+.IP "\fB\-mbranch\-cost=\fR\fIn\fR" 4
+.IX Item "-mbranch-cost=n"
+Set the cost of branches to roughly \fIn\fR instructions.
+.IP "\fB\-mplt\fR" 4
+.IX Item "-mplt"
+.PD 0
+.IP "\fB\-mno\-plt\fR" 4
+.IX Item "-mno-plt"
+.PD
+When generating \s-1PIC\s0 code, do or don't allow the use of PLTs. Ignored for
+non-PIC.  The default is \fB\-mplt\fR.
+.IP "\fB\-mabi=\fR\fIABI-string\fR" 4
+.IX Item "-mabi=ABI-string"
+Specify integer and floating-point calling convention.  \fIABI-string\fR
+contains two parts: the size of integer types and the registers used for
+floating-point types.  For example \fB\-march=rv64ifd \-mabi=lp64d\fR means that
+\&\fBlong\fR and pointers are 64\-bit (implicitly defining \fBint\fR to be
+32\-bit), and that floating-point values up to 64 bits wide are passed in F
+registers.  Contrast this with \fB\-march=rv64ifd \-mabi=lp64f\fR, which still
+allows the compiler to generate code that uses the F and D extensions but only
+allows floating-point values up to 32 bits long to be passed in registers; or
+\&\fB\-march=rv64ifd \-mabi=lp64\fR, in which no floating-point arguments will be
+passed in registers.
+.Sp
+The default for this argument is system dependent, users who want a specific
+calling convention should specify one explicitly.  The valid calling
+conventions are: \fBilp32\fR, \fBilp32f\fR, \fBilp32d\fR, \fBlp64\fR,
+\&\fBlp64f\fR, and \fBlp64d\fR.  Some calling conventions are impossible to
+implement on some ISAs: for example, \fB\-march=rv32if \-mabi=ilp32d\fR is
+invalid because the \s-1ABI\s0 requires 64\-bit values be passed in F registers, but F
+registers are only 32 bits wide.  There is also the \fBilp32e\fR \s-1ABI\s0 that can
+only be used with the \fBrv32e\fR architecture.  This \s-1ABI\s0 is not well
+specified at present, and is subject to change.
+.IP "\fB\-mfdiv\fR" 4
+.IX Item "-mfdiv"
+.PD 0
+.IP "\fB\-mno\-fdiv\fR" 4
+.IX Item "-mno-fdiv"
+.PD
+Do or don't use hardware floating-point divide and square root instructions.
+This requires the F or D extensions for floating-point registers.  The default
+is to use them if the specified architecture has these instructions.
+.IP "\fB\-mdiv\fR" 4
+.IX Item "-mdiv"
+.PD 0
+.IP "\fB\-mno\-div\fR" 4
+.IX Item "-mno-div"
+.PD
+Do or don't use hardware instructions for integer division.  This requires the
+M extension.  The default is to use them if the specified architecture has
+these instructions.
+.IP "\fB\-march=\fR\fIISA-string\fR" 4
+.IX Item "-march=ISA-string"
+Generate code for given RISC-V \s-1ISA\s0 (e.g. \fBrv64im\fR).  \s-1ISA\s0 strings must be
+lower-case.  Examples include \fBrv64i\fR, \fBrv32g\fR, \fBrv32e\fR, and
+\&\fBrv32imaf\fR.
+.IP "\fB\-mtune=\fR\fIprocessor-string\fR" 4
+.IX Item "-mtune=processor-string"
+Optimize the output for the given processor, specified by microarchitecture
+name.  Permissible values for this option are: \fBrocket\fR,
+\&\fBsifive\-3\-series\fR, \fBsifive\-5\-series\fR, \fBsifive\-7\-series\fR,
+and \fBsize\fR.
+.Sp
+When \fB\-mtune=\fR is not specified, the default is \fBrocket\fR.
+.Sp
+The \fBsize\fR choice is not intended for use by end-users.  This is used
+when \fB\-Os\fR is specified.  It overrides the instruction cost info
+provided by \fB\-mtune=\fR, but does not override the pipeline info.  This
+helps reduce code size while still giving good performance.
+.IP "\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR" 4
+.IX Item "-mpreferred-stack-boundary=num"
+Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
+byte boundary.  If \fB\-mpreferred\-stack\-boundary\fR is not specified,
+the default is 4 (16 bytes or 128\-bits).
+.Sp
+\&\fBWarning:\fR If you use this switch, then you must build all modules with
+the same value, including any libraries.  This includes the system libraries
+and startup modules.
+.IP "\fB\-msmall\-data\-limit=\fR\fIn\fR" 4
+.IX Item "-msmall-data-limit=n"
+Put global and static data smaller than \fIn\fR bytes into a special section
+(on some targets).
+.IP "\fB\-msave\-restore\fR" 4
+.IX Item "-msave-restore"
+.PD 0
+.IP "\fB\-mno\-save\-restore\fR" 4
+.IX Item "-mno-save-restore"
+.PD
+Do or don't use smaller but slower prologue and epilogue code that uses
+library function calls.  The default is to use fast inline prologues and
+epilogues.
+.IP "\fB\-mstrict\-align\fR" 4
+.IX Item "-mstrict-align"
+.PD 0
+.IP "\fB\-mno\-strict\-align\fR" 4
+.IX Item "-mno-strict-align"
+.PD
+Do not or do generate unaligned memory accesses.  The default is set depending
+on whether the processor we are optimizing for supports fast unaligned access
+or not.
+.IP "\fB\-mcmodel=medlow\fR" 4
+.IX Item "-mcmodel=medlow"
+Generate code for the medium-low code model. The program and its statically
+defined symbols must lie within a single 2 GiB address range and must lie
+between absolute addresses \-2 GiB and +2 GiB. Programs can be
+statically or dynamically linked. This is the default code model.
+.IP "\fB\-mcmodel=medany\fR" 4
+.IX Item "-mcmodel=medany"
+Generate code for the medium-any code model. The program and its statically
+defined symbols must be within any single 2 GiB address range. Programs can be
+statically or dynamically linked.
+.IP "\fB\-mexplicit\-relocs\fR" 4
+.IX Item "-mexplicit-relocs"
+.PD 0
+.IP "\fB\-mno\-exlicit\-relocs\fR" 4
+.IX Item "-mno-exlicit-relocs"
+.PD
+Use or do not use assembler relocation operators when dealing with symbolic
+addresses.  The alternative is to use assembler macros instead, which may
+limit optimization.
+.IP "\fB\-mrelax\fR" 4
+.IX Item "-mrelax"
+.PD 0
+.IP "\fB\-mno\-relax\fR" 4
+.IX Item "-mno-relax"
+.PD
+Take advantage of linker relaxations to reduce the number of instructions
+required to materialize symbol addresses. The default is to take advantage of
+linker relaxations.
+.IP "\fB\-memit\-attribute\fR" 4
+.IX Item "-memit-attribute"
+.PD 0
+.IP "\fB\-mno\-emit\-attribute\fR" 4
+.IX Item "-mno-emit-attribute"
+.PD
+Emit (do not emit) RISC-V attribute to record extra information into \s-1ELF\s0
+objects.  This feature requires at least binutils 2.32.
+.PP
+\fI\s-1RL78\s0 Options\fR
+.IX Subsection "RL78 Options"
+.IP "\fB\-msim\fR" 4
+.IX Item "-msim"
+Links in additional target libraries to support operation within a
+simulator.
+.IP "\fB\-mmul=none\fR" 4
+.IX Item "-mmul=none"
+.PD 0
+.IP "\fB\-mmul=g10\fR" 4
+.IX Item "-mmul=g10"
+.IP "\fB\-mmul=g13\fR" 4
+.IX Item "-mmul=g13"
+.IP "\fB\-mmul=g14\fR" 4
+.IX Item "-mmul=g14"
+.IP "\fB\-mmul=rl78\fR" 4
+.IX Item "-mmul=rl78"
+.PD
+Specifies the type of hardware multiplication and division support to
+be used.  The simplest is \f(CW\*(C`none\*(C'\fR, which uses software for both
+multiplication and division.  This is the default.  The \f(CW\*(C`g13\*(C'\fR
+value is for the hardware multiply/divide peripheral found on the
+\&\s-1RL78/G13\s0 (S2 core) targets.  The \f(CW\*(C`g14\*(C'\fR value selects the use of
+the multiplication and division instructions supported by the \s-1RL78/G14\s0
+(S3 core) parts.  The value \f(CW\*(C`rl78\*(C'\fR is an alias for \f(CW\*(C`g14\*(C'\fR and
+the value \f(CW\*(C`mg10\*(C'\fR is an alias for \f(CW\*(C`none\*(C'\fR.
+.Sp
+In addition a C preprocessor macro is defined, based upon the setting
+of this option.  Possible values are: \f(CW\*(C`_\|_RL78_MUL_NONE_\|_\*(C'\fR,
+\&\f(CW\*(C`_\|_RL78_MUL_G13_\|_\*(C'\fR or \f(CW\*(C`_\|_RL78_MUL_G14_\|_\*(C'\fR.
+.IP "\fB\-mcpu=g10\fR" 4
+.IX Item "-mcpu=g10"
+.PD 0
+.IP "\fB\-mcpu=g13\fR" 4
+.IX Item "-mcpu=g13"
+.IP "\fB\-mcpu=g14\fR" 4
+.IX Item "-mcpu=g14"
+.IP "\fB\-mcpu=rl78\fR" 4
+.IX Item "-mcpu=rl78"
+.PD
+Specifies the \s-1RL78\s0 core to target.  The default is the G14 core, also
+known as an S3 core or just \s-1RL78.\s0  The G13 or S2 core does not have
+multiply or divide instructions, instead it uses a hardware peripheral
+for these operations.  The G10 or S1 core does not have register
+banks, so it uses a different calling convention.
+.Sp
+If this option is set it also selects the type of hardware multiply
+support to use, unless this is overridden by an explicit
+\&\fB\-mmul=none\fR option on the command line.  Thus specifying
+\&\fB\-mcpu=g13\fR enables the use of the G13 hardware multiply
+peripheral and specifying \fB\-mcpu=g10\fR disables the use of
+hardware multiplications altogether.
+.Sp
+Note, although the \s-1RL78/G14\s0 core is the default target, specifying
+\&\fB\-mcpu=g14\fR or \fB\-mcpu=rl78\fR on the command line does
+change the behavior of the toolchain since it also enables G14
+hardware multiply support.  If these options are not specified on the
+command line then software multiplication routines will be used even
+though the code targets the \s-1RL78\s0 core.  This is for backwards
+compatibility with older toolchains which did not have hardware
+multiply and divide support.
+.Sp
+In addition a C preprocessor macro is defined, based upon the setting
+of this option.  Possible values are: \f(CW\*(C`_\|_RL78_G10_\|_\*(C'\fR,
+\&\f(CW\*(C`_\|_RL78_G13_\|_\*(C'\fR or \f(CW\*(C`_\|_RL78_G14_\|_\*(C'\fR.
+.IP "\fB\-mg10\fR" 4
+.IX Item "-mg10"
+.PD 0
+.IP "\fB\-mg13\fR" 4
+.IX Item "-mg13"
+.IP "\fB\-mg14\fR" 4
+.IX Item "-mg14"
+.IP "\fB\-mrl78\fR" 4
+.IX Item "-mrl78"
+.PD
+These are aliases for the corresponding \fB\-mcpu=\fR option.  They
+are provided for backwards compatibility.
+.IP "\fB\-mallregs\fR" 4
+.IX Item "-mallregs"
+Allow the compiler to use all of the available registers.  By default
+registers \f(CW\*(C`r24..r31\*(C'\fR are reserved for use in interrupt handlers.
+With this option enabled these registers can be used in ordinary
+functions as well.
+.IP "\fB\-m64bit\-doubles\fR" 4
+.IX Item "-m64bit-doubles"
+.PD 0
+.IP "\fB\-m32bit\-doubles\fR" 4
+.IX Item "-m32bit-doubles"
+.PD
+Make the \f(CW\*(C`double\*(C'\fR data type be 64 bits (\fB\-m64bit\-doubles\fR)
+or 32 bits (\fB\-m32bit\-doubles\fR) in size.  The default is
+\&\fB\-m32bit\-doubles\fR.
+.IP "\fB\-msave\-mduc\-in\-interrupts\fR" 4
+.IX Item "-msave-mduc-in-interrupts"
+.PD 0
+.IP "\fB\-mno\-save\-mduc\-in\-interrupts\fR" 4
+.IX Item "-mno-save-mduc-in-interrupts"
+.PD
+Specifies that interrupt handler functions should preserve the
+\&\s-1MDUC\s0 registers.  This is only necessary if normal code might use
+the \s-1MDUC\s0 registers, for example because it performs multiplication
+and division operations.  The default is to ignore the \s-1MDUC\s0 registers
+as this makes the interrupt handlers faster.  The target option \-mg13
+needs to be passed for this to work as this feature is only available
+on the G13 target (S2 core).  The \s-1MDUC\s0 registers will only be saved
+if the interrupt handler performs a multiplication or division
+operation or it calls another function.
+.PP
+\fI\s-1IBM RS/6000\s0 and PowerPC Options\fR
+.IX Subsection "IBM RS/6000 and PowerPC Options"
+.PP
+These \fB\-m\fR options are defined for the \s-1IBM RS/6000\s0 and PowerPC:
+.IP "\fB\-mpowerpc\-gpopt\fR" 4
+.IX Item "-mpowerpc-gpopt"
+.PD 0
+.IP "\fB\-mno\-powerpc\-gpopt\fR" 4
+.IX Item "-mno-powerpc-gpopt"
+.IP "\fB\-mpowerpc\-gfxopt\fR" 4
+.IX Item "-mpowerpc-gfxopt"
+.IP "\fB\-mno\-powerpc\-gfxopt\fR" 4
+.IX Item "-mno-powerpc-gfxopt"
+.IP "\fB\-mpowerpc64\fR" 4
+.IX Item "-mpowerpc64"
+.IP "\fB\-mno\-powerpc64\fR" 4
+.IX Item "-mno-powerpc64"
+.IP "\fB\-mmfcrf\fR" 4
+.IX Item "-mmfcrf"
+.IP "\fB\-mno\-mfcrf\fR" 4
+.IX Item "-mno-mfcrf"
+.IP "\fB\-mpopcntb\fR" 4
+.IX Item "-mpopcntb"
+.IP "\fB\-mno\-popcntb\fR" 4
+.IX Item "-mno-popcntb"
+.IP "\fB\-mpopcntd\fR" 4
+.IX Item "-mpopcntd"
+.IP "\fB\-mno\-popcntd\fR" 4
+.IX Item "-mno-popcntd"
+.IP "\fB\-mfprnd\fR" 4
+.IX Item "-mfprnd"
+.IP "\fB\-mno\-fprnd\fR" 4
+.IX Item "-mno-fprnd"
+.IP "\fB\-mcmpb\fR" 4
+.IX Item "-mcmpb"
+.IP "\fB\-mno\-cmpb\fR" 4
+.IX Item "-mno-cmpb"
+.IP "\fB\-mmfpgpr\fR" 4
+.IX Item "-mmfpgpr"
+.IP "\fB\-mno\-mfpgpr\fR" 4
+.IX Item "-mno-mfpgpr"
+.IP "\fB\-mhard\-dfp\fR" 4
+.IX Item "-mhard-dfp"
+.IP "\fB\-mno\-hard\-dfp\fR" 4
+.IX Item "-mno-hard-dfp"
+.PD
+You use these options to specify which instructions are available on the
+processor you are using.  The default value of these options is
+determined when configuring \s-1GCC.\s0  Specifying the
+\&\fB\-mcpu=\fR\fIcpu_type\fR overrides the specification of these
+options.  We recommend you use the \fB\-mcpu=\fR\fIcpu_type\fR option
+rather than the options listed above.
+.Sp
+Specifying \fB\-mpowerpc\-gpopt\fR allows
+\&\s-1GCC\s0 to use the optional PowerPC architecture instructions in the
+General Purpose group, including floating-point square root.  Specifying
+\&\fB\-mpowerpc\-gfxopt\fR allows \s-1GCC\s0 to
+use the optional PowerPC architecture instructions in the Graphics
+group, including floating-point select.
+.Sp
+The \fB\-mmfcrf\fR option allows \s-1GCC\s0 to generate the move from
+condition register field instruction implemented on the \s-1POWER4\s0
+processor and other processors that support the PowerPC V2.01
+architecture.
+The \fB\-mpopcntb\fR option allows \s-1GCC\s0 to generate the popcount and
+double-precision \s-1FP\s0 reciprocal estimate instruction implemented on the
+\&\s-1POWER5\s0 processor and other processors that support the PowerPC V2.02
+architecture.
+The \fB\-mpopcntd\fR option allows \s-1GCC\s0 to generate the popcount
+instruction implemented on the \s-1POWER7\s0 processor and other processors
+that support the PowerPC V2.06 architecture.
+The \fB\-mfprnd\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 round to
+integer instructions implemented on the \s-1POWER5+\s0 processor and other
+processors that support the PowerPC V2.03 architecture.
+The \fB\-mcmpb\fR option allows \s-1GCC\s0 to generate the compare bytes
+instruction implemented on the \s-1POWER6\s0 processor and other processors
+that support the PowerPC V2.05 architecture.
+The \fB\-mmfpgpr\fR option allows \s-1GCC\s0 to generate the \s-1FP\s0 move to/from
+general-purpose register instructions implemented on the \s-1POWER6X\s0
+processor and other processors that support the extended PowerPC V2.05
+architecture.
+The \fB\-mhard\-dfp\fR option allows \s-1GCC\s0 to generate the decimal
+floating-point instructions implemented on some \s-1POWER\s0 processors.
+.Sp
+The \fB\-mpowerpc64\fR option allows \s-1GCC\s0 to generate the additional
+64\-bit instructions that are found in the full PowerPC64 architecture
+and to treat GPRs as 64\-bit, doubleword quantities.  \s-1GCC\s0 defaults to
+\&\fB\-mno\-powerpc64\fR.
+.IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
+.IX Item "-mcpu=cpu_type"
+Set architecture type, register usage, and
+instruction scheduling parameters for machine type \fIcpu_type\fR.
+Supported values for \fIcpu_type\fR are \fB401\fR, \fB403\fR,
+\&\fB405\fR, \fB405fp\fR, \fB440\fR, \fB440fp\fR, \fB464\fR, \fB464fp\fR,
+\&\fB476\fR, \fB476fp\fR, \fB505\fR, \fB601\fR, \fB602\fR, \fB603\fR,
+\&\fB603e\fR, \fB604\fR, \fB604e\fR, \fB620\fR, \fB630\fR, \fB740\fR,
+\&\fB7400\fR, \fB7450\fR, \fB750\fR, \fB801\fR, \fB821\fR, \fB823\fR,
+\&\fB860\fR, \fB970\fR, \fB8540\fR, \fBa2\fR, \fBe300c2\fR,
+\&\fBe300c3\fR, \fBe500mc\fR, \fBe500mc64\fR, \fBe5500\fR,
+\&\fBe6500\fR, \fBec603e\fR, \fBG3\fR, \fBG4\fR, \fBG5\fR,
+\&\fBtitan\fR, \fBpower3\fR, \fBpower4\fR, \fBpower5\fR, \fBpower5+\fR,
+\&\fBpower6\fR, \fBpower6x\fR, \fBpower7\fR, \fBpower8\fR,
+\&\fBpower9\fR, \fBpowerpc\fR, \fBpowerpc64\fR, \fBpowerpc64le\fR,
+\&\fBrs64\fR, and \fBnative\fR.
+.Sp
+\&\fB\-mcpu=powerpc\fR, \fB\-mcpu=powerpc64\fR, and
+\&\fB\-mcpu=powerpc64le\fR specify pure 32\-bit PowerPC (either
+endian), 64\-bit big endian PowerPC and 64\-bit little endian PowerPC
+architecture machine types, with an appropriate, generic processor
+model assumed for scheduling purposes.
+.Sp
+Specifying \fBnative\fR as cpu type detects and selects the
+architecture option that corresponds to the host processor of the
+system performing the compilation.
+\&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize the
+processor.
+.Sp
+The other options specify a specific processor.  Code generated under
+those options runs best on that processor, and may not run at all on
+others.
+.Sp
+The \fB\-mcpu\fR options automatically enable or disable the
+following options:
+.Sp
+\&\fB\-maltivec  \-mfprnd  \-mhard\-float  \-mmfcrf  \-mmultiple 
+\&\-mpopcntb  \-mpopcntd  \-mpowerpc64 
+\&\-mpowerpc\-gpopt  \-mpowerpc\-gfxopt 
+\&\-mmulhw  \-mdlmzb  \-mmfpgpr  \-mvsx 
+\&\-mcrypto  \-mhtm  \-mpower8\-fusion  \-mpower8\-vector 
+\&\-mquad\-memory  \-mquad\-memory\-atomic  \-mfloat128  \-mfloat128\-hardware\fR
+.Sp
+The particular options set for any particular \s-1CPU\s0 varies between
+compiler versions, depending on what setting seems to produce optimal
+code for that \s-1CPU\s0; it doesn't necessarily reflect the actual hardware's
+capabilities.  If you wish to set an individual option to a particular
+value, you may specify it after the \fB\-mcpu\fR option, like
+\&\fB\-mcpu=970 \-mno\-altivec\fR.
+.Sp
+On \s-1AIX,\s0 the \fB\-maltivec\fR and \fB\-mpowerpc64\fR options are
+not enabled or disabled by the \fB\-mcpu\fR option at present because
+\&\s-1AIX\s0 does not have full support for these options.  You may still
+enable or disable them individually if you're sure it'll work in your
+environment.
+.IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
+.IX Item "-mtune=cpu_type"
+Set the instruction scheduling parameters for machine type
+\&\fIcpu_type\fR, but do not set the architecture type or register usage,
+as \fB\-mcpu=\fR\fIcpu_type\fR does.  The same
+values for \fIcpu_type\fR are used for \fB\-mtune\fR as for
+\&\fB\-mcpu\fR.  If both are specified, the code generated uses the
+architecture and registers set by \fB\-mcpu\fR, but the
+scheduling parameters set by \fB\-mtune\fR.
+.IP "\fB\-mcmodel=small\fR" 4
+.IX Item "-mcmodel=small"
+Generate PowerPC64 code for the small model: The \s-1TOC\s0 is limited to
+64k.
+.IP "\fB\-mcmodel=medium\fR" 4
+.IX Item "-mcmodel=medium"
+Generate PowerPC64 code for the medium model: The \s-1TOC\s0 and other static
+data may be up to a total of 4G in size.  This is the default for 64\-bit
+Linux.
+.IP "\fB\-mcmodel=large\fR" 4
+.IX Item "-mcmodel=large"
+Generate PowerPC64 code for the large model: The \s-1TOC\s0 may be up to 4G
+in size.  Other data and code is only limited by the 64\-bit address
+space.
+.IP "\fB\-maltivec\fR" 4
+.IX Item "-maltivec"
+.PD 0
+.IP "\fB\-mno\-altivec\fR" 4
+.IX Item "-mno-altivec"
+.PD
+Generate code that uses (does not use) AltiVec instructions, and also
+enable the use of built-in functions that allow more direct access to
+the AltiVec instruction set.  You may also need to set
+\&\fB\-mabi=altivec\fR to adjust the current \s-1ABI\s0 with AltiVec \s-1ABI\s0
+enhancements.
+.Sp
+When \fB\-maltivec\fR is used, the element order for AltiVec intrinsics
+such as \f(CW\*(C`vec_splat\*(C'\fR, \f(CW\*(C`vec_extract\*(C'\fR, and \f(CW\*(C`vec_insert\*(C'\fR 
+match array element order corresponding to the endianness of the
+target.  That is, element zero identifies the leftmost element in a
+vector register when targeting a big-endian platform, and identifies
+the rightmost element in a vector register when targeting a
+little-endian platform.
+.IP "\fB\-mvrsave\fR" 4
+.IX Item "-mvrsave"
+.PD 0
+.IP "\fB\-mno\-vrsave\fR" 4
+.IX Item "-mno-vrsave"
+.PD
+Generate \s-1VRSAVE\s0 instructions when generating AltiVec code.
+.IP "\fB\-msecure\-plt\fR" 4
+.IX Item "-msecure-plt"
+Generate code that allows \fBld\fR and \fBld.so\fR
+to build executables and shared
+libraries with non-executable \f(CW\*(C`.plt\*(C'\fR and \f(CW\*(C`.got\*(C'\fR sections.
+This is a PowerPC
+32\-bit \s-1SYSV ABI\s0 option.
+.IP "\fB\-mbss\-plt\fR" 4
+.IX Item "-mbss-plt"
+Generate code that uses a \s-1BSS\s0 \f(CW\*(C`.plt\*(C'\fR section that \fBld.so\fR
+fills in, and
+requires \f(CW\*(C`.plt\*(C'\fR and \f(CW\*(C`.got\*(C'\fR
+sections that are both writable and executable.
+This is a PowerPC 32\-bit \s-1SYSV ABI\s0 option.
+.IP "\fB\-misel\fR" 4
+.IX Item "-misel"
+.PD 0
+.IP "\fB\-mno\-isel\fR" 4
+.IX Item "-mno-isel"
+.PD
+This switch enables or disables the generation of \s-1ISEL\s0 instructions.
+.IP "\fB\-mvsx\fR" 4
+.IX Item "-mvsx"
+.PD 0
+.IP "\fB\-mno\-vsx\fR" 4
+.IX Item "-mno-vsx"
+.PD
+Generate code that uses (does not use) vector/scalar (\s-1VSX\s0)
+instructions, and also enable the use of built-in functions that allow
+more direct access to the \s-1VSX\s0 instruction set.
+.IP "\fB\-mcrypto\fR" 4
+.IX Item "-mcrypto"
+.PD 0
+.IP "\fB\-mno\-crypto\fR" 4
+.IX Item "-mno-crypto"
+.PD
+Enable the use (disable) of the built-in functions that allow direct
+access to the cryptographic instructions that were added in version
+2.07 of the PowerPC \s-1ISA.\s0
+.IP "\fB\-mhtm\fR" 4
+.IX Item "-mhtm"
+.PD 0
+.IP "\fB\-mno\-htm\fR" 4
+.IX Item "-mno-htm"
+.PD
+Enable (disable) the use of the built-in functions that allow direct
+access to the Hardware Transactional Memory (\s-1HTM\s0) instructions that
+were added in version 2.07 of the PowerPC \s-1ISA.\s0
+.IP "\fB\-mpower8\-fusion\fR" 4
+.IX Item "-mpower8-fusion"
+.PD 0
+.IP "\fB\-mno\-power8\-fusion\fR" 4
+.IX Item "-mno-power8-fusion"
+.PD
+Generate code that keeps (does not keeps) some integer operations
+adjacent so that the instructions can be fused together on power8 and
+later processors.
+.IP "\fB\-mpower8\-vector\fR" 4
+.IX Item "-mpower8-vector"
+.PD 0
+.IP "\fB\-mno\-power8\-vector\fR" 4
+.IX Item "-mno-power8-vector"
+.PD
+Generate code that uses (does not use) the vector and scalar
+instructions that were added in version 2.07 of the PowerPC \s-1ISA.\s0  Also
+enable the use of built-in functions that allow more direct access to
+the vector instructions.
+.IP "\fB\-mquad\-memory\fR" 4
+.IX Item "-mquad-memory"
+.PD 0
+.IP "\fB\-mno\-quad\-memory\fR" 4
+.IX Item "-mno-quad-memory"
+.PD
+Generate code that uses (does not use) the non-atomic quad word memory
+instructions.  The \fB\-mquad\-memory\fR option requires use of
+64\-bit mode.
+.IP "\fB\-mquad\-memory\-atomic\fR" 4
+.IX Item "-mquad-memory-atomic"
+.PD 0
+.IP "\fB\-mno\-quad\-memory\-atomic\fR" 4
+.IX Item "-mno-quad-memory-atomic"
+.PD
+Generate code that uses (does not use) the atomic quad word memory
+instructions.  The \fB\-mquad\-memory\-atomic\fR option requires use of
+64\-bit mode.
+.IP "\fB\-mfloat128\fR" 4
+.IX Item "-mfloat128"
+.PD 0
+.IP "\fB\-mno\-float128\fR" 4
+.IX Item "-mno-float128"
+.PD
+Enable/disable the \fI_\|_float128\fR keyword for \s-1IEEE\s0 128\-bit floating point
+and use either software emulation for \s-1IEEE\s0 128\-bit floating point or
+hardware instructions.
+.Sp
+The \s-1VSX\s0 instruction set (\fB\-mvsx\fR, \fB\-mcpu=power7\fR,
+\&\fB\-mcpu=power8\fR), or \fB\-mcpu=power9\fR must be enabled to
+use the \s-1IEEE\s0 128\-bit floating point support.  The \s-1IEEE\s0 128\-bit
+floating point support only works on PowerPC Linux systems.
+.Sp
+The default for \fB\-mfloat128\fR is enabled on PowerPC Linux
+systems using the \s-1VSX\s0 instruction set, and disabled on other systems.
+.Sp
+If you use the \s-1ISA 3.0\s0 instruction set (\fB\-mpower9\-vector\fR or
+\&\fB\-mcpu=power9\fR) on a 64\-bit system, the \s-1IEEE\s0 128\-bit floating
+point support will also enable the generation of \s-1ISA 3.0 IEEE\s0 128\-bit
+floating point instructions.  Otherwise, if you do not specify to
+generate \s-1ISA 3.0\s0 instructions or you are targeting a 32\-bit big endian
+system, \s-1IEEE\s0 128\-bit floating point will be done with software
+emulation.
+.IP "\fB\-mfloat128\-hardware\fR" 4
+.IX Item "-mfloat128-hardware"
+.PD 0
+.IP "\fB\-mno\-float128\-hardware\fR" 4
+.IX Item "-mno-float128-hardware"
+.PD
+Enable/disable using \s-1ISA 3.0\s0 hardware instructions to support the
+\&\fI_\|_float128\fR data type.
+.Sp
+The default for \fB\-mfloat128\-hardware\fR is enabled on PowerPC
+Linux systems using the \s-1ISA 3.0\s0 instruction set, and disabled on other
+systems.
+.IP "\fB\-m32\fR" 4
+.IX Item "-m32"
+.PD 0
+.IP "\fB\-m64\fR" 4
+.IX Item "-m64"
+.PD
+Generate code for 32\-bit or 64\-bit environments of Darwin and \s-1SVR4\s0
+targets (including GNU/Linux).  The 32\-bit environment sets int, long
+and pointer to 32 bits and generates code that runs on any PowerPC
+variant.  The 64\-bit environment sets int to 32 bits and long and
+pointer to 64 bits, and generates code for PowerPC64, as for
+\&\fB\-mpowerpc64\fR.
+.IP "\fB\-mfull\-toc\fR" 4
+.IX Item "-mfull-toc"
+.PD 0
+.IP "\fB\-mno\-fp\-in\-toc\fR" 4
+.IX Item "-mno-fp-in-toc"
+.IP "\fB\-mno\-sum\-in\-toc\fR" 4
+.IX Item "-mno-sum-in-toc"
+.IP "\fB\-mminimal\-toc\fR" 4
+.IX Item "-mminimal-toc"
+.PD
+Modify generation of the \s-1TOC\s0 (Table Of Contents), which is created for
+every executable file.  The \fB\-mfull\-toc\fR option is selected by
+default.  In that case, \s-1GCC\s0 allocates at least one \s-1TOC\s0 entry for
+each unique non-automatic variable reference in your program.  \s-1GCC\s0
+also places floating-point constants in the \s-1TOC.\s0  However, only
+16,384 entries are available in the \s-1TOC.\s0
+.Sp
+If you receive a linker error message that saying you have overflowed
+the available \s-1TOC\s0 space, you can reduce the amount of \s-1TOC\s0 space used
+with the \fB\-mno\-fp\-in\-toc\fR and \fB\-mno\-sum\-in\-toc\fR options.
+\&\fB\-mno\-fp\-in\-toc\fR prevents \s-1GCC\s0 from putting floating-point
+constants in the \s-1TOC\s0 and \fB\-mno\-sum\-in\-toc\fR forces \s-1GCC\s0 to
+generate code to calculate the sum of an address and a constant at
+run time instead of putting that sum into the \s-1TOC.\s0  You may specify one
+or both of these options.  Each causes \s-1GCC\s0 to produce very slightly
+slower and larger code at the expense of conserving \s-1TOC\s0 space.
+.Sp
+If you still run out of space in the \s-1TOC\s0 even when you specify both of
+these options, specify \fB\-mminimal\-toc\fR instead.  This option causes
+\&\s-1GCC\s0 to make only one \s-1TOC\s0 entry for every file.  When you specify this
+option, \s-1GCC\s0 produces code that is slower and larger but which
+uses extremely little \s-1TOC\s0 space.  You may wish to use this option
+only on files that contain less frequently-executed code.
+.IP "\fB\-maix64\fR" 4
+.IX Item "-maix64"
+.PD 0
+.IP "\fB\-maix32\fR" 4
+.IX Item "-maix32"
+.PD
+Enable 64\-bit \s-1AIX ABI\s0 and calling convention: 64\-bit pointers, 64\-bit
+\&\f(CW\*(C`long\*(C'\fR type, and the infrastructure needed to support them.
+Specifying \fB\-maix64\fR implies \fB\-mpowerpc64\fR,
+while \fB\-maix32\fR disables the 64\-bit \s-1ABI\s0 and
+implies \fB\-mno\-powerpc64\fR.  \s-1GCC\s0 defaults to \fB\-maix32\fR.
+.IP "\fB\-mxl\-compat\fR" 4
+.IX Item "-mxl-compat"
+.PD 0
+.IP "\fB\-mno\-xl\-compat\fR" 4
+.IX Item "-mno-xl-compat"
+.PD
+Produce code that conforms more closely to \s-1IBM XL\s0 compiler semantics
+when using AIX-compatible \s-1ABI.\s0  Pass floating-point arguments to
+prototyped functions beyond the register save area (\s-1RSA\s0) on the stack
+in addition to argument FPRs.  Do not assume that most significant
+double in 128\-bit long double value is properly rounded when comparing
+values and converting to double.  Use \s-1XL\s0 symbol names for long double
+support routines.
+.Sp
+The \s-1AIX\s0 calling convention was extended but not initially documented to
+handle an obscure K&R C case of calling a function that takes the
+address of its arguments with fewer arguments than declared.  \s-1IBM XL\s0
+compilers access floating-point arguments that do not fit in the
+\&\s-1RSA\s0 from the stack when a subroutine is compiled without
+optimization.  Because always storing floating-point arguments on the
+stack is inefficient and rarely needed, this option is not enabled by
+default and only is necessary when calling subroutines compiled by \s-1IBM
+XL\s0 compilers without optimization.
+.IP "\fB\-mpe\fR" 4
+.IX Item "-mpe"
+Support \fI\s-1IBM RS/6000 SP\s0\fR \fIParallel Environment\fR (\s-1PE\s0).  Link an
+application written to use message passing with special startup code to
+enable the application to run.  The system must have \s-1PE\s0 installed in the
+standard location (\fI/usr/lpp/ppe.poe/\fR), or the \fIspecs\fR file
+must be overridden with the \fB\-specs=\fR option to specify the
+appropriate directory location.  The Parallel Environment does not
+support threads, so the \fB\-mpe\fR option and the \fB\-pthread\fR
+option are incompatible.
+.IP "\fB\-malign\-natural\fR" 4
+.IX Item "-malign-natural"
+.PD 0
+.IP "\fB\-malign\-power\fR" 4
+.IX Item "-malign-power"
+.PD
+On \s-1AIX,\s0 32\-bit Darwin, and 64\-bit PowerPC GNU/Linux, the option
+\&\fB\-malign\-natural\fR overrides the ABI-defined alignment of larger
+types, such as floating-point doubles, on their natural size-based boundary.
+The option \fB\-malign\-power\fR instructs \s-1GCC\s0 to follow the ABI-specified
+alignment rules.  \s-1GCC\s0 defaults to the standard alignment defined in the \s-1ABI.\s0
+.Sp
+On 64\-bit Darwin, natural alignment is the default, and \fB\-malign\-power\fR
+is not supported.
+.IP "\fB\-msoft\-float\fR" 4
+.IX Item "-msoft-float"
+.PD 0
+.IP "\fB\-mhard\-float\fR" 4
+.IX Item "-mhard-float"
+.PD
+Generate code that does not use (uses) the floating-point register set.
+Software floating-point emulation is provided if you use the
+\&\fB\-msoft\-float\fR option, and pass the option to \s-1GCC\s0 when linking.
+.IP "\fB\-mmultiple\fR" 4
+.IX Item "-mmultiple"
+.PD 0
+.IP "\fB\-mno\-multiple\fR" 4
+.IX Item "-mno-multiple"
+.PD
+Generate code that uses (does not use) the load multiple word
+instructions and the store multiple word instructions.  These
+instructions are generated by default on \s-1POWER\s0 systems, and not
+generated on PowerPC systems.  Do not use \fB\-mmultiple\fR on little-endian
+PowerPC systems, since those instructions do not work when the
+processor is in little-endian mode.  The exceptions are \s-1PPC740\s0 and
+\&\s-1PPC750\s0 which permit these instructions in little-endian mode.
+.IP "\fB\-mupdate\fR" 4
+.IX Item "-mupdate"
+.PD 0
+.IP "\fB\-mno\-update\fR" 4
+.IX Item "-mno-update"
+.PD
+Generate code that uses (does not use) the load or store instructions
+that update the base register to the address of the calculated memory
+location.  These instructions are generated by default.  If you use
+\&\fB\-mno\-update\fR, there is a small window between the time that the
+stack pointer is updated and the address of the previous frame is
+stored, which means code that walks the stack frame across interrupts or
+signals may get corrupted data.
+.IP "\fB\-mavoid\-indexed\-addresses\fR" 4
+.IX Item "-mavoid-indexed-addresses"
+.PD 0
+.IP "\fB\-mno\-avoid\-indexed\-addresses\fR" 4
+.IX Item "-mno-avoid-indexed-addresses"
+.PD
+Generate code that tries to avoid (not avoid) the use of indexed load
+or store instructions. These instructions can incur a performance
+penalty on Power6 processors in certain situations, such as when
+stepping through large arrays that cross a 16M boundary.  This option
+is enabled by default when targeting Power6 and disabled otherwise.
+.IP "\fB\-mfused\-madd\fR" 4
+.IX Item "-mfused-madd"
+.PD 0
+.IP "\fB\-mno\-fused\-madd\fR" 4
+.IX Item "-mno-fused-madd"
+.PD
+Generate code that uses (does not use) the floating-point multiply and
+accumulate instructions.  These instructions are generated by default
+if hardware floating point is used.  The machine-dependent
+\&\fB\-mfused\-madd\fR option is now mapped to the machine-independent
+\&\fB\-ffp\-contract=fast\fR option, and \fB\-mno\-fused\-madd\fR is
+mapped to \fB\-ffp\-contract=off\fR.
+.IP "\fB\-mmulhw\fR" 4
+.IX Item "-mmulhw"
+.PD 0
+.IP "\fB\-mno\-mulhw\fR" 4
+.IX Item "-mno-mulhw"
+.PD
+Generate code that uses (does not use) the half-word multiply and
+multiply-accumulate instructions on the \s-1IBM 405, 440, 464\s0 and 476 processors.
+These instructions are generated by default when targeting those
+processors.
+.IP "\fB\-mdlmzb\fR" 4
+.IX Item "-mdlmzb"
+.PD 0
+.IP "\fB\-mno\-dlmzb\fR" 4
+.IX Item "-mno-dlmzb"
+.PD
+Generate code that uses (does not use) the string-search \fBdlmzb\fR
+instruction on the \s-1IBM 405, 440, 464\s0 and 476 processors.  This instruction is
+generated by default when targeting those processors.
+.IP "\fB\-mno\-bit\-align\fR" 4
+.IX Item "-mno-bit-align"
+.PD 0
+.IP "\fB\-mbit\-align\fR" 4
+.IX Item "-mbit-align"
+.PD
+On System V.4 and embedded PowerPC systems do not (do) force structures
+and unions that contain bit-fields to be aligned to the base type of the
+bit-field.
+.Sp
+For example, by default a structure containing nothing but 8
+\&\f(CW\*(C`unsigned\*(C'\fR bit-fields of length 1 is aligned to a 4\-byte
+boundary and has a size of 4 bytes.  By using \fB\-mno\-bit\-align\fR,
+the structure is aligned to a 1\-byte boundary and is 1 byte in
+size.
+.IP "\fB\-mno\-strict\-align\fR" 4
+.IX Item "-mno-strict-align"
+.PD 0
+.IP "\fB\-mstrict\-align\fR" 4
+.IX Item "-mstrict-align"
+.PD
+On System V.4 and embedded PowerPC systems do not (do) assume that
+unaligned memory references are handled by the system.
+.IP "\fB\-mrelocatable\fR" 4
+.IX Item "-mrelocatable"
+.PD 0
+.IP "\fB\-mno\-relocatable\fR" 4
+.IX Item "-mno-relocatable"
+.PD
+Generate code that allows (does not allow) a static executable to be
+relocated to a different address at run time.  A simple embedded
+PowerPC system loader should relocate the entire contents of
+\&\f(CW\*(C`.got2\*(C'\fR and 4\-byte locations listed in the \f(CW\*(C`.fixup\*(C'\fR section,
+a table of 32\-bit addresses generated by this option.  For this to
+work, all objects linked together must be compiled with
+\&\fB\-mrelocatable\fR or \fB\-mrelocatable\-lib\fR.
+\&\fB\-mrelocatable\fR code aligns the stack to an 8\-byte boundary.
+.IP "\fB\-mrelocatable\-lib\fR" 4
+.IX Item "-mrelocatable-lib"
+.PD 0
+.IP "\fB\-mno\-relocatable\-lib\fR" 4
+.IX Item "-mno-relocatable-lib"
+.PD
+Like \fB\-mrelocatable\fR, \fB\-mrelocatable\-lib\fR generates a
+\&\f(CW\*(C`.fixup\*(C'\fR section to allow static executables to be relocated at
+run time, but \fB\-mrelocatable\-lib\fR does not use the smaller stack
+alignment of \fB\-mrelocatable\fR.  Objects compiled with
+\&\fB\-mrelocatable\-lib\fR may be linked with objects compiled with
+any combination of the \fB\-mrelocatable\fR options.
+.IP "\fB\-mno\-toc\fR" 4
+.IX Item "-mno-toc"
+.PD 0
+.IP "\fB\-mtoc\fR" 4
+.IX Item "-mtoc"
+.PD
+On System V.4 and embedded PowerPC systems do not (do) assume that
+register 2 contains a pointer to a global area pointing to the addresses
+used in the program.
+.IP "\fB\-mlittle\fR" 4
+.IX Item "-mlittle"
+.PD 0
+.IP "\fB\-mlittle\-endian\fR" 4
+.IX Item "-mlittle-endian"
+.PD
+On System V.4 and embedded PowerPC systems compile code for the
+processor in little-endian mode.  The \fB\-mlittle\-endian\fR option is
+the same as \fB\-mlittle\fR.
+.IP "\fB\-mbig\fR" 4
+.IX Item "-mbig"
+.PD 0
+.IP "\fB\-mbig\-endian\fR" 4
+.IX Item "-mbig-endian"
+.PD
+On System V.4 and embedded PowerPC systems compile code for the
+processor in big-endian mode.  The \fB\-mbig\-endian\fR option is
+the same as \fB\-mbig\fR.
+.IP "\fB\-mdynamic\-no\-pic\fR" 4
+.IX Item "-mdynamic-no-pic"
+On Darwin and Mac \s-1OS X\s0 systems, compile code so that it is not
+relocatable, but that its external references are relocatable.  The
+resulting code is suitable for applications, but not shared
+libraries.
+.IP "\fB\-msingle\-pic\-base\fR" 4
+.IX Item "-msingle-pic-base"
+Treat the register used for \s-1PIC\s0 addressing as read-only, rather than
+loading it in the prologue for each function.  The runtime system is
+responsible for initializing this register with an appropriate value
+before execution begins.
+.IP "\fB\-mprioritize\-restricted\-insns=\fR\fIpriority\fR" 4
+.IX Item "-mprioritize-restricted-insns=priority"
+This option controls the priority that is assigned to
+dispatch-slot restricted instructions during the second scheduling
+pass.  The argument \fIpriority\fR takes the value \fB0\fR, \fB1\fR,
+or \fB2\fR to assign no, highest, or second-highest (respectively) 
+priority to dispatch-slot restricted
+instructions.
+.IP "\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR" 4
+.IX Item "-msched-costly-dep=dependence_type"
+This option controls which dependences are considered costly
+by the target during instruction scheduling.  The argument
+\&\fIdependence_type\fR takes one of the following values:
+.RS 4
+.IP "\fBno\fR" 4
+.IX Item "no"
+No dependence is costly.
+.IP "\fBall\fR" 4
+.IX Item "all"
+All dependences are costly.
+.IP "\fBtrue_store_to_load\fR" 4
+.IX Item "true_store_to_load"
+A true dependence from store to load is costly.
+.IP "\fBstore_to_load\fR" 4
+.IX Item "store_to_load"
+Any dependence from store to load is costly.
+.IP "\fInumber\fR" 4
+.IX Item "number"
+Any dependence for which the latency is greater than or equal to 
+\&\fInumber\fR is costly.
+.RE
+.RS 4
+.RE
+.IP "\fB\-minsert\-sched\-nops=\fR\fIscheme\fR" 4
+.IX Item "-minsert-sched-nops=scheme"
+This option controls which \s-1NOP\s0 insertion scheme is used during
+the second scheduling pass.  The argument \fIscheme\fR takes one of the
+following values:
+.RS 4
+.IP "\fBno\fR" 4
+.IX Item "no"
+Don't insert NOPs.
+.IP "\fBpad\fR" 4
+.IX Item "pad"
+Pad with NOPs any dispatch group that has vacant issue slots,
+according to the scheduler's grouping.
+.IP "\fBregroup_exact\fR" 4
+.IX Item "regroup_exact"
+Insert NOPs to force costly dependent insns into
+separate groups.  Insert exactly as many NOPs as needed to force an insn
+to a new group, according to the estimated processor grouping.
+.IP "\fInumber\fR" 4
+.IX Item "number"
+Insert NOPs to force costly dependent insns into
+separate groups.  Insert \fInumber\fR NOPs to force an insn to a new group.
+.RE
+.RS 4
+.RE
+.IP "\fB\-mcall\-sysv\fR" 4
+.IX Item "-mcall-sysv"
+On System V.4 and embedded PowerPC systems compile code using calling
+conventions that adhere to the March 1995 draft of the System V
+Application Binary Interface, PowerPC processor supplement.  This is the
+default unless you configured \s-1GCC\s0 using \fBpowerpc\-*\-eabiaix\fR.
+.IP "\fB\-mcall\-sysv\-eabi\fR" 4
+.IX Item "-mcall-sysv-eabi"
+.PD 0
+.IP "\fB\-mcall\-eabi\fR" 4
+.IX Item "-mcall-eabi"
+.PD
+Specify both \fB\-mcall\-sysv\fR and \fB\-meabi\fR options.
+.IP "\fB\-mcall\-sysv\-noeabi\fR" 4
+.IX Item "-mcall-sysv-noeabi"
+Specify both \fB\-mcall\-sysv\fR and \fB\-mno\-eabi\fR options.
+.IP "\fB\-mcall\-aixdesc\fR" 4
+.IX Item "-mcall-aixdesc"
+On System V.4 and embedded PowerPC systems compile code for the \s-1AIX\s0
+operating system.
+.IP "\fB\-mcall\-linux\fR" 4
+.IX Item "-mcall-linux"
+On System V.4 and embedded PowerPC systems compile code for the
+Linux-based \s-1GNU\s0 system.
+.IP "\fB\-mcall\-freebsd\fR" 4
+.IX Item "-mcall-freebsd"
+On System V.4 and embedded PowerPC systems compile code for the
+FreeBSD operating system.
+.IP "\fB\-mcall\-netbsd\fR" 4
+.IX Item "-mcall-netbsd"
+On System V.4 and embedded PowerPC systems compile code for the
+NetBSD operating system.
+.IP "\fB\-mcall\-openbsd\fR" 4
+.IX Item "-mcall-openbsd"
+On System V.4 and embedded PowerPC systems compile code for the
+OpenBSD operating system.
+.IP "\fB\-mtraceback=\fR\fItraceback_type\fR" 4
+.IX Item "-mtraceback=traceback_type"
+Select the type of traceback table. Valid values for \fItraceback_type\fR
+are \fBfull\fR, \fBpart\fR, and \fBno\fR.
+.IP "\fB\-maix\-struct\-return\fR" 4
+.IX Item "-maix-struct-return"
+Return all structures in memory (as specified by the \s-1AIX ABI\s0).
+.IP "\fB\-msvr4\-struct\-return\fR" 4
+.IX Item "-msvr4-struct-return"
+Return structures smaller than 8 bytes in registers (as specified by the
+\&\s-1SVR4 ABI\s0).
+.IP "\fB\-mabi=\fR\fIabi-type\fR" 4
+.IX Item "-mabi=abi-type"
+Extend the current \s-1ABI\s0 with a particular extension, or remove such extension.
+Valid values are \fBaltivec\fR, \fBno-altivec\fR,
+\&\fBibmlongdouble\fR, \fBieeelongdouble\fR,
+\&\fBelfv1\fR, \fBelfv2\fR.
+.IP "\fB\-mabi=ibmlongdouble\fR" 4
+.IX Item "-mabi=ibmlongdouble"
+Change the current \s-1ABI\s0 to use \s-1IBM\s0 extended-precision long double.
+This is not likely to work if your system defaults to using \s-1IEEE\s0
+extended-precision long double.  If you change the long double type
+from \s-1IEEE\s0 extended-precision, the compiler will issue a warning unless
+you use the \fB\-Wno\-psabi\fR option.  Requires \fB\-mlong\-double\-128\fR
+to be enabled.
+.IP "\fB\-mabi=ieeelongdouble\fR" 4
+.IX Item "-mabi=ieeelongdouble"
+Change the current \s-1ABI\s0 to use \s-1IEEE\s0 extended-precision long double.
+This is not likely to work if your system defaults to using \s-1IBM\s0
+extended-precision long double.  If you change the long double type
+from \s-1IBM\s0 extended-precision, the compiler will issue a warning unless
+you use the \fB\-Wno\-psabi\fR option.  Requires \fB\-mlong\-double\-128\fR
+to be enabled.
+.IP "\fB\-mabi=elfv1\fR" 4
+.IX Item "-mabi=elfv1"
+Change the current \s-1ABI\s0 to use the ELFv1 \s-1ABI.\s0
+This is the default \s-1ABI\s0 for big-endian PowerPC 64\-bit Linux.
+Overriding the default \s-1ABI\s0 requires special system support and is
+likely to fail in spectacular ways.
+.IP "\fB\-mabi=elfv2\fR" 4
+.IX Item "-mabi=elfv2"
+Change the current \s-1ABI\s0 to use the ELFv2 \s-1ABI.\s0
+This is the default \s-1ABI\s0 for little-endian PowerPC 64\-bit Linux.
+Overriding the default \s-1ABI\s0 requires special system support and is
+likely to fail in spectacular ways.
+.IP "\fB\-mgnu\-attribute\fR" 4
+.IX Item "-mgnu-attribute"
+.PD 0
+.IP "\fB\-mno\-gnu\-attribute\fR" 4
+.IX Item "-mno-gnu-attribute"
+.PD
+Emit .gnu_attribute assembly directives to set tag/value pairs in a
+\&.gnu.attributes section that specify \s-1ABI\s0 variations in function
+parameters or return values.
+.IP "\fB\-mprototype\fR" 4
+.IX Item "-mprototype"
+.PD 0
+.IP "\fB\-mno\-prototype\fR" 4
+.IX Item "-mno-prototype"
+.PD
+On System V.4 and embedded PowerPC systems assume that all calls to
+variable argument functions are properly prototyped.  Otherwise, the
+compiler must insert an instruction before every non-prototyped call to
+set or clear bit 6 of the condition code register (\f(CW\*(C`CR\*(C'\fR) to
+indicate whether floating-point values are passed in the floating-point
+registers in case the function takes variable arguments.  With
+\&\fB\-mprototype\fR, only calls to prototyped variable argument functions
+set or clear the bit.
+.IP "\fB\-msim\fR" 4
+.IX Item "-msim"
+On embedded PowerPC systems, assume that the startup module is called
+\&\fIsim\-crt0.o\fR and that the standard C libraries are \fIlibsim.a\fR and
+\&\fIlibc.a\fR.  This is the default for \fBpowerpc\-*\-eabisim\fR
+configurations.
+.IP "\fB\-mmvme\fR" 4
+.IX Item "-mmvme"
+On embedded PowerPC systems, assume that the startup module is called
+\&\fIcrt0.o\fR and the standard C libraries are \fIlibmvme.a\fR and
+\&\fIlibc.a\fR.
+.IP "\fB\-mads\fR" 4
+.IX Item "-mads"
+On embedded PowerPC systems, assume that the startup module is called
+\&\fIcrt0.o\fR and the standard C libraries are \fIlibads.a\fR and
+\&\fIlibc.a\fR.
+.IP "\fB\-myellowknife\fR" 4
+.IX Item "-myellowknife"
+On embedded PowerPC systems, assume that the startup module is called
+\&\fIcrt0.o\fR and the standard C libraries are \fIlibyk.a\fR and
+\&\fIlibc.a\fR.
+.IP "\fB\-mvxworks\fR" 4
+.IX Item "-mvxworks"
+On System V.4 and embedded PowerPC systems, specify that you are
+compiling for a VxWorks system.
+.IP "\fB\-memb\fR" 4
+.IX Item "-memb"
+On embedded PowerPC systems, set the \f(CW\*(C`PPC_EMB\*(C'\fR bit in the \s-1ELF\s0 flags
+header to indicate that \fBeabi\fR extended relocations are used.
+.IP "\fB\-meabi\fR" 4
+.IX Item "-meabi"
+.PD 0
+.IP "\fB\-mno\-eabi\fR" 4
+.IX Item "-mno-eabi"
+.PD
+On System V.4 and embedded PowerPC systems do (do not) adhere to the
+Embedded Applications Binary Interface (\s-1EABI\s0), which is a set of
+modifications to the System V.4 specifications.  Selecting \fB\-meabi\fR
+means that the stack is aligned to an 8\-byte boundary, a function
+\&\f(CW\*(C`_\|_eabi\*(C'\fR is called from \f(CW\*(C`main\*(C'\fR to set up the \s-1EABI\s0
+environment, and the \fB\-msdata\fR option can use both \f(CW\*(C`r2\*(C'\fR and
+\&\f(CW\*(C`r13\*(C'\fR to point to two separate small data areas.  Selecting
+\&\fB\-mno\-eabi\fR means that the stack is aligned to a 16\-byte boundary,
+no \s-1EABI\s0 initialization function is called from \f(CW\*(C`main\*(C'\fR, and the
+\&\fB\-msdata\fR option only uses \f(CW\*(C`r13\*(C'\fR to point to a single
+small data area.  The \fB\-meabi\fR option is on by default if you
+configured \s-1GCC\s0 using one of the \fBpowerpc*\-*\-eabi*\fR options.
+.IP "\fB\-msdata=eabi\fR" 4
+.IX Item "-msdata=eabi"
+On System V.4 and embedded PowerPC systems, put small initialized
+\&\f(CW\*(C`const\*(C'\fR global and static data in the \f(CW\*(C`.sdata2\*(C'\fR section, which
+is pointed to by register \f(CW\*(C`r2\*(C'\fR.  Put small initialized
+non\-\f(CW\*(C`const\*(C'\fR global and static data in the \f(CW\*(C`.sdata\*(C'\fR section,
+which is pointed to by register \f(CW\*(C`r13\*(C'\fR.  Put small uninitialized
+global and static data in the \f(CW\*(C`.sbss\*(C'\fR section, which is adjacent to
+the \f(CW\*(C`.sdata\*(C'\fR section.  The \fB\-msdata=eabi\fR option is
+incompatible with the \fB\-mrelocatable\fR option.  The
+\&\fB\-msdata=eabi\fR option also sets the \fB\-memb\fR option.
+.IP "\fB\-msdata=sysv\fR" 4
+.IX Item "-msdata=sysv"
+On System V.4 and embedded PowerPC systems, put small global and static
+data in the \f(CW\*(C`.sdata\*(C'\fR section, which is pointed to by register
+\&\f(CW\*(C`r13\*(C'\fR.  Put small uninitialized global and static data in the
+\&\f(CW\*(C`.sbss\*(C'\fR section, which is adjacent to the \f(CW\*(C`.sdata\*(C'\fR section.
+The \fB\-msdata=sysv\fR option is incompatible with the
+\&\fB\-mrelocatable\fR option.
+.IP "\fB\-msdata=default\fR" 4
+.IX Item "-msdata=default"
+.PD 0
+.IP "\fB\-msdata\fR" 4
+.IX Item "-msdata"
+.PD
+On System V.4 and embedded PowerPC systems, if \fB\-meabi\fR is used,
+compile code the same as \fB\-msdata=eabi\fR, otherwise compile code the
+same as \fB\-msdata=sysv\fR.
+.IP "\fB\-msdata=data\fR" 4
+.IX Item "-msdata=data"
+On System V.4 and embedded PowerPC systems, put small global
+data in the \f(CW\*(C`.sdata\*(C'\fR section.  Put small uninitialized global
+data in the \f(CW\*(C`.sbss\*(C'\fR section.  Do not use register \f(CW\*(C`r13\*(C'\fR
+to address small data however.  This is the default behavior unless
+other \fB\-msdata\fR options are used.
+.IP "\fB\-msdata=none\fR" 4
+.IX Item "-msdata=none"
+.PD 0
+.IP "\fB\-mno\-sdata\fR" 4
+.IX Item "-mno-sdata"
+.PD
+On embedded PowerPC systems, put all initialized global and static data
+in the \f(CW\*(C`.data\*(C'\fR section, and all uninitialized data in the
+\&\f(CW\*(C`.bss\*(C'\fR section.
+.IP "\fB\-mreadonly\-in\-sdata\fR" 4
+.IX Item "-mreadonly-in-sdata"
+Put read-only objects in the \f(CW\*(C`.sdata\*(C'\fR section as well.  This is the
+default.
+.IP "\fB\-mblock\-move\-inline\-limit=\fR\fInum\fR" 4
+.IX Item "-mblock-move-inline-limit=num"
+Inline all block moves (such as calls to \f(CW\*(C`memcpy\*(C'\fR or structure
+copies) less than or equal to \fInum\fR bytes.  The minimum value for
+\&\fInum\fR is 32 bytes on 32\-bit targets and 64 bytes on 64\-bit
+targets.  The default value is target-specific.
+.IP "\fB\-mblock\-compare\-inline\-limit=\fR\fInum\fR" 4
+.IX Item "-mblock-compare-inline-limit=num"
+Generate non-looping inline code for all block compares (such as calls
+to \f(CW\*(C`memcmp\*(C'\fR or structure compares) less than or equal to \fInum\fR
+bytes. If \fInum\fR is 0, all inline expansion (non-loop and loop) of
+block compare is disabled. The default value is target-specific.
+.IP "\fB\-mblock\-compare\-inline\-loop\-limit=\fR\fInum\fR" 4
+.IX Item "-mblock-compare-inline-loop-limit=num"
+Generate an inline expansion using loop code for all block compares that
+are less than or equal to \fInum\fR bytes, but greater than the limit
+for non-loop inline block compare expansion. If the block length is not
+constant, at most \fInum\fR bytes will be compared before \f(CW\*(C`memcmp\*(C'\fR
+is called to compare the remainder of the block. The default value is
+target-specific.
+.IP "\fB\-mstring\-compare\-inline\-limit=\fR\fInum\fR" 4
+.IX Item "-mstring-compare-inline-limit=num"
+Compare at most \fInum\fR string bytes with inline code.
+If the difference or end of string is not found at the
+end of the inline compare a call to \f(CW\*(C`strcmp\*(C'\fR or \f(CW\*(C`strncmp\*(C'\fR will
+take care of the rest of the comparison. The default is 64 bytes.
+.IP "\fB\-G\fR \fInum\fR" 4
+.IX Item "-G num"
+On embedded PowerPC systems, put global and static items less than or
+equal to \fInum\fR bytes into the small data or \s-1BSS\s0 sections instead of
+the normal data or \s-1BSS\s0 section.  By default, \fInum\fR is 8.  The
+\&\fB\-G\fR \fInum\fR switch is also passed to the linker.
+All modules should be compiled with the same \fB\-G\fR \fInum\fR value.
+.IP "\fB\-mregnames\fR" 4
+.IX Item "-mregnames"
+.PD 0
+.IP "\fB\-mno\-regnames\fR" 4
+.IX Item "-mno-regnames"
+.PD
+On System V.4 and embedded PowerPC systems do (do not) emit register
+names in the assembly language output using symbolic forms.
+.IP "\fB\-mlongcall\fR" 4
+.IX Item "-mlongcall"
+.PD 0
+.IP "\fB\-mno\-longcall\fR" 4
+.IX Item "-mno-longcall"
+.PD
+By default assume that all calls are far away so that a longer and more
+expensive calling sequence is required.  This is required for calls
+farther than 32 megabytes (33,554,432 bytes) from the current location.
+A short call is generated if the compiler knows
+the call cannot be that far away.  This setting can be overridden by
+the \f(CW\*(C`shortcall\*(C'\fR function attribute, or by \f(CW\*(C`#pragma
+longcall(0)\*(C'\fR.
+.Sp
+Some linkers are capable of detecting out-of-range calls and generating
+glue code on the fly.  On these systems, long calls are unnecessary and
+generate slower code.  As of this writing, the \s-1AIX\s0 linker can do this,
+as can the \s-1GNU\s0 linker for PowerPC/64.  It is planned to add this feature
+to the \s-1GNU\s0 linker for 32\-bit PowerPC systems as well.
+.Sp
+On PowerPC64 ELFv2 and 32\-bit PowerPC systems with newer \s-1GNU\s0 linkers,
+\&\s-1GCC\s0 can generate long calls using an inline \s-1PLT\s0 call sequence (see
+\&\fB\-mpltseq\fR).  PowerPC with \fB\-mbss\-plt\fR and PowerPC64
+ELFv1 (big-endian) do not support inline \s-1PLT\s0 calls.
+.Sp
+On Darwin/PPC systems, \f(CW\*(C`#pragma longcall\*(C'\fR generates \f(CW\*(C`jbsr
+callee, L42\*(C'\fR, plus a \fIbranch island\fR (glue code).  The two target
+addresses represent the callee and the branch island.  The
+Darwin/PPC linker prefers the first address and generates a \f(CW\*(C`bl
+callee\*(C'\fR if the \s-1PPC\s0 \f(CW\*(C`bl\*(C'\fR instruction reaches the callee directly;
+otherwise, the linker generates \f(CW\*(C`bl L42\*(C'\fR to call the branch
+island.  The branch island is appended to the body of the
+calling function; it computes the full 32\-bit address of the callee
+and jumps to it.
+.Sp
+On Mach-O (Darwin) systems, this option directs the compiler emit to
+the glue for every direct call, and the Darwin linker decides whether
+to use or discard it.
+.Sp
+In the future, \s-1GCC\s0 may ignore all longcall specifications
+when the linker is known to generate glue.
+.IP "\fB\-mpltseq\fR" 4
+.IX Item "-mpltseq"
+.PD 0
+.IP "\fB\-mno\-pltseq\fR" 4
+.IX Item "-mno-pltseq"
+.PD
+Implement (do not implement) \-fno\-plt and long calls using an inline
+\&\s-1PLT\s0 call sequence that supports lazy linking and long calls to
+functions in dlopen'd shared libraries.  Inline \s-1PLT\s0 calls are only
+supported on PowerPC64 ELFv2 and 32\-bit PowerPC systems with newer \s-1GNU\s0
+linkers, and are enabled by default if the support is detected when
+configuring \s-1GCC,\s0 and, in the case of 32\-bit PowerPC, if \s-1GCC\s0 is
+configured with \fB\-\-enable\-secureplt\fR.  \fB\-mpltseq\fR code
+and \fB\-mbss\-plt\fR 32\-bit PowerPC relocatable objects may not be
+linked together.
+.IP "\fB\-mtls\-markers\fR" 4
+.IX Item "-mtls-markers"
+.PD 0
+.IP "\fB\-mno\-tls\-markers\fR" 4
+.IX Item "-mno-tls-markers"
+.PD
+Mark (do not mark) calls to \f(CW\*(C`_\|_tls_get_addr\*(C'\fR with a relocation
+specifying the function argument.  The relocation allows the linker to
+reliably associate function call with argument setup instructions for
+\&\s-1TLS\s0 optimization, which in turn allows \s-1GCC\s0 to better schedule the
+sequence.
+.IP "\fB\-mrecip\fR" 4
+.IX Item "-mrecip"
+.PD 0
+.IP "\fB\-mno\-recip\fR" 4
+.IX Item "-mno-recip"
+.PD
+This option enables use of the reciprocal estimate and
+reciprocal square root estimate instructions with additional
+Newton-Raphson steps to increase precision instead of doing a divide or
+square root and divide for floating-point arguments.  You should use
+the \fB\-ffast\-math\fR option when using \fB\-mrecip\fR (or at
+least \fB\-funsafe\-math\-optimizations\fR,
+\&\fB\-ffinite\-math\-only\fR, \fB\-freciprocal\-math\fR and
+\&\fB\-fno\-trapping\-math\fR).  Note that while the throughput of the
+sequence is generally higher than the throughput of the non-reciprocal
+instruction, the precision of the sequence can be decreased by up to 2
+ulp (i.e. the inverse of 1.0 equals 0.99999994) for reciprocal square
+roots.
+.IP "\fB\-mrecip=\fR\fIopt\fR" 4
+.IX Item "-mrecip=opt"
+This option controls which reciprocal estimate instructions
+may be used.  \fIopt\fR is a comma-separated list of options, which may
+be preceded by a \f(CW\*(C`!\*(C'\fR to invert the option:
+.RS 4
+.IP "\fBall\fR" 4
+.IX Item "all"
+Enable all estimate instructions.
+.IP "\fBdefault\fR" 4
+.IX Item "default"
+Enable the default instructions, equivalent to \fB\-mrecip\fR.
+.IP "\fBnone\fR" 4
+.IX Item "none"
+Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
+.IP "\fBdiv\fR" 4
+.IX Item "div"
+Enable the reciprocal approximation instructions for both 
+single and double precision.
+.IP "\fBdivf\fR" 4
+.IX Item "divf"
+Enable the single-precision reciprocal approximation instructions.
+.IP "\fBdivd\fR" 4
+.IX Item "divd"
+Enable the double-precision reciprocal approximation instructions.
+.IP "\fBrsqrt\fR" 4
+.IX Item "rsqrt"
+Enable the reciprocal square root approximation instructions for both
+single and double precision.
+.IP "\fBrsqrtf\fR" 4
+.IX Item "rsqrtf"
+Enable the single-precision reciprocal square root approximation instructions.
+.IP "\fBrsqrtd\fR" 4
+.IX Item "rsqrtd"
+Enable the double-precision reciprocal square root approximation instructions.
+.RE
+.RS 4
+.Sp
+So, for example, \fB\-mrecip=all,!rsqrtd\fR enables
+all of the reciprocal estimate instructions, except for the
+\&\f(CW\*(C`FRSQRTE\*(C'\fR, \f(CW\*(C`XSRSQRTEDP\*(C'\fR, and \f(CW\*(C`XVRSQRTEDP\*(C'\fR instructions
+which handle the double-precision reciprocal square root calculations.
+.RE
+.IP "\fB\-mrecip\-precision\fR" 4
+.IX Item "-mrecip-precision"
+.PD 0
+.IP "\fB\-mno\-recip\-precision\fR" 4
+.IX Item "-mno-recip-precision"
+.PD
+Assume (do not assume) that the reciprocal estimate instructions
+provide higher-precision estimates than is mandated by the PowerPC
+\&\s-1ABI.\s0  Selecting \fB\-mcpu=power6\fR, \fB\-mcpu=power7\fR or
+\&\fB\-mcpu=power8\fR automatically selects \fB\-mrecip\-precision\fR.
+The double-precision square root estimate instructions are not generated by
+default on low-precision machines, since they do not provide an
+estimate that converges after three steps.
+.IP "\fB\-mveclibabi=\fR\fItype\fR" 4
+.IX Item "-mveclibabi=type"
+Specifies the \s-1ABI\s0 type to use for vectorizing intrinsics using an
+external library.  The only type supported at present is \fBmass\fR,
+which specifies to use \s-1IBM\s0's Mathematical Acceleration Subsystem
+(\s-1MASS\s0) libraries for vectorizing intrinsics using external libraries.
+\&\s-1GCC\s0 currently emits calls to \f(CW\*(C`acosd2\*(C'\fR, \f(CW\*(C`acosf4\*(C'\fR,
+\&\f(CW\*(C`acoshd2\*(C'\fR, \f(CW\*(C`acoshf4\*(C'\fR, \f(CW\*(C`asind2\*(C'\fR, \f(CW\*(C`asinf4\*(C'\fR,
+\&\f(CW\*(C`asinhd2\*(C'\fR, \f(CW\*(C`asinhf4\*(C'\fR, \f(CW\*(C`atan2d2\*(C'\fR, \f(CW\*(C`atan2f4\*(C'\fR,
+\&\f(CW\*(C`atand2\*(C'\fR, \f(CW\*(C`atanf4\*(C'\fR, \f(CW\*(C`atanhd2\*(C'\fR, \f(CW\*(C`atanhf4\*(C'\fR,
+\&\f(CW\*(C`cbrtd2\*(C'\fR, \f(CW\*(C`cbrtf4\*(C'\fR, \f(CW\*(C`cosd2\*(C'\fR, \f(CW\*(C`cosf4\*(C'\fR,
+\&\f(CW\*(C`coshd2\*(C'\fR, \f(CW\*(C`coshf4\*(C'\fR, \f(CW\*(C`erfcd2\*(C'\fR, \f(CW\*(C`erfcf4\*(C'\fR,
+\&\f(CW\*(C`erfd2\*(C'\fR, \f(CW\*(C`erff4\*(C'\fR, \f(CW\*(C`exp2d2\*(C'\fR, \f(CW\*(C`exp2f4\*(C'\fR,
+\&\f(CW\*(C`expd2\*(C'\fR, \f(CW\*(C`expf4\*(C'\fR, \f(CW\*(C`expm1d2\*(C'\fR, \f(CW\*(C`expm1f4\*(C'\fR,
+\&\f(CW\*(C`hypotd2\*(C'\fR, \f(CW\*(C`hypotf4\*(C'\fR, \f(CW\*(C`lgammad2\*(C'\fR, \f(CW\*(C`lgammaf4\*(C'\fR,
+\&\f(CW\*(C`log10d2\*(C'\fR, \f(CW\*(C`log10f4\*(C'\fR, \f(CW\*(C`log1pd2\*(C'\fR, \f(CW\*(C`log1pf4\*(C'\fR,
+\&\f(CW\*(C`log2d2\*(C'\fR, \f(CW\*(C`log2f4\*(C'\fR, \f(CW\*(C`logd2\*(C'\fR, \f(CW\*(C`logf4\*(C'\fR,
+\&\f(CW\*(C`powd2\*(C'\fR, \f(CW\*(C`powf4\*(C'\fR, \f(CW\*(C`sind2\*(C'\fR, \f(CW\*(C`sinf4\*(C'\fR, \f(CW\*(C`sinhd2\*(C'\fR,
+\&\f(CW\*(C`sinhf4\*(C'\fR, \f(CW\*(C`sqrtd2\*(C'\fR, \f(CW\*(C`sqrtf4\*(C'\fR, \f(CW\*(C`tand2\*(C'\fR,
+\&\f(CW\*(C`tanf4\*(C'\fR, \f(CW\*(C`tanhd2\*(C'\fR, and \f(CW\*(C`tanhf4\*(C'\fR when generating code
+for power7.  Both \fB\-ftree\-vectorize\fR and
+\&\fB\-funsafe\-math\-optimizations\fR must also be enabled.  The \s-1MASS\s0
+libraries must be specified at link time.
+.IP "\fB\-mfriz\fR" 4
+.IX Item "-mfriz"
+.PD 0
+.IP "\fB\-mno\-friz\fR" 4
+.IX Item "-mno-friz"
+.PD
+Generate (do not generate) the \f(CW\*(C`friz\*(C'\fR instruction when the
+\&\fB\-funsafe\-math\-optimizations\fR option is used to optimize
+rounding of floating-point values to 64\-bit integer and back to floating
+point.  The \f(CW\*(C`friz\*(C'\fR instruction does not return the same value if
+the floating-point number is too large to fit in an integer.
+.IP "\fB\-mpointers\-to\-nested\-functions\fR" 4
+.IX Item "-mpointers-to-nested-functions"
+.PD 0
+.IP "\fB\-mno\-pointers\-to\-nested\-functions\fR" 4
+.IX Item "-mno-pointers-to-nested-functions"
+.PD
+Generate (do not generate) code to load up the static chain register
+(\f(CW\*(C`r11\*(C'\fR) when calling through a pointer on \s-1AIX\s0 and 64\-bit Linux
+systems where a function pointer points to a 3\-word descriptor giving
+the function address, \s-1TOC\s0 value to be loaded in register \f(CW\*(C`r2\*(C'\fR, and
+static chain value to be loaded in register \f(CW\*(C`r11\*(C'\fR.  The
+\&\fB\-mpointers\-to\-nested\-functions\fR is on by default.  You cannot
+call through pointers to nested functions or pointers
+to functions compiled in other languages that use the static chain if
+you use \fB\-mno\-pointers\-to\-nested\-functions\fR.
+.IP "\fB\-msave\-toc\-indirect\fR" 4
+.IX Item "-msave-toc-indirect"
+.PD 0
+.IP "\fB\-mno\-save\-toc\-indirect\fR" 4
+.IX Item "-mno-save-toc-indirect"
+.PD
+Generate (do not generate) code to save the \s-1TOC\s0 value in the reserved
+stack location in the function prologue if the function calls through
+a pointer on \s-1AIX\s0 and 64\-bit Linux systems.  If the \s-1TOC\s0 value is not
+saved in the prologue, it is saved just before the call through the
+pointer.  The \fB\-mno\-save\-toc\-indirect\fR option is the default.
+.IP "\fB\-mcompat\-align\-parm\fR" 4
+.IX Item "-mcompat-align-parm"
+.PD 0
+.IP "\fB\-mno\-compat\-align\-parm\fR" 4
+.IX Item "-mno-compat-align-parm"
+.PD
+Generate (do not generate) code to pass structure parameters with a
+maximum alignment of 64 bits, for compatibility with older versions
+of \s-1GCC.\s0
+.Sp
+Older versions of \s-1GCC\s0 (prior to 4.9.0) incorrectly did not align a
+structure parameter on a 128\-bit boundary when that structure contained
+a member requiring 128\-bit alignment.  This is corrected in more
+recent versions of \s-1GCC.\s0  This option may be used to generate code
+that is compatible with functions compiled with older versions of
+\&\s-1GCC.\s0
+.Sp
+The \fB\-mno\-compat\-align\-parm\fR option is the default.
+.IP "\fB\-mstack\-protector\-guard=\fR\fIguard\fR" 4
+.IX Item "-mstack-protector-guard=guard"
+.PD 0
+.IP "\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR" 4
+.IX Item "-mstack-protector-guard-reg=reg"
+.IP "\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR" 4
+.IX Item "-mstack-protector-guard-offset=offset"
+.IP "\fB\-mstack\-protector\-guard\-symbol=\fR\fIsymbol\fR" 4
+.IX Item "-mstack-protector-guard-symbol=symbol"
+.PD
+Generate stack protection code using canary at \fIguard\fR.  Supported
+locations are \fBglobal\fR for global canary or \fBtls\fR for per-thread
+canary in the \s-1TLS\s0 block (the default with \s-1GNU\s0 libc version 2.4 or later).
+.Sp
+With the latter choice the options
+\&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR and
+\&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR furthermore specify
+which register to use as base register for reading the canary, and from what
+offset from that base register. The default for those is as specified in the
+relevant \s-1ABI.\s0  \fB\-mstack\-protector\-guard\-symbol=\fR\fIsymbol\fR overrides
+the offset with a symbol reference to a canary in the \s-1TLS\s0 block.
+.PP
+\fI\s-1RX\s0 Options\fR
+.IX Subsection "RX Options"
+.PP
+These command-line options are defined for \s-1RX\s0 targets:
+.IP "\fB\-m64bit\-doubles\fR" 4
+.IX Item "-m64bit-doubles"
+.PD 0
+.IP "\fB\-m32bit\-doubles\fR" 4
+.IX Item "-m32bit-doubles"
+.PD
+Make the \f(CW\*(C`double\*(C'\fR data type be 64 bits (\fB\-m64bit\-doubles\fR)
+or 32 bits (\fB\-m32bit\-doubles\fR) in size.  The default is
+\&\fB\-m32bit\-doubles\fR.  \fINote\fR \s-1RX\s0 floating-point hardware only
+works on 32\-bit values, which is why the default is
+\&\fB\-m32bit\-doubles\fR.
+.IP "\fB\-fpu\fR" 4
+.IX Item "-fpu"
+.PD 0
+.IP "\fB\-nofpu\fR" 4
+.IX Item "-nofpu"
+.PD
+Enables (\fB\-fpu\fR) or disables (\fB\-nofpu\fR) the use of \s-1RX\s0
+floating-point hardware.  The default is enabled for the \s-1RX600\s0
+series and disabled for the \s-1RX200\s0 series.
+.Sp
+Floating-point instructions are only generated for 32\-bit floating-point 
+values, however, so the \s-1FPU\s0 hardware is not used for doubles if the
+\&\fB\-m64bit\-doubles\fR option is used.
+.Sp
+\&\fINote\fR If the \fB\-fpu\fR option is enabled then
+\&\fB\-funsafe\-math\-optimizations\fR is also enabled automatically.
+This is because the \s-1RX FPU\s0 instructions are themselves unsafe.
+.IP "\fB\-mcpu=\fR\fIname\fR" 4
+.IX Item "-mcpu=name"
+Selects the type of \s-1RX CPU\s0 to be targeted.  Currently three types are
+supported, the generic \fB\s-1RX600\s0\fR and \fB\s-1RX200\s0\fR series hardware and
+the specific \fB\s-1RX610\s0\fR \s-1CPU.\s0  The default is \fB\s-1RX600\s0\fR.
+.Sp
+The only difference between \fB\s-1RX600\s0\fR and \fB\s-1RX610\s0\fR is that the
+\&\fB\s-1RX610\s0\fR does not support the \f(CW\*(C`MVTIPL\*(C'\fR instruction.
+.Sp
+The \fB\s-1RX200\s0\fR series does not have a hardware floating-point unit
+and so \fB\-nofpu\fR is enabled by default when this type is
+selected.
+.IP "\fB\-mbig\-endian\-data\fR" 4
+.IX Item "-mbig-endian-data"
+.PD 0
+.IP "\fB\-mlittle\-endian\-data\fR" 4
+.IX Item "-mlittle-endian-data"
+.PD
+Store data (but not code) in the big-endian format.  The default is
+\&\fB\-mlittle\-endian\-data\fR, i.e. to store data in the little-endian
+format.
+.IP "\fB\-msmall\-data\-limit=\fR\fIN\fR" 4
+.IX Item "-msmall-data-limit=N"
+Specifies the maximum size in bytes of global and static variables
+which can be placed into the small data area.  Using the small data
+area can lead to smaller and faster code, but the size of area is
+limited and it is up to the programmer to ensure that the area does
+not overflow.  Also when the small data area is used one of the \s-1RX\s0's
+registers (usually \f(CW\*(C`r13\*(C'\fR) is reserved for use pointing to this
+area, so it is no longer available for use by the compiler.  This
+could result in slower and/or larger code if variables are pushed onto
+the stack instead of being held in this register.
+.Sp
+Note, common variables (variables that have not been initialized) and
+constants are not placed into the small data area as they are assigned
+to other sections in the output executable.
+.Sp
+The default value is zero, which disables this feature.  Note, this
+feature is not enabled by default with higher optimization levels
+(\fB\-O2\fR etc) because of the potentially detrimental effects of
+reserving a register.  It is up to the programmer to experiment and
+discover whether this feature is of benefit to their program.  See the
+description of the \fB\-mpid\fR option for a description of how the
+actual register to hold the small data area pointer is chosen.
+.IP "\fB\-msim\fR" 4
+.IX Item "-msim"
+.PD 0
+.IP "\fB\-mno\-sim\fR" 4
+.IX Item "-mno-sim"
+.PD
+Use the simulator runtime.  The default is to use the libgloss
+board-specific runtime.
+.IP "\fB\-mas100\-syntax\fR" 4
+.IX Item "-mas100-syntax"
+.PD 0
+.IP "\fB\-mno\-as100\-syntax\fR" 4
+.IX Item "-mno-as100-syntax"
+.PD
+When generating assembler output use a syntax that is compatible with
+Renesas's \s-1AS100\s0 assembler.  This syntax can also be handled by the \s-1GAS\s0
+assembler, but it has some restrictions so it is not generated by default.
+.IP "\fB\-mmax\-constant\-size=\fR\fIN\fR" 4
+.IX Item "-mmax-constant-size=N"
+Specifies the maximum size, in bytes, of a constant that can be used as
+an operand in a \s-1RX\s0 instruction.  Although the \s-1RX\s0 instruction set does
+allow constants of up to 4 bytes in length to be used in instructions,
+a longer value equates to a longer instruction.  Thus in some
+circumstances it can be beneficial to restrict the size of constants
+that are used in instructions.  Constants that are too big are instead
+placed into a constant pool and referenced via register indirection.
+.Sp
+The value \fIN\fR can be between 0 and 4.  A value of 0 (the default)
+or 4 means that constants of any size are allowed.
+.IP "\fB\-mrelax\fR" 4
+.IX Item "-mrelax"
+Enable linker relaxation.  Linker relaxation is a process whereby the
+linker attempts to reduce the size of a program by finding shorter
+versions of various instructions.  Disabled by default.
+.IP "\fB\-mint\-register=\fR\fIN\fR" 4
+.IX Item "-mint-register=N"
+Specify the number of registers to reserve for fast interrupt handler
+functions.  The value \fIN\fR can be between 0 and 4.  A value of 1
+means that register \f(CW\*(C`r13\*(C'\fR is reserved for the exclusive use
+of fast interrupt handlers.  A value of 2 reserves \f(CW\*(C`r13\*(C'\fR and
+\&\f(CW\*(C`r12\*(C'\fR.  A value of 3 reserves \f(CW\*(C`r13\*(C'\fR, \f(CW\*(C`r12\*(C'\fR and
+\&\f(CW\*(C`r11\*(C'\fR, and a value of 4 reserves \f(CW\*(C`r13\*(C'\fR through \f(CW\*(C`r10\*(C'\fR.
+A value of 0, the default, does not reserve any registers.
+.IP "\fB\-msave\-acc\-in\-interrupts\fR" 4
+.IX Item "-msave-acc-in-interrupts"
+Specifies that interrupt handler functions should preserve the
+accumulator register.  This is only necessary if normal code might use
+the accumulator register, for example because it performs 64\-bit
+multiplications.  The default is to ignore the accumulator as this
+makes the interrupt handlers faster.
+.IP "\fB\-mpid\fR" 4
+.IX Item "-mpid"
+.PD 0
+.IP "\fB\-mno\-pid\fR" 4
+.IX Item "-mno-pid"
+.PD
+Enables the generation of position independent data.  When enabled any
+access to constant data is done via an offset from a base address
+held in a register.  This allows the location of constant data to be
+determined at run time without requiring the executable to be
+relocated, which is a benefit to embedded applications with tight
+memory constraints.  Data that can be modified is not affected by this
+option.
+.Sp
+Note, using this feature reserves a register, usually \f(CW\*(C`r13\*(C'\fR, for
+the constant data base address.  This can result in slower and/or
+larger code, especially in complicated functions.
+.Sp
+The actual register chosen to hold the constant data base address
+depends upon whether the \fB\-msmall\-data\-limit\fR and/or the
+\&\fB\-mint\-register\fR command-line options are enabled.  Starting
+with register \f(CW\*(C`r13\*(C'\fR and proceeding downwards, registers are
+allocated first to satisfy the requirements of \fB\-mint\-register\fR,
+then \fB\-mpid\fR and finally \fB\-msmall\-data\-limit\fR.  Thus it
+is possible for the small data area register to be \f(CW\*(C`r8\*(C'\fR if both
+\&\fB\-mint\-register=4\fR and \fB\-mpid\fR are specified on the
+command line.
+.Sp
+By default this feature is not enabled.  The default can be restored
+via the \fB\-mno\-pid\fR command-line option.
+.IP "\fB\-mno\-warn\-multiple\-fast\-interrupts\fR" 4
+.IX Item "-mno-warn-multiple-fast-interrupts"
+.PD 0
+.IP "\fB\-mwarn\-multiple\-fast\-interrupts\fR" 4
+.IX Item "-mwarn-multiple-fast-interrupts"
+.PD
+Prevents \s-1GCC\s0 from issuing a warning message if it finds more than one
+fast interrupt handler when it is compiling a file.  The default is to
+issue a warning for each extra fast interrupt handler found, as the \s-1RX\s0
+only supports one such interrupt.
+.IP "\fB\-mallow\-string\-insns\fR" 4
+.IX Item "-mallow-string-insns"
+.PD 0
+.IP "\fB\-mno\-allow\-string\-insns\fR" 4
+.IX Item "-mno-allow-string-insns"
+.PD
+Enables or disables the use of the string manipulation instructions
+\&\f(CW\*(C`SMOVF\*(C'\fR, \f(CW\*(C`SCMPU\*(C'\fR, \f(CW\*(C`SMOVB\*(C'\fR, \f(CW\*(C`SMOVU\*(C'\fR, \f(CW\*(C`SUNTIL\*(C'\fR
+\&\f(CW\*(C`SWHILE\*(C'\fR and also the \f(CW\*(C`RMPA\*(C'\fR instruction.  These
+instructions may prefetch data, which is not safe to do if accessing
+an I/O register.  (See section 12.2.7 of the \s-1RX62N\s0 Group User's Manual
+for more information).
+.Sp
+The default is to allow these instructions, but it is not possible for
+\&\s-1GCC\s0 to reliably detect all circumstances where a string instruction
+might be used to access an I/O register, so their use cannot be
+disabled automatically.  Instead it is reliant upon the programmer to
+use the \fB\-mno\-allow\-string\-insns\fR option if their program
+accesses I/O space.
+.Sp
+When the instructions are enabled \s-1GCC\s0 defines the C preprocessor
+symbol \f(CW\*(C`_\|_RX_ALLOW_STRING_INSNS_\|_\*(C'\fR, otherwise it defines the
+symbol \f(CW\*(C`_\|_RX_DISALLOW_STRING_INSNS_\|_\*(C'\fR.
+.IP "\fB\-mjsr\fR" 4
+.IX Item "-mjsr"
+.PD 0
+.IP "\fB\-mno\-jsr\fR" 4
+.IX Item "-mno-jsr"
+.PD
+Use only (or not only) \f(CW\*(C`JSR\*(C'\fR instructions to access functions.
+This option can be used when code size exceeds the range of \f(CW\*(C`BSR\*(C'\fR
+instructions.  Note that \fB\-mno\-jsr\fR does not mean to not use
+\&\f(CW\*(C`JSR\*(C'\fR but instead means that any type of branch may be used.
+.PP
+\&\fINote:\fR The generic \s-1GCC\s0 command-line option \fB\-ffixed\-\fR\fIreg\fR
+has special significance to the \s-1RX\s0 port when used with the
+\&\f(CW\*(C`interrupt\*(C'\fR function attribute.  This attribute indicates a
+function intended to process fast interrupts.  \s-1GCC\s0 ensures
+that it only uses the registers \f(CW\*(C`r10\*(C'\fR, \f(CW\*(C`r11\*(C'\fR, \f(CW\*(C`r12\*(C'\fR
+and/or \f(CW\*(C`r13\*(C'\fR and only provided that the normal use of the
+corresponding registers have been restricted via the
+\&\fB\-ffixed\-\fR\fIreg\fR or \fB\-mint\-register\fR command-line
+options.
+.PP
+\fIS/390 and zSeries Options\fR
+.IX Subsection "S/390 and zSeries Options"
+.PP
+These are the \fB\-m\fR options defined for the S/390 and zSeries architecture.
+.IP "\fB\-mhard\-float\fR" 4
+.IX Item "-mhard-float"
+.PD 0
+.IP "\fB\-msoft\-float\fR" 4
+.IX Item "-msoft-float"
+.PD
+Use (do not use) the hardware floating-point instructions and registers
+for floating-point operations.  When \fB\-msoft\-float\fR is specified,
+functions in \fIlibgcc.a\fR are used to perform floating-point
+operations.  When \fB\-mhard\-float\fR is specified, the compiler
+generates \s-1IEEE\s0 floating-point instructions.  This is the default.
+.IP "\fB\-mhard\-dfp\fR" 4
+.IX Item "-mhard-dfp"
+.PD 0
+.IP "\fB\-mno\-hard\-dfp\fR" 4
+.IX Item "-mno-hard-dfp"
+.PD
+Use (do not use) the hardware decimal-floating-point instructions for
+decimal-floating-point operations.  When \fB\-mno\-hard\-dfp\fR is
+specified, functions in \fIlibgcc.a\fR are used to perform
+decimal-floating-point operations.  When \fB\-mhard\-dfp\fR is
+specified, the compiler generates decimal-floating-point hardware
+instructions.  This is the default for \fB\-march=z9\-ec\fR or higher.
+.IP "\fB\-mlong\-double\-64\fR" 4
+.IX Item "-mlong-double-64"
+.PD 0
+.IP "\fB\-mlong\-double\-128\fR" 4
+.IX Item "-mlong-double-128"
+.PD
+These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
+of 64 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the \f(CW\*(C`double\*(C'\fR
+type. This is the default.
+.IP "\fB\-mbackchain\fR" 4
+.IX Item "-mbackchain"
+.PD 0
+.IP "\fB\-mno\-backchain\fR" 4
+.IX Item "-mno-backchain"
+.PD
+Store (do not store) the address of the caller's frame as backchain pointer
+into the callee's stack frame.
+A backchain may be needed to allow debugging using tools that do not understand
+\&\s-1DWARF\s0 call frame information.
+When \fB\-mno\-packed\-stack\fR is in effect, the backchain pointer is stored
+at the bottom of the stack frame; when \fB\-mpacked\-stack\fR is in effect,
+the backchain is placed into the topmost word of the 96/160 byte register
+save area.
+.Sp
+In general, code compiled with \fB\-mbackchain\fR is call-compatible with
+code compiled with \fB\-mmo\-backchain\fR; however, use of the backchain
+for debugging purposes usually requires that the whole binary is built with
+\&\fB\-mbackchain\fR.  Note that the combination of \fB\-mbackchain\fR,
+\&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
+to build a linux kernel use \fB\-msoft\-float\fR.
+.Sp
+The default is to not maintain the backchain.
+.IP "\fB\-mpacked\-stack\fR" 4
+.IX Item "-mpacked-stack"
+.PD 0
+.IP "\fB\-mno\-packed\-stack\fR" 4
+.IX Item "-mno-packed-stack"
+.PD
+Use (do not use) the packed stack layout.  When \fB\-mno\-packed\-stack\fR is
+specified, the compiler uses the all fields of the 96/160 byte register save
+area only for their default purpose; unused fields still take up stack space.
+When \fB\-mpacked\-stack\fR is specified, register save slots are densely
+packed at the top of the register save area; unused space is reused for other
+purposes, allowing for more efficient use of the available stack space.
+However, when \fB\-mbackchain\fR is also in effect, the topmost word of
+the save area is always used to store the backchain, and the return address
+register is always saved two words below the backchain.
+.Sp
+As long as the stack frame backchain is not used, code generated with
+\&\fB\-mpacked\-stack\fR is call-compatible with code generated with
+\&\fB\-mno\-packed\-stack\fR.  Note that some non-FSF releases of \s-1GCC 2.95\s0 for
+S/390 or zSeries generated code that uses the stack frame backchain at run
+time, not just for debugging purposes.  Such code is not call-compatible
+with code compiled with \fB\-mpacked\-stack\fR.  Also, note that the
+combination of \fB\-mbackchain\fR,
+\&\fB\-mpacked\-stack\fR and \fB\-mhard\-float\fR is not supported.  In order
+to build a linux kernel use \fB\-msoft\-float\fR.
+.Sp
+The default is to not use the packed stack layout.
+.IP "\fB\-msmall\-exec\fR" 4
+.IX Item "-msmall-exec"
+.PD 0
+.IP "\fB\-mno\-small\-exec\fR" 4
+.IX Item "-mno-small-exec"
+.PD
+Generate (or do not generate) code using the \f(CW\*(C`bras\*(C'\fR instruction
+to do subroutine calls.
+This only works reliably if the total executable size does not
+exceed 64k.  The default is to use the \f(CW\*(C`basr\*(C'\fR instruction instead,
+which does not have this limitation.
+.IP "\fB\-m64\fR" 4
+.IX Item "-m64"
+.PD 0
+.IP "\fB\-m31\fR" 4
+.IX Item "-m31"
+.PD
+When \fB\-m31\fR is specified, generate code compliant to the
+GNU/Linux for S/390 \s-1ABI.\s0  When \fB\-m64\fR is specified, generate
+code compliant to the GNU/Linux for zSeries \s-1ABI.\s0  This allows \s-1GCC\s0 in
+particular to generate 64\-bit instructions.  For the \fBs390\fR
+targets, the default is \fB\-m31\fR, while the \fBs390x\fR
+targets default to \fB\-m64\fR.
+.IP "\fB\-mzarch\fR" 4
+.IX Item "-mzarch"
+.PD 0
+.IP "\fB\-mesa\fR" 4
+.IX Item "-mesa"
+.PD
+When \fB\-mzarch\fR is specified, generate code using the
+instructions available on z/Architecture.
+When \fB\-mesa\fR is specified, generate code using the
+instructions available on \s-1ESA/390.\s0  Note that \fB\-mesa\fR is
+not possible with \fB\-m64\fR.
+When generating code compliant to the GNU/Linux for S/390 \s-1ABI,\s0
+the default is \fB\-mesa\fR.  When generating code compliant
+to the GNU/Linux for zSeries \s-1ABI,\s0 the default is \fB\-mzarch\fR.
+.IP "\fB\-mhtm\fR" 4
+.IX Item "-mhtm"
+.PD 0
+.IP "\fB\-mno\-htm\fR" 4
+.IX Item "-mno-htm"
+.PD
+The \fB\-mhtm\fR option enables a set of builtins making use of
+instructions available with the transactional execution facility
+introduced with the \s-1IBM\s0 zEnterprise \s-1EC12\s0 machine generation
+\&\fBS/390 System z Built-in Functions\fR.
+\&\fB\-mhtm\fR is enabled by default when using \fB\-march=zEC12\fR.
+.IP "\fB\-mvx\fR" 4
+.IX Item "-mvx"
+.PD 0
+.IP "\fB\-mno\-vx\fR" 4
+.IX Item "-mno-vx"
+.PD
+When \fB\-mvx\fR is specified, generate code using the instructions
+available with the vector extension facility introduced with the \s-1IBM\s0
+z13 machine generation.
+This option changes the \s-1ABI\s0 for some vector type values with regard to
+alignment and calling conventions.  In case vector type values are
+being used in an ABI-relevant context a \s-1GAS\s0 \fB.gnu_attribute\fR
+command will be added to mark the resulting binary with the \s-1ABI\s0 used.
+\&\fB\-mvx\fR is enabled by default when using \fB\-march=z13\fR.
+.IP "\fB\-mzvector\fR" 4
+.IX Item "-mzvector"
+.PD 0
+.IP "\fB\-mno\-zvector\fR" 4
+.IX Item "-mno-zvector"
+.PD
+The \fB\-mzvector\fR option enables vector language extensions and
+builtins using instructions available with the vector extension
+facility introduced with the \s-1IBM\s0 z13 machine generation.
+This option adds support for \fBvector\fR to be used as a keyword to
+define vector type variables and arguments.  \fBvector\fR is only
+available when \s-1GNU\s0 extensions are enabled.  It will not be expanded
+when requesting strict standard compliance e.g. with \fB\-std=c99\fR.
+In addition to the \s-1GCC\s0 low-level builtins \fB\-mzvector\fR enables
+a set of builtins added for compatibility with AltiVec-style
+implementations like Power and Cell.  In order to make use of these
+builtins the header file \fIvecintrin.h\fR needs to be included.
+\&\fB\-mzvector\fR is disabled by default.
+.IP "\fB\-mmvcle\fR" 4
+.IX Item "-mmvcle"
+.PD 0
+.IP "\fB\-mno\-mvcle\fR" 4
+.IX Item "-mno-mvcle"
+.PD
+Generate (or do not generate) code using the \f(CW\*(C`mvcle\*(C'\fR instruction
+to perform block moves.  When \fB\-mno\-mvcle\fR is specified,
+use a \f(CW\*(C`mvc\*(C'\fR loop instead.  This is the default unless optimizing for
+size.
+.IP "\fB\-mdebug\fR" 4
+.IX Item "-mdebug"
+.PD 0
+.IP "\fB\-mno\-debug\fR" 4
+.IX Item "-mno-debug"
+.PD
+Print (or do not print) additional debug information when compiling.
+The default is to not print debug information.
+.IP "\fB\-march=\fR\fIcpu-type\fR" 4
+.IX Item "-march=cpu-type"
+Generate code that runs on \fIcpu-type\fR, which is the name of a
+system representing a certain processor type.  Possible values for
+\&\fIcpu-type\fR are \fBz900\fR/\fBarch5\fR, \fBz990\fR/\fBarch6\fR,
+\&\fBz9\-109\fR, \fBz9\-ec\fR/\fBarch7\fR, \fBz10\fR/\fBarch8\fR,
+\&\fBz196\fR/\fBarch9\fR, \fBzEC12\fR, \fBz13\fR/\fBarch11\fR,
+\&\fBz14\fR/\fBarch12\fR, and \fBnative\fR.
+.Sp
+The default is \fB\-march=z900\fR.
+.Sp
+Specifying \fBnative\fR as cpu type can be used to select the best
+architecture option for the host processor.
+\&\fB\-march=native\fR has no effect if \s-1GCC\s0 does not recognize the
+processor.
+.IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
+.IX Item "-mtune=cpu-type"
+Tune to \fIcpu-type\fR everything applicable about the generated code,
+except for the \s-1ABI\s0 and the set of available instructions.
+The list of \fIcpu-type\fR values is the same as for \fB\-march\fR.
+The default is the value used for \fB\-march\fR.
+.IP "\fB\-mtpf\-trace\fR" 4
+.IX Item "-mtpf-trace"
+.PD 0
+.IP "\fB\-mno\-tpf\-trace\fR" 4
+.IX Item "-mno-tpf-trace"
+.PD
+Generate code that adds (does not add) in \s-1TPF OS\s0 specific branches to trace
+routines in the operating system.  This option is off by default, even
+when compiling for the \s-1TPF OS.\s0
+.IP "\fB\-mfused\-madd\fR" 4
+.IX Item "-mfused-madd"
+.PD 0
+.IP "\fB\-mno\-fused\-madd\fR" 4
+.IX Item "-mno-fused-madd"
+.PD
+Generate code that uses (does not use) the floating-point multiply and
+accumulate instructions.  These instructions are generated by default if
+hardware floating point is used.
+.IP "\fB\-mwarn\-framesize=\fR\fIframesize\fR" 4
+.IX Item "-mwarn-framesize=framesize"
+Emit a warning if the current function exceeds the given frame size.  Because
+this is a compile-time check it doesn't need to be a real problem when the program
+runs.  It is intended to identify functions that most probably cause
+a stack overflow.  It is useful to be used in an environment with limited stack
+size e.g. the linux kernel.
+.IP "\fB\-mwarn\-dynamicstack\fR" 4
+.IX Item "-mwarn-dynamicstack"
+Emit a warning if the function calls \f(CW\*(C`alloca\*(C'\fR or uses dynamically-sized
+arrays.  This is generally a bad idea with a limited stack size.
+.IP "\fB\-mstack\-guard=\fR\fIstack-guard\fR" 4
+.IX Item "-mstack-guard=stack-guard"
+.PD 0
+.IP "\fB\-mstack\-size=\fR\fIstack-size\fR" 4
+.IX Item "-mstack-size=stack-size"
+.PD
+If these options are provided the S/390 back end emits additional instructions in
+the function prologue that trigger a trap if the stack size is \fIstack-guard\fR
+bytes above the \fIstack-size\fR (remember that the stack on S/390 grows downward).
+If the \fIstack-guard\fR option is omitted the smallest power of 2 larger than
+the frame size of the compiled function is chosen.
+These options are intended to be used to help debugging stack overflow problems.
+The additionally emitted code causes only little overhead and hence can also be
+used in production-like systems without greater performance degradation.  The given
+values have to be exact powers of 2 and \fIstack-size\fR has to be greater than
+\&\fIstack-guard\fR without exceeding 64k.
+In order to be efficient the extra code makes the assumption that the stack starts
+at an address aligned to the value given by \fIstack-size\fR.
+The \fIstack-guard\fR option can only be used in conjunction with \fIstack-size\fR.
+.IP "\fB\-mhotpatch=\fR\fIpre-halfwords\fR\fB,\fR\fIpost-halfwords\fR" 4
+.IX Item "-mhotpatch=pre-halfwords,post-halfwords"
+If the hotpatch option is enabled, a \*(L"hot-patching\*(R" function
+prologue is generated for all functions in the compilation unit.
+The funtion label is prepended with the given number of two-byte
+\&\s-1NOP\s0 instructions (\fIpre-halfwords\fR, maximum 1000000).  After
+the label, 2 * \fIpost-halfwords\fR bytes are appended, using the
+largest \s-1NOP\s0 like instructions the architecture allows (maximum
+1000000).
+.Sp
+If both arguments are zero, hotpatching is disabled.
+.Sp
+This option can be overridden for individual functions with the
+\&\f(CW\*(C`hotpatch\*(C'\fR attribute.
+.PP
+\fIScore Options\fR
+.IX Subsection "Score Options"
+.PP
+These options are defined for Score implementations:
+.IP "\fB\-meb\fR" 4
+.IX Item "-meb"
+Compile code for big-endian mode.  This is the default.
+.IP "\fB\-mel\fR" 4
+.IX Item "-mel"
+Compile code for little-endian mode.
+.IP "\fB\-mnhwloop\fR" 4
+.IX Item "-mnhwloop"
+Disable generation of \f(CW\*(C`bcnz\*(C'\fR instructions.
+.IP "\fB\-muls\fR" 4
+.IX Item "-muls"
+Enable generation of unaligned load and store instructions.
+.IP "\fB\-mmac\fR" 4
+.IX Item "-mmac"
+Enable the use of multiply-accumulate instructions. Disabled by default.
+.IP "\fB\-mscore5\fR" 4
+.IX Item "-mscore5"
+Specify the \s-1SCORE5\s0 as the target architecture.
+.IP "\fB\-mscore5u\fR" 4
+.IX Item "-mscore5u"
+Specify the \s-1SCORE5U\s0 of the target architecture.
+.IP "\fB\-mscore7\fR" 4
+.IX Item "-mscore7"
+Specify the \s-1SCORE7\s0 as the target architecture. This is the default.
+.IP "\fB\-mscore7d\fR" 4
+.IX Item "-mscore7d"
+Specify the \s-1SCORE7D\s0 as the target architecture.
+.PP
+\fI\s-1SH\s0 Options\fR
+.IX Subsection "SH Options"
+.PP
+These \fB\-m\fR options are defined for the \s-1SH\s0 implementations:
+.IP "\fB\-m1\fR" 4
+.IX Item "-m1"
+Generate code for the \s-1SH1.\s0
+.IP "\fB\-m2\fR" 4
+.IX Item "-m2"
+Generate code for the \s-1SH2.\s0
+.IP "\fB\-m2e\fR" 4
+.IX Item "-m2e"
+Generate code for the SH2e.
+.IP "\fB\-m2a\-nofpu\fR" 4
+.IX Item "-m2a-nofpu"
+Generate code for the SH2a without \s-1FPU,\s0 or for a SH2a\-FPU in such a way
+that the floating-point unit is not used.
+.IP "\fB\-m2a\-single\-only\fR" 4
+.IX Item "-m2a-single-only"
+Generate code for the SH2a\-FPU, in such a way that no double-precision
+floating-point operations are used.
+.IP "\fB\-m2a\-single\fR" 4
+.IX Item "-m2a-single"
+Generate code for the SH2a\-FPU assuming the floating-point unit is in
+single-precision mode by default.
+.IP "\fB\-m2a\fR" 4
+.IX Item "-m2a"
+Generate code for the SH2a\-FPU assuming the floating-point unit is in
+double-precision mode by default.
+.IP "\fB\-m3\fR" 4
+.IX Item "-m3"
+Generate code for the \s-1SH3.\s0
+.IP "\fB\-m3e\fR" 4
+.IX Item "-m3e"
+Generate code for the SH3e.
+.IP "\fB\-m4\-nofpu\fR" 4
+.IX Item "-m4-nofpu"
+Generate code for the \s-1SH4\s0 without a floating-point unit.
+.IP "\fB\-m4\-single\-only\fR" 4
+.IX Item "-m4-single-only"
+Generate code for the \s-1SH4\s0 with a floating-point unit that only
+supports single-precision arithmetic.
+.IP "\fB\-m4\-single\fR" 4
+.IX Item "-m4-single"
+Generate code for the \s-1SH4\s0 assuming the floating-point unit is in
+single-precision mode by default.
+.IP "\fB\-m4\fR" 4
+.IX Item "-m4"
+Generate code for the \s-1SH4.\s0
+.IP "\fB\-m4\-100\fR" 4
+.IX Item "-m4-100"
+Generate code for \s-1SH4\-100.\s0
+.IP "\fB\-m4\-100\-nofpu\fR" 4
+.IX Item "-m4-100-nofpu"
+Generate code for \s-1SH4\-100\s0 in such a way that the
+floating-point unit is not used.
+.IP "\fB\-m4\-100\-single\fR" 4
+.IX Item "-m4-100-single"
+Generate code for \s-1SH4\-100\s0 assuming the floating-point unit is in
+single-precision mode by default.
+.IP "\fB\-m4\-100\-single\-only\fR" 4
+.IX Item "-m4-100-single-only"
+Generate code for \s-1SH4\-100\s0 in such a way that no double-precision
+floating-point operations are used.
+.IP "\fB\-m4\-200\fR" 4
+.IX Item "-m4-200"
+Generate code for \s-1SH4\-200.\s0
+.IP "\fB\-m4\-200\-nofpu\fR" 4
+.IX Item "-m4-200-nofpu"
+Generate code for \s-1SH4\-200\s0 without in such a way that the
+floating-point unit is not used.
+.IP "\fB\-m4\-200\-single\fR" 4
+.IX Item "-m4-200-single"
+Generate code for \s-1SH4\-200\s0 assuming the floating-point unit is in
+single-precision mode by default.
+.IP "\fB\-m4\-200\-single\-only\fR" 4
+.IX Item "-m4-200-single-only"
+Generate code for \s-1SH4\-200\s0 in such a way that no double-precision
+floating-point operations are used.
+.IP "\fB\-m4\-300\fR" 4
+.IX Item "-m4-300"
+Generate code for \s-1SH4\-300.\s0
+.IP "\fB\-m4\-300\-nofpu\fR" 4
+.IX Item "-m4-300-nofpu"
+Generate code for \s-1SH4\-300\s0 without in such a way that the
+floating-point unit is not used.
+.IP "\fB\-m4\-300\-single\fR" 4
+.IX Item "-m4-300-single"
+Generate code for \s-1SH4\-300\s0 in such a way that no double-precision
+floating-point operations are used.
+.IP "\fB\-m4\-300\-single\-only\fR" 4
+.IX Item "-m4-300-single-only"
+Generate code for \s-1SH4\-300\s0 in such a way that no double-precision
+floating-point operations are used.
+.IP "\fB\-m4\-340\fR" 4
+.IX Item "-m4-340"
+Generate code for \s-1SH4\-340\s0 (no \s-1MMU,\s0 no \s-1FPU\s0).
+.IP "\fB\-m4\-500\fR" 4
+.IX Item "-m4-500"
+Generate code for \s-1SH4\-500\s0 (no \s-1FPU\s0).  Passes \fB\-isa=sh4\-nofpu\fR to the
+assembler.
+.IP "\fB\-m4a\-nofpu\fR" 4
+.IX Item "-m4a-nofpu"
+Generate code for the SH4al\-dsp, or for a SH4a in such a way that the
+floating-point unit is not used.
+.IP "\fB\-m4a\-single\-only\fR" 4
+.IX Item "-m4a-single-only"
+Generate code for the SH4a, in such a way that no double-precision
+floating-point operations are used.
+.IP "\fB\-m4a\-single\fR" 4
+.IX Item "-m4a-single"
+Generate code for the SH4a assuming the floating-point unit is in
+single-precision mode by default.
+.IP "\fB\-m4a\fR" 4
+.IX Item "-m4a"
+Generate code for the SH4a.
+.IP "\fB\-m4al\fR" 4
+.IX Item "-m4al"
+Same as \fB\-m4a\-nofpu\fR, except that it implicitly passes
+\&\fB\-dsp\fR to the assembler.  \s-1GCC\s0 doesn't generate any \s-1DSP\s0
+instructions at the moment.
+.IP "\fB\-mb\fR" 4
+.IX Item "-mb"
+Compile code for the processor in big-endian mode.
+.IP "\fB\-ml\fR" 4
+.IX Item "-ml"
+Compile code for the processor in little-endian mode.
+.IP "\fB\-mdalign\fR" 4
+.IX Item "-mdalign"
+Align doubles at 64\-bit boundaries.  Note that this changes the calling
+conventions, and thus some functions from the standard C library do
+not work unless you recompile it first with \fB\-mdalign\fR.
+.IP "\fB\-mrelax\fR" 4
+.IX Item "-mrelax"
+Shorten some address references at link time, when possible; uses the
+linker option \fB\-relax\fR.
+.IP "\fB\-mbigtable\fR" 4
+.IX Item "-mbigtable"
+Use 32\-bit offsets in \f(CW\*(C`switch\*(C'\fR tables.  The default is to use
+16\-bit offsets.
+.IP "\fB\-mbitops\fR" 4
+.IX Item "-mbitops"
+Enable the use of bit manipulation instructions on \s-1SH2A.\s0
+.IP "\fB\-mfmovd\fR" 4
+.IX Item "-mfmovd"
+Enable the use of the instruction \f(CW\*(C`fmovd\*(C'\fR.  Check \fB\-mdalign\fR for
+alignment constraints.
+.IP "\fB\-mrenesas\fR" 4
+.IX Item "-mrenesas"
+Comply with the calling conventions defined by Renesas.
+.IP "\fB\-mno\-renesas\fR" 4
+.IX Item "-mno-renesas"
+Comply with the calling conventions defined for \s-1GCC\s0 before the Renesas
+conventions were available.  This option is the default for all
+targets of the \s-1SH\s0 toolchain.
+.IP "\fB\-mnomacsave\fR" 4
+.IX Item "-mnomacsave"
+Mark the \f(CW\*(C`MAC\*(C'\fR register as call-clobbered, even if
+\&\fB\-mrenesas\fR is given.
+.IP "\fB\-mieee\fR" 4
+.IX Item "-mieee"
+.PD 0
+.IP "\fB\-mno\-ieee\fR" 4
+.IX Item "-mno-ieee"
+.PD
+Control the \s-1IEEE\s0 compliance of floating-point comparisons, which affects the
+handling of cases where the result of a comparison is unordered.  By default
+\&\fB\-mieee\fR is implicitly enabled.  If \fB\-ffinite\-math\-only\fR is
+enabled \fB\-mno\-ieee\fR is implicitly set, which results in faster
+floating-point greater-equal and less-equal comparisons.  The implicit settings
+can be overridden by specifying either \fB\-mieee\fR or \fB\-mno\-ieee\fR.
+.IP "\fB\-minline\-ic_invalidate\fR" 4
+.IX Item "-minline-ic_invalidate"
+Inline code to invalidate instruction cache entries after setting up
+nested function trampolines.
+This option has no effect if \fB\-musermode\fR is in effect and the selected
+code generation option (e.g. \fB\-m4\fR) does not allow the use of the \f(CW\*(C`icbi\*(C'\fR
+instruction.
+If the selected code generation option does not allow the use of the \f(CW\*(C`icbi\*(C'\fR
+instruction, and \fB\-musermode\fR is not in effect, the inlined code
+manipulates the instruction cache address array directly with an associative
+write.  This not only requires privileged mode at run time, but it also
+fails if the cache line had been mapped via the \s-1TLB\s0 and has become unmapped.
+.IP "\fB\-misize\fR" 4
+.IX Item "-misize"
+Dump instruction size and location in the assembly code.
+.IP "\fB\-mpadstruct\fR" 4
+.IX Item "-mpadstruct"
+This option is deprecated.  It pads structures to multiple of 4 bytes,
+which is incompatible with the \s-1SH ABI.\s0
+.IP "\fB\-matomic\-model=\fR\fImodel\fR" 4
+.IX Item "-matomic-model=model"
+Sets the model of atomic operations and additional parameters as a comma
+separated list.  For details on the atomic built-in functions see
+\&\fB_\|_atomic Builtins\fR.  The following models and parameters are supported:
+.RS 4
+.IP "\fBnone\fR" 4
+.IX Item "none"
+Disable compiler generated atomic sequences and emit library calls for atomic
+operations.  This is the default if the target is not \f(CW\*(C`sh*\-*\-linux*\*(C'\fR.
+.IP "\fBsoft-gusa\fR" 4
+.IX Item "soft-gusa"
+Generate GNU/Linux compatible gUSA software atomic sequences for the atomic
+built-in functions.  The generated atomic sequences require additional support
+from the interrupt/exception handling code of the system and are only suitable
+for SH3* and SH4* single-core systems.  This option is enabled by default when
+the target is \f(CW\*(C`sh*\-*\-linux*\*(C'\fR and SH3* or SH4*.  When the target is \s-1SH4A,\s0
+this option also partially utilizes the hardware atomic instructions
+\&\f(CW\*(C`movli.l\*(C'\fR and \f(CW\*(C`movco.l\*(C'\fR to create more efficient code, unless
+\&\fBstrict\fR is specified.
+.IP "\fBsoft-tcb\fR" 4
+.IX Item "soft-tcb"
+Generate software atomic sequences that use a variable in the thread control
+block.  This is a variation of the gUSA sequences which can also be used on
+SH1* and SH2* targets.  The generated atomic sequences require additional
+support from the interrupt/exception handling code of the system and are only
+suitable for single-core systems.  When using this model, the \fBgbr\-offset=\fR
+parameter has to be specified as well.
+.IP "\fBsoft-imask\fR" 4
+.IX Item "soft-imask"
+Generate software atomic sequences that temporarily disable interrupts by
+setting \f(CW\*(C`SR.IMASK = 1111\*(C'\fR.  This model works only when the program runs
+in privileged mode and is only suitable for single-core systems.  Additional
+support from the interrupt/exception handling code of the system is not
+required.  This model is enabled by default when the target is
+\&\f(CW\*(C`sh*\-*\-linux*\*(C'\fR and SH1* or SH2*.
+.IP "\fBhard-llcs\fR" 4
+.IX Item "hard-llcs"
+Generate hardware atomic sequences using the \f(CW\*(C`movli.l\*(C'\fR and \f(CW\*(C`movco.l\*(C'\fR
+instructions only.  This is only available on \s-1SH4A\s0 and is suitable for
+multi-core systems.  Since the hardware instructions support only 32 bit atomic
+variables access to 8 or 16 bit variables is emulated with 32 bit accesses.
+Code compiled with this option is also compatible with other software
+atomic model interrupt/exception handling systems if executed on an \s-1SH4A\s0
+system.  Additional support from the interrupt/exception handling code of the
+system is not required for this model.
+.IP "\fBgbr\-offset=\fR" 4
+.IX Item "gbr-offset="
+This parameter specifies the offset in bytes of the variable in the thread
+control block structure that should be used by the generated atomic sequences
+when the \fBsoft-tcb\fR model has been selected.  For other models this
+parameter is ignored.  The specified value must be an integer multiple of four
+and in the range 0\-1020.
+.IP "\fBstrict\fR" 4
+.IX Item "strict"
+This parameter prevents mixed usage of multiple atomic models, even if they
+are compatible, and makes the compiler generate atomic sequences of the
+specified model only.
+.RE
+.RS 4
+.RE
+.IP "\fB\-mtas\fR" 4
+.IX Item "-mtas"
+Generate the \f(CW\*(C`tas.b\*(C'\fR opcode for \f(CW\*(C`_\|_atomic_test_and_set\*(C'\fR.
+Notice that depending on the particular hardware and software configuration
+this can degrade overall performance due to the operand cache line flushes
+that are implied by the \f(CW\*(C`tas.b\*(C'\fR instruction.  On multi-core \s-1SH4A\s0
+processors the \f(CW\*(C`tas.b\*(C'\fR instruction must be used with caution since it
+can result in data corruption for certain cache configurations.
+.IP "\fB\-mprefergot\fR" 4
+.IX Item "-mprefergot"
+When generating position-independent code, emit function calls using
+the Global Offset Table instead of the Procedure Linkage Table.
+.IP "\fB\-musermode\fR" 4
+.IX Item "-musermode"
+.PD 0
+.IP "\fB\-mno\-usermode\fR" 4
+.IX Item "-mno-usermode"
+.PD
+Don't allow (allow) the compiler generating privileged mode code.  Specifying
+\&\fB\-musermode\fR also implies \fB\-mno\-inline\-ic_invalidate\fR if the
+inlined code would not work in user mode.  \fB\-musermode\fR is the default
+when the target is \f(CW\*(C`sh*\-*\-linux*\*(C'\fR.  If the target is SH1* or SH2*
+\&\fB\-musermode\fR has no effect, since there is no user mode.
+.IP "\fB\-multcost=\fR\fInumber\fR" 4
+.IX Item "-multcost=number"
+Set the cost to assume for a multiply insn.
+.IP "\fB\-mdiv=\fR\fIstrategy\fR" 4
+.IX Item "-mdiv=strategy"
+Set the division strategy to be used for integer division operations.
+\&\fIstrategy\fR can be one of:
+.RS 4
+.IP "\fBcall\-div1\fR" 4
+.IX Item "call-div1"
+Calls a library function that uses the single-step division instruction
+\&\f(CW\*(C`div1\*(C'\fR to perform the operation.  Division by zero calculates an
+unspecified result and does not trap.  This is the default except for \s-1SH4,
+SH2A\s0 and SHcompact.
+.IP "\fBcall-fp\fR" 4
+.IX Item "call-fp"
+Calls a library function that performs the operation in double precision
+floating point.  Division by zero causes a floating-point exception.  This is
+the default for SHcompact with \s-1FPU.\s0  Specifying this for targets that do not
+have a double precision \s-1FPU\s0 defaults to \f(CW\*(C`call\-div1\*(C'\fR.
+.IP "\fBcall-table\fR" 4
+.IX Item "call-table"
+Calls a library function that uses a lookup table for small divisors and
+the \f(CW\*(C`div1\*(C'\fR instruction with case distinction for larger divisors.  Division
+by zero calculates an unspecified result and does not trap.  This is the default
+for \s-1SH4.\s0  Specifying this for targets that do not have dynamic shift
+instructions defaults to \f(CW\*(C`call\-div1\*(C'\fR.
+.RE
+.RS 4
+.Sp
+When a division strategy has not been specified the default strategy is
+selected based on the current target.  For \s-1SH2A\s0 the default strategy is to
+use the \f(CW\*(C`divs\*(C'\fR and \f(CW\*(C`divu\*(C'\fR instructions instead of library function
+calls.
+.RE
+.IP "\fB\-maccumulate\-outgoing\-args\fR" 4
+.IX Item "-maccumulate-outgoing-args"
+Reserve space once for outgoing arguments in the function prologue rather
+than around each call.  Generally beneficial for performance and size.  Also
+needed for unwinding to avoid changing the stack frame around conditional code.
+.IP "\fB\-mdivsi3_libfunc=\fR\fIname\fR" 4
+.IX Item "-mdivsi3_libfunc=name"
+Set the name of the library function used for 32\-bit signed division to
+\&\fIname\fR.
+This only affects the name used in the \fBcall\fR division strategies, and
+the compiler still expects the same sets of input/output/clobbered registers as
+if this option were not present.
+.IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
+.IX Item "-mfixed-range=register-range"
+Generate code treating the given register range as fixed registers.
+A fixed register is one that the register allocator cannot use.  This is
+useful when compiling kernel code.  A register range is specified as
+two registers separated by a dash.  Multiple register ranges can be
+specified separated by a comma.
+.IP "\fB\-mbranch\-cost=\fR\fInum\fR" 4
+.IX Item "-mbranch-cost=num"
+Assume \fInum\fR to be the cost for a branch instruction.  Higher numbers
+make the compiler try to generate more branch-free code if possible.  
+If not specified the value is selected depending on the processor type that
+is being compiled for.
+.IP "\fB\-mzdcbranch\fR" 4
+.IX Item "-mzdcbranch"
+.PD 0
+.IP "\fB\-mno\-zdcbranch\fR" 4
+.IX Item "-mno-zdcbranch"
+.PD
+Assume (do not assume) that zero displacement conditional branch instructions
+\&\f(CW\*(C`bt\*(C'\fR and \f(CW\*(C`bf\*(C'\fR are fast.  If \fB\-mzdcbranch\fR is specified, the
+compiler prefers zero displacement branch code sequences.  This is
+enabled by default when generating code for \s-1SH4\s0 and \s-1SH4A.\s0  It can be explicitly
+disabled by specifying \fB\-mno\-zdcbranch\fR.
+.IP "\fB\-mcbranch\-force\-delay\-slot\fR" 4
+.IX Item "-mcbranch-force-delay-slot"
+Force the usage of delay slots for conditional branches, which stuffs the delay
+slot with a \f(CW\*(C`nop\*(C'\fR if a suitable instruction cannot be found.  By default
+this option is disabled.  It can be enabled to work around hardware bugs as
+found in the original \s-1SH7055.\s0
+.IP "\fB\-mfused\-madd\fR" 4
+.IX Item "-mfused-madd"
+.PD 0
+.IP "\fB\-mno\-fused\-madd\fR" 4
+.IX Item "-mno-fused-madd"
+.PD
+Generate code that uses (does not use) the floating-point multiply and
+accumulate instructions.  These instructions are generated by default
+if hardware floating point is used.  The machine-dependent
+\&\fB\-mfused\-madd\fR option is now mapped to the machine-independent
+\&\fB\-ffp\-contract=fast\fR option, and \fB\-mno\-fused\-madd\fR is
+mapped to \fB\-ffp\-contract=off\fR.
+.IP "\fB\-mfsca\fR" 4
+.IX Item "-mfsca"
+.PD 0
+.IP "\fB\-mno\-fsca\fR" 4
+.IX Item "-mno-fsca"
+.PD
+Allow or disallow the compiler to emit the \f(CW\*(C`fsca\*(C'\fR instruction for sine
+and cosine approximations.  The option \fB\-mfsca\fR must be used in
+combination with \fB\-funsafe\-math\-optimizations\fR.  It is enabled by default
+when generating code for \s-1SH4A.\s0  Using \fB\-mno\-fsca\fR disables sine and cosine
+approximations even if \fB\-funsafe\-math\-optimizations\fR is in effect.
+.IP "\fB\-mfsrra\fR" 4
+.IX Item "-mfsrra"
+.PD 0
+.IP "\fB\-mno\-fsrra\fR" 4
+.IX Item "-mno-fsrra"
+.PD
+Allow or disallow the compiler to emit the \f(CW\*(C`fsrra\*(C'\fR instruction for
+reciprocal square root approximations.  The option \fB\-mfsrra\fR must be used
+in combination with \fB\-funsafe\-math\-optimizations\fR and
+\&\fB\-ffinite\-math\-only\fR.  It is enabled by default when generating code for
+\&\s-1SH4A.\s0  Using \fB\-mno\-fsrra\fR disables reciprocal square root approximations
+even if \fB\-funsafe\-math\-optimizations\fR and \fB\-ffinite\-math\-only\fR are
+in effect.
+.IP "\fB\-mpretend\-cmove\fR" 4
+.IX Item "-mpretend-cmove"
+Prefer zero-displacement conditional branches for conditional move instruction
+patterns.  This can result in faster code on the \s-1SH4\s0 processor.
+.IP "\fB\-mfdpic\fR" 4
+.IX Item "-mfdpic"
+Generate code using the \s-1FDPIC ABI.\s0
+.PP
+\fISolaris 2 Options\fR
+.IX Subsection "Solaris 2 Options"
+.PP
+These \fB\-m\fR options are supported on Solaris 2:
+.IP "\fB\-mclear\-hwcap\fR" 4
+.IX Item "-mclear-hwcap"
+\&\fB\-mclear\-hwcap\fR tells the compiler to remove the hardware
+capabilities generated by the Solaris assembler.  This is only necessary
+when object files use \s-1ISA\s0 extensions not supported by the current
+machine, but check at runtime whether or not to use them.
+.IP "\fB\-mimpure\-text\fR" 4
+.IX Item "-mimpure-text"
+\&\fB\-mimpure\-text\fR, used in addition to \fB\-shared\fR, tells
+the compiler to not pass \fB\-z text\fR to the linker when linking a
+shared object.  Using this option, you can link position-dependent
+code into a shared object.
+.Sp
+\&\fB\-mimpure\-text\fR suppresses the \*(L"relocations remain against
+allocatable but non-writable sections\*(R" linker error message.
+However, the necessary relocations trigger copy-on-write, and the
+shared object is not actually shared across processes.  Instead of
+using \fB\-mimpure\-text\fR, you should compile all source code with
+\&\fB\-fpic\fR or \fB\-fPIC\fR.
+.PP
+These switches are supported in addition to the above on Solaris 2:
+.IP "\fB\-pthreads\fR" 4
+.IX Item "-pthreads"
+This is a synonym for \fB\-pthread\fR.
+.PP
+\fI\s-1SPARC\s0 Options\fR
+.IX Subsection "SPARC Options"
+.PP
+These \fB\-m\fR options are supported on the \s-1SPARC:\s0
+.IP "\fB\-mno\-app\-regs\fR" 4
+.IX Item "-mno-app-regs"
+.PD 0
+.IP "\fB\-mapp\-regs\fR" 4
+.IX Item "-mapp-regs"
+.PD
+Specify \fB\-mapp\-regs\fR to generate output using the global registers
+2 through 4, which the \s-1SPARC SVR4 ABI\s0 reserves for applications.  Like the
+global register 1, each global register 2 through 4 is then treated as an
+allocable register that is clobbered by function calls.  This is the default.
+.Sp
+To be fully \s-1SVR4\s0 ABI-compliant at the cost of some performance loss,
+specify \fB\-mno\-app\-regs\fR.  You should compile libraries and system
+software with this option.
+.IP "\fB\-mflat\fR" 4
+.IX Item "-mflat"
+.PD 0
+.IP "\fB\-mno\-flat\fR" 4
+.IX Item "-mno-flat"
+.PD
+With \fB\-mflat\fR, the compiler does not generate save/restore instructions
+and uses a \*(L"flat\*(R" or single register window model.  This model is compatible
+with the regular register window model.  The local registers and the input
+registers (0\-\-5) are still treated as \*(L"call-saved\*(R" registers and are
+saved on the stack as needed.
+.Sp
+With \fB\-mno\-flat\fR (the default), the compiler generates save/restore
+instructions (except for leaf functions).  This is the normal operating mode.
+.IP "\fB\-mfpu\fR" 4
+.IX Item "-mfpu"
+.PD 0
+.IP "\fB\-mhard\-float\fR" 4
+.IX Item "-mhard-float"
+.PD
+Generate output containing floating-point instructions.  This is the
+default.
+.IP "\fB\-mno\-fpu\fR" 4
+.IX Item "-mno-fpu"
+.PD 0
+.IP "\fB\-msoft\-float\fR" 4
+.IX Item "-msoft-float"
+.PD
+Generate output containing library calls for floating point.
+\&\fBWarning:\fR the requisite libraries are not available for all \s-1SPARC\s0
+targets.  Normally the facilities of the machine's usual C compiler are
+used, but this cannot be done directly in cross-compilation.  You must make
+your own arrangements to provide suitable library functions for
+cross-compilation.  The embedded targets \fBsparc\-*\-aout\fR and
+\&\fBsparclite\-*\-*\fR do provide software floating-point support.
+.Sp
+\&\fB\-msoft\-float\fR changes the calling convention in the output file;
+therefore, it is only useful if you compile \fIall\fR of a program with
+this option.  In particular, you need to compile \fIlibgcc.a\fR, the
+library that comes with \s-1GCC,\s0 with \fB\-msoft\-float\fR in order for
+this to work.
+.IP "\fB\-mhard\-quad\-float\fR" 4
+.IX Item "-mhard-quad-float"
+Generate output containing quad-word (long double) floating-point
+instructions.
+.IP "\fB\-msoft\-quad\-float\fR" 4
+.IX Item "-msoft-quad-float"
+Generate output containing library calls for quad-word (long double)
+floating-point instructions.  The functions called are those specified
+in the \s-1SPARC ABI.\s0  This is the default.
+.Sp
+As of this writing, there are no \s-1SPARC\s0 implementations that have hardware
+support for the quad-word floating-point instructions.  They all invoke
+a trap handler for one of these instructions, and then the trap handler
+emulates the effect of the instruction.  Because of the trap handler overhead,
+this is much slower than calling the \s-1ABI\s0 library routines.  Thus the
+\&\fB\-msoft\-quad\-float\fR option is the default.
+.IP "\fB\-mno\-unaligned\-doubles\fR" 4
+.IX Item "-mno-unaligned-doubles"
+.PD 0
+.IP "\fB\-munaligned\-doubles\fR" 4
+.IX Item "-munaligned-doubles"
+.PD
+Assume that doubles have 8\-byte alignment.  This is the default.
+.Sp
+With \fB\-munaligned\-doubles\fR, \s-1GCC\s0 assumes that doubles have 8\-byte
+alignment only if they are contained in another type, or if they have an
+absolute address.  Otherwise, it assumes they have 4\-byte alignment.
+Specifying this option avoids some rare compatibility problems with code
+generated by other compilers.  It is not the default because it results
+in a performance loss, especially for floating-point code.
+.IP "\fB\-muser\-mode\fR" 4
+.IX Item "-muser-mode"
+.PD 0
+.IP "\fB\-mno\-user\-mode\fR" 4
+.IX Item "-mno-user-mode"
+.PD
+Do not generate code that can only run in supervisor mode.  This is relevant
+only for the \f(CW\*(C`casa\*(C'\fR instruction emitted for the \s-1LEON3\s0 processor.  This
+is the default.
+.IP "\fB\-mfaster\-structs\fR" 4
+.IX Item "-mfaster-structs"
+.PD 0
+.IP "\fB\-mno\-faster\-structs\fR" 4
+.IX Item "-mno-faster-structs"
+.PD
+With \fB\-mfaster\-structs\fR, the compiler assumes that structures
+should have 8\-byte alignment.  This enables the use of pairs of
+\&\f(CW\*(C`ldd\*(C'\fR and \f(CW\*(C`std\*(C'\fR instructions for copies in structure
+assignment, in place of twice as many \f(CW\*(C`ld\*(C'\fR and \f(CW\*(C`st\*(C'\fR pairs.
+However, the use of this changed alignment directly violates the \s-1SPARC
+ABI.\s0  Thus, it's intended only for use on targets where the developer
+acknowledges that their resulting code is not directly in line with
+the rules of the \s-1ABI.\s0
+.IP "\fB\-mstd\-struct\-return\fR" 4
+.IX Item "-mstd-struct-return"
+.PD 0
+.IP "\fB\-mno\-std\-struct\-return\fR" 4
+.IX Item "-mno-std-struct-return"
+.PD
+With \fB\-mstd\-struct\-return\fR, the compiler generates checking code
+in functions returning structures or unions to detect size mismatches
+between the two sides of function calls, as per the 32\-bit \s-1ABI.\s0
+.Sp
+The default is \fB\-mno\-std\-struct\-return\fR.  This option has no effect
+in 64\-bit mode.
+.IP "\fB\-mlra\fR" 4
+.IX Item "-mlra"
+.PD 0
+.IP "\fB\-mno\-lra\fR" 4
+.IX Item "-mno-lra"
+.PD
+Enable Local Register Allocation.  This is the default for \s-1SPARC\s0 since \s-1GCC 7\s0
+so \fB\-mno\-lra\fR needs to be passed to get old Reload.
+.IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
+.IX Item "-mcpu=cpu_type"
+Set the instruction set, register set, and instruction scheduling parameters
+for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
+\&\fBv7\fR, \fBcypress\fR, \fBv8\fR, \fBsupersparc\fR, \fBhypersparc\fR,
+\&\fBleon\fR, \fBleon3\fR, \fBleon3v7\fR, \fBsparclite\fR, \fBf930\fR,
+\&\fBf934\fR, \fBsparclite86x\fR, \fBsparclet\fR, \fBtsc701\fR, \fBv9\fR,
+\&\fBultrasparc\fR, \fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR,
+\&\fBniagara3\fR, \fBniagara4\fR, \fBniagara7\fR and \fBm8\fR.
+.Sp
+Native Solaris and GNU/Linux toolchains also support the value \fBnative\fR,
+which selects the best architecture option for the host processor.
+\&\fB\-mcpu=native\fR has no effect if \s-1GCC\s0 does not recognize
+the processor.
+.Sp
+Default instruction scheduling parameters are used for values that select
+an architecture and not an implementation.  These are \fBv7\fR, \fBv8\fR,
+\&\fBsparclite\fR, \fBsparclet\fR, \fBv9\fR.
+.Sp
+Here is a list of each supported architecture and their supported
+implementations.
+.RS 4
+.IP "v7" 4
+.IX Item "v7"
+cypress, leon3v7
+.IP "v8" 4
+.IX Item "v8"
+supersparc, hypersparc, leon, leon3
+.IP "sparclite" 4
+.IX Item "sparclite"
+f930, f934, sparclite86x
+.IP "sparclet" 4
+.IX Item "sparclet"
+tsc701
+.IP "v9" 4
+.IX Item "v9"
+ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4,
+niagara7, m8
+.RE
+.RS 4
+.Sp
+By default (unless configured otherwise), \s-1GCC\s0 generates code for the V7
+variant of the \s-1SPARC\s0 architecture.  With \fB\-mcpu=cypress\fR, the compiler
+additionally optimizes it for the Cypress \s-1CY7C602\s0 chip, as used in the
+SPARCStation/SPARCServer 3xx series.  This is also appropriate for the older
+SPARCStation 1, 2, \s-1IPX\s0 etc.
+.Sp
+With \fB\-mcpu=v8\fR, \s-1GCC\s0 generates code for the V8 variant of the \s-1SPARC\s0
+architecture.  The only difference from V7 code is that the compiler emits
+the integer multiply and integer divide instructions which exist in \s-1SPARC\-V8\s0
+but not in \s-1SPARC\-V7.\s0  With \fB\-mcpu=supersparc\fR, the compiler additionally
+optimizes it for the SuperSPARC chip, as used in the SPARCStation 10, 1000 and
+2000 series.
+.Sp
+With \fB\-mcpu=sparclite\fR, \s-1GCC\s0 generates code for the SPARClite variant of
+the \s-1SPARC\s0 architecture.  This adds the integer multiply, integer divide step
+and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClite but not in \s-1SPARC\-V7.\s0
+With \fB\-mcpu=f930\fR, the compiler additionally optimizes it for the
+Fujitsu \s-1MB86930\s0 chip, which is the original SPARClite, with no \s-1FPU.\s0  With
+\&\fB\-mcpu=f934\fR, the compiler additionally optimizes it for the Fujitsu
+\&\s-1MB86934\s0 chip, which is the more recent SPARClite with \s-1FPU.\s0
+.Sp
+With \fB\-mcpu=sparclet\fR, \s-1GCC\s0 generates code for the SPARClet variant of
+the \s-1SPARC\s0 architecture.  This adds the integer multiply, multiply/accumulate,
+integer divide step and scan (\f(CW\*(C`ffs\*(C'\fR) instructions which exist in SPARClet
+but not in \s-1SPARC\-V7.\s0  With \fB\-mcpu=tsc701\fR, the compiler additionally
+optimizes it for the \s-1TEMIC\s0 SPARClet chip.
+.Sp
+With \fB\-mcpu=v9\fR, \s-1GCC\s0 generates code for the V9 variant of the \s-1SPARC\s0
+architecture.  This adds 64\-bit integer and floating-point move instructions,
+3 additional floating-point condition code registers and conditional move
+instructions.  With \fB\-mcpu=ultrasparc\fR, the compiler additionally
+optimizes it for the Sun UltraSPARC I/II/IIi chips.  With
+\&\fB\-mcpu=ultrasparc3\fR, the compiler additionally optimizes it for the
+Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ chips.  With
+\&\fB\-mcpu=niagara\fR, the compiler additionally optimizes it for
+Sun UltraSPARC T1 chips.  With \fB\-mcpu=niagara2\fR, the compiler
+additionally optimizes it for Sun UltraSPARC T2 chips. With
+\&\fB\-mcpu=niagara3\fR, the compiler additionally optimizes it for Sun
+UltraSPARC T3 chips.  With \fB\-mcpu=niagara4\fR, the compiler
+additionally optimizes it for Sun UltraSPARC T4 chips.  With
+\&\fB\-mcpu=niagara7\fR, the compiler additionally optimizes it for
+Oracle \s-1SPARC M7\s0 chips.  With \fB\-mcpu=m8\fR, the compiler
+additionally optimizes it for Oracle M8 chips.
+.RE
+.IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
+.IX Item "-mtune=cpu_type"
+Set the instruction scheduling parameters for machine type
+\&\fIcpu_type\fR, but do not set the instruction set or register set that the
+option \fB\-mcpu=\fR\fIcpu_type\fR does.
+.Sp
+The same values for \fB\-mcpu=\fR\fIcpu_type\fR can be used for
+\&\fB\-mtune=\fR\fIcpu_type\fR, but the only useful values are those
+that select a particular \s-1CPU\s0 implementation.  Those are
+\&\fBcypress\fR, \fBsupersparc\fR, \fBhypersparc\fR, \fBleon\fR,
+\&\fBleon3\fR, \fBleon3v7\fR, \fBf930\fR, \fBf934\fR,
+\&\fBsparclite86x\fR, \fBtsc701\fR, \fBultrasparc\fR,
+\&\fBultrasparc3\fR, \fBniagara\fR, \fBniagara2\fR, \fBniagara3\fR,
+\&\fBniagara4\fR, \fBniagara7\fR and \fBm8\fR.  With native Solaris
+and GNU/Linux toolchains, \fBnative\fR can also be used.
+.IP "\fB\-mv8plus\fR" 4
+.IX Item "-mv8plus"
+.PD 0
+.IP "\fB\-mno\-v8plus\fR" 4
+.IX Item "-mno-v8plus"
+.PD
+With \fB\-mv8plus\fR, \s-1GCC\s0 generates code for the \s-1SPARC\-V8+ ABI.\s0  The
+difference from the V8 \s-1ABI\s0 is that the global and out registers are
+considered 64 bits wide.  This is enabled by default on Solaris in 32\-bit
+mode for all \s-1SPARC\-V9\s0 processors.
+.IP "\fB\-mvis\fR" 4
+.IX Item "-mvis"
+.PD 0
+.IP "\fB\-mno\-vis\fR" 4
+.IX Item "-mno-vis"
+.PD
+With \fB\-mvis\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
+Visual Instruction Set extensions.  The default is \fB\-mno\-vis\fR.
+.IP "\fB\-mvis2\fR" 4
+.IX Item "-mvis2"
+.PD 0
+.IP "\fB\-mno\-vis2\fR" 4
+.IX Item "-mno-vis2"
+.PD
+With \fB\-mvis2\fR, \s-1GCC\s0 generates code that takes advantage of
+version 2.0 of the UltraSPARC Visual Instruction Set extensions.  The
+default is \fB\-mvis2\fR when targeting a cpu that supports such
+instructions, such as UltraSPARC-III and later.  Setting \fB\-mvis2\fR
+also sets \fB\-mvis\fR.
+.IP "\fB\-mvis3\fR" 4
+.IX Item "-mvis3"
+.PD 0
+.IP "\fB\-mno\-vis3\fR" 4
+.IX Item "-mno-vis3"
+.PD
+With \fB\-mvis3\fR, \s-1GCC\s0 generates code that takes advantage of
+version 3.0 of the UltraSPARC Visual Instruction Set extensions.  The
+default is \fB\-mvis3\fR when targeting a cpu that supports such
+instructions, such as niagara\-3 and later.  Setting \fB\-mvis3\fR
+also sets \fB\-mvis2\fR and \fB\-mvis\fR.
+.IP "\fB\-mvis4\fR" 4
+.IX Item "-mvis4"
+.PD 0
+.IP "\fB\-mno\-vis4\fR" 4
+.IX Item "-mno-vis4"
+.PD
+With \fB\-mvis4\fR, \s-1GCC\s0 generates code that takes advantage of
+version 4.0 of the UltraSPARC Visual Instruction Set extensions.  The
+default is \fB\-mvis4\fR when targeting a cpu that supports such
+instructions, such as niagara\-7 and later.  Setting \fB\-mvis4\fR
+also sets \fB\-mvis3\fR, \fB\-mvis2\fR and \fB\-mvis\fR.
+.IP "\fB\-mvis4b\fR" 4
+.IX Item "-mvis4b"
+.PD 0
+.IP "\fB\-mno\-vis4b\fR" 4
+.IX Item "-mno-vis4b"
+.PD
+With \fB\-mvis4b\fR, \s-1GCC\s0 generates code that takes advantage of
+version 4.0 of the UltraSPARC Visual Instruction Set extensions, plus
+the additional \s-1VIS\s0 instructions introduced in the Oracle \s-1SPARC\s0
+Architecture 2017.  The default is \fB\-mvis4b\fR when targeting a
+cpu that supports such instructions, such as m8 and later.  Setting
+\&\fB\-mvis4b\fR also sets \fB\-mvis4\fR, \fB\-mvis3\fR,
+\&\fB\-mvis2\fR and \fB\-mvis\fR.
+.IP "\fB\-mcbcond\fR" 4
+.IX Item "-mcbcond"
+.PD 0
+.IP "\fB\-mno\-cbcond\fR" 4
+.IX Item "-mno-cbcond"
+.PD
+With \fB\-mcbcond\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
+Compare-and-Branch-on-Condition instructions.  The default is \fB\-mcbcond\fR
+when targeting a \s-1CPU\s0 that supports such instructions, such as Niagara\-4 and
+later.
+.IP "\fB\-mfmaf\fR" 4
+.IX Item "-mfmaf"
+.PD 0
+.IP "\fB\-mno\-fmaf\fR" 4
+.IX Item "-mno-fmaf"
+.PD
+With \fB\-mfmaf\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
+Fused Multiply-Add Floating-point instructions.  The default is \fB\-mfmaf\fR
+when targeting a \s-1CPU\s0 that supports such instructions, such as Niagara\-3 and
+later.
+.IP "\fB\-mfsmuld\fR" 4
+.IX Item "-mfsmuld"
+.PD 0
+.IP "\fB\-mno\-fsmuld\fR" 4
+.IX Item "-mno-fsmuld"
+.PD
+With \fB\-mfsmuld\fR, \s-1GCC\s0 generates code that takes advantage of the
+Floating-point Multiply Single to Double (FsMULd) instruction.  The default is
+\&\fB\-mfsmuld\fR when targeting a \s-1CPU\s0 supporting the architecture versions V8
+or V9 with \s-1FPU\s0 except \fB\-mcpu=leon\fR.
+.IP "\fB\-mpopc\fR" 4
+.IX Item "-mpopc"
+.PD 0
+.IP "\fB\-mno\-popc\fR" 4
+.IX Item "-mno-popc"
+.PD
+With \fB\-mpopc\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
+Population Count instruction.  The default is \fB\-mpopc\fR
+when targeting a \s-1CPU\s0 that supports such an instruction, such as Niagara\-2 and
+later.
+.IP "\fB\-msubxc\fR" 4
+.IX Item "-msubxc"
+.PD 0
+.IP "\fB\-mno\-subxc\fR" 4
+.IX Item "-mno-subxc"
+.PD
+With \fB\-msubxc\fR, \s-1GCC\s0 generates code that takes advantage of the UltraSPARC
+Subtract-Extended-with-Carry instruction.  The default is \fB\-msubxc\fR
+when targeting a \s-1CPU\s0 that supports such an instruction, such as Niagara\-7 and
+later.
+.IP "\fB\-mfix\-at697f\fR" 4
+.IX Item "-mfix-at697f"
+Enable the documented workaround for the single erratum of the Atmel \s-1AT697F\s0
+processor (which corresponds to erratum #13 of the \s-1AT697E\s0 processor).
+.IP "\fB\-mfix\-ut699\fR" 4
+.IX Item "-mfix-ut699"
+Enable the documented workarounds for the floating-point errata and the data
+cache nullify errata of the \s-1UT699\s0 processor.
+.IP "\fB\-mfix\-ut700\fR" 4
+.IX Item "-mfix-ut700"
+Enable the documented workaround for the back-to-back store errata of
+the \s-1UT699E/UT700\s0 processor.
+.IP "\fB\-mfix\-gr712rc\fR" 4
+.IX Item "-mfix-gr712rc"
+Enable the documented workaround for the back-to-back store errata of
+the \s-1GR712RC\s0 processor.
+.PP
+These \fB\-m\fR options are supported in addition to the above
+on \s-1SPARC\-V9\s0 processors in 64\-bit environments:
+.IP "\fB\-m32\fR" 4
+.IX Item "-m32"
+.PD 0
+.IP "\fB\-m64\fR" 4
+.IX Item "-m64"
+.PD
+Generate code for a 32\-bit or 64\-bit environment.
+The 32\-bit environment sets int, long and pointer to 32 bits.
+The 64\-bit environment sets int to 32 bits and long and pointer
+to 64 bits.
+.IP "\fB\-mcmodel=\fR\fIwhich\fR" 4
+.IX Item "-mcmodel=which"
+Set the code model to one of
+.RS 4
+.IP "\fBmedlow\fR" 4
+.IX Item "medlow"
+The Medium/Low code model: 64\-bit addresses, programs
+must be linked in the low 32 bits of memory.  Programs can be statically
+or dynamically linked.
+.IP "\fBmedmid\fR" 4
+.IX Item "medmid"
+The Medium/Middle code model: 64\-bit addresses, programs
+must be linked in the low 44 bits of memory, the text and data segments must
+be less than 2GB in size and the data segment must be located within 2GB of
+the text segment.
+.IP "\fBmedany\fR" 4
+.IX Item "medany"
+The Medium/Anywhere code model: 64\-bit addresses, programs
+may be linked anywhere in memory, the text and data segments must be less
+than 2GB in size and the data segment must be located within 2GB of the
+text segment.
+.IP "\fBembmedany\fR" 4
+.IX Item "embmedany"
+The Medium/Anywhere code model for embedded systems:
+64\-bit addresses, the text and data segments must be less than 2GB in
+size, both starting anywhere in memory (determined at link time).  The
+global register \f(CW%g4\fR points to the base of the data segment.  Programs
+are statically linked and \s-1PIC\s0 is not supported.
+.RE
+.RS 4
+.RE
+.IP "\fB\-mmemory\-model=\fR\fImem-model\fR" 4
+.IX Item "-mmemory-model=mem-model"
+Set the memory model in force on the processor to one of
+.RS 4
+.IP "\fBdefault\fR" 4
+.IX Item "default"
+The default memory model for the processor and operating system.
+.IP "\fBrmo\fR" 4
+.IX Item "rmo"
+Relaxed Memory Order
+.IP "\fBpso\fR" 4
+.IX Item "pso"
+Partial Store Order
+.IP "\fBtso\fR" 4
+.IX Item "tso"
+Total Store Order
+.IP "\fBsc\fR" 4
+.IX Item "sc"
+Sequential Consistency
+.RE
+.RS 4
+.Sp
+These memory models are formally defined in Appendix D of the \s-1SPARC\-V9\s0
+architecture manual, as set in the processor's \f(CW\*(C`PSTATE.MM\*(C'\fR field.
+.RE
+.IP "\fB\-mstack\-bias\fR" 4
+.IX Item "-mstack-bias"
+.PD 0
+.IP "\fB\-mno\-stack\-bias\fR" 4
+.IX Item "-mno-stack-bias"
+.PD
+With \fB\-mstack\-bias\fR, \s-1GCC\s0 assumes that the stack pointer, and
+frame pointer if present, are offset by \-2047 which must be added back
+when making stack frame references.  This is the default in 64\-bit mode.
+Otherwise, assume no such offset is present.
+.PP
+\fI\s-1SPU\s0 Options\fR
+.IX Subsection "SPU Options"
+.PP
+These \fB\-m\fR options are supported on the \s-1SPU:\s0
+.IP "\fB\-mwarn\-reloc\fR" 4
+.IX Item "-mwarn-reloc"
+.PD 0
+.IP "\fB\-merror\-reloc\fR" 4
+.IX Item "-merror-reloc"
+.PD
+The loader for \s-1SPU\s0 does not handle dynamic relocations.  By default, \s-1GCC\s0
+gives an error when it generates code that requires a dynamic
+relocation.  \fB\-mno\-error\-reloc\fR disables the error,
+\&\fB\-mwarn\-reloc\fR generates a warning instead.
+.IP "\fB\-msafe\-dma\fR" 4
+.IX Item "-msafe-dma"
+.PD 0
+.IP "\fB\-munsafe\-dma\fR" 4
+.IX Item "-munsafe-dma"
+.PD
+Instructions that initiate or test completion of \s-1DMA\s0 must not be
+reordered with respect to loads and stores of the memory that is being
+accessed.
+With \fB\-munsafe\-dma\fR you must use the \f(CW\*(C`volatile\*(C'\fR keyword to protect
+memory accesses, but that can lead to inefficient code in places where the
+memory is known to not change.  Rather than mark the memory as volatile,
+you can use \fB\-msafe\-dma\fR to tell the compiler to treat
+the \s-1DMA\s0 instructions as potentially affecting all memory.
+.IP "\fB\-mbranch\-hints\fR" 4
+.IX Item "-mbranch-hints"
+By default, \s-1GCC\s0 generates a branch hint instruction to avoid
+pipeline stalls for always-taken or probably-taken branches.  A hint
+is not generated closer than 8 instructions away from its branch.
+There is little reason to disable them, except for debugging purposes,
+or to make an object a little bit smaller.
+.IP "\fB\-msmall\-mem\fR" 4
+.IX Item "-msmall-mem"
+.PD 0
+.IP "\fB\-mlarge\-mem\fR" 4
+.IX Item "-mlarge-mem"
+.PD
+By default, \s-1GCC\s0 generates code assuming that addresses are never larger
+than 18 bits.  With \fB\-mlarge\-mem\fR code is generated that assumes
+a full 32\-bit address.
+.IP "\fB\-mstdmain\fR" 4
+.IX Item "-mstdmain"
+By default, \s-1GCC\s0 links against startup code that assumes the SPU-style
+main function interface (which has an unconventional parameter list).
+With \fB\-mstdmain\fR, \s-1GCC\s0 links your program against startup
+code that assumes a C99\-style interface to \f(CW\*(C`main\*(C'\fR, including a
+local copy of \f(CW\*(C`argv\*(C'\fR strings.
+.IP "\fB\-mfixed\-range=\fR\fIregister-range\fR" 4
+.IX Item "-mfixed-range=register-range"
+Generate code treating the given register range as fixed registers.
+A fixed register is one that the register allocator cannot use.  This is
+useful when compiling kernel code.  A register range is specified as
+two registers separated by a dash.  Multiple register ranges can be
+specified separated by a comma.
+.IP "\fB\-mea32\fR" 4
+.IX Item "-mea32"
+.PD 0
+.IP "\fB\-mea64\fR" 4
+.IX Item "-mea64"
+.PD
+Compile code assuming that pointers to the \s-1PPU\s0 address space accessed
+via the \f(CW\*(C`_\|_ea\*(C'\fR named address space qualifier are either 32 or 64
+bits wide.  The default is 32 bits.  As this is an ABI-changing option,
+all object code in an executable must be compiled with the same setting.
+.IP "\fB\-maddress\-space\-conversion\fR" 4
+.IX Item "-maddress-space-conversion"
+.PD 0
+.IP "\fB\-mno\-address\-space\-conversion\fR" 4
+.IX Item "-mno-address-space-conversion"
+.PD
+Allow/disallow treating the \f(CW\*(C`_\|_ea\*(C'\fR address space as superset
+of the generic address space.  This enables explicit type casts
+between \f(CW\*(C`_\|_ea\*(C'\fR and generic pointer as well as implicit
+conversions of generic pointers to \f(CW\*(C`_\|_ea\*(C'\fR pointers.  The
+default is to allow address space pointer conversions.
+.IP "\fB\-mcache\-size=\fR\fIcache-size\fR" 4
+.IX Item "-mcache-size=cache-size"
+This option controls the version of libgcc that the compiler links to an
+executable and selects a software-managed cache for accessing variables
+in the \f(CW\*(C`_\|_ea\*(C'\fR address space with a particular cache size.  Possible
+options for \fIcache-size\fR are \fB8\fR, \fB16\fR, \fB32\fR, \fB64\fR
+and \fB128\fR.  The default cache size is 64KB.
+.IP "\fB\-matomic\-updates\fR" 4
+.IX Item "-matomic-updates"
+.PD 0
+.IP "\fB\-mno\-atomic\-updates\fR" 4
+.IX Item "-mno-atomic-updates"
+.PD
+This option controls the version of libgcc that the compiler links to an
+executable and selects whether atomic updates to the software-managed
+cache of PPU-side variables are used.  If you use atomic updates, changes
+to a \s-1PPU\s0 variable from \s-1SPU\s0 code using the \f(CW\*(C`_\|_ea\*(C'\fR named address space
+qualifier do not interfere with changes to other \s-1PPU\s0 variables residing
+in the same cache line from \s-1PPU\s0 code.  If you do not use atomic updates,
+such interference may occur; however, writing back cache lines is
+more efficient.  The default behavior is to use atomic updates.
+.IP "\fB\-mdual\-nops\fR" 4
+.IX Item "-mdual-nops"
+.PD 0
+.IP "\fB\-mdual\-nops=\fR\fIn\fR" 4
+.IX Item "-mdual-nops=n"
+.PD
+By default, \s-1GCC\s0 inserts NOPs to increase dual issue when it expects
+it to increase performance.  \fIn\fR can be a value from 0 to 10.  A
+smaller \fIn\fR inserts fewer NOPs.  10 is the default, 0 is the
+same as \fB\-mno\-dual\-nops\fR.  Disabled with \fB\-Os\fR.
+.IP "\fB\-mhint\-max\-nops=\fR\fIn\fR" 4
+.IX Item "-mhint-max-nops=n"
+Maximum number of NOPs to insert for a branch hint.  A branch hint must
+be at least 8 instructions away from the branch it is affecting.  \s-1GCC\s0
+inserts up to \fIn\fR NOPs to enforce this, otherwise it does not
+generate the branch hint.
+.IP "\fB\-mhint\-max\-distance=\fR\fIn\fR" 4
+.IX Item "-mhint-max-distance=n"
+The encoding of the branch hint instruction limits the hint to be within
+256 instructions of the branch it is affecting.  By default, \s-1GCC\s0 makes
+sure it is within 125.
+.IP "\fB\-msafe\-hints\fR" 4
+.IX Item "-msafe-hints"
+Work around a hardware bug that causes the \s-1SPU\s0 to stall indefinitely.
+By default, \s-1GCC\s0 inserts the \f(CW\*(C`hbrp\*(C'\fR instruction to make sure
+this stall won't happen.
+.PP
+\fIOptions for System V\fR
+.IX Subsection "Options for System V"
+.PP
+These additional options are available on System V Release 4 for
+compatibility with other compilers on those systems:
+.IP "\fB\-G\fR" 4
+.IX Item "-G"
+Create a shared object.
+It is recommended that \fB\-symbolic\fR or \fB\-shared\fR be used instead.
+.IP "\fB\-Qy\fR" 4
+.IX Item "-Qy"
+Identify the versions of each tool used by the compiler, in a
+\&\f(CW\*(C`.ident\*(C'\fR assembler directive in the output.
+.IP "\fB\-Qn\fR" 4
+.IX Item "-Qn"
+Refrain from adding \f(CW\*(C`.ident\*(C'\fR directives to the output file (this is
+the default).
+.IP "\fB\-YP,\fR\fIdirs\fR" 4
+.IX Item "-YP,dirs"
+Search the directories \fIdirs\fR, and no others, for libraries
+specified with \fB\-l\fR.
+.IP "\fB\-Ym,\fR\fIdir\fR" 4
+.IX Item "-Ym,dir"
+Look in the directory \fIdir\fR to find the M4 preprocessor.
+The assembler uses this option.
+.PP
+\fITILE-Gx Options\fR
+.IX Subsection "TILE-Gx Options"
+.PP
+These \fB\-m\fR options are supported on the TILE-Gx:
+.IP "\fB\-mcmodel=small\fR" 4
+.IX Item "-mcmodel=small"
+Generate code for the small model.  The distance for direct calls is
+limited to 500M in either direction.  PC-relative addresses are 32
+bits.  Absolute addresses support the full address range.
+.IP "\fB\-mcmodel=large\fR" 4
+.IX Item "-mcmodel=large"
+Generate code for the large model.  There is no limitation on call
+distance, pc-relative addresses, or absolute addresses.
+.IP "\fB\-mcpu=\fR\fIname\fR" 4
+.IX Item "-mcpu=name"
+Selects the type of \s-1CPU\s0 to be targeted.  Currently the only supported
+type is \fBtilegx\fR.
+.IP "\fB\-m32\fR" 4
+.IX Item "-m32"
+.PD 0
+.IP "\fB\-m64\fR" 4
+.IX Item "-m64"
+.PD
+Generate code for a 32\-bit or 64\-bit environment.  The 32\-bit
+environment sets int, long, and pointer to 32 bits.  The 64\-bit
+environment sets int to 32 bits and long and pointer to 64 bits.
+.IP "\fB\-mbig\-endian\fR" 4
+.IX Item "-mbig-endian"
+.PD 0
+.IP "\fB\-mlittle\-endian\fR" 4
+.IX Item "-mlittle-endian"
+.PD
+Generate code in big/little endian mode, respectively.
+.PP
+\fITILEPro Options\fR
+.IX Subsection "TILEPro Options"
+.PP
+These \fB\-m\fR options are supported on the TILEPro:
+.IP "\fB\-mcpu=\fR\fIname\fR" 4
+.IX Item "-mcpu=name"
+Selects the type of \s-1CPU\s0 to be targeted.  Currently the only supported
+type is \fBtilepro\fR.
+.IP "\fB\-m32\fR" 4
+.IX Item "-m32"
+Generate code for a 32\-bit environment, which sets int, long, and
+pointer to 32 bits.  This is the only supported behavior so the flag
+is essentially ignored.
+.PP
+\fIV850 Options\fR
+.IX Subsection "V850 Options"
+.PP
+These \fB\-m\fR options are defined for V850 implementations:
+.IP "\fB\-mlong\-calls\fR" 4
+.IX Item "-mlong-calls"
+.PD 0
+.IP "\fB\-mno\-long\-calls\fR" 4
+.IX Item "-mno-long-calls"
+.PD
+Treat all calls as being far away (near).  If calls are assumed to be
+far away, the compiler always loads the function's address into a
+register, and calls indirect through the pointer.
+.IP "\fB\-mno\-ep\fR" 4
+.IX Item "-mno-ep"
+.PD 0
+.IP "\fB\-mep\fR" 4
+.IX Item "-mep"
+.PD
+Do not optimize (do optimize) basic blocks that use the same index
+pointer 4 or more times to copy pointer into the \f(CW\*(C`ep\*(C'\fR register, and
+use the shorter \f(CW\*(C`sld\*(C'\fR and \f(CW\*(C`sst\*(C'\fR instructions.  The \fB\-mep\fR
+option is on by default if you optimize.
+.IP "\fB\-mno\-prolog\-function\fR" 4
+.IX Item "-mno-prolog-function"
+.PD 0
+.IP "\fB\-mprolog\-function\fR" 4
+.IX Item "-mprolog-function"
+.PD
+Do not use (do use) external functions to save and restore registers
+at the prologue and epilogue of a function.  The external functions
+are slower, but use less code space if more than one function saves
+the same number of registers.  The \fB\-mprolog\-function\fR option
+is on by default if you optimize.
+.IP "\fB\-mspace\fR" 4
+.IX Item "-mspace"
+Try to make the code as small as possible.  At present, this just turns
+on the \fB\-mep\fR and \fB\-mprolog\-function\fR options.
+.IP "\fB\-mtda=\fR\fIn\fR" 4
+.IX Item "-mtda=n"
+Put static or global variables whose size is \fIn\fR bytes or less into
+the tiny data area that register \f(CW\*(C`ep\*(C'\fR points to.  The tiny data
+area can hold up to 256 bytes in total (128 bytes for byte references).
+.IP "\fB\-msda=\fR\fIn\fR" 4
+.IX Item "-msda=n"
+Put static or global variables whose size is \fIn\fR bytes or less into
+the small data area that register \f(CW\*(C`gp\*(C'\fR points to.  The small data
+area can hold up to 64 kilobytes.
+.IP "\fB\-mzda=\fR\fIn\fR" 4
+.IX Item "-mzda=n"
+Put static or global variables whose size is \fIn\fR bytes or less into
+the first 32 kilobytes of memory.
+.IP "\fB\-mv850\fR" 4
+.IX Item "-mv850"
+Specify that the target processor is the V850.
+.IP "\fB\-mv850e3v5\fR" 4
+.IX Item "-mv850e3v5"
+Specify that the target processor is the V850E3V5.  The preprocessor
+constant \f(CW\*(C`_\|_v850e3v5_\|_\*(C'\fR is defined if this option is used.
+.IP "\fB\-mv850e2v4\fR" 4
+.IX Item "-mv850e2v4"
+Specify that the target processor is the V850E3V5.  This is an alias for
+the \fB\-mv850e3v5\fR option.
+.IP "\fB\-mv850e2v3\fR" 4
+.IX Item "-mv850e2v3"
+Specify that the target processor is the V850E2V3.  The preprocessor
+constant \f(CW\*(C`_\|_v850e2v3_\|_\*(C'\fR is defined if this option is used.
+.IP "\fB\-mv850e2\fR" 4
+.IX Item "-mv850e2"
+Specify that the target processor is the V850E2.  The preprocessor
+constant \f(CW\*(C`_\|_v850e2_\|_\*(C'\fR is defined if this option is used.
+.IP "\fB\-mv850e1\fR" 4
+.IX Item "-mv850e1"
+Specify that the target processor is the V850E1.  The preprocessor
+constants \f(CW\*(C`_\|_v850e1_\|_\*(C'\fR and \f(CW\*(C`_\|_v850e_\|_\*(C'\fR are defined if
+this option is used.
+.IP "\fB\-mv850es\fR" 4
+.IX Item "-mv850es"
+Specify that the target processor is the V850ES.  This is an alias for
+the \fB\-mv850e1\fR option.
+.IP "\fB\-mv850e\fR" 4
+.IX Item "-mv850e"
+Specify that the target processor is the V850E.  The preprocessor
+constant \f(CW\*(C`_\|_v850e_\|_\*(C'\fR is defined if this option is used.
+.Sp
+If neither \fB\-mv850\fR nor \fB\-mv850e\fR nor \fB\-mv850e1\fR
+nor \fB\-mv850e2\fR nor \fB\-mv850e2v3\fR nor \fB\-mv850e3v5\fR
+are defined then a default target processor is chosen and the
+relevant \fB_\|_v850*_\|_\fR preprocessor constant is defined.
+.Sp
+The preprocessor constants \f(CW\*(C`_\|_v850\*(C'\fR and \f(CW\*(C`_\|_v851_\|_\*(C'\fR are always
+defined, regardless of which processor variant is the target.
+.IP "\fB\-mdisable\-callt\fR" 4
+.IX Item "-mdisable-callt"
+.PD 0
+.IP "\fB\-mno\-disable\-callt\fR" 4
+.IX Item "-mno-disable-callt"
+.PD
+This option suppresses generation of the \f(CW\*(C`CALLT\*(C'\fR instruction for the
+v850e, v850e1, v850e2, v850e2v3 and v850e3v5 flavors of the v850
+architecture.
+.Sp
+This option is enabled by default when the \s-1RH850 ABI\s0 is
+in use (see \fB\-mrh850\-abi\fR), and disabled by default when the
+\&\s-1GCC ABI\s0 is in use.  If \f(CW\*(C`CALLT\*(C'\fR instructions are being generated
+then the C preprocessor symbol \f(CW\*(C`_\|_V850_CALLT_\|_\*(C'\fR is defined.
+.IP "\fB\-mrelax\fR" 4
+.IX Item "-mrelax"
+.PD 0
+.IP "\fB\-mno\-relax\fR" 4
+.IX Item "-mno-relax"
+.PD
+Pass on (or do not pass on) the \fB\-mrelax\fR command-line option
+to the assembler.
+.IP "\fB\-mlong\-jumps\fR" 4
+.IX Item "-mlong-jumps"
+.PD 0
+.IP "\fB\-mno\-long\-jumps\fR" 4
+.IX Item "-mno-long-jumps"
+.PD
+Disable (or re-enable) the generation of PC-relative jump instructions.
+.IP "\fB\-msoft\-float\fR" 4
+.IX Item "-msoft-float"
+.PD 0
+.IP "\fB\-mhard\-float\fR" 4
+.IX Item "-mhard-float"
+.PD
+Disable (or re-enable) the generation of hardware floating point
+instructions.  This option is only significant when the target
+architecture is \fBV850E2V3\fR or higher.  If hardware floating point
+instructions are being generated then the C preprocessor symbol
+\&\f(CW\*(C`_\|_FPU_OK_\|_\*(C'\fR is defined, otherwise the symbol
+\&\f(CW\*(C`_\|_NO_FPU_\|_\*(C'\fR is defined.
+.IP "\fB\-mloop\fR" 4
+.IX Item "-mloop"
+Enables the use of the e3v5 \s-1LOOP\s0 instruction.  The use of this
+instruction is not enabled by default when the e3v5 architecture is
+selected because its use is still experimental.
+.IP "\fB\-mrh850\-abi\fR" 4
+.IX Item "-mrh850-abi"
+.PD 0
+.IP "\fB\-mghs\fR" 4
+.IX Item "-mghs"
+.PD
+Enables support for the \s-1RH850\s0 version of the V850 \s-1ABI.\s0  This is the
+default.  With this version of the \s-1ABI\s0 the following rules apply:
+.RS 4
+.IP "*" 4
+Integer sized structures and unions are returned via a memory pointer
+rather than a register.
+.IP "*" 4
+Large structures and unions (more than 8 bytes in size) are passed by
+value.
+.IP "*" 4
+Functions are aligned to 16\-bit boundaries.
+.IP "*" 4
+The \fB\-m8byte\-align\fR command-line option is supported.
+.IP "*" 4
+The \fB\-mdisable\-callt\fR command-line option is enabled by
+default.  The \fB\-mno\-disable\-callt\fR command-line option is not
+supported.
+.RE
+.RS 4
+.Sp
+When this version of the \s-1ABI\s0 is enabled the C preprocessor symbol
+\&\f(CW\*(C`_\|_V850_RH850_ABI_\|_\*(C'\fR is defined.
+.RE
+.IP "\fB\-mgcc\-abi\fR" 4
+.IX Item "-mgcc-abi"
+Enables support for the old \s-1GCC\s0 version of the V850 \s-1ABI.\s0  With this
+version of the \s-1ABI\s0 the following rules apply:
+.RS 4
+.IP "*" 4
+Integer sized structures and unions are returned in register \f(CW\*(C`r10\*(C'\fR.
+.IP "*" 4
+Large structures and unions (more than 8 bytes in size) are passed by
+reference.
+.IP "*" 4
+Functions are aligned to 32\-bit boundaries, unless optimizing for
+size.
+.IP "*" 4
+The \fB\-m8byte\-align\fR command-line option is not supported.
+.IP "*" 4
+The \fB\-mdisable\-callt\fR command-line option is supported but not
+enabled by default.
+.RE
+.RS 4
+.Sp
+When this version of the \s-1ABI\s0 is enabled the C preprocessor symbol
+\&\f(CW\*(C`_\|_V850_GCC_ABI_\|_\*(C'\fR is defined.
+.RE
+.IP "\fB\-m8byte\-align\fR" 4
+.IX Item "-m8byte-align"
+.PD 0
+.IP "\fB\-mno\-8byte\-align\fR" 4
+.IX Item "-mno-8byte-align"
+.PD
+Enables support for \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long long\*(C'\fR types to be
+aligned on 8\-byte boundaries.  The default is to restrict the
+alignment of all objects to at most 4\-bytes.  When
+\&\fB\-m8byte\-align\fR is in effect the C preprocessor symbol
+\&\f(CW\*(C`_\|_V850_8BYTE_ALIGN_\|_\*(C'\fR is defined.
+.IP "\fB\-mbig\-switch\fR" 4
+.IX Item "-mbig-switch"
+Generate code suitable for big switch tables.  Use this option only if
+the assembler/linker complain about out of range branches within a switch
+table.
+.IP "\fB\-mapp\-regs\fR" 4
+.IX Item "-mapp-regs"
+This option causes r2 and r5 to be used in the code generated by
+the compiler.  This setting is the default.
+.IP "\fB\-mno\-app\-regs\fR" 4
+.IX Item "-mno-app-regs"
+This option causes r2 and r5 to be treated as fixed registers.
+.PP
+\fI\s-1VAX\s0 Options\fR
+.IX Subsection "VAX Options"
+.PP
+These \fB\-m\fR options are defined for the \s-1VAX:\s0
+.IP "\fB\-munix\fR" 4
+.IX Item "-munix"
+Do not output certain jump instructions (\f(CW\*(C`aobleq\*(C'\fR and so on)
+that the Unix assembler for the \s-1VAX\s0 cannot handle across long
+ranges.
+.IP "\fB\-mgnu\fR" 4
+.IX Item "-mgnu"
+Do output those jump instructions, on the assumption that the
+\&\s-1GNU\s0 assembler is being used.
+.IP "\fB\-mg\fR" 4
+.IX Item "-mg"
+Output code for G\-format floating-point numbers instead of D\-format.
+.PP
+\fIVisium Options\fR
+.IX Subsection "Visium Options"
+.IP "\fB\-mdebug\fR" 4
+.IX Item "-mdebug"
+A program which performs file I/O and is destined to run on an \s-1MCM\s0 target
+should be linked with this option.  It causes the libraries libc.a and
+libdebug.a to be linked.  The program should be run on the target under
+the control of the \s-1GDB\s0 remote debugging stub.
+.IP "\fB\-msim\fR" 4
+.IX Item "-msim"
+A program which performs file I/O and is destined to run on the simulator
+should be linked with option.  This causes libraries libc.a and libsim.a to
+be linked.
+.IP "\fB\-mfpu\fR" 4
+.IX Item "-mfpu"
+.PD 0
+.IP "\fB\-mhard\-float\fR" 4
+.IX Item "-mhard-float"
+.PD
+Generate code containing floating-point instructions.  This is the
+default.
+.IP "\fB\-mno\-fpu\fR" 4
+.IX Item "-mno-fpu"
+.PD 0
+.IP "\fB\-msoft\-float\fR" 4
+.IX Item "-msoft-float"
+.PD
+Generate code containing library calls for floating-point.
+.Sp
+\&\fB\-msoft\-float\fR changes the calling convention in the output file;
+therefore, it is only useful if you compile \fIall\fR of a program with
+this option.  In particular, you need to compile \fIlibgcc.a\fR, the
+library that comes with \s-1GCC,\s0 with \fB\-msoft\-float\fR in order for
+this to work.
+.IP "\fB\-mcpu=\fR\fIcpu_type\fR" 4
+.IX Item "-mcpu=cpu_type"
+Set the instruction set, register set, and instruction scheduling parameters
+for machine type \fIcpu_type\fR.  Supported values for \fIcpu_type\fR are
+\&\fBmcm\fR, \fBgr5\fR and \fBgr6\fR.
+.Sp
+\&\fBmcm\fR is a synonym of \fBgr5\fR present for backward compatibility.
+.Sp
+By default (unless configured otherwise), \s-1GCC\s0 generates code for the \s-1GR5\s0
+variant of the Visium architecture.
+.Sp
+With \fB\-mcpu=gr6\fR, \s-1GCC\s0 generates code for the \s-1GR6\s0 variant of the Visium
+architecture.  The only difference from \s-1GR5\s0 code is that the compiler will
+generate block move instructions.
+.IP "\fB\-mtune=\fR\fIcpu_type\fR" 4
+.IX Item "-mtune=cpu_type"
+Set the instruction scheduling parameters for machine type \fIcpu_type\fR,
+but do not set the instruction set or register set that the option
+\&\fB\-mcpu=\fR\fIcpu_type\fR would.
+.IP "\fB\-msv\-mode\fR" 4
+.IX Item "-msv-mode"
+Generate code for the supervisor mode, where there are no restrictions on
+the access to general registers.  This is the default.
+.IP "\fB\-muser\-mode\fR" 4
+.IX Item "-muser-mode"
+Generate code for the user mode, where the access to some general registers
+is forbidden: on the \s-1GR5,\s0 registers r24 to r31 cannot be accessed in this
+mode; on the \s-1GR6,\s0 only registers r29 to r31 are affected.
+.PP
+\fI\s-1VMS\s0 Options\fR
+.IX Subsection "VMS Options"
+.PP
+These \fB\-m\fR options are defined for the \s-1VMS\s0 implementations:
+.IP "\fB\-mvms\-return\-codes\fR" 4
+.IX Item "-mvms-return-codes"
+Return \s-1VMS\s0 condition codes from \f(CW\*(C`main\*(C'\fR. The default is to return POSIX-style
+condition (e.g. error) codes.
+.IP "\fB\-mdebug\-main=\fR\fIprefix\fR" 4
+.IX Item "-mdebug-main=prefix"
+Flag the first routine whose name starts with \fIprefix\fR as the main
+routine for the debugger.
+.IP "\fB\-mmalloc64\fR" 4
+.IX Item "-mmalloc64"
+Default to 64\-bit memory allocation routines.
+.IP "\fB\-mpointer\-size=\fR\fIsize\fR" 4
+.IX Item "-mpointer-size=size"
+Set the default size of pointers. Possible options for \fIsize\fR are
+\&\fB32\fR or \fBshort\fR for 32 bit pointers, \fB64\fR or \fBlong\fR
+for 64 bit pointers, and \fBno\fR for supporting only 32 bit pointers.
+The later option disables \f(CW\*(C`pragma pointer_size\*(C'\fR.
+.PP
+\fIVxWorks Options\fR
+.IX Subsection "VxWorks Options"
+.PP
+The options in this section are defined for all VxWorks targets.
+Options specific to the target hardware are listed with the other
+options for that target.
+.IP "\fB\-mrtp\fR" 4
+.IX Item "-mrtp"
+\&\s-1GCC\s0 can generate code for both VxWorks kernels and real time processes
+(RTPs).  This option switches from the former to the latter.  It also
+defines the preprocessor macro \f(CW\*(C`_\|_RTP_\|_\*(C'\fR.
+.IP "\fB\-non\-static\fR" 4
+.IX Item "-non-static"
+Link an \s-1RTP\s0 executable against shared libraries rather than static
+libraries.  The options \fB\-static\fR and \fB\-shared\fR can
+also be used for RTPs; \fB\-static\fR
+is the default.
+.IP "\fB\-Bstatic\fR" 4
+.IX Item "-Bstatic"
+.PD 0
+.IP "\fB\-Bdynamic\fR" 4
+.IX Item "-Bdynamic"
+.PD
+These options are passed down to the linker.  They are defined for
+compatibility with Diab.
+.IP "\fB\-Xbind\-lazy\fR" 4
+.IX Item "-Xbind-lazy"
+Enable lazy binding of function calls.  This option is equivalent to
+\&\fB\-Wl,\-z,now\fR and is defined for compatibility with Diab.
+.IP "\fB\-Xbind\-now\fR" 4
+.IX Item "-Xbind-now"
+Disable lazy binding of function calls.  This option is the default and
+is defined for compatibility with Diab.
+.PP
+\fIx86 Options\fR
+.IX Subsection "x86 Options"
+.PP
+These \fB\-m\fR options are defined for the x86 family of computers.
+.IP "\fB\-march=\fR\fIcpu-type\fR" 4
+.IX Item "-march=cpu-type"
+Generate instructions for the machine type \fIcpu-type\fR.  In contrast to
+\&\fB\-mtune=\fR\fIcpu-type\fR, which merely tunes the generated code 
+for the specified \fIcpu-type\fR, \fB\-march=\fR\fIcpu-type\fR allows \s-1GCC\s0
+to generate code that may not run at all on processors other than the one
+indicated.  Specifying \fB\-march=\fR\fIcpu-type\fR implies 
+\&\fB\-mtune=\fR\fIcpu-type\fR.
+.Sp
+The choices for \fIcpu-type\fR are:
+.RS 4
+.IP "\fBnative\fR" 4
+.IX Item "native"
+This selects the \s-1CPU\s0 to generate code for at compilation time by determining
+the processor type of the compiling machine.  Using \fB\-march=native\fR
+enables all instruction subsets supported by the local machine (hence
+the result might not run on different machines).  Using \fB\-mtune=native\fR
+produces code optimized for the local machine under the constraints
+of the selected instruction set.
+.IP "\fBx86\-64\fR" 4
+.IX Item "x86-64"
+A generic \s-1CPU\s0 with 64\-bit extensions.
+.IP "\fBi386\fR" 4
+.IX Item "i386"
+Original Intel i386 \s-1CPU.\s0
+.IP "\fBi486\fR" 4
+.IX Item "i486"
+Intel i486 \s-1CPU.\s0  (No scheduling is implemented for this chip.)
+.IP "\fBi586\fR" 4
+.IX Item "i586"
+.PD 0
+.IP "\fBpentium\fR" 4
+.IX Item "pentium"
+.PD
+Intel Pentium \s-1CPU\s0 with no \s-1MMX\s0 support.
+.IP "\fBlakemont\fR" 4
+.IX Item "lakemont"
+Intel Lakemont \s-1MCU,\s0 based on Intel Pentium \s-1CPU.\s0
+.IP "\fBpentium-mmx\fR" 4
+.IX Item "pentium-mmx"
+Intel Pentium \s-1MMX CPU,\s0 based on Pentium core with \s-1MMX\s0 instruction set support.
+.IP "\fBpentiumpro\fR" 4
+.IX Item "pentiumpro"
+Intel Pentium Pro \s-1CPU.\s0
+.IP "\fBi686\fR" 4
+.IX Item "i686"
+When used with \fB\-march\fR, the Pentium Pro
+instruction set is used, so the code runs on all i686 family chips.
+When used with \fB\-mtune\fR, it has the same meaning as \fBgeneric\fR.
+.IP "\fBpentium2\fR" 4
+.IX Item "pentium2"
+Intel Pentium \s-1II CPU,\s0 based on Pentium Pro core with \s-1MMX\s0 instruction set
+support.
+.IP "\fBpentium3\fR" 4
+.IX Item "pentium3"
+.PD 0
+.IP "\fBpentium3m\fR" 4
+.IX Item "pentium3m"
+.PD
+Intel Pentium \s-1III CPU,\s0 based on Pentium Pro core with \s-1MMX\s0 and \s-1SSE\s0 instruction
+set support.
+.IP "\fBpentium-m\fR" 4
+.IX Item "pentium-m"
+Intel Pentium M; low-power version of Intel Pentium \s-1III CPU\s0
+with \s-1MMX, SSE\s0 and \s-1SSE2\s0 instruction set support.  Used by Centrino notebooks.
+.IP "\fBpentium4\fR" 4
+.IX Item "pentium4"
+.PD 0
+.IP "\fBpentium4m\fR" 4
+.IX Item "pentium4m"
+.PD
+Intel Pentium 4 \s-1CPU\s0 with \s-1MMX, SSE\s0 and \s-1SSE2\s0 instruction set support.
+.IP "\fBprescott\fR" 4
+.IX Item "prescott"
+Improved version of Intel Pentium 4 \s-1CPU\s0 with \s-1MMX, SSE, SSE2\s0 and \s-1SSE3\s0 instruction
+set support.
+.IP "\fBnocona\fR" 4
+.IX Item "nocona"
+Improved version of Intel Pentium 4 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE,
+SSE2\s0 and \s-1SSE3\s0 instruction set support.
+.IP "\fBcore2\fR" 4
+.IX Item "core2"
+Intel Core 2 \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0
+instruction set support.
+.IP "\fBnehalem\fR" 4
+.IX Item "nehalem"
+Intel Nehalem \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
+SSE4.1, SSE4.2\s0 and \s-1POPCNT\s0 instruction set support.
+.IP "\fBwestmere\fR" 4
+.IX Item "westmere"
+Intel Westmere \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
+SSE4.1, SSE4.2, POPCNT, AES\s0 and \s-1PCLMUL\s0 instruction set support.
+.IP "\fBsandybridge\fR" 4
+.IX Item "sandybridge"
+Intel Sandy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
+SSE4.1, SSE4.2, POPCNT, AVX, AES\s0 and \s-1PCLMUL\s0 instruction set support.
+.IP "\fBivybridge\fR" 4
+.IX Item "ivybridge"
+Intel Ivy Bridge \s-1CPU\s0 with 64\-bit extensions, \s-1MMX, SSE, SSE2, SSE3, SSSE3,
+SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND\s0 and F16C
+instruction set support.
+.IP "\fBhaswell\fR" 4
+.IX Item "haswell"
+Intel Haswell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
+SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
+BMI, BMI2\s0 and F16C instruction set support.
+.IP "\fBbroadwell\fR" 4
+.IX Item "broadwell"
+Intel Broadwell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
+SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
+BMI, BMI2, F16C, RDSEED, ADCX\s0 and \s-1PREFETCHW\s0 instruction set support.
+.IP "\fBskylake\fR" 4
+.IX Item "skylake"
+Intel Skylake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
+SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
+BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC\s0 and
+\&\s-1XSAVES\s0 instruction set support.
+.IP "\fBbonnell\fR" 4
+.IX Item "bonnell"
+Intel Bonnell \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0
+instruction set support.
+.IP "\fBsilvermont\fR" 4
+.IX Item "silvermont"
+Intel Silvermont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
+SSE4.1, SSE4.2, POPCNT, AES, PCLMUL\s0 and \s-1RDRND\s0 instruction set support.
+.IP "\fBgoldmont\fR" 4
+.IX Item "goldmont"
+Intel Goldmont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
+SSE4.1, SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT\s0 and \s-1FSGSBASE\s0
+instruction set support.
+.IP "\fBgoldmont-plus\fR" 4
+.IX Item "goldmont-plus"
+Intel Goldmont Plus \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
+SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE,
+PTWRITE, RDPID, SGX\s0 and \s-1UMIP\s0 instruction set support.
+.IP "\fBtremont\fR" 4
+.IX Item "tremont"
+Intel Tremont \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
+SSE4.1, SSE4.2, POPCNT, AES, PCLMUL, RDRND, XSAVE, XSAVEOPT, FSGSBASE, PTWRITE,
+RDPID, SGX, UMIP,\s0 GFNI-SSE, \s-1CLWB\s0 and \s-1ENCLV\s0 instruction set support.
+.IP "\fBknl\fR" 4
+.IX Item "knl"
+Intel Knight's Landing \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
+SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
+BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER\s0 and
+\&\s-1AVX512CD\s0 instruction set support.
+.IP "\fBknm\fR" 4
+.IX Item "knm"
+Intel Knights Mill \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
+SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
+BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER, AVX512CD,
+AVX5124VNNIW, AVX5124FMAPS\s0 and \s-1AVX512VPOPCNTDQ\s0 instruction set support.
+.IP "\fBskylake\-avx512\fR" 4
+.IX Item "skylake-avx512"
+Intel Skylake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3,
+SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA,
+BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F,
+CLWB, AVX512VL, AVX512BW, AVX512DQ\s0 and \s-1AVX512CD\s0 instruction set support.
+.IP "\fBcannonlake\fR" 4
+.IX Item "cannonlake"
+Intel Cannonlake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2,
+SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE,
+RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
+XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
+AVX512IFMA, SHA\s0 and \s-1UMIP\s0 instruction set support.
+.IP "\fBicelake-client\fR" 4
+.IX Item "icelake-client"
+Intel Icelake Client \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2,
+SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE,
+RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
+XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
+AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
+AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES\s0 instruction set support.
+.IP "\fBicelake-server\fR" 4
+.IX Item "icelake-server"
+Intel Icelake Server \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2,
+SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE,
+RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC,
+XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD, AVX512VBMI,
+AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI, AVX512VBMI2, AVX512VPOPCNTDQ,
+AVX512BITALG, AVX512VNNI, VPCLMULQDQ, VAES, PCONFIG\s0 and \s-1WBNOINVD\s0 instruction
+set support.
+.IP "\fBcascadelake\fR" 4
+.IX Item "cascadelake"
+Intel Cascadelake \s-1CPU\s0 with 64\-bit extensions, \s-1MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
+SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
+BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, CLWB,
+AVX512VL, AVX512BW, AVX512DQ, AVX512CD\s0 and \s-1AVX512VNNI\s0 instruction set support.
+.IP "\fBk6\fR" 4
+.IX Item "k6"
+\&\s-1AMD K6 CPU\s0 with \s-1MMX\s0 instruction set support.
+.IP "\fBk6\-2\fR" 4
+.IX Item "k6-2"
+.PD 0
+.IP "\fBk6\-3\fR" 4
+.IX Item "k6-3"
+.PD
+Improved versions of \s-1AMD K6 CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.
+.IP "\fBathlon\fR" 4
+.IX Item "athlon"
+.PD 0
+.IP "\fBathlon-tbird\fR" 4
+.IX Item "athlon-tbird"
+.PD
+\&\s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX,\s0 3dNOW!, enhanced 3DNow! and \s-1SSE\s0 prefetch instructions
+support.
+.IP "\fBathlon\-4\fR" 4
+.IX Item "athlon-4"
+.PD 0
+.IP "\fBathlon-xp\fR" 4
+.IX Item "athlon-xp"
+.IP "\fBathlon-mp\fR" 4
+.IX Item "athlon-mp"
+.PD
+Improved \s-1AMD\s0 Athlon \s-1CPU\s0 with \s-1MMX,\s0 3DNow!, enhanced 3DNow! and full \s-1SSE\s0
+instruction set support.
+.IP "\fBk8\fR" 4
+.IX Item "k8"
+.PD 0
+.IP "\fBopteron\fR" 4
+.IX Item "opteron"
+.IP "\fBathlon64\fR" 4
+.IX Item "athlon64"
+.IP "\fBathlon-fx\fR" 4
+.IX Item "athlon-fx"
+.PD
+Processors based on the \s-1AMD K8\s0 core with x86\-64 instruction set support,
+including the \s-1AMD\s0 Opteron, Athlon 64, and Athlon 64 \s-1FX\s0 processors.
+(This supersets \s-1MMX, SSE, SSE2,\s0 3DNow!, enhanced 3DNow! and 64\-bit
+instruction set extensions.)
+.IP "\fBk8\-sse3\fR" 4
+.IX Item "k8-sse3"
+.PD 0
+.IP "\fBopteron\-sse3\fR" 4
+.IX Item "opteron-sse3"
+.IP "\fBathlon64\-sse3\fR" 4
+.IX Item "athlon64-sse3"
+.PD
+Improved versions of \s-1AMD K8\s0 cores with \s-1SSE3\s0 instruction set support.
+.IP "\fBamdfam10\fR" 4
+.IX Item "amdfam10"
+.PD 0
+.IP "\fBbarcelona\fR" 4
+.IX Item "barcelona"
+.PD
+CPUs based on \s-1AMD\s0 Family 10h cores with x86\-64 instruction set support.  (This
+supersets \s-1MMX, SSE, SSE2, SSE3, SSE4A,\s0 3DNow!, enhanced 3DNow!, \s-1ABM\s0 and 64\-bit
+instruction set extensions.)
+.IP "\fBbdver1\fR" 4
+.IX Item "bdver1"
+CPUs based on \s-1AMD\s0 Family 15h cores with x86\-64 instruction set support.  (This
+supersets \s-1FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
+SSSE3, SSE4.1, SSE4.2, ABM\s0 and 64\-bit instruction set extensions.)
+.IP "\fBbdver2\fR" 4
+.IX Item "bdver2"
+\&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
+supersets \s-1BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX,
+SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM\s0 and 64\-bit instruction set 
+extensions.)
+.IP "\fBbdver3\fR" 4
+.IX Item "bdver3"
+\&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
+supersets \s-1BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES,\s0 
+\&\s-1PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM\s0 and 
+64\-bit instruction set extensions.
+.IP "\fBbdver4\fR" 4
+.IX Item "bdver4"
+\&\s-1AMD\s0 Family 15h core based CPUs with x86\-64 instruction set support.  (This
+supersets \s-1BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP,\s0 
+\&\s-1AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,\s0 
+\&\s-1SSE4.2, ABM\s0 and 64\-bit instruction set extensions.
+.IP "\fBznver1\fR" 4
+.IX Item "znver1"
+\&\s-1AMD\s0 Family 17h core based CPUs with x86\-64 instruction set support.  (This
+supersets \s-1BMI, BMI2, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX,
+SHA, CLZERO, AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3,
+SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT,\s0 and 64\-bit
+instruction set extensions.
+.IP "\fBznver2\fR" 4
+.IX Item "znver2"
+\&\s-1AMD\s0 Family 17h core based CPUs with x86\-64 instruction set support. (This
+supersets \s-1BMI, BMI2, ,CLWB, F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED,
+MWAITX, SHA, CLZERO, AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
+SSSE3, SSE4.1, SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT,\s0 and 64\-bit
+instruction set extensions.)
+.IP "\fBbtver1\fR" 4
+.IX Item "btver1"
+CPUs based on \s-1AMD\s0 Family 14h cores with x86\-64 instruction set support.  (This
+supersets \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM\s0 and 64\-bit
+instruction set extensions.)
+.IP "\fBbtver2\fR" 4
+.IX Item "btver2"
+CPUs based on \s-1AMD\s0 Family 16h cores with x86\-64 instruction set support. This
+includes \s-1MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM,
+SSE4A, SSSE3, SSE3, SSE2, SSE, MMX\s0 and 64\-bit instruction set extensions.
+.IP "\fBwinchip\-c6\fR" 4
+.IX Item "winchip-c6"
+\&\s-1IDT\s0 WinChip C6 \s-1CPU,\s0 dealt in same way as i486 with additional \s-1MMX\s0 instruction
+set support.
+.IP "\fBwinchip2\fR" 4
+.IX Item "winchip2"
+\&\s-1IDT\s0 WinChip 2 \s-1CPU,\s0 dealt in same way as i486 with additional \s-1MMX\s0 and 3DNow!
+instruction set support.
+.IP "\fBc3\fR" 4
+.IX Item "c3"
+\&\s-1VIA C3 CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.
+(No scheduling is implemented for this chip.)
+.IP "\fBc3\-2\fR" 4
+.IX Item "c3-2"
+\&\s-1VIA C3\-2\s0 (Nehemiah/C5XL) \s-1CPU\s0 with \s-1MMX\s0 and \s-1SSE\s0 instruction set support.
+(No scheduling is implemented for this chip.)
+.IP "\fBc7\fR" 4
+.IX Item "c7"
+\&\s-1VIA C7\s0 (Esther) \s-1CPU\s0 with \s-1MMX, SSE, SSE2\s0 and \s-1SSE3\s0 instruction set support.
+(No scheduling is implemented for this chip.)
+.IP "\fBsamuel\-2\fR" 4
+.IX Item "samuel-2"
+\&\s-1VIA\s0 Eden Samuel 2 \s-1CPU\s0 with \s-1MMX\s0 and 3DNow! instruction set support.
+(No scheduling is implemented for this chip.)
+.IP "\fBnehemiah\fR" 4
+.IX Item "nehemiah"
+\&\s-1VIA\s0 Eden Nehemiah \s-1CPU\s0 with \s-1MMX\s0 and \s-1SSE\s0 instruction set support.
+(No scheduling is implemented for this chip.)
+.IP "\fBesther\fR" 4
+.IX Item "esther"
+\&\s-1VIA\s0 Eden Esther \s-1CPU\s0 with \s-1MMX, SSE, SSE2\s0 and \s-1SSE3\s0 instruction set support.
+(No scheduling is implemented for this chip.)
+.IP "\fBeden\-x2\fR" 4
+.IX Item "eden-x2"
+\&\s-1VIA\s0 Eden X2 \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2\s0 and \s-1SSE3\s0 instruction set support.
+(No scheduling is implemented for this chip.)
+.IP "\fBeden\-x4\fR" 4
+.IX Item "eden-x4"
+\&\s-1VIA\s0 Eden X4 \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2,
+AVX\s0 and \s-1AVX2\s0 instruction set support.
+(No scheduling is implemented for this chip.)
+.IP "\fBnano\fR" 4
+.IX Item "nano"
+Generic \s-1VIA\s0 Nano \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0
+instruction set support.
+(No scheduling is implemented for this chip.)
+.IP "\fBnano\-1000\fR" 4
+.IX Item "nano-1000"
+\&\s-1VIA\s0 Nano 1xxx \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0
+instruction set support.
+(No scheduling is implemented for this chip.)
+.IP "\fBnano\-2000\fR" 4
+.IX Item "nano-2000"
+\&\s-1VIA\s0 Nano 2xxx \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3\s0 and \s-1SSSE3\s0
+instruction set support.
+(No scheduling is implemented for this chip.)
+.IP "\fBnano\-3000\fR" 4
+.IX Item "nano-3000"
+\&\s-1VIA\s0 Nano 3xxx \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3, SSSE3\s0 and \s-1SSE4.1\s0
+instruction set support.
+(No scheduling is implemented for this chip.)
+.IP "\fBnano\-x2\fR" 4
+.IX Item "nano-x2"
+\&\s-1VIA\s0 Nano Dual Core \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3, SSSE3\s0 and \s-1SSE4.1\s0
+instruction set support.
+(No scheduling is implemented for this chip.)
+.IP "\fBnano\-x4\fR" 4
+.IX Item "nano-x4"
+\&\s-1VIA\s0 Nano Quad Core \s-1CPU\s0 with x86\-64, \s-1MMX, SSE, SSE2, SSE3, SSSE3\s0 and \s-1SSE4.1\s0
+instruction set support.
+(No scheduling is implemented for this chip.)
+.IP "\fBgeode\fR" 4
+.IX Item "geode"
+\&\s-1AMD\s0 Geode embedded processor with \s-1MMX\s0 and 3DNow! instruction set support.
+.RE
+.RS 4
+.RE
+.IP "\fB\-mtune=\fR\fIcpu-type\fR" 4
+.IX Item "-mtune=cpu-type"
+Tune to \fIcpu-type\fR everything applicable about the generated code, except
+for the \s-1ABI\s0 and the set of available instructions.  
+While picking a specific \fIcpu-type\fR schedules things appropriately
+for that particular chip, the compiler does not generate any code that
+cannot run on the default machine type unless you use a
+\&\fB\-march=\fR\fIcpu-type\fR option.
+For example, if \s-1GCC\s0 is configured for i686\-pc\-linux\-gnu
+then \fB\-mtune=pentium4\fR generates code that is tuned for Pentium 4
+but still runs on i686 machines.
+.Sp
+The choices for \fIcpu-type\fR are the same as for \fB\-march\fR.
+In addition, \fB\-mtune\fR supports 2 extra choices for \fIcpu-type\fR:
+.RS 4
+.IP "\fBgeneric\fR" 4
+.IX Item "generic"
+Produce code optimized for the most common \s-1IA32/AMD64/EM64T\s0 processors.
+If you know the \s-1CPU\s0 on which your code will run, then you should use
+the corresponding \fB\-mtune\fR or \fB\-march\fR option instead of
+\&\fB\-mtune=generic\fR.  But, if you do not know exactly what \s-1CPU\s0 users
+of your application will have, then you should use this option.
+.Sp
+As new processors are deployed in the marketplace, the behavior of this
+option will change.  Therefore, if you upgrade to a newer version of
+\&\s-1GCC,\s0 code generation controlled by this option will change to reflect
+the processors
+that are most common at the time that version of \s-1GCC\s0 is released.
+.Sp
+There is no \fB\-march=generic\fR option because \fB\-march\fR
+indicates the instruction set the compiler can use, and there is no
+generic instruction set applicable to all processors.  In contrast,
+\&\fB\-mtune\fR indicates the processor (or, in this case, collection of
+processors) for which the code is optimized.
+.IP "\fBintel\fR" 4
+.IX Item "intel"
+Produce code optimized for the most current Intel processors, which are
+Haswell and Silvermont for this version of \s-1GCC.\s0  If you know the \s-1CPU\s0
+on which your code will run, then you should use the corresponding
+\&\fB\-mtune\fR or \fB\-march\fR option instead of \fB\-mtune=intel\fR.
+But, if you want your application performs better on both Haswell and
+Silvermont, then you should use this option.
+.Sp
+As new Intel processors are deployed in the marketplace, the behavior of
+this option will change.  Therefore, if you upgrade to a newer version of
+\&\s-1GCC,\s0 code generation controlled by this option will change to reflect
+the most current Intel processors at the time that version of \s-1GCC\s0 is
+released.
+.Sp
+There is no \fB\-march=intel\fR option because \fB\-march\fR indicates
+the instruction set the compiler can use, and there is no common
+instruction set applicable to all processors.  In contrast,
+\&\fB\-mtune\fR indicates the processor (or, in this case, collection of
+processors) for which the code is optimized.
+.RE
+.RS 4
+.RE
+.IP "\fB\-mcpu=\fR\fIcpu-type\fR" 4
+.IX Item "-mcpu=cpu-type"
+A deprecated synonym for \fB\-mtune\fR.
+.IP "\fB\-mfpmath=\fR\fIunit\fR" 4
+.IX Item "-mfpmath=unit"
+Generate floating-point arithmetic for selected unit \fIunit\fR.  The choices
+for \fIunit\fR are:
+.RS 4
+.IP "\fB387\fR" 4
+.IX Item "387"
+Use the standard 387 floating-point coprocessor present on the majority of chips and
+emulated otherwise.  Code compiled with this option runs almost everywhere.
+The temporary results are computed in 80\-bit precision instead of the precision
+specified by the type, resulting in slightly different results compared to most
+of other chips.  See \fB\-ffloat\-store\fR for more detailed description.
+.Sp
+This is the default choice for non-Darwin x86\-32 targets.
+.IP "\fBsse\fR" 4
+.IX Item "sse"
+Use scalar floating-point instructions present in the \s-1SSE\s0 instruction set.
+This instruction set is supported by Pentium \s-1III\s0 and newer chips,
+and in the \s-1AMD\s0 line
+by Athlon\-4, Athlon \s-1XP\s0 and Athlon \s-1MP\s0 chips.  The earlier version of the \s-1SSE\s0
+instruction set supports only single-precision arithmetic, thus the double and
+extended-precision arithmetic are still done using 387.  A later version, present
+only in Pentium 4 and \s-1AMD\s0 x86\-64 chips, supports double-precision
+arithmetic too.
+.Sp
+For the x86\-32 compiler, you must use \fB\-march=\fR\fIcpu-type\fR, \fB\-msse\fR
+or \fB\-msse2\fR switches to enable \s-1SSE\s0 extensions and make this option
+effective.  For the x86\-64 compiler, these extensions are enabled by default.
+.Sp
+The resulting code should be considerably faster in the majority of cases and avoid
+the numerical instability problems of 387 code, but may break some existing
+code that expects temporaries to be 80 bits.
+.Sp
+This is the default choice for the x86\-64 compiler, Darwin x86\-32 targets,
+and the default choice for x86\-32 targets with the \s-1SSE2\s0 instruction set
+when \fB\-ffast\-math\fR is enabled.
+.IP "\fBsse,387\fR" 4
+.IX Item "sse,387"
+.PD 0
+.IP "\fBsse+387\fR" 4
+.IX Item "sse+387"
+.IP "\fBboth\fR" 4
+.IX Item "both"
+.PD
+Attempt to utilize both instruction sets at once.  This effectively doubles the
+amount of available registers, and on chips with separate execution units for
+387 and \s-1SSE\s0 the execution resources too.  Use this option with care, as it is
+still experimental, because the \s-1GCC\s0 register allocator does not model separate
+functional units well, resulting in unstable performance.
+.RE
+.RS 4
+.RE
+.IP "\fB\-masm=\fR\fIdialect\fR" 4
+.IX Item "-masm=dialect"
+Output assembly instructions using selected \fIdialect\fR.  Also affects
+which dialect is used for basic \f(CW\*(C`asm\*(C'\fR and
+extended \f(CW\*(C`asm\*(C'\fR. Supported choices (in dialect
+order) are \fBatt\fR or \fBintel\fR. The default is \fBatt\fR. Darwin does
+not support \fBintel\fR.
+.IP "\fB\-mieee\-fp\fR" 4
+.IX Item "-mieee-fp"
+.PD 0
+.IP "\fB\-mno\-ieee\-fp\fR" 4
+.IX Item "-mno-ieee-fp"
+.PD
+Control whether or not the compiler uses \s-1IEEE\s0 floating-point
+comparisons.  These correctly handle the case where the result of a
+comparison is unordered.
+.IP "\fB\-m80387\fR" 4
+.IX Item "-m80387"
+.PD 0
+.IP "\fB\-mhard\-float\fR" 4
+.IX Item "-mhard-float"
+.PD
+Generate output containing 80387 instructions for floating point.
+.IP "\fB\-mno\-80387\fR" 4
+.IX Item "-mno-80387"
+.PD 0
+.IP "\fB\-msoft\-float\fR" 4
+.IX Item "-msoft-float"
+.PD
+Generate output containing library calls for floating point.
+.Sp
+\&\fBWarning:\fR the requisite libraries are not part of \s-1GCC.\s0
+Normally the facilities of the machine's usual C compiler are used, but
+this cannot be done directly in cross-compilation.  You must make your
+own arrangements to provide suitable library functions for
+cross-compilation.
+.Sp
+On machines where a function returns floating-point results in the 80387
+register stack, some floating-point opcodes may be emitted even if
+\&\fB\-msoft\-float\fR is used.
+.IP "\fB\-mno\-fp\-ret\-in\-387\fR" 4
+.IX Item "-mno-fp-ret-in-387"
+Do not use the \s-1FPU\s0 registers for return values of functions.
+.Sp
+The usual calling convention has functions return values of types
+\&\f(CW\*(C`float\*(C'\fR and \f(CW\*(C`double\*(C'\fR in an \s-1FPU\s0 register, even if there
+is no \s-1FPU.\s0  The idea is that the operating system should emulate
+an \s-1FPU.\s0
+.Sp
+The option \fB\-mno\-fp\-ret\-in\-387\fR causes such values to be returned
+in ordinary \s-1CPU\s0 registers instead.
+.IP "\fB\-mno\-fancy\-math\-387\fR" 4
+.IX Item "-mno-fancy-math-387"
+Some 387 emulators do not support the \f(CW\*(C`sin\*(C'\fR, \f(CW\*(C`cos\*(C'\fR and
+\&\f(CW\*(C`sqrt\*(C'\fR instructions for the 387.  Specify this option to avoid
+generating those instructions.
+This option is overridden when \fB\-march\fR
+indicates that the target \s-1CPU\s0 always has an \s-1FPU\s0 and so the
+instruction does not need emulation.  These
+instructions are not generated unless you also use the
+\&\fB\-funsafe\-math\-optimizations\fR switch.
+.IP "\fB\-malign\-double\fR" 4
+.IX Item "-malign-double"
+.PD 0
+.IP "\fB\-mno\-align\-double\fR" 4
+.IX Item "-mno-align-double"
+.PD
+Control whether \s-1GCC\s0 aligns \f(CW\*(C`double\*(C'\fR, \f(CW\*(C`long double\*(C'\fR, and
+\&\f(CW\*(C`long long\*(C'\fR variables on a two-word boundary or a one-word
+boundary.  Aligning \f(CW\*(C`double\*(C'\fR variables on a two-word boundary
+produces code that runs somewhat faster on a Pentium at the
+expense of more memory.
+.Sp
+On x86\-64, \fB\-malign\-double\fR is enabled by default.
+.Sp
+\&\fBWarning:\fR if you use the \fB\-malign\-double\fR switch,
+structures containing the above types are aligned differently than
+the published application binary interface specifications for the x86\-32
+and are not binary compatible with structures in code compiled
+without that switch.
+.IP "\fB\-m96bit\-long\-double\fR" 4
+.IX Item "-m96bit-long-double"
+.PD 0
+.IP "\fB\-m128bit\-long\-double\fR" 4
+.IX Item "-m128bit-long-double"
+.PD
+These switches control the size of \f(CW\*(C`long double\*(C'\fR type.  The x86\-32
+application binary interface specifies the size to be 96 bits,
+so \fB\-m96bit\-long\-double\fR is the default in 32\-bit mode.
+.Sp
+Modern architectures (Pentium and newer) prefer \f(CW\*(C`long double\*(C'\fR
+to be aligned to an 8\- or 16\-byte boundary.  In arrays or structures
+conforming to the \s-1ABI,\s0 this is not possible.  So specifying
+\&\fB\-m128bit\-long\-double\fR aligns \f(CW\*(C`long double\*(C'\fR
+to a 16\-byte boundary by padding the \f(CW\*(C`long double\*(C'\fR with an additional
+32\-bit zero.
+.Sp
+In the x86\-64 compiler, \fB\-m128bit\-long\-double\fR is the default choice as
+its \s-1ABI\s0 specifies that \f(CW\*(C`long double\*(C'\fR is aligned on 16\-byte boundary.
+.Sp
+Notice that neither of these options enable any extra precision over the x87
+standard of 80 bits for a \f(CW\*(C`long double\*(C'\fR.
+.Sp
+\&\fBWarning:\fR if you override the default value for your target \s-1ABI,\s0 this
+changes the size of 
+structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables,
+as well as modifying the function calling convention for functions taking
+\&\f(CW\*(C`long double\*(C'\fR.  Hence they are not binary-compatible
+with code compiled without that switch.
+.IP "\fB\-mlong\-double\-64\fR" 4
+.IX Item "-mlong-double-64"
+.PD 0
+.IP "\fB\-mlong\-double\-80\fR" 4
+.IX Item "-mlong-double-80"
+.IP "\fB\-mlong\-double\-128\fR" 4
+.IX Item "-mlong-double-128"
+.PD
+These switches control the size of \f(CW\*(C`long double\*(C'\fR type. A size
+of 64 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the \f(CW\*(C`double\*(C'\fR
+type. This is the default for 32\-bit Bionic C library.  A size
+of 128 bits makes the \f(CW\*(C`long double\*(C'\fR type equivalent to the
+\&\f(CW\*(C`_\|_float128\*(C'\fR type. This is the default for 64\-bit Bionic C library.
+.Sp
+\&\fBWarning:\fR if you override the default value for your target \s-1ABI,\s0 this
+changes the size of
+structures and arrays containing \f(CW\*(C`long double\*(C'\fR variables,
+as well as modifying the function calling convention for functions taking
+\&\f(CW\*(C`long double\*(C'\fR.  Hence they are not binary-compatible
+with code compiled without that switch.
+.IP "\fB\-malign\-data=\fR\fItype\fR" 4
+.IX Item "-malign-data=type"
+Control how \s-1GCC\s0 aligns variables.  Supported values for \fItype\fR are
+\&\fBcompat\fR uses increased alignment value compatible uses \s-1GCC 4.8\s0
+and earlier, \fBabi\fR uses alignment value as specified by the
+psABI, and \fBcacheline\fR uses increased alignment value to match
+the cache line size.  \fBcompat\fR is the default.
+.IP "\fB\-mlarge\-data\-threshold=\fR\fIthreshold\fR" 4
+.IX Item "-mlarge-data-threshold=threshold"
+When \fB\-mcmodel=medium\fR is specified, data objects larger than
+\&\fIthreshold\fR are placed in the large data section.  This value must be the
+same across all objects linked into the binary, and defaults to 65535.
+.IP "\fB\-mrtd\fR" 4
+.IX Item "-mrtd"
+Use a different function-calling convention, in which functions that
+take a fixed number of arguments return with the \f(CW\*(C`ret \f(CInum\f(CW\*(C'\fR
+instruction, which pops their arguments while returning.  This saves one
+instruction in the caller since there is no need to pop the arguments
+there.
+.Sp
+You can specify that an individual function is called with this calling
+sequence with the function attribute \f(CW\*(C`stdcall\*(C'\fR.  You can also
+override the \fB\-mrtd\fR option by using the function attribute
+\&\f(CW\*(C`cdecl\*(C'\fR.
+.Sp
+\&\fBWarning:\fR this calling convention is incompatible with the one
+normally used on Unix, so you cannot use it if you need to call
+libraries compiled with the Unix compiler.
+.Sp
+Also, you must provide function prototypes for all functions that
+take variable numbers of arguments (including \f(CW\*(C`printf\*(C'\fR);
+otherwise incorrect code is generated for calls to those
+functions.
+.Sp
+In addition, seriously incorrect code results if you call a
+function with too many arguments.  (Normally, extra arguments are
+harmlessly ignored.)
+.IP "\fB\-mregparm=\fR\fInum\fR" 4
+.IX Item "-mregparm=num"
+Control how many registers are used to pass integer arguments.  By
+default, no registers are used to pass arguments, and at most 3
+registers can be used.  You can control this behavior for a specific
+function by using the function attribute \f(CW\*(C`regparm\*(C'\fR.
+.Sp
+\&\fBWarning:\fR if you use this switch, and
+\&\fInum\fR is nonzero, then you must build all modules with the same
+value, including any libraries.  This includes the system libraries and
+startup modules.
+.IP "\fB\-msseregparm\fR" 4
+.IX Item "-msseregparm"
+Use \s-1SSE\s0 register passing conventions for float and double arguments
+and return values.  You can control this behavior for a specific
+function by using the function attribute \f(CW\*(C`sseregparm\*(C'\fR.
+.Sp
+\&\fBWarning:\fR if you use this switch then you must build all
+modules with the same value, including any libraries.  This includes
+the system libraries and startup modules.
+.IP "\fB\-mvect8\-ret\-in\-mem\fR" 4
+.IX Item "-mvect8-ret-in-mem"
+Return 8\-byte vectors in memory instead of \s-1MMX\s0 registers.  This is the
+default on Solaris@tie{}8 and 9 and VxWorks to match the \s-1ABI\s0 of the Sun
+Studio compilers until version 12.  Later compiler versions (starting
+with Studio 12 Update@tie{}1) follow the \s-1ABI\s0 used by other x86 targets, which
+is the default on Solaris@tie{}10 and later.  \fIOnly\fR use this option if
+you need to remain compatible with existing code produced by those
+previous compiler versions or older versions of \s-1GCC.\s0
+.IP "\fB\-mpc32\fR" 4
+.IX Item "-mpc32"
+.PD 0
+.IP "\fB\-mpc64\fR" 4
+.IX Item "-mpc64"
+.IP "\fB\-mpc80\fR" 4
+.IX Item "-mpc80"
+.PD
+Set 80387 floating-point precision to 32, 64 or 80 bits.  When \fB\-mpc32\fR
+is specified, the significands of results of floating-point operations are
+rounded to 24 bits (single precision); \fB\-mpc64\fR rounds the
+significands of results of floating-point operations to 53 bits (double
+precision) and \fB\-mpc80\fR rounds the significands of results of
+floating-point operations to 64 bits (extended double precision), which is
+the default.  When this option is used, floating-point operations in higher
+precisions are not available to the programmer without setting the \s-1FPU\s0
+control word explicitly.
+.Sp
+Setting the rounding of floating-point operations to less than the default
+80 bits can speed some programs by 2% or more.  Note that some mathematical
+libraries assume that extended-precision (80\-bit) floating-point operations
+are enabled by default; routines in such libraries could suffer significant
+loss of accuracy, typically through so-called \*(L"catastrophic cancellation\*(R",
+when this option is used to set the precision to less than extended precision.
+.IP "\fB\-mstackrealign\fR" 4
+.IX Item "-mstackrealign"
+Realign the stack at entry.  On the x86, the \fB\-mstackrealign\fR
+option generates an alternate prologue and epilogue that realigns the
+run-time stack if necessary.  This supports mixing legacy codes that keep
+4\-byte stack alignment with modern codes that keep 16\-byte stack alignment for
+\&\s-1SSE\s0 compatibility.  See also the attribute \f(CW\*(C`force_align_arg_pointer\*(C'\fR,
+applicable to individual functions.
+.IP "\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR" 4
+.IX Item "-mpreferred-stack-boundary=num"
+Attempt to keep the stack boundary aligned to a 2 raised to \fInum\fR
+byte boundary.  If \fB\-mpreferred\-stack\-boundary\fR is not specified,
+the default is 4 (16 bytes or 128 bits).
+.Sp
+\&\fBWarning:\fR When generating code for the x86\-64 architecture with
+\&\s-1SSE\s0 extensions disabled, \fB\-mpreferred\-stack\-boundary=3\fR can be
+used to keep the stack boundary aligned to 8 byte boundary.  Since
+x86\-64 \s-1ABI\s0 require 16 byte stack alignment, this is \s-1ABI\s0 incompatible and
+intended to be used in controlled environment where stack space is
+important limitation.  This option leads to wrong code when functions
+compiled with 16 byte stack alignment (such as functions from a standard
+library) are called with misaligned stack.  In this case, \s-1SSE\s0
+instructions may lead to misaligned memory access traps.  In addition,
+variable arguments are handled incorrectly for 16 byte aligned
+objects (including x87 long double and _\|_int128), leading to wrong
+results.  You must build all modules with
+\&\fB\-mpreferred\-stack\-boundary=3\fR, including any libraries.  This
+includes the system libraries and startup modules.
+.IP "\fB\-mincoming\-stack\-boundary=\fR\fInum\fR" 4
+.IX Item "-mincoming-stack-boundary=num"
+Assume the incoming stack is aligned to a 2 raised to \fInum\fR byte
+boundary.  If \fB\-mincoming\-stack\-boundary\fR is not specified,
+the one specified by \fB\-mpreferred\-stack\-boundary\fR is used.
+.Sp
+On Pentium and Pentium Pro, \f(CW\*(C`double\*(C'\fR and \f(CW\*(C`long double\*(C'\fR values
+should be aligned to an 8\-byte boundary (see \fB\-malign\-double\fR) or
+suffer significant run time performance penalties.  On Pentium \s-1III,\s0 the
+Streaming \s-1SIMD\s0 Extension (\s-1SSE\s0) data type \f(CW\*(C`_\|_m128\*(C'\fR may not work
+properly if it is not 16\-byte aligned.
+.Sp
+To ensure proper alignment of this values on the stack, the stack boundary
+must be as aligned as that required by any value stored on the stack.
+Further, every function must be generated such that it keeps the stack
+aligned.  Thus calling a function compiled with a higher preferred
+stack boundary from a function compiled with a lower preferred stack
+boundary most likely misaligns the stack.  It is recommended that
+libraries that use callbacks always use the default setting.
+.Sp
+This extra alignment does consume extra stack space, and generally
+increases code size.  Code that is sensitive to stack space usage, such
+as embedded systems and operating system kernels, may want to reduce the
+preferred alignment to \fB\-mpreferred\-stack\-boundary=2\fR.
+.IP "\fB\-mmmx\fR" 4
+.IX Item "-mmmx"
+.PD 0
+.IP "\fB\-msse\fR" 4
+.IX Item "-msse"
+.IP "\fB\-msse2\fR" 4
+.IX Item "-msse2"
+.IP "\fB\-msse3\fR" 4
+.IX Item "-msse3"
+.IP "\fB\-mssse3\fR" 4
+.IX Item "-mssse3"
+.IP "\fB\-msse4\fR" 4
+.IX Item "-msse4"
+.IP "\fB\-msse4a\fR" 4
+.IX Item "-msse4a"
+.IP "\fB\-msse4.1\fR" 4
+.IX Item "-msse4.1"
+.IP "\fB\-msse4.2\fR" 4
+.IX Item "-msse4.2"
+.IP "\fB\-mavx\fR" 4
+.IX Item "-mavx"
+.IP "\fB\-mavx2\fR" 4
+.IX Item "-mavx2"
+.IP "\fB\-mavx512f\fR" 4
+.IX Item "-mavx512f"
+.IP "\fB\-mavx512pf\fR" 4
+.IX Item "-mavx512pf"
+.IP "\fB\-mavx512er\fR" 4
+.IX Item "-mavx512er"
+.IP "\fB\-mavx512cd\fR" 4
+.IX Item "-mavx512cd"
+.IP "\fB\-mavx512vl\fR" 4
+.IX Item "-mavx512vl"
+.IP "\fB\-mavx512bw\fR" 4
+.IX Item "-mavx512bw"
+.IP "\fB\-mavx512dq\fR" 4
+.IX Item "-mavx512dq"
+.IP "\fB\-mavx512ifma\fR" 4
+.IX Item "-mavx512ifma"
+.IP "\fB\-mavx512vbmi\fR" 4
+.IX Item "-mavx512vbmi"
+.IP "\fB\-msha\fR" 4
+.IX Item "-msha"
+.IP "\fB\-maes\fR" 4
+.IX Item "-maes"
+.IP "\fB\-mpclmul\fR" 4
+.IX Item "-mpclmul"
+.IP "\fB\-mclflushopt\fR" 4
+.IX Item "-mclflushopt"
+.IP "\fB\-mclwb\fR" 4
+.IX Item "-mclwb"
+.IP "\fB\-mfsgsbase\fR" 4
+.IX Item "-mfsgsbase"
+.IP "\fB\-mptwrite\fR" 4
+.IX Item "-mptwrite"
+.IP "\fB\-mrdrnd\fR" 4
+.IX Item "-mrdrnd"
+.IP "\fB\-mf16c\fR" 4
+.IX Item "-mf16c"
+.IP "\fB\-mfma\fR" 4
+.IX Item "-mfma"
+.IP "\fB\-mpconfig\fR" 4
+.IX Item "-mpconfig"
+.IP "\fB\-mwbnoinvd\fR" 4
+.IX Item "-mwbnoinvd"
+.IP "\fB\-mfma4\fR" 4
+.IX Item "-mfma4"
+.IP "\fB\-mprfchw\fR" 4
+.IX Item "-mprfchw"
+.IP "\fB\-mrdpid\fR" 4
+.IX Item "-mrdpid"
+.IP "\fB\-mprefetchwt1\fR" 4
+.IX Item "-mprefetchwt1"
+.IP "\fB\-mrdseed\fR" 4
+.IX Item "-mrdseed"
+.IP "\fB\-msgx\fR" 4
+.IX Item "-msgx"
+.IP "\fB\-mxop\fR" 4
+.IX Item "-mxop"
+.IP "\fB\-mlwp\fR" 4
+.IX Item "-mlwp"
+.IP "\fB\-m3dnow\fR" 4
+.IX Item "-m3dnow"
+.IP "\fB\-m3dnowa\fR" 4
+.IX Item "-m3dnowa"
+.IP "\fB\-mpopcnt\fR" 4
+.IX Item "-mpopcnt"
+.IP "\fB\-mabm\fR" 4
+.IX Item "-mabm"
+.IP "\fB\-madx\fR" 4
+.IX Item "-madx"
+.IP "\fB\-mbmi\fR" 4
+.IX Item "-mbmi"
+.IP "\fB\-mbmi2\fR" 4
+.IX Item "-mbmi2"
+.IP "\fB\-mlzcnt\fR" 4
+.IX Item "-mlzcnt"
+.IP "\fB\-mfxsr\fR" 4
+.IX Item "-mfxsr"
+.IP "\fB\-mxsave\fR" 4
+.IX Item "-mxsave"
+.IP "\fB\-mxsaveopt\fR" 4
+.IX Item "-mxsaveopt"
+.IP "\fB\-mxsavec\fR" 4
+.IX Item "-mxsavec"
+.IP "\fB\-mxsaves\fR" 4
+.IX Item "-mxsaves"
+.IP "\fB\-mrtm\fR" 4
+.IX Item "-mrtm"
+.IP "\fB\-mhle\fR" 4
+.IX Item "-mhle"
+.IP "\fB\-mtbm\fR" 4
+.IX Item "-mtbm"
+.IP "\fB\-mmwaitx\fR" 4
+.IX Item "-mmwaitx"
+.IP "\fB\-mclzero\fR" 4
+.IX Item "-mclzero"
+.IP "\fB\-mpku\fR" 4
+.IX Item "-mpku"
+.IP "\fB\-mavx512vbmi2\fR" 4
+.IX Item "-mavx512vbmi2"
+.IP "\fB\-mgfni\fR" 4
+.IX Item "-mgfni"
+.IP "\fB\-mvaes\fR" 4
+.IX Item "-mvaes"
+.IP "\fB\-mwaitpkg\fR" 4
+.IX Item "-mwaitpkg"
+.IP "\fB\-mvpclmulqdq\fR" 4
+.IX Item "-mvpclmulqdq"
+.IP "\fB\-mavx512bitalg\fR" 4
+.IX Item "-mavx512bitalg"
+.IP "\fB\-mmovdiri\fR" 4
+.IX Item "-mmovdiri"
+.IP "\fB\-mmovdir64b\fR" 4
+.IX Item "-mmovdir64b"
+.IP "\fB\-mavx512vpopcntdq\fR" 4
+.IX Item "-mavx512vpopcntdq"
+.IP "\fB\-mavx5124fmaps\fR" 4
+.IX Item "-mavx5124fmaps"
+.IP "\fB\-mavx512vnni\fR" 4
+.IX Item "-mavx512vnni"
+.IP "\fB\-mavx5124vnniw\fR" 4
+.IX Item "-mavx5124vnniw"
+.IP "\fB\-mcldemote\fR" 4
+.IX Item "-mcldemote"
+.PD
+These switches enable the use of instructions in the \s-1MMX, SSE,
+SSE2, SSE3, SSSE3, SSE4, SSE4A, SSE4.1, SSE4.2, AVX, AVX2, AVX512F, AVX512PF,
+AVX512ER, AVX512CD, AVX512VL, AVX512BW, AVX512DQ, AVX512IFMA, AVX512VBMI, SHA,
+AES, PCLMUL, CLFLUSHOPT, CLWB, FSGSBASE, PTWRITE, RDRND, F16C, FMA, PCONFIG,
+WBNOINVD, FMA4, PREFETCHW, RDPID, PREFETCHWT1, RDSEED, SGX, XOP, LWP,\s0
+3DNow!, enhanced 3DNow!, \s-1POPCNT, ABM, ADX, BMI, BMI2, LZCNT, FXSR, XSAVE,
+XSAVEOPT, XSAVEC, XSAVES, RTM, HLE, TBM, MWAITX, CLZERO, PKU, AVX512VBMI2,
+GFNI, VAES, WAITPKG, VPCLMULQDQ, AVX512BITALG, MOVDIRI, MOVDIR64B,
+AVX512VPOPCNTDQ, AVX5124FMAPS, AVX512VNNI, AVX5124VNNIW,\s0 or \s-1CLDEMOTE\s0
+extended instruction sets.  Each has a corresponding \fB\-mno\-\fR option to
+disable use of these instructions.
+.Sp
+These extensions are also available as built-in functions: see
+\&\fBx86 Built-in Functions\fR, for details of the functions enabled and
+disabled by these switches.
+.Sp
+To generate \s-1SSE/SSE2\s0 instructions automatically from floating-point
+code (as opposed to 387 instructions), see \fB\-mfpmath=sse\fR.
+.Sp
+\&\s-1GCC\s0 depresses SSEx instructions when \fB\-mavx\fR is used. Instead, it
+generates new \s-1AVX\s0 instructions or \s-1AVX\s0 equivalence for all SSEx instructions
+when needed.
+.Sp
+These options enable \s-1GCC\s0 to use these extended instructions in
+generated code, even without \fB\-mfpmath=sse\fR.  Applications that
+perform run-time \s-1CPU\s0 detection must compile separate files for each
+supported architecture, using the appropriate flags.  In particular,
+the file containing the \s-1CPU\s0 detection code should be compiled without
+these options.
+.IP "\fB\-mdump\-tune\-features\fR" 4
+.IX Item "-mdump-tune-features"
+This option instructs \s-1GCC\s0 to dump the names of the x86 performance 
+tuning features and default settings. The names can be used in 
+\&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR.
+.IP "\fB\-mtune\-ctrl=\fR\fIfeature-list\fR" 4
+.IX Item "-mtune-ctrl=feature-list"
+This option is used to do fine grain control of x86 code generation features.
+\&\fIfeature-list\fR is a comma separated list of \fIfeature\fR names. See also
+\&\fB\-mdump\-tune\-features\fR. When specified, the \fIfeature\fR is turned
+on if it is not preceded with \fB^\fR, otherwise, it is turned off. 
+\&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR is intended to be used by \s-1GCC\s0
+developers. Using it may lead to code paths not covered by testing and can
+potentially result in compiler ICEs or runtime errors.
+.IP "\fB\-mno\-default\fR" 4
+.IX Item "-mno-default"
+This option instructs \s-1GCC\s0 to turn off all tunable features. See also 
+\&\fB\-mtune\-ctrl=\fR\fIfeature-list\fR and \fB\-mdump\-tune\-features\fR.
+.IP "\fB\-mcld\fR" 4
+.IX Item "-mcld"
+This option instructs \s-1GCC\s0 to emit a \f(CW\*(C`cld\*(C'\fR instruction in the prologue
+of functions that use string instructions.  String instructions depend on
+the \s-1DF\s0 flag to select between autoincrement or autodecrement mode.  While the
+\&\s-1ABI\s0 specifies the \s-1DF\s0 flag to be cleared on function entry, some operating
+systems violate this specification by not clearing the \s-1DF\s0 flag in their
+exception dispatchers.  The exception handler can be invoked with the \s-1DF\s0 flag
+set, which leads to wrong direction mode when string instructions are used.
+This option can be enabled by default on 32\-bit x86 targets by configuring
+\&\s-1GCC\s0 with the \fB\-\-enable\-cld\fR configure option.  Generation of \f(CW\*(C`cld\*(C'\fR
+instructions can be suppressed with the \fB\-mno\-cld\fR compiler option
+in this case.
+.IP "\fB\-mvzeroupper\fR" 4
+.IX Item "-mvzeroupper"
+This option instructs \s-1GCC\s0 to emit a \f(CW\*(C`vzeroupper\*(C'\fR instruction
+before a transfer of control flow out of the function to minimize
+the \s-1AVX\s0 to \s-1SSE\s0 transition penalty as well as remove unnecessary \f(CW\*(C`zeroupper\*(C'\fR
+intrinsics.
+.IP "\fB\-mprefer\-avx128\fR" 4
+.IX Item "-mprefer-avx128"
+This option instructs \s-1GCC\s0 to use 128\-bit \s-1AVX\s0 instructions instead of
+256\-bit \s-1AVX\s0 instructions in the auto-vectorizer.
+.IP "\fB\-mprefer\-vector\-width=\fR\fIopt\fR" 4
+.IX Item "-mprefer-vector-width=opt"
+This option instructs \s-1GCC\s0 to use \fIopt\fR\-bit vector width in instructions
+instead of default on the selected platform.
+.RS 4
+.IP "\fBnone\fR" 4
+.IX Item "none"
+No extra limitations applied to \s-1GCC\s0 other than defined by the selected platform.
+.IP "\fB128\fR" 4
+.IX Item "128"
+Prefer 128\-bit vector width for instructions.
+.IP "\fB256\fR" 4
+.IX Item "256"
+Prefer 256\-bit vector width for instructions.
+.IP "\fB512\fR" 4
+.IX Item "512"
+Prefer 512\-bit vector width for instructions.
+.RE
+.RS 4
+.RE
+.IP "\fB\-mcx16\fR" 4
+.IX Item "-mcx16"
+This option enables \s-1GCC\s0 to generate \f(CW\*(C`CMPXCHG16B\*(C'\fR instructions in 64\-bit
+code to implement compare-and-exchange operations on 16\-byte aligned 128\-bit
+objects.  This is useful for atomic updates of data structures exceeding one
+machine word in size.  The compiler uses this instruction to implement
+\&\fB_\|_sync Builtins\fR.  However, for \fB_\|_atomic Builtins\fR operating on
+128\-bit integers, a library call is always used.
+.IP "\fB\-msahf\fR" 4
+.IX Item "-msahf"
+This option enables generation of \f(CW\*(C`SAHF\*(C'\fR instructions in 64\-bit code.
+Early Intel Pentium 4 CPUs with Intel 64 support,
+prior to the introduction of Pentium 4 G1 step in December 2005,
+lacked the \f(CW\*(C`LAHF\*(C'\fR and \f(CW\*(C`SAHF\*(C'\fR instructions
+which are supported by \s-1AMD64.\s0
+These are load and store instructions, respectively, for certain status flags.
+In 64\-bit mode, the \f(CW\*(C`SAHF\*(C'\fR instruction is used to optimize \f(CW\*(C`fmod\*(C'\fR,
+\&\f(CW\*(C`drem\*(C'\fR, and \f(CW\*(C`remainder\*(C'\fR built-in functions;
+see \fBOther Builtins\fR for details.
+.IP "\fB\-mmovbe\fR" 4
+.IX Item "-mmovbe"
+This option enables use of the \f(CW\*(C`movbe\*(C'\fR instruction to implement
+\&\f(CW\*(C`_\|_builtin_bswap32\*(C'\fR and \f(CW\*(C`_\|_builtin_bswap64\*(C'\fR.
+.IP "\fB\-mshstk\fR" 4
+.IX Item "-mshstk"
+The \fB\-mshstk\fR option enables shadow stack built-in functions
+from x86 Control-flow Enforcement Technology (\s-1CET\s0).
+.IP "\fB\-mcrc32\fR" 4
+.IX Item "-mcrc32"
+This option enables built-in functions \f(CW\*(C`_\|_builtin_ia32_crc32qi\*(C'\fR,
+\&\f(CW\*(C`_\|_builtin_ia32_crc32hi\*(C'\fR, \f(CW\*(C`_\|_builtin_ia32_crc32si\*(C'\fR and
+\&\f(CW\*(C`_\|_builtin_ia32_crc32di\*(C'\fR to generate the \f(CW\*(C`crc32\*(C'\fR machine instruction.
+.IP "\fB\-mrecip\fR" 4
+.IX Item "-mrecip"
+This option enables use of \f(CW\*(C`RCPSS\*(C'\fR and \f(CW\*(C`RSQRTSS\*(C'\fR instructions
+(and their vectorized variants \f(CW\*(C`RCPPS\*(C'\fR and \f(CW\*(C`RSQRTPS\*(C'\fR)
+with an additional Newton-Raphson step
+to increase precision instead of \f(CW\*(C`DIVSS\*(C'\fR and \f(CW\*(C`SQRTSS\*(C'\fR
+(and their vectorized
+variants) for single-precision floating-point arguments.  These instructions
+are generated only when \fB\-funsafe\-math\-optimizations\fR is enabled
+together with \fB\-ffinite\-math\-only\fR and \fB\-fno\-trapping\-math\fR.
+Note that while the throughput of the sequence is higher than the throughput
+of the non-reciprocal instruction, the precision of the sequence can be
+decreased by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
+.Sp
+Note that \s-1GCC\s0 implements \f(CW\*(C`1.0f/sqrtf(\f(CIx\f(CW)\*(C'\fR in terms of \f(CW\*(C`RSQRTSS\*(C'\fR
+(or \f(CW\*(C`RSQRTPS\*(C'\fR) already with \fB\-ffast\-math\fR (or the above option
+combination), and doesn't need \fB\-mrecip\fR.
+.Sp
+Also note that \s-1GCC\s0 emits the above sequence with additional Newton-Raphson step
+for vectorized single-float division and vectorized \f(CW\*(C`sqrtf(\f(CIx\f(CW)\*(C'\fR
+already with \fB\-ffast\-math\fR (or the above option combination), and
+doesn't need \fB\-mrecip\fR.
+.IP "\fB\-mrecip=\fR\fIopt\fR" 4
+.IX Item "-mrecip=opt"
+This option controls which reciprocal estimate instructions
+may be used.  \fIopt\fR is a comma-separated list of options, which may
+be preceded by a \fB!\fR to invert the option:
+.RS 4
+.IP "\fBall\fR" 4
+.IX Item "all"
+Enable all estimate instructions.
+.IP "\fBdefault\fR" 4
+.IX Item "default"
+Enable the default instructions, equivalent to \fB\-mrecip\fR.
+.IP "\fBnone\fR" 4
+.IX Item "none"
+Disable all estimate instructions, equivalent to \fB\-mno\-recip\fR.
+.IP "\fBdiv\fR" 4
+.IX Item "div"
+Enable the approximation for scalar division.
+.IP "\fBvec-div\fR" 4
+.IX Item "vec-div"
+Enable the approximation for vectorized division.
+.IP "\fBsqrt\fR" 4
+.IX Item "sqrt"
+Enable the approximation for scalar square root.
+.IP "\fBvec-sqrt\fR" 4
+.IX Item "vec-sqrt"
+Enable the approximation for vectorized square root.
+.RE
+.RS 4
+.Sp
+So, for example, \fB\-mrecip=all,!sqrt\fR enables
+all of the reciprocal approximations, except for square root.
+.RE
+.IP "\fB\-mveclibabi=\fR\fItype\fR" 4
+.IX Item "-mveclibabi=type"
+Specifies the \s-1ABI\s0 type to use for vectorizing intrinsics using an
+external library.  Supported values for \fItype\fR are \fBsvml\fR 
+for the Intel short
+vector math library and \fBacml\fR for the \s-1AMD\s0 math core library.
+To use this option, both \fB\-ftree\-vectorize\fR and
+\&\fB\-funsafe\-math\-optimizations\fR have to be enabled, and an \s-1SVML\s0 or \s-1ACML\s0 
+ABI-compatible library must be specified at link time.
+.Sp
+\&\s-1GCC\s0 currently emits calls to \f(CW\*(C`vmldExp2\*(C'\fR,
+\&\f(CW\*(C`vmldLn2\*(C'\fR, \f(CW\*(C`vmldLog102\*(C'\fR, \f(CW\*(C`vmldPow2\*(C'\fR,
+\&\f(CW\*(C`vmldTanh2\*(C'\fR, \f(CW\*(C`vmldTan2\*(C'\fR, \f(CW\*(C`vmldAtan2\*(C'\fR, \f(CW\*(C`vmldAtanh2\*(C'\fR,
+\&\f(CW\*(C`vmldCbrt2\*(C'\fR, \f(CW\*(C`vmldSinh2\*(C'\fR, \f(CW\*(C`vmldSin2\*(C'\fR, \f(CW\*(C`vmldAsinh2\*(C'\fR,
+\&\f(CW\*(C`vmldAsin2\*(C'\fR, \f(CW\*(C`vmldCosh2\*(C'\fR, \f(CW\*(C`vmldCos2\*(C'\fR, \f(CW\*(C`vmldAcosh2\*(C'\fR,
+\&\f(CW\*(C`vmldAcos2\*(C'\fR, \f(CW\*(C`vmlsExp4\*(C'\fR, \f(CW\*(C`vmlsLn4\*(C'\fR,
+\&\f(CW\*(C`vmlsLog104\*(C'\fR, \f(CW\*(C`vmlsPow4\*(C'\fR, \f(CW\*(C`vmlsTanh4\*(C'\fR, \f(CW\*(C`vmlsTan4\*(C'\fR,
+\&\f(CW\*(C`vmlsAtan4\*(C'\fR, \f(CW\*(C`vmlsAtanh4\*(C'\fR, \f(CW\*(C`vmlsCbrt4\*(C'\fR, \f(CW\*(C`vmlsSinh4\*(C'\fR,
+\&\f(CW\*(C`vmlsSin4\*(C'\fR, \f(CW\*(C`vmlsAsinh4\*(C'\fR, \f(CW\*(C`vmlsAsin4\*(C'\fR, \f(CW\*(C`vmlsCosh4\*(C'\fR,
+\&\f(CW\*(C`vmlsCos4\*(C'\fR, \f(CW\*(C`vmlsAcosh4\*(C'\fR and \f(CW\*(C`vmlsAcos4\*(C'\fR for corresponding
+function type when \fB\-mveclibabi=svml\fR is used, and \f(CW\*(C`_\|_vrd2_sin\*(C'\fR,
+\&\f(CW\*(C`_\|_vrd2_cos\*(C'\fR, \f(CW\*(C`_\|_vrd2_exp\*(C'\fR, \f(CW\*(C`_\|_vrd2_log\*(C'\fR, \f(CW\*(C`_\|_vrd2_log2\*(C'\fR,
+\&\f(CW\*(C`_\|_vrd2_log10\*(C'\fR, \f(CW\*(C`_\|_vrs4_sinf\*(C'\fR, \f(CW\*(C`_\|_vrs4_cosf\*(C'\fR,
+\&\f(CW\*(C`_\|_vrs4_expf\*(C'\fR, \f(CW\*(C`_\|_vrs4_logf\*(C'\fR, \f(CW\*(C`_\|_vrs4_log2f\*(C'\fR,
+\&\f(CW\*(C`_\|_vrs4_log10f\*(C'\fR and \f(CW\*(C`_\|_vrs4_powf\*(C'\fR for the corresponding function type
+when \fB\-mveclibabi=acml\fR is used.
+.IP "\fB\-mabi=\fR\fIname\fR" 4
+.IX Item "-mabi=name"
+Generate code for the specified calling convention.  Permissible values
+are \fBsysv\fR for the \s-1ABI\s0 used on GNU/Linux and other systems, and
+\&\fBms\fR for the Microsoft \s-1ABI.\s0  The default is to use the Microsoft
+\&\s-1ABI\s0 when targeting Microsoft Windows and the SysV \s-1ABI\s0 on all other systems.
+You can control this behavior for specific functions by
+using the function attributes \f(CW\*(C`ms_abi\*(C'\fR and \f(CW\*(C`sysv_abi\*(C'\fR.
+.IP "\fB\-mforce\-indirect\-call\fR" 4
+.IX Item "-mforce-indirect-call"
+Force all calls to functions to be indirect. This is useful
+when using Intel Processor Trace where it generates more precise timing
+information for function calls.
+.IP "\fB\-mmanual\-endbr\fR" 4
+.IX Item "-mmanual-endbr"
+Insert \s-1ENDBR\s0 instruction at function entry only via the \f(CW\*(C`cf_check\*(C'\fR
+function attribute. This is useful when used with the option
+\&\fB\-fcf\-protection=branch\fR to control \s-1ENDBR\s0 insertion at the
+function entry.
+.IP "\fB\-mcall\-ms2sysv\-xlogues\fR" 4
+.IX Item "-mcall-ms2sysv-xlogues"
+Due to differences in 64\-bit ABIs, any Microsoft \s-1ABI\s0 function that calls a
+System V \s-1ABI\s0 function must consider \s-1RSI, RDI\s0 and \s-1XMM6\-15\s0 as clobbered.  By
+default, the code for saving and restoring these registers is emitted inline,
+resulting in fairly lengthy prologues and epilogues.  Using
+\&\fB\-mcall\-ms2sysv\-xlogues\fR emits prologues and epilogues that
+use stubs in the static portion of libgcc to perform these saves and restores,
+thus reducing function size at the cost of a few extra instructions.
+.IP "\fB\-mtls\-dialect=\fR\fItype\fR" 4
+.IX Item "-mtls-dialect=type"
+Generate code to access thread-local storage using the \fBgnu\fR or
+\&\fBgnu2\fR conventions.  \fBgnu\fR is the conservative default;
+\&\fBgnu2\fR is more efficient, but it may add compile\- and run-time
+requirements that cannot be satisfied on all systems.
+.IP "\fB\-mpush\-args\fR" 4
+.IX Item "-mpush-args"
+.PD 0
+.IP "\fB\-mno\-push\-args\fR" 4
+.IX Item "-mno-push-args"
+.PD
+Use \s-1PUSH\s0 operations to store outgoing parameters.  This method is shorter
+and usually equally fast as method using \s-1SUB/MOV\s0 operations and is enabled
+by default.  In some cases disabling it may improve performance because of
+improved scheduling and reduced dependencies.
+.IP "\fB\-maccumulate\-outgoing\-args\fR" 4
+.IX Item "-maccumulate-outgoing-args"
+If enabled, the maximum amount of space required for outgoing arguments is
+computed in the function prologue.  This is faster on most modern CPUs
+because of reduced dependencies, improved scheduling and reduced stack usage
+when the preferred stack boundary is not equal to 2.  The drawback is a notable
+increase in code size.  This switch implies \fB\-mno\-push\-args\fR.
+.IP "\fB\-mthreads\fR" 4
+.IX Item "-mthreads"
+Support thread-safe exception handling on MinGW.  Programs that rely
+on thread-safe exception handling must compile and link all code with the
+\&\fB\-mthreads\fR option.  When compiling, \fB\-mthreads\fR defines
+\&\fB\-D_MT\fR; when linking, it links in a special thread helper library
+\&\fB\-lmingwthrd\fR which cleans up per-thread exception-handling data.
+.IP "\fB\-mms\-bitfields\fR" 4
+.IX Item "-mms-bitfields"
+.PD 0
+.IP "\fB\-mno\-ms\-bitfields\fR" 4
+.IX Item "-mno-ms-bitfields"
+.PD
+Enable/disable bit-field layout compatible with the native Microsoft
+Windows compiler.
+.Sp
+If \f(CW\*(C`packed\*(C'\fR is used on a structure, or if bit-fields are used,
+it may be that the Microsoft \s-1ABI\s0 lays out the structure differently
+than the way \s-1GCC\s0 normally does.  Particularly when moving packed
+data between functions compiled with \s-1GCC\s0 and the native Microsoft compiler
+(either via function call or as data in a file), it may be necessary to access
+either format.
+.Sp
+This option is enabled by default for Microsoft Windows
+targets.  This behavior can also be controlled locally by use of variable
+or type attributes.  For more information, see \fBx86 Variable Attributes\fR
+and \fBx86 Type Attributes\fR.
+.Sp
+The Microsoft structure layout algorithm is fairly simple with the exception
+of the bit-field packing.  
+The padding and alignment of members of structures and whether a bit-field 
+can straddle a storage-unit boundary are determine by these rules:
+.RS 4
+.IP "1. Structure members are stored sequentially in the order in which they are" 4
+.IX Item "1. Structure members are stored sequentially in the order in which they are"
+declared: the first member has the lowest memory address and the last member
+the highest.
+.IP "2. Every data object has an alignment requirement.  The alignment requirement" 4
+.IX Item "2. Every data object has an alignment requirement. The alignment requirement"
+for all data except structures, unions, and arrays is either the size of the
+object or the current packing size (specified with either the
+\&\f(CW\*(C`aligned\*(C'\fR attribute or the \f(CW\*(C`pack\*(C'\fR pragma),
+whichever is less.  For structures, unions, and arrays,
+the alignment requirement is the largest alignment requirement of its members.
+Every object is allocated an offset so that:
+.Sp
+.Vb 1
+\&        offset % alignment_requirement == 0
+.Ve
+.IP "3. Adjacent bit-fields are packed into the same 1\-, 2\-, or 4\-byte allocation" 4
+.IX Item "3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte allocation"
+unit if the integral types are the same size and if the next bit-field fits
+into the current allocation unit without crossing the boundary imposed by the
+common alignment requirements of the bit-fields.
+.RE
+.RS 4
+.Sp
+\&\s-1MSVC\s0 interprets zero-length bit-fields in the following ways:
+.IP "1. If a zero-length bit-field is inserted between two bit-fields that" 4
+.IX Item "1. If a zero-length bit-field is inserted between two bit-fields that"
+are normally coalesced, the bit-fields are not coalesced.
+.Sp
+For example:
+.Sp
+.Vb 6
+\&        struct
+\&         {
+\&           unsigned long bf_1 : 12;
+\&           unsigned long : 0;
+\&           unsigned long bf_2 : 12;
+\&         } t1;
+.Ve
+.Sp
+The size of \f(CW\*(C`t1\*(C'\fR is 8 bytes with the zero-length bit-field.  If the
+zero-length bit-field were removed, \f(CW\*(C`t1\*(C'\fR's size would be 4 bytes.
+.ie n .IP "2. If a zero-length bit-field is inserted after a bit-field, ""foo"", and the" 4
+.el .IP "2. If a zero-length bit-field is inserted after a bit-field, \f(CWfoo\fR, and the" 4
+.IX Item "2. If a zero-length bit-field is inserted after a bit-field, foo, and the"
+alignment of the zero-length bit-field is greater than the member that follows it,
+\&\f(CW\*(C`bar\*(C'\fR, \f(CW\*(C`bar\*(C'\fR is aligned as the type of the zero-length bit-field.
+.Sp
+For example:
+.Sp
+.Vb 6
+\&        struct
+\&         {
+\&           char foo : 4;
+\&           short : 0;
+\&           char bar;
+\&         } t2;
+\&        
+\&        struct
+\&         {
+\&           char foo : 4;
+\&           short : 0;
+\&           double bar;
+\&         } t3;
+.Ve
+.Sp
+For \f(CW\*(C`t2\*(C'\fR, \f(CW\*(C`bar\*(C'\fR is placed at offset 2, rather than offset 1.
+Accordingly, the size of \f(CW\*(C`t2\*(C'\fR is 4.  For \f(CW\*(C`t3\*(C'\fR, the zero-length
+bit-field does not affect the alignment of \f(CW\*(C`bar\*(C'\fR or, as a result, the size
+of the structure.
+.Sp
+Taking this into account, it is important to note the following:
+.RS 4
+.IP "1. If a zero-length bit-field follows a normal bit-field, the type of the" 4
+.IX Item "1. If a zero-length bit-field follows a normal bit-field, the type of the"
+zero-length bit-field may affect the alignment of the structure as whole. For
+example, \f(CW\*(C`t2\*(C'\fR has a size of 4 bytes, since the zero-length bit-field follows a
+normal bit-field, and is of type short.
+.IP "2. Even if a zero-length bit-field is not followed by a normal bit-field, it may" 4
+.IX Item "2. Even if a zero-length bit-field is not followed by a normal bit-field, it may"
+still affect the alignment of the structure:
+.Sp
+.Vb 5
+\&        struct
+\&         {
+\&           char foo : 6;
+\&           long : 0;
+\&         } t4;
+.Ve
+.Sp
+Here, \f(CW\*(C`t4\*(C'\fR takes up 4 bytes.
+.RE
+.RS 4
+.RE
+.IP "3. Zero-length bit-fields following non-bit-field members are ignored:" 4
+.IX Item "3. Zero-length bit-fields following non-bit-field members are ignored:"
+.Vb 6
+\&        struct
+\&         {
+\&           char foo;
+\&           long : 0;
+\&           char bar;
+\&         } t5;
+.Ve
+.Sp
+Here, \f(CW\*(C`t5\*(C'\fR takes up 2 bytes.
+.RE
+.RS 4
+.RE
+.IP "\fB\-mno\-align\-stringops\fR" 4
+.IX Item "-mno-align-stringops"
+Do not align the destination of inlined string operations.  This switch reduces
+code size and improves performance in case the destination is already aligned,
+but \s-1GCC\s0 doesn't know about it.
+.IP "\fB\-minline\-all\-stringops\fR" 4
+.IX Item "-minline-all-stringops"
+By default \s-1GCC\s0 inlines string operations only when the destination is 
+known to be aligned to least a 4\-byte boundary.  
+This enables more inlining and increases code
+size, but may improve performance of code that depends on fast
+\&\f(CW\*(C`memcpy\*(C'\fR, \f(CW\*(C`strlen\*(C'\fR,
+and \f(CW\*(C`memset\*(C'\fR for short lengths.
+.IP "\fB\-minline\-stringops\-dynamically\fR" 4
+.IX Item "-minline-stringops-dynamically"
+For string operations of unknown size, use run-time checks with
+inline code for small blocks and a library call for large blocks.
+.IP "\fB\-mstringop\-strategy=\fR\fIalg\fR" 4
+.IX Item "-mstringop-strategy=alg"
+Override the internal decision heuristic for the particular algorithm to use
+for inlining string operations.  The allowed values for \fIalg\fR are:
+.RS 4
+.IP "\fBrep_byte\fR" 4
+.IX Item "rep_byte"
+.PD 0
+.IP "\fBrep_4byte\fR" 4
+.IX Item "rep_4byte"
+.IP "\fBrep_8byte\fR" 4
+.IX Item "rep_8byte"
+.PD
+Expand using i386 \f(CW\*(C`rep\*(C'\fR prefix of the specified size.
+.IP "\fBbyte_loop\fR" 4
+.IX Item "byte_loop"
+.PD 0
+.IP "\fBloop\fR" 4
+.IX Item "loop"
+.IP "\fBunrolled_loop\fR" 4
+.IX Item "unrolled_loop"
+.PD
+Expand into an inline loop.
+.IP "\fBlibcall\fR" 4
+.IX Item "libcall"
+Always use a library call.
+.RE
+.RS 4
+.RE
+.IP "\fB\-mmemcpy\-strategy=\fR\fIstrategy\fR" 4
+.IX Item "-mmemcpy-strategy=strategy"
+Override the internal decision heuristic to decide if \f(CW\*(C`_\|_builtin_memcpy\*(C'\fR
+should be inlined and what inline algorithm to use when the expected size
+of the copy operation is known. \fIstrategy\fR 
+is a comma-separated list of \fIalg\fR:\fImax_size\fR:\fIdest_align\fR triplets. 
+\&\fIalg\fR is specified in \fB\-mstringop\-strategy\fR, \fImax_size\fR specifies
+the max byte size with which inline algorithm \fIalg\fR is allowed.  For the last
+triplet, the \fImax_size\fR must be \f(CW\*(C`\-1\*(C'\fR. The \fImax_size\fR of the triplets
+in the list must be specified in increasing order.  The minimal byte size for 
+\&\fIalg\fR is \f(CW0\fR for the first triplet and \f(CW\*(C`\f(CImax_size\f(CW + 1\*(C'\fR of the 
+preceding range.
+.IP "\fB\-mmemset\-strategy=\fR\fIstrategy\fR" 4
+.IX Item "-mmemset-strategy=strategy"
+The option is similar to \fB\-mmemcpy\-strategy=\fR except that it is to control
+\&\f(CW\*(C`_\|_builtin_memset\*(C'\fR expansion.
+.IP "\fB\-momit\-leaf\-frame\-pointer\fR" 4
+.IX Item "-momit-leaf-frame-pointer"
+Don't keep the frame pointer in a register for leaf functions.  This
+avoids the instructions to save, set up, and restore frame pointers and
+makes an extra register available in leaf functions.  The option
+\&\fB\-fomit\-leaf\-frame\-pointer\fR removes the frame pointer for leaf functions,
+which might make debugging harder.
+.IP "\fB\-mtls\-direct\-seg\-refs\fR" 4
+.IX Item "-mtls-direct-seg-refs"
+.PD 0
+.IP "\fB\-mno\-tls\-direct\-seg\-refs\fR" 4
+.IX Item "-mno-tls-direct-seg-refs"
+.PD
+Controls whether \s-1TLS\s0 variables may be accessed with offsets from the
+\&\s-1TLS\s0 segment register (\f(CW%gs\fR for 32\-bit, \f(CW%fs\fR for 64\-bit),
+or whether the thread base pointer must be added.  Whether or not this
+is valid depends on the operating system, and whether it maps the
+segment to cover the entire \s-1TLS\s0 area.
+.Sp
+For systems that use the \s-1GNU C\s0 Library, the default is on.
+.IP "\fB\-msse2avx\fR" 4
+.IX Item "-msse2avx"
+.PD 0
+.IP "\fB\-mno\-sse2avx\fR" 4
+.IX Item "-mno-sse2avx"
+.PD
+Specify that the assembler should encode \s-1SSE\s0 instructions with \s-1VEX\s0
+prefix.  The option \fB\-mavx\fR turns this on by default.
+.IP "\fB\-mfentry\fR" 4
+.IX Item "-mfentry"
+.PD 0
+.IP "\fB\-mno\-fentry\fR" 4
+.IX Item "-mno-fentry"
+.PD
+If profiling is active (\fB\-pg\fR), put the profiling
+counter call before the prologue.
+Note: On x86 architectures the attribute \f(CW\*(C`ms_hook_prologue\*(C'\fR
+isn't possible at the moment for \fB\-mfentry\fR and \fB\-pg\fR.
+.IP "\fB\-mrecord\-mcount\fR" 4
+.IX Item "-mrecord-mcount"
+.PD 0
+.IP "\fB\-mno\-record\-mcount\fR" 4
+.IX Item "-mno-record-mcount"
+.PD
+If profiling is active (\fB\-pg\fR), generate a _\|_mcount_loc section
+that contains pointers to each profiling call. This is useful for
+automatically patching and out calls.
+.IP "\fB\-mnop\-mcount\fR" 4
+.IX Item "-mnop-mcount"
+.PD 0
+.IP "\fB\-mno\-nop\-mcount\fR" 4
+.IX Item "-mno-nop-mcount"
+.PD
+If profiling is active (\fB\-pg\fR), generate the calls to
+the profiling functions as NOPs. This is useful when they
+should be patched in later dynamically. This is likely only
+useful together with \fB\-mrecord\-mcount\fR.
+.IP "\fB\-minstrument\-return=\fR\fItype\fR" 4
+.IX Item "-minstrument-return=type"
+Instrument function exit in \-pg \-mfentry instrumented functions with
+call to specified function. This only instruments true returns ending
+with ret, but not sibling calls ending with jump. Valid types
+are \fInone\fR to not instrument, \fIcall\fR to generate a call to _\|_return_\|_,
+or \fInop5\fR to generate a 5 byte nop.
+.IP "\fB\-mrecord\-return\fR" 4
+.IX Item "-mrecord-return"
+.PD 0
+.IP "\fB\-mno\-record\-return\fR" 4
+.IX Item "-mno-record-return"
+.PD
+Generate a _\|_return_loc section pointing to all return instrumentation code.
+.IP "\fB\-mfentry\-name=\fR\fIname\fR" 4
+.IX Item "-mfentry-name=name"
+Set name of _\|_fentry_\|_ symbol called at function entry for \-pg \-mfentry functions.
+.IP "\fB\-mfentry\-section=\fR\fIname\fR" 4
+.IX Item "-mfentry-section=name"
+Set name of section to record \-mrecord\-mcount calls (default _\|_mcount_loc).
+.IP "\fB\-mskip\-rax\-setup\fR" 4
+.IX Item "-mskip-rax-setup"
+.PD 0
+.IP "\fB\-mno\-skip\-rax\-setup\fR" 4
+.IX Item "-mno-skip-rax-setup"
+.PD
+When generating code for the x86\-64 architecture with \s-1SSE\s0 extensions
+disabled, \fB\-mskip\-rax\-setup\fR can be used to skip setting up \s-1RAX\s0
+register when there are no variable arguments passed in vector registers.
+.Sp
+\&\fBWarning:\fR Since \s-1RAX\s0 register is used to avoid unnecessarily
+saving vector registers on stack when passing variable arguments, the
+impacts of this option are callees may waste some stack space,
+misbehave or jump to a random location.  \s-1GCC 4.4\s0 or newer don't have
+those issues, regardless the \s-1RAX\s0 register value.
+.IP "\fB\-m8bit\-idiv\fR" 4
+.IX Item "-m8bit-idiv"
+.PD 0
+.IP "\fB\-mno\-8bit\-idiv\fR" 4
+.IX Item "-mno-8bit-idiv"
+.PD
+On some processors, like Intel Atom, 8\-bit unsigned integer divide is
+much faster than 32\-bit/64\-bit integer divide.  This option generates a
+run-time check.  If both dividend and divisor are within range of 0
+to 255, 8\-bit unsigned integer divide is used instead of
+32\-bit/64\-bit integer divide.
+.IP "\fB\-mavx256\-split\-unaligned\-load\fR" 4
+.IX Item "-mavx256-split-unaligned-load"
+.PD 0
+.IP "\fB\-mavx256\-split\-unaligned\-store\fR" 4
+.IX Item "-mavx256-split-unaligned-store"
+.PD
+Split 32\-byte \s-1AVX\s0 unaligned load and store.
+.IP "\fB\-mstack\-protector\-guard=\fR\fIguard\fR" 4
+.IX Item "-mstack-protector-guard=guard"
+.PD 0
+.IP "\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR" 4
+.IX Item "-mstack-protector-guard-reg=reg"
+.IP "\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR" 4
+.IX Item "-mstack-protector-guard-offset=offset"
+.PD
+Generate stack protection code using canary at \fIguard\fR.  Supported
+locations are \fBglobal\fR for global canary or \fBtls\fR for per-thread
+canary in the \s-1TLS\s0 block (the default).  This option has effect only when
+\&\fB\-fstack\-protector\fR or \fB\-fstack\-protector\-all\fR is specified.
+.Sp
+With the latter choice the options
+\&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR and
+\&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR furthermore specify
+which segment register (\f(CW%fs\fR or \f(CW%gs\fR) to use as base register
+for reading the canary, and from what offset from that base register.
+The default for those is as specified in the relevant \s-1ABI.\s0
+.IP "\fB\-mgeneral\-regs\-only\fR" 4
+.IX Item "-mgeneral-regs-only"
+Generate code that uses only the general-purpose registers.  This
+prevents the compiler from using floating-point, vector, mask and bound
+registers.
+.IP "\fB\-mindirect\-branch=\fR\fIchoice\fR" 4
+.IX Item "-mindirect-branch=choice"
+Convert indirect call and jump with \fIchoice\fR.  The default is
+\&\fBkeep\fR, which keeps indirect call and jump unmodified.
+\&\fBthunk\fR converts indirect call and jump to call and return thunk.
+\&\fBthunk-inline\fR converts indirect call and jump to inlined call
+and return thunk.  \fBthunk-extern\fR converts indirect call and jump
+to external call and return thunk provided in a separate object file.
+You can control this behavior for a specific function by using the
+function attribute \f(CW\*(C`indirect_branch\*(C'\fR.
+.Sp
+Note that \fB\-mcmodel=large\fR is incompatible with
+\&\fB\-mindirect\-branch=thunk\fR and
+\&\fB\-mindirect\-branch=thunk\-extern\fR since the thunk function may
+not be reachable in the large code model.
+.Sp
+Note that \fB\-mindirect\-branch=thunk\-extern\fR is incompatible with
+\&\fB\-fcf\-protection=branch\fR since the external thunk cannot be modified
+to disable control-flow check.
+.IP "\fB\-mfunction\-return=\fR\fIchoice\fR" 4
+.IX Item "-mfunction-return=choice"
+Convert function return with \fIchoice\fR.  The default is \fBkeep\fR,
+which keeps function return unmodified.  \fBthunk\fR converts function
+return to call and return thunk.  \fBthunk-inline\fR converts function
+return to inlined call and return thunk.  \fBthunk-extern\fR converts
+function return to external call and return thunk provided in a separate
+object file.  You can control this behavior for a specific function by
+using the function attribute \f(CW\*(C`function_return\*(C'\fR.
+.Sp
+Note that \fB\-mcmodel=large\fR is incompatible with
+\&\fB\-mfunction\-return=thunk\fR and
+\&\fB\-mfunction\-return=thunk\-extern\fR since the thunk function may
+not be reachable in the large code model.
+.IP "\fB\-mindirect\-branch\-register\fR" 4
+.IX Item "-mindirect-branch-register"
+Force indirect call and jump via register.
+.PP
+These \fB\-m\fR switches are supported in addition to the above
+on x86\-64 processors in 64\-bit environments.
+.IP "\fB\-m32\fR" 4
+.IX Item "-m32"
+.PD 0
+.IP "\fB\-m64\fR" 4
+.IX Item "-m64"
+.IP "\fB\-mx32\fR" 4
+.IX Item "-mx32"
+.IP "\fB\-m16\fR" 4
+.IX Item "-m16"
+.IP "\fB\-miamcu\fR" 4
+.IX Item "-miamcu"
+.PD
+Generate code for a 16\-bit, 32\-bit or 64\-bit environment.
+The \fB\-m32\fR option sets \f(CW\*(C`int\*(C'\fR, \f(CW\*(C`long\*(C'\fR, and pointer types
+to 32 bits, and
+generates code that runs on any i386 system.
+.Sp
+The \fB\-m64\fR option sets \f(CW\*(C`int\*(C'\fR to 32 bits and \f(CW\*(C`long\*(C'\fR and pointer
+types to 64 bits, and generates code for the x86\-64 architecture.
+For Darwin only the \fB\-m64\fR option also turns off the \fB\-fno\-pic\fR
+and \fB\-mdynamic\-no\-pic\fR options.
+.Sp
+The \fB\-mx32\fR option sets \f(CW\*(C`int\*(C'\fR, \f(CW\*(C`long\*(C'\fR, and pointer types
+to 32 bits, and
+generates code for the x86\-64 architecture.
+.Sp
+The \fB\-m16\fR option is the same as \fB\-m32\fR, except for that
+it outputs the \f(CW\*(C`.code16gcc\*(C'\fR assembly directive at the beginning of
+the assembly output so that the binary can run in 16\-bit mode.
+.Sp
+The \fB\-miamcu\fR option generates code which conforms to Intel \s-1MCU\s0
+psABI.  It requires the \fB\-m32\fR option to be turned on.
+.IP "\fB\-mno\-red\-zone\fR" 4
+.IX Item "-mno-red-zone"
+Do not use a so-called \*(L"red zone\*(R" for x86\-64 code.  The red zone is mandated
+by the x86\-64 \s-1ABI\s0; it is a 128\-byte area beyond the location of the
+stack pointer that is not modified by signal or interrupt handlers
+and therefore can be used for temporary data without adjusting the stack
+pointer.  The flag \fB\-mno\-red\-zone\fR disables this red zone.
+.IP "\fB\-mcmodel=small\fR" 4
+.IX Item "-mcmodel=small"
+Generate code for the small code model: the program and its symbols must
+be linked in the lower 2 \s-1GB\s0 of the address space.  Pointers are 64 bits.
+Programs can be statically or dynamically linked.  This is the default
+code model.
+.IP "\fB\-mcmodel=kernel\fR" 4
+.IX Item "-mcmodel=kernel"
+Generate code for the kernel code model.  The kernel runs in the
+negative 2 \s-1GB\s0 of the address space.
+This model has to be used for Linux kernel code.
+.IP "\fB\-mcmodel=medium\fR" 4
+.IX Item "-mcmodel=medium"
+Generate code for the medium model: the program is linked in the lower 2
+\&\s-1GB\s0 of the address space.  Small symbols are also placed there.  Symbols
+with sizes larger than \fB\-mlarge\-data\-threshold\fR are put into
+large data or \s-1BSS\s0 sections and can be located above 2GB.  Programs can
+be statically or dynamically linked.
+.IP "\fB\-mcmodel=large\fR" 4
+.IX Item "-mcmodel=large"
+Generate code for the large model.  This model makes no assumptions
+about addresses and sizes of sections.
+.IP "\fB\-maddress\-mode=long\fR" 4
+.IX Item "-maddress-mode=long"
+Generate code for long address mode.  This is only supported for 64\-bit
+and x32 environments.  It is the default address mode for 64\-bit
+environments.
+.IP "\fB\-maddress\-mode=short\fR" 4
+.IX Item "-maddress-mode=short"
+Generate code for short address mode.  This is only supported for 32\-bit
+and x32 environments.  It is the default address mode for 32\-bit and
+x32 environments.
+.PP
+\fIx86 Windows Options\fR
+.IX Subsection "x86 Windows Options"
+.PP
+These additional options are available for Microsoft Windows targets:
+.IP "\fB\-mconsole\fR" 4
+.IX Item "-mconsole"
+This option
+specifies that a console application is to be generated, by
+instructing the linker to set the \s-1PE\s0 header subsystem type
+required for console applications.
+This option is available for Cygwin and MinGW targets and is
+enabled by default on those targets.
+.IP "\fB\-mdll\fR" 4
+.IX Item "-mdll"
+This option is available for Cygwin and MinGW targets.  It
+specifies that a DLL\-\-\-a dynamic link library\-\-\-is to be
+generated, enabling the selection of the required runtime
+startup object and entry point.
+.IP "\fB\-mnop\-fun\-dllimport\fR" 4
+.IX Item "-mnop-fun-dllimport"
+This option is available for Cygwin and MinGW targets.  It
+specifies that the \f(CW\*(C`dllimport\*(C'\fR attribute should be ignored.
+.IP "\fB\-mthread\fR" 4
+.IX Item "-mthread"
+This option is available for MinGW targets. It specifies
+that MinGW-specific thread support is to be used.
+.IP "\fB\-municode\fR" 4
+.IX Item "-municode"
+This option is available for MinGW\-w64 targets.  It causes
+the \f(CW\*(C`UNICODE\*(C'\fR preprocessor macro to be predefined, and
+chooses Unicode-capable runtime startup code.
+.IP "\fB\-mwin32\fR" 4
+.IX Item "-mwin32"
+This option is available for Cygwin and MinGW targets.  It
+specifies that the typical Microsoft Windows predefined macros are to
+be set in the pre-processor, but does not influence the choice
+of runtime library/startup code.
+.IP "\fB\-mwindows\fR" 4
+.IX Item "-mwindows"
+This option is available for Cygwin and MinGW targets.  It
+specifies that a \s-1GUI\s0 application is to be generated by
+instructing the linker to set the \s-1PE\s0 header subsystem type
+appropriately.
+.IP "\fB\-fno\-set\-stack\-executable\fR" 4
+.IX Item "-fno-set-stack-executable"
+This option is available for MinGW targets. It specifies that
+the executable flag for the stack used by nested functions isn't
+set. This is necessary for binaries running in kernel mode of
+Microsoft Windows, as there the User32 \s-1API,\s0 which is used to set executable
+privileges, isn't available.
+.IP "\fB\-fwritable\-relocated\-rdata\fR" 4
+.IX Item "-fwritable-relocated-rdata"
+This option is available for MinGW and Cygwin targets.  It specifies
+that relocated-data in read-only section is put into the \f(CW\*(C`.data\*(C'\fR
+section.  This is a necessary for older runtimes not supporting
+modification of \f(CW\*(C`.rdata\*(C'\fR sections for pseudo-relocation.
+.IP "\fB\-mpe\-aligned\-commons\fR" 4
+.IX Item "-mpe-aligned-commons"
+This option is available for Cygwin and MinGW targets.  It
+specifies that the \s-1GNU\s0 extension to the \s-1PE\s0 file format that
+permits the correct alignment of \s-1COMMON\s0 variables should be
+used when generating code.  It is enabled by default if
+\&\s-1GCC\s0 detects that the target assembler found during configuration
+supports the feature.
+.PP
+See also under \fBx86 Options\fR for standard options.
+.PP
+\fIXstormy16 Options\fR
+.IX Subsection "Xstormy16 Options"
+.PP
+These options are defined for Xstormy16:
+.IP "\fB\-msim\fR" 4
+.IX Item "-msim"
+Choose startup files and linker script suitable for the simulator.
+.PP
+\fIXtensa Options\fR
+.IX Subsection "Xtensa Options"
+.PP
+These options are supported for Xtensa targets:
+.IP "\fB\-mconst16\fR" 4
+.IX Item "-mconst16"
+.PD 0
+.IP "\fB\-mno\-const16\fR" 4
+.IX Item "-mno-const16"
+.PD
+Enable or disable use of \f(CW\*(C`CONST16\*(C'\fR instructions for loading
+constant values.  The \f(CW\*(C`CONST16\*(C'\fR instruction is currently not a
+standard option from Tensilica.  When enabled, \f(CW\*(C`CONST16\*(C'\fR
+instructions are always used in place of the standard \f(CW\*(C`L32R\*(C'\fR
+instructions.  The use of \f(CW\*(C`CONST16\*(C'\fR is enabled by default only if
+the \f(CW\*(C`L32R\*(C'\fR instruction is not available.
+.IP "\fB\-mfused\-madd\fR" 4
+.IX Item "-mfused-madd"
+.PD 0
+.IP "\fB\-mno\-fused\-madd\fR" 4
+.IX Item "-mno-fused-madd"
+.PD
+Enable or disable use of fused multiply/add and multiply/subtract
+instructions in the floating-point option.  This has no effect if the
+floating-point option is not also enabled.  Disabling fused multiply/add
+and multiply/subtract instructions forces the compiler to use separate
+instructions for the multiply and add/subtract operations.  This may be
+desirable in some cases where strict \s-1IEEE\s0 754\-compliant results are
+required: the fused multiply add/subtract instructions do not round the
+intermediate result, thereby producing results with \fImore\fR bits of
+precision than specified by the \s-1IEEE\s0 standard.  Disabling fused multiply
+add/subtract instructions also ensures that the program output is not
+sensitive to the compiler's ability to combine multiply and add/subtract
+operations.
+.IP "\fB\-mserialize\-volatile\fR" 4
+.IX Item "-mserialize-volatile"
+.PD 0
+.IP "\fB\-mno\-serialize\-volatile\fR" 4
+.IX Item "-mno-serialize-volatile"
+.PD
+When this option is enabled, \s-1GCC\s0 inserts \f(CW\*(C`MEMW\*(C'\fR instructions before
+\&\f(CW\*(C`volatile\*(C'\fR memory references to guarantee sequential consistency.
+The default is \fB\-mserialize\-volatile\fR.  Use
+\&\fB\-mno\-serialize\-volatile\fR to omit the \f(CW\*(C`MEMW\*(C'\fR instructions.
+.IP "\fB\-mforce\-no\-pic\fR" 4
+.IX Item "-mforce-no-pic"
+For targets, like GNU/Linux, where all user-mode Xtensa code must be
+position-independent code (\s-1PIC\s0), this option disables \s-1PIC\s0 for compiling
+kernel code.
+.IP "\fB\-mtext\-section\-literals\fR" 4
+.IX Item "-mtext-section-literals"
+.PD 0
+.IP "\fB\-mno\-text\-section\-literals\fR" 4
+.IX Item "-mno-text-section-literals"
+.PD
+These options control the treatment of literal pools.  The default is
+\&\fB\-mno\-text\-section\-literals\fR, which places literals in a separate
+section in the output file.  This allows the literal pool to be placed
+in a data \s-1RAM/ROM,\s0 and it also allows the linker to combine literal
+pools from separate object files to remove redundant literals and
+improve code size.  With \fB\-mtext\-section\-literals\fR, the literals
+are interspersed in the text section in order to keep them as close as
+possible to their references.  This may be necessary for large assembly
+files.  Literals for each function are placed right before that function.
+.IP "\fB\-mauto\-litpools\fR" 4
+.IX Item "-mauto-litpools"
+.PD 0
+.IP "\fB\-mno\-auto\-litpools\fR" 4
+.IX Item "-mno-auto-litpools"
+.PD
+These options control the treatment of literal pools.  The default is
+\&\fB\-mno\-auto\-litpools\fR, which places literals in a separate
+section in the output file unless \fB\-mtext\-section\-literals\fR is
+used.  With \fB\-mauto\-litpools\fR the literals are interspersed in
+the text section by the assembler.  Compiler does not produce explicit
+\&\f(CW\*(C`.literal\*(C'\fR directives and loads literals into registers with
+\&\f(CW\*(C`MOVI\*(C'\fR instructions instead of \f(CW\*(C`L32R\*(C'\fR to let the assembler
+do relaxation and place literals as necessary.  This option allows
+assembler to create several literal pools per function and assemble
+very big functions, which may not be possible with
+\&\fB\-mtext\-section\-literals\fR.
+.IP "\fB\-mtarget\-align\fR" 4
+.IX Item "-mtarget-align"
+.PD 0
+.IP "\fB\-mno\-target\-align\fR" 4
+.IX Item "-mno-target-align"
+.PD
+When this option is enabled, \s-1GCC\s0 instructs the assembler to
+automatically align instructions to reduce branch penalties at the
+expense of some code density.  The assembler attempts to widen density
+instructions to align branch targets and the instructions following call
+instructions.  If there are not enough preceding safe density
+instructions to align a target, no widening is performed.  The
+default is \fB\-mtarget\-align\fR.  These options do not affect the
+treatment of auto-aligned instructions like \f(CW\*(C`LOOP\*(C'\fR, which the
+assembler always aligns, either by widening density instructions or
+by inserting \s-1NOP\s0 instructions.
+.IP "\fB\-mlongcalls\fR" 4
+.IX Item "-mlongcalls"
+.PD 0
+.IP "\fB\-mno\-longcalls\fR" 4
+.IX Item "-mno-longcalls"
+.PD
+When this option is enabled, \s-1GCC\s0 instructs the assembler to translate
+direct calls to indirect calls unless it can determine that the target
+of a direct call is in the range allowed by the call instruction.  This
+translation typically occurs for calls to functions in other source
+files.  Specifically, the assembler translates a direct \f(CW\*(C`CALL\*(C'\fR
+instruction into an \f(CW\*(C`L32R\*(C'\fR followed by a \f(CW\*(C`CALLX\*(C'\fR instruction.
+The default is \fB\-mno\-longcalls\fR.  This option should be used in
+programs where the call target can potentially be out of range.  This
+option is implemented in the assembler, not the compiler, so the
+assembly code generated by \s-1GCC\s0 still shows direct call
+instructions\-\-\-look at the disassembled object code to see the actual
+instructions.  Note that the assembler uses an indirect call for
+every cross-file call, not just those that really are out of range.
+.PP
+\fIzSeries Options\fR
+.IX Subsection "zSeries Options"
+.PP
+These are listed under
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+This section describes several environment variables that affect how \s-1GCC\s0
+operates.  Some of them work by specifying directories or prefixes to use
+when searching for various kinds of files.  Some are used to specify other
+aspects of the compilation environment.
+.PP
+Note that you can also specify places to search using options such as
+\&\fB\-B\fR, \fB\-I\fR and \fB\-L\fR.  These
+take precedence over places specified using environment variables, which
+in turn take precedence over those specified by the configuration of \s-1GCC.\s0
+.IP "\fB\s-1LANG\s0\fR" 4
+.IX Item "LANG"
+.PD 0
+.IP "\fB\s-1LC_CTYPE\s0\fR" 4
+.IX Item "LC_CTYPE"
+.IP "\fB\s-1LC_MESSAGES\s0\fR" 4
+.IX Item "LC_MESSAGES"
+.IP "\fB\s-1LC_ALL\s0\fR" 4
+.IX Item "LC_ALL"
+.PD
+These environment variables control the way that \s-1GCC\s0 uses
+localization information which allows \s-1GCC\s0 to work with different
+national conventions.  \s-1GCC\s0 inspects the locale categories
+\&\fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR if it has been configured to do
+so.  These locale categories can be set to any value supported by your
+installation.  A typical value is \fBen_GB.UTF\-8\fR for English in the United
+Kingdom encoded in \s-1UTF\-8.\s0
+.Sp
+The \fB\s-1LC_CTYPE\s0\fR environment variable specifies character
+classification.  \s-1GCC\s0 uses it to determine the character boundaries in
+a string; this is needed for some multibyte encodings that contain quote
+and escape characters that are otherwise interpreted as a string
+end or escape.
+.Sp
+The \fB\s-1LC_MESSAGES\s0\fR environment variable specifies the language to
+use in diagnostic messages.
+.Sp
+If the \fB\s-1LC_ALL\s0\fR environment variable is set, it overrides the value
+of \fB\s-1LC_CTYPE\s0\fR and \fB\s-1LC_MESSAGES\s0\fR; otherwise, \fB\s-1LC_CTYPE\s0\fR
+and \fB\s-1LC_MESSAGES\s0\fR default to the value of the \fB\s-1LANG\s0\fR
+environment variable.  If none of these variables are set, \s-1GCC\s0
+defaults to traditional C English behavior.
+.IP "\fB\s-1TMPDIR\s0\fR" 4
+.IX Item "TMPDIR"
+If \fB\s-1TMPDIR\s0\fR is set, it specifies the directory to use for temporary
+files.  \s-1GCC\s0 uses temporary files to hold the output of one stage of
+compilation which is to be used as input to the next stage: for example,
+the output of the preprocessor, which is the input to the compiler
+proper.
+.IP "\fB\s-1GCC_COMPARE_DEBUG\s0\fR" 4
+.IX Item "GCC_COMPARE_DEBUG"
+Setting \fB\s-1GCC_COMPARE_DEBUG\s0\fR is nearly equivalent to passing
+\&\fB\-fcompare\-debug\fR to the compiler driver.  See the documentation
+of this option for more details.
+.IP "\fB\s-1GCC_EXEC_PREFIX\s0\fR" 4
+.IX Item "GCC_EXEC_PREFIX"
+If \fB\s-1GCC_EXEC_PREFIX\s0\fR is set, it specifies a prefix to use in the
+names of the subprograms executed by the compiler.  No slash is added
+when this prefix is combined with the name of a subprogram, but you can
+specify a prefix that ends with a slash if you wish.
+.Sp
+If \fB\s-1GCC_EXEC_PREFIX\s0\fR is not set, \s-1GCC\s0 attempts to figure out
+an appropriate prefix to use based on the pathname it is invoked with.
+.Sp
+If \s-1GCC\s0 cannot find the subprogram using the specified prefix, it
+tries looking in the usual places for the subprogram.
+.Sp
+The default value of \fB\s-1GCC_EXEC_PREFIX\s0\fR is
+\&\fI\fIprefix\fI/lib/gcc/\fR where \fIprefix\fR is the prefix to
+the installed compiler. In many cases \fIprefix\fR is the value
+of \f(CW\*(C`prefix\*(C'\fR when you ran the \fIconfigure\fR script.
+.Sp
+Other prefixes specified with \fB\-B\fR take precedence over this prefix.
+.Sp
+This prefix is also used for finding files such as \fIcrt0.o\fR that are
+used for linking.
+.Sp
+In addition, the prefix is used in an unusual way in finding the
+directories to search for header files.  For each of the standard
+directories whose name normally begins with \fB/usr/local/lib/gcc\fR
+(more precisely, with the value of \fB\s-1GCC_INCLUDE_DIR\s0\fR), \s-1GCC\s0 tries
+replacing that beginning with the specified prefix to produce an
+alternate directory name.  Thus, with \fB\-Bfoo/\fR, \s-1GCC\s0 searches
+\&\fIfoo/bar\fR just before it searches the standard directory 
+\&\fI/usr/local/lib/bar\fR.
+If a standard directory begins with the configured
+\&\fIprefix\fR then the value of \fIprefix\fR is replaced by
+\&\fB\s-1GCC_EXEC_PREFIX\s0\fR when looking for header files.
+.IP "\fB\s-1COMPILER_PATH\s0\fR" 4
+.IX Item "COMPILER_PATH"
+The value of \fB\s-1COMPILER_PATH\s0\fR is a colon-separated list of
+directories, much like \fB\s-1PATH\s0\fR.  \s-1GCC\s0 tries the directories thus
+specified when searching for subprograms, if it cannot find the
+subprograms using \fB\s-1GCC_EXEC_PREFIX\s0\fR.
+.IP "\fB\s-1LIBRARY_PATH\s0\fR" 4
+.IX Item "LIBRARY_PATH"
+The value of \fB\s-1LIBRARY_PATH\s0\fR is a colon-separated list of
+directories, much like \fB\s-1PATH\s0\fR.  When configured as a native compiler,
+\&\s-1GCC\s0 tries the directories thus specified when searching for special
+linker files, if it cannot find them using \fB\s-1GCC_EXEC_PREFIX\s0\fR.  Linking
+using \s-1GCC\s0 also uses these directories when searching for ordinary
+libraries for the \fB\-l\fR option (but directories specified with
+\&\fB\-L\fR come first).
+.IP "\fB\s-1LANG\s0\fR" 4
+.IX Item "LANG"
+This variable is used to pass locale information to the compiler.  One way in
+which this information is used is to determine the character set to be used
+when character literals, string literals and comments are parsed in C and \*(C+.
+When the compiler is configured to allow multibyte characters,
+the following values for \fB\s-1LANG\s0\fR are recognized:
+.RS 4
+.IP "\fBC\-JIS\fR" 4
+.IX Item "C-JIS"
+Recognize \s-1JIS\s0 characters.
+.IP "\fBC\-SJIS\fR" 4
+.IX Item "C-SJIS"
+Recognize \s-1SJIS\s0 characters.
+.IP "\fBC\-EUCJP\fR" 4
+.IX Item "C-EUCJP"
+Recognize \s-1EUCJP\s0 characters.
+.RE
+.RS 4
+.Sp
+If \fB\s-1LANG\s0\fR is not defined, or if it has some other value, then the
+compiler uses \f(CW\*(C`mblen\*(C'\fR and \f(CW\*(C`mbtowc\*(C'\fR as defined by the default locale to
+recognize and translate multibyte characters.
+.RE
+.PP
+Some additional environment variables affect the behavior of the
+preprocessor.
+.IP "\fB\s-1CPATH\s0\fR" 4
+.IX Item "CPATH"
+.PD 0
+.IP "\fBC_INCLUDE_PATH\fR" 4
+.IX Item "C_INCLUDE_PATH"
+.IP "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4
+.IX Item "CPLUS_INCLUDE_PATH"
+.IP "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4
+.IX Item "OBJC_INCLUDE_PATH"
+.PD
+Each variable's value is a list of directories separated by a special
+character, much like \fB\s-1PATH\s0\fR, in which to look for header files.
+The special character, \f(CW\*(C`PATH_SEPARATOR\*(C'\fR, is target-dependent and
+determined at \s-1GCC\s0 build time.  For Microsoft Windows-based targets it is a
+semicolon, and for almost all other targets it is a colon.
+.Sp
+\&\fB\s-1CPATH\s0\fR specifies a list of directories to be searched as if
+specified with \fB\-I\fR, but after any paths given with \fB\-I\fR
+options on the command line.  This environment variable is used
+regardless of which language is being preprocessed.
+.Sp
+The remaining environment variables apply only when preprocessing the
+particular language indicated.  Each specifies a list of directories
+to be searched as if specified with \fB\-isystem\fR, but after any
+paths given with \fB\-isystem\fR options on the command line.
+.Sp
+In all these variables, an empty element instructs the compiler to
+search its current working directory.  Empty elements can appear at the
+beginning or end of a path.  For instance, if the value of
+\&\fB\s-1CPATH\s0\fR is \f(CW\*(C`:/special/include\*(C'\fR, that has the same
+effect as \fB\-I.\ \-I/special/include\fR.
+.IP "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4
+.IX Item "DEPENDENCIES_OUTPUT"
+If this variable is set, its value specifies how to output
+dependencies for Make based on the non-system header files processed
+by the compiler.  System header files are ignored in the dependency
+output.
+.Sp
+The value of \fB\s-1DEPENDENCIES_OUTPUT\s0\fR can be just a file name, in
+which case the Make rules are written to that file, guessing the target
+name from the source file name.  Or the value can have the form
+\&\fIfile\fR\fB \fR\fItarget\fR, in which case the rules are written to
+file \fIfile\fR using \fItarget\fR as the target name.
+.Sp
+In other words, this environment variable is equivalent to combining
+the options \fB\-MM\fR and \fB\-MF\fR,
+with an optional \fB\-MT\fR switch too.
+.IP "\fB\s-1SUNPRO_DEPENDENCIES\s0\fR" 4
+.IX Item "SUNPRO_DEPENDENCIES"
+This variable is the same as \fB\s-1DEPENDENCIES_OUTPUT\s0\fR (see above),
+except that system header files are not ignored, so it implies
+\&\fB\-M\fR rather than \fB\-MM\fR.  However, the dependence on the
+main input file is omitted.
+.IP "\fB\s-1SOURCE_DATE_EPOCH\s0\fR" 4
+.IX Item "SOURCE_DATE_EPOCH"
+If this variable is set, its value specifies a \s-1UNIX\s0 timestamp to be
+used in replacement of the current date and time in the \f(CW\*(C`_\|_DATE_\|_\*(C'\fR
+and \f(CW\*(C`_\|_TIME_\|_\*(C'\fR macros, so that the embedded timestamps become
+reproducible.
+.Sp
+The value of \fB\s-1SOURCE_DATE_EPOCH\s0\fR must be a \s-1UNIX\s0 timestamp,
+defined as the number of seconds (excluding leap seconds) since
+01 Jan 1970 00:00:00 represented in \s-1ASCII\s0; identical to the output of
+\&\fB\f(CB@command\fB{date +%s\fR} on GNU/Linux and other systems that support the
+\&\f(CW%s\fR extension in the \f(CW\*(C`date\*(C'\fR command.
+.Sp
+The value should be a known timestamp such as the last modification
+time of the source or package and it should be set by the build
+process.
+.SH "BUGS"
+.IX Header "BUGS"
+For instructions on reporting bugs, see
+<\fBhttps://gcc.gnu.org/bugs/\fR>.
+.SH "FOOTNOTES"
+.IX Header "FOOTNOTES"
+.IP "1." 4
+On some systems, \fBgcc \-shared\fR
+needs to build supplementary stub code for constructors to work.  On
+multi-libbed systems, \fBgcc \-shared\fR must select the correct support
+libraries to link against.  Failing to supply the correct flags may lead
+to subtle defects.  Supplying them in cases where they are not necessary
+is innocuous.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7),
+\&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIdbx\fR\|(1)
+and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIas\fR,
+\&\fIld\fR, \fIbinutils\fR and \fIgdb\fR.
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+See the Info entry for \fBgcc\fR, or
+<\fBhttp://gcc.gnu.org/onlinedocs/gcc/Contributors.html\fR>,
+for contributors to \s-1GCC.\s0
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1988\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding
+Free Software\*(R", the Front-Cover texts being (a) (see below), and with
+the Back-Cover Texts being (b) (see below).  A copy of the license is
+included in the \fIgfdl\fR\|(7) man page.
+.PP
+(a) The \s-1FSF\s0's Front-Cover Text is:
+.PP
+.Vb 1
+\&     A GNU Manual
+.Ve
+.PP
+(b) The \s-1FSF\s0's Back-Cover Text is:
+.PP
+.Vb 3
+\&     You have freedom to copy and modify this GNU Manual, like GNU
+\&     software.  Copies published by the Free Software Foundation raise
+\&     funds for GNU development.
+.Ve
diff --git a/share/man/man1/aarch64-elf-gcov-dump.1 b/share/man/man1/aarch64-elf-gcov-dump.1
new file mode 100644
index 0000000..f25413d
--- /dev/null
+++ b/share/man/man1/aarch64-elf-gcov-dump.1
@@ -0,0 +1,206 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "GCOV-DUMP 1"
+.TH GCOV-DUMP 1 "2019-05-03" "gcc-9.1.1" "GNU"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+gcov\-dump \- offline gcda and gcno profile dump tool
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+gcov-dump [\fB\-v\fR|\fB\-\-version\fR]
+     [\fB\-h\fR|\fB\-\-help\fR]
+     [\fB\-l\fR|\fB\-\-long\fR]
+     [\fB\-p\fR|\fB\-\-positions\fR]
+     \fIgcovfiles\fR
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBgcov-dump\fR is a tool you can use in conjunction with \s-1GCC\s0 to
+dump content of gcda and gcno profile files offline.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-h\fR" 4
+.IX Item "-h"
+.PD 0
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+.PD
+Display help about using \fBgcov-dump\fR (on the standard output), and
+exit without doing any further processing.
+.IP "\fB\-l\fR" 4
+.IX Item "-l"
+.PD 0
+.IP "\fB\-\-long\fR" 4
+.IX Item "--long"
+.PD
+Dump content of records.
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+.PD 0
+.IP "\fB\-\-positions\fR" 4
+.IX Item "--positions"
+.PD
+Dump positions of records.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.PD
+Display the \fBgcov-dump\fR version number (on the standard output),
+and exit without doing any further processing.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 2017\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding
+Free Software\*(R", the Front-Cover texts being (a) (see below), and with
+the Back-Cover Texts being (b) (see below).  A copy of the license is
+included in the \fIgfdl\fR\|(7) man page.
+.PP
+(a) The \s-1FSF\s0's Front-Cover Text is:
+.PP
+.Vb 1
+\&     A GNU Manual
+.Ve
+.PP
+(b) The \s-1FSF\s0's Back-Cover Text is:
+.PP
+.Vb 3
+\&     You have freedom to copy and modify this GNU Manual, like GNU
+\&     software.  Copies published by the Free Software Foundation raise
+\&     funds for GNU development.
+.Ve
diff --git a/share/man/man1/aarch64-elf-gcov-tool.1 b/share/man/man1/aarch64-elf-gcov-tool.1
new file mode 100644
index 0000000..6f5ff56
--- /dev/null
+++ b/share/man/man1/aarch64-elf-gcov-tool.1
@@ -0,0 +1,369 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "GCOV-TOOL 1"
+.TH GCOV-TOOL 1 "2019-05-03" "gcc-9.1.1" "GNU"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+gcov\-tool \- offline gcda profile processing tool
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+gcov-tool [\fB\-v\fR|\fB\-\-version\fR] [\fB\-h\fR|\fB\-\-help\fR]
+.PP
+gcov-tool merge [merge\-options] \fIdirectory1\fR \fIdirectory2\fR
+     [\fB\-o\fR|\fB\-\-output\fR \fIdirectory\fR]
+     [\fB\-v\fR|\fB\-\-verbose\fR]
+     [\fB\-w\fR|\fB\-\-weight\fR \fIw1,w2\fR]
+.PP
+gcov-tool rewrite [rewrite\-options] \fIdirectory\fR
+     [\fB\-n\fR|\fB\-\-normalize\fR \fIlong_long_value\fR]
+     [\fB\-o\fR|\fB\-\-output\fR \fIdirectory\fR]
+     [\fB\-s\fR|\fB\-\-scale\fR \fIfloat_or_simple\-frac_value\fR]
+     [\fB\-v\fR|\fB\-\-verbose\fR]
+.PP
+gcov-tool overlap [overlap\-options] \fIdirectory1\fR \fIdirectory2\fR
+     [\fB\-f\fR|\fB\-\-function\fR]
+     [\fB\-F\fR|\fB\-\-fullname\fR]
+     [\fB\-h\fR|\fB\-\-hotonly\fR]
+     [\fB\-o\fR|\fB\-\-object\fR]
+     [\fB\-t\fR|\fB\-\-hot_threshold\fR] \fIfloat\fR
+     [\fB\-v\fR|\fB\-\-verbose\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBgcov-tool\fR is an offline tool to process gcc's gcda profile files.
+.PP
+Current gcov-tool supports the following functionalities:
+.IP "*" 4
+merge two sets of profiles with weights.
+.IP "*" 4
+read one set of profile and rewrite profile contents. One can scale or
+normalize the count values.
+.PP
+Examples of the use cases for this tool are:
+.IP "*" 4
+Collect the profiles for different set of inputs, and use this tool to merge
+them. One can specify the weight to factor in the relative importance of
+each input.
+.IP "*" 4
+Rewrite the profile after removing a subset of the gcda files, while maintaining
+the consistency of the summary and the histogram.
+.IP "*" 4
+It can also be used to debug or libgcov code as the tools shares the majority
+code as the runtime library.
+.PP
+Note that for the merging operation, this profile generated offline may
+contain slight different values from the online merged profile. Here are
+a list of typical differences:
+.IP "*" 4
+histogram difference: This offline tool recomputes the histogram after merging
+the counters. The resulting histogram, therefore, is precise. The online
+merging does not have this capability \*(-- the histogram is merged from two
+histograms and the result is an approximation.
+.IP "*" 4
+summary checksum difference: Summary checksum uses a \s-1CRC32\s0 operation. The value
+depends on the link list order of gcov-info objects. This order is different in
+gcov-tool from that in the online merge. It's expected to have different
+summary checksums. It does not really matter as the compiler does not use this
+checksum anywhere.
+.IP "*" 4
+value profile counter values difference: Some counter values for value profile
+are runtime dependent, like heap addresses. It's normal to see some difference
+in these kind of counters.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-h\fR" 4
+.IX Item "-h"
+.PD 0
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+.PD
+Display help about using \fBgcov-tool\fR (on the standard output), and
+exit without doing any further processing.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.PD
+Display the \fBgcov-tool\fR version number (on the standard output),
+and exit without doing any further processing.
+.IP "\fBmerge\fR" 4
+.IX Item "merge"
+Merge two profile directories.
+.RS 4
+.IP "\fB\-o\fR \fIdirectory\fR" 4
+.IX Item "-o directory"
+.PD 0
+.IP "\fB\-\-output\fR \fIdirectory\fR" 4
+.IX Item "--output directory"
+.PD
+Set the output profile directory. Default output directory name is
+\&\fImerged_profile\fR.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-\-verbose\fR" 4
+.IX Item "--verbose"
+.PD
+Set the verbose mode.
+.IP "\fB\-w\fR \fIw1\fR\fB,\fR\fIw2\fR" 4
+.IX Item "-w w1,w2"
+.PD 0
+.IP "\fB\-\-weight\fR \fIw1\fR\fB,\fR\fIw2\fR" 4
+.IX Item "--weight w1,w2"
+.PD
+Set the merge weights of the \fIdirectory1\fR and \fIdirectory2\fR,
+respectively. The default weights are 1 for both.
+.RE
+.RS 4
+.RE
+.IP "\fBrewrite\fR" 4
+.IX Item "rewrite"
+Read the specified profile directory and rewrite to a new directory.
+.RS 4
+.IP "\fB\-n\fR \fIlong_long_value\fR" 4
+.IX Item "-n long_long_value"
+.PD 0
+.IP "\fB\-\-normalize <long_long_value>\fR" 4
+.IX Item "--normalize <long_long_value>"
+.PD
+Normalize the profile. The specified value is the max counter value
+in the new profile.
+.IP "\fB\-o\fR \fIdirectory\fR" 4
+.IX Item "-o directory"
+.PD 0
+.IP "\fB\-\-output\fR \fIdirectory\fR" 4
+.IX Item "--output directory"
+.PD
+Set the output profile directory. Default output name is \fIrewrite_profile\fR.
+.IP "\fB\-s\fR \fIfloat_or_simple\-frac_value\fR" 4
+.IX Item "-s float_or_simple-frac_value"
+.PD 0
+.IP "\fB\-\-scale\fR \fIfloat_or_simple\-frac_value\fR" 4
+.IX Item "--scale float_or_simple-frac_value"
+.PD
+Scale the profile counters. The specified value can be in floating point value,
+or simple fraction value form, such 1, 2, 2/3, and 5/3.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-\-verbose\fR" 4
+.IX Item "--verbose"
+.PD
+Set the verbose mode.
+.RE
+.RS 4
+.RE
+.IP "\fBoverlap\fR" 4
+.IX Item "overlap"
+Compute the overlap score between the two specified profile directories.
+The overlap score is computed based on the arc profiles. It is defined as
+the sum of min (p1_counter[i] / p1_sum_all, p2_counter[i] / p2_sum_all),
+for all arc counter i, where p1_counter[i] and p2_counter[i] are two
+matched counters and p1_sum_all and p2_sum_all are the sum of counter
+values in profile 1 and profile 2, respectively.
+.RS 4
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+.PD 0
+.IP "\fB\-\-function\fR" 4
+.IX Item "--function"
+.PD
+Print function level overlap score.
+.IP "\fB\-F\fR" 4
+.IX Item "-F"
+.PD 0
+.IP "\fB\-\-fullname\fR" 4
+.IX Item "--fullname"
+.PD
+Print full gcda filename.
+.IP "\fB\-h\fR" 4
+.IX Item "-h"
+.PD 0
+.IP "\fB\-\-hotonly\fR" 4
+.IX Item "--hotonly"
+.PD
+Only print info for hot objects/functions.
+.IP "\fB\-o\fR" 4
+.IX Item "-o"
+.PD 0
+.IP "\fB\-\-object\fR" 4
+.IX Item "--object"
+.PD
+Print object level overlap score.
+.IP "\fB\-t\fR \fIfloat\fR" 4
+.IX Item "-t float"
+.PD 0
+.IP "\fB\-\-hot_threshold <float>\fR" 4
+.IX Item "--hot_threshold <float>"
+.PD
+Set the threshold for hot counter value.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-\-verbose\fR" 4
+.IX Item "--verbose"
+.PD
+Set the verbose mode.
+.RE
+.RS 4
+.RE
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), \fIgcc\fR\|(1), \fIgcov\fR\|(1) and the Info entry for
+\&\fIgcc\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 2014\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding
+Free Software\*(R", the Front-Cover texts being (a) (see below), and with
+the Back-Cover Texts being (b) (see below).  A copy of the license is
+included in the \fIgfdl\fR\|(7) man page.
+.PP
+(a) The \s-1FSF\s0's Front-Cover Text is:
+.PP
+.Vb 1
+\&     A GNU Manual
+.Ve
+.PP
+(b) The \s-1FSF\s0's Back-Cover Text is:
+.PP
+.Vb 3
+\&     You have freedom to copy and modify this GNU Manual, like GNU
+\&     software.  Copies published by the Free Software Foundation raise
+\&     funds for GNU development.
+.Ve
diff --git a/share/man/man1/aarch64-elf-gcov.1 b/share/man/man1/aarch64-elf-gcov.1
new file mode 100644
index 0000000..d967004
--- /dev/null
+++ b/share/man/man1/aarch64-elf-gcov.1
@@ -0,0 +1,1039 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "GCOV 1"
+.TH GCOV 1 "2019-05-03" "gcc-9.1.1" "GNU"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+gcov \- coverage testing tool
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+gcov [\fB\-v\fR|\fB\-\-version\fR] [\fB\-h\fR|\fB\-\-help\fR]
+     [\fB\-a\fR|\fB\-\-all\-blocks\fR]
+     [\fB\-b\fR|\fB\-\-branch\-probabilities\fR]
+     [\fB\-c\fR|\fB\-\-branch\-counts\fR]
+     [\fB\-d\fR|\fB\-\-display\-progress\fR]
+     [\fB\-f\fR|\fB\-\-function\-summaries\fR]
+     [\fB\-i\fR|\fB\-\-json\-format\fR]
+     [\fB\-j\fR|\fB\-\-human\-readable\fR]
+     [\fB\-k\fR|\fB\-\-use\-colors\fR]
+     [\fB\-l\fR|\fB\-\-long\-file\-names\fR]
+     [\fB\-m\fR|\fB\-\-demangled\-names\fR]
+     [\fB\-n\fR|\fB\-\-no\-output\fR]
+     [\fB\-o\fR|\fB\-\-object\-directory\fR \fIdirectory|file\fR]
+     [\fB\-p\fR|\fB\-\-preserve\-paths\fR]
+     [\fB\-q\fR|\fB\-\-use\-hotness\-colors\fR]
+     [\fB\-r\fR|\fB\-\-relative\-only\fR]
+     [\fB\-s\fR|\fB\-\-source\-prefix\fR \fIdirectory\fR]
+     [\fB\-t\fR|\fB\-\-stdout\fR]
+     [\fB\-u\fR|\fB\-\-unconditional\-branches\fR]
+     [\fB\-x\fR|\fB\-\-hash\-filenames\fR]
+     \fIfiles\fR
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBgcov\fR is a test coverage program.  Use it in concert with \s-1GCC\s0
+to analyze your programs to help create more efficient, faster running
+code and to discover untested parts of your program.  You can use
+\&\fBgcov\fR as a profiling tool to help discover where your
+optimization efforts will best affect your code.  You can also use
+\&\fBgcov\fR along with the other profiling tool, \fBgprof\fR, to
+assess which parts of your code use the greatest amount of computing
+time.
+.PP
+Profiling tools help you analyze your code's performance.  Using a
+profiler such as \fBgcov\fR or \fBgprof\fR, you can find out some
+basic performance statistics, such as:
+.IP "*" 4
+how often each line of code executes
+.IP "*" 4
+what lines of code are actually executed
+.IP "*" 4
+how much computing time each section of code uses
+.PP
+Once you know these things about how your code works when compiled, you
+can look at each module to see which modules should be optimized.
+\&\fBgcov\fR helps you determine where to work on optimization.
+.PP
+Software developers also use coverage testing in concert with
+testsuites, to make sure software is actually good enough for a release.
+Testsuites can verify that a program works as expected; a coverage
+program tests to see how much of the program is exercised by the
+testsuite.  Developers can then determine what kinds of test cases need
+to be added to the testsuites to create both better testing and a better
+final product.
+.PP
+You should compile your code without optimization if you plan to use
+\&\fBgcov\fR because the optimization, by combining some lines of code
+into one function, may not give you as much information as you need to
+look for `hot spots' where the code is using a great deal of computer
+time.  Likewise, because \fBgcov\fR accumulates statistics by line (at
+the lowest resolution), it works best with a programming style that
+places only one statement on each line.  If you use complicated macros
+that expand to loops or to other control structures, the statistics are
+less helpful\-\-\-they only report on the line where the macro call
+appears.  If your complex macros behave like functions, you can replace
+them with inline functions to solve this problem.
+.PP
+\&\fBgcov\fR creates a logfile called \fI\fIsourcefile\fI.gcov\fR which
+indicates how many times each line of a source file \fI\fIsourcefile\fI.c\fR
+has executed.  You can use these logfiles along with \fBgprof\fR to aid
+in fine-tuning the performance of your programs.  \fBgprof\fR gives
+timing information you can use along with the information you get from
+\&\fBgcov\fR.
+.PP
+\&\fBgcov\fR works only on code compiled with \s-1GCC.\s0  It is not
+compatible with any other profiling or test coverage mechanism.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-a\fR" 4
+.IX Item "-a"
+.PD 0
+.IP "\fB\-\-all\-blocks\fR" 4
+.IX Item "--all-blocks"
+.PD
+Write individual execution counts for every basic block.  Normally gcov
+outputs execution counts only for the main blocks of a line.  With this
+option you can determine if blocks within a single line are not being
+executed.
+.IP "\fB\-b\fR" 4
+.IX Item "-b"
+.PD 0
+.IP "\fB\-\-branch\-probabilities\fR" 4
+.IX Item "--branch-probabilities"
+.PD
+Write branch frequencies to the output file, and write branch summary
+info to the standard output.  This option allows you to see how often
+each branch in your program was taken.  Unconditional branches will not
+be shown, unless the \fB\-u\fR option is given.
+.IP "\fB\-c\fR" 4
+.IX Item "-c"
+.PD 0
+.IP "\fB\-\-branch\-counts\fR" 4
+.IX Item "--branch-counts"
+.PD
+Write branch frequencies as the number of branches taken, rather than
+the percentage of branches taken.
+.IP "\fB\-d\fR" 4
+.IX Item "-d"
+.PD 0
+.IP "\fB\-\-display\-progress\fR" 4
+.IX Item "--display-progress"
+.PD
+Display the progress on the standard output.
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+.PD 0
+.IP "\fB\-\-function\-summaries\fR" 4
+.IX Item "--function-summaries"
+.PD
+Output summaries for each function in addition to the file level summary.
+.IP "\fB\-h\fR" 4
+.IX Item "-h"
+.PD 0
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+.PD
+Display help about using \fBgcov\fR (on the standard output), and
+exit without doing any further processing.
+.IP "\fB\-i\fR" 4
+.IX Item "-i"
+.PD 0
+.IP "\fB\-\-json\-format\fR" 4
+.IX Item "--json-format"
+.PD
+Output gcov file in an easy-to-parse \s-1JSON\s0 intermediate format
+which does not require source code for generation.  The \s-1JSON\s0
+file is compressed with gzip compression algorithm
+and the files have \fI.gcov.json.gz\fR extension.
+.Sp
+Structure of the \s-1JSON\s0 is following:
+.Sp
+.Vb 7
+\&        {
+\&          "current_working_directory": <current_working_directory>,
+\&          "data_file": <data_file>,
+\&          "format_version": <format_version>,
+\&          "gcc_version": <gcc_version>
+\&          "files": [<file>]
+\&        }
+.Ve
+.Sp
+Fields of the root element have following semantics:
+.RS 4
+.IP "*" 4
+\&\fIcurrent_working_directory\fR: working directory where
+a compilation unit was compiled
+.IP "*" 4
+\&\fIdata_file\fR: name of the data file (\s-1GCDA\s0)
+.IP "*" 4
+\&\fIformat_version\fR: semantic version of the format
+.IP "*" 4
+\&\fIgcc_version\fR: version of the \s-1GCC\s0 compiler
+.RE
+.RS 4
+.Sp
+Each \fIfile\fR has the following form:
+.Sp
+.Vb 5
+\&        {
+\&          "file": <file_name>,
+\&          "functions": [<function>],
+\&          "lines": [<line>]
+\&        }
+.Ve
+.Sp
+Fields of the \fIfile\fR element have following semantics:
+.IP "*" 4
+\&\fIfile_name\fR: name of the source file
+.RE
+.RS 4
+.Sp
+Each \fIfunction\fR has the following form:
+.Sp
+.Vb 11
+\&        {
+\&          "blocks": <blocks>,
+\&          "blocks_executed": <blocks_executed>,
+\&          "demangled_name": "<demangled_name>,
+\&          "end_column": <end_column>,
+\&          "end_line": <end_line>,
+\&          "execution_count": <execution_count>,
+\&          "name": <name>,
+\&          "start_column": <start_column>
+\&          "start_line": <start_line>
+\&        }
+.Ve
+.Sp
+Fields of the \fIfunction\fR element have following semantics:
+.IP "*" 4
+\&\fIblocks\fR: number of blocks that are in the function
+.IP "*" 4
+\&\fIblocks_executed\fR: number of executed blocks of the function
+.IP "*" 4
+\&\fIdemangled_name\fR: demangled name of the function
+.IP "*" 4
+\&\fIend_column\fR: column in the source file where the function ends
+.IP "*" 4
+\&\fIend_line\fR: line in the source file where the function ends
+.IP "*" 4
+\&\fIexecution_count\fR: number of executions of the function
+.IP "*" 4
+\&\fIname\fR: name of the function
+.IP "*" 4
+\&\fIstart_column\fR: column in the source file where the function begins
+.IP "*" 4
+\&\fIstart_line\fR: line in the source file where the function begins
+.RE
+.RS 4
+.Sp
+Note that line numbers and column numbers number from 1.  In the current
+implementation, \fIstart_line\fR and \fIstart_column\fR do not include
+any template parameters and the leading return type but that
+this is likely to be fixed in the future.
+.Sp
+Each \fIline\fR has the following form:
+.Sp
+.Vb 7
+\&        {
+\&          "branches": [<branch>],
+\&          "count": <count>,
+\&          "line_number": <line_number>,
+\&          "unexecuted_block": <unexecuted_block>
+\&          "function_name": <function_name>,
+\&        }
+.Ve
+.Sp
+Branches are present only with \fI\-b\fR option.
+Fields of the \fIline\fR element have following semantics:
+.IP "*" 4
+\&\fIcount\fR: number of executions of the line
+.IP "*" 4
+\&\fIline_number\fR: line number
+.IP "*" 4
+\&\fIunexecuted_block\fR: flag whether the line contains an unexecuted block
+(not all statements on the line are executed)
+.IP "*" 4
+\&\fIfunction_name\fR: a name of a function this \fIline\fR belongs to
+(for a line with an inlined statements can be not set)
+.RE
+.RS 4
+.Sp
+Each \fIbranch\fR has the following form:
+.Sp
+.Vb 5
+\&        {
+\&          "count": <count>,
+\&          "fallthrough": <fallthrough>,
+\&          "throw": <throw>
+\&        }
+.Ve
+.Sp
+Fields of the \fIbranch\fR element have following semantics:
+.IP "*" 4
+\&\fIcount\fR: number of executions of the branch
+.IP "*" 4
+\&\fIfallthrough\fR: true when the branch is a fall through branch
+.IP "*" 4
+\&\fIthrow\fR: true when the branch is an exceptional branch
+.RE
+.RS 4
+.RE
+.IP "\fB\-j\fR" 4
+.IX Item "-j"
+.PD 0
+.IP "\fB\-\-human\-readable\fR" 4
+.IX Item "--human-readable"
+.PD
+Write counts in human readable format (like 24.6k).
+.IP "\fB\-k\fR" 4
+.IX Item "-k"
+.PD 0
+.IP "\fB\-\-use\-colors\fR" 4
+.IX Item "--use-colors"
+.PD
+Use colors for lines of code that have zero coverage.  We use red color for
+non-exceptional lines and cyan for exceptional.  Same colors are used for
+basic blocks with \fB\-a\fR option.
+.IP "\fB\-l\fR" 4
+.IX Item "-l"
+.PD 0
+.IP "\fB\-\-long\-file\-names\fR" 4
+.IX Item "--long-file-names"
+.PD
+Create long file names for included source files.  For example, if the
+header file \fIx.h\fR contains code, and was included in the file
+\&\fIa.c\fR, then running \fBgcov\fR on the file \fIa.c\fR will
+produce an output file called \fIa.c##x.h.gcov\fR instead of
+\&\fIx.h.gcov\fR.  This can be useful if \fIx.h\fR is included in
+multiple source files and you want to see the individual
+contributions.  If you use the \fB\-p\fR option, both the including
+and included file names will be complete path names.
+.IP "\fB\-m\fR" 4
+.IX Item "-m"
+.PD 0
+.IP "\fB\-\-demangled\-names\fR" 4
+.IX Item "--demangled-names"
+.PD
+Display demangled function names in output. The default is to show
+mangled function names.
+.IP "\fB\-n\fR" 4
+.IX Item "-n"
+.PD 0
+.IP "\fB\-\-no\-output\fR" 4
+.IX Item "--no-output"
+.PD
+Do not create the \fBgcov\fR output file.
+.IP "\fB\-o\fR \fIdirectory|file\fR" 4
+.IX Item "-o directory|file"
+.PD 0
+.IP "\fB\-\-object\-directory\fR \fIdirectory\fR" 4
+.IX Item "--object-directory directory"
+.IP "\fB\-\-object\-file\fR \fIfile\fR" 4
+.IX Item "--object-file file"
+.PD
+Specify either the directory containing the gcov data files, or the
+object path name.  The \fI.gcno\fR, and
+\&\fI.gcda\fR data files are searched for using this option.  If a directory
+is specified, the data files are in that directory and named after the
+input file name, without its extension.  If a file is specified here,
+the data files are named after that file, without its extension.
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+.PD 0
+.IP "\fB\-\-preserve\-paths\fR" 4
+.IX Item "--preserve-paths"
+.PD
+Preserve complete path information in the names of generated
+\&\fI.gcov\fR files.  Without this option, just the filename component is
+used.  With this option, all directories are used, with \fB/\fR characters
+translated to \fB#\fR characters, \fI.\fR directory components
+removed and unremoveable \fI..\fR
+components renamed to \fB^\fR.  This is useful if sourcefiles are in several
+different directories.
+.IP "\fB\-q\fR" 4
+.IX Item "-q"
+.PD 0
+.IP "\fB\-\-use\-hotness\-colors\fR" 4
+.IX Item "--use-hotness-colors"
+.PD
+Emit perf-like colored output for hot lines.  Legend of the color scale
+is printed at the very beginning of the output file.
+.IP "\fB\-r\fR" 4
+.IX Item "-r"
+.PD 0
+.IP "\fB\-\-relative\-only\fR" 4
+.IX Item "--relative-only"
+.PD
+Only output information about source files with a relative pathname
+(after source prefix elision).  Absolute paths are usually system
+header files and coverage of any inline functions therein is normally
+uninteresting.
+.IP "\fB\-s\fR \fIdirectory\fR" 4
+.IX Item "-s directory"
+.PD 0
+.IP "\fB\-\-source\-prefix\fR \fIdirectory\fR" 4
+.IX Item "--source-prefix directory"
+.PD
+A prefix for source file names to remove when generating the output
+coverage files.  This option is useful when building in a separate
+directory, and the pathname to the source directory is not wanted when
+determining the output file names.  Note that this prefix detection is
+applied before determining whether the source file is absolute.
+.IP "\fB\-t\fR" 4
+.IX Item "-t"
+.PD 0
+.IP "\fB\-\-stdout\fR" 4
+.IX Item "--stdout"
+.PD
+Output to standard output instead of output files.
+.IP "\fB\-u\fR" 4
+.IX Item "-u"
+.PD 0
+.IP "\fB\-\-unconditional\-branches\fR" 4
+.IX Item "--unconditional-branches"
+.PD
+When branch probabilities are given, include those of unconditional branches.
+Unconditional branches are normally not interesting.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.PD
+Display the \fBgcov\fR version number (on the standard output),
+and exit without doing any further processing.
+.IP "\fB\-w\fR" 4
+.IX Item "-w"
+.PD 0
+.IP "\fB\-\-verbose\fR" 4
+.IX Item "--verbose"
+.PD
+Print verbose informations related to basic blocks and arcs.
+.IP "\fB\-x\fR" 4
+.IX Item "-x"
+.PD 0
+.IP "\fB\-\-hash\-filenames\fR" 4
+.IX Item "--hash-filenames"
+.PD
+When using \fI\-\-preserve\-paths\fR,
+gcov uses the full pathname of the source files to create
+an output filename.  This can lead to long filenames that can overflow
+filesystem limits.  This option creates names of the form
+\&\fI\fIsource-file\fI##\fImd5\fI.gcov\fR,
+where the \fIsource-file\fR component is the final filename part and
+the \fImd5\fR component is calculated from the full mangled name that
+would have been used otherwise.  The option is an alternative
+to the \fI\-\-preserve\-paths\fR on systems which have a filesystem limit.
+.PP
+\&\fBgcov\fR should be run with the current directory the same as that
+when you invoked the compiler.  Otherwise it will not be able to locate
+the source files.  \fBgcov\fR produces files called
+\&\fI\fImangledname\fI.gcov\fR in the current directory.  These contain
+the coverage information of the source file they correspond to.
+One \fI.gcov\fR file is produced for each source (or header) file
+containing code,
+which was compiled to produce the data files.  The \fImangledname\fR part
+of the output file name is usually simply the source file name, but can
+be something more complicated if the \fB\-l\fR or \fB\-p\fR options are
+given.  Refer to those options for details.
+.PP
+If you invoke \fBgcov\fR with multiple input files, the
+contributions from each input file are summed.  Typically you would
+invoke it with the same list of files as the final link of your executable.
+.PP
+The \fI.gcov\fR files contain the \fB:\fR separated fields along with
+program source code.  The format is
+.PP
+.Vb 1
+\&        <execution_count>:<line_number>:<source line text>
+.Ve
+.PP
+Additional block information may succeed each line, when requested by
+command line option.  The \fIexecution_count\fR is \fB\-\fR for lines
+containing no code.  Unexecuted lines are marked \fB#####\fR or
+\&\fB=====\fR, depending on whether they are reachable by
+non-exceptional paths or only exceptional paths such as \*(C+ exception
+handlers, respectively. Given the \fB\-a\fR option, unexecuted blocks are
+marked \fB$$$$$\fR or \fB%%%%%\fR, depending on whether a basic block
+is reachable via non-exceptional or exceptional paths.
+Executed basic blocks having a statement with zero \fIexecution_count\fR
+end with \fB*\fR character and are colored with magenta color with
+the \fB\-k\fR option.  This functionality is not supported in Ada.
+.PP
+Note that \s-1GCC\s0 can completely remove the bodies of functions that are
+not needed \*(-- for instance if they are inlined everywhere.  Such functions
+are marked with \fB\-\fR, which can be confusing.
+Use the \fB\-fkeep\-inline\-functions\fR and \fB\-fkeep\-static\-functions\fR
+options to retain these functions and
+allow gcov to properly show their \fIexecution_count\fR.
+.PP
+Some lines of information at the start have \fIline_number\fR of zero.
+These preamble lines are of the form
+.PP
+.Vb 1
+\&        \-:0:<tag>:<value>
+.Ve
+.PP
+The ordering and number of these preamble lines will be augmented as
+\&\fBgcov\fR development progresses \-\-\- do not rely on them remaining
+unchanged.  Use \fItag\fR to locate a particular preamble line.
+.PP
+The additional block information is of the form
+.PP
+.Vb 1
+\&        <tag> <information>
+.Ve
+.PP
+The \fIinformation\fR is human readable, but designed to be simple
+enough for machine parsing too.
+.PP
+When printing percentages, 0% and 100% are only printed when the values
+are \fIexactly\fR 0% and 100% respectively.  Other values which would
+conventionally be rounded to 0% or 100% are instead printed as the
+nearest non-boundary value.
+.PP
+When using \fBgcov\fR, you must first compile your program
+with a special \s-1GCC\s0 option \fB\-\-coverage\fR.
+This tells the compiler to generate additional information needed by
+gcov (basically a flow graph of the program) and also includes
+additional code in the object files for generating the extra profiling
+information needed by gcov.  These additional files are placed in the
+directory where the object file is located.
+.PP
+Running the program will cause profile output to be generated.  For each
+source file compiled with \fB\-fprofile\-arcs\fR, an accompanying
+\&\fI.gcda\fR file will be placed in the object file directory.
+.PP
+Running \fBgcov\fR with your program's source file names as arguments
+will now produce a listing of the code along with frequency of execution
+for each line.  For example, if your program is called \fItmp.cpp\fR, this
+is what you see when you use the basic \fBgcov\fR facility:
+.PP
+.Vb 6
+\&        $ g++ \-\-coverage tmp.cpp
+\&        $ a.out
+\&        $ gcov tmp.cpp \-m
+\&        File \*(Aqtmp.cpp\*(Aq
+\&        Lines executed:92.86% of 14
+\&        Creating \*(Aqtmp.cpp.gcov\*(Aq
+.Ve
+.PP
+The file \fItmp.cpp.gcov\fR contains output from \fBgcov\fR.
+Here is a sample:
+.PP
+.Vb 10
+\&                \-:    0:Source:tmp.cpp
+\&                \-:    0:Working directory:/home/gcc/testcase
+\&                \-:    0:Graph:tmp.gcno
+\&                \-:    0:Data:tmp.gcda
+\&                \-:    0:Runs:1
+\&                \-:    0:Programs:1
+\&                \-:    1:#include <stdio.h>
+\&                \-:    2:
+\&                \-:    3:template<class T>
+\&                \-:    4:class Foo
+\&                \-:    5:{
+\&                \-:    6:  public:
+\&               1*:    7:  Foo(): b (1000) {}
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&        Foo<char>::Foo():
+\&            #####:    7:  Foo(): b (1000) {}
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&        Foo<int>::Foo():
+\&                1:    7:  Foo(): b (1000) {}
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&               2*:    8:  void inc () { b++; }
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&        Foo<char>::inc():
+\&            #####:    8:  void inc () { b++; }
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&        Foo<int>::inc():
+\&                2:    8:  void inc () { b++; }
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&                \-:    9:
+\&                \-:   10:  private:
+\&                \-:   11:  int b;
+\&                \-:   12:};
+\&                \-:   13:
+\&                \-:   14:template class Foo<int>;
+\&                \-:   15:template class Foo<char>;
+\&                \-:   16:
+\&                \-:   17:int
+\&                1:   18:main (void)
+\&                \-:   19:{
+\&                \-:   20:  int i, total;
+\&                1:   21:  Foo<int> counter;
+\&                \-:   22:
+\&                1:   23:  counter.inc();
+\&                1:   24:  counter.inc();
+\&                1:   25:  total = 0;
+\&                \-:   26:
+\&               11:   27:  for (i = 0; i < 10; i++)
+\&               10:   28:    total += i;
+\&                \-:   29:
+\&               1*:   30:  int v = total > 100 ? 1 : 2;
+\&                \-:   31:
+\&                1:   32:  if (total != 45)
+\&            #####:   33:    printf ("Failure\en");
+\&                \-:   34:  else
+\&                1:   35:    printf ("Success\en");
+\&                1:   36:  return 0;
+\&                \-:   37:}
+.Ve
+.PP
+Note that line 7 is shown in the report multiple times.  First occurrence
+presents total number of execution of the line and the next two belong
+to instances of class Foo constructors.  As you can also see, line 30 contains
+some unexecuted basic blocks and thus execution count has asterisk symbol.
+.PP
+When you use the \fB\-a\fR option, you will get individual block
+counts, and the output looks like this:
+.PP
+.Vb 10
+\&                \-:    0:Source:tmp.cpp
+\&                \-:    0:Working directory:/home/gcc/testcase
+\&                \-:    0:Graph:tmp.gcno
+\&                \-:    0:Data:tmp.gcda
+\&                \-:    0:Runs:1
+\&                \-:    0:Programs:1
+\&                \-:    1:#include <stdio.h>
+\&                \-:    2:
+\&                \-:    3:template<class T>
+\&                \-:    4:class Foo
+\&                \-:    5:{
+\&                \-:    6:  public:
+\&               1*:    7:  Foo(): b (1000) {}
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&        Foo<char>::Foo():
+\&            #####:    7:  Foo(): b (1000) {}
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&        Foo<int>::Foo():
+\&                1:    7:  Foo(): b (1000) {}
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&               2*:    8:  void inc () { b++; }
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&        Foo<char>::inc():
+\&            #####:    8:  void inc () { b++; }
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&        Foo<int>::inc():
+\&                2:    8:  void inc () { b++; }
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&                \-:    9:
+\&                \-:   10:  private:
+\&                \-:   11:  int b;
+\&                \-:   12:};
+\&                \-:   13:
+\&                \-:   14:template class Foo<int>;
+\&                \-:   15:template class Foo<char>;
+\&                \-:   16:
+\&                \-:   17:int
+\&                1:   18:main (void)
+\&                \-:   19:{
+\&                \-:   20:  int i, total;
+\&                1:   21:  Foo<int> counter;
+\&                1:   21\-block  0
+\&                \-:   22:
+\&                1:   23:  counter.inc();
+\&                1:   23\-block  0
+\&                1:   24:  counter.inc();
+\&                1:   24\-block  0
+\&                1:   25:  total = 0;
+\&                \-:   26:
+\&               11:   27:  for (i = 0; i < 10; i++)
+\&                1:   27\-block  0
+\&               11:   27\-block  1
+\&               10:   28:    total += i;
+\&               10:   28\-block  0
+\&                \-:   29:
+\&               1*:   30:  int v = total > 100 ? 1 : 2;
+\&                1:   30\-block  0
+\&            %%%%%:   30\-block  1
+\&                1:   30\-block  2
+\&                \-:   31:
+\&                1:   32:  if (total != 45)
+\&                1:   32\-block  0
+\&            #####:   33:    printf ("Failure\en");
+\&            %%%%%:   33\-block  0
+\&                \-:   34:  else
+\&                1:   35:    printf ("Success\en");
+\&                1:   35\-block  0
+\&                1:   36:  return 0;
+\&                1:   36\-block  0
+\&                \-:   37:}
+.Ve
+.PP
+In this mode, each basic block is only shown on one line \*(-- the last
+line of the block.  A multi-line block will only contribute to the
+execution count of that last line, and other lines will not be shown
+to contain code, unless previous blocks end on those lines.
+The total execution count of a line is shown and subsequent lines show
+the execution counts for individual blocks that end on that line.  After each
+block, the branch and call counts of the block will be shown, if the
+\&\fB\-b\fR option is given.
+.PP
+Because of the way \s-1GCC\s0 instruments calls, a call count can be shown
+after a line with no individual blocks.
+As you can see, line 33 contains a basic block that was not executed.
+.PP
+When you use the \fB\-b\fR option, your output looks like this:
+.PP
+.Vb 10
+\&                \-:    0:Source:tmp.cpp
+\&                \-:    0:Working directory:/home/gcc/testcase
+\&                \-:    0:Graph:tmp.gcno
+\&                \-:    0:Data:tmp.gcda
+\&                \-:    0:Runs:1
+\&                \-:    0:Programs:1
+\&                \-:    1:#include <stdio.h>
+\&                \-:    2:
+\&                \-:    3:template<class T>
+\&                \-:    4:class Foo
+\&                \-:    5:{
+\&                \-:    6:  public:
+\&               1*:    7:  Foo(): b (1000) {}
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&        Foo<char>::Foo():
+\&        function Foo<char>::Foo() called 0 returned 0% blocks executed 0%
+\&            #####:    7:  Foo(): b (1000) {}
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&        Foo<int>::Foo():
+\&        function Foo<int>::Foo() called 1 returned 100% blocks executed 100%
+\&                1:    7:  Foo(): b (1000) {}
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&               2*:    8:  void inc () { b++; }
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&        Foo<char>::inc():
+\&        function Foo<char>::inc() called 0 returned 0% blocks executed 0%
+\&            #####:    8:  void inc () { b++; }
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&        Foo<int>::inc():
+\&        function Foo<int>::inc() called 2 returned 100% blocks executed 100%
+\&                2:    8:  void inc () { b++; }
+\&        \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\&                \-:    9:
+\&                \-:   10:  private:
+\&                \-:   11:  int b;
+\&                \-:   12:};
+\&                \-:   13:
+\&                \-:   14:template class Foo<int>;
+\&                \-:   15:template class Foo<char>;
+\&                \-:   16:
+\&                \-:   17:int
+\&        function main called 1 returned 100% blocks executed 81%
+\&                1:   18:main (void)
+\&                \-:   19:{
+\&                \-:   20:  int i, total;
+\&                1:   21:  Foo<int> counter;
+\&        call    0 returned 100%
+\&        branch  1 taken 100% (fallthrough)
+\&        branch  2 taken 0% (throw)
+\&                \-:   22:
+\&                1:   23:  counter.inc();
+\&        call    0 returned 100%
+\&        branch  1 taken 100% (fallthrough)
+\&        branch  2 taken 0% (throw)
+\&                1:   24:  counter.inc();
+\&        call    0 returned 100%
+\&        branch  1 taken 100% (fallthrough)
+\&        branch  2 taken 0% (throw)
+\&                1:   25:  total = 0;
+\&                \-:   26:
+\&               11:   27:  for (i = 0; i < 10; i++)
+\&        branch  0 taken 91% (fallthrough)
+\&        branch  1 taken 9%
+\&               10:   28:    total += i;
+\&                \-:   29:
+\&               1*:   30:  int v = total > 100 ? 1 : 2;
+\&        branch  0 taken 0% (fallthrough)
+\&        branch  1 taken 100%
+\&                \-:   31:
+\&                1:   32:  if (total != 45)
+\&        branch  0 taken 0% (fallthrough)
+\&        branch  1 taken 100%
+\&            #####:   33:    printf ("Failure\en");
+\&        call    0 never executed
+\&        branch  1 never executed
+\&        branch  2 never executed
+\&                \-:   34:  else
+\&                1:   35:    printf ("Success\en");
+\&        call    0 returned 100%
+\&        branch  1 taken 100% (fallthrough)
+\&        branch  2 taken 0% (throw)
+\&                1:   36:  return 0;
+\&                \-:   37:}
+.Ve
+.PP
+For each function, a line is printed showing how many times the function
+is called, how many times it returns and what percentage of the
+function's blocks were executed.
+.PP
+For each basic block, a line is printed after the last line of the basic
+block describing the branch or call that ends the basic block.  There can
+be multiple branches and calls listed for a single source line if there
+are multiple basic blocks that end on that line.  In this case, the
+branches and calls are each given a number.  There is no simple way to map
+these branches and calls back to source constructs.  In general, though,
+the lowest numbered branch or call will correspond to the leftmost construct
+on the source line.
+.PP
+For a branch, if it was executed at least once, then a percentage
+indicating the number of times the branch was taken divided by the
+number of times the branch was executed will be printed.  Otherwise, the
+message \*(L"never executed\*(R" is printed.
+.PP
+For a call, if it was executed at least once, then a percentage
+indicating the number of times the call returned divided by the number
+of times the call was executed will be printed.  This will usually be
+100%, but may be less for functions that call \f(CW\*(C`exit\*(C'\fR or \f(CW\*(C`longjmp\*(C'\fR,
+and thus may not return every time they are called.
+.PP
+The execution counts are cumulative.  If the example program were
+executed again without removing the \fI.gcda\fR file, the count for the
+number of times each line in the source was executed would be added to
+the results of the previous run(s).  This is potentially useful in
+several ways.  For example, it could be used to accumulate data over a
+number of program runs as part of a test verification suite, or to
+provide more accurate long-term information over a large number of
+program runs.
+.PP
+The data in the \fI.gcda\fR files is saved immediately before the program
+exits.  For each source file compiled with \fB\-fprofile\-arcs\fR, the
+profiling code first attempts to read in an existing \fI.gcda\fR file; if
+the file doesn't match the executable (differing number of basic block
+counts) it will ignore the contents of the file.  It then adds in the
+new execution counts and finally writes the data to the file.
+.SS "Using \fBgcov\fP with \s-1GCC\s0 Optimization"
+.IX Subsection "Using gcov with GCC Optimization"
+If you plan to use \fBgcov\fR to help optimize your code, you must
+first compile your program with a special \s-1GCC\s0 option
+\&\fB\-\-coverage\fR.  Aside from that, you can use any
+other \s-1GCC\s0 options; but if you want to prove that every single line
+in your program was executed, you should not compile with optimization
+at the same time.  On some machines the optimizer can eliminate some
+simple code lines by combining them with other lines.  For example, code
+like this:
+.PP
+.Vb 4
+\&        if (a != b)
+\&          c = 1;
+\&        else
+\&          c = 0;
+.Ve
+.PP
+can be compiled into one instruction on some machines.  In this case,
+there is no way for \fBgcov\fR to calculate separate execution counts
+for each line because there isn't separate code for each line.  Hence
+the \fBgcov\fR output looks like this if you compiled the program with
+optimization:
+.PP
+.Vb 4
+\&              100:   12:if (a != b)
+\&              100:   13:  c = 1;
+\&              100:   14:else
+\&              100:   15:  c = 0;
+.Ve
+.PP
+The output shows that this block of code, combined by optimization,
+executed 100 times.  In one sense this result is correct, because there
+was only one instruction representing all four of these lines.  However,
+the output does not indicate how many times the result was 0 and how
+many times the result was 1.
+.PP
+Inlineable functions can create unexpected line counts.  Line counts are
+shown for the source code of the inlineable function, but what is shown
+depends on where the function is inlined, or if it is not inlined at all.
+.PP
+If the function is not inlined, the compiler must emit an out of line
+copy of the function, in any object file that needs it.  If
+\&\fIfileA.o\fR and \fIfileB.o\fR both contain out of line bodies of a
+particular inlineable function, they will also both contain coverage
+counts for that function.  When \fIfileA.o\fR and \fIfileB.o\fR are
+linked together, the linker will, on many systems, select one of those
+out of line bodies for all calls to that function, and remove or ignore
+the other.  Unfortunately, it will not remove the coverage counters for
+the unused function body.  Hence when instrumented, all but one use of
+that function will show zero counts.
+.PP
+If the function is inlined in several places, the block structure in
+each location might not be the same.  For instance, a condition might
+now be calculable at compile time in some instances.  Because the
+coverage of all the uses of the inline function will be shown for the
+same source lines, the line counts themselves might seem inconsistent.
+.PP
+Long-running applications can use the \f(CW\*(C`_\|_gcov_reset\*(C'\fR and \f(CW\*(C`_\|_gcov_dump\*(C'\fR
+facilities to restrict profile collection to the program region of
+interest. Calling \f(CW\*(C`_\|_gcov_reset(void)\*(C'\fR will clear all profile counters
+to zero, and calling \f(CW\*(C`_\|_gcov_dump(void)\*(C'\fR will cause the profile information
+collected at that point to be dumped to \fI.gcda\fR output files.
+Instrumented applications use a static destructor with priority 99
+to invoke the \f(CW\*(C`_\|_gcov_dump\*(C'\fR function. Thus \f(CW\*(C`_\|_gcov_dump\*(C'\fR
+is executed after all user defined static destructors,
+as well as handlers registered with \f(CW\*(C`atexit\*(C'\fR.
+If an executable loads a dynamic shared object via dlopen functionality,
+\&\fB\-Wl,\-\-dynamic\-list\-data\fR is needed to dump all profile data.
+.PP
+Profiling run-time library reports various errors related to profile
+manipulation and profile saving.  Errors are printed into standard error output
+or \fB\s-1GCOV_ERROR_FILE\s0\fR file, if environment variable is used.
+In order to terminate immediately after an errors occurs
+set \fB\s-1GCOV_EXIT_AT_ERROR\s0\fR environment variable.
+That can help users to find profile clashing which leads
+to a misleading profile.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), \fIgcc\fR\|(1) and the Info entry for \fIgcc\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1996\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being \*(L"\s-1GNU\s0 General Public License\*(R" and \*(L"Funding
+Free Software\*(R", the Front-Cover texts being (a) (see below), and with
+the Back-Cover Texts being (b) (see below).  A copy of the license is
+included in the \fIgfdl\fR\|(7) man page.
+.PP
+(a) The \s-1FSF\s0's Front-Cover Text is:
+.PP
+.Vb 1
+\&     A GNU Manual
+.Ve
+.PP
+(b) The \s-1FSF\s0's Back-Cover Text is:
+.PP
+.Vb 3
+\&     You have freedom to copy and modify this GNU Manual, like GNU
+\&     software.  Copies published by the Free Software Foundation raise
+\&     funds for GNU development.
+.Ve
diff --git a/share/man/man1/aarch64-elf-gdb-add-index.1 b/share/man/man1/aarch64-elf-gdb-add-index.1
new file mode 100644
index 0000000..3b0a19c
--- /dev/null
+++ b/share/man/man1/aarch64-elf-gdb-add-index.1
@@ -0,0 +1,193 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "GDB-ADD-INDEX 1"
+.TH GDB-ADD-INDEX 1 "2019-05-21" "gdb-8.2.50.20190202-git" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+gdb\-add\-index \- Add index files to speed up GDB
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+gdb-add-index \fIfilename\fR
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+When \s-1GDB\s0 finds a symbol file, it scans the symbols in the
+file in order to construct an internal symbol table.  This lets most
+\&\s-1GDB\s0 operations work quickly\*(--at the cost of a delay early on.
+For large programs, this delay can be quite lengthy, so \s-1GDB\s0
+provides a way to build an index, which speeds up startup.
+.PP
+To determine whether a file contains such an index, use the command
+\&\f(CW\*(C`readelf \-S filename\*(C'\fR: the index is stored in a section named
+\&\f(CW\*(C`.gdb_index\*(C'\fR.  The index file can only be produced on systems
+which use \s-1ELF\s0 binaries and \s-1DWARF\s0 debug information (i.e., sections
+named \f(CW\*(C`.debug_*\*(C'\fR).
+.PP
+\&\fBgdb-add-index\fR uses \s-1GDB\s0 and \fBobjdump\fR found
+in the \fB\s-1PATH\s0\fR environment variable.  If you want to use different
+versions of these programs, you can specify them through the
+\&\fB\s-1GDB\s0\fR and \fB\s-1OBJDUMP\s0\fR environment variables.
+.PP
+See more in
+the \s-1GDB\s0 manual in node \f(CW\*(C`Index Files\*(C'\fR
+\&\*(-- shell command \f(CW\*(C`info \-f gdb \-n "Index Files"\*(C'\fR.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+The full documentation for \s-1GDB\s0 is maintained as a Texinfo manual.
+If the \f(CW\*(C`info\*(C'\fR and \f(CW\*(C`gdb\*(C'\fR programs and \s-1GDB\s0's Texinfo
+documentation are properly installed at your site, the command
+.PP
+.Vb 1
+\&        info gdb
+.Ve
+.PP
+should give you access to the complete manual.
+.PP
+\&\fIUsing \s-1GDB: A\s0 Guide to the \s-1GNU\s0 Source-Level Debugger\fR,
+Richard M. Stallman and Roland H. Pesch, July 1991.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1988\-2018 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being \*(L"Free Software\*(R" and \*(L"Free Software Needs
+Free Documentation\*(R", with the Front-Cover Texts being \*(L"A \s-1GNU\s0 Manual,\*(R"
+and with the Back-Cover Texts as in (a) below.
+.PP
+(a) The \s-1FSF\s0's Back-Cover Text is: \*(L"You are free to copy and modify
+this \s-1GNU\s0 Manual.  Buying copies from \s-1GNU\s0 Press supports the \s-1FSF\s0 in
+developing \s-1GNU\s0 and promoting software freedom.\*(R"
diff --git a/share/man/man1/aarch64-elf-gdb.1 b/share/man/man1/aarch64-elf-gdb.1
new file mode 100644
index 0000000..80bcf39
--- /dev/null
+++ b/share/man/man1/aarch64-elf-gdb.1
@@ -0,0 +1,401 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "GDB 1"
+.TH GDB 1 "2019-05-21" "gdb-8.2.50.20190202-git" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+gdb \- The GNU Debugger
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+gdb [\fB\-help\fR] [\fB\-nh\fR] [\fB\-nx\fR] [\fB\-q\fR]
+[\fB\-batch\fR] [\fB\-cd=\fR\fIdir\fR] [\fB\-f\fR]
+[\fB\-b\fR\ \fIbps\fR]
+    [\fB\-tty=\fR\fIdev\fR] [\fB\-s\fR \fIsymfile\fR]
+[\fB\-e\fR\ \fIprog\fR] [\fB\-se\fR\ \fIprog\fR]
+[\fB\-c\fR\ \fIcore\fR] [\fB\-p\fR\ \fIprocID\fR]
+    [\fB\-x\fR\ \fIcmds\fR] [\fB\-d\fR\ \fIdir\fR]
+[\fIprog\fR|\fIprog\fR \fIprocID\fR|\fIprog\fR \fIcore\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The purpose of a debugger such as \s-1GDB\s0 is to allow you to see what is
+going on \*(L"inside\*(R" another program while it executes \*(-- or what another
+program was doing at the moment it crashed.
+.PP
+\&\s-1GDB\s0 can do four main kinds of things (plus other things in support of
+these) to help you catch bugs in the act:
+.IP "\(bu" 4
+Start your program, specifying anything that might affect its behavior.
+.IP "\(bu" 4
+Make your program stop on specified conditions.
+.IP "\(bu" 4
+Examine what has happened, when your program has stopped.
+.IP "\(bu" 4
+Change things in your program, so you can experiment with correcting the
+effects of one bug and go on to learn about another.
+.PP
+You can use \s-1GDB\s0 to debug programs written in C, C@t{++}, Fortran and
+Modula\-2.
+.PP
+\&\s-1GDB\s0 is invoked with the shell command \f(CW\*(C`gdb\*(C'\fR.  Once started, it reads
+commands from the terminal until you tell it to exit with the \s-1GDB\s0
+command \f(CW\*(C`quit\*(C'\fR.  You can get online help from \s-1GDB\s0 itself
+by using the command \f(CW\*(C`help\*(C'\fR.
+.PP
+You can run \f(CW\*(C`gdb\*(C'\fR with no arguments or options; but the most
+usual way to start \s-1GDB\s0 is with one argument or two, specifying an
+executable program as the argument:
+.PP
+.Vb 1
+\&        gdb program
+.Ve
+.PP
+You can also start with both an executable program and a core file specified:
+.PP
+.Vb 1
+\&        gdb program core
+.Ve
+.PP
+You can, instead, specify a process \s-1ID\s0 as a second argument, if you want
+to debug a running process:
+.PP
+.Vb 2
+\&        gdb program 1234
+\&        gdb \-p 1234
+.Ve
+.PP
+would attach \s-1GDB\s0 to process \f(CW1234\fR (unless you also have a file
+named \fI1234\fR; \s-1GDB\s0 does check for a core file first).
+With option \fB\-p\fR you can omit the \fIprogram\fR filename.
+.PP
+Here are some of the most frequently needed \s-1GDB\s0 commands:
+.IP "\fBbreak [\fR\fIfile\fR\fB:]\fR\fIfunction\fR" 4
+.IX Item "break [file:]function"
+Set a breakpoint at \fIfunction\fR (in \fIfile\fR).
+.IP "\fBrun [\fR\fIarglist\fR\fB]\fR" 4
+.IX Item "run [arglist]"
+Start your program (with \fIarglist\fR, if specified).
+.IP "\fBbt\fR" 4
+.IX Item "bt"
+Backtrace: display the program stack.
+.IP "\fBprint\fR \fIexpr\fR" 4
+.IX Item "print expr"
+Display the value of an expression.
+.IP "\fBc\fR" 4
+.IX Item "c"
+Continue running your program (after stopping, e.g. at a breakpoint).
+.IP "\fBnext\fR" 4
+.IX Item "next"
+Execute next program line (after stopping); step \fIover\fR any
+function calls in the line.
+.IP "\fBedit [\fR\fIfile\fR\fB:]\fR\fIfunction\fR" 4
+.IX Item "edit [file:]function"
+look at the program line where it is presently stopped.
+.IP "\fBlist [\fR\fIfile\fR\fB:]\fR\fIfunction\fR" 4
+.IX Item "list [file:]function"
+type the text of the program in the vicinity of where it is presently stopped.
+.IP "\fBstep\fR" 4
+.IX Item "step"
+Execute next program line (after stopping); step \fIinto\fR any
+function calls in the line.
+.IP "\fBhelp [\fR\fIname\fR\fB]\fR" 4
+.IX Item "help [name]"
+Show information about \s-1GDB\s0 command \fIname\fR, or general information
+about using \s-1GDB.\s0
+.IP "\fBquit\fR" 4
+.IX Item "quit"
+Exit from \s-1GDB.\s0
+.PP
+For full details on \s-1GDB,\s0
+see \fIUsing \s-1GDB: A\s0 Guide to the \s-1GNU\s0 Source-Level Debugger\fR,
+by Richard M. Stallman and Roland H. Pesch.  The same text is available online
+as the \f(CW\*(C`gdb\*(C'\fR entry in the \f(CW\*(C`info\*(C'\fR program.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+Any arguments other than options specify an executable
+file and core file (or process \s-1ID\s0); that is, the first argument
+encountered with no
+associated option flag is equivalent to a \fB\-se\fR option, and the second,
+if any, is equivalent to a \fB\-c\fR option if it's the name of a file.
+Many options have
+both long and short forms; both are shown here.  The long forms are also
+recognized if you truncate them, so long as enough of the option is
+present to be unambiguous.  (If you prefer, you can flag option
+arguments with \fB+\fR rather than \fB\-\fR, though we illustrate the
+more usual convention.)
+.PP
+All the options and command line arguments you give are processed
+in sequential order.  The order makes a difference when the \fB\-x\fR
+option is used.
+.IP "\fB\-help\fR" 4
+.IX Item "-help"
+.PD 0
+.IP "\fB\-h\fR" 4
+.IX Item "-h"
+.PD
+List all options, with brief explanations.
+.IP "\fB\-symbols=\fR\fIfile\fR" 4
+.IX Item "-symbols=file"
+.PD 0
+.IP "\fB\-s\fR \fIfile\fR" 4
+.IX Item "-s file"
+.PD
+Read symbol table from file \fIfile\fR.
+.IP "\fB\-write\fR" 4
+.IX Item "-write"
+Enable writing into executable and core files.
+.IP "\fB\-exec=\fR\fIfile\fR" 4
+.IX Item "-exec=file"
+.PD 0
+.IP "\fB\-e\fR \fIfile\fR" 4
+.IX Item "-e file"
+.PD
+Use file \fIfile\fR as the executable file to execute when
+appropriate, and for examining pure data in conjunction with a core
+dump.
+.IP "\fB\-se=\fR\fIfile\fR" 4
+.IX Item "-se=file"
+Read symbol table from file \fIfile\fR and use it as the executable
+file.
+.IP "\fB\-core=\fR\fIfile\fR" 4
+.IX Item "-core=file"
+.PD 0
+.IP "\fB\-c\fR \fIfile\fR" 4
+.IX Item "-c file"
+.PD
+Use file \fIfile\fR as a core dump to examine.
+.IP "\fB\-command=\fR\fIfile\fR" 4
+.IX Item "-command=file"
+.PD 0
+.IP "\fB\-x\fR \fIfile\fR" 4
+.IX Item "-x file"
+.PD
+Execute \s-1GDB\s0 commands from file \fIfile\fR.
+.IP "\fB\-ex\fR \fIcommand\fR" 4
+.IX Item "-ex command"
+Execute given \s-1GDB\s0 \fIcommand\fR.
+.IP "\fB\-directory=\fR\fIdirectory\fR" 4
+.IX Item "-directory=directory"
+.PD 0
+.IP "\fB\-d\fR \fIdirectory\fR" 4
+.IX Item "-d directory"
+.PD
+Add \fIdirectory\fR to the path to search for source files.
+.IP "\fB\-nh\fR" 4
+.IX Item "-nh"
+Do not execute commands from \fI~/.gdbinit\fR.
+.IP "\fB\-nx\fR" 4
+.IX Item "-nx"
+.PD 0
+.IP "\fB\-n\fR" 4
+.IX Item "-n"
+.PD
+Do not execute commands from any \fI.gdbinit\fR initialization files.
+.IP "\fB\-quiet\fR" 4
+.IX Item "-quiet"
+.PD 0
+.IP "\fB\-q\fR" 4
+.IX Item "-q"
+.PD
+\&\*(L"Quiet\*(R".  Do not print the introductory and copyright messages.  These
+messages are also suppressed in batch mode.
+.IP "\fB\-batch\fR" 4
+.IX Item "-batch"
+Run in batch mode.  Exit with status \f(CW0\fR after processing all the command
+files specified with \fB\-x\fR (and \fI.gdbinit\fR, if not inhibited).
+Exit with nonzero status if an error occurs in executing the \s-1GDB\s0
+commands in the command files.
+.Sp
+Batch mode may be useful for running \s-1GDB\s0 as a filter, for example to
+download and run a program on another computer; in order to make this
+more useful, the message
+.Sp
+.Vb 1
+\&        Program exited normally.
+.Ve
+.Sp
+(which is ordinarily issued whenever a program running under \s-1GDB\s0 control
+terminates) is not issued when running in batch mode.
+.IP "\fB\-cd=\fR\fIdirectory\fR" 4
+.IX Item "-cd=directory"
+Run \s-1GDB\s0 using \fIdirectory\fR as its working directory,
+instead of the current directory.
+.IP "\fB\-fullname\fR" 4
+.IX Item "-fullname"
+.PD 0
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+.PD
+Emacs sets this option when it runs \s-1GDB\s0 as a subprocess.  It tells
+\&\s-1GDB\s0 to output the full file name and line number in a standard,
+recognizable fashion each time a stack frame is displayed (which
+includes each time the program stops).  This recognizable format looks
+like two \fB\e032\fR characters, followed by the file name, line number
+and character position separated by colons, and a newline.  The
+Emacs-to-GDB interface program uses the two \fB\e032\fR
+characters as a signal to display the source code for the frame.
+.IP "\fB\-b\fR \fIbps\fR" 4
+.IX Item "-b bps"
+Set the line speed (baud rate or bits per second) of any serial
+interface used by \s-1GDB\s0 for remote debugging.
+.IP "\fB\-tty=\fR\fIdevice\fR" 4
+.IX Item "-tty=device"
+Run using \fIdevice\fR for your program's standard input and output.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+The full documentation for \s-1GDB\s0 is maintained as a Texinfo manual.
+If the \f(CW\*(C`info\*(C'\fR and \f(CW\*(C`gdb\*(C'\fR programs and \s-1GDB\s0's Texinfo
+documentation are properly installed at your site, the command
+.PP
+.Vb 1
+\&        info gdb
+.Ve
+.PP
+should give you access to the complete manual.
+.PP
+\&\fIUsing \s-1GDB: A\s0 Guide to the \s-1GNU\s0 Source-Level Debugger\fR,
+Richard M. Stallman and Roland H. Pesch, July 1991.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1988\-2018 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being \*(L"Free Software\*(R" and \*(L"Free Software Needs
+Free Documentation\*(R", with the Front-Cover Texts being \*(L"A \s-1GNU\s0 Manual,\*(R"
+and with the Back-Cover Texts as in (a) below.
+.PP
+(a) The \s-1FSF\s0's Back-Cover Text is: \*(L"You are free to copy and modify
+this \s-1GNU\s0 Manual.  Buying copies from \s-1GNU\s0 Press supports the \s-1FSF\s0 in
+developing \s-1GNU\s0 and promoting software freedom.\*(R"
diff --git a/share/man/man1/aarch64-elf-gdbserver.1 b/share/man/man1/aarch64-elf-gdbserver.1
new file mode 100644
index 0000000..c429d45
--- /dev/null
+++ b/share/man/man1/aarch64-elf-gdbserver.1
@@ -0,0 +1,373 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "GDBSERVER 1"
+.TH GDBSERVER 1 "2019-05-21" "gdb-8.2.50.20190202-git" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+gdbserver \- Remote Server for the GNU Debugger
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+gdbserver \fIcomm\fR \fIprog\fR [\fIargs\fR...]
+.PP
+gdbserver \-\-attach \fIcomm\fR \fIpid\fR
+.PP
+gdbserver \-\-multi \fIcomm\fR
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBgdbserver\fR is a program that allows you to run \s-1GDB\s0 on a different machine
+than the one which is running the program being debugged.
+.PP
+Usage (server (target) side):
+.PP
+First, you need to have a copy of the program you want to debug put onto
+the target system.  The program can be stripped to save space if needed, as
+\&\fBgdbserver\fR doesn't care about symbols.  All symbol handling is taken care of by
+the \s-1GDB\s0 running on the host system.
+.PP
+To use the server, you log on to the target system, and run the \fBgdbserver\fR
+program.  You must tell it (a) how to communicate with \s-1GDB,\s0 (b) the name of
+your program, and (c) its arguments.  The general syntax is:
+.PP
+.Vb 1
+\&        target> gdbserver <comm> <program> [<args> ...]
+.Ve
+.PP
+For example, using a serial port, you might say:
+.PP
+.Vb 1
+\&        target> gdbserver /dev/com1 emacs foo.txt
+.Ve
+.PP
+This tells \fBgdbserver\fR to debug emacs with an argument of foo.txt, and
+to communicate with \s-1GDB\s0 via \fI/dev/com1\fR.  \fBgdbserver\fR now
+waits patiently for the host \s-1GDB\s0 to communicate with it.
+.PP
+To use a \s-1TCP\s0 connection, you could say:
+.PP
+.Vb 1
+\&        target> gdbserver host:2345 emacs foo.txt
+.Ve
+.PP
+This says pretty much the same thing as the last example, except that we are
+going to communicate with the \f(CW\*(C`host\*(C'\fR \s-1GDB\s0 via \s-1TCP.\s0  The \f(CW\*(C`host:2345\*(C'\fR argument means
+that we are expecting to see a \s-1TCP\s0 connection from \f(CW\*(C`host\*(C'\fR to local \s-1TCP\s0 port
+2345.  (Currently, the \f(CW\*(C`host\*(C'\fR part is ignored.)  You can choose any number you
+want for the port number as long as it does not conflict with any existing \s-1TCP\s0
+ports on the target system.  This same port number must be used in the host
+GDBs \f(CW\*(C`target remote\*(C'\fR command, which will be described shortly.  Note that if
+you chose a port number that conflicts with another service, \fBgdbserver\fR will
+print an error message and exit.
+.PP
+\&\fBgdbserver\fR can also attach to running programs.
+This is accomplished via the \fB\-\-attach\fR argument.  The syntax is:
+.PP
+.Vb 1
+\&        target> gdbserver \-\-attach <comm> <pid>
+.Ve
+.PP
+\&\fIpid\fR is the process \s-1ID\s0 of a currently running process.  It isn't
+necessary to point \fBgdbserver\fR at a binary for the running process.
+.PP
+To start \f(CW\*(C`gdbserver\*(C'\fR without supplying an initial command to run
+or process \s-1ID\s0 to attach, use the \fB\-\-multi\fR command line option.
+In such case you should connect using \f(CW\*(C`target extended\-remote\*(C'\fR to start
+the program you want to debug.
+.PP
+.Vb 1
+\&        target> gdbserver \-\-multi <comm>
+.Ve
+.PP
+Usage (host side):
+.PP
+You need an unstripped copy of the target program on your host system, since
+\&\s-1GDB\s0 needs to examine its symbol tables and such.  Start up \s-1GDB\s0 as you normally
+would, with the target program as the first argument.  (You may need to use the
+\&\fB\-\-baud\fR option if the serial line is running at anything except 9600 baud.)
+That is \f(CW\*(C`gdb TARGET\-PROG\*(C'\fR, or \f(CW\*(C`gdb \-\-baud BAUD TARGET\-PROG\*(C'\fR.  After that, the only
+new command you need to know about is \f(CW\*(C`target remote\*(C'\fR
+(or \f(CW\*(C`target extended\-remote\*(C'\fR).  Its argument is either
+a device name (usually a serial device, like \fI/dev/ttyb\fR), or a \f(CW\*(C`HOST:PORT\*(C'\fR
+descriptor.  For example:
+.PP
+.Vb 1
+\&        (gdb) target remote /dev/ttyb
+.Ve
+.PP
+communicates with the server via serial line \fI/dev/ttyb\fR, and:
+.PP
+.Vb 1
+\&        (gdb) target remote the\-target:2345
+.Ve
+.PP
+communicates via a \s-1TCP\s0 connection to port 2345 on host `the\-target', where
+you previously started up \fBgdbserver\fR with the same port number.  Note that for
+\&\s-1TCP\s0 connections, you must start up \fBgdbserver\fR prior to using the `target remote'
+command, otherwise you may get an error that looks something like
+`Connection refused'.
+.PP
+\&\fBgdbserver\fR can also debug multiple inferiors at once,
+described in
+the \s-1GDB\s0 manual in node \f(CW\*(C`Inferiors and Programs\*(C'\fR
+\&\*(-- shell command \f(CW\*(C`info \-f gdb \-n \*(AqInferiors and Programs\*(Aq\*(C'\fR.
+In such case use the \f(CW\*(C`extended\-remote\*(C'\fR \s-1GDB\s0 command variant:
+.PP
+.Vb 1
+\&        (gdb) target extended\-remote the\-target:2345
+.Ve
+.PP
+The \fBgdbserver\fR option \fB\-\-multi\fR may or may not be used in such
+case.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+There are three different modes for invoking \fBgdbserver\fR:
+.IP "\(bu" 4
+Debug a specific program specified by its program name:
+.Sp
+.Vb 1
+\&        gdbserver <comm> <prog> [<args>...]
+.Ve
+.Sp
+The \fIcomm\fR parameter specifies how should the server communicate
+with \s-1GDB\s0; it is either a device name (to use a serial line),
+a \s-1TCP\s0 port number (\f(CW\*(C`:1234\*(C'\fR), or \f(CW\*(C`\-\*(C'\fR or \f(CW\*(C`stdio\*(C'\fR to use
+stdin/stdout of \f(CW\*(C`gdbserver\*(C'\fR.  Specify the name of the program to
+debug in \fIprog\fR.  Any remaining arguments will be passed to the
+program verbatim.  When the program exits, \s-1GDB\s0 will close the
+connection, and \f(CW\*(C`gdbserver\*(C'\fR will exit.
+.IP "\(bu" 4
+Debug a specific program by specifying the process \s-1ID\s0 of a running
+program:
+.Sp
+.Vb 1
+\&        gdbserver \-\-attach <comm> <pid>
+.Ve
+.Sp
+The \fIcomm\fR parameter is as described above.  Supply the process \s-1ID\s0
+of a running program in \fIpid\fR; \s-1GDB\s0 will do everything
+else.  Like with the previous mode, when the process \fIpid\fR exits,
+\&\s-1GDB\s0 will close the connection, and \f(CW\*(C`gdbserver\*(C'\fR will exit.
+.IP "\(bu" 4
+Multi-process mode \*(-- debug more than one program/process:
+.Sp
+.Vb 1
+\&        gdbserver \-\-multi <comm>
+.Ve
+.Sp
+In this mode, \s-1GDB\s0 can instruct \fBgdbserver\fR which
+command(s) to run.  Unlike the other 2 modes, \s-1GDB\s0 will not
+close the connection when a process being debugged exits, so you can
+debug several processes in the same session.
+.PP
+In each of the modes you may specify these options:
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+List all options, with brief explanations.
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+This option causes \fBgdbserver\fR to print its version number and exit.
+.IP "\fB\-\-attach\fR" 4
+.IX Item "--attach"
+\&\fBgdbserver\fR will attach to a running program.  The syntax is:
+.Sp
+.Vb 1
+\&        target> gdbserver \-\-attach <comm> <pid>
+.Ve
+.Sp
+\&\fIpid\fR is the process \s-1ID\s0 of a currently running process.  It isn't
+necessary to point \fBgdbserver\fR at a binary for the running process.
+.IP "\fB\-\-multi\fR" 4
+.IX Item "--multi"
+To start \f(CW\*(C`gdbserver\*(C'\fR without supplying an initial command to run
+or process \s-1ID\s0 to attach, use this command line option.
+Then you can connect using \f(CW\*(C`target extended\-remote\*(C'\fR and start
+the program you want to debug.  The syntax is:
+.Sp
+.Vb 1
+\&        target> gdbserver \-\-multi <comm>
+.Ve
+.IP "\fB\-\-debug\fR" 4
+.IX Item "--debug"
+Instruct \f(CW\*(C`gdbserver\*(C'\fR to display extra status information about the debugging
+process.
+This option is intended for \f(CW\*(C`gdbserver\*(C'\fR development and for bug reports to
+the developers.
+.IP "\fB\-\-remote\-debug\fR" 4
+.IX Item "--remote-debug"
+Instruct \f(CW\*(C`gdbserver\*(C'\fR to display remote protocol debug output.
+This option is intended for \f(CW\*(C`gdbserver\*(C'\fR development and for bug reports to
+the developers.
+.IP "\fB\-\-debug\-format=option1\fR[\fB,option2,...\fR]" 4
+.IX Item "--debug-format=option1[,option2,...]"
+Instruct \f(CW\*(C`gdbserver\*(C'\fR to include extra information in each line
+of debugging output.
+.IP "\fB\-\-wrapper\fR" 4
+.IX Item "--wrapper"
+Specify a wrapper to launch programs
+for debugging.  The option should be followed by the name of the
+wrapper, then any command-line arguments to pass to the wrapper, then
+\&\f(CW\*(C`\-\-\*(C'\fR indicating the end of the wrapper arguments.
+.IP "\fB\-\-once\fR" 4
+.IX Item "--once"
+By default, \fBgdbserver\fR keeps the listening \s-1TCP\s0 port open, so that
+additional connections are possible.  However, if you start \f(CW\*(C`gdbserver\*(C'\fR
+with the \fB\-\-once\fR option, it will stop listening for any further
+connection attempts after connecting to the first \s-1GDB\s0 session.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+The full documentation for \s-1GDB\s0 is maintained as a Texinfo manual.
+If the \f(CW\*(C`info\*(C'\fR and \f(CW\*(C`gdb\*(C'\fR programs and \s-1GDB\s0's Texinfo
+documentation are properly installed at your site, the command
+.PP
+.Vb 1
+\&        info gdb
+.Ve
+.PP
+should give you access to the complete manual.
+.PP
+\&\fIUsing \s-1GDB: A\s0 Guide to the \s-1GNU\s0 Source-Level Debugger\fR,
+Richard M. Stallman and Roland H. Pesch, July 1991.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1988\-2018 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being \*(L"Free Software\*(R" and \*(L"Free Software Needs
+Free Documentation\*(R", with the Front-Cover Texts being \*(L"A \s-1GNU\s0 Manual,\*(R"
+and with the Back-Cover Texts as in (a) below.
+.PP
+(a) The \s-1FSF\s0's Back-Cover Text is: \*(L"You are free to copy and modify
+this \s-1GNU\s0 Manual.  Buying copies from \s-1GNU\s0 Press supports the \s-1FSF\s0 in
+developing \s-1GNU\s0 and promoting software freedom.\*(R"
diff --git a/share/man/man1/aarch64-elf-gprof.1 b/share/man/man1/aarch64-elf-gprof.1
new file mode 100644
index 0000000..b0c7673
--- /dev/null
+++ b/share/man/man1/aarch64-elf-gprof.1
@@ -0,0 +1,768 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "GPROF 1"
+.TH GPROF 1 "2019-05-21" "binutils-2.32" "GNU"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+gprof \- display call graph profile data
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+gprof [ \-[abcDhilLrsTvwxyz] ] [ \-[ACeEfFJnNOpPqQZ][\fIname\fR] ]
+ [ \-I \fIdirs\fR ] [ \-d[\fInum\fR] ] [ \-k \fIfrom/to\fR ]
+ [ \-m \fImin-count\fR ] [ \-R \fImap_file\fR ] [ \-t \fItable-length\fR ]
+ [ \-\-[no\-]annotated\-source[=\fIname\fR] ]
+ [ \-\-[no\-]exec\-counts[=\fIname\fR] ]
+ [ \-\-[no\-]flat\-profile[=\fIname\fR] ] [ \-\-[no\-]graph[=\fIname\fR] ]
+ [ \-\-[no\-]time=\fIname\fR] [ \-\-all\-lines ] [ \-\-brief ]
+ [ \-\-debug[=\fIlevel\fR] ] [ \-\-function\-ordering ]
+ [ \-\-file\-ordering \fImap_file\fR ] [ \-\-directory\-path=\fIdirs\fR ]
+ [ \-\-display\-unused\-functions ] [ \-\-file\-format=\fIname\fR ]
+ [ \-\-file\-info ] [ \-\-help ] [ \-\-line ] [ \-\-inline\-file\-names ]
+ [ \-\-min\-count=\fIn\fR ] [ \-\-no\-static ] [ \-\-print\-path ]
+ [ \-\-separate\-files ] [ \-\-static\-call\-graph ] [ \-\-sum ]
+ [ \-\-table\-length=\fIlen\fR ] [ \-\-traditional ] [ \-\-version ]
+ [ \-\-width=\fIn\fR ] [ \-\-ignore\-non\-functions ]
+ [ \-\-demangle[=\fI\s-1STYLE\s0\fR] ] [ \-\-no\-demangle ]
+ [\-\-external\-symbol\-table=name]
+ [ \fIimage-file\fR ] [ \fIprofile-file\fR ... ]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\f(CW\*(C`gprof\*(C'\fR produces an execution profile of C, Pascal, or Fortran77
+programs.  The effect of called routines is incorporated in the profile
+of each caller.  The profile data is taken from the call graph profile file
+(\fIgmon.out\fR default) which is created by programs
+that are compiled with the \fB\-pg\fR option of
+\&\f(CW\*(C`cc\*(C'\fR, \f(CW\*(C`pc\*(C'\fR, and \f(CW\*(C`f77\*(C'\fR.
+The \fB\-pg\fR option also links in versions of the library routines
+that are compiled for profiling.  \f(CW\*(C`Gprof\*(C'\fR reads the given object
+file (the default is \f(CW\*(C`a.out\*(C'\fR) and establishes the relation between
+its symbol table and the call graph profile from \fIgmon.out\fR.
+If more than one profile file is specified, the \f(CW\*(C`gprof\*(C'\fR
+output shows the sum of the profile information in the given profile files.
+.PP
+\&\f(CW\*(C`Gprof\*(C'\fR calculates the amount of time spent in each routine.
+Next, these times are propagated along the edges of the call graph.
+Cycles are discovered, and calls into a cycle are made to share the time
+of the cycle.
+.PP
+Several forms of output are available from the analysis.
+.PP
+The \fIflat profile\fR shows how much time your program spent in each function,
+and how many times that function was called.  If you simply want to know
+which functions burn most of the cycles, it is stated concisely here.
+.PP
+The \fIcall graph\fR shows, for each function, which functions called it, which
+other functions it called, and how many times.  There is also an estimate
+of how much time was spent in the subroutines of each function.  This can
+suggest places where you might try to eliminate function calls that use a
+lot of time.
+.PP
+The \fIannotated source\fR listing is a copy of the program's
+source code, labeled with the number of times each line of the
+program was executed.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+These options specify which of several output formats
+\&\f(CW\*(C`gprof\*(C'\fR should produce.
+.PP
+Many of these options take an optional \fIsymspec\fR to specify
+functions to be included or excluded.  These options can be
+specified multiple times, with different symspecs, to include
+or exclude sets of symbols.
+.PP
+Specifying any of these options overrides the default (\fB\-p \-q\fR),
+which prints a flat profile and call graph analysis
+for all functions.
+.ie n .IP """\-A[\fIsymspec\fP]""" 4
+.el .IP "\f(CW\-A[\f(CIsymspec\f(CW]\fR" 4
+.IX Item "-A[symspec]"
+.PD 0
+.ie n .IP """\-\-annotated\-source[=\fIsymspec\fP]""" 4
+.el .IP "\f(CW\-\-annotated\-source[=\f(CIsymspec\f(CW]\fR" 4
+.IX Item "--annotated-source[=symspec]"
+.PD
+The \fB\-A\fR option causes \f(CW\*(C`gprof\*(C'\fR to print annotated source code.
+If \fIsymspec\fR is specified, print output only for matching symbols.
+.ie n .IP """\-b""" 4
+.el .IP "\f(CW\-b\fR" 4
+.IX Item "-b"
+.PD 0
+.ie n .IP """\-\-brief""" 4
+.el .IP "\f(CW\-\-brief\fR" 4
+.IX Item "--brief"
+.PD
+If the \fB\-b\fR option is given, \f(CW\*(C`gprof\*(C'\fR doesn't print the
+verbose blurbs that try to explain the meaning of all of the fields in
+the tables.  This is useful if you intend to print out the output, or
+are tired of seeing the blurbs.
+.ie n .IP """\-C[\fIsymspec\fP]""" 4
+.el .IP "\f(CW\-C[\f(CIsymspec\f(CW]\fR" 4
+.IX Item "-C[symspec]"
+.PD 0
+.ie n .IP """\-\-exec\-counts[=\fIsymspec\fP]""" 4
+.el .IP "\f(CW\-\-exec\-counts[=\f(CIsymspec\f(CW]\fR" 4
+.IX Item "--exec-counts[=symspec]"
+.PD
+The \fB\-C\fR option causes \f(CW\*(C`gprof\*(C'\fR to
+print a tally of functions and the number of times each was called.
+If \fIsymspec\fR is specified, print tally only for matching symbols.
+.Sp
+If the profile data file contains basic-block count records, specifying
+the \fB\-l\fR option, along with \fB\-C\fR, will cause basic-block
+execution counts to be tallied and displayed.
+.ie n .IP """\-i""" 4
+.el .IP "\f(CW\-i\fR" 4
+.IX Item "-i"
+.PD 0
+.ie n .IP """\-\-file\-info""" 4
+.el .IP "\f(CW\-\-file\-info\fR" 4
+.IX Item "--file-info"
+.PD
+The \fB\-i\fR option causes \f(CW\*(C`gprof\*(C'\fR to display summary information
+about the profile data file(s) and then exit.  The number of histogram,
+call graph, and basic-block count records is displayed.
+.ie n .IP """\-I \fIdirs\fP""" 4
+.el .IP "\f(CW\-I \f(CIdirs\f(CW\fR" 4
+.IX Item "-I dirs"
+.PD 0
+.ie n .IP """\-\-directory\-path=\fIdirs\fP""" 4
+.el .IP "\f(CW\-\-directory\-path=\f(CIdirs\f(CW\fR" 4
+.IX Item "--directory-path=dirs"
+.PD
+The \fB\-I\fR option specifies a list of search directories in
+which to find source files.  Environment variable \fI\s-1GPROF_PATH\s0\fR
+can also be used to convey this information.
+Used mostly for annotated source output.
+.ie n .IP """\-J[\fIsymspec\fP]""" 4
+.el .IP "\f(CW\-J[\f(CIsymspec\f(CW]\fR" 4
+.IX Item "-J[symspec]"
+.PD 0
+.ie n .IP """\-\-no\-annotated\-source[=\fIsymspec\fP]""" 4
+.el .IP "\f(CW\-\-no\-annotated\-source[=\f(CIsymspec\f(CW]\fR" 4
+.IX Item "--no-annotated-source[=symspec]"
+.PD
+The \fB\-J\fR option causes \f(CW\*(C`gprof\*(C'\fR not to
+print annotated source code.
+If \fIsymspec\fR is specified, \f(CW\*(C`gprof\*(C'\fR prints annotated source,
+but excludes matching symbols.
+.ie n .IP """\-L""" 4
+.el .IP "\f(CW\-L\fR" 4
+.IX Item "-L"
+.PD 0
+.ie n .IP """\-\-print\-path""" 4
+.el .IP "\f(CW\-\-print\-path\fR" 4
+.IX Item "--print-path"
+.PD
+Normally, source filenames are printed with the path
+component suppressed.  The \fB\-L\fR option causes \f(CW\*(C`gprof\*(C'\fR
+to print the full pathname of
+source filenames, which is determined
+from symbolic debugging information in the image file
+and is relative to the directory in which the compiler
+was invoked.
+.ie n .IP """\-p[\fIsymspec\fP]""" 4
+.el .IP "\f(CW\-p[\f(CIsymspec\f(CW]\fR" 4
+.IX Item "-p[symspec]"
+.PD 0
+.ie n .IP """\-\-flat\-profile[=\fIsymspec\fP]""" 4
+.el .IP "\f(CW\-\-flat\-profile[=\f(CIsymspec\f(CW]\fR" 4
+.IX Item "--flat-profile[=symspec]"
+.PD
+The \fB\-p\fR option causes \f(CW\*(C`gprof\*(C'\fR to print a flat profile.
+If \fIsymspec\fR is specified, print flat profile only for matching symbols.
+.ie n .IP """\-P[\fIsymspec\fP]""" 4
+.el .IP "\f(CW\-P[\f(CIsymspec\f(CW]\fR" 4
+.IX Item "-P[symspec]"
+.PD 0
+.ie n .IP """\-\-no\-flat\-profile[=\fIsymspec\fP]""" 4
+.el .IP "\f(CW\-\-no\-flat\-profile[=\f(CIsymspec\f(CW]\fR" 4
+.IX Item "--no-flat-profile[=symspec]"
+.PD
+The \fB\-P\fR option causes \f(CW\*(C`gprof\*(C'\fR to suppress printing a flat profile.
+If \fIsymspec\fR is specified, \f(CW\*(C`gprof\*(C'\fR prints a flat profile,
+but excludes matching symbols.
+.ie n .IP """\-q[\fIsymspec\fP]""" 4
+.el .IP "\f(CW\-q[\f(CIsymspec\f(CW]\fR" 4
+.IX Item "-q[symspec]"
+.PD 0
+.ie n .IP """\-\-graph[=\fIsymspec\fP]""" 4
+.el .IP "\f(CW\-\-graph[=\f(CIsymspec\f(CW]\fR" 4
+.IX Item "--graph[=symspec]"
+.PD
+The \fB\-q\fR option causes \f(CW\*(C`gprof\*(C'\fR to print the call graph analysis.
+If \fIsymspec\fR is specified, print call graph only for matching symbols
+and their children.
+.ie n .IP """\-Q[\fIsymspec\fP]""" 4
+.el .IP "\f(CW\-Q[\f(CIsymspec\f(CW]\fR" 4
+.IX Item "-Q[symspec]"
+.PD 0
+.ie n .IP """\-\-no\-graph[=\fIsymspec\fP]""" 4
+.el .IP "\f(CW\-\-no\-graph[=\f(CIsymspec\f(CW]\fR" 4
+.IX Item "--no-graph[=symspec]"
+.PD
+The \fB\-Q\fR option causes \f(CW\*(C`gprof\*(C'\fR to suppress printing the
+call graph.
+If \fIsymspec\fR is specified, \f(CW\*(C`gprof\*(C'\fR prints a call graph,
+but excludes matching symbols.
+.ie n .IP """\-t""" 4
+.el .IP "\f(CW\-t\fR" 4
+.IX Item "-t"
+.PD 0
+.ie n .IP """\-\-table\-length=\fInum\fP""" 4
+.el .IP "\f(CW\-\-table\-length=\f(CInum\f(CW\fR" 4
+.IX Item "--table-length=num"
+.PD
+The \fB\-t\fR option causes the \fInum\fR most active source lines in
+each source file to be listed when source annotation is enabled.  The
+default is 10.
+.ie n .IP """\-y""" 4
+.el .IP "\f(CW\-y\fR" 4
+.IX Item "-y"
+.PD 0
+.ie n .IP """\-\-separate\-files""" 4
+.el .IP "\f(CW\-\-separate\-files\fR" 4
+.IX Item "--separate-files"
+.PD
+This option affects annotated source output only.
+Normally, \f(CW\*(C`gprof\*(C'\fR prints annotated source files
+to standard-output.  If this option is specified,
+annotated source for a file named \fIpath/\fIfilename\fI\fR
+is generated in the file \fI\fIfilename\fI\-ann\fR.  If the underlying
+file system would truncate \fI\fIfilename\fI\-ann\fR so that it
+overwrites the original \fI\fIfilename\fI\fR, \f(CW\*(C`gprof\*(C'\fR generates
+annotated source in the file \fI\fIfilename\fI.ann\fR instead (if the
+original file name has an extension, that extension is \fIreplaced\fR
+with \fI.ann\fR).
+.ie n .IP """\-Z[\fIsymspec\fP]""" 4
+.el .IP "\f(CW\-Z[\f(CIsymspec\f(CW]\fR" 4
+.IX Item "-Z[symspec]"
+.PD 0
+.ie n .IP """\-\-no\-exec\-counts[=\fIsymspec\fP]""" 4
+.el .IP "\f(CW\-\-no\-exec\-counts[=\f(CIsymspec\f(CW]\fR" 4
+.IX Item "--no-exec-counts[=symspec]"
+.PD
+The \fB\-Z\fR option causes \f(CW\*(C`gprof\*(C'\fR not to
+print a tally of functions and the number of times each was called.
+If \fIsymspec\fR is specified, print tally, but exclude matching symbols.
+.ie n .IP """\-r""" 4
+.el .IP "\f(CW\-r\fR" 4
+.IX Item "-r"
+.PD 0
+.ie n .IP """\-\-function\-ordering""" 4
+.el .IP "\f(CW\-\-function\-ordering\fR" 4
+.IX Item "--function-ordering"
+.PD
+The \fB\-\-function\-ordering\fR option causes \f(CW\*(C`gprof\*(C'\fR to print a
+suggested function ordering for the program based on profiling data.
+This option suggests an ordering which may improve paging, tlb and
+cache behavior for the program on systems which support arbitrary
+ordering of functions in an executable.
+.Sp
+The exact details of how to force the linker to place functions
+in a particular order is system dependent and out of the scope of this
+manual.
+.ie n .IP """\-R \fImap_file\fP""" 4
+.el .IP "\f(CW\-R \f(CImap_file\f(CW\fR" 4
+.IX Item "-R map_file"
+.PD 0
+.ie n .IP """\-\-file\-ordering \fImap_file\fP""" 4
+.el .IP "\f(CW\-\-file\-ordering \f(CImap_file\f(CW\fR" 4
+.IX Item "--file-ordering map_file"
+.PD
+The \fB\-\-file\-ordering\fR option causes \f(CW\*(C`gprof\*(C'\fR to print a
+suggested .o link line ordering for the program based on profiling data.
+This option suggests an ordering which may improve paging, tlb and
+cache behavior for the program on systems which do not support arbitrary
+ordering of functions in an executable.
+.Sp
+Use of the \fB\-a\fR argument is highly recommended with this option.
+.Sp
+The \fImap_file\fR argument is a pathname to a file which provides
+function name to object file mappings.  The format of the file is similar to
+the output of the program \f(CW\*(C`nm\*(C'\fR.
+.Sp
+.Vb 8
+\&        c\-parse.o:00000000 T yyparse
+\&        c\-parse.o:00000004 C yyerrflag
+\&        c\-lang.o:00000000 T maybe_objc_method_name
+\&        c\-lang.o:00000000 T print_lang_statistics
+\&        c\-lang.o:00000000 T recognize_objc_keyword
+\&        c\-decl.o:00000000 T print_lang_identifier
+\&        c\-decl.o:00000000 T print_lang_type
+\&        ...
+.Ve
+.Sp
+To create a \fImap_file\fR with \s-1GNU\s0 \f(CW\*(C`nm\*(C'\fR, type a command like
+\&\f(CW\*(C`nm \-\-extern\-only \-\-defined\-only \-v \-\-print\-file\-name program\-name\*(C'\fR.
+.ie n .IP """\-T""" 4
+.el .IP "\f(CW\-T\fR" 4
+.IX Item "-T"
+.PD 0
+.ie n .IP """\-\-traditional""" 4
+.el .IP "\f(CW\-\-traditional\fR" 4
+.IX Item "--traditional"
+.PD
+The \fB\-T\fR option causes \f(CW\*(C`gprof\*(C'\fR to print its output in
+\&\*(L"traditional\*(R" \s-1BSD\s0 style.
+.ie n .IP """\-w \fIwidth\fP""" 4
+.el .IP "\f(CW\-w \f(CIwidth\f(CW\fR" 4
+.IX Item "-w width"
+.PD 0
+.ie n .IP """\-\-width=\fIwidth\fP""" 4
+.el .IP "\f(CW\-\-width=\f(CIwidth\f(CW\fR" 4
+.IX Item "--width=width"
+.PD
+Sets width of output lines to \fIwidth\fR.
+Currently only used when printing the function index at the bottom
+of the call graph.
+.ie n .IP """\-x""" 4
+.el .IP "\f(CW\-x\fR" 4
+.IX Item "-x"
+.PD 0
+.ie n .IP """\-\-all\-lines""" 4
+.el .IP "\f(CW\-\-all\-lines\fR" 4
+.IX Item "--all-lines"
+.PD
+This option affects annotated source output only.
+By default, only the lines at the beginning of a basic-block
+are annotated.  If this option is specified, every line in
+a basic-block is annotated by repeating the annotation for the
+first line.  This behavior is similar to \f(CW\*(C`tcov\*(C'\fR's \fB\-a\fR.
+.ie n .IP """\-\-demangle[=\fIstyle\fP]""" 4
+.el .IP "\f(CW\-\-demangle[=\f(CIstyle\f(CW]\fR" 4
+.IX Item "--demangle[=style]"
+.PD 0
+.ie n .IP """\-\-no\-demangle""" 4
+.el .IP "\f(CW\-\-no\-demangle\fR" 4
+.IX Item "--no-demangle"
+.PD
+These options control whether \*(C+ symbol names should be demangled when
+printing output.  The default is to demangle symbols.  The
+\&\f(CW\*(C`\-\-no\-demangle\*(C'\fR option may be used to turn off demangling. Different
+compilers have different mangling styles.  The optional demangling style
+argument can be used to choose an appropriate demangling style for your
+compiler.
+.SS "Analysis Options"
+.IX Subsection "Analysis Options"
+.ie n .IP """\-a""" 4
+.el .IP "\f(CW\-a\fR" 4
+.IX Item "-a"
+.PD 0
+.ie n .IP """\-\-no\-static""" 4
+.el .IP "\f(CW\-\-no\-static\fR" 4
+.IX Item "--no-static"
+.PD
+The \fB\-a\fR option causes \f(CW\*(C`gprof\*(C'\fR to suppress the printing of
+statically declared (private) functions.  (These are functions whose
+names are not listed as global, and which are not visible outside the
+file/function/block where they were defined.)  Time spent in these
+functions, calls to/from them, etc., will all be attributed to the
+function that was loaded directly before it in the executable file.
+This option affects both the flat profile and the call graph.
+.ie n .IP """\-c""" 4
+.el .IP "\f(CW\-c\fR" 4
+.IX Item "-c"
+.PD 0
+.ie n .IP """\-\-static\-call\-graph""" 4
+.el .IP "\f(CW\-\-static\-call\-graph\fR" 4
+.IX Item "--static-call-graph"
+.PD
+The \fB\-c\fR option causes the call graph of the program to be
+augmented by a heuristic which examines the text space of the object
+file and identifies function calls in the binary machine code.
+Since normal call graph records are only generated when functions are
+entered, this option identifies children that could have been called,
+but never were.  Calls to functions that were not compiled with
+profiling enabled are also identified, but only if symbol table
+entries are present for them.
+Calls to dynamic library routines are typically \fInot\fR found
+by this option.
+Parents or children identified via this heuristic
+are indicated in the call graph with call counts of \fB0\fR.
+.ie n .IP """\-D""" 4
+.el .IP "\f(CW\-D\fR" 4
+.IX Item "-D"
+.PD 0
+.ie n .IP """\-\-ignore\-non\-functions""" 4
+.el .IP "\f(CW\-\-ignore\-non\-functions\fR" 4
+.IX Item "--ignore-non-functions"
+.PD
+The \fB\-D\fR option causes \f(CW\*(C`gprof\*(C'\fR to ignore symbols which
+are not known to be functions.  This option will give more accurate
+profile data on systems where it is supported (Solaris and \s-1HPUX\s0 for
+example).
+.ie n .IP """\-k \fIfrom\fP/\fIto\fP""" 4
+.el .IP "\f(CW\-k \f(CIfrom\f(CW/\f(CIto\f(CW\fR" 4
+.IX Item "-k from/to"
+The \fB\-k\fR option allows you to delete from the call graph any arcs from
+symbols matching symspec \fIfrom\fR to those matching symspec \fIto\fR.
+.ie n .IP """\-l""" 4
+.el .IP "\f(CW\-l\fR" 4
+.IX Item "-l"
+.PD 0
+.ie n .IP """\-\-line""" 4
+.el .IP "\f(CW\-\-line\fR" 4
+.IX Item "--line"
+.PD
+The \fB\-l\fR option enables line-by-line profiling, which causes
+histogram hits to be charged to individual source code lines,
+instead of functions.  This feature only works with programs compiled
+by older versions of the \f(CW\*(C`gcc\*(C'\fR compiler.  Newer versions of
+\&\f(CW\*(C`gcc\*(C'\fR are designed to work with the \f(CW\*(C`gcov\*(C'\fR tool instead.
+.Sp
+If the program was compiled with basic-block counting enabled,
+this option will also identify how many times each line of
+code was executed.
+While line-by-line profiling can help isolate where in a large function
+a program is spending its time, it also significantly increases
+the running time of \f(CW\*(C`gprof\*(C'\fR, and magnifies statistical
+inaccuracies.
+.ie n .IP """\-\-inline\-file\-names""" 4
+.el .IP "\f(CW\-\-inline\-file\-names\fR" 4
+.IX Item "--inline-file-names"
+This option causes \f(CW\*(C`gprof\*(C'\fR to print the source file after each
+symbol in both the flat profile and the call graph. The full path to the
+file is printed if used with the \fB\-L\fR option.
+.ie n .IP """\-m \fInum\fP""" 4
+.el .IP "\f(CW\-m \f(CInum\f(CW\fR" 4
+.IX Item "-m num"
+.PD 0
+.ie n .IP """\-\-min\-count=\fInum\fP""" 4
+.el .IP "\f(CW\-\-min\-count=\f(CInum\f(CW\fR" 4
+.IX Item "--min-count=num"
+.PD
+This option affects execution count output only.
+Symbols that are executed less than \fInum\fR times are suppressed.
+.ie n .IP """\-n\fIsymspec\fP""" 4
+.el .IP "\f(CW\-n\f(CIsymspec\f(CW\fR" 4
+.IX Item "-nsymspec"
+.PD 0
+.ie n .IP """\-\-time=\fIsymspec\fP""" 4
+.el .IP "\f(CW\-\-time=\f(CIsymspec\f(CW\fR" 4
+.IX Item "--time=symspec"
+.PD
+The \fB\-n\fR option causes \f(CW\*(C`gprof\*(C'\fR, in its call graph analysis,
+to only propagate times for symbols matching \fIsymspec\fR.
+.ie n .IP """\-N\fIsymspec\fP""" 4
+.el .IP "\f(CW\-N\f(CIsymspec\f(CW\fR" 4
+.IX Item "-Nsymspec"
+.PD 0
+.ie n .IP """\-\-no\-time=\fIsymspec\fP""" 4
+.el .IP "\f(CW\-\-no\-time=\f(CIsymspec\f(CW\fR" 4
+.IX Item "--no-time=symspec"
+.PD
+The \fB\-n\fR option causes \f(CW\*(C`gprof\*(C'\fR, in its call graph analysis,
+not to propagate times for symbols matching \fIsymspec\fR.
+.ie n .IP """\-S\fIfilename\fP""" 4
+.el .IP "\f(CW\-S\f(CIfilename\f(CW\fR" 4
+.IX Item "-Sfilename"
+.PD 0
+.ie n .IP """\-\-external\-symbol\-table=\fIfilename\fP""" 4
+.el .IP "\f(CW\-\-external\-symbol\-table=\f(CIfilename\f(CW\fR" 4
+.IX Item "--external-symbol-table=filename"
+.PD
+The \fB\-S\fR option causes \f(CW\*(C`gprof\*(C'\fR to read an external symbol table
+file, such as \fI/proc/kallsyms\fR, rather than read the symbol table
+from the given object file (the default is \f(CW\*(C`a.out\*(C'\fR). This is useful
+for profiling kernel modules.
+.ie n .IP """\-z""" 4
+.el .IP "\f(CW\-z\fR" 4
+.IX Item "-z"
+.PD 0
+.ie n .IP """\-\-display\-unused\-functions""" 4
+.el .IP "\f(CW\-\-display\-unused\-functions\fR" 4
+.IX Item "--display-unused-functions"
+.PD
+If you give the \fB\-z\fR option, \f(CW\*(C`gprof\*(C'\fR will mention all
+functions in the flat profile, even those that were never called, and
+that had no time spent in them.  This is useful in conjunction with the
+\&\fB\-c\fR option for discovering which routines were never called.
+.SS "Miscellaneous Options"
+.IX Subsection "Miscellaneous Options"
+.ie n .IP """\-d[\fInum\fP]""" 4
+.el .IP "\f(CW\-d[\f(CInum\f(CW]\fR" 4
+.IX Item "-d[num]"
+.PD 0
+.ie n .IP """\-\-debug[=\fInum\fP]""" 4
+.el .IP "\f(CW\-\-debug[=\f(CInum\f(CW]\fR" 4
+.IX Item "--debug[=num]"
+.PD
+The \fB\-d\fR \fInum\fR option specifies debugging options.
+If \fInum\fR is not specified, enable all debugging.
+.ie n .IP """\-h""" 4
+.el .IP "\f(CW\-h\fR" 4
+.IX Item "-h"
+.PD 0
+.ie n .IP """\-\-help""" 4
+.el .IP "\f(CW\-\-help\fR" 4
+.IX Item "--help"
+.PD
+The \fB\-h\fR option prints command line usage.
+.ie n .IP """\-O\fIname\fP""" 4
+.el .IP "\f(CW\-O\f(CIname\f(CW\fR" 4
+.IX Item "-Oname"
+.PD 0
+.ie n .IP """\-\-file\-format=\fIname\fP""" 4
+.el .IP "\f(CW\-\-file\-format=\f(CIname\f(CW\fR" 4
+.IX Item "--file-format=name"
+.PD
+Selects the format of the profile data files.  Recognized formats are
+\&\fBauto\fR (the default), \fBbsd\fR, \fB4.4bsd\fR, \fBmagic\fR, and
+\&\fBprof\fR (not yet supported).
+.ie n .IP """\-s""" 4
+.el .IP "\f(CW\-s\fR" 4
+.IX Item "-s"
+.PD 0
+.ie n .IP """\-\-sum""" 4
+.el .IP "\f(CW\-\-sum\fR" 4
+.IX Item "--sum"
+.PD
+The \fB\-s\fR option causes \f(CW\*(C`gprof\*(C'\fR to summarize the information
+in the profile data files it read in, and write out a profile data
+file called \fIgmon.sum\fR, which contains all the information from
+the profile data files that \f(CW\*(C`gprof\*(C'\fR read in.  The file \fIgmon.sum\fR
+may be one of the specified input files; the effect of this is to
+merge the data in the other input files into \fIgmon.sum\fR.
+.Sp
+Eventually you can run \f(CW\*(C`gprof\*(C'\fR again without \fB\-s\fR to analyze the
+cumulative data in the file \fIgmon.sum\fR.
+.ie n .IP """\-v""" 4
+.el .IP "\f(CW\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.ie n .IP """\-\-version""" 4
+.el .IP "\f(CW\-\-version\fR" 4
+.IX Item "--version"
+.PD
+The \fB\-v\fR flag causes \f(CW\*(C`gprof\*(C'\fR to print the current version
+number, and then exit.
+.SS "Deprecated Options"
+.IX Subsection "Deprecated Options"
+These options have been replaced with newer versions that use symspecs.
+.ie n .IP """\-e \fIfunction_name\fP""" 4
+.el .IP "\f(CW\-e \f(CIfunction_name\f(CW\fR" 4
+.IX Item "-e function_name"
+The \fB\-e\fR \fIfunction\fR option tells \f(CW\*(C`gprof\*(C'\fR to not print
+information about the function \fIfunction_name\fR (and its
+children...) in the call graph.  The function will still be listed
+as a child of any functions that call it, but its index number will be
+shown as \fB[not printed]\fR.  More than one \fB\-e\fR option may be
+given; only one \fIfunction_name\fR may be indicated with each \fB\-e\fR
+option.
+.ie n .IP """\-E \fIfunction_name\fP""" 4
+.el .IP "\f(CW\-E \f(CIfunction_name\f(CW\fR" 4
+.IX Item "-E function_name"
+The \f(CW\*(C`\-E \f(CIfunction\f(CW\*(C'\fR option works like the \f(CW\*(C`\-e\*(C'\fR option, but
+time spent in the function (and children who were not called from
+anywhere else), will not be used to compute the percentages-of-time for
+the call graph.  More than one \fB\-E\fR option may be given; only one
+\&\fIfunction_name\fR may be indicated with each \fB\-E\fR option.
+.ie n .IP """\-f \fIfunction_name\fP""" 4
+.el .IP "\f(CW\-f \f(CIfunction_name\f(CW\fR" 4
+.IX Item "-f function_name"
+The \fB\-f\fR \fIfunction\fR option causes \f(CW\*(C`gprof\*(C'\fR to limit the
+call graph to the function \fIfunction_name\fR and its children (and
+their children...).  More than one \fB\-f\fR option may be given;
+only one \fIfunction_name\fR may be indicated with each \fB\-f\fR
+option.
+.ie n .IP """\-F \fIfunction_name\fP""" 4
+.el .IP "\f(CW\-F \f(CIfunction_name\f(CW\fR" 4
+.IX Item "-F function_name"
+The \fB\-F\fR \fIfunction\fR option works like the \f(CW\*(C`\-f\*(C'\fR option, but
+only time spent in the function and its children (and their
+children...) will be used to determine total-time and
+percentages-of-time for the call graph.  More than one \fB\-F\fR option
+may be given; only one \fIfunction_name\fR may be indicated with each
+\&\fB\-F\fR option.  The \fB\-F\fR option overrides the \fB\-E\fR option.
+.SH "FILES"
+.IX Header "FILES"
+.ie n .IP """\fIa.out\fP""" 4
+.el .IP "\f(CW\f(CIa.out\f(CW\fR" 4
+.IX Item "a.out"
+the namelist and text space.
+.ie n .IP """\fIgmon.out\fP""" 4
+.el .IP "\f(CW\f(CIgmon.out\f(CW\fR" 4
+.IX Item "gmon.out"
+dynamic call graph and profile.
+.ie n .IP """\fIgmon.sum\fP""" 4
+.el .IP "\f(CW\f(CIgmon.sum\f(CW\fR" 4
+.IX Item "gmon.sum"
+summarized dynamic call graph and profile.
+.SH "BUGS"
+.IX Header "BUGS"
+The granularity of the sampling is shown, but remains
+statistical at best.
+We assume that the time for each execution of a function
+can be expressed by the total time for the function divided
+by the number of times the function is called.
+Thus the time propagated along the call graph arcs to the function's
+parents is directly proportional to the number of times that
+arc is traversed.
+.PP
+Parents that are not themselves profiled will have the time of
+their profiled children propagated to them, but they will appear
+to be spontaneously invoked in the call graph listing, and will
+not have their time propagated further.
+Similarly, signal catchers, even though profiled, will appear
+to be spontaneous (although for more obscure reasons).
+Any profiled children of signal catchers should have their times
+propagated properly, unless the signal catcher was invoked during
+the execution of the profiling routine, in which case all is lost.
+.PP
+The profiled program must call \f(CW\*(C`exit\*(C'\fR(2)
+or return normally for the profiling information to be saved
+in the \fIgmon.out\fR file.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fImonitor\fR\|(3), \fIprofil\fR\|(2), \fIcc\fR\|(1), \fIprof\fR\|(1), and the Info entry for \fIgprof\fR.
+.PP
+\&\*(L"An Execution Profiler for Modular Programs\*(R",
+by S. Graham, P. Kessler, M. McKusick;
+Software \- Practice and Experience,
+Vol. 13, pp. 671\-685, 1983.
+.PP
+\&\*(L"gprof: A Call Graph Execution Profiler\*(R",
+by S. Graham, P. Kessler, M. McKusick;
+Proceedings of the \s-1SIGPLAN\s0 '82 Symposium on Compiler Construction,
+\&\s-1SIGPLAN\s0 Notices, Vol. 17, No  6, pp. 120\-126, June 1982.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1988\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man1/aarch64-elf-ld.1 b/share/man/man1/aarch64-elf-ld.1
new file mode 100644
index 0000000..c7db5c7
--- /dev/null
+++ b/share/man/man1/aarch64-elf-ld.1
@@ -0,0 +1,2901 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "LD 1"
+.TH LD 1 "2019-05-21" "binutils-2.32" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+ld \- The GNU linker
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+ld [\fBoptions\fR] \fIobjfile\fR ...
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBld\fR combines a number of object and archive files, relocates
+their data and ties up symbol references. Usually the last step in
+compiling a program is to run \fBld\fR.
+.PP
+\&\fBld\fR accepts Linker Command Language files written in
+a superset of \s-1AT&T\s0's Link Editor Command Language syntax,
+to provide explicit and total control over the linking process.
+.PP
+This man page does not describe the command language; see the
+\&\fBld\fR entry in \f(CW\*(C`info\*(C'\fR for full details on the command
+language and on other aspects of the \s-1GNU\s0 linker.
+.PP
+This version of \fBld\fR uses the general purpose \s-1BFD\s0 libraries
+to operate on object files. This allows \fBld\fR to read, combine, and
+write object files in many different formats\-\-\-for example, \s-1COFF\s0 or
+\&\f(CW\*(C`a.out\*(C'\fR.  Different formats may be linked together to produce any
+available kind of object file.
+.PP
+Aside from its flexibility, the \s-1GNU\s0 linker is more helpful than other
+linkers in providing diagnostic information.  Many linkers abandon
+execution immediately upon encountering an error; whenever possible,
+\&\fBld\fR continues executing, allowing you to identify other errors
+(or, in some cases, to get an output file in spite of the error).
+.PP
+The \s-1GNU\s0 linker \fBld\fR is meant to cover a broad range of situations,
+and to be as compatible as possible with other linkers.  As a result,
+you have many choices to control its behavior.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+The linker supports a plethora of command-line options, but in actual
+practice few of them are used in any particular context.
+For instance, a frequent use of \fBld\fR is to link standard Unix
+object files on a standard, supported Unix system.  On such a system, to
+link a file \f(CW\*(C`hello.o\*(C'\fR:
+.PP
+.Vb 1
+\&        ld \-o <output> /lib/crt0.o hello.o \-lc
+.Ve
+.PP
+This tells \fBld\fR to produce a file called \fIoutput\fR as the
+result of linking the file \f(CW\*(C`/lib/crt0.o\*(C'\fR with \f(CW\*(C`hello.o\*(C'\fR and
+the library \f(CW\*(C`libc.a\*(C'\fR, which will come from the standard search
+directories.  (See the discussion of the \fB\-l\fR option below.)
+.PP
+Some of the command-line options to \fBld\fR may be specified at any
+point in the command line.  However, options which refer to files, such
+as \fB\-l\fR or \fB\-T\fR, cause the file to be read at the point at
+which the option appears in the command line, relative to the object
+files and other file options.  Repeating non-file options with a
+different argument will either have no further effect, or override prior
+occurrences (those further to the left on the command line) of that
+option.  Options which may be meaningfully specified more than once are
+noted in the descriptions below.
+.PP
+Non-option arguments are object files or archives which are to be linked
+together.  They may follow, precede, or be mixed in with command-line
+options, except that an object file argument may not be placed between
+an option and its argument.
+.PP
+Usually the linker is invoked with at least one object file, but you can
+specify other forms of binary input files using \fB\-l\fR, \fB\-R\fR,
+and the script command language.  If \fIno\fR binary input files at all
+are specified, the linker does not produce any output, and issues the
+message \fBNo input files\fR.
+.PP
+If the linker cannot recognize the format of an object file, it will
+assume that it is a linker script.  A script specified in this way
+augments the main linker script used for the link (either the default
+linker script or the one specified by using \fB\-T\fR).  This feature
+permits the linker to link against a file which appears to be an object
+or an archive, but actually merely defines some symbol values, or uses
+\&\f(CW\*(C`INPUT\*(C'\fR or \f(CW\*(C`GROUP\*(C'\fR to load other objects.  Specifying a
+script in this way merely augments the main linker script, with the
+extra commands placed after the main script; use the \fB\-T\fR option
+to replace the default linker script entirely, but note the effect of
+the \f(CW\*(C`INSERT\*(C'\fR command.
+.PP
+For options whose names are a single letter,
+option arguments must either follow the option letter without intervening
+whitespace, or be given as separate arguments immediately following the
+option that requires them.
+.PP
+For options whose names are multiple letters, either one dash or two can
+precede the option name; for example, \fB\-trace\-symbol\fR and
+\&\fB\-\-trace\-symbol\fR are equivalent.  Note\-\-\-there is one exception to
+this rule.  Multiple letter options that start with a lower case 'o' can
+only be preceded by two dashes.  This is to reduce confusion with the
+\&\fB\-o\fR option.  So for example \fB\-omagic\fR sets the output file
+name to \fBmagic\fR whereas \fB\-\-omagic\fR sets the \s-1NMAGIC\s0 flag on the
+output.
+.PP
+Arguments to multiple-letter options must either be separated from the
+option name by an equals sign, or be given as separate arguments
+immediately following the option that requires them.  For example,
+\&\fB\-\-trace\-symbol foo\fR and \fB\-\-trace\-symbol=foo\fR are equivalent.
+Unique abbreviations of the names of multiple-letter options are
+accepted.
+.PP
+Note\-\-\-if the linker is being invoked indirectly, via a compiler driver
+(e.g. \fBgcc\fR) then all the linker command-line options should be
+prefixed by \fB\-Wl,\fR (or whatever is appropriate for the particular
+compiler driver) like this:
+.PP
+.Vb 1
+\&          gcc \-Wl,\-\-start\-group foo.o bar.o \-Wl,\-\-end\-group
+.Ve
+.PP
+This is important, because otherwise the compiler driver program may
+silently drop the linker options, resulting in a bad link.  Confusion
+may also arise when passing options that require values through a
+driver, as the use of a space between option and argument acts as
+a separator, and causes the driver to pass only the option to the linker
+and the argument to the compiler.  In this case, it is simplest to use
+the joined forms of both single\- and multiple-letter options, such as:
+.PP
+.Vb 1
+\&          gcc foo.o bar.o \-Wl,\-eENTRY \-Wl,\-Map=a.map
+.Ve
+.PP
+Here is a table of the generic command-line switches accepted by the \s-1GNU\s0
+linker:
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.IP "\fB\-a\fR \fIkeyword\fR" 4
+.IX Item "-a keyword"
+This option is supported for \s-1HP/UX\s0 compatibility.  The \fIkeyword\fR
+argument must be one of the strings \fBarchive\fR, \fBshared\fR, or
+\&\fBdefault\fR.  \fB\-aarchive\fR is functionally equivalent to
+\&\fB\-Bstatic\fR, and the other two keywords are functionally equivalent
+to \fB\-Bdynamic\fR.  This option may be used any number of times.
+.IP "\fB\-\-audit\fR \fI\s-1AUDITLIB\s0\fR" 4
+.IX Item "--audit AUDITLIB"
+Adds \fI\s-1AUDITLIB\s0\fR to the \f(CW\*(C`DT_AUDIT\*(C'\fR entry of the dynamic section.
+\&\fI\s-1AUDITLIB\s0\fR is not checked for existence, nor will it use the \s-1DT_SONAME\s0
+specified in the library.  If specified multiple times \f(CW\*(C`DT_AUDIT\*(C'\fR
+will contain a colon separated list of audit interfaces to use. If the linker
+finds an object with an audit entry while searching for shared libraries,
+it will add a corresponding \f(CW\*(C`DT_DEPAUDIT\*(C'\fR entry in the output file.
+This option is only meaningful on \s-1ELF\s0 platforms supporting the rtld-audit
+interface.
+.IP "\fB\-b\fR \fIinput-format\fR" 4
+.IX Item "-b input-format"
+.PD 0
+.IP "\fB\-\-format=\fR\fIinput-format\fR" 4
+.IX Item "--format=input-format"
+.PD
+\&\fBld\fR may be configured to support more than one kind of object
+file.  If your \fBld\fR is configured this way, you can use the
+\&\fB\-b\fR option to specify the binary format for input object files
+that follow this option on the command line.  Even when \fBld\fR is
+configured to support alternative object formats, you don't usually need
+to specify this, as \fBld\fR should be configured to expect as a
+default input format the most usual format on each machine.
+\&\fIinput-format\fR is a text string, the name of a particular format
+supported by the \s-1BFD\s0 libraries.  (You can list the available binary
+formats with \fBobjdump \-i\fR.)
+.Sp
+You may want to use this option if you are linking files with an unusual
+binary format.  You can also use \fB\-b\fR to switch formats explicitly (when
+linking object files of different formats), by including
+\&\fB\-b\fR \fIinput-format\fR before each group of object files in a
+particular format.
+.Sp
+The default format is taken from the environment variable
+\&\f(CW\*(C`GNUTARGET\*(C'\fR.
+.Sp
+You can also define the input format from a script, using the command
+\&\f(CW\*(C`TARGET\*(C'\fR;
+.IP "\fB\-c\fR \fIMRI-commandfile\fR" 4
+.IX Item "-c MRI-commandfile"
+.PD 0
+.IP "\fB\-\-mri\-script=\fR\fIMRI-commandfile\fR" 4
+.IX Item "--mri-script=MRI-commandfile"
+.PD
+For compatibility with linkers produced by \s-1MRI,\s0 \fBld\fR accepts script
+files written in an alternate, restricted command language, described in
+the \s-1MRI\s0 Compatible Script Files section of \s-1GNU\s0 ld documentation.
+Introduce \s-1MRI\s0 script files with
+the option \fB\-c\fR; use the \fB\-T\fR option to run linker
+scripts written in the general-purpose \fBld\fR scripting language.
+If \fIMRI-cmdfile\fR does not exist, \fBld\fR looks for it in the directories
+specified by any \fB\-L\fR options.
+.IP "\fB\-d\fR" 4
+.IX Item "-d"
+.PD 0
+.IP "\fB\-dc\fR" 4
+.IX Item "-dc"
+.IP "\fB\-dp\fR" 4
+.IX Item "-dp"
+.PD
+These three options are equivalent; multiple forms are supported for
+compatibility with other linkers.  They assign space to common symbols
+even if a relocatable output file is specified (with \fB\-r\fR).  The
+script command \f(CW\*(C`FORCE_COMMON_ALLOCATION\*(C'\fR has the same effect.
+.IP "\fB\-\-depaudit\fR \fI\s-1AUDITLIB\s0\fR" 4
+.IX Item "--depaudit AUDITLIB"
+.PD 0
+.IP "\fB\-P\fR \fI\s-1AUDITLIB\s0\fR" 4
+.IX Item "-P AUDITLIB"
+.PD
+Adds \fI\s-1AUDITLIB\s0\fR to the \f(CW\*(C`DT_DEPAUDIT\*(C'\fR entry of the dynamic section.
+\&\fI\s-1AUDITLIB\s0\fR is not checked for existence, nor will it use the \s-1DT_SONAME\s0
+specified in the library.  If specified multiple times \f(CW\*(C`DT_DEPAUDIT\*(C'\fR
+will contain a colon separated list of audit interfaces to use.  This
+option is only meaningful on \s-1ELF\s0 platforms supporting the rtld-audit interface.
+The \-P option is provided for Solaris compatibility.
+.IP "\fB\-e\fR \fIentry\fR" 4
+.IX Item "-e entry"
+.PD 0
+.IP "\fB\-\-entry=\fR\fIentry\fR" 4
+.IX Item "--entry=entry"
+.PD
+Use \fIentry\fR as the explicit symbol for beginning execution of your
+program, rather than the default entry point.  If there is no symbol
+named \fIentry\fR, the linker will try to parse \fIentry\fR as a number,
+and use that as the entry address (the number will be interpreted in
+base 10; you may use a leading \fB0x\fR for base 16, or a leading
+\&\fB0\fR for base 8).
+.IP "\fB\-\-exclude\-libs\fR \fIlib\fR\fB,\fR\fIlib\fR\fB,...\fR" 4
+.IX Item "--exclude-libs lib,lib,..."
+Specifies a list of archive libraries from which symbols should not be automatically
+exported.  The library names may be delimited by commas or colons.  Specifying
+\&\f(CW\*(C`\-\-exclude\-libs ALL\*(C'\fR excludes symbols in all archive libraries from
+automatic export.  This option is available only for the i386 \s-1PE\s0 targeted
+port of the linker and for \s-1ELF\s0 targeted ports.  For i386 \s-1PE,\s0 symbols
+explicitly listed in a .def file are still exported, regardless of this
+option.  For \s-1ELF\s0 targeted ports, symbols affected by this option will
+be treated as hidden.
+.IP "\fB\-\-exclude\-modules\-for\-implib\fR \fImodule\fR\fB,\fR\fImodule\fR\fB,...\fR" 4
+.IX Item "--exclude-modules-for-implib module,module,..."
+Specifies a list of object files or archive members, from which symbols
+should not be automatically exported, but which should be copied wholesale
+into the import library being generated during the link.  The module names
+may be delimited by commas or colons, and must match exactly the filenames
+used by \fBld\fR to open the files; for archive members, this is simply
+the member name, but for object files the name listed must include and
+match precisely any path used to specify the input file on the linker's
+command-line.  This option is available only for the i386 \s-1PE\s0 targeted port
+of the linker.  Symbols explicitly listed in a .def file are still exported,
+regardless of this option.
+.IP "\fB\-E\fR" 4
+.IX Item "-E"
+.PD 0
+.IP "\fB\-\-export\-dynamic\fR" 4
+.IX Item "--export-dynamic"
+.IP "\fB\-\-no\-export\-dynamic\fR" 4
+.IX Item "--no-export-dynamic"
+.PD
+When creating a dynamically linked executable, using the \fB\-E\fR
+option or the \fB\-\-export\-dynamic\fR option causes the linker to add
+all symbols to the dynamic symbol table.  The dynamic symbol table is the
+set of symbols which are visible from dynamic objects at run time.
+.Sp
+If you do not use either of these options (or use the
+\&\fB\-\-no\-export\-dynamic\fR option to restore the default behavior), the
+dynamic symbol table will normally contain only those symbols which are
+referenced by some dynamic object mentioned in the link.
+.Sp
+If you use \f(CW\*(C`dlopen\*(C'\fR to load a dynamic object which needs to refer
+back to the symbols defined by the program, rather than some other
+dynamic object, then you will probably need to use this option when
+linking the program itself.
+.Sp
+You can also use the dynamic list to control what symbols should
+be added to the dynamic symbol table if the output format supports it.
+See the description of \fB\-\-dynamic\-list\fR.
+.Sp
+Note that this option is specific to \s-1ELF\s0 targeted ports.  \s-1PE\s0 targets
+support a similar function to export all symbols from a \s-1DLL\s0 or \s-1EXE\s0; see
+the description of \fB\-\-export\-all\-symbols\fR below.
+.IP "\fB\-EB\fR" 4
+.IX Item "-EB"
+Link big-endian objects.  This affects the default output format.
+.IP "\fB\-EL\fR" 4
+.IX Item "-EL"
+Link little-endian objects.  This affects the default output format.
+.IP "\fB\-f\fR \fIname\fR" 4
+.IX Item "-f name"
+.PD 0
+.IP "\fB\-\-auxiliary=\fR\fIname\fR" 4
+.IX Item "--auxiliary=name"
+.PD
+When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_AUXILIARY\s0 field
+to the specified name.  This tells the dynamic linker that the symbol
+table of the shared object should be used as an auxiliary filter on the
+symbol table of the shared object \fIname\fR.
+.Sp
+If you later link a program against this filter object, then, when you
+run the program, the dynamic linker will see the \s-1DT_AUXILIARY\s0 field.  If
+the dynamic linker resolves any symbols from the filter object, it will
+first check whether there is a definition in the shared object
+\&\fIname\fR.  If there is one, it will be used instead of the definition
+in the filter object.  The shared object \fIname\fR need not exist.
+Thus the shared object \fIname\fR may be used to provide an alternative
+implementation of certain functions, perhaps for debugging or for
+machine specific performance.
+.Sp
+This option may be specified more than once.  The \s-1DT_AUXILIARY\s0 entries
+will be created in the order in which they appear on the command line.
+.IP "\fB\-F\fR \fIname\fR" 4
+.IX Item "-F name"
+.PD 0
+.IP "\fB\-\-filter=\fR\fIname\fR" 4
+.IX Item "--filter=name"
+.PD
+When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_FILTER\s0 field to
+the specified name.  This tells the dynamic linker that the symbol table
+of the shared object which is being created should be used as a filter
+on the symbol table of the shared object \fIname\fR.
+.Sp
+If you later link a program against this filter object, then, when you
+run the program, the dynamic linker will see the \s-1DT_FILTER\s0 field.  The
+dynamic linker will resolve symbols according to the symbol table of the
+filter object as usual, but it will actually link to the definitions
+found in the shared object \fIname\fR.  Thus the filter object can be
+used to select a subset of the symbols provided by the object
+\&\fIname\fR.
+.Sp
+Some older linkers used the \fB\-F\fR option throughout a compilation
+toolchain for specifying object-file format for both input and output
+object files.
+The \s-1GNU\s0 linker uses other mechanisms for this purpose: the
+\&\fB\-b\fR, \fB\-\-format\fR, \fB\-\-oformat\fR options, the
+\&\f(CW\*(C`TARGET\*(C'\fR command in linker scripts, and the \f(CW\*(C`GNUTARGET\*(C'\fR
+environment variable.
+The \s-1GNU\s0 linker will ignore the \fB\-F\fR option when not
+creating an \s-1ELF\s0 shared object.
+.IP "\fB\-fini=\fR\fIname\fR" 4
+.IX Item "-fini=name"
+When creating an \s-1ELF\s0 executable or shared object, call \s-1NAME\s0 when the
+executable or shared object is unloaded, by setting \s-1DT_FINI\s0 to the
+address of the function.  By default, the linker uses \f(CW\*(C`_fini\*(C'\fR as
+the function to call.
+.IP "\fB\-g\fR" 4
+.IX Item "-g"
+Ignored.  Provided for compatibility with other tools.
+.IP "\fB\-G\fR \fIvalue\fR" 4
+.IX Item "-G value"
+.PD 0
+.IP "\fB\-\-gpsize=\fR\fIvalue\fR" 4
+.IX Item "--gpsize=value"
+.PD
+Set the maximum size of objects to be optimized using the \s-1GP\s0 register to
+\&\fIsize\fR.  This is only meaningful for object file formats such as
+\&\s-1MIPS ELF\s0 that support putting large and small objects into different
+sections.  This is ignored for other object file formats.
+.IP "\fB\-h\fR \fIname\fR" 4
+.IX Item "-h name"
+.PD 0
+.IP "\fB\-soname=\fR\fIname\fR" 4
+.IX Item "-soname=name"
+.PD
+When creating an \s-1ELF\s0 shared object, set the internal \s-1DT_SONAME\s0 field to
+the specified name.  When an executable is linked with a shared object
+which has a \s-1DT_SONAME\s0 field, then when the executable is run the dynamic
+linker will attempt to load the shared object specified by the \s-1DT_SONAME\s0
+field rather than the using the file name given to the linker.
+.IP "\fB\-i\fR" 4
+.IX Item "-i"
+Perform an incremental link (same as option \fB\-r\fR).
+.IP "\fB\-init=\fR\fIname\fR" 4
+.IX Item "-init=name"
+When creating an \s-1ELF\s0 executable or shared object, call \s-1NAME\s0 when the
+executable or shared object is loaded, by setting \s-1DT_INIT\s0 to the address
+of the function.  By default, the linker uses \f(CW\*(C`_init\*(C'\fR as the
+function to call.
+.IP "\fB\-l\fR \fInamespec\fR" 4
+.IX Item "-l namespec"
+.PD 0
+.IP "\fB\-\-library=\fR\fInamespec\fR" 4
+.IX Item "--library=namespec"
+.PD
+Add the archive or object file specified by \fInamespec\fR to the
+list of files to link.  This option may be used any number of times.
+If \fInamespec\fR is of the form \fI:\fIfilename\fI\fR, \fBld\fR
+will search the library path for a file called \fIfilename\fR, otherwise it
+will search the library path for a file called \fIlib\fInamespec\fI.a\fR.
+.Sp
+On systems which support shared libraries, \fBld\fR may also search for
+files other than \fIlib\fInamespec\fI.a\fR.  Specifically, on \s-1ELF\s0
+and SunOS systems, \fBld\fR will search a directory for a library
+called \fIlib\fInamespec\fI.so\fR before searching for one called
+\&\fIlib\fInamespec\fI.a\fR.  (By convention, a \f(CW\*(C`.so\*(C'\fR extension
+indicates a shared library.)  Note that this behavior does not apply
+to \fI:\fIfilename\fI\fR, which always specifies a file called
+\&\fIfilename\fR.
+.Sp
+The linker will search an archive only once, at the location where it is
+specified on the command line.  If the archive defines a symbol which
+was undefined in some object which appeared before the archive on the
+command line, the linker will include the appropriate file(s) from the
+archive.  However, an undefined symbol in an object appearing later on
+the command line will not cause the linker to search the archive again.
+.Sp
+See the \fB\-(\fR option for a way to force the linker to search
+archives multiple times.
+.Sp
+You may list the same archive multiple times on the command line.
+.Sp
+This type of archive searching is standard for Unix linkers.  However,
+if you are using \fBld\fR on \s-1AIX,\s0 note that it is different from the
+behaviour of the \s-1AIX\s0 linker.
+.IP "\fB\-L\fR \fIsearchdir\fR" 4
+.IX Item "-L searchdir"
+.PD 0
+.IP "\fB\-\-library\-path=\fR\fIsearchdir\fR" 4
+.IX Item "--library-path=searchdir"
+.PD
+Add path \fIsearchdir\fR to the list of paths that \fBld\fR will search
+for archive libraries and \fBld\fR control scripts.  You may use this
+option any number of times.  The directories are searched in the order
+in which they are specified on the command line.  Directories specified
+on the command line are searched before the default directories.  All
+\&\fB\-L\fR options apply to all \fB\-l\fR options, regardless of the
+order in which the options appear.  \fB\-L\fR options do not affect
+how \fBld\fR searches for a linker script unless \fB\-T\fR
+option is specified.
+.Sp
+If \fIsearchdir\fR begins with \f(CW\*(C`=\*(C'\fR or \f(CW$SYSROOT\fR, then this
+prefix will be replaced by the \fIsysroot prefix\fR, controlled by the
+\&\fB\-\-sysroot\fR option, or specified when the linker is configured.
+.Sp
+The default set of paths searched (without being specified with
+\&\fB\-L\fR) depends on which emulation mode \fBld\fR is using, and in
+some cases also on how it was configured.
+.Sp
+The paths can also be specified in a link script with the
+\&\f(CW\*(C`SEARCH_DIR\*(C'\fR command.  Directories specified this way are searched
+at the point in which the linker script appears in the command line.
+.IP "\fB\-m\fR \fIemulation\fR" 4
+.IX Item "-m emulation"
+Emulate the \fIemulation\fR linker.  You can list the available
+emulations with the \fB\-\-verbose\fR or \fB\-V\fR options.
+.Sp
+If the \fB\-m\fR option is not used, the emulation is taken from the
+\&\f(CW\*(C`LDEMULATION\*(C'\fR environment variable, if that is defined.
+.Sp
+Otherwise, the default emulation depends upon how the linker was
+configured.
+.IP "\fB\-M\fR" 4
+.IX Item "-M"
+.PD 0
+.IP "\fB\-\-print\-map\fR" 4
+.IX Item "--print-map"
+.PD
+Print a link map to the standard output.  A link map provides
+information about the link, including the following:
+.RS 4
+.IP "\(bu" 4
+Where object files are mapped into memory.
+.IP "\(bu" 4
+How common symbols are allocated.
+.IP "\(bu" 4
+All archive members included in the link, with a mention of the symbol
+which caused the archive member to be brought in.
+.IP "\(bu" 4
+The values assigned to symbols.
+.Sp
+Note \- symbols whose values are computed by an expression which
+involves a reference to a previous value of the same symbol may not
+have correct result displayed in the link map.  This is because the
+linker discards intermediate results and only retains the final value
+of an expression.  Under such circumstances the linker will display
+the final value enclosed by square brackets.  Thus for example a
+linker script containing:
+.Sp
+.Vb 3
+\&           foo = 1
+\&           foo = foo * 4
+\&           foo = foo + 8
+.Ve
+.Sp
+will produce the following output in the link map if the \fB\-M\fR
+option is used:
+.Sp
+.Vb 3
+\&           0x00000001                foo = 0x1
+\&           [0x0000000c]                foo = (foo * 0x4)
+\&           [0x0000000c]                foo = (foo + 0x8)
+.Ve
+.Sp
+See \fBExpressions\fR for more information about expressions in linker
+scripts.
+.IP "\(bu" 4
+*<How \s-1GNU\s0 properties are merged.>
+.Sp
+When linker merges input .note.gnu.property sections into one output
+\&.note.gnu.property section, some properties are removed or updated,
+which are reported in the link map as
+.Sp
+.Vb 1
+\&        Removed property 0xc0000002 to merge foo.o (0x1) and bar.o (not found)
+.Ve
+.Sp
+It indicates that property 0xc0000002 is removed from output when
+merging properties in  \fIfoo.o\fR, whose property 0xc0000002 value
+is 0x1, and \fIbar.o\fR, which doesn't have property 0xc0000002.
+.Sp
+.Vb 1
+\&        Updated property 0xc0000002 (0x1) to merge foo.o (0x1) and bar.o (0x1)
+.Ve
+.Sp
+It indicates that property 0xc0010001 value is updated to 0x1 in output
+when merging properties in  \fIfoo.o\fR, whose 0xc0010001 property value
+is 0x1, and \fIbar.o\fR, whose 0xc0010001 property value is 0x1.
+.RE
+.RS 4
+.RE
+.IP "\fB\-n\fR" 4
+.IX Item "-n"
+.PD 0
+.IP "\fB\-\-nmagic\fR" 4
+.IX Item "--nmagic"
+.PD
+Turn off page alignment of sections, and disable linking against shared
+libraries.  If the output format supports Unix style magic numbers,
+mark the output as \f(CW\*(C`NMAGIC\*(C'\fR.
+.IP "\fB\-N\fR" 4
+.IX Item "-N"
+.PD 0
+.IP "\fB\-\-omagic\fR" 4
+.IX Item "--omagic"
+.PD
+Set the text and data sections to be readable and writable.  Also, do
+not page-align the data segment, and disable linking against shared
+libraries.  If the output format supports Unix style magic numbers,
+mark the output as \f(CW\*(C`OMAGIC\*(C'\fR. Note: Although a writable text section
+is allowed for PE-COFF targets, it does not conform to the format
+specification published by Microsoft.
+.IP "\fB\-\-no\-omagic\fR" 4
+.IX Item "--no-omagic"
+This option negates most of the effects of the \fB\-N\fR option.  It
+sets the text section to be read-only, and forces the data segment to
+be page-aligned.  Note \- this option does not enable linking against
+shared libraries.  Use \fB\-Bdynamic\fR for this.
+.IP "\fB\-o\fR \fIoutput\fR" 4
+.IX Item "-o output"
+.PD 0
+.IP "\fB\-\-output=\fR\fIoutput\fR" 4
+.IX Item "--output=output"
+.PD
+Use \fIoutput\fR as the name for the program produced by \fBld\fR; if this
+option is not specified, the name \fIa.out\fR is used by default.  The
+script command \f(CW\*(C`OUTPUT\*(C'\fR can also specify the output file name.
+.IP "\fB\-O\fR \fIlevel\fR" 4
+.IX Item "-O level"
+If \fIlevel\fR is a numeric values greater than zero \fBld\fR optimizes
+the output.  This might take significantly longer and therefore probably
+should only be enabled for the final binary.  At the moment this
+option only affects \s-1ELF\s0 shared library generation.  Future releases of
+the linker may make more use of this option.  Also currently there is
+no difference in the linker's behaviour for different non-zero values
+of this option.  Again this may change with future releases.
+.IP "\fB\-plugin\fR \fIname\fR" 4
+.IX Item "-plugin name"
+Involve a plugin in the linking process.  The \fIname\fR parameter is
+the absolute filename of the plugin.  Usually this parameter is
+automatically added by the complier, when using link time
+optimization, but users can also add their own plugins if they so
+wish.
+.Sp
+Note that the location of the compiler originated plugins is different
+from the place where the \fBar\fR, \fBnm\fR and
+\&\fBranlib\fR programs search for their plugins.  In order for
+those commands to make use of a compiler based plugin it must first be
+copied into the \fI${libdir}/bfd\-plugins\fR directory.  All gcc
+based linker plugins are backward compatible, so it is sufficient to
+just copy in the newest one.
+.IP "\fB\-\-push\-state\fR" 4
+.IX Item "--push-state"
+The \fB\-\-push\-state\fR allows to preserve the current state of the
+flags which govern the input file handling so that they can all be
+restored with one corresponding \fB\-\-pop\-state\fR option.
+.Sp
+The option which are covered are: \fB\-Bdynamic\fR, \fB\-Bstatic\fR,
+\&\fB\-dn\fR, \fB\-dy\fR, \fB\-call_shared\fR, \fB\-non_shared\fR,
+\&\fB\-static\fR, \fB\-N\fR, \fB\-n\fR, \fB\-\-whole\-archive\fR,
+\&\fB\-\-no\-whole\-archive\fR, \fB\-r\fR, \fB\-Ur\fR,
+\&\fB\-\-copy\-dt\-needed\-entries\fR, \fB\-\-no\-copy\-dt\-needed\-entries\fR,
+\&\fB\-\-as\-needed\fR, \fB\-\-no\-as\-needed\fR, and \fB\-a\fR.
+.Sp
+One target for this option are specifications for \fIpkg-config\fR.  When
+used with the \fB\-\-libs\fR option all possibly needed libraries are
+listed and then possibly linked with all the time.  It is better to return
+something as follows:
+.Sp
+.Vb 1
+\&        \-Wl,\-\-push\-state,\-\-as\-needed \-libone \-libtwo \-Wl,\-\-pop\-state
+.Ve
+.IP "\fB\-\-pop\-state\fR" 4
+.IX Item "--pop-state"
+Undoes the effect of \-\-push\-state, restores the previous values of the
+flags governing input file handling.
+.IP "\fB\-q\fR" 4
+.IX Item "-q"
+.PD 0
+.IP "\fB\-\-emit\-relocs\fR" 4
+.IX Item "--emit-relocs"
+.PD
+Leave relocation sections and contents in fully linked executables.
+Post link analysis and optimization tools may need this information in
+order to perform correct modifications of executables.  This results
+in larger executables.
+.Sp
+This option is currently only supported on \s-1ELF\s0 platforms.
+.IP "\fB\-\-force\-dynamic\fR" 4
+.IX Item "--force-dynamic"
+Force the output file to have dynamic sections.  This option is specific
+to VxWorks targets.
+.IP "\fB\-r\fR" 4
+.IX Item "-r"
+.PD 0
+.IP "\fB\-\-relocatable\fR" 4
+.IX Item "--relocatable"
+.PD
+Generate relocatable output\-\-\-i.e., generate an output file that can in
+turn serve as input to \fBld\fR.  This is often called \fIpartial
+linking\fR.  As a side effect, in environments that support standard Unix
+magic numbers, this option also sets the output file's magic number to
+\&\f(CW\*(C`OMAGIC\*(C'\fR.
+If this option is not specified, an absolute file is produced.  When
+linking \*(C+ programs, this option \fIwill not\fR resolve references to
+constructors; to do that, use \fB\-Ur\fR.
+.Sp
+When an input file does not have the same format as the output file,
+partial linking is only supported if that input file does not contain any
+relocations.  Different output formats can have further restrictions; for
+example some \f(CW\*(C`a.out\*(C'\fR\-based formats do not support partial linking
+with input files in other formats at all.
+.Sp
+This option does the same thing as \fB\-i\fR.
+.IP "\fB\-R\fR \fIfilename\fR" 4
+.IX Item "-R filename"
+.PD 0
+.IP "\fB\-\-just\-symbols=\fR\fIfilename\fR" 4
+.IX Item "--just-symbols=filename"
+.PD
+Read symbol names and their addresses from \fIfilename\fR, but do not
+relocate it or include it in the output.  This allows your output file
+to refer symbolically to absolute locations of memory defined in other
+programs.  You may use this option more than once.
+.Sp
+For compatibility with other \s-1ELF\s0 linkers, if the \fB\-R\fR option is
+followed by a directory name, rather than a file name, it is treated as
+the \fB\-rpath\fR option.
+.IP "\fB\-s\fR" 4
+.IX Item "-s"
+.PD 0
+.IP "\fB\-\-strip\-all\fR" 4
+.IX Item "--strip-all"
+.PD
+Omit all symbol information from the output file.
+.IP "\fB\-S\fR" 4
+.IX Item "-S"
+.PD 0
+.IP "\fB\-\-strip\-debug\fR" 4
+.IX Item "--strip-debug"
+.PD
+Omit debugger symbol information (but not all symbols) from the output file.
+.IP "\fB\-\-strip\-discarded\fR" 4
+.IX Item "--strip-discarded"
+.PD 0
+.IP "\fB\-\-no\-strip\-discarded\fR" 4
+.IX Item "--no-strip-discarded"
+.PD
+Omit (or do not omit) global symbols defined in discarded sections.
+Enabled by default.
+.IP "\fB\-t\fR" 4
+.IX Item "-t"
+.PD 0
+.IP "\fB\-\-trace\fR" 4
+.IX Item "--trace"
+.PD
+Print the names of the input files as \fBld\fR processes them.  If
+\&\fB\-t\fR is given twice then members within archives are also printed.
+\&\fB\-t\fR output is useful to generate a list of all the object files
+and scripts involved in linking, for example, when packaging files for
+a linker bug report.
+.IP "\fB\-T\fR \fIscriptfile\fR" 4
+.IX Item "-T scriptfile"
+.PD 0
+.IP "\fB\-\-script=\fR\fIscriptfile\fR" 4
+.IX Item "--script=scriptfile"
+.PD
+Use \fIscriptfile\fR as the linker script.  This script replaces
+\&\fBld\fR's default linker script (rather than adding to it), so
+\&\fIcommandfile\fR must specify everything necessary to describe the
+output file.    If \fIscriptfile\fR does not exist in
+the current directory, \f(CW\*(C`ld\*(C'\fR looks for it in the directories
+specified by any preceding \fB\-L\fR options.  Multiple \fB\-T\fR
+options accumulate.
+.IP "\fB\-dT\fR \fIscriptfile\fR" 4
+.IX Item "-dT scriptfile"
+.PD 0
+.IP "\fB\-\-default\-script=\fR\fIscriptfile\fR" 4
+.IX Item "--default-script=scriptfile"
+.PD
+Use \fIscriptfile\fR as the default linker script.
+.Sp
+This option is similar to the \fB\-\-script\fR option except that
+processing of the script is delayed until after the rest of the
+command line has been processed.  This allows options placed after the
+\&\fB\-\-default\-script\fR option on the command line to affect the
+behaviour of the linker script, which can be important when the linker
+command line cannot be directly controlled by the user.  (eg because
+the command line is being constructed by another tool, such as
+\&\fBgcc\fR).
+.IP "\fB\-u\fR \fIsymbol\fR" 4
+.IX Item "-u symbol"
+.PD 0
+.IP "\fB\-\-undefined=\fR\fIsymbol\fR" 4
+.IX Item "--undefined=symbol"
+.PD
+Force \fIsymbol\fR to be entered in the output file as an undefined
+symbol.  Doing this may, for example, trigger linking of additional
+modules from standard libraries.  \fB\-u\fR may be repeated with
+different option arguments to enter additional undefined symbols.  This
+option is equivalent to the \f(CW\*(C`EXTERN\*(C'\fR linker script command.
+.Sp
+If this option is being used to force additional modules to be pulled
+into the link, and if it is an error for the symbol to remain
+undefined, then the option \fB\-\-require\-defined\fR should be used
+instead.
+.IP "\fB\-\-require\-defined=\fR\fIsymbol\fR" 4
+.IX Item "--require-defined=symbol"
+Require that \fIsymbol\fR is defined in the output file.  This option
+is the same as option \fB\-\-undefined\fR except that if \fIsymbol\fR
+is not defined in the output file then the linker will issue an error
+and exit.  The same effect can be achieved in a linker script by using
+\&\f(CW\*(C`EXTERN\*(C'\fR, \f(CW\*(C`ASSERT\*(C'\fR and \f(CW\*(C`DEFINED\*(C'\fR together.  This option
+can be used multiple times to require additional symbols.
+.IP "\fB\-Ur\fR" 4
+.IX Item "-Ur"
+For anything other than \*(C+ programs, this option is equivalent to
+\&\fB\-r\fR: it generates relocatable output\-\-\-i.e., an output file that can in
+turn serve as input to \fBld\fR.  When linking \*(C+ programs, \fB\-Ur\fR
+\&\fIdoes\fR resolve references to constructors, unlike \fB\-r\fR.
+It does not work to use \fB\-Ur\fR on files that were themselves linked
+with \fB\-Ur\fR; once the constructor table has been built, it cannot
+be added to.  Use \fB\-Ur\fR only for the last partial link, and
+\&\fB\-r\fR for the others.
+.IP "\fB\-\-orphan\-handling=\fR\fI\s-1MODE\s0\fR" 4
+.IX Item "--orphan-handling=MODE"
+Control how orphan sections are handled.  An orphan section is one not
+specifically mentioned in a linker script.
+.Sp
+\&\fI\s-1MODE\s0\fR can have any of the following values:
+.RS 4
+.ie n .IP """place""" 4
+.el .IP "\f(CWplace\fR" 4
+.IX Item "place"
+Orphan sections are placed into a suitable output section following
+the strategy described in \fBOrphan Sections\fR.  The option
+\&\fB\-\-unique\fR also affects how sections are placed.
+.ie n .IP """discard""" 4
+.el .IP "\f(CWdiscard\fR" 4
+.IX Item "discard"
+All orphan sections are discarded, by placing them in the
+\&\fB/DISCARD/\fR section.
+.ie n .IP """warn""" 4
+.el .IP "\f(CWwarn\fR" 4
+.IX Item "warn"
+The linker will place the orphan section as for \f(CW\*(C`place\*(C'\fR and also
+issue a warning.
+.ie n .IP """error""" 4
+.el .IP "\f(CWerror\fR" 4
+.IX Item "error"
+The linker will exit with an error if any orphan section is found.
+.RE
+.RS 4
+.Sp
+The default if \fB\-\-orphan\-handling\fR is not given is \f(CW\*(C`place\*(C'\fR.
+.RE
+.IP "\fB\-\-unique[=\fR\fI\s-1SECTION\s0\fR\fB]\fR" 4
+.IX Item "--unique[=SECTION]"
+Creates a separate output section for every input section matching
+\&\fI\s-1SECTION\s0\fR, or if the optional wildcard \fI\s-1SECTION\s0\fR argument is
+missing, for every orphan input section.  An orphan section is one not
+specifically mentioned in a linker script.  You may use this option
+multiple times on the command line;  It prevents the normal merging of
+input sections with the same name, overriding output section assignments
+in a linker script.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.IP "\fB\-V\fR" 4
+.IX Item "-V"
+.PD
+Display the version number for \fBld\fR.  The \fB\-V\fR option also
+lists the supported emulations.
+.IP "\fB\-x\fR" 4
+.IX Item "-x"
+.PD 0
+.IP "\fB\-\-discard\-all\fR" 4
+.IX Item "--discard-all"
+.PD
+Delete all local symbols.
+.IP "\fB\-X\fR" 4
+.IX Item "-X"
+.PD 0
+.IP "\fB\-\-discard\-locals\fR" 4
+.IX Item "--discard-locals"
+.PD
+Delete all temporary local symbols.  (These symbols start with
+system-specific local label prefixes, typically \fB.L\fR for \s-1ELF\s0 systems
+or \fBL\fR for traditional a.out systems.)
+.IP "\fB\-y\fR \fIsymbol\fR" 4
+.IX Item "-y symbol"
+.PD 0
+.IP "\fB\-\-trace\-symbol=\fR\fIsymbol\fR" 4
+.IX Item "--trace-symbol=symbol"
+.PD
+Print the name of each linked file in which \fIsymbol\fR appears.  This
+option may be given any number of times.  On many systems it is necessary
+to prepend an underscore.
+.Sp
+This option is useful when you have an undefined symbol in your link but
+don't know where the reference is coming from.
+.IP "\fB\-Y\fR \fIpath\fR" 4
+.IX Item "-Y path"
+Add \fIpath\fR to the default library search path.  This option exists
+for Solaris compatibility.
+.IP "\fB\-z\fR \fIkeyword\fR" 4
+.IX Item "-z keyword"
+The recognized keywords are:
+.RS 4
+.IP "\fBbndplt\fR" 4
+.IX Item "bndplt"
+Always generate \s-1BND\s0 prefix in \s-1PLT\s0 entries. Supported for Linux/x86_64.
+.IP "\fBcall\-nop=prefix\-addr\fR" 4
+.IX Item "call-nop=prefix-addr"
+.PD 0
+.IP "\fBcall\-nop=suffix\-nop\fR" 4
+.IX Item "call-nop=suffix-nop"
+.IP "\fBcall\-nop=prefix\-\fR\fIbyte\fR" 4
+.IX Item "call-nop=prefix-byte"
+.IP "\fBcall\-nop=suffix\-\fR\fIbyte\fR" 4
+.IX Item "call-nop=suffix-byte"
+.PD
+Specify the 1\-byte \f(CW\*(C`NOP\*(C'\fR padding when transforming indirect call
+to a locally defined function, foo, via its \s-1GOT\s0 slot.
+\&\fBcall\-nop=prefix\-addr\fR generates \f(CW\*(C`0x67 call foo\*(C'\fR.
+\&\fBcall\-nop=suffix\-nop\fR generates \f(CW\*(C`call foo 0x90\*(C'\fR.
+\&\fBcall\-nop=prefix\-\fR\fIbyte\fR generates \f(CW\*(C`\f(CIbyte\f(CW call foo\*(C'\fR.
+\&\fBcall\-nop=suffix\-\fR\fIbyte\fR generates \f(CW\*(C`call foo \f(CIbyte\f(CW\*(C'\fR.
+Supported for i386 and x86_64.
+.IP "\fBcombreloc\fR" 4
+.IX Item "combreloc"
+.PD 0
+.IP "\fBnocombreloc\fR" 4
+.IX Item "nocombreloc"
+.PD
+Combine multiple dynamic relocation sections and sort to improve
+dynamic symbol lookup caching.  Do not do this if \fBnocombreloc\fR.
+.IP "\fBcommon\fR" 4
+.IX Item "common"
+.PD 0
+.IP "\fBnocommon\fR" 4
+.IX Item "nocommon"
+.PD
+Generate common symbols with \s-1STT_COMMON\s0 type during a relocatable
+link.  Use \s-1STT_OBJECT\s0 type if \fBnocommon\fR.
+.IP "\fBcommon\-page\-size=\fR\fIvalue\fR" 4
+.IX Item "common-page-size=value"
+Set the page size most commonly used to \fIvalue\fR.  Memory image
+layout will be optimized to minimize memory pages if the system is
+using pages of this size.
+.IP "\fBdefs\fR" 4
+.IX Item "defs"
+Report unresolved symbol references from regular object files.  This
+is done even if the linker is creating a non-symbolic shared library.
+This option is the inverse of \fB\-z undefs\fR.
+.IP "\fBdynamic-undefined-weak\fR" 4
+.IX Item "dynamic-undefined-weak"
+.PD 0
+.IP "\fBnodynamic-undefined-weak\fR" 4
+.IX Item "nodynamic-undefined-weak"
+.PD
+Make undefined weak symbols dynamic when building a dynamic object,
+if they are referenced from a regular object file and not forced local
+by symbol visibility or versioning.  Do not make them dynamic if
+\&\fBnodynamic-undefined-weak\fR.  If neither option is given, a target
+may default to either option being in force, or make some other
+selection of undefined weak symbols dynamic.  Not all targets support
+these options.
+.IP "\fBexecstack\fR" 4
+.IX Item "execstack"
+Marks the object as requiring executable stack.
+.IP "\fBglobal\fR" 4
+.IX Item "global"
+This option is only meaningful when building a shared object.  It makes
+the symbols defined by this shared object available for symbol resolution
+of subsequently loaded libraries.
+.IP "\fBglobalaudit\fR" 4
+.IX Item "globalaudit"
+This option is only meaningful when building a dynamic executable.
+This option marks the executable as requiring global auditing by
+setting the \f(CW\*(C`DF_1_GLOBAUDIT\*(C'\fR bit in the \f(CW\*(C`DT_FLAGS_1\*(C'\fR dynamic
+tag.  Global auditing requires that any auditing library defined via
+the \fB\-\-depaudit\fR or \fB\-P\fR command-line options be run for
+all dynamic objects loaded by the application.
+.IP "\fBibtplt\fR" 4
+.IX Item "ibtplt"
+Generate Intel Indirect Branch Tracking (\s-1IBT\s0) enabled \s-1PLT\s0 entries.
+Supported for Linux/i386 and Linux/x86_64.
+.IP "\fBibt\fR" 4
+.IX Item "ibt"
+Generate \s-1GNU_PROPERTY_X86_FEATURE_1_IBT\s0 in .note.gnu.property section
+to indicate compatibility with \s-1IBT.\s0  This also implies \fBibtplt\fR.
+Supported for Linux/i386 and Linux/x86_64.
+.IP "\fBinitfirst\fR" 4
+.IX Item "initfirst"
+This option is only meaningful when building a shared object.
+It marks the object so that its runtime initialization will occur
+before the runtime initialization of any other objects brought into
+the process at the same time.  Similarly the runtime finalization of
+the object will occur after the runtime finalization of any other
+objects.
+.IP "\fBinterpose\fR" 4
+.IX Item "interpose"
+Specify that the dynamic loader should modify its symbol search order
+so that symbols in this shared library interpose all other shared
+libraries not so marked.
+.IP "\fBlazy\fR" 4
+.IX Item "lazy"
+When generating an executable or shared library, mark it to tell the
+dynamic linker to defer function call resolution to the point when
+the function is called (lazy binding), rather than at load time.
+Lazy binding is the default.
+.IP "\fBloadfltr\fR" 4
+.IX Item "loadfltr"
+Specify that the object's filters be processed immediately at runtime.
+.IP "\fBmax\-page\-size=\fR\fIvalue\fR" 4
+.IX Item "max-page-size=value"
+Set the maximum memory page size supported to \fIvalue\fR.
+.IP "\fBmuldefs\fR" 4
+.IX Item "muldefs"
+Allow multiple definitions.
+.IP "\fBnocopyreloc\fR" 4
+.IX Item "nocopyreloc"
+Disable linker generated .dynbss variables used in place of variables
+defined in shared libraries.  May result in dynamic text relocations.
+.IP "\fBnodefaultlib\fR" 4
+.IX Item "nodefaultlib"
+Specify that the dynamic loader search for dependencies of this object
+should ignore any default library search paths.
+.IP "\fBnodelete\fR" 4
+.IX Item "nodelete"
+Specify that the object shouldn't be unloaded at runtime.
+.IP "\fBnodlopen\fR" 4
+.IX Item "nodlopen"
+Specify that the object is not available to \f(CW\*(C`dlopen\*(C'\fR.
+.IP "\fBnodump\fR" 4
+.IX Item "nodump"
+Specify that the object can not be dumped by \f(CW\*(C`dldump\*(C'\fR.
+.IP "\fBnoexecstack\fR" 4
+.IX Item "noexecstack"
+Marks the object as not requiring executable stack.
+.IP "\fBnoextern-protected-data\fR" 4
+.IX Item "noextern-protected-data"
+Don't treat protected data symbols as external when building a shared
+library.  This option overrides the linker backend default.  It can be
+used to work around incorrect relocations against protected data symbols
+generated by compiler.  Updates on protected data symbols by another
+module aren't visible to the resulting shared library.  Supported for
+i386 and x86\-64.
+.IP "\fBnoreloc-overflow\fR" 4
+.IX Item "noreloc-overflow"
+Disable relocation overflow check.  This can be used to disable
+relocation overflow check if there will be no dynamic relocation
+overflow at run-time.  Supported for x86_64.
+.IP "\fBnow\fR" 4
+.IX Item "now"
+When generating an executable or shared library, mark it to tell the
+dynamic linker to resolve all symbols when the program is started, or
+when the shared library is loaded by dlopen, instead of deferring
+function call resolution to the point when the function is first
+called.
+.IP "\fBorigin\fR" 4
+.IX Item "origin"
+Specify that the object requires \fB\f(CB$ORIGIN\fB\fR handling in paths.
+.IP "\fBrelro\fR" 4
+.IX Item "relro"
+.PD 0
+.IP "\fBnorelro\fR" 4
+.IX Item "norelro"
+.PD
+Create an \s-1ELF\s0 \f(CW\*(C`PT_GNU_RELRO\*(C'\fR segment header in the object.  This
+specifies a memory segment that should be made read-only after
+relocation, if supported.  Specifying \fBcommon-page-size\fR smaller
+than the system page size will render this protection ineffective.
+Don't create an \s-1ELF\s0 \f(CW\*(C`PT_GNU_RELRO\*(C'\fR segment if \fBnorelro\fR.
+.IP "\fBseparate-code\fR" 4
+.IX Item "separate-code"
+.PD 0
+.IP "\fBnoseparate-code\fR" 4
+.IX Item "noseparate-code"
+.PD
+Create separate code \f(CW\*(C`PT_LOAD\*(C'\fR segment header in the object.  This
+specifies a memory segment that should contain only instructions and must
+be in wholly disjoint pages from any other data.  Don't create separate
+code \f(CW\*(C`PT_LOAD\*(C'\fR segment if \fBnoseparate-code\fR is used.
+.IP "\fBshstk\fR" 4
+.IX Item "shstk"
+Generate \s-1GNU_PROPERTY_X86_FEATURE_1_SHSTK\s0 in .note.gnu.property section
+to indicate compatibility with Intel Shadow Stack.  Supported for
+Linux/i386 and Linux/x86_64.
+.IP "\fBstack\-size=\fR\fIvalue\fR" 4
+.IX Item "stack-size=value"
+Specify a stack size for an \s-1ELF\s0 \f(CW\*(C`PT_GNU_STACK\*(C'\fR segment.
+Specifying zero will override any default non-zero sized
+\&\f(CW\*(C`PT_GNU_STACK\*(C'\fR segment creation.
+.IP "\fBtext\fR" 4
+.IX Item "text"
+.PD 0
+.IP "\fBnotext\fR" 4
+.IX Item "notext"
+.IP "\fBtextoff\fR" 4
+.IX Item "textoff"
+.PD
+Report an error if \s-1DT_TEXTREL\s0 is set, i.e., if the binary has dynamic
+relocations in read-only sections.  Don't report an error if
+\&\fBnotext\fR or \fBtextoff\fR.
+.IP "\fBundefs\fR" 4
+.IX Item "undefs"
+Do not report unresolved symbol references from regular object files,
+either when creating an executable, or when creating a shared library.
+This option is the inverse of \fB\-z defs\fR.
+.RE
+.RS 4
+.Sp
+Other keywords are ignored for Solaris compatibility.
+.RE
+.IP "\fB\-(\fR \fIarchives\fR \fB\-)\fR" 4
+.IX Item "-( archives -)"
+.PD 0
+.IP "\fB\-\-start\-group\fR \fIarchives\fR \fB\-\-end\-group\fR" 4
+.IX Item "--start-group archives --end-group"
+.PD
+The \fIarchives\fR should be a list of archive files.  They may be
+either explicit file names, or \fB\-l\fR options.
+.Sp
+The specified archives are searched repeatedly until no new undefined
+references are created.  Normally, an archive is searched only once in
+the order that it is specified on the command line.  If a symbol in that
+archive is needed to resolve an undefined symbol referred to by an
+object in an archive that appears later on the command line, the linker
+would not be able to resolve that reference.  By grouping the archives,
+they all be searched repeatedly until all possible references are
+resolved.
+.Sp
+Using this option has a significant performance cost.  It is best to use
+it only when there are unavoidable circular references between two or
+more archives.
+.IP "\fB\-\-accept\-unknown\-input\-arch\fR" 4
+.IX Item "--accept-unknown-input-arch"
+.PD 0
+.IP "\fB\-\-no\-accept\-unknown\-input\-arch\fR" 4
+.IX Item "--no-accept-unknown-input-arch"
+.PD
+Tells the linker to accept input files whose architecture cannot be
+recognised.  The assumption is that the user knows what they are doing
+and deliberately wants to link in these unknown input files.  This was
+the default behaviour of the linker, before release 2.14.  The default
+behaviour from release 2.14 onwards is to reject such input files, and
+so the \fB\-\-accept\-unknown\-input\-arch\fR option has been added to
+restore the old behaviour.
+.IP "\fB\-\-as\-needed\fR" 4
+.IX Item "--as-needed"
+.PD 0
+.IP "\fB\-\-no\-as\-needed\fR" 4
+.IX Item "--no-as-needed"
+.PD
+This option affects \s-1ELF DT_NEEDED\s0 tags for dynamic libraries mentioned
+on the command line after the \fB\-\-as\-needed\fR option.  Normally
+the linker will add a \s-1DT_NEEDED\s0 tag for each dynamic library mentioned
+on the command line, regardless of whether the library is actually
+needed or not.  \fB\-\-as\-needed\fR causes a \s-1DT_NEEDED\s0 tag to only be
+emitted for a library that \fIat that point in the link\fR satisfies a
+non-weak undefined symbol reference from a regular object file or, if
+the library is not found in the \s-1DT_NEEDED\s0 lists of other needed libraries, a
+non-weak undefined symbol reference from another needed dynamic library.
+Object files or libraries appearing on the command line \fIafter\fR
+the library in question do not affect whether the library is seen as
+needed.  This is similar to the rules for extraction of object files
+from archives.  \fB\-\-no\-as\-needed\fR restores the default behaviour.
+.IP "\fB\-\-add\-needed\fR" 4
+.IX Item "--add-needed"
+.PD 0
+.IP "\fB\-\-no\-add\-needed\fR" 4
+.IX Item "--no-add-needed"
+.PD
+These two options have been deprecated because of the similarity of
+their names to the \fB\-\-as\-needed\fR and \fB\-\-no\-as\-needed\fR
+options.  They have been replaced by \fB\-\-copy\-dt\-needed\-entries\fR
+and \fB\-\-no\-copy\-dt\-needed\-entries\fR.
+.IP "\fB\-assert\fR \fIkeyword\fR" 4
+.IX Item "-assert keyword"
+This option is ignored for SunOS compatibility.
+.IP "\fB\-Bdynamic\fR" 4
+.IX Item "-Bdynamic"
+.PD 0
+.IP "\fB\-dy\fR" 4
+.IX Item "-dy"
+.IP "\fB\-call_shared\fR" 4
+.IX Item "-call_shared"
+.PD
+Link against dynamic libraries.  This is only meaningful on platforms
+for which shared libraries are supported.  This option is normally the
+default on such platforms.  The different variants of this option are
+for compatibility with various systems.  You may use this option
+multiple times on the command line: it affects library searching for
+\&\fB\-l\fR options which follow it.
+.IP "\fB\-Bgroup\fR" 4
+.IX Item "-Bgroup"
+Set the \f(CW\*(C`DF_1_GROUP\*(C'\fR flag in the \f(CW\*(C`DT_FLAGS_1\*(C'\fR entry in the dynamic
+section.  This causes the runtime linker to handle lookups in this
+object and its dependencies to be performed only inside the group.
+\&\fB\-\-unresolved\-symbols=report\-all\fR is implied.  This option is
+only meaningful on \s-1ELF\s0 platforms which support shared libraries.
+.IP "\fB\-Bstatic\fR" 4
+.IX Item "-Bstatic"
+.PD 0
+.IP "\fB\-dn\fR" 4
+.IX Item "-dn"
+.IP "\fB\-non_shared\fR" 4
+.IX Item "-non_shared"
+.IP "\fB\-static\fR" 4
+.IX Item "-static"
+.PD
+Do not link against shared libraries.  This is only meaningful on
+platforms for which shared libraries are supported.  The different
+variants of this option are for compatibility with various systems.  You
+may use this option multiple times on the command line: it affects
+library searching for \fB\-l\fR options which follow it.  This
+option also implies \fB\-\-unresolved\-symbols=report\-all\fR.  This
+option can be used with \fB\-shared\fR.  Doing so means that a
+shared library is being created but that all of the library's external
+references must be resolved by pulling in entries from static
+libraries.
+.IP "\fB\-Bsymbolic\fR" 4
+.IX Item "-Bsymbolic"
+When creating a shared library, bind references to global symbols to the
+definition within the shared library, if any.  Normally, it is possible
+for a program linked against a shared library to override the definition
+within the shared library.  This option can also be used with the
+\&\fB\-\-export\-dynamic\fR option, when creating a position independent
+executable, to bind references to global symbols to the definition within
+the executable.  This option is only meaningful on \s-1ELF\s0 platforms which
+support shared libraries and position independent executables.
+.IP "\fB\-Bsymbolic\-functions\fR" 4
+.IX Item "-Bsymbolic-functions"
+When creating a shared library, bind references to global function
+symbols to the definition within the shared library, if any.
+This option can also be used with the \fB\-\-export\-dynamic\fR option,
+when creating a position independent executable, to bind references
+to global function symbols to the definition within the executable.
+This option is only meaningful on \s-1ELF\s0 platforms which support shared
+libraries and position independent executables.
+.IP "\fB\-\-dynamic\-list=\fR\fIdynamic-list-file\fR" 4
+.IX Item "--dynamic-list=dynamic-list-file"
+Specify the name of a dynamic list file to the linker.  This is
+typically used when creating shared libraries to specify a list of
+global symbols whose references shouldn't be bound to the definition
+within the shared library, or creating dynamically linked executables
+to specify a list of symbols which should be added to the symbol table
+in the executable.  This option is only meaningful on \s-1ELF\s0 platforms
+which support shared libraries.
+.Sp
+The format of the dynamic list is the same as the version node without
+scope and node name.  See \fB\s-1VERSION\s0\fR for more information.
+.IP "\fB\-\-dynamic\-list\-data\fR" 4
+.IX Item "--dynamic-list-data"
+Include all global data symbols to the dynamic list.
+.IP "\fB\-\-dynamic\-list\-cpp\-new\fR" 4
+.IX Item "--dynamic-list-cpp-new"
+Provide the builtin dynamic list for \*(C+ operator new and delete.  It
+is mainly useful for building shared libstdc++.
+.IP "\fB\-\-dynamic\-list\-cpp\-typeinfo\fR" 4
+.IX Item "--dynamic-list-cpp-typeinfo"
+Provide the builtin dynamic list for \*(C+ runtime type identification.
+.IP "\fB\-\-check\-sections\fR" 4
+.IX Item "--check-sections"
+.PD 0
+.IP "\fB\-\-no\-check\-sections\fR" 4
+.IX Item "--no-check-sections"
+.PD
+Asks the linker \fInot\fR to check section addresses after they have
+been assigned to see if there are any overlaps.  Normally the linker will
+perform this check, and if it finds any overlaps it will produce
+suitable error messages.  The linker does know about, and does make
+allowances for sections in overlays.  The default behaviour can be
+restored by using the command-line switch \fB\-\-check\-sections\fR.
+Section overlap is not usually checked for relocatable links.  You can
+force checking in that case by using the \fB\-\-check\-sections\fR
+option.
+.IP "\fB\-\-copy\-dt\-needed\-entries\fR" 4
+.IX Item "--copy-dt-needed-entries"
+.PD 0
+.IP "\fB\-\-no\-copy\-dt\-needed\-entries\fR" 4
+.IX Item "--no-copy-dt-needed-entries"
+.PD
+This option affects the treatment of dynamic libraries referred to
+by \s-1DT_NEEDED\s0 tags \fIinside\fR \s-1ELF\s0 dynamic libraries mentioned on the
+command line.  Normally the linker won't add a \s-1DT_NEEDED\s0 tag to the
+output binary for each library mentioned in a \s-1DT_NEEDED\s0 tag in an
+input dynamic library.  With \fB\-\-copy\-dt\-needed\-entries\fR
+specified on the command line however any dynamic libraries that
+follow it will have their \s-1DT_NEEDED\s0 entries added.  The default
+behaviour can be restored with \fB\-\-no\-copy\-dt\-needed\-entries\fR.
+.Sp
+This option also has an effect on the resolution of symbols in dynamic
+libraries.  With \fB\-\-copy\-dt\-needed\-entries\fR dynamic libraries
+mentioned on the command line will be recursively searched, following
+their \s-1DT_NEEDED\s0 tags to other libraries, in order to resolve symbols
+required by the output binary.  With the default setting however
+the searching of dynamic libraries that follow it will stop with the
+dynamic library itself.  No \s-1DT_NEEDED\s0 links will be traversed to resolve
+symbols.
+.IP "\fB\-\-cref\fR" 4
+.IX Item "--cref"
+Output a cross reference table.  If a linker map file is being
+generated, the cross reference table is printed to the map file.
+Otherwise, it is printed on the standard output.
+.Sp
+The format of the table is intentionally simple, so that it may be
+easily processed by a script if necessary.  The symbols are printed out,
+sorted by name.  For each symbol, a list of file names is given.  If the
+symbol is defined, the first file listed is the location of the
+definition.  If the symbol is defined as a common value then any files
+where this happens appear next.  Finally any files that reference the
+symbol are listed.
+.IP "\fB\-\-no\-define\-common\fR" 4
+.IX Item "--no-define-common"
+This option inhibits the assignment of addresses to common symbols.
+The script command \f(CW\*(C`INHIBIT_COMMON_ALLOCATION\*(C'\fR has the same effect.
+.Sp
+The \fB\-\-no\-define\-common\fR option allows decoupling
+the decision to assign addresses to Common symbols from the choice
+of the output file type; otherwise a non-Relocatable output type
+forces assigning addresses to Common symbols.
+Using \fB\-\-no\-define\-common\fR allows Common symbols that are referenced
+from a shared library to be assigned addresses only in the main program.
+This eliminates the unused duplicate space in the shared library,
+and also prevents any possible confusion over resolving to the wrong
+duplicate when there are many dynamic modules with specialized search
+paths for runtime symbol resolution.
+.IP "\fB\-\-force\-group\-allocation\fR" 4
+.IX Item "--force-group-allocation"
+This option causes the linker to place section group members like
+normal input sections, and to delete the section groups.  This is the
+default behaviour for a final link but this option can be used to
+change the behaviour of a relocatable link (\fB\-r\fR).  The script
+command \f(CW\*(C`FORCE_GROUP_ALLOCATION\*(C'\fR has the same
+effect.
+.IP "\fB\-\-defsym=\fR\fIsymbol\fR\fB=\fR\fIexpression\fR" 4
+.IX Item "--defsym=symbol=expression"
+Create a global symbol in the output file, containing the absolute
+address given by \fIexpression\fR.  You may use this option as many
+times as necessary to define multiple symbols in the command line.  A
+limited form of arithmetic is supported for the \fIexpression\fR in this
+context: you may give a hexadecimal constant or the name of an existing
+symbol, or use \f(CW\*(C`+\*(C'\fR and \f(CW\*(C`\-\*(C'\fR to add or subtract hexadecimal
+constants or symbols.  If you need more elaborate expressions, consider
+using the linker command language from a script.
+\&\fINote:\fR there should be no white space between \fIsymbol\fR, the
+equals sign ("\fB=\fR"), and \fIexpression\fR.
+.IP "\fB\-\-demangle[=\fR\fIstyle\fR\fB]\fR" 4
+.IX Item "--demangle[=style]"
+.PD 0
+.IP "\fB\-\-no\-demangle\fR" 4
+.IX Item "--no-demangle"
+.PD
+These options control whether to demangle symbol names in error messages
+and other output.  When the linker is told to demangle, it tries to
+present symbol names in a readable fashion: it strips leading
+underscores if they are used by the object file format, and converts \*(C+
+mangled symbol names into user readable names.  Different compilers have
+different mangling styles.  The optional demangling style argument can be used
+to choose an appropriate demangling style for your compiler.  The linker will
+demangle by default unless the environment variable \fB\s-1COLLECT_NO_DEMANGLE\s0\fR
+is set.  These options may be used to override the default.
+.IP "\fB\-I\fR\fIfile\fR" 4
+.IX Item "-Ifile"
+.PD 0
+.IP "\fB\-\-dynamic\-linker=\fR\fIfile\fR" 4
+.IX Item "--dynamic-linker=file"
+.PD
+Set the name of the dynamic linker.  This is only meaningful when
+generating dynamically linked \s-1ELF\s0 executables.  The default dynamic
+linker is normally correct; don't use this unless you know what you are
+doing.
+.IP "\fB\-\-no\-dynamic\-linker\fR" 4
+.IX Item "--no-dynamic-linker"
+When producing an executable file, omit the request for a dynamic
+linker to be used at load-time.  This is only meaningful for \s-1ELF\s0
+executables that contain dynamic relocations, and usually requires
+entry point code that is capable of processing these relocations.
+.IP "\fB\-\-embedded\-relocs\fR" 4
+.IX Item "--embedded-relocs"
+This option is similar to the \fB\-\-emit\-relocs\fR option except
+that the relocs are stored in a target specific section.  This option
+is only supported by the \fB\s-1BFIN\s0\fR, \fB\s-1CR16\s0\fR and \fIM68K\fR
+targets.
+.IP "\fB\-\-disable\-multiple\-abs\-defs\fR" 4
+.IX Item "--disable-multiple-abs-defs"
+Do not allow multiple definitions with symbols included
+in filename invoked by \-R or \-\-just\-symbols
+.IP "\fB\-\-fatal\-warnings\fR" 4
+.IX Item "--fatal-warnings"
+.PD 0
+.IP "\fB\-\-no\-fatal\-warnings\fR" 4
+.IX Item "--no-fatal-warnings"
+.PD
+Treat all warnings as errors.  The default behaviour can be restored
+with the option \fB\-\-no\-fatal\-warnings\fR.
+.IP "\fB\-\-force\-exe\-suffix\fR" 4
+.IX Item "--force-exe-suffix"
+Make sure that an output file has a .exe suffix.
+.Sp
+If a successfully built fully linked output file does not have a
+\&\f(CW\*(C`.exe\*(C'\fR or \f(CW\*(C`.dll\*(C'\fR suffix, this option forces the linker to copy
+the output file to one of the same name with a \f(CW\*(C`.exe\*(C'\fR suffix. This
+option is useful when using unmodified Unix makefiles on a Microsoft
+Windows host, since some versions of Windows won't run an image unless
+it ends in a \f(CW\*(C`.exe\*(C'\fR suffix.
+.IP "\fB\-\-gc\-sections\fR" 4
+.IX Item "--gc-sections"
+.PD 0
+.IP "\fB\-\-no\-gc\-sections\fR" 4
+.IX Item "--no-gc-sections"
+.PD
+Enable garbage collection of unused input sections.  It is ignored on
+targets that do not support this option.  The default behaviour (of not
+performing this garbage collection) can be restored by specifying
+\&\fB\-\-no\-gc\-sections\fR on the command line.  Note that garbage
+collection for \s-1COFF\s0 and \s-1PE\s0 format targets is supported, but the
+implementation is currently considered to be experimental.
+.Sp
+\&\fB\-\-gc\-sections\fR decides which input sections are used by
+examining symbols and relocations.  The section containing the entry
+symbol and all sections containing symbols undefined on the
+command-line will be kept, as will sections containing symbols
+referenced by dynamic objects.  Note that when building shared
+libraries, the linker must assume that any visible symbol is
+referenced.  Once this initial set of sections has been determined,
+the linker recursively marks as used any section referenced by their
+relocations.  See \fB\-\-entry\fR, \fB\-\-undefined\fR, and
+\&\fB\-\-gc\-keep\-exported\fR.
+.Sp
+This option can be set when doing a partial link (enabled with option
+\&\fB\-r\fR).  In this case the root of symbols kept must be explicitly
+specified either by one of the options \fB\-\-entry\fR,
+\&\fB\-\-undefined\fR, or \fB\-\-gc\-keep\-exported\fR or by a \f(CW\*(C`ENTRY\*(C'\fR
+command in the linker script.
+.IP "\fB\-\-print\-gc\-sections\fR" 4
+.IX Item "--print-gc-sections"
+.PD 0
+.IP "\fB\-\-no\-print\-gc\-sections\fR" 4
+.IX Item "--no-print-gc-sections"
+.PD
+List all sections removed by garbage collection.  The listing is
+printed on stderr.  This option is only effective if garbage
+collection has been enabled via the \fB\-\-gc\-sections\fR) option.  The
+default behaviour (of not listing the sections that are removed) can
+be restored by specifying \fB\-\-no\-print\-gc\-sections\fR on the command
+line.
+.IP "\fB\-\-gc\-keep\-exported\fR" 4
+.IX Item "--gc-keep-exported"
+When \fB\-\-gc\-sections\fR is enabled, this option prevents garbage
+collection of unused input sections that contain global symbols having
+default or protected visibility.  This option is intended to be used for
+executables where unreferenced sections would otherwise be garbage
+collected regardless of the external visibility of contained symbols.
+Note that this option has no effect when linking shared objects since
+it is already the default behaviour.  This option is only supported for
+\&\s-1ELF\s0 format targets.
+.IP "\fB\-\-print\-output\-format\fR" 4
+.IX Item "--print-output-format"
+Print the name of the default output format (perhaps influenced by
+other command-line options).  This is the string that would appear
+in an \f(CW\*(C`OUTPUT_FORMAT\*(C'\fR linker script command.
+.IP "\fB\-\-print\-memory\-usage\fR" 4
+.IX Item "--print-memory-usage"
+Print used size, total size and used size of memory regions created with
+the \fB\s-1MEMORY\s0\fR command.  This is useful on embedded targets to have a
+quick view of amount of free memory.  The format of the output has one
+headline and one line per region.  It is both human readable and easily
+parsable by tools.  Here is an example of an output:
+.Sp
+.Vb 3
+\&        Memory region         Used Size  Region Size  %age Used
+\&                     ROM:        256 KB         1 MB     25.00%
+\&                     RAM:          32 B         2 GB      0.00%
+.Ve
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of the command-line options on the standard output and exit.
+.IP "\fB\-\-target\-help\fR" 4
+.IX Item "--target-help"
+Print a summary of all target specific options on the standard output and exit.
+.IP "\fB\-Map=\fR\fImapfile\fR" 4
+.IX Item "-Map=mapfile"
+Print a link map to the file \fImapfile\fR.  See the description of the
+\&\fB\-M\fR option, above.
+.IP "\fB\-\-no\-keep\-memory\fR" 4
+.IX Item "--no-keep-memory"
+\&\fBld\fR normally optimizes for speed over memory usage by caching the
+symbol tables of input files in memory.  This option tells \fBld\fR to
+instead optimize for memory usage, by rereading the symbol tables as
+necessary.  This may be required if \fBld\fR runs out of memory space
+while linking a large executable.
+.IP "\fB\-\-no\-undefined\fR" 4
+.IX Item "--no-undefined"
+.PD 0
+.IP "\fB\-z defs\fR" 4
+.IX Item "-z defs"
+.PD
+Report unresolved symbol references from regular object files.  This
+is done even if the linker is creating a non-symbolic shared library.
+The switch \fB\-\-[no\-]allow\-shlib\-undefined\fR controls the
+behaviour for reporting unresolved references found in shared
+libraries being linked in.
+.Sp
+The effects of this option can be reverted by using \f(CW\*(C`\-z undefs\*(C'\fR.
+.IP "\fB\-\-allow\-multiple\-definition\fR" 4
+.IX Item "--allow-multiple-definition"
+.PD 0
+.IP "\fB\-z muldefs\fR" 4
+.IX Item "-z muldefs"
+.PD
+Normally when a symbol is defined multiple times, the linker will
+report a fatal error. These options allow multiple definitions and the
+first definition will be used.
+.IP "\fB\-\-allow\-shlib\-undefined\fR" 4
+.IX Item "--allow-shlib-undefined"
+.PD 0
+.IP "\fB\-\-no\-allow\-shlib\-undefined\fR" 4
+.IX Item "--no-allow-shlib-undefined"
+.PD
+Allows or disallows undefined symbols in shared libraries.
+This switch is similar to \fB\-\-no\-undefined\fR except that it
+determines the behaviour when the undefined symbols are in a
+shared library rather than a regular object file.  It does not affect
+how undefined symbols in regular object files are handled.
+.Sp
+The default behaviour is to report errors for any undefined symbols
+referenced in shared libraries if the linker is being used to create
+an executable, but to allow them if the linker is being used to create
+a shared library.
+.Sp
+The reasons for allowing undefined symbol references in shared
+libraries specified at link time are that:
+.RS 4
+.IP "\(bu" 4
+A shared library specified at link time may not be the same as the one
+that is available at load time, so the symbol might actually be
+resolvable at load time.
+.IP "\(bu" 4
+There are some operating systems, eg BeOS and \s-1HPPA,\s0 where undefined
+symbols in shared libraries are normal.
+.Sp
+The BeOS kernel for example patches shared libraries at load time to
+select whichever function is most appropriate for the current
+architecture.  This is used, for example, to dynamically select an
+appropriate memset function.
+.RE
+.RS 4
+.RE
+.IP "\fB\-\-no\-undefined\-version\fR" 4
+.IX Item "--no-undefined-version"
+Normally when a symbol has an undefined version, the linker will ignore
+it. This option disallows symbols with undefined version and a fatal error
+will be issued instead.
+.IP "\fB\-\-default\-symver\fR" 4
+.IX Item "--default-symver"
+Create and use a default symbol version (the soname) for unversioned
+exported symbols.
+.IP "\fB\-\-default\-imported\-symver\fR" 4
+.IX Item "--default-imported-symver"
+Create and use a default symbol version (the soname) for unversioned
+imported symbols.
+.IP "\fB\-\-no\-warn\-mismatch\fR" 4
+.IX Item "--no-warn-mismatch"
+Normally \fBld\fR will give an error if you try to link together input
+files that are mismatched for some reason, perhaps because they have
+been compiled for different processors or for different endiannesses.
+This option tells \fBld\fR that it should silently permit such possible
+errors.  This option should only be used with care, in cases when you
+have taken some special action that ensures that the linker errors are
+inappropriate.
+.IP "\fB\-\-no\-warn\-search\-mismatch\fR" 4
+.IX Item "--no-warn-search-mismatch"
+Normally \fBld\fR will give a warning if it finds an incompatible
+library during a library search.  This option silences the warning.
+.IP "\fB\-\-no\-whole\-archive\fR" 4
+.IX Item "--no-whole-archive"
+Turn off the effect of the \fB\-\-whole\-archive\fR option for subsequent
+archive files.
+.IP "\fB\-\-noinhibit\-exec\fR" 4
+.IX Item "--noinhibit-exec"
+Retain the executable output file whenever it is still usable.
+Normally, the linker will not produce an output file if it encounters
+errors during the link process; it exits without writing an output file
+when it issues any error whatsoever.
+.IP "\fB\-nostdlib\fR" 4
+.IX Item "-nostdlib"
+Only search library directories explicitly specified on the
+command line.  Library directories specified in linker scripts
+(including linker scripts specified on the command line) are ignored.
+.IP "\fB\-\-oformat=\fR\fIoutput-format\fR" 4
+.IX Item "--oformat=output-format"
+\&\fBld\fR may be configured to support more than one kind of object
+file.  If your \fBld\fR is configured this way, you can use the
+\&\fB\-\-oformat\fR option to specify the binary format for the output
+object file.  Even when \fBld\fR is configured to support alternative
+object formats, you don't usually need to specify this, as \fBld\fR
+should be configured to produce as a default output format the most
+usual format on each machine.  \fIoutput-format\fR is a text string, the
+name of a particular format supported by the \s-1BFD\s0 libraries.  (You can
+list the available binary formats with \fBobjdump \-i\fR.)  The script
+command \f(CW\*(C`OUTPUT_FORMAT\*(C'\fR can also specify the output format, but
+this option overrides it.
+.IP "\fB\-\-out\-implib\fR \fIfile\fR" 4
+.IX Item "--out-implib file"
+Create an import library in \fIfile\fR corresponding to the executable
+the linker is generating (eg. a \s-1DLL\s0 or \s-1ELF\s0 program).  This import
+library (which should be called \f(CW\*(C`*.dll.a\*(C'\fR or \f(CW\*(C`*.a\*(C'\fR for DLLs)
+may be used to link clients against the generated executable; this
+behaviour makes it possible to skip a separate import library creation
+step (eg. \f(CW\*(C`dlltool\*(C'\fR for DLLs).  This option is only available for
+the i386 \s-1PE\s0 and \s-1ELF\s0 targetted ports of the linker.
+.IP "\fB\-pie\fR" 4
+.IX Item "-pie"
+.PD 0
+.IP "\fB\-\-pic\-executable\fR" 4
+.IX Item "--pic-executable"
+.PD
+Create a position independent executable.  This is currently only supported on
+\&\s-1ELF\s0 platforms.  Position independent executables are similar to shared
+libraries in that they are relocated by the dynamic linker to the virtual
+address the \s-1OS\s0 chooses for them (which can vary between invocations).  Like
+normal dynamically linked executables they can be executed and symbols
+defined in the executable cannot be overridden by shared libraries.
+.IP "\fB\-qmagic\fR" 4
+.IX Item "-qmagic"
+This option is ignored for Linux compatibility.
+.IP "\fB\-Qy\fR" 4
+.IX Item "-Qy"
+This option is ignored for \s-1SVR4\s0 compatibility.
+.IP "\fB\-\-relax\fR" 4
+.IX Item "--relax"
+.PD 0
+.IP "\fB\-\-no\-relax\fR" 4
+.IX Item "--no-relax"
+.PD
+An option with machine dependent effects.
+This option is only supported on a few targets.
+.Sp
+On some platforms the \fB\-\-relax\fR option performs target specific,
+global optimizations that become possible when the linker resolves
+addressing in the program, such as relaxing address modes,
+synthesizing new instructions, selecting shorter version of current
+instructions, and combining constant values.
+.Sp
+On some platforms these link time global optimizations may make symbolic
+debugging of the resulting executable impossible.
+This is known to be the case for the Matsushita \s-1MN10200\s0 and \s-1MN10300\s0
+family of processors.
+.Sp
+On platforms where this is not supported, \fB\-\-relax\fR is accepted,
+but ignored.
+.Sp
+On platforms where \fB\-\-relax\fR is accepted the option
+\&\fB\-\-no\-relax\fR can be used to disable the feature.
+.IP "\fB\-\-retain\-symbols\-file=\fR\fIfilename\fR" 4
+.IX Item "--retain-symbols-file=filename"
+Retain \fIonly\fR the symbols listed in the file \fIfilename\fR,
+discarding all others.  \fIfilename\fR is simply a flat file, with one
+symbol name per line.  This option is especially useful in environments
+(such as VxWorks)
+where a large global symbol table is accumulated gradually, to conserve
+run-time memory.
+.Sp
+\&\fB\-\-retain\-symbols\-file\fR does \fInot\fR discard undefined symbols,
+or symbols needed for relocations.
+.Sp
+You may only specify \fB\-\-retain\-symbols\-file\fR once in the command
+line.  It overrides \fB\-s\fR and \fB\-S\fR.
+.IP "\fB\-rpath=\fR\fIdir\fR" 4
+.IX Item "-rpath=dir"
+Add a directory to the runtime library search path.  This is used when
+linking an \s-1ELF\s0 executable with shared objects.  All \fB\-rpath\fR
+arguments are concatenated and passed to the runtime linker, which uses
+them to locate shared objects at runtime.  The \fB\-rpath\fR option is
+also used when locating shared objects which are needed by shared
+objects explicitly included in the link; see the description of the
+\&\fB\-rpath\-link\fR option.  If \fB\-rpath\fR is not used when linking an
+\&\s-1ELF\s0 executable, the contents of the environment variable
+\&\f(CW\*(C`LD_RUN_PATH\*(C'\fR will be used if it is defined.
+.Sp
+The \fB\-rpath\fR option may also be used on SunOS.  By default, on
+SunOS, the linker will form a runtime search path out of all the
+\&\fB\-L\fR options it is given.  If a \fB\-rpath\fR option is used, the
+runtime search path will be formed exclusively using the \fB\-rpath\fR
+options, ignoring the \fB\-L\fR options.  This can be useful when using
+gcc, which adds many \fB\-L\fR options which may be on \s-1NFS\s0 mounted
+file systems.
+.Sp
+For compatibility with other \s-1ELF\s0 linkers, if the \fB\-R\fR option is
+followed by a directory name, rather than a file name, it is treated as
+the \fB\-rpath\fR option.
+.IP "\fB\-rpath\-link=\fR\fIdir\fR" 4
+.IX Item "-rpath-link=dir"
+When using \s-1ELF\s0 or SunOS, one shared library may require another.  This
+happens when an \f(CW\*(C`ld \-shared\*(C'\fR link includes a shared library as one
+of the input files.
+.Sp
+When the linker encounters such a dependency when doing a non-shared,
+non-relocatable link, it will automatically try to locate the required
+shared library and include it in the link, if it is not included
+explicitly.  In such a case, the \fB\-rpath\-link\fR option
+specifies the first set of directories to search.  The
+\&\fB\-rpath\-link\fR option may specify a sequence of directory names
+either by specifying a list of names separated by colons, or by
+appearing multiple times.
+.Sp
+The tokens \fI\f(CI$ORIGIN\fI\fR and \fI\f(CI$LIB\fI\fR can appear in these search
+directories.  They will be replaced by the full path to the directory
+containing the program or shared object in the case of \fI\f(CI$ORIGIN\fI\fR
+and either \fBlib\fR \- for 32\-bit binaries \- or \fBlib64\fR \- for
+64\-bit binaries \- in the case of \fI\f(CI$LIB\fI\fR.
+.Sp
+The alternative form of these tokens \- \fI${\s-1ORIGIN\s0}\fR and
+\&\fI${\s-1LIB\s0}\fR can also be used.  The token \fI\f(CI$PLATFORM\fI\fR is not
+supported.
+.Sp
+This option should be used with caution as it overrides the search path
+that may have been hard compiled into a shared library. In such a case it
+is possible to use unintentionally a different search path than the
+runtime linker would do.
+.Sp
+The linker uses the following search paths to locate required shared
+libraries:
+.RS 4
+.IP "1." 4
+Any directories specified by \fB\-rpath\-link\fR options.
+.IP "2." 4
+Any directories specified by \fB\-rpath\fR options.  The difference
+between \fB\-rpath\fR and \fB\-rpath\-link\fR is that directories
+specified by \fB\-rpath\fR options are included in the executable and
+used at runtime, whereas the \fB\-rpath\-link\fR option is only effective
+at link time. Searching \fB\-rpath\fR in this way is only supported
+by native linkers and cross linkers which have been configured with
+the \fB\-\-with\-sysroot\fR option.
+.IP "3." 4
+On an \s-1ELF\s0 system, for native linkers, if the \fB\-rpath\fR and
+\&\fB\-rpath\-link\fR options were not used, search the contents of the
+environment variable \f(CW\*(C`LD_RUN_PATH\*(C'\fR.
+.IP "4." 4
+On SunOS, if the \fB\-rpath\fR option was not used, search any
+directories specified using \fB\-L\fR options.
+.IP "5." 4
+For a native linker, search the contents of the environment
+variable \f(CW\*(C`LD_LIBRARY_PATH\*(C'\fR.
+.IP "6." 4
+For a native \s-1ELF\s0 linker, the directories in \f(CW\*(C`DT_RUNPATH\*(C'\fR or
+\&\f(CW\*(C`DT_RPATH\*(C'\fR of a shared library are searched for shared
+libraries needed by it. The \f(CW\*(C`DT_RPATH\*(C'\fR entries are ignored if
+\&\f(CW\*(C`DT_RUNPATH\*(C'\fR entries exist.
+.IP "7." 4
+The default directories, normally \fI/lib\fR and \fI/usr/lib\fR.
+.IP "8." 4
+For a native linker on an \s-1ELF\s0 system, if the file \fI/etc/ld.so.conf\fR
+exists, the list of directories found in that file.
+.RE
+.RS 4
+.Sp
+If the required shared library is not found, the linker will issue a
+warning and continue with the link.
+.RE
+.IP "\fB\-shared\fR" 4
+.IX Item "-shared"
+.PD 0
+.IP "\fB\-Bshareable\fR" 4
+.IX Item "-Bshareable"
+.PD
+Create a shared library.  This is currently only supported on \s-1ELF, XCOFF\s0
+and SunOS platforms.  On SunOS, the linker will automatically create a
+shared library if the \fB\-e\fR option is not used and there are
+undefined symbols in the link.
+.IP "\fB\-\-sort\-common\fR" 4
+.IX Item "--sort-common"
+.PD 0
+.IP "\fB\-\-sort\-common=ascending\fR" 4
+.IX Item "--sort-common=ascending"
+.IP "\fB\-\-sort\-common=descending\fR" 4
+.IX Item "--sort-common=descending"
+.PD
+This option tells \fBld\fR to sort the common symbols by alignment in
+ascending or descending order when it places them in the appropriate output
+sections.  The symbol alignments considered are sixteen-byte or larger,
+eight-byte, four-byte, two-byte, and one-byte. This is to prevent gaps
+between symbols due to alignment constraints.  If no sorting order is
+specified, then descending order is assumed.
+.IP "\fB\-\-sort\-section=name\fR" 4
+.IX Item "--sort-section=name"
+This option will apply \f(CW\*(C`SORT_BY_NAME\*(C'\fR to all wildcard section
+patterns in the linker script.
+.IP "\fB\-\-sort\-section=alignment\fR" 4
+.IX Item "--sort-section=alignment"
+This option will apply \f(CW\*(C`SORT_BY_ALIGNMENT\*(C'\fR to all wildcard section
+patterns in the linker script.
+.IP "\fB\-\-spare\-dynamic\-tags=\fR\fIcount\fR" 4
+.IX Item "--spare-dynamic-tags=count"
+This option specifies the number of empty slots to leave in the
+\&.dynamic section of \s-1ELF\s0 shared objects.  Empty slots may be needed by
+post processing tools, such as the prelinker.  The default is 5.
+.IP "\fB\-\-split\-by\-file[=\fR\fIsize\fR\fB]\fR" 4
+.IX Item "--split-by-file[=size]"
+Similar to \fB\-\-split\-by\-reloc\fR but creates a new output section for
+each input file when \fIsize\fR is reached.  \fIsize\fR defaults to a
+size of 1 if not given.
+.IP "\fB\-\-split\-by\-reloc[=\fR\fIcount\fR\fB]\fR" 4
+.IX Item "--split-by-reloc[=count]"
+Tries to creates extra sections in the output file so that no single
+output section in the file contains more than \fIcount\fR relocations.
+This is useful when generating huge relocatable files for downloading into
+certain real time kernels with the \s-1COFF\s0 object file format; since \s-1COFF\s0
+cannot represent more than 65535 relocations in a single section.  Note
+that this will fail to work with object file formats which do not
+support arbitrary sections.  The linker will not split up individual
+input sections for redistribution, so if a single input section contains
+more than \fIcount\fR relocations one output section will contain that
+many relocations.  \fIcount\fR defaults to a value of 32768.
+.IP "\fB\-\-stats\fR" 4
+.IX Item "--stats"
+Compute and display statistics about the operation of the linker, such
+as execution time and memory usage.
+.IP "\fB\-\-sysroot=\fR\fIdirectory\fR" 4
+.IX Item "--sysroot=directory"
+Use \fIdirectory\fR as the location of the sysroot, overriding the
+configure-time default.  This option is only supported by linkers
+that were configured using \fB\-\-with\-sysroot\fR.
+.IP "\fB\-\-task\-link\fR" 4
+.IX Item "--task-link"
+This is used by \s-1COFF/PE\s0 based targets to create a task-linked object
+file where all of the global symbols have been converted to statics.
+.IP "\fB\-\-traditional\-format\fR" 4
+.IX Item "--traditional-format"
+For some targets, the output of \fBld\fR is different in some ways from
+the output of some existing linker.  This switch requests \fBld\fR to
+use the traditional format instead.
+.Sp
+For example, on SunOS, \fBld\fR combines duplicate entries in the
+symbol string table.  This can reduce the size of an output file with
+full debugging information by over 30 percent.  Unfortunately, the SunOS
+\&\f(CW\*(C`dbx\*(C'\fR program can not read the resulting program (\f(CW\*(C`gdb\*(C'\fR has no
+trouble).  The \fB\-\-traditional\-format\fR switch tells \fBld\fR to not
+combine duplicate entries.
+.IP "\fB\-\-section\-start=\fR\fIsectionname\fR\fB=\fR\fIorg\fR" 4
+.IX Item "--section-start=sectionname=org"
+Locate a section in the output file at the absolute
+address given by \fIorg\fR.  You may use this option as many
+times as necessary to locate multiple sections in the command
+line.
+\&\fIorg\fR must be a single hexadecimal integer;
+for compatibility with other linkers, you may omit the leading
+\&\fB0x\fR usually associated with hexadecimal values.  \fINote:\fR there
+should be no white space between \fIsectionname\fR, the equals
+sign ("\fB=\fR"), and \fIorg\fR.
+.IP "\fB\-Tbss=\fR\fIorg\fR" 4
+.IX Item "-Tbss=org"
+.PD 0
+.IP "\fB\-Tdata=\fR\fIorg\fR" 4
+.IX Item "-Tdata=org"
+.IP "\fB\-Ttext=\fR\fIorg\fR" 4
+.IX Item "-Ttext=org"
+.PD
+Same as \fB\-\-section\-start\fR, with \f(CW\*(C`.bss\*(C'\fR, \f(CW\*(C`.data\*(C'\fR or
+\&\f(CW\*(C`.text\*(C'\fR as the \fIsectionname\fR.
+.IP "\fB\-Ttext\-segment=\fR\fIorg\fR" 4
+.IX Item "-Ttext-segment=org"
+When creating an \s-1ELF\s0 executable, it will set the address of the first
+byte of the text segment.
+.IP "\fB\-Trodata\-segment=\fR\fIorg\fR" 4
+.IX Item "-Trodata-segment=org"
+When creating an \s-1ELF\s0 executable or shared object for a target where
+the read-only data is in its own segment separate from the executable
+text, it will set the address of the first byte of the read-only data segment.
+.IP "\fB\-Tldata\-segment=\fR\fIorg\fR" 4
+.IX Item "-Tldata-segment=org"
+When creating an \s-1ELF\s0 executable or shared object for x86\-64 medium memory
+model, it will set the address of the first byte of the ldata segment.
+.IP "\fB\-\-unresolved\-symbols=\fR\fImethod\fR" 4
+.IX Item "--unresolved-symbols=method"
+Determine how to handle unresolved symbols.  There are four possible
+values for \fBmethod\fR:
+.RS 4
+.IP "\fBignore-all\fR" 4
+.IX Item "ignore-all"
+Do not report any unresolved symbols.
+.IP "\fBreport-all\fR" 4
+.IX Item "report-all"
+Report all unresolved symbols.  This is the default.
+.IP "\fBignore-in-object-files\fR" 4
+.IX Item "ignore-in-object-files"
+Report unresolved symbols that are contained in shared libraries, but
+ignore them if they come from regular object files.
+.IP "\fBignore-in-shared-libs\fR" 4
+.IX Item "ignore-in-shared-libs"
+Report unresolved symbols that come from regular object files, but
+ignore them if they come from shared libraries.  This can be useful
+when creating a dynamic binary and it is known that all the shared
+libraries that it should be referencing are included on the linker's
+command line.
+.RE
+.RS 4
+.Sp
+The behaviour for shared libraries on their own can also be controlled
+by the \fB\-\-[no\-]allow\-shlib\-undefined\fR option.
+.Sp
+Normally the linker will generate an error message for each reported
+unresolved symbol but the option \fB\-\-warn\-unresolved\-symbols\fR
+can change this to a warning.
+.RE
+.IP "\fB\-\-dll\-verbose\fR" 4
+.IX Item "--dll-verbose"
+.PD 0
+.IP "\fB\-\-verbose[=\fR\fI\s-1NUMBER\s0\fR\fB]\fR" 4
+.IX Item "--verbose[=NUMBER]"
+.PD
+Display the version number for \fBld\fR and list the linker emulations
+supported.  Display which input files can and cannot be opened.  Display
+the linker script being used by the linker. If the optional \fI\s-1NUMBER\s0\fR
+argument > 1, plugin symbol status will also be displayed.
+.IP "\fB\-\-version\-script=\fR\fIversion-scriptfile\fR" 4
+.IX Item "--version-script=version-scriptfile"
+Specify the name of a version script to the linker.  This is typically
+used when creating shared libraries to specify additional information
+about the version hierarchy for the library being created.  This option
+is only fully supported on \s-1ELF\s0 platforms which support shared libraries;
+see \fB\s-1VERSION\s0\fR.  It is partially supported on \s-1PE\s0 platforms, which can
+use version scripts to filter symbol visibility in auto-export mode: any
+symbols marked \fBlocal\fR in the version script will not be exported.
+.IP "\fB\-\-warn\-common\fR" 4
+.IX Item "--warn-common"
+Warn when a common symbol is combined with another common symbol or with
+a symbol definition.  Unix linkers allow this somewhat sloppy practice,
+but linkers on some other operating systems do not.  This option allows
+you to find potential problems from combining global symbols.
+Unfortunately, some C libraries use this practice, so you may get some
+warnings about symbols in the libraries as well as in your programs.
+.Sp
+There are three kinds of global symbols, illustrated here by C examples:
+.RS 4
+.IP "\fBint i = 1;\fR" 4
+.IX Item "int i = 1;"
+A definition, which goes in the initialized data section of the output
+file.
+.IP "\fBextern int i;\fR" 4
+.IX Item "extern int i;"
+An undefined reference, which does not allocate space.
+There must be either a definition or a common symbol for the
+variable somewhere.
+.IP "\fBint i;\fR" 4
+.IX Item "int i;"
+A common symbol.  If there are only (one or more) common symbols for a
+variable, it goes in the uninitialized data area of the output file.
+The linker merges multiple common symbols for the same variable into a
+single symbol.  If they are of different sizes, it picks the largest
+size.  The linker turns a common symbol into a declaration, if there is
+a definition of the same variable.
+.RE
+.RS 4
+.Sp
+The \fB\-\-warn\-common\fR option can produce five kinds of warnings.
+Each warning consists of a pair of lines: the first describes the symbol
+just encountered, and the second describes the previous symbol
+encountered with the same name.  One or both of the two symbols will be
+a common symbol.
+.IP "1." 4
+Turning a common symbol into a reference, because there is already a
+definition for the symbol.
+.Sp
+.Vb 3
+\&        <file>(<section>): warning: common of \`<symbol>\*(Aq
+\&           overridden by definition
+\&        <file>(<section>): warning: defined here
+.Ve
+.IP "2." 4
+Turning a common symbol into a reference, because a later definition for
+the symbol is encountered.  This is the same as the previous case,
+except that the symbols are encountered in a different order.
+.Sp
+.Vb 3
+\&        <file>(<section>): warning: definition of \`<symbol>\*(Aq
+\&           overriding common
+\&        <file>(<section>): warning: common is here
+.Ve
+.IP "3." 4
+Merging a common symbol with a previous same-sized common symbol.
+.Sp
+.Vb 3
+\&        <file>(<section>): warning: multiple common
+\&           of \`<symbol>\*(Aq
+\&        <file>(<section>): warning: previous common is here
+.Ve
+.IP "4." 4
+Merging a common symbol with a previous larger common symbol.
+.Sp
+.Vb 3
+\&        <file>(<section>): warning: common of \`<symbol>\*(Aq
+\&           overridden by larger common
+\&        <file>(<section>): warning: larger common is here
+.Ve
+.IP "5." 4
+Merging a common symbol with a previous smaller common symbol.  This is
+the same as the previous case, except that the symbols are
+encountered in a different order.
+.Sp
+.Vb 3
+\&        <file>(<section>): warning: common of \`<symbol>\*(Aq
+\&           overriding smaller common
+\&        <file>(<section>): warning: smaller common is here
+.Ve
+.RE
+.RS 4
+.RE
+.IP "\fB\-\-warn\-constructors\fR" 4
+.IX Item "--warn-constructors"
+Warn if any global constructors are used.  This is only useful for a few
+object file formats.  For formats like \s-1COFF\s0 or \s-1ELF,\s0 the linker can not
+detect the use of global constructors.
+.IP "\fB\-\-warn\-multiple\-gp\fR" 4
+.IX Item "--warn-multiple-gp"
+Warn if multiple global pointer values are required in the output file.
+This is only meaningful for certain processors, such as the Alpha.
+Specifically, some processors put large-valued constants in a special
+section.  A special register (the global pointer) points into the middle
+of this section, so that constants can be loaded efficiently via a
+base-register relative addressing mode.  Since the offset in
+base-register relative mode is fixed and relatively small (e.g., 16
+bits), this limits the maximum size of the constant pool.  Thus, in
+large programs, it is often necessary to use multiple global pointer
+values in order to be able to address all possible constants.  This
+option causes a warning to be issued whenever this case occurs.
+.IP "\fB\-\-warn\-once\fR" 4
+.IX Item "--warn-once"
+Only warn once for each undefined symbol, rather than once per module
+which refers to it.
+.IP "\fB\-\-warn\-section\-align\fR" 4
+.IX Item "--warn-section-align"
+Warn if the address of an output section is changed because of
+alignment.  Typically, the alignment will be set by an input section.
+The address will only be changed if it not explicitly specified; that
+is, if the \f(CW\*(C`SECTIONS\*(C'\fR command does not specify a start address for
+the section.
+.IP "\fB\-\-warn\-shared\-textrel\fR" 4
+.IX Item "--warn-shared-textrel"
+Warn if the linker adds a \s-1DT_TEXTREL\s0 to a shared object.
+.IP "\fB\-\-warn\-alternate\-em\fR" 4
+.IX Item "--warn-alternate-em"
+Warn if an object has alternate \s-1ELF\s0 machine code.
+.IP "\fB\-\-warn\-unresolved\-symbols\fR" 4
+.IX Item "--warn-unresolved-symbols"
+If the linker is going to report an unresolved symbol (see the option
+\&\fB\-\-unresolved\-symbols\fR) it will normally generate an error.
+This option makes it generate a warning instead.
+.IP "\fB\-\-error\-unresolved\-symbols\fR" 4
+.IX Item "--error-unresolved-symbols"
+This restores the linker's default behaviour of generating errors when
+it is reporting unresolved symbols.
+.IP "\fB\-\-whole\-archive\fR" 4
+.IX Item "--whole-archive"
+For each archive mentioned on the command line after the
+\&\fB\-\-whole\-archive\fR option, include every object file in the archive
+in the link, rather than searching the archive for the required object
+files.  This is normally used to turn an archive file into a shared
+library, forcing every object to be included in the resulting shared
+library.  This option may be used more than once.
+.Sp
+Two notes when using this option from gcc: First, gcc doesn't know
+about this option, so you have to use \fB\-Wl,\-whole\-archive\fR.
+Second, don't forget to use \fB\-Wl,\-no\-whole\-archive\fR after your
+list of archives, because gcc will add its own list of archives to
+your link and you may not want this flag to affect those as well.
+.IP "\fB\-\-wrap=\fR\fIsymbol\fR" 4
+.IX Item "--wrap=symbol"
+Use a wrapper function for \fIsymbol\fR.  Any undefined reference to
+\&\fIsymbol\fR will be resolved to \f(CW\*(C`_\|_wrap_\f(CIsymbol\f(CW\*(C'\fR.  Any
+undefined reference to \f(CW\*(C`_\|_real_\f(CIsymbol\f(CW\*(C'\fR will be resolved to
+\&\fIsymbol\fR.
+.Sp
+This can be used to provide a wrapper for a system function.  The
+wrapper function should be called \f(CW\*(C`_\|_wrap_\f(CIsymbol\f(CW\*(C'\fR.  If it
+wishes to call the system function, it should call
+\&\f(CW\*(C`_\|_real_\f(CIsymbol\f(CW\*(C'\fR.
+.Sp
+Here is a trivial example:
+.Sp
+.Vb 6
+\&        void *
+\&        _\|_wrap_malloc (size_t c)
+\&        {
+\&          printf ("malloc called with %zu\en", c);
+\&          return _\|_real_malloc (c);
+\&        }
+.Ve
+.Sp
+If you link other code with this file using \fB\-\-wrap malloc\fR, then
+all calls to \f(CW\*(C`malloc\*(C'\fR will call the function \f(CW\*(C`_\|_wrap_malloc\*(C'\fR
+instead.  The call to \f(CW\*(C`_\|_real_malloc\*(C'\fR in \f(CW\*(C`_\|_wrap_malloc\*(C'\fR will
+call the real \f(CW\*(C`malloc\*(C'\fR function.
+.Sp
+You may wish to provide a \f(CW\*(C`_\|_real_malloc\*(C'\fR function as well, so that
+links without the \fB\-\-wrap\fR option will succeed.  If you do this,
+you should not put the definition of \f(CW\*(C`_\|_real_malloc\*(C'\fR in the same
+file as \f(CW\*(C`_\|_wrap_malloc\*(C'\fR; if you do, the assembler may resolve the
+call before the linker has a chance to wrap it to \f(CW\*(C`malloc\*(C'\fR.
+.Sp
+Only undefined references are replaced by the linker.  So, translation unit
+internal references to \fIsymbol\fR are not resolved to
+\&\f(CW\*(C`_\|_wrap_\f(CIsymbol\f(CW\*(C'\fR.  In the next example, the call to \f(CW\*(C`f\*(C'\fR in
+\&\f(CW\*(C`g\*(C'\fR is not resolved to \f(CW\*(C`_\|_wrap_f\*(C'\fR.
+.Sp
+.Vb 5
+\&        int
+\&        f (void)
+\&        {
+\&          return 123;
+\&        }
+\&        
+\&        int
+\&        g (void)
+\&        {
+\&          return f();
+\&        }
+.Ve
+.IP "\fB\-\-eh\-frame\-hdr\fR" 4
+.IX Item "--eh-frame-hdr"
+.PD 0
+.IP "\fB\-\-no\-eh\-frame\-hdr\fR" 4
+.IX Item "--no-eh-frame-hdr"
+.PD
+Request (\fB\-\-eh\-frame\-hdr\fR) or suppress
+(\fB\-\-no\-eh\-frame\-hdr\fR) the creation of \f(CW\*(C`.eh_frame_hdr\*(C'\fR
+section and \s-1ELF\s0 \f(CW\*(C`PT_GNU_EH_FRAME\*(C'\fR segment header.
+.IP "\fB\-\-no\-ld\-generated\-unwind\-info\fR" 4
+.IX Item "--no-ld-generated-unwind-info"
+Request creation of \f(CW\*(C`.eh_frame\*(C'\fR unwind info for linker
+generated code sections like \s-1PLT.\s0  This option is on by default
+if linker generated unwind info is supported.
+.IP "\fB\-\-enable\-new\-dtags\fR" 4
+.IX Item "--enable-new-dtags"
+.PD 0
+.IP "\fB\-\-disable\-new\-dtags\fR" 4
+.IX Item "--disable-new-dtags"
+.PD
+This linker can create the new dynamic tags in \s-1ELF.\s0 But the older \s-1ELF\s0
+systems may not understand them. If you specify
+\&\fB\-\-enable\-new\-dtags\fR, the new dynamic tags will be created as needed
+and older dynamic tags will be omitted.
+If you specify \fB\-\-disable\-new\-dtags\fR, no new dynamic tags will be
+created. By default, the new dynamic tags are not created. Note that
+those options are only available for \s-1ELF\s0 systems.
+.IP "\fB\-\-hash\-size=\fR\fInumber\fR" 4
+.IX Item "--hash-size=number"
+Set the default size of the linker's hash tables to a prime number
+close to \fInumber\fR.  Increasing this value can reduce the length of
+time it takes the linker to perform its tasks, at the expense of
+increasing the linker's memory requirements.  Similarly reducing this
+value can reduce the memory requirements at the expense of speed.
+.IP "\fB\-\-hash\-style=\fR\fIstyle\fR" 4
+.IX Item "--hash-style=style"
+Set the type of linker's hash table(s).  \fIstyle\fR can be either
+\&\f(CW\*(C`sysv\*(C'\fR for classic \s-1ELF\s0 \f(CW\*(C`.hash\*(C'\fR section, \f(CW\*(C`gnu\*(C'\fR for
+new style \s-1GNU\s0 \f(CW\*(C`.gnu.hash\*(C'\fR section or \f(CW\*(C`both\*(C'\fR for both
+the classic \s-1ELF\s0 \f(CW\*(C`.hash\*(C'\fR and new style \s-1GNU\s0 \f(CW\*(C`.gnu.hash\*(C'\fR
+hash tables.  The default depends upon how the linker was configured,
+but for most Linux based systems it will be \f(CW\*(C`both\*(C'\fR.
+.IP "\fB\-\-compress\-debug\-sections=none\fR" 4
+.IX Item "--compress-debug-sections=none"
+.PD 0
+.IP "\fB\-\-compress\-debug\-sections=zlib\fR" 4
+.IX Item "--compress-debug-sections=zlib"
+.IP "\fB\-\-compress\-debug\-sections=zlib\-gnu\fR" 4
+.IX Item "--compress-debug-sections=zlib-gnu"
+.IP "\fB\-\-compress\-debug\-sections=zlib\-gabi\fR" 4
+.IX Item "--compress-debug-sections=zlib-gabi"
+.PD
+On \s-1ELF\s0 platforms, these options control how \s-1DWARF\s0 debug sections are
+compressed using zlib.
+.Sp
+\&\fB\-\-compress\-debug\-sections=none\fR doesn't compress \s-1DWARF\s0 debug
+sections.  \fB\-\-compress\-debug\-sections=zlib\-gnu\fR compresses
+\&\s-1DWARF\s0 debug sections and renames them to begin with \fB.zdebug\fR
+instead of \fB.debug\fR.  \fB\-\-compress\-debug\-sections=zlib\-gabi\fR
+also compresses \s-1DWARF\s0 debug sections, but rather than renaming them it
+sets the \s-1SHF_COMPRESSED\s0 flag in the sections' headers.
+.Sp
+The \fB\-\-compress\-debug\-sections=zlib\fR option is an alias for
+\&\fB\-\-compress\-debug\-sections=zlib\-gabi\fR.
+.Sp
+Note that this option overrides any compression in input debug
+sections, so if a binary is linked with \fB\-\-compress\-debug\-sections=none\fR
+for example, then any compressed debug sections in input files will be
+uncompressed before they are copied into the output binary.
+.Sp
+The default compression behaviour varies depending upon the target
+involved and the configure options used to build the toolchain.  The
+default can be determined by examining the output from the linker's
+\&\fB\-\-help\fR option.
+.IP "\fB\-\-reduce\-memory\-overheads\fR" 4
+.IX Item "--reduce-memory-overheads"
+This option reduces memory requirements at ld runtime, at the expense of
+linking speed.  This was introduced to select the old O(n^2) algorithm
+for link map file generation, rather than the new O(n) algorithm which uses
+about 40% more memory for symbol storage.
+.Sp
+Another effect of the switch is to set the default hash table size to
+1021, which again saves memory at the cost of lengthening the linker's
+run time.  This is not done however if the \fB\-\-hash\-size\fR switch
+has been used.
+.Sp
+The \fB\-\-reduce\-memory\-overheads\fR switch may be also be used to
+enable other tradeoffs in future versions of the linker.
+.IP "\fB\-\-build\-id\fR" 4
+.IX Item "--build-id"
+.PD 0
+.IP "\fB\-\-build\-id=\fR\fIstyle\fR" 4
+.IX Item "--build-id=style"
+.PD
+Request the creation of a \f(CW\*(C`.note.gnu.build\-id\*(C'\fR \s-1ELF\s0 note section
+or a \f(CW\*(C`.buildid\*(C'\fR \s-1COFF\s0 section.  The contents of the note are
+unique bits identifying this linked file.  \fIstyle\fR can be
+\&\f(CW\*(C`uuid\*(C'\fR to use 128 random bits, \f(CW\*(C`sha1\*(C'\fR to use a 160\-bit
+\&\s-1SHA1\s0 hash on the normative parts of the output contents,
+\&\f(CW\*(C`md5\*(C'\fR to use a 128\-bit \s-1MD5\s0 hash on the normative parts of
+the output contents, or \f(CW\*(C`0x\f(CIhexstring\f(CW\*(C'\fR to use a chosen bit
+string specified as an even number of hexadecimal digits (\f(CW\*(C`\-\*(C'\fR and
+\&\f(CW\*(C`:\*(C'\fR characters between digit pairs are ignored).  If \fIstyle\fR
+is omitted, \f(CW\*(C`sha1\*(C'\fR is used.
+.Sp
+The \f(CW\*(C`md5\*(C'\fR and \f(CW\*(C`sha1\*(C'\fR styles produces an identifier
+that is always the same in an identical output file, but will be
+unique among all nonidentical output files.  It is not intended
+to be compared as a checksum for the file's contents.  A linked
+file may be changed later by other tools, but the build \s-1ID\s0 bit
+string identifying the original linked file does not change.
+.Sp
+Passing \f(CW\*(C`none\*(C'\fR for \fIstyle\fR disables the setting from any
+\&\f(CW\*(C`\-\-build\-id\*(C'\fR options earlier on the command line.
+.PP
+The i386 \s-1PE\s0 linker supports the \fB\-shared\fR option, which causes
+the output to be a dynamically linked library (\s-1DLL\s0) instead of a
+normal executable.  You should name the output \f(CW\*(C`*.dll\*(C'\fR when you
+use this option.  In addition, the linker fully supports the standard
+\&\f(CW\*(C`*.def\*(C'\fR files, which may be specified on the linker command line
+like an object file (in fact, it should precede archives it exports
+symbols from, to ensure that they get linked in, just like a normal
+object file).
+.PP
+In addition to the options common to all targets, the i386 \s-1PE\s0 linker
+support additional command-line options that are specific to the i386
+\&\s-1PE\s0 target.  Options that take values may be separated from their
+values by either a space or an equals sign.
+.IP "\fB\-\-add\-stdcall\-alias\fR" 4
+.IX Item "--add-stdcall-alias"
+If given, symbols with a stdcall suffix (@\fInn\fR) will be exported
+as-is and also with the suffix stripped.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-base\-file\fR \fIfile\fR" 4
+.IX Item "--base-file file"
+Use \fIfile\fR as the name of a file in which to save the base
+addresses of all the relocations needed for generating DLLs with
+\&\fIdlltool\fR.
+[This is an i386 \s-1PE\s0 specific option]
+.IP "\fB\-\-dll\fR" 4
+.IX Item "--dll"
+Create a \s-1DLL\s0 instead of a regular executable.  You may also use
+\&\fB\-shared\fR or specify a \f(CW\*(C`LIBRARY\*(C'\fR in a given \f(CW\*(C`.def\*(C'\fR
+file.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-enable\-long\-section\-names\fR" 4
+.IX Item "--enable-long-section-names"
+.PD 0
+.IP "\fB\-\-disable\-long\-section\-names\fR" 4
+.IX Item "--disable-long-section-names"
+.PD
+The \s-1PE\s0 variants of the \s-1COFF\s0 object format add an extension that permits
+the use of section names longer than eight characters, the normal limit
+for \s-1COFF.\s0  By default, these names are only allowed in object files, as
+fully-linked executable images do not carry the \s-1COFF\s0 string table required
+to support the longer names.  As a \s-1GNU\s0 extension, it is possible to
+allow their use in executable images as well, or to (probably pointlessly!)
+disallow it in object files, by using these two options.  Executable images
+generated with these long section names are slightly non-standard, carrying
+as they do a string table, and may generate confusing output when examined
+with non-GNU PE-aware tools, such as file viewers and dumpers.  However,
+\&\s-1GDB\s0 relies on the use of \s-1PE\s0 long section names to find Dwarf\-2 debug
+information sections in an executable image at runtime, and so if neither
+option is specified on the command-line, \fBld\fR will enable long
+section names, overriding the default and technically correct behaviour,
+when it finds the presence of debug information while linking an executable
+image and not stripping symbols.
+[This option is valid for all \s-1PE\s0 targeted ports of the linker]
+.IP "\fB\-\-enable\-stdcall\-fixup\fR" 4
+.IX Item "--enable-stdcall-fixup"
+.PD 0
+.IP "\fB\-\-disable\-stdcall\-fixup\fR" 4
+.IX Item "--disable-stdcall-fixup"
+.PD
+If the link finds a symbol that it cannot resolve, it will attempt to
+do \*(L"fuzzy linking\*(R" by looking for another defined symbol that differs
+only in the format of the symbol name (cdecl vs stdcall) and will
+resolve that symbol by linking to the match.  For example, the
+undefined symbol \f(CW\*(C`_foo\*(C'\fR might be linked to the function
+\&\f(CW\*(C`_foo@12\*(C'\fR, or the undefined symbol \f(CW\*(C`_bar@16\*(C'\fR might be linked
+to the function \f(CW\*(C`_bar\*(C'\fR.  When the linker does this, it prints a
+warning, since it normally should have failed to link, but sometimes
+import libraries generated from third-party dlls may need this feature
+to be usable.  If you specify \fB\-\-enable\-stdcall\-fixup\fR, this
+feature is fully enabled and warnings are not printed.  If you specify
+\&\fB\-\-disable\-stdcall\-fixup\fR, this feature is disabled and such
+mismatches are considered to be errors.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-leading\-underscore\fR" 4
+.IX Item "--leading-underscore"
+.PD 0
+.IP "\fB\-\-no\-leading\-underscore\fR" 4
+.IX Item "--no-leading-underscore"
+.PD
+For most targets default symbol-prefix is an underscore and is defined
+in target's description. By this option it is possible to
+disable/enable the default underscore symbol-prefix.
+.IP "\fB\-\-export\-all\-symbols\fR" 4
+.IX Item "--export-all-symbols"
+If given, all global symbols in the objects used to build a \s-1DLL\s0 will
+be exported by the \s-1DLL.\s0  Note that this is the default if there
+otherwise wouldn't be any exported symbols.  When symbols are
+explicitly exported via \s-1DEF\s0 files or implicitly exported via function
+attributes, the default is to not export anything else unless this
+option is given.  Note that the symbols \f(CW\*(C`DllMain@12\*(C'\fR,
+\&\f(CW\*(C`DllEntryPoint@0\*(C'\fR, \f(CW\*(C`DllMainCRTStartup@12\*(C'\fR, and
+\&\f(CW\*(C`impure_ptr\*(C'\fR will not be automatically
+exported.  Also, symbols imported from other DLLs will not be
+re-exported, nor will symbols specifying the \s-1DLL\s0's internal layout
+such as those beginning with \f(CW\*(C`_head_\*(C'\fR or ending with
+\&\f(CW\*(C`_iname\*(C'\fR.  In addition, no symbols from \f(CW\*(C`libgcc\*(C'\fR,
+\&\f(CW\*(C`libstd++\*(C'\fR, \f(CW\*(C`libmingw32\*(C'\fR, or \f(CW\*(C`crtX.o\*(C'\fR will be exported.
+Symbols whose names begin with \f(CW\*(C`_\|_rtti_\*(C'\fR or \f(CW\*(C`_\|_builtin_\*(C'\fR will
+not be exported, to help with \*(C+ DLLs.  Finally, there is an
+extensive list of cygwin-private symbols that are not exported
+(obviously, this applies on when building DLLs for cygwin targets).
+These cygwin-excludes are: \f(CW\*(C`_cygwin_dll_entry@12\*(C'\fR,
+\&\f(CW\*(C`_cygwin_crt0_common@8\*(C'\fR, \f(CW\*(C`_cygwin_noncygwin_dll_entry@12\*(C'\fR,
+\&\f(CW\*(C`_fmode\*(C'\fR, \f(CW\*(C`_impure_ptr\*(C'\fR, \f(CW\*(C`cygwin_attach_dll\*(C'\fR,
+\&\f(CW\*(C`cygwin_premain0\*(C'\fR, \f(CW\*(C`cygwin_premain1\*(C'\fR, \f(CW\*(C`cygwin_premain2\*(C'\fR,
+\&\f(CW\*(C`cygwin_premain3\*(C'\fR, and \f(CW\*(C`environ\*(C'\fR.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-exclude\-symbols\fR \fIsymbol\fR\fB,\fR\fIsymbol\fR\fB,...\fR" 4
+.IX Item "--exclude-symbols symbol,symbol,..."
+Specifies a list of symbols which should not be automatically
+exported.  The symbol names may be delimited by commas or colons.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-exclude\-all\-symbols\fR" 4
+.IX Item "--exclude-all-symbols"
+Specifies no symbols should be automatically exported.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-file\-alignment\fR" 4
+.IX Item "--file-alignment"
+Specify the file alignment.  Sections in the file will always begin at
+file offsets which are multiples of this number.  This defaults to
+512.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-heap\fR \fIreserve\fR" 4
+.IX Item "--heap reserve"
+.PD 0
+.IP "\fB\-\-heap\fR \fIreserve\fR\fB,\fR\fIcommit\fR" 4
+.IX Item "--heap reserve,commit"
+.PD
+Specify the number of bytes of memory to reserve (and optionally commit)
+to be used as heap for this program.  The default is 1MB reserved, 4K
+committed.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-image\-base\fR \fIvalue\fR" 4
+.IX Item "--image-base value"
+Use \fIvalue\fR as the base address of your program or dll.  This is
+the lowest memory location that will be used when your program or dll
+is loaded.  To reduce the need to relocate and improve performance of
+your dlls, each should have a unique base address and not overlap any
+other dlls.  The default is 0x400000 for executables, and 0x10000000
+for dlls.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-kill\-at\fR" 4
+.IX Item "--kill-at"
+If given, the stdcall suffixes (@\fInn\fR) will be stripped from
+symbols before they are exported.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-large\-address\-aware\fR" 4
+.IX Item "--large-address-aware"
+If given, the appropriate bit in the \*(L"Characteristics\*(R" field of the \s-1COFF\s0
+header is set to indicate that this executable supports virtual addresses
+greater than 2 gigabytes.  This should be used in conjunction with the /3GB
+or /USERVA=\fIvalue\fR megabytes switch in the \*(L"[operating systems]\*(R"
+section of the \s-1BOOT.INI.\s0  Otherwise, this bit has no effect.
+[This option is specific to \s-1PE\s0 targeted ports of the linker]
+.IP "\fB\-\-disable\-large\-address\-aware\fR" 4
+.IX Item "--disable-large-address-aware"
+Reverts the effect of a previous \fB\-\-large\-address\-aware\fR option.
+This is useful if \fB\-\-large\-address\-aware\fR is always set by the compiler
+driver (e.g. Cygwin gcc) and the executable does not support virtual
+addresses greater than 2 gigabytes.
+[This option is specific to \s-1PE\s0 targeted ports of the linker]
+.IP "\fB\-\-major\-image\-version\fR \fIvalue\fR" 4
+.IX Item "--major-image-version value"
+Sets the major number of the \*(L"image version\*(R".  Defaults to 1.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-major\-os\-version\fR \fIvalue\fR" 4
+.IX Item "--major-os-version value"
+Sets the major number of the \*(L"os version\*(R".  Defaults to 4.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-major\-subsystem\-version\fR \fIvalue\fR" 4
+.IX Item "--major-subsystem-version value"
+Sets the major number of the \*(L"subsystem version\*(R".  Defaults to 4.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-minor\-image\-version\fR \fIvalue\fR" 4
+.IX Item "--minor-image-version value"
+Sets the minor number of the \*(L"image version\*(R".  Defaults to 0.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-minor\-os\-version\fR \fIvalue\fR" 4
+.IX Item "--minor-os-version value"
+Sets the minor number of the \*(L"os version\*(R".  Defaults to 0.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-minor\-subsystem\-version\fR \fIvalue\fR" 4
+.IX Item "--minor-subsystem-version value"
+Sets the minor number of the \*(L"subsystem version\*(R".  Defaults to 0.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-output\-def\fR \fIfile\fR" 4
+.IX Item "--output-def file"
+The linker will create the file \fIfile\fR which will contain a \s-1DEF\s0
+file corresponding to the \s-1DLL\s0 the linker is generating.  This \s-1DEF\s0 file
+(which should be called \f(CW\*(C`*.def\*(C'\fR) may be used to create an import
+library with \f(CW\*(C`dlltool\*(C'\fR or may be used as a reference to
+automatically or implicitly exported symbols.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-enable\-auto\-image\-base\fR" 4
+.IX Item "--enable-auto-image-base"
+.PD 0
+.IP "\fB\-\-enable\-auto\-image\-base=\fR\fIvalue\fR" 4
+.IX Item "--enable-auto-image-base=value"
+.PD
+Automatically choose the image base for DLLs, optionally starting with base
+\&\fIvalue\fR, unless one is specified using the \f(CW\*(C`\-\-image\-base\*(C'\fR argument.
+By using a hash generated from the dllname to create unique image bases
+for each \s-1DLL,\s0 in-memory collisions and relocations which can delay program
+execution are avoided.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-disable\-auto\-image\-base\fR" 4
+.IX Item "--disable-auto-image-base"
+Do not automatically generate a unique image base.  If there is no
+user-specified image base (\f(CW\*(C`\-\-image\-base\*(C'\fR) then use the platform
+default.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-dll\-search\-prefix\fR \fIstring\fR" 4
+.IX Item "--dll-search-prefix string"
+When linking dynamically to a dll without an import library,
+search for \f(CW\*(C`<string><basename>.dll\*(C'\fR in preference to
+\&\f(CW\*(C`lib<basename>.dll\*(C'\fR. This behaviour allows easy distinction
+between DLLs built for the various \*(L"subplatforms\*(R": native, cygwin,
+uwin, pw, etc.  For instance, cygwin DLLs typically use
+\&\f(CW\*(C`\-\-dll\-search\-prefix=cyg\*(C'\fR.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-enable\-auto\-import\fR" 4
+.IX Item "--enable-auto-import"
+Do sophisticated linking of \f(CW\*(C`_symbol\*(C'\fR to \f(CW\*(C`_\|_imp_\|_symbol\*(C'\fR for
+\&\s-1DATA\s0 imports from DLLs, thus making it possible to bypass the dllimport
+mechanism on the user side and to reference unmangled symbol names.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.Sp
+The following remarks pertain to the original implementation of the
+feature and are obsolete nowadays for Cygwin and MinGW targets.
+.Sp
+Note: Use of the 'auto\-import' extension will cause the text section
+of the image file to be made writable. This does not conform to the
+PE-COFF format specification published by Microsoft.
+.Sp
+Note \- use of the 'auto\-import' extension will also cause read only
+data which would normally be placed into the .rdata section to be
+placed into the .data section instead.  This is in order to work
+around a problem with consts that is described here:
+http://www.cygwin.com/ml/cygwin/2004\-09/msg01101.html
+.Sp
+Using 'auto\-import' generally will 'just work' \*(-- but sometimes you may
+see this message:
+.Sp
+"variable '<var>' can't be auto-imported. Please read the
+documentation for ld's \f(CW\*(C`\-\-enable\-auto\-import\*(C'\fR for details."
+.Sp
+This message occurs when some (sub)expression accesses an address
+ultimately given by the sum of two constants (Win32 import tables only
+allow one).  Instances where this may occur include accesses to member
+fields of struct variables imported from a \s-1DLL,\s0 as well as using a
+constant index into an array variable imported from a \s-1DLL.\s0  Any
+multiword variable (arrays, structs, long long, etc) may trigger
+this error condition.  However, regardless of the exact data type
+of the offending exported variable, ld will always detect it, issue
+the warning, and exit.
+.Sp
+There are several ways to address this difficulty, regardless of the
+data type of the exported variable:
+.Sp
+One way is to use \-\-enable\-runtime\-pseudo\-reloc switch. This leaves the task
+of adjusting references in your client code for runtime environment, so
+this method works only when runtime environment supports this feature.
+.Sp
+A second solution is to force one of the 'constants' to be a variable \*(--
+that is, unknown and un-optimizable at compile time.  For arrays,
+there are two possibilities: a) make the indexee (the array's address)
+a variable, or b) make the 'constant' index a variable.  Thus:
+.Sp
+.Vb 3
+\&        extern type extern_array[];
+\&        extern_array[1] \-\->
+\&           { volatile type *t=extern_array; t[1] }
+.Ve
+.Sp
+or
+.Sp
+.Vb 3
+\&        extern type extern_array[];
+\&        extern_array[1] \-\->
+\&           { volatile int t=1; extern_array[t] }
+.Ve
+.Sp
+For structs (and most other multiword data types) the only option
+is to make the struct itself (or the long long, or the ...) variable:
+.Sp
+.Vb 3
+\&        extern struct s extern_struct;
+\&        extern_struct.field \-\->
+\&           { volatile struct s *t=&extern_struct; t\->field }
+.Ve
+.Sp
+or
+.Sp
+.Vb 3
+\&        extern long long extern_ll;
+\&        extern_ll \-\->
+\&          { volatile long long * local_ll=&extern_ll; *local_ll }
+.Ve
+.Sp
+A third method of dealing with this difficulty is to abandon
+\&'auto\-import' for the offending symbol and mark it with
+\&\f(CW\*(C`_\|_declspec(dllimport)\*(C'\fR.  However, in practice that
+requires using compile-time #defines to indicate whether you are
+building a \s-1DLL,\s0 building client code that will link to the \s-1DLL,\s0 or
+merely building/linking to a static library.   In making the choice
+between the various methods of resolving the 'direct address with
+constant offset' problem, you should consider typical real-world usage:
+.Sp
+Original:
+.Sp
+.Vb 7
+\&        \-\-foo.h
+\&        extern int arr[];
+\&        \-\-foo.c
+\&        #include "foo.h"
+\&        void main(int argc, char **argv){
+\&          printf("%d\en",arr[1]);
+\&        }
+.Ve
+.Sp
+Solution 1:
+.Sp
+.Vb 9
+\&        \-\-foo.h
+\&        extern int arr[];
+\&        \-\-foo.c
+\&        #include "foo.h"
+\&        void main(int argc, char **argv){
+\&          /* This workaround is for win32 and cygwin; do not "optimize" */
+\&          volatile int *parr = arr;
+\&          printf("%d\en",parr[1]);
+\&        }
+.Ve
+.Sp
+Solution 2:
+.Sp
+.Vb 10
+\&        \-\-foo.h
+\&        /* Note: auto\-export is assumed (no _\|_declspec(dllexport)) */
+\&        #if (defined(_WIN32) || defined(_\|_CYGWIN_\|_)) && \e
+\&          !(defined(FOO_BUILD_DLL) || defined(FOO_STATIC))
+\&        #define FOO_IMPORT _\|_declspec(dllimport)
+\&        #else
+\&        #define FOO_IMPORT
+\&        #endif
+\&        extern FOO_IMPORT int arr[];
+\&        \-\-foo.c
+\&        #include "foo.h"
+\&        void main(int argc, char **argv){
+\&          printf("%d\en",arr[1]);
+\&        }
+.Ve
+.Sp
+A fourth way to avoid this problem is to re-code your
+library to use a functional interface rather than a data interface
+for the offending variables (e.g. \fIset_foo()\fR and \fIget_foo()\fR accessor
+functions).
+.IP "\fB\-\-disable\-auto\-import\fR" 4
+.IX Item "--disable-auto-import"
+Do not attempt to do sophisticated linking of \f(CW\*(C`_symbol\*(C'\fR to
+\&\f(CW\*(C`_\|_imp_\|_symbol\*(C'\fR for \s-1DATA\s0 imports from DLLs.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-enable\-runtime\-pseudo\-reloc\fR" 4
+.IX Item "--enable-runtime-pseudo-reloc"
+If your code contains expressions described in \-\-enable\-auto\-import section,
+that is, \s-1DATA\s0 imports from \s-1DLL\s0 with non-zero offset, this switch will create
+a vector of 'runtime pseudo relocations' which can be used by runtime
+environment to adjust references to such data in your client code.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-disable\-runtime\-pseudo\-reloc\fR" 4
+.IX Item "--disable-runtime-pseudo-reloc"
+Do not create pseudo relocations for non-zero offset \s-1DATA\s0 imports from DLLs.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-enable\-extra\-pe\-debug\fR" 4
+.IX Item "--enable-extra-pe-debug"
+Show additional debug info related to auto-import symbol thunking.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-section\-alignment\fR" 4
+.IX Item "--section-alignment"
+Sets the section alignment.  Sections in memory will always begin at
+addresses which are a multiple of this number.  Defaults to 0x1000.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-stack\fR \fIreserve\fR" 4
+.IX Item "--stack reserve"
+.PD 0
+.IP "\fB\-\-stack\fR \fIreserve\fR\fB,\fR\fIcommit\fR" 4
+.IX Item "--stack reserve,commit"
+.PD
+Specify the number of bytes of memory to reserve (and optionally commit)
+to be used as stack for this program.  The default is 2MB reserved, 4K
+committed.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.IP "\fB\-\-subsystem\fR \fIwhich\fR" 4
+.IX Item "--subsystem which"
+.PD 0
+.IP "\fB\-\-subsystem\fR \fIwhich\fR\fB:\fR\fImajor\fR" 4
+.IX Item "--subsystem which:major"
+.IP "\fB\-\-subsystem\fR \fIwhich\fR\fB:\fR\fImajor\fR\fB.\fR\fIminor\fR" 4
+.IX Item "--subsystem which:major.minor"
+.PD
+Specifies the subsystem under which your program will execute.  The
+legal values for \fIwhich\fR are \f(CW\*(C`native\*(C'\fR, \f(CW\*(C`windows\*(C'\fR,
+\&\f(CW\*(C`console\*(C'\fR, \f(CW\*(C`posix\*(C'\fR, and \f(CW\*(C`xbox\*(C'\fR.  You may optionally set
+the subsystem version also.  Numeric values are also accepted for
+\&\fIwhich\fR.
+[This option is specific to the i386 \s-1PE\s0 targeted port of the linker]
+.Sp
+The following options set flags in the \f(CW\*(C`DllCharacteristics\*(C'\fR field
+of the \s-1PE\s0 file header:
+[These options are specific to \s-1PE\s0 targeted ports of the linker]
+.IP "\fB\-\-high\-entropy\-va\fR" 4
+.IX Item "--high-entropy-va"
+Image is compatible with 64\-bit address space layout randomization
+(\s-1ASLR\s0).
+.IP "\fB\-\-dynamicbase\fR" 4
+.IX Item "--dynamicbase"
+The image base address may be relocated using address space layout
+randomization (\s-1ASLR\s0).  This feature was introduced with \s-1MS\s0 Windows
+Vista for i386 \s-1PE\s0 targets.
+.IP "\fB\-\-forceinteg\fR" 4
+.IX Item "--forceinteg"
+Code integrity checks are enforced.
+.IP "\fB\-\-nxcompat\fR" 4
+.IX Item "--nxcompat"
+The image is compatible with the Data Execution Prevention.
+This feature was introduced with \s-1MS\s0 Windows \s-1XP SP2\s0 for i386 \s-1PE\s0 targets.
+.IP "\fB\-\-no\-isolation\fR" 4
+.IX Item "--no-isolation"
+Although the image understands isolation, do not isolate the image.
+.IP "\fB\-\-no\-seh\fR" 4
+.IX Item "--no-seh"
+The image does not use \s-1SEH.\s0 No \s-1SE\s0 handler may be called from
+this image.
+.IP "\fB\-\-no\-bind\fR" 4
+.IX Item "--no-bind"
+Do not bind this image.
+.IP "\fB\-\-wdmdriver\fR" 4
+.IX Item "--wdmdriver"
+The driver uses the \s-1MS\s0 Windows Driver Model.
+.IP "\fB\-\-tsaware\fR" 4
+.IX Item "--tsaware"
+The image is Terminal Server aware.
+.IP "\fB\-\-insert\-timestamp\fR" 4
+.IX Item "--insert-timestamp"
+.PD 0
+.IP "\fB\-\-no\-insert\-timestamp\fR" 4
+.IX Item "--no-insert-timestamp"
+.PD
+Insert a real timestamp into the image.  This is the default behaviour
+as it matches legacy code and it means that the image will work with
+other, proprietary tools.  The problem with this default is that it
+will result in slightly different images being produced each time the
+same sources are linked.  The option \fB\-\-no\-insert\-timestamp\fR
+can be used to insert a zero value for the timestamp, this ensuring
+that binaries produced from identical sources will compare
+identically.
+.PP
+The C6X uClinux target uses a binary format called \s-1DSBT\s0 to support shared
+libraries.  Each shared library in the system needs to have a unique index;
+all executables use an index of 0.
+.IP "\fB\-\-dsbt\-size\fR \fIsize\fR" 4
+.IX Item "--dsbt-size size"
+This option sets the number of entries in the \s-1DSBT\s0 of the current executable
+or shared library to \fIsize\fR.  The default is to create a table with 64
+entries.
+.IP "\fB\-\-dsbt\-index\fR \fIindex\fR" 4
+.IX Item "--dsbt-index index"
+This option sets the \s-1DSBT\s0 index of the current executable or shared library
+to \fIindex\fR.  The default is 0, which is appropriate for generating
+executables.  If a shared library is generated with a \s-1DSBT\s0 index of 0, the
+\&\f(CW\*(C`R_C6000_DSBT_INDEX\*(C'\fR relocs are copied into the output file.
+.Sp
+The \fB\-\-no\-merge\-exidx\-entries\fR switch disables the merging of adjacent
+exidx entries in frame unwind info.
+.IP "\fB\-\-branch\-stub\fR" 4
+.IX Item "--branch-stub"
+This option enables linker branch relaxation by inserting branch stub
+sections when needed to extend the range of branches.  This option is
+usually not required since C\-SKY supports branch and call instructions that
+can access the full memory range and branch relaxation is normally handled by
+the compiler or assembler.
+.IP "\fB\-\-stub\-group\-size=\fR\fIN\fR" 4
+.IX Item "--stub-group-size=N"
+This option allows finer control of linker branch stub creation.
+It sets the maximum size of a group of input sections that can
+be handled by one stub section.  A negative value of \fIN\fR locates
+stub sections after their branches, while a positive value allows stub
+sections to appear either before or after the branches.  Values of
+\&\fB1\fR or \fB\-1\fR indicate that the
+linker should choose suitable defaults.
+.PP
+The 68HC11 and 68HC12 linkers support specific options to control the
+memory bank switching mapping and trampoline code generation.
+.IP "\fB\-\-no\-trampoline\fR" 4
+.IX Item "--no-trampoline"
+This option disables the generation of trampoline. By default a trampoline
+is generated for each far function which is called using a \f(CW\*(C`jsr\*(C'\fR
+instruction (this happens when a pointer to a far function is taken).
+.IP "\fB\-\-bank\-window\fR \fIname\fR" 4
+.IX Item "--bank-window name"
+This option indicates to the linker the name of the memory region in
+the \fB\s-1MEMORY\s0\fR specification that describes the memory bank window.
+The definition of such region is then used by the linker to compute
+paging and addresses within the memory window.
+.PP
+The following options are supported to control handling of \s-1GOT\s0 generation
+when linking for 68K targets.
+.IP "\fB\-\-got=\fR\fItype\fR" 4
+.IX Item "--got=type"
+This option tells the linker which \s-1GOT\s0 generation scheme to use.
+\&\fItype\fR should be one of \fBsingle\fR, \fBnegative\fR,
+\&\fBmultigot\fR or \fBtarget\fR.  For more information refer to the
+Info entry for \fIld\fR.
+.PP
+The following options are supported to control microMIPS instruction
+generation and branch relocation checks for \s-1ISA\s0 mode transitions when
+linking for \s-1MIPS\s0 targets.
+.IP "\fB\-\-insn32\fR" 4
+.IX Item "--insn32"
+.PD 0
+.IP "\fB\-\-no\-insn32\fR" 4
+.IX Item "--no-insn32"
+.PD
+These options control the choice of microMIPS instructions used in code
+generated by the linker, such as that in the \s-1PLT\s0 or lazy binding stubs,
+or in relaxation.  If \fB\-\-insn32\fR is used, then the linker only uses
+32\-bit instruction encodings.  By default or if \fB\-\-no\-insn32\fR is
+used, all instruction encodings are used, including 16\-bit ones where
+possible.
+.IP "\fB\-\-ignore\-branch\-isa\fR" 4
+.IX Item "--ignore-branch-isa"
+.PD 0
+.IP "\fB\-\-no\-ignore\-branch\-isa\fR" 4
+.IX Item "--no-ignore-branch-isa"
+.PD
+These options control branch relocation checks for invalid \s-1ISA\s0 mode
+transitions.  If \fB\-\-ignore\-branch\-isa\fR is used, then the linker
+accepts any branch relocations and any \s-1ISA\s0 mode transition required
+is lost in relocation calculation, except for some cases of \f(CW\*(C`BAL\*(C'\fR
+instructions which meet relaxation conditions and are converted to
+equivalent \f(CW\*(C`JALX\*(C'\fR instructions as the associated relocation is
+calculated.  By default or if \fB\-\-no\-ignore\-branch\-isa\fR is used
+a check is made causing the loss of an \s-1ISA\s0 mode transition to produce
+an error.
+.SH "ENVIRONMENT"
+.IX Header "ENVIRONMENT"
+You can change the behaviour of \fBld\fR with the environment variables
+\&\f(CW\*(C`GNUTARGET\*(C'\fR,
+\&\f(CW\*(C`LDEMULATION\*(C'\fR and \f(CW\*(C`COLLECT_NO_DEMANGLE\*(C'\fR.
+.PP
+\&\f(CW\*(C`GNUTARGET\*(C'\fR determines the input-file object format if you don't
+use \fB\-b\fR (or its synonym \fB\-\-format\fR).  Its value should be one
+of the \s-1BFD\s0 names for an input format.  If there is no
+\&\f(CW\*(C`GNUTARGET\*(C'\fR in the environment, \fBld\fR uses the natural format
+of the target. If \f(CW\*(C`GNUTARGET\*(C'\fR is set to \f(CW\*(C`default\*(C'\fR then \s-1BFD\s0
+attempts to discover the input format by examining binary input files;
+this method often succeeds, but there are potential ambiguities, since
+there is no method of ensuring that the magic number used to specify
+object-file formats is unique.  However, the configuration procedure for
+\&\s-1BFD\s0 on each system places the conventional format for that system first
+in the search-list, so ambiguities are resolved in favor of convention.
+.PP
+\&\f(CW\*(C`LDEMULATION\*(C'\fR determines the default emulation if you don't use the
+\&\fB\-m\fR option.  The emulation can affect various aspects of linker
+behaviour, particularly the default linker script.  You can list the
+available emulations with the \fB\-\-verbose\fR or \fB\-V\fR options.  If
+the \fB\-m\fR option is not used, and the \f(CW\*(C`LDEMULATION\*(C'\fR environment
+variable is not defined, the default emulation depends upon how the
+linker was configured.
+.PP
+Normally, the linker will default to demangling symbols.  However, if
+\&\f(CW\*(C`COLLECT_NO_DEMANGLE\*(C'\fR is set in the environment, then it will
+default to not demangling symbols.  This environment variable is used in
+a similar fashion by the \f(CW\*(C`gcc\*(C'\fR linker wrapper program.  The default
+may be overridden by the \fB\-\-demangle\fR and \fB\-\-no\-demangle\fR
+options.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIar\fR\|(1), \fInm\fR\|(1), \fIobjcopy\fR\|(1), \fIobjdump\fR\|(1), \fIreadelf\fR\|(1) and
+the Info entries for \fIbinutils\fR and
+\&\fIld\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man1/aarch64-elf-nm.1 b/share/man/man1/aarch64-elf-nm.1
new file mode 100644
index 0000000..c5bd30e
--- /dev/null
+++ b/share/man/man1/aarch64-elf-nm.1
@@ -0,0 +1,594 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "NM 1"
+.TH NM 1 "2019-05-21" "binutils-2.32" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+nm \- list symbols from object files
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+nm [\fB\-A\fR|\fB\-o\fR|\fB\-\-print\-file\-name\fR] [\fB\-a\fR|\fB\-\-debug\-syms\fR]
+   [\fB\-B\fR|\fB\-\-format=bsd\fR] [\fB\-C\fR|\fB\-\-demangle\fR[=\fIstyle\fR]]
+   [\fB\-D\fR|\fB\-\-dynamic\fR] [\fB\-f\fR\fIformat\fR|\fB\-\-format=\fR\fIformat\fR]
+   [\fB\-g\fR|\fB\-\-extern\-only\fR] [\fB\-h\fR|\fB\-\-help\fR]
+   [\fB\-l\fR|\fB\-\-line\-numbers\fR] [\fB\-\-inlines\fR]
+   [\fB\-n\fR|\fB\-v\fR|\fB\-\-numeric\-sort\fR]
+   [\fB\-P\fR|\fB\-\-portability\fR] [\fB\-p\fR|\fB\-\-no\-sort\fR]
+   [\fB\-r\fR|\fB\-\-reverse\-sort\fR] [\fB\-S\fR|\fB\-\-print\-size\fR]
+   [\fB\-s\fR|\fB\-\-print\-armap\fR] [\fB\-t\fR \fIradix\fR|\fB\-\-radix=\fR\fIradix\fR]
+   [\fB\-u\fR|\fB\-\-undefined\-only\fR] [\fB\-V\fR|\fB\-\-version\fR]
+   [\fB\-X 32_64\fR] [\fB\-\-defined\-only\fR] [\fB\-\-no\-demangle\fR]
+   [\fB\-\-plugin\fR \fIname\fR]
+   [\fB\-\-no\-recurse\-limit\fR|\fB\-\-recurse\-limit\fR]]
+   [\fB\-\-size\-sort\fR] [\fB\-\-special\-syms\fR]
+   [\fB\-\-synthetic\fR] [\fB\-\-with\-symbol\-versions\fR] [\fB\-\-target=\fR\fIbfdname\fR]
+   [\fIobjfile\fR...]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\s-1GNU\s0 \fBnm\fR lists the symbols from object files \fIobjfile\fR....
+If no object files are listed as arguments, \fBnm\fR assumes the file
+\&\fIa.out\fR.
+.PP
+For each symbol, \fBnm\fR shows:
+.IP "\(bu" 4
+The symbol value, in the radix selected by options (see below), or
+hexadecimal by default.
+.IP "\(bu" 4
+The symbol type.  At least the following types are used; others are, as
+well, depending on the object file format.  If lowercase, the symbol is
+usually local; if uppercase, the symbol is global (external).  There
+are however a few lowercase symbols that are shown for special global
+symbols (\f(CW\*(C`u\*(C'\fR, \f(CW\*(C`v\*(C'\fR and \f(CW\*(C`w\*(C'\fR).
+.RS 4
+.ie n .IP """A""" 4
+.el .IP "\f(CWA\fR" 4
+.IX Item "A"
+The symbol's value is absolute, and will not be changed by further
+linking.
+.ie n .IP """B""" 4
+.el .IP "\f(CWB\fR" 4
+.IX Item "B"
+.PD 0
+.ie n .IP """b""" 4
+.el .IP "\f(CWb\fR" 4
+.IX Item "b"
+.PD
+The symbol is in the \s-1BSS\s0 data section.  This section typically
+contains zero-initialized or uninitialized data, although the exact
+behavior is system dependent.
+.ie n .IP """C""" 4
+.el .IP "\f(CWC\fR" 4
+.IX Item "C"
+The symbol is common.  Common symbols are uninitialized data.  When
+linking, multiple common symbols may appear with the same name.  If the
+symbol is defined anywhere, the common symbols are treated as undefined
+references.
+.ie n .IP """D""" 4
+.el .IP "\f(CWD\fR" 4
+.IX Item "D"
+.PD 0
+.ie n .IP """d""" 4
+.el .IP "\f(CWd\fR" 4
+.IX Item "d"
+.PD
+The symbol is in the initialized data section.
+.ie n .IP """G""" 4
+.el .IP "\f(CWG\fR" 4
+.IX Item "G"
+.PD 0
+.ie n .IP """g""" 4
+.el .IP "\f(CWg\fR" 4
+.IX Item "g"
+.PD
+The symbol is in an initialized data section for small objects.  Some
+object file formats permit more efficient access to small data objects,
+such as a global int variable as opposed to a large global array.
+.ie n .IP """i""" 4
+.el .IP "\f(CWi\fR" 4
+.IX Item "i"
+For \s-1PE\s0 format files this indicates that the symbol is in a section
+specific to the implementation of DLLs.  For \s-1ELF\s0 format files this
+indicates that the symbol is an indirect function.  This is a \s-1GNU\s0
+extension to the standard set of \s-1ELF\s0 symbol types.  It indicates a
+symbol which if referenced by a relocation does not evaluate to its
+address, but instead must be invoked at runtime.  The runtime
+execution will then return the value to be used in the relocation.
+.ie n .IP """I""" 4
+.el .IP "\f(CWI\fR" 4
+.IX Item "I"
+The symbol is an indirect reference to another symbol.
+.ie n .IP """N""" 4
+.el .IP "\f(CWN\fR" 4
+.IX Item "N"
+The symbol is a debugging symbol.
+.ie n .IP """p""" 4
+.el .IP "\f(CWp\fR" 4
+.IX Item "p"
+The symbols is in a stack unwind section.
+.ie n .IP """R""" 4
+.el .IP "\f(CWR\fR" 4
+.IX Item "R"
+.PD 0
+.ie n .IP """r""" 4
+.el .IP "\f(CWr\fR" 4
+.IX Item "r"
+.PD
+The symbol is in a read only data section.
+.ie n .IP """S""" 4
+.el .IP "\f(CWS\fR" 4
+.IX Item "S"
+.PD 0
+.ie n .IP """s""" 4
+.el .IP "\f(CWs\fR" 4
+.IX Item "s"
+.PD
+The symbol is in an uninitialized or zero-initialized data section
+for small objects.
+.ie n .IP """T""" 4
+.el .IP "\f(CWT\fR" 4
+.IX Item "T"
+.PD 0
+.ie n .IP """t""" 4
+.el .IP "\f(CWt\fR" 4
+.IX Item "t"
+.PD
+The symbol is in the text (code) section.
+.ie n .IP """U""" 4
+.el .IP "\f(CWU\fR" 4
+.IX Item "U"
+The symbol is undefined.
+.ie n .IP """u""" 4
+.el .IP "\f(CWu\fR" 4
+.IX Item "u"
+The symbol is a unique global symbol.  This is a \s-1GNU\s0 extension to the
+standard set of \s-1ELF\s0 symbol bindings.  For such a symbol the dynamic linker
+will make sure that in the entire process there is just one symbol with
+this name and type in use.
+.ie n .IP """V""" 4
+.el .IP "\f(CWV\fR" 4
+.IX Item "V"
+.PD 0
+.ie n .IP """v""" 4
+.el .IP "\f(CWv\fR" 4
+.IX Item "v"
+.PD
+The symbol is a weak object.  When a weak defined symbol is linked with
+a normal defined symbol, the normal defined symbol is used with no error.
+When a weak undefined symbol is linked and the symbol is not defined,
+the value of the weak symbol becomes zero with no error.  On some
+systems, uppercase indicates that a default value has been specified.
+.ie n .IP """W""" 4
+.el .IP "\f(CWW\fR" 4
+.IX Item "W"
+.PD 0
+.ie n .IP """w""" 4
+.el .IP "\f(CWw\fR" 4
+.IX Item "w"
+.PD
+The symbol is a weak symbol that has not been specifically tagged as a
+weak object symbol.  When a weak defined symbol is linked with a normal
+defined symbol, the normal defined symbol is used with no error.
+When a weak undefined symbol is linked and the symbol is not defined,
+the value of the symbol is determined in a system-specific manner without
+error.  On some systems, uppercase indicates that a default value has been
+specified.
+.ie n .IP """\-""" 4
+.el .IP "\f(CW\-\fR" 4
+.IX Item "-"
+The symbol is a stabs symbol in an a.out object file.  In this case, the
+next values printed are the stabs other field, the stabs desc field, and
+the stab type.  Stabs symbols are used to hold debugging information.
+.ie n .IP """?""" 4
+.el .IP "\f(CW?\fR" 4
+.IX Item "?"
+The symbol type is unknown, or object file format specific.
+.RE
+.RS 4
+.RE
+.IP "\(bu" 4
+The symbol name.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+The long and short forms of options, shown here as alternatives, are
+equivalent.
+.IP "\fB\-A\fR" 4
+.IX Item "-A"
+.PD 0
+.IP "\fB\-o\fR" 4
+.IX Item "-o"
+.IP "\fB\-\-print\-file\-name\fR" 4
+.IX Item "--print-file-name"
+.PD
+Precede each symbol by the name of the input file (or archive member)
+in which it was found, rather than identifying the input file once only,
+before all of its symbols.
+.IP "\fB\-a\fR" 4
+.IX Item "-a"
+.PD 0
+.IP "\fB\-\-debug\-syms\fR" 4
+.IX Item "--debug-syms"
+.PD
+Display all symbols, even debugger-only symbols; normally these are not
+listed.
+.IP "\fB\-B\fR" 4
+.IX Item "-B"
+The same as \fB\-\-format=bsd\fR (for compatibility with the \s-1MIPS\s0 \fBnm\fR).
+.IP "\fB\-C\fR" 4
+.IX Item "-C"
+.PD 0
+.IP "\fB\-\-demangle[=\fR\fIstyle\fR\fB]\fR" 4
+.IX Item "--demangle[=style]"
+.PD
+Decode (\fIdemangle\fR) low-level symbol names into user-level names.
+Besides removing any initial underscore prepended by the system, this
+makes \*(C+ function names readable. Different compilers have different
+mangling styles. The optional demangling style argument can be used to
+choose an appropriate demangling style for your compiler.
+.IP "\fB\-\-no\-demangle\fR" 4
+.IX Item "--no-demangle"
+Do not demangle low-level symbol names.  This is the default.
+.IP "\fB\-\-recurse\-limit\fR" 4
+.IX Item "--recurse-limit"
+.PD 0
+.IP "\fB\-\-no\-recurse\-limit\fR" 4
+.IX Item "--no-recurse-limit"
+.IP "\fB\-\-recursion\-limit\fR" 4
+.IX Item "--recursion-limit"
+.IP "\fB\-\-no\-recursion\-limit\fR" 4
+.IX Item "--no-recursion-limit"
+.PD
+Enables or disables a limit on the amount of recursion performed
+whilst demangling strings.  Since the name mangling formats allow for
+an inifinite level of recursion it is possible to create strings whose
+decoding will exhaust the amount of stack space available on the host
+machine, triggering a memory fault.  The limit tries to prevent this
+from happening by restricting recursion to 2048 levels of nesting.
+.Sp
+The default is for this limit to be enabled, but disabling it may be
+necessary in order to demangle truly complicated names.  Note however
+that if the recursion limit is disabled then stack exhaustion is
+possible and any bug reports about such an event will be rejected.
+.IP "\fB\-D\fR" 4
+.IX Item "-D"
+.PD 0
+.IP "\fB\-\-dynamic\fR" 4
+.IX Item "--dynamic"
+.PD
+Display the dynamic symbols rather than the normal symbols.  This is
+only meaningful for dynamic objects, such as certain types of shared
+libraries.
+.IP "\fB\-f\fR \fIformat\fR" 4
+.IX Item "-f format"
+.PD 0
+.IP "\fB\-\-format=\fR\fIformat\fR" 4
+.IX Item "--format=format"
+.PD
+Use the output format \fIformat\fR, which can be \f(CW\*(C`bsd\*(C'\fR,
+\&\f(CW\*(C`sysv\*(C'\fR, or \f(CW\*(C`posix\*(C'\fR.  The default is \f(CW\*(C`bsd\*(C'\fR.
+Only the first character of \fIformat\fR is significant; it can be
+either upper or lower case.
+.IP "\fB\-g\fR" 4
+.IX Item "-g"
+.PD 0
+.IP "\fB\-\-extern\-only\fR" 4
+.IX Item "--extern-only"
+.PD
+Display only external symbols.
+.IP "\fB\-h\fR" 4
+.IX Item "-h"
+.PD 0
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+.PD
+Show a summary of the options to \fBnm\fR and exit.
+.IP "\fB\-l\fR" 4
+.IX Item "-l"
+.PD 0
+.IP "\fB\-\-line\-numbers\fR" 4
+.IX Item "--line-numbers"
+.PD
+For each symbol, use debugging information to try to find a filename and
+line number.  For a defined symbol, look for the line number of the
+address of the symbol.  For an undefined symbol, look for the line
+number of a relocation entry which refers to the symbol.  If line number
+information can be found, print it after the other symbol information.
+.IP "\fB\-\-inlines\fR" 4
+.IX Item "--inlines"
+When option \fB\-l\fR is active, if the address belongs to a
+function that was inlined, then this option causes the source 
+information for all enclosing scopes back to the first non-inlined
+function to be printed as well.  For example, if \f(CW\*(C`main\*(C'\fR inlines
+\&\f(CW\*(C`callee1\*(C'\fR which inlines \f(CW\*(C`callee2\*(C'\fR, and address is from
+\&\f(CW\*(C`callee2\*(C'\fR, the source information for \f(CW\*(C`callee1\*(C'\fR and \f(CW\*(C`main\*(C'\fR
+will also be printed.
+.IP "\fB\-n\fR" 4
+.IX Item "-n"
+.PD 0
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.IP "\fB\-\-numeric\-sort\fR" 4
+.IX Item "--numeric-sort"
+.PD
+Sort symbols numerically by their addresses, rather than alphabetically
+by their names.
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+.PD 0
+.IP "\fB\-\-no\-sort\fR" 4
+.IX Item "--no-sort"
+.PD
+Do not bother to sort the symbols in any order; print them in the order
+encountered.
+.IP "\fB\-P\fR" 4
+.IX Item "-P"
+.PD 0
+.IP "\fB\-\-portability\fR" 4
+.IX Item "--portability"
+.PD
+Use the \s-1POSIX.2\s0 standard output format instead of the default format.
+Equivalent to \fB\-f posix\fR.
+.IP "\fB\-r\fR" 4
+.IX Item "-r"
+.PD 0
+.IP "\fB\-\-reverse\-sort\fR" 4
+.IX Item "--reverse-sort"
+.PD
+Reverse the order of the sort (whether numeric or alphabetic); let the
+last come first.
+.IP "\fB\-S\fR" 4
+.IX Item "-S"
+.PD 0
+.IP "\fB\-\-print\-size\fR" 4
+.IX Item "--print-size"
+.PD
+Print both value and size of defined symbols for the \f(CW\*(C`bsd\*(C'\fR output style.
+This option has no effect for object formats that do not record symbol
+sizes, unless \fB\-\-size\-sort\fR is also used in which case a
+calculated size is displayed.
+.IP "\fB\-s\fR" 4
+.IX Item "-s"
+.PD 0
+.IP "\fB\-\-print\-armap\fR" 4
+.IX Item "--print-armap"
+.PD
+When listing symbols from archive members, include the index: a mapping
+(stored in the archive by \fBar\fR or \fBranlib\fR) of which modules
+contain definitions for which names.
+.IP "\fB\-t\fR \fIradix\fR" 4
+.IX Item "-t radix"
+.PD 0
+.IP "\fB\-\-radix=\fR\fIradix\fR" 4
+.IX Item "--radix=radix"
+.PD
+Use \fIradix\fR as the radix for printing the symbol values.  It must be
+\&\fBd\fR for decimal, \fBo\fR for octal, or \fBx\fR for hexadecimal.
+.IP "\fB\-u\fR" 4
+.IX Item "-u"
+.PD 0
+.IP "\fB\-\-undefined\-only\fR" 4
+.IX Item "--undefined-only"
+.PD
+Display only undefined symbols (those external to each object file).
+.IP "\fB\-V\fR" 4
+.IX Item "-V"
+.PD 0
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.PD
+Show the version number of \fBnm\fR and exit.
+.IP "\fB\-X\fR" 4
+.IX Item "-X"
+This option is ignored for compatibility with the \s-1AIX\s0 version of
+\&\fBnm\fR.  It takes one parameter which must be the string
+\&\fB32_64\fR.  The default mode of \s-1AIX\s0 \fBnm\fR corresponds
+to \fB\-X 32\fR, which is not supported by \s-1GNU\s0 \fBnm\fR.
+.IP "\fB\-\-defined\-only\fR" 4
+.IX Item "--defined-only"
+Display only defined symbols for each object file.
+.IP "\fB\-\-plugin\fR \fIname\fR" 4
+.IX Item "--plugin name"
+Load the plugin called \fIname\fR to add support for extra target
+types.  This option is only available if the toolchain has been built
+with plugin support enabled.
+.Sp
+If \fB\-\-plugin\fR is not provided, but plugin support has been
+enabled then \fBnm\fR iterates over the files in
+\&\fI${libdir}/bfd\-plugins\fR in alphabetic order and the first
+plugin that claims the object in question is used.
+.Sp
+Please note that this plugin search directory is \fInot\fR the one
+used by \fBld\fR's \fB\-plugin\fR option.  In order to make
+\&\fBnm\fR use the  linker plugin it must be copied into the
+\&\fI${libdir}/bfd\-plugins\fR directory.  For \s-1GCC\s0 based compilations
+the linker plugin is called \fIliblto_plugin.so.0.0.0\fR.  For Clang
+based compilations it is called \fILLVMgold.so\fR.  The \s-1GCC\s0 plugin
+is always backwards compatible with earlier versions, so it is
+sufficient to just copy the newest one.
+.IP "\fB\-\-size\-sort\fR" 4
+.IX Item "--size-sort"
+Sort symbols by size.  For \s-1ELF\s0 objects symbol sizes are read from the
+\&\s-1ELF,\s0 for other object types the symbol sizes are computed as the
+difference between the value of the symbol and the value of the symbol
+with the next higher value.  If the \f(CW\*(C`bsd\*(C'\fR output format is used
+the size of the symbol is printed, rather than the value, and
+\&\fB\-S\fR must be used in order both size and value to be printed.
+.IP "\fB\-\-special\-syms\fR" 4
+.IX Item "--special-syms"
+Display symbols which have a target-specific special meaning.  These
+symbols are usually used by the target for some special processing and
+are not normally helpful when included in the normal symbol lists.
+For example for \s-1ARM\s0 targets this option would skip the mapping symbols
+used to mark transitions between \s-1ARM\s0 code, \s-1THUMB\s0 code and data.
+.IP "\fB\-\-synthetic\fR" 4
+.IX Item "--synthetic"
+Include synthetic symbols in the output.  These are special symbols
+created by the linker for various purposes.  They are not shown by
+default since they are not part of the binary's original source code.
+.IP "\fB\-\-with\-symbol\-versions\fR" 4
+.IX Item "--with-symbol-versions"
+Enables the display of symbol version information if any exists.  The
+version string is displayed as a suffix to the symbol name, preceeded by
+an @ character.  For example \fBfoo@VER_1\fR.  If the version is
+the default version to be used when resolving unversioned references
+to the symbol then it is displayed as a suffix preceeded by two @
+characters.  For example \fBfoo@@VER_2\fR.
+.IP "\fB\-\-target=\fR\fIbfdname\fR" 4
+.IX Item "--target=bfdname"
+Specify an object code format other than your system's default format.
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIar\fR\|(1), \fIobjdump\fR\|(1), \fIranlib\fR\|(1), and the Info entries for \fIbinutils\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man1/aarch64-elf-objcopy.1 b/share/man/man1/aarch64-elf-objcopy.1
new file mode 100644
index 0000000..80d1bfd
--- /dev/null
+++ b/share/man/man1/aarch64-elf-objcopy.1
@@ -0,0 +1,1211 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "OBJCOPY 1"
+.TH OBJCOPY 1 "2019-05-21" "binutils-2.32" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+objcopy \- copy and translate object files
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+objcopy [\fB\-F\fR \fIbfdname\fR|\fB\-\-target=\fR\fIbfdname\fR]
+        [\fB\-I\fR \fIbfdname\fR|\fB\-\-input\-target=\fR\fIbfdname\fR]
+        [\fB\-O\fR \fIbfdname\fR|\fB\-\-output\-target=\fR\fIbfdname\fR]
+        [\fB\-B\fR \fIbfdarch\fR|\fB\-\-binary\-architecture=\fR\fIbfdarch\fR]
+        [\fB\-S\fR|\fB\-\-strip\-all\fR]
+        [\fB\-g\fR|\fB\-\-strip\-debug\fR]
+        [\fB\-\-strip\-unneeded\fR]
+        [\fB\-K\fR \fIsymbolname\fR|\fB\-\-keep\-symbol=\fR\fIsymbolname\fR]
+        [\fB\-N\fR \fIsymbolname\fR|\fB\-\-strip\-symbol=\fR\fIsymbolname\fR]
+        [\fB\-\-strip\-unneeded\-symbol=\fR\fIsymbolname\fR]
+        [\fB\-G\fR \fIsymbolname\fR|\fB\-\-keep\-global\-symbol=\fR\fIsymbolname\fR]
+        [\fB\-\-localize\-hidden\fR]
+        [\fB\-L\fR \fIsymbolname\fR|\fB\-\-localize\-symbol=\fR\fIsymbolname\fR]
+        [\fB\-\-globalize\-symbol=\fR\fIsymbolname\fR]
+        [\fB\-\-globalize\-symbols=\fR\fIfilename\fR]
+        [\fB\-W\fR \fIsymbolname\fR|\fB\-\-weaken\-symbol=\fR\fIsymbolname\fR]
+        [\fB\-w\fR|\fB\-\-wildcard\fR]
+        [\fB\-x\fR|\fB\-\-discard\-all\fR]
+        [\fB\-X\fR|\fB\-\-discard\-locals\fR]
+        [\fB\-b\fR \fIbyte\fR|\fB\-\-byte=\fR\fIbyte\fR]
+        [\fB\-i\fR [\fIbreadth\fR]|\fB\-\-interleave\fR[=\fIbreadth\fR]]
+        [\fB\-\-interleave\-width=\fR\fIwidth\fR]
+        [\fB\-j\fR \fIsectionpattern\fR|\fB\-\-only\-section=\fR\fIsectionpattern\fR]
+        [\fB\-R\fR \fIsectionpattern\fR|\fB\-\-remove\-section=\fR\fIsectionpattern\fR]
+        [\fB\-\-remove\-relocations=\fR\fIsectionpattern\fR]
+        [\fB\-p\fR|\fB\-\-preserve\-dates\fR]
+        [\fB\-D\fR|\fB\-\-enable\-deterministic\-archives\fR]
+        [\fB\-U\fR|\fB\-\-disable\-deterministic\-archives\fR]
+        [\fB\-\-debugging\fR]
+        [\fB\-\-gap\-fill=\fR\fIval\fR]
+        [\fB\-\-pad\-to=\fR\fIaddress\fR]
+        [\fB\-\-set\-start=\fR\fIval\fR]
+        [\fB\-\-adjust\-start=\fR\fIincr\fR]
+        [\fB\-\-change\-addresses=\fR\fIincr\fR]
+        [\fB\-\-change\-section\-address\fR \fIsectionpattern\fR{=,+,\-}\fIval\fR]
+        [\fB\-\-change\-section\-lma\fR \fIsectionpattern\fR{=,+,\-}\fIval\fR]
+        [\fB\-\-change\-section\-vma\fR \fIsectionpattern\fR{=,+,\-}\fIval\fR]
+        [\fB\-\-change\-warnings\fR] [\fB\-\-no\-change\-warnings\fR]
+        [\fB\-\-set\-section\-flags\fR \fIsectionpattern\fR=\fIflags\fR]
+        [\fB\-\-add\-section\fR \fIsectionname\fR=\fIfilename\fR]
+        [\fB\-\-dump\-section\fR \fIsectionname\fR=\fIfilename\fR]
+        [\fB\-\-update\-section\fR \fIsectionname\fR=\fIfilename\fR]
+        [\fB\-\-rename\-section\fR \fIoldname\fR=\fInewname\fR[,\fIflags\fR]]
+        [\fB\-\-long\-section\-names\fR {enable,disable,keep}]
+        [\fB\-\-change\-leading\-char\fR] [\fB\-\-remove\-leading\-char\fR]
+        [\fB\-\-reverse\-bytes=\fR\fInum\fR]
+        [\fB\-\-srec\-len=\fR\fIival\fR] [\fB\-\-srec\-forceS3\fR]
+        [\fB\-\-redefine\-sym\fR \fIold\fR=\fInew\fR]
+        [\fB\-\-redefine\-syms=\fR\fIfilename\fR]
+        [\fB\-\-weaken\fR]
+        [\fB\-\-keep\-symbols=\fR\fIfilename\fR]
+        [\fB\-\-strip\-symbols=\fR\fIfilename\fR]
+        [\fB\-\-strip\-unneeded\-symbols=\fR\fIfilename\fR]
+        [\fB\-\-keep\-global\-symbols=\fR\fIfilename\fR]
+        [\fB\-\-localize\-symbols=\fR\fIfilename\fR]
+        [\fB\-\-weaken\-symbols=\fR\fIfilename\fR]
+        [\fB\-\-add\-symbol\fR \fIname\fR=[\fIsection\fR:]\fIvalue\fR[,\fIflags\fR]]
+        [\fB\-\-alt\-machine\-code=\fR\fIindex\fR]
+        [\fB\-\-prefix\-symbols=\fR\fIstring\fR]
+        [\fB\-\-prefix\-sections=\fR\fIstring\fR]
+        [\fB\-\-prefix\-alloc\-sections=\fR\fIstring\fR]
+        [\fB\-\-add\-gnu\-debuglink=\fR\fIpath-to-file\fR]
+        [\fB\-\-keep\-file\-symbols\fR]
+        [\fB\-\-only\-keep\-debug\fR]
+        [\fB\-\-strip\-dwo\fR]
+        [\fB\-\-extract\-dwo\fR]
+        [\fB\-\-extract\-symbol\fR]
+        [\fB\-\-writable\-text\fR]
+        [\fB\-\-readonly\-text\fR]
+        [\fB\-\-pure\fR]
+        [\fB\-\-impure\fR]
+        [\fB\-\-file\-alignment=\fR\fInum\fR]
+        [\fB\-\-heap=\fR\fIsize\fR]
+        [\fB\-\-image\-base=\fR\fIaddress\fR]
+        [\fB\-\-section\-alignment=\fR\fInum\fR]
+        [\fB\-\-stack=\fR\fIsize\fR]
+        [\fB\-\-subsystem=\fR\fIwhich\fR:\fImajor\fR.\fIminor\fR]
+        [\fB\-\-compress\-debug\-sections\fR]
+        [\fB\-\-decompress\-debug\-sections\fR]
+        [\fB\-\-elf\-stt\-common=\fR\fIval\fR]
+        [\fB\-\-merge\-notes\fR]
+        [\fB\-\-no\-merge\-notes\fR]
+        [\fB\-v\fR|\fB\-\-verbose\fR]
+        [\fB\-V\fR|\fB\-\-version\fR]
+        [\fB\-\-help\fR] [\fB\-\-info\fR]
+        \fIinfile\fR [\fIoutfile\fR]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The \s-1GNU\s0 \fBobjcopy\fR utility copies the contents of an object
+file to another.  \fBobjcopy\fR uses the \s-1GNU BFD\s0 Library to
+read and write the object files.  It can write the destination object
+file in a format different from that of the source object file.  The
+exact behavior of \fBobjcopy\fR is controlled by command-line options.
+Note that \fBobjcopy\fR should be able to copy a fully linked file
+between any two formats. However, copying a relocatable object file
+between any two formats may not work as expected.
+.PP
+\&\fBobjcopy\fR creates temporary files to do its translations and
+deletes them afterward.  \fBobjcopy\fR uses \s-1BFD\s0 to do all its
+translation work; it has access to all the formats described in \s-1BFD\s0
+and thus is able to recognize most formats without being told
+explicitly.
+.PP
+\&\fBobjcopy\fR can be used to generate S\-records by using an output
+target of \fBsrec\fR (e.g., use \fB\-O srec\fR).
+.PP
+\&\fBobjcopy\fR can be used to generate a raw binary file by using an
+output target of \fBbinary\fR (e.g., use \fB\-O binary\fR).  When
+\&\fBobjcopy\fR generates a raw binary file, it will essentially produce
+a memory dump of the contents of the input object file.  All symbols and
+relocation information will be discarded.  The memory dump will start at
+the load address of the lowest section copied into the output file.
+.PP
+When generating an S\-record or a raw binary file, it may be helpful to
+use \fB\-S\fR to remove sections containing debugging information.  In
+some cases \fB\-R\fR will be useful to remove sections which contain
+information that is not needed by the binary file.
+.PP
+Note\-\-\-\fBobjcopy\fR is not able to change the endianness of its input
+files.  If the input format has an endianness (some formats do not),
+\&\fBobjcopy\fR can only copy the inputs into file formats that have the
+same endianness or which have no endianness (e.g., \fBsrec\fR).
+(However, see the \fB\-\-reverse\-bytes\fR option.)
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fIinfile\fR" 4
+.IX Item "infile"
+.PD 0
+.IP "\fIoutfile\fR" 4
+.IX Item "outfile"
+.PD
+The input and output files, respectively.
+If you do not specify \fIoutfile\fR, \fBobjcopy\fR creates a
+temporary file and destructively renames the result with
+the name of \fIinfile\fR.
+.IP "\fB\-I\fR \fIbfdname\fR" 4
+.IX Item "-I bfdname"
+.PD 0
+.IP "\fB\-\-input\-target=\fR\fIbfdname\fR" 4
+.IX Item "--input-target=bfdname"
+.PD
+Consider the source file's object format to be \fIbfdname\fR, rather than
+attempting to deduce it.
+.IP "\fB\-O\fR \fIbfdname\fR" 4
+.IX Item "-O bfdname"
+.PD 0
+.IP "\fB\-\-output\-target=\fR\fIbfdname\fR" 4
+.IX Item "--output-target=bfdname"
+.PD
+Write the output file using the object format \fIbfdname\fR.
+.IP "\fB\-F\fR \fIbfdname\fR" 4
+.IX Item "-F bfdname"
+.PD 0
+.IP "\fB\-\-target=\fR\fIbfdname\fR" 4
+.IX Item "--target=bfdname"
+.PD
+Use \fIbfdname\fR as the object format for both the input and the output
+file; i.e., simply transfer data from source to destination with no
+translation.
+.IP "\fB\-B\fR \fIbfdarch\fR" 4
+.IX Item "-B bfdarch"
+.PD 0
+.IP "\fB\-\-binary\-architecture=\fR\fIbfdarch\fR" 4
+.IX Item "--binary-architecture=bfdarch"
+.PD
+Useful when transforming a architecture-less input file into an object file.
+In this case the output architecture can be set to \fIbfdarch\fR.  This
+option will be ignored if the input file has a known \fIbfdarch\fR.  You
+can access this binary data inside a program by referencing the special
+symbols that are created by the conversion process.  These symbols are
+called _binary_\fIobjfile\fR_start, _binary_\fIobjfile\fR_end and
+_binary_\fIobjfile\fR_size.  e.g. you can transform a picture file into
+an object file and then access it in your code using these symbols.
+.IP "\fB\-j\fR \fIsectionpattern\fR" 4
+.IX Item "-j sectionpattern"
+.PD 0
+.IP "\fB\-\-only\-section=\fR\fIsectionpattern\fR" 4
+.IX Item "--only-section=sectionpattern"
+.PD
+Copy only the indicated sections from the input file to the output file.
+This option may be given more than once.  Note that using this option
+inappropriately may make the output file unusable.  Wildcard
+characters are accepted in \fIsectionpattern\fR.
+.Sp
+If the first character of \fIsectionpattern\fR is the exclamation
+point (!) then matching sections will not be copied, even if earlier
+use of \fB\-\-only\-section\fR on the same command line would
+otherwise copy it.  For example:
+.Sp
+.Vb 1
+\&          \-\-only\-section=.text.* \-\-only\-section=!.text.foo
+.Ve
+.Sp
+will copy all sectinos maching '.text.*' but not the section
+\&'.text.foo'.
+.IP "\fB\-R\fR \fIsectionpattern\fR" 4
+.IX Item "-R sectionpattern"
+.PD 0
+.IP "\fB\-\-remove\-section=\fR\fIsectionpattern\fR" 4
+.IX Item "--remove-section=sectionpattern"
+.PD
+Remove any section matching \fIsectionpattern\fR from the output file.
+This option may be given more than once.  Note that using this option
+inappropriately may make the output file unusable.  Wildcard
+characters are accepted in \fIsectionpattern\fR.  Using both the
+\&\fB\-j\fR and \fB\-R\fR options together results in undefined
+behaviour.
+.Sp
+If the first character of \fIsectionpattern\fR is the exclamation
+point (!) then matching sections will not be removed even if an
+earlier use of \fB\-\-remove\-section\fR on the same command line
+would otherwise remove it.  For example:
+.Sp
+.Vb 1
+\&          \-\-remove\-section=.text.* \-\-remove\-section=!.text.foo
+.Ve
+.Sp
+will remove all sections matching the pattern '.text.*', but will not
+remove the section '.text.foo'.
+.IP "\fB\-\-remove\-relocations=\fR\fIsectionpattern\fR" 4
+.IX Item "--remove-relocations=sectionpattern"
+Remove non-dynamic relocations from the output file for any section
+matching \fIsectionpattern\fR.  This option may be given more than
+once.  Note that using this option inappropriately may make the output
+file unusable, and attempting to remove a dynamic relocation section
+such as \fB.rela.plt\fR from an executable or shared library with
+\&\fB\-\-remove\-relocations=.plt\fR will not work.  Wildcard characters
+are accepted in \fIsectionpattern\fR.
+For example:
+.Sp
+.Vb 1
+\&          \-\-remove\-relocations=.text.*
+.Ve
+.Sp
+will remove the relocations for all sections matching the pattern
+\&'.text.*'.
+.Sp
+If the first character of \fIsectionpattern\fR is the exclamation
+point (!) then matching sections will not have their relocation
+removed even if an earlier use of \fB\-\-remove\-relocations\fR on the
+same command line would otherwise cause the relocations to be removed.
+For example:
+.Sp
+.Vb 1
+\&          \-\-remove\-relocations=.text.* \-\-remove\-relocations=!.text.foo
+.Ve
+.Sp
+will remove all relocations for sections matching the pattern
+\&'.text.*', but will not remove relocations for the section
+\&'.text.foo'.
+.IP "\fB\-S\fR" 4
+.IX Item "-S"
+.PD 0
+.IP "\fB\-\-strip\-all\fR" 4
+.IX Item "--strip-all"
+.PD
+Do not copy relocation and symbol information from the source file.
+.IP "\fB\-g\fR" 4
+.IX Item "-g"
+.PD 0
+.IP "\fB\-\-strip\-debug\fR" 4
+.IX Item "--strip-debug"
+.PD
+Do not copy debugging symbols or sections from the source file.
+.IP "\fB\-\-strip\-unneeded\fR" 4
+.IX Item "--strip-unneeded"
+Strip all symbols that are not needed for relocation processing.
+.IP "\fB\-K\fR \fIsymbolname\fR" 4
+.IX Item "-K symbolname"
+.PD 0
+.IP "\fB\-\-keep\-symbol=\fR\fIsymbolname\fR" 4
+.IX Item "--keep-symbol=symbolname"
+.PD
+When stripping symbols, keep symbol \fIsymbolname\fR even if it would
+normally be stripped.  This option may be given more than once.
+.IP "\fB\-N\fR \fIsymbolname\fR" 4
+.IX Item "-N symbolname"
+.PD 0
+.IP "\fB\-\-strip\-symbol=\fR\fIsymbolname\fR" 4
+.IX Item "--strip-symbol=symbolname"
+.PD
+Do not copy symbol \fIsymbolname\fR from the source file.  This option
+may be given more than once.
+.IP "\fB\-\-strip\-unneeded\-symbol=\fR\fIsymbolname\fR" 4
+.IX Item "--strip-unneeded-symbol=symbolname"
+Do not copy symbol \fIsymbolname\fR from the source file unless it is needed
+by a relocation.  This option may be given more than once.
+.IP "\fB\-G\fR \fIsymbolname\fR" 4
+.IX Item "-G symbolname"
+.PD 0
+.IP "\fB\-\-keep\-global\-symbol=\fR\fIsymbolname\fR" 4
+.IX Item "--keep-global-symbol=symbolname"
+.PD
+Keep only symbol \fIsymbolname\fR global.  Make all other symbols local
+to the file, so that they are not visible externally.  This option may
+be given more than once.  Note: this option cannot be used in
+conjunction with the \fB\-\-globalize\-symbol\fR or
+\&\fB\-\-globalize\-symbols\fR options.
+.IP "\fB\-\-localize\-hidden\fR" 4
+.IX Item "--localize-hidden"
+In an \s-1ELF\s0 object, mark all symbols that have hidden or internal visibility
+as local.  This option applies on top of symbol-specific localization options
+such as \fB\-L\fR.
+.IP "\fB\-L\fR \fIsymbolname\fR" 4
+.IX Item "-L symbolname"
+.PD 0
+.IP "\fB\-\-localize\-symbol=\fR\fIsymbolname\fR" 4
+.IX Item "--localize-symbol=symbolname"
+.PD
+Convert a global or weak symbol called \fIsymbolname\fR into a local
+symbol, so that it is not visible externally.  This option may be
+given more than once.  Note \- unique symbols are not converted.
+.IP "\fB\-W\fR \fIsymbolname\fR" 4
+.IX Item "-W symbolname"
+.PD 0
+.IP "\fB\-\-weaken\-symbol=\fR\fIsymbolname\fR" 4
+.IX Item "--weaken-symbol=symbolname"
+.PD
+Make symbol \fIsymbolname\fR weak. This option may be given more than once.
+.IP "\fB\-\-globalize\-symbol=\fR\fIsymbolname\fR" 4
+.IX Item "--globalize-symbol=symbolname"
+Give symbol \fIsymbolname\fR global scoping so that it is visible
+outside of the file in which it is defined.  This option may be given
+more than once.  Note: this option cannot be used in conjunction with
+the \fB\-G\fR or \fB\-\-keep\-global\-symbol\fR options.
+.IP "\fB\-w\fR" 4
+.IX Item "-w"
+.PD 0
+.IP "\fB\-\-wildcard\fR" 4
+.IX Item "--wildcard"
+.PD
+Permit regular expressions in \fIsymbolname\fRs used in other command
+line options.  The question mark (?), asterisk (*), backslash (\e) and
+square brackets ([]) operators can be used anywhere in the symbol
+name.  If the first character of the symbol name is the exclamation
+point (!) then the sense of the switch is reversed for that symbol.
+For example:
+.Sp
+.Vb 1
+\&          \-w \-W !foo \-W fo*
+.Ve
+.Sp
+would cause objcopy to weaken all symbols that start with \*(L"fo\*(R"
+except for the symbol \*(L"foo\*(R".
+.IP "\fB\-x\fR" 4
+.IX Item "-x"
+.PD 0
+.IP "\fB\-\-discard\-all\fR" 4
+.IX Item "--discard-all"
+.PD
+Do not copy non-global symbols from the source file.
+.IP "\fB\-X\fR" 4
+.IX Item "-X"
+.PD 0
+.IP "\fB\-\-discard\-locals\fR" 4
+.IX Item "--discard-locals"
+.PD
+Do not copy compiler-generated local symbols.
+(These usually start with \fBL\fR or \fB.\fR.)
+.IP "\fB\-b\fR \fIbyte\fR" 4
+.IX Item "-b byte"
+.PD 0
+.IP "\fB\-\-byte=\fR\fIbyte\fR" 4
+.IX Item "--byte=byte"
+.PD
+If interleaving has been enabled via the \fB\-\-interleave\fR option
+then start the range of bytes to keep at the \fIbyte\fRth byte.
+\&\fIbyte\fR can be in the range from 0 to \fIbreadth\fR\-1, where
+\&\fIbreadth\fR is the value given by the \fB\-\-interleave\fR option.
+.IP "\fB\-i [\fR\fIbreadth\fR\fB]\fR" 4
+.IX Item "-i [breadth]"
+.PD 0
+.IP "\fB\-\-interleave[=\fR\fIbreadth\fR\fB]\fR" 4
+.IX Item "--interleave[=breadth]"
+.PD
+Only copy a range out of every \fIbreadth\fR bytes.  (Header data is
+not affected).  Select which byte in the range begins the copy with
+the \fB\-\-byte\fR option.  Select the width of the range with the
+\&\fB\-\-interleave\-width\fR option.
+.Sp
+This option is useful for creating files to program \s-1ROM.\s0  It is
+typically used with an \f(CW\*(C`srec\*(C'\fR output target.  Note that
+\&\fBobjcopy\fR will complain if you do not specify the
+\&\fB\-\-byte\fR option as well.
+.Sp
+The default interleave breadth is 4, so with \fB\-\-byte\fR set to 0,
+\&\fBobjcopy\fR would copy the first byte out of every four bytes
+from the input to the output.
+.IP "\fB\-\-interleave\-width=\fR\fIwidth\fR" 4
+.IX Item "--interleave-width=width"
+When used with the \fB\-\-interleave\fR option, copy \fIwidth\fR
+bytes at a time.  The start of the range of bytes to be copied is set
+by the \fB\-\-byte\fR option, and the extent of the range is set with
+the \fB\-\-interleave\fR option.
+.Sp
+The default value for this option is 1.  The value of \fIwidth\fR plus
+the \fIbyte\fR value set by the \fB\-\-byte\fR option must not exceed
+the interleave breadth set by the \fB\-\-interleave\fR option.
+.Sp
+This option can be used to create images for two 16\-bit flashes interleaved
+in a 32\-bit bus by passing \fB\-b 0 \-i 4 \-\-interleave\-width=2\fR
+and \fB\-b 2 \-i 4 \-\-interleave\-width=2\fR to two \fBobjcopy\fR
+commands.  If the input was '12345678' then the outputs would be
+\&'1256' and '3478' respectively.
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+.PD 0
+.IP "\fB\-\-preserve\-dates\fR" 4
+.IX Item "--preserve-dates"
+.PD
+Set the access and modification dates of the output file to be the same
+as those of the input file.
+.IP "\fB\-D\fR" 4
+.IX Item "-D"
+.PD 0
+.IP "\fB\-\-enable\-deterministic\-archives\fR" 4
+.IX Item "--enable-deterministic-archives"
+.PD
+Operate in \fIdeterministic\fR mode.  When copying archive members
+and writing the archive index, use zero for UIDs, GIDs, timestamps,
+and use consistent file modes for all files.
+.Sp
+If \fIbinutils\fR was configured with
+\&\fB\-\-enable\-deterministic\-archives\fR, then this mode is on by default.
+It can be disabled with the \fB\-U\fR option, below.
+.IP "\fB\-U\fR" 4
+.IX Item "-U"
+.PD 0
+.IP "\fB\-\-disable\-deterministic\-archives\fR" 4
+.IX Item "--disable-deterministic-archives"
+.PD
+Do \fInot\fR operate in \fIdeterministic\fR mode.  This is the
+inverse of the \fB\-D\fR option, above: when copying archive members
+and writing the archive index, use their actual \s-1UID, GID,\s0 timestamp,
+and file mode values.
+.Sp
+This is the default unless \fIbinutils\fR was configured with
+\&\fB\-\-enable\-deterministic\-archives\fR.
+.IP "\fB\-\-debugging\fR" 4
+.IX Item "--debugging"
+Convert debugging information, if possible.  This is not the default
+because only certain debugging formats are supported, and the
+conversion process can be time consuming.
+.IP "\fB\-\-gap\-fill\fR \fIval\fR" 4
+.IX Item "--gap-fill val"
+Fill gaps between sections with \fIval\fR.  This operation applies to
+the \fIload address\fR (\s-1LMA\s0) of the sections.  It is done by increasing
+the size of the section with the lower address, and filling in the extra
+space created with \fIval\fR.
+.IP "\fB\-\-pad\-to\fR \fIaddress\fR" 4
+.IX Item "--pad-to address"
+Pad the output file up to the load address \fIaddress\fR.  This is
+done by increasing the size of the last section.  The extra space is
+filled in with the value specified by \fB\-\-gap\-fill\fR (default zero).
+.IP "\fB\-\-set\-start\fR \fIval\fR" 4
+.IX Item "--set-start val"
+Set the start address of the new file to \fIval\fR.  Not all object file
+formats support setting the start address.
+.IP "\fB\-\-change\-start\fR \fIincr\fR" 4
+.IX Item "--change-start incr"
+.PD 0
+.IP "\fB\-\-adjust\-start\fR \fIincr\fR" 4
+.IX Item "--adjust-start incr"
+.PD
+Change the start address by adding \fIincr\fR.  Not all object file
+formats support setting the start address.
+.IP "\fB\-\-change\-addresses\fR \fIincr\fR" 4
+.IX Item "--change-addresses incr"
+.PD 0
+.IP "\fB\-\-adjust\-vma\fR \fIincr\fR" 4
+.IX Item "--adjust-vma incr"
+.PD
+Change the \s-1VMA\s0 and \s-1LMA\s0 addresses of all sections, as well as the start
+address, by adding \fIincr\fR.  Some object file formats do not permit
+section addresses to be changed arbitrarily.  Note that this does not
+relocate the sections; if the program expects sections to be loaded at a
+certain address, and this option is used to change the sections such
+that they are loaded at a different address, the program may fail.
+.IP "\fB\-\-change\-section\-address\fR \fIsectionpattern\fR\fB{=,+,\-}\fR\fIval\fR" 4
+.IX Item "--change-section-address sectionpattern{=,+,-}val"
+.PD 0
+.IP "\fB\-\-adjust\-section\-vma\fR \fIsectionpattern\fR\fB{=,+,\-}\fR\fIval\fR" 4
+.IX Item "--adjust-section-vma sectionpattern{=,+,-}val"
+.PD
+Set or change both the \s-1VMA\s0 address and the \s-1LMA\s0 address of any section
+matching \fIsectionpattern\fR.  If \fB=\fR is used, the section
+address is set to \fIval\fR.  Otherwise, \fIval\fR is added to or
+subtracted from the section address.  See the comments under
+\&\fB\-\-change\-addresses\fR, above. If \fIsectionpattern\fR does not
+match any sections in the input file, a warning will be issued, unless
+\&\fB\-\-no\-change\-warnings\fR is used.
+.IP "\fB\-\-change\-section\-lma\fR \fIsectionpattern\fR\fB{=,+,\-}\fR\fIval\fR" 4
+.IX Item "--change-section-lma sectionpattern{=,+,-}val"
+Set or change the \s-1LMA\s0 address of any sections matching
+\&\fIsectionpattern\fR.  The \s-1LMA\s0 address is the address where the
+section will be loaded into memory at program load time.  Normally
+this is the same as the \s-1VMA\s0 address, which is the address of the
+section at program run time, but on some systems, especially those
+where a program is held in \s-1ROM,\s0 the two can be different.  If \fB=\fR
+is used, the section address is set to \fIval\fR.  Otherwise,
+\&\fIval\fR is added to or subtracted from the section address.  See the
+comments under \fB\-\-change\-addresses\fR, above.  If
+\&\fIsectionpattern\fR does not match any sections in the input file, a
+warning will be issued, unless \fB\-\-no\-change\-warnings\fR is used.
+.IP "\fB\-\-change\-section\-vma\fR \fIsectionpattern\fR\fB{=,+,\-}\fR\fIval\fR" 4
+.IX Item "--change-section-vma sectionpattern{=,+,-}val"
+Set or change the \s-1VMA\s0 address of any section matching
+\&\fIsectionpattern\fR.  The \s-1VMA\s0 address is the address where the
+section will be located once the program has started executing.
+Normally this is the same as the \s-1LMA\s0 address, which is the address
+where the section will be loaded into memory, but on some systems,
+especially those where a program is held in \s-1ROM,\s0 the two can be
+different.  If \fB=\fR is used, the section address is set to
+\&\fIval\fR.  Otherwise, \fIval\fR is added to or subtracted from the
+section address.  See the comments under \fB\-\-change\-addresses\fR,
+above.  If \fIsectionpattern\fR does not match any sections in the
+input file, a warning will be issued, unless
+\&\fB\-\-no\-change\-warnings\fR is used.
+.IP "\fB\-\-change\-warnings\fR" 4
+.IX Item "--change-warnings"
+.PD 0
+.IP "\fB\-\-adjust\-warnings\fR" 4
+.IX Item "--adjust-warnings"
+.PD
+If \fB\-\-change\-section\-address\fR or \fB\-\-change\-section\-lma\fR or
+\&\fB\-\-change\-section\-vma\fR is used, and the section pattern does not
+match any sections, issue a warning.  This is the default.
+.IP "\fB\-\-no\-change\-warnings\fR" 4
+.IX Item "--no-change-warnings"
+.PD 0
+.IP "\fB\-\-no\-adjust\-warnings\fR" 4
+.IX Item "--no-adjust-warnings"
+.PD
+Do not issue a warning if \fB\-\-change\-section\-address\fR or
+\&\fB\-\-adjust\-section\-lma\fR or \fB\-\-adjust\-section\-vma\fR is used, even
+if the section pattern does not match any sections.
+.IP "\fB\-\-set\-section\-flags\fR \fIsectionpattern\fR\fB=\fR\fIflags\fR" 4
+.IX Item "--set-section-flags sectionpattern=flags"
+Set the flags for any sections matching \fIsectionpattern\fR.  The
+\&\fIflags\fR argument is a comma separated string of flag names.  The
+recognized names are \fBalloc\fR, \fBcontents\fR, \fBload\fR,
+\&\fBnoload\fR, \fBreadonly\fR, \fBcode\fR, \fBdata\fR, \fBrom\fR,
+\&\fBshare\fR, and \fBdebug\fR.  You can set the \fBcontents\fR flag
+for a section which does not have contents, but it is not meaningful
+to clear the \fBcontents\fR flag of a section which does have
+contents\*(--just remove the section instead.  Not all flags are
+meaningful for all object file formats.
+.IP "\fB\-\-add\-section\fR \fIsectionname\fR\fB=\fR\fIfilename\fR" 4
+.IX Item "--add-section sectionname=filename"
+Add a new section named \fIsectionname\fR while copying the file.  The
+contents of the new section are taken from the file \fIfilename\fR.  The
+size of the section will be the size of the file.  This option only
+works on file formats which can support sections with arbitrary names.
+Note \- it may be necessary to use the \fB\-\-set\-section\-flags\fR
+option to set the attributes of the newly created section.
+.IP "\fB\-\-dump\-section\fR \fIsectionname\fR\fB=\fR\fIfilename\fR" 4
+.IX Item "--dump-section sectionname=filename"
+Place the contents of section named \fIsectionname\fR into the file
+\&\fIfilename\fR, overwriting any contents that may have been there
+previously.  This option is the inverse of \fB\-\-add\-section\fR.
+This option is similar to the \fB\-\-only\-section\fR option except
+that it does not create a formatted file, it just dumps the contents
+as raw binary data, without applying any relocations.  The option can
+be specified more than once.
+.IP "\fB\-\-update\-section\fR \fIsectionname\fR\fB=\fR\fIfilename\fR" 4
+.IX Item "--update-section sectionname=filename"
+Replace the existing contents of a section named \fIsectionname\fR
+with the contents of file \fIfilename\fR.  The size of the section
+will be adjusted to the size of the file.  The section flags for
+\&\fIsectionname\fR will be unchanged.  For \s-1ELF\s0 format files the section
+to segment mapping will also remain unchanged, something which is not
+possible using \fB\-\-remove\-section\fR followed by
+\&\fB\-\-add\-section\fR.  The option can be specified more than once.
+.Sp
+Note \- it is possible to use \fB\-\-rename\-section\fR and
+\&\fB\-\-update\-section\fR to both update and rename a section from one
+command line.  In this case, pass the original section name to
+\&\fB\-\-update\-section\fR, and the original and new section names to
+\&\fB\-\-rename\-section\fR.
+.IP "\fB\-\-add\-symbol\fR \fIname\fR\fB=[\fR\fIsection\fR\fB:]\fR\fIvalue\fR\fB[,\fR\fIflags\fR\fB]\fR" 4
+.IX Item "--add-symbol name=[section:]value[,flags]"
+Add a new symbol named \fIname\fR while copying the file.  This option may be
+specified multiple times.  If the \fIsection\fR is given, the symbol will be
+associated with and relative to that section, otherwise it will be an \s-1ABS\s0
+symbol.  Specifying an undefined section will result in a fatal error.  There
+is no check for the value, it will be taken as specified.  Symbol flags can
+be specified and not all flags will be meaningful for all object file
+formats.  By default, the symbol will be global.  The special flag
+\&'before=\fIothersym\fR' will insert the new symbol in front of the specified
+\&\fIothersym\fR, otherwise the symbol(s) will be added at the end of the
+symbol table in the order they appear.
+.IP "\fB\-\-rename\-section\fR \fIoldname\fR\fB=\fR\fInewname\fR\fB[,\fR\fIflags\fR\fB]\fR" 4
+.IX Item "--rename-section oldname=newname[,flags]"
+Rename a section from \fIoldname\fR to \fInewname\fR, optionally
+changing the section's flags to \fIflags\fR in the process.  This has
+the advantage over using a linker script to perform the rename in that
+the output stays as an object file and does not become a linked
+executable.
+.Sp
+This option is particularly helpful when the input format is binary,
+since this will always create a section called .data.  If for example,
+you wanted instead to create a section called .rodata containing binary
+data you could use the following command line to achieve it:
+.Sp
+.Vb 3
+\&          objcopy \-I binary \-O <output_format> \-B <architecture> \e
+\&           \-\-rename\-section .data=.rodata,alloc,load,readonly,data,contents \e
+\&           <input_binary_file> <output_object_file>
+.Ve
+.IP "\fB\-\-long\-section\-names {enable,disable,keep}\fR" 4
+.IX Item "--long-section-names {enable,disable,keep}"
+Controls the handling of long section names when processing \f(CW\*(C`COFF\*(C'\fR
+and \f(CW\*(C`PE\-COFF\*(C'\fR object formats.  The default behaviour, \fBkeep\fR,
+is to preserve long section names if any are present in the input file.
+The \fBenable\fR and \fBdisable\fR options forcibly enable or disable
+the use of long section names in the output object; when \fBdisable\fR
+is in effect, any long section names in the input object will be truncated.
+The \fBenable\fR option will only emit long section names if any are
+present in the inputs; this is mostly the same as \fBkeep\fR, but it
+is left undefined whether the \fBenable\fR option might force the
+creation of an empty string table in the output file.
+.IP "\fB\-\-change\-leading\-char\fR" 4
+.IX Item "--change-leading-char"
+Some object file formats use special characters at the start of
+symbols.  The most common such character is underscore, which compilers
+often add before every symbol.  This option tells \fBobjcopy\fR to
+change the leading character of every symbol when it converts between
+object file formats.  If the object file formats use the same leading
+character, this option has no effect.  Otherwise, it will add a
+character, or remove a character, or change a character, as
+appropriate.
+.IP "\fB\-\-remove\-leading\-char\fR" 4
+.IX Item "--remove-leading-char"
+If the first character of a global symbol is a special symbol leading
+character used by the object file format, remove the character.  The
+most common symbol leading character is underscore.  This option will
+remove a leading underscore from all global symbols.  This can be useful
+if you want to link together objects of different file formats with
+different conventions for symbol names.  This is different from
+\&\fB\-\-change\-leading\-char\fR because it always changes the symbol name
+when appropriate, regardless of the object file format of the output
+file.
+.IP "\fB\-\-reverse\-bytes=\fR\fInum\fR" 4
+.IX Item "--reverse-bytes=num"
+Reverse the bytes in a section with output contents.  A section length must
+be evenly divisible by the value given in order for the swap to be able to
+take place. Reversing takes place before the interleaving is performed.
+.Sp
+This option is used typically in generating \s-1ROM\s0 images for problematic
+target systems.  For example, on some target boards, the 32\-bit words
+fetched from 8\-bit ROMs are re-assembled in little-endian byte order
+regardless of the \s-1CPU\s0 byte order.  Depending on the programming model, the
+endianness of the \s-1ROM\s0 may need to be modified.
+.Sp
+Consider a simple file with a section containing the following eight
+bytes:  \f(CW12345678\fR.
+.Sp
+Using \fB\-\-reverse\-bytes=2\fR for the above example, the bytes in the
+output file would be ordered \f(CW21436587\fR.
+.Sp
+Using \fB\-\-reverse\-bytes=4\fR for the above example, the bytes in the
+output file would be ordered \f(CW43218765\fR.
+.Sp
+By using \fB\-\-reverse\-bytes=2\fR for the above example, followed by
+\&\fB\-\-reverse\-bytes=4\fR on the output file, the bytes in the second
+output file would be ordered \f(CW34127856\fR.
+.IP "\fB\-\-srec\-len=\fR\fIival\fR" 4
+.IX Item "--srec-len=ival"
+Meaningful only for srec output.  Set the maximum length of the Srecords
+being produced to \fIival\fR.  This length covers both address, data and
+crc fields.
+.IP "\fB\-\-srec\-forceS3\fR" 4
+.IX Item "--srec-forceS3"
+Meaningful only for srec output.  Avoid generation of S1/S2 records,
+creating S3\-only record format.
+.IP "\fB\-\-redefine\-sym\fR \fIold\fR\fB=\fR\fInew\fR" 4
+.IX Item "--redefine-sym old=new"
+Change the name of a symbol \fIold\fR, to \fInew\fR.  This can be useful
+when one is trying link two things together for which you have no
+source, and there are name collisions.
+.IP "\fB\-\-redefine\-syms=\fR\fIfilename\fR" 4
+.IX Item "--redefine-syms=filename"
+Apply \fB\-\-redefine\-sym\fR to each symbol pair "\fIold\fR \fInew\fR"
+listed in the file \fIfilename\fR.  \fIfilename\fR is simply a flat file,
+with one symbol pair per line.  Line comments may be introduced by the hash
+character.  This option may be given more than once.
+.IP "\fB\-\-weaken\fR" 4
+.IX Item "--weaken"
+Change all global symbols in the file to be weak.  This can be useful
+when building an object which will be linked against other objects using
+the \fB\-R\fR option to the linker.  This option is only effective when
+using an object file format which supports weak symbols.
+.IP "\fB\-\-keep\-symbols=\fR\fIfilename\fR" 4
+.IX Item "--keep-symbols=filename"
+Apply \fB\-\-keep\-symbol\fR option to each symbol listed in the file
+\&\fIfilename\fR.  \fIfilename\fR is simply a flat file, with one symbol
+name per line.  Line comments may be introduced by the hash character.
+This option may be given more than once.
+.IP "\fB\-\-strip\-symbols=\fR\fIfilename\fR" 4
+.IX Item "--strip-symbols=filename"
+Apply \fB\-\-strip\-symbol\fR option to each symbol listed in the file
+\&\fIfilename\fR.  \fIfilename\fR is simply a flat file, with one symbol
+name per line.  Line comments may be introduced by the hash character.
+This option may be given more than once.
+.IP "\fB\-\-strip\-unneeded\-symbols=\fR\fIfilename\fR" 4
+.IX Item "--strip-unneeded-symbols=filename"
+Apply \fB\-\-strip\-unneeded\-symbol\fR option to each symbol listed in
+the file \fIfilename\fR.  \fIfilename\fR is simply a flat file, with one
+symbol name per line.  Line comments may be introduced by the hash
+character.  This option may be given more than once.
+.IP "\fB\-\-keep\-global\-symbols=\fR\fIfilename\fR" 4
+.IX Item "--keep-global-symbols=filename"
+Apply \fB\-\-keep\-global\-symbol\fR option to each symbol listed in the
+file \fIfilename\fR.  \fIfilename\fR is simply a flat file, with one
+symbol name per line.  Line comments may be introduced by the hash
+character.  This option may be given more than once.
+.IP "\fB\-\-localize\-symbols=\fR\fIfilename\fR" 4
+.IX Item "--localize-symbols=filename"
+Apply \fB\-\-localize\-symbol\fR option to each symbol listed in the file
+\&\fIfilename\fR.  \fIfilename\fR is simply a flat file, with one symbol
+name per line.  Line comments may be introduced by the hash character.
+This option may be given more than once.
+.IP "\fB\-\-globalize\-symbols=\fR\fIfilename\fR" 4
+.IX Item "--globalize-symbols=filename"
+Apply \fB\-\-globalize\-symbol\fR option to each symbol listed in the file
+\&\fIfilename\fR.  \fIfilename\fR is simply a flat file, with one symbol
+name per line.  Line comments may be introduced by the hash character.
+This option may be given more than once.  Note: this option cannot be
+used in conjunction with the \fB\-G\fR or \fB\-\-keep\-global\-symbol\fR
+options.
+.IP "\fB\-\-weaken\-symbols=\fR\fIfilename\fR" 4
+.IX Item "--weaken-symbols=filename"
+Apply \fB\-\-weaken\-symbol\fR option to each symbol listed in the file
+\&\fIfilename\fR.  \fIfilename\fR is simply a flat file, with one symbol
+name per line.  Line comments may be introduced by the hash character.
+This option may be given more than once.
+.IP "\fB\-\-alt\-machine\-code=\fR\fIindex\fR" 4
+.IX Item "--alt-machine-code=index"
+If the output architecture has alternate machine codes, use the
+\&\fIindex\fRth code instead of the default one.  This is useful in case
+a machine is assigned an official code and the tool-chain adopts the
+new code, but other applications still depend on the original code
+being used.  For \s-1ELF\s0 based architectures if the \fIindex\fR
+alternative does not exist then the value is treated as an absolute
+number to be stored in the e_machine field of the \s-1ELF\s0 header.
+.IP "\fB\-\-writable\-text\fR" 4
+.IX Item "--writable-text"
+Mark the output text as writable.  This option isn't meaningful for all
+object file formats.
+.IP "\fB\-\-readonly\-text\fR" 4
+.IX Item "--readonly-text"
+Make the output text write protected.  This option isn't meaningful for all
+object file formats.
+.IP "\fB\-\-pure\fR" 4
+.IX Item "--pure"
+Mark the output file as demand paged.  This option isn't meaningful for all
+object file formats.
+.IP "\fB\-\-impure\fR" 4
+.IX Item "--impure"
+Mark the output file as impure.  This option isn't meaningful for all
+object file formats.
+.IP "\fB\-\-prefix\-symbols=\fR\fIstring\fR" 4
+.IX Item "--prefix-symbols=string"
+Prefix all symbols in the output file with \fIstring\fR.
+.IP "\fB\-\-prefix\-sections=\fR\fIstring\fR" 4
+.IX Item "--prefix-sections=string"
+Prefix all section names in the output file with \fIstring\fR.
+.IP "\fB\-\-prefix\-alloc\-sections=\fR\fIstring\fR" 4
+.IX Item "--prefix-alloc-sections=string"
+Prefix all the names of all allocated sections in the output file with
+\&\fIstring\fR.
+.IP "\fB\-\-add\-gnu\-debuglink=\fR\fIpath-to-file\fR" 4
+.IX Item "--add-gnu-debuglink=path-to-file"
+Creates a .gnu_debuglink section which contains a reference to
+\&\fIpath-to-file\fR and adds it to the output file.  Note: the file at
+\&\fIpath-to-file\fR must exist.  Part of the process of adding the
+\&.gnu_debuglink section involves embedding a checksum of the contents
+of the debug info file into the section.
+.Sp
+If the debug info file is built in one location but it is going to be
+installed at a later time into a different location then do not use
+the path to the installed location.  The \fB\-\-add\-gnu\-debuglink\fR
+option will fail because the installed file does not exist yet.
+Instead put the debug info file in the current directory and use the
+\&\fB\-\-add\-gnu\-debuglink\fR option without any directory components,
+like this:
+.Sp
+.Vb 1
+\&         objcopy \-\-add\-gnu\-debuglink=foo.debug
+.Ve
+.Sp
+At debug time the debugger will attempt to look for the separate debug
+info file in a set of known locations.  The exact set of these
+locations varies depending upon the distribution being used, but it
+typically includes:
+.RS 4
+.ie n .IP """* The same directory as the executable.""" 4
+.el .IP "\f(CW* The same directory as the executable.\fR" 4
+.IX Item "* The same directory as the executable."
+.PD 0
+.ie n .IP """* A sub\-directory of the directory containing the executable""" 4
+.el .IP "\f(CW* A sub\-directory of the directory containing the executable\fR" 4
+.IX Item "* A sub-directory of the directory containing the executable"
+.PD
+called .debug
+.ie n .IP """* A global debug directory such as /usr/lib/debug.""" 4
+.el .IP "\f(CW* A global debug directory such as /usr/lib/debug.\fR" 4
+.IX Item "* A global debug directory such as /usr/lib/debug."
+.RE
+.RS 4
+.Sp
+As long as the debug info file has been installed into one of these
+locations before the debugger is run everything should work
+correctly.
+.RE
+.IP "\fB\-\-keep\-file\-symbols\fR" 4
+.IX Item "--keep-file-symbols"
+When stripping a file, perhaps with \fB\-\-strip\-debug\fR or
+\&\fB\-\-strip\-unneeded\fR, retain any symbols specifying source file names,
+which would otherwise get stripped.
+.IP "\fB\-\-only\-keep\-debug\fR" 4
+.IX Item "--only-keep-debug"
+Strip a file, removing contents of any sections that would not be
+stripped by \fB\-\-strip\-debug\fR and leaving the debugging sections
+intact.  In \s-1ELF\s0 files, this preserves all note sections in the output.
+.Sp
+Note \- the section headers of the stripped sections are preserved,
+including their sizes, but the contents of the section are discarded.
+The section headers are preserved so that other tools can match up the
+debuginfo file with the real executable, even if that executable has
+been relocated to a different address space.
+.Sp
+The intention is that this option will be used in conjunction with
+\&\fB\-\-add\-gnu\-debuglink\fR to create a two part executable.  One a
+stripped binary which will occupy less space in \s-1RAM\s0 and in a
+distribution and the second a debugging information file which is only
+needed if debugging abilities are required.  The suggested procedure
+to create these files is as follows:
+.RS 4
+.IP "1.<Link the executable as normal.  Assuming that it is called>" 4
+.IX Item "1.<Link the executable as normal. Assuming that it is called>"
+\&\f(CW\*(C`foo\*(C'\fR then...
+.ie n .IP "1.<Run ""objcopy \-\-only\-keep\-debug foo foo.dbg"" to>" 4
+.el .IP "1.<Run \f(CWobjcopy \-\-only\-keep\-debug foo foo.dbg\fR to>" 4
+.IX Item "1.<Run objcopy --only-keep-debug foo foo.dbg to>"
+create a file containing the debugging info.
+.ie n .IP "1.<Run ""objcopy \-\-strip\-debug foo"" to create a>" 4
+.el .IP "1.<Run \f(CWobjcopy \-\-strip\-debug foo\fR to create a>" 4
+.IX Item "1.<Run objcopy --strip-debug foo to create a>"
+stripped executable.
+.ie n .IP "1.<Run ""objcopy \-\-add\-gnu\-debuglink=foo.dbg foo"">" 4
+.el .IP "1.<Run \f(CWobjcopy \-\-add\-gnu\-debuglink=foo.dbg foo\fR>" 4
+.IX Item "1.<Run objcopy --add-gnu-debuglink=foo.dbg foo>"
+to add a link to the debugging info into the stripped executable.
+.RE
+.RS 4
+.Sp
+Note\-\-\-the choice of \f(CW\*(C`.dbg\*(C'\fR as an extension for the debug info
+file is arbitrary.  Also the \f(CW\*(C`\-\-only\-keep\-debug\*(C'\fR step is
+optional.  You could instead do this:
+.IP "1.<Link the executable as normal.>" 4
+.IX Item "1.<Link the executable as normal.>"
+.PD 0
+.ie n .IP "1.<Copy ""foo"" to  ""foo.full"">" 4
+.el .IP "1.<Copy \f(CWfoo\fR to  \f(CWfoo.full\fR>" 4
+.IX Item "1.<Copy foo to foo.full>"
+.ie n .IP "1.<Run ""objcopy \-\-strip\-debug foo"">" 4
+.el .IP "1.<Run \f(CWobjcopy \-\-strip\-debug foo\fR>" 4
+.IX Item "1.<Run objcopy --strip-debug foo>"
+.ie n .IP "1.<Run ""objcopy \-\-add\-gnu\-debuglink=foo.full foo"">" 4
+.el .IP "1.<Run \f(CWobjcopy \-\-add\-gnu\-debuglink=foo.full foo\fR>" 4
+.IX Item "1.<Run objcopy --add-gnu-debuglink=foo.full foo>"
+.RE
+.RS 4
+.PD
+.Sp
+i.e., the file pointed to by the \fB\-\-add\-gnu\-debuglink\fR can be the
+full executable.  It does not have to be a file created by the
+\&\fB\-\-only\-keep\-debug\fR switch.
+.Sp
+Note\-\-\-this switch is only intended for use on fully linked files.  It
+does not make sense to use it on object files where the debugging
+information may be incomplete.  Besides the gnu_debuglink feature
+currently only supports the presence of one filename containing
+debugging information, not multiple filenames on a one-per-object-file
+basis.
+.RE
+.IP "\fB\-\-strip\-dwo\fR" 4
+.IX Item "--strip-dwo"
+Remove the contents of all \s-1DWARF\s0 .dwo sections, leaving the
+remaining debugging sections and all symbols intact.
+This option is intended for use by the compiler as part of
+the \fB\-gsplit\-dwarf\fR option, which splits debug information
+between the .o file and a separate .dwo file.  The compiler
+generates all debug information in the same file, then uses
+the \fB\-\-extract\-dwo\fR option to copy the .dwo sections to
+the .dwo file, then the \fB\-\-strip\-dwo\fR option to remove
+those sections from the original .o file.
+.IP "\fB\-\-extract\-dwo\fR" 4
+.IX Item "--extract-dwo"
+Extract the contents of all \s-1DWARF\s0 .dwo sections.  See the
+\&\fB\-\-strip\-dwo\fR option for more information.
+.IP "\fB\-\-file\-alignment\fR \fInum\fR" 4
+.IX Item "--file-alignment num"
+Specify the file alignment.  Sections in the file will always begin at
+file offsets which are multiples of this number.  This defaults to
+512.
+[This option is specific to \s-1PE\s0 targets.]
+.IP "\fB\-\-heap\fR \fIreserve\fR" 4
+.IX Item "--heap reserve"
+.PD 0
+.IP "\fB\-\-heap\fR \fIreserve\fR\fB,\fR\fIcommit\fR" 4
+.IX Item "--heap reserve,commit"
+.PD
+Specify the number of bytes of memory to reserve (and optionally commit)
+to be used as heap for this program.
+[This option is specific to \s-1PE\s0 targets.]
+.IP "\fB\-\-image\-base\fR \fIvalue\fR" 4
+.IX Item "--image-base value"
+Use \fIvalue\fR as the base address of your program or dll.  This is
+the lowest memory location that will be used when your program or dll
+is loaded.  To reduce the need to relocate and improve performance of
+your dlls, each should have a unique base address and not overlap any
+other dlls.  The default is 0x400000 for executables, and 0x10000000
+for dlls.
+[This option is specific to \s-1PE\s0 targets.]
+.IP "\fB\-\-section\-alignment\fR \fInum\fR" 4
+.IX Item "--section-alignment num"
+Sets the section alignment.  Sections in memory will always begin at
+addresses which are a multiple of this number.  Defaults to 0x1000.
+[This option is specific to \s-1PE\s0 targets.]
+.IP "\fB\-\-stack\fR \fIreserve\fR" 4
+.IX Item "--stack reserve"
+.PD 0
+.IP "\fB\-\-stack\fR \fIreserve\fR\fB,\fR\fIcommit\fR" 4
+.IX Item "--stack reserve,commit"
+.PD
+Specify the number of bytes of memory to reserve (and optionally commit)
+to be used as stack for this program.
+[This option is specific to \s-1PE\s0 targets.]
+.IP "\fB\-\-subsystem\fR \fIwhich\fR" 4
+.IX Item "--subsystem which"
+.PD 0
+.IP "\fB\-\-subsystem\fR \fIwhich\fR\fB:\fR\fImajor\fR" 4
+.IX Item "--subsystem which:major"
+.IP "\fB\-\-subsystem\fR \fIwhich\fR\fB:\fR\fImajor\fR\fB.\fR\fIminor\fR" 4
+.IX Item "--subsystem which:major.minor"
+.PD
+Specifies the subsystem under which your program will execute.  The
+legal values for \fIwhich\fR are \f(CW\*(C`native\*(C'\fR, \f(CW\*(C`windows\*(C'\fR,
+\&\f(CW\*(C`console\*(C'\fR, \f(CW\*(C`posix\*(C'\fR, \f(CW\*(C`efi\-app\*(C'\fR, \f(CW\*(C`efi\-bsd\*(C'\fR,
+\&\f(CW\*(C`efi\-rtd\*(C'\fR, \f(CW\*(C`sal\-rtd\*(C'\fR, and \f(CW\*(C`xbox\*(C'\fR.  You may optionally set
+the subsystem version also.  Numeric values are also accepted for
+\&\fIwhich\fR.
+[This option is specific to \s-1PE\s0 targets.]
+.IP "\fB\-\-extract\-symbol\fR" 4
+.IX Item "--extract-symbol"
+Keep the file's section flags and symbols but remove all section data.
+Specifically, the option:
+.RS 4
+.IP "*<removes the contents of all sections;>" 4
+.IX Item "*<removes the contents of all sections;>"
+.PD 0
+.IP "*<sets the size of every section to zero; and>" 4
+.IX Item "*<sets the size of every section to zero; and>"
+.IP "*<sets the file's start address to zero.>" 4
+.IX Item "*<sets the file's start address to zero.>"
+.RE
+.RS 4
+.PD
+.Sp
+This option is used to build a \fI.sym\fR file for a VxWorks kernel.
+It can also be a useful way of reducing the size of a \fB\-\-just\-symbols\fR
+linker input file.
+.RE
+.IP "\fB\-\-compress\-debug\-sections\fR" 4
+.IX Item "--compress-debug-sections"
+Compress \s-1DWARF\s0 debug sections using zlib with \s-1SHF_COMPRESSED\s0 from the
+\&\s-1ELF ABI.\s0  Note \- if compression would actually make a section
+\&\fIlarger\fR, then it is not compressed.
+.IP "\fB\-\-compress\-debug\-sections=none\fR" 4
+.IX Item "--compress-debug-sections=none"
+.PD 0
+.IP "\fB\-\-compress\-debug\-sections=zlib\fR" 4
+.IX Item "--compress-debug-sections=zlib"
+.IP "\fB\-\-compress\-debug\-sections=zlib\-gnu\fR" 4
+.IX Item "--compress-debug-sections=zlib-gnu"
+.IP "\fB\-\-compress\-debug\-sections=zlib\-gabi\fR" 4
+.IX Item "--compress-debug-sections=zlib-gabi"
+.PD
+For \s-1ELF\s0 files, these options control how \s-1DWARF\s0 debug sections are
+compressed.  \fB\-\-compress\-debug\-sections=none\fR is equivalent
+to \fB\-\-decompress\-debug\-sections\fR.
+\&\fB\-\-compress\-debug\-sections=zlib\fR and
+\&\fB\-\-compress\-debug\-sections=zlib\-gabi\fR are equivalent to
+\&\fB\-\-compress\-debug\-sections\fR.
+\&\fB\-\-compress\-debug\-sections=zlib\-gnu\fR compresses \s-1DWARF\s0 debug
+sections using zlib.  The debug sections are renamed to begin with
+\&\fB.zdebug\fR instead of \fB.debug\fR.  Note \- if compression would
+actually make a section \fIlarger\fR, then it is not compressed nor
+renamed.
+.IP "\fB\-\-decompress\-debug\-sections\fR" 4
+.IX Item "--decompress-debug-sections"
+Decompress \s-1DWARF\s0 debug sections using zlib.  The original section
+names of the compressed sections are restored.
+.IP "\fB\-\-elf\-stt\-common=yes\fR" 4
+.IX Item "--elf-stt-common=yes"
+.PD 0
+.IP "\fB\-\-elf\-stt\-common=no\fR" 4
+.IX Item "--elf-stt-common=no"
+.PD
+For \s-1ELF\s0 files, these options control whether common symbols should be
+converted to the \f(CW\*(C`STT_COMMON\*(C'\fR or \f(CW\*(C`STT_OBJECT\*(C'\fR type.
+\&\fB\-\-elf\-stt\-common=yes\fR converts common symbol type to
+\&\f(CW\*(C`STT_COMMON\*(C'\fR. \fB\-\-elf\-stt\-common=no\fR converts common symbol
+type to \f(CW\*(C`STT_OBJECT\*(C'\fR.
+.IP "\fB\-\-merge\-notes\fR" 4
+.IX Item "--merge-notes"
+.PD 0
+.IP "\fB\-\-no\-merge\-notes\fR" 4
+.IX Item "--no-merge-notes"
+.PD
+For \s-1ELF\s0 files, attempt (or do not attempt) to reduce the size of any
+\&\s-1SHT_NOTE\s0 type sections by removing duplicate notes.
+.IP "\fB\-V\fR" 4
+.IX Item "-V"
+.PD 0
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.PD
+Show the version number of \fBobjcopy\fR.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-\-verbose\fR" 4
+.IX Item "--verbose"
+.PD
+Verbose output: list all object files modified.  In the case of
+archives, \fBobjcopy \-V\fR lists all members of the archive.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Show a summary of the options to \fBobjcopy\fR.
+.IP "\fB\-\-info\fR" 4
+.IX Item "--info"
+Display a list showing all architectures and object formats available.
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIld\fR\|(1), \fIobjdump\fR\|(1), and the Info entries for \fIbinutils\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man1/aarch64-elf-objdump.1 b/share/man/man1/aarch64-elf-objdump.1
new file mode 100644
index 0000000..9449aa6
--- /dev/null
+++ b/share/man/man1/aarch64-elf-objdump.1
@@ -0,0 +1,1268 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "OBJDUMP 1"
+.TH OBJDUMP 1 "2019-05-21" "binutils-2.32" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+objdump \- display information from object files.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+objdump [\fB\-a\fR|\fB\-\-archive\-headers\fR]
+        [\fB\-b\fR \fIbfdname\fR|\fB\-\-target=\fR\fIbfdname\fR]
+        [\fB\-C\fR|\fB\-\-demangle\fR[=\fIstyle\fR] ]
+        [\fB\-d\fR|\fB\-\-disassemble\fR[=\fIsymbol\fR]]
+        [\fB\-D\fR|\fB\-\-disassemble\-all\fR]
+        [\fB\-z\fR|\fB\-\-disassemble\-zeroes\fR]
+        [\fB\-EB\fR|\fB\-EL\fR|\fB\-\-endian=\fR{big | little }]
+        [\fB\-f\fR|\fB\-\-file\-headers\fR]
+        [\fB\-F\fR|\fB\-\-file\-offsets\fR]
+        [\fB\-\-file\-start\-context\fR]
+        [\fB\-g\fR|\fB\-\-debugging\fR]
+        [\fB\-e\fR|\fB\-\-debugging\-tags\fR]
+        [\fB\-h\fR|\fB\-\-section\-headers\fR|\fB\-\-headers\fR]
+        [\fB\-i\fR|\fB\-\-info\fR]
+        [\fB\-j\fR \fIsection\fR|\fB\-\-section=\fR\fIsection\fR]
+        [\fB\-l\fR|\fB\-\-line\-numbers\fR]
+        [\fB\-S\fR|\fB\-\-source\fR]
+        [\fB\-m\fR \fImachine\fR|\fB\-\-architecture=\fR\fImachine\fR]
+        [\fB\-M\fR \fIoptions\fR|\fB\-\-disassembler\-options=\fR\fIoptions\fR]
+        [\fB\-p\fR|\fB\-\-private\-headers\fR]
+        [\fB\-P\fR \fIoptions\fR|\fB\-\-private=\fR\fIoptions\fR]
+        [\fB\-r\fR|\fB\-\-reloc\fR]
+        [\fB\-R\fR|\fB\-\-dynamic\-reloc\fR]
+        [\fB\-s\fR|\fB\-\-full\-contents\fR]
+        [\fB\-W[lLiaprmfFsoRtUuTgAckK]\fR|
+         \fB\-\-dwarf\fR[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames\-interp,=str,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links,=follow\-links]]
+        [\fB\-G\fR|\fB\-\-stabs\fR]
+        [\fB\-t\fR|\fB\-\-syms\fR]
+        [\fB\-T\fR|\fB\-\-dynamic\-syms\fR]
+        [\fB\-x\fR|\fB\-\-all\-headers\fR]
+        [\fB\-w\fR|\fB\-\-wide\fR]
+        [\fB\-\-start\-address=\fR\fIaddress\fR]
+        [\fB\-\-stop\-address=\fR\fIaddress\fR]
+        [\fB\-\-prefix\-addresses\fR]
+        [\fB\-\-[no\-]show\-raw\-insn\fR]
+        [\fB\-\-adjust\-vma=\fR\fIoffset\fR]
+        [\fB\-\-dwarf\-depth=\fR\fIn\fR]
+        [\fB\-\-dwarf\-start=\fR\fIn\fR]
+        [\fB\-\-no\-recurse\-limit\fR|\fB\-\-recurse\-limit\fR]
+        [\fB\-\-special\-syms\fR]
+        [\fB\-\-prefix=\fR\fIprefix\fR]
+        [\fB\-\-prefix\-strip=\fR\fIlevel\fR]
+        [\fB\-\-insn\-width=\fR\fIwidth\fR]
+        [\fB\-V\fR|\fB\-\-version\fR]
+        [\fB\-H\fR|\fB\-\-help\fR]
+        \fIobjfile\fR...
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBobjdump\fR displays information about one or more object files.
+The options control what particular information to display.  This
+information is mostly useful to programmers who are working on the
+compilation tools, as opposed to programmers who just want their
+program to compile and work.
+.PP
+\&\fIobjfile\fR... are the object files to be examined.  When you
+specify archives, \fBobjdump\fR shows information on each of the member
+object files.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+The long and short forms of options, shown here as alternatives, are
+equivalent.  At least one option from the list
+\&\fB\-a,\-d,\-D,\-e,\-f,\-g,\-G,\-h,\-H,\-p,\-P,\-r,\-R,\-s,\-S,\-t,\-T,\-V,\-x\fR must be given.
+.IP "\fB\-a\fR" 4
+.IX Item "-a"
+.PD 0
+.IP "\fB\-\-archive\-header\fR" 4
+.IX Item "--archive-header"
+.PD
+If any of the \fIobjfile\fR files are archives, display the archive
+header information (in a format similar to \fBls \-l\fR).  Besides the
+information you could list with \fBar tv\fR, \fBobjdump \-a\fR shows
+the object file format of each archive member.
+.IP "\fB\-\-adjust\-vma=\fR\fIoffset\fR" 4
+.IX Item "--adjust-vma=offset"
+When dumping information, first add \fIoffset\fR to all the section
+addresses.  This is useful if the section addresses do not correspond to
+the symbol table, which can happen when putting sections at particular
+addresses when using a format which can not represent section addresses,
+such as a.out.
+.IP "\fB\-b\fR \fIbfdname\fR" 4
+.IX Item "-b bfdname"
+.PD 0
+.IP "\fB\-\-target=\fR\fIbfdname\fR" 4
+.IX Item "--target=bfdname"
+.PD
+Specify that the object-code format for the object files is
+\&\fIbfdname\fR.  This option may not be necessary; \fIobjdump\fR can
+automatically recognize many formats.
+.Sp
+For example,
+.Sp
+.Vb 1
+\&        objdump \-b oasys \-m vax \-h fu.o
+.Ve
+.Sp
+displays summary information from the section headers (\fB\-h\fR) of
+\&\fIfu.o\fR, which is explicitly identified (\fB\-m\fR) as a \s-1VAX\s0 object
+file in the format produced by Oasys compilers.  You can list the
+formats available with the \fB\-i\fR option.
+.IP "\fB\-C\fR" 4
+.IX Item "-C"
+.PD 0
+.IP "\fB\-\-demangle[=\fR\fIstyle\fR\fB]\fR" 4
+.IX Item "--demangle[=style]"
+.PD
+Decode (\fIdemangle\fR) low-level symbol names into user-level names.
+Besides removing any initial underscore prepended by the system, this
+makes \*(C+ function names readable.  Different compilers have different
+mangling styles. The optional demangling style argument can be used to
+choose an appropriate demangling style for your compiler.
+.IP "\fB\-\-recurse\-limit\fR" 4
+.IX Item "--recurse-limit"
+.PD 0
+.IP "\fB\-\-no\-recurse\-limit\fR" 4
+.IX Item "--no-recurse-limit"
+.IP "\fB\-\-recursion\-limit\fR" 4
+.IX Item "--recursion-limit"
+.IP "\fB\-\-no\-recursion\-limit\fR" 4
+.IX Item "--no-recursion-limit"
+.PD
+Enables or disables a limit on the amount of recursion performed
+whilst demangling strings.  Since the name mangling formats allow for
+an inifinite level of recursion it is possible to create strings whose
+decoding will exhaust the amount of stack space available on the host
+machine, triggering a memory fault.  The limit tries to prevent this
+from happening by restricting recursion to 2048 levels of nesting.
+.Sp
+The default is for this limit to be enabled, but disabling it may be
+necessary in order to demangle truly complicated names.  Note however
+that if the recursion limit is disabled then stack exhaustion is
+possible and any bug reports about such an event will be rejected.
+.IP "\fB\-g\fR" 4
+.IX Item "-g"
+.PD 0
+.IP "\fB\-\-debugging\fR" 4
+.IX Item "--debugging"
+.PD
+Display debugging information.  This attempts to parse \s-1STABS\s0
+debugging format information stored in the file and print it out using
+a C like syntax.  If no \s-1STABS\s0 debuging was found this option
+falls back on the \fB\-W\fR option to print any \s-1DWARF\s0 information in
+the file.
+.IP "\fB\-e\fR" 4
+.IX Item "-e"
+.PD 0
+.IP "\fB\-\-debugging\-tags\fR" 4
+.IX Item "--debugging-tags"
+.PD
+Like \fB\-g\fR, but the information is generated in a format compatible
+with ctags tool.
+.IP "\fB\-d\fR" 4
+.IX Item "-d"
+.PD 0
+.IP "\fB\-\-disassemble\fR" 4
+.IX Item "--disassemble"
+.IP "\fB\-\-disassemble=\fR\fIsymbol\fR" 4
+.IX Item "--disassemble=symbol"
+.PD
+Display the assembler mnemonics for the machine instructions from the
+input file.  This option only disassembles those sections which are 
+expected to contain instructions.  If the optional \fIsymbol\fR
+argument is given, then display the assembler mnemonics starting at
+\&\fIsymbol\fR.  If \fIsymbol\fR is a function name then disassembly
+will stop at the end of the function, otherwise it will stop when the
+next symbol is encountered.  If there are no matches for \fIsymbol\fR
+then nothing will be displayed.
+.IP "\fB\-D\fR" 4
+.IX Item "-D"
+.PD 0
+.IP "\fB\-\-disassemble\-all\fR" 4
+.IX Item "--disassemble-all"
+.PD
+Like \fB\-d\fR, but disassemble the contents of all sections, not just
+those expected to contain instructions.
+.Sp
+This option also has a subtle effect on the disassembly of
+instructions in code sections.  When option \fB\-d\fR is in effect
+objdump will assume that any symbols present in a code section occur
+on the boundary between instructions and it will refuse to disassemble
+across such a boundary.  When option \fB\-D\fR is in effect however
+this assumption is supressed.  This means that it is possible for the
+output of \fB\-d\fR and \fB\-D\fR to differ if, for example, data
+is stored in code sections.
+.Sp
+If the target is an \s-1ARM\s0 architecture this switch also has the effect
+of forcing the disassembler to decode pieces of data found in code
+sections as if they were instructions.
+.IP "\fB\-\-prefix\-addresses\fR" 4
+.IX Item "--prefix-addresses"
+When disassembling, print the complete address on each line.  This is
+the older disassembly format.
+.IP "\fB\-EB\fR" 4
+.IX Item "-EB"
+.PD 0
+.IP "\fB\-EL\fR" 4
+.IX Item "-EL"
+.IP "\fB\-\-endian={big|little}\fR" 4
+.IX Item "--endian={big|little}"
+.PD
+Specify the endianness of the object files.  This only affects
+disassembly.  This can be useful when disassembling a file format which
+does not describe endianness information, such as S\-records.
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+.PD 0
+.IP "\fB\-\-file\-headers\fR" 4
+.IX Item "--file-headers"
+.PD
+Display summary information from the overall header of
+each of the \fIobjfile\fR files.
+.IP "\fB\-F\fR" 4
+.IX Item "-F"
+.PD 0
+.IP "\fB\-\-file\-offsets\fR" 4
+.IX Item "--file-offsets"
+.PD
+When disassembling sections, whenever a symbol is displayed, also
+display the file offset of the region of data that is about to be
+dumped.  If zeroes are being skipped, then when disassembly resumes,
+tell the user how many zeroes were skipped and the file offset of the
+location from where the disassembly resumes.  When dumping sections,
+display the file offset of the location from where the dump starts.
+.IP "\fB\-\-file\-start\-context\fR" 4
+.IX Item "--file-start-context"
+Specify that when displaying interlisted source code/disassembly
+(assumes \fB\-S\fR) from a file that has not yet been displayed, extend the
+context to the start of the file.
+.IP "\fB\-h\fR" 4
+.IX Item "-h"
+.PD 0
+.IP "\fB\-\-section\-headers\fR" 4
+.IX Item "--section-headers"
+.IP "\fB\-\-headers\fR" 4
+.IX Item "--headers"
+.PD
+Display summary information from the section headers of the
+object file.
+.Sp
+File segments may be relocated to nonstandard addresses, for example by
+using the \fB\-Ttext\fR, \fB\-Tdata\fR, or \fB\-Tbss\fR options to
+\&\fBld\fR.  However, some object file formats, such as a.out, do not
+store the starting address of the file segments.  In those situations,
+although \fBld\fR relocates the sections correctly, using \fBobjdump
+\&\-h\fR to list the file section headers cannot show the correct addresses.
+Instead, it shows the usual addresses, which are implicit for the
+target.
+.Sp
+Note, in some cases it is possible for a section to have both the
+\&\s-1READONLY\s0 and the \s-1NOREAD\s0 attributes set.  In such cases the \s-1NOREAD\s0
+attribute takes precedence, but \fBobjdump\fR will report both
+since the exact setting of the flag bits might be important.
+.IP "\fB\-H\fR" 4
+.IX Item "-H"
+.PD 0
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+.PD
+Print a summary of the options to \fBobjdump\fR and exit.
+.IP "\fB\-i\fR" 4
+.IX Item "-i"
+.PD 0
+.IP "\fB\-\-info\fR" 4
+.IX Item "--info"
+.PD
+Display a list showing all architectures and object formats available
+for specification with \fB\-b\fR or \fB\-m\fR.
+.IP "\fB\-j\fR \fIname\fR" 4
+.IX Item "-j name"
+.PD 0
+.IP "\fB\-\-section=\fR\fIname\fR" 4
+.IX Item "--section=name"
+.PD
+Display information only for section \fIname\fR.
+.IP "\fB\-l\fR" 4
+.IX Item "-l"
+.PD 0
+.IP "\fB\-\-line\-numbers\fR" 4
+.IX Item "--line-numbers"
+.PD
+Label the display (using debugging information) with the filename and
+source line numbers corresponding to the object code or relocs shown.
+Only useful with \fB\-d\fR, \fB\-D\fR, or \fB\-r\fR.
+.IP "\fB\-m\fR \fImachine\fR" 4
+.IX Item "-m machine"
+.PD 0
+.IP "\fB\-\-architecture=\fR\fImachine\fR" 4
+.IX Item "--architecture=machine"
+.PD
+Specify the architecture to use when disassembling object files.  This
+can be useful when disassembling object files which do not describe
+architecture information, such as S\-records.  You can list the available
+architectures with the \fB\-i\fR option.
+.Sp
+If the target is an \s-1ARM\s0 architecture then this switch has an
+additional effect.  It restricts the disassembly to only those
+instructions supported by the architecture specified by \fImachine\fR.
+If it is necessary to use this switch because the input file does not
+contain any architecture information, but it is also desired to
+disassemble all the instructions use \fB\-marm\fR.
+.IP "\fB\-M\fR \fIoptions\fR" 4
+.IX Item "-M options"
+.PD 0
+.IP "\fB\-\-disassembler\-options=\fR\fIoptions\fR" 4
+.IX Item "--disassembler-options=options"
+.PD
+Pass target specific information to the disassembler.  Only supported on
+some targets.  If it is necessary to specify more than one
+disassembler option then multiple \fB\-M\fR options can be used or
+can be placed together into a comma separated list.
+.Sp
+For \s-1ARC,\s0 \fBdsp\fR controls the printing of \s-1DSP\s0 instructions,
+\&\fBspfp\fR selects the printing of \s-1FPX\s0 single precision \s-1FP\s0
+instructions, \fBdpfp\fR selects the printing of \s-1FPX\s0 double
+precision \s-1FP\s0 instructions, \fBquarkse_em\fR selects the printing of
+special QuarkSE-EM instructions, \fBfpuda\fR selects the printing
+of double precision assist instructions, \fBfpus\fR selects the
+printing of \s-1FPU\s0 single precision \s-1FP\s0 instructions, while \fBfpud\fR
+selects the printing of \s-1FPU\s0 double precision \s-1FP\s0 instructions.
+Additionally, one can choose to have all the immediates printed in
+hexadecimal using \fBhex\fR.  By default, the short immediates are
+printed using the decimal representation, while the long immediate
+values are printed as hexadecimal.
+.Sp
+\&\fBcpu=...\fR allows to enforce a particular \s-1ISA\s0 when disassembling
+instructions, overriding the \fB\-m\fR value or whatever is in the \s-1ELF\s0 file.
+This might be useful to select \s-1ARC EM\s0 or \s-1HS ISA,\s0 because architecture is same
+for those and disassembler relies on private \s-1ELF\s0 header data to decide if code
+is for \s-1EM\s0 or \s-1HS.\s0  This option might be specified multiple times \- only the
+latest value will be used.  Valid values are same as for the assembler
+\&\fB\-mcpu=...\fR option.
+.Sp
+If the target is an \s-1ARM\s0 architecture then this switch can be used to
+select which register name set is used during disassembler.  Specifying
+\&\fB\-M reg-names-std\fR (the default) will select the register names as
+used in \s-1ARM\s0's instruction set documentation, but with register 13 called
+\&'sp', register 14 called 'lr' and register 15 called 'pc'.  Specifying
+\&\fB\-M reg-names-apcs\fR will select the name set used by the \s-1ARM\s0
+Procedure Call Standard, whilst specifying \fB\-M reg-names-raw\fR will
+just use \fBr\fR followed by the register number.
+.Sp
+There are also two variants on the \s-1APCS\s0 register naming scheme enabled
+by \fB\-M reg-names-atpcs\fR and \fB\-M reg-names-special-atpcs\fR which
+use the ARM/Thumb Procedure Call Standard naming conventions.  (Either
+with the normal register names or the special register names).
+.Sp
+This option can also be used for \s-1ARM\s0 architectures to force the
+disassembler to interpret all instructions as Thumb instructions by
+using the switch \fB\-\-disassembler\-options=force\-thumb\fR.  This can be
+useful when attempting to disassemble thumb code produced by other
+compilers.
+.Sp
+For AArch64 targets this switch can be used to set whether instructions are
+disassembled as the most general instruction using the \fB\-M no-aliases\fR
+option or whether instruction notes should be generated as comments in the
+disasssembly using \fB\-M notes\fR.
+.Sp
+For the x86, some of the options duplicate functions of the \fB\-m\fR
+switch, but allow finer grained control.  Multiple selections from the
+following may be specified as a comma separated string.
+.RS 4
+.ie n .IP """x86\-64""" 4
+.el .IP "\f(CWx86\-64\fR" 4
+.IX Item "x86-64"
+.PD 0
+.ie n .IP """i386""" 4
+.el .IP "\f(CWi386\fR" 4
+.IX Item "i386"
+.ie n .IP """i8086""" 4
+.el .IP "\f(CWi8086\fR" 4
+.IX Item "i8086"
+.PD
+Select disassembly for the given architecture.
+.ie n .IP """intel""" 4
+.el .IP "\f(CWintel\fR" 4
+.IX Item "intel"
+.PD 0
+.ie n .IP """att""" 4
+.el .IP "\f(CWatt\fR" 4
+.IX Item "att"
+.PD
+Select between intel syntax mode and \s-1AT&T\s0 syntax mode.
+.ie n .IP """amd64""" 4
+.el .IP "\f(CWamd64\fR" 4
+.IX Item "amd64"
+.PD 0
+.ie n .IP """intel64""" 4
+.el .IP "\f(CWintel64\fR" 4
+.IX Item "intel64"
+.PD
+Select between \s-1AMD64 ISA\s0 and Intel64 \s-1ISA.\s0
+.ie n .IP """intel\-mnemonic""" 4
+.el .IP "\f(CWintel\-mnemonic\fR" 4
+.IX Item "intel-mnemonic"
+.PD 0
+.ie n .IP """att\-mnemonic""" 4
+.el .IP "\f(CWatt\-mnemonic\fR" 4
+.IX Item "att-mnemonic"
+.PD
+Select between intel mnemonic mode and \s-1AT&T\s0 mnemonic mode.
+Note: \f(CW\*(C`intel\-mnemonic\*(C'\fR implies \f(CW\*(C`intel\*(C'\fR and
+\&\f(CW\*(C`att\-mnemonic\*(C'\fR implies \f(CW\*(C`att\*(C'\fR.
+.ie n .IP """addr64""" 4
+.el .IP "\f(CWaddr64\fR" 4
+.IX Item "addr64"
+.PD 0
+.ie n .IP """addr32""" 4
+.el .IP "\f(CWaddr32\fR" 4
+.IX Item "addr32"
+.ie n .IP """addr16""" 4
+.el .IP "\f(CWaddr16\fR" 4
+.IX Item "addr16"
+.ie n .IP """data32""" 4
+.el .IP "\f(CWdata32\fR" 4
+.IX Item "data32"
+.ie n .IP """data16""" 4
+.el .IP "\f(CWdata16\fR" 4
+.IX Item "data16"
+.PD
+Specify the default address size and operand size.  These four options
+will be overridden if \f(CW\*(C`x86\-64\*(C'\fR, \f(CW\*(C`i386\*(C'\fR or \f(CW\*(C`i8086\*(C'\fR
+appear later in the option string.
+.ie n .IP """suffix""" 4
+.el .IP "\f(CWsuffix\fR" 4
+.IX Item "suffix"
+When in \s-1AT&T\s0 mode, instructs the disassembler to print a mnemonic
+suffix even when the suffix could be inferred by the operands.
+.RE
+.RS 4
+.Sp
+For PowerPC, the \fB\-M\fR argument \fBraw\fR selects
+disasssembly of hardware insns rather than aliases.  For example, you
+will see \f(CW\*(C`rlwinm\*(C'\fR rather than \f(CW\*(C`clrlwi\*(C'\fR, and \f(CW\*(C`addi\*(C'\fR
+rather than \f(CW\*(C`li\*(C'\fR.  All of the \fB\-m\fR arguments for
+\&\fBgas\fR that select a \s-1CPU\s0 are supported.  These are:
+\&\fB403\fR, \fB405\fR, \fB440\fR, \fB464\fR, \fB476\fR,
+\&\fB601\fR, \fB603\fR, \fB604\fR, \fB620\fR, \fB7400\fR,
+\&\fB7410\fR, \fB7450\fR, \fB7455\fR, \fB750cl\fR,
+\&\fB821\fR, \fB850\fR, \fB860\fR, \fBa2\fR, \fBbooke\fR,
+\&\fBbooke32\fR, \fBcell\fR, \fBcom\fR, \fBe200z4\fR,
+\&\fBe300\fR, \fBe500\fR, \fBe500mc\fR, \fBe500mc64\fR,
+\&\fBe500x2\fR, \fBe5500\fR, \fBe6500\fR, \fBefs\fR,
+\&\fBpower4\fR, \fBpower5\fR, \fBpower6\fR, \fBpower7\fR,
+\&\fBpower8\fR, \fBpower9\fR, \fBppc\fR, \fBppc32\fR,
+\&\fBppc64\fR, \fBppc64bridge\fR, \fBppcps\fR, \fBpwr\fR,
+\&\fBpwr2\fR, \fBpwr4\fR, \fBpwr5\fR, \fBpwr5x\fR,
+\&\fBpwr6\fR, \fBpwr7\fR, \fBpwr8\fR, \fBpwr9\fR,
+\&\fBpwrx\fR, \fBtitan\fR, and \fBvle\fR.
+\&\fB32\fR and \fB64\fR modify the default or a prior \s-1CPU\s0
+selection, disabling and enabling 64\-bit insns respectively.  In
+addition, \fBaltivec\fR, \fBany\fR, \fBhtm\fR, \fBvsx\fR,
+and \fBspe\fR add capabilities to a previous \fIor later\fR \s-1CPU\s0
+selection.  \fBany\fR will disassemble any opcode known to
+binutils, but in cases where an opcode has two different meanings or
+different arguments, you may not see the disassembly you expect.
+If you disassemble without giving a \s-1CPU\s0 selection, a default will be
+chosen from information gleaned by \s-1BFD\s0 from the object files headers,
+but the result again may not be as you expect.
+.Sp
+For \s-1MIPS,\s0 this option controls the printing of instruction mnemonic
+names and register names in disassembled instructions.  Multiple
+selections from the following may be specified as a comma separated
+string, and invalid options are ignored:
+.ie n .IP """no\-aliases""" 4
+.el .IP "\f(CWno\-aliases\fR" 4
+.IX Item "no-aliases"
+Print the 'raw' instruction mnemonic instead of some pseudo
+instruction mnemonic.  I.e., print 'daddu' or 'or' instead of 'move',
+\&'sll' instead of 'nop', etc.
+.ie n .IP """msa""" 4
+.el .IP "\f(CWmsa\fR" 4
+.IX Item "msa"
+Disassemble \s-1MSA\s0 instructions.
+.ie n .IP """virt""" 4
+.el .IP "\f(CWvirt\fR" 4
+.IX Item "virt"
+Disassemble the virtualization \s-1ASE\s0 instructions.
+.ie n .IP """xpa""" 4
+.el .IP "\f(CWxpa\fR" 4
+.IX Item "xpa"
+Disassemble the eXtended Physical Address (\s-1XPA\s0) \s-1ASE\s0 instructions.
+.ie n .IP """gpr\-names=\fIABI\fP""" 4
+.el .IP "\f(CWgpr\-names=\f(CIABI\f(CW\fR" 4
+.IX Item "gpr-names=ABI"
+Print \s-1GPR\s0 (general-purpose register) names as appropriate
+for the specified \s-1ABI.\s0  By default, \s-1GPR\s0 names are selected according to
+the \s-1ABI\s0 of the binary being disassembled.
+.ie n .IP """fpr\-names=\fIABI\fP""" 4
+.el .IP "\f(CWfpr\-names=\f(CIABI\f(CW\fR" 4
+.IX Item "fpr-names=ABI"
+Print \s-1FPR\s0 (floating-point register) names as
+appropriate for the specified \s-1ABI.\s0  By default, \s-1FPR\s0 numbers are printed
+rather than names.
+.ie n .IP """cp0\-names=\fIARCH\fP""" 4
+.el .IP "\f(CWcp0\-names=\f(CIARCH\f(CW\fR" 4
+.IX Item "cp0-names=ARCH"
+Print \s-1CP0\s0 (system control coprocessor; coprocessor 0) register names
+as appropriate for the \s-1CPU\s0 or architecture specified by
+\&\fI\s-1ARCH\s0\fR.  By default, \s-1CP0\s0 register names are selected according to
+the architecture and \s-1CPU\s0 of the binary being disassembled.
+.ie n .IP """hwr\-names=\fIARCH\fP""" 4
+.el .IP "\f(CWhwr\-names=\f(CIARCH\f(CW\fR" 4
+.IX Item "hwr-names=ARCH"
+Print \s-1HWR\s0 (hardware register, used by the \f(CW\*(C`rdhwr\*(C'\fR instruction) names
+as appropriate for the \s-1CPU\s0 or architecture specified by
+\&\fI\s-1ARCH\s0\fR.  By default, \s-1HWR\s0 names are selected according to
+the architecture and \s-1CPU\s0 of the binary being disassembled.
+.ie n .IP """reg\-names=\fIABI\fP""" 4
+.el .IP "\f(CWreg\-names=\f(CIABI\f(CW\fR" 4
+.IX Item "reg-names=ABI"
+Print \s-1GPR\s0 and \s-1FPR\s0 names as appropriate for the selected \s-1ABI.\s0
+.ie n .IP """reg\-names=\fIARCH\fP""" 4
+.el .IP "\f(CWreg\-names=\f(CIARCH\f(CW\fR" 4
+.IX Item "reg-names=ARCH"
+Print CPU-specific register names (\s-1CP0\s0 register and \s-1HWR\s0 names)
+as appropriate for the selected \s-1CPU\s0 or architecture.
+.RE
+.RS 4
+.Sp
+For any of the options listed above, \fI\s-1ABI\s0\fR or
+\&\fI\s-1ARCH\s0\fR may be specified as \fBnumeric\fR to have numbers printed
+rather than names, for the selected types of registers.
+You can list the available values of \fI\s-1ABI\s0\fR and \fI\s-1ARCH\s0\fR using
+the \fB\-\-help\fR option.
+.Sp
+For \s-1VAX,\s0 you can specify function entry addresses with \fB\-M
+entry:0xf00ba\fR.  You can use this multiple times to properly
+disassemble \s-1VAX\s0 binary files that don't contain symbol tables (like
+\&\s-1ROM\s0 dumps).  In these cases, the function entry mask would otherwise
+be decoded as \s-1VAX\s0 instructions, which would probably lead the rest
+of the function being wrongly disassembled.
+.RE
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+.PD 0
+.IP "\fB\-\-private\-headers\fR" 4
+.IX Item "--private-headers"
+.PD
+Print information that is specific to the object file format.  The exact
+information printed depends upon the object file format.  For some
+object file formats, no additional information is printed.
+.IP "\fB\-P\fR \fIoptions\fR" 4
+.IX Item "-P options"
+.PD 0
+.IP "\fB\-\-private=\fR\fIoptions\fR" 4
+.IX Item "--private=options"
+.PD
+Print information that is specific to the object file format.  The
+argument \fIoptions\fR is a comma separated list that depends on the
+format (the lists of options is displayed with the help).
+.Sp
+For \s-1XCOFF,\s0 the available options are:
+.RS 4
+.ie n .IP """header""" 4
+.el .IP "\f(CWheader\fR" 4
+.IX Item "header"
+.PD 0
+.ie n .IP """aout""" 4
+.el .IP "\f(CWaout\fR" 4
+.IX Item "aout"
+.ie n .IP """sections""" 4
+.el .IP "\f(CWsections\fR" 4
+.IX Item "sections"
+.ie n .IP """syms""" 4
+.el .IP "\f(CWsyms\fR" 4
+.IX Item "syms"
+.ie n .IP """relocs""" 4
+.el .IP "\f(CWrelocs\fR" 4
+.IX Item "relocs"
+.ie n .IP """lineno,""" 4
+.el .IP "\f(CWlineno,\fR" 4
+.IX Item "lineno,"
+.ie n .IP """loader""" 4
+.el .IP "\f(CWloader\fR" 4
+.IX Item "loader"
+.ie n .IP """except""" 4
+.el .IP "\f(CWexcept\fR" 4
+.IX Item "except"
+.ie n .IP """typchk""" 4
+.el .IP "\f(CWtypchk\fR" 4
+.IX Item "typchk"
+.ie n .IP """traceback""" 4
+.el .IP "\f(CWtraceback\fR" 4
+.IX Item "traceback"
+.ie n .IP """toc""" 4
+.el .IP "\f(CWtoc\fR" 4
+.IX Item "toc"
+.ie n .IP """ldinfo""" 4
+.el .IP "\f(CWldinfo\fR" 4
+.IX Item "ldinfo"
+.RE
+.RS 4
+.PD
+.Sp
+Not all object formats support this option.  In particular the \s-1ELF\s0
+format does not use it.
+.RE
+.IP "\fB\-r\fR" 4
+.IX Item "-r"
+.PD 0
+.IP "\fB\-\-reloc\fR" 4
+.IX Item "--reloc"
+.PD
+Print the relocation entries of the file.  If used with \fB\-d\fR or
+\&\fB\-D\fR, the relocations are printed interspersed with the
+disassembly.
+.IP "\fB\-R\fR" 4
+.IX Item "-R"
+.PD 0
+.IP "\fB\-\-dynamic\-reloc\fR" 4
+.IX Item "--dynamic-reloc"
+.PD
+Print the dynamic relocation entries of the file.  This is only
+meaningful for dynamic objects, such as certain types of shared
+libraries.  As for \fB\-r\fR, if used with \fB\-d\fR or
+\&\fB\-D\fR, the relocations are printed interspersed with the
+disassembly.
+.IP "\fB\-s\fR" 4
+.IX Item "-s"
+.PD 0
+.IP "\fB\-\-full\-contents\fR" 4
+.IX Item "--full-contents"
+.PD
+Display the full contents of any sections requested.  By default all
+non-empty sections are displayed.
+.IP "\fB\-S\fR" 4
+.IX Item "-S"
+.PD 0
+.IP "\fB\-\-source\fR" 4
+.IX Item "--source"
+.PD
+Display source code intermixed with disassembly, if possible.  Implies
+\&\fB\-d\fR.
+.IP "\fB\-\-prefix=\fR\fIprefix\fR" 4
+.IX Item "--prefix=prefix"
+Specify \fIprefix\fR to add to the absolute paths when used with
+\&\fB\-S\fR.
+.IP "\fB\-\-prefix\-strip=\fR\fIlevel\fR" 4
+.IX Item "--prefix-strip=level"
+Indicate how many initial directory names to strip off the hardwired
+absolute paths. It has no effect without \fB\-\-prefix=\fR\fIprefix\fR.
+.IP "\fB\-\-show\-raw\-insn\fR" 4
+.IX Item "--show-raw-insn"
+When disassembling instructions, print the instruction in hex as well as
+in symbolic form.  This is the default except when
+\&\fB\-\-prefix\-addresses\fR is used.
+.IP "\fB\-\-no\-show\-raw\-insn\fR" 4
+.IX Item "--no-show-raw-insn"
+When disassembling instructions, do not print the instruction bytes.
+This is the default when \fB\-\-prefix\-addresses\fR is used.
+.IP "\fB\-\-insn\-width=\fR\fIwidth\fR" 4
+.IX Item "--insn-width=width"
+Display \fIwidth\fR bytes on a single line when disassembling
+instructions.
+.IP "\fB\-W[lLiaprmfFsoRtUuTgAckK]\fR" 4
+.IX Item "-W[lLiaprmfFsoRtUuTgAckK]"
+.PD 0
+.IP "\fB\-\-dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames\-interp,=str,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links,=follow\-links]\fR" 4
+.IX Item "--dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links,=follow-links]"
+.PD
+Displays the contents of the \s-1DWARF\s0 debug sections in the file, if any
+are present.  Compressed debug sections are automatically decompressed
+(temporarily) before they are displayed.  If one or more of the
+optional letters or words follows the switch then only those type(s)
+of data will be dumped.  The letters and words refer to the following
+information:
+.RS 4
+.ie n .IP """a""" 4
+.el .IP "\f(CWa\fR" 4
+.IX Item "a"
+.PD 0
+.ie n .IP """=abbrev""" 4
+.el .IP "\f(CW=abbrev\fR" 4
+.IX Item "=abbrev"
+.PD
+Displays the contents of the \fB.debug_abbrev\fR section.
+.ie n .IP """A""" 4
+.el .IP "\f(CWA\fR" 4
+.IX Item "A"
+.PD 0
+.ie n .IP """=addr""" 4
+.el .IP "\f(CW=addr\fR" 4
+.IX Item "=addr"
+.PD
+Displays the contents of the \fB.debug_addr\fR section.
+.ie n .IP """c""" 4
+.el .IP "\f(CWc\fR" 4
+.IX Item "c"
+.PD 0
+.ie n .IP """=cu_index""" 4
+.el .IP "\f(CW=cu_index\fR" 4
+.IX Item "=cu_index"
+.PD
+Displays the contents of the \fB.debug_cu_index\fR and/or
+\&\fB.debug_tu_index\fR sections.
+.ie n .IP """f""" 4
+.el .IP "\f(CWf\fR" 4
+.IX Item "f"
+.PD 0
+.ie n .IP """=frames""" 4
+.el .IP "\f(CW=frames\fR" 4
+.IX Item "=frames"
+.PD
+Display the raw contents of a \fB.debug_frame\fR section.
+.ie n .IP """F""" 4
+.el .IP "\f(CWF\fR" 4
+.IX Item "F"
+.PD 0
+.ie n .IP """=frame\-interp""" 4
+.el .IP "\f(CW=frame\-interp\fR" 4
+.IX Item "=frame-interp"
+.PD
+Display the interpreted contents of a \fB.debug_frame\fR section.
+.ie n .IP """g""" 4
+.el .IP "\f(CWg\fR" 4
+.IX Item "g"
+.PD 0
+.ie n .IP """=gdb_index""" 4
+.el .IP "\f(CW=gdb_index\fR" 4
+.IX Item "=gdb_index"
+.PD
+Displays the contents of the \fB.gdb_index\fR and/or
+\&\fB.debug_names\fR sections.
+.ie n .IP """i""" 4
+.el .IP "\f(CWi\fR" 4
+.IX Item "i"
+.PD 0
+.ie n .IP """=info""" 4
+.el .IP "\f(CW=info\fR" 4
+.IX Item "=info"
+.PD
+Displays the contents of the \fB.debug_info\fR section.  Note: the
+output from this option can also be restricted by the use of the 
+\&\fB\-\-dwarf\-depth\fR and \fB\-\-dwarf\-start\fR options.
+.ie n .IP """k""" 4
+.el .IP "\f(CWk\fR" 4
+.IX Item "k"
+.PD 0
+.ie n .IP """=links""" 4
+.el .IP "\f(CW=links\fR" 4
+.IX Item "=links"
+.PD
+Displays the contents of the \fB.gnu_debuglink\fR and/or
+\&\fB.gnu_debugaltlink\fR sections.  Also displays the link to a
+separate dwarf object file (dwo), if one is specified by the 
+DW_AT_GNU_dwo_name or DW_AT_dwo_name attributes in the
+\&\fB.debug_info\fR section.
+.ie n .IP """K""" 4
+.el .IP "\f(CWK\fR" 4
+.IX Item "K"
+.PD 0
+.ie n .IP """=follow\-links""" 4
+.el .IP "\f(CW=follow\-links\fR" 4
+.IX Item "=follow-links"
+.PD
+Display the contents of any selected debug sections that are found in
+a linked, separate debug info file.  This can result in multiple
+versions of the same debug section being displayed if both the main
+file and the separate debug info file contain sections with the same
+name.
+.Sp
+In addition, when displaying \s-1DWARF\s0 attributes, if a form is found that
+references the separate debug info file, then the referenced contents
+will also be displayed.
+.ie n .IP """l""" 4
+.el .IP "\f(CWl\fR" 4
+.IX Item "l"
+.PD 0
+.ie n .IP """=rawline""" 4
+.el .IP "\f(CW=rawline\fR" 4
+.IX Item "=rawline"
+.PD
+Displays the contents of the \fB.debug_line\fR section in a raw
+format.
+.ie n .IP """L""" 4
+.el .IP "\f(CWL\fR" 4
+.IX Item "L"
+.PD 0
+.ie n .IP """=decodedline""" 4
+.el .IP "\f(CW=decodedline\fR" 4
+.IX Item "=decodedline"
+.PD
+Displays the interpreted contents of the \fB.debug_line\fR section.
+.ie n .IP """m""" 4
+.el .IP "\f(CWm\fR" 4
+.IX Item "m"
+.PD 0
+.ie n .IP """=macro""" 4
+.el .IP "\f(CW=macro\fR" 4
+.IX Item "=macro"
+.PD
+Displays the contents of the \fB.debug_macro\fR and/or
+\&\fB.debug_macinfo\fR sections.
+.ie n .IP """o""" 4
+.el .IP "\f(CWo\fR" 4
+.IX Item "o"
+.PD 0
+.ie n .IP """=loc""" 4
+.el .IP "\f(CW=loc\fR" 4
+.IX Item "=loc"
+.PD
+Displays the contents of the \fB.debug_loc\fR and/or
+\&\fB.debug_loclists\fR sections.
+.ie n .IP """p""" 4
+.el .IP "\f(CWp\fR" 4
+.IX Item "p"
+.PD 0
+.ie n .IP """=pubnames""" 4
+.el .IP "\f(CW=pubnames\fR" 4
+.IX Item "=pubnames"
+.PD
+Displays the contents of the \fB.debug_pubnames\fR and/or
+\&\fB.debug_gnu_pubnames\fR sections.
+.ie n .IP """r""" 4
+.el .IP "\f(CWr\fR" 4
+.IX Item "r"
+.PD 0
+.ie n .IP """=aranges""" 4
+.el .IP "\f(CW=aranges\fR" 4
+.IX Item "=aranges"
+.PD
+Displays the contents of the \fB.debug_aranges\fR section.
+.ie n .IP """R""" 4
+.el .IP "\f(CWR\fR" 4
+.IX Item "R"
+.PD 0
+.ie n .IP """=Ranges""" 4
+.el .IP "\f(CW=Ranges\fR" 4
+.IX Item "=Ranges"
+.PD
+Displays the contents of the \fB.debug_ranges\fR and/or
+\&\fB.debug_rnglists\fR sections.
+.ie n .IP """s""" 4
+.el .IP "\f(CWs\fR" 4
+.IX Item "s"
+.PD 0
+.ie n .IP """=str""" 4
+.el .IP "\f(CW=str\fR" 4
+.IX Item "=str"
+.PD
+Displays the contents of the \fB.debug_str\fR, \fB.debug_line_str\fR
+and/or \fB.debug_str_offsets\fR sections.
+.ie n .IP """t""" 4
+.el .IP "\f(CWt\fR" 4
+.IX Item "t"
+.PD 0
+.ie n .IP """=pubtype""" 4
+.el .IP "\f(CW=pubtype\fR" 4
+.IX Item "=pubtype"
+.PD
+Displays the contents of the \fB.debug_pubtypes\fR and/or
+\&\fB.debug_gnu_pubtypes\fR sections.
+.ie n .IP """T""" 4
+.el .IP "\f(CWT\fR" 4
+.IX Item "T"
+.PD 0
+.ie n .IP """=trace_aranges""" 4
+.el .IP "\f(CW=trace_aranges\fR" 4
+.IX Item "=trace_aranges"
+.PD
+Displays the contents of the \fB.trace_aranges\fR section.
+.ie n .IP """u""" 4
+.el .IP "\f(CWu\fR" 4
+.IX Item "u"
+.PD 0
+.ie n .IP """=trace_abbrev""" 4
+.el .IP "\f(CW=trace_abbrev\fR" 4
+.IX Item "=trace_abbrev"
+.PD
+Displays the contents of the \fB.trace_abbrev\fR section.
+.ie n .IP """U""" 4
+.el .IP "\f(CWU\fR" 4
+.IX Item "U"
+.PD 0
+.ie n .IP """=trace_info""" 4
+.el .IP "\f(CW=trace_info\fR" 4
+.IX Item "=trace_info"
+.PD
+Displays the contents of the \fB.trace_info\fR section.
+.RE
+.RS 4
+.Sp
+Note: displaying the contents of \fB.debug_static_funcs\fR,
+\&\fB.debug_static_vars\fR and \fBdebug_weaknames\fR sections is not
+currently supported.
+.RE
+.IP "\fB\-\-dwarf\-depth=\fR\fIn\fR" 4
+.IX Item "--dwarf-depth=n"
+Limit the dump of the \f(CW\*(C`.debug_info\*(C'\fR section to \fIn\fR children.
+This is only useful with \fB\-\-debug\-dump=info\fR.  The default is
+to print all DIEs; the special value 0 for \fIn\fR will also have this
+effect.
+.Sp
+With a non-zero value for \fIn\fR, DIEs at or deeper than \fIn\fR
+levels will not be printed.  The range for \fIn\fR is zero-based.
+.IP "\fB\-\-dwarf\-start=\fR\fIn\fR" 4
+.IX Item "--dwarf-start=n"
+Print only DIEs beginning with the \s-1DIE\s0 numbered \fIn\fR.  This is only
+useful with \fB\-\-debug\-dump=info\fR.
+.Sp
+If specified, this option will suppress printing of any header
+information and all DIEs before the \s-1DIE\s0 numbered \fIn\fR.  Only
+siblings and children of the specified \s-1DIE\s0 will be printed.
+.Sp
+This can be used in conjunction with \fB\-\-dwarf\-depth\fR.
+.IP "\fB\-\-dwarf\-check\fR" 4
+.IX Item "--dwarf-check"
+Enable additional checks for consistency of Dwarf information.
+.IP "\fB\-G\fR" 4
+.IX Item "-G"
+.PD 0
+.IP "\fB\-\-stabs\fR" 4
+.IX Item "--stabs"
+.PD
+Display the full contents of any sections requested.  Display the
+contents of the .stab and .stab.index and .stab.excl sections from an
+\&\s-1ELF\s0 file.  This is only useful on systems (such as Solaris 2.0) in which
+\&\f(CW\*(C`.stab\*(C'\fR debugging symbol-table entries are carried in an \s-1ELF\s0
+section.  In most other file formats, debugging symbol-table entries are
+interleaved with linkage symbols, and are visible in the \fB\-\-syms\fR
+output.
+.IP "\fB\-\-start\-address=\fR\fIaddress\fR" 4
+.IX Item "--start-address=address"
+Start displaying data at the specified address.  This affects the output
+of the \fB\-d\fR, \fB\-r\fR and \fB\-s\fR options.
+.IP "\fB\-\-stop\-address=\fR\fIaddress\fR" 4
+.IX Item "--stop-address=address"
+Stop displaying data at the specified address.  This affects the output
+of the \fB\-d\fR, \fB\-r\fR and \fB\-s\fR options.
+.IP "\fB\-t\fR" 4
+.IX Item "-t"
+.PD 0
+.IP "\fB\-\-syms\fR" 4
+.IX Item "--syms"
+.PD
+Print the symbol table entries of the file.
+This is similar to the information provided by the \fBnm\fR program,
+although the display format is different.  The format of the output
+depends upon the format of the file being dumped, but there are two main
+types.  One looks like this:
+.Sp
+.Vb 2
+\&        [  4](sec  3)(fl 0x00)(ty   0)(scl   3) (nx 1) 0x00000000 .bss
+\&        [  6](sec  1)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x00000000 fred
+.Ve
+.Sp
+where the number inside the square brackets is the number of the entry
+in the symbol table, the \fIsec\fR number is the section number, the
+\&\fIfl\fR value are the symbol's flag bits, the \fIty\fR number is the
+symbol's type, the \fIscl\fR number is the symbol's storage class and
+the \fInx\fR value is the number of auxilary entries associated with
+the symbol.  The last two fields are the symbol's value and its name.
+.Sp
+The other common output format, usually seen with \s-1ELF\s0 based files,
+looks like this:
+.Sp
+.Vb 2
+\&        00000000 l    d  .bss   00000000 .bss
+\&        00000000 g       .text  00000000 fred
+.Ve
+.Sp
+Here the first number is the symbol's value (sometimes refered to as
+its address).  The next field is actually a set of characters and
+spaces indicating the flag bits that are set on the symbol.  These
+characters are described below.  Next is the section with which the
+symbol is associated or \fI*ABS*\fR if the section is absolute (ie
+not connected with any section), or \fI*UND*\fR if the section is
+referenced in the file being dumped, but not defined there.
+.Sp
+After the section name comes another field, a number, which for common
+symbols is the alignment and for other symbol is the size.  Finally
+the symbol's name is displayed.
+.Sp
+The flag characters are divided into 7 groups as follows:
+.RS 4
+.ie n .IP """l""" 4
+.el .IP "\f(CWl\fR" 4
+.IX Item "l"
+.PD 0
+.ie n .IP """g""" 4
+.el .IP "\f(CWg\fR" 4
+.IX Item "g"
+.ie n .IP """u""" 4
+.el .IP "\f(CWu\fR" 4
+.IX Item "u"
+.ie n .IP """!""" 4
+.el .IP "\f(CW!\fR" 4
+.IX Item "!"
+.PD
+The symbol is a local (l), global (g), unique global (u), neither
+global nor local (a space) or both global and local (!).  A
+symbol can be neither local or global for a variety of reasons, e.g.,
+because it is used for debugging, but it is probably an indication of
+a bug if it is ever both local and global.  Unique global symbols are
+a \s-1GNU\s0 extension to the standard set of \s-1ELF\s0 symbol bindings.  For such
+a symbol the dynamic linker will make sure that in the entire process
+there is just one symbol with this name and type in use.
+.ie n .IP """w""" 4
+.el .IP "\f(CWw\fR" 4
+.IX Item "w"
+The symbol is weak (w) or strong (a space).
+.ie n .IP """C""" 4
+.el .IP "\f(CWC\fR" 4
+.IX Item "C"
+The symbol denotes a constructor (C) or an ordinary symbol (a space).
+.ie n .IP """W""" 4
+.el .IP "\f(CWW\fR" 4
+.IX Item "W"
+The symbol is a warning (W) or a normal symbol (a space).  A warning
+symbol's name is a message to be displayed if the symbol following the
+warning symbol is ever referenced.
+.ie n .IP """I""" 4
+.el .IP "\f(CWI\fR" 4
+.IX Item "I"
+.PD 0
+.ie n .IP """i""" 4
+.el .IP "\f(CWi\fR" 4
+.IX Item "i"
+.PD
+The symbol is an indirect reference to another symbol (I), a function
+to be evaluated during reloc processing (i) or a normal symbol (a
+space).
+.ie n .IP """d""" 4
+.el .IP "\f(CWd\fR" 4
+.IX Item "d"
+.PD 0
+.ie n .IP """D""" 4
+.el .IP "\f(CWD\fR" 4
+.IX Item "D"
+.PD
+The symbol is a debugging symbol (d) or a dynamic symbol (D) or a
+normal symbol (a space).
+.ie n .IP """F""" 4
+.el .IP "\f(CWF\fR" 4
+.IX Item "F"
+.PD 0
+.ie n .IP """f""" 4
+.el .IP "\f(CWf\fR" 4
+.IX Item "f"
+.ie n .IP """O""" 4
+.el .IP "\f(CWO\fR" 4
+.IX Item "O"
+.PD
+The symbol is the name of a function (F) or a file (f) or an object
+(O) or just a normal symbol (a space).
+.RE
+.RS 4
+.RE
+.IP "\fB\-T\fR" 4
+.IX Item "-T"
+.PD 0
+.IP "\fB\-\-dynamic\-syms\fR" 4
+.IX Item "--dynamic-syms"
+.PD
+Print the dynamic symbol table entries of the file.  This is only
+meaningful for dynamic objects, such as certain types of shared
+libraries.  This is similar to the information provided by the \fBnm\fR
+program when given the \fB\-D\fR (\fB\-\-dynamic\fR) option.
+.Sp
+The output format is similar to that produced by the \fB\-\-syms\fR
+option, except that an extra field is inserted before the symbol's
+name, giving the version information associated with the symbol.
+If the version is the default version to be used when resolving
+unversioned references to the symbol then it's displayed as is,
+otherwise it's put into parentheses.
+.IP "\fB\-\-special\-syms\fR" 4
+.IX Item "--special-syms"
+When displaying symbols include those which the target considers to be
+special in some way and which would not normally be of interest to the
+user.
+.IP "\fB\-V\fR" 4
+.IX Item "-V"
+.PD 0
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.PD
+Print the version number of \fBobjdump\fR and exit.
+.IP "\fB\-x\fR" 4
+.IX Item "-x"
+.PD 0
+.IP "\fB\-\-all\-headers\fR" 4
+.IX Item "--all-headers"
+.PD
+Display all available header information, including the symbol table and
+relocation entries.  Using \fB\-x\fR is equivalent to specifying all of
+\&\fB\-a \-f \-h \-p \-r \-t\fR.
+.IP "\fB\-w\fR" 4
+.IX Item "-w"
+.PD 0
+.IP "\fB\-\-wide\fR" 4
+.IX Item "--wide"
+.PD
+Format some lines for output devices that have more than 80 columns.
+Also do not truncate symbol names when they are displayed.
+.IP "\fB\-z\fR" 4
+.IX Item "-z"
+.PD 0
+.IP "\fB\-\-disassemble\-zeroes\fR" 4
+.IX Item "--disassemble-zeroes"
+.PD
+Normally the disassembly output will skip blocks of zeroes.  This
+option directs the disassembler to disassemble those blocks, just like
+any other data.
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fInm\fR\|(1), \fIreadelf\fR\|(1), and the Info entries for \fIbinutils\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man1/aarch64-elf-ranlib.1 b/share/man/man1/aarch64-elf-ranlib.1
new file mode 100644
index 0000000..c82a3f5
--- /dev/null
+++ b/share/man/man1/aarch64-elf-ranlib.1
@@ -0,0 +1,223 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "RANLIB 1"
+.TH RANLIB 1 "2019-05-21" "binutils-2.32" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+ranlib \- generate index to archive.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+ranlib [\fB\-\-plugin\fR \fIname\fR] [\fB\-DhHvVt\fR] \fIarchive\fR
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBranlib\fR generates an index to the contents of an archive and
+stores it in the archive.  The index lists each symbol defined by a
+member of an archive that is a relocatable object file.
+.PP
+You may use \fBnm \-s\fR or \fBnm \-\-print\-armap\fR to list this index.
+.PP
+An archive with such an index speeds up linking to the library and
+allows routines in the library to call each other without regard to
+their placement in the archive.
+.PP
+The \s-1GNU\s0 \fBranlib\fR program is another form of \s-1GNU\s0 \fBar\fR; running
+\&\fBranlib\fR is completely equivalent to executing \fBar \-s\fR.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-h\fR" 4
+.IX Item "-h"
+.PD 0
+.IP "\fB\-H\fR" 4
+.IX Item "-H"
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+.PD
+Show usage information for \fBranlib\fR.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-V\fR" 4
+.IX Item "-V"
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.PD
+Show the version number of \fBranlib\fR.
+.IP "\fB\-D\fR" 4
+.IX Item "-D"
+Operate in \fIdeterministic\fR mode.  The symbol map archive member's
+header will show zero for the \s-1UID, GID,\s0 and timestamp.  When this
+option is used, multiple runs will produce identical output files.
+.Sp
+If \fIbinutils\fR was configured with
+\&\fB\-\-enable\-deterministic\-archives\fR, then this mode is on by
+default.  It can be disabled with the \fB\-U\fR option, described
+below.
+.IP "\fB\-t\fR" 4
+.IX Item "-t"
+Update the timestamp of the symbol map of an archive.
+.IP "\fB\-U\fR" 4
+.IX Item "-U"
+Do \fInot\fR operate in \fIdeterministic\fR mode.  This is the
+inverse of the \fB\-D\fR option, above: the archive index will get
+actual \s-1UID, GID,\s0 timestamp, and file mode values.
+.Sp
+If \fIbinutils\fR was configured \fIwithout\fR
+\&\fB\-\-enable\-deterministic\-archives\fR, then this mode is on by
+default.
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIar\fR\|(1), \fInm\fR\|(1), and the Info entries for \fIbinutils\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man1/aarch64-elf-readelf.1 b/share/man/man1/aarch64-elf-readelf.1
new file mode 100644
index 0000000..690ba6f
--- /dev/null
+++ b/share/man/man1/aarch64-elf-readelf.1
@@ -0,0 +1,692 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "READELF 1"
+.TH READELF 1 "2019-05-21" "binutils-2.32" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+readelf \- Displays information about ELF files.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+readelf [\fB\-a\fR|\fB\-\-all\fR]
+        [\fB\-h\fR|\fB\-\-file\-header\fR]
+        [\fB\-l\fR|\fB\-\-program\-headers\fR|\fB\-\-segments\fR]
+        [\fB\-S\fR|\fB\-\-section\-headers\fR|\fB\-\-sections\fR]
+        [\fB\-g\fR|\fB\-\-section\-groups\fR]
+        [\fB\-t\fR|\fB\-\-section\-details\fR]
+        [\fB\-e\fR|\fB\-\-headers\fR]
+        [\fB\-s\fR|\fB\-\-syms\fR|\fB\-\-symbols\fR]
+        [\fB\-\-dyn\-syms\fR]
+        [\fB\-n\fR|\fB\-\-notes\fR]
+        [\fB\-r\fR|\fB\-\-relocs\fR]
+        [\fB\-u\fR|\fB\-\-unwind\fR]
+        [\fB\-d\fR|\fB\-\-dynamic\fR]
+        [\fB\-V\fR|\fB\-\-version\-info\fR]
+        [\fB\-A\fR|\fB\-\-arch\-specific\fR]
+        [\fB\-D\fR|\fB\-\-use\-dynamic\fR]
+        [\fB\-x\fR <number or name>|\fB\-\-hex\-dump=\fR<number or name>]
+        [\fB\-p\fR <number or name>|\fB\-\-string\-dump=\fR<number or name>]
+        [\fB\-R\fR <number or name>|\fB\-\-relocated\-dump=\fR<number or name>]
+        [\fB\-z\fR|\fB\-\-decompress\fR]
+        [\fB\-c\fR|\fB\-\-archive\-index\fR]
+        [\fB\-w[lLiaprmfFsoRtUuTgAckK]\fR|
+         \fB\-\-debug\-dump\fR[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames\-interp,=str,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links,=follow\-links]]
+        [\fB\-\-dwarf\-depth=\fR\fIn\fR]
+        [\fB\-\-dwarf\-start=\fR\fIn\fR]
+        [\fB\-I\fR|\fB\-\-histogram\fR]
+        [\fB\-v\fR|\fB\-\-version\fR]
+        [\fB\-W\fR|\fB\-\-wide\fR]
+        [\fB\-H\fR|\fB\-\-help\fR]
+        \fIelffile\fR...
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBreadelf\fR displays information about one or more \s-1ELF\s0 format object
+files.  The options control what particular information to display.
+.PP
+\&\fIelffile\fR... are the object files to be examined.  32\-bit and
+64\-bit \s-1ELF\s0 files are supported, as are archives containing \s-1ELF\s0 files.
+.PP
+This program performs a similar function to \fBobjdump\fR but it
+goes into more detail and it exists independently of the \s-1BFD\s0
+library, so if there is a bug in \s-1BFD\s0 then readelf will not be
+affected.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+The long and short forms of options, shown here as alternatives, are
+equivalent.  At least one option besides \fB\-v\fR or \fB\-H\fR must be
+given.
+.IP "\fB\-a\fR" 4
+.IX Item "-a"
+.PD 0
+.IP "\fB\-\-all\fR" 4
+.IX Item "--all"
+.PD
+Equivalent to specifying \fB\-\-file\-header\fR,
+\&\fB\-\-program\-headers\fR, \fB\-\-sections\fR, \fB\-\-symbols\fR,
+\&\fB\-\-relocs\fR, \fB\-\-dynamic\fR, \fB\-\-notes\fR,
+\&\fB\-\-version\-info\fR, \fB\-\-arch\-specific\fR, \fB\-\-unwind\fR,
+\&\fB\-\-section\-groups\fR and \fB\-\-histogram\fR.
+.Sp
+Note \- this option does not enable \fB\-\-use\-dynamic\fR itself, so
+if that option is not present on the command line then dynamic symbols
+and dynamic relocs will not be displayed.
+.IP "\fB\-h\fR" 4
+.IX Item "-h"
+.PD 0
+.IP "\fB\-\-file\-header\fR" 4
+.IX Item "--file-header"
+.PD
+Displays the information contained in the \s-1ELF\s0 header at the start of the
+file.
+.IP "\fB\-l\fR" 4
+.IX Item "-l"
+.PD 0
+.IP "\fB\-\-program\-headers\fR" 4
+.IX Item "--program-headers"
+.IP "\fB\-\-segments\fR" 4
+.IX Item "--segments"
+.PD
+Displays the information contained in the file's segment headers, if it
+has any.
+.IP "\fB\-S\fR" 4
+.IX Item "-S"
+.PD 0
+.IP "\fB\-\-sections\fR" 4
+.IX Item "--sections"
+.IP "\fB\-\-section\-headers\fR" 4
+.IX Item "--section-headers"
+.PD
+Displays the information contained in the file's section headers, if it
+has any.
+.IP "\fB\-g\fR" 4
+.IX Item "-g"
+.PD 0
+.IP "\fB\-\-section\-groups\fR" 4
+.IX Item "--section-groups"
+.PD
+Displays the information contained in the file's section groups, if it
+has any.
+.IP "\fB\-t\fR" 4
+.IX Item "-t"
+.PD 0
+.IP "\fB\-\-section\-details\fR" 4
+.IX Item "--section-details"
+.PD
+Displays the detailed section information. Implies \fB\-S\fR.
+.IP "\fB\-s\fR" 4
+.IX Item "-s"
+.PD 0
+.IP "\fB\-\-symbols\fR" 4
+.IX Item "--symbols"
+.IP "\fB\-\-syms\fR" 4
+.IX Item "--syms"
+.PD
+Displays the entries in symbol table section of the file, if it has one.
+If a symbol has version information associated with it then this is
+displayed as well.  The version string is displayed as a suffix to the
+symbol name, preceeded by an @ character.  For example
+\&\fBfoo@VER_1\fR.  If the version is the default version to be used
+when resolving unversioned references to the symbol then it is
+displayed as a suffix preceeded by two @ characters.  For example
+\&\fBfoo@@VER_2\fR.
+.IP "\fB\-\-dyn\-syms\fR" 4
+.IX Item "--dyn-syms"
+Displays the entries in dynamic symbol table section of the file, if it
+has one.  The output format is the same as the format used by the
+\&\fB\-\-syms\fR option.
+.IP "\fB\-e\fR" 4
+.IX Item "-e"
+.PD 0
+.IP "\fB\-\-headers\fR" 4
+.IX Item "--headers"
+.PD
+Display all the headers in the file.  Equivalent to \fB\-h \-l \-S\fR.
+.IP "\fB\-n\fR" 4
+.IX Item "-n"
+.PD 0
+.IP "\fB\-\-notes\fR" 4
+.IX Item "--notes"
+.PD
+Displays the contents of the \s-1NOTE\s0 segments and/or sections, if any.
+.IP "\fB\-r\fR" 4
+.IX Item "-r"
+.PD 0
+.IP "\fB\-\-relocs\fR" 4
+.IX Item "--relocs"
+.PD
+Displays the contents of the file's relocation section, if it has one.
+.IP "\fB\-u\fR" 4
+.IX Item "-u"
+.PD 0
+.IP "\fB\-\-unwind\fR" 4
+.IX Item "--unwind"
+.PD
+Displays the contents of the file's unwind section, if it has one.  Only
+the unwind sections for \s-1IA64 ELF\s0 files, as well as \s-1ARM\s0 unwind tables
+(\f(CW\*(C`.ARM.exidx\*(C'\fR / \f(CW\*(C`.ARM.extab\*(C'\fR) are currently supported.  If
+support is not yet implemented for your architecture you could try
+dumping the contents of the \fI.eh_frames\fR section using the
+\&\fB\-\-debug\-dump=frames\fR or \fB\-\-debug\-dump=frames\-interp\fR
+options.
+.IP "\fB\-d\fR" 4
+.IX Item "-d"
+.PD 0
+.IP "\fB\-\-dynamic\fR" 4
+.IX Item "--dynamic"
+.PD
+Displays the contents of the file's dynamic section, if it has one.
+.IP "\fB\-V\fR" 4
+.IX Item "-V"
+.PD 0
+.IP "\fB\-\-version\-info\fR" 4
+.IX Item "--version-info"
+.PD
+Displays the contents of the version sections in the file, it they
+exist.
+.IP "\fB\-A\fR" 4
+.IX Item "-A"
+.PD 0
+.IP "\fB\-\-arch\-specific\fR" 4
+.IX Item "--arch-specific"
+.PD
+Displays architecture-specific information in the file, if there
+is any.
+.IP "\fB\-D\fR" 4
+.IX Item "-D"
+.PD 0
+.IP "\fB\-\-use\-dynamic\fR" 4
+.IX Item "--use-dynamic"
+.PD
+When displaying symbols, this option makes \fBreadelf\fR use the
+symbol hash tables in the file's dynamic section, rather than the
+symbol table sections.
+.Sp
+When displaying relocations, this option makes \fBreadelf\fR
+display the dynamic relocations rather than the static relocations.
+.IP "\fB\-x <number or name>\fR" 4
+.IX Item "-x <number or name>"
+.PD 0
+.IP "\fB\-\-hex\-dump=<number or name>\fR" 4
+.IX Item "--hex-dump=<number or name>"
+.PD
+Displays the contents of the indicated section as a hexadecimal bytes.
+A number identifies a particular section by index in the section table;
+any other string identifies all sections with that name in the object file.
+.IP "\fB\-R <number or name>\fR" 4
+.IX Item "-R <number or name>"
+.PD 0
+.IP "\fB\-\-relocated\-dump=<number or name>\fR" 4
+.IX Item "--relocated-dump=<number or name>"
+.PD
+Displays the contents of the indicated section as a hexadecimal
+bytes.  A number identifies a particular section by index in the
+section table; any other string identifies all sections with that name
+in the object file.  The contents of the section will be relocated
+before they are displayed.
+.IP "\fB\-p <number or name>\fR" 4
+.IX Item "-p <number or name>"
+.PD 0
+.IP "\fB\-\-string\-dump=<number or name>\fR" 4
+.IX Item "--string-dump=<number or name>"
+.PD
+Displays the contents of the indicated section as printable strings.
+A number identifies a particular section by index in the section table;
+any other string identifies all sections with that name in the object file.
+.IP "\fB\-z\fR" 4
+.IX Item "-z"
+.PD 0
+.IP "\fB\-\-decompress\fR" 4
+.IX Item "--decompress"
+.PD
+Requests that the section(s) being dumped by \fBx\fR, \fBR\fR or
+\&\fBp\fR options are decompressed before being displayed.  If the
+section(s) are not compressed then they are displayed as is.
+.IP "\fB\-c\fR" 4
+.IX Item "-c"
+.PD 0
+.IP "\fB\-\-archive\-index\fR" 4
+.IX Item "--archive-index"
+.PD
+Displays the file symbol index information contained in the header part
+of binary archives.  Performs the same function as the \fBt\fR
+command to \fBar\fR, but without using the \s-1BFD\s0 library.
+.IP "\fB\-w[lLiaprmfFsoRtUuTgAckK]\fR" 4
+.IX Item "-w[lLiaprmfFsoRtUuTgAckK]"
+.PD 0
+.IP "\fB\-\-debug\-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames\-interp,=str,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links,=follow\-links]\fR" 4
+.IX Item "--debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links,=follow-links]"
+.PD
+Displays the contents of the \s-1DWARF\s0 debug sections in the file, if any
+are present.  Compressed debug sections are automatically decompressed
+(temporarily) before they are displayed.  If one or more of the
+optional letters or words follows the switch then only those type(s)
+of data will be dumped.  The letters and words refer to the following
+information:
+.RS 4
+.ie n .IP """a""" 4
+.el .IP "\f(CWa\fR" 4
+.IX Item "a"
+.PD 0
+.ie n .IP """=abbrev""" 4
+.el .IP "\f(CW=abbrev\fR" 4
+.IX Item "=abbrev"
+.PD
+Displays the contents of the \fB.debug_abbrev\fR section.
+.ie n .IP """A""" 4
+.el .IP "\f(CWA\fR" 4
+.IX Item "A"
+.PD 0
+.ie n .IP """=addr""" 4
+.el .IP "\f(CW=addr\fR" 4
+.IX Item "=addr"
+.PD
+Displays the contents of the \fB.debug_addr\fR section.
+.ie n .IP """c""" 4
+.el .IP "\f(CWc\fR" 4
+.IX Item "c"
+.PD 0
+.ie n .IP """=cu_index""" 4
+.el .IP "\f(CW=cu_index\fR" 4
+.IX Item "=cu_index"
+.PD
+Displays the contents of the \fB.debug_cu_index\fR and/or
+\&\fB.debug_tu_index\fR sections.
+.ie n .IP """f""" 4
+.el .IP "\f(CWf\fR" 4
+.IX Item "f"
+.PD 0
+.ie n .IP """=frames""" 4
+.el .IP "\f(CW=frames\fR" 4
+.IX Item "=frames"
+.PD
+Display the raw contents of a \fB.debug_frame\fR section.
+.ie n .IP """F""" 4
+.el .IP "\f(CWF\fR" 4
+.IX Item "F"
+.PD 0
+.ie n .IP """=frame\-interp""" 4
+.el .IP "\f(CW=frame\-interp\fR" 4
+.IX Item "=frame-interp"
+.PD
+Display the interpreted contents of a \fB.debug_frame\fR section.
+.ie n .IP """g""" 4
+.el .IP "\f(CWg\fR" 4
+.IX Item "g"
+.PD 0
+.ie n .IP """=gdb_index""" 4
+.el .IP "\f(CW=gdb_index\fR" 4
+.IX Item "=gdb_index"
+.PD
+Displays the contents of the \fB.gdb_index\fR and/or
+\&\fB.debug_names\fR sections.
+.ie n .IP """i""" 4
+.el .IP "\f(CWi\fR" 4
+.IX Item "i"
+.PD 0
+.ie n .IP """=info""" 4
+.el .IP "\f(CW=info\fR" 4
+.IX Item "=info"
+.PD
+Displays the contents of the \fB.debug_info\fR section.  Note: the
+output from this option can also be restricted by the use of the 
+\&\fB\-\-dwarf\-depth\fR and \fB\-\-dwarf\-start\fR options.
+.ie n .IP """k""" 4
+.el .IP "\f(CWk\fR" 4
+.IX Item "k"
+.PD 0
+.ie n .IP """=links""" 4
+.el .IP "\f(CW=links\fR" 4
+.IX Item "=links"
+.PD
+Displays the contents of the \fB.gnu_debuglink\fR and/or
+\&\fB.gnu_debugaltlink\fR sections.  Also displays the link to a
+separate dwarf object file (dwo), if one is specified by the 
+DW_AT_GNU_dwo_name or DW_AT_dwo_name attributes in the
+\&\fB.debug_info\fR section.
+.ie n .IP """K""" 4
+.el .IP "\f(CWK\fR" 4
+.IX Item "K"
+.PD 0
+.ie n .IP """=follow\-links""" 4
+.el .IP "\f(CW=follow\-links\fR" 4
+.IX Item "=follow-links"
+.PD
+Display the contents of any selected debug sections that are found in
+a linked, separate debug info file.  This can result in multiple
+versions of the same debug section being displayed if both the main
+file and the separate debug info file contain sections with the same
+name.
+.Sp
+In addition, when displaying \s-1DWARF\s0 attributes, if a form is found that
+references the separate debug info file, then the referenced contents
+will also be displayed.
+.ie n .IP """l""" 4
+.el .IP "\f(CWl\fR" 4
+.IX Item "l"
+.PD 0
+.ie n .IP """=rawline""" 4
+.el .IP "\f(CW=rawline\fR" 4
+.IX Item "=rawline"
+.PD
+Displays the contents of the \fB.debug_line\fR section in a raw
+format.
+.ie n .IP """L""" 4
+.el .IP "\f(CWL\fR" 4
+.IX Item "L"
+.PD 0
+.ie n .IP """=decodedline""" 4
+.el .IP "\f(CW=decodedline\fR" 4
+.IX Item "=decodedline"
+.PD
+Displays the interpreted contents of the \fB.debug_line\fR section.
+.ie n .IP """m""" 4
+.el .IP "\f(CWm\fR" 4
+.IX Item "m"
+.PD 0
+.ie n .IP """=macro""" 4
+.el .IP "\f(CW=macro\fR" 4
+.IX Item "=macro"
+.PD
+Displays the contents of the \fB.debug_macro\fR and/or
+\&\fB.debug_macinfo\fR sections.
+.ie n .IP """o""" 4
+.el .IP "\f(CWo\fR" 4
+.IX Item "o"
+.PD 0
+.ie n .IP """=loc""" 4
+.el .IP "\f(CW=loc\fR" 4
+.IX Item "=loc"
+.PD
+Displays the contents of the \fB.debug_loc\fR and/or
+\&\fB.debug_loclists\fR sections.
+.ie n .IP """p""" 4
+.el .IP "\f(CWp\fR" 4
+.IX Item "p"
+.PD 0
+.ie n .IP """=pubnames""" 4
+.el .IP "\f(CW=pubnames\fR" 4
+.IX Item "=pubnames"
+.PD
+Displays the contents of the \fB.debug_pubnames\fR and/or
+\&\fB.debug_gnu_pubnames\fR sections.
+.ie n .IP """r""" 4
+.el .IP "\f(CWr\fR" 4
+.IX Item "r"
+.PD 0
+.ie n .IP """=aranges""" 4
+.el .IP "\f(CW=aranges\fR" 4
+.IX Item "=aranges"
+.PD
+Displays the contents of the \fB.debug_aranges\fR section.
+.ie n .IP """R""" 4
+.el .IP "\f(CWR\fR" 4
+.IX Item "R"
+.PD 0
+.ie n .IP """=Ranges""" 4
+.el .IP "\f(CW=Ranges\fR" 4
+.IX Item "=Ranges"
+.PD
+Displays the contents of the \fB.debug_ranges\fR and/or
+\&\fB.debug_rnglists\fR sections.
+.ie n .IP """s""" 4
+.el .IP "\f(CWs\fR" 4
+.IX Item "s"
+.PD 0
+.ie n .IP """=str""" 4
+.el .IP "\f(CW=str\fR" 4
+.IX Item "=str"
+.PD
+Displays the contents of the \fB.debug_str\fR, \fB.debug_line_str\fR
+and/or \fB.debug_str_offsets\fR sections.
+.ie n .IP """t""" 4
+.el .IP "\f(CWt\fR" 4
+.IX Item "t"
+.PD 0
+.ie n .IP """=pubtype""" 4
+.el .IP "\f(CW=pubtype\fR" 4
+.IX Item "=pubtype"
+.PD
+Displays the contents of the \fB.debug_pubtypes\fR and/or
+\&\fB.debug_gnu_pubtypes\fR sections.
+.ie n .IP """T""" 4
+.el .IP "\f(CWT\fR" 4
+.IX Item "T"
+.PD 0
+.ie n .IP """=trace_aranges""" 4
+.el .IP "\f(CW=trace_aranges\fR" 4
+.IX Item "=trace_aranges"
+.PD
+Displays the contents of the \fB.trace_aranges\fR section.
+.ie n .IP """u""" 4
+.el .IP "\f(CWu\fR" 4
+.IX Item "u"
+.PD 0
+.ie n .IP """=trace_abbrev""" 4
+.el .IP "\f(CW=trace_abbrev\fR" 4
+.IX Item "=trace_abbrev"
+.PD
+Displays the contents of the \fB.trace_abbrev\fR section.
+.ie n .IP """U""" 4
+.el .IP "\f(CWU\fR" 4
+.IX Item "U"
+.PD 0
+.ie n .IP """=trace_info""" 4
+.el .IP "\f(CW=trace_info\fR" 4
+.IX Item "=trace_info"
+.PD
+Displays the contents of the \fB.trace_info\fR section.
+.RE
+.RS 4
+.Sp
+Note: displaying the contents of \fB.debug_static_funcs\fR,
+\&\fB.debug_static_vars\fR and \fBdebug_weaknames\fR sections is not
+currently supported.
+.RE
+.IP "\fB\-\-dwarf\-depth=\fR\fIn\fR" 4
+.IX Item "--dwarf-depth=n"
+Limit the dump of the \f(CW\*(C`.debug_info\*(C'\fR section to \fIn\fR children.
+This is only useful with \fB\-\-debug\-dump=info\fR.  The default is
+to print all DIEs; the special value 0 for \fIn\fR will also have this
+effect.
+.Sp
+With a non-zero value for \fIn\fR, DIEs at or deeper than \fIn\fR
+levels will not be printed.  The range for \fIn\fR is zero-based.
+.IP "\fB\-\-dwarf\-start=\fR\fIn\fR" 4
+.IX Item "--dwarf-start=n"
+Print only DIEs beginning with the \s-1DIE\s0 numbered \fIn\fR.  This is only
+useful with \fB\-\-debug\-dump=info\fR.
+.Sp
+If specified, this option will suppress printing of any header
+information and all DIEs before the \s-1DIE\s0 numbered \fIn\fR.  Only
+siblings and children of the specified \s-1DIE\s0 will be printed.
+.Sp
+This can be used in conjunction with \fB\-\-dwarf\-depth\fR.
+.IP "\fB\-I\fR" 4
+.IX Item "-I"
+.PD 0
+.IP "\fB\-\-histogram\fR" 4
+.IX Item "--histogram"
+.PD
+Display a histogram of bucket list lengths when displaying the contents
+of the symbol tables.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.PD
+Display the version number of readelf.
+.IP "\fB\-W\fR" 4
+.IX Item "-W"
+.PD 0
+.IP "\fB\-\-wide\fR" 4
+.IX Item "--wide"
+.PD
+Don't break output lines to fit into 80 columns. By default
+\&\fBreadelf\fR breaks section header and segment listing lines for
+64\-bit \s-1ELF\s0 files, so that they fit into 80 columns. This option causes
+\&\fBreadelf\fR to print each section header resp. each segment one a
+single line, which is far more readable on terminals wider than 80 columns.
+.IP "\fB\-H\fR" 4
+.IX Item "-H"
+.PD 0
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+.PD
+Display the command-line options understood by \fBreadelf\fR.
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIobjdump\fR\|(1), and the Info entries for \fIbinutils\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man1/aarch64-elf-size.1 b/share/man/man1/aarch64-elf-size.1
new file mode 100644
index 0000000..b52a939
--- /dev/null
+++ b/share/man/man1/aarch64-elf-size.1
@@ -0,0 +1,271 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "SIZE 1"
+.TH SIZE 1 "2019-05-21" "binutils-2.32" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+size \- list section sizes and total size.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+size [\fB\-A\fR|\fB\-B\fR|\fB\-\-format=\fR\fIcompatibility\fR]
+     [\fB\-\-help\fR]
+     [\fB\-d\fR|\fB\-o\fR|\fB\-x\fR|\fB\-\-radix=\fR\fInumber\fR]
+     [\fB\-\-common\fR]
+     [\fB\-t\fR|\fB\-\-totals\fR]
+     [\fB\-\-target=\fR\fIbfdname\fR] [\fB\-V\fR|\fB\-\-version\fR]
+     [\fIobjfile\fR...]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The \s-1GNU\s0 \fBsize\fR utility lists the section sizes\-\-\-and the total
+size\-\-\-for each of the object or archive files \fIobjfile\fR in its
+argument list.  By default, one line of output is generated for each
+object file or each module in an archive.
+.PP
+\&\fIobjfile\fR... are the object files to be examined.
+If none are specified, the file \f(CW\*(C`a.out\*(C'\fR will be used.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+The command-line options have the following meanings:
+.IP "\fB\-A\fR" 4
+.IX Item "-A"
+.PD 0
+.IP "\fB\-B\fR" 4
+.IX Item "-B"
+.IP "\fB\-\-format=\fR\fIcompatibility\fR" 4
+.IX Item "--format=compatibility"
+.PD
+Using one of these options, you can choose whether the output from \s-1GNU\s0
+\&\fBsize\fR resembles output from System V \fBsize\fR (using \fB\-A\fR,
+or \fB\-\-format=sysv\fR), or Berkeley \fBsize\fR (using \fB\-B\fR, or
+\&\fB\-\-format=berkeley\fR).  The default is the one-line format similar to
+Berkeley's.
+.Sp
+Here is an example of the Berkeley (default) format of output from
+\&\fBsize\fR:
+.Sp
+.Vb 4
+\&        $ size \-\-format=Berkeley ranlib size
+\&        text    data    bss     dec     hex     filename
+\&        294880  81920   11592   388392  5ed28   ranlib
+\&        294880  81920   11888   388688  5ee50   size
+.Ve
+.Sp
+This is the same data, but displayed closer to System V conventions:
+.Sp
+.Vb 7
+\&        $ size \-\-format=SysV ranlib size
+\&        ranlib  :
+\&        section         size         addr
+\&        .text         294880         8192
+\&        .data          81920       303104
+\&        .bss           11592       385024
+\&        Total         388392
+\&        
+\&        
+\&        size  :
+\&        section         size         addr
+\&        .text         294880         8192
+\&        .data          81920       303104
+\&        .bss           11888       385024
+\&        Total         388688
+.Ve
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Show a summary of acceptable arguments and options.
+.IP "\fB\-d\fR" 4
+.IX Item "-d"
+.PD 0
+.IP "\fB\-o\fR" 4
+.IX Item "-o"
+.IP "\fB\-x\fR" 4
+.IX Item "-x"
+.IP "\fB\-\-radix=\fR\fInumber\fR" 4
+.IX Item "--radix=number"
+.PD
+Using one of these options, you can control whether the size of each
+section is given in decimal (\fB\-d\fR, or \fB\-\-radix=10\fR); octal
+(\fB\-o\fR, or \fB\-\-radix=8\fR); or hexadecimal (\fB\-x\fR, or
+\&\fB\-\-radix=16\fR).  In \fB\-\-radix=\fR\fInumber\fR, only the three
+values (8, 10, 16) are supported.  The total size is always given in two
+radices; decimal and hexadecimal for \fB\-d\fR or \fB\-x\fR output, or
+octal and hexadecimal if you're using \fB\-o\fR.
+.IP "\fB\-\-common\fR" 4
+.IX Item "--common"
+Print total size of common symbols in each file.  When using Berkeley
+format these are included in the bss size.
+.IP "\fB\-t\fR" 4
+.IX Item "-t"
+.PD 0
+.IP "\fB\-\-totals\fR" 4
+.IX Item "--totals"
+.PD
+Show totals of all objects listed (Berkeley format listing mode only).
+.IP "\fB\-\-target=\fR\fIbfdname\fR" 4
+.IX Item "--target=bfdname"
+Specify that the object-code format for \fIobjfile\fR is
+\&\fIbfdname\fR.  This option may not be necessary; \fBsize\fR can
+automatically recognize many formats.
+.IP "\fB\-V\fR" 4
+.IX Item "-V"
+.PD 0
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.PD
+Display the version number of \fBsize\fR.
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIar\fR\|(1), \fIobjdump\fR\|(1), \fIreadelf\fR\|(1), and the Info entries for \fIbinutils\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man1/aarch64-elf-strings.1 b/share/man/man1/aarch64-elf-strings.1
new file mode 100644
index 0000000..8a95c2a
--- /dev/null
+++ b/share/man/man1/aarch64-elf-strings.1
@@ -0,0 +1,311 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "STRINGS 1"
+.TH STRINGS 1 "2019-05-21" "binutils-2.32" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+strings \- print the strings of printable characters in files.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+strings [\fB\-afovV\fR] [\fB\-\fR\fImin-len\fR]
+        [\fB\-n\fR \fImin-len\fR] [\fB\-\-bytes=\fR\fImin-len\fR]
+        [\fB\-t\fR \fIradix\fR] [\fB\-\-radix=\fR\fIradix\fR]
+        [\fB\-e\fR \fIencoding\fR] [\fB\-\-encoding=\fR\fIencoding\fR]
+        [\fB\-\fR] [\fB\-\-all\fR] [\fB\-\-print\-file\-name\fR]
+        [\fB\-T\fR \fIbfdname\fR] [\fB\-\-target=\fR\fIbfdname\fR]
+        [\fB\-w\fR] [\fB\-\-include\-all\-whitespace\fR]
+        [\fB\-s\fR] [\fB\-\-output\-separator\fR\fIsep_string\fR]
+        [\fB\-\-help\fR] [\fB\-\-version\fR] \fIfile\fR...
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+For each \fIfile\fR given, \s-1GNU\s0 \fBstrings\fR prints the
+printable character sequences that are at least 4 characters long (or
+the number given with the options below) and are followed by an
+unprintable character.
+.PP
+Depending upon how the strings program was configured it will default
+to either displaying all the printable sequences that it can find in
+each file, or only those sequences that are in loadable, initialized
+data sections.  If the file type in unrecognizable, or if strings is
+reading from stdin then it will always display all of the printable
+sequences that it can find.
+.PP
+For backwards compatibility any file that occurs after a command-line
+option of just \fB\-\fR will also be scanned in full, regardless of
+the presence of any \fB\-d\fR option.
+.PP
+\&\fBstrings\fR is mainly useful for determining the contents of
+non-text files.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-a\fR" 4
+.IX Item "-a"
+.PD 0
+.IP "\fB\-\-all\fR" 4
+.IX Item "--all"
+.IP "\fB\-\fR" 4
+.IX Item "-"
+.PD
+Scan the whole file, regardless of what sections it contains or
+whether those sections are loaded or initialized.  Normally this is
+the default behaviour, but strings can be configured so that the
+\&\fB\-d\fR is the default instead.
+.Sp
+The \fB\-\fR option is position dependent and forces strings to
+perform full scans of any file that is mentioned after the \fB\-\fR
+on the command line, even if the \fB\-d\fR option has been
+specified.
+.IP "\fB\-d\fR" 4
+.IX Item "-d"
+.PD 0
+.IP "\fB\-\-data\fR" 4
+.IX Item "--data"
+.PD
+Only print strings from initialized, loaded data sections in the
+file.  This may reduce the amount of garbage in the output, but it
+also exposes the strings program to any security flaws that may be
+present in the \s-1BFD\s0 library used to scan and load sections.  Strings
+can be configured so that this option is the default behaviour.  In
+such cases the \fB\-a\fR option can be used to avoid using the \s-1BFD\s0
+library and instead just print all of the strings found in the file.
+.IP "\fB\-f\fR" 4
+.IX Item "-f"
+.PD 0
+.IP "\fB\-\-print\-file\-name\fR" 4
+.IX Item "--print-file-name"
+.PD
+Print the name of the file before each string.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Print a summary of the program usage on the standard output and exit.
+.IP "\fB\-\fR\fImin-len\fR" 4
+.IX Item "-min-len"
+.PD 0
+.IP "\fB\-n\fR \fImin-len\fR" 4
+.IX Item "-n min-len"
+.IP "\fB\-\-bytes=\fR\fImin-len\fR" 4
+.IX Item "--bytes=min-len"
+.PD
+Print sequences of characters that are at least \fImin-len\fR characters
+long, instead of the default 4.
+.IP "\fB\-o\fR" 4
+.IX Item "-o"
+Like \fB\-t o\fR.  Some other versions of \fBstrings\fR have \fB\-o\fR
+act like \fB\-t d\fR instead.  Since we can not be compatible with both
+ways, we simply chose one.
+.IP "\fB\-t\fR \fIradix\fR" 4
+.IX Item "-t radix"
+.PD 0
+.IP "\fB\-\-radix=\fR\fIradix\fR" 4
+.IX Item "--radix=radix"
+.PD
+Print the offset within the file before each string.  The single
+character argument specifies the radix of the offset\-\-\-\fBo\fR for
+octal, \fBx\fR for hexadecimal, or \fBd\fR for decimal.
+.IP "\fB\-e\fR \fIencoding\fR" 4
+.IX Item "-e encoding"
+.PD 0
+.IP "\fB\-\-encoding=\fR\fIencoding\fR" 4
+.IX Item "--encoding=encoding"
+.PD
+Select the character encoding of the strings that are to be found.
+Possible values for \fIencoding\fR are: \fBs\fR = single\-7\-bit\-byte
+characters (\s-1ASCII, ISO 8859,\s0 etc., default), \fBS\fR =
+single\-8\-bit\-byte characters, \fBb\fR = 16\-bit bigendian, \fBl\fR =
+16\-bit littleendian, \fBB\fR = 32\-bit bigendian, \fBL\fR = 32\-bit
+littleendian.  Useful for finding wide character strings. (\fBl\fR
+and \fBb\fR apply to, for example, Unicode \s-1UTF\-16/UCS\-2\s0 encodings).
+.IP "\fB\-T\fR \fIbfdname\fR" 4
+.IX Item "-T bfdname"
+.PD 0
+.IP "\fB\-\-target=\fR\fIbfdname\fR" 4
+.IX Item "--target=bfdname"
+.PD
+Specify an object code format other than your system's default format.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-V\fR" 4
+.IX Item "-V"
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.PD
+Print the program version number on the standard output and exit.
+.IP "\fB\-w\fR" 4
+.IX Item "-w"
+.PD 0
+.IP "\fB\-\-include\-all\-whitespace\fR" 4
+.IX Item "--include-all-whitespace"
+.PD
+By default tab and space characters are included in the strings that
+are displayed, but other whitespace characters, such a newlines and
+carriage returns, are not.  The \fB\-w\fR option changes this so
+that all whitespace characters are considered to be part of a string.
+.IP "\fB\-s\fR" 4
+.IX Item "-s"
+.PD 0
+.IP "\fB\-\-output\-separator\fR" 4
+.IX Item "--output-separator"
+.PD
+By default, output strings are delimited by a new-line. This option
+allows you to supply any string to be used as the output record
+separator.  Useful with \-\-include\-all\-whitespace where strings
+may contain new-lines internally.
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIar\fR\|(1), \fInm\fR\|(1), \fIobjdump\fR\|(1), \fIranlib\fR\|(1), \fIreadelf\fR\|(1)
+and the Info entries for \fIbinutils\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man1/aarch64-elf-strip.1 b/share/man/man1/aarch64-elf-strip.1
new file mode 100644
index 0000000..16c2bc7
--- /dev/null
+++ b/share/man/man1/aarch64-elf-strip.1
@@ -0,0 +1,493 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "STRIP 1"
+.TH STRIP 1 "2019-05-21" "binutils-2.32" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+strip \- Discard symbols from object files.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+strip [\fB\-F\fR \fIbfdname\fR |\fB\-\-target=\fR\fIbfdname\fR]
+      [\fB\-I\fR \fIbfdname\fR |\fB\-\-input\-target=\fR\fIbfdname\fR]
+      [\fB\-O\fR \fIbfdname\fR |\fB\-\-output\-target=\fR\fIbfdname\fR]
+      [\fB\-s\fR|\fB\-\-strip\-all\fR]
+      [\fB\-S\fR|\fB\-g\fR|\fB\-d\fR|\fB\-\-strip\-debug\fR]
+      [\fB\-\-strip\-dwo\fR]
+      [\fB\-K\fR \fIsymbolname\fR|\fB\-\-keep\-symbol=\fR\fIsymbolname\fR]
+      [\fB\-M\fR|\fB\-\-merge\-notes\fR][\fB\-\-no\-merge\-notes\fR]
+      [\fB\-N\fR \fIsymbolname\fR |\fB\-\-strip\-symbol=\fR\fIsymbolname\fR]
+      [\fB\-w\fR|\fB\-\-wildcard\fR]
+      [\fB\-x\fR|\fB\-\-discard\-all\fR] [\fB\-X\fR |\fB\-\-discard\-locals\fR]
+      [\fB\-R\fR \fIsectionname\fR |\fB\-\-remove\-section=\fR\fIsectionname\fR]
+      [\fB\-\-remove\-relocations=\fR\fIsectionpattern\fR]
+      [\fB\-o\fR \fIfile\fR] [\fB\-p\fR|\fB\-\-preserve\-dates\fR]
+      [\fB\-D\fR|\fB\-\-enable\-deterministic\-archives\fR]
+      [\fB\-U\fR|\fB\-\-disable\-deterministic\-archives\fR]
+      [\fB\-\-keep\-file\-symbols\fR]
+      [\fB\-\-only\-keep\-debug\fR]
+      [\fB\-v\fR |\fB\-\-verbose\fR] [\fB\-V\fR|\fB\-\-version\fR]
+      [\fB\-\-help\fR] [\fB\-\-info\fR]
+      \fIobjfile\fR...
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\s-1GNU\s0 \fBstrip\fR discards all symbols from object files
+\&\fIobjfile\fR.  The list of object files may include archives.
+At least one object file must be given.
+.PP
+\&\fBstrip\fR modifies the files named in its argument,
+rather than writing modified copies under different names.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-F\fR \fIbfdname\fR" 4
+.IX Item "-F bfdname"
+.PD 0
+.IP "\fB\-\-target=\fR\fIbfdname\fR" 4
+.IX Item "--target=bfdname"
+.PD
+Treat the original \fIobjfile\fR as a file with the object
+code format \fIbfdname\fR, and rewrite it in the same format.
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+Show a summary of the options to \fBstrip\fR and exit.
+.IP "\fB\-\-info\fR" 4
+.IX Item "--info"
+Display a list showing all architectures and object formats available.
+.IP "\fB\-I\fR \fIbfdname\fR" 4
+.IX Item "-I bfdname"
+.PD 0
+.IP "\fB\-\-input\-target=\fR\fIbfdname\fR" 4
+.IX Item "--input-target=bfdname"
+.PD
+Treat the original \fIobjfile\fR as a file with the object
+code format \fIbfdname\fR.
+.IP "\fB\-O\fR \fIbfdname\fR" 4
+.IX Item "-O bfdname"
+.PD 0
+.IP "\fB\-\-output\-target=\fR\fIbfdname\fR" 4
+.IX Item "--output-target=bfdname"
+.PD
+Replace \fIobjfile\fR with a file in the output format \fIbfdname\fR.
+.IP "\fB\-R\fR \fIsectionname\fR" 4
+.IX Item "-R sectionname"
+.PD 0
+.IP "\fB\-\-remove\-section=\fR\fIsectionname\fR" 4
+.IX Item "--remove-section=sectionname"
+.PD
+Remove any section named \fIsectionname\fR from the output file, in
+addition to whatever sections would otherwise be removed.  This
+option may be given more than once.  Note that using this option
+inappropriately may make the output file unusable.  The wildcard
+character \fB*\fR may be given at the end of \fIsectionname\fR.  If
+so, then any section starting with \fIsectionname\fR will be removed.
+.Sp
+If the first character of \fIsectionpattern\fR is the exclamation
+point (!) then matching sections will not be removed even if an
+earlier use of \fB\-\-remove\-section\fR on the same command line
+would otherwise remove it.  For example:
+.Sp
+.Vb 1
+\&          \-\-remove\-section=.text.* \-\-remove\-section=!.text.foo
+.Ve
+.Sp
+will remove all sections matching the pattern '.text.*', but will not
+remove the section '.text.foo'.
+.IP "\fB\-\-remove\-relocations=\fR\fIsectionpattern\fR" 4
+.IX Item "--remove-relocations=sectionpattern"
+Remove relocations from the output file for any section matching
+\&\fIsectionpattern\fR.  This option may be given more than once.  Note
+that using this option inappropriately may make the output file
+unusable.  Wildcard characters are accepted in \fIsectionpattern\fR.
+For example:
+.Sp
+.Vb 1
+\&          \-\-remove\-relocations=.text.*
+.Ve
+.Sp
+will remove the relocations for all sections matching the patter
+\&'.text.*'.
+.Sp
+If the first character of \fIsectionpattern\fR is the exclamation
+point (!) then matching sections will not have their relocation
+removed even if an earlier use of \fB\-\-remove\-relocations\fR on the
+same command line would otherwise cause the relocations to be removed.
+For example:
+.Sp
+.Vb 1
+\&          \-\-remove\-relocations=.text.* \-\-remove\-relocations=!.text.foo
+.Ve
+.Sp
+will remove all relocations for sections matching the pattern
+\&'.text.*', but will not remove relocations for the section
+\&'.text.foo'.
+.IP "\fB\-s\fR" 4
+.IX Item "-s"
+.PD 0
+.IP "\fB\-\-strip\-all\fR" 4
+.IX Item "--strip-all"
+.PD
+Remove all symbols.
+.IP "\fB\-g\fR" 4
+.IX Item "-g"
+.PD 0
+.IP "\fB\-S\fR" 4
+.IX Item "-S"
+.IP "\fB\-d\fR" 4
+.IX Item "-d"
+.IP "\fB\-\-strip\-debug\fR" 4
+.IX Item "--strip-debug"
+.PD
+Remove debugging symbols only.
+.IP "\fB\-\-strip\-dwo\fR" 4
+.IX Item "--strip-dwo"
+Remove the contents of all \s-1DWARF\s0 .dwo sections, leaving the
+remaining debugging sections and all symbols intact.
+See the description of this option in the \fBobjcopy\fR section
+for more information.
+.IP "\fB\-\-strip\-unneeded\fR" 4
+.IX Item "--strip-unneeded"
+Remove all symbols that are not needed for relocation processing.
+.IP "\fB\-K\fR \fIsymbolname\fR" 4
+.IX Item "-K symbolname"
+.PD 0
+.IP "\fB\-\-keep\-symbol=\fR\fIsymbolname\fR" 4
+.IX Item "--keep-symbol=symbolname"
+.PD
+When stripping symbols, keep symbol \fIsymbolname\fR even if it would
+normally be stripped.  This option may be given more than once.
+.IP "\fB\-M\fR" 4
+.IX Item "-M"
+.PD 0
+.IP "\fB\-\-merge\-notes\fR" 4
+.IX Item "--merge-notes"
+.IP "\fB\-\-no\-merge\-notes\fR" 4
+.IX Item "--no-merge-notes"
+.PD
+For \s-1ELF\s0 files, attempt (or do not attempt) to reduce the size of any
+\&\s-1SHT_NOTE\s0 type sections by removing duplicate notes.  The default is to
+attempt this reduction.
+.IP "\fB\-N\fR \fIsymbolname\fR" 4
+.IX Item "-N symbolname"
+.PD 0
+.IP "\fB\-\-strip\-symbol=\fR\fIsymbolname\fR" 4
+.IX Item "--strip-symbol=symbolname"
+.PD
+Remove symbol \fIsymbolname\fR from the source file. This option may be
+given more than once, and may be combined with strip options other than
+\&\fB\-K\fR.
+.IP "\fB\-o\fR \fIfile\fR" 4
+.IX Item "-o file"
+Put the stripped output in \fIfile\fR, rather than replacing the
+existing file.  When this argument is used, only one \fIobjfile\fR
+argument may be specified.
+.IP "\fB\-p\fR" 4
+.IX Item "-p"
+.PD 0
+.IP "\fB\-\-preserve\-dates\fR" 4
+.IX Item "--preserve-dates"
+.PD
+Preserve the access and modification dates of the file.
+.IP "\fB\-D\fR" 4
+.IX Item "-D"
+.PD 0
+.IP "\fB\-\-enable\-deterministic\-archives\fR" 4
+.IX Item "--enable-deterministic-archives"
+.PD
+Operate in \fIdeterministic\fR mode.  When copying archive members
+and writing the archive index, use zero for UIDs, GIDs, timestamps,
+and use consistent file modes for all files.
+.Sp
+If \fIbinutils\fR was configured with
+\&\fB\-\-enable\-deterministic\-archives\fR, then this mode is on by default.
+It can be disabled with the \fB\-U\fR option, below.
+.IP "\fB\-U\fR" 4
+.IX Item "-U"
+.PD 0
+.IP "\fB\-\-disable\-deterministic\-archives\fR" 4
+.IX Item "--disable-deterministic-archives"
+.PD
+Do \fInot\fR operate in \fIdeterministic\fR mode.  This is the
+inverse of the \fB\-D\fR option, above: when copying archive members
+and writing the archive index, use their actual \s-1UID, GID,\s0 timestamp,
+and file mode values.
+.Sp
+This is the default unless \fIbinutils\fR was configured with
+\&\fB\-\-enable\-deterministic\-archives\fR.
+.IP "\fB\-w\fR" 4
+.IX Item "-w"
+.PD 0
+.IP "\fB\-\-wildcard\fR" 4
+.IX Item "--wildcard"
+.PD
+Permit regular expressions in \fIsymbolname\fRs used in other command
+line options.  The question mark (?), asterisk (*), backslash (\e) and
+square brackets ([]) operators can be used anywhere in the symbol
+name.  If the first character of the symbol name is the exclamation
+point (!) then the sense of the switch is reversed for that symbol.
+For example:
+.Sp
+.Vb 1
+\&          \-w \-K !foo \-K fo*
+.Ve
+.Sp
+would cause strip to only keep symbols that start with the letters
+\&\*(L"fo\*(R", but to discard the symbol \*(L"foo\*(R".
+.IP "\fB\-x\fR" 4
+.IX Item "-x"
+.PD 0
+.IP "\fB\-\-discard\-all\fR" 4
+.IX Item "--discard-all"
+.PD
+Remove non-global symbols.
+.IP "\fB\-X\fR" 4
+.IX Item "-X"
+.PD 0
+.IP "\fB\-\-discard\-locals\fR" 4
+.IX Item "--discard-locals"
+.PD
+Remove compiler-generated local symbols.
+(These usually start with \fBL\fR or \fB.\fR.)
+.IP "\fB\-\-keep\-file\-symbols\fR" 4
+.IX Item "--keep-file-symbols"
+When stripping a file, perhaps with \fB\-\-strip\-debug\fR or
+\&\fB\-\-strip\-unneeded\fR, retain any symbols specifying source file names,
+which would otherwise get stripped.
+.IP "\fB\-\-only\-keep\-debug\fR" 4
+.IX Item "--only-keep-debug"
+Strip a file, emptying the contents of any sections that would not be
+stripped by \fB\-\-strip\-debug\fR and leaving the debugging sections
+intact.  In \s-1ELF\s0 files, this preserves all the note sections in the
+output as well.
+.Sp
+Note \- the section headers of the stripped sections are preserved,
+including their sizes, but the contents of the section are discarded.
+The section headers are preserved so that other tools can match up the
+debuginfo file with the real executable, even if that executable has
+been relocated to a different address space.
+.Sp
+The intention is that this option will be used in conjunction with
+\&\fB\-\-add\-gnu\-debuglink\fR to create a two part executable.  One a
+stripped binary which will occupy less space in \s-1RAM\s0 and in a
+distribution and the second a debugging information file which is only
+needed if debugging abilities are required.  The suggested procedure
+to create these files is as follows:
+.RS 4
+.IP "1.<Link the executable as normal.  Assuming that it is called>" 4
+.IX Item "1.<Link the executable as normal. Assuming that it is called>"
+\&\f(CW\*(C`foo\*(C'\fR then...
+.ie n .IP "1.<Run ""objcopy \-\-only\-keep\-debug foo foo.dbg"" to>" 4
+.el .IP "1.<Run \f(CWobjcopy \-\-only\-keep\-debug foo foo.dbg\fR to>" 4
+.IX Item "1.<Run objcopy --only-keep-debug foo foo.dbg to>"
+create a file containing the debugging info.
+.ie n .IP "1.<Run ""objcopy \-\-strip\-debug foo"" to create a>" 4
+.el .IP "1.<Run \f(CWobjcopy \-\-strip\-debug foo\fR to create a>" 4
+.IX Item "1.<Run objcopy --strip-debug foo to create a>"
+stripped executable.
+.ie n .IP "1.<Run ""objcopy \-\-add\-gnu\-debuglink=foo.dbg foo"">" 4
+.el .IP "1.<Run \f(CWobjcopy \-\-add\-gnu\-debuglink=foo.dbg foo\fR>" 4
+.IX Item "1.<Run objcopy --add-gnu-debuglink=foo.dbg foo>"
+to add a link to the debugging info into the stripped executable.
+.RE
+.RS 4
+.Sp
+Note\-\-\-the choice of \f(CW\*(C`.dbg\*(C'\fR as an extension for the debug info
+file is arbitrary.  Also the \f(CW\*(C`\-\-only\-keep\-debug\*(C'\fR step is
+optional.  You could instead do this:
+.IP "1.<Link the executable as normal.>" 4
+.IX Item "1.<Link the executable as normal.>"
+.PD 0
+.ie n .IP "1.<Copy ""foo"" to ""foo.full"">" 4
+.el .IP "1.<Copy \f(CWfoo\fR to \f(CWfoo.full\fR>" 4
+.IX Item "1.<Copy foo to foo.full>"
+.ie n .IP "1.<Run ""strip \-\-strip\-debug foo"">" 4
+.el .IP "1.<Run \f(CWstrip \-\-strip\-debug foo\fR>" 4
+.IX Item "1.<Run strip --strip-debug foo>"
+.ie n .IP "1.<Run ""objcopy \-\-add\-gnu\-debuglink=foo.full foo"">" 4
+.el .IP "1.<Run \f(CWobjcopy \-\-add\-gnu\-debuglink=foo.full foo\fR>" 4
+.IX Item "1.<Run objcopy --add-gnu-debuglink=foo.full foo>"
+.RE
+.RS 4
+.PD
+.Sp
+i.e., the file pointed to by the \fB\-\-add\-gnu\-debuglink\fR can be the
+full executable.  It does not have to be a file created by the
+\&\fB\-\-only\-keep\-debug\fR switch.
+.Sp
+Note\-\-\-this switch is only intended for use on fully linked files.  It
+does not make sense to use it on object files where the debugging
+information may be incomplete.  Besides the gnu_debuglink feature
+currently only supports the presence of one filename containing
+debugging information, not multiple filenames on a one-per-object-file
+basis.
+.RE
+.IP "\fB\-V\fR" 4
+.IX Item "-V"
+.PD 0
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.PD
+Show the version number for \fBstrip\fR.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-\-verbose\fR" 4
+.IX Item "--verbose"
+.PD
+Verbose output: list all object files modified.  In the case of
+archives, \fBstrip \-v\fR lists all members of the archive.
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+the Info entries for \fIbinutils\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man1/aarch64-elf-windmc.1 b/share/man/man1/aarch64-elf-windmc.1
new file mode 100644
index 0000000..5953376
--- /dev/null
+++ b/share/man/man1/aarch64-elf-windmc.1
@@ -0,0 +1,356 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "WINDMC 1"
+.TH WINDMC 1 "2019-05-21" "binutils-2.32" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+windmc \- generates Windows message resources.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+windmc [options] input-file
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBwindmc\fR reads message definitions from an input file (.mc) and
+translate them into a set of output files.  The output files may be of
+four kinds:
+.ie n .IP """h""" 4
+.el .IP "\f(CWh\fR" 4
+.IX Item "h"
+A C header file containing the message definitions.
+.ie n .IP """rc""" 4
+.el .IP "\f(CWrc\fR" 4
+.IX Item "rc"
+A resource file compilable by the \fBwindres\fR tool.
+.ie n .IP """bin""" 4
+.el .IP "\f(CWbin\fR" 4
+.IX Item "bin"
+One or more binary files containing the resource data for a specific
+message language.
+.ie n .IP """dbg""" 4
+.el .IP "\f(CWdbg\fR" 4
+.IX Item "dbg"
+A C include file that maps message id's to their symbolic name.
+.PP
+The exact description of these different formats is available in
+documentation from Microsoft.
+.PP
+When \fBwindmc\fR converts from the \f(CW\*(C`mc\*(C'\fR format to the \f(CW\*(C`bin\*(C'\fR
+format, \f(CW\*(C`rc\*(C'\fR, \f(CW\*(C`h\*(C'\fR, and optional \f(CW\*(C`dbg\*(C'\fR it is acting like the
+Windows Message Compiler.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-a\fR" 4
+.IX Item "-a"
+.PD 0
+.IP "\fB\-\-ascii_in\fR" 4
+.IX Item "--ascii_in"
+.PD
+Specifies that the input file specified is \s-1ASCII.\s0 This is the default
+behaviour.
+.IP "\fB\-A\fR" 4
+.IX Item "-A"
+.PD 0
+.IP "\fB\-\-ascii_out\fR" 4
+.IX Item "--ascii_out"
+.PD
+Specifies that messages in the output \f(CW\*(C`bin\*(C'\fR files should be in \s-1ASCII\s0
+format.
+.IP "\fB\-b\fR" 4
+.IX Item "-b"
+.PD 0
+.IP "\fB\-\-binprefix\fR" 4
+.IX Item "--binprefix"
+.PD
+Specifies that \f(CW\*(C`bin\*(C'\fR filenames should have to be prefixed by the
+basename of the source file.
+.IP "\fB\-c\fR" 4
+.IX Item "-c"
+.PD 0
+.IP "\fB\-\-customflag\fR" 4
+.IX Item "--customflag"
+.PD
+Sets the customer bit in all message id's.
+.IP "\fB\-C\fR \fIcodepage\fR" 4
+.IX Item "-C codepage"
+.PD 0
+.IP "\fB\-\-codepage_in\fR \fIcodepage\fR" 4
+.IX Item "--codepage_in codepage"
+.PD
+Sets the default codepage to be used to convert input file to \s-1UTF16.\s0 The
+default is ocdepage 1252.
+.IP "\fB\-d\fR" 4
+.IX Item "-d"
+.PD 0
+.IP "\fB\-\-decimal_values\fR" 4
+.IX Item "--decimal_values"
+.PD
+Outputs the constants in the header file in decimal. Default is using
+hexadecimal output.
+.IP "\fB\-e\fR \fIext\fR" 4
+.IX Item "-e ext"
+.PD 0
+.IP "\fB\-\-extension\fR \fIext\fR" 4
+.IX Item "--extension ext"
+.PD
+The extension for the header file. The default is .h extension.
+.IP "\fB\-F\fR \fItarget\fR" 4
+.IX Item "-F target"
+.PD 0
+.IP "\fB\-\-target\fR \fItarget\fR" 4
+.IX Item "--target target"
+.PD
+Specify the \s-1BFD\s0 format to use for a bin file as output.  This
+is a \s-1BFD\s0 target name; you can use the \fB\-\-help\fR option to see a list
+of supported targets.  Normally \fBwindmc\fR will use the default
+format, which is the first one listed by the \fB\-\-help\fR option.
+.IP "\fB\-h\fR \fIpath\fR" 4
+.IX Item "-h path"
+.PD 0
+.IP "\fB\-\-headerdir\fR \fIpath\fR" 4
+.IX Item "--headerdir path"
+.PD
+The target directory of the generated header file. The default is the
+current directory.
+.IP "\fB\-H\fR" 4
+.IX Item "-H"
+.PD 0
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+.PD
+Displays a list of command-line options and then exits.
+.IP "\fB\-m\fR \fIcharacters\fR" 4
+.IX Item "-m characters"
+.PD 0
+.IP "\fB\-\-maxlength\fR \fIcharacters\fR" 4
+.IX Item "--maxlength characters"
+.PD
+Instructs \fBwindmc\fR to generate a warning if the length
+of any message exceeds the number specified.
+.IP "\fB\-n\fR" 4
+.IX Item "-n"
+.PD 0
+.IP "\fB\-\-nullterminate\fR" 4
+.IX Item "--nullterminate"
+.PD
+Terminate message text in \f(CW\*(C`bin\*(C'\fR files by zero. By default they are
+terminated by \s-1CR/LF.\s0
+.IP "\fB\-o\fR" 4
+.IX Item "-o"
+.PD 0
+.IP "\fB\-\-hresult_use\fR" 4
+.IX Item "--hresult_use"
+.PD
+Not yet implemented. Instructs \f(CW\*(C`windmc\*(C'\fR to generate an \s-1OLE2\s0 header
+file, using \s-1HRESULT\s0 definitions. Status codes are used if the flag is not
+specified.
+.IP "\fB\-O\fR \fIcodepage\fR" 4
+.IX Item "-O codepage"
+.PD 0
+.IP "\fB\-\-codepage_out\fR \fIcodepage\fR" 4
+.IX Item "--codepage_out codepage"
+.PD
+Sets the default codepage to be used to output text files. The default
+is ocdepage 1252.
+.IP "\fB\-r\fR \fIpath\fR" 4
+.IX Item "-r path"
+.PD 0
+.IP "\fB\-\-rcdir\fR \fIpath\fR" 4
+.IX Item "--rcdir path"
+.PD
+The target directory for the generated \f(CW\*(C`rc\*(C'\fR script and the generated
+\&\f(CW\*(C`bin\*(C'\fR files that the resource compiler script includes. The default
+is the current directory.
+.IP "\fB\-u\fR" 4
+.IX Item "-u"
+.PD 0
+.IP "\fB\-\-unicode_in\fR" 4
+.IX Item "--unicode_in"
+.PD
+Specifies that the input file is \s-1UTF16.\s0
+.IP "\fB\-U\fR" 4
+.IX Item "-U"
+.PD 0
+.IP "\fB\-\-unicode_out\fR" 4
+.IX Item "--unicode_out"
+.PD
+Specifies that messages in the output \f(CW\*(C`bin\*(C'\fR file should be in \s-1UTF16\s0
+format. This is the default behaviour.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+.PD 0
+.IP "\fB\-\-verbose\fR" 4
+.IX Item "--verbose"
+.PD
+Enable verbose mode.
+.IP "\fB\-V\fR" 4
+.IX Item "-V"
+.PD 0
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.PD
+Prints the version number for \fBwindmc\fR.
+.IP "\fB\-x\fR \fIpath\fR" 4
+.IX Item "-x path"
+.PD 0
+.IP "\fB\-\-xdgb\fR \fIpath\fR" 4
+.IX Item "--xdgb path"
+.PD
+The path of the \f(CW\*(C`dbg\*(C'\fR C include file that maps message id's to the
+symbolic name. No such file is generated without specifying the switch.
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+the Info entries for \fIbinutils\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man1/aarch64-elf-windres.1 b/share/man/man1/aarch64-elf-windres.1
new file mode 100644
index 0000000..2c641ba
--- /dev/null
+++ b/share/man/man1/aarch64-elf-windres.1
@@ -0,0 +1,364 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "WINDRES 1"
+.TH WINDRES 1 "2019-05-21" "binutils-2.32" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+windres \- manipulate Windows resources.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+windres [options] [input\-file] [output\-file]
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fBwindres\fR reads resources from an input file and copies them into
+an output file.  Either file may be in one of three formats:
+.ie n .IP """rc""" 4
+.el .IP "\f(CWrc\fR" 4
+.IX Item "rc"
+A text format read by the Resource Compiler.
+.ie n .IP """res""" 4
+.el .IP "\f(CWres\fR" 4
+.IX Item "res"
+A binary format generated by the Resource Compiler.
+.ie n .IP """coff""" 4
+.el .IP "\f(CWcoff\fR" 4
+.IX Item "coff"
+A \s-1COFF\s0 object or executable.
+.PP
+The exact description of these different formats is available in
+documentation from Microsoft.
+.PP
+When \fBwindres\fR converts from the \f(CW\*(C`rc\*(C'\fR format to the \f(CW\*(C`res\*(C'\fR
+format, it is acting like the Windows Resource Compiler.  When
+\&\fBwindres\fR converts from the \f(CW\*(C`res\*(C'\fR format to the \f(CW\*(C`coff\*(C'\fR
+format, it is acting like the Windows \f(CW\*(C`CVTRES\*(C'\fR program.
+.PP
+When \fBwindres\fR generates an \f(CW\*(C`rc\*(C'\fR file, the output is similar
+but not identical to the format expected for the input.  When an input
+\&\f(CW\*(C`rc\*(C'\fR file refers to an external filename, an output \f(CW\*(C`rc\*(C'\fR file
+will instead include the file contents.
+.PP
+If the input or output format is not specified, \fBwindres\fR will
+guess based on the file name, or, for the input file, the file contents.
+A file with an extension of \fI.rc\fR will be treated as an \f(CW\*(C`rc\*(C'\fR
+file, a file with an extension of \fI.res\fR will be treated as a
+\&\f(CW\*(C`res\*(C'\fR file, and a file with an extension of \fI.o\fR or
+\&\fI.exe\fR will be treated as a \f(CW\*(C`coff\*(C'\fR file.
+.PP
+If no output file is specified, \fBwindres\fR will print the resources
+in \f(CW\*(C`rc\*(C'\fR format to standard output.
+.PP
+The normal use is for you to write an \f(CW\*(C`rc\*(C'\fR file, use \fBwindres\fR
+to convert it to a \s-1COFF\s0 object file, and then link the \s-1COFF\s0 file into
+your application.  This will make the resources described in the
+\&\f(CW\*(C`rc\*(C'\fR file available to Windows.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-i\fR \fIfilename\fR" 4
+.IX Item "-i filename"
+.PD 0
+.IP "\fB\-\-input\fR \fIfilename\fR" 4
+.IX Item "--input filename"
+.PD
+The name of the input file.  If this option is not used, then
+\&\fBwindres\fR will use the first non-option argument as the input file
+name.  If there are no non-option arguments, then \fBwindres\fR will
+read from standard input.  \fBwindres\fR can not read a \s-1COFF\s0 file from
+standard input.
+.IP "\fB\-o\fR \fIfilename\fR" 4
+.IX Item "-o filename"
+.PD 0
+.IP "\fB\-\-output\fR \fIfilename\fR" 4
+.IX Item "--output filename"
+.PD
+The name of the output file.  If this option is not used, then
+\&\fBwindres\fR will use the first non-option argument, after any used
+for the input file name, as the output file name.  If there is no
+non-option argument, then \fBwindres\fR will write to standard output.
+\&\fBwindres\fR can not write a \s-1COFF\s0 file to standard output.  Note,
+for compatibility with \fBrc\fR the option \fB\-fo\fR is also
+accepted, but its use is not recommended.
+.IP "\fB\-J\fR \fIformat\fR" 4
+.IX Item "-J format"
+.PD 0
+.IP "\fB\-\-input\-format\fR \fIformat\fR" 4
+.IX Item "--input-format format"
+.PD
+The input format to read.  \fIformat\fR may be \fBres\fR, \fBrc\fR, or
+\&\fBcoff\fR.  If no input format is specified, \fBwindres\fR will
+guess, as described above.
+.IP "\fB\-O\fR \fIformat\fR" 4
+.IX Item "-O format"
+.PD 0
+.IP "\fB\-\-output\-format\fR \fIformat\fR" 4
+.IX Item "--output-format format"
+.PD
+The output format to generate.  \fIformat\fR may be \fBres\fR,
+\&\fBrc\fR, or \fBcoff\fR.  If no output format is specified,
+\&\fBwindres\fR will guess, as described above.
+.IP "\fB\-F\fR \fItarget\fR" 4
+.IX Item "-F target"
+.PD 0
+.IP "\fB\-\-target\fR \fItarget\fR" 4
+.IX Item "--target target"
+.PD
+Specify the \s-1BFD\s0 format to use for a \s-1COFF\s0 file as input or output.  This
+is a \s-1BFD\s0 target name; you can use the \fB\-\-help\fR option to see a list
+of supported targets.  Normally \fBwindres\fR will use the default
+format, which is the first one listed by the \fB\-\-help\fR option.
+.IP "\fB\-\-preprocessor\fR \fIprogram\fR" 4
+.IX Item "--preprocessor program"
+When \fBwindres\fR reads an \f(CW\*(C`rc\*(C'\fR file, it runs it through the C
+preprocessor first.  This option may be used to specify the preprocessor
+to use, including any leading arguments.  The default preprocessor
+argument is \f(CW\*(C`gcc \-E \-xc\-header \-DRC_INVOKED\*(C'\fR.
+.IP "\fB\-\-preprocessor\-arg\fR \fIoption\fR" 4
+.IX Item "--preprocessor-arg option"
+When \fBwindres\fR reads an \f(CW\*(C`rc\*(C'\fR file, it runs it through
+the C preprocessor first.  This option may be used to specify additional
+text to be passed to preprocessor on its command line.
+This option can be used multiple times to add multiple options to the
+preprocessor command line.
+.IP "\fB\-I\fR \fIdirectory\fR" 4
+.IX Item "-I directory"
+.PD 0
+.IP "\fB\-\-include\-dir\fR \fIdirectory\fR" 4
+.IX Item "--include-dir directory"
+.PD
+Specify an include directory to use when reading an \f(CW\*(C`rc\*(C'\fR file.
+\&\fBwindres\fR will pass this to the preprocessor as an \fB\-I\fR
+option.  \fBwindres\fR will also search this directory when looking for
+files named in the \f(CW\*(C`rc\*(C'\fR file.  If the argument passed to this command
+matches any of the supported \fIformats\fR (as described in the \fB\-J\fR
+option), it will issue a deprecation warning, and behave just like the
+\&\fB\-J\fR option.  New programs should not use this behaviour.  If a
+directory happens to match a \fIformat\fR, simple prefix it with \fB./\fR
+to disable the backward compatibility.
+.IP "\fB\-D\fR \fItarget\fR" 4
+.IX Item "-D target"
+.PD 0
+.IP "\fB\-\-define\fR \fIsym\fR\fB[=\fR\fIval\fR\fB]\fR" 4
+.IX Item "--define sym[=val]"
+.PD
+Specify a \fB\-D\fR option to pass to the preprocessor when reading an
+\&\f(CW\*(C`rc\*(C'\fR file.
+.IP "\fB\-U\fR \fItarget\fR" 4
+.IX Item "-U target"
+.PD 0
+.IP "\fB\-\-undefine\fR \fIsym\fR" 4
+.IX Item "--undefine sym"
+.PD
+Specify a \fB\-U\fR option to pass to the preprocessor when reading an
+\&\f(CW\*(C`rc\*(C'\fR file.
+.IP "\fB\-r\fR" 4
+.IX Item "-r"
+Ignored for compatibility with rc.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+Enable verbose mode.  This tells you what the preprocessor is if you
+didn't specify one.
+.IP "\fB\-c\fR \fIval\fR" 4
+.IX Item "-c val"
+.PD 0
+.IP "\fB\-\-codepage\fR \fIval\fR" 4
+.IX Item "--codepage val"
+.PD
+Specify the default codepage to use when reading an \f(CW\*(C`rc\*(C'\fR file.
+\&\fIval\fR should be a hexadecimal prefixed by \fB0x\fR or decimal
+codepage code. The valid range is from zero up to 0xffff, but the
+validity of the codepage is host and configuration dependent.
+.IP "\fB\-l\fR \fIval\fR" 4
+.IX Item "-l val"
+.PD 0
+.IP "\fB\-\-language\fR \fIval\fR" 4
+.IX Item "--language val"
+.PD
+Specify the default language to use when reading an \f(CW\*(C`rc\*(C'\fR file.
+\&\fIval\fR should be a hexadecimal language code.  The low eight bits are
+the language, and the high eight bits are the sublanguage.
+.IP "\fB\-\-use\-temp\-file\fR" 4
+.IX Item "--use-temp-file"
+Use a temporary file to instead of using popen to read the output of
+the preprocessor. Use this option if the popen implementation is buggy
+on the host (eg., certain non-English language versions of Windows 95 and
+Windows 98 are known to have buggy popen where the output will instead
+go the console).
+.IP "\fB\-\-no\-use\-temp\-file\fR" 4
+.IX Item "--no-use-temp-file"
+Use popen, not a temporary file, to read the output of the preprocessor.
+This is the default behaviour.
+.IP "\fB\-h\fR" 4
+.IX Item "-h"
+.PD 0
+.IP "\fB\-\-help\fR" 4
+.IX Item "--help"
+.PD
+Prints a usage summary.
+.IP "\fB\-V\fR" 4
+.IX Item "-V"
+.PD 0
+.IP "\fB\-\-version\fR" 4
+.IX Item "--version"
+.PD
+Prints the version number for \fBwindres\fR.
+.IP "\fB\-\-yydebug\fR" 4
+.IX Item "--yydebug"
+If \fBwindres\fR is compiled with \f(CW\*(C`YYDEBUG\*(C'\fR defined as \f(CW1\fR,
+this will turn on parser debugging.
+.IP "\fB@\fR\fIfile\fR" 4
+.IX Item "@file"
+Read command-line options from \fIfile\fR.  The options read are
+inserted in place of the original @\fIfile\fR option.  If \fIfile\fR
+does not exist, or cannot be read, then the option will be treated
+literally, and not removed.
+.Sp
+Options in \fIfile\fR are separated by whitespace.  A whitespace
+character may be included in an option by surrounding the entire
+option in either single or double quotes.  Any character (including a
+backslash) may be included by prefixing the character to be included
+with a backslash.  The \fIfile\fR may itself contain additional
+@\fIfile\fR options; any such options will be processed recursively.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+the Info entries for \fIbinutils\fR.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1991\-2019 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3
+or any later version published by the Free Software Foundation;
+with no Invariant Sections, with no Front-Cover Texts, and with no
+Back-Cover Texts.  A copy of the license is included in the
+section entitled \*(L"\s-1GNU\s0 Free Documentation License\*(R".
diff --git a/share/man/man5/aarch64-elf-gdbinit.5 b/share/man/man5/aarch64-elf-gdbinit.5
new file mode 100644
index 0000000..e06e4d9
--- /dev/null
+++ b/share/man/man5/aarch64-elf-gdbinit.5
@@ -0,0 +1,205 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "GDBINIT 5"
+.TH GDBINIT 5 "2019-05-21" "gdb-8.2.50.20190202-git" "GNU Development Tools"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+gdbinit \- GDB initialization scripts
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+~/.gdbinit
+.PP
+\&./.gdbinit
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+These files contain \s-1GDB\s0 commands to automatically execute during
+\&\s-1GDB\s0 startup.  The lines of contents are canned sequences of commands,
+described in
+the \s-1GDB\s0 manual in node \f(CW\*(C`Sequences\*(C'\fR
+\&\*(-- shell command \f(CW\*(C`info \-f gdb \-n Sequences\*(C'\fR.
+.PP
+Please read more in
+the \s-1GDB\s0 manual in node \f(CW\*(C`Startup\*(C'\fR
+\&\*(-- shell command \f(CW\*(C`info \-f gdb \-n Startup\*(C'\fR.
+.ie n .IP "\fB(not enabled with \f(CB""\-\-with\-system\-gdbinit""\fB during compilation)\fR" 4
+.el .IP "\fB(not enabled with \f(CB\-\-with\-system\-gdbinit\fB during compilation)\fR" 4
+.IX Item "(not enabled with --with-system-gdbinit during compilation)"
+System-wide initialization file.  It is executed unless user specified
+\&\s-1GDB\s0 option \f(CW\*(C`\-nx\*(C'\fR or \f(CW\*(C`\-n\*(C'\fR.
+See more in
+the \s-1GDB\s0 manual in node \f(CW\*(C`System\-wide configuration\*(C'\fR
+\&\*(-- shell command \f(CW\*(C`info \-f gdb \-n \*(AqSystem\-wide configuration\*(Aq\*(C'\fR.
+.IP "\fB~/.gdbinit\fR" 4
+.IX Item "~/.gdbinit"
+User initialization file.  It is executed unless user specified
+\&\s-1GDB\s0 options \f(CW\*(C`\-nx\*(C'\fR, \f(CW\*(C`\-n\*(C'\fR or \f(CW\*(C`\-nh\*(C'\fR.
+.IP "\fB./.gdbinit\fR" 4
+.IX Item "./.gdbinit"
+Initialization file for current directory.  It may need to be enabled with
+\&\s-1GDB\s0 security command \f(CW\*(C`set auto\-load local\-gdbinit\*(C'\fR.
+See more in
+the \s-1GDB\s0 manual in node \f(CW\*(C`Init File in the Current Directory\*(C'\fR
+\&\*(-- shell command \f(CW\*(C`info \-f gdb \-n \*(AqInit File in the Current Directory\*(Aq\*(C'\fR.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIgdb\fR\|(1), \f(CW\*(C`info \-f gdb \-n Startup\*(C'\fR
+.PP
+The full documentation for \s-1GDB\s0 is maintained as a Texinfo manual.
+If the \f(CW\*(C`info\*(C'\fR and \f(CW\*(C`gdb\*(C'\fR programs and \s-1GDB\s0's Texinfo
+documentation are properly installed at your site, the command
+.PP
+.Vb 1
+\&        info gdb
+.Ve
+.PP
+should give you access to the complete manual.
+.PP
+\&\fIUsing \s-1GDB: A\s0 Guide to the \s-1GNU\s0 Source-Level Debugger\fR,
+Richard M. Stallman and Roland H. Pesch, July 1991.
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1988\-2018 Free Software Foundation, Inc.
+.PP
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being \*(L"Free Software\*(R" and \*(L"Free Software Needs
+Free Documentation\*(R", with the Front-Cover Texts being \*(L"A \s-1GNU\s0 Manual,\*(R"
+and with the Back-Cover Texts as in (a) below.
+.PP
+(a) The \s-1FSF\s0's Back-Cover Text is: \*(L"You are free to copy and modify
+this \s-1GNU\s0 Manual.  Buying copies from \s-1GNU\s0 Press supports the \s-1FSF\s0 in
+developing \s-1GNU\s0 and promoting software freedom.\*(R"
diff --git a/share/man/man7/fsf-funding.7 b/share/man/man7/fsf-funding.7
new file mode 100644
index 0000000..6f3f0d3
--- /dev/null
+++ b/share/man/man7/fsf-funding.7
@@ -0,0 +1,189 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "FSF-FUNDING 7"
+.TH FSF-FUNDING 7 "2019-05-03" "gcc-9.1.1" "GNU"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+fsf\-funding \- Funding Free Software
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+.SS "Funding Free Software"
+.IX Subsection "Funding Free Software"
+If you want to have more free software a few years from now, it makes
+sense for you to help encourage people to contribute funds for its
+development.  The most effective approach known is to encourage
+commercial redistributors to donate.
+.PP
+Users of free software systems can boost the pace of development by
+encouraging for-a-fee distributors to donate part of their selling price
+to free software developers\-\-\-the Free Software Foundation, and others.
+.PP
+The way to convince distributors to do this is to demand it and expect
+it from them.  So when you compare distributors, judge them partly by
+how much they give to free software development.  Show distributors
+they must compete to be the one who gives the most.
+.PP
+To make this approach work, you must insist on numbers that you can
+compare, such as, \*(L"We will donate ten dollars to the Frobnitz project
+for each disk sold.\*(R"  Don't be satisfied with a vague promise, such as
+\&\*(L"A portion of the profits are donated,\*(R" since it doesn't give a basis
+for comparison.
+.PP
+Even a precise fraction \*(L"of the profits from this disk\*(R" is not very
+meaningful, since creative accounting and unrelated business decisions
+can greatly alter what fraction of the sales price counts as profit.
+If the price you pay is \f(CW$50\fR, ten percent of the profit is probably
+less than a dollar; it might be a few cents, or nothing at all.
+.PP
+Some redistributors do development work themselves.  This is useful too;
+but to keep everyone honest, you need to inquire how much they do, and
+what kind.  Some kinds of development make much more long-term
+difference than others.  For example, maintaining a separate version of
+a program contributes very little; maintaining the standard version of a
+program for the whole community contributes much.  Easy new ports
+contribute little, since someone else would surely do them; difficult
+ports such as adding a new \s-1CPU\s0 to the \s-1GNU\s0 Compiler Collection contribute more;
+major new features or packages contribute the most.
+.PP
+By establishing the idea that supporting further development is \*(L"the
+proper thing to do\*(R" when distributing free software for a fee, we can
+assure a steady flow of resources into making more free software.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIgpl\fR\|(7), \fIgfdl\fR\|(7).
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 1994 Free Software Foundation, Inc.
+Verbatim copying and redistribution of this section is permitted
+without royalty; alteration is not permitted.
diff --git a/share/man/man7/gfdl.7 b/share/man/man7/gfdl.7
new file mode 100644
index 0000000..970a350
--- /dev/null
+++ b/share/man/man7/gfdl.7
@@ -0,0 +1,647 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "GFDL 7"
+.TH GFDL 7 "2019-05-03" "gcc-9.1.1" "GNU"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+gfdl \- GNU Free Documentation License
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\f(CW@comment\fR For some cases, this default \f(CW@node\fR/@unnumbered is not applicable and
+\&\f(CW@comment\fR causes warnings.  In those cases, the including file can set
+\&\f(CW@comment\fR nodefaultgnufreedocumentationlicensenode and provide it's own version.
+\&\f(CW@comment\fR F.i., when this file is included in an \f(CW@raisesections\fR context, the
+\&\f(CW@comment\fR including file can use an \f(CW@unnumberedsec\fR.
+.SS "\s-1GNU\s0 Free Documentation License"
+.IX Subsection "GNU Free Documentation License"
+.SS "Version 1.3, 3 November 2008"
+.IX Subsection "Version 1.3, 3 November 2008"
+.Vb 2
+\&        Copyright (c) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+\&        E<lt>B<http://fsf.org/>E<gt>
+\&        
+\&        Everyone is permitted to copy and distribute verbatim copies
+\&        of this license document, but changing it is not allowed.
+.Ve
+.IP "0." 4
+.IX Item "0."
+\&\s-1PREAMBLE\s0
+.Sp
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document \fIfree\fR in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+.Sp
+This License is a kind of \*(L"copyleft\*(R", which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the \s-1GNU\s0 General Public License, which is a copyleft
+license designed for free software.
+.Sp
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+.IP "1." 4
+.IX Item "1."
+\&\s-1APPLICABILITY AND DEFINITIONS\s0
+.Sp
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License.  Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein.  The \*(L"Document\*(R", below,
+refers to any such manual or work.  Any member of the public is a
+licensee, and is addressed as \*(L"you\*(R".  You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+.Sp
+A \*(L"Modified Version\*(R" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+.Sp
+A \*(L"Secondary Section\*(R" is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject.  (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+.Sp
+The \*(L"Invariant Sections\*(R" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.  If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant.  The Document may contain zero
+Invariant Sections.  If the Document does not identify any Invariant
+Sections then there are none.
+.Sp
+The \*(L"Cover Texts\*(R" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.  A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+.Sp
+A \*(L"Transparent\*(R" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text.  A copy that is not \*(L"Transparent\*(R" is called \*(L"Opaque\*(R".
+.Sp
+Examples of suitable formats for Transparent copies include plain
+\&\s-1ASCII\s0 without markup, Texinfo input format, LaTeX input
+format, \s-1SGML\s0 or \s-1XML\s0 using a publicly available
+\&\s-1DTD,\s0 and standard-conforming simple \s-1HTML,\s0
+PostScript or \s-1PDF\s0 designed for human modification.  Examples
+of transparent image formats include \s-1PNG, XCF\s0 and
+\&\s-1JPG.\s0  Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, \s-1SGML\s0 or
+\&\s-1XML\s0 for which the \s-1DTD\s0 and/or processing tools are
+not generally available, and the machine-generated \s-1HTML,\s0
+PostScript or \s-1PDF\s0 produced by some word processors for
+output purposes only.
+.Sp
+The \*(L"Title Page\*(R" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, \*(L"Title Page\*(R" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+.Sp
+The \*(L"publisher\*(R" means any person or entity that distributes copies
+of the Document to the public.
+.Sp
+A section \*(L"Entitled \s-1XYZ\*(R"\s0 means a named subunit of the Document whose
+title either is precisely \s-1XYZ\s0 or contains \s-1XYZ\s0 in parentheses following
+text that translates \s-1XYZ\s0 in another language.  (Here \s-1XYZ\s0 stands for a
+specific section name mentioned below, such as \*(L"Acknowledgements\*(R",
+\&\*(L"Dedications\*(R", \*(L"Endorsements\*(R", or \*(L"History\*(R".)  To \*(L"Preserve the Title\*(R"
+of such a section when you modify the Document means that it remains a
+section \*(L"Entitled \s-1XYZ\*(R"\s0 according to this definition.
+.Sp
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document.  These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+.IP "2." 4
+.IX Item "2."
+\&\s-1VERBATIM COPYING\s0
+.Sp
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+.Sp
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+.IP "3." 4
+.IX Item "3."
+\&\s-1COPYING IN QUANTITY\s0
+.Sp
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+.Sp
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+.Sp
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+.Sp
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+.IP "4." 4
+.IX Item "4."
+\&\s-1MODIFICATIONS\s0
+.Sp
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+.RS 4
+.IP "A." 4
+.IX Item "A."
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document).  You may use the same title as a previous version
+if the original publisher of that version gives permission.
+.IP "B." 4
+.IX Item "B."
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+.IP "C." 4
+.IX Item "C."
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+.IP "D." 4
+.IX Item "D."
+Preserve all the copyright notices of the Document.
+.IP "E." 4
+.IX Item "E."
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+.IP "F." 4
+.IX Item "F."
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+.IP "G." 4
+.IX Item "G."
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+.IP "H." 4
+.IX Item "H."
+Include an unaltered copy of this License.
+.IP "I." 4
+.IX Item "I."
+Preserve the section Entitled \*(L"History\*(R", Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page.  If
+there is no section Entitled \*(L"History\*(R" in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+.IP "J." 4
+.IX Item "J."
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on.  These may be placed in the \*(L"History\*(R" section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+.IP "K." 4
+.IX Item "K."
+For any section Entitled \*(L"Acknowledgements\*(R" or \*(L"Dedications\*(R", Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+.IP "L." 4
+.IX Item "L."
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles.  Section numbers
+or the equivalent are not considered part of the section titles.
+.IP "M." 4
+.IX Item "M."
+Delete any section Entitled \*(L"Endorsements\*(R".  Such a section
+may not be included in the Modified Version.
+.IP "N." 4
+.IX Item "N."
+Do not retitle any existing section to be Entitled \*(L"Endorsements\*(R" or
+to conflict in title with any Invariant Section.
+.IP "O." 4
+.IX Item "O."
+Preserve any Warranty Disclaimers.
+.RE
+.RS 4
+.Sp
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+.Sp
+You may add a section Entitled \*(L"Endorsements\*(R", provided it contains
+nothing but endorsements of your Modified Version by various
+parties\-\-\-for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+.Sp
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+.Sp
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+.RE
+.IP "5." 4
+.IX Item "5."
+\&\s-1COMBINING DOCUMENTS\s0
+.Sp
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+.Sp
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+.Sp
+In the combination, you must combine any sections Entitled \*(L"History\*(R"
+in the various original documents, forming one section Entitled
+\&\*(L"History\*(R"; likewise combine any sections Entitled \*(L"Acknowledgements\*(R",
+and any sections Entitled \*(L"Dedications\*(R".  You must delete all
+sections Entitled \*(L"Endorsements.\*(R"
+.IP "6." 4
+.IX Item "6."
+\&\s-1COLLECTIONS OF DOCUMENTS\s0
+.Sp
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+.Sp
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+.IP "7." 4
+.IX Item "7."
+\&\s-1AGGREGATION WITH INDEPENDENT WORKS\s0
+.Sp
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an \*(L"aggregate\*(R" if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+.Sp
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+.IP "8." 4
+.IX Item "8."
+\&\s-1TRANSLATION\s0
+.Sp
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers.  In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+.Sp
+If a section in the Document is Entitled \*(L"Acknowledgements\*(R",
+\&\*(L"Dedications\*(R", or \*(L"History\*(R", the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+.IP "9." 4
+.IX Item "9."
+\&\s-1TERMINATION\s0
+.Sp
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+.Sp
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+.Sp
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+.Sp
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+.IP "10." 4
+.IX Item "10."
+\&\s-1FUTURE REVISIONS OF THIS LICENSE\s0
+.Sp
+The Free Software Foundation may publish new, revised versions
+of the \s-1GNU\s0 Free Documentation License from time to time.  Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.  See
+<\fBhttp://www.gnu.org/copyleft/\fR>.
+.Sp
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License \*(L"or any later version\*(R" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.  If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+.IP "11." 4
+.IX Item "11."
+\&\s-1RELICENSING\s0
+.Sp
+\&\*(L"Massive Multiauthor Collaboration Site\*(R" (or \*(L"\s-1MMC\s0 Site\*(R") means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works.  A
+public wiki that anybody can edit is an example of such a server.  A
+\&\*(L"Massive Multiauthor Collaboration\*(R" (or \*(L"\s-1MMC\*(R"\s0) contained in the
+site means any set of copyrightable works thus published on the \s-1MMC\s0
+site.
+.Sp
+\&\*(L"CC-BY-SA\*(R" means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+.Sp
+\&\*(L"Incorporate\*(R" means to publish or republish a Document, in whole or
+in part, as part of another Document.
+.Sp
+An \s-1MMC\s0 is \*(L"eligible for relicensing\*(R" if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this \s-1MMC,\s0 and subsequently incorporated in whole
+or in part into the \s-1MMC,\s0 (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+.Sp
+The operator of an \s-1MMC\s0 Site may republish an \s-1MMC\s0 contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the \s-1MMC\s0 is eligible for relicensing.
+.SS "\s-1ADDENDUM:\s0 How to use this License for your documents"
+.IX Subsection "ADDENDUM: How to use this License for your documents"
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+.PP
+.Vb 7
+\&          Copyright (C)  <year>  <your name>.
+\&          Permission is granted to copy, distribute and/or modify this document
+\&          under the terms of the GNU Free Documentation License, Version 1.3
+\&          or any later version published by the Free Software Foundation;
+\&          with no Invariant Sections, no Front\-Cover Texts, and no Back\-Cover
+\&          Texts.  A copy of the license is included in the section entitled "GNU
+\&          Free Documentation License".
+.Ve
+.PP
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the \*(L"with...Texts.\*(R" line with this:
+.PP
+.Vb 3
+\&            with the Invariant Sections being <list their titles>, with
+\&            the Front\-Cover Texts being <list>, and with the Back\-Cover Texts
+\&            being <list>.
+.Ve
+.PP
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+.PP
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the \s-1GNU\s0 General Public License,
+to permit their use in free software.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIgpl\fR\|(7), \fIfsf\-funding\fR\|(7).
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+<\fBhttp://fsf.org/\fR>
+.PP
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
diff --git a/share/man/man7/gpl.7 b/share/man/man7/gpl.7
new file mode 100644
index 0000000..46356e7
--- /dev/null
+++ b/share/man/man7/gpl.7
@@ -0,0 +1,846 @@
+.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+.    ds C`
+.    ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.if !\nF .nr F 0
+.if \nF>0 \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    if !\nF==2 \{\
+.        nr % 0
+.        nr F 2
+.    \}
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "GPL 7"
+.TH GPL 7 "2019-05-03" "gcc-9.1.1" "GNU"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+gpl \- GNU General Public License
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+.SS "\s-1GNU\s0 General Public License"
+.IX Subsection "GNU General Public License"
+.SS "Version 3, 29 June 2007"
+.IX Subsection "Version 3, 29 June 2007"
+.Vb 1
+\&        Copyright (c) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+\&        
+\&        Everyone is permitted to copy and distribute verbatim copies of this
+\&        license document, but changing it is not allowed.
+.Ve
+.SS "Preamble"
+.IX Subsection "Preamble"
+The \s-1GNU\s0 General Public License is a free, copyleft license for
+software and other kinds of works.
+.PP
+The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the \s-1GNU\s0 General Public License is intended to guarantee your freedom
+to share and change all versions of a program\*(--to make sure it remains
+free software for all its users.  We, the Free Software Foundation,
+use the \s-1GNU\s0 General Public License for most of our software; it
+applies also to any other work released this way by its authors.  You
+can apply it to your programs, too.
+.PP
+When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+.PP
+To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you
+have certain responsibilities if you distribute copies of the
+software, or if you modify it: responsibilities to respect the freedom
+of others.
+.PP
+For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too,
+receive or can get the source code.  And you must show them these
+terms so they know their rights.
+.PP
+Developers that use the \s-1GNU GPL\s0 protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+.PP
+For the developers' and authors' protection, the \s-1GPL\s0 clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the \s-1GPL\s0 requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+.PP
+Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the
+manufacturer can do so.  This is fundamentally incompatible with the
+aim of protecting users' freedom to change the software.  The
+systematic pattern of such abuse occurs in the area of products for
+individuals to use, which is precisely where it is most unacceptable.
+Therefore, we have designed this version of the \s-1GPL\s0 to prohibit the
+practice for those products.  If such problems arise substantially in
+other domains, we stand ready to extend this provision to those
+domains in future versions of the \s-1GPL,\s0 as needed to protect the
+freedom of users.
+.PP
+Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish
+to avoid the special danger that patents applied to a free program
+could make it effectively proprietary.  To prevent this, the \s-1GPL\s0
+assures that patents cannot be used to render the program non-free.
+.PP
+The precise terms and conditions for copying, distribution and
+modification follow.
+.SS "\s-1TERMS AND CONDITIONS\s0"
+.IX Subsection "TERMS AND CONDITIONS"
+.IP "0. Definitions." 4
+.IX Item "0. Definitions."
+\&\*(L"This License\*(R" refers to version 3 of the \s-1GNU\s0 General Public License.
+.Sp
+\&\*(L"Copyright\*(R" also means copyright-like laws that apply to other kinds
+of works, such as semiconductor masks.
+.Sp
+\&\*(L"The Program\*(R" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as \*(L"you\*(R".  \*(L"Licensees\*(R" and
+\&\*(L"recipients\*(R" may be individuals or organizations.
+.Sp
+To \*(L"modify\*(R" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of
+an exact copy.  The resulting work is called a \*(L"modified version\*(R" of
+the earlier work or a work \*(L"based on\*(R" the earlier work.
+.Sp
+A \*(L"covered work\*(R" means either the unmodified Program or a work based
+on the Program.
+.Sp
+To \*(L"propagate\*(R" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+.Sp
+To \*(L"convey\*(R" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user
+through a computer network, with no transfer of a copy, is not
+conveying.
+.Sp
+An interactive user interface displays \*(L"Appropriate Legal Notices\*(R" to
+the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+.IP "1. Source Code." 4
+.IX Item "1. Source Code."
+The \*(L"source code\*(R" for a work means the preferred form of the work for
+making modifications to it.  \*(L"Object code\*(R" means any non-source form
+of a work.
+.Sp
+A \*(L"Standard Interface\*(R" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+.Sp
+The \*(L"System Libraries\*(R" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+\&\*(L"Major Component\*(R", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+.Sp
+The \*(L"Corresponding Source\*(R" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+.Sp
+The Corresponding Source need not include anything that users can
+regenerate automatically from other parts of the Corresponding Source.
+.Sp
+The Corresponding Source for a work in source code form is that same
+work.
+.IP "2. Basic Permissions." 4
+.IX Item "2. Basic Permissions."
+All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+.Sp
+You may make, run and propagate covered works that you do not convey,
+without conditions so long as your license otherwise remains in force.
+You may convey covered works to others for the sole purpose of having
+them make modifications exclusively for you, or provide you with
+facilities for running those works, provided that you comply with the
+terms of this License in conveying all material for which you do not
+control copyright.  Those thus making or running the covered works for
+you must do so exclusively on your behalf, under your direction and
+control, on terms that prohibit them from making any copies of your
+copyrighted material outside their relationship with you.
+.Sp
+Conveying under any other circumstances is permitted solely under the
+conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+.IP "3. Protecting Users' Legal Rights From Anti-Circumvention Law." 4
+.IX Item "3. Protecting Users' Legal Rights From Anti-Circumvention Law."
+No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the \s-1WIPO\s0 copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+.Sp
+When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such
+circumvention is effected by exercising rights under this License with
+respect to the covered work, and you disclaim any intention to limit
+operation or modification of the work as a means of enforcing, against
+the work's users, your or third parties' legal rights to forbid
+circumvention of technological measures.
+.IP "4. Conveying Verbatim Copies." 4
+.IX Item "4. Conveying Verbatim Copies."
+You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+.Sp
+You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+.IP "5. Conveying Modified Source Versions." 4
+.IX Item "5. Conveying Modified Source Versions."
+You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these
+conditions:
+.RS 4
+.IP "a." 4
+.IX Item "a."
+The work must carry prominent notices stating that you modified it,
+and giving a relevant date.
+.IP "b." 4
+.IX Item "b."
+The work must carry prominent notices stating that it is released
+under this License and any conditions added under section 7.  This
+requirement modifies the requirement in section 4 to \*(L"keep intact all
+notices\*(R".
+.IP "c." 4
+.IX Item "c."
+You must license the entire work, as a whole, under this License to
+anyone who comes into possession of a copy.  This License will
+therefore apply, along with any applicable section 7 additional terms,
+to the whole of the work, and all its parts, regardless of how they
+are packaged.  This License gives no permission to license the work in
+any other way, but it does not invalidate such permission if you have
+separately received it.
+.IP "d." 4
+.IX Item "d."
+If the work has interactive user interfaces, each must display
+Appropriate Legal Notices; however, if the Program has interactive
+interfaces that do not display Appropriate Legal Notices, your work
+need not make them do so.
+.RE
+.RS 4
+.Sp
+A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+\&\*(L"aggregate\*(R" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+.RE
+.IP "6. Conveying Non-Source Forms." 4
+.IX Item "6. Conveying Non-Source Forms."
+You may convey a covered work in object code form under the terms of
+sections 4 and 5, provided that you also convey the machine-readable
+Corresponding Source under the terms of this License, in one of these
+ways:
+.RS 4
+.IP "a." 4
+.IX Item "a."
+Convey the object code in, or embodied in, a physical product
+(including a physical distribution medium), accompanied by the
+Corresponding Source fixed on a durable physical medium customarily
+used for software interchange.
+.IP "b." 4
+.IX Item "b."
+Convey the object code in, or embodied in, a physical product
+(including a physical distribution medium), accompanied by a written
+offer, valid for at least three years and valid for as long as you
+offer spare parts or customer support for that product model, to give
+anyone who possesses the object code either (1) a copy of the
+Corresponding Source for all the software in the product that is
+covered by this License, on a durable physical medium customarily used
+for software interchange, for a price no more than your reasonable
+cost of physically performing this conveying of source, or (2) access
+to copy the Corresponding Source from a network server at no charge.
+.IP "c." 4
+.IX Item "c."
+Convey individual copies of the object code with a copy of the written
+offer to provide the Corresponding Source.  This alternative is
+allowed only occasionally and noncommercially, and only if you
+received the object code with such an offer, in accord with subsection
+6b.
+.IP "d." 4
+.IX Item "d."
+Convey the object code by offering access from a designated place
+(gratis or for a charge), and offer equivalent access to the
+Corresponding Source in the same way through the same place at no
+further charge.  You need not require recipients to copy the
+Corresponding Source along with the object code.  If the place to copy
+the object code is a network server, the Corresponding Source may be
+on a different server (operated by you or a third party) that supports
+equivalent copying facilities, provided you maintain clear directions
+next to the object code saying where to find the Corresponding Source.
+Regardless of what server hosts the Corresponding Source, you remain
+obligated to ensure that it is available for as long as needed to
+satisfy these requirements.
+.IP "e." 4
+.IX Item "e."
+Convey the object code using peer-to-peer transmission, provided you
+inform other peers where the object code and Corresponding Source of
+the work are being offered to the general public at no charge under
+subsection 6d.
+.RE
+.RS 4
+.Sp
+A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+.Sp
+A \*(L"User Product\*(R" is either (1) a \*(L"consumer product\*(R", which means any
+tangible personal property which is normally used for personal,
+family, or household purposes, or (2) anything designed or sold for
+incorporation into a dwelling.  In determining whether a product is a
+consumer product, doubtful cases shall be resolved in favor of
+coverage.  For a particular product received by a particular user,
+\&\*(L"normally used\*(R" refers to a typical or common use of that class of
+product, regardless of the status of the particular user or of the way
+in which the particular user actually uses, or expects or is expected
+to use, the product.  A product is a consumer product regardless of
+whether the product has substantial commercial, industrial or
+non-consumer uses, unless such uses represent the only significant
+mode of use of the product.
+.Sp
+\&\*(L"Installation Information\*(R" for a User Product means any methods,
+procedures, authorization keys, or other information required to
+install and execute modified versions of a covered work in that User
+Product from a modified version of its Corresponding Source.  The
+information must suffice to ensure that the continued functioning of
+the modified object code is in no case prevented or interfered with
+solely because modification has been made.
+.Sp
+If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in \s-1ROM\s0).
+.Sp
+The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or
+updates for a work that has been modified or installed by the
+recipient, or for the User Product in which it has been modified or
+installed.  Access to a network may be denied when the modification
+itself materially and adversely affects the operation of the network
+or violates the rules and protocols for communication across the
+network.
+.Sp
+Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+.RE
+.IP "7. Additional Terms." 4
+.IX Item "7. Additional Terms."
+\&\*(L"Additional permissions\*(R" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+.Sp
+When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+.Sp
+Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders
+of that material) supplement the terms of this License with terms:
+.RS 4
+.IP "a." 4
+.IX Item "a."
+Disclaiming warranty or limiting liability differently from the terms
+of sections 15 and 16 of this License; or
+.IP "b." 4
+.IX Item "b."
+Requiring preservation of specified reasonable legal notices or author
+attributions in that material or in the Appropriate Legal Notices
+displayed by works containing it; or
+.IP "c." 4
+.IX Item "c."
+Prohibiting misrepresentation of the origin of that material, or
+requiring that modified versions of such material be marked in
+reasonable ways as different from the original version; or
+.IP "d." 4
+.IX Item "d."
+Limiting the use for publicity purposes of names of licensors or
+authors of the material; or
+.IP "e." 4
+.IX Item "e."
+Declining to grant rights under trademark law for use of some trade
+names, trademarks, or service marks; or
+.IP "f." 4
+.IX Item "f."
+Requiring indemnification of licensors and authors of that material by
+anyone who conveys the material (or modified versions of it) with
+contractual assumptions of liability to the recipient, for any
+liability that these contractual assumptions directly impose on those
+licensors and authors.
+.RE
+.RS 4
+.Sp
+All other non-permissive additional terms are considered \*(L"further
+restrictions\*(R" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+.Sp
+If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+.Sp
+Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions; the
+above requirements apply either way.
+.RE
+.IP "8. Termination." 4
+.IX Item "8. Termination."
+You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+.Sp
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+.Sp
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+.Sp
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+.IP "9. Acceptance Not Required for Having Copies." 4
+.IX Item "9. Acceptance Not Required for Having Copies."
+You are not required to accept this License in order to receive or run
+a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+.IP "10. Automatic Licensing of Downstream Recipients." 4
+.IX Item "10. Automatic Licensing of Downstream Recipients."
+Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+.Sp
+An \*(L"entity transaction\*(R" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+.Sp
+You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+.IP "11. Patents." 4
+.IX Item "11. Patents."
+A \*(L"contributor\*(R" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's \*(L"contributor version\*(R".
+.Sp
+A contributor's \*(L"essential patent claims\*(R" are all patent claims owned
+or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, \*(L"control\*(R" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+.Sp
+Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+.Sp
+In the following three paragraphs, a \*(L"patent license\*(R" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To \*(L"grant\*(R" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+.Sp
+If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  \*(L"Knowingly relying\*(R" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+.Sp
+If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+.Sp
+A patent license is \*(L"discriminatory\*(R" if it does not include within the
+scope of its coverage, prohibits the exercise of, or is conditioned on
+the non-exercise of one or more of the rights that are specifically
+granted under this License.  You may not convey a covered work if you
+are a party to an arrangement with a third party that is in the
+business of distributing software, under which you make payment to the
+third party based on the extent of your activity of conveying the
+work, and under which the third party grants, to any of the parties
+who would receive the covered work from you, a discriminatory patent
+license (a) in connection with copies of the covered work conveyed by
+you (or copies made from those copies), or (b) primarily for and in
+connection with specific products or compilations that contain the
+covered work, unless you entered into that arrangement, or that patent
+license was granted, prior to 28 March 2007.
+.Sp
+Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+.IP "12. No Surrender of Others' Freedom." 4
+.IX Item "12. No Surrender of Others' Freedom."
+If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey
+a covered work so as to satisfy simultaneously your obligations under
+this License and any other pertinent obligations, then as a
+consequence you may not convey it at all.  For example, if you agree
+to terms that obligate you to collect a royalty for further conveying
+from those to whom you convey the Program, the only way you could
+satisfy both those terms and this License would be to refrain entirely
+from conveying the Program.
+.IP "13. Use with the \s-1GNU\s0 Affero General Public License." 4
+.IX Item "13. Use with the GNU Affero General Public License."
+Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the \s-1GNU\s0 Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the \s-1GNU\s0 Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+.IP "14. Revised Versions of this License." 4
+.IX Item "14. Revised Versions of this License."
+The Free Software Foundation may publish revised and/or new versions
+of the \s-1GNU\s0 General Public License from time to time.  Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+.Sp
+Each version is given a distinguishing version number.  If the Program
+specifies that a certain numbered version of the \s-1GNU\s0 General Public
+License \*(L"or any later version\*(R" applies to it, you have the option of
+following the terms and conditions either of that numbered version or
+of any later version published by the Free Software Foundation.  If
+the Program does not specify a version number of the \s-1GNU\s0 General
+Public License, you may choose any version ever published by the Free
+Software Foundation.
+.Sp
+If the Program specifies that a proxy can decide which future versions
+of the \s-1GNU\s0 General Public License can be used, that proxy's public
+statement of acceptance of a version permanently authorizes you to
+choose that version for the Program.
+.Sp
+Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+.IP "15. Disclaimer of Warranty." 4
+.IX Item "15. Disclaimer of Warranty."
+\&\s-1THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.\s0  \s-1EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \*(L"AS IS\*(R" WITHOUT
+WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE.\s0  \s-1THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU.\s0  \s-1SHOULD THE PROGRAM PROVE
+DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
+CORRECTION.\s0
+.IP "16. Limitation of Liability." 4
+.IX Item "16. Limitation of Liability."
+\&\s-1IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
+CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM\s0 (\s-1INCLUDING BUT
+NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
+LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
+TO OPERATE WITH ANY OTHER PROGRAMS\s0), \s-1EVEN IF SUCH HOLDER OR OTHER
+PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\s0
+.IP "17. Interpretation of Sections 15 and 16." 4
+.IX Item "17. Interpretation of Sections 15 and 16."
+If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+.SS "\s-1END OF TERMS AND CONDITIONS\s0"
+.IX Subsection "END OF TERMS AND CONDITIONS"
+.SS "How to Apply These Terms to Your New Programs"
+.IX Subsection "How to Apply These Terms to Your New Programs"
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+.PP
+To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the \*(L"copyright\*(R" line and a pointer to where the full notice is found.
+.PP
+.Vb 2
+\&        <one line to give the program\*(Aqs name and a brief idea of what it does.>  
+\&        Copyright (C) <year> <name of author>
+\&        
+\&        This program is free software: you can redistribute it and/or modify
+\&        it under the terms of the GNU General Public License as published by
+\&        the Free Software Foundation, either version 3 of the License, or (at
+\&        your option) any later version.
+\&        
+\&        This program is distributed in the hope that it will be useful, but
+\&        WITHOUT ANY WARRANTY; without even the implied warranty of
+\&        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+\&        General Public License for more details.
+\&        
+\&        You should have received a copy of the GNU General Public License
+\&        along with this program.  If not, see <http://www.gnu.org/licenses/>.
+.Ve
+.PP
+Also add information on how to contact you by electronic and paper mail.
+.PP
+If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+.PP
+.Vb 4
+\&        <program> Copyright (C) <year> <name of author> 
+\&        This program comes with ABSOLUTELY NO WARRANTY; for details type "show w".
+\&        This is free software, and you are welcome to redistribute it
+\&        under certain conditions; type "show c" for details.
+.Ve
+.PP
+The hypothetical commands \fBshow w\fR and \fBshow c\fR should show
+the appropriate parts of the General Public License.  Of course, your
+program's commands might be different; for a \s-1GUI\s0 interface, you would
+use an \*(L"about box\*(R".
+.PP
+You should also get your employer (if you work as a programmer) or school,
+if any, to sign a \*(L"copyright disclaimer\*(R" for the program, if necessary.
+For more information on this, and how to apply and follow the \s-1GNU GPL,\s0 see
+<\fBhttp://www.gnu.org/licenses/\fR>.
+.PP
+The \s-1GNU\s0 General Public License does not permit incorporating your
+program into proprietary programs.  If your program is a subroutine
+library, you may consider it more useful to permit linking proprietary
+applications with the library.  If this is what you want to do, use
+the \s-1GNU\s0 Lesser General Public License instead of this License.  But
+first, please read <\fBhttp://www.gnu.org/philosophy/why\-not\-lgpl.html\fR>.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7).
+.SH "COPYRIGHT"
+.IX Header "COPYRIGHT"
+Copyright (c) 2007 Free Software Foundation, Inc.
+.PP
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.